From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 128441 invoked by alias); 23 Aug 2016 02:12:13 -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 128135 invoked by uid 89); 23 Aug 2016 02:12:10 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.1 required=5.0 tests=BAYES_50,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy=sop, USE, sk:propert, OPTGROUP_NONE X-HELO: mail-oi0-f47.google.com Received: from mail-oi0-f47.google.com (HELO mail-oi0-f47.google.com) (209.85.218.47) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 23 Aug 2016 02:11:59 +0000 Received: by mail-oi0-f47.google.com with SMTP id f189so177931301oig.3 for ; Mon, 22 Aug 2016 19:11:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=tBTJZGq4rYvVL8x4+Cb//crN1a1ODFAY9Bg1STJBQUw=; b=JdECJ190AvIFb6e7uNnhBq8ECeTLUCe6m9R7iOQchUQVV/GxlbS6/FIXr3bRHHLvM+ RRzXTwzIBcaRCxCoM6wwHksDVU+5VRkICgukiAg+cWorjWxRU3UJRxk3q3j6NN9C60Ce jslyFJX9y30ROc72gAKE1mJsGgnSqY4QcaxVrAyPaubB+MNil/Tx4JdJNugxWM6pGQJl es7NKg9w2ev9OARFn567OS1d+mYMypkKc+DVlKh1ThQTsk7uwLhOJ4p5jlADNkUI5rUg O2Ft52IPWcOvyJ1ZvogWAXGfcNJ4zwkng5SCfEQyPh3jd7QCTPaQODDqGyVQL1z83RuT C4UQ== X-Gm-Message-State: AEkoout84sIhk1p0ZvgBbtcYvpljwuhpeJ6U+SlsscRvj0MDuRxJFPVCAdC9jHavcIyCsP5V1hyA4GpkZrAXCh5u X-Received: by 10.157.52.7 with SMTP id v7mr14427056otb.125.1471918317661; Mon, 22 Aug 2016 19:11:57 -0700 (PDT) MIME-Version: 1.0 Received: by 10.202.197.147 with HTTP; Mon, 22 Aug 2016 19:11:56 -0700 (PDT) In-Reply-To: References: <57886949.8010300@linaro.org> <57886A71.6030103@linaro.org> <57888BD6.6070200@linaro.org> <578891C8.7090609@linaro.org> <19ff8188-aed7-0f9e-cc0b-0603698787ff@linaro.org> <48e42d0c-057c-312a-4e41-cd78c8b38b5e@linaro.org> From: Kugan Vivekanandarajah Date: Tue, 23 Aug 2016 02:12:00 -0000 Message-ID: Subject: Re: [RFC][IPA-VRP] Early VRP Implementation To: Richard Biener Cc: Andrew Pinski , "gcc-patches@gcc.gnu.org" , Jan Hubicka , Martin Jambor Content-Type: multipart/mixed; boundary=001a1141549e76f68c053ab3b001 X-IsSubscribed: yes X-SW-Source: 2016-08/txt/msg01596.txt.bz2 --001a1141549e76f68c053ab3b001 Content-Type: text/plain; charset=UTF-8 Content-length: 9850 Hi, On 19 August 2016 at 21:41, Richard Biener wrote: > On Tue, Aug 16, 2016 at 9:45 AM, kugan > wrote: >> Hi Richard, >> >> On 12/08/16 20:43, Richard Biener wrote: >>> >>> On Wed, Aug 3, 2016 at 3:17 AM, kugan >>> wrote: >> >> >> [SNIP] >> >>> >>> diff --git a/gcc/common.opt b/gcc/common.opt >>> index 8a292ed..7028cd4 100644 >>> --- a/gcc/common.opt >>> +++ b/gcc/common.opt >>> @@ -2482,6 +2482,10 @@ ftree-vrp >>> Common Report Var(flag_tree_vrp) Init(0) Optimization >>> Perform Value Range Propagation on trees. >>> >>> +fdisable-tree-evrp >>> +Common Report Var(flag_disable_early_vrp) Init(0) Optimization >>> +Disable Early Value Range Propagation on trees. >>> + >>> >>> no please, this is automatically supported via -fdisable- >> >> >> I am now having -ftree-evrp which is enabled all the time. But This will >> only be used for disabling the early-vrp. That is, early-vrp will be run >> when ftree-vrp is enabled and ftree-evrp is not explicitly disabled. Is this >> OK? > > Why would one want to disable early-vrp? I see you do this in the testsuite > for non-early VRP unit-tests but using -fdisable-tree-evrp1 there > would be ok as well. Removed it altogether. I though that you wanted a way to disable early-vrp for testing purposes. >>> >>> @@ -1728,11 +1736,12 @@ extract_range_from_assert (value_range *vr_p, tree >>> expr) >>> always false. */ >>> >>> static void >>> -extract_range_from_ssa_name (value_range *vr, tree var) >>> +extract_range_from_ssa_name (value_range *vr, bool dom_p, tree var) >>> { >>> value_range *var_vr = get_value_range (var); >>> >>> - if (var_vr->type != VR_VARYING) >>> + if (var_vr->type != VR_VARYING >>> + && (!dom_p || var_vr->type != VR_UNDEFINED)) >>> copy_value_range (vr, var_vr); >>> else >>> set_value_range (vr, VR_RANGE, var, var, NULL); >>> >>> why do you need these changes? I think I already told you you need to >>> initialize the lattice to sth else than VR_UNDEFINED and that you can't >>> fully re-use update_value_range. If you don't want to do that then >>> instead >>> of doing changes all over the place do it in get_value_range and have a >>> global flag. >> >> >> I have now added a global early_vrp_p and use this to initialize >> VR_INITIALIZER and get_value_range default to VR_VARYING. > > ICK. Ok, I see that this works, but it is quite ugly, so (see below) > >>> >>> >>> @@ -3594,7 +3643,8 @@ extract_range_from_cond_expr (value_range *vr, >>> gassign *stmt) >>> on the range of its operand and the expression code. */ >>> >>> static void >>> -extract_range_from_comparison (value_range *vr, enum tree_code code, >>> +extract_range_from_comparison (value_range *vr, >>> + enum tree_code code, >>> tree type, tree op0, tree op1) >>> { >>> bool sop = false; >>> >>> remove these kind of no-op changes. >> >> >> Done. >> >> >>> >>> +/* Initialize local data structures for VRP. If DOM_P is true, >>> + we will be calling this from early_vrp where value range propagation >>> + is done by visiting stmts in dominator tree. ssa_propagate engine >>> + is not used in this case and that part of the ininitialization will >>> + be skipped. */ >>> >>> static void >>> -vrp_initialize (void) >>> +vrp_initialize (bool dom_p) >>> { >>> basic_block bb; >>> >>> @@ -6949,6 +7010,9 @@ vrp_initialize (void) >>> vr_phi_edge_counts = XCNEWVEC (int, num_ssa_names); >>> bitmap_obstack_initialize (&vrp_equiv_obstack); >>> >>> + if (dom_p) >>> + return; >>> + >>> >>> split the function instead. >>> >>> @@ -7926,7 +7992,8 @@ vrp_visit_switch_stmt (gswitch *stmt, edge >>> *taken_edge_p) >>> If STMT produces a varying value, return SSA_PROP_VARYING. */ >>> >>> static enum ssa_prop_result >>> -vrp_visit_stmt (gimple *stmt, edge *taken_edge_p, tree *output_p) >>> +vrp_visit_stmt_worker (gimple *stmt, bool dom_p, edge *taken_edge_p, >>> + tree *output_p) >>> { >>> tree def; >>> ssa_op_iter iter; >>> @@ -7940,7 +8007,7 @@ vrp_visit_stmt (gimple *stmt, edge >>> *taken_edge_p, tree *output_p) >>> if (!stmt_interesting_for_vrp (stmt)) >>> gcc_assert (stmt_ends_bb_p (stmt)); >>> else if (is_gimple_assign (stmt) || is_gimple_call (stmt)) >>> - return vrp_visit_assignment_or_call (stmt, output_p); >>> + return vrp_visit_assignment_or_call (stmt, dom_p, output_p); >>> else if (gimple_code (stmt) == GIMPLE_COND) >>> return vrp_visit_cond_stmt (as_a (stmt), taken_edge_p); >>> else if (gimple_code (stmt) == GIMPLE_SWITCH) >>> @@ -7954,6 +8021,12 @@ vrp_visit_stmt (gimple *stmt, edge >>> *taken_edge_p, tree *output_p) >>> return SSA_PROP_VARYING; >>> } >>> >>> +static enum ssa_prop_result >>> +vrp_visit_stmt (gimple *stmt, edge *taken_edge_p, tree *output_p) >>> +{ >>> + return vrp_visit_stmt_worker (stmt, false, taken_edge_p, output_p); >>> +} >>> >>> as said the refactoring that would be appreciated is to split out the >>> update_value_range calls >>> from the worker functions so you can call the respective functions >>> from the DOM implementations. >>> That they are globbed in vrp_visit_stmt currently is due to the API of >>> the SSA propagator. >> >> Sent this as separate patch for easy reviewing and testing. > > Thanks. > >>> >>> @@ -8768,6 +8842,12 @@ vrp_visit_phi_node (gphi *phi) >>> fprintf (dump_file, "\n"); >>> } >>> >>> + if (dom_p && vr_arg.type == VR_UNDEFINED) >>> + { >>> + set_value_range_to_varying (&vr_result); >>> + break; >>> + } >>> + >>> >>> eh... ok, so another way to attack this is, instead of initializing >>> the lattice to sth else >>> than VR_UNDEFINED, make sure to drop the lattice to varying for all PHI >>> args on >>> yet unvisited incoming edges (you're not doing optimistic VRP). That's >>> the only >>> place you _have_ to do it. >> >> >> Even when it is initialize (as I am doing now), we can still end up with >> VR_UNDEFINED during the propagation. I have just left the above so that we >> dont end up with the wrong VR. > > How would we end up with wrong VRs? I see > > + /* Discover VR when condition is true. */ > + extract_range_for_var_from_comparison_expr (op0, code, op0, op1, &vr); > + if (old_vr->type == VR_RANGE || old_vr->type == VR_ANTI_RANGE) > + vrp_intersect_ranges (&vr, old_vr); > > where you already disregard UNDEFINED as old_vr. > > What you might be missing is to set all DEFs on !stmt_interesting_for_vrp to > VARYING. Also > > + if (stmt_interesting_for_vrp (stmt)) > + { > + tree lhs = gimple_get_lhs (stmt); > + value_range vr = VR_INITIALIZER; > + vrp_visit_stmt_worker (stmt, &taken_edge, &output, &vr); > + update_value_range (lhs, &vr); > + > + /* Try folding stmts with the VR discovered. */ > + if (fold_stmt (&gsi, follow_single_use_edges)) > + update_stmt (gsi_stmt (gsi)); > > folding here can introduce additional stmts and thus unvisited SSA defs > which would end up with VR_UNINITIALIZED defs - I don't see exactly > where that would cause issues but I'm not sure it might not. So better > use fold_stmt_inplace or alternatively if fold_stmt returned true then, > remembering the previous stmt gsi, iterate over all stmts emitted and > set their defs to varying (or re-visit them). See for example how > tree-ssa-forwprop.c does this re-visiting (it revisits all changed stmts). I am now setting the results of stmts that are not interesting to vrp to VR_VARYING. Also, before visiting PHI, if any of the arguments are undefined, result of the PHI is also set varying. I have removed all the others. This now bootstraps and passes regressions (see attached patch). > Note that you want to have a custom valueize function instead of just > follow_single_use_edges as you want to valueize all SSA names according > to their lattice value (if it has a single value). You can use vrp_valueize > for this though that gets you non-single-use edge following as well. > Eventually it's going to be cleaner to do what the SSA propagator does and > before folding do > > did_replace = replace_uses_in (stmt, vrp_valueize); > if (fold_stmt (&gsi, follow_single_use_edges) > || did_replace) > update_stmt (gsi_stmt (gsi)); > > exporting replace_uses_in for this is ok. I guess I prefer this for now. I also added the above. I noticed that I need recompute_tree_invariant_for_addr_expr as in ssa_propagate. My initial implementation also had gimple_purge_all_dead_eh_edges and fixup_noreturn_call as in ssa_propagat but I thinj that is not needed as it would be done at the end of the pass. With this I noticed more stmts are folded before vrp1. This required me to adjust some testcases. > > Overall this now looks good apart from the folding and the VR_INITIALIZER thing. > > You can commit the already approved refactoring changes and combine this > patch with the struct value_range move, this way I can more easily look into > issues with the UNDEFINED thing if you can come up with a testcase that > doesn't work. > I have now committed all the dependent patches. Attached patch passes regression and bootstrap except pr33738.C. This is an unrelated issue as discussed in https://gcc.gnu.org/ml/gcc-patches/2016-08/msg01386.html Is this OK? Thanks, Kugan > Thanks, > Richard. > >> I also noticed that g++.dg/warn/pr33738.C testcase is now failing. This is >> because, with early-vrp setting value range ccp2 is optimizing without >> issuing a warning. I will look into it. >> >> bootstrap and regression testing is in progress. >> >> Thanks, >> Kugan --001a1141549e76f68c053ab3b001 Content-Type: text/plain; charset=US-ASCII; name="p.txt" Content-Disposition: attachment; filename="p.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_is6u3cu10 Content-length: 40439 ZGlmZiAtLWdpdCBhL2djYy9kb2MvaW52b2tlLnRleGkgYi9nY2MvZG9jL2lu dm9rZS50ZXhpCmluZGV4IDFmMDQ1MDEuLmUwMDY4OGE1IDEwMDY0NAotLS0g YS9nY2MvZG9jL2ludm9rZS50ZXhpCisrKyBiL2djYy9kb2MvaW52b2tlLnRl eGkKQEAgLTEyNDMzLDYgKzEyNDMzLDExIEBAIGlzIG1hZGUgYnkgYXBwZW5k aW5nIEBmaWxley5zbHB9IHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgogRHVt cCBlYWNoIGZ1bmN0aW9uIGFmdGVyIFZhbHVlIFJhbmdlIFByb3BhZ2F0aW9u IChWUlApLiAgVGhlIGZpbGUgbmFtZQogaXMgbWFkZSBieSBhcHBlbmRpbmcg QGZpbGV7LnZycH0gdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCiAKK0BpdGVt IGVhcmx5IHZycAorQG9waW5kZXggZmR1bXAtdHJlZS1ldnJwCitEdW1wIGVh Y2ggZnVuY3Rpb24gYWZ0ZXIgRWFybHkgVmFsdWUgUmFuZ2UgUHJvcGFnYXRp b24gKEVWUlApLiAgVGhlIGZpbGUgbmFtZQoraXMgbWFkZSBieSBhcHBlbmRp bmcgQGZpbGV7LmV2cnB9IHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorCiBA aXRlbSBvYWNjZGV2bG93CiBAb3BpbmRleCBmZHVtcC10cmVlLW9hY2NkZXZs b3cKIER1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBhcHBseWluZyBkZXZpY2Ut c3BlY2lmaWMgT3BlbkFDQyB0cmFuc2Zvcm1hdGlvbnMuCmRpZmYgLS1naXQg YS9nY2MvcGFzc2VzLmRlZiBiL2djYy9wYXNzZXMuZGVmCmluZGV4IDUzMzE1 N2QuLjk3NTlmZWQgMTAwNjQ0Ci0tLSBhL2djYy9wYXNzZXMuZGVmCisrKyBi L2djYy9wYXNzZXMuZGVmCkBAIC04OSw2ICs4OSw3IEBAIGFsb25nIHdpdGgg R0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAJICAg ICBleGVjdXRlIFRPRE9fcmVidWlsZF9hbGlhcyBhdCB0aGlzIHBvaW50LiAg Ki8KIAkgIE5FWFRfUEFTUyAocGFzc19idWlsZF9lYWxpYXMpOwogCSAgTkVY VF9QQVNTIChwYXNzX2ZyZSk7CisJICBORVhUX1BBU1MgKHBhc3NfZWFybHlf dnJwKTsKIAkgIE5FWFRfUEFTUyAocGFzc19tZXJnZV9waGkpOwogICAgICAg ICAgIE5FWFRfUEFTUyAocGFzc19kc2UpOwogCSAgTkVYVF9QQVNTIChwYXNz X2NkX2RjZSk7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy90 cmVlLXNzYS9wcjMxMTQ2LTIuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3Ry ZWUtc3NhL3ByMzExNDYtMi5DCmluZGV4IDVlMDk1ODMuLmNmNGVkMzMgMTAw NjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZysrLmRnL3RyZWUtc3NhL3ByMzEx NDYtMi5DCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3RyZWUtc3NhL3By MzExNDYtMi5DCkBAIC0xLDUgKzEsNSBAQAogLyogeyBkZy1kbyBjb21waWxl IH0gKi8KLS8qIHsgZGctb3B0aW9ucyAiLU8gLWZkdW1wLXRyZWUtZm9yd3By b3AxIiB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIC1mbm8tdHJlZS12cnAg LWZkdW1wLXRyZWUtZm9yd3Byb3AxIiB9ICovCiAKICNpbmNsdWRlIDxuZXc+ CiAKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3Nh L2V2cnAxLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9ldnJw MS5jCmluZGV4IGU2OWRlMjkuLjhjNmU0ZTYgMTAwNjQ0Ci0tLSBhL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL2V2cnAxLmMKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvZXZycDEuYwpAQCAtMCwwICsxLDEz IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25z ICItTzIgLWZkdW1wLXRyZWUtZXZycCIgfSAqLworCitpbnQgZm9vIChpbnQg aSk7CitpbnQgYmFyIChpbnQgaikKK3sKKyAgaWYgKGogPiAyKQorICAgIHJl dHVybiBmb28gKGogKyAyKTsKKyAgZWxzZQorICAgIHJldHVybiBqOworfQor CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIlxcXFs1LCBcXCtJ TkYiICJldnJwIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3RyZWUtc3NhL2V2cnAyLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy90cmVlLXNzYS9ldnJwMi5jCmluZGV4IGU2OWRlMjkuLmU2ZDQyMzUgMTAw NjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL2V2cnAy LmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvZXZycDIu YwpAQCAtMCwwICsxLDE4IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwor LyogeyBkZy1vcHRpb25zICItTzIgLWZkdW1wLXRyZWUtZXZycCIgfSAqLwor CitpbnQgZm9vIChpbnQgaSk7CitpbnQgYmFyMiAoaW50IGopCit7CisgIGlm IChqID4gMikKKyAgICB7CisgICAgICBpZiAoaiA8IDcpCisJcmV0dXJuIGZv byAoaiArIDEpOworICAgICAgZWxzZQorCXJldHVybiBmb28gKGogKyAyKTsK KyAgICB9CisgIHJldHVybiBqOworfQorCisKKy8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcCAiXFxcWzQsIDdcXFxdIiAiZXZycCIgfSB9ICovCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9ldnJw My5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvZXZycDMuYwpp bmRleCBlNjlkZTI5Li4xYTNiYmQ1IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1 aXRlL2djYy5kZy90cmVlLXNzYS9ldnJwMy5jCisrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3RyZWUtc3NhL2V2cnAzLmMKQEAgLTAsMCArMSwxNSBAQAor LyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8y IC1mZHVtcC10cmVlLWV2cnAiIH0gKi8KKworaW50IGZvbyAoaW50IGkpOwor dm9pZCBiYXIgKGludCBqKQoreworICB1bnNpZ25lZCBpbnQgaTsKKyAgZm9y IChpID0gMDsgaSA8IDEwOyArK2kpCisgICAgeworICAgICAgYmFyIChpICsg MSk7CisgICAgfQorfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAgIlxcXFsxLCAxMFxcXF0iICJldnJwIiB9IH0gKi8KKwpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHIyMDY1Ny5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHIyMDY1Ny5jCmluZGV4 IDcyN2NhNGMuLmU2NzgyMzEgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3RyZWUtc3NhL3ByMjA2NTcuYworKysgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy90cmVlLXNzYS9wcjIwNjU3LmMKQEAgLTMsNyArMyw3IEBACiAg ICBzdGF0ZW1lbnQsIHdoaWNoIHdhcyBuZWVkZWQgdG8gZWxpbWluYXRlIHRo ZSBzZWNvbmQgImlmIiBzdGF0ZW1lbnQuICAqLwogCiAvKiB7IGRnLWRvIGNv bXBpbGUgfSAqLwotLyogeyBkZy1vcHRpb25zICItTzIgLWZuby10cmVlLWRv bWluYXRvci1vcHRzIC1mbm8tdHJlZS1mcmUgLWZkdW1wLXRyZWUtdnJwMS1k ZXRhaWxzIiB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZm5vLXRyZWUt ZG9taW5hdG9yLW9wdHMgLWZuby10cmVlLWZyZSAtZmR1bXAtdHJlZS1ldnJw IiB9ICovCiAKIGludAogZm9vIChpbnQgYSkKQEAgLTE0LDQgKzE0LDQgQEAg Zm9vIChpbnQgYSkKICAgcmV0dXJuIDA7CiB9CiAKLS8qIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiRm9sZGluZyBwcmVkaWNhdGUiIDEg InZycDEifSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAt dGltZXMgImlmIiAxICJldnJwIn0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHIyMjExNy5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHIyMjExNy5jCmluZGV4IDdlZmRkNjMu LjNhNDMzZDYgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Ry ZWUtc3NhL3ByMjIxMTcuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90 cmVlLXNzYS9wcjIyMTE3LmMKQEAgLTMsNyArMyw3IEBACiAgICBrbm93biB0 byBiZSB6ZXJvIGFmdGVyIGVudGVyaW5nIHRoZSBmaXJzdCB0d28gImlmIiBz dGF0ZW1lbnRzLiAgKi8KIAogLyogeyBkZy1kbyBjb21waWxlIH0gKi8KLS8q IHsgZGctb3B0aW9ucyAiLU8yIC1mZHVtcC10cmVlLXZycDEiIH0gKi8KKy8q IHsgZGctb3B0aW9ucyAiLU8yICAtZmR1bXAtdHJlZS12cnAxIiB9ICovCiAK IHZvaWQgbGlua19lcnJvciAodm9pZCk7CiAKQEAgLTIxLDQgKzIxLDQgQEAg Zm9vIChpbnQgKnAsIGludCBxKQogICAgIH0KIH0KIAotLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJGb2xkaW5nIHByZWRpY2F0ZSBy Xy4qICE9IDBCIHRvIDAiIDEgInZycDEiIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJsaW5rX2Vycm9yIiAwICJ2cnAx IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Ry ZWUtc3NhL3ByMjUzODIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUt c3NhL3ByMjUzODIuYwppbmRleCBkY2Y5MTQ4Li5jNGZkYThiIDEwMDY0NAot LS0gYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjI1MzgyLmMK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHIyNTM4Mi5j CkBAIC0zLDcgKzMsNyBAQAogICAgQ2hlY2sgdGhhdCBWUlAgbm93IGdldHMg cmFuZ2VzIGZyb20gQklUX0FORF9FWFBScy4gICovCiAKIC8qIHsgZGctZG8g Y29tcGlsZSB9ICovCi0vKiB7IGRnLW9wdGlvbnMgIi1PMiAtZm5vLXRyZWUt Y2NwIC1mZHVtcC10cmVlLXZycDEiIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAi LU8yIC1mbm8tdHJlZS1jY3AgLWZkdW1wLXRyZWUtdnJwIiB9ICovCiAKIGlu dAogZm9vIChpbnQgYSkKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3RyZWUtc3NhL3ByMzc1MDguYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3RyZWUtc3NhL3ByMzc1MDguYwppbmRleCAwOTYzY2Q5Li4yYmEwOWFmIDEw MDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjM3 NTA4LmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHIz NzUwOC5jCkBAIC00Niw0ICs0Niw0IEBAIGludCB0ZXN0NCAoc3RydWN0IGZv bzIgKngpCiAgIHJldHVybiAwOwogfQogCi0vKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAtdGltZXMgIkZvbGRpbmciIDIgInZycDEiIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJpZiIgMiAi dnJwMSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5k Zy90cmVlLXNzYS9wcjYxODM5XzIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3RyZWUtc3NhL3ByNjE4MzlfMi5jCmluZGV4IGZmYTAwYTcuLmU0NGRjNTcg MTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3By NjE4MzlfMi5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3Nh L3ByNjE4MzlfMi5jCkBAIC0xLDYgKzEsNiBAQAogLyogUFIgdHJlZS1vcHRp bWl6YXRpb24vNjE4MzkuICAqLwogLyogeyBkZy1kbyBjb21waWxlIH0gKi8K LS8qIHsgZGctb3B0aW9ucyAiLU8yIC1mZHVtcC10cmVlLXZycDEiIH0gKi8K Ky8qIHsgZGctb3B0aW9ucyAiLU8yIC1mZHVtcC10cmVlLWV2cnAiIH0gKi8K IC8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGludDMycGx1cyB9 ICovCiAKIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCkBAIC00Nyw4ICs0 Nyw4IEBAIGludCBiYXIyICgpCiAKIAogLyogRG9udCBvcHRpbWl6ZSA5NzIx OTU3MTcgLyAwIGluIGZ1bmN0aW9uIGZvby4gICovCi0vKiB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIjk3MjE5NTcxNyAvIF8iIDEgICJ2 cnAxIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10 aW1lcyAiOTcyMTk1NzE3IC8gXyIgMSAgImV2cnAiIH0gfSAqLwogLyogRG9u dCBvcHRpbWl6ZSA5NzIxOTU3MTcgJSAwIGluIGZ1bmN0aW9uIGJhci4gICov Ci0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIjk3MjE5 NTcxNyAlIF8iIDEgInZycDEiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wLXRpbWVzICI5NzIxOTU3MTcgJSBfIiAxICJldnJwIiB9 IH0gKi8KIC8qIE9wdGltaXplIGluIGZ1bmN0aW9uIGJhcjIuICAqLwotLyog eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICI5NzIxOTU3MTUg JSBfIiAwICJ2cnAxIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcC10aW1lcyAiOTcyMTk1NzE1ICUgXyIgMCAiZXZycCIgfSB9ICov CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9w cjY0MTMwLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjY0 MTMwLmMKaW5kZXggMGIyNTQ2Ni4uZjM5YmQxNyAxMDA2NDQKLS0tIGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI2NDEzMC5jCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByNjQxMzAuYwpAQCAtMSw2 ICsxLDYgQEAKIAogLyogeyBkZy1kbyBjb21waWxlIH0gKi8KLS8qIHsgZGct b3B0aW9ucyAiLU8yIC1mZHVtcC10cmVlLXZycDEiIH0gKi8KKy8qIHsgZGct b3B0aW9ucyAiLU8yIC1mZHVtcC10cmVlLWV2cnAiIH0gKi8KIAogaW50IGZ1 bnNpZ25lZCAodW5zaWduZWQgYSkKIHsKQEAgLTEzLDYgKzEzLDYgQEAgaW50 IGZ1bnNpZ25lZDIgKHVuc2lnbmVkIGEpCiAgIHJldHVybiAoLTEgKiAweDFm ZmZmZmZmZkwpIC8gYSA9PSAwOwogfQogCi0vKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAgIjogXFxcWzIsIDg1ODk5MzQ1OTFcXFxdIiAidnJwMSIg fSB9ICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIjogXFxc Wy04NTg5OTM0NTkxLCAtMlxcXF0iICJ2cnAxIiB9IH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiOiBcXFxbMiwgODU4OTkzNDU5MVxc XF0iICJldnJwIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcCAiOiBcXFxbLTg1ODk5MzQ1OTEsIC0yXFxcXSIgImV2cnAiIH0gfSAq LwogCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNz YS92cnAwNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvdnJw MDQuYwppbmRleCA2MWI3YTQ3Li42N2Y4ZjAxIDEwMDY0NAotLS0gYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS92cnAwNC5jCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ZycDA0LmMKQEAgLTEwLDQgKzEw LDQgQEAgZm9vIChpbnQgYSwgaW50IGIpCiAgICAgICByZXR1cm4gYSArIGI7 CiB9CiAKLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi Rm9sZGluZyBwcmVkaWNhdGUgYV8uKnRvIDEiIDEgInZycDEiIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJpZiIgMSAi dnJwMSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5k Zy90cmVlLXNzYS92cnAwNi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJl ZS1zc2EvdnJwMDYuYwppbmRleCBjZGFkNTM0Li5jNGNlMTcwIDEwMDY0NAot LS0gYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS92cnAwNi5jCisr KyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ZycDA2LmMKQEAg LTI4LDYgKzI4LDYgQEAgZm9vIChpbnQgaSwgaW50IGosIGludCBhKQogICBy ZXR1cm4gaSArIGEgKyBqOwogfQogCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAtdGltZXMgIkZvbGRpbmcgcHJlZGljYXRlIGlfXFswLTlcXSsu KjAgdG8gMCIgMSAidnJwMSIgfSB9ICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAtdGltZXMgIkZvbGRpbmcgcHJlZGljYXRlIGpfXFswLTlc XSsuKjAgdG8gMSIgMSAidnJwMSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgIkZvbGRpbmcgcHJlZGljYXRlIFxbaXxq XF1fXFswLTlcXSsuKjAgdG8gMCIgMSAidnJwMSIgfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIkZvbGRpbmcgcHJlZGlj YXRlIFxbaXxqXF1fXFswLTlcXSsuKjAgdG8gMSIgMSAidnJwMSIgfSB9ICov CiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIkZvbGRp bmcgcHJlZGljYXRlIGlfXFswLTldKy4qal9cWzAtOVxdKy4qIHRvIDAiIDEg InZycDEiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdHJlZS1zc2EvdnJwMTYuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Ry ZWUtc3NhL3ZycDE2LmMKaW5kZXggOGY1ZDVjOC4uZDA5ZjNhZSAxMDA2NDQK LS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvdnJwMTYuYwor KysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS92cnAxNi5jCkBA IC0xLDUgKzEsNSBAQAogLyogeyBkZy1kbyBjb21waWxlIH0gKi8KLS8qIHsg ZGctb3B0aW9ucyAiLU8yIC1mbm8tdHJlZS1mcmUgLWZkdW1wLXRyZWUtdnJw MS1kZXRhaWxzIiB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZm5vLXRy ZWUtZnJlIC1mZHVtcC10cmVlLWV2cnAiIH0gKi8KIAogCiBleHRlcm4gdm9p ZCBhYm9ydCAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp OwpAQCAtMTksNSArMTksNSBAQCBub25sb2NhbF9tZW50aW9uZWRfcCAocnR4 IHgpCiAJYWJvcnQgKCk7CiB9CiAKLS8qIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcC10aW1lcyAiRm9sZGluZyBwcmVkaWNhdGUgLip0byAwIiAxICJ2 cnAxIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10 aW1lcyAiaWYiIDAgImV2cnAiIH0gfSAqLwogCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS92cnAyNS5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdHJlZS1zc2EvdnJwMjUuYwppbmRleCBjYmM0ZWMzLi5h NDlmMDc5IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVl LXNzYS92cnAyNS5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUt c3NhL3ZycDI1LmMKQEAgLTEsNSArMSw1IEBACiAvKiB7IGRnLWRvIGNvbXBp bGUgfSAqLwotLyogeyBkZy1vcHRpb25zICItTzIgLWZuby10cmVlLWZyZSAt ZmR1bXAtdHJlZS12cnAxLWRldGFpbHMiIH0gKi8KKy8qIHsgZGctb3B0aW9u cyAiLU8yIC1mbm8tdHJlZS1mcmUgLWZkdW1wLXRyZWUtdnJwMSIgfSAqLwog CiBleHRlcm4gdm9pZCBhYm9ydCAoKTsKIGV4dGVybiB2b2lkIGFyZiAoKTsK QEAgLTQ5LDUgKzQ5LDUgQEAgTDk6CiAvKiBUaGUgc2Vjb25kIHRlc3Qgb2Yg KGNvZGUxICE9IDUzKSBhbmQgdGhlIHRlc3QgKEQxODY3MCA8PSAyKSBhcmUK ICAgIGJvdGggdG90YWxseSBzdWJzdW1lZCBieSBlYXJsaWVyIHRlc3RzIGFu ZCB0aHVzIHNob3VsZCBiZSBmb2xkZWQKICAgIGF3YXkgdXNpbmcgVlJQLiAg Ki8KLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiRm9s ZGluZyBwcmVkaWNhdGUiIDIgInZycDEiIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJpZiIgMyAidnJwMSIgfSB9ICov CiAKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3Nh L3ZycDQ2LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS92cnA0 Ni5jCmluZGV4IGQzYzllZDEuLjViMjc5YTEgMTAwNjQ0Ci0tLSBhL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ZycDQ2LmMKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvdnJwNDYuYwpAQCAtMjcsNiArMjcs NSBAQCBmdW5jXzE4ICggaW50IHQgKQogICAgIH0KIH0KIAotLyogVGhlcmUg c2hvdWxkIGJlIGEgc2luZ2xlIGlmIGxlZnQuICAqLwogCi0vKiB7IGRnLWZp bmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgImlmIiAxICJ2cnAxIiB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiaWYi IDAgInZycDEiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdHJlZS1zc2EvdnJwNjcuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3RyZWUtc3NhL3ZycDY3LmMKaW5kZXggZWY1ZThmOS4uNTE1NWY3YiAxMDA2 NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvdnJwNjcu YworKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS92cnA2Ny5j CkBAIC0zNiw0ICszNiw0IEBAIHVuc2lnbmVkIGJheiAodW5zaWduZWQgaSkK ICAgcmV0dXJuIGk7CiB9CiAKLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC10aW1lcyAiRm9sZGluZyBwcmVkaWNhdGUiIDMgInZycDEiIH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJpZiIg MyAidnJwMSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGltZXZhci5kZWYg Yi9nY2MvdGltZXZhci5kZWYKaW5kZXggNWYxMjExOC4uODgzNzgzMiAxMDA2 NDQKLS0tIGEvZ2NjL3RpbWV2YXIuZGVmCisrKyBiL2djYy90aW1ldmFyLmRl ZgpAQCAtMTQ5LDYgKzE0OSw3IEBAIERFRlRJTUVWQVIgKFRWX1RSRUVfQ0ZH CQkgICAgICwgInRyZWUgQ0ZHIGNvbnN0cnVjdGlvbiIpCiBERUZUSU1FVkFS IChUVl9UUkVFX0NMRUFOVVBfQ0ZHCSAgICAgLCAidHJlZSBDRkcgY2xlYW51 cCIpCiBERUZUSU1FVkFSIChUVl9UUkVFX1RBSUxfTUVSR0UgICAgICAgLCAi dHJlZSB0YWlsIG1lcmdlIikKIERFRlRJTUVWQVIgKFRWX1RSRUVfVlJQICAg ICAgICAgICAgICAsICJ0cmVlIFZSUCIpCitERUZUSU1FVkFSIChUVl9UUkVF X0VBUkxZX1ZSUCAgICAgICAgLCAidHJlZSBFYXJseSBWUlAiKQogREVGVElN RVZBUiAoVFZfVFJFRV9DT1BZX1BST1AgICAgICAgICwgInRyZWUgY29weSBw cm9wYWdhdGlvbiIpCiBERUZUSU1FVkFSIChUVl9GSU5EX1JFRkVSRU5DRURf VkFSUyAgLCAidHJlZSBmaW5kIHJlZi4gdmFycyIpCiBERUZUSU1FVkFSIChU Vl9UUkVFX1BUQQkJICAgICAsICJ0cmVlIFBUQSIpCmRpZmYgLS1naXQgYS9n Y2MvdHJlZS1wYXNzLmggYi9nY2MvdHJlZS1wYXNzLmgKaW5kZXggYzAwNTlk ZS4uODZkNzk3ZSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtcGFzcy5oCisrKyBi L2djYy90cmVlLXBhc3MuaApAQCAtNDQwLDYgKzQ0MCw3IEBAIGV4dGVybiBn aW1wbGVfb3B0X3Bhc3MgKm1ha2VfcGFzc19mcmUgKGdjYzo6Y29udGV4dCAq Y3R4dCk7CiBleHRlcm4gZ2ltcGxlX29wdF9wYXNzICptYWtlX3Bhc3NfY2hl Y2tfZGF0YV9kZXBzIChnY2M6OmNvbnRleHQgKmN0eHQpOwogZXh0ZXJuIGdp bXBsZV9vcHRfcGFzcyAqbWFrZV9wYXNzX2NvcHlfcHJvcCAoZ2NjOjpjb250 ZXh0ICpjdHh0KTsKIGV4dGVybiBnaW1wbGVfb3B0X3Bhc3MgKm1ha2VfcGFz c19pc29sYXRlX2Vycm9uZW91c19wYXRocyAoZ2NjOjpjb250ZXh0ICpjdHh0 KTsKK2V4dGVybiBnaW1wbGVfb3B0X3Bhc3MgKm1ha2VfcGFzc19lYXJseV92 cnAgKGdjYzo6Y29udGV4dCAqY3R4dCk7CiBleHRlcm4gZ2ltcGxlX29wdF9w YXNzICptYWtlX3Bhc3NfdnJwIChnY2M6OmNvbnRleHQgKmN0eHQpOwogZXh0 ZXJuIGdpbXBsZV9vcHRfcGFzcyAqbWFrZV9wYXNzX3VuY3Byb3AgKGdjYzo6 Y29udGV4dCAqY3R4dCk7CiBleHRlcm4gZ2ltcGxlX29wdF9wYXNzICptYWtl X3Bhc3NfcmV0dXJuX3Nsb3QgKGdjYzo6Y29udGV4dCAqY3R4dCk7CmRpZmYg LS1naXQgYS9nY2MvdHJlZS1zc2EtcHJvcGFnYXRlLmMgYi9nY2MvdHJlZS1z c2EtcHJvcGFnYXRlLmMKaW5kZXggYzhjZjA3OC4uOTdjZmRlNSAxMDA2NDQK LS0tIGEvZ2NjL3RyZWUtc3NhLXByb3BhZ2F0ZS5jCisrKyBiL2djYy90cmVl LXNzYS1wcm9wYWdhdGUuYwpAQCAtODYzLDcgKzg2Myw3IEBAIHN0YXRpYyBz dHJ1Y3QgcHJvcF9zdGF0c19kIHByb3Bfc3RhdHM7CiAvKiBSZXBsYWNlIFVT RSByZWZlcmVuY2VzIGluIHN0YXRlbWVudCBTVE1UIHdpdGggdGhlIHZhbHVl cyBzdG9yZWQgaW4KICAgIFBST1BfVkFMVUUuIFJldHVybiB0cnVlIGlmIGF0 IGxlYXN0IG9uZSByZWZlcmVuY2Ugd2FzIHJlcGxhY2VkLiAgKi8KIAotc3Rh dGljIGJvb2wKK2Jvb2wKIHJlcGxhY2VfdXNlc19pbiAoZ2ltcGxlICpzdG10 LCBzc2FfcHJvcF9nZXRfdmFsdWVfZm4gZ2V0X3ZhbHVlKQogewogICBib29s IHJlcGxhY2VkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2Et cHJvcGFnYXRlLmggYi9nY2MvdHJlZS1zc2EtcHJvcGFnYXRlLmgKaW5kZXgg MzBkNjZhOS4uMWE5Njk3NiAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLXBy b3BhZ2F0ZS5oCisrKyBiL2djYy90cmVlLXNzYS1wcm9wYWdhdGUuaApAQCAt ODQsNSArODQsNiBAQCBleHRlcm4gdm9pZCBwcm9wYWdhdGVfdmFsdWUgKHVz ZV9vcGVyYW5kX3AsIHRyZWUpOwogZXh0ZXJuIHZvaWQgcmVwbGFjZV9leHAg KHVzZV9vcGVyYW5kX3AsIHRyZWUpOwogZXh0ZXJuIHZvaWQgcHJvcGFnYXRl X3RyZWVfdmFsdWUgKHRyZWUgKiwgdHJlZSk7CiBleHRlcm4gdm9pZCBwcm9w YWdhdGVfdHJlZV92YWx1ZV9pbnRvX3N0bXQgKGdpbXBsZV9zdG10X2l0ZXJh dG9yICosIHRyZWUpOworZXh0ZXJuIGJvb2wgcmVwbGFjZV91c2VzX2luIChn aW1wbGUgKnN0bXQsIHNzYV9wcm9wX2dldF92YWx1ZV9mbiBnZXRfdmFsdWUp OwogCiAjZW5kaWYgLyogX1RSRUVfU1NBX1BST1BBR0FURV9IICAqLwpkaWZm IC0tZ2l0IGEvZ2NjL3RyZWUtdnJwLmMgYi9nY2MvdHJlZS12cnAuYwppbmRl eCA4NmYyYThmLi5lNGQ3ODliIDEwMDY0NAotLS0gYS9nY2MvdHJlZS12cnAu YworKysgYi9nY2MvdHJlZS12cnAuYwpAQCAtNjAsNiArNjAsNyBAQCBhbG9u ZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNl ZQogI2luY2x1ZGUgImNhc2UtY2ZuLW1hY3Jvcy5oIgogI2luY2x1ZGUgInBh cmFtcy5oIgogI2luY2x1ZGUgImFsbG9jLXBvb2wuaCIKKyNpbmNsdWRlICJk b213YWxrLmgiCiAKICNkZWZpbmUgVlJfSU5JVElBTElaRVIgeyBWUl9VTkRF RklORUQsIE5VTExfVFJFRSwgTlVMTF9UUkVFLCBOVUxMIH0KIApAQCAtMTQ1 NSw0NCArMTQ1NiwxNyBAQCBvcF93aXRoX2Jvb2xlYW5fdmFsdWVfcmFuZ2Vf cCAodHJlZSBvcCkKIAkgICYmIGludGVnZXJfb25lcCAodnItPm1heCkpOwog fQogCi0vKiBFeHRyYWN0IHZhbHVlIHJhbmdlIGluZm9ybWF0aW9uIGZyb20g YW4gQVNTRVJUX0VYUFIgRVhQUiBhbmQgc3RvcmUKLSAgIGl0IGluICpWUl9Q LiAgKi8KKy8qIEV4dHJhY3QgdmFsdWUgcmFuZ2UgaW5mb3JtYXRpb24gZm9y IFZBUiB3aGVuIChPUCBDT05EX0NPREUgTElNSVQpIGlzCisgICB0cnVlIGFu ZCBzdG9yZSBpdCBpbiAqVlJfUC4gICovCiAKIHN0YXRpYyB2b2lkCi1leHRy YWN0X3JhbmdlX2Zyb21fYXNzZXJ0ICh2YWx1ZV9yYW5nZSAqdnJfcCwgdHJl ZSBleHByKQorZXh0cmFjdF9yYW5nZV9mb3JfdmFyX2Zyb21fY29tcGFyaXNv bl9leHByICh0cmVlIHZhciwgZW51bSB0cmVlX2NvZGUgY29uZF9jb2RlLAor CQkJCQkgICAgdHJlZSBvcCwgdHJlZSBsaW1pdCwKKwkJCQkJICAgIHZhbHVl X3JhbmdlICp2cl9wKQogewotICB0cmVlIHZhciwgY29uZCwgbGltaXQsIG1p biwgbWF4LCB0eXBlOworICB0cmVlICBtaW4sIG1heCwgdHlwZTsKICAgdmFs dWVfcmFuZ2UgKmxpbWl0X3ZyOwotICBlbnVtIHRyZWVfY29kZSBjb25kX2Nv ZGU7Ci0KLSAgdmFyID0gQVNTRVJUX0VYUFJfVkFSIChleHByKTsKLSAgY29u ZCA9IEFTU0VSVF9FWFBSX0NPTkQgKGV4cHIpOwotCi0gIGdjY19hc3NlcnQg KENPTVBBUklTT05fQ0xBU1NfUCAoY29uZCkpOwotCi0gIC8qIEZpbmQgVkFS IGluIHRoZSBBU1NFUlRfRVhQUiBjb25kaXRpb25hbC4gICovCi0gIGlmICh2 YXIgPT0gVFJFRV9PUEVSQU5EIChjb25kLCAwKQotICAgICAgfHwgVFJFRV9D T0RFIChUUkVFX09QRVJBTkQgKGNvbmQsIDApKSA9PSBQTFVTX0VYUFIKLSAg ICAgIHx8IFRSRUVfQ09ERSAoVFJFRV9PUEVSQU5EIChjb25kLCAwKSkgPT0g Tk9QX0VYUFIpCi0gICAgewotICAgICAgLyogSWYgdGhlIHByZWRpY2F0ZSBp cyBvZiB0aGUgZm9ybSBWQVIgQ09NUCBMSU1JVCwgdGhlbiB3ZSBqdXN0Ci0J IHRha2UgTElNSVQgZnJvbSB0aGUgUkhTIGFuZCB1c2UgdGhlIHNhbWUgY29t cGFyaXNvbiBjb2RlLiAgKi8KLSAgICAgIGNvbmRfY29kZSA9IFRSRUVfQ09E RSAoY29uZCk7Ci0gICAgICBsaW1pdCA9IFRSRUVfT1BFUkFORCAoY29uZCwg MSk7Ci0gICAgICBjb25kID0gVFJFRV9PUEVSQU5EIChjb25kLCAwKTsKLSAg ICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICAvKiBJZiB0aGUgcHJlZGljYXRl IGlzIG9mIHRoZSBmb3JtIExJTUlUIENPTVAgVkFSLCB0aGVuIHdlIG5lZWQK LQkgdG8gZmxpcCBhcm91bmQgdGhlIGNvbXBhcmlzb24gY29kZSB0byBjcmVh dGUgdGhlIHByb3BlciByYW5nZQotCSBmb3IgVkFSLiAgKi8KLSAgICAgIGNv bmRfY29kZSA9IHN3YXBfdHJlZV9jb21wYXJpc29uIChUUkVFX0NPREUgKGNv bmQpKTsKLSAgICAgIGxpbWl0ID0gVFJFRV9PUEVSQU5EIChjb25kLCAwKTsK LSAgICAgIGNvbmQgPSBUUkVFX09QRVJBTkQgKGNvbmQsIDEpOwotICAgIH0K LQogICBsaW1pdCA9IGF2b2lkX292ZXJmbG93X2luZmluaXR5IChsaW1pdCk7 Ci0KICAgdHlwZSA9IFRSRUVfVFlQRSAodmFyKTsKICAgZ2NjX2Fzc2VydCAo bGltaXQgIT0gdmFyKTsKIApAQCAtMTUzOCwxNSArMTUxMiwxNSBAQCBleHRy YWN0X3JhbmdlX2Zyb21fYXNzZXJ0ICh2YWx1ZV9yYW5nZSAqdnJfcCwgdHJl ZSBleHByKQogICAgICBhcyB3ZWxsIGJ1aWxkIHRoZSByYW5nZSBbYl80LCAr SU5GXSBmb3IgaXQuCiAgICAgIE9uZSBzcGVjaWFsIGNhc2Ugd2UgaGFuZGxl IGlzIGV4dHJhY3RpbmcgYSByYW5nZSBmcm9tIGEKICAgICAgcmFuZ2UgdGVz dCBlbmNvZGVkIGFzICh1bnNpZ25lZCl2YXIgKyBDU1QgPD0gbGltaXQuICAq LwotICBpZiAoVFJFRV9DT0RFIChjb25kKSA9PSBOT1BfRVhQUgotICAgICAg fHwgVFJFRV9DT0RFIChjb25kKSA9PSBQTFVTX0VYUFIpCisgIGlmIChUUkVF X0NPREUgKG9wKSA9PSBOT1BfRVhQUgorICAgICAgfHwgVFJFRV9DT0RFIChv cCkgPT0gUExVU19FWFBSKQogICAgIHsKLSAgICAgIGlmIChUUkVFX0NPREUg KGNvbmQpID09IFBMVVNfRVhQUikKKyAgICAgIGlmIChUUkVFX0NPREUgKG9w KSA9PSBQTFVTX0VYUFIpCiAgICAgICAgIHsKLSAgICAgICAgICBtaW4gPSBm b2xkX2J1aWxkMSAoTkVHQVRFX0VYUFIsIFRSRUVfVFlQRSAoVFJFRV9PUEVS QU5EIChjb25kLCAxKSksCi0JCQkgICAgIFRSRUVfT1BFUkFORCAoY29uZCwg MSkpOworCSAgbWluID0gZm9sZF9idWlsZDEgKE5FR0FURV9FWFBSLCBUUkVF X1RZUEUgKFRSRUVfT1BFUkFORCAob3AsIDEpKSwKKwkJCSAgICAgVFJFRV9P UEVSQU5EIChvcCwgMSkpOwogICAgICAgICAgIG1heCA9IGludF9jb25zdF9i aW5vcCAoUExVU19FWFBSLCBsaW1pdCwgbWluKTsKLQkgIGNvbmQgPSBUUkVF X09QRVJBTkQgKGNvbmQsIDApOworCSAgb3AgPSBUUkVFX09QRVJBTkQgKG9w LCAwKTsKIAl9CiAgICAgICBlbHNlCiAJewpAQCAtMTczMCw2ICsxNzA0LDQx IEBAIGV4dHJhY3RfcmFuZ2VfZnJvbV9hc3NlcnQgKHZhbHVlX3JhbmdlICp2 cl9wLCB0cmVlIGV4cHIpCiAgIHZycF9pbnRlcnNlY3RfcmFuZ2VzICh2cl9w LCBnZXRfdmFsdWVfcmFuZ2UgKHZhcikpOwogfQogCisvKiBFeHRyYWN0IHZh bHVlIHJhbmdlIGluZm9ybWF0aW9uIGZyb20gYW4gQVNTRVJUX0VYUFIgRVhQ UiBhbmQgc3RvcmUKKyAgIGl0IGluICpWUl9QLiAgKi8KKworc3RhdGljIHZv aWQKK2V4dHJhY3RfcmFuZ2VfZnJvbV9hc3NlcnQgKHZhbHVlX3JhbmdlICp2 cl9wLCB0cmVlIGV4cHIpCit7CisgIHRyZWUgdmFyID0gQVNTRVJUX0VYUFJf VkFSIChleHByKTsKKyAgdHJlZSBjb25kID0gQVNTRVJUX0VYUFJfQ09ORCAo ZXhwcik7CisgIHRyZWUgbGltaXQsIG9wOworICBlbnVtIHRyZWVfY29kZSBj b25kX2NvZGU7CisgIGdjY19hc3NlcnQgKENPTVBBUklTT05fQ0xBU1NfUCAo Y29uZCkpOworCisgIC8qIEZpbmQgVkFSIGluIHRoZSBBU1NFUlRfRVhQUiBj b25kaXRpb25hbC4gICovCisgIGlmICh2YXIgPT0gVFJFRV9PUEVSQU5EIChj b25kLCAwKQorICAgICAgfHwgVFJFRV9DT0RFIChUUkVFX09QRVJBTkQgKGNv bmQsIDApKSA9PSBQTFVTX0VYUFIKKyAgICAgIHx8IFRSRUVfQ09ERSAoVFJF RV9PUEVSQU5EIChjb25kLCAwKSkgPT0gTk9QX0VYUFIpCisgICAgeworICAg ICAgLyogSWYgdGhlIHByZWRpY2F0ZSBpcyBvZiB0aGUgZm9ybSBWQVIgQ09N UCBMSU1JVCwgdGhlbiB3ZSBqdXN0CisJIHRha2UgTElNSVQgZnJvbSB0aGUg UkhTIGFuZCB1c2UgdGhlIHNhbWUgY29tcGFyaXNvbiBjb2RlLiAgKi8KKyAg ICAgIGNvbmRfY29kZSA9IFRSRUVfQ09ERSAoY29uZCk7CisgICAgICBsaW1p dCA9IFRSRUVfT1BFUkFORCAoY29uZCwgMSk7CisgICAgICBvcCA9IFRSRUVf T1BFUkFORCAoY29uZCwgMCk7CisgICAgfQorICBlbHNlCisgICAgeworICAg ICAgLyogSWYgdGhlIHByZWRpY2F0ZSBpcyBvZiB0aGUgZm9ybSBMSU1JVCBD T01QIFZBUiwgdGhlbiB3ZSBuZWVkCisJIHRvIGZsaXAgYXJvdW5kIHRoZSBj b21wYXJpc29uIGNvZGUgdG8gY3JlYXRlIHRoZSBwcm9wZXIgcmFuZ2UKKwkg Zm9yIFZBUi4gICovCisgICAgICBjb25kX2NvZGUgPSBzd2FwX3RyZWVfY29t cGFyaXNvbiAoVFJFRV9DT0RFIChjb25kKSk7CisgICAgICBsaW1pdCA9IFRS RUVfT1BFUkFORCAoY29uZCwgMCk7CisgICAgICBvcCA9IFRSRUVfT1BFUkFO RCAoY29uZCwgMSk7CisgICAgfQorICBleHRyYWN0X3JhbmdlX2Zvcl92YXJf ZnJvbV9jb21wYXJpc29uX2V4cHIgKHZhciwgY29uZF9jb2RlLCBvcCwKKwkJ CQkJICAgICAgbGltaXQsIHZyX3ApOworfQogCiAvKiBFeHRyYWN0IHJhbmdl IGluZm9ybWF0aW9uIGZyb20gU1NBIG5hbWUgVkFSIGFuZCBzdG9yZSBpdCBp biBWUi4gIElmCiAgICBWQVIgaGFzIGFuIGludGVyZXN0aW5nIHJhbmdlLCB1 c2UgaXQuICBPdGhlcndpc2UsIGNyZWF0ZSB0aGUKQEAgLTY5NTIsMTkgKzY5 NjEsMjggQEAgc3RtdF9pbnRlcmVzdGluZ19mb3JfdnJwIChnaW1wbGUgKnN0 bXQpCiAgIHJldHVybiBmYWxzZTsKIH0KIAotCi0vKiBJbml0aWFsaXplIGxv Y2FsIGRhdGEgc3RydWN0dXJlcyBmb3IgVlJQLiAgKi8KKy8qIEluaXRpYWxp emUgVlJQIGxhdHRpY2UuICAqLwogCiBzdGF0aWMgdm9pZAotdnJwX2luaXRp YWxpemUgKHZvaWQpCit2cnBfaW5pdGlhbGl6ZV9sYXR0aWNlICgpCiB7Ci0g IGJhc2ljX2Jsb2NrIGJiOwotCiAgIHZhbHVlc19wcm9wYWdhdGVkID0gZmFs c2U7CiAgIG51bV92cl92YWx1ZXMgPSBudW1fc3NhX25hbWVzOwogICB2cl92 YWx1ZSA9IFhDTkVXVkVDICh2YWx1ZV9yYW5nZSAqLCBudW1fdnJfdmFsdWVz KTsKICAgdnJfcGhpX2VkZ2VfY291bnRzID0gWENORVdWRUMgKGludCwgbnVt X3NzYV9uYW1lcyk7CiAgIGJpdG1hcF9vYnN0YWNrX2luaXRpYWxpemUgKCZ2 cnBfZXF1aXZfb2JzdGFjayk7Cit9CisKKy8qIEluaXRpYWxpemUgbG9jYWwg ZGF0YSBzdHJ1Y3R1cmVzIGZvciBWUlAuICBJZiBET01fUCBpcyB0cnVlLAor ICAgd2Ugd2lsbCBiZSBjYWxsaW5nIHRoaXMgZnJvbSBlYXJseV92cnAgd2hl cmUgdmFsdWUgcmFuZ2UgcHJvcGFnYXRpb24KKyAgIGlzIGRvbmUgYnkgdmlz aXRpbmcgc3RtdHMgaW4gZG9taW5hdG9yIHRyZWUuICBzc2FfcHJvcGFnYXRl IGVuZ2luZQorICAgaXMgbm90IHVzZWQgaW4gdGhpcyBjYXNlIGFuZCB0aGF0 IHBhcnQgb2YgdGhlIGluaW5pdGlhbGl6YXRpb24gd2lsbAorICAgYmUgc2tp cHBlZC4gICovCisKK3N0YXRpYyB2b2lkCit2cnBfaW5pdGlhbGl6ZSAoKQor eworICBiYXNpY19ibG9jayBiYjsKIAogICBGT1JfRUFDSF9CQl9GTiAoYmIs IGNmdW4pCiAgICAgewpAQCAtODY5OCw3ICs4NzE2LDggQEAgdnJwX21lZXQg KHZhbHVlX3JhbmdlICp2cjAsIGNvbnN0IHZhbHVlX3JhbmdlICp2cjEpCiAg ICB2YWx1ZSByYW5nZXMsIHNldCBhIG5ldyByYW5nZSBpbiBWUl9SRVNVTFQu ICAqLwogCiBzdGF0aWMgdm9pZAotZXh0cmFjdF9yYW5nZV9mcm9tX3BoaV9u b2RlIChncGhpICpwaGksIHZhbHVlX3JhbmdlICp2cl9yZXN1bHQpCitleHRy YWN0X3JhbmdlX2Zyb21fcGhpX25vZGUgKGdwaGkgKnBoaSwgdmFsdWVfcmFu Z2UgKnZyX3Jlc3VsdCwKKwkJCSAgICAgYm9vbCBlYXJseV92cnBfcCkKIHsK ICAgc2l6ZV90IGk7CiAgIHRyZWUgbGhzID0gUEhJX1JFU1VMVCAocGhpKTsK QEAgLTg4MjEsNiArODg0MCw3IEBAIGV4dHJhY3RfcmFuZ2VfZnJvbV9waGlf bm9kZSAoZ3BoaSAqcGhpLCB2YWx1ZV9yYW5nZSAqdnJfcmVzdWx0KQogICAg ICB1c2UgdGhlIHVwZGF0ZWQgcmFuZ2UgYW5kIGl0ZXJhdGUgb25lIG1vcmUg dGltZS4gIElmIHdlIHdpbGwgbm90CiAgICAgIHNpbXVsYXRlIHRoaXMgUEhJ IGFnYWluIHZpYSB0aGUgYmFja2VkZ2UgYWxsb3cgdXMgdG8gaXRlcmF0ZS4g ICovCiAgIGlmIChlZGdlcyA+IDAKKyAgICAgICYmICFlYXJseV92cnBfcAog ICAgICAgJiYgZ2ltcGxlX3BoaV9udW1fYXJncyAocGhpKSA+IDEKICAgICAg ICYmIGVkZ2VzID09IG9sZF9lZGdlcwogICAgICAgJiYgbGhzX3ZyLT50eXBl ICE9IFZSX1VOREVGSU5FRApAQCAtODg4OCw3ICs4OTA4LDggQEAgc2Nldl9j aGVjazoKICAgICAgc2Nldl9jaGVjayBjYW4gYmUgcmVhY2hlZCBmcm9tIHR3 byBwYXRocywgb25lIGlzIGEgZmFsbCB0aHJvdWdoIGZyb20gYWJvdmUKICAg ICAgInZhcnlpbmciIGxhYmVsLCB0aGUgb3RoZXIgaXMgZGlyZWN0IGdvdG8g ZnJvbSBjb2RlIGJsb2NrIHdoaWNoIHRyaWVzIHRvCiAgICAgIGF2b2lkIGlu ZmluaXRlIHNpbXVsYXRpb24uICAqLwotICBpZiAoKGwgPSBsb29wX2NvbnRh aW5pbmdfc3RtdCAocGhpKSkKKyAgaWYgKCFlYXJseV92cnBfcAorICAgICAg JiYgKGwgPSBsb29wX2NvbnRhaW5pbmdfc3RtdCAocGhpKSkKICAgICAgICYm IGwtPmhlYWRlciA9PSBnaW1wbGVfYmIgKHBoaSkpCiAgICAgYWRqdXN0X3Jh bmdlX3dpdGhfc2NldiAodnJfcmVzdWx0LCBsLCBwaGksIGxocyk7CiAKQEAg LTg5MTgsNyArODkzOSw3IEBAIHZycF92aXNpdF9waGlfbm9kZSAoZ3BoaSAq cGhpKQogewogICB0cmVlIGxocyA9IFBISV9SRVNVTFQgKHBoaSk7CiAgIHZh bHVlX3JhbmdlIHZyX3Jlc3VsdCA9IFZSX0lOSVRJQUxJWkVSOwotICBleHRy YWN0X3JhbmdlX2Zyb21fcGhpX25vZGUgKHBoaSwgJnZyX3Jlc3VsdCk7Cisg IGV4dHJhY3RfcmFuZ2VfZnJvbV9waGlfbm9kZSAocGhpLCAmdnJfcmVzdWx0 LCBmYWxzZSk7CiAgIGlmICh1cGRhdGVfdmFsdWVfcmFuZ2UgKGxocywgJnZy X3Jlc3VsdCkpCiAgICAgewogICAgICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVt cF9mbGFncyAmIFRERl9ERVRBSUxTKSkKQEAgLTEwNTA1LDYgKzEwNTI2LDIy IEBAIGZpbmFsaXplX2p1bXBfdGhyZWFkcyAodm9pZCkKICAgZGVsZXRlIGVx dWl2X3N0YWNrOwogfQogCisvKiBGcmVlIFZSUCBsYXR0aWNlLiAgKi8KKwor c3RhdGljIHZvaWQKK3ZycF9mcmVlX2xhdHRpY2UgKCkKK3sKKyAgLyogRnJl ZSBhbGxvY2F0ZWQgbWVtb3J5LiAgKi8KKyAgZnJlZSAodnJfdmFsdWUpOwor ICBmcmVlICh2cl9waGlfZWRnZV9jb3VudHMpOworICBiaXRtYXBfb2JzdGFj a19yZWxlYXNlICgmdnJwX2VxdWl2X29ic3RhY2spOworICB2cnBfdmFsdWVf cmFuZ2VfcG9vbC5yZWxlYXNlICgpOworCisgIC8qIFNvIHRoYXQgd2UgY2Fu IGRpc3Rpbmd1aXNoIGJldHdlZW4gVlJQIGRhdGEgYmVpbmcgYXZhaWxhYmxl CisgICAgIGFuZCBub3QgYXZhaWxhYmxlLiAgKi8KKyAgdnJfdmFsdWUgPSBO VUxMOworICB2cl9waGlfZWRnZV9jb3VudHMgPSBOVUxMOworfQogCiAvKiBU cmF2ZXJzZSBhbGwgdGhlIGJsb2NrcyBmb2xkaW5nIGNvbmRpdGlvbmFscyB3 aXRoIGtub3duIHJhbmdlcy4gICovCiAKQEAgLTEwNTUxLDE3ICsxMDU4OCwy NzEgQEAgdnJwX2ZpbmFsaXplIChib29sIHdhcm5fYXJyYXlfYm91bmRzX3Ap CiAgIC8qIFdlIG11c3QgaWRlbnRpZnkganVtcCB0aHJlYWRpbmcgb3Bwb3J0 dW5pdGllcyBiZWZvcmUgd2UgcmVsZWFzZQogICAgICB0aGUgZGF0YXN0cnVj dHVyZXMgYnVpbHQgYnkgVlJQLiAgKi8KICAgaWRlbnRpZnlfanVtcF90aHJl YWRzICgpOworfQogCi0gIC8qIEZyZWUgYWxsb2NhdGVkIG1lbW9yeS4gICov Ci0gIGZyZWUgKHZyX3ZhbHVlKTsKLSAgZnJlZSAodnJfcGhpX2VkZ2VfY291 bnRzKTsKLSAgYml0bWFwX29ic3RhY2tfcmVsZWFzZSAoJnZycF9lcXVpdl9v YnN0YWNrKTsKLSAgdnJwX3ZhbHVlX3JhbmdlX3Bvb2wucmVsZWFzZSAoKTsK Ky8qIENoZWNrIHRvIHNlZSBpZiB0aGUgUEhJIHN0bXQgaGFzIGFueSBiYWNr IGVkZ2VzIHRhaHQgaXMgbm90IHZpc2l0ZWQgeWV0CisgICAoQ2lyY3VsYXIg ZGVwZW5kYW5jeSkuICBJbiBkb21pbmF0b3IgYmFzZWQgVlJQLCBpZiB3ZSBo YXZlIGJhY2stZWRnZXMsCisgICB3ZSB3aWxsIGhhdmUgU1NBX05BTUUgb3Bl cmFuZHMgd2l0aCBWUl9VTkRFRklORUQgdmFsdWUgcmFuZ2UuICovCiAKLSAg LyogU28gdGhhdCB3ZSBjYW4gZGlzdGluZ3Vpc2ggYmV0d2VlbiBWUlAgZGF0 YSBiZWluZyBhdmFpbGFibGUKLSAgICAgYW5kIG5vdCBhdmFpbGFibGUuICAq LwotICB2cl92YWx1ZSA9IE5VTEw7Ci0gIHZyX3BoaV9lZGdlX2NvdW50cyA9 IE5VTEw7CitzdGF0aWMgYm9vbAorc3RtdF92aXNpdF9waGlfbm9kZV9pbl9k b21fcCAoZ3BoaSAqcGhpKQoreworICBzc2Ffb3BfaXRlciBpdGVyOworICB1 c2Vfb3BlcmFuZF9wIG9wcm5kOworICB0cmVlIG9wOworICB2YWx1ZV9yYW5n ZSAqdnI7CisgIEZPUl9FQUNIX1BISV9BUkcgKG9wcm5kLCBwaGksIGl0ZXIs IFNTQV9PUF9VU0UpCisgICAgeworICAgICAgb3AgPSBVU0VfRlJPTV9QVFIg KG9wcm5kKTsKKyAgICAgIGlmIChUUkVFX0NPREUgKG9wKSA9PSBTU0FfTkFN RSkKKwl7CisJICB2ciA9IGdldF92YWx1ZV9yYW5nZSAob3ApOworCSAgaWYg KHZyLT50eXBlID09IFZSX1VOREVGSU5FRCkKKwkgICAgcmV0dXJuIGZhbHNl OworCX0KKyAgICB9CisgIHJldHVybiB0cnVlOworfQorCisvKiBldnJwX2Rv bV93YWxrZXIgdmlzaXRzIHRoZSBiYXNpYyBibG9ja3MgaW4gdGhlIGRvbWlu YW5jZSBvcmRlciBhbmQgc2V0CisgICB0aGUgVmFsdWUgUmFuZ2VzIChWUikg Zm9yIFNTQV9OQU1FcyBpbiB0aGUgc2NvcGUuICBVc2UgdGhpcyBWUiB0bwor ICAgZGlzY292ZXIgbW9yZSBWUnMuICAqLworCitjbGFzcyBldnJwX2RvbV93 YWxrZXIgOiBwdWJsaWMgZG9tX3dhbGtlcgoreworcHVibGljOgorICBldnJw X2RvbV93YWxrZXIgKCkKKyAgICA6IGRvbV93YWxrZXIgKENESV9ET01JTkFU T1JTKSwgc3RhY2sgKDEwKSB7fQorICB2aXJ0dWFsIGVkZ2UgYmVmb3JlX2Rv bV9jaGlsZHJlbiAoYmFzaWNfYmxvY2spOworICB2aXJ0dWFsIHZvaWQgYWZ0 ZXJfZG9tX2NoaWxkcmVuIChiYXNpY19ibG9jayk7CisgIHZvaWQgcHVzaF92 YWx1ZV9yYW5nZSAoY29uc3RfdHJlZSB2YXIsIHZhbHVlX3JhbmdlICp2cik7 CisgIHZhbHVlX3JhbmdlICpwb3BfdmFsdWVfcmFuZ2UgKGNvbnN0X3RyZWUg dmFyKTsKKworICAvKiBDb25kX3N0YWNrIGhvbGRzIHRoZSBvbGQgVlIuICAq LworICBhdXRvX3ZlYzxzdGQ6OnBhaXIgPGNvbnN0X3RyZWUsIHZhbHVlX3Jh bmdlKj4gPiBzdGFjazsKK307CisKKy8qIFJldHVybiB0aGUgc2luZ2xldG9u IHZhbHVlLXJhbmdlIGZvciBOQU1FIG9yIE5BTUUuICAqLworCitzdGF0aWMg aW5saW5lIHRyZWUKK2V2cnBfdmFsdWVpemUgKHRyZWUgbmFtZSkKK3sKKyAg aWYgKFRSRUVfQ09ERSAobmFtZSkgPT0gU1NBX05BTUUpCisgICAgeworICAg ICAgdmFsdWVfcmFuZ2UgKnZyID0gZ2V0X3ZhbHVlX3JhbmdlIChuYW1lKTsK KyAgICAgIGlmICh2ci0+dHlwZSA9PSBWUl9SQU5HRQorCSAgJiYgKHJhbmdl X2ludF9jc3RfcCAodnIpCisJICAgICAgfHwgKFRSRUVfQ09ERSAodnItPm1p bikgPT0gU1NBX05BTUUpKQorCSAgJiYgdnJwX29wZXJhbmRfZXF1YWxfcCAo dnItPm1pbiwgdnItPm1heCkpCisJcmV0dXJuIHZyLT5taW47CisgICAgfQor ICByZXR1cm4gbmFtZTsKK30KKworLyogU2VlIGlmIHRoZXJlIGlzIGFueSBu ZXcgc2NvcGUgaXMgZW50ZXJlZCB3aXRoIG5ldyBWUiBhbmQgc2V0IHRoYXQg VlIgdG8KKyAgIHNzYV9uYW1lIGJlZm9yZSB2aXNpdGluZyB0aGUgc3RhdGVt ZW50cyBpbiB0aGUgc2NvcGUuICAqLworCitlZGdlCitldnJwX2RvbV93YWxr ZXI6OmJlZm9yZV9kb21fY2hpbGRyZW4gKGJhc2ljX2Jsb2NrIGJiKQorewor ICB2YWx1ZV9yYW5nZSAqbmV3X3ZyID0gTlVMTDsKKyAgdHJlZSBvcDAgPSBO VUxMX1RSRUU7CisgIHB1c2hfdmFsdWVfcmFuZ2UgKE5VTExfVFJFRSwgTlVM TCk7CisgIGlmIChzaW5nbGVfcHJlZF9wIChiYikpCisgICAgeworICAgICAg ZWRnZSBlID0gc2luZ2xlX3ByZWRfZWRnZSAoYmIpOworICAgICAgdmFsdWVf cmFuZ2UgdnIgPSBWUl9JTklUSUFMSVpFUjsKKyAgICAgIGdpbXBsZSAqc3Rt dCA9IGxhc3Rfc3RtdCAoZS0+c3JjKTsKKyAgICAgIGlmIChzdG10CisJICAm JiBnaW1wbGVfY29kZSAoc3RtdCkgPT0gR0lNUExFX0NPTkQKKwkgICYmIChv cDAgPSBnaW1wbGVfY29uZF9saHMgKHN0bXQpKQorCSAgJiYgVFJFRV9DT0RF IChvcDApID09IFNTQV9OQU1FCisJICAmJiBJTlRFR1JBTF9UWVBFX1AgKFRS RUVfVFlQRSAoZ2ltcGxlX2NvbmRfbGhzIChzdG10KSkpKQorCXsKKwkgIC8q IEVudGVyaW5nIGEgbmV3IHNjb3BlLiAgVHJ5IHRvIHNlZSBpZiB3ZSBjYW4g ZmluZCBhIFZSCisJICAgICBoZXJlLiAgKi8KKwkgIHRyZWUgb3AxID0gZ2lt cGxlX2NvbmRfcmhzIChzdG10KTsKKwkgIHRyZWVfY29kZSBjb2RlID0gZ2lt cGxlX2NvbmRfY29kZSAoc3RtdCk7CisJICB2YWx1ZV9yYW5nZSAqb2xkX3Zy ID0gZ2V0X3ZhbHVlX3JhbmdlIChvcDApOworCisJICBpZiAoVFJFRV9PVkVS RkxPV19QIChvcDEpKQorCSAgICBvcDEgPSBkcm9wX3RyZWVfb3ZlcmZsb3cg KG9wMSk7CisKKwkgIC8qIElmIGNvbmRpdGlvbiBpcyBmYWxzZSwgaW52ZXJ0 IHRoZSBjb25kLiAgKi8KKwkgIGlmIChlLT5mbGFncyAmIEVER0VfRkFMU0Vf VkFMVUUpCisJICAgIGNvZGUgPSBpbnZlcnRfdHJlZV9jb21wYXJpc29uIChn aW1wbGVfY29uZF9jb2RlIChzdG10KSwKKwkJCQkJICAgSE9OT1JfTkFOUyAo b3AwKSk7CisJICAvKiBEaXNjb3ZlciBWUiB3aGVuIGNvbmRpdGlvbiBpcyB0 cnVlLiAgKi8KKwkgIGV4dHJhY3RfcmFuZ2VfZm9yX3Zhcl9mcm9tX2NvbXBh cmlzb25fZXhwciAob3AwLCBjb2RlLCBvcDAsIG9wMSwgJnZyKTsKKwkgIGlm IChvbGRfdnItPnR5cGUgPT0gVlJfUkFOR0UgfHwgb2xkX3ZyLT50eXBlID09 IFZSX0FOVElfUkFOR0UpCisJICAgIHZycF9pbnRlcnNlY3RfcmFuZ2VzICgm dnIsIG9sZF92cik7CisKKwkgIC8qIElmIHdlIGZvdW5kIGFueSB1c2FibGUg VlIsIHNldCB0aGUgVlIgdG8gc3NhX25hbWUgYW5kIGNyZWF0ZSBhCisJICAg ICBQVVNIIG9sZCB2YWx1ZSBpbiB0aGUgc3RhY2sgd2l0aCB0aGUgb2xkIFZS LiAgKi8KKwkgIGlmICh2ci50eXBlID09IFZSX1JBTkdFIHx8IHZyLnR5cGUg PT0gVlJfQU5USV9SQU5HRSkKKwkgICAgeworCSAgICAgIG5ld192ciA9IHZy cF92YWx1ZV9yYW5nZV9wb29sLmFsbG9jYXRlICgpOworCSAgICAgICpuZXdf dnIgPSB2cjsKKwkgICAgICBwdXNoX3ZhbHVlX3JhbmdlIChvcDAsIG5ld192 cik7CisJICAgIH0KKwl9CisgICAgfQorCisgIC8qIFZpc2l0IFBISSBzdG10 cyBhbmQgZGlzY292ZXIgYW55IG5ldyBWUnMgcG9zc2libGUuICAqLworICBn aW1wbGVfc3RtdF9pdGVyYXRvciBnc2k7CisgIGZvciAoZ3BoaV9pdGVyYXRv ciBncGkgPSBnc2lfc3RhcnRfcGhpcyAoYmIpOworICAgICAgICFnc2lfZW5k X3AgKGdwaSk7IGdzaV9uZXh0ICgmZ3BpKSkKKyAgICB7CisgICAgICBncGhp ICpwaGkgPSBncGkucGhpICgpOworICAgICAgdHJlZSBsaHMgPSBQSElfUkVT VUxUIChwaGkpOworICAgICAgdmFsdWVfcmFuZ2UgdnJfcmVzdWx0ID0gVlJf SU5JVElBTElaRVI7CisgICAgICBpZiAoc3RtdF9pbnRlcmVzdGluZ19mb3Jf dnJwIChwaGkpCisJICAmJiBzdG10X3Zpc2l0X3BoaV9ub2RlX2luX2RvbV9w IChwaGkpKQorCWV4dHJhY3RfcmFuZ2VfZnJvbV9waGlfbm9kZSAocGhpLCAm dnJfcmVzdWx0LCB0cnVlKTsKKyAgICAgIGVsc2UKKwlzZXRfdmFsdWVfcmFu Z2VfdG9fdmFyeWluZyAoJnZyX3Jlc3VsdCk7CisgICAgICB1cGRhdGVfdmFs dWVfcmFuZ2UgKGxocywgJnZyX3Jlc3VsdCk7CisgICAgfQorCisgIC8qIFZp c2l0IGFsbCBvdGhlciBzdG10cyBhbmQgZGlzY292ZXIgYW55IG5ldyBWUnMg cG9zc2libGUuICAqLworICBmb3IgKGdzaSA9IGdzaV9zdGFydF9iYiAoYmIp OyAhZ3NpX2VuZF9wIChnc2kpOyBnc2lfbmV4dCAoJmdzaSkpCisgICAgewor ICAgICAgZ2ltcGxlICpzdG10ID0gZ3NpX3N0bXQgKGdzaSk7CisgICAgICBl ZGdlIHRha2VuX2VkZ2U7CisgICAgICB0cmVlIG91dHB1dCA9IE5VTExfVFJF RTsKKyAgICAgIC8qIFRPRE8sIGlmIGZvdW5kIHRha2VuX2VkZ2UsIHdlIHNo b3VsZCB2aXNpdCAocmV0dXJuIGl0KSBhbmQgdHJhdmVsCisJIGFnYWluIHRv IGltcHJvdmUgVlIgYXMgZG9uZSBpbiBET00vU0NDVk4gb3B0aW1pemF0aW9u cy4gIEl0IHNob3VsZAorCSBiZSBkb25lIGNhcmVmdWxseSBhcyBzdG10cyBt aWdodCBwcmVtYXR1cmVseSBsZWF2ZSBhIEJCIGxpa2UKKwkgaW4gRUguICAq LworICAgICAgaWYgKHN0bXRfaW50ZXJlc3RpbmdfZm9yX3ZycCAoc3RtdCkp CisJeworCSAgdmFsdWVfcmFuZ2UgdnIgPSBWUl9JTklUSUFMSVpFUjsKKwkg IGV4dHJhY3RfcmFuZ2VfZnJvbV9zdG10IChzdG10LCAmdGFrZW5fZWRnZSwg Jm91dHB1dCwgJnZyKTsKKwkgIGlmIChvdXRwdXQpCisJICAgIHVwZGF0ZV92 YWx1ZV9yYW5nZSAob3V0cHV0LCAmdnIpOworCisJICAvKiBUcnkgZm9sZGlu ZyBzdG10cyB3aXRoIHRoZSBWUiBkaXNjb3ZlcmVkLiAgKi8KKwkgIGJvb2wg ZGlkX3JlcGxhY2UgPSByZXBsYWNlX3VzZXNfaW4gKHN0bXQsIGV2cnBfdmFs dWVpemUpOworCSAgaWYgKGZvbGRfc3RtdCAoJmdzaSwgZm9sbG93X3Npbmds ZV91c2VfZWRnZXMpCisJICAgICAgfHwgZGlkX3JlcGxhY2UpCisJICAgIHVw ZGF0ZV9zdG10IChnc2lfc3RtdCAoZ3NpKSk7CisKKwkgIGlmIChkaWRfcmVw bGFjZQorCSAgICAgICYmIGdpbXBsZV9hc3NpZ25fc2luZ2xlX3AgKHN0bXQp KQorCSAgICB7CisJICAgICAgdHJlZSByaHMgPSBnaW1wbGVfYXNzaWduX3Jo czEgKHN0bXQpOworCisJICAgICAgaWYgKFRSRUVfQ09ERSAocmhzKSA9PSBB RERSX0VYUFIpCisJCXJlY29tcHV0ZV90cmVlX2ludmFyaWFudF9mb3JfYWRk cl9leHByIChyaHMpOworCSAgICB9CisKKwkgIGRlZl9vcGVyYW5kX3AgZGVm X3AgPSBTSU5HTEVfU1NBX0RFRl9PUEVSQU5EIChzdG10LCBTU0FfT1BfREVG KTsKKwkgIC8qIFNldCB0aGUgU1NBIHdpdGggdGhlIHZhbHVlIHJhbmdlLiAg Ki8KKwkgIGlmIChkZWZfcAorCSAgICAgICYmIFRSRUVfQ09ERSAoREVGX0ZS T01fUFRSIChkZWZfcCkpID09IFNTQV9OQU1FCisJICAgICAgJiYgSU5URUdS QUxfVFlQRV9QIChUUkVFX1RZUEUgKERFRl9GUk9NX1BUUiAoZGVmX3ApKSkp CisJICAgIHsKKwkgICAgICB0cmVlIGRlZiA9IERFRl9GUk9NX1BUUiAoZGVm X3ApOworCSAgICAgIHVuc2lnbmVkIHZlciA9IFNTQV9OQU1FX1ZFUlNJT04g KGRlZik7CisJICAgICAgaWYgKCh2cl92YWx1ZVt2ZXJdLT50eXBlID09IFZS X1JBTkdFCisJCSAgIHx8IHZyX3ZhbHVlW3Zlcl0tPnR5cGUgPT0gVlJfQU5U SV9SQU5HRSkKKwkJICAmJiAoVFJFRV9DT0RFICh2cl92YWx1ZVt2ZXJdLT5t aW4pID09IElOVEVHRVJfQ1NUKQorCQkgICYmIChUUkVFX0NPREUgKHZyX3Zh bHVlW3Zlcl0tPm1heCkgPT0gSU5URUdFUl9DU1QpKQorCQlzZXRfcmFuZ2Vf aW5mbyAoZGVmLCB2cl92YWx1ZVt2ZXJdLT50eXBlLCB2cl92YWx1ZVt2ZXJd LT5taW4sCisJCQkJdnJfdmFsdWVbdmVyXS0+bWF4KTsKKwkgICAgfQorCX0K KyAgICAgIGVsc2UKKwl7CisJICB0cmVlIGRlZjsKKwkgIHNzYV9vcF9pdGVy IGl0ZXI7CisJICBGT1JfRUFDSF9TU0FfVFJFRV9PUEVSQU5EIChkZWYsIHN0 bXQsIGl0ZXIsIFNTQV9PUF9ERUYpCisJICAgIHNldF92YWx1ZV9yYW5nZV90 b192YXJ5aW5nIChnZXRfdmFsdWVfcmFuZ2UgKGRlZikpOworCX0KKyAgICB9 CisgIHJldHVybiBOVUxMOworfQorCisvKiBSZXN0b3JlL3BvcCBWUnMgdmFs aWQgb25seSBmb3IgQkIgd2hlbiB3ZSBsZWF2ZSBCQi4gICovCisKK3ZvaWQK K2V2cnBfZG9tX3dhbGtlcjo6YWZ0ZXJfZG9tX2NoaWxkcmVuIChiYXNpY19i bG9jayBiYiBBVFRSSUJVVEVfVU5VU0VEKQoreworICBnY2NfY2hlY2tpbmdf YXNzZXJ0ICghc3RhY2suaXNfZW1wdHkgKCkpOworICB3aGlsZSAoc3RhY2su bGFzdCAoKS5maXJzdCAhPSBOVUxMX1RSRUUpCisgICAgcG9wX3ZhbHVlX3Jh bmdlIChzdGFjay5sYXN0ICgpLmZpcnN0KTsKKyAgcG9wX3ZhbHVlX3Jhbmdl IChzdGFjay5sYXN0ICgpLmZpcnN0KTsKK30KKworLyogUHVzaCB0aGUgVmFs dWUgUmFuZ2Ugb2YgVkFSIHRvIHRoZSBzdGFjayBhbmQgdXBkYXRlIGl0IHdp dGggbmV3IFZSLiAgKi8KKwordm9pZAorZXZycF9kb21fd2Fsa2VyOjpwdXNo X3ZhbHVlX3JhbmdlIChjb25zdF90cmVlIHZhciwgdmFsdWVfcmFuZ2UgKnZy KQoreworICBpZiAodnIgIT0gTlVMTCkKKyAgICB7CisgICAgICB1bnNpZ25l ZCB2ZXIgPSBTU0FfTkFNRV9WRVJTSU9OICh2YXIpOworICAgICAgZ2NjX2No ZWNraW5nX2Fzc2VydCAodnJfdmFsdWUpOworICAgICAgc3RhY2suc2FmZV9w dXNoIChzdGQ6Om1ha2VfcGFpciAodmFyLCB2cl92YWx1ZVt2ZXJdKSk7CisK KyAgICAgIGlmICh2ZXIgPCBudW1fdnJfdmFsdWVzKQorCXZyX3ZhbHVlW3Zl cl0gPSB2cjsKKyAgICB9CisgIGVsc2UKKyAgICBzdGFjay5zYWZlX3B1c2gg KHN0ZDo6bWFrZV9wYWlyICh2YXIsIHZyKSk7Cit9CisKKy8qIFBvcCB0aGUg VmFsdWUgUmFuZ2UgZnJvbSB0aGUgdnJwX3N0YWNrIGFuZCB1cGRhdGUgVkFS IHdpdGggaXQuICAqLworCit2YWx1ZV9yYW5nZSAqCitldnJwX2RvbV93YWxr ZXI6OnBvcF92YWx1ZV9yYW5nZSAoY29uc3RfdHJlZSB2YXIpCit7CisgIHZh bHVlX3JhbmdlICp2ciA9IHN0YWNrLmxhc3QgKCkuc2Vjb25kOworICBpZiAo dnIgIT0gTlVMTCkKKyAgICB7CisgICAgICB1bnNpZ25lZCB2ZXIgPSBTU0Ff TkFNRV9WRVJTSU9OICh2YXIpOworICAgICAgZ2NjX2NoZWNraW5nX2Fzc2Vy dCAodmFyID09IHN0YWNrLmxhc3QgKCkuZmlyc3QpOworICAgICAgZ2NjX2No ZWNraW5nX2Fzc2VydCAodnJfdmFsdWUpOworCisgICAgICBpZiAodmVyIDwg bnVtX3ZyX3ZhbHVlcykKKwl2cl92YWx1ZVt2ZXJdID0gdnI7CisgICAgfQor ICBzdGFjay5wb3AgKCk7CisgIHJldHVybiB2cjsKK30KKworCisvKiBNYWlu IGVudHJ5IHBvaW50IGZvciB0aGUgZWFybHkgdnJwIHBhc3Mgd2hpY2ggaXMg YSBzaW1wbGlmaWVkIG5vbi1pdGVyYXRpdmUKKyAgIHZlcnNpb24gb2YgVlJQ IHdoZXJlIGJhc2ljIGJsb2NrcyBhcmUgdmlzaXRlZCBpbiBkb21pbmFuY2Ug b3JkZXIuICBWYWx1ZQorICAgcmFuZ2VzIGRpc2NvdmVyZWQgaW4gZWFybHkg dnJwIHdpbGwgYWxzbyBiZSB1c2VkIGJ5IGlwYS12cnAuICAqLworCitzdGF0 aWMgdW5zaWduZWQgaW50CitleGVjdXRlX2Vhcmx5X3ZycCAoKQoreworICBl ZGdlIGU7CisgIGVkZ2VfaXRlcmF0b3IgZWk7CisgIGJhc2ljX2Jsb2NrIGJi OworCisgIGNhbGN1bGF0ZV9kb21pbmFuY2VfaW5mbyAoQ0RJX0RPTUlOQVRP UlMpOworICBGT1JfRUFDSF9CQl9GTiAoYmIsIGNmdW4pCisgICAgeworICAg ICAgRk9SX0VBQ0hfRURHRSAoZSwgZWksIGJiLT5wcmVkcykKKwllLT5mbGFn cyB8PSBFREdFX0VYRUNVVEFCTEU7CisgICAgfQorICB2cnBfaW5pdGlhbGl6 ZV9sYXR0aWNlICgpOworCisgIC8qIFdhbGsgc3RtdHMgaW4gZG9taW5hbmNl IG9yZGVyIGFuZCBwcm9wYWdhdGUgVlJQLiAgKi8KKyAgZXZycF9kb21fd2Fs a2VyIHdhbGtlcjsKKyAgd2Fsa2VyLndhbGsgKEVOVFJZX0JMT0NLX1BUUl9G T1JfRk4gKGNmdW4pKTsKKworICBpZiAoZHVtcF9maWxlKQorICAgIHsKKyAg ICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIlxuVmFsdWUgcmFuZ2VzIGFmdGVy IEVhcmx5IFZSUDpcblxuIik7CisgICAgICBkdW1wX2FsbF92YWx1ZV9yYW5n ZXMgKGR1bXBfZmlsZSk7CisgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJc biIpOworICAgIH0KKyAgdnJwX2ZyZWVfbGF0dGljZSAoKTsKKyAgcmV0dXJu IDA7CiB9CiAKIApAQCAtMTA2MzIsOSArMTA5MjMsMTEgQEAgZXhlY3V0ZV92 cnAgKGJvb2wgd2Fybl9hcnJheV9ib3VuZHNfcCkKICAgLyogRm9yIHZpc2l0 aW5nIFBISSBub2RlcyB3ZSBuZWVkIEVER0VfREZTX0JBQ0sgY29tcHV0ZWQu ICAqLwogICBtYXJrX2Rmc19iYWNrX2VkZ2VzICgpOwogCisgIHZycF9pbml0 aWFsaXplX2xhdHRpY2UgKCk7CiAgIHZycF9pbml0aWFsaXplICgpOwogICBz c2FfcHJvcGFnYXRlICh2cnBfdmlzaXRfc3RtdCwgdnJwX3Zpc2l0X3BoaV9u b2RlKTsKICAgdnJwX2ZpbmFsaXplICh3YXJuX2FycmF5X2JvdW5kc19wKTsK KyAgdnJwX2ZyZWVfbGF0dGljZSAoKTsKIAogICBmcmVlX251bWJlcnNfb2Zf aXRlcmF0aW9uc19lc3RpbWF0ZXMgKGNmdW4pOwogCkBAIC0xMDczMiwzICsx MTAyNSw0NCBAQCBtYWtlX3Bhc3NfdnJwIChnY2M6OmNvbnRleHQgKmN0eHQp CiB7CiAgIHJldHVybiBuZXcgcGFzc192cnAgKGN0eHQpOwogfQorCituYW1l c3BhY2UgeworCitjb25zdCBwYXNzX2RhdGEgcGFzc19kYXRhX2Vhcmx5X3Zy cCA9Cit7CisgIEdJTVBMRV9QQVNTLCAvKiB0eXBlICovCisgICJldnJwIiwg LyogbmFtZSAqLworICBPUFRHUk9VUF9OT05FLCAvKiBvcHRpbmZvX2ZsYWdz ICovCisgIFRWX1RSRUVfRUFSTFlfVlJQLCAvKiB0dl9pZCAqLworICBQUk9Q X3NzYSwgLyogcHJvcGVydGllc19yZXF1aXJlZCAqLworICAwLCAvKiBwcm9w ZXJ0aWVzX3Byb3ZpZGVkICovCisgIDAsIC8qIHByb3BlcnRpZXNfZGVzdHJv eWVkICovCisgIDAsIC8qIHRvZG9fZmxhZ3Nfc3RhcnQgKi8KKyAgKCBUT0RP X2NsZWFudXBfY2ZnIHwgVE9ET191cGRhdGVfc3NhIHwgVE9ET192ZXJpZnlf YWxsICksCit9OworCitjbGFzcyBwYXNzX2Vhcmx5X3ZycCA6IHB1YmxpYyBn aW1wbGVfb3B0X3Bhc3MKK3sKK3B1YmxpYzoKKyAgcGFzc19lYXJseV92cnAg KGdjYzo6Y29udGV4dCAqY3R4dCkKKyAgICA6IGdpbXBsZV9vcHRfcGFzcyAo cGFzc19kYXRhX2Vhcmx5X3ZycCwgY3R4dCkKKyAgICB7fQorCisgIC8qIG9w dF9wYXNzIG1ldGhvZHM6ICovCisgIG9wdF9wYXNzICogY2xvbmUgKCkgeyBy ZXR1cm4gbmV3IHBhc3NfZWFybHlfdnJwIChtX2N0eHQpOyB9CisgIHZpcnR1 YWwgYm9vbCBnYXRlIChmdW5jdGlvbiAqKQorICAgIHsKKyAgICAgIHJldHVy biBmbGFnX3RyZWVfdnJwICE9IDA7CisgICAgfQorICB2aXJ0dWFsIHVuc2ln bmVkIGludCBleGVjdXRlIChmdW5jdGlvbiAqKQorICAgIHsgcmV0dXJuIGV4 ZWN1dGVfZWFybHlfdnJwICgpOyB9CisKK307IC8vIGNsYXNzIHBhc3NfdnJw Cit9IC8vIGFub24gbmFtZXNwYWNlCisKK2dpbXBsZV9vcHRfcGFzcyAqCitt YWtlX3Bhc3NfZWFybHlfdnJwIChnY2M6OmNvbnRleHQgKmN0eHQpCit7Cisg IHJldHVybiBuZXcgcGFzc19lYXJseV92cnAgKGN0eHQpOworfQorCg== --001a1141549e76f68c053ab3b001--