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 1w4leR-002XJz-00 for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 20:13:27 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w4leP-002BOy-1T for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 20:13:25 +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.96) (envelope-from ) id 1w4dko-00HLml-0i for pgsql-hackers@lists.postgresql.org; Mon, 23 Mar 2026 11:47:30 +0000 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w4dkm-00000000cLk-1za7 for pgsql-hackers@lists.postgresql.org; Mon, 23 Mar 2026 11:47:29 +0000 Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-354a18c48b5so3340422a91.1 for ; Mon, 23 Mar 2026 04:47:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774266447; cv=none; d=google.com; s=arc-20240605; b=ee6tiCiUfouHWqQA94a/bseBbUvtnXvrY92YlWLwZYjrV/NevcPk1fnPPGi+ZErfrs ppuiq/4oPpOfcEhcjVyK8CL4u9VUiY0uvrA6dZfkiDjKKqWOXmshhMxvfs+gEEQF8CXk LRhPrQ4YrfI2orFL1H5cjCa4LJ4hq3l3YGeq0d0tEC+i0CwlsiNIdQXdeeAn/tMuBgS+ 3BDbxezmO3zsLE+I8QP3gvyIjmeM7QrCFtm4zgLa6FriIJPc0pCCgGnKb93n00ZOrFF1 q5m3jNLPcrGIm4s8U5LAGCkOmajPNAtk2SrsW7ppJnPUE0L6JE78jkGUgNXFc+zxKbhK UIqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=mXmB5dDVFk737/494089CayClHVU+KY2dHWBTupytkc=; fh=nwNxTtLLPTU0ewfLM7SSbrjMajMl+wwnFkCY/fi90vE=; b=Ab6LIDMzKZR7MGL6uOghVzhaUyWMz+sfms/xifSuUghu7q5jDk8gH1f8JsU0/p4+QC SAZDPCPZpINiWJVzHxxhXST1AYwJ4b8RswhAkELiLU3bry2YhvQ2kKYzcut9ilI+pXYx SppL9k7ZCkuT6nH8BWeixoq+FLlssw5RVyVrC16UlUm5nNcjqeAXm8jrWuFjzHfFU6sX bnlXY5J4ixgR6YpZHVk5zJVLno+2lrKfbXKqIN8F4UGCuEMqkXyHnaxZDDSLWH8knqDX YHLmqWWGOT1tpSLb+QPg4YovG2pi0Mf1+X8WcdGjOa1ioynsXy317nWUpF9M3Fgsqx0X 6VJA==; 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=20230601; t=1774266447; x=1774871247; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=mXmB5dDVFk737/494089CayClHVU+KY2dHWBTupytkc=; b=RxC0nHk4HKNq8pxmY4vP4zeP5uZORXoKkAIOnySjxZZJD9KJov7aEo1ALaSM+bYpfs LbmMUfO0S1ZQfNGObpgYTXDwkQ5ZMaxYa8B7gJIMof712dX/PONdm0/613JTvfpSTHgc oKE5h4H4gWtM7Z8ri61lMr3REAUcw5UePmYeTpCh1xWRg89kYHdgCnUd0uCHvnhRVtpp R97szs/5Vwsa/WqD5BSrT9i2wXk0JeyUK0jAYIKNJqyZugk6TO1+kYte4UTOIinOQ4b3 JiM9LjU57xKXmfgbSNVDpVgPe+ofSj8kwCEWYtlJC7HgCD8EgkiJcqA1ZKG11v7CeQ4h dmrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774266447; x=1774871247; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=mXmB5dDVFk737/494089CayClHVU+KY2dHWBTupytkc=; b=gt+eNofu0mbEW8nEy0qhzs0at8lBkRQTPEZ//E/sF2Q3v5fPlm+sZxAo+YFJ2SEtmC l8pSo+ps81FZ27RTRFvxpZx6gi/2d6wyJZy19RN7PG7i9z/jQIfg+C1ji3A91kx8gU/K /93udwYcMg4kyIy98PQrJUEHVbGMGFGGVcpILRfmHhBodKUuO60XL+CBweRABpQYmQgK J240zhMiSZKqufVD2PJBoGikL7BpC9tnQgKDGM3+KpptxY7YHwOodD7usmXEQGAaCD3n xn0NR3Y+JlnftIoJ59Ynin1pkWLqQoIxtTe1S+6V+xoKQSngYryM/bS+2EvqFMMCv9JL oBrA== X-Gm-Message-State: AOJu0YwbP7kbtRFMZmTFA00XS3IkFK2ATHrCjWv8hRhvTCVOCuK3X61n To+nF9s1PEhO1Ksvlv9NY7Hyr+Er/7u7XYRq7YHgemw0sEnSF59jIb9OcTpg/6AnvLUCYMEdSKx QSm+iaUAUAthpz8MJrhR5mIriSae5deDpowNv X-Gm-Gg: ATEYQzxnsjvAsq6SttWC3XfI7FpwX8P5FFPejPPHA0jX/uPpkOTdu6nkC2CYg6PXGE3 uKtcqkMWWeH8x+eFzvE22P9HUDuuIFWTOO58QiM0Syqcay7iMUPegaJAHPMz5JxfrXkKzzIXBAY XNPoKiWCCEjOY5Qz8XWlbw0Rmw8HHOfX5/S1M0zzYDABXBK/uEv0VZJPhobwryyU9R79lIHiV4c 2jxLPah0dvOG+SLnqv13sZSViXg6tWtZSy9IS6egzAlV7ghf6LETJ6GiwPX44xE56wQ2IXmNZDP mt6bzViyHkP+B4sU79Nee8mNuAlc+jb+v4nF+A== X-Received: by 2002:a17:90b:2886:b0:35b:ea35:c3ce with SMTP id 98e67ed59e1d1-35bea35c476mr3810777a91.27.1774266447075; Mon, 23 Mar 2026 04:47:27 -0700 (PDT) MIME-Version: 1.0 From: Nikhil Chawla Date: Mon, 23 Mar 2026 17:17:15 +0530 X-Gm-Features: AaiRm52Y_aY-bKbPxr33dR1CupUQGNFgH72FUt_Ydo9pHMWXhupY4ZIWRT1YebQ Message-ID: Subject: [PATCH] Add prepared_orphaned_transaction_timeout GUC To: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000050b70f064daf9921" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000050b70f064daf9921 Content-Type: multipart/alternative; boundary="00000000000050b70e064daf991f" --00000000000050b70e064daf991f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, Orphaned prepared transactions cause escalating harm the longer they persist: 1. *Lock retention* : All locks (row-level, table-level, advisory) acquired during the transaction are held indefinitely, blocking concurre= nt DML and DDL 2. *VACUUM blockage :* The prepared transaction's XID becomes the oldest running transaction, preventing VACUUM from freezing tuples or reclaimin= g dead rows across the entire cluster, leading to table and index bloat 3. *Transaction ID wraparound risk *: In extreme cases, the frozen XID horizon cannot advance, eventually threatening XID wraparound shutdown 4. *Resource consumption *: Shared memory slots (max_prepared_transactions) remain occupied; the WAL records for the prepared state persist Today, the only remediation is manual intervention: a DBA must discover the orphan (via pg_prepared_xacts), determine it's truly abandoned, and issue ROLLBACK PREPARED. PostgreSQL already has timeout-based safety nets for other "stuck" session states such as, idle_in_transaction_session_timeout, idle_session_timeout, statement_timeout, but no equivalent for prepared transactions. This patch fills that gap. *How it works ?* CleanupOrphanedPreparedTransactions(): Phase 1 =E2=80=94 Collect candidates (under TwoPhaseStateLock, shared mod= e): for each GlobalTransactionData (gxact) in TwoPhaseState: if gxact->valid AND TimestampDifferenceExceeds(gxact->prepared_at, now, timeout): save gxact->gid to candidate list Phase 2 =E2=80=94 Roll back each candidate (lock released): for each saved GID: lock =3D LockGXactForCleanup(gid) if lock succeeded: FinishPreparedTransaction(gid, isCommit=3Dfalse) log: "rolling back orphaned prepared transaction %s" *Safety Properties* 1. Timeout =3D 0 (default): Feature is completely disabled, no behavior change from default PostgreSQL 2. No false positives on active transactions: The check uses prepared_at, which is set once at PREPARE TRANSACTION time. A transactio= n that is actively being committed/rolled back by a client will either complete before the timeout or be skipped by LockGXactForCleanup (which returns NULL if the gxact is already locked by another backend) 3. Crash-safe: If the checkpointer crashes during cleanup, the prepared transaction's WAL state is unchanged, it remains prepared and will be cleaned up after recovery 4. Idempotent: If the GID was already resolved between Phase 1 and Phase 2, LockGXactForCleanup returns NULL and the cleanup is silently skipped --=20 Regards, Nikhil Chawla Twitter | LinkedIn --00000000000050b70e064daf991f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

