From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19056 invoked by alias); 5 Nov 2012 17:49:19 -0000 Received: (qmail 19043 invoked by uid 22791); 5 Nov 2012 17:49:18 -0000 X-SWARE-Spam-Status: No, hits=-4.8 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD,TW_FV X-Spam-Check-By: sourceware.org Received: from mail-vc0-f175.google.com (HELO mail-vc0-f175.google.com) (209.85.220.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 05 Nov 2012 17:49:10 +0000 Received: by mail-vc0-f175.google.com with SMTP id p1so6606162vcq.20 for ; Mon, 05 Nov 2012 09:49:08 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:from:date:message-id:subject:to:cc:content-type :x-system-of-record:x-gm-message-state; bh=RdnU1HYR2u2JuDPzGRyeTm51JE4NqhOfD2Ugo/hnPIE=; b=GBnLBaQi30BzhckPjQRqrvyaEUHKkfM6GbKfnDnKOqlye7Zk8UBHHgevlj9ZjxGnKT t0bwowo/sU8tQont8v8BpdGhT65nyJSrp85seup33ob86fyxJ2dpNKgDeW65lETY8DTH OvHpzuLny7ZyNxS6RV4tTLr8gapc2UOjqGgQZLEnEyJJoSI/O7aAo6VbZ5TswcFbrlkZ +NY9XsYemr8GMJIG7DpoPuiPdTpeUozJSgVPRJ1rgpjhrqiAN4+8JCgKwZAyUV8rUg5Y NbTQmT8POdHudBOY0mpE86fI5nuVY3geP1epea1VDqQ6jahKSczAXuF6Ky9GLQQv8Tia S6Vw== Received: by 10.58.12.231 with SMTP id b7mr10494072vec.31.1352137748331; Mon, 05 Nov 2012 09:49:08 -0800 (PST) MIME-Version: 1.0 Received: by 10.58.247.170 with HTTP; Mon, 5 Nov 2012 09:48:47 -0800 (PST) From: Caroline Tice Date: Mon, 05 Nov 2012 17:49:00 -0000 Message-ID: Subject: [PATCH] Vtable pointer verification, gcc changes (patch 2 of 2) To: gcc-patches@gcc.gnu.org Cc: Caroline Tice Content-Type: multipart/mixed; boundary=047d7b41bf322d3b7f04cdc31a94 X-System-Of-Record: true X-Gm-Message-State: ALoCoQmCtKaelsZ/9/NweiJrwJVaAy4xmrIELzeXttjJW4Dz9t/SgugvjlsFRF0sgV2zS247K2fYZP1EgFXQsorckThZkWLQ/SS/avvM2YPBdvyRWxynqG6rlty0e2+I2cYhAB6x3XCN0e1yE6Isxytkfd+QQuYCz4JK0QyYmP8bBPYKaLWHLsOfzPHJoBvgWqiMa9TeaHQM X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-11/txt/msg00404.txt.bz2 --047d7b41bf322d3b7f04cdc31a94 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 9925 As requested, I have split the original patch into two parts: GCC changes and runtime library changes. The attached patch is fore the gcc changes. -- Caroline Tice cmtice@google.com 2012-11-05 Caroline Tice * tree.h (save_vtable_map_decl): New function decl. * tree-pass.h (pass_vtable_verify): New pass declaration. * cp/init.c (build_vtbl_address): Remove 'static' qualifier from function declaration and definition. * cp/class.c (finish_struct_1): Add call to vtv_save_class_info, if the vtable verify flag is set. * cp/Make-lang.in: Add vtable-class-hierarchy.o to list of object files. Add definition for building vtable-class-hierarchy.o. * cp/pt.c (mark_class_instantiated): Add call to vtv_save_class_info if the vtable verify flag is set. * cp/decl2 (start_objects): Remove 'static' qualifier from function declaratin and definition. Add new paramater, 'extra_name'. Change 'type' var from char array to char *. Call xmalloc & free for 'type'. Add 'extra_name' to 'type' string. (finish_objects): Remove 'static' qualifier from function declaration and definition. Change return type from void to tree. Make function return early if we're doing vtable verification and the function is a vtable verification constructor init function. Make this function return 'fn'. (generate_ctor_or_dtor_function): Add third argument to calls to start_objects. (cp_write_global_declarations): Add calls to vtv_recover_class_info, vtv_compute_class_hierarchy_transitive_closure, and vtv_generate_init_routine, if the vtable verify flag is set. * cp/config-lang.in (gtfiles): Add vtable-class-hierarchy.c to the list of gtfiles. * cp/vtable-class-hierarchy.c: New file. * cp/mangle.c (get_mangled_id): Remove static qualifier from function definition. * cp/cp-tree.h: Add extern function declarations for start_objects, finish_objects, build_vtbl_address, get_mangled_id, vtv_compute_class_hierarchy_transitive_closure, vtv_generate_init_routine, vtv_save_class_info and vtv_recover_class_info. * timevar.def: Add TV_VTABLE_VERIFICATION. * flag-types.h: Add enum vtv_priority defintion. * tree-vtable-verify.c: New file. * tree-vtable-verify.h: New file. * common.opt: Add definitions for fvtable-verify= and its string options (vtv_priority enum values). * varasm.c (assemble_variable): Check to see if the variable is a vtable map variable, and if so, put it into the vtable map variable section, and make it comdat. (assemble_vtv_preinit_initializer): New function, to put the vtable verification constructor initialization function in the preinit array, if appropriate. * output.h: Add extern declaration for assemble_vtv_preinit_initializer. * Makefile.in: Add tree-vtable-verify.o to list of OBJS. Add build rule for tree-vtable-verify.o Add tre-vtable-verify.c to list of source files. * passes.c (init_optimization_passes): Add pass_vtable_verify. On Thu, Nov 1, 2012 at 1:07 PM, Caroline Tice wrote: > We have been developing a new security hardening feature for GCC that > is designed to detect and handle (during program execution) when a > vtable pointer that is about to be used for a virtual function call is > not a valid vtable pointer for that call (i.e. it has become > corrupted, possibly due to a hacker attack). We gave a presentation > on this work at the Gnu Tools Cauldron in Prague last July. We now > have the implementation fully working and are submitting this patch > for review. We would like to get this into the next release of GCC if > possible. > > The general idea is to collect class hierarchy and vtable pointer data > while parsing the classes, then use this data to generate (at runtime) > sets of valid vtable pointers, one for each class. We also find every > virtual function call and insert a verification call before the > virtual function call. The verification call takes the set of valid > vtable pointers for the declared class of the object, and the actual > vtable pointer in the object. If the vtable pointer in the object is > in the set of valid vtable pointers for the object, then verification > succeeds and the virtual call is allowed. Otherwise verification > fails and the program aborts. > > We have a written a more detailed design document, which I am also > attaching to this email (GCCVtableSecurityHardeningProposal.txt). > > The implementation can be divided into roughly two parts: > modifications to the main gcc compiler, for things that happen at > compile time (collecting the class hierarchy & vtable information; > generating the runtime calls to build the data sets from this data; > inserting calls to the verification function); and modifications to > the runtime, i.e. functions that go into libstdc++ for building the > data sets, for doing the verification against the data sets, for > protecting the memory where the data sets reside, etc.). > > Please let me know if there is any more information you need, or if > you have any questions about this patch. > > -- Caroline Tice > cmtice@google.com > > libstdc++/ChangeLog > > 2012-11-01 Caroline Tice > > * src/Makefile.am: Add libvtv___la_LIBDD definition; update CXXLINK > to search in libvtv___la_LIBADD and to link in libvtv_init. > * src/Makefile.in: Regenerate. > * libsupc++/Makefile.am: Add libvtv_init.la and libvtv_stubs.la to > toolexeclib_LTLIBRARIES. Add vtv_rts.cc, vtv_malloc.cc and > vtv_utils.cc to sources. Define vtv_init_sources and > vtv_stubs_sources. Also define libvtv_init_la_SOURCES and > libvtv_stubs_la_sources. > * libsupc++/Makefile.in: Regenerate. > * libsupc++/vtv_rts.cc: New file. > * libsupc++/vtv_malloc.h: New file. > * libsupc++/vtv_rts.h: New file. > * libsupc++/vtv_fail.h: New file. > * libsupc++/vtv_set.h: New file. > * libsupc++/vtv_stubs.cc: New file. > * libsupc++/vtv_utils.cc: New file. > * libcupc++/vtv_utils.h: New file. > * libsupc++/vtv_init.cc: New file. > * libsupc++/vtv_malloc.cc: New file. > * config/abi/pre/gnu.ver (GLIBCXX_3.4.18): Add vtable verification > functions and vtable map variables to library export list. > > gcc/ChangeLog: > > 2012-11-01 Caroline Tice > > * tree.h (save_vtable_map_decl): New function decl. > * tree-pass.h (pass_vtable_verify): New pass declaration. > * cp/init.c (build_vtbl_address): Remove 'static' qualifier from > function declaration and definition. > * cp/class.c (finish_struct_1): Add call to vtv_save_class_info, > if the vtable verify flag is set. > * cp/Make-lang.in: Add vtable-class-hierarchy.o to list of object > files. Add definition for building vtable-class-hierarchy.o. > * cp/pt.c (mark_class_instantiated): Add call to vtv_save_class_info > if the vtable verify flag is set. > * cp/decl2 (start_objects): Remove 'static' qualifier from function > declaratin and definition. Add new paramater, 'extra_name'. Change > 'type' var from char array to char *. Call xmalloc & free for 'type'. > Add 'extra_name' to 'type' string. > (finish_objects): Remove 'static' qualifier from function declaration > and definition. Change return type from void to tree. Make function > return early if we're doing vtable verification and the function is > a vtable verification constructor init function. Make this function > return 'fn'. > (generate_ctor_or_dtor_function): Add third argument to calls to > start_objects. > (cp_write_global_declarations): Add calls to vtv_recover_class_info, > vtv_compute_class_hierarchy_transitive_closure, and > vtv_generate_init_routine, if the vtable verify flag is set. > * cp/config-lang.in (gtfiles): Add vtable-class-hierarchy.c to the > list of gtfiles. > * cp/vtable-class-hierarchy.c: New file. > * cp/mangle.c (get_mangled_id): Remove static qualifier from function > definition. > * cp/cp-tree.h: Add extern function declarations for start_objects, > finish_objects, build_vtbl_address, get_mangled_id, > vtv_compute_class_hierarchy_transitive_closure, > vtv_generate_init_routine, vtv_save_class_info and > vtv_recover_class_info. > * timevar.def: Add TV_VTABLE_VERIFICATION. > * flag-types.h: Add enum vtv_priority defintion. > * tree-vtable-verify.c: New file. > * tree-vtable-verify.h: New file. > * common.opt: Add definitions for fvtable-verify= and its string > options (vtv_priority enum values). > * varasm.c (assemble_variable): Check to see if the variable is a > vtable map variable, and if so, put it into the vtable map variable > section, and make it comdat. > (assemble_vtv_preinit_initializer): New function, to put the > vtable verification constructor initialization function in the preinit > array, if appropriate. > * output.h: Add extern declaration for > assemble_vtv_preinit_initializer. > * Makefile.in: Add tree-vtable-verify.o to list of OBJS. Add build > rule for tree-vtable-verify.o Add tre-vtable-verify.c to list of source > files. > * passes.c (init_optimization_passes): Add pass_vtable_verify. --047d7b41bf322d3b7f04cdc31a94 Content-Type: application/octet-stream; name="fsf-vtable-verification.gcc.patch" Content-Disposition: attachment; filename="fsf-vtable-verification.gcc.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h95vtl6w2 Content-length: 126059 SW5kZXg6IGdjYy90cmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g Z2NjL3RyZWUuaAkocmV2aXNpb24gMTkyNTAzKQorKysgZ2NjL3RyZWUuaAko d29ya2luZyBjb3B5KQpAQCAtNjQzNyw2ICs2NDM3LDkgQEAgaXNfbGFuZ19z cGVjaWZpYyAodHJlZSB0KQogLyogSW4gZ2ltcGxlLWxvdy5jLiAgKi8KIGV4 dGVybiBib29sIGJsb2NrX21heV9mYWxsdGhydSAoY29uc3RfdHJlZSk7CiAK Ky8qIEluIHRyZWUtdnRhYmxlLXNlY3VyaXR5LmMgKi8KK2V4dGVybiB2b2lk IHNhdmVfdnRhYmxlX21hcF9kZWNsICh0cmVlKTsKKwogDAogLyogRnVuY3Rp b25hbCBpbnRlcmZhY2UgdG8gdGhlIGJ1aWx0aW4gZnVuY3Rpb25zLiAgKi8K IApJbmRleDogZ2NjL3RyZWUtcGFzcy5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGdjYy90cmVlLXBhc3MuaAkocmV2aXNpb24gMTkyNTAzKQorKysg Z2NjL3RyZWUtcGFzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTgsNiArMzU4 LDcgQEAgZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc190bV9l ZAogZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19zcGxpdF9m dW5jdGlvbnM7CiBleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNz X2ZlZWRiYWNrX3NwbGl0X2Z1bmN0aW9uczsKIGV4dGVybiBzdHJ1Y3QgZ2lt cGxlX29wdF9wYXNzIHBhc3Nfc3RyZW5ndGhfcmVkdWN0aW9uOworZXh0ZXJu IHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc192dGFibGVfdmVyaWZ5Owog CiAvKiBJUEEgUGFzc2VzICovCkluZGV4OiBnY2MvY3AvaW5pdC5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9jcC9pbml0LmMJKHJldmlzaW9u IDE5MjUwMykKKysrIGdjYy9jcC9pbml0LmMJKHdvcmtpbmcgY29weSkKQEAg LTQ1LDcgKzQ1LDYgQEAgc3RhdGljIHRyZWUgaW5pdGlhbGl6aW5nX2NvbnRl eHQgKHRyZWUpOwogc3RhdGljIHZvaWQgZXhwYW5kX2NsZWFudXBfZm9yX2Jh c2UgKHRyZWUsIHRyZWUpOwogc3RhdGljIHRyZWUgZGZzX2luaXRpYWxpemVf dnRibF9wdHJzICh0cmVlLCB2b2lkICopOwogc3RhdGljIHRyZWUgYnVpbGRf ZmllbGRfbGlzdCAodHJlZSwgdHJlZSwgaW50ICopOwotc3RhdGljIHRyZWUg YnVpbGRfdnRibF9hZGRyZXNzICh0cmVlKTsKIHN0YXRpYyBpbnQgZGlhZ25v c2VfdW5pbml0aWFsaXplZF9jc3Rfb3JfcmVmX21lbWJlcl8xICh0cmVlLCB0 cmVlLCBib29sLCBib29sKTsKIAogLyogV2UgYXJlIGFib3V0IHRvIGdlbmVy YXRlIHNvbWUgY29tcGxleCBpbml0aWFsaXphdGlvbiBjb2RlLgpAQCAtMTEw NSw3ICsxMTA0LDcgQEAgZW1pdF9tZW1faW5pdGlhbGl6ZXJzICh0cmVlIG1l bV9pbml0cykKIC8qIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHZ0YWJs ZSAoaS5lLiwgdGhlIHZhbHVlIHRoYXQgc2hvdWxkIGJlCiAgICBhc3NpZ25l ZCB0byB0aGUgdnB0cikgZm9yIEJJTkZPLiAgKi8KIAotc3RhdGljIHRyZWUK K3RyZWUKIGJ1aWxkX3Z0YmxfYWRkcmVzcyAodHJlZSBiaW5mbykKIHsKICAg dHJlZSBiaW5mb19mb3IgPSBiaW5mbzsKSW5kZXg6IGdjYy9jcC9jbGFzcy5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9jcC9jbGFzcy5jCShy ZXZpc2lvbiAxOTI1MDMpCisrKyBnY2MvY3AvY2xhc3MuYwkod29ya2luZyBj b3B5KQpAQCAtNjI1MSw2ICs2MjUxLDkgQEAgZmluaXNoX3N0cnVjdF8xICh0 cmVlIHQpCiAKICAgbWF5YmVfc3VwcHJlc3NfZGVidWdfaW5mbyAodCk7CiAK KyAgaWYgKGZsYWdfdnRhYmxlX3ZlcmlmeSkKKyAgICB2dHZfc2F2ZV9jbGFz c19pbmZvICh0KTsKKwogICBkdW1wX2NsYXNzX2hpZXJhcmNoeSAodCk7CiAK ICAgLyogRmluaXNoIGRlYnVnZ2luZyBvdXRwdXQgZm9yIHRoaXMgdHlwZS4g ICovCkluZGV4OiBnY2MvY3AvTWFrZS1sYW5nLmluCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGdjYy9jcC9NYWtlLWxhbmcuaW4JKHJldmlzaW9uIDE5 MjUwMykKKysrIGdjYy9jcC9NYWtlLWxhbmcuaW4JKHdvcmtpbmcgY29weSkK QEAgLTgyLDcgKzgyLDcgQEAgQ1hYX0FORF9PQkpDWFhfT0JKUyA9IGNwL2Nh bGwubyBjcC9kZWNsLgogIGNwL3R5cGVjay5vIGNwL2N2dC5vIGNwL2V4Y2Vw dC5vIGNwL2ZyaWVuZC5vIGNwL2luaXQubyBjcC9tZXRob2QubyBcCiAgY3Av c2VhcmNoLm8gY3Avc2VtYW50aWNzLm8gY3AvdHJlZS5vIGNwL3JlcG8ubyBj cC9kdW1wLm8gY3Avb3B0aW1pemUubyBcCiAgY3AvbWFuZ2xlLm8gY3AvY3At b2JqY3AtY29tbW9uLm8gY3AvbmFtZS1sb29rdXAubyBjcC9jeHgtcHJldHR5 LXByaW50Lm8gXAotIGNwL2NwLWdpbXBsaWZ5Lm8gJChDWFhfQ19PQkpTKQor IGNwL2NwLWdpbXBsaWZ5Lm8gY3AvdnRhYmxlLWNsYXNzLWhpZXJhcmNoeS5v ICQoQ1hYX0NfT0JKUykKIAogIyBMYW5ndWFnZS1zcGVjaWZpYyBvYmplY3Qg ZmlsZXMgZm9yIEMrKy4KIENYWF9PQkpTID0gY3AvY3AtbGFuZy5vIGMtZmFt aWx5L3N0dWItb2JqYy5vICQoQ1hYX0FORF9PQkpDWFhfT0JKUykKQEAgLTM0 MCw3ICszNDAsMTIgQEAgY3AvcGFyc2VyLm86IGNwL3BhcnNlci5jICQoQ1hY X1RSRUVfSCkgJAogICBjLWZhbWlseS9jLW9iamMuaCB0cmVlLXByZXR0eS1w cmludC5oICQoQ1hYX1BBUlNFUl9IKSAkKFRJTUVWQVJfSCkKIGNwL2NwLWdp bXBsaWZ5Lm86IGNwL2NwLWdpbXBsaWZ5LmMgJChDWFhfVFJFRV9IKSAkKENf Q09NTU9OX0gpIFwKIAkkKFRNX0gpIGNvcmV0eXBlcy5oIHBvaW50ZXItc2V0 LmggdHJlZS1pdGVyYXRvci5oICQoU1BMQVlfVFJFRV9IKQotCitjcC92dGFi bGUtY2xhc3MtaGllcmFyY2h5Lm86IGNwL3Z0YWJsZS1jbGFzcy1oaWVyYXJj aHkuYyBcCisgICQoVE1fSCkgJChUSU1FVkFSX0gpICQoQ1hYX1RSRUVfSCkg aW50bC5oICQoQ1hYX1BBUlNFUl9IKSBjcC9kZWNsLmggXAorICAkKEZMQUdT X0gpICQoRElBR05PU1RJQ19DT1JFX0gpIG91dHB1dC5oICQoQ0dSQVBIX0gp IGMtZmFtaWx5L2MtY29tbW9uLmggXAorICBjLWZhbWlseS9jLW9iamMuaCAk KFBMVUdJTl9IKSBcCisgIHRyZWUtaXRlcmF0b3IuaCB0cmVlLXZ0YWJsZS12 ZXJpZnkuaCAkKEdJTVBMRV9IKSBcCisgIGd0LWNwLXZ0YWJsZS1jbGFzcy1o aWVyYXJjaHkuaAogY3AvbmFtZS1sb29rdXAubzogY3AvbmFtZS1sb29rdXAu YyAkKENPTkZJR19IKSAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaCBcCiAJJChU TV9IKSAkKENYWF9UUkVFX0gpICQoVElNRVZBUl9IKSBndC1jcC1uYW1lLWxv b2t1cC5oIFwKIAkkKERJQUdOT1NUSUNfQ09SRV9IKSAkKEZMQUdTX0gpIGRl YnVnLmggcG9pbnRlci1zZXQuaApJbmRleDogZ2NjL2NwL3B0LmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZ2NjL2NwL3B0LmMJKHJldmlzaW9uIDE5 MjUwMykKKysrIGdjYy9jcC9wdC5jCSh3b3JraW5nIGNvcHkpCkBAIC0xNzg4 Miw2ICsxNzg4MiwxMCBAQCBtYXJrX2NsYXNzX2luc3RhbnRpYXRlZCAodHJl ZSB0LCBpbnQgZXh0CiAgIGlmICghIGV4dGVybl9wKQogICAgIHsKICAgICAg IENMQVNTVFlQRV9ERUJVR19SRVFVRVNURUQgKHQpID0gMTsKKworICAgICAg aWYgKGZsYWdfdnRhYmxlX3ZlcmlmeSkKKyAgICAgICAgdnR2X3NhdmVfY2xh c3NfaW5mbyAodCk7CisKICAgICAgIHJlc3Rfb2ZfdHlwZV9jb21waWxhdGlv biAodCwgMSk7CiAgICAgfQogfQpJbmRleDogZ2NjL2NwL2RlY2wyLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL2NwL2RlY2wyLmMJKHJldmlz aW9uIDE5MjUwMykKKysrIGdjYy9jcC9kZWNsMi5jCSh3b3JraW5nIGNvcHkp CkBAIC02OSw4ICs2OSw2IEBAIHR5cGVkZWYgc3RydWN0IHByaW9yaXR5X2lu Zm9fcyB7CiBzdGF0aWMgdm9pZCBtYXJrX3Z0YWJsZV9lbnRyaWVzICh0cmVl KTsKIHN0YXRpYyBib29sIG1heWJlX2VtaXRfdnRhYmxlcyAodHJlZSk7CiBz dGF0aWMgYm9vbCBhY2NlcHRhYmxlX2phdmFfdHlwZSAodHJlZSk7Ci1zdGF0 aWMgdHJlZSBzdGFydF9vYmplY3RzIChpbnQsIGludCk7Ci1zdGF0aWMgdm9p ZCBmaW5pc2hfb2JqZWN0cyAoaW50LCBpbnQsIHRyZWUpOwogc3RhdGljIHRy ZWUgc3RhcnRfc3RhdGljX3N0b3JhZ2VfZHVyYXRpb25fZnVuY3Rpb24gKHVu c2lnbmVkKTsKIHN0YXRpYyB2b2lkIGZpbmlzaF9zdGF0aWNfc3RvcmFnZV9k dXJhdGlvbl9mdW5jdGlvbiAodHJlZSk7CiBzdGF0aWMgcHJpb3JpdHlfaW5m byBnZXRfcHJpb3JpdHlfaW5mbyAoaW50KTsKQEAgLTI5NjUsMTIgKzI5NjMs MTIgQEAgZ2VuZXJhdGVfdGxzX3dyYXBwZXIgKHRyZWUgZm4pCiAvKiBTdGFy dCB0aGUgcHJvY2VzcyBvZiBydW5uaW5nIGEgcGFydGljdWxhciBzZXQgb2Yg Z2xvYmFsIGNvbnN0cnVjdG9ycwogICAgb3IgZGVzdHJ1Y3RvcnMuICBTdWJy b3V0aW5lIG9mIGRvX1tjZF10b3JzLiAgKi8KIAotc3RhdGljIHRyZWUKLXN0 YXJ0X29iamVjdHMgKGludCBtZXRob2RfdHlwZSwgaW50IGluaXRwKQordHJl ZQorc3RhcnRfb2JqZWN0cyAoaW50IG1ldGhvZF90eXBlLCBpbnQgaW5pdHAs IGNvbnN0IGNoYXIgKmV4dHJhX25hbWUpCiB7CiAgIHRyZWUgYm9keTsKICAg dHJlZSBmbmRlY2w7Ci0gIGNoYXIgdHlwZVsxNF07CisgIGNoYXIgKnR5cGUg PSBOVUxMOwogCiAgIC8qIE1ha2UgY3RvciBvciBkdG9yIGZ1bmN0aW9uLiAg TUVUSE9EX1RZUEUgbWF5IGJlICdJJyBvciAnRCcuICAqLwogCkBAIC0yOTg0 LDE1ICsyOTgyLDIyIEBAIHN0YXJ0X29iamVjdHMgKGludCBtZXRob2RfdHlw ZSwgaW50IGluaXQKICAgICAgIGpvaW5lciA9ICdfJzsKICNlbmRpZgogCi0g ICAgICBzcHJpbnRmICh0eXBlLCAic3ViXyVjJWMlLjV1IiwgbWV0aG9kX3R5 cGUsIGpvaW5lciwgaW5pdHApOworICAgICAgdHlwZSA9IChjaGFyICopIHht YWxsb2MgKCgxNyArIHN0cmxlbiAoZXh0cmFfbmFtZSkpICogc2l6ZW9mIChj aGFyKSk7CisgICAgICBzcHJpbnRmICh0eXBlLCAic3ViXyVjJWMlLjV1JXMi LCBtZXRob2RfdHlwZSwgam9pbmVyLCBpbml0cCwgZXh0cmFfbmFtZSk7CiAg ICAgfQogICBlbHNlCi0gICAgc3ByaW50ZiAodHlwZSwgInN1Yl8lYyIsIG1l dGhvZF90eXBlKTsKKyAgICB7CisgICAgICB0eXBlID0gKGNoYXIgKikgeG1h bGxvYyAoNSAqIHNpemVvZiAoY2hhcikpOworICAgICAgc3ByaW50ZiAodHlw ZSwgInN1Yl8lYyIsIG1ldGhvZF90eXBlKTsKKyAgICB9CiAKICAgZm5kZWNs ID0gYnVpbGRfbGFuZ19kZWNsIChGVU5DVElPTl9ERUNMLAogCQkJICAgIGdl dF9maWxlX2Z1bmN0aW9uX25hbWUgKHR5cGUpLAogCQkJICAgIGJ1aWxkX2Z1 bmN0aW9uX3R5cGVfbGlzdCAodm9pZF90eXBlX25vZGUsCiAJCQkJCQkgICAg ICBOVUxMX1RSRUUpKTsKKworICBmcmVlICh0eXBlKTsKKwogICBzdGFydF9w cmVwYXJzZWRfZnVuY3Rpb24gKGZuZGVjbCwgLyphdHRycz0qL05VTExfVFJF RSwgU0ZfUFJFX1BBUlNFRCk7CiAKICAgVFJFRV9QVUJMSUMgKGN1cnJlbnRf ZnVuY3Rpb25fZGVjbCkgPSAwOwpAQCAtMzAxOCw3ICszMDIzLDcgQEAgc3Rh cnRfb2JqZWN0cyAoaW50IG1ldGhvZF90eXBlLCBpbnQgaW5pdAogLyogRmlu aXNoIHRoZSBwcm9jZXNzIG9mIHJ1bm5pbmcgYSBwYXJ0aWN1bGFyIHNldCBv ZiBnbG9iYWwgY29uc3RydWN0b3JzCiAgICBvciBkZXN0cnVjdG9ycy4gIFN1 YnJvdXRpbmUgb2YgZG9fW2NkXXRvcnMuICAqLwogCi1zdGF0aWMgdm9pZAor dHJlZQogZmluaXNoX29iamVjdHMgKGludCBtZXRob2RfdHlwZSwgaW50IGlu aXRwLCB0cmVlIGJvZHkpCiB7CiAgIHRyZWUgZm47CkBAIC0zMDMxLDYgKzMw MzYsMTAgQEAgZmluaXNoX29iamVjdHMgKGludCBtZXRob2RfdHlwZSwgaW50 IGluaQogICAgIHsKICAgICAgIERFQ0xfU1RBVElDX0NPTlNUUlVDVE9SIChm bikgPSAxOwogICAgICAgZGVjbF9pbml0X3ByaW9yaXR5X2luc2VydCAoZm4s IGluaXRwKTsKKworICAgICAgaWYgKGZsYWdfdnRhYmxlX3ZlcmlmeQorICAg ICAgICAgICYmIHN0cnN0ciAoSURFTlRJRklFUl9QT0lOVEVSIChERUNMX05B TUUgKGZuKSksICIudnRhYmxlIikpCisgICAgICAgIHJldHVybiBmbjsKICAg ICB9CiAgIGVsc2UKICAgICB7CkBAIC0zMDM5LDYgKzMwNDgsNyBAQCBmaW5p c2hfb2JqZWN0cyAoaW50IG1ldGhvZF90eXBlLCBpbnQgaW5pCiAgICAgfQog CiAgIGV4cGFuZF9vcl9kZWZlcl9mbiAoZm4pOworICByZXR1cm4gZm47CiB9 CiAKIC8qIFRoZSBuYW1lcyBvZiB0aGUgcGFyYW1ldGVycyB0byB0aGUgZnVu Y3Rpb24gY3JlYXRlZCB0byBoYW5kbGUKQEAgLTM1NjEsNyArMzU3MSw3IEBA IGdlbmVyYXRlX2N0b3Jfb3JfZHRvcl9mdW5jdGlvbiAoYm9vbCBjb24KICAg aWYgKGNfZGlhbGVjdF9vYmpjICgpICYmIChwcmlvcml0eSA9PSBERUZBVUxU X0lOSVRfUFJJT1JJVFkpCiAgICAgICAmJiBjb25zdHJ1Y3Rvcl9wICYmIG9i amNfc3RhdGljX2luaXRfbmVlZGVkX3AgKCkpCiAgICAgewotICAgICAgYm9k eSA9IHN0YXJ0X29iamVjdHMgKGZ1bmN0aW9uX2tleSwgcHJpb3JpdHkpOwor ICAgICAgYm9keSA9IHN0YXJ0X29iamVjdHMgKGZ1bmN0aW9uX2tleSwgcHJp b3JpdHksICIiKTsKICAgICAgIG9iamNfZ2VuZXJhdGVfc3RhdGljX2luaXRf Y2FsbCAoTlVMTF9UUkVFKTsKICAgICB9CiAKQEAgLTM1NzUsNyArMzU4NSw3 IEBAIGdlbmVyYXRlX2N0b3Jfb3JfZHRvcl9mdW5jdGlvbiAoYm9vbCBjb24K IAkgIHRyZWUgY2FsbDsKIAogCSAgaWYgKCEgYm9keSkKLQkgICAgYm9keSA9 IHN0YXJ0X29iamVjdHMgKGZ1bmN0aW9uX2tleSwgcHJpb3JpdHkpOworCSAg ICBib2R5ID0gc3RhcnRfb2JqZWN0cyAoZnVuY3Rpb25fa2V5LCBwcmlvcml0 eSwgIiIpOwogCiAJICBjYWxsID0gY3BfYnVpbGRfZnVuY3Rpb25fY2FsbF9u YXJ5IChmbmRlY2wsIHRmX3dhcm5pbmdfb3JfZXJyb3IsCiAJCQkJCSAgICAg IGJ1aWxkX2ludF9jc3QgKE5VTExfVFJFRSwKQEAgLTQyODMsOCArNDI5Mywy MiBAQCBjcF93cml0ZV9nbG9iYWxfZGVjbGFyYXRpb25zICh2b2lkKQogICB0 aW1ldmFyX3N0b3AgKFRWX1BIQVNFX0RFRkVSUkVEKTsKICAgdGltZXZhcl9z dGFydCAoVFZfUEhBU0VfT1BUX0dFTik7CiAKKyAgaWYgKGZsYWdfdnRhYmxl X3ZlcmlmeSkKKyAgICB7CisgICAgICB2dHZfcmVjb3Zlcl9jbGFzc19pbmZv ICgpOworICAgICAgdnR2X2NvbXB1dGVfY2xhc3NfaGllcmFyY2h5X3RyYW5z aXRpdmVfY2xvc3VyZSAoKTsKKyAgICB9CisKICAgZmluYWxpemVfY29tcGls YXRpb25fdW5pdCAoKTsKIAorICBpZiAoZmxhZ192dGFibGVfdmVyaWZ5KQor ICAgIHsKKyAgICAgIC8qIEdlbmVyYXRlIHRoZSBzcGVjaWFsIGNvbnN0cnVj dG9yIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHRoYXQKKyAgICAgICAgIGNh bGxzIF9fVkxUUmVnaXN0ZXJQYWlycywgYW5kIGdpdmUgaXQgYSB2ZXJ5IGhp Z2ggaW5pdGlhbGl6YXRpb24KKyAgICAgICAgIHByaW9yaXR5LiAgKi8KKyAg ICAgIHZ0dl9nZW5lcmF0ZV9pbml0X3JvdXRpbmUgKG1haW5faW5wdXRfZmls ZW5hbWUpOworICAgIH0KKwogICB0aW1ldmFyX3N0b3AgKFRWX1BIQVNFX09Q VF9HRU4pOwogICB0aW1ldmFyX3N0YXJ0IChUVl9QSEFTRV9DSEVDS19EQkdJ TkZPKTsKIApJbmRleDogZ2NjL2NwL2NvbmZpZy1sYW5nLmluCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGdjYy9jcC9jb25maWctbGFuZy5pbgkocmV2 aXNpb24gMTkyNTAzKQorKysgZ2NjL2NwL2NvbmZpZy1sYW5nLmluCSh3b3Jr aW5nIGNvcHkpCkBAIC0zMCw0ICszMCw0IEBAIGNvbXBpbGVycz0iY2MxcGx1 c1wkKGV4ZWV4dCkiCiAKIHRhcmdldF9saWJzPSJ0YXJnZXQtbGlic3RkYysr LXYzIgogCi1ndGZpbGVzPSJcJChzcmNkaXIpL2NwL3J0dGkuYyBcJChzcmNk aXIpL2NwL21hbmdsZS5jIFwkKHNyY2RpcikvY3AvbmFtZS1sb29rdXAuaCBc JChzcmNkaXIpL2NwL25hbWUtbG9va3VwLmMgXCQoc3JjZGlyKS9jcC9jcC10 cmVlLmggXCQoc3JjZGlyKS9jcC9kZWNsLmggXCQoc3JjZGlyKS9jcC9jYWxs LmMgXCQoc3JjZGlyKS9jcC9kZWNsLmMgXCQoc3JjZGlyKS9jcC9kZWNsMi5j IFwkKHNyY2RpcikvY3AvcHQuYyBcJChzcmNkaXIpL2NwL3JlcG8uYyBcJChz cmNkaXIpL2NwL3NlbWFudGljcy5jIFwkKHNyY2RpcikvY3AvdHJlZS5jIFwk KHNyY2RpcikvY3AvcGFyc2VyLmggXCQoc3JjZGlyKS9jcC9wYXJzZXIuYyBc JChzcmNkaXIpL2NwL21ldGhvZC5jIFwkKHNyY2RpcikvY3AvdHlwZWNrMi5j IFwkKHNyY2RpcikvYy1mYW1pbHkvYy1jb21tb24uYyBcJChzcmNkaXIpL2Mt ZmFtaWx5L2MtY29tbW9uLmggXCQoc3JjZGlyKS9jLWZhbWlseS9jLW9iamMu aCBcJChzcmNkaXIpL2MtZmFtaWx5L2MtbGV4LmMgXCQoc3JjZGlyKS9jLWZh bWlseS9jLXByYWdtYS5oIFwkKHNyY2RpcikvYy1mYW1pbHkvYy1wcmFnbWEu YyBcJChzcmNkaXIpL2NwL2NsYXNzLmMgXCQoc3JjZGlyKS9jcC9jcC1vYmpj cC1jb21tb24uYyBcJChzcmNkaXIpL2NwL2NwLWxhbmcuYyBcJChzcmNkaXIp L2NwL2V4Y2VwdC5jIgorZ3RmaWxlcz0iXCQoc3JjZGlyKS9jcC9ydHRpLmMg XCQoc3JjZGlyKS9jcC9tYW5nbGUuYyBcJChzcmNkaXIpL2NwL25hbWUtbG9v a3VwLmggXCQoc3JjZGlyKS9jcC9uYW1lLWxvb2t1cC5jIFwkKHNyY2Rpcikv Y3AvY3AtdHJlZS5oIFwkKHNyY2RpcikvY3AvZGVjbC5oIFwkKHNyY2Rpcikv Y3AvY2FsbC5jIFwkKHNyY2RpcikvY3AvZGVjbC5jIFwkKHNyY2RpcikvY3Av ZGVjbDIuYyBcJChzcmNkaXIpL2NwL3B0LmMgXCQoc3JjZGlyKS9jcC9yZXBv LmMgXCQoc3JjZGlyKS9jcC9zZW1hbnRpY3MuYyBcJChzcmNkaXIpL2NwL3Ry ZWUuYyBcJChzcmNkaXIpL2NwL3BhcnNlci5oIFwkKHNyY2RpcikvY3AvcGFy c2VyLmMgXCQoc3JjZGlyKS9jcC9tZXRob2QuYyBcJChzcmNkaXIpL2NwL3R5 cGVjazIuYyBcJChzcmNkaXIpL2MtZmFtaWx5L2MtY29tbW9uLmMgXCQoc3Jj ZGlyKS9jLWZhbWlseS9jLWNvbW1vbi5oIFwkKHNyY2RpcikvYy1mYW1pbHkv Yy1vYmpjLmggXCQoc3JjZGlyKS9jLWZhbWlseS9jLWxleC5jIFwkKHNyY2Rp cikvYy1mYW1pbHkvYy1wcmFnbWEuaCBcJChzcmNkaXIpL2MtZmFtaWx5L2Mt cHJhZ21hLmMgXCQoc3JjZGlyKS9jcC9jbGFzcy5jIFwkKHNyY2RpcikvY3Av Y3Atb2JqY3AtY29tbW9uLmMgXCQoc3JjZGlyKS9jcC9jcC1sYW5nLmMgXCQo c3JjZGlyKS9jcC9leGNlcHQuYyBcJChzcmNkaXIpL2NwL3Z0YWJsZS1jbGFz cy1oaWVyYXJjaHkuYyIKSW5kZXg6IGdjYy9jcC92dGFibGUtY2xhc3MtaGll cmFyY2h5LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL2NwL3Z0 YWJsZS1jbGFzcy1oaWVyYXJjaHkuYwkocmV2aXNpb24gMCkKKysrIGdjYy9j cC92dGFibGUtY2xhc3MtaGllcmFyY2h5LmMJKHJldmlzaW9uIDApCkBAIC0w LDAgKzEsOTE4IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMTIgIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFy dCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAg YW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgIFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxl IENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LiAgKi8KKworLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl IHZ0YWJsZSBzZWN1cml0eSBpbXBsZW1lbnRhdGlvbi4gIEl0IGNvbGxlY3Rz CisgICBjbGFzcyBoaWVyYXJjaHkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBy b2dyYW0gYmVpbmcgY29tcGlsZWQgYW5kCisgICBpbnNlcnRzIGNhbGxzIHRv IF9fVkxUUmVnaXN0ZXJQYWlyLCByZWdpc3RlcmluZyB0aGlzIGluZm9ybWF0 aW9uLiAgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN5 c3RlbS5oIgorI2luY2x1ZGUgImNvcmV0eXBlcy5oIgorI2luY2x1ZGUgInRt LmgiCisjaW5jbHVkZSAidGltZXZhci5oIgorI2luY2x1ZGUgImNwcGxpYi5o IgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJjcC10cmVlLmgiCisj aW5jbHVkZSAiaW50bC5oIgorI2luY2x1ZGUgImMtZmFtaWx5L2MtcHJhZ21h LmgiCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImZsYWdzLmgiCisj aW5jbHVkZSAiZGlhZ25vc3RpYy1jb3JlLmgiCisjaW5jbHVkZSAib3V0cHV0 LmgiCisjaW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAiY2dyYXBoLmgi CisjaW5jbHVkZSAiYy1mYW1pbHkvYy1jb21tb24uaCIKKyNpbmNsdWRlICJj LWZhbWlseS9jLW9iamMuaCIKKyNpbmNsdWRlICJwbHVnaW4uaCIKKyNpbmNs dWRlICJ0cmVlLWl0ZXJhdG9yLmgiCisjaW5jbHVkZSAidHJlZS12dGFibGUt dmVyaWZ5LmgiCisjaW5jbHVkZSAiZ2ltcGxlLmgiCisKKy8qIE5lZWQgdG8g bWFyayB0aGlzIG9uZSBzcGVjaWFsbHkgc2luY2UgaXQgbmVlZHMgdG8gYmUg c3RvcmVkIGluCisgKiBwcmVjb21waWxlZCBoZWFkZXIgSVIgKi8KK3N0YXRp YyBHVFkoKCkpIHRyZWUgdmx0X3NhdmVkX2NsYXNzX2luZm8gPSBOVUxMX1RS RUU7CisKK3N0YXRpYyBHVFkgKCgpKSB0cmVlIHZsdF9yZWdpc3Rlcl9wYWly c19mbmRlY2wgPSBOVUxMX1RSRUU7CitzdGF0aWMgR1RZICgoKSkgdHJlZSB2 bHRfY2hhbmdlX3Blcm1pc3Npb25fZm5kZWNsID0gTlVMTF9UUkVFOworCitz dHJ1Y3Qgd29ya19ub2RlIHsKKyAgc3RydWN0IHZ0dl9ncmFwaF9ub2RlICpu b2RlOworICBzdHJ1Y3Qgd29ya19ub2RlICpuZXh0OworfTsKKworc3RhdGlj IHZvaWQgaW5pdF9mdW5jdGlvbnMgKHZvaWQpOworCitzdGF0aWMgaW50ICBn dWVzc19udW1fdnRhYmxlX3BvaW50ZXJzIChzdHJ1Y3QgdnR2X2dyYXBoX25v ZGUgKik7CitzdGF0aWMgYm9vbCByZWdpc3Rlcl9hbGxfcGFpcnMgKHRyZWUg Ym9keSk7CitzdGF0aWMgdm9pZCBhZGRfaGllcmFyY2h5X3BhaXIgKHN0cnVj dCB2dHZfZ3JhcGhfbm9kZSAqLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgdnR2X2dyYXBoX25vZGUgKik7CitzdGF0aWMgc3Ry dWN0IHZ0dl9ncmFwaF9ub2RlICpmaW5kX2dyYXBoX25vZGUgKHRyZWUpOwor c3RhdGljIHN0cnVjdCB2dHZfZ3JhcGhfbm9kZSAqCisgICAgICAgICAgICAg ICAgICBmaW5kX2FuZF9yZW1vdmVfbmV4dF9sZWFmX25vZGUgKHN0cnVjdCB3 b3JrX25vZGUgKip3b3JrbGlzdCk7CitzdGF0aWMgdm9pZCBjcmVhdGVfdW5k ZWZfcmVmZXJlbmNlX3RvX3Z0dl9pbml0KHRyZWUgcmVnaXN0ZXJfcGFpcnNf Ym9keSk7CitzdGF0aWMgYm9vbCB2dHZfcmVnaXN0ZXJfY2xhc3NfaGllcmFy Y2h5X2luZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHRyZWUgcmVnaXN0ZXJfcGFpcnNf Ym9keSk7CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jbGFzc19oaWVyYXJjaHlf aW5mb3JtYXRpb24gKHRyZWUsIHRyZWUpOworc3RydWN0IHZ0YmxfbWFwX25v ZGUgKnZ0YWJsZV9maW5kX29yX2NyZWF0ZV9tYXBfZGVjbCAodHJlZSk7CisK K3N0YXRpYyB2b2lkCitpbml0X2Z1bmN0aW9ucyAodm9pZCkKK3sKKyAgdHJl ZSB2b2lkX3B0cl90eXBlID0gYnVpbGRfcG9pbnRlcl90eXBlICh2b2lkX3R5 cGVfbm9kZSk7CisgIHRyZWUgYXJnX3R5cGVzID0gTlVMTF9UUkVFOworICB0 cmVlIHJlZ2lzdGVyX3BhaXJzX3R5cGUgPSB2b2lkX3R5cGVfbm9kZTsKKyAg dHJlZSBjaGFuZ2VfcGVybWlzc2lvbl90eXBlID0gdm9pZF90eXBlX25vZGU7 CisjaWZkZWYgVlRWX0RFQlVHCisgIHRyZWUgY2hhcl9wdHJfdHlwZSA9IGJ1 aWxkX3BvaW50ZXJfdHlwZSAoY2hhcl90eXBlX25vZGUpOworI2VuZGlmCisK KyAgaWYgKHZsdF9jaGFuZ2VfcGVybWlzc2lvbl9mbmRlY2wgIT0gTlVMTF9U UkVFKQorICAgIHJldHVybjsKKworICBnY2NfYXNzZXJ0KHZsdF9yZWdpc3Rl cl9wYWlyc19mbmRlY2wgPT0gTlVMTF9UUkVFKTsKKworICBhcmdfdHlwZXMg PSBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgaW50ZWdlcl90eXBlX25v ZGUpOworICBhcmdfdHlwZXMgPSBjaGFpbm9uIChhcmdfdHlwZXMsIGJ1aWxk X3RyZWVfbGlzdCAoTlVMTF9UUkVFLCB2b2lkX3R5cGVfbm9kZSkpOworCisg IGNoYW5nZV9wZXJtaXNzaW9uX3R5cGUgPSBidWlsZF9mdW5jdGlvbl90eXBl IChjaGFuZ2VfcGVybWlzc2lvbl90eXBlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX3R5cGVzKTsKKyAg dmx0X2NoYW5nZV9wZXJtaXNzaW9uX2ZuZGVjbCA9IGJ1aWxkX2ZuX2RlY2wg KCJfX1ZMVENoYW5nZVBlcm1pc3Npb24iLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlX3Blcm1pc3Np b25fdHlwZSk7CisgIFRSRUVfTk9USFJPVyAodmx0X2NoYW5nZV9wZXJtaXNz aW9uX2ZuZGVjbCkgPSAxOworICBERUNMX0FUVFJJQlVURVMgKHZsdF9jaGFu Z2VfcGVybWlzc2lvbl9mbmRlY2wpID0KKyAgICAgICAgICAgICAgICAgICAg dHJlZV9jb25zIChnZXRfaWRlbnRpZmllciAoImxlYWYiKSwgTlVMTCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUNMX0FUVFJJQlVURVMg KHZsdF9jaGFuZ2VfcGVybWlzc2lvbl9mbmRlY2wpKTsKKyAgVFJFRV9QVUJM SUMgKHZsdF9jaGFuZ2VfcGVybWlzc2lvbl9mbmRlY2wpID0gMTsKKyAgREVD TF9QUkVTRVJWRV9QICh2bHRfY2hhbmdlX3Blcm1pc3Npb25fZm5kZWNsKSA9 IDE7CisgIHJldHJvZml0X2xhbmdfZGVjbCAodmx0X2NoYW5nZV9wZXJtaXNz aW9uX2ZuZGVjbCk7CisgIFNFVF9ERUNMX0xBTkdVQUdFICh2bHRfY2hhbmdl X3Blcm1pc3Npb25fZm5kZWNsLCBsYW5nX2NwbHVzcGx1cyk7CisKKyAgYXJn X3R5cGVzID0gYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsIGJ1aWxkX3Bv aW50ZXJfdHlwZSAodm9pZF9wdHJfdHlwZSkpOworICBhcmdfdHlwZXMgPSBj aGFpbm9uIChhcmdfdHlwZXMsIGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVF LCB2b2lkX3B0cl90eXBlKSk7CisgIGFyZ190eXBlcyA9IGNoYWlub24gKGFy Z190eXBlcywgYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnRlZ2VyX3R5cGVfbm9kZSkpOworI2lmZGVmIFZUVl9ERUJVRworICAvKiBT dGFydDogQXJnIHR5cGVzIHRvIGJlIHJlbW92ZWQgd2hlbiB3ZSByZW1vdmUg ZGVidWdnaW5nIHBhcmFtZXRlcnMgZnJvbQorICAgICB0aGUgbGlicmFyeSBm dW5jdGlvbi4gKi8KKyAgYXJnX3R5cGVzID0gY2hhaW5vbiAoYXJnX3R5cGVz LCBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgY2hhcl9wdHJfdHlwZSkp OworICBhcmdfdHlwZXMgPSBjaGFpbm9uIChhcmdfdHlwZXMsIGJ1aWxkX3Ry ZWVfbGlzdCAoTlVMTF9UUkVFLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdlcl90eXBlX25vZGUp KTsKKyAgYXJnX3R5cGVzID0gY2hhaW5vbiAoYXJnX3R5cGVzLCBidWlsZF90 cmVlX2xpc3QgKE5VTExfVFJFRSwgY2hhcl9wdHJfdHlwZSkpOworICBhcmdf dHlwZXMgPSBjaGFpbm9uIChhcmdfdHlwZXMsIGJ1aWxkX3RyZWVfbGlzdCAo TlVMTF9UUkVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ZWdlcl90eXBlX25vZGUpKTsKKyAgLyog RW5kOiBBcmcgdHlwZXMgdG8gYmUgcmVtb3ZlZC4uLiovCisjZW5kaWYKKyAg YXJnX3R5cGVzID0gY2hhaW5vbiAoYXJnX3R5cGVzLCBidWlsZF90cmVlX2xp c3QgKE5VTExfVFJFRSwgdm9pZF90eXBlX25vZGUpKTsKKworICByZWdpc3Rl cl9wYWlyc190eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAocmVnaXN0ZXJf cGFpcnNfdHlwZSwgYXJnX3R5cGVzKTsKKworI2lmZGVmIFZUVl9ERUJVRwor ICB2bHRfcmVnaXN0ZXJfcGFpcnNfZm5kZWNsID0gYnVpbGRfZm5fZGVjbCAo Il9fVkxUUmVnaXN0ZXJQYWlyRGVidWciLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfcGFpcnNfdHlw ZSk7CisjZWxzZQorICB2bHRfcmVnaXN0ZXJfcGFpcnNfZm5kZWNsID0gYnVp bGRfZm5fZGVjbCAoIl9fVkxUUmVnaXN0ZXJQYWlyIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX3Bh aXJzX3R5cGUpOworI2VuZGlmCisKKyAgVFJFRV9OT1RIUk9XICh2bHRfcmVn aXN0ZXJfcGFpcnNfZm5kZWNsKSA9IDE7CisgIERFQ0xfQVRUUklCVVRFUyAo dmx0X3JlZ2lzdGVyX3BhaXJzX2ZuZGVjbCkgPQorICAgICAgICAgICAgICAg ICAgICB0cmVlX2NvbnMgKGdldF9pZGVudGlmaWVyICgibGVhZiIpLCBOVUxM LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQ0xfQVRUUklC VVRFUyAodmx0X3JlZ2lzdGVyX3BhaXJzX2ZuZGVjbCkpOworICBUUkVFX1BV QkxJQyAodmx0X3JlZ2lzdGVyX3BhaXJzX2ZuZGVjbCkgPSAxOworICBERUNM X1BSRVNFUlZFX1AgKHZsdF9yZWdpc3Rlcl9wYWlyc19mbmRlY2wpID0gMTsK KyAgcmV0cm9maXRfbGFuZ19kZWNsICh2bHRfcmVnaXN0ZXJfcGFpcnNfZm5k ZWNsKTsKKyAgU0VUX0RFQ0xfTEFOR1VBR0UgKHZsdF9yZWdpc3Rlcl9wYWly c19mbmRlY2wsIGxhbmdfY3BsdXNwbHVzKTsKK30KKworc3RhdGljIHZvaWQK K2FkZF90b193b3JrbGlzdCAoc3RydWN0IHdvcmtfbm9kZSAqKndvcmtsaXN0 LCBzdHJ1Y3QgdnR2X2dyYXBoX25vZGUgKm5vZGUsCisgICAgICAgICAgICAg ICAgIHNiaXRtYXAgaW5zZXJ0ZWQpCit7CisgIHN0cnVjdCB3b3JrX25vZGUg Km5ld193b3JrX25vZGU7CisKKyAgaWYgKFRFU1RfQklUIChpbnNlcnRlZCwg bm9kZS0+Y2xhc3NfdWlkKSkKKyAgICByZXR1cm47CisKKyAgbmV3X3dvcmtf bm9kZSA9IChzdHJ1Y3Qgd29ya19ub2RlICopIHhtYWxsb2MgKHNpemVvZiAo c3RydWN0IHdvcmtfbm9kZSkpOworICBuZXdfd29ya19ub2RlLT5uZXh0ID0g KndvcmtsaXN0OworICBuZXdfd29ya19ub2RlLT5ub2RlID0gbm9kZTsKKyAg KndvcmtsaXN0ID0gbmV3X3dvcmtfbm9kZTsKKworICBTRVRfQklUIChpbnNl cnRlZCwgbm9kZS0+Y2xhc3NfdWlkKTsKK30KKworc3RhdGljIHN0cnVjdCB2 dHZfZ3JhcGhfbm9kZSAqCitmaW5kX2FuZF9yZW1vdmVfbmV4dF9sZWFmX25v ZGUgKHN0cnVjdCB3b3JrX25vZGUgKip3b3JrbGlzdCkKK3sKKyAgc3RydWN0 IHdvcmtfbm9kZSAqcHJldiwgKmN1cjsKKworICBmb3IgKHByZXYgPSBOVUxM LCBjdXIgPSAqd29ya2xpc3Q7IGN1cjsgcHJldiA9IGN1ciwgY3VyID0gY3Vy LT5uZXh0KQorICAgIHsKKyAgICAgIGlmIChjdXItPm5vZGUtPm51bV9jaGls ZHJlbiA9PSBjdXItPm5vZGUtPm51bV9wcm9jZXNzZWRfY2hpbGRyZW4pCisg ICAgICAgIHsKKyAgICAgICAgICBpZiAocHJldiA9PSBOVUxMKQorICAgICAg ICAgICAgKCp3b3JrbGlzdCkgPSBjdXItPm5leHQ7CisgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgcHJldi0+bmV4dCA9IGN1ci0+bmV4dDsKKworICAg ICAgICAgIGN1ci0+bmV4dCA9IE5VTEw7CisgICAgICAgICAgcmV0dXJuIGN1 ci0+bm9kZTsKKyAgICAgICAgfQorICAgIH0KKworICByZXR1cm4gTlVMTDsK K30KKwordm9pZAordnR2X2NvbXB1dGVfY2xhc3NfaGllcmFyY2h5X3RyYW5z aXRpdmVfY2xvc3VyZSAodm9pZCkKK3sKKyAgc3RydWN0IHdvcmtfbm9kZSAq d29ya2xpc3QgPSBOVUxMOworICBzdHJ1Y3QgdnRibF9tYXBfbm9kZSAqY3Vy OworICBzYml0bWFwIGluc2VydGVkID0gc2JpdG1hcF9hbGxvYyAobnVtX3Z0 YWJsZV9tYXBfbm9kZXMpOworICB1bnNpZ25lZCBpOworCisgIC8qIE5vdGU6 IEV2ZXJ5IG5vZGUgaW4gdGhlIGdyYXBoIGdldHMgYWRkZWQgdG8gdGhlIHdv cmtsaXN0IGV4YWN0bHkKKyAgIG9uY2UgYW5kIHJlbW92ZWQgZnJvbSB0aGUg d29ya2xpc3QgZXhhY3RseSBvbmNlICh3aGVuIGFsbCBvZiBpdHMKKyAgIGNo aWxkcmVuIGhhdmUgYmVlbiBwcm9jZXNzZWQpLiAgRWFjaCBub2RlJ3MgY2hp bGRyZW4gZWRnZXMgYXJlCisgICBmb2xsb3dlZCBleGFjdGx5IG9uY2UsIGFu ZCBlYWNoIG5vZGUncyBwYXJlbnQgZWRnZXMgYXJlIGZvbGxvd2VkCisgICBl eGFjdGx5IG9uY2UuICBTbyB0aGlzIGFsZ29yaXRobSBpcyByb3VnaGx5IE8o ViArIDJFKSwgaS5lLgorICAgTyhFICsgVikuICovCisKKyAgLyogU2V0LXVw OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqLworICAvKiBGaW5kIGFsbCB0aGUgImxl YWYiIG5vZGVzIGluIHRoZSBncmFwaCwgYW5kIGFkZCB0aGVtIHRvIHRoZSB3 b3JrbGlzdC4gICovCisgIHNiaXRtYXBfemVybyAoaW5zZXJ0ZWQpOworICBm b3IgKGN1ciA9IHZ0YmxfbWFwX25vZGVzOyBjdXI7IGN1ciA9IGN1ci0+bmV4 dCkKKyAgICB7CisgICAgICBpZiAoY3VyLT5jbGFzc19pbmZvCisgICAgICAg ICAgJiYgKGN1ci0+Y2xhc3NfaW5mby0+bnVtX2NoaWxkcmVuID09IDApCisg ICAgICAgICAgJiYgISAoVEVTVF9CSVQgKGluc2VydGVkLCBjdXItPmNsYXNz X2luZm8tPmNsYXNzX3VpZCkpKQorICAgICAgICBhZGRfdG9fd29ya2xpc3Qg KCZ3b3JrbGlzdCwgY3VyLT5jbGFzc19pbmZvLCBpbnNlcnRlZCk7CisgICAg fQorCisKKyAgLyogTWFpbiB3b3JrOiBwdWxsIG5leHQgbGVhZiBub2RlIG9m ZiB3b3JrIGxpc3QsIHByb2Nlc3MgaXQsIGFkZCBpdHMKKyAgICAgcGFyZW50 cyB0byB0aGUgd29ya2xpc3QsIHdoZXJlIGEgJ2xlYWYnIG5vZGUgaXMgb25l IHRoYXQgaGFzIG5vCisgICAgIGNoaWxkcmVuLCBvciBhbGwgb2YgaXRzIGNo aWxkcmVuIGhhdmUgYmVlbiBwcm9jZXNzZWQuICovCisgIHdoaWxlICh3b3Jr bGlzdCkKKyAgICB7CisgICAgICBzdHJ1Y3QgdnR2X2dyYXBoX25vZGUgKnRl bXBfbm9kZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZmluZF9hbmRfcmVtb3ZlX25leHRfbGVhZl9ub2RlICgmd29ya2xpc3QpOwor CisgICAgICBnY2NfYXNzZXJ0ICh0ZW1wX25vZGUgIT0gTlVMTCk7CisgICAg ICB0ZW1wX25vZGUtPmRlc2NlbmRhbnRzID0gc2JpdG1hcF9hbGxvYyAobnVt X3Z0YWJsZV9tYXBfbm9kZXMpOworICAgICAgc2JpdG1hcF96ZXJvICh0ZW1w X25vZGUtPmRlc2NlbmRhbnRzKTsKKyAgICAgIFNFVF9CSVQgKHRlbXBfbm9k ZS0+ZGVzY2VuZGFudHMsIHRlbXBfbm9kZS0+Y2xhc3NfdWlkKTsKKyAgICAg IGZvciAoaSA9IDA7IGkgPCB0ZW1wX25vZGUtPm51bV9jaGlsZHJlbjsgKytp KQorICAgICAgICBzYml0bWFwX2Ffb3JfYiAodGVtcF9ub2RlLT5kZXNjZW5k YW50cywgdGVtcF9ub2RlLT5kZXNjZW5kYW50cywKKyAgICAgICAgICAgICAg ICAgICAgICAgIHRlbXBfbm9kZS0+Y2hpbGRyZW5baV0tPmRlc2NlbmRhbnRz KTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wX25vZGUtPm51bV9wYXJl bnRzOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICB0ZW1wX25vZGUtPnBh cmVudHNbaV0tPm51bV9wcm9jZXNzZWRfY2hpbGRyZW4gPQorICAgICAgICAg ICAgICAgICAgICB0ZW1wX25vZGUtPnBhcmVudHNbaV0tPm51bV9wcm9jZXNz ZWRfY2hpbGRyZW4gKyAxOworICAgICAgICAgIGlmICghVEVTVF9CSVQgKGlu c2VydGVkLCB0ZW1wX25vZGUtPnBhcmVudHNbaV0tPmNsYXNzX3VpZCkpCisg ICAgICAgICAgICBhZGRfdG9fd29ya2xpc3QgKCZ3b3JrbGlzdCwgdGVtcF9u b2RlLT5wYXJlbnRzW2ldLCBpbnNlcnRlZCk7CisgICAgICAgIH0KKyAgICB9 Cit9CisKKy8qIEtlZXAgdHJhY2sgb2Ygd2hpY2ggcGFpcnMgd2UgaGF2ZSBh bHJlYWR5IGNyZWF0ZWQgX19WTFRSZWdpc3RlclBhaXIKKyAgIGNhbGxzIGZv ciwgdG8gcHJldmVudCBjcmVhdGluZyBkdXBsaWNhdGUgY2FsbHMgd2l0aGlu IHRoZSBzYW1lCisgICBjb21waWxhdGlvbiB1bml0LiAgKi8KKworc3RhdGlj IGJvb2wKK3JlY29yZF9yZWdpc3Rlcl9wYWlycyAodHJlZSB2dGFibGVfZGVj bCwgdHJlZSB2cHRyX2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAg IHRyZWUgYmFzZV9jbGFzcykKK3sKKyAgdW5zaWduZWQgb2Zmc2V0OworICB0 cmVlIGJhc2VfaWQ7CisgIHN0cnVjdCB2dGJsX21hcF9ub2RlICpiYXNlX3Z0 YWJsZV9tYXBfbm9kZTsKKworICBpZiAoVFJFRV9DT0RFICh2cHRyX2FkZHJl c3MpID09IEFERFJfRVhQUgorICAgICAgJiYgVFJFRV9DT0RFIChUUkVFX09Q RVJBTkQgKHZwdHJfYWRkcmVzcywgMCkpID09IE1FTV9SRUYpCisgICAgdnB0 cl9hZGRyZXNzID0gVFJFRV9PUEVSQU5EICh2cHRyX2FkZHJlc3MsIDApOwor CisgIG9mZnNldCA9IFRSRUVfSU5UX0NTVF9MT1cgKFRSRUVfT1BFUkFORCAo dnB0cl9hZGRyZXNzLCAxKSk7CisKKyAgaWYgKFRSRUVfQ0hBSU4gKGJhc2Vf Y2xhc3MpKQorICAgIGJhc2VfaWQgPSBERUNMX0FTU0VNQkxFUl9OQU1FIChU UkVFX0NIQUlOIChiYXNlX2NsYXNzKSk7CisgIGVsc2UKKyAgICBiYXNlX2lk ID0gREVDTF9BU1NFTUJMRVJfTkFNRSAoVFlQRV9OQU1FIChiYXNlX2NsYXNz KSk7CisKKyAgYmFzZV92dGFibGVfbWFwX25vZGUgPSB2dGJsX21hcF9nZXRf bm9kZSAoYmFzZV9pZCk7CisKKyAgaWYgKHZ0YmxfbWFwX25vZGVfcmVnaXN0 cmF0aW9uX2ZpbmQgKGJhc2VfdnRhYmxlX21hcF9ub2RlLCB2dGFibGVfZGVj bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9m ZnNldCkpCisgICAgcmV0dXJuIHRydWU7CisKKyAgdnRibF9tYXBfbm9kZV9y ZWdpc3RyYXRpb25faW5zZXJ0IChiYXNlX3Z0YWJsZV9tYXBfbm9kZSwgdnRh YmxlX2RlY2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvZmZzZXQpOworICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2 b2lkCityZWdpc3Rlcl92cHRyX2ZpZWxkcyAodHJlZSBiYXNlX2NsYXNzX2Rl Y2xfYXJnLCB0cmVlIGJhc2VfY2xhc3MsCisgICAgICAgICAgICAgICAgICAg ICAgdHJlZSByZWNvcmRfdHlwZSwgdHJlZSBib2R5KQoreworICAvKiBBIGNs YXNzIG1heSBjb250YWluIHNlY29uZGFyeSB2dGFibGVzIGluIGl0LCBmb3Ig dmFyaW91cworICAgICByZWFzb25zLiAgVGhpcyBmdW5jdGlvbiBnb2VzIHRo cm91Z2ggdGhlIGRlY2wgY2hhaW4gb2YgYSBjbGFzcworICAgICByZWNvcmQg bG9va2luZyBmb3IgYW55IGZpZWxkcyB0aGF0IHBvaW50IHRvIHNlY29uZGFy eSB2dGFibGVzLAorICAgICBhbmQgYWRkaW5nIGNhbGxzIHRvIF9fVkxUUmVn aXN0ZXJQYWlyIGZvciB0aGUgc2Vjb25kYXJ5IHZ0YWJsZQorICAgICBwb2lu dGVycy4gICovCisKKyAgdHJlZSB2dGJsX3Zhcl9kZWNsOworICB0cmVlIGFy ZzE7CisgIHRyZWUgYXJnMjsKKyAgaW50IGhpbnQgPSAwOworCisgIGlmIChU UkVFX0NPREUgKHJlY29yZF90eXBlKSAhPSBSRUNPUkRfVFlQRSkKKyAgICBy ZXR1cm47CisKKyAgdnRibF92YXJfZGVjbCA9IGdldF92dGJsX2RlY2xfZm9y X2JpbmZvIChUWVBFX0JJTkZPIChyZWNvcmRfdHlwZSkpOworCisgIGlmICh2 dGJsX3Zhcl9kZWNsKQorICAgIHsKKyAgICAgIHRyZWUgenR0X2RlY2wgPSBE RUNMX0NIQUlOICh2dGJsX3Zhcl9kZWNsKTsKKyAgICAgIGJvb2wgYWxyZWFk eV9yZWdpc3RlcmVkID0gZmFsc2U7CisKKyAgICAgIC8qIGNvbnN0cnVjdGlv biB2dGFibGUgKi8KKyAgICAgIGlmICh6dHRfZGVjbCAhPSBOVUxMX1RSRUUK KyAgICAgICAgICAmJiAoREVDTF9OQU1FICh6dHRfZGVjbCkpCisgICAgICAg ICAgJiYgKHN0cm5jbXAgKElERU5USUZJRVJfUE9JTlRFUiAoREVDTF9OQU1F ICh6dHRfZGVjbCkpLAorICAgICAgICAgICAgICAgICAgICAgICAiX1pUVCIs IDQpID09IDApKQorICAgICAgICB7CisgICAgICAgICAgdHJlZSB2YWx1ZXMg PSBERUNMX0lOSVRJQUwgKHp0dF9kZWNsKTsKKyAgICAgICAgICBzdHJ1Y3Qg dmFycG9vbF9ub2RlICogdnBfbm9kZSA9IHZhcnBvb2xfbm9kZSAoenR0X2Rl Y2wpOworICAgICAgICAgIGlmICh2cF9ub2RlLT5maW5hbGl6ZWQKKyAgICAg ICAgICAgICAgJiYgVFJFRV9BU01fV1JJVFRFTiAoenR0X2RlY2wpCisgICAg ICAgICAgICAgICYmICh2YWx1ZXMgIT0gTlVMTF9UUkVFKQorICAgICAgICAg ICAgICAmJiAoVFJFRV9DT0RFICh2YWx1ZXMpID09IENPTlNUUlVDVE9SKQor ICAgICAgICAgICAgICAmJiAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKHZhbHVl cykpID09IEFSUkFZX1RZUEUpKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICB0cmVlIGNhbGxfZXhwciA9IE5VTExfVFJFRTsKKyAgICAgICAgICAg ICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBjbnQ7CisgICAgICAgICAgICAg IGNvbnN0cnVjdG9yX2VsdCAqY2U7CisKKyAgICAgICAgICAgICAgZm9yIChj bnQgPSAwOworICAgICAgICAgICAgICAgICAgIFZFQ19pdGVyYXRlIChjb25z dHJ1Y3Rvcl9lbHQsIENPTlNUUlVDVE9SX0VMVFMgKHZhbHVlcyksCisJCQkJ Y250LCBjZSk7CisgICAgICAgICAgICAgICAgICAgY250KyspCisgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgdHJlZSB2YWx1ZSA9IGNl LT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgIHRyZWUgdmFsX3Z0YmxfZGVj bCA9IFRSRUVfT1BFUkFORCAoVFJFRV9PUEVSQU5EICh2YWx1ZSwgMCksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDApOworICAgICAgICAgICAgICAgICAgaW50IGxlbjE7CisgICAg ICAgICAgICAgICAgICBpbnQgbGVuMjsKKworICAgICAgICAgICAgICAgICAg aWYgKFRSRUVfQ09ERSAodmFsX3Z0YmxfZGVjbCkgPT0gQUREUl9FWFBSCisg ICAgICAgICAgICAgICAgICAgICAgJiYgVFJFRV9DT0RFIChUUkVFX09QRVJB TkQgKHZhbF92dGJsX2RlY2wsIDApKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ID09IFZBUl9ERUNMKQorICAgICAgICAgICAgICAgICAgICB2YWxfdnRibF9k ZWNsID0gVFJFRV9PUEVSQU5EICh2YWxfdnRibF9kZWNsLCAwKTsKKworICAg ICAgICAgICAgICAgICAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFICh2YWxfdnRi bF9kZWNsKSA9PSBWQVJfREVDTCk7CisKKyAgICAgICAgICAgICAgICAgIGxl bjEgPSBzdHJsZW4gKElERU5USUZJRVJfUE9JTlRFUgorCQkJCSAgICAgKERF Q0xfTkFNRQorCQkJCSAgICAgICAgICAoVFJFRV9PUEVSQU5ECisJCQkJCSAg ICAgKGJhc2VfY2xhc3NfZGVjbF9hcmcsIDApKSkpOworICAgICAgICAgICAg ICAgICAgbGVuMiA9IHN0cmxlbiAoSURFTlRJRklFUl9QT0lOVEVSCisJCQkJ ICAgICAoREVDTF9OQU1FICh2YWxfdnRibF9kZWNsKSkpOworICAgICAgICAg ICAgICAgICAgYXJnMSA9IGJ1aWxkX3N0cmluZ19saXRlcmFsIChsZW4xLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBJREVOVElGSUVSX1BPSU5URVIKKwkJCQkJICAgICAgICAoREVDTF9OQU1F CisJCQkJCQkgKFRSRUVfT1BFUkFORAorCQkJCQkJICAoYmFzZV9jbGFzc19k ZWNsX2FyZywgMCkpKSk7CisgICAgICAgICAgICAgICAgICBhcmcyID0gYnVp bGRfc3RyaW5nX2xpdGVyYWwgKGxlbjIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElERU5USUZJRVJfUE9JTlRF UgorCQkJCQkgICAgICAgIChERUNMX05BTUUgKHZhbF92dGJsX2RlY2wpKSk7 CisKKyAgICAgICAgICAgICAgICAgIGFscmVhZHlfcmVnaXN0ZXJlZCA9IHJl Y29yZF9yZWdpc3Rlcl9wYWlycyAodmFsX3Z0YmxfZGVjbCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfY2xhc3Mp OworCisgICAgICAgICAgICAgICAgICBpZiAoYWxyZWFkeV9yZWdpc3RlcmVk KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworI2lmZGVmIFZU Vl9ERUJVRworICAgICAgICAgICAgICAgICAgY2FsbF9leHByID0gYnVpbGRf Y2FsbF9leHByCisJCSAgICAgICAgICAgICAgICAgICAgICAgICh2bHRfcmVn aXN0ZXJfcGFpcnNfZm5kZWNsLCA3LAorCQkJCQkgYmFzZV9jbGFzc19kZWNs X2FyZywgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJ1aWxkX2ludF9jc3QgKGludGVnZXJfdHlwZV9ub2RlLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBoaW50KSwKKwkJCQkJIGFyZzEsCisJCQkJCSBidWlsZF9p bnRfY3N0IChpbnRlZ2VyX3R5cGVfbm9kZSwKKwkJCQkJCQlsZW4xKSwKKwkJ CQkJIGFyZzIsCisJCQkJCSBidWlsZF9pbnRfY3N0IChpbnRlZ2VyX3R5cGVf bm9kZSwKKwkJCQkJCQlsZW4yKSk7CisjZWxzZQorICAgICAgICAgICAgICAg ICAgY2FsbF9leHByID0gYnVpbGRfY2FsbF9leHByCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZsdF9yZWdpc3Rlcl9wYWly c19mbmRlY2wsIDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJhc2VfY2xhc3NfZGVjbF9hcmcsIHZhbHVlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9pbnRf Y3N0IChpbnRlZ2VyX3R5cGVfbm9kZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludCkpOwor I2VuZGlmCisJCSAgYXBwZW5kX3RvX3N0YXRlbWVudF9saXN0IChjYWxsX2V4 cHIsICZib2R5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCityZWdpc3Rl cl9vdGhlcl9iaW5mb192dGFibGVzICh0cmVlIGJpbmZvLCB0cmVlIGJvZHks IHRyZWUgYXJnMSwgdHJlZSBzdHIxLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGxlbjEsIHRyZWUgc3RyMiwgaW50IGxlbjIsIHRyZWUg YmFzZV9jbGFzcykKK3sKKyAgdW5zaWduZWQgaXg7CisgIHRyZWUgYmFzZV9i aW5mbzsKKyAgdHJlZSB2dGFibGVfZGVjbDsKKyAgYm9vbCBhbHJlYWR5X3Jl Z2lzdGVyZWQ7CisgIGludCBoaW50ID0gMDsKKworICBpZiAoYmluZm8gPT0g TlVMTF9UUkVFKQorICAgIHJldHVybjsKKworICBmb3IgKGl4ID0gMDsgQklO Rk9fQkFTRV9JVEVSQVRFIChiaW5mbywgaXgsIGJhc2VfYmluZm8pOyBpeCsr KQorICAgIHsKKyAgICAgIGlmICgoIUJJTkZPX1BSSU1BUllfUCAoYmFzZV9i aW5mbykKKyAgICAgICAgICAgfHwgQklORk9fVklSVFVBTF9QIChiYXNlX2Jp bmZvKSkKKyAgICAgICAgICAmJiAodnRhYmxlX2RlY2w9Z2V0X3Z0YmxfZGVj bF9mb3JfYmluZm8gKGJhc2VfYmluZm8pKQorICAgICAgICAgICYmICEoREVD TF9WVEFCTEVfT1JfVlRUX1AodnRhYmxlX2RlY2wpCisgICAgICAgICAgICAg ICAmJiBERUNMX0NPTlNUUlVDVElPTl9WVEFCTEVfUCh2dGFibGVfZGVjbCkp KQorICAgICAgICB7CisgICAgICAgICAgdHJlZSB2dGFibGVfYWRkcmVzcyA9 IGJ1aWxkX3Z0YmxfYWRkcmVzcyAoYmFzZV9iaW5mbyk7CisgICAgICAgICAg dHJlZSBjYWxsX2V4cHI7CisKKyAgICAgICAgICBhbHJlYWR5X3JlZ2lzdGVy ZWQgPSByZWNvcmRfcmVnaXN0ZXJfcGFpcnMgKHZ0YWJsZV9kZWNsLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdnRhYmxlX2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX2NsYXNzKTsK KyAgICAgICAgICBpZiAoIWFscmVhZHlfcmVnaXN0ZXJlZCkKKyAgICAgICAg ICAgIHsKKyNpZmRlZiBWVFZfREVCVUcKKyAgICAgICAgICAgICAgY2FsbF9l eHByID0gYnVpbGRfY2FsbF9leHByICh2bHRfcmVnaXN0ZXJfcGFpcnNfZm5k ZWNsLCA3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFyZzEsIHZ0YWJsZV9hZGRyZXNzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX2ludF9jc3QgKGlu dGVnZXJfdHlwZV9ub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnQpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cjEsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVp bGRfaW50X2NzdCAoaW50ZWdlcl90eXBlX25vZGUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGVuMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RyMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBidWlsZF9pbnRfY3N0IChpbnRlZ2VyX3R5cGVfbm9kZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsZW4yKSk7CisjZWxzZQorICAgICAgICAgICAgICBj YWxsX2V4cHIgPSBidWlsZF9jYWxsX2V4cHIgKHZsdF9yZWdpc3Rlcl9wYWly c19mbmRlY2wsIDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXJnMSwgdnRhYmxlX2FkZHJlc3MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfaW50X2Nz dCAoaW50ZWdlcl90eXBlX25vZGUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50KSk7Cisj ZW5kaWYKKworICAgICAgICAgICAgICBhcHBlbmRfdG9fc3RhdGVtZW50X2xp c3QgKGNhbGxfZXhwciwgJmJvZHkpOworICAgICAgICAgICAgfQorICAgICAg ICB9CisKKyAgICAgIHJlZ2lzdGVyX290aGVyX2JpbmZvX3Z0YWJsZXMgKGJh c2VfYmluZm8sIGJvZHksIGFyZzEsIHN0cjEsIGxlbjEsIHN0cjIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4yLCBiYXNlX2Ns YXNzKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK2d1ZXNzX251bV92dGFi bGVfcG9pbnRlcnMgKHN0cnVjdCB2dHZfZ3JhcGhfbm9kZSAqY2xhc3Nfbm9k ZSkKK3sKKyAgdHJlZSB2dGJsOworICBpbnQgdG90YWxfbnVtX3Z0YmxzID0g MDsKKyAgaW50IG51bV92dGJsc19wb3dlcl9vZl90d28gPSAxOworICB1bnNp Z25lZCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBudW1fdnRhYmxlX21hcF9u b2RlczsgKytpKQorICAgIGlmIChURVNUX0JJVCAoY2xhc3Nfbm9kZS0+ZGVz Y2VuZGFudHMsIGkpKQorICAgICAgeworICAgICAgICB0cmVlIGNsYXNzX3R5 cGUgPSB2dGJsX21hcF9ub2Rlc19hcnJheVtpXS0+Y2xhc3NfaW5mby0+Y2xh c3NfdHlwZTsKKyAgICAgICAgZm9yICh2dGJsID0gQ0xBU1NUWVBFX1ZUQUJM RVMgKGNsYXNzX3R5cGUpOyB2dGJsOworICAgICAgICAgICAgIHZ0YmwgPSBE RUNMX0NIQUlOICh2dGJsKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICB0 b3RhbF9udW1fdnRibHMgKys7CisgICAgICAgICAgICBpZiAodG90YWxfbnVt X3Z0YmxzID4gbnVtX3Z0YmxzX3Bvd2VyX29mX3R3bykKKyAgICAgICAgICAg ICAgbnVtX3Z0YmxzX3Bvd2VyX29mX3R3byA8PD0gMTsKKyAgICAgICAgICB9 CisgICAgICB9CisgIHJldHVybiBudW1fdnRibHNfcG93ZXJfb2ZfdHdvOwor fQorCisvKiBUaGlzIGZ1bmN0aW9uIGdvZXMgdGhyb3VnaCBvdXIgaW50ZXJu YWwgY2xhc3MgaGllcmFyY2h5ICYgdnRhYmxlCisgICBwb2ludGVyIGRhdGEg c3RydWN0dXJlIGFuZCBvdXRwdXRzIGNhbGxzIHRvIF9fVkxUUmVnaXN0ZXJQ YWlyIGZvcgorICAgZXZlcnkgY2xhc3MtdnB0ciBwYWlyIChmb3IgdGhvc2Ug Y2xhc3NlcyB3aG9zZSB2dGFibGUgd291bGQgYmUKKyAgIG91dHB1dCBpbiB0 aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0KS4gIFRoZXNlIGNhbGxzIGdl dCBwdXQgaW50bworICAgb3VyIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9u IGZ1bmN0aW9uLiAgKi8KKworc3RhdGljIGJvb2wKK3JlZ2lzdGVyX2FsbF9w YWlycyAodHJlZSBib2R5KQoreworICBzdHJ1Y3QgdnRibF9tYXBfbm9kZSAq Y3VycmVudDsKKyAgdHJlZSBiYXNlX3B0cl92YXJfZGVjbDsKKworICBib29s IHJlZ2lzdGVyZWRfYXRfbGVhc3Rfb25lID0gZmFsc2U7CisKKyAgZm9yIChj dXJyZW50ID0gdnRibF9tYXBfbm9kZXM7IGN1cnJlbnQ7IGN1cnJlbnQgPSBj dXJyZW50LT5uZXh0KQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGk7CisgICAg ICB0cmVlIGJhc2VfY2xhc3MgPSBjdXJyZW50LT5jbGFzc19pbmZvLT5jbGFz c190eXBlOworICAgICAgaW50IHNpemVfaGludCA9IGd1ZXNzX251bV92dGFi bGVfcG9pbnRlcnMgKGN1cnJlbnQtPmNsYXNzX2luZm8pOworICAgICAgYmFz ZV9wdHJfdmFyX2RlY2wgPSBjdXJyZW50LT52dGJsX21hcF9kZWNsOworCisg ICAgICBnY2NfYXNzZXJ0IChjdXJyZW50LT5jbGFzc19pbmZvICE9IE5VTEwp OworCisgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3Z0YWJsZV9tYXBfbm9k ZXM7ICsraSkKKyAgICAgICAgaWYgKFRFU1RfQklUIChjdXJyZW50LT5jbGFz c19pbmZvLT5kZXNjZW5kYW50cywgaSkpCisgICAgICAgICAgeworICAgICAg ICAgICAgc3RydWN0IHZ0YmxfbWFwX25vZGUgKnZ0YmxfY2xhc3Nfbm9kZSA9 IHZ0YmxfbWFwX25vZGVzX2FycmF5W2ldOworICAgICAgICAgICAgdHJlZSBj bGFzc190eXBlID0gdnRibF9jbGFzc19ub2RlLT5jbGFzc19pbmZvLT5jbGFz c190eXBlOworCisgICAgICAgICAgICBpZiAoY2xhc3NfdHlwZQorICAgICAg ICAgICAgICAgICYmIChUUkVFX0NPREUgKGNsYXNzX3R5cGUpID09IFJFQ09S RF9UWVBFKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdHJlZSBu ZXdfdHlwZTsKKyAgICAgICAgICAgICAgdHJlZSBhcmcxOworICAgICAgICAg ICAgICB0cmVlIGNhbGxfZXhwcjsKKyAgICAgICAgICAgICAgYm9vbCBhbHJl YWR5X3JlZ2lzdGVyZWQ7CisKKyAgICAgICAgICAgICAgdHJlZSBiaW5mbyA9 IFRZUEVfQklORk8gKGNsYXNzX3R5cGUpOworICAgICAgICAgICAgICB0cmVl IHZ0YWJsZV9kZWNsOworICAgICAgICAgICAgICBib29sIHZ0YWJsZV9zaG91 bGRfYmVfb3V0cHV0ID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgdnRhYmxl X2RlY2wgPSBDTEFTU1RZUEVfVlRBQkxFUyAoY2xhc3NfdHlwZSk7CisKKyAg ICAgICAgICAgICAgLyogSGFuZGxlIG1haW4gdnRhYmxlIGZvciB0aGlzIGNs YXNzLiAqLworCisgICAgICAgICAgICAgIGlmICh2dGFibGVfZGVjbCkKKyAg ICAgICAgICAgICAgICB2dGFibGVfc2hvdWxkX2JlX291dHB1dCA9IFRSRUVf QVNNX1dSSVRURU4gKHZ0YWJsZV9kZWNsKTsKKworICAgICAgICAgICAgICBp ZiAodnRhYmxlX2RlY2wgJiYgdnRhYmxlX3Nob3VsZF9iZV9vdXRwdXQKKyAg ICAgICAgICAgICAgICAgICYmIEJJTkZPX1ZUQUJMRSAoYmluZm8pKQorICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHRyZWUgdnRhYmxl X2FkZHJlc3MgPSBidWlsZF92dGJsX2FkZHJlc3MgKGJpbmZvKTsKKyAgICAg ICAgICAgICAgICAgIGludCBsZW4xICA9IElERU5USUZJRVJfTEVOR1RICisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChERUNMX05BTUUgKGJhc2VfcHRyX3Zhcl9kZWNsKSk7CisgICAgICAgICAg ICAgICAgICBpbnQgbGVuMiAgPSBJREVOVElGSUVSX0xFTkdUSCAoREVDTF9O QU1FICh2dGFibGVfZGVjbCkpOworICAgICAgICAgICAgICAgICAgdHJlZSBz dHIxID0gYnVpbGRfc3RyaW5nX2xpdGVyYWwgKGxlbjEsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURF TlRJRklFUl9QT0lOVEVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKERFQ0xfTkFNRQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo YmFzZV9wdHJfdmFyX2RlY2wpKSk7CisgICAgICAgICAgICAgICAgICB0cmVl IHN0cjIgPSBidWlsZF9zdHJpbmdfbGl0ZXJhbCAobGVuMiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ REVOVElGSUVSX1BPSU5URVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoREVDTF9OQU1FICh2dGFibGVf ZGVjbCkpKTsKKworICAgICAgICAgICAgICAgICAgYWxyZWFkeV9yZWdpc3Rl cmVkID0gcmVjb3JkX3JlZ2lzdGVyX3BhaXJzICh2dGFibGVfZGVjbCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdnRhYmxlX2FkZHJlc3MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJhc2VfY2xhc3MpOworCisgICAgICAgICAgICAgICAgICBpZiAoIWFs cmVhZHlfcmVnaXN0ZXJlZCkKKyAgICAgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgICAgIG5ld190eXBlID0gYnVpbGRfcG9pbnRlcl90 eXBlIChUUkVFX1RZUEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGJhc2VfcHRyX3Zhcl9kZWNsKSk7 CisgICAgICAgICAgICAgICAgICAgICAgYXJnMSA9IGJ1aWxkMSAoQUREUl9F WFBSLCBuZXdfdHlwZSwgYmFzZV9wdHJfdmFyX2RlY2wpOworCisjaWZkZWYg VlRWX0RFQlVHCisgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBjYWxs IGV4cHIgaGFzIHRoZSAzICJyZWFsIiBhcmd1bWVudHMsIHBsdXMgNAorICAg ICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2luZyBhcmd1bWVudHMuICBF dmVudHVhbGx5IGl0IHdpbGwgYmUgcmVwbGFjZWQKKyAgICAgICAgICAgICAg ICAgICAgICAgICB3aXRoIHRoZSBvbmUganVzdCBiZWxvdyBpdCwgd2hpY2gg b25seSBoYXMgdGhlIDIgcmVhbAorICAgICAgICAgICAgICAgICAgICAgICAg IGFyZ3VtZW50cy4gICovCisgICAgICAgICAgICAgICAgICAgICAgY2FsbF9l eHByID0gYnVpbGRfY2FsbF9leHByCisgICAgICAgICAgICAgICAgICAgICAg ICAgICh2bHRfcmVnaXN0ZXJfcGFpcnNfZm5kZWNsLCA3LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgYXJnMSwgdnRhYmxlX2FkZHJlc3MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9pbnRfY3N0IChpbnRlZ2Vy X3R5cGVfbm9kZSwgc2l6ZV9oaW50KSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cjEsIGJ1aWxkX2ludF9jc3QgKGludGVnZXJfdHlwZV9ub2Rl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGVuMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIy LCAgYnVpbGRfaW50X2NzdCAoaW50ZWdlcl90eXBlX25vZGUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVu MikpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICBjYWxsX2V4cHIg PSBidWlsZF9jYWxsX2V4cHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg KHZsdF9yZWdpc3Rlcl9wYWlyc19mbmRlY2wsIDMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBhcmcxLCB2dGFibGVfYWRkcmVzcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJ1aWxkX2ludF9jc3QgKGludGVnZXJfdHlw ZV9ub2RlLCBzaXplX2hpbnQpKTsKKyNlbmRpZgorICAgICAgICAgICAgICAg ICAgICAgIGFwcGVuZF90b19zdGF0ZW1lbnRfbGlzdCAoY2FsbF9leHByLCAm Ym9keSk7CisKKyAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkX2F0 X2xlYXN0X29uZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAv KiBGaW5kIGFuZCBoYW5kbGUgYW55ICdleHRyYScgdnRhYmxlcyBhc3NvY2lh dGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGlzIGNsYXNz LCB2aWEgdmlydHVhbCBpbmhlcml0YW5jZS4gICAqLworICAgICAgICAgICAg ICAgICAgICAgIHJlZ2lzdGVyX3ZwdHJfZmllbGRzIChhcmcxLCBiYXNlX2Ns YXNzLCBjbGFzc190eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBib2R5KTsKKworICAgICAgICAgICAgICAgICAg ICAgIC8qIEZpbmQgYW5kIGhhbmRsZSBhbnkgJ2V4dHJhJyB2dGFibGVzIGFz c29jaWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoaXMg Y2xhc3MsIHZpYSBtdWx0aXBsZSBpbmhlcml0YW5jZS4gICAqLworICAgICAg ICAgICAgICAgICAgICAgIHJlZ2lzdGVyX290aGVyX2JpbmZvX3Z0YWJsZXMg KGJpbmZvLCBib2R5LCBhcmcxLCBzdHIxLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbjEsIHN0cjIs IGxlbjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYmFzZV9jbGFzcyk7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg ICAgICAgfQorICAgIH0KKworICByZXR1cm4gcmVnaXN0ZXJlZF9hdF9sZWFz dF9vbmU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdnR2X2dyYXBoX25vZGUgKgor ZmluZF9ncmFwaF9ub2RlICh0cmVlIGNsYXNzX3R5cGUpCit7CisgIHRyZWUg Y2xhc3NfZGVjbCA9IFRSRUVfQ0hBSU4gKGNsYXNzX3R5cGUpOworICB0cmVl IGNsYXNzX25hbWVfaWQ7CisgIHN0cnVjdCB2dGJsX21hcF9ub2RlICp2dGJs X25vZGU7CisKKyAgaWYgKGNsYXNzX2RlY2wpCisgICAgY2xhc3NfbmFtZV9p ZCA9IERFQ0xfQVNTRU1CTEVSX05BTUUgKGNsYXNzX2RlY2wpOworICBlbHNl CisgICAgY2xhc3NfbmFtZV9pZCA9IERFQ0xfQVNTRU1CTEVSX05BTUUgKFRZ UEVfTkFNRSAoY2xhc3NfdHlwZSkpOworCisgIHZ0Ymxfbm9kZSA9IHZ0Ymxf bWFwX2dldF9ub2RlIChjbGFzc19uYW1lX2lkKTsKKworICBpZiAodnRibF9u b2RlKQorICAgIHJldHVybiB2dGJsX25vZGUtPmNsYXNzX2luZm87CisKKyAg cmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCithZGRfZWRnZV90b19n cmFwaCAoc3RydWN0IHZ0dl9ncmFwaF9ub2RlICoqKmVkZ2VfYXJyYXksIHVu c2lnbmVkICpudW1fZW50cmllcywKKyAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCAqbWF4X2VudHJpZXMsIHN0cnVjdCB2dHZfZ3JhcGhfbm9kZSAqbmV3 X2VudHJ5KQoreworICAvKiBDaGVjayBhcnJheSBzaXplLCBhbmQgcmUtc2l6 ZSBpdCBpZiBuZWNlc3NhcnkuICAqLworICBpZiAoKm51bV9lbnRyaWVzID49 ICgoKm1heF9lbnRyaWVzKSAtIDEpKQorICAgIHsKKyAgICAgIHVuc2lnbmVk IG5ld19zaXplID0gMiAqICgqbWF4X2VudHJpZXMpOworICAgICAgdW5zaWdu ZWQgaTsKKyAgICAgICplZGdlX2FycmF5ID0gKHN0cnVjdCB2dHZfZ3JhcGhf bm9kZSAqKikKKyAgICAgICAgICB4cmVhbGxvYyAoKmVkZ2VfYXJyYXksIG5l d19zaXplICogc2l6ZW9mIChzdHJ1Y3QgdnR2X2dyYXBoX25vZGUgKikpOwor CisgICAgICBmb3IgKGkgPSAqbWF4X2VudHJpZXM7IGkgPCBuZXdfc2l6ZTsg KytpKQorICAgICAgICAoKmVkZ2VfYXJyYXkpW2ldID0gTlVMTDsKKyAgICAg ICptYXhfZW50cmllcyA9IG5ld19zaXplOworICAgIH0KKworICAoKmVkZ2Vf YXJyYXkpWypudW1fZW50cmllc10gPSBuZXdfZW50cnk7CisgICpudW1fZW50 cmllcyA9ICgqbnVtX2VudHJpZXMpICsgMTsKK30KKworLyogQWRkIGJhc2Ug Y2xhc3MvZGVyaXZlZCBjbGFzcyBwYWlyIHRvIG91ciBpbnRlcm5hbCBjbGFz cyBoaWVyYXJjaHkKKyAgIGRhdGEgc3RydWN0dXJlLiAgKi8KKworc3RhdGlj IHZvaWQKK2FkZF9oaWVyYXJjaHlfcGFpciAoc3RydWN0IHZ0dl9ncmFwaF9u b2RlICpiYXNlX25vZGUsCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2 dHZfZ3JhcGhfbm9kZSAqZGVyaXZlZF9ub2RlKQoreworICBhZGRfZWRnZV90 b19ncmFwaCAoJihiYXNlX25vZGUtPmNoaWxkcmVuKSwgJihiYXNlX25vZGUt Pm51bV9jaGlsZHJlbiksCisgICAgICAgICAgICAgICAgICAgICAmKGJhc2Vf bm9kZS0+bWF4X2NoaWxkcmVuKSwgZGVyaXZlZF9ub2RlKTsKKyAgYWRkX2Vk Z2VfdG9fZ3JhcGggKCYoZGVyaXZlZF9ub2RlLT5wYXJlbnRzKSwgJihkZXJp dmVkX25vZGUtPm51bV9wYXJlbnRzKSwKKyAgICAgICAgICAgICAgICAgICAg ICYoZGVyaXZlZF9ub2RlLT5tYXhfcGFyZW50cyksIGJhc2Vfbm9kZSk7Cit9 CisKK3N0YXRpYyB2b2lkCit1cGRhdGVfY2xhc3NfaGllcmFyY2h5X2luZm9y bWF0aW9uICh0cmVlIGJhc2VfY2xhc3MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0cmVlIGRlcml2ZWRfY2xhc3MpCit7CisgIHN0 cnVjdCB2dHZfZ3JhcGhfbm9kZSAqYmFzZV9ub2RlID0gZmluZF9ncmFwaF9u b2RlIChiYXNlX2NsYXNzKTsKKyAgc3RydWN0IHZ0dl9ncmFwaF9ub2RlICpk ZXJpdmVkX25vZGUgPSBmaW5kX2dyYXBoX25vZGUgKGRlcml2ZWRfY2xhc3Mp OworCisgIGFkZF9oaWVyYXJjaHlfcGFpciAoYmFzZV9ub2RlLCBkZXJpdmVk X25vZGUpOworfQorCisvKiBHZW5lcmF0ZSBhbiB1bmRlZmluZWQgdmFyaWFi bGUgKGEgcmVmZXJlbmNlKSB0byBhIHZhcmlibGUgZGVmaW5lZCBpbiB0aGUK KyAgIHZ0dl9pbml0IGxpYnJhdHkuIEluIHRoYXQgd2F5LCBpZiB0aGUgYSBt b2R1bGUgaXMgbm90IGxpbmtlZCB3aXRoIHRoZQorICAgdnR2X2luaXQgbGli cmFyeSwgdGhlIGxpbmtlciB3aWxsIGdlbmVyYXRlIGFuIHVuZGVmaW5lZCBz eW1ib2wgZXJyb3IuCisgICBXaGljaCBpcyBtdWNoIGJldHRlciB0aGF0IGdl dHRpbmcgYSBzZWdtZW50YXRpb24gdmlvbGF0aW9uIGF0IHJ1bnRpbWUuCisK KyAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgY29tbWVudHMgaW4gbGli c3RkYysrLXYzL2xpYnN1cGMrKy92dHZfaW5pdC5jYyAqLworc3RhdGljIHZv aWQKK2NyZWF0ZV91bmRlZl9yZWZlcmVuY2VfdG9fdnR2X2luaXQodHJlZSBy ZWdpc3Rlcl9wYWlyc19ib2R5KQoreworICBjb25zdCBjaGFyICogdnR2X2lu aXRfdW5kZWZfdmFyID0gIl9fdnR2X2RlZmluZWRfaW5fdnR2X2luaXRfbGli IjsKKyAgdHJlZSB2YXJfZGVjbDsKKyAgdHJlZSBpbml0X3plcm87CisKKyAg dmFyX2RlY2wgID0gYnVpbGRfZGVjbCAoVU5LTk9XTl9MT0NBVElPTiwgVkFS X0RFQ0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9pZGVudGlm aWVyKHZ0dl9pbml0X3VuZGVmX3ZhciksCisgICAgICAgICAgICAgICAgICAg ICAgICAgIFRSRUVfVFlQRSAgKGludGVnZXJfemVyb19ub2RlKSk7CisgIFRS RUVfUFVCTElDICh2YXJfZGVjbCkgPSAxOworICBERUNMX0VYVEVSTkFMICh2 YXJfZGVjbCkgPSAxOworICBUUkVFX1NUQVRJQyAodmFyX2RlY2wpID0gMTsK KyAgU0VUX0RFQ0xfQVNTRU1CTEVSX05BTUUgKHZhcl9kZWNsLCBnZXRfaWRl bnRpZmllcih2dHZfaW5pdF91bmRlZl92YXIpKTsKKyAgREVDTF9BUlRJRklD SUFMICh2YXJfZGVjbCkgPSAxOworICBUUkVFX1JFQURPTkxZICh2YXJfZGVj bCkgPSAwOworICBERUNMX0lHTk9SRURfUCAodmFyX2RlY2wpID0gMTsKKyAg REVDTF9QUkVTRVJWRV9QKHZhcl9kZWNsKSA9IDE7CisgIHZhcnBvb2xfZmlu YWxpemVfZGVjbCAodmFyX2RlY2wpOworCisgIC8qIFN0b3JlIGEgdmFsdWUg aW4gdGhlIHVuZGVmaW5lZCB2YXJpYWJsZSB0byBmb3JjZSB0aGUgY3JlYXRp b24gb2YgYQorICAgICBhIHJlZmVyZW5jZSAqLworICBpbml0X3plcm8gPSBi dWlsZDIoTU9ESUZZX0VYUFIsIFRSRUVfVFlQRSh2YXJfZGVjbCksIHZhcl9k ZWNsLAorICAgICAgICAgICAgICAgICAgICAgaW50ZWdlcl96ZXJvX25vZGUp OworICBhcHBlbmRfdG9fc3RhdGVtZW50X2xpc3QgKGluaXRfemVybywgJnJl Z2lzdGVyX3BhaXJzX2JvZHkpOworCit9CisKK2Jvb2wKK3Z0dl9yZWdpc3Rl cl9jbGFzc19oaWVyYXJjaHlfaW5mb3JtYXRpb24gKHRyZWUgcmVnaXN0ZXJf cGFpcnNfYm9keSkKK3sKKyAgYm9vbCByZWdpc3RlcmVkX3NvbWV0aGluZyA9 IGZhbHNlOworCisgIGluaXRfZnVuY3Rpb25zICgpOworCisgIC8qIFRPRE86 IFRlbXAgZml4LiBOZWVkcyB0byBiZSB0aWdodGVuICovCisgIGlmIChudW1f dnRhYmxlX21hcF9ub2RlcyA9PSAwKQorICAgIHJldHVybiByZWdpc3RlcmVk X3NvbWV0aGluZzsKKworICAvKiBBZGQgY2xhc3MgaGllcmFyY2h5IHBhaXJz IHRvIHRoZSB2dGFibGUgbWFwIGRhdGEgc3RydWN0dXJlLiAqLworICByZWdp c3RlcmVkX3NvbWV0aGluZyA9IHJlZ2lzdGVyX2FsbF9wYWlycyAocmVnaXN0 ZXJfcGFpcnNfYm9keSk7CisKKyAgaWYgKHJlZ2lzdGVyZWRfc29tZXRoaW5n KQorICB7CisgICAgICAvKiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIGlu dG8gdGhlIHByZWluaXRfYXJyYXksIHRoZW4gd2UKKyAgICAgICAgIG5lZWQg dG8gbWFudWFsbHkgY2FsbCBfX1ZMVENoYW5nZVBlcm1pc3Npb24sIHJhdGhl ciB0aGFuCisgICAgICAgICBkZXBlbmRpbmcgb24gaW5pdGlhbGl6YXRpb24g cHJpb3JpdHlzIGluIHZ0dl9pbml0LiAqLworICAgICAgaWYgKGZsYWdfdnRh YmxlX3ZlcmlmeSA9PSBWVFZfUFJFSU5JVF9QUklPUklUWSkKKyAgICAgICAg eworICAgICAgICAgIC8qIFBhc3MgX19WTFRQX1JFQURfV1JJVEUgdmFsdWUg YXMgZGVmaW5lZCBpbiB2dHZfcnRzLmggKi8KKyAgICAgICAgICB0cmVlIGFy Z19yZWFkX3dyaXRlID0gYnVpbGRfaW50X2NzdCAoaW50ZWdlcl90eXBlX25v ZGUsIDEpOworICAgICAgICAgIHRyZWUgYXJnX3JlYWRfb25seSA9IGJ1aWxk X2ludF9jc3QgKGludGVnZXJfdHlwZV9ub2RlLCAwKTsKKworICAgICAgICAg IHRyZWUgY2FsbF9yd19leHByID0gYnVpbGRfY2FsbF9leHByICh2bHRfY2hh bmdlX3Blcm1pc3Npb25fZm5kZWNsLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBhcmdfcmVhZF93cml0ZSk7 CisgICAgICAgICAgdHJlZV9zdG10X2l0ZXJhdG9yIGkgPSB0c2lfc3RhcnQo cmVnaXN0ZXJfcGFpcnNfYm9keSk7CisgICAgICAgICAgLyogSW5zZXJ0IGF0 IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlZ2lzdGVyIHBhaXJzIHJvdXRpbmUg Ki8KKyAgICAgICAgICB0c2lfbGlua19iZWZvcmUoJmksIGNhbGxfcndfZXhw ciwgVFNJX1NBTUVfU1RNVCk7CisKKyAgICAgICAgICB0cmVlIGNhbGxfcl9l eHByID0gYnVpbGRfY2FsbF9leHByICh2bHRfY2hhbmdlX3Blcm1pc3Npb25f Zm5kZWNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEsIGFyZ19yZWFkX29ubHkpOworICAgICAgICAgIGFwcGVu ZF90b19zdGF0ZW1lbnRfbGlzdCAoY2FsbF9yX2V4cHIsICZyZWdpc3Rlcl9w YWlyc19ib2R5KTsKKyAgICAgICAgfQorCisgICAgICBpZiAoZmxhZ192dGFi bGVfdmVyaWZ5ID09IFZUVl9TVEFOREFSRF9QUklPUklUWSkKKyAgICAgICAg Y3JlYXRlX3VuZGVmX3JlZmVyZW5jZV90b192dHZfaW5pdChyZWdpc3Rlcl9w YWlyc19ib2R5KTsKKyAgfQorCisgIHJldHVybiByZWdpc3RlcmVkX3NvbWV0 aGluZzsKK30KKworCisvKiBHZW5lcmF0ZSB0aGUgc3BlY2lhbCBjb25zdHJ1 Y3RvciBmdW5jdGlvbiB0aGF0IGNhbGxzCisgICBfX1ZMVENoYW5nZVBlcm1p c3Npb24gYW5kIF9fVkxUUmVnaXN0ZXJQYWlycywgYW5kIGdpdmUgaXQgYSB2 ZXJ5CisgICBoaWdoIGluaXRpYWxpemF0aW9uIHByaW9yaXR5LiAgKi8KKwor dm9pZAordnR2X2dlbmVyYXRlX2luaXRfcm91dGluZShjb25zdCBjaGFyICog ZmlsZW5hbWUpCit7CisgIGNvbnN0IGNoYXIgKiBjd2QgPSBmaWxlbmFtZTsK KyAgY2hhciB0ZW1wX25hbWVbNThdOworICB0cmVlIHJlZ2lzdGVyX3BhaXJz X2JvZHk7CisgIGNoYXIgKiBjcHRyOworICBpbnQgaTsKKyAgYm9vbCB2dGFi bGVfY2xhc3Nlc19mb3VuZCA9IGZhbHNlOworCisgIC8qIFRoZSBsYXN0IHBh cnQgb2YgdGhlIGRpcmVjdG9yeSB0cmVlIHdpbGwgYmUgd2hlcmUgaXQKKyAg ICAgZGlmZmVyZW50aWF0ZXM7IHRoZSBmaXJzdCBwYXJ0IG1heSBiZSB0aGUg c2FtZS4gKi8KKyAgaWYgKHN0cmxlbiAoY3dkKSA+IDUwKQorICAgIHsKKyAg ICAgIGludCBwb3MgPSAoc3RybGVuIChjd2QpIC0gNTApOworICAgICAgY3dk ID0gY3dkICsgcG9zOworICAgIH0KKworICAvKiBUT0RPOiBBcmUgdGhlc2Ug YWxsIHRoZSBjaGFycyB3ZSBuZWVkIHRvIG1hcD8gKi8KKyAgc3ByaW50ZiAo dGVtcF9uYW1lLCAiJS41MHMudnRhYmxlIiwgY3dkKTsKKyAgZm9yIChjcHRy ID0gdGVtcF9uYW1lLCBpID0gMDsKKyAgICAgICAoY3B0clswXSAhPSAnXDAn KSAmJiAoaSA8IDUwKTsKKyAgICAgICBjcHRyKyssIGkrKykKKyAgICBpZiAo KGNwdHJbMF0gPT0gJy8nKSB8fCAoY3B0clswXSA9PSAnLScpIHx8IChjcHRy WzBdID09ICcrJykpCisgICAgICBjcHRyWzBdID0gJ18nOworCisgIHB1c2hf bGFuZ19jb250ZXh0IChsYW5nX25hbWVfYyk7CisKKyAgLyogVGhlIHByaW9y aXR5IGZvciB0aGlzIGluaXQgZnVuY3Rpb24gKGNvbnN0cnVjdG9yKSBpcyBj YXJlZnVsbHkKKyAgICAgY2hvc2VuIHNvIHRoYXQgaXQgd2lsbCBoYXBwZW4g YWZ0ZXIgdGhlIGNhbGxzIHRvIHVucHJvdGVjdCB0aGUKKyAgICAgbWVtb3J5 IHVzZWQgZm9yIHZ0YWJsZSB2ZXJpZmljYXRpb24gYW5kIGJlZm9yZSB0aGUg bWVtb3J5IGlzCisgICAgIHByb3RlY3RlZCBhZ2FpbiAqLworICByZWdpc3Rl cl9wYWlyc19ib2R5ID0gc3RhcnRfb2JqZWN0cyAoJ0knLCBNQVhfUkVTRVJW RURfSU5JVF9QUklPUklUWSAtIDEsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKSB0ZW1wX25hbWUpOwor CisgIHZ0YWJsZV9jbGFzc2VzX2ZvdW5kID0KKyAgICAgIHZ0dl9yZWdpc3Rl cl9jbGFzc19oaWVyYXJjaHlfaW5mb3JtYXRpb24gKHJlZ2lzdGVyX3BhaXJz X2JvZHkpOworCisgIGlmICh2dGFibGVfY2xhc3Nlc19mb3VuZCkKKyAgICB7 CisKKyAgICAgIGN1cnJlbnRfZnVuY3Rpb25fZGVjbCA9CisgICAgICAgICAg ZmluaXNoX29iamVjdHMgKCdJJywgTUFYX1JFU0VSVkVEX0lOSVRfUFJJT1JJ VFkgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl9w YWlyc19ib2R5KTsKKyAgICAgIGFsbG9jYXRlX3N0cnVjdF9mdW5jdGlvbiAo Y3VycmVudF9mdW5jdGlvbl9kZWNsLCBmYWxzZSk7CisgICAgICBUUkVFX1NU QVRJQyAoY3VycmVudF9mdW5jdGlvbl9kZWNsKSA9IDE7CisgICAgICBUUkVF X1VTRUQgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkgPSAxOworICAgICAgREVD TF9QUkVTRVJWRV9QIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wpID0gMTsKKyAg ICAgIGlmIChmbGFnX3Z0YWJsZV92ZXJpZnkgPT0gVlRWX1BSRUlOSVRfUFJJ T1JJVFkpCisgICAgICAgIHsKKyAgICAgICAgICBERUNMX1NUQVRJQ19DT05T VFJVQ1RPUiAoY3VycmVudF9mdW5jdGlvbl9kZWNsKSA9IDA7CisgICAgICAg ICAgYXNzZW1ibGVfdnR2X3ByZWluaXRfaW5pdGlhbGl6ZXIgKGN1cnJlbnRf ZnVuY3Rpb25fZGVjbCk7CisgICAgICAgIH0KKworICAgICAgZ2ltcGxpZnlf ZnVuY3Rpb25fdHJlZSAoY3VycmVudF9mdW5jdGlvbl9kZWNsKTsKKyAgICAg IGNncmFwaF9hZGRfbmV3X2Z1bmN0aW9uIChjdXJyZW50X2Z1bmN0aW9uX2Rl Y2wsIGZhbHNlKTsKKworICAgICAgY2dyYXBoX3Byb2Nlc3NfbmV3X2Z1bmN0 aW9ucyAoKTsKKyAgICB9CisgIHBvcF9sYW5nX2NvbnRleHQgKCk7Cit9CisK K3N0cnVjdCB2dGJsX21hcF9ub2RlICoKK3Z0YWJsZV9maW5kX29yX2NyZWF0 ZV9tYXBfZGVjbCAodHJlZSBiYXNlX3R5cGUpCit7CisgIHRyZWUgYmFzZV9k ZWNsID0gVFJFRV9DSEFJTiAoYmFzZV90eXBlKTsKKyAgdHJlZSBiYXNlX2lk OworICB0cmVlIHZhcl9kZWNsID0gTlVMTDsKKyAgY2hhciAqdmFyX25hbWUg PSBOVUxMOworICBzdHJ1Y3QgdnRibF9tYXBfbm9kZSAqdnRhYmxlX21hcF9u b2RlID0gTlVMTDsKKworCisgIC8qIFZlcmlmeSB0aGUgdHlwZSBoYXMgYW4g YXNzb2NpYXRlZCB2dGFibGUgKi8KKyAgaWYgKCFUWVBFX0JJTkZPIChiYXNl X3R5cGUpIHx8ICFCSU5GT19WVEFCTEUgKFRZUEVfQklORk8gKGJhc2VfdHlw ZSkpKQorICAgIHJldHVybiBOVUxMOworCisgIGlmIChiYXNlX2RlY2wpCisg ICAgYmFzZV9pZCA9IERFQ0xfQVNTRU1CTEVSX05BTUUgKGJhc2VfZGVjbCk7 CisgIGVsc2UKKyAgICBiYXNlX2lkID0gREVDTF9BU1NFTUJMRVJfTkFNRSAo VFlQRV9OQU1FIChiYXNlX3R5cGUpKTsKKworICAvKiBDcmVhdGUgbWFwIGxv b2t1cCBzeW1ib2wgZm9yIGJhc2UgY2xhc3MgKi8KKyAgdmFyX25hbWUgPSBB Q09OQ0FUICgoIl9aTjRfVlRWSSIsIElERU5USUZJRVJfUE9JTlRFUiAoYmFz ZV9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICJFMTJfX3Z0YWJsZV9t YXBFIiwgTlVMTCkpOworICBpZiAoYmFzZV9pZCkKKyAgICAvKiBXZSd2ZSBh bHJlYWR5IGNyZWF0ZWQgdGhlIHZhcmlhYmxlOyBqdXN0IGxvb2sgaXQuICAq LworICAgIHZ0YWJsZV9tYXBfbm9kZSA9IHZ0YmxfbWFwX2dldF9ub2RlIChi YXNlX2lkKTsKKworICBpZiAoIXZ0YWJsZV9tYXBfbm9kZSB8fCAodnRhYmxl X21hcF9ub2RlLT52dGJsX21hcF9kZWNsID09IE5VTExfVFJFRSkpCisgICAg eworICAgICAgLyogSWYgd2UgaGF2ZW4ndCBhbHJlYWR5IGNyZWF0ZWQgdGhl ICpfX3Z0YWJsZV9tYXAKKyAgICAgICAgIGdsb2JhbCB2YXJpYWJsZSBmb3Ig dGhpcyBjbGFzcywgZG8gc28gbm93LCBhbmQKKyAgICAgICAgIGFkZCBpdCB0 byB0aGUgdmFycG9vbCwgdG8gbWFrZSBzdXJlIGl0IGdldHMgc2F2ZWQKKyAg ICAgICAgIGFuZCB3cml0dGVuIG91dC4gICovCisKKyAgICAgIGNoYXIgKnNl Y3RfbmFtZSA9IE5VTEw7CisgICAgICB0cmVlIHZhcl90eXBlID0gYnVpbGRf cG9pbnRlcl90eXBlICh2b2lkX3R5cGVfbm9kZSk7CisgICAgICB0cmVlIGlu aXRpYWxfdmFsdWUgPSBidWlsZF9pbnRfY3N0IChtYWtlX25vZGUgKElOVEVH RVJfVFlQRSksIDApOworCisgICAgICB2YXJfZGVjbCAgPSBidWlsZF9kZWNs IChVTktOT1dOX0xPQ0FUSU9OLCBWQVJfREVDTCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdldF9pZGVudGlmaWVyICh2YXJfbmFtZSksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJfdHlwZSk7CisgICAg ICBUUkVFX1BVQkxJQyAodmFyX2RlY2wpID0gMTsKKyAgICAgIERFQ0xfRVhU RVJOQUwgKHZhcl9kZWNsKSA9IDA7CisgICAgICBUUkVFX1NUQVRJQyAodmFy X2RlY2wpID0gMTsKKyAgICAgIFNFVF9ERUNMX0FTU0VNQkxFUl9OQU1FICh2 YXJfZGVjbCwgZ2V0X2lkZW50aWZpZXIgKHZhcl9uYW1lKSk7CisgICAgICBE RUNMX0FSVElGSUNJQUwgKHZhcl9kZWNsKSA9IDE7CisgICAgICAvKiBXZSBj YW5ub3QgbWFyayB0aGlzIHZhcmlhYmxlIGFzIHJlYWQtb25seSBvdGhlcndp c2UgdGhlIGdvbGQKKyAgICAgICAgIGxpbmtlciB3aWxsIG5vdCBwdXQgaXQg aW4gdGhlIHJlbHJvIHNlY3Rpb24uIEl0IHNlZW1zIGlmIGl0CisgICAgICAg ICBpcyBtYXJrZWQgYXMgcmVhZC1vbmx5LCBnb2xkIHdpbGwgcHV0IGl0IGlu IHRoZSAudGV4dAorICAgICAgICAgc2VnbWVudC4gICovCisgICAgICBUUkVF X1JFQURPTkxZICh2YXJfZGVjbCkgPSAwOworICAgICAgREVDTF9JR05PUkVE X1AgKHZhcl9kZWNsKSA9IDE7CisKKyAgICAgIC8qIFB1dCB0aGVzZSBtbWFw IHZhcmlhYmxlcyBpbiB0byBkYXRhLnJlbC5ybyBzZWN0aW9ucy4KKwkgSXQg dHVybnMgb3V0IHRoaXMgbmVlZHMgYSBwcmV2aW91cyBmaXggaW4gYmludXRp bHMgYXMKKwkgZXhwbGFpbmVkIGhlcmU6CisgICAgICAgICBodHRwOi8vc291 cmNld2FyZS5vcmcvbWwvYmludXRpbHMvMjAxMS0wNS9tc2cwMDA4My5odG1s ICAqLworCisgICAgICBzZWN0X25hbWUgPSBBQ09OQ0FUICgoIi5kYXRhLnJl bC5yby4iLCAidnRhYmxlX21hcF92YXJzIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMKSk7CisgICAgICBERUNMX1NFQ1RJT05fTkFNRSAo dmFyX2RlY2wpID0gYnVpbGRfc3RyaW5nIChzdHJsZW4gKHNlY3RfbmFtZSks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzZWN0X25hbWUpOworICAgICAgREVDTF9IQVNfSU1QTElDSVRf U0VDVElPTl9OQU1FX1AgKHZhcl9kZWNsKSA9IHRydWU7CisgICAgICBERUNM X0NPTURBVF9HUk9VUCAodmFyX2RlY2wpID0gZ2V0X2lkZW50aWZpZXIgKHZh cl9uYW1lKTsKKyAgICAgIERFQ0xfSU5JVElBTCAodmFyX2RlY2wpID0gaW5p dGlhbF92YWx1ZTsKKworICAgICAgdmFycG9vbF9maW5hbGl6ZV9kZWNsICh2 YXJfZGVjbCk7CisgICAgICBpZiAoIXZ0YWJsZV9tYXBfbm9kZSkKKyAgICAg ICAgdnRhYmxlX21hcF9ub2RlID0gZmluZF9vcl9jcmVhdGVfdnRibF9tYXBf bm9kZSAoYmFzZV90eXBlKTsKKyAgICAgIGlmICh2dGFibGVfbWFwX25vZGUt PnZ0YmxfbWFwX2RlY2wgPT0gTlVMTF9UUkVFKQorICAgICAgICB2dGFibGVf bWFwX25vZGUtPnZ0YmxfbWFwX2RlY2wgPSB2YXJfZGVjbDsKKyAgICB9CisK KyAgZ2NjX2Fzc2VydCAodnRhYmxlX21hcF9ub2RlKTsKKyAgcmV0dXJuIHZ0 YWJsZV9tYXBfbm9kZTsKK30KKworc3RhdGljIHZvaWQKK3Z0dl9zYXZlX2Jh c2VfY2xhc3NfaW5mbyAodHJlZSB0eXBlKQoreworICBpZiAoZmxhZ192dGFi bGVfdmVyaWZ5KQorICAgIHsKKyAgICAgIHRyZWUgYmluZm8gPSAgVFlQRV9C SU5GTyAodHlwZSk7CisgICAgICB0cmVlIGJhc2VfYmluZm87CisgICAgICBz dHJ1Y3QgdnRibF9tYXBfbm9kZSAqb3duX21hcDsKKyAgICAgIGludCBpOwor CisgICAgICAvKiBGaXJzdCBtYWtlIHN1cmUgdG8gY3JlYXRlIHRoZSBtYXAg Zm9yIHRoaXMgcmVjb3JkIHR5cGUuICAqLworICAgICAgb3duX21hcCA9IHZ0 YWJsZV9maW5kX29yX2NyZWF0ZV9tYXBfZGVjbCAodHlwZSk7CisgICAgICBp ZiAob3duX21hcCA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICAg IC8qIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2YgYWxsIGJhc2UgY2xhc3NlcyBm b3IgdGhlIGN1cnJlbnQgKGRlcml2ZWQpCisgICAgICAgICB0eXBlLCBtYWtl IHN1cmUgdGhlICpfX3Z0YWJsZV9tYXAgZ2xvYmFsIHZhcmlhYmxlIGZvciB0 aGUgYmFzZSBjbGFzcworCSBleGlzdHMsIGFuZCBhZGQgdGhlIGJhc2UgY2xh c3MvZGVyaXZlZCBjbGFzcyBwYWlyIHRvIHRoZSBjbGFzcworCSBoaWVyYXJj aHkgaW5mb3JtYXRpb24gd2UgYXJlIGFjY3VtdWxhdGluZyAoZm9yIHZ0YWJs ZSBwb2ludGVyCisJIHZlcmlmaWNhdGlvbikuICAqLworICAgICAgZm9yIChp ID0gMDsgQklORk9fQkFTRV9JVEVSQVRFKGJpbmZvLCBpLCBiYXNlX2JpbmZv KTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgdHJlZSB0cmVlX3ZhbCA9 IEJJTkZPX1RZUEUoYmFzZV9iaW5mbyk7CisgICAgICAgICAgc3RydWN0IHZ0 YmxfbWFwX25vZGUgKnZ0YWJsZV9tYXBfbm9kZSA9IE5VTEw7CisKKyAgICAg ICAgICB2dGFibGVfbWFwX25vZGUgPSB2dGFibGVfZmluZF9vcl9jcmVhdGVf bWFwX2RlY2wgKHRyZWVfdmFsKTsKKworICAgICAgICAgIGlmICh2dGFibGVf bWFwX25vZGUgIT0gTlVMTCkKKyAgICAgICAgICAgIHVwZGF0ZV9jbGFzc19o aWVyYXJjaHlfaW5mb3JtYXRpb24gKHRyZWVfdmFsLCB0eXBlKTsKKyAgICAg ICAgfQorICAgIH0KK30KKwordm9pZAordnR2X3NhdmVfY2xhc3NfaW5mbyAo dHJlZSByZWNvcmQpCit7CisgIGlmICghZmxhZ192dGFibGVfdmVyaWZ5IHx8 IFRSRUVfQ09ERSAocmVjb3JkKSA9PSBVTklPTl9UWVBFKQorICAgIHJldHVy bjsKKworICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKHJlY29yZCkgPT0gUkVD T1JEX1RZUEUpOworCisgIHZsdF9zYXZlZF9jbGFzc19pbmZvID0gdHJlZV9j b25zIChOVUxMX1RSRUUsIHJlY29yZCwgdmx0X3NhdmVkX2NsYXNzX2luZm8p OworfQorCisKK3ZvaWQKK3Z0dl9yZWNvdmVyX2NsYXNzX2luZm8gKHZvaWQp Cit7CisgIHRyZWUgY3VycmVudF9jbGFzczsKKyAgdHJlZSBjbGFzc19jaGFp biA9IHZsdF9zYXZlZF9jbGFzc19pbmZvOworICB3aGlsZSAoY2xhc3NfY2hh aW4gIT0gTlVMTF9UUkVFKQorICAgIHsKKyAgICAgIGN1cnJlbnRfY2xhc3Mg PSBUUkVFX1ZBTFVFIChjbGFzc19jaGFpbik7CisgICAgICBnY2NfYXNzZXJ0 IChUUkVFX0NPREUgKGN1cnJlbnRfY2xhc3MpID09IFJFQ09SRF9UWVBFKTsK KworICAgICAgdnR2X3NhdmVfYmFzZV9jbGFzc19pbmZvIChjdXJyZW50X2Ns YXNzKTsKKyAgICAgIGNsYXNzX2NoYWluID0gVFJFRV9DSEFJTiAoY2xhc3Nf Y2hhaW4pOworICAgIH0KKworICAvKiBMZXQgR0MgY29sbGVjdCB0aGUgbWVt b3J5IGFzc29jaWF0ZWQgdG8gdGhlIGNoYWluICovCisgIHZsdF9zYXZlZF9j bGFzc19pbmZvID0gTlVMTF9UUkVFOworfQorCisjaW5jbHVkZSAiZ3QtY3At dnRhYmxlLWNsYXNzLWhpZXJhcmNoeS5oIgoKUHJvcGVydHkgY2hhbmdlcyBv bjogZ2NjL2NwL3Z0YWJsZS1jbGFzcy1oaWVyYXJjaHkuYwpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCklu ZGV4OiBnY2MvY3AvbWFuZ2xlLmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gZ2NjL2NwL21hbmdsZS5jCShyZXZpc2lvbiAxOTI1MDMpCisrKyBnY2Mv Y3AvbWFuZ2xlLmMJKHdvcmtpbmcgY29weSkKQEAgLTMzNjQsNyArMzM2NCw3 IEBAIG1hbmdsZV9kZWNsX3N0cmluZyAoY29uc3QgdHJlZSBkZWNsKQogCiAv KiBSZXR1cm4gYW4gaWRlbnRpZmllciBmb3IgdGhlIGV4dGVybmFsIG1hbmds ZWQgbmFtZSBvZiBERUNMLiAgKi8KIAotc3RhdGljIHRyZWUKK3RyZWUKIGdl dF9tYW5nbGVkX2lkICh0cmVlIGRlY2wpCiB7CiAgIHRyZWUgaWQgPSBtYW5n bGVfZGVjbF9zdHJpbmcgKGRlY2wpOwpJbmRleDogZ2NjL2NwL2NwLXRyZWUu aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY3AvY3AtdHJlZS5o CShyZXZpc2lvbiAxOTI1MDMpCisrKyBnY2MvY3AvY3AtdHJlZS5oCSh3b3Jr aW5nIGNvcHkpCkBAIC01MjIyLDYgKzUyMjIsOCBAQCBleHRlcm4gdm9pZCBu b3RlX3ZhZ3VlX2xpbmthZ2VfZm4JCSh0cmVlCiBleHRlcm4gdHJlZSBidWls ZF9hcnRpZmljaWFsX3Bhcm0JCSh0cmVlLCB0cmVlKTsKIGV4dGVybiBib29s IHBvc3NpYmx5X2lubGluZWRfcAkJCSh0cmVlKTsKIGV4dGVybiBpbnQgcGFy bV9pbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICh0cmVlKTsKK2V4 dGVybiB0cmVlIHN0YXJ0X29iamVjdHMgICAgICAgICAgICAgICAgICAgICAg IChpbnQsIGludCwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB0cmVlIGZpbmlz aF9vYmplY3RzICAgICAgICAgICAgICAgICAgICAgIChpbnQsIGludCwgdHJl ZSk7CiAKIC8qIGluIGVycm9yLmMgKi8KIGV4dGVybiB2b2lkIGluaXRfZXJy b3IJCQkJKHZvaWQpOwpAQCAtNTMwOSw2ICs1MzExLDcgQEAgZXh0ZXJuIHRy ZWUgYnVpbGRfamF2YV9jbGFzc19yZWYJCSh0cmVlKQogZXh0ZXJuIHRyZWUg aW50ZWdyYWxfY29uc3RhbnRfdmFsdWUJCSh0cmVlKTsKIGV4dGVybiB0cmVl IGRlY2xfY29uc3RhbnRfdmFsdWVfc2FmZQkgICAgICAgICh0cmVlKTsKIGV4 dGVybiBpbnQgZGlhZ25vc2VfdW5pbml0aWFsaXplZF9jc3Rfb3JfcmVmX21l bWJlciAodHJlZSwgYm9vbCwgYm9vbCk7CitleHRlcm4gdHJlZSBidWlsZF92 dGJsX2FkZHJlc3MgICAgICAgICAgICAgICAgICAodHJlZSk7CiAKIC8qIGlu IGxleC5jICovCiBleHRlcm4gdm9pZCBjeHhfZHVwX2xhbmdfc3BlY2lmaWNf ZGVjbAkJKHRyZWUpOwpAQCAtNTUzNSw2ICs1NTM4LDExIEBAIGV4dGVybiB0 cmVlIGNvcGllZF9iaW5mbwkJCSh0cmVlLCB0cmVlKTsKIGV4dGVybiB0cmVl IG9yaWdpbmFsX2JpbmZvCQkJKHRyZWUsIHRyZWUpOwogZXh0ZXJuIGludCBz aGFyZWRfbWVtYmVyX3AJCQkodHJlZSk7CiAKKy8qIGluIHZ0YWJsZS1jbGFz cy1oaWVyYXJjaHkuYyAqLworZXh0ZXJuIHZvaWQgdnR2X2NvbXB1dGVfY2xh c3NfaGllcmFyY2h5X3RyYW5zaXRpdmVfY2xvc3VyZSAodm9pZCk7CitleHRl cm4gdm9pZCB2dHZfZ2VuZXJhdGVfaW5pdF9yb3V0aW5lICAgICAgICAgICAo Y29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIHZ0dl9zYXZlX2NsYXNzX2lu Zm8gICAgICAgICAgICAgICAgICh0cmVlKTsKK2V4dGVybiB2b2lkIHZ0dl9y ZWNvdmVyX2NsYXNzX2luZm8gICAgICAgICAgICAgICh2b2lkKTsKIAogLyog VGhlIHJlcHJlc2VudGF0aW9uIG9mIGEgZGVmZXJyZWQgYWNjZXNzIGNoZWNr LiAgKi8KIApAQCAtNjAxNyw2ICs2MDI1LDcgQEAgZXh0ZXJuIHRyZWUgbWFu Z2xlX3Rsc19pbml0X2ZuCQkJKHRyZWUpOwogZXh0ZXJuIHRyZWUgbWFuZ2xl X3Rsc193cmFwcGVyX2ZuCQkodHJlZSk7CiBleHRlcm4gYm9vbCBkZWNsX3Rs c193cmFwcGVyX3AJCQkodHJlZSk7CiBleHRlcm4gdHJlZSBtYW5nbGVfcmVm X2luaXRfdmFyaWFibGUJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGdldF9tYW5n bGVkX2lkICAgICAgICAgICAgICAgICAgICAgICh0cmVlKTsKIAogLyogaW4g ZHVtcC5jICovCiBleHRlcm4gYm9vbCBjcF9kdW1wX3RyZWUJCQkodm9pZCAq LCB0cmVlKTsKSW5kZXg6IGdjYy90aW1ldmFyLmRlZgo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBnY2MvdGltZXZhci5kZWYJKHJldmlzaW9uIDE5MjUw MykKKysrIGdjYy90aW1ldmFyLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMjUx LDYgKzI1MSw3IEBAIERFRlRJTUVWQVIgKFRWX1RSRUVfVU5JTklUICAgICAg ICAgICAsICIKIERFRlRJTUVWQVIgKFRWX1BMVUdJTl9JTklUICAgICAgICAg ICAsICJwbHVnaW4gaW5pdGlhbGl6YXRpb24iKQogREVGVElNRVZBUiAoVFZf UExVR0lOX1JVTiAgICAgICAgICAgICwgInBsdWdpbiBleGVjdXRpb24iKQog REVGVElNRVZBUiAoVFZfR0lNUExFX1NMU1IgICAgICAgICAgICwgInN0cmFp Z2h0LWxpbmUgc3RyZW5ndGggcmVkdWN0aW9uIikKK0RFRlRJTUVWQVIgKFRW X1ZUQUJMRV9WRVJJRklDQVRJT04gICAsICJ0cmVlIHZ0YWJsZSB2ZXJpZmlj YXRpb24iKQogCiAvKiBFdmVyeXRoaW5nIGVsc2UgaW4gcmVzdF9vZl9jb21w aWxhdGlvbiBub3QgaW5jbHVkZWQgYWJvdmUuICAqLwogREVGVElNRVZBUiAo VFZfRUFSTFlfTE9DQUwJICAgICAsICJlYXJseSBsb2NhbCBwYXNzZXMiKQpJ bmRleDogZ2NjL2ZsYWctdHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBnY2MvZmxhZy10eXBlcy5oCShyZXZpc2lvbiAxOTI1MDMpCisrKyBn Y2MvZmxhZy10eXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNCArMjAw LDEwIEBAIGVudW0gZnBfY29udHJhY3RfbW9kZSB7CiAgIEZQX0NPTlRSQUNU X0ZBU1QgPSAyCiB9OwogCisvKiBmbGFnX3Z0YWJsZV92ZXJpZnkgaW5pdGlh bGl6YXRpb24gbGV2ZWxzLiAqLworZW51bSB2dHZfcHJpb3JpdHkgeworICBW VFZfTk9fUFJJT1JJVFkgICAgICAgPSAwLCAgLyogaS5FLiBEbyBOT1QgZG8g dnRhYmxlIHZlcmlmaWNhdGlvbi4gKi8KKyAgVlRWX1NUQU5EQVJEX1BSSU9S SVRZID0gMSwKKyAgVlRWX1BSRUlOSVRfUFJJT1JJVFkgID0gMgorfTsKICNl bmRpZiAvKiAhIEdDQ19GTEFHX1RZUEVTX0ggKi8KSW5kZXg6IGdjYy90cmVl LXZ0YWJsZS12ZXJpZnkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBn Y2MvdHJlZS12dGFibGUtdmVyaWZ5LmMJKHJldmlzaW9uIDApCisrKyBnY2Mv dHJlZS12dGFibGUtdmVyaWZ5LmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs MTA2MSBAQAorLyogICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcs IDIwMDgsIDIwMDksIDIwMTAsIDIwMTEKKy8qIEludGVycHJvY2VkdXJhbCBj b25zdGFudCBwcm9wYWdhdGlvbgorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0ND IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl CitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKwor WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhl IGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBWaXJ0dWFsIFRhYmxlIFBvaW50 ZXIgU2VjdXJpdHkgUGFzcy4gICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK KyNpbmNsdWRlICJzeXN0ZW0uaCIKKyNpbmNsdWRlICJjb3JldHlwZXMuaCIK KyNpbmNsdWRlICJ0bS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRl ICJjcC9jcC10cmVlLmgiCisjaW5jbHVkZSAidG1fcC5oIgorI2luY2x1ZGUg ImJhc2ljLWJsb2NrLmgiCisjaW5jbHVkZSAib3V0cHV0LmgiCisjaW5jbHVk ZSAidHJlZS1mbG93LmgiCisjaW5jbHVkZSAidHJlZS1kdW1wLmgiCisjaW5j bHVkZSAidHJlZS1wYXNzLmgiCisjaW5jbHVkZSAidGltZXZhci5oIgorI2lu Y2x1ZGUgImNmZ2xvb3AuaCIKKyNpbmNsdWRlICJmbGFncy5oIgorI2luY2x1 ZGUgInRyZWUtaW5saW5lLmgiCisjaW5jbHVkZSAidHJlZS1zY2FsYXItZXZv bHV0aW9uLmgiCisjaW5jbHVkZSAiZGlhZ25vc3RpYy1jb3JlLmgiCisjaW5j bHVkZSAiZ2ltcGxlLXByZXR0eS1wcmludC5oIgorI2luY2x1ZGUgInRvcGxl di5oIgorI2luY2x1ZGUgImxhbmdob29rcy5oIgorCisjaW5jbHVkZSAidHJl ZS12dGFibGUtdmVyaWZ5LmgiCisKK3Vuc2lnbmVkIG51bV92dGFibGVfbWFw X25vZGVzID0gMDsKK2Jvb2wgYW55X3ZlcmlmaWNhdGlvbl9jYWxsc19nZW5l cmF0ZWQgPSBmYWxzZTsKKworc3RhdGljIEdUWSgoKSkgdHJlZSB2ZXJpZnlf dnRibF9wdHJfZm5kZWNsID0gTlVMTF9UUkVFOworCit1bnNpZ25lZCBpbnQg dnRhYmxlX3ZlcmlmeV9tYWluICh2b2lkKTsKK3N0YXRpYyBib29sIGdhdGVf dHJlZV92dGFibGVfdmVyaWZ5ICh2b2lkKTsKK3N0YXRpYyB2b2lkIGJ1aWxk X3Z0YWJsZV92ZXJpZnlfZm5kZWNsICh2b2lkKTsKK3N0YXRpYyB0cmVlIG15 X2J1aWxkMSAoZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUpOworCitib29s Cit2dGJsX21hcF9ub2RlX3JlZ2lzdHJhdGlvbl9maW5kIChzdHJ1Y3QgdnRi bF9tYXBfbm9kZSAqbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRyZWUgdnRhYmxlX2RlY2wsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQpCit7CisgIHN0cnVjdCB2 dGFibGVfcmVnaXN0cmF0aW9uIGtleTsKKyAgc3RydWN0IHZ0YWJsZV9yZWdp c3RyYXRpb24gKipzbG90OworCisgIGdjY19hc3NlcnQgKG5vZGUpOworICBn Y2NfYXNzZXJ0IChub2RlLT5yZWdpc3RlcmVkKTsKKworICBrZXkudnRhYmxl X2RlY2wgPSB2dGFibGVfZGVjbDsKKyAgc2xvdCA9IChzdHJ1Y3QgdnRhYmxl X3JlZ2lzdHJhdGlvbiAqKikgaHRhYl9maW5kX3Nsb3QgKG5vZGUtPnJlZ2lz dGVyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAma2V5LCBOT19JTlNFUlQpOworCisgIGlm IChzbG90ICYmICgqc2xvdCkgJiYgKCpzbG90KS0+b2Zmc2V0cykKKyAgICB7 CisgICAgICB1bnNpZ25lZCBpOworICAgICAgZm9yIChpID0gMDsgaSA8ICgq c2xvdCktPmN1cl9vZmZzZXQ7ICsraSkKKyAgICAgICAgaWYgKCgqc2xvdCkt Pm9mZnNldHNbaV0gPT0gb2Zmc2V0KQorICAgICAgICAgIHJldHVybiB0cnVl OworICAgIH0KKworICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQKK3Z0Ymxf bWFwX25vZGVfcmVnaXN0cmF0aW9uX2luc2VydCAoc3RydWN0IHZ0YmxfbWFw X25vZGUgKm5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRyZWUgdnRhYmxlX2RlY2wsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgc3RydWN0IHZ0 YWJsZV9yZWdpc3RyYXRpb24ga2V5OworICBzdHJ1Y3QgdnRhYmxlX3JlZ2lz dHJhdGlvbiAqKnNsb3Q7CisKKyAgaWYgKCFub2RlIHx8ICEobm9kZS0+cmVn aXN0ZXJlZCkpCisgICAgcmV0dXJuOworCisgIGtleS52dGFibGVfZGVjbCA9 IHZ0YWJsZV9kZWNsOworICBzbG90ID0gKHN0cnVjdCB2dGFibGVfcmVnaXN0 cmF0aW9uICoqKSBodGFiX2ZpbmRfc2xvdCAobm9kZS0+cmVnaXN0ZXJlZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZrZXksIElOU0VSVCk7CisKKyAgaWYgKCEoKnNsb3Qp KQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGk7CisgICAgICBzdHJ1Y3QgdnRh YmxlX3JlZ2lzdHJhdGlvbiAqbm9kZTsKKyAgICAgIG5vZGUgPSAoc3RydWN0 IHZ0YWJsZV9yZWdpc3RyYXRpb24gKikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHhtYWxsb2MgKHNpemVvZiAoc3RydWN0IHZ0YWJsZV9y ZWdpc3RyYXRpb24pKTsKKyAgICAgIG5vZGUtPnZ0YWJsZV9kZWNsID0gdnRh YmxlX2RlY2w7CisgICAgICBub2RlLT5vZmZzZXRzID0gKHVuc2lnbmVkICop IHhtYWxsb2MgKDEwICogc2l6ZW9mICh1bnNpZ25lZCkpOworICAgICAgZm9y IChpPSAwOyBpIDwgMTA7ICsraSkKKyAgICAgICAgbm9kZS0+b2Zmc2V0c1tp XSA9IDA7CisgICAgICBub2RlLT5vZmZzZXRzWzBdID0gb2Zmc2V0OworICAg ICAgbm9kZS0+Y3VyX29mZnNldCA9IDE7CisgICAgICBub2RlLT5tYXhfb2Zm c2V0cyA9IDEwOworICAgICAgKnNsb3QgPSBub2RlOworICAgIH0KKyAgZWxz ZQorICAgIHsKKyAgICAgIC8qIFdlIGZvdW5kIHRoZSB2dGFibGVfZGVjbCBz bG90OyB3ZSBuZWVkIHRvIHNlZSBpZiBpdCBhbHJlYWR5CisgICAgICAgICBj b250YWlucyB0aGUgb2Zmc2V0LiAgSWYgbm90LCB3ZSBuZWVkIHRvIGFkZCB0 aGUgb2Zmc2V0LiAgKi8KKyAgICAgIHVuc2lnbmVkIGk7CisgICAgICBib29s IGZvdW5kID0gZmFsc2U7CisgICAgICBmb3IgKGkgPSAwOyAoaSA8ICgqc2xv dCktPmN1cl9vZmZzZXQpICYmICFmb3VuZDsgKytpKQorICAgICAgICBpZiAo KCpzbG90KS0+b2Zmc2V0c1tpXSA9PSBvZmZzZXQpCisgICAgICAgICAgZm91 bmQgPSB0cnVlOworCisgICAgICBpZiAoIWZvdW5kKQorICAgICAgICB7Cisg ICAgICAgICAgaWYgKCgqc2xvdCktPmN1cl9vZmZzZXQgPT0gKCpzbG90KS0+ bWF4X29mZnNldHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHVu c2lnbmVkIG5ld19tYXggPSAyICogKCpzbG90KS0+bWF4X29mZnNldHM7Cisg ICAgICAgICAgICAgICgqc2xvdCktPm9mZnNldHMgPSAodW5zaWduZWQgKikK KyAgICAgICAgICAgICAgICAgIHhyZWFsbG9jICgoKnNsb3QpLT5vZmZzZXRz LCBuZXdfbWF4ICogc2l6ZW9mICh1bnNpZ25lZCkpOworCisgICAgICAgICAg ICAgIGZvciAoaSA9ICgqc2xvdCktPm1heF9vZmZzZXRzOyBpIDwgbmV3X21h eDsgKytpKQorICAgICAgICAgICAgICAgICgqc2xvdCktPm9mZnNldHNbaV0g PSAwOworICAgICAgICAgICAgICAoKnNsb3QpLT5tYXhfb2Zmc2V0cyA9IG5l d19tYXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgKCpzbG90KS0+b2Zm c2V0c1soKnNsb3QpLT5jdXJfb2Zmc2V0XSA9IG9mZnNldDsKKyAgICAgICAg ICAoKnNsb3QpLT5jdXJfb2Zmc2V0ID0gKCpzbG90KS0+Y3VyX29mZnNldCAr IDE7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qIEhhc2h0YWJsZSBmdW5j dGlvbnMgZm9yIHZ0YWJsZV9yZWdpc3RyYXRpb24gaGFzaHRhYmxlcy4gICov CisKK3N0YXRpYyBoYXNodmFsX3QKK2hhc2hfdnRhYmxlX3JlZ2lzdHJhdGlv biAoY29uc3Qgdm9pZCAqIHApCit7CisgIGNvbnN0IHN0cnVjdCB2dGFibGVf cmVnaXN0cmF0aW9uICpuID0gKGNvbnN0IHN0cnVjdCB2dGFibGVfcmVnaXN0 cmF0aW9uICopIHA7CisgIHJldHVybiAoaGFzaHZhbF90KSAoREVDTF9VSUQg KG4tPnZ0YWJsZV9kZWNsKSk7Cit9CisKK3N0YXRpYyBpbnQKK2VxX3Z0YWJs ZV9yZWdpc3RyYXRpb24gKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpw MikKK3sKKyAgY29uc3Qgc3RydWN0IHZ0YWJsZV9yZWdpc3RyYXRpb24gKm4x ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z dCBzdHJ1Y3QgdnRhYmxlX3JlZ2lzdHJhdGlvbiAqKSBwMTsKKyAgY29uc3Qg c3RydWN0IHZ0YWJsZV9yZWdpc3RyYXRpb24gKm4yID0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzdHJ1Y3QgdnRhYmxl X3JlZ2lzdHJhdGlvbiAqKSBwMjsKKyAgcmV0dXJuIChERUNMX1VJRCAobjEt PnZ0YWJsZV9kZWNsKSA9PSBERUNMX1VJRCAobjItPnZ0YWJsZV9kZWNsKSk7 Cit9CisKKy8qIEVuZCBvZiBoYXNodGFibGUgZnVuY3Rpb25zIGZvciAicmVn aXN0ZXJlZCIgaGFzaHRhYmxlcyovCisKKy8qIEhhc2h0YWJsZSBmdW5jdGlv bnMgZm9yIHZ0YWJsZV9tYXAgdmFyaWFibGVzIGhhc2h0YWJsZS4gICovCisK K3N0YXRpYyBodGFiX3QgdnRibF9tYXBfaGFzaCA9IE5VTEw7CitzdHJ1Y3Qg dnRibF9tYXBfbm9kZSAqdnRibF9tYXBfbm9kZXMgPSBOVUxMOworc3RydWN0 IHZ0YmxfbWFwX25vZGUgKip2dGJsX21hcF9ub2Rlc19hcnJheSA9IE5VTEw7 CisKK3N0YXRpYyB2b2lkCit2dGFibGVfbWFwX2FycmF5X2luc2VydCAoc3Ry dWN0IHZ0YmxfbWFwX25vZGUgKm5vZGUpCit7CisgIHN0YXRpYyB1bnNpZ25l ZCBhcnJheV9zaXplID0gMDsKKyAgdW5zaWduZWQgaTsKKworICBpZiAodnRi bF9tYXBfbm9kZXNfYXJyYXkgPT0gTlVMTAorICAgICAgfHwgYXJyYXlfc2l6 ZSA9PSAwKQorICAgIHsKKyAgICAgIGFycmF5X3NpemUgPSAxNjsKKyAgICAg IHZ0YmxfbWFwX25vZGVzX2FycmF5ID0gKHN0cnVjdCB2dGJsX21hcF9ub2Rl ICoqKQorICAgICAgICAgICAgICAgICAgICAgICB4bWFsbG9jIChhcnJheV9z aXplICogc2l6ZW9mIChzdHJ1Y3QgdnRibF9tYXBfbm9kZSAqKSk7CisgICAg ICBtZW1zZXQgKHZ0YmxfbWFwX25vZGVzX2FycmF5LCAwLAorICAgICAgICAg ICAgICBhcnJheV9zaXplICogc2l6ZW9mIChzdHJ1Y3QgdnRibF9tYXBfbm9k ZSAqKSk7CisgICAgfQorICBlbHNlIGlmIChub2RlLT51aWQgPj0gYXJyYXlf c2l6ZSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBuZXdfc2l6ZSA9IDIgKiBh cnJheV9zaXplOworICAgICAgdnRibF9tYXBfbm9kZXNfYXJyYXkgPSAoc3Ry dWN0IHZ0YmxfbWFwX25vZGUgKiopCisgICAgICAgICAgeHJlYWxsb2MgKHZ0 YmxfbWFwX25vZGVzX2FycmF5LAorICAgICAgICAgICAgICAgICAgICBuZXdf c2l6ZSAqIHNpemVvZiAoc3RydWN0IHZ0YmxfbWFwX25vZGUgKikpOworCisg ICAgICBmb3IgKGkgPSBhcnJheV9zaXplOyBpIDwgbmV3X3NpemU7ICsraSkK KyAgICAgICAgdnRibF9tYXBfbm9kZXNfYXJyYXlbaV0gPSBOVUxMOworCisg ICAgICBhcnJheV9zaXplID0gbmV3X3NpemU7CisgICAgfQorCisgIGdjY19h c3NlcnQgKG5vZGUtPnVpZCA8IGFycmF5X3NpemUpOworICBnY2NfYXNzZXJ0 ICh2dGJsX21hcF9ub2Rlc19hcnJheVtub2RlLT51aWRdID09IE5VTEwpOwor CisgIHZ0YmxfbWFwX25vZGVzX2FycmF5W25vZGUtPnVpZF0gPSBub2RlOwor fQorCisvKiBSZXR1cm5zIGEgaGFzaCBjb2RlIGZvciBQLiAgKi8KK3N0YXRp YyBoYXNodmFsX3QKK2hhc2hfdnRibF9tYXBfbm9kZSAoY29uc3Qgdm9pZCAq cCkKK3sKKyAgY29uc3Qgc3RydWN0IHZ0YmxfbWFwX25vZGUgKm4gPSAoY29u c3Qgc3RydWN0IHZ0YmxfbWFwX25vZGUgKikgcDsKKyAgcmV0dXJuIChoYXNo dmFsX3QpIElERU5USUZJRVJfSEFTSF9WQUxVRSAobi0+Y2xhc3NfbmFtZSk7 Cit9CisKKy8qIFJldHVybnMgbm9uemVybyBpZiBQMSBhbmQgUDIgYXJlIGVx dWFsLiAgKi8KK3N0YXRpYyBpbnQKK2VxX3Z0YmxfbWFwX25vZGUgKGNvbnN0 IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKK3sKKyAgY29uc3Qgc3RydWN0 IHZ0YmxfbWFwX25vZGUgKm4xID0gKGNvbnN0IHN0cnVjdCB2dGJsX21hcF9u b2RlICopIHAxOworICBjb25zdCBzdHJ1Y3QgdnRibF9tYXBfbm9kZSAqbjIg PSAoY29uc3Qgc3RydWN0IHZ0YmxfbWFwX25vZGUgKikgcDI7CisgIHJldHVy biAoSURFTlRJRklFUl9IQVNIX1ZBTFVFIChuMS0+Y2xhc3NfbmFtZSkgPT0K KyAgICAgICAgICBJREVOVElGSUVSX0hBU0hfVkFMVUUgKG4yLT5jbGFzc19u YW1lKSk7Cit9CisKKy8qIFJldHVybiB2dGJsX21hcCBub2RlIGFzc2lnbmVk IHRvIERFQ0wgd2l0aG91dCBjcmVhdGluZyBhIG5ldyBvbmUuICAqLworc3Ry dWN0IHZ0YmxfbWFwX25vZGUgKgordnRibF9tYXBfZ2V0X25vZGUgKGNvbnN0 X3RyZWUgY2xhc3NfbmFtZSkKK3sKKyAgc3RydWN0IHZ0YmxfbWFwX25vZGUg a2V5OworICBzdHJ1Y3QgdnRibF9tYXBfbm9kZSAqKnNsb3Q7CisKKyAgaWYg KCF2dGJsX21hcF9oYXNoKQorICAgIHJldHVybiBOVUxMOworCisgIGtleS5j bGFzc19uYW1lID0gQ09OU1RfQ0FTVDIgKHRyZWUsIGNvbnN0X3RyZWUsIGNs YXNzX25hbWUpOworICBzbG90ID0gKHN0cnVjdCB2dGJsX21hcF9ub2RlICoq KSBodGFiX2ZpbmRfc2xvdCAodnRibF9tYXBfaGFzaCwgJmtleSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5PX0lOU0VSVCk7CisgIGlmICghc2xvdCkKKyAgICByZXR1cm4gTlVMTDsK KyAgcmV0dXJuICpzbG90OworfQorCisvKiBSZXR1cm4gdnRibF9tYXAgbm9k ZSBhc3NpZ25lZCB0byBCQVNFX0NMQVNTX1RZUEUuICBDcmVhdGUgbmV3IG9u ZQorICAgd2hlbiBuZWVkZWQuICAqLworc3RydWN0IHZ0YmxfbWFwX25vZGUg KgorZmluZF9vcl9jcmVhdGVfdnRibF9tYXBfbm9kZSAodHJlZSBiYXNlX2Ns YXNzX3R5cGUpCit7CisgIHN0cnVjdCB2dGJsX21hcF9ub2RlIGtleTsKKyAg c3RydWN0IHZ0YmxfbWFwX25vZGUgKm5vZGU7CisgIHN0cnVjdCB2dGJsX21h cF9ub2RlICoqc2xvdDsKKyAgdW5zaWduZWQgaTsKKworICBpZiAoIXZ0Ymxf bWFwX2hhc2gpCisgICAgdnRibF9tYXBfaGFzaCA9IGh0YWJfY3JlYXRlICgx MCwgaGFzaF92dGJsX21hcF9ub2RlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZXFfdnRibF9tYXBfbm9kZSwgTlVMTCk7CisKKyAgaWYg KFRSRUVfQ0hBSU4gKGJhc2VfY2xhc3NfdHlwZSkpCisgICAga2V5LmNsYXNz X25hbWUgPSBERUNMX0FTU0VNQkxFUl9OQU1FIChUUkVFX0NIQUlOIChiYXNl X2NsYXNzX3R5cGUpKTsKKyAgZWxzZQorICAgIGtleS5jbGFzc19uYW1lID0g REVDTF9BU1NFTUJMRVJfTkFNRSAoVFlQRV9OQU1FIChiYXNlX2NsYXNzX3R5 cGUpKTsKKyAgc2xvdCA9IChzdHJ1Y3QgdnRibF9tYXBfbm9kZSAqKikgaHRh Yl9maW5kX3Nsb3QgKHZ0YmxfbWFwX2hhc2gsICZrZXksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlNF UlQpOworICBpZiAoKnNsb3QpCisgICAgcmV0dXJuICpzbG90OworCisgIG5v ZGUgPSAoc3RydWN0IHZ0YmxfbWFwX25vZGUgKikgeG1hbGxvYyAoc2l6ZW9m IChzdHJ1Y3QgdnRibF9tYXBfbm9kZSkpOworICBub2RlLT52dGJsX21hcF9k ZWNsID0gTlVMTF9UUkVFOworICBub2RlLT5jbGFzc19uYW1lID0ga2V5LmNs YXNzX25hbWU7CisgIG5vZGUtPnVpZCA9IG51bV92dGFibGVfbWFwX25vZGVz Kys7CisKKyAgbm9kZS0+Y2xhc3NfaW5mbyA9IChzdHJ1Y3QgdnR2X2dyYXBo X25vZGUgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgdnR2X2dyYXBoX25vZGUpKTsK KyAgbm9kZS0+Y2xhc3NfaW5mby0+Y2xhc3NfdHlwZSA9IGJhc2VfY2xhc3Nf dHlwZTsKKyAgbm9kZS0+Y2xhc3NfaW5mby0+Y2xhc3NfdWlkID0gbm9kZS0+ dWlkOworICBub2RlLT5jbGFzc19pbmZvLT5tYXhfcGFyZW50cyA9IDQ7Cisg IG5vZGUtPmNsYXNzX2luZm8tPm1heF9jaGlsZHJlbiA9IDQ7CisgIG5vZGUt PmNsYXNzX2luZm8tPm51bV9wYXJlbnRzID0gMDsKKyAgbm9kZS0+Y2xhc3Nf aW5mby0+bnVtX2NoaWxkcmVuID0gMDsKKyAgbm9kZS0+Y2xhc3NfaW5mby0+ bnVtX3Byb2Nlc3NlZF9jaGlsZHJlbiA9IDA7CisgIG5vZGUtPmNsYXNzX2lu Zm8tPnBhcmVudHMgPSAoc3RydWN0IHZ0dl9ncmFwaF9ub2RlICoqKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWFsbG9jICg0ICogc2l6 ZW9mIChzdHJ1Y3QgdnR2X2dyYXBoX25vZGUgKikpOworICBub2RlLT5jbGFz c19pbmZvLT5jaGlsZHJlbiA9IChzdHJ1Y3QgdnR2X2dyYXBoX25vZGUgKiop CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtYWxsb2MgKDQg KiBzaXplb2YgKHN0cnVjdCB2dHZfZ3JhcGhfbm9kZSAqKSk7CisgIGZvciAo aSA9IDA7IGkgPCA0OyArK2kpCisgICAgeworICAgICAgbm9kZS0+Y2xhc3Nf aW5mby0+cGFyZW50c1tpXSA9IE5VTEw7CisgICAgICBub2RlLT5jbGFzc19p bmZvLT5jaGlsZHJlbltpXSA9IE5VTEw7CisgICAgfQorCisgIG5vZGUtPnJl Z2lzdGVyZWQgPSBodGFiX2NyZWF0ZSAoMTYsIGhhc2hfdnRhYmxlX3JlZ2lz dHJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl cV92dGFibGVfcmVnaXN0cmF0aW9uLCBOVUxMKTsKKyAgbm9kZS0+aXNfdXNl ZCA9IGZhbHNlOworICBub2RlLT5uZXh0ID0gdnRibF9tYXBfbm9kZXM7Cisg IGlmICh2dGJsX21hcF9ub2RlcykKKyAgICB2dGJsX21hcF9ub2Rlcy0+cHJl diA9IG5vZGU7CisKKyAgdnRhYmxlX21hcF9hcnJheV9pbnNlcnQgKG5vZGUp OworCisgIHZ0YmxfbWFwX25vZGVzID0gbm9kZTsKKyAgKnNsb3QgPSBub2Rl OworICByZXR1cm4gbm9kZTsKK30KKworLyogRW5kIG9mIGhhc2h0YWJsZSBm dW5jdGlvbnMgZm9yIHZ0YWJsZV9tYXAgdmFyaWFibGVzIGhhc2ggdGFibGUu ICAgKi8KKworc3RhdGljIHRyZWUKK215X2J1aWxkMSAoZW51bSB0cmVlX2Nv ZGUgY29kZSwgdHJlZSB0eXBlLCB0cmVlIG5vZGUgTUVNX1NUQVRfREVDTCkK K3sKKyAgaW50IGxlbmd0aCA9IHNpemVvZiAoc3RydWN0IHRyZWVfZXhwKTsK KyNpZmRlZiBHQVRIRVJfU1RBVElTVElDUworICB0cmVlX25vZGVfa2luZCBr aW5kOworI2VuZGlmCisgIHRyZWUgdDsKKworI2lmZGVmIEdBVEhFUl9TVEFU SVNUSUNTCisgIHN3aXRjaCAoVFJFRV9DT0RFX0NMQVNTIChjb2RlKSkKKyAg ICB7CisgICAgY2FzZSB0Y2Nfc3RhdGVtZW50OiAgLyogYW4gZXhwcmVzc2lv biB3aXRoIHNpZGUgZWZmZWN0cyAqLworICAgICAga2luZCA9IHNfa2luZDsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgdGNjX3JlZmVyZW5jZTogIC8qIGEg cmVmZXJlbmNlICovCisgICAgICBraW5kID0gcl9raW5kOworICAgICAgYnJl YWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGtpbmQgPSBlX2tpbmQ7CisgICAg ICBicmVhazsKKyAgICB9CisKKyAgdHJlZV9ub2RlX2NvdW50c1soaW50KSBr aW5kXSsrOworICB0cmVlX25vZGVfc2l6ZXNbKGludCkga2luZF0gKz0gbGVu Z3RoOworI2VuZGlmCisKKyAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFX0xFTkdU SCAoY29kZSkgPT0gMSk7CisKKyAgdCA9IGdnY19hbGxvY196b25lX3RyZWVf bm9kZV9zdGF0ICgmdHJlZV96b25lLCBsZW5ndGggUEFTU19NRU1fU1RBVCk7 CisKKyAgbWVtc2V0ICh0LCAwLCBzaXplb2YgKHN0cnVjdCB0cmVlX2NvbW1v bikpOworCisgIFRSRUVfU0VUX0NPREUgKHQsIGNvZGUpOworCisgIFRSRUVf VFlQRSAodCkgPSB0eXBlOworICBTRVRfRVhQUl9MT0NBVElPTiAodCwgVU5L Tk9XTl9MT0NBVElPTik7CisgIFRSRUVfT1BFUkFORCAodCwgMCkgPSBub2Rl OworICBpZiAobm9kZSAmJiAhVFlQRV9QIChub2RlKSkKKyAgICB7CisgICAg ICBUUkVFX1NJREVfRUZGRUNUUyAodCkgPSBUUkVFX1NJREVfRUZGRUNUUyAo bm9kZSk7CisgICAgICBUUkVFX1JFQURPTkxZICh0KSA9IFRSRUVfUkVBRE9O TFkgKG5vZGUpOworICAgIH0KKworICBpZiAoVFJFRV9DT0RFX0NMQVNTIChj b2RlKSA9PSB0Y2Nfc3RhdGVtZW50KQorICAgIFRSRUVfU0lERV9FRkZFQ1RT ICh0KSA9IDE7CisgIGVsc2Ugc3dpdGNoIChjb2RlKQorICAgIHsKKyAgICBj YXNlIFZBX0FSR19FWFBSOgorICAgICAgLyogQWxsIG9mIHRoZXNlIGhhdmUg c2lkZS1lZmZlY3RzLCBubyBtYXR0ZXIgd2hhdCB0aGVpcgorICAgICAgICAg b3BlcmFuZHMgYXJlLiAgKi8KKyAgICAgIFRSRUVfU0lERV9FRkZFQ1RTICh0 KSA9IDE7CisgICAgICBUUkVFX1JFQURPTkxZICh0KSA9IDA7CisgICAgICBi cmVhazsKKworICAgIGNhc2UgSU5ESVJFQ1RfUkVGOgorICAgICAgLyogV2hl dGhlciBhIGRlcmVmZXJlbmNlIGlzIHJlYWRvbmx5IGhhcyBub3RoaW5nIHRv IGRvIHdpdGggd2hldGhlcgorICAgICAgICAgaXRzIG9wZXJhbmQgaXMgcmVh ZG9ubHkuICAqLworICAgICAgVFJFRV9SRUFET05MWSAodCkgPSAwOworICAg ICAgYnJlYWs7CisKKyAgICBjYXNlIEFERFJfRVhQUjoKKyAgICAgIGlmIChu b2RlKQorICAgICAgICByZWNvbXB1dGVfdHJlZV9pbnZhcmlhbnRfZm9yX2Fk ZHJfZXhwciAodCk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6Cisg ICAgICBpZiAoKFRSRUVfQ09ERV9DTEFTUyAoY29kZSkgPT0gdGNjX3VuYXJ5 IHx8IGNvZGUgPT0gVklFV19DT05WRVJUX0VYUFIpCisgICAgICAgICAgJiYg bm9kZSAmJiAhVFlQRV9QIChub2RlKQorICAgICAgICAgICYmIFRSRUVfQ09O U1RBTlQgKG5vZGUpKQorICAgICAgICBUUkVFX0NPTlNUQU5UICh0KSA9IDE7 CisgICAgICBpZiAoVFJFRV9DT0RFX0NMQVNTIChjb2RlKSA9PSB0Y2NfcmVm ZXJlbmNlCisgICAgICAgICAgJiYgbm9kZSAmJiBUUkVFX1RISVNfVk9MQVRJ TEUgKG5vZGUpKQorICAgICAgICBUUkVFX1RISVNfVk9MQVRJTEUgKHQpID0g MTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICByZXR1cm4gdDsKK30KKwor c3RhdGljIGludAordHlwZV9uYW1lX2lzX3Z0YWJsZV9wb2ludGVyICh0cmVl IG5vZGUpCit7CisKKyAgaWYgKFRZUEVfTkFNRSAobm9kZSkpCisgIHsKKyAg ICBpZiAoVFJFRV9DT0RFIChUWVBFX05BTUUgKG5vZGUpKSA9PSBJREVOVElG SUVSX05PREUpCisgICAgICByZXR1cm4gKHN0cmNtcCAoSURFTlRJRklFUl9Q T0lOVEVSIChUWVBFX05BTUUgKG5vZGUpKSwKKyAgICAgICAgICAgICAgICAg ICAgICAiX192dGJsX3B0cl90eXBlIikgPT0gMCk7CisgICAgZWxzZSBpZiAo VFJFRV9DT0RFIChUWVBFX05BTUUgKG5vZGUpKSA9PSBUWVBFX0RFQ0wKKyAg ICAgICAgICAgICAmJiBERUNMX05BTUUgKFRZUEVfTkFNRSAobm9kZSkpKQor ICAgICAgcmV0dXJuIChzdHJjbXAgKElERU5USUZJRVJfUE9JTlRFUiAoREVD TF9OQU1FIChUWVBFX05BTUUgKG5vZGUpKSksCisgICAgICAgICAgICAgICAg ICAgICAgIl9fdnRibF9wdHJfdHlwZSIpID09IDApOworICAgIGVsc2UKKyAg ICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQKK2lzX3Z0YWJsZV9hc3NpZ25tZW50X3N0bXQgKGdpbXBsZSBzdG10 KQoreworCisgIGlmIChnaW1wbGVfY29kZSAoc3RtdCkgIT0gR0lNUExFX0FT U0lHTikKKyAgICByZXR1cm4gMDsKKyAgZWxzZQorICAgIHsKKyAgICAgIHRy ZWUgbGhzID0gZ2ltcGxlX2Fzc2lnbl9saHMgKHN0bXQpOworICAgICAgdHJl ZSByaHMgPSBnaW1wbGVfYXNzaWduX3JoczEgKHN0bXQpOworCisgICAgICBp ZiAoVFJFRV9DT0RFIChsaHMpICE9IFNTQV9OQU1FKQorICAgICAgICByZXR1 cm4gMDsKKworICAgICAgaWYgKFRSRUVfQ09ERSAoVFJFRV9UWVBFIChsaHMp KSAhPSBQT0lOVEVSX1RZUEUpCisgICAgICAgIHJldHVybiAwOworCisgICAg ICBpZiAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKFRSRUVfVFlQRSAobGhzKSkp ICE9IFBPSU5URVJfVFlQRSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAg IGlmICghIHR5cGVfbmFtZV9pc192dGFibGVfcG9pbnRlciAoVFJFRV9UWVBF IChUUkVFX1RZUEUgKGxocykpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKwor ICAgICAgaWYgKFRSRUVfQ09ERSAocmhzKSAhPSBDT01QT05FTlRfUkVGKQor ICAgICAgICByZXR1cm4gMDsKKworICAgICAgaWYgKCEgKFRSRUVfT1BFUkFO RCAocmhzLCAxKSkKKyAgICAgICAgICB8fCAoVFJFRV9DT0RFIChUUkVFX09Q RVJBTkQgKHJocywgMSkpICE9IEZJRUxEX0RFQ0wpKQorICAgICAgICByZXR1 cm4gMDsKKworICAgICAgaWYgKCEgKERFQ0xfTkFNRSAoVFJFRV9PUEVSQU5E IChyaHMsIDEpKSkKKyAgICAgICAgICB8fCAoc3RybmNtcCAoSURFTlRJRklF Ul9QT0lOVEVSIChERUNMX05BTUUgKFRSRUVfT1BFUkFORCAocmhzLCAxKSkp LAorICAgICAgICAgICAgICAgICAgICAgICAiX3ZwdHIuIiwgNikgIT0gMCkp CisgICAgICAgIHJldHVybiAwOworCisgICAgICB3aGlsZSAoKFRSRUVfT1BF UkFORCAocmhzLCAwKSkKKyAgICAgICAgICAgICAmJiAoVFJFRV9DT0RFIChU UkVFX09QRVJBTkQgKHJocywgMCkpID09IENPTVBPTkVOVF9SRUYpKQorICAg ICAgICByaHMgPSBUUkVFX09QRVJBTkQgKHJocywgMCk7CisKKyAgICAgIGlm ICghIChUUkVFX09QRVJBTkQgKHJocywgMCkpCisgICAgICAgICAgfHwgKFRS RUVfQ09ERSAoVFJFRV9PUEVSQU5EIChyaHMsIDApKSAhPSBNRU1fUkVGKSkK KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9 CisKK3N0YXRpYyB0cmVlCitteV9nZXRfdnRibF9kZWNsX2Zvcl9iaW5mbyAo dHJlZSBiaW5mbykKK3sKKyAgdHJlZSBkZWNsOworCisgIGRlY2wgPSBCSU5G T19WVEFCTEUgKGJpbmZvKTsKKyAgaWYgKGRlY2wgJiYgVFJFRV9DT0RFIChk ZWNsKSA9PSBQT0lOVEVSX1BMVVNfRVhQUikKKyAgeworICAgIGdjY19hc3Nl cnQgKFRSRUVfQ09ERSAoVFJFRV9PUEVSQU5EIChkZWNsLCAwKSkgPT0gQURE Ul9FWFBSKTsKKyAgICBkZWNsID0gVFJFRV9PUEVSQU5EIChUUkVFX09QRVJB TkQgKGRlY2wsIDApLCAwKTsKKyAgfQorICBpZiAoZGVjbCkKKyAgICBnY2Nf YXNzZXJ0IChUUkVFX0NPREUgKGRlY2wpID09IFZBUl9ERUNMKTsKKworICBy ZXR1cm4gZGVjbDsKK30KKworLyogU1RNVCBpcyBhIGdpbXBsZSBzdGF0bWVu dCB0aGF0IHVzZXMgT0xEX1ZBUi4gIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhl CisgICB1c2Ugb2YgT0xEX1ZBUiBpbiBTVE1UIGFuZCByZXBsYWNlcyBpdCB3 aXRoIE5FV19WQVIuICBTVE1UIGlzIGVpdGhlcgorICAgYW4gYXNzaWdubWVu dCBzdGF0ZW1lbnQgb3IgYSBjYWxsIHN0YXRlbWVudC4gICovCisKK3N0YXRp YyBib29sCitmaW5kX2FuZF9yZXBsYWNlX3ZhciAoZ2ltcGxlIHN0bXQsIHRy ZWUgb2xkX3ZhciwgdHJlZSBuZXdfdmFyKQoreworICBib29sIGZvdW5kID0g ZmFsc2U7CisKKyAgaWYgKCFzdG10IHx8ICEgb2xkX3ZhciB8fCAhbmV3X3Zh cikKKyAgICByZXR1cm4gZm91bmQ7CisKKyAgaWYgKChUUkVFX0NPREUgKG9s ZF92YXIpICE9IFNTQV9OQU1FKQorICAgICAgfHwgKFRSRUVfQ09ERSAobmV3 X3ZhcikgIT0gU1NBX05BTUUpKQorICAgIHJldHVybiBmb3VuZDsKKworICBp ZiAoZ2ltcGxlX2NvZGUgKHN0bXQpID09IEdJTVBMRV9BU1NJR04pCisgICAg eworICAgICAgaWYgKGdldF9naW1wbGVfcmhzX2NsYXNzIChnaW1wbGVfZXhw cl9jb2RlIChzdG10KSkgPT0gR0lNUExFX1NJTkdMRV9SSFMpCisgICAgICAg IHsKKyAgICAgICAgICBpZiAoVFJFRV9DT0RFIChnaW1wbGVfYXNzaWduX3Jo czEgKHN0bXQpKSA9PSBTU0FfTkFNRQorICAgICAgICAgICAgICAmJiAoZ2lt cGxlX2Fzc2lnbl9yaHMxIChzdG10KSA9PSBvbGRfdmFyKSkKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgZ2ltcGxlX2Fzc2lnbl9zZXRfcmhzMSAo c3RtdCwgbmV3X3Zhcik7CisgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChUUkVFX0NPREUg KGdpbXBsZV9hc3NpZ25fcmhzMSAoc3RtdCkpID09IE1FTV9SRUYKKyAgICAg ICAgICAgICAgICAgICAmJiBUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAoZ2lt cGxlX2Fzc2lnbl9yaHMxIChzdG10KSwgMCkpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPT0gU1NBX05BTUUpCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgIGlmIChUUkVFX09QRVJBTkQgKGdpbXBsZV9hc3NpZ25fcmhzMSAoc3Rt dCksIDApID09IG9sZF92YXIpCisgICAgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgICAgdHJlZSBtcl90eXBlID0gVFJFRV9UWVBFIChnaW1wbGVf YXNzaWduX3JoczEgKHN0bXQpKTsKKyAgICAgICAgICAgICAgICAgIHRyZWUg bWVtX3JlZiA9IGJ1aWxkMiAoTUVNX1JFRiwgbXJfdHlwZSwgbmV3X3ZhciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJF RV9PUEVSQU5ECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChnaW1wbGVfYXNzaWduX3JoczEgKHN0bXQpLCAxKSk7 CisgICAgICAgICAgICAgICAgICBnaW1wbGVfYXNzaWduX3NldF9yaHMxIChz dG10LCBtZW1fcmVmKTsKKyAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1 ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICAgIGVsc2UgaWYgKGdldF9naW1wbGVfcmhzX2NsYXNzIChnaW1w bGVfZXhwcl9jb2RlIChzdG10KSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBHSU1QTEVf U0lOR0xFX1JIUykKKyAgICAgICAgeworICAgICAgICAgIGlmIChnaW1wbGVf YXNzaWduX3JoczEgKHN0bXQpID09IG9sZF92YXIpCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgIGdpbXBsZV9hc3NpZ25fc2V0X3JoczEgKHN0bXQs IG5ld192YXIpOworICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAg ICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoZ2ltcGxlX2Fzc2lnbl9y aHMyIChzdG10KSA9PSBvbGRfdmFyKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICBnaW1wbGVfYXNzaWduX3NldF9yaHMyIChzdG10LCBuZXdfdmFy KTsKKyAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorICBlbHNlIGlmICgoZ2ltcGxlX2NvZGUg KHN0bXQpID09IEdJTVBMRV9DQUxMKQorICAgICAgICAgICAmJiAoVFJFRV9D T0RFIChnaW1wbGVfY2FsbF9mbiAoc3RtdCkpID09IE9CSl9UWVBFX1JFRikK KyAgICAgICAgICAgJiYgKFRSRUVfT1BFUkFORCAoZ2ltcGxlX2NhbGxfZm4g KHN0bXQpLCAwKSA9PSBvbGRfdmFyKSkKKyAgICB7CisgICAgICAgIFRSRUVf T1BFUkFORCAoZ2ltcGxlX2NhbGxfZm4gKHN0bXQpLCAwKSA9IG5ld192YXI7 CisgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICB9CisKKyAgaWYgKGZvdW5k KQorICAgIHVwZGF0ZV9zdG10IChzdG10KTsKKworICByZXR1cm4gZm91bmQ7 Cit9CisKKy8qIEdpdmVuIGEgUEhJX1NUTVQsIHRoaXMgZnVuY3Rpb24gc2Vh cmNoZXMgYmFja3dhcmRzIGZpbmQgYSBkZWZfc3RtdCBmb3IKKyAgIG9uZSBv ZiB0aGUgUEhJX1NUTVQncyBhcmdzLCB3aGljaCBkZWZpbmVzIGFuIFNTQV9O QU1FLiAgSXQgcmV0dXJucyB0aGUKKyAgIGRlZl9zdG10LiAgKi8KKworc3Rh dGljIGdpbXBsZQorZ2V0X3BoaV9kZWZfc3RtdCAoZ2ltcGxlIHBoaV9zdG10 KQoreworICAvKiBUaGlzIGZ1bmN0aW9uIGlzIGJhc2VkIG9uIHRoZSBhc3N1 bXB0aW9uIHRoYXQgYWxsIGFyZ3VtZW50cyBvZiBhCisgICAgIHBoaSB2YXJp YWJsZSBhcmUgcmVhbGx5IHZhcmlhdGlvbnMgb2YgdGhlIHNhbWUgdmFyaWFi bGUsIGFuZAorICAgICB0aGVyZWZvcmUgbXVzdCBoYXZlIHRoZSBzYW1lIHR5 cGUsIHNvIGl0IGRvZXNuJ3QgbWF0dGVyIHdoaWNoIHBoaQorICAgICBhcmd1 bWVudCB3ZSB1c2UgdG8gZmluZCB0aGUgdmFyaWFibGUncyB0eXBlLiAgVGhl cmVmb3JlIHdlIHdpbGwKKyAgICAgdXNlIHRoZSBmaXJzdCBhcmd1bWVudCB0 aGF0IGlzIGFuIFNTQV9OQU1FLiAgKi8KKworICBwaGlfYXJnX2QgKnBoaV9h cmcgPSBOVUxMOworICB0cmVlIHBoaV9zc2E7CisgIHVuc2lnbmVkIGk7CisK KyAgaWYgKGdpbXBsZV9jb2RlIChwaGlfc3RtdCkgIT0gR0lNUExFX1BISSkK KyAgICByZXR1cm4gTlVMTDsKKworICBmb3IgKGkgPSAwOyBpIDwgZ2ltcGxl X3BoaV9udW1fYXJncyAocGhpX3N0bXQpOyBpKyspCisgICAgeworICAgICAg cGhpX2FyZyA9IGdpbXBsZV9waGlfYXJnIChwaGlfc3RtdCwgaSk7CisgICAg ICBwaGlfc3NhID0gcGhpX2FyZy0+ZGVmOworICAgICAgaWYgKFRSRUVfQ09E RSAocGhpX3NzYSkgPT0gU1NBX05BTUUpCisJYnJlYWs7CisgICAgfQorCisg IGdjY19hc3NlcnQgKFRSRUVfQ09ERSAocGhpX3NzYSkgPT0gU1NBX05BTUUp OworCisgIHJldHVybiBTU0FfTkFNRV9ERUZfU1RNVCAocGhpX3NzYSk7Cit9 CisKKy8qIFNlYXJjaCB0aHJvdWdoIGFsbCB0aGUgc3RhdGVtZW50cyBpbiBh IGJhc2ljIGJsb2NrLCBzZWFyY2hpbmcgZm9yCisgICB2aXJ0dWFsIG1ldGhv ZCBjYWxscy4gIEZvciBlYWNoIHZpcnR1YWwgbWV0aG9kIGRpc3BhdGNoLCBm aW5kIHRoZQorICAgdnB0ciB2YWx1ZSB1c2VkLCBhbmQgdGhlIHN0YXRpY2Fs bHkgZGVjbGFyZWQgdHlwZSBvZiB0aGUgb2JqZWN0OworICAgcmV0cmlldmUg dGhlIHZ0YWJsZSBtYXAgdmFyaWFibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBv YmplY3Q7CisgICBnZW5lcmF0ZSBhIGNhbGwgdG8gX19WTFRWZXJpZnlWdGFi bGVQb2ludGVyOyBhbmQgaW5zZXJ0IHRoZQorICAgZ2VuZXJhdGVkIGNhbGwg aW50byB0aGUgYmFzaWMgYmxvY2ssIGFmdGVyIHRoZSBwb2ludCB3aGVyZSB0 aGUgdnB0cgorICAgdmFsdWUgaXMgZ290dGVuIG91dCBvZiB0aGUgb2JqZWN0 IGFuZCBiZWZvcmUgdGhlIHZpcnR1YWwgbWV0aG9kCisgICBkaXNwYXRjaC4g TWFrZSB0aGUgdmlydHVhbCBtZXRob2QgZGlzcGF0Y2ggZGVwZW5kIG9uIHRo ZSByZXR1cm4KKyAgIHZhbHVlIGZyb20gdGhlIHZlcmlmaWNhdGlvbiBjYWxs LCBzbyB0aGF0IHN1YnNlcXVlbnQgb3B0aW1pemF0aW9ucworICAgY2Fubm90 IHJlb3JkZXIgdGhlIHR3byBjYWxscy4gICovCisKK3N0YXRpYyB2b2lkCit2 ZXJpZnlfYmJfdnRhYmxlcyAoYmFzaWNfYmxvY2sgYmIpCit7CisgIGdpbXBs ZV9zZXEgc3RtdHM7CisgIGdpbXBsZSBzdG10ID0gTlVMTDsKKyAgZ2ltcGxl X3N0bXRfaXRlcmF0b3IgZ3NpX3Z0YmxfYXNzaWduOworICBnaW1wbGVfc3Rt dF9pdGVyYXRvciBnc2lfdmlydHVhbF9jYWxsOworICB0cmVlIHRoaXNfb2Jq ZWN0OworCisgIC8qIFNlYXJjaCB0aGUgYmFzaWMgYmxvY2sgdG8gc2VlIGlm IGl0IGNvbnRhaW5zIGEgdmlydHVhbCBtZXRob2QKKyAgICAgY2FsbCwgaS5l LiBhIGNhbGwgd2l0aCB0aGUgdHJlZSBjb2RlIE9CSl9UWVBFX1JFRiAgKi8K KworICBzdG10cyA9IGJiX3NlcSAoYmIpOworICBnc2lfdmlydHVhbF9jYWxs ID0gZ3NpX3N0YXJ0IChzdG10cyk7CisgIHRoaXNfb2JqZWN0ID0gTlVMTF9U UkVFOworICBmb3IgKDsgIWdzaV9lbmRfcCAoZ3NpX3ZpcnR1YWxfY2FsbCk7 IGdzaV9uZXh0ICgmZ3NpX3ZpcnR1YWxfY2FsbCkpCisgICAgeworICAgICAg c3RtdCA9IGdzaV9zdG10IChnc2lfdmlydHVhbF9jYWxsKTsKKyAgICAgIGlm IChnaW1wbGVfY29kZSAoc3RtdCkgPT0gR0lNUExFX0NBTEwpCisgICAgICAg IHsKKyAgICAgICAgICB0cmVlIGZuY2FsbCA9IGdpbXBsZV9jYWxsX2ZuIChz dG10KTsKKyAgICAgICAgICBpZiAoVFJFRV9DT0RFIChmbmNhbGwpID09IE9C Sl9UWVBFX1JFRikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYm9v bCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgICB0cmVlIHZ0YWJsZV9v ZmZzZXRfdmFyID0gTlVMTF9UUkVFOworICAgICAgICAgICAgICBnaW1wbGUg ZGVmX3N0bXQ7CisgICAgICAgICAgICAgIGdpbXBsZSBwcmV2X3VzZSA9IE5V TEw7CisKKyAgICAgICAgICAgICAgLyogVGhlIGZpcnN0IGFyZ3VtZW50IHRv IHRoZSBmdW5jdGlvbiBtdXN0IGJlICJ0aGlzIiwgYSBwb2ludGVyCisgICAg ICAgICAgICAgICAgIHRvIHRoZSBvYmplY3QgaXRzZWxmLiAgKi8KKworICAg ICAgICAgICAgICB0aGlzX29iamVjdCA9IGdpbXBsZV9jYWxsX2FyZyAoc3Rt dCwgMCk7CisKKyAgICAgICAgICAgICAgLyogR2V0IHRoZSBTU0EgdmFyaWFi bGUgdGhhdCBjb250YWlucyB0aGUgZGVyZWZlcmVuY2VkIF92cHRyCisgICAg ICAgICAgICAgICAgIGZpZWxkICsgdGFibGUgc3RhcnQgb2Zmc2V0LiAgKi8K KworICAgICAgICAgICAgICBpZiAoVFJFRV9PUEVSQU5EIChmbmNhbGwsIDAp CisgICAgICAgICAgICAgICAgICAmJiBUUkVFX0NPREUgKFRSRUVfT1BFUkFO RCAoZm5jYWxsLCAwKSkgPT0gU1NBX05BTUUpCisgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgdHJlZSByaHMgPSBOVUxMX1RSRUU7Cisg ICAgICAgICAgICAgICAgICBnaW1wbGUgcGhpX3N0bXQgPSBOVUxMOworICAg ICAgICAgICAgICAgICAgZ2ltcGxlIHBoaV9wcmV2X3VzZSA9IE5VTEw7Cisg ICAgICAgICAgICAgICAgICBib29sICBmb3VuZF9waGkgPSBmYWxzZTsKKwor ICAgICAgICAgICAgICAgICAgdnRhYmxlX29mZnNldF92YXIgPSBUUkVFX09Q RVJBTkQgKGZuY2FsbCwgMCk7CisKKyAgICAgICAgICAgICAgICAgIHByZXZf dXNlID0gc3RtdDsKKyAgICAgICAgICAgICAgICAgIGRlZl9zdG10ID0gU1NB X05BTUVfREVGX1NUTVQgKHZ0YWJsZV9vZmZzZXRfdmFyKTsKKworCQkgIC8q IFNlYXJjaCBiYWNrd2FyZHMgdGhyb3VnaCB0aGUgZGVmX3N0bXQgY2hhaW4s IHRvIHRyeQorCQkgICAgIHRvIGZpbmQgdGhlIGFzc2lnbm1lbnQgc3RhdGVt ZW50IHdoZXJlIHRoZSByaHMgb2YKKwkJICAgICB0aGUgYXNzaWdubWVudCBj b250YWlucyB0aGUgIi5fdnB0ciIgZmllbGQgKHRoZSB2dGFibGUKKwkJICAg ICBwb2ludGVyKS4gKi8KKworICAgICAgICAgICAgICAgICAgd2hpbGUgKGdp bXBsZV9jb2RlIChkZWZfc3RtdCkgPT0gR0lNUExFX1BISSkKKyAgICAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGlmICghZm91 bmRfcGhpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgICAgICAgICBwaGlfcHJldl91c2UgPSBwcmV2X3VzZTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgcGhpX3N0bXQgPSBkZWZfc3RtdDsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfcGhpID0gdHJ1ZTsK KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgICBkZWZfc3RtdCA9IGdldF9waGlfZGVmX3N0bXQgKGRlZl9zdG10KTsK KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICBn Y2NfYXNzZXJ0IChkZWZfc3RtdCAhPSBOVUxMKTsKKyAgICAgICAgICAgICAg ICAgIGdjY19hc3NlcnQgKGdpbXBsZV9jb2RlIChkZWZfc3RtdCkgPT0gR0lN UExFX0FTU0lHTik7CisKKyAgICAgICAgICAgICAgICAgIGlmIChnaW1wbGVf YXNzaWduX2xocyAoZGVmX3N0bXQpCisgICAgICAgICAgICAgICAgICAgICAg JiYgVFJFRV9DT0RFIChnaW1wbGVfYXNzaWduX2xocyAoZGVmX3N0bXQpKSA9 PSBTU0FfTkFNRQorICAgICAgICAgICAgICAgICAgICAgICYmIGdldF9naW1w bGVfcmhzX2NsYXNzIChnaW1wbGVfZXhwcl9jb2RlIChkZWZfc3RtdCkpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgPT0gR0lNUExFX1NJTkdMRV9SSFMpCisgICAgICAgICAg ICAgICAgICAgIHJocyA9IGdpbXBsZV9hc3NpZ25fcmhzMSAoZGVmX3N0bXQp OworCisgICAgICAgICAgICAgICAgICBpZiAocmhzCisgICAgICAgICAgICAg ICAgICAgICAgJiYgVFJFRV9DT0RFIChyaHMpID09IE1FTV9SRUYKKyAgICAg ICAgICAgICAgICAgICAgICAmJiBUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAo cmhzLCAwKSkgPT0gU1NBX05BTUUpCisgICAgICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICAgICBwcmV2X3VzZSA9IGRlZl9zdG10Owor ICAgICAgICAgICAgICAgICAgICAgIGRlZl9zdG10ID0gU1NBX05BTUVfREVG X1NUTVQgKFRSRUVfT1BFUkFORCAocmhzLCAwKSk7CisgICAgICAgICAgICAg ICAgICAgIH0KKworCisgICAgICAgICAgICAgICAgICBpZiAoZ2ltcGxlX2Nv ZGUgKGRlZl9zdG10KSA9PSBHSU1QTEVfUEhJKQorICAgICAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZF9waGkp CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgIHBoaV9wcmV2X3VzZSA9IHByZXZfdXNlOworICAgICAgICAg ICAgICAgICAgICAgICAgICBwaGlfc3RtdCA9IGRlZl9zdG10OworICAgICAg ICAgICAgICAgICAgICAgICAgICBmb3VuZF9waGkgPSB0cnVlOworICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGRl Zl9zdG10ID0gZ2V0X3BoaV9kZWZfc3RtdCAoZGVmX3N0bXQpOworICAgICAg ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgIHdoaWxlIChk ZWZfc3RtdAorICAgICAgICAgICAgICAgICAgICAgICAgICYmICFpc192dGFi bGVfYXNzaWdubWVudF9zdG10IChkZWZfc3RtdCkpCisgICAgICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICB0cmVlIGxocyA9IGdp bXBsZV9hc3NpZ25fbGhzIChkZWZfc3RtdCk7CisgICAgICAgICAgICAgICAg ICAgICAgaWYgKCFsaHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg IVRSRUVfQ09ERSAobGhzKSA9PSBTU0FfTkFNRSkKKyAgICAgICAgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmX3N0 bXQgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgICBpZiAoISBkZWZfc3RtdCkKKyAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgaWYgKGdpbXBsZV9h c3NpZ25fcmhzMSAoZGVmX3N0bXQpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICYmIFRSRUVfQ09ERSAoZ2ltcGxlX2Fzc2lnbl9yaHMxIChkZWZfc3Rt dCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gU1NBX05BTUUpCisgICAg ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIHByZXZfdXNlID0gZGVmX3N0bXQ7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIHJocyA9IGdpbXBsZV9hc3NpZ25fcmhzMSAoZGVmX3N0bXQpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZfc3RtdCA9IFNTQV9OQU1F X0RFRl9TVE1UIChyaHMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChnZXRfZ2ltcGxlX3Jo c19jbGFzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChn aW1wbGVfZXhwcl9jb2RlIChkZWZfc3RtdCkpCisJCQkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIT0gR0lNUExFX1NJTkdMRV9SSFMpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2ltcGxlX2Fzc2ln bl9yaHMyIChkZWZfc3RtdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmJiBUUkVFX0NPREUgKGdpbXBsZV9hc3NpZ25fcmhzMiAoZGVmX3N0 bXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IFNTQV9OQU1FKQorICAg ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg ICAgICBwcmV2X3VzZSA9IGRlZl9zdG10OworICAgICAgICAgICAgICAgICAg ICAgICAgICByaHMgPSBnaW1wbGVfYXNzaWduX3JoczIgKGRlZl9zdG10KTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmX3N0bXQgPSBTU0FfTkFN RV9ERUZfU1RNVCAocmhzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg ICAgICAgICBkZWZfc3RtdCA9IE5VTEw7CisKKyAgICAgICAgICAgICAgICAg ICAgICBpZiAoIWRlZl9zdG10KQorICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmX3N0bXQg IT0gTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBnaW1wbGVf Y29kZSAoZGVmX3N0bXQpID09IEdJTVBMRV9QSEkpCisgICAgICAgICAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh Zm91bmRfcGhpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoaV9wcmV2X3VzZSA9IHBy ZXZfdXNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhpX3N0 bXQgPSBkZWZfc3RtdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZvdW5kX3BoaSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZfc3RtdCA9IGdl dF9waGlfZGVmX3N0bXQgKGRlZl9zdG10KTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisJCSAgLyogSWYg d2UgZm91bmQgdGhlIHZ0YWJsZSBwb2ludGVyIGFzc2lnbm1lbnQgc3RhdGVt ZW50IGJ5CisJCSAgICAgaXRzZWxmLCB3ZSBhbHNvIG5lZWQgdG8gZmluZCBp dCB3aXRoaW4gdGhlIGJhc2ljIGJsb2NrCisJCSAgICAgc3RhdGVtZW50IHNl cXVlbmNlLCBzbyB0aGF0IHdlIGNhbiBpbnNlcnQgb3VyIHN0YXRlbWVudHMK KwkJICAgICBpbnRvIHRoZSBzZXF1ZW5jZS4KKworCQkgICAgIFRoZSBmb2xs b3dpbmcgbG9vcCBsb29rcyBmb3IgdGhlIGFzc2lnbm1lbnQgc3RhdGVtZW50 CisJCSAgICAgd2l0aGluIHRoZSBiYXNpYyBibG9jaydzIHNlcXVlbmNlIG9m IHN0YXRlbWVudHMuICAqLworCisgICAgICAgICAgICAgICAgICBpZiAoZGVm X3N0bXQKKyAgICAgICAgICAgICAgICAgICAgICAmJiBpc192dGFibGVfYXNz aWdubWVudF9zdG10IChkZWZfc3RtdCkpCisgICAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgICBiYXNpY19ibG9jayBkZWZfYmI7 CisgICAgICAgICAgICAgICAgICAgICAgZ2ltcGxlX3NlcSBkZWZfYmJfc3Rt dHM7CisKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRfcGhpKQor ICAgICAgICAgICAgICAgICAgICAgICAgZGVmX2JiID0gZ2ltcGxlX2JiIChw aGlfc3RtdCk7CisgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgICAgICAgICAgICAgZGVmX2JiID0gZ2ltcGxlX2JiIChkZWZfc3Rt dCk7CisKKyAgICAgICAgICAgICAgICAgICAgICBkZWZfYmJfc3RtdHMgPSBi Yl9zZXEgKGRlZl9iYik7CisKKyAgICAgICAgICAgICAgICAgICAgICBpZiAo Zm91bmRfcGhpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBJbnNlcnRpb24gcG9pbnQgaXMgZmly c3Qgc3RtdCBpbiBiYiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBn c2lfdnRibF9hc3NpZ24gPSBnc2lfYWZ0ZXJfbGFiZWxzIChkZWZfYmIpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZ3NpX3Z0YmxfYXNzaWdu ID0gZ3NpX3N0YXJ0IChkZWZfYmJfc3RtdHMpOworCisgICAgICAgICAgICAg ICAgICAgICAgZm9yICg7ICFnc2lfZW5kX3AgKGdzaV92dGJsX2Fzc2lnbikg JiYgIWZvdW5kOworICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpX25l eHQgKCZnc2lfdnRibF9hc3NpZ24pKQorICAgICAgICAgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBzdG10ID0gZ3NpX3N0 bXQgKGdzaV92dGJsX2Fzc2lnbik7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChzdG10ID09IGRlZl9zdG10KQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv dW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgIGlm IChmb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgdHJlZSBvYmplY3RfcmhzID0gVFJFRV9UWVBF ICh0aGlzX29iamVjdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHRy ZWUgbGhzOworICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlIHZ0Ymxf dmFyX2RlY2wgPSBOVUxMX1RSRUU7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIHRyZWUgdnRibCA9IE5VTExfVFJFRTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgdHJlZSB2YXJfaWQ7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIGdpbXBsZV9zZXEgcHJlX3AgPSBOVUxMOworICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgdnRibF9tYXBfbm9kZSAqdnRhYmxlX21hcF9u b2RlID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZSB2 dGJsX2RlY2wgPSBOVUxMX1RSRUU7CisKKworICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoZm91bmRfcGhpKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxocyA9IGdpbXBsZV9waGlfcmVzdWx0IChwaGlfc3RtdCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaHMgPSBnaW1wbGVfYXNzaWduX2xocyAoc3RtdCk7 CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm93IHdlIGhhdmUg Zm91bmQgdGhlIHZpcnR1YWwgbWV0aG9kIGRpc3BhdGNoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgcHJlY2VkaW5nIGFjY2VzcyBv ZiB0aGUgX3ZwdHIuKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm aWVsZC4uLiBOb3cgd2UgbmVlZCB0byBmaW5kIHRoZSB2dGFibGUgZm9yCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBiYXNlIGNsYXNzIChz dGF0aWNhbGx5IGRlY2xhcmVkIHR5cGUpIG9mCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRoZSBvYmplY3QsIHNvIHdlIGNhbiB1c2UgdGhlIHJp Z2h0IHZ0YWJsZQorCQkJICAgICBtYXAgdmFyaWFibGUuICAqLworCisgICAg ICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgcmhzID0gZ2ltcGxlX2Fzc2lnbl9yaHMxIChk ZWZfc3RtdCk7CisKKwkJCSAgLyogRmlyc3QgdHJ5IHRvIGdldCB0aGUgdHlw ZSBvdXQgb2YgdGhlICd0aGlzJworCQkJICAgICBvYmplY3QuICovCisgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChUUkVFX0NPREUgKG9iamVjdF9y aHMpID09IFBPSU5URVJfVFlQRQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgVFJFRV9DT0RFIChUUkVFX1RZUEUgKG9iamVjdF9yaHMpKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgID09IFJFQ09SRF9UWVBFKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJocyA9IFRSRUVfVFlQRSAob2JqZWN0X3Jo cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSRUVf Q09ERSAob2JqZWN0X3JocykgPT0gUkVGRVJFTkNFX1RZUEUKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgVFJFRV9DT0RFIChUUkVF X1RZUEUgKG9iamVjdF9yaHMpKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IFJF Q09SRF9UWVBFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJocyA9 IFRSRUVfVFlQRSAob2JqZWN0X3Jocyk7CisJCQkgIC8qIFRoZSB0eXBlIG9m IHRoZSAndGhpcycgb2JqZWN0IGlzIG5vdCB1c2FibGUKKwkJCSAgICAgKHVz dWFsbHkgZHVlIHRvIG9wdGltaXphdGlvbnMpOyB0cnkgdG8gZ2V0IHRoZQor CQkJICAgICB0eXBlIG91dCBvZiB0aGUgcmhzIG9mIHRoZSB2dGFibGUgcG9p bnRlcgorCQkJICAgICBhc3NpZ25tZW50IHN0YXRlbWVudC4gICovCisgICAg ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSRUVfQ09ERSAocmhz KSA9PSBDT01QT05FTlRfUkVGKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChU UkVFX0NPREUgKFRSRUVfT1BFUkFORCAocmhzLCAwKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPT0gQ09NUE9ORU5UX1JFRikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmhzID0gVFJFRV9PUEVSQU5EIChyaHMsIDApOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRSRUVfQ09ERSAocmhz KSA9PSBDT01QT05FTlRfUkVGCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJiYgKFRSRUVfQ09ERSAoVFJFRV9PUEVSQU5EIChyaHMsIDAp KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBNRU1fUkVGKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChUUkVFX0NPREUgKFRS RUVfVFlQRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKFRSRUVfT1BFUkFORCAocmhzLCAwKSkpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA9PSBSRUNPUkRfVFlQRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJocyA9IFRSRUVfVFlQRSAoVFJFRV9PUEVSQU5EIChyaHMsIDAp KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmhzID0gTlVMTF9UUkVFOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJocyA9IE5VTExfVFJFRTsKKworCQkJICAvKiBNYWtlIHN1cmUgd2UgZm91 bmQgYSB2YWxpZCB0eXBlLi4uKi8KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHJocworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg VFJFRV9DT0RFIChyaHMpID09IFJFQ09SRF9UWVBFCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBUWVBFX0JJTkZPIChyaHMpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHsKKwkJCSAgICAgIC8qIEdldCB0aGUg dnRhYmxlIGZvciB0aGUgdHlwZS4gICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2dGJsX3Zhcl9kZWNsID0gbXlfZ2V0X3Z0YmxfZGVjbF9m b3JfYmluZm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChUWVBFX0JJTkZPIChyaHMpKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0YmwgPSBCSU5GT19W VEFCTEUgKFRZUEVfQklORk8gKHJocykpOworCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoIXZ0YmxfdmFyX2RlY2wgfHwgIXZ0YmwpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb2JsZW06ICBU aGlzIGRvZXMgTk9UIGVuZCB1cCBjaGVja2luZworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIGZ1bmN0aW9ucyBpZiB0aGVy ZSBpcyBOTworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bmhlcml0YW5jZSBpbnZvbHZlZC4gICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2dGJsX2RlY2wgPSB2dGJsX3Zhcl9kZWNsOworCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVFJFRV9DT0RFIChUUkVF X1RZUEUgKHZ0YmwpKSA9PSBQT0lOVEVSX1RZUEUpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvcmNlX2dpbXBsZV9vcGVyYW5kICh2dGJs LCAmcHJlX3AsIDEsIE5VTEwpOworCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChUUkVFX0NIQUlOIChyaHMpKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2YXJfaWQgPSBERUNMX0FTU0VNQkxFUl9OQU1F IChUUkVFX0NIQUlOCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmhz KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcl9pZCA9IERFQ0xfQVNT RU1CTEVSX05BTUUgKFRZUEVfTkFNRSAocmhzKSk7CisKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZ0YWJsZV9tYXBfbm9kZSA9IHZ0YmxfbWFw X2dldF9ub2RlICh2YXJfaWQpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKHZ0YWJsZV9tYXBfbm9kZSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZ0YmxfdmFyX2RlY2wgPQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdnRhYmxlX21hcF9ub2RlLT52 dGJsX21hcF9kZWNsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZ0YWJsZV9tYXBfbm9kZS0+aXNfdXNlZCA9IHRydWU7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdnRibF92YXJfZGVjbCA9IE5VTEw7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEJ1aWxkICB2ZXJpZnlfdnRibF9wdHJfZm5kZWNsICovCisKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgYnVpbGRfdnRhYmxlX3ZlcmlmeV9mbmRlY2wg KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR2l2ZW4gdGhl IHZ0YWJsZSBwb2ludGVyIGZvciB0aGUgYmFzZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjbGFzcyBvZiB0aGUgb2JqZWN0LCBidWlsZCB0aGUg Y2FsbCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1ZMVFZl cmlmeVZ0YWJsZVBvaW50ZXIgdG8gdmVyaWZ5IHRoYXQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhlIG9iamVjdCdzIHZ0YWJsZSBwb2ludGVy IChjb250YWluZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGhzKSBpcyBpbiB0aGUgc2V0IG9mIHZhbGlkIHZ0YWJsZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwb2ludGVycyBmb3IgdGhlIGJhc2UgY2xh c3MuICAqLworCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJp ZnlfdnRibF9wdHJfZm5kZWNsICYmIHZ0YmxfdmFyX2RlY2wpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdHJlZSBleHByX3RyZWUgPSBOVUxMX1RSRUU7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2ltcGxpZnlfY3R4IGdj dHg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICp2dGFibGVfbmFtZSA9ICI8dW5rbm93bj4iOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2ltcGxlIGNhbGxfc3RtdDsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdpbXBsZSBhc3NpZ25fc3RtdDsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUgdG1wMDsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RhdHVzOworCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuMSA9IDA7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuMiA9IDA7CisKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUUkVFX0NPREUgKHZ0Ymxf ZGVjbCkgPT0gVkFSX0RFQ0wpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZ0YWJsZV9uYW1lID0gSURFTlRJRklFUl9QT0lOVEVSCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKERFQ0xfTkFNRSAodnRibF9kZWNsKSk7CisKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHB1c2hfZ2ltcGxpZnlfY29udGV4dCAoJmdj dHgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuMSA9IHN0 cmxlbiAoSURFTlRJRklFUl9QT0lOVEVSCisJCQkJICAgICAgICAgICAgICAg ICAgKERFQ0xfTkFNRSAodnRibF92YXJfZGVjbCkpKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxlbjIgPSBzdHJsZW4gKHZ0YWJsZV9uYW1l KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FsbCBk aWZmZXJlbnQgcm91dGluZXMgaWYgd2UgYXJlCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnRlcmVzdGVkIGluIHRyYWNlIGluZm9ybWF0 aW9uIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlh Z2UgcHJvYmxlbXMgKi8KKyNpZmRlZiBWVFZfREVCVUcKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGV4cHJfdHJlZSA9IGJ1aWxkX2NhbGxfZXhw cgorCQkJICAgICAgICAgICAgICh2ZXJpZnlfdnRibF9wdHJfZm5kZWNsLCA2 LAorCQkJCSAgICAgIG15X2J1aWxkMSAoQUREUl9FWFBSLAorCQkJCQkJIFRZ UEVfUE9JTlRFUl9UTworCQkJCQkJICAgKFRSRUVfVFlQRSAodnRibF92YXJf ZGVjbCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZ0YmxfdmFyX2RlY2wpLAorCQkJCSAgICAgIGxocywK KwkJCQkgICAgICBidWlsZF9zdHJpbmdfbGl0ZXJhbAorCQkJCSAgICAgICAg ICAgICAgICAgIChsZW4xLAorCQkJCQkJICAgSURFTlRJRklFUl9QT0lOVEVS CisJCQkJCQkgICAgICAgKERFQ0xfTkFNRQorCQkJCQkJCSAgICAodnRibF92 YXJfZGVjbCkpKSwKKwkJCQkgICAgICBidWlsZF9pbnRfY3N0IChpbnRlZ2Vy X3R5cGVfbm9kZSwKKwkJCQkJCSAgICAgbGVuMSksCisJCQkJICAgICAgYnVp bGRfc3RyaW5nX2xpdGVyYWwgKGxlbjIsIHZ0YWJsZV9uYW1lKSwKKwkJCQkg ICAgICBidWlsZF9pbnRfY3N0IChpbnRlZ2VyX3R5cGVfbm9kZSwKKwkJCQkJ CSAgICAgbGVuMikpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGV4cHJfdHJlZSA9IGJ1aWxkX2NhbGxfZXhwcgorCQkgICAgICAg ICAgICAgICAgICAgICAodmVyaWZ5X3Z0YmxfcHRyX2ZuZGVjbCwgMiwKKwkJ CQkgICAgICBteV9idWlsZDEgKEFERFJfRVhQUiwKKwkJCQkgICAgICAgICAg ICAgICAgIFRZUEVfUE9JTlRFUl9UTworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRSRUVfVFlQRSAodnRi bF92YXJfZGVjbCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZ0YmxfdmFyX2RlY2wpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaHMpOworI2VuZGlmCisK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFzc2lnbiB0aGUg cmVzdWx0IG9mIHRoZSBjYWxsIHRvIHRoZQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb3JpZ2luYWwgdmFyaWFibGUgcmVjZWl2aW5nIHRo ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVu dCBvZiB0aGUgb2JqZWN0J3MgdnRhYmxlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwb2ludGVyOyBtYXJrIHRoYXQgdmFyaWFibGUgdG8g YmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQg YnkgdXBkYXRlX3NzYS4gICovCisKKwkJCSAgICAgIGNmdW4tPmdpbXBsZV9k Zi0+c3NhX3JlbmFtaW5nX25lZWRlZCA9IDE7CisKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEluc2VydCB0aGUgbmV3IGNhbGwganVzdCBh ZnRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9y aWdpbmFsIGFzc2lnbm1lbnQgb2YgdGhlIG9iamVjdCdzCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2dGFibGUgcG9pbnRlci4gICovCisK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDAgPSBtYWtlX3Rl bXBfc3NhX25hbWUgKFRSRUVfVFlQRSAobGhzKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwsICJWVFYiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFz c2lnbl9zdG10ID0gZ2ltcGxpZnlfYXNzaWduICh0bXAwLCBleHByX3RyZWUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnByZV9wKTsKKworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKGZvdW5kX3BoaSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJldl91c2UgPSBwaGlfcHJldl91c2U7CisK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IGZpbmRf YW5kX3JlcGxhY2VfdmFyIChwcmV2X3VzZSwgbGhzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRtcDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBk YXRlX3N0bXQgKGFzc2lnbl9zdG10KTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdjY19hc3NlcnQgKHN0YXR1cyA9PSB0cnVlKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBvcF9naW1wbGlmeV9jb250ZXh0 IChOVUxMKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGZvdW5kX3BoaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z3NpX2luc2VydF9zZXFfYmVmb3JlICgmZ3NpX3Z0YmxfYXNzaWduLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHByZV9wLCBHU0lfTkVXX1NUTVQpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnc2lfaW5zZXJ0X3NlcV9hZnRlciAoJmdzaV92dGJsX2Fzc2ln biwgcHJlX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHU0lfTkVXX1NUTVQpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYW55X3ZlcmlmaWNhdGlvbl9jYWxsc19n ZW5lcmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQKK2J1aWxkX3Z0YWJs ZV92ZXJpZnlfZm5kZWNsICh2b2lkKQoreworICB0cmVlIHZvaWRfcHRyX3R5 cGUgPSBidWlsZF9wb2ludGVyX3R5cGUgKHZvaWRfdHlwZV9ub2RlKTsKKyAg dHJlZSBhcmdfdHlwZXMgPSBOVUxMX1RSRUU7CisgIHRyZWUgdHlwZSA9IGJ1 aWxkX3BvaW50ZXJfdHlwZSAodm9pZF90eXBlX25vZGUpOworICBzdHJ1Y3Qg bGFuZ19kZWNsICpsZDsKKyNpZmRlZiBWVFZfREVCVUcKKyAgdHJlZSBjaGFy X3B0cl90eXBlID0gYnVpbGRfcG9pbnRlcl90eXBlIChjaGFyX3R5cGVfbm9k ZSk7CisjZW5kaWYKKworICBpZiAodmVyaWZ5X3Z0YmxfcHRyX2ZuZGVjbCAh PSBOVUxMX1RSRUUpCisgICAgcmV0dXJuOworCisgIGxkID0gZ2djX2FsbG9j X2NsZWFyZWRfbGFuZ19kZWNsIChzaXplb2YgKHN0cnVjdCBsYW5nX2RlY2xf Zm4pKTsKKyAgbGQtPnUuYmFzZS5zZWxlY3RvciA9IDE7CisKKyAgYXJnX3R5 cGVzID0gYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsIGJ1aWxkX3BvaW50 ZXJfdHlwZSAodm9pZF9wdHJfdHlwZSkpOworICBhcmdfdHlwZXMgPSBjaGFp bm9uIChhcmdfdHlwZXMsIGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCB2 b2lkX3B0cl90eXBlKSk7CisKKyNpZmRlZiBWVFZfREVCVUcKKyAgLyogU3Rh cnQ6IEFyZyB0eXBlcyB0byBiZSByZW1vdmVkIHdoZW4gd2UgcmVtb3ZlIGRl YnVnZ2luZyBwYXJhbWV0ZXJzIGZyb20KKyAgICAgdGhlIGxpYnJhcnkgZnVu Y3Rpb24uICovCisgIGFyZ190eXBlcyA9IGNoYWlub24gKGFyZ190eXBlcywg YnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsIGNoYXJfcHRyX3R5cGUpKTsK KyAgYXJnX3R5cGVzID0gY2hhaW5vbiAoYXJnX3R5cGVzLCBidWlsZF90cmVl X2xpc3QgKE5VTExfVFJFRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXJfdHlwZV9ub2RlKSk7 CisgIGFyZ190eXBlcyA9IGNoYWlub24gKGFyZ190eXBlcywgYnVpbGRfdHJl ZV9saXN0IChOVUxMX1RSRUUsIGNoYXJfcHRyX3R5cGUpKTsKKyAgYXJnX3R5 cGVzID0gY2hhaW5vbiAoYXJnX3R5cGVzLCBidWlsZF90cmVlX2xpc3QgKE5V TExfVFJFRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludGVnZXJfdHlwZV9ub2RlKSk7CisgIC8qIEVu ZDogQXJnIHR5cGVzIHRvIGJlIHJlbW92ZWQuLi4qLworI2VuZGlmCisKKyAg YXJnX3R5cGVzID0gY2hhaW5vbiAoYXJnX3R5cGVzLCBidWlsZF90cmVlX2xp c3QgKE5VTExfVFJFRSwgdm9pZF90eXBlX25vZGUpKTsKKworICB0eXBlID0g YnVpbGRfZnVuY3Rpb25fdHlwZSAodHlwZSwgYXJnX3R5cGVzKTsKKworI2lm ZGVmIFZUVl9ERUJVRworICB2ZXJpZnlfdnRibF9wdHJfZm5kZWNsID0gYnVp bGRfZm5fZGVjbCAoIl9fVkxUVmVyaWZ5VnRhYmxlUG9pbnRlckRlYnVnIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5 cGUpOworI2Vsc2UKKyAgdmVyaWZ5X3Z0YmxfcHRyX2ZuZGVjbCA9IGJ1aWxk X2ZuX2RlY2wgKCJfX1ZMVFZlcmlmeVZ0YWJsZVBvaW50ZXIiLCB0eXBlKTsK KyNlbmRpZgorCisgIFRSRUVfTk9USFJPVyAodmVyaWZ5X3Z0YmxfcHRyX2Zu ZGVjbCkgPSAxOworICBERUNMX0FUVFJJQlVURVMgKHZlcmlmeV92dGJsX3B0 cl9mbmRlY2wpCisgICAgICA9IHRyZWVfY29ucyAoZ2V0X2lkZW50aWZpZXIg KCJsZWFmIiksIE5VTEwsCisgICAgICAgICAgICAgICAgICAgREVDTF9BVFRS SUJVVEVTICh2ZXJpZnlfdnRibF9wdHJfZm5kZWNsKSk7CisgIFRSRUVfUFVC TElDICh2ZXJpZnlfdnRibF9wdHJfZm5kZWNsKSA9IDE7CisgIERFQ0xfUFJF U0VSVkVfUCAodmVyaWZ5X3Z0YmxfcHRyX2ZuZGVjbCkgPSAxOworICBERUNM X0xBTkdfU1BFQ0lGSUMgKHZlcmlmeV92dGJsX3B0cl9mbmRlY2wpID0gbGQ7 CisgIFNFVF9ERUNMX0xBTkdVQUdFICh2ZXJpZnlfdnRibF9wdHJfZm5kZWNs LCBsYW5nX2NwbHVzcGx1cyk7Cit9CisKK3Vuc2lnbmVkIGludAordnRhYmxl X3ZlcmlmeV9tYWluICh2b2lkKQoreworICB1bnNpZ25lZCBpbnQgcmV0ID0g MTsKKyAgYmFzaWNfYmxvY2sgYmI7CisKKyAgRk9SX0FMTF9CQiAoYmIpCisg ICAgICB2ZXJpZnlfYmJfdnRhYmxlcyAoYmIpOworCisgIHJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyBib29sCitnYXRlX3RyZWVfdnRhYmxlX3ZlcmlmeSAo dm9pZCkKK3sKKyAgcmV0dXJuIChmbGFnX3Z0YWJsZV92ZXJpZnkKKyAgICAg ICAgICAmJiAoc3RyY21wIChsYW5nX2hvb2tzLm5hbWUsICJHTlUgQysrIikg PT0gMCkpOworfQorCitzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfdnRh YmxlX3ZlcmlmeSA9Cit7CisgeworICBHSU1QTEVfUEFTUywKKyAgInZ0YWJs ZS12ZXJpZnkiLCAgICAgICAgICAgICAgICAgICAgICAvKiBuYW1lICovCisg IGdhdGVfdHJlZV92dGFibGVfdmVyaWZ5LCAgICAgICAgICAgICAgLyogZ2F0 ZSAqLworICB2dGFibGVfdmVyaWZ5X21haW4sICAgICAgICAgICAgICAgICAg IC8qIGV4ZWN1dGUgKi8KKyAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBzdWIgKi8KKyAgTlVMTCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBuZXh0ICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RhdGljX3Bhc3NfbnVtYmVy ICovCisgIFRWX1ZUQUJMRV9WRVJJRklDQVRJT04sICAgICAgICAgICAgICAg LyogdHZfaWQgKi8KKyAgUFJPUF9jZmcgfCBQUk9QX3NzYSwgICAgICAgICAg ICAgICAgICAvKiBwcm9wZXJ0aWVzX3JlcXVpcmVkICovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvcGVydGllc19w cm92aWRlZCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHByb3BlcnRpZXNfZGVzdHJveWVkICovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdG9kb19mbGFnc19z dGFydCAqLworICBUT0RPX3VwZGF0ZV9zc2EKKyAgICB8IFRPRE9fZ2djX2Nv bGxlY3QgICAgICAgICAgICAgICAgICAvKiB0b2RvX2ZsYWdzX2ZpbmlzaCAq LworIH0KK307CisKKyNpbmNsdWRlICJndC10cmVlLXZ0YWJsZS12ZXJpZnku aCIKClByb3BlcnR5IGNoYW5nZXMgb246IGdjYy90cmVlLXZ0YWJsZS12ZXJp ZnkuYwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0 eWxlCiAgICsgTEYKCkluZGV4OiBnY2MvdHJlZS12dGFibGUtdmVyaWZ5LmgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3RyZWUtdnRhYmxlLXZl cmlmeS5oCShyZXZpc2lvbiAwKQorKysgZ2NjL3RyZWUtdnRhYmxlLXZlcmlm eS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgxIEBACisvKiBJbnRlcnBy b2NlZHVyYWwgY29uc3RhbnQgcHJvcGFnYXRpb24KKyAgIENvcHlyaWdodCAo QykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMQor ICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmls ZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIK K3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQor V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK K2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBu b3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwor CisvKiBWaXJ0dWFsIFRhYmxlIFBvaW50ZXIgU2VjdXJpdHkuICAqLworCisj aWZuZGVmIFRSRUVfVlRBQkxFX1ZFUklGWV9ICisjZGVmaW5lIFRSRUVfVlRB QkxFX1ZFUklGWV9ICisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl ICJzeXN0ZW0uaCIKKyNpbmNsdWRlICJjb3JldHlwZXMuaCIKKyNpbmNsdWRl ICJ0bS5oIgorI2luY2x1ZGUgInRpbWV2YXIuaCIKKyNpbmNsdWRlICJjcHBs aWIuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiaGFzaHRhYi5o IgorI2luY2x1ZGUgInNiaXRtYXAuaCIKKworZXh0ZXJuIHVuc2lnbmVkIG51 bV92dGFibGVfbWFwX25vZGVzOworZXh0ZXJuIGJvb2wgYW55X3ZlcmlmaWNh dGlvbl9jYWxsc19nZW5lcmF0ZWQ7CisKK3N0cnVjdCB2dGFibGVfcmVnaXN0 cmF0aW9uCit7CisgIHRyZWUgdnRhYmxlX2RlY2w7CisgIHVuc2lnbmVkIG1h eF9vZmZzZXRzOworICB1bnNpZ25lZCBjdXJfb2Zmc2V0OworICB1bnNpZ25l ZCAqb2Zmc2V0czsKK307CisKK3N0cnVjdCB2dHZfZ3JhcGhfbm9kZSB7Cisg IHRyZWUgY2xhc3NfdHlwZTsKKyAgdW5zaWduZWQgY2xhc3NfdWlkOworICB1 bnNpZ25lZCBtYXhfcGFyZW50czsKKyAgdW5zaWduZWQgbWF4X2NoaWxkcmVu OworICB1bnNpZ25lZCBudW1fcGFyZW50czsKKyAgdW5zaWduZWQgbnVtX2No aWxkcmVuOworICB1bnNpZ25lZCBudW1fcHJvY2Vzc2VkX2NoaWxkcmVuOwor ICBzdHJ1Y3QgdnR2X2dyYXBoX25vZGUgKipwYXJlbnRzOworICBzdHJ1Y3Qg dnR2X2dyYXBoX25vZGUgKipjaGlsZHJlbjsKKyAgc2JpdG1hcCBkZXNjZW5k YW50czsKK307CisKK3N0cnVjdCB2dGJsX21hcF9ub2RlIHsKKyAgdHJlZSB2 dGJsX21hcF9kZWNsOworICB0cmVlIGNsYXNzX25hbWU7CisgIHN0cnVjdCB2 dHZfZ3JhcGhfbm9kZSAqY2xhc3NfaW5mbzsKKyAgdW5zaWduZWQgdWlkOwor ICBzdHJ1Y3QgdnRibF9tYXBfbm9kZSAqbmV4dCwgKnByZXY7CisgIGh0YWJf dCByZWdpc3RlcmVkOworICBib29sIGlzX3VzZWQ7Cit9OworCitleHRlcm4g c3RydWN0IHZ0YmxfbWFwX25vZGUgKnZ0YmxfbWFwX25vZGVzOworZXh0ZXJu IHN0cnVjdCB2dGJsX21hcF9ub2RlICoqdnRibF9tYXBfbm9kZXNfYXJyYXk7 CisKK2V4dGVybiBzdHJ1Y3QgdnRibF9tYXBfbm9kZSAqdnRibF9tYXBfZ2V0 X25vZGUgKGNvbnN0X3RyZWUpOworZXh0ZXJuIHN0cnVjdCB2dGJsX21hcF9u b2RlICpmaW5kX29yX2NyZWF0ZV92dGJsX21hcF9ub2RlICh0cmVlKTsKK2V4 dGVybiB2b2lkIHZ0YmxfbWFwX25vZGVfY2xhc3NfaW5zZXJ0IChzdHJ1Y3Qg dnRibF9tYXBfbm9kZSAqLCB1bnNpZ25lZCk7CitleHRlcm4gYm9vbCB2dGJs X21hcF9ub2RlX3JlZ2lzdHJhdGlvbl9maW5kIChzdHJ1Y3QgdnRibF9tYXBf bm9kZSAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdHJlZSwgdW5zaWduZWQpOworZXh0ZXJuIHZvaWQgdnRibF9t YXBfbm9kZV9yZWdpc3RyYXRpb25faW5zZXJ0IChzdHJ1Y3QgdnRibF9tYXBf bm9kZSAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0cmVlLCB1bnNpZ25lZCk7CisKKyNlbmRpZiAvKiBUUkVF X1ZUQUJMRV9WRVJJRllfSCAqLwoKUHJvcGVydHkgY2hhbmdlcyBvbjogZ2Nj L3RyZWUtdnRhYmxlLXZlcmlmeS5oCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K QWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IGdjYy9jb21t b24ub3B0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9jb21tb24u b3B0CShyZXZpc2lvbiAxOTI1MDMpCisrKyBnY2MvY29tbW9uLm9wdAkod29y a2luZyBjb3B5KQpAQCAtMjI1Myw2ICsyMjUzLDIyIEBAIEVudW0oc3ltYm9s X3Zpc2liaWxpdHkpIFN0cmluZyhoaWRkZW4pIFYKIEVudW1WYWx1ZQogRW51 bShzeW1ib2xfdmlzaWJpbGl0eSkgU3RyaW5nKHByb3RlY3RlZCkgVmFsdWUo VklTSUJJTElUWV9QUk9URUNURUQpCiAKK2Z2dGFibGUtdmVyaWZ5PQorQ29t bW9uIEpvaW5lZCBSZWplY3ROZWdhdGl2ZSBFbnVtKHZ0dl9wcmlvcml0eSkg VmFyKGZsYWdfdnRhYmxlX3ZlcmlmeSkgSW5pdChWVFZfTk9fUFJJT1JJVFkp CitWYWxpZGF0ZSB2dGFibGUgcG9pbnRlcnMgYmVmb3JlIHVzaW5nIHRoZW0u CisKK0VudW0KK05hbWUodnR2X3ByaW9yaXR5KSBUeXBlKGVudW0gdnR2X3By aW9yaXR5KSBVbmtub3duRXJyb3IodW5rbm93biB2dGFibGUgdmVyaWZ5IGlu aXRpYWxpemF0aW9uIHByaW9yaXR5ICVxcykKKworRW51bVZhbHVlCitFbnVt KHZ0dl9wcmlvcml0eSkgU3RyaW5nKG5vbmUpIFZhbHVlKFZUVl9OT19QUklP UklUWSkKKworRW51bVZhbHVlCitFbnVtKHZ0dl9wcmlvcml0eSkgU3RyaW5n KHN0ZCkgVmFsdWUoVlRWX1NUQU5EQVJEX1BSSU9SSVRZKQorCitFbnVtVmFs dWUKK0VudW0odnR2X3ByaW9yaXR5KSBTdHJpbmcocHJlaW5pdCkgVmFsdWUo VlRWX1BSRUlOSVRfUFJJT1JJVFkpCisKIGZ2cHQKIENvbW1vbiBSZXBvcnQg VmFyKGZsYWdfdmFsdWVfcHJvZmlsZV90cmFuc2Zvcm1hdGlvbnMpIE9wdGlt aXphdGlvbgogVXNlIGV4cHJlc3Npb24gdmFsdWUgcHJvZmlsZXMgaW4gb3B0 aW1pemF0aW9ucwpJbmRleDogZ2NjL3ZhcmFzbS5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGdjYy92YXJhc20uYwkocmV2aXNpb24gMTkyNTAzKQor KysgZ2NjL3ZhcmFzbS5jCSh3b3JraW5nIGNvcHkpCkBAIC0yMDE4LDEzICsy MDE4LDQ0IEBAIGFzc2VtYmxlX3ZhcmlhYmxlICh0cmVlIGRlY2wsIGludCB0 b3BfbGUKICAgICBhc3NlbWJsZV9ub3N3aXRjaF92YXJpYWJsZSAoZGVjbCwg bmFtZSwgc2VjdCk7CiAgIGVsc2UKICAgICB7Ci0gICAgICBzd2l0Y2hfdG9f c2VjdGlvbiAoc2VjdCk7CisgICAgICBpZiAoZmxhZ192dGFibGVfdmVyaWZ5 KQorICAgICAgICB7CisgICAgICAgICAgaWYgKHN0cnN0ciAobmFtZSwgIl9f dnRhYmxlX21hcCIpKQorICAgICAgICAgICAgeworI2lmIGRlZmluZWQgKE9C SkVDVF9GT1JNQVRfRUxGKQorICAgICAgICAgICAgICB0YXJnZXRtLmFzbV9v dXQubmFtZWRfc2VjdGlvbiAoc2VjdC0+bmFtZWQubmFtZSwKKwkJCQkJICAg ICBzZWN0LT5uYW1lZC5jb21tb24uZmxhZ3MKKwkJCQkJICAgICB8IFNFQ1RJ T05fTElOS09OQ0UsCisJCQkJCSAgICAgREVDTF9OQU1FIChkZWNsKSk7Cisg ICAgICAgICAgICAgIGluX3NlY3Rpb24gPSBzZWN0OworI2Vsc2UKKyAgICAg ICAgICAgICAgc3dpdGNoX3RvX3NlY3Rpb24gKHNlY3QpOworI2VuZGlmCisg ICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc3dp dGNoX3RvX3NlY3Rpb24gKHNlY3QpOworICAgICAgICB9CisgICAgICBlbHNl CisgICAgICAgIHN3aXRjaF90b19zZWN0aW9uIChzZWN0KTsKICAgICAgIGlm IChERUNMX0FMSUdOIChkZWNsKSA+IEJJVFNfUEVSX1VOSVQpCiAJQVNNX09V VFBVVF9BTElHTiAoYXNtX291dF9maWxlLCBmbG9vcl9sb2cyIChERUNMX0FM SUdOX1VOSVQgKGRlY2wpKSk7CiAgICAgICBhc3NlbWJsZV92YXJpYWJsZV9j b250ZW50cyAoZGVjbCwgbmFtZSwgZG9udF9vdXRwdXRfZGF0YSk7CiAgICAg fQogfQogCit2b2lkCithc3NlbWJsZV92dHZfcHJlaW5pdF9pbml0aWFsaXpl ciAodHJlZSBmbl9kZWNsKQoreworICBzZWN0aW9uICpzZWN0OworICB1bnNp Z25lZCBmbGFncyA9IFNFQ1RJT05fV1JJVEU7CisgIHJ0eCBzeW1ib2wgPSBY RVhQIChERUNMX1JUTCAoZm5fZGVjbCksIDApOworCisgIGZsYWdzIHw9IFNF Q1RJT05fTk9UWVBFOworICBzZWN0ID0gZ2V0X3NlY3Rpb24gKCIucHJlaW5p dF9hcnJheSIsIGZsYWdzLCBmbl9kZWNsKTsKKyAgc3dpdGNoX3RvX3NlY3Rp b24gKHNlY3QpOworICBhc3NlbWJsZV9hZGRyX3RvX3NlY3Rpb24gKHN5bWJv bCwgc2VjdCk7Cit9CisKIC8qIFJldHVybiAxIGlmIHR5cGUgVFlQRSBjb250 YWlucyBhbnkgcG9pbnRlcnMuICAqLwogCiBzdGF0aWMgaW50CkluZGV4OiBn Y2Mvb3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL291 dHB1dC5oCShyZXZpc2lvbiAxOTI1MDMpCisrKyBnY2Mvb3V0cHV0LmgJKHdv cmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksMTAgQEAgZXh0ZXJuIHZvaWQg YXNzZW1ibGVfZW5kX2Z1bmN0aW9uICh0cmVlLAogICAgaW5pdGlhbCB2YWx1 ZSAodGhhdCB3aWxsIGJlIGRvbmUgYnkgdGhlIGNhbGxlcikuICAqLwogZXh0 ZXJuIHZvaWQgYXNzZW1ibGVfdmFyaWFibGUgKHRyZWUsIGludCwgaW50LCBp bnQpOwogCisvKiBNYWtlIHN1cmUgdGhlIHZ0YWJsZSB2ZXJpZmljYXRpb24g Y29uc3RydWN0b3IgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24KKyAgIGdvZXMg aW50byB0aGUgcHJlaW5pdCBhcnJheS4gICovCitleHRlcm4gdm9pZCBhc3Nl bWJsZV92dHZfcHJlaW5pdF9pbml0aWFsaXplciAodHJlZSk7CisKIC8qIENv bXB1dGUgdGhlIGFsaWdubWVudCBvZiB2YXJpYWJsZSBzcGVjaWZpZWQgYnkg REVDTC4KICAgIERPTlRfT1VUUFVUX0RBVEEgaXMgZnJvbSBhc3NlbWJsZV92 YXJpYWJsZS4gICovCiBleHRlcm4gdm9pZCBhbGlnbl92YXJpYWJsZSAodHJl ZSBkZWNsLCBib29sIGRvbnRfb3V0cHV0X2RhdGEpOwpJbmRleDogZ2NjL01h a2VmaWxlLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9NYWtl ZmlsZS5pbgkocmV2aXNpb24gMTkyNTAzKQorKysgZ2NjL01ha2VmaWxlLmlu CSh3b3JraW5nIGNvcHkpCkBAIC0xNDI0LDYgKzE0MjQsNyBAQCBPQkpTID0g XAogCXRyZWUtdmVjdC1sb29wLW1hbmlwLm8gXAogCXRyZWUtdmVjdC1zbHAu byBcCiAJdHJlZS12ZWN0b3JpemVyLm8gXAorCXRyZWUtdnRhYmxlLXZlcmlm eS5vIFwKIAl0cmVlLXZycC5vIFwKIAl0cmVlLm8gXAogCXZhbHRyYWNrLm8g XApAQCAtMjU3OCw2ICsyNTc5LDExIEBAIHRyZWUtdmVjdG9yaXplci5vOiB0 cmVlLXZlY3Rvcml6ZXIuYyAkKEMKICAgIGR1bXBmaWxlLmggJChUTV9IKSAk KEdHQ19IKSAkKFRSRUVfSCkgJChUUkVFX0ZMT1dfSCkgXAogICAgJChDRkdM T09QX0gpICQoVFJFRV9QQVNTX0gpICQoVFJFRV9WRUNUT1JJWkVSX0gpIFwK ICAgICQoVFJFRV9QUkVUVFlfUFJJTlRfSCkKK3RyZWUtdnRhYmxlLXZlcmlm eS5vOiB0cmVlLXZ0YWJsZS12ZXJpZnkuYyB0cmVlLXZ0YWJsZS12ZXJpZnku aCAkKENPTkZJR19IKSBcCisgICAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaCAk KFRNX0gpICQoVFJFRV9IKSBjcC9jcC10cmVlLmggJChUTV9QX0gpIFwKKyAg ICQoQkFTSUNfQkxPQ0tfSCkgb3V0cHV0LmggJChUUkVFX0ZMT1dfSCkgJChU UkVFX0RVTVBfSCkgJChUUkVFX1BBU1NfSCkgXAorICAgJChUSU1FVkFSX0gp ICQoQ0ZHTE9PUF9IKSAkKEZMQUdTX0gpICAkKFRSRUVfSU5MSU5FX0gpICQo U0NFVl9IKSBcCisgICAkKERJQUdOT1NUSUNfQ09SRV9IKSAkKEdJTVBMRV9Q UkVUVFlfUFJJTlRfSCkgdG9wbGV2LmggbGFuZ2hvb2tzLmgKIHRyZWUtbG9v cC1kaXN0cmlidXRpb24ubzogdHJlZS1sb29wLWRpc3RyaWJ1dGlvbi5jICQo Q09ORklHX0gpICQoU1lTVEVNX0gpIFwKICAgIGNvcmV0eXBlcy5oICQoVFJF RV9GTE9XX0gpICQoQ0ZHTE9PUF9IKSAkKFRSRUVfREFUQV9SRUZfSCkgJChU UkVFX1BBU1NfSCkKIHRyZWUtcGFybG9vcHMubzogdHJlZS1wYXJsb29wcy5j ICQoQ09ORklHX0gpICQoU1lTVEVNX0gpIGNvcmV0eXBlcy5oIFwKQEAgLTM2 NzYsNiArMzY4Miw3IEBAIEdURklMRVMgPSAkKENQUF9JRF9EQVRBX0gpICQo c3JjZGlyKS9pbnAKICAgJChzcmNkaXIpL2x0by1zdHJlYW1lci5oIFwKICAg JChzcmNkaXIpL3RhcmdldC1nbG9iYWxzLmggXAogICAkKHNyY2RpcikvaXBh LWlubGluZS5oIFwKKyAgJChzcmNkaXIpL3RyZWUtdnRhYmxlLXZlcmlmeS5j IFwKICAgQGFsbF9ndGZpbGVzQAogCiAjIENvbXB1dGUgdGhlIGxpc3Qgb2Yg R1QgaGVhZGVyIGZpbGVzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgQyBzb3Vy Y2VzLApJbmRleDogZ2NjL3Bhc3Nlcy5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGdjYy9wYXNzZXMuYwkocmV2aXNpb24gMTkyNTAzKQorKysgZ2Nj L3Bhc3Nlcy5jCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQzLDYgKzE1NDMsNyBA QCBpbml0X29wdGltaXphdGlvbl9wYXNzZXMgKHZvaWQpCiAgICAgICBORVhU X1BBU1MgKHBhc3NfdG1fbWVtb3B0KTsKICAgICAgIE5FWFRfUEFTUyAocGFz c190bV9lZGdlcyk7CiAgICAgfQorICBORVhUX1BBU1MgKHBhc3NfdnRhYmxl X3ZlcmlmeSk7CiAgIE5FWFRfUEFTUyAocGFzc19sb3dlcl9jb21wbGV4X08w KTsKICAgTkVYVF9QQVNTIChwYXNzX2NsZWFudXBfZWgpOwogICBORVhUX1BB U1MgKHBhc3NfbG93ZXJfcmVzeCk7Cg== --047d7b41bf322d3b7f04cdc31a94--