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.94.2) (envelope-from ) id 1sHR1J-007QcH-Pg for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Jun 2024 16:40:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sHR1H-002cGa-JO for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Jun 2024 16:40:20 +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.94.2) (envelope-from ) id 1sHR1H-002cGS-4n for pgsql-hackers@lists.postgresql.org; Wed, 12 Jun 2024 16:40:20 +0000 Received: from mail-lj1-x235.google.com ([2a00:1450:4864:20::235]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sHR1F-001J4A-5H for pgsql-hackers@postgresql.org; Wed, 12 Jun 2024 16:40:19 +0000 Received: by mail-lj1-x235.google.com with SMTP id 38308e7fff4ca-2eaea28868dso72329351fa.3 for ; Wed, 12 Jun 2024 09:40:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718210416; x=1718815216; 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=y80wZvXz6gEqBGVhp4v3i4VQpcBxRQcyTBL9Qqy/Jes=; b=gA42Su8tGSIoNCwdp6XOLjdSCPeq9yt0PoLpcsNpVjgtDaoTtKSc1ayRVor9BrYWuE Qf8O0xRxynDsbHpjMDPt/kDoLQ6jVUgRyFed7YYN+/G/d/38wWzPnn/XTlMZS1KiFHm4 9SoIqj2C7Z49kqrCCfpsC6mbfSeB8SvchpB3nmq4HcPQ1C2D4VzAssmHUT5rxy0CUtkU timszPdOLF6k1Sn1heGWU6Oey4CgcGHXVMja39NFsroMs7ZiwaYGwFHcV+16Y/Qo+hBk F3WT3sWjWKITsvOGWvPFvqhHdN0AKICV4Fh8lsbj4pLy++094r+cEqzUKzqpywq8+s8E RWcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718210416; x=1718815216; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=y80wZvXz6gEqBGVhp4v3i4VQpcBxRQcyTBL9Qqy/Jes=; b=EjChQAwvpv+Dux7y7+iWOn0TzoDDhT2IMCQTJGl/BrJ3huy78QGaqKEWF6kkwrgZH6 9MrQB2bxDQNPkjhSSvKFQ82Iutv3XaXGaItYPkH9z9vSz4IZg0R//z/uUKg1Byi7WytD CGwXR7AKe+HO1iNRBWvZWw1bHnjEZ/qVqProFc1yky5nC9IYphMd2HykTEaaNszIXDgH GA8vLfmOwXv4LF3vwoP8CrOzz5GL+Ypd6OxQ3WXNSLuQ/YeAH3LMS11/NXwFlnuxbH9M EjMhoP71ttLitTtCXnNECzKENMcD2PBoejRlc/bH6tXphRj8DoW+CbVFcn2rct6i1yhh 5j4w== X-Forwarded-Encrypted: i=1; AJvYcCUvm2MxXsajV01Q3qSkm7UoVQfA3NiyCxLtlTMlmmRw5LZGe+zNjK/ezPWoe5MDe5KMCpbTWLHSRcmrbtqPXyl0sYBHeQGOnDplu0RZ X-Gm-Message-State: AOJu0YzBHIHIegxPx94KECJBaULE+nrzy5Dy0s69nQ5oWPwvQkw3kHpD DIWNet6yW5KcHG9kCkDOEtd0JRdunIZbAKnmXGn7163NHSIchAmUm2JQJOMraXIbTcGiQqSSv/T V3KqXFYY4qkCzCZ0M67s/lpX6p998Ew== X-Google-Smtp-Source: AGHT+IEFsF8U34tIVYucNVh0cLyWH3pVBxaXAG5cxGhdkFjePWLeyro9dUx0fe26y0mPgKbV5x3NLhLjf6Iib9XfKsM= X-Received: by 2002:a2e:9d90:0:b0:2e2:a99a:4c4 with SMTP id 38308e7fff4ca-2ebfca47599mr17990731fa.47.1718210415820; Wed, 12 Jun 2024 09:40:15 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Bharath Rupireddy Date: Wed, 12 Jun 2024 22:10:03 +0530 Message-ID: Subject: Re: Use WALReadFromBuffers in more places To: Nitin Jadhav Cc: Jingtang Zhang , PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000007c2381061ab40938" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007c2381061ab40938 Content-Type: multipart/alternative; boundary="0000000000007c237f061ab40936" --0000000000007c237f061ab40936 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Sat, Jun 8, 2024 at 5:24=E2=80=AFPM Nitin Jadhav wrote: > > I spent some time examining the patch. Here are my observations from the review. Thanks. > - I believe there=E2=80=99s no need for an extra variable =E2=80=98nbytes= =E2=80=99 in this > context. We can repurpose the =E2=80=98count=E2=80=99 variable for the sa= me function. > If necessary, we might think about renaming =E2=80=98count=E2=80=99 to = =E2=80=98nbytes=E2=80=99. 'count' variable can't be altered once determined as the page_read callbacks need to return the total number of bytes read. However, I ended up removing 'nbytes' like in the attached v2 patch. > - The operations performed by logical_read_xlog_page() and > read_local_xlog_page_guts() are identical. It might be beneficial to > create a shared function to minimize code repetition. IMO, creating another function to just wrap two other functions doesn't seem good to me. I attached v2 patches for further review. No changes in 0002 patch. -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --0000000000007c237f061ab40936 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

On Sat, Jun 8, 2024 at 5:24=E2=80=AFPM Nitin Jadhav <nitinjad= havpostgres@gmail.com> wrote:
>
> I spent some time examining the patch. Here are my observations from t= he review.

Thanks.

> - I believe there=E2=80=99s no need for an extra variable =E2=80=98nby= tes=E2=80=99 in this
> context. We can repurpose the =E2=80=98count=E2=80=99 variable for the= same function.
> If necessary, we might think about renaming =E2=80=98count=E2=80=99 to= =E2=80=98nbytes=E2=80=99.

'count' variable can't be altered once determined as the page_r= ead callbacks need to return the total number of bytes read. However, I end= ed up removing 'nbytes' like in the attached v2 patch.

> - The operations performed by logical_read_xlog_page() and
> read_local_xlog_page_guts() are identical. It might be beneficial to > create a shared function to minimize code repetition.

IMO, creating another function to just wrap two other functions doesn't= seem good to me.

I attached v2 patches for further review. No changes in 0002 patch.

--
Bharath Rupireddy
PostgreSQL Contributors Team
RDS Open Source Databases
Amazon Web Services: https://aws.amazon.com
--0000000000007c237f061ab40936-- --0000000000007c2381061ab40938 Content-Type: application/x-patch; name="v2-0001-Use-WALReadFromBuffers-in-more-places.patch" Content-Disposition: attachment; filename="v2-0001-Use-WALReadFromBuffers-in-more-places.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lxbz2u710 RnJvbSA2OTAyYjIwN2NmNzQ5NzM5NjQ5M2FlZjM2OWE5ZTI3NTkwMGE4NmU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTIgSnVuIDIwMjQgMTQ6NDY6MTYgKzAw MDAKU3ViamVjdDogW1BBVENIIHYyIDEvMl0gVXNlIFdBTFJlYWRGcm9tQnVmZmVycyBpbiBtb3Jl IHBsYWNlcwoKQ29tbWl0IDkxZjJjYWUgaW50cm9kdWNlZCBXQUxSZWFkRnJvbUJ1ZmZlcnMsIGFu ZCB1c2VkIGl0IG9ubHkgZm9yCnBoeXNpY2FsIHJlcGxpY2F0aW9uIHdhbHNlbmRlcnMuIFRoZXJl IGFyZSBjb3VwbGUgb2Ygb3RoZXIgY2FsbGVycwp0aGF0IHVzZSByZWFkX2xvY2FsX3hsb2dfcGFn ZSBwYWdlX3JlYWQgY2FsbGJhY2sgYW5kIGxvZ2ljYWwKcmVwbGljYXRpb24gd2Fsc2VuZGVycyBj YW4gYWxzbyBiZW5lZml0IHJlYWRpbmcgV0FMIGZyb20gV0FMCmJ1ZmZlcnMgdXNpbmcgdGhlIG5l dyBmdW5jdGlvbi4gVGhpcyBjb21taXQgdXNlcyB0aGUgbmV3IGZ1bmN0aW9uCmZvciB0aGVzZSBj YWxsZXJzLgoKQXV0aG9yOiBCaGFyYXRoIFJ1cGlyZWRkeQpSZXZpZXdlZC1ieTogSmluZ3Rhbmcg WmhhbmcsIE5pdGluIEphZGhhdgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9y Zy9tZXNzYWdlLWlkL0NBTGoyQUNWZkYyVWo5Tm9GeS01bTk4SE50akhwdUQxN0VERTl0d1ZlSm5n LWpUQWU3QSU0MG1haWwuZ21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZ3V0aWxzLmMgfCAxMCArKysrKysrKystCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxz ZW5kZXIuYyAgICB8IDEzICsrKysrKysrKystLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0 aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9ndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d1dGls cy5jCmluZGV4IDUyOTViODVmZTAuLjI0YTdlZjA0NzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2d1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2d1dGlscy5jCkBAIC04OTIsNiArODkyLDcgQEAgcmVhZF9sb2NhbF94bG9nX3BhZ2Vf Z3V0cyhYTG9nUmVhZGVyU3RhdGUgKnN0YXRlLCBYTG9nUmVjUHRyIHRhcmdldFBhZ2VQdHIsCiAJ aW50CQkJY291bnQ7CiAJV0FMUmVhZEVycm9yIGVycmluZm87CiAJVGltZUxpbmVJRAljdXJyVExJ OworCVNpemUJCXJieXRlczsKIAogCWxvYyA9IHRhcmdldFBhZ2VQdHIgKyByZXFMZW47CiAKQEAg LTEwMDQsNyArMTAwNSwxNCBAQCByZWFkX2xvY2FsX3hsb2dfcGFnZV9ndXRzKFhMb2dSZWFkZXJT dGF0ZSAqc3RhdGUsIFhMb2dSZWNQdHIgdGFyZ2V0UGFnZVB0ciwKIAkJY291bnQgPSByZWFkX3Vw dG8gLSB0YXJnZXRQYWdlUHRyOwogCX0KIAotCWlmICghV0FMUmVhZChzdGF0ZSwgY3VyX3BhZ2Us IHRhcmdldFBhZ2VQdHIsIGNvdW50LCB0bGksCisJLyogYXR0ZW1wdCB0byByZWFkIFdBTCBmcm9t IFdBTCBidWZmZXJzIGZpcnN0ICovCisJcmJ5dGVzID0gV0FMUmVhZEZyb21CdWZmZXJzKGN1cl9w YWdlLCB0YXJnZXRQYWdlUHRyLCBjb3VudCwgY3VyclRMSSk7CisJY3VyX3BhZ2UgKz0gcmJ5dGVz OworCXRhcmdldFBhZ2VQdHIgKz0gcmJ5dGVzOworCisJLyogbm93IHJlYWQgdGhlIHJlbWFpbmlu ZyBXQUwgZnJvbSBXQUwgZmlsZSAqLworCWlmICgoY291bnQgLSByYnl0ZXMpID4gMCAmJgorCQkh V0FMUmVhZChzdGF0ZSwgY3VyX3BhZ2UsIHRhcmdldFBhZ2VQdHIsIChjb3VudCAtIHJieXRlcyks IHRsaSwKIAkJCQkgJmVycmluZm8pKQogCQlXQUxSZWFkUmFpc2VFcnJvcigmZXJyaW5mbyk7CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKaW5kZXggYzYyM2IwN2NmMC4uYmQwZGVjZWYz ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKKysrIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKQEAgLTEwNTYsNiArMTA1Niw3IEBA IGxvZ2ljYWxfcmVhZF94bG9nX3BhZ2UoWExvZ1JlYWRlclN0YXRlICpzdGF0ZSwgWExvZ1JlY1B0 ciB0YXJnZXRQYWdlUHRyLCBpbnQgcmVxCiAJV0FMUmVhZEVycm9yIGVycmluZm87CiAJWExvZ1Nl Z05vCXNlZ25vOwogCVRpbWVMaW5lSUQJY3VyclRMSTsKKwlTaXplCQlyYnl0ZXM7CiAKIAkvKgog CSAqIE1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBXQUwgYXZhaWxhYmxlIGJlZm9yZSByZXRyaWV2 aW5nIHRoZSBjdXJyZW50CkBAIC0xMDkyLDExICsxMDkzLDE3IEBAIGxvZ2ljYWxfcmVhZF94bG9n X3BhZ2UoWExvZ1JlYWRlclN0YXRlICpzdGF0ZSwgWExvZ1JlY1B0ciB0YXJnZXRQYWdlUHRyLCBp bnQgcmVxCiAJZWxzZQogCQljb3VudCA9IGZsdXNocHRyIC0gdGFyZ2V0UGFnZVB0cjsJLyogcGFy dCBvZiB0aGUgcGFnZSBhdmFpbGFibGUgKi8KIAotCS8qIG5vdyBhY3R1YWxseSByZWFkIHRoZSBk YXRhLCB3ZSBrbm93IGl0J3MgdGhlcmUgKi8KLQlpZiAoIVdBTFJlYWQoc3RhdGUsCisJLyogYXR0 ZW1wdCB0byByZWFkIFdBTCBmcm9tIFdBTCBidWZmZXJzIGZpcnN0ICovCisJcmJ5dGVzID0gV0FM UmVhZEZyb21CdWZmZXJzKGN1cl9wYWdlLCB0YXJnZXRQYWdlUHRyLCBjb3VudCwgY3VyclRMSSk7 CisJY3VyX3BhZ2UgKz0gcmJ5dGVzOworCXRhcmdldFBhZ2VQdHIgKz0gcmJ5dGVzOworCisJLyog bm93IHJlYWQgdGhlIHJlbWFpbmluZyBXQUwgZnJvbSBXQUwgZmlsZSAqLworCWlmICgoY291bnQg LSByYnl0ZXMpID4gMCAmJgorCQkhV0FMUmVhZChzdGF0ZSwKIAkJCQkgY3VyX3BhZ2UsCiAJCQkJ IHRhcmdldFBhZ2VQdHIsCi0JCQkJIGNvdW50LAorCQkJCSAoY291bnQgLSByYnl0ZXMpLAogCQkJ CSBjdXJyVExJLAkJLyogUGFzcyB0aGUgY3VycmVudCBUTEkgYmVjYXVzZSBvbmx5CiAJCQkJCQkJ CSAqIFdhbFNuZFNlZ21lbnRPcGVuIGNvbnRyb2xzIHdoZXRoZXIgbmV3IFRMSQogCQkJCQkJCQkg KiBpcyBuZWVkZWQuICovCi0tIAoyLjM0LjEKCg== --0000000000007c2381061ab40938 Content-Type: application/x-patch; name="v2-0002-Add-test-module-to-demonstrate-reading-from-WAL-b.patch" Content-Disposition: attachment; filename="v2-0002-Add-test-module-to-demonstrate-reading-from-WAL-b.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lxbz2xxc1 RnJvbSA2YWNhNzg1NjIwODkwN2QyZmJkZTU4ZDUwN2U0YTQ4MzE5YTYxNGFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTIgSnVuIDIwMjQgMTQ6NTU6MzEgKzAw MDAKU3ViamVjdDogW1BBVENIIHYyIDIvMl0gQWRkIHRlc3QgbW9kdWxlIHRvIGRlbW9uc3RyYXRl IHJlYWRpbmcgZnJvbSBXQUwKIGJ1ZmZlcnMgcGF0dGVybnMuCgpoaXMgY29tbWl0IGFkZHMgYSB0 ZXN0IG1vZHVsZSB0byBkZW1vbnN0cmF0ZSBhIGZldyBwYXR0ZXJucyBmb3IKcmVhZGluZyBmcm9t IFdBTCBidWZmZXJzIHVzaW5nIFdBTFJlYWRGcm9tQnVmZmVycyBhZGRlZCBieSBjb21taXQKOTFm MmNhZTdhNGUuCgoxLiBUaGlzIG1vZHVsZSBjb250YWlucyBhIHRlc3QgZnVuY3Rpb24gdG8gcmVh ZCB0aGUgV0FMIHRoYXQncwpmdWxseSBjb3BpZWQgdG8gV0FMIGJ1ZmZlcnMuIFdoZXRoZXIgb3Ig bm90IHRoZSBXQUwgaXMgZnVsbHkKY29waWVkIHRvIFdBTCBidWZmZXJzIGlzIGVuc3VyZWQgYnkg V2FpdFhMb2dJbnNlcnRpb25zVG9GaW5pc2gKYmVmb3JlIFdBTFJlYWRGcm9tQnVmZmVycy4KCjIu IFRoaXMgbW9kdWxlIGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIHhsb2dyZWFkZXIgcGFn ZV9yZWFkCmNhbGxiYWNrIHRvIHJlYWQgdW5mbHVzaGVkL25vdC15ZXQtZmx1c2hlZCBXQUwgZGly ZWN0bHkgZnJvbSBXQUwKYnVmZmVycy4KCkF1dGhvcjogQmhhcmF0aCBSdXBpcmVkZHkKRGlzY3Vz c2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUZpVE4tc0U3Q0pu LVpGaiUyQi0wV3Y2VE55dHZfZnA0biUyQmVDc3pzcHhKM210Nzd0NWlnJTQwbWFpbC5nbWFpbC5j b20KRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUxq MkFDVmZGMlVqOU5vRnktNW05OEhOdGpIcHVEMTdFREU5dHdWZUpuZy1qVEFlN0ElNDBtYWlsLmdt YWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyAgICAgICAgICAg ICB8ICAgMyArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlYWRlci5jICAgICAg IHwgICAzICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oICAgICAgICAgICAgICAgICAgICAg fCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwg ICAxICsKIHNyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICB8ICAg MSArCiAuLi4vbW9kdWxlcy9yZWFkX3dhbF9mcm9tX2J1ZmZlcnMvLmdpdGlnbm9yZSAgfCAgIDQg KwogLi4uL21vZHVsZXMvcmVhZF93YWxfZnJvbV9idWZmZXJzL01ha2VmaWxlICAgIHwgIDIzICsr CiAuLi4vbW9kdWxlcy9yZWFkX3dhbF9mcm9tX2J1ZmZlcnMvbWVzb24uYnVpbGQgfCAgMzMgKysK IC4uLi9yZWFkX3dhbF9mcm9tX2J1ZmZlcnMtLTEuMC5zcWwgICAgICAgICAgICB8ICAzNyArKwog Li4uL3JlYWRfd2FsX2Zyb21fYnVmZmVycy5jICAgICAgICAgICAgICAgICAgIHwgMzE4ICsrKysr KysrKysrKysrKysrKwogLi4uL3JlYWRfd2FsX2Zyb21fYnVmZmVycy5jb250cm9sICAgICAgICAg ICAgIHwgICA0ICsKIC4uLi9yZWFkX3dhbF9mcm9tX2J1ZmZlcnMvdC8wMDFfYmFzaWMucGwgICAg ICB8IDExMSArKysrKysKIDEyIGZpbGVzIGNoYW5nZWQsIDUzNiBpbnNlcnRpb25zKCspLCAzIGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvcmVhZF93YWxf ZnJvbV9idWZmZXJzLy5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1 bGVzL3JlYWRfd2FsX2Zyb21fYnVmZmVycy9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvcmVhZF93YWxfZnJvbV9idWZmZXJzL21lc29uLmJ1aWxkCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9yZWFkX3dhbF9mcm9tX2J1ZmZlcnMvcmVhZF93 YWxfZnJvbV9idWZmZXJzLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9k dWxlcy9yZWFkX3dhbF9mcm9tX2J1ZmZlcnMvcmVhZF93YWxfZnJvbV9idWZmZXJzLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3JlYWRfd2FsX2Zyb21fYnVmZmVycy9yZWFk X3dhbF9mcm9tX2J1ZmZlcnMuY29udHJvbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21v ZHVsZXMvcmVhZF93YWxfZnJvbV9idWZmZXJzL3QvMDAxX2Jhc2ljLnBsCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZy5jCmluZGV4IDMzMGUwNThjNWYuLjdlMmY3ODc3NDMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9nLmMKQEAgLTY5OSw3ICs2OTksNiBAQCBzdGF0aWMgdm9pZCBSZXNlcnZlWExv Z0luc2VydExvY2F0aW9uKGludCBzaXplLCBYTG9nUmVjUHRyICpTdGFydFBvcywKIAkJCQkJCQkJ CSAgWExvZ1JlY1B0ciAqRW5kUG9zLCBYTG9nUmVjUHRyICpQcmV2UHRyKTsKIHN0YXRpYyBib29s IFJlc2VydmVYTG9nU3dpdGNoKFhMb2dSZWNQdHIgKlN0YXJ0UG9zLCBYTG9nUmVjUHRyICpFbmRQ b3MsCiAJCQkJCQkJICBYTG9nUmVjUHRyICpQcmV2UHRyKTsKLXN0YXRpYyBYTG9nUmVjUHRyIFdh aXRYTG9nSW5zZXJ0aW9uc1RvRmluaXNoKFhMb2dSZWNQdHIgdXB0byk7CiBzdGF0aWMgY2hhciAq R2V0WExvZ0J1ZmZlcihYTG9nUmVjUHRyIHB0ciwgVGltZUxpbmVJRCB0bGkpOwogc3RhdGljIFhM b2dSZWNQdHIgWExvZ0J5dGVQb3NUb1JlY1B0cih1aW50NjQgYnl0ZXBvcyk7CiBzdGF0aWMgWExv Z1JlY1B0ciBYTG9nQnl0ZVBvc1RvRW5kUmVjUHRyKHVpbnQ2NCBieXRlcG9zKTsKQEAgLTE0OTUs NyArMTQ5NCw3IEBAIFdBTEluc2VydExvY2tVcGRhdGVJbnNlcnRpbmdBdChYTG9nUmVjUHRyIGlu c2VydGluZ0F0KQogICogdW5pbml0aWFsaXplZCBwYWdlKSwgYW5kIHRoZSBpbnNlcnRlciBtaWdo dCBuZWVkIHRvIGV2aWN0IGFuIG9sZCBXQUwgYnVmZmVyCiAgKiB0byBtYWtlIHJvb20gZm9yIGEg bmV3IG9uZSwgd2hpY2ggaW4gdHVybiByZXF1aXJlcyBXQUxXcml0ZUxvY2suCiAgKi8KLXN0YXRp YyBYTG9nUmVjUHRyCitYTG9nUmVjUHRyCiBXYWl0WExvZ0luc2VydGlvbnNUb0ZpbmlzaChYTG9n UmVjUHRyIHVwdG8pCiB7CiAJdWludDY0CQlieXRlcG9zOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlYWRlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZ3JlYWRlci5jCmluZGV4IDM3ZDJhNTc5NjEuLjEyZGRkZjY0Y2MgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWFkZXIuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVhZGVyLmMKQEAgLTEwMzMsNyArMTAzMyw4IEBAIFJlYWRQ YWdlSW50ZXJuYWwoWExvZ1JlYWRlclN0YXRlICpzdGF0ZSwgWExvZ1JlY1B0ciBwYWdlcHRyLCBp bnQgcmVxTGVuKQogCSAqIHJlY29yZCBpcy4gIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gY2hlY2sg dGhlIGFkZGl0aW9uYWwgaWRlbnRpZmljYXRpb24KIAkgKiBpbmZvIHRoYXQgaXMgcHJlc2VudCBp biB0aGUgZmlyc3QgcGFnZSdzICJsb25nIiBoZWFkZXIuCiAJICovCi0JaWYgKHRhcmdldFNlZ05v ICE9IHN0YXRlLT5zZWcud3Nfc2Vnbm8gJiYgdGFyZ2V0UGFnZU9mZiAhPSAwKQorCWlmIChzdGF0 ZS0+c2VnLndzX3NlZ25vICE9IDAgJiYKKwkJdGFyZ2V0U2VnTm8gIT0gc3RhdGUtPnNlZy53c19z ZWdubyAmJiB0YXJnZXRQYWdlT2ZmICE9IDApCiAJewogCQlYTG9nUmVjUHRyCXRhcmdldFNlZ21l bnRQdHIgPSBwYWdlcHRyIC0gdGFyZ2V0UGFnZU9mZjsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3hsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmgKaW5kZXggMWExZjEx YTk0My4uMzZiZjkwY2Y1OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCkBAIC0yNTIsNiArMjUyLDcgQEAgZXh0ZXJu IFhMb2dSZWNQdHIgR2V0TGFzdEltcG9ydGFudFJlY1B0cih2b2lkKTsKIAogZXh0ZXJuIHZvaWQg U2V0V2FsV3JpdGVyU2xlZXBpbmcoYm9vbCBzbGVlcGluZyk7CiAKK2V4dGVybiBYTG9nUmVjUHRy IFdhaXRYTG9nSW5zZXJ0aW9uc1RvRmluaXNoKFhMb2dSZWNQdHIgdXB0byk7CiBleHRlcm4gU2l6 ZSBXQUxSZWFkRnJvbUJ1ZmZlcnMoY2hhciAqZHN0YnVmLCBYTG9nUmVjUHRyIHN0YXJ0cHRyLCBT aXplIGNvdW50LAogCQkJCQkJCSAgIFRpbWVMaW5lSUQgdGxpKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKaW5kZXgg MjU2Nzk5ZjUyMC4uYzM5YjQwN2U1YiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtl ZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCkBAIC0xMiw2ICsxMiw3IEBAIFNV QkRJUlMgPSBcCiAJCSAgZHVtbXlfc2VjbGFiZWwgXAogCQkgIGxpYnBxX3BpcGVsaW5lIFwKIAkJ ICBwbHNhbXBsZSBcCisJCSAgcmVhZF93YWxfZnJvbV9idWZmZXJzIFwKIAkJICBzcGdpc3RfbmFt ZV9vcHMgXAogCQkgIHRlc3RfYmxvb21maWx0ZXIgXAogCQkgIHRlc3RfY29weV9jYWxsYmFja3Mg XApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21v ZHVsZXMvbWVzb24uYnVpbGQKaW5kZXggZDhmZTA1OWQyMy4uMjIyZmExY2Q3MiAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL21l c29uLmJ1aWxkCkBAIC0xMCw2ICsxMCw3IEBAIHN1YmRpcignaW5qZWN0aW9uX3BvaW50cycpCiBz dWJkaXIoJ2xkYXBfcGFzc3dvcmRfZnVuYycpCiBzdWJkaXIoJ2xpYnBxX3BpcGVsaW5lJykKIHN1 YmRpcigncGxzYW1wbGUnKQorc3ViZGlyKCdyZWFkX3dhbF9mcm9tX2J1ZmZlcnMnKQogc3ViZGly KCdzcGdpc3RfbmFtZV9vcHMnKQogc3ViZGlyKCdzc2xfcGFzc3BocmFzZV9jYWxsYmFjaycpCiBz dWJkaXIoJ3Rlc3RfYmxvb21maWx0ZXInKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9y ZWFkX3dhbF9mcm9tX2J1ZmZlcnMvLmdpdGlnbm9yZSBiL3NyYy90ZXN0L21vZHVsZXMvcmVhZF93 YWxfZnJvbV9idWZmZXJzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uNWRjYjNmZjk3MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv cmVhZF93YWxfZnJvbV9idWZmZXJzLy5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBACisjIEdlbmVy YXRlZCBzdWJkaXJlY3RvcmllcworL2xvZy8KKy9yZXN1bHRzLworL3RtcF9jaGVjay8KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvcmVhZF93YWxfZnJvbV9idWZmZXJzL01ha2VmaWxlIGIv c3JjL3Rlc3QvbW9kdWxlcy9yZWFkX3dhbF9mcm9tX2J1ZmZlcnMvTWFrZWZpbGUKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOWU1N2E4MzdmOQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvcmVhZF93YWxfZnJvbV9idWZmZXJzL01ha2VmaWxlCkBAIC0w LDAgKzEsMjMgQEAKKyMgc3JjL3Rlc3QvbW9kdWxlcy9yZWFkX3dhbF9mcm9tX2J1ZmZlcnMvTWFr ZWZpbGUKKworTU9EVUxFX2JpZyA9IHJlYWRfd2FsX2Zyb21fYnVmZmVycworT0JKUyA9IFwKKwkk KFdJTjMyUkVTKSBcCisJcmVhZF93YWxfZnJvbV9idWZmZXJzLm8KK1BHRklMRURFU0MgPSAicmVh ZF93YWxfZnJvbV9idWZmZXJzIC0gdGVzdCBtb2R1bGUgdG8gcmVhZCBXQUwgZnJvbSBXQUwgYnVm ZmVycyIKKworRVhURU5TSU9OID0gcmVhZF93YWxfZnJvbV9idWZmZXJzCitEQVRBID0gcmVhZF93 YWxfZnJvbV9idWZmZXJzLS0xLjAuc3FsCisKK1RBUF9URVNUUyA9IDEKKworaWZkZWYgVVNFX1BH WFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAt LXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IHNyYy90ZXN0L21vZHVsZXMv cmVhZF93YWxfZnJvbV9idWZmZXJzCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVk ZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNk aXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3JlYWRfd2FsX2Zyb21fYnVmZmVycy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21v ZHVsZXMvcmVhZF93YWxfZnJvbV9idWZmZXJzL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjNmYWMwMGQ2MTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3JlYWRfd2FsX2Zyb21fYnVmZmVycy9tZXNvbi5idWlsZApAQCAtMCwwICsx LDMzIEBACisjIENvcHlyaWdodCAoYykgMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKworcmVhZF93YWxfZnJvbV9idWZmZXJzX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3Jl YWRfd2FsX2Zyb21fYnVmZmVycy5jJywKKykKKworaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3Mn CisgIHJlYWRfd2FsX2Zyb21fYnVmZmVyc19zb3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3 aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUnLCAncmVhZF93YWxfZnJvbV9i dWZmZXJzJywKKyAgICAnLS1GSUxFREVTQycsICdyZWFkX3dhbF9mcm9tX2J1ZmZlcnMgLSB0ZXN0 IG1vZHVsZSB0byByZWFkIFdBTCBmcm9tIFdBTCBidWZmZXJzJyxdKQorZW5kaWYKKworcmVhZF93 YWxfZnJvbV9idWZmZXJzID0gc2hhcmVkX21vZHVsZSgncmVhZF93YWxfZnJvbV9idWZmZXJzJywK KyAgcmVhZF93YWxfZnJvbV9idWZmZXJzX3NvdXJjZXMsCisgIGt3YXJnczogcGdfdGVzdF9tb2Rf YXJncywKKykKK3Rlc3RfaW5zdGFsbF9saWJzICs9IHJlYWRfd2FsX2Zyb21fYnVmZmVycworCit0 ZXN0X2luc3RhbGxfZGF0YSArPSBmaWxlcygKKyAgJ3JlYWRfd2FsX2Zyb21fYnVmZmVycy5jb250 cm9sJywKKyAgJ3JlYWRfd2FsX2Zyb21fYnVmZmVycy0tMS4wLnNxbCcsCispCisKK3Rlc3RzICs9 IHsKKyAgJ25hbWUnOiAncmVhZF93YWxfZnJvbV9idWZmZXJzJywKKyAgJ3NkJzogbWVzb24uY3Vy cmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisg ICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX2Jhc2ljLnBsJywKKyAgICBd LAorICB9LAorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9yZWFkX3dhbF9mcm9tX2J1 ZmZlcnMvcmVhZF93YWxfZnJvbV9idWZmZXJzLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy9y ZWFkX3dhbF9mcm9tX2J1ZmZlcnMvcmVhZF93YWxfZnJvbV9idWZmZXJzLS0xLjAuc3FsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjcyZDA1NTIyZmMKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3JlYWRfd2FsX2Zyb21fYnVmZmVycy9yZWFkX3dhbF9m cm9tX2J1ZmZlcnMtLTEuMC5zcWwKQEAgLTAsMCArMSwzNyBAQAorLyogc3JjL3Rlc3QvbW9kdWxl cy9yZWFkX3dhbF9mcm9tX2J1ZmZlcnMvcmVhZF93YWxfZnJvbV9idWZmZXJzLS0xLjAuc3FsICov CisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFu IHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gcmVhZF93 YWxfZnJvbV9idWZmZXJzIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworLS0KKy0tIHJlYWRf d2FsX2Zyb21fYnVmZmVycygpCistLQorLS0gU1FMIGZ1bmN0aW9uIHRvIHJlYWQgV0FMIGZyb20g V0FMIGJ1ZmZlcnMuIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCistLQorQ1JFQVRFIEZV TkNUSU9OIHJlYWRfd2FsX2Zyb21fYnVmZmVycyhJTiBsc24gcGdfbHNuLCBJTiBieXRlc190b19y ZWFkIGludCwKKyAgICBieXRlc19yZWFkIE9VVCBpbnQpCitBUyAnTU9EVUxFX1BBVEhOQU1FJywg J3JlYWRfd2FsX2Zyb21fYnVmZmVycycKK0xBTkdVQUdFIEMgU1RSSUNUOworCistLQorLS0gZ2V0 X3dhbF9yZWNvcmRzX2luZm9fZnJvbV9idWZmZXJzKCkKKy0tCistLSBTUUwgZnVuY3Rpb24gdG8g Z2V0IGluZm8gb2YgV0FMIHJlY29yZHMgYXZhaWxhYmxlIGluIFdBTCBidWZmZXJzLgorLS0KK0NS RUFURSBGVU5DVElPTiBnZXRfd2FsX3JlY29yZHNfaW5mb19mcm9tX2J1ZmZlcnMoSU4gc3RhcnRf bHNuIHBnX2xzbiwKKyAgICBJTiBlbmRfbHNuIHBnX2xzbiwKKyAgICBPVVQgc3RhcnRfbHNuIHBn X2xzbiwKKyAgICBPVVQgZW5kX2xzbiBwZ19sc24sCisgICAgT1VUIHByZXZfbHNuIHBnX2xzbiwK KyAgICBPVVQgeGlkIHhpZCwKKyAgICBPVVQgcmVzb3VyY2VfbWFuYWdlciB0ZXh0LAorICAgIE9V VCByZWNvcmRfdHlwZSB0ZXh0LAorICAgIE9VVCByZWNvcmRfbGVuZ3RoIGludDQsCisgICAgT1VU IG1haW5fZGF0YV9sZW5ndGggaW50NCwKKyAgICBPVVQgZnBpX2xlbmd0aCBpbnQ0LAorICAgIE9V VCBkZXNjcmlwdGlvbiB0ZXh0LAorICAgIE9VVCBibG9ja19yZWYgdGV4dAorKQorUkVUVVJOUyBT RVRPRiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAnZ2V0X3dhbF9yZWNvcmRzX2luZm9f ZnJvbV9idWZmZXJzJworTEFOR1VBR0UgQyBTVFJJQ1QgUEFSQUxMRUwgU0FGRTsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvcmVhZF93YWxfZnJvbV9idWZmZXJzL3JlYWRfd2FsX2Zyb21f YnVmZmVycy5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZWFkX3dhbF9mcm9tX2J1ZmZlcnMvcmVhZF93 YWxfZnJvbV9idWZmZXJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u ZWQzM2ExNDEyNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvcmVhZF93YWxf ZnJvbV9idWZmZXJzL3JlYWRfd2FsX2Zyb21fYnVmZmVycy5jCkBAIC0wLDAgKzEsMzE4IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcmVhZF93YWxfZnJvbV9idWZmZXJzLmMKKyAqCQlU ZXN0IG1vZHVsZSB0byByZWFkIFdBTCBmcm9tIFdBTCBidWZmZXJzLgorICoKKyAqIFBvcnRpb25z IENvcHlyaWdodCAoYykgMTk5Ni0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2 ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJc3JjL3Rlc3Qv bW9kdWxlcy9yZWFkX3dhbF9mcm9tX2J1ZmZlcnMvcmVhZF93YWxfZnJvbV9idWZmZXJzLmMKKyAq IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1 ZGUgImFjY2Vzcy94bG9nLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCIKKyNp bmNsdWRlICJhY2Nlc3MveGxvZ3JlYWRlci5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVjb3Zl cnkuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9wZ19sc24uaCIKKworUEdf TU9EVUxFX01BR0lDOworCitzdGF0aWMgaW50CXJlYWRfZnJvbV93YWxfYnVmZmVycyhYTG9nUmVh ZGVyU3RhdGUgKnN0YXRlLCBYTG9nUmVjUHRyIHRhcmdldFBhZ2VQdHIsCisJCQkJCQkJCSAgaW50 IHJlcUxlbiwgWExvZ1JlY1B0ciB0YXJnZXRSZWNQdHIsCisJCQkJCQkJCSAgY2hhciAqY3VyX3Bh Z2UpOworCitzdGF0aWMgWExvZ1JlY29yZCAqUmVhZE5leHRYTG9nUmVjb3JkKFhMb2dSZWFkZXJT dGF0ZSAqeGxvZ3JlYWRlcik7CitzdGF0aWMgdm9pZCBHZXRXQUxSZWNvcmRJbmZvKFhMb2dSZWFk ZXJTdGF0ZSAqcmVjb3JkLCBEYXR1bSAqdmFsdWVzLAorCQkJCQkJCSBib29sICpudWxscywgdWlu dDMyIG5jb2xzKTsKK3N0YXRpYyB2b2lkIEdldFdBTFJlY29yZHNJbmZvKEZ1bmN0aW9uQ2FsbElu Zm8gZmNpbmZvLAorCQkJCQkJCSAgWExvZ1JlY1B0ciBzdGFydF9sc24sCisJCQkJCQkJICBYTG9n UmVjUHRyIGVuZF9sc24pOworCisvKgorICogU1FMIGZ1bmN0aW9uIHRvIHJlYWQgV0FMIGZyb20g V0FMIGJ1ZmZlcnMuIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCisgKi8KK1BHX0ZVTkNU SU9OX0lORk9fVjEocmVhZF93YWxfZnJvbV9idWZmZXJzKTsKK0RhdHVtCityZWFkX3dhbF9mcm9t X2J1ZmZlcnMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlYTG9nUmVjUHRyCXN0YXJ0cHRyID0gUEdf R0VUQVJHX0xTTigwKTsKKwlpbnQzMgkJY291bnQgPSBQR19HRVRBUkdfSU5UMzIoMSk7CisJU2l6 ZQkJcmVhZDsKKwljaGFyCSAgICpkYXRhID0gcGFsbG9jMChjb3VudCk7CisJWExvZ1JlY1B0cgl1 cHRvID0gc3RhcnRwdHIgKyBjb3VudDsKKwlYTG9nUmVjUHRyCWluc2VydF9wb3MgPSBHZXRYTG9n SW5zZXJ0UmVjUHRyKCk7CisJVGltZUxpbmVJRAl0bGkgPSBHZXRXQUxJbnNlcnRpb25UaW1lTGlu ZSgpOworCisJLyoKKwkgKiBUaGUgcmVxdWVzdGVkIFdBTCBtYXkgYmUgdmVyeSByZWNlbnQsIHNv IHdhaXQgZm9yIGFueSBpbi1wcm9ncmVzcyBXQUwKKwkgKiBpbnNlcnRpb25zIHRvIFdBTCBidWZm ZXJzIHRvIGZpbmlzaC4KKwkgKi8KKwlpZiAodXB0byA+IGluc2VydF9wb3MpCisJeworCQlYTG9n UmVjUHRyCXdyaXR0ZW5VcHRvID0gV2FpdFhMb2dJbnNlcnRpb25zVG9GaW5pc2godXB0byk7CisK KwkJdXB0byA9IE1pbih1cHRvLCB3cml0dGVuVXB0byk7CisJCWNvdW50ID0gdXB0byAtIHN0YXJ0 cHRyOworCX0KKworCXJlYWQgPSBXQUxSZWFkRnJvbUJ1ZmZlcnMoZGF0YSwgc3RhcnRwdHIsIGNv dW50LCB0bGkpOworCisJcGZyZWUoZGF0YSk7CisKKwlQR19SRVRVUk5fSU5UMzIocmVhZCk7Cit9 CisKKy8qCisgKiBYTG9nUmVhZGVyUm91dGluZS0+cGFnZV9yZWFkIGNhbGxiYWNrIGZvciByZWFk aW5nIFdBTCBmcm9tIFdBTCBidWZmZXJzLgorICovCitzdGF0aWMgaW50CityZWFkX2Zyb21fd2Fs X2J1ZmZlcnMoWExvZ1JlYWRlclN0YXRlICpzdGF0ZSwgWExvZ1JlY1B0ciB0YXJnZXRQYWdlUHRy LAorCQkJCQkgIGludCByZXFMZW4sIFhMb2dSZWNQdHIgdGFyZ2V0UmVjUHRyLAorCQkJCQkgIGNo YXIgKmN1cl9wYWdlKQoreworCVhMb2dSZWNQdHIJcmVhZF91cHRvLAorCQkJCWxvYzsKKwlUaW1l TGluZUlECXRsaSA9IEdldFdBTEluc2VydGlvblRpbWVMaW5lKCk7CisJU2l6ZQkJY291bnQ7CisJ U2l6ZQkJcmVhZCA9IDA7CisKKwlsb2MgPSB0YXJnZXRQYWdlUHRyICsgcmVxTGVuOworCisJLyog TG9vcCB3YWl0aW5nIGZvciB4bG9nIHRvIGJlIGF2YWlsYWJsZSBpZiBuZWNlc3NhcnkgKi8KKwl3 aGlsZSAoMSkKKwl7CisJCXJlYWRfdXB0byA9IEdldFhMb2dJbnNlcnRSZWNQdHIoKTsKKworCQlp ZiAobG9jIDw9IHJlYWRfdXB0bykKKwkJCWJyZWFrOworCisJCVdhaXRYTG9nSW5zZXJ0aW9uc1Rv RmluaXNoKGxvYyk7CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwkJcGdfdXNsZWVwKDEw MDBMKTsKKwl9CisKKwlpZiAodGFyZ2V0UGFnZVB0ciArIFhMT0dfQkxDS1NaIDw9IHJlYWRfdXB0 bykKKwl7CisJCS8qCisJCSAqIG1vcmUgdGhhbiBvbmUgYmxvY2sgYXZhaWxhYmxlOyByZWFkIG9u bHkgdGhhdCBibG9jaywgaGF2ZSBjYWxsZXIKKwkJICogY29tZSBiYWNrIGlmIHRoZXkgbmVlZCBt b3JlLgorCQkgKi8KKwkJY291bnQgPSBYTE9HX0JMQ0tTWjsKKwl9CisJZWxzZSBpZiAodGFyZ2V0 UGFnZVB0ciArIHJlcUxlbiA+IHJlYWRfdXB0bykKKwl7CisJCS8qIG5vdCBlbm91Z2ggZGF0YSB0 aGVyZSAqLworCQlyZXR1cm4gLTE7CisJfQorCWVsc2UKKwl7CisJCS8qIGVub3VnaCBieXRlcyBh dmFpbGFibGUgdG8gc2F0aXNmeSB0aGUgcmVxdWVzdCAqLworCQljb3VudCA9IHJlYWRfdXB0byAt IHRhcmdldFBhZ2VQdHI7CisJfQorCisJLyogcmVhZCBXQUwgZnJvbSBXQUwgYnVmZmVycyAqLwor CXJlYWQgPSBXQUxSZWFkRnJvbUJ1ZmZlcnMoY3VyX3BhZ2UsIHRhcmdldFBhZ2VQdHIsIGNvdW50 LCB0bGkpOworCisJaWYgKHJlYWQgIT0gY291bnQpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJy bXNnKCJjb3VsZCBub3QgcmVhZCBmdWxseSBmcm9tIFdBTCBidWZmZXJzOyBleHBlY3RlZCAlbHUs IHJlYWQgJWx1IiwKKwkJCQkJICAgY291bnQsIHJlYWQpKTsKKworCXJldHVybiBjb3VudDsKK30K KworLyoKKyAqIEdldCBpbmZvIG9mIGFsbCBXQUwgcmVjb3JkcyBiZXR3ZWVuIHN0YXJ0IExTTiBh bmQgZW5kIExTTi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFuZCBpdHMgaGVscGVycyBiZWxvdyBh cmUgc2ltaWxhciB0byBwZ193YWxpbnNwZWN0J3MKKyAqIHBnX2dldF93YWxfcmVjb3Jkc19pbmZv KCkgZXhjZXB0IHRoYXQgaXQgd2lsbCBnZXQgaW5mbyBvZiBXQUwgcmVjb3JkcworICogYXZhaWxh YmxlIGluIFdBTCBidWZmZXJzLgorICovCitQR19GVU5DVElPTl9JTkZPX1YxKGdldF93YWxfcmVj b3Jkc19pbmZvX2Zyb21fYnVmZmVycyk7CitEYXR1bQorZ2V0X3dhbF9yZWNvcmRzX2luZm9fZnJv bV9idWZmZXJzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJWExvZ1JlY1B0cglzdGFydF9sc24gPSBQ R19HRVRBUkdfTFNOKDApOworCVhMb2dSZWNQdHIJZW5kX2xzbiA9IFBHX0dFVEFSR19MU04oMSk7 CisKKwkvKgorCSAqIFZhbGlkYXRlIHN0YXJ0IGFuZCBlbmQgTFNOcyBjb21pbmcgZnJvbSB0aGUg ZnVuY3Rpb24gaW5wdXRzLgorCSAqCisJICogUmVhZGluZyBXQUwgYmVsb3cgdGhlIGZpcnN0IHBh Z2Ugb2YgdGhlIGZpcnN0IHNlZ21lbnRzIGlzbid0IGFsbG93ZWQuCisJICogVGhpcyBpcyBhIGJv b3RzdHJhcCBXQUwgcGFnZSBhbmQgdGhlIHBhZ2VfcmVhZCBjYWxsYmFjayBmYWlscyB0byByZWFk CisJICogaXQuCisJICovCisJaWYgKHN0YXJ0X2xzbiA8IFhMT0dfQkxDS1NaKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJtc2coImNvdWxkIG5vdCByZWFkIFdBTCBhdCBMU04gJVgvJVgiLAor CQkJCQkJTFNOX0ZPUk1BVF9BUkdTKHN0YXJ0X2xzbikpKSk7CisKKwlpZiAoc3RhcnRfbHNuID4g ZW5kX2xzbikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJXQUwgc3RhcnQgTFNOIG11c3QgYmUgbGVz cyB0aGFuIGVuZCBMU04iKSkpOworCisJR2V0V0FMUmVjb3Jkc0luZm8oZmNpbmZvLCBzdGFydF9s c24sIGVuZF9sc24pOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIFJlYWQgbmV4 dCBXQUwgcmVjb3JkLgorICovCitzdGF0aWMgWExvZ1JlY29yZCAqCitSZWFkTmV4dFhMb2dSZWNv cmQoWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyKQoreworCVhMb2dSZWNvcmQgKnJlY29yZDsK KwljaGFyCSAgICplcnJvcm1zZzsKKworCXJlY29yZCA9IFhMb2dSZWFkUmVjb3JkKHhsb2dyZWFk ZXIsICZlcnJvcm1zZyk7CisKKwlpZiAocmVjb3JkID09IE5VTEwpCisJeworCQlpZiAoZXJyb3Jt c2cpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJtc2coImNvdWxkIG5vdCByZWFkIFdBTCBh dCAlWC8lWDogJXMiLAorCQkJCQkJICAgTFNOX0ZPUk1BVF9BUkdTKHhsb2dyZWFkZXItPkVuZFJl Y1B0ciksIGVycm9ybXNnKSk7CisJCWVsc2UKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycm1z ZygiY291bGQgbm90IHJlYWQgV0FMIGF0ICVYLyVYIiwKKwkJCQkJCSAgIExTTl9GT1JNQVRfQVJH Uyh4bG9ncmVhZGVyLT5FbmRSZWNQdHIpKSk7CisJfQorCisJcmV0dXJuIHJlY29yZDsKK30KKwor LyoKKyAqIE91dHB1dCB2YWx1ZXMgdGhhdCBtYWtlIHVwIGEgcm93IGRlc2NyaWJpbmcgY2FsbGVy J3MgV0FMIHJlY29yZC4KKyAqLworc3RhdGljIHZvaWQKK0dldFdBTFJlY29yZEluZm8oWExvZ1Jl YWRlclN0YXRlICpyZWNvcmQsIERhdHVtICp2YWx1ZXMsCisJCQkJIGJvb2wgKm51bGxzLCB1aW50 MzIgbmNvbHMpCit7CisJY29uc3QgY2hhciAqcmVjb3JkX3R5cGU7CisJUm1nckRhdGEJZGVzYzsK Kwl1aW50MzIJCWZwaV9sZW4gPSAwOworCVN0cmluZ0luZm9EYXRhIHJlY19kZXNjOworCVN0cmlu Z0luZm9EYXRhIHJlY19ibGtfcmVmOworCWludAkJCWkgPSAwOworCisJZGVzYyA9IEdldFJtZ3Io WExvZ1JlY0dldFJtaWQocmVjb3JkKSk7CisJcmVjb3JkX3R5cGUgPSBkZXNjLnJtX2lkZW50aWZ5 KFhMb2dSZWNHZXRJbmZvKHJlY29yZCkpOworCisJaWYgKHJlY29yZF90eXBlID09IE5VTEwpCisJ CXJlY29yZF90eXBlID0gcHNwcmludGYoIlVOS05PV04gKCV4KSIsIFhMb2dSZWNHZXRJbmZvKHJl Y29yZCkgJiB+WExSX0lORk9fTUFTSyk7CisKKwlpbml0U3RyaW5nSW5mbygmcmVjX2Rlc2MpOwor CWRlc2Mucm1fZGVzYygmcmVjX2Rlc2MsIHJlY29yZCk7CisKKwlpZiAoWExvZ1JlY0hhc0FueUJs b2NrUmVmcyhyZWNvcmQpKQorCXsKKwkJaW5pdFN0cmluZ0luZm8oJnJlY19ibGtfcmVmKTsKKwkJ WExvZ1JlY0dldEJsb2NrUmVmSW5mbyhyZWNvcmQsIGZhbHNlLCB0cnVlLCAmcmVjX2Jsa19yZWYs ICZmcGlfbGVuKTsKKwl9CisKKwl2YWx1ZXNbaSsrXSA9IExTTkdldERhdHVtKHJlY29yZC0+UmVh ZFJlY1B0cik7CisJdmFsdWVzW2krK10gPSBMU05HZXREYXR1bShyZWNvcmQtPkVuZFJlY1B0cik7 CisJdmFsdWVzW2krK10gPSBMU05HZXREYXR1bShYTG9nUmVjR2V0UHJldihyZWNvcmQpKTsKKwl2 YWx1ZXNbaSsrXSA9IFRyYW5zYWN0aW9uSWRHZXREYXR1bShYTG9nUmVjR2V0WGlkKHJlY29yZCkp OworCXZhbHVlc1tpKytdID0gQ1N0cmluZ0dldFRleHREYXR1bShkZXNjLnJtX25hbWUpOworCXZh bHVlc1tpKytdID0gQ1N0cmluZ0dldFRleHREYXR1bShyZWNvcmRfdHlwZSk7CisJdmFsdWVzW2kr K10gPSBVSW50MzJHZXREYXR1bShYTG9nUmVjR2V0VG90YWxMZW4ocmVjb3JkKSk7CisJdmFsdWVz W2krK10gPSBVSW50MzJHZXREYXR1bShYTG9nUmVjR2V0RGF0YUxlbihyZWNvcmQpKTsKKwl2YWx1 ZXNbaSsrXSA9IFVJbnQzMkdldERhdHVtKGZwaV9sZW4pOworCisJaWYgKHJlY19kZXNjLmxlbiA+ IDApCisJCXZhbHVlc1tpKytdID0gQ1N0cmluZ0dldFRleHREYXR1bShyZWNfZGVzYy5kYXRhKTsK KwllbHNlCisJCW51bGxzW2krK10gPSB0cnVlOworCisJaWYgKFhMb2dSZWNIYXNBbnlCbG9ja1Jl ZnMocmVjb3JkKSkKKwkJdmFsdWVzW2krK10gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHJlY19ibGtf cmVmLmRhdGEpOworCWVsc2UKKwkJbnVsbHNbaSsrXSA9IHRydWU7CisKKwlBc3NlcnQoaSA9PSBu Y29scyk7Cit9CisKKy8qCisgKiBHZXQgaW5mbyBvZiBhbGwgV0FMIHJlY29yZHMgYmV0d2VlbiBz dGFydCBMU04gYW5kIGVuZCBMU04uCisgKi8KK3N0YXRpYyB2b2lkCitHZXRXQUxSZWNvcmRzSW5m byhGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgWExvZ1JlY1B0ciBzdGFydF9sc24sCisJCQkJICBY TG9nUmVjUHRyIGVuZF9sc24pCit7CisjZGVmaW5lIEdFVF9XQUxfUkVDT1JEU19JTkZPX0ZST01f QlVGRkVSU19DT0xTIDExCisJWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyOworCVhMb2dSZWNQ dHIJZmlyc3RfdmFsaWRfcmVjb3JkOworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5T ZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlNZW1vcnlDb250ZXh0IG9sZF9jeHQ7CisJ TWVtb3J5Q29udGV4dCB0bXBfY3h0OworCisJQXNzZXJ0KHN0YXJ0X2xzbiA8PSBlbmRfbHNuKTsK KworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCXhsb2dyZWFkZXIgPSBYTG9n UmVhZGVyQWxsb2NhdGUod2FsX3NlZ21lbnRfc2l6ZSwgTlVMTCwKKwkJCQkJCQkJCVhMX1JPVVRJ TkUoLnBhZ2VfcmVhZCA9ICZyZWFkX2Zyb21fd2FsX2J1ZmZlcnMsCisJCQkJCQkJCQkJCSAgIC5z ZWdtZW50X29wZW4gPSBOVUxMLAorCQkJCQkJCQkJCQkgICAuc2VnbWVudF9jbG9zZSA9IE5VTEwp LAorCQkJCQkJCQkJTlVMTCk7CisKKwlpZiAoeGxvZ3JlYWRlciA9PSBOVUxMKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJIGVycm1z Zygib3V0IG9mIG1lbW9yeSIpLAorCQkJCSBlcnJkZXRhaWwoIkZhaWxlZCB3aGlsZSBhbGxvY2F0 aW5nIGEgV0FMIHJlYWRpbmcgcHJvY2Vzc29yLiIpKSk7CisKKwkvKiBmaXJzdCBmaW5kIGEgdmFs aWQgcmVjcHRyIHRvIHN0YXJ0IGZyb20gKi8KKwlmaXJzdF92YWxpZF9yZWNvcmQgPSBYTG9nRmlu ZE5leHRSZWNvcmQoeGxvZ3JlYWRlciwgc3RhcnRfbHNuKTsKKworCWlmIChYTG9nUmVjUHRySXNJ bnZhbGlkKGZpcnN0X3ZhbGlkX3JlY29yZCkpCisJeworCQllcmVwb3J0KExPRywKKwkJCQkoZXJy bXNnKCJjb3VsZCBub3QgZmluZCBhIHZhbGlkIHJlY29yZCBhZnRlciAlWC8lWCIsCisJCQkJCQlM U05fRk9STUFUX0FSR1Moc3RhcnRfbHNuKSkpKTsKKworCQlyZXR1cm47CisJfQorCisJdG1wX2N4 dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJ CSJHZXRXQUxSZWNvcmRzSW5mbyB0ZW1wb3JhcnkgY3h0IiwKKwkJCQkJCQkJCUFMTE9DU0VUX0RF RkFVTFRfU0laRVMpOworCisJd2hpbGUgKFJlYWROZXh0WExvZ1JlY29yZCh4bG9ncmVhZGVyKSAm JgorCQkgICB4bG9ncmVhZGVyLT5FbmRSZWNQdHIgPD0gZW5kX2xzbikKKwl7CisJCURhdHVtCQl2 YWx1ZXNbR0VUX1dBTF9SRUNPUkRTX0lORk9fRlJPTV9CVUZGRVJTX0NPTFNdID0gezB9OworCQli b29sCQludWxsc1tHRVRfV0FMX1JFQ09SRFNfSU5GT19GUk9NX0JVRkZFUlNfQ09MU10gPSB7MH07 CisKKwkJLyogVXNlIHRoZSB0bXAgY29udGV4dCBzbyB3ZSBjYW4gY2xlYW4gdXAgYWZ0ZXIgZWFj aCB0dXBsZSBpcyBkb25lICovCisJCW9sZF9jeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1w X2N4dCk7CisKKwkJR2V0V0FMUmVjb3JkSW5mbyh4bG9ncmVhZGVyLCB2YWx1ZXMsIG51bGxzLAor CQkJCQkJIEdFVF9XQUxfUkVDT1JEU19JTkZPX0ZST01fQlVGRkVSU19DT0xTKTsKKworCQl0dXBs ZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLAorCQkJ CQkJCSB2YWx1ZXMsIG51bGxzKTsKKworCQkvKiBjbGVhbiB1cCBhbmQgc3dpdGNoIGJhY2sgKi8K KwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZF9jeHQpOworCQlNZW1vcnlDb250ZXh0UmVzZXQo dG1wX2N4dCk7CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwl9CisKKwlNZW1vcnlDb250 ZXh0RGVsZXRlKHRtcF9jeHQpOworCVhMb2dSZWFkZXJGcmVlKHhsb2dyZWFkZXIpOworCisjdW5k ZWYgR0VUX1dBTF9SRUNPUkRTX0lORk9fRlJPTV9CVUZGRVJTX0NPTFMKK30KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvcmVhZF93YWxfZnJvbV9idWZmZXJzL3JlYWRfd2FsX2Zyb21fYnVm ZmVycy5jb250cm9sIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZWFkX3dhbF9mcm9tX2J1ZmZlcnMvcmVh ZF93YWxfZnJvbV9idWZmZXJzLmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uYjE0ZDI0NzUxYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv cmVhZF93YWxfZnJvbV9idWZmZXJzL3JlYWRfd2FsX2Zyb21fYnVmZmVycy5jb250cm9sCkBAIC0w LDAgKzEsNCBAQAorY29tbWVudCA9ICdUZXN0IG1vZHVsZSB0byByZWFkIFdBTCBmcm9tIFdBTCBi dWZmZXJzJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGli ZGlyL3JlYWRfd2FsX2Zyb21fYnVmZmVycycKK3JlbG9jYXRhYmxlID0gdHJ1ZQpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy9yZWFkX3dhbF9mcm9tX2J1ZmZlcnMvdC8wMDFfYmFzaWMucGwg Yi9zcmMvdGVzdC9tb2R1bGVzL3JlYWRfd2FsX2Zyb21fYnVmZmVycy90LzAwMV9iYXNpYy5wbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4xNWVmNTUwYzhjCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZWFkX3dhbF9mcm9tX2J1ZmZlcnMvdC8wMDFf YmFzaWMucGwKQEAgLTAsMCArMSwxMTEgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIxLTIwMjMsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2Fy bmluZ3M7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6 OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgVGltZTo6SGlSZXMgcXcodXNsZWVw KTsKKworIyBTZXR1cCBhIG5ldyBub2RlLiAgVGhlIGNvbmZpZ3VyYXRpb24gY2hvc2VuIGhlcmUg bWluaW1pemVzIHRoZSBudW1iZXIKKyMgb2YgYXJiaXRyYXJ5IHJlY29yZHMgdGhhdCBjb3VsZCBn ZXQgZ2VuZXJhdGVkIGluIGEgY2x1c3Rlci4gIEVubGFyZ2luZworIyBjaGVja3BvaW50X3RpbWVv dXQgYXZvaWRzIG5vaXNlIHdpdGggY2hlY2twb2ludCBhY3Rpdml0eS4gIHdhbF9sZXZlbAorIyBz ZXQgdG8gIm1pbmltYWwiIGF2b2lkcyByYW5kb20gc3RhbmRieSBzbmFwc2hvdCByZWNvcmRzLiAg QXV0b3ZhY3V1bQorIyBjb3VsZCBhbHNvIHRyaWdnZXIgcmFuZG9tbHksIGdlbmVyYXRpbmcgcmFu ZG9tIFdBTCBhY3Rpdml0eSBvZiBpdHMgb3duLgorIyBFbmxhcmdpbmcgd2FsX3dyaXRlcl9kZWxh eSBhbmQgd2FsX3dyaXRlcl9mbHVzaF9hZnRlciBhdm9pZCBiYWNrZ3JvdW5kCisjIHdhbCBmbHVz aCBieSB3YWx3cml0ZXIuCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5l dygibm9kZSIpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVz cWwuY29uZicsCisJcVt3YWxfbGV2ZWwgPSBtaW5pbWFsCisJICBhdXRvdmFjdXVtID0gb2ZmCisJ ICBjaGVja3BvaW50X3RpbWVvdXQgPSAnMzBtaW4nCisJICB3YWxfd3JpdGVyX2RlbGF5ID0gMTAw MDBtcworCSAgd2FsX3dyaXRlcl9mbHVzaF9hZnRlciA9IDFHQgorXSk7Ciskbm9kZS0+c3RhcnQ7 CisKKyMgU2V0dXAuCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgRVhURU5T SU9OIHJlYWRfd2FsX2Zyb21fYnVmZmVyczsnKTsKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAnQ1JFQVRFIFRBQkxFIHQgKGMgaW50KTsnKTsKKworbXkgJHJlc3VsdCA9IDA7CitteSAk bHNuOworbXkgJHRvX3JlYWQ7CisKKyMgV2FpdCB1bnRpbCB3ZSByZWFkIGZyb20gV0FMIGJ1ZmZl cnMKK2ZvciAobXkgJGkgPSAwOyAkaSA8IDEwICogJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0 aW1lb3V0X2RlZmF1bHQ7ICRpKyspCit7CisJIyBHZXQgY3VycmVudCBpbnNlcnQgTFNOLiBBZnRl ciB0aGlzLCB3ZSBnZW5lcmF0ZSBzb21lIFdBTCB3aGljaCBpcyBndXJhbnRlZWQKKwkjIHRvIGJl IGluIFdBTCBidWZmZXJzIGFzIHRoZXJlIGlzIG5vIG90aGVyIFdBTCBnZW5lcmF0aW5nIGFjdGl2 aXR5IGlzCisJIyBoYXBwZW5pbmcgb24gdGhlIHNlcnZlci4gV2UgdGhlbiB2ZXJpZnkgaWYgd2Ug Y2FuIHJlYWQgdGhlIFdBTCBmcm9tIFdBTAorCSMgYnVmZmVycyB1c2luZyB0aGlzIExTTi4KKwkk bHNuID0KKwkgICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NFTEVDVCBwZ19jdXJyZW50 X3dhbF9pbnNlcnRfbHNuKCk7Jyk7CisKKwlteSAkbG9nc3RhcnQgPSAtcyAkbm9kZS0+bG9nZmls ZTsKKworCSMgR2VuZXJhdGUgbWluaW1hbCBXQUwgc28gdGhhdCBXQUwgYnVmZmVycyBkb24ndCBn ZXQgb3ZlcndyaXR0ZW4uCisJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElO VE8gdCBWQUxVRVMgKCRpKTsiKTsKKworCSR0b19yZWFkID0gODE5MjsKKworCW15ICRyZXMgPSAk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCXFxe1NFTEVDVCByZWFkX3dhbF9mcm9tX2J1 ZmZlcnMobHNuIDo9ICckbHNuJywgYnl0ZXNfdG9fcmVhZCA6PSAkdG9fcmVhZCkgPiAwO30KKwkp OworCisJbXkgJGxvZyA9ICRub2RlLT5sb2dfY29udGFpbnMoCisJCSJyZXF1ZXN0IHRvIGZsdXNo IHBhc3QgZW5kIG9mIGdlbmVyYXRlZCBXQUw7IHJlcXVlc3QgLiosIGN1cnJlbnQgcG9zaXRpb24g LioiLAorCQkkbG9nc3RhcnQpOworCisJaWYgKCRyZXMgZXEgJ3QnICYmICRsb2cgPiAwKQorCXsK KwkJJHJlc3VsdCA9IDE7CisJCWxhc3Q7CisJfQorCisJdXNsZWVwKDEwMF8wMDApOworfQorb2so JHJlc3VsdCwgJ3dhaXRlZCB1bnRpbCBXQUwgaXMgc3VjY2Vzc2Z1bGx5IHJlYWQgZnJvbSBXQUwg YnVmZmVycycpOworCiskcmVzdWx0ID0gMDsKKworIyBXYWl0IHVudGlsIHdlIGdldCBpbmZvIG9m IFdBTCByZWNvcmRzIGF2YWlsYWJsZSBpbiBXQUwgYnVmZmVycy4KK2ZvciAobXkgJGkgPSAwOyAk aSA8IDEwICogJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1bHQ7ICRpKysp Cit7CisJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBJRiBFWElTVFMg Zm9vLCBiYXI7Iik7CisJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiQ1JFQVRFIFRB QkxFIGZvbyBBUyBTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAyKTsiKTsKKwlteSAk c3RhcnRfbHNuID0KKwkgICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19j dXJyZW50X3dhbF9pbnNlcnRfbHNuKCk7Iik7CisJbXkgJHRibF9vaWQgPSAkbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1Qgb2lkIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsbmFt ZSA9ICdmb28nOyIpOworCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIklOU0VSVCBJ TlRPIGZvbyBTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMCk7Iik7CisJbXkgJGVu ZF9sc24gPQorCSAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX2N1cnJl bnRfd2FsX2luc2VydF9sc24oKTsiKTsKKwkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ CSJDUkVBVEUgVEFCTEUgYmFyIEFTIFNFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIp OyIpOworCisJbXkgJHJlcyA9ICRub2RlLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsCisJCSJT RUxFQ1QgY291bnQoKikgRlJPTSBnZXRfd2FsX3JlY29yZHNfaW5mb19mcm9tX2J1ZmZlcnMoJyRz dGFydF9sc24nLCAnJGVuZF9sc24nKQorCQkJCQlXSEVSRSBibG9ja19yZWYgTElLRSBjb25jYXQo JyUnLCAnJHRibF9vaWQnLCAnJScpIEFORAorCQkJCQkJcmVzb3VyY2VfbWFuYWdlciA9ICdIZWFw JyBBTkQKKwkJCQkJCXJlY29yZF90eXBlID0gJ0lOU0VSVCc7Iik7CisKKwlpZiAoJHJlcyBlcSAx MCkKKwl7CisJCSRyZXN1bHQgPSAxOworCQlsYXN0OworCX0KKworCXVzbGVlcCgxMDBfMDAwKTsK K30KK29rKCRyZXN1bHQsCisJJ3dhaXRlZCB1bnRpbCB3ZSBnZXQgaW5mbyBvZiBXQUwgcmVjb3Jk cyBhdmFpbGFibGUgaW4gV0FMIGJ1ZmZlcnMuJyk7CisKK2RvbmVfdGVzdGluZygpOwotLSAKMi4z NC4xCgo= --0000000000007c2381061ab40938--