From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23234 invoked by alias); 10 Mar 2013 01:09:08 -0000 Received: (qmail 23215 invoked by uid 22791); 10 Mar 2013 01:09:07 -0000 X-SWARE-Spam-Status: No, hits=-4.5 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE X-Spam-Check-By: sourceware.org Received: from mail-vb0-f47.google.com (HELO mail-vb0-f47.google.com) (209.85.212.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 10 Mar 2013 01:09:03 +0000 Received: by mail-vb0-f47.google.com with SMTP id e21so1145998vbm.34 for ; Sat, 09 Mar 2013 17:09:02 -0800 (PST) X-Received: by 10.221.2.71 with SMTP id nt7mr1187353vcb.71.1362877742410; Sat, 09 Mar 2013 17:09:02 -0800 (PST) MIME-Version: 1.0 Received: by 10.58.237.1 with HTTP; Sat, 9 Mar 2013 17:08:22 -0800 (PST) From: Steven Bosscher Date: Sun, 10 Mar 2013 01:09:00 -0000 Message-ID: Subject: [patch] PR middle-end/39326 - limit LIM To: GCC Patches Cc: Richard Biener , Jakub Jelinek , Zdenek Dvorak Content-Type: multipart/mixed; boundary=bcaec54b5438b5737d04d787b31a X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2013-03/txt/msg00380.txt.bz2 --bcaec54b5438b5737d04d787b31a Content-Type: text/plain; charset=ISO-8859-1 Content-length: 2487 Hello, The attached patch fixes another one of the scalability problems reported in PR middle-end/39326. This problem is that tree loop-invariant code motion explodes on basic blocks with many memory references. Compile time is quadratic in the number of memory references in the basic block, and so are the memory requirements when the dependences or independences are propagated bottom-up through the loop tree. The fix is to give up on loops with too many memory references to handle. There is already a param for that for loop dependence analysis, and this patch makes LIM use the same param. Bootstrapped&tested on {x86_64,powerpc64}-unknown-linux-gnu. OK for trunk? Ciao! Steven (The ChangeLog is a bit long but the patch is relatively straight-forward.) * tree-flow.h (enum move_pos): Moved to tree-ssa-loop-im.c. * tree-ssa-loop-im.c: Include diagnostic-core.h for warning_at() (enum move_pos): Moved here. (movement_possibility): Made static. Reject memory operations in loops with too many memory references to handle. (determine_max_movement): Take loops_with_too_many_memrefs argument. For statements referencing memory, find the outermost superloop that is not in the loops_with_too_many_memrefs set. (determine_invariantness_stmt): Take loops_with_too_many_memrefs via dom_walk_data.global_data, and pass it along where necessary. Hoist "pos == MOVE_POSSIBLE" test. (determine_invariantness): Take loops_with_too_many_memrefs argument. (move_computations): Likewise, but unused for now. (gather_mem_refs_stmt): Fail if there are too many memory references. Use PARAM_LOOP_MAX_DATAREFS_FOR_DATADEPS as threshold. Add disabled optimization warning. (gather_mem_refs_in_loops): Take loops_with_too_many_memrefs argument. Propagate it from inner loops to outer loops. Do not propagate recorded memory references for loops on which memory optimizations are disabled. (create_vop_ref_mapping): Take loops_with_too_many_memrefs argument. Don't create a mapping on loops that are in this set. (analyze_memory_references): Take loops_with_too_many_memrefs argument and let subroutines fill it. (store_motion): Take loops_with_too_many_memrefs argument. Skip loops that are in this set. (tree_ssa_lim): Allocate, pass, and free loops_with_too_many_memrefs. --bcaec54b5438b5737d04d787b31a Content-Type: application/octet-stream; name="PR39326_LIM.diff" Content-Disposition: attachment; filename="PR39326_LIM.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_he3i4lee1 Content-length: 21757 CSogdHJlZS1mbG93LmggKGVudW0gbW92ZV9wb3MpOiBNb3ZlZCB0byB0cmVl LXNzYS1sb29wLWltLmMuCgkqIHRyZWUtc3NhLWxvb3AtaW0uYzogSW5jbHVk ZSBkaWFnbm9zdGljLWNvcmUuaCBmb3Igd2FybmluZ19hdCgpCgkoZW51bSBt b3ZlX3Bvcyk6IE1vdmVkIGhlcmUuCgkobW92ZW1lbnRfcG9zc2liaWxpdHkp OiBNYWRlIHN0YXRpYy4gIFJlamVjdCBtZW1vcnkgb3BlcmF0aW9ucyBpbgoJ bG9vcHMgd2l0aCB0b28gbWFueSBtZW1vcnkgcmVmZXJlbmNlcyB0byBoYW5k bGUuCgkoZGV0ZXJtaW5lX21heF9tb3ZlbWVudCk6IFRha2UgbG9vcHNfd2l0 aF90b29fbWFueV9tZW1yZWZzIGFyZ3VtZW50LgoJRm9yIHN0YXRlbWVudHMg cmVmZXJlbmNpbmcgbWVtb3J5LCBmaW5kIHRoZSBvdXRlcm1vc3Qgc3VwZXJs b29wCgl0aGF0IGlzIG5vdCBpbiB0aGUgbG9vcHNfd2l0aF90b29fbWFueV9t ZW1yZWZzIHNldC4KCShkZXRlcm1pbmVfaW52YXJpYW50bmVzc19zdG10KTog VGFrZSBsb29wc193aXRoX3Rvb19tYW55X21lbXJlZnMKCXZpYSBkb21fd2Fs a19kYXRhLmdsb2JhbF9kYXRhLCBhbmQgcGFzcyBpdCBhbG9uZyB3aGVyZSBu ZWNlc3NhcnkuCglIb2lzdCAicG9zID09IE1PVkVfUE9TU0lCTEUiIHRlc3Qu CgkoZGV0ZXJtaW5lX2ludmFyaWFudG5lc3MpOiBUYWtlIGxvb3BzX3dpdGhf dG9vX21hbnlfbWVtcmVmcyBhcmd1bWVudC4KCShtb3ZlX2NvbXB1dGF0aW9u cyk6IExpa2V3aXNlLCBidXQgdW51c2VkIGZvciBub3cuCgkoZ2F0aGVyX21l bV9yZWZzX3N0bXQpOiBGYWlsIGlmIHRoZXJlIGFyZSB0b28gbWFueSBtZW1v cnkgcmVmZXJlbmNlcy4KCVVzZSBQQVJBTV9MT09QX01BWF9EQVRBUkVGU19G T1JfREFUQURFUFMgYXMgdGhyZXNob2xkLiAgQWRkIGRpc2FibGVkCglvcHRp bWl6YXRpb24gd2FybmluZy4KCShnYXRoZXJfbWVtX3JlZnNfaW5fbG9vcHMp OiBUYWtlIGxvb3BzX3dpdGhfdG9vX21hbnlfbWVtcmVmcyBhcmd1bWVudC4K CVByb3BhZ2F0ZSBpdCBmcm9tIGlubmVyIGxvb3BzIHRvIG91dGVyIGxvb3Bz LiAgRG8gbm90IHByb3BhZ2F0ZQoJcmVjb3JkZWQgbWVtb3J5IHJlZmVyZW5j ZXMgZm9yIGxvb3BzIG9uIHdoaWNoIG1lbW9yeSBvcHRpbWl6YXRpb25zCglh cmUgZGlzYWJsZWQuCgkoY3JlYXRlX3ZvcF9yZWZfbWFwcGluZyk6IFRha2Ug bG9vcHNfd2l0aF90b29fbWFueV9tZW1yZWZzIGFyZ3VtZW50LgoJRG9uJ3Qg Y3JlYXRlIGEgbWFwcGluZyBvbiBsb29wcyB0aGF0IGFyZSBpbiB0aGlzIHNl dC4KCShhbmFseXplX21lbW9yeV9yZWZlcmVuY2VzKTogVGFrZSBsb29wc193 aXRoX3Rvb19tYW55X21lbXJlZnMgYXJndW1lbnQKCWFuZCBsZXQgc3Vicm91 dGluZXMgZmlsbCBpdC4KCShzdG9yZV9tb3Rpb24pOiBUYWtlIGxvb3BzX3dp dGhfdG9vX21hbnlfbWVtcmVmcyBhcmd1bWVudC4KCVNraXAgbG9vcHMgdGhh dCBhcmUgaW4gdGhpcyBzZXQuCgkodHJlZV9zc2FfbGltKTogQWxsb2NhdGUs IHBhc3MsIGFuZCBmcmVlIGxvb3BzX3dpdGhfdG9vX21hbnlfbWVtcmVmcy4K CkluZGV4OiB0cmVlLWZsb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSB0cmVlLWZsb3cuaAkocmV2aXNpb24gMTk2NTc2KQorKysgdHJlZS1mbG93 LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4OCwxNiArNjg4LDYgQEAKIGV4dGVy biB2b2lkIHByb3BhZ2F0ZV90aHJlYWRlZF9ibG9ja19kZWJ1Z19pbnRvIChi YXNpY19ibG9jaywgYmFzaWNfYmxvY2spOwogCiAvKiBJbiB0cmVlLXNzYS1s b29wLWltLmMgICovCi0vKiBUaGUgcG9zc2liaWxpdGllcyBvZiBzdGF0ZW1l bnQgbW92ZW1lbnQuICAqLwotCi1lbnVtIG1vdmVfcG9zCi0gIHsKLSAgICBN T1ZFX0lNUE9TU0lCTEUsCQkvKiBObyBtb3ZlbWVudCAtLSBzaWRlIGVmZmVj dCBleHByZXNzaW9uLiAgKi8KLSAgICBNT1ZFX1BSRVNFUlZFX0VYRUNVVElP TiwJLyogTXVzdCBub3QgY2F1c2UgdGhlIG5vbi1leGVjdXRlZCBzdGF0ZW1l bnQKLQkJCQkgICBiZWNvbWUgZXhlY3V0ZWQgLS0gbWVtb3J5IGFjY2Vzc2Vz LCAuLi4gKi8KLSAgICBNT1ZFX1BPU1NJQkxFCQkvKiBVbmxpbWl0ZWQgbW92 ZW1lbnQuICAqLwotICB9OwotZXh0ZXJuIGVudW0gbW92ZV9wb3MgbW92ZW1l bnRfcG9zc2liaWxpdHkgKGdpbXBsZSk7CiBjaGFyICpnZXRfbHNtX3RtcF9u YW1lICh0cmVlLCB1bnNpZ25lZCk7CiAKIC8qIEluIHRyZWUtZmxvdy1pbmxp bmUuaCAgKi8KSW5kZXg6IHRyZWUtc3NhLWxvb3AtaW0uYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSB0cmVlLXNzYS1sb29wLWltLmMJKHJldmlzaW9u IDE5NjU3NikKKysrIHRyZWUtc3NhLWxvb3AtaW0uYwkod29ya2luZyBjb3B5 KQpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu Y2x1ZGUgInN5c3RlbS5oIgogI2luY2x1ZGUgImNvcmV0eXBlcy5oIgorI2lu Y2x1ZGUgImRpYWdub3N0aWMtY29yZS5oIgogI2luY2x1ZGUgInRtLmgiCiAj aW5jbHVkZSAidHJlZS5oIgogI2luY2x1ZGUgInRtX3AuaCIKQEAgLTU4LDYg KzU5LDE2IEBACiAJIHNvbWV0aGluZzsKICAgICAgfSAgKi8KIAorLyogVGhl IHBvc3NpYmlsaXRpZXMgb2Ygc3RhdGVtZW50IG1vdmVtZW50LiAgKi8KKwor ZW51bSBtb3ZlX3BvcworeworICBNT1ZFX0lNUE9TU0lCTEUsICAgICAgICAg ICAgLyogTm8gbW92ZW1lbnQgLS0gc2lkZSBlZmZlY3QgZXhwcmVzc2lvbi4g ICovCisgIE1PVkVfUFJFU0VSVkVfRVhFQ1VUSU9OLCAgICAvKiBNdXN0IG5v dCBjYXVzZSB0aGUgbm9uLWV4ZWN1dGVkIHN0YXRlbWVudAorCQkJCSBiZWNv bWUgZXhlY3V0ZWQgLS0gbWVtb3J5IGFjY2Vzc2VzLCAuLi4gKi8KKyAgTU9W RV9QT1NTSUJMRSAgICAgICAgICAgICAgIC8qIFVubGltaXRlZCBtb3ZlbWVu dC4gICovCit9OworCiAvKiBBIHR5cGUgZm9yIHRoZSBsaXN0IG9mIHN0YXRl bWVudHMgdGhhdCBoYXZlIHRvIGJlIG1vdmVkIGluIG9yZGVyIHRvIGJlIGFi bGUKICAgIHRvIGhvaXN0IGFuIGludmFyaWFudCBjb21wdXRhdGlvbi4gICov CiAKQEAgLTMzMyw4ICszNDQsOSBAQAogICAgYmVjYXVzZSBpdCBtYXkgdHJh cCksIHJldHVybiBNT1ZFX1BSRVNFUlZFX0VYRUNVVElPTi4KICAgIE90aGVy d2lzZSByZXR1cm4gTU9WRV9JTVBPU1NJQkxFLiAgKi8KIAotZW51bSBtb3Zl X3BvcwotbW92ZW1lbnRfcG9zc2liaWxpdHkgKGdpbXBsZSBzdG10KQorc3Rh dGljIGVudW0gbW92ZV9wb3MKK21vdmVtZW50X3Bvc3NpYmlsaXR5IChnaW1w bGUgc3RtdCwgc3RydWN0IGxvb3AgKmxvb3AsCisJCSAgICAgIGJpdG1hcCBs b29wc193aXRoX3Rvb19tYW55X21lbXJlZnMpCiB7CiAgIHRyZWUgbGhzOwog ICBlbnVtIG1vdmVfcG9zIHJldCA9IE1PVkVfUE9TU0lCTEU7CkBAIC0zNDcs NiArMzU5LDEwIEBACiAgICAgICByZXR1cm4gTU9WRV9QT1NTSUJMRTsKICAg ICB9CiAKKyAgaWYgKGdpbXBsZV9oYXNfbWVtX29wcyAoc3RtdCkKKyAgICAg ICYmIGJpdG1hcF9iaXRfcCAobG9vcHNfd2l0aF90b29fbWFueV9tZW1yZWZz LCBsb29wLT5udW0pKQorICAgIHJldHVybiBNT1ZFX0lNUE9TU0lCTEU7CisK ICAgaWYgKGdpbXBsZV9jb2RlIChzdG10KSA9PSBHSU1QTEVfUEhJCiAgICAg ICAmJiBnaW1wbGVfcGhpX251bV9hcmdzIChzdG10KSA8PSAyCiAgICAgICAm JiAhdmlydHVhbF9vcGVyYW5kX3AgKGdpbXBsZV9waGlfcmVzdWx0IChzdG10 KSkKQEAgLTc0MSwxNCArNzU3LDE5IEBACiAgICBTVE1UIGFuZCBzdG9yZSBp dCB0byBMSU1fREFUQSAoU1RNVCktPm1heF9sb29wLiAgVG8gZG8gdGhpcyB3 ZSBkZXRlcm1pbmUKICAgIHRoZSBvdXRlcm1vc3QgbG9vcCBpbiB0aGF0IHRo ZSB2YWx1ZSBjb21wdXRlZCBieSBTVE1UIGlzIGludmFyaWFudC4KICAgIElm IE1VU1RfUFJFU0VSVkVfRVhFQyBpcyB0cnVlLCBhZGRpdGlvbmFsbHkgY2hv b3NlIHN1Y2ggYSBsb29wIHRoYXQKLSAgIHdlIHByZXNlcnZlIHRoZSBmYWN0 IHdoZXRoZXIgU1RNVCBpcyBleGVjdXRlZC4gIEl0IGFsc28gZmlsbHMgb3Ro ZXIgcmVsYXRlZAotICAgaW5mb3JtYXRpb24gdG8gTElNX0RBVEEgKFNUTVQp LgorICAgd2UgcHJlc2VydmUgdGhlIGZhY3Qgd2hldGhlciBTVE1UIGlzIGV4 ZWN1dGVkLiAgSXQgYWxzbyBmaWxscyBvdGhlcgorICAgcmVsYXRlZCBpbmZv cm1hdGlvbiB0byBMSU1fREFUQSAoU1RNVCkuCisKKyAgIExvb3BzIHdpdGgg dG9vIG1hbnkgbWVtb3J5IHJlZmVyZW5jZXMgYWN0IGFzIGJhcnJpZXJzLCBp LmUuIHN0YXRlbWVudHMKKyAgIHRoYXQgcmVmZXJlbmNlIG1lbW9yeSBjYW5u b3QgYmUgbW92ZWQgaW50byBvciB0aHJvdWdoIG91dGVyIGxvb3BzIGluIHRo ZQorICAgTE9PUFNfV0lUSF9UT09fTUFOWV9NRU1SRUZTIHNldC4KIAotICAg VGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgaWYgU1RNVCBjYW5ub3QgYmUg aG9pc3RlZCBvdXRzaWRlIG9mIHRoZSBsb29wIGl0Ci0gICBpcyBkZWZpbmVk IGluLCBhbmQgdHJ1ZSBvdGhlcndpc2UuICAqLworICAgVGhlIGZ1bmN0aW9u IHJldHVybnMgZmFsc2UgaWYgU1RNVCBjYW5ub3QgYmUgaG9pc3RlZCBvdXRz aWRlIG9mIHRoZSBsb29wCisgICBpdCBpcyBkZWZpbmVkIGluLCBhbmQgdHJ1 ZSBvdGhlcndpc2UuICAqLwogCiBzdGF0aWMgYm9vbAotZGV0ZXJtaW5lX21h eF9tb3ZlbWVudCAoZ2ltcGxlIHN0bXQsIGJvb2wgbXVzdF9wcmVzZXJ2ZV9l eGVjKQorZGV0ZXJtaW5lX21heF9tb3ZlbWVudCAoZ2ltcGxlIHN0bXQsIGJv b2wgbXVzdF9wcmVzZXJ2ZV9leGVjLAorCQkJYml0bWFwIGxvb3BzX3dpdGhf dG9vX21hbnlfbWVtcmVmcykKIHsKICAgYmFzaWNfYmxvY2sgYmIgPSBnaW1w bGVfYmIgKHN0bXQpOwogICBzdHJ1Y3QgbG9vcCAqbG9vcCA9IGJiLT5sb29w X2ZhdGhlcjsKQEAgLTc1NywxMCArNzc4LDMxIEBACiAgIHRyZWUgdmFsOwog ICBzc2Ffb3BfaXRlciBpdGVyOwogCi0gIGlmIChtdXN0X3ByZXNlcnZlX2V4 ZWMpCi0gICAgbGV2ZWwgPSBBTFdBWVNfRVhFQ1VURURfSU4gKGJiKTsKKyAg LyogSWYgU1RNVCBkb2VzIG5vdCByZWZlcmVuY2UgbWVtb3J5LCB0aGUgbWF4 aW11bSBvdXRlciBsb29wIGlzCisgICAgIGVhc2lseSBmb3VuZC4gIE90aGVy d2lzZSB3ZSBuZWVkIHRvIHdhbGsgZG93biB0aGUgbG9vcCB0cmVlLiAgKi8K KyAgaWYgKGJpdG1hcF9lbXB0eV9wIChsb29wc193aXRoX3Rvb19tYW55X21l bXJlZnMpCisgICAgICB8fCAhIGdpbXBsZV9oYXNfbWVtX29wcyAoc3RtdCkp CisgICAgeworICAgICAgaWYgKG11c3RfcHJlc2VydmVfZXhlYykKKwlsZXZl bCA9IEFMV0FZU19FWEVDVVRFRF9JTiAoYmIpOworICAgICAgZWxzZQorCWxl dmVsID0gc3VwZXJsb29wX2F0X2RlcHRoIChsb29wLCAxKTsKKyAgICB9CiAg IGVsc2UKLSAgICBsZXZlbCA9IHN1cGVybG9vcF9hdF9kZXB0aCAobG9vcCwg MSk7CisgICAgeworICAgICAgZm9yIChsZXZlbCA9IGxvb3A7CisJICAgbG9v cF9vdXRlciAobGV2ZWwpICE9IGN1cnJlbnRfbG9vcHMtPnRyZWVfcm9vdDsK KwkgICBsZXZlbCA9IGxvb3Bfb3V0ZXIgKGxldmVsKSkKKwl7CisJICBpZiAo KG11c3RfcHJlc2VydmVfZXhlYyAmJiBsZXZlbCA9PSBBTFdBWVNfRVhFQ1VU RURfSU4gKGJiKSkKKwkgICAgICB8fCBiaXRtYXBfYml0X3AgKGxvb3BzX3dp dGhfdG9vX21hbnlfbWVtcmVmcywKKwkJCSAgICAgICBsb29wX291dGVyIChs ZXZlbCktPm51bSkpCisJICAgIGJyZWFrOworCX0KKyAgICAgIGlmIChsZXZl bCA9PSBsb29wKQorCXJldHVybiBmYWxzZTsKKyAgICB9CisKICAgbGltX2Rh dGEtPm1heF9sb29wID0gbGV2ZWw7CiAKICAgaWYgKGdpbXBsZV9jb2RlIChz dG10KSA9PSBHSU1QTEVfUEhJKQpAQCAtMTA0MCw3ICsxMDgyLDcgQEAKICAg IENhbGxiYWNrIGZvciB3YWxrX2RvbWluYXRvcl90cmVlLiAgKi8KIAogc3Rh dGljIHZvaWQKLWRldGVybWluZV9pbnZhcmlhbnRuZXNzX3N0bXQgKHN0cnVj dCBkb21fd2Fsa19kYXRhICpkd19kYXRhIEFUVFJJQlVURV9VTlVTRUQsCitk ZXRlcm1pbmVfaW52YXJpYW50bmVzc19zdG10IChzdHJ1Y3QgZG9tX3dhbGtf ZGF0YSAqZHdfZGF0YSwKIAkJCSAgICAgIGJhc2ljX2Jsb2NrIGJiKQogewog ICBlbnVtIG1vdmVfcG9zIHBvczsKQEAgLTEwNDksNiArMTA5MSw3IEBACiAg IGJvb2wgbWF5YmVfbmV2ZXIgPSBBTFdBWVNfRVhFQ1VURURfSU4gKGJiKSA9 PSBOVUxMOwogICBzdHJ1Y3QgbG9vcCAqb3V0ZXJtb3N0ID0gQUxXQVlTX0VY RUNVVEVEX0lOIChiYik7CiAgIHN0cnVjdCBsaW1fYXV4X2RhdGEgKmxpbV9k YXRhOworICBiaXRtYXAgbG9vcHNfd2l0aF90b29fbWFueV9tZW1yZWZzID0g KGJpdG1hcCkgZHdfZGF0YS0+Z2xvYmFsX2RhdGE7CiAKICAgaWYgKCFsb29w X291dGVyIChiYi0+bG9vcF9mYXRoZXIpKQogICAgIHJldHVybjsKQEAgLTEw NjksMTQgKzExMTIsMTYgQEAKICAgICAgIHsKIAlzdG10ID0gZ3NpX3N0bXQg KGJzaSk7CiAKLQlwb3MgPSBtb3ZlbWVudF9wb3NzaWJpbGl0eSAoc3RtdCk7 CisJcG9zID0gbW92ZW1lbnRfcG9zc2liaWxpdHkgKHN0bXQsIGJiLT5sb29w X2ZhdGhlciwKKwkJCQkgICAgbG9vcHNfd2l0aF90b29fbWFueV9tZW1yZWZz KTsKIAlpZiAocG9zID09IE1PVkVfSU1QT1NTSUJMRSkKIAkgIGNvbnRpbnVl OwogCiAJbGltX2RhdGEgPSBpbml0X2xpbV9kYXRhIChzdG10KTsKIAlsaW1f ZGF0YS0+YWx3YXlzX2V4ZWN1dGVkX2luID0gb3V0ZXJtb3N0OwogCi0JaWYg KCFkZXRlcm1pbmVfbWF4X21vdmVtZW50IChzdG10LCBmYWxzZSkpCisJaWYg KCFkZXRlcm1pbmVfbWF4X21vdmVtZW50IChzdG10LCBmYWxzZSwKKwkJCQkg ICAgIGxvb3BzX3dpdGhfdG9vX21hbnlfbWVtcmVmcykpCiAJICB7CiAJICAg IGxpbV9kYXRhLT5tYXhfbG9vcCA9IE5VTEw7CiAJICAgIGNvbnRpbnVlOwpA QCAtMTA5OCw3ICsxMTQzLDggQEAKICAgICB7CiAgICAgICBzdG10ID0gZ3Np X3N0bXQgKGJzaSk7CiAKLSAgICAgIHBvcyA9IG1vdmVtZW50X3Bvc3NpYmls aXR5IChzdG10KTsKKyAgICAgIHBvcyA9IG1vdmVtZW50X3Bvc3NpYmlsaXR5 IChzdG10LCBiYi0+bG9vcF9mYXRoZXIsCisJCQkJICBsb29wc193aXRoX3Rv b19tYW55X21lbXJlZnMpOwogICAgICAgaWYgKHBvcyA9PSBNT1ZFX0lNUE9T U0lCTEUpCiAJewogCSAgaWYgKG5vbnB1cmVfY2FsbF9wIChzdG10KSkKQEAg LTExMTYsNyArMTE2Miw4IEBACiAJICBjb250aW51ZTsKIAl9CiAKLSAgICAg IGlmIChpc19naW1wbGVfYXNzaWduIChzdG10KQorICAgICAgaWYgKHBvcyA9 PSBNT1ZFX1BPU1NJQkxFCisJICAmJiBpc19naW1wbGVfYXNzaWduIChzdG10 KQogCSAgJiYgKGdldF9naW1wbGVfcmhzX2NsYXNzIChnaW1wbGVfYXNzaWdu X3Joc19jb2RlIChzdG10KSkKIAkgICAgICA9PSBHSU1QTEVfQklOQVJZX1JI UykpCiAJewpAQCAtMTEyNyw4ICsxMTc0LDcgQEAKIAogCSAgLyogSWYgZGl2 aXNvciBpcyBpbnZhcmlhbnQsIGNvbnZlcnQgYS9iIHRvIGEqKDEvYiksIGFs bG93aW5nIHJlY2lwcm9jYWwKIAkgICAgIHRvIGJlIGhvaXN0ZWQgb3V0IG9m IGxvb3AsIHNhdmluZyBleHBlbnNpdmUgZGl2aWRlLiAgKi8KLQkgIGlmIChw b3MgPT0gTU9WRV9QT1NTSUJMRQotCSAgICAgICYmIGdpbXBsZV9hc3NpZ25f cmhzX2NvZGUgKHN0bXQpID09IFJESVZfRVhQUgorCSAgaWYgKGdpbXBsZV9h c3NpZ25fcmhzX2NvZGUgKHN0bXQpID09IFJESVZfRVhQUgogCSAgICAgICYm IGZsYWdfdW5zYWZlX21hdGhfb3B0aW1pemF0aW9ucwogCSAgICAgICYmICFm bGFnX3RyYXBwaW5nX21hdGgKIAkgICAgICAmJiBvbDEgIT0gTlVMTApAQCAt MTEzOCw4ICsxMTg0LDcgQEAKIAkgIC8qIElmIHRoZSBzaGlmdCBjb3VudCBp cyBpbnZhcmlhbnQsIGNvbnZlcnQgKEEgPj4gQikgJiAxIHRvCiAJICAgICBB ICYgKDEgPDwgQikgYWxsb3dpbmcgdGhlIGJpdCBtYXNrIHRvIGJlIGhvaXN0 ZWQgb3V0IG9mIHRoZSBsb29wCiAJICAgICBzYXZpbmcgYW4gZXhwZW5zaXZl IHNoaWZ0LiAgKi8KLQkgIGlmIChwb3MgPT0gTU9WRV9QT1NTSUJMRQotCSAg ICAgICYmIGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKHN0bXQpID09IEJJVF9B TkRfRVhQUgorCSAgaWYgKGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKHN0bXQp ID09IEJJVF9BTkRfRVhQUgogCSAgICAgICYmIGludGVnZXJfb25lcCAob3Ax KQogCSAgICAgICYmIFRSRUVfQ09ERSAob3AwKSA9PSBTU0FfTkFNRQogCSAg ICAgICYmIGhhc19zaW5nbGVfdXNlIChvcDApKQpAQCAtMTE1Miw3ICsxMTk3 LDggQEAKICAgICAgIGlmIChtYXliZV9uZXZlciAmJiBwb3MgPT0gTU9WRV9Q UkVTRVJWRV9FWEVDVVRJT04pCiAJY29udGludWU7CiAKLSAgICAgIGlmICgh ZGV0ZXJtaW5lX21heF9tb3ZlbWVudCAoc3RtdCwgcG9zID09IE1PVkVfUFJF U0VSVkVfRVhFQ1VUSU9OKSkKKyAgICAgIGlmICghZGV0ZXJtaW5lX21heF9t b3ZlbWVudCAoc3RtdCwgcG9zID09IE1PVkVfUFJFU0VSVkVfRVhFQ1VUSU9O LAorCQkJCSAgIGxvb3BzX3dpdGhfdG9vX21hbnlfbWVtcmVmcykpCiAJewog CSAgbGltX2RhdGEtPm1heF9sb29wID0gTlVMTDsKIAkgIGNvbnRpbnVlOwpA QCAtMTE3NywxMyArMTIyMywxNCBAQAogICAgZWFjaCBzdGF0ZW1lbnQuICAq LwogCiBzdGF0aWMgdm9pZAotZGV0ZXJtaW5lX2ludmFyaWFudG5lc3MgKHZv aWQpCitkZXRlcm1pbmVfaW52YXJpYW50bmVzcyAoYml0bWFwIGxvb3BzX3dp dGhfdG9vX21hbnlfbWVtcmVmcykKIHsKICAgc3RydWN0IGRvbV93YWxrX2Rh dGEgd2Fsa19kYXRhOwogCiAgIG1lbXNldCAoJndhbGtfZGF0YSwgMCwgc2l6 ZW9mIChzdHJ1Y3QgZG9tX3dhbGtfZGF0YSkpOwogICB3YWxrX2RhdGEuZG9t X2RpcmVjdGlvbiA9IENESV9ET01JTkFUT1JTOwogICB3YWxrX2RhdGEuYmVm b3JlX2RvbV9jaGlsZHJlbiA9IGRldGVybWluZV9pbnZhcmlhbnRuZXNzX3N0 bXQ7CisgIHdhbGtfZGF0YS5nbG9iYWxfZGF0YSA9IGxvb3BzX3dpdGhfdG9v X21hbnlfbWVtcmVmczsKIAogICBpbml0X3dhbGtfZG9taW5hdG9yX3RyZWUg KCZ3YWxrX2RhdGEpOwogICB3YWxrX2RvbWluYXRvcl90cmVlICgmd2Fsa19k YXRhLCBFTlRSWV9CTE9DS19QVFIpOwpAQCAtMTMyOSw3ICsxMzc2LDcgQEAK ICAgIExJTV9EQVRBIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2gg c3RhdGVtZW50LiovCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKLW1vdmVfY29t cHV0YXRpb25zICh2b2lkKQorbW92ZV9jb21wdXRhdGlvbnMgKGJpdG1hcCBs b29wc193aXRoX3Rvb19tYW55X21lbXJlZnMgQVRUUklCVVRFX1VOVVNFRCkK IHsKICAgc3RydWN0IGRvbV93YWxrX2RhdGEgd2Fsa19kYXRhOwogICB1bnNp Z25lZCBpbnQgdG9kbyA9IDA7CkBAIC0xNTI0LDggKzE1NzEsNyBAQAogICBt ZW1fcmVmX2xvY3NfcCBhY2NzOwogICBiaXRtYXAgcmlsID0gbWVtb3J5X2Fj Y2Vzc2VzLnJlZnNfaW5fbG9vcFtsb29wLT5udW1dOwogCi0gIGlmIChyZWYt PmFjY2Vzc2VzX2luX2xvb3AubGVuZ3RoICgpCi0gICAgICA8PSAodW5zaWdu ZWQpIGxvb3AtPm51bSkKKyAgaWYgKHJlZi0+YWNjZXNzZXNfaW5fbG9vcC5s ZW5ndGggKCkgPD0gKHVuc2lnbmVkKSBsb29wLT5udW0pCiAgICAgcmVmLT5h Y2Nlc3Nlc19pbl9sb29wLnNhZmVfZ3Jvd19jbGVhcmVkIChsb29wLT5udW0g KyAxKTsKICAgYWNjcyA9IHJlZi0+YWNjZXNzZXNfaW5fbG9vcFtsb29wLT5u dW1dOwogICBpZiAoIWFjY3MpCkBAIC0xNTU2LDkgKzE2MDIsMTAgQEAKIC8q IEdhdGhlcnMgbWVtb3J5IHJlZmVyZW5jZXMgaW4gc3RhdGVtZW50IFNUTVQg aW4gTE9PUCwgc3RvcmluZyB0aGUKICAgIGluZm9ybWF0aW9uIGFib3V0IHRo ZW0gaW4gdGhlIG1lbW9yeV9hY2Nlc3NlcyBzdHJ1Y3R1cmUuICBNYXJrcwog ICAgdGhlIHZvcHMgYWNjZXNzZWQgdGhyb3VnaCB1bnJlY29nbml6ZWQgc3Rh dGVtZW50cyB0aGVyZSBhcwotICAgd2VsbC4gICovCisgICB3ZWxsLiAgUmV0 dXJuIHRydWUgaWYgYWxsIGlzIHdlbGwsIGZhbHNlIGlmIHNvbWV0aGluZyBo YXBwZW5lZAorICAgdGhhdCBpcyBmYXRhbCB0byB0aGUgcmVzdCBvZiB0aGUg TElNIHBhc3MuICAqLwogCi1zdGF0aWMgdm9pZAorc3RhdGljIGJvb2wKIGdh dGhlcl9tZW1fcmVmc19zdG10IChzdHJ1Y3QgbG9vcCAqbG9vcCwgZ2ltcGxl IHN0bXQpCiB7CiAgIHRyZWUgKm1lbSA9IE5VTEw7CkBAIC0xNTY5LDEyICsx NjE2LDI0IEBACiAgIHVuc2lnbmVkIGlkOwogCiAgIGlmICghZ2ltcGxlX3Z1 c2UgKHN0bXQpKQotICAgIHJldHVybjsKKyAgICByZXR1cm4gdHJ1ZTsKKwor ICBpZCA9IG1lbW9yeV9hY2Nlc3Nlcy5yZWZzX2xpc3QubGVuZ3RoICgpOwor ICBpZiAoaWQgPiAodW5zaWduZWQpIFBBUkFNX1ZBTFVFIChQQVJBTV9MT09Q X01BWF9EQVRBUkVGU19GT1JfREFUQURFUFMpKQorICAgIHsKKyAgICAgIGlm IChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCisJ ZnByaW50ZiAoZHVtcF9maWxlLCAiVG9vIG1hbnkgbWVtb3J5IHJlZmVyZW5j ZXMsIGdpdmluZyB1cCBvbiBsb29wLi4uXG4iKTsKKyAgICAgIHdhcm5pbmdf YXQgKGdpbXBsZV9sb2NhdGlvbiAoc3RtdCksCisJCSAgT1BUX1dkaXNhYmxl ZF9vcHRpbWl6YXRpb24sCisJCSAgIi1mdHJlZS1sb29wLWltOiBudW1iZXIg b2YgbWVtb3J5IHJlZmVyZW5jZXMgaW4gbG9vcCAiCisJCSAgImV4Y2VlZHMg dGhlIC0tcGFyYW0gbG9vcHMtbWF4LWRhdGFyZWZzLWZvci1kYXRhZGVwcyAi CisJCSAgInRocmVzaG9sZCIpOworICAgICAgcmV0dXJuIGZhbHNlOworICAg IH0KIAogICBtZW0gPSBzaW1wbGVfbWVtX3JlZl9pbl9zdG10IChzdG10LCAm aXNfc3RvcmVkKTsKICAgaWYgKCFtZW0pCiAgICAgewotICAgICAgaWQgPSBt ZW1vcnlfYWNjZXNzZXMucmVmc19saXN0Lmxlbmd0aCAoKTsKICAgICAgIHJl ZiA9IG1lbV9yZWZfYWxsb2MgKGVycm9yX21hcmtfbm9kZSwgMCwgaWQpOwog ICAgICAgbWVtb3J5X2FjY2Vzc2VzLnJlZnNfbGlzdC5zYWZlX3B1c2ggKHJl Zik7CiAgICAgICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERG X0RFVEFJTFMpKQpAQCAtMTU4NSw3ICsxNjQ0LDcgQEAKICAgICAgIGlmIChn aW1wbGVfdmRlZiAoc3RtdCkpCiAJbWFya19yZWZfc3RvcmVkIChyZWYsIGxv b3ApOwogICAgICAgcmVjb3JkX21lbV9yZWZfbG9jIChyZWYsIGxvb3AsIHN0 bXQsIG1lbSk7Ci0gICAgICByZXR1cm47CisgICAgICByZXR1cm4gdHJ1ZTsK ICAgICB9CiAKICAgaGFzaCA9IGl0ZXJhdGl2ZV9oYXNoX2V4cHIgKCptZW0s IDApOwpAQCAtMTYxNSwzNCArMTY3NCw1NiBAQAogICAgIG1hcmtfcmVmX3N0 b3JlZCAocmVmLCBsb29wKTsKIAogICByZWNvcmRfbWVtX3JlZl9sb2MgKHJl ZiwgbG9vcCwgc3RtdCwgbWVtKTsKLSAgcmV0dXJuOworICByZXR1cm4gdHJ1 ZTsKIH0KIAotLyogR2F0aGVycyBtZW1vcnkgcmVmZXJlbmNlcyBpbiBsb29w cy4gICovCisvKiBHYXRoZXJzIG1lbW9yeSByZWZlcmVuY2VzIGluIGxvb3Bz LgorICAgUmVjb3JkIGluIExPT1BTX1dJVEhfVE9PX01BTllfTUVNUkVGUyBs b29wcyB0aGF0IGhhdmUgc28gbWFueSBtZW1vcnkKKyAgIHJlZmVyZW5jaW5n IHN0YXRlbWVudHMgdGhhdCB0aGV5IGFyZSBjb25zaWRlcmVkIHRvbyBsYXJn ZSB0byBoYW5kbGUuICAqLwogCiBzdGF0aWMgdm9pZAotZ2F0aGVyX21lbV9y ZWZzX2luX2xvb3BzICh2b2lkKQorZ2F0aGVyX21lbV9yZWZzX2luX2xvb3Bz IChiaXRtYXAgbG9vcHNfd2l0aF90b29fbWFueV9tZW1yZWZzKQogewotICBn aW1wbGVfc3RtdF9pdGVyYXRvciBic2k7Ci0gIGJhc2ljX2Jsb2NrIGJiOwog ICBzdHJ1Y3QgbG9vcCAqbG9vcDsKICAgbG9vcF9pdGVyYXRvciBsaTsKICAg Yml0bWFwIGxyZWZzLCBhbHJlZnMsIGFscmVmc287CisgIGJhc2ljX2Jsb2Nr IGJiOworICBib29sIGFsbF9vayA9IHRydWU7CiAKICAgRk9SX0VBQ0hfQkIg KGJiKQogICAgIHsKLSAgICAgIGxvb3AgPSBiYi0+bG9vcF9mYXRoZXI7Cisg ICAgICBnaW1wbGVfc3RtdF9pdGVyYXRvciBic2k7CisgICAgICBzdHJ1Y3Qg bG9vcCAqbG9vcCA9IGJiLT5sb29wX2ZhdGhlcjsKICAgICAgIGlmIChsb29w ID09IGN1cnJlbnRfbG9vcHMtPnRyZWVfcm9vdCkKIAljb250aW51ZTsKIAot ICAgICAgZm9yIChic2kgPSBnc2lfc3RhcnRfYmIgKGJiKTsgIWdzaV9lbmRf cCAoYnNpKTsgZ3NpX25leHQgKCZic2kpKQotCWdhdGhlcl9tZW1fcmVmc19z dG10IChsb29wLCBnc2lfc3RtdCAoYnNpKSk7CisgICAgICBmb3IgKGJzaSA9 IGdzaV9zdGFydF9iYiAoYmIpOworCSAgICFnc2lfZW5kX3AgKGJzaSkgJiYg YWxsX29rOworCSAgIGdzaV9uZXh0ICgmYnNpKSkKKwlhbGxfb2sgPSBnYXRo ZXJfbWVtX3JlZnNfc3RtdCAobG9vcCwgZ3NpX3N0bXQgKGJzaSkpOworCisg ICAgICBpZiAoISBhbGxfb2spCisgICAgICAgIGJpdG1hcF9zZXRfYml0IChs b29wc193aXRoX3Rvb19tYW55X21lbXJlZnMsIGxvb3AtPm51bSk7CisgICAg fQorCisgIC8qIFByb3BhZ2F0ZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgbG9v cHMgd2l0aCB0b28gbWFueSBtZW1vcnkKKyAgICAgcmVmZXJlbmNlcyB1cCB0 aGUgbG9vcCBoaWVyYXJjaHkuICAqLworICBGT1JfRUFDSF9MT09QIChsaSwg bG9vcCwgTElfRlJPTV9JTk5FUk1PU1QpCisgICAgeworICAgICAgc3RydWN0 IGxvb3AgKm91dGVyID0gbG9vcF9vdXRlciAobG9vcCk7CisgICAgICBpZiAo b3V0ZXIgPT0gY3VycmVudF9sb29wcy0+dHJlZV9yb290CisJICB8fCAhIGJp dG1hcF9iaXRfcCAobG9vcHNfd2l0aF90b29fbWFueV9tZW1yZWZzLCBsb29w LT5udW0pKQorCWNvbnRpbnVlOworICAgICAgYml0bWFwX3NldF9iaXQgKGxv b3BzX3dpdGhfdG9vX21hbnlfbWVtcmVmcywgb3V0ZXItPm51bSk7CiAgICAg fQogCiAgIC8qIFByb3BhZ2F0ZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYWNj ZXNzZWQgbWVtb3J5IHJlZmVyZW5jZXMgdXAKICAgICAgdGhlIGxvb3AgaGll cmFyY2h5LiAgKi8KICAgRk9SX0VBQ0hfTE9PUCAobGksIGxvb3AsIExJX0ZS T01fSU5ORVJNT1NUKQogICAgIHsKKyAgICAgIGlmIChiaXRtYXBfYml0X3Ag KGxvb3BzX3dpdGhfdG9vX21hbnlfbWVtcmVmcywgbG9vcC0+bnVtKSkKKwlj b250aW51ZTsKKwogICAgICAgbHJlZnMgPSBtZW1vcnlfYWNjZXNzZXMucmVm c19pbl9sb29wW2xvb3AtPm51bV07CiAgICAgICBhbHJlZnMgPSBtZW1vcnlf YWNjZXNzZXMuYWxsX3JlZnNfaW5fbG9vcFtsb29wLT5udW1dOwogICAgICAg Yml0bWFwX2lvcl9pbnRvIChhbHJlZnMsIGxyZWZzKTsKQEAgLTE2ODUsMjEg KzE3NjYsMjIgQEAKICAgIHJlZmVyZW5jZXMgaW4gdGhpcyBsb29wIHRoYXQg dG91Y2ggdGhlIG9wZXJhbmQuICAqLwogCiBzdGF0aWMgdm9pZAotY3JlYXRl X3ZvcF9yZWZfbWFwcGluZyAodm9pZCkKK2NyZWF0ZV92b3BfcmVmX21hcHBp bmcgKGJpdG1hcCBsb29wc193aXRoX3Rvb19tYW55X21lbXJlZnMpCiB7CiAg IGxvb3BfaXRlcmF0b3IgbGk7CiAgIHN0cnVjdCBsb29wICpsb29wOwogCiAg IEZPUl9FQUNIX0xPT1AgKGxpLCBsb29wLCAwKQogICAgIHsKLSAgICAgIGNy ZWF0ZV92b3BfcmVmX21hcHBpbmdfbG9vcCAobG9vcCk7CisgICAgICBpZiAo ISBiaXRtYXBfYml0X3AgKGxvb3BzX3dpdGhfdG9vX21hbnlfbWVtcmVmcywg bG9vcC0+bnVtKSkKKwljcmVhdGVfdm9wX3JlZl9tYXBwaW5nX2xvb3AgKGxv b3ApOwogICAgIH0KIH0KIAogLyogR2F0aGVycyBpbmZvcm1hdGlvbiBhYm91 dCBtZW1vcnkgYWNjZXNzZXMgaW4gdGhlIGxvb3BzLiAgKi8KIAotc3RhdGlj IHZvaWQKLWFuYWx5emVfbWVtb3J5X3JlZmVyZW5jZXMgKHZvaWQpCitzdGF0 aWMgdm9pZCAKK2FuYWx5emVfbWVtb3J5X3JlZmVyZW5jZXMgKGJpdG1hcCBs b29wc193aXRoX3Rvb19tYW55X21lbXJlZnMpCiB7CiAgIHVuc2lnbmVkIGk7 CiAgIGJpdG1hcCBlbXB0eTsKQEAgLTE3MjEsOSArMTgwMyw4IEBACiAgICAg fQogCiAgIG1lbW9yeV9hY2Nlc3Nlcy50dGFlX2NhY2hlID0gTlVMTDsKLQot ICBnYXRoZXJfbWVtX3JlZnNfaW5fbG9vcHMgKCk7Ci0gIGNyZWF0ZV92b3Bf cmVmX21hcHBpbmcgKCk7CisgIGdhdGhlcl9tZW1fcmVmc19pbl9sb29wcyAo bG9vcHNfd2l0aF90b29fbWFueV9tZW1yZWZzKTsKKyAgY3JlYXRlX3ZvcF9y ZWZfbWFwcGluZyAobG9vcHNfd2l0aF90b29fbWFueV9tZW1yZWZzKTsKIH0K IAogLyogUmV0dXJucyB0cnVlIGlmIE1FTTEgYW5kIE1FTTIgbWF5IGFsaWFz LiAgVFRBRV9DQUNIRSBpcyB1c2VkIGFzIGEgY2FjaGUgaW4KQEAgLTI0NjUs MTMgKzI1NDYsMTQgQEAKICAgIGxvb3BzLiAgKi8KIAogc3RhdGljIHZvaWQK LXN0b3JlX21vdGlvbiAodm9pZCkKK3N0b3JlX21vdGlvbiAoYml0bWFwIGxv b3BzX3dpdGhfdG9vX21hbnlfbWVtcmVmcykKIHsKICAgc3RydWN0IGxvb3Ag Kmxvb3A7CiAgIGJpdG1hcCBzbV9leGVjdXRlZCA9IEJJVE1BUF9BTExPQyAo TlVMTCk7CiAKICAgZm9yIChsb29wID0gY3VycmVudF9sb29wcy0+dHJlZV9y b290LT5pbm5lcjsgbG9vcCAhPSBOVUxMOyBsb29wID0gbG9vcC0+bmV4dCkK LSAgICBzdG9yZV9tb3Rpb25fbG9vcCAobG9vcCwgc21fZXhlY3V0ZWQpOwor ICAgIGlmICghIGJpdG1hcF9iaXRfcCAobG9vcHNfd2l0aF90b29fbWFueV9t ZW1yZWZzLCBsb29wLT5udW0pKQorICAgICAgc3RvcmVfbW90aW9uX2xvb3Ag KGxvb3AsIHNtX2V4ZWN1dGVkKTsKIAogICBCSVRNQVBfRlJFRSAoc21fZXhl Y3V0ZWQpOwogICBnc2lfY29tbWl0X2VkZ2VfaW5zZXJ0cyAoKTsKQEAgLTI2 MjIsMjEgKzI3MDQsMjkgQEAKIHsKICAgdW5zaWduZWQgaW50IHRvZG87CiAK KyAgLyogVGhlIHNldCBvZiBsb29wcyB0byB3aGljaCB3ZSBjYW5ub3QgYXBw bHkgb3VyIG1lbW9yeSBvcHRpbWl6YXRpb25zLgorICAgICBGb3Igbm93LCB3 ZSBwdW50IG9uIGxvb3BzIHdpdGggbW9yZSBtYW55IG1lbW9yeSByZWZlcmVu Y2VzIHRoYXQgd2UKKyAgICAgYXJlIHByZXBhcmVkIHRvIGhhbmRsZSAoZS5n LiB0byBhdm9pZCBxdWFkcmF0aWMgdGltZSBjb21wbGV4aXR5CisgICAgIGlz c3VlcyB3aGVuIGNoZWNraW5nIGZvciBtZW1vcnkgZGVwZW5kZW5jaWVzKS4g ICovCisgIGJpdG1hcCBsb29wc193aXRoX3Rvb19tYW55X21lbXJlZnMgPSBC SVRNQVBfQUxMT0MgKE5VTEwpOworCiAgIHRyZWVfc3NhX2xpbV9pbml0aWFs aXplICgpOwogCiAgIC8qIEdhdGhlcnMgaW5mb3JtYXRpb24gYWJvdXQgbWVt b3J5IGFjY2Vzc2VzIGluIHRoZSBsb29wcy4gICovCi0gIGFuYWx5emVfbWVt b3J5X3JlZmVyZW5jZXMgKCk7CisgIGFuYWx5emVfbWVtb3J5X3JlZmVyZW5j ZXMgKGxvb3BzX3dpdGhfdG9vX21hbnlfbWVtcmVmcyk7CiAKICAgLyogRm9y IGVhY2ggc3RhdGVtZW50IGRldGVybWluZSB0aGUgb3V0ZXJtb3N0IGxvb3Ag aW4gdGhhdCBpdCBpcwogICAgICBpbnZhcmlhbnQgYW5kIGNvc3QgZm9yIGNv bXB1dGluZyB0aGUgaW52YXJpYW50LiAgKi8KLSAgZGV0ZXJtaW5lX2ludmFy aWFudG5lc3MgKCk7CisgIGRldGVybWluZV9pbnZhcmlhbnRuZXNzIChsb29w c193aXRoX3Rvb19tYW55X21lbXJlZnMpOwogCiAgIC8qIEV4ZWN1dGUgc3Rv cmUgbW90aW9uLiAgRm9yY2UgdGhlIG5lY2Vzc2FyeSBpbnZhcmlhbnRzIHRv IGJlIG1vdmVkCiAgICAgIG91dCBvZiB0aGUgbG9vcHMgYXMgd2VsbC4gICov Ci0gIHN0b3JlX21vdGlvbiAoKTsKKyAgc3RvcmVfbW90aW9uIChsb29wc193 aXRoX3Rvb19tYW55X21lbXJlZnMpOwogCiAgIC8qIE1vdmUgdGhlIGV4cHJl c3Npb25zIHRoYXQgYXJlIGV4cGVuc2l2ZSBlbm91Z2guICAqLwotICB0b2Rv ID0gbW92ZV9jb21wdXRhdGlvbnMgKCk7CisgIHRvZG8gPSBtb3ZlX2NvbXB1 dGF0aW9ucyAobG9vcHNfd2l0aF90b29fbWFueV9tZW1yZWZzKTsKKworICBC SVRNQVBfRlJFRSAobG9vcHNfd2l0aF90b29fbWFueV9tZW1yZWZzKTsKIAog ICB0cmVlX3NzYV9saW1fZmluYWxpemUgKCk7CiAK --bcaec54b5438b5737d04d787b31a--