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 1w84xD-000BtM-07 for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 23:26:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w84xA-002wZH-3B for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 23:26:29 +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 1w84xA-002wYm-0u for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 23:26:29 +0000 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w84x7-000000005gb-3u1n for pgsql-hackers@postgresql.org; Wed, 01 Apr 2026 23:26:27 +0000 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-2ab46931cf1so9971655ad.0 for ; Wed, 01 Apr 2026 16:26:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775085985; cv=none; d=google.com; s=arc-20240605; b=SfAGiHtDuTYTVc1zZrn1W+MrR7ZmU8sHs+6+tQOAFoB5CkDWI4S57VpxUKoE8RynBM cSqLKGwOByUuAdz+EIbdY9IiE9WLukcSd22DrxcBCmUbTUxPsNMdSwfYxhuyFKu3BghE M9a8QM8upeg2lF5CCtm1EnWH+fyJPtH6+IEK9Eo+E2d7SggWAOQScEk79zjw0yvFz96o MsKasw7TLkc/jm2duoqS9Gxh88nW9zdzAtL0uKn6QUnNQ3vcxKXpCn931pjUnnun1KDm J+zTSDLNpY2uZy01useKEIyd3XFV3y+BgBN8SlXGUnwYlObyvkYhN1tm9ucooxN/oQG6 nWlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=GuHtEj9lKF3ZuL3wUUeAfuJm4WRxkvlEW9T4ItxPXr0=; fh=waPnKahtqrjL6e5lDHONXgAYWW+1/EnTYqDmUsP0vmM=; b=eF9nmVzanRa26+AxaH1zqF/gBHKHG/jJrtjxzT4JWJVLEhoW/UsgDYWPZ0G9vaS7EM WmsHcEjVWrLy/8NIKkvm64vxAPqGugQX6XZSvlfAxonwcCg1yXUEkBLn2K+Sej1eW0Ze s2ZwRjNZ0Ttieq+75lW/+rxqI55wX8lEEXtM7NBdwiuiBROIARUCKeMmE5u29ZNk6pac jKUJF/08eO8H962Xo62peKxHRE806VRQjFGV5N0e8rFom/Sfczn/yLm9nHkQ8ilmPqeR +v+LT9/ynE6dTxSRYfVFqSGp0SsYAsiEGALLsHBeh48I3OUOMHjFRWMIbc9ZLUiOtnpD uj5w==; darn=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=1775085985; x=1775690785; darn=postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=GuHtEj9lKF3ZuL3wUUeAfuJm4WRxkvlEW9T4ItxPXr0=; b=Hb4bK3LymanAofx4DDcZq0vFltokzp3V7O3A1f7RuzissoYCqLfSXOf8/YOvJGzdO9 WsXVgoJ7EK9x/9KwdR57Df55zrfI0D9mh40Ro+AaCmWlo6ffsZ8B+pesvqtUVX1t/oUv w87zIxd+vOAk/pK3ALSlKk5P7yVhklOQfEeYtGKley7GAAzqWMStM1i9TPu0jLuczkas 0Je0b9OgALzjxBOEwuuyQoGNcwkEUHL++G80O15cBsSiea+tURR3Exth0wYVvXt4xotx DuehvtkPopAgkvKixllue5p+ubOLAElG8wCSduVkhuxiMknemvaFok1rPcgBv/W3qKS1 P39A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775085985; x=1775690785; h=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=GuHtEj9lKF3ZuL3wUUeAfuJm4WRxkvlEW9T4ItxPXr0=; b=RUxsyiAaiay3lv1+iR3cs+EGLsGKHhlf0gNR+vXlyKSefflpaTg4dkTp8WAnBtosxT 3b8OmgDvPS0rAd44JHdaRC4UA3kRfGey2mIXm25iDtVPdIbjsYIjKlgycTSwD/uJ5PXR OZTx/L1iuxV8q+zwDEV+acEWBTCZ73WmfnDkOSmhuD9Blu3CieIvZ1tEeT5IKfXED/1I DCeTY6912WDvhNTFwhQ5ugnPfz+oKbgjR5mhsR9g1CpVazHX/cl5FIdFV84N7WllUkRJ FhP4l7Z+2rHGUR/GpFhUVOIedihCfNnv92ZyoT72vUdOlWveR1Hsueyhy8nRdH6nupON 3Ubg== X-Gm-Message-State: AOJu0YzYcL4wLBjtmjaX6ZuQtmPmLU905vo+DAwa4iSottxgxigr2Zj/ unvJ8plQu/hy8iuMSXyEpHRsEjhd2hBSCHVgOeQaVop4VjRpv+90RitHBYxt0K7tDTOGskULZvN BB50RjR8s2BUQHGfzVokrm0tX17rxP66b1pi4lCZvsA== X-Gm-Gg: ATEYQzy8FAaQtlVKme+n3yZ2bwYoVg9yOfn8V6AjRn288HiGpLGfh1eEmkJaaE8XUyK BJIimWgmY5MqlYix8zxgsq9KOp/GOP0mdHJTz1EOwXTjzfGFkbHF7Ms3ecKW1PLRlsx0oVd/UHe pZr9i0MLlX95pgX4WibFQVCrjmKPmpAPolbiSuux6zEekp3FVs05ZtA4GoiUTC5R31mn8umzi0K oWoD3IvydxhsCIK2YVorvITt5vI8CSzcx1BQ6TrVbdiXO2aig/NgkaJYNThQdr/2I4ltH86UPru NEHQbdoFCcL7GjoEtN55SISzibEOhOfd/YW04SQcJlsLLgBI/B9JDMAxL3c7dSnr/x9fhjs= X-Received: by 2002:a17:902:ce0a:b0:2b0:53b6:d0a4 with SMTP id d9443c01a7336-2b277dad2d0mr2131695ad.12.1775085984829; Wed, 01 Apr 2026 16:26:24 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Roberto Mello Date: Wed, 1 Apr 2026 17:25:58 -0600 X-Gm-Features: AQROBzAZ6Yy2LX7yUiQRfxPYoZSs9Isjw90vWmd2xZ-OV_jPEO7v0mVzmYs8gps Message-ID: Subject: Re: PROPOSAL for when publication row filter columns are not in replica identity (BUG #19434) To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000926f80064e6e699d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000926f80064e6e699d Content-Type: multipart/alternative; boundary="000000000000926f80064e6e699b" --000000000000926f80064e6e699b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Mar 28, 2026 at 9:11=E2=80=AFAM Roberto Mello wrote: > Hi all, > > Tim McLaughlin reported BUG #19434. > > When a publication's WHERE clause references columns that are not > covered by the table's replica identity, UPDATE and DELETE silently > succeed at the SQL level but fail with: > > ERROR: cannot update table "t" > DETAIL: Column used in the publication WHERE expression is not part > of the replica identity. > > This error fires at DML time inside CheckCmdReplicaIdentity(), which > means the DBA discovers the misconfiguration only when production > writes start failing, potentially long after the publication or replica > identity > was created, and creating a real potentially serious problem of > inadvertently disallowing writes in a production system. > The attached patch adds DDL-time WARNINGs so the misconfiguration is reported immediately. The warnings fire at: - CREATE PUBLICATION / ALTER PUBLICATION ... SET TABLE / ADD TABLE when the WHERE clause references non-identity columns - ALTER PUBLICATION SET (publish =3D ...) when the publish set is widened to include UPDATE or DELETE while existing row filters reference non-identity columns - ALTER TABLE ... REPLICA IDENTITY when the new identity no longer covers columns used in an existing publication WHERE clause The existing DML-time ERROR is preserved as a safety net. Notes: - The check reuses the existing pub_rf_contains_invalid_column() function, which walks the WHERE expression tree and compares referenced columns against the replica identity bitmap. - For the publication DDL paths (CREATE/ALTER PUBLICATION ... ADD/SET TABLE), a CommandCounterIncrement() is needed after PublicationAddTables() so that the newly inserted pg_publication_rel rows are visible to the syscache. - For the ALTER PUBLICATION SET (publish =3D ...) path, the existing CommandCounterIncrement() after CatalogTupleUpdate() already makes the updated publish flags visible. The check iterates the publication's tables via GetIncludedPublicationRelations(). - For the ALTER TABLE path, a CommandCounterIncrement() followed by a fresh table_open() ensures the relcache reflects the new replica identity before running the check. - Partition handling uses the existing get_partition_ancestors() and pubviaroot logic. - Regression tests are updated to expect the new WARNINGs and include new targeted test cases, covering both positive (warning fires) and negative (INSERT-only, FULL identity) cases. - Documentation updates in logical-replication.sgml. Known limitations: - ALTER PUBLICATION SET (publish_via_partition_root =3D ...) is not checked. This is a narrow edge case involving partitioned tables and is deferred to a follow-up. - DROP INDEX on a replica-identity index is not checked due to layering concerns (would require publication code in catalog/index.c). This patch does not change the WAL format or remove the underlying restriction. A future patch could extend ExtractReplicaIdentity() to include WHERE-referenced columns in WAL, which would eliminate the restriction entirely. This is a v2 that incorporates fixes, including documentation emphasis. Roberto Mello Snowflake --000000000000926f80064e6e699b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Sat, Mar 28, 2026 at 9:11=E2=80=AFAM R= oberto Mello <roberto.mello@g= mail.com> wrote:
Hi al= l,

Tim McLaughlin reported BUG #19434.=C2=A0

When a publicat= ion's WHERE clause references columns that are not
covered by the ta= ble's replica identity, UPDATE and DELETE silently
succeed at the SQ= L level but fail with:

=C2=A0 =C2=A0 ERROR: cannot update table &quo= t;t"
=C2=A0 =C2=A0 DETAIL: Column used in the publication WHERE exp= ression is not part
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 of the rep= lica identity.

This error fires at DML time inside CheckCmdReplicaId= entity(), which
means the DBA discovers the misconfiguration only when p= roduction
writes start failing, potentially long after the publication o= r replica identity
was created, and creating a real potentially s= erious problem of
inadvertently disallowing writes in a productio= n system.

The attached patch ad= ds DDL-time WARNINGs so the misconfiguration is
reported immediately.= =C2=A0 The warnings fire at:

=C2=A0 - CREATE PUBLICATION / ALTER PUB= LICATION ... SET TABLE / ADD TABLE
=C2=A0 =C2=A0 when the WHERE clause r= eferences non-identity columns

=C2=A0 - ALTER PUBLICATION SET (publi= sh =3D ...) when the publish set is
=C2=A0 =C2=A0 widened to include UPD= ATE or DELETE while existing row filters
=C2=A0 =C2=A0 reference non-ide= ntity columns

=C2=A0 - ALTER TABLE ... REPLICA IDENTITY when the new= identity no longer
=C2=A0 =C2=A0 covers columns used in an existing pub= lication WHERE clause

The existing DML-time ERROR is preserved as a = safety net.

Notes:

=C2=A0 - The check reuses the existing pub= _rf_contains_invalid_column()
=C2=A0 =C2=A0 function, which walks the WH= ERE expression tree and compares
=C2=A0 =C2=A0 referenced columns agains= t the replica identity bitmap.

=C2=A0 - For the publication DDL path= s (CREATE/ALTER PUBLICATION ...
=C2=A0 =C2=A0 ADD/SET TABLE), a CommandC= ounterIncrement() is needed after
=C2=A0 =C2=A0 PublicationAddTables() s= o that the newly inserted
=C2=A0 =C2=A0 pg_publication_rel rows are visi= ble to the syscache.

=C2=A0 - For the ALTER PUBLICATION SET (publish= =3D ...) path, the existing
=C2=A0 =C2=A0 CommandCounterIncrement() aft= er CatalogTupleUpdate() already
=C2=A0 =C2=A0 makes the updated publish = flags visible.=C2=A0 The check iterates
=C2=A0 =C2=A0 the publication= 9;s tables via GetIncludedPublicationRelations().

=C2=A0 - For the A= LTER TABLE path, a CommandCounterIncrement() followed
=C2=A0 =C2=A0 by a= fresh table_open() ensures the relcache reflects the new
=C2=A0 =C2=A0 = replica identity before running the check.

=C2=A0 - Partition handli= ng uses the existing get_partition_ancestors()
=C2=A0 =C2=A0 and pubviar= oot logic.

=C2=A0 - Regression tests are updated to expect the new W= ARNINGs and
=C2=A0 =C2=A0 include new targeted test cases, covering both= positive
=C2=A0 =C2=A0 (warning fires) and negative (INSERT-only, FULL = identity) cases.

=C2=A0 - Documentation updates in logical-replicati= on.sgml.

Known limitations:

=C2=A0 - ALTER PUBLICATION SET (p= ublish_via_partition_root =3D ...) is not
=C2=A0 =C2=A0 checked.=C2=A0 T= his is a narrow edge case involving partitioned tables
=C2=A0 =C2=A0 and= is deferred to a follow-up.

=C2=A0 - DROP INDEX on a replica-identi= ty index is not checked due to
=C2=A0 =C2=A0 layering concerns (would re= quire publication code in
=C2=A0 =C2=A0 catalog/index.c).

This pa= tch does not change the WAL format or remove the underlying
restriction.= =C2=A0 A future patch could extend ExtractReplicaIdentity()
to include W= HERE-referenced columns in WAL, which would eliminate the
restriction en= tirely.

This is a v2 that incorporates fixes, including documentatio= n emphasis.


Roberto Mello
Snowflake
=C2=A0
--000000000000926f80064e6e699b-- --000000000000926f80064e6e699d Content-Type: application/octet-stream; name="v2-0001-Emit-WARNING-when-publication-row-filter-columns.patch" Content-Disposition: attachment; filename="v2-0001-Emit-WARNING-when-publication-row-filter-columns.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngochou0 RnJvbSBjNTUxYzdmNDI0YWI3MTNhN2E0Mjc1ZWVjOTk4MDExMDk3N2U0MWI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnRvIE1lbGxvIDxyb2JlcnRvLm1lbGxvQGdtYWlsLmNv bT4KRGF0ZTogRnJpLCAyNyBNYXIgMjAyNiAxNDoyOToxNSAtMDYwMApTdWJqZWN0OiBbUEFUQ0gg djJdIEVtaXQgV0FSTklORyB3aGVuIHB1YmxpY2F0aW9uIHJvdyBmaWx0ZXIgY29sdW1ucyBtaXNz CiByZXBsaWNhIGlkZW50aXR5CgpXaGVuIGEgcHVibGljYXRpb24gV0hFUkUgY2xhdXNlIHJlZmVy ZW5jZXMgY29sdW1ucyBub3QgY292ZXJlZCBieSB0aGUKdGFibGUgcmVwbGljYSBpZGVudGl0eSwg VVBEQVRFIGFuZCBERUxFVEUgZmFpbCBhdCBETUwgdGltZSB3aXRoIGFuCkVSUk9SIGZyb20gQ2hl Y2tDbWRSZXBsaWNhSWRlbnRpdHkoKS4gIFRoZSBEQkEgb25seSBkaXNjb3ZlcnMgdGhpcwptaXNj b25maWd1cmF0aW9uIHdoZW4gcHJvZHVjdGlvbiB3cml0ZXMgc3RhcnQgZmFpbGluZy4KCkFkZCBE REwtdGltZSBXQVJOSU5HcyBzbyB0aGUgcHJvYmxlbSBpcyByZXBvcnRlZCBpbW1lZGlhdGVseS4g IFRoZQp3YXJuaW5ncyBmaXJlIGF0OgoKICAtIENSRUFURSBQVUJMSUNBVElPTiAvIEFMVEVSIFBV QkxJQ0FUSU9OIC4uLiBBREQgVEFCTEUgLyBTRVQgVEFCTEUKICAgIHdoZW4gdGhlIFdIRVJFIGNs YXVzZSByZWZlcmVuY2VzIG5vbi1pZGVudGl0eSBjb2x1bW5zCgogIC0gQUxURVIgUFVCTElDQVRJ T04gU0VUIChwdWJsaXNoID0gLi4uKSB3aGVuIHdpZGVuaW5nIHRoZSBwdWJsaXNoCiAgICBzZXQg dG8gaW5jbHVkZSBVUERBVEUgb3IgREVMRVRFIHdoaWxlIGV4aXN0aW5nIHJvdyBmaWx0ZXJzCiAg ICByZWZlcmVuY2Ugbm9uLWlkZW50aXR5IGNvbHVtbnMKCiAgLSBBTFRFUiBUQUJMRSAuLi4gUkVQ TElDQSBJREVOVElUWSB3aGVuIHRoZSBuZXcgaWRlbnRpdHkgbm8gbG9uZ2VyCiAgICBjb3ZlcnMg Y29sdW1ucyB1c2VkIGluIGEgcHVibGljYXRpb24gV0hFUkUgY2xhdXNlCgpUaGUgZXhpc3Rpbmcg RE1MLXRpbWUgRVJST1IgaXMgcHJlc2VydmVkIGFzIGEgc2FmZXR5IG5ldC4KCkEgQ29tbWFuZENv dW50ZXJJbmNyZW1lbnQoKSBpcyBuZWVkZWQgYXQgZWFjaCBjYWxsIHNpdGUgc28gdGhhdCBjYXRh bG9nCnJvd3MgaW5zZXJ0ZWQgYnkgUHVibGljYXRpb25BZGRUYWJsZXMoKSBvciByZWxhdGlvbl9t YXJrX3JlcGxpY2FfaWRlbnRpdHkoKQphcmUgdmlzaWJsZSB0byB0aGUgc3lzY2FjaGUvcmVsY2Fj aGUgd2hlbiB0aGUgY2hlY2sgcnVucy4gIEZvciB0aGUgQUxURVIKVEFCTEUgcGF0aCwgYSBmcmVz aCB0YWJsZV9vcGVuKCkgYWZ0ZXIgQ0NJIGVuc3VyZXMgdGhlIHJlbGNhY2hlIHJlZmxlY3RzCnRo ZSB1cGRhdGVkIHJlcGxpY2EgaWRlbnRpdHkuCi0tLQogZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVw bGljYXRpb24uc2dtbCAgICAgfCAgMTUgKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNh dGlvbmNtZHMuYyAgICB8IDEzMCArKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICB8ICA4OSArKysrKysrKysrKysrKy0KIHNyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0IHwgIDYzICsrKysrKysrKysrCiBz cmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwgICAgICB8ICAzNSArKysrKysKIDUg ZmlsZXMgY2hhbmdlZCwgMzMwIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbCBiL2RvYy9zcmMvc2dt bC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKaW5kZXggMjNiMjY4MjczYjkuLmNjMGRkNWY1N2Ux IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKQEAgLTg4MSw2ICs4ODEsMjEg QEAgSElOVDogIFRvIGluaXRpYXRlIHJlcGxpY2F0aW9uLCB5b3UgbXVzdCBtYW51YWxseSBjcmVh dGUgdGhlIHJlcGxpY2F0aW9uIHNsb3QsIGUKICAgICA8bGl0ZXJhbD5XSEVSRTwvbGl0ZXJhbD4g Y2xhdXNlIGNhbiB1c2UgYW55IGNvbHVtbi4KICAgIDwvcGFyYT4KIAorICAgPHdhcm5pbmc+Cisg ICAgPHBhcmE+CisgICAgIElmIGEgcm93IGZpbHRlciByZWZlcmVuY2VzIGNvbHVtbnMgbm90IGNv dmVyZWQgYnkgdGhlIHJlcGxpY2EgaWRlbnRpdHksCisgICAgIDxjb21tYW5kPlVQREFURTwvY29t bWFuZD4gYW5kIDxjb21tYW5kPkRFTEVURTwvY29tbWFuZD4gb3BlcmF0aW9ucyBvbiB0aGUKKyAg ICAgdGFibGUgd2lsbCBmYWlsIGF0IHJ1biB0aW1lIHdpdGggYW4gZXJyb3IuIEEgPGxpdGVyYWw+ V0FSTklORzwvbGl0ZXJhbD4gaXMKKyAgICAgZW1pdHRlZCBhdCA8Y29tbWFuZD5DUkVBVEUgUFVC TElDQVRJT048L2NvbW1hbmQ+LCA8Y29tbWFuZD5BTFRFUgorICAgICBQVUJMSUNBVElPTjwvY29t bWFuZD4sIG9yIDxjb21tYW5kPkFMVEVSIFRBQkxFIC4uLiBSRVBMSUNBIElERU5USVRZPC9jb21t YW5kPgorICAgICB0aW1lIHRvIGFsZXJ0IHRoZSB1c2VyIHRvIHRoaXMgbWlzY29uZmlndXJhdGlv bi4gVG8gcmVzb2x2ZSBpdCwgZWl0aGVyCisgICAgIGFkanVzdCB0aGUgcm93IGZpbHRlciB0byBy ZWZlcmVuY2Ugb25seSByZXBsaWNhIGlkZW50aXR5IGNvbHVtbnMsIHNldCB0aGUKKyAgICAgcmVw bGljYSBpZGVudGl0eSB0byA8bGl0ZXJhbD5GVUxMPC9saXRlcmFsPiwgb3IgY29uZmlndXJlIHRo ZSBwdWJsaWNhdGlvbgorICAgICB0byBub3QgcHVibGlzaCA8Y29tbWFuZD5VUERBVEU8L2NvbW1h bmQ+IG9yIDxjb21tYW5kPkRFTEVURTwvY29tbWFuZD4KKyAgICAgb3BlcmF0aW9ucy4KKyAgICA8 L3BhcmE+CisgICA8L3dhcm5pbmc+CisKICAgPC9zZWN0Mj4KIAogICA8c2VjdDIgaWQ9ImxvZ2lj YWwtcmVwbGljYXRpb24tcm93LWZpbHRlci10cmFuc2Zvcm1hdGlvbnMiPgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCA0NDBhZGIzNTZhZC4uODc2OWUzNDJhNTQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC0yMiw2ICsyMiw3IEBACiAj aW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFj Y2Vzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0YWRkcmVzcy5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGFydGl0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX25hbWVz cGFjZS5oIgpAQCAtMzQ2LDYgKzM0Nyw1NSBAQCBwdWJfcmZfY29udGFpbnNfaW52YWxpZF9jb2x1 bW4oT2lkIHB1YmlkLCBSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqYW5jZXN0b3JzLAogCXJldHVy biByZXN1bHQ7CiB9CiAKKy8qCisgKiBXYXJuIGF0IERETCB0aW1lIGlmIGEgcHVibGljYXRpb24n cyByb3cgZmlsdGVyIHJlZmVyZW5jZXMgY29sdW1ucyB0aGF0IGFyZQorICogbm90IHBhcnQgb2Yg dGhlIHRhYmxlJ3MgcmVwbGljYSBpZGVudGl0eS4gIFRoaXMgY2F0Y2hlcyBhIGNvbmZpZ3VyYXRp b24KKyAqIG1pc3Rha2UgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb25seSBzdXJmYWNlIGFzIGEgaGFy ZCBFUlJPUiBvbiB0aGUgZmlyc3QKKyAqIFVQREFURSBvciBERUxFVEUgYWdhaW5zdCB0aGUgdGFi bGUgKGluIENoZWNrQ21kUmVwbGljYUlkZW50aXR5KS4KKyAqCisgKiBXZSBvbmx5IHdhcm4gKG5v dCBlcnJvcikgc28gdGhhdCB0aGUgZXhpc3RpbmcgRE1MLXRpbWUgc2FmZXR5IGNoZWNrCisgKiBy ZW1haW5zIHRoZSBhdXRob3JpdGF0aXZlIGdhdGUuICBUaGUgd2FybmluZyBnaXZlcyB0aGUgREJB IGltbWVkaWF0ZQorICogZmVlZGJhY2sgd2hlbiBjcmVhdGluZyBvciBhbHRlcmluZyB0aGUgcHVi bGljYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19wdWJfcmZfY29sdW1uc19hdF9kZGwo T2lkIHB1YmlkLCBMaXN0ICpyZWxzLAorCQkJCQkJCWJvb2wgcHVidXBkYXRlLCBib29sIHB1YmRl bGV0ZSwKKwkJCQkJCQlib29sIHB1YnZpYXJvb3QpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwkv KiBObyBwb2ludCBjaGVja2luZyBpZiB0aGUgcHVibGljYXRpb24gZG9lc24ndCByZXBsaWNhdGUg VVBEL0RFTC4gKi8KKwlpZiAoIXB1YnVwZGF0ZSAmJiAhcHViZGVsZXRlKQorCQlyZXR1cm47CisK Kwlmb3JlYWNoKGxjLCByZWxzKQorCXsKKwkJUHVibGljYXRpb25SZWxJbmZvICpwdWJfcmVsID0g KFB1YmxpY2F0aW9uUmVsSW5mbyAqKSBsZmlyc3QobGMpOworCQlSZWxhdGlvbglyZWwgPSBwdWJf cmVsLT5yZWxhdGlvbjsKKwkJTGlzdAkgICAqYW5jZXN0b3JzID0gTklMOworCisJCS8qIE9ubHkg dGFibGVzIHdpdGggYSBXSEVSRSBjbGF1c2UgbmVlZCB0aGUgY2hlY2suICovCisJCWlmIChwdWJf cmVsLT53aGVyZUNsYXVzZSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJaWYgKHJlbC0+cmRf cmVsLT5yZWxpc3BhcnRpdGlvbikKKwkJCWFuY2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5jZXN0 b3JzKFJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisKKwkJaWYgKHB1Yl9yZl9jb250YWluc19pbnZh bGlkX2NvbHVtbihwdWJpZCwgcmVsLCBhbmNlc3RvcnMsCisJCQkJCQkJCQkJICAgcHVidmlhcm9v dCkpCisJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9D T0xVTU5fUkVGRVJFTkNFKSwKKwkJCQkJIGVycm1zZygiY29sdW1uIHVzZWQgaW4gdGhlIHB1Ymxp Y2F0aW9uIFdIRVJFIGV4cHJlc3Npb24gaXMgbm90IHBhcnQgb2YgdGhlIHJlcGxpY2EgaWRlbnRp dHkgZm9yIHRhYmxlIFwiJXNcIiIsCisJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs KSksCisJCQkJCSBlcnJoaW50KCJVUERBVEUgYW5kIERFTEVURSBvbiB0aGlzIHRhYmxlIHdpbGwg ZmFpbCB1bnRpbCAiCisJCQkJCQkJICJ0aGUgcmVwbGljYSBpZGVudGl0eSBjb3ZlcnMgdGhlIGZp bHRlcmVkIGNvbHVtbnMsICIKKwkJCQkJCQkgIm9yIHRoZSBwdWJsaWNhdGlvbiBpcyBjaGFuZ2Vk IHRvIG5vdCBwdWJsaXNoIHRob3NlICIKKwkJCQkJCQkgIm9wZXJhdGlvbnMuIikpKTsKKworCQls aXN0X2ZyZWUoYW5jZXN0b3JzKTsKKwl9Cit9CisKIC8qCiAgKiBDaGVjayBmb3IgaW52YWxpZCBj b2x1bW5zIGluIHRoZSBwdWJsaWNhdGlvbiB0YWJsZSBkZWZpbml0aW9uLgogICoKQEAgLTk3OCw2 ICsxMDI4LDE1IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRl UHVibGljYXRpb25TdG10ICpzdG10KQogCQkJCQkJCQkJICAgcHVibGlzaF92aWFfcGFydGl0aW9u X3Jvb3QpOwogCiAJCQlQdWJsaWNhdGlvbkFkZFRhYmxlcyhwdWJvaWQsIHJlbHMsIHRydWUsIE5V TEwpOworCisJCQkvKiBNYWtlIHB1YmxpY2F0aW9uX3JlbCByb3dzIHZpc2libGUgZm9yIHRoZSBj aGVjay4gKi8KKwkJCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CisKKwkJCWNoZWNrX3B1Yl9y Zl9jb2x1bW5zX2F0X2RkbChwdWJvaWQsIHJlbHMsCisJCQkJCQkJCQkJcHViYWN0aW9ucy5wdWJ1 cGRhdGUsCisJCQkJCQkJCQkJcHViYWN0aW9ucy5wdWJkZWxldGUsCisJCQkJCQkJCQkJcHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QpOworCiAJCQlDbG9zZVRhYmxlTGlzdChyZWxzKTsKIAkJfQog CkBAIC0xMDI4LDYgKzEwODcsOCBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRl ICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCWNoYXIJCXB1Ymxpc2hfZ2Vu ZXJhdGVkX2NvbHVtbnM7CiAJT2JqZWN0QWRkcmVzcyBvYmo7CiAJRm9ybV9wZ19wdWJsaWNhdGlv biBwdWJmb3JtOworCWJvb2wJCW9sZF9wdWJ1cGRhdGU7CisJYm9vbAkJb2xkX3B1YmRlbGV0ZTsK IAlMaXN0CSAgICpyb290X3JlbGlkcyA9IE5JTDsKIAlMaXN0Q2VsbCAgICpsYzsKIApAQCAtMTEy OCw2ICsxMTg5LDEwIEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJCX0KIAl9CiAKKwkvKiBSZW1lbWJlciBj dXJyZW50IHB1Ymxpc2ggZmxhZ3Mgc28gd2UgY2FuIGRldGVjdCB3aWRlbmluZy4gKi8KKwlvbGRf cHVidXBkYXRlID0gcHViZm9ybS0+cHVidXBkYXRlOworCW9sZF9wdWJkZWxldGUgPSBwdWJmb3Jt LT5wdWJkZWxldGU7CisKIAkvKiBFdmVyeXRoaW5nIG9rLCBmb3JtIGEgbmV3IHR1cGxlLiAqLwog CW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMpKTsKIAltZW1zZXQobnVsbHMsIGZhbHNl LCBzaXplb2YobnVsbHMpKTsKQEAgLTExNzAsNiArMTIzNSw1NSBAQCBBbHRlclB1YmxpY2F0aW9u T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAog CiAJcHViZm9ybSA9IChGb3JtX3BnX3B1YmxpY2F0aW9uKSBHRVRTVFJVQ1QodHVwKTsKIAorCS8q CisJICogSWYgdGhlIHB1Ymxpc2ggc2V0IHdhcyB3aWRlbmVkIHRvIGluY2x1ZGUgVVBEQVRFIG9y IERFTEVURSwgY2hlY2sKKwkgKiB3aGV0aGVyIGFueSBleGlzdGluZyByb3cgZmlsdGVycyByZWZl cmVuY2UgY29sdW1ucyBub3QgY292ZXJlZCBieSB0aGUKKwkgKiByZXBsaWNhIGlkZW50aXR5LiAg U2tpcCBGT1IgQUxMIFRBQkxFUyBwdWJsaWNhdGlvbnMsIHdoaWNoIGNhbm5vdCBoYXZlCisJICog cGVyLXRhYmxlIFdIRVJFIGNsYXVzZXMuCisJICovCisJaWYgKHB1Ymxpc2hfZ2l2ZW4gJiYKKwkJ KChwdWJhY3Rpb25zLnB1YnVwZGF0ZSAmJiAhb2xkX3B1YnVwZGF0ZSkgfHwKKwkJIChwdWJhY3Rp b25zLnB1YmRlbGV0ZSAmJiAhb2xkX3B1YmRlbGV0ZSkpICYmCisJCSFwdWJmb3JtLT5wdWJhbGx0 YWJsZXMpCisJeworCQlMaXN0CSAgICpyZWxpZHM7CisJCUxpc3RDZWxsICAgKnJsYzsKKworCQly ZWxpZHMgPSBHZXRJbmNsdWRlZFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmZvcm0tPm9pZCwKKwkJ CQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX0FMTCk7CisKKwkJZm9yZWFjaChybGMsIHJlbGlk cykKKwkJeworCQkJT2lkCQkJcmVsaWQgPSBsZmlyc3Rfb2lkKHJsYyk7CisJCQlSZWxhdGlvbglw dWJyZWw7CisJCQlMaXN0CSAgICphbmNlc3RvcnMgPSBOSUw7CisKKwkJCXB1YnJlbCA9IHRhYmxl X29wZW4ocmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCWlmIChwdWJyZWwtPnJkX3JlbC0+ cmVsaXNwYXJ0aXRpb24pCisJCQkJYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMo cmVsaWQpOworCisJCQlpZiAocHViX3JmX2NvbnRhaW5zX2ludmFsaWRfY29sdW1uKHB1YmZvcm0t Pm9pZCwgcHVicmVsLAorCQkJCQkJCQkJCQkgICBhbmNlc3RvcnMsCisJCQkJCQkJCQkJCSAgIHB1 YmZvcm0tPnB1YnZpYXJvb3QpKQorCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9DT0xVTU5fUkVGRVJFTkNFKSwKKwkJCQkJCSBlcnJtc2coImNvbHVt biB1c2VkIGluIHRoZSByb3cgZmlsdGVyIG9mIHB1YmxpY2F0aW9uIFwiJXNcIiAiCisJCQkJCQkJ CSJpcyBub3QgcGFydCBvZiB0aGUgcmVwbGljYSBpZGVudGl0eSBmb3IgdGFibGUgXCIlc1wiIiwK KwkJCQkJCQkJc3RtdC0+cHVibmFtZSwKKwkJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo cHVicmVsKSksCisJCQkJCQkgZXJyaGludCgiVVBEQVRFIGFuZCBERUxFVEUgb24gdGhpcyB0YWJs ZSB3aWxsIGZhaWwgdW50aWwgIgorCQkJCQkJCQkgInRoZSByZXBsaWNhIGlkZW50aXR5IGNvdmVy cyB0aGUgZmlsdGVyZWQgY29sdW1ucywgIgorCQkJCQkJCQkgIm9yIHRoZSBwdWJsaWNhdGlvbiBp cyBjaGFuZ2VkIHRvIG5vdCBwdWJsaXNoIHRob3NlICIKKwkJCQkJCQkJICJvcGVyYXRpb25zLiIp KSk7CisKKwkJCWxpc3RfZnJlZShhbmNlc3RvcnMpOworCQkJdGFibGVfY2xvc2UocHVicmVsLCBB Y2Nlc3NTaGFyZUxvY2spOworCQl9CisKKwkJbGlzdF9mcmVlKHJlbGlkcyk7CisJfQorCiAJLyog SW52YWxpZGF0ZSB0aGUgcmVsY2FjaGUuICovCiAJaWYgKHB1YmZvcm0tPnB1YmFsbHRhYmxlcykK IAl7CkBAIC0xMjY3LDYgKzEzODEsMTQgQEAgQWx0ZXJQdWJsaWNhdGlvblRhYmxlcyhBbHRlclB1 YmxpY2F0aW9uU3RtdCAqc3RtdCwgSGVhcFR1cGxlIHR1cCwKIAkJCQkJCQkJICAgcHViZm9ybS0+ cHVidmlhcm9vdCk7CiAKIAkJUHVibGljYXRpb25BZGRUYWJsZXMocHViaWQsIHJlbHMsIGZhbHNl LCBzdG10KTsKKworCQkvKiBNYWtlIHB1YmxpY2F0aW9uX3JlbCByb3dzIHZpc2libGUgZm9yIHRo ZSBjaGVjay4gKi8KKwkJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKworCQljaGVja19wdWJf cmZfY29sdW1uc19hdF9kZGwocHViaWQsIHJlbHMsCisJCQkJCQkJCQlwdWJmb3JtLT5wdWJ1cGRh dGUsCisJCQkJCQkJCQlwdWJmb3JtLT5wdWJkZWxldGUsCisJCQkJCQkJCQlwdWJmb3JtLT5wdWJ2 aWFyb290KTsKIAl9CiAJZWxzZSBpZiAoc3RtdC0+YWN0aW9uID09IEFQX0Ryb3BPYmplY3RzKQog CQlQdWJsaWNhdGlvbkRyb3BUYWJsZXMocHViaWQsIHJlbHMsIGZhbHNlKTsKQEAgLTE0MTIsNiAr MTUzNCwxNCBAQCBBbHRlclB1YmxpY2F0aW9uVGFibGVzKEFsdGVyUHVibGljYXRpb25TdG10ICpz dG10LCBIZWFwVHVwbGUgdHVwLAogCQkgKi8KIAkJUHVibGljYXRpb25BZGRUYWJsZXMocHViaWQs IHJlbHMsIHRydWUsIHN0bXQpOwogCisJCS8qIE1ha2UgcHVibGljYXRpb25fcmVsIHJvd3Mgdmlz aWJsZSBmb3IgdGhlIGNoZWNrLiAqLworCQlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworCisJ CWNoZWNrX3B1Yl9yZl9jb2x1bW5zX2F0X2RkbChwdWJpZCwgcmVscywKKwkJCQkJCQkJCXB1YmZv cm0tPnB1YnVwZGF0ZSwKKwkJCQkJCQkJCXB1YmZvcm0tPnB1YmRlbGV0ZSwKKwkJCQkJCQkJCXB1 YmZvcm0tPnB1YnZpYXJvb3QpOworCiAJCUNsb3NlVGFibGVMaXN0KGRlbHJlbHMpOwogCX0KIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCA4YjRlYmM2ZjIyNi4uODAzOTFiNTc4ZmQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19vcGNsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wb2xpY3kuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3B1YmxpY2F0aW9u LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX3Jld3JpdGUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpY19leHQu aCIKQEAgLTYxLDYgKzYyLDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9jb21tZW50LmgiCiAjaW5j bHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oIgogI2luY2x1ZGUgImNv bW1hbmRzL3NlcXVlbmNlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVjbWRzLmgiCiAjaW5j bHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgpAQCAtMTg3MjAsNiArMTg3MjIsNzAgQEAgcmVs YXRpb25fbWFya19yZXBsaWNhX2lkZW50aXR5KFJlbGF0aW9uIHJlbCwgY2hhciByaV90eXBlLCBP aWQgaW5kZXhPaWQsCiAJdGFibGVfY2xvc2UocGdfaW5kZXgsIFJvd0V4Y2x1c2l2ZUxvY2spOwog fQogCisvKgorICogQ2hlY2sgd2hldGhlciBhbnkgcHVibGljYXRpb24gcm93IGZpbHRlciBvbiB0 aGlzIHJlbGF0aW9uIHJlZmVyZW5jZXMKKyAqIGNvbHVtbnMgdGhhdCBhcmUgbm90IHBhcnQgb2Yg dGhlIChwb3NzaWJseSBqdXN0LWNoYW5nZWQpIHJlcGxpY2EgaWRlbnRpdHkuCisgKiBJZiBzbywg ZW1pdCBhIFdBUk5JTkcgc28gdGhlIERCQSBrbm93cyB0aGF0IFVQREFURS9ERUxFVEUgd2lsbCBm YWlsLgorICovCitzdGF0aWMgdm9pZAorY2hlY2tfcmVsYXRpb25fcHVibGljYXRpb25zX3JmKFJl bGF0aW9uIHJlbCkKK3sKKwlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKKwlM aXN0CSAgICpwdWJvaWRzOworCUxpc3RDZWxsICAgKmxjOworCUxpc3QJICAgKmFuY2VzdG9ycyA9 IE5JTDsKKworCXB1Ym9pZHMgPSBHZXRSZWxhdGlvbkluY2x1ZGVkUHVibGljYXRpb25zKHJlbGlk KTsKKwlpZiAocHVib2lkcyA9PSBOSUwpCisJCXJldHVybjsKKworCWlmIChyZWwtPnJkX3JlbC0+ cmVsaXNwYXJ0aXRpb24pCisJCWFuY2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5jZXN0b3JzKHJl bGlkKTsKKworCWZvcmVhY2gobGMsIHB1Ym9pZHMpCisJeworCQlPaWQJCQlwdWJpZCA9IGxmaXJz dF9vaWQobGMpOworCQlIZWFwVHVwbGUJcHVidHVwOworCQlGb3JtX3BnX3B1YmxpY2F0aW9uIHB1 YmZvcm07CisKKwkJcHVidHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBVQkxJQ0FUSU9OT0lELCBPYmpl Y3RJZEdldERhdHVtKHB1YmlkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwdWJ0dXApKQor CQkJY29udGludWU7CisKKwkJcHViZm9ybSA9IChGb3JtX3BnX3B1YmxpY2F0aW9uKSBHRVRTVFJV Q1QocHVidHVwKTsKKworCQkvKgorCQkgKiBPbmx5IGNoZWNrIHB1YmxpY2F0aW9ucyB0aGF0IHJl cGxpY2F0ZSBVUERBVEUgb3IgREVMRVRFOworCQkgKiBJTlNFUlQtb25seSBwdWJsaWNhdGlvbnMg ZG8gbm90IG5lZWQgb2xkIHR1cGxlIHZhbHVlcy4KKwkJICovCisJCWlmICgocHViZm9ybS0+cHVi dXBkYXRlIHx8IHB1YmZvcm0tPnB1YmRlbGV0ZSkgJiYKKwkJCSFwdWJmb3JtLT5wdWJhbGx0YWJs ZXMgJiYKKwkJCXB1Yl9yZl9jb250YWluc19pbnZhbGlkX2NvbHVtbihwdWJpZCwgcmVsLCBhbmNl c3RvcnMsCisJCQkJCQkJCQkJICAgcHViZm9ybS0+cHVidmlhcm9vdCkpCisJCXsKKwkJCWNoYXIJ ICAgKnB1Ym5hbWUgPSBwc3RyZHVwKE5hbWVTdHIocHViZm9ybS0+cHVibmFtZSkpOworCisJCQlS ZWxlYXNlU3lzQ2FjaGUocHVidHVwKTsKKwkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX0NPTFVNTl9SRUZFUkVOQ0UpLAorCQkJCQkgZXJybXNnKCJjb2x1 bW4gdXNlZCBpbiB0aGUgcm93IGZpbHRlciBvZiBwdWJsaWNhdGlvbiBcIiVzXCIgIgorCQkJCQkJ CSJpcyBub3QgcGFydCBvZiB0aGUgcmVwbGljYSBpZGVudGl0eSBmb3IgdGFibGUgXCIlc1wiIiwK KwkJCQkJCQlwdWJuYW1lLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSwKKwkJCQkJIGVy cmhpbnQoIlVQREFURSBhbmQgREVMRVRFIG9uIHRoaXMgdGFibGUgd2lsbCBmYWlsIHVudGlsICIK KwkJCQkJCQkgInRoZSByZXBsaWNhIGlkZW50aXR5IGNvdmVycyB0aGUgZmlsdGVyZWQgY29sdW1u cywgIgorCQkJCQkJCSAib3IgdGhlIHB1YmxpY2F0aW9uIGlzIGNoYW5nZWQgdG8gbm90IHB1Ymxp c2ggdGhvc2UgIgorCQkJCQkJCSAib3BlcmF0aW9ucy4iKSkpOworCQkJcGZyZWUocHVibmFtZSk7 CisJCQljb250aW51ZTsKKwkJfQorCisJCVJlbGVhc2VTeXNDYWNoZShwdWJ0dXApOworCX0KKwor CWxpc3RfZnJlZShhbmNlc3RvcnMpOworCWxpc3RfZnJlZShwdWJvaWRzKTsKK30KKwogLyoKICAq IEFMVEVSIFRBQkxFIDxuYW1lPiBSRVBMSUNBIElERU5USVRZIC4uLgogICovCkBAIC0xODczMywx NyArMTg3OTksMTggQEAgQVRFeGVjUmVwbGljYUlkZW50aXR5KFJlbGF0aW9uIHJlbCwgUmVwbGlj YUlkZW50aXR5U3RtdCAqc3RtdCwgTE9DS01PREUgbG9ja21vZGUKIAlpZiAoc3RtdC0+aWRlbnRp dHlfdHlwZSA9PSBSRVBMSUNBX0lERU5USVRZX0RFRkFVTFQpCiAJewogCQlyZWxhdGlvbl9tYXJr X3JlcGxpY2FfaWRlbnRpdHkocmVsLCBzdG10LT5pZGVudGl0eV90eXBlLCBJbnZhbGlkT2lkLCB0 cnVlKTsKLQkJcmV0dXJuOworCQlnb3RvIGNoZWNrX3B1YmxpY2F0aW9uczsKIAl9CiAJZWxzZSBp ZiAoc3RtdC0+aWRlbnRpdHlfdHlwZSA9PSBSRVBMSUNBX0lERU5USVRZX0ZVTEwpCiAJewogCQly ZWxhdGlvbl9tYXJrX3JlcGxpY2FfaWRlbnRpdHkocmVsLCBzdG10LT5pZGVudGl0eV90eXBlLCBJ bnZhbGlkT2lkLCB0cnVlKTsKKwkJLyogRlVMTCBjb3ZlcnMgYWxsIGNvbHVtbnMsIHNvIG5vIHdh cm5pbmcgaXMgcG9zc2libGUuICovCiAJCXJldHVybjsKIAl9CiAJZWxzZSBpZiAoc3RtdC0+aWRl bnRpdHlfdHlwZSA9PSBSRVBMSUNBX0lERU5USVRZX05PVEhJTkcpCiAJewogCQlyZWxhdGlvbl9t YXJrX3JlcGxpY2FfaWRlbnRpdHkocmVsLCBzdG10LT5pZGVudGl0eV90eXBlLCBJbnZhbGlkT2lk LCB0cnVlKTsKLQkJcmV0dXJuOworCQlnb3RvIGNoZWNrX3B1YmxpY2F0aW9uczsKIAl9CiAJZWxz ZSBpZiAoc3RtdC0+aWRlbnRpdHlfdHlwZSA9PSBSRVBMSUNBX0lERU5USVRZX0lOREVYKQogCXsK QEAgLTE4ODMyLDYgKzE4ODk5LDI0IEBAIEFURXhlY1JlcGxpY2FJZGVudGl0eShSZWxhdGlvbiBy ZWwsIFJlcGxpY2FJZGVudGl0eVN0bXQgKnN0bXQsIExPQ0tNT0RFIGxvY2ttb2RlCiAJcmVsYXRp b25fbWFya19yZXBsaWNhX2lkZW50aXR5KHJlbCwgc3RtdC0+aWRlbnRpdHlfdHlwZSwgaW5kZXhP aWQsIHRydWUpOwogCiAJaW5kZXhfY2xvc2UoaW5kZXhSZWwsIE5vTG9jayk7CisKK2NoZWNrX3B1 YmxpY2F0aW9uczoKKworCS8qCisJICogVGhlIGNhdGFsb2cgY2hhbmdlcyBmcm9tIHJlbGF0aW9u X21hcmtfcmVwbGljYV9pZGVudGl0eSBhcmUgbm90IHlldAorCSAqIHZpc2libGUgdG8gdGhlIHN5 c2NhY2hlL3JlbGNhY2hlLiAgTWFrZSB0aGVtIHZpc2libGUgc28gdGhhdAorCSAqIGNoZWNrX3Jl bGF0aW9uX3B1YmxpY2F0aW9uc19yZiBjYW4gc2VlIHRoZSBuZXcgcmVwbGljYSBpZGVudGl0eSB3 aGVuCisJICogZXZhbHVhdGluZyBwdWJsaWNhdGlvbiByb3cgZmlsdGVycy4KKwkgKi8KKwlDb21t YW5kQ291bnRlckluY3JlbWVudCgpOworCXsKKwkJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJl bGlkKHJlbCk7CisJCVJlbGF0aW9uCWZyZXNocmVsOworCisJCWZyZXNocmVsID0gdGFibGVfb3Bl bihyZWxpZCwgTm9Mb2NrKTsKKwkJY2hlY2tfcmVsYXRpb25fcHVibGljYXRpb25zX3JmKGZyZXNo cmVsKTsKKwkJdGFibGVfY2xvc2UoZnJlc2hyZWwsIE5vTG9jayk7CisJfQogfQogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAppbmRleCBkMmFhOWQ0NWU0YS4u MGQyOTFjOThhMGEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGlj YXRpb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0 CkBAIC04ODMsMTcgKzg4MywyMyBAQCBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFC TEUgcmZfdGJsX2FiY2RfcGsgV0hFUkUgKGIgPiA5OSk7CiAtLSBvayAtICJiIiBpcyBhIFBLIGNv bAogVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayBXSEVSRSAoYyA+IDk5KTsKK1dBUk5JTkc6 ICBjb2x1bW4gdXNlZCBpbiB0aGUgcHVibGljYXRpb24gV0hFUkUgZXhwcmVzc2lvbiBpcyBub3Qg cGFydCBvZiB0aGUgcmVwbGljYSBpZGVudGl0eSBmb3IgdGFibGUgInJmX3RibF9hYmNkX3BrIgor SElOVDogIFVQREFURSBhbmQgREVMRVRFIG9uIHRoaXMgdGFibGUgd2lsbCBmYWlsIHVudGlsIHRo ZSByZXBsaWNhIGlkZW50aXR5IGNvdmVycyB0aGUgZmlsdGVyZWQgY29sdW1ucywgb3IgdGhlIHB1 YmxpY2F0aW9uIGlzIGNoYW5nZWQgdG8gbm90IHB1Ymxpc2ggdGhvc2Ugb3BlcmF0aW9ucy4KIC0t IGZhaWwgLSAiYyIgaXMgbm90IHBhcnQgb2YgdGhlIFBLCiBVUERBVEUgcmZfdGJsX2FiY2RfcGsg U0VUIGEgPSAxOwogRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJyZl90YmxfYWJjZF9wayIK IERFVEFJTDogIENvbHVtbiB1c2VkIGluIHRoZSBwdWJsaWNhdGlvbiBXSEVSRSBleHByZXNzaW9u IGlzIG5vdCBwYXJ0IG9mIHRoZSByZXBsaWNhIGlkZW50aXR5LgogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BrIFdIRVJFIChkID4gOTkpOworV0FSTklO RzogIGNvbHVtbiB1c2VkIGluIHRoZSBwdWJsaWNhdGlvbiBXSEVSRSBleHByZXNzaW9uIGlzIG5v dCBwYXJ0IG9mIHRoZSByZXBsaWNhIGlkZW50aXR5IGZvciB0YWJsZSAicmZfdGJsX2FiY2RfcGsi CitISU5UOiAgVVBEQVRFIGFuZCBERUxFVEUgb24gdGhpcyB0YWJsZSB3aWxsIGZhaWwgdW50aWwg dGhlIHJlcGxpY2EgaWRlbnRpdHkgY292ZXJzIHRoZSBmaWx0ZXJlZCBjb2x1bW5zLCBvciB0aGUg cHVibGljYXRpb24gaXMgY2hhbmdlZCB0byBub3QgcHVibGlzaCB0aG9zZSBvcGVyYXRpb25zLgog LS0gZmFpbCAtICJkIiBpcyBub3QgcGFydCBvZiB0aGUgUEsKIFVQREFURSByZl90YmxfYWJjZF9w ayBTRVQgYSA9IDE7CiBFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInJmX3RibF9hYmNkX3Br IgogREVUQUlMOiAgQ29sdW1uIHVzZWQgaW4gdGhlIHB1YmxpY2F0aW9uIFdIRVJFIGV4cHJlc3Np b24gaXMgbm90IHBhcnQgb2YgdGhlIHJlcGxpY2EgaWRlbnRpdHkuCiAtLSAxYi4gUkVQTElDQSBJ REVOVElUWSBpcyBERUZBVUxUIGFuZCB0YWJsZSBoYXMgbm8gUEsKIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9ub3BrIFdIRVJFIChhID4gOTkpOworV0FS TklORzogIGNvbHVtbiB1c2VkIGluIHRoZSBwdWJsaWNhdGlvbiBXSEVSRSBleHByZXNzaW9uIGlz IG5vdCBwYXJ0IG9mIHRoZSByZXBsaWNhIGlkZW50aXR5IGZvciB0YWJsZSAicmZfdGJsX2FiY2Rf bm9wayIKK0hJTlQ6ICBVUERBVEUgYW5kIERFTEVURSBvbiB0aGlzIHRhYmxlIHdpbGwgZmFpbCB1 bnRpbCB0aGUgcmVwbGljYSBpZGVudGl0eSBjb3ZlcnMgdGhlIGZpbHRlcmVkIGNvbHVtbnMsIG9y IHRoZSBwdWJsaWNhdGlvbiBpcyBjaGFuZ2VkIHRvIG5vdCBwdWJsaXNoIHRob3NlIG9wZXJhdGlv bnMuCiAtLSBmYWlsIC0gImEiIGlzIG5vdCBwYXJ0IG9mIFJFUExJQ0EgSURFTlRJVFkKIFVQREFU RSByZl90YmxfYWJjZF9ub3BrIFNFVCBhID0gMTsKIEVSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJs ZSAicmZfdGJsX2FiY2Rfbm9wayIKQEAgLTkxMCwxNyArOTE2LDI1IEBAIFVQREFURSByZl90Ymxf YWJjZF9ub3BrIFNFVCBhID0gMTsKIC0tIENhc2UgMy4gUkVQTElDQSBJREVOVElUWSBOT1RISU5H CiBBTFRFUiBUQUJMRSByZl90YmxfYWJjZF9wayBSRVBMSUNBIElERU5USVRZIE5PVEhJTkc7CiBB TFRFUiBUQUJMRSByZl90YmxfYWJjZF9ub3BrIFJFUExJQ0EgSURFTlRJVFkgTk9USElORzsKK1dB Uk5JTkc6ICBjb2x1bW4gdXNlZCBpbiB0aGUgcm93IGZpbHRlciBvZiBwdWJsaWNhdGlvbiAidGVz dHB1YjYiIGlzIG5vdCBwYXJ0IG9mIHRoZSByZXBsaWNhIGlkZW50aXR5IGZvciB0YWJsZSAicmZf dGJsX2FiY2Rfbm9wayIKK0hJTlQ6ICBVUERBVEUgYW5kIERFTEVURSBvbiB0aGlzIHRhYmxlIHdp bGwgZmFpbCB1bnRpbCB0aGUgcmVwbGljYSBpZGVudGl0eSBjb3ZlcnMgdGhlIGZpbHRlcmVkIGNv bHVtbnMsIG9yIHRoZSBwdWJsaWNhdGlvbiBpcyBjaGFuZ2VkIHRvIG5vdCBwdWJsaXNoIHRob3Nl IG9wZXJhdGlvbnMuCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJs X2FiY2RfcGsgV0hFUkUgKGEgPiA5OSk7CitXQVJOSU5HOiAgY29sdW1uIHVzZWQgaW4gdGhlIHB1 YmxpY2F0aW9uIFdIRVJFIGV4cHJlc3Npb24gaXMgbm90IHBhcnQgb2YgdGhlIHJlcGxpY2EgaWRl bnRpdHkgZm9yIHRhYmxlICJyZl90YmxfYWJjZF9wayIKK0hJTlQ6ICBVUERBVEUgYW5kIERFTEVU RSBvbiB0aGlzIHRhYmxlIHdpbGwgZmFpbCB1bnRpbCB0aGUgcmVwbGljYSBpZGVudGl0eSBjb3Zl cnMgdGhlIGZpbHRlcmVkIGNvbHVtbnMsIG9yIHRoZSBwdWJsaWNhdGlvbiBpcyBjaGFuZ2VkIHRv IG5vdCBwdWJsaXNoIHRob3NlIG9wZXJhdGlvbnMuCiAtLSBmYWlsIC0gImEiIGlzIGluIFBLIGJ1 dCBpdCBpcyBub3QgcGFydCBvZiBSRVBMSUNBIElERU5USVRZIE5PVEhJTkcKIFVQREFURSByZl90 YmxfYWJjZF9wayBTRVQgYSA9IDE7CiBFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInJmX3Ri bF9hYmNkX3BrIgogREVUQUlMOiAgQ29sdW1uIHVzZWQgaW4gdGhlIHB1YmxpY2F0aW9uIFdIRVJF IGV4cHJlc3Npb24gaXMgbm90IHBhcnQgb2YgdGhlIHJlcGxpY2EgaWRlbnRpdHkuCiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGsgV0hFUkUgKGMgPiA5 OSk7CitXQVJOSU5HOiAgY29sdW1uIHVzZWQgaW4gdGhlIHB1YmxpY2F0aW9uIFdIRVJFIGV4cHJl c3Npb24gaXMgbm90IHBhcnQgb2YgdGhlIHJlcGxpY2EgaWRlbnRpdHkgZm9yIHRhYmxlICJyZl90 YmxfYWJjZF9wayIKK0hJTlQ6ICBVUERBVEUgYW5kIERFTEVURSBvbiB0aGlzIHRhYmxlIHdpbGwg ZmFpbCB1bnRpbCB0aGUgcmVwbGljYSBpZGVudGl0eSBjb3ZlcnMgdGhlIGZpbHRlcmVkIGNvbHVt bnMsIG9yIHRoZSBwdWJsaWNhdGlvbiBpcyBjaGFuZ2VkIHRvIG5vdCBwdWJsaXNoIHRob3NlIG9w ZXJhdGlvbnMuCiAtLSBmYWlsIC0gImMiIGlzIG5vdCBpbiBQSyBhbmQgbm90IGluIFJFUExJQ0Eg SURFTlRJVFkgTk9USElORwogVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKIEVSUk9S OiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2FiY2RfcGsiCiBERVRBSUw6ICBDb2x1bW4g dXNlZCBpbiB0aGUgcHVibGljYXRpb24gV0hFUkUgZXhwcmVzc2lvbiBpcyBub3QgcGFydCBvZiB0 aGUgcmVwbGljYSBpZGVudGl0eS4KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJM RSByZl90YmxfYWJjZF9ub3BrIFdIRVJFIChhID4gOTkpOworV0FSTklORzogIGNvbHVtbiB1c2Vk IGluIHRoZSBwdWJsaWNhdGlvbiBXSEVSRSBleHByZXNzaW9uIGlzIG5vdCBwYXJ0IG9mIHRoZSBy ZXBsaWNhIGlkZW50aXR5IGZvciB0YWJsZSAicmZfdGJsX2FiY2Rfbm9wayIKK0hJTlQ6ICBVUERB VEUgYW5kIERFTEVURSBvbiB0aGlzIHRhYmxlIHdpbGwgZmFpbCB1bnRpbCB0aGUgcmVwbGljYSBp ZGVudGl0eSBjb3ZlcnMgdGhlIGZpbHRlcmVkIGNvbHVtbnMsIG9yIHRoZSBwdWJsaWNhdGlvbiBp cyBjaGFuZ2VkIHRvIG5vdCBwdWJsaXNoIHRob3NlIG9wZXJhdGlvbnMuCiAtLSBmYWlsIC0gImEi IGlzIG5vdCBpbiBSRVBMSUNBIElERU5USVRZIE5PVEhJTkcKIFVQREFURSByZl90YmxfYWJjZF9u b3BrIFNFVCBhID0gMTsKIEVSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2FiY2Rf bm9wayIKQEAgLTkzMiw3ICs5NDYsMTEgQEAgQUxURVIgVEFCTEUgcmZfdGJsX2FiY2RfcGsgUkVQ TElDQSBJREVOVElUWSBVU0lORyBJTkRFWCBpZHhfYWJjZF9wa19jOwogQUxURVIgVEFCTEUgcmZf dGJsX2FiY2Rfbm9wayBBTFRFUiBDT0xVTU4gYyBTRVQgTk9UIE5VTEw7CiBDUkVBVEUgVU5JUVVF IElOREVYIGlkeF9hYmNkX25vcGtfYyBPTiByZl90YmxfYWJjZF9ub3BrKGMpOwogQUxURVIgVEFC TEUgcmZfdGJsX2FiY2Rfbm9wayBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIGlkeF9hYmNk X25vcGtfYzsKK1dBUk5JTkc6ICBjb2x1bW4gdXNlZCBpbiB0aGUgcm93IGZpbHRlciBvZiBwdWJs aWNhdGlvbiAidGVzdHB1YjYiIGlzIG5vdCBwYXJ0IG9mIHRoZSByZXBsaWNhIGlkZW50aXR5IGZv ciB0YWJsZSAicmZfdGJsX2FiY2Rfbm9wayIKK0hJTlQ6ICBVUERBVEUgYW5kIERFTEVURSBvbiB0 aGlzIHRhYmxlIHdpbGwgZmFpbCB1bnRpbCB0aGUgcmVwbGljYSBpZGVudGl0eSBjb3ZlcnMgdGhl IGZpbHRlcmVkIGNvbHVtbnMsIG9yIHRoZSBwdWJsaWNhdGlvbiBpcyBjaGFuZ2VkIHRvIG5vdCBw dWJsaXNoIHRob3NlIG9wZXJhdGlvbnMuCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQg VEFCTEUgcmZfdGJsX2FiY2RfcGsgV0hFUkUgKGEgPiA5OSk7CitXQVJOSU5HOiAgY29sdW1uIHVz ZWQgaW4gdGhlIHB1YmxpY2F0aW9uIFdIRVJFIGV4cHJlc3Npb24gaXMgbm90IHBhcnQgb2YgdGhl IHJlcGxpY2EgaWRlbnRpdHkgZm9yIHRhYmxlICJyZl90YmxfYWJjZF9wayIKK0hJTlQ6ICBVUERB VEUgYW5kIERFTEVURSBvbiB0aGlzIHRhYmxlIHdpbGwgZmFpbCB1bnRpbCB0aGUgcmVwbGljYSBp ZGVudGl0eSBjb3ZlcnMgdGhlIGZpbHRlcmVkIGNvbHVtbnMsIG9yIHRoZSBwdWJsaWNhdGlvbiBp cyBjaGFuZ2VkIHRvIG5vdCBwdWJsaXNoIHRob3NlIG9wZXJhdGlvbnMuCiAtLSBmYWlsIC0gImEi IGlzIGluIFBLIGJ1dCBpdCBpcyBub3QgcGFydCBvZiBSRVBMSUNBIElERU5USVRZIElOREVYCiBV UERBVEUgcmZfdGJsX2FiY2RfcGsgU0VUIGEgPSAxOwogRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRh YmxlICJyZl90YmxfYWJjZF9wayIKQEAgLTk0MSw2ICs5NTksOCBAQCBBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGsgV0hFUkUgKGMgPiA5OSk7CiAtLSBv ayAtICJjIiBpcyBub3QgaW4gUEsgYnV0IGl0IGlzIHBhcnQgb2YgUkVQTElDQSBJREVOVElUWSBJ TkRFWAogVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9ub3BrIFdIRVJFIChhID4gOTkpOworV0FS TklORzogIGNvbHVtbiB1c2VkIGluIHRoZSBwdWJsaWNhdGlvbiBXSEVSRSBleHByZXNzaW9uIGlz IG5vdCBwYXJ0IG9mIHRoZSByZXBsaWNhIGlkZW50aXR5IGZvciB0YWJsZSAicmZfdGJsX2FiY2Rf bm9wayIKK0hJTlQ6ICBVUERBVEUgYW5kIERFTEVURSBvbiB0aGlzIHRhYmxlIHdpbGwgZmFpbCB1 bnRpbCB0aGUgcmVwbGljYSBpZGVudGl0eSBjb3ZlcnMgdGhlIGZpbHRlcmVkIGNvbHVtbnMsIG9y IHRoZSBwdWJsaWNhdGlvbiBpcyBjaGFuZ2VkIHRvIG5vdCBwdWJsaXNoIHRob3NlIG9wZXJhdGlv bnMuCiAtLSBmYWlsIC0gImEiIGlzIG5vdCBpbiBSRVBMSUNBIElERU5USVRZIElOREVYCiBVUERB VEUgcmZfdGJsX2FiY2Rfbm9wayBTRVQgYSA9IDE7CiBFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFi bGUgInJmX3RibF9hYmNkX25vcGsiCkBAIC05NzksNiArOTk5LDggQEAgQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1YjYgU0VUIChQVUJMSVNIX1ZJQV9QQVJUSVRJT05fUk9PVD0wKTsKIC0tIE5vdyBj aGFuZ2UgdGhlIHJvb3QgZmlsdGVyIHRvIHVzZSBhIGNvbHVtbiAiYiIKIC0tICh3aGljaCBpcyBu b3QgaW4gdGhlIHJlcGxpY2EgaWRlbnRpdHkpCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBT RVQgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wa18xIFdIRVJFIChiID4gOTkpOworV0FSTklORzog IGNvbHVtbiB1c2VkIGluIHRoZSBwdWJsaWNhdGlvbiBXSEVSRSBleHByZXNzaW9uIGlzIG5vdCBw YXJ0IG9mIHRoZSByZXBsaWNhIGlkZW50aXR5IGZvciB0YWJsZSAicmZfdGJsX2FiY2RfcGFydF9w a18xIgorSElOVDogIFVQREFURSBhbmQgREVMRVRFIG9uIHRoaXMgdGFibGUgd2lsbCBmYWlsIHVu dGlsIHRoZSByZXBsaWNhIGlkZW50aXR5IGNvdmVycyB0aGUgZmlsdGVyZWQgY29sdW1ucywgb3Ig dGhlIHB1YmxpY2F0aW9uIGlzIGNoYW5nZWQgdG8gbm90IHB1Ymxpc2ggdGhvc2Ugb3BlcmF0aW9u cy4KIC0tIG9rIC0gd2UgZG9uJ3QgaGF2ZSByb3cgZmlsdGVyIGZvciBwYXJ0aXRpb25lZCB0YWJs ZS4KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCAoUFVCTElTSF9WSUFfUEFSVElUSU9O X1JPT1Q9MCk7CiAtLSBmYWlsIC0gImIiIGlzIG5vdCBpbiBSRVBMSUNBIElERU5USVRZIElOREVY CkBAIC05OTAsMTAgKzEwMTIsNTEgQEAgREVUQUlMOiAgQ29sdW1uIHVzZWQgaW4gdGhlIHB1Ymxp Y2F0aW9uIFdIRVJFIGV4cHJlc3Npb24gaXMgbm90IHBhcnQgb2YgdGhlIHJlcGwKIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCAoUFVCTElTSF9WSUFfUEFSVElUSU9OX1JPT1Q9MSk7CiAt LSBvayAtIGNhbiB1c2Ugcm93IGZpbHRlciBmb3IgcGFydGl0aW9uZWQgdGFibGUKIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wYXJ0X3BrIFdIRVJFIChi ID4gOTkpOworV0FSTklORzogIGNvbHVtbiB1c2VkIGluIHRoZSBwdWJsaWNhdGlvbiBXSEVSRSBl eHByZXNzaW9uIGlzIG5vdCBwYXJ0IG9mIHRoZSByZXBsaWNhIGlkZW50aXR5IGZvciB0YWJsZSAi cmZfdGJsX2FiY2RfcGFydF9wayIKK0hJTlQ6ICBVUERBVEUgYW5kIERFTEVURSBvbiB0aGlzIHRh YmxlIHdpbGwgZmFpbCB1bnRpbCB0aGUgcmVwbGljYSBpZGVudGl0eSBjb3ZlcnMgdGhlIGZpbHRl cmVkIGNvbHVtbnMsIG9yIHRoZSBwdWJsaWNhdGlvbiBpcyBjaGFuZ2VkIHRvIG5vdCBwdWJsaXNo IHRob3NlIG9wZXJhdGlvbnMuCiAtLSBmYWlsIC0gImIiIGlzIG5vdCBpbiBSRVBMSUNBIElERU5U SVRZIElOREVYCiBVUERBVEUgcmZfdGJsX2FiY2RfcGFydF9wayBTRVQgYSA9IDE7CiBFUlJPUjog IGNhbm5vdCB1cGRhdGUgdGFibGUgInJmX3RibF9hYmNkX3BhcnRfcGtfMSIKIERFVEFJTDogIENv bHVtbiB1c2VkIGluIHRoZSBwdWJsaWNhdGlvbiBXSEVSRSBleHByZXNzaW9uIGlzIG5vdCBwYXJ0 IG9mIHRoZSByZXBsaWNhIGlkZW50aXR5LgorLS0gVGVzdHMgZm9yIERETC10aW1lIFdBUk5JTkcg d2hlbiByb3cgZmlsdGVyIGNvbHVtbnMgYXJlIG5vdCBpbiByZXBsaWNhCistLSBpZGVudGl0eS4g IFRoZSBETUwtdGltZSBFUlJPUiBzdGlsbCBmaXJlcyBhcyBhIHNhZmV0eSBuZXQuCistLSBSZXNl dCB0YWJsZXMgdG8ga25vd24gc3RhdGUKK0FMVEVSIFRBQkxFIHJmX3RibF9hYmNkX3BrIFJFUExJ Q0EgSURFTlRJVFkgREVGQVVMVDsKK0FMVEVSIFRBQkxFIHJmX3RibF9hYmNkX25vcGsgUkVQTElD QSBJREVOVElUWSBGVUxMOworLS0gRERMLXRpbWUgd2FybmluZzogImMiIGlzIG5vdCBwYXJ0IG9m IFBLIChERUZBVUxUIHJlcGxpY2EgaWRlbnRpdHkpCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi NiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGsgV0hFUkUgKGMgPiA5OSk7CitXQVJOSU5HOiAgY29s dW1uIHVzZWQgaW4gdGhlIHB1YmxpY2F0aW9uIFdIRVJFIGV4cHJlc3Npb24gaXMgbm90IHBhcnQg b2YgdGhlIHJlcGxpY2EgaWRlbnRpdHkgZm9yIHRhYmxlICJyZl90YmxfYWJjZF9wayIKK0hJTlQ6 ICBVUERBVEUgYW5kIERFTEVURSBvbiB0aGlzIHRhYmxlIHdpbGwgZmFpbCB1bnRpbCB0aGUgcmVw bGljYSBpZGVudGl0eSBjb3ZlcnMgdGhlIGZpbHRlcmVkIGNvbHVtbnMsIG9yIHRoZSBwdWJsaWNh dGlvbiBpcyBjaGFuZ2VkIHRvIG5vdCBwdWJsaXNoIHRob3NlIG9wZXJhdGlvbnMuCistLSBETUwt dGltZSBlcnJvciBzdGlsbCBwcmVzZW50CitVUERBVEUgcmZfdGJsX2FiY2RfcGsgU0VUIGEgPSAx OworRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJyZl90YmxfYWJjZF9wayIKK0RFVEFJTDog IENvbHVtbiB1c2VkIGluIHRoZSBwdWJsaWNhdGlvbiBXSEVSRSBleHByZXNzaW9uIGlzIG5vdCBw YXJ0IG9mIHRoZSByZXBsaWNhIGlkZW50aXR5LgorLS0gTm8gd2FybmluZzogcHVibGljYXRpb24g b25seSBwdWJsaXNoZXMgSU5TRVJUCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgKHB1 Ymxpc2ggPSAnaW5zZXJ0Jyk7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUg cmZfdGJsX2FiY2RfcGsgV0hFUkUgKGMgPiA5OSk7CistLSBEREwtdGltZSB3YXJuaW5nIHdoZW4g d2lkZW5pbmcgcHVibGlzaCBzZXQgdG8gaW5jbHVkZSBVUERBVEUvREVMRVRFCistLSB3aGlsZSBh biBleGlzdGluZyByb3cgZmlsdGVyIHJlZmVyZW5jZXMgYSBub24taWRlbnRpdHkgY29sdW1uLgor QUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRl LCBkZWxldGUnKTsKK1dBUk5JTkc6ICBjb2x1bW4gdXNlZCBpbiB0aGUgcm93IGZpbHRlciBvZiBw dWJsaWNhdGlvbiAidGVzdHB1YjYiIGlzIG5vdCBwYXJ0IG9mIHRoZSByZXBsaWNhIGlkZW50aXR5 IGZvciB0YWJsZSAicmZfdGJsX2FiY2RfcGsiCitISU5UOiAgVVBEQVRFIGFuZCBERUxFVEUgb24g dGhpcyB0YWJsZSB3aWxsIGZhaWwgdW50aWwgdGhlIHJlcGxpY2EgaWRlbnRpdHkgY292ZXJzIHRo ZSBmaWx0ZXJlZCBjb2x1bW5zLCBvciB0aGUgcHVibGljYXRpb24gaXMgY2hhbmdlZCB0byBub3Qg cHVibGlzaCB0aG9zZSBvcGVyYXRpb25zLgorLS0gRE1MLXRpbWUgZXJyb3Igc3RpbGwgcHJlc2Vu dCBhZnRlciB3aWRlbmluZworVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0VSUk9S OiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2FiY2RfcGsiCitERVRBSUw6ICBDb2x1bW4g dXNlZCBpbiB0aGUgcHVibGljYXRpb24gV0hFUkUgZXhwcmVzc2lvbiBpcyBub3QgcGFydCBvZiB0 aGUgcmVwbGljYSBpZGVudGl0eS4KKy0tIE5vIHdhcm5pbmc6IFJFUExJQ0EgSURFTlRJVFkgRlVM TCBjb3ZlcnMgYWxsIGNvbHVtbnMKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJM RSByZl90YmxfYWJjZF9ub3BrIFdIRVJFIChhID4gOTkpOworLS0gTm8gd2FybmluZzogd2lkZW5p bmcgcHVibGlzaCBzZXQgd2hlbiBSRVBMSUNBIElERU5USVRZIEZVTEwKK0FMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWI2IFNFVCAocHVibGlzaCA9ICdpbnNlcnQnKTsKK0FMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWI2IFNFVCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlJyk7CistLSBE REwtdGltZSB3YXJuaW5nIGZyb20gQUxURVIgVEFCTEUgUkVQTElDQSBJREVOVElUWTogbmFycm93 aW5nIGlkZW50aXR5CistLSB3aGlsZSBhIHB1YmxpY2F0aW9uIGZpbHRlciByZWZlcmVuY2VzIGEg bm93LXVuY292ZXJlZCBjb2x1bW4uCitBTFRFUiBUQUJMRSByZl90YmxfYWJjZF9ub3BrIFJFUExJ Q0EgSURFTlRJVFkgTk9USElORzsKK1dBUk5JTkc6ICBjb2x1bW4gdXNlZCBpbiB0aGUgcm93IGZp bHRlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1YjYiIGlzIG5vdCBwYXJ0IG9mIHRoZSByZXBsaWNh IGlkZW50aXR5IGZvciB0YWJsZSAicmZfdGJsX2FiY2Rfbm9wayIKK0hJTlQ6ICBVUERBVEUgYW5k IERFTEVURSBvbiB0aGlzIHRhYmxlIHdpbGwgZmFpbCB1bnRpbCB0aGUgcmVwbGljYSBpZGVudGl0 eSBjb3ZlcnMgdGhlIGZpbHRlcmVkIGNvbHVtbnMsIG9yIHRoZSBwdWJsaWNhdGlvbiBpcyBjaGFu Z2VkIHRvIG5vdCBwdWJsaXNoIHRob3NlIG9wZXJhdGlvbnMuCistLSBETUwtdGltZSBlcnJvciBz dGlsbCBwcmVzZW50CitVUERBVEUgcmZfdGJsX2FiY2Rfbm9wayBTRVQgYSA9IDE7CitFUlJPUjog IGNhbm5vdCB1cGRhdGUgdGFibGUgInJmX3RibF9hYmNkX25vcGsiCitERVRBSUw6ICBDb2x1bW4g dXNlZCBpbiB0aGUgcHVibGljYXRpb24gV0hFUkUgZXhwcmVzc2lvbiBpcyBub3QgcGFydCBvZiB0 aGUgcmVwbGljYSBpZGVudGl0eS4KIERST1AgUFVCTElDQVRJT04gdGVzdHB1YjY7CiBEUk9QIFRB QkxFIHJmX3RibF9hYmNkX3BrOwogRFJPUCBUQUJMRSByZl90YmxfYWJjZF9ub3BrOwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvcHVibGljYXRpb24uc3FsCmluZGV4IDZiYWZhZDI3NTcxLi5iMzU0MzBkYTYxMiAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbApAQCAtNTQ4LDYgKzU0OCw0MSBAQCBB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wayBX SEVSRSAoYiA+IDk5KTsKIC0tIGZhaWwgLSAiYiIgaXMgbm90IGluIFJFUExJQ0EgSURFTlRJVFkg SU5ERVgKIFVQREFURSByZl90YmxfYWJjZF9wYXJ0X3BrIFNFVCBhID0gMTsKIAorLS0gVGVzdHMg Zm9yIERETC10aW1lIFdBUk5JTkcgd2hlbiByb3cgZmlsdGVyIGNvbHVtbnMgYXJlIG5vdCBpbiBy ZXBsaWNhCistLSBpZGVudGl0eS4gIFRoZSBETUwtdGltZSBFUlJPUiBzdGlsbCBmaXJlcyBhcyBh IHNhZmV0eSBuZXQuCisKKy0tIFJlc2V0IHRhYmxlcyB0byBrbm93biBzdGF0ZQorQUxURVIgVEFC TEUgcmZfdGJsX2FiY2RfcGsgUkVQTElDQSBJREVOVElUWSBERUZBVUxUOworQUxURVIgVEFCTEUg cmZfdGJsX2FiY2Rfbm9wayBSRVBMSUNBIElERU5USVRZIEZVTEw7CisKKy0tIERETC10aW1lIHdh cm5pbmc6ICJjIiBpcyBub3QgcGFydCBvZiBQSyAoREVGQVVMVCByZXBsaWNhIGlkZW50aXR5KQor QUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BrIFdIRVJF IChjID4gOTkpOworLS0gRE1MLXRpbWUgZXJyb3Igc3RpbGwgcHJlc2VudAorVVBEQVRFIHJmX3Ri bF9hYmNkX3BrIFNFVCBhID0gMTsKKworLS0gTm8gd2FybmluZzogcHVibGljYXRpb24gb25seSBw dWJsaXNoZXMgSU5TRVJUCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgKHB1Ymxpc2gg PSAnaW5zZXJ0Jyk7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJs X2FiY2RfcGsgV0hFUkUgKGMgPiA5OSk7CisKKy0tIERETC10aW1lIHdhcm5pbmcgd2hlbiB3aWRl bmluZyBwdWJsaXNoIHNldCB0byBpbmNsdWRlIFVQREFURS9ERUxFVEUKKy0tIHdoaWxlIGFuIGV4 aXN0aW5nIHJvdyBmaWx0ZXIgcmVmZXJlbmNlcyBhIG5vbi1pZGVudGl0eSBjb2x1bW4uCitBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRl bGV0ZScpOworLS0gRE1MLXRpbWUgZXJyb3Igc3RpbGwgcHJlc2VudCBhZnRlciB3aWRlbmluZwor VVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKKworLS0gTm8gd2FybmluZzogUkVQTElD QSBJREVOVElUWSBGVUxMIGNvdmVycyBhbGwgY29sdW1ucworQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX25vcGsgV0hFUkUgKGEgPiA5OSk7CisKKy0tIE5v IHdhcm5pbmc6IHdpZGVuaW5nIHB1Ymxpc2ggc2V0IHdoZW4gUkVQTElDQSBJREVOVElUWSBGVUxM CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CitB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUs IGRlbGV0ZScpOworCistLSBEREwtdGltZSB3YXJuaW5nIGZyb20gQUxURVIgVEFCTEUgUkVQTElD QSBJREVOVElUWTogbmFycm93aW5nIGlkZW50aXR5CistLSB3aGlsZSBhIHB1YmxpY2F0aW9uIGZp bHRlciByZWZlcmVuY2VzIGEgbm93LXVuY292ZXJlZCBjb2x1bW4uCitBTFRFUiBUQUJMRSByZl90 YmxfYWJjZF9ub3BrIFJFUExJQ0EgSURFTlRJVFkgTk9USElORzsKKy0tIERNTC10aW1lIGVycm9y IHN0aWxsIHByZXNlbnQKK1VQREFURSByZl90YmxfYWJjZF9ub3BrIFNFVCBhID0gMTsKKwogRFJP UCBQVUJMSUNBVElPTiB0ZXN0cHViNjsKIERST1AgVEFCTEUgcmZfdGJsX2FiY2RfcGs7CiBEUk9Q IFRBQkxFIHJmX3RibF9hYmNkX25vcGs7Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --000000000000926f80064e6e699d--