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 1vpGhV-004iso-1Y for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Feb 2026 02:08:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vpGhU-008zhC-0Y for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Feb 2026 02:08:32 +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 1vpGhT-008zh3-1t for pgsql-hackers@lists.postgresql.org; Mon, 09 Feb 2026 02:08:31 +0000 Received: from mail-lf1-x131.google.com ([2a00:1450:4864:20::131]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vpGhR-00000001CwM-0AU4 for pgsql-hackers@lists.postgresql.org; Mon, 09 Feb 2026 02:08:30 +0000 Received: by mail-lf1-x131.google.com with SMTP id 2adb3069b0e04-59dd9aef51eso5215816e87.2 for ; Sun, 08 Feb 2026 18:08:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770602906; cv=none; d=google.com; s=arc-20240605; b=IWd3CvoPHcZIQlIBDgywDU7QfWYHzGm/DY7yK5zIfYiXwffzkop9U9AYE0Jm1gB6Eu NkLUyqoXHNmPEFR2zZpiKkmTm9ZTYLxaQa7BtsA8kpyBvW6BcCvOu2rLI8r/pSksUShS qJMAqur8z2YeAZNOpQQ4UOANCfC3O9fKJEnb/JxIoi04h0abSWdPQLttQl4tj0omJNYJ Cmd6ymiGNTcnWbCwFy1SJR0aLiM2V7tqndStdIEYIDco4PPX6xVXmsrmBoiHNeF7TuQk OPoJTLQrcgXqF0GnL89riz7j2U5lC/8VNt1Bh8lvtFhvN/b6ZUOy2bxsdFo/FPYRl/IE m69g== 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=xOpdCIXQt5RIdjGpT+EJJb1O3gv2tgcVHxsDgAB5nsQ=; fh=YeqYGxFzbnSsCMmdBTU7R7pXNS+6NDV9El+k1Eakmcs=; b=bPfQAT+I1cj8MqO2xSDvaRQ7SEOBdPl/yLC4dXKe2spFr1J5/UNzvCNEHfLAudZU5M 9WrQXqmuxyixQAgN5Ew6uJOBHVIfmPEcE5WRmdm8lUdyx3AeDzIq7n8hUJTixwJIt0YN DLbvAqHWHv32cRmOc0JlTGoeDek3YqIMw3psex+C7OzHriDdJSeSohie/2Lulm2avbUC r4244lT/aKHphWaDrnCqVWOMQuI4JwDXz0FO1ZDr4lzqxQLhLGTMKpup5KH3420EoDjj thsRoIbxQQau/NPDXQiL2L2V3W+5D7dfDK2QSufEsmIcd4m3iLqxPwVo5OqCeKZDvrst 0owA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770602906; x=1771207706; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=xOpdCIXQt5RIdjGpT+EJJb1O3gv2tgcVHxsDgAB5nsQ=; b=CP9lh8Y/W+efRpALaSu85Nu6mG+szx6J/UaWug/hrFc2/K+kPjMdypFMPZqUhztyco hRIPl0JpKWWaBWC0iOWBK2so0w2LRVSdH81EoOdbiP2GTv7oE++u6l6wsPMDX8qOQRI1 aoP+t8MKbajpl8atQpm1QJjiVCzMr6JiVVKs7+tg3xV3m81lLKHALenIpRCvLY0FusbJ GO1QKJVH3GiZq0Fx8x2+6GWLuD7pfL6i5Ql2oxA68rNvhLKd3kPUj1O5jmQNQHhDFz4s gt/PAFSqvGtWuyvzenLTz4xnIz8YsJ9D6HvOBmHwrY3IF5aFWrEvCKjE1A71dKLSB0BL 08jw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770602906; x=1771207706; 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=xOpdCIXQt5RIdjGpT+EJJb1O3gv2tgcVHxsDgAB5nsQ=; b=Fuqx2a+i+sLFaghWke1nSSw7flnNkkHvGkJmgmVsHfG2xIyVYqDMs3JpAX56SS6Dp6 jak8VNiBlwGQn7gLae0Z4qdTm2mhg/d/7J3fJEoV1hSd3JA3PNU0s2u8lLHVkgufsKEf ++/PKC4Chd/5uOLYaM+/5fZgrRrt7WZRTdjjM41lEOZVashr2kms4/iVcHiIgwUV1daN 2nMBA9mcpEAdEGdNPGJoy0GD6JOqjefioXoej60bN329GhagFSrT/hrhxpZH01v8V9qU 5jNb+/WgCtHyA0gW1uq+iMh4IIK1WldPVTw5SDcmxxzNFf8AWYI/4f/JeFY8OUC1ihWo IgIw== X-Forwarded-Encrypted: i=1; AJvYcCUBjorTkUBcDT+HjUogG0o14YUYj4px3q1TB+0hCsO6nYfuBmMRzHmQNJU6kL4YT8emoa1suI2Jp6nN9oBs@lists.postgresql.org X-Gm-Message-State: AOJu0YydaRFS7r1FbX0Z1efcY0nSuwPdLrKKZB5dXy4RjHh/nCUPL/Hy a120k2F+fwz38+hy4D3ambW4nG+Z9nRsaaFqPoMTt9QqqChGpjBK3ThxeHNQfxG5kfXPtBPVUNM 9wFZO159Kam8RXsPq7D2DAi28Rbv3gS4= X-Gm-Gg: AZuq6aLCWI5DVaTyoR/gvI6z61X2SO3Tp0xOVS/9GTmjWWHF62PDOM3UAPHx7umeC/i ZZNZ5RHTytX/fOBOOP4AnsTiIuXclv2D6utdekLi7vv2s1T/jDbAmFQN48rl501Y6S8KRBOqZov g2JelZ7qIdg7nLyHlT+uE5nQ8FHFYn9YJiJJbKIg1se8E7nMOnmhjkcIHcbMZvrHtrS0h9X/8iQ ZpYmr9xdST/kfc6ofsSajY69PTv39A//iUxzq1C+wJ+wrm0VJnahneoZRxPyTFD64Y0 X-Received: by 2002:a2e:bc86:0:b0:383:5c1e:bf00 with SMTP id 38308e7fff4ca-386b68181b5mr28624811fa.14.1770602905618; Sun, 08 Feb 2026 18:08:25 -0800 (PST) MIME-Version: 1.0 References: <48261e54-c4f1-4bde-a4a9-4f3698a6b380@app.fastmail.com> In-Reply-To: From: Gyan Sreejith Date: Sun, 8 Feb 2026 21:08:15 -0500 X-Gm-Features: AZwV_Qj3MKneoXIVv0S7vFy7UF5S_42lQQ1nXLWLxSFO9roeCenx1F0BxO4sxjM Message-ID: Subject: Re: [Proposal] Adding Log File Capability to pg_createsubscriber To: vignesh C Cc: Amit Kapila , Euler Taveira , "kuroda.hayato@fujitsu.com" , "pgsql-hackers@lists.postgresql.org" , Peter Smith Content-Type: multipart/mixed; boundary="0000000000003a5e24064a5a9d38" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003a5e24064a5a9d38 Content-Type: multipart/alternative; boundary="0000000000003a5e23064a5a9d36" --0000000000003a5e23064a5a9d36 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable I was able to make the first two changes that you suggested. However, I was not able to get the test to run with one of the existing replica servers. I have attached the patch for the first two changes. Thank you! Regards, Gyan On Wed, Feb 4, 2026 at 4:44=E2=80=AFAM vignesh C wrot= e: > On Mon, 2 Feb 2026 at 04:35, Gyan Sreejith > wrote: > > > > Thank you! > > > > I have made the suggested changes. In addition, I added a wrapper for > pg_fatal to write to the file and then do everything that pg_fatal would = do. > > I have attached the patch. > > Few comments: > 1) Can we change the macro names: > INFO -> pg_log_info > INFO_HINT -> pg_log_info_hint > DEBUG -> pg_log_debug > FATAL -> pg_fatal > > if required do an #undef and call pg_log_generic in the else similar > to how it is done in pg_backup_utils.h > > +#define INFO(...) do{\ > + if (internal_log_file_fp !=3D NULL) \ > + internal_log_file_write(__VA_ARGS__); \ > + else \ > + pg_log_info(__VA_ARGS__);\ > +} while(0) > + > +#define INFO_HINT(...) do{\ > + if (internal_log_file_fp !=3D NULL) \ > + internal_log_file_write(__VA_ARGS__); \ > + else \ > + pg_log_info_hint(__VA_ARGS__);\ > +} while(0) > + > +#define DEBUG(...) do{\ > + if (internal_log_file_fp !=3D NULL) \ > + internal_log_file_write(__VA_ARGS__); \ > + else \ > + pg_log_debug(__VA_ARGS__);\ > +} while(0) > + > +#define FATAL(...) do{\ > + if (internal_log_file_fp !=3D NULL) \ > + internal_log_file_write(__VA_ARGS__); \ > + pg_fatal(__VA_ARGS__); /* call pg_fatal after writing to logs */ = \ > +} while(0) > > 2) You can keep the variabled in case 'l' handling to keep the scope > accordingly: > + char timestamp[128]; > + struct timeval tval; > + time_t now; > > 3) Instead of creating a new standby and running with -l option, can > you run it with -l for one of the existing tests: > +$node_p->backup('backup_3'); > + > +# Set up node R as a logical replica node > +my $node_r =3D PostgreSQL::Test::Cluster->new('node_r'); > +$node_r->init_from_backup($node_p, 'backup_3', has_streaming =3D> 1); > +$node_r->append_conf( > + 'postgresql.conf', qq[ > +primary_conninfo =3D '$pconnstr dbname=3Dpostgres' > +hot_standby_feedback =3D on > +]); > +$node_r->set_standby_mode(); > + > +# Test that --logdir works for pg_createsubscriber > +command_ok( > + [ > + 'pg_createsubscriber', > + '--verbose', > + '--pgdata' =3D> $node_r->data_dir, > + '--publisher-server' =3D> $pconnstr, > + '--database' =3D> 'postgres', > + '--logdir' =3D> $logdir, > + ], > + 'check for log file creation for pg_createSubscriber'); > + > +# Check that the log files were created > +my @server_log_files =3D glob "$logdir/pg_createsubscriber_server_*.log"= ; > +is( scalar(@server_log_files), 1, " > + pg_createsubscriber_server.log file was created"); > +my @internal_log_files =3D glob > "$logdir/pg_createsubscriber_internal_*.log"; > +is( scalar(@internal_log_files), 1, " > + pg_createsubscriber_internal.log file was created"); > > Regards, > Vignesh > --0000000000003a5e23064a5a9d36 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
I was able to make the first two changes that you suggeste= d. However, I was not able to get the test to run with one of the existing = replica servers. I have attached the patch for the first two changes.
T= hank you!

Regards,
Gyan

<= div class=3D"gmail_quote">
On Wed, Feb= 4, 2026 at 4:44=E2=80=AFAM vignesh C <vignesh21@gmail.com> wrote:
On Mon, 2 Feb 2026 at 04:35, Gya= n Sreejith <gyan.sreejith@gmail.com> wrote:
>
> Thank you!
>
> I have made the suggested changes. In addition, I added a wrapper for = pg_fatal to write to the file and then do everything that pg_fatal would do= .
> I have attached the patch.

Few comments:
1) Can we change the macro names:
INFO -> pg_log_info
INFO_HINT -> pg_log_info_hint
DEBUG -> pg_log_debug
FATAL -> pg_fatal