Orphaned prepared transactions cause escal= ating harm the longer they persist:

  1. Lock retention=C2= =A0:=C2=A0 All locks (row-level, table-level, advisory) acquired during the= transaction are held indefinitely, blocking concurrent DML and DDL
  2. VACUUM blockage :=C2=A0The prepared transaction's XID becomes t= he oldest running transaction, preventing VACUUM from freezing tuples or re= claiming dead rows across the entire cluster, leading to table and index bl= oat
  3. Transaction ID wraparound risk : In extreme cases, the f= rozen XID horizon cannot advance, eventually threatening XID wraparound shu= tdown
  4. Resource consumption : Shared memory slots (max_prepar= ed_transactions) remain occupied; the WAL records for the prepared state pe= rsist
Today, the only remediation is manual intervention: a DBA mu= st discover the orphan (via pg_prepared_xacts), determine it's truly ab= andoned, and issue ROLLBACK PREPARED. PostgreSQL already has timeout-based = safety nets for other "stuck" session states such as, idle_in_tra= nsaction_session_timeout, idle_session_timeout, statement_timeout, but no e= quivalent for prepared transactions. This patch fills that gap.

<= b>How it works ?


CleanupOrphanedPreparedTransactions():<= br>
=C2=A0 Phase 1 =E2=80=94 Collect candidates (under TwoPhaseStateLock= , shared mode):
=C2=A0 =C2=A0 for each GlobalTransactionData (gxact) in = TwoPhaseState:
=C2=A0 =C2=A0 =C2=A0 if gxact->valid AND
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0TimestampDifferenceExceeds(gxact->prepared_at, n= ow, timeout):
=C2=A0 =C2=A0 =C2=A0 =C2=A0 save gxact->gid to candidat= e list

=C2=A0 Phase 2 =E2=80=94 Roll back each candidate (lock relea= sed):
=C2=A0 =C2=A0 for each saved GID:
=C2=A0 =C2=A0 =C2=A0 lock =3D= LockGXactForCleanup(gid)
=C2=A0 =C2=A0 =C2=A0 if lock succeeded:
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 FinishPreparedTransaction(gid, isCommit=3Dfalse)=C2=A0 =C2=A0 =C2=A0 =C2=A0 log: "rolling back orphaned prepared tra= nsaction %s"

Safety Properties

  1. Tim= eout =3D 0 (default): Feature is completely disabled, no behavior change fr= om default PostgreSQL
  2. No false positives on active transactions: Th= e check uses prepared_at, which is set once at PREPARE TRANSACTION time. A = transaction that is actively being committed/rolled back by a client will e= ither complete before the timeout or be skipped by LockGXactForCleanup (whi= ch returns NULL if the gxact is already locked by another backend)
  3. = Crash-safe: If the checkpointer crashes during cleanup, the prepared transa= ction's WAL state is unchanged, it remains prepared and will be cleaned= up after recovery
  4. Idempotent: If the GID was already resolved betw= een Phase 1 and Phase 2, LockGXactForCleanup returns NULL and the cleanup i= s silently skipped

--
Regards,
Nikhil Chawla

