Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mh7lU-00030k-8C for pgsql-hackers@arkaria.postgresql.org; Sun, 31 Oct 2021 10:08:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mh7lR-0004wd-0y for pgsql-hackers@arkaria.postgresql.org; Sun, 31 Oct 2021 10:08:33 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mh7lP-0004wU-QV for pgsql-hackers@lists.postgresql.org; Sun, 31 Oct 2021 10:08:32 +0000 Received: from out3-smtp.messagingengine.com ([66.111.4.27]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mh7lJ-00024m-Ox for pgsql-hackers@postgresql.org; Sun, 31 Oct 2021 10:08:31 +0000 Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id 99C715C00E0 for ; Sun, 31 Oct 2021 06:08:22 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute6.internal (MEProxy); Sun, 31 Oct 2021 06:08:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:message-id :mime-version:subject:to:x-me-proxy:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm1; bh=26McDpTgUcA7eyXOWIyOTrR5Qvtlt Hl9FsjyrmsC1X4=; b=DP7IJ0SZWEAcs9X8tT0AMj9EcRmxj8aWngtXhgo4vAtJf boM9uKYuHiJtIZ30ft/zO5rifJU7G2+/s7xfm6Hz2qSvG/6rvvN681XGt+jhrcyC 09Yx6V39KerOHEU4u+JDhrJ111g+x49krK4XBFIxqitfVF1sjHDdlz2+H4cFZagU T4NuXmygNogx4AH9HXWxyZk9M7aagqX7tWbA9v4YfbONJC96nkeZJht/Wckx+g4A +5veiU5vWoljeurEFjAqT6LTnbPbo6BperRDcfaE2k8P7amEQAlIuWF9OqMYRR36 1PMHEwISqsb1zKxbgvWs1+wkHi9pnwXvwkOvekzHQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrvdehtddguddtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhuffvkffffgggtgesmhdtreertd efjeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdrvghi shgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomheqnecuggftrfgrthhtvg hrnhepgeetfeevgedvvdeghedthfefgfejueegtdejlefhueeugeekjedtuedufedvfeev necuffhomhgrihhnpehpohhsthhgrhgvshhqlhdrohhrghenucevlhhushhtvghrufhiii gvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehpvghtvghrrdgvihhsvghnthhrrghu thesvghnthgvrhhprhhishgvuggsrdgtohhm X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Sun, 31 Oct 2021 06:08:20 -0400 (EDT) From: Peter Eisentraut Subject: Synchronizing slots from primary to standby To: pgsql-hackers Message-ID: <514f6f2f-6833-4539-39f1-96cd1e011f23@enterprisedb.com> Date: Sun, 31 Oct 2021 11:08:18 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------B217B60CF73FEE1EBF59628B" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------B217B60CF73FEE1EBF59628B Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit I want to reactivate $subject. I took Petr Jelinek's patch from [0], rebased it, added a bit of testing. It basically works, but as mentioned in [0], there are various issues to work out. The idea is that the standby runs a background worker to periodically fetch replication slot information from the primary. On failover, a logical subscriber would then ideally find up-to-date replication slots on the new publisher and can just continue normally. The previous thread didn't have a lot of discussion, but I have gathered from off-line conversations that there is a wider agreement on this approach. So the next steps would be to make it more robust and configurable and documented. As I said, I added a small test case to show that it works at all, but I think a lot more tests should be added. I have also found that this breaks some seemingly unrelated tests in the recovery test suite. I have disabled these here. I'm not sure if the patch actually breaks anything or if these are just differences in timing or implementation dependencies. This patch adds a LIST_SLOTS replication command, but I think this could be replaced with just a SELECT FROM pg_replication_slots query now. (This patch is originally older than when you could run SELECT queries over the replication protocol.) So, again, this isn't anywhere near ready, but there is already a lot here to gather feedback about how it works, how it should work, how to configure it, and how it fits into an overall replication and HA architecture. [0]: https://www.postgresql.org/message-id/flat/3095349b-44d4-bf11-1b33-7eefb585d578%402ndquadrant.com --------------B217B60CF73FEE1EBF59628B Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="v1-0001-Synchronize-logical-replication-slots-from-primar.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v1-0001-Synchronize-logical-replication-slots-from-primar.pa"; filename*1="tch" RnJvbSAzYjNjM2ZhMWQxZTkyZDZiMzlhYjBjODY5Y2I5Mzk4YmY3NzkxZDQ4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogU3VuLCAzMSBPY3QgMjAyMSAxMDo0OToyOSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjFdIFN5bmNocm9uaXplIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdHMgZnJv bSBwcmltYXJ5IHRvCiBzdGFuZGJ5CgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNj cmlwdGlvbmNtZHMuYyAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9i Z3dvcmtlci5jICAgICAgICAgICAgIHwgICAzICsKIC4uLi9saWJwcXdhbHJlY2VpdmVyL2xp YnBxd2FscmVjZWl2ZXIuYyAgICAgICB8ICA3MyArKysrCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL01ha2VmaWxlICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9sYXVuY2hlci5jICAgIHwgMTk5ICsrKysrKystLS0tCiBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMgICAgfCAzMTEgKysrKysrKysr KysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5j ICAgfCAgMTMgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3JlcGxfZ3JhbS55ICAgICAg ICAgICB8ICAxMyArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcmVwbF9zY2FubmVyLmwg ICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3RmdW5jcy5jICAg ICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMg ICAgICAgICAgIHwgMTY5ICsrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5 L3dhaXRfZXZlbnQuYyAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9zdWJz Y3JpcHRpb25jbWRzLmggICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMu aCAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL3JlcGxu b2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgOCArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9sb2dpY2Fsd29ya2VyLmggICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vc2xvdC5oICAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi93YWxyZWNlaXZlci5oICAgICAgICAgfCAgMTYgKwogc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vd29ya2VyX2ludGVybmFsLmggICAgIHwgICA4ICstCiBzcmMvaW5jbHVkZS91dGls cy93YWl0X2V2ZW50LmggICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvcmVjb3Zl cnkvdC8wMDdfc3luY19yZXAucGwgICAgICAgICAgIHwgICAzICstCiAuLi4vdC8wMTBfbG9n aWNhbF9kZWNvZGluZ190aW1lbGluZXMucGwgICAgICAgfCAgIDMgKy0KIHNyYy90ZXN0L3Jl Y292ZXJ5L3QvMDMwX3Nsb3Rfc3luYy5wbCAgICAgICAgICB8ICA1MSArKysKIDIzIGZpbGVz IGNoYW5nZWQsIDgxOSBpbnNlcnRpb25zKCspLCA3MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWNvdmVyeS90LzAzMF9zbG90X3N5bmMu cGwKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRz LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKaW5kZXggYzQ3 YmEyNjM2OS4uMmJhYjgxMzQ0MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv c3Vic2NyaXB0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlw dGlvbmNtZHMuYwpAQCAtNzQzLDcgKzc0Myw3IEBAIEFsdGVyU3Vic2NyaXB0aW9uX3JlZnJl c2goU3Vic2NyaXB0aW9uICpzdWIsIGJvb2wgY29weV9kYXRhKQogCiAJCQkJUmVtb3ZlU3Vi c2NyaXB0aW9uUmVsKHN1Yi0+b2lkLCByZWxpZCk7CiAKLQkJCQlsb2dpY2FscmVwX3dvcmtl cl9zdG9wKHN1Yi0+b2lkLCByZWxpZCk7CisJCQkJbG9naWNhbHJlcF93b3JrZXJfc3RvcChN eURhdGFiYXNlSWQsIHN1Yi0+b2lkLCByZWxpZCk7CiAKIAkJCQkvKgogCQkJCSAqIEZvciBS RUFEWSBzdGF0ZSwgd2Ugd291bGQgaGF2ZSBhbHJlYWR5IGRyb3BwZWQgdGhlCkBAIC0xMjQ0 LDcgKzEyNDQsNyBAQCBEcm9wU3Vic2NyaXB0aW9uKERyb3BTdWJzY3JpcHRpb25TdG10ICpz dG10LCBib29sIGlzVG9wTGV2ZWwpCiAJewogCQlMb2dpY2FsUmVwV29ya2VyICp3ID0gKExv Z2ljYWxSZXBXb3JrZXIgKikgbGZpcnN0KGxjKTsKIAotCQlsb2dpY2FscmVwX3dvcmtlcl9z dG9wKHctPnN1YmlkLCB3LT5yZWxpZCk7CisJCWxvZ2ljYWxyZXBfd29ya2VyX3N0b3Aody0+ ZGJpZCwgdy0+c3ViaWQsIHctPnJlbGlkKTsKIAl9CiAJbGlzdF9mcmVlKHN1YndvcmtlcnMp OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKaW5kZXggYzA1ZjUwMDYzOS4uODE4 YjhhMzVlOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5j CisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwpAQCAtMTI4LDYgKzEy OCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QKIAl9LAogCXsKIAkJIkFwcGx5V29ya2VyTWFp biIsIEFwcGx5V29ya2VyTWFpbgorCX0sCisJeworCQkiUmVwbFNsb3RTeW5jTWFpbiIsIFJl cGxTbG90U3luY01haW4KIAl9CiB9OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9saWJwcXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jCmlu ZGV4IDVjNmU1NmE1YjIuLjVkMjg3MWViMDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZl ci5jCkBAIC01OCw2ICs1OCw3IEBAIHN0YXRpYyB2b2lkIGxpYnBxcmN2X2dldF9zZW5kZXJp bmZvKFdhbFJlY2VpdmVyQ29ubiAqY29ubiwKIAkJCQkJCQkJCWNoYXIgKipzZW5kZXJfaG9z dCwgaW50ICpzZW5kZXJfcG9ydCk7CiBzdGF0aWMgY2hhciAqbGlicHFyY3ZfaWRlbnRpZnlf c3lzdGVtKFdhbFJlY2VpdmVyQ29ubiAqY29ubiwKIAkJCQkJCQkJCSAgVGltZUxpbmVJRCAq cHJpbWFyeV90bGkpOworc3RhdGljIExpc3QgKmxpYnBxcmN2X2xpc3Rfc2xvdHMoV2FsUmVj ZWl2ZXJDb25uICpjb25uKTsKIHN0YXRpYyBpbnQJbGlicHFyY3Zfc2VydmVyX3ZlcnNpb24o V2FsUmVjZWl2ZXJDb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGxpYnBxcmN2X3JlYWR0aW1l bGluZWhpc3RvcnlmaWxlKFdhbFJlY2VpdmVyQ29ubiAqY29ubiwKIAkJCQkJCQkJCQkJIFRp bWVMaW5lSUQgdGxpLCBjaGFyICoqZmlsZW5hbWUsCkBAIC04OSw2ICs5MCw3IEBAIHN0YXRp YyBXYWxSZWNlaXZlckZ1bmN0aW9uc1R5cGUgUFFXYWxSZWNlaXZlckZ1bmN0aW9ucyA9IHsK IAlsaWJwcXJjdl9nZXRfY29ubmluZm8sCiAJbGlicHFyY3ZfZ2V0X3NlbmRlcmluZm8sCiAJ bGlicHFyY3ZfaWRlbnRpZnlfc3lzdGVtLAorCWxpYnBxcmN2X2xpc3Rfc2xvdHMsCiAJbGli cHFyY3Zfc2VydmVyX3ZlcnNpb24sCiAJbGlicHFyY3ZfcmVhZHRpbWVsaW5laGlzdG9yeWZp bGUsCiAJbGlicHFyY3Zfc3RhcnRzdHJlYW1pbmcsCkBAIC0zODUsNiArMzg3LDc3IEBAIGxp YnBxcmN2X3NlcnZlcl92ZXJzaW9uKFdhbFJlY2VpdmVyQ29ubiAqY29ubikKIAlyZXR1cm4g UFFzZXJ2ZXJWZXJzaW9uKGNvbm4tPnN0cmVhbUNvbm4pOwogfQogCisvKgorICogR2V0IGxp c3Qgb2Ygc2xvdHMgZnJvbSBwcmltYXJ5LgorICovCitzdGF0aWMgTGlzdCAqCitsaWJwcXJj dl9saXN0X3Nsb3RzKFdhbFJlY2VpdmVyQ29ubiAqY29ubikKK3sKKwlQR3Jlc3VsdCAgICpy ZXM7CisJaW50CQkJaTsKKwlMaXN0CSAgICpzbG90cyA9IE5JTDsKKwlpbnQJCQludHVwbGVz OworCVdhbFJlY3ZSZXBsaWNhdGlvblNsb3REYXRhICpzbG90X2RhdGE7CisKKwlyZXMgPSBs aWJwcXJjdl9QUWV4ZWMoY29ubi0+c3RyZWFtQ29ubiwgIkxJU1RfU0xPVFMiKTsKKwlpZiAo UFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJeworCQlQUWNsZWFy KHJlcyk7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygiY291bGQgbm90IHJlY2Vp dmUgbGlzdCBvZiBzbG90cyB0aGUgcHJpbWFyeSBzZXJ2ZXI6ICVzIiwKKwkJCQkJCXBjaG9t cChQUWVycm9yTWVzc2FnZShjb25uLT5zdHJlYW1Db25uKSkpKSk7CisJfQorCWlmIChQUW5m aWVsZHMocmVzKSA8IDEwKQorCXsKKwkJaW50CQkJbmZpZWxkcyA9IFBRbmZpZWxkcyhyZXMp OworCisJCVBRY2xlYXIocmVzKTsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJp bnZhbGlkIHJlc3BvbnNlIGZyb20gcHJpbWFyeSBzZXJ2ZXIiKSwKKwkJCQkgZXJyZGV0YWls KCJDb3VsZCBub3QgZ2V0IGxpc3Qgb2Ygc2xvdHM6IGdvdCAlZCBmaWVsZHMsIGV4cGVjdGVk ICVkIG9yIG1vcmUgZmllbGRzLiIsCisJCQkJCQkgICBuZmllbGRzLCAxMCkpKTsKKwl9CisK KwludHVwbGVzID0gUFFudHVwbGVzKHJlcyk7CisJZm9yIChpID0gMDsgaSA8IG50dXBsZXM7 IGkrKykKKwl7CisJCWNoYXIgICAqc2xvdF90eXBlOworCisJCXNsb3RfZGF0YSA9IHBhbGxv YzAoc2l6ZW9mKFdhbFJlY3ZSZXBsaWNhdGlvblNsb3REYXRhKSk7CisJCW5hbWVzdHJjcHko JnNsb3RfZGF0YS0+bmFtZSwgUFFnZXR2YWx1ZShyZXMsIGksIDApKTsKKwkJaWYgKCFQUWdl dGlzbnVsbChyZXMsIGksIDEpKQorCQkJbmFtZXN0cmNweSgmc2xvdF9kYXRhLT5wbHVnaW4s IFBRZ2V0dmFsdWUocmVzLCBpLCAxKSk7CisJCXNsb3RfdHlwZSA9IFBRZ2V0dmFsdWUocmVz LCBpLCAyKTsKKwkJaWYgKCFQUWdldGlzbnVsbChyZXMsIGksIDMpKQorCQkJc2xvdF9kYXRh LT5kYXRhYmFzZSA9IGF0b29pZChQUWdldHZhbHVlKHJlcywgaSwgMykpOworCQlpZiAoc3Ry Y21wKHNsb3RfdHlwZSwgInBoeXNpY2FsIikgPT0gMCkKKwkJeworCQkJaWYgKE9pZElzVmFs aWQoc2xvdF9kYXRhLT5kYXRhYmFzZSkpCisJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQg cGh5c2ljYWwgcmVwbGljYXRpb24gc2xvdCB3aXRoIGRhdGFiYXNlIHNldCIpOworCQl9CisJ CWlmIChwZ19zdHJ0b2ludDMyKFBRZ2V0dmFsdWUocmVzLCBpLCA1KSkgPT0gMSkKKwkJCXNs b3RfZGF0YS0+cGVyc2lzdGVuY3kgPSBSU19URU1QT1JBUlk7CisJCWVsc2UKKwkJCXNsb3Rf ZGF0YS0+cGVyc2lzdGVuY3kgPSBSU19QRVJTSVNURU5UOworCQlpZiAoIVBRZ2V0aXNudWxs KHJlcywgaSwgNikpCisJCQlzbG90X2RhdGEtPnhtaW4gPSBhdG9vaWQoUFFnZXR2YWx1ZShy ZXMsIGksIDYpKTsKKwkJaWYgKCFQUWdldGlzbnVsbChyZXMsIGksIDcpKQorCQkJc2xvdF9k YXRhLT5jYXRhbG9nX3htaW4gPSBhdG9vaWQoUFFnZXR2YWx1ZShyZXMsIGksIDcpKTsKKwkJ aWYgKCFQUWdldGlzbnVsbChyZXMsIGksIDgpKQorCQkJc2xvdF9kYXRhLT5yZXN0YXJ0X2xz biA9IHBnX3N0cnRvdWludDY0KFBRZ2V0dmFsdWUocmVzLCBpLCA4KSwKKwkJCQkJCQkJCQkJ CQlOVUxMLCAxMCk7CisJCWlmICghUFFnZXRpc251bGwocmVzLCBpLCA5KSkKKwkJCXNsb3Rf ZGF0YS0+Y29uZmlybWVkX2ZsdXNoID0gcGdfc3RydG91aW50NjQoUFFnZXR2YWx1ZShyZXMs IGksIDkpLAorCQkJCQkJCQkJCQkJCQlOVUxMLCAxMCk7CisKKwkJc2xvdHMgPSBsYXBwZW5k KHNsb3RzLCBzbG90X2RhdGEpOworCX0KKworCVBRY2xlYXIocmVzKTsKKworCXJldHVybiBz bG90czsKK30KKwogLyoKICAqIFN0YXJ0IHN0cmVhbWluZyBXQUwgZGF0YSBmcm9tIGdpdmVu IHN0cmVhbWluZyBvcHRpb25zLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL01ha2VmaWxlCmluZGV4IGM0ZTJmZGViNzEuLmJjM2YyM2I1YTIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQpAQCAtMjQsNiArMjQsNyBAQCBP QkpTID0gXAogCXByb3RvLm8gXAogCXJlbGF0aW9uLm8gXAogCXJlb3JkZXJidWZmZXIubyBc CisJc2xvdHN5bmMubyBcCiAJc25hcGJ1aWxkLm8gXAogCXRhYmxlc3luYy5vIFwKIAl3b3Jr ZXIubwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVu Y2hlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jCmlu ZGV4IDNmYjRjYWE4MDMuLjQ5MTlmNzRlZjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJh Y2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNp bmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYXV0aGlkLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX3N1YnNjcmlwdGlvbl9yZWwuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCkBAIC0y MTIsNyArMjEzLDcgQEAgV2FpdEZvclJlcGxpY2F0aW9uV29ya2VyQXR0YWNoKExvZ2ljYWxS ZXBXb3JrZXIgKndvcmtlciwKICAqIHN1YnNjcmlwdGlvbiBpZCBhbmQgcmVsaWQuCiAgKi8K IExvZ2ljYWxSZXBXb3JrZXIgKgotbG9naWNhbHJlcF93b3JrZXJfZmluZChPaWQgc3ViaWQs IE9pZCByZWxpZCwgYm9vbCBvbmx5X3J1bm5pbmcpCitsb2dpY2FscmVwX3dvcmtlcl9maW5k KE9pZCBkYmlkLCBPaWQgc3ViaWQsIE9pZCByZWxpZCwgYm9vbCBvbmx5X3J1bm5pbmcpCiB7 CiAJaW50CQkJaTsKIAlMb2dpY2FsUmVwV29ya2VyICpyZXMgPSBOVUxMOwpAQCAtMjI0LDgg KzIyNSw4IEBAIGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoT2lkIHN1YmlkLCBPaWQgcmVsaWQs IGJvb2wgb25seV9ydW5uaW5nKQogCXsKIAkJTG9naWNhbFJlcFdvcmtlciAqdyA9ICZMb2dp Y2FsUmVwQ3R4LT53b3JrZXJzW2ldOwogCi0JCWlmICh3LT5pbl91c2UgJiYgdy0+c3ViaWQg PT0gc3ViaWQgJiYgdy0+cmVsaWQgPT0gcmVsaWQgJiYKLQkJCSghb25seV9ydW5uaW5nIHx8 IHctPnByb2MpKQorCQlpZiAody0+aW5fdXNlICYmIHctPmRiaWQgPT0gZGJpZCAmJiB3LT5z dWJpZCA9PSBzdWJpZCAmJgorCQkJdy0+cmVsaWQgPT0gcmVsaWQgJiYgKCFvbmx5X3J1bm5p bmcgfHwgdy0+cHJvYykpCiAJCXsKIAkJCXJlcyA9IHc7CiAJCQlicmVhazsKQEAgLTI3NSw5 ICsyNzYsMTMgQEAgbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE9pZCBkYmlkLCBPaWQgc3Vi aWQsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsIE9pZCB1c2VyaWQsCiAJaW50CQkJbnN5bmN3b3Jr ZXJzOwogCVRpbWVzdGFtcFR6IG5vdzsKIAotCWVyZXBvcnQoREVCVUcxLAotCQkJKGVycm1z Z19pbnRlcm5hbCgic3RhcnRpbmcgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHN1 YnNjcmlwdGlvbiBcIiVzXCIiLAotCQkJCQkJCSBzdWJuYW1lKSkpOworCWlmIChPaWRJc1Zh bGlkKHN1YmlkKSkKKwkJZXJlcG9ydChERUJVRzEsCisJCQkJKGVycm1zZ19pbnRlcm5hbCgi c3RhcnRpbmcgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBc IiVzXCIiLAorCQkJCQkJCQkgc3VibmFtZSkpKTsKKwllbHNlCisJCWVyZXBvcnQoREVCVUcx LAorCQkJCShlcnJtc2coInN0YXJ0aW5nIHJlcGxpY2F0aW9uIHNsb3Qgc3luY2hyb25pemF0 aW9uIHdvcmtlciIpKSk7CiAKIAkvKiBSZXBvcnQgdGhpcyBhZnRlciB0aGUgaW5pdGlhbCBz dGFydGluZyBtZXNzYWdlIGZvciBjb25zaXN0ZW5jeS4gKi8KIAlpZiAobWF4X3JlcGxpY2F0 aW9uX3Nsb3RzID09IDApCkBAIC0zMTQsNyArMzE5LDkgQEAgbG9naWNhbHJlcF93b3JrZXJf bGF1bmNoKE9pZCBkYmlkLCBPaWQgc3ViaWQsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsIE9pZCB1 c2VyaWQsCiAJICogcmVhc29uIHdlIGRvIHRoaXMgaXMgYmVjYXVzZSBpZiBzb21lIHdvcmtl ciBmYWlsZWQgdG8gc3RhcnQgdXAgYW5kIGl0cwogCSAqIHBhcmVudCBoYXMgY3Jhc2hlZCB3 aGlsZSB3YWl0aW5nLCB0aGUgaW5fdXNlIHN0YXRlIHdhcyBuZXZlciBjbGVhcmVkLgogCSAq LwotCWlmICh3b3JrZXIgPT0gTlVMTCB8fCBuc3luY3dvcmtlcnMgPj0gbWF4X3N5bmNfd29y a2Vyc19wZXJfc3Vic2NyaXB0aW9uKQorCWlmICh3b3JrZXIgPT0gTlVMTCB8fAorCQkoT2lk SXNWYWxpZChyZWxpZCkgJiYKKwkJIG5zeW5jd29ya2VycyA+PSBtYXhfc3luY193b3JrZXJz X3Blcl9zdWJzY3JpcHRpb24pKQogCXsKIAkJYm9vbAkJZGlkX2NsZWFudXAgPSBmYWxzZTsK IApAQCAtMzQ4LDcgKzM1NSw3IEBAIGxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChPaWQgZGJp ZCwgT2lkIHN1YmlkLCBjb25zdCBjaGFyICpzdWJuYW1lLCBPaWQgdXNlcmlkLAogCSAqIHNp bGVudGx5IGFzIHdlIG1pZ2h0IGdldCBoZXJlIGJlY2F1c2Ugb2YgYW4gb3RoZXJ3aXNlIGhh cm1sZXNzIHJhY2UKIAkgKiBjb25kaXRpb24uCiAJICovCi0JaWYgKG5zeW5jd29ya2VycyA+ PSBtYXhfc3luY193b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24pCisJaWYgKE9pZElzVmFsaWQo cmVsaWQpICYmIG5zeW5jd29ya2VycyA+PSBtYXhfc3luY193b3JrZXJzX3Blcl9zdWJzY3Jp cHRpb24pCiAJewogCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKIAkJ cmV0dXJuOwpAQCAtMzk1LDE1ICs0MDIsMjIgQEAgbG9naWNhbHJlcF93b3JrZXJfbGF1bmNo KE9pZCBkYmlkLCBPaWQgc3ViaWQsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsIE9pZCB1c2VyaWQs CiAJbWVtc2V0KCZiZ3csIDAsIHNpemVvZihiZ3cpKTsKIAliZ3cuYmd3X2ZsYWdzID0gQkdX T1JLRVJfU0hNRU1fQUNDRVNTIHwKIAkJQkdXT1JLRVJfQkFDS0VORF9EQVRBQkFTRV9DT05O RUNUSU9OOwotCWJndy5iZ3dfc3RhcnRfdGltZSA9IEJnV29ya2VyU3RhcnRfUmVjb3ZlcnlG aW5pc2hlZDsKKwliZ3cuYmd3X3N0YXJ0X3RpbWUgPSBCZ1dvcmtlclN0YXJ0X0NvbnNpc3Rl bnRTdGF0ZTsKIAlzbnByaW50ZihiZ3cuYmd3X2xpYnJhcnlfbmFtZSwgQkdXX01BWExFTiwg InBvc3RncmVzIik7Ci0Jc25wcmludGYoYmd3LmJnd19mdW5jdGlvbl9uYW1lLCBCR1dfTUFY TEVOLCAiQXBwbHlXb3JrZXJNYWluIik7CisJaWYgKE9pZElzVmFsaWQoc3ViaWQpKQorCQlz bnByaW50ZihiZ3cuYmd3X2Z1bmN0aW9uX25hbWUsIEJHV19NQVhMRU4sICJBcHBseVdvcmtl ck1haW4iKTsKKwllbHNlCisJCXNucHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25fbmFtZSwgQkdX X01BWExFTiwgIlJlcGxTbG90U3luY01haW4iKTsKIAlpZiAoT2lkSXNWYWxpZChyZWxpZCkp CiAJCXNucHJpbnRmKGJndy5iZ3dfbmFtZSwgQkdXX01BWExFTiwKIAkJCQkgImxvZ2ljYWwg cmVwbGljYXRpb24gd29ya2VyIGZvciBzdWJzY3JpcHRpb24gJXUgc3luYyAldSIsIHN1Ymlk LCByZWxpZCk7Ci0JZWxzZQorCWVsc2UgaWYgKE9pZElzVmFsaWQoc3ViaWQpKQogCQlzbnBy aW50ZihiZ3cuYmd3X25hbWUsIEJHV19NQVhMRU4sCiAJCQkJICJsb2dpY2FsIHJlcGxpY2F0 aW9uIHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uICV1Iiwgc3ViaWQpOworCWVsc2UKKwkJc25w cmludGYoYmd3LmJnd19uYW1lLCBCR1dfTUFYTEVOLAorCQkJCSAicmVwbGljYXRpb24gc2xv dCBzeW5jaHJvbml6YXRpb24gd29ya2VyIik7CisKIAlzbnByaW50ZihiZ3cuYmd3X3R5cGUs IEJHV19NQVhMRU4sICJsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciIpOwogCiAJYmd3LmJn d19yZXN0YXJ0X3RpbWUgPSBCR1dfTkVWRVJfUkVTVEFSVDsKQEAgLTQzNCwxNCArNDQ4LDE0 IEBAIGxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChPaWQgZGJpZCwgT2lkIHN1YmlkLCBjb25z dCBjaGFyICpzdWJuYW1lLCBPaWQgdXNlcmlkLAogICogaXQgZGV0YWNoZXMgZnJvbSB0aGUg c2xvdC4KICAqLwogdm9pZAotbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9p ZCByZWxpZCkKK2xvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIGRiaWQsIE9pZCBzdWJpZCwg T2lkIHJlbGlkKQogewogCUxvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcjsKIAl1aW50MTYJCWdl bmVyYXRpb247CiAKIAlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19T SEFSRUQpOwogCi0Jd29ya2VyID0gbG9naWNhbHJlcF93b3JrZXJfZmluZChzdWJpZCwgcmVs aWQsIGZhbHNlKTsKKwl3b3JrZXIgPSBsb2dpY2FscmVwX3dvcmtlcl9maW5kKGRiaWQsIHN1 YmlkLCByZWxpZCwgZmFsc2UpOwogCiAJLyogTm8gd29ya2VyLCBub3RoaW5nIHRvIGRvLiAq LwogCWlmICghd29ya2VyKQpAQCAtNTMxLDEzICs1NDUsMTMgQEAgbG9naWNhbHJlcF93b3Jr ZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxpZCkKICAqIFdha2UgdXAgKHVzaW5nIGxhdGNo KSBhbnkgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHNwZWNpZmllZCBzdWIvcmVs LgogICovCiB2b2lkCi1sb2dpY2FscmVwX3dvcmtlcl93YWtldXAoT2lkIHN1YmlkLCBPaWQg cmVsaWQpCitsb2dpY2FscmVwX3dvcmtlcl93YWtldXAoT2lkIGRiaWQsIE9pZCBzdWJpZCwg T2lkIHJlbGlkKQogewogCUxvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcjsKIAogCUxXTG9ja0Fj cXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CiAKLQl3b3JrZXIgPSBs b2dpY2FscmVwX3dvcmtlcl9maW5kKHN1YmlkLCByZWxpZCwgdHJ1ZSk7CisJd29ya2VyID0g bG9naWNhbHJlcF93b3JrZXJfZmluZChkYmlkLCBzdWJpZCwgcmVsaWQsIHRydWUpOwogCiAJ aWYgKHdvcmtlcikKIAkJbG9naWNhbHJlcF93b3JrZXJfd2FrZXVwX3B0cih3b3JrZXIpOwpA QCAtNzE0LDcgKzcyOCw3IEBAIEFwcGx5TGF1bmNoZXJSZWdpc3Rlcih2b2lkKQogCW1lbXNl dCgmYmd3LCAwLCBzaXplb2YoYmd3KSk7CiAJYmd3LmJnd19mbGFncyA9IEJHV09SS0VSX1NI TUVNX0FDQ0VTUyB8CiAJCUJHV09SS0VSX0JBQ0tFTkRfREFUQUJBU0VfQ09OTkVDVElPTjsK LQliZ3cuYmd3X3N0YXJ0X3RpbWUgPSBCZ1dvcmtlclN0YXJ0X1JlY292ZXJ5RmluaXNoZWQ7 CisJYmd3LmJnd19zdGFydF90aW1lID0gQmdXb3JrZXJTdGFydF9Db25zaXN0ZW50U3RhdGU7 CiAJc25wcmludGYoYmd3LmJnd19saWJyYXJ5X25hbWUsIEJHV19NQVhMRU4sICJwb3N0Z3Jl cyIpOwogCXNucHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25fbmFtZSwgQkdXX01BWExFTiwgIkFw cGx5TGF1bmNoZXJNYWluIik7CiAJc25wcmludGYoYmd3LmJnd19uYW1lLCBCR1dfTUFYTEVO LApAQCAtNzk1LDYgKzgwOSwxMTMgQEAgQXBwbHlMYXVuY2hlcldha2V1cCh2b2lkKQogCQlr aWxsKExvZ2ljYWxSZXBDdHgtPmxhdW5jaGVyX3BpZCwgU0lHVVNSMSk7CiB9CiAKK3N0YXRp YyB2b2lkCitBcHBseUxhdW5jaGVyU3RhcnRTbG90U3luYyhUaW1lc3RhbXBUeiAqbGFzdF9z dGFydF90aW1lLCBsb25nICp3YWl0X3RpbWUpCit7CisJV2FsUmVjZWl2ZXJDb25uICp3cmNv bm47CisJVGltZXN0YW1wVHogbm93OworCWNoYXIJICAgKmVycjsKKwlMaXN0CSAgICpzbG90 czsKKwlMaXN0Q2VsbCAgICpsYzsKKwlNZW1vcnlDb250ZXh0IHRtcGN0eDsKKwlNZW1vcnlD b250ZXh0IG9sZGN0eDsKKworCXdyY29ubiA9IHdhbHJjdl9jb25uZWN0KFByaW1hcnlDb25u SW5mbywgZmFsc2UsCisJCQkJCQkJIkxvZ2ljYWwgUmVwbGljYXRpb24gTGF1bmNoZXIiLCAm ZXJyKTsKKwlpZiAoIXdyY29ubikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJj b3VsZCBub3QgY29ubmVjdCB0byB0aGUgcHJpbWFyeSBzZXJ2ZXI6ICVzIiwgZXJyKSkpOwor CisJLyogVXNlIHRlbXBvcmFyeSBjb250ZXh0IGZvciB0aGUgc2xvdCBsaXN0IGFuZCB3b3Jr ZXIgaW5mby4gKi8KKwl0bXBjdHggPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wTWVtb3J5 Q29udGV4dCwKKwkJCQkJCQkJCSJMb2dpY2FsIFJlcGxpY2F0aW9uIExhdW5jaGVyIHNsb3Qg c3luYyBjdHgiLAorCQkJCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJb2xkY3R4 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGN0eCk7CisKKwlzbG90cyA9IHdhbHJjdl9s aXN0X3Nsb3RzKHdyY29ubik7CisKKwlub3cgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisK Kwlmb3JlYWNoIChsYywgc2xvdHMpCisJeworCQlXYWxSZWN2UmVwbGljYXRpb25TbG90RGF0 YSAqc2xvdF9kYXRhID0gbGZpcnN0KGxjKTsKKwkJTG9naWNhbFJlcFdvcmtlciAqdzsKKwor CQlpZiAoIU9pZElzVmFsaWQoc2xvdF9kYXRhLT5kYXRhYmFzZSkpCisJCQljb250aW51ZTsK KworCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwor CQl3ID0gbG9naWNhbHJlcF93b3JrZXJfZmluZChzbG90X2RhdGEtPmRhdGFiYXNlLCBJbnZh bGlkT2lkLAorCQkJCQkJCQkgICBJbnZhbGlkT2lkLCBmYWxzZSk7CisJCUxXTG9ja1JlbGVh c2UoTG9naWNhbFJlcFdvcmtlckxvY2spOworCisJCWlmICh3ID09IE5VTEwpCisJCXsKKwkJ CSpsYXN0X3N0YXJ0X3RpbWUgPSBub3c7CisJCQkqd2FpdF90aW1lID0gd2FsX3JldHJpZXZl X3JldHJ5X2ludGVydmFsOworCisJCQlsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goc2xvdF9k YXRhLT5kYXRhYmFzZSwgSW52YWxpZE9pZCwgTlVMTCwKKwkJCQkJCQkJCSBCT09UU1RSQVBf U1VQRVJVU0VSSUQsIEludmFsaWRPaWQpOworCQl9CisJfQorCisJLyogU3dpdGNoIGJhY2sg dG8gb3JpZ2luYWwgbWVtb3J5IGNvbnRleHQuICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGN0eCk7CisJLyogQ2xlYW4gdGhlIHRlbXBvcmFyeSBtZW1vcnkuICovCisJTWVtb3J5 Q29udGV4dERlbGV0ZSh0bXBjdHgpOworCisJd2FscmN2X2Rpc2Nvbm5lY3Qod3Jjb25uKTsK K30KKworc3RhdGljIHZvaWQKK0FwcGx5TGF1bmNoZXJTdGFydFN1YnMoVGltZXN0YW1wVHog Kmxhc3Rfc3RhcnRfdGltZSwgbG9uZyAqd2FpdF90aW1lKQoreworCVRpbWVzdGFtcFR6IG5v dzsKKwlMaXN0CSAgICpzdWJsaXN0OworCUxpc3RDZWxsICAgKmxjOworCU1lbW9yeUNvbnRl eHQgc3ViY3R4OworCU1lbW9yeUNvbnRleHQgb2xkY3R4OworCisJbm93ID0gR2V0Q3VycmVu dFRpbWVzdGFtcCgpOworCisJLyogVXNlIHRlbXBvcmFyeSBjb250ZXh0IGZvciB0aGUgZGF0 YWJhc2UgbGlzdCBhbmQgd29ya2VyIGluZm8uICovCisJc3ViY3R4ID0gQWxsb2NTZXRDb250 ZXh0Q3JlYXRlKFRvcE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgICJMb2dpY2FsIFJlcGxp Y2F0aW9uIExhdW5jaGVyIHN1Ymxpc3QiLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxU X1NJWkVTKTsKKwlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3ViY3R4KTsKKwor CS8qIHNlYXJjaCBmb3Igc3Vic2NyaXB0aW9ucyB0byBzdGFydCBvciBzdG9wLiAqLworCXN1 Ymxpc3QgPSBnZXRfc3Vic2NyaXB0aW9uX2xpc3QoKTsKKworCS8qIFN0YXJ0IHRoZSBtaXNz aW5nIHdvcmtlcnMgZm9yIGVuYWJsZWQgc3Vic2NyaXB0aW9ucy4gKi8KKwlmb3JlYWNoKGxj LCBzdWJsaXN0KQorCXsKKwkJU3Vic2NyaXB0aW9uICpzdWIgPSAoU3Vic2NyaXB0aW9uICop IGxmaXJzdChsYyk7CisJCUxvZ2ljYWxSZXBXb3JrZXIgKnc7CisKKwkJaWYgKCFzdWItPmVu YWJsZWQpCisJCQljb250aW51ZTsKKworCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3Jr ZXJMb2NrLCBMV19TSEFSRUQpOworCQl3ID0gbG9naWNhbHJlcF93b3JrZXJfZmluZChzdWIt PmRiaWQsIHN1Yi0+b2lkLCBJbnZhbGlkT2lkLCBmYWxzZSk7CisJCUxXTG9ja1JlbGVhc2Uo TG9naWNhbFJlcFdvcmtlckxvY2spOworCisJCWlmICh3ID09IE5VTEwpCisJCXsKKwkJCSps YXN0X3N0YXJ0X3RpbWUgPSBub3c7CisJCQkqd2FpdF90aW1lID0gd2FsX3JldHJpZXZlX3Jl dHJ5X2ludGVydmFsOworCisJCQlsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goc3ViLT5kYmlk LCBzdWItPm9pZCwgc3ViLT5uYW1lLAorCQkJCQkJCQkJIHN1Yi0+b3duZXIsIEludmFsaWRP aWQpOworCQl9CisJfQorCisJLyogU3dpdGNoIGJhY2sgdG8gb3JpZ2luYWwgbWVtb3J5IGNv bnRleHQuICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CisJLyogQ2xlYW4g dGhlIHRlbXBvcmFyeSBtZW1vcnkuICovCisJTWVtb3J5Q29udGV4dERlbGV0ZShzdWJjdHgp OworfQorCiAvKgogICogTWFpbiBsb29wIGZvciB0aGUgYXBwbHkgbGF1bmNoZXIgcHJvY2Vz cy4KICAqLwpAQCAtODIyLDE0ICs5NDMsMTIgQEAgQXBwbHlMYXVuY2hlck1haW4oRGF0dW0g bWFpbl9hcmcpCiAJICovCiAJQmFja2dyb3VuZFdvcmtlckluaXRpYWxpemVDb25uZWN0aW9u KE5VTEwsIE5VTEwsIDApOwogCisJbG9hZF9maWxlKCJsaWJwcXdhbHJlY2VpdmVyIiwgZmFs c2UpOworCiAJLyogRW50ZXIgbWFpbiBsb29wICovCiAJZm9yICg7OykKIAl7CiAJCWludAkJ CXJjOwotCQlMaXN0CSAgICpzdWJsaXN0OwotCQlMaXN0Q2VsbCAgICpsYzsKLQkJTWVtb3J5 Q29udGV4dCBzdWJjdHg7Ci0JCU1lbW9yeUNvbnRleHQgb2xkY3R4OwogCQlUaW1lc3RhbXBU eiBub3c7CiAJCWxvbmcJCXdhaXRfdGltZSA9IERFRkFVTFRfTkFQVElNRV9QRVJfQ1lDTEU7 CiAKQEAgLTg0MSw0MiArOTYwLDEwIEBAIEFwcGx5TGF1bmNoZXJNYWluKERhdHVtIG1haW5f YXJnKQogCQlpZiAoVGltZXN0YW1wRGlmZmVyZW5jZUV4Y2VlZHMobGFzdF9zdGFydF90aW1l LCBub3csCiAJCQkJCQkJCQkgICB3YWxfcmV0cmlldmVfcmV0cnlfaW50ZXJ2YWwpKQogCQl7 Ci0JCQkvKiBVc2UgdGVtcG9yYXJ5IGNvbnRleHQgZm9yIHRoZSBkYXRhYmFzZSBsaXN0IGFu ZCB3b3JrZXIgaW5mby4gKi8KLQkJCXN1YmN0eCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShU b3BNZW1vcnlDb250ZXh0LAotCQkJCQkJCQkJCSAgICJMb2dpY2FsIFJlcGxpY2F0aW9uIExh dW5jaGVyIHN1Ymxpc3QiLAotCQkJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMp OwotCQkJb2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN1YmN0eCk7Ci0KLQkJCS8q IHNlYXJjaCBmb3Igc3Vic2NyaXB0aW9ucyB0byBzdGFydCBvciBzdG9wLiAqLwotCQkJc3Vi bGlzdCA9IGdldF9zdWJzY3JpcHRpb25fbGlzdCgpOwotCi0JCQkvKiBTdGFydCB0aGUgbWlz c2luZyB3b3JrZXJzIGZvciBlbmFibGVkIHN1YnNjcmlwdGlvbnMuICovCi0JCQlmb3JlYWNo KGxjLCBzdWJsaXN0KQotCQkJewotCQkJCVN1YnNjcmlwdGlvbiAqc3ViID0gKFN1YnNjcmlw dGlvbiAqKSBsZmlyc3QobGMpOwotCQkJCUxvZ2ljYWxSZXBXb3JrZXIgKnc7Ci0KLQkJCQlp ZiAoIXN1Yi0+ZW5hYmxlZCkKLQkJCQkJY29udGludWU7Ci0KLQkJCQlMV0xvY2tBY3F1aXJl KExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwotCQkJCXcgPSBsb2dpY2FscmVw X3dvcmtlcl9maW5kKHN1Yi0+b2lkLCBJbnZhbGlkT2lkLCBmYWxzZSk7Ci0JCQkJTFdMb2Nr UmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Ci0KLQkJCQlpZiAodyA9PSBOVUxMKQot CQkJCXsKLQkJCQkJbGFzdF9zdGFydF90aW1lID0gbm93OwotCQkJCQl3YWl0X3RpbWUgPSB3 YWxfcmV0cmlldmVfcmV0cnlfaW50ZXJ2YWw7Ci0KLQkJCQkJbG9naWNhbHJlcF93b3JrZXJf bGF1bmNoKHN1Yi0+ZGJpZCwgc3ViLT5vaWQsIHN1Yi0+bmFtZSwKLQkJCQkJCQkJCQkJIHN1 Yi0+b3duZXIsIEludmFsaWRPaWQpOwotCQkJCX0KLQkJCX0KLQotCQkJLyogU3dpdGNoIGJh Y2sgdG8gb3JpZ2luYWwgbWVtb3J5IGNvbnRleHQuICovCi0JCQlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY3R4KTsKLQkJCS8qIENsZWFuIHRoZSB0ZW1wb3JhcnkgbWVtb3J5LiAqLwot CQkJTWVtb3J5Q29udGV4dERlbGV0ZShzdWJjdHgpOworCQkJaWYgKCFSZWNvdmVyeUluUHJv Z3Jlc3MoKSkKKwkJCQlBcHBseUxhdW5jaGVyU3RhcnRTdWJzKCZsYXN0X3N0YXJ0X3RpbWUs ICZ3YWl0X3RpbWUpOworCQkJZWxzZQorCQkJCUFwcGx5TGF1bmNoZXJTdGFydFNsb3RTeW5j KCZsYXN0X3N0YXJ0X3RpbWUsICZ3YWl0X3RpbWUpOwogCQl9CiAJCWVsc2UKIAkJewpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjliMWU1NmY2ZDgKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMKQEAgLTAs MCArMSwzMTEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogc2xvdHN5bmMuYworICoJ ICAgUG9zdGdyZVNRTCB3b3JrZXIgZm9yIHN5bmNocm9uaXppbmcgc2xvdHMgdG8gYSBzdGFu ZGJ5IGZyb20gcHJpbWFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9O CisgKgkgIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2xvdHN5bmMuYworICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKwor I2luY2x1ZGUgImNvbW1hbmRzL2RiY29tbWFuZHMuaCIKKyNpbmNsdWRlICJwZ3N0YXQuaCIK KyNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyLmgiCisjaW5jbHVkZSAicmVwbGljYXRp b24vbG9naWNhbHdvcmtlci5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHJlY2VpdmVy LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgiCisjaW5jbHVk ZSAic3RvcmFnZS9pcGMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2lu Y2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvcGdfbHNuLmgiCisK KworLyoKKyAqIFdhaXQgZm9yIHJlbW90ZSBzbG90IHRvIHBhc3MgbG9jYWx5IHJlc2VydmVk IHBvc2l0aW9uLgorICovCitzdGF0aWMgdm9pZAord2FpdF9mb3JfcHJpbWFyeV9zbG90X2Nh dGNodXAoV2FsUmVjZWl2ZXJDb25uICp3cmNvbm4sIGNoYXIgKnNsb3RfbmFtZSwKKwkJCQkJ CQkgIFhMb2dSZWNQdHIgbWluX2xzbikKK3sKKwlXYWxSY3ZFeGVjUmVzdWx0ICpyZXM7CisJ VHVwbGVUYWJsZVNsb3QgKnNsb3Q7CisJT2lkCQkJCXNsb3RSb3dbMV0gPSB7TFNOT0lEfTsK KwlTdHJpbmdJbmZvRGF0YQljbWQ7CisJYm9vbAkJCWlzbnVsbDsKKwlYTG9nUmVjUHRyCQly ZXN0YXJ0X2xzbjsKKworCWZvciAoOzspCisJeworCQlpbnQJcmM7CisKKwkJQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKTsKKworCQlpbml0U3RyaW5nSW5mbygmY21kKTsKKwkJYXBwZW5kU3Ry aW5nSW5mbygmY21kLAorCQkJCQkJICJTRUxFQ1QgcmVzdGFydF9sc24iCisJCQkJCQkgIiAg RlJPTSBwZ19jYXRhbG9nLnBnX3JlcGxpY2F0aW9uX3Nsb3RzIgorCQkJCQkJICIgV0hFUkUg c2xvdF9uYW1lID0gJXMiLAorCQkJCQkJIHF1b3RlX2xpdGVyYWxfY3N0cihzbG90X25hbWUp KTsKKwkJcmVzID0gd2FscmN2X2V4ZWMod3Jjb25uLCBjbWQuZGF0YSwgMSwgc2xvdFJvdyk7 CisKKwkJaWYgKHJlcy0+c3RhdHVzICE9IFdBTFJDVl9PS19UVVBMRVMpCisJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZmV0Y2ggc2xvdCBpbmZvIGZvciBz bG90IFwiJXNcIiBmcm9tIHByaW1hcnk6ICVzIiwKKwkJCQkJCQlzbG90X25hbWUsIHJlcy0+ ZXJyKSkpOworCisJCXNsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QocmVzLT50dXBs ZWRlc2MsICZUVFNPcHNNaW5pbWFsVHVwbGUpOworCQlpZiAoIXR1cGxlc3RvcmVfZ2V0dHVw bGVzbG90KHJlcy0+dHVwbGVzdG9yZSwgdHJ1ZSwgZmFsc2UsIHNsb3QpKQorCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJKGVycm1zZygic2xvdCBcIiVzXCIgZGlzYXBlYXJlZCBmcm9tIHBy b3ZpZGVyIiwKKwkJCQkJCQlzbG90X25hbWUpKSk7CisKKwkJcmVzdGFydF9sc24gPSBEYXR1 bUdldExTTihzbG90X2dldGF0dHIoc2xvdCwgMSwgJmlzbnVsbCkpOworCQlBc3NlcnQoIWlz bnVsbCk7CisKKwkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisJCXdhbHJjdl9jbGVhcl9yZXN1 bHQocmVzKTsKKworCQlpZiAocmVzdGFydF9sc24gPj0gbWluX2xzbikKKwkJCWJyZWFrOwor CisJCXJjID0gV2FpdExhdGNoKE15TGF0Y2gsCisJCQkJCSAgIFdMX0xBVENIX1NFVCB8IFdM X1RJTUVPVVQgfCBXTF9QT1NUTUFTVEVSX0RFQVRILAorCQkJCQkgICB3YWxfcmV0cmlldmVf cmV0cnlfaW50ZXJ2YWwsCisJCQkJCSAgIFdBSVRfRVZFTlRfUkVQTF9TTE9UX1NZTkNfTUFJ Tik7CisKKwkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKworCQkvKiBlbWVyZ2VuY3kgYmFpbG91 dCBpZiBwb3N0bWFzdGVyIGhhcyBkaWVkICovCisJCWlmIChyYyAmIFdMX1BPU1RNQVNURVJf REVBVEgpCisJCQlwcm9jX2V4aXQoMSk7CisJfQorfQorCisvKgorICogU3luY2hyb25pemUg c2luZ2xlIHNsb3QgdG8gZ2l2ZW4gcG9zaXRpb24uCisgKgorICogVGhpcyBvcHRpb25hbGx5 IGNyZWF0ZXMgbmV3IHNsb3QgaWYgdGhlcmUgaXMgbm8gZXhpc3Rpbmcgb25lLgorICovCitz dGF0aWMgdm9pZAorc3luY2hyb25pemVfb25lX3Nsb3QoV2FsUmVjZWl2ZXJDb25uICp3cmNv bm4sIGNoYXIgKnNsb3RfbmFtZSwgY2hhciAqZGF0YWJhc2UsCisJCQkJCSBjaGFyICpwbHVn aW5fbmFtZSwgWExvZ1JlY1B0ciB0YXJnZXRfbHNuKQoreworCWludAkJCWk7CisJYm9vbAkJ Zm91bmQgPSBmYWxzZTsKKwlYTG9nUmVjUHRyCWVuZGxzbjsKKworCS8qIFNlYXJjaCBmb3Ig dGhlIG5hbWVkIHNsb3QgYW5kIG1hcmsgaXQgYWN0aXZlIGlmIHdlIGZpbmQgaXQuICovCisJ TFdMb2NrQWNxdWlyZShSZXBsaWNhdGlvblNsb3RDb250cm9sTG9jaywgTFdfU0hBUkVEKTsK Kwlmb3IgKGkgPSAwOyBpIDwgbWF4X3JlcGxpY2F0aW9uX3Nsb3RzOyBpKyspCisJeworCQlS ZXBsaWNhdGlvblNsb3QgKnMgPSAmUmVwbGljYXRpb25TbG90Q3RsLT5yZXBsaWNhdGlvbl9z bG90c1tpXTsKKworCQlpZiAoIXMtPmluX3VzZSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChz dHJjbXAoTmFtZVN0cihzLT5kYXRhLm5hbWUpLCBzbG90X25hbWUpID09IDApCisJCXsKKwkJ CWZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCUxXTG9ja1JlbGVhc2UoUmVw bGljYXRpb25TbG90Q29udHJvbExvY2spOworCisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQo KTsKKworCS8qIEFscmVhZHkgZXhpc3Rpbmcgc2xvdCwgYWNxdWlyZSAqLworCWlmIChmb3Vu ZCkKKwl7CisJCVJlcGxpY2F0aW9uU2xvdEFjcXVpcmUoc2xvdF9uYW1lLCB0cnVlKTsKKwor CQlpZiAodGFyZ2V0X2xzbiA8IE15UmVwbGljYXRpb25TbG90LT5kYXRhLmNvbmZpcm1lZF9m bHVzaCkKKwkJeworCQkJZWxvZyhERUJVRzEsCisJCQkJICJub3Qgc3luY2hyb25pemluZyBz bG90ICVzOyBzeW5jaHJvbml6YXRpb24gd291bGQgbW92ZSBpdCBiYWNrd2FyZCIsCisJCQkJ IHNsb3RfbmFtZSk7CisKKwkJCVJlcGxpY2F0aW9uU2xvdFJlbGVhc2UoKTsKKwkJCUNvbW1p dFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQkJcmV0dXJuOworCQl9CisJfQorCS8qIE90aGVy d2lzZSBjcmVhdGUgdGhlIHNsb3QgZmlyc3QuICovCisJZWxzZQorCXsKKwkJVHJhbnNhY3Rp b25JZCB4bWluX2hvcml6b24gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwkJUmVwbGljYXRp b25TbG90CSAgICpzbG90OworCisJCVJlcGxpY2F0aW9uU2xvdENyZWF0ZShzbG90X25hbWUs IHRydWUsIFJTX0VQSEVNRVJBTCwgZmFsc2UpOworCQlzbG90ID0gTXlSZXBsaWNhdGlvblNs b3Q7CisKKwkJU3BpbkxvY2tBY3F1aXJlKCZzbG90LT5tdXRleCk7CisJCXNsb3QtPmRhdGEu ZGF0YWJhc2UgPSBnZXRfZGF0YWJhc2Vfb2lkKGRhdGFiYXNlLCBmYWxzZSk7CisJCW5hbWVz dHJjcHkoJnNsb3QtPmRhdGEucGx1Z2luLCBwbHVnaW5fbmFtZSk7CisJCVNwaW5Mb2NrUmVs ZWFzZSgmc2xvdC0+bXV0ZXgpOworCisJCVJlcGxpY2F0aW9uU2xvdFJlc2VydmVXYWwoKTsK KworCQlMV0xvY2tBY3F1aXJlKFByb2NBcnJheUxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCXht aW5faG9yaXpvbiA9IEdldE9sZGVzdFNhZmVEZWNvZGluZ1RyYW5zYWN0aW9uSWQodHJ1ZSk7 CisJCXNsb3QtPmVmZmVjdGl2ZV9jYXRhbG9nX3htaW4gPSB4bWluX2hvcml6b247CisJCXNs b3QtPmRhdGEuY2F0YWxvZ194bWluID0geG1pbl9ob3Jpem9uOworCQlSZXBsaWNhdGlvblNs b3RzQ29tcHV0ZVJlcXVpcmVkWG1pbih0cnVlKTsKKwkJTFdMb2NrUmVsZWFzZShQcm9jQXJy YXlMb2NrKTsKKworCQlpZiAodGFyZ2V0X2xzbiA8IE15UmVwbGljYXRpb25TbG90LT5kYXRh LnJlc3RhcnRfbHNuKQorCQl7CisJCQllbG9nKExPRywgIndhaXRpbmcgZm9yIHJlbW90ZSBz bG90ICVzIGxzbiAoJVgvJVgpIHRvIHBhc3MgbG9jYWwgc2xvdCBsc24gKCVYLyVYKSIsCisJ CQkJIHNsb3RfbmFtZSwKKwkJCQkgKHVpbnQzMikgKHRhcmdldF9sc24gPj4gMzIpLAorCQkJ CSAodWludDMyKSAodGFyZ2V0X2xzbiksCisJCQkJICh1aW50MzIpIChNeVJlcGxpY2F0aW9u U2xvdC0+ZGF0YS5yZXN0YXJ0X2xzbiA+PiAzMiksCisJCQkJICh1aW50MzIpIChNeVJlcGxp Y2F0aW9uU2xvdC0+ZGF0YS5yZXN0YXJ0X2xzbikpOworCisJCQl3YWl0X2Zvcl9wcmltYXJ5 X3Nsb3RfY2F0Y2h1cCh3cmNvbm4sIHNsb3RfbmFtZSwKKwkJCQkJCQkJCQkgIE15UmVwbGlj YXRpb25TbG90LT5kYXRhLnJlc3RhcnRfbHNuKTsKKwkJfQorCisJCVJlcGxpY2F0aW9uU2xv dFBlcnNpc3QoKTsKKwl9CisKKwllbmRsc24gPSBwZ19sb2dpY2FsX3JlcGxpY2F0aW9uX3Ns b3RfYWR2YW5jZSh0YXJnZXRfbHNuKTsKKworCWVsb2coREVCVUczLCAic3luY2hyb25pemVk IHNsb3QgJXMgdG8gbHNuICglWC8lWCkiLAorCQkgc2xvdF9uYW1lLCAodWludDMyKSAoZW5k bHNuID4+IDMyKSwgKHVpbnQzMikgKGVuZGxzbikpOworCisJUmVwbGljYXRpb25TbG90UmVs ZWFzZSgpOworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworfQorCitzdGF0aWMgdm9p ZAorc3luY2hyb25pemVfc2xvdHModm9pZCkKK3sKKwlXYWxSY3ZFeGVjUmVzdWx0ICpyZXM7 CisJV2FsUmVjZWl2ZXJDb25uICp3cmNvbm4gPSBOVUxMOworCVR1cGxlVGFibGVTbG90ICpz bG90OworCU9pZAkJCQlzbG90Um93WzNdID0ge1RFWFRPSUQsIFRFWFRPSUQsIExTTk9JRH07 CisJU3RyaW5nSW5mb0RhdGEJczsKKwljaGFyCQkgICAqZGF0YWJhc2U7CisJY2hhcgkJICAg KmVycjsKKwlNZW1vcnlDb250ZXh0CW9sZGN0eCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0Owor CisJaWYgKCFXYWxSY3YpCisJCXJldHVybjsKKworCS8qIHN5c2NhY2hlIGFjY2VzcyBuZWVk cyBhIHRyYW5zYWN0aW9uIGVudi4gKi8KKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwor CS8qIG1ha2UgZGJuYW1lIGxpdmUgb3V0c2lkZSBUWCBjb250ZXh0ICovCisJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGN0eCk7CisKKwlkYXRhYmFzZSA9IGdldF9kYXRhYmFzZV9uYW1l KE15RGF0YWJhc2VJZCk7CisJaW5pdFN0cmluZ0luZm8oJnMpOworCWFwcGVuZFN0cmluZ0lu Zm8oJnMsICIlcyBkYm5hbWU9JXMiLCBQcmltYXJ5Q29ubkluZm8sIGRhdGFiYXNlKTsKKwl3 cmNvbm4gPSB3YWxyY3ZfY29ubmVjdChzLmRhdGEsIHRydWUsICJzbG90X3N5bmMiLCAmZXJy KTsKKworCWlmICh3cmNvbm4gPT0gTlVMTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy bXNnKCJjb3VsZCBub3QgY29ubmVjdCB0byB0aGUgcHJpbWFyeSBzZXJ2ZXI6ICVzIiwgZXJy KSkpOworCisJcmVzZXRTdHJpbmdJbmZvKCZzKTsKKwkvKiBUT0RPIGZpbHRlciBzbG90IG5h bWVzPyAqLworCWFwcGVuZFN0cmluZ0luZm8oJnMsCisJCQkJCSAiU0VMRUNUIHNsb3RfbmFt ZSwgcGx1Z2luLCBjb25maXJtZWRfZmx1c2hfbHNuIgorCQkJCQkgIiAgRlJPTSBwZ19jYXRh bG9nLnBnX3JlcGxpY2F0aW9uX3Nsb3RzIgorCQkJCQkgIiBXSEVSRSBkYXRhYmFzZSA9ICVz IiwKKwkJCQkJIHF1b3RlX2xpdGVyYWxfY3N0cihkYXRhYmFzZSkpOworCXJlcyA9IHdhbHJj dl9leGVjKHdyY29ubiwgcy5kYXRhLCAzLCBzbG90Um93KTsKKwlwZnJlZShzLmRhdGEpOwor CisJaWYgKHJlcy0+c3RhdHVzICE9IFdBTFJDVl9PS19UVVBMRVMpCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycm1zZygiY291bGQgbm90IGZldGNoIHNsb3QgaW5mbyBmcm9tIHByaW1h cnk6ICVzIiwKKwkJCQkJCXJlcy0+ZXJyKSkpOworCisJQ29tbWl0VHJhbnNhY3Rpb25Db21t YW5kKCk7CisJLyogQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kIHN3aXRjaGVzIHRvIFRvcE1l bW9yeUNvbnRleHQgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKKworCXNs b3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QocmVzLT50dXBsZWRlc2MsICZUVFNPcHNN aW5pbWFsVHVwbGUpOworCXdoaWxlICh0dXBsZXN0b3JlX2dldHR1cGxlc2xvdChyZXMtPnR1 cGxlc3RvcmUsIHRydWUsIGZhbHNlLCBzbG90KSkKKwl7CisJCWNoYXIJICAgKnNsb3RfbmFt ZTsKKwkJY2hhcgkgICAqcGx1Z2luX25hbWU7CisJCVhMb2dSZWNQdHIJY29uZmlybWVkX2Zs dXNoX2xzbjsKKwkJYm9vbAkJaXNudWxsOworCisJCXNsb3RfbmFtZSA9IFRleHREYXR1bUdl dENTdHJpbmcoc2xvdF9nZXRhdHRyKHNsb3QsIDEsICZpc251bGwpKTsKKwkJQXNzZXJ0KCFp c251bGwpOworCisJCXBsdWdpbl9uYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhzbG90X2dl dGF0dHIoc2xvdCwgMiwgJmlzbnVsbCkpOworCQlBc3NlcnQoIWlzbnVsbCk7CisKKwkJY29u ZmlybWVkX2ZsdXNoX2xzbiA9IERhdHVtR2V0TFNOKHNsb3RfZ2V0YXR0cihzbG90LCAzLCAm aXNudWxsKSk7CisJCUFzc2VydCghaXNudWxsKTsKKworCQlzeW5jaHJvbml6ZV9vbmVfc2xv dCh3cmNvbm4sIHNsb3RfbmFtZSwgZGF0YWJhc2UsIHBsdWdpbl9uYW1lLAorCQkJCQkJCSBj b25maXJtZWRfZmx1c2hfbHNuKTsKKworCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwl9CisK Kwl3YWxyY3ZfY2xlYXJfcmVzdWx0KHJlcyk7CisJcGZyZWUoZGF0YWJhc2UpOworCisJd2Fs cmN2X2Rpc2Nvbm5lY3Qod3Jjb25uKTsKK30KKworLyoKKyAqIFRoZSBtYWluIGxvb3Agb2Yg b3VyIHdvcmtlciBwcm9jZXNzLgorICovCit2b2lkCitSZXBsU2xvdFN5bmNNYWluKERhdHVt IG1haW5fYXJnKQoreworCWludAkJCXdvcmtlcl9zbG90ID0gRGF0dW1HZXRJbnQzMihtYWlu X2FyZyk7CisKKwkvKiBBdHRhY2ggdG8gc2xvdCAqLworCWxvZ2ljYWxyZXBfd29ya2VyX2F0 dGFjaCh3b3JrZXJfc2xvdCk7CisKKwkvKiBFc3RhYmxpc2ggc2lnbmFsIGhhbmRsZXJzLiAq LworCUJhY2tncm91bmRXb3JrZXJVbmJsb2NrU2lnbmFscygpOworCisJLyogTG9hZCB0aGUg bGlicHEtc3BlY2lmaWMgZnVuY3Rpb25zICovCisJbG9hZF9maWxlKCJsaWJwcXdhbHJlY2Vp dmVyIiwgZmFsc2UpOworCisJLyogQ29ubmVjdCB0byBvdXIgZGF0YWJhc2UuICovCisJQmFj a2dyb3VuZFdvcmtlckluaXRpYWxpemVDb25uZWN0aW9uQnlPaWQoTXlMb2dpY2FsUmVwV29y a2VyLT5kYmlkLAorCQkJCQkJCQkJCQkgIE15TG9naWNhbFJlcFdvcmtlci0+dXNlcmlkLAor CQkJCQkJCQkJCQkgIDApOworCisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwllcmVw b3J0KExPRywKKwkJCShlcnJtc2coInJlcGxpY2F0aW9uIHNsb3Qgc3luY2hyb25pemF0aW9u IHdvcmtlciBmb3IgZGF0YWJhc2UgXCIlc1wiIGhhcyBzdGFydGVkIiwKKwkJCQkJZ2V0X2Rh dGFiYXNlX25hbWUoTXlMb2dpY2FsUmVwV29ya2VyLT5kYmlkKSkpKTsKKwlDb21taXRUcmFu c2FjdGlvbkNvbW1hbmQoKTsKKworCS8qIE1haW4gd2FpdCBsb29wLiAqLworCWZvciAoOzsp CisJeworCQlpbnQJCXJjOworCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJaWYg KCFSZWNvdmVyeUluUHJvZ3Jlc3MoKSkKKwkJCXJldHVybjsKKworCQlzeW5jaHJvbml6ZV9z bG90cygpOworCisJCXJjID0gV2FpdExhdGNoKE15TGF0Y2gsCisJCQkJCSAgIFdMX0xBVENI X1NFVCB8IFdMX1RJTUVPVVQgfCBXTF9QT1NUTUFTVEVSX0RFQVRILAorCQkJCQkgICB3YWxf cmV0cmlldmVfcmV0cnlfaW50ZXJ2YWwsCisJCQkJCSAgIFdBSVRfRVZFTlRfUkVQTF9TTE9U X1NZTkNfTUFJTik7CisKKwkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKworCQkvKiBlbWVyZ2Vu Y3kgYmFpbG91dCBpZiBwb3N0bWFzdGVyIGhhcyBkaWVkICovCisJCWlmIChyYyAmIFdMX1BP U1RNQVNURVJfREVBVEgpCisJCQlwcm9jX2V4aXQoMSk7CisJfQorfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKaW5kZXggZjA3OTgzYTQzYy4u MGUwNTkzZjcxNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC90YWJsZXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Rh Ymxlc3luYy5jCkBAIC0xMDAsNiArMTAwLDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N1 YnNjcmlwdGlvbl9yZWwuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNs dWRlICJjb21tYW5kcy9jb3B5LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvc3Vic2NyaXB0aW9u Y21kcy5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJz ZV9yZWxhdGlvbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgpAQCAtMTUxLDcgKzE1Miw4IEBA IGZpbmlzaF9zeW5jX3dvcmtlcih2b2lkKQogCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgp OwogCiAJLyogRmluZCB0aGUgbWFpbiBhcHBseSB3b3JrZXIgYW5kIHNpZ25hbCBpdC4gKi8K LQlsb2dpY2FscmVwX3dvcmtlcl93YWtldXAoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwg SW52YWxpZE9pZCk7CisJbG9naWNhbHJlcF93b3JrZXJfd2FrZXVwKE15TG9naWNhbFJlcFdv cmtlci0+ZGJpZCwKKwkJCQkJCQkgTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgSW52YWxp ZE9pZCk7CiAKIAkvKiBTdG9wIGdyYWNlZnVsbHkgKi8KIAlwcm9jX2V4aXQoMCk7CkBAIC0x OTEsNyArMTkzLDggQEAgd2FpdF9mb3JfcmVsYXRpb25fc3RhdGVfY2hhbmdlKE9pZCByZWxp ZCwgY2hhciBleHBlY3RlZF9zdGF0ZSkKIAogCQkvKiBDaGVjayBpZiB0aGUgc3luYyB3b3Jr ZXIgaXMgc3RpbGwgcnVubmluZyBhbmQgYmFpbCBpZiBub3QuICovCiAJCUxXTG9ja0FjcXVp cmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7Ci0JCXdvcmtlciA9IGxvZ2lj YWxyZXBfd29ya2VyX2ZpbmQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgcmVsaWQsCisJ CXdvcmtlciA9IGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoTXlMb2dpY2FsUmVwV29ya2VyLT5k YmlkLAorCQkJCQkJCQkJCU15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHJlbGlkLAogCQkJ CQkJCQkJCWZhbHNlKTsKIAkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7 CiAJCWlmICghd29ya2VyKQpAQCAtMjM4LDcgKzI0MSw4IEBAIHdhaXRfZm9yX3dvcmtlcl9z dGF0ZV9jaGFuZ2UoY2hhciBleHBlY3RlZF9zdGF0ZSkKIAkJICogd2FpdGluZy4KIAkJICov CiAJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7Ci0J CXdvcmtlciA9IGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoTXlMb2dpY2FsUmVwV29ya2VyLT5z dWJpZCwKKwkJd29ya2VyID0gbG9naWNhbHJlcF93b3JrZXJfZmluZChNeUxvZ2ljYWxSZXBX b3JrZXItPmRiaWQsCisJCQkJCQkJCQkJTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwKIAkJ CQkJCQkJCQlJbnZhbGlkT2lkLCBmYWxzZSk7CiAJCWlmICh3b3JrZXIgJiYgd29ya2VyLT5w cm9jKQogCQkJbG9naWNhbHJlcF93b3JrZXJfd2FrZXVwX3B0cih3b3JrZXIpOwpAQCAtNDg0 LDcgKzQ4OCw4IEBAIHByb2Nlc3Nfc3luY2luZ190YWJsZXNfZm9yX2FwcGx5KFhMb2dSZWNQ dHIgY3VycmVudF9sc24pCiAJCQkgKi8KIAkJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdv cmtlckxvY2ssIExXX1NIQVJFRCk7CiAKLQkJCXN5bmN3b3JrZXIgPSBsb2dpY2FscmVwX3dv cmtlcl9maW5kKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsCisJCQlzeW5jd29ya2VyID0g bG9naWNhbHJlcF93b3JrZXJfZmluZChNeUxvZ2ljYWxSZXBXb3JrZXItPmRiaWQsCisJCQkJ CQkJCQkJCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLAogCQkJCQkJCQkJCQkJcnN0YXRl LT5yZWxpZCwgZmFsc2UpOwogCiAJCQlpZiAoc3luY3dvcmtlcikKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3JlcGxfZ3JhbS55IGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vcmVwbF9ncmFtLnkKaW5kZXggZGNiMTEwODU3OS4uYWI0ODY5ZjMxMiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcmVwbF9ncmFtLnkKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vcmVwbF9ncmFtLnkKQEAgLTkxLDExICs5MSwxMiBAQCBzdGF0 aWMgU1FMQ21kICptYWtlX3NxbGNtZCh2b2lkKTsKICV0b2tlbiBLX1VTRV9TTkFQU0hPVAog JXRva2VuIEtfTUFOSUZFU1QKICV0b2tlbiBLX01BTklGRVNUX0NIRUNLU1VNUworJXRva2Vu IEtfTElTVF9TTE9UUwogCiAldHlwZSA8bm9kZT4JY29tbWFuZAogJXR5cGUgPG5vZGU+CWJh c2VfYmFja3VwIHN0YXJ0X3JlcGxpY2F0aW9uIHN0YXJ0X2xvZ2ljYWxfcmVwbGljYXRpb24K IAkJCQljcmVhdGVfcmVwbGljYXRpb25fc2xvdCBkcm9wX3JlcGxpY2F0aW9uX3Nsb3QgaWRl bnRpZnlfc3lzdGVtCi0JCQkJcmVhZF9yZXBsaWNhdGlvbl9zbG90IHRpbWVsaW5lX2hpc3Rv cnkgc2hvdyBzcWxfY21kCisJCQkJcmVhZF9yZXBsaWNhdGlvbl9zbG90IHRpbWVsaW5lX2hp c3Rvcnkgc2hvdyBzcWxfY21kIGxpc3Rfc2xvdHMKICV0eXBlIDxsaXN0PgliYXNlX2JhY2t1 cF9sZWdhY3lfb3B0X2xpc3QgZ2VuZXJpY19vcHRpb25fbGlzdAogJXR5cGUgPGRlZmVsdD4J YmFzZV9iYWNrdXBfbGVnYWN5X29wdCBnZW5lcmljX29wdGlvbgogJXR5cGUgPHVpbnR2YWw+ CW9wdF90aW1lbGluZQpAQCAtMTI5LDYgKzEzMCw3IEBAIGNvbW1hbmQ6CiAJCQl8IHJlYWRf cmVwbGljYXRpb25fc2xvdAogCQkJfCB0aW1lbGluZV9oaXN0b3J5CiAJCQl8IHNob3cKKwkJ CXwgbGlzdF9zbG90cwogCQkJfCBzcWxfY21kCiAJCQk7CiAKQEAgLTE0MSw2ICsxNDMsMTUg QEAgaWRlbnRpZnlfc3lzdGVtOgogCQkJCQkkJCA9IChOb2RlICopIG1ha2VOb2RlKElkZW50 aWZ5U3lzdGVtQ21kKTsKIAkJCQl9CiAJCQk7CisvKgorICogTElTVF9TTE9UUworICovCits aXN0X3Nsb3RzOgorCQkJS19MSVNUX1NMT1RTCisJCQkJeworCQkJCQkkJCA9IChOb2RlICop IG1ha2VOb2RlKExpc3RTbG90c0NtZCk7CisJCQkJfQorCQkJOwogCiAvKgogICogUkVBRF9S RVBMSUNBVElPTl9TTE9UICVzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9yZXBsX3NjYW5uZXIubCBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3JlcGxfc2Nhbm5l ci5sCmluZGV4IDFiNTk5YzI1NWUuLjllZTYzODM1NWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3JlcGxfc2Nhbm5lci5sCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3JlcGxfc2Nhbm5lci5sCkBAIC04NSw2ICs4NSw3IEBAIGlkZW50aWZpZXIJCXtp ZGVudF9zdGFydH17aWRlbnRfY29udH0qCiBCQVNFX0JBQ0tVUAkJCXsgcmV0dXJuIEtfQkFT RV9CQUNLVVA7IH0KIEZBU1QJCQl7IHJldHVybiBLX0ZBU1Q7IH0KIElERU5USUZZX1NZU1RF TQkJeyByZXR1cm4gS19JREVOVElGWV9TWVNURU07IH0KK0xJU1RfU0xPVFMJCXsgcmV0dXJu IEtfTElTVF9TTE9UUzsgfQogUkVBRF9SRVBMSUNBVElPTl9TTE9UCXsgcmV0dXJuIEtfUkVB RF9SRVBMSUNBVElPTl9TTE9UOyB9CiBTSE9XCQl7IHJldHVybiBLX1NIT1c7IH0KIExBQkVM CQkJeyByZXR1cm4gS19MQUJFTDsgfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vc2xvdGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90ZnVuY3Mu YwppbmRleCAxN2RmOTljMmFjLi4wY2YxYzg1ZDUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9zbG90ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9zbG90ZnVuY3MuYwpAQCAtNDg0LDcgKzQ4NCw3IEBAIHBnX3BoeXNpY2FsX3JlcGxpY2F0 aW9uX3Nsb3RfYWR2YW5jZShYTG9nUmVjUHRyIG1vdmV0bykKICAqIFdBTCBhbmQgcmVtb3Zh bCBvZiBvbGQgY2F0YWxvZyB0dXBsZXMuICBBcyBkZWNvZGluZyBpcyBkb25lIGluIGZhc3Rf Zm9yd2FyZAogICogbW9kZSwgbm8gY2hhbmdlcyBhcmUgZ2VuZXJhdGVkIGFueXdheS4KICAq Lwotc3RhdGljIFhMb2dSZWNQdHIKK1hMb2dSZWNQdHIKIHBnX2xvZ2ljYWxfcmVwbGljYXRp b25fc2xvdF9hZHZhbmNlKFhMb2dSZWNQdHIgbW92ZXRvKQogewogCUxvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dh bHNlbmRlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKaW5kZXgg ZDlhYjZkNmRlMi4uZjA5ZjRjMTNlYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vd2Fsc2VuZGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2Vu ZGVyLmMKQEAgLTQ1OCw2ICs0NTgsMTY3IEBAIElkZW50aWZ5U3lzdGVtKHZvaWQpCiAJZW5k X3R1cF9vdXRwdXQodHN0YXRlKTsKIH0KIAorLyoKKyAqIEhhbmRsZSB0aGUgTElTVF9TTE9U UyBjb21tYW5kLgorICovCitzdGF0aWMgdm9pZAorTGlzdFNsb3RzKHZvaWQpCit7CisJRGVz dFJlY2VpdmVyICpkZXN0OworCVR1cE91dHB1dFN0YXRlICp0c3RhdGU7CisJVHVwbGVEZXNj CXR1cGRlc2M7CisJaW50CQkJc2xvdG5vOworCisJZGVzdCA9IENyZWF0ZURlc3RSZWNlaXZl cihEZXN0UmVtb3RlU2ltcGxlKTsKKworCS8qIG5lZWQgYSB0dXBsZSBkZXNjcmlwdG9yIHJl cHJlc2VudGluZyBmb3VyIGNvbHVtbnMgKi8KKwl0dXBkZXNjID0gQ3JlYXRlVGVtcGxhdGVU dXBsZURlc2MoMTApOworCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0 dHJOdW1iZXIpIDEsICJzbG90X25hbWUiLAorCQkJCQkJCSAgVEVYVE9JRCwgLTEsIDApOwor CVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDIsICJw bHVnaW4iLAorCQkJCQkJCSAgVEVYVE9JRCwgLTEsIDApOworCVR1cGxlRGVzY0luaXRCdWls dGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDMsICJzbG90X3R5cGUiLAorCQkJCQkJ CSAgVEVYVE9JRCwgLTEsIDApOworCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVz YywgKEF0dHJOdW1iZXIpIDQsICJkYXRvaWQiLAorCQkJCQkJCSAgSU5UOE9JRCwgLTEsIDAp OworCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDUs ICJkYXRhYmFzZSIsCisJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7CisJVHVwbGVEZXNjSW5p dEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgNiwgInRlbXBvcmFyeSIsCisJ CQkJCQkJICBJTlQ0T0lELCAtMSwgMCk7CisJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0 dXBkZXNjLCAoQXR0ck51bWJlcikgNywgInhtaW4iLAorCQkJCQkJCSAgSU5UOE9JRCwgLTEs IDApOworCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIp IDgsICJjYXRhbG9nX3htaW4iLAorCQkJCQkJCSAgSU5UOE9JRCwgLTEsIDApOworCVR1cGxl RGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDksICJyZXN0YXJ0 X2xzbiIsCisJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7CisJVHVwbGVEZXNjSW5pdEJ1aWx0 aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMTAsICJjb25maXJtZWRfZmx1c2giLAor CQkJCQkJCSAgVEVYVE9JRCwgLTEsIDApOworCisJLyogcHJlcGFyZSBmb3IgcHJvamVjdGlv biBvZiB0dXBsZXMgKi8KKwl0c3RhdGUgPSBiZWdpbl90dXBfb3V0cHV0X3R1cGRlc2MoZGVz dCwgdHVwZGVzYywgJlRUU09wc1ZpcnR1YWwpOworCisJTFdMb2NrQWNxdWlyZShSZXBsaWNh dGlvblNsb3RDb250cm9sTG9jaywgTFdfU0hBUkVEKTsKKwlmb3IgKHNsb3RubyA9IDA7IHNs b3RubyA8IG1heF9yZXBsaWNhdGlvbl9zbG90czsgc2xvdG5vKyspCisJeworCQlSZXBsaWNh dGlvblNsb3QgKnNsb3QgPSAmUmVwbGljYXRpb25TbG90Q3RsLT5yZXBsaWNhdGlvbl9zbG90 c1tzbG90bm9dOworCQljaGFyCQlyZXN0YXJ0X2xzbl9zdHJbTUFYRk5BTUVMRU5dOworCQlj aGFyCQljb25maXJtZWRfZmx1c2hfbHNuX3N0cltNQVhGTkFNRUxFTl07CisJCURhdHVtCQl2 YWx1ZXNbMTBdOworCQlib29sCQludWxsc1sxMF07CisKKwkJUmVwbGljYXRpb25TbG90UGVy c2lzdGVuY3kgcGVyc2lzdGVuY3k7CisJCVRyYW5zYWN0aW9uSWQgeG1pbjsKKwkJVHJhbnNh Y3Rpb25JZCBjYXRhbG9nX3htaW47CisJCVhMb2dSZWNQdHIJcmVzdGFydF9sc247CisJCVhM b2dSZWNQdHIJY29uZmlybWVkX2ZsdXNoX2xzbjsKKwkJT2lkCQkJZGF0b2lkOworCQlOYW1l RGF0YQlzbG90X25hbWU7CisJCU5hbWVEYXRhCXBsdWdpbjsKKwkJaW50CQkJaTsKKwkJaW50 NjQJCXRtcGJpZ2ludDsKKworCQlpZiAoIXNsb3QtPmluX3VzZSkKKwkJCWNvbnRpbnVlOwor CisJCVNwaW5Mb2NrQWNxdWlyZSgmc2xvdC0+bXV0ZXgpOworCisJCXhtaW4gPSBzbG90LT5k YXRhLnhtaW47CisJCWNhdGFsb2dfeG1pbiA9IHNsb3QtPmRhdGEuY2F0YWxvZ194bWluOwor CQlkYXRvaWQgPSBzbG90LT5kYXRhLmRhdGFiYXNlOworCQlyZXN0YXJ0X2xzbiA9IHNsb3Qt PmRhdGEucmVzdGFydF9sc247CisJCWNvbmZpcm1lZF9mbHVzaF9sc24gPSBzbG90LT5kYXRh LmNvbmZpcm1lZF9mbHVzaDsKKwkJbmFtZXN0cmNweSgmc2xvdF9uYW1lLCBOYW1lU3RyKHNs b3QtPmRhdGEubmFtZSkpOworCQluYW1lc3RyY3B5KCZwbHVnaW4sIE5hbWVTdHIoc2xvdC0+ ZGF0YS5wbHVnaW4pKTsKKwkJcGVyc2lzdGVuY3kgPSBzbG90LT5kYXRhLnBlcnNpc3RlbmN5 OworCisJCVNwaW5Mb2NrUmVsZWFzZSgmc2xvdC0+bXV0ZXgpOworCisJCW1lbXNldChudWxs cywgMCwgc2l6ZW9mKG51bGxzKSk7CisKKwkJaSA9IDA7CisJCXZhbHVlc1tpKytdID0gQ1N0 cmluZ0dldFRleHREYXR1bShOYW1lU3RyKHNsb3RfbmFtZSkpOworCisJCWlmIChkYXRvaWQg PT0gSW52YWxpZE9pZCkKKwkJCW51bGxzW2krK10gPSB0cnVlOworCQllbHNlCisJCQl2YWx1 ZXNbaSsrXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oTmFtZVN0cihwbHVnaW4pKTsKKworCQlp ZiAoZGF0b2lkID09IEludmFsaWRPaWQpCisJCQl2YWx1ZXNbaSsrXSA9IENTdHJpbmdHZXRU ZXh0RGF0dW0oInBoeXNpY2FsIik7CisJCWVsc2UKKwkJCXZhbHVlc1tpKytdID0gQ1N0cmlu Z0dldFRleHREYXR1bSgibG9naWNhbCIpOworCisJCWlmIChkYXRvaWQgPT0gSW52YWxpZE9p ZCkKKwkJCW51bGxzW2krK10gPSB0cnVlOworCQllbHNlCisJCXsKKwkJCXRtcGJpZ2ludCA9 IGRhdG9pZDsKKwkJCXZhbHVlc1tpKytdID0gSW50NjRHZXREYXR1bSh0bXBiaWdpbnQpOwor CQl9CisKKwkJaWYgKGRhdG9pZCA9PSBJbnZhbGlkT2lkKQorCQkJbnVsbHNbaSsrXSA9IHRy dWU7CisJCWVsc2UKKwkJeworCQkJTWVtb3J5Q29udGV4dCBjdXIgPSBDdXJyZW50TWVtb3J5 Q29udGV4dDsKKworCQkJLyogc3lzY2FjaGUgYWNjZXNzIG5lZWRzIGEgdHJhbnNhY3Rpb24g ZW52LiAqLworCQkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJCS8qIG1ha2UgZGJu YW1lIGxpdmUgb3V0c2lkZSBUWCBjb250ZXh0ICovCisJCQlNZW1vcnlDb250ZXh0U3dpdGNo VG8oY3VyKTsKKwkJCXZhbHVlc1tpKytdID0gQ1N0cmluZ0dldFRleHREYXR1bShnZXRfZGF0 YWJhc2VfbmFtZShkYXRvaWQpKTsKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwor CQkJLyogQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kIHN3aXRjaGVzIHRvIFRvcE1lbW9yeUNv bnRleHQgKi8KKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjdXIpOworCQl9CisKKwkJdmFs dWVzW2krK10gPSBJbnQzMkdldERhdHVtKHBlcnNpc3RlbmN5ID09IFJTX1RFTVBPUkFSWSA/ IDEgOiAwKTsKKworCQlpZiAoeG1pbiAhPSBJbnZhbGlkVHJhbnNhY3Rpb25JZCkKKwkJewor CQkJdG1wYmlnaW50ID0geG1pbjsKKwkJCXZhbHVlc1tpKytdID0gSW50NjRHZXREYXR1bSh0 bXBiaWdpbnQpOworCQl9CisJCWVsc2UKKwkJCW51bGxzW2krK10gPSB0cnVlOworCisJCWlm IChjYXRhbG9nX3htaW4gIT0gSW52YWxpZFRyYW5zYWN0aW9uSWQpCisJCXsKKwkJCXRtcGJp Z2ludCA9IGNhdGFsb2dfeG1pbjsKKwkJCXZhbHVlc1tpKytdID0gSW50NjRHZXREYXR1bSh0 bXBiaWdpbnQpOworCQl9CisJCWVsc2UKKwkJCW51bGxzW2krK10gPSB0cnVlOworCisJCWlm IChyZXN0YXJ0X2xzbiAhPSBJbnZhbGlkWExvZ1JlY1B0cikKKwkJeworCQkJc25wcmludGYo cmVzdGFydF9sc25fc3RyLCBzaXplb2YocmVzdGFydF9sc25fc3RyKSwgIiVYLyVYIiwKKwkJ CQkJICh1aW50MzIpIChyZXN0YXJ0X2xzbiA+PiAzMiksCisJCQkJCSAodWludDMyKSByZXN0 YXJ0X2xzbik7CisJCQl2YWx1ZXNbaSsrXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocmVzdGFy dF9sc25fc3RyKTsKKwkJfQorCQllbHNlCisJCQludWxsc1tpKytdID0gdHJ1ZTsKKworCQlp ZiAoY29uZmlybWVkX2ZsdXNoX2xzbiAhPSBJbnZhbGlkWExvZ1JlY1B0cikKKwkJeworCQkJ c25wcmludGYoY29uZmlybWVkX2ZsdXNoX2xzbl9zdHIsIHNpemVvZihjb25maXJtZWRfZmx1 c2hfbHNuX3N0ciksCisJCQkJCSAiJVgvJVgiLAorCQkJCQkgKHVpbnQzMikgKGNvbmZpcm1l ZF9mbHVzaF9sc24gPj4gMzIpLAorCQkJCQkgKHVpbnQzMikgY29uZmlybWVkX2ZsdXNoX2xz bik7CisJCQl2YWx1ZXNbaSsrXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oY29uZmlybWVkX2Zs dXNoX2xzbl9zdHIpOworCQl9CisJCWVsc2UKKwkJCW51bGxzW2krK10gPSB0cnVlOworCisJ CS8qIHNlbmQgaXQgdG8gZGVzdCAqLworCQlkb190dXBfb3V0cHV0KHRzdGF0ZSwgdmFsdWVz LCBudWxscyk7CisJfQorCUxXTG9ja1JlbGVhc2UoUmVwbGljYXRpb25TbG90Q29udHJvbExv Y2spOworCisJZW5kX3R1cF9vdXRwdXQodHN0YXRlKTsKK30KKwogLyogSGFuZGxlIFJFQURf UkVQTElDQVRJT05fU0xPVCBjb21tYW5kICovCiBzdGF0aWMgdm9pZAogUmVhZFJlcGxpY2F0 aW9uU2xvdChSZWFkUmVwbGljYXRpb25TbG90Q21kICpjbWQpCkBAIC01NTYsNyArNzE3LDYg QEAgUmVhZFJlcGxpY2F0aW9uU2xvdChSZWFkUmVwbGljYXRpb25TbG90Q21kICpjbWQpCiAJ ZW5kX3R1cF9vdXRwdXQodHN0YXRlKTsKIH0KIAotCiAvKgogICogSGFuZGxlIFRJTUVMSU5F X0hJU1RPUlkgY29tbWFuZC4KICAqLwpAQCAtMTc0Niw2ICsxOTA2LDEzIEBAIGV4ZWNfcmVw bGljYXRpb25fY29tbWFuZChjb25zdCBjaGFyICpjbWRfc3RyaW5nKQogCQkJRW5kUmVwbGlj YXRpb25Db21tYW5kKGNtZHRhZyk7CiAJCQlicmVhazsKIAorCQljYXNlIFRfTGlzdFNsb3Rz Q21kOgorCQkJY21kdGFnID0gIkxJU1RfU0xPVFMiOworCQkJc2V0X3BzX2Rpc3BsYXkoY21k dGFnKTsKKwkJCUxpc3RTbG90cygpOworCQkJRW5kUmVwbGljYXRpb25Db21tYW5kKGNtZHRh Zyk7CisJCQlicmVhazsKKwogCQljYXNlIFRfU3RhcnRSZXBsaWNhdGlvbkNtZDoKIAkJCXsK IAkJCQlTdGFydFJlcGxpY2F0aW9uQ21kICpjbWQgPSAoU3RhcnRSZXBsaWNhdGlvbkNtZCAq KSBjbWRfbm9kZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dh aXRfZXZlbnQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYwpp bmRleCA0YTViNzUwMmY1Li45MzdiZTM0YjNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0 aXZpdHkvd2FpdF9ldmVudC5jCkBAIC0yMzAsNiArMjMwLDkgQEAgcGdzdGF0X2dldF93YWl0 X2FjdGl2aXR5KFdhaXRFdmVudEFjdGl2aXR5IHcpCiAJCWNhc2UgV0FJVF9FVkVOVF9MT0dJ Q0FMX0xBVU5DSEVSX01BSU46CiAJCQlldmVudF9uYW1lID0gIkxvZ2ljYWxMYXVuY2hlck1h aW4iOwogCQkJYnJlYWs7CisJCWNhc2UgV0FJVF9FVkVOVF9SRVBMX1NMT1RfU1lOQ19NQUlO OgorCQkJZXZlbnRfbmFtZSA9ICJSZXBsU2xvdFN5bmNNYWluIjsKKwkJCWJyZWFrOwogCQlj YXNlIFdBSVRfRVZFTlRfUEdTVEFUX01BSU46CiAJCQlldmVudF9uYW1lID0gIlBnU3RhdE1h aW4iOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zdWJz Y3JpcHRpb25jbWRzLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRz LmgKaW5kZXggYWVjN2U0NzhhYi4uMWNjMTllMGM5OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL3N1YnNjcmlwdGlvbmNtZHMuaApAQCAtMTcsNiArMTcsNyBAQAogCiAjaW5jbHVkZSAi Y2F0YWxvZy9vYmplY3RhZGRyZXNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX25vZGUu aCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgogCiBleHRlcm4gT2Jq ZWN0QWRkcmVzcyBDcmVhdGVTdWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVh dGVTdWJzY3JpcHRpb25TdG10ICpzdG10LAogCQkJCQkJCQkJCWJvb2wgaXNUb3BMZXZlbCk7 CkBAIC0yNiw0ICsyNyw2IEBAIGV4dGVybiB2b2lkIERyb3BTdWJzY3JpcHRpb24oRHJvcFN1 YnNjcmlwdGlvblN0bXQgKnN0bXQsIGJvb2wgaXNUb3BMZXZlbCk7CiBleHRlcm4gT2JqZWN0 QWRkcmVzcyBBbHRlclN1YnNjcmlwdGlvbk93bmVyKGNvbnN0IGNoYXIgKm5hbWUsIE9pZCBu ZXdPd25lcklkKTsKIGV4dGVybiB2b2lkIEFsdGVyU3Vic2NyaXB0aW9uT3duZXJfb2lkKE9p ZCBzdWJpZCwgT2lkIG5ld093bmVySWQpOwogCitleHRlcm4gdm9pZCBSZXBsaWNhdGlvblNs b3REcm9wQXRQdWJOb2RlKFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uLCBjaGFyICpzbG90bmFt ZSwgYm9vbCBtaXNzaW5nX29rKTsKKwogI2VuZGlmCQkJCQkJCS8qIFNVQlNDUklQVElPTkNN RFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaCBiL3NyYy9p bmNsdWRlL25vZGVzL25vZGVzLmgKaW5kZXggN2M2NTdjMTI0MS4uOTIwYTUxMGM0YyAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9ub2Rlcy5oCkBAIC01MDEsNiArNTAxLDcgQEAgdHlwZWRlZiBlbnVtIE5vZGVUYWcK IAlUX1N0YXJ0UmVwbGljYXRpb25DbWQsCiAJVF9UaW1lTGluZUhpc3RvcnlDbWQsCiAJVF9T UUxDbWQsCisJVF9MaXN0U2xvdHNDbWQsCiAKIAkvKgogCSAqIFRBR1MgRk9SIFJBTkRPTSBP VEhFUiBTVFVGRgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcmVwbG5vZGVzLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9yZXBsbm9kZXMuaAppbmRleCBhNzQ2ZmFmYzEyLi4wNmFh ZDRmYzZlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9yZXBsbm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9yZXBsbm9kZXMuaApAQCAtMzMsNiArMzMsMTQgQEAgdHlw ZWRlZiBzdHJ1Y3QgSWRlbnRpZnlTeXN0ZW1DbWQKIAlOb2RlVGFnCQl0eXBlOwogfSBJZGVu dGlmeVN5c3RlbUNtZDsKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCUxJU1Rf U0xPVFMgY29tbWFuZAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit0eXBlZGVm IHN0cnVjdCBMaXN0U2xvdHNDbWQKK3sKKwlOb2RlVGFnCQl0eXBlOworfSBMaXN0U2xvdHND bWQ7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlCQVNFX0JBQ0tVUCBjb21t YW5kCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2Vy LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgKaW5kZXggMmFk NjFhMDAxYS4uOTAyNzg5ZjgxNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vbG9naWNhbHdvcmtlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2lj YWx3b3JrZXIuaApAQCAtMTMsNiArMTMsNyBAQAogI2RlZmluZSBMT0dJQ0FMV09SS0VSX0gK IAogZXh0ZXJuIHZvaWQgQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKTsKK2V4dGVy biB2b2lkIFJlcGxTbG90U3luY01haW4oRGF0dW0gbWFpbl9hcmcpOwogCiBleHRlcm4gYm9v bCBJc0xvZ2ljYWxXb3JrZXIodm9pZCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3Nsb3QuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaAppbmRl eCA1M2Q3NzNjY2ZmLi5hMjllNTE3NzA3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9zbG90LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCkBA IC0yMTYsNyArMjE2LDYgQEAgZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25TbG90c0Ryb3BEQlNs b3RzKE9pZCBkYm9pZCk7CiBleHRlcm4gYm9vbCBJbnZhbGlkYXRlT2Jzb2xldGVSZXBsaWNh dGlvblNsb3RzKFhMb2dTZWdObyBvbGRlc3RTZWdubyk7CiBleHRlcm4gUmVwbGljYXRpb25T bG90ICpTZWFyY2hOYW1lZFJlcGxpY2F0aW9uU2xvdChjb25zdCBjaGFyICpuYW1lLCBib29s IG5lZWRfbG9jayk7CiBleHRlcm4gdm9pZCBSZXBsaWNhdGlvblNsb3ROYW1lRm9yVGFibGVz eW5jKE9pZCBzdWJvaWQsIE9pZCByZWxpZCwgY2hhciAqc3luY3Nsb3RuYW1lLCBpbnQgc3pz bG90KTsKLWV4dGVybiB2b2lkIFJlcGxpY2F0aW9uU2xvdERyb3BBdFB1Yk5vZGUoV2FsUmVj ZWl2ZXJDb25uICp3cmNvbm4sIGNoYXIgKnNsb3RuYW1lLCBib29sIG1pc3Npbmdfb2spOwog CiBleHRlcm4gdm9pZCBTdGFydHVwUmVwbGljYXRpb25TbG90cyh2b2lkKTsKIGV4dGVybiB2 b2lkIENoZWNrUG9pbnRSZXBsaWNhdGlvblNsb3RzKHZvaWQpOwpAQCAtMjI0LDQgKzIyMyw3 IEBAIGV4dGVybiB2b2lkIENoZWNrUG9pbnRSZXBsaWNhdGlvblNsb3RzKHZvaWQpOwogZXh0 ZXJuIHZvaWQgQ2hlY2tTbG90UmVxdWlyZW1lbnRzKHZvaWQpOwogZXh0ZXJuIHZvaWQgQ2hl Y2tTbG90UGVybWlzc2lvbnModm9pZCk7CiAKK2V4dGVybiBYTG9nUmVjUHRyIHBnX2xvZ2lj YWxfcmVwbGljYXRpb25fc2xvdF9hZHZhbmNlKFhMb2dSZWNQdHIgbW92ZXRvKTsKKworCiAj ZW5kaWYJCQkJCQkJLyogU0xPVF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi93YWxyZWNlaXZlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVj ZWl2ZXIuaAppbmRleCAwYjYwN2VkNzc3Li5mZjhiNzU1YzY3IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlICJw Z3RpbWUuaCIKICNpbmNsdWRlICJwb3J0L2F0b21pY3MuaCIKICNpbmNsdWRlICJyZXBsaWNh dGlvbi9sb2dpY2FscHJvdG8uaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCiAj aW5jbHVkZSAicmVwbGljYXRpb24vd2Fsc2VuZGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9j b25kaXRpb25fdmFyaWFibGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCkBAIC0x ODcsNiArMTg4LDEzIEBAIHR5cGVkZWYgc3RydWN0CiAJfQkJCXByb3RvOwogfSBXYWxSY3ZT dHJlYW1PcHRpb25zOwogCisvKgorICogU2xvdCBpbmZvcm1hdGlvbiByZWNlaXZlciBmcm9t IHJlbW90ZS4KKyAqCisgKiBDdXJyZW50bHkgdGhpcyBpcyBzYW1lIGFzIFJlcGxpY2F0aW9u U2xvdFBlcnNpc3RlbnREYXRhCisgKi8KKyNkZWZpbmUgV2FsUmVjdlJlcGxpY2F0aW9uU2xv dERhdGEgUmVwbGljYXRpb25TbG90UGVyc2lzdGVudERhdGEKKwogc3RydWN0IFdhbFJlY2Vp dmVyQ29ubjsKIHR5cGVkZWYgc3RydWN0IFdhbFJlY2VpdmVyQ29ubiBXYWxSZWNlaXZlckNv bm47CiAKQEAgLTI3NCw2ICsyODIsMTEgQEAgdHlwZWRlZiB2b2lkICgqd2FscmN2X2dldF9z ZW5kZXJpbmZvX2ZuKSAoV2FsUmVjZWl2ZXJDb25uICpjb25uLAogdHlwZWRlZiBjaGFyICoo KndhbHJjdl9pZGVudGlmeV9zeXN0ZW1fZm4pIChXYWxSZWNlaXZlckNvbm4gKmNvbm4sCiAJ CQkJCQkJCQkJCVRpbWVMaW5lSUQgKnByaW1hcnlfdGxpKTsKIAorLyoKKyAqIFRPRE8KKyAq LwordHlwZWRlZiBMaXN0ICooKndhbHJjdl9saXN0X3Nsb3RzX2ZuKSAoV2FsUmVjZWl2ZXJD b25uICpjb25uKTsKKwogLyoKICAqIHdhbHJjdl9zZXJ2ZXJfdmVyc2lvbl9mbgogICoKQEAg LTM4Nyw2ICs0MDAsNyBAQCB0eXBlZGVmIHN0cnVjdCBXYWxSZWNlaXZlckZ1bmN0aW9uc1R5 cGUKIAl3YWxyY3ZfZ2V0X2Nvbm5pbmZvX2ZuIHdhbHJjdl9nZXRfY29ubmluZm87CiAJd2Fs cmN2X2dldF9zZW5kZXJpbmZvX2ZuIHdhbHJjdl9nZXRfc2VuZGVyaW5mbzsKIAl3YWxyY3Zf aWRlbnRpZnlfc3lzdGVtX2ZuIHdhbHJjdl9pZGVudGlmeV9zeXN0ZW07CisJd2FscmN2X2xp c3Rfc2xvdHNfZm4gd2FscmN2X2xpc3Rfc2xvdHM7CiAJd2FscmN2X3NlcnZlcl92ZXJzaW9u X2ZuIHdhbHJjdl9zZXJ2ZXJfdmVyc2lvbjsKIAl3YWxyY3ZfcmVhZHRpbWVsaW5laGlzdG9y eWZpbGVfZm4gd2FscmN2X3JlYWR0aW1lbGluZWhpc3RvcnlmaWxlOwogCXdhbHJjdl9zdGFy dHN0cmVhbWluZ19mbiB3YWxyY3Zfc3RhcnRzdHJlYW1pbmc7CkBAIC00MTEsNiArNDI1LDgg QEAgZXh0ZXJuIFBHRExMSU1QT1JUIFdhbFJlY2VpdmVyRnVuY3Rpb25zVHlwZSAqV2FsUmVj ZWl2ZXJGdW5jdGlvbnM7CiAJV2FsUmVjZWl2ZXJGdW5jdGlvbnMtPndhbHJjdl9nZXRfc2Vu ZGVyaW5mbyhjb25uLCBzZW5kZXJfaG9zdCwgc2VuZGVyX3BvcnQpCiAjZGVmaW5lIHdhbHJj dl9pZGVudGlmeV9zeXN0ZW0oY29ubiwgcHJpbWFyeV90bGkpIFwKIAlXYWxSZWNlaXZlckZ1 bmN0aW9ucy0+d2FscmN2X2lkZW50aWZ5X3N5c3RlbShjb25uLCBwcmltYXJ5X3RsaSkKKyNk ZWZpbmUgd2FscmN2X2xpc3Rfc2xvdHMoY29ubikgXAorCVdhbFJlY2VpdmVyRnVuY3Rpb25z LT53YWxyY3ZfbGlzdF9zbG90cyhjb25uKQogI2RlZmluZSB3YWxyY3Zfc2VydmVyX3ZlcnNp b24oY29ubikgXAogCVdhbFJlY2VpdmVyRnVuY3Rpb25zLT53YWxyY3Zfc2VydmVyX3ZlcnNp b24oY29ubikKICNkZWZpbmUgd2FscmN2X3JlYWR0aW1lbGluZWhpc3RvcnlmaWxlKGNvbm4s IHRsaSwgZmlsZW5hbWUsIGNvbnRlbnQsIHNpemUpIFwKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vd29ya2VyX2ludGVybmFsLmgKaW5kZXggYzAwYmUyYTJiNi4uZTcyMjZmY2I2ZSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgK KysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKQEAgLTU3 LDcgKzU3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFdvcmtlcgogCSAqIGV4aXRz LiAgVW5kZXIgdGhpcywgc2VwYXJhdGUgYnVmZmlsZXMgd291bGQgYmUgY3JlYXRlZCBmb3Ig ZWFjaAogCSAqIHRyYW5zYWN0aW9uIHdoaWNoIHdpbGwgYmUgZGVsZXRlZCBhZnRlciB0aGUg dHJhbnNhY3Rpb24gaXMgZmluaXNoZWQuCiAJICovCi0JRmlsZVNldCAgICAqc3RyZWFtX2Zp bGVzZXQ7CisJc3RydWN0IEZpbGVTZXQgKnN0cmVhbV9maWxlc2V0OwogCiAJLyogU3RhdHMu ICovCiAJWExvZ1JlY1B0cglsYXN0X2xzbjsKQEAgLTgwLDEzICs4MCwxMyBAQCBleHRlcm4g TG9naWNhbFJlcFdvcmtlciAqTXlMb2dpY2FsUmVwV29ya2VyOwogZXh0ZXJuIGJvb2wgaW5f cmVtb3RlX3RyYW5zYWN0aW9uOwogCiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9h dHRhY2goaW50IHNsb3QpOwotZXh0ZXJuIExvZ2ljYWxSZXBXb3JrZXIgKmxvZ2ljYWxyZXBf d29ya2VyX2ZpbmQoT2lkIHN1YmlkLCBPaWQgcmVsaWQsCitleHRlcm4gTG9naWNhbFJlcFdv cmtlciAqbG9naWNhbHJlcF93b3JrZXJfZmluZChPaWQgZGJpZCwgT2lkIHN1YmlkLCBPaWQg cmVsaWQsCiAJCQkJCQkJCQkJCQlib29sIG9ubHlfcnVubmluZyk7CiBleHRlcm4gTGlzdCAq bG9naWNhbHJlcF93b3JrZXJzX2ZpbmQoT2lkIHN1YmlkLCBib29sIG9ubHlfcnVubmluZyk7 CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9pZCBz dWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwKIAkJCQkJCQkJCSBPaWQgdXNlcmlkLCBPaWQg cmVsaWQpOwotZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQs IE9pZCByZWxpZCk7Ci1leHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl93YWtldXAoT2lk IHN1YmlkLCBPaWQgcmVsaWQpOworZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfc3Rv cChPaWQgZGJpZCwgT2lkIHN1YmlkLCBPaWQgcmVsaWQpOworZXh0ZXJuIHZvaWQgbG9naWNh bHJlcF93b3JrZXJfd2FrZXVwKE9pZCBkYmlkLCBPaWQgc3ViaWQsIE9pZCByZWxpZCk7CiBl eHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl93YWtldXBfcHRyKExvZ2ljYWxSZXBXb3Jr ZXIgKndvcmtlcik7CiAKIGV4dGVybiBpbnQJbG9naWNhbHJlcF9zeW5jX3dvcmtlcl9jb3Vu dChPaWQgc3ViaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVu dC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCmluZGV4IGMyMjE0MjM2NWYu LmJhN2NhNzQzZjUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQu aAorKysgYi9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKQEAgLTQyLDYgKzQyLDcg QEAgdHlwZWRlZiBlbnVtCiAJV0FJVF9FVkVOVF9DSEVDS1BPSU5URVJfTUFJTiwKIAlXQUlU X0VWRU5UX0xPR0lDQUxfQVBQTFlfTUFJTiwKIAlXQUlUX0VWRU5UX0xPR0lDQUxfTEFVTkNI RVJfTUFJTiwKKwlXQUlUX0VWRU5UX1JFUExfU0xPVF9TWU5DX01BSU4sCiAJV0FJVF9FVkVO VF9QR1NUQVRfTUFJTiwKIAlXQUlUX0VWRU5UX1JFQ09WRVJZX1dBTF9TVFJFQU0sCiAJV0FJ VF9FVkVOVF9TWVNMT0dHRVJfTUFJTiwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5 L3QvMDA3X3N5bmNfcmVwLnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMDdfc3luY19yZXAu cGwKaW5kZXggMGQwZTYwYjc3Mi4uNjk1MDRkODRlZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVjb3ZlcnkvdC8wMDdfc3luY19yZXAucGwKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8w MDdfc3luY19yZXAucGwKQEAgLTYsNyArNiw4IEBACiB1c2Ugd2FybmluZ3M7CiB1c2UgUG9z dGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsK LXVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDExOworI3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+ IDExOwordXNlIFRlc3Q6Ok1vcmUgc2tpcF9hbGwgPT4gJ0ZJWE1FJzsKIAogIyBRdWVyeSBj aGVja2luZyBzeW5jX3ByaW9yaXR5IGFuZCBzeW5jX3N0YXRlIG9mIGVhY2ggc3RhbmRieQog bXkgJGNoZWNrX3NxbCA9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNvdmVyeS90LzAxMF9s b2dpY2FsX2RlY29kaW5nX3RpbWVsaW5lcy5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDEw X2xvZ2ljYWxfZGVjb2RpbmdfdGltZWxpbmVzLnBsCmluZGV4IDY4ZDk0YWM5MWMuLmQ0NTA2 NmMxZjIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDEwX2xvZ2ljYWxfZGVj b2RpbmdfdGltZWxpbmVzLnBsCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDEwX2xvZ2lj YWxfZGVjb2RpbmdfdGltZWxpbmVzLnBsCkBAIC0yNiw3ICsyNiw4IEBACiAKIHVzZSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwot dXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMTM7CisjdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4g MTM7Cit1c2UgVGVzdDo6TW9yZSBza2lwX2FsbCA9PiAnRklYTUUnOwogdXNlIEZpbGU6OkNv cHk7CiB1c2UgSVBDOjpSdW4gKCk7CiB1c2UgU2NhbGFyOjpVdGlsIHF3KGJsZXNzZWQpOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMzBfc2xvdF9zeW5jLnBsIGIvc3Jj L3Rlc3QvcmVjb3ZlcnkvdC8wMzBfc2xvdF9zeW5jLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLjEwOWRhYWE5ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9yZWNvdmVyeS90LzAzMF9zbG90X3N5bmMucGwKQEAgLTAsMCArMSw1MSBAQAorCisj IENvcHlyaWdodCAoYykgMjAyMSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1v cmUgdGVzdHMgPT4gMjsKKworbXkgJG5vZGVfcHJpbWFyeSA9IFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXItPm5ldygncHJpbWFyeScpOworJG5vZGVfcHJpbWFyeS0+aW5pdChhbGxvd3Nf c3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9wcmltYXJ5LT5zdGFydDsKKworJG5v ZGVfcHJpbWFyeS0+YmFja3VwKCdiYWNrdXAnKTsKKworbXkgJG5vZGVfcGh5c19zdGFuZGJ5 ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwaHlzX3N0YW5kYnknKTsKKyRu b2RlX3BoeXNfc3RhbmRieS0+aW5pdF9mcm9tX2JhY2t1cCgkbm9kZV9wcmltYXJ5LCAnYmFj a3VwJywgaGFzX3N0cmVhbWluZyA9PiAxKTsKKyRub2RlX3BoeXNfc3RhbmRieS0+c3RhcnQ7 CisKKyRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxF IHQxIChhIGludCBQUklNQVJZIEtFWSkiKTsKKyRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdDEgVkFMVUVTICgxKSwgKDIpLCAoMykiKTsKKwor bXkgJG5vZGVfc3Vic2NyaWJlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygn c3Vic2NyaWJlcicpOworJG5vZGVfc3Vic2NyaWJlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5n ID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKKworJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdDEgKGEgaW50 IFBSSU1BUlkgS0VZKSIpOworCiskbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBBTEwgVEFCTEVTIik7Ciskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQVElP TiBzdWIxIENPTk5FQ1RJT04gJyIgLiAoJG5vZGVfcHJpbWFyeS0+Y29ubnN0ciAuICcgZGJu YW1lPXBvc3RncmVzJykgLiAiJyBQVUJMSUNBVElPTiBwdWIxIik7CisKKyMgV2FpdCBmb3Ig aW5pdGlhbCBzeW5jIG9mIGFsbCBzdWJzY3JpcHRpb25zCitteSAkc3luY2VkX3F1ZXJ5ID0K KyAgIlNFTEVDVCBjb3VudCgxKSA9IDAgRlJPTSBwZ19zdWJzY3JpcHRpb25fcmVsIFdIRVJF IHNyc3Vic3RhdGUgTk9UIElOICgncicsICdzJyk7IjsKKyRub2RlX3N1YnNjcmliZXItPnBv bGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywgJHN5bmNlZF9xdWVyeSkKKyAgb3IgZGllICJU aW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3Igc3Vic2NyaWJlciB0byBzeW5jaHJvbml6ZSBk YXRhIjsKKworbXkgJHJlc3VsdCA9ICRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJTRUxFQ1Qgc2xvdF9uYW1lLCBwbHVnaW4sIGRhdGFiYXNlIEZST00gcGdfcmVw bGljYXRpb25fc2xvdHMgV0hFUkUgc2xvdF90eXBlID0gJ2xvZ2ljYWwnIik7CisKK2lzKCRy ZXN1bHQsIHFxKHN1YjF8cGdvdXRwdXR8cG9zdGdyZXMpLCAnbG9naWNhbCBzbG90IG9uIHBy aW1hcnknKTsKKworIyBGSVhNRTogc3RhbmRieSBuZWVkcyByZXN0YXJ0IHRvIHBpY2sgdXAg bmV3IHNsb3RzCiskbm9kZV9waHlzX3N0YW5kYnktPnJlc3RhcnQ7CitzbGVlcCAzOworCisk cmVzdWx0ID0gJG5vZGVfcGh5c19zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki U0VMRUNUIHNsb3RfbmFtZSwgcGx1Z2luLCBkYXRhYmFzZSBGUk9NIHBnX3JlcGxpY2F0aW9u X3Nsb3RzIFdIRVJFIHNsb3RfdHlwZSA9ICdsb2dpY2FsJyIpOworCitpcygkcmVzdWx0LCBx cShzdWIxfHBnb3V0cHV0fHBvc3RncmVzKSwgJ2xvZ2ljYWwgc2xvdCBvbiBzdGFuZGJ5Jyk7 CgpiYXNlLWNvbW1pdDogZTZjNjA3MTllNmM2ZWU5YmQzOTZmNDMwODc5ZTFkZTkwNzliZjc0 YwotLSAKMi4zMy4xCgo= --------------B217B60CF73FEE1EBF59628B--