Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kiy62-00007u-CA for pgsql-hackers@arkaria.postgresql.org; Sat, 28 Nov 2020 11:08:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kiy5y-0001Jz-LE for pgsql-hackers@arkaria.postgresql.org; Sat, 28 Nov 2020 11:08:50 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kiy5y-0001Jr-9X for pgsql-hackers@lists.postgresql.org; Sat, 28 Nov 2020 11:08:50 +0000 Received: from smtp-fw-9102.amazon.com ([207.171.184.29]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kiy5q-0002bI-Lt for pgsql-hackers@postgresql.org; Sat, 28 Nov 2020 11:08:48 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1606561722; x=1638097722; h=to:cc:references:from:message-id:date:mime-version: in-reply-to:subject; bh=6StNmF9+G25LbZZ4Epl0viqNToKgKiytjTqKdkjzzXQ=; b=KKsoMOcTaZTnSyTRGsZwPAtgEqv7nAa3o7jkTqFu7LJZX2Xw99xxeVS0 8tz2alNLSpqkbjFsiBFhWOFI+2eUbanuIddNEfhGI7Xn4jYVu2G0ckdcU GdzuW9m6y9Z4/4gnApocI6i91gWmYfQEUHts9inmAqQVes2YWuDAkJX9H Y=; X-Amazon-filename: v9-0005-Log-the-standby-recovery-conflict-waits.patch X-IronPort-AV: E=Sophos;i="5.78,377,1599523200"; d="scan'208";a="99918918" Subject: Re: Add Information during standby recovery conflicts Received: from sea32-co-svc-lb4-vlan3.sea.corp.amazon.com (HELO email-inbound-relay-1d-38ae4ad2.us-east-1.amazon.com) ([10.47.23.38]) by smtp-border-fw-out-9102.sea19.amazon.com with ESMTP; 28 Nov 2020 11:08:33 +0000 Received: from EX13D03EUC003.ant.amazon.com (iad12-ws-svc-p26-lb9-vlan3.iad.amazon.com [10.40.163.38]) by email-inbound-relay-1d-38ae4ad2.us-east-1.amazon.com (Postfix) with ESMTPS id 8CD37A221E; Sat, 28 Nov 2020 11:08:32 +0000 (UTC) Received: from 38f9d36c4abb.ant.amazon.com (10.43.161.237) by EX13D03EUC003.ant.amazon.com (10.43.164.192) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sat, 28 Nov 2020 11:08:29 +0000 To: Alvaro Herrera CC: Masahiko Sawada , Fujii Masao , Masahiko Sawada , Kyotaro Horiguchi , PostgreSQL-development References: <20201127134057.GA15122@alvherre.pgsql> From: "Drouvot, Bertrand" Message-ID: <28e04235-27e4-0697-68df-001d2b75bee6@amazon.com> Date: Sat, 28 Nov 2020 12:08:24 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Thunderbird/78.5.0 MIME-Version: 1.0 In-Reply-To: <20201127134057.GA15122@alvherre.pgsql> Content-Type: multipart/mixed; boundary="------------A554AE4FB1C45649E59FE7F5" Content-Language: en-US X-Originating-IP: [10.43.161.237] X-ClientProxiedBy: EX13D40UWA002.ant.amazon.com (10.43.160.149) To EX13D03EUC003.ant.amazon.com (10.43.164.192) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --------------A554AE4FB1C45649E59FE7F5 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Hi, On 11/27/20 2:40 PM, Alvaro Herrera wrote: > On 2020-Nov-27, Drouvot, Bertrand wrote: > >> + if (nprocs > 0) >> + { >> + ereport(LOG, >> + (errmsg("%s after %ld.%03d ms", >> + get_recovery_conflict_desc(reason), msecs, usecs), >> + (errdetail_log_plural("Conflicting process: %s.", >> + "Conflicting processes: %s.", >> + nprocs, buf.data)))); >> + } >> +/* Return the description of recovery conflict */ >> +static const char * >> +get_recovery_conflict_desc(ProcSignalReason reason) >> +{ >> + const char *reasonDesc = gettext_noop("unknown reason"); >> + >> + switch (reason) >> + { >> + case PROCSIG_RECOVERY_CONFLICT_BUFFERPIN: >> + reasonDesc = gettext_noop("recovery is still waiting for recovery conflict on buffer pin"); >> + break; > This doesn't work from a translation point of view. First, you're > building a sentence from parts, which is against policy. Second, you're > not actually invoking gettext to translate the string returned by > get_recovery_conflict_desc. > > I think this needs to be rethought. To handle the first problem I > suggest to split the error message in two. One phrase is the complain > that recovery is waiting, and the other string is the reason for the > wait. Separate both either by splitting with a :, or alternatively put > the other sentence in DETAIL. (The latter would require to mix with the > list of conflicting processes, which might be hard.) > > The first idea would look like this: > > LOG: recovery still waiting after %ld.03d ms: for recovery conflict on buffer pin > DETAIL: Conflicting processes: 1, 2, 3. > > To achieve this, apart from editing the messages returned by > get_recovery_conflict_desc, you'd need to ereport this way: > > ereport(LOG, > errmsg("recovery still waiting after %ld.%03d ms: %s", > msecs, usecs, _(get_recovery_conflict_desc(reason))), > errdetail_log_plural("Conflicting process: %s.", > "Conflicting processes: %s.", > Thanks for your comments, I did not know that. I've attached a new version that takes your comments into account. Thanks! Bertrand --------------A554AE4FB1C45649E59FE7F5 Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="v9-0005-Log-the-standby-recovery-conflict-waits.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v9-0005-Log-the-standby-recovery-conflict-waits.patch" IGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAgICAgICAgICB8ICAyMiAr KysKIGRvYy9zcmMvc2dtbC9oaWdoLWF2YWlsYWJpbGl0eS5zZ21sICAgICAgICAgICB8ICAg NiArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgICAgICAgfCAg MTggKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMgICAgICAgICAgICAg fCAyMjEgKysrKysrKysrKysrKysrKysrKysrLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9wcm9jLmMgICAgICAgICAgICAgICB8ICAzNSArKystCiBzcmMvYmFja2VuZC91dGls cy9taXNjL2d1Yy5jICAgICAgICAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL3V0 aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMiArCiBzcmMvaW5jbHVkZS9z dG9yYWdlL3N0YW5kYnkuaCAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIDggZmlsZXMgY2hh bmdlZCwgMjgwIGluc2VydGlvbnMoKyksIDM5IGRlbGV0aW9ucygtKQpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmlu ZGV4IGVlOTE0NzQwY2MuLjNhYTg5MmMwZjMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9j b25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTY4MzksNiAr NjgzOSwyOCBAQCBsb2dfbGluZV9wcmVmaXggPSAnJW0gWyVwXSAlcSV1QCVkLyVhICcKICAg ICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0 ZW50cnkgaWQ9Imd1Yy1sb2ctcmVjb3ZlcnktY29uZmxpY3Qtd2FpdHMiIHhyZWZsYWJlbD0i bG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmxv Z19yZWNvdmVyeV9jb25mbGljdF93YWl0czwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5 cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5sb2df cmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHM8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1l dGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRleHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIENvbnRyb2xzIHdoZXRoZXIg YSBsb2cgbWVzc2FnZSBpcyBwcm9kdWNlZCB3aGVuIHRoZSBzdGFydHVwIHByb2Nlc3MKKyAg ICAgICAgaXMgd2FpdGluZyBsb25nZXIgdGhhbiA8dmFybmFtZT5kZWFkbG9ja190aW1lb3V0 PC92YXJuYW1lPgorICAgICAgICBmb3IgcmVjb3ZlcnkgY29uZmxpY3RzLiAgVGhpcyBpcyB1 c2VmdWwgaW4gZGV0ZXJtaW5pbmcgaWYgcmVjb3ZlcnkKKyAgICAgICAgY29uZmxpY3RzIHBy ZXZlbnQgdGhlIHJlY292ZXJ5IGZyb20gYXBwbHlpbmcgV0FMLgorICAgICAgIDwvcGFyYT4K KworICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD5vZmY8 L2xpdGVyYWw+LiAgVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUgc2V0CisgICAgICAgIGlu IHRoZSA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBvbiB0 aGUgc2VydmVyCisgICAgICAgIGNvbW1hbmQgbGluZS4KKyAgICAgICA8L3BhcmE+CisgICAg ICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVu dHJ5IGlkPSJndWMtbG9nLXBhcmFtZXRlci1tYXgtbGVuZ3RoIiB4cmVmbGFiZWw9ImxvZ19w YXJhbWV0ZXJfbWF4X2xlbmd0aCI+CiAgICAgICA8dGVybT48dmFybmFtZT5sb2dfcGFyYW1l dGVyX21heF9sZW5ndGg8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKICAgICAg IDxpbmRleHRlcm0+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaGlnaC1hdmFpbGFiaWxp dHkuc2dtbCBiL2RvYy9zcmMvc2dtbC9oaWdoLWF2YWlsYWJpbGl0eS5zZ21sCmluZGV4IDg2 ZGE4NGZjZTcuLjNkY2IzNDE0M2EgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9oaWdoLWF2 YWlsYWJpbGl0eS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9oaWdoLWF2YWlsYWJpbGl0eS5z Z21sCkBAIC0yMTA0LDYgKzIxMDQsMTIgQEAgaWYgKCF0cmlnZ2VyZWQpCiAgICAgc2VydmVy LiBUaGUgPHN0cnVjdG5hbWU+cGdfc3RhdF9kYXRhYmFzZTwvc3RydWN0bmFtZT4gc3lzdGVt IHZpZXcgYWxzbyBjb250YWlucwogICAgIHN1bW1hcnkgaW5mb3JtYXRpb24uCiAgICA8L3Bh cmE+CisKKyAgIDxwYXJhPgorICAgIFVzZXJzIGNhbiBjb250cm9sIHdoZXRoZXIgYSBsb2cg bWVzc2FnZSBpcyBwcm9kdWNlZCB3aGVuIFdBTCByZXBsYXkgaXMgd2FpdGluZworICAgIGxv bmdlciB0aGFuIDx2YXJuYW1lPmRlYWRsb2NrX3RpbWVvdXQ8L3Zhcm5hbWU+IGZvciBjb25m bGljdHMuIFRoaXMKKyAgICBpcyBjb250cm9sbGVkIGJ5IHRoZSA8eHJlZiBsaW5rZW5kPSJn dWMtbG9nLXJlY292ZXJ5LWNvbmZsaWN0LXdhaXRzIi8+IHBhcmFtZXRlci4KKyAgIDwvcGFy YT4KICAgPC9zZWN0Mj4KIAogICA8c2VjdDIgaWQ9ImhvdC1zdGFuZGJ5LWFkbWluIj4KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggZTU0OWZhMWQzMC4uNWE5NzQw YWI2ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMK KysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTM4MDgsNiAr MzgwOCw4IEBAIExvY2tCdWZmZXJGb3JDbGVhbnVwKEJ1ZmZlciBidWZmZXIpCiB7CiAJQnVm ZmVyRGVzYyAqYnVmSGRyOwogCWNoYXIJICAgKm5ld19zdGF0dXMgPSBOVUxMOworCVRpbWVz dGFtcFR6IHdhaXRTdGFydCA9IDA7CisJYm9vbCAgICAgICAgbG9nZ2VkX3JlY292ZXJ5X2Nv bmZsaWN0ID0gZmFsc2U7CiAKIAlBc3NlcnQoQnVmZmVySXNQaW5uZWQoYnVmZmVyKSk7CiAJ QXNzZXJ0KFBpbkNvdW50V2FpdEJ1ZiA9PSBOVUxMKTsKQEAgLTM4MjksNiArMzgzMSwxMCBA QCBMb2NrQnVmZmVyRm9yQ2xlYW51cChCdWZmZXIgYnVmZmVyKQogCiAJYnVmSGRyID0gR2V0 QnVmZmVyRGVzY3JpcHRvcihidWZmZXIgLSAxKTsKIAorCS8qIFNldCB3YWl0IHN0YXJ0IHRp bWVzdGFtcCBpZiBsb2dnaW5nIGlzIGVuYWJsZWQgKi8KKwlpZiAobG9nX3JlY292ZXJ5X2Nv bmZsaWN0X3dhaXRzKQorCQl3YWl0U3RhcnQgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisK IAlmb3IgKDs7KQogCXsKIAkJdWludDMyCQlidWZfc3RhdGU7CkBAIC0zODgxLDYgKzM4ODcs MTggQEAgTG9ja0J1ZmZlckZvckNsZWFudXAoQnVmZmVyIGJ1ZmZlcikKIAkJCQluZXdfc3Rh dHVzW2xlbl0gPSAnXDAnOyAvKiB0cnVuY2F0ZSBvZmYgIiB3YWl0aW5nIiAqLwogCQkJfQog CisJCQlpZiAod2FpdFN0YXJ0ID4gMCAmJiAhbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0KQor CQkJeworCQkJCVRpbWVzdGFtcFR6IGN1cl90cyA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsK KwkJCQlpZiAoVGltZXN0YW1wRGlmZmVyZW5jZUV4Y2VlZHMod2FpdFN0YXJ0LCBjdXJfdHMs CisJCQkJCQkJCQkJICAgRGVhZGxvY2tUaW1lb3V0KSkKKwkJCQl7CisJCQkJCUFzc2VydChs b2dfcmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHMpOworCQkJCQlMb2dSZWNvdmVyeUNvbmZsaWN0 KFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfQlVGRkVSUElOLAorCQkJCQkJCQkJCXdhaXRT dGFydCwgY3VyX3RzLCBOVUxMKTsKKwkJCQkJbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0ID0g dHJ1ZTsKKwkJCQl9CisJCQl9CiAJCQkvKiBQdWJsaXNoIHRoZSBidWZpZCB0aGF0IFN0YXJ0 dXAgcHJvY2VzcyB3YWl0cyBvbiAqLwogCQkJU2V0U3RhcnR1cEJ1ZmZlclBpbldhaXRCdWZJ ZChidWZmZXIgLSAxKTsKIAkJCS8qIFNldCBhbGFybSBhbmQgdGhlbiB3YWl0IHRvIGJlIHNp Z25hbGVkIGJ5IFVucGluQnVmZmVyKCkgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3N0YW5kYnkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnku YwppbmRleCA1MmIyODA5ZGFjLi4yMGYyN2RlN2MwIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv c3RhbmRieS5jCkBAIC0zOSw2ICszOSw3IEBACiBpbnQJCQl2YWN1dW1fZGVmZXJfY2xlYW51 cF9hZ2U7CiBpbnQJCQltYXhfc3RhbmRieV9hcmNoaXZlX2RlbGF5ID0gMzAgKiAxMDAwOwog aW50CQkJbWF4X3N0YW5kYnlfc3RyZWFtaW5nX2RlbGF5ID0gMzAgKiAxMDAwOworYm9vbAkJ bG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzID0gZmFsc2U7CiAKIHN0YXRpYyBIVEFCICpS ZWNvdmVyeUxvY2tMaXN0czsKIApAQCAtNDksNiArNTAsNyBAQCBzdGF0aWMgdm9pZCBSZXNv bHZlUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0dWFsWElEcyhWaXJ0dWFsVHJhbnNhY3Rpb25J ZCAqd2FpdGxpcwogc3RhdGljIHZvaWQgU2VuZFJlY292ZXJ5Q29uZmxpY3RXaXRoQnVmZmVy UGluKFByb2NTaWduYWxSZWFzb24gcmVhc29uKTsKIHN0YXRpYyBYTG9nUmVjUHRyIExvZ0N1 cnJlbnRSdW5uaW5nWGFjdHMoUnVubmluZ1RyYW5zYWN0aW9ucyBDdXJyUnVubmluZ1hhY3Rz KTsKIHN0YXRpYyB2b2lkIExvZ0FjY2Vzc0V4Y2x1c2l2ZUxvY2tzKGludCBubG9ja3MsIHhs X3N0YW5kYnlfbG9jayAqbG9ja3MpOworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9yZWNvdmVy eV9jb25mbGljdF9kZXNjKFByb2NTaWduYWxSZWFzb24gcmVhc29uKTsKIAogLyoKICAqIEtl ZXAgdHJhY2sgb2YgYWxsIHRoZSBsb2NrcyBvd25lZCBieSBhIGdpdmVuIHRyYW5zYWN0aW9u LgpAQCAtMjE1LDE1ICsyMTcsODcgQEAgV2FpdEV4Y2VlZHNNYXhTdGFuZGJ5RGVsYXkodWlu dDMyIHdhaXRfZXZlbnRfaW5mbykKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qCisgKiBMb2cg dGhlIHJlY292ZXJ5IGNvbmZsaWN0LgorICoKKyAqIHdhaXRfc3RhcnQgaXMgdGhlIHRpbWVz dGFtcCB3aGVuIHRoZSBjYWxsZXIgc3RhcnRlZCB0byB3YWl0LgorICogY3VyX3RzIGlzIHRo ZSB0aW1lc3RhbXAgd2hlbiB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZC4KKyAqIFRo aXMgZnVuY3Rpb24gYWxzbyByZXBvcnRzIHRoZSBkZXRhaWxzIGFib3V0IHRoZSBjb25mbGlj dGluZworICogcHJvY2VzcyBpZHMgaWYgKndhaXRfbGlzdCBpcyBub3QgTlVMTC4KKyAqLwor dm9pZAorTG9nUmVjb3ZlcnlDb25mbGljdChQcm9jU2lnbmFsUmVhc29uIHJlYXNvbiwgVGlt ZXN0YW1wVHogd2FpdF9zdGFydCwKKwkJCQkJVGltZXN0YW1wVHogY3VyX3RzLCBWaXJ0dWFs VHJhbnNhY3Rpb25JZCAqd2FpdF9saXN0KQoreworCWxvbmcJCXNlY3M7CisJaW50CQkJdXNl Y3M7CisJbG9uZwkJbXNlY3M7CisKKwlUaW1lc3RhbXBEaWZmZXJlbmNlKHdhaXRfc3RhcnQs IGN1cl90cywgJnNlY3MsICZ1c2Vjcyk7CisJbXNlY3MgPSBzZWNzICogMTAwMCArIHVzZWNz IC8gMTAwMDsKKwl1c2VjcyA9IHVzZWNzICUgMTAwMDsKKworCWlmICh3YWl0X2xpc3QpCisJ eworCQlWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqdnhpZHM7CisJCVN0cmluZ0luZm9EYXRhIGJ1 ZjsKKwkJaW50CW5wcm9jcyA9IDA7CisKKwkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisKKwkJ LyogY29uc3RydWN0IGEgc3RyaW5nIG9mIGxpc3Qgb2YgdGhlIGNvbmZsaWN0ZWQgcHJvY2Vz c2VzICovCisJCXZ4aWRzID0gd2FpdF9saXN0OworCQl3aGlsZSAoVmlydHVhbFRyYW5zYWN0 aW9uSWRJc1ZhbGlkKCp2eGlkcykpCisJCXsKKwkJCVBHUFJPQyAqcHJvYyA9IEJhY2tlbmRJ ZEdldFByb2ModnhpZHMtPmJhY2tlbmRJZCk7CisKKwkJCWlmIChwcm9jKQorCQkJeworCQkJ CWlmIChucHJvY3MgPT0gMCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiJWQiLCBw cm9jLT5waWQpOworCQkJCWVsc2UKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCAl ZCIsIHByb2MtPnBpZCk7CisKKwkJCQlucHJvY3MrKzsKKwkJCX0KKworCQkJdnhpZHMrKzsK KwkJfQorCisJCWlmIChucHJvY3MgPiAwKQorCQl7CisJCQllcmVwb3J0KExPRywKKwkJCQkJ KGVycm1zZygicmVjb3Zlcnkgc3RpbGwgd2FpdGluZyBhZnRlciAlbGQuJTAzZCBtczogJXMi LAorCQkJCQkJCW1zZWNzLCB1c2VjcywgXyhnZXRfcmVjb3ZlcnlfY29uZmxpY3RfZGVzYyhy ZWFzb24pKSksCisJCQkJCSAoZXJyZGV0YWlsX2xvZ19wbHVyYWwoIkNvbmZsaWN0aW5nIHBy b2Nlc3M6ICVzLiIsCisJCQkJCQkJCQkJICAgIkNvbmZsaWN0aW5nIHByb2Nlc3NlczogJXMu IiwKKwkJCQkJCQkJCQkgICBucHJvY3MsIGJ1Zi5kYXRhKSkpKTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCWVyZXBvcnQoTE9HLAorCQkJCQkoZXJybXNnKCJyZWNvdmVyeSBzdGlsbCB3YWl0 aW5nIGFmdGVyICVsZC4lMDNkIG1zOiAlcyIsCisJCQkJCQkJbXNlY3MsIHVzZWNzLCBfKGdl dF9yZWNvdmVyeV9jb25mbGljdF9kZXNjKHJlYXNvbikpKSkpOworCQl9CisKKwkJcGZyZWUo YnVmLmRhdGEpOworCX0KKwllbHNlCisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJtc2coInJl Y292ZXJ5IHN0aWxsIHdhaXRpbmcgYWZ0ZXIgJWxkLiUwM2QgbXM6ICVzIiwKKwkJCQkJCW1z ZWNzLCB1c2VjcywgXyhnZXRfcmVjb3ZlcnlfY29uZmxpY3RfZGVzYyhyZWFzb24pKSkpKTsK K30KKwogLyoKICAqIFRoaXMgaXMgdGhlIG1haW4gZXhlY3V0aW9uZXIgZm9yIGFueSBxdWVy eSBiYWNrZW5kIHRoYXQgY29uZmxpY3RzIHdpdGgKICAqIHJlY292ZXJ5IHByb2Nlc3Npbmcu IEp1ZGdlbWVudCBoYXMgYWxyZWFkeSBiZWVuIHBhc3NlZCBvbiBpdCB3aXRoaW4KICAqIGEg c3BlY2lmaWMgcm1nci4gSGVyZSB3ZSBqdXN0IGlzc3VlIHRoZSBvcmRlcnMgdG8gdGhlIHBy b2NzLiBUaGUgcHJvY3MKICAqIHRoZW4gdGhyb3cgdGhlIHJlcXVpcmVkIGVycm9yIGFzIGlu c3RydWN0ZWQuCiAgKgotICogSWYgcmVwb3J0X3dhaXRpbmcgaXMgdHJ1ZSwgIndhaXRpbmci IGlzIHJlcG9ydGVkIGluIFBTIGRpc3BsYXkgaWYgbmVjZXNzYXJ5LgotICogSWYgdGhlIGNh bGxlciBoYXMgYWxyZWFkeSByZXBvcnRlZCB0aGF0LCByZXBvcnRfd2FpdGluZyBzaG91bGQg YmUgZmFsc2UuCi0gKiBPdGhlcndpc2UsICJ3YWl0aW5nIiBpcyByZXBvcnRlZCB0d2ljZSB1 bmV4cGVjdGVkbHkuCisgKiBJZiByZXBvcnRfd2FpdGluZyBpcyB0cnVlLCAid2FpdGluZyIg aXMgcmVwb3J0ZWQgaW4gUFMgZGlzcGxheSBhbmQgbG9nCisgKiB0aGUgd2FpdHMgZm9yIHRo ZSByZWNvdmVyeSBjb25mbGljdCBpZiBuZWNlc3NhcnkuICBJZiB0aGUgY2FsbGVyIGhhcyBh bHJlYWR5CisgKiByZXBvcnRlZCB0aGF0LCByZXBvcnRfd2FpdGluZyBzaG91bGQgYmUgZmFs c2UuICBPdGhlcndpc2UsIGJvdGggYXJlIHJlcG9ydGVkCisgKiB0d2ljZSB1bmV4cGVjdGVk bHkuCiAgKi8KIHN0YXRpYyB2b2lkCiBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0 dWFsWElEcyhWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqd2FpdGxpc3QsCkBAIC0yMzIsMTIgKzMw NiwxNCBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0dWFsWElEcyhWaXJ0dWFs VHJhbnNhY3Rpb25JZCAqd2FpdGxpc3QsCiB7CiAJVGltZXN0YW1wVHogd2FpdFN0YXJ0ID0g MDsKIAljaGFyCSAgICpuZXdfc3RhdHVzOworCWJvb2wgbG9nZ2VkX3JlY292ZXJ5X2NvbmZs aWN0ID0gZmFsc2U7CiAKIAkvKiBGYXN0IGV4aXQsIHRvIGF2b2lkIGEga2VybmVsIGNhbGwg aWYgdGhlcmUncyBubyB3b3JrIHRvIGJlIGRvbmUuICovCiAJaWYgKCFWaXJ0dWFsVHJhbnNh Y3Rpb25JZElzVmFsaWQoKndhaXRsaXN0KSkKIAkJcmV0dXJuOwogCi0JaWYgKHJlcG9ydF93 YWl0aW5nKQorCS8qIFNldCB0aGUgd2FpdCBzdGFydCB0aW1lc3RhbXAgZm9yIHJlcG9ydGlu ZyAqLworCWlmIChyZXBvcnRfd2FpdGluZyAmJiAobG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0 IHx8IHVwZGF0ZV9wcm9jZXNzX3RpdGxlKSkKIAkJd2FpdFN0YXJ0ID0gR2V0Q3VycmVudFRp bWVzdGFtcCgpOwogCW5ld19zdGF0dXMgPSBOVUxMOwkJCS8qIHdlIGhhdmVuJ3QgY2hhbmdl ZCB0aGUgcHMgZGlzcGxheSAqLwogCkBAIC0yNDksMjMgKzMyNSw0MyBAQCBSZXNvbHZlUmVj b3ZlcnlDb25mbGljdFdpdGhWaXJ0dWFsWElEcyhWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqd2Fp dGxpc3QsCiAJCS8qIHdhaXQgdW50aWwgdGhlIHZpcnR1YWwgeGlkIGlzIGdvbmUgKi8KIAkJ d2hpbGUgKCFWaXJ0dWFsWGFjdExvY2soKndhaXRsaXN0LCBmYWxzZSkpCiAJCXsKLQkJCS8q Ci0JCQkgKiBSZXBvcnQgdmlhIHBzIGlmIHdlIGhhdmUgYmVlbiB3YWl0aW5nIGZvciBtb3Jl IHRoYW4gNTAwIG1zZWMKLQkJCSAqIChzaG91bGQgdGhhdCBiZSBjb25maWd1cmFibGU/KQot CQkJICovCi0JCQlpZiAodXBkYXRlX3Byb2Nlc3NfdGl0bGUgJiYgbmV3X3N0YXR1cyA9PSBO VUxMICYmIHJlcG9ydF93YWl0aW5nICYmCi0JCQkJVGltZXN0YW1wRGlmZmVyZW5jZUV4Y2Vl ZHMod2FpdFN0YXJ0LCBHZXRDdXJyZW50VGltZXN0YW1wKCksCi0JCQkJCQkJCQkJICAgNTAw KSkKKwkJCWlmICh3YWl0U3RhcnQgPiAwKQogCQkJewotCQkJCWNvbnN0IGNoYXIgKm9sZF9z dGF0dXM7Ci0JCQkJaW50CQkJbGVuOwotCi0JCQkJb2xkX3N0YXR1cyA9IGdldF9wc19kaXNw bGF5KCZsZW4pOwotCQkJCW5ld19zdGF0dXMgPSAoY2hhciAqKSBwYWxsb2MobGVuICsgOCAr IDEpOwotCQkJCW1lbWNweShuZXdfc3RhdHVzLCBvbGRfc3RhdHVzLCBsZW4pOwotCQkJCXN0 cmNweShuZXdfc3RhdHVzICsgbGVuLCAiIHdhaXRpbmciKTsKLQkJCQlzZXRfcHNfZGlzcGxh eShuZXdfc3RhdHVzKTsKLQkJCQluZXdfc3RhdHVzW2xlbl0gPSAnXDAnOyAvKiB0cnVuY2F0 ZSBvZmYgIiB3YWl0aW5nIiAqLworCQkJCVRpbWVzdGFtcFR6IGN1cl90cyA9IDA7CisJCQkJ Ym9vbCBtYXliZV9sb2dfY29uZmxpY3QgPQorCQkJCQkobG9nX3JlY292ZXJ5X2NvbmZsaWN0 X3dhaXRzICYmICFsb2dnZWRfcmVjb3ZlcnlfY29uZmxpY3QpOworCQkJCWJvb2wgbWF5YmVf dXBkYXRlX3BzdGl0bGUgPQorCQkJCQkodXBkYXRlX3Byb2Nlc3NfdGl0bGUgJiYgbmV3X3N0 YXR1cyA9PSBOVUxMKTsKKworCQkJCS8qIEdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgaWYg bm90IHJlcG9ydCB5ZXQgKi8KKwkJCQlpZiAobWF5YmVfbG9nX2NvbmZsaWN0IHx8IG1heWJl X3VwZGF0ZV9wc3RpdGxlKQorCQkJCQljdXJfdHMgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7 CisKKwkJCQkvKiBMb2cgdGhlIHJlY292ZXJ5IGNvbmZsaWN0IGlmIG5lY2Vzc2FyeSAqLwor CQkJCWlmIChtYXliZV9sb2dfY29uZmxpY3QgJiYKKwkJCQkJVGltZXN0YW1wRGlmZmVyZW5j ZUV4Y2VlZHMod2FpdFN0YXJ0LCBjdXJfdHMsIERlYWRsb2NrVGltZW91dCkpCisJCQkJewor CQkJCQlMb2dSZWNvdmVyeUNvbmZsaWN0KHJlYXNvbiwgd2FpdFN0YXJ0LCBjdXJfdHMsIHdh aXRsaXN0KTsKKwkJCQkJbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCQl9 CisKKwkJCQkvKgorCQkJCSAqIFJlcG9ydCB2aWEgcHMgaWYgd2UgaGF2ZSBiZWVuIHdhaXRp bmcgZm9yIG1vcmUgdGhhbiA1MDAgbXNlYworCQkJCSAqIChzaG91bGQgdGhhdCBiZSBjb25m aWd1cmFibGU/KQorCQkJCSAqLworCQkJCWlmIChtYXliZV91cGRhdGVfcHN0aXRsZSAmJgor CQkJCQlUaW1lc3RhbXBEaWZmZXJlbmNlRXhjZWVkcyh3YWl0U3RhcnQsIGN1cl90cywgNTAw KSkKKwkJCQl7CisJCQkJCWNvbnN0IGNoYXIgKm9sZF9zdGF0dXM7CisJCQkJCWludAkJCWxl bjsKKworCQkJCQlvbGRfc3RhdHVzID0gZ2V0X3BzX2Rpc3BsYXkoJmxlbik7CisJCQkJCW5l d19zdGF0dXMgPSAoY2hhciAqKSBwYWxsb2MobGVuICsgOCArIDEpOworCQkJCQltZW1jcHko bmV3X3N0YXR1cywgb2xkX3N0YXR1cywgbGVuKTsKKwkJCQkJc3RyY3B5KG5ld19zdGF0dXMg KyBsZW4sICIgd2FpdGluZyIpOworCQkJCQlzZXRfcHNfZGlzcGxheShuZXdfc3RhdHVzKTsK KwkJCQkJbmV3X3N0YXR1c1tsZW5dID0gJ1wwJzsgLyogdHJ1bmNhdGUgb2ZmICIgd2FpdGlu ZyIgKi8KKwkJCQl9CiAJCQl9CiAKIAkJCS8qIElzIGl0IHRpbWUgdG8ga2lsbCBpdD8gKi8K QEAgLTM5OCw5ICs0OTQsMTIgQEAgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoRGF0YWJh c2UoT2lkIGRiaWQpCiAgKgogICogRGVhZGxvY2tzIGludm9sdmluZyB0aGUgU3RhcnR1cCBw cm9jZXNzIGFuZCBhbiBvcmRpbmFyeSBiYWNrZW5kIHByb2Nlc3MKICAqIHdpbGwgYmUgZGV0 ZWN0ZWQgYnkgdGhlIGRlYWRsb2NrIGRldGVjdG9yIHdpdGhpbiB0aGUgb3JkaW5hcnkgYmFj a2VuZC4KKyAqCisgKiBuZWVkX2xvZyBpcyB1c2VkIHRvIHNldCB0aGUgZGVhZGxvY2sgdGlt ZW91dCBmb3IgbG9nZ2luZyBwdXJwb3NlCisgKiBvbmx5IHdoZW4gdGhlIG1lc3NhZ2UgaGFz IG5vdCBiZWVuIGxvZ2dlZCB5ZXQuCiAgKi8KIHZvaWQKLVJlc29sdmVSZWNvdmVyeUNvbmZs aWN0V2l0aExvY2soTE9DS1RBRyBsb2NrdGFnKQorUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RX aXRoTG9jayhMT0NLVEFHIGxvY2t0YWcsIGJvb2wgbmVlZF9sb2cpCiB7CiAJVGltZXN0YW1w VHogbHRpbWU7CiAKQEAgLTQwOCw3ICs1MDcsMzUgQEAgUmVzb2x2ZVJlY292ZXJ5Q29uZmxp Y3RXaXRoTG9jayhMT0NLVEFHIGxvY2t0YWcpCiAKIAlsdGltZSA9IEdldFN0YW5kYnlMaW1p dFRpbWUoKTsKIAotCWlmIChHZXRDdXJyZW50VGltZXN0YW1wKCkgPj0gbHRpbWUpCisJaWYg KGx0aW1lID09IDAgfHwgR2V0Q3VycmVudFRpbWVzdGFtcCgpIDwgbHRpbWUpCisJeworCQlF bmFibGVUaW1lb3V0UGFyYW1zIHRpbWVvdXRzWzJdOworCQlpbnQgY250ID0gMDsKKworCQkv KgorCQkgKiBXYWl0IChvciB3YWl0IGFnYWluKSB1bnRpbCBsdGltZQorCQkgKi8KKwkJaWYg KGx0aW1lICE9IDApCisJCXsKKwkJCXRpbWVvdXRzW2NudF0uaWQgPSBTVEFOREJZX0xPQ0tf VElNRU9VVDsKKwkJCXRpbWVvdXRzW2NudF0udHlwZSA9IFRNUEFSQU1fQVQ7CisJCQl0aW1l b3V0c1tjbnRdLmZpbl90aW1lID0gbHRpbWU7CisJCQljbnQrKzsKKwkJfQorCisJCS8qIEFs c28sIHNldCBkZWFkbG9jayB0aW1lb3V0IGZvciBsb2dnaW5nIHB1cnBvc2UgaWYgbmVjZXNz YXJ5ICovCisJCWlmIChsb2dfcmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHMgJiYgIW5lZWRfbG9n KQorCQl7CisJCQl0aW1lb3V0c1tjbnRdLmlkID0gU1RBTkRCWV9USU1FT1VUOworCQkJdGlt ZW91dHNbY250XS50eXBlID0gVE1QQVJBTV9BRlRFUjsKKwkJCXRpbWVvdXRzW2NudF0uZGVs YXlfbXMgPSBEZWFkbG9ja1RpbWVvdXQ7CisJCQljbnQrKzsKKwkJfQorCisJCWlmIChjbnQg PiAwKQorCQkJZW5hYmxlX3RpbWVvdXRzKHRpbWVvdXRzLCBjbnQpOworCX0KKwllbHNlCiAJ ewogCQkvKgogCQkgKiBXZSdyZSBhbHJlYWR5IGJlaGluZCwgc28gY2xlYXIgYSBwYXRoIGFz IHF1aWNrbHkgYXMgcG9zc2libGUuCkBAIC00MTksMjYgKzU0NiwxNSBAQCBSZXNvbHZlUmVj b3ZlcnlDb25mbGljdFdpdGhMb2NrKExPQ0tUQUcgbG9ja3RhZykKIAogCQkvKgogCQkgKiBQ cmV2ZW50IFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFZpcnR1YWxYSURzKCkgZnJvbSBy ZXBvcnRpbmcKLQkJICogIndhaXRpbmciIGluIFBTIGRpc3BsYXkgYnkgZGlzYWJsaW5nIGl0 cyBhcmd1bWVudCByZXBvcnRfd2FpdGluZwotCQkgKiBiZWNhdXNlIHRoZSBjYWxsZXIsIFdh aXRPbkxvY2soKSwgaGFzIGFscmVhZHkgcmVwb3J0ZWQgdGhhdC4KKwkJICogIndhaXRpbmci IGluIFBTIGRpc3BsYXkgYW5kIGxvZ2dpbmcgcmVjb3ZlcnkgY29uZmxpY3QgYnkgZGlzYWJs aW5nCisJCSAqIGl0cyBhcmd1bWVudCByZXBvcnRfd2FpdGluZyBiZWNhdXNlIHRoZSBjYWxs ZXJzIG1heSBoYXZlIGFscmVhZHkKKwkJICogcmVwb3J0ZWQgdGhhdC4KIAkJICovCiAJCVJl c29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFZpcnR1YWxYSURzKGJhY2tlbmRzLAogCQkJCQkJ CQkJCQkgICBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0xPQ0ssCiAJCQkJCQkJCQkJCSAg IFBHX1dBSVRfTE9DSyB8IGxvY2t0YWcubG9ja3RhZ190eXBlLAogCQkJCQkJCQkJCQkgICBm YWxzZSk7CiAJfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIFdhaXQgKG9yIHdhaXQgYWdhaW4p IHVudGlsIGx0aW1lCi0JCSAqLwotCQlFbmFibGVUaW1lb3V0UGFyYW1zIHRpbWVvdXRzWzFd OwotCi0JCXRpbWVvdXRzWzBdLmlkID0gU1RBTkRCWV9MT0NLX1RJTUVPVVQ7Ci0JCXRpbWVv dXRzWzBdLnR5cGUgPSBUTVBBUkFNX0FUOwotCQl0aW1lb3V0c1swXS5maW5fdGltZSA9IGx0 aW1lOwotCQllbmFibGVfdGltZW91dHModGltZW91dHMsIDEpOwotCX0KIAogCS8qIFdhaXQg dG8gYmUgc2lnbmFsZWQgYnkgdGhlIHJlbGVhc2Ugb2YgdGhlIFJlbGF0aW9uIExvY2sgKi8K IAlQcm9jV2FpdEZvclNpZ25hbChQR19XQUlUX0xPQ0sgfCBsb2NrdGFnLmxvY2t0YWdfdHlw ZSk7CkBAIC0xMTE2LDMgKzEyMzIsMzYgQEAgTG9nU3RhbmRieUludmFsaWRhdGlvbnMoaW50 IG5tc2dzLCBTaGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlICptc2dzLAogCQkJCQkgbm1zZ3Mg KiBzaXplb2YoU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSkpOwogCVhMb2dJbnNlcnQoUk1f U1RBTkRCWV9JRCwgWExPR19JTlZBTElEQVRJT05TKTsKIH0KKworLyogUmV0dXJuIHRoZSBk ZXNjcmlwdGlvbiBvZiByZWNvdmVyeSBjb25mbGljdCAqLworc3RhdGljIGNvbnN0IGNoYXIg KgorZ2V0X3JlY292ZXJ5X2NvbmZsaWN0X2Rlc2MoUHJvY1NpZ25hbFJlYXNvbiByZWFzb24p Cit7CisJY29uc3QgY2hhciAqcmVhc29uRGVzYyA9IGdldHRleHRfbm9vcCgidW5rbm93biBy ZWFzb24iKTsKKworCXN3aXRjaCAocmVhc29uKQorCXsKKwkJY2FzZSBQUk9DU0lHX1JFQ09W RVJZX0NPTkZMSUNUX0JVRkZFUlBJTjoKKwkJCXJlYXNvbkRlc2MgPSBnZXR0ZXh0X25vb3Ao ImZvciByZWNvdmVyeSBjb25mbGljdCBvbiBidWZmZXIgcGluIik7CisJCQlicmVhazsKKwkJ Y2FzZSBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0xPQ0s6CisJCQlyZWFzb25EZXNjID0g Z2V0dGV4dF9ub29wKCJmb3IgcmVjb3ZlcnkgY29uZmxpY3Qgb24gbG9jayIpOworCQkJYnJl YWs7CisJCWNhc2UgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9UQUJMRVNQQUNFOgorCQkJ cmVhc29uRGVzYyA9IGdldHRleHRfbm9vcCgiZm9yIHJlY292ZXJ5IGNvbmZsaWN0IG9uIHRh Ymxlc3BhY2UiKTsKKwkJCWJyZWFrOworCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJ Q1RfU05BUFNIT1Q6CisJCQlyZWFzb25EZXNjID0gZ2V0dGV4dF9ub29wKCJmb3IgcmVjb3Zl cnkgY29uZmxpY3Qgb24gc25hcHNob3QiKTsKKwkJCWJyZWFrOworCQljYXNlIFBST0NTSUdf UkVDT1ZFUllfQ09ORkxJQ1RfU1RBUlRVUF9ERUFETE9DSzoKKwkJCXJlYXNvbkRlc2MgPSBn ZXR0ZXh0X25vb3AoImZvciByZWNvdmVyeSBjb25mbGljdCBvbiBidWZmZXIgZGVhZGxvY2si KTsKKwkJCWJyZWFrOworCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJB U0U6CisJCQlyZWFzb25EZXNjID0gZ2V0dGV4dF9ub29wKCJmb3IgcmVjb3ZlcnkgY29uZmxp Y3Qgb24gZGF0YWJhc2UiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJ fQorCisJcmV0dXJuIHJlYXNvbkRlc2M7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwpp bmRleCA4ODU2NmJkOWZhLi42ZDA4NzI2YmU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9j LmMKQEAgLTEwNjMsOCArMTA2MywxMCBAQCBQcm9jU2xlZXAoTE9DQUxMT0NLICpsb2NhbGxv Y2ssIExvY2tNZXRob2QgbG9ja01ldGhvZFRhYmxlKQogCUxXTG9jawkgICAqcGFydGl0aW9u TG9jayA9IExvY2tIYXNoUGFydGl0aW9uTG9jayhoYXNoY29kZSk7CiAJUFJPQ19RVUVVRSAq d2FpdFF1ZXVlID0gJihsb2NrLT53YWl0UHJvY3MpOwogCUxPQ0tNQVNLCW15SGVsZExvY2tz ID0gTXlQcm9jLT5oZWxkTG9ja3M7CisJVGltZXN0YW1wVHogc3RhbmRieVdhaXRTdGFydCA9 IDA7CiAJYm9vbAkJZWFybHlfZGVhZGxvY2sgPSBmYWxzZTsKIAlib29sCQlhbGxvd19hdXRv dmFjdXVtX2NhbmNlbCA9IHRydWU7CisJYm9vbCAgICAgICAgbG9nZ2VkX3JlY292ZXJ5X2Nv bmZsaWN0ID0gZmFsc2U7CiAJUHJvY1dhaXRTdGF0dXMgbXlXYWl0U3RhdHVzOwogCVBHUFJP QwkgICAqcHJvYzsKIAlQR1BST0MJICAgKmxlYWRlciA9IE15UHJvYy0+bG9ja0dyb3VwTGVh ZGVyOwpAQCAtMTI2MCw2ICsxMjYyLDExIEBAIFByb2NTbGVlcChMT0NBTExPQ0sgKmxvY2Fs bG9jaywgTG9ja01ldGhvZCBsb2NrTWV0aG9kVGFibGUpCiAJCWVsc2UKIAkJCWVuYWJsZV90 aW1lb3V0X2FmdGVyKERFQURMT0NLX1RJTUVPVVQsIERlYWRsb2NrVGltZW91dCk7CiAJfQor CWVsc2UgaWYgKGxvZ19yZWNvdmVyeV9jb25mbGljdF93YWl0cykKKwl7CisJCS8qIFNldCB3 YWl0IHN0YXJ0IHRpbWVzdGFtcCBpZiBsb2dnaW5nIGlzIGVuYWJsZWQgKi8KKwkJc3RhbmRi eVdhaXRTdGFydCA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKwl9CiAKIAkvKgogCSAqIElm IHNvbWVib2R5IHdha2VzIHVzIGJldHdlZW4gTFdMb2NrUmVsZWFzZSBhbmQgV2FpdExhdGNo LCB0aGUgbGF0Y2gKQEAgLTEyODAsNyArMTI4NywzMyBAQCBQcm9jU2xlZXAoTE9DQUxMT0NL ICpsb2NhbGxvY2ssIExvY2tNZXRob2QgbG9ja01ldGhvZFRhYmxlKQogCQlpZiAoSW5Ib3RT dGFuZGJ5KQogCQl7CiAJCQkvKiBTZXQgYSB0aW1lciBhbmQgd2FpdCBmb3IgdGhhdCBvciBm b3IgdGhlIExvY2sgdG8gYmUgZ3JhbnRlZCAqLwotCQkJUmVzb2x2ZVJlY292ZXJ5Q29uZmxp Y3RXaXRoTG9jayhsb2NhbGxvY2stPnRhZy5sb2NrKTsKKwkJCVJlc29sdmVSZWNvdmVyeUNv bmZsaWN0V2l0aExvY2sobG9jYWxsb2NrLT50YWcubG9jaywgbG9nZ2VkX3JlY292ZXJ5X2Nv bmZsaWN0KTsKKworCQkJaWYgKHN0YW5kYnlXYWl0U3RhcnQgPiAwICYmICFsb2dnZWRfcmVj b3ZlcnlfY29uZmxpY3QpCisJCQl7CisJCQkJVGltZXN0YW1wVHogY3VyX3RzID0gR2V0Q3Vy cmVudFRpbWVzdGFtcCgpOworCQkJCWlmIChUaW1lc3RhbXBEaWZmZXJlbmNlRXhjZWVkcyhz dGFuZGJ5V2FpdFN0YXJ0LCBjdXJfdHMsCisJCQkJCQkJCQkJICAgRGVhZGxvY2tUaW1lb3V0 KSkKKwkJCQl7CisJCQkJCVZpcnR1YWxUcmFuc2FjdGlvbklkICp2eGlkczsKKwkJCQkJaW50 CWNudDsKKworCQkJCQlBc3NlcnQobG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzKTsKKwkJ CQkJdnhpZHMgPQlHZXRMb2NrQ29uZmxpY3RzKCZsb2NhbGxvY2stPnRhZy5sb2NrLAorCQkJ CQkJCQkJCQkgQWNjZXNzRXhjbHVzaXZlTG9jaywgJmNudCk7CisKKwkJCQkJLyoKKwkJCQkJ ICogTG9nIHRoZSByZWNvdmVyeSBjb25mbGljdCBpZiB0aGVyZSBpcyBzdGlsbCB2aXJ0dWFs IHRyYW5zYWN0aW9uCisJCQkJCSAqIGNvbmZsaWN0aW5nIHdpdGggdGhlIGxvY2suCisJCQkJ CSAqLworCQkJCQlpZiAoY250ID4gMCkKKwkJCQkJeworCQkJCQkJTG9nUmVjb3ZlcnlDb25m bGljdChQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0xPQ0ssCisJCQkJCQkJCQkJCXN0YW5k YnlXYWl0U3RhcnQsIGN1cl90cywgdnhpZHMpOworCQkJCQkJbG9nZ2VkX3JlY292ZXJ5X2Nv bmZsaWN0ID0gdHJ1ZTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KIAkJfQogCQllbHNlCiAJCXsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9taXNjL2d1Yy5jCmluZGV4IDU5NmJjYjdiODQuLmU1NWEyOGIxY2QgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9ndWMuYwpAQCAtMTU3MCw3ICsxNTcwLDE1IEBAIHN0YXRpYyBzdHJ1Y3Qg Y29uZmlnX2Jvb2wgQ29uZmlndXJlTmFtZXNCb29sW10gPQogCQlmYWxzZSwKIAkJTlVMTCwg TlVMTCwgTlVMTAogCX0sCi0KKwl7CisJCXsibG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRz IiwgUEdDX1NJR0hVUCwgTE9HR0lOR19XSEFULAorCQkJZ2V0dGV4dF9ub29wKCJMb2dzIHN0 YW5kYnkgcmVjb3ZlcnkgY29uZmxpY3Qgd2FpdHMuIiksCisJCQlOVUxMCisJCX0sCisJCSZs b2dfcmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHMsCisJCWZhbHNlLAorCQlOVUxMLCBOVUxMLCBO VUxMCisJfSwKIAl7CiAJCXsibG9nX2hvc3RuYW1lIiwgUEdDX1NJR0hVUCwgTE9HR0lOR19X SEFULAogCQkJZ2V0dGV4dF9ub29wKCJMb2dzIHRoZSBob3N0IG5hbWUgaW4gdGhlIGNvbm5l Y3Rpb24gbG9ncy4iKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNx bC5jb25mLnNhbXBsZQppbmRleCA5Y2I1NzFmN2NjLi41NjI1NjgxZThhIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC01NTMs NiArNTUzLDggQEAKIAkJCQkJIyAgICUlID0gJyUnCiAJCQkJCSMgZS5nLiAnPCV1JSUlZD4g JwogI2xvZ19sb2NrX3dhaXRzID0gb2ZmCQkJIyBsb2cgbG9jayB3YWl0cyA+PSBkZWFkbG9j a190aW1lb3V0CisjbG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzID0gb2ZmCSMgbG9nIHN0 YW5kYnkgcmVjb3ZlcnkgY29uZmxpY3Qgd2FpdHMKKwkJCQkJIyA+PSBkZWFkbG9ja190aW1l b3V0CiAjbG9nX3BhcmFtZXRlcl9tYXhfbGVuZ3RoID0gLTEJCSMgd2hlbiBsb2dnaW5nIHN0 YXRlbWVudHMsIGxpbWl0IGxvZ2dlZAogCQkJCQkjIGJpbmQtcGFyYW1ldGVyIHZhbHVlcyB0 byBOIGJ5dGVzOwogCQkJCQkjIC0xIG1lYW5zIHByaW50IGluIGZ1bGwsIDAgZGlzYWJsZXMK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3RhbmRieS5oIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9zdGFuZGJ5LmgKaW5kZXggZmFhZjFkMzgxNy4uZDI0OTQ1OWFhNiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdGFuZGJ5LmgKKysrIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9zdGFuZGJ5LmgKQEAgLTIzLDYgKzIzLDcgQEAKIGV4dGVybiBpbnQJdmFj dXVtX2RlZmVyX2NsZWFudXBfYWdlOwogZXh0ZXJuIGludAltYXhfc3RhbmRieV9hcmNoaXZl X2RlbGF5OwogZXh0ZXJuIGludAltYXhfc3RhbmRieV9zdHJlYW1pbmdfZGVsYXk7CitleHRl cm4gYm9vbAlsb2dfcmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHM7CiAKIGV4dGVybiB2b2lkIElu aXRSZWNvdmVyeVRyYW5zYWN0aW9uRW52aXJvbm1lbnQodm9pZCk7CiBleHRlcm4gdm9pZCBT aHV0ZG93blJlY292ZXJ5VHJhbnNhY3Rpb25FbnZpcm9ubWVudCh2b2lkKTsKQEAgLTMyLDEy ICszMywxNCBAQCBleHRlcm4gdm9pZCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhTbmFw c2hvdChUcmFuc2FjdGlvbklkIGxhdGVzdFJlbW92ZWRYaWQsCiBleHRlcm4gdm9pZCBSZXNv bHZlUmVjb3ZlcnlDb25mbGljdFdpdGhUYWJsZXNwYWNlKE9pZCB0c2lkKTsKIGV4dGVybiB2 b2lkIFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aERhdGFiYXNlKE9pZCBkYmlkKTsKIAot ZXh0ZXJuIHZvaWQgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoTG9jayhMT0NLVEFHIGxv Y2t0YWcpOworZXh0ZXJuIHZvaWQgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoTG9jayhM T0NLVEFHIGxvY2t0YWcsIGJvb2wgbmVlZF9sb2cpOwogZXh0ZXJuIHZvaWQgUmVzb2x2ZVJl Y292ZXJ5Q29uZmxpY3RXaXRoQnVmZmVyUGluKHZvaWQpOwogZXh0ZXJuIHZvaWQgQ2hlY2tS ZWNvdmVyeUNvbmZsaWN0RGVhZGxvY2sodm9pZCk7CiBleHRlcm4gdm9pZCBTdGFuZGJ5RGVh ZExvY2tIYW5kbGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgU3RhbmRieVRpbWVvdXRIYW5kbGVy KHZvaWQpOwogZXh0ZXJuIHZvaWQgU3RhbmRieUxvY2tUaW1lb3V0SGFuZGxlcih2b2lkKTsK K2V4dGVybiB2b2lkIExvZ1JlY292ZXJ5Q29uZmxpY3QoUHJvY1NpZ25hbFJlYXNvbiByZWFz b24sIFRpbWVzdGFtcFR6IHdhaXRfc3RhcnQsCisJCQkJCQkJCVRpbWVzdGFtcFR6IGN1cl90 cywgVmlydHVhbFRyYW5zYWN0aW9uSWQgKndhaXRfbGlzdCk7CiAKIC8qCiAgKiBTdGFuZGJ5 IFJtZ3IgKFJNX1NUQU5EQllfSUQpCg== --------------A554AE4FB1C45649E59FE7F5--