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 1n4Ng4-0006Yv-04 for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Jan 2022 13:47:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1n4Ng0-0007Ql-Rl for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Jan 2022 13:47:04 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n4Ng0-0007Qa-4J for pgsql-hackers@lists.postgresql.org; Mon, 03 Jan 2022 13:47:04 +0000 Received: from wout3-smtp.messagingengine.com ([64.147.123.19]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n4Nfu-0003cg-3X for pgsql-hackers@postgresql.org; Mon, 03 Jan 2022 13:47:02 +0000 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.west.internal (Postfix) with ESMTP id 84959320076F for ; Mon, 3 Jan 2022 08:46:56 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Mon, 03 Jan 2022 08:46:56 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=VLwtPJ cB5tLVLvDsrFxffzhrutQq03N0HxESLyJVTAw=; b=h/Tb72b89FhQaNC1I6HIMC md9TOCgqqsJSZWlbVvnTJBj7cHwoVvxbZ2dFf2xxk0AE0MlQnHycz4BIHNKBsTXA pVtoQtAtb3d4l8z2DCTAE6n9ENZ4JYnfysLS/uue7QqLCoZRnHl3XhTvsWnLkH64 sX10UNZuH6/vo2JkimZlwqkphP6GrdgZPRYt0Fn7/PsdGLtcORu1LPQ4x7rxlnh9 IstbgCmRDyc5/PRuzAUbwLILljPT+J7UOqcFkTHJs/LyTkWeHBwzktlCejfNvnP/ dMUgFISqfdwprWfooKGD0TeInNP6z7ldq25UNmp6vEniPea6Bj2i2LXFcPRR/5fQ == X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvuddrudefuddgheeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpegtkfffgggfuffhvfhfjgesmhdtre ertdefjeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdr vghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomheqnecuggftrfgrth htvghrnhepkeetteefheevhfdvledtfeegleeutdekkeekveeifeeuffevjeeujeehffej ieejnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepph gvthgvrhdrvghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomh X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Mon, 3 Jan 2022 08:46:54 -0500 (EST) Content-Type: multipart/mixed; boundary="------------DH5tQBqAY9Autru1bMzXa8pq" Message-ID: <646acd8d-9896-ed8d-2ab4-0bf11b3285d4@enterprisedb.com> Date: Mon, 3 Jan 2022 14:46:52 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: Re: Synchronizing slots from primary to standby Content-Language: en-US From: Peter Eisentraut To: pgsql-hackers References: <514f6f2f-6833-4539-39f1-96cd1e011f23@enterprisedb.com> <18dbc929-a281-8552-4f1d-7e4d0e4eedba@enterprisedb.com> In-Reply-To: <18dbc929-a281-8552-4f1d-7e4d0e4eedba@enterprisedb.com> 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. --------------DH5tQBqAY9Autru1bMzXa8pq Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Here is an updated patch to fix some build failures. No feature changes. On 14.12.21 23:12, Peter Eisentraut wrote: > On 31.10.21 11:08, Peter Eisentraut wrote: >> 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. > >> 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. > > Here is an updated patch.  The main changes are that I added two > configuration parameters.  The first, synchronize_slot_names, is set on > the physical standby to specify which slots to sync from the primary. By > default, it is empty.  (This also fixes the recovery test failures that > I had to disable in the previous patch version.)  The second, > standby_slot_names, is set on the primary.  It holds back logical > replication until the listed physical standbys have caught up.  That > way, when failover is necessary, the promoted standby is not behind the > logical replication consumers. > > In principle, this works now, I think.  I haven't made much progress in > creating more test cases for this; that's something that needs more > attention. > > It's worth pondering what the configuration language for > standby_slot_names should be.  Right now, it's just a list of slots that > all need to be caught up.  More complicated setups are conceivable. > Maybe you have standbys S1 and S2 that are potential failover targets > for logical replication consumers L1 and L2, and also standbys S3 and S4 > that are potential failover targets for logical replication consumers L3 > and L4.  Viewed like that, this setting could be a replication slot > setting.  The setting might also have some relationship with > synchronous_standby_names.  Like, if you have synchronous_standby_names > set, then that's a pretty good indication that you also want some or all > of those standbys in standby_slot_names.  (But note that one is slots > and one is application names.)  So there are a variety of possibilities. --------------DH5tQBqAY9Autru1bMzXa8pq Content-Type: text/plain; charset=UTF-8; name="v3-0001-Synchronize-logical-replication-slots-from-primar.patch" Content-Disposition: attachment; filename*0="v3-0001-Synchronize-logical-replication-slots-from-primar.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBlYzAwZGM2YWI4YmFmZWZjMDBlOWIxYzc4YWM5MzQ4YjY0M2I4YTg3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCAzIEphbiAyMDIyIDE0OjQzOjM2ICswMTAwClN1YmplY3Q6 IFtQQVRDSCB2M10gU3luY2hyb25pemUgbG9naWNhbCByZXBsaWNhdGlvbiBzbG90cyBmcm9t IHByaW1hcnkgdG8KIHN0YW5kYnkKCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVz cWwub3JnL21lc3NhZ2UtaWQvZmxhdC81MTRmNmYyZi02ODMzLTQ1MzktMzlmMS05NmNkMWUw MTFmMjMlNDBlbnRlcnByaXNlZGIuY29tCi0tLQogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21s ICAgICAgICAgICAgICAgICAgICAgIHwgIDM0ICsrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9z dWJzY3JpcHRpb25jbWRzLmMgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvYmd3b3JrZXIuYyAgICAgICAgICAgICB8ICAgMyArCiAuLi4vbGlicHF3YWxyZWNlaXZl ci9saWJwcXdhbHJlY2VpdmVyLmMgICAgICAgfCAgOTQgKysrKwogc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYyAgICB8IDIwMiArKysrKystLS0KIC4uLi9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyAgICAgICB8ICA4NSArKysrCiBz cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMgICAgfCA0MTIgKysr KysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxl c3luYy5jICAgfCAgMTMgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3JlcGxfZ3JhbS55 ICAgICAgICAgICB8ICAzMiArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcmVwbF9zY2Fu bmVyLmwgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3RmdW5j cy5jICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2Vu ZGVyLmMgICAgICAgICAgIHwgMTk2ICsrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWN0 aXZpdHkvd2FpdF9ldmVudC5jICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjLmMgICAgICAgICAgICAgICAgICB8ICAyMyArCiBzcmMvYmFja2VuZC91dGlscy9t aXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDIgKwogc3JjL2luY2x1ZGUvY29tbWFu ZHMvc3Vic2NyaXB0aW9uY21kcy5oICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL25vZGVz L25vZGVzLmggICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9ub2Rl cy9yZXBsbm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vbG9naWNhbHdvcmtlci5oICAgICAgIHwgICA5ICsKIHNyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3Nsb3QuaCAgICAgICAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCAgICAgICAgIHwgIDE2ICsKIHNyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oICAgICB8ICAgOCArLQogc3JjL2luY2x1 ZGUvdXRpbHMvd2FpdF9ldmVudC5oICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0 L3JlY292ZXJ5L3QvMDMwX3Nsb3Rfc3luYy5wbCAgICAgICAgICB8ICA1OCArKysKIDI1IGZp bGVzIGNoYW5nZWQsIDExNDYgaW5zZXJ0aW9ucygrKSwgNzAgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3lu Yy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMzBfc2xvdF9z eW5jLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3Ny Yy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IGFmYmI2YzM1ZTMuLjJiMmEyMWEyNTEgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29u ZmlnLnNnbWwKQEAgLTQ0MDYsNiArNDQwNiwyMyBAQCA8dGl0bGU+UHJpbWFyeSBTZXJ2ZXI8 L3RpdGxlPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAg ICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXN0YW5kYnktc2xvdC1uYW1lcyIgeHJlZmxhYmVs PSJzdGFuZGJ5X3Nsb3RfbmFtZXMiPgorICAgICAgPHRlcm0+PHZhcm5hbWU+c3RhbmRieV9z bG90X25hbWVzPC92YXJuYW1lPiAoPHR5cGU+c3RyaW5nPC90eXBlPikKKyAgICAgIDxpbmRl eHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+c3RhbmRieV9zbG90X25hbWVzPC92 YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5k ZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICBMaXN0IG9mIHBoeXNpY2FsIHJlcGxpY2F0aW9uIHNsb3RzIHRoYXQgbG9n aWNhbCByZXBsaWNhdGlvbiB3YWl0cyBmb3IuCisgICAgICAgIElmIGEgbG9naWNhbCByZXBs aWNhdGlvbiBjb25uZWN0aW9uIGlzIG1lYW50IHRvIHN3aXRjaCB0byBhIHBoeXNpY2FsCisg ICAgICAgIHN0YW5kYnkgYWZ0ZXIgdGhlIHN0YW5kYnkgaXMgcHJvbW90ZWQsIHRoZSBwaHlz aWNhbCByZXBsaWNhdGlvbiBzbG90CisgICAgICAgIGZvciB0aGUgc3RhbmRieSBzaG91bGQg YmUgbGlzdGVkIGhlcmUuICBUaGlzIGVuc3VyZXMgdGhhdCBsb2dpY2FsCisgICAgICAgIHJl cGxpY2F0aW9uIGlzIG5vdCBhaGVhZCBvZiB0aGUgcGh5c2ljYWwgc3RhbmRieS4KKyAgICAg ICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwog ICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICA8L3NlY3QyPgogCkBAIC00Nzk0LDYgKzQ4MTEs MjMgQEAgPHRpdGxlPlN0YW5kYnkgU2VydmVyczwvdGl0bGU+CiAgICAgICA8L2xpc3RpdGVt PgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMt c3luY2hyb25pemVfc2xvdF9uYW1lcyIgeHJlZmxhYmVsPSJzeW5jaHJvbml6ZV9zbG90X25h bWVzIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPnN5bmNocm9uaXplX3Nsb3RfbmFtZXM8L3Zh cm5hbWU+ICg8dHlwZT5zdHJpbmc8L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAg ICA8cHJpbWFyeT48dmFybmFtZT5zeW5jaHJvbml6ZV9zbG90X25hbWVzPC92YXJuYW1lPiBj b25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgor ICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAg ICBTcGVjaWZpZXMgYSBsaXN0IG9mIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdHMgdGhhdCBh IHBoeXNpY2FsIHN0YW5kYnkKKyAgICAgICAgc2hvdWxkIHN5bmNocm9uaXplIGZyb20gdGhl IHByaW1hcnkgc2VydmVyLiAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gYmUKKyAgICAgICAgYWJs ZSB0byByZXRhcmdldCB0aG9zZSBsb2dpY2FsIHJlcGxpY2F0aW9uIGNvbm5lY3Rpb25zIHRv IHRoaXMgc3RhbmRieQorICAgICAgICBpZiBpdCBnZXRzIHByb21vdGVkLiAgU3BlY2lmeSA8 bGl0ZXJhbD4qPC9saXRlcmFsPiB0byBzeW5jaHJvbml6ZSBhbGwKKyAgICAgICAgbG9naWNh bCByZXBsaWNhdGlvbiBzbG90cy4gIFRoZSBkZWZhdWx0IGlzIGVtcHR5LgorICAgICAgIDwv cGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAg IDwvdmFyaWFibGVsaXN0PgogICAgIDwvc2VjdDI+CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3N1YnNjcmlwdGlvbmNtZHMuYwppbmRleCAyYjY1ODA4MGZlLi43Y2RlYTIwMjA3IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC03MzcsNyArNzM3 LDcgQEAgQWx0ZXJTdWJzY3JpcHRpb25fcmVmcmVzaChTdWJzY3JpcHRpb24gKnN1YiwgYm9v bCBjb3B5X2RhdGEpCiAKIAkJCQlSZW1vdmVTdWJzY3JpcHRpb25SZWwoc3ViLT5vaWQsIHJl bGlkKTsKIAotCQkJCWxvZ2ljYWxyZXBfd29ya2VyX3N0b3Aoc3ViLT5vaWQsIHJlbGlkKTsK KwkJCQlsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE15RGF0YWJhc2VJZCwgc3ViLT5vaWQsIHJl bGlkKTsKIAogCQkJCS8qCiAJCQkJICogRm9yIFJFQURZIHN0YXRlLCB3ZSB3b3VsZCBoYXZl IGFscmVhZHkgZHJvcHBlZCB0aGUKQEAgLTEyMzksNyArMTIzOSw3IEBAIERyb3BTdWJzY3Jp cHRpb24oRHJvcFN1YnNjcmlwdGlvblN0bXQgKnN0bXQsIGJvb2wgaXNUb3BMZXZlbCkKIAl7 CiAJCUxvZ2ljYWxSZXBXb3JrZXIgKncgPSAoTG9naWNhbFJlcFdvcmtlciAqKSBsZmlyc3Qo bGMpOwogCi0JCWxvZ2ljYWxyZXBfd29ya2VyX3N0b3Aody0+c3ViaWQsIHctPnJlbGlkKTsK KwkJbG9naWNhbHJlcF93b3JrZXJfc3RvcCh3LT5kYmlkLCB3LT5zdWJpZCwgdy0+cmVsaWQp OwogCX0KIAlsaXN0X2ZyZWUoc3Vid29ya2Vycyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3 b3JrZXIuYwppbmRleCBjMDVmNTAwNjM5Li44MThiOGEzNWU5IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9iZ3dvcmtlci5jCkBAIC0xMjgsNiArMTI4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVj dAogCX0sCiAJewogCQkiQXBwbHlXb3JrZXJNYWluIiwgQXBwbHlXb3JrZXJNYWluCisJfSwK Kwl7CisJCSJSZXBsU2xvdFN5bmNNYWluIiwgUmVwbFNsb3RTeW5jTWFpbgogCX0KIH07CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIv bGlicHF3YWxyZWNlaXZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxy ZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMKaW5kZXggYzA4ZTU5OWVlZi4uYzcxZmIwYzFl YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxyZWNlaXZl ci9saWJwcXdhbHJlY2VpdmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGli cHF3YWxyZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNp bmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BnX2xzbi5oIgog I2luY2x1ZGUgInV0aWxzL3R1cGxlc3RvcmUuaCIKKyNpbmNsdWRlICJ1dGlscy92YXJsZW5h LmgiCiAKIFBHX01PRFVMRV9NQUdJQzsKIApAQCAtNTgsNiArNTksNyBAQCBzdGF0aWMgdm9p ZCBsaWJwcXJjdl9nZXRfc2VuZGVyaW5mbyhXYWxSZWNlaXZlckNvbm4gKmNvbm4sCiAJCQkJ CQkJCQljaGFyICoqc2VuZGVyX2hvc3QsIGludCAqc2VuZGVyX3BvcnQpOwogc3RhdGljIGNo YXIgKmxpYnBxcmN2X2lkZW50aWZ5X3N5c3RlbShXYWxSZWNlaXZlckNvbm4gKmNvbm4sCiAJ CQkJCQkJCQkgIFRpbWVMaW5lSUQgKnByaW1hcnlfdGxpKTsKK3N0YXRpYyBMaXN0ICpsaWJw cXJjdl9saXN0X3Nsb3RzKFdhbFJlY2VpdmVyQ29ubiAqY29ubiwgY29uc3QgY2hhciAqc2xv dF9uYW1lcyk7CiBzdGF0aWMgaW50CWxpYnBxcmN2X3NlcnZlcl92ZXJzaW9uKFdhbFJlY2Vp dmVyQ29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBsaWJwcXJjdl9yZWFkdGltZWxpbmVoaXN0 b3J5ZmlsZShXYWxSZWNlaXZlckNvbm4gKmNvbm4sCiAJCQkJCQkJCQkJCSBUaW1lTGluZUlE IHRsaSwgY2hhciAqKmZpbGVuYW1lLApAQCAtODksNiArOTEsNyBAQCBzdGF0aWMgV2FsUmVj ZWl2ZXJGdW5jdGlvbnNUeXBlIFBRV2FsUmVjZWl2ZXJGdW5jdGlvbnMgPSB7CiAJbGlicHFy Y3ZfZ2V0X2Nvbm5pbmZvLAogCWxpYnBxcmN2X2dldF9zZW5kZXJpbmZvLAogCWxpYnBxcmN2 X2lkZW50aWZ5X3N5c3RlbSwKKwlsaWJwcXJjdl9saXN0X3Nsb3RzLAogCWxpYnBxcmN2X3Nl cnZlcl92ZXJzaW9uLAogCWxpYnBxcmN2X3JlYWR0aW1lbGluZWhpc3RvcnlmaWxlLAogCWxp YnBxcmN2X3N0YXJ0c3RyZWFtaW5nLApAQCAtMzk3LDYgKzQwMCw5NyBAQCBsaWJwcXJjdl9z ZXJ2ZXJfdmVyc2lvbihXYWxSZWNlaXZlckNvbm4gKmNvbm4pCiAJcmV0dXJuIFBRc2VydmVy VmVyc2lvbihjb25uLT5zdHJlYW1Db25uKTsKIH0KIAorLyoKKyAqIEdldCBsaXN0IG9mIHNs b3RzIGZyb20gcHJpbWFyeS4KKyAqLworc3RhdGljIExpc3QgKgorbGlicHFyY3ZfbGlzdF9z bG90cyhXYWxSZWNlaXZlckNvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnNsb3RfbmFtZXMpCit7 CisJUEdyZXN1bHQgICAqcmVzOworCUxpc3QJICAgKnNsb3RsaXN0ID0gTklMOworCWludAkJ CW50dXBsZXM7CisJU3RyaW5nSW5mb0RhdGEgczsKKwlXYWxSZWN2UmVwbGljYXRpb25TbG90 RGF0YSAqc2xvdF9kYXRhOworCisJaW5pdFN0cmluZ0luZm8oJnMpOworCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJnMsICJMSVNUX1NMT1RTIik7CisKKwlpZiAoc3RyY21wKHNsb3RfbmFt ZXMsICIiKSAhPSAwICYmIHN0cmNtcChzbG90X25hbWVzLCAiKiIpICE9IDApCisJeworCQlj aGFyCSAgICpyYXduYW1lOworCQlMaXN0CSAgICpuYW1lbGlzdDsKKwkJTGlzdENlbGwgICAq bGM7CisKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJnMsICcgJyk7CisJCXJhd25hbWUgPSBw c3RyZHVwKHNsb3RfbmFtZXMpOworCQlTcGxpdElkZW50aWZpZXJTdHJpbmcocmF3bmFtZSwg JywnLCAmbmFtZWxpc3QpOworCQlmb3JlYWNoIChsYywgbmFtZWxpc3QpCisJCXsKKwkJCWlm IChsYyAhPSBsaXN0X2hlYWQobmFtZWxpc3QpKQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFy KCZzLCAnLCcpOworCQkJYXBwZW5kU3RyaW5nSW5mbygmcywgIiVzIiwKKwkJCQkJCQkgcXVv dGVfaWRlbnRpZmllcihsZmlyc3QobGMpKSk7CisJCX0KKwl9CisKKwlyZXMgPSBsaWJwcXJj dl9QUWV4ZWMoY29ubi0+c3RyZWFtQ29ubiwgcy5kYXRhKTsKKwlwZnJlZShzLmRhdGEpOwor CWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwl7CisJCVBR Y2xlYXIocmVzKTsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJjb3VsZCBub3Qg cmVjZWl2ZSBsaXN0IG9mIHNsb3RzIHRoZSBwcmltYXJ5IHNlcnZlcjogJXMiLAorCQkJCQkJ cGNob21wKFBRZXJyb3JNZXNzYWdlKGNvbm4tPnN0cmVhbUNvbm4pKSkpKTsKKwl9CisJaWYg KFBRbmZpZWxkcyhyZXMpIDwgMTApCisJeworCQlpbnQJCQluZmllbGRzID0gUFFuZmllbGRz KHJlcyk7CisKKwkJUFFjbGVhcihyZXMpOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJt c2coImludmFsaWQgcmVzcG9uc2UgZnJvbSBwcmltYXJ5IHNlcnZlciIpLAorCQkJCSBlcnJk ZXRhaWwoIkNvdWxkIG5vdCBnZXQgbGlzdCBvZiBzbG90czogZ290ICVkIGZpZWxkcywgZXhw ZWN0ZWQgJWQgb3IgbW9yZSBmaWVsZHMuIiwKKwkJCQkJCSAgIG5maWVsZHMsIDEwKSkpOwor CX0KKworCW50dXBsZXMgPSBQUW50dXBsZXMocmVzKTsKKwlmb3IgKGludCBpID0gMDsgaSA8 IG50dXBsZXM7IGkrKykKKwl7CisJCWNoYXIJICAgKnNsb3RfdHlwZTsKKworCQlzbG90X2Rh dGEgPSBwYWxsb2MwKHNpemVvZihXYWxSZWN2UmVwbGljYXRpb25TbG90RGF0YSkpOworCQlu YW1lc3RyY3B5KCZzbG90X2RhdGEtPm5hbWUsIFBRZ2V0dmFsdWUocmVzLCBpLCAwKSk7CisJ CWlmICghUFFnZXRpc251bGwocmVzLCBpLCAxKSkKKwkJCW5hbWVzdHJjcHkoJnNsb3RfZGF0 YS0+cGx1Z2luLCBQUWdldHZhbHVlKHJlcywgaSwgMSkpOworCQlzbG90X3R5cGUgPSBQUWdl dHZhbHVlKHJlcywgaSwgMik7CisJCWlmICghUFFnZXRpc251bGwocmVzLCBpLCAzKSkKKwkJ CXNsb3RfZGF0YS0+ZGF0YWJhc2UgPSBhdG9vaWQoUFFnZXR2YWx1ZShyZXMsIGksIDMpKTsK KwkJaWYgKHN0cmNtcChzbG90X3R5cGUsICJwaHlzaWNhbCIpID09IDApCisJCXsKKwkJCWlm IChPaWRJc1ZhbGlkKHNsb3RfZGF0YS0+ZGF0YWJhc2UpKQorCQkJCWVsb2coRVJST1IsICJ1 bmV4cGVjdGVkIHBoeXNpY2FsIHJlcGxpY2F0aW9uIHNsb3Qgd2l0aCBkYXRhYmFzZSBzZXQi KTsKKwkJfQorCQlpZiAocGdfc3RydG9pbnQzMihQUWdldHZhbHVlKHJlcywgaSwgNSkpID09 IDEpCisJCQlzbG90X2RhdGEtPnBlcnNpc3RlbmN5ID0gUlNfVEVNUE9SQVJZOworCQllbHNl CisJCQlzbG90X2RhdGEtPnBlcnNpc3RlbmN5ID0gUlNfUEVSU0lTVEVOVDsKKwkJaWYgKCFQ UWdldGlzbnVsbChyZXMsIGksIDYpKQorCQkJc2xvdF9kYXRhLT54bWluID0gYXRvb2lkKFBR Z2V0dmFsdWUocmVzLCBpLCA2KSk7CisJCWlmICghUFFnZXRpc251bGwocmVzLCBpLCA3KSkK KwkJCXNsb3RfZGF0YS0+Y2F0YWxvZ194bWluID0gYXRvb2lkKFBRZ2V0dmFsdWUocmVzLCBp LCA3KSk7CisJCWlmICghUFFnZXRpc251bGwocmVzLCBpLCA4KSkKKwkJCXNsb3RfZGF0YS0+ cmVzdGFydF9sc24gPSBzdHJ0b3U2NChQUWdldHZhbHVlKHJlcywgaSwgOCksIE5VTEwsIDEw KTsKKwkJaWYgKCFQUWdldGlzbnVsbChyZXMsIGksIDkpKQorCQkJc2xvdF9kYXRhLT5jb25m aXJtZWRfZmx1c2ggPSBzdHJ0b3U2NChQUWdldHZhbHVlKHJlcywgaSwgOSksIE5VTEwsIDEw KTsKKworCQlzbG90bGlzdCA9IGxhcHBlbmQoc2xvdGxpc3QsIHNsb3RfZGF0YSk7CisJfQor CisJUFFjbGVhcihyZXMpOworCisJcmV0dXJuIHNsb3RsaXN0OworfQorCiAvKgogICogU3Rh cnQgc3RyZWFtaW5nIFdBTCBkYXRhIGZyb20gZ2l2ZW4gc3RyZWFtaW5nIG9wdGlvbnMuCiAg KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmls ZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXggYzRl MmZkZWI3MS4uYmMzZjIzYjVhMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL01ha2VmaWxlCkBAIC0yNCw2ICsyNCw3IEBAIE9CSlMgPSBcCiAJcHJvdG8ubyBcCiAJ cmVsYXRpb24ubyBcCiAJcmVvcmRlcmJ1ZmZlci5vIFwKKwlzbG90c3luYy5vIFwKIAlzbmFw YnVpbGQubyBcCiAJdGFibGVzeW5jLm8gXAogCXdvcmtlci5vCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMKaW5kZXggM2ZiNGNhYTgwMy4uMjA3ZWY5 YmM4YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVu Y2hlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIu YwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIK ICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0Lmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X3N1YnNjcmlwdGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3Vic2NyaXB0aW9uX3Jl bC5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKQEAgLTIxMiw3ICsyMTMsNyBAQCBXYWl0Rm9y UmVwbGljYXRpb25Xb3JrZXJBdHRhY2goTG9naWNhbFJlcFdvcmtlciAqd29ya2VyLAogICog c3Vic2NyaXB0aW9uIGlkIGFuZCByZWxpZC4KICAqLwogTG9naWNhbFJlcFdvcmtlciAqCi1s b2dpY2FscmVwX3dvcmtlcl9maW5kKE9pZCBzdWJpZCwgT2lkIHJlbGlkLCBib29sIG9ubHlf cnVubmluZykKK2xvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoT2lkIGRiaWQsIE9pZCBzdWJpZCwg T2lkIHJlbGlkLCBib29sIG9ubHlfcnVubmluZykKIHsKIAlpbnQJCQlpOwogCUxvZ2ljYWxS ZXBXb3JrZXIgKnJlcyA9IE5VTEw7CkBAIC0yMjQsOCArMjI1LDggQEAgbG9naWNhbHJlcF93 b3JrZXJfZmluZChPaWQgc3ViaWQsIE9pZCByZWxpZCwgYm9vbCBvbmx5X3J1bm5pbmcpCiAJ ewogCQlMb2dpY2FsUmVwV29ya2VyICp3ID0gJkxvZ2ljYWxSZXBDdHgtPndvcmtlcnNbaV07 CiAKLQkJaWYgKHctPmluX3VzZSAmJiB3LT5zdWJpZCA9PSBzdWJpZCAmJiB3LT5yZWxpZCA9 PSByZWxpZCAmJgotCQkJKCFvbmx5X3J1bm5pbmcgfHwgdy0+cHJvYykpCisJCWlmICh3LT5p bl91c2UgJiYgdy0+ZGJpZCA9PSBkYmlkICYmIHctPnN1YmlkID09IHN1YmlkICYmCisJCQl3 LT5yZWxpZCA9PSByZWxpZCAmJiAoIW9ubHlfcnVubmluZyB8fCB3LT5wcm9jKSkKIAkJewog CQkJcmVzID0gdzsKIAkJCWJyZWFrOwpAQCAtMjc1LDkgKzI3NiwxMyBAQCBsb2dpY2FscmVw X3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9pZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFt ZSwgT2lkIHVzZXJpZCwKIAlpbnQJCQluc3luY3dvcmtlcnM7CiAJVGltZXN0YW1wVHogbm93 OwogCi0JZXJlcG9ydChERUJVRzEsCi0JCQkoZXJybXNnX2ludGVybmFsKCJzdGFydGluZyBs b2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiIsCi0J CQkJCQkJIHN1Ym5hbWUpKSk7CisJaWYgKE9pZElzVmFsaWQoc3ViaWQpKQorCQllcmVwb3J0 KERFQlVHMSwKKwkJCQkoZXJybXNnX2ludGVybmFsKCJzdGFydGluZyBsb2dpY2FsIHJlcGxp Y2F0aW9uIHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiIsCisJCQkJCQkJCSBzdWJu YW1lKSkpOworCWVsc2UKKwkJZXJlcG9ydChERUJVRzEsCisJCQkJKGVycm1zZ19pbnRlcm5h bCgic3RhcnRpbmcgcmVwbGljYXRpb24gc2xvdCBzeW5jaHJvbml6YXRpb24gd29ya2VyIikp KTsKIAogCS8qIFJlcG9ydCB0aGlzIGFmdGVyIHRoZSBpbml0aWFsIHN0YXJ0aW5nIG1lc3Nh Z2UgZm9yIGNvbnNpc3RlbmN5LiAqLwogCWlmIChtYXhfcmVwbGljYXRpb25fc2xvdHMgPT0g MCkKQEAgLTMxNCw3ICszMTksOSBAQCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRi aWQsIE9pZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwgT2lkIHVzZXJpZCwKIAkgKiBy ZWFzb24gd2UgZG8gdGhpcyBpcyBiZWNhdXNlIGlmIHNvbWUgd29ya2VyIGZhaWxlZCB0byBz dGFydCB1cCBhbmQgaXRzCiAJICogcGFyZW50IGhhcyBjcmFzaGVkIHdoaWxlIHdhaXRpbmcs IHRoZSBpbl91c2Ugc3RhdGUgd2FzIG5ldmVyIGNsZWFyZWQuCiAJICovCi0JaWYgKHdvcmtl ciA9PSBOVUxMIHx8IG5zeW5jd29ya2VycyA+PSBtYXhfc3luY193b3JrZXJzX3Blcl9zdWJz Y3JpcHRpb24pCisJaWYgKHdvcmtlciA9PSBOVUxMIHx8CisJCShPaWRJc1ZhbGlkKHJlbGlk KSAmJgorCQkgbnN5bmN3b3JrZXJzID49IG1heF9zeW5jX3dvcmtlcnNfcGVyX3N1YnNjcmlw dGlvbikpCiAJewogCQlib29sCQlkaWRfY2xlYW51cCA9IGZhbHNlOwogCkBAIC0zNDgsNyAr MzU1LDcgQEAgbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE9pZCBkYmlkLCBPaWQgc3ViaWQs IGNvbnN0IGNoYXIgKnN1Ym5hbWUsIE9pZCB1c2VyaWQsCiAJICogc2lsZW50bHkgYXMgd2Ug bWlnaHQgZ2V0IGhlcmUgYmVjYXVzZSBvZiBhbiBvdGhlcndpc2UgaGFybWxlc3MgcmFjZQog CSAqIGNvbmRpdGlvbi4KIAkgKi8KLQlpZiAobnN5bmN3b3JrZXJzID49IG1heF9zeW5jX3dv cmtlcnNfcGVyX3N1YnNjcmlwdGlvbikKKwlpZiAoT2lkSXNWYWxpZChyZWxpZCkgJiYgbnN5 bmN3b3JrZXJzID49IG1heF9zeW5jX3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbikKIAl7CiAJ CUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwogCQlyZXR1cm47CkBAIC0z OTUsMTUgKzQwMiwyMiBAQCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9p ZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwgT2lkIHVzZXJpZCwKIAltZW1zZXQoJmJn dywgMCwgc2l6ZW9mKGJndykpOwogCWJndy5iZ3dfZmxhZ3MgPSBCR1dPUktFUl9TSE1FTV9B Q0NFU1MgfAogCQlCR1dPUktFUl9CQUNLRU5EX0RBVEFCQVNFX0NPTk5FQ1RJT047Ci0JYmd3 LmJnd19zdGFydF90aW1lID0gQmdXb3JrZXJTdGFydF9SZWNvdmVyeUZpbmlzaGVkOworCWJn dy5iZ3dfc3RhcnRfdGltZSA9IEJnV29ya2VyU3RhcnRfQ29uc2lzdGVudFN0YXRlOwogCXNu cHJpbnRmKGJndy5iZ3dfbGlicmFyeV9uYW1lLCBCR1dfTUFYTEVOLCAicG9zdGdyZXMiKTsK LQlzbnByaW50ZihiZ3cuYmd3X2Z1bmN0aW9uX25hbWUsIEJHV19NQVhMRU4sICJBcHBseVdv cmtlck1haW4iKTsKKwlpZiAoT2lkSXNWYWxpZChzdWJpZCkpCisJCXNucHJpbnRmKGJndy5i Z3dfZnVuY3Rpb25fbmFtZSwgQkdXX01BWExFTiwgIkFwcGx5V29ya2VyTWFpbiIpOworCWVs c2UKKwkJc25wcmludGYoYmd3LmJnd19mdW5jdGlvbl9uYW1lLCBCR1dfTUFYTEVOLCAiUmVw bFNsb3RTeW5jTWFpbiIpOwogCWlmIChPaWRJc1ZhbGlkKHJlbGlkKSkKIAkJc25wcmludGYo Ymd3LmJnd19uYW1lLCBCR1dfTUFYTEVOLAogCQkJCSAibG9naWNhbCByZXBsaWNhdGlvbiB3 b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiAldSBzeW5jICV1Iiwgc3ViaWQsIHJlbGlkKTsKLQll bHNlCisJZWxzZSBpZiAoT2lkSXNWYWxpZChzdWJpZCkpCiAJCXNucHJpbnRmKGJndy5iZ3df bmFtZSwgQkdXX01BWExFTiwKIAkJCQkgImxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGZv ciBzdWJzY3JpcHRpb24gJXUiLCBzdWJpZCk7CisJZWxzZQorCQlzbnByaW50ZihiZ3cuYmd3 X25hbWUsIEJHV19NQVhMRU4sCisJCQkJICJyZXBsaWNhdGlvbiBzbG90IHN5bmNocm9uaXph dGlvbiB3b3JrZXIiKTsKKwogCXNucHJpbnRmKGJndy5iZ3dfdHlwZSwgQkdXX01BWExFTiwg ImxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIik7CiAKIAliZ3cuYmd3X3Jlc3RhcnRfdGlt ZSA9IEJHV19ORVZFUl9SRVNUQVJUOwpAQCAtNDM0LDE0ICs0NDgsMTQgQEAgbG9naWNhbHJl cF93b3JrZXJfbGF1bmNoKE9pZCBkYmlkLCBPaWQgc3ViaWQsIGNvbnN0IGNoYXIgKnN1Ym5h bWUsIE9pZCB1c2VyaWQsCiAgKiBpdCBkZXRhY2hlcyBmcm9tIHRoZSBzbG90LgogICovCiB2 b2lkCi1sb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJlbGlkKQorbG9n aWNhbHJlcF93b3JrZXJfc3RvcChPaWQgZGJpZCwgT2lkIHN1YmlkLCBPaWQgcmVsaWQpCiB7 CiAJTG9naWNhbFJlcFdvcmtlciAqd29ya2VyOwogCXVpbnQxNgkJZ2VuZXJhdGlvbjsKIAog CUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CiAKLQl3 b3JrZXIgPSBsb2dpY2FscmVwX3dvcmtlcl9maW5kKHN1YmlkLCByZWxpZCwgZmFsc2UpOwor CXdvcmtlciA9IGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoZGJpZCwgc3ViaWQsIHJlbGlkLCBm YWxzZSk7CiAKIAkvKiBObyB3b3JrZXIsIG5vdGhpbmcgdG8gZG8uICovCiAJaWYgKCF3b3Jr ZXIpCkBAIC01MzEsMTMgKzU0NSwxMyBAQCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBz dWJpZCwgT2lkIHJlbGlkKQogICogV2FrZSB1cCAodXNpbmcgbGF0Y2gpIGFueSBsb2dpY2Fs IHJlcGxpY2F0aW9uIHdvcmtlciBmb3Igc3BlY2lmaWVkIHN1Yi9yZWwuCiAgKi8KIHZvaWQK LWxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cChPaWQgc3ViaWQsIE9pZCByZWxpZCkKK2xvZ2lj YWxyZXBfd29ya2VyX3dha2V1cChPaWQgZGJpZCwgT2lkIHN1YmlkLCBPaWQgcmVsaWQpCiB7 CiAJTG9naWNhbFJlcFdvcmtlciAqd29ya2VyOwogCiAJTFdMb2NrQWNxdWlyZShMb2dpY2Fs UmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKTsKIAotCXdvcmtlciA9IGxvZ2ljYWxyZXBfd29y a2VyX2ZpbmQoc3ViaWQsIHJlbGlkLCB0cnVlKTsKKwl3b3JrZXIgPSBsb2dpY2FscmVwX3dv cmtlcl9maW5kKGRiaWQsIHN1YmlkLCByZWxpZCwgdHJ1ZSk7CiAKIAlpZiAod29ya2VyKQog CQlsb2dpY2FscmVwX3dvcmtlcl93YWtldXBfcHRyKHdvcmtlcik7CkBAIC03MTQsNyArNzI4 LDcgQEAgQXBwbHlMYXVuY2hlclJlZ2lzdGVyKHZvaWQpCiAJbWVtc2V0KCZiZ3csIDAsIHNp emVvZihiZ3cpKTsKIAliZ3cuYmd3X2ZsYWdzID0gQkdXT1JLRVJfU0hNRU1fQUNDRVNTIHwK IAkJQkdXT1JLRVJfQkFDS0VORF9EQVRBQkFTRV9DT05ORUNUSU9OOwotCWJndy5iZ3dfc3Rh cnRfdGltZSA9IEJnV29ya2VyU3RhcnRfUmVjb3ZlcnlGaW5pc2hlZDsKKwliZ3cuYmd3X3N0 YXJ0X3RpbWUgPSBCZ1dvcmtlclN0YXJ0X0NvbnNpc3RlbnRTdGF0ZTsKIAlzbnByaW50Zihi Z3cuYmd3X2xpYnJhcnlfbmFtZSwgQkdXX01BWExFTiwgInBvc3RncmVzIik7CiAJc25wcmlu dGYoYmd3LmJnd19mdW5jdGlvbl9uYW1lLCBCR1dfTUFYTEVOLCAiQXBwbHlMYXVuY2hlck1h aW4iKTsKIAlzbnByaW50ZihiZ3cuYmd3X25hbWUsIEJHV19NQVhMRU4sCkBAIC03OTUsNiAr ODA5LDExNiBAQCBBcHBseUxhdW5jaGVyV2FrZXVwKHZvaWQpCiAJCWtpbGwoTG9naWNhbFJl cEN0eC0+bGF1bmNoZXJfcGlkLCBTSUdVU1IxKTsKIH0KIAorc3RhdGljIHZvaWQKK0FwcGx5 TGF1bmNoZXJTdGFydFNsb3RTeW5jKFRpbWVzdGFtcFR6ICpsYXN0X3N0YXJ0X3RpbWUsIGxv bmcgKndhaXRfdGltZSkKK3sKKwlXYWxSZWNlaXZlckNvbm4gKndyY29ubjsKKwlUaW1lc3Rh bXBUeiBub3c7CisJY2hhcgkgICAqZXJyOworCUxpc3QJICAgKnNsb3RzOworCUxpc3RDZWxs ICAgKmxjOworCU1lbW9yeUNvbnRleHQgdG1wY3R4OworCU1lbW9yeUNvbnRleHQgb2xkY3R4 OworCisJaWYgKHN0cmNtcChzeW5jaHJvbml6ZV9zbG90X25hbWVzLCAiIikgPT0gMCkKKwkJ cmV0dXJuOworCisJd3Jjb25uID0gd2FscmN2X2Nvbm5lY3QoUHJpbWFyeUNvbm5JbmZvLCBm YWxzZSwKKwkJCQkJCQkiTG9naWNhbCBSZXBsaWNhdGlvbiBMYXVuY2hlciIsICZlcnIpOwor CWlmICghd3Jjb25uKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coImNvdWxkIG5v dCBjb25uZWN0IHRvIHRoZSBwcmltYXJ5IHNlcnZlcjogJXMiLCBlcnIpKSk7CisKKwkvKiBV c2UgdGVtcG9yYXJ5IGNvbnRleHQgZm9yIHRoZSBzbG90IGxpc3QgYW5kIHdvcmtlciBpbmZv LiAqLworCXRtcGN0eCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0 LAorCQkJCQkJCQkgICAiTG9naWNhbCBSZXBsaWNhdGlvbiBMYXVuY2hlciBzbG90IHN5bmMg Y3R4IiwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJb2xkY3R4ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGN0eCk7CisKKwlzbG90cyA9IHdhbHJjdl9saXN0 X3Nsb3RzKHdyY29ubiwgc3luY2hyb25pemVfc2xvdF9uYW1lcyk7CisKKwlub3cgPSBHZXRD dXJyZW50VGltZXN0YW1wKCk7CisKKwlmb3JlYWNoKGxjLCBzbG90cykKKwl7CisJCVdhbFJl Y3ZSZXBsaWNhdGlvblNsb3REYXRhICpzbG90X2RhdGEgPSBsZmlyc3QobGMpOworCQlMb2dp Y2FsUmVwV29ya2VyICp3OworCisJCWlmICghT2lkSXNWYWxpZChzbG90X2RhdGEtPmRhdGFi YXNlKSkKKwkJCWNvbnRpbnVlOworCisJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtl ckxvY2ssIExXX1NIQVJFRCk7CisJCXcgPSBsb2dpY2FscmVwX3dvcmtlcl9maW5kKHNsb3Rf ZGF0YS0+ZGF0YWJhc2UsIEludmFsaWRPaWQsCisJCQkJCQkJCSAgIEludmFsaWRPaWQsIGZh bHNlKTsKKwkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CisKKwkJaWYg KHcgPT0gTlVMTCkKKwkJeworCQkJKmxhc3Rfc3RhcnRfdGltZSA9IG5vdzsKKwkJCSp3YWl0 X3RpbWUgPSB3YWxfcmV0cmlldmVfcmV0cnlfaW50ZXJ2YWw7CisKKwkJCWxvZ2ljYWxyZXBf d29ya2VyX2xhdW5jaChzbG90X2RhdGEtPmRhdGFiYXNlLCBJbnZhbGlkT2lkLCBOVUxMLAor CQkJCQkJCQkJIEJPT1RTVFJBUF9TVVBFUlVTRVJJRCwgSW52YWxpZE9pZCk7CisJCX0KKwl9 CisKKwkvKiBTd2l0Y2ggYmFjayB0byBvcmlnaW5hbCBtZW1vcnkgY29udGV4dC4gKi8KKwlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKKwkvKiBDbGVhbiB0aGUgdGVtcG9yYXJ5 IG1lbW9yeS4gKi8KKwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGN0eCk7CisKKwl3YWxyY3Zf ZGlzY29ubmVjdCh3cmNvbm4pOworfQorCitzdGF0aWMgdm9pZAorQXBwbHlMYXVuY2hlclN0 YXJ0U3VicyhUaW1lc3RhbXBUeiAqbGFzdF9zdGFydF90aW1lLCBsb25nICp3YWl0X3RpbWUp Cit7CisJVGltZXN0YW1wVHogbm93OworCUxpc3QJICAgKnN1Ymxpc3Q7CisJTGlzdENlbGwg ICAqbGM7CisJTWVtb3J5Q29udGV4dCBzdWJjdHg7CisJTWVtb3J5Q29udGV4dCBvbGRjdHg7 CisKKwlub3cgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisKKwkvKiBVc2UgdGVtcG9yYXJ5 IGNvbnRleHQgZm9yIHRoZSBkYXRhYmFzZSBsaXN0IGFuZCB3b3JrZXIgaW5mby4gKi8KKwlz dWJjdHggPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wTWVtb3J5Q29udGV4dCwKKwkJCQkJ CQkJICAgIkxvZ2ljYWwgUmVwbGljYXRpb24gTGF1bmNoZXIgc3VibGlzdCIsCisJCQkJCQkJ CSAgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhzdWJjdHgpOworCisJLyogc2VhcmNoIGZvciBzdWJzY3JpcHRpb25zIHRvIHN0 YXJ0IG9yIHN0b3AuICovCisJc3VibGlzdCA9IGdldF9zdWJzY3JpcHRpb25fbGlzdCgpOwor CisJLyogU3RhcnQgdGhlIG1pc3Npbmcgd29ya2VycyBmb3IgZW5hYmxlZCBzdWJzY3JpcHRp b25zLiAqLworCWZvcmVhY2gobGMsIHN1Ymxpc3QpCisJeworCQlTdWJzY3JpcHRpb24gKnN1 YiA9IChTdWJzY3JpcHRpb24gKikgbGZpcnN0KGxjKTsKKwkJTG9naWNhbFJlcFdvcmtlciAq dzsKKworCQlpZiAoIXN1Yi0+ZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCisJCUxXTG9ja0Fj cXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CisJCXcgPSBsb2dpY2Fs cmVwX3dvcmtlcl9maW5kKHN1Yi0+ZGJpZCwgc3ViLT5vaWQsIEludmFsaWRPaWQsIGZhbHNl KTsKKwkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CisKKwkJaWYgKHcg PT0gTlVMTCkKKwkJeworCQkJKmxhc3Rfc3RhcnRfdGltZSA9IG5vdzsKKwkJCSp3YWl0X3Rp bWUgPSB3YWxfcmV0cmlldmVfcmV0cnlfaW50ZXJ2YWw7CisKKwkJCWxvZ2ljYWxyZXBfd29y a2VyX2xhdW5jaChzdWItPmRiaWQsIHN1Yi0+b2lkLCBzdWItPm5hbWUsCisJCQkJCQkJCQkg c3ViLT5vd25lciwgSW52YWxpZE9pZCk7CisJCX0KKwl9CisKKwkvKiBTd2l0Y2ggYmFjayB0 byBvcmlnaW5hbCBtZW1vcnkgY29udGV4dC4gKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY3R4KTsKKwkvKiBDbGVhbiB0aGUgdGVtcG9yYXJ5IG1lbW9yeS4gKi8KKwlNZW1vcnlD b250ZXh0RGVsZXRlKHN1YmN0eCk7Cit9CisKIC8qCiAgKiBNYWluIGxvb3AgZm9yIHRoZSBh cHBseSBsYXVuY2hlciBwcm9jZXNzLgogICovCkBAIC04MjIsMTQgKzk0NiwxMiBAQCBBcHBs eUxhdW5jaGVyTWFpbihEYXR1bSBtYWluX2FyZykKIAkgKi8KIAlCYWNrZ3JvdW5kV29ya2Vy SW5pdGlhbGl6ZUNvbm5lY3Rpb24oTlVMTCwgTlVMTCwgMCk7CiAKKwlsb2FkX2ZpbGUoImxp YnBxd2FscmVjZWl2ZXIiLCBmYWxzZSk7CisKIAkvKiBFbnRlciBtYWluIGxvb3AgKi8KIAlm b3IgKDs7KQogCXsKIAkJaW50CQkJcmM7Ci0JCUxpc3QJICAgKnN1Ymxpc3Q7Ci0JCUxpc3RD ZWxsICAgKmxjOwotCQlNZW1vcnlDb250ZXh0IHN1YmN0eDsKLQkJTWVtb3J5Q29udGV4dCBv bGRjdHg7CiAJCVRpbWVzdGFtcFR6IG5vdzsKIAkJbG9uZwkJd2FpdF90aW1lID0gREVGQVVM VF9OQVBUSU1FX1BFUl9DWUNMRTsKIApAQCAtODQxLDQyICs5NjMsMTAgQEAgQXBwbHlMYXVu Y2hlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJCWlmIChUaW1lc3RhbXBEaWZmZXJlbmNlRXhj ZWVkcyhsYXN0X3N0YXJ0X3RpbWUsIG5vdywKIAkJCQkJCQkJCSAgIHdhbF9yZXRyaWV2ZV9y ZXRyeV9pbnRlcnZhbCkpCiAJCXsKLQkJCS8qIFVzZSB0ZW1wb3JhcnkgY29udGV4dCBmb3Ig dGhlIGRhdGFiYXNlIGxpc3QgYW5kIHdvcmtlciBpbmZvLiAqLwotCQkJc3ViY3R4ID0gQWxs b2NTZXRDb250ZXh0Q3JlYXRlKFRvcE1lbW9yeUNvbnRleHQsCi0JCQkJCQkJCQkJICAgIkxv Z2ljYWwgUmVwbGljYXRpb24gTGF1bmNoZXIgc3VibGlzdCIsCi0JCQkJCQkJCQkJICAgQUxM T0NTRVRfREVGQVVMVF9TSVpFUyk7Ci0JCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8oc3ViY3R4KTsKLQotCQkJLyogc2VhcmNoIGZvciBzdWJzY3JpcHRpb25zIHRvIHN0YXJ0 IG9yIHN0b3AuICovCi0JCQlzdWJsaXN0ID0gZ2V0X3N1YnNjcmlwdGlvbl9saXN0KCk7Ci0K LQkJCS8qIFN0YXJ0IHRoZSBtaXNzaW5nIHdvcmtlcnMgZm9yIGVuYWJsZWQgc3Vic2NyaXB0 aW9ucy4gKi8KLQkJCWZvcmVhY2gobGMsIHN1Ymxpc3QpCi0JCQl7Ci0JCQkJU3Vic2NyaXB0 aW9uICpzdWIgPSAoU3Vic2NyaXB0aW9uICopIGxmaXJzdChsYyk7Ci0JCQkJTG9naWNhbFJl cFdvcmtlciAqdzsKLQotCQkJCWlmICghc3ViLT5lbmFibGVkKQotCQkJCQljb250aW51ZTsK LQotCQkJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7 Ci0JCQkJdyA9IGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoc3ViLT5vaWQsIEludmFsaWRPaWQs IGZhbHNlKTsKLQkJCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKLQot CQkJCWlmICh3ID09IE5VTEwpCi0JCQkJewotCQkJCQlsYXN0X3N0YXJ0X3RpbWUgPSBub3c7 Ci0JCQkJCXdhaXRfdGltZSA9IHdhbF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbDsKLQotCQkJ CQlsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goc3ViLT5kYmlkLCBzdWItPm9pZCwgc3ViLT5u YW1lLAotCQkJCQkJCQkJCQkgc3ViLT5vd25lciwgSW52YWxpZE9pZCk7Ci0JCQkJfQotCQkJ fQotCi0JCQkvKiBTd2l0Y2ggYmFjayB0byBvcmlnaW5hbCBtZW1vcnkgY29udGV4dC4gKi8K LQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOwotCQkJLyogQ2xlYW4gdGhlIHRl bXBvcmFyeSBtZW1vcnkuICovCi0JCQlNZW1vcnlDb250ZXh0RGVsZXRlKHN1YmN0eCk7CisJ CQlpZiAoIVJlY292ZXJ5SW5Qcm9ncmVzcygpKQorCQkJCUFwcGx5TGF1bmNoZXJTdGFydFN1 YnMoJmxhc3Rfc3RhcnRfdGltZSwgJndhaXRfdGltZSk7CisJCQllbHNlCisJCQkJQXBwbHlM YXVuY2hlclN0YXJ0U2xvdFN5bmMoJmxhc3Rfc3RhcnRfdGltZSwgJndhaXRfdGltZSk7CiAJ CX0KIAkJZWxzZQogCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4IDdhYTU2NDdhMmMuLmYwYjNiOWFkODcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5j CkBAIC05NSwxMSArOTUsMTMgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRl ICJwZ3N0YXQuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCisjaW5jbHVk ZSAicmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L3Jlb3JkZXJidWZmZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCiAjaW5j bHVkZSAicmVwbGljYXRpb24vc25hcGJ1aWxkLmgiCS8qIGp1c3QgZm9yIFNuYXBCdWlsZFNu YXBEZWNSZWZjb3VudCAqLwogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9mZC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9zaW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1 ZGUgInV0aWxzL2NvbWJvY2lkLmgiCkBAIC0xMDcsNiArMTA5LDcgQEAKICNpbmNsdWRlICJ1 dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0 aWxzL3JlbGZpbGVub2RlbWFwLmgiCisjaW5jbHVkZSAidXRpbHMvdmFybGVuYS5oIgogCiAK IC8qIGVudHJ5IGZvciBhIGhhc2ggdGFibGUgd2UgdXNlIHRvIG1hcCBmcm9tIHhpZCB0byBv dXIgdHJhbnNhY3Rpb24gc3RhdGUgKi8KQEAgLTIwMDYsNiArMjAwOSw4NSBAQCBSZW9yZGVy QnVmZmVyUmVzZXRUWE4oUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKIAl9CiB9CiAKK3N0YXRpYyB2b2lkCit3YWl0X2Zvcl9zdGFuZGJ5X2NvbmZpcm1hdGlv bihYTG9nUmVjUHRyIGNvbW1pdF9sc24pCit7CisJY2hhcgkgICAqcmF3bmFtZTsKKwlMaXN0 CSAgICpuYW1lbGlzdDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlYTG9nUmVjUHRyCWZsdXNoX3Bv cyA9IEludmFsaWRYTG9nUmVjUHRyOworCisJaWYgKHN0cmNtcChzdGFuZGJ5X3Nsb3RfbmFt ZXMsICIiKSA9PSAwKQorCQlyZXR1cm47CisKKwlyYXduYW1lID0gcHN0cmR1cChzdGFuZGJ5 X3Nsb3RfbmFtZXMpOworCVNwbGl0SWRlbnRpZmllclN0cmluZyhyYXduYW1lLCAnLCcsICZu YW1lbGlzdCk7CisKKwl3aGlsZSAodHJ1ZSkKKwl7CisJCWludAkJCXdhaXRfc2xvdHNfcmVt YWluaW5nOworCQlYTG9nUmVjUHRyCW9sZGVzdF9mbHVzaF9wb3MgPSBJbnZhbGlkWExvZ1Jl Y1B0cjsKKwkJaW50CQkJcmM7CisKKwkJd2FpdF9zbG90c19yZW1haW5pbmcgPSBsaXN0X2xl bmd0aChuYW1lbGlzdCk7CisKKwkJTFdMb2NrQWNxdWlyZShSZXBsaWNhdGlvblNsb3RDb250 cm9sTG9jaywgTFdfU0hBUkVEKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhfcmVwbGlj YXRpb25fc2xvdHM7IGkrKykKKwkJeworCQkJUmVwbGljYXRpb25TbG90ICpzID0gJlJlcGxp Y2F0aW9uU2xvdEN0bC0+cmVwbGljYXRpb25fc2xvdHNbaV07CisJCQlib29sCQlpbmxpc3Q7 CisKKwkJCWlmICghcy0+aW5fdXNlKQorCQkJCWNvbnRpbnVlOworCisJCQlpbmxpc3QgPSBm YWxzZTsKKwkJCWZvcmVhY2ggKGxjLCBuYW1lbGlzdCkKKwkJCXsKKwkJCQljaGFyICpuYW1l ID0gbGZpcnN0KGxjKTsKKwkJCQlpZiAoc3RyY21wKG5hbWUsIE5hbWVTdHIocy0+ZGF0YS5u YW1lKSkgPT0gMCkKKwkJCQl7CisJCQkJCWlubGlzdCA9IHRydWU7CisJCQkJCWJyZWFrOwor CQkJCX0KKwkJCX0KKwkJCWlmICghaW5saXN0KQorCQkJCWNvbnRpbnVlOworCisJCQlTcGlu TG9ja0FjcXVpcmUoJnMtPm11dGV4KTsKKworCQkJaWYgKHMtPmRhdGEuZGF0YWJhc2UgPT0g SW52YWxpZE9pZCkKKwkJCQkvKiBQaHlzaWNhbCBzbG90cyBhZHZhbmNlIHJlc3RhcnRfbHNu IG9uIGZsdXNoIGFuZCBpZ25vcmUgY29uZmlybWVkX2ZsdXNoX2xzbiAqLworCQkJCWZsdXNo X3BvcyA9IHMtPmRhdGEucmVzdGFydF9sc247CisJCQllbHNlCisJCQkJLyogRm9yIGxvZ2lj YWwgc2xvdHMgd2UgbXVzdCB3YWl0IGZvciBjb21taXQgYW5kIGZsdXNoICovCisJCQkJZmx1 c2hfcG9zID0gcy0+ZGF0YS5jb25maXJtZWRfZmx1c2g7CisKKwkJCVNwaW5Mb2NrUmVsZWFz ZSgmcy0+bXV0ZXgpOworCisJCQkvKiBXZSB3YW50IHRvIGZpbmQgb3V0IHRoZSBtaW4oZmx1 c2ggcG9zKSBvdmVyIGFsbCBuYW1lZCBzbG90cyAqLworCQkJaWYgKG9sZGVzdF9mbHVzaF9w b3MgPT0gSW52YWxpZFhMb2dSZWNQdHIKKwkJCQl8fCBvbGRlc3RfZmx1c2hfcG9zID4gZmx1 c2hfcG9zKQorCQkJCW9sZGVzdF9mbHVzaF9wb3MgPSBmbHVzaF9wb3M7CisKKwkJCWlmIChm bHVzaF9wb3MgPj0gY29tbWl0X2xzbiAmJiB3YWl0X3Nsb3RzX3JlbWFpbmluZyA+IDApCisJ CQkJd2FpdF9zbG90c19yZW1haW5pbmcgLS07CisJCX0KKwkJTFdMb2NrUmVsZWFzZShSZXBs aWNhdGlvblNsb3RDb250cm9sTG9jayk7CisKKwkJaWYgKHdhaXRfc2xvdHNfcmVtYWluaW5n ID09IDApCisJCQlyZXR1cm47CisKKwkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJ ICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX1BPU1RNQVNURVJfREVBVEgsCisJ CQkJCSAgIDEwMDBMLCBQR19XQUlUX0VYVEVOU0lPTik7CisKKwkJaWYgKHJjICYgV0xfUE9T VE1BU1RFUl9ERUFUSCkKKwkJCXByb2NfZXhpdCgxKTsKKworCQlDSEVDS19GT1JfSU5URVJS VVBUUygpOworCX0KK30KKwogLyoKICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgUmVvcmRlckJ1 ZmZlclJlcGxheSBhbmQgUmVvcmRlckJ1ZmZlclN0cmVhbVRYTi4KICAqCkBAIC0yNDM0LDYg KzI1MTYsOSBAQCBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTihSZW9yZGVyQnVmZmVyICpyYiwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJICogQ2FsbCBlaXRoZXIgUFJFUEFSRSAoZm9y IHR3by1waGFzZSB0cmFuc2FjdGlvbnMpIG9yIENPTU1JVCAoZm9yCiAJCQkgKiByZWd1bGFy IG9uZXMpLgogCQkJICovCisKKwkJCXdhaXRfZm9yX3N0YW5kYnlfY29uZmlybWF0aW9uKGNv bW1pdF9sc24pOworCiAJCQlpZiAocmJ0eG5fcHJlcGFyZWQodHhuKSkKIAkJCQlyYi0+cHJl cGFyZShyYiwgdHhuLCBjb21taXRfbHNuKTsKIAkJCWVsc2UKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2xvdHN5bmMuYyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvc2xvdHN5bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi42NTRhYzE1NGVhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jCkBAIC0wLDAgKzEsNDEyIEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHNsb3RzeW5jLmMKKyAqCSAgIFBvc3RncmVTUUwg d29ya2VyIGZvciBzeW5jaHJvbml6aW5nIHNsb3RzIHRvIGEgc3RhbmRieSBmcm9tIHByaW1h cnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMKKyAqCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJjb21t YW5kcy9kYmNvbW1hbmRzLmgiCisjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9z dG1hc3Rlci9iZ3dvcmtlci5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWx3b3Jr ZXIuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgorI2luY2x1ZGUg InJlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBj LmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJ1dGlscy9i dWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL3BnX2xzbi5oIgorI2luY2x1ZGUgInV0aWxz L3ZhcmxlbmEuaCIKKworY2hhcgkgICAqc3luY2hyb25pemVfc2xvdF9uYW1lczsKK2NoYXIJ ICAgKnN0YW5kYnlfc2xvdF9uYW1lczsKKworLyoKKyAqIFdhaXQgZm9yIHJlbW90ZSBzbG90 IHRvIHBhc3MgbG9jYWx5IHJlc2VydmVkIHBvc2l0aW9uLgorICovCitzdGF0aWMgdm9pZAor d2FpdF9mb3JfcHJpbWFyeV9zbG90X2NhdGNodXAoV2FsUmVjZWl2ZXJDb25uICp3cmNvbm4s IGNoYXIgKnNsb3RfbmFtZSwKKwkJCQkJCQkgIFhMb2dSZWNQdHIgbWluX2xzbikKK3sKKwlX YWxSY3ZFeGVjUmVzdWx0ICpyZXM7CisJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CisJT2lkCQkJ c2xvdFJvd1sxXSA9IHtMU05PSUR9OworCVN0cmluZ0luZm9EYXRhIGNtZDsKKwlib29sCQlp c251bGw7CisJWExvZ1JlY1B0cglyZXN0YXJ0X2xzbjsKKworCWZvciAoOzspCisJeworCQlp bnQJCQlyYzsKKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCWluaXRTdHJpbmdJ bmZvKCZjbWQpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsCisJCQkJCQkgIlNFTEVDVCBy ZXN0YXJ0X2xzbiIKKwkJCQkJCSAiICBGUk9NIHBnX2NhdGFsb2cucGdfcmVwbGljYXRpb25f c2xvdHMiCisJCQkJCQkgIiBXSEVSRSBzbG90X25hbWUgPSAlcyIsCisJCQkJCQkgcXVvdGVf bGl0ZXJhbF9jc3RyKHNsb3RfbmFtZSkpOworCQlyZXMgPSB3YWxyY3ZfZXhlYyh3cmNvbm4s IGNtZC5kYXRhLCAxLCBzbG90Um93KTsKKworCQlpZiAocmVzLT5zdGF0dXMgIT0gV0FMUkNW X09LX1RVUExFUykKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJtc2coImNvdWxkIG5v dCBmZXRjaCBzbG90IGluZm8gZm9yIHNsb3QgXCIlc1wiIGZyb20gcHJpbWFyeTogJXMiLAor CQkJCQkJCXNsb3RfbmFtZSwgcmVzLT5lcnIpKSk7CisKKwkJc2xvdCA9IE1ha2VTaW5nbGVU dXBsZVRhYmxlU2xvdChyZXMtPnR1cGxlZGVzYywgJlRUU09wc01pbmltYWxUdXBsZSk7CisJ CWlmICghdHVwbGVzdG9yZV9nZXR0dXBsZXNsb3QocmVzLT50dXBsZXN0b3JlLCB0cnVlLCBm YWxzZSwgc2xvdCkpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJybXNnKCJzbG90IFwi JXNcIiBkaXNhcGVhcmVkIGZyb20gcHJvdmlkZXIiLAorCQkJCQkJCXNsb3RfbmFtZSkpKTsK KworCQlyZXN0YXJ0X2xzbiA9IERhdHVtR2V0TFNOKHNsb3RfZ2V0YXR0cihzbG90LCAxLCAm aXNudWxsKSk7CisJCUFzc2VydCghaXNudWxsKTsKKworCQlFeGVjQ2xlYXJUdXBsZShzbG90 KTsKKwkJd2FscmN2X2NsZWFyX3Jlc3VsdChyZXMpOworCisJCWlmIChyZXN0YXJ0X2xzbiA+ PSBtaW5fbHNuKQorCQkJYnJlYWs7CisKKwkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJ CQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX1BPU1RNQVNURVJfREVBVEgs CisJCQkJCSAgIHdhbF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbCwKKwkJCQkJICAgV0FJVF9F VkVOVF9SRVBMX1NMT1RfU1lOQ19NQUlOKTsKKworCQlSZXNldExhdGNoKE15TGF0Y2gpOwor CisJCS8qIGVtZXJnZW5jeSBiYWlsb3V0IGlmIHBvc3RtYXN0ZXIgaGFzIGRpZWQgKi8KKwkJ aWYgKHJjICYgV0xfUE9TVE1BU1RFUl9ERUFUSCkKKwkJCXByb2NfZXhpdCgxKTsKKwl9Cit9 CisKKy8qCisgKiBTeW5jaHJvbml6ZSBzaW5nbGUgc2xvdCB0byBnaXZlbiBwb3NpdGlvbi4K KyAqCisgKiBUaGlzIG9wdGlvbmFsbHkgY3JlYXRlcyBuZXcgc2xvdCBpZiB0aGVyZSBpcyBu byBleGlzdGluZyBvbmUuCisgKi8KK3N0YXRpYyB2b2lkCitzeW5jaHJvbml6ZV9vbmVfc2xv dChXYWxSZWNlaXZlckNvbm4gKndyY29ubiwgY2hhciAqc2xvdF9uYW1lLCBjaGFyICpkYXRh YmFzZSwKKwkJCQkJIGNoYXIgKnBsdWdpbl9uYW1lLCBYTG9nUmVjUHRyIHRhcmdldF9sc24p Cit7CisJYm9vbAkJZm91bmQgPSBmYWxzZTsKKwlYTG9nUmVjUHRyCWVuZGxzbjsKKworCS8q IFNlYXJjaCBmb3IgdGhlIG5hbWVkIHNsb3QgYW5kIG1hcmsgaXQgYWN0aXZlIGlmIHdlIGZp bmQgaXQuICovCisJTFdMb2NrQWNxdWlyZShSZXBsaWNhdGlvblNsb3RDb250cm9sTG9jaywg TFdfU0hBUkVEKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG1heF9yZXBsaWNhdGlvbl9zbG90 czsgaSsrKQorCXsKKwkJUmVwbGljYXRpb25TbG90ICpzID0gJlJlcGxpY2F0aW9uU2xvdEN0 bC0+cmVwbGljYXRpb25fc2xvdHNbaV07CisKKwkJaWYgKCFzLT5pbl91c2UpCisJCQljb250 aW51ZTsKKworCQlpZiAoc3RyY21wKE5hbWVTdHIocy0+ZGF0YS5uYW1lKSwgc2xvdF9uYW1l KSA9PSAwKQorCQl7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKwlM V0xvY2tSZWxlYXNlKFJlcGxpY2F0aW9uU2xvdENvbnRyb2xMb2NrKTsKKworCVN0YXJ0VHJh bnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKiBBbHJlYWR5IGV4aXN0aW5nIHNsb3QsIGFjcXVp cmUgKi8KKwlpZiAoZm91bmQpCisJeworCQlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKHNsb3Rf bmFtZSwgdHJ1ZSk7CisKKwkJaWYgKHRhcmdldF9sc24gPCBNeVJlcGxpY2F0aW9uU2xvdC0+ ZGF0YS5jb25maXJtZWRfZmx1c2gpCisJCXsKKwkJCWVsb2coREVCVUcxLAorCQkJCSAibm90 IHN5bmNocm9uaXppbmcgc2xvdCAlczsgc3luY2hyb25pemF0aW9uIHdvdWxkIG1vdmUgaXQg YmFja3dhcmQiLAorCQkJCSBzbG90X25hbWUpOworCisJCQlSZXBsaWNhdGlvblNsb3RSZWxl YXNlKCk7CisJCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJCXJldHVybjsKKwkJ fQorCX0KKwkvKiBPdGhlcndpc2UgY3JlYXRlIHRoZSBzbG90IGZpcnN0LiAqLworCWVsc2UK Kwl7CisJCVRyYW5zYWN0aW9uSWQgeG1pbl9ob3Jpem9uID0gSW52YWxpZFRyYW5zYWN0aW9u SWQ7CisJCVJlcGxpY2F0aW9uU2xvdCAqc2xvdDsKKworCQlSZXBsaWNhdGlvblNsb3RDcmVh dGUoc2xvdF9uYW1lLCB0cnVlLCBSU19FUEhFTUVSQUwsIGZhbHNlKTsKKwkJc2xvdCA9IE15 UmVwbGljYXRpb25TbG90OworCisJCVNwaW5Mb2NrQWNxdWlyZSgmc2xvdC0+bXV0ZXgpOwor CQlzbG90LT5kYXRhLmRhdGFiYXNlID0gZ2V0X2RhdGFiYXNlX29pZChkYXRhYmFzZSwgZmFs c2UpOworCQluYW1lc3RyY3B5KCZzbG90LT5kYXRhLnBsdWdpbiwgcGx1Z2luX25hbWUpOwor CQlTcGluTG9ja1JlbGVhc2UoJnNsb3QtPm11dGV4KTsKKworCQlSZXBsaWNhdGlvblNsb3RS ZXNlcnZlV2FsKCk7CisKKwkJTFdMb2NrQWNxdWlyZShQcm9jQXJyYXlMb2NrLCBMV19FWENM VVNJVkUpOworCQl4bWluX2hvcml6b24gPSBHZXRPbGRlc3RTYWZlRGVjb2RpbmdUcmFuc2Fj dGlvbklkKHRydWUpOworCQlzbG90LT5lZmZlY3RpdmVfY2F0YWxvZ194bWluID0geG1pbl9o b3Jpem9uOworCQlzbG90LT5kYXRhLmNhdGFsb2dfeG1pbiA9IHhtaW5faG9yaXpvbjsKKwkJ UmVwbGljYXRpb25TbG90c0NvbXB1dGVSZXF1aXJlZFhtaW4odHJ1ZSk7CisJCUxXTG9ja1Jl bGVhc2UoUHJvY0FycmF5TG9jayk7CisKKwkJaWYgKHRhcmdldF9sc24gPCBNeVJlcGxpY2F0 aW9uU2xvdC0+ZGF0YS5yZXN0YXJ0X2xzbikKKwkJeworCQkJZXJlcG9ydChMT0csCisJCQkJ CWVycm1zZygid2FpdGluZyBmb3IgcmVtb3RlIHNsb3QgXCIlc1wiIExTTiAoJVgvJVgpIHRv IHBhc3MgbG9jYWwgc2xvdCBMU04gKCVYLyVYKSIsCisJCQkJCQkgICBzbG90X25hbWUsCisJ CQkJCQkgICBMU05fRk9STUFUX0FSR1ModGFyZ2V0X2xzbiksIExTTl9GT1JNQVRfQVJHUyhN eVJlcGxpY2F0aW9uU2xvdC0+ZGF0YS5yZXN0YXJ0X2xzbikpKTsKKworCQkJd2FpdF9mb3Jf cHJpbWFyeV9zbG90X2NhdGNodXAod3Jjb25uLCBzbG90X25hbWUsCisJCQkJCQkJCQkJICBN eVJlcGxpY2F0aW9uU2xvdC0+ZGF0YS5yZXN0YXJ0X2xzbik7CisJCX0KKworCQlSZXBsaWNh dGlvblNsb3RQZXJzaXN0KCk7CisJfQorCisJZW5kbHNuID0gcGdfbG9naWNhbF9yZXBsaWNh dGlvbl9zbG90X2FkdmFuY2UodGFyZ2V0X2xzbik7CisKKwllbG9nKERFQlVHMywgInN5bmNo cm9uaXplZCBzbG90ICVzIHRvIGxzbiAoJVgvJVgpIiwKKwkJIHNsb3RfbmFtZSwgTFNOX0ZP Uk1BVF9BUkdTKGVuZGxzbikpOworCisJUmVwbGljYXRpb25TbG90UmVsZWFzZSgpOworCUNv bW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworfQorCitzdGF0aWMgdm9pZAorc3luY2hyb25p emVfc2xvdHModm9pZCkKK3sKKwlXYWxSY3ZFeGVjUmVzdWx0ICpyZXM7CisJV2FsUmVjZWl2 ZXJDb25uICp3cmNvbm4gPSBOVUxMOworCVR1cGxlVGFibGVTbG90ICpzbG90OworCU9pZAkJ CXNsb3RSb3dbM10gPSB7VEVYVE9JRCwgVEVYVE9JRCwgTFNOT0lEfTsKKwlTdHJpbmdJbmZv RGF0YSBzOworCWNoYXIJICAgKmRhdGFiYXNlOworCWNoYXIJICAgKmVycjsKKwlNZW1vcnlD b250ZXh0IG9sZGN0eCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCisJaWYgKCFXYWxSY3Yp CisJCXJldHVybjsKKworCS8qIHN5c2NhY2hlIGFjY2VzcyBuZWVkcyBhIHRyYW5zYWN0aW9u IGVudi4gKi8KKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCS8qIG1ha2UgZGJuYW1l IGxpdmUgb3V0c2lkZSBUWCBjb250ZXh0ICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGN0eCk7CisKKwlkYXRhYmFzZSA9IGdldF9kYXRhYmFzZV9uYW1lKE15RGF0YWJhc2VJZCk7 CisJaW5pdFN0cmluZ0luZm8oJnMpOworCWFwcGVuZFN0cmluZ0luZm8oJnMsICIlcyBkYm5h bWU9JXMiLCBQcmltYXJ5Q29ubkluZm8sIGRhdGFiYXNlKTsKKwl3cmNvbm4gPSB3YWxyY3Zf Y29ubmVjdChzLmRhdGEsIHRydWUsICJzbG90X3N5bmMiLCAmZXJyKTsKKworCWlmICh3cmNv bm4gPT0gTlVMTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJjb3VsZCBub3Qg Y29ubmVjdCB0byB0aGUgcHJpbWFyeSBzZXJ2ZXI6ICVzIiwgZXJyKSkpOworCisJcmVzZXRT dHJpbmdJbmZvKCZzKTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZzLAorCQkJCQkgIlNFTEVDVCBz bG90X25hbWUsIHBsdWdpbiwgY29uZmlybWVkX2ZsdXNoX2xzbiIKKwkJCQkJICIgIEZST00g cGdfY2F0YWxvZy5wZ19yZXBsaWNhdGlvbl9zbG90cyIKKwkJCQkJICIgV0hFUkUgZGF0YWJh c2UgPSAlcyIsCisJCQkJCSBxdW90ZV9saXRlcmFsX2NzdHIoZGF0YWJhc2UpKTsKKwlpZiAo c3RyY21wKHN5bmNocm9uaXplX3Nsb3RfbmFtZXMsICIiKSAhPSAwICYmIHN0cmNtcChzeW5j aHJvbml6ZV9zbG90X25hbWVzLCAiKiIpICE9IDApCisJeworCQljaGFyCSAgICpyYXduYW1l OworCQlMaXN0CSAgICpuYW1lbGlzdDsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJcmF3bmFt ZSA9IHBzdHJkdXAoc3luY2hyb25pemVfc2xvdF9uYW1lcyk7CisJCVNwbGl0SWRlbnRpZmll clN0cmluZyhyYXduYW1lLCAnLCcsICZuYW1lbGlzdCk7CisKKwkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmcywgIiBBTkQgc2xvdF9uYW1lIElOICgiKTsKKwkJZm9yZWFjaCAobGMsIG5h bWVsaXN0KQorCQl7CisJCQlpZiAobGMgIT0gbGlzdF9oZWFkKG5hbWVsaXN0KSkKKwkJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcigmcywgJywnKTsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJnMs ICIlcyIsCisJCQkJCQkJIHF1b3RlX2xpdGVyYWxfY3N0cihsZmlyc3QobGMpKSk7CisJCX0K KwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJnMsICcpJyk7CisJfQorCisJcmVzID0gd2FscmN2 X2V4ZWMod3Jjb25uLCBzLmRhdGEsIDMsIHNsb3RSb3cpOworCXBmcmVlKHMuZGF0YSk7CisK KwlpZiAocmVzLT5zdGF0dXMgIT0gV0FMUkNWX09LX1RVUExFUykKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQkoZXJybXNnKCJjb3VsZCBub3QgZmV0Y2ggc2xvdCBpbmZvIGZyb20gcHJpbWFy eTogJXMiLAorCQkJCQkJcmVzLT5lcnIpKSk7CisKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1h bmQoKTsKKwkvKiBDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQgc3dpdGNoZXMgdG8gVG9wTWVt b3J5Q29udGV4dCAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCisJc2xv dCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChyZXMtPnR1cGxlZGVzYywgJlRUU09wc01p bmltYWxUdXBsZSk7CisJd2hpbGUgKHR1cGxlc3RvcmVfZ2V0dHVwbGVzbG90KHJlcy0+dHVw bGVzdG9yZSwgdHJ1ZSwgZmFsc2UsIHNsb3QpKQorCXsKKwkJY2hhcgkgICAqc2xvdF9uYW1l OworCQljaGFyCSAgICpwbHVnaW5fbmFtZTsKKwkJWExvZ1JlY1B0cgljb25maXJtZWRfZmx1 c2hfbHNuOworCQlib29sCQlpc251bGw7CisKKwkJc2xvdF9uYW1lID0gVGV4dERhdHVtR2V0 Q1N0cmluZyhzbG90X2dldGF0dHIoc2xvdCwgMSwgJmlzbnVsbCkpOworCQlBc3NlcnQoIWlz bnVsbCk7CisKKwkJcGx1Z2luX25hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHNsb3RfZ2V0 YXR0cihzbG90LCAyLCAmaXNudWxsKSk7CisJCUFzc2VydCghaXNudWxsKTsKKworCQljb25m aXJtZWRfZmx1c2hfbHNuID0gRGF0dW1HZXRMU04oc2xvdF9nZXRhdHRyKHNsb3QsIDMsICZp c251bGwpKTsKKwkJQXNzZXJ0KCFpc251bGwpOworCisJCXN5bmNocm9uaXplX29uZV9zbG90 KHdyY29ubiwgc2xvdF9uYW1lLCBkYXRhYmFzZSwgcGx1Z2luX25hbWUsCisJCQkJCQkJIGNv bmZpcm1lZF9mbHVzaF9sc24pOworCisJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCX0KKwor CXdhbHJjdl9jbGVhcl9yZXN1bHQocmVzKTsKKwlwZnJlZShkYXRhYmFzZSk7CisKKwl3YWxy Y3ZfZGlzY29ubmVjdCh3cmNvbm4pOworfQorCisvKgorICogVGhlIG1haW4gbG9vcCBvZiBv dXIgd29ya2VyIHByb2Nlc3MuCisgKi8KK3ZvaWQKK1JlcGxTbG90U3luY01haW4oRGF0dW0g bWFpbl9hcmcpCit7CisJaW50CQkJd29ya2VyX3Nsb3QgPSBEYXR1bUdldEludDMyKG1haW5f YXJnKTsKKworCS8qIEF0dGFjaCB0byBzbG90ICovCisJbG9naWNhbHJlcF93b3JrZXJfYXR0 YWNoKHdvcmtlcl9zbG90KTsKKworCS8qIEVzdGFibGlzaCBzaWduYWwgaGFuZGxlcnMuICov CisJQmFja2dyb3VuZFdvcmtlclVuYmxvY2tTaWduYWxzKCk7CisKKwkvKiBMb2FkIHRoZSBs aWJwcS1zcGVjaWZpYyBmdW5jdGlvbnMgKi8KKwlsb2FkX2ZpbGUoImxpYnBxd2FscmVjZWl2 ZXIiLCBmYWxzZSk7CisKKwkvKiBDb25uZWN0IHRvIG91ciBkYXRhYmFzZS4gKi8KKwlCYWNr Z3JvdW5kV29ya2VySW5pdGlhbGl6ZUNvbm5lY3Rpb25CeU9pZChNeUxvZ2ljYWxSZXBXb3Jr ZXItPmRiaWQsCisJCQkJCQkJCQkJCSAgTXlMb2dpY2FsUmVwV29ya2VyLT51c2VyaWQsCisJ CQkJCQkJCQkJCSAgMCk7CisKKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCWVyZXBv cnQoTE9HLAorCQkJKGVycm1zZygicmVwbGljYXRpb24gc2xvdCBzeW5jaHJvbml6YXRpb24g d29ya2VyIGZvciBkYXRhYmFzZSBcIiVzXCIgaGFzIHN0YXJ0ZWQiLAorCQkJCQlnZXRfZGF0 YWJhc2VfbmFtZShNeUxvZ2ljYWxSZXBXb3JrZXItPmRiaWQpKSkpOworCUNvbW1pdFRyYW5z YWN0aW9uQ29tbWFuZCgpOworCisJLyogTWFpbiB3YWl0IGxvb3AuICovCisJZm9yICg7OykK Kwl7CisJCWludAkJCXJjOworCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJaWYg KCFSZWNvdmVyeUluUHJvZ3Jlc3MoKSkKKwkJCXJldHVybjsKKworCQlpZiAoc3RyY21wKHN5 bmNocm9uaXplX3Nsb3RfbmFtZXMsICIiKSA9PSAwKQorCQkJcmV0dXJuOworCisJCXN5bmNo cm9uaXplX3Nsb3RzKCk7CisKKwkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJICAg V0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX1BPU1RNQVNURVJfREVBVEgsCisJCQkJ CSAgIHdhbF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbCwKKwkJCQkJICAgV0FJVF9FVkVOVF9S RVBMX1NMT1RfU1lOQ19NQUlOKTsKKworCQlSZXNldExhdGNoKE15TGF0Y2gpOworCisJCS8q IGVtZXJnZW5jeSBiYWlsb3V0IGlmIHBvc3RtYXN0ZXIgaGFzIGRpZWQgKi8KKwkJaWYgKHJj ICYgV0xfUE9TVE1BU1RFUl9ERUFUSCkKKwkJCXByb2NfZXhpdCgxKTsKKwl9Cit9CisKKy8q CisgKiBSb3V0aW5lcyBmb3IgaGFuZGxpbmcgdGhlIEdVQyB2YXJpYWJsZShzKQorICovCisK K2Jvb2wKK2NoZWNrX3N5bmNocm9uaXplX3Nsb3RfbmFtZXMoY2hhciAqKm5ld3ZhbCwgdm9p ZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQoreworCS8qIFNwZWNpYWwgaGFuZGxpbmcg Zm9yICIqIiB3aGljaCBtZWFucyBhbGwuICovCisJaWYgKHN0cmNtcCgqbmV3dmFsLCAiKiIp ID09IDApCisJeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJZWxzZQorCXsKKwkJY2hhcgkgICAq cmF3bmFtZTsKKwkJTGlzdAkgICAqbmFtZWxpc3Q7CisJCUxpc3RDZWxsICAgKmxjOworCisJ CS8qIE5lZWQgYSBtb2RpZmlhYmxlIGNvcHkgb2Ygc3RyaW5nICovCisJCXJhd25hbWUgPSBw c3RyZHVwKCpuZXd2YWwpOworCisJCS8qIFBhcnNlIHN0cmluZyBpbnRvIGxpc3Qgb2YgaWRl bnRpZmllcnMgKi8KKwkJaWYgKCFTcGxpdElkZW50aWZpZXJTdHJpbmcocmF3bmFtZSwgJywn LCAmbmFtZWxpc3QpKQorCQl7CisJCQkvKiBzeW50YXggZXJyb3IgaW4gbmFtZSBsaXN0ICov CisJCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCJMaXN0IHN5bnRheCBpcyBpbnZhbGlkLiIpOwor CQkJcGZyZWUocmF3bmFtZSk7CisJCQlsaXN0X2ZyZWUobmFtZWxpc3QpOworCQkJcmV0dXJu IGZhbHNlOworCQl9CisKKwkJZm9yZWFjaChsYywgbmFtZWxpc3QpCisJCXsKKwkJCWNoYXIJ ICAgKmN1cm5hbWUgPSAoY2hhciAqKSBsZmlyc3QobGMpOworCisJCQlSZXBsaWNhdGlvblNs b3RWYWxpZGF0ZU5hbWUoY3VybmFtZSwgRVJST1IpOworCQl9CisKKwkJcGZyZWUocmF3bmFt ZSk7CisJCWxpc3RfZnJlZShuYW1lbGlzdCk7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisK KworYm9vbAorY2hlY2tfc3RhbmRieV9zbG90X25hbWVzKGNoYXIgKipuZXd2YWwsIHZvaWQg KipleHRyYSwgR3VjU291cmNlIHNvdXJjZSkKK3sKKwljaGFyCSAgICpyYXduYW1lOworCUxp c3QJICAgKm5hbWVsaXN0OworCUxpc3RDZWxsICAgKmxjOworCisJLyogTmVlZCBhIG1vZGlm aWFibGUgY29weSBvZiBzdHJpbmcgKi8KKwlyYXduYW1lID0gcHN0cmR1cCgqbmV3dmFsKTsK KworCS8qIFBhcnNlIHN0cmluZyBpbnRvIGxpc3Qgb2YgaWRlbnRpZmllcnMgKi8KKwlpZiAo IVNwbGl0SWRlbnRpZmllclN0cmluZyhyYXduYW1lLCAnLCcsICZuYW1lbGlzdCkpCisJewor CQkvKiBzeW50YXggZXJyb3IgaW4gbmFtZSBsaXN0ICovCisJCUdVQ19jaGVja19lcnJkZXRh aWwoIkxpc3Qgc3ludGF4IGlzIGludmFsaWQuIik7CisJCXBmcmVlKHJhd25hbWUpOworCQls aXN0X2ZyZWUobmFtZWxpc3QpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJZm9yZWFjaChs YywgbmFtZWxpc3QpCisJeworCQljaGFyCSAgICpjdXJuYW1lID0gKGNoYXIgKikgbGZpcnN0 KGxjKTsKKworCQlSZXBsaWNhdGlvblNsb3RWYWxpZGF0ZU5hbWUoY3VybmFtZSwgRVJST1Ip OworCX0KKworCXBmcmVlKHJhd25hbWUpOworCWxpc3RfZnJlZShuYW1lbGlzdCk7CisKKwly ZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvdGFibGVzeW5jLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Rh Ymxlc3luYy5jCmluZGV4IGYwNzk4M2E0M2MuLjBlMDU5M2Y3MTYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwpAQCAtMTAwLDYgKzEwMCw3 IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdWJzY3JpcHRpb25fcmVsLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvY29weS5oIgorI2lu Y2x1ZGUgImNvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuaCIKICNpbmNsdWRlICJtaXNjYWRt aW4uaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKICNpbmNsdWRlICJw Z3N0YXQuaCIKQEAgLTE1MSw3ICsxNTIsOCBAQCBmaW5pc2hfc3luY193b3JrZXIodm9pZCkK IAlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAogCS8qIEZpbmQgdGhlIG1haW4gYXBw bHkgd29ya2VyIGFuZCBzaWduYWwgaXQuICovCi0JbG9naWNhbHJlcF93b3JrZXJfd2FrZXVw KE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIEludmFsaWRPaWQpOworCWxvZ2ljYWxyZXBf d29ya2VyX3dha2V1cChNeUxvZ2ljYWxSZXBXb3JrZXItPmRiaWQsCisJCQkJCQkJIE15TG9n aWNhbFJlcFdvcmtlci0+c3ViaWQsIEludmFsaWRPaWQpOwogCiAJLyogU3RvcCBncmFjZWZ1 bGx5ICovCiAJcHJvY19leGl0KDApOwpAQCAtMTkxLDcgKzE5Myw4IEBAIHdhaXRfZm9yX3Jl bGF0aW9uX3N0YXRlX2NoYW5nZShPaWQgcmVsaWQsIGNoYXIgZXhwZWN0ZWRfc3RhdGUpCiAK IAkJLyogQ2hlY2sgaWYgdGhlIHN5bmMgd29ya2VyIGlzIHN0aWxsIHJ1bm5pbmcgYW5kIGJh aWwgaWYgbm90LiAqLwogCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBM V19TSEFSRUQpOwotCQl3b3JrZXIgPSBsb2dpY2FscmVwX3dvcmtlcl9maW5kKE15TG9naWNh bFJlcFdvcmtlci0+c3ViaWQsIHJlbGlkLAorCQl3b3JrZXIgPSBsb2dpY2FscmVwX3dvcmtl cl9maW5kKE15TG9naWNhbFJlcFdvcmtlci0+ZGJpZCwKKwkJCQkJCQkJCQlNeUxvZ2ljYWxS ZXBXb3JrZXItPnN1YmlkLCByZWxpZCwKIAkJCQkJCQkJCQlmYWxzZSk7CiAJCUxXTG9ja1Jl bGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwogCQlpZiAoIXdvcmtlcikKQEAgLTIzOCw3 ICsyNDEsOCBAQCB3YWl0X2Zvcl93b3JrZXJfc3RhdGVfY2hhbmdlKGNoYXIgZXhwZWN0ZWRf c3RhdGUpCiAJCSAqIHdhaXRpbmcuCiAJCSAqLwogCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxS ZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwotCQl3b3JrZXIgPSBsb2dpY2FscmVwX3dvcmtl cl9maW5kKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsCisJCXdvcmtlciA9IGxvZ2ljYWxy ZXBfd29ya2VyX2ZpbmQoTXlMb2dpY2FsUmVwV29ya2VyLT5kYmlkLAorCQkJCQkJCQkJCU15 TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsCiAJCQkJCQkJCQkJSW52YWxpZE9pZCwgZmFsc2Up OwogCQlpZiAod29ya2VyICYmIHdvcmtlci0+cHJvYykKIAkJCWxvZ2ljYWxyZXBfd29ya2Vy X3dha2V1cF9wdHIod29ya2VyKTsKQEAgLTQ4NCw3ICs0ODgsOCBAQCBwcm9jZXNzX3N5bmNp bmdfdGFibGVzX2Zvcl9hcHBseShYTG9nUmVjUHRyIGN1cnJlbnRfbHNuKQogCQkJICovCiAJ CQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwogCi0J CQlzeW5jd29ya2VyID0gbG9naWNhbHJlcF93b3JrZXJfZmluZChNeUxvZ2ljYWxSZXBXb3Jr ZXItPnN1YmlkLAorCQkJc3luY3dvcmtlciA9IGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoTXlM b2dpY2FsUmVwV29ya2VyLT5kYmlkLAorCQkJCQkJCQkJCQkJTXlMb2dpY2FsUmVwV29ya2Vy LT5zdWJpZCwKIAkJCQkJCQkJCQkJCXJzdGF0ZS0+cmVsaWQsIGZhbHNlKTsKIAogCQkJaWYg KHN5bmN3b3JrZXIpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9yZXBs X2dyYW0ueSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3JlcGxfZ3JhbS55CmluZGV4IGRj YjExMDg1NzkuLjkwMjg0MWVmZTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3JlcGxfZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3JlcGxfZ3Jh bS55CkBAIC05MSwxMSArOTEsMTIgQEAgc3RhdGljIFNRTENtZCAqbWFrZV9zcWxjbWQodm9p ZCk7CiAldG9rZW4gS19VU0VfU05BUFNIT1QKICV0b2tlbiBLX01BTklGRVNUCiAldG9rZW4g S19NQU5JRkVTVF9DSEVDS1NVTVMKKyV0b2tlbiBLX0xJU1RfU0xPVFMKIAogJXR5cGUgPG5v ZGU+CWNvbW1hbmQKICV0eXBlIDxub2RlPgliYXNlX2JhY2t1cCBzdGFydF9yZXBsaWNhdGlv biBzdGFydF9sb2dpY2FsX3JlcGxpY2F0aW9uCiAJCQkJY3JlYXRlX3JlcGxpY2F0aW9uX3Ns b3QgZHJvcF9yZXBsaWNhdGlvbl9zbG90IGlkZW50aWZ5X3N5c3RlbQotCQkJCXJlYWRfcmVw bGljYXRpb25fc2xvdCB0aW1lbGluZV9oaXN0b3J5IHNob3cgc3FsX2NtZAorCQkJCXJlYWRf cmVwbGljYXRpb25fc2xvdCB0aW1lbGluZV9oaXN0b3J5IHNob3cgc3FsX2NtZCBsaXN0X3Ns b3RzCiAldHlwZSA8bGlzdD4JYmFzZV9iYWNrdXBfbGVnYWN5X29wdF9saXN0IGdlbmVyaWNf b3B0aW9uX2xpc3QKICV0eXBlIDxkZWZlbHQ+CWJhc2VfYmFja3VwX2xlZ2FjeV9vcHQgZ2Vu ZXJpY19vcHRpb24KICV0eXBlIDx1aW50dmFsPglvcHRfdGltZWxpbmUKQEAgLTEwNiw2ICsx MDcsNyBAQCBzdGF0aWMgU1FMQ21kICptYWtlX3NxbGNtZCh2b2lkKTsKICV0eXBlIDxib29s dmFsPglvcHRfdGVtcG9yYXJ5CiAldHlwZSA8bGlzdD4JY3JlYXRlX3Nsb3Rfb3B0aW9ucyBj cmVhdGVfc2xvdF9sZWdhY3lfb3B0X2xpc3QKICV0eXBlIDxkZWZlbHQ+CWNyZWF0ZV9zbG90 X2xlZ2FjeV9vcHQKKyV0eXBlIDxsaXN0PglzbG90X25hbWVfbGlzdCBzbG90X25hbWVfbGlz dF9vcHQKIAogJSUKIApAQCAtMTI5LDYgKzEzMSw3IEBAIGNvbW1hbmQ6CiAJCQl8IHJlYWRf cmVwbGljYXRpb25fc2xvdAogCQkJfCB0aW1lbGluZV9oaXN0b3J5CiAJCQl8IHNob3cKKwkJ CXwgbGlzdF9zbG90cwogCQkJfCBzcWxfY21kCiAJCQk7CiAKQEAgLTE0Miw2ICsxNDUsMzMg QEAgaWRlbnRpZnlfc3lzdGVtOgogCQkJCX0KIAkJCTsKIAorc2xvdF9uYW1lX2xpc3Q6CisJ CQlJREVOVAorCQkJCXsKKwkJCQkJJCQgPSBsaXN0X21ha2UxKCQxKTsKKwkJCQl9CisJCQl8 IHNsb3RfbmFtZV9saXN0ICcsJyBJREVOVAorCQkJCXsKKwkJCQkJJCQgPSBsYXBwZW5kKCQx LCAkMyk7CisJCQkJfQorCitzbG90X25hbWVfbGlzdF9vcHQ6CisJCQlzbG90X25hbWVfbGlz dAkJCXsgJCQgPSAkMTsgfQorCQkJfCAvKiBFTVBUWSAqLwkJCXsgJCQgPSBOSUw7IH0KKwkJ OworCisvKgorICogTElTVF9TTE9UUworICovCitsaXN0X3Nsb3RzOgorCQkJS19MSVNUX1NM T1RTIHNsb3RfbmFtZV9saXN0X29wdAorCQkJCXsKKwkJCQkJTGlzdFNsb3RzQ21kICpjbWQg PSBtYWtlTm9kZShMaXN0U2xvdHNDbWQpOworCQkJCQljbWQtPnNsb3RfbmFtZXMgPSAkMjsK KwkJCQkJJCQgPSAoTm9kZSAqKSBjbWQ7CisJCQkJfQorCQkJOworCiAvKgogICogUkVBRF9S RVBMSUNBVElPTl9TTE9UICVzCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3JlcGxfc2Nhbm5lci5sIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcmVwbF9z Y2FubmVyLmwKaW5kZXggMWI1OTljMjU1ZS4uOWVlNjM4MzU1ZCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vcmVwbF9zY2FubmVyLmwKKysrIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vcmVwbF9zY2FubmVyLmwKQEAgLTg1LDYgKzg1LDcgQEAgaWRlbnRpZmll cgkJe2lkZW50X3N0YXJ0fXtpZGVudF9jb250fSoKIEJBU0VfQkFDS1VQCQkJeyByZXR1cm4g S19CQVNFX0JBQ0tVUDsgfQogRkFTVAkJCXsgcmV0dXJuIEtfRkFTVDsgfQogSURFTlRJRllf U1lTVEVNCQl7IHJldHVybiBLX0lERU5USUZZX1NZU1RFTTsgfQorTElTVF9TTE9UUwkJeyBy ZXR1cm4gS19MSVNUX1NMT1RTOyB9CiBSRUFEX1JFUExJQ0FUSU9OX1NMT1QJeyByZXR1cm4g S19SRUFEX1JFUExJQ0FUSU9OX1NMT1Q7IH0KIFNIT1cJCXsgcmV0dXJuIEtfU0hPVzsgfQog TEFCRUwJCQl7IHJldHVybiBLX0xBQkVMOyB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9zbG90ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3Rm dW5jcy5jCmluZGV4IGQxMWRhZWIxZmMuLmU5M2ZlYTU1YWQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3RmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3Nsb3RmdW5jcy5jCkBAIC00ODQsNyArNDg0LDcgQEAgcGdfcGh5c2ljYWxfcmVw bGljYXRpb25fc2xvdF9hZHZhbmNlKFhMb2dSZWNQdHIgbW92ZXRvKQogICogV0FMIGFuZCBy ZW1vdmFsIG9mIG9sZCBjYXRhbG9nIHR1cGxlcy4gIEFzIGRlY29kaW5nIGlzIGRvbmUgaW4g ZmFzdF9mb3J3YXJkCiAgKiBtb2RlLCBubyBjaGFuZ2VzIGFyZSBnZW5lcmF0ZWQgYW55d2F5 LgogICovCi1zdGF0aWMgWExvZ1JlY1B0cgorWExvZ1JlY1B0cgogcGdfbG9naWNhbF9yZXBs aWNhdGlvbl9zbG90X2FkdmFuY2UoWExvZ1JlY1B0ciBtb3ZldG8pCiB7CiAJTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vd2Fsc2VuZGVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYwpp bmRleCA4NDkxNWVkOTViLi4yZmNlMjkwZWQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi93YWxzZW5kZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93 YWxzZW5kZXIuYwpAQCAtNDU2LDYgKzQ1NiwxOTQgQEAgSWRlbnRpZnlTeXN0ZW0odm9pZCkK IAllbmRfdHVwX291dHB1dCh0c3RhdGUpOwogfQogCitzdGF0aWMgaW50CitwZ19xc29ydF9u YW1lY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJcmV0dXJuIHN0cm5j bXAoTmFtZVN0cigqKE5hbWUpIGEpLCBOYW1lU3RyKCooTmFtZSkgYiksIE5BTUVEQVRBTEVO KTsKK30KKworLyoKKyAqIEhhbmRsZSB0aGUgTElTVF9TTE9UUyBjb21tYW5kLgorICovCitz dGF0aWMgdm9pZAorTGlzdFNsb3RzKExpc3RTbG90c0NtZCAqY21kKQoreworCURlc3RSZWNl aXZlciAqZGVzdDsKKwlUdXBPdXRwdXRTdGF0ZSAqdHN0YXRlOworCVR1cGxlRGVzYwl0dXBk ZXNjOworCU5hbWVEYXRhICAgKnNsb3RfbmFtZXM7CisJaW50CQkJbnVtc2xvdF9uYW1lczsK KworCW51bXNsb3RfbmFtZXMgPSBsaXN0X2xlbmd0aChjbWQtPnNsb3RfbmFtZXMpOworCWlm IChudW1zbG90X25hbWVzKQorCXsKKwkJTGlzdENlbGwgICAqbGM7CisJCWludAkJCWkgPSAw OworCisJCXNsb3RfbmFtZXMgPSBwYWxsb2MobnVtc2xvdF9uYW1lcyAqIHNpemVvZihOYW1l RGF0YSkpOworCQlmb3JlYWNoKGxjLCBjbWQtPnNsb3RfbmFtZXMpCisJCXsKKwkJCWNoYXIJ ICAgKnNsb3RfbmFtZSA9IGxmaXJzdChsYyk7CisKKwkJCVJlcGxpY2F0aW9uU2xvdFZhbGlk YXRlTmFtZShzbG90X25hbWUsIEVSUk9SKTsKKwkJCW5hbWVzdHJjcHkoJnNsb3RfbmFtZXNb aSsrXSwgc2xvdF9uYW1lKTsKKwkJfQorCisJCXFzb3J0KHNsb3RfbmFtZXMsIG51bXNsb3Rf bmFtZXMsIHNpemVvZihOYW1lRGF0YSksIHBnX3Fzb3J0X25hbWVjbXApOworCX0KKworCWRl c3QgPSBDcmVhdGVEZXN0UmVjZWl2ZXIoRGVzdFJlbW90ZVNpbXBsZSk7CisKKwkvKiBuZWVk IGEgdHVwbGUgZGVzY3JpcHRvciByZXByZXNlbnRpbmcgZm91ciBjb2x1bW5zICovCisJdHVw ZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKDEwKTsKKwlUdXBsZURlc2NJbml0QnVp bHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAxLCAic2xvdF9uYW1lIiwKKwkJCQkJ CQkgIFRFWFRPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRl c2MsIChBdHRyTnVtYmVyKSAyLCAicGx1Z2luIiwKKwkJCQkJCQkgIFRFWFRPSUQsIC0xLCAw KTsKKwlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAz LCAic2xvdF90eXBlIiwKKwkJCQkJCQkgIFRFWFRPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NJ bml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA0LCAiZGF0b2lkIiwKKwkJ CQkJCQkgIElOVDhPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1 cGRlc2MsIChBdHRyTnVtYmVyKSA1LCAiZGF0YWJhc2UiLAorCQkJCQkJCSAgVEVYVE9JRCwg LTEsIDApOworCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1i ZXIpIDYsICJ0ZW1wb3JhcnkiLAorCQkJCQkJCSAgSU5UNE9JRCwgLTEsIDApOworCVR1cGxl RGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDcsICJ4bWluIiwK KwkJCQkJCQkgIElOVDhPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5 KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA4LCAiY2F0YWxvZ194bWluIiwKKwkJCQkJCQkgIElO VDhPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChB dHRyTnVtYmVyKSA5LCAicmVzdGFydF9sc24iLAorCQkJCQkJCSAgVEVYVE9JRCwgLTEsIDAp OworCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEw LCAiY29uZmlybWVkX2ZsdXNoIiwKKwkJCQkJCQkgIFRFWFRPSUQsIC0xLCAwKTsKKworCS8q IHByZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVwbGVzICovCisJdHN0YXRlID0gYmVnaW5f dHVwX291dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsKTsKKwor CUxXTG9ja0FjcXVpcmUoUmVwbGljYXRpb25TbG90Q29udHJvbExvY2ssIExXX1NIQVJFRCk7 CisJZm9yIChpbnQgc2xvdG5vID0gMDsgc2xvdG5vIDwgbWF4X3JlcGxpY2F0aW9uX3Nsb3Rz OyBzbG90bm8rKykKKwl7CisJCVJlcGxpY2F0aW9uU2xvdCAqc2xvdCA9ICZSZXBsaWNhdGlv blNsb3RDdGwtPnJlcGxpY2F0aW9uX3Nsb3RzW3Nsb3Rub107CisJCWNoYXIJCXJlc3RhcnRf bHNuX3N0cltNQVhGTkFNRUxFTl07CisJCWNoYXIJCWNvbmZpcm1lZF9mbHVzaF9sc25fc3Ry W01BWEZOQU1FTEVOXTsKKwkJRGF0dW0JCXZhbHVlc1sxMF07CisJCWJvb2wJCW51bGxzWzEw XTsKKworCQlSZXBsaWNhdGlvblNsb3RQZXJzaXN0ZW5jeSBwZXJzaXN0ZW5jeTsKKwkJVHJh bnNhY3Rpb25JZCB4bWluOworCQlUcmFuc2FjdGlvbklkIGNhdGFsb2dfeG1pbjsKKwkJWExv Z1JlY1B0cglyZXN0YXJ0X2xzbjsKKwkJWExvZ1JlY1B0cgljb25maXJtZWRfZmx1c2hfbHNu OworCQlPaWQJCQlkYXRvaWQ7CisJCU5hbWVEYXRhCXNsb3RfbmFtZTsKKwkJTmFtZURhdGEJ cGx1Z2luOworCQlpbnQJCQlpOworCQlpbnQ2NAkJdG1wYmlnaW50OworCisJCWlmICghc2xv dC0+aW5fdXNlKQorCQkJY29udGludWU7CisKKwkJU3BpbkxvY2tBY3F1aXJlKCZzbG90LT5t dXRleCk7CisKKwkJeG1pbiA9IHNsb3QtPmRhdGEueG1pbjsKKwkJY2F0YWxvZ194bWluID0g c2xvdC0+ZGF0YS5jYXRhbG9nX3htaW47CisJCWRhdG9pZCA9IHNsb3QtPmRhdGEuZGF0YWJh c2U7CisJCXJlc3RhcnRfbHNuID0gc2xvdC0+ZGF0YS5yZXN0YXJ0X2xzbjsKKwkJY29uZmly bWVkX2ZsdXNoX2xzbiA9IHNsb3QtPmRhdGEuY29uZmlybWVkX2ZsdXNoOworCQluYW1lc3Ry Y3B5KCZzbG90X25hbWUsIE5hbWVTdHIoc2xvdC0+ZGF0YS5uYW1lKSk7CisJCW5hbWVzdHJj cHkoJnBsdWdpbiwgTmFtZVN0cihzbG90LT5kYXRhLnBsdWdpbikpOworCQlwZXJzaXN0ZW5j eSA9IHNsb3QtPmRhdGEucGVyc2lzdGVuY3k7CisKKwkJU3BpbkxvY2tSZWxlYXNlKCZzbG90 LT5tdXRleCk7CisKKwkJaWYgKG51bXNsb3RfbmFtZXMgJiYKKwkJCSFic2VhcmNoKCh2b2lk ICopICZzbG90X25hbWUsICh2b2lkICopIHNsb3RfbmFtZXMsCisJCQkJCSBudW1zbG90X25h bWVzLCBzaXplb2YoTmFtZURhdGEpLCBwZ19xc29ydF9uYW1lY21wKSkKKwkJCWNvbnRpbnVl OworCisJCW1lbXNldChudWxscywgMCwgc2l6ZW9mKG51bGxzKSk7CisKKwkJaSA9IDA7CisJ CXZhbHVlc1tpKytdID0gQ1N0cmluZ0dldFRleHREYXR1bShOYW1lU3RyKHNsb3RfbmFtZSkp OworCisJCWlmIChkYXRvaWQgPT0gSW52YWxpZE9pZCkKKwkJCW51bGxzW2krK10gPSB0cnVl OworCQllbHNlCisJCQl2YWx1ZXNbaSsrXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oTmFtZVN0 cihwbHVnaW4pKTsKKworCQlpZiAoZGF0b2lkID09IEludmFsaWRPaWQpCisJCQl2YWx1ZXNb aSsrXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oInBoeXNpY2FsIik7CisJCWVsc2UKKwkJCXZh bHVlc1tpKytdID0gQ1N0cmluZ0dldFRleHREYXR1bSgibG9naWNhbCIpOworCisJCWlmIChk YXRvaWQgPT0gSW52YWxpZE9pZCkKKwkJCW51bGxzW2krK10gPSB0cnVlOworCQllbHNlCisJ CXsKKwkJCXRtcGJpZ2ludCA9IGRhdG9pZDsKKwkJCXZhbHVlc1tpKytdID0gSW50NjRHZXRE YXR1bSh0bXBiaWdpbnQpOworCQl9CisKKwkJaWYgKGRhdG9pZCA9PSBJbnZhbGlkT2lkKQor CQkJbnVsbHNbaSsrXSA9IHRydWU7CisJCWVsc2UKKwkJeworCQkJTWVtb3J5Q29udGV4dCBj dXIgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKworCQkJLyogc3lzY2FjaGUgYWNjZXNzIG5l ZWRzIGEgdHJhbnNhY3Rpb24gZW52LiAqLworCQkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQo KTsKKwkJCS8qIG1ha2UgZGJuYW1lIGxpdmUgb3V0c2lkZSBUWCBjb250ZXh0ICovCisJCQlN ZW1vcnlDb250ZXh0U3dpdGNoVG8oY3VyKTsKKwkJCXZhbHVlc1tpKytdID0gQ1N0cmluZ0dl dFRleHREYXR1bShnZXRfZGF0YWJhc2VfbmFtZShkYXRvaWQpKTsKKwkJCUNvbW1pdFRyYW5z YWN0aW9uQ29tbWFuZCgpOworCQkJLyogQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kIHN3aXRj aGVzIHRvIFRvcE1lbW9yeUNvbnRleHQgKi8KKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhj dXIpOworCQl9CisKKwkJdmFsdWVzW2krK10gPSBJbnQzMkdldERhdHVtKHBlcnNpc3RlbmN5 ID09IFJTX1RFTVBPUkFSWSA/IDEgOiAwKTsKKworCQlpZiAoeG1pbiAhPSBJbnZhbGlkVHJh bnNhY3Rpb25JZCkKKwkJeworCQkJdG1wYmlnaW50ID0geG1pbjsKKwkJCXZhbHVlc1tpKytd ID0gSW50NjRHZXREYXR1bSh0bXBiaWdpbnQpOworCQl9CisJCWVsc2UKKwkJCW51bGxzW2kr K10gPSB0cnVlOworCisJCWlmIChjYXRhbG9nX3htaW4gIT0gSW52YWxpZFRyYW5zYWN0aW9u SWQpCisJCXsKKwkJCXRtcGJpZ2ludCA9IGNhdGFsb2dfeG1pbjsKKwkJCXZhbHVlc1tpKytd ID0gSW50NjRHZXREYXR1bSh0bXBiaWdpbnQpOworCQl9CisJCWVsc2UKKwkJCW51bGxzW2kr K10gPSB0cnVlOworCisJCWlmIChyZXN0YXJ0X2xzbiAhPSBJbnZhbGlkWExvZ1JlY1B0cikK KwkJeworCQkJc25wcmludGYocmVzdGFydF9sc25fc3RyLCBzaXplb2YocmVzdGFydF9sc25f c3RyKSwgIiVYLyVYIiwKKwkJCQkJIExTTl9GT1JNQVRfQVJHUyhyZXN0YXJ0X2xzbikpOwor CQkJdmFsdWVzW2krK10gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHJlc3RhcnRfbHNuX3N0cik7 CisJCX0KKwkJZWxzZQorCQkJbnVsbHNbaSsrXSA9IHRydWU7CisKKwkJaWYgKGNvbmZpcm1l ZF9mbHVzaF9sc24gIT0gSW52YWxpZFhMb2dSZWNQdHIpCisJCXsKKwkJCXNucHJpbnRmKGNv bmZpcm1lZF9mbHVzaF9sc25fc3RyLCBzaXplb2YoY29uZmlybWVkX2ZsdXNoX2xzbl9zdHIp LAorCQkJCQkgIiVYLyVYIiwgTFNOX0ZPUk1BVF9BUkdTKGNvbmZpcm1lZF9mbHVzaF9sc24p KTsKKwkJCXZhbHVlc1tpKytdID0gQ1N0cmluZ0dldFRleHREYXR1bShjb25maXJtZWRfZmx1 c2hfbHNuX3N0cik7CisJCX0KKwkJZWxzZQorCQkJbnVsbHNbaSsrXSA9IHRydWU7CisKKwkJ Lyogc2VuZCBpdCB0byBkZXN0ICovCisJCWRvX3R1cF9vdXRwdXQodHN0YXRlLCB2YWx1ZXMs IG51bGxzKTsKKwl9CisJTFdMb2NrUmVsZWFzZShSZXBsaWNhdGlvblNsb3RDb250cm9sTG9j ayk7CisKKwllbmRfdHVwX291dHB1dCh0c3RhdGUpOworfQorCiAvKiBIYW5kbGUgUkVBRF9S RVBMSUNBVElPTl9TTE9UIGNvbW1hbmQgKi8KIHN0YXRpYyB2b2lkCiBSZWFkUmVwbGljYXRp b25TbG90KFJlYWRSZXBsaWNhdGlvblNsb3RDbWQgKmNtZCkKQEAgLTU1NCw3ICs3NDIsNiBA QCBSZWFkUmVwbGljYXRpb25TbG90KFJlYWRSZXBsaWNhdGlvblNsb3RDbWQgKmNtZCkKIAll bmRfdHVwX291dHB1dCh0c3RhdGUpOwogfQogCi0KIC8qCiAgKiBIYW5kbGUgVElNRUxJTkVf SElTVE9SWSBjb21tYW5kLgogICovCkBAIC0xNzQ5LDYgKzE5MzYsMTMgQEAgZXhlY19yZXBs aWNhdGlvbl9jb21tYW5kKGNvbnN0IGNoYXIgKmNtZF9zdHJpbmcpCiAJCQlFbmRSZXBsaWNh dGlvbkNvbW1hbmQoY21kdGFnKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgVF9MaXN0U2xvdHND bWQ6CisJCQljbWR0YWcgPSAiTElTVF9TTE9UUyI7CisJCQlzZXRfcHNfZGlzcGxheShjbWR0 YWcpOworCQkJTGlzdFNsb3RzKChMaXN0U2xvdHNDbWQgKikgY21kX25vZGUpOworCQkJRW5k UmVwbGljYXRpb25Db21tYW5kKGNtZHRhZyk7CisJCQlicmVhazsKKwogCQljYXNlIFRfU3Rh cnRSZXBsaWNhdGlvbkNtZDoKIAkJCXsKIAkJCQlTdGFydFJlcGxpY2F0aW9uQ21kICpjbWQg PSAoU3RhcnRSZXBsaWNhdGlvbkNtZCAqKSBjbWRfbm9kZTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3dhaXRfZXZlbnQuYwppbmRleCA0ZDUzZjA0MGU4Li42OTIyMzUzYzk0IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCkBAIC0yMzAsNiAr MjMwLDkgQEAgcGdzdGF0X2dldF93YWl0X2FjdGl2aXR5KFdhaXRFdmVudEFjdGl2aXR5IHcp CiAJCWNhc2UgV0FJVF9FVkVOVF9MT0dJQ0FMX0xBVU5DSEVSX01BSU46CiAJCQlldmVudF9u YW1lID0gIkxvZ2ljYWxMYXVuY2hlck1haW4iOwogCQkJYnJlYWs7CisJCWNhc2UgV0FJVF9F VkVOVF9SRVBMX1NMT1RfU1lOQ19NQUlOOgorCQkJZXZlbnRfbmFtZSA9ICJSZXBsU2xvdFN5 bmNNYWluIjsKKwkJCWJyZWFrOwogCQljYXNlIFdBSVRfRVZFTlRfUEdTVEFUX01BSU46CiAJ CQlldmVudF9uYW1lID0gIlBnU3RhdE1haW4iOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWMuYwppbmRleCBmOTUwNGQzYWVjLi4wMjM0ZjVhYjg3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Yy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj LmMKQEAgLTc1LDYgKzc1LDcgQEAKICNpbmNsdWRlICJwb3N0bWFzdGVyL3N5c2xvZ2dlci5o IgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvd2Fsd3JpdGVyLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vbG9naWNhbGxhdW5jaGVyLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNh bHdvcmtlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKICNp bmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc3lu Y3JlcC5oIgpAQCAtNDYzNiw2ICs0NjM3LDI4IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX3N0 cmluZyBDb25maWd1cmVOYW1lc1N0cmluZ1tdID0KIAkJY2hlY2tfYmFja3RyYWNlX2Z1bmN0 aW9ucywgYXNzaWduX2JhY2t0cmFjZV9mdW5jdGlvbnMsIE5VTEwKIAl9LAogCisJeworCQl7 InN5bmNocm9uaXplX3Nsb3RfbmFtZXMiLCBQR0NfU0lHSFVQLCBSRVBMSUNBVElPTl9TVEFO REJZLAorCQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBuYW1lcyBvZiByZXBsaWNhdGlvbiBz bG90cyB3aGljaCB0byBzeW5jaHJvbml6ZSBmcm9tIHByaW1hcnkgdG8gc3RhbmRieS4iKSwK KwkJCWdldHRleHRfbm9vcCgiVmFsdWUgb2YgXCIqXCIgbWVhbnMgYWxsLiIpLAorCQkJR1VD X0xJU1RfSU5QVVQgfCBHVUNfTElTVF9RVU9URQorCQl9LAorCQkmc3luY2hyb25pemVfc2xv dF9uYW1lcywKKwkJIiIsCisJCWNoZWNrX3N5bmNocm9uaXplX3Nsb3RfbmFtZXMsIE5VTEws IE5VTEwKKwl9LAorCisJeworCQl7InN0YW5kYnlfc2xvdF9uYW1lcyIsIFBHQ19TSUdIVVAs IFJFUExJQ0FUSU9OX1BSSU1BUlksCisJCQlnZXR0ZXh0X25vb3AoIkxpc3Qgb2YgcGh5c2lj YWwgc2xvdHMgdGhhdCBtdXN0IGNvbmZpcm0gY2hhbmdlcyBiZWZvcmUgY2hhbmdlcyBhcmUg c2VudCB0byBsb2dpY2FsIHJlcGxpY2F0aW9uIGNvbnN1bWVycy4iKSwKKwkJCU5VTEwsCisJ CQlHVUNfTElTVF9JTlBVVCB8IEdVQ19MSVNUX1FVT1RFCisJCX0sCisJCSZzdGFuZGJ5X3Ns b3RfbmFtZXMsCisJCSIiLAorCQljaGVja19zdGFuZGJ5X3Nsb3RfbmFtZXMsIE5VTEwsIE5V TEwKKwl9LAorCiAJLyogRW5kLW9mLWxpc3QgbWFya2VyICovCiAJewogCQl7TlVMTCwgMCwg MCwgTlVMTCwgTlVMTH0sIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBhMWFj ZDQ2YjYxLi5lOGI1Zjc2MTI1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNj L3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0zMTUsNiArMzE1LDcgQEAKIAkJCQkjIGFuZCBj b21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhcHBsaWNhdGlvbl9uYW1lCiAJCQkJIyBmcm9tIHN0 YW5kYnkocyk7ICcqJyA9IGFsbAogI3ZhY3V1bV9kZWZlcl9jbGVhbnVwX2FnZSA9IDAJIyBu dW1iZXIgb2YgeGFjdHMgYnkgd2hpY2ggY2xlYW51cCBpcyBkZWxheWVkCisjc3RhbmRieV9z bG90X25hbWVzID0gJycJIyBwaHlzaWNhbCBzdGFuZGJ5IHNsb3QgbmFtZXMgdGhhdCBsb2dp Y2FsIHJlcGxpY2F0aW9uIHdhaXRzIGZvcgogCiAjIC0gU3RhbmRieSBTZXJ2ZXJzIC0KIApA QCAtMzQzLDYgKzM0NCw3IEBACiAjd2FsX3JldHJpZXZlX3JldHJ5X2ludGVydmFsID0gNXMJ IyB0aW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIHRvCiAJCQkJCSMgcmV0cmlldmUgV0FM IGFmdGVyIGEgZmFpbGVkIGF0dGVtcHQKICNyZWNvdmVyeV9taW5fYXBwbHlfZGVsYXkgPSAw CQkjIG1pbmltdW0gZGVsYXkgZm9yIGFwcGx5aW5nIGNoYW5nZXMgZHVyaW5nIHJlY292ZXJ5 Cisjc3luY2hyb25pemVfc2xvdF9uYW1lcyA9ICcnCQkjIGxvZ2ljYWwgcmVwbGljYXRpb24g c2xvdHMgdG8gc3luYyB0byBzdGFuZGJ5CiAKICMgLSBTdWJzY3JpYmVycyAtCiAKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuaCBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuaAppbmRleCBhZWM3ZTQ3OGFiLi4x Y2MxOWUwYzk5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zdWJzY3JpcHRp b25jbWRzLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5o CkBAIC0xNyw2ICsxNyw3IEBACiAKICNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFkZHJlc3Mu aCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2Vfbm9kZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0 aW9uL3dhbHJlY2VpdmVyLmgiCiAKIGV4dGVybiBPYmplY3RBZGRyZXNzIENyZWF0ZVN1YnNj cmlwdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVN1YnNjcmlwdGlvblN0bXQgKnN0 bXQsCiAJCQkJCQkJCQkJYm9vbCBpc1RvcExldmVsKTsKQEAgLTI2LDQgKzI3LDYgQEAgZXh0 ZXJuIHZvaWQgRHJvcFN1YnNjcmlwdGlvbihEcm9wU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwg Ym9vbCBpc1RvcExldmVsKTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIEFsdGVyU3Vic2NyaXB0 aW9uT3duZXIoY29uc3QgY2hhciAqbmFtZSwgT2lkIG5ld093bmVySWQpOwogZXh0ZXJuIHZv aWQgQWx0ZXJTdWJzY3JpcHRpb25Pd25lcl9vaWQoT2lkIHN1YmlkLCBPaWQgbmV3T3duZXJJ ZCk7CiAKK2V4dGVybiB2b2lkIFJlcGxpY2F0aW9uU2xvdERyb3BBdFB1Yk5vZGUoV2FsUmVj ZWl2ZXJDb25uICp3cmNvbm4sIGNoYXIgKnNsb3RuYW1lLCBib29sIG1pc3Npbmdfb2spOwor CiAjZW5kaWYJCQkJCQkJLyogU1VCU0NSSVBUSU9OQ01EU19IICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaApp bmRleCA3YzY1N2MxMjQxLi45MjBhNTEwYzRjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9u b2Rlcy9ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKQEAgLTUwMSw2 ICs1MDEsNyBAQCB0eXBlZGVmIGVudW0gTm9kZVRhZwogCVRfU3RhcnRSZXBsaWNhdGlvbkNt ZCwKIAlUX1RpbWVMaW5lSGlzdG9yeUNtZCwKIAlUX1NRTENtZCwKKwlUX0xpc3RTbG90c0Nt ZCwKIAogCS8qCiAJICogVEFHUyBGT1IgUkFORE9NIE9USEVSIFNUVUZGCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9ub2Rlcy9yZXBsbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3Jl cGxub2Rlcy5oCmluZGV4IGE3NDZmYWZjMTIuLjNmODE0MDllNTAgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL25vZGVzL3JlcGxub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3Jl cGxub2Rlcy5oCkBAIC0zMyw2ICszMywxNSBAQCB0eXBlZGVmIHN0cnVjdCBJZGVudGlmeVN5 c3RlbUNtZAogCU5vZGVUYWcJCXR5cGU7CiB9IElkZW50aWZ5U3lzdGVtQ21kOwogCisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJTElTVF9TTE9UUyBjb21tYW5kCisgKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3R5cGVkZWYgc3RydWN0IExpc3RTbG90c0NtZAor eworCU5vZGVUYWcJCXR5cGU7CisJTGlzdAkgICAqc2xvdF9uYW1lczsKK30gTGlzdFNsb3Rz Q21kOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJQkFTRV9CQUNLVVAgY29t bWFuZApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtl ci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oCmluZGV4IDJh ZDYxYTAwMWEuLmY1YjVlZjA3ZTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL2xvZ2ljYWx3b3JrZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dp Y2Fsd29ya2VyLmgKQEAgLTEyLDggKzEyLDE3IEBACiAjaWZuZGVmIExPR0lDQUxXT1JLRVJf SAogI2RlZmluZSBMT0dJQ0FMV09SS0VSX0gKIAorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgor CitleHRlcm4gY2hhciAqc3luY2hyb25pemVfc2xvdF9uYW1lczsKK2V4dGVybiBjaGFyICpz dGFuZGJ5X3Nsb3RfbmFtZXM7CisKIGV4dGVybiB2b2lkIEFwcGx5V29ya2VyTWFpbihEYXR1 bSBtYWluX2FyZyk7CitleHRlcm4gdm9pZCBSZXBsU2xvdFN5bmNNYWluKERhdHVtIG1haW5f YXJnKTsKIAogZXh0ZXJuIGJvb2wgSXNMb2dpY2FsV29ya2VyKHZvaWQpOwogCitleHRlcm4g Ym9vbCBjaGVja19zeW5jaHJvbml6ZV9zbG90X25hbWVzKGNoYXIgKipuZXd2YWwsIHZvaWQg KipleHRyYSwgR3VjU291cmNlIHNvdXJjZSk7CitleHRlcm4gYm9vbCBjaGVja19zdGFuZGJ5 X3Nsb3RfbmFtZXMoY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291 cmNlKTsKKwogI2VuZGlmCQkJCQkJCS8qIExPR0lDQUxXT1JLRVJfSCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oIGIvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vc2xvdC5oCmluZGV4IDUzZDc3M2NjZmYuLmEyOWU1MTc3MDcgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9zbG90LmgKQEAgLTIxNiw3ICsyMTYsNiBAQCBleHRlcm4gdm9pZCBSZXBsaWNh dGlvblNsb3RzRHJvcERCU2xvdHMoT2lkIGRib2lkKTsKIGV4dGVybiBib29sIEludmFsaWRh dGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoWExvZ1NlZ05vIG9sZGVzdFNlZ25vKTsKIGV4 dGVybiBSZXBsaWNhdGlvblNsb3QgKlNlYXJjaE5hbWVkUmVwbGljYXRpb25TbG90KGNvbnN0 IGNoYXIgKm5hbWUsIGJvb2wgbmVlZF9sb2NrKTsKIGV4dGVybiB2b2lkIFJlcGxpY2F0aW9u U2xvdE5hbWVGb3JUYWJsZXN5bmMoT2lkIHN1Ym9pZCwgT2lkIHJlbGlkLCBjaGFyICpzeW5j c2xvdG5hbWUsIGludCBzenNsb3QpOwotZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25TbG90RHJv cEF0UHViTm9kZShXYWxSZWNlaXZlckNvbm4gKndyY29ubiwgY2hhciAqc2xvdG5hbWUsIGJv b2wgbWlzc2luZ19vayk7CiAKIGV4dGVybiB2b2lkIFN0YXJ0dXBSZXBsaWNhdGlvblNsb3Rz KHZvaWQpOwogZXh0ZXJuIHZvaWQgQ2hlY2tQb2ludFJlcGxpY2F0aW9uU2xvdHModm9pZCk7 CkBAIC0yMjQsNCArMjIzLDcgQEAgZXh0ZXJuIHZvaWQgQ2hlY2tQb2ludFJlcGxpY2F0aW9u U2xvdHModm9pZCk7CiBleHRlcm4gdm9pZCBDaGVja1Nsb3RSZXF1aXJlbWVudHModm9pZCk7 CiBleHRlcm4gdm9pZCBDaGVja1Nsb3RQZXJtaXNzaW9ucyh2b2lkKTsKIAorZXh0ZXJuIFhM b2dSZWNQdHIgcGdfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90X2FkdmFuY2UoWExvZ1JlY1B0 ciBtb3ZldG8pOworCisKICNlbmRpZgkJCQkJCQkvKiBTTE9UX0ggKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmggYi9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oCmluZGV4IDBiNjA3ZWQ3NzcuLmRiZWI0NDdlN2Eg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKKysr IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaApAQCAtMTgsNiArMTgs NyBAQAogI2luY2x1ZGUgInBndGltZS5oIgogI2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgog I2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIgorI2luY2x1ZGUgInJlcGxp Y2F0aW9uL3Nsb3QuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxzZW5kZXIuaCIKICNp bmNsdWRlICJzdG9yYWdlL2NvbmRpdGlvbl92YXJpYWJsZS5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvbGF0Y2guaCIKQEAgLTE4Nyw2ICsxODgsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QKIAl9CQkJ cHJvdG87CiB9IFdhbFJjdlN0cmVhbU9wdGlvbnM7CiAKKy8qCisgKiBTbG90IGluZm9ybWF0 aW9uIHJlY2VpdmVyIGZyb20gcmVtb3RlLgorICoKKyAqIEN1cnJlbnRseSB0aGlzIGlzIHNh bWUgYXMgUmVwbGljYXRpb25TbG90UGVyc2lzdGVudERhdGEKKyAqLworI2RlZmluZSBXYWxS ZWN2UmVwbGljYXRpb25TbG90RGF0YSBSZXBsaWNhdGlvblNsb3RQZXJzaXN0ZW50RGF0YQor CiBzdHJ1Y3QgV2FsUmVjZWl2ZXJDb25uOwogdHlwZWRlZiBzdHJ1Y3QgV2FsUmVjZWl2ZXJD b25uIFdhbFJlY2VpdmVyQ29ubjsKIApAQCAtMjc0LDYgKzI4MiwxMSBAQCB0eXBlZGVmIHZv aWQgKCp3YWxyY3ZfZ2V0X3NlbmRlcmluZm9fZm4pIChXYWxSZWNlaXZlckNvbm4gKmNvbm4s CiB0eXBlZGVmIGNoYXIgKigqd2FscmN2X2lkZW50aWZ5X3N5c3RlbV9mbikgKFdhbFJlY2Vp dmVyQ29ubiAqY29ubiwKIAkJCQkJCQkJCQkJVGltZUxpbmVJRCAqcHJpbWFyeV90bGkpOwog CisvKgorICogVE9ETworICovCit0eXBlZGVmIExpc3QgKigqd2FscmN2X2xpc3Rfc2xvdHNf Zm4pIChXYWxSZWNlaXZlckNvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnNsb3RzKTsKKwogLyoK ICAqIHdhbHJjdl9zZXJ2ZXJfdmVyc2lvbl9mbgogICoKQEAgLTM4Nyw2ICs0MDAsNyBAQCB0 eXBlZGVmIHN0cnVjdCBXYWxSZWNlaXZlckZ1bmN0aW9uc1R5cGUKIAl3YWxyY3ZfZ2V0X2Nv bm5pbmZvX2ZuIHdhbHJjdl9nZXRfY29ubmluZm87CiAJd2FscmN2X2dldF9zZW5kZXJpbmZv X2ZuIHdhbHJjdl9nZXRfc2VuZGVyaW5mbzsKIAl3YWxyY3ZfaWRlbnRpZnlfc3lzdGVtX2Zu IHdhbHJjdl9pZGVudGlmeV9zeXN0ZW07CisJd2FscmN2X2xpc3Rfc2xvdHNfZm4gd2FscmN2 X2xpc3Rfc2xvdHM7CiAJd2FscmN2X3NlcnZlcl92ZXJzaW9uX2ZuIHdhbHJjdl9zZXJ2ZXJf dmVyc2lvbjsKIAl3YWxyY3ZfcmVhZHRpbWVsaW5laGlzdG9yeWZpbGVfZm4gd2FscmN2X3Jl YWR0aW1lbGluZWhpc3RvcnlmaWxlOwogCXdhbHJjdl9zdGFydHN0cmVhbWluZ19mbiB3YWxy Y3Zfc3RhcnRzdHJlYW1pbmc7CkBAIC00MTEsNiArNDI1LDggQEAgZXh0ZXJuIFBHRExMSU1Q T1JUIFdhbFJlY2VpdmVyRnVuY3Rpb25zVHlwZSAqV2FsUmVjZWl2ZXJGdW5jdGlvbnM7CiAJ V2FsUmVjZWl2ZXJGdW5jdGlvbnMtPndhbHJjdl9nZXRfc2VuZGVyaW5mbyhjb25uLCBzZW5k ZXJfaG9zdCwgc2VuZGVyX3BvcnQpCiAjZGVmaW5lIHdhbHJjdl9pZGVudGlmeV9zeXN0ZW0o Y29ubiwgcHJpbWFyeV90bGkpIFwKIAlXYWxSZWNlaXZlckZ1bmN0aW9ucy0+d2FscmN2X2lk ZW50aWZ5X3N5c3RlbShjb25uLCBwcmltYXJ5X3RsaSkKKyNkZWZpbmUgd2FscmN2X2xpc3Rf c2xvdHMoY29ubiwgc2xvdHMpIFwKKwlXYWxSZWNlaXZlckZ1bmN0aW9ucy0+d2FscmN2X2xp c3Rfc2xvdHMoY29ubiwgc2xvdHMpCiAjZGVmaW5lIHdhbHJjdl9zZXJ2ZXJfdmVyc2lvbihj b25uKSBcCiAJV2FsUmVjZWl2ZXJGdW5jdGlvbnMtPndhbHJjdl9zZXJ2ZXJfdmVyc2lvbihj b25uKQogI2RlZmluZSB3YWxyY3ZfcmVhZHRpbWVsaW5laGlzdG9yeWZpbGUoY29ubiwgdGxp LCBmaWxlbmFtZSwgY29udGVudCwgc2l6ZSkgXApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi93b3JrZXJfaW50ZXJuYWwuaAppbmRleCA5ZDI5ODQ5ZDgwLi41ZGU3ZjgwZTc5IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaAorKysg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaApAQCAtNTgsNyAr NTgsNyBAQCB0eXBlZGVmIHN0cnVjdCBMb2dpY2FsUmVwV29ya2VyCiAJICogZXhpdHMuICBV bmRlciB0aGlzLCBzZXBhcmF0ZSBidWZmaWxlcyB3b3VsZCBiZSBjcmVhdGVkIGZvciBlYWNo CiAJICogdHJhbnNhY3Rpb24gd2hpY2ggd2lsbCBiZSBkZWxldGVkIGFmdGVyIHRoZSB0cmFu c2FjdGlvbiBpcyBmaW5pc2hlZC4KIAkgKi8KLQlGaWxlU2V0ICAgICpzdHJlYW1fZmlsZXNl dDsKKwlzdHJ1Y3QgRmlsZVNldCAqc3RyZWFtX2ZpbGVzZXQ7CiAKIAkvKiBTdGF0cy4gKi8K IAlYTG9nUmVjUHRyCWxhc3RfbHNuOwpAQCAtODEsMTMgKzgxLDEzIEBAIGV4dGVybiBMb2dp Y2FsUmVwV29ya2VyICpNeUxvZ2ljYWxSZXBXb3JrZXI7CiBleHRlcm4gYm9vbCBpbl9yZW1v dGVfdHJhbnNhY3Rpb247CiAKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX2F0dGFj aChpbnQgc2xvdCk7Ci1leHRlcm4gTG9naWNhbFJlcFdvcmtlciAqbG9naWNhbHJlcF93b3Jr ZXJfZmluZChPaWQgc3ViaWQsIE9pZCByZWxpZCwKK2V4dGVybiBMb2dpY2FsUmVwV29ya2Vy ICpsb2dpY2FscmVwX3dvcmtlcl9maW5kKE9pZCBkYmlkLCBPaWQgc3ViaWQsIE9pZCByZWxp ZCwKIAkJCQkJCQkJCQkJCWJvb2wgb25seV9ydW5uaW5nKTsKIGV4dGVybiBMaXN0ICpsb2dp Y2FscmVwX3dvcmtlcnNfZmluZChPaWQgc3ViaWQsIGJvb2wgb25seV9ydW5uaW5nKTsKIGV4 dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChPaWQgZGJpZCwgT2lkIHN1Ymlk LCBjb25zdCBjaGFyICpzdWJuYW1lLAogCQkJCQkJCQkJIE9pZCB1c2VyaWQsIE9pZCByZWxp ZCk7Ci1leHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lk IHJlbGlkKTsKLWV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cChPaWQgc3Vi aWQsIE9pZCByZWxpZCk7CitleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9p ZCBkYmlkLCBPaWQgc3ViaWQsIE9pZCByZWxpZCk7CitleHRlcm4gdm9pZCBsb2dpY2FscmVw X3dvcmtlcl93YWtldXAoT2lkIGRiaWQsIE9pZCBzdWJpZCwgT2lkIHJlbGlkKTsKIGV4dGVy biB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cF9wdHIoTG9naWNhbFJlcFdvcmtlciAq d29ya2VyKTsKIAogZXh0ZXJuIGludAlsb2dpY2FscmVwX3N5bmNfd29ya2VyX2NvdW50KE9p ZCBzdWJpZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50Lmgg Yi9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKaW5kZXggODc4NWE4ZTEyYy4uMzI3 NGVhZGU1MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaApAQCAtNDIsNiArNDIsNyBAQCB0 eXBlZGVmIGVudW0KIAlXQUlUX0VWRU5UX0NIRUNLUE9JTlRFUl9NQUlOLAogCVdBSVRfRVZF TlRfTE9HSUNBTF9BUFBMWV9NQUlOLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9MQVVOQ0hFUl9N QUlOLAorCVdBSVRfRVZFTlRfUkVQTF9TTE9UX1NZTkNfTUFJTiwKIAlXQUlUX0VWRU5UX1BH U1RBVF9NQUlOLAogCVdBSVRfRVZFTlRfUkVDT1ZFUllfV0FMX1NUUkVBTSwKIAlXQUlUX0VW RU5UX1NZU0xPR0dFUl9NQUlOLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8w MzBfc2xvdF9zeW5jLnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMzBfc2xvdF9zeW5jLnBs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmM4N2U3ZGMwMTYKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAzMF9zbG90X3N5bmMucGwK QEAgLTAsMCArMSw1OCBAQAorCisjIENvcHlyaWdodCAoYykgMjAyMSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsK K3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6 OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMjsKKworbXkgJG5vZGVfcHJpbWFy eSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHJpbWFyeScpOworJG5vZGVf cHJpbWFyeS0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9w cmltYXJ5LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgInN0YW5kYnlfc2xvdF9u YW1lcyA9ICdwc2xvdDEnIik7Ciskbm9kZV9wcmltYXJ5LT5zdGFydDsKKyRub2RlX3ByaW1h cnktPnBzcWwoJ3Bvc3RncmVzJywgcXtTRUxFQ1QgcGdfY3JlYXRlX3BoeXNpY2FsX3JlcGxp Y2F0aW9uX3Nsb3QoJ3BzbG90MScpO30pOworCiskbm9kZV9wcmltYXJ5LT5iYWNrdXAoJ2Jh Y2t1cCcpOworCitteSAkbm9kZV9waHlzX3N0YW5kYnkgPSBQb3N0Z3JlU1FMOjpUZXN0OjpD bHVzdGVyLT5uZXcoJ3BoeXNfc3RhbmRieScpOworJG5vZGVfcGh5c19zdGFuZGJ5LT5pbml0 X2Zyb21fYmFja3VwKCRub2RlX3ByaW1hcnksICdiYWNrdXAnLCBoYXNfc3RyZWFtaW5nID0+ IDEpOworJG5vZGVfcGh5c19zdGFuZGJ5LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25m JywgInN5bmNocm9uaXplX3Nsb3RfbmFtZXMgPSAnKiciKTsKKyRub2RlX3BoeXNfc3RhbmRi eS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJwcmltYXJ5X3Nsb3RfbmFtZSA9 ICdwc2xvdDEnIik7Ciskbm9kZV9waHlzX3N0YW5kYnktPnN0YXJ0OworCiskbm9kZV9wcmlt YXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0MSAoYSBpbnQgUFJJ TUFSWSBLRVkpIik7Ciskbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHQxIFZBTFVFUyAoMSksICgyKSwgKDMpIik7CisKK215ICRub2RlX3N1YnNj cmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNjcmliZXInKTsK KyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcp OworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHQxIChhIGludCBQUklNQVJZIEtFWSki KTsKKworJG5vZGVfcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgUFVC TElDQVRJT04gcHViMSBGT1IgQUxMIFRBQkxFUyIpOworJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gc3ViMSBDT05ORUNU SU9OICciIC4gKCRub2RlX3ByaW1hcnktPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcycp IC4gIicgUFVCTElDQVRJT04gcHViMSIpOworCisjIFdhaXQgZm9yIGluaXRpYWwgc3luYyBv ZiBhbGwgc3Vic2NyaXB0aW9ucworbXkgJHN5bmNlZF9xdWVyeSA9CisgICJTRUxFQ1QgY291 bnQoMSkgPSAwIEZST00gcGdfc3Vic2NyaXB0aW9uX3JlbCBXSEVSRSBzcnN1YnN0YXRlIE5P VCBJTiAoJ3InLCAncycpOyI7Ciskbm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGls KCdwb3N0Z3JlcycsICRzeW5jZWRfcXVlcnkpCisgIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxl IHdhaXRpbmcgZm9yIHN1YnNjcmliZXIgdG8gc3luY2hyb25pemUgZGF0YSI7CisKK215ICRy ZXN1bHQgPSAkbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNU IHNsb3RfbmFtZSwgcGx1Z2luLCBkYXRhYmFzZSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3Rz IFdIRVJFIHNsb3RfdHlwZSA9ICdsb2dpY2FsJyIpOworCitpcygkcmVzdWx0LCBxcShzdWIx fHBnb3V0cHV0fHBvc3RncmVzKSwgJ2xvZ2ljYWwgc2xvdCBvbiBwcmltYXJ5Jyk7CisKKyMg RklYTUU6IHN0YW5kYnkgbmVlZHMgcmVzdGFydCB0byBwaWNrIHVwIG5ldyBzbG90cworJG5v ZGVfcGh5c19zdGFuZGJ5LT5yZXN0YXJ0Oworc2xlZXAgMzsKKworJHJlc3VsdCA9ICRub2Rl X3BoeXNfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBzbG90X25h bWUsIHBsdWdpbiwgZGF0YWJhc2UgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90cyIpOworCitp cygkcmVzdWx0LCBxcShzdWIxfHBnb3V0cHV0fHBvc3RncmVzKSwgJ2xvZ2ljYWwgc2xvdCBv biBzdGFuZGJ5Jyk7CisKKyRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdDEgVkFMVUVTICg0KSwgKDUpLCAoNikiKTsKKyRub2RlX3ByaW1hcnkt PndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKLS0gCjIuMzQuMQoK --------------DH5tQBqAY9Autru1bMzXa8pq--