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 1sQAfb-008GrH-Oe for pgsql-hackers@arkaria.postgresql.org; Sat, 06 Jul 2024 19:02:04 +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 1sQAfZ-005PjY-PV for pgsql-hackers@arkaria.postgresql.org; Sat, 06 Jul 2024 19:02:01 +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 1sQAfY-005PjP-UP for pgsql-hackers@lists.postgresql.org; Sat, 06 Jul 2024 19:02:01 +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 1sQAfT-000kCM-7Q for pgsql-hackers@postgresql.org; Sat, 06 Jul 2024 19:01:59 +0000 Received: from [192.168.1.110] (dsl-hkibng22-54f8db-125.dhcp.inet.fi [84.248.219.125]) (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 4WGfrC3JpHzyQR for ; Sat, 6 Jul 2024 22:01:46 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1720292509; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=eoxFy9OHPL7F/hY9Yj3+7rhsa6Lnl9GmPAan5Bi4ycM=; b=hfnI3LCyp7XVG53MFDWKNwWIk1OnYezrZz6B9M55J8xmyyqzOG3gTWWqn57pTZYSVVgPaC ymZzdGZsIecNOoVXVoLBlwInfC/p3iHryJ3Zguc7fUUvU3wqxIOftMG2LKd8b8gTavaKN+ IbvkA1iggkaT5dNrhPc51yTXb8E/dUc= ARC-Seal: i=1; s=meesny; d=iki.fi; t=1720292509; a=rsa-sha256; cv=none; b=rzVLe4z5g0yC3a0wNH6QJSywHq8kqBq58q/ZlPfRzUKn1MvzYrDiNqLvbKYrMXJcxQ5iGH ZjDUBWX7y0Y0kv0w2wqNMEXBowbrJ/tCyKYIZZOku0IpSJgAxkXTayzfERZdC3K/OmWqyL mDmtaU6HxII5JYUqxwuv/wZycf5pfKY= ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1720292509; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=eoxFy9OHPL7F/hY9Yj3+7rhsa6Lnl9GmPAan5Bi4ycM=; b=wEijl8zwOjzaQw0rmsSqtAPjzJvQJb7Rjpc11X0sx5mYKTVgBtbGXKj/9T/TuKzLJhYRuS MgtJgnkgdCA1xy5uqnB6RCmjGnkhRpxu4h+yjZYPNSqdM/FKikghrZcSuTKUbXSqSTGsJd BrPyb+TBn+B/wyLdrrzjcGgf7kNxksE= Content-Type: multipart/mixed; boundary="------------PmDk1j5rqhg6tB6Y3L8i6GUA" Message-ID: <835232c0-a5f7-4f20-b95b-5b56ba57d741@iki.fi> Date: Sat, 6 Jul 2024 22:01:44 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US From: Heikki Linnakangas Subject: Refactoring postmaster's code to cleanup after child exit To: "pgsql-hackers@postgresql.org" 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. --------------PmDk1j5rqhg6tB6Y3L8i6GUA Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Reading through postmaster code, I spotted some refactoring opportunities to make it slightly more readable. Currently, when a child process exits, the postmaster first scans through BackgroundWorkerList to see if it was a bgworker process. If not found, it scans through the BackendList to see if it was a backend process (which it really should be then). That feels a bit silly, because every running background worker process also has an entry in BackendList. There's a lot of duplication between CleanupBackgroundWorker and CleanupBackend. Before commit 8a02b3d732, we used to created Backend entries only for background worker processes that connected to a database, not for other background worker processes. I think that's why we have the code structure we have. But now that we have a Backend entry for all bgworker processes, it's more natural to have single function to deal with both regular backends and bgworkers. So I came up with the attached patches. This doesn't make any meaningful user-visible changes, except for some incidental changes in log messages (see commit message for details). -- Heikki Linnakangas Neon (https://neon.tech) --------------PmDk1j5rqhg6tB6Y3L8i6GUA Content-Type: text/x-patch; charset=UTF-8; name="v1-0001-Fix-outdated-comment-all-running-bgworkers-are-in.patch" Content-Disposition: attachment; filename*0="v1-0001-Fix-outdated-comment-all-running-bgworkers-are-in.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBkZDBlZTg1MzNhM2FiNWQwMzdjYTdjMDcwYmY4OWFkOTRjOTZkNGIyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgNiBKdWwgMjAyNCAyMDo1NToxOSArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjEgMS80XSBGaXggb3V0ZGF0ZWQgY29tbWVudDsgYWxsIHJ1bm5p bmcgYmd3b3JrZXJzIGFyZSBpbgogQmFja2VuZExpc3QKCkJlZm9yZSBjb21taXQgOGEwMmIz ZDczMiwgb25seSBiZ3dvcmtlcnMgdGhhdCBjb25uZWN0ZWQgdG8gYSBkYXRhYmFzZQpoYWQg YW4gZW50cnkgaW4gdGhlIEJhY2tlbmRsaXN0LiBDb21taXQgOGEwMmIzZDczMiBjaGFuZ2Vk IHRoYXQsIGJ1dApmb3Jnb3QgdG8gdXBkYXRlIHRoaXMgY29tbWVudC4KLS0tCiBzcmMvaW5j bHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5oIHwgOCArKysrLS0tLQogMSBm aWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5oIGIvc3Jj L2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaAppbmRleCA5MTA2YTBl ZjNmLi42MWJhNTQxMTdhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jn d29ya2VyX2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3b3Jr ZXJfaW50ZXJuYWxzLmgKQEAgLTI2LDE0ICsyNiwxNCBAQAogLyoKICAqIExpc3Qgb2YgYmFj a2dyb3VuZCB3b3JrZXJzLCBwcml2YXRlIHRvIHBvc3RtYXN0ZXIuCiAgKgotICogQSB3b3Jr ZXIgdGhhdCByZXF1ZXN0cyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gZHVyaW5nIHJlZ2lzdHJh dGlvbiB3aWxsIGhhdmUKLSAqIHJ3X2JhY2tlbmQgc2V0LCBhbmQgd2lsbCBiZSBwcmVzZW50 IGluIEJhY2tlbmRMaXN0LiAgTm90ZTogZG8gbm90IHJlbHkgb24KLSAqIHJ3X2JhY2tlbmQg YmVpbmcgbm9uLU5VTEwgZm9yIHNobWVtLWNvbm5lY3RlZCB3b3JrZXJzIQorICogQWxsIHdv cmtlcnMgdGhhdCBhcmUgY3VycmVudGx5IHJ1bm5pbmcgd2lsbCBoYXZlIHJ3X2JhY2tlbmQg c2V0LCBhbmQgd2lsbAorICogYmUgcHJlc2VudCBpbiBCYWNrZW5kTGlzdC4KICAqLwogdHlw ZWRlZiBzdHJ1Y3QgUmVnaXN0ZXJlZEJnV29ya2VyCiB7CiAJQmFja2dyb3VuZFdvcmtlciBy d193b3JrZXI7IC8qIGl0cyByZWdpc3RyeSBlbnRyeSAqLwotCXN0cnVjdCBia2VuZCAqcndf YmFja2VuZDsJLyogaXRzIEJhY2tlbmRMaXN0IGVudHJ5LCBvciBOVUxMICovCisJc3RydWN0 IGJrZW5kICpyd19iYWNrZW5kOwkvKiBpdHMgQmFja2VuZExpc3QgZW50cnksIG9yIE5VTEwg aWYgbm90CisJCQkJCQkJCSAqIHJ1bm5pbmcgKi8KIAlwaWRfdAkJcndfcGlkOwkJCS8qIDAg aWYgbm90IHJ1bm5pbmcgKi8KIAlpbnQJCQlyd19jaGlsZF9zbG90OwogCVRpbWVzdGFtcFR6 IHJ3X2NyYXNoZWRfYXQ7CS8qIGlmIG5vdCAwLCB0aW1lIGl0IGxhc3QgY3Jhc2hlZCAqLwot LSAKMi4zOS4yCgo= --------------PmDk1j5rqhg6tB6Y3L8i6GUA Content-Type: text/x-patch; charset=UTF-8; name="v1-0002-Minor-refactoring-of-assign_backendlist_entry.patch" Content-Disposition: attachment; filename*0="v1-0002-Minor-refactoring-of-assign_backendlist_entry.patch" Content-Transfer-Encoding: base64 RnJvbSBmMDY0NjAwMDYyODM1OWExY2UyYTAxYmUyNWZlOTkzYjUwYWViMzk2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgNiBKdWwgMjAyNCAyMDo1NToyOCArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjEgMi80XSBNaW5vciByZWZhY3RvcmluZyBvZiBhc3NpZ25fYmFj a2VuZGxpc3RfZW50cnkoKQoKTWFrZSBhc3NpZ25fYmFja2VuZGxpc3RfZW50cnkoKSByZXNw b25zaWJsZSBqdXN0IGZvciBhbGxvY2F0aW5nCkJhY2tlbmQgc3RydWN0LiBMaW5raW5nIGl0 IHRvIHRoZSBSZWdpc3RlcmVkQmdXb3JrZXIgaXMgdGhlIGNhbGxlcidzCnJlc3BvbnNpYmls aXR5IG5vdy4gU2VlbXMgbW9yZSBjbGVhciB0aGF0IHdheS4KLS0tCiBzcmMvYmFja2VuZC9w b3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyB8IDI3ICsrKysrKysrKysrKystLS0tLS0tLS0tLS0t LQogMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jIGIvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5kZXggNmY5NzRhOGQyMS4uYWM1 NDc5ODk2NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVy LmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKQEAgLTQyMiw3 ICs0MjIsNyBAQCBzdGF0aWMgdm9pZCBUZXJtaW5hdGVDaGlsZHJlbihpbnQgc2lnbmFsKTsK ICNkZWZpbmUgU2lnbmFsQ2hpbGRyZW4oc2lnKQkJCSAgIFNpZ25hbFNvbWVDaGlsZHJlbihz aWcsIEJBQ0tFTkRfVFlQRV9BTEwpCiAKIHN0YXRpYyBpbnQJQ291bnRDaGlsZHJlbihpbnQg dGFyZ2V0KTsKLXN0YXRpYyBib29sIGFzc2lnbl9iYWNrZW5kbGlzdF9lbnRyeShSZWdpc3Rl cmVkQmdXb3JrZXIgKnJ3KTsKK3N0YXRpYyBCYWNrZW5kICphc3NpZ25fYmFja2VuZGxpc3Rf ZW50cnkodm9pZCk7CiBzdGF0aWMgdm9pZCBtYXliZV9zdGFydF9iZ3dvcmtlcnModm9pZCk7 CiBzdGF0aWMgYm9vbCBDcmVhdGVPcHRzRmlsZShpbnQgYXJnYywgY2hhciAqYXJndltdLCBj aGFyICpmdWxscHJvZ25hbWUpOwogc3RhdGljIHBpZF90IFN0YXJ0Q2hpbGRQcm9jZXNzKEJh Y2tlbmRUeXBlIHR5cGUpOwpAQCAtNDE2MCw2ICs0MTYwLDcgQEAgTWF4TGl2ZVBvc3RtYXN0 ZXJDaGlsZHJlbih2b2lkKQogc3RhdGljIGJvb2wKIGRvX3N0YXJ0X2Jnd29ya2VyKFJlZ2lz dGVyZWRCZ1dvcmtlciAqcncpCiB7CisJQmFja2VuZCAgICAqYm47CiAJcGlkX3QJCXdvcmtl cl9waWQ7CiAKIAlBc3NlcnQocnctPnJ3X3BpZCA9PSAwKTsKQEAgLTQxNzQsMTEgKzQxNzUs MTQgQEAgZG9fc3RhcnRfYmd3b3JrZXIoUmVnaXN0ZXJlZEJnV29ya2VyICpydykKIAkgKiB0 cmllZCBhZ2FpbiByaWdodCBhd2F5LCBtb3N0IGxpa2VseSB3ZSdkIGZpbmQgb3Vyc2VsdmVz IGhpdHRpbmcgdGhlCiAJICogc2FtZSByZXNvdXJjZS1leGhhdXN0aW9uIGNvbmRpdGlvbi4K IAkgKi8KLQlpZiAoIWFzc2lnbl9iYWNrZW5kbGlzdF9lbnRyeShydykpCisJYm4gPSBhc3Np Z25fYmFja2VuZGxpc3RfZW50cnkoKTsKKwlpZiAoYm4gPT0gTlVMTCkKIAl7CiAJCXJ3LT5y d19jcmFzaGVkX2F0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwogCQlyZXR1cm4gZmFsc2U7 CiAJfQorCXJ3LT5yd19iYWNrZW5kID0gYm47CisJcnctPnJ3X2NoaWxkX3Nsb3QgPSBibi0+ Y2hpbGRfc2xvdDsKIAogCWVyZXBvcnQoREVCVUcxLAogCQkJKGVycm1zZ19pbnRlcm5hbCgi c3RhcnRpbmcgYmFja2dyb3VuZCB3b3JrZXIgcHJvY2VzcyBcIiVzXCIiLApAQCAtNDI1NCwx MiArNDI1OCwxMCBAQCBiZ3dvcmtlcl9zaG91bGRfc3RhcnRfbm93KEJnV29ya2VyU3RhcnRU aW1lIHN0YXJ0X3RpbWUpCiAgKiBBbGxvY2F0ZSB0aGUgQmFja2VuZCBzdHJ1Y3QgZm9yIGEg Y29ubmVjdGVkIGJhY2tncm91bmQgd29ya2VyLCBidXQgZG9uJ3QKICAqIGFkZCBpdCB0byB0 aGUgbGlzdCBvZiBiYWNrZW5kcyBqdXN0IHlldC4KICAqCi0gKiBPbiBmYWlsdXJlLCByZXR1 cm4gZmFsc2Ugd2l0aG91dCBjaGFuZ2luZyBhbnkgd29ya2VyIHN0YXRlLgotICoKLSAqIFNv bWUgaW5mbyBmcm9tIHRoZSBCYWNrZW5kIGlzIGNvcGllZCBpbnRvIHRoZSBwYXNzZWQgcncu CisgKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTC4KICAqLwotc3RhdGljIGJvb2wKLWFzc2ln bl9iYWNrZW5kbGlzdF9lbnRyeShSZWdpc3RlcmVkQmdXb3JrZXIgKnJ3KQorc3RhdGljIEJh Y2tlbmQgKgorYXNzaWduX2JhY2tlbmRsaXN0X2VudHJ5KHZvaWQpCiB7CiAJQmFja2VuZCAg ICAqYm47CiAKQEAgLTQyNzMsNyArNDI3NSw3IEBAIGFzc2lnbl9iYWNrZW5kbGlzdF9lbnRy eShSZWdpc3RlcmVkQmdXb3JrZXIgKnJ3KQogCQllcmVwb3J0KExPRywKIAkJCQkoZXJyY29k ZShFUlJDT0RFX0NPTkZJR1VSQVRJT05fTElNSVRfRVhDRUVERUQpLAogCQkJCSBlcnJtc2co Im5vIHNsb3QgYXZhaWxhYmxlIGZvciBuZXcgYmFja2dyb3VuZCB3b3JrZXIgcHJvY2VzcyIp KSk7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJLyoKQEAgLTQy ODcsNyArNDI4OSw3IEBAIGFzc2lnbl9iYWNrZW5kbGlzdF9lbnRyeShSZWdpc3RlcmVkQmdX b3JrZXIgKnJ3KQogCQllcmVwb3J0KExPRywKIAkJCQkoZXJyY29kZShFUlJDT0RFX0lOVEVS TkFMX0VSUk9SKSwKIAkJCQkgZXJybXNnKCJjb3VsZCBub3QgZ2VuZXJhdGUgcmFuZG9tIGNh bmNlbCBrZXkiKSkpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBOVUxMOwogCX0KIAog CWJuID0gcGFsbG9jX2V4dGVuZGVkKHNpemVvZihCYWNrZW5kKSwgTUNYVF9BTExPQ19OT19P T00pOwpAQCAtNDI5Niw3ICs0Mjk4LDcgQEAgYXNzaWduX2JhY2tlbmRsaXN0X2VudHJ5KFJl Z2lzdGVyZWRCZ1dvcmtlciAqcncpCiAJCWVyZXBvcnQoTE9HLAogCQkJCShlcnJjb2RlKEVS UkNPREVfT1VUX09GX01FTU9SWSksCiAJCQkJIGVycm1zZygib3V0IG9mIG1lbW9yeSIpKSk7 Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJYm4tPmNhbmNlbF9r ZXkgPSBNeUNhbmNlbEtleTsKQEAgLTQzMDUsMTAgKzQzMDcsNyBAQCBhc3NpZ25fYmFja2Vu ZGxpc3RfZW50cnkoUmVnaXN0ZXJlZEJnV29ya2VyICpydykKIAlibi0+ZGVhZF9lbmQgPSBm YWxzZTsKIAlibi0+Ymd3b3JrZXJfbm90aWZ5ID0gZmFsc2U7CiAKLQlydy0+cndfYmFja2Vu ZCA9IGJuOwotCXJ3LT5yd19jaGlsZF9zbG90ID0gYm4tPmNoaWxkX3Nsb3Q7Ci0KLQlyZXR1 cm4gdHJ1ZTsKKwlyZXR1cm4gYm47CiB9CiAKIC8qCi0tIAoyLjM5LjIKCg== --------------PmDk1j5rqhg6tB6Y3L8i6GUA Content-Type: text/x-patch; charset=UTF-8; name="v1-0003-Make-BackgroundWorkerList-doubly-linked.patch" Content-Disposition: attachment; filename="v1-0003-Make-BackgroundWorkerList-doubly-linked.patch" Content-Transfer-Encoding: base64 RnJvbSBkOTg3MzY3MDM4MWYzYzUyM2Q0YzMyZGQ1OGQ0NzVmMmVhZWI3YTk0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgNiBKdWwgMjAyNCAyMDo1Njo1MSArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjEgMy80XSBNYWtlIEJhY2tncm91bmRXb3JrZXJMaXN0IGRvdWJs eS1saW5rZWQKClRoaXMgYWxsb3dzIEZvcmdldEJhY2tncm91bmRXb3JrZXIoKSBhbmQgUmVw b3J0QmFja2dyb3VuZFdvcmtlckV4aXQoKQp0byB0YWtlIGEgUmVnaXN0ZXJlZEJnV29ya2Vy IHBvaW50ZXIgYXMgYXJndW1lbnQsIHJhdGhlciB0aGFuIGEgbGlzdAppdGVyYXRvci4gVGhh dCBmZWVscyBhIGxpdHRsZSBtb3JlIG5hdHVyYWwuIEJ1dCBtb3JlIGltcG9ydGFudGx5LCB0 aGlzCnBhdmVzIHRoZSB3YXkgZm9yIG1vcmUgcmVmYWN0b3JpbmcgaW4gdGhlIG5leHQgY29t bWl0LgotLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYyAgICAgICAgICAg fCA2MiArKysrKysrKysrLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9z dG1hc3Rlci5jICAgICAgICAgfCA0MCArKysrKystLS0tLS0tCiBzcmMvaW5jbHVkZS9wb3N0 bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5oIHwgMTAgKystLQogMyBmaWxlcyBjaGFuZ2Vk LCA1NCBpbnNlcnRpb25zKCspLCA1OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L2Jnd29ya2VyLmMKaW5kZXggNzc3MDdiYjM4NC4uOTgxZDgxNzdiMCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvYmd3b3JrZXIuYwpAQCAtMzcsNyArMzcsNyBAQAogLyoKICAqIFRoZSBwb3N0 bWFzdGVyJ3MgbGlzdCBvZiByZWdpc3RlcmVkIGJhY2tncm91bmQgd29ya2VycywgaW4gcHJp dmF0ZSBtZW1vcnkuCiAgKi8KLXNsaXN0X2hlYWQJQmFja2dyb3VuZFdvcmtlckxpc3QgPSBT TElTVF9TVEFUSUNfSU5JVChCYWNrZ3JvdW5kV29ya2VyTGlzdCk7CitkbGlzdF9oZWFkCUJh Y2tncm91bmRXb3JrZXJMaXN0ID0gRExJU1RfU1RBVElDX0lOSVQoQmFja2dyb3VuZFdvcmtl ckxpc3QpOwogCiAvKgogICogQmFja2dyb3VuZFdvcmtlclNsb3RzIGV4aXN0IGluIHNoYXJl ZCBtZW1vcnkgYW5kIGNhbiBiZSBhY2Nlc3NlZCAodmlhCkBAIC0xNjgsNyArMTY4LDcgQEAg QmFja2dyb3VuZFdvcmtlclNobWVtSW5pdCh2b2lkKQogCQkJCQkJCQkJCSAgICZmb3VuZCk7 CiAJaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKIAl7Ci0JCXNsaXN0X2l0ZXIJc2l0ZXI7CisJ CWRsaXN0X2l0ZXIJaXRlcjsKIAkJaW50CQkJc2xvdG5vID0gMDsKIAogCQlCYWNrZ3JvdW5k V29ya2VyRGF0YS0+dG90YWxfc2xvdHMgPSBtYXhfd29ya2VyX3Byb2Nlc3NlczsKQEAgLTE4 MSwxMiArMTgxLDEyIEBAIEJhY2tncm91bmRXb3JrZXJTaG1lbUluaXQodm9pZCkKIAkJICog Y29ycmVzcG9uZGVuY2UgYmV0d2VlbiB0aGUgcG9zdG1hc3RlcidzIHByaXZhdGUgbGlzdCBh bmQgdGhlIGFycmF5CiAJCSAqIGluIHNoYXJlZCBtZW1vcnkuCiAJCSAqLwotCQlzbGlzdF9m b3JlYWNoKHNpdGVyLCAmQmFja2dyb3VuZFdvcmtlckxpc3QpCisJCWRsaXN0X2ZvcmVhY2go aXRlciwgJkJhY2tncm91bmRXb3JrZXJMaXN0KQogCQl7CiAJCQlCYWNrZ3JvdW5kV29ya2Vy U2xvdCAqc2xvdCA9ICZCYWNrZ3JvdW5kV29ya2VyRGF0YS0+c2xvdFtzbG90bm9dOwogCQkJ UmVnaXN0ZXJlZEJnV29ya2VyICpydzsKIAotCQkJcncgPSBzbGlzdF9jb250YWluZXIoUmVn aXN0ZXJlZEJnV29ya2VyLCByd19sbm9kZSwgc2l0ZXIuY3VyKTsKKwkJCXJ3ID0gZGxpc3Rf Y29udGFpbmVyKFJlZ2lzdGVyZWRCZ1dvcmtlciwgcndfbG5vZGUsIGl0ZXIuY3VyKTsKIAkJ CUFzc2VydChzbG90bm8gPCBtYXhfd29ya2VyX3Byb2Nlc3Nlcyk7CiAJCQlzbG90LT5pbl91 c2UgPSB0cnVlOwogCQkJc2xvdC0+dGVybWluYXRlID0gZmFsc2U7CkBAIC0yMjAsMTMgKzIy MCwxMyBAQCBCYWNrZ3JvdW5kV29ya2VyU2htZW1Jbml0KHZvaWQpCiBzdGF0aWMgUmVnaXN0 ZXJlZEJnV29ya2VyICoKIEZpbmRSZWdpc3RlcmVkV29ya2VyQnlTbG90TnVtYmVyKGludCBz bG90bm8pCiB7Ci0Jc2xpc3RfaXRlcglzaXRlcjsKKwlkbGlzdF9pdGVyCWl0ZXI7CiAKLQlz bGlzdF9mb3JlYWNoKHNpdGVyLCAmQmFja2dyb3VuZFdvcmtlckxpc3QpCisJZGxpc3RfZm9y ZWFjaChpdGVyLCAmQmFja2dyb3VuZFdvcmtlckxpc3QpCiAJewogCQlSZWdpc3RlcmVkQmdX b3JrZXIgKnJ3OwogCi0JCXJ3ID0gc2xpc3RfY29udGFpbmVyKFJlZ2lzdGVyZWRCZ1dvcmtl ciwgcndfbG5vZGUsIHNpdGVyLmN1cik7CisJCXJ3ID0gZGxpc3RfY29udGFpbmVyKFJlZ2lz dGVyZWRCZ1dvcmtlciwgcndfbG5vZGUsIGl0ZXIuY3VyKTsKIAkJaWYgKHJ3LT5yd19zaG1l bV9zbG90ID09IHNsb3RubykKIAkJCXJldHVybiBydzsKIAl9CkBAIC00MTMsMjkgKzQxMywy NSBAQCBCYWNrZ3JvdW5kV29ya2VyU3RhdGVDaGFuZ2UoYm9vbCBhbGxvd19uZXdfd29ya2Vy cykKIAkJCQkoZXJybXNnX2ludGVybmFsKCJyZWdpc3RlcmluZyBiYWNrZ3JvdW5kIHdvcmtl ciBcIiVzXCIiLAogCQkJCQkJCQkgcnctPnJ3X3dvcmtlci5iZ3dfbmFtZSkpKTsKIAotCQlz bGlzdF9wdXNoX2hlYWQoJkJhY2tncm91bmRXb3JrZXJMaXN0LCAmcnctPnJ3X2xub2RlKTsK KwkJZGxpc3RfcHVzaF9oZWFkKCZCYWNrZ3JvdW5kV29ya2VyTGlzdCwgJnJ3LT5yd19sbm9k ZSk7CiAJfQogfQogCiAvKgogICogRm9yZ2V0IGFib3V0IGEgYmFja2dyb3VuZCB3b3JrZXIg dGhhdCdzIG5vIGxvbmdlciBuZWVkZWQuCiAgKgotICogVGhlIHdvcmtlciBtdXN0IGJlIGlk ZW50aWZpZWQgYnkgcGFzc2luZyBhbiBzbGlzdF9tdXRhYmxlX2l0ZXIgdGhhdAotICogcG9p bnRzIHRvIGl0LiAgVGhpcyBjb252ZW50aW9uIGFsbG93cyBkZWxldGlvbiBvZiB3b3JrZXJz IGR1cmluZwotICogc2VhcmNoZXMgb2YgdGhlIHdvcmtlciBsaXN0LCBhbmQgc2F2ZXMgaGF2 aW5nIHRvIHNlYXJjaCB0aGUgbGlzdCBhZ2Fpbi4KKyAqIE5PVEU6IFRoZSBlbnRyeSBpcyB1 bmxpbmtlZCBmcm9tIEJhY2tncm91bmRXb3JrZXJMaXN0LiAgSWYgdGhlIGNhbGxlciBpcwor ICogaXRlcmF0aW5nIHRocm91Z2ggaXQsIGJldHRlciB1c2UgYSBtdXRhYmxlIGl0ZXJhdG9y IQogICoKICAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igbm90aWZ5aW5nIGJnd19ub3Rp ZnlfcGlkLCBpZiBhcHByb3ByaWF0ZS4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUg aW52b2tlZCBvbmx5IGluIHRoZSBwb3N0bWFzdGVyLgogICovCiB2b2lkCi1Gb3JnZXRCYWNr Z3JvdW5kV29ya2VyKHNsaXN0X211dGFibGVfaXRlciAqY3VyKQorRm9yZ2V0QmFja2dyb3Vu ZFdvcmtlcihSZWdpc3RlcmVkQmdXb3JrZXIgKnJ3KQogewotCVJlZ2lzdGVyZWRCZ1dvcmtl ciAqcnc7CiAJQmFja2dyb3VuZFdvcmtlclNsb3QgKnNsb3Q7CiAKLQlydyA9IHNsaXN0X2Nv bnRhaW5lcihSZWdpc3RlcmVkQmdXb3JrZXIsIHJ3X2xub2RlLCBjdXItPmN1cik7Ci0KIAlB c3NlcnQocnctPnJ3X3NobWVtX3Nsb3QgPCBtYXhfd29ya2VyX3Byb2Nlc3Nlcyk7CiAJc2xv dCA9ICZCYWNrZ3JvdW5kV29ya2VyRGF0YS0+c2xvdFtydy0+cndfc2htZW1fc2xvdF07CiAJ QXNzZXJ0KHNsb3QtPmluX3VzZSk7CkBAIC00NTQsNyArNDUwLDcgQEAgRm9yZ2V0QmFja2dy b3VuZFdvcmtlcihzbGlzdF9tdXRhYmxlX2l0ZXIgKmN1cikKIAkJCShlcnJtc2dfaW50ZXJu YWwoInVucmVnaXN0ZXJpbmcgYmFja2dyb3VuZCB3b3JrZXIgXCIlc1wiIiwKIAkJCQkJCQkg cnctPnJ3X3dvcmtlci5iZ3dfbmFtZSkpKTsKIAotCXNsaXN0X2RlbGV0ZV9jdXJyZW50KGN1 cik7CisJZGxpc3RfZGVsZXRlKCZydy0+cndfbG5vZGUpOwogCXBmcmVlKHJ3KTsKIH0KIApA QCAtNDgwLDE3ICs0NzYsMTcgQEAgUmVwb3J0QmFja2dyb3VuZFdvcmtlclBJRChSZWdpc3Rl cmVkQmdXb3JrZXIgKnJ3KQogICogUmVwb3J0IHRoYXQgdGhlIFBJRCBvZiBhIGJhY2tncm91 bmQgd29ya2VyIGlzIG5vdyB6ZXJvIGJlY2F1c2UgYQogICogcHJldmlvdXNseS1ydW5uaW5n IGJhY2tncm91bmQgd29ya2VyIGhhcyBleGl0ZWQuCiAgKgorICogTk9URTogVGhlIGVudHJ5 IG1heSBiZSB1bmxpbmtlZCBmcm9tIEJhY2tncm91bmRXb3JrZXJMaXN0LiAgSWYgdGhlIGNh bGxlcgorICogaXMgaXRlcmF0aW5nIHRocm91Z2ggaXQsIGJldHRlciB1c2UgYSBtdXRhYmxl IGl0ZXJhdG9yIQorICoKICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVk IGZyb20gdGhlIHBvc3RtYXN0ZXIuCiAgKi8KIHZvaWQKLVJlcG9ydEJhY2tncm91bmRXb3Jr ZXJFeGl0KHNsaXN0X211dGFibGVfaXRlciAqY3VyKQorUmVwb3J0QmFja2dyb3VuZFdvcmtl ckV4aXQoUmVnaXN0ZXJlZEJnV29ya2VyICpydykKIHsKLQlSZWdpc3RlcmVkQmdXb3JrZXIg KnJ3OwogCUJhY2tncm91bmRXb3JrZXJTbG90ICpzbG90OwogCWludAkJCW5vdGlmeV9waWQ7 CiAKLQlydyA9IHNsaXN0X2NvbnRhaW5lcihSZWdpc3RlcmVkQmdXb3JrZXIsIHJ3X2xub2Rl LCBjdXItPmN1cik7Ci0KIAlBc3NlcnQocnctPnJ3X3NobWVtX3Nsb3QgPCBtYXhfd29ya2Vy X3Byb2Nlc3Nlcyk7CiAJc2xvdCA9ICZCYWNrZ3JvdW5kV29ya2VyRGF0YS0+c2xvdFtydy0+ cndfc2htZW1fc2xvdF07CiAJc2xvdC0+cGlkID0gcnctPnJ3X3BpZDsKQEAgLTUwNSw3ICs1 MDEsNyBAQCBSZXBvcnRCYWNrZ3JvdW5kV29ya2VyRXhpdChzbGlzdF9tdXRhYmxlX2l0ZXIg KmN1cikKIAkgKi8KIAlpZiAocnctPnJ3X3Rlcm1pbmF0ZSB8fAogCQlydy0+cndfd29ya2Vy LmJnd19yZXN0YXJ0X3RpbWUgPT0gQkdXX05FVkVSX1JFU1RBUlQpCi0JCUZvcmdldEJhY2tn cm91bmRXb3JrZXIoY3VyKTsKKwkJRm9yZ2V0QmFja2dyb3VuZFdvcmtlcihydyk7CiAKIAlp ZiAobm90aWZ5X3BpZCAhPSAwKQogCQlraWxsKG5vdGlmeV9waWQsIFNJR1VTUjEpOwpAQCAt NTE5LDEzICs1MTUsMTMgQEAgUmVwb3J0QmFja2dyb3VuZFdvcmtlckV4aXQoc2xpc3RfbXV0 YWJsZV9pdGVyICpjdXIpCiB2b2lkCiBCYWNrZ3JvdW5kV29ya2VyU3RvcE5vdGlmaWNhdGlv bnMocGlkX3QgcGlkKQogewotCXNsaXN0X2l0ZXIJc2l0ZXI7CisJZGxpc3RfaXRlcglpdGVy OwogCi0Jc2xpc3RfZm9yZWFjaChzaXRlciwgJkJhY2tncm91bmRXb3JrZXJMaXN0KQorCWRs aXN0X2ZvcmVhY2goaXRlciwgJkJhY2tncm91bmRXb3JrZXJMaXN0KQogCXsKIAkJUmVnaXN0 ZXJlZEJnV29ya2VyICpydzsKIAotCQlydyA9IHNsaXN0X2NvbnRhaW5lcihSZWdpc3RlcmVk QmdXb3JrZXIsIHJ3X2xub2RlLCBzaXRlci5jdXIpOworCQlydyA9IGRsaXN0X2NvbnRhaW5l cihSZWdpc3RlcmVkQmdXb3JrZXIsIHJ3X2xub2RlLCBpdGVyLmN1cik7CiAJCWlmIChydy0+ cndfd29ya2VyLmJnd19ub3RpZnlfcGlkID09IHBpZCkKIAkJCXJ3LT5yd193b3JrZXIuYmd3 X25vdGlmeV9waWQgPSAwOwogCX0KQEAgLTU0NiwxNCArNTQyLDE0IEBAIEJhY2tncm91bmRX b3JrZXJTdG9wTm90aWZpY2F0aW9ucyhwaWRfdCBwaWQpCiB2b2lkCiBGb3JnZXRVbnN0YXJ0 ZWRCYWNrZ3JvdW5kV29ya2Vycyh2b2lkKQogewotCXNsaXN0X211dGFibGVfaXRlciBpdGVy OworCWRsaXN0X211dGFibGVfaXRlciBpdGVyOwogCi0Jc2xpc3RfZm9yZWFjaF9tb2RpZnko aXRlciwgJkJhY2tncm91bmRXb3JrZXJMaXN0KQorCWRsaXN0X2ZvcmVhY2hfbW9kaWZ5KGl0 ZXIsICZCYWNrZ3JvdW5kV29ya2VyTGlzdCkKIAl7CiAJCVJlZ2lzdGVyZWRCZ1dvcmtlciAq cnc7CiAJCUJhY2tncm91bmRXb3JrZXJTbG90ICpzbG90OwogCi0JCXJ3ID0gc2xpc3RfY29u dGFpbmVyKFJlZ2lzdGVyZWRCZ1dvcmtlciwgcndfbG5vZGUsIGl0ZXIuY3VyKTsKKwkJcncg PSBkbGlzdF9jb250YWluZXIoUmVnaXN0ZXJlZEJnV29ya2VyLCByd19sbm9kZSwgaXRlci5j dXIpOwogCQlBc3NlcnQocnctPnJ3X3NobWVtX3Nsb3QgPCBtYXhfd29ya2VyX3Byb2Nlc3Nl cyk7CiAJCXNsb3QgPSAmQmFja2dyb3VuZFdvcmtlckRhdGEtPnNsb3RbcnctPnJ3X3NobWVt X3Nsb3RdOwogCkBAIC01NjQsNyArNTYwLDcgQEAgRm9yZ2V0VW5zdGFydGVkQmFja2dyb3Vu ZFdvcmtlcnModm9pZCkKIAkJCS8qIC4uLiB0aGVuIHphcCBpdCwgYW5kIG5vdGlmeSB0aGUg d2FpdGVyICovCiAJCQlpbnQJCQlub3RpZnlfcGlkID0gcnctPnJ3X3dvcmtlci5iZ3dfbm90 aWZ5X3BpZDsKIAotCQkJRm9yZ2V0QmFja2dyb3VuZFdvcmtlcigmaXRlcik7CisJCQlGb3Jn ZXRCYWNrZ3JvdW5kV29ya2VyKHJ3KTsKIAkJCWlmIChub3RpZnlfcGlkICE9IDApCiAJCQkJ a2lsbChub3RpZnlfcGlkLCBTSUdVU1IxKTsKIAkJfQpAQCAtNTg0LDEzICs1ODAsMTMgQEAg Rm9yZ2V0VW5zdGFydGVkQmFja2dyb3VuZFdvcmtlcnModm9pZCkKIHZvaWQKIFJlc2V0QmFj a2dyb3VuZFdvcmtlckNyYXNoVGltZXModm9pZCkKIHsKLQlzbGlzdF9tdXRhYmxlX2l0ZXIg aXRlcjsKKwlkbGlzdF9tdXRhYmxlX2l0ZXIgaXRlcjsKIAotCXNsaXN0X2ZvcmVhY2hfbW9k aWZ5KGl0ZXIsICZCYWNrZ3JvdW5kV29ya2VyTGlzdCkKKwlkbGlzdF9mb3JlYWNoX21vZGlm eShpdGVyLCAmQmFja2dyb3VuZFdvcmtlckxpc3QpCiAJewogCQlSZWdpc3RlcmVkQmdXb3Jr ZXIgKnJ3OwogCi0JCXJ3ID0gc2xpc3RfY29udGFpbmVyKFJlZ2lzdGVyZWRCZ1dvcmtlciwg cndfbG5vZGUsIGl0ZXIuY3VyKTsKKwkJcncgPSBkbGlzdF9jb250YWluZXIoUmVnaXN0ZXJl ZEJnV29ya2VyLCByd19sbm9kZSwgaXRlci5jdXIpOwogCiAJCWlmIChydy0+cndfd29ya2Vy LmJnd19yZXN0YXJ0X3RpbWUgPT0gQkdXX05FVkVSX1JFU1RBUlQpCiAJCXsKQEAgLTYwMSw3 ICs1OTcsNyBAQCBSZXNldEJhY2tncm91bmRXb3JrZXJDcmFzaFRpbWVzKHZvaWQpCiAJCQkg KiBwYXJhbGxlbF90ZXJtaW5hdGVfY291bnQgd2lsbCBnZXQgaW5jcmVtZW50ZWQgYWZ0ZXIg d2UndmUKIAkJCSAqIGFscmVhZHkgemVyb2VkIHBhcmFsbGVsX3JlZ2lzdGVyX2NvdW50LCB3 aGljaCB3b3VsZCBiZSBiYWQuKQogCQkJICovCi0JCQlGb3JnZXRCYWNrZ3JvdW5kV29ya2Vy KCZpdGVyKTsKKwkJCUZvcmdldEJhY2tncm91bmRXb3JrZXIocncpOwogCQl9CiAJCWVsc2UK IAkJewpAQCAtMTAzNiw3ICsxMDMyLDcgQEAgUmVnaXN0ZXJCYWNrZ3JvdW5kV29ya2VyKEJh Y2tncm91bmRXb3JrZXIgKndvcmtlcikKIAlydy0+cndfY3Jhc2hlZF9hdCA9IDA7CiAJcnct PnJ3X3Rlcm1pbmF0ZSA9IGZhbHNlOwogCi0Jc2xpc3RfcHVzaF9oZWFkKCZCYWNrZ3JvdW5k V29ya2VyTGlzdCwgJnJ3LT5yd19sbm9kZSk7CisJZGxpc3RfcHVzaF9oZWFkKCZCYWNrZ3Jv dW5kV29ya2VyTGlzdCwgJnJ3LT5yd19sbm9kZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvcG9zdG1hc3Rlci5jCmluZGV4IGFjNTQ3OTg5NjUuLmYzNzZkM2I3N2IgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisrKyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC0xNTQzLDcgKzE1NDMsNyBAQCBE ZXRlcm1pbmVTbGVlcFRpbWUodm9pZCkKIAogCWlmIChIYXZlQ3Jhc2hlZFdvcmtlcikKIAl7 Ci0JCXNsaXN0X211dGFibGVfaXRlciBzaXRlcjsKKwkJZGxpc3RfbXV0YWJsZV9pdGVyIGl0 ZXI7CiAKIAkJLyoKIAkJICogV2hlbiB0aGVyZSBhcmUgY3Jhc2hlZCBiZ3dvcmtlcnMsIHdl IHNsZWVwIGp1c3QgbG9uZyBlbm91Z2ggdGhhdApAQCAtMTU1MSwxMiArMTU1MSwxMiBAQCBE ZXRlcm1pbmVTbGVlcFRpbWUodm9pZCkKIAkJICogZGV0ZXJtaW5lIHRoZSBtaW5pbXVtIG9m IGFsbCB3YWtldXAgdGltZXMgYWNjb3JkaW5nIHRvIG1vc3QgcmVjZW50CiAJCSAqIGNyYXNo IHRpbWUgYW5kIHJlcXVlc3RlZCByZXN0YXJ0IGludGVydmFsLgogCQkgKi8KLQkJc2xpc3Rf Zm9yZWFjaF9tb2RpZnkoc2l0ZXIsICZCYWNrZ3JvdW5kV29ya2VyTGlzdCkKKwkJZGxpc3Rf Zm9yZWFjaF9tb2RpZnkoaXRlciwgJkJhY2tncm91bmRXb3JrZXJMaXN0KQogCQl7CiAJCQlS ZWdpc3RlcmVkQmdXb3JrZXIgKnJ3OwogCQkJVGltZXN0YW1wVHogdGhpc193YWtldXA7CiAK LQkJCXJ3ID0gc2xpc3RfY29udGFpbmVyKFJlZ2lzdGVyZWRCZ1dvcmtlciwgcndfbG5vZGUs IHNpdGVyLmN1cik7CisJCQlydyA9IGRsaXN0X2NvbnRhaW5lcihSZWdpc3RlcmVkQmdXb3Jr ZXIsIHJ3X2xub2RlLCBpdGVyLmN1cik7CiAKIAkJCWlmIChydy0+cndfY3Jhc2hlZF9hdCA9 PSAwKQogCQkJCWNvbnRpbnVlOwpAQCAtMTU2NCw3ICsxNTY0LDcgQEAgRGV0ZXJtaW5lU2xl ZXBUaW1lKHZvaWQpCiAJCQlpZiAocnctPnJ3X3dvcmtlci5iZ3dfcmVzdGFydF90aW1lID09 IEJHV19ORVZFUl9SRVNUQVJUCiAJCQkJfHwgcnctPnJ3X3Rlcm1pbmF0ZSkKIAkJCXsKLQkJ CQlGb3JnZXRCYWNrZ3JvdW5kV29ya2VyKCZzaXRlcik7CisJCQkJRm9yZ2V0QmFja2dyb3Vu ZFdvcmtlcihydyk7CiAJCQkJY29udGludWU7CiAJCQl9CiAKQEAgLTI2OTYsMTMgKzI2OTYs MTMgQEAgQ2xlYW51cEJhY2tncm91bmRXb3JrZXIoaW50IHBpZCwKIAkJCQkJCWludCBleGl0 c3RhdHVzKSAvKiBjaGlsZCdzIGV4aXQgc3RhdHVzICovCiB7CiAJY2hhcgkJbmFtZWJ1ZltN QVhQR1BBVEhdOwotCXNsaXN0X211dGFibGVfaXRlciBpdGVyOworCWRsaXN0X211dGFibGVf aXRlciBpdGVyOwogCi0Jc2xpc3RfZm9yZWFjaF9tb2RpZnkoaXRlciwgJkJhY2tncm91bmRX b3JrZXJMaXN0KQorCWRsaXN0X2ZvcmVhY2hfbW9kaWZ5KGl0ZXIsICZCYWNrZ3JvdW5kV29y a2VyTGlzdCkKIAl7CiAJCVJlZ2lzdGVyZWRCZ1dvcmtlciAqcnc7CiAKLQkJcncgPSBzbGlz dF9jb250YWluZXIoUmVnaXN0ZXJlZEJnV29ya2VyLCByd19sbm9kZSwgaXRlci5jdXIpOwor CQlydyA9IGRsaXN0X2NvbnRhaW5lcihSZWdpc3RlcmVkQmdXb3JrZXIsIHJ3X2xub2RlLCBp dGVyLmN1cik7CiAKIAkJaWYgKHJ3LT5yd19waWQgIT0gcGlkKQogCQkJY29udGludWU7CkBA IC0yNzY4LDcgKzI3NjgsNyBAQCBDbGVhbnVwQmFja2dyb3VuZFdvcmtlcihpbnQgcGlkLAog CQlydy0+cndfYmFja2VuZCA9IE5VTEw7CiAJCXJ3LT5yd19waWQgPSAwOwogCQlydy0+cndf Y2hpbGRfc2xvdCA9IDA7Ci0JCVJlcG9ydEJhY2tncm91bmRXb3JrZXJFeGl0KCZpdGVyKTsJ LyogcmVwb3J0IGNoaWxkIGRlYXRoICovCisJCVJlcG9ydEJhY2tncm91bmRXb3JrZXJFeGl0 KHJ3KTsgLyogcmVwb3J0IGNoaWxkIGRlYXRoICovCiAKIAkJTG9nQ2hpbGRFeGl0KEVYSVRf U1RBVFVTXzAoZXhpdHN0YXR1cykgPyBERUJVRzEgOiBMT0csCiAJCQkJCSBuYW1lYnVmLCBw aWQsIGV4aXRzdGF0dXMpOwpAQCAtMjg3Myw4ICsyODczLDggQEAgQ2xlYW51cEJhY2tlbmQo aW50IHBpZCwKIHN0YXRpYyB2b2lkCiBIYW5kbGVDaGlsZENyYXNoKGludCBwaWQsIGludCBl eGl0c3RhdHVzLCBjb25zdCBjaGFyICpwcm9jbmFtZSkKIHsKLQlkbGlzdF9tdXRhYmxlX2l0 ZXIgaXRlcjsKLQlzbGlzdF9pdGVyCXNpdGVyOworCWRsaXN0X2l0ZXIJaXRlcjsKKwlkbGlz dF9tdXRhYmxlX2l0ZXIgbWl0ZXI7CiAJQmFja2VuZCAgICAqYnA7CiAJYm9vbAkJdGFrZV9h Y3Rpb247CiAKQEAgLTI4OTYsMTEgKzI4OTYsMTEgQEAgSGFuZGxlQ2hpbGRDcmFzaChpbnQg cGlkLCBpbnQgZXhpdHN0YXR1cywgY29uc3QgY2hhciAqcHJvY25hbWUpCiAJfQogCiAJLyog UHJvY2VzcyBiYWNrZ3JvdW5kIHdvcmtlcnMuICovCi0Jc2xpc3RfZm9yZWFjaChzaXRlciwg JkJhY2tncm91bmRXb3JrZXJMaXN0KQorCWRsaXN0X2ZvcmVhY2goaXRlciwgJkJhY2tncm91 bmRXb3JrZXJMaXN0KQogCXsKIAkJUmVnaXN0ZXJlZEJnV29ya2VyICpydzsKIAotCQlydyA9 IHNsaXN0X2NvbnRhaW5lcihSZWdpc3RlcmVkQmdXb3JrZXIsIHJ3X2xub2RlLCBzaXRlci5j dXIpOworCQlydyA9IGRsaXN0X2NvbnRhaW5lcihSZWdpc3RlcmVkQmdXb3JrZXIsIHJ3X2xu b2RlLCBpdGVyLmN1cik7CiAJCWlmIChydy0+cndfcGlkID09IDApCiAJCQljb250aW51ZTsJ CQkvKiBub3QgcnVubmluZyAqLwogCQlpZiAocnctPnJ3X3BpZCA9PSBwaWQpCkBAIC0yOTMz LDkgKzI5MzMsOSBAQCBIYW5kbGVDaGlsZENyYXNoKGludCBwaWQsIGludCBleGl0c3RhdHVz LCBjb25zdCBjaGFyICpwcm9jbmFtZSkKIAl9CiAKIAkvKiBQcm9jZXNzIHJlZ3VsYXIgYmFj a2VuZHMgKi8KLQlkbGlzdF9mb3JlYWNoX21vZGlmeShpdGVyLCAmQmFja2VuZExpc3QpCisJ ZGxpc3RfZm9yZWFjaF9tb2RpZnkobWl0ZXIsICZCYWNrZW5kTGlzdCkKIAl7Ci0JCWJwID0g ZGxpc3RfY29udGFpbmVyKEJhY2tlbmQsIGVsZW0sIGl0ZXIuY3VyKTsKKwkJYnAgPSBkbGlz dF9jb250YWluZXIoQmFja2VuZCwgZWxlbSwgbWl0ZXIuY3VyKTsKIAogCQlpZiAoYnAtPnBp ZCA9PSBwaWQpCiAJCXsKQEAgLTI5NDksNyArMjk0OSw3IEBAIEhhbmRsZUNoaWxkQ3Jhc2go aW50IHBpZCwgaW50IGV4aXRzdGF0dXMsIGNvbnN0IGNoYXIgKnByb2NuYW1lKQogCQkJCVNo bWVtQmFja2VuZEFycmF5UmVtb3ZlKGJwKTsKICNlbmRpZgogCQkJfQotCQkJZGxpc3RfZGVs ZXRlKGl0ZXIuY3VyKTsKKwkJCWRsaXN0X2RlbGV0ZShtaXRlci5jdXIpOwogCQkJcGZyZWUo YnApOwogCQkJLyogS2VlcCBsb29waW5nIHNvIHdlIGNhbiBzaWduYWwgcmVtYWluaW5nIGJh Y2tlbmRzICovCiAJCX0KQEAgLTQzMjcsNyArNDMyNyw3IEBAIG1heWJlX3N0YXJ0X2Jnd29y a2Vycyh2b2lkKQogI2RlZmluZSBNQVhfQkdXT1JLRVJTX1RPX0xBVU5DSCAxMDAKIAlpbnQJ CQludW1fbGF1bmNoZWQgPSAwOwogCVRpbWVzdGFtcFR6IG5vdyA9IDA7Ci0Jc2xpc3RfbXV0 YWJsZV9pdGVyIGl0ZXI7CisJZGxpc3RfbXV0YWJsZV9pdGVyIGl0ZXI7CiAKIAkvKgogCSAq IER1cmluZyBjcmFzaCByZWNvdmVyeSwgd2UgaGF2ZSBubyBuZWVkIHRvIGJlIGNhbGxlZCB1 bnRpbCB0aGUgc3RhdGUKQEAgLTQzNDQsMTEgKzQzNDQsMTEgQEAgbWF5YmVfc3RhcnRfYmd3 b3JrZXJzKHZvaWQpCiAJU3RhcnRXb3JrZXJOZWVkZWQgPSBmYWxzZTsKIAlIYXZlQ3Jhc2hl ZFdvcmtlciA9IGZhbHNlOwogCi0Jc2xpc3RfZm9yZWFjaF9tb2RpZnkoaXRlciwgJkJhY2tn cm91bmRXb3JrZXJMaXN0KQorCWRsaXN0X2ZvcmVhY2hfbW9kaWZ5KGl0ZXIsICZCYWNrZ3Jv dW5kV29ya2VyTGlzdCkKIAl7CiAJCVJlZ2lzdGVyZWRCZ1dvcmtlciAqcnc7CiAKLQkJcncg PSBzbGlzdF9jb250YWluZXIoUmVnaXN0ZXJlZEJnV29ya2VyLCByd19sbm9kZSwgaXRlci5j dXIpOworCQlydyA9IGRsaXN0X2NvbnRhaW5lcihSZWdpc3RlcmVkQmdXb3JrZXIsIHJ3X2xu b2RlLCBpdGVyLmN1cik7CiAKIAkJLyogaWdub3JlIGlmIGFscmVhZHkgcnVubmluZyAqLwog CQlpZiAocnctPnJ3X3BpZCAhPSAwKQpAQCAtNDM1Nyw3ICs0MzU3LDcgQEAgbWF5YmVfc3Rh cnRfYmd3b3JrZXJzKHZvaWQpCiAJCS8qIGlmIG1hcmtlZCBmb3IgZGVhdGgsIGNsZWFuIHVw IGFuZCByZW1vdmUgZnJvbSBsaXN0ICovCiAJCWlmIChydy0+cndfdGVybWluYXRlKQogCQl7 Ci0JCQlGb3JnZXRCYWNrZ3JvdW5kV29ya2VyKCZpdGVyKTsKKwkJCUZvcmdldEJhY2tncm91 bmRXb3JrZXIocncpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtNDM3Niw3ICs0Mzc2LDcg QEAgbWF5YmVfc3RhcnRfYmd3b3JrZXJzKHZvaWQpCiAKIAkJCQlub3RpZnlfcGlkID0gcnct PnJ3X3dvcmtlci5iZ3dfbm90aWZ5X3BpZDsKIAotCQkJCUZvcmdldEJhY2tncm91bmRXb3Jr ZXIoJml0ZXIpOworCQkJCUZvcmdldEJhY2tncm91bmRXb3JrZXIocncpOwogCiAJCQkJLyog UmVwb3J0IHdvcmtlciBpcyBnb25lIG5vdy4gKi8KIAkJCQlpZiAobm90aWZ5X3BpZCAhPSAw KQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5h bHMuaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmgKaW5k ZXggNjFiYTU0MTE3YS4uZTU1ZTM4YWY2NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9z dG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFz dGVyL2Jnd29ya2VyX2ludGVybmFscy5oCkBAIC0zOSwxNyArMzksMTcgQEAgdHlwZWRlZiBz dHJ1Y3QgUmVnaXN0ZXJlZEJnV29ya2VyCiAJVGltZXN0YW1wVHogcndfY3Jhc2hlZF9hdDsJ LyogaWYgbm90IDAsIHRpbWUgaXQgbGFzdCBjcmFzaGVkICovCiAJaW50CQkJcndfc2htZW1f c2xvdDsKIAlib29sCQlyd190ZXJtaW5hdGU7Ci0Jc2xpc3Rfbm9kZQlyd19sbm9kZTsJCS8q IGxpc3QgbGluayAqLworCWRsaXN0X25vZGUJcndfbG5vZGU7CQkvKiBsaXN0IGxpbmsgKi8K IH0gUmVnaXN0ZXJlZEJnV29ya2VyOwogCi1leHRlcm4gUEdETExJTVBPUlQgc2xpc3RfaGVh ZCBCYWNrZ3JvdW5kV29ya2VyTGlzdDsKK2V4dGVybiBQR0RMTElNUE9SVCBkbGlzdF9oZWFk IEJhY2tncm91bmRXb3JrZXJMaXN0OwogCiBleHRlcm4gU2l6ZSBCYWNrZ3JvdW5kV29ya2Vy U2htZW1TaXplKHZvaWQpOwogZXh0ZXJuIHZvaWQgQmFja2dyb3VuZFdvcmtlclNobWVtSW5p dCh2b2lkKTsKIGV4dGVybiB2b2lkIEJhY2tncm91bmRXb3JrZXJTdGF0ZUNoYW5nZShib29s IGFsbG93X25ld193b3JrZXJzKTsKLWV4dGVybiB2b2lkIEZvcmdldEJhY2tncm91bmRXb3Jr ZXIoc2xpc3RfbXV0YWJsZV9pdGVyICpjdXIpOwotZXh0ZXJuIHZvaWQgUmVwb3J0QmFja2dy b3VuZFdvcmtlclBJRChSZWdpc3RlcmVkQmdXb3JrZXIgKik7Ci1leHRlcm4gdm9pZCBSZXBv cnRCYWNrZ3JvdW5kV29ya2VyRXhpdChzbGlzdF9tdXRhYmxlX2l0ZXIgKmN1cik7CitleHRl cm4gdm9pZCBGb3JnZXRCYWNrZ3JvdW5kV29ya2VyKFJlZ2lzdGVyZWRCZ1dvcmtlciAqcncp OworZXh0ZXJuIHZvaWQgUmVwb3J0QmFja2dyb3VuZFdvcmtlclBJRChSZWdpc3RlcmVkQmdX b3JrZXIgKnJ3KTsKK2V4dGVybiB2b2lkIFJlcG9ydEJhY2tncm91bmRXb3JrZXJFeGl0KFJl Z2lzdGVyZWRCZ1dvcmtlciAqcncpOwogZXh0ZXJuIHZvaWQgQmFja2dyb3VuZFdvcmtlclN0 b3BOb3RpZmljYXRpb25zKHBpZF90IHBpZCk7CiBleHRlcm4gdm9pZCBGb3JnZXRVbnN0YXJ0 ZWRCYWNrZ3JvdW5kV29ya2Vycyh2b2lkKTsKIGV4dGVybiB2b2lkIFJlc2V0QmFja2dyb3Vu ZFdvcmtlckNyYXNoVGltZXModm9pZCk7Ci0tIAoyLjM5LjIKCg== --------------PmDk1j5rqhg6tB6Y3L8i6GUA Content-Type: text/x-patch; charset=UTF-8; name="v1-0004-Refactor-code-to-handle-death-of-a-backend-or-bgw.patch" Content-Disposition: attachment; filename*0="v1-0004-Refactor-code-to-handle-death-of-a-backend-or-bgw.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA4YmE2MTgzNDRhMTNiMTY2ZWI4ZjM0M2Q1YTNjNzMwYTNlYjNmZWIwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgNiBKdWwgMjAyNCAyMTo0OTowMCArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjEgNC80XSBSZWZhY3RvciBjb2RlIHRvIGhhbmRsZSBkZWF0aCBv ZiBhIGJhY2tlbmQgb3IgYmd3b3JrZXIKIGluIHBvc3RtYXN0ZXIKCkN1cnJlbnRseSwgd2hl biBhIGNoaWxkIHByb2Nlc3MgZXhpdHMsIHRoZSBwb3N0bWFzdGVyIGZpcnN0IHNjYW5zCnRo cm91Z2ggQmFja2dyb3VuZFdvcmtlckxpc3QsIHRvIHNlZSBpZiBpdCB0aGUgY2hpbGQgcHJv Y2VzcyB3YXMgYQpiYWNrZ3JvdW5kIHdvcmtlci4gSWYgbm90IGZvdW5kLCB0aGVuIGl0IHNj YW5zIHRocm91Z2ggQmFja2VuZExpc3QgdG8Kc2VlIGlmIGl0IHdhcyBhIHJlZ3VsYXIgYmFj a2VuZC4gVGhhdCBsZWFkcyB0byBzb21lIGR1cGxpY2F0aW9uCmJldHdlZW4gdGhlIGJnd29y a2VyIGFuZCByZWd1bGFyIGJhY2tlbmQgY2xlYW51cCBjb2RlLCBhcyBib3RoIGhhdmUgYW4K ZW50cnkgaW4gdGhlIEJhY2tlbmRMaXN0IHRoYXQgbmVlZHMgdG8gYmUgY2xlYW5lZCB1cCBp biB0aGUgc2FtZSB3YXkuClJlZmFjdG9yIHRoYXQgc28gdGhhdCB3ZSBzY2FuIGp1c3QgdGhl IEJhY2tlbmRMaXN0IHRvIGZpbmQgdGhlIGNoaWxkCnByb2Nlc3MsIGFuZCBpZiBpdCB3YXMg YSBiYWNrZ3JvdW5kIHdvcmtlciwgZG8gdGhlIGFkZGl0aW9uYWwKYmd3b3JrZXItc3BlY2lm aWMgY2xlYW51cCBpbiBhZGRpdGlvbiB0byB0aGUgbm9ybWFsIEJhY2tlbmQgY2xlYW51cC4K CkNoYW5nZSBIYW5kbGVDaGlsZENyYXNoIHNvIHRoYXQgaXQgZG9lc24ndCB0cnkgdG8gaGFu ZGxlIHRoZSBjbGVhbnVwCm9mIHRoZSBwcm9jZXNzIHRoYXQgYWxyZWFkeSBleGl0ZWQsIG9u bHkgdGhlIHNpZ25hbGluZyBvZiBhbGwgdGhlCm90aGVyIHByb2Nlc3Nlcy4gV2hlbiBjYWxs ZWQgZm9yIGFueSBvZiB0aGUgYXV4IHByb2Nlc3NlcywgdGhlIGNhbGxlcgpjbGVhcmVkIHRo ZSAqUElEIGdsb2JhbCB2YXJpYWJsZSwgc28gdGhlIGNvZGUgaW4gSGFuZGxlQ2hpbGRDcmFz aCgpIHRvCmRvIHRoYXQgd2FzIHVudXNlZC4KCk9uIFdpbmRvd3MsIGlmIGEgY2hpbGQgcHJv Y2VzcyBleGl0cyB3aXRoIEVSUk9SX1dBSVRfTk9fQ0hJTERSRU4sIGl0J3MKbm93IGxvZ2dl ZCB3aXRoIHRoYXQgZXhpdCBjb2RlLCBpbnN0ZWFkIG9mIDAuIEFsc28sIGlmIGEgYmd3b3Jr ZXIKZXhpdHMgd2l0aCBFUlJPUl9XQUlUX05PX0NISUxEUkVOLCBpdCdzIG5vdyB0cmVhdGVk IGFzIGNyYXNoZWQgYW5kIGlzCnJlc3RhcnRlZC4gUHJldmlvdXNseSBpdCB3YXMgdHJlYXRl ZCBhcyBhIG5vcm1hbCBleGl0LgoKSWYgYSBjaGlsZCBwcm9jZXNzIGlzIG5vdCBmb3VuZCBp biB0aGUgQmFja2VuZExpc3QsIHRoZSBsb2cgbWVzc2FnZQpub3cgY2FsbHMgaXQgInVudHJh Y2tlZCBjaGlsZCBwcm9jZXNzIiByYXRoZXIgdGhhbiAic2VydmVyIHByb2Nlc3MiLgpBcmd1 YWJseSB0aGF0IHNob3VsZCBiZSBhIFBBTklDLCBiZWNhdXNlIHdlIGRvIHRyYWNrIGFsbCB0 aGUgY2hpbGQKcHJvY2Vzc2VzIGluIHRoZSBsaXN0LCBzbyBmYWlsaW5nIHRvIGZpbmQgYSBj aGlsZCBwcm9jZXNzIGlzIGhpZ2hseQp1bmV4cGVjdGVkLiBCdXQgaWYgd2Ugd2FudCB0byBj aGFuZ2UgdGhhdCwgbGV0J3MgZGlzY3VzcyBhbmQgZG8gdGhhdAphcyBhIHNlcGFyYXRlIGNv bW1pdC4KLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgICAgICAgICAg IHwgICA0IC0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jICAgICAgICAg fCA0NDggKysrKysrKy0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3 b3JrZXJfaW50ZXJuYWxzLmggfCAgIDcgKy0KIDMgZmlsZXMgY2hhbmdlZCwgMTY2IGluc2Vy dGlvbnMoKyksIDI5MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2Jnd29ya2VyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2Vy LmMKaW5kZXggOTgxZDgxNzdiMC4uYjgzOTY3Y2RhMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv Ymd3b3JrZXIuYwpAQCAtNDAxLDkgKzQwMSw3IEBAIEJhY2tncm91bmRXb3JrZXJTdGF0ZUNo YW5nZShib29sIGFsbG93X25ld193b3JrZXJzKQogCQl9CiAKIAkJLyogSW5pdGlhbGl6ZSBw b3N0bWFzdGVyIGJvb2trZWVwaW5nLiAqLwotCQlydy0+cndfYmFja2VuZCA9IE5VTEw7CiAJ CXJ3LT5yd19waWQgPSAwOwotCQlydy0+cndfY2hpbGRfc2xvdCA9IDA7CiAJCXJ3LT5yd19j cmFzaGVkX2F0ID0gMDsKIAkJcnctPnJ3X3NobWVtX3Nsb3QgPSBzbG90bm87CiAJCXJ3LT5y d190ZXJtaW5hdGUgPSBmYWxzZTsKQEAgLTEwMjYsOSArMTAyNCw3IEBAIFJlZ2lzdGVyQmFj a2dyb3VuZFdvcmtlcihCYWNrZ3JvdW5kV29ya2VyICp3b3JrZXIpCiAJfQogCiAJcnctPnJ3 X3dvcmtlciA9ICp3b3JrZXI7Ci0JcnctPnJ3X2JhY2tlbmQgPSBOVUxMOwogCXJ3LT5yd19w aWQgPSAwOwotCXJ3LT5yd19jaGlsZF9zbG90ID0gMDsKIAlydy0+cndfY3Jhc2hlZF9hdCA9 IDA7CiAJcnctPnJ3X3Rlcm1pbmF0ZSA9IGZhbHNlOwogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv cG9zdG1hc3Rlci5jCmluZGV4IGYzNzZkM2I3N2IuLjM1YzkyYmZjMjYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisrKyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC0xNzIsNiArMTcyLDcgQEAgdHlwZWRlZiBz dHJ1Y3QgYmtlbmQKIAlpbnQJCQljaGlsZF9zbG90OwkJLyogUE1DaGlsZFNsb3QgZm9yIHRo aXMgYmFja2VuZCwgaWYgYW55ICovCiAJaW50CQkJYmtlbmRfdHlwZTsJCS8qIGNoaWxkIHBy b2Nlc3MgZmxhdm9yLCBzZWUgYWJvdmUgKi8KIAlib29sCQlkZWFkX2VuZDsJCS8qIGlzIGl0 IGdvaW5nIHRvIHNlbmQgYW4gZXJyb3IgYW5kIHF1aXQ/ICovCisJUmVnaXN0ZXJlZEJnV29y a2VyICpydzsJCS8qIGJnd29ya2VyIGluZm8sIGlmIHRoaXMgaXMgYSBiZ3dvcmtlciAqLwog CWJvb2wJCWJnd29ya2VyX25vdGlmeTsJLyogZ2V0cyBiZ3dvcmtlciBzdGFydC9zdG9wIG5v dGlmaWNhdGlvbnMgKi8KIAlkbGlzdF9ub2RlCWVsZW07CQkJLyogbGlzdCBsaW5rIGluIEJh Y2tlbmRMaXN0ICovCiB9IEJhY2tlbmQ7CkBAIC00MDEsOCArNDAyLDcgQEAgc3RhdGljIHZv aWQgcHJvY2Vzc19wbV9jaGlsZF9leGl0KHZvaWQpOwogc3RhdGljIHZvaWQgcHJvY2Vzc19w bV9yZWxvYWRfcmVxdWVzdCh2b2lkKTsKIHN0YXRpYyB2b2lkIHByb2Nlc3NfcG1fc2h1dGRv d25fcmVxdWVzdCh2b2lkKTsKIHN0YXRpYyB2b2lkIGR1bW15X2hhbmRsZXIoU0lHTkFMX0FS R1MpOwotc3RhdGljIHZvaWQgQ2xlYW51cEJhY2tlbmQoaW50IHBpZCwgaW50IGV4aXRzdGF0 dXMpOwotc3RhdGljIGJvb2wgQ2xlYW51cEJhY2tncm91bmRXb3JrZXIoaW50IHBpZCwgaW50 IGV4aXRzdGF0dXMpOworc3RhdGljIHZvaWQgQ2xlYW51cEJhY2tlbmQoQmFja2VuZCAqYnAs IGludCBleGl0c3RhdHVzKTsKIHN0YXRpYyB2b2lkIEhhbmRsZUNoaWxkQ3Jhc2goaW50IHBp ZCwgaW50IGV4aXRzdGF0dXMsIGNvbnN0IGNoYXIgKnByb2NuYW1lKTsKIHN0YXRpYyB2b2lk IExvZ0NoaWxkRXhpdChpbnQgbGV2LCBjb25zdCBjaGFyICpwcm9jbmFtZSwKIAkJCQkJCSBp bnQgcGlkLCBpbnQgZXhpdHN0YXR1cyk7CkBAIC0yMzYyLDYgKzIzNjIsOSBAQCBwcm9jZXNz X3BtX2NoaWxkX2V4aXQodm9pZCkKIAogCXdoaWxlICgocGlkID0gd2FpdHBpZCgtMSwgJmV4 aXRzdGF0dXMsIFdOT0hBTkcpKSA+IDApCiAJeworCQlib29sCQlmb3VuZDsKKwkJZGxpc3Rf bXV0YWJsZV9pdGVyIGl0ZXI7CisKIAkJLyoKIAkJICogQ2hlY2sgaWYgdGhpcyBjaGlsZCB3 YXMgYSBzdGFydHVwIHByb2Nlc3MuCiAJCSAqLwpAQCAtMjY2MSwxOCArMjY2NCwzNCBAQCBw cm9jZXNzX3BtX2NoaWxkX2V4aXQodm9pZCkKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJLyog V2FzIGl0IG9uZSBvZiBvdXIgYmFja2dyb3VuZCB3b3JrZXJzPyAqLwotCQlpZiAoQ2xlYW51 cEJhY2tncm91bmRXb3JrZXIocGlkLCBleGl0c3RhdHVzKSkKKwkJLyoKKwkJICogV2FzIGl0 IGEgYmFja2VuZCBvciBiYWNrZ3JvdW5kIHdvcmtlcj8KKwkJICovCisJCWZvdW5kID0gZmFs c2U7CisJCWRsaXN0X2ZvcmVhY2hfbW9kaWZ5KGl0ZXIsICZCYWNrZW5kTGlzdCkKIAkJewot CQkJLyogaGF2ZSBpdCBiZSByZXN0YXJ0ZWQgKi8KLQkJCUhhdmVDcmFzaGVkV29ya2VyID0g dHJ1ZTsKLQkJCWNvbnRpbnVlOworCQkJQmFja2VuZCAgICAqYnAgPSBkbGlzdF9jb250YWlu ZXIoQmFja2VuZCwgZWxlbSwgaXRlci5jdXIpOworCisJCQlpZiAoYnAtPnBpZCA9PSBwaWQp CisJCQl7CisJCQkJZGxpc3RfZGVsZXRlKGl0ZXIuY3VyKTsKKwkJCQlDbGVhbnVwQmFja2Vu ZChicCwgZXhpdHN0YXR1cyk7CisJCQkJZm91bmQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJ fQogCQl9CiAKIAkJLyoKLQkJICogRWxzZSBkbyBzdGFuZGFyZCBiYWNrZW5kIGNoaWxkIGNs ZWFudXAuCisJCSAqIFdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhpcyBjaGlsZCBw cm9jZXNzLiAgVGhhdCdzIGhpZ2hseQorCQkgKiB1bmV4cGVjdGVkLCBhcyB3ZSBkbyB0cmFj ayBhbGwgdGhlIGNoaWxkIHByb2Nlc3NlcyB0aGF0IHdlIGZvcmsuCiAJCSAqLwotCQlDbGVh bnVwQmFja2VuZChwaWQsIGV4aXRzdGF0dXMpOworCQlpZiAoIWZvdW5kKQorCQl7CisJCQlp ZiAoIUVYSVRfU1RBVFVTXzAoZXhpdHN0YXR1cykgJiYgIUVYSVRfU1RBVFVTXzEoZXhpdHN0 YXR1cykpCisJCQkJSGFuZGxlQ2hpbGRDcmFzaChwaWQsIGV4aXRzdGF0dXMsIF8oInVudHJh Y2tlZCBjaGlsZCBwcm9jZXNzIikpOworCQkJZWxzZQorCQkJCUxvZ0NoaWxkRXhpdChMT0cs IF8oInVudHJhY2tlZCBjaGlsZCBwcm9jZXNzIiksIHBpZCwgZXhpdHN0YXR1cyk7CisJCX0K IAl9CQkJCQkJCS8qIGxvb3Agb3ZlciBwZW5kaW5nIGNoaWxkLWRlYXRoIHJlcG9ydHMgKi8K IAogCS8qCkBAIC0yNjgzLDExNiArMjcwMiwzMSBAQCBwcm9jZXNzX3BtX2NoaWxkX2V4aXQo dm9pZCkKIH0KIAogLyoKLSAqIFNjYW4gdGhlIGJnd29ya2VycyBsaXN0IGFuZCBzZWUgaWYg dGhlIGdpdmVuIFBJRCAod2hpY2ggaGFzIGp1c3Qgc3RvcHBlZAotICogb3IgY3Jhc2hlZCkg aXMgaW4gaXQuICBIYW5kbGUgaXRzIHNodXRkb3duIGlmIHNvLCBhbmQgcmV0dXJuIHRydWUu ICBJZiBub3QgYQotICogYmd3b3JrZXIsIHJldHVybiBmYWxzZS4KKyAqIENsZWFudXBCYWNr ZW5kIC0tIGNsZWFudXAgYWZ0ZXIgdGVybWluYXRlZCBiYWNrZW5kIG9yIGJhY2tncm91bmQg d29ya2VyLgogICoKLSAqIFRoaXMgaXMgaGVhdmlseSBiYXNlZCBvbiBDbGVhbnVwQmFja2Vu ZC4gIE9uZSBpbXBvcnRhbnQgZGlmZmVyZW5jZSBpcyB0aGF0Ci0gKiB3ZSBkb24ndCBrbm93 IHlldCB0aGF0IHRoZSBkeWluZyBwcm9jZXNzIGlzIGEgYmd3b3JrZXIsIHNvIHdlIG11c3Qg YmUgc2lsZW50Ci0gKiB1bnRpbCB3ZSdyZSBzdXJlIGl0IGlzLgorICogUmVtb3ZlIGFsbCBs b2NhbCBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggYmFja2VuZC4KICAqLwotc3RhdGljIGJvb2wK LUNsZWFudXBCYWNrZ3JvdW5kV29ya2VyKGludCBwaWQsCi0JCQkJCQlpbnQgZXhpdHN0YXR1 cykgLyogY2hpbGQncyBleGl0IHN0YXR1cyAqLworc3RhdGljIHZvaWQKK0NsZWFudXBCYWNr ZW5kKEJhY2tlbmQgKmJwLAorCQkJICAgaW50IGV4aXRzdGF0dXMpCS8qIGNoaWxkJ3MgZXhp dCBzdGF0dXMuICovCiB7CiAJY2hhcgkJbmFtZWJ1ZltNQVhQR1BBVEhdOwotCWRsaXN0X211 dGFibGVfaXRlciBpdGVyOworCWNoYXIJICAgKnByb2NuYW1lOworCWJvb2wJCWNyYXNoZWQg PSBmYWxzZTsKIAotCWRsaXN0X2ZvcmVhY2hfbW9kaWZ5KGl0ZXIsICZCYWNrZ3JvdW5kV29y a2VyTGlzdCkKKwkvKiBDb25zdHJ1Y3QgYSBwcm9jZXNzIG5hbWUgZm9yIGxvZyBtZXNzYWdl ICovCisJaWYgKGJwLT5kZWFkX2VuZCkKKwl7CisJCXByb2NuYW1lID0gXygiZGVhZCBlbmQg YmFja2VuZCIpOworCX0KKwllbHNlIGlmIChicC0+YmtlbmRfdHlwZSA9PSBCQUNLRU5EX1RZ UEVfQkdXT1JLRVIpCiAJewotCQlSZWdpc3RlcmVkQmdXb3JrZXIgKnJ3OwotCi0JCXJ3ID0g ZGxpc3RfY29udGFpbmVyKFJlZ2lzdGVyZWRCZ1dvcmtlciwgcndfbG5vZGUsIGl0ZXIuY3Vy KTsKLQotCQlpZiAocnctPnJ3X3BpZCAhPSBwaWQpCi0JCQljb250aW51ZTsKLQotI2lmZGVm IFdJTjMyCi0JCS8qIHNlZSBDbGVhbnVwQmFja2VuZCAqLwotCQlpZiAoZXhpdHN0YXR1cyA9 PSBFUlJPUl9XQUlUX05PX0NISUxEUkVOKQotCQkJZXhpdHN0YXR1cyA9IDA7Ci0jZW5kaWYK LQogCQlzbnByaW50ZihuYW1lYnVmLCBNQVhQR1BBVEgsIF8oImJhY2tncm91bmQgd29ya2Vy IFwiJXNcIiIpLAotCQkJCSBydy0+cndfd29ya2VyLmJnd190eXBlKTsKLQotCi0JCWlmICgh RVhJVF9TVEFUVVNfMChleGl0c3RhdHVzKSkKLQkJewotCQkJLyogUmVjb3JkIHRpbWVzdGFt cCwgc28gd2Uga25vdyB3aGVuIHRvIHJlc3RhcnQgdGhlIHdvcmtlci4gKi8KLQkJCXJ3LT5y d19jcmFzaGVkX2F0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwotCQl9Ci0JCWVsc2UKLQkJ ewotCQkJLyogWmVybyBleGl0IHN0YXR1cyBtZWFucyB0ZXJtaW5hdGUgKi8KLQkJCXJ3LT5y d19jcmFzaGVkX2F0ID0gMDsKLQkJCXJ3LT5yd190ZXJtaW5hdGUgPSB0cnVlOwotCQl9Ci0K LQkJLyoKLQkJICogQWRkaXRpb25hbGx5LCBqdXN0IGxpa2UgYSBiYWNrZW5kLCBhbnkgZXhp dCBzdGF0dXMgb3RoZXIgdGhhbiAwIG9yCi0JCSAqIDEgaXMgY29uc2lkZXJlZCBhIGNyYXNo IGFuZCBjYXVzZXMgYSBzeXN0ZW0td2lkZSByZXN0YXJ0LgotCQkgKi8KLQkJaWYgKCFFWElU X1NUQVRVU18wKGV4aXRzdGF0dXMpICYmICFFWElUX1NUQVRVU18xKGV4aXRzdGF0dXMpKQot CQl7Ci0JCQlIYW5kbGVDaGlsZENyYXNoKHBpZCwgZXhpdHN0YXR1cywgbmFtZWJ1Zik7Ci0J CQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCS8qCi0JCSAqIFdlIG11c3QgcmVsZWFzZSB0aGUg cG9zdG1hc3RlciBjaGlsZCBzbG90LiBJZiB0aGUgd29ya2VyIGZhaWxlZCB0bwotCQkgKiBk byBzbywgaXQgZGlkIG5vdCBjbGVhbiB1cCBhZnRlciBpdHNlbGYsIHJlcXVpcmluZyBhIGNy YXNoLXJlc3RhcnQKLQkJICogY3ljbGUuCi0JCSAqLwotCQlpZiAoIVJlbGVhc2VQb3N0bWFz dGVyQ2hpbGRTbG90KHJ3LT5yd19jaGlsZF9zbG90KSkKLQkJewotCQkJSGFuZGxlQ2hpbGRD cmFzaChwaWQsIGV4aXRzdGF0dXMsIG5hbWVidWYpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0K LQotCQkvKiBHZXQgaXQgb3V0IG9mIHRoZSBCYWNrZW5kTGlzdCBhbmQgY2xlYXIgb3V0IHJl bWFpbmluZyBkYXRhICovCi0JCWRsaXN0X2RlbGV0ZSgmcnctPnJ3X2JhY2tlbmQtPmVsZW0p OwotI2lmZGVmIEVYRUNfQkFDS0VORAotCQlTaG1lbUJhY2tlbmRBcnJheVJlbW92ZShydy0+ cndfYmFja2VuZCk7Ci0jZW5kaWYKLQotCQkvKgotCQkgKiBJdCdzIHBvc3NpYmxlIHRoYXQg dGhpcyBiYWNrZ3JvdW5kIHdvcmtlciBzdGFydGVkIHNvbWUgT1RIRVIKLQkJICogYmFja2dy b3VuZCB3b3JrZXIgYW5kIGFza2VkIHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhhdCB3b3JrZXIg c3RhcnRlZAotCQkgKiBvciBzdG9wcGVkLiAgSWYgc28sIGNhbmNlbCBhbnkgbm90aWZpY2F0 aW9ucyBkZXN0aW5lZCBmb3IgdGhlCi0JCSAqIG5vdy1kZWFkIGJhY2tlbmQuCi0JCSAqLwot CQlpZiAocnctPnJ3X2JhY2tlbmQtPmJnd29ya2VyX25vdGlmeSkKLQkJCUJhY2tncm91bmRX b3JrZXJTdG9wTm90aWZpY2F0aW9ucyhydy0+cndfcGlkKTsKLQkJcGZyZWUocnctPnJ3X2Jh Y2tlbmQpOwotCQlydy0+cndfYmFja2VuZCA9IE5VTEw7Ci0JCXJ3LT5yd19waWQgPSAwOwot CQlydy0+cndfY2hpbGRfc2xvdCA9IDA7Ci0JCVJlcG9ydEJhY2tncm91bmRXb3JrZXJFeGl0 KHJ3KTsgLyogcmVwb3J0IGNoaWxkIGRlYXRoICovCi0KLQkJTG9nQ2hpbGRFeGl0KEVYSVRf U1RBVFVTXzAoZXhpdHN0YXR1cykgPyBERUJVRzEgOiBMT0csCi0JCQkJCSBuYW1lYnVmLCBw aWQsIGV4aXRzdGF0dXMpOwotCi0JCXJldHVybiB0cnVlOworCQkJCSBicC0+cnctPnJ3X3dv cmtlci5iZ3dfdHlwZSk7CisJCXByb2NuYW1lID0gbmFtZWJ1ZjsKIAl9Ci0KLQlyZXR1cm4g ZmFsc2U7Ci19Ci0KLS8qCi0gKiBDbGVhbnVwQmFja2VuZCAtLSBjbGVhbnVwIGFmdGVyIHRl cm1pbmF0ZWQgYmFja2VuZC4KLSAqCi0gKiBSZW1vdmUgYWxsIGxvY2FsIHN0YXRlIGFzc29j aWF0ZWQgd2l0aCBiYWNrZW5kLgotICoKLSAqIElmIHlvdSBjaGFuZ2UgdGhpcywgc2VlIGFs c28gQ2xlYW51cEJhY2tncm91bmRXb3JrZXIuCi0gKi8KLXN0YXRpYyB2b2lkCi1DbGVhbnVw QmFja2VuZChpbnQgcGlkLAotCQkJICAgaW50IGV4aXRzdGF0dXMpCS8qIGNoaWxkJ3MgZXhp dCBzdGF0dXMuICovCi17Ci0JZGxpc3RfbXV0YWJsZV9pdGVyIGl0ZXI7Ci0KLQlMb2dDaGls ZEV4aXQoREVCVUcyLCBfKCJzZXJ2ZXIgcHJvY2VzcyIpLCBwaWQsIGV4aXRzdGF0dXMpOwor CWVsc2UKKwkJcHJvY25hbWUgPSBfKCJzZXJ2ZXIgcHJvY2VzcyIpOwogCiAJLyoKIAkgKiBJ ZiBhIGJhY2tlbmQgZGllcyBpbiBhbiB1Z2x5IHdheSB0aGVuIHdlIG11c3Qgc2lnbmFsIGFs bCBvdGhlciBiYWNrZW5kcwpAQCAtMjgwMCw2ICsyNzM0LDggQEAgQ2xlYW51cEJhY2tlbmQo aW50IHBpZCwKIAkgKiBhc3N1bWUgZXZlcnl0aGluZyBpcyBhbGwgcmlnaHQgYW5kIHByb2Nl ZWQgdG8gcmVtb3ZlIHRoZSBiYWNrZW5kIGZyb20KIAkgKiB0aGUgYWN0aXZlIGJhY2tlbmQg bGlzdC4KIAkgKi8KKwlpZiAoIUVYSVRfU1RBVFVTXzAoZXhpdHN0YXR1cykgJiYgIUVYSVRf U1RBVFVTXzEoZXhpdHN0YXR1cykpCisJCWNyYXNoZWQgPSB0cnVlOwogCiAjaWZkZWYgV0lO MzIKIApAQCAtMjgxMiw1NSArMjc0OCw3OSBAQCBDbGVhbnVwQmFja2VuZChpbnQgcGlkLAog CSAqLwogCWlmIChleGl0c3RhdHVzID09IEVSUk9SX1dBSVRfTk9fQ0hJTERSRU4pCiAJewot CQlMb2dDaGlsZEV4aXQoTE9HLCBfKCJzZXJ2ZXIgcHJvY2VzcyIpLCBwaWQsIGV4aXRzdGF0 dXMpOwotCQlleGl0c3RhdHVzID0gMDsKKwkJTG9nQ2hpbGRFeGl0KExPRywgcHJvY25hbWUs IGJwLT5waWQsIGV4aXRzdGF0dXMpOworCQljcmFzaGVkID0gZmFsc2U7CiAJfQogI2VuZGlm CiAKLQlpZiAoIUVYSVRfU1RBVFVTXzAoZXhpdHN0YXR1cykgJiYgIUVYSVRfU1RBVFVTXzEo ZXhpdHN0YXR1cykpCisJLyoKKwkgKiBJZiB0aGUgcHJvY2VzcyBhdHRhY2hlZCB0byBzaGFy ZWQgbWVtb3J5LCBjaGVjayB0aGF0IGl0IGRldGFjaGVkCisJICogY2xlYW5seS4KKwkgKi8K KwlpZiAoIWJwLT5kZWFkX2VuZCkKKwl7CisJCWlmICghUmVsZWFzZVBvc3RtYXN0ZXJDaGls ZFNsb3QoYnAtPmNoaWxkX3Nsb3QpKQorCQl7CisJCQkvKgorCQkJICogVWgtb2gsIHRoZSBj aGlsZCBmYWlsZWQgdG8gY2xlYW4gaXRzZWxmIHVwLiAgVHJlYXQgYXMgYSBjcmFzaAorCQkJ ICogYWZ0ZXIgYWxsLgorCQkJICovCisJCQljcmFzaGVkID0gdHJ1ZTsKKwkJfQorI2lmZGVm IEVYRUNfQkFDS0VORAorCQlTaG1lbUJhY2tlbmRBcnJheVJlbW92ZShicCk7CisjZW5kaWYK Kwl9CisKKwlpZiAoY3Jhc2hlZCkKIAl7Ci0JCUhhbmRsZUNoaWxkQ3Jhc2gocGlkLCBleGl0 c3RhdHVzLCBfKCJzZXJ2ZXIgcHJvY2VzcyIpKTsKKwkJSGFuZGxlQ2hpbGRDcmFzaChicC0+ cGlkLCBleGl0c3RhdHVzLCBuYW1lYnVmKTsKKwkJcGZyZWUoYnApOwogCQlyZXR1cm47CiAJ fQogCi0JZGxpc3RfZm9yZWFjaF9tb2RpZnkoaXRlciwgJkJhY2tlbmRMaXN0KQorCS8qCisJ ICogVGhpcyBiYWNrZW5kIG1heSBoYXZlIGJlZW4gc2xhdGVkIHRvIHJlY2VpdmUgU0lHVVNS MSB3aGVuIHNvbWUKKwkgKiBiYWNrZ3JvdW5kIHdvcmtlciBzdGFydGVkIG9yIHN0b3BwZWQu ICBDYW5jZWwgdGhvc2Ugbm90aWZpY2F0aW9ucywgYXMKKwkgKiB3ZSBkb24ndCB3YW50IHRv IHNpZ25hbCBQSURzIHRoYXQgYXJlIG5vdCBQb3N0Z3JlU1FMIGJhY2tlbmRzLiAgVGhpcwor CSAqIGdldHMgc2tpcHBlZCBpbiB0aGUgKHByb2JhYmx5IHZlcnkgY29tbW9uKSBjYXNlIHdo ZXJlIHRoZSBiYWNrZW5kIGhhcworCSAqIG5ldmVyIHJlcXVlc3RlZCBhbnkgc3VjaCBub3Rp ZmljYXRpb25zLgorCSAqLworCWlmIChicC0+Ymd3b3JrZXJfbm90aWZ5KQorCQlCYWNrZ3Jv dW5kV29ya2VyU3RvcE5vdGlmaWNhdGlvbnMoYnAtPnBpZCk7CisKKwkvKgorCSAqIElmIGl0 IHdhcyBhIGJhY2tncm91bmQgd29ya2VyLCBhbHNvIHVwZGF0ZSBpdHMgUmVnaXN0ZXJlZFdv cmtlciBlbnRyeS4KKwkgKi8KKwlpZiAoYnAtPmJrZW5kX3R5cGUgPT0gQkFDS0VORF9UWVBF X0JHV09SS0VSKQogCXsKLQkJQmFja2VuZCAgICAqYnAgPSBkbGlzdF9jb250YWluZXIoQmFj a2VuZCwgZWxlbSwgaXRlci5jdXIpOworCQlSZWdpc3RlcmVkQmdXb3JrZXIgKnJ3ID0gYnAt PnJ3OwogCi0JCWlmIChicC0+cGlkID09IHBpZCkKKwkJaWYgKCFFWElUX1NUQVRVU18wKGV4 aXRzdGF0dXMpKQogCQl7Ci0JCQlpZiAoIWJwLT5kZWFkX2VuZCkKLQkJCXsKLQkJCQlpZiAo IVJlbGVhc2VQb3N0bWFzdGVyQ2hpbGRTbG90KGJwLT5jaGlsZF9zbG90KSkKLQkJCQl7Ci0J CQkJCS8qCi0JCQkJCSAqIFVoLW9oLCB0aGUgY2hpbGQgZmFpbGVkIHRvIGNsZWFuIGl0c2Vs ZiB1cC4gIFRyZWF0IGFzIGEKLQkJCQkJICogY3Jhc2ggYWZ0ZXIgYWxsLgotCQkJCQkgKi8K LQkJCQkJSGFuZGxlQ2hpbGRDcmFzaChwaWQsIGV4aXRzdGF0dXMsIF8oInNlcnZlciBwcm9j ZXNzIikpOwotCQkJCQlyZXR1cm47Ci0JCQkJfQotI2lmZGVmIEVYRUNfQkFDS0VORAotCQkJ CVNobWVtQmFja2VuZEFycmF5UmVtb3ZlKGJwKTsKLSNlbmRpZgotCQkJfQotCQkJaWYgKGJw LT5iZ3dvcmtlcl9ub3RpZnkpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBUaGlzIGJhY2tlbmQg bWF5IGhhdmUgYmVlbiBzbGF0ZWQgdG8gcmVjZWl2ZSBTSUdVU1IxIHdoZW4KLQkJCQkgKiBz b21lIGJhY2tncm91bmQgd29ya2VyIHN0YXJ0ZWQgb3Igc3RvcHBlZC4gIENhbmNlbCB0aG9z ZQotCQkJCSAqIG5vdGlmaWNhdGlvbnMsIGFzIHdlIGRvbid0IHdhbnQgdG8gc2lnbmFsIFBJ RHMgdGhhdCBhcmUgbm90Ci0JCQkJICogUG9zdGdyZVNRTCBiYWNrZW5kcy4gIFRoaXMgZ2V0 cyBza2lwcGVkIGluIHRoZSAocHJvYmFibHkKLQkJCQkgKiB2ZXJ5IGNvbW1vbikgY2FzZSB3 aGVyZSB0aGUgYmFja2VuZCBoYXMgbmV2ZXIgcmVxdWVzdGVkIGFueQotCQkJCSAqIHN1Y2gg bm90aWZpY2F0aW9ucy4KLQkJCQkgKi8KLQkJCQlCYWNrZ3JvdW5kV29ya2VyU3RvcE5vdGlm aWNhdGlvbnMoYnAtPnBpZCk7Ci0JCQl9Ci0JCQlkbGlzdF9kZWxldGUoaXRlci5jdXIpOwot CQkJcGZyZWUoYnApOwotCQkJYnJlYWs7CisJCQkvKiBSZWNvcmQgdGltZXN0YW1wLCBzbyB3 ZSBrbm93IHdoZW4gdG8gcmVzdGFydCB0aGUgd29ya2VyLiAqLworCQkJcnctPnJ3X2NyYXNo ZWRfYXQgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkv KiBaZXJvIGV4aXQgc3RhdHVzIG1lYW5zIHRlcm1pbmF0ZSAqLworCQkJcnctPnJ3X2NyYXNo ZWRfYXQgPSAwOworCQkJcnctPnJ3X3Rlcm1pbmF0ZSA9IHRydWU7CiAJCX0KKworCQlydy0+ cndfcGlkID0gMDsKKwkJUmVwb3J0QmFja2dyb3VuZFdvcmtlckV4aXQocncpOyAvKiByZXBv cnQgY2hpbGQgZGVhdGggKi8KKworCQlMb2dDaGlsZEV4aXQoRVhJVF9TVEFUVVNfMChleGl0 c3RhdHVzKSA/IERFQlVHMSA6IExPRywKKwkJCQkJIHByb2NuYW1lLCBicC0+cGlkLCBleGl0 c3RhdHVzKTsKKworCQkvKiBoYXZlIGl0IGJlIHJlc3RhcnRlZCAqLworCQlIYXZlQ3Jhc2hl ZFdvcmtlciA9IHRydWU7CiAJfQorCWVsc2UKKwkJTG9nQ2hpbGRFeGl0KERFQlVHMiwgcHJv Y25hbWUsIGJwLT5waWQsIGV4aXRzdGF0dXMpOworCisJcGZyZWUoYnApOwogfQogCiAvKgpA QCAtMjg2OSwxMyArMjgyOSwxNCBAQCBDbGVhbnVwQmFja2VuZChpbnQgcGlkLAogICoKICAq IFRoZSBvYmplY3RpdmVzIGhlcmUgYXJlIHRvIGNsZWFuIHVwIG91ciBsb2NhbCBzdGF0ZSBh Ym91dCB0aGUgY2hpbGQKICAqIHByb2Nlc3MsIGFuZCB0byBzaWduYWwgYWxsIG90aGVyIHJl bWFpbmluZyBjaGlsZHJlbiB0byBxdWlja2RpZS4KKyAqCisgKiBJZiBpdCdzIGEgYmFja2Vu ZCwgdGhlIGNhbGxlciBoYXMgYWxyZWFkeSByZW1vdmVkIGl0IGZyb20gdGhlCisgKiBCYWNr ZW5kTGlzdC4gSWYgaXQncyBhbiBhdXggcHJvY2VzcywgdGhlIGNvcnJlc3BvbmRpbmcgKlBJ RCBnbG9iYWwgdmFyaWFibGUKKyAqIGhhcyBiZWVuIHJlc2V0IGFscmVhZHkuCiAgKi8KIHN0 YXRpYyB2b2lkCiBIYW5kbGVDaGlsZENyYXNoKGludCBwaWQsIGludCBleGl0c3RhdHVzLCBj b25zdCBjaGFyICpwcm9jbmFtZSkKIHsKLQlkbGlzdF9pdGVyCWl0ZXI7Ci0JZGxpc3RfbXV0 YWJsZV9pdGVyIG1pdGVyOwotCUJhY2tlbmQgICAgKmJwOwogCWJvb2wJCXRha2VfYWN0aW9u OwogCiAJLyoKQEAgLTI4OTUsMTQ1ICsyODU2LDY0IEBAIEhhbmRsZUNoaWxkQ3Jhc2goaW50 IHBpZCwgaW50IGV4aXRzdGF0dXMsIGNvbnN0IGNoYXIgKnByb2NuYW1lKQogCQlTZXRRdWl0 U2lnbmFsUmVhc29uKFBNUVVJVF9GT1JfQ1JBU0gpOwogCX0KIAotCS8qIFByb2Nlc3MgYmFj a2dyb3VuZCB3b3JrZXJzLiAqLwotCWRsaXN0X2ZvcmVhY2goaXRlciwgJkJhY2tncm91bmRX b3JrZXJMaXN0KQorCWlmICh0YWtlX2FjdGlvbikKIAl7Ci0JCVJlZ2lzdGVyZWRCZ1dvcmtl ciAqcnc7CisJCWRsaXN0X2l0ZXIJaXRlcjsKIAotCQlydyA9IGRsaXN0X2NvbnRhaW5lcihS ZWdpc3RlcmVkQmdXb3JrZXIsIHJ3X2xub2RlLCBpdGVyLmN1cik7Ci0JCWlmIChydy0+cndf cGlkID09IDApCi0JCQljb250aW51ZTsJCQkvKiBub3QgcnVubmluZyAqLwotCQlpZiAocnct PnJ3X3BpZCA9PSBwaWQpCi0JCXsKLQkJCS8qCi0JCQkgKiBGb3VuZCBlbnRyeSBmb3IgZnJl c2hseS1kZWFkIHdvcmtlciwgc28gcmVtb3ZlIGl0LgotCQkJICovCi0JCQkodm9pZCkgUmVs ZWFzZVBvc3RtYXN0ZXJDaGlsZFNsb3QocnctPnJ3X2NoaWxkX3Nsb3QpOwotCQkJZGxpc3Rf ZGVsZXRlKCZydy0+cndfYmFja2VuZC0+ZWxlbSk7Ci0jaWZkZWYgRVhFQ19CQUNLRU5ECi0J CQlTaG1lbUJhY2tlbmRBcnJheVJlbW92ZShydy0+cndfYmFja2VuZCk7Ci0jZW5kaWYKLQkJ CXBmcmVlKHJ3LT5yd19iYWNrZW5kKTsKLQkJCXJ3LT5yd19iYWNrZW5kID0gTlVMTDsKLQkJ CXJ3LT5yd19waWQgPSAwOwotCQkJcnctPnJ3X2NoaWxkX3Nsb3QgPSAwOwotCQkJLyogZG9u J3QgcmVzZXQgY3Jhc2hlZF9hdCAqLwotCQkJLyogZG9uJ3QgcmVwb3J0IGNoaWxkIHN0b3As IGVpdGhlciAqLwotCQkJLyogS2VlcCBsb29waW5nIHNvIHdlIGNhbiBzaWduYWwgcmVtYWlu aW5nIHdvcmtlcnMgKi8KLQkJfQotCQllbHNlCisJCWRsaXN0X2ZvcmVhY2goaXRlciwgJkJh Y2tlbmRMaXN0KQogCQl7Ci0JCQkvKgotCQkJICogVGhpcyB3b3JrZXIgaXMgc3RpbGwgYWxp dmUuICBVbmxlc3Mgd2UgZGlkIHNvIGFscmVhZHksIHRlbGwgaXQKLQkJCSAqIHRvIGNvbW1p dCBoYXJhLWtpcmkuCi0JCQkgKi8KLQkJCWlmICh0YWtlX2FjdGlvbikKLQkJCQlzaWdxdWl0 X2NoaWxkKHJ3LT5yd19waWQpOwotCQl9Ci0JfQotCi0JLyogUHJvY2VzcyByZWd1bGFyIGJh Y2tlbmRzICovCi0JZGxpc3RfZm9yZWFjaF9tb2RpZnkobWl0ZXIsICZCYWNrZW5kTGlzdCkK LQl7Ci0JCWJwID0gZGxpc3RfY29udGFpbmVyKEJhY2tlbmQsIGVsZW0sIG1pdGVyLmN1cik7 CisJCQlCYWNrZW5kICAgICpicCA9IGRsaXN0X2NvbnRhaW5lcihCYWNrZW5kLCBlbGVtLCBp dGVyLmN1cik7CiAKLQkJaWYgKGJwLT5waWQgPT0gcGlkKQotCQl7Ci0JCQkvKgotCQkJICog Rm91bmQgZW50cnkgZm9yIGZyZXNobHktZGVhZCBiYWNrZW5kLCBzbyByZW1vdmUgaXQuCi0J CQkgKi8KLQkJCWlmICghYnAtPmRlYWRfZW5kKQotCQkJewotCQkJCSh2b2lkKSBSZWxlYXNl UG9zdG1hc3RlckNoaWxkU2xvdChicC0+Y2hpbGRfc2xvdCk7Ci0jaWZkZWYgRVhFQ19CQUNL RU5ECi0JCQkJU2htZW1CYWNrZW5kQXJyYXlSZW1vdmUoYnApOwotI2VuZGlmCi0JCQl9Ci0J CQlkbGlzdF9kZWxldGUobWl0ZXIuY3VyKTsKLQkJCXBmcmVlKGJwKTsKLQkJCS8qIEtlZXAg bG9vcGluZyBzbyB3ZSBjYW4gc2lnbmFsIHJlbWFpbmluZyBiYWNrZW5kcyAqLwotCQl9Ci0J CWVsc2UKLQkJewogCQkJLyoKIAkJCSAqIFRoaXMgYmFja2VuZCBpcyBzdGlsbCBhbGl2ZS4g IFVubGVzcyB3ZSBkaWQgc28gYWxyZWFkeSwgdGVsbCBpdAogCQkJICogdG8gY29tbWl0IGhh cmEta2lyaS4KIAkJCSAqCiAJCQkgKiBXZSBjb3VsZCBleGNsdWRlIGRlYWRfZW5kIGNoaWxk cmVuIGhlcmUsIGJ1dCBhdCBsZWFzdCB3aGVuCiAJCQkgKiBzZW5kaW5nIFNJR0FCUlQgaXQg c2VlbXMgYmV0dGVyIHRvIGluY2x1ZGUgdGhlbS4KLQkJCSAqCi0JCQkgKiBCYWNrZ3JvdW5k IHdvcmtlcnMgd2VyZSBhbHJlYWR5IHByb2Nlc3NlZCBhYm92ZTsgaWdub3JlIHRoZW0KLQkJ CSAqIGhlcmUuCiAJCQkgKi8KLQkJCWlmIChicC0+YmtlbmRfdHlwZSA9PSBCQUNLRU5EX1RZ UEVfQkdXT1JLRVIpCi0JCQkJY29udGludWU7CisJCQlzaWdxdWl0X2NoaWxkKGJwLT5waWQp OworCQl9CiAKLQkJCWlmICh0YWtlX2FjdGlvbikKLQkJCQlzaWdxdWl0X2NoaWxkKGJwLT5w aWQpOworCQlpZiAoU3RhcnR1cFBJRCAhPSAwKQorCQl7CisJCQlzaWdxdWl0X2NoaWxkKFN0 YXJ0dXBQSUQpOworCQkJU3RhcnR1cFN0YXR1cyA9IFNUQVJUVVBfU0lHTkFMRUQ7CiAJCX0K LQl9CiAKLQkvKiBUYWtlIGNhcmUgb2YgdGhlIHN0YXJ0dXAgcHJvY2VzcyB0b28gKi8KLQlp ZiAocGlkID09IFN0YXJ0dXBQSUQpCi0JewotCQlTdGFydHVwUElEID0gMDsKLQkJLyogQ2Fs bGVyIGFkanVzdHMgU3RhcnR1cFN0YXR1cywgc28gZG9uJ3QgdG91Y2ggaXQgaGVyZSAqLwot CX0KLQllbHNlIGlmIChTdGFydHVwUElEICE9IDAgJiYgdGFrZV9hY3Rpb24pCi0JewotCQlz aWdxdWl0X2NoaWxkKFN0YXJ0dXBQSUQpOwotCQlTdGFydHVwU3RhdHVzID0gU1RBUlRVUF9T SUdOQUxFRDsKLQl9CisJCS8qIFRha2UgY2FyZSBvZiB0aGUgYmd3cml0ZXIgdG9vICovCisJ CWlmIChCZ1dyaXRlclBJRCAhPSAwKQorCQkJc2lncXVpdF9jaGlsZChCZ1dyaXRlclBJRCk7 CisKKwkJLyogVGFrZSBjYXJlIG9mIHRoZSBjaGVja3BvaW50ZXIgdG9vICovCisJCWlmIChD aGVja3BvaW50ZXJQSUQgIT0gMCkKKwkJCXNpZ3F1aXRfY2hpbGQoQ2hlY2twb2ludGVyUElE KTsKKworCQkvKiBUYWtlIGNhcmUgb2YgdGhlIHdhbHdyaXRlciB0b28gKi8KKwkJaWYgKFdh bFdyaXRlclBJRCAhPSAwKQorCQkJc2lncXVpdF9jaGlsZChXYWxXcml0ZXJQSUQpOworCisJ CS8qIFRha2UgY2FyZSBvZiB0aGUgd2FscmVjZWl2ZXIgdG9vICovCisJCWlmIChXYWxSZWNl aXZlclBJRCAhPSAwKQorCQkJc2lncXVpdF9jaGlsZChXYWxSZWNlaXZlclBJRCk7CiAKLQkv KiBUYWtlIGNhcmUgb2YgdGhlIGJnd3JpdGVyIHRvbyAqLwotCWlmIChwaWQgPT0gQmdXcml0 ZXJQSUQpCi0JCUJnV3JpdGVyUElEID0gMDsKLQllbHNlIGlmIChCZ1dyaXRlclBJRCAhPSAw ICYmIHRha2VfYWN0aW9uKQotCQlzaWdxdWl0X2NoaWxkKEJnV3JpdGVyUElEKTsKLQotCS8q IFRha2UgY2FyZSBvZiB0aGUgY2hlY2twb2ludGVyIHRvbyAqLwotCWlmIChwaWQgPT0gQ2hl Y2twb2ludGVyUElEKQotCQlDaGVja3BvaW50ZXJQSUQgPSAwOwotCWVsc2UgaWYgKENoZWNr cG9pbnRlclBJRCAhPSAwICYmIHRha2VfYWN0aW9uKQotCQlzaWdxdWl0X2NoaWxkKENoZWNr cG9pbnRlclBJRCk7Ci0KLQkvKiBUYWtlIGNhcmUgb2YgdGhlIHdhbHdyaXRlciB0b28gKi8K LQlpZiAocGlkID09IFdhbFdyaXRlclBJRCkKLQkJV2FsV3JpdGVyUElEID0gMDsKLQllbHNl IGlmIChXYWxXcml0ZXJQSUQgIT0gMCAmJiB0YWtlX2FjdGlvbikKLQkJc2lncXVpdF9jaGls ZChXYWxXcml0ZXJQSUQpOwotCi0JLyogVGFrZSBjYXJlIG9mIHRoZSB3YWxyZWNlaXZlciB0 b28gKi8KLQlpZiAocGlkID09IFdhbFJlY2VpdmVyUElEKQotCQlXYWxSZWNlaXZlclBJRCA9 IDA7Ci0JZWxzZSBpZiAoV2FsUmVjZWl2ZXJQSUQgIT0gMCAmJiB0YWtlX2FjdGlvbikKLQkJ c2lncXVpdF9jaGlsZChXYWxSZWNlaXZlclBJRCk7Ci0KLQkvKiBUYWtlIGNhcmUgb2YgdGhl IHdhbHN1bW1hcml6ZXIgdG9vICovCi0JaWYgKHBpZCA9PSBXYWxTdW1tYXJpemVyUElEKQot CQlXYWxTdW1tYXJpemVyUElEID0gMDsKLQllbHNlIGlmIChXYWxTdW1tYXJpemVyUElEICE9 IDAgJiYgdGFrZV9hY3Rpb24pCi0JCXNpZ3F1aXRfY2hpbGQoV2FsU3VtbWFyaXplclBJRCk7 Ci0KLQkvKiBUYWtlIGNhcmUgb2YgdGhlIGF1dG92YWN1dW0gbGF1bmNoZXIgdG9vICovCi0J aWYgKHBpZCA9PSBBdXRvVmFjUElEKQotCQlBdXRvVmFjUElEID0gMDsKLQllbHNlIGlmIChB dXRvVmFjUElEICE9IDAgJiYgdGFrZV9hY3Rpb24pCi0JCXNpZ3F1aXRfY2hpbGQoQXV0b1Zh Y1BJRCk7Ci0KLQkvKiBUYWtlIGNhcmUgb2YgdGhlIGFyY2hpdmVyIHRvbyAqLwotCWlmIChw aWQgPT0gUGdBcmNoUElEKQotCQlQZ0FyY2hQSUQgPSAwOwotCWVsc2UgaWYgKFBnQXJjaFBJ RCAhPSAwICYmIHRha2VfYWN0aW9uKQotCQlzaWdxdWl0X2NoaWxkKFBnQXJjaFBJRCk7Ci0K LQkvKiBUYWtlIGNhcmUgb2YgdGhlIHNsb3Qgc3luYyB3b3JrZXIgdG9vICovCi0JaWYgKHBp ZCA9PSBTbG90U3luY1dvcmtlclBJRCkKLQkJU2xvdFN5bmNXb3JrZXJQSUQgPSAwOwotCWVs c2UgaWYgKFNsb3RTeW5jV29ya2VyUElEICE9IDAgJiYgdGFrZV9hY3Rpb24pCi0JCXNpZ3F1 aXRfY2hpbGQoU2xvdFN5bmNXb3JrZXJQSUQpOwotCi0JLyogV2UgZG8gTk9UIHJlc3RhcnQg dGhlIHN5c2xvZ2dlciAqLworCQkvKiBUYWtlIGNhcmUgb2YgdGhlIHdhbHN1bW1hcml6ZXIg dG9vICovCisJCWlmIChXYWxTdW1tYXJpemVyUElEICE9IDApCisJCQlzaWdxdWl0X2NoaWxk KFdhbFN1bW1hcml6ZXJQSUQpOworCisJCS8qIFRha2UgY2FyZSBvZiB0aGUgYXV0b3ZhY3V1 bSBsYXVuY2hlciB0b28gKi8KKwkJaWYgKEF1dG9WYWNQSUQgIT0gMCkKKwkJCXNpZ3F1aXRf Y2hpbGQoQXV0b1ZhY1BJRCk7CisKKwkJLyogVGFrZSBjYXJlIG9mIHRoZSBhcmNoaXZlciB0 b28gKi8KKwkJaWYgKFBnQXJjaFBJRCAhPSAwKQorCQkJc2lncXVpdF9jaGlsZChQZ0FyY2hQ SUQpOworCisJCS8qIFRha2UgY2FyZSBvZiB0aGUgc2xvdCBzeW5jIHdvcmtlciB0b28gKi8K KwkJaWYgKFNsb3RTeW5jV29ya2VyUElEICE9IDApCisJCQlzaWdxdWl0X2NoaWxkKFNsb3RT eW5jV29ya2VyUElEKTsKKworCQkvKiBXZSBkbyBOT1QgcmVzdGFydCB0aGUgc3lzbG9nZ2Vy ICovCisJfQogCiAJaWYgKFNodXRkb3duICE9IEltbWVkaWF0ZVNodXRkb3duKQogCQlGYXRh bEVycm9yID0gdHJ1ZTsKQEAgLTM1NzgsNiArMzQ1OCw3IEBAIEJhY2tlbmRTdGFydHVwKENs aWVudFNvY2tldCAqY2xpZW50X3NvY2spCiAJc3RhcnR1cF9kYXRhLmNhbkFjY2VwdENvbm5l Y3Rpb25zID0gY2FuQWNjZXB0Q29ubmVjdGlvbnMoQkFDS0VORF9UWVBFX05PUk1BTCk7CiAJ Ym4tPmRlYWRfZW5kID0gKHN0YXJ0dXBfZGF0YS5jYW5BY2NlcHRDb25uZWN0aW9ucyAhPSBD QUNfT0spOwogCWJuLT5jYW5jZWxfa2V5ID0gTXlDYW5jZWxLZXk7CisJYm4tPnJ3ID0gTlVM TDsKIAogCS8qCiAJICogVW5sZXNzIGl0J3MgYSBkZWFkX2VuZCBjaGlsZCwgYXNzaWduIGl0 IGEgY2hpbGQgc2xvdCBudW1iZXIKQEAgLTM5OTMsNiArMzg3NCw3IEBAIFN0YXJ0QXV0b3Zh Y3V1bVdvcmtlcih2b2lkKQogCQkJYm4tPmRlYWRfZW5kID0gZmFsc2U7CiAJCQlibi0+Y2hp bGRfc2xvdCA9IE15UE1DaGlsZFNsb3QgPSBBc3NpZ25Qb3N0bWFzdGVyQ2hpbGRTbG90KCk7 CiAJCQlibi0+Ymd3b3JrZXJfbm90aWZ5ID0gZmFsc2U7CisJCQlibi0+cncgPSBOVUxMOwog CiAJCQlibi0+cGlkID0gU3RhcnRDaGlsZFByb2Nlc3MoQl9BVVRPVkFDX1dPUktFUik7CiAJ CQlpZiAoYm4tPnBpZCA+IDApCkBAIC00MTgxLDggKzQwNjMsNyBAQCBkb19zdGFydF9iZ3dv cmtlcihSZWdpc3RlcmVkQmdXb3JrZXIgKnJ3KQogCQlydy0+cndfY3Jhc2hlZF9hdCA9IEdl dEN1cnJlbnRUaW1lc3RhbXAoKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQlydy0+cndfYmFj a2VuZCA9IGJuOwotCXJ3LT5yd19jaGlsZF9zbG90ID0gYm4tPmNoaWxkX3Nsb3Q7CisJYm4t PnJ3ID0gcnc7CiAKIAllcmVwb3J0KERFQlVHMSwKIAkJCShlcnJtc2dfaW50ZXJuYWwoInN0 YXJ0aW5nIGJhY2tncm91bmQgd29ya2VyIHByb2Nlc3MgXCIlc1wiIiwKQEAgLTQxOTUsMTAg KzQwNzYsOSBAQCBkb19zdGFydF9iZ3dvcmtlcihSZWdpc3RlcmVkQmdXb3JrZXIgKnJ3KQog CQllcmVwb3J0KExPRywKIAkJCQkoZXJybXNnKCJjb3VsZCBub3QgZm9yayBiYWNrZ3JvdW5k IHdvcmtlciBwcm9jZXNzOiAlbSIpKSk7CiAJCS8qIHVuZG8gd2hhdCBhc3NpZ25fYmFja2Vu ZGxpc3RfZW50cnkgZGlkICovCi0JCVJlbGVhc2VQb3N0bWFzdGVyQ2hpbGRTbG90KHJ3LT5y d19jaGlsZF9zbG90KTsKLQkJcnctPnJ3X2NoaWxkX3Nsb3QgPSAwOwotCQlwZnJlZShydy0+ cndfYmFja2VuZCk7Ci0JCXJ3LT5yd19iYWNrZW5kID0gTlVMTDsKKwkJUmVsZWFzZVBvc3Rt YXN0ZXJDaGlsZFNsb3QoYm4tPmNoaWxkX3Nsb3QpOworCQlwZnJlZShibik7CisKIAkJLyog bWFyayBlbnRyeSBhcyBjcmFzaGVkLCBzbyB3ZSdsbCB0cnkgYWdhaW4gbGF0ZXIgKi8KIAkJ cnctPnJ3X2NyYXNoZWRfYXQgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CiAJCXJldHVybiBm YWxzZTsKQEAgLTQyMDYsMTIgKzQwODYsMTIgQEAgZG9fc3RhcnRfYmd3b3JrZXIoUmVnaXN0 ZXJlZEJnV29ya2VyICpydykKIAogCS8qIGluIHBvc3RtYXN0ZXIsIGZvcmsgc3VjY2Vzc2Z1 bCAuLi4gKi8KIAlydy0+cndfcGlkID0gd29ya2VyX3BpZDsKLQlydy0+cndfYmFja2VuZC0+ cGlkID0gcnctPnJ3X3BpZDsKKwlibi0+cGlkID0gcnctPnJ3X3BpZDsKIAlSZXBvcnRCYWNr Z3JvdW5kV29ya2VyUElEKHJ3KTsKIAkvKiBhZGQgbmV3IHdvcmtlciB0byBsaXN0cyBvZiBi YWNrZW5kcyAqLwotCWRsaXN0X3B1c2hfaGVhZCgmQmFja2VuZExpc3QsICZydy0+cndfYmFj a2VuZC0+ZWxlbSk7CisJZGxpc3RfcHVzaF9oZWFkKCZCYWNrZW5kTGlzdCwgJmJuLT5lbGVt KTsKICNpZmRlZiBFWEVDX0JBQ0tFTkQKLQlTaG1lbUJhY2tlbmRBcnJheUFkZChydy0+cndf YmFja2VuZCk7CisJU2htZW1CYWNrZW5kQXJyYXlBZGQoYm4pOwogI2VuZGlmCiAJcmV0dXJu IHRydWU7CiB9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29ya2Vy X2ludGVybmFscy5oIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5h bHMuaAppbmRleCBlNTVlMzhhZjY1Li4zMDlhOTExMjRiIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRl L3Bvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmgKQEAgLTI2LDE2ICsyNiwxMyBAQAog LyoKICAqIExpc3Qgb2YgYmFja2dyb3VuZCB3b3JrZXJzLCBwcml2YXRlIHRvIHBvc3RtYXN0 ZXIuCiAgKgotICogQWxsIHdvcmtlcnMgdGhhdCBhcmUgY3VycmVudGx5IHJ1bm5pbmcgd2ls bCBoYXZlIHJ3X2JhY2tlbmQgc2V0LCBhbmQgd2lsbAotICogYmUgcHJlc2VudCBpbiBCYWNr ZW5kTGlzdC4KKyAqIEFsbCB3b3JrZXJzIHRoYXQgYXJlIGN1cnJlbnRseSBydW5uaW5nIHdp bGwgYWxzbyBoYXZlIGFuIGVudHJ5IGluCisgKiBCYWNrZW5kTGlzdC4KICAqLwogdHlwZWRl ZiBzdHJ1Y3QgUmVnaXN0ZXJlZEJnV29ya2VyCiB7CiAJQmFja2dyb3VuZFdvcmtlciByd193 b3JrZXI7IC8qIGl0cyByZWdpc3RyeSBlbnRyeSAqLwotCXN0cnVjdCBia2VuZCAqcndfYmFj a2VuZDsJLyogaXRzIEJhY2tlbmRMaXN0IGVudHJ5LCBvciBOVUxMIGlmIG5vdAotCQkJCQkJ CQkgKiBydW5uaW5nICovCiAJcGlkX3QJCXJ3X3BpZDsJCQkvKiAwIGlmIG5vdCBydW5uaW5n ICovCi0JaW50CQkJcndfY2hpbGRfc2xvdDsKIAlUaW1lc3RhbXBUeiByd19jcmFzaGVkX2F0 OwkvKiBpZiBub3QgMCwgdGltZSBpdCBsYXN0IGNyYXNoZWQgKi8KIAlpbnQJCQlyd19zaG1l bV9zbG90OwogCWJvb2wJCXJ3X3Rlcm1pbmF0ZTsKLS0gCjIuMzkuMgoK --------------PmDk1j5rqhg6tB6Y3L8i6GUA--