From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 92645 invoked by alias); 12 Oct 2015 01:19:37 -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 92636 invoked by uid 89); 12 Oct 2015 01:19:36 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Mon, 12 Oct 2015 01:19:33 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id AA474C0C1B07 for ; Mon, 12 Oct 2015 01:19:31 +0000 (UTC) Received: from localhost.localdomain (ovpn-113-105.phx2.redhat.com [10.3.113.105]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t9C1JVvm008506 for ; Sun, 11 Oct 2015 21:19:31 -0400 To: gcc-patches From: Jeff Law Subject: [PATCH] Refactoring FSM bits into their own file Message-ID: <561B0AA2.5020602@redhat.com> Date: Mon, 12 Oct 2015 01:19:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040402030202040909010802" X-IsSubscribed: yes X-SW-Source: 2015-10/txt/msg01088.txt.bz2 This is a multi-part message in MIME format. --------------040402030202040909010802 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1818 This was spurred a bit by the need to fix 67892, which is a problem with the old threader's support for threading across backedges. I've indicated in the past that I'd like to simply drop that code. It's fragile and generally just a PITA. The functionality would be replaced by Sebastian's FSM jump threading code. Sebastian's code should also form the basis for a jump threader that operates independently of DOM/VRP with the ultimate goal of totally dropping the old threader. That's obviously further out, but that's where I'm going. There are things Sebastian's code doesn't handle, some of which I already know how to fix, some of which are still TBD. But there's no reason to not start this process. The first step in my mind is to get Sebastian's code factored out of tree-ssa-threadedge.c. tree-ssa-threadedge.c will still use a single entry point in Sebastian's code during the transition. That single entry point can also be used by a distinct jump threading pass (I've already done this as a proof of concept locally). Once factored out, I can start enhancing Sebastian's code under the hood to start handling the missing cases with an eye towards handling enough cases that I can remove the old threader's support for threading across backedges (thus fixing 67892 along the way). This patch strictly moves bits out of tree-ssa-threadedge.c into a new file tree-ssa-threadbackwards.[ch] and minimizes the headers included by tree-ssa-threadedge.c. I chose "backwards" over "fsm" as I see this going to a place that is far more general than the FSM optimization, basically a backwards walking jump threader. The patch changes no logic or even the "fsm" references in the existing code. Bootstrapped and regression tested on x86_64-linux-gnu. Installed on the trunk. jeff --------------040402030202040909010802 Content-Type: text/plain; charset=UTF-8; name="P" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="P" Content-length: 30346 ZGlmZiAtLWdpdCBhL2djYy9DaGFuZ2VMb2cgYi9nY2MvQ2hhbmdlTG9nCmlu ZGV4IGIzOWQ2YTUuLmVmZjllZWEgMTAwNjQ0Ci0tLSBhL2djYy9DaGFuZ2VM b2cKKysrIGIvZ2NjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE1 LTEwLTExICBKZWZmIExhdyAgPGxhd0ByZWRoYXQuY29tPgorCisJKiB0cmVl LXNzYS10aHJlYWRlZGdlLmMgKGZzbV9maW5kX3RocmVhZF9wYXRoKTogTW92 ZWQgZnJvbSBoZXJlIGludG8KKwl0cmVlLXNzYS10aHJlYWRiYWNrd2FyZC5j LgorCShmc21fZmluZF9jb250cm9sX3N0YXRlbWVudF90aHJlYWRfcGF0aHMp OiBMaWtld2lzZS4KKwkodGhyZWFkX3Rocm91Z2hfbm9ybWFsX2Jsb2NrKTog QnJlYWsgb3V0IEZTTSBiaXRzIGFuZCBtb3ZlIHRoZW0KKwlpbnRvIGEgbmV3 IGZ1bmN0aW9uIGluIHRyZWUtc3NhLXRocmVhZGJhY2t3YXJkLmMuICBDYWxs IG5ldyBmdW5jdGlvbgorCWluc3RlYWQuCisJTWluaW1pemUgaGVhZGVyIGZp bGUgdXNhZ2UuCisJKiB0cmVlLXNzYS10aHJlYWRiYWNrd2FyZC5oOiBOZXcg ZmlsZS4KKwkqIHRyZWUtc3NhLXRocmVhZGJhY2t3YXJkLmM6IExpa2V3aXNl LgorCSogTWFrZWZpbGUuaW4gKE9CSlMpOiBBZGQgdHJlZS1zc2EtdGhyZWFk YmFja3dhcmQubworCiAyMDE1LTEwLTExICBVcm9zIEJpemphayAgPHViaXpq YWtAZ21haWwuY29tPgogCiAJKiBjb25maWcvYWxwaGEvYWxwaGEuaCAoQUxQ SEFfUk9VTkQpOiBJbXBsZW1lbnQgdXNpbmcgUk9VTkRfVVAgbWFjcm8uCmRp ZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4K aW5kZXggMDA5Yzc0NS4uN2UzYWVmYSAxMDA2NDQKLS0tIGEvZ2NjL01ha2Vm aWxlLmluCisrKyBiL2djYy9NYWtlZmlsZS5pbgpAQCAtMTQ3OCw2ICsxNDc4 LDcgQEAgT0JKUyA9IFwKIAl0cmVlLXNzYS1zdHJ1Y3RhbGlhcy5vIFwKIAl0 cmVlLXNzYS10YWlsLW1lcmdlLm8gXAogCXRyZWUtc3NhLXRlci5vIFwKKwl0 cmVlLXNzYS10aHJlYWRiYWNrd2FyZC5vIFwKIAl0cmVlLXNzYS10aHJlYWRl ZGdlLm8gXAogCXRyZWUtc3NhLXRocmVhZHVwZGF0ZS5vIFwKIAl0cmVlLXNz YS11bmNwcm9wLm8gXApkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc3NhLXRocmVh ZGJhY2t3YXJkLmMgYi9nY2MvdHJlZS1zc2EtdGhyZWFkYmFja3dhcmQuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDEyYWEzCi0t LSAvZGV2L251bGwKKysrIGIvZ2NjL3RyZWUtc3NhLXRocmVhZGJhY2t3YXJk LmMKQEAgLTAsMCArMSwzMjUgQEAKKy8qIFNTQSBKdW1wIFRocmVhZGluZwor ICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKwor R0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBv ciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0ND IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUg dGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi CisjaW5jbHVkZSAic3lzdGVtLmgiCisjaW5jbHVkZSAiY29yZXR5cGVzLmgi CisjaW5jbHVkZSAiYmFja2VuZC5oIgorI2luY2x1ZGUgInByZWRpY3QuaCIK KyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiZ2ltcGxlLmgiCisjaW5j bHVkZSAiZm9sZC1jb25zdC5oIgorI2luY2x1ZGUgImNmZ2xvb3AuaCIKKyNp bmNsdWRlICJnaW1wbGUtaXRlcmF0b3IuaCIKKyNpbmNsdWRlICJ0cmVlLWNm Zy5oIgorI2luY2x1ZGUgInRyZWUtc3NhLXRocmVhZHVwZGF0ZS5oIgorI2lu Y2x1ZGUgInBhcmFtcy5oIgorI2luY2x1ZGUgInRyZWUtc3NhLWxvb3AuaCIK KyNpbmNsdWRlICJjZmdhbmFsLmgiCisjaW5jbHVkZSAidHJlZS1wYXNzLmgi CisKK3N0YXRpYyBpbnQgbWF4X3RocmVhZGVkX3BhdGhzOworCisvKiBSZXR1 cm4gdHJ1ZSBpZiB0aGUgQ0ZHIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBwYXRo IGZyb20gU1RBUlRfQkIgdG8gRU5EX0JCLgorICAgV2hlbiBhIHBhdGggaXMg Zm91bmQsIHJlY29yZCBpbiBQQVRIIHRoZSBibG9ja3MgZnJvbSBFTkRfQkIg dG8gU1RBUlRfQkIuCisgICBWSVNJVEVEX0JCUyBpcyB1c2VkIHRvIG1ha2Ug c3VyZSB3ZSBkb24ndCBmYWxsIGludG8gYW4gaW5maW5pdGUgbG9vcC4gIEJv dW5kCisgICB0aGUgcmVjdXJzaW9uIHRvIGJhc2ljIGJsb2NrcyBiZWxvbmdp bmcgdG8gTE9PUC4gICovCisKK3N0YXRpYyBib29sCitmc21fZmluZF90aHJl YWRfcGF0aCAoYmFzaWNfYmxvY2sgc3RhcnRfYmIsIGJhc2ljX2Jsb2NrIGVu ZF9iYiwKKwkJICAgICAgdmVjPGJhc2ljX2Jsb2NrLCB2YV9nYz4gKiZwYXRo LAorCQkgICAgICBoYXNoX3NldDxiYXNpY19ibG9jaz4gKnZpc2l0ZWRfYmJz LCBsb29wX3AgbG9vcCkKK3sKKyAgaWYgKGxvb3AgIT0gc3RhcnRfYmItPmxv b3BfZmF0aGVyKQorICAgIHJldHVybiBmYWxzZTsKKworICBpZiAoc3RhcnRf YmIgPT0gZW5kX2JiKQorICAgIHsKKyAgICAgIHZlY19zYWZlX3B1c2ggKHBh dGgsIHN0YXJ0X2JiKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor ICBpZiAoIXZpc2l0ZWRfYmJzLT5hZGQgKHN0YXJ0X2JiKSkKKyAgICB7Cisg ICAgICBlZGdlIGU7CisgICAgICBlZGdlX2l0ZXJhdG9yIGVpOworICAgICAg Rk9SX0VBQ0hfRURHRSAoZSwgZWksIHN0YXJ0X2JiLT5zdWNjcykKKwlpZiAo ZnNtX2ZpbmRfdGhyZWFkX3BhdGggKGUtPmRlc3QsIGVuZF9iYiwgcGF0aCwg dmlzaXRlZF9iYnMsIGxvb3ApKQorCSAgeworCSAgICB2ZWNfc2FmZV9wdXNo IChwYXRoLCBzdGFydF9iYik7CisJICAgIHJldHVybiB0cnVlOworCSAgfQor ICAgIH0KKworICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIFdlIHRyYWNlIHRo ZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgRVhQUiBiYWNrIHRocm91Z2ggYW55 IHBoaSBub2RlcyBsb29raW5nCisgICBmb3IgcGxhY2VzIHdoZXJlIGl0IGdl dHMgYSBjb25zdGFudCB2YWx1ZSBhbmQgc2F2ZSB0aGUgcGF0aC4gIFN0b3Ag YWZ0ZXIKKyAgIGhhdmluZyByZWNvcmRlZCBNQVhfUEFUSFMganVtcCB0aHJl YWRpbmcgcGF0aHMuICAqLworCitzdGF0aWMgdm9pZAorZnNtX2ZpbmRfY29u dHJvbF9zdGF0ZW1lbnRfdGhyZWFkX3BhdGhzICh0cmVlIGV4cHIsCisJCQkJ CSBoYXNoX3NldDxiYXNpY19ibG9jaz4gKnZpc2l0ZWRfYmJzLAorCQkJCQkg dmVjPGJhc2ljX2Jsb2NrLCB2YV9nYz4gKiZwYXRoLAorCQkJCQkgYm9vbCBz ZWVuX2xvb3BfcGhpKQoreworICB0cmVlIHZhciA9IFNTQV9OQU1FX1ZBUiAo ZXhwcik7CisgIGdpbXBsZSAqZGVmX3N0bXQgPSBTU0FfTkFNRV9ERUZfU1RN VCAoZXhwcik7CisgIGJhc2ljX2Jsb2NrIHZhcl9iYiA9IGdpbXBsZV9iYiAo ZGVmX3N0bXQpOworCisgIGlmICh2YXIgPT0gTlVMTCB8fCB2YXJfYmIgPT0g TlVMTCkKKyAgICByZXR1cm47CisKKyAgLyogRm9yIHRoZSBtb21lbnQgd2Ug YXNzdW1lIHRoYXQgYW4gU1NBIGNoYWluIG9ubHkgY29udGFpbnMgcGhpIG5v ZGVzLCBhbmQKKyAgICAgZXZlbnR1YWxseSBvbmUgb2YgdGhlIHBoaSBhcmd1 bWVudHMgd2lsbCBiZSBhbiBpbnRlZ2VyIGNvbnN0YW50LiAgSW4gdGhlCisg ICAgIGZ1dHVyZSwgdGhpcyBjb3VsZCBiZSBleHRlbmRlZCB0byBhbHNvIGhh bmRsZSBzaW1wbGUgYXNzaWdubWVudHMgb2YKKyAgICAgYXJpdGhtZXRpYyBv cGVyYXRpb25zLiAgKi8KKyAgaWYgKGdpbXBsZV9jb2RlIChkZWZfc3RtdCkg IT0gR0lNUExFX1BISSkKKyAgICByZXR1cm47CisKKyAgLyogQXZvaWQgaW5m aW5pdGUgcmVjdXJzaW9uLiAgKi8KKyAgaWYgKHZpc2l0ZWRfYmJzLT5hZGQg KHZhcl9iYikpCisgICAgcmV0dXJuOworCisgIGdwaGkgKnBoaSA9IGFzX2Eg PGdwaGkgKj4gKGRlZl9zdG10KTsKKyAgaW50IG5leHRfcGF0aF9sZW5ndGgg PSAwOworICBiYXNpY19ibG9jayBsYXN0X2JiX2luX3BhdGggPSBwYXRoLT5s YXN0ICgpOworCisgIGlmIChsb29wX2NvbnRhaW5pbmdfc3RtdCAocGhpKS0+ aGVhZGVyID09IGdpbXBsZV9iYiAocGhpKSkKKyAgICB7CisgICAgICAvKiBE byBub3Qgd2FsayB0aHJvdWdoIG1vcmUgdGhhbiBvbmUgbG9vcCBQSEkgbm9k ZS4gICovCisgICAgICBpZiAoc2Vlbl9sb29wX3BoaSkKKwlyZXR1cm47Cisg ICAgICBzZWVuX2xvb3BfcGhpID0gdHJ1ZTsKKyAgICB9CisKKyAgLyogRm9s bG93aW5nIHRoZSBjaGFpbiBvZiBTU0FfTkFNRSBkZWZpbml0aW9ucywgd2Ug anVtcGVkIGZyb20gYSBkZWZpbml0aW9uIGluCisgICAgIExBU1RfQkJfSU5f UEFUSCB0byBhIGRlZmluaXRpb24gaW4gVkFSX0JCLiAgV2hlbiB0aGVzZSBi YXNpYyBibG9ja3MgYXJlCisgICAgIGRpZmZlcmVudCwgYXBwZW5kIHRvIFBB VEggdGhlIGJsb2NrcyBmcm9tIExBU1RfQkJfSU5fUEFUSCB0byBWQVJfQkIu ICAqLworICBpZiAodmFyX2JiICE9IGxhc3RfYmJfaW5fcGF0aCkKKyAgICB7 CisgICAgICBlZGdlIGU7CisgICAgICBpbnQgZV9jb3VudCA9IDA7CisgICAg ICBlZGdlX2l0ZXJhdG9yIGVpOworICAgICAgdmVjPGJhc2ljX2Jsb2NrLCB2 YV9nYz4gKm5leHRfcGF0aDsKKyAgICAgIHZlY19hbGxvYyAobmV4dF9wYXRo LCBuX2Jhc2ljX2Jsb2Nrc19mb3JfZm4gKGNmdW4pKTsKKworICAgICAgRk9S X0VBQ0hfRURHRSAoZSwgZWksIGxhc3RfYmJfaW5fcGF0aC0+cHJlZHMpCisJ eworCSAgaGFzaF9zZXQ8YmFzaWNfYmxvY2s+ICp2aXNpdGVkX2JicyA9IG5l dyBoYXNoX3NldDxiYXNpY19ibG9jaz47CisKKwkgIGlmIChmc21fZmluZF90 aHJlYWRfcGF0aCAodmFyX2JiLCBlLT5zcmMsIG5leHRfcGF0aCwgdmlzaXRl ZF9iYnMsCisJCQkJICAgIGUtPnNyYy0+bG9vcF9mYXRoZXIpKQorCSAgICAr K2VfY291bnQ7CisKKwkgIGRlbGV0ZSB2aXNpdGVkX2JiczsKKworCSAgLyog SWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYXRoLCBzdG9wLiAgKi8KKwkg IGlmIChlX2NvdW50ID4gMSkKKwkgICAgeworCSAgICAgIHZlY19mcmVlIChu ZXh0X3BhdGgpOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCX0KKworICAg ICAgLyogU3RvcCBpZiB3ZSBoYXZlIG5vdCBmb3VuZCBhIHBhdGg6IHRoaXMg Y291bGQgb2NjdXIgd2hlbiB0aGUgcmVjdXJzaW9uCisJIGlzIHN0b3BwZWQg Ynkgb25lIG9mIHRoZSBib3VuZHMuICAqLworICAgICAgaWYgKGVfY291bnQg PT0gMCkKKwl7CisJICB2ZWNfZnJlZSAobmV4dF9wYXRoKTsKKwkgIHJldHVy bjsKKwl9CisKKyAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBoYXZlbid0IGFscmVh ZHkgdmlzaXRlZCBhbnkgb2YgdGhlIG5vZGVzIGluCisJIE5FWFRfUEFUSC4g IERvbid0IGFkZCB0aGVtIGhlcmUgdG8gYXZvaWQgcG9sbHV0aW9uLiAgKi8K KyAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbmV4dF9wYXRo LT5sZW5ndGggKCkgLSAxOyBpKyspCisJeworCSAgaWYgKHZpc2l0ZWRfYmJz LT5jb250YWlucyAoKCpuZXh0X3BhdGgpW2ldKSkKKwkgICAgeworCSAgICAg IHZlY19mcmVlIChuZXh0X3BhdGgpOworCSAgICAgIHJldHVybjsKKwkgICAg fQorCX0KKworICAgICAgLyogTm93IGFkZCB0aGUgbm9kZXMgdG8gVklTSVNU RURfQkJTLiAgKi8KKyAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp IDwgbmV4dF9wYXRoLT5sZW5ndGggKCkgLSAxOyBpKyspCisJdmlzaXRlZF9i YnMtPmFkZCAoKCpuZXh0X3BhdGgpW2ldKTsKKworICAgICAgLyogQXBwZW5k IGFsbCB0aGUgbm9kZXMgZnJvbSBORVhUX1BBVEggdG8gUEFUSC4gICovCisg ICAgICB2ZWNfc2FmZV9zcGxpY2UgKHBhdGgsIG5leHRfcGF0aCk7CisgICAg ICBuZXh0X3BhdGhfbGVuZ3RoID0gbmV4dF9wYXRoLT5sZW5ndGggKCk7Cisg ICAgICB2ZWNfZnJlZSAobmV4dF9wYXRoKTsKKyAgICB9CisKKyAgZ2NjX2Fz c2VydCAocGF0aC0+bGFzdCAoKSA9PSB2YXJfYmIpOworCisgIC8qIEl0ZXJh dGUgb3ZlciB0aGUgYXJndW1lbnRzIG9mIFBISS4gICovCisgIHVuc2lnbmVk IGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgZ2ltcGxlX3BoaV9udW1fYXJn cyAocGhpKTsgaSsrKQorICAgIHsKKyAgICAgIHRyZWUgYXJnID0gZ2ltcGxl X3BoaV9hcmdfZGVmIChwaGksIGkpOworICAgICAgYmFzaWNfYmxvY2sgYmJp ID0gZ2ltcGxlX3BoaV9hcmdfZWRnZSAocGhpLCBpKS0+c3JjOworCisgICAg ICAvKiBTa2lwIGVkZ2VzIHBvaW50aW5nIG91dHNpZGUgdGhlIGN1cnJlbnQg bG9vcC4gICovCisgICAgICBpZiAoIWFyZyB8fCB2YXJfYmItPmxvb3BfZmF0 aGVyICE9IGJiaS0+bG9vcF9mYXRoZXIpCisJY29udGludWU7CisKKyAgICAg IGlmIChUUkVFX0NPREUgKGFyZykgPT0gU1NBX05BTUUpCisJeworCSAgdmVj X3NhZmVfcHVzaCAocGF0aCwgYmJpKTsKKwkgIC8qIFJlY3Vyc2l2ZWx5IGZv bGxvdyBTU0FfTkFNRXMgbG9va2luZyBmb3IgYSBjb25zdGFudCBkZWZpbml0 aW9uLiAgKi8KKwkgIGZzbV9maW5kX2NvbnRyb2xfc3RhdGVtZW50X3RocmVh ZF9wYXRocyAoYXJnLCB2aXNpdGVkX2JicywgcGF0aCwKKwkJCQkJCSAgIHNl ZW5fbG9vcF9waGkpOworCisJICBwYXRoLT5wb3AgKCk7CisJICBjb250aW51 ZTsKKwl9CisKKyAgICAgIGlmIChUUkVFX0NPREUgKGFyZykgIT0gSU5URUdF Ul9DU1QpCisJY29udGludWU7CisKKyAgICAgIGludCBwYXRoX2xlbmd0aCA9 IHBhdGgtPmxlbmd0aCAoKTsKKyAgICAgIC8qIEEgcGF0aCB3aXRoIGxlc3Mg dGhhbiAyIGJhc2ljIGJsb2NrcyBzaG91bGQgbm90IGJlIGp1bXAtdGhyZWFk ZWQuICAqLworICAgICAgaWYgKHBhdGhfbGVuZ3RoIDwgMikKKwljb250aW51 ZTsKKworICAgICAgaWYgKHBhdGhfbGVuZ3RoID4gUEFSQU1fVkFMVUUgKFBB UkFNX01BWF9GU01fVEhSRUFEX0xFTkdUSCkpCisJeworCSAgaWYgKGR1bXBf ZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKwkgICAgZnBy aW50ZiAoZHVtcF9maWxlLCAiRlNNIGp1bXAtdGhyZWFkIHBhdGggbm90IGNv bnNpZGVyZWQ6ICIKKwkJICAgICAidGhlIG51bWJlciBvZiBiYXNpYyBibG9j a3Mgb24gdGhlIHBhdGggIgorCQkgICAgICJleGNlZWRzIFBBUkFNX01BWF9G U01fVEhSRUFEX0xFTkdUSC5cbiIpOworCSAgY29udGludWU7CisJfQorCisg ICAgICBpZiAobWF4X3RocmVhZGVkX3BhdGhzIDw9IDApCisJeworCSAgaWYg KGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKwkg ICAgZnByaW50ZiAoZHVtcF9maWxlLCAiRlNNIGp1bXAtdGhyZWFkIHBhdGgg bm90IGNvbnNpZGVyZWQ6ICIKKwkJICAgICAidGhlIG51bWJlciBvZiBwcmV2 aW91c2x5IHJlY29yZGVkIEZTTSBwYXRocyB0byB0aHJlYWQgIgorCQkgICAg ICJleGNlZWRzIFBBUkFNX01BWF9GU01fVEhSRUFEX1BBVEhTLlxuIik7CisJ ICBjb250aW51ZTsKKwl9CisKKyAgICAgIC8qIEFkZCBCQkkgdG8gdGhlIHBh dGguICAqLworICAgICAgdmVjX3NhZmVfcHVzaCAocGF0aCwgYmJpKTsKKyAg ICAgICsrcGF0aF9sZW5ndGg7CisKKyAgICAgIGludCBuX2luc25zID0gMDsK KyAgICAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGdzaTsKKyAgICAgIGludCBq OworICAgICAgbG9vcF9wIGxvb3AgPSAoKnBhdGgpWzBdLT5sb29wX2ZhdGhl cjsKKyAgICAgIGJvb2wgcGF0aF9jcm9zc2VzX2xvb3BzID0gZmFsc2U7CisK KyAgICAgIC8qIENvdW50IHRoZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIG9u IHRoZSBwYXRoOiBhcyB0aGVzZSBpbnN0cnVjdGlvbnMKKwkgd2lsbCBoYXZl IHRvIGJlIGR1cGxpY2F0ZWQsIHdlIHdpbGwgbm90IHJlY29yZCB0aGUgcGF0 aCBpZiB0aGVyZSBhcmUKKwkgdG9vIG1hbnkgaW5zdHJ1Y3Rpb25zIG9uIHRo ZSBwYXRoLiAgQWxzbyBjaGVjayB0aGF0IGFsbCB0aGUgYmxvY2tzIGluCisJ IHRoZSBwYXRoIGJlbG9uZyB0byBhIHNpbmdsZSBsb29wLiAgKi8KKyAgICAg IGZvciAoaiA9IDE7IGogPCBwYXRoX2xlbmd0aCAtIDE7IGorKykKKwl7CisJ ICBiYXNpY19ibG9jayBiYiA9ICgqcGF0aClbal07CisKKwkgIGlmIChiYi0+ bG9vcF9mYXRoZXIgIT0gbG9vcCkKKwkgICAgeworCSAgICAgIHBhdGhfY3Jv c3Nlc19sb29wcyA9IHRydWU7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwor CSAgZm9yIChnc2kgPSBnc2lfc3RhcnRfYmIgKGJiKTsgIWdzaV9lbmRfcCAo Z3NpKTsgZ3NpX25leHQgKCZnc2kpKQorCSAgICB7CisJICAgICAgZ2ltcGxl ICpzdG10ID0gZ3NpX3N0bXQgKGdzaSk7CisJICAgICAgLyogRG8gbm90IGNv dW50IGVtcHR5IHN0YXRlbWVudHMgYW5kIGxhYmVscy4gICovCisJICAgICAg aWYgKGdpbXBsZV9jb2RlIChzdG10KSAhPSBHSU1QTEVfTk9QCisJCSAgJiYg Z2ltcGxlX2NvZGUgKHN0bXQpICE9IEdJTVBMRV9MQUJFTAorCQkgICYmICFp c19naW1wbGVfZGVidWcgKHN0bXQpKQorCQkrK25faW5zbnM7CisJICAgIH0K Kwl9CisKKyAgICAgIGlmIChwYXRoX2Nyb3NzZXNfbG9vcHMpCisJeworCSAg aWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkK KwkgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiRlNNIGp1bXAtdGhyZWFkIHBh dGggbm90IGNvbnNpZGVyZWQ6ICIKKwkJICAgICAidGhlIHBhdGggY3Jvc3Nl cyBsb29wcy5cbiIpOworCSAgcGF0aC0+cG9wICgpOworCSAgY29udGludWU7 CisJfQorCisgICAgICBpZiAobl9pbnNucyA+PSBQQVJBTV9WQUxVRSAoUEFS QU1fTUFYX0ZTTV9USFJFQURfUEFUSF9JTlNOUykpCisJeworCSAgaWYgKGR1 bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKwkgICAg ZnByaW50ZiAoZHVtcF9maWxlLCAiRlNNIGp1bXAtdGhyZWFkIHBhdGggbm90 IGNvbnNpZGVyZWQ6ICIKKwkJICAgICAidGhlIG51bWJlciBvZiBpbnN0cnVj dGlvbnMgb24gdGhlIHBhdGggIgorCQkgICAgICJleGNlZWRzIFBBUkFNX01B WF9GU01fVEhSRUFEX1BBVEhfSU5TTlMuXG4iKTsKKwkgIHBhdGgtPnBvcCAo KTsKKwkgIGNvbnRpbnVlOworCX0KKworICAgICAgdmVjPGp1bXBfdGhyZWFk X2VkZ2UgKj4gKmp1bXBfdGhyZWFkX3BhdGgKKwk9IG5ldyB2ZWM8anVtcF90 aHJlYWRfZWRnZSAqPiAoKTsKKworICAgICAgLyogUmVjb3JkIHRoZSBlZGdl cyBiZXR3ZWVuIHRoZSBibG9ja3MgaW4gUEFUSC4gICovCisgICAgICBmb3Ig KGogPSAwOyBqIDwgcGF0aF9sZW5ndGggLSAxOyBqKyspCisJeworCSAgZWRn ZSBlID0gZmluZF9lZGdlICgoKnBhdGgpW3BhdGhfbGVuZ3RoIC0gaiAtIDFd LAorCQkJICAgICAgKCpwYXRoKVtwYXRoX2xlbmd0aCAtIGogLSAyXSk7CisJ ICBnY2NfYXNzZXJ0IChlKTsKKwkgIGp1bXBfdGhyZWFkX2VkZ2UgKnggPSBu ZXcganVtcF90aHJlYWRfZWRnZSAoZSwgRURHRV9GU01fVEhSRUFEKTsKKwkg IGp1bXBfdGhyZWFkX3BhdGgtPnNhZmVfcHVzaCAoeCk7CisJfQorCisgICAg ICAvKiBBZGQgdGhlIGVkZ2UgdGFrZW4gd2hlbiB0aGUgY29udHJvbCB2YXJp YWJsZSBoYXMgdmFsdWUgQVJHLiAgKi8KKyAgICAgIGVkZ2UgdGFrZW5fZWRn ZSA9IGZpbmRfdGFrZW5fZWRnZSAoKCpwYXRoKVswXSwgYXJnKTsKKyAgICAg IGp1bXBfdGhyZWFkX2VkZ2UgKngKKwk9IG5ldyBqdW1wX3RocmVhZF9lZGdl ICh0YWtlbl9lZGdlLCBFREdFX05PX0NPUFlfU1JDX0JMT0NLKTsKKyAgICAg IGp1bXBfdGhyZWFkX3BhdGgtPnNhZmVfcHVzaCAoeCk7CisKKyAgICAgIHJl Z2lzdGVyX2p1bXBfdGhyZWFkIChqdW1wX3RocmVhZF9wYXRoKTsKKyAgICAg IC0tbWF4X3RocmVhZGVkX3BhdGhzOworCisgICAgICAvKiBSZW1vdmUgQkJJ IGZyb20gdGhlIHBhdGguICAqLworICAgICAgcGF0aC0+cG9wICgpOworICAg IH0KKworICAvKiBSZW1vdmUgYWxsIHRoZSBub2RlcyB0aGF0IHdlIGFkZGVk IGZyb20gTkVYVF9QQVRILiAgKi8KKyAgaWYgKG5leHRfcGF0aF9sZW5ndGgp CisgICAgdmVjX3NhZmVfdHJ1bmNhdGUgKHBhdGgsIChwYXRoLT5sZW5ndGgg KCkgLSBuZXh0X3BhdGhfbGVuZ3RoKSk7Cit9CisKKy8qIFNlYXJjaCBiYWNr d2FyZHMgZnJvbSBCQiBsb29raW5nIGZvciBwYXRocyB3aGVyZSBOQU1FIChh biBTU0FfTkFNRSkKKyAgIGlzIGEgY29uc3RhbnQuICBSZWNvcmQgc3VjaCBw YXRocyBmb3IganVtcCB0aHJlYWRpbmcuCisKKyAgIEl0IGlzIGFzc3VtZWQg dGhhdCBCQiBlbmRzIHdpdGggYSBjb250cm9sIHN0YXRlbWVudCBhbmQgdGhh dCBieQorICAgZmluZGluZyBhIHBhdGggd2hlcmUgTkFNRSBpcyBhIGNvbnN0 YW50LCB3ZSBjYW4gdGhyZWFkIHRoZSBwYXRoLiAgKi8KKwordm9pZCAgCitm aW5kX2p1bXBfdGhyZWFkc19iYWNrd2FyZHMgKHRyZWUgbmFtZSwgYmFzaWNf YmxvY2sgYmIpCit7ICAgICAKKyAgdmVjPGJhc2ljX2Jsb2NrLCB2YV9nYz4g KmJiX3BhdGg7CisgIHZlY19hbGxvYyAoYmJfcGF0aCwgbl9iYXNpY19ibG9j a3NfZm9yX2ZuIChjZnVuKSk7CisgIHZlY19zYWZlX3B1c2ggKGJiX3BhdGgs IGJiKTsgICAgICAgICAgIAorICBoYXNoX3NldDxiYXNpY19ibG9jaz4gKnZp c2l0ZWRfYmJzID0gbmV3IGhhc2hfc2V0PGJhc2ljX2Jsb2NrPjsKKworICBt YXhfdGhyZWFkZWRfcGF0aHMgPSBQQVJBTV9WQUxVRSAoUEFSQU1fTUFYX0ZT TV9USFJFQURfUEFUSFMpOworICBmc21fZmluZF9jb250cm9sX3N0YXRlbWVu dF90aHJlYWRfcGF0aHMgKG5hbWUsIHZpc2l0ZWRfYmJzLCBiYl9wYXRoLCBm YWxzZSk7CisKKyAgZGVsZXRlIHZpc2l0ZWRfYmJzOworICB2ZWNfZnJlZSAo YmJfcGF0aCk7Cit9ICAgICAgICAgCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1z c2EtdGhyZWFkYmFja3dhcmQuaCBiL2djYy90cmVlLXNzYS10aHJlYWRiYWNr d2FyZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYw NTVmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdHJlZS1zc2EtdGhyZWFk YmFja3dhcmQuaApAQCAtMCwwICsxLDI1IEBACisvKiBIZWFkZXIgZmlsZSBm b3IgU1NBIGRvbWluYXRvciBvcHRpbWl6YXRpb25zLgorICAgQ29weXJpZ2h0 IChDKSAyMDEzLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBX SVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENP UFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfVFJFRV9TU0FfVEhSRUFERlNN X0gKKyNkZWZpbmUgR0NDX1RSRUVfU1NBX1RIUkVBREZTTV9ICisKK2V4dGVy biB2b2lkIGZpbmRfanVtcF90aHJlYWRzX2JhY2t3YXJkcyAodHJlZSwgYmFz aWNfYmxvY2spOworCisjZW5kaWYgLyogR0NDX1RSRUVfU1NBX1RIUkVBREZT TV9IICovCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtdGhyZWFkZWRnZS5j IGIvZ2NjL3RyZWUtc3NhLXRocmVhZGVkZ2UuYwppbmRleCBjNThiNWUzLi41 Y2E5NDU4IDEwMDY0NAotLS0gYS9nY2MvdHJlZS1zc2EtdGhyZWFkZWRnZS5j CisrKyBiL2djYy90cmVlLXNzYS10aHJlYWRlZGdlLmMKQEAgLTI1LDI4ICsy NSwxOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcz LiAgSWYgbm90IHNlZQogI2luY2x1ZGUgInByZWRpY3QuaCIKICNpbmNsdWRl ICJ0cmVlLmgiCiAjaW5jbHVkZSAiZ2ltcGxlLmgiCi0jaW5jbHVkZSAiaGFy ZC1yZWctc2V0LmgiCiAjaW5jbHVkZSAic3NhLmgiCi0jaW5jbHVkZSAiYWxp YXMuaCIKICNpbmNsdWRlICJmb2xkLWNvbnN0LmgiCi0jaW5jbHVkZSAiZmxh Z3MuaCIKLSNpbmNsdWRlICJ0bV9wLmgiCiAjaW5jbHVkZSAiY2ZnbG9vcC5o IgotI2luY2x1ZGUgInRpbWV2YXIuaCIKLSNpbmNsdWRlICJkdW1wZmlsZS5o IgotI2luY2x1ZGUgImludGVybmFsLWZuLmgiCiAjaW5jbHVkZSAiZ2ltcGxl LWl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAidHJlZS1jZmcuaCIKLSNpbmNsdWRl ICJ0cmVlLXNzYS1wcm9wYWdhdGUuaCIKICNpbmNsdWRlICJ0cmVlLXNzYS10 aHJlYWR1cGRhdGUuaCIKLSNpbmNsdWRlICJsYW5naG9va3MuaCIKICNpbmNs dWRlICJwYXJhbXMuaCIKICNpbmNsdWRlICJ0cmVlLXNzYS1zY29wZWR0YWJs ZXMuaCIKICNpbmNsdWRlICJ0cmVlLXNzYS10aHJlYWRlZGdlLmgiCi0jaW5j bHVkZSAidHJlZS1zc2EtbG9vcC5oIgorI2luY2x1ZGUgInRyZWUtc3NhLXRo cmVhZGJhY2t3YXJkLmgiCiAjaW5jbHVkZSAidHJlZS1zc2EtZG9tLmgiCiAj aW5jbHVkZSAiYnVpbHRpbnMuaCIKLSNpbmNsdWRlICJjZmdhbmFsLmgiCiAK IC8qIFRvIGF2b2lkIGNvZGUgZXhwbG9zaW9uIGR1ZSB0byBqdW1wIHRocmVh ZGluZywgd2UgbGltaXQgdGhlCiAgICBudW1iZXIgb2Ygc3RhdGVtZW50cyB3 ZSBhcmUgZ29pbmcgdG8gY29weS4gIFRoaXMgdmFyaWFibGUKQEAgLTg5NCwy NzUgKzg4NCw2IEBAIHRocmVhZF9hcm91bmRfZW1wdHlfYmxvY2tzIChlZGdl IHRha2VuX2VkZ2UsCiAgIHJldHVybiBmYWxzZTsKIH0KIAotLyogUmV0dXJu IHRydWUgaWYgdGhlIENGRyBjb250YWlucyBhdCBsZWFzdCBvbmUgcGF0aCBm cm9tIFNUQVJUX0JCIHRvIEVORF9CQi4KLSAgIFdoZW4gYSBwYXRoIGlzIGZv dW5kLCByZWNvcmQgaW4gUEFUSCB0aGUgYmxvY2tzIGZyb20gRU5EX0JCIHRv IFNUQVJUX0JCLgotICAgVklTSVRFRF9CQlMgaXMgdXNlZCB0byBtYWtlIHN1 cmUgd2UgZG9uJ3QgZmFsbCBpbnRvIGFuIGluZmluaXRlIGxvb3AuICBCb3Vu ZAotICAgdGhlIHJlY3Vyc2lvbiB0byBiYXNpYyBibG9ja3MgYmVsb25naW5n IHRvIExPT1AuICAqLwotCi1zdGF0aWMgYm9vbAotZnNtX2ZpbmRfdGhyZWFk X3BhdGggKGJhc2ljX2Jsb2NrIHN0YXJ0X2JiLCBiYXNpY19ibG9jayBlbmRf YmIsCi0JCSAgICAgIHZlYzxiYXNpY19ibG9jaywgdmFfZ2M+IComcGF0aCwK LQkJICAgICAgaGFzaF9zZXQ8YmFzaWNfYmxvY2s+ICp2aXNpdGVkX2Jicywg bG9vcF9wIGxvb3ApCi17Ci0gIGlmIChsb29wICE9IHN0YXJ0X2JiLT5sb29w X2ZhdGhlcikKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgaWYgKHN0YXJ0X2Ji ID09IGVuZF9iYikKLSAgICB7Ci0gICAgICB2ZWNfc2FmZV9wdXNoIChwYXRo LCBzdGFydF9iYik7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg aWYgKCF2aXNpdGVkX2Jicy0+YWRkIChzdGFydF9iYikpCi0gICAgewotICAg ICAgZWRnZSBlOwotICAgICAgZWRnZV9pdGVyYXRvciBlaTsKLSAgICAgIEZP Ul9FQUNIX0VER0UgKGUsIGVpLCBzdGFydF9iYi0+c3VjY3MpCi0JaWYgKGZz bV9maW5kX3RocmVhZF9wYXRoIChlLT5kZXN0LCBlbmRfYmIsIHBhdGgsIHZp c2l0ZWRfYmJzLCBsb29wKSkKLQkgIHsKLQkgICAgdmVjX3NhZmVfcHVzaCAo cGF0aCwgc3RhcnRfYmIpOwotCSAgICByZXR1cm4gdHJ1ZTsKLQkgIH0KLSAg ICB9Ci0KLSAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW50IG1heF90 aHJlYWRlZF9wYXRoczsKLQotLyogV2UgdHJhY2UgdGhlIHZhbHVlIG9mIHRo ZSB2YXJpYWJsZSBFWFBSIGJhY2sgdGhyb3VnaCBhbnkgcGhpIG5vZGVzIGxv b2tpbmcKLSAgIGZvciBwbGFjZXMgd2hlcmUgaXQgZ2V0cyBhIGNvbnN0YW50 IHZhbHVlIGFuZCBzYXZlIHRoZSBwYXRoLiAgU3RvcCBhZnRlcgotICAgaGF2 aW5nIHJlY29yZGVkIE1BWF9QQVRIUyBqdW1wIHRocmVhZGluZyBwYXRocy4g ICovCi0KLXN0YXRpYyB2b2lkCi1mc21fZmluZF9jb250cm9sX3N0YXRlbWVu dF90aHJlYWRfcGF0aHMgKHRyZWUgZXhwciwKLQkJCQkJIGhhc2hfc2V0PGJh c2ljX2Jsb2NrPiAqdmlzaXRlZF9iYnMsCi0JCQkJCSB2ZWM8YmFzaWNfYmxv Y2ssIHZhX2djPiAqJnBhdGgsCi0JCQkJCSBib29sIHNlZW5fbG9vcF9waGkp Ci17Ci0gIHRyZWUgdmFyID0gU1NBX05BTUVfVkFSIChleHByKTsKLSAgZ2lt cGxlICpkZWZfc3RtdCA9IFNTQV9OQU1FX0RFRl9TVE1UIChleHByKTsKLSAg YmFzaWNfYmxvY2sgdmFyX2JiID0gZ2ltcGxlX2JiIChkZWZfc3RtdCk7Ci0K LSAgaWYgKHZhciA9PSBOVUxMIHx8IHZhcl9iYiA9PSBOVUxMKQotICAgIHJl dHVybjsKLQotICAvKiBGb3IgdGhlIG1vbWVudCB3ZSBhc3N1bWUgdGhhdCBh biBTU0EgY2hhaW4gb25seSBjb250YWlucyBwaGkgbm9kZXMsIGFuZAotICAg ICBldmVudHVhbGx5IG9uZSBvZiB0aGUgcGhpIGFyZ3VtZW50cyB3aWxsIGJl IGFuIGludGVnZXIgY29uc3RhbnQuICBJbiB0aGUKLSAgICAgZnV0dXJlLCB0 aGlzIGNvdWxkIGJlIGV4dGVuZGVkIHRvIGFsc28gaGFuZGxlIHNpbXBsZSBh c3NpZ25tZW50cyBvZgotICAgICBhcml0aG1ldGljIG9wZXJhdGlvbnMuICAq LwotICBpZiAoZ2ltcGxlX2NvZGUgKGRlZl9zdG10KSAhPSBHSU1QTEVfUEhJ KQotICAgIHJldHVybjsKLQotICAvKiBBdm9pZCBpbmZpbml0ZSByZWN1cnNp b24uICAqLwotICBpZiAodmlzaXRlZF9iYnMtPmFkZCAodmFyX2JiKSkKLSAg ICByZXR1cm47Ci0KLSAgZ3BoaSAqcGhpID0gYXNfYSA8Z3BoaSAqPiAoZGVm X3N0bXQpOwotICBpbnQgbmV4dF9wYXRoX2xlbmd0aCA9IDA7Ci0gIGJhc2lj X2Jsb2NrIGxhc3RfYmJfaW5fcGF0aCA9IHBhdGgtPmxhc3QgKCk7Ci0KLSAg aWYgKGxvb3BfY29udGFpbmluZ19zdG10IChwaGkpLT5oZWFkZXIgPT0gZ2lt cGxlX2JiIChwaGkpKQotICAgIHsKLSAgICAgIC8qIERvIG5vdCB3YWxrIHRo cm91Z2ggbW9yZSB0aGFuIG9uZSBsb29wIFBISSBub2RlLiAgKi8KLSAgICAg IGlmIChzZWVuX2xvb3BfcGhpKQotCXJldHVybjsKLSAgICAgIHNlZW5fbG9v cF9waGkgPSB0cnVlOwotICAgIH0KLQotICAvKiBGb2xsb3dpbmcgdGhlIGNo YWluIG9mIFNTQV9OQU1FIGRlZmluaXRpb25zLCB3ZSBqdW1wZWQgZnJvbSBh IGRlZmluaXRpb24gaW4KLSAgICAgTEFTVF9CQl9JTl9QQVRIIHRvIGEgZGVm aW5pdGlvbiBpbiBWQVJfQkIuICBXaGVuIHRoZXNlIGJhc2ljIGJsb2NrcyBh cmUKLSAgICAgZGlmZmVyZW50LCBhcHBlbmQgdG8gUEFUSCB0aGUgYmxvY2tz IGZyb20gTEFTVF9CQl9JTl9QQVRIIHRvIFZBUl9CQi4gICovCi0gIGlmICh2 YXJfYmIgIT0gbGFzdF9iYl9pbl9wYXRoKQotICAgIHsKLSAgICAgIGVkZ2Ug ZTsKLSAgICAgIGludCBlX2NvdW50ID0gMDsKLSAgICAgIGVkZ2VfaXRlcmF0 b3IgZWk7Ci0gICAgICB2ZWM8YmFzaWNfYmxvY2ssIHZhX2djPiAqbmV4dF9w YXRoOwotICAgICAgdmVjX2FsbG9jIChuZXh0X3BhdGgsIG5fYmFzaWNfYmxv Y2tzX2Zvcl9mbiAoY2Z1bikpOwotCi0gICAgICBGT1JfRUFDSF9FREdFIChl LCBlaSwgbGFzdF9iYl9pbl9wYXRoLT5wcmVkcykKLQl7Ci0JICBoYXNoX3Nl dDxiYXNpY19ibG9jaz4gKnZpc2l0ZWRfYmJzID0gbmV3IGhhc2hfc2V0PGJh c2ljX2Jsb2NrPjsKLQotCSAgaWYgKGZzbV9maW5kX3RocmVhZF9wYXRoICh2 YXJfYmIsIGUtPnNyYywgbmV4dF9wYXRoLCB2aXNpdGVkX2JicywKLQkJCQkg ICAgZS0+c3JjLT5sb29wX2ZhdGhlcikpCi0JICAgICsrZV9jb3VudDsKLQot CSAgZGVsZXRlIHZpc2l0ZWRfYmJzOwotCi0JICAvKiBJZiB0aGVyZSBpcyBt b3JlIHRoYW4gb25lIHBhdGgsIHN0b3AuICAqLwotCSAgaWYgKGVfY291bnQg PiAxKQotCSAgICB7Ci0JICAgICAgdmVjX2ZyZWUgKG5leHRfcGF0aCk7Ci0J ICAgICAgcmV0dXJuOwotCSAgICB9Ci0JfQotCi0gICAgICAvKiBTdG9wIGlm IHdlIGhhdmUgbm90IGZvdW5kIGEgcGF0aDogdGhpcyBjb3VsZCBvY2N1ciB3 aGVuIHRoZSByZWN1cnNpb24KLQkgaXMgc3RvcHBlZCBieSBvbmUgb2YgdGhl IGJvdW5kcy4gICovCi0gICAgICBpZiAoZV9jb3VudCA9PSAwKQotCXsKLQkg IHZlY19mcmVlIChuZXh0X3BhdGgpOwotCSAgcmV0dXJuOwotCX0KLQotICAg ICAgLyogTWFrZSBzdXJlIHdlIGhhdmVuJ3QgYWxyZWFkeSB2aXNpdGVkIGFu eSBvZiB0aGUgbm9kZXMgaW4KLQkgTkVYVF9QQVRILiAgRG9uJ3QgYWRkIHRo ZW0gaGVyZSB0byBhdm9pZCBwb2xsdXRpb24uICAqLwotICAgICAgZm9yICh1 bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBuZXh0X3BhdGgtPmxlbmd0aCAoKSAt IDE7IGkrKykKLQl7Ci0JICBpZiAodmlzaXRlZF9iYnMtPmNvbnRhaW5zICgo Km5leHRfcGF0aClbaV0pKQotCSAgICB7Ci0JICAgICAgdmVjX2ZyZWUgKG5l eHRfcGF0aCk7Ci0JICAgICAgcmV0dXJuOwotCSAgICB9Ci0JfQotCi0gICAg ICAvKiBOb3cgYWRkIHRoZSBub2RlcyB0byBWSVNJU1RFRF9CQlMuICAqLwot ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBuZXh0X3BhdGgt Pmxlbmd0aCAoKSAtIDE7IGkrKykKLQl2aXNpdGVkX2Jicy0+YWRkICgoKm5l eHRfcGF0aClbaV0pOwotCi0gICAgICAvKiBBcHBlbmQgYWxsIHRoZSBub2Rl cyBmcm9tIE5FWFRfUEFUSCB0byBQQVRILiAgKi8KLSAgICAgIHZlY19zYWZl X3NwbGljZSAocGF0aCwgbmV4dF9wYXRoKTsKLSAgICAgIG5leHRfcGF0aF9s ZW5ndGggPSBuZXh0X3BhdGgtPmxlbmd0aCAoKTsKLSAgICAgIHZlY19mcmVl IChuZXh0X3BhdGgpOwotICAgIH0KLQotICBnY2NfYXNzZXJ0IChwYXRoLT5s YXN0ICgpID09IHZhcl9iYik7Ci0KLSAgLyogSXRlcmF0ZSBvdmVyIHRoZSBh cmd1bWVudHMgb2YgUEhJLiAgKi8KLSAgdW5zaWduZWQgaW50IGk7Ci0gIGZv ciAoaSA9IDA7IGkgPCBnaW1wbGVfcGhpX251bV9hcmdzIChwaGkpOyBpKysp Ci0gICAgewotICAgICAgdHJlZSBhcmcgPSBnaW1wbGVfcGhpX2FyZ19kZWYg KHBoaSwgaSk7Ci0gICAgICBiYXNpY19ibG9jayBiYmkgPSBnaW1wbGVfcGhp X2FyZ19lZGdlIChwaGksIGkpLT5zcmM7Ci0KLSAgICAgIC8qIFNraXAgZWRn ZXMgcG9pbnRpbmcgb3V0c2lkZSB0aGUgY3VycmVudCBsb29wLiAgKi8KLSAg ICAgIGlmICghYXJnIHx8IHZhcl9iYi0+bG9vcF9mYXRoZXIgIT0gYmJpLT5s b29wX2ZhdGhlcikKLQljb250aW51ZTsKLQotICAgICAgaWYgKFRSRUVfQ09E RSAoYXJnKSA9PSBTU0FfTkFNRSkKLQl7Ci0JICB2ZWNfc2FmZV9wdXNoIChw YXRoLCBiYmkpOwotCSAgLyogUmVjdXJzaXZlbHkgZm9sbG93IFNTQV9OQU1F cyBsb29raW5nIGZvciBhIGNvbnN0YW50IGRlZmluaXRpb24uICAqLwotCSAg ZnNtX2ZpbmRfY29udHJvbF9zdGF0ZW1lbnRfdGhyZWFkX3BhdGhzIChhcmcs IHZpc2l0ZWRfYmJzLCBwYXRoLAotCQkJCQkJICAgc2Vlbl9sb29wX3BoaSk7 Ci0KLQkgIHBhdGgtPnBvcCAoKTsKLQkgIGNvbnRpbnVlOwotCX0KLQotICAg ICAgaWYgKFRSRUVfQ09ERSAoYXJnKSAhPSBJTlRFR0VSX0NTVCkKLQljb250 aW51ZTsKLQotICAgICAgaW50IHBhdGhfbGVuZ3RoID0gcGF0aC0+bGVuZ3Ro ICgpOwotICAgICAgLyogQSBwYXRoIHdpdGggbGVzcyB0aGFuIDIgYmFzaWMg YmxvY2tzIHNob3VsZCBub3QgYmUganVtcC10aHJlYWRlZC4gICovCi0gICAg ICBpZiAocGF0aF9sZW5ndGggPCAyKQotCWNvbnRpbnVlOwotCi0gICAgICBp ZiAocGF0aF9sZW5ndGggPiBQQVJBTV9WQUxVRSAoUEFSQU1fTUFYX0ZTTV9U SFJFQURfTEVOR1RIKSkKLQl7Ci0JICBpZiAoZHVtcF9maWxlICYmIChkdW1w X2ZsYWdzICYgVERGX0RFVEFJTFMpKQotCSAgICBmcHJpbnRmIChkdW1wX2Zp bGUsICJGU00ganVtcC10aHJlYWQgcGF0aCBub3QgY29uc2lkZXJlZDogIgot CQkgICAgICJ0aGUgbnVtYmVyIG9mIGJhc2ljIGJsb2NrcyBvbiB0aGUgcGF0 aCAiCi0JCSAgICAgImV4Y2VlZHMgUEFSQU1fTUFYX0ZTTV9USFJFQURfTEVO R1RILlxuIik7Ci0JICBjb250aW51ZTsKLQl9Ci0KLSAgICAgIGlmIChtYXhf dGhyZWFkZWRfcGF0aHMgPD0gMCkKLQl7Ci0JICBpZiAoZHVtcF9maWxlICYm IChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMpKQotCSAgICBmcHJpbnRmIChk dW1wX2ZpbGUsICJGU00ganVtcC10aHJlYWQgcGF0aCBub3QgY29uc2lkZXJl ZDogIgotCQkgICAgICJ0aGUgbnVtYmVyIG9mIHByZXZpb3VzbHkgcmVjb3Jk ZWQgRlNNIHBhdGhzIHRvIHRocmVhZCAiCi0JCSAgICAgImV4Y2VlZHMgUEFS QU1fTUFYX0ZTTV9USFJFQURfUEFUSFMuXG4iKTsKLQkgIGNvbnRpbnVlOwot CX0KLQotICAgICAgLyogQWRkIEJCSSB0byB0aGUgcGF0aC4gICovCi0gICAg ICB2ZWNfc2FmZV9wdXNoIChwYXRoLCBiYmkpOwotICAgICAgKytwYXRoX2xl bmd0aDsKLQotICAgICAgaW50IG5faW5zbnMgPSAwOwotICAgICAgZ2ltcGxl X3N0bXRfaXRlcmF0b3IgZ3NpOwotICAgICAgaW50IGo7Ci0gICAgICBsb29w X3AgbG9vcCA9ICgqcGF0aClbMF0tPmxvb3BfZmF0aGVyOwotICAgICAgYm9v bCBwYXRoX2Nyb3NzZXNfbG9vcHMgPSBmYWxzZTsKLQotICAgICAgLyogQ291 bnQgdGhlIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgb24gdGhlIHBhdGg6IGFz IHRoZXNlIGluc3RydWN0aW9ucwotCSB3aWxsIGhhdmUgdG8gYmUgZHVwbGlj YXRlZCwgd2Ugd2lsbCBub3QgcmVjb3JkIHRoZSBwYXRoIGlmIHRoZXJlIGFy ZQotCSB0b28gbWFueSBpbnN0cnVjdGlvbnMgb24gdGhlIHBhdGguICBBbHNv IGNoZWNrIHRoYXQgYWxsIHRoZSBibG9ja3MgaW4KLQkgdGhlIHBhdGggYmVs b25nIHRvIGEgc2luZ2xlIGxvb3AuICAqLwotICAgICAgZm9yIChqID0gMTsg aiA8IHBhdGhfbGVuZ3RoIC0gMTsgaisrKQotCXsKLQkgIGJhc2ljX2Jsb2Nr IGJiID0gKCpwYXRoKVtqXTsKLQotCSAgaWYgKGJiLT5sb29wX2ZhdGhlciAh PSBsb29wKQotCSAgICB7Ci0JICAgICAgcGF0aF9jcm9zc2VzX2xvb3BzID0g dHJ1ZTsKLQkgICAgICBicmVhazsKLQkgICAgfQotCi0JICBmb3IgKGdzaSA9 IGdzaV9zdGFydF9iYiAoYmIpOyAhZ3NpX2VuZF9wIChnc2kpOyBnc2lfbmV4 dCAoJmdzaSkpCi0JICAgIHsKLQkgICAgICBnaW1wbGUgKnN0bXQgPSBnc2lf c3RtdCAoZ3NpKTsKLQkgICAgICAvKiBEbyBub3QgY291bnQgZW1wdHkgc3Rh dGVtZW50cyBhbmQgbGFiZWxzLiAgKi8KLQkgICAgICBpZiAoZ2ltcGxlX2Nv ZGUgKHN0bXQpICE9IEdJTVBMRV9OT1AKLQkJICAmJiBnaW1wbGVfY29kZSAo c3RtdCkgIT0gR0lNUExFX0xBQkVMCi0JCSAgJiYgIWlzX2dpbXBsZV9kZWJ1 ZyAoc3RtdCkpCi0JCSsrbl9pbnNuczsKLQkgICAgfQotCX0KLQotICAgICAg aWYgKHBhdGhfY3Jvc3Nlc19sb29wcykKLQl7Ci0JICBpZiAoZHVtcF9maWxl ICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMpKQotCSAgICBmcHJpbnRm IChkdW1wX2ZpbGUsICJGU00ganVtcC10aHJlYWQgcGF0aCBub3QgY29uc2lk ZXJlZDogIgotCQkgICAgICJ0aGUgcGF0aCBjcm9zc2VzIGxvb3BzLlxuIik7 Ci0JICBwYXRoLT5wb3AgKCk7Ci0JICBjb250aW51ZTsKLQl9Ci0KLSAgICAg IGlmIChuX2luc25zID49IFBBUkFNX1ZBTFVFIChQQVJBTV9NQVhfRlNNX1RI UkVBRF9QQVRIX0lOU05TKSkKLQl7Ci0JICBpZiAoZHVtcF9maWxlICYmIChk dW1wX2ZsYWdzICYgVERGX0RFVEFJTFMpKQotCSAgICBmcHJpbnRmIChkdW1w X2ZpbGUsICJGU00ganVtcC10aHJlYWQgcGF0aCBub3QgY29uc2lkZXJlZDog IgotCQkgICAgICJ0aGUgbnVtYmVyIG9mIGluc3RydWN0aW9ucyBvbiB0aGUg cGF0aCAiCi0JCSAgICAgImV4Y2VlZHMgUEFSQU1fTUFYX0ZTTV9USFJFQURf UEFUSF9JTlNOUy5cbiIpOwotCSAgcGF0aC0+cG9wICgpOwotCSAgY29udGlu dWU7Ci0JfQotCi0gICAgICB2ZWM8anVtcF90aHJlYWRfZWRnZSAqPiAqanVt cF90aHJlYWRfcGF0aAotCT0gbmV3IHZlYzxqdW1wX3RocmVhZF9lZGdlICo+ ICgpOwotCi0gICAgICAvKiBSZWNvcmQgdGhlIGVkZ2VzIGJldHdlZW4gdGhl IGJsb2NrcyBpbiBQQVRILiAgKi8KLSAgICAgIGZvciAoaiA9IDA7IGogPCBw YXRoX2xlbmd0aCAtIDE7IGorKykKLQl7Ci0JICBlZGdlIGUgPSBmaW5kX2Vk Z2UgKCgqcGF0aClbcGF0aF9sZW5ndGggLSBqIC0gMV0sCi0JCQkgICAgICAo KnBhdGgpW3BhdGhfbGVuZ3RoIC0gaiAtIDJdKTsKLQkgIGdjY19hc3NlcnQg KGUpOwotCSAganVtcF90aHJlYWRfZWRnZSAqeCA9IG5ldyBqdW1wX3RocmVh ZF9lZGdlIChlLCBFREdFX0ZTTV9USFJFQUQpOwotCSAganVtcF90aHJlYWRf cGF0aC0+c2FmZV9wdXNoICh4KTsKLQl9Ci0KLSAgICAgIC8qIEFkZCB0aGUg ZWRnZSB0YWtlbiB3aGVuIHRoZSBjb250cm9sIHZhcmlhYmxlIGhhcyB2YWx1 ZSBBUkcuICAqLwotICAgICAgZWRnZSB0YWtlbl9lZGdlID0gZmluZF90YWtl bl9lZGdlICgoKnBhdGgpWzBdLCBhcmcpOwotICAgICAganVtcF90aHJlYWRf ZWRnZSAqeAotCT0gbmV3IGp1bXBfdGhyZWFkX2VkZ2UgKHRha2VuX2VkZ2Us IEVER0VfTk9fQ09QWV9TUkNfQkxPQ0spOwotICAgICAganVtcF90aHJlYWRf cGF0aC0+c2FmZV9wdXNoICh4KTsKLQotICAgICAgcmVnaXN0ZXJfanVtcF90 aHJlYWQgKGp1bXBfdGhyZWFkX3BhdGgpOwotICAgICAgLS1tYXhfdGhyZWFk ZWRfcGF0aHM7Ci0KLSAgICAgIC8qIFJlbW92ZSBCQkkgZnJvbSB0aGUgcGF0 aC4gICovCi0gICAgICBwYXRoLT5wb3AgKCk7Ci0gICAgfQotCi0gIC8qIFJl bW92ZSBhbGwgdGhlIG5vZGVzIHRoYXQgd2UgYWRkZWQgZnJvbSBORVhUX1BB VEguICAqLwotICBpZiAobmV4dF9wYXRoX2xlbmd0aCkKLSAgICB2ZWNfc2Fm ZV90cnVuY2F0ZSAocGF0aCwgKHBhdGgtPmxlbmd0aCAoKSAtIG5leHRfcGF0 aF9sZW5ndGgpKTsKLX0KLQogLyogV2UgYXJlIGV4aXRpbmcgRS0+c3JjLCBz ZWUgaWYgRS0+ZGVzdCBlbmRzIHdpdGggYSBjb25kaXRpb25hbAogICAganVt cCB3aGljaCBoYXMgYSBrbm93biB2YWx1ZSB3aGVuIHJlYWNoZWQgdmlhIEUu CiAKQEAgLTEzMzMsMTcgKzEwNTQsNyBAQCB0aHJlYWRfdGhyb3VnaF9ub3Jt YWxfYmxvY2sgKGVkZ2UgZSwKICAgICAgIC8qIFdoZW4gQ09ORCBjYW5ub3Qg YmUgc2ltcGxpZmllZCwgdHJ5IHRvIGZpbmQgcGF0aHMgZnJvbSBhIGNvbnRy b2wKIAkgc3RhdGVtZW50IGJhY2sgdGhyb3VnaCB0aGUgUEhJIG5vZGVzIHdo aWNoIHdvdWxkIGFmZmVjdCB0aGF0IGNvbnRyb2wKIAkgc3RhdGVtZW50LiAg Ki8KLSAgICAgIHZlYzxiYXNpY19ibG9jaywgdmFfZ2M+ICpiYl9wYXRoOwot ICAgICAgdmVjX2FsbG9jIChiYl9wYXRoLCBuX2Jhc2ljX2Jsb2Nrc19mb3Jf Zm4gKGNmdW4pKTsKLSAgICAgIHZlY19zYWZlX3B1c2ggKGJiX3BhdGgsIGUt PmRlc3QpOwotICAgICAgaGFzaF9zZXQ8YmFzaWNfYmxvY2s+ICp2aXNpdGVk X2JicyA9IG5ldyBoYXNoX3NldDxiYXNpY19ibG9jaz47Ci0KLSAgICAgIG1h eF90aHJlYWRlZF9wYXRocyA9IFBBUkFNX1ZBTFVFIChQQVJBTV9NQVhfRlNN X1RIUkVBRF9QQVRIUyk7Ci0gICAgICBmc21fZmluZF9jb250cm9sX3N0YXRl bWVudF90aHJlYWRfcGF0aHMgKGNvbmQsIHZpc2l0ZWRfYmJzLCBiYl9wYXRo LAotCQkJCQkgICAgICAgZmFsc2UpOwotCi0gICAgICBkZWxldGUgdmlzaXRl ZF9iYnM7Ci0gICAgICB2ZWNfZnJlZSAoYmJfcGF0aCk7CisgICAgICBmaW5k X2p1bXBfdGhyZWFkc19iYWNrd2FyZHMgKGNvbmQsIGUtPmRlc3QpOwogICAg IH0KICAgcmV0dXJuIDA7CiB9Cg== --------------040402030202040909010802--