Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sVyVk-00CbVc-B2 for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Jul 2024 19:15:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sVyVi-0062K2-Ey for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Jul 2024 19:15:50 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sVyVh-0062Ju-Le for pgsql-hackers@lists.postgresql.org; Mon, 22 Jul 2024 19:15:50 +0000 Received: from meesny.iki.fi ([2001:67c:2b0:1c1::201]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sVyVc-000ucu-5t for pgsql-hackers@postgresql.org; Mon, 22 Jul 2024 19:15:48 +0000 Received: from [192.168.1.140] (221-243-190-90.dyn.estpak.ee [90.190.243.221]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by meesny.iki.fi (Postfix) with ESMTPSA id 4WSVNp4PFQzyQL; Mon, 22 Jul 2024 22:15:38 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1721675739; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=g5av3zmNr47OZ+ww60QOSTCFVkxZG7cO8OKnwbHjjt4=; b=eBQbu+1eJWVvUDetLgpCiYHxNUI309mmLlP/66kk1dlijzemQIhocCF4GA0+76UkJOWTRn NK/JC5Ftamd8IgsHrTVFd0zyy/XRuRrBKTIwGyv0yh/wHIr0ENs03STbOB0js4QQrTHbpy vCSozY9V6o2OarRLRVlO1O3037Uy2rQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1721675739; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=g5av3zmNr47OZ+ww60QOSTCFVkxZG7cO8OKnwbHjjt4=; b=IV87TAFgfI+gFGR5uQLb/ehxxFMa6by46Adgv465yCDDrcnnMQQOchXFuErvR9z866puao TjIXLm4Tl7LezGQmhjEpl2/SnYaMsCwYFVHYorN3qklp16+aC4jItbNBX6lgLp9z+awKVF ZnM/vdKFKtZX4EZqUx4WtvwSRF78EtM= ARC-Seal: i=1; s=meesny; d=iki.fi; t=1721675739; a=rsa-sha256; cv=none; b=HPViXBWssbCxKllY9g3ijWzxhILNSLYihe3sBWwLgzI6+95jpyDmSTKa+bxXOq7sI+obzW l8tkCOUK6D+y/Ys6KEpk+UXKi7mqUJEmF9AhN7lBQ0UGrxQyNkHr/37eepgSAGin0arAdJ DOmTx7GpDZFKIJhoGmUC3Qq51eJVH94= ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------o37Oqr181xkA1D2P77ggyQYE" Message-ID: <7c2090cd-a72a-4e34-afaa-6dd2ef31440e@iki.fi> Date: Mon, 22 Jul 2024 22:15:37 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Latches vs lwlock contention From: Heikki Linnakangas To: Thomas Munro , pgsql-hackers Cc: Yura Sokolov , Andres Freund References: <53c844e1-a21a-e481-cca5-2184c8aa47b9@iki.fi> Content-Language: en-US In-Reply-To: <53c844e1-a21a-e481-cca5-2184c8aa47b9@iki.fi> 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. --------------o37Oqr181xkA1D2P77ggyQYE Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 28/09/2023 12:58, Heikki Linnakangas wrote: > On 28/10/2022 06:56, Thomas Munro wrote: >> One example is heavyweight lock wakeups. If you run BEGIN; LOCK TABLE >> t; ... and then N other sessions wait in SELECT * FROM t;, and then >> you run ... COMMIT;, you'll see the first session wake all the others >> while it still holds the partition lock itself. They'll all wake up >> and begin to re-acquire the same partition lock in exclusive mode, >> immediately go back to sleep on*that* wait list, and then wake each >> other up one at a time in a chain. We could avoid the first >> double-bounce by not setting the latches until after we've released >> the partition lock. We could avoid the rest of them by not >> re-acquiring the partition lock at all, which ... if I'm reading right >> ... shouldn't actually be necessary in modern PostgreSQL? Or if there >> is another reason to re-acquire then maybe the comment should be >> updated. > > ISTM that the change to not re-aqcuire the lock in ProcSleep is > independent from the other changes. Let's split that off to a separate > patch. I spent some time on splitting that off. I had to start from scratch, because commit 2346df6fc373df9c5ab944eebecf7d3036d727de conflicted heavily with your patch. I split ProcSleep() into two functions: JoinWaitQueue does the first part of ProcSleep(), adding the process to the wait queue and checking for the dontWait and early deadlock cases. What remains in ProcSleep() does just the sleeping part. JoinWaitQueue is called with the partition lock held, and ProcSleep() is called without it. This way, the partition lock is acquired and released in the same function (LockAcquireExtended), avoiding awkward "lock is held on enter, but might be released on exit depending on the outcome" logic. This is actually a set of 8 patches. The first 7 are independent tiny fixes and refactorings in these functions. See individual commit messages. > I agree it should be safe. Acquiring a lock just to hold off interrupts > is overkill anwyway, HOLD_INTERRUPTS() would be enough. > LockErrorCleanup() uses HOLD_INTERRUPTS() already. > > There are no CHECK_FOR_INTERRUPTS() in GrantAwaitedLock(), so cancel/die > interrupts can't happen here. But could we add HOLD_INTERRUPTS(), just > pro forma, to document the assumption? It's a little awkward: you really > should hold interrupts until the caller has done "awaitedLock = NULL;". > So it's not quite enough to add a pair of HOLD_ and RESUME_INTERRUPTS() > at the end of ProcSleep(). You'd need to do the HOLD_INTERRUPTS() in > ProcSleep() and require the caller to do RESUME_INTERRUPTS(). In a > sense, ProcSleep downgrades the lock on the partition to just holding > off interrupts. I didn't use HOLD/RESUME_INTERRUPTS() after all. Like you did, I'm just relying on the fact that there are no CHECK_FOR_INTERRUPTS() calls in places where they might cause trouble. Those sections are short, so I think it's fine. -- Heikki Linnakangas Neon (https://neon.tech) --------------o37Oqr181xkA1D2P77ggyQYE Content-Type: text/x-patch; charset=UTF-8; name="0001-Remove-LOCK_PRINT-call-that-could-point-to-garbage.patch" Content-Disposition: attachment; filename*0="0001-Remove-LOCK_PRINT-call-that-could-point-to-garbage.patc"; filename*1="h" Content-Transfer-Encoding: base64 RnJvbSA5ODkwNjllYWNhNzg4Y2ZkNjEwMTBlNWY4OGMwZmViMzU5YjQwMTgwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMjIgSnVsIDIwMjQgMDE6MjE6MjAgKzAzMDAK U3ViamVjdDogW1BBVENIIDEvOF0gUmVtb3ZlIExPQ0tfUFJJTlQoKSBjYWxsIHRoYXQgY291 bGQgcG9pbnQgdG8gZ2FyYmFnZQoKSWYgYSBkZWFkbG9jayBpcyBkZXRlY3RlZCBpbiBQcm9j U2xlZXAsIGl0IHJlbW92ZXMgdGhlIHByb2Nlc3MgZnJvbQp0aGUgd2FpdCBxdWV1ZSBhbmQg dGhlIHNoYXJlZCBMT0NLIGFuZCBQUk9DTE9DSyBlbnRyaWVzLiBBcyBzb29uIGFzIGl0CmRv ZXMgdGhhdCwgdGhlIG90aGVyIHByb2Nlc3MgaG9sZGluZyB0aGUgbG9jayBtaWdodCByZWxl YXNlIGl0LCBhbmQKcmVtb3ZlIHRoZSBMT0NLIGVudHJ5IGFsdG9nZXRoZXIuIFNvIG9uIHJl dHVybiBmcm9tIFByb2NTbGVlcCgpLCBpdCdzCnBvc3NpYmxlIHRoYXQgdGhlIExPQ0sgZW50 cnkgaXMgbm8gbG9uZ2VyIHZhbGlkLgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9s b2NrLmMgfCAyIC0tCiAxIGZpbGUgY2hhbmdlZCwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9sbWdyL2xvY2suYwppbmRleCAwNDAwYTUwNzc3OS4uMDViM2EyNDNiNWMgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9sbWdyL2xvY2suYwpAQCAtMTg2MSw4ICsxODYxLDYgQEAgV2FpdE9uTG9j ayhMT0NBTExPQ0sgKmxvY2FsbG9jaywgUmVzb3VyY2VPd25lciBvd25lciwgYm9vbCBkb250 V2FpdCkKIAkJCSAqIG5vdy4KIAkJCSAqLwogCQkJYXdhaXRlZExvY2sgPSBOVUxMOwotCQkJ TE9DS19QUklOVCgiV2FpdE9uTG9jazogYWJvcnRpbmcgb24gbG9jayIsCi0JCQkJCSAgIGxv Y2FsbG9jay0+bG9jaywgbG9jYWxsb2NrLT50YWcubW9kZSk7CiAJCQlMV0xvY2tSZWxlYXNl KExvY2tIYXNoUGFydGl0aW9uTG9jayhsb2NhbGxvY2stPmhhc2hjb2RlKSk7CiAKIAkJCS8q Ci0tIAoyLjM5LjIKCg== --------------o37Oqr181xkA1D2P77ggyQYE Content-Type: text/x-patch; charset=UTF-8; name="0002-Fix-comment-in-LockReleaseAll-on-when-locallock-nLoc.patch" Content-Disposition: attachment; filename*0="0002-Fix-comment-in-LockReleaseAll-on-when-locallock-nLoc.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyMmJjN2EzYjc4MjZkZmJiOTkxYjVkNjNhZDFmYmE1MmJiMjk3OTIzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMjIgSnVsIDIwMjQgMDA6NDM6MTMgKzAzMDAK U3ViamVjdDogW1BBVENIIDIvOF0gRml4IGNvbW1lbnQgaW4gTG9ja1JlbGVhc2VBbGwoKSBv biB3aGVuIGxvY2FsbG9jay0+bkxvY2sKIGNhbiBiZSB6ZXJvCgpXZSByZWFjaCB0aGlzIGNh c2UgYWxzbyBlLmcuIHdoZW4gYSBkZWFkbG9jayBpcyBkZXRlY3RlZCwgbm90IG9ubHkKd2hl biB3ZSBydW4gb3V0IG9mIG1lbW9yeS4KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3Iv bG9jay5jIHwgNSArKy0tLQogMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMyBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9j ay5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYwppbmRleCAwNWIzYTI0M2I1 Yy4uN2ViNWMyZTUyMjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9s b2NrLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYwpAQCAtMjIwOCw5 ICsyMjA4LDggQEAgTG9ja1JlbGVhc2VBbGwoTE9DS01FVEhPRElEIGxvY2ttZXRob2RpZCwg Ym9vbCBhbGxMb2NrcykKIAl3aGlsZSAoKGxvY2FsbG9jayA9IChMT0NBTExPQ0sgKikgaGFz aF9zZXFfc2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxMKQogCXsKIAkJLyoKLQkJICogSWYgdGhl IExPQ0FMTE9DSyBlbnRyeSBpcyB1bnVzZWQsIHdlIG11c3QndmUgcnVuIG91dCBvZiBzaGFy ZWQKLQkJICogbWVtb3J5IHdoaWxlIHRyeWluZyB0byBzZXQgdXAgdGhpcyBsb2NrLiAgSnVz dCBmb3JnZXQgdGhlIGxvY2FsCi0JCSAqIGVudHJ5LgorCQkgKiBJZiB0aGUgTE9DQUxMT0NL IGVudHJ5IGlzIHVudXNlZCwgc29tZXRoaW5nIG11c3QndmUgZ29uZSB3cm9uZworCQkgKiB3 aGlsZSB0cnlpbmcgdG8gYWNxdWlyZSB0aGlzIGxvY2suICBKdXN0IGZvcmdldCB0aGUgbG9j YWwgZW50cnkuCiAJCSAqLwogCQlpZiAobG9jYWxsb2NrLT5uTG9ja3MgPT0gMCkKIAkJewot LSAKMi4zOS4yCgo= --------------o37Oqr181xkA1D2P77ggyQYE Content-Type: text/x-patch; charset=UTF-8; name="0003-Set-MyProc-heldLocks-in-ProcSleep.patch" Content-Disposition: attachment; filename="0003-Set-MyProc-heldLocks-in-ProcSleep.patch" Content-Transfer-Encoding: base64 RnJvbSBhZThkMTJiYWIwNWVkZTQ4MTY2ZDE1MzEyYjIyMmUwNDZhYWUxNGEwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMjIgSnVsIDIwMjQgMTM6MjM6NTkgKzAzMDAK U3ViamVjdDogW1BBVENIIDMvOF0gU2V0IE15UHJvYy0+aGVsZExvY2tzIGluIFByb2NTbGVl cAoKUHJldmlvdXNseSwgdGhlIFByb2NTbGVlcCgpIGNhbGxlciB3YXMgcmVzcG5zaWJsZSBm b3Igc2V0dGluZyBpdCwgYW5kCndlIGhhZCBjb21tZW50cyB0byByZW1pbmQgYWJvdXQgdGhh dC4gQnV0IGl0IHNlZW1zIHNpbXBsZXIgdG8gbWFrZQpQcm9jU2xlZXAoKSBpdHNlbGYgcmVz cG9uc2libGUgZm9yIGl0LiBQcm9jU2xlZXAoKSBhbHJlYWR5IHNldCB0aGUKb3RoZXIgaW5m byBhYm91dCB0aGUgbG9jayBpdHMgd2FpdGluZyBmb3IgKHdhaXRMb2NrLCB3YWl0UHJvY0xv Y2sgYW5kCndhaXRMb2NrTW9kZSksIHNvIHNlZW1zIG5hdHVyYWwgZm9yIGl0IHRvIHNldCBo ZWxkTG9ja3MgdG9vLgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMgfCAg OCAtLS0tLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyB8IDEwICsrKysr Ky0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYwppbmRleCA3ZWI1YzJlNTIyNi4uNDg5MDcz MjU5YjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYwpAQCAtMTA0NywxMSArMTA0Nyw2 IEBAIExvY2tBY3F1aXJlRXh0ZW5kZWQoY29uc3QgTE9DS1RBRyAqbG9ja3RhZywKIAl9CiAJ ZWxzZQogCXsKLQkJLyoKLQkJICogU2V0IGJpdG1hc2sgb2YgbG9ja3MgdGhpcyBwcm9jZXNz IGFscmVhZHkgaG9sZHMgb24gdGhpcyBvYmplY3QuCi0JCSAqLwotCQlNeVByb2MtPmhlbGRM b2NrcyA9IHByb2Nsb2NrLT5ob2xkTWFzazsKLQogCQkvKgogCQkgKiBTbGVlcCB0aWxsIHNv bWVvbmUgd2FrZXMgbWUgdXAuIFdlIGRvIHRoaXMgZXZlbiBpbiB0aGUgZG9udFdhaXQKIAkJ ICogY2FzZSwgYmVjYXVzZSB3aGlsZSB0cnlpbmcgdG8gZ28gdG8gc2xlZXAsIHdlIG1heSBk aXNjb3ZlciB0aGF0IHdlCkBAIC0xODA4LDkgKzE4MDMsNiBAQCBNYXJrTG9ja0NsZWFyKExP Q0FMTE9DSyAqbG9jYWxsb2NrKQogLyoKICAqIFdhaXRPbkxvY2sgLS0gd2FpdCB0byBhY3F1 aXJlIGEgbG9jawogICoKLSAqIENhbGxlciBtdXN0IGhhdmUgc2V0IE15UHJvYy0+aGVsZExv Y2tzIHRvIHJlZmxlY3QgbG9ja3MgYWxyZWFkeSBoZWxkCi0gKiBvbiB0aGUgbG9ja2FibGUg b2JqZWN0IGJ5IHRoaXMgcHJvY2Vzcy4KLSAqCiAgKiBUaGUgYXBwcm9wcmlhdGUgcGFydGl0 aW9uIGxvY2sgbXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBzdGlsbCBiZQogICog aGVsZCBhdCBleGl0LgogICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwppbmRleCAxYjIz ZWZiMjZmMy4uNWMxZDI3OTJjM2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwpAQCAt MTA0MCw5ICsxMDQwLDYgQEAgQXV4aWxpYXJ5UGlkR2V0UHJvYyhpbnQgcGlkKQogLyoKICAq IFByb2NTbGVlcCAtLSBwdXQgYSBwcm9jZXNzIHRvIHNsZWVwIG9uIHRoZSBzcGVjaWZpZWQg bG9jawogICoKLSAqIENhbGxlciBtdXN0IGhhdmUgc2V0IE15UHJvYy0+aGVsZExvY2tzIHRv IHJlZmxlY3QgbG9ja3MgYWxyZWFkeSBoZWxkCi0gKiBvbiB0aGUgbG9ja2FibGUgb2JqZWN0 IGJ5IHRoaXMgcHJvY2VzcyAodW5kZXIgYWxsIFhJRHMpLgotICoKICAqIEl0J3Mgbm90IGFj dHVhbGx5IGd1YXJhbnRlZWQgdGhhdCB3ZSBuZWVkIHRvIHdhaXQgd2hlbiB0aGlzIGZ1bmN0 aW9uIGlzCiAgKiBjYWxsZWQsIGJlY2F1c2UgaXQgY291bGQgYmUgdGhhdCB3aGVuIHdlIHRy eSB0byBmaW5kIGEgcG9zaXRpb24gYXQgd2hpY2gKICAqIHRvIGluc2VydCBvdXJzZWxmIGlu dG8gdGhlIHdhaXQgcXVldWUsIHdlIGRpc2NvdmVyIHRoYXQgd2UgbXVzdCBiZSBpbnNlcnRl ZApAQCAtMTA3Miw3ICsxMDY5LDcgQEAgUHJvY1NsZWVwKExPQ0FMTE9DSyAqbG9jYWxsb2Nr LCBMb2NrTWV0aG9kIGxvY2tNZXRob2RUYWJsZSwgYm9vbCBkb250V2FpdCkKIAlMV0xvY2sJ ICAgKnBhcnRpdGlvbkxvY2sgPSBMb2NrSGFzaFBhcnRpdGlvbkxvY2soaGFzaGNvZGUpOwog CWRjbGlzdF9oZWFkICp3YWl0UXVldWUgPSAmbG9jay0+d2FpdFByb2NzOwogCVBHUFJPQwkg ICAqaW5zZXJ0X2JlZm9yZSA9IE5VTEw7Ci0JTE9DS01BU0sJbXlIZWxkTG9ja3MgPSBNeVBy b2MtPmhlbGRMb2NrczsKKwlMT0NLTUFTSwlteUhlbGRMb2NrczsKIAlUaW1lc3RhbXBUeiBz dGFuZGJ5V2FpdFN0YXJ0ID0gMDsKIAlib29sCQllYXJseV9kZWFkbG9jayA9IGZhbHNlOwog CWJvb2wJCWFsbG93X2F1dG92YWN1dW1fY2FuY2VsID0gdHJ1ZTsKQEAgLTEwODAsNiArMTA3 NywxMSBAQCBQcm9jU2xlZXAoTE9DQUxMT0NLICpsb2NhbGxvY2ssIExvY2tNZXRob2QgbG9j a01ldGhvZFRhYmxlLCBib29sIGRvbnRXYWl0KQogCVByb2NXYWl0U3RhdHVzIG15V2FpdFN0 YXR1czsKIAlQR1BST0MJICAgKmxlYWRlciA9IE15UHJvYy0+bG9ja0dyb3VwTGVhZGVyOwog CisJLyoKKwkgKiBTZXQgYml0bWFzayBvZiBsb2NrcyB0aGlzIHByb2Nlc3MgYWxyZWFkeSBo b2xkcyBvbiB0aGlzIG9iamVjdC4KKwkgKi8KKwlteUhlbGRMb2NrcyA9IE15UHJvYy0+aGVs ZExvY2tzID0gcHJvY2xvY2stPmhvbGRNYXNrOworCiAJLyoKIAkgKiBJZiBncm91cCBsb2Nr aW5nIGlzIGluIHVzZSwgbG9ja3MgaGVsZCBieSBtZW1iZXJzIG9mIG15IGxvY2tpbmcgZ3Jv dXAKIAkgKiBuZWVkIHRvIGJlIGluY2x1ZGVkIGluIG15SGVsZExvY2tzLiAgVGhpcyBpcyBu b3QgcmVxdWlyZWQgZm9yIHJlbGF0aW9uCi0tIAoyLjM5LjIKCg== --------------o37Oqr181xkA1D2P77ggyQYE Content-Type: text/x-patch; charset=UTF-8; name="0004-Move-TRACE-calls-into-WaitOnLock.patch" Content-Disposition: attachment; filename="0004-Move-TRACE-calls-into-WaitOnLock.patch" Content-Transfer-Encoding: base64 RnJvbSAwNWI4YjRhNzIyMjc5NTM3N2YwYTk2N2I2NDA4ZTYxYWE2YjhjNjJmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMjIgSnVsIDIwMjQgMTM6MTI6NTcgKzAzMDAK U3ViamVjdDogW1BBVENIIDQvOF0gTW92ZSBUUkFDRSBjYWxscyBpbnRvIFdhaXRPbkxvY2so KQoKTG9ja0FjcXVpcmUgaXMgYSBsb25nIGFuZCBjb21wbGV4IGZ1bmN0aW9uLiBQdXNoaW5n IG1vcmUgc3R1ZmYgdG8gaXRzCnN1YnJvdXRpbmVzIG1ha2VzIGl0IGEgbGl0dGxlIG1vcmUg bWFuYWdlYWJsZS4KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jIHwgMjkg KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxNCBpbnNl cnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvbG9jay5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYwpp bmRleCA0ODkwNzMyNTliNi4uYmFjOTUwZWZkZjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9sb2NrLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xv Y2suYwpAQCAtMTA1MiwyMyArMTA1Miw4IEBAIExvY2tBY3F1aXJlRXh0ZW5kZWQoY29uc3Qg TE9DS1RBRyAqbG9ja3RhZywKIAkJICogY2FzZSwgYmVjYXVzZSB3aGlsZSB0cnlpbmcgdG8g Z28gdG8gc2xlZXAsIHdlIG1heSBkaXNjb3ZlciB0aGF0IHdlCiAJCSAqIGNhbiBhY3F1aXJl IHRoZSBsb2NrIGltbWVkaWF0ZWx5IGFmdGVyIGFsbC4KIAkJICovCi0KLQkJVFJBQ0VfUE9T VEdSRVNRTF9MT0NLX1dBSVRfU1RBUlQobG9ja3RhZy0+bG9ja3RhZ19maWVsZDEsCi0JCQkJ CQkJCQkJIGxvY2t0YWctPmxvY2t0YWdfZmllbGQyLAotCQkJCQkJCQkJCSBsb2NrdGFnLT5s b2NrdGFnX2ZpZWxkMywKLQkJCQkJCQkJCQkgbG9ja3RhZy0+bG9ja3RhZ19maWVsZDQsCi0J CQkJCQkJCQkJIGxvY2t0YWctPmxvY2t0YWdfdHlwZSwKLQkJCQkJCQkJCQkgbG9ja21vZGUp OwotCiAJCVdhaXRPbkxvY2sobG9jYWxsb2NrLCBvd25lciwgZG9udFdhaXQpOwogCi0JCVRS QUNFX1BPU1RHUkVTUUxfTE9DS19XQUlUX0RPTkUobG9ja3RhZy0+bG9ja3RhZ19maWVsZDEs Ci0JCQkJCQkJCQkJbG9ja3RhZy0+bG9ja3RhZ19maWVsZDIsCi0JCQkJCQkJCQkJbG9ja3Rh Zy0+bG9ja3RhZ19maWVsZDMsCi0JCQkJCQkJCQkJbG9ja3RhZy0+bG9ja3RhZ19maWVsZDQs Ci0JCQkJCQkJCQkJbG9ja3RhZy0+bG9ja3RhZ190eXBlLAotCQkJCQkJCQkJCWxvY2ttb2Rl KTsKLQogCQkvKgogCQkgKiBOT1RFOiBkbyBub3QgZG8gYW55IG1hdGVyaWFsIGNoYW5nZSBv ZiBzdGF0ZSBiZXR3ZWVuIGhlcmUgYW5kCiAJCSAqIHJldHVybi4gIEFsbCByZXF1aXJlZCBj aGFuZ2VzIGluIGxvY2t0YWJsZSBzdGF0ZSBtdXN0IGhhdmUgYmVlbgpAQCAtMTgxMiw2ICsx Nzk3LDEzIEBAIFdhaXRPbkxvY2soTE9DQUxMT0NLICpsb2NhbGxvY2ssIFJlc291cmNlT3du ZXIgb3duZXIsIGJvb2wgZG9udFdhaXQpCiAJTE9DS01FVEhPRElEIGxvY2ttZXRob2RpZCA9 IExPQ0FMTE9DS19MT0NLTUVUSE9EKCpsb2NhbGxvY2spOwogCUxvY2tNZXRob2QJbG9ja01l dGhvZFRhYmxlID0gTG9ja01ldGhvZHNbbG9ja21ldGhvZGlkXTsKIAorCVRSQUNFX1BPU1RH UkVTUUxfTE9DS19XQUlUX1NUQVJUKGxvY2FsbG9jay0+dGFnLmxvY2subG9ja3RhZ19maWVs ZDEsCisJCQkJCQkJCQkgbG9jYWxsb2NrLT50YWcubG9jay5sb2NrdGFnX2ZpZWxkMiwKKwkJ CQkJCQkJCSBsb2NhbGxvY2stPnRhZy5sb2NrLmxvY2t0YWdfZmllbGQzLAorCQkJCQkJCQkJ IGxvY2FsbG9jay0+dGFnLmxvY2subG9ja3RhZ19maWVsZDQsCisJCQkJCQkJCQkgbG9jYWxs b2NrLT50YWcubG9jay5sb2NrdGFnX3R5cGUsCisJCQkJCQkJCQkgbG9jYWxsb2NrLT50YWcu bW9kZSk7CisKIAlMT0NLX1BSSU5UKCJXYWl0T25Mb2NrOiBzbGVlcGluZyBvbiBsb2NrIiwK IAkJCSAgIGxvY2FsbG9jay0+bG9jaywgbG9jYWxsb2NrLT50YWcubW9kZSk7CiAKQEAgLTE4 ODIsNiArMTg3NCwxMyBAQCBXYWl0T25Mb2NrKExPQ0FMTE9DSyAqbG9jYWxsb2NrLCBSZXNv dXJjZU93bmVyIG93bmVyLCBib29sIGRvbnRXYWl0KQogCiAJTE9DS19QUklOVCgiV2FpdE9u TG9jazogd2FrZXVwIG9uIGxvY2siLAogCQkJICAgbG9jYWxsb2NrLT5sb2NrLCBsb2NhbGxv Y2stPnRhZy5tb2RlKTsKKworCVRSQUNFX1BPU1RHUkVTUUxfTE9DS19XQUlUX0RPTkUobG9j YWxsb2NrLT50YWcubG9jay5sb2NrdGFnX2ZpZWxkMSwKKwkJCQkJCQkJCWxvY2FsbG9jay0+ dGFnLmxvY2subG9ja3RhZ19maWVsZDIsCisJCQkJCQkJCQlsb2NhbGxvY2stPnRhZy5sb2Nr LmxvY2t0YWdfZmllbGQzLAorCQkJCQkJCQkJbG9jYWxsb2NrLT50YWcubG9jay5sb2NrdGFn X2ZpZWxkNCwKKwkJCQkJCQkJCWxvY2FsbG9jay0+dGFnLmxvY2subG9ja3RhZ190eXBlLAor CQkJCQkJCQkJbG9jYWxsb2NrLT50YWcubW9kZSk7CiB9CiAKIC8qCi0tIAoyLjM5LjIKCg== --------------o37Oqr181xkA1D2P77ggyQYE Content-Type: text/x-patch; charset=UTF-8; name="0005-Remove-redundant-lockAwaited-global-variable.patch" Content-Disposition: attachment; filename="0005-Remove-redundant-lockAwaited-global-variable.patch" Content-Transfer-Encoding: base64 RnJvbSA2ZjcwYjFmM2ZhZDk3YTg5NzI1NzA2ZWU5NzRhZDI2NjU0NzFjNmQ2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMjIgSnVsIDIwMjQgMTc6MjM6MzMgKzAzMDAK U3ViamVjdDogW1BBVENIIDUvOF0gUmVtb3ZlIHJlZHVuZGFudCBsb2NrQXdhaXRlZCBnbG9i YWwgdmFyaWFibGUKCldlIGhhZCB0d28gZ2xvYmFsIChzdGF0aWMpIHZhcmlhYmxlcyB0byBo b2xkIHRoZSBMT0NBTExPQ0sgdGhhdCB3ZSBhcmUKY3VycmVudGx5IGFjcXVpcmluZzogYXdh aXRlZExvY2sgaW4gbG9jay5jIGFuZCBsb2NrQXdhaXRlZCBpbgpwcm9jLmMuIFRoZXkgd2Vy ZSBzZXQgYXQgc2xpZ2h0bHkgZGlmZmVyZW50IHRpbWVzLCBidXQgd2hlbiB0aGV5IHdlcmUK Ym90aCBzZXQsIHRoZXkgd2VyZSB0aGUgc2FtZSB0aGluZy4gUmVtb3ZlIHRoZSBsb2NrQXdh aXRlZCB2YXJpYWJsZQphbmQgcmVseSBvbiBhd2FpdGVkTG9jayBldmVyeXdoZXJlLgotLS0K IHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMgfCAgOSArKysrKysrKysKIHNyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgfCAzMCArKysrLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgfCAgMiArLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9sb2NrLmggICAgICB8ICAyICsrCiBzcmMvaW5jbHVkZS9zdG9y YWdlL3Byb2MuaCAgICAgIHwgIDEgLQogNSBmaWxlcyBjaGFuZ2VkLCAxNiBpbnNlcnRpb25z KCspLCAyOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L2xtZ3IvbG9jay5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYwppbmRleCBi YWM5NTBlZmRmMy4uOTAzNTE0NTE2OWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9sb2NrLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYwpA QCAtMTc3MSw2ICsxNzcxLDEyIEBAIEdyYW50QXdhaXRlZExvY2sodm9pZCkKIAlHcmFudExv Y2tMb2NhbChhd2FpdGVkTG9jaywgYXdhaXRlZE93bmVyKTsKIH0KIAorTE9DQUxMT0NLICoK K0dldEF3YWl0ZWRMb2NrKHZvaWQpCit7CisJcmV0dXJuIGF3YWl0ZWRMb2NrOworfQorCiAv KgogICogTWFya0xvY2tDbGVhciAtLSBtYXJrIGFuIGFjcXVpcmVkIGxvY2sgYXMgImNsZWFy IgogICoKQEAgLTE4NjcsNiArMTg3Myw5IEBAIFdhaXRPbkxvY2soTE9DQUxMT0NLICpsb2Nh bGxvY2ssIFJlc291cmNlT3duZXIgb3duZXIsIGJvb2wgZG9udFdhaXQpCiAJfQogCVBHX0VO RF9UUlkoKTsKIAorCS8qCisJICogV2Ugbm8gbG9uZ2VyIHdhbnQgTG9ja0Vycm9yQ2xlYW51 cCB0byBkbyBhbnl0aGluZy4KKwkgKi8KIAlhd2FpdGVkTG9jayA9IE5VTEw7CiAKIAkvKiBy ZXNldCBwcyBkaXNwbGF5IHRvIHJlbW92ZSB0aGUgc3VmZml4ICovCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9s bWdyL3Byb2MuYwppbmRleCA1YzFkMjc5MmMzZC4uN2EyMDdkMDEwNGQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9sbWdyL3Byb2MuYwpAQCAtNzksOSArNzksNiBAQCBQUk9DX0hEUiAgICpQcm9jR2xv YmFsID0gTlVMTDsKIE5PTl9FWEVDX1NUQVRJQyBQR1BST0MgKkF1eGlsaWFyeVByb2NzID0g TlVMTDsKIFBHUFJPQwkgICAqUHJlcGFyZWRYYWN0UHJvY3MgPSBOVUxMOwogCi0vKiBJZiB3 ZSBhcmUgd2FpdGluZyBmb3IgYSBsb2NrLCB0aGlzIHBvaW50cyB0byB0aGUgYXNzb2NpYXRl ZCBMT0NBTExPQ0sgKi8KLXN0YXRpYyBMT0NBTExPQ0sgKmxvY2tBd2FpdGVkID0gTlVMTDsK LQogc3RhdGljIERlYWRMb2NrU3RhdGUgZGVhZGxvY2tfc3RhdGUgPSBEU19OT1RfWUVUX0NI RUNLRUQ7CiAKIC8qIElzIGEgZGVhZGxvY2sgY2hlY2sgcGVuZGluZz8gKi8KQEAgLTcwNiwx OCArNzAzLDYgQEAgSGF2ZU5GcmVlUHJvY3MoaW50IG4sIGludCAqbmZyZWUpCiAJcmV0dXJu ICgqbmZyZWUgPT0gbik7CiB9CiAKLS8qCi0gKiBDaGVjayBpZiB0aGUgY3VycmVudCBwcm9j ZXNzIGlzIGF3YWl0aW5nIGEgbG9jay4KLSAqLwotYm9vbAotSXNXYWl0aW5nRm9yTG9jayh2 b2lkKQotewotCWlmIChsb2NrQXdhaXRlZCA9PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7Ci0K LQlyZXR1cm4gdHJ1ZTsKLX0KLQogLyoKICAqIENhbmNlbCBhbnkgcGVuZGluZyB3YWl0IGZv ciBsb2NrLCB3aGVuIGFib3J0aW5nIGEgdHJhbnNhY3Rpb24sIGFuZCByZXZlcnQKICAqIGFu eSBzdHJvbmcgbG9jayBjb3VudCBhY3F1aXNpdGlvbiBmb3IgYSBsb2NrIGJlaW5nIGFjcXVp cmVkLgpAQCAtNzI5LDYgKzcxNCw3IEBAIElzV2FpdGluZ0ZvckxvY2sodm9pZCkKIHZvaWQK IExvY2tFcnJvckNsZWFudXAodm9pZCkKIHsKKwlMT0NBTExPQ0sgICpsb2NrQXdhaXRlZDsK IAlMV0xvY2sJICAgKnBhcnRpdGlvbkxvY2s7CiAJRGlzYWJsZVRpbWVvdXRQYXJhbXMgdGlt ZW91dHNbMl07CiAKQEAgLTczNyw2ICs3MjMsNyBAQCBMb2NrRXJyb3JDbGVhbnVwKHZvaWQp CiAJQWJvcnRTdHJvbmdMb2NrQWNxdWlyZSgpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB3 ZSB3ZXJlbid0IHdhaXRpbmcgZm9yIGEgbG9jayAqLworCWxvY2tBd2FpdGVkID0gR2V0QXdh aXRlZExvY2soKTsKIAlpZiAobG9ja0F3YWl0ZWQgPT0gTlVMTCkKIAl7CiAJCVJFU1VNRV9J TlRFUlJVUFRTKCk7CkBAIC0xMjEyLDkgKzExOTksNiBAQCBQcm9jU2xlZXAoTE9DQUxMT0NL ICpsb2NhbGxvY2ssIExvY2tNZXRob2QgbG9ja01ldGhvZFRhYmxlLCBib29sIGRvbnRXYWl0 KQogCQlyZXR1cm4gUFJPQ19XQUlUX1NUQVRVU19FUlJPUjsKIAl9CiAKLQkvKiBtYXJrIHRo YXQgd2UgYXJlIHdhaXRpbmcgZm9yIGEgbG9jayAqLwotCWxvY2tBd2FpdGVkID0gbG9jYWxs b2NrOwotCiAJLyoKIAkgKiBSZWxlYXNlIHRoZSBsb2NrIHRhYmxlJ3MgcGFydGl0aW9uIGxv Y2suCiAJICoKQEAgLTE2MzksMTcgKzE2MjMsMTEgQEAgUHJvY1NsZWVwKExPQ0FMTE9DSyAq bG9jYWxsb2NrLCBMb2NrTWV0aG9kIGxvY2tNZXRob2RUYWJsZSwgYm9vbCBkb250V2FpdCkK IAkJCQkJCQlOVUxMLCBmYWxzZSk7CiAKIAkvKgotCSAqIFJlLWFjcXVpcmUgdGhlIGxvY2sg dGFibGUncyBwYXJ0aXRpb24gbG9jay4gIFdlIGhhdmUgdG8gZG8gdGhpcyB0byBob2xkCi0J ICogb2ZmIGNhbmNlbC9kaWUgaW50ZXJydXB0cyBiZWZvcmUgd2UgY2FuIG1lc3Mgd2l0aCBs b2NrQXdhaXRlZCAoZWxzZSB3ZQotCSAqIG1pZ2h0IGhhdmUgYSBtaXNzZWQgb3IgZHVwbGlj YXRlZCBsb2NhbGxvY2sgdXBkYXRlKS4KKwkgKiBSZS1hY3F1aXJlIHRoZSBsb2NrIHRhYmxl J3MgcGFydGl0aW9uIGxvY2ssIGJlY2F1c2UgdGhlIGNhbGxlciBleHBlY3RzCisJICogdXMg dG8gc3RpbGwgaG9sZCBpdC4KIAkgKi8KIAlMV0xvY2tBY3F1aXJlKHBhcnRpdGlvbkxvY2ss IExXX0VYQ0xVU0lWRSk7CiAKLQkvKgotCSAqIFdlIG5vIGxvbmdlciB3YW50IExvY2tFcnJv ckNsZWFudXAgdG8gZG8gYW55dGhpbmcuCi0JICovCi0JbG9ja0F3YWl0ZWQgPSBOVUxMOwot CiAJLyoKIAkgKiBJZiB3ZSBnb3QgdGhlIGxvY2ssIGJlIHN1cmUgdG8gcmVtZW1iZXIgaXQg aW4gdGhlIGxvY2FsbG9jayB0YWJsZS4KIAkgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCBl YTUxN2Y0YjliYi4uZmNlNjVjNzMxM2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3Av cG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTMwNTIs NyArMzA1Miw3IEBAIFByb2Nlc3NSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KFByb2NTaWdu YWxSZWFzb24gcmVhc29uKQogCQkJLyoKIAkJCSAqIElmIHdlIGFyZW4ndCB3YWl0aW5nIGZv ciBhIGxvY2sgd2UgY2FuIG5ldmVyIGRlYWRsb2NrLgogCQkJICovCi0JCQlpZiAoIUlzV2Fp dGluZ0ZvckxvY2soKSkKKwkJCWlmIChHZXRBd2FpdGVkTG9jaygpID09IE5VTEwpCiAJCQkJ cmV0dXJuOwogCiAJCQkvKiBJbnRlbnRpb25hbCBmYWxsIHRocm91Z2ggdG8gY2hlY2sgd2Fp dCBmb3IgcGluICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaCBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oCmluZGV4IGNjMWY2ZTc4YzM5Li40NTc1MmFj MTQwOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2NrLmgKKysrIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9sb2NrLmgKQEAgLTU4Myw2ICs1ODMsOCBAQCBleHRlcm4gYm9v bCBMb2NrQ2hlY2tDb25mbGljdHMoTG9ja01ldGhvZCBsb2NrTWV0aG9kVGFibGUsCiAJCQkJ CQkJICAgTE9DSyAqbG9jaywgUFJPQ0xPQ0sgKnByb2Nsb2NrKTsKIGV4dGVybiB2b2lkIEdy YW50TG9jayhMT0NLICpsb2NrLCBQUk9DTE9DSyAqcHJvY2xvY2ssIExPQ0tNT0RFIGxvY2tt b2RlKTsKIGV4dGVybiB2b2lkIEdyYW50QXdhaXRlZExvY2sodm9pZCk7CitleHRlcm4gTE9D QUxMT0NLICpHZXRBd2FpdGVkTG9jayh2b2lkKTsKKwogZXh0ZXJuIHZvaWQgUmVtb3ZlRnJv bVdhaXRRdWV1ZShQR1BST0MgKnByb2MsIHVpbnQzMiBoYXNoY29kZSk7CiBleHRlcm4gU2l6 ZSBMb2NrU2htZW1TaXplKHZvaWQpOwogZXh0ZXJuIExvY2tEYXRhICpHZXRMb2NrU3RhdHVz RGF0YSh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oIGIv c3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKaW5kZXggN2QzZmMyYmZhNjAuLjcxZTA1NzI3 ZTU0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaAorKysgYi9zcmMv aW5jbHVkZS9zdG9yYWdlL3Byb2MuaApAQCAtNDc2LDcgKzQ3Niw2IEBAIGV4dGVybiBQcm9j V2FpdFN0YXR1cyBQcm9jU2xlZXAoTE9DQUxMT0NLICpsb2NhbGxvY2ssCiBleHRlcm4gdm9p ZCBQcm9jV2FrZXVwKFBHUFJPQyAqcHJvYywgUHJvY1dhaXRTdGF0dXMgd2FpdFN0YXR1cyk7 CiBleHRlcm4gdm9pZCBQcm9jTG9ja1dha2V1cChMb2NrTWV0aG9kIGxvY2tNZXRob2RUYWJs ZSwgTE9DSyAqbG9jayk7CiBleHRlcm4gdm9pZCBDaGVja0RlYWRMb2NrQWxlcnQodm9pZCk7 Ci1leHRlcm4gYm9vbCBJc1dhaXRpbmdGb3JMb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgTG9j a0Vycm9yQ2xlYW51cCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgUHJvY1dhaXRGb3JTaWduYWwo dWludDMyIHdhaXRfZXZlbnRfaW5mbyk7Ci0tIAoyLjM5LjIKCg== --------------o37Oqr181xkA1D2P77ggyQYE Content-Type: text/x-patch; charset=UTF-8; name="0006-Update-local-lock-table-in-ProcSleep-s-caller.patch" Content-Disposition: attachment; filename="0006-Update-local-lock-table-in-ProcSleep-s-caller.patch" Content-Transfer-Encoding: base64 RnJvbSA3Y2IwMGMwNDNkNDc0OTAyNjNhYTY3ZDJmMWRmY2U5YzQwZjAyYWYwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMjIgSnVsIDIwMjQgMTc6Mjc6MTYgKzAzMDAK U3ViamVjdDogW1BBVENIIDYvOF0gVXBkYXRlIGxvY2FsIGxvY2sgdGFibGUgaW4gUHJvY1Ns ZWVwJ3MgY2FsbGVyCgpQcm9jU2xlZXAgaXMgbm93IHJlc3BvbnNpYmxlIG9ubHkgZm9yIHRo ZSBzaGFyZWQgc3RhdGUuICBTZWVtcyBhCmxpdHRsZSBuaWNlciB0aGF0IHdheS4KLS0tCiBz cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jIHwgNCArKystCiBzcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvcHJvYy5jIHwgNyAtLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDMgaW5z ZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvbG9jay5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYwpp bmRleCA5MDM1MTQ1MTY5ZS4uOGQxZDU3YzA1MzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9sb2NrLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xv Y2suYwpAQCAtMTA0Myw3ICsxMDQzLDYgQEAgTG9ja0FjcXVpcmVFeHRlbmRlZChjb25zdCBM T0NLVEFHICpsb2NrdGFnLAogCXsKIAkJLyogTm8gY29uZmxpY3Qgd2l0aCBoZWxkIG9yIHBy ZXZpb3VzbHkgcmVxdWVzdGVkIGxvY2tzICovCiAJCUdyYW50TG9jayhsb2NrLCBwcm9jbG9j aywgbG9ja21vZGUpOwotCQlHcmFudExvY2tMb2NhbChsb2NhbGxvY2ssIG93bmVyKTsKIAl9 CiAJZWxzZQogCXsKQEAgLTExMjMsNiArMTEyMiw5IEBAIExvY2tBY3F1aXJlRXh0ZW5kZWQo Y29uc3QgTE9DS1RBRyAqbG9ja3RhZywKIAkJTE9DS19QUklOVCgiTG9ja0FjcXVpcmU6IGdy YW50ZWQiLCBsb2NrLCBsb2NrbW9kZSk7CiAJfQogCisJLyogVGhlIGxvY2sgd2FzIGdyYW50 ZWQgdG8gdXMuICBVcGRhdGUgdGhlIGxvY2FsIGxvY2sgZW50cnkgYWNjb3JkaW5nbHkgKi8K KwlHcmFudExvY2tMb2NhbChsb2NhbGxvY2ssIG93bmVyKTsKKwogCS8qCiAJICogTG9jayBz dGF0ZSBpcyBmdWxseSB1cC10by1kYXRlIG5vdzsgaWYgd2UgZXJyb3Igb3V0IGFmdGVyIHRo aXMsIG5vCiAJICogc3BlY2lhbCBlcnJvciBjbGVhbnVwIGlzIHJlcXVpcmVkLgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXggN2EyMDdkMDEwNGQuLjhlNzRhMDRiOTMyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTExNTIsNyArMTE1Miw2IEBAIFByb2NTbGVl cChMT0NBTExPQ0sgKmxvY2FsbG9jaywgTG9ja01ldGhvZCBsb2NrTWV0aG9kVGFibGUsIGJv b2wgZG9udFdhaXQpCiAJCQkJewogCQkJCQkvKiBTa2lwIHRoZSB3YWl0IGFuZCBqdXN0IGdy YW50IG15c2VsZiB0aGUgbG9jay4gKi8KIAkJCQkJR3JhbnRMb2NrKGxvY2ssIHByb2Nsb2Nr LCBsb2NrbW9kZSk7Ci0JCQkJCUdyYW50QXdhaXRlZExvY2soKTsKIAkJCQkJcmV0dXJuIFBS T0NfV0FJVF9TVEFUVVNfT0s7CiAJCQkJfQogCkBAIC0xNjI4LDEyICsxNjI3LDYgQEAgUHJv Y1NsZWVwKExPQ0FMTE9DSyAqbG9jYWxsb2NrLCBMb2NrTWV0aG9kIGxvY2tNZXRob2RUYWJs ZSwgYm9vbCBkb250V2FpdCkKIAkgKi8KIAlMV0xvY2tBY3F1aXJlKHBhcnRpdGlvbkxvY2ss IExXX0VYQ0xVU0lWRSk7CiAKLQkvKgotCSAqIElmIHdlIGdvdCB0aGUgbG9jaywgYmUgc3Vy ZSB0byByZW1lbWJlciBpdCBpbiB0aGUgbG9jYWxsb2NrIHRhYmxlLgotCSAqLwotCWlmIChN eVByb2MtPndhaXRTdGF0dXMgPT0gUFJPQ19XQUlUX1NUQVRVU19PSykKLQkJR3JhbnRBd2Fp dGVkTG9jaygpOwotCiAJLyoKIAkgKiBXZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGVs c2UsIGJlY2F1c2UgdGhlIGF3YWtlciBkaWQgYWxsIHRoZQogCSAqIG5lY2Vzc2FyeSB1cGRh dGUgb2YgdGhlIGxvY2sgdGFibGUgYW5kIE15UHJvYy4KLS0gCjIuMzkuMgoK --------------o37Oqr181xkA1D2P77ggyQYE Content-Type: text/x-patch; charset=UTF-8; name="0007-Release-partition-lock-a-little-earlier.patch" Content-Disposition: attachment; filename="0007-Release-partition-lock-a-little-earlier.patch" Content-Transfer-Encoding: base64 RnJvbSA5NDgwNGEyMzgwZDE4MTA3MDQwODg3ZmE0MjQ5MTllZWFjOTdiYTkwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMjIgSnVsIDIwMjQgMTc6Mzg6MDYgKzAzMDAK U3ViamVjdDogW1BBVENIIDcvOF0gUmVsZWFzZSBwYXJ0aXRpb24gbG9jayBhIGxpdHRsZSBl YXJsaWVyCgpXZSBkb24ndCBuZWVkIHRvIGhvbGQgdGhlIGxvY2sgdG8gcHJldmVudCBkaWUv Y2FuY2VsIGludGVycnVwdHMsIHRoZXkKYXJlIG9ubHkgcHJvY2Vzc2VkIGF0IGV4cGxpY2l0 IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgcG9pbnRzIG5vdy4KLS0tCiBzcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvbG9jay5jIHwgNSArKystLQogMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0 aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvbG9jay5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYwppbmRl eCA4ZDFkNTdjMDUzMy4uNTJmMjg2N2ZmZWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvbG1nci9sb2NrLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2su YwpAQCAtMTA0Myw2ICsxMDQzLDcgQEAgTG9ja0FjcXVpcmVFeHRlbmRlZChjb25zdCBMT0NL VEFHICpsb2NrdGFnLAogCXsKIAkJLyogTm8gY29uZmxpY3Qgd2l0aCBoZWxkIG9yIHByZXZp b3VzbHkgcmVxdWVzdGVkIGxvY2tzICovCiAJCUdyYW50TG9jayhsb2NrLCBwcm9jbG9jaywg bG9ja21vZGUpOworCQlMV0xvY2tSZWxlYXNlKHBhcnRpdGlvbkxvY2spOwogCX0KIAllbHNl CiAJewpAQCAtMTExOCw4ICsxMTE5LDEwIEBAIExvY2tBY3F1aXJlRXh0ZW5kZWQoY29uc3Qg TE9DS1RBRyAqbG9ja3RhZywKIAkJCQllbG9nKEVSUk9SLCAiTG9ja0FjcXVpcmUgZmFpbGVk Iik7CiAJCQl9CiAJCX0KKwogCQlQUk9DTE9DS19QUklOVCgiTG9ja0FjcXVpcmU6IGdyYW50 ZWQiLCBwcm9jbG9jayk7CiAJCUxPQ0tfUFJJTlQoIkxvY2tBY3F1aXJlOiBncmFudGVkIiwg bG9jaywgbG9ja21vZGUpOworCQlMV0xvY2tSZWxlYXNlKHBhcnRpdGlvbkxvY2spOwogCX0K IAogCS8qIFRoZSBsb2NrIHdhcyBncmFudGVkIHRvIHVzLiAgVXBkYXRlIHRoZSBsb2NhbCBs b2NrIGVudHJ5IGFjY29yZGluZ2x5ICovCkBAIC0xMTMxLDggKzExMzQsNiBAQCBMb2NrQWNx dWlyZUV4dGVuZGVkKGNvbnN0IExPQ0tUQUcgKmxvY2t0YWcsCiAJICovCiAJRmluaXNoU3Ry b25nTG9ja0FjcXVpcmUoKTsKIAotCUxXTG9ja1JlbGVhc2UocGFydGl0aW9uTG9jayk7Ci0K IAkvKgogCSAqIEVtaXQgYSBXQUwgcmVjb3JkIGlmIGFjcXVpc2l0aW9uIG9mIHRoaXMgbG9j ayBuZWVkcyB0byBiZSByZXBsYXllZCBpbiBhCiAJICogc3RhbmRieSBzZXJ2ZXIuCi0tIAoy LjM5LjIKCg== --------------o37Oqr181xkA1D2P77ggyQYE Content-Type: text/x-patch; charset=UTF-8; name="0008-Split-ProcSleep-function-into-JoinWaitQueue-and-Proc.patch" Content-Disposition: attachment; filename*0="0008-Split-ProcSleep-function-into-JoinWaitQueue-and-Proc.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwZGY2ZGI4NjA3YzVkMTBkMTRhZTRiN2JiYzUwNzdhZDM5NGI0ZTZiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMjIgSnVsIDIwMjQgMjE6NTM6MTggKzAzMDAK U3ViamVjdDogW1BBVENIIDgvOF0gU3BsaXQgUHJvY1NsZWVwIGZ1bmN0aW9uIGludG8gSm9p bldhaXRRdWV1ZSBhbmQgUHJvY1NsZWVwCgpTcGxpdCBQcm9jU2xlZXAgaW50byB0d28gZnVu Y3Rpb25zOiBKb2luV2FpdFF1ZXVlIGFuZCBQcm9jU2xlZXAuCkpvaW5XYWl0UXVldWUgaXMg Y2FsbGVkIHdoaWxlIGhvbGRpbmcgdGhlIHBhcnRpdGlvbiBsb2NrLCBhbmQgaW5zZXJ0cwp0 aGUgY3VycmVudCBwcm9jZXNzIHRvIHRoZSB3YWl0IHF1ZXVlLCB3aGlsZSBQcm9jU2xlZXAo KSBkb2VzIHRoZQphY3R1YWwgc2xlZXBpbmcuIFByb2NTbGVlcCgpIGlzIG5vdyBjYWxsZWQg d2l0aG91dCBob2xkaW5nIHRoZQpwYXJ0aXRpb24gbG9jaywgYW5kIGl0IG5vIGxvbmdlciBy ZS1hY3F1aXJlcyB0aGUgcGFydGl0aW9uIGxvY2sgYmVmb3JlCnJldHVybmluZy4gVGhhdCBt YWtlcyB0aGUgd2FrZXVwIGEgbGl0dGxlIGNoZWFwZXIuIE9uY2UgdXBvbiBhIHRpbWUsCnJl LWFjcXVpcmluZyB0aGUgcGFydGl0aW9uIGxvY2sgd2FzIGFnbyB0byBwcmV2ZW50IGEgc2ln bmFsIGhhbmRsZXIKZnJvbSBsb25nam1waW5nIG91dCBhdCBhIGJhZCB0aW1lLCBidXQgbm93 YWRheXMgb3VyIHNpZ25hbCBoYW5kbGVycwpqdXN0IHNldCBmbGFncywgYW5kIGxvbmdqbXBp bmcgY2FuIG9ubHkgaGFwcGVuIGF0IHBvaW50cyB3aGVyZSB3ZQpleHBsaWNpdGx5IHJ1biBD SEVDS19GT1JfSU5URVJSVVBUUygpLgoKSWYgSm9pbldhaXRRdWV1ZSBkZXRlY3RzIGFuICJl YXJseSBkZWFkbG9jayIgYmVmb3JlIGV2ZW4gam9pbmluZyB0aGUKd2FpdCBxdWV1ZSwgaXQg cmV0dXJucyB3aXRob3V0IGNoYW5naW5nIHRoZSBzaGFyZWQgbG9jayBlbnRyeSwgbGVhdmlu Zwp0aGUgY2xlYW51cCBvZiB0aGUgc2hhcmVkIGxvY2sgZW50cnkgdG8gdGhlIGNhbGxlci4g VGhpcyBtYWtlcyBlYXJseQpkZWFkbG9jayBiZWhhdmUgdGhlIHNhbWUgYXMgdGhlIGRvbnRX YWl0PXRydWUgY2FzZS4KCk9uZSBzbWFsbCBzaWRlLWVmZmVjdCBvZiB0aGlzIHJlZmFjdG9y aW5nIGlzIHRoYXQgd2Ugbm93IG9ubHkgc2V0IHRoZQoncHMnIHRpdGxlIHRvIHNheSAid2Fp dGluZyIgd2hlbiB3ZSBhY3R1YWxseSBlbnRlciB0aGUgc2xlZXAsIG5vdCB3aGVuCnRoZSBs b2NrIGlzIHNraXBwZWQgYmVjYXVzZSBkb250V2FpdD10cnVlLCBvciB3aGVuIGEgZGVhZGxv Y2sgaXMKZGV0ZWN0ZWQgZWFybHkgYmVmb3JlIGVudGVyaW5nIHRoZSBzbGVlcC4KCkJhc2Vk IG9uIFRob21hcyBNdW5ybydzIGVhcmxpZXIgcGF0Y2ggYW5kIG9ic2VydmF0aW9uIHRoYXQg UHJvY1NsZWVwCmRvZXNuJ3QgcmVhbGx5IG5lZWQgdG8gcmUtYWNxdWlyZSB0aGUgcGFydGl0 aW9uIGxvY2suCgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBJTJCaFVLR0tt Tzd6ZTBaNldYS2RyTHhtdllhJTNEelZHR1hPTzMwTU1rdHVmb2ZWd0VtMUElNDBtYWlsLmdt YWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMgfCAxODIgKysr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1n ci9wcm9jLmMgfCAxMDcgKysrKysrKysrKystLS0tLS0tLQogc3JjL2luY2x1ZGUvc3RvcmFn ZS9wcm9jLmggICAgICB8ICAgNiArLQogMyBmaWxlcyBjaGFuZ2VkLCAxNTYgaW5zZXJ0aW9u cygrKSwgMTM5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9sb2NrLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jCmluZGV4 IDUyZjI4NjdmZmVhLi5jNTFjOThmMjY2NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9sbWdyL2xvY2suYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5j CkBAIC0zNjAsOCArMzYwLDcgQEAgc3RhdGljIFBST0NMT0NLICpTZXR1cExvY2tJblRhYmxl KExvY2tNZXRob2QgbG9ja01ldGhvZFRhYmxlLCBQR1BST0MgKnByb2MsCiBzdGF0aWMgdm9p ZCBHcmFudExvY2tMb2NhbChMT0NBTExPQ0sgKmxvY2FsbG9jaywgUmVzb3VyY2VPd25lciBv d25lcik7CiBzdGF0aWMgdm9pZCBCZWdpblN0cm9uZ0xvY2tBY3F1aXJlKExPQ0FMTE9DSyAq bG9jYWxsb2NrLCB1aW50MzIgZmFzdGhhc2hjb2RlKTsKIHN0YXRpYyB2b2lkIEZpbmlzaFN0 cm9uZ0xvY2tBY3F1aXJlKHZvaWQpOwotc3RhdGljIHZvaWQgV2FpdE9uTG9jayhMT0NBTExP Q0sgKmxvY2FsbG9jaywgUmVzb3VyY2VPd25lciBvd25lciwKLQkJCQkJICAgYm9vbCBkb250 V2FpdCk7CitzdGF0aWMgUHJvY1dhaXRTdGF0dXMgV2FpdE9uTG9jayhMT0NBTExPQ0sgKmxv Y2FsbG9jaywgUmVzb3VyY2VPd25lciBvd25lcik7CiBzdGF0aWMgdm9pZCBSZWxlYXNlTG9j a0lmSGVsZChMT0NBTExPQ0sgKmxvY2FsbG9jaywgYm9vbCBzZXNzaW9uTG9jayk7CiBzdGF0 aWMgdm9pZCBMb2NrUmVhc3NpZ25Pd25lcihMT0NBTExPQ0sgKmxvY2FsbG9jaywgUmVzb3Vy Y2VPd25lciBwYXJlbnQpOwogc3RhdGljIGJvb2wgVW5HcmFudExvY2soTE9DSyAqbG9jaywg TE9DS01PREUgbG9ja21vZGUsCkBAIC0xMDQ3LDg1ICsxMDQ2LDEwNSBAQCBMb2NrQWNxdWly ZUV4dGVuZGVkKGNvbnN0IExPQ0tUQUcgKmxvY2t0YWcsCiAJfQogCWVsc2UKIAl7Ci0JCS8q Ci0JCSAqIFNsZWVwIHRpbGwgc29tZW9uZSB3YWtlcyBtZSB1cC4gV2UgZG8gdGhpcyBldmVu IGluIHRoZSBkb250V2FpdAotCQkgKiBjYXNlLCBiZWNhdXNlIHdoaWxlIHRyeWluZyB0byBn byB0byBzbGVlcCwgd2UgbWF5IGRpc2NvdmVyIHRoYXQgd2UKLQkJICogY2FuIGFjcXVpcmUg dGhlIGxvY2sgaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsLgotCQkgKi8KLQkJV2FpdE9uTG9jayhs b2NhbGxvY2ssIG93bmVyLCBkb250V2FpdCk7CisJCVByb2NXYWl0U3RhdHVzIHdhaXRSZXN1 bHQ7CiAKIAkJLyoKLQkJICogTk9URTogZG8gbm90IGRvIGFueSBtYXRlcmlhbCBjaGFuZ2Ug b2Ygc3RhdGUgYmV0d2VlbiBoZXJlIGFuZAotCQkgKiByZXR1cm4uICBBbGwgcmVxdWlyZWQg Y2hhbmdlcyBpbiBsb2NrdGFibGUgc3RhdGUgbXVzdCBoYXZlIGJlZW4KLQkJICogZG9uZSB3 aGVuIHRoZSBsb2NrIHdhcyBncmFudGVkIHRvIHVzIC0tLSBzZWUgbm90ZXMgaW4gV2FpdE9u TG9jay4KKwkJICogSm9pbiB0aGUgbG9jaydzIHdhaXQgcXVldWUuICBXZSBkbyB0aGlzIGV2 ZW4gaW4gdGhlIGRvbnRXYWl0IGNhc2UsCisJCSAqIGJlY2F1c2Ugd2hpbGUgam9pbmluZyB0 aGUgcXVldWUsIHdlIG1heSBkaXNjb3ZlciB0aGF0IHdlIGNhbgorCQkgKiBhY3F1aXJlIHRo ZSBsb2NrIGltbWVkaWF0ZWx5IGFmdGVyIGFsbC4KIAkJICovCisJCXdhaXRSZXN1bHQgPSBK b2luV2FpdFF1ZXVlKGxvY2FsbG9jaywgbG9ja01ldGhvZFRhYmxlLCBkb250V2FpdCk7CiAK LQkJLyoKLQkJICogQ2hlY2sgdGhlIHByb2Nsb2NrIGVudHJ5IHN0YXR1cy4gSWYgZG9udFdh aXQgPSB0cnVlLCB0aGlzIGlzIGFuCi0JCSAqIGV4cGVjdGVkIGNhc2U7IG90aGVyd2lzZSwg aXQgd2lsbCBvbmx5IGhhcHBlbiBpZiBzb21ldGhpbmcgaW4gdGhlCi0JCSAqIGlwYyBjb21t dW5pY2F0aW9uIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkuCi0JCSAqLwotCQlpZiAoIShwcm9j bG9jay0+aG9sZE1hc2sgJiBMT0NLQklUX09OKGxvY2ttb2RlKSkpCisJCWlmICh3YWl0UmVz dWx0ID09IFBST0NfV0FJVF9TVEFUVVNfRVJST1IpCiAJCXsKKwkJCS8qCisJCQkgKiBXZSdy ZSBub3QgZ2V0dGluZyB0aGUgbG9jayBiZWNhdXNlIGEgZGVhZGxvY2sgd2FzIGRldGVjdGVk CisJCQkgKiBhbHJlYWR5IHdoaWxlIHRyeWluZyB0byBqb2luIHRoZSB3YWl0IHF1ZXVlLCBv ciBiZWNhdXNlIHdlCisJCQkgKiB3b3VsZCBoYXZlIHRvIHdhaXQgYnV0IHRoZSBjYWxsZXIg cmVxdWVzdGVkIG5vIGJsb2NraW5nLgorCQkJICoKKwkJCSAqIFVuZG8gdGhlIGNoYW5nZXMg dG8gc2hhcmVkIGVudHJpZXMgYmVmb3JlIHJlbGVhc2luZyB0aGUKKwkJCSAqIHBhcnRpdGlv biBsb2NrLgorCQkJICovCiAJCQlBYm9ydFN0cm9uZ0xvY2tBY3F1aXJlKCk7CiAKKwkJCWlm IChwcm9jbG9jay0+aG9sZE1hc2sgPT0gMCkKKwkJCXsKKwkJCQl1aW50MzIJCXByb2Nsb2Nr X2hhc2hjb2RlOworCisJCQkJcHJvY2xvY2tfaGFzaGNvZGUgPSBQcm9jTG9ja0hhc2hDb2Rl KCZwcm9jbG9jay0+dGFnLAorCQkJCQkJCQkJCQkJCSBoYXNoY29kZSk7CisJCQkJZGxpc3Rf ZGVsZXRlKCZwcm9jbG9jay0+bG9ja0xpbmspOworCQkJCWRsaXN0X2RlbGV0ZSgmcHJvY2xv Y2stPnByb2NMaW5rKTsKKwkJCQlpZiAoIWhhc2hfc2VhcmNoX3dpdGhfaGFzaF92YWx1ZShM b2NrTWV0aG9kUHJvY0xvY2tIYXNoLAorCQkJCQkJCQkJCQkJICYocHJvY2xvY2stPnRhZyks CisJCQkJCQkJCQkJCQkgcHJvY2xvY2tfaGFzaGNvZGUsCisJCQkJCQkJCQkJCQkgSEFTSF9S RU1PVkUsCisJCQkJCQkJCQkJCQkgTlVMTCkpCisJCQkJCWVsb2coUEFOSUMsICJwcm9jbG9j ayB0YWJsZSBjb3JydXB0ZWQiKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlQUk9DTE9DS19QUklO VCgiTG9ja0FjcXVpcmU6IGRpZCBub3Qgam9pbiB3YWl0IHF1ZXVlIiwgcHJvY2xvY2spOwor CQkJbG9jay0+blJlcXVlc3RlZC0tOworCQkJbG9jay0+cmVxdWVzdGVkW2xvY2ttb2RlXS0t OworCQkJTE9DS19QUklOVCgiTG9ja0FjcXVpcmU6IGRpZCBub3Qgam9pbiB3YWl0IHF1ZXVl IiwKKwkJCQkJICAgbG9jaywgbG9ja21vZGUpOworCQkJQXNzZXJ0KChsb2NrLT5uUmVxdWVz dGVkID4gMCkgJiYKKwkJCQkgICAobG9jay0+cmVxdWVzdGVkW2xvY2ttb2RlXSA+PSAwKSk7 CisJCQlBc3NlcnQobG9jay0+bkdyYW50ZWQgPD0gbG9jay0+blJlcXVlc3RlZCk7CisJCQlM V0xvY2tSZWxlYXNlKHBhcnRpdGlvbkxvY2spOworCQkJaWYgKGxvY2FsbG9jay0+bkxvY2tz ID09IDApCisJCQkJUmVtb3ZlTG9jYWxMb2NrKGxvY2FsbG9jayk7CisKIAkJCWlmIChkb250 V2FpdCkKIAkJCXsKLQkJCQkvKgotCQkJCSAqIFdlIGNhbid0IGFjcXVpcmUgdGhlIGxvY2sg aW1tZWRpYXRlbHkuICBJZiBjYWxsZXIgc3BlY2lmaWVkCi0JCQkJICogbm8gYmxvY2tpbmcs IHJlbW92ZSB1c2VsZXNzIHRhYmxlIGVudHJpZXMgYW5kIHJldHVybgotCQkJCSAqIExPQ0tB Q1FVSVJFX05PVF9BVkFJTCB3aXRob3V0IHdhaXRpbmcuCi0JCQkJICovCi0JCQkJaWYgKHBy b2Nsb2NrLT5ob2xkTWFzayA9PSAwKQotCQkJCXsKLQkJCQkJdWludDMyCQlwcm9jbG9ja19o YXNoY29kZTsKLQotCQkJCQlwcm9jbG9ja19oYXNoY29kZSA9IFByb2NMb2NrSGFzaENvZGUo JnByb2Nsb2NrLT50YWcsCi0JCQkJCQkJCQkJCQkJCSBoYXNoY29kZSk7Ci0JCQkJCWRsaXN0 X2RlbGV0ZSgmcHJvY2xvY2stPmxvY2tMaW5rKTsKLQkJCQkJZGxpc3RfZGVsZXRlKCZwcm9j bG9jay0+cHJvY0xpbmspOwotCQkJCQlpZiAoIWhhc2hfc2VhcmNoX3dpdGhfaGFzaF92YWx1 ZShMb2NrTWV0aG9kUHJvY0xvY2tIYXNoLAotCQkJCQkJCQkJCQkJCSAmKHByb2Nsb2NrLT50 YWcpLAotCQkJCQkJCQkJCQkJCSBwcm9jbG9ja19oYXNoY29kZSwKLQkJCQkJCQkJCQkJCQkg SEFTSF9SRU1PVkUsCi0JCQkJCQkJCQkJCQkJIE5VTEwpKQotCQkJCQkJZWxvZyhQQU5JQywg InByb2Nsb2NrIHRhYmxlIGNvcnJ1cHRlZCIpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJCVBS T0NMT0NLX1BSSU5UKCJMb2NrQWNxdWlyZTogTk9XQUlUIiwgcHJvY2xvY2spOwotCQkJCWxv Y2stPm5SZXF1ZXN0ZWQtLTsKLQkJCQlsb2NrLT5yZXF1ZXN0ZWRbbG9ja21vZGVdLS07Ci0J CQkJTE9DS19QUklOVCgiTG9ja0FjcXVpcmU6IGNvbmRpdGlvbmFsIGxvY2sgZmFpbGVkIiwK LQkJCQkJCSAgIGxvY2ssIGxvY2ttb2RlKTsKLQkJCQlBc3NlcnQoKGxvY2stPm5SZXF1ZXN0 ZWQgPiAwKSAmJgotCQkJCQkgICAobG9jay0+cmVxdWVzdGVkW2xvY2ttb2RlXSA+PSAwKSk7 Ci0JCQkJQXNzZXJ0KGxvY2stPm5HcmFudGVkIDw9IGxvY2stPm5SZXF1ZXN0ZWQpOwotCQkJ CUxXTG9ja1JlbGVhc2UocGFydGl0aW9uTG9jayk7Ci0JCQkJaWYgKGxvY2FsbG9jay0+bkxv Y2tzID09IDApCi0JCQkJCVJlbW92ZUxvY2FsTG9jayhsb2NhbGxvY2spOwogCQkJCWlmIChs b2NhbGxvY2twKQogCQkJCQkqbG9jYWxsb2NrcCA9IE5VTEw7CiAJCQkJcmV0dXJuIExPQ0tB Q1FVSVJFX05PVF9BVkFJTDsKIAkJCX0KIAkJCWVsc2UKKwkJCXsKKwkJCQlEZWFkTG9ja1Jl cG9ydCgpOworCQkJCS8qIERlYWRMb2NrUmVwb3J0KCkgd2lsbCBub3QgcmV0dXJuICovCisJ CQl9CisJCX0KKworCQkvKgorCQkgKiBXZSBhcmUgbm93IGluIHRoZSBsb2NrIHF1ZXVlLCBv ciB0aGUgbG9jayB3YXMgYWxyZWFkeSBncmFudGVkLiAgSWYKKwkJICogcXVldWVkLCBnbyB0 byBzbGVlcC4KKwkJICovCisJCWlmICh3YWl0UmVzdWx0ID09IFBST0NfV0FJVF9TVEFUVVNf V0FJVElORykKKwkJeworCQkJQXNzZXJ0KCFkb250V2FpdCk7CisJCQlQUk9DTE9DS19QUklO VCgiTG9ja0FjcXVpcmU6IHNsZWVwaW5nIG9uIGxvY2siLCBwcm9jbG9jayk7CisJCQlMT0NL X1BSSU5UKCJMb2NrQWNxdWlyZTogc2xlZXBpbmcgb24gbG9jayIsIGxvY2ssIGxvY2ttb2Rl KTsKKwkJCUxXTG9ja1JlbGVhc2UocGFydGl0aW9uTG9jayk7CisKKwkJCXdhaXRSZXN1bHQg PSBXYWl0T25Mb2NrKGxvY2FsbG9jaywgb3duZXIpOworCisJCQkvKgorCQkJICogTk9URTog ZG8gbm90IGRvIGFueSBtYXRlcmlhbCBjaGFuZ2Ugb2Ygc3RhdGUgYmV0d2VlbiBoZXJlIGFu ZAorCQkJICogcmV0dXJuLiAgQWxsIHJlcXVpcmVkIGNoYW5nZXMgaW4gbG9ja3RhYmxlIHN0 YXRlIG11c3QgaGF2ZSBiZWVuCisJCQkgKiBkb25lIHdoZW4gdGhlIGxvY2sgd2FzIGdyYW50 ZWQgdG8gdXMgLS0tIHNlZSBub3RlcyBpbiBXYWl0T25Mb2NrLgorCQkJICovCisKKwkJCWlm ICh3YWl0UmVzdWx0ID09IFBST0NfV0FJVF9TVEFUVVNfRVJST1IpCiAJCQl7CiAJCQkJLyoK LQkJCQkgKiBXZSBzaG91bGQgaGF2ZSBnb3R0ZW4gdGhlIGxvY2ssIGJ1dCBzb21laG93IHRo YXQgZGlkbid0Ci0JCQkJICogaGFwcGVuLiBJZiB3ZSBnZXQgaGVyZSwgaXQncyBhIGJ1Zy4K KwkJCQkgKiBXZSBmYWlsZWQgYXMgYSByZXN1bHQgb2YgYSBkZWFkbG9jaywgc2VlIENoZWNr RGVhZExvY2soKS4gUXVpdAorCQkJCSAqIG5vdy4KIAkJCQkgKi8KLQkJCQlQUk9DTE9DS19Q UklOVCgiTG9ja0FjcXVpcmU6IElOQ09OU0lTVEVOVCIsIHByb2Nsb2NrKTsKLQkJCQlMT0NL X1BSSU5UKCJMb2NrQWNxdWlyZTogSU5DT05TSVNURU5UIiwgbG9jaywgbG9ja21vZGUpOwot CQkJCUxXTG9ja1JlbGVhc2UocGFydGl0aW9uTG9jayk7Ci0JCQkJZWxvZyhFUlJPUiwgIkxv Y2tBY3F1aXJlIGZhaWxlZCIpOworCQkJCUFzc2VydCghZG9udFdhaXQpOworCQkJCURlYWRM b2NrUmVwb3J0KCk7CisJCQkJLyogRGVhZExvY2tSZXBvcnQoKSB3aWxsIG5vdCByZXR1cm4g Ki8KIAkJCX0KIAkJfQotCi0JCVBST0NMT0NLX1BSSU5UKCJMb2NrQWNxdWlyZTogZ3JhbnRl ZCIsIHByb2Nsb2NrKTsKLQkJTE9DS19QUklOVCgiTG9ja0FjcXVpcmU6IGdyYW50ZWQiLCBs b2NrLCBsb2NrbW9kZSk7Ci0JCUxXTG9ja1JlbGVhc2UocGFydGl0aW9uTG9jayk7CisJCWVs c2UKKwkJCUxXTG9ja1JlbGVhc2UocGFydGl0aW9uTG9jayk7CisJCUFzc2VydCh3YWl0UmVz dWx0ID09IFBST0NfV0FJVF9TVEFUVVNfT0spOwogCX0KIAogCS8qIFRoZSBsb2NrIHdhcyBn cmFudGVkIHRvIHVzLiAgVXBkYXRlIHRoZSBsb2NhbCBsb2NrIGVudHJ5IGFjY29yZGluZ2x5 ICovCisJQXNzZXJ0KChwcm9jbG9jay0+aG9sZE1hc2sgJiBMT0NLQklUX09OKGxvY2ttb2Rl KSkgIT0gMCk7CiAJR3JhbnRMb2NrTG9jYWwobG9jYWxsb2NrLCBvd25lcik7CiAKIAkvKgpA QCAtMTc5NywxNCArMTgxNiwxMiBAQCBNYXJrTG9ja0NsZWFyKExPQ0FMTE9DSyAqbG9jYWxs b2NrKQogLyoKICAqIFdhaXRPbkxvY2sgLS0gd2FpdCB0byBhY3F1aXJlIGEgbG9jawogICoK LSAqIFRoZSBhcHByb3ByaWF0ZSBwYXJ0aXRpb24gbG9jayBtdXN0IGJlIGhlbGQgYXQgZW50 cnksIGFuZCB3aWxsIHN0aWxsIGJlCi0gKiBoZWxkIGF0IGV4aXQuCisgKiBUaGlzIGlzIGEg d3JhcHBlciBhcm91bmQgUHJvY1NsZWVwLCB3aXRoIGV4dHJhIHRyYWNpbmcgYW5kIGJvb2tr ZWVwaW5nLgogICovCi1zdGF0aWMgdm9pZAotV2FpdE9uTG9jayhMT0NBTExPQ0sgKmxvY2Fs bG9jaywgUmVzb3VyY2VPd25lciBvd25lciwgYm9vbCBkb250V2FpdCkKK3N0YXRpYyBQcm9j V2FpdFN0YXR1cworV2FpdE9uTG9jayhMT0NBTExPQ0sgKmxvY2FsbG9jaywgUmVzb3VyY2VP d25lciBvd25lcikKIHsKLQlMT0NLTUVUSE9ESUQgbG9ja21ldGhvZGlkID0gTE9DQUxMT0NL X0xPQ0tNRVRIT0QoKmxvY2FsbG9jayk7Ci0JTG9ja01ldGhvZAlsb2NrTWV0aG9kVGFibGUg PSBMb2NrTWV0aG9kc1tsb2NrbWV0aG9kaWRdOworCVByb2NXYWl0U3RhdHVzIHJlc3VsdDsK IAogCVRSQUNFX1BPU1RHUkVTUUxfTE9DS19XQUlUX1NUQVJUKGxvY2FsbG9jay0+dGFnLmxv Y2subG9ja3RhZ19maWVsZDEsCiAJCQkJCQkJCQkgbG9jYWxsb2NrLT50YWcubG9jay5sb2Nr dGFnX2ZpZWxkMiwKQEAgLTE4MTMsMTIgKzE4MzAsMTMgQEAgV2FpdE9uTG9jayhMT0NBTExP Q0sgKmxvY2FsbG9jaywgUmVzb3VyY2VPd25lciBvd25lciwgYm9vbCBkb250V2FpdCkKIAkJ CQkJCQkJCSBsb2NhbGxvY2stPnRhZy5sb2NrLmxvY2t0YWdfdHlwZSwKIAkJCQkJCQkJCSBs b2NhbGxvY2stPnRhZy5tb2RlKTsKIAotCUxPQ0tfUFJJTlQoIldhaXRPbkxvY2s6IHNsZWVw aW5nIG9uIGxvY2siLAotCQkJICAgbG9jYWxsb2NrLT5sb2NrLCBsb2NhbGxvY2stPnRhZy5t b2RlKTsKLQogCS8qIGFkanVzdCB0aGUgcHJvY2VzcyB0aXRsZSB0byBpbmRpY2F0ZSB0aGF0 IGl0J3Mgd2FpdGluZyAqLwogCXNldF9wc19kaXNwbGF5X3N1ZmZpeCgid2FpdGluZyIpOwog CisJLyoKKwkgKiBSZWNvcmQgdGhlIGZhY3QgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3IgYSBs b2NrLCBzbyB0aGF0CisJICogTG9ja0Vycm9yQ2xlYW51cCB3aWxsIGNsZWFuIHVwIGlmIGNh bmNlbC9kaWUgaGFwcGVucy4KKwkgKi8KIAlhd2FpdGVkTG9jayA9IGxvY2FsbG9jazsKIAlh d2FpdGVkT3duZXIgPSBvd25lcjsKIApAQCAtMTg0MSwyOCArMTg1OSw3IEBAIFdhaXRPbkxv Y2soTE9DQUxMT0NLICpsb2NhbGxvY2ssIFJlc291cmNlT3duZXIgb3duZXIsIGJvb2wgZG9u dFdhaXQpCiAJICovCiAJUEdfVFJZKCk7CiAJewotCQkvKgotCQkgKiBJZiBkb250V2FpdCA9 IHRydWUsIHdlIGhhbmRsZSBzdWNjZXNzIGFuZCBmYWlsdXJlIGluIHRoZSBzYW1lIHdheQot CQkgKiBoZXJlLiBUaGUgY2FsbGVyIHdpbGwgYmUgYWJsZSB0byBzb3J0IG91dCB3aGF0IGhh cyBoYXBwZW5lZC4KLQkJICovCi0JCWlmIChQcm9jU2xlZXAobG9jYWxsb2NrLCBsb2NrTWV0 aG9kVGFibGUsIGRvbnRXYWl0KSAhPSBQUk9DX1dBSVRfU1RBVFVTX09LCi0JCQkmJiAhZG9u dFdhaXQpCi0JCXsKLQotCQkJLyoKLQkJCSAqIFdlIGZhaWxlZCBhcyBhIHJlc3VsdCBvZiBh IGRlYWRsb2NrLCBzZWUgQ2hlY2tEZWFkTG9jaygpLiBRdWl0Ci0JCQkgKiBub3cuCi0JCQkg Ki8KLQkJCWF3YWl0ZWRMb2NrID0gTlVMTDsKLQkJCUxXTG9ja1JlbGVhc2UoTG9ja0hhc2hQ YXJ0aXRpb25Mb2NrKGxvY2FsbG9jay0+aGFzaGNvZGUpKTsKLQotCQkJLyoKLQkJCSAqIE5v dyB0aGF0IHdlIGFyZW4ndCBob2xkaW5nIHRoZSBwYXJ0aXRpb24gbG9jaywgd2UgY2FuIGdp dmUgYW4KLQkJCSAqIGVycm9yIHJlcG9ydCBpbmNsdWRpbmcgZGV0YWlscyBhYm91dCB0aGUg ZGV0ZWN0ZWQgZGVhZGxvY2suCi0JCQkgKi8KLQkJCURlYWRMb2NrUmVwb3J0KCk7Ci0JCQkv KiBub3QgcmVhY2hlZCAqLwotCQl9CisJCXJlc3VsdCA9IFByb2NTbGVlcChsb2NhbGxvY2sp OwogCX0KIAlQR19DQVRDSCgpOwogCXsKQEAgLTE4ODQsMTUgKzE4ODEsMTQgQEAgV2FpdE9u TG9jayhMT0NBTExPQ0sgKmxvY2FsbG9jaywgUmVzb3VyY2VPd25lciBvd25lciwgYm9vbCBk b250V2FpdCkKIAkvKiByZXNldCBwcyBkaXNwbGF5IHRvIHJlbW92ZSB0aGUgc3VmZml4ICov CiAJc2V0X3BzX2Rpc3BsYXlfcmVtb3ZlX3N1ZmZpeCgpOwogCi0JTE9DS19QUklOVCgiV2Fp dE9uTG9jazogd2FrZXVwIG9uIGxvY2siLAotCQkJICAgbG9jYWxsb2NrLT5sb2NrLCBsb2Nh bGxvY2stPnRhZy5tb2RlKTsKLQogCVRSQUNFX1BPU1RHUkVTUUxfTE9DS19XQUlUX0RPTkUo bG9jYWxsb2NrLT50YWcubG9jay5sb2NrdGFnX2ZpZWxkMSwKIAkJCQkJCQkJCWxvY2FsbG9j ay0+dGFnLmxvY2subG9ja3RhZ19maWVsZDIsCiAJCQkJCQkJCQlsb2NhbGxvY2stPnRhZy5s b2NrLmxvY2t0YWdfZmllbGQzLAogCQkJCQkJCQkJbG9jYWxsb2NrLT50YWcubG9jay5sb2Nr dGFnX2ZpZWxkNCwKIAkJCQkJCQkJCWxvY2FsbG9jay0+dGFnLmxvY2subG9ja3RhZ190eXBl LAogCQkJCQkJCQkJbG9jYWxsb2NrLT50YWcubW9kZSk7CisKKwlyZXR1cm4gcmVzdWx0Owog fQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXggOGU3NGEwNGI5MzIuLjZk MGFkYmI4MDE4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTEwMjUsNyArMTAy NSw3IEBAIEF1eGlsaWFyeVBpZEdldFByb2MoaW50IHBpZCkKIAogCiAvKgotICogUHJvY1Ns ZWVwIC0tIHB1dCBhIHByb2Nlc3MgdG8gc2xlZXAgb24gdGhlIHNwZWNpZmllZCBsb2NrCisg KiBKb2luV2FpdFF1ZXVlIC0tIGpvaW4gdGhlIHdhaXQgcXVldWUgb24gdGhlIHNwZWNpZmll ZCBsb2NrCiAgKgogICogSXQncyBub3QgYWN0dWFsbHkgZ3VhcmFudGVlZCB0aGF0IHdlIG5l ZWQgdG8gd2FpdCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMKICAqIGNhbGxlZCwgYmVjYXVzZSBp dCBjb3VsZCBiZSB0aGF0IHdoZW4gd2UgdHJ5IHRvIGZpbmQgYSBwb3NpdGlvbiBhdCB3aGlj aApAQCAtMTAzNCwyMCArMTAzNCwyNCBAQCBBdXhpbGlhcnlQaWRHZXRQcm9jKGludCBwaWQp CiAgKiB3ZSBnZXQgdGhlIGxvY2sgaW1tZWRpYXRlbHkuIEJlY2F1c2Ugb2YgdGhpcywgaXQn cyBzZW5zaWJsZSBmb3IgdGhpcyBmdW5jdGlvbgogICogdG8gaGF2ZSBhIGRvbnRXYWl0IGFy Z3VtZW50LCBkZXNwaXRlIHRoZSBuYW1lLgogICoKLSAqIFRoZSBsb2NrIHRhYmxlJ3MgcGFy dGl0aW9uIGxvY2sgbXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkCi0g KiBhdCBleGl0LgorICogT24gZW50cnksIHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgc2V0IHVw IExPQ0sgYW5kIFBST0NMT0NLIGVudHJpZXMgdG8KKyAqIHJlZmxlY3QgdGhhdCB3ZSBoYXZl ICJyZXF1ZXN0ZWQiIHRoZSBsb2NrLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IK KyAqIGNsZWFuaW5nIHRoYXQgdXAsIGlmIHdlIGVuZCB1cCBub3Qgam9pbmluZyB0aGUgcXVl dWUgYWZ0ZXIgYWxsLgogICoKLSAqIFJlc3VsdDogUFJPQ19XQUlUX1NUQVRVU19PSyBpZiB3 ZSBhY3F1aXJlZCB0aGUgbG9jaywgUFJPQ19XQUlUX1NUQVRVU19FUlJPUgotICogaWYgbm90 IChpZiBkb250V2FpdCA9IHRydWUsIHdlIHdvdWxkIGhhdmUgaGFkIHRvIHdhaXQ7IGlmIGRv bnRXYWl0ID0gZmFsc2UsCi0gKiB0aGlzIGlzIGEgZGVhZGxvY2spLgorICogVGhlIGxvY2sg dGFibGUncyBwYXJ0aXRpb24gbG9jayBtdXN0IGJlIGhlbGQgYXQgZW50cnksIGFuZCBpcyBz dGlsbCBoZWxkCisgKiBhdCBleGl0LiAgVGhlIGNhbGxlciBtdXN0IHJlbGVhc2UgaXQgYmVm b3JlIGNhbGxpbmcgUHJvY1NsZWVwKCkuCiAgKgotICogQVNTVU1FOiB0aGF0IG5vIG9uZSB3 aWxsIGZpZGRsZSB3aXRoIHRoZSBxdWV1ZSB1bnRpbCBhZnRlcgotICoJCXdlIHJlbGVhc2Ug dGhlIHBhcnRpdGlvbiBsb2NrLgorICogUmVzdWx0IGlzIG9uZSBvZiB0aGUgZm9sbG93aW5n OgorICoKKyAqICBQUk9DX1dBSVRfU1RBVFVTX09LICAgICAgIC0gbG9jayB3YXMgaW1tZWRp YXRlbHkgZ3JhbnRlZAorICogIFBST0NfV0FJVF9TVEFUVVNfV0FJVElORyAgLSBqb2luZWQg dGhlIHdhaXQgcXVldWU7IGNhbGwgUHJvY1NsZWVwKCkKKyAqICBQUk9DX1dBSVRfU1RBVFVT X0VSUk9SICAgIC0gaW1tZWRpYXRlIGRlYWRsb2NrIHdhcyBkZXRlY3RlZCwgb3Igd291bGQK KyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZCB0byB3YWl0IGFuZCBkb250 V2FpdCA9PSB0cnVlCiAgKgogICogTk9URVM6IFRoZSBwcm9jZXNzIHF1ZXVlIGlzIG5vdyBh IHByaW9yaXR5IHF1ZXVlIGZvciBsb2NraW5nLgogICovCiBQcm9jV2FpdFN0YXR1cwotUHJv Y1NsZWVwKExPQ0FMTE9DSyAqbG9jYWxsb2NrLCBMb2NrTWV0aG9kIGxvY2tNZXRob2RUYWJs ZSwgYm9vbCBkb250V2FpdCkKK0pvaW5XYWl0UXVldWUoTE9DQUxMT0NLICpsb2NhbGxvY2ss IExvY2tNZXRob2QgbG9ja01ldGhvZFRhYmxlLCBib29sIGRvbnRXYWl0KQogewogCUxPQ0tN T0RFCWxvY2ttb2RlID0gbG9jYWxsb2NrLT50YWcubW9kZTsKIAlMT0NLCSAgICpsb2NrID0g bG9jYWxsb2NrLT5sb2NrOwpAQCAtMTA1NywxMyArMTA2MSwxNiBAQCBQcm9jU2xlZXAoTE9D QUxMT0NLICpsb2NhbGxvY2ssIExvY2tNZXRob2QgbG9ja01ldGhvZFRhYmxlLCBib29sIGRv bnRXYWl0KQogCWRjbGlzdF9oZWFkICp3YWl0UXVldWUgPSAmbG9jay0+d2FpdFByb2NzOwog CVBHUFJPQwkgICAqaW5zZXJ0X2JlZm9yZSA9IE5VTEw7CiAJTE9DS01BU0sJbXlIZWxkTG9j a3M7Ci0JVGltZXN0YW1wVHogc3RhbmRieVdhaXRTdGFydCA9IDA7CiAJYm9vbAkJZWFybHlf ZGVhZGxvY2sgPSBmYWxzZTsKLQlib29sCQlhbGxvd19hdXRvdmFjdXVtX2NhbmNlbCA9IHRy dWU7Ci0JYm9vbAkJbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0ID0gZmFsc2U7Ci0JUHJvY1dh aXRTdGF0dXMgbXlXYWl0U3RhdHVzOwogCVBHUFJPQwkgICAqbGVhZGVyID0gTXlQcm9jLT5s b2NrR3JvdXBMZWFkZXI7CiAKKwlBc3NlcnQoTFdMb2NrSGVsZEJ5TWVJbk1vZGUocGFydGl0 aW9uTG9jaywgTFdfRVhDTFVTSVZFKSk7CisKKwkvKgorCSAqIFNldCBiaXRtYXNrIG9mIGxv Y2tzIHRoaXMgcHJvY2VzcyBhbHJlYWR5IGhvbGRzIG9uIHRoaXMgb2JqZWN0LgorCSAqLwor CW15SGVsZExvY2tzID0gTXlQcm9jLT5oZWxkTG9ja3MgPSBwcm9jbG9jay0+aG9sZE1hc2s7 CisKIAkvKgogCSAqIFNldCBiaXRtYXNrIG9mIGxvY2tzIHRoaXMgcHJvY2VzcyBhbHJlYWR5 IGhvbGRzIG9uIHRoaXMgb2JqZWN0LgogCSAqLwpAQCAtMTE2NCw2ICsxMTcxLDEzIEBAIFBy b2NTbGVlcChMT0NBTExPQ0sgKmxvY2FsbG9jaywgTG9ja01ldGhvZCBsb2NrTWV0aG9kVGFi bGUsIGJvb2wgZG9udFdhaXQpCiAJCX0KIAl9CiAKKwkvKgorCSAqIElmIHdlIGRldGVjdGVk IGRlYWRsb2NrLCBnaXZlIHVwIHdpdGhvdXQgd2FpdGluZy4gIFRoaXMgbXVzdCBhZ3JlZSB3 aXRoCisJICogQ2hlY2tEZWFkTG9jaydzIHJlY292ZXJ5IGNvZGUuCisJICovCisJaWYgKGVh cmx5X2RlYWRsb2NrKQorCQlyZXR1cm4gUFJPQ19XQUlUX1NUQVRVU19FUlJPUjsKKwogCS8q CiAJICogQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgd2UnZCByZWFsbHkgbmVlZCB0byBz bGVlcC4gSWYgd2UndmUgYmVlbgogCSAqIGNvbW1hbmRlZCBub3QgdG8gZG8gdGhhdCwgYmFp bCBvdXQuCkBAIC0xMTg4LDMxICsxMjAyLDQzIEBAIFByb2NTbGVlcChMT0NBTExPQ0sgKmxv Y2FsbG9jaywgTG9ja01ldGhvZCBsb2NrTWV0aG9kVGFibGUsIGJvb2wgZG9udFdhaXQpCiAK IAlNeVByb2MtPndhaXRTdGF0dXMgPSBQUk9DX1dBSVRfU1RBVFVTX1dBSVRJTkc7CiAKLQkv KgotCSAqIElmIHdlIGRldGVjdGVkIGRlYWRsb2NrLCBnaXZlIHVwIHdpdGhvdXQgd2FpdGlu Zy4gIFRoaXMgbXVzdCBhZ3JlZSB3aXRoCi0JICogQ2hlY2tEZWFkTG9jaydzIHJlY292ZXJ5 IGNvZGUuCi0JICovCi0JaWYgKGVhcmx5X2RlYWRsb2NrKQotCXsKLQkJUmVtb3ZlRnJvbVdh aXRRdWV1ZShNeVByb2MsIGhhc2hjb2RlKTsKLQkJcmV0dXJuIFBST0NfV0FJVF9TVEFUVVNf RVJST1I7Ci0JfQorCXJldHVybiBQUk9DX1dBSVRfU1RBVFVTX1dBSVRJTkc7Cit9CiAKLQkv KgotCSAqIFJlbGVhc2UgdGhlIGxvY2sgdGFibGUncyBwYXJ0aXRpb24gbG9jay4KLQkgKgot CSAqIE5PVEU6IHRoaXMgbWF5IGFsc28gY2F1c2UgdXMgdG8gZXhpdCBjcml0aWNhbC1zZWN0 aW9uIHN0YXRlLCBwb3NzaWJseQotCSAqIGFsbG93aW5nIGEgY2FuY2VsL2RpZSBpbnRlcnJ1 cHQgdG8gYmUgYWNjZXB0ZWQuIFRoaXMgaXMgT0sgYmVjYXVzZSB3ZQotCSAqIGhhdmUgcmVj b3JkZWQgdGhlIGZhY3QgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3IgYSBsb2NrLCBhbmQgc28K LQkgKiBMb2NrRXJyb3JDbGVhbnVwIHdpbGwgY2xlYW4gdXAgaWYgY2FuY2VsL2RpZSBoYXBw ZW5zLgotCSAqLwotCUxXTG9ja1JlbGVhc2UocGFydGl0aW9uTG9jayk7CisvKgorICogUHJv Y1NsZWVwIC0tIHB1dCBwcm9jZXNzIHRvIHNsZWVwIHdhaXRpbmcgb24gbG9jaworICoKKyAq IFRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbiBKb2luV2FpdFF1ZXVlKCkgcmV0dXJucyBQUk9D X1dBSVRfU1RBVFVTX1dBSVRJTkcuCisgKiBSZXR1cm5zIGFmdGVyIHRoZSBsb2NrIGhhcyBi ZWVuIGdyYW50ZWQsIG9yIGlmIGEgZGVhZGxvY2sgaXMgZGV0ZWN0ZWQuICBDYW4KKyAqIGFs c28gYmFpbCBvdXQgd2l0aCBlcmVwb3J0KEVSUk9SKSwgaWYgc29tZSBvdGhlciBlcnJvciBj b25kaXRpb24sIG9yIGEKKyAqIHRpbWVvdXQgb3IgY2FuY2VsbGF0aW9uIGlzIHRyaWdnZXJl ZC4KKyAqCisgKiBSZXN1bHQgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgKgorICogIFBS T0NfV0FJVF9TVEFUVVNfT0sgICAgICAtIGxvY2sgd2FzIGdyYW50ZWQKKyAqICBQUk9DX1dB SVRfU1RBVFVTX0VSUk9SICAgLSBhIGRlYWRsb2NrIHdhcyBkZXRlY3RlZAorICovCitQcm9j V2FpdFN0YXR1cworUHJvY1NsZWVwKExPQ0FMTE9DSyAqbG9jYWxsb2NrKQoreworCUxPQ0tN T0RFCWxvY2ttb2RlID0gbG9jYWxsb2NrLT50YWcubW9kZTsKKwlMT0NLCSAgICpsb2NrID0g bG9jYWxsb2NrLT5sb2NrOworCXVpbnQzMgkJaGFzaGNvZGUgPSBsb2NhbGxvY2stPmhhc2hj b2RlOworCUxXTG9jawkgICAqcGFydGl0aW9uTG9jayA9IExvY2tIYXNoUGFydGl0aW9uTG9j ayhoYXNoY29kZSk7CisJVGltZXN0YW1wVHogc3RhbmRieVdhaXRTdGFydCA9IDA7CisJYm9v bAkJYWxsb3dfYXV0b3ZhY3V1bV9jYW5jZWwgPSB0cnVlOworCWJvb2wJCWxvZ2dlZF9yZWNv dmVyeV9jb25mbGljdCA9IGZhbHNlOworCVByb2NXYWl0U3RhdHVzIG15V2FpdFN0YXR1czsK KworCS8qIFRoZSBjYWxsZXIgbXVzdCd2ZSBhcm1lZCB0aGUgb24tZXJyb3IgY2xlYW51cCBt ZWNoYW5pc20gKi8KKwlBc3NlcnQoR2V0QXdhaXRlZExvY2soKSA9PSBsb2NhbGxvY2spOwor CUFzc2VydCghTFdMb2NrSGVsZEJ5TWUocGFydGl0aW9uTG9jaykpOwogCiAJLyoKLQkgKiBB bHNvLCBub3cgdGhhdCB3ZSB3aWxsIHN1Y2Nlc3NmdWxseSBjbGVhbiB1cCBhZnRlciBhbiBl cmVwb3J0LCBpdCdzCi0JICogc2FmZSB0byBjaGVjayB0byBzZWUgaWYgdGhlcmUncyBhIGJ1 ZmZlciBwaW4gZGVhZGxvY2sgYWdhaW5zdCB0aGUKLQkgKiBTdGFydHVwIHByb2Nlc3MuICBP ZiBjb3Vyc2UsIHRoYXQncyBvbmx5IG5lY2Vzc2FyeSBpZiB3ZSdyZSBkb2luZyBIb3QKLQkg KiBTdGFuZGJ5IGFuZCBhcmUgbm90IHRoZSBTdGFydHVwIHByb2Nlc3Mgb3Vyc2VsdmVzLgor CSAqIE5vdyB0aGF0IHdlIHdpbGwgc3VjY2Vzc2Z1bGx5IGNsZWFuIHVwIGFmdGVyIGFuIGVy ZXBvcnQsIGl0J3Mgc2FmZSB0bworCSAqIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGEgYnVm ZmVyIHBpbiBkZWFkbG9jayBhZ2FpbnN0IHRoZSBTdGFydHVwCisJICogcHJvY2Vzcy4gIE9m IGNvdXJzZSwgdGhhdCdzIG9ubHkgbmVjZXNzYXJ5IGlmIHdlJ3JlIGRvaW5nIEhvdCBTdGFu ZGJ5CisJICogYW5kIGFyZSBub3QgdGhlIFN0YXJ0dXAgcHJvY2VzcyBvdXJzZWx2ZXMuCiAJ ICovCiAJaWYgKFJlY292ZXJ5SW5Qcm9ncmVzcygpICYmICFJblJlY292ZXJ5KQogCQlDaGVj a1JlY292ZXJ5Q29uZmxpY3REZWFkbG9jaygpOwpAQCAtMTYyMSwxNyArMTY0NywxMiBAQCBQ cm9jU2xlZXAoTE9DQUxMT0NLICpsb2NhbGxvY2ssIExvY2tNZXRob2QgbG9ja01ldGhvZFRh YmxlLCBib29sIGRvbnRXYWl0KQogCQkJCQkJCXN0YW5kYnlXYWl0U3RhcnQsIEdldEN1cnJl bnRUaW1lc3RhbXAoKSwKIAkJCQkJCQlOVUxMLCBmYWxzZSk7CiAKLQkvKgotCSAqIFJlLWFj cXVpcmUgdGhlIGxvY2sgdGFibGUncyBwYXJ0aXRpb24gbG9jaywgYmVjYXVzZSB0aGUgY2Fs bGVyIGV4cGVjdHMKLQkgKiB1cyB0byBzdGlsbCBob2xkIGl0LgotCSAqLwotCUxXTG9ja0Fj cXVpcmUocGFydGl0aW9uTG9jaywgTFdfRVhDTFVTSVZFKTsKLQogCS8qCiAJICogV2UgZG9u J3QgaGF2ZSB0byBkbyBhbnl0aGluZyBlbHNlLCBiZWNhdXNlIHRoZSBhd2FrZXIgZGlkIGFs bCB0aGUKLQkgKiBuZWNlc3NhcnkgdXBkYXRlIG9mIHRoZSBsb2NrIHRhYmxlIGFuZCBNeVBy b2MuCisJICogbmVjZXNzYXJ5IHVwZGF0ZXMgb2YgdGhlIGxvY2sgdGFibGUgYW5kIE15UHJv Yy4gKFRoZSBjYWxsZXIgaXMKKwkgKiByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgdGhlIGxv Y2FsIGxvY2sgdGFibGUuKQogCSAqLwotCXJldHVybiBNeVByb2MtPndhaXRTdGF0dXM7CisJ cmV0dXJuIG15V2FpdFN0YXR1czsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL3Byb2MuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCmluZGV4IDcxZTA1 NzI3ZTU0Li44OWRkNzU3ODM3NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9w cm9jLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKQEAgLTQ3MCw5ICs0NzAs OSBAQCBleHRlcm4gaW50CUdldFN0YXJ0dXBCdWZmZXJQaW5XYWl0QnVmSWQodm9pZCk7CiBl eHRlcm4gYm9vbCBIYXZlTkZyZWVQcm9jcyhpbnQgbiwgaW50ICpuZnJlZSk7CiBleHRlcm4g dm9pZCBQcm9jUmVsZWFzZUxvY2tzKGJvb2wgaXNDb21taXQpOwogCi1leHRlcm4gUHJvY1dh aXRTdGF0dXMgUHJvY1NsZWVwKExPQ0FMTE9DSyAqbG9jYWxsb2NrLAotCQkJCQkJCQlMb2Nr TWV0aG9kIGxvY2tNZXRob2RUYWJsZSwKLQkJCQkJCQkJYm9vbCBkb250V2FpdCk7CitleHRl cm4gUHJvY1dhaXRTdGF0dXMgSm9pbldhaXRRdWV1ZShMT0NBTExPQ0sgKmxvY2FsbG9jaywK KwkJCQkJCQkJCUxvY2tNZXRob2QgbG9ja01ldGhvZFRhYmxlLCBib29sIGRvbnRXYWl0KTsK K2V4dGVybiBQcm9jV2FpdFN0YXR1cyBQcm9jU2xlZXAoTE9DQUxMT0NLICpsb2NhbGxvY2sp OwogZXh0ZXJuIHZvaWQgUHJvY1dha2V1cChQR1BST0MgKnByb2MsIFByb2NXYWl0U3RhdHVz IHdhaXRTdGF0dXMpOwogZXh0ZXJuIHZvaWQgUHJvY0xvY2tXYWtldXAoTG9ja01ldGhvZCBs b2NrTWV0aG9kVGFibGUsIExPQ0sgKmxvY2spOwogZXh0ZXJuIHZvaWQgQ2hlY2tEZWFkTG9j a0FsZXJ0KHZvaWQpOwotLSAKMi4zOS4yCgo= --------------o37Oqr181xkA1D2P77ggyQYE--