From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 110350 invoked by alias); 30 Jun 2015 12:25:34 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 110316 invoked by uid 89); 30 Jun 2015 12:25:33 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.5 required=5.0 tests=AWL,BAYES_50,FREEMAIL_FROM,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-wi0-f179.google.com Received: from mail-wi0-f179.google.com (HELO mail-wi0-f179.google.com) (209.85.212.179) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 30 Jun 2015 12:25:24 +0000 Received: by wicgi11 with SMTP id gi11so15015228wic.0; Tue, 30 Jun 2015 05:25:21 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.180.72.177 with SMTP id e17mr13194117wiv.12.1435667121393; Tue, 30 Jun 2015 05:25:21 -0700 (PDT) Received: by 10.180.11.10 with HTTP; Tue, 30 Jun 2015 05:25:21 -0700 (PDT) In-Reply-To: References: Date: Tue, 30 Jun 2015 12:36:00 -0000 Message-ID: Subject: Re: [Patch, fortran] PR52846 - [F2008] Support submodules From: Paul Richard Thomas To: "fortran@gcc.gnu.org" , gcc-patches Cc: Damian Rouson , Tobias Burnus , "salvatore.filippone@uniroma2.it" , "Bader, Reinhold" Content-Type: multipart/mixed; boundary=f46d043c7c16ca463e0519bb4c84 X-SW-Source: 2015-06/txt/msg02200.txt.bz2 --f46d043c7c16ca463e0519bb4c84 Content-Type: text/plain; charset=UTF-8 Content-length: 18257 Dear All, Please find attached the latest version of the submodule patch. You might note that the number of the patch has been incremented by two. The intermediate version went to Reinhold Bader and co for testing. The main improvements in this version are: (i) As reported by Reinhold, the interface declaration of the function result in the abbreviated form of module procedure was not being correctly incorporated. The only reason why the previous version worked at all was that I wasn't using implicit none... or, rather, I did not detect the error for that reason ***blush*** This has been fixed in parse.c(get_modproc_result); (ii) Repetition of the dummy or result declarations is now caught and prevents a segfault as the parser state stack dies; and (iii) Various new errors are tested in submodule_4.f90 and Reinhold's test has been added as submodule_6.f90. Please note that the issue with PRIVATE statements or attributes in modules has not been corrected yet. I will correct this once the attached has been committed. Private components are handled correctly, however. Bootstrapped and regtested on FC21/x86_64 - OK for trunk? If the patch is not reviewed by Thursday evening (21:00 CET), I will commit it anyway unless Reinhold or Salvatore come up with and further, significant issues. The new elements in the patch are well ring-fenced by new attributes or F2008 specific declarations and so I do not believe that it will cause any regressions. Any minor issues that come up can be dealt with later. I am anxious to get to work on the PRIVATE issue and want to do so on the basis of this patch being committed. With best regards Paul 2015-06-30 Paul Thomas PR fortran/52846 * decl.c (get_proc_name): Make a partially populated interface symbol to carry the characteristics of a module procedure and its result. (variable_decl): Declarations of dummies or results in the abreviated form of module procedure is an error. (gfc_match_import): IMPORT is not permitted in the interface declaration of module procedures. (match_attr_spec): Submodule variables have implicit save attribute for F2008 onwards. (gfc_match_prefix): Add 'module' as the a prefix and set the module_procedure attribute. (gfc_match_formal_arglist): For a module procedure keep the interface formal_arglist from the interface, match new the formal arguments and then compare the number and names of each. (gfc_match_procedure): Add case COMP_SUBMODULE. (gfc_match_function_decl, gfc_match_subroutine_decl): Set the module_procedure attribute. (gfc_match_entry, gfc_match_end): Add case COMP_SUBMODULE. If attr abr_modproc_decl is set, switch the message accordingly for subroutines and functions. (gfc_match_submod_proc): New function to match the abbreviated style of submodule declaration. * gfortran.h : Add ST_SUBMODULE and ST_END_SUBMODULE. Add the attribute bits 'used_in_submodule' and 'module_procedure'. Add the bit field 'abr_modproc_decl' to gfc_symbol. Add prototypes for 'gfc_copy_dummy_sym', 'gfc_check_dummy_characteristics' and 'gfc_check_result_characteristics'. * interface.c : Add the prefix 'gfc_' to the names of functions 'check_dummy(result)_characteristics' and all their references. * match.h : Add prototype for 'gfc_match_submod_proc' and 'gfc_match_submodule'. * module.c (gfc_match_submodule): New function. Add handling for the 'module_procedure' attribute bit. * parse.c (decode_statement): Set attr has_'import_set' for the interface declaration of module procedures. Handle a match occurring in 'gfc_match_submod_proc' and a match for 'submodule'. (gfc_enclosing_unit): Include the state COMP_SUBMODULE. (gfc_ascii_statement): Add END SUBMODULE. (accept_statement): Add ST_SUBMODULE. (parse_spec): Disallow statement functions in a submodule specification part. (parse_contained): Add ST_END_SUBMODULE and COMP_SUBMODULE twice each. (get_modproc_result): Copy the result symbol of the interface. (parse_progunit): Call it. (set_syms_host_assoc): Make symbols from the ancestor module and submodules use associated, as required by the standard and set all private components public. Module procedures 'external' attribute bit is reset and the 'used_in_submodule' bit is set. (parse_module): If this is a submodule, use the ancestor module and submodules. Traverse the namespace, calling 'set_syms_host_assoc'. Add ST_END_SUBMODULE and COMP_SUBMODULE. * parse.h : Add COMP_SUBMODULE. * primary.c (match_variable): Add COMP_SUBMODULE. * resolve.c (compare_fsyms): New function to compare the dummy characteristics of a module procedure with its interface. (resolve_fl_procedure): Compare the procedure, result and dummy characteristics of a module_procedure with its interface, using 'compare_fsyms' for the dummy arguments. * symbol.c (gfc_add_procedure): Suppress the check for existing procedures in the case of a module procedure. (gfc_add_explicit_interface): Skip checks that must fail for module procedures. (gfc_add_type): Allow a new type to be added to module procedures, their results or their dummy arguments. (gfc_copy_dummy_sym): New function to generate new dummy args and copy the characteristics from the interface. * trans-decl.c (gfc_sym_mangled_function_id): Module procedures must always have their names mangled as if they are symbols coming from a declaration in a module. (gfc_get_symbol_decl): Add 'used_in_submodule' to the assert. (gfc_finish_var_decl): Symbols with the 'used_in_submodule' bit set are set DECL_EXTERNAL as if they were use associated. 2015-06-30 Paul Thomas PR fortran/52846 * gfortran.dg/submodule_1.f90: New test * gfortran.dg/submodule_2.f90: New test * gfortran.dg/submodule_3.f90: New test * gfortran.dg/submodule_4.f90: New test * gfortran.dg/submodule_5.f90: New test * gfortran.dg/submodule_6.f90: New test On 25 June 2015 at 17:15, Paul Richard Thomas wrote: > Dear All, > > Please find attached an updated version of the submodule patch. > Reinhold Bader uncovered a couple of bugs, which have now been fixed: > (i) IMPORT is no longer permitted in module_procedure interface > bodies, as required by F2008(C1210). Instead, import occurs > automatically; and > (ii) The end statement for the abreviated module procedure declaration > was wrong; should have been END PROCEDURE. I started introducing > COMP_MODPROC_FUNC/SUBR in the parser to fix this. However, many of the > if statement became impossibly torturous considering that there was > only one place where it matters. Therefore, I decided to add a bit > field to gfc_symbol as the least invasive way of dealing with the > problem. > > The testcases were modified accordingly. > > Bootstraps and regtests on FC21/x86_64 - OK for trunk? > > Thanks Reinhold! > > Paul > > 2015-06-25 Paul Thomas > > PR fortran/52846 > * decl.c (get_proc_name): Make a partially populated interface > symbol to carry the characteristics of a module procedure and > its result. > (gfc_match_import): IMPORT is not permitted in the interface > declaration of module procedures. > (match_attr_spec): Submodule variables have implicit save > attribute for F2008 onwards. > (gfc_match_prefix): Add 'module' as the a prefix and set the > module_procedure attribute. > (gfc_match_formal_arglist): For a module procedure keep the > interface formal_arglist from the interface, match new the > formal arguments and then compare the number and names of each. > (gfc_match_procedure): Add case COMP_SUBMODULE. > (gfc_match_function_decl, gfc_match_subroutine_decl): Set the > module_procedure attribute. > (gfc_match_entry, gfc_match_end): Add case COMP_SUBMODULE. If > attr abr_modproc_decl is set, switch the message accordingly > for subroutines and functions. > (gfc_match_submod_proc): New function to match the abbreviated > style of submodule declaration. > * gfortran.h : Add ST_SUBMODULE and ST_END_SUBMODULE. Add the > attribute bits 'used_in_submodule' and 'module_procedure'. Add > prototypes for the functions 'gfc_check_dummy_characteristics' > and 'gfc_check_result_characteristics'. > * interface.c : Add the prefix 'gfc_' to the names of functions > 'check_dummy(result)_characteristics' and all their references. > * match.h : Add prototype for 'gfc_match_submod_proc' and > 'gfc_match_submodule'. > * module.c (gfc_match_submodule): New function. Add handling > for the 'module_procedure' attribute bit. > * parse.c (decode_statement): Set attr has_'import_set' for > the interface declaration of module procedures. Handle a match > occurring in 'gfc_match_submod_proc' and a match for > 'submodule'. > (gfc_enclosing_unit): Include the state COMP_SUBMODULE. > (gfc_ascii_statement): Add END SUBMODULE. > (accept_statement): Add ST_SUBMODULE. > (parse_spec): Disallow statement functions in a submodule > specification part. > (parse_contained): Add ST_END_SUBMODULE and COMP_SUBMODULE > twice each. > (set_syms_host_assoc): Make symbols from the ancestor module > and submodules use associated, as required by the standard and > set all private components public. Module procedures 'external' > attribute bit is reset and the 'used_in_submodule' bit is set. > (parse_module): If this is a submodule, use the ancestor module > and submodules. Traverse the namespace, calling > 'set_syms_host_assoc'. Add ST_END_SUBMODULE and COMP_SUBMODULE. > * parse.h : Add COMP_SUBMODULE. > * primary.c (match_variable): Add COMP_SUBMODULE. > * resolve.c (compare_fsyms): New function to compare the dummy > characteristics of a module procedure with its interface. > (resolve_fl_procedure): Compare the procedure, result and dummy > characteristics of a module_procedure with its interface, using > 'compare_fsyms' for the dummy arguments. > * symbol.c (gfc_add_procedure): Suppress the check for existing > procedures in the case of a module procedure. > (gfc_add_explicit_interface): Skip checks that must fail for > module procedures. > (gfc_add_type): Allow a new type to be added to module > procedures, their results or their dummy arguments. > * trans-decl.c (gfc_sym_mangled_function_id): Module procedures > must always have their names mangled as if they are symbols > coming from a declaration in a module. > (gfc_finish_var_decl): Symbols with the 'used_in_submodule' bit > set are set DECL_EXTERNAL as if they were use associated. > > 2015-06-25 Paul Thomas > > PR fortran/52846 > * gfortran.dg/submodule_1.f90: New test > * gfortran.dg/submodule_2.f90: New test > * gfortran.dg/submodule_3.f90: New test > * gfortran.dg/submodule_4.f90: New test > * gfortran.dg/submodule_5.f90: New test > > On 22 June 2015 at 14:39, Paul Richard Thomas > wrote: >> Dear All, >> >> This patch enables submodule support in gfortran. Submodules are a >> feature of F2008 but are fully described in ISO/IEC TR 19767:2004(E). >> >> The patch has one significant non-conformance (that I know about, >> anyway!); whilst private derived type components are correctly dealt >> with, symbols whose access is private within the parent module are >> not. They should effectively be host associated in descendant >> submodules. At present gfortran handles private access at the module >> write stage. This means that when a submodule reads the module file, >> there is no information present about symbols whose access was >> private. Since this modification might cause significant fall-out to >> existing code, I propose to submit a separate patch later on to sort >> out the non-conformance. However, as required private and public >> statements are not allowed in submodules. >> >> The patch makes maximum possible leverage of existing code to handle >> modules. Once the submodule is matched, the ancestor module and >> submodules are first "used" and then all the symbols are set host >> associated and private derived type components set public. >> >> Most of the work involved matching module procedures, with both the >> traditional form of declaration and the abbreviated one. I have chosen >> to treat MODULE as a prefix like PURE or ELEMENTAL. This is logical >> both because of the form of the declaration and because the >> identification of module procedures is most easily done with an >> attribute bit. With traditional procedure declarations, the procedure, >> result and dummy characteristics are compared with those of the >> interface declaration. The comparison of the dummy characteristics is >> a bit cobbled together and might be better done by copying the >> formal_namespace and it's contents to the new symbol and retaining the >> old for the interface symbol. This patch leaves the old dummy symbols >> in the formal namespace in the new ones in the formal arglist. I have >> checked that cleanup occurs for all objects. >> >> Note the comment in submodule_1.f90 about the possibility of >> undetected recursion between procedures in different submodules. I am >> not at all sure that I know how to deal with this and am open to >> suggestions. >> >> In addition, it should be noted that collisions between the names of >> entities and procedures, other than module procedures are detected by >> the linker at present. >> >> Apart from this, all is very straightforward and follows the the ChangeLogs. >> >> Thanks for testing of an early version of the patch by Damian Rouson, >> Salvatore Filippone and Tobias Burnus. >> >> Bootstrapped and regtested on FC21/x86_64 - OK for trunk? >> >> Cheers >> >> Paul >> >> 2015-06-22 Paul Thomas >> >> PR fortran/52846 >> * decl.c (get_proc_name): Make a partially populated interface >> symbol to carry the characteristics of a module procedure and >> its result. >> (match_attr_spec): Submodule variables have implicit save >> attribute for F2008 onwards. >> (gfc_match_prefix): Add 'module' as the a prefix and set the >> module_procedure attribute. >> (gfc_match_formal_arglist): For a module procedure keep the >> interface formal_arglist from the interface, match new the >> formal arguments and then compare the number and names of each. >> (gfc_match_procedure): Add case COMP_SUBMODULE. >> (gfc_match_function_decl, gfc_match_subroutine_decl): Set the >> module_procedure attribute. >> (gfc_match_entry, gfc_match_end): Add case COMP_SUBMODULE. >> (gfc_match_submod_proc): New function to match the abbreviated >> style of submodule declaration. >> * gfortran.h : Add ST_SUBMODULE and ST_END_SUBMODULE. Add the >> attribute bits 'used_in_submodule' and 'module_procedure'. Add >> prototypes for the functions 'gfc_check_dummy_characteristics' >> and 'gfc_check_result_characteristics'. >> * interface.c : Add the prefix 'gfc_' to the names of functions >> 'check_dummy(result)_characteristics' and all their references. >> * match.h : Add prototype for 'gfc_match_submod_proc' and >> 'gfc_match_submodule'. >> * module.c (gfc_match_submodule): New function. Add handling >> for the 'module_procedure' attribute bit. >> * parse.c (decode_statement): Handle a match occurring in >> 'gfc_match_submod_proc' and a match for 'submodule'. >> (gfc_enclosing_unit): Include the state COMP_SUBMODULE. >> (gfc_ascii_statement): Add END SUBMODULE. >> (accept_statement): Add ST_SUBMODULE. >> (parse_spec): Disallow statement functions in a submodule >> specification part. >> (parse_contained): Add ST_END_SUBMODULE and COMP_SUBMODULE >> twice each. >> (set_syms_host_assoc): Make symbols from the ancestor module >> and submodules use associated, as required by the standard and >> set all private components public. Module procedures 'external' >> attribute bit is reset and the 'used_in_submodule' bit is set. >> (parse_module): If this is a submodule, use the ancestor module >> and submodules. Traverse the namespace, calling >> 'set_syms_host_assoc'. Add ST_END_SUBMODULE and COMP_SUBMODULE. >> * parse.h : Add COMP_SUBMODULE. >> * primary.c (match_variable): Add COMP_SUBMODULE. >> * resolve.c (compare_fsyms): New function to compare the dummy >> characteristics of a module procedure with its interface. >> (resolve_fl_procedure): Compare the procedure, result and dummy >> characteristics of a module_procedure with its interface, using >> 'compare_fsyms' for the dummy arguments. >> * symbol.c (gfc_add_procedure): Suppress the check for existing >> procedures in the case of a module procedure. >> (gfc_add_explicit_interface): Skip checks that must fail for >> module procedures. >> (gfc_add_type): Allow a new type to be added to module >> procedures, their results or their dummy arguments. >> * trans-decl.c (gfc_sym_mangled_function_id): Module procedures >> must always have their names mangled as if they are symbols >> coming from a declaration in a module. >> (gfc_finish_var_decl): Symbols with the 'used_in_submodule' bit >> set are set DECL_EXTERNAL as if they were use associated. >> >> 2015-06-22 Paul Thomas >> >> PR fortran/52846 >> * gfortran.dg/submodule_1.f90: New test >> * gfortran.dg/submodule_2.f90: New test >> * gfortran.dg/submodule_3.f90: New test >> * gfortran.dg/submodule_4.f90: New test >> * gfortran.dg/submodule_5.f90: New test > > > > -- > Outside of a dog, a book is a man's best friend. Inside of a dog it's > too dark to read. > > Groucho Marx -- Outside of a dog, a book is a man's best friend. Inside of a dog it's too dark to read. Groucho Marx --f46d043c7c16ca463e0519bb4c84 Content-Type: text/plain; charset=US-ASCII; name="submit4.diff" Content-Disposition: attachment; filename="submit4.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ibjb4r2t1 Content-length: 94270 SW5kZXg6IGdjYy9mb3J0cmFuL2RlY2wuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CioqKiBnY2MvZm9ydHJhbi9kZWNsLmMJKHJldmlzaW9uIDIyNDcyNCkK LS0tIGdjYy9mb3J0cmFuL2RlY2wuYwkod29ya2luZyBjb3B5KQoqKioqKioq KioqKioqKiogZ2V0X3Byb2NfbmFtZSAoY29uc3QgY2hhciAqbmFtZSwgZ2Zj X3N5bQoqKiogOTAzLDkwOSAqKioqCiAgCiAgICBzeW0gPSAqcmVzdWx0Owog IAohICAgaWYgKHN5bSAmJiAhc3ltLT5nZmNfbmV3ICYmIGdmY19jdXJyZW50 X3N0YXRlICgpICE9IENPTVBfSU5URVJGQUNFKQogICAgICB7CiAgICAgICAg LyogVHJhcCBhbm90aGVyIGVuY29tcGFzc2VkIHByb2NlZHVyZSB3aXRoIHRo ZSBzYW1lIG5hbWUuICBBbGwKICAJIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG5l Y2Vzc2FyeSB0byBhdm9pZCBwaWNraW5nIHVwIGFuIGVudHJ5Ci0tLSA5MDMs OTM3IC0tLS0KICAKICAgIHN5bSA9ICpyZXN1bHQ7CiAgCiEgICBpZiAoc3lt LT5hdHRyLm1vZHVsZV9wcm9jZWR1cmUKISAgICAgICAmJiBzeW0tPmF0dHIu aWZfc291cmNlID09IElGU1JDX0lGQk9EWSkKISAgICAgewohICAgICAgIC8q IENyZWF0ZSBhIHBhcnRpYWxseSBwb3B1bGF0ZWQgaW50ZXJmYWNlIHN5bWJv bCB0byBjYXJyeSB0aGUKISAJIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgcHJv Y2VkdXJlIGFuZCB0aGUgcmVzdWx0LiAgKi8KISAgICAgICBzeW0tPnRzLmlu dGVyZmFjZSA9IGdmY19uZXdfc3ltYm9sIChuYW1lLCBzeW0tPm5zKTsKISAg ICAgICBnZmNfYWRkX3R5cGUgKHN5bS0+dHMuaW50ZXJmYWNlLCAmKHN5bS0+ dHMpLAohIAkJICAgICZnZmNfY3VycmVudF9sb2N1cyk7CiEgICAgICAgZ2Zj X2NvcHlfYXR0ciAoJnN5bS0+dHMuaW50ZXJmYWNlLT5hdHRyLCAmc3ltLT5h dHRyLCBOVUxMKTsKISAgICAgICBpZiAoc3ltLT5hdHRyLmRpbWVuc2lvbikK ISAJc3ltLT50cy5pbnRlcmZhY2UtPmFzID0gZ2ZjX2NvcHlfYXJyYXlfc3Bl YyAoc3ltLT5hcyk7CiEgCiEgICAgICAgLyogSWRlYWxseSwgYXQgdGhpcyBw b2ludCwgYSBjb3B5IHdvdWxkIGJlIG1hZGUgb2YgdGhlIGZvcm1hbAohIAkg YXJndW1lbnRzIGFuZCB0aGVpciBuYW1lc3BhY2UuIEhvd2V2ZXIsIHRoaXMg ZG9lcyBub3QgYXBwZWFyCiEgCSB0byBiZSBuZWNlc3NhcnksIGFsYmVpdCBh dCB0aGUgZXhwZW5zZSBvZiBub3QgYmVpbmcgYWJsZSB0bwohIAkgdXNlIGdm Y19jb21wYXJlX2ludGVyZmFjZXMgZGlyZWN0bHkuICAqLwohIAohICAgICAg IGlmIChzeW0tPnJlc3VsdCAmJiBzeW0tPnJlc3VsdCAhPSBzeW0pCiEgCXsK ISAJICBzeW0tPnRzLmludGVyZmFjZS0+cmVzdWx0ID0gc3ltLT5yZXN1bHQ7 CiEgCSAgc3ltLT5yZXN1bHQgPSBOVUxMOwohIAl9CiEgICAgICAgZWxzZSBp ZiAoc3ltLT5yZXN1bHQpCiEgCXsKISAJICBzeW0tPnRzLmludGVyZmFjZS0+ cmVzdWx0ID0gc3ltLT50cy5pbnRlcmZhY2U7CiEgCX0KISAgICAgfQohICAg ZWxzZSBpZiAoc3ltICYmICFzeW0tPmdmY19uZXcKISAJICAgJiYgZ2ZjX2N1 cnJlbnRfc3RhdGUgKCkgIT0gQ09NUF9JTlRFUkZBQ0UpCiAgICAgIHsKICAg ICAgICAvKiBUcmFwIGFub3RoZXIgZW5jb21wYXNzZWQgcHJvY2VkdXJlIHdp dGggdGhlIHNhbWUgbmFtZS4gIEFsbAogIAkgdGhlc2UgY29uZGl0aW9ucyBh cmUgbmVjZXNzYXJ5IHRvIGF2b2lkIHBpY2tpbmcgdXAgYW4gZW50cnkKKioq KioqKioqKioqKioqIHZhcmlhYmxlX2RlY2wgKGludCBlbGVtKQoqKiogMTkx OCwxOTIzICoqKioKLS0tIDE5NDYsMTk2OCAtLS0tCiAgCX0KICAgICAgfQog IAorICAgLyogVGhlIGR1bW15IGFyZ3VtZW50cyBhbmQgcmVzdWx0IG9mIHRo ZSBhYnJldmlhdGVkIGZvcm0gb2YgTU9EVUxFCisgICAgICBQUk9DRURVUkVz LCB1c2VkIGluIFNVQk1PRFVMRVMgc2hvdWxkIG5vdCBiZSByZWRlZmluZWQu ICAqLworICAgaWYgKGdmY19jdXJyZW50X25zLT5wcm9jX25hbWUKKyAgICAg ICAmJiBnZmNfY3VycmVudF9ucy0+cHJvY19uYW1lLT5hYnJfbW9kcHJvY19k ZWNsKQorICAgICB7CisgICAgICAgZ2ZjX2ZpbmRfc3ltYm9sIChuYW1lLCBn ZmNfY3VycmVudF9ucywgMSwgJnN5bSk7CisgICAgICAgaWYgKHN5bSAhPSBO VUxMICYmIChzeW0tPmF0dHIuZHVtbXkgfHwgc3ltLT5hdHRyLnJlc3VsdCkp CisgCXsKKyAJICBtID0gTUFUQ0hfRVJST1I7CisgCSAgZ2ZjX2Vycm9yICgi JyVzJyBhdCAlQyBpcyBhIHJlZGVmaW5pdGlvbiBvZiB0aGUgZGVjbGFyYXRp b24gIgorIAkJICAgICAiaW4gdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJmYWNl IGZvciBNT0RVTEUgIgorIAkJICAgICAiUFJPQ0VEVVJFICclcyciLCBzeW0t Pm5hbWUsCisgCQkgICAgIGdmY19jdXJyZW50X25zLT5wcm9jX25hbWUtPm5h bWUpOworIAkgIGdvdG8gY2xlYW51cDsKKyAJfQorICAgICB9CisgCiAgICAv KiAgSWYgdGhpcyBzeW1ib2wgaGFzIGFscmVhZHkgc2hvd24gdXAgaW4gYSBD cmF5IFBvaW50ZXIgZGVjbGFyYXRpb24sCiAgICAgICAgYW5kIHRoaXMgaXMg bm90IGEgY29tcG9uZW50IGRlY2xhcmF0aW9uLAogICAgICAgIHRoZW4gd2Ug d2FudCB0byBzZXQgdGhlIHR5cGUgJiBiYWlsIG91dC4gICovCioqKioqKioq KioqKioqKiBnZmNfbWF0Y2hfaW1wb3J0ICh2b2lkKQoqKiogMzI2MiwzMjY3 ICoqKioKLS0tIDMzMDcsMzMxOSAtLS0tCiAgICAgICAgcmV0dXJuIE1BVENI X0VSUk9SOwogICAgICB9CiAgCisgICBpZiAoZ2ZjX2N1cnJlbnRfbnMtPnBy b2NfbmFtZS0+YXR0ci5tb2R1bGVfcHJvY2VkdXJlKQorICAgICB7CisgICAg ICAgZ2ZjX2Vycm9yICgiRjIwMDg6IEMxMjEwIElNUE9SVCBzdGF0ZW1lbnQg YXQgJUMgaXMgbm90IHBlcm1pdHRlZCAiCisgCQkgImluIGEgbW9kdWxlIHBy b2NlZHVyZSBpbnRlcmZhY2UgYm9keSIpOworICAgICAgIHJldHVybiBNQVRD SF9FUlJPUjsKKyAgICAgfQorIAogICAgaWYgKCFnZmNfbm90aWZ5X3N0ZCAo R0ZDX1NURF9GMjAwMywgIklNUE9SVCBzdGF0ZW1lbnQgYXQgJUMiKSkKICAg ICAgcmV0dXJuIE1BVENIX0VSUk9SOwogIAoqKioqKioqKioqKioqKiogbWF0 Y2hfYXR0cl9zcGVjICh2b2lkKQoqKiogMzkyNSwzOTMxICoqKioKICAgICAg fQogIAogICAgLyogU2luY2UgRm9ydHJhbiAyMDA4IG1vZHVsZSB2YXJpYWJs ZXMgaW1wbGljaXRseSBoYXZlIHRoZSBTQVZFIGF0dHJpYnV0ZS4gICovCiEg ICBpZiAoZ2ZjX2N1cnJlbnRfc3RhdGUgKCkgPT0gQ09NUF9NT0RVTEUgJiYg IWN1cnJlbnRfYXR0ci5zYXZlCiAgICAgICAgJiYgKGdmY19vcHRpb24uYWxs b3dfc3RkICYgR0ZDX1NURF9GMjAwOCkgIT0gMCkKICAgICAgY3VycmVudF9h dHRyLnNhdmUgPSBTQVZFX0lNUExJQ0lUOwogIAotLS0gMzk3NywzOTg1IC0t LS0KICAgICAgfQogIAogICAgLyogU2luY2UgRm9ydHJhbiAyMDA4IG1vZHVs ZSB2YXJpYWJsZXMgaW1wbGljaXRseSBoYXZlIHRoZSBTQVZFIGF0dHJpYnV0 ZS4gICovCiEgICBpZiAoKGdmY19jdXJyZW50X3N0YXRlICgpID09IENPTVBf TU9EVUxFCiEgICAgICAgIHx8IGdmY19jdXJyZW50X3N0YXRlICgpID09IENP TVBfU1VCTU9EVUxFKQohICAgICAgICYmICFjdXJyZW50X2F0dHIuc2F2ZQog ICAgICAgICYmIChnZmNfb3B0aW9uLmFsbG93X3N0ZCAmIEdGQ19TVERfRjIw MDgpICE9IDApCiAgICAgIGN1cnJlbnRfYXR0ci5zYXZlID0gU0FWRV9JTVBM SUNJVDsKICAKKioqKioqKioqKioqKioqIGdmY19tYXRjaF9wcmVmaXggKGdm Y190eXBlc3BlYyAqdHMpCioqKiA0NTEzLDQ1MTggKioqKgotLS0gNDU2Nyw0 NTg4IC0tLS0KICAKICAgIC8qIEF0IHRoaXMgcG9pbnQsIHRoZSBuZXh0IGl0 ZW0gaXMgbm90IGEgcHJlZml4LiAgKi8KICAgIGdjY19hc3NlcnQgKGdmY19t YXRjaGluZ19wcmVmaXgpOworIAorICAgLyogTU9EVUxFIHNob3VsZCBiZSB0 aGUgbGFzdCBwcmVmaXggYmVmb3JlIEZVTkNUSU9OIG9yIFNVQlJPVVRJTkUu CisgICAgICBTaW5jZSB0aGlzIGlzIGEgcHJlZml4IGxpa2UgUFVSRSwgRUxF TUVOVEFMLCBldGMuLCBoYXZpbmcgYQorICAgICAgY29ycmVzcG9uZGluZyBh dHRyaWJ1dGUgc2VlbXMgbmF0dXJhbCBhbmQgZGlzdGluZ3Vpc2hlcyB0aGVz ZQorICAgICAgcHJvY2VkdXJlcyBmcm9tIHByb2NlZHVyZSB0eXBlcyBvZiBQ Uk9DX01PRFVMRSwgd2hpY2ggdGhlc2UgYXJlCisgICAgICBhcyB3ZWxsLiAg Ki8KKyAgIGlmICgoZ2ZjX2N1cnJlbnRfc3RhdGUgKCkgPT0gQ09NUF9JTlRF UkZBQ0UKKyAgICAgICAgfHwgZ2ZjX2N1cnJlbnRfc3RhdGUgKCkgPT0gQ09N UF9DT05UQUlOUykKKyAgICAgICAmJiBnZmNfbWF0Y2ggKCJtb2R1bGUlICIp ID09IE1BVENIX1lFUykKKyAgICAgeworICAgICAgIGlmICghZ2ZjX25vdGlm eV9zdGQgKEdGQ19TVERfRjIwMDgsICJNT0RVTEUgcHJlZml4IGF0ICVDIikp CisgCWdvdG8gZXJyb3I7CisgICAgICAgZWxzZQorIAljdXJyZW50X2F0dHIu bW9kdWxlX3Byb2NlZHVyZSA9IDE7CisgICAgIH0KKyAKICAgIGdmY19tYXRj aGluZ19wcmVmaXggPSBmYWxzZTsKICAgIHJldHVybiBNQVRDSF9ZRVM7CiAg CioqKioqKioqKioqKioqKiBnZmNfbWF0Y2hfZm9ybWFsX2FyZ2xpc3QgKGdm Y19zeW1ib2wgKnByCioqKiA0NTUwLDQ1NTggKioqKgotLS0gNDYyMCw0NjQz IC0tLS0KICAgIGNoYXIgbmFtZVtHRkNfTUFYX1NZTUJPTF9MRU4gKyAxXTsK ICAgIGdmY19zeW1ib2wgKnN5bTsKICAgIG1hdGNoIG07CisgICBnZmNfZm9y bWFsX2FyZ2xpc3QgKmZvcm1hbCA9IE5VTEw7CiAgCiAgICBoZWFkID0gdGFp bCA9IE5VTEw7CiAgCisgICAvKiBLZWVwIHRoZSBpbnRlcmZhY2UgZm9ybWFs IGFyZ3VtZW50IGxpc3QgYW5kIG51bGwgaXQgc28gdGhhdCB0aGUKKyAgICAg IG1hdGNoaW5nIGZvciB0aGUgbmV3IGRlY2xhcmF0aW9uIGNhbiBiZSBkb25l LiAgVGhlIG51bWJlcnMgYW5kCisgICAgICBuYW1lcyBvZiB0aGUgYXJndW1l bnRzIGFyZSBjaGVja2VkIGhlcmUuIFRoZSBpbnRlcmZhY2UgZm9ybWFsCisg ICAgICBhcmd1bWVudHMgYXJlIHJldGFpbmVkIGluIGZvcm1hbF9hcmdsaXN0 IGFuZCB0aGUgY2hhcmFjdGVyaXN0aWNzCisgICAgICBhcmUgY29tcGFyZWQg aW4gcmVzb2x2ZS5jKHJlc29sdmVfZmxfcHJvY2VkdXJlKS4gIFNlZSB0aGUg cmVtYXJrCisgICAgICBpbiBnZXRfcHJvY19uYW1lIGFib3V0IHRoZSBldmVu dHVhbCBuZWVkIHRvIGNvcHkgdGhlIGZvcm1hbF9hcmdsaXN0CisgICAgICBh bmQgcG9wdWxhdGUgdGhlIGZvcm1hbCBuYW1lc3BhY2Ugb2YgdGhlIGludGVy ZmFjZSBzeW1ib2wuICAqLworICAgaWYgKHByb2duYW1lLT5hdHRyLm1vZHVs ZV9wcm9jZWR1cmUKKyAgICAgICAmJiBwcm9nbmFtZS0+YXR0ci5ob3N0X2Fz c29jKQorICAgICB7CisgICAgICAgZm9ybWFsID0gcHJvZ25hbWUtPmZvcm1h bDsKKyAgICAgICBwcm9nbmFtZS0+Zm9ybWFsID0gTlVMTDsKKyAgICAgfQor IAogICAgaWYgKGdmY19tYXRjaF9jaGFyICgnKCcpICE9IE1BVENIX1lFUykK ICAgICAgewogICAgICAgIGlmIChudWxsX2ZsYWcpCioqKioqKioqKioqKioq KiBvazoKKioqIDQ2NTgsNDY2MyAqKioqCi0tLSA0NzQzLDQ3NjYgLS0tLQog ICAgICAgIGdvdG8gY2xlYW51cDsKICAgICAgfQogIAorICAgaWYgKGZvcm1h bCkKKyAgICAgeworICAgICAgIGZvciAocCA9IGZvcm1hbCwgcSA9IGhlYWQ7 IHAgJiYgcTsgcCA9IHAtPm5leHQsIHEgPSBxLT5uZXh0KQorIAl7CisgCSAg aWYgKChwLT5uZXh0ICE9IE5VTEwgJiYgcS0+bmV4dCA9PSBOVUxMKQorIAkg ICAgICB8fCAocC0+bmV4dCA9PSBOVUxMICYmIHEtPm5leHQgIT0gTlVMTCkp CisgCSAgICBnZmNfZXJyb3Jfbm93ICgiTWlzbWF0Y2ggaW4gbnVtYmVyIG9m IE1PRFVMRSBQUk9DRURVUkUgIgorIAkJICAgICAgICAgICAiZm9ybWFsIGFy Z3VtZW50cyBhdCAlQyIpOworIAkgIGVsc2UgaWYgKChwLT5zeW0gPT0gTlVM TCAmJiBxLT5zeW0gPT0gTlVMTCkKKyAJCSAgICB8fCBzdHJjbXAgKHAtPnN5 bS0+bmFtZSwgcS0+c3ltLT5uYW1lKSA9PSAwKQorIAkgICAgY29udGludWU7 CisgCSAgZWxzZQorIAkgICAgZ2ZjX2Vycm9yX25vdyAoIk1pc21hdGNoIGlu IE1PRFVMRSBQUk9DRURVUkUgZm9ybWFsICIKKyAJCQkgICAiYXJndW1lbnQg bmFtZXMgKCVzLyVzKSBhdCAlQyIsCisgCQkJICAgcC0+c3ltLT5uYW1lLCBx LT5zeW0tPm5hbWUpOworIAl9CisgICAgIH0KKyAKICAgIHJldHVybiBNQVRD SF9ZRVM7CiAgCiAgY2xlYW51cDoKKioqKioqKioqKioqKioqIGdmY19tYXRj aF9wcm9jZWR1cmUgKHZvaWQpCioqKiA1MjcxLDUyNzYgKioqKgotLS0gNTM3 NCw1MzgwIC0tLS0KICAgICAgY2FzZSBDT01QX05PTkU6CiAgICAgIGNhc2Ug Q09NUF9QUk9HUkFNOgogICAgICBjYXNlIENPTVBfTU9EVUxFOgorICAgICBj YXNlIENPTVBfU1VCTU9EVUxFOgogICAgICBjYXNlIENPTVBfU1VCUk9VVElO RToKICAgICAgY2FzZSBDT01QX0ZVTkNUSU9OOgogICAgICBjYXNlIENPTVBf QkxPQ0s6CioqKioqKioqKioqKioqKiBkb193YXJuX2ludHJpbnNpY19zaGFk b3cgKGNvbnN0IGdmY19zeW1iCioqKiA1MzA5LDUzMTUgKioqKgogICAgYm9v bCBpbl9tb2R1bGU7CiAgCiAgICBpbl9tb2R1bGUgPSAoZ2ZjX3N0YXRlX3N0 YWNrLT5wcmV2aW91cwohIAkgICAgICAgJiYgZ2ZjX3N0YXRlX3N0YWNrLT5w cmV2aW91cy0+c3RhdGUgPT0gQ09NUF9NT0RVTEUpOwogIAogICAgZ2ZjX3dh cm5faW50cmluc2ljX3NoYWRvdyAoc3ltLCBpbl9tb2R1bGUsIGZ1bmMpOwog IH0KLS0tIDU0MTMsNTQyMCAtLS0tCiAgICBib29sIGluX21vZHVsZTsKICAK ICAgIGluX21vZHVsZSA9IChnZmNfc3RhdGVfc3RhY2stPnByZXZpb3VzCiEg CSAgICAgICAmJiAoZ2ZjX3N0YXRlX3N0YWNrLT5wcmV2aW91cy0+c3RhdGUg PT0gQ09NUF9NT0RVTEUKISAJCSAgIHx8IGdmY19zdGF0ZV9zdGFjay0+cHJl dmlvdXMtPnN0YXRlID09IENPTVBfU1VCTU9EVUxFKSk7CiAgCiAgICBnZmNf d2Fybl9pbnRyaW5zaWNfc2hhZG93IChzeW0sIGluX21vZHVsZSwgZnVuYyk7 CiAgfQoqKioqKioqKioqKioqKiogZ2ZjX21hdGNoX2Z1bmN0aW9uX2RlY2wg KHZvaWQpCioqKiA1MzQ4LDUzNTkgKioqKgotLS0gNTQ1Myw1NDY4IC0tLS0K ICAgICAgICBnZmNfY3VycmVudF9sb2N1cyA9IG9sZF9sb2M7CiAgICAgICAg cmV0dXJuIE1BVENIX05POwogICAgICB9CisgCiAgICBpZiAoZ2V0X3Byb2Nf bmFtZSAobmFtZSwgJnN5bSwgZmFsc2UpKQogICAgICByZXR1cm4gTUFUQ0hf RVJST1I7CiAgCiAgICBpZiAoYWRkX2hpZGRlbl9wcm9jcHRyX3Jlc3VsdCAo c3ltKSkKICAgICAgc3ltID0gc3ltLT5yZXN1bHQ7CiAgCisgICBpZiAoY3Vy cmVudF9hdHRyLm1vZHVsZV9wcm9jZWR1cmUpCisgICAgIHN5bS0+YXR0ci5t b2R1bGVfcHJvY2VkdXJlID0gMTsKKyAKICAgIGdmY19uZXdfYmxvY2sgPSBz eW07CiAgCiAgICBtID0gZ2ZjX21hdGNoX2Zvcm1hbF9hcmdsaXN0IChzeW0s IDAsIDApOwoqKioqKioqKioqKioqKiogZ2ZjX21hdGNoX2VudHJ5ICh2b2lk KQoqKiogNTU0Nyw1NTUyICoqKioKLS0tIDU2NTYsNTY2NCAtLS0tCiAgCSAg Y2FzZSBDT01QX01PRFVMRToKICAJICAgIGdmY19lcnJvciAoIkVOVFJZIHN0 YXRlbWVudCBhdCAlQyBjYW5ub3QgYXBwZWFyIHdpdGhpbiBhIE1PRFVMRSIp OwogIAkgICAgYnJlYWs7CisgCSAgY2FzZSBDT01QX1NVQk1PRFVMRToKKyAJ ICAgIGdmY19lcnJvciAoIkVOVFJZIHN0YXRlbWVudCBhdCAlQyBjYW5ub3Qg YXBwZWFyIHdpdGhpbiBhIFNVQk1PRFVMRSIpOworIAkgICAgYnJlYWs7CiAg CSAgY2FzZSBDT01QX0JMT0NLX0RBVEE6CiAgCSAgICBnZmNfZXJyb3IgKCJF TlRSWSBzdGF0ZW1lbnQgYXQgJUMgY2Fubm90IGFwcGVhciB3aXRoaW4gIgog IAkJICAgICAgICJhIEJMT0NLIERBVEEiKTsKKioqKioqKioqKioqKioqIGdm Y19tYXRjaF9zdWJyb3V0aW5lICh2b2lkKQoqKiogNTc5MSw1Nzk2ICoqKioK LS0tIDU5MDMsNTkxMSAtLS0tCiAgICAgICB0aGUgc3ltYm9sIGV4aXN0ZWQg YmVmb3JlLiAgKi8KICAgIHN5bS0+ZGVjbGFyZWRfYXQgPSBnZmNfY3VycmVu dF9sb2N1czsKICAKKyAgIGlmIChjdXJyZW50X2F0dHIubW9kdWxlX3Byb2Nl ZHVyZSkKKyAgICAgc3ltLT5hdHRyLm1vZHVsZV9wcm9jZWR1cmUgPSAxOwor IAogICAgaWYgKGFkZF9oaWRkZW5fcHJvY3B0cl9yZXN1bHQgKHN5bSkpCiAg ICAgIHN5bSA9IHN5bS0+cmVzdWx0OwogIAoqKioqKioqKioqKioqKiogZ2Zj X21hdGNoX2VuZCAoZ2ZjX3N0YXRlbWVudCAqc3QpCioqKiA2MTE0LDYxMTkg KioqKgotLS0gNjIyOSw2MjM1IC0tLS0KICAgIG1hdGNoIG07CiAgICBnZmNf bmFtZXNwYWNlICpwYXJlbnRfbnMsICpucywgKnByZXZfbnM7CiAgICBnZmNf bmFtZXNwYWNlICoqbnNwOworICAgYm9vbCBhYnJldmlhdGVkX21vZHByb2Nf ZGVjbDsKICAKICAgIG9sZF9sb2MgPSBnZmNfY3VycmVudF9sb2N1czsKICAg IGlmIChnZmNfbWF0Y2ggKCJlbmQiKSAhPSBNQVRDSF9ZRVMpCioqKioqKioq KioqKioqKiBnZmNfbWF0Y2hfZW5kIChnZmNfc3RhdGVtZW50ICpzdCkKKioq IDYxNDIsNjE0NyAqKioqCi0tLSA2MjU4LDYyNjcgLS0tLQogICAgICAgIGJy ZWFrOwogICAgICB9CiAgCisgICBhYnJldmlhdGVkX21vZHByb2NfZGVjbAor IAk9IGdmY19jdXJyZW50X2Jsb2NrICgpCisgCSAgJiYgZ2ZjX2N1cnJlbnRf YmxvY2sgKCktPmFicl9tb2Rwcm9jX2RlY2w7CisgCiAgICBzd2l0Y2ggKHN0 YXRlKQogICAgICB7CiAgICAgIGNhc2UgQ09NUF9OT05FOgoqKioqKioqKioq KioqKiogZ2ZjX21hdGNoX2VuZCAoZ2ZjX3N0YXRlbWVudCAqc3QpCioqKiA2 MTUzLDYxNjUgKioqKgotLS0gNjI3Myw2MjkxIC0tLS0KICAKICAgICAgY2Fz ZSBDT01QX1NVQlJPVVRJTkU6CiAgICAgICAgKnN0ID0gU1RfRU5EX1NVQlJP VVRJTkU7CisgICAgICAgaWYgKCFhYnJldmlhdGVkX21vZHByb2NfZGVjbCkK ICAJdGFyZ2V0ID0gIiBzdWJyb3V0aW5lIjsKKyAgICAgICBlbHNlCisgCXRh cmdldCA9ICIgcHJvY2VkdXJlIjsKICAgICAgICBlb3Nfb2sgPSAhY29udGFp bmVkX3Byb2NlZHVyZSAoKTsKICAgICAgICBicmVhazsKICAKICAgICAgY2Fz ZSBDT01QX0ZVTkNUSU9OOgogICAgICAgICpzdCA9IFNUX0VORF9GVU5DVElP TjsKKyAgICAgICBpZiAoIWFicmV2aWF0ZWRfbW9kcHJvY19kZWNsKQogIAl0 YXJnZXQgPSAiIGZ1bmN0aW9uIjsKKyAgICAgICBlbHNlCisgCXRhcmdldCA9 ICIgcHJvY2VkdXJlIjsKICAgICAgICBlb3Nfb2sgPSAhY29udGFpbmVkX3By b2NlZHVyZSAoKTsKICAgICAgICBicmVhazsKICAKKioqKioqKioqKioqKioq IGdmY19tYXRjaF9lbmQgKGdmY19zdGF0ZW1lbnQgKnN0KQoqKiogNjE3NSw2 MTgwICoqKioKLS0tIDYzMDEsNjMxMiAtLS0tCiAgICAgICAgZW9zX29rID0g MTsKICAgICAgICBicmVhazsKICAKKyAgICAgY2FzZSBDT01QX1NVQk1PRFVM RToKKyAgICAgICAqc3QgPSBTVF9FTkRfU1VCTU9EVUxFOworICAgICAgIHRh cmdldCA9ICIgc3VibW9kdWxlIjsKKyAgICAgICBlb3Nfb2sgPSAxOworICAg ICAgIGJyZWFrOworIAogICAgICBjYXNlIENPTVBfSU5URVJGQUNFOgogICAg ICAgICpzdCA9IFNUX0VORF9JTlRFUkZBQ0U7CiAgICAgICAgdGFyZ2V0ID0g IiBpbnRlcmZhY2UiOwoqKioqKioqKioqKioqKiogZ2ZjX21hdGNoX2VuZCAo Z2ZjX3N0YXRlbWVudCAqc3QpCioqKiA2MjU5LDYyNjUgKioqKgogIAl7CiAg CSAgaWYgKCFnZmNfbm90aWZ5X3N0ZCAoR0ZDX1NURF9GMjAwOCwgIkVORCBz dGF0ZW1lbnQgIgogIAkJCSAgICAgICAiaW5zdGVhZCBvZiAlcyBzdGF0ZW1l bnQgYXQgJUwiLCAKISAJCQkgICAgICAgZ2ZjX2FzY2lpX3N0YXRlbWVudCgq c3QpLCAmb2xkX2xvYykpCiAgCSAgICBnb3RvIGNsZWFudXA7CiAgCX0KICAg ICAgICBlbHNlIGlmICghZW9zX29rKQotLS0gNjM5MSw2Mzk4IC0tLS0KICAJ ewogIAkgIGlmICghZ2ZjX25vdGlmeV9zdGQgKEdGQ19TVERfRjIwMDgsICJF TkQgc3RhdGVtZW50ICIKICAJCQkgICAgICAgImluc3RlYWQgb2YgJXMgc3Rh dGVtZW50IGF0ICVMIiwKISAJCQkgICAgICAgYWJyZXZpYXRlZF9tb2Rwcm9j X2RlY2wgPyAiRU5EIFBST0NFRFVSRSIKISAJCQkgICAgICAgOiBnZmNfYXNj aWlfc3RhdGVtZW50KCpzdCksICZvbGRfbG9jKSkKICAJICAgIGdvdG8gY2xl YW51cDsKICAJfQogICAgICAgIGVsc2UgaWYgKCFlb3Nfb2spCioqKioqKioq KioqKioqKiBnZmNfbWF0Y2hfZW5kIChnZmNfc3RhdGVtZW50ICpzdCkKKioq IDYyNzYsNjI4MyAqKioqCiAgICAvKiBWZXJpZnkgdGhhdCB3ZSd2ZSBnb3Qg dGhlIHNvcnQgb2YgZW5kLWJsb2NrIHRoYXQgd2UncmUgZXhwZWN0aW5nLiAg Ki8KICAgIGlmIChnZmNfbWF0Y2ggKHRhcmdldCkgIT0gTUFUQ0hfWUVTKQog ICAgICB7CiEgICAgICAgZ2ZjX2Vycm9yICgiRXhwZWN0aW5nICVzIHN0YXRl bWVudCBhdCAlTCIsIGdmY19hc2NpaV9zdGF0ZW1lbnQgKCpzdCksCiEgCQkg Jm9sZF9sb2MpOwogICAgICAgIGdvdG8gY2xlYW51cDsKICAgICAgfQogIAot LS0gNjQwOSw2NDE2IC0tLS0KICAgIC8qIFZlcmlmeSB0aGF0IHdlJ3ZlIGdv dCB0aGUgc29ydCBvZiBlbmQtYmxvY2sgdGhhdCB3ZSdyZSBleHBlY3Rpbmcu ICAqLwogICAgaWYgKGdmY19tYXRjaCAodGFyZ2V0KSAhPSBNQVRDSF9ZRVMp CiAgICAgIHsKISAgICAgICBnZmNfZXJyb3IgKCJFeHBlY3RpbmcgJXMgc3Rh dGVtZW50IGF0ICVMIiwgYWJyZXZpYXRlZF9tb2Rwcm9jX2RlY2wKISAJCSA/ ICJFTkQgUFJPQ0VEVVJFIiA6IGdmY19hc2NpaV9zdGF0ZW1lbnQoKnN0KSwg Jm9sZF9sb2MpOwogICAgICAgIGdvdG8gY2xlYW51cDsKICAgICAgfQogIAoq KioqKioqKioqKioqKiogc3ludGF4OgoqKiogNzQxNyw3NDIyICoqKioKLS0t IDc1NTAsNzY0OCAtLS0tCiAgfQogIAogIAorIC8qIE1hdGNoIGEgbW9kdWxl IHByb2NlZHVyZSBzdGF0ZW1lbnQgaW4gYSBzdWJtb2R1bGUuICAqLworIAor IG1hdGNoCisgZ2ZjX21hdGNoX3N1Ym1vZF9wcm9jICh2b2lkKQorIHsKKyAg IGNoYXIgbmFtZVtHRkNfTUFYX1NZTUJPTF9MRU4gKyAxXTsKKyAgIGdmY19z eW1ib2wgKnN5bSwgKmZzeW07CisgICBtYXRjaCBtOworICAgZ2ZjX2Zvcm1h bF9hcmdsaXN0ICpmb3JtYWwsICpoZWFkLCAqdGFpbDsKKyAKKyAgIGlmIChn ZmNfY3VycmVudF9zdGF0ZSAoKSAhPSBDT01QX0NPTlRBSU5TCisgICAgICAg fHwgIShnZmNfc3RhdGVfc3RhY2stPnByZXZpb3VzCisgCSAgICYmIGdmY19z dGF0ZV9zdGFjay0+cHJldmlvdXMtPnN0YXRlID09IENPTVBfU1VCTU9EVUxF KSkKKyAgICAgcmV0dXJuIE1BVENIX05POworIAorICAgbSA9IGdmY19tYXRj aCAoIiBtb2R1bGUlIHByb2NlZHVyZSUgJW4iLCBuYW1lKTsKKyAgIGlmICht ICE9IE1BVENIX1lFUykKKyAgICAgcmV0dXJuIG07CisgCisgICBpZiAoIWdm Y19ub3RpZnlfc3RkIChHRkNfU1REX0YyMDA4LCAiTU9EVUxFIFBST0NFRFVS RSBkZWNsYXJhdGlvbiAiCisgCQkJCSAgICAgICJhdCAlQyIpKQorICAgICBy ZXR1cm4gTUFUQ0hfRVJST1I7CisgCisgICBpZiAoZ2V0X3Byb2NfbmFtZSAo bmFtZSwgJnN5bSwgZmFsc2UpKQorICAgICByZXR1cm4gTUFUQ0hfRVJST1I7 CisgCisgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzdWx0IGZpZWxkIGlz IGFwcHJvcHJpYXRlbHkgZmlsbGVkLCBldmVuIHRob3VnaAorICAgICAgdGhl IHJlc3VsdCBzeW1ib2wgd2lsbCBiZSByZXBsYWNlZCBsYXRlciBvbi4gICov CisgICBpZiAoc3ltLT50cy5pbnRlcmZhY2UtPmF0dHIuZnVuY3Rpb24pCisg ICAgIHsKKyAgICAgICBpZiAoc3ltLT50cy5pbnRlcmZhY2UtPnJlc3VsdAor IAkgICYmIHN5bS0+dHMuaW50ZXJmYWNlLT5yZXN1bHQgIT0gc3ltLT50cy5p bnRlcmZhY2UpCisgCXN5bS0+cmVzdWx0PSBzeW0tPnRzLmludGVyZmFjZS0+ cmVzdWx0OworICAgICAgIGVsc2UKKyAJc3ltLT5yZXN1bHQgPSBzeW07Cisg ICAgIH0KKyAKKyAgIC8qIFNldCBkZWNsYXJlZF9hdCBhcyBpdCBtaWdodCBw b2ludCB0bywgZS5nLiwgYSBQVUJMSUMgc3RhdGVtZW50LCBpZgorICAgICAg dGhlIHN5bWJvbCBleGlzdGVkIGJlZm9yZS4gICovCisgICBzeW0tPmRlY2xh cmVkX2F0ID0gZ2ZjX2N1cnJlbnRfbG9jdXM7CisgCisgICBpZiAoIXN5bS0+ YXR0ci5tb2R1bGVfcHJvY2VkdXJlKQorICAgICByZXR1cm4gTUFUQ0hfRVJS T1I7CisgCisgICAvKiBTaWduYWwgbWF0Y2hfZW5kIHRvIGV4cGVjdCAiZW5k IHByb2NlZHVyZSIuICAqLworICAgc3ltLT5hYnJfbW9kcHJvY19kZWNsID0g MTsKKyAKKyAgIC8qIENoYW5nZSBmcm9tIElGU1JDX0lGQk9EWSBjb21pbmcg ZnJvbSB0aGUgaW50ZXJmYWNlIGRlY2xhcmF0aW9uLiAgKi8KKyAgIHN5bS0+ YXR0ci5pZl9zb3VyY2UgPSBJRlNSQ19ERUNMOworIAorICAgZ2ZjX25ld19i bG9jayA9IHN5bTsKKyAKKyAgIC8qIE1ha2UgYSBuZXcgZm9ybWFsIGFyZ2xp c3Qgd2l0aCB0aGUgc3ltYm9scyBpbiB0aGUgcHJvY2VkdXJlCisgICAgICAg bmFtZXNwYWNlLiAgKi8KKyAgIGhlYWQgPSB0YWlsID0gTlVMTDsKKyAgIGZv ciAoZm9ybWFsID0gc3ltLT5mb3JtYWw7IGZvcm1hbCAmJiBmb3JtYWwtPnN5 bTsgZm9ybWFsID0gZm9ybWFsLT5uZXh0KQorICAgICB7CisgICAgICAgaWYg KGZvcm1hbCA9PSBzeW0tPmZvcm1hbCkKKyAJaGVhZCA9IHRhaWwgPSBnZmNf Z2V0X2Zvcm1hbF9hcmdsaXN0ICgpOworICAgICAgIGVsc2UKKyAJeworIAkg IHRhaWwtPm5leHQgPSBnZmNfZ2V0X2Zvcm1hbF9hcmdsaXN0ICgpOworIAkg IHRhaWwgPSB0YWlsLT5uZXh0OworIAl9CisgCisgICAgICAgaWYgKGdmY19j b3B5X2R1bW15X3N5bSAoJmZzeW0sIGZvcm1hbC0+c3ltLCAwKSkKKyAJZ290 byBjbGVhbnVwOworIAorICAgICAgIHRhaWwtPnN5bSA9IGZzeW07CisgICAg ICAgZ2ZjX3NldF9zeW1fcmVmZXJlbmNlZCAoZnN5bSk7CisgICAgIH0KKyAK KyAgIC8qIFRoZSBkdW1teSBzeW1ib2xzIGdldCBjbGVhbmVkIHVwLCB3aGVu IHRoZSBmb3JtYWxfbmFtZXNwYWNlIG9mIHRoZQorICAgICAgaW50ZXJmYWNl IGRlY2xhcmF0aW9uIGlzIGNsZWFyZWQuICBUaGlzIGFsbG93cyB1cyB0byBh ZGQgdGhlCisgICAgICBleHBsaWNpdCBpbnRlcmZhY2UgYXMgaXMgZG9uZSBm b3Igb3RoZXIgdHlwZSBvZiBwcm9jZWR1cmUuICAqLworICAgaWYgKCFnZmNf YWRkX2V4cGxpY2l0X2ludGVyZmFjZSAoc3ltLCBJRlNSQ19ERUNMLCBoZWFk LAorIAkJCQkgICAmZ2ZjX2N1cnJlbnRfbG9jdXMpKQorICAgICByZXR1cm4g TUFUQ0hfRVJST1I7CisgCisgICBpZiAoZ2ZjX21hdGNoX2VvcyAoKSAhPSBN QVRDSF9ZRVMpCisgICAgIHsKKyAgICAgICBnZmNfc3ludGF4X2Vycm9yIChT VF9NT0RVTEVfUFJPQyk7CisgICAgICAgcmV0dXJuIE1BVENIX0VSUk9SOwor ICAgICB9CisgCisgICByZXR1cm4gTUFUQ0hfWUVTOworIAorIGNsZWFudXA6 CisgICBnZmNfZnJlZV9mb3JtYWxfYXJnbGlzdCAoaGVhZCk7CisgICByZXR1 cm4gTUFUQ0hfRVJST1I7CisgfQorIAorIAogIC8qIE1hdGNoIGEgbW9kdWxl IHByb2NlZHVyZSBzdGF0ZW1lbnQuICBOb3RlIHRoYXQgd2UgaGF2ZSB0byBt b2RpZnkKICAgICBzeW1ib2xzIGluIHRoZSBwYXJlbnQncyBuYW1lc3BhY2Ug YmVjYXVzZSB0aGUgY3VycmVudCBvbmUgd2FzIHRoZXJlCiAgICAgdG8gcmVj ZWl2ZSBzeW1ib2xzIHRoYXQgYXJlIGluIGFuIGludGVyZmFjZSdzIGZvcm1h bCBhcmd1bWVudCBsaXN0LiAgKi8KSW5kZXg6IGdjYy9mb3J0cmFuL2dmb3J0 cmFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2NjL2ZvcnRyYW4v Z2ZvcnRyYW4uaAkocmV2aXNpb24gMjI0NzI0KQotLS0gZ2NjL2ZvcnRyYW4v Z2ZvcnRyYW4uaAkod29ya2luZyBjb3B5KQoqKioqKioqKioqKioqKiogdHlw ZWRlZiBlbnVtCioqKiAyMDEsMjE5ICoqKioKICAgIFNUX0NBTEwsIFNUX0NB U0UsIFNUX0NMT1NFLCBTVF9DT01NT04sIFNUX0NPTlRJTlVFLCBTVF9DT05U QUlOUywgU1RfQ1lDTEUsCiAgICBTVF9EQVRBLCBTVF9EQVRBX0RFQ0wsIFNU X0RFQUxMT0NBVEUsIFNUX0RPLCBTVF9FTFNFLCBTVF9FTFNFSUYsCiAgICBT VF9FTFNFV0hFUkUsIFNUX0VORF9BU1NPQ0lBVEUsIFNUX0VORF9CTE9DSywg U1RfRU5EX0JMT0NLX0RBVEEsCiEgICBTVF9FTkRETywgU1RfSU1QTElFRF9F TkRETywKISAgIFNUX0VORF9GSUxFLCBTVF9GSU5BTCwgU1RfRkxVU0gsIFNU X0VORF9GT1JBTEwsIFNUX0VORF9GVU5DVElPTiwgU1RfRU5ESUYsCiEgICBT VF9FTkRfSU5URVJGQUNFLCBTVF9FTkRfTU9EVUxFLCBTVF9FTkRfUFJPR1JB TSwgU1RfRU5EX1NFTEVDVCwKISAgIFNUX0VORF9TVUJST1VUSU5FLCBTVF9F TkRfV0hFUkUsIFNUX0VORF9UWVBFLCBTVF9FTlRSWSwgU1RfRVFVSVZBTEVO Q0UsCiEgICBTVF9FUlJPUl9TVE9QLCBTVF9FWElULCBTVF9GT1JBTEwsIFNU X0ZPUkFMTF9CTE9DSywgU1RfRk9STUFULCBTVF9GVU5DVElPTiwKISAgIFNU X0dPVE8sIFNUX0lGX0JMT0NLLCBTVF9JTVBMSUNJVCwgU1RfSU1QTElDSVRf Tk9ORSwgU1RfSU1QT1JULAohICAgU1RfSU5RVUlSRSwgU1RfSU5URVJGQUNF LCBTVF9TWU5DX0FMTCwgU1RfU1lOQ19NRU1PUlksIFNUX1NZTkNfSU1BR0VT LAohICAgU1RfUEFSQU1FVEVSLCBTVF9NT0RVTEUsIFNUX01PRFVMRV9QUk9D LCBTVF9OQU1FTElTVCwgU1RfTlVMTElGWSwgU1RfT1BFTiwKISAgIFNUX1BB VVNFLCBTVF9QUklWQVRFLCBTVF9QUk9HUkFNLCBTVF9QVUJMSUMsIFNUX1JF QUQsIFNUX1JFVFVSTiwgU1RfUkVXSU5ELAohICAgU1RfU1RPUCwgU1RfU1VC Uk9VVElORSwgU1RfVFlQRSwgU1RfVVNFLCBTVF9XSEVSRV9CTE9DSywgU1Rf V0hFUkUsIFNUX1dBSVQsCiEgICBTVF9XUklURSwgU1RfQVNTSUdOTUVOVCwg U1RfUE9JTlRFUl9BU1NJR05NRU5ULCBTVF9TRUxFQ1RfQ0FTRSwgU1RfU0VR VUVOQ0UsCiEgICBTVF9TSU1QTEVfSUYsIFNUX1NUQVRFTUVOVF9GVU5DVElP TiwgU1RfREVSSVZFRF9ERUNMLCBTVF9MQUJFTF9BU1NJR05NRU5ULAohICAg U1RfRU5VTSwgU1RfRU5VTUVSQVRPUiwgU1RfRU5EX0VOVU0sIFNUX1NFTEVD VF9UWVBFLCBTVF9UWVBFX0lTLCBTVF9DTEFTU19JUywKICAgIFNUX09BQ0Nf UEFSQUxMRUxfTE9PUCwgU1RfT0FDQ19FTkRfUEFSQUxMRUxfTE9PUCwgU1Rf T0FDQ19QQVJBTExFTCwKICAgIFNUX09BQ0NfRU5EX1BBUkFMTEVMLCBTVF9P QUNDX0tFUk5FTFMsIFNUX09BQ0NfRU5EX0tFUk5FTFMsIFNUX09BQ0NfREFU QSwKICAgIFNUX09BQ0NfRU5EX0RBVEEsIFNUX09BQ0NfSE9TVF9EQVRBLCBT VF9PQUNDX0VORF9IT1NUX0RBVEEsIFNUX09BQ0NfTE9PUCwKLS0tIDIwMSwy MTkgLS0tLQogICAgU1RfQ0FMTCwgU1RfQ0FTRSwgU1RfQ0xPU0UsIFNUX0NP TU1PTiwgU1RfQ09OVElOVUUsIFNUX0NPTlRBSU5TLCBTVF9DWUNMRSwKICAg IFNUX0RBVEEsIFNUX0RBVEFfREVDTCwgU1RfREVBTExPQ0FURSwgU1RfRE8s IFNUX0VMU0UsIFNUX0VMU0VJRiwKICAgIFNUX0VMU0VXSEVSRSwgU1RfRU5E X0FTU09DSUFURSwgU1RfRU5EX0JMT0NLLCBTVF9FTkRfQkxPQ0tfREFUQSwK ISAgIFNUX0VORERPLCBTVF9JTVBMSUVEX0VORERPLCBTVF9FTkRfRklMRSwg U1RfRklOQUwsIFNUX0ZMVVNILCBTVF9FTkRfRk9SQUxMLAohICAgU1RfRU5E X0ZVTkNUSU9OLCBTVF9FTkRJRiwgU1RfRU5EX0lOVEVSRkFDRSwgU1RfRU5E X01PRFVMRSwgU1RfRU5EX1NVQk1PRFVMRSwKISAgIFNUX0VORF9QUk9HUkFN LCBTVF9FTkRfU0VMRUNULCBTVF9FTkRfU1VCUk9VVElORSwgU1RfRU5EX1dI RVJFLCBTVF9FTkRfVFlQRSwKISAgIFNUX0VOVFJZLCBTVF9FUVVJVkFMRU5D RSwgU1RfRVJST1JfU1RPUCwgU1RfRVhJVCwgU1RfRk9SQUxMLCBTVF9GT1JB TExfQkxPQ0ssCiEgICBTVF9GT1JNQVQsIFNUX0ZVTkNUSU9OLCBTVF9HT1RP LCBTVF9JRl9CTE9DSywgU1RfSU1QTElDSVQsIFNUX0lNUExJQ0lUX05PTkUs CiEgICBTVF9JTVBPUlQsIFNUX0lOUVVJUkUsIFNUX0lOVEVSRkFDRSwgU1Rf U1lOQ19BTEwsIFNUX1NZTkNfTUVNT1JZLAohICAgU1RfU1lOQ19JTUFHRVMs IFNUX1BBUkFNRVRFUiwgU1RfTU9EVUxFLCBTVF9TVUJNT0RVTEUsIFNUX01P RFVMRV9QUk9DLAohICAgU1RfTkFNRUxJU1QsIFNUX05VTExJRlksIFNUX09Q RU4sIFNUX1BBVVNFLCBTVF9QUklWQVRFLCBTVF9QUk9HUkFNLCBTVF9QVUJM SUMsCiEgICBTVF9SRUFELCBTVF9SRVRVUk4sIFNUX1JFV0lORCwgU1RfU1RP UCwgU1RfU1VCUk9VVElORSwgU1RfVFlQRSwgU1RfVVNFLAohICAgU1RfV0hF UkVfQkxPQ0ssIFNUX1dIRVJFLCBTVF9XQUlULCBTVF9XUklURSwgU1RfQVNT SUdOTUVOVCwKISAgIFNUX1BPSU5URVJfQVNTSUdOTUVOVCwgU1RfU0VMRUNU X0NBU0UsIFNUX1NFUVVFTkNFLCBTVF9TSU1QTEVfSUYsCiEgICBTVF9TVEFU RU1FTlRfRlVOQ1RJT04sIFNUX0RFUklWRURfREVDTCwgU1RfTEFCRUxfQVNT SUdOTUVOVCwgU1RfRU5VTSwKISAgIFNUX0VOVU1FUkFUT1IsIFNUX0VORF9F TlVNLCBTVF9TRUxFQ1RfVFlQRSwgU1RfVFlQRV9JUywgU1RfQ0xBU1NfSVMs CiAgICBTVF9PQUNDX1BBUkFMTEVMX0xPT1AsIFNUX09BQ0NfRU5EX1BBUkFM TEVMX0xPT1AsIFNUX09BQ0NfUEFSQUxMRUwsCiAgICBTVF9PQUNDX0VORF9Q QVJBTExFTCwgU1RfT0FDQ19LRVJORUxTLCBTVF9PQUNDX0VORF9LRVJORUxT LCBTVF9PQUNDX0RBVEEsCiAgICBTVF9PQUNDX0VORF9EQVRBLCBTVF9PQUND X0hPU1RfREFUQSwgU1RfT0FDQ19FTkRfSE9TVF9EQVRBLCBTVF9PQUNDX0xP T1AsCioqKioqKioqKioqKioqKiB0eXBlZGVmIHN0cnVjdAoqKiogNzUxLDc1 NiAqKioqCi0tLSA3NTEsNzU5IC0tLS0KICAgIHVuc2lnbmVkIGRhdGE6MSwJ CS8qIFN5bWJvbCBpcyBuYW1lZCBpbiBhIERBVEEgc3RhdGVtZW50LiAgKi8K ICAgICAgaXNfcHJvdGVjdGVkOjEsCQkvKiBTeW1ib2wgaGFzIGJlZW4gbWFy a2VkIGFzIHByb3RlY3RlZC4gICovCiAgICAgIHVzZV9hc3NvYzoxLAkJLyog U3ltYm9sIGhhcyBiZWVuIHVzZS1hc3NvY2lhdGVkLiAgKi8KKyAgICAgdXNl ZF9pbl9zdWJtb2R1bGU6MSwJLyogU3ltYm9sIGhhcyBiZWVuIHVzZS1hc3Nv Y2lhdGVkIGluIGEKKyAJCQkJICAgc3VibW9kdWxlLiBOZWVkZWQgc2luY2Ug dGhlc2UgZW50aXRpZXMgbXVzdAorIAkJCQkgICBiZSBzZXQgaG9zdCBhc3Nv Y2lhdGVkIHRvIGJlIGNvbXBsaWFudC4gICovCiAgICAgIHVzZV9vbmx5OjEs CQkJLyogU3ltYm9sIGhhcyBiZWVuIHVzZS1hc3NvY2lhdGVkLCB3aXRoIE9O TFkuICAqLwogICAgICB1c2VfcmVuYW1lOjEsCQkvKiBTeW1ib2wgaGFzIGJl ZW4gdXNlLWFzc29jaWF0ZWQgYW5kIHJlbmFtZWQuICAqLwogICAgICBpbXBv cnRlZDoxLAkJCS8qIFN5bWJvbCBoYXMgYmVlbiBhc3NvY2lhdGVkIGJ5IElN UE9SVC4gICovCioqKioqKioqKioqKioqKiB0eXBlZGVmIHN0cnVjdAoqKiog Nzc5LDc4NCAqKioqCi0tLSA3ODIsNzkyIC0tLS0KICAgIHVuc2lnbmVkIHNl cXVlbmNlOjEsIGVsZW1lbnRhbDoxLCBwdXJlOjEsIHJlY3Vyc2l2ZToxOwog ICAgdW5zaWduZWQgdW5tYXNrYWJsZToxLCBtYXNrZWQ6MSwgY29udGFpbmVk OjEsIG1vZF9wcm9jOjEsIGFic3RyYWN0OjE7CiAgCisgICAvKiBTZXQgaWYg dGhpcyBpcyBhIG1vZHVsZSBmdW5jdGlvbiBvciBzdWJyb3V0aW5lLiBOb3Rl IHRoYXQgaXQgaXMgYW4KKyAgICAgIGF0dHJpYnV0ZSBiZWNhdXNlIGl0IGFw cGVhcnMgYXMgYSBwcmVmaXggaW4gdGhlIGRlY2xhcmF0aW9uIGxpa2UKKyAg ICAgIFBVUkUsIGV0Yy4uICAqLworICAgdW5zaWduZWQgbW9kdWxlX3Byb2Nl ZHVyZToxOworIAogICAgLyogU2V0IGlmIGEgKHB1YmxpYykgc3ltYm9sIFtl LmcuIGdlbmVyaWMgbmFtZV0gZXhwb3NlcyB0aGlzIHN5bWJvbCwKICAgICAg IHdoaWNoIGlzIHJlbGV2YW50IGZvciBwcml2YXRlIG1vZHVsZSBwcm9jZWR1 cmVzLiAgKi8KICAgIHVuc2lnbmVkIHB1YmxpY191c2VkOjE7CioqKioqKioq KioqKioqKiB0eXBlZGVmIHN0cnVjdCBnZmNfc3ltYm9sCioqKiAxNDU5LDE0 NjQgKioqKgotLS0gMTQ2NywxNDc1IC0tLS0KICAgIHVuc2lnbmVkIGZvcmFs bF9pbmRleDoxOwogICAgLyogVXNlZCB0byBhdm9pZCBtdWx0aXBsZSByZXNv bHV0aW9ucyBvZiBhIHNpbmdsZSBzeW1ib2wuICAqLwogICAgdW5zaWduZWQg cmVzb2x2ZWQ6MTsKKyAgIC8qIFNldCBpZiB0aGlzIGlzIGEgbW9kdWxlIGZ1 bmN0aW9uIG9yIHN1YnJvdXRpbmUgd2l0aCB0aGUKKyAgICAgIGFicmV2aWF0 ZWQgZGVjbGFyYXRpb24gaW4gYSBzdWJtb2R1bGUuICAqLworICAgdW5zaWdu ZWQgYWJyX21vZHByb2NfZGVjbDoxOwogIAogICAgaW50IHJlZnM7CiAgICBz dHJ1Y3QgZ2ZjX25hbWVzcGFjZSAqbnM7CS8qIG5hbWVzcGFjZSBjb250YWlu aW5nIHRoaXMgc3ltYm9sICovCioqKioqKioqKioqKioqKiBib29sIGdmY19h ZGRfdHlwZSAoZ2ZjX3N5bWJvbCAqLCBnZmNfdHlwCioqKiAyNzg2LDI3OTIg KioqKgogIHZvaWQgZ2ZjX2NsZWFyX2F0dHIgKHN5bWJvbF9hdHRyaWJ1dGUg Kik7CiAgYm9vbCBnZmNfbWlzc2luZ19hdHRyIChzeW1ib2xfYXR0cmlidXRl ICosIGxvY3VzICopOwogIGJvb2wgZ2ZjX2NvcHlfYXR0ciAoc3ltYm9sX2F0 dHJpYnV0ZSAqLCBzeW1ib2xfYXR0cmlidXRlICosIGxvY3VzICopOwohIAog IGJvb2wgZ2ZjX2FkZF9jb21wb25lbnQgKGdmY19zeW1ib2wgKiwgY29uc3Qg Y2hhciAqLCBnZmNfY29tcG9uZW50ICoqKTsKICBnZmNfc3ltYm9sICpnZmNf dXNlX2Rlcml2ZWQgKGdmY19zeW1ib2wgKik7CiAgZ2ZjX3N5bXRyZWUgKmdm Y191c2VfZGVyaXZlZF90cmVlIChnZmNfc3ltdHJlZSAqKTsKLS0tIDI3OTcs MjgwMyAtLS0tCiAgdm9pZCBnZmNfY2xlYXJfYXR0ciAoc3ltYm9sX2F0dHJp YnV0ZSAqKTsKICBib29sIGdmY19taXNzaW5nX2F0dHIgKHN5bWJvbF9hdHRy aWJ1dGUgKiwgbG9jdXMgKik7CiAgYm9vbCBnZmNfY29weV9hdHRyIChzeW1i b2xfYXR0cmlidXRlICosIHN5bWJvbF9hdHRyaWJ1dGUgKiwgbG9jdXMgKik7 CiEgaW50IGdmY19jb3B5X2R1bW15X3N5bSAoZ2ZjX3N5bWJvbCAqKiwgZ2Zj X3N5bWJvbCAqLCBpbnQpOwogIGJvb2wgZ2ZjX2FkZF9jb21wb25lbnQgKGdm Y19zeW1ib2wgKiwgY29uc3QgY2hhciAqLCBnZmNfY29tcG9uZW50ICoqKTsK ICBnZmNfc3ltYm9sICpnZmNfdXNlX2Rlcml2ZWQgKGdmY19zeW1ib2wgKik7 CiAgZ2ZjX3N5bXRyZWUgKmdmY191c2VfZGVyaXZlZF90cmVlIChnZmNfc3lt dHJlZSAqKTsKKioqKioqKioqKioqKioqIGJvb2wgZ2ZjX3JlZl9kaW1lbl9z aXplIChnZmNfYXJyYXlfcmVmICoKKioqIDMwODcsMzA5MiAqKioqCi0tLSAz MDk4LDMxMDcgLS0tLQogIHZvaWQgZ2ZjX2ZyZWVfaW50ZXJmYWNlIChnZmNf aW50ZXJmYWNlICopOwogIGludCBnZmNfY29tcGFyZV9kZXJpdmVkX3R5cGVz IChnZmNfc3ltYm9sICosIGdmY19zeW1ib2wgKik7CiAgaW50IGdmY19jb21w YXJlX3R5cGVzIChnZmNfdHlwZXNwZWMgKiwgZ2ZjX3R5cGVzcGVjICopOwor IGJvb2wgZ2ZjX2NoZWNrX2R1bW15X2NoYXJhY3RlcmlzdGljcyAoZ2ZjX3N5 bWJvbCAqLCBnZmNfc3ltYm9sICosCisgCQkJCSAgICAgIGJvb2wsIGNoYXIg KiwgaW50KTsKKyBib29sIGdmY19jaGVja19yZXN1bHRfY2hhcmFjdGVyaXN0 aWNzIChnZmNfc3ltYm9sICosIGdmY19zeW1ib2wgKiwKKyAJCQkJICAgICAg IGNoYXIgKiwgaW50KTsKICBpbnQgZ2ZjX2NvbXBhcmVfaW50ZXJmYWNlcyAo Z2ZjX3N5bWJvbCosIGdmY19zeW1ib2wqLCBjb25zdCBjaGFyICosIGludCwg aW50LAogIAkJCSAgICBjaGFyICosIGludCwgY29uc3QgY2hhciAqLCBjb25z dCBjaGFyICopOwogIHZvaWQgZ2ZjX2NoZWNrX2ludGVyZmFjZXMgKGdmY19u YW1lc3BhY2UgKik7CkluZGV4OiBnY2MvZm9ydHJhbi9pbnRlcmZhY2UuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CioqKiBnY2MvZm9ydHJhbi9pbnRlcmZh Y2UuYwkocmV2aXNpb24gMjI0NzI0KQotLS0gZ2NjL2ZvcnRyYW4vaW50ZXJm YWNlLmMJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqIHN5bWJvbF9y YW5rIChnZmNfc3ltYm9sICpzeW0pCioqKiAxMDY2LDEwNzQgKioqKgogIC8q IENoZWNrIGlmIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdHdvIGR1bW15IGFy Z3VtZW50cyBtYXRjaCwKICAgICBjZi4gRjA4OjEyLjMuMi4gICovCiAgCiEg c3RhdGljIGJvb2wKISBjaGVja19kdW1teV9jaGFyYWN0ZXJpc3RpY3MgKGdm Y19zeW1ib2wgKnMxLCBnZmNfc3ltYm9sICpzMiwKISAJCQkgICAgIGJvb2wg dHlwZV9tdXN0X2FncmVlLCBjaGFyICplcnJtc2csIGludCBlcnJfbGVuKQog IHsKICAgIGlmIChzMSA9PSBOVUxMIHx8IHMyID09IE5VTEwpCiAgICAgIHJl dHVybiBzMSA9PSBzMiA/IHRydWUgOiBmYWxzZTsKLS0tIDEwNjYsMTA3NSAt LS0tCiAgLyogQ2hlY2sgaWYgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0d28g ZHVtbXkgYXJndW1lbnRzIG1hdGNoLAogICAgIGNmLiBGMDg6MTIuMy4yLiAg Ki8KICAKISBib29sCiEgZ2ZjX2NoZWNrX2R1bW15X2NoYXJhY3RlcmlzdGlj cyAoZ2ZjX3N5bWJvbCAqczEsIGdmY19zeW1ib2wgKnMyLAohIAkJCQkgYm9v bCB0eXBlX211c3RfYWdyZWUsIGNoYXIgKmVycm1zZywKISAJCQkJIGludCBl cnJfbGVuKQogIHsKICAgIGlmIChzMSA9PSBOVUxMIHx8IHMyID09IE5VTEwp CiAgICAgIHJldHVybiBzMSA9PSBzMiA/IHRydWUgOiBmYWxzZTsKKioqKioq KioqKioqKioqIGNoZWNrX2R1bW15X2NoYXJhY3RlcmlzdGljcyAoZ2ZjX3N5 bWJvbAoqKiogMTI3NSwxMjgyICoqKioKICAvKiBDaGVjayBpZiB0aGUgY2hh cmFjdGVyaXN0aWNzIG9mIHR3byBmdW5jdGlvbiByZXN1bHRzIG1hdGNoLAog ICAgIGNmLiBGMDg6MTIuMy4zLiAgKi8KICAKISBzdGF0aWMgYm9vbAohIGNo ZWNrX3Jlc3VsdF9jaGFyYWN0ZXJpc3RpY3MgKGdmY19zeW1ib2wgKnMxLCBn ZmNfc3ltYm9sICpzMiwKICAJCQkgICAgICBjaGFyICplcnJtc2csIGludCBl cnJfbGVuKQogIHsKICAgIGdmY19zeW1ib2wgKnIxLCAqcjI7Ci0tLSAxMjc2 LDEyODMgLS0tLQogIC8qIENoZWNrIGlmIHRoZSBjaGFyYWN0ZXJpc3RpY3Mg b2YgdHdvIGZ1bmN0aW9uIHJlc3VsdHMgbWF0Y2gsCiAgICAgY2YuIEYwODox Mi4zLjMuICAqLwogIAohIGJvb2wKISBnZmNfY2hlY2tfcmVzdWx0X2NoYXJh Y3RlcmlzdGljcyAoZ2ZjX3N5bWJvbCAqczEsIGdmY19zeW1ib2wgKnMyLAog IAkJCSAgICAgIGNoYXIgKmVycm1zZywgaW50IGVycl9sZW4pCiAgewogICAg Z2ZjX3N5bWJvbCAqcjEsICpyMjsKKioqKioqKioqKioqKioqIGdmY19jb21w YXJlX2ludGVyZmFjZXMgKGdmY19zeW1ib2wgKnMxLAoqKiogMTQ3MiwxNDc5 ICoqKioKICAgICAgICBpZiAoczEtPmF0dHIuZnVuY3Rpb24gJiYgczItPmF0 dHIuZnVuY3Rpb24pCiAgCXsKICAJICAvKiBJZiBib3RoIGFyZSBmdW5jdGlv bnMsIGNoZWNrIHJlc3VsdCBjaGFyYWN0ZXJpc3RpY3MuICAqLwohIAkgIGlm ICghY2hlY2tfcmVzdWx0X2NoYXJhY3RlcmlzdGljcyAoczEsIHMyLCBlcnJt c2csIGVycl9sZW4pCiEgCSAgICAgIHx8ICFjaGVja19yZXN1bHRfY2hhcmFj dGVyaXN0aWNzIChzMiwgczEsIGVycm1zZywgZXJyX2xlbikpCiAgCSAgICBy ZXR1cm4gMDsKICAJfQogIAotLS0gMTQ3MywxNDgwIC0tLS0KICAgICAgICBp ZiAoczEtPmF0dHIuZnVuY3Rpb24gJiYgczItPmF0dHIuZnVuY3Rpb24pCiAg CXsKICAJICAvKiBJZiBib3RoIGFyZSBmdW5jdGlvbnMsIGNoZWNrIHJlc3Vs dCBjaGFyYWN0ZXJpc3RpY3MuICAqLwohIAkgIGlmICghZ2ZjX2NoZWNrX3Jl c3VsdF9jaGFyYWN0ZXJpc3RpY3MgKHMxLCBzMiwgZXJybXNnLCBlcnJfbGVu KQohIAkgICAgICB8fCAhZ2ZjX2NoZWNrX3Jlc3VsdF9jaGFyYWN0ZXJpc3Rp Y3MgKHMyLCBzMSwgZXJybXNnLCBlcnJfbGVuKSkKICAJICAgIHJldHVybiAw OwogIAl9CiAgCioqKioqKioqKioqKioqKiBnZmNfY29tcGFyZV9pbnRlcmZh Y2VzIChnZmNfc3ltYm9sICpzMSwKKioqIDE1MzMsMTUzOSAqKioqCiAgCWlm IChzdHJpY3RfZmxhZykKICAJICB7CiAgCSAgICAvKiBDaGVjayBhbGwgY2hh cmFjdGVyaXN0aWNzLiAgKi8KISAJICAgIGlmICghY2hlY2tfZHVtbXlfY2hh cmFjdGVyaXN0aWNzIChmMS0+c3ltLCBmMi0+c3ltLCB0cnVlLCAKICAJCQkJ CSAgICAgIGVycm1zZywgZXJyX2xlbikpCiAgCSAgICAgIHJldHVybiAwOwog IAkgIH0KLS0tIDE1MzQsMTU0MCAtLS0tCiAgCWlmIChzdHJpY3RfZmxhZykK ICAJICB7CiAgCSAgICAvKiBDaGVjayBhbGwgY2hhcmFjdGVyaXN0aWNzLiAg Ki8KISAJICAgIGlmICghZ2ZjX2NoZWNrX2R1bW15X2NoYXJhY3RlcmlzdGlj cyAoZjEtPnN5bSwgZjItPnN5bSwgdHJ1ZSwKICAJCQkJCSAgICAgIGVycm1z ZywgZXJyX2xlbikpCiAgCSAgICAgIHJldHVybiAwOwogIAkgIH0KKioqKioq KioqKioqKioqIGdmY19jaGVja190eXBlYm91bmRfb3ZlcnJpZGUgKGdmY19z eW10cmUKKioqIDQyNDEsNDI0OCAqKioqCiAgCSAgcmV0dXJuIGZhbHNlOwog IAl9CiAgCiEgICAgICAgaWYgKCFjaGVja19yZXN1bHRfY2hhcmFjdGVyaXN0 aWNzIChwcm9jX3RhcmdldCwgb2xkX3RhcmdldCwgZXJyLCAKISAJCQkJCSBz aXplb2YoZXJyKSkpCiAgCXsKICAJICBnZmNfZXJyb3IgKCJSZXN1bHQgbWlz bWF0Y2ggZm9yIHRoZSBvdmVycmlkaW5nIHByb2NlZHVyZSAiCiAgCQkgICAg ICIlcXMgYXQgJUw6ICVzIiwgcHJvYy0+bmFtZSwgJndoZXJlLCBlcnIpOwot LS0gNDI0Miw0MjQ5IC0tLS0KICAJICByZXR1cm4gZmFsc2U7CiAgCX0KICAK ISAgICAgICBpZiAoIWdmY19jaGVja19yZXN1bHRfY2hhcmFjdGVyaXN0aWNz IChwcm9jX3RhcmdldCwgb2xkX3RhcmdldCwKISAJCQkJCSAgICAgZXJyLCBz aXplb2YoZXJyKSkpCiAgCXsKICAJICBnZmNfZXJyb3IgKCJSZXN1bHQgbWlz bWF0Y2ggZm9yIHRoZSBvdmVycmlkaW5nIHByb2NlZHVyZSAiCiAgCQkgICAg ICIlcXMgYXQgJUw6ICVzIiwgcHJvYy0+bmFtZSwgJndoZXJlLCBlcnIpOwoq KioqKioqKioqKioqKiogZ2ZjX2NoZWNrX3R5cGVib3VuZF9vdmVycmlkZSAo Z2ZjX3N5bXRyZQoqKiogNDI5Myw0Mjk5ICoqKioKICAJfQogIAogICAgICAg IGNoZWNrX3R5cGUgPSBwcm9jX3Bhc3NfYXJnICE9IGFyZ3BvcyAmJiBvbGRf cGFzc19hcmcgIT0gYXJncG9zOwohICAgICAgIGlmICghY2hlY2tfZHVtbXlf Y2hhcmFjdGVyaXN0aWNzIChwcm9jX2Zvcm1hbC0+c3ltLCBvbGRfZm9ybWFs LT5zeW0sIAogIAkJCQkJY2hlY2tfdHlwZSwgZXJyLCBzaXplb2YoZXJyKSkp CiAgCXsKICAJICBnZmNfZXJyb3IgKCJBcmd1bWVudCBtaXNtYXRjaCBmb3Ig dGhlIG92ZXJyaWRpbmcgcHJvY2VkdXJlICIKLS0tIDQyOTQsNDMwMCAtLS0t CiAgCX0KICAKICAgICAgICBjaGVja190eXBlID0gcHJvY19wYXNzX2FyZyAh PSBhcmdwb3MgJiYgb2xkX3Bhc3NfYXJnICE9IGFyZ3BvczsKISAgICAgICBp ZiAoIWdmY19jaGVja19kdW1teV9jaGFyYWN0ZXJpc3RpY3MgKHByb2NfZm9y bWFsLT5zeW0sIG9sZF9mb3JtYWwtPnN5bSwKICAJCQkJCWNoZWNrX3R5cGUs IGVyciwgc2l6ZW9mKGVycikpKQogIAl7CiAgCSAgZ2ZjX2Vycm9yICgiQXJn dW1lbnQgbWlzbWF0Y2ggZm9yIHRoZSBvdmVycmlkaW5nIHByb2NlZHVyZSAi CkluZGV4OiBnY2MvZm9ydHJhbi9tYXRjaC5oCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKioqIGdjYy9mb3J0cmFuL21hdGNoLmgJKHJldmlzaW9uIDIyNDcy NCkKLS0tIGdjYy9mb3J0cmFuL21hdGNoLmgJKHdvcmtpbmcgY29weSkKKioq KioqKioqKioqKioqIG1hdGNoIGdmY19tYXRjaF9nZW5lcmljICh2b2lkKTsK KioqIDIwMywyMDggKioqKgotLS0gMjAzLDIwOSAtLS0tCiAgbWF0Y2ggZ2Zj X21hdGNoX2Z1bmN0aW9uX2RlY2wgKHZvaWQpOwogIG1hdGNoIGdmY19tYXRj aF9lbnRyeSAodm9pZCk7CiAgbWF0Y2ggZ2ZjX21hdGNoX3N1YnJvdXRpbmUg KHZvaWQpOworIG1hdGNoIGdmY19tYXRjaF9zdWJtb2RfcHJvYyAodm9pZCk7 CiAgbWF0Y2ggZ2ZjX21hdGNoX2Rlcml2ZWRfZGVjbCAodm9pZCk7CiAgbWF0 Y2ggZ2ZjX21hdGNoX2ZpbmFsX2RlY2wgKHZvaWQpOwogIAoqKioqKioqKioq KioqKiogbWF0Y2ggZ2ZjX21hdGNoX2V4cHIgKGdmY19leHByICoqKTsKKioq IDI5MSwyOTYgKioqKgotLS0gMjkyLDI5OCAtLS0tCiAgCiAgLyogbW9kdWxl LmMuICAqLwogIG1hdGNoIGdmY19tYXRjaF91c2UgKHZvaWQpOworIG1hdGNo IGdmY19tYXRjaF9zdWJtb2R1bGUgKHZvaWQpOwogIHZvaWQgZ2ZjX3VzZV9t b2R1bGVzICh2b2lkKTsKICAKICAjZW5kaWYgIC8qIEdGQ19NQVRDSF9IICAq LwpJbmRleDogZ2NjL2ZvcnRyYW4vbW9kdWxlLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQoqKiogZ2NjL2ZvcnRyYW4vbW9kdWxlLmMJKHJldmlzaW9uIDIy NDcyNCkKLS0tIGdjYy9mb3J0cmFuL21vZHVsZS5jCSh3b3JraW5nIGNvcHkp CioqKioqKioqKioqKioqKiBjbGVhbnVwOgoqKiogNzE2LDcyMSAqKioqCi0t LSA3MTYsNzgyIC0tLS0KICB9CiAgCiAgCisgLyogTWF0Y2ggYSBTVUJNT0RV TEUgc3RhdGVtZW50LiAgKi8KKyAKKyBtYXRjaAorIGdmY19tYXRjaF9zdWJt b2R1bGUgKHZvaWQpCisgeworICAgbWF0Y2ggbTsKKyAgIGNoYXIgbmFtZVtH RkNfTUFYX1NZTUJPTF9MRU4gKyAxXTsKKyAgIGdmY191c2VfbGlzdCAqdXNl X2xpc3Q7CisgCisgICBpZiAoIWdmY19ub3RpZnlfc3RkIChHRkNfU1REX0Yy MDA4LCAiU1VCTU9EVUxFIGRlY2xhcmF0aW9uIGF0ICVDIikpCisgICAgIHJl dHVybiBNQVRDSF9FUlJPUjsKKyAKKyAgIGdmY19uZXdfYmxvY2sgPSBOVUxM OworICAgZ2NjX2Fzc2VydCAobW9kdWxlX2xpc3QgPT0gTlVMTCk7CisgCisg ICBpZiAoZ2ZjX21hdGNoX2NoYXIgKCcoJykgIT0gTUFUQ0hfWUVTKQorICAg ICBnb3RvIHN5bnRheDsKKyAKKyAgIHdoaWxlICgxKQorICAgICB7CisgICAg ICAgbSA9IGdmY19tYXRjaCAoIiAlbiIsIG5hbWUpOworICAgICAgIGlmICht ICE9IE1BVENIX1lFUykKKyAJZ290byBzeW50YXg7CisgCisgICAgICAgdXNl X2xpc3QgPSBnZmNfZ2V0X3VzZV9saXN0ICgpOworICAgICAgIHVzZV9saXN0 LT5tb2R1bGVfbmFtZSA9IGdmY19nZXRfc3RyaW5nIChuYW1lKTsKKyAgICAg ICB1c2VfbGlzdC0+d2hlcmUgPSBnZmNfY3VycmVudF9sb2N1czsKKyAKKyAg ICAgICBpZiAobW9kdWxlX2xpc3QpCisgCXsKKyAJICBnZmNfdXNlX2xpc3Qg Kmxhc3QgPSBtb2R1bGVfbGlzdDsKKyAJICB3aGlsZSAobGFzdC0+bmV4dCkK KyAJICAgIGxhc3QgPSBsYXN0LT5uZXh0OworIAkgIGxhc3QtPm5leHQgPSB1 c2VfbGlzdDsKKyAJfQorICAgICAgIGVsc2UKKyAJbW9kdWxlX2xpc3QgPSB1 c2VfbGlzdDsKKyAKKyAgICAgICBpZiAoZ2ZjX21hdGNoX2NoYXIgKCcpJykg PT0gTUFUQ0hfWUVTKQorIAlicmVhazsKKyAKKyAgICAgICBpZiAoZ2ZjX21h dGNoX2NoYXIgKCc6JykgIT0gTUFUQ0hfWUVTKQorIAlnb3RvIHN5bnRheDsK KyAgICAgfQorIAorICAgbSA9IGdmY19tYXRjaCAoIiAlcyV0IiwgJmdmY19u ZXdfYmxvY2spOworICAgaWYgKG0gIT0gTUFUQ0hfWUVTKQorICAgICBnb3Rv IHN5bnRheDsKKyAKKyAgIGlmICghZ2ZjX2FkZF9mbGF2b3IgKCZnZmNfbmV3 X2Jsb2NrLT5hdHRyLCBGTF9NT0RVTEUsCisgCQkgICAgICAgZ2ZjX25ld19i bG9jay0+bmFtZSwgTlVMTCkpCisgICAgIHJldHVybiBNQVRDSF9FUlJPUjsK KyAKKyAgIHJldHVybiBNQVRDSF9ZRVM7CisgCisgc3ludGF4OgorICAgZ2Zj X2Vycm9yICgiU3ludGF4IGVycm9yIGluIFNVQk1PRFVMRSBzdGF0ZW1lbnQg YXQgJUMiKTsKKyAgIHJldHVybiBNQVRDSF9FUlJPUjsKKyB9CisgCisgCiAg LyogR2l2ZW4gYSBuYW1lIGFuZCBhIG51bWJlciwgaW5zdCwgcmV0dXJuIHRo ZSBpbnN0IG5hbWUKICAgICB1bmRlciB3aGljaCB0byBsb2FkIHRoaXMgc3lt Ym9sLiBSZXR1cm5zIE5VTEwgaWYgdGhpcwogICAgIHN5bWJvbCBzaG91bGRu J3QgYmUgbG9hZGVkLiBJZiBpbnN0IGlzIHplcm8sIHJldHVybnMKKioqKioq KioqKioqKioqIHR5cGVkZWYgZW51bQoqKiogMTg4NywxODkzICoqKioKICAg IEFCX0lTX0NMQVNTLCBBQl9QUk9DRURVUkUsIEFCX1BST0NfUE9JTlRFUiwg QUJfQVNZTkNIUk9OT1VTLCBBQl9DT0RJTUVOU0lPTiwKICAgIEFCX0NPQVJS QVlfQ09NUCwgQUJfVlRZUEUsIEFCX1ZUQUIsIEFCX0NPTlRJR1VPVVMsIEFC X0NMQVNTX1BPSU5URVIsCiAgICBBQl9JTVBMSUNJVF9QVVJFLCBBQl9BUlRJ RklDSUFMLCBBQl9VTkxJTUlURURfUE9MWSwgQUJfT01QX0RFQ0xBUkVfVEFS R0VULAohICAgQUJfQVJSQVlfT1VURVJfREVQRU5ERU5DWQogIH0KICBhYl9h dHRyaWJ1dGU7CiAgCi0tLSAxOTQ4LDE5NTQgLS0tLQogICAgQUJfSVNfQ0xB U1MsIEFCX1BST0NFRFVSRSwgQUJfUFJPQ19QT0lOVEVSLCBBQl9BU1lOQ0hS T05PVVMsIEFCX0NPRElNRU5TSU9OLAogICAgQUJfQ09BUlJBWV9DT01QLCBB Ql9WVFlQRSwgQUJfVlRBQiwgQUJfQ09OVElHVU9VUywgQUJfQ0xBU1NfUE9J TlRFUiwKICAgIEFCX0lNUExJQ0lUX1BVUkUsIEFCX0FSVElGSUNJQUwsIEFC X1VOTElNSVRFRF9QT0xZLCBBQl9PTVBfREVDTEFSRV9UQVJHRVQsCiEgICBB Ql9BUlJBWV9PVVRFUl9ERVBFTkRFTkNZLCBBQl9NT0RVTEVfUFJPQ0VEVVJF CiAgfQogIGFiX2F0dHJpYnV0ZTsKICAKKioqKioqKioqKioqKioqIHN0YXRp YyBjb25zdCBtc3RyaW5nIGF0dHJfYml0c1tdID0KKioqIDE5NDQsMTk0OSAq KioqCi0tLSAyMDA1LDIwMTEgLS0tLQogICAgICBtaW5pdCAoIlVOTElNSVRF RF9QT0xZIiwgQUJfVU5MSU1JVEVEX1BPTFkpLAogICAgICBtaW5pdCAoIk9N UF9ERUNMQVJFX1RBUkdFVCIsIEFCX09NUF9ERUNMQVJFX1RBUkdFVCksCiAg ICAgIG1pbml0ICgiQVJSQVlfT1VURVJfREVQRU5ERU5DWSIsIEFCX0FSUkFZ X09VVEVSX0RFUEVOREVOQ1kpLAorICAgICBtaW5pdCAoIk1PRFVMRV9QUk9D RURVUkUiLCBBQl9NT0RVTEVfUFJPQ0VEVVJFKSwKICAgICAgbWluaXQgKE5V TEwsIC0xKQogIH07CiAgCioqKioqKioqKioqKioqKiBtaW9fc3ltYm9sX2F0 dHJpYnV0ZSAoc3ltYm9sX2F0dHJpYnV0ZSAqCioqKiAyMTI2LDIxMzEgKioq KgotLS0gMjE4OCwyMTk1IC0tLS0KICAJTUlPX05BTUUgKGFiX2F0dHJpYnV0 ZSkgKEFCX09NUF9ERUNMQVJFX1RBUkdFVCwgYXR0cl9iaXRzKTsKICAgICAg ICBpZiAoYXR0ci0+YXJyYXlfb3V0ZXJfZGVwZW5kZW5jeSkKICAJTUlPX05B TUUgKGFiX2F0dHJpYnV0ZSkgKEFCX0FSUkFZX09VVEVSX0RFUEVOREVOQ1ks IGF0dHJfYml0cyk7CisgICAgICAgaWYgKGF0dHItPm1vZHVsZV9wcm9jZWR1 cmUpCisgCU1JT19OQU1FIChhYl9hdHRyaWJ1dGUpIChBQl9NT0RVTEVfUFJP Q0VEVVJFLCBhdHRyX2JpdHMpOwogIAogICAgICAgIG1pb19ycGFyZW4gKCk7 CiAgCioqKioqKioqKioqKioqKiBtaW9fc3ltYm9sX2F0dHJpYnV0ZSAoc3lt Ym9sX2F0dHJpYnV0ZSAqCioqKiAyMjk1LDIzMDAgKioqKgotLS0gMjM1OSwy MzY3IC0tLS0KICAJICAgIGNhc2UgQUJfQVJSQVlfT1VURVJfREVQRU5ERU5D WToKICAJICAgICAgYXR0ci0+YXJyYXlfb3V0ZXJfZGVwZW5kZW5jeSA9MTsK ICAJICAgICAgYnJlYWs7CisgCSAgICBjYXNlIEFCX01PRFVMRV9QUk9DRURV UkU6CisgCSAgICAgIGF0dHItPm1vZHVsZV9wcm9jZWR1cmUgPTE7CisgCSAg ICAgIGJyZWFrOwogIAkgICAgfQogIAl9CiAgICAgIH0KKioqKioqKioqKioq KioqIGdmY191c2VfbW9kdWxlIChnZmNfdXNlX2xpc3QgKm1vZHVsZSkKKioq IDY3NTcsNjc2NCAqKioqCiAgCiAgICAvKiBNYWtlIHN1cmUgd2UncmUgbm90 IHJlYWRpbmcgdGhlIHNhbWUgbW9kdWxlIHRoYXQgd2UgbWF5IGJlIGJ1aWxk aW5nLiAgKi8KICAgIGZvciAocCA9IGdmY19zdGF0ZV9zdGFjazsgcDsgcCA9 IHAtPnByZXZpb3VzKQohICAgICBpZiAocC0+c3RhdGUgPT0gQ09NUF9NT0RV TEUgJiYgc3RyY21wIChwLT5zeW0tPm5hbWUsIG1vZHVsZV9uYW1lKSA9PSAw KQohICAgICAgIGdmY19mYXRhbF9lcnJvciAoIkNhbid0IFVTRSB0aGUgc2Ft ZSBtb2R1bGUgd2UncmUgYnVpbGRpbmchIik7CiAgCiAgICBpbml0X3BpX3Ry ZWUgKCk7CiAgICBpbml0X3RydWVfbmFtZV90cmVlICgpOwotLS0gNjgyNCw2 ODMzIC0tLS0KICAKICAgIC8qIE1ha2Ugc3VyZSB3ZSdyZSBub3QgcmVhZGlu ZyB0aGUgc2FtZSBtb2R1bGUgdGhhdCB3ZSBtYXkgYmUgYnVpbGRpbmcuICAq LwogICAgZm9yIChwID0gZ2ZjX3N0YXRlX3N0YWNrOyBwOyBwID0gcC0+cHJl dmlvdXMpCiEgICAgIGlmICgocC0+c3RhdGUgPT0gQ09NUF9NT0RVTEUgfHwg cC0+c3RhdGUgPT0gQ09NUF9TVUJNT0RVTEUpCiEgCSAmJiBzdHJjbXAgKHAt PnN5bS0+bmFtZSwgbW9kdWxlX25hbWUpID09IDApCiEgICAgICAgZ2ZjX2Zh dGFsX2Vycm9yICgiQ2FuJ3QgVVNFIHRoZSBzYW1lICVzbW9kdWxlIHdlJ3Jl IGJ1aWxkaW5nISIsCiEgCQkgICAgICAgcC0+c3RhdGUgPT0gQ09NUF9TVUJN T0RVTEUgPyAic3ViIiA6ICIiKTsKICAKICAgIGluaXRfcGlfdHJlZSAoKTsK ICAgIGluaXRfdHJ1ZV9uYW1lX3RyZWUgKCk7CkluZGV4OiBnY2MvZm9ydHJh bi9wYXJzZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy9mb3J0 cmFuL3BhcnNlLmMJKHJldmlzaW9uIDIyNDcyNCkKLS0tIGdjYy9mb3J0cmFu L3BhcnNlLmMJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqIGRlY29k ZV9zdGF0ZW1lbnQgKHZvaWQpCioqKiAzNjksMzc0ICoqKioKLS0tIDM2OSwz ODQgLS0tLQogICAgZ2ZjX3VuZG9fc3ltYm9scyAoKTsKICAgIGdmY19jdXJy ZW50X2xvY3VzID0gb2xkX2xvY3VzOwogIAorICAgaWYgKGdmY19tYXRjaF9z dWJtb2RfcHJvYyAoKSA9PSBNQVRDSF9ZRVMpCisgICAgIHsKKyAgICAgICBp ZiAoZ2ZjX25ld19ibG9jay0+YXR0ci5zdWJyb3V0aW5lKQorIAlyZXR1cm4g U1RfU1VCUk9VVElORTsKKyAgICAgICBlbHNlIGlmIChnZmNfbmV3X2Jsb2Nr LT5hdHRyLmZ1bmN0aW9uKQorIAlyZXR1cm4gU1RfRlVOQ1RJT047CisgICAg IH0KKyAgIGdmY191bmRvX3N5bWJvbHMgKCk7CisgICBnZmNfY3VycmVudF9s b2N1cyA9IG9sZF9sb2N1czsKKyAKICAgIC8qIENoZWNrIGZvciB0aGUgSUYs IERPLCBTRUxFQ1QsIFdIRVJFLCBGT1JBTEwsIENSSVRJQ0FMLCBCTE9DSyBh bmQgQVNTT0NJQVRFCiAgICAgICBzdGF0ZW1lbnRzLCB3aGljaCBtaWdodCBi ZWdpbiB3aXRoIGEgYmxvY2sgbGFiZWwuICBUaGUgbWF0Y2ggZnVuY3Rpb25z IGZvcgogICAgICAgdGhlc2Ugc3RhdGVtZW50cyBhcmUgdW51c3VhbCBpbiB0 aGF0IHRoZWlyIGtleXdvcmQgaXMgbm90IHNlZW4gYmVmb3JlCioqKioqKioq KioqKioqKiBkZWNvZGVfc3RhdGVtZW50ICh2b2lkKQoqKiogNTIyLDUyNyAq KioqCi0tLSA1MzIsNTM4IC0tLS0KICAgICAgICBtYXRjaCAoInNlcXVlbmNl IiwgZ2ZjX21hdGNoX2VvcywgU1RfU0VRVUVOQ0UpOwogICAgICAgIG1hdGNo ICgic3RvcCIsIGdmY19tYXRjaF9zdG9wLCBTVF9TVE9QKTsKICAgICAgICBt YXRjaCAoInNhdmUiLCBnZmNfbWF0Y2hfc2F2ZSwgU1RfQVRUUl9ERUNMKTsK KyAgICAgICBtYXRjaCAoInN1Ym1vZHVsZSIsIGdmY19tYXRjaF9zdWJtb2R1 bGUsIFNUX1NVQk1PRFVMRSk7CiAgICAgICAgbWF0Y2ggKCJzeW5jIGFsbCIs IGdmY19tYXRjaF9zeW5jX2FsbCwgU1RfU1lOQ19BTEwpOwogICAgICAgIG1h dGNoICgic3luYyBpbWFnZXMiLCBnZmNfbWF0Y2hfc3luY19pbWFnZXMsIFNU X1NZTkNfSU1BR0VTKTsKICAgICAgICBtYXRjaCAoInN5bmMgbWVtb3J5Iiwg Z2ZjX21hdGNoX3N5bmNfbWVtb3J5LCBTVF9TWU5DX01FTU9SWSk7CioqKioq KioqKioqKioqKiBnZmNfZW5jbG9zaW5nX3VuaXQgKGdmY19jb21waWxlX3N0 YXRlICoKKioqIDE1MzQsMTU0MSAqKioqCiAgCiAgICBmb3IgKHAgPSBnZmNf c3RhdGVfc3RhY2s7IHA7IHAgPSBwLT5wcmV2aW91cykKICAgICAgaWYgKHAt PnN0YXRlID09IENPTVBfRlVOQ1RJT04gfHwgcC0+c3RhdGUgPT0gQ09NUF9T VUJST1VUSU5FCiEgCXx8IHAtPnN0YXRlID09IENPTVBfTU9EVUxFIHx8IHAt PnN0YXRlID09IENPTVBfQkxPQ0tfREFUQQohIAl8fCBwLT5zdGF0ZSA9PSBD T01QX1BST0dSQU0pCiAgICAgICAgewogIAogIAlpZiAocmVzdWx0ICE9IE5V TEwpCi0tLSAxNTQ1LDE1NTIgLS0tLQogIAogICAgZm9yIChwID0gZ2ZjX3N0 YXRlX3N0YWNrOyBwOyBwID0gcC0+cHJldmlvdXMpCiAgICAgIGlmIChwLT5z dGF0ZSA9PSBDT01QX0ZVTkNUSU9OIHx8IHAtPnN0YXRlID09IENPTVBfU1VC Uk9VVElORQohIAl8fCBwLT5zdGF0ZSA9PSBDT01QX01PRFVMRSB8fCBwLT5z dGF0ZSA9PSBDT01QX1NVQk1PRFVMRQohIAl8fCBwLT5zdGF0ZSA9PSBDT01Q X0JMT0NLX0RBVEEgfHwgcC0+c3RhdGUgPT0gQ09NUF9QUk9HUkFNKQogICAg ICAgIHsKICAKICAJaWYgKHJlc3VsdCAhPSBOVUxMKQoqKioqKioqKioqKioq KiogZ2ZjX2FzY2lpX3N0YXRlbWVudCAoZ2ZjX3N0YXRlbWVudCBzdCkKKioq IDE2NjAsMTY2NSAqKioqCi0tLSAxNjcxLDE2NzkgLS0tLQogICAgICBjYXNl IFNUX0VORF9NT0RVTEU6CiAgICAgICAgcCA9ICJFTkQgTU9EVUxFIjsKICAg ICAgICBicmVhazsKKyAgICAgY2FzZSBTVF9FTkRfU1VCTU9EVUxFOgorICAg ICAgIHAgPSAiRU5EIFNVQk1PRFVMRSI7CisgICAgICAgYnJlYWs7CiAgICAg IGNhc2UgU1RfRU5EX1BST0dSQU06CiAgICAgICAgcCA9ICJFTkQgUFJPR1JB TSI7CiAgICAgICAgYnJlYWs7CioqKioqKioqKioqKioqKiBnZmNfYXNjaWlf c3RhdGVtZW50IChnZmNfc3RhdGVtZW50IHN0KQoqKiogMTc0MiwxNzQ3ICoq KioKLS0tIDE3NTYsMTc2NCAtLS0tCiAgICAgIGNhc2UgU1RfTU9EVUxFOgog ICAgICAgIHAgPSAiTU9EVUxFIjsKICAgICAgICBicmVhazsKKyAgICAgY2Fz ZSBTVF9TVUJNT0RVTEU6CisgICAgICAgcCA9ICJTVUJNT0RVTEUiOworICAg ICAgIGJyZWFrOwogICAgICBjYXNlIFNUX1BBVVNFOgogICAgICAgIHAgPSAi UEFVU0UiOwogICAgICAgIGJyZWFrOwoqKioqKioqKioqKioqKiogYWNjZXB0 X3N0YXRlbWVudCAoZ2ZjX3N0YXRlbWVudCBzdCkKKioqIDIxODYsMjE5MSAq KioqCi0tLSAyMjAzLDIyMDkgLS0tLQogICAgICBjYXNlIFNUX0ZVTkNUSU9O OgogICAgICBjYXNlIFNUX1NVQlJPVVRJTkU6CiAgICAgIGNhc2UgU1RfTU9E VUxFOgorICAgICBjYXNlIFNUX1NVQk1PRFVMRToKICAgICAgICBnZmNfY3Vy cmVudF9ucy0+cHJvY19uYW1lID0gZ2ZjX25ld19ibG9jazsKICAgICAgICBi cmVhazsKICAKKioqKioqKioqKioqKioqIGxvb3A6CioqKiAyOTMxLDI5MzYg KioqKgotLS0gMjk0OSwyOTU4IC0tLS0KICAJICBnZmNfZnJlZV9uYW1lc3Bh Y2UgKGdmY19jdXJyZW50X25zKTsKICAJICBnb3RvIGxvb3A7CiAgCX0KKyAg ICAgICAvKiBGMjAwOCBDMTIxMCBmb3JiaWRzIHRoZSBJTVBPUlQgc3RhdGVt ZW50IGluIG1vZHVsZSBwcm9jZWR1cmUKKyAJIGludGVyZmFjZSBib2RpZXMg YW5kIHRoZSBmbGFnIGlzIHNldCB0byBpbXBvcnQgc3ltYm9scy4gICovCisg ICAgICAgaWYgKGdmY19uZXdfYmxvY2stPmF0dHIubW9kdWxlX3Byb2NlZHVy ZSkKKyAgICAgICAgIGdmY19jdXJyZW50X25zLT5oYXNfaW1wb3J0X3NldCA9 IDE7CiAgICAgICAgYnJlYWs7CiAgCiAgICAgIGNhc2UgU1RfUFJPQ0VEVVJF OgoqKioqKioqKioqKioqKiogZGVjbFN0OgoqKiogMzI4MCwzMjg2ICoqKioK ICAJICBicmVhazsKICAKICAJY2FzZSBTVF9TVEFURU1FTlRfRlVOQ1RJT046 CiEgCSAgaWYgKGdmY19jdXJyZW50X3N0YXRlICgpID09IENPTVBfTU9EVUxF KQogIAkgICAgewogIAkgICAgICB1bmV4cGVjdGVkX3N0YXRlbWVudCAoc3Qp OwogIAkgICAgICBicmVhazsKLS0tIDMzMDIsMzMwOSAtLS0tCiAgCSAgYnJl YWs7CiAgCiAgCWNhc2UgU1RfU1RBVEVNRU5UX0ZVTkNUSU9OOgohIAkgIGlm IChnZmNfY3VycmVudF9zdGF0ZSAoKSA9PSBDT01QX01PRFVMRQohIAkgICAg ICB8fCBnZmNfY3VycmVudF9zdGF0ZSAoKSA9PSBDT01QX1NVQk1PRFVMRSkK ICAJICAgIHsKICAJICAgICAgdW5leHBlY3RlZF9zdGF0ZW1lbnQgKHN0KTsK ICAJICAgICAgYnJlYWs7CioqKioqKioqKioqKioqKiBwYXJzZV9jb250YWlu ZWQgKGludCBtb2R1bGUpCioqKiA0OTAzLDQ5MDggKioqKgotLS0gNDkyNiw0 OTMyIC0tLS0KICAJLyogVGhlc2Ugc3RhdGVtZW50cyBhcmUgYXNzb2NpYXRl ZCB3aXRoIHRoZSBlbmQgb2YgdGhlIGhvc3QgdW5pdC4gICovCiAgCWNhc2Ug U1RfRU5EX0ZVTkNUSU9OOgogIAljYXNlIFNUX0VORF9NT0RVTEU6CisgCWNh c2UgU1RfRU5EX1NVQk1PRFVMRToKICAJY2FzZSBTVF9FTkRfUFJPR1JBTToK ICAJY2FzZSBTVF9FTkRfU1VCUk9VVElORToKICAJICBhY2NlcHRfc3RhdGVt ZW50IChzdCk7CioqKioqKioqKioqKioqKiBwYXJzZV9jb250YWluZWQgKGlu dCBtb2R1bGUpCioqKiA0OTE5LDQ5MjUgKioqKgogIAl9CiAgICAgIH0KICAg IHdoaWxlIChzdCAhPSBTVF9FTkRfRlVOQ1RJT04gJiYgc3QgIT0gU1RfRU5E X1NVQlJPVVRJTkUKISAJICYmIHN0ICE9IFNUX0VORF9NT0RVTEUgJiYgc3Qg IT0gU1RfRU5EX1BST0dSQU0pOwogIAogICAgLyogVGhlIGZpcnN0IG5hbWVz cGFjZSBpbiB0aGUgbGlzdCBpcyBndWFyYW50ZWVkIHRvIG5vdCBoYXZlCiAg ICAgICBhbnl0aGluZyAod29ydGh3aGlsZSkgaW4gaXQuICAqLwotLS0gNDk0 Myw0OTUwIC0tLS0KICAJfQogICAgICB9CiAgICB3aGlsZSAoc3QgIT0gU1Rf RU5EX0ZVTkNUSU9OICYmIHN0ICE9IFNUX0VORF9TVUJST1VUSU5FCiEgCSAm JiBzdCAhPSBTVF9FTkRfTU9EVUxFICYmIHN0ICE9IFNUX0VORF9TVUJNT0RV TEUKISAJICYmIHN0ICE9IFNUX0VORF9QUk9HUkFNKTsKICAKICAgIC8qIFRo ZSBmaXJzdCBuYW1lc3BhY2UgaW4gdGhlIGxpc3QgaXMgZ3VhcmFudGVlZCB0 byBub3QgaGF2ZQogICAgICAgYW55dGhpbmcgKHdvcnRod2hpbGUpIGluIGl0 LiAgKi8KKioqKioqKioqKioqKioqIHBhcnNlX2NvbnRhaW5lZCAoaW50IG1v ZHVsZSkKKioqIDQ5MzksNDk0NCAqKioqCi0tLSA0OTY0LDQ5OTggLS0tLQog IH0KICAKICAKKyAvKiBUaGUgcmVzdWx0IHZhcmlhYmxlIGluIGEgTU9EVUxF IFBST0NFRFVSRSBuZWVkcyB0byBiZSBjcmVhdGVkIGFuZAorICAgICBpdHMg Y2hhcmFjdGVyaXN0aWNzIGNvcGllZCBmcm9tIHRoZSBpbnRlcmZhY2Ugc2lu Y2UgaXQgaXMgbmVpdGhlcgorICAgICBkZWNsYXJlZCBpbiB0aGUgcHJvY2Vk dXJlIGRlY2xhcmF0aW9uIG5vciBpbiB0aGUgc3BlY2lmaWNhdGlvbgorICAg ICBwYXJ0LiAgKi8KKyAKKyBzdGF0aWMgdm9pZAorIGdldF9tb2Rwcm9jX3Jl c3VsdCAodm9pZCkKKyB7CisgICBnZmNfc3ltYm9sICpwcm9jOworICAgaWYg KGdmY19zdGF0ZV9zdGFjay0+cHJldmlvdXMKKyAgICAgICAmJiBnZmNfc3Rh dGVfc3RhY2stPnByZXZpb3VzLT5zdGF0ZSA9PSBDT01QX0NPTlRBSU5TCisg ICAgICAgJiYgZ2ZjX3N0YXRlX3N0YWNrLT5wcmV2aW91cy0+cHJldmlvdXMt PnN0YXRlID09IENPTVBfU1VCTU9EVUxFKQorICAgICB7CisgICAgICAgcHJv YyA9IGdmY19jdXJyZW50X25zLT5wcm9jX25hbWUgPyBnZmNfY3VycmVudF9u cy0+cHJvY19uYW1lIDogTlVMTDsKKyAgICAgICBpZiAocHJvYyAhPSBOVUxM CisgCSAgJiYgcHJvYy0+YXR0ci5mdW5jdGlvbgorIAkgICYmIHByb2MtPnRz LmludGVyZmFjZQorIAkgICYmIHByb2MtPnRzLmludGVyZmFjZS0+cmVzdWx0 CisgCSAgJiYgcHJvYy0+dHMuaW50ZXJmYWNlLT5yZXN1bHQgIT0gcHJvYy0+ dHMuaW50ZXJmYWNlKQorIAl7CisgCSAgZ2ZjX2NvcHlfZHVtbXlfc3ltICgm cHJvYy0+cmVzdWx0LCBwcm9jLT50cy5pbnRlcmZhY2UtPnJlc3VsdCwgMSk7 CisgCSAgZ2ZjX3NldF9zeW1fcmVmZXJlbmNlZCAocHJvYy0+cmVzdWx0KTsK KyAJICBwcm9jLT5yZXN1bHQtPmF0dHIuaWZfc291cmNlID0gSUZTUkNfREVD TDsKKyAJICBnZmNfY29tbWl0X3N5bWJvbCAocHJvYy0+cmVzdWx0KTsKKyAJ fQorICAgICB9CisgfQorIAorIAogIC8qIFBhcnNlIGEgUFJPR1JBTSwgU1VC Uk9VVElORSwgRlVOQ1RJT04gdW5pdCBvciBCTE9DSyBjb25zdHJ1Y3QuICAq LwogIAogIHN0YXRpYyB2b2lkCioqKioqKioqKioqKioqKiBwYXJzZV9wcm9n dW5pdCAoZ2ZjX3N0YXRlbWVudCBzdCkKKioqIDQ5NDcsNDk1MiAqKioqCi0t LSA1MDAxLDUwMTEgLS0tLQogICAgZ2ZjX3N0YXRlX2RhdGEgKnA7CiAgICBp bnQgbjsKICAKKyAgIGlmIChnZmNfbmV3X2Jsb2NrCisgICAgICAgJiYgZ2Zj X25ld19ibG9jay0+YWJyX21vZHByb2NfZGVjbAorICAgICAgICYmIGdmY19u ZXdfYmxvY2stPmF0dHIuZnVuY3Rpb24pCisgICAgIGdldF9tb2Rwcm9jX3Jl c3VsdCAoKTsKKyAKICAgIHN0ID0gcGFyc2Vfc3BlYyAoc3QpOwogICAgc3dp dGNoIChzdCkKICAgICAgewoqKioqKioqKioqKioqKiogY29udGFpbnM6Cioq KiA1MDA2LDUwMTIgKioqKgogICAgICBpZiAocC0+c3RhdGUgPT0gQ09NUF9D T05UQUlOUykKICAgICAgICBuKys7CiAgCiEgICBpZiAoZ2ZjX2ZpbmRfc3Rh dGUgKENPTVBfTU9EVUxFKSA9PSB0cnVlKQogICAgICBuLS07CiAgCiAgICBp ZiAobiA+IDApCi0tLSA1MDY1LDUwNzIgLS0tLQogICAgICBpZiAocC0+c3Rh dGUgPT0gQ09NUF9DT05UQUlOUykKICAgICAgICBuKys7CiAgCiEgICBpZiAo Z2ZjX2ZpbmRfc3RhdGUgKENPTVBfTU9EVUxFKSA9PSB0cnVlCiEgICAgICAg fHwgZ2ZjX2ZpbmRfc3RhdGUgKENPTVBfU1VCTU9EVUxFKSA9PSB0cnVlKQog ICAgICBuLS07CiAgCiAgICBpZiAobiA+IDApCioqKioqKioqKioqKioqKiBw YXJzZV9ibG9ja19kYXRhICh2b2lkKQoqKiogNTEyNyw1MTMyICoqKioKLS0t IDUxODcsNTIyMiAtLS0tCiAgfQogIAogIAorIC8qIEZvbGxvd2luZyB0aGUg YXNzb2NpYXRpb24gb2YgdGhlIGFuY2VzdG9yIChzdWIpbW9kdWxlIHN5bWJv bHMsIHRoZXkKKyAgICBtdXN0IGJlIHNldCBob3N0IHJhdGhlciB0aGFuIHVz ZSBhc3NvY2lhdGVkIGFuZCBhbGwgbXVzdCBiZSBwdWJsaWMuCisgICAgVGhl eSBhcmUgZmxhZ2dlZCB1cCBieSAndXNlZF9pbl9zdWJtb2R1bGUnIHNvIHRo YXQgdGhleSBjYW4gYmUgc2V0CisgICAgREVDTF9FWFRFUk5BTCBpbiB0cmFu c19kZWNsLmMoZ2ZjX2ZpbmlzaF92YXJfZGVjbCkuICBPdGhlcndpc2UgdGhl CisgICAgbGlua2VyIGNob2tlcyBvbiBtdWx0aXBsZSBzeW1ib2wgZGVmaW5p dGlvbnMuICAqLworIAorIHN0YXRpYyB2b2lkCisgc2V0X3N5bXNfaG9zdF9h c3NvYyAoZ2ZjX3N5bWJvbCAqc3ltKQorIHsKKyAgIGdmY19jb21wb25lbnQg KmM7CisgCisgICBpZiAoc3ltID09IE5VTEwpCisgICAgIHJldHVybjsKKyAK KyAgIGlmIChzeW0tPmF0dHIubW9kdWxlX3Byb2NlZHVyZSkKKyAgICAgc3lt LT5hdHRyLmV4dGVybmFsID0gMDsKKyAKKyAvKiAgc3ltLT5hdHRyLmFjY2Vz cyA9IEFDQ0VTU19QVUJMSUM7ICAqLworIAorICAgc3ltLT5hdHRyLnVzZV9h c3NvYyA9IDA7CisgICBzeW0tPmF0dHIuaG9zdF9hc3NvYyA9IDE7CisgICBz eW0tPmF0dHIudXNlZF9pbl9zdWJtb2R1bGUgPTE7CisgCisgICBpZiAoc3lt LT5hdHRyLmZsYXZvciA9PSBGTF9ERVJJVkVEKQorICAgICB7CisgICAgICAg Zm9yIChjID0gc3ltLT5jb21wb25lbnRzOyBjOyBjID0gYy0+bmV4dCkKKyAJ Yy0+YXR0ci5hY2Nlc3MgPSBBQ0NFU1NfUFVCTElDOworICAgICB9CisgfQor IAogIC8qIFBhcnNlIGEgbW9kdWxlIHN1YnByb2dyYW0uICAqLwogIAogIHN0 YXRpYyB2b2lkCioqKioqKioqKioqKioqKiBwYXJzZV9tb2R1bGUgKHZvaWQp CioqKiA1MTQ2LDUxNTEgKioqKgotLS0gNTIzNiw1MjUwIC0tLS0KICAgICAg ICBzLT5kZWZpbmVkID0gMTsKICAgICAgfQogIAorICAgLyogU29tZXRoaW5n IGlzIG51bGxpbmcgdGhlIG1vZHVsZV9saXN0IGFmdGVyIHRoaXMgcG9pbnQu IFRoaXMgaXMgZ29vZAorICAgICAgc2luY2UgaXQgYWxsb3dzIHVzIHRvICdV U0UnIHRoZSBwYXJlbnQgbW9kdWxlcyB0aGF0IHRoZSBzdWJtb2R1bGUKKyAg ICAgIGluaGVyaXRzIGFuZCB0byBzZXQgKG1vc3QpIG9mIHRoZSBzeW1ib2xz IGFzIGhvc3QgYXNzb2NpYXRlZC4gICovCisgICBpZiAoZ2ZjX2N1cnJlbnRf c3RhdGUgKCkgPT0gQ09NUF9TVUJNT0RVTEUpCisgICAgIHsKKyAgICAgICB1 c2VfbW9kdWxlcyAoKTsKKyAgICAgICBnZmNfdHJhdmVyc2VfbnMgKGdmY19j dXJyZW50X25zLCBzZXRfc3ltc19ob3N0X2Fzc29jKTsKKyAgICAgfQorIAog ICAgc3QgPSBwYXJzZV9zcGVjIChTVF9OT05FKTsKICAKICAgIGVycm9yID0g ZmFsc2U7CioqKioqKioqKioqKioqKiBsb29wOgoqKiogNTE2MCw1MTY1ICoq KioKLS0tIDUyNTksNTI2NSAtLS0tCiAgICAgICAgYnJlYWs7CiAgCiAgICAg IGNhc2UgU1RfRU5EX01PRFVMRToKKyAgICAgY2FzZSBTVF9FTkRfU1VCTU9E VUxFOgogICAgICAgIGFjY2VwdF9zdGF0ZW1lbnQgKHN0KTsKICAgICAgICBi cmVhazsKICAKKioqKioqKioqKioqKioqIGxvb3A6CioqKiA1NDU1LDU0NjAg KioqKgotLS0gNTU1NSw1NTY4IC0tLS0KICAgICAgICBwYXJzZV9tb2R1bGUg KCk7CiAgICAgICAgYnJlYWs7CiAgCisgICAgIGNhc2UgU1RfU1VCTU9EVUxF OgorICAgICAgIHB1c2hfc3RhdGUgKCZzLCBDT01QX1NVQk1PRFVMRSwgZ2Zj X25ld19ibG9jayk7CisgICAgICAgYWNjZXB0X3N0YXRlbWVudCAoc3QpOwor IAorICAgICAgIGdmY19nZXRfZXJyb3JzIChOVUxMLCAmZXJyb3JzX2JlZm9y ZSk7CisgICAgICAgcGFyc2VfbW9kdWxlICgpOworICAgICAgIGJyZWFrOwor IAogICAgICAvKiBBbnl0aGluZyBlbHNlIHN0YXJ0cyBhIG5hbWVsZXNzIG1h aW4gcHJvZ3JhbSBibG9jay4gICovCiAgICAgIGRlZmF1bHQ6CiAgICAgICAg aWYgKHNlZW5fcHJvZ3JhbSkKKioqKioqKioqKioqKioqIGxvb3A6CioqKiA1 NDc5LDU0ODUgKioqKgogICAgICBnZmNfZHVtcF9wYXJzZV90cmVlIChnZmNf Y3VycmVudF9ucywgc3Rkb3V0KTsKICAKICAgIGdmY19nZXRfZXJyb3JzIChO VUxMLCAmZXJyb3JzKTsKISAgIGlmIChzLnN0YXRlID09IENPTVBfTU9EVUxF KQogICAgICB7CiAgICAgICAgZ2ZjX2R1bXBfbW9kdWxlIChzLnN5bS0+bmFt ZSwgZXJyb3JzX2JlZm9yZSA9PSBlcnJvcnMpOwogICAgICAgIGdmY19jdXJy ZW50X25zLT5kZXJpdmVkX3R5cGVzID0gZ2ZjX2Rlcml2ZWRfdHlwZXM7Ci0t LSA1NTg3LDU1OTMgLS0tLQogICAgICBnZmNfZHVtcF9wYXJzZV90cmVlIChn ZmNfY3VycmVudF9ucywgc3Rkb3V0KTsKICAKICAgIGdmY19nZXRfZXJyb3Jz IChOVUxMLCAmZXJyb3JzKTsKISAgIGlmIChzLnN0YXRlID09IENPTVBfTU9E VUxFIHx8IHMuc3RhdGUgPT0gQ09NUF9TVUJNT0RVTEUpCiAgICAgIHsKICAg ICAgICBnZmNfZHVtcF9tb2R1bGUgKHMuc3ltLT5uYW1lLCBlcnJvcnNfYmVm b3JlID09IGVycm9ycyk7CiAgICAgICAgZ2ZjX2N1cnJlbnRfbnMtPmRlcml2 ZWRfdHlwZXMgPSBnZmNfZGVyaXZlZF90eXBlczsKSW5kZXg6IGdjYy9mb3J0 cmFuL3BhcnNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2NjL2Zv cnRyYW4vcGFyc2UuaAkocmV2aXNpb24gMjI0NzI0KQotLS0gZ2NjL2ZvcnRy YW4vcGFyc2UuaAkod29ya2luZyBjb3B5KQoqKioqKioqKioqKioqKiogYWxv bmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KKioqIDI1LDMz ICoqKioKICAvKiBFbnVtIGZvciB3aGF0IHRoZSBjb21waWxlciBpcyBjdXJy ZW50bHkgZG9pbmcuICAqLwogIHR5cGVkZWYgZW51bQogIHsKISAgIENPTVBf Tk9ORSwgQ09NUF9QUk9HUkFNLCBDT01QX01PRFVMRSwgQ09NUF9TVUJST1VU SU5FLCBDT01QX0ZVTkNUSU9OLAohICAgQ09NUF9CTE9DS19EQVRBLCBDT01Q X0lOVEVSRkFDRSwgQ09NUF9ERVJJVkVELCBDT01QX0RFUklWRURfQ09OVEFJ TlMsCiEgICBDT01QX0JMT0NLLCBDT01QX0FTU09DSUFURSwgQ09NUF9JRiwK ICAgIENPTVBfRE8sIENPTVBfU0VMRUNULCBDT01QX0ZPUkFMTCwgQ09NUF9X SEVSRSwgQ09NUF9DT05UQUlOUywgQ09NUF9FTlVNLAogICAgQ09NUF9TRUxF Q1RfVFlQRSwgQ09NUF9PTVBfU1RSVUNUVVJFRF9CTE9DSywgQ09NUF9DUklU SUNBTCwgQ09NUF9ET19DT05DVVJSRU5UCiAgfQotLS0gMjUsMzMgLS0tLQog IC8qIEVudW0gZm9yIHdoYXQgdGhlIGNvbXBpbGVyIGlzIGN1cnJlbnRseSBk b2luZy4gICovCiAgdHlwZWRlZiBlbnVtCiAgewohICAgQ09NUF9OT05FLCBD T01QX1BST0dSQU0sIENPTVBfTU9EVUxFLCBDT01QX1NVQk1PRFVMRSwgQ09N UF9TVUJST1VUSU5FLAohICAgQ09NUF9GVU5DVElPTiwgQ09NUF9CTE9DS19E QVRBLCBDT01QX0lOVEVSRkFDRSwgQ09NUF9ERVJJVkVELAohICAgQ09NUF9E RVJJVkVEX0NPTlRBSU5TLCBDT01QX0JMT0NLLCBDT01QX0FTU09DSUFURSwg Q09NUF9JRiwKICAgIENPTVBfRE8sIENPTVBfU0VMRUNULCBDT01QX0ZPUkFM TCwgQ09NUF9XSEVSRSwgQ09NUF9DT05UQUlOUywgQ09NUF9FTlVNLAogICAg Q09NUF9TRUxFQ1RfVFlQRSwgQ09NUF9PTVBfU1RSVUNUVVJFRF9CTE9DSywg Q09NUF9DUklUSUNBTCwgQ09NUF9ET19DT05DVVJSRU5UCiAgfQpJbmRleDog Z2NjL2ZvcnRyYW4vcHJpbWFyeS5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KioqIGdjYy9mb3J0cmFuL3ByaW1hcnkuYwkocmV2aXNpb24gMjI0NzI0KQot LS0gZ2NjL2ZvcnRyYW4vcHJpbWFyeS5jCSh3b3JraW5nIGNvcHkpCioqKioq KioqKioqKioqKiBnZmNfbWF0Y2hfcnZhbHVlIChnZmNfZXhwciAqKnJlc3Vs dCkKKioqIDI5NjAsMjk2NiAqKioqCiAgCiAgICAgICAgc3QgPSBnZmNfZW5j bG9zaW5nX3VuaXQgKE5VTEwpOwogIAohICAgICAgIGlmIChzdCAhPSBOVUxM ICYmIHN0LT5zdGF0ZSA9PSBDT01QX0ZVTkNUSU9OCiAgCSAgJiYgc3QtPnN5 bSA9PSBzeW0KICAJICAmJiAhc3ltLT5hdHRyLnJlY3Vyc2l2ZSkKICAJewot LS0gMjk2MCwyOTY3IC0tLS0KICAKICAgICAgICBzdCA9IGdmY19lbmNsb3Np bmdfdW5pdCAoTlVMTCk7CiAgCiEgICAgICAgaWYgKHN0ICE9IE5VTEwKISAJ ICAmJiBzdC0+c3RhdGUgPT0gQ09NUF9GVU5DVElPTgogIAkgICYmIHN0LT5z eW0gPT0gc3ltCiAgCSAgJiYgIXN5bS0+YXR0ci5yZWN1cnNpdmUpCiAgCXsK KioqKioqKioqKioqKioqIG1hdGNoX3ZhcmlhYmxlIChnZmNfZXhwciAqKnJl c3VsdCwgaW50IGUKKioqIDMyNjQsMzI2OSAqKioqCi0tLSAzMjY1LDMyNzEg LS0tLQogICAgICAgb2Yga2V5d29yZHMsIHN1Y2ggYXMgJ2VuZCcsIGJlaW5n IHR1cm5lZCBpbnRvIHZhcmlhYmxlcyBieQogICAgICAgZmFpbGVkIG1hdGNo aW5nIHRvIGFzc2lnbm1lbnRzIGZvciwgZS5nLiwgRU5EIElOVEVSRkFDRS4g ICovCiAgICBpZiAoZ2ZjX2N1cnJlbnRfc3RhdGUgKCkgPT0gQ09NUF9NT0RV TEUKKyAgICAgICB8fCBnZmNfY3VycmVudF9zdGF0ZSAoKSA9PSBDT01QX1NV Qk1PRFVMRQogICAgICAgIHx8IGdmY19jdXJyZW50X3N0YXRlICgpID09IENP TVBfSU5URVJGQUNFCiAgICAgICAgfHwgZ2ZjX2N1cnJlbnRfc3RhdGUgKCkg PT0gQ09NUF9DT05UQUlOUykKICAgICAgaG9zdF9mbGFnID0gMDsKSW5kZXg6 IGdjYy9mb3J0cmFuL3Jlc29sdmUuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CioqKiBnY2MvZm9ydHJhbi9yZXNvbHZlLmMJKHJldmlzaW9uIDIyNDcyNCkK LS0tIGdjYy9mb3J0cmFuL3Jlc29sdmUuYwkod29ya2luZyBjb3B5KQoqKioq KioqKioqKioqKiogbm9faW5pdF9lcnJvcjoKKioqIDExMzAxLDExMzA2ICoq KioKLS0tIDExMzAxLDExMzMyIC0tLS0KICB9CiAgCiAgCisgLyogQ29tcGFy ZSB0aGUgZHVtbXkgY2hhcmFjdGVyaXN0aWNzIG9mIGEgbW9kdWxlIHByb2Nl ZHVyZSBpbnRlcmZhY2UKKyAgICBkZWNsYXJhdGlvbiB3aXRoIHRoZSBjb3Jy ZXNwb25kaW5nIGRlY2xhcmF0aW9uIGluIGEgc3VibW9kdWxlLiAgKi8KKyBz dGF0aWMgZ2ZjX2Zvcm1hbF9hcmdsaXN0ICpuZXdfZm9ybWFsOworIHN0YXRp YyBjaGFyIGVycm1zZ1syMDBdOworIAorIHN0YXRpYyB2b2lkCisgY29tcGFy ZV9mc3ltcyAoZ2ZjX3N5bWJvbCAqc3ltKQorIHsKKyAgIGdmY19zeW1ib2wg KmZzeW07CisgCisgICBpZiAoc3ltID09IE5VTEwgfHwgbmV3X2Zvcm1hbCA9 PSBOVUxMKQorICAgICByZXR1cm47CisgCisgICBmc3ltID0gbmV3X2Zvcm1h bC0+c3ltOworIAorICAgaWYgKHN5bSA9PSBmc3ltKQorICAgICByZXR1cm47 CisgCisgICBpZiAoc3RyY21wIChzeW0tPm5hbWUsIGZzeW0tPm5hbWUpID09 IDApCisgICAgIHsKKyAgICAgICBpZiAoIWdmY19jaGVja19kdW1teV9jaGFy YWN0ZXJpc3RpY3MgKGZzeW0sIHN5bSwgdHJ1ZSwgZXJybXNnLCAyMDApKQor IAlnZmNfZXJyb3IgKCIlcyBhdCAlTCIsIGVycm1zZywgJmZzeW0tPmRlY2xh cmVkX2F0KTsKKyAgICAgfQorIH0KKyAKKyAKICAvKiBSZXNvbHZlIGEgcHJv Y2VkdXJlLiAgKi8KICAKICBzdGF0aWMgYm9vbAoqKioqKioqKioqKioqKiog cmVzb2x2ZV9mbF9wcm9jZWR1cmUgKGdmY19zeW1ib2wgKnN5bSwgaQoqKiog MTE1NjUsMTE1NzAgKioqKgotLS0gMTE1OTEsMTE2NjEgLS0tLQogICAgaWYg KHN5bS0+YXR0ci5pZl9zb3VyY2UgIT0gSUZTUkNfREVDTCkKICAgICAgc3lt LT5hdHRyLmFycmF5X291dGVyX2RlcGVuZGVuY3kgPSAxOwogIAorICAgLyog Q29tcGFyZSB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIGEgbW9kdWxlIHByb2Nl ZHVyZSB3aXRoIHRoZQorICAgICAgaW50ZXJmYWNlIGRlY2xhcmF0aW9uLiBJ ZGVhbGx5IHRoaXMgd291bGQgYmUgZG9uZSB3aXRoCisgICAgICBnZmNfY29t cGFyZV9pbnRlcmZhY2VzIGJ1dCwgYXQgcHJlc2VudCwgdGhlIGZvcm1hbCBp bnRlcmZhY2UKKyAgICAgIGNhbm5vdCBiZSBjb3BpZWQgdG8gdGhlIHRzLmlu dGVyZmFjZS4gICovCisgICBpZiAoc3ltLT5hdHRyLm1vZHVsZV9wcm9jZWR1 cmUKKyAgICAgICAmJiBzeW0tPmF0dHIuaWZfc291cmNlID09IElGU1JDX0RF Q0wpCisgICAgIHsKKyAgICAgICBnZmNfc3ltYm9sICppZmFjZTsKKyAKKyAg ICAgICAvKiBTdG9wIHRoZSBkdW1teSBjaGFyYWN0ZXJpc3RpY3MgdGVzdCBm cm9tIHVzaW5nIHRoZSBpbnRlcmZhY2UKKyAJIHN5bWJvbCBpbnN0ZWFkIG9m ICdzeW0nLiAgKi8KKyAgICAgICBpZmFjZSA9IHN5bS0+dHMuaW50ZXJmYWNl OworICAgICAgIHN5bS0+dHMuaW50ZXJmYWNlID0gTlVMTDsKKyAKKyAgICAg ICBpZiAoaWZhY2UgPT0gTlVMTCkKKyAJZ290byBjaGVja19mb3JtYWw7Cisg CisgICAgICAgLyogQ2hlY2sgdGhlIHByb2NlZHVyZSBjaGFyYWN0ZXJpc3Rp Y3MuICAqLworICAgICAgIGlmIChzeW0tPmF0dHIucHVyZSAhPSBpZmFjZS0+ YXR0ci5wdXJlKQorIAl7CisgCSAgZ2ZjX2Vycm9yICgiTWlzbWF0Y2ggaW4g UFVSRSBhdHRyaWJ1dGUgYmV0d2VlbiBNT0RVTEUgIgorIAkJICAgICAiUFJP Q0VEVVJFIGF0ICVMIGFuZCBpdHMgaW50ZXJmYWNlIGluICVzIiwKKyAJCSAg ICAgJnN5bS0+ZGVjbGFyZWRfYXQsIGlmYWNlLT5tb2R1bGUpOworIAkgIHJl dHVybiBmYWxzZTsKKyAJfQorIAorICAgICAgIGlmIChzeW0tPmF0dHIuZWxl bWVudGFsICE9IGlmYWNlLT5hdHRyLmVsZW1lbnRhbCkKKyAJeworIAkgIGdm Y19lcnJvciAoIk1pc21hdGNoIGluIEVMRU1FTlRBTCBhdHRyaWJ1dGUgYmV0 d2VlbiBNT0RVTEUgIgorIAkJICAgICAiUFJPQ0VEVVJFIGF0ICVMIGFuZCBp dHMgaW50ZXJmYWNlIGluICVzIiwKKyAJCSAgICAgJnN5bS0+ZGVjbGFyZWRf YXQsIGlmYWNlLT5tb2R1bGUpOworIAkgIHJldHVybiBmYWxzZTsKKyAJfQor IAorICAgICAgIGlmIChzeW0tPmF0dHIucmVjdXJzaXZlICE9IGlmYWNlLT5h dHRyLnJlY3Vyc2l2ZSkKKyAJeworIAkgIGdmY19lcnJvciAoIk1pc21hdGNo IGluIFJFQ1VSU0lWRSBhdHRyaWJ1dGUgYmV0d2VlbiBNT0RVTEUgIgorIAkJ ICAgICAiUFJPQ0VEVVJFIGF0ICVMIGFuZCBpdHMgaW50ZXJmYWNlIGluICVz IiwKKyAJCSAgICAgJnN5bS0+ZGVjbGFyZWRfYXQsIGlmYWNlLT5tb2R1bGUp OworIAkgIHJldHVybiBmYWxzZTsKKyAJfQorIAorICAgICAgIC8qIENoZWNr IHRoZSByZXN1bHQgY2hhcmFjdGVyaXN0aWNzLiAgKi8KKyAgICAgICBpZiAo IWdmY19jaGVja19yZXN1bHRfY2hhcmFjdGVyaXN0aWNzIChzeW0sIGlmYWNl LCBlcnJtc2csIDIwMCkpCisgCXsKKyAJICBnZmNfZXJyb3IgKCIlcyBiZXR3 ZWVuIHRoZSBNT0RVTEUgUFJPQ0VEVVJFIGRlY2xhcmF0aW9uICIKKyAJCSAg ICAgImluIG1vZHVsZSAlcyBhbmQgdGhlIGRlY2xhcmF0aW9uIGF0ICVMIGlu ICIKKyAJCSAgICAgIlNVQk1PRFVMRSAlcyIsIGVycm1zZywgaWZhY2UtPm1v ZHVsZSwKKyAJCSAgICAgJnN5bS0+ZGVjbGFyZWRfYXQsIHN5bS0+bnMtPnBy b2NfbmFtZS0+bmFtZSk7CisgCSAgcmV0dXJuIGZhbHNlOworIAl9CisgCisg Y2hlY2tfZm9ybWFsOgorICAgICAgIC8qIENoZWNrIHRoZSBjaGFyY2F0ZXJp c3RpY3Mgb2YgdGhlIGZvcm1hbCBhcmd1bWVudHMuICAqLworICAgICAgIGlm IChzeW0tPmZvcm1hbCAmJiBzeW0tPmZvcm1hbF9ucykKKyAJeworIAkgIGZv ciAoYXJnID0gc3ltLT5mb3JtYWw7IGFyZyAmJiBhcmctPnN5bTsgYXJnID0g YXJnLT5uZXh0KQorIAkgICAgeworIAkgICAgICBuZXdfZm9ybWFsID0gYXJn OworIAkgICAgICBnZmNfdHJhdmVyc2VfbnMgKHN5bS0+Zm9ybWFsX25zLCBj b21wYXJlX2ZzeW1zKTsKKyAJICAgIH0KKyAJfQorIAorICAgICAgIHN5bS0+ dHMuaW50ZXJmYWNlID0gaWZhY2U7CisgICAgIH0KICAgIHJldHVybiB0cnVl OwogIH0KICAKSW5kZXg6IGdjYy9mb3J0cmFuL3N5bWJvbC5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKioqIGdjYy9mb3J0cmFuL3N5bWJvbC5jCShyZXZp c2lvbiAyMjQ3MjQpCi0tLSBnY2MvZm9ydHJhbi9zeW1ib2wuYwkod29ya2lu ZyBjb3B5KQoqKioqKioqKioqKioqKiogZ2ZjX2FkZF9wcm9jZWR1cmUgKHN5 bWJvbF9hdHRyaWJ1dGUgKmF0dAoqKiogMTUzOSwxNTQ1ICoqKioKICAgIGlm ICh3aGVyZSA9PSBOVUxMKQogICAgICB3aGVyZSA9ICZnZmNfY3VycmVudF9s b2N1czsKICAKISAgIGlmIChhdHRyLT5wcm9jICE9IFBST0NfVU5LTk9XTikK ICAgICAgewogICAgICAgIGdmY19lcnJvciAoIiVzIHByb2NlZHVyZSBhdCAl TCBpcyBhbHJlYWR5IGRlY2xhcmVkIGFzICVzIHByb2NlZHVyZSIsCiAgCQkg Z2ZjX2NvZGUyc3RyaW5nIChwcm9jZWR1cmVzLCB0KSwgd2hlcmUsCi0tLSAx NTM5LDE1NDUgLS0tLQogICAgaWYgKHdoZXJlID09IE5VTEwpCiAgICAgIHdo ZXJlID0gJmdmY19jdXJyZW50X2xvY3VzOwogIAohICAgaWYgKGF0dHItPnBy b2MgIT0gUFJPQ19VTktOT1dOICYmICFhdHRyLT5tb2R1bGVfcHJvY2VkdXJl KQogICAgICB7CiAgICAgICAgZ2ZjX2Vycm9yICgiJXMgcHJvY2VkdXJlIGF0 ICVMIGlzIGFscmVhZHkgZGVjbGFyZWQgYXMgJXMgcHJvY2VkdXJlIiwKICAJ CSBnZmNfY29kZTJzdHJpbmcgKHByb2NlZHVyZXMsIHQpLCB3aGVyZSwKKioq KioqKioqKioqKioqIGJvb2wKKioqIDE2NTUsMTY2NCAqKioqCiAgZ2ZjX2Fk ZF9leHBsaWNpdF9pbnRlcmZhY2UgKGdmY19zeW1ib2wgKnN5bSwgaWZzcmMg c291cmNlLAogIAkJCSAgICBnZmNfZm9ybWFsX2FyZ2xpc3QgKiBmb3JtYWws IGxvY3VzICp3aGVyZSkKICB7Ci0gCiAgICBpZiAoY2hlY2tfdXNlZCAoJnN5 bS0+YXR0ciwgc3ltLT5uYW1lLCB3aGVyZSkpCiAgICAgIHJldHVybiBmYWxz ZTsKICAKICAgIGlmICh3aGVyZSA9PSBOVUxMKQogICAgICB3aGVyZSA9ICZn ZmNfY3VycmVudF9sb2N1czsKICAKLS0tIDE2NTUsMTY2OSAtLS0tCiAgZ2Zj X2FkZF9leHBsaWNpdF9pbnRlcmZhY2UgKGdmY19zeW1ib2wgKnN5bSwgaWZz cmMgc291cmNlLAogIAkJCSAgICBnZmNfZm9ybWFsX2FyZ2xpc3QgKiBmb3Jt YWwsIGxvY3VzICp3aGVyZSkKICB7CiAgICBpZiAoY2hlY2tfdXNlZCAoJnN5 bS0+YXR0ciwgc3ltLT5uYW1lLCB3aGVyZSkpCiAgICAgIHJldHVybiBmYWxz ZTsKICAKKyAgIC8qIFNraXAgdGhlIGZvbGxvd2luZyBjaGVja3MgaW4gdGhl IGNhc2Ugb2YgYSBtb2R1bGVfcHJvY2VkdXJlcyBpbiBhCisgICAgICBzdWJt b2R1bGUgc2luY2UgdGhleSB3aWxsIG1hbmlmZXN0bHkgZmFpbC4gICovCisg ICBpZiAoc3ltLT5hdHRyLm1vZHVsZV9wcm9jZWR1cmUgPT0gMQorICAgICAg ICYmIHNvdXJjZSA9PSBJRlNSQ19ERUNMKQorICAgICBnb3RvIGZpbmlzaDsK KyAKICAgIGlmICh3aGVyZSA9PSBOVUxMKQogICAgICB3aGVyZSA9ICZnZmNf Y3VycmVudF9sb2N1czsKICAKKioqKioqKioqKioqKioqIGdmY19hZGRfZXhw bGljaXRfaW50ZXJmYWNlIChnZmNfc3ltYm9sICoKKioqIDE2NzcsMTY4MiAq KioqCi0tLSAxNjgyLDE2ODggLS0tLQogICAgICAgIHJldHVybiBmYWxzZTsK ICAgICAgfQogIAorIGZpbmlzaDoKICAgIHN5bS0+Zm9ybWFsID0gZm9ybWFs OwogICAgc3ltLT5hdHRyLmlmX3NvdXJjZSA9IHNvdXJjZTsKICAKKioqKioq KioqKioqKioqIGdmY19hZGRfdHlwZSAoZ2ZjX3N5bWJvbCAqc3ltLCBnZmNf dHlwZXMKKioqIDE3MDMsMTcwOSAqKioqCiAgICBpZiAoc3ltLT5hdHRyLnJl c3VsdCAmJiB0eXBlID09IEJUX1VOS05PV04gJiYgc3ltLT5ucy0+cHJvY19u YW1lKQogICAgICB0eXBlID0gc3ltLT5ucy0+cHJvY19uYW1lLT50cy50eXBl OwogIAohICAgaWYgKHR5cGUgIT0gQlRfVU5LTk9XTiAmJiAhKHN5bS0+YXR0 ci5mdW5jdGlvbiAmJiBzeW0tPmF0dHIuaW1wbGljaXRfdHlwZSkpCiAgICAg IHsKICAgICAgICBpZiAoc3ltLT5hdHRyLnVzZV9hc3NvYykKICAJZ2ZjX2Vy cm9yICgiU3ltYm9sICVxcyBhdCAlTCBjb25mbGljdHMgd2l0aCBzeW1ib2wg ZnJvbSBtb2R1bGUgJXFzLCAiCi0tLSAxNzA5LDE3MTggLS0tLQogICAgaWYg KHN5bS0+YXR0ci5yZXN1bHQgJiYgdHlwZSA9PSBCVF9VTktOT1dOICYmIHN5 bS0+bnMtPnByb2NfbmFtZSkKICAgICAgdHlwZSA9IHN5bS0+bnMtPnByb2Nf bmFtZS0+dHMudHlwZTsKICAKISAgIGlmICh0eXBlICE9IEJUX1VOS05PV04g JiYgIShzeW0tPmF0dHIuZnVuY3Rpb24gJiYgc3ltLT5hdHRyLmltcGxpY2l0 X3R5cGUpCiEgICAgICAgJiYgIShnZmNfc3RhdGVfc3RhY2stPnByZXZpb3Vz ICYmIGdmY19zdGF0ZV9zdGFjay0+cHJldmlvdXMtPnByZXZpb3VzCiEgCSAg ICYmIGdmY19zdGF0ZV9zdGFjay0+cHJldmlvdXMtPnByZXZpb3VzLT5zdGF0 ZSA9PSBDT01QX1NVQk1PRFVMRSkKISAgICAgICAmJiAhc3ltLT5hdHRyLm1v ZHVsZV9wcm9jZWR1cmUpCiAgICAgIHsKICAgICAgICBpZiAoc3ltLT5hdHRy LnVzZV9hc3NvYykKICAJZ2ZjX2Vycm9yICgiU3ltYm9sICVxcyBhdCAlTCBj b25mbGljdHMgd2l0aCBzeW1ib2wgZnJvbSBtb2R1bGUgJXFzLCAiCioqKioq KioqKioqKioqKiBmYWlsOgoqKiogMTg3NiwxODgxICoqKioKLS0tIDE4ODUs MTkyOCAtLS0tCiAgfQogIAogIAorIC8qIEEgZnVuY3Rpb24gdG8gZ2VuZXJh dGUgYSBkdW1teSBhcmd1bWVudCBzeW1ib2wgdXNpbmcgdGhhdCBmcm9tIHRo ZQorICAgIGludGVyZmFjZSBkZWNsYXJhdGlvbi4gQ2FuIGJlIHVzZWQgZm9y IHRoZSByZXN1bHQgc3ltYm9sIGFzIHdlbGwgaWYKKyAgICB0aGUgZmxhZyBp cyBzZXQuICAqLworIAorIGludAorIGdmY19jb3B5X2R1bW15X3N5bSAoZ2Zj X3N5bWJvbCAqKmRzeW0sIGdmY19zeW1ib2wgKnN5bSwgaW50IHJlc3VsdCkK KyB7CisgICBpbnQgcmM7CisgCisgICByYyA9IGdmY19nZXRfc3ltYm9sIChz eW0tPm5hbWUsIE5VTEwsIGRzeW0pOworICAgaWYgKHJjKQorICAgICByZXR1 cm4gcmM7CisgCisgICBpZiAoIWdmY19hZGRfdHlwZSAoKmRzeW0sICYoc3lt LT50cyksICZnZmNfY3VycmVudF9sb2N1cykpCisgICAgIHJldHVybiAxOwor IAorICAgaWYgKCFnZmNfY29weV9hdHRyICgmKCpkc3ltKS0+YXR0ciwgJihz eW0tPmF0dHIpLAorICAgICAgICZnZmNfY3VycmVudF9sb2N1cykpCisgICAg IHJldHVybiAxOworIAorICAgaWYgKCgqZHN5bSktPmF0dHIuZGltZW5zaW9u KQorICAgICAoKmRzeW0pLT5hcyA9IGdmY19jb3B5X2FycmF5X3NwZWMgKHN5 bS0+YXMpOworIAorICAgKCpkc3ltKS0+YXR0ci5jbGFzc19vayA9IHN5bS0+ YXR0ci5jbGFzc19vazsKKyAKKyAgIGlmICgoKmRzeW0pICE9IE5VTEwgJiYg IXJlc3VsdAorICAgICAgICYmICghZ2ZjX2FkZF9kdW1teSgmKCpkc3ltKS0+ YXR0ciwgKCpkc3ltKS0+bmFtZSwgTlVMTCkKKyAJICB8fCAhZ2ZjX21pc3Np bmdfYXR0ciAoJigqZHN5bSktPmF0dHIsIE5VTEwpKSkKKyAgICAgcmV0dXJu IDE7CisgICBlbHNlIGlmICgoKmRzeW0pICE9IE5VTEwgJiYgcmVzdWx0Cisg ICAgICAgJiYgKCFnZmNfYWRkX3Jlc3VsdCgmKCpkc3ltKS0+YXR0ciwgKCpk c3ltKS0+bmFtZSwgTlVMTCkKKyAJICB8fCAhZ2ZjX21pc3NpbmdfYXR0ciAo JigqZHN5bSktPmF0dHIsIE5VTEwpKSkKKyAgICAgcmV0dXJuIDE7CisgCisg ICByZXR1cm4gMDsKKyB9CisgCisgCiAgLyoqKioqKioqKioqKioqIENvbXBv bmVudCBuYW1lIG1hbmFnZW1lbnQgKioqKioqKioqKioqLwogIAogIC8qIENv bXBvbmVudCBuYW1lcyBvZiBhIGRlcml2ZWQgdHlwZSBmb3JtIHRoZWlyIG93 biBsaXR0bGUgbmFtZXNwYWNlcwpJbmRleDogZ2NjL2ZvcnRyYW4vdHJhbnMt ZGVjbC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy9mb3J0cmFu L3RyYW5zLWRlY2wuYwkocmV2aXNpb24gMjI0NzI0KQotLS0gZ2NjL2ZvcnRy YW4vdHJhbnMtZGVjbC5jCSh3b3JraW5nIGNvcHkpCioqKioqKioqKioqKioq KiBnZmNfc3ltX21hbmdsZWRfZnVuY3Rpb25faWQgKGdmY19zeW1ib2wKKioq IDM3OSwzODcgKioqKgogICAgICAvKiB1c2UgdGhlIGJpbmRpbmcgbGFiZWwg cmF0aGVyIHRoYW4gdGhlIG1hbmdsZWQgbmFtZSAqLwogICAgICByZXR1cm4g Z2V0X2lkZW50aWZpZXIgKHN5bS0+YmluZGluZ19sYWJlbCk7CiAgCiEgICBp ZiAoc3ltLT5tb2R1bGUgPT0gTlVMTCB8fCBzeW0tPmF0dHIucHJvYyA9PSBQ Uk9DX0VYVEVSTkFMCiAgICAgICAgfHwgKHN5bS0+bW9kdWxlICE9IE5VTEwg JiYgKHN5bS0+YXR0ci5leHRlcm5hbAogIAkgICAgfHwgc3ltLT5hdHRyLmlm X3NvdXJjZSA9PSBJRlNSQ19JRkJPRFkpKSkKICAgICAgewogICAgICAgIC8q IE1haW4gcHJvZ3JhbSBpcyBtYW5nbGVkIGludG8gTUFJTl9fLiAgKi8KICAg ICAgICBpZiAoc3ltLT5hdHRyLmlzX21haW5fcHJvZ3JhbSkKLS0tIDM3OSwz ODggLS0tLQogICAgICAvKiB1c2UgdGhlIGJpbmRpbmcgbGFiZWwgcmF0aGVy IHRoYW4gdGhlIG1hbmdsZWQgbmFtZSAqLwogICAgICByZXR1cm4gZ2V0X2lk ZW50aWZpZXIgKHN5bS0+YmluZGluZ19sYWJlbCk7CiAgCiEgICBpZiAoKHN5 bS0+bW9kdWxlID09IE5VTEwgfHwgc3ltLT5hdHRyLnByb2MgPT0gUFJPQ19F WFRFUk5BTAogICAgICAgIHx8IChzeW0tPm1vZHVsZSAhPSBOVUxMICYmIChz eW0tPmF0dHIuZXh0ZXJuYWwKICAJICAgIHx8IHN5bS0+YXR0ci5pZl9zb3Vy Y2UgPT0gSUZTUkNfSUZCT0RZKSkpCisgICAgICAgJiYgIXN5bS0+YXR0ci5t b2R1bGVfcHJvY2VkdXJlKQogICAgICB7CiAgICAgICAgLyogTWFpbiBwcm9n cmFtIGlzIG1hbmdsZWQgaW50byBNQUlOX18uICAqLwogICAgICAgIGlmIChz eW0tPmF0dHIuaXNfbWFpbl9wcm9ncmFtKQoqKioqKioqKioqKioqKiogZ2Zj X2ZpbmlzaF92YXJfZGVjbCAodHJlZSBkZWNsLCBnZmNfc3ltYgoqKiogNjAx LDYwNyAqKioqCiAgICAgIH0KICAKICAgIC8qIElmIGEgdmFyaWFibGUgaXMg VVNFIGFzc29jaWF0ZWQsIGl0J3MgYWx3YXlzIGV4dGVybmFsLiAgKi8KISAg IGlmIChzeW0tPmF0dHIudXNlX2Fzc29jKQogICAgICB7CiAgICAgICAgREVD TF9FWFRFUk5BTCAoZGVjbCkgPSAxOwogICAgICAgIFRSRUVfUFVCTElDIChk ZWNsKSA9IDE7Ci0tLSA2MDIsNjA4IC0tLS0KICAgICAgfQogIAogICAgLyog SWYgYSB2YXJpYWJsZSBpcyBVU0UgYXNzb2NpYXRlZCwgaXQncyBhbHdheXMg ZXh0ZXJuYWwuICAqLwohICAgaWYgKHN5bS0+YXR0ci51c2VfYXNzb2MgfHwg c3ltLT5hdHRyLnVzZWRfaW5fc3VibW9kdWxlKQogICAgICB7CiAgICAgICAg REVDTF9FWFRFUk5BTCAoZGVjbCkgPSAxOwogICAgICAgIFRSRUVfUFVCTElD IChkZWNsKSA9IDE7CioqKioqKioqKioqKioqKiBnZmNfZ2V0X3N5bWJvbF9k ZWNsIChnZmNfc3ltYm9sICogc3ltKQoqKiogMTMyMSwxMzI2ICoqKioKLS0t IDEzMjIsMTMyOCAtLS0tCiAgICBnY2NfYXNzZXJ0IChzeW0tPmF0dHIucmVm ZXJlbmNlZAogIAkgICAgICB8fCBzeW0tPmF0dHIuZmxhdm9yID09IEZMX1BS T0NFRFVSRQogIAkgICAgICB8fCBzeW0tPmF0dHIudXNlX2Fzc29jCisgCSAg ICAgIHx8IHN5bS0+YXR0ci51c2VkX2luX3N1Ym1vZHVsZQogIAkgICAgICB8 fCBzeW0tPm5zLT5wcm9jX25hbWUtPmF0dHIuaWZfc291cmNlID09IElGU1JD X0lGQk9EWQogIAkgICAgICB8fCAoc3ltLT5tb2R1bGUgJiYgc3ltLT5hdHRy LmlmX3NvdXJjZSAhPSBJRlNSQ19ERUNMCiAgCQkgICYmIHN5bS0+YmFja2Vu ZF9kZWNsKSk7CkluZGV4OiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3N1 Ym1vZHVsZV8xLmY5MAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioqKiBnY2Mv dGVzdHN1aXRlL2dmb3J0cmFuLmRnL3N1Ym1vZHVsZV8xLmY5MAkocmV2aXNp b24gMCkKLS0tIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvc3VibW9kdWxl XzEuZjkwCSh3b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKgoqKiogMCAq KioqCi0tLSAxLDE3NCAtLS0tCisgISB7IGRnLWRvIHJ1biB9CisgIQorICEg QmFzaWMgdGVzdCBvZiBzdWJtb2R1bGUgZnVuY3Rpb25hbGl0eS4KKyAhCisg ISBDb250cmlidXRlZCBieSBQYXVsIFRob21hcyAgPHBhdWx0QGdjYy5nbnUu b3JnPgorICEKKyAgbW9kdWxlIGZvb19pbnRlcmZhY2UKKyAgICBpbXBsaWNp dCBub25lCisgICAgY2hhcmFjdGVyKGxlbiA9IDEwMCkgOjogbWVzc2FnZQor ICAgIGNoYXJhY3RlcihsZW4gPSAxMDApIDo6IG1lc3NhZ2UyCisgCisgICAg dHlwZSBmb28KKyAgICAgIGNoYXJhY3RlcihsZW49MTUpIDo6IGdyZWV0aW5n ID0gIkhlbGxvLCB3b3JsZCEgICIKKyAgICAgIGNoYXJhY3RlcihsZW49MTUp LCBwcml2YXRlIDo6IGJ5ZWJ5ZSA9ICJhZGlldSwgd29ybGQhICAiCisgICAg Y29udGFpbnMKKyAgICAgIHByb2NlZHVyZSA6OiBncmVldCA9PiBzYXlfaGVs bG8KKyAgICAgIHByb2NlZHVyZSA6OiBmYXJld2VsbCA9PiBieWUKKyAgICAg IHByb2NlZHVyZSwgcHJpdmF0ZSA6OiBhZGlldSA9PiBieWVieWUKKyAgICBl bmQgdHlwZSBmb28KKyAKKyAgICBpbnRlcmZhY2UKKyAgICAgIG1vZHVsZSBz dWJyb3V0aW5lIHNheV9oZWxsbyh0aGlzKQorICAgICAgICBjbGFzcyhmb28p LCBpbnRlbnQoaW4pIDo6IHRoaXMKKyAgICAgIGVuZCBzdWJyb3V0aW5lCisg CisgICAgICBtb2R1bGUgc3Vicm91dGluZSBieWUodGhpcykKKyAgICAgICAg Y2xhc3MoZm9vKSwgaW50ZW50KGluKSA6OiB0aGlzCisgICAgICBlbmQgc3Vi cm91dGluZQorIAorICAgICAgbW9kdWxlIHN1YnJvdXRpbmUgYnllYnllKHRo aXMsIHRoYXQpCisgICAgICAgIGNsYXNzKGZvbyksIGludGVudChpbikgOjog dGhpcworICAgICAgICBjbGFzcyhmb28pLCBpbnRlbnQoaW5PVVQpLCBhbGxv Y2F0YWJsZSA6OiB0aGF0CisgICAgICBlbmQgc3Vicm91dGluZQorIAorICAg ICAgbW9kdWxlIGZ1bmN0aW9uIHJlYWxmIChhcmcpIHJlc3VsdCAocmVzKQor ICAgICAgICByZWFsIDo6IGFyZywgcmVzCisgICAgICBlbmQgZnVuY3Rpb24K KyAKKyAgICAgIGludGVnZXIgbW9kdWxlIGZ1bmN0aW9uIGludGYgKGFyZykK KyAgICAgICAgaW50ZWdlciA6OiBhcmcKKyAgICAgIGVuZCBmdW5jdGlvbgor IAorICAgICAgcmVhbCBtb2R1bGUgZnVuY3Rpb24gcmVhbGcgKGFyZykKKyAg ICAgICAgcmVhbCA6OiBhcmcKKyAgICAgIGVuZCBmdW5jdGlvbgorIAorICAg ICAgaW50ZWdlciBtb2R1bGUgZnVuY3Rpb24gaW50ZyAoYXJnKQorICAgICAg ICBpbnRlZ2VyIDo6IGFyZworICAgICAgZW5kIGZ1bmN0aW9uCisgCisgICAg ZW5kIGludGVyZmFjZQorIAorICAgIGludGVnZXIgOjogZmFjdG9yID0gNQor IAorICBjb250YWlucworIAorICAgIHN1YnJvdXRpbmUgc211cmYKKyAgICAg IGNsYXNzKGZvbyksIGFsbG9jYXRhYmxlIDo6IHRoaXMKKyAgICAgIGFsbG9j YXRlICh0aGlzKQorICAgICAgbWVzc2FnZSA9ICJzYXlfaGVsbG8gZnJvbSBT TVVSRiAtLS0+IgorICAgICAgY2FsbCBzYXlfaGVsbG8gKHRoaXMpCisgICAg ZW5kIHN1YnJvdXRpbmUKKyAgZW5kIG1vZHVsZQorIAorICEKKyAgIFNVQk1P RFVMRSAoZm9vX2ludGVyZmFjZSkgZm9vX2ludGVyZmFjZV9zb24KKyAhCisg ICBjb250YWlucworICEgVGVzdCBtb2R1bGUgcHJvY2VkdXJlIHdpdGggY29u dmVudGlvbmFsIHNwZWNpZmljYXRpb24gcGFydCBmb3IgZHVtbWllcworICAg ICAgbW9kdWxlIHN1YnJvdXRpbmUgc2F5X2hlbGxvKHRoaXMpCisgICAgICAg IGNsYXNzKGZvbyksIGludGVudChpbikgOjogdGhpcworICAgICAgICBjbGFz cyhmb28pLCBhbGxvY2F0YWJsZSA6OiB0aGF0CisgICAgICAgIGFsbG9jYXRl ICh0aGF0LCBzb3VyY2UgPSB0aGlzKQorICEgICAgICAgY2FsbCB0aGlzJWZh cmV3ZWxsICAgICAgICAgISBOT1RFIFdFTEw6IFRoaXMgY29tcGlsZXMgYW5k IGNhdXNlcyBhIGNyYXNoIGluIHJ1bi10aW1lCisgISAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVlIHRvIHJlY3Vy c2lvbiB0aHJvdWdoIHRoZSBjYWxsIHRvIHRoaXMgcHJvY2VkdXJlIGZyb20K KyAhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzYXkgaGVsbG8uCisgICAgICAgIG1lc3NhZ2UgPSB0aGF0JWdyZWV0 aW5nCisgCisgISBDaGVjayB0aGF0IGRlc2NlbmRhbnQgbW9kdWxlIHByb2Nl ZHVyZSBpcyBjb3JyZWN0bHkgcHJvY2Vzc2VkCisgICAgICAgIGlmIChpbnRm ICg3NykgLm5lLiBmYWN0b3IqNzcpIGNhbGwgYWJvcnQKKyAgICAgIGVuZCBz dWJyb3V0aW5lCisgCisgICAgICBtb2R1bGUgZnVuY3Rpb24gcmVhbGYgKGFy ZykgcmVzdWx0IChyZXMpCisgICAgICAgIHJlYWwgOjogYXJnLCByZXMKKyAg ICAgICAgcmVzID0gMiphcmcKKyAgICAgIGVuZCBmdW5jdGlvbgorIAorICAg ZW5kIFNVQk1PRFVMRSBmb29faW50ZXJmYWNlX3NvbgorIAorICEKKyAhIENo ZWNrIHRoYXQgbXVsdGlwbGUgZ2VuZXJhdGlvbnMgb2Ygc3VibW9kdWxlcyBh cmUgT0sKKyAgIFNVQk1PRFVMRSAoZm9vX2ludGVyZmFjZTpmb29faW50ZXJm YWNlX3NvbikgZm9vX2ludGVyZmFjZV9ncmFuZHNvbgorICEKKyAgIGNvbnRh aW5zCisgCisgICAgICBtb2R1bGUgcHJvY2VkdXJlIGludGYKKyAgICAgICAg aW50ZiA9IGZhY3RvciphcmcKKyAgICAgIGVuZCBQUk9DRURVUkUKKyAKKyAg IGVuZCBTVUJNT0RVTEUgZm9vX2ludGVyZmFjZV9ncmFuZHNvbgorIAorICEK KyAgIFNVQk1PRFVMRSAoZm9vX2ludGVyZmFjZSkgZm9vX2ludGVyZmFjZV9k YXVnaHRlcgorICEKKyAgIGNvbnRhaW5zCisgISBUZXN0IG1vZHVsZSBwcm9j ZWR1cmUgd2l0aCBhYmJyZXZpYXRlZCBkZWNsYXJhdGlvbiBhbmQgbm8gc3Bl Y2lmaWNhdGlvbiBvZiBkdW1taWVzCisgICAgICBtb2R1bGUgcHJvY2VkdXJl IGJ5ZQorICAgICAgICBjbGFzcyhmb28pLCBhbGxvY2F0YWJsZSA6OiB0aGF0 CisgICAgICAgIGNhbGwgc2F5X2hlbGxvICh0aGlzKQorICEgY2hlY2sgYWNj ZXNzIHRvIGEgUFJJVkFURSBwcm9jZWR1cmUgcG9pbnRlciB0aGF0IGFjY2Vz c2VzIGEgcHJpdmF0ZSBjb21wb25lbnQKKyAgICAgICAgY2FsbCB0aGlzJWFk aWV1ICh0aGF0KQorICAgICAgICBtZXNzYWdlMiA9IHRoYXQlZ3JlZXRpbmcK KyAgICAgIGVuZCBQUk9DRURVUkUKKyAKKyAhIFRlc3QgbW9kdWxlIHByb2Nl ZHVyZSBwb2ludGVkIHRvIGJ5IFBSSVZBVEUgY29tcG9uZW50IG9mIGZvbwor ICAgICAgbW9kdWxlIHByb2NlZHVyZSBieWVieWUKKyAgICAgICAgYWxsb2Nh dGUgKHRoYXQsIHNvdXJjZSA9IHRoaXMpCisgISBBY2Nlc3MgYSBQUklWQVRF IGNvbXBvbmVudCBvZiBmb28KKyAgICAgICAgdGhhdCVncmVldGluZyA9IHRo YXQlYnllYnllCisgICAgICBlbmQgUFJPQ0VEVVJFCisgCisgICAgICBtb2R1 bGUgcHJvY2VkdXJlIGludGcKKyAgICAgICAgaW50ZyA9IDMqYXJnCisgICAg ICBlbmQgUFJPQ0VEVVJFCisgCisgICAgICBtb2R1bGUgcHJvY2VkdXJlIHJl YWxnCisgICAgICAgIHJlYWxnID0gMyphcmcKKyAgICAgIGVuZCBQUk9DRURV UkUKKyAKKyAgIGVuZCBTVUJNT0RVTEUgZm9vX2ludGVyZmFjZV9kYXVnaHRl cgorIAorICEKKyAgcHJvZ3JhbSB0cnkKKyAgICB1c2UgZm9vX2ludGVyZmFj ZQorICAgIGltcGxpY2l0IG5vbmUKKyAgICB0eXBlKGZvbykgOjogYmFyCisg CisgICAgY2FsbCBjbGVhcl9tZXNzYWdlcworICAgIGNhbGwgYmFyJWdyZWV0 ICEgdHlwZWJvdW5kIGNhbGwKKyAgICBpZiAodHJpbSAobWVzc2FnZSkgLm5l LiAiSGVsbG8sIHdvcmxkISIpIGNhbGwgYWJvcnQKKyAKKyAgICBjYWxsIGNs ZWFyX21lc3NhZ2VzCisgICAgYmFyJWdyZWV0aW5nID0gIkcnZGF5LCB3b3Js ZCEiCisgICAgY2FsbCBzYXlfaGVsbG8oYmFyKSAhIENoZWNrcyB1c2UgYXNz b2NpYXRpb24gb2YgJ3NheV9oZWxsbycKKyAgICBpZiAodHJpbSAobWVzc2Fn ZSkgLm5lLiAiRydkYXksIHdvcmxkISIpIGNhbGwgYWJvcnQKKyAKKyAgICBj YWxsIGNsZWFyX21lc3NhZ2VzCisgICAgYmFyJWdyZWV0aW5nID0gIkhpLCB3 b3JsZCEiCisgICAgY2FsbCBieWUoYmFyKSAhIENoZWNrcyB1c2UgYXNzb2Np YXRpb24gaW4gYW5vdGhlciBzdWJtb2R1bGUKKyAgICBpZiAodHJpbSAobWVz c2FnZSkgLm5lLiAiSGksIHdvcmxkISIpIGNhbGwgYWJvcnQKKyAgICBpZiAo dHJpbSAobWVzc2FnZTIpIC5uZS4gImFkaWV1LCB3b3JsZCEiKSBjYWxsIGFi b3J0CisgCisgICAgY2FsbCBjbGVhcl9tZXNzYWdlcworICAgIGNhbGwgc211 cmYgISBDaGVja3MgaG9zdCBhc3NvY2lhdGlvbiBvZiAnc2F5X2hlbGxvJwor ICAgIGlmICh0cmltIChtZXNzYWdlKSAubmUuICJIZWxsbywgd29ybGQhIikg Y2FsbCBhYm9ydAorIAorICAgIGNhbGwgY2xlYXJfbWVzc2FnZXMKKyAgICBi YXIlZ3JlZXRpbmcgPSAiZmFyZXdlbGwgICAgICIKKyAgICBjYWxsIGJhciVm YXJld2VsbAorICAgIGlmICh0cmltIChtZXNzYWdlKSAubmUuICJmYXJld2Vs bCIpIGNhbGwgYWJvcnQKKyAgICBpZiAodHJpbSAobWVzc2FnZTIpIC5uZS4g ImFkaWV1LCB3b3JsZCEiKSBjYWxsIGFib3J0CisgCisgICAgaWYgKHJlYWxm KDIuMCkgLm5lLiA0LjApIGNhbGwgYWJvcnQgISBDaGVjayBtb2R1bGUgcHJv Y2VkdXJlIHdpdGggZXhwbGljaXQgcmVzdWx0CisgICAgaWYgKGludGYoMikg Lm5lLiAxMCkgY2FsbCBhYm9ydCAgICAgISBkaXR0bworICAgIGlmIChyZWFs ZygzLjApIC5uZS4gOS4wKSBjYWxsIGFib3J0ICEgQ2hlY2sgbW9kdWxlIHBy b2NlZHVyZSB3aXRoIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHJlc3VsdAorICAg IGlmIChpbnRnKDMpIC5uZS4gOSkgY2FsbCBhYm9ydCAgICAgICEgZGl0dG8K KyAgY29udGFpbnMKKyAgICBzdWJyb3V0aW5lIGNsZWFyX21lc3NhZ2VzCisg ICAgICBtZXNzYWdlID0gIiIKKyAgICAgIG1lc3NhZ2UyID0gIiIKKyAgICBl bmQgc3Vicm91dGluZQorICBlbmQgcHJvZ3JhbQorICEKKyAKSW5kZXg6IGdj Yy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvc3VibW9kdWxlXzIuZjkwCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKioqIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4u ZGcvc3VibW9kdWxlXzIuZjkwCShyZXZpc2lvbiAwKQotLS0gZ2NjL3Rlc3Rz dWl0ZS9nZm9ydHJhbi5kZy9zdWJtb2R1bGVfMi5mOTAJKHdvcmtpbmcgY29w eSkKKioqKioqKioqKioqKioqCioqKiAwICoqKioKLS0tIDEsMTAxIC0tLS0K KyAhIHsgZGctZG8gcnVuIH0KKyAhCisgISBUZXN0IGR1bW15IGFuZCByZXN1 bHQgYXJyYXlzIGluIG1vZHVsZSBwcm9jZWR1cmVzCisgIQorICEgQ29udHJp YnV0ZWQgYnkgUGF1bCBUaG9tYXMgIDxwYXVsdEBnY2MuZ251Lm9yZz4KKyAh CisgIG1vZHVsZSBmb29faW50ZXJmYWNlCisgICAgaW1wbGljaXQgbm9uZQor ICAgIHR5cGUgZm9vCisgICAgICBjaGFyYWN0ZXIobGVuPTE2KSA6OiBncmVl dGluZyA9ICJIZWxsbywgd29ybGQhICAgIgorICAgICAgY2hhcmFjdGVyKGxl bj0xNiksIHByaXZhdGUgOjogYnllYnllID0gImFkaWV1LCB3b3JsZCEgICAi CisgICAgZW5kIHR5cGUgZm9vCisgCisgICAgaW50ZXJmYWNlCisgICAgICBt b2R1bGUgZnVuY3Rpb24gYXJyYXkxKHRoaXMpIHJlc3VsdCAodGhhdCkKKyAg ICAgICAgdHlwZShmb28pLCBpbnRlbnQoaW4pLCBkaW1lbnNpb24oOikgOjog dGhpcworICAgICAgICB0eXBlKGZvbyksIGFsbG9jYXRhYmxlLCBkaW1lbnNp b24oOikgOjogdGhhdAorICAgICAgZW5kIGZ1bmN0aW9uCisgICAgICBjaGFy YWN0ZXIoMTYpIG1vZHVsZSBmdW5jdGlvbiBhcnJheTIodGhpcywgdGhhdCkK KyAgICAgICAgdHlwZShmb28pLCBpbnRlbnQoaW4pLCBkaW1lbnNpb24oOikg OjogdGhpcworICAgICAgICB0eXBlKGZvbyksIGFsbG9jYXRhYmxlLCBkaW1l bnNpb24oOikgOjogdGhhdAorICAgICAgZW5kIGZ1bmN0aW9uCisgICAgICBt b2R1bGUgc3Vicm91dGluZSBhcnJheTModGhpcywgdGhhdCkKKyAgICAgICAg dHlwZShmb28pLCBpbnRlbnQoaW4pLCBkaW1lbnNpb24oOikgOjogdGhpcwor ICAgICAgICB0eXBlKGZvbyksIGludGVudChpbk9VVCksIGFsbG9jYXRhYmxl LCBkaW1lbnNpb24oOikgOjogdGhhdAorICAgICAgZW5kIHN1YnJvdXRpbmUK KyAgICAgIG1vZHVsZSBzdWJyb3V0aW5lIGFycmF5NCh0aGlzLCB0aGF0KQor ICAgICAgICB0eXBlKGZvbyksIGludGVudChpbiksIGRpbWVuc2lvbig6KSA6 OiB0aGlzCisgICAgICAgIHR5cGUoZm9vKSwgaW50ZW50KGluT1VUKSwgYWxs b2NhdGFibGUsIGRpbWVuc2lvbig6KSA6OiB0aGF0CisgICAgICBlbmQgc3Vi cm91dGluZQorICAgIGVuZCBpbnRlcmZhY2UKKyAgZW5kIG1vZHVsZQorIAor ICEKKyAgIFNVQk1PRFVMRSAoZm9vX2ludGVyZmFjZSkgZm9vX2ludGVyZmFj ZV9zb24KKyAhCisgICBjb250YWlucworIAorICEgVGVzdCBhcnJheSBjaGFy YWN0ZXJpc3RpY3MgZm9yIGR1bW15IGFuZCByZXN1bHQgYXJlIE9LCisgICAg ICBtb2R1bGUgZnVuY3Rpb24gYXJyYXkxICh0aGlzKSByZXN1bHQodGhhdCkK KyAgICAgICAgdHlwZShmb28pLCBpbnRlbnQoaW4pLCBkaW1lbnNpb24oOikg OjogdGhpcworICAgICAgICB0eXBlKGZvbyksIGFsbG9jYXRhYmxlLCBkaW1l bnNpb24oOikgOjogdGhhdAorICAgICAgICBhbGxvY2F0ZSAodGhhdChzaXpl KHRoaXMpKSwgc291cmNlID0gdGhpcykKKyAgICAgICAgdGhhdCVncmVldGlu ZyA9IHRoYXQlYnllYnllCisgICAgICBlbmQgZnVuY3Rpb24KKyAKKyAhIFRl c3QgYXJyYXkgY2hhcmFjdGVyaXN0aWNzIGZvciBkdW1teSBhbmQgcmVzdWx0 IGFyZSBPSyBmb3IKKyAhIGFiYnJldmlhdGVkIG1vZHVsZSBwcm9jZWR1cmUg ZGVjbGFyYXRpb24uCisgICAgICBtb2R1bGUgcHJvY2VkdXJlIGFycmF5Mgor ICAgICAgICBhbGxvY2F0ZSAodGhhdChzaXplKHRoaXMpKSwgc291cmNlID0g dGhpcykKKyAgICAgICAgdGhhdCVncmVldGluZyA9IHRoYXQlYnllYnllCisg ICAgICAgIGFycmF5MiA9IHRyaW0gKHRoYXQoc2l6ZSAodGhhdCkpJWdyZWV0 aW5nKDE6NSkpLy8iLCBwZW9wbGUhIgorICAgICAgZW5kIFBST0NFRFVSRQor IAorICAgZW5kIFNVQk1PRFVMRSBmb29faW50ZXJmYWNlX3NvbgorIAorICEK KyAgIFNVQk1PRFVMRSAoZm9vX2ludGVyZmFjZSkgZm9vX2ludGVyZmFjZV9k YXVnaHRlcgorICEKKyAgIGNvbnRhaW5zCisgCisgISBUZXN0IGFycmF5IGNo YXJhY3RlcmlzdGljcyBmb3IgZHVtbWllcyBhcmUgT0sKKyAgICAgIG1vZHVs ZSBzdWJyb3V0aW5lIGFycmF5Myh0aGlzLCB0aGF0KQorICAgICAgICB0eXBl KGZvbyksIGludGVudChpbiksIGRpbWVuc2lvbig6KSA6OiB0aGlzCisgICAg ICAgIHR5cGUoZm9vKSwgaW50ZW50KGluT1VUKSwgYWxsb2NhdGFibGUsIGRp bWVuc2lvbig6KSA6OiB0aGF0CisgICAgICAgIGFsbG9jYXRlICh0aGF0KHNp emUodGhpcykpLCBzb3VyY2UgPSB0aGlzKQorICAgICAgICB0aGF0JWdyZWV0 aW5nID0gdGhhdCVieWVieWUKKyAgICAgIGVuZCBzdWJyb3V0aW5lCisgCisg ISBUZXN0IGFycmF5IGNoYXJhY3RlcmlzdGljcyBmb3IgZHVtbWllcyBhcmUg T0sgZm9yCisgISBhYmJyZXZpYXRlZCBtb2R1bGUgcHJvY2VkdXJlIGRlY2xh cmF0aW9uLgorICAgICAgbW9kdWxlIHByb2NlZHVyZSBhcnJheTQKKyAgICAg ICAgaW50ZWdlciA6OiBpCisgICAgICAgIGFsbG9jYXRlICh0aGF0KHNpemUo dGhpcykpLCBzb3VyY2UgPSB0aGlzKQorICAgICAgICB0aGF0JWdyZWV0aW5n ID0gdGhhdCVieWVieWUKKyAgICAgICAgZG8gaSA9IDEsIHNpemUgKHRoYXQp CisgICAgICAgICAgdGhhdChpKSVncmVldGluZyA9IHRyaW0gKHRoYXQoaSkl Z3JlZXRpbmcoMTo1KSkvLyIsIHBlb3BsZSEiCisgICAgICAgIGVuZCBkbwor ICAgICAgZW5kIFBST0NFRFVSRQorICAgZW5kIFNVQk1PRFVMRSBmb29faW50 ZXJmYWNlX2RhdWdodGVyCisgCisgIQorICBwcm9ncmFtIHRyeQorICAgIHVz ZSBmb29faW50ZXJmYWNlCisgICAgaW1wbGljaXQgbm9uZQorICAgIHR5cGUo Zm9vKSwgZGltZW5zaW9uKDIpIDo6IGJhcgorICAgIHR5cGUgKGZvbyksIGRp bWVuc2lvbig6KSwgYWxsb2NhdGFibGUgOjogYXJnCisgCisgICAgYXJnID0g YXJyYXkxKGJhcikgISB0eXBlYm91bmQgY2FsbAorICAgIGlmIChhbnkgKGFy ZyVncmVldGluZyAubmUuIFsiYWRpZXUsIHdvcmxkISAgICIsICJhZGlldSwg d29ybGQhICAgIl0pKSBjYWxsIGFib3J0CisgICAgZGVhbGxvY2F0ZSAoYXJn KQorICAgIGlmICh0cmltIChhcnJheTIgKGJhciwgYXJnKSkgLm5lLiAiYWRp ZXUsIHBlb3BsZSEiKSBjYWxsIGFib3J0CisgICAgZGVhbGxvY2F0ZSAoYXJn KQorICAgIGNhbGwgYXJyYXkzIChiYXIsIGFyZykgISB0eXBlYm91bmQgY2Fs bAorICAgIGlmIChhbnkgKGFyZyVncmVldGluZyAubmUuIFsiYWRpZXUsIHdv cmxkISAgICIsICJhZGlldSwgd29ybGQhICAgIl0pKSBjYWxsIGFib3J0Cisg ICAgZGVhbGxvY2F0ZSAoYXJnKQorICAgIGNhbGwgYXJyYXk0IChiYXIsIGFy ZykgISB0eXBlYm91bmQgY2FsbAorICAgIGlmIChhbnkgKGFyZyVncmVldGlu ZyAubmUuIFsiYWRpZXUsIHBlb3BsZSEiLCAiYWRpZXUsIHBlb3BsZSEiXSkp IGNhbGwgYWJvcnQKKyAgY29udGFpbnMKKyAgZW5kIHByb2dyYW0KKyAhCklu ZGV4OiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3N1Ym1vZHVsZV8zLmY5 MAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CioqKiBnY2MvdGVzdHN1aXRlL2dm b3J0cmFuLmRnL3N1Ym1vZHVsZV8zLmY5MAkocmV2aXNpb24gMCkKLS0tIGdj Yy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvc3VibW9kdWxlXzMuZjkwCSh3b3Jr aW5nIGNvcHkpCioqKioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDM2 IC0tLS0KKyAhIHsgZGctZG8gY29tcGlsZSB9CisgISB7IGRnLW9wdGlvbnMg Ii1zdGQ9ZjIwMDMiIH0KKyAhCisgISBDaGVjayBlbmZvcmNlbWVudCBvZiBG MjAwOCBzdGFuZGFyZCBmb3IgTU9EVUxFIFBST0NFRFVSRVMgYW5kIFNVQk1P RFVMRVMKKyAhIFRoaXMgaXMgcmF0aGVyIGJhcmUtYm9uZXMgdG8gcmVkdWNl IHRoZSBudW1iZXIgb2YgZXJyb3IgbWVzc2FnZXMgdG9vIHRoZQorICEgZXNz ZW50aWFsIG1pbmltdW0uCisgIQorICEgQ29udHJpYnV0ZWQgYnkgUGF1bCBU aG9tYXMgIDxwYXVsdEBnY2MuZ251Lm9yZz4KKyAhCisgIG1vZHVsZSBmb29f aW50ZXJmYWNlCisgICAgaW1wbGljaXQgbm9uZQorIAorICAgIGludGVyZmFj ZQorICAgICAgbW9kdWxlIGZ1bmN0aW9uIGFycmF5MSh0aGlzKSByZXN1bHQg KHRoYXQpICEgeyBkZy1lcnJvciAiTU9EVUxFIHByZWZpeCIgfQorICAgICAg ZW5kIGZ1bmN0aW9uICEgeyBkZy1lcnJvciAiRXhwZWN0aW5nIEVORCBJTlRF UkZBQ0UiIH0KKyAgICAgIGNoYXJhY3RlcigxNikgbW9kdWxlIGZ1bmN0aW9u IGFycmF5Mih0aGlzLCB0aGF0KSAhIHsgZGctZXJyb3IgIk1PRFVMRSBwcmVm aXgiIH0KKyAgICAgIGVuZCBmdW5jdGlvbiAhIHsgZGctZXJyb3IgIkV4cGVj dGluZyBFTkQgSU5URVJGQUNFIiB9CisgICAgZW5kIGludGVyZmFjZQorICBl bmQgbW9kdWxlCisgCisgIQorICAgU1VCTU9EVUxFIChmb29faW50ZXJmYWNl KSBmb29faW50ZXJmYWNlX3NvbiAhIHsgZGctZXJyb3IgIlNVQk1PRFVMRSBk ZWNsYXJhdGlvbiIgfQorICEKKyAgIGNvbnRhaW5zCisgCisgICAgICBtb2R1 bGUgZnVuY3Rpb24gYXJyYXkxICh0aGlzKSByZXN1bHQodGhhdCkgISB7IGRn LWVycm9yICJNT0RVTEUgcHJlZml4IiB9CisgICAgICBlbmQgZnVuY3Rpb24g ISB7IGRnLWVycm9yICJFeHBlY3RpbmcgRU5EIFBST0dSQU0iIH0KKyAKKyAh IFRlc3QgYXJyYXkgY2hhcmFjdGVyaXN0aWNzIGZvciBkdW1teSBhbmQgcmVz dWx0IGFyZSBPSyBmb3IKKyAhIGFiYnJldmlhdGVkIG1vZHVsZSBwcm9jZWR1 cmUgZGVjbGFyYXRpb24uCisgICAgICBtb2R1bGUgcHJvY2VkdXJlIGFycmF5 MiAhIHsgZGctZXJyb3IgIm11c3QgYmUgaW4gYSBnZW5lcmljIG1vZHVsZSBp bnRlcmZhY2UiIH0KKyAgICAgIGVuZCBQUk9DRURVUkUgISB7IGRnLWVycm9y ICJFeHBlY3RpbmcgRU5EIFBST0dSQU0iIH0KKyAKKyAgIGVuZCBTVUJNT0RV TEUgZm9vX2ludGVyZmFjZV9zb24gISB7IGRnLWVycm9yICJFeHBlY3Rpbmcg RU5EIFBST0dSQU0iIH0KKyAKKyBlbmQgISB7IGRnLWVycm9yICJDT05UQUlO UyBzdGF0ZW1lbnQgd2l0aG91dCBGVU5DVElPTiBvciBTVUJST1VUSU5FIiB9 CkluZGV4OiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3N1Ym1vZHVsZV80 LmY5MAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CioqKiBnY2MvdGVzdHN1aXRl L2dmb3J0cmFuLmRnL3N1Ym1vZHVsZV80LmY5MAkocmV2aXNpb24gMCkKLS0t IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvc3VibW9kdWxlXzQuZjkwCSh3 b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAx LDE0NiAtLS0tCisgISB7IGRnLWRvIGNvbXBpbGUgfQorICEKKyAhIFRlc3Rz IGNvbXBhcmlzb25zIG9mIE1PRFVMRSBQUk9DRURVUkUgY2hhcmFjdGVyaXN0 aWNzIGFuZAorICEgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGVpciBkdW1t aWVzLiBBbHNvIHRlc3RzIHRoZSBlcnJvcgorICEgYXJpc2luZyBmcm9tIHJl ZGVmaW5pbmcgZHVtbWllcyBhbmQgcmVzdWx0cyBpbiBNT0RVTEUKKyAhIHBy b2NlZHVyZXMuCisgIQorICEgQ29udHJpYnV0ZWQgYnkgUGF1bCBUaG9tYXMg IDxwYXVsdEBnY2MuZ251Lm9yZz4KKyAhCisgIG1vZHVsZSBmb29faW50ZXJm YWNlCisgICAgaW1wbGljaXQgbm9uZQorICAgIHR5cGUgZm9vCisgICAgICBj aGFyYWN0ZXIobGVuPTE2KSA6OiBncmVldGluZyA9ICJIZWxsbywgd29ybGQh ICAgIgorICAgICAgY2hhcmFjdGVyKGxlbj0xNiksIHByaXZhdGUgOjogYnll YnllID0gImFkaWV1LCB3b3JsZCEgICAiCisgICAgZW5kIHR5cGUgZm9vCisg CisgICAgaW50ZXJmYWNlCisgICAgICBtb2R1bGUgZnVuY3Rpb24gYXJyYXkx KHRoaXMpIHJlc3VsdCAodGhhdCkKKyAgICAgICAgdHlwZShmb28pLCBpbnRl bnQoaW4pLCBkaW1lbnNpb24oOikgOjogdGhpcworICAgICAgICB0eXBlKGZv byksIGFsbG9jYXRhYmxlLCBkaW1lbnNpb24oOikgOjogdGhhdAorICAgICAg ZW5kIGZ1bmN0aW9uCisgICAgICBjaGFyYWN0ZXIoMTYpIG1vZHVsZSBmdW5j dGlvbiBhcnJheTIodGhpcywgdGhhdCkKKyAgICAgICAgdHlwZShmb28pLCBp bnRlbnQoaW4pLCBkaW1lbnNpb24oOikgOjogdGhpcworICAgICAgICB0eXBl KGZvbyksIGFsbG9jYXRhYmxlLCBkaW1lbnNpb24oOikgOjogdGhhdAorICAg ICAgZW5kIGZ1bmN0aW9uCisgICAgICBtb2R1bGUgc3Vicm91dGluZSBhcnJh eTModGhpcywgdGhhdCkKKyAgICAgICAgdHlwZShmb28pLCBpbnRlbnQoaW4p LCBkaW1lbnNpb24oOikgOjogdGhpcworICAgICAgICB0eXBlKGZvbyksIGlu dGVudChpbk9VVCksIGFsbG9jYXRhYmxlLCBkaW1lbnNpb24oOikgOjogdGhh dAorICAgICAgZW5kIHN1YnJvdXRpbmUKKyAgICAgIG1vZHVsZSBzdWJyb3V0 aW5lIGFycmF5NCh0aGlzLCB0aGF0KQorICAgICAgICB0eXBlKGZvbyksIGlu dGVudChpbiksIGRpbWVuc2lvbig6KSA6OiB0aGlzCisgICAgICAgIHR5cGUo Zm9vKSwgaW50ZW50KGluT1VUKSwgYWxsb2NhdGFibGUsIGRpbWVuc2lvbig6 KSA6OiB0aGF0CisgICAgICBlbmQgc3Vicm91dGluZQorICAgICAgaW50ZWdl ciBtb2R1bGUgZnVuY3Rpb24gc2NhbGFyMSAoYXJnKQorICAgICAgICAgcmVh bCwgaW50ZW50KGluKSA6OiBhcmcKKyAgICAgIGVuZCBmdW5jdGlvbgorICAg ICAgbW9kdWxlIGZ1bmN0aW9uIHNjYWxhcjIgKGFyZykgcmVzdWx0KHJlcykK KyAgICAgICAgIHJlYWwsIGludGVudChpbikgOjogYXJnCisgICAgICAgICBy ZWFsIDo6IHJlcworICAgICAgZW5kIGZ1bmN0aW9uCisgICAgICAgbW9kdWxl IGZ1bmN0aW9uIHNjYWxhcjMgKGFyZykgcmVzdWx0KHJlcykKKyAgICAgICAg IHJlYWwsIGludGVudChpbikgOjogYXJnCisgICAgICAgICByZWFsIDo6IHJl cworICAgICAgZW5kIGZ1bmN0aW9uCisgICAgICAgbW9kdWxlIGZ1bmN0aW9u IHNjYWxhcjQgKGFyZykgcmVzdWx0KHJlcykKKyAgICAgICAgIHJlYWwsIGlu dGVudChpbikgOjogYXJnCisgICAgICAgICBjb21wbGV4IDo6IHJlcworICAg ICAgZW5kIGZ1bmN0aW9uCisgICAgICAgbW9kdWxlIGZ1bmN0aW9uIHNjYWxh cjUgKGFyZykgcmVzdWx0KHJlcykKKyAgICAgICAgIHJlYWwsIGludGVudChp bikgOjogYXJnCisgICAgICAgICByZWFsLCBhbGxvY2F0YWJsZSA6OiByZXMK KyAgICAgIGVuZCBmdW5jdGlvbgorICAgICAgIG1vZHVsZSBmdW5jdGlvbiBz Y2FsYXI2IChhcmcpIHJlc3VsdChyZXMpCisgICAgICAgICByZWFsLCBpbnRl bnQoaW4pIDo6IGFyZworICAgICAgICAgcmVhbCwgYWxsb2NhdGFibGUgOjog cmVzCisgICAgICBlbmQgZnVuY3Rpb24KKyAgICAgICBtb2R1bGUgZnVuY3Rp b24gc2NhbGFyNyAoYXJnKSByZXN1bHQocmVzKQorICAgICAgICAgcmVhbCwg aW50ZW50KGluKSA6OiBhcmcKKyAgICAgICAgIHJlYWwsIGFsbG9jYXRhYmxl IDo6IHJlcworICAgICAgZW5kIGZ1bmN0aW9uCisgICAgZW5kIGludGVyZmFj ZQorICBlbmQgbW9kdWxlCisgCisgIQorICAgU1VCTU9EVUxFIChmb29faW50 ZXJmYWNlKSBmb29faW50ZXJmYWNlX3NvbgorICEKKyAgIGNvbnRhaW5zCisg CisgICAgICBtb2R1bGUgZnVuY3Rpb24gYXJyYXkxICh0aGlzKSByZXN1bHQo dGhhdCkgISB7IGRnLWVycm9yICJSYW5rIG1pc21hdGNoIGluIGZ1bmN0aW9u IHJlc3VsdCIgfQorICAgICAgICB0eXBlKGZvbyksIGludGVudChpbiksIGRp bWVuc2lvbig6KSA6OiB0aGlzCisgICAgICAgIHR5cGUoZm9vKSwgYWxsb2Nh dGFibGUgOjogdGhhdAorICAgICAgZW5kIGZ1bmN0aW9uCisgCisgICAgICBj aGFyYWN0ZXIoMTYpIG1vZHVsZSBmdW5jdGlvbiBhcnJheTIodGhpcykgISB7 IGRnLWVycm9yICJNaXNtYXRjaCBpbiBudW1iZXIgb2YgTU9EVUxFIFBST0NF RFVSRSBmb3JtYWwgYXJndW1lbnRzIiB9CisgICAgICAgIHR5cGUoZm9vKSwg aW50ZW50KGluKSwgZGltZW5zaW9uKDopIDo6IHRoaXMKKyAgICAgICAgdHlw ZShmb28pLCBhbGxvY2F0YWJsZSwgZGltZW5zaW9uKDopIDo6IHRoYXQKKyAg ICAgICAgYWxsb2NhdGUgKHRoYXQoMiksIHNvdXJjZSA9IHRoaXMoMSkpCisg ICAgICAgIHRoYXQlZ3JlZXRpbmcgPSB0aGF0JWJ5ZWJ5ZQorICAgICAgICBh cnJheTIgPSB0cmltICh0aGF0KHNpemUgKHRoYXQpKSVncmVldGluZygxOjUp KS8vIiwgcGVvcGxlISIKKyAgICAgIGVuZCBmdW5jdGlvbgorIAorICAgICAg bW9kdWxlIHN1YnJvdXRpbmUgYXJyYXkzKHRoaXNzLCB0aGF0KSAhIHsgZGct ZXJyb3IgIk1pc21hdGNoIGluIE1PRFVMRSBQUk9DRURVUkUgZm9ybWFsIGFy Z3VtZW50IG5hbWVzIiB9CisgICAgICAgIHR5cGUoZm9vKSwgaW50ZW50KGlu KSwgZGltZW5zaW9uKDopIDo6IHRoaXNzCisgICAgICAgIHR5cGUoZm9vKSwg aW50ZW50KGluT1VUKSwgYWxsb2NhdGFibGUsIGRpbWVuc2lvbig6KSA6OiB0 aGF0CisgICAgICAgIGFsbG9jYXRlICh0aGF0KHNpemUodGhpc3MpKSwgc291 cmNlID0gdGhpc3MpCisgICAgICAgIHRoYXQlZ3JlZXRpbmcgPSB0aGF0JWJ5 ZWJ5ZQorICAgICAgZW5kIHN1YnJvdXRpbmUKKyAKKyAgICAgIG1vZHVsZSBz dWJyb3V0aW5lIGFycmF5NCh0aGlzLCB0aGF0LCB0aGVfb3RoZXIpICEgeyBk Zy1lcnJvciAiTWlzbWF0Y2ggaW4gbnVtYmVyIG9mIE1PRFVMRSBQUk9DRURV UkUgZm9ybWFsIGFyZ3VtZW50cyIgfQorICAgICAgICB0eXBlKGZvbyksIGlu dGVudChpbiksIGRpbWVuc2lvbig6KSA6OiB0aGlzCisgICAgICAgIHR5cGUo Zm9vKSwgaW50ZW50KGluT1VUKSwgYWxsb2NhdGFibGUsIGRpbWVuc2lvbig6 KSA6OiB0aGF0LCB0aGVfb3RoZXIKKyAgICAgICAgaW50ZWdlciA6OiBpCisg ICAgICAgIGFsbG9jYXRlICh0aGF0KHNpemUodGhpcykpLCBzb3VyY2UgPSB0 aGlzKQorICAgICAgICB0aGF0JWdyZWV0aW5nID0gdGhhdCVieWVieWUKKyAg ICAgICAgZG8gaSA9IDEsIHNpemUgKHRoYXQpCisgICAgICAgICAgdGhhdChp KSVncmVldGluZyA9IHRyaW0gKHRoYXQoaSklZ3JlZXRpbmcoMTo1KSkvLyIs IHBlb3BsZSEiCisgICAgICAgIGVuZCBkbworICAgICAgZW5kIHN1YnJvdXRp bmUKKyAKKyAgICAgIHJlY3Vyc2l2ZSBtb2R1bGUgZnVuY3Rpb24gc2NhbGFy MSAoYXJnKSAhIHsgZGctZXJyb3IgIk1pc21hdGNoIGluIFJFQ1VSU0lWRSIg fQorICAgICAgICAgcmVhbCwgaW50ZW50KGluKSA6OiBhcmcKKyAgICAgIGVu ZCBmdW5jdGlvbgorIAorICAgICAgcHVyZSBtb2R1bGUgZnVuY3Rpb24gc2Nh bGFyMiAoYXJnKSByZXN1bHQocmVzKSAhIHsgZGctZXJyb3IgIk1pc21hdGNo IGluIFBVUkUiIH0KKyAgICAgICAgIHJlYWwsIGludGVudChpbikgOjogYXJn CisgICAgICAgICByZWFsIDo6IHJlcworICAgICAgZW5kIGZ1bmN0aW9uCisg CisgICAgICBtb2R1bGUgcHJvY2VkdXJlIHNjYWxhcjcKKyAgICAgICAgcmVh bCwgaW50ZW50KGluKSA6OiBhcmcgISB7IGRnLWVycm9yICJyZWRlZmluaXRp b24gb2YgdGhlIGRlY2xhcmF0aW9uIiB9CisgICAgICAgIHJlYWwsIGFsbG9j YXRhYmxlIDo6IHJlcyAhIHsgZGctZXJyb3IgInJlZGVmaW5pdGlvbiBvZiB0 aGUgZGVjbGFyYXRpb24iIH0KKyAgICAgIGVuZCBmdW5jdGlvbiAhIHsgZGct ZXJyb3IgIkV4cGVjdGluZyBFTkQgUFJPQ0VEVVJFIHN0YXRlbWVudCIgfQor ICAgICAgZW5kIHByb2NlZHVyZSAhIFRoaXMgcHJldmVudHMgYSBjYXNjYWRl IG9mIGVycm9ycy4KKyAgIGVuZCBTVUJNT0RVTEUgZm9vX2ludGVyZmFjZV9z b24KKyAKKyAhCisgICBTVUJNT0RVTEUgKGZvb19pbnRlcmZhY2UpIGZvb19p bnRlcmZhY2VfZGF1Z2h0ZXIKKyAhCisgICBjb250YWlucworIAorICAgICAg IG1vZHVsZSBmdW5jdGlvbiBzY2FsYXIzIChhcmcpIHJlc3VsdChyZXMpICEg eyBkZy1lcnJvciAiVHlwZSBtaXNtYXRjaCBpbiBhcmd1bWVudCIgfQorICAg ICAgICAgaW50ZWdlciwgaW50ZW50KGluKSA6OiBhcmcKKyAgICAgICAgIHJl YWwgOjogcmVzCisgICAgICBlbmQgZnVuY3Rpb24KKyAKKyAgICAgICBtb2R1 bGUgZnVuY3Rpb24gc2NhbGFyNCAoYXJnKSByZXN1bHQocmVzKSAhIHsgZGct ZXJyb3IgIlR5cGUgbWlzbWF0Y2ggaW4gZnVuY3Rpb24gcmVzdWx0IiB9Cisg ICAgICAgICByZWFsLCBpbnRlbnQoaW4pIDo6IGFyZworICAgICAgICAgcmVh bCA6OiByZXMKKyAgICAgIGVuZCBmdW5jdGlvbgorIAorICAgICAgIG1vZHVs ZSBmdW5jdGlvbiBzY2FsYXI1IChhcmcpIHJlc3VsdChyZXMpICEgeyBkZy1l cnJvciAiQUxMT0NBVEFCTEUgYXR0cmlidXRlIG1pc21hdGNoIGluIGZ1bmN0 aW9uIHJlc3VsdCAiIH0KKyAgICAgICAgIHJlYWwsIGludGVudChpbikgOjog YXJnCisgICAgICAgICByZWFsIDo6IHJlcworICAgICAgZW5kIGZ1bmN0aW9u CisgCisgICAgICAgbW9kdWxlIGZ1bmN0aW9uIHNjYWxhcjYgKGFyZykgcmVz dWx0KHJlcykgISB7IGRnLWVycm9yICJSYW5rIG1pc21hdGNoIGluIGFyZ3Vt ZW50IiB9CisgICAgICAgICByZWFsLCBpbnRlbnQoaW4pLCBkaW1lbnNpb24o MikgOjogYXJnCisgICAgICAgICByZWFsLCBhbGxvY2F0YWJsZSA6OiByZXMK KyAgICAgIGVuZCBmdW5jdGlvbgorICAgZW5kIFNVQk1PRFVMRSBmb29faW50 ZXJmYWNlX2RhdWdodGVyCisgCisgIQorICBwcm9ncmFtIHRyeQorICAgIHVz ZSBmb29faW50ZXJmYWNlCisgIGVuZCBwcm9ncmFtCisgIQpJbmRleDogZ2Nj L3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9zdWJtb2R1bGVfNS5mOTAKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQoqKiogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5k Zy9zdWJtb2R1bGVfNS5mOTAJKHJldmlzaW9uIDApCi0tLSBnY2MvdGVzdHN1 aXRlL2dmb3J0cmFuLmRnL3N1Ym1vZHVsZV81LmY5MAkod29ya2luZyBjb3B5 KQoqKioqKioqKioqKioqKioKKioqIDAgKioqKgotLS0gMSw1MSAtLS0tCisg ISB7IGRnLWRvIGNvbXBpbGUgfQorICEKKyAhIENoZWNrcyB0aGF0IFBSSVZB VEUvUFVCTElDIG5vdCBhbGxvd2VkIGluIHN1Ym1vZHVsZXMuIEFsc28sIElN UE9SVAorICEgaXMgbm90IGFsbG93ZWQgaW4gYSBtb2R1bGUgcHJvY2VkdXJl IGludGVyZmFjZSBib2R5LgorICEKKyAhIENvbnRyaWJ1dGVkIGJ5IFBhdWwg VGhvbWFzICA8cGF1bHRAZ2NjLmdudS5vcmc+CisgIQorIG1vZHVsZSBmb29f aW50ZXJmYWNlCisgICBpbXBsaWNpdCBub25lCisgICB0eXBlIGZvbworICAg ICBjaGFyYWN0ZXIobGVuPTE2KSwgcHJpdmF0ZSA6OiBieWVieWUgPSAiYWRp ZXUsIHdvcmxkISAgICIKKyAgIGVuZCB0eXBlIGZvbworIGVuZCBtb2R1bGUK KyAKKyBtb2R1bGUgZm9vX2ludGVyZmFjZV9icm90aGVyCisgICB1c2UgZm9v X2ludGVyZmFjZQorICAgaW1wbGljaXQgbm9uZQorICAgaW50ZXJmYWNlCisg ICAgICBtb2R1bGUgc3Vicm91dGluZSBhcnJheTModGhpcywgdGhhdCkKKyAg ICAgICAgaW1wb3J0ICEgeyBkZy1lcnJvciAibm90IHBlcm1pdHRlZCBpbiBh IG1vZHVsZSBwcm9jZWR1cmUgaW50ZXJmYWNlIGJvZHkiIH0KKyAgICAgICAg dHlwZShmb28pLCBpbnRlbnQoaW4pLCBkaW1lbnNpb24oOikgOjogdGhpcwor ICAgICAgICB0eXBlKGZvbyksIGludGVudChpbk9VVCksIGFsbG9jYXRhYmxl LCBkaW1lbnNpb24oOikgOjogdGhhdAorICAgICAgZW5kIHN1YnJvdXRpbmUK KyAgIGVuZCBpbnRlcmZhY2UKKyBlbmQgbW9kdWxlCisgCisgU1VCTU9EVUxF IChmb29faW50ZXJmYWNlKSBmb29faW50ZXJmYWNlX3NvbgorICAgcHJpdmF0 ZSAhIHsgZGctZXJyb3IgIlBSSVZBVEUgc3RhdGVtZW50IiB9CisgICBwdWJs aWMgISB7IGRnLWVycm9yICJQVUJMSUMgc3RhdGVtZW50IiB9CisgICBpbnRl Z2VyLCBwdWJsaWMgOjogaSAhIHsgZGctZXJyb3IgIlBVQkxJQyBhdHRyaWJ1 dGUiIH0KKyAgIGludGVnZXIsIHByaXZhdGUgOjogaiAhIHsgZGctZXJyb3Ig IlBSSVZBVEUgYXR0cmlidXRlIiB9CisgICB0eXBlIDo6IGJhcgorICAgICBw cml2YXRlICEgeyBkZy1lcnJvciAiUFJJVkFURSBzdGF0ZW1lbnQiIH0KKyAg ICAgcHVibGljICEgeyBkZy1lcnJvciAiUFVCTElDIHN0YXRlbWVudCIgfQor ICAgICBpbnRlZ2VyLCBwcml2YXRlIDo6IGkgISB7IGRnLWVycm9yICJQUklW QVRFIGF0dHJpYnV0ZSIgfQorICAgICBpbnRlZ2VyLCBwdWJsaWMgOjogaiAh IHsgZGctZXJyb3IgIlBVQkxJQyBhdHRyaWJ1dGUiIH0KKyAgIGVuZCB0eXBl IGJhcgorIGNvbnRhaW5zCisgIQorIGVuZCBzdWJtb2R1bGUgZm9vX2ludGVy ZmFjZV9zb24KKyAKKyBTVUJNT0RVTEUgKGZvb19pbnRlcmZhY2UpIGZvb19p bnRlcmZhY2VfZGF1Z2h0ZXIKKyAhCisgY29udGFpbnMKKyAgIHN1YnJvdXRp bmUgZm9vYmFyIChhcmcpCisgICAgIHR5cGUoZm9vKSA6OiBhcmcKKyAgICAg YXJnJWJ5ZWJ5ZSA9ICJoZWxsbywgd29ybGQhICAgIiAhIEFjY2VzcyB0byBw cml2YXRlIGNvbXBvbmVudCBpcyBPSworICAgZW5kIHN1YnJvdXRpbmUKKyBl bmQgU1VCTU9EVUxFIGZvb19pbnRlcmZhY2VfZGF1Z2h0ZXIKKyAKKyBlbmQK SW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvc3VibW9kdWxlXzYu ZjkwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy90ZXN0c3VpdGUv Z2ZvcnRyYW4uZGcvc3VibW9kdWxlXzYuZjkwCShyZXZpc2lvbiAwKQotLS0g Z2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9zdWJtb2R1bGVfNi5mOTAJKHdv cmtpbmcgY29weSkKKioqKioqKioqKioqKioqCioqKiAwICoqKioKLS0tIDEs OTIgLS0tLQorICEgeyBkZy1kbyBydW4gfQorICEKKyAhIENoZWNrcyB0aGF0 IHRoZSByZXN1bHRzIG9mIG1vZHVsZSBwcm9jZWR1cmVzIGhhdmUgdGhlIGNv cnJlY3QgY2hhcmFjdGVyaXN0aWNzLgorICEKKyAhIENvbnRyaWJ1dGVkIGJ5 IFJlaW5ob2xkIEJhZGVyICA8cmVpbmhvbGQuYmFkZXJAbHJ6LmRlPgorICEK KyBtb2R1bGUgbW9kX2EKKyAgIGltcGxpY2l0IG5vbmUKKyAgIHR5cGUsIGFi c3RyYWN0IDo6IHRfYQorICAgZW5kIHR5cGUgdF9hCisgICBpbnRlcmZhY2UK KyAgICAgbW9kdWxlIHN1YnJvdXRpbmUgcF9hKHRoaXMsIHEpCisgICAgICAg Y2xhc3ModF9hKSwgaW50ZW50KGlub3V0KSA6OiB0aGlzCisgICAgICAgY2xh c3MoKiksIGludGVudChpbikgOjogcQorICAgICBlbmQgc3Vicm91dGluZQor ICAgICBtb2R1bGUgZnVuY3Rpb24gY3JlYXRlX2EoKSByZXN1bHQocikKKyAg ICAgICBjbGFzcyh0X2EpLCBhbGxvY2F0YWJsZSA6OiByCisgICAgIGVuZCBm dW5jdGlvbgorICAgICBtb2R1bGUgc3Vicm91dGluZSBwcmludCh0aGlzKQor ICAgICAgIGNsYXNzKHRfYSksIGludGVudChpbikgOjogdGhpcworICAgICBl bmQgc3Vicm91dGluZQorICAgZW5kIGludGVyZmFjZQorIGVuZCBtb2R1bGUg bW9kX2EKKyAKKyBtb2R1bGUgbW9kX2IKKyAgIGltcGxpY2l0IG5vbmUKKyAg IHR5cGUgdF9iCisgICAgIGludGVnZXIsIGFsbG9jYXRhYmxlIDo6IEkoOikK KyAgIGVuZCB0eXBlIHRfYgorICAgaW50ZXJmYWNlCisgICAgIG1vZHVsZSBm dW5jdGlvbiBjcmVhdGVfYihpKSByZXN1bHQocikKKyAgICAgICB0eXBlKHRf YikgOjogcgorICAgICAgIGludGVnZXIgOjogaSg6KQorICAgICBlbmQgZnVu Y3Rpb24KKyAgIGVuZCBpbnRlcmZhY2UKKyBlbmQgbW9kdWxlIG1vZF9iCisg Cisgc3VibW9kdWxlKG1vZF9iKSBpbXBfY3JlYXRlCisgY29udGFpbnMKKyAg IG1vZHVsZSBwcm9jZWR1cmUgY3JlYXRlX2IKKyAgICAgaWYgKGFsbG9jYXRl ZChyJWkpKSBkZWFsbG9jYXRlKHIlaSkKKyAgICAgYWxsb2NhdGUociVpLCBz b3VyY2U9aSkKKyAgIGVuZCBwcm9jZWR1cmUKKyBlbmQgc3VibW9kdWxlIGlt cF9jcmVhdGUKKyAKKyBzdWJtb2R1bGUobW9kX2EpIGltcF9wX2EKKyAgIHVz ZSBtb2RfYgorICAgdHlwZSwgZXh0ZW5kcyh0X2EpIDo6IHRfaW1wCisgICAg IHR5cGUodF9iKSA6OiBiCisgICBlbmQgdHlwZSB0X2ltcAorICAgaW50ZWdl ciwgcGFyYW1ldGVyIDo6IGlpKDIpID0gWzEsMl0KKyBjb250YWlucworICAg bW9kdWxlIHByb2NlZHVyZSBjcmVhdGVfYQorICAgICB0eXBlKHRfYikgOjog YgorICAgICBiID0gY3JlYXRlX2IoaWkpCisgICAgIGFsbG9jYXRlKHIsIHNv dXJjZT10X2ltcChiKSkKKyAgIGVuZCBwcm9jZWR1cmUKKyAKKyAgIG1vZHVs ZSBwcm9jZWR1cmUgIHBfYQorICAgICBzZWxlY3QgdHlwZSAodGhpcykKKyAg ICAgICB0eXBlIGlzICh0X2ltcCkKKyAgICAgICAgIHNlbGVjdCB0eXBlIChx KQorICAgICAgICAgICB0eXBlIGlzICh0X2IpCisgICAgICAgICAgICAgdGhp cyViID0gcQorICAgICAgICAgICBjbGFzcyBkZWZhdWx0CisgICAgICAgICAg ICAgY2FsbCBhYm9ydAorICAgICAgICAgIGVuZCBzZWxlY3QKKyAgICAgICBj bGFzcyBkZWZhdWx0CisgICAgICAgICBjYWxsIGFib3J0CisgICAgICAgZW5k IHNlbGVjdAorICAgZW5kIHByb2NlZHVyZSBwX2EKKyAgIG1vZHVsZSBwcm9j ZWR1cmUgcHJpbnQKKyAgICAgc2VsZWN0IHR5cGUgKHRoaXMpCisgICAgICAg dHlwZSBpcyAodF9pbXApCisgICAgICAgICBpZiAoYW55ICh0aGlzJWIlaSAu bmUuIFszLDQsNV0pKSBjYWxsIGFib3J0CisgICAgICAgY2xhc3MgZGVmYXVs dAorICAgICAgICAgY2FsbCBhYm9ydAorICAgICBlbmQgc2VsZWN0CisgICBl bmQgcHJvY2VkdXJlCisgZW5kIHN1Ym1vZHVsZSBpbXBfcF9hCisgCisgcHJv Z3JhbSBwCisgICB1c2UgbW9kX2EKKyAgIHVzZSBtb2RfYgorICAgaW1wbGlj aXQgbm9uZQorICAgY2xhc3ModF9hKSwgYWxsb2NhdGFibGUgOjogYQorICAg YWxsb2NhdGUoYSwgc291cmNlPWNyZWF0ZV9hKCkpCisgICBjYWxsIHBfYShh LCBjcmVhdGVfYihbMyw0LDVdKSkKKyAgIGNhbGwgcHJpbnQoYSkKKyBlbmQg cHJvZ3JhbSBwCisgCisgCg== --f46d043c7c16ca463e0519bb4c84--