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 1w7cmC-005XPj-0P for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Mar 2026 17:21:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w7cm8-00BXKB-2z for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Mar 2026 17:21:13 +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 1w7cm8-00BXK2-1e for pgsql-hackers@lists.postgresql.org; Tue, 31 Mar 2026 17:21:13 +0000 Received: from mail-oo1-xc2e.google.com ([2607:f8b0:4864:20::c2e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w7cm5-00000002CyR-3n0A for pgsql-hackers@postgresql.org; Tue, 31 Mar 2026 17:21:12 +0000 Received: by mail-oo1-xc2e.google.com with SMTP id 006d021491bc7-67bb19ac35aso4149877eaf.1 for ; Tue, 31 Mar 2026 10:21:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774977668; cv=none; d=google.com; s=arc-20240605; b=hW4Abra9JHXQ7mV8KJ0fQb+Mvst0cqNUoLpSFb+JX/ePERgS7V/76BA9Rrflj1/ouu K5+YDzme4GG9lQQy/2wHSRYGmc1X88N2eS/IK7lPiQWADajlG/c7E+3bRu3Oj4jOJYEm SU6NAvxf++iy9xVcwbSRaLz4XUpjNwbCDbeaV407+MpiOdJhQKroY1IA77lJqBC+xhTf hJBf9vDAaL4NiVLZRttnsShZisCx0sKNP8nYcZpv4vs+NKDhmm/OSiUieshlAlvU8sLt NyLgFVSIFlzlc/rET7UqxywoONeUhCWRGGk/6ucDbDLCTOhE2f3GoPLSHnV0Z2SFwHzF 8phw== 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=JExxoDvdkzFjYYnRo1V+w8iYBQRpv/z4cTXzmgpoN8Y=; fh=ZYGFJwzlCoBpAWOX8eDXVXiYcUoq88ZWf+yyaHsZse8=; b=Ie5ugYRkLldgFEUmBuWCbuDc/0xardwlJAS9+iwwFjq7toc4XBNhc1qB8KNdOgUYwS 8av/GnhsFrhPCTInJ8mWaxwK8VXA4ySqbaJBEw95O3wZg27bL3Yv67ZJXXbbkn5yvRFX vqpPjEKGD+hM1LnjKM2PdJVFh7ki81+YdpQGIPYDiIEEzdH3QwBED7SBwOa2zcgiCutH +7UAzYvnLnns+qDgzfhIbrDhyPGVWCqQBkiRMR2cTJaDobZ2vj8cr/Qg5TSdq792AykF WIMGBru9PlSW7MgKrxz1nptfFVlJnE2y0AhHYJuaSDK4FnLbeobxjWQXUPa2Rb/8fXj7 WPhw==; 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=1774977668; x=1775582468; darn=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=JExxoDvdkzFjYYnRo1V+w8iYBQRpv/z4cTXzmgpoN8Y=; b=qXYi2uZVhzqmGNDaHw5So066hZZ5VEfyd4botYrsUlsGL+RFFd+UOigeaTqWkjmcAW GyLjBjJXa9gA/HJ/R1d8NLg844ENp3trplGFLSmZNdvtNkYOGmGpjBOSWwEz/MuCV4b4 XOTQphdeSLnUS7879rFZCzfIF+taPtuCl7souRwDCAKZkdysLcuU2FrzB16yh/G0h1oY 6h73kITDHLk8o20Jq5FA9YrlcWVrmdVqCnq1JfIZLnob565niR+G4GXa0dnkp6wuHGjm YcgsqFp5S+sqPpxZLgaGgcYfXtN56KvJTaNLNzDqtjS6UESOFFINf9M+q55W0WzZNY89 9bkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774977668; x=1775582468; 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=JExxoDvdkzFjYYnRo1V+w8iYBQRpv/z4cTXzmgpoN8Y=; b=C6pQzmPcSyMyV/oOPBtkQj+VGtzbyqWzeFtXM36qWv2xQtSjbSGP/rzqqp9jegmTJZ pxW3yspOeRVZsD9Ee7OM8rE/ZUHz2WTj7+to9aQvTm085OgWWdxkFCJJ1+KuBpt9adlz biDo1JweaGopO2ERfnAcb+wubVGdBkFFT8iUG0pIajWfHlT+J8GtciJwIftyM2zEICzM nwh8SzHSU/+isz3TvDLzkOtpo72kK8vj8PDR3CMLNZi5eK0qMtbeaKf4T6kp8z1K3icN QR6rLN21EAoZVuwRGRIOr2mfHauSsD8MLacZ2ECpmZ235UPNwduh3URcWZa/7xUji/zE vspw== X-Forwarded-Encrypted: i=1; AJvYcCUG0C5ze++YZErClYjeAFlw0aslMwFHqzS1c1nSsarcvL2qSQHfi3PIRfW/Tr9shB+S8GF1OjcSx+eN0EqI@postgresql.org X-Gm-Message-State: AOJu0YyaKE8Xxf6efabcyJ/F/yy4mWFlXgMW3Yjh59yBxT0hK+FSJmfE RRVM2tYTCb5ZxJk2qo217DxEbK8qc17ZLQ2BlrCVbft+JfqjLUrFu7XZqa5odVOcyuKpvibe5jt +YVRTfMeT6luLUuFwwT7Ijy5ChpsAPsU= X-Gm-Gg: ATEYQzxrK7sq4bFadDnD49VgRPkXedMYtRrkqTVF15MIrhlnbEGVLAurdYt09DqR8RZ WxzPSWHkDX7FbpZDEnxzg0wNM0/9tP7RDWynpqf3zR5R7M5odDII5N+FC4M/f8p1eeswIpaigGb m53s56tKLz0CM254ZxdChF9o8CtNvO2DqvM+ZekpB4pdf2R+yzpmjjKo35CmNIFLo40bshqO2Z8 Th3fs4c461czrq96nf3SWp4t5Eh4rEhQ2QPNHg54vGTiCsvpvs9OjcIou5BJJNAIXZ+cV9g8UdK I0kD0+6p2POaQKotbLwg5AL9ipTPRd6NgjZWIOYz X-Received: by 2002:a05:6820:4df4:b0:67b:decf:eef8 with SMTP id 006d021491bc7-67fabcf43afmr30044eaf.49.1774977668286; Tue, 31 Mar 2026 10:21:08 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Bharath Rupireddy Date: Tue, 31 Mar 2026 10:20:56 -0700 X-Gm-Features: AQROBzD4edWoKFqtJC68jdHF-wR9z3iGQGInmpjyYlmT0uEZ7XOYG73e1za2lgU Message-ID: Subject: Re: Introduce XID age based replication slot invalidation To: Masahiko Sawada Cc: Srinath Reddy Sadipiralla , SATYANARAYANA NARLAPURAM , "Hayato Kuroda (Fujitsu)" , John H , PostgreSQL-development Content-Type: multipart/mixed; boundary="00000000000067279f064e5531f4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000067279f064e5531f4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Mon, Mar 30, 2026 at 5:13=E2=80=AFPM Masahiko Sawada wrote: > > I've reviewed the v6 patch. Here are some comments. Thank you for reviewing the patch. > bool > vacuum_get_cutoffs(Relation rel, const VacuumParams params, > - struct VacuumCutoffs *cutoffs) > + struct VacuumCutoffs *cutoffs, > + TransactionId *slot_xmin, > + TransactionId *slot_catalog_xmin) > > How about storing both slot_xmin and catalog_xmin into VacuumCutoffs? Done. > --- > - if (InvalidateObsoleteReplicationSlots(RS_INVAL_WAL_REMOVED | > RS_INVAL_IDLE_TIMEOUT, > + possibleInvalidationCauses =3D RS_INVAL_WAL_REMOVED | RS_INVAL_IDLE_T= IMEOUT | > + RS_INVAL_XID_AGE; > + > + if (InvalidateObsoleteReplicationSlots(possibleInvalidationCauses, > _logSegNo, InvalidOid, > + InvalidTransactionId, > + max_slot_xid_age > 0 ? > + ReadNextTransactionId() : > InvalidTransactionId)) > > It's odd to me that we specify RS_INVAL_XID_AGE while passing > InvalidTransactionId. I think we can specify RS_INVAL_XID_AGE along > with a valid recentXId only when we'd like to check the slots based on > their XIDs. Done. > --- > + /* Check if the slot needs to be invalidated due to max_slot_xid_age = GUC */ > + if ((possible_causes & RS_INVAL_XID_AGE) && CanInvalidateXidAgedSlot(= s)) > + { > + TransactionId xidLimit; > + > + Assert(TransactionIdIsValid(recentXid)); > + > + xidLimit =3D TransactionIdRetreatedBy(recentXid, max_slot_xid_age= ); > + > > I think we can avoid calculating xidLimit for every slot by > calculating it in InvalidatePossiblyObsoleteSlot() and passing it to > DetermineSlotInvalidationCause(). Done. > --- > */ > TransactionId > GetOldestNonRemovableTransactionId(Relation rel) > +{ > + return GetOldestNonRemovableTransactionIdExt(rel, NULL, NULL); > +} > + > +/* > + * Same as GetOldestNonRemovableTransactionId(), but also returns the > + * replication slot xmin and catalog_xmin from the same ComputeXidHorizo= ns() > + * call. This avoids a separate ProcArrayLock acquisition when the call= er > + * needs both values. > + */ > +TransactionId > +GetOldestNonRemovableTransactionIdExt(Relation rel, > + TransactionId *slot_xmin, > + TransactionId *slot_catalog_xmin) > { > > I understand that the primary reason why the patch introduces another > variant of GetOldestNonRemovableTransactionId() is to avoid extra > ProcArrayLock acquision to get replication slot xmin and catalog_xmin. > While it's not very elegant, I find that it would not be bad because > otherwise autovacuum takes extra ProcArrayLock (in shared mode) for > every table to vacuum. The ProcArrayLock is already known > high-contented lock it would be better to avoid taking it once more. > If others think differently, we can just call > ProcArrayGetReplicationSlotXmin() separately and compare them to the > limit of XID-age based slot invalidation. I understand the concerns around the ProcArrayLock and I think a new function to return the computed slot's xmin and catalog_xmin is good. > Having said that, I personally don't want to add new instructions to > the existing GetOldestNonRemovableTransactionId(). I guess we might > want to make both the existing function and new function call a common > (inline) function that takes ComputeXidHorizonsResult and returns > appropriate transaction id based on the given relation . Done. > --- > + # Do some work to advance xids > + $node->safe_psql( > + 'postgres', qq[ > + do \$\$ > + begin > + for i in 1..$nxids loop > + -- use an exception block so that each iteration eats an XID > + begin > + insert into $table_name values (i); > + exception > + when division_by_zero then null; > + end; > + end loop; > + end\$\$; > + ]); > > I think it's fater to use pg_current_xact_id() instead. Done. I pulled this from an existing test case in 001_stream_rep.pl. Used the pg_current_xact_id approach. Testing times stay the same i.e. 9 wallclock secs. > --- > + else > + { > + $node->safe_psql('postgres', "VACUUM"); > + } > > We don't need to vacuum all tables here. Fixed. > --- > +# Configure primary with XID age settings. Set autovacuum_naptime high s= o > +# that the checkpointer (not vacuum) triggers the invalidation. > +my $max_slot_xid_age =3D 500; > +$primary5->append_conf( > + 'postgresql.conf', qq{ > +max_slot_xid_age =3D $max_slot_xid_age > +autovacuum_naptime =3D '1h' > +}); > > I think that it's better to disable autovacuum than setting a large numbe= r. Done. > --- > +# Testcase end: Invalidate streaming standby's slot due to max_slot_xid_= age > +# GUC (via checkpoint). > > I think that we can say "physical slot" instead of standby's slot to > avoid confusion as I thought standby's slot is a slot created on the > standby at the first glance. Fixed. > --- > Do we have tests for invalidating slots on the standbys? Added a test case for this. Please find the attached v7 patches for further review. Thank you! -- Bharath Rupireddy Amazon Web Services: https://aws.amazon.com --00000000000067279f064e5531f4 Content-Type: application/x-patch; name="v7-0001-Add-XID-age-based-replication-slot-invalidation.patch" Content-Disposition: attachment; filename="v7-0001-Add-XID-age-based-replication-slot-invalidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnetelae0 RnJvbSBhZjY2Zjc4YTEyZDE1ZWQyNjM1NmVhZWFkNzVkZmFjM2NjZDU2ODE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMzEgTWFyIDIwMjYgMTY6MDk6MTUgKzAw MDAKU3ViamVjdDogW1BBVENIIHY3IDEvMl0gQWRkIFhJRCBhZ2UgYmFzZWQgcmVwbGljYXRpb24g c2xvdCBpbnZhbGlkYXRpb24KCkludHJvZHVjZSBtYXhfc2xvdF94aWRfYWdlLCBhIEdVQyB0aGF0 IGludmFsaWRhdGVzIHJlcGxpY2F0aW9uCnNsb3RzIHdob3NlIHhtaW4gb3IgY2F0YWxvZ194bWlu IGV4Y2VlZHMgdGhlIHNwZWNpZmllZCBhZ2UuCkRpc2FibGVkIGJ5IGRlZmF1bHQuCgpJZGxlIG9y IGZvcmdvdHRlbiByZXBsaWNhdGlvbiBzbG90cyBjYW4gaG9sZCBiYWNrIHZhY3V1bSwgbGVhZGlu Zwp0byBibG9hdCBhbmQgZXZlbnR1YWxseSBYSUQgd3JhcGFyb3VuZC4gSW4gdGhlIHdvcnN0IGNh c2UgdGhpcwpyZXF1aXJlcyBkcm9wcGluZyB0aGUgc2xvdCBhbmQgc2luZ2xlLXVzZXIgbW9kZSB2 YWN1dW1pbmcuIFRoaXMKc2V0dGluZyBhdm9pZHMgdGhhdCBieSBwcm9hY3RpdmVseSBpbnZhbGlk YXRpbmcgc2xvdHMgdGhhdCBoYXZlCmZhbGxlbiB0b28gZmFyIGJlaGluZC4KCkludmFsaWRhdGlv biBjaGVja3MgYXJlIHBlcmZvcm1lZCBvbmNlIHBlciByZWxhdGlvbiBkdXJpbmcgdmFjdXVtCihi b3RoIHZhY3V1bSBjb21tYW5kIGFuZCBhdXRvdmFjdXVtKSwgYW5kIGFsc28gYnkgdGhlIGNoZWNr cG9pbnRlcgpkdXJpbmcgY2hlY2twb2ludHMgYW5kIHJlc3RhcnRwb2ludHMuCi0tLQogZG9jL3Ny Yy9zZ21sL2NvbmZpZy5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwgIDQwICsrKysKIGRvYy9z cmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCAgICAgICAgICAgICAgICB8ICAgOCArCiBzcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgICAgICAgICAgfCAgMTUgKysKIHNyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyAgICAgICAgICAgICB8ICAzNCArKystCiBzcmMvYmFj a2VuZC9jb21tYW5kcy92YWN1dW0uYyAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYyAgICAgICAgICAgICAgICB8IDEzMCArKysrKysrKysrKyst CiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYyAgICAgICAgICAgfCAgNjAgKysr Ky0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMgICAgICAgICAgICAgfCAgIDMg Ky0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0ICAgICB8ICAgOCAr CiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDIgKwog c3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmggICAgICAgICAgICAgICAgIHwgICA5ICsKIHNy Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaCAgICAgICAgICAgICAgICB8ICAxMCArLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaCAgICAgICAgICAgICAgIHwgICAzICsKIHNyYy90 ZXN0L3JlY292ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsICAgICB8IDE3OCArKysrKysrKysr KysrKysrKysKIDE0IGZpbGVzIGNoYW5nZWQsIDQ3OCBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvY29uZmlnLnNnbWwKaW5kZXggMjI5ZjQxMzUzZWIuLjQ2YWFjNTljYjIwIDEwMDY0NAotLS0g YS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21s CkBAIC00NzY0LDYgKzQ3NjQsNDYgQEAgcmVzdG9yZV9jb21tYW5kID0gJ2NvcHkgIkM6XFxzZXJ2 ZXJcXGFyY2hpdmVkaXJcXCVmIiAiJXAiJyAgIyBXaW5kb3dzCiAgICAgICA8L2xpc3RpdGVtPgog ICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtbWF4LXNs b3QteGlkLWFnZSIgeHJlZmxhYmVsPSJtYXhfc2xvdF94aWRfYWdlIj4KKyAgICAgIDx0ZXJtPjx2 YXJuYW1lPm1heF9zbG90X3hpZF9hZ2U8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikK KyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+bWF4X3Nsb3RfeGlk X2FnZTwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8 L2luZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgSW52YWxpZGF0ZSByZXBsaWNhdGlvbiBzbG90cyB3aG9zZSA8bGl0ZXJhbD54 bWluPC9saXRlcmFsPiAodGhlIG9sZGVzdAorICAgICAgICB0cmFuc2FjdGlvbiB0aGF0IHRoaXMg c2xvdCBuZWVkcyB0aGUgZGF0YWJhc2UgdG8gcmV0YWluKSBvcgorICAgICAgICA8bGl0ZXJhbD5j YXRhbG9nX3htaW48L2xpdGVyYWw+ICh0aGUgb2xkZXN0IHRyYW5zYWN0aW9uIGFmZmVjdGluZyB0 aGUKKyAgICAgICAgc3lzdGVtIGNhdGFsb2dzIHRoYXQgdGhpcyBzbG90IG5lZWRzIHRoZSBkYXRh YmFzZSB0byByZXRhaW4pIGhhcyByZWFjaGVkCisgICAgICAgIHRoZSBhZ2Ugc3BlY2lmaWVkIGJ5 IHRoaXMgc2V0dGluZy4gVGhpcyBpbnZhbGlkYXRpb24gY2hlY2sgaGFwcGVucworICAgICAgICBk dXJpbmcgdmFjdXVtIChib3RoIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gY29tbWFuZCBhbmQg YXV0b3ZhY3V1bSkKKyAgICAgICAgYW5kIGR1cmluZyBjaGVja3BvaW50cy4KKyAgICAgICAgQSB2 YWx1ZSBvZiB6ZXJvICh3aGljaCBpcyBkZWZhdWx0KSBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuIFVz ZXJzIGNhbiBzZXQKKyAgICAgICAgdGhpcyB2YWx1ZSBhbnl3aGVyZSBmcm9tIHplcm8gdG8gdHdv IGJpbGxpb24uIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlCisgICAgICAgIHNldCBpbiB0aGUg PGZpbGVuYW1lPnBvc3RncmVzcWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3Igb24gdGhlIHNlcnZl cgorICAgICAgICBjb21tYW5kIGxpbmUuCisgICAgICAgPC9wYXJhPgorCisgICAgICAgPHBhcmE+ CisgICAgICAgIElkbGUgb3IgZm9yZ290dGVuIHJlcGxpY2F0aW9uIHNsb3RzIGNhbiBob2xkIGJh Y2sgdmFjdXVtLCBsZWFkaW5nIHRvCisgICAgICAgIGJsb2F0IGFuZCBldmVudHVhbGx5IHRyYW5z YWN0aW9uIElEIHdyYXBhcm91bmQuIFRoaXMgc2V0dGluZyBhdm9pZHMKKyAgICAgICAgdGhhdCBi eSBpbnZhbGlkYXRpbmcgc2xvdHMgdGhhdCBoYXZlIGZhbGxlbiB0b28gZmFyIGJlaGluZC4KKyAg ICAgICAgU2VlIDx4cmVmIGxpbmtlbmQ9InJvdXRpbmUtdmFjdXVtaW5nIi8+IGZvciBtb3JlIGRl dGFpbHMuCisgICAgICAgPC9wYXJhPgorCisgICAgICAgPHBhcmE+CisgICAgICAgIE5vdGUgdGhh dCB0aGlzIGludmFsaWRhdGlvbiBtZWNoYW5pc20gaXMgbm90IGFwcGxpY2FibGUgZm9yIHNsb3Rz CisgICAgICAgIG9uIHRoZSBzdGFuZGJ5IHNlcnZlciB0aGF0IGFyZSBiZWluZyBzeW5jZWQgZnJv bSB0aGUgcHJpbWFyeSBzZXJ2ZXIKKyAgICAgICAgKGkuZS4sIHN0YW5kYnkgc2xvdHMgaGF2aW5n CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9InZpZXctcGctcmVwbGljYXRpb24tc2xvdHMiPnBnX3Jl cGxpY2F0aW9uX3Nsb3RzPC9saW5rPi48c3RydWN0ZmllbGQ+c3luY2VkPC9zdHJ1Y3RmaWVsZD4K KyAgICAgICAgdmFsdWUgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4pLiBTeW5jZWQgc2xvdHMgYXJl IGFsd2F5cyBjb25zaWRlcmVkIHRvCisgICAgICAgIGJlIGluYWN0aXZlIGJlY2F1c2UgdGhleSBk b24ndCBwZXJmb3JtIGxvZ2ljYWwgZGVjb2RpbmcgdG8gcHJvZHVjZQorICAgICAgICBjaGFuZ2Vz LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5 PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy13YWwtc2VuZGVyLXRpbWVvdXQiIHhyZWZs YWJlbD0id2FsX3NlbmRlcl90aW1lb3V0Ij4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPndhbF9zZW5k ZXJfdGltZW91dDwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQogICAgICAgPGluZGV4 dGVybT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCBiL2RvYy9z cmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbAppbmRleCA5ZWUxYTJiZmM2YS4uMWE1MDdiNDMwZjkg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKQEAgLTMxMDIsNiArMzEwMiwxNCBAQCBTRUxFQ1QgKiBG Uk9NIHBnX2xvY2tzIHBsIExFRlQgSk9JTiBwZ19wcmVwYXJlZF94YWN0cyBwcHgKICAgICAgICAg ICA8eHJlZiBsaW5rZW5kPSJndWMtaWRsZS1yZXBsaWNhdGlvbi1zbG90LXRpbWVvdXQiLz4gZHVy YXRpb24uCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxs aXN0aXRlbT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxsaXRlcmFsPnhpZF9hZ2VkPC9s aXRlcmFsPiBtZWFucyB0aGF0IHRoZSBzbG90J3MKKyAgICAgICAgICA8bGl0ZXJhbD54bWluPC9s aXRlcmFsPiBvciA8bGl0ZXJhbD5jYXRhbG9nX3htaW48L2xpdGVyYWw+CisgICAgICAgICAgaGFz IHJlYWNoZWQgdGhlIGFnZSBzcGVjaWZpZWQgYnkKKyAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJn dWMtbWF4LXNsb3QteGlkLWFnZSIvPiBwYXJhbWV0ZXIuCisgICAgICAgICA8L3BhcmE+CisgICAg ICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICA8L3BhcmE+PC9l bnRyeT4KICAgICAgPC9yb3c+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92 YWN1dW1sYXp5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKaW5kZXgg MjQwMDFiMjczODcuLjk4ODIyODIzZDJlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC92YWN1dW1sYXp5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6 eS5jCkBAIC0xNDcsNiArMTQ3LDcgQEAKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJw b3J0YWJpbGl0eS9pbnN0cl90aW1lLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVt LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVm bWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mcmVlc3BhY2UuaCIKICNpbmNsdWRlICJzdG9yYWdl L2xhdGNoLmgiCkBAIC03OTksNiArODAwLDIwIEBAIGhlYXBfdmFjdXVtX3JlbChSZWxhdGlvbiBy ZWwsIGNvbnN0IFZhY3V1bVBhcmFtcyBwYXJhbXMsCiAJICogdG8gaW5jcmVhc2UgdGhlIG51bWJl ciBvZiBkZWFkIHR1cGxlcyBpdCBjYW4gcHJ1bmUgYXdheS4pCiAJICovCiAJdmFjcmVsLT5hZ2dy ZXNzaXZlID0gdmFjdXVtX2dldF9jdXRvZmZzKHJlbCwgcGFyYW1zLCAmdmFjcmVsLT5jdXRvZmZz KTsKKworCS8qCisJICogVHJ5IHRvIGludmFsaWRhdGUgWElELWFnZWQgcmVwbGljYXRpb24gc2xv dHMuIFVzZSB0aGUgc2xvdCB4bWluIHZhbHVlcworCSAqIG9idGFpbmVkIGZyb20gdGhlIHNhbWUg aG9yaXpvbnMgY29tcHV0YXRpb24gdGhhdCBwcm9kdWNlZCBPbGRlc3RYbWluLAorCSAqIGF2b2lk aW5nIGFuIGV4dHJhIFByb2NBcnJheUxvY2sgYWNxdWlzaXRpb24uCisJICovCisJaWYgKE1heWJl SW52YWxpZGF0ZVhJREFnZWRTbG90cyh2YWNyZWwtPmN1dG9mZnMuc2xvdF94bWluLAorCQkJCQkJ CQkJdmFjcmVsLT5jdXRvZmZzLnNsb3RfY2F0YWxvZ194bWluKSkKKwl7CisJCS8qIFJlY29tcHV0 ZSBjdXRvZmZzIGFmdGVyIHNsb3QgaW52YWxpZGF0aW9uICovCisJCXZhY3JlbC0+YWdncmVzc2l2 ZSA9IHZhY3V1bV9nZXRfY3V0b2ZmcyhyZWwsIHBhcmFtcywKKwkJCQkJCQkJCQkJCSZ2YWNyZWwt PmN1dG9mZnMpOworCX0KKwogCXZhY3JlbC0+cmVsX3BhZ2VzID0gb3JpZ19yZWxfcGFnZXMgPSBS ZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKHJlbCk7CiAJdmFjcmVsLT52aXN0ZXN0ID0gR2xvYmFs VmlzVGVzdEZvcihyZWwpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKaW5kZXggMmMxYzZm ODhiNzQuLjcwYzFkNWM1NTU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC03MDE5 LDYgKzcwMTksOCBAQCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFncykKIAlWaXJ0dWFsVHJhbnNh Y3Rpb25JZCAqdnhpZHM7CiAJaW50CQkJbnZ4aWRzOwogCWludAkJCW9sZFhMb2dBbGxvd2VkID0g MDsKKwl1aW50MzIJCXBvc3NpYmxlSW52YWxpZGF0aW9uQ2F1c2VzOworCVRyYW5zYWN0aW9uSWQg cmVjZW50WGlkOwogCiAJLyoKIAkgKiBBbiBlbmQtb2YtcmVjb3ZlcnkgY2hlY2twb2ludCBpcyBy ZWFsbHkgYSBzaHV0ZG93biBjaGVja3BvaW50LCBqdXN0CkBAIC03NDQ3LDkgKzc0NDksMjAgQEAg Q3JlYXRlQ2hlY2tQb2ludChpbnQgZmxhZ3MpCiAJICovCiAJWExCeXRlVG9TZWcoUmVkb1JlY1B0 ciwgX2xvZ1NlZ05vLCB3YWxfc2VnbWVudF9zaXplKTsKIAlLZWVwTG9nU2VnKHJlY3B0ciwgJl9s b2dTZWdObyk7Ci0JaWYgKEludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoUlNfSU5W QUxfV0FMX1JFTU9WRUQgfCBSU19JTlZBTF9JRExFX1RJTUVPVVQsCisKKwlwb3NzaWJsZUludmFs aWRhdGlvbkNhdXNlcyA9IFJTX0lOVkFMX1dBTF9SRU1PVkVEIHwgUlNfSU5WQUxfSURMRV9USU1F T1VUOworCXJlY2VudFhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCisJaWYgKG1heF9zbG90 X3hpZF9hZ2UgPiAwKQorCXsKKwkJcG9zc2libGVJbnZhbGlkYXRpb25DYXVzZXMgfD0gUlNfSU5W QUxfWElEX0FHRTsKKwkJcmVjZW50WGlkID0gUmVhZE5leHRUcmFuc2FjdGlvbklkKCk7CisJfQor CisJaWYgKEludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMocG9zc2libGVJbnZhbGlk YXRpb25DYXVzZXMsCiAJCQkJCQkJCQkJICAgX2xvZ1NlZ05vLCBJbnZhbGlkT2lkLAotCQkJCQkJ CQkJCSAgIEludmFsaWRUcmFuc2FjdGlvbklkKSkKKwkJCQkJCQkJCQkgICBJbnZhbGlkVHJhbnNh Y3Rpb25JZCwKKwkJCQkJCQkJCQkgICByZWNlbnRYaWQpKQogCXsKIAkJLyoKIAkJICogU29tZSBz bG90cyBoYXZlIGJlZW4gaW52YWxpZGF0ZWQ7IHJlY2FsY3VsYXRlIHRoZSBvbGQtc2VnbWVudApA QCAtNzczMCw2ICs3NzQzLDggQEAgQ3JlYXRlUmVzdGFydFBvaW50KGludCBmbGFncykKIAlYTG9n UmVjUHRyCWVuZHB0cjsKIAlYTG9nU2VnTm8JX2xvZ1NlZ05vOwogCVRpbWVzdGFtcFR6IHh0aW1l OworCXVpbnQzMgkJcG9zc2libGVJbnZhbGlkYXRpb25DYXVzZXM7CisJVHJhbnNhY3Rpb25JZCBy ZWNlbnRYaWQ7CiAKIAkvKiBDb25jdXJyZW50IGNoZWNrcG9pbnQvcmVzdGFydHBvaW50IGNhbm5v dCBoYXBwZW4gKi8KIAlBc3NlcnQoIUlzVW5kZXJQb3N0bWFzdGVyIHx8IE15QmFja2VuZFR5cGUg PT0gQl9DSEVDS1BPSU5URVIpOwpAQCAtNzkwNCw5ICs3OTE5LDE5IEBAIENyZWF0ZVJlc3RhcnRQ b2ludChpbnQgZmxhZ3MpCiAKIAlJTkpFQ1RJT05fUE9JTlQoInJlc3RhcnRwb2ludC1iZWZvcmUt c2xvdC1pbnZhbGlkYXRpb24iLCBOVUxMKTsKIAotCWlmIChJbnZhbGlkYXRlT2Jzb2xldGVSZXBs aWNhdGlvblNsb3RzKFJTX0lOVkFMX1dBTF9SRU1PVkVEIHwgUlNfSU5WQUxfSURMRV9USU1FT1VU LAorCXBvc3NpYmxlSW52YWxpZGF0aW9uQ2F1c2VzID0gUlNfSU5WQUxfV0FMX1JFTU9WRUQgfCBS U19JTlZBTF9JRExFX1RJTUVPVVQ7CisJcmVjZW50WGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7 CisKKwlpZiAobWF4X3Nsb3RfeGlkX2FnZSA+IDApCisJeworCQlwb3NzaWJsZUludmFsaWRhdGlv bkNhdXNlcyB8PSBSU19JTlZBTF9YSURfQUdFOworCQlyZWNlbnRYaWQgPSBSZWFkTmV4dFRyYW5z YWN0aW9uSWQoKTsKKwl9CisKKwlpZiAoSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25TbG90 cyhwb3NzaWJsZUludmFsaWRhdGlvbkNhdXNlcywKIAkJCQkJCQkJCQkgICBfbG9nU2VnTm8sIElu dmFsaWRPaWQsCi0JCQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQpKQorCQkJCQkJCQkJ CSAgIEludmFsaWRUcmFuc2FjdGlvbklkLAorCQkJCQkJCQkJCSAgIHJlY2VudFhpZCkpCiAJewog CQkvKgogCQkgKiBTb21lIHNsb3RzIGhhdmUgYmVlbiBpbnZhbGlkYXRlZDsgcmVjYWxjdWxhdGUg dGhlIG9sZC1zZWdtZW50CkBAIC04NzcwLDYgKzg3OTUsNyBAQCB4bG9nX3JlZG8oWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpCiAJCQkJICovCiAJCQkJSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRp b25TbG90cyhSU19JTlZBTF9XQUxfTEVWRUwsCiAJCQkJCQkJCQkJCQkgICAwLCBJbnZhbGlkT2lk LAorCQkJCQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQsCiAJCQkJCQkJCQkJCQkgICBJ bnZhbGlkVHJhbnNhY3Rpb25JZCk7CiAJCQl9CiAJCQllbHNlIGlmIChzeW5jX3JlcGxpY2F0aW9u X3Nsb3RzKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwppbmRleCA3NjZhNTE4YzdhMS4uZDc4YTA1YTQ5Nzgg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCkBAIC0xMTMzLDcgKzExMzMsOSBAQCB2YWN1dW1fZ2V0X2N1 dG9mZnMoUmVsYXRpb24gcmVsLCBjb25zdCBWYWN1dW1QYXJhbXMgcGFyYW1zLAogCSAqIHRoYXQg b25seSBvbmUgdmFjdXVtIHByb2Nlc3MgY2FuIGJlIHdvcmtpbmcgb24gYSBwYXJ0aWN1bGFyIHRh YmxlIGF0CiAJICogYW55IHRpbWUsIGFuZCB0aGF0IGVhY2ggdmFjdXVtIGlzIGFsd2F5cyBhbiBp bmRlcGVuZGVudCB0cmFuc2FjdGlvbi4KIAkgKi8KLQljdXRvZmZzLT5PbGRlc3RYbWluID0gR2V0 T2xkZXN0Tm9uUmVtb3ZhYmxlVHJhbnNhY3Rpb25JZChyZWwpOworCWN1dG9mZnMtPk9sZGVzdFht aW4gPSBHZXRPbGRlc3ROb25SZW1vdmFibGVUcmFuc2FjdGlvbklkRXh0KHJlbCwKKwkJCQkJCQkJ CQkJCQkJCQkmY3V0b2Zmcy0+c2xvdF94bWluLAorCQkJCQkJCQkJCQkJCQkJCSZjdXRvZmZzLT5z bG90X2NhdGFsb2dfeG1pbik7CiAKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzTm9ybWFsKGN1dG9m ZnMtPk9sZGVzdFhtaW4pKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v c2xvdC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jCmluZGV4IGE5MDkyZmMyMzgy Li4yMDcyOWQyZmI0MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYwpAQCAtMTE3LDYgKzExNyw3IEBA IHN0YXRpYyBjb25zdCBTbG90SW52YWxpZGF0aW9uQ2F1c2VNYXAgU2xvdEludmFsaWRhdGlvbkNh dXNlc1tdID0gewogCXtSU19JTlZBTF9IT1JJWk9OLCAicm93c19yZW1vdmVkIn0sCiAJe1JTX0lO VkFMX1dBTF9MRVZFTCwgIndhbF9sZXZlbF9pbnN1ZmZpY2llbnQifSwKIAl7UlNfSU5WQUxfSURM RV9USU1FT1VULCAiaWRsZV90aW1lb3V0In0sCisJe1JTX0lOVkFMX1hJRF9BR0UsICJ4aWRfYWdl ZCJ9LAogfTsKIAogLyoKQEAgLTE1OCw2ICsxNTksMTIgQEAgaW50CQkJbWF4X3JlcGxpY2F0aW9u X3Nsb3RzID0gMTA7IC8qIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXBsaWNhdGlvbgogICovCiBp bnQJCQlpZGxlX3JlcGxpY2F0aW9uX3Nsb3RfdGltZW91dF9zZWNzID0gMDsKIAorLyoKKyAqIElu dmFsaWRhdGUgcmVwbGljYXRpb24gc2xvdHMgdGhhdCBoYXZlIHhtaW4gb3IgY2F0YWxvZ194bWlu IG9sZGVyCisgKiB0aGFuIHRoZSBzcGVjaWZpZWQgYWdlOyAnMCcgZGlzYWJsZXMgaXQuCisgKi8K K2ludAkJCW1heF9zbG90X3hpZF9hZ2UgPSAwOworCiAvKgogICogVGhpcyBHVUMgbGlzdHMgc3Ry ZWFtaW5nIHJlcGxpY2F0aW9uIHN0YW5kYnkgc2VydmVyIHNsb3QgbmFtZXMgdGhhdAogICogbG9n aWNhbCBXQUwgc2VuZGVyIHByb2Nlc3NlcyB3aWxsIHdhaXQgZm9yLgpAQCAtMTc4MCw3ICsxNzg3 LDEwIEBAIFJlcG9ydFNsb3RJbnZhbGlkYXRpb24oUmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9u Q2F1c2UgY2F1c2UsCiAJCQkJCSAgIFhMb2dSZWNQdHIgcmVzdGFydF9sc24sCiAJCQkJCSAgIFhM b2dSZWNQdHIgb2xkZXN0TFNOLAogCQkJCQkgICBUcmFuc2FjdGlvbklkIHNuYXBzaG90Q29uZmxp Y3RIb3Jpem9uLAotCQkJCQkgICBsb25nIHNsb3RfaWRsZV9zZWNvbmRzKQorCQkJCQkgICBsb25n IHNsb3RfaWRsZV9zZWNvbmRzLAorCQkJCQkgICBUcmFuc2FjdGlvbklkIHhtaW4sCisJCQkJCSAg IFRyYW5zYWN0aW9uSWQgY2F0YWxvZ194bWluLAorCQkJCQkgICBUcmFuc2FjdGlvbklkIHJlY2Vu dFhpZCkKIHsKIAlTdHJpbmdJbmZvRGF0YSBlcnJfZGV0YWlsOwogCVN0cmluZ0luZm9EYXRhIGVy cl9oaW50OwpAQCAtMTgyNSw2ICsxODM1LDMwIEBAIFJlcG9ydFNsb3RJbnZhbGlkYXRpb24oUmVw bGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2UgY2F1c2UsCiAJCQkJCQkJCSAiaWRsZV9yZXBs aWNhdGlvbl9zbG90X3RpbWVvdXQiKTsKIAkJCQlicmVhazsKIAkJCX0KKworCQljYXNlIFJTX0lO VkFMX1hJRF9BR0U6CisJCQl7CisJCQkJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhtaW4p IHx8IFRyYW5zYWN0aW9uSWRJc1ZhbGlkKGNhdGFsb2dfeG1pbikpOworCisJCQkJaWYgKFRyYW5z YWN0aW9uSWRJc1ZhbGlkKHhtaW4pKQorCQkJCXsKKwkJCQkJLyogdHJhbnNsYXRvcjogJXMgaXMg YSBHVUMgdmFyaWFibGUgbmFtZSAqLworCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZlcnJfZGV0YWls LCBfKCJUaGUgc2xvdCdzIHhtaW4gJXUgaXMgJWQgdHJhbnNhY3Rpb25zIG9sZCwgd2hpY2ggZXhj ZWVkcyB0aGUgY29uZmlndXJlZCBcIiVzXCIgdmFsdWUgb2YgJWQuIiksCisJCQkJCQkJCQkgeG1p biwgKGludDMyKSAocmVjZW50WGlkIC0geG1pbiksICJtYXhfc2xvdF94aWRfYWdlIiwgbWF4X3Ns b3RfeGlkX2FnZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8qIHRyYW5zbGF0b3I6 ICVzIGlzIGEgR1VDIHZhcmlhYmxlIG5hbWUgKi8KKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmZXJy X2RldGFpbCwgXygiVGhlIHNsb3QncyBjYXRhbG9nX3htaW4gJXUgaXMgJWQgdHJhbnNhY3Rpb25z IG9sZCwgd2hpY2ggZXhjZWVkcyB0aGUgY29uZmlndXJlZCBcIiVzXCIgdmFsdWUgb2YgJWQuIiks CisJCQkJCQkJCQkgY2F0YWxvZ194bWluLCAoaW50MzIpIChyZWNlbnRYaWQgLSBjYXRhbG9nX3ht aW4pLCAibWF4X3Nsb3RfeGlkX2FnZSIsIG1heF9zbG90X3hpZF9hZ2UpOworCQkJCX0KKworCQkJ CS8qIHRyYW5zbGF0b3I6ICVzIGlzIGEgR1VDIHZhcmlhYmxlIG5hbWUgKi8KKwkJCQlhcHBlbmRT dHJpbmdJbmZvKCZlcnJfaGludCwgXygiWW91IG1pZ2h0IG5lZWQgdG8gaW5jcmVhc2UgXCIlc1wi LiIpLAorCQkJCQkJCQkgIm1heF9zbG90X3hpZF9hZ2UiKTsKKwkJCQlicmVhazsKKwkJCX0KKwog CQljYXNlIFJTX0lOVkFMX05PTkU6CiAJCQlwZ191bnJlYWNoYWJsZSgpOwogCX0KQEAgLTE4NjMs NiArMTg5NywyNSBAQCBDYW5JbnZhbGlkYXRlSWRsZVNsb3QoUmVwbGljYXRpb25TbG90ICpzKQog CQkJIShSZWNvdmVyeUluUHJvZ3Jlc3MoKSAmJiBzLT5kYXRhLnN5bmNlZCkpOwogfQogCisvKgor ICogQ2FuIHdlIGludmFsaWRhdGUgYW4gWElELWFnZWQgcmVwbGljYXRpb24gc2xvdD8KKyAqCisg KiBYSUQtYWdlZCBiYXNlZCBpbnZhbGlkYXRpb24gaXMgYWxsb3dlZCB0byB0aGUgZ2l2ZW4gc2xv dCB3aGVuOgorICoKKyAqIDEuIE1heCBYSUQtYWdlIGlzIHNldAorICogMi4gU2xvdCBoYXMgdmFs aWQgeG1pbiBvciBjYXRhbG9nX3htaW4KKyAqIDMuIFRoZSBzbG90IGlzIG5vdCBiZWluZyBzeW5j ZWQgZnJvbSB0aGUgcHJpbWFyeSB3aGlsZSB0aGUgc2VydmVyIGlzIGluCisgKgkgIHJlY292ZXJ5 LgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK0NhbkludmFsaWRhdGVYaWRBZ2VkU2xvdChSZXBs aWNhdGlvblNsb3QgKnMpCit7CisJcmV0dXJuIChtYXhfc2xvdF94aWRfYWdlICE9IDAgJiYKKwkJ CShUcmFuc2FjdGlvbklkSXNWYWxpZChzLT5kYXRhLnhtaW4pIHx8CisJCQkgVHJhbnNhY3Rpb25J ZElzVmFsaWQocy0+ZGF0YS5jYXRhbG9nX3htaW4pKSAmJgorCQkJIShSZWNvdmVyeUluUHJvZ3Jl c3MoKSAmJiBzLT5kYXRhLnN5bmNlZCkpOworfQorCiAvKgogICogRGV0ZXJtaW5lU2xvdEludmFs aWRhdGlvbkNhdXNlIC0gRGV0ZXJtaW5lIHRoZSBjYXVzZSBmb3Igd2hpY2ggYSBzbG90CiAgKiBi ZWNvbWVzIGludmFsaWQgYW1vbmcgdGhlIGdpdmVuIHBvc3NpYmxlIGNhdXNlcy4KQEAgLTE4NzQs NiArMTkyNyw3IEBAIHN0YXRpYyBSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZQogRGV0 ZXJtaW5lU2xvdEludmFsaWRhdGlvbkNhdXNlKHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsIFJlcGxp Y2F0aW9uU2xvdCAqcywKIAkJCQkJCQkgICBYTG9nUmVjUHRyIG9sZGVzdExTTiwgT2lkIGRib2lk LAogCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25mbGljdEhvcml6b24sCisJCQkJ CQkJICAgVHJhbnNhY3Rpb25JZCB4aWRMaW1pdCwKIAkJCQkJCQkgICBUaW1lc3RhbXBUeiAqaW5h Y3RpdmVfc2luY2UsIFRpbWVzdGFtcFR6IG5vdykKIHsKIAlBc3NlcnQocG9zc2libGVfY2F1c2Vz ICE9IFJTX0lOVkFMX05PTkUpOwpAQCAtMTk0NSw2ICsxOTk5LDE4IEBAIERldGVybWluZVNsb3RJ bnZhbGlkYXRpb25DYXVzZSh1aW50MzIgcG9zc2libGVfY2F1c2VzLCBSZXBsaWNhdGlvblNsb3Qg KnMsCiAJCX0KIAl9CiAKKwkvKiBDaGVjayBpZiB0aGUgc2xvdCBuZWVkcyB0byBiZSBpbnZhbGlk YXRlZCBkdWUgdG8gbWF4X3Nsb3RfeGlkX2FnZSBHVUMgKi8KKwlpZiAoKHBvc3NpYmxlX2NhdXNl cyAmIFJTX0lOVkFMX1hJRF9BR0UpICYmIENhbkludmFsaWRhdGVYaWRBZ2VkU2xvdChzKSkKKwl7 CisJCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWRMaW1pdCkpOworCisJCWlmICgoVHJh bnNhY3Rpb25JZElzVmFsaWQocy0+ZGF0YS54bWluKSAmJgorCQkJIFRyYW5zYWN0aW9uSWRQcmVj ZWRlcyhzLT5kYXRhLnhtaW4sIHhpZExpbWl0KSkgfHwKKwkJCShUcmFuc2FjdGlvbklkSXNWYWxp ZChzLT5kYXRhLmNhdGFsb2dfeG1pbikgJiYKKwkJCSBUcmFuc2FjdGlvbklkUHJlY2VkZXMocy0+ ZGF0YS5jYXRhbG9nX3htaW4sIHhpZExpbWl0KSkpCisJCQlyZXR1cm4gUlNfSU5WQUxfWElEX0FH RTsKKwl9CisKIAlyZXR1cm4gUlNfSU5WQUxfTk9ORTsKIH0KIApAQCAtMTk2NywxMiArMjAzMywx OSBAQCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxlX2NhdXNl cywKIAkJCQkJCQkgICBSZXBsaWNhdGlvblNsb3QgKnMsCiAJCQkJCQkJICAgWExvZ1JlY1B0ciBv bGRlc3RMU04sCiAJCQkJCQkJICAgT2lkIGRib2lkLCBUcmFuc2FjdGlvbklkIHNuYXBzaG90Q29u ZmxpY3RIb3Jpem9uLAorCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgcmVjZW50WGlkLAogCQkJCQkJ CSAgIGJvb2wgKnJlbGVhc2VkX2xvY2tfb3V0KQogewogCWludAkJCWxhc3Rfc2lnbmFsZWRfcGlk ID0gMDsKIAlib29sCQlyZWxlYXNlZF9sb2NrID0gZmFsc2U7CiAJYm9vbAkJaW52YWxpZGF0ZWQg PSBmYWxzZTsKIAlUaW1lc3RhbXBUeiBpbmFjdGl2ZV9zaW5jZSA9IDA7CisJVHJhbnNhY3Rpb25J ZCB4aWRMaW1pdCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCisJLyogQ29tcHV0ZSB0aGUgWElE IGxpbWl0IG9uY2UsIHRvIGF2b2lkIHJlZHVuZGFudCB3b3JrIHBlciBzbG90ICovCisJaWYgKChw b3NzaWJsZV9jYXVzZXMgJiBSU19JTlZBTF9YSURfQUdFKSAmJgorCQlUcmFuc2FjdGlvbklkSXNW YWxpZChyZWNlbnRYaWQpKQorCQl4aWRMaW1pdCA9IFRyYW5zYWN0aW9uSWRSZXRyZWF0ZWRCeShy ZWNlbnRYaWQsIG1heF9zbG90X3hpZF9hZ2UpOwogCiAJZm9yICg7OykKIAl7CkBAIC0yMDE5LDYg KzIwOTIsNyBAQCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxl X2NhdXNlcywKIAkJCQkJCQkJCQkJCQkJCQlzLCBvbGRlc3RMU04sCiAJCQkJCQkJCQkJCQkJCQkJ ZGJvaWQsCiAJCQkJCQkJCQkJCQkJCQkJc25hcHNob3RDb25mbGljdEhvcml6b24sCisJCQkJCQkJ CQkJCQkJCQkJeGlkTGltaXQsCiAJCQkJCQkJCQkJCQkJCQkJJmluYWN0aXZlX3NpbmNlLAogCQkJ CQkJCQkJCQkJCQkJCW5vdyk7CiAKQEAgLTIxMTIsNyArMjE4Niw4IEBAIEludmFsaWRhdGVQb3Nz aWJseU9ic29sZXRlU2xvdCh1aW50MzIgcG9zc2libGVfY2F1c2VzLAogCQkJCVJlcG9ydFNsb3RJ bnZhbGlkYXRpb24oaW52YWxpZGF0aW9uX2NhdXNlLCB0cnVlLCBhY3RpdmVfcGlkLAogCQkJCQkJ CQkJICAgc2xvdG5hbWUsIHJlc3RhcnRfbHNuLAogCQkJCQkJCQkJICAgb2xkZXN0TFNOLCBzbmFw c2hvdENvbmZsaWN0SG9yaXpvbiwKLQkJCQkJCQkJCSAgIHNsb3RfaWRsZV9zZWNzKTsKKwkJCQkJ CQkJCSAgIHNsb3RfaWRsZV9zZWNzLCBzLT5kYXRhLnhtaW4sCisJCQkJCQkJCQkgICBzLT5kYXRh LmNhdGFsb2dfeG1pbiwgcmVjZW50WGlkKTsKIAogCQkJCWlmIChNeUJhY2tlbmRUeXBlID09IEJf U1RBUlRVUCkKIAkJCQkJKHZvaWQpIFNpZ25hbFJlY292ZXJ5Q29uZmxpY3QoR2V0UEdQcm9jQnlO dW1iZXIoYWN0aXZlX3Byb2MpLApAQCAtMjE2NSw3ICsyMjQwLDggQEAgSW52YWxpZGF0ZVBvc3Np Ymx5T2Jzb2xldGVTbG90KHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsCiAJCQlSZXBvcnRTbG90SW52 YWxpZGF0aW9uKGludmFsaWRhdGlvbl9jYXVzZSwgZmFsc2UsIGFjdGl2ZV9waWQsCiAJCQkJCQkJ CSAgIHNsb3RuYW1lLCByZXN0YXJ0X2xzbiwKIAkJCQkJCQkJICAgb2xkZXN0TFNOLCBzbmFwc2hv dENvbmZsaWN0SG9yaXpvbiwKLQkJCQkJCQkJICAgc2xvdF9pZGxlX3NlY3MpOworCQkJCQkJCQkg ICBzbG90X2lkbGVfc2Vjcywgcy0+ZGF0YS54bWluLAorCQkJCQkJCQkgICBzLT5kYXRhLmNhdGFs b2dfeG1pbiwgcmVjZW50WGlkKTsKIAogCQkJLyogZG9uZSB3aXRoIHRoaXMgc2xvdCBmb3Igbm93 ICovCiAJCQlicmVhazsKQEAgLTIxOTIsNiArMjI2OCw4IEBAIEludmFsaWRhdGVQb3NzaWJseU9i c29sZXRlU2xvdCh1aW50MzIgcG9zc2libGVfY2F1c2VzLAogICogICBsb2dpY2FsLgogICogLSBS U19JTlZBTF9JRExFX1RJTUVPVVQ6IGhhcyBiZWVuIGlkbGUgbG9uZ2VyIHRoYW4gdGhlIGNvbmZp Z3VyZWQKICAqICAgImlkbGVfcmVwbGljYXRpb25fc2xvdF90aW1lb3V0IiBkdXJhdGlvbi4KKyAq IC0gUlNfSU5WQUxfWElEX0FHRTogc2xvdCB4aWQgYWdlIGlzIG9sZGVyIHRoYW4gdGhlIGNvbmZp Z3VyZWQKKyAqICAgIm1heF9zbG90X3hpZF9hZ2UiIGFnZS4KICAqCiAgKiBOb3RlOiBUaGlzIGZ1 bmN0aW9uIGF0dGVtcHRzIHRvIGludmFsaWRhdGUgdGhlIHNsb3QgZm9yIG11bHRpcGxlIHBvc3Np YmxlCiAgKiBjYXVzZXMgaW4gYSBzaW5nbGUgcGFzcywgbWluaW1pemluZyByZWR1bmRhbnQgaXRl cmF0aW9ucy4gVGhlICJjYXVzZSIKQEAgLTIyMDUsNyArMjI4Myw4IEBAIEludmFsaWRhdGVQb3Nz aWJseU9ic29sZXRlU2xvdCh1aW50MzIgcG9zc2libGVfY2F1c2VzLAogYm9vbAogSW52YWxpZGF0 ZU9ic29sZXRlUmVwbGljYXRpb25TbG90cyh1aW50MzIgcG9zc2libGVfY2F1c2VzLAogCQkJCQkJ CQkgICBYTG9nU2VnTm8gb2xkZXN0U2Vnbm8sIE9pZCBkYm9pZCwKLQkJCQkJCQkJICAgVHJhbnNh Y3Rpb25JZCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbikKKwkJCQkJCQkJICAgVHJhbnNhY3Rpb25J ZCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKKwkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCByZWNl bnRYaWQpCiB7CiAJWExvZ1JlY1B0cglvbGRlc3RMU047CiAJYm9vbAkJaW52YWxpZGF0ZWQgPSBm YWxzZTsKQEAgLTIyNDQsNyArMjMyMyw3IEBAIHJlc3RhcnQ6CiAKIAkJaWYgKEludmFsaWRhdGVQ b3NzaWJseU9ic29sZXRlU2xvdChwb3NzaWJsZV9jYXVzZXMsIHMsIG9sZGVzdExTTiwKIAkJCQkJ CQkJCQkgICBkYm9pZCwgc25hcHNob3RDb25mbGljdEhvcml6b24sCi0JCQkJCQkJCQkJICAgJnJl bGVhc2VkX2xvY2spKQorCQkJCQkJCQkJCSAgIHJlY2VudFhpZCwgJnJlbGVhc2VkX2xvY2spKQog CQl7CiAJCQlBc3NlcnQocmVsZWFzZWRfbG9jayk7CiAKQEAgLTMyNzUsMyArMzM1NCw0NCBAQCBX YWl0Rm9yU3RhbmRieUNvbmZpcm1hdGlvbihYTG9nUmVjUHRyIHdhaXRfZm9yX2xzbikKIAogCUNv bmRpdGlvblZhcmlhYmxlQ2FuY2VsU2xlZXAoKTsKIH0KKworLyoKKyAqIEludmFsaWRhdGUgcmVw bGljYXRpb24gc2xvdHMgd2hvc2UgWElEIGFnZSBleGNlZWRzIHRoZSBtYXhfc2xvdF94aWRfYWdl CisgKiBHVUMuCisgKgorICogVGhlIHNsb3RfeG1pbiBhbmQgc2xvdF9jYXRhbG9nX3htaW4gYXJl IHRoZSByZXBsaWNhdGlvbiBzbG90IHhtaW4gdmFsdWVzCisgKiBvYnRhaW5lZCBmcm9tIHRoZSBz YW1lIENvbXB1dGVYaWRIb3Jpem9ucygpIGNhbGwgdGhhdCBjb21wdXRlZCBPbGRlc3RYbWluCisg KiBkdXJpbmcgdmFjdXVtLiBVc2luZyB0aGVzZSBhdm9pZHMgYSBzZXBhcmF0ZSBQcm9jQXJyYXlM b2NrIGFjcXVpc2l0aW9uLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgc2xv dCB3YXMgaW52YWxpZGF0ZWQuCisgKi8KK2Jvb2wKK01heWJlSW52YWxpZGF0ZVhJREFnZWRTbG90 cyhUcmFuc2FjdGlvbklkIHNsb3RfeG1pbiwKKwkJCQkJCQlUcmFuc2FjdGlvbklkIHNsb3RfY2F0 YWxvZ194bWluKQoreworCVRyYW5zYWN0aW9uSWQgcmVjZW50WGlkOworCVRyYW5zYWN0aW9uSWQg eGlkTGltaXQ7CisJYm9vbAkJaW52YWxpZGF0ZWQgPSBmYWxzZTsKKworCWlmIChtYXhfc2xvdF94 aWRfYWdlID09IDApCisJCXJldHVybiBmYWxzZTsKKworCXJlY2VudFhpZCA9IFJlYWROZXh0VHJh bnNhY3Rpb25JZCgpOworCXhpZExpbWl0ID0gVHJhbnNhY3Rpb25JZFJldHJlYXRlZEJ5KHJlY2Vu dFhpZCwgbWF4X3Nsb3RfeGlkX2FnZSk7CisKKwkvKgorCSAqIEludmFsaWRhdGUgcG9zc2libHkg b2Jzb2xldGUgc2xvdHMgYmFzZWQgb24gWElELWFnZSwgaWYgZWl0aGVyIHNsb3QncworCSAqIHht aW4gb3IgY2F0YWxvZ194bWluIGlzIG9sZGVyIHRoYW4gdGhlIGN1dG9mZi4KKwkgKi8KKwlpZiAo KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHNsb3RfeG1pbikgJiYKKwkJIFRyYW5zYWN0aW9uSWRQcmVj ZWRlcyhzbG90X3htaW4sIHhpZExpbWl0KSkgfHwKKwkJKFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHNs b3RfY2F0YWxvZ194bWluKSAmJgorCQkgVHJhbnNhY3Rpb25JZFByZWNlZGVzKHNsb3RfY2F0YWxv Z194bWluLCB4aWRMaW1pdCkpKQorCQlpbnZhbGlkYXRlZCA9IEludmFsaWRhdGVPYnNvbGV0ZVJl cGxpY2F0aW9uU2xvdHMoUlNfSU5WQUxfWElEX0FHRSwKKwkJCQkJCQkJCQkJCQkJIDAsCisJCQkJ CQkJCQkJCQkJCSBJbnZhbGlkT2lkLAorCQkJCQkJCQkJCQkJCQkgSW52YWxpZFRyYW5zYWN0aW9u SWQsCisJCQkJCQkJCQkJCQkJCSByZWNlbnRYaWQpOworCisJcmV0dXJuIGludmFsaWRhdGVkOwor fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwppbmRleCBjYzIwN2NiNTZlMy4uOWUwYWNm NzMwOWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCkBAIC0xOTM3LDYgKzE5Mzcs MzAgQEAgR2xvYmFsVmlzSG9yaXpvbktpbmRGb3JSZWwoUmVsYXRpb24gcmVsKQogCQlyZXR1cm4g VklTSE9SSVpPTl9URU1QOwogfQogCisvKgorICogSGVscGVyIHRvIHJldHVybiB0aGUgYXBwcm9w cmlhdGUgb2xkZXN0IG5vbi1yZW1vdmFibGUgVHJhbnNhY3Rpb25JZCBmcm9tCisgKiBwcmUtY29t cHV0ZWQgaG9yaXpvbnMsIGJhc2VkIG9uIHRoZSByZWxhdGlvbiB0eXBlLgorICovCitzdGF0aWMg aW5saW5lIFRyYW5zYWN0aW9uSWQKK0dldE9sZGVzdE5vblJlbW92YWJsZVRyYW5zYWN0aW9uSWRG cm9tSG9yaXpvbnMoQ29tcHV0ZVhpZEhvcml6b25zUmVzdWx0ICpob3Jpem9ucywKKwkJCQkJCQkJ CQkJICAgUmVsYXRpb24gcmVsKQoreworCXN3aXRjaCAoR2xvYmFsVmlzSG9yaXpvbktpbmRGb3JS ZWwocmVsKSkKKwl7CisJCWNhc2UgVklTSE9SSVpPTl9TSEFSRUQ6CisJCQlyZXR1cm4gaG9yaXpv bnMtPnNoYXJlZF9vbGRlc3Rfbm9ucmVtb3ZhYmxlOworCQljYXNlIFZJU0hPUklaT05fQ0FUQUxP RzoKKwkJCXJldHVybiBob3Jpem9ucy0+Y2F0YWxvZ19vbGRlc3Rfbm9ucmVtb3ZhYmxlOworCQlj YXNlIFZJU0hPUklaT05fREFUQToKKwkJCXJldHVybiBob3Jpem9ucy0+ZGF0YV9vbGRlc3Rfbm9u cmVtb3ZhYmxlOworCQljYXNlIFZJU0hPUklaT05fVEVNUDoKKwkJCXJldHVybiBob3Jpem9ucy0+ dGVtcF9vbGRlc3Rfbm9ucmVtb3ZhYmxlOworCX0KKworCS8qIGp1c3QgdG8gcHJldmVudCBjb21w aWxlciB3YXJuaW5ncyAqLworCXJldHVybiBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKK30KKwogLyoK ICAqIFJldHVybiB0aGUgb2xkZXN0IFhJRCBmb3Igd2hpY2ggZGVsZXRlZCB0dXBsZXMgbXVzdCBi ZSBwcmVzZXJ2ZWQgaW4gdGhlCiAgKiBwYXNzZWQgdGFibGUuCkBAIC0xOTU1LDIwICsxOTc5LDMw IEBAIEdldE9sZGVzdE5vblJlbW92YWJsZVRyYW5zYWN0aW9uSWQoUmVsYXRpb24gcmVsKQogCiAJ Q29tcHV0ZVhpZEhvcml6b25zKCZob3Jpem9ucyk7CiAKLQlzd2l0Y2ggKEdsb2JhbFZpc0hvcml6 b25LaW5kRm9yUmVsKHJlbCkpCi0JewotCQljYXNlIFZJU0hPUklaT05fU0hBUkVEOgotCQkJcmV0 dXJuIGhvcml6b25zLnNoYXJlZF9vbGRlc3Rfbm9ucmVtb3ZhYmxlOwotCQljYXNlIFZJU0hPUkla T05fQ0FUQUxPRzoKLQkJCXJldHVybiBob3Jpem9ucy5jYXRhbG9nX29sZGVzdF9ub25yZW1vdmFi bGU7Ci0JCWNhc2UgVklTSE9SSVpPTl9EQVRBOgotCQkJcmV0dXJuIGhvcml6b25zLmRhdGFfb2xk ZXN0X25vbnJlbW92YWJsZTsKLQkJY2FzZSBWSVNIT1JJWk9OX1RFTVA6Ci0JCQlyZXR1cm4gaG9y aXpvbnMudGVtcF9vbGRlc3Rfbm9ucmVtb3ZhYmxlOwotCX0KKwlyZXR1cm4gR2V0T2xkZXN0Tm9u UmVtb3ZhYmxlVHJhbnNhY3Rpb25JZEZyb21Ib3Jpem9ucygmaG9yaXpvbnMsIHJlbCk7Cit9CiAK LQkvKiBqdXN0IHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZ3MgKi8KLQlyZXR1cm4gSW52YWxp ZFRyYW5zYWN0aW9uSWQ7CisvKgorICogU2FtZSBhcyBHZXRPbGRlc3ROb25SZW1vdmFibGVUcmFu c2FjdGlvbklkKCksIGJ1dCBhbHNvIHJldHVybnMgdGhlCisgKiByZXBsaWNhdGlvbiBzbG90IHht aW4gYW5kIGNhdGFsb2dfeG1pbiBmcm9tIHRoZSBzYW1lIENvbXB1dGVYaWRIb3Jpem9ucygpCisg KiBjYWxsLiAgVGhpcyBhdm9pZHMgYSBzZXBhcmF0ZSBQcm9jQXJyYXlMb2NrIGFjcXVpc2l0aW9u IHdoZW4gdGhlIGNhbGxlcgorICogbmVlZHMgYm90aCB2YWx1ZXMuCisgKi8KK1RyYW5zYWN0aW9u SWQKK0dldE9sZGVzdE5vblJlbW92YWJsZVRyYW5zYWN0aW9uSWRFeHQoUmVsYXRpb24gcmVsLAor CQkJCQkJCQkJICBUcmFuc2FjdGlvbklkICpzbG90X3htaW4sCisJCQkJCQkJCQkgIFRyYW5zYWN0 aW9uSWQgKnNsb3RfY2F0YWxvZ194bWluKQoreworCUNvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCBo b3Jpem9uczsKKworCUNvbXB1dGVYaWRIb3Jpem9ucygmaG9yaXpvbnMpOworCisJaWYgKHNsb3Rf eG1pbikKKwkJKnNsb3RfeG1pbiA9IGhvcml6b25zLnNsb3RfeG1pbjsKKwlpZiAoc2xvdF9jYXRh bG9nX3htaW4pCisJCSpzbG90X2NhdGFsb2dfeG1pbiA9IGhvcml6b25zLnNsb3RfY2F0YWxvZ194 bWluOworCisJcmV0dXJuIEdldE9sZGVzdE5vblJlbW92YWJsZVRyYW5zYWN0aW9uSWRGcm9tSG9y aXpvbnMoJmhvcml6b25zLCByZWwpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvc3RhbmRieS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5j CmluZGV4IGRlOTA5MmZkZjViLi5kNjBmMzllYzA4ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvc3RhbmRieS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5k YnkuYwpAQCAtNTA0LDcgKzUwNCw4IEBAIFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFNuYXBz aG90KFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25mbGljdEhvcml6b24sCiAJICovCiAJaWYgKElz TG9naWNhbERlY29kaW5nRW5hYmxlZCgpICYmIGlzQ2F0YWxvZ1JlbCkKIAkJSW52YWxpZGF0ZU9i c29sZXRlUmVwbGljYXRpb25TbG90cyhSU19JTlZBTF9IT1JJWk9OLCAwLCBsb2NhdG9yLmRiT2lk LAotCQkJCQkJCQkJCSAgIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uKTsKKwkJCQkJCQkJCQkgICBz bmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKKwkJCQkJCQkJCQkgICBJbnZhbGlkVHJhbnNhY3Rpb25J ZCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJh bWV0ZXJzLmRhdCBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0Cmlu ZGV4IDBhODYyNjkzZmNkLi5jYTNjYzg0MTdkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQKQEAgLTIwODksNiArMjA4OSwxNCBAQAogICBtYXggPT4gJ01BWF9L SUxPQllURVMnLAogfSwKIAoreyBuYW1lID0+ICdtYXhfc2xvdF94aWRfYWdlJywgdHlwZSA9PiAn aW50JywgY29udGV4dCA9PiAnUEdDX1NJR0hVUCcsIGdyb3VwID0+ICdSRVBMSUNBVElPTl9TRU5E SU5HJywKKyAgc2hvcnRfZGVzYyA9PiAnQWdlIG9mIHRoZSB0cmFuc2FjdGlvbiBJRCBhdCB3aGlj aCBhIHJlcGxpY2F0aW9uIHNsb3QgZ2V0cyBpbnZhbGlkYXRlZC4nLAorICB2YXJpYWJsZSA9PiAn bWF4X3Nsb3RfeGlkX2FnZScsCisgIGJvb3RfdmFsID0+ICcwJywKKyAgbWluID0+ICcwJywKKyAg bWF4ID0+ICcyMDAwMDAwMDAwJywKK30sCisKICMgV2UgdXNlIHRoZSBob3BlZnVsbHktc2FmZWx5 LXNtYWxsIHZhbHVlIG9mIDEwMGtCIGFzIHRoZSBjb21waWxlZC1pbgogIyBkZWZhdWx0IGZvciBt YXhfc3RhY2tfZGVwdGguICBJbml0aWFsaXplR1VDT3B0aW9ucyB3aWxsIGluY3JlYXNlIGl0CiAj IGlmIHBvc3NpYmxlLCBkZXBlbmRpbmcgb24gdGhlIGFjdHVhbCBwbGF0Zm9ybS1zcGVjaWZpYyBz dGFjayBsaW1pdC4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNx bC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNh bXBsZQppbmRleCBjZjE1NTk3Mzg1Yi4uMDU1ZWJhNTZiZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91 dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTM1MSw2ICszNTEsOCBAQAogI3dh bF9rZWVwX3NpemUgPSAwICAgICAgICAgICAgICAjIGluIG1lZ2FieXRlczsgMCBkaXNhYmxlcwog I21heF9zbG90X3dhbF9rZWVwX3NpemUgPSAtMSAgICAjIGluIG1lZ2FieXRlczsgLTEgZGlzYWJs ZXMKICNpZGxlX3JlcGxpY2F0aW9uX3Nsb3RfdGltZW91dCA9IDAgICAgICAjIGluIHNlY29uZHM7 IDAgZGlzYWJsZXMKKyNtYXhfc2xvdF94aWRfYWdlID0gMCAgICAgICAgICAgIyBtYXhpbXVtIFhJ RCBhZ2UgYmVmb3JlIGEgcmVwbGljYXRpb24gc2xvdAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIGdldHMgaW52YWxpZGF0ZWQ7IDAgZGlzYWJsZXMKICN3YWxfc2VuZGVyX3RpbWVv dXQgPSA2MHMgICAgICAgIyBpbiBtaWxsaXNlY29uZHM7IDAgZGlzYWJsZXMKICN0cmFja19jb21t aXRfdGltZXN0YW1wID0gb2ZmICAgIyBjb2xsZWN0IHRpbWVzdGFtcCBvZiB0cmFuc2FjdGlvbiBj b21taXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVz IHJlc3RhcnQpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaCBiL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oCmluZGV4IDVkMzUxZjBkZjMzLi4zOGU4ZTA1NTY3 ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmgKKysrIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvdmFjdXVtLmgKQEAgLTI4Nyw2ICsyODcsMTUgQEAgc3RydWN0IFZhY3V1 bUN1dG9mZnMKIAkgKi8KIAlUcmFuc2FjdGlvbklkIEZyZWV6ZUxpbWl0OwogCU11bHRpWGFjdElk IE11bHRpWGFjdEN1dG9mZjsKKworCS8qCisJICogUmVwbGljYXRpb24gc2xvdCB4bWluIGFuZCBj YXRhbG9nX3htaW4gdmFsdWVzIG9idGFpbmVkIGZyb20gdGhlIHNhbWUKKwkgKiBDb21wdXRlWGlk SG9yaXpvbnMoKSBjYWxsIHRoYXQgY29tcHV0ZWQgT2xkZXN0WG1pbi4gVGhlc2UgYXJlIHVzZWQg Zm9yCisJICogWElELWFnZS1iYXNlZCByZXBsaWNhdGlvbiBzbG90IGludmFsaWRhdGlvbiB3aXRo b3V0IHJlcXVpcmluZyBhbiBleHRyYQorCSAqIFByb2NBcnJheUxvY2sgYWNxdWlzaXRpb24uCisJ ICovCisJVHJhbnNhY3Rpb25JZCBzbG90X3htaW47CisJVHJhbnNhY3Rpb25JZCBzbG90X2NhdGFs b2dfeG1pbjsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9z bG90LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90LmgKaW5kZXggNGI0NzA5ZjZlMmMu LjBiYWE3MTEyNTU5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90LmgK KysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCkBAIC02NiwxMCArNjYsMTIgQEAg dHlwZWRlZiBlbnVtIFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlCiAJUlNfSU5WQUxf V0FMX0xFVkVMID0gKDEgPDwgMiksCiAJLyogaWRsZSBzbG90IHRpbWVvdXQgaGFzIG9jY3VycmVk ICovCiAJUlNfSU5WQUxfSURMRV9USU1FT1VUID0gKDEgPDwgMyksCisJLyogc2xvdCdzIHhtaW4g b3IgY2F0YWxvZ194bWluIGhhcyByZWFjaGVkIG1heCB4aWQgYWdlICovCisJUlNfSU5WQUxfWElE X0FHRSA9ICgxIDw8IDQpLAogfSBSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZTsKIAog LyogTWF4aW11bSBudW1iZXIgb2YgaW52YWxpZGF0aW9uIGNhdXNlcyAqLwotI2RlZmluZQlSU19J TlZBTF9NQVhfQ0FVU0VTIDQKKyNkZWZpbmUJUlNfSU5WQUxfTUFYX0NBVVNFUyA1CiAKIC8qCiAg KiBXaGVuIHRoZSBzbG90IHN5bmNocm9uaXphdGlvbiB3b3JrZXIgaXMgcnVubmluZywgb3Igd2hl bgpAQCAtMzI2LDYgKzMyOCw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBSZXBsaWNhdGlvblNsb3Qg Kk15UmVwbGljYXRpb25TbG90OwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfcmVwbGljYXRp b25fc2xvdHM7CiBleHRlcm4gUEdETExJTVBPUlQgY2hhciAqc3luY2hyb25pemVkX3N0YW5kYnlf c2xvdHM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IGlkbGVfcmVwbGljYXRpb25fc2xvdF90aW1l b3V0X3NlY3M7CitleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9zbG90X3hpZF9hZ2U7CiAKIC8q IHNobWVtIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIFNpemUgUmVwbGljYXRp b25TbG90c1NobWVtU2l6ZSh2b2lkKTsKQEAgLTM2Nyw3ICszNzAsMTAgQEAgZXh0ZXJuIHZvaWQg UmVwbGljYXRpb25TbG90c0Ryb3BEQlNsb3RzKE9pZCBkYm9pZCk7CiBleHRlcm4gYm9vbCBJbnZh bGlkYXRlT2Jzb2xldGVSZXBsaWNhdGlvblNsb3RzKHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsCiAJ CQkJCQkJCQkJCSAgIFhMb2dTZWdObyBvbGRlc3RTZWdubywKIAkJCQkJCQkJCQkJICAgT2lkIGRi b2lkLAotCQkJCQkJCQkJCQkgICBUcmFuc2FjdGlvbklkIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9u KTsKKwkJCQkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwK KwkJCQkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCByZWNlbnRYaWQpOworZXh0ZXJuIGJvb2wgTWF5 YmVJbnZhbGlkYXRlWElEQWdlZFNsb3RzKFRyYW5zYWN0aW9uSWQgc2xvdF94bWluLAorCQkJCQkJ CQkJCVRyYW5zYWN0aW9uSWQgc2xvdF9jYXRhbG9nX3htaW4pOwogZXh0ZXJuIFJlcGxpY2F0aW9u U2xvdCAqU2VhcmNoTmFtZWRSZXBsaWNhdGlvblNsb3QoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBu ZWVkX2xvY2spOwogZXh0ZXJuIGludAlSZXBsaWNhdGlvblNsb3RJbmRleChSZXBsaWNhdGlvblNs b3QgKnNsb3QpOwogZXh0ZXJuIGJvb2wgUmVwbGljYXRpb25TbG90TmFtZShpbnQgaW5kZXgsIE5h bWUgbmFtZSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oIGIv c3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAppbmRleCBhYmRmMDIxZTY2ZS4uYzE5OGZk MjI1MTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgKKysrIGIv c3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaApAQCAtNTMsNiArNTMsOSBAQCBleHRlcm4g UnVubmluZ1RyYW5zYWN0aW9ucyBHZXRSdW5uaW5nVHJhbnNhY3Rpb25EYXRhKHZvaWQpOwogCiBl eHRlcm4gYm9vbCBUcmFuc2FjdGlvbklkSXNJblByb2dyZXNzKFRyYW5zYWN0aW9uSWQgeGlkKTsK IGV4dGVybiBUcmFuc2FjdGlvbklkIEdldE9sZGVzdE5vblJlbW92YWJsZVRyYW5zYWN0aW9uSWQo UmVsYXRpb24gcmVsKTsKK2V4dGVybiBUcmFuc2FjdGlvbklkIEdldE9sZGVzdE5vblJlbW92YWJs ZVRyYW5zYWN0aW9uSWRFeHQoUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCQkJCQkgICBUcmFuc2Fj dGlvbklkICpzbG90X3htaW4sCisJCQkJCQkJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgKnNsb3Rf Y2F0YWxvZ194bWluKTsKIGV4dGVybiBUcmFuc2FjdGlvbklkIEdldE9sZGVzdFRyYW5zYWN0aW9u SWRDb25zaWRlcmVkUnVubmluZyh2b2lkKTsKIGV4dGVybiBUcmFuc2FjdGlvbklkIEdldE9sZGVz dEFjdGl2ZVRyYW5zYWN0aW9uSWQoYm9vbCBpbkNvbW1pdE9ubHksCiAJCQkJCQkJCQkJCQkgIGJv b2wgYWxsRGJzKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE5X3JlcGxzbG90 X2xpbWl0LnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTlfcmVwbHNsb3RfbGltaXQucGwKaW5k ZXggN2IyNTNlNjRkOWMuLmU4MmJlZjkzODc5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVy eS90LzAxOV9yZXBsc2xvdF9saW1pdC5wbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAxOV9y ZXBsc2xvdF9saW1pdC5wbApAQCAtNTQwLDQgKzU0MCwxODIgQEAgaXMoICRwdWJsaXNoZXI0LT5z YWZlX3BzcWwoCiAkcHVibGlzaGVyNC0+c3RvcDsKICRzdWJzY3JpYmVyNC0+c3RvcDsKIAorIyBB ZHZhbmNlIHRoZSBnaXZlbiBudW1iZXIgb2YgWElEcworc3ViIGFkdmFuY2VfeGlkcworeworCW15 ICgkbm9kZSwgJG54aWRzKSA9IEBfOworCW15ICRzcWwgPSBqb2luKCI7XG4iLCAoIlNFTEVDVCBw Z19jdXJyZW50X3hhY3RfaWQoKSIpIHggJG54aWRzKTsKKwkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICRzcWwpOworfQorCisjIFdhaXQgZm9yIHRoZSBnaXZlbiBzbG90IHRvIGJlIGludmFs aWRhdGVkIHdpdGggcmVhc29uICd4aWRfYWdlZCcKK3N1YiB3YWl0X2Zvcl94aWRfYWdlZF9pbnZh bGlkYXRpb24KK3sKKwlteSAoJG5vZGUsICRzbG90X25hbWUpID0gQF87CisJJG5vZGUtPnBvbGxf cXVlcnlfdW50aWwoCisJCSdwb3N0Z3JlcycsIHFxWworCQlTRUxFQ1QgQ09VTlQoc2xvdF9uYW1l KSA9IDEgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90cworCQkJV0hFUkUgc2xvdF9uYW1lID0gJyRz bG90X25hbWUnIEFORAorCQkJYWN0aXZlID0gZmFsc2UgQU5ECisJCQlpbnZhbGlkYXRpb25fcmVh c29uID0gJ3hpZF9hZ2VkJzsKKwldKSBvciBkaWUgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBzbG90 ICRzbG90X25hbWUgdG8gYmUgaW52YWxpZGF0ZWQiOworfQorCisjID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBU ZXN0Y2FzZSBzdGFydDogSW52YWxpZGF0ZSBwaHlzaWNhbCBzbG90IGR1ZSB0byBtYXhfc2xvdF94 aWRfYWdlIEdVQworCisjIEluaXRpYWxpemUgcHJpbWFyeSBub2RlIGZvciBYSUQgYWdlIHRlc3Rz CitteSAkcHJpbWFyeTUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3ByaW1hcnk1 Jyk7CiskcHJpbWFyeTUtPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworCisj IERpc2FibGUgYXV0b3ZhY3V1bSBzbyBjaGVja3BvaW50ZXIgdHJpZ2dlcnMgdGhlIGludmFsaWRh dGlvbgorbXkgJG1heF9zbG90X3hpZF9hZ2UgPSAxMDA7CiskcHJpbWFyeTUtPmFwcGVuZF9jb25m KAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcXsKK21heF9zbG90X3hpZF9hZ2UgPSAkbWF4X3Nsb3Rf eGlkX2FnZQorYXV0b3ZhY3V1bSA9IG9mZgorfSk7CisKKyRwcmltYXJ5NS0+c3RhcnQ7CisKKyMg VGFrZSBhIGJhY2t1cCBmb3IgY3JlYXRpbmcgc3RhbmRieQorJGJhY2t1cF9uYW1lID0gJ2JhY2t1 cDUnOworJHByaW1hcnk1LT5iYWNrdXAoJGJhY2t1cF9uYW1lKTsKKworIyBDcmVhdGUgc3RhbmRi eSB3aXRoIEhTIGZlZWRiYWNrIHNvIHRoZSBzbG90IGdhaW5zIGFuIHhtaW4KK215ICRzdGFuZGJ5 NSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3RhbmRieTUnKTsKKyRzdGFuZGJ5 NS0+aW5pdF9mcm9tX2JhY2t1cCgkcHJpbWFyeTUsICRiYWNrdXBfbmFtZSwgaGFzX3N0cmVhbWlu ZyA9PiAxKTsKKyRzdGFuZGJ5NS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHF7 CitwcmltYXJ5X3Nsb3RfbmFtZSA9ICdzYjVfc2xvdCcKK2hvdF9zdGFuZGJ5X2ZlZWRiYWNrID0g b24KK3dhbF9yZWNlaXZlcl9zdGF0dXNfaW50ZXJ2YWwgPSAxCit9KTsKKyRwcmltYXJ5NS0+c2Fm ZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxWworICAgIFNFTEVDVCBwZ19jcmVhdGVfcGh5c2ljYWxf cmVwbGljYXRpb25fc2xvdChzbG90X25hbWUgOj0gJ3NiNV9zbG90JywgaW1tZWRpYXRlbHlfcmVz ZXJ2ZSA6PSB0cnVlKTsKK10pOworJHN0YW5kYnk1LT5zdGFydDsKKworIyBDcmVhdGUgc29tZSBj b250ZW50IG9uIHByaW1hcnkgdG8gbW92ZSB4bWluCiskcHJpbWFyeTUtPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGFiX2ludDUgQVMgU0VMRUNUIGdlbmVyYXRlX3Nlcmll cygxLDEwKSBBUyBhIik7CiskcHJpbWFyeTUtPndhaXRfZm9yX2NhdGNodXAoJHN0YW5kYnk1KTsK KworIyBXYWl0IGZvciB0aGUgcGh5c2ljYWwgc2xvdCB0byBnZXQgeG1pbiB2aWEgaG90X3N0YW5k YnlfZmVlZGJhY2sKKyRwcmltYXJ5NS0+cG9sbF9xdWVyeV91bnRpbCgKKwkncG9zdGdyZXMnLCBx cVsKKwlTRUxFQ1QgeG1pbiBJUyBOT1QgTlVMTAorCQlGUk9NIHBnX2NhdGFsb2cucGdfcmVwbGlj YXRpb25fc2xvdHMKKwkJV0hFUkUgc2xvdF9uYW1lID0gJ3NiNV9zbG90JzsKK10pIG9yIGRpZSAi VGltZWQgb3V0IHdhaXRpbmcgZm9yIHNsb3Qgc2I1X3Nsb3QgeG1pbiBmcm9tIEhTIGZlZWRiYWNr IjsKKworIyBTdG9wIHN0YW5kYnkgc28gdGhlIHNsb3QgYmVjb21lcyBpbmFjdGl2ZSB3aXRoIGl0 cyB4bWluIGZyb3plbgorJHN0YW5kYnk1LT5zdG9wOworCisjIEFkdmFuY2UgWElEcyBwYXN0IDJ4 IG1heF9zbG90X3hpZF9hZ2Ugc28gdGhlIHNsb3QncyB4bWluIGlzIHN0YWxlIGVub3VnaAorYWR2 YW5jZV94aWRzKCRwcmltYXJ5NSwgMiAqICRtYXhfc2xvdF94aWRfYWdlKTsKKyRwcmltYXJ5NS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDSEVDS1BPSU5UIik7Cit3YWl0X2Zvcl94aWRfYWdlZF9p bnZhbGlkYXRpb24oJHByaW1hcnk1LCAnc2I1X3Nsb3QnKTsKK29rKDEsICJwaHlzaWNhbCBzbG90 IGludmFsaWRhdGVkIGR1ZSB0byBYSUQgYWdlICh2aWEgY2hlY2twb2ludCkiKTsKKworIyBUZXN0 Y2FzZSBlbmQ6IEludmFsaWRhdGUgcGh5c2ljYWwgc2xvdCBkdWUgdG8gbWF4X3Nsb3RfeGlkX2Fn ZSBHVUMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRlc3RjYXNlIHN0YXJ0OiBJ bnZhbGlkYXRlIGxvZ2ljYWwgc2xvdCBkdWUgdG8gbWF4X3Nsb3RfeGlkX2FnZSBHVUMKKworIyBS ZS1lbmFibGUgYXV0b3ZhY3V1bSBzbyB0aGF0IFZBQ1VVTS10cmlnZ2VyZWQgaW52YWxpZGF0aW9u IHdvcmtzIG5vcm1hbGx5CiskcHJpbWFyeTUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRF UiBTWVNURU0gU0VUIGF1dG92YWN1dW0gPSBvbjsgU0VMRUNUIHBnX3JlbG9hZF9jb25mKCk7Iik7 CisKKyMgQ3JlYXRlIGEgc3Vic2NyaWJlciBub2RlCitteSAkc3Vic2NyaWJlcjUgPSBQb3N0Z3Jl U1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNjcmliZXI1Jyk7Ciskc3Vic2NyaWJlcjUtPmlu aXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworJHN1YnNjcmliZXI1LT5zdGFydDsK KworIyBDcmVhdGUgdGFibGVzIG9uIGJvdGggcHJpbWFyeSBhbmQgc3Vic2NyaWJlcgorJHByaW1h cnk1LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0ZXN0X3RibDUgKGlkIGlu dCkiKTsKKyRzdWJzY3JpYmVyNS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUg dGVzdF90Ymw1IChpZCBpbnQpIik7CiskcHJpbWFyeTUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJJTlNFUlQgSU5UTyB0ZXN0X3RibDUgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMSwgNSkpOyIp OworCisjIFNldHVwIGxvZ2ljYWwgcmVwbGljYXRpb24KK215ICRwcmltYXJ5NV9jb25uc3RyID0g JHByaW1hcnk1LT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJHByaW1hcnk1LT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjUgRk9SIFRBQkxFIHRl c3RfdGJsNSIpOworJHN1YnNjcmliZXI1LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRF IFNVQlNDUklQVElPTiBzdWI1IENPTk5FQ1RJT04gJyRwcmltYXJ5NV9jb25uc3RyJyBQVUJMSUNB VElPTiBwdWI1IFdJVEggKHNsb3RfbmFtZSA9ICdsc3ViNV9zbG90JykiCispOworCisjIFdhaXQg Zm9yIGluaXRpYWwgc3luYworJHN1YnNjcmliZXI1LT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3lu YygkcHJpbWFyeTUsICdzdWI1Jyk7CisKKyRyZXN1bHQgPSAkc3Vic2NyaWJlcjUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90Ymw1Iik7CitpcygkcmVz dWx0LCBxcSg1KSwgImNoZWNrIGluaXRpYWwgY29weSB3YXMgZG9uZSBmb3IgbG9naWNhbCByZXBs aWNhdGlvbiAoWElEIGFnZSB0ZXN0KSIpOworCisjIFdhaXQgZm9yIHRoZSBsb2dpY2FsIHNsb3Qg dG8gZ2V0IGNhdGFsb2dfeG1pbgorJHByaW1hcnk1LT5wb2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0 Z3JlcycsIHFxWworCVNFTEVDVCB4bWluIElTIE5VTEwgQU5EIGNhdGFsb2dfeG1pbiBJUyBOT1Qg TlVMTAorCUZST00gcGdfY2F0YWxvZy5wZ19yZXBsaWNhdGlvbl9zbG90cworCVdIRVJFIHNsb3Rf bmFtZSA9ICdsc3ViNV9zbG90JzsKK10pIG9yIGRpZSAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHNs b3QgbHN1YjVfc2xvdCBjYXRhbG9nX3htaW4gdG8gYWR2YW5jZSI7CisKKyMgU3RvcCBzdWJzY3Jp YmVyIHRvIG1ha2UgdGhlIHNsb3QgaW5hY3RpdmUKKyRzdWJzY3JpYmVyNS0+c3RvcDsKKworIyBB ZHZhbmNlIFhJRHMgcGFzdCAyeCBtYXhfc2xvdF94aWRfYWdlIHNvIHRoZSBzbG90J3MgY2F0YWxv Z194bWluIGlzIHN0YWxlIGVub3VnaAorYWR2YW5jZV94aWRzKCRwcmltYXJ5NSwgMiAqICRtYXhf c2xvdF94aWRfYWdlKTsKKyRwcmltYXJ5NS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJWQUNVVU0g dGVzdF90Ymw1Iik7Cit3YWl0X2Zvcl94aWRfYWdlZF9pbnZhbGlkYXRpb24oJHByaW1hcnk1LCAn bHN1YjVfc2xvdCcpOworb2soMSwgImxvZ2ljYWwgc2xvdCBpbnZhbGlkYXRlZCBkdWUgdG8gWElE IGFnZSAodmlhIHZhY3V1bSkiKTsKKworIyBUZXN0Y2FzZSBlbmQ6IEludmFsaWRhdGUgbG9naWNh bCBzbG90IGR1ZSB0byBtYXhfc2xvdF94aWRfYWdlIEdVQworIyA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisjIFRlc3RjYXNlIHN0YXJ0OiBJbnZhbGlkYXRlIGxvZ2ljYWwg c2xvdCBvbiBzdGFuZGJ5IGR1ZSB0byBtYXhfc2xvdF94aWRfYWdlIEdVQworCisjIERpc2FibGUg bWF4X3Nsb3RfeGlkX2FnZSBvbiBwcmltYXJ5IGFuZCByZWNyZWF0ZSB0aGUgc3RyZWFtaW5nIHNs b3QKKyRwcmltYXJ5NS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNZU1RFTSBTRVQg bWF4X3Nsb3RfeGlkX2FnZSA9IDA7IFNFTEVDVCBwZ19yZWxvYWRfY29uZigpOyIpOworJHByaW1h cnk1LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2Ryb3BfcmVwbGljYXRpb25f c2xvdCgnc2I1X3Nsb3QnKSIpOworJHByaW1hcnk1LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki U0VMRUNUIHBnX2NyZWF0ZV9waHlzaWNhbF9yZXBsaWNhdGlvbl9zbG90KCdzYjVfc2xvdCcsIHRy dWUpIik7Ciskc3RhbmRieTUtPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcXsK K21heF9zbG90X3hpZF9hZ2UgPSAkbWF4X3Nsb3RfeGlkX2FnZQorYXV0b3ZhY3V1bSA9IG9mZgor fSk7Ciskc3RhbmRieTUtPnN0YXJ0OworCiskcHJpbWFyeTUtPndhaXRfZm9yX2NhdGNodXAoJHN0 YW5kYnk1KTsKKworJHN0YW5kYnk1LT5jcmVhdGVfbG9naWNhbF9zbG90X29uX3N0YW5kYnkoJHBy aW1hcnk1LCAnc2I1X2xvZ2ljYWxfc2xvdCcsCisJJ3Bvc3RncmVzJyk7CisKKyRzdGFuZGJ5NS0+ cG9sbF9xdWVyeV91bnRpbCgKKwkncG9zdGdyZXMnLCBxcVsKKwlTRUxFQ1QgY2F0YWxvZ194bWlu IElTIE5PVCBOVUxMCisJRlJPTSBwZ19jYXRhbG9nLnBnX3JlcGxpY2F0aW9uX3Nsb3RzCisJV0hF UkUgc2xvdF9uYW1lID0gJ3NiNV9sb2dpY2FsX3Nsb3QnOworXSkgb3IgZGllICJUaW1lZCBvdXQg d2FpdGluZyBmb3Igc2I1X2xvZ2ljYWxfc2xvdCBjYXRhbG9nX3htaW4iOworCisjIEFkdmFuY2Ug WElEcyBvbiBwcmltYXJ5LCByZXBsYXkgb24gc3RhbmRieSwgdGhlbiByZXN0YXJ0cG9pbnQgdG8g aW52YWxpZGF0ZQorYWR2YW5jZV94aWRzKCRwcmltYXJ5NSwgMiAqICRtYXhfc2xvdF94aWRfYWdl KTsKKyRwcmltYXJ5NS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDSEVDS1BPSU5UIik7CiskcHJp bWFyeTUtPndhaXRfZm9yX2NhdGNodXAoJHN0YW5kYnk1KTsKKyRzdGFuZGJ5NS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDSEVDS1BPSU5UIik7CisKK3dhaXRfZm9yX3hpZF9hZ2VkX2ludmFsaWRh dGlvbigkc3RhbmRieTUsICdzYjVfbG9naWNhbF9zbG90Jyk7CitvaygxLCAibG9naWNhbCAoc3Rh bmRieSkgc2xvdCBpbnZhbGlkYXRlZCBkdWUgdG8gWElEIGFnZSAodmlhIHJlc3RhcnRwb2ludCki KTsKKworJHN0YW5kYnk1LT5zdG9wOworJHByaW1hcnk1LT5zdG9wOworCisjIFRlc3RjYXNlIGVu ZDogSW52YWxpZGF0ZSBsb2dpY2FsIHNsb3Qgb24gc3RhbmRieSBkdWUgdG8gbWF4X3Nsb3RfeGlk X2FnZSBHVUMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwogZG9uZV90ZXN0aW5nKCk7Ci0tIAoy LjQ3LjMKCg== --00000000000067279f064e5531f4 Content-Type: application/x-patch; name="v7-0002-Add-more-tests-for-XID-age-slot-invalidation.patch" Content-Disposition: attachment; filename="v7-0002-Add-more-tests-for-XID-age-slot-invalidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnetelaq1 RnJvbSBlNzczOWM0YjU3YzQ5YzlkYWMxNDYzMzgzMWIxMWZhM2M0ZjE4MTgxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMzEgTWFyIDIwMjYgMTY6MDk6MzIgKzAw MDAKU3ViamVjdDogW1BBVENIIHY3IDIvMl0gQWRkIG1vcmUgdGVzdHMgZm9yIFhJRCBhZ2Ugc2xv dCBpbnZhbGlkYXRpb24KCkNvbnN1bWUgWElEcyB1cCB0byB3cmFwYXJvdW5kIFdBUk5JTkcgbGlt aXRzIHdpdGgKbWF4X3Nsb3RfeGlkX2FnZSBtYXRjaGluZyB2YWN1dW1fZmFpbHNhZmVfYWdlICgx LjZCKS4gVmVyaWZ5IHRoYXQKYXV0b3ZhY3V1bSBpbnZhbGlkYXRlcyB0aGUgaW5hY3RpdmUgcmVw bGljYXRpb24gc2xvdAooWElELWFnZS1iYXNlZCBpbnZhbGlkYXRpb24pLCB1bmJsb2NrcyBkYXRm cm96ZW54aWQgYWR2YW5jZW1lbnQsCmFuZCBwcmV2ZW50cyB3cmFwYXJvdW5kIHdpdGhvdXQgYW55 IGludGVydmVudGlvbi4KLS0tCiBzcmMvdGVzdC9yZWNvdmVyeS9NYWtlZmlsZSAgICAgICAgICAg ICAgICB8ICAgMyArLQogc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTlfcmVwbHNsb3RfbGltaXQucGwg fCAxMzMgKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxMzUgaW5zZXJ0 aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L01h a2VmaWxlIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvTWFrZWZpbGUKaW5kZXggZDQxYWFhZjhhZTEuLjVj M2QyYzg5OTQxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVyeS9NYWtlZmlsZQorKysgYi9z cmMvdGVzdC9yZWNvdmVyeS9NYWtlZmlsZQpAQCAtMTIsNyArMTIsOCBAQAogRVhUUkFfSU5TVEFM TD1jb250cmliL3BnX3ByZXdhcm0gXAogCWNvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzIFwKIAlj b250cmliL3Rlc3RfZGVjb2RpbmcgXAotCXNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50 cworCXNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cyBcCisJc3JjL3Rlc3QvbW9kdWxl cy94aWRfd3JhcGFyb3VuZAogCiBzdWJkaXIgPSBzcmMvdGVzdC9yZWNvdmVyeQogdG9wX2J1aWxk ZGlyID0gLi4vLi4vLi4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE5X3JlcGxz bG90X2xpbWl0LnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTlfcmVwbHNsb3RfbGltaXQucGwK aW5kZXggZTgyYmVmOTM4NzkuLjYzZTg3NDQzZWRkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNv dmVyeS90LzAxOV9yZXBsc2xvdF9saW1pdC5wbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAx OV9yZXBsc2xvdF9saW1pdC5wbApAQCAtNzE4LDQgKzcxOCwxMzcgQEAgJHByaW1hcnk1LT5zdG9w OwogIyBUZXN0Y2FzZSBlbmQ6IEludmFsaWRhdGUgbG9naWNhbCBzbG90IG9uIHN0YW5kYnkgZHVl IHRvIG1heF9zbG90X3hpZF9hZ2UgR1VDCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKKyMgPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisjIFRlc3RjYXNlIHN0YXJ0OiBYSUQtYWdlLWJhc2VkIHNs b3QgaW52YWxpZGF0aW9uIHdpdGggYXV0b3ZhY3V1bSAocHJvZHVjdGlvbi1saWtlKQorCisjIFN0 YW5kYnkgc2V0cyBzbG90IHhtaW4gdmlhIEhTIGZlZWRiYWNrLCBkaXNjb25uZWN0cywgWElEcyBh cmUgY29uc3VtZWQuCisjIG1heF9zbG90X3hpZF9hZ2UgaXMgc2V0IHRvIHZhY3V1bV9mYWlsc2Fm ZV9hZ2UgKDEuNkIpIHNvIGF1dG92YWN1dW0KKyMgaW52YWxpZGF0ZXMgdGhlIHNsb3QgYmVmb3Jl IGVudGVyaW5nIGZhaWxzYWZlIG1vZGUsIHVuYmxvY2tpbmcKKyMgZGF0ZnJvemVueGlkIGFkdmFu Y2VtZW50IGFuZCBhdm9pZGluZyBYSUQgd3JhcGFyb3VuZCB3aXRob3V0IG1hbnVhbAorIyBWQUNV VU0gb3IgZG93bnRpbWUuCisKKyMgVmVyaWZ5IHNlcnZlciBsb2cgc2hvd3Mgc2xvdCBpbnZhbGlk YXRpb24gYnkgYXV0b3ZhY3V1bSB3b3JrZXIKK3N1YiB2ZXJpZnlfc2xvdF94aWRfYWdlZF9pbnZh bGlkYXRpb25faW5fc2VydmVyX2xvZworeworCW15ICgkbm9kZSwgJHNsb3RfbmFtZSwgJHNsb3Rf eG1pbiwgJG1heF9hZ2UsICRjb25zdW1lZF94aWRzKSA9IEBfOworCisJbXkgJGxvZyA9IHNsdXJw X2ZpbGUoJG5vZGUtPmxvZ2ZpbGUpOworCisJIyBWZXJpZnkgdGhlIGludmFsaWRhdGlvbiB3YXMg cGVyZm9ybWVkIGJ5IGFuIGF1dG92YWN1dW0gd29ya2VyCisJbGlrZSgkbG9nLAorCQlxci9hdXRv dmFjdXVtIHdvcmtlclxbXGQrXF0gTE9HOlxzK2ludmFsaWRhdGluZyBvYnNvbGV0ZSByZXBsaWNh dGlvbiBzbG90ICIkc2xvdF9uYW1lIi8sCisJCSJzZXJ2ZXIgbG9nOiAkc2xvdF9uYW1lIGludmFs aWRhdGVkIGJ5IGF1dG92YWN1dW0gd29ya2VyIik7CisKKwkjIFZlcmlmeSBERVRBSUwgc2hvd3Mg dGhlIGNvcnJlY3QgeG1pbiBhbmQgbWF4X3Nsb3RfeGlkX2FnZQorCWxpa2UoJGxvZywKKwkJcXIv YXV0b3ZhY3V1bSB3b3JrZXJcW1xkK1xdIERFVEFJTDpccytUaGUgc2xvdCdzIHhtaW4gJHNsb3Rf eG1pbiBpcyAoXGQrKSB0cmFuc2FjdGlvbnMgb2xkLCB3aGljaCBleGNlZWRzIHRoZSBjb25maWd1 cmVkICJtYXhfc2xvdF94aWRfYWdlIiB2YWx1ZSBvZiAkbWF4X2FnZVwuLywKKwkJInNlcnZlciBs b2c6IERFVEFJTCBzaG93cyB4bWluICRzbG90X3htaW4gYW5kIGFnZSAkbWF4X2FnZSIpOworCisJ IyBFeHRyYWN0IHhpZCBhZ2UgZnJvbSB0aGUgbG9nIGFuZCByZXBvcnQgZm9yIGRpYWdub3N0aWNz CisJJGxvZyA9fgorCSAgL1RoZSBzbG90J3MgeG1pbiAkc2xvdF94bWluIGlzIChcZCspIHRyYW5z YWN0aW9ucyBvbGQvOworCW15ICRsb2dfeGlkX2FnZSA9ICQxIC8vICdOL0EnOworCWRpYWcgInhp ZF9hZ2UgZnJvbSBzZXJ2ZXIgbG9nPSRsb2dfeGlkX2FnZSwgbWF4X3Nsb3RfeGlkX2FnZT0kbWF4 X2FnZSwgY29uc3VtZWQ9JGNvbnN1bWVkX3hpZHMgWElEcyI7Cit9CisKKyMgVmVyaWZ5IHNsb3Qg aW52YWxpZGF0aW9uIGFuZCB3YWl0IGZvciBhdXRvdmFjdXVtIHRvIGFkdmFuY2UgZGF0ZnJvemVu eGlkCitzdWIgdmVyaWZ5X2ludmFsaWRhdGlvbl9hbmRfcmVjb3ZlcnkKK3sKKwlteSAoJG5vZGUs ICRzbG90X25hbWUsICRzbG90X3htaW4sICRtYXhfYWdlLCAkY29uc3VtZWRfeGlkcykgPSBAXzsK KworCXJldHVybiBpZiAkbWF4X2FnZSA9PSAwOworCisJd2FpdF9mb3JfeGlkX2FnZWRfaW52YWxp ZGF0aW9uKCRub2RlLCAkc2xvdF9uYW1lKTsKKwlvaygxLCAnYXV0b3ZhY3V1bSBpbnZhbGlkYXRl ZCBzbG90IGR1ZSB0byB4aWRfYWdlZCcpOworCisJdmVyaWZ5X3Nsb3RfeGlkX2FnZWRfaW52YWxp ZGF0aW9uX2luX3NlcnZlcl9sb2coJG5vZGUsICRzbG90X25hbWUsCisJCSRzbG90X3htaW4sICRt YXhfYWdlLCAkY29uc3VtZWRfeGlkcyk7CisKKwkjIFdhaXQgZm9yIGF1dG92YWN1dW0gdG8gYWR2 YW5jZSBkYXRmcm96ZW54aWQgaW4gYWxsIGRhdGFiYXNlcyBwYXN0IHRoZQorCSMgd3JhcGFyb3Vu ZCB0aHJlc2hvbGQuCisJJG5vZGUtPnBvbGxfcXVlcnlfdW50aWwoCisJCSdwb3N0Z3JlcycsIHFx WworCQlTRUxFQ1QgTk9UIEVYSVNUUyAoCisJCQlTRUxFQ1QgMSBGUk9NIHBnX2RhdGFiYXNlCisJ CQlXSEVSRSBhZ2UoZGF0ZnJvemVueGlkKSA+IDIwMDAwMDAwMDAKKwkJKTsKKwldKSBvciBkaWUg IlRpbWVkIG91dCB3YWl0aW5nIGZvciBhdXRvdmFjdXVtIHRvIGFkdmFuY2UgZGF0ZnJvemVueGlk IGluIGFsbCBkYXRhYmFzZXMiOworfQorCitteSAkcHJpbWFyeTYgPSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyLT5uZXcoJ3ByaW1hcnk2Jyk7CiskcHJpbWFyeTYtPmluaXQoYWxsb3dzX3N0cmVh bWluZyA9PiAnbG9naWNhbCcpOworCiskbWF4X3Nsb3RfeGlkX2FnZSA9IDE2MDAwMDAwMDA7ICAg ICMgbWF0Y2hlcyB2YWN1dW1fZmFpbHNhZmVfYWdlIGRlZmF1bHQKKyRwcmltYXJ5Ni0+YXBwZW5k X2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFxeworbWF4X3Nsb3RfeGlkX2FnZSA9ICRtYXhf c2xvdF94aWRfYWdlCithdXRvdmFjdXVtX25hcHRpbWUgPSAxcworfSk7CisKKyRwcmltYXJ5Ni0+ c3RhcnQ7CiskcHJpbWFyeTYtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIEVYVEVOU0lP TiB4aWRfd3JhcGFyb3VuZCIpOworCiskYmFja3VwX25hbWUgPSAnYmFja3VwNic7CiskcHJpbWFy eTYtPmJhY2t1cCgkYmFja3VwX25hbWUpOworCitteSAkc3RhbmRieTYgPSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyLT5uZXcoJ3N0YW5kYnk2Jyk7Ciskc3RhbmRieTYtPmluaXRfZnJvbV9iYWNr dXAoJHByaW1hcnk2LCAkYmFja3VwX25hbWUsIGhhc19zdHJlYW1pbmcgPT4gMSk7Ciskc3RhbmRi eTYtPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxeworcHJpbWFyeV9zbG90X25h bWUgPSAnc2I2X3Nsb3QnCitob3Rfc3RhbmRieV9mZWVkYmFjayA9IG9uCit3YWxfcmVjZWl2ZXJf c3RhdHVzX2ludGVydmFsID0gMQorfSk7CisKKyRwcmltYXJ5Ni0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIlNFTEVDVCBwZ19jcmVhdGVfcGh5c2ljYWxfcmVwbGljYXRpb25fc2xvdCgnc2I2X3Ns b3QnLCB0cnVlKSIpOworCiskc3RhbmRieTYtPnN0YXJ0OworCiskcHJpbWFyeTYtPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGFiX2ludDYgQVMgU0VMRUNUIGdlbmVyYXRl X3NlcmllcygxLDEwKSBBUyBhIik7CiskcHJpbWFyeTYtPndhaXRfZm9yX2NhdGNodXAoJHN0YW5k Ynk2KTsKKworJHByaW1hcnk2LT5wb2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3JlcycsIHFxWwor CVNFTEVDVCB4bWluIElTIE5PVCBOVUxMIEZST00gcGdfcmVwbGljYXRpb25fc2xvdHMKKwkJV0hF UkUgc2xvdF9uYW1lID0gJ3NiNl9zbG90JzsKK10pIG9yIGRpZSAiVGltZWQgb3V0IHdhaXRpbmcg Zm9yIHNiNl9zbG90IHhtaW4gZnJvbSBIUyBmZWVkYmFjayI7CisKKyMgQ2FwdHVyZSB0aGUgc2xv dCdzIHhtaW4gZm9yIGxhdGVyIGxvZyB2ZXJpZmljYXRpb24KK215ICRzbG90X3htaW4gPSAkcHJp bWFyeTYtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgeG1pbiBGUk9NIHBnX3JlcGxp Y2F0aW9uX3Nsb3RzIFdIRVJFIHNsb3RfbmFtZSA9ICdzYjZfc2xvdCciKTsKKworIyBTdG9wIHN0 YW5kYnk7IHNsb3QgeG1pbiBwZXJzaXN0cyBhbmQgaG9sZHMgYmFjayBkYXRmcm96ZW54aWQKKyRz dGFuZGJ5Ni0+c3RvcDsKKworIyBDb25zdW1lIFhJRHMgaW4gNTBNIGNodW5rczsgYXV0b3ZhY3V1 bSAobmFwdGltZT0xcykgd2lsbCBpbnZhbGlkYXRlIHRoZQorIyBzbG90IG9uY2UgeG1pbiBhZ2Ug ZXhjZWVkcyBtYXhfc2xvdF94aWRfYWdlLgorbXkgJGxvZ3N0YXJ0NiA9IC1zICRwcmltYXJ5Ni0+ bG9nZmlsZTsKK215ICRjaHVuayA9IDUwXzAwMF8wMDA7CitteSAkbWF4X3hpZHMgPSAyXzIwMF8w MDBfMDAwOworbXkgJGNvbnN1bWVkID0gMDsKKword2hpbGUgKCRjb25zdW1lZCA8ICRtYXhfeGlk cykKK3sKKwkkcHJpbWFyeTYtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvbnN1bWVf eGlkcygkY2h1bmspIik7CisJJGNvbnN1bWVkICs9ICRjaHVuazsKKwlteSAkcmVtYWluaW5nID0g JG1heF94aWRzIC0gJGNvbnN1bWVkOworCWRpYWcgImNvbnN1bWVkICRjb25zdW1lZCAvICRtYXhf eGlkcyBYSURzICgkcmVtYWluaW5nIHJlbWFpbmluZykiOworfQorCit2ZXJpZnlfaW52YWxpZGF0 aW9uX2FuZF9yZWNvdmVyeSgkcHJpbWFyeTYsICdzYjZfc2xvdCcsCisJJHNsb3RfeG1pbiwgJG1h eF9zbG90X3hpZF9hZ2UsICRjb25zdW1lZCk7CisKKyMgQ29uc3VtZSAxQiBtb3JlIFhJRHMg4oCU IGNvbWJpbmluZyB3aXRoIHRoZSAyLjJCIGNvbnN1bWVkIGFib3ZlLCB0aGUgdG90YWwKKyMgb2Yg My4yQiBleGNlZWRzIHRoZSAyXjMxICh+Mi4xQikgdXNhYmxlIFhJRCBzcGFjZSAoeGlkU3RvcExp bWl0KSwgaS5lLgorIyBtb3JlIHRoYW4gb25lIGZ1bGwgd3JhcGFyb3VuZCBjeWNsZSwgcHJvdmlu ZyB0aGUgc3lzdGVtIGlzIGhlYWx0aHkuCiskcHJpbWFyeTYtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvbnN1bWVfeGlkcygxMDAwMDAwMDAwKSIpOworb2soMSwgJ3dyaXRlcyBzdWNj ZWVkIGFmdGVyIGF1dG92YWN1dW0gaW52YWxpZGF0ZWQgdGhlIHNsb3QnKTsKKworJHByaW1hcnk2 LT5zdG9wOworCisjIFRlc3RjYXNlIGVuZDogWElELWFnZS1iYXNlZCBzbG90IGludmFsaWRhdGlv biB3aXRoIGF1dG92YWN1dW0gKHByb2R1Y3Rpb24tbGlrZSkKKyMgPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKwogZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjQ3LjMKCg== --00000000000067279f064e5531f4--