From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 71159 invoked by alias); 1 Jun 2015 10:46:27 -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 71150 invoked by uid 89); 1 Jun 2015 10:46:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.5 required=5.0 tests=AWL,BAYES_50,FREEMAIL_FROM,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-ob0-f180.google.com Received: from mail-ob0-f180.google.com (HELO mail-ob0-f180.google.com) (209.85.214.180) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Mon, 01 Jun 2015 10:46:24 +0000 Received: by obbnx5 with SMTP id nx5so99767384obb.0 for ; Mon, 01 Jun 2015 03:46:22 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.60.55.36 with SMTP id o4mr17711744oep.0.1433155582496; Mon, 01 Jun 2015 03:46:22 -0700 (PDT) Received: by 10.76.134.100 with HTTP; Mon, 1 Jun 2015 03:46:22 -0700 (PDT) In-Reply-To: References: Date: Mon, 01 Jun 2015 10:46:00 -0000 Message-ID: Subject: Re: [PATCH GCC]Improve overflow in scev by using information computed in loop niter, part II From: "Bin.Cheng" To: Richard Biener Cc: gcc-patches List Content-Type: multipart/mixed; boundary=089e013a1a5c673cea05177289ac X-IsSubscribed: yes X-SW-Source: 2015-06/txt/msg00038.txt.bz2 --089e013a1a5c673cea05177289ac Content-Type: text/plain; charset=UTF-8 Content-length: 2330 On Mon, Jun 1, 2015 at 6:41 PM, Richard Biener wrote: > On Tue, May 26, 2015 at 1:13 PM, Bin.Cheng wrote: >> Hi, >> The first part patch improving how we handle overflow in scev is >> posted at https://gcc.gnu.org/ml/gcc-patches/2015-05/msg01795.html . >> Here comes the second part patch. >> >> This patch does below improvements: >> 1) Computes and records control iv for each loop's exit edge. This >> provides a way to compute overflow information in loop niter and use >> it in different customers. It think it's useful, especially with >> option -funsafe-loop-optimizers. >> 2) Improve chrec_convert by adding new interface >> loop_exits_before_overflow. It checks if a converted IV overflows >> wrto its type and loop using overflow information of loop's control >> iv. This basically propagates no-overflow information from control iv >> to ivs converted from control iv. Moreover, we can further improve >> the logic by using possible VRP information in the future. >> >> With this patch, cases like scev-9.c and scev-10.c in patch can be >> handled now. Cases reported in PR48052 can be vectorized too. >> Opinions? > > -ENOPATCH Here comes the patch. Sorry for the inconvenience. Thanks, bin > >> Thanks, >> bin >> >> >> 2015-05-26 Bin Cheng >> >> * cfgloop.h (struct control_iv): New. >> (struct loop): New field control_ivs. >> * tree-ssa-loop-niter.c : Include "stor-layout.h". >> (number_of_iterations_lt): Set no_overflow information. >> (number_of_iterations_exit): Init control iv in niter struct. >> (record_control_iv): New. >> (estimate_numbers_of_iterations_loop): Call record_control_iv. >> (loop_exits_before_overflow): New. Interface factored out of >> scev_probably_wraps_p. >> (scev_probably_wraps_p): Factor loop niter related code into >> loop_exits_before_overflow. >> (free_numbers_of_iterations_estimates_loop): Free control ivs. >> * tree-ssa-loop-niter.h (free_loop_control_ivs): New. >> >> gcc/testsuite/ChangeLog >> 2015-05-26 Bin Cheng >> >> PR tree-optimization/48052 >> * gcc.dg/tree-ssa/scev-8.c: New. >> * gcc.dg/tree-ssa/scev-9.c: New. >> * gcc.dg/tree-ssa/scev-10.c: New. >> * gcc.dg/vect/pr48052.c: New. --089e013a1a5c673cea05177289ac Content-Type: text/plain; charset=US-ASCII; name="improve-overlow-in-loop_niter-scev-20150526.txt" Content-Disposition: attachment; filename="improve-overlow-in-loop_niter-scev-20150526.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iadrtsrn0 Content-length: 22648 SW5kZXg6IGdjYy90cmVlLXNzYS1sb29wLW5pdGVyLmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gZ2NjL3RyZWUtc3NhLWxvb3Atbml0ZXIuYwkocmV2 aXNpb24gMjIyNzU4KQorKysgZ2NjL3RyZWUtc3NhLWxvb3Atbml0ZXIuYwko d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQCBhbG9uZyB3aXRoIEdD Qzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1 ZGUgIndpZGUtaW50LmgiCiAjaW5jbHVkZSAiaW5jaGFzaC5oIgogI2luY2x1 ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJzdG9yLWxheW91dC5oIgogI2luY2x1 ZGUgImZvbGQtY29uc3QuaCIKICNpbmNsdWRlICJjYWxscy5oIgogI2luY2x1 ZGUgImhhc2h0YWIuaCIKQEAgLTExODQsNiArMTE4NSw3IEBAIG51bWJlcl9v Zl9pdGVyYXRpb25zX2x0ICh0cmVlIHR5cGUsIGFmZmluZV9pdiAqaXYwCiAg ICAgICBuaXRlci0+bml0ZXIgPSBkZWx0YTsKICAgICAgIG5pdGVyLT5tYXgg PSB3aWRlc3RfaW50Ojpmcm9tICh3aTo6ZnJvbV9tcHogKG5pdGVyX3R5cGUs IGJuZHMtPnVwLCBmYWxzZSksCiAJCQkJICAgICBUWVBFX1NJR04gKG5pdGVy X3R5cGUpKTsKKyAgICAgIG5pdGVyLT5jb250cm9sLm5vX292ZXJmbG93ID0g dHJ1ZTsKICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTk2NSw2 ICsxOTY3LDkgQEAgbnVtYmVyX29mX2l0ZXJhdGlvbnNfZXhpdCAoc3RydWN0 IGxvb3AgKmxvb3AsIGVkZ2UKICAgICByZXR1cm4gZmFsc2U7CiAKICAgbml0 ZXItPmFzc3VtcHRpb25zID0gYm9vbGVhbl9mYWxzZV9ub2RlOworICBuaXRl ci0+Y29udHJvbC5iYXNlID0gTlVMTF9UUkVFOworICBuaXRlci0+Y29udHJv bC5zdGVwID0gTlVMTF9UUkVFOworICBuaXRlci0+Y29udHJvbC5ub19vdmVy ZmxvdyA9IGZhbHNlOwogICBsYXN0ID0gbGFzdF9zdG10IChleGl0LT5zcmMp OwogICBpZiAoIWxhc3QpCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjc0NCw2 ICsyNzQ5LDI5IEBAIHJlY29yZF9lc3RpbWF0ZSAoc3RydWN0IGxvb3AgKmxv b3AsIHRyZWUgYm91bmQsIGNvCiAgIHJlY29yZF9uaXRlcl9ib3VuZCAobG9v cCwgbmV3X2lfYm91bmQsIHJlYWxpc3RpYywgdXBwZXIpOwogfQogCisvKiBS ZWNvcmRzIHRoZSBjb250cm9sIGl2IGFuYWx5emVkIGluIE5JVEVSIGZvciBM T09QIGlmIHRoZSBpdiBpcyB2YWxpZAorICAgYW5kIGRvZXNuJ3Qgb3ZlcmZs b3cuICAqLworCitzdGF0aWMgdm9pZAorcmVjb3JkX2NvbnRyb2xfaXYgKHN0 cnVjdCBsb29wICpsb29wLCBzdHJ1Y3QgdHJlZV9uaXRlcl9kZXNjICpuaXRl cikKK3sKKyAgc3RydWN0IGNvbnRyb2xfaXYgKml2OworCisgIGlmICghbml0 ZXItPmNvbnRyb2wuYmFzZSB8fCAhbml0ZXItPmNvbnRyb2wuc3RlcCkKKyAg ICByZXR1cm47CisKKyAgaWYgKCFpbnRlZ2VyX29uZXAgKG5pdGVyLT5hc3N1 bXB0aW9ucykgfHwgIW5pdGVyLT5jb250cm9sLm5vX292ZXJmbG93KQorICAg IHJldHVybjsKKworICBpdiA9IGdnY19hbGxvYzxjb250cm9sX2l2PiAoKTsK KyAgaXYtPmJhc2UgPSBuaXRlci0+Y29udHJvbC5iYXNlOworICBpdi0+c3Rl cCA9IG5pdGVyLT5jb250cm9sLnN0ZXA7CisgIGl2LT5uZXh0ID0gbG9vcC0+ Y29udHJvbF9pdnM7CisgIGxvb3AtPmNvbnRyb2xfaXZzID0gaXY7CisKKyAg cmV0dXJuOworfQorCiAvKiBSZWNvcmQgdGhlIGVzdGltYXRlIG9uIG51bWJl ciBvZiBpdGVyYXRpb25zIG9mIExPT1AgYmFzZWQgb24gdGhlIGZhY3QgdGhh dAogICAgdGhlIGluZHVjdGlvbiB2YXJpYWJsZSBCQVNFICsgU1RFUCAqIGkg ZXZhbHVhdGVkIGluIFNUTVQgZG9lcyBub3Qgd3JhcCBhbmQKICAgIGl0cyB2 YWx1ZXMgYmVsb25nIHRvIHRoZSByYW5nZSA8TE9XLCBISUdIPi4gIFJFQUxJ U1RJQyBpcyB0cnVlIGlmIHRoZQpAQCAtMzQ2Nyw2ICszNDk1LDcgQEAgZXN0 aW1hdGVfbnVtYmVyc19vZl9pdGVyYXRpb25zX2xvb3AgKHN0cnVjdCBsb29w ICoKICAgICAgIHJlY29yZF9lc3RpbWF0ZSAobG9vcCwgbml0ZXIsIG5pdGVy X2Rlc2MubWF4LAogCQkgICAgICAgbGFzdF9zdG10IChleC0+c3JjKSwKIAkJ ICAgICAgIHRydWUsIGV4ID09IGxpa2VseV9leGl0LCB0cnVlKTsKKyAgICAg IHJlY29yZF9jb250cm9sX2l2IChsb29wLCAmbml0ZXJfZGVzYyk7CiAgICAg fQogICBleGl0cy5yZWxlYXNlICgpOwogCkBAIC0zNzczLDYgKzM4MDIsMTg4 IEBAIG5vd3JhcF90eXBlX3AgKHRyZWUgdHlwZSkKICAgcmV0dXJuIGZhbHNl OwogfQogCisvKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBjYW4gcHJvdmUgTE9PUCBp cyBleGl0ZWQgYmVmb3JlIGV2b2x1dGlvbiBvZiBpbmR1Y3Rpb24KKyAgIHZh cmlhYmxlZCB7QkFTRSwgU1RFUH0gb3ZlcmZsb3dzIHdpdGggcmVzcGVjdCB0 byBpdHMgdHlwZSBib3VuZC4gICovCisKK3N0YXRpYyBib29sCitsb29wX2V4 aXRzX2JlZm9yZV9vdmVyZmxvdyAodHJlZSBiYXNlLCB0cmVlIHN0ZXAsCisJ CQkgICAgZ2ltcGxlIGF0X3N0bXQsIHN0cnVjdCBsb29wICpsb29wKQorewor ICB3aWRlc3RfaW50IG5pdGVyOworICBzdHJ1Y3QgY29udHJvbF9pdiAqY2l2 OworICBzdHJ1Y3QgbmJfaXRlcl9ib3VuZCAqYm91bmQ7CisgIHRyZWUgZSwg ZGVsdGEsIHN0ZXBfYWJzLCB1bnNpZ25lZF9iYXNlOworICB0cmVlIHR5cGUg PSBUUkVFX1RZUEUgKHN0ZXApOworICB0cmVlIHVuc2lnbmVkX3R5cGUsIHZh bGlkX25pdGVyOworCisgIC8qIERvbid0IGlzc3VlIHNpZ25lZCBvdmVyZmxv dyB3YXJuaW5ncy4gICovCisgIGZvbGRfZGVmZXJfb3ZlcmZsb3dfd2Fybmlu Z3MgKCk7CisKKyAgLyogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlv bnMgYmVmb3JlIHdlIHJlYWNoIHRoZSBib3VuZCBvZiB0aGUKKyAgICAgdHlw ZSwgYW5kIHZlcmlmeSB0aGF0IHRoZSBsb29wIGlzIGV4aXRlZCBiZWZvcmUg dGhpcyBvY2N1cnMuICAqLworICB1bnNpZ25lZF90eXBlID0gdW5zaWduZWRf dHlwZV9mb3IgKHR5cGUpOworICB1bnNpZ25lZF9iYXNlID0gZm9sZF9jb252 ZXJ0ICh1bnNpZ25lZF90eXBlLCBiYXNlKTsKKworICBpZiAodHJlZV9pbnRf Y3N0X3NpZ25fYml0IChzdGVwKSkKKyAgICB7CisgICAgICB0cmVlIGV4dHJl bWUgPSBmb2xkX2NvbnZlcnQgKHVuc2lnbmVkX3R5cGUsCisJCQkJICAgbG93 ZXJfYm91bmRfaW5fdHlwZSAodHlwZSwgdHlwZSkpOworICAgICAgZGVsdGEg PSBmb2xkX2J1aWxkMiAoTUlOVVNfRVhQUiwgdW5zaWduZWRfdHlwZSwgdW5z aWduZWRfYmFzZSwgZXh0cmVtZSk7CisgICAgICBzdGVwX2FicyA9IGZvbGRf YnVpbGQxIChORUdBVEVfRVhQUiwgdW5zaWduZWRfdHlwZSwKKwkJCSAgICAg IGZvbGRfY29udmVydCAodW5zaWduZWRfdHlwZSwgc3RlcCkpOworICAgIH0K KyAgZWxzZQorICAgIHsKKyAgICAgIHRyZWUgZXh0cmVtZSA9IGZvbGRfY29u dmVydCAodW5zaWduZWRfdHlwZSwKKwkJCQkgICB1cHBlcl9ib3VuZF9pbl90 eXBlICh0eXBlLCB0eXBlKSk7CisgICAgICBkZWx0YSA9IGZvbGRfYnVpbGQy IChNSU5VU19FWFBSLCB1bnNpZ25lZF90eXBlLCBleHRyZW1lLCB1bnNpZ25l ZF9iYXNlKTsKKyAgICAgIHN0ZXBfYWJzID0gZm9sZF9jb252ZXJ0ICh1bnNp Z25lZF90eXBlLCBzdGVwKTsKKyAgICB9CisKKyAgdmFsaWRfbml0ZXIgPSBm b2xkX2J1aWxkMiAoRkxPT1JfRElWX0VYUFIsIHVuc2lnbmVkX3R5cGUsIGRl bHRhLCBzdGVwX2Ficyk7CisKKyAgZXN0aW1hdGVfbnVtYmVyc19vZl9pdGVy YXRpb25zX2xvb3AgKGxvb3ApOworCisgIGlmIChtYXhfbG9vcF9pdGVyYXRp b25zIChsb29wLCAmbml0ZXIpCisgICAgICAmJiB3aTo6Zml0c190b190cmVl X3AgKG5pdGVyLCBUUkVFX1RZUEUgKHZhbGlkX25pdGVyKSkKKyAgICAgICYm IChlID0gZm9sZF9iaW5hcnkgKEdUX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2Rl LCB2YWxpZF9uaXRlciwKKwkJCSAgIHdpZGVfaW50X3RvX3RyZWUgKFRSRUVf VFlQRSAodmFsaWRfbml0ZXIpLAorCQkJCQkgICAgIG5pdGVyKSkpICE9IE5V TEwKKyAgICAgICYmIGludGVnZXJfbm9uemVyb3AgKGUpKQorICAgIHsKKyAg ICAgIGZvbGRfdW5kZWZlcl9hbmRfaWdub3JlX292ZXJmbG93X3dhcm5pbmdz ICgpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICBpZiAoYXRfc3Rt dCkKKyAgICBmb3IgKGJvdW5kID0gbG9vcC0+Ym91bmRzOyBib3VuZDsgYm91 bmQgPSBib3VuZC0+bmV4dCkKKyAgICAgIHsKKwlpZiAobl9vZl9leGVjdXRp b25zX2F0X21vc3QgKGF0X3N0bXQsIGJvdW5kLCB2YWxpZF9uaXRlcikpCisJ ICB7CisJICAgIGZvbGRfdW5kZWZlcl9hbmRfaWdub3JlX292ZXJmbG93X3dh cm5pbmdzICgpOworCSAgICByZXR1cm4gdHJ1ZTsKKwkgIH0KKyAgICAgIH0K KyAgZm9sZF91bmRlZmVyX2FuZF9pZ25vcmVfb3ZlcmZsb3dfd2FybmluZ3Mg KCk7CisKKyAgLyogVHJ5IHRvIHByb3ZlIGxvb3AgaXMgZXhpdGVkIGJlZm9y ZSB7YmFzZSwgc3RlcH0gb3ZlcmZsb3dzIHdpdGggdGhlCisgICAgIGhlbHAg b2YgYW5hbHl6ZWQgbG9vcCBjb250cm9sIElWLiAgVGhpcyBpcyBkb25lIG9u bHkgZm9yIElWcyB3aXRoCisgICAgIGNvbnN0YW50IHN0ZXAgYmVjYXVzZSBv dGhlcndpc2Ugd2UgZG9uJ3QgaGF2ZSB0aGUgaW5mb3JtYXRpb24uICAqLwor ICBpZiAoVFJFRV9DT0RFIChzdGVwKSA9PSBJTlRFR0VSX0NTVCkKKyAgICBm b3IgKGNpdiA9IGxvb3AtPmNvbnRyb2xfaXZzOyBjaXY7IGNpdiA9IGNpdi0+ bmV4dCkKKyAgICAgIHsKKwllbnVtIHRyZWVfY29kZSBjb2RlOworCXRyZWUg c3RlcHBlZCwgZXh0cmVtZSwgY2l2X3R5cGUgPSBUUkVFX1RZUEUgKGNpdi0+ c3RlcCk7CisKKwkvKiBIYXZlIHRvIGNvbnNpZGVyIHR5cGUgZGlmZmVyZW5j ZSBiZWNhdXNlIG9wZXJhbmRfZXF1YWxfcCBpZ25vcmVzCisJICAgdGhhdCBm b3IgY29uc3RhbnRzLiAgKi8KKwlpZiAoVFlQRV9VTlNJR05FRCAodHlwZSkg IT0gVFlQRV9VTlNJR05FRCAoY2l2X3R5cGUpCisJICAgIHx8IGVsZW1lbnRf cHJlY2lzaW9uICh0eXBlKSAhPSBlbGVtZW50X3ByZWNpc2lvbiAoY2l2X3R5 cGUpKQorCSAgY29udGludWU7CisKKwkvKiBPbmx5IGNvbnNpZGVyIGNvbnRy b2wgSVYgd2l0aCBzYW1lIHN0ZXAuICAqLworCWlmICghb3BlcmFuZF9lcXVh bF9wIChzdGVwLCBjaXYtPnN0ZXAsIDApKQorCSAgY29udGludWU7CisKKwkv KiBEb25lIHByb3ZpbmcgaWYgdGhpcyBpcyBhIG5vLW92ZXJmbG93IGNvbnRy b2wgSVYuICAqLworCWlmIChvcGVyYW5kX2VxdWFsX3AgKGJhc2UsIGNpdi0+ YmFzZSwgMCkpCisJICByZXR1cm4gdHJ1ZTsKKworCS8qIElmIHRoaXMgaXMg YSBiZWZvcmUgc3RlcHBpbmcgY29udHJvbCBJViwgaW4gb3RoZXIgd29yZHMs IHdlIGhhdmUKKworCSAgICAge2Npdl9iYXNlLCBzdGVwfSA9IHtiYXNlICsg c3RlcCwgc3RlcH0KKworCSAgIEJlY2F1c2UgY2l2IHtiYXNlICsgc3RlcCwg c3RlcH0gZG9lc24ndCBvdmVyZmxvdyBkdXJpbmcgbG9vcAorCSAgIGl0ZXJh dGlvbnMsIHtiYXNlLCBzdGVwfSB3aWxsIG5vdCBvdmVyZmxvdyBpZiB3ZSBj YW4gcHJvdmUgdGhlCisJICAgb3BlcmF0aW9uICJiYXNlICsgc3RlcCIgZG9l cyBub3Qgb3ZlcmZsb3cuICBUaGlzIGlzIGRvbmUgYnkgcHJvdmluZworCSAg IGJlbG93IGNvbmRpdGlvbnM6CisKKwkgICAgIGJhc2UgPD0gVVBQRVJfQk9V TkQgKHR5cGUpIC0gc3RlcCAgOztzdGVwID4gMAorCSAgICAgYmFzZSA+PSBM T1dFUl9CT1VORCAodHlwZSkgLSBzdGVwICA7O3N0ZXAgPCAwCisKKwkgICBi eSB1c2luZyBsb29wJ3MgaW5pdGlhbCBjb25kaXRpb24uICAqLworCXN0ZXBw ZWQgPSBmb2xkX2J1aWxkMiAoUExVU19FWFBSLCBUUkVFX1RZUEUgKGJhc2Up LCBiYXNlLCBzdGVwKTsKKwlpZiAob3BlcmFuZF9lcXVhbF9wIChzdGVwcGVk LCBjaXYtPmJhc2UsIDApKQorCSAgeworCSAgICBpZiAodHJlZV9pbnRfY3N0 X3NpZ25fYml0IChzdGVwKSkKKwkgICAgICB7CisJCWNvZGUgPSBMVF9FWFBS OworCQlleHRyZW1lID0gbG93ZXJfYm91bmRfaW5fdHlwZSAodHlwZSwgdHlw ZSk7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworCQljb2RlID0g R1RfRVhQUjsKKwkJZXh0cmVtZSA9IHVwcGVyX2JvdW5kX2luX3R5cGUgKHR5 cGUsIHR5cGUpOworCSAgICAgIH0KKwkgICAgZXh0cmVtZSA9IGZvbGRfYnVp bGQyIChNSU5VU19FWFBSLCB0eXBlLCBleHRyZW1lLCBzdGVwKTsKKwkgICAg ZSA9IGZvbGRfYnVpbGQyIChjb2RlLCBib29sZWFuX3R5cGVfbm9kZSwgYmFz ZSwgZXh0cmVtZSk7CisJICAgIGUgPSBzaW1wbGlmeV91c2luZ19pbml0aWFs X2NvbmRpdGlvbnMgKGxvb3AsIGUpOworCSAgICBpZiAoaW50ZWdlcl96ZXJv cCAoZSkpCisJICAgICAgcmV0dXJuIHRydWU7CisKKwkgICAgY29udGludWU7 CisJICB9CisKKwkvKiBTaW1pbGFyIHRvIGFib3ZlLCBvbmx5IGluIHRoaXMg Y2FzZSB3ZSBoYXZlOgorCisJICAgICB7Y2l2X2Jhc2UsIHN0ZXB9ID0geyhz aWduZWQgVCkoKHVuc2lnbmVkIFQpYmFzZSArIHN0ZXApLCBzdGVwfQorCSAg ICAgJiYgVFJFRV9UWVBFIChjaXZfYmFzZSkgPSBzaWduZWQgVC4KKworCSAg IFdlIHByb3ZlIHRoYXQgYmVsb3cgY29uZGl0aW9uIGlzIHNhdGlzZmllZDoK KworCSAgICAgKHNpZ25lZCBUKSgodW5zaWduZWQgVCliYXNlICsgc3RlcCkK KwkgICAgICAgPT0gKHNpZ25lZCBUKSh1bnNpZ25lZCBUKWJhc2UgKyBzdGVw CisJICAgICAgID09IGJhc2UgKyBzdGVwCisKKwkgICBiZWNhdXNlIG9mIGV4 YWN0IHRoZSBzYW1lIHJlYXNvbiBhcyBhYm92ZS4gIFRoaXMgYWxzbyBwcm92 ZXMKKwkgICB0aGVyZSBpcyBubyBvdmVyZmxvdyBpbiB0aGUgb3BlcmF0aW9u ICJiYXNlICsgc3RlcCIsIHRodXMgdGhlCisJICAgaW5kdWN0aW9uIHZhcmlh YmxlIHtiYXNlLCBzdGVwfSBkdXJpbmcgbG9vcCBpdGVyYXRpb25zLgorCisJ ICAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gaGFuZGxlIGNhc2VzIGFzIGJlbG93 OgorCisJICAgICBpbnQgZm9vIChpbnQgKmEsIHNpZ25lZCBjaGFyIHMsIHNp Z25lZCBjaGFyIGwpCisJICAgICAgIHsKKwkJIHNpZ25lZCBjaGFyIGk7CisJ CSBmb3IgKGkgPSBzOyBpIDwgbDsgaSsrKQorCQkgICBhW2ldID0gMDsKKwkJ IHJldHVybiAwOworCSAgICAgICB9CisKKwkgICBUaGUgdmFyaWFibGUgSSBp cyBmaXJzdGx5IGNvbnZlcnRlZCB0byB0eXBlIHVuc2lnbmVkIGNoYXIsCisJ ICAgaW5jcmVtZW50ZWQsIHRoZW4gY29udmVydGVkIGJhY2sgdG8gdHlwZSBz aWduZWQgY2hhci4gICovCisJaWYgKCFDT05WRVJUX0VYUFJfUCAoY2l2LT5i YXNlKSB8fCBUUkVFX1RZUEUgKGNpdi0+YmFzZSkgIT0gdHlwZSkKKwkgIGNv bnRpbnVlOworCWUgPSBUUkVFX09QRVJBTkQgKGNpdi0+YmFzZSwgMCk7CisJ aWYgKFRSRUVfQ09ERSAoZSkgIT0gUExVU19FWFBSCisJICAgIHx8IFRSRUVf Q09ERSAoVFJFRV9PUEVSQU5EIChlLCAxKSkgIT0gSU5URUdFUl9DU1QKKwkg ICAgfHwgIW9wZXJhbmRfZXF1YWxfcCAoc3RlcCwKKwkJCQkgZm9sZF9jb252 ZXJ0ICh0eXBlLAorCQkJCQkgICAgICAgVFJFRV9PUEVSQU5EIChlLCAxKSks IDApKQorCSAgY29udGludWU7CisJZSA9IFRSRUVfT1BFUkFORCAoZSwgMCk7 CisJaWYgKCFDT05WRVJUX0VYUFJfUCAoZSkgfHwgIW9wZXJhbmRfZXF1YWxf cCAoZSwgdW5zaWduZWRfYmFzZSwgMCkpCisJICBjb250aW51ZTsKKwllID0g VFJFRV9PUEVSQU5EIChlLCAwKTsKKwlnY2NfYXNzZXJ0IChvcGVyYW5kX2Vx dWFsX3AgKGUsIGJhc2UsIDApKTsKKwlpZiAodHJlZV9pbnRfY3N0X3NpZ25f Yml0IChzdGVwKSkKKwkgIHsKKwkgICAgY29kZSA9IExUX0VYUFI7CisJICAg IGV4dHJlbWUgPSBsb3dlcl9ib3VuZF9pbl90eXBlICh0eXBlLCB0eXBlKTsK KwkgIH0KKwllbHNlCisJICB7CisJICAgIGNvZGUgPSBHVF9FWFBSOworCSAg ICBleHRyZW1lID0gdXBwZXJfYm91bmRfaW5fdHlwZSAodHlwZSwgdHlwZSk7 CisJICB9CisJZXh0cmVtZSA9IGZvbGRfYnVpbGQyIChNSU5VU19FWFBSLCB0 eXBlLCBleHRyZW1lLCBzdGVwKTsKKwllID0gZm9sZF9idWlsZDIgKGNvZGUs IGJvb2xlYW5fdHlwZV9ub2RlLCBiYXNlLCBleHRyZW1lKTsKKwllID0gc2lt cGxpZnlfdXNpbmdfaW5pdGlhbF9jb25kaXRpb25zIChsb29wLCBlKTsKKwlp ZiAoaW50ZWdlcl96ZXJvcCAoZSkpCisJICByZXR1cm4gdHJ1ZTsKKyAgICAg IH0KKworICByZXR1cm4gZmFsc2U7Cit9CisKIC8qIFJldHVybiBmYWxzZSBv bmx5IHdoZW4gdGhlIGluZHVjdGlvbiB2YXJpYWJsZSBCQVNFICsgU1RFUCAq IEkgaXMKICAgIGtub3duIHRvIG5vdCBvdmVyZmxvdzogaS5lLiB3aGVuIHRo ZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBpcyBzbWFsbAogICAgZW5vdWdoIHdp dGggcmVzcGVjdCB0byB0aGUgc3RlcCBhbmQgaW5pdGlhbCBjb25kaXRpb24g aW4gb3JkZXIgdG8KQEAgLTM3ODgsMTMgKzM5OTksNiBAQCBzY2V2X3Byb2Jh Ymx5X3dyYXBzX3AgKHRyZWUgYmFzZSwgdHJlZSBzdGVwLAogCQkgICAgICAg Z2ltcGxlIGF0X3N0bXQsIHN0cnVjdCBsb29wICpsb29wLAogCQkgICAgICAg Ym9vbCB1c2Vfb3ZlcmZsb3dfc2VtYW50aWNzKQogewotICB0cmVlIGRlbHRh LCBzdGVwX2FiczsKLSAgdHJlZSB1bnNpZ25lZF90eXBlLCB2YWxpZF9uaXRl cjsKLSAgdHJlZSB0eXBlID0gVFJFRV9UWVBFIChzdGVwKTsKLSAgdHJlZSBl OwotICB3aWRlc3RfaW50IG5pdGVyOwotICBzdHJ1Y3QgbmJfaXRlcl9ib3Vu ZCAqYm91bmQ7Ci0KICAgLyogRklYTUU6IFdlIHJlYWxseSBuZWVkIHNvbWV0 aGluZyBsaWtlCiAgICAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0 Y2hlcy8yMDA1LTA2L21zZzAyMDI1Lmh0bWwuCiAKQEAgLTM4MjgsNTcgKzQw MzIsOSBAQCBzY2V2X3Byb2JhYmx5X3dyYXBzX3AgKHRyZWUgYmFzZSwgdHJl ZSBzdGVwLAogICBpZiAoVFJFRV9DT0RFIChzdGVwKSAhPSBJTlRFR0VSX0NT VCkKICAgICByZXR1cm4gdHJ1ZTsKIAotICAvKiBEb24ndCBpc3N1ZSBzaWdu ZWQgb3ZlcmZsb3cgd2FybmluZ3MuICAqLwotICBmb2xkX2RlZmVyX292ZXJm bG93X3dhcm5pbmdzICgpOworICBpZiAobG9vcF9leGl0c19iZWZvcmVfb3Zl cmZsb3cgKGJhc2UsIHN0ZXAsIGF0X3N0bXQsIGxvb3ApKQorICAgIHJldHVy biBmYWxzZTsKIAotICAvKiBPdGhlcndpc2UsIGNvbXB1dGUgdGhlIG51bWJl ciBvZiBpdGVyYXRpb25zIGJlZm9yZSB3ZSByZWFjaCB0aGUKLSAgICAgYm91 bmQgb2YgdGhlIHR5cGUsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgbG9vcCBpcyBl eGl0ZWQgYmVmb3JlIHRoaXMKLSAgICAgb2NjdXJzLiAgKi8KLSAgdW5zaWdu ZWRfdHlwZSA9IHVuc2lnbmVkX3R5cGVfZm9yICh0eXBlKTsKLSAgYmFzZSA9 IGZvbGRfY29udmVydCAodW5zaWduZWRfdHlwZSwgYmFzZSk7Ci0KLSAgaWYg KHRyZWVfaW50X2NzdF9zaWduX2JpdCAoc3RlcCkpCi0gICAgewotICAgICAg dHJlZSBleHRyZW1lID0gZm9sZF9jb252ZXJ0ICh1bnNpZ25lZF90eXBlLAot CQkJCSAgIGxvd2VyX2JvdW5kX2luX3R5cGUgKHR5cGUsIHR5cGUpKTsKLSAg ICAgIGRlbHRhID0gZm9sZF9idWlsZDIgKE1JTlVTX0VYUFIsIHVuc2lnbmVk X3R5cGUsIGJhc2UsIGV4dHJlbWUpOwotICAgICAgc3RlcF9hYnMgPSBmb2xk X2J1aWxkMSAoTkVHQVRFX0VYUFIsIHVuc2lnbmVkX3R5cGUsCi0JCQkgICAg ICBmb2xkX2NvbnZlcnQgKHVuc2lnbmVkX3R5cGUsIHN0ZXApKTsKLSAgICB9 Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB0cmVlIGV4dHJlbWUgPSBmb2xkX2Nv bnZlcnQgKHVuc2lnbmVkX3R5cGUsCi0JCQkJICAgdXBwZXJfYm91bmRfaW5f dHlwZSAodHlwZSwgdHlwZSkpOwotICAgICAgZGVsdGEgPSBmb2xkX2J1aWxk MiAoTUlOVVNfRVhQUiwgdW5zaWduZWRfdHlwZSwgZXh0cmVtZSwgYmFzZSk7 Ci0gICAgICBzdGVwX2FicyA9IGZvbGRfY29udmVydCAodW5zaWduZWRfdHlw ZSwgc3RlcCk7Ci0gICAgfQotCi0gIHZhbGlkX25pdGVyID0gZm9sZF9idWls ZDIgKEZMT09SX0RJVl9FWFBSLCB1bnNpZ25lZF90eXBlLCBkZWx0YSwgc3Rl cF9hYnMpOwotCi0gIGVzdGltYXRlX251bWJlcnNfb2ZfaXRlcmF0aW9uc19s b29wIChsb29wKTsKLQotICBpZiAobWF4X2xvb3BfaXRlcmF0aW9ucyAobG9v cCwgJm5pdGVyKQotICAgICAgJiYgd2k6OmZpdHNfdG9fdHJlZV9wIChuaXRl ciwgVFJFRV9UWVBFICh2YWxpZF9uaXRlcikpCi0gICAgICAmJiAoZSA9IGZv bGRfYmluYXJ5IChHVF9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwgdmFsaWRf bml0ZXIsCi0JCQkgICB3aWRlX2ludF90b190cmVlIChUUkVFX1RZUEUgKHZh bGlkX25pdGVyKSwKLQkJCQkJICAgICBuaXRlcikpKSAhPSBOVUxMCi0gICAg ICAmJiBpbnRlZ2VyX25vbnplcm9wIChlKSkKLSAgICB7Ci0gICAgICBmb2xk X3VuZGVmZXJfYW5kX2lnbm9yZV9vdmVyZmxvd193YXJuaW5ncyAoKTsKLSAg ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIGlmIChhdF9zdG10KQotICAg IGZvciAoYm91bmQgPSBsb29wLT5ib3VuZHM7IGJvdW5kOyBib3VuZCA9IGJv dW5kLT5uZXh0KQotICAgICAgewotCWlmIChuX29mX2V4ZWN1dGlvbnNfYXRf bW9zdCAoYXRfc3RtdCwgYm91bmQsIHZhbGlkX25pdGVyKSkKLQkgIHsKLQkg ICAgZm9sZF91bmRlZmVyX2FuZF9pZ25vcmVfb3ZlcmZsb3dfd2FybmluZ3Mg KCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQkgIH0KLSAgICAgIH0KLQotICBm b2xkX3VuZGVmZXJfYW5kX2lnbm9yZV9vdmVyZmxvd193YXJuaW5ncyAoKTsK LQogICAvKiBBdCB0aGlzIHBvaW50IHdlIHN0aWxsIGRvbid0IGhhdmUgYSBw cm9vZiB0aGF0IHRoZSBpdiBkb2VzIG5vdAogICAgICBvdmVyZmxvdzogZ2l2 ZSB1cC4gICovCiAgIHJldHVybiB0cnVlOwpAQCAtMzg4OSwxNyArNDA0NSwy NiBAQCBzY2V2X3Byb2JhYmx5X3dyYXBzX3AgKHRyZWUgYmFzZSwgdHJlZSBz dGVwLAogdm9pZAogZnJlZV9udW1iZXJzX29mX2l0ZXJhdGlvbnNfZXN0aW1h dGVzX2xvb3AgKHN0cnVjdCBsb29wICpsb29wKQogewotICBzdHJ1Y3QgbmJf aXRlcl9ib3VuZCAqYm91bmQsICpuZXh0OworICBzdHJ1Y3QgY29udHJvbF9p diAqY2l2OworICBzdHJ1Y3QgbmJfaXRlcl9ib3VuZCAqYm91bmQ7CiAKICAg bG9vcC0+bmJfaXRlcmF0aW9ucyA9IE5VTEw7CiAgIGxvb3AtPmVzdGltYXRl X3N0YXRlID0gRVNUX05PVF9DT01QVVRFRDsKLSAgZm9yIChib3VuZCA9IGxv b3AtPmJvdW5kczsgYm91bmQ7IGJvdW5kID0gbmV4dCkKKyAgZm9yIChib3Vu ZCA9IGxvb3AtPmJvdW5kczsgYm91bmQ7KQogICAgIHsKLSAgICAgIG5leHQg PSBib3VuZC0+bmV4dDsKKyAgICAgIHN0cnVjdCBuYl9pdGVyX2JvdW5kICpu ZXh0ID0gYm91bmQtPm5leHQ7CiAgICAgICBnZ2NfZnJlZSAoYm91bmQpOwor ICAgICAgYm91bmQgPSBuZXh0OwogICAgIH0KKyAgbG9vcC0+Ym91bmRzID0g TlVMTDsKIAotICBsb29wLT5ib3VuZHMgPSBOVUxMOworICBmb3IgKGNpdiA9 IGxvb3AtPmNvbnRyb2xfaXZzOyBjaXY7KQorICAgIHsKKyAgICAgIHN0cnVj dCBjb250cm9sX2l2ICpuZXh0ID0gY2l2LT5uZXh0OworICAgICAgZ2djX2Zy ZWUgKGNpdik7CisgICAgICBjaXYgPSBuZXh0OworICAgIH0KKyAgbG9vcC0+ Y29udHJvbF9pdnMgPSBOVUxMOwogfQogCiAvKiBGcmVlcyB0aGUgaW5mb3Jt YXRpb24gb24gdXBwZXIgYm91bmRzIG9uIG51bWJlcnMgb2YgaXRlcmF0aW9u cyBvZiBsb29wcy4gICovCkluZGV4OiBnY2MvdHJlZS1zc2EtbG9vcC1uaXRl ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy90cmVlLXNzYS1s b29wLW5pdGVyLmgJKHJldmlzaW9uIDIyMjc1OCkKKysrIGdjYy90cmVlLXNz YS1sb29wLW5pdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcg QEAgZXh0ZXJuIHZvaWQgZXN0aW1hdGVfbnVtYmVyc19vZl9pdGVyYXRpb25z ICh2b2lkKTsKIGV4dGVybiBib29sIHN0bXRfZG9taW5hdGVzX3N0bXRfcCAo Z2ltcGxlLCBnaW1wbGUpOwogZXh0ZXJuIGJvb2wgbm93cmFwX3R5cGVfcCAo dHJlZSk7CiBleHRlcm4gYm9vbCBzY2V2X3Byb2JhYmx5X3dyYXBzX3AgKHRy ZWUsIHRyZWUsIGdpbXBsZSwgc3RydWN0IGxvb3AgKiwgYm9vbCk7CitleHRl cm4gdm9pZCBmcmVlX2xvb3BfY29udHJvbF9pdnMgKHN0cnVjdCBsb29wICop OwogZXh0ZXJuIHZvaWQgZnJlZV9udW1iZXJzX29mX2l0ZXJhdGlvbnNfZXN0 aW1hdGVzX2xvb3AgKHN0cnVjdCBsb29wICopOwogZXh0ZXJuIHZvaWQgZnJl ZV9udW1iZXJzX29mX2l0ZXJhdGlvbnNfZXN0aW1hdGVzICh2b2lkKTsKIGV4 dGVybiB2b2lkIHN1YnN0aXR1dGVfaW5fbG9vcF9pbmZvIChzdHJ1Y3QgbG9v cCAqLCB0cmVlLCB0cmVlKTsKSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRn L3ZlY3QvcHI0ODA1Mi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdj Yy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvcHI0ODA1Mi5jCShyZXZpc2lvbiAw KQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9wcjQ4MDUyLmMJKHJl dmlzaW9uIDApCkBAIC0wLDAgKzEsMjcgQEAKKy8qIHsgZGctZG8gY29tcGls ZSB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU8zIiB9ICov CisKK2ludCBmb28oaW50KiBBLCBpbnQqIEIsICB1bnNpZ25lZCBzdGFydCwg dW5zaWduZWQgQlMpCit7CisgIGludCBzOworICBmb3IgKHVuc2lnbmVkIGsg PSBzdGFydDsgIGsgPCBzdGFydCArIEJTOyBrKyspCisgICAgeworICAgICAg cyArPSBBW2tdICogQltrXTsKKyAgICB9CisKKyAgcmV0dXJuIHM7Cit9CisK K2ludCBiYXIoaW50KiBBLCBpbnQqIEIsIHVuc2lnbmVkIEJTKQoreworICBp bnQgczsKKyAgZm9yICh1bnNpZ25lZCBrID0gMDsgIGsgPCBCUzsgaysrKQor ICAgIHsKKyAgICAgIHMgKz0gQVtrXSAqIEJba107CisgICAgfQorCisgIHJl dHVybiBzOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAt dGltZXMgInZlY3Rvcml6ZWQgMSBsb29wcyIgMiAidmVjdCIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgY2xlYW51cC10cmVlLWR1bXAgInZlY3QiIH0gfSAq LwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Evc2Nldi04 LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdHJlZS1zc2Evc2Nldi04LmMJKHJldmlzaW9uIDApCisrKyBnY2Mv dGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9zY2V2LTguYwkocmV2aXNpb24g MCkKQEAgLTAsMCArMSw2MyBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8K Ky8qIHsgZGctb3B0aW9ucyAiLU8yIC1mZHVtcC10cmVlLWl2b3B0cy1kZXRh aWxzIiB9ICovCisKK2ludCAqYTsKKworaW50Citmb28xIChsb25nIGxvbmcg cywgbG9uZyBsb25nIGwpCit7CisgIGxvbmcgbG9uZyBpOworCisgIGZvciAo aSA9IHM7IGkgPCBsOyBpKyspCisgICAgeworICAgICAgYVsoc2hvcnQpaV0g PSAwOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludAorZm9vMiAodW5z aWduZWQgY2hhciBzLCB1bnNpZ25lZCBjaGFyIGwsIHVuc2lnbmVkIGNoYXIg YykKK3sKKyAgdW5zaWduZWQgY2hhciBpLCBzdGVwID0gMTsKKyAgaW50IHN1 bSA9IDA7CisKKyAgZm9yIChpID0gczsgaSA8IGw7IGkrKykKKyAgICB7Cisg ICAgICBzdW0gKz0gYVtjXTsKKyAgICAgIGMgKz0gc3RlcDsKKyAgICB9CisK KyAgcmV0dXJuIHN1bTsKK30KKworaW50Citmb28zICh1bnNpZ25lZCBjaGFy IHMsIHVuc2lnbmVkIGNoYXIgbCwgdW5zaWduZWQgY2hhciBjKQoreworICB1 bnNpZ25lZCBjaGFyIGk7CisgIGludCBzdW0gPSAwOworCisgIGZvciAoaSA9 IHM7IGkgIT0gbDsgaSArPSBjKQorICAgIHsKKyAgICAgIHN1bSArPSBhW2ld OworICAgIH0KKworICByZXR1cm4gc3VtOworfQorCitpbnQKK2ZvbzQgKHVu c2lnbmVkIGNoYXIgcywgdW5zaWduZWQgY2hhciBsKQoreworICB1bnNpZ25l ZCBjaGFyIGk7CisgIGludCBzdW0gPSAwOworCisgIGZvciAoaSA9IHM7IGkg IT0gbDsgaSsrKQorICAgIHsKKyAgICAgIHN1bSArPSBhW2ldOworICAgIH0K KworICByZXR1cm4gc3VtOworfQorCisvKiBBZGRyZXNzIG9mIGFycmF5IHJl ZmVyZW5jZXMgYXJlIG5vdCBzY2V2cy4gICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtbm90ICJ1c2UgXFswLTlcXVxuICBhZGRyZXNzIiAi aXZvcHRzIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBjbGVhbnVwLXRyZWUt ZHVtcCAiaXZvcHRzIiB9IH0gKi8KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2Nj LmRnL3RyZWUtc3NhL3NjZXYtMTAuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9zY2V2LTEwLmMJ KHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNz YS9zY2V2LTEwLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQgQEAKKy8q IHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAt ZmR1bXAtdHJlZS1pdm9wdHMtZGV0YWlscyIgfSAqLworCitpbnQgKmE7CisK K2ludAorZm9vIChzaWduZWQgY2hhciBzLCBzaWduZWQgY2hhciBsKQorewor ICBzaWduZWQgY2hhciBpOworICBpbnQgc3VtID0gMDsKKworICBmb3IgKGkg PSBzOyBpIDwgbDsgaSsrKQorICAgIHsKKyAgICAgIHN1bSArPSBhW2ldOwor ICAgIH0KKworICByZXR1cm4gc3VtOworfQorCisvKiBBZGRyZXNzIG9mIGFy cmF5IHJlZmVyZW5jZXMgYXJlIG5vdCBzY2V2cy4gICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInVzZSBcWzAtOVxdXG4gIGFk ZHJlc3MiIDEgIml2b3B0cyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgY2xl YW51cC10cmVlLWR1bXAgIml2b3B0cyIgfSB9ICovCisKKwpJbmRleDogZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Evc2Nldi05LmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1z c2Evc2Nldi05LmMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2dj Yy5kZy90cmVlLXNzYS9zY2V2LTkuYwkocmV2aXNpb24gMCkKQEAgLTAsMCAr MSwyMyBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0 aW9ucyAiLU8yIC1mZHVtcC10cmVlLWl2b3B0cy1kZXRhaWxzIiB9ICovCisK K2ludCAqYTsKKworaW50Citmb28gKHVuc2lnbmVkIGNoYXIgcywgdW5zaWdu ZWQgY2hhciBsKQoreworICB1bnNpZ25lZCBjaGFyIGk7CisgIGludCBzdW0g PSAwOworCisgIGZvciAoaSA9IHM7IGkgPCBsOyBpICs9IDEpCisgICAgewor ICAgICAgc3VtICs9IGFbaV07CisgICAgfQorCisgIHJldHVybiBzdW07Cit9 CisKKy8qIEFkZHJlc3Mgb2YgYXJyYXkgcmVmZXJlbmNlcyBhcmUgbm90IHNj ZXZzLiAgKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1l cyAidXNlIFxbMC05XF1cbiAgYWRkcmVzcyIgMSAiaXZvcHRzIiB9IH0gKi8K Ky8qIHsgZGctZmluYWwgeyBjbGVhbnVwLXRyZWUtZHVtcCAiaXZvcHRzIiB9 IH0gKi8KKwpJbmRleDogZ2NjL2NmZ2xvb3AuaAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvY2ZnbG9vcC5oCShyZXZpc2lvbiAyMjI3NTgpCisr KyBnY2MvY2ZnbG9vcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2 LDE0IEBAIGVudW0gbG9vcF9lc3RpbWF0aW9uCiAgIEVTVF9MQVNUCiB9Owog CisvKiBUaGUgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBub24tb3ZlcmZsb3cg Y29udHJvbCBpbmR1Y3Rpb24gdmFyaWFibGUKKyAgIG9mIGxvb3AncyBleGl0 IGVkZ2UuICAqLworc3RydWN0IEdUWSAoKGNoYWluX25leHQgKCIlaC5uZXh0 IikpKSBjb250cm9sX2l2IHsKKyAgdHJlZSBiYXNlOworICB0cmVlIHN0ZXA7 CisgIHN0cnVjdCBjb250cm9sX2l2ICpuZXh0OworfTsKKwogLyogU3RydWN0 dXJlIHRvIGhvbGQgaW5mb3JtYXRpb24gZm9yIGVhY2ggbmF0dXJhbCBsb29w LiAgKi8KIHN0cnVjdCBHVFkgKChjaGFpbl9uZXh0ICgiJWgubmV4dCIpKSkg bG9vcCB7CiAgIC8qIEluZGV4IGludG8gbG9vcHMgYXJyYXkuICAqLwpAQCAt MjAzLDYgKzIxMSw5IEBAIHN0cnVjdCBHVFkgKChjaGFpbl9uZXh0ICgiJWgu bmV4dCIpKSkgbG9vcCB7CiAgIC8qIFVwcGVyIGJvdW5kIG9uIG51bWJlciBv ZiBpdGVyYXRpb25zIG9mIGEgbG9vcC4gICovCiAgIHN0cnVjdCBuYl9pdGVy X2JvdW5kICpib3VuZHM7CiAKKyAgLyogTm9uLW92ZXJmbG93IGNvbnRyb2wg aXZzIG9mIGEgbG9vcC4gICovCisgIHN0cnVjdCBjb250cm9sX2l2ICpjb250 cm9sX2l2czsKKwogICAvKiBIZWFkIG9mIHRoZSBjeWNsaWMgbGlzdCBvZiB0 aGUgZXhpdHMgb2YgdGhlIGxvb3AuICAqLwogICBzdHJ1Y3QgbG9vcF9leGl0 ICpleGl0czsKIAo= --089e013a1a5c673cea05177289ac--