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 1wJrLR-000Mee-1c for pgsql-performance@arkaria.postgresql.org; Mon, 04 May 2026 11:20:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wJrLQ-006nW2-10 for pgsql-performance@arkaria.postgresql.org; Mon, 04 May 2026 11:20:12 +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 1wJqGV-006fdw-11 for pgsql-performance@lists.postgresql.org; Mon, 04 May 2026 10:11:03 +0000 Received: from mail-lj1-f173.google.com ([209.85.208.173]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wJqGT-00000000Qot-0Zvu for pgsql-performance@lists.postgresql.org; Mon, 04 May 2026 10:11:03 +0000 Received: by mail-lj1-f173.google.com with SMTP id 38308e7fff4ca-3937ac12828so13394781fa.0 for ; Mon, 04 May 2026 03:11:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1777889460; cv=none; d=google.com; s=arc-20240605; b=Lhg9N55aobHUzjIlVgpO23WonsqS05bAMTIhwMHJLIlyf3pMxt+rVhZ3iLivcgrUGK 0U32XVy1bBrih2mfeh1RMfLLMoJ1f/RR2V6tg0Z6su54mkQON/zW8Al4iguwqwEaZqCI LGdLULt/sw6EDiqnYDGM19LeLOcWzLSi3J/06iFkR7Y0m9RR9FhhQE3qo92Hqdtdrr2L QD9Mn7Iphekn/jeRyjzdhtvyxSjIXhWYOVxSkGlF+MZMyOchQIM36LtU7MELVk0oTdMi V0hjXSZHva7xSEW6QmDxot89cBzbshp9lONwKMqo5mu9NssYQChu/z5rCxk4ZR9ZofgL 84lw== 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; bh=xhlQWxEME6giTcOKlTyHiTZlZfsqJETKqXBZeXOj/oo=; fh=cUurHARWRQs3I5QK5bUVV1kob1cy8MmJeu1Uj6WUyG4=; b=kzqxTqpXtJaplePcKKTe7tm18en7H82OkYJoqUnaxxLGRW2cKx8/1Ob4Y6i3DxFTW+ IurAbPiGrJkPCjA5xTqmv1sHeT7bmHdEIdm5eCKjA6V8gT2U9Hk8hxwq3QDab/IwKThZ 7rnaZ0tWqcuw+8NZHjUxunufMu6g2cvkUVJ0RGvZSKq1fQ7dXPlH8DVPVXEAqG0HbUSw Mn/eLRbZ+19SS3Ov39ZDXHOT2KBoabbHcKaHMA7Jyy9quok8pWUiq9jDF1LVYpuYhJVS KrWPw8BfHJ0V5bo+R67HluvNu2AmwgKWYmDHknwoZX8qQhZ+Np3ID3MM/RTobGPy6Eqy nRrg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777889460; x=1778494260; 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=xhlQWxEME6giTcOKlTyHiTZlZfsqJETKqXBZeXOj/oo=; b=V8yng+4fGThlL4r3EOC+q/ZLkcAAr9zE6PR5tw6kTPXBJLdlp0x4W0a5rTfgaFomC4 7jQUb7WyivJxheK3+5hPYe5+1AGZWTTtKanJOFYgw87je/LLM4zDr6t3bWYbxBLEyKfx ZuAT5cNERyH73TVfzqkk43roE16WALCJ54vW65cEBK94Ozw7zPi0c+nflIhNRSu1w+hg 0rwsIQx3/UHP77IkCOUObGF7bodBdTl5OyTAjYpPFCRR89Ge9Uah3r+mbvW+Qxy2fOjv A9QlJWWVDNMahkLgJSNbVdIIWYw2LqUgM/At/261ewKLgzthra5QU0cAWHLR/stb4aS2 D2/A== X-Forwarded-Encrypted: i=1; AFNElJ/HG2HL6V1s2G6j68QaCyoTaV0SIThVDXSrS5uoD6VTOrhUGDBpMH+J6RETmpXFVosQ/ff5ZObqIWqk/xcA9OA2bQ==@lists.postgresql.org X-Gm-Message-State: AOJu0Yy8z4/0CN6aVYhhNVnfNfbMBP2HXm7u/djh2zhYRzH6AfYDmfsq /hO6P17pOjNhAc6UFMMILEMKYjNj3HxZIrg4uPDZ9LbaXwZ2jmcSuvnI56OFF5nod3Gijg9oDJL tD6i+rAdE1ykpxeyX9BaufUgQ8lFMJus= X-Gm-Gg: AeBDievZadHYFq7gCUa0EvOCtdGvcI8ggxGX+PMCF3Naw9vUMxOPARexugT09O20i5q aPlVWhasGdF/dueFrXxE6QkKZPWmNaZiMOazylqF0NcT+xCOS6Ue+1yXUyMlfAQmmjVXiCHFwI4 l2ttz0pZoTSYcACIDTK+aSjtFlOn0po4LzkaY2PRO81yATjKzMeRgB1Ylrzmr8LNfdYqE1NaWjD iXkdFQX+zUG8P3sIzGd/EPSlX6HbrT+zfhYYLbKf5OyFO2LdHnLoE3Ob3kLQT5Uo1TcR4XtqvX+ t7139urR5oKpd/kTDKaZQbYmvpWwUYZqxUR0tspLW7WHBPusfA== X-Received: by 2002:a05:651c:1105:b0:391:1570:b6a6 with SMTP id 38308e7fff4ca-3937712910bmr19915501fa.12.1777889459276; Mon, 04 May 2026 03:10:59 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Gerald Drouillard Date: Mon, 4 May 2026 06:10:45 -0400 X-Gm-Features: AVHnY4JW_LolvPh2u7tKbEB27bntq_SzfIZ7p_PTCgNPASVGBXtNzcYT99MHAec Message-ID: Subject: Re: Postgres DB backup is taking too much time To: masheed ullah Cc: Ilya Anfimov , pgsql-performance@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000abcb8b0650fb25c5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000abcb8b0650fb25c5 Content-Type: multipart/alternative; boundary="000000000000abcb8a0650fb25c3" --000000000000abcb8a0650fb25c3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable You could setup a replication to another PG server that is setup on a COW file system like zfs. Then you can take snapshots on the replica. On Mon, May 4, 2026 at 5:59=E2=80=AFAM masheed ullah wrote: > Thank you every one for your output. > > Although pgBeckRest has no more support. > Should I suggest starting testing backup and restore with pgBectRest? > I did not find any 3rd Party tool. > > On Mon, May 4, 2026 at 12:29=E2=80=AFPM Ilya Anfimov wrote: > >> On Sun, May 03, 2026 at 12:42:21PM +0300, masheed ullah wrote: >> > Hi, >> > We have a database of 20TB, and it's taking almost 24 hours to >> complete. >> > While full restore takes 28 hours. Although we have HA enabled with >> > primary and multiple replica's. >> > So we need a solution/tool to reduce the RTO, incase of disk failur= e/ >> > Human error for data/tables deletion. >> > >> > We are using Barman for backup. >> >> First, you'd need engineers to measure -- what's going on. >> Who is the slowest part? The network (most probable)? The post- >> gres replication process? The disk that postgres reads? The bar- >> man itself? Receiver disks/S3 daemon/etc? TLS of one of the >> above? >> Measures is the key. Then the solutions may be searched. >> >> btw, a modern postgres can definitely supply 1GB/s to barman on a >> modern system. This is not a much, and probably could be im- >> proved by special tricks like rsync or manual prefetch or incre- >> mental copies -- however, it's less than 6 hours estimate and >> therefore is fine for you. >> >> > My question is "Are there any tools like ZDLRA appliances for >> Oracle" to >> > reduce the RTO to less than 10 hours". >> > Best Regards, >> > Khattak >> >> >> > > > > --000000000000abcb8a0650fb25c3 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
You could setup a replication to another PG server that is setup = on a COW file system like zfs.
Then you can take snapshots on the replica.

=

On Mon, May 4, 2026 at 5:59=E2=80=AFAM mashee= d ullah <masheedullah@gmail.co= m> wrote:
Thank you every one=C2=A0for your output= .

Although pgBeckRest has no more support.=C2=A0
Should I sugges= t starting testing backup and restore with=C2=A0pgBectRest?
I did not fi= nd any 3rd Party tool.

On Mon, May 4, 2026 at 12:29=E2=80=AFPM Ilya = Anfimov <ilan@t= zirechnoy.com> wrote:
On Sun, May 03, 2026 at 12:42:21PM +0300, masheed ullah wrote:=
>=C2=A0 =C2=A0 Hi,
>=C2=A0 =C2=A0 We have a database of 20TB, and it's taking almost 24= hours to complete.
>=C2=A0 =C2=A0 While full restore takes 28 hours. Although we have HA en= abled with
>=C2=A0 =C2=A0 primary and multiple replica's.
>=C2=A0 =C2=A0 So we need a solution/tool to reduce the RTO, incase of d= isk failure/
>=C2=A0 =C2=A0 Human error for data/tables deletion.
>
>=C2=A0 =C2=A0 We are using Barman for backup.

=C2=A0First, you'd need engineers to measure -- what's going on. =C2=A0Who=C2=A0 is the slowest part? The network (most probable)? The post-=
gres replication process? The disk that postgres reads? The=C2=A0 bar-
man=C2=A0 itself?=C2=A0 Receiver=C2=A0 disks/S3=C2=A0 daemon/etc?=C2=A0 TLS= =C2=A0 of one of the
above?
=C2=A0Measures is the key. Then the solutions may be searched.

btw, a modern postgres can definitely supply 1GB/s to barman on a
modern=C2=A0 system.=C2=A0 =C2=A0This=C2=A0 is=C2=A0 not a much, and probab= ly could be im-
proved by special tricks like rsync or manual prefetch or=C2=A0 incre-
mental=C2=A0 copies=C2=A0 --=C2=A0 however,=C2=A0 it's less than 6 hour= s estimate and
therefore is fine for you.

>=C2=A0 =C2=A0 My question is "Are there any tools like ZDLRA appli= ances for Oracle" to
>=C2=A0 =C2=A0 reduce the RTO to less than 10 hours".
>=C2=A0 =C2=A0 Best Regards,
>=C2=A0 =C2=A0 Khattak






--000000000000abcb8a0650fb25c3-- --000000000000abcb8b0650fb25c5 Content-Type: application/x-shellscript; name="pg-zfs-snapshot.sh" Content-Disposition: attachment; filename="pg-zfs-snapshot.sh" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mor1gwsf0 IyEvYmluL2Jhc2gKIyBwZy16ZnMtc25hcHNob3Quc2ggLSBQb3N0Z3JlU1FMLWF3YXJlIFpGUyBz bmFwc2hvdCBzY3JpcHQgZm9yIHN0YW5kYnkgc2VydmVycwojIFVzZXMgemZzLWF1dG8tc25hcHNo b3QgbmFtaW5nIGNvbnZlbnRpb25zIGZvciBjb25zaXN0ZW5jeQoKc2V0IC1ldW8gcGlwZWZhaWwK CiMgQ29uZmlndXJhdGlvbgpQR19WRVJTSU9OPSIxNyIKUEdfREFUQT0iL3Zhci9saWIvcG9zdGdy ZXNxbC8ke1BHX1ZFUlNJT059L21haW4iClBHX1VTRVI9InBvc3RncmVzIgpQT09MPSJ6ZnNwb29s IgpEQVRBU0VUUz0oInpmc3Bvb2wvZW5jcnlwdGVkL3BnZGF0YSIgInpmc3Bvb2wvZW5jcnlwdGVk L3Bvc3RncmVzLXdhbCIpClNOQVBTSE9UX0xBQkVMX0RJUj0iL2V0Yy9wb3N0Z3Jlcy9zbmFwc2hv dF9sYWJlbHMiICAjIEJhY2t1cCBsYWJlbHMgZm9yIHByaW1hcnkKQ09ORj0vZXRjL3BnLXpmcy1z bmFwc2hvdC5jb25mCgojIFNuYXBzaG90IHJldGVudGlvbiBkZWZhdWx0cyAoY2FuIGJlIG92ZXJy aWRkZW4pCmRlY2xhcmUgLUEgS0VFUF9ERUZBVUxUUz0oCiAgICBbImZyZXF1ZW50Il09NAogICAg WyJob3VybHkiXT0yNAogICAgWyJkYWlseSJdPTMxCiAgICBbIndlZWtseSJdPTgKICAgIFsibW9u dGhseSJdPTEyCiAgICBbInF1YXJ0ZXJseSJdPTI4ICAjIDcgeWVhcnMgKiA0IHF1YXJ0ZXJzCiAg ICBbInllYXJseSJdPTMKKQppZiBbIC1mICIkQ09ORiIgXQp0aGVuCiAgICBzb3VyY2UgIiRDT05G IgpmaQojIENoZWNrIGlmIHJ1bm5pbmcgZnJvbSBjcm9uIChubyBUVFkpCmlmIFsgLXQgMSBdOyB0 aGVuCiAgICBJTlRFUkFDVElWRT0idHJ1ZSIKZWxzZQogICAgSU5URVJBQ1RJVkU9ImZhbHNlIgpm aQoKIyBDb2xvcnMgZm9yIG91dHB1dCAob25seSBpbiBpbnRlcmFjdGl2ZSBtb2RlKQppZiBbWyAi JElOVEVSQUNUSVZFIiA9PSAidHJ1ZSIgXV07IHRoZW4KICAgIFJFRD0nXDAzM1swOzMxbScKICAg IEdSRUVOPSdcMDMzWzA7MzJtJwogICAgWUVMTE9XPSdcMDMzWzE7MzNtJwogICAgTkM9J1wwMzNb MG0nCmVsc2UKICAgIFJFRD0nJwogICAgR1JFRU49JycKICAgIFlFTExPVz0nJwogICAgTkM9JycK ZmkKCiMgRnVuY3Rpb25zCnVzYWdlKCkgewogICAgY2F0IDw8IEVPRgpVc2FnZTogJDAgLWwgTEFC RUwgWy1rIEtFRVBdIFstbl0gWy12XSBbLXFdIFstaF0KClBvc3RncmVTUUwtYXdhcmUgWkZTIHNu YXBzaG90IGZvciBwcmltYXJ5IGFuZCBzdGFuZGJ5IHNlcnZlcnMKCk9wdGlvbnM6CiAgICAtbCBM QUJFTCAgICBTbmFwc2hvdCBsYWJlbCAoZnJlcXVlbnR8aG91cmx5fGRhaWx5fHdlZWtseXxtb250 aGx5fHF1YXJ0ZXJseXx5ZWFybHkpCiAgICAtayBLRUVQICAgICBOdW1iZXIgb2Ygc25hcHNob3Rz IHRvIGtlZXAgKGRlZmF1bHQ6IHZhcmllcyBieSBsYWJlbCkKICAgIC1uICAgICAgICAgIERyeSBy dW4gLSBzaG93IHdoYXQgd291bGQgYmUgZG9uZQogICAgLXYgICAgICAgICAgVmVyYm9zZSBvdXRw dXQKICAgIC1xICAgICAgICAgIFF1aWV0IG1vZGUgLSBzdXBwcmVzcyBhbGwgb3V0cHV0IGV4Y2Vw dCBlcnJvcnMKICAgIC1oICAgICAgICAgIFNob3cgdGhpcyBoZWxwIG1lc3NhZ2UKCkV4YW1wbGVz OgogICAgJDAgLWwgaG91cmx5ICAgICAgICAgICAgICAgICAgICAjIENyZWF0ZSBob3VybHkgc25h cHNob3QsIGtlZXAgMjQKICAgICQwIC1sIGRhaWx5IC1rIDcgICAgICAgICAgICAgICAgIyBDcmVh dGUgZGFpbHkgc25hcHNob3QsIGtlZXAgNwogICAgJDAgLWwgbW9udGhseSAtayA2IC12ICAgICAg ICAgICAjIENyZWF0ZSBtb250aGx5IHNuYXBzaG90LCBrZWVwIDYsIHZlcmJvc2UKCkNyb24gZXhh bXBsZXMgKHJ1bnMgcXVpZXRseSBieSBkZWZhdWx0KToKICAgICovMTUgKiAqICogKiAvdXNyL2xv Y2FsL2Jpbi9wZy16ZnMtc25hcHNob3Quc2ggLWwgZnJlcXVlbnQKICAgIDAgKiAqICogKiAvdXNy L2xvY2FsL2Jpbi9wZy16ZnMtc25hcHNob3Quc2ggLWwgaG91cmx5CiAgICAwIDAgKiAqICogL3Vz ci9sb2NhbC9iaW4vcGctemZzLXNuYXBzaG90LnNoIC1sIGRhaWx5CiAgICAwIDAgKiAqIDAgL3Vz ci9sb2NhbC9iaW4vcGctemZzLXNuYXBzaG90LnNoIC1sIHdlZWtseQogICAgMCAwIDEgKiAqIC91 c3IvbG9jYWwvYmluL3BnLXpmcy1zbmFwc2hvdC5zaCAtbCBtb250aGx5CiAgICAwIDAgMSAxICog L3Vzci9sb2NhbC9iaW4vcGctemZzLXNuYXBzaG90LnNoIC1sIHllYXJseQoKTm90ZTogTW9udGhs eSBzbmFwc2hvdHMgb24gSmFuIDEsIEFwciAxLCBKdWwgMSwgT2N0IDEgYXJlIGF1dG9tYXRpY2Fs bHkgCiAgICAgIGNvbnZlcnRlZCB0byBxdWFydGVybHkgc25hcHNob3RzIGFuZCBrZXB0IGZvciA3 IHllYXJzLgoKUHJpbWFyeSBzZXJ2ZXIgYmFja3VwIGxhYmVscyBhcmUgc3RvcmVkIGluOiAkU05B UFNIT1RfTEFCRUxfRElSCkVPRgp9Cgpsb2coKSB7CiAgICAjIE9ubHkgb3V0cHV0IGluIGludGVy YWN0aXZlIG1vZGUgb3Igd2l0aCB2ZXJib3NlIGZsYWcKICAgIGlmIFtbICIkSU5URVJBQ1RJVkUi ID09ICJ0cnVlIiBdXSB8fCBbWyAiJFZFUkJPU0UiID09ICJ0cnVlIiBdXTsgdGhlbgogICAgICAg IGlmIFtbICIkUVVJRVQiICE9ICJ0cnVlIiBdXTsgdGhlbgogICAgICAgICAgICBlY2hvIC1lICIk e0dSRUVOfVskKGRhdGUgJyslWS0lbS0lZCAlSDolTTolUycpXSR7TkN9ICQqIgogICAgICAgIGZp CiAgICBmaQogICAgc3lzbG9nICJpbmZvIiAiJCoiCn0KCmVycm9yKCkgewogICAgIyBBbHdheXMg b3V0cHV0IGVycm9ycyB0byBzdGRlcnIKICAgIGVjaG8gLWUgIiR7UkVEfVskKGRhdGUgJyslWS0l bS0lZCAlSDolTTolUycpXSBFUlJPUjoke05DfSAkKiIgPiYyCiAgICBzeXNsb2cgImVycm9yIiAi JCoiCn0KCndhcm5pbmcoKSB7CiAgICAjIE9ubHkgb3V0cHV0IHdhcm5pbmdzIGluIGludGVyYWN0 aXZlIG1vZGUgb3Igd2l0aCB2ZXJib3NlIGZsYWcKICAgIGlmIFtbICIkSU5URVJBQ1RJVkUiID09 ICJ0cnVlIiBdXSB8fCBbWyAiJFZFUkJPU0UiID09ICJ0cnVlIiBdXTsgdGhlbgogICAgICAgIGlm IFtbICIkUVVJRVQiICE9ICJ0cnVlIiBdXTsgdGhlbgogICAgICAgICAgICBlY2hvIC1lICIke1lF TExPV31bJChkYXRlICcrJVktJW0tJWQgJUg6JU06JVMnKV0gV0FSTklORzoke05DfSAkKiIgPiYy CiAgICAgICAgZmkKICAgIGZpCiAgICBzeXNsb2cgIndhcm5pbmciICIkKiIKfQoKIyBMb2cgdG8g c3lzbG9nIGZvciBjcm9uIHJ1bnMKc3lzbG9nKCkgewogICAgbG9jYWwgcHJpb3JpdHk9IiQxIgog ICAgbG9jYWwgbWVzc2FnZT0iJDIiCiAgICBsb2dnZXIgLXQgInBnLXpmcy1zbmFwc2hvdCIgLXAg ImxvY2FsMC4ke3ByaW9yaXR5fSIgIiRtZXNzYWdlIgp9CgojIENoZWNrIGlmIHRvZGF5IGlzIHRo ZSBzdGFydCBvZiBhIHF1YXJ0ZXIKaXNfcXVhcnRlcl9zdGFydCgpIHsKICAgIGxvY2FsIG1vbnRo PSQoZGF0ZSArJW0pCiAgICBsb2NhbCBkYXk9JChkYXRlICslZCkKICAgIAogICAgIyBGaXJzdCBk YXkgb2YgSmFuLCBBcHIsIEp1bCwgT2N0CiAgICBpZiBbWyAiJGRheSIgPT0gIjAxIiBdXSAmJiBb WyAiJG1vbnRoIiA9fiBeKDAxfDA0fDA3fDEwKSQgXV07IHRoZW4KICAgICAgICByZXR1cm4gMAog ICAgZmkKICAgIHJldHVybiAxCn0KCiMgRGV0ZWN0IHNlcnZlciByb2xlIChwcmltYXJ5IG9yIHN0 YW5kYnkpCmRldGVjdF9zZXJ2ZXJfcm9sZSgpIHsKICAgIGxvY2FsIGlzX3N0YW5kYnkKICAgIGlz X3N0YW5kYnk9JChzdWRvIC11ICIkUEdfVVNFUiIgcHNxbCAtdEFjICJTRUxFQ1QgcGdfaXNfaW5f cmVjb3ZlcnkoKTsiIDI+L2Rldi9udWxsIHx8IGVjaG8gImVycm9yIikKICAgIAogICAgaWYgW1sg IiRpc19zdGFuZGJ5IiA9PSAiZXJyb3IiIF1dOyB0aGVuCiAgICAgICAgZXJyb3IgIkNvdWxkIG5v dCBjb25uZWN0IHRvIFBvc3RncmVTUUwiCiAgICBleGl0IDEKICAgIGVsaWYgW1sgIiRpc19zdGFu ZGJ5IiA9PSAidCIgXV07IHRoZW4KICAgICAgICBTRVJWRVJfUk9MRT0ic3RhbmRieSIKICAgICAg ICBsb2cgIkRldGVjdGVkIHNlcnZlciByb2xlOiBTVEFOREJZIgogICAgZWxzZQogICAgICAgIFNF UlZFUl9ST0xFPSJwcmltYXJ5IgogICAgICAgIGxvZyAiRGV0ZWN0ZWQgc2VydmVyIHJvbGU6IFBS SU1BUlkiCiAgICBmaQp9CgojIFByaW1hcnkgc2VydmVyOiBzdGFydCBiYWNrdXAgbW9kZQpzdGFy dF9wcmltYXJ5X2JhY2t1cCgpIHsKICAgIGxvY2FsIGJhY2t1cF9uYW1lPSIkMSIKICAgIGxvZyAi U3RhcnRpbmcgUG9zdGdyZVNRTCBiYWNrdXAgbW9kZS4uLiIKICAgIAogICAgQkFDS1VQX1NUQVJU X0lORk89JChzdWRvIC11ICIkUEdfVVNFUiIgcHNxbCAtdEFjICJTRUxFQ1QgcGdfYmFja3VwX3N0 YXJ0KCckYmFja3VwX25hbWUnLCBmYXN0ID0+IHRydWUpOyIgMj4mMSkKICAgIAogICAgaWYgW1sg JD8gLW5lIDAgXV07IHRoZW4KICAgICAgICBlcnJvciAiRmFpbGVkIHRvIHN0YXJ0IGJhY2t1cCBt b2RlOiAkQkFDS1VQX1NUQVJUX0lORk8iCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICAKICAg IGxvZyAiQmFja3VwIG1vZGUgc3RhcnRlZCBzdWNjZXNzZnVsbHkiCiAgICByZXR1cm4gMAp9Cgoj IFByaW1hcnkgc2VydmVyOiBzdG9wIGJhY2t1cCBtb2RlIGFuZCBzYXZlIGxhYmVsCnN0b3BfcHJp bWFyeV9iYWNrdXAoKSB7CiAgICBsb2NhbCBzbmFwc2hvdF9uYW1lPSIkMSIKICAgIGxvZyAiU3Rv cHBpbmcgUG9zdGdyZVNRTCBiYWNrdXAgbW9kZS4uLiIKICAgIAogICAgIyBHZXQgYmFja3VwIHN0 b3AgaW5mbyBpbmNsdWRpbmcgbGFiZWwgZmlsZSBjb250ZW50cwogICAgQkFDS1VQX1NUT1BfSU5G Tz0kKHN1ZG8gLXUgIiRQR19VU0VSIiBwc3FsIC10QWMgIlNFTEVDVCBsYWJlbGZpbGUgRlJPTSBw Z19iYWNrdXBfc3RvcCgpOyIgMj4mMSkKICAgIAogICAgaWYgW1sgJD8gLW5lIDAgXV07IHRoZW4K ICAgICAgICBlcnJvciAiRmFpbGVkIHRvIHN0b3AgYmFja3VwIG1vZGU6ICRCQUNLVVBfU1RPUF9J TkZPIgogICAgICAgIHJldHVybiAxCiAgICBmaQogICAgCiAgICAjIENyZWF0ZSBsYWJlbCBkaXJl Y3RvcnkgaWYgaXQgZG9lc24ndCBleGlzdAogICAgaWYgISBta2RpciAtcCAiJFNOQVBTSE9UX0xB QkVMX0RJUiI7IHRoZW4KICAgICAgICBlcnJvciAiRmFpbGVkIHRvIGNyZWF0ZSBsYWJlbCBkaXJl Y3Rvcnk6ICRTTkFQU0hPVF9MQUJFTF9ESVIiCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICAK ICAgICMgU2F2ZSBiYWNrdXAgbGFiZWwgaW5mbwogICAgbG9jYWwgbGFiZWxfZmlsZT0iJHtTTkFQ U0hPVF9MQUJFTF9ESVJ9LyR7c25hcHNob3RfbmFtZX0ubGFiZWwiCiAgICBlY2hvICIkQkFDS1VQ X1NUT1BfSU5GTyIgPiAiJGxhYmVsX2ZpbGUiCiAgICAKICAgIGlmIFtbIC1mICIkbGFiZWxfZmls ZSIgXV07IHRoZW4KICAgICAgICBsb2cgIkJhY2t1cCBtb2RlIHN0b3BwZWQuIExhYmVsIHNhdmVk IHRvICRsYWJlbF9maWxlIgogICAgZWxzZQogICAgICAgIGVycm9yICJGYWlsZWQgdG8gc2F2ZSBi YWNrdXAgbGFiZWwgdG8gJGxhYmVsX2ZpbGUiCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICAK ICAgIHJldHVybiAwCn0KCiMgU3RhbmRieSBzZXJ2ZXI6IHBhdXNlIFdBTCByZXBsYXkKcGF1c2Vf c3RhbmRieV9yZXBsYXkoKSB7CiAgICBsb2cgIlBhdXNpbmcgV0FMIHJlY292ZXJ5IGZvciBjb25z aXN0ZW50IHNuYXBzaG90Li4uIgogICAgaWYgISBzdWRvIC11ICIkUEdfVVNFUiIgcHNxbCAtYyAi U0VMRUNUIHBnX3dhbF9yZXBsYXlfcGF1c2UoKTsiID4vZGV2L251bGwgMj4mMTsgdGhlbgogICAg ICAgIGVycm9yICJGYWlsZWQgdG8gcGF1c2UgV0FMIHJlY292ZXJ5IgogICAgICAgIHN5c2xvZyAi ZXJyb3IiICJGYWlsZWQgdG8gcGF1c2UgV0FMIHJlY292ZXJ5IgogICAgICAgIHJldHVybiAxCiAg ICBmaQogICAgCiAgICAjIFdhaXQgZm9yIHBhdXNlIHRvIHRha2UgZWZmZWN0CiAgICBsb2NhbCBt YXhfd2FpdD0zMAogICAgbG9jYWwgd2FpdGVkPTAKICAgIHdoaWxlIFtbICR3YWl0ZWQgLWx0ICRt YXhfd2FpdCBdXTsgZG8KICAgICAgICBsb2NhbCBpc19wYXVzZWQKICAgICAgICBpc19wYXVzZWQ9 JChzdWRvIC11ICIkUEdfVVNFUiIgcHNxbCAtdEFjICJTRUxFQ1QgcGdfaXNfd2FsX3JlcGxheV9w YXVzZWQoKTsiIDI+L2Rldi9udWxsKQogICAgICAgIGlmIFtbICIkaXNfcGF1c2VkIiA9PSAidCIg XV07IHRoZW4KICAgICAgICAgICAgbG9nICJXQUwgcmVjb3ZlcnkgcGF1c2VkIHN1Y2Nlc3NmdWxs eSIKICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICBmaQogICAgICAgIHNsZWVwIDEKICAgICAg ICAoKHdhaXRlZCsrKSkKICAgIGRvbmUKICAgIAogICAgZXJyb3IgIldBTCByZWNvdmVyeSBkaWQg bm90IHBhdXNlIHdpdGhpbiAke21heF93YWl0fSBzZWNvbmRzIgogICAgc3lzbG9nICJlcnJvciIg IldBTCByZWNvdmVyeSBkaWQgbm90IHBhdXNlIHdpdGhpbiAke21heF93YWl0fSBzZWNvbmRzIgog ICAgcmV0dXJuIDEKfQoKIyBTdGFuZGJ5IHNlcnZlcjogcmVzdW1lIFdBTCByZXBsYXkKcmVzdW1l X3N0YW5kYnlfcmVwbGF5KCkgewogICAgbG9nICJSZXN1bWluZyBXQUwgcmVjb3ZlcnkuLi4iCiAg ICBpZiAhIHN1ZG8gLXUgIiRQR19VU0VSIiBwc3FsIC1jICJTRUxFQ1QgcGdfd2FsX3JlcGxheV9y ZXN1bWUoKTsiID4vZGV2L251bGwgMj4mMTsgdGhlbgogICAgICAgIHdhcm5pbmcgIkZhaWxlZCB0 byByZXN1bWUgV0FMIHJlY292ZXJ5IC0gbWFudWFsIGludGVydmVudGlvbiBtYXkgYmUgcmVxdWly ZWQiCiAgICAgICAgc3lzbG9nICJ3YXJuaW5nIiAiRmFpbGVkIHRvIHJlc3VtZSBXQUwgcmVjb3Zl cnkiCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICBsb2cgIldBTCByZWNvdmVyeSByZXN1bWVk Igp9CgojIEZ1bmN0aW9uIHRvIGV4dHJhY3QgcG9vbCBuYW1lIGZyb20gZGF0YXNldCBwYXRoCmdl dF9wb29sX25hbWUoKSB7CiAgICBsb2NhbCBkYXRhc2V0PSIkMSIKICAgIAogICAgIyBSZW1vdmUg bGVhZGluZyBzbGFzaCBpZiBwcmVzZW50CiAgICBkYXRhc2V0PSIke2RhdGFzZXQjL30iCiAgICAK ICAgICMgRXh0cmFjdCBmaXJzdCBjb21wb25lbnQgKHBvb2wgbmFtZSkKICAgIGVjaG8gIiR7ZGF0 YXNldCUlLyp9Igp9CgojIENyZWF0ZSBzbmFwc2hvdHMKY3JlYXRlX3NuYXBzaG90cygpIHsKICAg IGxvY2FsIGxhYmVsPSIkMSIKICAgIGxvY2FsIGVmZmVjdGl2ZV9sYWJlbD0iJGxhYmVsIgogICAg bG9jYWwgdGltZXN0YW1wCiAgICB0aW1lc3RhbXA9JChkYXRlICslWS0lbS0lZC0lSCVNJVMpCiAg ICAKICAgICMgQ2hlY2sgaWYgdGhpcyBpcyBhIG1vbnRobHkgc25hcHNob3Qgb24gYSBxdWFydGVy IHN0YXJ0CiAgICBpZiBbWyAiJGxhYmVsIiA9PSAibW9udGhseSIgXV0gJiYgaXNfcXVhcnRlcl9z dGFydDsgdGhlbgogICAgICAgIGVmZmVjdGl2ZV9sYWJlbD0icXVhcnRlcmx5IgogICAgICAgIGxv ZyAiRmlyc3QgZGF5IG9mIHF1YXJ0ZXIgZGV0ZWN0ZWQgLSBjcmVhdGluZyBxdWFydGVybHkgc25h cHNob3QgaW5zdGVhZCBvZiBtb250aGx5IgogICAgZmkKICAgIAogICAgbG9jYWwgc25hcHNob3Rf bmFtZT0iemZzLWF1dG8tc25hcF8ke2VmZmVjdGl2ZV9sYWJlbH0tJHt0aW1lc3RhbXB9IgogICAg CiAgICAjIFByZXBhcmUgZm9yIHNuYXBzaG90IGJhc2VkIG9uIHNlcnZlciByb2xlCiAgICBpZiBb WyAiJFNFUlZFUl9ST0xFIiA9PSAicHJpbWFyeSIgXV07IHRoZW4KICAgICAgICBpZiAhIHN0YXJ0 X3ByaW1hcnlfYmFja3VwICIkc25hcHNob3RfbmFtZSI7IHRoZW4KICAgICAgICAgICAgcmV0dXJu IDEKICAgICAgICBmaQogICAgZWxzZQogICAgICAgIGlmICEgcGF1c2Vfc3RhbmRieV9yZXBsYXk7 IHRoZW4KICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICBmaQogICAgZmkKICAgIAogICAgIyBD cmVhdGUgYXRvbWljIHNuYXBzaG90cwogICAgbG9jYWwgc25hcHNob3RfZmFpbGVkPTAKICAgIGZv ciBkYXRhc2V0IGluICIke0RBVEFTRVRTW0BdfSI7IGRvCiAgICAgICAgbG9jYWwgZnVsbF9zbmFw c2hvdD0iJHtkYXRhc2V0fUAke3NuYXBzaG90X25hbWV9IgogICAgICAgIGxvY2FsIHBvb2xfbmFt ZT0kKGdldF9wb29sX25hbWUgIiR7ZGF0YXNldH0iKQoJenBvb2wgc3luYyAkcG9vbF9uYW1lCiAg ICAgICAgaWYgW1sgIiREUllfUlVOIiA9PSAidHJ1ZSIgXV07IHRoZW4KICAgICAgICAgICAgbG9n ICJbRFJZIFJVTl0gV291bGQgY3JlYXRlIHNuYXBzaG90OiAkZnVsbF9zbmFwc2hvdCIKICAgICAg ICBlbHNlCiAgICAgICAgICAgIGxvZyAiQ3JlYXRpbmcgc25hcHNob3Q6ICRmdWxsX3NuYXBzaG90 IgogICAgICAgICAgICBpZiAhIHpmcyBzbmFwc2hvdCAiJGZ1bGxfc25hcHNob3QiIDI+L2Rldi9u dWxsOyB0aGVuCiAgICAgICAgICAgICAgICBlcnJvciAiRmFpbGVkIHRvIGNyZWF0ZSBzbmFwc2hv dDogJGZ1bGxfc25hcHNob3QiCiAgICAgICAgICAgICAgICBzbmFwc2hvdF9mYWlsZWQ9MQogICAg ICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZmkKICAgICAgICBmaQogICAgZG9uZQogICAg CiAgICAjIENsZWFudXAgYmFzZWQgb24gc2VydmVyIHJvbGUKICAgIGlmIFtbICIkU0VSVkVSX1JP TEUiID09ICJwcmltYXJ5IiBdXTsgdGhlbgogICAgICAgIGlmIFtbICRzbmFwc2hvdF9mYWlsZWQg LWVxIDAgXV0gJiYgW1sgIiREUllfUlVOIiAhPSAidHJ1ZSIgXV07IHRoZW4KICAgICAgICAgICAg c3RvcF9wcmltYXJ5X2JhY2t1cCAiJHNuYXBzaG90X25hbWUiCiAgICAgICAgZWxzZQogICAgICAg ICAgICAjIFRyeSB0byBzdG9wIGJhY2t1cCBtb2RlIGV2ZW4gb24gZmFpbHVyZQogICAgICAgICAg ICBzdWRvIC11ICIkUEdfVVNFUiIgcHNxbCAtYyAiU0VMRUNUIHBnX2JhY2t1cF9zdG9wKCk7IiA+ L2Rldi9udWxsIDI+JjEKICAgICAgICBmaQogICAgZWxzZQogICAgICAgIHJlc3VtZV9zdGFuZGJ5 X3JlcGxheQogICAgZmkKICAgIAogICAgaWYgW1sgJHNuYXBzaG90X2ZhaWxlZCAtZXEgMSBdXTsg dGhlbgogICAgICAgIHJldHVybiAxCiAgICBmaQogICAgCiAgICAjIExvZyBzdWNjZXNzZnVsIGNy ZWF0aW9uIHRvIHN5c2xvZyBpZiBydW5uaW5nIGZyb20gY3JvbgogICAgaWYgW1sgIiRJTlRFUkFD VElWRSIgPT0gImZhbHNlIiBdXSAmJiBbWyAiJERSWV9SVU4iICE9ICJ0cnVlIiBdXTsgdGhlbgog ICAgICAgIGlmIFtbICIkZWZmZWN0aXZlX2xhYmVsIiAhPSAiJGxhYmVsIiBdXTsgdGhlbgogICAg ICAgICAgICBsb2cgIlN1Y2Nlc3NmdWxseSBjcmVhdGVkIHF1YXJ0ZXJseSBzbmFwc2hvdHMgb24g JFNFUlZFUl9ST0xFIChyZXF1ZXN0ZWQ6ICRsYWJlbCkiCiAgICAgICAgZWxzZQogICAgICAgICAg ICBsb2cgIlN1Y2Nlc3NmdWxseSBjcmVhdGVkICRsYWJlbCBzbmFwc2hvdHMgb24gJFNFUlZFUl9S T0xFIgogICAgICAgIGZpCiAgICBmaQogICAgCiAgICAjIFN0b3JlIHRoZSBlZmZlY3RpdmUgbGFi ZWwgZm9yIGNsZWFudXAKICAgIEVGRkVDVElWRV9MQUJFTD0iJGVmZmVjdGl2ZV9sYWJlbCIKICAg IAogICAgcmV0dXJuIDAKfQojIENsZWFuIG9sZCBzbmFwc2hvdHMKaXNfc2NyaXB0X3J1bm5pbmco KSB7CiAgICBsb2NhbCBvdGhlcl9waWRzCiAgICBvdGhlcl9waWRzPSQocGdyZXAgLWYgIiRTQ1JJ UFRfTkFNRSIgMj4vZGV2L251bGwgfCBncmVwIC12ICJeJCRcJCIgfHwgdHJ1ZSkKICAgIAogICAg aWYgW1sgLW4gIiRvdGhlcl9waWRzIiBdXTsgdGhlbgogICAgICAgICNlY2hvICIkb3RoZXJfcGlk cyIgfCBoZWFkIC0xCiAgICAgICAgcmV0dXJuIDAKICAgIGZpCiAgICByZXR1cm4gMQp9CgpjbGVh bnVwX3NuYXBzaG90cygpIHsKICAgIGxvY2FsIGxhYmVsPSIkMSIKICAgIGxvY2FsIGtlZXA9IiQy IgogICAgbG9jYWwgdG90YWxfcmVtb3ZlZD0wCiAgICAKICAgICMgVXNlIHRoZSBlZmZlY3RpdmUg bGFiZWwgaWYgaXQgd2FzIGNoYW5nZWQgKG1vbnRobHkgLT4gcXVhcnRlcmx5KQogICAgaWYgW1sg LW4gIiR7RUZGRUNUSVZFX0xBQkVMOi19IiBdXTsgdGhlbgogICAgICAgIGxhYmVsPSIkRUZGRUNU SVZFX0xBQkVMIgogICAgICAgICMgRm9yIHF1YXJ0ZXJseSBzbmFwc2hvdHMsIGFsd2F5cyB1c2Ug NyB5ZWFycyByZXRlbnRpb24KICAgICAgICBpZiBbWyAiJGxhYmVsIiA9PSAicXVhcnRlcmx5IiBd XTsgdGhlbgogICAgICAgICAgICBrZWVwPSIke0tFRVBfREVGQVVMVFNbcXVhcnRlcmx5XX0iCiAg ICAgICAgICAgIGxvZyAiVXNpbmcgcXVhcnRlcmx5IHJldGVudGlvbjogJGtlZXAgc25hcHNob3Rz ICg3IHllYXJzKSIKICAgICAgICBmaQogICAgZmkKICAgIAogICAgZm9yIGRhdGFzZXQgaW4gIiR7 REFUQVNFVFNbQF19IjsgZG8KICAgICAgICAjIEdldCBsaXN0IG9mIHNuYXBzaG90cyBmb3IgdGhp cyBsYWJlbCwgc29ydGVkIGJ5IGNyZWF0aW9uIHRpbWUKICAgICAgICBsb2NhbCBzbmFwc2hvdHMK ICAgICAgICBzbmFwc2hvdHM9JCh6ZnMgbGlzdCAtdCBzbmFwc2hvdCAtbyBuYW1lIC1zIGNyZWF0 aW9uIC1IICIkZGF0YXNldCIgMj4vZGV2L251bGwgfCBcCiAgICAgICAgICAgICAgICAgICBncmVw ICJAemZzLWF1dG8tc25hcF8ke2xhYmVsfS0iIHx8IHRydWUpCiAgICAgICAgCiAgICAgICAgIyBD b3VudCBzbmFwc2hvdHMgLSBoYW5kbGUgZW1wdHkgY2FzZQogICAgICAgIGxvY2FsIGNvdW50PTAK ICAgICAgICBpZiBbWyAtbiAiJHNuYXBzaG90cyIgXV07IHRoZW4KICAgICAgICAgICAgY291bnQ9 JChlY2hvICIkc25hcHNob3RzIiB8IHdjIC1sKQogICAgICAgIGZpCiAgICAgICAgCiAgICAgICAg aWYgW1sgJGNvdW50IC1ndCAka2VlcCBdXTsgdGhlbgogICAgICAgICAgICBsb2NhbCB0b19kZWxl dGU9JCgoY291bnQgLSBrZWVwKSkKICAgICAgICAgICAgbG9nICJGb3VuZCAkY291bnQgJGxhYmVs IHNuYXBzaG90cyBmb3IgJGRhdGFzZXQsIHJlbW92aW5nICR0b19kZWxldGUgb2xkIG9uZXMiCiAg ICAgICAgICAgIAogICAgICAgICAgICAjIFByb2Nlc3MgZGVsZXRpb25zIHdpdGhvdXQgc3Vic2hl bGwgdG8gcHJlc2VydmUgY291bnRlcgogICAgICAgICAgICB3aGlsZSBJRlM9IHJlYWQgLXIgc25h cHNob3Q7IGRvCiAgICAgICAgICAgICAgICBpZiBbWyAteiAiJHNuYXBzaG90IiBdXTsgdGhlbgog ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICBpZiBbWyAiJERSWV9SVU4iID09ICJ0cnVlIiBdXTsgdGhl bgogICAgICAgICAgICAgICAgICAgIGxvZyAiW0RSWSBSVU5dIFdvdWxkIGRlc3Ryb3kgc25hcHNo b3Q6ICRzbmFwc2hvdCIKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBp ZiBbWyAiJFZFUkJPU0UiID09ICJ0cnVlIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAg ICBsb2cgIkRlc3Ryb3lpbmcgb2xkIHNuYXBzaG90OiAkc25hcHNob3QiCiAgICAgICAgICAgICAg ICAgICAgZmkKICAgICAgICAgICAgICAgICAgICBpZiB6ZnMgZGVzdHJveSAiJHNuYXBzaG90IiAy Pi9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF9yZW1vdmVkPSQo KHRvdGFsX3JlbW92ZWQgKyAxKSkKICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICAgICAgICAgIHdhcm5pbmcgIkZhaWxlZCB0byBkZXN0cm95IHNuYXBzaG90OiAkc25hcHNo b3QiCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAg IGRvbmUgPCA8KGVjaG8gIiRzbmFwc2hvdHMiIHwgaGVhZCAtbiAiJHRvX2RlbGV0ZSIpCiAgICAg ICAgZWxpZiBbWyAiJFZFUkJPU0UiID09ICJ0cnVlIiBdXTsgdGhlbgogICAgICAgICAgICBsb2cg IkZvdW5kICRjb3VudCAkbGFiZWwgc25hcHNob3RzIGZvciAkZGF0YXNldCwga2VlcGluZyBhbGwg KGxpbWl0OiAka2VlcCkiCiAgICAgICAgZmkKICAgIGRvbmUKICAgIAogICAgIyBDbGVhbiB1cCBv bGQgYmFja3VwIGxhYmVscyBmb3IgcHJpbWFyeSBzZXJ2ZXIKICAgIGlmIFtbICIkU0VSVkVSX1JP TEUiID09ICJwcmltYXJ5IiBdXSAmJiBbWyAiJERSWV9SVU4iICE9ICJ0cnVlIiBdXTsgdGhlbgog ICAgICAgIGlmIFtbIC1kICIkU05BUFNIT1RfTEFCRUxfRElSIiBdXTsgdGhlbgogICAgICAgICAg ICBsb2cgIkNsZWFuaW5nIG9sZCBiYWNrdXAgbGFiZWwgZmlsZXMgZnJvbSAkU05BUFNIT1RfTEFC RUxfRElSIgogICAgICAgICAgICBmaW5kICIkU05BUFNIT1RfTEFCRUxfRElSIiAtbmFtZSAiKiR7 bGFiZWx9Ki5sYWJlbCIgLW10aW1lICskKChrZWVwICogMikpIC1kZWxldGUKICAgICAgICBmaQog ICAgZmkKICAgIAogICAgIyBMb2cgY2xlYW51cCB0byBzeXNsb2cgaWYgcnVubmluZyBmcm9tIGNy b24gYW5kIHNuYXBzaG90cyB3ZXJlIHJlbW92ZWQKICAgIGlmIFtbICIkSU5URVJBQ1RJVkUiID09 ICJmYWxzZSIgXV0gJiYgW1sgJHRvdGFsX3JlbW92ZWQgLWd0IDAgXV0gJiYgW1sgIiREUllfUlVO IiAhPSAidHJ1ZSIgXV07IHRoZW4KICAgICAgICBsb2cgIkNsZWFuZWQgdXAgJHRvdGFsX3JlbW92 ZWQgb2xkICRsYWJlbCBzbmFwc2hvdHMgb24gJFNFUlZFUl9ST0xFIgogICAgZmkKfQoKIyBNYWlu IHNjcmlwdAptYWluKCkgewogICAgbG9jYWwgbGFiZWw9IiIKICAgIGxvY2FsIGtlZXA9IiIKICAg IERSWV9SVU49ImZhbHNlIgogICAgVkVSQk9TRT0iZmFsc2UiCiAgICBRVUlFVD0iZmFsc2UiCiAg ICBFRkZFQ1RJVkVfTEFCRUw9IiIKICAgIFNFUlZFUl9ST0xFPSIiCiAgICAKICAgICMgRGVmYXVs dCB0byBxdWlldCBtb2RlIGlmIHJ1bm5pbmcgZnJvbSBjcm9uCiAgICBpZiBbWyAiJElOVEVSQUNU SVZFIiA9PSAiZmFsc2UiIF1dOyB0aGVuCiAgICAgICAgUVVJRVQ9InRydWUiCiAgICBmaQogICAg TE9DS0ZJTEU9Ii92YXIvcnVuLyQoYmFzZW5hbWUgIiQwIikubG9jayIKCiAgICAjIFRyeSB0byBh Y3F1aXJlIGV4Y2x1c2l2ZSBsb2NrLCBleGl0IGlmIGNhbid0CiAgICBleGVjIDIwMD4iJExPQ0tG SUxFIgogICAgaWYgISBmbG9jayAtbiAyMDA7IHRoZW4KCWVjaG8gIkFub3RoZXIgaW5zdGFuY2Ug aXMgYWxyZWFkeSBydW5uaW5nIgogICAgICAgIGV4aXQgMAogICAgZmkKICAgICMgUGFyc2UgYXJn dW1lbnRzCiAgICB3aGlsZSBnZXRvcHRzICJsOms6bnZxaCIgb3B0OyBkbwogICAgICAgIGNhc2Ug JG9wdCBpbgogICAgICAgICAgICBsKQogICAgICAgICAgICAgICAgbGFiZWw9IiRPUFRBUkciCiAg ICAgICAgICAgICAgICA7OwogICAgICAgICAgICBrKQogICAgICAgICAgICAgICAga2VlcD0iJE9Q VEFSRyIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgIG4pCiAgICAgICAgICAgICAgICBE UllfUlVOPSJ0cnVlIgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgdikKICAgICAgICAg ICAgICAgIFZFUkJPU0U9InRydWUiCiAgICAgICAgICAgICAgICBRVUlFVD0iZmFsc2UiICAjIFZl cmJvc2Ugb3ZlcnJpZGVzIHF1aWV0CiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBxKQog ICAgICAgICAgICAgICAgUVVJRVQ9InRydWUiCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAg ICBoKQogICAgICAgICAgICAgICAgdXNhZ2UKICAgICAgICAgICAgICAgIGV4aXQgMAogICAgICAg ICAgICAgICAgOzsKICAgICAgICAgICAgXD8pCiAgICAgICAgICAgICAgICBlcnJvciAiSW52YWxp ZCBvcHRpb246IC0kT1BUQVJHIgogICAgICAgICAgICAgICAgdXNhZ2UKICAgICAgICAgICAgICAg IGV4aXQgMQogICAgICAgICAgICAgICAgOzsKICAgICAgICBlc2FjCiAgICBkb25lCiAgICAKICAg ICMgVmFsaWRhdGUgbGFiZWwKICAgIGlmIFtbIC16ICIkbGFiZWwiIF1dOyB0aGVuCiAgICAgICAg ZXJyb3IgIkxhYmVsIGlzIHJlcXVpcmVkIgogICAgICAgIHVzYWdlCiAgICAgICAgZXhpdCAxCiAg ICBmaQogICAgCiAgICBpZiBbWyAhICIke0tFRVBfREVGQVVMVFNbJGxhYmVsXStleGlzdHN9IiBd XTsgdGhlbgogICAgICAgIGVycm9yICJJbnZhbGlkIGxhYmVsOiAkbGFiZWwiCiAgICAgICAgZXJy b3IgIlZhbGlkIGxhYmVsczogJHshS0VFUF9ERUZBVUxUU1sqXX0iCiAgICAgICAgZXhpdCAxCiAg ICBmaQogICAgCiAgICAjIFNldCBrZWVwIHZhbHVlIGlmIG5vdCBwcm92aWRlZAogICAgaWYgW1sg LXogIiRrZWVwIiBdXTsgdGhlbgogICAgICAgIGtlZXA9IiR7S0VFUF9ERUZBVUxUU1skbGFiZWxd fSIKICAgIGZpCiAgICAKICAgICMgVmFsaWRhdGUga2VlcCB2YWx1ZQogICAgaWYgISBbWyAiJGtl ZXAiID1+IF5bMC05XSskIF1dIHx8IFtbICIka2VlcCIgLWx0IDEgXV07IHRoZW4KICAgICAgICBl cnJvciAiS2VlcCB2YWx1ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIKICAgICAgICBleGl0 IDEKICAgIGZpCiAgICAKICAgIGlmIFtbICIkRFJZX1JVTiIgPT0gInRydWUiIF1dOyB0aGVuCiAg ICAgICAgbG9nICJEUlkgUlVOIE1PREUgLSBObyBjaGFuZ2VzIHdpbGwgYmUgbWFkZSIKICAgIGZp CiAgICBTQ1JJUFRfTkFNRT0iemZzX2Vycm9yX3JlcGFpciIKICAgIGlmIGlzX3NjcmlwdF9ydW5u aW5nOyB0aGVuCglsb2cgInJ1bm5pbmc6ICRTQ1JJUFRfTkFNRSIKICAgICAgICBleGl0IDEKICAg IGZpCiAgICBTQ1JJUFRfTkFNRT0iJChiYXNlbmFtZSAiJDAiKSIKICAgICMgRGV0ZWN0IGlmIHdl J3JlIG9uIHByaW1hcnkgb3Igc3RhbmRieQogICAgZGV0ZWN0X3NlcnZlcl9yb2xlCiAgICAKICAg IGxvZyAiU3RhcnRpbmcgJGxhYmVsIHNuYXBzaG90IChrZWVwPSRrZWVwKSBmb3IgUG9zdGdyZVNR TCAkU0VSVkVSX1JPTEUiCiAgICAKICAgICMgQ3JlYXRlIHNuYXBzaG90cyB3aXRoIGFwcHJvcHJp YXRlIG1ldGhvZAogICAgaWYgISBjcmVhdGVfc25hcHNob3RzICIkbGFiZWwiOyB0aGVuCiAgICAg ICAgZXJyb3IgIlNuYXBzaG90IGNyZWF0aW9uIGZhaWxlZCIKICAgICAgICBleGl0IDEKICAgIGZp CiAgICAKICAgICMgQ2xlYW51cCBvbGQgc25hcHNob3RzCiAgICBjbGVhbnVwX3NuYXBzaG90cyAi JGxhYmVsIiAiJGtlZXAiCiAgICAKICAgIGxvZyAiU25hcHNob3Qgb3BlcmF0aW9uIGNvbXBsZXRl ZCBzdWNjZXNzZnVsbHkgb24gJFNFUlZFUl9ST0xFIgp9CgojIENoZWNrIGlmIHJ1bm5pbmcgYXMg cm9vdAppZiBbWyAkRVVJRCAtbmUgMCBdXTsgdGhlbgogICAgZXJyb3IgIlRoaXMgc2NyaXB0IG11 c3QgYmUgcnVuIGFzIHJvb3QiCiAgICBleGl0IDEKZmkKCiMgUnVuIG1haW4gZnVuY3Rpb24KbWFp biAiJEAi --000000000000abcb8b0650fb25c5--