if required do an #undef and call pg_log_generic in the else similar
to how it is done in pg_backup_utils.h

+#define INFO(...) do{\
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (internal_log_file_fp !=3D NULL) \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0internal_log_file_w= rite(__VA_ARGS__); \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0else \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0pg_log_info(__VA_AR= GS__);\
+} while(0)
+
+#define INFO_HINT(...) do{\
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (internal_log_file_fp !=3D NULL) \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0internal_log_file_w= rite(__VA_ARGS__); \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0else \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0pg_log_info_hint(__= VA_ARGS__);\
+} while(0)
+
+#define DEBUG(...) do{\
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (internal_log_file_fp !=3D NULL) \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0internal_log_file_w= rite(__VA_ARGS__); \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0else \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0pg_log_debug(__VA_A= RGS__);\
+} while(0)
+
+#define FATAL(...) do{\
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (internal_log_file_fp !=3D NULL) \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0internal_log_file_w= rite(__VA_ARGS__); \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0pg_fatal(__VA_ARGS__); /* call pg_fatal after w= riting to logs */ \
+} while(0)

2) You can keep the variabled in case 'l' handling to keep the scop= e
accordingly:
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0char=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 timestamp[128];
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0struct timeval tval= ;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0time_t=C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 now;

3) Instead of creating a new standby and running with -l option, can
you run it with -l for one of the existing tests:
+$node_p->backup('backup_3');
+
+# Set up node R as a logical replica node
+my $node_r =3D PostgreSQL::Test::Cluster->new('node_r');
+$node_r->init_from_backup($node_p, 'backup_3', has_streaming = =3D> 1);
+$node_r->append_conf(
+=C2=A0 =C2=A0 =C2=A0 =C2=A0'postgresql.conf', qq[
+primary_conninfo =3D '$pconnstr dbname=3Dpostgres'
+hot_standby_feedback =3D on
+]);
+$node_r->set_standby_mode();
+
+# Test that --logdir works for pg_createsubscriber
+command_ok(
+=C2=A0 =C2=A0 =C2=A0 =C2=A0[
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'pg_createsubsc= riber',
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'--verbose'= ,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'--pgdata' = =3D> $node_r->data_dir,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'--publisher-se= rver' =3D> $pconnstr,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'--database'= ; =3D> 'postgres',
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'--logdir' = =3D> $logdir,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0],
+=C2=A0 =C2=A0 =C2=A0 =C2=A0'check for log file creation for pg_createS= ubscriber');
+
+# Check that the log files were created
+my @server_log_files =3D glob "$logdir/pg_createsubscriber_server_*.l= og";
+is( scalar(@server_log_files), 1, "
+=C2=A0 =C2=A0 pg_createsubscriber_server.log file was created");
+my @internal_log_files =3D glob "$logdir/pg_createsubscriber_internal= _*.log";
+is( scalar(@internal_log_files), 1, "
+=C2=A0 =C2=A0 pg_createsubscriber_internal.log file was created");
Regards,
Vignesh
--0000000000003a5e23064a5a9d36-- --0000000000003a5e24064a5a9d38 Content-Type: application/x-patch; name="v5-0001-Add-a-new-argument-l-logdir-to-pg_createsubscribe.patch" Content-Disposition: attachment; filename="v5-0001-Add-a-new-argument-l-logdir-to-pg_createsubscribe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlej34pd0 RnJvbSA4ZjMyMzdiMDdkNzJlYjQ0NDNlMDI1YzM4MWZmNWFlNzIyMWE0MTQxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHeWFuIFNyZWVqaXRoIDxneWFuLnNyZWVqaXRoQGdtYWlsLmNv bT4KRGF0ZTogU3VuLCA4IEZlYiAyMDI2IDIwOjU3OjA3IC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2 NV0gQWRkIGEgbmV3IGFyZ3VtZW50IC1sIDxsb2dkaXI+IHRvIHBnX2NyZWF0ZXN1YnNjcmliZXIu CgpFbmFibGluZyB0aGUgb3B0aW9uIHRvIHdyaXRlIG1lc3NhZ2VzIHRvIGxvZyBmaWxlcyBpbiB0 aGUgc3BlY2lmaWVkIGRpcmVjdG9yeS4KQSBuZXcgZGlyZWN0b3J5IGlzIGNyZWF0ZWQgaWYgcmVx dWlyZWQsIGFuZCB0d28gbmV3IGxvZ2ZpbGVzICh3aXRoIHRpbWVzdGFtcHMgaW4gdGhlaXIgbmFt ZXMpIGFyZSBhZGRlZCB0byB0aGUgZGlyZWN0b3J5OgoxLiBwZ19jcmVhdGVzdWJzY3JpYmVyX3Nl cnZlcl90aW1lc3RhbXAubG9nICAtIGNhcHR1cmVzIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gc3RhcnRp bmcgYW5kIHN0b3BwaW5nIHRoZSBzdGFuZGJ5IHNlcnZlci4KMi4gcGdfY3JlYXRlc3Vic2NyaWJl cl9pbnRlcm5hbF90aW1lc3RhbXAubG9nIC0gY2FwdHVyZXMgaW50ZXJuYWwgZGlhZ25vc3RpYyBv dXRwdXQgZnJvbSBwZ19jcmVhdGVzdWJzY3JpYmVyLgoKRm9yIGV4YW1wbGUsIGlmIHdlIHNwZWNp ZnkgLWwgYWJjIGFzIGFuIGFyZ3VtZW50LCBhbmQgaWYgdGhlIHRpbWVzdGFtcCBvbiBydW5uaW5n IGl0IGlzIDIwMjYtMDEtMTktMjAtNDMtMTcuMjA0MjQwLCBhIGRpcmVjdG9yeSBhYmMgaXMgY3Jl YXRlZCBpZiBpdCBkb2Vzbid0IGV4aXN0IGFscmVhZHksIGFuZCB0aGUgZGlyZWN0b3J5IHdpbGwg Y29udGFpbiB0aGUgdHdvIGxvZyBmaWxlcyBwZ19jcmVhdGVzdWJzY3JpYmVyX3NlcnZlcl8yMDI2 LTAxLTE5LTIwLTQzLTE3LjIwNDI0MC5sb2cgYW5kIHBnX2NyZWF0ZXN1YnNjcmliZXJfaW50ZXJu YWxfMjAyNi0wMS0xOS0yMC00My0xNy4yMDQyNDAubG9nCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9w Z19jcmVhdGVzdWJzY3JpYmVyLnNnbWwgICAgIHwgIDIyICsrKwogc3JjL2Jpbi9wZ19iYXNlYmFj a3VwL3BnX2NyZWF0ZXN1YnNjcmliZXIuYyAgIHwgMTYyICsrKysrKysrKysrKysrKysrLQogLi4u L3QvMDQwX3BnX2NyZWF0ZXN1YnNjcmliZXIucGwgICAgICAgICAgICAgIHwgIDM2ICsrKy0KIDMg ZmlsZXMgY2hhbmdlZCwgMjE1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19jcmVhdGVzdWJzY3JpYmVyLnNnbWwgYi9kb2Mvc3Jj L3NnbWwvcmVmL3BnX2NyZWF0ZXN1YnNjcmliZXIuc2dtbAppbmRleCBjZjQ1ZmYzNTczZC4uOGNi NzA0MDM5MzEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfY3JlYXRlc3Vic2NyaWJl ci5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfY3JlYXRlc3Vic2NyaWJlci5zZ21sCkBA IC0xMzYsNiArMTM2LDI4IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICA8L2xpc3Rp dGVtPgogICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgPHRl cm0+PG9wdGlvbj4tbCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZGlyZWN0b3J5PC9y ZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgIDx0ZXJtPjxvcHRpb24+LS1sb2dkaXI9 PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmRpcmVjdG9yeTwvcmVwbGFjZWFibGU+PC9v cHRpb24+PC90ZXJtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBTcGVj aWZ5IHRoZSBuYW1lIG9mIHRoZSBsb2cgZGlyZWN0b3J5LiBBIG5ldyBkaXJlY3RvcnkgaXMgY3Jl YXRlZCB3aXRoIHRoaXMgbmFtZSBpZiBpdCBkb2VzIG5vdCBleGlzdC4gVGhlIGZvbGxvd2luZyB0 d28gbG9nIGZpbGVzIHdpbGwgYmUgY3JlYXRlZCB3aXRoIGEgdW1hc2sgb2YgMDc3IHNvIHRoYXQg YWNjZXNzIGlzIGRpc2FsbG93ZWQgdG8gb3RoZXIgdXNlcnMgYnkgZGVmYXVsdC4gVGhlIHRpbWVz dGFtcCB0aGF0IGlzIGFkZGVkIHRvIHRoZSBuYW1lIHdpbGwgaW5kaWNhdGUgdGhlIHRpbWUgYXQg d2hpY2ggcGdfY3JlYXRlc3Vic2NyaWJlciB3YXMgcnVuLgorICAgICAgIDxpdGVtaXplZGxpc3Q+ CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIHBnX2NyZWF0 ZXN1YnNjcmliZXJfc2VydmVyX3RpbWVzdGFtcC5sb2cgd2hpY2ggY2FwdHVyZXMgbG9ncyByZWxh dGVkIHRvIHN0b3BwaW5nIGFuZCBzdGFydGluZyB0aGUgc3RhbmRieSBzZXJ2ZXIsCisgICAgICAg ICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAg ICAgIDxwYXJhPgorICAgICAgICAgIHBnX2NyZWF0ZXN1YnNjcmliZXJfaW50ZXJuYWxfdGltZXN0 YW1wLmxvZyB3aGljaCBjYXB0dXJlcyBpbnRlcm5hbCBkaWFnbm9zdGljIG91dHB1dCAodmFsaWRh dGlvbnMsIGNoZWNrcywgZXRjLikKKyAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRl bT4KKyAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRl bT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJt PjxvcHRpb24+LW48L29wdGlvbj48L3Rlcm0+CiAgICAgIDx0ZXJtPjxvcHRpb24+LS1kcnktcnVu PC9vcHRpb24+PC90ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2Ny ZWF0ZXN1YnNjcmliZXIuYyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19jcmVhdGVzdWJzY3Jp YmVyLmMKaW5kZXggMmJjODQ1MDVhYWIuLjU5OGNiMDdhMWJmIDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX2Jhc2ViYWNrdXAvcGdfY3JlYXRlc3Vic2NyaWJlci5jCisrKyBiL3NyYy9iaW4vcGdfYmFz ZWJhY2t1cC9wZ19jcmVhdGVzdWJzY3JpYmVyLmMKQEAgLTQ5LDEwICs0OSw0OCBAQAogI2RlZmlu ZSBJTkNMVURFRF9DT05GX0ZJTEUJCQkicGdfY3JlYXRlc3Vic2NyaWJlci5jb25mIgogI2RlZmlu ZSBJTkNMVURFRF9DT05GX0ZJTEVfRElTQUJMRUQJSU5DTFVERURfQ09ORl9GSUxFICIuZGlzYWJs ZWQiCiAKKyNkZWZpbmUgU0VSVkVSX0xPR19GSUxFX05BTUUgInBnX2NyZWF0ZXN1YnNjcmliZXJf c2VydmVyIgorI2RlZmluZSBJTlRFUk5BTF9MT0dfRklMRV9OQU1FICJwZ19jcmVhdGVzdWJzY3Jp YmVyX2ludGVybmFsIgorCisjdW5kZWYgcGdfbG9nX2luZm8KKyNkZWZpbmUgcGdfbG9nX2luZm8o Li4uKSBkb3tcCisJaWYgKGludGVybmFsX2xvZ19maWxlX2ZwICE9IE5VTEwpIFwKKwkJaW50ZXJu YWxfbG9nX2ZpbGVfd3JpdGUoX19WQV9BUkdTX18pOyBcCisJZWxzZSBcCisJCXBnX2xvZ19nZW5l cmljKFBHX0xPR19JTkZPLFBHX0xPR19QUklNQVJZLF9fVkFfQVJHU19fKTtcCit9IHdoaWxlKDAp CisKKyN1bmRlZiBwZ19sb2dfaW5mb19oaW50CisjZGVmaW5lIHBnX2xvZ19pbmZvX2hpbnQoLi4u KSBkb3tcCisJaWYgKGludGVybmFsX2xvZ19maWxlX2ZwICE9IE5VTEwpIFwKKwkJaW50ZXJuYWxf bG9nX2ZpbGVfd3JpdGUoX19WQV9BUkdTX18pOyBcCisJZWxzZSBcCisJCXBnX2xvZ19nZW5lcmlj KFBHX0xPR19JTkZPLCBQR19MT0dfSElOVCwgX19WQV9BUkdTX18pO1wKK30gd2hpbGUoMCkKKwor I3VuZGVmIHBnX2xvZ19kZWJ1ZworI2RlZmluZSBwZ19sb2dfZGVidWcoLi4uKSBkb3tcCisJaWYg KGludGVybmFsX2xvZ19maWxlX2ZwICE9IE5VTEwpIFwKKwkJaW50ZXJuYWxfbG9nX2ZpbGVfd3Jp dGUoX19WQV9BUkdTX18pOyBcCisJZWxzZSBcCisJCWlmICh1bmxpa2VseShfX3BnX2xvZ19sZXZl bCA8PSBQR19MT0dfREVCVUcpKSBcCisJCQlwZ19sb2dfZ2VuZXJpYyhQR19MT0dfREVCVUcsIFBH X0xPR19QUklNQVJZLCBfX1ZBX0FSR1NfXyk7IFwKK30gd2hpbGUoMCkKKworI3VuZGVmIHBnX2Zh dGFsCisjZGVmaW5lIHBnX2ZhdGFsKC4uLikgZG97XAorCWlmIChpbnRlcm5hbF9sb2dfZmlsZV9m cCAhPSBOVUxMKSBcCisJCWludGVybmFsX2xvZ19maWxlX3dyaXRlKF9fVkFfQVJHU19fKTsgXAor CXBnX2xvZ19nZW5lcmljKFBHX0xPR19FUlJPUiwgUEdfTE9HX1BSSU1BUlksIF9fVkFfQVJHU19f KTsgXAorCWV4aXQoMSk7IFwKK30gd2hpbGUoMCkKKworCiAvKiBDb21tYW5kLWxpbmUgb3B0aW9u cyAqLwogc3RydWN0IENyZWF0ZVN1YnNjcmliZXJPcHRpb25zCiB7CiAJY2hhcgkgICAqY29uZmln X2ZpbGU7CS8qIGNvbmZpZ3VyYXRpb24gZmlsZSAqLworCWNoYXIJICAgKmxvZ19kaXI7CQkvKiBs b2cgZGlyZWN0b3J5IG5hbWUgKi8KIAljaGFyCSAgICpwdWJfY29ubmluZm9fc3RyOwkvKiBwdWJs aXNoZXIgY29ubmVjdGlvbiBzdHJpbmcgKi8KIAljaGFyCSAgICpzb2NrZXRfZGlyOwkJLyogZGly ZWN0b3J5IGZvciBVbml4LWRvbWFpbiBzb2NrZXQsIGlmIGFueSAqLwogCWNoYXIJICAgKnN1Yl9w b3J0OwkJLyogc3Vic2NyaWJlciBwb3J0IG51bWJlciAqLwpAQCAtMTQ2LDYgKzE4NCw5IEBAIHN0 YXRpYyB2b2lkIGRyb3BfZXhpc3Rpbmdfc3Vic2NyaXB0aW9uKFBHY29ubiAqY29ubiwgY29uc3Qg Y2hhciAqc3VibmFtZSwKIAkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmRibmFtZSk7CiBzdGF0aWMg dm9pZCBnZXRfcHVibGlzaGVyX2RhdGFiYXNlcyhzdHJ1Y3QgQ3JlYXRlU3Vic2NyaWJlck9wdGlv bnMgKm9wdCwKIAkJCQkJCQkJCWJvb2wgZGJuYW1lc3BlY2lmaWVkKTsKK3N0YXRpYyB2b2lkCisJ CQlpbnRlcm5hbF9sb2dfZmlsZV93cml0ZShjb25zdCBjaGFyICpmb3JtYXQsLi4uKSBfX2F0dHJp YnV0ZV9fKChmb3JtYXQocHJpbnRmLCAxLCAyKSkpOworCiAKICNkZWZpbmUJV0FJVF9JTlRFUlZB TAkxCQkvKiAxIHNlY29uZCAqLwogCkBAIC0xNjcsNiArMjA4LDEwIEBAIHN0YXRpYyBwZ19wcm5n X3N0YXRlIHBybmdfc3RhdGU7CiBzdGF0aWMgY2hhciAqcGdfY3RsX3BhdGggPSBOVUxMOwogc3Rh dGljIGNoYXIgKnBnX3Jlc2V0d2FsX3BhdGggPSBOVUxMOwogCitzdGF0aWMgRklMRSAqaW50ZXJu YWxfbG9nX2ZpbGVfZnAgPSBOVUxMOwkvKiBGaWxlIHB0ciB0byBsb2cgYWxsIG1lc3NhZ2VzIHRv ICovCitzdGF0aWMgY2hhciAqbG9nX3RpbWVzdGFtcCA9IE5VTEw7CS8qIFRpbWVzdGFtcCB0byBi ZSB1c2VkIGluIGFsbCBsb2cgZmlsZQorCQkJCQkJCQkJICogbmFtZXMgKi8KKwogLyogc3RhbmRi eSAvIHN1YnNjcmliZXIgZGF0YSBkaXJlY3RvcnkgKi8KIHN0YXRpYyBjaGFyICpzdWJzY3JpYmVy X2RpciA9IE5VTEw7CiAKQEAgLTE3NCw2ICsyMTksNTAgQEAgc3RhdGljIGJvb2wgcmVjb3Zlcnlf ZW5kZWQgPSBmYWxzZTsKIHN0YXRpYyBib29sIHN0YW5kYnlfcnVubmluZyA9IGZhbHNlOwogc3Rh dGljIGJvb2wgcmVjb3ZlcnlfcGFyYW1zX3NldCA9IGZhbHNlOwogCitzdGF0aWMgdm9pZAoraW50 ZXJuYWxfbG9nX2ZpbGVfd3JpdGUoY29uc3QgY2hhciAqZm9ybWF0LC4uLikKK3sKKwlpZiAoaW50 ZXJuYWxfbG9nX2ZpbGVfZnAgIT0gTlVMTCkKKwl7CisJCXZhX2xpc3QJCWFyZ3M7CisKKwkJdmFf c3RhcnQoYXJncywgZm9ybWF0KTsKKwkJdmZwcmludGYoaW50ZXJuYWxfbG9nX2ZpbGVfZnAsIGZv cm1hdCwgYXJncyk7CisJCWZwcmludGYoaW50ZXJuYWxfbG9nX2ZpbGVfZnAsICJcbiIpOworCQlm Zmx1c2goaW50ZXJuYWxfbG9nX2ZpbGVfZnApOworCQl2YV9lbmQoYXJncyk7CisJfQorfQorCisv KgorICogT3BlbiBhIG5ldyBsb2dmaWxlIHdpdGggcHJvcGVyIHBlcm1pc3Npb25zLgorICogRnJv bSBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N5c2xvZ2dlci5jCisgKi8KK3N0YXRpYyBGSUxFICoK K2xvZ2ZpbGVfb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSkKK3sK KwlGSUxFCSAgICpmaDsKKwltb2RlX3QJCW91bWFzazsKKworCW91bWFzayA9IHVtYXNrKChtb2Rl X3QpICgofihTX0lSVVNSIHwgU19JV1VTUikpICYgKFNfSVJXWFUgfCBTX0lSV1hHIHwgU19JUldY TykpKTsKKwlmaCA9IGZvcGVuKGZpbGVuYW1lLCBtb2RlKTsKKwl1bWFzayhvdW1hc2spOworCisJ aWYgKGZoKQorCXsKKwkJc2V0dmJ1ZihmaCwgTlVMTCwgUEdfSU9MQkYsIDApOworCisjaWZkZWYg V0lOMzIKKwkJLyogdXNlIENSTEYgbGluZSBlbmRpbmdzIG9uIFdpbmRvd3MgKi8KKwkJX3NldG1v ZGUoX2ZpbGVubyhmaCksIF9PX1RFWFQpOworI2VuZGlmCisJfQorCWVsc2UKKwkJcGdfZmF0YWwo ImNvdWxkIG5vdCBvcGVuIGxvZyBmaWxlIFwiJXNcIjogJW0iLAorCQkJCSBmaWxlbmFtZSk7CisK KwlyZXR1cm4gZmg7Cit9CiAKIC8qCiAgKiBDbGVhbiB1cCBvYmplY3RzIGNyZWF0ZWQgYnkgcGdf Y3JlYXRlc3Vic2NyaWJlci4KQEAgLTI2OSw2ICszNTgsMTIgQEAgY2xlYW51cF9vYmplY3RzX2F0 ZXhpdCh2b2lkKQogCiAJaWYgKHN0YW5kYnlfcnVubmluZykKIAkJc3RvcF9zdGFuZGJ5X3NlcnZl cihzdWJzY3JpYmVyX2Rpcik7CisKKwlpZiAoaW50ZXJuYWxfbG9nX2ZpbGVfZnAgIT0gTlVMTCkK Kwl7CisJCWZjbG9zZShpbnRlcm5hbF9sb2dfZmlsZV9mcCk7CisJCWludGVybmFsX2xvZ19maWxl X2ZwID0gTlVMTDsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yODMsNiArMzc4LDcgQEAgdXNh Z2Uodm9pZCkKIAkJCSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFiYXNl cyBhbmQgZGF0YWJhc2VzIHRoYXQgZG9uJ3QgYWxsb3cgY29ubmVjdGlvbnNcbiIpKTsKIAlwcmlu dGYoXygiICAtZCwgLS1kYXRhYmFzZT1EQk5BTUUgICAgICAgICAgIGRhdGFiYXNlIGluIHdoaWNo IHRvIGNyZWF0ZSBhIHN1YnNjcmlwdGlvblxuIikpOwogCXByaW50ZihfKCIgIC1ELCAtLXBnZGF0 YT1EQVRBRElSICAgICAgICAgICAgbG9jYXRpb24gZm9yIHRoZSBzdWJzY3JpYmVyIGRhdGEgZGly ZWN0b3J5XG4iKSk7CisJcHJpbnRmKF8oIiAgLWwsIC0tbG9nZGlyPUxPR0RJUiAgICAgICAgICAg ICBsb2NhdGlvbiBmb3IgdGhlIG5ldyBsb2cgZGlyZWN0b3J5XG4iKSk7CiAJcHJpbnRmKF8oIiAg LW4sIC0tZHJ5LXJ1biAgICAgICAgICAgICAgICAgICBkcnkgcnVuLCBqdXN0IHNob3cgd2hhdCB3 b3VsZCBiZSBkb25lXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXAsIC0tc3Vic2NyaWJlci1wb3J0PVBP UlQgICAgICBzdWJzY3JpYmVyIHBvcnQgbnVtYmVyIChkZWZhdWx0ICVzKVxuIiksIERFRkFVTFRf U1VCX1BPUlQpOwogCXByaW50ZihfKCIgIC1QLCAtLXB1Ymxpc2hlci1zZXJ2ZXI9Q09OTlNUUiAg cHVibGlzaGVyIGNvbm5lY3Rpb24gc3RyaW5nXG4iKSk7CkBAIC03MDIsNiArNzk4LDcgQEAgbW9k aWZ5X3N1YnNjcmliZXJfc3lzaWQoY29uc3Qgc3RydWN0IENyZWF0ZVN1YnNjcmliZXJPcHRpb25z ICpvcHQpCiAJYm9vbAkJY3JjX29rOwogCXN0cnVjdCB0aW1ldmFsIHR2OwogCisJY2hhcgkgICAq b3V0X2ZpbGU7CiAJY2hhcgkgICAqY21kX3N0cjsKIAogCXBnX2xvZ19pbmZvKCJtb2RpZnlpbmcg c3lzdGVtIGlkZW50aWZpZXIgb2Ygc3Vic2NyaWJlciIpOwpAQCAtNzEzLDcgKzgxMCw3IEBAIG1v ZGlmeV9zdWJzY3JpYmVyX3N5c2lkKGNvbnN0IHN0cnVjdCBDcmVhdGVTdWJzY3JpYmVyT3B0aW9u cyAqb3B0KQogCS8qCiAJICogU2VsZWN0IGEgbmV3IHN5c3RlbSBpZGVudGlmaWVyLgogCSAqCi0J ICogWFhYIHRoaXMgY29kZSB3YXMgZXh0cmFjdGVkIGZyb20gQm9vdFN0cmFwWExPRygpLgorCSAq IFhYWCB0aGlzIGNvZGUgd2FzIGV4dHJhY3RlZCBmcm9tIEJvb3RTdHJhcFhwZ19sb2dfaW5mbygp LgogCSAqLwogCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOwogCWNmLT5zeXN0ZW1faWRlbnRpZmll ciA9ICgodWludDY0KSB0di50dl9zZWMpIDw8IDMyOwpAQCAtNzM1LDggKzgzMiwxNCBAQCBtb2Rp Znlfc3Vic2NyaWJlcl9zeXNpZChjb25zdCBzdHJ1Y3QgQ3JlYXRlU3Vic2NyaWJlck9wdGlvbnMg Km9wdCkKIAllbHNlCiAJCXBnX2xvZ19pbmZvKCJydW5uaW5nIHBnX3Jlc2V0d2FsIG9uIHRoZSBz dWJzY3JpYmVyIik7CiAKLQljbWRfc3RyID0gcHNwcmludGYoIlwiJXNcIiAtRCBcIiVzXCIgPiBc IiVzXCIiLCBwZ19yZXNldHdhbF9wYXRoLAotCQkJCQkgICBzdWJzY3JpYmVyX2RpciwgREVWTlVM TCk7CisKKwlpZiAob3B0LT5sb2dfZGlyICE9IE5VTEwpCisJCW91dF9maWxlID0gcHNwcmludGYo IiVzLyVzXyVzLmxvZyIsIG9wdC0+bG9nX2RpciwgU0VSVkVSX0xPR19GSUxFX05BTUUsIGxvZ190 aW1lc3RhbXApOworCWVsc2UKKwkJb3V0X2ZpbGUgPSBERVZOVUxMOworCisJY21kX3N0ciA9IHBz cHJpbnRmKCJcIiVzXCIgLUQgXCIlc1wiID4+IFwiJXNcIiIsIHBnX3Jlc2V0d2FsX3BhdGgsCisJ CQkJCSAgIHN1YnNjcmliZXJfZGlyLCBvdXRfZmlsZSk7CiAKIAlwZ19sb2dfZGVidWcoInBnX3Jl c2V0d2FsIGNvbW1hbmQgaXM6ICVzIiwgY21kX3N0cik7CiAKQEAgLTE2NTAsNiArMTc1MywxMSBA QCBzdGFydF9zdGFuZGJ5X3NlcnZlcihjb25zdCBzdHJ1Y3QgQ3JlYXRlU3Vic2NyaWJlck9wdGlv bnMgKm9wdCwgYm9vbCByZXN0cmljdGVkXwogCWlmIChyZXN0cmljdF9sb2dpY2FsX3dvcmtlcikK IAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdfY3RsX2NtZCwgIiAtbyBcIi1jIG1heF9sb2dpY2Fs X3JlcGxpY2F0aW9uX3dvcmtlcnM9MFwiIik7CiAKKwlpZiAob3B0LT5sb2dfZGlyICE9IE5VTEwp CisJeworCQlhcHBlbmRQUUV4cEJ1ZmZlcihwZ19jdGxfY21kLCAiIC1sICVzLyVzXyVzLmxvZyIs IG9wdC0+bG9nX2RpciwgU0VSVkVSX0xPR19GSUxFX05BTUUsIGxvZ190aW1lc3RhbXApOworCX0K KwogCXBnX2xvZ19kZWJ1ZygicGdfY3RsIGNvbW1hbmQgaXM6ICVzIiwgcGdfY3RsX2NtZC0+ZGF0 YSk7CiAJcmMgPSBzeXN0ZW0ocGdfY3RsX2NtZC0+ZGF0YSk7CiAJcGdfY3RsX3N0YXR1cyhwZ19j dGxfY21kLT5kYXRhLCByYyk7CkBAIC0yMTgxLDYgKzIyODksNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkJeyJhbGwiLCBub19hcmd1bWVudCwgTlVMTCwgJ2EnfSwKIAkJeyJkYXRh YmFzZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnZCd9LAogCQl7InBnZGF0YSIsIHJlcXVp cmVkX2FyZ3VtZW50LCBOVUxMLCAnRCd9LAorCQl7ImxvZ2RpciIsIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCAnbCd9LAogCQl7ImRyeS1ydW4iLCBub19hcmd1bWVudCwgTlVMTCwgJ24nfSwKIAkJ eyJzdWJzY3JpYmVyLXBvcnQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3AnfSwKIAkJeyJw dWJsaXNoZXItc2VydmVyIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdQJ30sCkBAIC0yMjE1 LDYgKzIzMjQsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAljaGFyCSAgICpjb25z aXN0ZW50X2xzbjsKIAogCWNoYXIJCXBpZGZpbGVbTUFYUEdQQVRIXTsKKwljaGFyCSAgICppbnRl cm5hbF9sb2dfZmlsZTsKIAogCXBnX2xvZ2dpbmdfaW5pdChhcmd2WzBdKTsKIAlwZ19sb2dnaW5n X3NldF9sZXZlbChQR19MT0dfV0FSTklORyk7CkBAIC0yMjM5LDYgKzIzNDksNyBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKIAkvKiBEZWZhdWx0IHNldHRpbmdzICovCiAJc3Vic2NyaWJl cl9kaXIgPSBOVUxMOwogCW9wdC5jb25maWdfZmlsZSA9IE5VTEw7CisJb3B0LmxvZ19kaXIgPSBO VUxMOwogCW9wdC5wdWJfY29ubmluZm9fc3RyID0gTlVMTDsKIAlvcHQuc29ja2V0X2RpciA9IE5V TEw7CiAJb3B0LnN1Yl9wb3J0ID0gREVGQVVMVF9TVUJfUE9SVDsKQEAgLTIyNjcsNyArMjM3OCw3 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJZ2V0X3Jlc3RyaWN0ZWRfdG9rZW4o KTsKIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhZDpEOm5wOlA6czp0 OlRVOnYiLAorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhZDpEOmw6bnA6 UDpzOnQ6VFU6diIsCiAJCQkJCQkJbG9uZ19vcHRpb25zLCAmb3B0aW9uX2luZGV4KSkgIT0gLTEp CiAJewogCQlzd2l0Y2ggKGMpCkBAIC0yMjg4LDYgKzIzOTksNDYgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJCQkJc3Vic2NyaWJlcl9kaXIgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJ CQljYW5vbmljYWxpemVfcGF0aChzdWJzY3JpYmVyX2Rpcik7CiAJCQkJYnJlYWs7CisJCQljYXNl ICdsJzoKKwkJCQl7CisJCQkJCWNoYXIJCXRpbWVzdGFtcFsxMjhdOworCQkJCQlzdHJ1Y3QgdGlt ZXZhbCB0dmFsOworCQkJCQl0aW1lX3QJCW5vdzsKKwkJCQkJc3RydWN0IHRtCXRtYnVmOworCisJ CQkJCWdldHRpbWVvZmRheSgmdHZhbCwgTlVMTCk7CisJCQkJCW5vdyA9IHR2YWwudHZfc2VjOwor CQkJCQlzdHJmdGltZSh0aW1lc3RhbXAsIHNpemVvZih0aW1lc3RhbXApLCAiJVktJW0tJWQtJUgt JU0tJVMiLCBsb2NhbHRpbWVfcigmbm93LCAmdG1idWYpKTsKKwkJCQkJLyogYXBwZW5kIG1pY3Jv c2Vjb25kcyAqLworCQkJCQlzbnByaW50Zih0aW1lc3RhbXAgKyBzdHJsZW4odGltZXN0YW1wKSwg c2l6ZW9mKHRpbWVzdGFtcCkgLSBzdHJsZW4odGltZXN0YW1wKSwKKwkJCQkJCQkgIi4lMDZ1Iiwg KHVuc2lnbmVkIGludCkgKHR2YWwudHZfdXNlYykpOworCQkJCQlsb2dfdGltZXN0YW1wID0gcGdf c3RyZHVwKHRpbWVzdGFtcCk7CisKKwkJCQkJb3B0LmxvZ19kaXIgPSBwZ19zdHJkdXAob3B0YXJn KTsKKwkJCQkJY2Fub25pY2FsaXplX3BhdGgob3B0LmxvZ19kaXIpOworCisJCQkJCWlmIChzdGF0 KG9wdC5sb2dfZGlyLCAmc3RhdGJ1ZikgIT0gMCkKKwkJCQkJeworCQkJCQkJaWYgKGVycm5vID09 IEVOT0VOVCkKKwkJCQkJCXsKKwkJCQkJCQlpZiAobWtkaXIob3B0LmxvZ19kaXIsIFNfSVJXWFUp ID09IDApCisJCQkJCQkJCXBnX2xvZ19pbmZvKCJsb2cgZGlyZWN0b3J5IGNyZWF0ZWQiKTsKKwkJ CQkJCQllbHNlIGlmIChlcnJubyA9PSBFQUNDRVMpCisJCQkJCQkJCXBnX2ZhdGFsKCJwZXJtaXNz aW9uIGRlbmllZCB0cnlpbmcgdG8gY3JlYXRlIGxvZyBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIG9w dC5sb2dfZGlyKTsKKwkJCQkJCQllbHNlCisJCQkJCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3Jl YXRlIGxvZyBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIG9wdC5sb2dfZGlyKTsKKwkJCQkJCX0KKwkJ CQkJCWVsc2UgaWYgKGVycm5vID09IEVBQ0NFUykKKwkJCQkJCQlwZ19mYXRhbCgicGVybWlzc2lv biBkZW5pZWQgdHJ5aW5nIHRvIGFjY2VzcyBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIG9wdC5sb2df ZGlyKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlwZ19mYXRhbCgiY291bGQgbm90IGFjY2VzcyBkaXJl Y3RvcnkgXCIlc1wiOiAlbSIsIG9wdC5sb2dfZGlyKTsKKwkJCQkJfQorCQkJCQlpbnRlcm5hbF9s b2dfZmlsZSA9IHBzcHJpbnRmKCIlcy8lc18lcy5sb2ciLCBvcHQubG9nX2RpciwgSU5URVJOQUxf TE9HX0ZJTEVfTkFNRSwgbG9nX3RpbWVzdGFtcCk7CisJCQkJCWlmICgoaW50ZXJuYWxfbG9nX2Zp bGVfZnAgPSBsb2dmaWxlX29wZW4oaW50ZXJuYWxfbG9nX2ZpbGUsICJhIikpID09IE5VTEwpCisJ CQkJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gbG9nIGZpbGUgXCIlc1wiOiAlbSIsIGludGVy bmFsX2xvZ19maWxlKTsKKworCQkJCQlicmVhazsKKwkJCQl9CiAJCQljYXNlICduJzoKIAkJCQlk cnlfcnVuID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTI2MjEsNSArMjc3Miw4IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJcGdfbG9nX2luZm8oIkRvbmUhIik7CiAKKwlpZiAoaW50 ZXJuYWxfbG9nX2ZpbGVfZnAgIT0gTlVMTCkKKwkJZmNsb3NlKGludGVybmFsX2xvZ19maWxlX2Zw KTsKKwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3Qv MDQwX3BnX2NyZWF0ZXN1YnNjcmliZXIucGwgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wNDBf cGdfY3JlYXRlc3Vic2NyaWJlci5wbAppbmRleCAwYzI3ZmNhN2JiNy4uY2RiMTI2MjNiM2IgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzA0MF9wZ19jcmVhdGVzdWJzY3JpYmVy LnBsCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzA0MF9wZ19jcmVhdGVzdWJzY3JpYmVy LnBsCkBAIC0xMyw3ICsxMyw4IEBAIHByb2dyYW1faGVscF9vaygncGdfY3JlYXRlc3Vic2NyaWJl cicpOwogcHJvZ3JhbV92ZXJzaW9uX29rKCdwZ19jcmVhdGVzdWJzY3JpYmVyJyk7CiBwcm9ncmFt X29wdGlvbnNfaGFuZGxpbmdfb2soJ3BnX2NyZWF0ZXN1YnNjcmliZXInKTsKIAotbXkgJGRhdGFk aXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGVtcGRpcjsKK215ICRkYXRhZGlyID0gUG9z dGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRlbXBkaXIgKyAiL2RhdGFkaXIiOworbXkgJGxvZ2RpciA9 IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyICsgIi9sb2dkaXIiOwogCiAjIEdlbmVy YXRlIGEgZGF0YWJhc2Ugd2l0aCBhIG5hbWUgbWFkZSBvZiBhIHJhbmdlIG9mIEFTQ0lJIGNoYXJh Y3RlcnMuCiAjIEV4dHJhY3RlZCBmcm9tIDAwMl9wZ191cGdyYWRlLnBsLgpAQCAtNjI5LDEwICs2 MzAsNDMgQEAgY29tbWFuZF9vaygKICMgbm90IGJlaW5nIHRyYWNrZWQsIHNvbWV0aGluZyB0aGF0 IGlzIHNldCB3aXRoaW4gJG5vZGUtPnN0YXJ0KCkuCiBzeXN0ZW1fbG9nKCdwZ19jdGwnLCAnc3Rv cCcsICctLXBnZGF0YScsICRub2RlX2stPmRhdGFfZGlyKTsKIAorJG5vZGVfcC0+YmFja3VwKCdi YWNrdXBfMycpOworCisjIFNldCB1cCBub2RlIFIgYXMgYSBsb2dpY2FsIHJlcGxpY2Egbm9kZQor bXkgJG5vZGVfciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZV9yJyk7Cisk bm9kZV9yLT5pbml0X2Zyb21fYmFja3VwKCRub2RlX3AsICdiYWNrdXBfMycsIGhhc19zdHJlYW1p bmcgPT4gMSk7Ciskbm9kZV9yLT5hcHBlbmRfY29uZigKKwkncG9zdGdyZXNxbC5jb25mJywgcXFb CitwcmltYXJ5X2Nvbm5pbmZvID0gJyRwY29ubnN0ciBkYm5hbWU9cG9zdGdyZXMnCitob3Rfc3Rh bmRieV9mZWVkYmFjayA9IG9uCitdKTsKKyRub2RlX3ItPnNldF9zdGFuZGJ5X21vZGUoKTsKKwor IyBUZXN0IHRoYXQgLS1sb2dkaXIgd29ya3MgZm9yIHBnX2NyZWF0ZXN1YnNjcmliZXIKK2NvbW1h bmRfb2soCisJWworCQkncGdfY3JlYXRlc3Vic2NyaWJlcicsCisJCSctLXZlcmJvc2UnLAorCQkn LS1wZ2RhdGEnID0+ICRub2RlX3ItPmRhdGFfZGlyLAorCQknLS1wdWJsaXNoZXItc2VydmVyJyA9 PiAkcGNvbm5zdHIsCisJCSctLWRhdGFiYXNlJyA9PiAncG9zdGdyZXMnLAorCQknLS1sb2dkaXIn ID0+ICRsb2dkaXIsCisJXSwKKwknY2hlY2sgZm9yIGxvZyBmaWxlIGNyZWF0aW9uIGZvciBwZ19j cmVhdGVTdWJzY3JpYmVyJyk7CisKKyMgQ2hlY2sgdGhhdCB0aGUgbG9nIGZpbGVzIHdlcmUgY3Jl YXRlZAorbXkgQHNlcnZlcl9sb2dfZmlsZXMgPSBnbG9iICIkbG9nZGlyL3BnX2NyZWF0ZXN1YnNj cmliZXJfc2VydmVyXyoubG9nIjsKK2lzKCBzY2FsYXIoQHNlcnZlcl9sb2dfZmlsZXMpLCAxLCAi CisgICAgcGdfY3JlYXRlc3Vic2NyaWJlcl9zZXJ2ZXIubG9nIGZpbGUgd2FzIGNyZWF0ZWQiKTsK K215IEBpbnRlcm5hbF9sb2dfZmlsZXMgPSBnbG9iICIkbG9nZGlyL3BnX2NyZWF0ZXN1YnNjcmli ZXJfaW50ZXJuYWxfKi5sb2ciOworaXMoIHNjYWxhcihAaW50ZXJuYWxfbG9nX2ZpbGVzKSwgMSwg IgorICAgIHBnX2NyZWF0ZXN1YnNjcmliZXJfaW50ZXJuYWwubG9nIGZpbGUgd2FzIGNyZWF0ZWQi KTsKKwogIyBjbGVhbiB1cAogJG5vZGVfcC0+dGVhcmRvd25fbm9kZTsKICRub2RlX3MtPnRlYXJk b3duX25vZGU7CiAkbm9kZV90LT50ZWFyZG93bl9ub2RlOwogJG5vZGVfZi0+dGVhcmRvd25fbm9k ZTsKKyRub2RlX3ItPnRlYXJkb3duX25vZGU7CiAKIGRvbmVfdGVzdGluZygpOwotLSAKMi40My4w Cgo= --0000000000003a5e24064a5a9d38--