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.96) (envelope-from ) id 1w7oD4-005iLX-2A for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 05:33:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w7oD2-00F1Eu-0H for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 05:33:44 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w7oD1-00F1Em-2L for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 05:33:44 +0000 Received: from mail-lf1-x136.google.com ([2a00:1450:4864:20::136]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w7oCz-00000002Igh-0MxQ for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 05:33:43 +0000 Received: by mail-lf1-x136.google.com with SMTP id 2adb3069b0e04-5a2b636b944so2632087e87.1 for ; Tue, 31 Mar 2026 22:33:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775021620; cv=none; d=google.com; s=arc-20240605; b=PpXn4+pXh19d07WtZcY5ZhKyryjhkv7mCZkkXl9Z/v2jIr8+1uBqdRy4AznWvbwrYe rrHkKKFnSWOlj0IzWAj5LmYd3yUwNOSCnmBVAdK1sLQ/V7ZM6oH45G7G7RAle8yTweMZ +tzygMKjU5cZxEBdI9W6h3oOJA4DeEerAUzBJ7c24n3nDcPiSIFrfLWc7W15IqQPdTKq lK8fwmWB8VIZN8qB7deA+liznsqpVE5D2Lz9oNZh/aDNfUWzjl9YRR0nb8WWrbzee1KY kcKpYumSJFcn0uJK/YtWUqDLCYrGodrRh8A54qspQWPsoztUfK24qeifgDMcxpYg7xFC talg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=A3r3r7r+aXal9ZM+9LwOBvjjVAqgYzK5OvmxERO5wsU=; fh=gXeJQtLcO0iqukaCP5vvXlExa/LIRxgWWH1/GEgffNM=; b=i47aPidG440YYk1+GhbMI2XYr0MBGHyYacTkvhq2eGoEf3XQNv/HmcboJXHGIvpVg6 c9HPO9McME/LgQ6s3RXAha9481yrObR0m+oAW4JZsI6C6Q6//8AIaMjo7Cr7xzrOaMvn wYNDHtTRzDkWlUeXlzb8eBdpZpZjICSlFcwb8JRGgQFc5wTzzZh9CovgS5Bqp2wTsQmz rHTEcwN4XkxminDRrGtnYzzjc+7uqdq6IgHwszVOwjt4gEvZkfhfH55GjqP/NoBxO8BO 94nFUQCQqVoiv8jPOV8XNAlVdt+kGOot9BQkYlJydF/og3ijDLapcdSVWBwlcjJee1ki qT1A==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775021620; x=1775626420; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=A3r3r7r+aXal9ZM+9LwOBvjjVAqgYzK5OvmxERO5wsU=; b=k6z2P6UkrUS08OfRp3TgzJjd3+4Oow+GvEgqstGJe/V30QqztJ7MYVrQXcU12GU9f+ PDkoeZR+7rkXoXs2u1pvjMTxOC3P+OzwspTrx7r68WvSj1a+ud+DCF5VbzGC84z9qCq3 4QLgV7+tY14+PJwRNw8b40SPpUUL+eBjliJbf8CmKZrFrqxhSYL6PjRQh8V7BNv+ebK9 ohRNzvlRE/W72p1ce3GpoM7wJ04EvWcyJoRdfwhWtyDGLcZGW9J+ts2ivg/dt7CrSyRI xdysDSfVAN0HI8FLQMEA98fpIOJSYuQ7HMhG1dzOIgvjJS99t8oIsv0KUzcNQ+iMqiDy Ugmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775021620; x=1775626420; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=A3r3r7r+aXal9ZM+9LwOBvjjVAqgYzK5OvmxERO5wsU=; b=n6REOCqOFAytHnkVEj5Kqo5zQGkQApF6F/6hMX4tV2ksU5EN0UEIiJ2qoBIHvnBVbz XhcZavkSPh5hbWcogNUa1BR7s6MWZe5xFUGBf/nWdCiumJBId2nDHGnxxhfCMo6XxIqp qO6kwvEf0RYjxN86XdgMYZk8t6Tp8sPw2mTiHSFbVJTYyvgLdA19VHx4Y+cqi1CxNfl4 ii4ufz+3TCbL7jU43bX6TB6xEiHPzufuYf+2pXBGkhnLig0f4mdgVlHiPhGXXUhuhJit wOeqlP637njpK5i9hRSZeGYOF9zezmc9acAySVkos4YJuz3lfLhLbnyKPvwu8anNJtgf lR+g== X-Forwarded-Encrypted: i=1; AJvYcCWu2qrzgYCAoYLtTxJzVNMMmdHIq2NAd/Dgch/XGAKFY4sdm/7Bpqrn8ZOvWYAZP0WAcAoCh4/pXAtpm402@lists.postgresql.org X-Gm-Message-State: AOJu0YyWzSzn+K4cV0ODHPkVbKqw/Faspb4sArwHVO5UbN4+OJonqqnH /Hhafv+ZDSubcmtbT1ZG72OTB6fnvPMlox+zEn7Y0J5gVru7IW7gIvFs5EhOFE5Dlba0TkcxZG8 kRvOyYn4Pi3GDDfGg87awW2r9ydMyiQ== X-Gm-Gg: ATEYQzyssHX2rqu1UXJZkYjTGed/+fFYXed5EqWpk4UwayKpA9N7ABJ2nOJez0KrUFP j/JXeWobbAcBkZI1hO/7qRvFWAoQeeMM4q3xK4lkPsp0dg8yYrjTRx90WKbDfhK3a2Bqyc+uG7a 2sJpy6bRJNwn44ofo1NV6EpCFQ4jcNlS/UtDE2bwl1r05bj4Mmt2aowX3H8yoi5C8A3wNUr1ckh yNSMXbsq2KwbU+x+Tq1mLiKcy37eqgDICC/zZbMyQIBgQr6sfQo6+ojJGbnl9eullC7uOxWMOGN o6MBrXcl+/DHXg== X-Received: by 2002:a05:6512:6ce:b0:5a2:7b95:af0 with SMTP id 2adb3069b0e04-5a2c1f1a5dcmr715699e87.25.1775021619684; Tue, 31 Mar 2026 22:33:39 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Nisha Moond Date: Wed, 1 Apr 2026 11:03:27 +0530 X-Gm-Features: AQROBzAV_0SGRKzepzHjUZbxcJ4j1qP4PyoBFQsctjlWAb37Ufz60vLuS5n9Evk Message-ID: Subject: Re: Use SIGTERM instead of SIGUSR1 for slotsync worker to exit during promotion? To: shveta malik Cc: Fujii Masao , Amit Kapila , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000001c3ead064e5f6d1e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001c3ead064e5f6d1e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 31, 2026 at 4:12=E2=80=AFPM shveta malik wrote: > > On Tue, Mar 31, 2026 at 11:35=E2=80=AFAM Nisha Moond wrote: > > > > On Mon, Mar 30, 2026 at 4:39=E2=80=AFPM Fujii Masao wrote: > > > > > > On Mon, Mar 30, 2026 at 1:18=E2=80=AFPM Nisha Moond wrote: > > > > We were using the same log message in two places: > > > > check_and_set_sync_info() and HandleSlotSyncMessage(). > > > > I think =E2=80=9Cwill not start=E2=80=9D fits better in the first c= ase, while =E2=80=9Cwill > > > > stop=E2=80=9D makes sense to keep in the second. > > > > > > Thanks for updating the patch! > > > > > > With the patch, in my testing, standby promotion always produces > > > the following logs: > > > > > > LOG: replication slot synchronization worker will stop because > > > promotion is triggered > > > LOG: replication slot synchronization worker will not start > > > because promotion was triggered > > > > > > It looks like the postmaster immediately restarts the slotsync worker= after > > > promotion terminates it, and that new worker then exits on seeing > > > SlotSyncCtx->stopSignaled. > > > > > > IMO, always emitting both messages is a bit confusing. It would be ni= ce to > > > suppress the second one if possible. > > > > > > One idea would be to prevent the restart altogether. For example, > > > ProcessSlotSyncMessage() could set SlotSyncCtx->last_start_time to > > > a special value (like -1), and SlotSyncWorkerCanRestart() could retur= n > > > false (i.e., prevent postmater from starting up slotsync worker) when > > > it sees that. Alternatively, SlotSyncWorkerCanRestart() could simply > > > check SlotSyncCtx->stopSignaled. > > > > > > That said, as far as I remember correctly, postmaster is generally no= t > > > supposed to touch shared memory (per the comments in postmaster.c), > > > so I'm not sure this approach is acceptable. On the other hand, > > > postmaster and the slotsync worker already rely on SlotSyncCtx->last_= start_time, > > > so perhaps there's some precedent here. > > > > > IIUC, checking SlotSyncCtx->stopSignaled in SlotSyncWorkerCanRestart() > > may not be ideal, as it requires a spinlock to avoid races with the > > startup process and it is disallowed to take lock in postmaster main > > loop. Whereas, SlotSyncCtx->last_start_time doesn=E2=80=99t need a lock= since > > the postmaster accesses it only when the worker is not alive. > > > > I agree. > > > Another option could be to log in check_and_set_sync_info() at DEBUG1 > > instead of LOG level. This message appears only after stopSignaled is > > set, when promotion is already in progress and the first worker has > > logged =E2=80=9Cwill stop=E2=80=A6=E2=80=9D. The second worker doesn=E2= =80=99t do any real work. Since > > there=E2=80=99s nothing actionable for users, using DEBUG1 would keep i= t > > useful for debugging (e.g., noticing immediate restarts) while > > avoiding extra log noise. Thoughts? > > > > +1. > > Do you think we can slightly tweak the comment in atop file to: > > On promotion the startup process sets 'stopSignaled' and uses this > 'pid' to signal synchronizing process with PROCSIG_SLOTSYNC_MESSAGE > and also to wake it up so that the process can immediately stop its > synchronizing work. Setting 'stopSignaled' on the other hand is used > to handle the race condition.... > Done. > Also shall we quick exit ProcessSlotSyncMessage() if syncing is > already finished by API? > Make sense. Fixed. Please find the updated patch (v7) attached. -- Thanks, Nisha --0000000000001c3ead064e5f6d1e Content-Type: application/octet-stream; name="v7-0001-Prevent-slotsync-worker-API-hang-during-standby-p.patch" Content-Disposition: attachment; filename="v7-0001-Prevent-slotsync-worker-API-hang-during-standby-p.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnfm0wau0 RnJvbSA0OTg5MmY2YTMwNjkzNGYyMTQ4ZjU0YzNiY2YxZWNmZDcyMjMwM2FlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOaXNoYSBNb29uZCA8bmlzaGEubW9vbmQ0MTJAZ21haWwuY29t PgpEYXRlOiBXZWQsIDI1IE1hciAyMDI2IDE4OjA0OjEyICswNTMwClN1YmplY3Q6IFtQQVRDSCB2 N10gUHJldmVudCBzbG90c3luYyB3b3JrZXIvQVBJIGhhbmcgZHVyaW5nIHN0YW5kYnkgcHJvbW90 aW9uCgpEdXJpbmcgc3RhbmRieSBwcm9tb3Rpb24sIFNodXREb3duU2xvdFN5bmMoKSBzaWduYWxz IHRoZSBzbG90c3luYyB3b3JrZXIKdG8gc3RvcCBhbmQgd2FpdHMgZm9yIGl0IHRvIGZpbmlzaC4g SWYgdGhlIHdvcmtlciBpcyBibG9ja2VkIGluCldhaXRMYXRjaE9yU29ja2V0KCkgd2FpdGluZyBm b3IgYSByZXNwb25zZSBmcm9tIHRoZSBwcmltYXJ5IChlLmcuLCBkdWUKdG8gYSBuZXR3b3JrIGZh aWx1cmUpLCB0aGUgcHJldmlvdXMgU0lHVVNSMSBzaWduYWwgb25seSBzZXRzIHRoZSBsYXRjaC4K VGhlIHdvcmtlciB3YWtlcyB1cCwgZmluZHMgbm8gcGVuZGluZyBpbnRlcnJ1cHQsIGFuZCBnb2Vz IGJhY2sgdG8Kd2FpdGluZywgY2F1c2luZyBTaHV0RG93blNsb3RTeW5jKCkgdG8gd2FpdCBpbmRl ZmluaXRlbHkgYW5kIGJsb2NraW5nCnByb21vdGlvbi4KCkZpeCB0aGlzIGJ5IGludHJvZHVjaW5n IGEgbmV3IHByb2NzaWduYWwgcmVhc29uIFBST0NTSUdfU0xPVFNZTkNfTUVTU0FHRS4KVGhlIHNp Z25hbCBoYW5kbGVyIHNldHMgdGhlIGFwcHJvcHJpYXRlIGludGVycnVwdCBmbGFncyBzbyB0aGF0 CldhaXRMYXRjaE9yU29ja2V0KCkgcmV0dXJucyBhbmQgdGhlIHdvcmtlciBleGl0cyBjbGVhbmx5 LCBhbGxvd2luZwpwcm9tb3Rpb24gdG8gcHJvY2VlZC4KLS0tCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMgfCAxNTIgKysrKysrKysrKysrKysrLS0tLS0tCiBzcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMgICAgICAgfCAgIDQgKwogc3JjL2JhY2tl bmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3Nsb3RzeW5jLmggICAgICAgICB8ICAgNyArCiBzcmMvaW5jbHVkZS9zdG9yYWdl L3Byb2NzaWduYWwuaCAgICAgICAgICAgfCAgIDEgKwogNSBmaWxlcyBjaGFuZ2VkLCAxMjQgaW5z ZXJ0aW9ucygrKSwgNDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9zbG90c3luYy5jCmluZGV4IGU3NWRiNjllM2Y2Li5jMDcwYzg2OWU1ZCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jCisrKyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2xvdHN5bmMuYwpAQCAtODUsMTggKzg1LDE5IEBA CiAgKiBTdHJ1Y3QgZm9yIHNoYXJpbmcgaW5mb3JtYXRpb24gdG8gY29udHJvbCBzbG90IHN5bmNo cm9uaXphdGlvbi4KICAqCiAgKiBUaGUgJ3BpZCcgaXMgZWl0aGVyIHRoZSBzbG90IHN5bmMgd29y a2VyJ3MgcGlkIG9yIHRoZSBiYWNrZW5kJ3MgcGlkIHJ1bm5pbmcKLSAqIHRoZSBTUUwgZnVuY3Rp b24gcGdfc3luY19yZXBsaWNhdGlvbl9zbG90cygpLiBXaGVuIHRoZSBzdGFydHVwIHByb2Nlc3Mg c2V0cwotICogJ3N0b3BTaWduYWxlZCcgZHVyaW5nIHByb21vdGlvbiwgaXQgdXNlcyB0aGlzICdw aWQnIHRvIHdha2UgdXAgdGhlIGN1cnJlbnRseQotICogc3luY2hyb25pemluZyBwcm9jZXNzIHNv IHRoYXQgdGhlIHByb2Nlc3MgY2FuIGltbWVkaWF0ZWx5IHN0b3AgaXRzCi0gKiBzeW5jaHJvbml6 aW5nIHdvcmsgb24gc2VlaW5nICdzdG9wU2lnbmFsZWQnIHNldC4KLSAqIFNldHRpbmcgJ3N0b3BT aWduYWxlZCcgaXMgYWxzbyB1c2VkIHRvIGhhbmRsZSB0aGUgcmFjZSBjb25kaXRpb24gd2hlbiB0 aGUKLSAqIHBvc3RtYXN0ZXIgaGFzIG5vdCBub3RpY2VkIHRoZSBwcm9tb3Rpb24geWV0IGFuZCB0 aHVzIG1heSBlbmQgdXAgcmVzdGFydGluZwotICogdGhlIHNsb3Qgc3luYyB3b3JrZXIuIElmICdz dG9wU2lnbmFsZWQnIGlzIHNldCwgdGhlIHdvcmtlciB3aWxsIGV4aXQgaW4gc3VjaCBhCi0gKiBj YXNlLiBUaGUgU1FMIGZ1bmN0aW9uIHBnX3N5bmNfcmVwbGljYXRpb25fc2xvdHMoKSB3aWxsIGFs c28gZXJyb3Igb3V0IGlmCi0gKiB0aGlzIGZsYWcgaXMgc2V0LiBOb3RlIHRoYXQgd2UgZG9uJ3Qg bmVlZCB0byByZXNldCB0aGlzIHZhcmlhYmxlIGFzIGFmdGVyCi0gKiBwcm9tb3Rpb24gdGhlIHNs b3Qgc3luYyB3b3JrZXIgd29uJ3QgYmUgcmVzdGFydGVkIGJlY2F1c2UgdGhlIHBtU3RhdGUKLSAq IGNoYW5nZXMgdG8gUE1fUlVOIGZyb20gUE1fSE9UX1NUQU5EQlkgYW5kIHdlIGRvbid0IHN1cHBv cnQgZGVtb3RpbmcKLSAqIHByaW1hcnkgd2l0aG91dCByZXN0YXJ0aW5nIHRoZSBzZXJ2ZXIuIFNl ZSBMYXVuY2hNaXNzaW5nQmFja2dyb3VuZFByb2Nlc3Nlcy4KKyAqIHRoZSBTUUwgZnVuY3Rpb24g cGdfc3luY19yZXBsaWNhdGlvbl9zbG90cygpLiBPbiBwcm9tb3Rpb24sIHRoZSBzdGFydHVwCisg KiBwcm9jZXNzIHNldHMgJ3N0b3BTaWduYWxlZCcgYW5kIHVzZXMgdGhpcyAncGlkJyB0byBzaWdu YWwgdGhlIHN5bmNocm9uaXppbmcKKyAqIHByb2Nlc3Mgd2l0aCBQUk9DU0lHX1NMT1RTWU5DX01F U1NBR0UgYW5kIGFsc28gdG8gd2FrZSBpdCB1cCBzbyB0aGF0IHRoZQorICogcHJvY2VzcyBjYW4g aW1tZWRpYXRlbHkgc3RvcCBpdHMgc3luY2hyb25pemluZyB3b3JrLgorICogU2V0dGluZyAnc3Rv cFNpZ25hbGVkJyBvbiB0aGUgb3RoZXIgaGFuZCBpcyB1c2VkIHRvIGhhbmRsZSB0aGUgcmFjZQor ICogY29uZGl0aW9uIHdoZW4gdGhlIHBvc3RtYXN0ZXIgaGFzIG5vdCBub3RpY2VkIHRoZSBwcm9t b3Rpb24geWV0IGFuZCB0aHVzIG1heQorICogZW5kIHVwIHJlc3RhcnRpbmcgdGhlIHNsb3Qgc3lu YyB3b3JrZXIuIElmICdzdG9wU2lnbmFsZWQnIGlzIHNldCwgdGhlIHdvcmtlcgorICogd2lsbCBl eGl0IGluIHN1Y2ggYSBjYXNlLiBUaGUgU1FMIGZ1bmN0aW9uIHBnX3N5bmNfcmVwbGljYXRpb25f c2xvdHMoKSB3aWxsCisgKiBhbHNvIGVycm9yIG91dCBpZiB0aGlzIGZsYWcgaXMgc2V0LiBOb3Rl IHRoYXQgd2UgZG9uJ3QgbmVlZCB0byByZXNldCB0aGlzCisgKiB2YXJpYWJsZSBhcyBhZnRlciBw cm9tb3Rpb24gdGhlIHNsb3Qgc3luYyB3b3JrZXIgd29uJ3QgYmUgcmVzdGFydGVkIGJlY2F1c2UK KyAqIHRoZSBwbVN0YXRlIGNoYW5nZXMgdG8gUE1fUlVOIGZyb20gUE1fSE9UX1NUQU5EQlkgYW5k IHdlIGRvbid0IHN1cHBvcnQKKyAqIGRlbW90aW5nIHByaW1hcnkgd2l0aG91dCByZXN0YXJ0aW5n IHRoZSBzZXJ2ZXIuCisgKiBTZWUgTGF1bmNoTWlzc2luZ0JhY2tncm91bmRQcm9jZXNzZXMuCiAg KgogICogVGhlICdzeW5jaW5nJyBmbGFnIGlzIG5lZWRlZCB0byBwcmV2ZW50IGNvbmN1cnJlbnQg c2xvdCBzeW5jcyB0byBhdm9pZCBzbG90CiAgKiBvdmVyd3JpdGVzLgpAQCAtMTQxLDYgKzE0Miwy MiBAQCBzdGF0aWMgbG9uZyBzbGVlcF9tcyA9IE1JTl9TTE9UU1lOQ19XT1JLRVJfTkFQVElNRV9N UzsKICAqLwogc3RhdGljIGJvb2wgc3luY2luZ19zbG90cyA9IGZhbHNlOwogCisvKgorICogSW50 ZXJydXB0IGZsYWcgc2V0IHdoZW4gUFJPQ1NJR19TTE9UU1lOQ19NRVNTQUdFIGlzIHJlY2VpdmVk LCBhc2tpbmcgdGhlCisgKiBzbG90c3luYyB3b3JrZXIgb3IgcGdfc3luY19yZXBsaWNhdGlvbl9z bG90cygpIHRvIHN0b3AgYmVjYXVzZQorICogc3RhbmRieSBwcm9tb3Rpb24gaGFzIGJlZW4gdHJp Z2dlcmVkLgorICoKKyAqIFdlIGNhbm5vdCByZWx5IHNvbGVseSBvbiAnc3RvcFNpZ25hbGVkJyBo ZXJlIGJlY2F1c2U6CisgKiAxKSBJdCByZXNpZGVzIGluIHNoYXJlZCBtZW1vcnkgYW5kIGlzIHZp c2libGUgdG8gYWxsIHByb2Nlc3Nlcywgc28gY2hlY2tpbmcKKyAqICAgIGl0IGRpcmVjdGx5IGlu IFByb2Nlc3NJbnRlcnJ1cHRzKCkgd291bGQgcmVxdWlyZSBhZGRpdGlvbmFsIGNoZWNrcyB0bwor ICogICAgZW5zdXJlIG9ubHkgdGhlIHN5bmNocm9uaXppbmcgcHJvY2VzcyBhY3RzIG9uIGl0Lgor ICogMikgSXQgaGFzIGRpZmZlcmVudCBsaWZldGltZSBzZW1hbnRpY3MgYW5kIGNhbm5vdCBiZSBy ZXNldCBhZnRlciBoYW5kbGluZywKKyAqICAgIGFzIGl0IGFsc28gZ3VhcmRzIGFnYWluc3QgcG9z dG1hc3RlciBhbmQgcHJvbW90aW9uIHJhY2UgY29uZGl0aW9ucy4KKyAqIDMpIEFjY2Vzc2luZyBp dCByZXF1aXJlcyBhY3F1aXJpbmcgYSBzcGlubG9jaywgd2hpY2ggY2FuIGJlIHRvbyBleHBlbnNp dmUKKyAqICAgIG9yIHVuZGVzaXJhYmxlIGZvciBldmVyeSBQcm9jZXNzSW50ZXJydXB0cygpIGNh bGwuCisgKi8KK3ZvbGF0aWxlIHNpZ19hdG9taWNfdCBTbG90U3luY1NodXRkb3duUGVuZGluZyA9 IGZhbHNlOworCiAvKgogICogU3RydWN0dXJlIHRvIGhvbGQgaW5mb3JtYXRpb24gZmV0Y2hlZCBm cm9tIHRoZSBwcmltYXJ5IHNlcnZlciBhYm91dCBhIGxvZ2ljYWwKICAqIHJlcGxpY2F0aW9uIHNs b3QuCkBAIC0xMjkxLDM2ICsxMzA4LDUyIEBAIHNsb3RzeW5jX3JlcmVhZF9jb25maWcodm9pZCkK IH0KIAogLyoKLSAqIEludGVycnVwdCBoYW5kbGVyIGZvciBwcm9jZXNzIHBlcmZvcm1pbmcgc2xv dCBzeW5jaHJvbml6YXRpb24uCisgKiBIYW5kbGUgcmVjZWlwdCBvZiBhbiBpbnRlcnJ1cHQgaW5k aWNhdGluZyBhIHNsb3RzeW5jIHNodXRkb3duIG1lc3NhZ2UuCisgKgorICogVGhpcyBpcyBjYWxs ZWQgd2l0aGluIHRoZSBTSUdVU1IxIGhhbmRsZXIuICBBbGwgd2UgZG8gaGVyZSBpcyBzZXQgYSBm bGFnCisgKiB0aGF0IHdpbGwgY2F1c2UgdGhlIG5leHQgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSB0 byBpbnZva2UKKyAqIFByb2Nlc3NTbG90U3luY01lc3NhZ2UoKS4KICAqLwotc3RhdGljIHZvaWQK LVByb2Nlc3NTbG90U3luY0ludGVycnVwdHModm9pZCkKK3ZvaWQKK0hhbmRsZVNsb3RTeW5jTWVz c2FnZUludGVycnVwdCh2b2lkKQogewotCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJSW50ZXJy dXB0UGVuZGluZyA9IHRydWU7CisJU2xvdFN5bmNTaHV0ZG93blBlbmRpbmcgPSB0cnVlOworCS8q IGxhdGNoIHdpbGwgYmUgc2V0IGJ5IHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyICovCit9CiAK LQlpZiAoU2xvdFN5bmNDdHgtPnN0b3BTaWduYWxlZCkKLQl7Ci0JCWlmIChBbUxvZ2ljYWxTbG90 U3luY1dvcmtlclByb2Nlc3MoKSkKLQkJewotCQkJZXJlcG9ydChMT0csCi0JCQkJCWVycm1zZygi cmVwbGljYXRpb24gc2xvdCBzeW5jaHJvbml6YXRpb24gd29ya2VyIHdpbGwgc3RvcCBiZWNhdXNl IHByb21vdGlvbiBpcyB0cmlnZ2VyZWQiKSk7CisvKgorICogSGFuZGxlIGEgUFJPQ1NJR19TTE9U U1lOQ19NRVNTQUdFIHNpZ25hbCwgY2FsbGVkIGZyb20gUHJvY2Vzc0ludGVycnVwdHMoKS4KKyAq CisgKiBJZiB0aGUgY3VycmVudCBwcm9jZXNzIGlzIHRoZSBzbG90c3luYyBiYWNrZ3JvdW5kIHdv cmtlciwgbG9nIGEgbWVzc2FnZQorICogYW5kIGV4aXQgY2xlYW5seS4gIElmIGl0IGlzIGEgYmFj a2VuZCBleGVjdXRpbmcgcGdfc3luY19yZXBsaWNhdGlvbl9zbG90cygpLAorICogcmFpc2UgYW4g ZXJyb3IsIHVubGVzcyB0aGUgc3luYyBoYXMgYWxyZWFkeSBmaW5pc2hlZCwgaW4gd2hpY2ggY2Fz ZSB0aGVyZQorICogaXMgbm8gbmVlZCB0byBpbnRlcnJ1cHQgdGhlIGNhbGxlci4KKyAqLwordm9p ZAorUHJvY2Vzc1Nsb3RTeW5jTWVzc2FnZSh2b2lkKQoreworCVNsb3RTeW5jU2h1dGRvd25QZW5k aW5nID0gZmFsc2U7CiAKLQkJCXByb2NfZXhpdCgwKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8q Ci0JCQkgKiBGb3IgdGhlIGJhY2tlbmQgZXhlY3V0aW5nIFNRTCBmdW5jdGlvbgotCQkJICogcGdf c3luY19yZXBsaWNhdGlvbl9zbG90cygpLgotCQkJICovCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJ CQllcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAotCQkJ CQllcnJtc2coInJlcGxpY2F0aW9uIHNsb3Qgc3luY2hyb25pemF0aW9uIHdpbGwgc3RvcCBiZWNh dXNlIHByb21vdGlvbiBpcyB0cmlnZ2VyZWQiKSk7Ci0JCX0KKwlpZiAoQW1Mb2dpY2FsU2xvdFN5 bmNXb3JrZXJQcm9jZXNzKCkpCisJeworCQllcmVwb3J0KExPRywKKwkJCQllcnJtc2coInJlcGxp Y2F0aW9uIHNsb3Qgc3luY2hyb25pemF0aW9uIHdvcmtlciB3aWxsIHN0b3AgYmVjYXVzZSBwcm9t b3Rpb24gaXMgdHJpZ2dlcmVkIikpOworCQlwcm9jX2V4aXQoMCk7CiAJfQorCWVsc2UKKwl7CisJ CS8qCisJCSAqIElmIHN5bmMgaGFzIGFscmVhZHkgY29tcGxldGVkLCB0aGVyZSBpcyBubyBuZWVk IHRvIGludGVycnVwdCB0aGUKKwkJICogY2FsbGVyIHdpdGggYW4gZXJyb3IuCisJCSAqLworCQlp ZiAoIUlzU3luY2luZ1JlcGxpY2F0aW9uU2xvdHMoKSkKKwkJCXJldHVybjsKIAotCWlmIChDb25m aWdSZWxvYWRQZW5kaW5nKQotCQlzbG90c3luY19yZXJlYWRfY29uZmlnKCk7CisJCWVyZXBvcnQo RVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NU QVRFKSwKKwkJCQllcnJtc2coInJlcGxpY2F0aW9uIHNsb3Qgc3luY2hyb25pemF0aW9uIHdpbGwg c3RvcCBiZWNhdXNlIHByb21vdGlvbiBpcyB0cmlnZ2VyZWQiKSk7CisJfQogfQogCiAvKgpAQCAt MTQyNyw2ICsxNDYwLDM0IEBAIGNoZWNrX2FuZF9zZXRfc3luY19pbmZvKHBpZF90IHN5bmNfcHJv Y2Vzc19waWQpCiB7CiAJU3BpbkxvY2tBY3F1aXJlKCZTbG90U3luY0N0eC0+bXV0ZXgpOwogCisJ LyoKKwkgKiBFeGl0IGltbWVkaWF0ZWx5IGlmIHByb21vdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQu ICBUaGlzIGd1YXJkcyBhZ2FpbnN0CisJICogYSBuZXcgd29ya2VyIChvciBhIG5ldyBBUEkgY2Fs bCkgdGhhdCBzdGFydHMgYWZ0ZXIgdGhlIG9sZCB3b3JrZXIgd2FzCisJICogc3RvcHBlZCBieSBT aHV0RG93blNsb3RTeW5jKCkuCisJICovCisJaWYgKFNsb3RTeW5jQ3R4LT5zdG9wU2lnbmFsZWQp CisJeworCQlTcGluTG9ja1JlbGVhc2UoJlNsb3RTeW5jQ3R4LT5tdXRleCk7CisKKwkJaWYgKEFt TG9naWNhbFNsb3RTeW5jV29ya2VyUHJvY2VzcygpKQorCQl7CisJCQllcmVwb3J0KERFQlVHMSwK KwkJCQkJZXJybXNnKCJyZXBsaWNhdGlvbiBzbG90IHN5bmNocm9uaXphdGlvbiB3b3JrZXIgd2ls bCBub3Qgc3RhcnQgYmVjYXVzZSBwcm9tb3Rpb24gd2FzIHRyaWdnZXJlZCIpKTsKKworCQkJcHJv Y19leGl0KDApOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIEZvciB0aGUgYmFja2Vu ZCBleGVjdXRpbmcgU1FMIGZ1bmN0aW9uCisJCQkgKiBwZ19zeW5jX3JlcGxpY2F0aW9uX3Nsb3Rz KCkuCisJCQkgKi8KKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9PQkpF Q1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCWVycm1zZygicmVwbGljYXRpb24g c2xvdCBzeW5jaHJvbml6YXRpb24gd2lsbCBub3Qgc3RhcnQgYmVjYXVzZSBwcm9tb3Rpb24gd2Fz IHRyaWdnZXJlZCIpKTsKKwkJfQorCX0KKwogCWlmIChTbG90U3luY0N0eC0+c3luY2luZykKIAl7 CiAJCVNwaW5Mb2NrUmVsZWFzZSgmU2xvdFN5bmNDdHgtPm11dGV4KTsKQEAgLTE2MzUsNyArMTY5 NiwxMCBAQCBSZXBsU2xvdFN5bmNXb3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwg c2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJCWJvb2wJCXN0YXJ0ZWRfdHggPSBmYWxzZTsKIAkJ TGlzdAkgICAqcmVtb3RlX3Nsb3RzOwogCi0JCVByb2Nlc3NTbG90U3luY0ludGVycnVwdHMoKTsK KwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQlpZiAoQ29uZmlnUmVsb2FkUGVuZGluZykK KwkJCXNsb3RzeW5jX3JlcmVhZF9jb25maWcoKTsKIAogCQkvKgogCQkgKiBUaGUgc3lzY2FjaGUg YWNjZXNzIGluIGZldGNoX3JlbW90ZV9zbG90cygpIG5lZWRzIGEgdHJhbnNhY3Rpb24KQEAgLTE3 NDgsMTEgKzE4MTIsMTEgQEAgU2h1dERvd25TbG90U3luYyh2b2lkKQogCVNwaW5Mb2NrUmVsZWFz ZSgmU2xvdFN5bmNDdHgtPm11dGV4KTsKIAogCS8qCi0JICogU2lnbmFsIHByb2Nlc3MgZG9pbmcg c2xvdHN5bmMsIGlmIGFueS4gVGhlIHByb2Nlc3Mgd2lsbCBzdG9wIHVwb24KLQkgKiBkZXRlY3Rp bmcgdGhhdCB0aGUgc3RvcFNpZ25hbGVkIGZsYWcgaXMgc2V0IHRvIHRydWUuCisJICogU2lnbmFs IHByb2Nlc3MgZG9pbmcgc2xvdHN5bmMsIGlmIGFueSwgYXNraW5nIGl0IHRvIHN0b3AuCiAJICov CiAJaWYgKHN5bmNfcHJvY2Vzc19waWQgIT0gSW52YWxpZFBpZCkKLQkJa2lsbChzeW5jX3Byb2Nl c3NfcGlkLCBTSUdVU1IxKTsKKwkJU2VuZFByb2NTaWduYWwoc3luY19wcm9jZXNzX3BpZCwgUFJP Q1NJR19TTE9UU1lOQ19NRVNTQUdFLAorCQkJCQkgICBJTlZBTElEX1BST0NfTlVNQkVSKTsKIAog CS8qIFdhaXQgZm9yIHNsb3Qgc3luYyB0byBlbmQgKi8KIAlmb3IgKDs7KQpAQCAtMTkzMSw5ICsx OTk1LDYgQEAgU3luY1JlcGxpY2F0aW9uU2xvdHMoV2FsUmVjZWl2ZXJDb25uICp3cmNvbm4pCiAK IAkJY2hlY2tfYW5kX3NldF9zeW5jX2luZm8oTXlQcm9jUGlkKTsKIAotCQkvKiBDaGVjayBmb3Ig aW50ZXJydXB0cyBhbmQgY29uZmlnIGNoYW5nZXMgKi8KLQkJUHJvY2Vzc1Nsb3RTeW5jSW50ZXJy dXB0cygpOwotCiAJCXZhbGlkYXRlX3JlbW90ZV9pbmZvKHdyY29ubik7CiAKIAkJLyogUmV0cnkg dW50aWwgYWxsIHRoZSBzbG90cyBhcmUgc3luYy1yZWFkeSAqLwpAQCAtMTk0Myw3ICsyMDA0LDEw IEBAIFN5bmNSZXBsaWNhdGlvblNsb3RzKFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uKQogCQkJYm9v bAkJc29tZV9zbG90X3VwZGF0ZWQgPSBmYWxzZTsKIAogCQkJLyogQ2hlY2sgZm9yIGludGVycnVw dHMgYW5kIGNvbmZpZyBjaGFuZ2VzICovCi0JCQlQcm9jZXNzU2xvdFN5bmNJbnRlcnJ1cHRzKCk7 CisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCQlpZiAoQ29uZmlnUmVsb2FkUGVuZGlu ZykKKwkJCQlzbG90c3luY19yZXJlYWRfY29uZmlnKCk7CiAKIAkJCS8qIFdlIG11c3QgYmUgaW4g YSB2YWxpZCB0cmFuc2FjdGlvbiBzdGF0ZSAqLwogCQkJQXNzZXJ0KElzVHJhbnNhY3Rpb25TdGF0 ZSgpKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwppbmRleCA3ZTAxN2M4ZDUzYi4u OTk3OTJiMTM3NjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWdu YWwuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKQEAgLTI0LDYg KzI0LDcgQEAKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vbG9naWNhbGN0bC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIu aCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90c3luYy5oIgogI2luY2x1ZGUgInJlcGxpY2F0 aW9uL3dhbHNlbmRlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvY29uZGl0aW9uX3ZhcmlhYmxlLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKQEAgLTcwMCw2ICs3MDEsOSBAQCBwcm9jc2lnbmFs X3NpZ3VzcjFfaGFuZGxlcihTSUdOQUxfQVJHUykKIAlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NT SUdfUEFSQUxMRUxfQVBQTFlfTUVTU0FHRSkpCiAJCUhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdl SW50ZXJydXB0KCk7CiAKKwlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfU0xPVFNZTkNfTUVT U0FHRSkpCisJCUhhbmRsZVNsb3RTeW5jTWVzc2FnZUludGVycnVwdCgpOworCiAJaWYgKENoZWNr UHJvY1NpZ25hbChQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUKSkKIAkJSGFuZGxlUmVjb3ZlcnlD b25mbGljdEludGVycnVwdCgpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggMTBiZTYwMDExYWQuLmIz Y2Y1M2I1MDlmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIv c3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAi cG9zdG1hc3Rlci9wb3N0bWFzdGVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbGxh dW5jaGVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIgorI2luY2x1 ZGUgInJlcGxpY2F0aW9uL3Nsb3RzeW5jLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdC5o IgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHNlbmRlci5oIgogI2luY2x1ZGUgInJld3JpdGUv cmV3cml0ZUhhbmRsZXIuaCIKQEAgLTM1NzYsNiArMzU3Nyw5IEBAIFByb2Nlc3NJbnRlcnJ1cHRz KHZvaWQpCiAKIAlpZiAoUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nKQogCQlQcm9jZXNzUGFy YWxsZWxBcHBseU1lc3NhZ2VzKCk7CisKKwlpZiAoU2xvdFN5bmNTaHV0ZG93blBlbmRpbmcpCisJ CVByb2Nlc3NTbG90U3luY01lc3NhZ2UoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL3Nsb3RzeW5jLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90 c3luYy5oCmluZGV4IGU1NDZkMGQwNTBkLi4zNTgzNTA4NzEyOCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vc2xvdHN5bmMuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9zbG90c3luYy5oCkBAIC0xMiwxMCArMTIsMTUgQEAKICNpZm5kZWYgU0xPVFNZTkNfSAogI2Rl ZmluZSBTTE9UU1lOQ19ICiAKKyNpbmNsdWRlIDxzaWduYWwuaD4KKwogI2luY2x1ZGUgInJlcGxp Y2F0aW9uL3dhbHJlY2VpdmVyLmgiCiAKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIHN5bmNfcmVw bGljYXRpb25fc2xvdHM7CiAKKy8qIEludGVycnVwdCBmbGFnIHNldCBieSBIYW5kbGVTbG90U3lu Y01lc3NhZ2VJbnRlcnJ1cHQoKSAqLworZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19h dG9taWNfdCBTbG90U3luY1NodXRkb3duUGVuZGluZzsKKwogLyoKICAqIEdVQ3MgbmVlZGVkIGJ5 IHNsb3Qgc3luYyB3b3JrZXIgdG8gY29ubmVjdCB0byB0aGUgcHJpbWFyeQogICogc2VydmVyIGFu ZCBjYXJyeSBvbiB3aXRoIHNsb3RzIHN5bmNocm9uaXphdGlvbi4KQEAgLTM0LDUgKzM5LDcgQEAg ZXh0ZXJuIGJvb2wgSXNTeW5jaW5nUmVwbGljYXRpb25TbG90cyh2b2lkKTsKIGV4dGVybiBTaXpl IFNsb3RTeW5jU2htZW1TaXplKHZvaWQpOwogZXh0ZXJuIHZvaWQgU2xvdFN5bmNTaG1lbUluaXQo dm9pZCk7CiBleHRlcm4gdm9pZCBTeW5jUmVwbGljYXRpb25TbG90cyhXYWxSZWNlaXZlckNvbm4g KndyY29ubik7CitleHRlcm4gdm9pZCBIYW5kbGVTbG90U3luY01lc3NhZ2VJbnRlcnJ1cHQodm9p ZCk7CitleHRlcm4gdm9pZCBQcm9jZXNzU2xvdFN5bmNNZXNzYWdlKHZvaWQpOwogCiAjZW5kaWYJ CQkJCQkJLyogU0xPVFNZTkNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9w cm9jc2lnbmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAppbmRleCAzNDhm YmE1M2E5My4uM2E3NWQ1MDBlN2MgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJv Y3NpZ25hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBAIC0zNiw2 ICszNiw3IEBAIHR5cGVkZWYgZW51bQogCVBST0NTSUdfQkFSUklFUiwJCQkvKiBnbG9iYWwgYmFy cmllciBpbnRlcnJ1cHQgICovCiAJUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQsIC8qIGFzayBi YWNrZW5kIHRvIGxvZyB0aGUgbWVtb3J5IGNvbnRleHRzICovCiAJUFJPQ1NJR19QQVJBTExFTF9B UFBMWV9NRVNTQUdFLCAvKiBNZXNzYWdlIGZyb20gcGFyYWxsZWwgYXBwbHkgd29ya2VycyAqLwor CVBST0NTSUdfU0xPVFNZTkNfTUVTU0FHRSwJLyogYXNrIHNsb3RzeW5jIHdvcmtlci9BUEkgdG8g c3RvcCAqLwogCVBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1QsCS8qIGJhY2tlbmQgaXMgYmxvY2tp bmcgcmVjb3ZlcnksIGNoZWNrCiAJCQkJCQkJCSAqIFBHUFJPQy0+cGVuZGluZ1JlY292ZXJ5Q29u ZmxpY3RzIGZvciB0aGUKIAkJCQkJCQkJICogcmVhc29uICovCi0tIAoyLjUwLjEgKEFwcGxlIEdp dC0xNTUpCgo= --0000000000001c3ead064e5f6d1e--