--00000000000050b70e064daf991f-- --00000000000050b70f064daf9921 Content-Type: application/octet-stream; name="0001-Add-prepared_orphaned_transaction_timeout-GUC.patch" Content-Disposition: attachment; filename="0001-Add-prepared_orphaned_transaction_timeout-GUC.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn34elhf0 RnJvbSBiZWY2ZmJlNWMyYTU5ZTVlMDE0YzJmNmYwZjVmNjUxOTAwZDE0NTdlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtoaWwgQ2hhd2xhIDxuaWtoaWxjaGF3bGFAbWljcm9zb2Z0 LmNvbT4KRGF0ZTogTW9uLCAyMyBNYXIgMjAyNiAxNzoxNTowMCArMDUzMApTdWJqZWN0OiBbUEFU Q0hdIEFkZCBwcmVwYXJlZF9vcnBoYW5lZF90cmFuc2FjdGlvbl90aW1lb3V0IEdVQwoKVGhpcyBh ZGRzIGEgbmV3IEdVQyBwYXJhbWV0ZXIgdGhhdCBhdXRvbWF0aWNhbGx5IHJvbGxzIGJhY2sgcHJl cGFyZWQKdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSByZW1haW5lZCB1bnJlc29sdmVkIGJleW9uZCB0 aGUgY29uZmlndXJlZAp0aW1lb3V0LiBUaGUgY2xlYW51cCBpcyBwZXJmb3JtZWQgYnkgdGhlIGNo ZWNrcG9pbnRlciBwcm9jZXNzLgoKVGhpcyBpcyB1c2VmdWwgZm9yIHByZXZlbnRpbmcgb3JwaGFu ZWQgdHdvLXBoYXNlIHRyYW5zYWN0aW9ucyBmcm9tCmhvbGRpbmcgbG9ja3MgYW5kIHByZXZlbnRp bmcgVkFDVVVNIGZyb20gcmVjbGFpbWluZyBkZWFkIHR1cGxlcwppbmRlZmluaXRlbHkuCgpUaGUg dGltZW91dCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0ICgwKSBhbmQgY2FuIGJlIGNoYW5nZWQgd2l0 aCBhCmNvbmZpZ3VyYXRpb24gcmVsb2FkIChTSUdIVVApLgotLS0KIGRvYy9zcmMvc2dtbC9jb25m aWcuc2dtbCAgICAgICAgICAgICAgICAgICAgICB8ICAzNSArKysKIHNyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3R3b3BoYXNlLmMgICAgICAgICB8IDI1MiArKysrKysrKysrKysrKysrKysKIHNy Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMgICAgICAgICB8ICAgNyArCiBzcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCAgICAgfCAgMTAgKwogc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAxICsKIHNyYy9pbmNs dWRlL2FjY2Vzcy90d29waGFzZS5oICAgICAgICAgICAgICAgICB8ICAgNSArLQogc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQgICAgICAgIHwgICAxICsKIC4uLi90LzAxMV9w cmVwYXJlZF9vcnBoYW5lZF90aW1lb3V0LnBsICAgICAgICB8IDIwMyArKysrKysrKysrKysrKwog OCBmaWxlcyBjaGFuZ2VkLCA1MTMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDExX3ByZXBhcmVkX29y cGhhbmVkX3RpbWVvdXQucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5kZXggOGNkZDgyNmZiZDMuLjI5MzhlOTFjZTFj IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L2NvbmZpZy5zZ21sCkBAIC0xMDQ2Nyw2ICsxMDQ2Nyw0MSBAQCBDT1BZIHBvc3RncmVzX2xvZyBG Uk9NICcvZnVsbC9wYXRoL3RvL2xvZ2ZpbGUuY3N2JyBXSVRIIGNzdjsKICAgICAgIDwvbGlzdGl0 ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1w cmVwYXJlZC1vcnBoYW5lZC10cmFuc2FjdGlvbi10aW1lb3V0IiB4cmVmbGFiZWw9InByZXBhcmVk X29ycGhhbmVkX3RyYW5zYWN0aW9uX3RpbWVvdXQiPgorICAgICAgPHRlcm0+PHZhcm5hbWU+cHJl cGFyZWRfb3JwaGFuZWRfdHJhbnNhY3Rpb25fdGltZW91dDwvdmFybmFtZT4gKDx0eXBlPmludGVn ZXI8L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5w cmVwYXJlZF9vcnBoYW5lZF90cmFuc2FjdGlvbl90aW1lb3V0PC92YXJuYW1lPiBjb25maWd1cmF0 aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJt PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBBdXRvbWF0aWNhbGx5 IHJvbGwgYmFjayBhbnkgcHJlcGFyZWQgdHJhbnNhY3Rpb24gdGhhdCBoYXMgcmVtYWluZWQKKyAg ICAgICAgaW4gdGhlIHByZXBhcmVkIHN0YXRlIGZvciBsb25nZXIgdGhhbiB0aGUgc3BlY2lmaWVk IGFtb3VudCBvZiB0aW1lLgorICAgICAgICBJZiB0aGlzIHZhbHVlIGlzIHNwZWNpZmllZCB3aXRo b3V0IHVuaXRzLCBpdCBpcyB0YWtlbiBhcyBtaWxsaXNlY29uZHMuCisgICAgICAgIEEgdmFsdWUg b2YgemVybyAodGhlIGRlZmF1bHQpIGRpc2FibGVzIHRoZSB0aW1lb3V0LgorICAgICAgIDwvcGFy YT4KKworICAgICAgIDxwYXJhPgorICAgICAgICBQcmVwYXJlZCB0cmFuc2FjdGlvbnMgKGZyb20g PGNvbW1hbmQ+UFJFUEFSRSBUUkFOU0FDVElPTjwvY29tbWFuZD4pCisgICAgICAgIHBlcnNpc3Qg ZXZlbiBhZnRlciB0aGUgb3JpZ2luYXRpbmcgc2Vzc2lvbiBkaXNjb25uZWN0cywgYW5kIGhvbGQK KyAgICAgICAgbG9ja3MgYW5kIHByZXZlbnQgdmFjdXVtIGNsZWFudXAgb2YgcmVjZW50bHktZGVh ZCB0dXBsZXMuICBJZiB0aGUKKyAgICAgICAgYXBwbGljYXRpb24gdGhhdCBpc3N1ZWQgdGhlIDxj b21tYW5kPlBSRVBBUkUgVFJBTlNBQ1RJT048L2NvbW1hbmQ+CisgICAgICAgIGZhaWxzIHRvIGZv bGxvdyB1cCB3aXRoIDxjb21tYW5kPkNPTU1JVCBQUkVQQVJFRDwvY29tbWFuZD4gb3IKKyAgICAg ICAgPGNvbW1hbmQ+Uk9MTEJBQ0sgUFJFUEFSRUQ8L2NvbW1hbmQ+LCB0aGVzZSBvcnBoYW5lZCBw cmVwYXJlZAorICAgICAgICB0cmFuc2FjdGlvbnMgY2FuIGFjY3VtdWxhdGUgYW5kIGltcGFjdCBk YXRhYmFzZSBwZXJmb3JtYW5jZS4KKyAgICAgICAgVGhpcyBzZXR0aW5nIHByb3ZpZGVzIGFuIGF1 dG9tYXRpYyBzYWZldHkgbmV0IHRvIGNsZWFuIHVwIHN1Y2gKKyAgICAgICAgb3JwaGFuZWQgdHJh bnNhY3Rpb25zLgorICAgICAgIDwvcGFyYT4KKworICAgICAgIDxwYXJhPgorICAgICAgICBUaGUg Y2xlYW51cCBpcyBwZXJmb3JtZWQgYnkgdGhlIGNoZWNrcG9pbnRlciBwcm9jZXNzLCB3aGljaAor ICAgICAgICBwZXJpb2RpY2FsbHkgc2NhbnMgZm9yIHByZXBhcmVkIHRyYW5zYWN0aW9ucyBleGNl ZWRpbmcgdGhlIHRpbWVvdXQKKyAgICAgICAgYW5kIHJvbGxzIHRoZW0gYmFjay4gIEEgbG9nIG1l c3NhZ2UgaXMgZW1pdHRlZCBmb3IgZWFjaCB0cmFuc2FjdGlvbgorICAgICAgICB0aGF0IGlzIGF1 dG9tYXRpY2FsbHkgcm9sbGVkIGJhY2suCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRl bT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWJ5 dGVhLW91dHB1dCIgeHJlZmxhYmVsPSJieXRlYV9vdXRwdXQiPgogICAgICAgPHRlcm0+PHZhcm5h bWU+Ynl0ZWFfb3V0cHV0PC92YXJuYW1lPiAoPHR5cGU+ZW51bTwvdHlwZT4pCiAgICAgICA8aW5k ZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2Uu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMKaW5kZXggZDQ2OGM5Nzc0 YjMuLjkxMTNkYmRkZjA2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90 d29waGFzZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMKQEAg LTExNiw2ICsxMTYsOSBAQAogLyogR1VDIHZhcmlhYmxlLCBjYW4ndCBiZSBjaGFuZ2VkIGFmdGVy IHN0YXJ0dXAgKi8KIGludAkJCW1heF9wcmVwYXJlZF94YWN0cyA9IDA7CiAKKy8qIEdVQyB2YXJp YWJsZSBmb3Igb3JwaGFuZWQgcHJlcGFyZWQgdHJhbnNhY3Rpb24gdGltZW91dCAoaW4gbXMsIDAg PSBkaXNhYmxlZCkgKi8KK2ludAkJCXByZXBhcmVkX29ycGhhbmVkX3RyYW5zYWN0aW9uX3RpbWVv dXQgPSAwOworCiAvKgogICogVGhpcyBzdHJ1Y3QgZGVzY3JpYmVzIG9uZSBnbG9iYWwgdHJhbnNh Y3Rpb24gdGhhdCBpcyBpbiBwcmVwYXJlZCBzdGF0ZQogICogb3IgYXR0ZW1wdGluZyB0byBiZWNv bWUgcHJlcGFyZWQuCkBAIC0yODczLDMgKzI4NzYsMjUyIEBAIFR3b1BoYXNlR2V0T2xkZXN0WGlk SW5Db21taXQodm9pZCkKIAogCXJldHVybiBvbGRlc3RSdW5uaW5nWGlkOwogfQorCisvKgorICog TG9ja0dYYWN0Rm9yQ2xlYW51cAorICoJCUxvY2F0ZSB0aGUgcHJlcGFyZWQgdHJhbnNhY3Rpb24g YnkgR0lEIGFuZCBtYXJrIGl0IGJ1c3kgZm9yIGNsZWFudXAuCisgKgorICogVGhpcyBpcyBzaW1p bGFyIHRvIExvY2tHWGFjdCBidXQgZG9lcyBub3QgY2hlY2sgZGF0YWJhc2UgaWRlbnRpdHkgb3IK KyAqIG93bmVyc2hpcCwgc2luY2UgaXQgaXMgdXNlZCBieSB0aGUgYmFja2dyb3VuZCBjbGVhbnVw IG9mIG9ycGhhbmVkIHByZXBhcmVkCisgKiB0cmFuc2FjdGlvbnMgd2hpY2ggb3BlcmF0ZXMgYXMg YSBzdXBlcnVzZXItbGlrZSBmYWNpbGl0eS4KKyAqCisgKiBSZXR1cm5zIHRoZSBHbG9iYWxUcmFu c2FjdGlvbiBvbiBzdWNjZXNzLCBvciBOVUxMIGlmIHRoZSBHSUQgaXMgbm90IGZvdW5kCisgKiBv ciBpcyBhbHJlYWR5IGxvY2tlZCBieSBhbm90aGVyIGJhY2tlbmQuCisgKi8KK3N0YXRpYyBHbG9i YWxUcmFuc2FjdGlvbgorTG9ja0dYYWN0Rm9yQ2xlYW51cChjb25zdCBjaGFyICpnaWQpCit7CisJ aW50CQkJaTsKKworCS8qIG9uIGZpcnN0IGNhbGwsIHJlZ2lzdGVyIHRoZSBleGl0IGhvb2sgKi8K KwlpZiAoIXR3b3BoYXNlRXhpdFJlZ2lzdGVyZWQpCisJeworCQliZWZvcmVfc2htZW1fZXhpdChB dFByb2NFeGl0X1R3b3BoYXNlLCAwKTsKKwkJdHdvcGhhc2VFeGl0UmVnaXN0ZXJlZCA9IHRydWU7 CisJfQorCisJTFdMb2NrQWNxdWlyZShUd29QaGFzZVN0YXRlTG9jaywgTFdfRVhDTFVTSVZFKTsK KworCWZvciAoaSA9IDA7IGkgPCBUd29QaGFzZVN0YXRlLT5udW1QcmVwWGFjdHM7IGkrKykKKwl7 CisJCUdsb2JhbFRyYW5zYWN0aW9uIGd4YWN0ID0gVHdvUGhhc2VTdGF0ZS0+cHJlcFhhY3RzW2ld OworCisJCS8qIElnbm9yZSBub3QteWV0LXZhbGlkIEdJRHMgKi8KKwkJaWYgKCFneGFjdC0+dmFs aWQpCisJCQljb250aW51ZTsKKwkJaWYgKHN0cmNtcChneGFjdC0+Z2lkLCBnaWQpICE9IDApCisJ CQljb250aW51ZTsKKworCQkvKiBBbHJlYWR5IGxvY2tlZCBieSBhbm90aGVyIGJhY2tlbmQ/IFNr aXAgaXQuICovCisJCWlmIChneGFjdC0+bG9ja2luZ19iYWNrZW5kICE9IElOVkFMSURfUFJPQ19O VU1CRVIpCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoVHdvUGhhc2VTdGF0ZUxvY2spOworCQkJcmV0 dXJuIE5VTEw7CisJCX0KKworCQkvKiBPSyBmb3IgdXMgdG8gbG9jayBpdCAqLworCQlneGFjdC0+ bG9ja2luZ19iYWNrZW5kID0gTXlQcm9jTnVtYmVyOworCQlNeUxvY2tlZEd4YWN0ID0gZ3hhY3Q7 CisKKwkJTFdMb2NrUmVsZWFzZShUd29QaGFzZVN0YXRlTG9jayk7CisKKwkJcmV0dXJuIGd4YWN0 OworCX0KKworCUxXTG9ja1JlbGVhc2UoVHdvUGhhc2VTdGF0ZUxvY2spOworCisJcmV0dXJuIE5V TEw7Cit9CisKKy8qCisgKiBDbGVhbnVwT3JwaGFuZWRQcmVwYXJlZFRyYW5zYWN0aW9ucworICoJ CVJvbGwgYmFjayBwcmVwYXJlZCB0cmFuc2FjdGlvbnMgdGhhdCBoYXZlIGV4Y2VlZGVkIHRoZQor ICoJCXByZXBhcmVkX29ycGhhbmVkX3RyYW5zYWN0aW9uX3RpbWVvdXQuCisgKgorICogVGhpcyBp cyBjYWxsZWQgZnJvbSB0aGUgY2hlY2twb2ludGVyJ3MgbWFpbiBsb29wIHRvIHBlcmlvZGljYWxs eSBzY2FuCisgKiBmb3IgcHJlcGFyZWQgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGluIHRo ZSBwcmVwYXJlZCBzdGF0ZSBmb3IKKyAqIGxvbmdlciB0aGFuIHRoZSBjb25maWd1cmVkIHRpbWVv dXQuICBTdWNoIHRyYW5zYWN0aW9ucyBhcmUgY29uc2lkZXJlZAorICogb3JwaGFuZWQgYW5kIGFy ZSBhdXRvbWF0aWNhbGx5IHJvbGxlZCBiYWNrLgorICoKKyAqIFRoZSBmdW5jdGlvbiBmaXJzdCBj b2xsZWN0cyBHSURzIG9mIGNhbmRpZGF0ZSB0cmFuc2FjdGlvbnMgd2hpbGUgaG9sZGluZworICog VHdvUGhhc2VTdGF0ZUxvY2sgaW4gc2hhcmVkIG1vZGUsIHRoZW4gcHJvY2Vzc2VzIGVhY2ggb25l IGluZGl2aWR1YWxseS4KKyAqLwordm9pZAorQ2xlYW51cE9ycGhhbmVkUHJlcGFyZWRUcmFuc2Fj dGlvbnModm9pZCkKK3sKKwlpbnQJCQl0aW1lb3V0X21zID0gcHJlcGFyZWRfb3JwaGFuZWRfdHJh bnNhY3Rpb25fdGltZW91dDsKKwlUaW1lc3RhbXBUeiBub3c7CisJaW50CQkJbnVtX29ycGhhbmVk ID0gMDsKKwljaGFyCSAgKipvcnBoYW5lZF9naWRzID0gTlVMTDsKKwlpbnQJCQlpOworCisJLyog UXVpY2sgZXhpdCBpZiB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZCBvciBubyBwcmVwYXJlZCB4YWN0 cyBjb25maWd1cmVkICovCisJaWYgKHRpbWVvdXRfbXMgPD0gMCB8fCBtYXhfcHJlcGFyZWRfeGFj dHMgPT0gMCkKKwkJcmV0dXJuOworCisJbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCisJ LyoKKwkgKiBQaGFzZSAxOiBDb2xsZWN0IEdJRHMgb2YgcHJlcGFyZWQgdHJhbnNhY3Rpb25zIHRo YXQgaGF2ZSBleGNlZWRlZCB0aGUKKwkgKiB0aW1lb3V0LiAgV2Ugb25seSBob2xkIHRoZSBsb2Nr IGluIHNoYXJlZCBtb2RlIGZvciB0aGUgc2Nhbi4KKwkgKi8KKwlMV0xvY2tBY3F1aXJlKFR3b1Bo YXNlU3RhdGVMb2NrLCBMV19TSEFSRUQpOworCisJaWYgKFR3b1BoYXNlU3RhdGUtPm51bVByZXBY YWN0cyA+IDApCisJeworCQlvcnBoYW5lZF9naWRzID0gKGNoYXIgKiopIHBhbGxvYyhUd29QaGFz ZVN0YXRlLT5udW1QcmVwWGFjdHMgKiBzaXplb2YoY2hhciAqKSk7CisKKwkJZm9yIChpID0gMDsg aSA8IFR3b1BoYXNlU3RhdGUtPm51bVByZXBYYWN0czsgaSsrKQorCQl7CisJCQlHbG9iYWxUcmFu c2FjdGlvbiBneGFjdCA9IFR3b1BoYXNlU3RhdGUtPnByZXBYYWN0c1tpXTsKKworCQkJaWYgKCFn eGFjdC0+dmFsaWQpCisJCQkJY29udGludWU7CisKKwkJCS8qIFNraXAgdHJhbnNhY3Rpb25zIGN1 cnJlbnRseSBiZWluZyB3b3JrZWQgb24gKi8KKwkJCWlmIChneGFjdC0+bG9ja2luZ19iYWNrZW5k ICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCisJCQkJY29udGludWU7CisKKwkJCS8qIENoZWNrIGlm IHRoaXMgdHJhbnNhY3Rpb24gaGFzIGV4Y2VlZGVkIHRoZSB0aW1lb3V0ICovCisJCQlpZiAoVGlt ZXN0YW1wRGlmZmVyZW5jZUV4Y2VlZHMoZ3hhY3QtPnByZXBhcmVkX2F0LCBub3csIHRpbWVvdXRf bXMpKQorCQkJeworCQkJCW9ycGhhbmVkX2dpZHNbbnVtX29ycGhhbmVkXSA9IHBzdHJkdXAoZ3hh Y3QtPmdpZCk7CisJCQkJbnVtX29ycGhhbmVkKys7CisJCQl9CisJCX0KKwl9CisKKwlMV0xvY2tS ZWxlYXNlKFR3b1BoYXNlU3RhdGVMb2NrKTsKKworCS8qCisJICogUGhhc2UgMjogUm9sbCBiYWNr IGVhY2ggb3JwaGFuZWQgcHJlcGFyZWQgdHJhbnNhY3Rpb24uICBXZSBkbyB0aGlzCisJICogb3V0 c2lkZSB0aGUgbG9jayB0byBhdm9pZCBob2xkaW5nIFR3b1BoYXNlU3RhdGVMb2NrIGZvciB0b28g bG9uZy4KKwkgKgorCSAqIFdlIHVzZSBMb2NrR1hhY3RGb3JDbGVhbnVwIHdoaWNoIGRvZXMgbm90 IGVuZm9yY2UgZGF0YWJhc2Ugb3Igb3duZXIKKwkgKiBjaGVja3MsIHNpbmNlIHRoZSBjaGVja3Bv aW50ZXIgcHJvY2VzcyBpcyBub3QgY29ubmVjdGVkIHRvIGFueQorCSAqIHBhcnRpY3VsYXIgZGF0 YWJhc2UuCisJICovCisJZm9yIChpID0gMDsgaSA8IG51bV9vcnBoYW5lZDsgaSsrKQorCXsKKwkJ R2xvYmFsVHJhbnNhY3Rpb24gZ3hhY3Q7CisJCVBHUFJPQwkgICAqcHJvYzsKKwkJRnVsbFRyYW5z YWN0aW9uSWQgZnhpZDsKKwkJVHJhbnNhY3Rpb25JZCB4aWQ7CisJCWJvb2wJCW9uZGlzazsKKwkJ Y2hhcgkgICAqYnVmOworCQljaGFyCSAgICpidWZwdHI7CisJCVR3b1BoYXNlRmlsZUhlYWRlciAq aGRyOworCQlUcmFuc2FjdGlvbklkIGxhdGVzdFhpZDsKKwkJVHJhbnNhY3Rpb25JZCAqY2hpbGRy ZW47CisJCVJlbEZpbGVMb2NhdG9yICphYm9ydHJlbHM7CisJCWludAkJCW5kZWxyZWxzOworCQl4 bF94YWN0X3N0YXRzX2l0ZW0gKmFib3J0c3RhdHM7CisKKwkJZXJlcG9ydChMT0csCisJCQkJKGVy cm1zZygicm9sbGluZyBiYWNrIG9ycGhhbmVkIHByZXBhcmVkIHRyYW5zYWN0aW9uIFwiJXNcIiIs CisJCQkJCQlvcnBoYW5lZF9naWRzW2ldKSwKKwkJCQkgZXJyZGV0YWlsKCJUaGlzIHByZXBhcmVk IHRyYW5zYWN0aW9uIGhhcyBleGNlZWRlZCB0aGUgcHJlcGFyZWRfb3JwaGFuZWRfdHJhbnNhY3Rp b25fdGltZW91dCBvZiAlZCBtcy4iLAorCQkJCQkJICAgdGltZW91dF9tcykpKTsKKworCQkvKiBU cnkgdG8gbG9jayB0aGUgZ3hhY3Q7IHNraXAgaWYgc29tZW9uZSBlbHNlIGdvdCBpdCBmaXJzdCAq LworCQlneGFjdCA9IExvY2tHWGFjdEZvckNsZWFudXAob3JwaGFuZWRfZ2lkc1tpXSk7CisJCWlm IChneGFjdCA9PSBOVUxMKQorCQl7CisJCQlwZnJlZShvcnBoYW5lZF9naWRzW2ldKTsKKwkJCWNv bnRpbnVlOworCQl9CisKKwkJcHJvYyA9IEdldFBHUHJvY0J5TnVtYmVyKGd4YWN0LT5wZ3Byb2Nu byk7CisJCWZ4aWQgPSBneGFjdC0+ZnhpZDsKKwkJeGlkID0gWGlkRnJvbUZ1bGxUcmFuc2FjdGlv bklkKGZ4aWQpOworCisJCS8qCisJCSAqIFJlYWQgYW5kIHZhbGlkYXRlIDJQQyBzdGF0ZSBkYXRh LgorCQkgKi8KKwkJaWYgKGd4YWN0LT5vbmRpc2spCisJCQlidWYgPSBSZWFkVHdvUGhhc2VGaWxl KGZ4aWQsIGZhbHNlKTsKKwkJZWxzZQorCQkJWGxvZ1JlYWRUd29QaGFzZURhdGEoZ3hhY3QtPnBy ZXBhcmVfc3RhcnRfbHNuLCAmYnVmLCBOVUxMKTsKKworCQkvKgorCQkgKiBEaXNhc3NlbWJsZSB0 aGUgaGVhZGVyIGFyZWEKKwkJICovCisJCWhkciA9IChUd29QaGFzZUZpbGVIZWFkZXIgKikgYnVm OworCQlBc3NlcnQoVHJhbnNhY3Rpb25JZEVxdWFscyhoZHItPnhpZCwgeGlkKSk7CisJCWJ1ZnB0 ciA9IGJ1ZiArIE1BWEFMSUdOKHNpemVvZihUd29QaGFzZUZpbGVIZWFkZXIpKTsKKwkJYnVmcHRy ICs9IE1BWEFMSUdOKGhkci0+Z2lkbGVuKTsKKwkJY2hpbGRyZW4gPSAoVHJhbnNhY3Rpb25JZCAq KSBidWZwdHI7CisJCWJ1ZnB0ciArPSBNQVhBTElHTihoZHItPm5zdWJ4YWN0cyAqIHNpemVvZihU cmFuc2FjdGlvbklkKSk7CisJCS8qIHNraXAgY29tbWl0cmVscyAqLworCQlidWZwdHIgKz0gTUFY QUxJR04oaGRyLT5uY29tbWl0cmVscyAqIHNpemVvZihSZWxGaWxlTG9jYXRvcikpOworCQlhYm9y dHJlbHMgPSAoUmVsRmlsZUxvY2F0b3IgKikgYnVmcHRyOworCQlidWZwdHIgKz0gTUFYQUxJR04o aGRyLT5uYWJvcnRyZWxzICogc2l6ZW9mKFJlbEZpbGVMb2NhdG9yKSk7CisJCS8qIHNraXAgY29t bWl0c3RhdHMgKi8KKwkJYnVmcHRyICs9IE1BWEFMSUdOKGhkci0+bmNvbW1pdHN0YXRzICogc2l6 ZW9mKHhsX3hhY3Rfc3RhdHNfaXRlbSkpOworCQlhYm9ydHN0YXRzID0gKHhsX3hhY3Rfc3RhdHNf aXRlbSAqKSBidWZwdHI7CisJCWJ1ZnB0ciArPSBNQVhBTElHTihoZHItPm5hYm9ydHN0YXRzICog c2l6ZW9mKHhsX3hhY3Rfc3RhdHNfaXRlbSkpOworCQkvKiBza2lwIGludmFsbXNncyAqLworCQli dWZwdHIgKz0gTUFYQUxJR04oaGRyLT5uaW52YWxtc2dzICogc2l6ZW9mKFNoYXJlZEludmFsaWRh dGlvbk1lc3NhZ2UpKTsKKworCQkvKiBjb21wdXRlIGxhdGVzdFhpZCBhbW9uZyBhbGwgY2hpbGRy ZW4gKi8KKwkJbGF0ZXN0WGlkID0gVHJhbnNhY3Rpb25JZExhdGVzdCh4aWQsIGhkci0+bnN1Ynhh Y3RzLCBjaGlsZHJlbik7CisKKwkJLyogUHJldmVudCBjYW5jZWwvZGllIGludGVycnVwdCB3aGls ZSBjbGVhbmluZyB1cCAqLworCQlIT0xEX0lOVEVSUlVQVFMoKTsKKworCQkvKiBSZWNvcmQgdGhl IGFib3J0IGluIFdBTCBhbmQgbWFyayB0cmFuc2FjdGlvbiBhcyBhYm9ydGVkIGluIHBnX3hhY3Qg Ki8KKwkJUmVjb3JkVHJhbnNhY3Rpb25BYm9ydFByZXBhcmVkKHhpZCwKKwkJCQkJCQkJCSAgIGhk ci0+bnN1YnhhY3RzLCBjaGlsZHJlbiwKKwkJCQkJCQkJCSAgIGhkci0+bmFib3J0cmVscywgYWJv cnRyZWxzLAorCQkJCQkJCQkJICAgaGRyLT5uYWJvcnRzdGF0cywKKwkJCQkJCQkJCSAgIGFib3J0 c3RhdHMsCisJCQkJCQkJCQkgICBvcnBoYW5lZF9naWRzW2ldKTsKKworCQlQcm9jQXJyYXlSZW1v dmUocHJvYywgbGF0ZXN0WGlkKTsKKworCQkvKgorCQkgKiBNYXJrIHRoZSBneGFjdCBpbnZhbGlk IHNvIG5vIG9uZSBlbHNlIHdpbGwgdHJ5IHRvIGNvbW1pdC9yb2xsYmFjay4KKwkJICovCisJCWd4 YWN0LT52YWxpZCA9IGZhbHNlOworCisJCS8qIERyb3AgZmlsZXMgdGhhdCB3ZXJlIHN1cHBvc2Vk IHRvIGJlIGRyb3BwZWQgb24gYWJvcnQgKi8KKwkJbmRlbHJlbHMgPSBoZHItPm5hYm9ydHJlbHM7 CisJCURyb3BSZWxhdGlvbkZpbGVzKGFib3J0cmVscywgbmRlbHJlbHMsIGZhbHNlKTsKKworCQlw Z3N0YXRfZXhlY3V0ZV90cmFuc2FjdGlvbmFsX2Ryb3BzKGhkci0+bmFib3J0c3RhdHMsIGFib3J0 c3RhdHMsIGZhbHNlKTsKKworCQkvKgorCQkgKiBBY3F1aXJlIHRoZSB0d28tcGhhc2UgbG9jayBm b3IgY2FsbGJhY2tzIGFuZCBjbGVhbnVwLgorCQkgKi8KKwkJTFdMb2NrQWNxdWlyZShUd29QaGFz ZVN0YXRlTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCQkvKiBSdW4gcG9zdC1hYm9ydCBjYWxsYmFj a3MgKi8KKwkJUHJvY2Vzc1JlY29yZHMoYnVmcHRyLCBmeGlkLCB0d29waGFzZV9wb3N0YWJvcnRf Y2FsbGJhY2tzKTsKKworCQlQcmVkaWNhdGVMb2NrVHdvUGhhc2VGaW5pc2goZnhpZCwgZmFsc2Up OworCisJCW9uZGlzayA9IGd4YWN0LT5vbmRpc2s7CisKKwkJLyogQ2xlYXIgc2hhcmVkIG1lbW9y eSBzdGF0ZSAqLworCQlSZW1vdmVHWGFjdChneGFjdCk7CisKKwkJTFdMb2NrUmVsZWFzZShUd29Q aGFzZVN0YXRlTG9jayk7CisKKwkJLyogQ291bnQgdGhlIHByZXBhcmVkIHhhY3QgYXMgYWJvcnRl ZCAqLworCQlBdEVPWGFjdF9QZ1N0YXQoZmFsc2UsIGZhbHNlKTsKKworCQkvKiBSZW1vdmUgb24t ZGlzayBzdGF0ZSBmaWxlIGlmIGFueSAqLworCQlpZiAob25kaXNrKQorCQkJUmVtb3ZlVHdvUGhh c2VGaWxlKGZ4aWQsIHRydWUpOworCisJCU15TG9ja2VkR3hhY3QgPSBOVUxMOworCisJCVJFU1VN RV9JTlRFUlJVUFRTKCk7CisKKwkJcGZyZWUoYnVmKTsKKwkJcGZyZWUob3JwaGFuZWRfZ2lkc1tp XSk7CisJfQorCisJaWYgKG9ycGhhbmVkX2dpZHMpCisJCXBmcmVlKG9ycGhhbmVkX2dpZHMpOwor fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYyBiL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMKaW5kZXggM2M5ODJjNmZmYWMuLjkx MzlkNjRiM2M1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRl ci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMKQEAgLTM5LDYg KzM5LDcgQEAKICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHRpbWUuaD4KIAorI2lu Y2x1ZGUgImFjY2Vzcy90d29waGFzZS5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlY292 ZXJ5LmgiCkBAIC01NjgsNiArNTY5LDEyIEBAIENoZWNrcG9pbnRlck1haW4oY29uc3Qgdm9pZCAq c3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkJLyogQ2hlY2sgZm9yIGFy Y2hpdmVfdGltZW91dCBhbmQgc3dpdGNoIHhsb2cgZmlsZXMgaWYgbmVjZXNzYXJ5LiAqLwogCQlD aGVja0FyY2hpdmVUaW1lb3V0KCk7CiAKKwkJLyoKKwkJICogQ2xlYW4gdXAgb3JwaGFuZWQgcHJl cGFyZWQgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSBleGNlZWRlZCB0aGUKKwkJICogcHJlcGFyZWRf b3JwaGFuZWRfdHJhbnNhY3Rpb25fdGltZW91dC4KKwkJICovCisJCUNsZWFudXBPcnBoYW5lZFBy ZXBhcmVkVHJhbnNhY3Rpb25zKCk7CisKIAkJLyogUmVwb3J0IHBlbmRpbmcgc3RhdGlzdGljcyB0 byB0aGUgY3VtdWxhdGl2ZSBzdGF0cyBzeXN0ZW0gKi8KIAkJcGdzdGF0X3JlcG9ydF9jaGVja3Bv aW50ZXIoKTsKIAkJcGdzdGF0X3JlcG9ydF93YWwodHJ1ZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCBiL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4IDBjOTg1NGFkOGZjLi4yMjUxMzBiMjU5NSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKQEAgLTIzMDYsNiArMjMw NiwxNiBAQAogICBtYXggPT4gJzYwJywKIH0sCiAKK3sgbmFtZSA9PiAncHJlcGFyZWRfb3JwaGFu ZWRfdHJhbnNhY3Rpb25fdGltZW91dCcsIHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4gJ1BHQ19T SUdIVVAnLCBncm91cCA9PiAnQ0xJRU5UX0NPTk5fU1RBVEVNRU5UJywKKyAgc2hvcnRfZGVzYyA9 PiAnU2V0cyB0aGUgbWF4aW11bSB0aW1lIHRoYXQgYSBwcmVwYXJlZCB0cmFuc2FjdGlvbiBjYW4g cmVtYWluIHVucmVzb2x2ZWQgYmVmb3JlIGl0IGlzIGF1dG9tYXRpY2FsbHkgcm9sbGVkIGJhY2su JywKKyAgbG9uZ19kZXNjID0+ICdBIHZhbHVlIG9mIDAgKHRoZSBkZWZhdWx0KSBkaXNhYmxlcyB0 aGUgdGltZW91dC4nLAorICBmbGFncyA9PiAnR1VDX1VOSVRfTVMnLAorICB2YXJpYWJsZSA9PiAn cHJlcGFyZWRfb3JwaGFuZWRfdHJhbnNhY3Rpb25fdGltZW91dCcsCisgIGJvb3RfdmFsID0+ICcw JywKKyAgbWluID0+ICcwJywKKyAgbWF4ID0+ICdJTlRfTUFYJywKK30sCisKIHsgbmFtZSA9PiAn cHJpbWFyeV9jb25uaW5mbycsIHR5cGUgPT4gJ3N0cmluZycsIGNvbnRleHQgPT4gJ1BHQ19TSUdI VVAnLCBncm91cCA9PiAnUkVQTElDQVRJT05fU1RBTkRCWScsCiAgIHNob3J0X2Rlc2MgPT4gJ1Nl dHMgdGhlIGNvbm5lY3Rpb24gc3RyaW5nIHRvIGJlIHVzZWQgdG8gY29ubmVjdCB0byB0aGUgc2Vu ZGluZyBzZXJ2ZXIuJywKICAgZmxhZ3MgPT4gJ0dVQ19TVVBFUlVTRVJfT05MWScsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggZTRhYmU2YzAw NzcuLjI1NDY5MDc4ZWUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3Fs LmNvbmYuc2FtcGxlCkBAIC0xNDQsNiArMTQ0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKICMgQ2F1dGlvbjog aXQgaXMgbm90IGFkdmlzYWJsZSB0byBzZXQgbWF4X3ByZXBhcmVkX3RyYW5zYWN0aW9ucyBub256 ZXJvIHVubGVzcwogIyB5b3UgYWN0aXZlbHkgaW50ZW5kIHRvIHVzZSBwcmVwYXJlZCB0cmFuc2Fj dGlvbnMuCisjcHJlcGFyZWRfb3JwaGFuZWRfdHJhbnNhY3Rpb25fdGltZW91dCA9IDAgICMgaW4g bWlsbGlzZWNvbmRzLCAwIGlzIGRpc2FibGVkCiAjd29ya19tZW0gPSA0TUIgICAgICAgICAgICAg ICAgICAgICAgICAgIyBtaW4gNjRrQgogI2hhc2hfbWVtX211bHRpcGxpZXIgPSAyLjAgICAgICAg ICAgICAgICMgMS0xMDAwLjAgbXVsdGlwbGllciBvbiBoYXNoIHRhYmxlIHdvcmtfbWVtCiAjbWFp bnRlbmFuY2Vfd29ya19tZW0gPSA2NE1CICAgICAgICAgICAgIyBtaW4gNjRrQgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3R3b3BoYXNlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdHdv cGhhc2UuaAppbmRleCBlMzEyNTE0YmE4Ny4uYjY2MGFlZGNhZmYgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy90d29waGFzZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90d29waGFz ZS5oCkBAIC0yNSw4ICsyNSw5IEBACiAgKi8KIHR5cGVkZWYgc3RydWN0IEdsb2JhbFRyYW5zYWN0 aW9uRGF0YSAqR2xvYmFsVHJhbnNhY3Rpb247CiAKLS8qIEdVQyB2YXJpYWJsZSAqLworLyogR1VD IHZhcmlhYmxlcyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfcHJlcGFyZWRfeGFjdHM7 CitleHRlcm4gUEdETExJTVBPUlQgaW50IHByZXBhcmVkX29ycGhhbmVkX3RyYW5zYWN0aW9uX3Rp bWVvdXQ7CiAKIGV4dGVybiBTaXplIFR3b1BoYXNlU2htZW1TaXplKHZvaWQpOwogZXh0ZXJuIHZv aWQgVHdvUGhhc2VTaG1lbUluaXQodm9pZCk7CkBAIC03MCw0ICs3MSw2IEBAIGV4dGVybiBib29s IExvb2t1cEdYYWN0QnlTdWJpZChPaWQgc3ViaWQpOwogCiBleHRlcm4gVHJhbnNhY3Rpb25JZCBU d29QaGFzZUdldE9sZGVzdFhpZEluQ29tbWl0KHZvaWQpOwogCitleHRlcm4gdm9pZCBDbGVhbnVw T3JwaGFuZWRQcmVwYXJlZFRyYW5zYWN0aW9ucyh2b2lkKTsKKwogI2VuZGlmCQkJCQkJCS8qIFRX T1BIQVNFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29u LmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQKaW5kZXggNmU4 ZGIxNjIxYTcuLjhmNzFlZmNmZTY5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf bWlzYy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5i dWlsZApAQCAtMTksNiArMTksNyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMDhfcmVwbHNsb3Rf c2luZ2xlX3VzZXIucGwnLAogICAgICAgJ3QvMDA5X2xvZ190ZW1wX2ZpbGVzLnBsJywKICAgICAg ICd0LzAxMF9pbmRleF9jb25jdXJyZW50bHlfdXBzZXJ0LnBsJywKKyAgICAgICd0LzAxMV9wcmVw YXJlZF9vcnBoYW5lZF90aW1lb3V0LnBsJywKICAgICBdLAogICAgICMgVGhlIGluamVjdGlvbiBw b2ludHMgYXJlIGNsdXN0ZXItd2lkZSwgc28gZGlzYWJsZSBpbnN0YWxsY2hlY2sKICAgICAncnVu bmluZ2NoZWNrJzogZmFsc2UsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlz Yy90LzAxMV9wcmVwYXJlZF9vcnBoYW5lZF90aW1lb3V0LnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X21pc2MvdC8wMTFfcHJlcGFyZWRfb3JwaGFuZWRfdGltZW91dC5wbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTQ3YzA1OTVmN2UKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAxMV9wcmVwYXJlZF9vcnBoYW5lZF90aW1l b3V0LnBsCkBAIC0wLDAgKzEsMjAzIEBACisNCisjIENvcHlyaWdodCAoYykgMjAyNiwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXANCisNCisjIFRlc3QgZm9yIHByZXBhcmVkX29y cGhhbmVkX3RyYW5zYWN0aW9uX3RpbWVvdXQgR1VDLg0KKyMgVmVyaWZpZXMgdGhhdCBvcnBoYW5l ZCBwcmVwYXJlZCB0cmFuc2FjdGlvbnMgYXJlIGF1dG9tYXRpY2FsbHkNCisjIHJvbGxlZCBiYWNr IGJ5IHRoZSBjaGVja3BvaW50ZXIgd2hlbiB0aGV5IGV4Y2VlZCB0aGUgY29uZmlndXJlZCB0aW1l b3V0Lg0KKw0KK3VzZSBzdHJpY3Q7DQordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOw0KKw0K K3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOw0KK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpV dGlsczsNCit1c2UgVGVzdDo6TW9yZTsNCisNCisjDQorIyBUZXN0IDE6IEJhc2ljIG9ycGhhbmVk IHByZXBhcmVkIHRyYW5zYWN0aW9uIGNsZWFudXANCisjDQorIyBTZXQgdXAgYSBub2RlIHdpdGgg cHJlcGFyZWQgdHJhbnNhY3Rpb25zIGVuYWJsZWQgYW5kIGEgc2hvcnQgdGltZW91dC4NCitteSAk bm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHJpbWFyeScpOw0KKyRub2Rl LT5pbml0Ow0KKyRub2RlLT5hcHBlbmRfY29uZigNCisJJ3Bvc3RncmVzcWwuY29uZicsIHFxKA0K KwltYXhfcHJlcGFyZWRfdHJhbnNhY3Rpb25zID0gNQ0KKwlwcmVwYXJlZF9vcnBoYW5lZF90cmFu c2FjdGlvbl90aW1lb3V0ID0gJzJzJw0KKwlsb2dfbWluX21lc3NhZ2VzID0gbG9nDQorKSk7DQor JG5vZGUtPnN0YXJ0Ow0KKw0KKyMgQ3JlYXRlIGEgdGVzdCB0YWJsZSBhbmQgcHJlcGFyZSBhIHRy YW5zYWN0aW9uLg0KKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBUQUJMRSB0 X29ycGhhbl90ZXN0IChpZCBpbnQsIG1zZyB0ZXh0KScpOw0KKyRub2RlLT5zYWZlX3BzcWwoDQor CSdwb3N0Z3JlcycsICINCisJQkVHSU47DQorCUlOU0VSVCBJTlRPIHRfb3JwaGFuX3Rlc3QgVkFM VUVTICgxLCAnb3JwaGFuZWQnKTsNCisJUFJFUEFSRSBUUkFOU0FDVElPTiAnb3JwaGFuX3hhY3Rf MSc7DQorIik7DQorDQorIyBWZXJpZnkgdGhlIHByZXBhcmVkIHRyYW5zYWN0aW9uIGV4aXN0cy4N CitteSAkcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLA0KKwkiU0VMRUNUIGNv dW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHMgV0hFUkUgZ2lkID0gJ29ycGhhbl94YWN0XzEn Iik7DQoraXMoJHJlc3VsdCwgJzEnLCAncHJlcGFyZWQgdHJhbnNhY3Rpb24gb3JwaGFuX3hhY3Rf MSBleGlzdHMnKTsNCisNCisjIFJlY29yZCBsb2cgcG9zaXRpb24gYmVmb3JlIHRoZSB0aW1lb3V0 IGZpcmVzLg0KK215ICRsb2dfb2Zmc2V0ID0gLXMgJG5vZGUtPmxvZ2ZpbGU7DQorDQorIyBXYWl0 IGZvciB0aGUgdGltZW91dCB0byBlbGFwc2UsIHRoZW4gdHJpZ2dlciB0aGUgY2hlY2twb2ludGVy IGxvb3ANCisjIGJ5IGlzc3VpbmcgYSBDSEVDS1BPSU5ULiBUaGUgY2hlY2twb2ludGVyIHdpbGwg c2NhbiBmb3Igb3JwaGFuZWQNCisjIHByZXBhcmVkIHRyYW5zYWN0aW9ucyBhcyBwYXJ0IG9mIGl0 cyBtYWluIGxvb3AgaXRlcmF0aW9uLg0KK3NsZWVwKDMpOw0KKyRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgJ0NIRUNLUE9JTlQnKTsNCisNCisjIEdpdmUgdGhlIGNoZWNrcG9pbnRlciBhIG1v bWVudCB0byBwcm9jZXNzIHRoZSBjbGVhbnVwLg0KK3NsZWVwKDEpOw0KKw0KKyMgVmVyaWZ5IHRo ZSBwcmVwYXJlZCB0cmFuc2FjdGlvbiB3YXMgcm9sbGVkIGJhY2suDQorb2soICRub2RlLT5wb2xs X3F1ZXJ5X3VudGlsKA0KKwkJJ3Bvc3RncmVzJywNCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBw Z19wcmVwYXJlZF94YWN0cyBXSEVSRSBnaWQgPSAnb3JwaGFuX3hhY3RfMSciLA0KKwkJJzAnKSwN CisJJ29ycGhhbmVkIHByZXBhcmVkIHRyYW5zYWN0aW9uIHdhcyByb2xsZWQgYmFjaycpOw0KKw0K KyMgVmVyaWZ5IHRoYXQgdGhlIGluc2VydGVkIGRhdGEgd2FzIE5PVCBjb21taXR0ZWQgKHJvbGxl ZCBiYWNrKS4NCiskcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLA0KKwkiU0VM RUNUIGNvdW50KCopIEZST00gdF9vcnBoYW5fdGVzdCBXSEVSRSBpZCA9IDEiKTsNCitpcygkcmVz dWx0LCAnMCcsICdvcnBoYW5lZCB0cmFuc2FjdGlvbiBkYXRhIHdhcyBub3QgY29tbWl0dGVkJyk7 DQorDQorIyBWZXJpZnkgdGhlIHJvbGxiYWNrIHdhcyBsb2dnZWQuDQorJG5vZGUtPndhaXRfZm9y X2xvZygNCisJcXIvcm9sbGluZyBiYWNrIG9ycGhhbmVkIHByZXBhcmVkIHRyYW5zYWN0aW9uICJv cnBoYW5feGFjdF8xIi8sDQorCSRsb2dfb2Zmc2V0KTsNCitvaygxLCAnb3JwaGFuZWQgdHJhbnNh Y3Rpb24gcm9sbGJhY2sgd2FzIGxvZ2dlZCcpOw0KKw0KKw0KKyMNCisjIFRlc3QgMjogUHJlcGFy ZWQgdHJhbnNhY3Rpb24gY29tbWl0dGVkIGJlZm9yZSB0aW1lb3V0IGlzIG5vdCBhZmZlY3RlZA0K KyMNCiskbm9kZS0+c2FmZV9wc3FsKA0KKwkncG9zdGdyZXMnLCAiDQorCUJFR0lOOw0KKwlJTlNF UlQgSU5UTyB0X29ycGhhbl90ZXN0IFZBTFVFUyAoMiwgJ2NvbW1pdHRlZF9pbl90aW1lJyk7DQor CVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3RpbWVseV94YWN0JzsNCisiKTsNCisNCisjIENvbW1pdCB0 aGUgcHJlcGFyZWQgdHJhbnNhY3Rpb24gaW1tZWRpYXRlbHkgKGJlZm9yZSB0aW1lb3V0KS4NCisk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDT01NSVQgUFJFUEFSRUQgJ3RpbWVseV94YWN0 JyIpOw0KKw0KKyMgVmVyaWZ5IHRoZSBkYXRhIHdhcyBjb21taXR0ZWQuDQorJHJlc3VsdCA9ICRu b2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywNCisJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRfb3Jw aGFuX3Rlc3QgV0hFUkUgaWQgPSAyIik7DQoraXMoJHJlc3VsdCwgJzEnLA0KKwkncHJlcGFyZWQg dHJhbnNhY3Rpb24gY29tbWl0dGVkIGJlZm9yZSB0aW1lb3V0IHByZXNlcnZlZCBkYXRhJyk7DQor DQorDQorIw0KKyMgVGVzdCAzOiBUaW1lb3V0IG9mIDAgZGlzYWJsZXMgdGhlIGZlYXR1cmUNCisj DQorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLA0KKwkiQUxURVIgU1lTVEVNIFNFVCBwcmVw YXJlZF9vcnBoYW5lZF90cmFuc2FjdGlvbl90aW1lb3V0ID0gJzAnIik7DQorJG5vZGUtPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX3JlbG9hZF9jb25mKCkiKTsNCisNCiskbm9kZS0+ c2FmZV9wc3FsKA0KKwkncG9zdGdyZXMnLCAiDQorCUJFR0lOOw0KKwlJTlNFUlQgSU5UTyB0X29y cGhhbl90ZXN0IFZBTFVFUyAoMywgJ3Nob3VsZF9wZXJzaXN0Jyk7DQorCVBSRVBBUkUgVFJBTlNB Q1RJT04gJ3BlcnNpc3RfeGFjdCc7DQorIik7DQorDQorIyBXYWl0IGFuZCB0cmlnZ2VyIGNoZWNr cG9pbnRlciAtIHRoZSB0cmFuc2FjdGlvbiBzaG91bGQgTk9UIGJlIHJvbGxlZCBiYWNrLg0KK3Ns ZWVwKDMpOw0KKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NIRUNLUE9JTlQnKTsNCitz bGVlcCgxKTsNCisNCiskcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLA0KKwki U0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHMgV0hFUkUgZ2lkID0gJ3BlcnNp c3RfeGFjdCciKTsNCitpcygkcmVzdWx0LCAnMScsDQorCSdwcmVwYXJlZCB0cmFuc2FjdGlvbiBu b3Qgcm9sbGVkIGJhY2sgd2hlbiB0aW1lb3V0IGlzIGRpc2FibGVkJyk7DQorDQorIyBDbGVhbiB1 cC4NCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJST0xMQkFDSyBQUkVQQVJFRCAncGVy c2lzdF94YWN0JyIpOw0KKw0KKw0KKyMNCisjIFRlc3QgNDogTXVsdGlwbGUgb3JwaGFuZWQgdHJh bnNhY3Rpb25zIGFyZSBhbGwgY2xlYW5lZCB1cA0KKyMNCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsDQorCSJBTFRFUiBTWVNURU0gU0VUIHByZXBhcmVkX29ycGhhbmVkX3RyYW5zYWN0aW9u X3RpbWVvdXQgPSAnMnMnIik7DQorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IHBnX3JlbG9hZF9jb25mKCkiKTsNCisNCiskbm9kZS0+c2FmZV9wc3FsKA0KKwkncG9zdGdyZXMn LCAiDQorCUJFR0lOOw0KKwlJTlNFUlQgSU5UTyB0X29ycGhhbl90ZXN0IFZBTFVFUyAoMTAsICdt dWx0aV8xJyk7DQorCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ211bHRpX29ycGhhbl8xJzsNCisiKTsN CisNCiskbm9kZS0+c2FmZV9wc3FsKA0KKwkncG9zdGdyZXMnLCAiDQorCUJFR0lOOw0KKwlJTlNF UlQgSU5UTyB0X29ycGhhbl90ZXN0IFZBTFVFUyAoMTEsICdtdWx0aV8yJyk7DQorCVBSRVBBUkUg VFJBTlNBQ1RJT04gJ211bHRpX29ycGhhbl8yJzsNCisiKTsNCisNCiskbm9kZS0+c2FmZV9wc3Fs KA0KKwkncG9zdGdyZXMnLCAiDQorCUJFR0lOOw0KKwlJTlNFUlQgSU5UTyB0X29ycGhhbl90ZXN0 IFZBTFVFUyAoMTIsICdtdWx0aV8zJyk7DQorCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ211bHRpX29y cGhhbl8zJzsNCisiKTsNCisNCiskcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LA0KKwkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHMiKTsNCitpcygkcmVz dWx0LCAnMycsICd0aHJlZSBwcmVwYXJlZCB0cmFuc2FjdGlvbnMgZXhpc3QnKTsNCisNCisjIFdh aXQgZm9yIHRpbWVvdXQsIHRyaWdnZXIgY2hlY2twb2ludGVyLg0KK3NsZWVwKDMpOw0KKyRub2Rl LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NIRUNLUE9JTlQnKTsNCisNCisjIEFsbCB0aHJlZSBz aG91bGQgYmUgY2xlYW5lZCB1cC4NCitvayggJG5vZGUtPnBvbGxfcXVlcnlfdW50aWwoDQorCQkn cG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHMiLCAnMCcp LA0KKwknYWxsIG9ycGhhbmVkIHByZXBhcmVkIHRyYW5zYWN0aW9ucyB3ZXJlIHJvbGxlZCBiYWNr Jyk7DQorDQorDQorIw0KKyMgVGVzdCA1OiBUaW1lb3V0IGNoYW5nZSB2aWEgcmVsb2FkIHRha2Vz IGVmZmVjdA0KKyMNCisjIFNldCBhIHZlcnkgbG9uZyB0aW1lb3V0IHNvIG5vdGhpbmcgZ2V0cyBj bGVhbmVkLg0KKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywNCisJIkFMVEVSIFNZU1RFTSBT RVQgcHJlcGFyZWRfb3JwaGFuZWRfdHJhbnNhY3Rpb25fdGltZW91dCA9ICcxaCciKTsNCiskbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfcmVsb2FkX2NvbmYoKSIpOw0KKw0K KyRub2RlLT5zYWZlX3BzcWwoDQorCSdwb3N0Z3JlcycsICINCisJQkVHSU47DQorCUlOU0VSVCBJ TlRPIHRfb3JwaGFuX3Rlc3QgVkFMVUVTICgyMCwgJ3JlbG9hZF90ZXN0Jyk7DQorCVBSRVBBUkUg VFJBTlNBQ1RJT04gJ3JlbG9hZF94YWN0JzsNCisiKTsNCisNCitzbGVlcCgzKTsNCiskbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDSEVDS1BPSU5UJyk7DQorc2xlZXAoMSk7DQorDQorJHJl c3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywNCisJIlNFTEVDVCBjb3VudCgqKSBG Uk9NIHBnX3ByZXBhcmVkX3hhY3RzIFdIRVJFIGdpZCA9ICdyZWxvYWRfeGFjdCciKTsNCitpcygk cmVzdWx0LCAnMScsDQorCSdwcmVwYXJlZCB0cmFuc2FjdGlvbiBwZXJzaXN0cyB3aXRoIGxvbmcg dGltZW91dCcpOw0KKw0KKyMgTm93IGxvd2VyIHRoZSB0aW1lb3V0IGFuZCByZWxvYWQuDQorJG5v ZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLA0KKwkiQUxURVIgU1lTVEVNIFNFVCBwcmVwYXJlZF9v cnBoYW5lZF90cmFuc2FjdGlvbl90aW1lb3V0ID0gJzFzJyIpOw0KKyRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCBwZ19yZWxvYWRfY29uZigpIik7DQorDQorc2xlZXAoMik7DQor JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ0hFQ0tQT0lOVCcpOw0KKw0KK29rKCAkbm9k ZS0+cG9sbF9xdWVyeV91bnRpbCgNCisJCSdwb3N0Z3JlcycsDQorCQkiU0VMRUNUIGNvdW50KCop IEZST00gcGdfcHJlcGFyZWRfeGFjdHMgV0hFUkUgZ2lkID0gJ3JlbG9hZF94YWN0JyIsDQorCQkn MCcpLA0KKwkncHJlcGFyZWQgdHJhbnNhY3Rpb24gY2xlYW5lZCB1cCBhZnRlciBsb3dlcmluZyB0 aW1lb3V0IHZpYSByZWxvYWQnKTsNCisNCiskbm9kZS0+c3RvcDsNCitkb25lX3Rlc3RpbmcoKTsN Ci0tIAoyLjUzLjAud2luZG93cy4yCgo= --00000000000050b70f064daf9921--