From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 613 invoked by alias); 30 Sep 2005 15:47:07 -0000 Mailing-List: contact binutils-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sources.redhat.com Received: (qmail 32695 invoked by uid 22791); 30 Sep 2005 15:46:25 -0000 Received: from public.id2-vpn.continvity.gns.novell.com (HELO emea1-mh.id2.novell.com) (195.33.99.129) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Fri, 30 Sep 2005 15:46:25 +0000 Received: from EMEA1-MTA by emea1-mh.id2.novell.com with Novell_GroupWise; Fri, 30 Sep 2005 16:46:19 +0200 Message-Id: <433D7A3B.76F0.0078.0@novell.com> Date: Fri, 30 Sep 2005 15:50:00 -0000 From: "Jan Beulich" To: Subject: [PATCH] improve equate handling Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=__Part4361300B.0__=" X-SW-Source: 2005-09/txt/msg00380.txt.bz2 This is a MIME message. If you are reading this text, you may want to consider changing to a mail reader or gateway that understands how to properly handle MIME multipart messages. --=__Part4361300B.0__= Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 3916 This adjusts equate handling by - allowing true forward references (which will always assume the referenced symbols have at the point of use) through the new .eqv pseudo-op and the new == operator - disallowing changing .equiv-generated equates (so that the protection this provides is both forward and backward) - snapshotting equates when their value gets changed so that previous uses don't get affected by the new value. - allowing expressions in places where absolute expressions (or register names) are needed which were not completely resolvable at the point of their definition but which are fully resolvable at the point of use In addition it fixes PR/288. Built and tested on i686-pc-linux-gnu, x86_64-unknown-linux-gnu, ia64-unknown-linux-gnu, and for a large number of cross targets. Jan gas/ 2005-09-29 Jan Beulich * expr.h (enum expr_mode): New. (expression): Pass thrid argument to expr. (expression_and_evaluate): New. (deferred_expression): New. (expr): Add third parameter. (resolve_expression): New. * struc-symbol.h (struct symbol): New members sy_volatile and sy_forward_ref. * symbols.c, symbols.h (symbol_clone): New. (symbol_clone_if_forward_ref): New. (snapshot_symbol): New. (S_IS_VOLATILE): New. (S_IS_FORWARD_REF): New. (S_SET_VOLATILE): New. (S_SET_FORWARD_REF): New. * as.c (macro_expr): Use expression_and_evaluate. * cond.c (s_if): Likewise. (s_elseif): Likewise. * dw2gencfi.c (cfi_parse_reg): Likewise. * expr.c (operand): Add second parameter. Optionally call deferred_expression. Pass mode argument to itself and md_parse_name. Check mode before trying to evaluate symbol. Call symbol_clone_if_forward_ref for both operands. (expr): Add thrid parameter. Pass mode to operand and itself. Optionally call resolve_expression. (resolve_expression): New. (get_single_number): Pass second argument to operand. * read.c (potable): New entry for .eqv. (read_a_source_file): Handle new == operator. (get_absolute_expr): Use expression_and_evaluate. (s_lsym): Likewise. (assign_symbol): Rename second parameter. Call symbol_clone on legal and illegal redefinition. Call S_SET_VOLATILE and S_SET_FORWARD_REF depending on mode. (s_set): Update description. (s_space): Call resolve_expression. (pseudo_set): Optionally call deferred_expression. Check S_IS_FORWARD_REF before trying to simplify/resolve an expression. (equals): Handle ==. * config/tc-ia64.h (md_parse_name): Add mode parameter. * config/tc-m32r.h (md_parse_name): Likewise. (m32r_parse_name): Likewise. * config/tc-mmix.h (md_parse_name): Likewise. * config/tc-mn10300.h (md_parse_name): Likewise. (mn10300_parse_name): Likewise. * config/tc-ppc.h (md_parse_name): Likewise. * config/tc-sh.h (md_parse_name): Likewise. (sh_parse_name): Likewise. * config/tc-sh64.h (md_parse_name): Likewise. (sh64_consume_datalabel): Likewise. * config/tc-tic54x.h (md_parse_name): Likewise. * config/tc-m32r.c (m32r_parse_name): Add mode parameter. Check it before trying to evaluate symbol. * config/tc-mn10300.c (mn10300_parse_name): Likewise. * config/tc-sh.c (sh_parse_name): Likewise. * config/tc-sh64.c (sh64_consume_datalabel): Add mode parameter. Pass second argument to operandf. Pass mode parameter to sh_parse_name. * doc/as.texinfo: Document .eqv and the == assignment operator. gas/testsuite/ 2005-09-29 Jan Beulich * gas/all/cond.s: Add test for resolution of fully resolvable forward references in .if/.endif. * gas/all/cond.d: Adjust. * gas/all/assign-bad.s: New. * gas/all/assign-ok.s: New. * gas/all/equ-bad.s: New. * gas/all/equ-ok.s: New. * gas/all/equiv1.s: New. * gas/all/equiv2.s: New. * gas/all/eqv-bad.s: New. * gas/all/eqv-ok.s: New. * gas/all/forward.[sd]: New. * gas/all/redef.[sd]: New. * gas/all/gas.exp: Run new tests, but xfail equiv1 (PR/1387). (actual patch attached) --=__Part4361300B.0__= Content-Type: application/octet-stream; name="binutils-mainline-equate.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="binutils-mainline-equate.patch" Content-length: 65575 VGhpcyBhZGp1c3RzIGVxdWF0ZSBoYW5kbGluZyBieQotIGFsbG93aW5nIHRy dWUgZm9yd2FyZCByZWZlcmVuY2VzICh3aGljaCB3aWxsIGFsd2F5cyBhc3N1 bWUgdGhlIHJlZmVyZW5jZWQKICBzeW1ib2xzIGhhdmUgYXQgdGhlIHBvaW50 IG9mIHVzZSkgdGhyb3VnaCB0aGUgbmV3IC5lcXYgcHNldWRvLW9wIGFuZCB0 aGUKICBuZXcgPT0gb3BlcmF0b3IKLSBkaXNhbGxvd2luZyBjaGFuZ2luZyAu ZXF1aXYtZ2VuZXJhdGVkIGVxdWF0ZXMgKHNvIHRoYXQgdGhlIHByb3RlY3Rp b24gdGhpcwogIHByb3ZpZGVzIGlzIGJvdGggZm9yd2FyZCBhbmQgYmFja3dh cmQpCi0gc25hcHNob3R0aW5nIGVxdWF0ZXMgd2hlbiB0aGVpciB2YWx1ZSBn ZXRzIGNoYW5nZWQgc28gdGhhdCBwcmV2aW91cyB1c2VzCiAgZG9uJ3QgZ2V0 IGFmZmVjdGVkIGJ5IHRoZSBuZXcgdmFsdWUuCi0gYWxsb3dpbmcgZXhwcmVz c2lvbnMgaW4gcGxhY2VzIHdoZXJlIGFic29sdXRlIGV4cHJlc3Npb25zIChv ciByZWdpc3RlcgogIG5hbWVzKSBhcmUgbmVlZGVkIHdoaWNoIHdlcmUgbm90 IGNvbXBsZXRlbHkgcmVzb2x2YWJsZSBhdCB0aGUgcG9pbnQgb2YKICB0aGVp ciBkZWZpbml0aW9uIGJ1dCB3aGljaCBhcmUgZnVsbHkgcmVzb2x2YWJsZSBh dCB0aGUgcG9pbnQgb2YgdXNlCgpJbiBhZGRpdGlvbiBpdCBmaXhlcyBQUi8y ODguCgpCdWlsdCBhbmQgdGVzdGVkIG9uIGk2ODYtcGMtbGludXgtZ251LCB4 ODZfNjQtdW5rbm93bi1saW51eC1nbnUsCmlhNjQtdW5rbm93bi1saW51eC1n bnUsIGFuZCBmb3IgYSBsYXJnZSBudW1iZXIgb2YgY3Jvc3MgdGFyZ2V0cy4K CkphbgoKZ2FzLwoyMDA1LTA5LTI5ICBKYW4gQmV1bGljaCAgPGpiZXVsaWNo QG5vdmVsbC5jb20+CgoJKiBleHByLmggKGVudW0gZXhwcl9tb2RlKTogTmV3 LgoJKGV4cHJlc3Npb24pOiBQYXNzIHRocmlkIGFyZ3VtZW50IHRvIGV4cHIu CgkoZXhwcmVzc2lvbl9hbmRfZXZhbHVhdGUpOiBOZXcuCgkoZGVmZXJyZWRf ZXhwcmVzc2lvbik6IE5ldy4KCShleHByKTogQWRkIHRoaXJkIHBhcmFtZXRl ci4KCShyZXNvbHZlX2V4cHJlc3Npb24pOiBOZXcuCgkqIHN0cnVjLXN5bWJv bC5oIChzdHJ1Y3Qgc3ltYm9sKTogTmV3IG1lbWJlcnMgc3lfdm9sYXRpbGUg YW5kCglzeV9mb3J3YXJkX3JlZi4KCSogc3ltYm9scy5jLCBzeW1ib2xzLmgg KHN5bWJvbF9jbG9uZSk6IE5ldy4KCShzeW1ib2xfY2xvbmVfaWZfZm9yd2Fy ZF9yZWYpOiBOZXcuCgkoc25hcHNob3Rfc3ltYm9sKTogTmV3LgoJKFNfSVNf Vk9MQVRJTEUpOiBOZXcuCgkoU19JU19GT1JXQVJEX1JFRik6IE5ldy4KCShT X1NFVF9WT0xBVElMRSk6IE5ldy4KCShTX1NFVF9GT1JXQVJEX1JFRik6IE5l dy4KCSogYXMuYyAobWFjcm9fZXhwcik6IFVzZSBleHByZXNzaW9uX2FuZF9l dmFsdWF0ZS4KCSogY29uZC5jIChzX2lmKTogTGlrZXdpc2UuCgkoc19lbHNl aWYpOiBMaWtld2lzZS4KCSogZHcyZ2VuY2ZpLmMgKGNmaV9wYXJzZV9yZWcp OiBMaWtld2lzZS4KCSogZXhwci5jIChvcGVyYW5kKTogQWRkIHNlY29uZCBw YXJhbWV0ZXIuIE9wdGlvbmFsbHkgY2FsbAoJZGVmZXJyZWRfZXhwcmVzc2lv bi4gUGFzcyBtb2RlIGFyZ3VtZW50IHRvIGl0c2VsZiBhbmQgbWRfcGFyc2Vf bmFtZS4KCUNoZWNrIG1vZGUgYmVmb3JlIHRyeWluZyB0byBldmFsdWF0ZSBz eW1ib2wuIENhbGwKCXN5bWJvbF9jbG9uZV9pZl9mb3J3YXJkX3JlZiBmb3Ig Ym90aCBvcGVyYW5kcy4KCShleHByKTogQWRkIHRocmlkIHBhcmFtZXRlci4g UGFzcyBtb2RlIHRvIG9wZXJhbmQgYW5kIGl0c2VsZi4KCU9wdGlvbmFsbHkg Y2FsbCByZXNvbHZlX2V4cHJlc3Npb24uCgkocmVzb2x2ZV9leHByZXNzaW9u KTogTmV3LgoJKGdldF9zaW5nbGVfbnVtYmVyKTogUGFzcyBzZWNvbmQgYXJn dW1lbnQgdG8gb3BlcmFuZC4KCSogcmVhZC5jIChwb3RhYmxlKTogTmV3IGVu dHJ5IGZvciAuZXF2LgoJKHJlYWRfYV9zb3VyY2VfZmlsZSk6IEhhbmRsZSBu ZXcgPT0gb3BlcmF0b3IuCgkoZ2V0X2Fic29sdXRlX2V4cHIpOiBVc2UgZXhw cmVzc2lvbl9hbmRfZXZhbHVhdGUuCgkoc19sc3ltKTogTGlrZXdpc2UuCgko YXNzaWduX3N5bWJvbCk6IFJlbmFtZSBzZWNvbmQgcGFyYW1ldGVyLiBDYWxs IHN5bWJvbF9jbG9uZSBvbgoJbGVnYWwgYW5kIGlsbGVnYWwgcmVkZWZpbml0 aW9uLiBDYWxsIFNfU0VUX1ZPTEFUSUxFIGFuZAoJU19TRVRfRk9SV0FSRF9S RUYgZGVwZW5kaW5nIG9uIG1vZGUuCgkoc19zZXQpOiBVcGRhdGUgZGVzY3Jp cHRpb24uCgkoc19zcGFjZSk6IENhbGwgcmVzb2x2ZV9leHByZXNzaW9uLgoJ KHBzZXVkb19zZXQpOiBPcHRpb25hbGx5IGNhbGwgZGVmZXJyZWRfZXhwcmVz c2lvbi4gQ2hlY2sKCVNfSVNfRk9SV0FSRF9SRUYgYmVmb3JlIHRyeWluZyB0 byBzaW1wbGlmeS9yZXNvbHZlIGFuIGV4cHJlc3Npb24uCgkoZXF1YWxzKTog SGFuZGxlID09LgoJKiBjb25maWcvdGMtaWE2NC5oIChtZF9wYXJzZV9uYW1l KTogQWRkIG1vZGUgcGFyYW1ldGVyLgoJKiBjb25maWcvdGMtbTMyci5oICht ZF9wYXJzZV9uYW1lKTogTGlrZXdpc2UuCgkobTMycl9wYXJzZV9uYW1lKTog TGlrZXdpc2UuCgkqIGNvbmZpZy90Yy1tbWl4LmggKG1kX3BhcnNlX25hbWUp OiBMaWtld2lzZS4KCSogY29uZmlnL3RjLW1uMTAzMDAuaCAobWRfcGFyc2Vf bmFtZSk6IExpa2V3aXNlLgoJKG1uMTAzMDBfcGFyc2VfbmFtZSk6IExpa2V3 aXNlLgoJKiBjb25maWcvdGMtcHBjLmggKG1kX3BhcnNlX25hbWUpOiBMaWtl d2lzZS4KCSogY29uZmlnL3RjLXNoLmggKG1kX3BhcnNlX25hbWUpOiBMaWtl d2lzZS4KCShzaF9wYXJzZV9uYW1lKTogTGlrZXdpc2UuCgkqIGNvbmZpZy90 Yy1zaDY0LmggKG1kX3BhcnNlX25hbWUpOiBMaWtld2lzZS4KCShzaDY0X2Nv bnN1bWVfZGF0YWxhYmVsKTogTGlrZXdpc2UuCgkqIGNvbmZpZy90Yy10aWM1 NHguaCAobWRfcGFyc2VfbmFtZSk6IExpa2V3aXNlLgoJKiBjb25maWcvdGMt bTMyci5jIChtMzJyX3BhcnNlX25hbWUpOiBBZGQgbW9kZSBwYXJhbWV0ZXIu IENoZWNrIGl0CgliZWZvcmUgdHJ5aW5nIHRvIGV2YWx1YXRlIHN5bWJvbC4K CSogY29uZmlnL3RjLW1uMTAzMDAuYyAobW4xMDMwMF9wYXJzZV9uYW1lKTog TGlrZXdpc2UuCgkqIGNvbmZpZy90Yy1zaC5jIChzaF9wYXJzZV9uYW1lKTog TGlrZXdpc2UuCgkqIGNvbmZpZy90Yy1zaDY0LmMgKHNoNjRfY29uc3VtZV9k YXRhbGFiZWwpOiBBZGQgbW9kZSBwYXJhbWV0ZXIuIFBhc3MKCXNlY29uZCBh cmd1bWVudCB0byBvcGVyYW5kZi4gUGFzcyBtb2RlIHBhcmFtZXRlciB0byBz aF9wYXJzZV9uYW1lLgoJKiBkb2MvYXMudGV4aW5mbzogRG9jdW1lbnQgLmVx diBhbmQgdGhlID09IGFzc2lnbm1lbnQgb3BlcmF0b3IuCgpnYXMvdGVzdHN1 aXRlLwoyMDA1LTA5LTI5ICBKYW4gQmV1bGljaCAgPGpiZXVsaWNoQG5vdmVs bC5jb20+CgoJKiBnYXMvYWxsL2NvbmQuczogQWRkIHRlc3QgZm9yIHJlc29s dXRpb24gb2YgZnVsbHkgcmVzb2x2YWJsZQoJZm9yd2FyZCByZWZlcmVuY2Vz IGluIC5pZi8uZW5kaWYuCgkqIGdhcy9hbGwvY29uZC5kOiBBZGp1c3QuCgkq IGdhcy9hbGwvYXNzaWduLWJhZC5zOiBOZXcuCgkqIGdhcy9hbGwvYXNzaWdu LW9rLnM6IE5ldy4KCSogZ2FzL2FsbC9lcXUtYmFkLnM6IE5ldy4KCSogZ2Fz L2FsbC9lcXUtb2suczogTmV3LgoJKiBnYXMvYWxsL2VxdWl2MS5zOiBOZXcu CgkqIGdhcy9hbGwvZXF1aXYyLnM6IE5ldy4KCSogZ2FzL2FsbC9lcXYtYmFk LnM6IE5ldy4KCSogZ2FzL2FsbC9lcXYtb2suczogTmV3LgoJKiBnYXMvYWxs L2ZvcndhcmQuW3NkXTogTmV3LgoJKiBnYXMvYWxsL3JlZGVmLltzZF06IE5l dy4KCSogZ2FzL2FsbC9nYXMuZXhwOiBSdW4gbmV3IHRlc3RzLCBidXQgeGZh aWwgZXF1aXYxIChQUi8xMzg3KS4KCi0tLSAvaG9tZS9qYmV1bGljaC9zcmMv YmludXRpbHMvbWFpbmxpbmUvMjAwNS0wOS0yNy9nYXMvYXMuYwkyMDA1LTA4 LTE4IDA4OjUxOjI1LjAwMDAwMDAwMCArMDIwMAorKysgMjAwNS0wOS0yNy9n YXMvYXMuYwkyMDA1LTA5LTI3IDA5OjQwOjM0LjAwMDAwMDAwMCArMDIwMApA QCAtOTQwLDcgKzk0MCw3IEBAIG1hY3JvX2V4cHIgKGNvbnN0IGNoYXIgKmVt c2csIGludCBpZHgsIHMKIAogICBob2xkID0gaW5wdXRfbGluZV9wb2ludGVy OwogICBpbnB1dF9saW5lX3BvaW50ZXIgPSBpbi0+cHRyICsgaWR4OwotICBl eHByZXNzaW9uICgmZXgpOworICBleHByZXNzaW9uX2FuZF9ldmFsdWF0ZSAo JmV4KTsKICAgaWR4ID0gaW5wdXRfbGluZV9wb2ludGVyIC0gaW4tPnB0cjsK ICAgaW5wdXRfbGluZV9wb2ludGVyID0gaG9sZDsKIAotLS0gL2hvbWUvamJl dWxpY2gvc3JjL2JpbnV0aWxzL21haW5saW5lLzIwMDUtMDktMjcvZ2FzL2Nv bmQuYwkyMDA1LTA1LTA2IDA4OjM0OjQyLjAwMDAwMDAwMCArMDIwMAorKysg MjAwNS0wOS0yNy9nYXMvY29uZC5jCTIwMDUtMDktMjYgMTE6MDk6NTcuMDAw MDAwMDAwICswMjAwCkBAIC0xNDQsNyArMTQ0LDcgQEAgc19pZiAoaW50IGFy ZykKICAgICB9CiAgIGVsc2UKICAgICB7Ci0gICAgICBleHByZXNzaW9uICgm b3BlcmFuZCk7CisgICAgICBleHByZXNzaW9uX2FuZF9ldmFsdWF0ZSAoJm9w ZXJhbmQpOwogICAgICAgaWYgKG9wZXJhbmQuWF9vcCAhPSBPX2NvbnN0YW50 KQogCWFzX2JhZCAoXygibm9uLWNvbnN0YW50IGV4cHJlc3Npb24gaW4gXCIu aWZcIiBzdGF0ZW1lbnQiKSk7CiAgICAgfQpAQCAtMzQwLDcgKzM0MCw3IEBA IHNfZWxzZWlmIChpbnQgYXJnKQogICAgICAgLyogTGVhZGluZyB3aGl0ZXNw YWNlIGlzIHBhcnQgb2Ygb3BlcmFuZC4gICovCiAgICAgICBTS0lQX1dISVRF U1BBQ0UgKCk7CiAKLSAgICAgIGV4cHJlc3Npb24gKCZvcGVyYW5kKTsKKyAg ICAgIGV4cHJlc3Npb25fYW5kX2V2YWx1YXRlICgmb3BlcmFuZCk7CiAgICAg ICBpZiAob3BlcmFuZC5YX29wICE9IE9fY29uc3RhbnQpCiAJYXNfYmFkIChf KCJub24tY29uc3RhbnQgZXhwcmVzc2lvbiBpbiBcIi5lbHNlaWZcIiBzdGF0 ZW1lbnQiKSk7CiAKLS0tIC9ob21lL2piZXVsaWNoL3NyYy9iaW51dGlscy9t YWlubGluZS8yMDA1LTA5LTI3L2dhcy9jb25maWcvdGMtaWE2NC5oCTIwMDUt MDctMDUgMTM6NTM6MzIuMDAwMDAwMDAwICswMjAwCisrKyAyMDA1LTA5LTI3 L2dhcy9jb25maWcvdGMtaWE2NC5oCTIwMDUtMDktMjggMTQ6NTA6NDMuMDAw MDAwMDAwICswMjAwCkBAIC0xMjksNyArMTI5LDcgQEAgZXh0ZXJuIHZvaWQg aWE2NF9jb252ZXJ0X2ZyYWcgKGZyYWdTICopOwogI2RlZmluZSB0Y19mcm9i X3N5bWJvbChzLHApCQlwIHw9IGlhNjRfZnJvYl9zeW1ib2wgKHMpCiAjZW5k aWYgLyogVEVfSFBVWCAqLwogI2RlZmluZSBtZF9mbHVzaF9wZW5kaW5nX291 dHB1dCgpCWlhNjRfZmx1c2hfcGVuZGluZ19vdXRwdXQgKCkKLSNkZWZpbmUg bWRfcGFyc2VfbmFtZShzLGUsYykJCWlhNjRfcGFyc2VfbmFtZSAocywgZSwg YykKKyNkZWZpbmUgbWRfcGFyc2VfbmFtZShzLGUsbSxjKQkJaWE2NF9wYXJz ZV9uYW1lIChzLCBlLCBjKQogI2RlZmluZSB0Y19jYW5vbmljYWxpemVfc3lt Ym9sX25hbWUocykJaWE2NF9jYW5vbmljYWxpemVfc3ltYm9sX25hbWUgKHMp CiAjZGVmaW5lIHRjX2Nhbm9uaWNhbGl6ZV9zZWN0aW9uX25hbWUocykJaWE2 NF9jYW5vbmljYWxpemVfc3ltYm9sX25hbWUgKHMpCiAjZGVmaW5lIG1kX29w dGltaXplX2V4cHIobCxvLHIpCQlpYTY0X29wdGltaXplX2V4cHIgKGwsIG8s IHIpCi0tLSAvaG9tZS9qYmV1bGljaC9zcmMvYmludXRpbHMvbWFpbmxpbmUv MjAwNS0wOS0yNy9nYXMvY29uZmlnL3RjLW0zMnIuYwkyMDA1LTA4LTE4IDA4 OjUxOjI4LjAwMDAwMDAwMCArMDIwMAorKysgMjAwNS0wOS0yNy9nYXMvY29u ZmlnL3RjLW0zMnIuYwkyMDA1LTA5LTI4IDE0OjQwOjM3LjAwMDAwMDAwMCAr MDIwMApAQCAtMjM3MCw3ICsyMzcwLDEwIEBAIG0zMnJfZW5kX29mX21hdGNo IChjaGFyICpjb250LCBjaGFyICp3aGEKIH0KIAogaW50Ci1tMzJyX3BhcnNl X25hbWUgKGNoYXIgY29uc3QgKm5hbWUsIGV4cHJlc3Npb25TICpleHByUCwg Y2hhciAqbmV4dGNoYXJQKQorbTMycl9wYXJzZV9uYW1lIChjaGFyIGNvbnN0 ICpuYW1lLAorCQkgZXhwcmVzc2lvblMgKmV4cHJQLAorCQkgZW51bSBleHBy X21vZGUgbW9kZSwKKwkJIGNoYXIgKm5leHRjaGFyUCkKIHsKICAgY2hhciAq bmV4dCA9IGlucHV0X2xpbmVfcG9pbnRlcjsKICAgY2hhciAqbmV4dF9lbmQ7 CkBAIC0yMzkxLDEzICsyMzk0LDEzIEBAIG0zMnJfcGFyc2VfbmFtZSAoY2hh ciBjb25zdCAqbmFtZSwgZXhwcmUKICAgICAgIC8qIElmIHdlIGhhdmUgYW4g YWJzb2x1dGUgc3ltYm9sIG9yIGEKIAkgcmVnLCB0aGVuIHdlIGtub3cgaXRz IHZhbHVlIG5vdy4gICovCiAgICAgICBzZWdtZW50ID0gU19HRVRfU0VHTUVO VCAoZXhwclAtPlhfYWRkX3N5bWJvbCk7Ci0gICAgICBpZiAoc2VnbWVudCA9 PSBhYnNvbHV0ZV9zZWN0aW9uKQorICAgICAgaWYgKG1vZGUgIT0gZXhwcl9k ZWZlciAmJiBzZWdtZW50ID09IGFic29sdXRlX3NlY3Rpb24pCiAJewogCSAg ZXhwclAtPlhfb3AgPSBPX2NvbnN0YW50OwogCSAgZXhwclAtPlhfYWRkX251 bWJlciA9IFNfR0VUX1ZBTFVFIChleHByUC0+WF9hZGRfc3ltYm9sKTsKIAkg IGV4cHJQLT5YX2FkZF9zeW1ib2wgPSBOVUxMOwogCX0KLSAgICAgIGVsc2Ug aWYgKHNlZ21lbnQgPT0gcmVnX3NlY3Rpb24pCisgICAgICBlbHNlIGlmICht b2RlICE9IGV4cHJfZGVmZXIgJiYgc2VnbWVudCA9PSByZWdfc2VjdGlvbikK IAl7CiAJICBleHByUC0+WF9vcCA9IE9fcmVnaXN0ZXI7CiAJICBleHByUC0+ WF9hZGRfbnVtYmVyID0gU19HRVRfVkFMVUUgKGV4cHJQLT5YX2FkZF9zeW1i b2wpOwotLS0gL2hvbWUvamJldWxpY2gvc3JjL2JpbnV0aWxzL21haW5saW5l LzIwMDUtMDktMjcvZ2FzL2NvbmZpZy90Yy1tMzJyLmgJMjAwNS0wOC0xOCAw ODo1MToyOC4wMDAwMDAwMDAgKzAyMDAKKysrIDIwMDUtMDktMjcvZ2FzL2Nv bmZpZy90Yy1tMzJyLmgJMjAwNS0wOS0yOCAxNDo0ODozNS4wMDAwMDAwMDAg KzAyMDAKQEAgLTEyMSw5ICsxMjEsOSBAQCBleHRlcm4gdm9pZCBtMzJyX2Zs dXNoX3BlbmRpbmdfb3V0cHV0ICh2CiAjZGVmaW5lIGVsZl90Y19maW5hbF9w cm9jZXNzaW5nIAltMzJyX2VsZl9maW5hbF9wcm9jZXNzaW5nCiBleHRlcm4g dm9pZCBtMzJyX2VsZl9maW5hbF9wcm9jZXNzaW5nICh2b2lkKTsKIAotI2Rl ZmluZSBtZF9wYXJzZV9uYW1lKG5hbWUsIGV4cHJQLCBuZXh0Y2hhclApIFwK LSAgbTMycl9wYXJzZV9uYW1lICgobmFtZSksIChleHByUCksIChuZXh0Y2hh clApKQotZXh0ZXJuIGludCBtMzJyX3BhcnNlX25hbWUgKGNoYXIgY29uc3Qg KiwgZXhwcmVzc2lvblMgKiwgY2hhciAqKTsKKyNkZWZpbmUgbWRfcGFyc2Vf bmFtZShuYW1lLCBleHByUCwgbW9kZSwgbmV4dGNoYXJQKSBcCisgIG0zMnJf cGFyc2VfbmFtZSAoKG5hbWUpLCAoZXhwclApLCAobW9kZSksIChuZXh0Y2hh clApKQorZXh0ZXJuIGludCBtMzJyX3BhcnNlX25hbWUgKGNoYXIgY29uc3Qg KiwgZXhwcmVzc2lvblMgKiwgZW51bSBleHByX21vZGUsIGNoYXIgKik7CiAK IC8qIFRoaXMgaXMgdXNlZCB0byBjb25zdHJ1Y3QgZXhwcmVzc2lvbnMgb3V0 IG9mIEBHT1RPRkYsIEBQTFQgYW5kIEBHT1QKICAgIHN5bWJvbHMuICBUaGUg cmVsb2NhdGlvbiB0eXBlIGlzIHN0b3JlZCBpbiBYX21kLiAgKi8KLS0tIC9o b21lL2piZXVsaWNoL3NyYy9iaW51dGlscy9tYWlubGluZS8yMDA1LTA5LTI3 L2dhcy9jb25maWcvdGMtbW1peC5oCTIwMDUtMDUtMDYgMDg6MjQ6MjguMDAw MDAwMDAwICswMjAwCisrKyAyMDA1LTA5LTI3L2dhcy9jb25maWcvdGMtbW1p eC5oCTIwMDUtMDktMjggMTQ6NTI6NDMuMDAwMDAwMDAwICswMjAwCkBAIC03 MCw3ICs3MCw3IEBAIGV4dGVybiBjaGFyICptbWl4X2N1cnJlbnRfcHJlZml4 OwogICAgVGhlIFtEVldJT1VaWF1fSGFuZGxlciBzeW1ib2xzIGFyZSBwcm92 aWRlZCB3aGVuLXVzZWQuICAqLwogCiBleHRlcm4gaW50IG1taXhfZ251X3N5 bnRheDsKLSNkZWZpbmUgbWRfcGFyc2VfbmFtZShuYW1lLCBleHAsIGNwb3Mp CQkJCVwKKyNkZWZpbmUgbWRfcGFyc2VfbmFtZShuYW1lLCBleHAsIG1vZGUs IGNwb3MpCQkJXAogICghIG1taXhfZ251X3N5bnRheAkJCQkJCVwKICAgJiYg KG5hbWVbMF0gPT0gJ0AnCQkJCQkJXAogICAgICAgPyAoISBpc19wYXJ0X29m X25hbWUgKG5hbWVbMV0pCQkJCVwKLS0tIC9ob21lL2piZXVsaWNoL3NyYy9i aW51dGlscy9tYWlubGluZS8yMDA1LTA5LTI3L2dhcy9jb25maWcvdGMtbW4x MDMwMC5jCTIwMDUtMDgtMTggMDg6NTE6MjkuMDAwMDAwMDAwICswMjAwCisr KyAyMDA1LTA5LTI3L2dhcy9jb25maWcvdGMtbW4xMDMwMC5jCTIwMDUtMDkt MjggMTQ6NTQ6MTQuMDAwMDAwMDAwICswMjAwCkBAIC0yNzQzLDkgKzI3NDMs MTAgQEAgbW4xMDMwMF9lbmRfb2ZfbWF0Y2ggKGNvbnQsIHdoYXQpCiB9ICAK IAogaW50Ci1tbjEwMzAwX3BhcnNlX25hbWUgKG5hbWUsIGV4cHJQLCBuZXh0 Y2hhclApCittbjEwMzAwX3BhcnNlX25hbWUgKG5hbWUsIGV4cHJQLCBtb2Rl LCBuZXh0Y2hhclApCiAgICAgIGNoYXIgY29uc3QgKm5hbWU7CiAgICAgIGV4 cHJlc3Npb25TICpleHByUDsKKyAgICAgZW51bSBleHByX21vZGUgbW9kZTsK ICAgICAgY2hhciAqbmV4dGNoYXJQOwogewogICBjaGFyICpuZXh0ID0gaW5w dXRfbGluZV9wb2ludGVyOwpAQCAtMjc2NSwxMyArMjc2NiwxMyBAQCBtbjEw MzAwX3BhcnNlX25hbWUgKG5hbWUsIGV4cHJQLCBuZXh0Y2hhCiAgICAgICAv KiBJZiB3ZSBoYXZlIGFuIGFic29sdXRlIHN5bWJvbCBvciBhIHJlZywKIAkg dGhlbiB3ZSBrbm93IGl0cyB2YWx1ZSBub3cuICAqLwogICAgICAgc2VnbWVu dCA9IFNfR0VUX1NFR01FTlQgKGV4cHJQLT5YX2FkZF9zeW1ib2wpOwotICAg ICAgaWYgKHNlZ21lbnQgPT0gYWJzb2x1dGVfc2VjdGlvbikKKyAgICAgIGlm IChtb2RlICE9IGV4cHJfZGVmZXIgJiYgc2VnbWVudCA9PSBhYnNvbHV0ZV9z ZWN0aW9uKQogCXsKIAkgIGV4cHJQLT5YX29wID0gT19jb25zdGFudDsKIAkg IGV4cHJQLT5YX2FkZF9udW1iZXIgPSBTX0dFVF9WQUxVRSAoZXhwclAtPlhf YWRkX3N5bWJvbCk7CiAJICBleHByUC0+WF9hZGRfc3ltYm9sID0gTlVMTDsK IAl9Ci0gICAgICBlbHNlIGlmIChzZWdtZW50ID09IHJlZ19zZWN0aW9uKQor ICAgICAgZWxzZSBpZiAobW9kZSAhPSBleHByX2RlZmVyICYmIHNlZ21lbnQg PT0gcmVnX3NlY3Rpb24pCiAJewogCSAgZXhwclAtPlhfb3AgPSBPX3JlZ2lz dGVyOwogCSAgZXhwclAtPlhfYWRkX251bWJlciA9IFNfR0VUX1ZBTFVFIChl eHByUC0+WF9hZGRfc3ltYm9sKTsKLS0tIC9ob21lL2piZXVsaWNoL3NyYy9i aW51dGlscy9tYWlubGluZS8yMDA1LTA5LTI3L2dhcy9jb25maWcvdGMtbW4x MDMwMC5oCTIwMDUtMDgtMTggMDg6NTE6MjkuMDAwMDAwMDAwICswMjAwCisr KyAyMDA1LTA5LTI3L2dhcy9jb25maWcvdGMtbW4xMDMwMC5oCTIwMDUtMDkt MjggMTQ6NTM6MzYuMDAwMDAwMDAwICswMjAwCkBAIC0zNiw5ICszNiwxMCBA QAogCSAgICYmIFNfSVNfREVGSU5FRCAoKEZJWCktPmZ4X2FkZHN5KQkJCVwK IAkgICAmJiAhIFNfSVNfQ09NTU9OICgoRklYKS0+ZnhfYWRkc3kpKSkpCiAK LSNkZWZpbmUgbWRfcGFyc2VfbmFtZShuYW1lLCBleHByUCwgbmV4dGNoYXJQ KSBcCi0gICAgbW4xMDMwMF9wYXJzZV9uYW1lICgobmFtZSksIChleHByUCks IChuZXh0Y2hhclApKQotaW50IG1uMTAzMDBfcGFyc2VfbmFtZSBQQVJBTVMg KChjaGFyIGNvbnN0ICosIGV4cHJlc3Npb25TICosIGNoYXIgKikpOworI2Rl ZmluZSBtZF9wYXJzZV9uYW1lKG5hbWUsIGV4cHJQLCBtb2RlLCBuZXh0Y2hh clApIFwKKyAgICBtbjEwMzAwX3BhcnNlX25hbWUgKChuYW1lKSwgKGV4cHJQ KSwgKG1vZGUpLCAobmV4dGNoYXJQKSkKK2ludCBtbjEwMzAwX3BhcnNlX25h bWUgUEFSQU1TICgoY2hhciBjb25zdCAqLCBleHByZXNzaW9uUyAqLAorCQkJ CWVudW0gZXhwcl9tb2RlLCBjaGFyICopKTsKIAogI2RlZmluZSBUQ19DT05T X0ZJWF9ORVcoRlJBRywgT0ZGLCBMRU4sIEVYUCkgXAogICAgICBtbjEwMzAw X2NvbnNfZml4X25ldyAoKEZSQUcpLCAoT0ZGKSwgKExFTiksIChFWFApKQot LS0gL2hvbWUvamJldWxpY2gvc3JjL2JpbnV0aWxzL21haW5saW5lLzIwMDUt MDktMjcvZ2FzL2NvbmZpZy90Yy1wcGMuaAkyMDA1LTA4LTE4IDA4OjUxOjMw LjAwMDAwMDAwMCArMDIwMAorKysgMjAwNS0wOS0yNy9nYXMvY29uZmlnL3Rj LXBwYy5oCTIwMDUtMDktMjggMTQ6NDM6MTguMDAwMDAwMDAwICswMjAwCkBA IC0yNDUsNyArMjQ1LDcgQEAgZXh0ZXJuIGludCBwcGNfZm9yY2VfcmVsb2Nh dGlvbiBQQVJBTVMgKAogI2RlZmluZSBNRF9QQ1JFTF9GUk9NX1NFQ1RJT04o RklYLCBTRUMpIG1kX3BjcmVsX2Zyb21fc2VjdGlvbihGSVgsIFNFQykKIGV4 dGVybiBsb25nIG1kX3BjcmVsX2Zyb21fc2VjdGlvbiBQQVJBTVMgKChzdHJ1 Y3QgZml4ICosIHNlZ1QpKTsKIAotI2RlZmluZSBtZF9wYXJzZV9uYW1lKG5h bWUsIGV4cCwgYykgcHBjX3BhcnNlX25hbWUgKG5hbWUsIGV4cCkKKyNkZWZp bmUgbWRfcGFyc2VfbmFtZShuYW1lLCBleHAsIG1vZGUsIGMpIHBwY19wYXJz ZV9uYW1lIChuYW1lLCBleHApCiBleHRlcm4gaW50IHBwY19wYXJzZV9uYW1l IFBBUkFNUyAoKGNvbnN0IGNoYXIgKiwgc3RydWN0IGV4cHJlc3Npb25TICop KTsKIAogI2RlZmluZSBtZF9vcGVyYW5kKHgpCi0tLSAvaG9tZS9qYmV1bGlj aC9zcmMvYmludXRpbHMvbWFpbmxpbmUvMjAwNS0wOS0yNy9nYXMvY29uZmln L3RjLXNoLmMJMjAwNS0wOS0yNiAwODo0MToyNS4wMDAwMDAwMDAgKzAyMDAK KysrIDIwMDUtMDktMjcvZ2FzL2NvbmZpZy90Yy1zaC5jCTIwMDUtMDktMjgg MTQ6NDU6MDQuMDAwMDAwMDAwICswMjAwCkBAIC00MjQ2LDcgKzQyNDYsMTAg QEAgc2hfZW5kX29mX21hdGNoIChjaGFyICpjb250LCBjaGFyICp3aGF0KQog fQogCiBpbnQKLXNoX3BhcnNlX25hbWUgKGNoYXIgY29uc3QgKm5hbWUsIGV4 cHJlc3Npb25TICpleHByUCwgY2hhciAqbmV4dGNoYXJQKQorc2hfcGFyc2Vf bmFtZSAoY2hhciBjb25zdCAqbmFtZSwKKwkgICAgICAgZXhwcmVzc2lvblMg KmV4cHJQLAorCSAgICAgICBlbnVtIGV4cHJfbW9kZSBtb2RlLAorCSAgICAg ICBjaGFyICpuZXh0Y2hhclApCiB7CiAgIGNoYXIgKm5leHQgPSBpbnB1dF9s aW5lX3BvaW50ZXI7CiAgIGNoYXIgKm5leHRfZW5kOwpAQCAtNDI2NSwxMyAr NDI2OCwxMyBAQCBzaF9wYXJzZV9uYW1lIChjaGFyIGNvbnN0ICpuYW1lLCBl eHByZXNzCiAgICAgICAvKiBJZiB3ZSBoYXZlIGFuIGFic29sdXRlIHN5bWJv bCBvciBhIHJlZywgdGhlbiB3ZSBrbm93IGl0cwogCSAgICAgdmFsdWUgbm93 LiAgKi8KICAgICAgIHNlZ21lbnQgPSBTX0dFVF9TRUdNRU5UIChleHByUC0+ WF9hZGRfc3ltYm9sKTsKLSAgICAgIGlmIChzZWdtZW50ID09IGFic29sdXRl X3NlY3Rpb24pCisgICAgICBpZiAobW9kZSAhPSBleHByX2RlZmVyICYmIHNl Z21lbnQgPT0gYWJzb2x1dGVfc2VjdGlvbikKIAl7CiAJICBleHByUC0+WF9v cCA9IE9fY29uc3RhbnQ7CiAJICBleHByUC0+WF9hZGRfbnVtYmVyID0gU19H RVRfVkFMVUUgKGV4cHJQLT5YX2FkZF9zeW1ib2wpOwogCSAgZXhwclAtPlhf YWRkX3N5bWJvbCA9IE5VTEw7CiAJfQotICAgICAgZWxzZSBpZiAoc2VnbWVu dCA9PSByZWdfc2VjdGlvbikKKyAgICAgIGVsc2UgaWYgKG1vZGUgIT0gZXhw cl9kZWZlciAmJiBzZWdtZW50ID09IHJlZ19zZWN0aW9uKQogCXsKIAkgIGV4 cHJQLT5YX29wID0gT19yZWdpc3RlcjsKIAkgIGV4cHJQLT5YX2FkZF9udW1i ZXIgPSBTX0dFVF9WQUxVRSAoZXhwclAtPlhfYWRkX3N5bWJvbCk7Ci0tLSAv aG9tZS9qYmV1bGljaC9zcmMvYmludXRpbHMvbWFpbmxpbmUvMjAwNS0wOS0y Ny9nYXMvY29uZmlnL3RjLXNoLmgJMjAwNS0wOS0yNiAwODo0MToyNS4wMDAw MDAwMDAgKzAyMDAKKysrIDIwMDUtMDktMjcvZ2FzL2NvbmZpZy90Yy1zaC5o CTIwMDUtMDktMjggMTQ6NDc6MjIuMDAwMDAwMDAwICswMjAwCkBAIC0yMDYs OSArMjA2LDEwIEBAIGV4dGVybiBiZmRfYm9vbGVhbiBzaF9maXhfYWRqdXN0 YWJsZSAoc3QKICAgKChGSVgpLT5meF9yX3R5cGUgPT0gQkZEX1JFTE9DXzMy X1BMVF9QQ1JFTAkJXAogICAgfHwgKHNoX3JlbGF4ICYmIFNXSVRDSF9UQUJM RSAoRklYKSkpCiAKLSNkZWZpbmUgbWRfcGFyc2VfbmFtZShuYW1lLCBleHBy UCwgbmV4dGNoYXJQKSBcCi0gIHNoX3BhcnNlX25hbWUgKChuYW1lKSwgKGV4 cHJQKSwgKG5leHRjaGFyUCkpCi1pbnQgc2hfcGFyc2VfbmFtZSAoY2hhciBj b25zdCAqbmFtZSwgZXhwcmVzc2lvblMgKmV4cHJQLCBjaGFyICpuZXh0Y2hh cik7CisjZGVmaW5lIG1kX3BhcnNlX25hbWUobmFtZSwgZXhwclAsIG1vZGUs IG5leHRjaGFyUCkgXAorICBzaF9wYXJzZV9uYW1lICgobmFtZSksIChleHBy UCksIChtb2RlKSwgKG5leHRjaGFyUCkpCitpbnQgc2hfcGFyc2VfbmFtZSAo Y2hhciBjb25zdCAqbmFtZSwgZXhwcmVzc2lvblMgKmV4cHJQLAorCQkgICBl bnVtIGV4cHJfbW9kZSBtb2RlLCBjaGFyICpuZXh0Y2hhcik7CiAKICNkZWZp bmUgVENfQ09OU19GSVhfTkVXKEZSQUcsIE9GRiwgTEVOLCBFWFApIFwKICAg c2hfY29uc19maXhfbmV3ICgoRlJBRyksIChPRkYpLCAoTEVOKSwgKEVYUCkp Ci0tLSAvaG9tZS9qYmV1bGljaC9zcmMvYmludXRpbHMvbWFpbmxpbmUvMjAw NS0wOS0yNy9nYXMvY29uZmlnL3RjLXNoNjQuYwkyMDA1LTA4LTIyIDE0OjAx OjMxLjAwMDAwMDAwMCArMDIwMAorKysgMjAwNS0wOS0yNy9nYXMvY29uZmln L3RjLXNoNjQuYwkyMDA1LTA5LTI4IDE0OjQ4OjAxLjAwMDAwMDAwMCArMDIw MApAQCAtMzI0NCw4ICszMjQ0LDkgQEAgc2g2NF9mcm9iX2xhYmVsIChzeW1i b2xTICpzeW1wKQogICAgc3ltYm9sIGhvb2suICAqLwogCiBpbnQKLXNoNjRf Y29uc3VtZV9kYXRhbGFiZWwgKGNvbnN0IGNoYXIgKm5hbWUsIGV4cHJlc3Np b25TICpleHAsIGNoYXIgKmNwLAotCQkJc2VnVCAoKm9wZXJhbmRmKSAoZXhw cmVzc2lvblMgKikpCitzaDY0X2NvbnN1bWVfZGF0YWxhYmVsIChjb25zdCBj aGFyICpuYW1lLCBleHByZXNzaW9uUyAqZXhwLAorCQkJZW51bSBleHByX21v ZGUgbW9kZSwgY2hhciAqY3AsCisJCQlzZWdUICgqb3BlcmFuZGYpIChleHBy ZXNzaW9uUyAqLCBlbnVtIGV4cHJfbW9kZSkpCiB7CiAgIHN0YXRpYyBpbnQg cGFyc2luZ19kYXRhbGFiZWwgPSAwOwogCkBAIC0zMjU4LDcgKzMyNTksNyBA QCBzaDY0X2NvbnN1bWVfZGF0YWxhYmVsIChjb25zdCBjaGFyICpuYW1lCiAK ICAgICAgICppbnB1dF9saW5lX3BvaW50ZXIgPSAqY3A7CiAgICAgICBwYXJz aW5nX2RhdGFsYWJlbCA9IDE7Ci0gICAgICAoKm9wZXJhbmRmKSAoZXhwKTsK KyAgICAgICgqb3BlcmFuZGYpIChleHAsIGV4cHJfbm9ybWFsKTsKICAgICAg IHBhcnNpbmdfZGF0YWxhYmVsID0gc2F2ZV9wYXJzaW5nX2RhdGFsYWJlbDsK IAogICAgICAgaWYgKGV4cC0+WF9vcCA9PSBPX3N5bWJvbCB8fCBleHAtPlhf b3AgPT0gT19QSUNfcmVsb2MpCkBAIC0zMzMxLDcgKzMzMzIsNyBAQCBzaDY0 X2NvbnN1bWVfZGF0YWxhYmVsIChjb25zdCBjaGFyICpuYW1lCiAgICAgICBy ZXR1cm4gMTsKICAgICB9CiAKLSAgcmV0dXJuIHNoX3BhcnNlX25hbWUgKG5h bWUsIGV4cCwgY3ApOworICByZXR1cm4gc2hfcGFyc2VfbmFtZSAobmFtZSwg ZXhwLCBtb2RlLCBjcCk7CiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkIGp1c3QgYmVmb3JlIHN5bWJvbHMgYXJlIGJlaW5nIG91dHB1dC4gIEl0 Ci0tLSAvaG9tZS9qYmV1bGljaC9zcmMvYmludXRpbHMvbWFpbmxpbmUvMjAw NS0wOS0yNy9nYXMvY29uZmlnL3RjLXNoNjQuaAkyMDA1LTA5LTI2IDA4OjQx OjI1LjAwMDAwMDAwMCArMDIwMAorKysgMjAwNS0wOS0yNy9nYXMvY29uZmln L3RjLXNoNjQuaAkyMDA1LTA5LTI5IDEzOjA3OjA3LjAwMDAwMDAwMCArMDIw MApAQCAtMTI0LDEwICsxMjQsMTEgQEAgZXh0ZXJuIGludCBzaDY0X3Rhcmdl dF9tYWNoICh2b2lkKTsKICAgIGV4cHJlc3Npb24sIHNpbmNlIHdlIGhhdmUg aGFuZGxlZCBpdCBvdXJzZWx2ZXMuICBGSVhNRTogV2hhdCB3ZSByZWFsbHkK ICAgIG5lZWQgaXMgYSBuZXcgR0FTIGluZnJhc3RydWN0dXJlIGZlYXR1cmU6 IG1kX3F1YWxpZmllci4gICovCiAjdW5kZWYgbWRfcGFyc2VfbmFtZQotI2Rl ZmluZSBtZF9wYXJzZV9uYW1lKE5BTUUsIEVYUCwgQ1ApIFwKLSBzaDY0X2Nv bnN1bWVfZGF0YWxhYmVsIChOQU1FLCBFWFAsIENQLCBvcGVyYW5kKQotZXh0 ZXJuIGludCBzaDY0X2NvbnN1bWVfZGF0YWxhYmVsIChjb25zdCBjaGFyICos IGV4cHJlc3Npb25TICosIGNoYXIgKiwKLQkJCQkgICBzZWdUICgqKSAoZXhw cmVzc2lvblMgKikpOworI2RlZmluZSBtZF9wYXJzZV9uYW1lKE5BTUUsIEVY UCwgTU9ERSwgQ1ApIFwKKyBzaDY0X2NvbnN1bWVfZGF0YWxhYmVsIChOQU1F LCBFWFAsIE1PREUsIENQLCBvcGVyYW5kKQorZXh0ZXJuIGludCBzaDY0X2Nv bnN1bWVfZGF0YWxhYmVsIChjb25zdCBjaGFyICosIGV4cHJlc3Npb25TICos CisJCQkJICAgZW51bSBleHByX21vZGUsIGNoYXIgKiwKKwkJCQkgICBzZWdU ICgqKSAoZXhwcmVzc2lvblMgKiwgZW51bSBleHByX21vZGUpKTsKIAogLyog U2F5aW5nICIkIiBpcyB0aGUgc2FtZSBhcyBzYXlpbmcgIi4iLiAgKi8KICNk ZWZpbmUgRE9MTEFSX0RPVAotLS0gL2hvbWUvamJldWxpY2gvc3JjL2JpbnV0 aWxzL21haW5saW5lLzIwMDUtMDktMjcvZ2FzL2NvbmZpZy90Yy10aWM1NHgu aAkyMDA1LTA4LTE4IDA4OjUxOjMyLjAwMDAwMDAwMCArMDIwMAorKysgMjAw NS0wOS0yNy9nYXMvY29uZmlnL3RjLXRpYzU0eC5oCTIwMDUtMDktMjggMTQ6 NDI6MjYuMDAwMDAwMDAwICswMjAwCkBAIC04Myw3ICs4Myw3IEBAIGV4dGVy biB2b2lkIHRpYzU0eF9udW1iZXJfdG9fY2hhcnMgKGNoYXIKIGV4dGVybiB2 b2lkIHRpYzU0eF9hZGp1c3Rfc3ltdGFiICh2b2lkKTsKICNkZWZpbmUgdGNf dW5yZWNvZ25pemVkX2xpbmUoY2gpIHRpYzU0eF91bnJlY29nbml6ZWRfbGlu ZShjaCkKIGV4dGVybiBpbnQgdGljNTR4X3VucmVjb2duaXplZF9saW5lIChp bnQgY2gpOwotI2RlZmluZSBtZF9wYXJzZV9uYW1lKHMsZSxjKSB0aWM1NHhf cGFyc2VfbmFtZShzLGUpCisjZGVmaW5lIG1kX3BhcnNlX25hbWUocyxlLG0s YykgdGljNTR4X3BhcnNlX25hbWUocyxlKQogZXh0ZXJuIGludCB0aWM1NHhf cGFyc2VfbmFtZSAoY2hhciAqbmFtZSwgZXhwcmVzc2lvblMgKmUpOwogI2Rl ZmluZSBtZF91bmRlZmluZWRfc3ltYm9sKHMpIHRpYzU0eF91bmRlZmluZWRf c3ltYm9sKHMpCiBleHRlcm4gc3ltYm9sUyAqdGljNTR4X3VuZGVmaW5lZF9z eW1ib2wgKGNoYXIgKm5hbWUpOwotLS0gL2hvbWUvamJldWxpY2gvc3JjL2Jp bnV0aWxzL21haW5saW5lLzIwMDUtMDktMjcvZ2FzL2RvYy9hcy50ZXhpbmZv CTIwMDUtMDktMjYgMDg6NDE6MjYuMDAwMDAwMDAwICswMjAwCisrKyAyMDA1 LTA5LTI3L2dhcy9kb2MvYXMudGV4aW5mbwkyMDA1LTA5LTI3IDA5OjA2OjAx LjAwMDAwMDAwMCArMDIwMApAQCAtMzExOSw3ICszMTE5LDkgQEAgcHJvdmlk ZXMgYSBzcGVjaWFsIGRpcmVjdGl2ZSBAY29kZXsubGFiZQogQSBzeW1ib2wg Y2FuIGJlIGdpdmVuIGFuIGFyYml0cmFyeSB2YWx1ZSBieSB3cml0aW5nIGEg c3ltYm9sLCBmb2xsb3dlZAogYnkgYW4gZXF1YWxzIHNpZ24gQHNhbXB7PX0s IGZvbGxvd2VkIGJ5IGFuIGV4cHJlc3Npb24KIChAcHhyZWZ7RXhwcmVzc2lv bnN9KS4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byB1c2luZyB0aGUgQGNvZGV7 LnNldH0KLWRpcmVjdGl2ZS4gIEB4cmVme1NldCwsQGNvZGV7LnNldH19Lgor ZGlyZWN0aXZlLiAgQHhyZWZ7U2V0LCxAY29kZXsuc2V0fX0uICBJbiB0aGUg c2FtZSB3YXksIHVzaW5nIGEgZG91YmxlCitlcXVhbHMgc2lnbiBAc2FtcHs9 fUBzYW1wez19IGhlcmUgcmVwcmVzZW50cyBhbiBlcXVpdmFsZW50IG9mIHRo ZQorQGNvZGV7LmVxdn0gZGlyZWN0aXZlLiAgQHhyZWZ7RXF2LCxAY29kZXsu ZXF2fX0uCiAKIEBub2RlIFN5bWJvbCBOYW1lcwogQHNlY3Rpb24gU3ltYm9s IE5hbWVzCkBAIC0zNzE3LDYgKzM3MTksNyBAQCBTb21lIG1hY2hpbmUgY29u ZmlndXJhdGlvbnMgcHJvdmlkZSBhZGRpCiAqIEVuZGlmOjogICAgICAgICAg ICAgICAgICAgICAgIEBjb2Rley5lbmRpZn0KICogRXF1OjogICAgICAgICAg ICAgICAgICAgICAgICAgQGNvZGV7LmVxdSBAdmFye3N5bWJvbH0sIEB2YXJ7 ZXhwcmVzc2lvbn19CiAqIEVxdWl2OjogICAgICAgICAgICAgICAgICAgICAg IEBjb2Rley5lcXVpdiBAdmFye3N5bWJvbH0sIEB2YXJ7ZXhwcmVzc2lvbn19 CisqIEVxdjo6ICAgICAgICAgICAgICAgICAgICAgICAgIEBjb2Rley5lcXYg QHZhcntzeW1ib2x9LCBAdmFye2V4cHJlc3Npb259fQogKiBFcnI6OgkJCQlA Y29kZXsuZXJyfQogKiBFcnJvcjo6CQkJQGNvZGV7LmVycm9yIEB2YXJ7c3Ry aW5nfX0KICogRXhpdG06OgkJCUBjb2Rley5leGl0bX0KQEAgLTQyODQsNiAr NDI4NywxNSBAQCBFeGNlcHQgZm9yIHRoZSBjb250ZW50cyBvZiB0aGUgZXJy b3IgbWVzCiAuZW5kaWYKIC5lcXUgU1lNLFZBTAogQGVuZCBzbWFsbGV4YW1w bGUKK3BsdXMgaXQgcHJvdGVjdHMgdGhlIHN5bWJvbCBmcm9tIGxhdGVyIHJl ZGVmaW5pdGlvbi4KKworQG5vZGUgRXF2CitAc2VjdGlvbiBAY29kZXsuZXF2 IEB2YXJ7c3ltYm9sfSwgQHZhcntleHByZXNzaW9ufX0KK0BjaW5kZXggQGNv ZGV7ZXF2fSBkaXJlY3RpdmUKK1RoZSBAY29kZXsuZXF2fSBkaXJlY3RpdmUg aXMgbGlrZSBAY29kZXsuZXF1aXZ9LCBidXQgbm8gYXR0ZW1wdCBpcyBtYWRl IHRvCitldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBvciBhbnkgcGFydCBvZiBp dCBpbW1lZGlhdGVseS4gIEluc3RlYWQgZWFjaCB0aW1lCit0aGUgcmVzdWx0 aW5nIHN5bWJvbCBpcyB1c2VkIGluIGFuIGV4cHJlc3Npb24sIGEgc25hcHNo b3Qgb2YgaXRzIGN1cnJlbnQKK3ZhbHVlIGlzIHRha2VuLgogCiBAbm9kZSBF cnIKIEBzZWN0aW9uIEBjb2Rley5lcnJ9Ci0tLSAvaG9tZS9qYmV1bGljaC9z cmMvYmludXRpbHMvbWFpbmxpbmUvMjAwNS0wOS0yNy9nYXMvZHcyZ2VuY2Zp LmMJMjAwNS0wOC0xOCAwODo1MToyNi4wMDAwMDAwMDAgKzAyMDAKKysrIDIw MDUtMDktMjcvZ2FzL2R3MmdlbmNmaS5jCTIwMDUtMDktMjYgMTE6MTA6MTUu MDAwMDAwMDAwICswMjAwCkBAIC00MTUsNyArNDE1LDcgQEAgY2ZpX3BhcnNl X3JlZyAodm9pZCkKICAgICB9CiAjZW5kaWYKIAotICBleHByZXNzaW9uICgm ZXhwKTsKKyAgZXhwcmVzc2lvbl9hbmRfZXZhbHVhdGUgKCZleHApOwogICBz d2l0Y2ggKGV4cC5YX29wKQogICAgIHsKICAgICBjYXNlIE9fcmVnaXN0ZXI6 Ci0tLSAvaG9tZS9qYmV1bGljaC9zcmMvYmludXRpbHMvbWFpbmxpbmUvMjAw NS0wOS0yNy9nYXMvZXhwci5jCTIwMDUtMDUtMDYgMDg6MjQ6MjcuMDAwMDAw MDAwICswMjAwCisrKyAyMDA1LTA5LTI3L2dhcy9leHByLmMJMjAwNS0wOS0y OCAxNDozOToxMS4wMDAwMDAwMDAgKzAyMDAKQEAgLTQxLDcgKzQxLDcgQEAg c3RhdGljIHZvaWQgaW50ZWdlcl9jb25zdGFudCAoaW50IHJhZGl4LAogc3Rh dGljIHZvaWQgbXJpX2NoYXJfY29uc3RhbnQgKGV4cHJlc3Npb25TICopOwog c3RhdGljIHZvaWQgY3VycmVudF9sb2NhdGlvbiAoZXhwcmVzc2lvblMgKik7 CiBzdGF0aWMgdm9pZCBjbGVhbl91cF9leHByZXNzaW9uIChleHByZXNzaW9u UyAqIGV4cHJlc3Npb25QKTsKLXN0YXRpYyBzZWdUIG9wZXJhbmQgKGV4cHJl c3Npb25TICopOworc3RhdGljIHNlZ1Qgb3BlcmFuZCAoZXhwcmVzc2lvblMg KiwgZW51bSBleHByX21vZGUpOwogc3RhdGljIG9wZXJhdG9yVCBvcGVyYXRv ciAoaW50ICopOwogCiBleHRlcm4gY29uc3QgY2hhciBFWFBfQ0hBUlNbXSwg RkxUX0NIQVJTW107CkBAIC03MDgsNyArNzA4LDcgQEAgY3VycmVudF9sb2Nh dGlvbiAoZXhwcmVzc2lvblMgKmV4cHJlc3NpbwogCUlucHV0X2xpbmVfcG9p bnRlci0+KG5leHQgbm9uLWJsYW5rKSBjaGFyIGFmdGVyIG9wZXJhbmQuICAq LwogCiBzdGF0aWMgc2VnVAotb3BlcmFuZCAoZXhwcmVzc2lvblMgKmV4cHJl c3Npb25QKQorb3BlcmFuZCAoZXhwcmVzc2lvblMgKmV4cHJlc3Npb25QLCBl bnVtIGV4cHJfbW9kZSBtb2RlKQogewogICBjaGFyIGM7CiAgIHN5bWJvbFMg KnN5bWJvbFA7CS8qIFBvaW50cyB0byBzeW1ib2wuICAqLwpAQCAtOTQ0LDcg Kzk0NCwxMCBAQCBvcGVyYW5kIChleHByZXNzaW9uUyAqZXhwcmVzc2lvblAp CiAgICAgY2FzZSAnWyc6CiAjZW5kaWYKICAgICAgIC8qIERpZG4ndCBiZWdp biB3aXRoIGRpZ2l0ICYgbm90IGEgbmFtZS4gICovCi0gICAgICBzZWdtZW50 ID0gZXhwcmVzc2lvbiAoZXhwcmVzc2lvblApOworICAgICAgaWYgKG1vZGUg IT0gZXhwcl9kZWZlcikKKwlzZWdtZW50ID0gZXhwcmVzc2lvbiAoZXhwcmVz c2lvblApOworICAgICAgZWxzZQorCXNlZ21lbnQgPSBkZWZlcnJlZF9leHBy ZXNzaW9uIChleHByZXNzaW9uUCk7CiAgICAgICAvKiBleHByZXNzaW9uICgp IHdpbGwgcGFzcyB0cmFpbGluZyB3aGl0ZXNwYWNlLiAgKi8KICAgICAgIGlm ICgoYyA9PSAnKCcgJiYgKmlucHV0X2xpbmVfcG9pbnRlciAhPSAnKScpCiAJ ICB8fCAoYyA9PSAnWycgJiYgKmlucHV0X2xpbmVfcG9pbnRlciAhPSAnXScp KQpAQCAtMTAwMiw3ICsxMDA1LDcgQEAgb3BlcmFuZCAoZXhwcmVzc2lvblMg KmV4cHJlc3Npb25QKQogCWlmICgwICYmIChjID09ICctJyB8fCBjID09ICcr JykgJiYgKmlucHV0X2xpbmVfcG9pbnRlciA9PSBjKQogCSAgZ290byB0YXJn ZXRfb3A7CiAJCi0Jb3BlcmFuZCAoZXhwcmVzc2lvblApOworCW9wZXJhbmQg KGV4cHJlc3Npb25QLCBtb2RlKTsKIAlpZiAoZXhwcmVzc2lvblAtPlhfb3Ag PT0gT19jb25zdGFudCkKIAkgIHsKIAkgICAgLyogaW5wdXRfbGluZV9wb2lu dGVyIC0+IGNoYXIgYWZ0ZXIgb3BlcmFuZC4gICovCkBAIC0xMjE0LDcgKzEy MTcsNyBAQCBvcGVyYW5kIChleHByZXNzaW9uUyAqZXhwcmVzc2lvblApCiAJ ICAgICBzcGVjaWFsbHkgaW4gY2VydGFpbiBjb250ZXh0cy4gIElmIGEgbmFt ZSBhbHdheXMgaGFzIGEKIAkgICAgIHNwZWNpZmljIHZhbHVlLCBpdCBjYW4g b2Z0ZW4gYmUgaGFuZGxlZCBieSBzaW1wbHkKIAkgICAgIGVudGVyaW5nIGl0 IGluIHRoZSBzeW1ib2wgdGFibGUuICAqLwotCSAgaWYgKG1kX3BhcnNlX25h bWUgKG5hbWUsIGV4cHJlc3Npb25QLCAmYykpCisJICBpZiAobWRfcGFyc2Vf bmFtZSAobmFtZSwgZXhwcmVzc2lvblAsIG1vZGUsICZjKSkKIAkgICAgewog CSAgICAgICppbnB1dF9saW5lX3BvaW50ZXIgPSBjOwogCSAgICAgIGJyZWFr OwpAQCAtMTI2NSwxMiArMTI2OCwxMiBAQCBvcGVyYW5kIChleHByZXNzaW9u UyAqZXhwcmVzc2lvblApCiAJICAvKiBJZiB3ZSBoYXZlIGFuIGFic29sdXRl IHN5bWJvbCBvciBhIHJlZywgdGhlbiB3ZSBrbm93IGl0cwogCSAgICAgdmFs dWUgbm93LiAgKi8KIAkgIHNlZ21lbnQgPSBTX0dFVF9TRUdNRU5UIChzeW1i b2xQKTsKLQkgIGlmIChzZWdtZW50ID09IGFic29sdXRlX3NlY3Rpb24pCisJ ICBpZiAobW9kZSAhPSBleHByX2RlZmVyICYmIHNlZ21lbnQgPT0gYWJzb2x1 dGVfc2VjdGlvbikKIAkgICAgewogCSAgICAgIGV4cHJlc3Npb25QLT5YX29w ID0gT19jb25zdGFudDsKIAkgICAgICBleHByZXNzaW9uUC0+WF9hZGRfbnVt YmVyID0gU19HRVRfVkFMVUUgKHN5bWJvbFApOwogCSAgICB9Ci0JICBlbHNl IGlmIChzZWdtZW50ID09IHJlZ19zZWN0aW9uKQorCSAgZWxzZSBpZiAobW9k ZSAhPSBleHByX2RlZmVyICYmIHNlZ21lbnQgPT0gcmVnX3NlY3Rpb24pCiAJ ICAgIHsKIAkgICAgICBleHByZXNzaW9uUC0+WF9vcCA9IE9fcmVnaXN0ZXI7 CiAJICAgICAgZXhwcmVzc2lvblAtPlhfYWRkX251bWJlciA9IFNfR0VUX1ZB TFVFIChzeW1ib2xQKTsKQEAgLTEzMTQsNiArMTMxNyw5IEBAIG9wZXJhbmQg KGV4cHJlc3Npb25TICpleHByZXNzaW9uUCkKICAgaWYgKGV4cHJlc3Npb25Q LT5YX2FkZF9zeW1ib2wpCiAgICAgc3ltYm9sX21hcmtfdXNlZCAoZXhwcmVz c2lvblAtPlhfYWRkX3N5bWJvbCk7CiAKKyAgZXhwcmVzc2lvblAtPlhfYWRk X3N5bWJvbCA9IHN5bWJvbF9jbG9uZV9pZl9mb3J3YXJkX3JlZiAoZXhwcmVz c2lvblAtPlhfYWRkX3N5bWJvbCk7CisgIGV4cHJlc3Npb25QLT5YX29wX3N5 bWJvbCA9IHN5bWJvbF9jbG9uZV9pZl9mb3J3YXJkX3JlZiAoZXhwcmVzc2lv blAtPlhfb3Bfc3ltYm9sKTsKKwogICBzd2l0Y2ggKGV4cHJlc3Npb25QLT5Y X29wKQogICAgIHsKICAgICBkZWZhdWx0OgpAQCAtMTYxOSw3ICsxNjI1LDgg QEAgb3BlcmF0b3IgKGludCAqbnVtX2NoYXJzKQogCiBzZWdUCiBleHByIChp bnQgcmFua2FyZywJCS8qIExhcmdlciAjIGlzIGhpZ2hlciByYW5rLiAgKi8K LSAgICAgIGV4cHJlc3Npb25TICpyZXN1bHRQCS8qIERlbGl2ZXIgcmVzdWx0 IGhlcmUuICAqLykKKyAgICAgIGV4cHJlc3Npb25TICpyZXN1bHRQLAkvKiBE ZWxpdmVyIHJlc3VsdCBoZXJlLiAgKi8KKyAgICAgIGVudW0gZXhwcl9tb2Rl IG1vZGUJLyogQ29udHJvbHMgYmVoYXZpb3IuICAqLykKIHsKICAgb3BlcmF0 b3JfcmFua1QgcmFuayA9IChvcGVyYXRvcl9yYW5rVCkgcmFua2FyZzsKICAg c2VnVCByZXR2YWw7CkBAIC0xNjM0LDcgKzE2NDEsNyBAQCBleHByIChpbnQg cmFua2FyZywJCS8qIExhcmdlciAjIGlzIGhpZ2hlCiAgIGlmIChyYW5rID09 IDApCiAgICAgZG90X3ZhbHVlID0gZnJhZ19ub3dfZml4ICgpOwogCi0gIHJl dHZhbCA9IG9wZXJhbmQgKHJlc3VsdFApOworICByZXR2YWwgPSBvcGVyYW5k IChyZXN1bHRQLCBtb2RlKTsKIAogICAvKiBvcGVyYW5kICgpIGdvYmJsZXMg c3BhY2VzLiAgKi8KICAga25vdyAoKmlucHV0X2xpbmVfcG9pbnRlciAhPSAn ICcpOwpAQCAtMTY0Niw3ICsxNjUzLDcgQEAgZXhwciAoaW50IHJhbmthcmcs CQkvKiBMYXJnZXIgIyBpcyBoaWdoZQogCiAgICAgICBpbnB1dF9saW5lX3Bv aW50ZXIgKz0gb3BfY2hhcnM7CS8qIC0+IGFmdGVyIG9wZXJhdG9yLiAgKi8K IAotICAgICAgcmlnaHRzZWcgPSBleHByIChvcF9yYW5rWyhpbnQpIG9wX2xl ZnRdLCAmcmlnaHQpOworICAgICAgcmlnaHRzZWcgPSBleHByIChvcF9yYW5r WyhpbnQpIG9wX2xlZnRdLCAmcmlnaHQsIG1vZGUpOwogICAgICAgaWYgKHJp Z2h0Llhfb3AgPT0gT19hYnNlbnQpCiAJewogCSAgYXNfd2FybiAoXygibWlz c2luZyBvcGVyYW5kOyB6ZXJvIGFzc3VtZWQiKSk7CkBAIC0xODYxLDggKzE4 NjgsMjAxIEBAIGV4cHIgKGludCByYW5rYXJnLAkJLyogTGFyZ2VyICMgaXMg aGlnaGUKICAgaWYgKHJlc3VsdFAtPlhfYWRkX3N5bWJvbCkKICAgICBzeW1i b2xfbWFya191c2VkIChyZXN1bHRQLT5YX2FkZF9zeW1ib2wpOwogCisgIGlm IChyYW5rID09IDAgJiYgbW9kZSA9PSBleHByX2V2YWx1YXRlKQorICAgIHJl c29sdmVfZXhwcmVzc2lvbiAocmVzdWx0UCk7CisKICAgcmV0dXJuIHJlc3Vs dFAtPlhfb3AgPT0gT19jb25zdGFudCA/IGFic29sdXRlX3NlY3Rpb24gOiBy ZXR2YWw7CiB9CisKKy8qIFJlc29sdmUgYW4gZXhwcmVzc2lvbiB3aXRob3V0 IGNoYW5naW5nIGFueSBzeW1ib2xzL3N1Yi1leHByZXNzaW9ucworICAgdXNl ZC4gICovCisKK2ludAorcmVzb2x2ZV9leHByZXNzaW9uIChleHByZXNzaW9u UyAqZXhwcmVzc2lvblApCit7CisgIC8qIEhlbHAgb3V0IHdpdGggQ1NFLiAg Ki8KKyAgdmFsdWVUIGZpbmFsX3ZhbCA9IGV4cHJlc3Npb25QLT5YX2FkZF9u dW1iZXI7CisgIHN5bWJvbFMgKmFkZF9zeW1ib2wgPSBleHByZXNzaW9uUC0+ WF9hZGRfc3ltYm9sOworICBzeW1ib2xTICpvcF9zeW1ib2wgPSBleHByZXNz aW9uUC0+WF9vcF9zeW1ib2w7CisgIG9wZXJhdG9yVCBvcCA9IGV4cHJlc3Np b25QLT5YX29wOworICB2YWx1ZVQgbGVmdCwgcmlnaHQ7CisgIHNlZ1Qgc2Vn X2xlZnQsIHNlZ19yaWdodDsKKyAgZnJhZ1MgKmZyYWdfbGVmdCwgKmZyYWdf cmlnaHQ7CisKKyAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgZGVmYXVsdDoK KyAgICAgIHJldHVybiAwOworCisgICAgY2FzZSBPX2NvbnN0YW50OgorICAg IGNhc2UgT19yZWdpc3RlcjoKKyAgICAgIGxlZnQgPSAwOworICAgICAgYnJl YWs7CisKKyAgICBjYXNlIE9fc3ltYm9sOgorICAgIGNhc2UgT19zeW1ib2xf cnZhOgorICAgICAgaWYgKCFzbmFwc2hvdF9zeW1ib2wgKGFkZF9zeW1ib2ws ICZsZWZ0LCAmc2VnX2xlZnQsICZmcmFnX2xlZnQpKQorCXJldHVybiAwOwor CisgICAgICBicmVhazsKKworICAgIGNhc2UgT191bWludXM6CisgICAgY2Fz ZSBPX2JpdF9ub3Q6CisgICAgY2FzZSBPX2xvZ2ljYWxfbm90OgorICAgICAg aWYgKCFzbmFwc2hvdF9zeW1ib2wgKGFkZF9zeW1ib2wsICZsZWZ0LCAmc2Vn X2xlZnQsICZmcmFnX2xlZnQpKQorCXJldHVybiAwOworCisgICAgICBpZiAo c2VnX2xlZnQgIT0gYWJzb2x1dGVfc2VjdGlvbikKKwlyZXR1cm4gMDsKKwor ICAgICAgaWYgKG9wID09IE9fbG9naWNhbF9ub3QpCisJbGVmdCA9ICFsZWZ0 OworICAgICAgZWxzZSBpZiAob3AgPT0gT191bWludXMpCisJbGVmdCA9IC1s ZWZ0OworICAgICAgZWxzZQorCWxlZnQgPSB+bGVmdDsKKyAgICAgIG9wID0g T19jb25zdGFudDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBPX211bHRp cGx5OgorICAgIGNhc2UgT19kaXZpZGU6CisgICAgY2FzZSBPX21vZHVsdXM6 CisgICAgY2FzZSBPX2xlZnRfc2hpZnQ6CisgICAgY2FzZSBPX3JpZ2h0X3No aWZ0OgorICAgIGNhc2UgT19iaXRfaW5jbHVzaXZlX29yOgorICAgIGNhc2Ug T19iaXRfb3Jfbm90OgorICAgIGNhc2UgT19iaXRfZXhjbHVzaXZlX29yOgor ICAgIGNhc2UgT19iaXRfYW5kOgorICAgIGNhc2UgT19hZGQ6CisgICAgY2Fz ZSBPX3N1YnRyYWN0OgorICAgIGNhc2UgT19lcToKKyAgICBjYXNlIE9fbmU6 CisgICAgY2FzZSBPX2x0OgorICAgIGNhc2UgT19sZToKKyAgICBjYXNlIE9f Z2U6CisgICAgY2FzZSBPX2d0OgorICAgIGNhc2UgT19sb2dpY2FsX2FuZDoK KyAgICBjYXNlIE9fbG9naWNhbF9vcjoKKyAgICAgIGlmICghc25hcHNob3Rf c3ltYm9sIChhZGRfc3ltYm9sLCAmbGVmdCwgJnNlZ19sZWZ0LCAmZnJhZ19s ZWZ0KQorCSAgfHwgIXNuYXBzaG90X3N5bWJvbCAob3Bfc3ltYm9sLCAmcmln aHQsICZzZWdfcmlnaHQsICZmcmFnX3JpZ2h0KSkKKwlyZXR1cm4gMDsKKwor ICAgICAgLyogU2ltcGxpZnkgYWRkaXRpb24gb3Igc3VidHJhY3Rpb24gb2Yg YSBjb25zdGFudCBieSBmb2xkaW5nIHRoZQorCSBjb25zdGFudCBpbnRvIFhf YWRkX251bWJlci4gICovCisgICAgICBpZiAob3AgPT0gT19hZGQpCisJewor CSAgaWYgKHNlZ19yaWdodCA9PSBhYnNvbHV0ZV9zZWN0aW9uKQorCSAgICB7 CisJICAgICAgZmluYWxfdmFsICs9IHJpZ2h0OworCSAgICAgIG9wID0gT19z eW1ib2w7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIGVsc2UgaWYgKHNl Z19sZWZ0ID09IGFic29sdXRlX3NlY3Rpb24pCisJICAgIHsKKwkgICAgICBm aW5hbF92YWwgKz0gbGVmdDsKKwkgICAgICBsZWZ0ID0gcmlnaHQ7CisJICAg ICAgc2VnX2xlZnQgPSBzZWdfcmlnaHQ7CisJICAgICAgZXhwcmVzc2lvblAt PlhfYWRkX3N5bWJvbCA9IGV4cHJlc3Npb25QLT5YX29wX3N5bWJvbDsKKwkg ICAgICBvcCA9IE9fc3ltYm9sOworCSAgICAgIGJyZWFrOworCSAgICB9CisJ fQorICAgICAgZWxzZSBpZiAob3AgPT0gT19zdWJ0cmFjdCkKKwl7CisJICBp ZiAoc2VnX3JpZ2h0ID09IGFic29sdXRlX3NlY3Rpb24pCisJICAgIHsKKwkg ICAgICBmaW5hbF92YWwgLT0gcmlnaHQ7CisJICAgICAgb3AgPSBPX3N5bWJv bDsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKworICAgICAgLyogRXF1 YWxpdHkgYW5kIG5vbi1lcXVhbGl0eSB0ZXN0cyBhcmUgcGVybWl0dGVkIG9u IGFueXRoaW5nLgorCSBTdWJ0cmFjdGlvbiwgYW5kIG90aGVyIGNvbXBhcmlz b24gb3BlcmF0b3JzIGFyZSBwZXJtaXR0ZWQgaWYKKwkgYm90aCBvcGVyYW5k cyBhcmUgaW4gdGhlIHNhbWUgc2VjdGlvbi4gIE90aGVyd2lzZSwgYm90aAor CSBvcGVyYW5kcyBtdXN0IGJlIGFic29sdXRlLiAgV2UgYWxyZWFkeSBoYW5k bGVkIHRoZSBjYXNlIG9mCisJIGFkZGl0aW9uIG9yIHN1YnRyYWN0aW9uIG9m IGEgY29uc3RhbnQgYWJvdmUuICAqLworICAgICAgaWYgKCEoc2VnX2xlZnQg PT0gYWJzb2x1dGVfc2VjdGlvbgorCSAgICAgICAmJiBzZWdfcmlnaHQgPT0g YWJzb2x1dGVfc2VjdGlvbikKKwkgICYmICEob3AgPT0gT19lcSB8fCBvcCA9 PSBPX25lKQorCSAgJiYgISgob3AgPT0gT19zdWJ0cmFjdAorCQl8fCBvcCA9 PSBPX2x0IHx8IG9wID09IE9fbGUgfHwgb3AgPT0gT19nZSB8fCBvcCA9PSBP X2d0KQorCSAgICAgICAmJiBzZWdfbGVmdCA9PSBzZWdfcmlnaHQKKwkgICAg ICAgJiYgKGZpbmFsaXplX3N5bXMgfHwgZnJhZ19sZWZ0ID09IGZyYWdfcmln aHQpCisJICAgICAgICYmICgoc2VnX2xlZnQgIT0gdW5kZWZpbmVkX3NlY3Rp b24KKwkJICAgICYmIHNlZ19sZWZ0ICE9IHJlZ19zZWN0aW9uKQorCQkgICB8 fCBhZGRfc3ltYm9sID09IG9wX3N5bWJvbCkpKQorCXJldHVybiAwOworCisg ICAgICBzd2l0Y2ggKG9wKQorCXsKKwljYXNlIE9fYWRkOgkJCWxlZnQgKz0g cmlnaHQ7IGJyZWFrOworCWNhc2UgT19zdWJ0cmFjdDoJCWxlZnQgLT0gcmln aHQ7IGJyZWFrOworCWNhc2UgT19tdWx0aXBseToJCWxlZnQgKj0gcmlnaHQ7 IGJyZWFrOworCWNhc2UgT19kaXZpZGU6CisJICBpZiAocmlnaHQgPT0gMCkK KwkgICAgcmV0dXJuIDA7CisJICBsZWZ0ID0gKG9mZnNldFQpIGxlZnQgLyAo b2Zmc2V0VCkgcmlnaHQ7CisJICBicmVhazsKKwljYXNlIE9fbW9kdWx1czoK KwkgIGlmIChyaWdodCA9PSAwKQorCSAgICByZXR1cm4gMDsKKwkgIGxlZnQg PSAob2Zmc2V0VCkgbGVmdCAlIChvZmZzZXRUKSByaWdodDsKKwkgIGJyZWFr OworCWNhc2UgT19sZWZ0X3NoaWZ0OgkJbGVmdCA8PD0gcmlnaHQ7IGJyZWFr OworCWNhc2UgT19yaWdodF9zaGlmdDoJCWxlZnQgPj49IHJpZ2h0OyBicmVh azsKKwljYXNlIE9fYml0X2luY2x1c2l2ZV9vcjoJbGVmdCB8PSByaWdodDsg YnJlYWs7CisJY2FzZSBPX2JpdF9vcl9ub3Q6CQlsZWZ0IHw9IH5yaWdodDsg YnJlYWs7CisJY2FzZSBPX2JpdF9leGNsdXNpdmVfb3I6CWxlZnQgXj0gcmln aHQ7IGJyZWFrOworCWNhc2UgT19iaXRfYW5kOgkJCWxlZnQgJj0gcmlnaHQ7 IGJyZWFrOworCWNhc2UgT19lcToKKwljYXNlIE9fbmU6CisJICBsZWZ0ID0g KGxlZnQgPT0gcmlnaHQKKwkJICAmJiBzZWdfbGVmdCA9PSBzZWdfcmlnaHQK KwkJICAmJiAoZmluYWxpemVfc3ltcyB8fCBmcmFnX2xlZnQgPT0gZnJhZ19y aWdodCkKKwkJICAmJiAoKHNlZ19sZWZ0ICE9IHVuZGVmaW5lZF9zZWN0aW9u CisJCSAgICAgICAmJiBzZWdfbGVmdCAhPSByZWdfc2VjdGlvbikKKwkJICAg ICAgfHwgYWRkX3N5bWJvbCA9PSBvcF9zeW1ib2wpCisJCSAgPyB+ICh2YWx1 ZVQpIDAgOiAwKTsKKwkgIGlmIChvcCA9PSBPX25lKQorCSAgICBsZWZ0ID0g fmxlZnQ7CisJICBicmVhazsKKwljYXNlIE9fbHQ6CisJICBsZWZ0ID0gKG9m ZnNldFQpIGxlZnQgPCAgKG9mZnNldFQpIHJpZ2h0ID8gfiAodmFsdWVUKSAw IDogMDsKKwkgIGJyZWFrOworCWNhc2UgT19sZToKKwkgIGxlZnQgPSAob2Zm c2V0VCkgbGVmdCA8PSAob2Zmc2V0VCkgcmlnaHQgPyB+ICh2YWx1ZVQpIDAg OiAwOworCSAgYnJlYWs7CisJY2FzZSBPX2dlOgorCSAgbGVmdCA9IChvZmZz ZXRUKSBsZWZ0ID49IChvZmZzZXRUKSByaWdodCA/IH4gKHZhbHVlVCkgMCA6 IDA7CisJICBicmVhazsKKwljYXNlIE9fZ3Q6CisJICBsZWZ0ID0gKG9mZnNl dFQpIGxlZnQgPiAgKG9mZnNldFQpIHJpZ2h0ID8gfiAodmFsdWVUKSAwIDog MDsKKwkgIGJyZWFrOworCWNhc2UgT19sb2dpY2FsX2FuZDoJbGVmdCA9IGxl ZnQgJiYgcmlnaHQ7IGJyZWFrOworCWNhc2UgT19sb2dpY2FsX29yOglsZWZ0 ID0gbGVmdCB8fCByaWdodDsgYnJlYWs7CisJZGVmYXVsdDoJCWFib3J0ICgp OworCX0KKworICAgICAgb3AgPSBPX2NvbnN0YW50OworICAgICAgYnJlYWs7 CisgICAgfQorCisgIGlmIChvcCA9PSBPX3N5bWJvbCkKKyAgICB7CisgICAg ICBpZiAoc2VnX2xlZnQgPT0gYWJzb2x1dGVfc2VjdGlvbikKKwlvcCA9IE9f Y29uc3RhbnQ7CisgICAgICBlbHNlIGlmIChzZWdfbGVmdCA9PSByZWdfc2Vj dGlvbiAmJiBmaW5hbF92YWwgPT0gMCkKKwlvcCA9IE9fcmVnaXN0ZXI7Cisg ICAgfQorICBleHByZXNzaW9uUC0+WF9vcCA9IG9wOworCisgIGlmIChvcCA9 PSBPX2NvbnN0YW50IHx8IG9wID09IE9fcmVnaXN0ZXIpCisgICAgZmluYWxf dmFsICs9IGxlZnQ7CisgIGV4cHJlc3Npb25QLT5YX2FkZF9udW1iZXIgPSBm aW5hbF92YWw7CisKKyAgcmV0dXJuIDE7Cit9CiAMCiAvKiBUaGlzIGxpdmVz IGhlcmUgYmVjYXVzZSBpdCBiZWxvbmdzIGVxdWFsbHkgaW4gZXhwci5jICYg cmVhZC5jLgogICAgZXhwci5jIGlzIGp1c3QgYSBicmFuY2ggb2ZmaWNlIHJl YWQuYyBhbnl3YXksIGFuZCBwdXR0aW5nIGl0CkBAIC0xODk5LDYgKzIwOTks NiBAQCB1bnNpZ25lZCBpbnQKIGdldF9zaW5nbGVfbnVtYmVyICh2b2lkKQog ewogICBleHByZXNzaW9uUyBleHA7Ci0gIG9wZXJhbmQgKCZleHApOworICBv cGVyYW5kICgmZXhwLCBleHByX25vcm1hbCk7CiAgIHJldHVybiBleHAuWF9h ZGRfbnVtYmVyOwogfQotLS0gL2hvbWUvamJldWxpY2gvc3JjL2JpbnV0aWxz L21haW5saW5lLzIwMDUtMDktMjcvZ2FzL2V4cHIuaAkyMDA1LTA1LTA2IDA4 OjI0OjI3LjAwMDAwMDAwMCArMDIwMAorKysgMjAwNS0wOS0yNy9nYXMvZXhw ci5oCTIwMDUtMDktMjYgMTE6MDg6NDguMDAwMDAwMDAwICswMjAwCkBAIC0x NDMsOCArMTQzLDE3IEBAIHR5cGVkZWYgc3RydWN0IGV4cHJlc3Npb25TIHsK ICAgdW5zaWduZWQgc2hvcnQgWF9tZDsKIH0gZXhwcmVzc2lvblM7CiAKK2Vu dW0gZXhwcl9tb2RlCit7CisgIGV4cHJfZXZhbHVhdGUsCisgIGV4cHJfbm9y bWFsLAorICBleHByX2RlZmVyCit9OworCiAvKiAicmVzdWx0IiBzaG91bGQg YmUgdHlwZSAoZXhwcmVzc2lvblMgKikuICAqLwotI2RlZmluZSBleHByZXNz aW9uKHJlc3VsdCkgZXhwciAoMCwgcmVzdWx0KQorI2RlZmluZSBleHByZXNz aW9uKHJlc3VsdCkgZXhwciAoMCwgcmVzdWx0LCBleHByX25vcm1hbCkKKyNk ZWZpbmUgZXhwcmVzc2lvbl9hbmRfZXZhbHVhdGUocmVzdWx0KSBleHByICgw LCByZXN1bHQsIGV4cHJfZXZhbHVhdGUpCisjZGVmaW5lIGRlZmVycmVkX2V4 cHJlc3Npb24ocmVzdWx0KSBleHByICgwLCByZXN1bHQsIGV4cHJfZGVmZXIp CiAKIC8qIElmIGFuIGV4cHJlc3Npb24gaXMgT19iaWcsIGxvb2sgaGVyZSBm b3IgaXRzIHZhbHVlLiBUaGVzZSBjb21tb24KICAgIGRhdGEgbWF5IGJlIGNs b2JiZXJlZCB3aGVuZXZlciBleHByKCkgaXMgY2FsbGVkLiAgKi8KQEAgLTE2 MCwxMCArMTY5LDEyIEBAIHR5cGVkZWYgY2hhciBvcGVyYXRvcl9yYW5rVDsK IGV4dGVybiBjaGFyIGdldF9zeW1ib2xfZW5kICh2b2lkKTsKIGV4dGVybiB2 b2lkIGV4cHJfYmVnaW4gKHZvaWQpOwogZXh0ZXJuIHZvaWQgZXhwcl9zZXRf cHJlY2VkZW5jZSAodm9pZCk7Ci1leHRlcm4gc2VnVCBleHByIChpbnQgcmFu aywgZXhwcmVzc2lvblMgKiByZXN1bHRQKTsKK2V4dGVybiBzZWdUIGV4cHIg KGludCwgZXhwcmVzc2lvblMgKiwgZW51bSBleHByX21vZGUpOwogZXh0ZXJu IHVuc2lnbmVkIGludCBnZXRfc2luZ2xlX251bWJlciAodm9pZCk7CiBleHRl cm4gc3ltYm9sUyAqbWFrZV9leHByX3N5bWJvbCAoZXhwcmVzc2lvblMgKiBl eHByZXNzaW9uUCk7CiBleHRlcm4gaW50IGV4cHJfc3ltYm9sX3doZXJlIChz eW1ib2xTICosIGNoYXIgKiosIHVuc2lnbmVkIGludCAqKTsKIAogZXh0ZXJu IHN5bWJvbFMgKmV4cHJfYnVpbGRfdWNvbnN0YW50IChvZmZzZXRUKTsKIGV4 dGVybiBzeW1ib2xTICpleHByX2J1aWxkX2RvdCAodm9pZCk7CisKK2ludCBy ZXNvbHZlX2V4cHJlc3Npb24gKGV4cHJlc3Npb25TICopOwotLS0gL2hvbWUv amJldWxpY2gvc3JjL2JpbnV0aWxzL21haW5saW5lLzIwMDUtMDktMjcvZ2Fz L3JlYWQuYwkyMDA1LTA5LTI2IDA4OjQxOjE5LjAwMDAwMDAwMCArMDIwMAor KysgMjAwNS0wOS0yNy9nYXMvcmVhZC5jCTIwMDUtMDktMjkgMDk6MzY6MDMu MDAwMDAwMDAwICswMjAwCkBAIC0zMjMsNiArMzIzLDcgQEAgc3RhdGljIGNv bnN0IHBzZXVkb190eXBlUyBwb3RhYmxlW10gPSB7CiAvKiBlbmRlZiAgKi8K ICAgeyJlcXUiLCBzX3NldCwgMH0sCiAgIHsiZXF1aXYiLCBzX3NldCwgMX0s CisgIHsiZXF2Iiwgc19zZXQsIC0xfSwKICAgeyJlcnIiLCBzX2VyciwgMH0s CiAgIHsiZXJyb3IiLCBzX2Vycndhcm4sIDF9LAogICB7ImV4aXRtIiwgc19t ZXhpdCwgMH0sCkBAIC00NDEsNyArNDQyLDcgQEAgc3RhdGljIGNvbnN0IHBz ZXVkb190eXBlUyBwb3RhYmxlW10gPSB7CiBzdGF0aWMgb2Zmc2V0VAogZ2V0 X2Fic29sdXRlX2V4cHIgKGV4cHJlc3Npb25TICpleHApCiB7Ci0gIGV4cHJl c3Npb24gKGV4cCk7CisgIGV4cHJlc3Npb25fYW5kX2V2YWx1YXRlIChleHAp OwogICBpZiAoZXhwLT5YX29wICE9IE9fY29uc3RhbnQpCiAgICAgewogICAg ICAgaWYgKGV4cC0+WF9vcCAhPSBPX2Fic2VudCkKQEAgLTc4Nyw2ICs3ODgs MTQgQEAgcmVhZF9hX3NvdXJjZV9maWxlIChjaGFyICpuYW1lKQogCQkgIC8q IElucHV0X2xpbmVfcG9pbnRlci0+YWZ0ZXIgJzonLiAgKi8KIAkJICBTS0lQ X1dISVRFU1BBQ0UgKCk7CiAJCX0KKyAgICAgICAgICAgICAgZWxzZSBpZiAo aW5wdXRfbGluZV9wb2ludGVyWzFdID09ICc9JworCQkgICAgICAgJiYgKGMg PT0gJz0nCisJCQkgICB8fCAoKGMgPT0gJyAnIHx8IGMgPT0gJ1x0JykKKwkJ CSAgICAgICAmJiBpbnB1dF9saW5lX3BvaW50ZXJbMl0gPT0gJz0nKSkpCisJ CXsKKwkJICBlcXVhbHMgKHMsIC0xKTsKKwkJICBkZW1hbmRfZW1wdHlfcmVz dF9vZl9saW5lICgpOworCQl9CiAgICAgICAgICAgICAgIGVsc2UgaWYgKChj ID09ICc9JwogICAgICAgICAgICAgICAgICAgICAgICB8fCAoKGMgPT0gJyAn IHx8IGMgPT0gJ1x0JykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm JiBpbnB1dF9saW5lX3BvaW50ZXJbMV0gPT0gJz0nKSkKQEAgLTIyMTAsNyAr MjIxOSw3IEBAIHNfbHN5bSAoaW50IGlnbm9yZSBBVFRSSUJVVEVfVU5VU0VE KQogICAgIH0KIAogICBpbnB1dF9saW5lX3BvaW50ZXIrKzsKLSAgZXhwcmVz c2lvbiAoJmV4cCk7CisgIGV4cHJlc3Npb25fYW5kX2V2YWx1YXRlICgmZXhw KTsKIAogICBpZiAoZXhwLlhfb3AgIT0gT19jb25zdGFudAogICAgICAgJiYg ZXhwLlhfb3AgIT0gT19yZWdpc3RlcikKQEAgLTI3NDMsNyArMjc1Miw3IEBA IGVuZF9yZXBlYXQgKGludCBleHRyYSkKIH0KIAogc3RhdGljIHZvaWQKLWFz c2lnbl9zeW1ib2wgKGNoYXIgKm5hbWUsIGludCBub19yZWFzc2lnbikKK2Fz c2lnbl9zeW1ib2wgKGNoYXIgKm5hbWUsIGludCBtb2RlKQogewogICBzeW1i b2xTICpzeW1ib2xQOwogCkBAIC0yNzg0LDE4ICsyNzkzLDM3IEBAIGFzc2ln bl9zeW1ib2wgKGNoYXIgKm5hbWUsIGludCBub19yZWFzc2kKICNlbmRpZgog ICAgIH0KIAotICAvKiBQZXJtaXQgcmVnaXN0ZXIgbmFtZXMgdG8gYmUgcmVk ZWZpbmVkLiAgKi8KLSAgaWYgKG5vX3JlYXNzaWduCi0gICAgICAmJiBTX0lT X0RFRklORUQgKHN5bWJvbFApCi0gICAgICAmJiBTX0dFVF9TRUdNRU5UIChz eW1ib2xQKSAhPSByZWdfc2VjdGlvbikKLSAgICBhc19iYWQgKF8oInN5bWJv bCBgJXMnIGlzIGFscmVhZHkgZGVmaW5lZCIpLCBuYW1lKTsKKyAgaWYgKFNf SVNfREVGSU5FRCAoc3ltYm9sUCkpCisgICAgeworICAgICAgLyogUGVybWl0 IHJlZ2lzdGVyIG5hbWVzIHRvIGJlIHJlZGVmaW5lZC4gICovCisgICAgICBp ZiAoKG1vZGUgIT0gMCB8fCAhU19JU19WT0xBVElMRSAoc3ltYm9sUCkpCisJ ICAmJiBTX0dFVF9TRUdNRU5UIChzeW1ib2xQKSAhPSByZWdfc2VjdGlvbikK Kwl7CisJICBhc19iYWQgKF8oInN5bWJvbCBgJXMnIGlzIGFscmVhZHkgZGVm aW5lZCIpLCBuYW1lKTsKKwkgIHN5bWJvbFAgPSBzeW1ib2xfY2xvbmUgKHN5 bWJvbFAsIDApOworCX0KKyAgICAgIC8qIElmIHRoZSBzeW1ib2wgaXMgdm9s YXRpbGUsIGNvcHkgdGhlIHN5bWJvbCBhbmQgcmVwbGFjZSB0aGUKKwkgb3Jp Z2luYWwgd2l0aCB0aGUgY29weSwgc28gdGhhdCBwcmV2aW91cyB1c2VzIG9m IHRoZSBzeW1ib2wgd2lsbAorCSByZXRhaW4gdGhlIHZhbHVlIG9mIHRoZSBz eW1ib2wgYXQgdGhlIHBvaW50IG9mIHVzZS4gICovCisgICAgICBlbHNlIGlm IChTX0lTX1ZPTEFUSUxFIChzeW1ib2xQKQorCSAgLyogVGhpcyBjb3VsZCBi ZSBhdm9pZGVkIHdoZW4gdGhlIHN5bWJvbCB3YXNuJ3QgdXNlZCBzbyBmYXIs IGJ1dAorCSAgICAgdGhlIGNvbW1lbnQgaW4gc3RydWMtc3ltYm9sLmggc2F5 cyB0aGlzIGZsYWcgaXNuJ3QgcmVsaWFibGUuICAqLworCSAgJiYgKDEgfHwg c3ltYm9sX3VzZWRfcCAoc3ltYm9sUCkpKQorCXN5bWJvbFAgPSBzeW1ib2xf Y2xvbmUgKHN5bWJvbFAsIDEpOworICAgIH0KKworICBpZiAobW9kZSA9PSAw KQorICAgIFNfU0VUX1ZPTEFUSUxFIChzeW1ib2xQKTsKKyAgZWxzZSBpZiAo bW9kZSA8IDApCisgICAgU19TRVRfRk9SV0FSRF9SRUYgKHN5bWJvbFApOwog CiAgIHBzZXVkb19zZXQgKHN5bWJvbFApOwogfQogCi0vKiBIYW5kbGUgdGhl IC5lcXUsIC5lcXVpdiBhbmQgLnNldCBkaXJlY3RpdmVzLiAgSWYgRVFVSVYg aXMgMSwgdGhlbgotICAgdGhpcyBpcyAuZXF1aXYsIGFuZCBpdCBpcyBhbiBl cnJvciBpZiB0aGUgc3ltYm9sIGlzIGFscmVhZHkKLSAgIGRlZmluZWQuICAq LworLyogSGFuZGxlIHRoZSAuZXF1LCAuZXF1aXYsIC5lcXYsIGFuZCAuc2V0 IGRpcmVjdGl2ZXMuICBJZiBFUVVJViBpcyAxLAorICAgdGhlbiB0aGlzIGlz IC5lcXVpdiwgYW5kIGl0IGlzIGFuIGVycm9yIGlmIHRoZSBzeW1ib2wgaXMg YWxyZWFkeQorICAgZGVmaW5lZC4gIElmIEVRVUlWIGlzIC0xLCB0aGUgc3lt Ym9sIGFkZGl0aW9uYWxseSBpcyBhIGZvcndhcmQKKyAgIHJlZmVyZW5jZS4g ICovCiAKIHZvaWQKIHNfc2V0IChpbnQgZXF1aXYpCkBAIC0yOTE3LDYgKzI5 NDUsNyBAQCBzX3NwYWNlIChpbnQgbXVsdCkKICAgICAgIHx8IHZhbC5YX2Fk ZF9udW1iZXIgPiAweGZmCiAgICAgICB8fCAobXVsdCAhPSAwICYmIG11bHQg IT0gMSAmJiB2YWwuWF9hZGRfbnVtYmVyICE9IDApKQogICAgIHsKKyAgICAg IHJlc29sdmVfZXhwcmVzc2lvbiAoJmV4cCk7CiAgICAgICBpZiAoZXhwLlhf b3AgIT0gT19jb25zdGFudCkKIAlhc19iYWQgKF8oInVuc3VwcG9ydGVkIHZh cmlhYmxlIHNpemUgb3IgZmlsbCB2YWx1ZSIpKTsKICAgICAgIGVsc2UKQEAg LTI5MzIsNiArMjk2MSw5IEBAIHNfc3BhY2UgKGludCBtdWx0KQogICAgIH0K ICAgZWxzZQogICAgIHsKKyAgICAgIGlmIChub3dfc2VnID09IGFic29sdXRl X3NlY3Rpb24gfHwgbXJpX2NvbW1vbl9zeW1ib2wgIT0gTlVMTCkKKwlyZXNv bHZlX2V4cHJlc3Npb24gKCZleHApOworCiAgICAgICBpZiAoZXhwLlhfb3Ag PT0gT19jb25zdGFudCkKIAl7CiAJICBsb25nIHJlcGVhdDsKQEAgLTMxODUs NyArMzIxNywxMCBAQCBwc2V1ZG9fc2V0IChzeW1ib2xTICpzeW1ib2xQKQog CiAgIGtub3cgKHN5bWJvbFApOwkJLyogTlVMTCBwb2ludGVyIGlzIGxvZ2lj IGVycm9yLiAgKi8KIAotICAodm9pZCkgZXhwcmVzc2lvbiAoJmV4cCk7Cisg IGlmICghU19JU19GT1JXQVJEX1JFRiAoc3ltYm9sUCkpCisgICAgKHZvaWQp IGV4cHJlc3Npb24gKCZleHApOworICBlbHNlCisgICAgKHZvaWQpIGRlZmVy cmVkX2V4cHJlc3Npb24gKCZleHApOwogCiAgIGlmIChleHAuWF9vcCA9PSBP X2lsbGVnYWwpCiAgICAgYXNfYmFkIChfKCJpbGxlZ2FsIGV4cHJlc3Npb24i KSk7CkBAIC0zMTk5LDYgKzMyMzQsNyBAQCBwc2V1ZG9fc2V0IChzeW1ib2xT ICpzeW1ib2xQKQogCWFzX2JhZCAoXygiZmxvYXRpbmcgcG9pbnQgbnVtYmVy IGludmFsaWQiKSk7CiAgICAgfQogICBlbHNlIGlmIChleHAuWF9vcCA9PSBP X3N1YnRyYWN0CisJICAgJiYgIVNfSVNfRk9SV0FSRF9SRUYgKHN5bWJvbFAp CiAJICAgJiYgU0VHX05PUk1BTCAoU19HRVRfU0VHTUVOVCAoZXhwLlhfYWRk X3N5bWJvbCkpCiAJICAgJiYgKHN5bWJvbF9nZXRfZnJhZyAoZXhwLlhfYWRk X3N5bWJvbCkKIAkgICAgICAgPT0gc3ltYm9sX2dldF9mcmFnIChleHAuWF9v cF9zeW1ib2wpKSkKQEAgLTMyNDUsNyArMzI4MSw3IEBAIHBzZXVkb19zZXQg KHN5bWJvbFMgKnN5bWJvbFApCiAJICAqc3ltYm9sX1hfYWRkX251bWJlciAo c3ltYm9sUCkgKz0gZXhwLlhfYWRkX251bWJlcjsKIAkgIGJyZWFrOwogCX0K LSAgICAgIGVsc2UgaWYgKHNlZyAhPSB1bmRlZmluZWRfc2VjdGlvbikKKyAg ICAgIGVsc2UgaWYgKCFTX0lTX0ZPUldBUkRfUkVGIChzeW1ib2xQKSAmJiBz ZWcgIT0gdW5kZWZpbmVkX3NlY3Rpb24pCiAJewogCSAgc3ltYm9sUyAqcyA9 IGV4cC5YX2FkZF9zeW1ib2w7CiAKQEAgLTQ4MzgsNiArNDg3NCw4IEBAIGVx dWFscyAoY2hhciAqc3ltX25hbWUsIGludCByZWFzc2lnbikKICAgaW5wdXRf bGluZV9wb2ludGVyKys7CiAgIGlmICgqaW5wdXRfbGluZV9wb2ludGVyID09 ICc9JykKICAgICBpbnB1dF9saW5lX3BvaW50ZXIrKzsKKyAgaWYgKHJlYXNz aWduIDwgMCAmJiAqaW5wdXRfbGluZV9wb2ludGVyID09ICc9JykKKyAgICBp bnB1dF9saW5lX3BvaW50ZXIrKzsKIAogICB3aGlsZSAoKmlucHV0X2xpbmVf cG9pbnRlciA9PSAnICcgfHwgKmlucHV0X2xpbmVfcG9pbnRlciA9PSAnXHQn KQogICAgIGlucHV0X2xpbmVfcG9pbnRlcisrOwpAQCAtNDg0NSw3ICs0ODgz LDcgQEAgZXF1YWxzIChjaGFyICpzeW1fbmFtZSwgaW50IHJlYXNzaWduKQog ICBpZiAoZmxhZ19tcmkpCiAgICAgc3RvcCA9IG1yaV9jb21tZW50X2ZpZWxk ICgmc3RvcGMpOwogCi0gIGFzc2lnbl9zeW1ib2wgKHN5bV9uYW1lLCAhcmVh c3NpZ24pOworICBhc3NpZ25fc3ltYm9sIChzeW1fbmFtZSwgcmVhc3NpZ24g Pj0gMCA/ICFyZWFzc2lnbiA6IHJlYXNzaWduKTsKIAogICBpZiAoZmxhZ19t cmkpCiAgICAgewotLS0gL2hvbWUvamJldWxpY2gvc3JjL2JpbnV0aWxzL21h aW5saW5lLzIwMDUtMDktMjcvZ2FzL3N0cnVjLXN5bWJvbC5oCTIwMDUtMDgt MTggMDg6NTE6MjYuMDAwMDAwMDAwICswMjAwCisrKyAyMDA1LTA5LTI3L2dh cy9zdHJ1Yy1zeW1ib2wuaAkyMDA1LTA5LTI2IDE1OjMwOjI1LjAwMDAwMDAw MCArMDIwMApAQCAtNjAsNiArNjAsMTIgQEAgc3RydWN0IHN5bWJvbAogICAg ICBhIHN5bWJvbCBpcyB1c2VkIGluIGJhY2tlbmQgcm91dGluZXMuICAqLwog ICB1bnNpZ25lZCBpbnQgc3lfdXNlZCA6IDE7CiAKKyAgLyogV2hldGhlciB0 aGUgc3ltYm9sIGNhbiBiZSByZS1kZWZpbmVkLiAgKi8KKyAgdW5zaWduZWQg aW50IHN5X3ZvbGF0aWxlIDogMTsKKworICAvKiBXaGV0aGVyIHRoZSBzeW1i b2wgaXMgYSBmb3J3YXJkIHJlZmVyZW5jZS4gICovCisgIHVuc2lnbmVkIGlu dCBzeV9mb3J3YXJkX3JlZiA6IDE7CisKICAgLyogVGhpcyBpcyBzZXQgaWYg dGhlIHN5bWJvbCBpcyBkZWZpbmVkIGluIGFuIE1SSSBjb21tb24gc2VjdGlv bi4KICAgICAgV2UgaGFuZGxlIHN1Y2ggc2VjdGlvbnMgYXMgc2luZ2xlIGNv bW1vbiBzeW1ib2xzLCBzbyBzeW1ib2xzCiAgICAgIGRlZmluZWQgd2l0aGlu IHRoZW0gbXVzdCBiZSB0cmVhdGVkIHNwZWNpYWxseSBieSB0aGUgcmVsb2Nh dGlvbgotLS0gL2hvbWUvamJldWxpY2gvc3JjL2JpbnV0aWxzL21haW5saW5l LzIwMDUtMDktMjcvZ2FzL3N5bWJvbHMuYwkyMDA1LTA4LTE4IDA4OjUxOjI2 LjAwMDAwMDAwMCArMDIwMAorKysgMjAwNS0wOS0yNy9nYXMvc3ltYm9scy5j CTIwMDUtMDktMjkgMTU6MjI6MjYuMDAwMDAwMDAwICswMjAwCkBAIC01Mzgs NiArNTM4LDk0IEBAIHN5bWJvbF9tYWtlIChjb25zdCBjaGFyICpuYW1lKQog fQogCiBzeW1ib2xTICoKK3N5bWJvbF9jbG9uZSAoc3ltYm9sUyAqb3Jnc3lt UCwgaW50IHJlcGxhY2UpCit7CisgIHN5bWJvbFMgKm5ld3N5bVA7CisKKyAg LyogUnVubmluZyBsb2NhbF9zeW1ib2xfY29udmVydCBvbiBhIGNsb25lIHRo YXQncyBub3QgdGhlIG9uZSBjdXJyZW50bHkKKyAgICAgaW4gbG9jYWxfaGFz aCB3b3VsZCBpbmNvcnJlY3RseSByZXBsYWNlIHRoZSBoYXNoIGVudHJ5LiAg VGh1cyB0aGUKKyAgICAgc3ltYm9sIG11c3QgYmUgY29udmVydGVkIGhlcmUu ICBOb3RlIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uCisgICAgIGRl cGVuZHMgb24gbm90IGVuY291bnRlcmluZyBhbiB1bmNvbnZlcnRlZCBzeW1i b2wuICAqLworICBpZiAoTE9DQUxfU1lNQk9MX0NIRUNLIChvcmdzeW1QKSkK KyAgICBvcmdzeW1QID0gbG9jYWxfc3ltYm9sX2NvbnZlcnQgKChzdHJ1Y3Qg bG9jYWxfc3ltYm9sICopIG9yZ3N5bVApOworCisgIGtub3cgKFNfSVNfREVG SU5FRCAob3Jnc3ltUCkpOworCisgIG5ld3N5bVAgPSBvYnN0YWNrX2FsbG9j ICgmbm90ZXMsIHNpemVvZiAoKm5ld3N5bVApKTsKKyAgKm5ld3N5bVAgPSAq b3Jnc3ltUDsKKworICBpZiAocmVwbGFjZSkKKyAgICB7CisgICAgICBpZiAo c3ltYm9sX3Jvb3RQID09IG9yZ3N5bVApCisJc3ltYm9sX3Jvb3RQID0gbmV3 c3ltUDsKKyAgICAgIGVsc2UgaWYgKG9yZ3N5bVAtPnN5X3ByZXZpb3VzKQor CXsKKwkgIG9yZ3N5bVAtPnN5X3ByZXZpb3VzLT5zeV9uZXh0ID0gbmV3c3lt UDsKKwkgIG9yZ3N5bVAtPnN5X3ByZXZpb3VzID0gTlVMTDsKKwl9CisgICAg ICBpZiAoc3ltYm9sX2xhc3RQID09IG9yZ3N5bVApCisJc3ltYm9sX2xhc3RQ ID0gbmV3c3ltUDsKKyAgICAgIGVsc2UgaWYgKG9yZ3N5bVAtPnN5X25leHQp CisJb3Jnc3ltUC0+c3lfbmV4dC0+c3lfcHJldmlvdXMgPSBuZXdzeW1QOwor ICAgICAgb3Jnc3ltUC0+c3lfbmV4dCA9IE5VTEw7CisgICAgICBkZWJ1Z192 ZXJpZnlfc3ltY2hhaW4gKHN5bWJvbF9yb290UCwgc3ltYm9sX2xhc3RQKTsK KworICAgICAgc3ltYm9sX3RhYmxlX2luc2VydCAobmV3c3ltUCk7CisgICAg fQorCisgIHJldHVybiBuZXdzeW1QOworfQorCisvKiBSZWZlcmVuY2VkIHN5 bWJvbHMsIGlmIHRoZXkgYXJlIGZvcndhcmQgcmVmZXJlbmNlcywgbmVlZCB0 byBiZSBjbG9uZWQKKyAgICh3aXRob3V0IHJlcGxhY2luZyB0aGUgb3JpZ2lu YWwpIHNvIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSByZWZlcmVuY2VkCisgICBz eW1ib2xzIGF0IHRoZSBwb2ludCBvZiB1c2UgLiAgKi8KKworI3VuZGVmIHN5 bWJvbF9jbG9uZV9pZl9mb3J3YXJkX3JlZgorc3ltYm9sUyAqCitzeW1ib2xf Y2xvbmVfaWZfZm9yd2FyZF9yZWYgKHN5bWJvbFMgKnN5bWJvbFAsIGludCBp c19mb3J3YXJkKQoreworICBpZiAoc3ltYm9sUCAmJiAhTE9DQUxfU1lNQk9M X0NIRUNLIChzeW1ib2xQKSkKKyAgICB7CisgICAgICBzeW1ib2xTICphZGRf c3ltYm9sID0gc3ltYm9sUC0+c3lfdmFsdWUuWF9hZGRfc3ltYm9sOworICAg ICAgc3ltYm9sUyAqb3Bfc3ltYm9sID0gc3ltYm9sUC0+c3lfdmFsdWUuWF9v cF9zeW1ib2w7CisKKyAgICAgIGlmIChzeW1ib2xQLT5zeV9mb3J3YXJkX3Jl ZikKKwlpc19mb3J3YXJkID0gMTsKKworICAgICAgaWYgKGlzX2ZvcndhcmQp CisJeworCSAgLyogYXNzaWduX3N5bWJvbCgpIGNsb25lcyB2b2xhdGlsZSBz eW1ib2xzOyBwcmUtZXhpc3RpbmcgZXhwcmVzc2lvbnMKKwkgICAgIGhvbGQg cmVmZXJlbmNlcyB0byB0aGUgb3JpZ2luYWwgaW5zdGFuY2UsIGJ1dCB3YW50 IHRoZSBjdXJyZW50CisJICAgICB2YWx1ZS4gIEp1c3QgcmVwZWF0IHRoZSBs b29rdXAuICAqLworCSAgaWYgKGFkZF9zeW1ib2wgJiYgU19JU19WT0xBVElM RSAoYWRkX3N5bWJvbCkpCisJICAgIGFkZF9zeW1ib2wgPSBzeW1ib2xfZmlu ZF9leGFjdCAoU19HRVRfTkFNRSAoYWRkX3N5bWJvbCkpOworCSAgaWYgKG9w X3N5bWJvbCAmJiBTX0lTX1ZPTEFUSUxFIChvcF9zeW1ib2wpKQorCSAgICBv cF9zeW1ib2wgPSBzeW1ib2xfZmluZF9leGFjdCAoU19HRVRfTkFNRSAob3Bf c3ltYm9sKSk7CisJfQorCisgICAgICAvKiBSZS11c2luZyBzeV9yZXNvbHZp bmcgaGVyZSwgYXMgdGhpcyByb3V0aW5lIGNhbm5vdCBnZXQgY2FsbGVkIGZy b20KKwkgc3ltYm9sIHJlc29sdXRpb24gY29kZS4gICovCisgICAgICBpZiAo c3ltYm9sUC0+YnN5bS0+c2VjdGlvbiA9PSBleHByX3NlY3Rpb24gJiYgIXN5 bWJvbFAtPnN5X3Jlc29sdmluZykKKwl7CisJICBzeW1ib2xQLT5zeV9yZXNv bHZpbmcgPSAxOworCSAgYWRkX3N5bWJvbCA9IHN5bWJvbF9jbG9uZV9pZl9m b3J3YXJkX3JlZiAoYWRkX3N5bWJvbCwgaXNfZm9yd2FyZCk7CisJICBvcF9z eW1ib2wgPSBzeW1ib2xfY2xvbmVfaWZfZm9yd2FyZF9yZWYgKG9wX3N5bWJv bCwgaXNfZm9yd2FyZCk7CisJICBzeW1ib2xQLT5zeV9yZXNvbHZpbmcgPSAw OworCX0KKworICAgICAgaWYgKHN5bWJvbFAtPnN5X2ZvcndhcmRfcmVmCisJ ICB8fCBhZGRfc3ltYm9sICE9IHN5bWJvbFAtPnN5X3ZhbHVlLlhfYWRkX3N5 bWJvbAorCSAgfHwgb3Bfc3ltYm9sICE9IHN5bWJvbFAtPnN5X3ZhbHVlLlhf b3Bfc3ltYm9sKQorCXN5bWJvbFAgPSBzeW1ib2xfY2xvbmUgKHN5bWJvbFAs IDApOworCisgICAgICBzeW1ib2xQLT5zeV92YWx1ZS5YX2FkZF9zeW1ib2wg PSBhZGRfc3ltYm9sOworICAgICAgc3ltYm9sUC0+c3lfdmFsdWUuWF9vcF9z eW1ib2wgPSBvcF9zeW1ib2w7CisgICAgfQorCisgIHJldHVybiBzeW1ib2xQ OworfQorCitzeW1ib2xTICoKIHN5bWJvbF90ZW1wX25ldyAoc2VnVCBzZWcs IHZhbHVlVCBvZnMsIGZyYWdTICpmcmFnKQogewogICByZXR1cm4gc3ltYm9s X25ldyAoRkFLRV9MQUJFTF9OQU1FLCBzZWcsIG9mcywgZnJhZyk7CkBAIC0x MTg5LDYgKzEyNzcsNzEgQEAgcmVzb2x2ZV9sb2NhbF9zeW1ib2xfdmFsdWVz ICh2b2lkKQogICBoYXNoX3RyYXZlcnNlIChsb2NhbF9oYXNoLCByZXNvbHZl X2xvY2FsX3N5bWJvbCk7CiB9CiAKKy8qIE9idGFpbiB0aGUgY3VycmVudCB2 YWx1ZSBvZiBhIHN5bWJvbCB3aXRob3V0IGNoYW5naW5nIGFueQorICAgc3Vi LWV4cHJlc3Npb25zIHVzZWQuICAqLworCitpbnQKK3NuYXBzaG90X3N5bWJv bCAoc3ltYm9sUyAqc3ltYm9sUCwgdmFsdWVUICp2YWx1ZVAsIHNlZ1QgKnNl Z1AsIGZyYWdTICoqZnJhZ1BQKQoreworICBpZiAoTE9DQUxfU1lNQk9MX0NI RUNLIChzeW1ib2xQKSkKKyAgICB7CisgICAgICBzdHJ1Y3QgbG9jYWxfc3lt Ym9sICpsb2NzeW0gPSAoc3RydWN0IGxvY2FsX3N5bWJvbCAqKSBzeW1ib2xQ OworCisgICAgICAqdmFsdWVQID0gbG9jc3ltLT5sc3lfdmFsdWU7CisgICAg ICAqc2VnUCA9IGxvY3N5bS0+bHN5X3NlY3Rpb247CisgICAgICAqZnJhZ1BQ ID0gbG9jYWxfc3ltYm9sX2dldF9mcmFnIChsb2NzeW0pOworICAgIH0KKyAg ZWxzZQorICAgIHsKKyAgICAgIGV4cHJlc3Npb25TIGV4cHIgPSBzeW1ib2xQ LT5zeV92YWx1ZTsKKworICAgICAgaWYgKCFzeW1ib2xQLT5zeV9yZXNvbHZl ZCAmJiBleHByLlhfb3AgIT0gT19pbGxlZ2FsKQorCXsKKwkgIGludCByZXNv bHZlZDsKKworCSAgaWYgKHN5bWJvbFAtPnN5X3Jlc29sdmluZykKKwkgICAg cmV0dXJuIDA7CisJICBzeW1ib2xQLT5zeV9yZXNvbHZpbmcgPSAxOworCSAg cmVzb2x2ZWQgPSByZXNvbHZlX2V4cHJlc3Npb24gKCZleHByKTsKKwkgIHN5 bWJvbFAtPnN5X3Jlc29sdmluZyA9IDA7CisJICBpZiAoIXJlc29sdmVkKQor CSAgICByZXR1cm4gMDsKKworCSAgc3dpdGNoIChleHByLlhfb3ApCisJICAg IHsKKwkgICAgY2FzZSBPX2NvbnN0YW50OgorCSAgICBjYXNlIE9fcmVnaXN0 ZXI6CisJICAgICAgLyogVGhpcyBjaGVjayB3b3VsZG4ndCBiZSBuZWVkZWQg aWYgcHNldWRvX3NldCgpIGRpZG4ndCBzZXQKKwkJIHN5bWJvbHMgZXF1YXRl ZCB0byBiYXJlIHN5bWJvbHMgdG8gdW5kZWZpbmVkX3NlY3Rpb24uICAqLwor CSAgICAgIGlmIChzeW1ib2xQLT5ic3ltLT5zZWN0aW9uICE9IHVuZGVmaW5l ZF9zZWN0aW9uCisJCSAgfHwgc3ltYm9sUC0+c3lfdmFsdWUuWF9vcCAhPSBP X3N5bWJvbCkKKwkJYnJlYWs7CisJICAgICAgLyogRmFsbCB0aHJ1LiAgKi8K KwkgICAgY2FzZSBPX3N5bWJvbDoKKwkgICAgY2FzZSBPX3N5bWJvbF9ydmE6 CisJICAgICAgc3ltYm9sUCA9IGV4cHIuWF9hZGRfc3ltYm9sOworCSAgICAg IGJyZWFrOworCSAgICBkZWZhdWx0OgorCSAgICAgIHJldHVybiAwOworCSAg ICB9CisJfQorCisgICAgICAqdmFsdWVQID0gZXhwci5YX2FkZF9udW1iZXI7 CisgICAgICAqc2VnUCA9IHN5bWJvbFAtPmJzeW0tPnNlY3Rpb247CisgICAg ICAqZnJhZ1BQID0gc3ltYm9sUC0+c3lfZnJhZzsKKworICAgICAgaWYgKCpz ZWdQID09IGV4cHJfc2VjdGlvbikKKwlzd2l0Y2ggKGV4cHIuWF9vcCkKKwkg IHsKKwkgIGNhc2UgT19jb25zdGFudDogKnNlZ1AgPSBhYnNvbHV0ZV9zZWN0 aW9uOyBicmVhazsKKwkgIGNhc2UgT19yZWdpc3RlcjogKnNlZ1AgPSByZWdf c2VjdGlvbjsgYnJlYWs7CisJICBkZWZhdWx0OiBicmVhazsKKwkgIH0KKyAg ICB9CisKKyAgcmV0dXJuIDE7Cit9CisKIC8qIERvbGxhciBsYWJlbHMgbG9v ayBsaWtlIGEgbnVtYmVyIGZvbGxvd2VkIGJ5IGEgZG9sbGFyIHNpZ24uICBF ZywgIjQyJCIuCiAgICBUaGV5IGFyZSAqcmVhbGx5KiBsb2NhbC4gIFRoYXQg aXMsIHRoZXkgZ28gb3V0IG9mIHNjb3BlIHdoZW5ldmVyIHdlIHNlZSBhCiAg ICBsYWJlbCB0aGF0IGlzbid0IGxvY2FsLiAgQWxzbywgbGlrZSBmYiBsYWJl bHMsIHRoZXJlIGNhbiBiZSBtdWx0aXBsZQpAQCAtMTc0Nyw2ICsxOTAwLDIy IEBAIFNfSVNfU1RBQkQgKHN5bWJvbFMgKnMpCiAgIHJldHVybiBTX0dFVF9O QU1FIChzKSA9PSAwOwogfQogCitpbnQKK1NfSVNfVk9MQVRJTEUgKGNvbnN0 IHN5bWJvbFMgKnMpCit7CisgIGlmIChMT0NBTF9TWU1CT0xfQ0hFQ0sgKHMp KQorICAgIHJldHVybiAwOworICByZXR1cm4gcy0+c3lfdm9sYXRpbGU7Cit9 CisKK2ludAorU19JU19GT1JXQVJEX1JFRiAoY29uc3Qgc3ltYm9sUyAqcykK K3sKKyAgaWYgKExPQ0FMX1NZTUJPTF9DSEVDSyAocykpCisgICAgcmV0dXJu IDA7CisgIHJldHVybiBzLT5zeV9mb3J3YXJkX3JlZjsKK30KKwogY29uc3Qg Y2hhciAqCiBTX0dFVF9OQU1FIChzeW1ib2xTICpzKQogewpAQCAtMTg3Miw2 ICsyMDQxLDIyIEBAIFNfU0VUX05BTUUgKHN5bWJvbFMgKnMsIGNvbnN0IGNo YXIgKm5hbWUKICAgcy0+YnN5bS0+bmFtZSA9IG5hbWU7CiB9CiAKK3ZvaWQK K1NfU0VUX1ZPTEFUSUxFIChzeW1ib2xTICpzKQoreworICBpZiAoTE9DQUxf U1lNQk9MX0NIRUNLIChzKSkKKyAgICBzID0gbG9jYWxfc3ltYm9sX2NvbnZl cnQgKChzdHJ1Y3QgbG9jYWxfc3ltYm9sICopIHMpOworICBzLT5zeV92b2xh dGlsZSA9IDE7Cit9CisKK3ZvaWQKK1NfU0VUX0ZPUldBUkRfUkVGIChzeW1i b2xTICpzKQoreworICBpZiAoTE9DQUxfU1lNQk9MX0NIRUNLIChzKSkKKyAg ICBzID0gbG9jYWxfc3ltYm9sX2NvbnZlcnQgKChzdHJ1Y3QgbG9jYWxfc3lt Ym9sICopIHMpOworICBzLT5zeV9mb3J3YXJkX3JlZiA9IDE7Cit9CisKIC8q IFJldHVybiB0aGUgcHJldmlvdXMgc3ltYm9sIGluIGEgY2hhaW4uICAqLwog CiBzeW1ib2xTICoKLS0tIC9ob21lL2piZXVsaWNoL3NyYy9iaW51dGlscy9t YWlubGluZS8yMDA1LTA5LTI3L2dhcy9zeW1ib2xzLmgJMjAwNS0wOC0xOCAw ODo1MToyNi4wMDAwMDAwMDAgKzAyMDAKKysrIDIwMDUtMDktMjcvZ2FzL3N5 bWJvbHMuaAkyMDA1LTA5LTI3IDE4OjEzOjE3LjAwMDAwMDAwMCArMDIwMApA QCAtNDQsNiArNDQsMTAgQEAgc3ltYm9sUyAqc3ltYm9sX25ldyAoY29uc3Qg Y2hhciAqbmFtZSwgcwogCQkgICAgIGZyYWdTICogZnJhZyk7CiBzeW1ib2xT ICpzeW1ib2xfY3JlYXRlIChjb25zdCBjaGFyICpuYW1lLCBzZWdUIHNlZ21l bnQsIHZhbHVlVCB2YWx1ZSwKIAkJCWZyYWdTICogZnJhZyk7CitzeW1ib2xT ICpzeW1ib2xfY2xvbmUgKHN5bWJvbFMgKiwgaW50KTsKKyN1bmRlZiBzeW1i b2xfY2xvbmVfaWZfZm9yd2FyZF9yZWYKK3N5bWJvbFMgKnN5bWJvbF9jbG9u ZV9pZl9mb3J3YXJkX3JlZiAoc3ltYm9sUyAqLCBpbnQpOworI2RlZmluZSBz eW1ib2xfY2xvbmVfaWZfZm9yd2FyZF9yZWYocykgc3ltYm9sX2Nsb25lX2lm X2ZvcndhcmRfcmVmIChzLCAwKQogc3ltYm9sUyAqc3ltYm9sX3RlbXBfbmV3 IChzZWdULCB2YWx1ZVQsIGZyYWdTICopOwogc3ltYm9sUyAqc3ltYm9sX3Rl bXBfbmV3X25vdyAodm9pZCk7CiBzeW1ib2xTICpzeW1ib2xfdGVtcF9tYWtl ICh2b2lkKTsKQEAgLTU1LDYgKzU5LDcgQEAgdm9pZCBzeW1ib2xfcHJpbnRf c3RhdGlzdGljcyAoRklMRSAqKTsKIHZvaWQgc3ltYm9sX3RhYmxlX2luc2Vy dCAoc3ltYm9sUyAqIHN5bWJvbFApOwogdmFsdWVUIHJlc29sdmVfc3ltYm9s X3ZhbHVlIChzeW1ib2xTICopOwogdm9pZCByZXNvbHZlX2xvY2FsX3N5bWJv bF92YWx1ZXMgKHZvaWQpOworaW50IHNuYXBzaG90X3N5bWJvbCAoc3ltYm9s UyAqLCB2YWx1ZVQgKiwgc2VnVCAqLCBmcmFnUyAqKik7CiAKIHZvaWQgcHJp bnRfc3ltYm9sX3ZhbHVlIChzeW1ib2xTICopOwogdm9pZCBwcmludF9leHBy IChleHByZXNzaW9uUyAqKTsKQEAgLTg0LDYgKzg5LDggQEAgZXh0ZXJuIGlu dCBTX0ZPUkNFX1JFTE9DIChzeW1ib2xTICosIGludAogZXh0ZXJuIGludCBT X0lTX0RFQlVHIChzeW1ib2xTICopOwogZXh0ZXJuIGludCBTX0lTX0xPQ0FM IChzeW1ib2xTICopOwogZXh0ZXJuIGludCBTX0lTX1NUQUJEIChzeW1ib2xT ICopOworZXh0ZXJuIGludCBTX0lTX1ZPTEFUSUxFIChjb25zdCBzeW1ib2xT ICopOworZXh0ZXJuIGludCBTX0lTX0ZPUldBUkRfUkVGIChjb25zdCBzeW1i b2xTICopOwogZXh0ZXJuIGNvbnN0IGNoYXIgKlNfR0VUX05BTUUgKHN5bWJv bFMgKik7CiBleHRlcm4gc2VnVCBTX0dFVF9TRUdNRU5UIChzeW1ib2xTICop OwogZXh0ZXJuIHZvaWQgU19TRVRfU0VHTUVOVCAoc3ltYm9sUyAqLCBzZWdU KTsKQEAgLTkyLDYgKzk5LDggQEAgZXh0ZXJuIHZvaWQgU19TRVRfTkFNRSAo c3ltYm9sUyAqLCBjb25zdAogZXh0ZXJuIHZvaWQgU19DTEVBUl9FWFRFUk5B TCAoc3ltYm9sUyAqKTsKIGV4dGVybiB2b2lkIFNfU0VUX1dFQUsgKHN5bWJv bFMgKik7CiBleHRlcm4gdm9pZCBTX1NFVF9USFJFQURfTE9DQUwgKHN5bWJv bFMgKik7CitleHRlcm4gdm9pZCBTX1NFVF9WT0xBVElMRSAoc3ltYm9sUyAq KTsKK2V4dGVybiB2b2lkIFNfU0VUX0ZPUldBUkRfUkVGIChzeW1ib2xTICop OwogCiAjaWZuZGVmIFdPUktJTkdfRE9UX1dPUkQKIHN0cnVjdCBicm9rZW5f d29yZAotLS0gL2hvbWUvamJldWxpY2gvc3JjL2JpbnV0aWxzL21haW5saW5l LzIwMDUtMDktMjcvZ2FzL3Rlc3RzdWl0ZS9nYXMvYWxsL2Fzc2lnbi1iYWQu cwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgMjAw NS0wOS0yNy9nYXMvdGVzdHN1aXRlL2dhcy9hbGwvYXNzaWduLWJhZC5zCTIw MDUtMDktMjggMTA6NDc6NTcuMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEs MiBAQAorIHl5eSA9PSAzCisgeXl5ID09IDQKLS0tIC9ob21lL2piZXVsaWNo L3NyYy9iaW51dGlscy9tYWlubGluZS8yMDA1LTA5LTI3L2dhcy90ZXN0c3Vp dGUvZ2FzL2FsbC9hc3NpZ24tb2sucwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAw MDAwMDAwMCArMDEwMAorKysgMjAwNS0wOS0yNy9nYXMvdGVzdHN1aXRlL2dh cy9hbGwvYXNzaWduLW9rLnMJMjAwNS0wOS0yOCAxMDo0ODowMS4wMDAwMDAw MDAgKzAyMDAKQEAgLTAsMCArMSwzIEBACisgeHh4ID0gMQorIHh4eCA9IDIK KyB5eXkgPT0gMwotLS0gL2hvbWUvamJldWxpY2gvc3JjL2JpbnV0aWxzL21h aW5saW5lLzIwMDUtMDktMjcvZ2FzL3Rlc3RzdWl0ZS9nYXMvYWxsL2NvbmQu ZAkyMDA1LTA0LTI2IDE3OjMzOjMyLjAwMDAwMDAwMCArMDIwMAorKysgMjAw NS0wOS0yNy9nYXMvdGVzdHN1aXRlL2dhcy9hbGwvY29uZC5kCTIwMDUtMDkt MjYgMTE6NTA6NDYuMDAwMDAwMDAwICswMjAwCkBAIC0yNCw2ICsyNCwxMiBA QAogICAyOVsgCV0rLmVsc2UKICAgMzFbIAldKy5lbmRpZgogWyAJXSpbMS05 XVswLTldKlsgCV0rCitbIAldKlsxLTldWzAtOV0qWyAJXStcLmVxdWl2WyAJ XSt4LFsgCV0qeVsgCV0qCitbIAldKlsxLTldWzAtOV0qWyAJXStcLmVxdWl2 WyAJXSt5LFsgCV0qMFsgCV0qCitbIAldKlsxLTldWzAtOV0qWyAJXStcLmlm WyAJXSt4WyAJXSoKK1sgCV0qWzEtOV1bMC05XSpbIAldK1wuZWxzZWlmWyAJ XSt4WyAJXSoKK1sgCV0qWzEtOV1bMC05XSpbIAldK1wuZW5kaWZbIAldKgor WyAJXSpbMS05XVswLTldKlsgCV0rCiBbIAldKlsxLTldWzAtOV0qWyAJXStc Lm1hY3JvWyAJXSttWyAJXSt4LFsgCV0qeVsgCV0qCiAjLi4uCiBbIAldKlsx LTldWzAtOV0qWyAJXStcLmVuZG1bIAldKgotLS0gL2hvbWUvamJldWxpY2gv c3JjL2JpbnV0aWxzL21haW5saW5lLzIwMDUtMDktMjcvZ2FzL3Rlc3RzdWl0 ZS9nYXMvYWxsL2NvbmQucwkyMDA1LTA0LTI2IDE3OjE5OjQ5LjAwMDAwMDAw MCArMDIwMAorKysgMjAwNS0wOS0yNy9nYXMvdGVzdHN1aXRlL2dhcy9hbGwv Y29uZC5zCTIwMDUtMDktMjYgMTE6NTA6MjIuMDAwMDAwMDAwICswMjAwCkBA IC0zMCw2ICszMCwxNCBAQAogCS5sb25nCTkKIAkuZW5kaWYKIAorCS5lcXVp dgl4LCB5CisJLmVxdWl2CXksIDAKKwkuaWYJeAorCS5lcnIKKwkuZWxzZWlm CXgKKwkuZXJyCisJLmVuZGlmCisKIAkubWFjcm8JbSB4LCB5CiAJLmlmYiBc eAogCS5sb25nCS0xCi0tLSAvaG9tZS9qYmV1bGljaC9zcmMvYmludXRpbHMv bWFpbmxpbmUvMjAwNS0wOS0yNy9nYXMvdGVzdHN1aXRlL2dhcy9hbGwvZXF1 LWJhZC5zCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisr KyAyMDA1LTA5LTI3L2dhcy90ZXN0c3VpdGUvZ2FzL2FsbC9lcXUtYmFkLnMJ MjAwNS0wOS0yNiAxMjowNjowMS4wMDAwMDAwMDAgKzAyMDAKQEAgLTAsMCAr MSwyIEBACisgLmVxdSB4LCAxCisgLmVxdiB4LCAyCi0tLSAvaG9tZS9qYmV1 bGljaC9zcmMvYmludXRpbHMvbWFpbmxpbmUvMjAwNS0wOS0yNy9nYXMvdGVz dHN1aXRlL2dhcy9hbGwvZXF1LW9rLnMJMTk3MC0wMS0wMSAwMTowMDowMC4w MDAwMDAwMDAgKzAxMDAKKysrIDIwMDUtMDktMjcvZ2FzL3Rlc3RzdWl0ZS9n YXMvYWxsL2VxdS1vay5zCTIwMDUtMDktMjYgMTI6MDU6NTMuMDAwMDAwMDAw ICswMjAwCkBAIC0wLDAgKzEsMiBAQAorIC5lcXUgeCwgMQorIC5lcXUgeCwg MgotLS0gL2hvbWUvamJldWxpY2gvc3JjL2JpbnV0aWxzL21haW5saW5lLzIw MDUtMDktMjcvZ2FzL3Rlc3RzdWl0ZS9nYXMvYWxsL2VxdWl2MS5zCTE5NzAt MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAyMDA1LTA5LTI3 L2dhcy90ZXN0c3VpdGUvZ2FzL2FsbC9lcXVpdjEucwkyMDA1LTA5LTI5IDE4 OjEwOjMyLjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDUgQEAKKzsjIFJl LWRlZmluaXRpb24gb2YgYW4gYWxyZWFkeSAuZXF1aXYtZWQgc3ltYm9sICh0 byBhbm90aGVyIHN5bWJvbCkuCis7IyBUaGUgYXNzZW1ibGVyIHNob3VsZCBy ZWplY3QgdGhpcy4KKyAuZXF1aXYgeCwgeQorIC5lcXVpdiB5LCAxCisgLmVx dWl2IHgsIDAKLS0tIC9ob21lL2piZXVsaWNoL3NyYy9iaW51dGlscy9tYWlu bGluZS8yMDA1LTA5LTI3L2dhcy90ZXN0c3VpdGUvZ2FzL2FsbC9lcXVpdjIu cwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgMjAw NS0wOS0yNy9nYXMvdGVzdHN1aXRlL2dhcy9hbGwvZXF1aXYyLnMJMjAwNS0w OS0yOSAxODoxMDozNy4wMDAwMDAwMDAgKzAyMDAKQEAgLTAsMCArMSw2IEBA Cis7IyBSZS1kZWZpbml0aW9uIG9mIGFuIGFscmVhZHkgLmVxdWl2LWVkIHN5 bWJvbCAodG8gYW4gZXhwcmVzc2lvbikuCis7IyBUaGUgYXNzZW1ibGVyIHNo b3VsZCByZWplY3QgdGhpcy4KKyAuZXF1aXYgeCwgeS16CisgLmVxdWl2IHks IDEKKyAuZXF1aXYgeiwgMQorIC5lcXVpdiB4LCAxCi0tLSAvaG9tZS9qYmV1 bGljaC9zcmMvYmludXRpbHMvbWFpbmxpbmUvMjAwNS0wOS0yNy9nYXMvdGVz dHN1aXRlL2dhcy9hbGwvZXF2LWJhZC5zCTE5NzAtMDEtMDEgMDE6MDA6MDAu MDAwMDAwMDAwICswMTAwCisrKyAyMDA1LTA5LTI3L2dhcy90ZXN0c3VpdGUv Z2FzL2FsbC9lcXYtYmFkLnMJMjAwNS0wOS0yNiAxMjowNjoxNC4wMDAwMDAw MDAgKzAyMDAKQEAgLTAsMCArMSwyIEBACisgLmVxdiB4LCAxCisgLmVxdiB4 LCAyCi0tLSAvaG9tZS9qYmV1bGljaC9zcmMvYmludXRpbHMvbWFpbmxpbmUv MjAwNS0wOS0yNy9nYXMvdGVzdHN1aXRlL2dhcy9hbGwvZXF2LW9rLnMJMTk3 MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIDIwMDUtMDkt MjcvZ2FzL3Rlc3RzdWl0ZS9nYXMvYWxsL2Vxdi1vay5zCTIwMDUtMDktMjYg MTI6MDY6MjIuMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEgQEAKKyAuZXF2 IHgsIDEKLS0tIC9ob21lL2piZXVsaWNoL3NyYy9iaW51dGlscy9tYWlubGlu ZS8yMDA1LTA5LTI3L2dhcy90ZXN0c3VpdGUvZ2FzL2FsbC9mb3J3YXJkLmQJ MTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIDIwMDUt MDktMjcvZ2FzL3Rlc3RzdWl0ZS9nYXMvYWxsL2ZvcndhcmQuZAkyMDA1LTA5 LTI4IDE0OjEzOjQ5LjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDggQEAK KyNvYmpkdW1wOiAtcyAtaiAuZGF0YQorI25hbWU6IGZvcndhcmQgcmVmZXJl bmNlcworCisuKjogLioKKworQ29udGVudHMgb2Ygc2VjdGlvbiAuZGF0YToK KyAwMDAwIDAxMDIwMzA0IGZmMDIwM2ZjIDAxMDIwMzA0IGZmMDIwM2ZjICAu Li4uLi4uLi4uLi4uLi4uCisjcGFzcwotLS0gL2hvbWUvamJldWxpY2gvc3Jj L2JpbnV0aWxzL21haW5saW5lLzIwMDUtMDktMjcvZ2FzL3Rlc3RzdWl0ZS9n YXMvYWxsL2ZvcndhcmQucwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw MCArMDEwMAorKysgMjAwNS0wOS0yNy9nYXMvdGVzdHN1aXRlL2dhcy9hbGwv Zm9yd2FyZC5zCTIwMDUtMDktMjYgMTY6Mjc6MzkuMDAwMDAwMDAwICswMjAw CkBAIC0wLDAgKzEsNDAgQEAKKyAuZXF1aXYgdHdvLCAyKm9uZQorIC5lcXVp diBtaW51c19vbmUsIC1vbmUKKyAuZXF1IG9uZSwgMQorIC5lcXVpdiB0aHJl ZSwgMypvbmUKKyAuZXF2IGZvdXIsIDQqb25lCisKKyAuZGF0YQorCisgLmlm IHR3byA+IG9uZQorICAuYnl0ZSBvbmUKKyAgLmJ5dGUgdHdvCisgLmVuZGlm CisgLmlmIGZvdXIgPiBvbmUKKyAgLmJ5dGUgdGhyZWUKKyAgLmJ5dGUgZm91 cgorIC5lbmRpZgorCisgLmVxdSBvbmUsIC0xCisgLmJ5dGUgb25lCisgLmJ5 dGUgdHdvCisgLmlmIGZvdXIgPCBvbmUKKyAgLmJ5dGUgdGhyZWUKKyAgLmJ5 dGUgZm91cgorIC5lbmRpZgorCisgLmVxdSBvbmUsIC1taW51c19vbmUKKyAu Ynl0ZSBvbmUKKyAuYnl0ZSB0d28KKyAuaWYgZm91ciA+IG9uZQorICAuYnl0 ZSB0aHJlZQorICAuYnl0ZSBmb3VyCisgLmVuZGlmCisKKyAuZXF1IG9uZSwg bWludXNfb25lCisgLmJ5dGUgb25lCisgLmJ5dGUgdHdvCisgLmlmIGZvdXIg PCBvbmUKKyAgLmJ5dGUgdGhyZWUKKyAgLmJ5dGUgZm91cgorIC5lbmRpZgot LS0gL2hvbWUvamJldWxpY2gvc3JjL2JpbnV0aWxzL21haW5saW5lLzIwMDUt MDktMjcvZ2FzL3Rlc3RzdWl0ZS9nYXMvYWxsL2dhcy5leHAJMjAwNS0wOC0x OCAwODo1MTozMy4wMDAwMDAwMDAgKzAyMDAKKysrIDIwMDUtMDktMjcvZ2Fz L3Rlc3RzdWl0ZS9nYXMvYWxsL2dhcy5leHAJMjAwNS0wOS0yOSAxMzo1Nzox OC4wMDAwMDAwMDAgKzAyMDAKQEAgLTM0LDYgKzM0LDU0IEBAIGlmICFbaXN0 YXJnZXQgaHBwYSotKi0qXSB0aGVuIHsKICAgICBnYXNfdGVzdF9lcnJvciAi ZGlmZjEucyIgIiIgImRpZmZlcmVuY2Ugb2YgdHdvIHVuZGVmaW5lZCBzeW1i b2xzIgogfQogCisjIFBSLzEzODcKK3NldHVwX3hmYWlsICIqLSotKiIKK2dh c190ZXN0X2Vycm9yICJlcXVpdjEucyIgIiIgIi5lcXVpdiBmb3Igc3ltYm9s IGFscmVhZHkgc2V0IHRvIGFub3RoZXIgb25lIgorZ2FzX3Rlc3RfZXJyb3Ig ImVxdWl2Mi5zIiAiIiAiLmVxdWl2IGZvciBzeW1ib2wgYWxyZWFkeSBzZXQg dG8gYW4gZXhwcmVzc2lvbiIKKworIyAuZXF1IHdvcmtzIGRpZmZlcmVudGx5 IG9uIHNvbWUgdGFyZ2V0cy4KK2Nhc2UgJHRhcmdldF90cmlwbGV0IGluIHsK KyAgICB7IGhwcGEqLSotKiB9IHsgfQorICAgIHsgKmM1NHgqLSotKiB9IHsg fQorICAgIGRlZmF1bHQgeworCWdhc190ZXN0ICJlcXUtb2sucyIgIiIgIiIg Ii5lcXUgZm9yIHN5bWJvbCBhbHJlYWR5IHNldCIKKwlnYXNfdGVzdF9lcnJv ciAiZXF1LWJhZC5zIiAiIiAiLmVxdSBmb3Igc3ltYm9sIGFscmVhZHkgc2V0 IHRocm91Z2ggLmVxdiIKKyAgICB9Cit9CisKK2dhc190ZXN0ICJlcXYtb2su cyIgIiIgIiIgIi5lcXYgc3VwcG9ydCIKK2dhc190ZXN0X2Vycm9yICJlcXYt YmFkLnMiICIiICIuZXF2IGZvciBzeW1ib2wgYWxyZWFkeSBzZXQiCisKK2dh c190ZXN0ICJhc3NpZ24tb2sucyIgIiIgIiIgIj09IGFzc2lnbm1lbnQgc3Vw cG9ydCIKK2dhc190ZXN0X2Vycm9yICJhc3NpZ24tYmFkLnMiICIiICI9PSBh c3NpZ25tZW50IGZvciBzeW1ib2wgYWxyZWFkeSBzZXQiCisKKyMgLmVxdSB3 b3JrcyBkaWZmZXJlbnRseSBvbiBzb21lIHRhcmdldHMuCisjIGxpbmtyZWxh eC1pbmcgcHJldmVudHMgbW9zdCBmb3J3YXJkIHJlZmVyZW5jZXMgZnJvbSB3 b3JraW5nLgorY2FzZSAkdGFyZ2V0X3RyaXBsZXQgaW4geworICAgIHsgY3J4 Ki0qLSogfSB7IH0KKyAgICB7IGg4MzAwKi0qLSogfSB7IH0KKyAgICB7IGhw cGEqLSotKiB9IHsgfQorICAgIHsgbW4xMFxbMjNcXTAwKi0qLSogfSB7IH0K KyAgICB7ICpjNTR4Ki0qLSogfSB7IH0KKyAgICBkZWZhdWx0IHsKKwkjIFNv bWUgdGFyZ2V0cyBkb24ndCBtYW5hZ2UgdG8gcmVzb2x2ZSBCRkRfUkVMT0Nf OCBmb3IgY29uc3RhbnRzLgorCXNldHVwX3hmYWlsICJhbHBoYSotKi0qIiAi KmMzMCotKi0qIiAiKmM0eCotKi0qIiAiZFxbMTNcXTB2Ki0qLSoiICJpODYw LSotKiIgIm1pcHMqLSotKiIgInNwYXJjKi0qLSoiCisJcnVuX2R1bXBfdGVz dCBmb3J3YXJkCisgICAgfQorfQorCisjIC5zZXQgd29ya3MgZGlmZmVyZW50 bHkgb24gc29tZSB0YXJnZXRzLgorY2FzZSAkdGFyZ2V0X3RyaXBsZXQgaW4g eworICAgIHsgYWxwaGEqLSotKiB9IHsgfQorICAgIHsgaXEyMDAwKi0qLSog fSB7IH0KKyAgICB7IG1pcHMqLSotKiB9IHsgfQorICAgIHsgKmM1NHgqLSot KiB9IHsgfQorICAgIGRlZmF1bHQgeworCXNldHVwX3hmYWlsICIqYzMwKi0q LSoiICIqYzR4Ki0qLSoiCisJcnVuX2R1bXBfdGVzdCByZWRlZgorICAgIH0K K30KKwogcHJvYyBkb19jb21tZW50IHt9IHsKICAgICBzZXQgdGVzdG5hbWUg ImNvbW1lbnQuczogY29tbWVudHMgaW4gbGlzdGluZ3MiCiAgICAgc2V0IHgx IDAKLS0tIC9ob21lL2piZXVsaWNoL3NyYy9iaW51dGlscy9tYWlubGluZS8y MDA1LTA5LTI3L2dhcy90ZXN0c3VpdGUvZ2FzL2FsbC9yZWRlZi5kCTE5NzAt MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAyMDA1LTA5LTI3 L2dhcy90ZXN0c3VpdGUvZ2FzL2FsbC9yZWRlZi5kCTIwMDUtMDktMjggMTQ6 MTM6NDMuMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsOCBAQAorI29iamR1 bXA6IC1zIC1qIC5kYXRhCisjbmFtZTogLmVxdSByZWRlZmluaXRpb25zCisK Ky4qOiAuKgorCitDb250ZW50cyBvZiBzZWN0aW9uIC5kYXRhOgorIDAwMDAg MDAwMDAwMDAgMFswNF0wMDAwMFswNF0gMFswOF0wMDAwMFswOF0gMFswY10w MDAwMFswY11bIAldKy4uLi4uLi4uLi4uLi4uLi5bIAldKgorI3Bhc3MKLS0t IC9ob21lL2piZXVsaWNoL3NyYy9iaW51dGlscy9tYWlubGluZS8yMDA1LTA5 LTI3L2dhcy90ZXN0c3VpdGUvZ2FzL2FsbC9yZWRlZi5zCTE5NzAtMDEtMDEg MDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAyMDA1LTA5LTI3L2dhcy90 ZXN0c3VpdGUvZ2FzL2FsbC9yZWRlZi5zCTIwMDUtMDktMjggMTM6MjQ6MzUu MDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsMTEgQEAKKyAuZGF0YQorX3N0 YXJ0OgorIC5zZXQgeCwgLi1fc3RhcnQKKyAubG9uZyB4CisgLmJhbGlnbiA0 CisgLnNldCB4LCAuLV9zdGFydAorIC5sb25nIHgKKyAuc2V0IHgsIC4tX3N0 YXJ0CisgLmxvbmcgeAorIC5zZXQgeCwgLi1fc3RhcnQKKyAubG9uZyB4Cg== --=__Part4361300B.0__=--