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 1we3oC-004WzX-2C for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jun 2026 04:41:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1we3oB-000zuA-1H for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jun 2026 04:41:23 +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 1we3oA-000zu2-2F for pgsql-hackers@lists.postgresql.org; Mon, 29 Jun 2026 04:41:23 +0000 Received: from mail-yw1-x112d.google.com ([2607:f8b0:4864:20::112d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1we3o8-00000000hoe-1hYF for pgsql-hackers@postgresql.org; Mon, 29 Jun 2026 04:41:21 +0000 Received: by mail-yw1-x112d.google.com with SMTP id 00721157ae682-80e24970f1dso7253877b3.0 for ; Sun, 28 Jun 2026 21:41:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782708080; cv=none; d=google.com; s=arc-20260327; b=sz5hYO8obnZHt1p85am8Dj0lf/TSQ0MYTo+GXitiJ8FJskn7kqkoLOAywcyiyWO8Yw HELJuqOAkYNtJPkmUU9k+JuFhfaeZc7j2+5zcPdg2YqjaZIs3neFOY/8KLMNzhtx+FKt BgQfgWRail7ELgTvl8ijbYA7guNwzzIO6SAaoUtvLd5VjB1AHoT1xvAiAPYTWt5VEb4K 0utveXyc+GRdCdKPlz8Zewj3xdsjN6Fhdl3NhimyqvNdfJpSoXZdzXX67HZ5/3s8SVXF dcY8R8KyGB+BPvH3NDvx7RIHyqvhy0Nuye4JKEP5PqHj34ZLW4X9fkKl1jx569PUIAkR ASgQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=F9UVmc+KG7TZj9TKDCQPBwCe5eD9Mcs3rV326oKqg7Y=; fh=MGYyotHfrCQLESWvrpJAuvGJwtuSWtu+5JbG5RlkDWg=; b=MbNSASyU/1CjfI0ADXFPX1IqBbu8vu7NWj0t5/K6b/yrSkjqmrqYzB+kUGzHG8Ley+ rGjuME7S4Ue/PN7vxp5Tl1xS+BwACuyUS5t0Rk4ugl8E+JCR5hXxsKAW9i08KZjk57z1 fijfnYaBKjPjZBGLKOVzow4frfzvhizyICMk/eizujnt+zAUHv73XkR0eXh7QYxxqoPd 1Cdat6UqdO9MNi0bqdLsIHWg3r2msY2M733ZrlnzpnKUY+hlk73jzSn/DuDnN/iimsuX tHs4PH2tRRPDpIkYlVvDBtN4cOSXWchzKIrck3yKX/OrStSlWN0k7eMdfcY42MLFdVoF 0SuQ==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782708080; x=1783312880; 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=F9UVmc+KG7TZj9TKDCQPBwCe5eD9Mcs3rV326oKqg7Y=; b=WlBJ9gmMd9zwK/ukOlUSyLVGxyBfx+07jBV/pGYOAZ+AF9hCD9ukJ3QkWzESCxnnDj Cr79CEwVhI630q/87gEyh3VLDi1rbdVih+BUiAIGksKtry5ePXoatV7wIiog2Fsx2MkC B4c2nBa3kwqKQ10gHxOw9IL3jB5COAWCECKs7+wK3z9bsWhqz6cYD9Ix2WJWVSnj4zxy D7fabuS5YO5LuIGanby7TRtJHJ8CPGGTOzFoSLHbgaOILh/cDcxf4PMap/oOhFqeZ7Xf EnmWHHPf1xUiL58DE04KIiwoxxWY1pIgq/sC5sx96kwzmZ8MrOILQUsFfLqTZkQ9zBTF u11Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782708080; x=1783312880; 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=F9UVmc+KG7TZj9TKDCQPBwCe5eD9Mcs3rV326oKqg7Y=; b=X//dvOF7oH7/xWax4YZT3xr8GmIoGllCp35Vrs06HGDxj308PIGsPfvkG1OI5r8HUV wL4V1HOQEjyZpmt+kU9TrBg2f2Js6EfBZ49xSjHZs4znD9egAx1LTczC3lbN1EHL8kb3 1m7UAfL8vGZPiCZJLToylV2x6g3uRjf8o/IK4di8iXrx1BPRehq2OZrYrqbeU6ENeS06 ugGrdaBCggFq7SCjEDbnzHg1VVrZr8Jsvurq6TPCgOqq9sTvBmSGKaK3q52HooLwki5y uRPVqrMxSxcbKV4WrjFNNzjwcv2iyjru8Zcz5qrDT3WQROXuLE86S7A39UBEkDNVyG8V QBog== X-Forwarded-Encrypted: i=1; AHgh+RrHANJQ0zoX/MzHJEMEQH4esTEngTWgkZMVv81SbsiDtKtyLOwyilm/ImGSE6CScHCSFSajXQsifErpROb7@postgresql.org X-Gm-Message-State: AOJu0Yx77EoIrvSGEsbS4juTcfwObi1Gxy0HMA/SqYeyWIGE7j04b1Jr SVRyIF9/YlTIjGbke4TZcsIdb6vOuMDiAyKdzdrJyDpkEdQqKDi2KHKvtFgP0J2X8V1rw1b8iGi LlJH02rqqGhlgygyZCXO1qTEcOaF6rWU= X-Gm-Gg: AfdE7cnBcM0yMz+ZA0X2fb4vC8kx2oLeAay5zXXOJ9PcvcNZUwYsQUnoLi1LTRhUY8i cfLdB4dUbzea0MYASV/3PFbKzS68Yx/9JAFNE9cSuU1P2Nu/kqK8/ulhAa6ohcOMJoHLX5OZtMk iwp2yQ2aeCULDXj5bjucX9yTDML0kQZHCORZWV0X7vh9OlWB4YURCVw6cmbRLkmvha56exXHTF8 tGl8k1uCHx+cbhvbTnNT/7q1W6ZEFUd/l+1C8QEuFqFt9cd0Nt4hwR4phiu+Z6Z2lrAmWM= X-Received: by 2002:a05:690c:6085:b0:7ff:1e22:d187 with SMTP id 00721157ae682-80a6cf6f307mr141704827b3.37.1782708079700; Sun, 28 Jun 2026 21:41:19 -0700 (PDT) MIME-Version: 1.0 References: <7D34F514-69B0-47BA-8C40-DEC35AC673F8@yesql.se> In-Reply-To: <7D34F514-69B0-47BA-8C40-DEC35AC673F8@yesql.se> From: Ayush Tiwari Date: Mon, 29 Jun 2026 10:11:06 +0530 X-Gm-Features: AVVi8CcOznmYuHzrk72jWWTege1MhuIOMsdehirVbOC4VGQt6WziLuTXKmBn-SA Message-ID: Subject: Re: Remove the refint contrib module (for v20) To: Daniel Gustafsson Cc: =?UTF-8?Q?=C3=81lvaro_Herrera?= , Nathan Bossart , PostgreSQL Hackers , Tom Lane Content-Type: multipart/mixed; boundary="000000000000d4955506555d1161" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d4955506555d1161 Content-Type: multipart/alternative; boundary="000000000000d4955406555d115f" --000000000000d4955406555d115f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Mon, 29 Jun 2026 at 00:29, Daniel Gustafsson wrote: > > On 28 Jun 2026, at 10:14, =C3=81lvaro Herrera wr= ote: > > > The doc patch says that Postgres 19 shipped a contrib module named > > refint, but that's not fully correct. It shipped an *extension* named > > refint inside the contrib module named spi. I think that wording could > > be improved. > > Agreed. > > + trigger functions check_primary_key() and > > We also typically don't append parentheses to function names in the docs. > Thanks for the review! Attaching patch with improved wording and parentheses changes. Basic git diff between v3 and v4: - refint Module Removed + refint Extension Removed - PostgreSQL 19 and below shipped a - contrib module named refint that provided the - trigger functions check_primary_key() and - check_foreign_key() as an early way to enforce + PostgreSQL 19 and below shipped an + extension named refint, part of the + spi contrib module, providing the trigger + functions check_primary_key and + check_foreign_key as an early way to enforce - ...), and the module was removed + ...), and the extension was removed Regards, Ayush --000000000000d4955406555d115f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

On Mon, 29 Jun 2= 026 at 00:29, Daniel Gustafsson <dani= el@yesql.se> wrote:
> On 28 Jun 2026, at 10:14, =C3=81lvaro Herrera <alvherre@kurilemu.de= > wrote:

> The doc patch says that Postgres 19 shipped a contrib module named
> refint, but that's not fully correct.=C2=A0 It shipped an *extensi= on* named
> refint inside the contrib module named spi.=C2=A0 I think that wording= could
> be improved.

Agreed.

+=C2=A0 =C2=A0 trigger functions <function>check_primary_key()</fu= nction> and

We also typically don't append parentheses to function names in the doc= s.

Thanks for the review!

Attaching patch w= ith improved wording and parentheses
changes.

Basic git di= ff between v3 and v4:

- =C2=A0<title>refint Module Removed<= /title>
+ =C2=A0<title>refint Extension Removed</title>
- =C2=A0 =C2=A0PostgreSQL 19 and below shipped a
- =C2=A0 =C2=A0co= ntrib module named refint that provided the
- =C2=A0 =C2=A0trigger funct= ions check_primary_key() and
- =C2=A0 =C2=A0check_foreign_key() as an ea= rly way to enforce
+ =C2=A0 =C2=A0PostgreSQL 19 and below shipped an
= + =C2=A0 =C2=A0extension named refint, part of the
+ =C2=A0 =C2=A0spi co= ntrib module, providing the trigger
+ =C2=A0 =C2=A0functions check_prima= ry_key and
+ =C2=A0 =C2=A0check_foreign_key as an early way to enforce
- =C2=A0 =C2=A0...), and the module was removed
+ =C2=A0 =C2=A0...= ), and the extension was removed

Regards,
Ayush=C2=A0
=
--000000000000d4955406555d115f-- --000000000000d4955506555d1161 Content-Type: application/octet-stream; name="v4-0001-Remove-the-refint-contrib-module.patch" Content-Disposition: attachment; filename="v4-0001-Remove-the-refint-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqyqbldx0 RnJvbSBiOTIxMjU2ZDRkN2RhNzJjODM1NTIzYmQ1ZmU5OGU1NTFkOWM0M2E3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBeXVzaCBUaXdhcmkgPGF5dXNodGl3YXJpLnNsZzAxQGdtYWls LmNvbT4KRGF0ZTogTW9uLCAyOSBKdW4gMjAyNiAwNDoyNzoxNCArMDAwMApTdWJqZWN0OiBbUEFU Q0ggdjQgMS8yXSBSZW1vdmUgdGhlIHJlZmludCBjb250cmliIG1vZHVsZS4KCnJlZmludCB3YXMg c2FtcGxlIGNvZGUgZnJvbSB0aGUgcHJlLWJ1aWx0LWluLUZLIGVyYSBhbmQgaGFzIGxvbmcgYmVl bgpkb2N1bWVudGVkIGFzIHN1cGVyc2VkZWQgYnkgdGhlIGJ1aWx0LWluIGZvcmVpZ24ga2V5IG1l Y2hhbmlzbS4gIFJlY2VudApmaXhlcyAoY2FzY2FkZS1VUERBVEUgY3Jhc2ggd2l0aCBOVUxMIGtl eXMsIHJlbW92YWwgb2YgdGhlIGJyb2tlbiBwcml2YXRlClNQSSBwbGFuIGNhY2hlKSBtYWRlIGl0 IGNsZWFyIHRoYXQgdGhlIGNvZGUgaGFzIG1vcmUgaXNzdWVzIHRoYW4gaXRzCnNhbXBsZS1jb2Rl IHZhbHVlIGp1c3RpZmllcywgYW5kIHRoZXJlIHdhcyBjb25zZW5zdXMgb24gdGhlIHByaW9yIHRo cmVhZAp0byBkcm9wIGl0IG9uY2UgdjIwIG9wZW5zIGZvciBkZXZlbG9wbWVudC4KClJlbW92ZSB0 aGUgQyBzb3VyY2UsIGNvbnRyb2wgZmlsZSwgU1FMIHNjcmlwdCwgZXhhbXBsZSBmaWxlLCBhbmQK cmVncmVzc2lvbiB0ZXN0IGZyb20gY29udHJpYi9zcGkvLiAgQWRqdXN0IHRoZSBjb250cmliL3Nw aSBNYWtlZmlsZSBhbmQKbWVzb24uYnVpbGQsIGRyb3AgdGhlIHJlZmludCBzZWN0aW9uIGZyb20g Y29udHJpYi1zcGkuc2dtbCwgYW5kIGRyb3AgdGhlCm5vdy11bnVzZWQgRVBsYW4gdHlwZWRlZiBm cm9tIHR5cGVkZWZzLmxpc3QuICBBZGQgYW4gYXBwZW5kaXgtb2Jzb2xldGUKZW50cnkgdW5kZXIg dGhlIHNhbWUgY29udHJpYi1zcGktcmVmaW50IGlkIHNvIGV4aXN0aW5nIC9jdXJyZW50Lwpkb2N1 bWVudGF0aW9uIGxpbmtzIGtlZXAgcmVzb2x2aW5nLgoKVGhlIG90aGVyIGNvbnRyaWIvc3BpIGV4 dGVuc2lvbnMgKGF1dG9pbmMsIGluc2VydF91c2VybmFtZSwgbW9kZGF0ZXRpbWUpCmFyZSB1bmFm ZmVjdGVkLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUpUWXNXVUhxOE9oYzYt Ti14YW1PUFl6LXEzcVVZTXR3UVgtMSUzRFppJTNENU4xUV9HU0VRJTQwbWFpbC5nbWFpbC5jb20K LS0tCiBjb250cmliL3NwaS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgfCAgMTMgKy0K IGNvbnRyaWIvc3BpL2V4cGVjdGVkL3JlZmludC5vdXQgICAgICAgICAgICB8IDExMyAtLS0tLQog Y29udHJpYi9zcGkvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgIHwgIDMwIC0tCiBjb250 cmliL3NwaS9yZWZpbnQtLTEuMC5zcWwgICAgICAgICAgICAgICAgfCAgMTQgLQogY29udHJpYi9z cGkvcmVmaW50LmMgICAgICAgICAgICAgICAgICAgICAgIHwgNTM4IC0tLS0tLS0tLS0tLS0tLS0t LS0tLQogY29udHJpYi9zcGkvcmVmaW50LmNvbnRyb2wgICAgICAgICAgICAgICAgIHwgICA1IC0K IGNvbnRyaWIvc3BpL3JlZmludC5leGFtcGxlICAgICAgICAgICAgICAgICB8ICA4MiAtLS0tCiBj b250cmliL3NwaS9zcWwvcmVmaW50LnNxbCAgICAgICAgICAgICAgICAgfCAgOTcgLS0tLQogZG9j L3NyYy9zZ21sL2FwcGVuZGl4LW9ic29sZXRlLXJlZmludC5zZ21sIHwgIDI1ICsKIGRvYy9zcmMv c2dtbC9hcHBlbmRpeC1vYnNvbGV0ZS5zZ21sICAgICAgICB8ICAgMSArCiBkb2Mvc3JjL3NnbWwv Y29udHJpYi1zcGkuc2dtbCAgICAgICAgICAgICAgfCAxMDcgLS0tLQogZG9jL3NyYy9zZ21sL2Zp bGVsaXN0LnNnbWwgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0ICAgICAgICAgICB8ICAgMSAtCiAxMyBmaWxlcyBjaGFuZ2VkLCAzMSBpbnNl cnRpb25zKCspLCA5OTYgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgY29udHJpYi9z cGkvZXhwZWN0ZWQvcmVmaW50Lm91dAogZGVsZXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvc3BpL3Jl ZmludC0tMS4wLnNxbAogZGVsZXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvc3BpL3JlZmludC5jCiBk ZWxldGUgbW9kZSAxMDA2NDQgY29udHJpYi9zcGkvcmVmaW50LmNvbnRyb2wKIGRlbGV0ZSBtb2Rl IDEwMDY0NCBjb250cmliL3NwaS9yZWZpbnQuZXhhbXBsZQogZGVsZXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvc3BpL3NxbC9yZWZpbnQuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jL3NyYy9zZ21s L2FwcGVuZGl4LW9ic29sZXRlLXJlZmludC5zZ21sCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9zcGkv TWFrZWZpbGUgYi9jb250cmliL3NwaS9NYWtlZmlsZQppbmRleCA3Y2NiZWY4YzkyNi4uODA1Zjc2 NTNlNTggMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvc3BpL01ha2VmaWxlCisrKyBiL2NvbnRyaWIvc3Bp L01ha2VmaWxlCkBAIC0xLDIzICsxLDE4IEBACiAjIGNvbnRyaWIvc3BpL01ha2VmaWxlCiAKLU1P RFVMRVMgPSBhdXRvaW5jIGluc2VydF91c2VybmFtZSBtb2RkYXRldGltZSByZWZpbnQKK01PRFVM RVMgPSBhdXRvaW5jIGluc2VydF91c2VybmFtZSBtb2RkYXRldGltZQogCi1FWFRFTlNJT04gPSBh dXRvaW5jIGluc2VydF91c2VybmFtZSBtb2RkYXRldGltZSByZWZpbnQKK0VYVEVOU0lPTiA9IGF1 dG9pbmMgaW5zZXJ0X3VzZXJuYW1lIG1vZGRhdGV0aW1lCiAKIERBVEEgPSBhdXRvaW5jLS0xLjAu c3FsIFwKICAgICAgICBpbnNlcnRfdXNlcm5hbWUtLTEuMC5zcWwgXAotICAgICAgIG1vZGRhdGV0 aW1lLS0xLjAuc3FsIFwKLSAgICAgICByZWZpbnQtLTEuMC5zcWwKKyAgICAgICBtb2RkYXRldGlt ZS0tMS4wLnNxbAogUEdGSUxFREVTQyA9ICJzcGkgLSBleGFtcGxlcyBvZiB1c2luZyBTUEkgYW5k IHRyaWdnZXJzIgogCi1SRUdSRVNTID0gYXV0b2luYyByZWZpbnQKK1JFR1JFU1MgPSBhdXRvaW5j CiAKIERPQ1MgPSAkKGFkZHN1ZmZpeCAuZXhhbXBsZSwgJChNT0RVTEVTKSkKIAotIyB0aGlzIGlz IG5lZWRlZCBmb3IgdGhlIHJlZ3Jlc3Npb24gdGVzdHM7Ci0jIGNvbW1lbnQgb3V0IGlmIHlvdSB3 YW50IGEgcXVpZXRlciByZWZpbnQgcGFja2FnZSBmb3Igb3RoZXIgdXNlcwotUEdfQ1BQRkxBR1Mg PSAtRFJFRklOVF9WRVJCT1NFCi0KIGlmZGVmIFVTRV9QR1hTCiBQR19DT05GSUcgPSBwZ19jb25m aWcKIFBHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQpkaWZmIC0tZ2l0IGEvY29u dHJpYi9zcGkvZXhwZWN0ZWQvcmVmaW50Lm91dCBiL2NvbnRyaWIvc3BpL2V4cGVjdGVkL3JlZmlu dC5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NjMzNjAzMjE3Li4wMDAwMDAw MDAwMAotLS0gYS9jb250cmliL3NwaS9leHBlY3RlZC9yZWZpbnQub3V0CisrKyAvZGV2L251bGwK QEAgLTEsMTEzICswLDAgQEAKLUNSRUFURSBFWFRFTlNJT04gcmVmaW50OwotY3JlYXRlIHRhYmxl IHBrZXlzIChwa2V5MSBpbnQ0IG5vdCBudWxsLCBwa2V5MiB0ZXh0IG5vdCBudWxsKTsKLWNyZWF0 ZSB0YWJsZSBma2V5cyAoZmtleTEgaW50NCwgZmtleTIgdGV4dCwgZmtleTMgaW50KTsKLWNyZWF0 ZSB0YWJsZSBma2V5czIgKGZrZXkyMSBpbnQ0LCBma2V5MjIgdGV4dCwgcGtleTIzIGludCBub3Qg bnVsbCk7Ci1jcmVhdGUgaW5kZXggZmtleXNfaSBvbiBma2V5cyAoZmtleTEsIGZrZXkyKTsKLWNy ZWF0ZSBpbmRleCBma2V5czJfaSBvbiBma2V5czIgKGZrZXkyMSwgZmtleTIyKTsKLWNyZWF0ZSBp bmRleCBma2V5czJwX2kgb24gZmtleXMyIChwa2V5MjMpOwotaW5zZXJ0IGludG8gcGtleXMgdmFs dWVzICgxMCwgJzEnKTsKLWluc2VydCBpbnRvIHBrZXlzIHZhbHVlcyAoMjAsICcyJyk7Ci1pbnNl cnQgaW50byBwa2V5cyB2YWx1ZXMgKDMwLCAnMycpOwotaW5zZXJ0IGludG8gcGtleXMgdmFsdWVz ICg0MCwgJzQnKTsKLWluc2VydCBpbnRvIHBrZXlzIHZhbHVlcyAoNTAsICc1Jyk7Ci1pbnNlcnQg aW50byBwa2V5cyB2YWx1ZXMgKDYwLCAnNicpOwotY3JlYXRlIHVuaXF1ZSBpbmRleCBwa2V5c19p IG9uIHBrZXlzIChwa2V5MSwgcGtleTIpOwotLS0KLS0tIEZvciBma2V5czoKLS0tIAkoZmtleTEs IGZrZXkyKQktLT4gcGtleXMgKHBrZXkxLCBwa2V5MikKLS0tIAkoZmtleTMpCQktLT4gZmtleXMy IChwa2V5MjMpCi0tLQotY3JlYXRlIHRyaWdnZXIgY2hlY2tfZmtleXNfcGtleV9leGlzdAotCWFm dGVyIGluc2VydCBvciB1cGRhdGUgb24gZmtleXMKLQlmb3IgZWFjaCByb3cKLQlleGVjdXRlIGZ1 bmN0aW9uCi0JY2hlY2tfcHJpbWFyeV9rZXkgKCdma2V5MScsICdma2V5MicsICdwa2V5cycsICdw a2V5MScsICdwa2V5MicpOwotY3JlYXRlIHRyaWdnZXIgY2hlY2tfZmtleXNfcGtleTJfZXhpc3QK LQlhZnRlciBpbnNlcnQgb3IgdXBkYXRlIG9uIGZrZXlzCi0JZm9yIGVhY2ggcm93Ci0JZXhlY3V0 ZSBmdW5jdGlvbiBjaGVja19wcmltYXJ5X2tleSAoJ2ZrZXkzJywgJ2ZrZXlzMicsICdwa2V5MjMn KTsKLS0tCi0tLSBGb3IgZmtleXMyOgotLS0gCShma2V5MjEsIGZrZXkyMikJLS0+IHBrZXlzIChw a2V5MSwgcGtleTIpCi0tLQotY3JlYXRlIHRyaWdnZXIgY2hlY2tfZmtleXMyX3BrZXlfZXhpc3QK LQlhZnRlciBpbnNlcnQgb3IgdXBkYXRlIG9uIGZrZXlzMgotCWZvciBlYWNoIHJvdwotCWV4ZWN1 dGUgcHJvY2VkdXJlCi0JY2hlY2tfcHJpbWFyeV9rZXkgKCdma2V5MjEnLCAnZmtleTIyJywgJ3Br ZXlzJywgJ3BrZXkxJywgJ3BrZXkyJyk7Ci0tLQotLS0gRm9yIHBrZXlzOgotLS0gCU9OIERFTEVU RS9VUERBVEUgKHBrZXkxLCBwa2V5MikgQ0FTQ0FERToKLS0tIAkJZmtleXMgKGZrZXkxLCBma2V5 MikgYW5kIGZrZXlzMiAoZmtleTIxLCBma2V5MjIpCi0tLQotY3JlYXRlIHRyaWdnZXIgY2hlY2tf cGtleXNfZmtleV9jYXNjYWRlCi0JYWZ0ZXIgZGVsZXRlIG9yIHVwZGF0ZSBvbiBwa2V5cwotCWZv ciBlYWNoIHJvdwotCWV4ZWN1dGUgcHJvY2VkdXJlCi0JY2hlY2tfZm9yZWlnbl9rZXkgKDIsICdj YXNjYWRlJywgJ3BrZXkxJywgJ3BrZXkyJywKLQknZmtleXMnLCAnZmtleTEnLCAnZmtleTInLCAn ZmtleXMyJywgJ2ZrZXkyMScsICdma2V5MjInKTsKLS0tCi0tLSBGb3IgZmtleXMyOgotLS0gCU9O IERFTEVURS9VUERBVEUgKHBrZXkyMykgUkVTVFJJQ1Q6Ci0tLSAJCWZrZXlzIChma2V5MykKLS0t Ci1jcmVhdGUgdHJpZ2dlciBjaGVja19ma2V5czJfZmtleV9yZXN0cmljdAotCWFmdGVyIGRlbGV0 ZSBvciB1cGRhdGUgb24gZmtleXMyCi0JZm9yIGVhY2ggcm93Ci0JZXhlY3V0ZSBwcm9jZWR1cmUg Y2hlY2tfZm9yZWlnbl9rZXkgKDEsICdyZXN0cmljdCcsICdwa2V5MjMnLCAnZmtleXMnLCAnZmtl eTMnKTsKLWluc2VydCBpbnRvIGZrZXlzMiB2YWx1ZXMgKDEwLCAnMScsIDEpOwotaW5zZXJ0IGlu dG8gZmtleXMyIHZhbHVlcyAoMzAsICczJywgMik7Ci1pbnNlcnQgaW50byBma2V5czIgdmFsdWVz ICg0MCwgJzQnLCA1KTsKLWluc2VydCBpbnRvIGZrZXlzMiB2YWx1ZXMgKDUwLCAnNScsIDMpOwot LS0gbm8ga2V5IGluIHBrZXlzCi1pbnNlcnQgaW50byBma2V5czIgdmFsdWVzICg3MCwgJzUnLCAz KTsKLUVSUk9SOiAgdHVwbGUgcmVmZXJlbmNlcyBub24tZXhpc3RlbnQga2V5Ci1ERVRBSUw6ICBU cmlnZ2VyICJjaGVja19ma2V5czJfcGtleV9leGlzdCIgZm91bmQgdHVwbGUgcmVmZXJlbmNpbmcg bm9uLWV4aXN0ZW50IGtleSBpbiAicGtleXMiLgotaW5zZXJ0IGludG8gZmtleXMgdmFsdWVzICgx MCwgJzEnLCAyKTsKLWluc2VydCBpbnRvIGZrZXlzIHZhbHVlcyAoMzAsICczJywgMyk7Ci1pbnNl cnQgaW50byBma2V5cyB2YWx1ZXMgKDQwLCAnNCcsIDIpOwotaW5zZXJ0IGludG8gZmtleXMgdmFs dWVzICg1MCwgJzUnLCAyKTsKLS0tIG5vIGtleSBpbiBwa2V5cwotaW5zZXJ0IGludG8gZmtleXMg dmFsdWVzICg3MCwgJzUnLCAxKTsKLUVSUk9SOiAgdHVwbGUgcmVmZXJlbmNlcyBub24tZXhpc3Rl bnQga2V5Ci1ERVRBSUw6ICBUcmlnZ2VyICJjaGVja19ma2V5c19wa2V5X2V4aXN0IiBmb3VuZCB0 dXBsZSByZWZlcmVuY2luZyBub24tZXhpc3RlbnQga2V5IGluICJwa2V5cyIuCi0tLSBubyBrZXkg aW4gZmtleXMyCi1pbnNlcnQgaW50byBma2V5cyB2YWx1ZXMgKDYwLCAnNicsIDQpOwotRVJST1I6 ICB0dXBsZSByZWZlcmVuY2VzIG5vbi1leGlzdGVudCBrZXkKLURFVEFJTDogIFRyaWdnZXIgImNo ZWNrX2ZrZXlzX3BrZXkyX2V4aXN0IiBmb3VuZCB0dXBsZSByZWZlcmVuY2luZyBub24tZXhpc3Rl bnQga2V5IGluICJma2V5czIiLgotZGVsZXRlIGZyb20gcGtleXMgd2hlcmUgcGtleTEgPSAzMCBh bmQgcGtleTIgPSAnMyc7Ci1OT1RJQ0U6ICBjaGVja19wa2V5c19ma2V5X2Nhc2NhZGU6IDEgdHVw bGUocykgb2YgZmtleXMgYXJlIGRlbGV0ZWQKLUVSUk9SOiAgImNoZWNrX2ZrZXlzMl9ma2V5X3Jl c3RyaWN0IjogdHVwbGUgaXMgcmVmZXJlbmNlZCBpbiAiZmtleXMiCi1DT05URVhUOiAgU1FMIHN0 YXRlbWVudCAiZGVsZXRlIGZyb20gZmtleXMyIHdoZXJlIGZrZXkyMSA9ICQxIGFuZCBma2V5MjIg PSAkMiAiCi1kZWxldGUgZnJvbSBwa2V5cyB3aGVyZSBwa2V5MSA9IDQwIGFuZCBwa2V5MiA9ICc0 JzsKLU5PVElDRTogIGNoZWNrX3BrZXlzX2ZrZXlfY2FzY2FkZTogMSB0dXBsZShzKSBvZiBma2V5 cyBhcmUgZGVsZXRlZAotTk9USUNFOiAgY2hlY2tfcGtleXNfZmtleV9jYXNjYWRlOiAxIHR1cGxl KHMpIG9mIGZrZXlzMiBhcmUgZGVsZXRlZAotdXBkYXRlIHBrZXlzIHNldCBwa2V5MSA9IDcsIHBr ZXkyID0gJzcwJyB3aGVyZSBwa2V5MSA9IDUwIGFuZCBwa2V5MiA9ICc1JzsKLU5PVElDRTogIGNo ZWNrX3BrZXlzX2ZrZXlfY2FzY2FkZTogMSB0dXBsZShzKSBvZiBma2V5cyBhcmUgdXBkYXRlZAot Tk9USUNFOiAgY2hlY2tfcGtleXNfZmtleV9jYXNjYWRlOiAxIHR1cGxlKHMpIG9mIGZrZXlzMiBh cmUgdXBkYXRlZAotdXBkYXRlIHBrZXlzIHNldCBwa2V5MSA9IDcsIHBrZXkyID0gJzcwJyB3aGVy ZSBwa2V5MSA9IDEwIGFuZCBwa2V5MiA9ICcxJzsKLUVSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1 ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAicGtleXNfaSIKLURFVEFJTDogIEtleSAocGtl eTEsIHBrZXkyKT0oNywgNzApIGFscmVhZHkgZXhpc3RzLgotU0VMRUNUIHRyaWdnZXJfbmFtZSwg ZXZlbnRfbWFuaXB1bGF0aW9uLCBldmVudF9vYmplY3Rfc2NoZW1hLCBldmVudF9vYmplY3RfdGFi bGUsCi0gICAgICAgYWN0aW9uX29yZGVyLCBhY3Rpb25fY29uZGl0aW9uLCBhY3Rpb25fb3JpZW50 YXRpb24sIGFjdGlvbl90aW1pbmcsCi0gICAgICAgYWN0aW9uX3JlZmVyZW5jZV9vbGRfdGFibGUs IGFjdGlvbl9yZWZlcmVuY2VfbmV3X3RhYmxlCi0gIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRy aWdnZXJzCi0gIFdIRVJFIGV2ZW50X29iamVjdF90YWJsZSBpbiAoJ3BrZXlzJywgJ2ZrZXlzJywg J2ZrZXlzMicpCi0gIE9SREVSIEJZIHRyaWdnZXJfbmFtZSBDT0xMQVRFICJDIiwgMjsKLSAgICAg ICAgdHJpZ2dlcl9uYW1lICAgICAgICB8IGV2ZW50X21hbmlwdWxhdGlvbiB8IGV2ZW50X29iamVj dF9zY2hlbWEgfCBldmVudF9vYmplY3RfdGFibGUgfCBhY3Rpb25fb3JkZXIgfCBhY3Rpb25fY29u ZGl0aW9uIHwgYWN0aW9uX29yaWVudGF0aW9uIHwgYWN0aW9uX3RpbWluZyB8IGFjdGlvbl9yZWZl cmVuY2Vfb2xkX3RhYmxlIHwgYWN0aW9uX3JlZmVyZW5jZV9uZXdfdGFibGUgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIGNoZWNrX2ZrZXlzMl9m a2V5X3Jlc3RyaWN0IHwgREVMRVRFICAgICAgICAgICAgIHwgcHVibGljICAgICAgICAgICAgICB8 IGZrZXlzMiAgICAgICAgICAgICB8ICAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAgfCBS T1cgICAgICAgICAgICAgICAgfCBBRlRFUiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAKLSBjaGVja19ma2V5czJfZmtleV9yZXN0cmljdCB8IFVQREFURSAgICAgICAgICAg ICB8IHB1YmxpYyAgICAgICAgICAgICAgfCBma2V5czIgICAgICAgICAgICAgfCAgICAgICAgICAg IDEgfCAgICAgICAgICAgICAgICAgIHwgUk9XICAgICAgICAgICAgICAgIHwgQUZURVIgICAgICAg ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgCi0gY2hlY2tfZmtleXMyX3BrZXlfZXhp c3QgICAgfCBJTlNFUlQgICAgICAgICAgICAgfCBwdWJsaWMgICAgICAgICAgICAgIHwgZmtleXMy ICAgICAgICAgICAgIHwgICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgICB8IFJPVyAgICAg ICAgICAgICAgICB8IEFGVEVSICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IAotIGNoZWNrX2ZrZXlzMl9wa2V5X2V4aXN0ICAgIHwgVVBEQVRFICAgICAgICAgICAgIHwgcHVi bGljICAgICAgICAgICAgICB8IGZrZXlzMiAgICAgICAgICAgICB8ICAgICAgICAgICAgMiB8ICAg ICAgICAgICAgICAgICAgfCBST1cgICAgICAgICAgICAgICAgfCBBRlRFUiAgICAgICAgIHwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAKLSBjaGVja19ma2V5c19wa2V5Ml9leGlzdCAgICB8 IElOU0VSVCAgICAgICAgICAgICB8IHB1YmxpYyAgICAgICAgICAgICAgfCBma2V5cyAgICAgICAg ICAgICAgfCAgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgIHwgUk9XICAgICAgICAgICAg ICAgIHwgQUZURVIgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgCi0gY2hl Y2tfZmtleXNfcGtleTJfZXhpc3QgICAgfCBVUERBVEUgICAgICAgICAgICAgfCBwdWJsaWMgICAg ICAgICAgICAgIHwgZmtleXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAxIHwgICAgICAgICAg ICAgICAgICB8IFJPVyAgICAgICAgICAgICAgICB8IEFGVEVSICAgICAgICAgfCAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8IAotIGNoZWNrX2ZrZXlzX3BrZXlfZXhpc3QgICAgIHwgSU5TRVJU ICAgICAgICAgICAgIHwgcHVibGljICAgICAgICAgICAgICB8IGZrZXlzICAgICAgICAgICAgICB8 ICAgICAgICAgICAgMiB8ICAgICAgICAgICAgICAgICAgfCBST1cgICAgICAgICAgICAgICAgfCBB RlRFUiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKLSBjaGVja19ma2V5 c19wa2V5X2V4aXN0ICAgICB8IFVQREFURSAgICAgICAgICAgICB8IHB1YmxpYyAgICAgICAgICAg ICAgfCBma2V5cyAgICAgICAgICAgICAgfCAgICAgICAgICAgIDIgfCAgICAgICAgICAgICAgICAg IHwgUk9XICAgICAgICAgICAgICAgIHwgQUZURVIgICAgICAgICB8ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgCi0gY2hlY2tfcGtleXNfZmtleV9jYXNjYWRlICAgfCBERUxFVEUgICAgICAg ICAgICAgfCBwdWJsaWMgICAgICAgICAgICAgIHwgcGtleXMgICAgICAgICAgICAgIHwgICAgICAg ICAgICAxIHwgICAgICAgICAgICAgICAgICB8IFJPVyAgICAgICAgICAgICAgICB8IEFGVEVSICAg ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAotIGNoZWNrX3BrZXlzX2ZrZXlf Y2FzY2FkZSAgIHwgVVBEQVRFICAgICAgICAgICAgIHwgcHVibGljICAgICAgICAgICAgICB8IHBr ZXlzICAgICAgICAgICAgICB8ICAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAgfCBST1cg ICAgICAgICAgICAgICAgfCBBRlRFUiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAKLSgxMCByb3dzKQotCi1EUk9QIFRBQkxFIHBrZXlzOwotRFJPUCBUQUJMRSBma2V5czsK LURST1AgVEFCTEUgZmtleXMyOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9zcGkvbWVzb24uYnVpbGQg Yi9jb250cmliL3NwaS9tZXNvbi5idWlsZAppbmRleCA0YTlhMmJlZjBhNS4uODVmMGIyMjc2Zjcg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvc3BpL21lc29uLmJ1aWxkCisrKyBiL2NvbnRyaWIvc3BpL21l c29uLmJ1aWxkCkBAIC03OSwzNSArNzksNiBAQCBpbnN0YWxsX2RhdGEoJ21vZGRhdGV0aW1lLmV4 YW1wbGUnLAogKQogCiAKLSMgdGhpcyBpcyBuZWVkZWQgZm9yIHRoZSByZWdyZXNzaW9uIHRlc3Rz OwotIyBjb21tZW50IG91dCBpZiB5b3Ugd2FudCBhIHF1aWV0ZXIgcmVmaW50IHBhY2thZ2UgZm9y IG90aGVyIHVzZXMKLXJlZmludF9jZmxhZ3MgPSBbJy1EUkVGSU5UX1ZFUkJPU0UnXQotCi1yZWZp bnRfc291cmNlcyA9IGZpbGVzKAotICAncmVmaW50LmMnLAotKQotCi1pZiBob3N0X3N5c3RlbSA9 PSAnd2luZG93cycKLSAgcmVmaW50X3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMy dmVyX3JjLCBleHRyYV9hcmdzOiBbCi0gICAgJy0tTkFNRScsICdyZWZpbnQnLAotICAgICctLUZJ TEVERVNDJywgJ3NwaSAtIGV4YW1wbGVzIG9mIHVzaW5nIFNQSSBhbmQgdHJpZ2dlcnMnLF0pCi1l bmRpZgotCi1yZWZpbnQgPSBzaGFyZWRfbW9kdWxlKCdyZWZpbnQnLAotICByZWZpbnRfc291cmNl cywKLSAgY19hcmdzOiByZWZpbnRfY2ZsYWdzLAotICBrd2FyZ3M6IGNvbnRyaWJfbW9kX2FyZ3Ms Ci0pCi1jb250cmliX3RhcmdldHMgKz0gcmVmaW50Ci0KLWluc3RhbGxfZGF0YSgncmVmaW50LmNv bnRyb2wnLCAncmVmaW50LS0xLjAuc3FsJywKLSAga3dhcmdzOiBjb250cmliX2RhdGFfYXJncywK LSkKLQotaW5zdGFsbF9kYXRhKCdyZWZpbnQuZXhhbXBsZScsCi0gIGt3YXJnczogY29udHJpYl9k b2NfYXJncywKLSkKLQogdGVzdHMgKz0gewogICAnbmFtZSc6ICdzcGknLAogICAnc2QnOiBtZXNv bi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKQEAgLTExNSw3ICs4Niw2IEBAIHRlc3RzICs9IHsKICAg J3JlZ3Jlc3MnOiB7CiAgICAgJ3NxbCc6IFsKICAgICAgICdhdXRvaW5jJywKLSAgICAgICdyZWZp bnQnLAogICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1naXQgYS9jb250cmliL3NwaS9yZWZpbnQtLTEu MC5zcWwgYi9jb250cmliL3NwaS9yZWZpbnQtLTEuMC5zcWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGZhZjc5N2MyMTU3Li4wMDAwMDAwMDAwMAotLS0gYS9jb250cmliL3NwaS9yZWZp bnQtLTEuMC5zcWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBjb250cmliL3Nw aS9yZWZpbnQtLTEuMC5zcWwgKi8KLQotLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQg aW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KLVxlY2hvIFVzZSAiQ1JF QVRFIEVYVEVOU0lPTiByZWZpbnQiIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAotCi1DUkVBVEUg RlVOQ1RJT04gY2hlY2tfcHJpbWFyeV9rZXkoKQotUkVUVVJOUyB0cmlnZ2VyCi1BUyAnTU9EVUxF X1BBVEhOQU1FJwotTEFOR1VBR0UgQzsKLQotQ1JFQVRFIEZVTkNUSU9OIGNoZWNrX2ZvcmVpZ25f a2V5KCkKLVJFVFVSTlMgdHJpZ2dlcgotQVMgJ01PRFVMRV9QQVRITkFNRScKLUxBTkdVQUdFIEM7 CmRpZmYgLS1naXQgYS9jb250cmliL3NwaS9yZWZpbnQuYyBiL2NvbnRyaWIvc3BpL3JlZmludC5j CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmZkOTYzZmE4My4uMDAwMDAwMDAwMDAK LS0tIGEvY29udHJpYi9zcGkvcmVmaW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MzggKzAsMCBA QAotLyoKLSAqIGNvbnRyaWIvc3BpL3JlZmludC5jCi0gKgotICoKLSAqIHJlZmludC5jIC0tCXNl dCBvZiBmdW5jdGlvbnMgdG8gZGVmaW5lIHJlZmVyZW50aWFsIGludGVncml0eQotICoJCWNvbnN0 cmFpbnRzIHVzaW5nIGdlbmVyYWwgdHJpZ2dlcnMuCi0gKi8KLSNpbmNsdWRlICJwb3N0Z3Jlcy5o IgotCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLQotI2luY2x1ZGUgImNvbW1hbmRzL3RyaWdnZXIuaCIK LSNpbmNsdWRlICJleGVjdXRvci9zcGkuaCIKLSNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgot I2luY2x1ZGUgInV0aWxzL3JlbC5oIgotCi1QR19NT0RVTEVfTUFHSUNfRVhUKAotCQkJCQkubmFt ZSA9ICJyZWZpbnQiLAotCQkJCQkudmVyc2lvbiA9IFBHX1ZFUlNJT04KLSk7Ci0KLS8qCi0gKiBj aGVja19wcmltYXJ5X2tleSAoKSAtLSBjaGVjayB0aGF0IGtleSBpbiB0dXBsZSBiZWluZyBpbnNl cnRlZC91cGRhdGVkCi0gKgkJCSByZWZlcmVuY2VzIGV4aXN0aW5nIHR1cGxlIGluICJwcmltYXJ5 IiB0YWJsZS4KLSAqIFRob3VnaCBpdCdzIGNhbGxlZCB3aXRob3V0IGFyZ3MgWW91IGhhdmUgdG8g c3BlY2lmeSByZWZlcmVuY2VkCi0gKiB0YWJsZS9rZXlzIHdoaWxlIGNyZWF0aW5nIHRyaWdnZXI6 ICBrZXkgZmllbGQgbmFtZXMgaW4gdHJpZ2dlcmVkIHRhYmxlLAotICogcmVmZXJlbmNlZCB0YWJs ZSBuYW1lLCByZWZlcmVuY2VkIGtleSBmaWVsZCBuYW1lczoKLSAqIEVYRUNVVEUgUFJPQ0VEVVJF Ci0gKiBjaGVja19wcmltYXJ5X2tleSAoJ0ZrZXkxJywgJ0ZrZXkyJywgJ1B0YWJsZScsICdQa2V5 MScsICdQa2V5MicpLgotICovCi0KLVBHX0ZVTkNUSU9OX0lORk9fVjEoY2hlY2tfcHJpbWFyeV9r ZXkpOwotCi1EYXR1bQotY2hlY2tfcHJpbWFyeV9rZXkoUEdfRlVOQ1RJT05fQVJHUykKLXsKLQlU cmlnZ2VyRGF0YSAqdHJpZ2RhdGEgPSAoVHJpZ2dlckRhdGEgKikgZmNpbmZvLT5jb250ZXh0Owot CVRyaWdnZXIgICAgKnRyaWdnZXI7CQkvKiB0byBnZXQgdHJpZ2dlciBuYW1lICovCi0JaW50CQkJ bmFyZ3M7CQkJLyogIyBvZiBhcmdzIHNwZWNpZmllZCBpbiBDUkVBVEUgVFJJR0dFUiAqLwotCWNo YXIJICAqKmFyZ3M7CQkJLyogYXJndW1lbnRzOiBjb2x1bW4gbmFtZXMgYW5kIHRhYmxlIG5hbWUg Ki8KLQlpbnQJCQlua2V5czsJCQkvKiAjIG9mIGtleSBjb2x1bW5zICg9IG5hcmdzIC8gMikgKi8K LQlEYXR1bQkgICAqa3ZhbHM7CQkJLyoga2V5IHZhbHVlcyAqLwotCWNoYXIJICAgKnJlbG5hbWU7 CQkvKiByZWZlcmVuY2VkIHJlbGF0aW9uIG5hbWUgKi8KLQlSZWxhdGlvbglyZWw7CQkJLyogdHJp Z2dlcmVkIHJlbGF0aW9uICovCi0JSGVhcFR1cGxlCXR1cGxlID0gTlVMTDsJLyogdHVwbGUgdG8g cmV0dXJuICovCi0JVHVwbGVEZXNjCXR1cGRlc2M7CQkvKiB0dXBsZSBkZXNjcmlwdGlvbiAqLwot CVNQSVBsYW5QdHIJcHBsYW47CQkJLyogcHJlcGFyZWQgcGxhbiAqLwotCU9pZAkJICAgKmFyZ3R5 cGVzID0gTlVMTDsJLyoga2V5IHR5cGVzIHRvIHByZXBhcmUgZXhlY3V0aW9uIHBsYW4gKi8KLQli b29sCQlpc251bGw7CQkJLyogdG8ga25vdyBpcyBzb21lIGNvbHVtbiBOVUxMIG9yIG5vdCAqLwot CWludAkJCXJldDsKLQlpbnQJCQlpOwotCVN0cmluZ0luZm9EYXRhIHNxbDsKLQotI2lmZGVmCURF QlVHX1FVRVJZCi0JZWxvZyhERUJVRzQsICJjaGVja19wcmltYXJ5X2tleTogRW50ZXIgRnVuY3Rp b24iKTsKLSNlbmRpZgotCi0JLyoKLQkgKiBTb21lIGNoZWNrcyBmaXJzdC4uLgotCSAqLwotCi0J LyogQ2FsbGVkIGJ5IHRyaWdnZXIgbWFuYWdlciA/ICovCi0JaWYgKCFDQUxMRURfQVNfVFJJR0dF UihmY2luZm8pKQotCQkvKiBpbnRlcm5hbCBlcnJvciAqLwotCQllbG9nKEVSUk9SLCAiY2hlY2tf cHJpbWFyeV9rZXk6IG5vdCBmaXJlZCBieSB0cmlnZ2VyIG1hbmFnZXIiKTsKLQotCS8qIFNob3Vs ZCBiZSBjYWxsZWQgZm9yIFJPVyB0cmlnZ2VyICovCi0JaWYgKCFUUklHR0VSX0ZJUkVEX0ZPUl9S T1codHJpZ2RhdGEtPnRnX2V2ZW50KSkKLQkJLyogaW50ZXJuYWwgZXJyb3IgKi8KLQkJZWxvZyhF UlJPUiwgImNoZWNrX3ByaW1hcnlfa2V5OiBtdXN0IGJlIGZpcmVkIGZvciByb3ciKTsKLQotCWlm ICghVFJJR0dFUl9GSVJFRF9BRlRFUih0cmlnZGF0YS0+dGdfZXZlbnQpKQotCQkvKiBpbnRlcm5h bCBlcnJvciAqLwotCQllbG9nKEVSUk9SLCAiY2hlY2tfcHJpbWFyeV9rZXk6IG11c3QgYmUgZmly ZWQgYnkgQUZURVIgdHJpZ2dlciIpOwotCi0JLyogSWYgSU5TRVJUaW9uIHRoZW4gbXVzdCBjaGVj ayBUdXBsZSB0byBiZWluZyBpbnNlcnRlZCAqLwotCWlmIChUUklHR0VSX0ZJUkVEX0JZX0lOU0VS VCh0cmlnZGF0YS0+dGdfZXZlbnQpKQotCQl0dXBsZSA9IHRyaWdkYXRhLT50Z190cmlndHVwbGU7 Ci0KLQkvKiBOb3Qgc2hvdWxkIGJlIGNhbGxlZCBmb3IgREVMRVRFICovCi0JZWxzZSBpZiAoVFJJ R0dFUl9GSVJFRF9CWV9ERUxFVEUodHJpZ2RhdGEtPnRnX2V2ZW50KSkKLQkJLyogaW50ZXJuYWwg ZXJyb3IgKi8KLQkJZWxvZyhFUlJPUiwgImNoZWNrX3ByaW1hcnlfa2V5OiBjYW5ub3QgcHJvY2Vz cyBERUxFVEUgZXZlbnRzIik7Ci0KLQkvKiBJZiBVUERBVEUsIHRoZW4gbXVzdCBjaGVjayBuZXcg VHVwbGUsIG5vdCBvbGQgb25lICovCi0JZWxzZQotCQl0dXBsZSA9IHRyaWdkYXRhLT50Z19uZXd0 dXBsZTsKLQotCXRyaWdnZXIgPSB0cmlnZGF0YS0+dGdfdHJpZ2dlcjsKLQluYXJncyA9IHRyaWdn ZXItPnRnbmFyZ3M7Ci0JYXJncyA9IHRyaWdnZXItPnRnYXJnczsKLQotCWlmIChuYXJncyAlIDIg IT0gMSkJCQkvKiBvZGQgbnVtYmVyIG9mIGFyZ3VtZW50cyEgKi8KLQkJLyogaW50ZXJuYWwgZXJy b3IgKi8KLQkJZWxvZyhFUlJPUiwgImNoZWNrX3ByaW1hcnlfa2V5OiBvZGQgbnVtYmVyIG9mIGFy Z3VtZW50cyBzaG91bGQgYmUgc3BlY2lmaWVkIik7Ci0KLQlua2V5cyA9IG5hcmdzIC8gMjsKLQly ZWxuYW1lID0gYXJnc1tua2V5c107Ci0JcmVsID0gdHJpZ2RhdGEtPnRnX3JlbGF0aW9uOwotCXR1 cGRlc2MgPSByZWwtPnJkX2F0dDsKLQotCS8qIENvbm5lY3QgdG8gU1BJIG1hbmFnZXIgKi8KLQlT UElfY29ubmVjdCgpOwotCi0JLyoKLQkgKiBXZSB1c2UgU1BJIHBsYW4gcHJlcGFyYXRpb24gZmVh dHVyZSwgc28gYWxsb2NhdGUgc3BhY2UgdG8gcGxhY2Uga2V5Ci0JICogdmFsdWVzLgotCSAqLwot CWt2YWxzID0gKERhdHVtICopIHBhbGxvYyhua2V5cyAqIHNpemVvZihEYXR1bSkpOwotCi0JLyog YWxsb2NhdGUgYXJndHlwZXMgZm9yIHByZXBhcmF0aW9uICovCi0JYXJndHlwZXMgPSAoT2lkICop IHBhbGxvYyhua2V5cyAqIHNpemVvZihPaWQpKTsKLQotCS8qIEZvciBlYWNoIGNvbHVtbiBpbiBr ZXkgLi4uICovCi0JZm9yIChpID0gMDsgaSA8IG5rZXlzOyBpKyspCi0JewotCQkvKiBnZXQgaW5k ZXggb2YgY29sdW1uIGluIHR1cGxlICovCi0JCWludAkJCWZudW1iZXIgPSBTUElfZm51bWJlcih0 dXBkZXNjLCBhcmdzW2ldKTsKLQotCQkvKiBCYWQgZ3V5cyBtYXkgZ2l2ZSB1cyB1bi1leGlzdGlu ZyBjb2x1bW4gaW4gQ1JFQVRFIFRSSUdHRVIgKi8KLQkJaWYgKGZudW1iZXIgPD0gMCkKLQkJCWVy ZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX0NPTFVNTiksCi0J CQkJCSBlcnJtc2coInRoZXJlIGlzIG5vIGF0dHJpYnV0ZSBcIiVzXCIgaW4gcmVsYXRpb24gXCIl c1wiIiwKLQkJCQkJCQlhcmdzW2ldLCBTUElfZ2V0cmVsbmFtZShyZWwpKSkpOwotCi0JCS8qIFdl bGwsIGdldCBiaW5hcnkgKGluIGludGVybmFsIGZvcm1hdCkgdmFsdWUgb2YgY29sdW1uICovCi0J CWt2YWxzW2ldID0gU1BJX2dldGJpbnZhbCh0dXBsZSwgdHVwZGVzYywgZm51bWJlciwgJmlzbnVs bCk7Ci0KLQkJLyoKLQkJICogSWYgaXQncyBOVUxMIHRoZW4gbm90aGluZyB0byBkbyEgRE9OJ1Qg Rk9SR0VUIGNhbGwgU1BJX2ZpbmlzaCAoKSEKLQkJICogRE9OJ1QgRk9SR0VUIHJldHVybiB0dXBs ZSEgRXhlY3V0b3IgaW5zZXJ0cyB0dXBsZSB5b3UncmUgcmV0dXJuaW5nIQotCQkgKiBJZiB5b3Ug cmV0dXJuIE5VTEwgdGhlbiBub3RoaW5nIHdpbGwgYmUgaW5zZXJ0ZWQhCi0JCSAqLwotCQlpZiAo aXNudWxsKQotCQl7Ci0JCQlTUElfZmluaXNoKCk7Ci0JCQlyZXR1cm4gUG9pbnRlckdldERhdHVt KHR1cGxlKTsKLQkJfQotCi0JCS8qIEdldCB0eXBlSWQgb2YgY29sdW1uICovCi0JCWFyZ3R5cGVz W2ldID0gU1BJX2dldHR5cGVpZCh0dXBkZXNjLCBmbnVtYmVyKTsKLQl9Ci0KLQlpbml0U3RyaW5n SW5mbygmc3FsKTsKLQotCS8qCi0JICogQ29uc3RydWN0IHF1ZXJ5OiBTRUxFQ1QgMSBGUk9NIF9y ZWZlcmVuY2VkX3JlbGF0aW9uXyBXSEVSRSBQa2V5MSA9ICQxCi0JICogW0FORCBQa2V5MiA9ICQy IFsuLi5dXQotCSAqLwotCWFwcGVuZFN0cmluZ0luZm8oJnNxbCwgInNlbGVjdCAxIGZyb20gJXMg d2hlcmUgIiwgcmVsbmFtZSk7Ci0JZm9yIChpID0gMTsgaSA8PSBua2V5czsgaSsrKQotCXsKLQkJ YXBwZW5kU3RyaW5nSW5mbygmc3FsLCAiJXMgPSAkJWQgIiwgYXJnc1tpICsgbmtleXNdLCBpKTsK LQkJaWYgKGkgPCBua2V5cykKLQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnNxbCwgImFuZCAi KTsKLQl9Ci0KLQkvKiBQcmVwYXJlIHBsYW4gZm9yIHF1ZXJ5ICovCi0JcHBsYW4gPSBTUElfcHJl cGFyZShzcWwuZGF0YSwgbmtleXMsIGFyZ3R5cGVzKTsKLQlpZiAocHBsYW4gPT0gTlVMTCkKLQkJ LyogaW50ZXJuYWwgZXJyb3IgKi8KLQkJZWxvZyhFUlJPUiwgImNoZWNrX3ByaW1hcnlfa2V5OiBT UElfcHJlcGFyZSByZXR1cm5lZCAlcyIsIFNQSV9yZXN1bHRfY29kZV9zdHJpbmcoU1BJX3Jlc3Vs dCkpOwotCi0JcGZyZWUoc3FsLmRhdGEpOwotCi0JLyoKLQkgKiBPaywgZXhlY3V0ZSBwcmVwYXJl ZCBwbGFuLgotCSAqLwotCXJldCA9IFNQSV9leGVjcChwcGxhbiwga3ZhbHMsIE5VTEwsIDEpOwot CS8qIHdlIGhhdmUgbm8gTlVMTHMgLSBzbyB3ZSBwYXNzICAgXl5eXiAgIGhlcmUgKi8KLQotCWlm IChyZXQgPCAwKQotCQkvKiBpbnRlcm5hbCBlcnJvciAqLwotCQllbG9nKEVSUk9SLCAiY2hlY2tf cHJpbWFyeV9rZXk6IFNQSV9leGVjcCByZXR1cm5lZCAlZCIsIHJldCk7Ci0KLQkvKgotCSAqIElm IHRoZXJlIGFyZSBubyB0dXBsZXMgcmV0dXJuZWQgYnkgU0VMRUNUIHRoZW4gLi4uCi0JICovCi0J aWYgKFNQSV9wcm9jZXNzZWQgPT0gMCkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShF UlJDT0RFX1RSSUdHRVJFRF9BQ1RJT05fRVhDRVBUSU9OKSwKLQkJCQkgZXJybXNnKCJ0dXBsZSBy ZWZlcmVuY2VzIG5vbi1leGlzdGVudCBrZXkiKSwKLQkJCQkgZXJyZGV0YWlsKCJUcmlnZ2VyIFwi JXNcIiBmb3VuZCB0dXBsZSByZWZlcmVuY2luZyBub24tZXhpc3RlbnQga2V5IGluIFwiJXNcIi4i LCB0cmlnZ2VyLT50Z25hbWUsIHJlbG5hbWUpKSk7Ci0KLQlTUElfZmluaXNoKCk7Ci0KLQlyZXR1 cm4gUG9pbnRlckdldERhdHVtKHR1cGxlKTsKLX0KLQotLyoKLSAqIGNoZWNrX2ZvcmVpZ25fa2V5 ICgpIC0tIGNoZWNrIHRoYXQga2V5IGluIHR1cGxlIGJlaW5nIGRlbGV0ZWQvdXBkYXRlZAotICoJ CQkgaXMgbm90IHJlZmVyZW5jZWQgYnkgdHVwbGVzIGluICJmb3JlaWduIiB0YWJsZShzKS4KLSAq IFRob3VnaCBpdCdzIGNhbGxlZCB3aXRob3V0IGFyZ3MgWW91IGhhdmUgdG8gc3BlY2lmeSAod2hp bGUgY3JlYXRpbmcgdHJpZ2dlcik6Ci0gKiBudW1iZXIgb2YgcmVmZXJlbmNlcywgYWN0aW9uIHRv IGRvIGlmIGtleSByZWZlcmVuY2VkCi0gKiAoJ3Jlc3RyaWN0JyB8ICdzZXRudWxsJyB8ICdjYXNj YWRlJyksIGtleSBmaWVsZCBuYW1lcyBpbiB0cmlnZ2VyZWQKLSAqICgicHJpbWFyeSIpIHRhYmxl IGFuZCByZWZlcmVuY2luZyB0YWJsZShzKS9rZXlzOgotICogRVhFQ1VURSBQUk9DRURVUkUKLSAq IGNoZWNrX2ZvcmVpZ25fa2V5ICgyLCAncmVzdHJpY3QnLCAnUGtleTEnLCAnUGtleTInLAotICog J0Z0YWJsZTEnLCAnRmtleTExJywgJ0ZrZXkxMicsICdGdGFibGUyJywgJ0ZrZXkyMScsICdGa2V5 MjInKS4KLSAqLwotCi1QR19GVU5DVElPTl9JTkZPX1YxKGNoZWNrX2ZvcmVpZ25fa2V5KTsKLQot RGF0dW0KLWNoZWNrX2ZvcmVpZ25fa2V5KFBHX0ZVTkNUSU9OX0FSR1MpCi17Ci0JVHJpZ2dlckRh dGEgKnRyaWdkYXRhID0gKFRyaWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4dDsKLQlUcmlnZ2Vy ICAgICp0cmlnZ2VyOwkJLyogdG8gZ2V0IHRyaWdnZXIgbmFtZSAqLwotCWludAkJCW5hcmdzOwkJ CS8qICMgb2YgYXJncyBzcGVjaWZpZWQgaW4gQ1JFQVRFIFRSSUdHRVIgKi8KLQljaGFyCSAgKiph cmdzOwkJCS8qIGFyZ3VtZW50czogYXMgZGVzY3JpYmVkIGFib3ZlICovCi0JY2hhcgkgICoqYXJn c190ZW1wOwotCWludAkJCW5yZWZzOwkJCS8qIG51bWJlciBvZiByZWZlcmVuY2VzICg9PSAjIG9m IHBsYW5zKSAqLwotCWNoYXIJCWFjdGlvbjsJCQkvKiAnUidlc3RyaWN0IHwgJ1MnZXRudWxsIHwg J0MnYXNjYWRlICovCi0JaW50CQkJbmtleXM7CQkJLyogIyBvZiBrZXkgY29sdW1ucyAqLwotCURh dHVtCSAgICprdmFsczsJCQkvKiBrZXkgdmFsdWVzICovCi0JY2hhcgkgICAqcmVsbmFtZTsJCS8q IHJlZmVyZW5jaW5nIHJlbGF0aW9uIG5hbWUgKi8KLQlSZWxhdGlvbglyZWw7CQkJLyogdHJpZ2dl cmVkIHJlbGF0aW9uICovCi0JSGVhcFR1cGxlCXRyaWd0dXBsZSA9IE5VTEw7CS8qIHR1cGxlIHRv IGJlaW5nIGNoYW5nZWQgKi8KLQlIZWFwVHVwbGUJbmV3dHVwbGUgPSBOVUxMOwkvKiB0dXBsZSB0 byByZXR1cm4gKi8KLQlUdXBsZURlc2MJdHVwZGVzYzsJCS8qIHR1cGxlIGRlc2NyaXB0aW9uICov Ci0JU1BJUGxhblB0ciAqc3BsYW47CQkJLyogcHJlcGFyZWQgcGxhbihzKSAqLwotCU9pZAkJICAg KmFyZ3R5cGVzID0gTlVMTDsJLyoga2V5IHR5cGVzIHRvIHByZXBhcmUgZXhlY3V0aW9uIHBsYW4g Ki8KLQlib29sCQlpc251bGw7CQkJLyogdG8ga25vdyBpcyBzb21lIGNvbHVtbiBOVUxMIG9yIG5v dCAqLwotCWJvb2wJCWlzZXF1YWwgPSB0cnVlOyAvKiBhcmUga2V5cyBpbiBib3RoIHR1cGxlcyBl cXVhbCAoaW4gVVBEQVRFKSAqLwotCWludAkJCWlzX3VwZGF0ZSA9IDA7Ci0JaW50CQkJcmV0Owot CWludAkJCWksCi0JCQkJcjsKLQljaGFyCSAgKiphcmdzMjsKLQotI2lmZGVmIERFQlVHX1FVRVJZ Ci0JZWxvZyhERUJVRzQsICJjaGVja19mb3JlaWduX2tleTogRW50ZXIgRnVuY3Rpb24iKTsKLSNl bmRpZgotCi0JLyoKLQkgKiBTb21lIGNoZWNrcyBmaXJzdC4uLgotCSAqLwotCi0JLyogQ2FsbGVk IGJ5IHRyaWdnZXIgbWFuYWdlciA/ICovCi0JaWYgKCFDQUxMRURfQVNfVFJJR0dFUihmY2luZm8p KQotCQkvKiBpbnRlcm5hbCBlcnJvciAqLwotCQllbG9nKEVSUk9SLCAiY2hlY2tfZm9yZWlnbl9r ZXk6IG5vdCBmaXJlZCBieSB0cmlnZ2VyIG1hbmFnZXIiKTsKLQotCS8qIFNob3VsZCBiZSBjYWxs ZWQgZm9yIFJPVyB0cmlnZ2VyICovCi0JaWYgKCFUUklHR0VSX0ZJUkVEX0ZPUl9ST1codHJpZ2Rh dGEtPnRnX2V2ZW50KSkKLQkJLyogaW50ZXJuYWwgZXJyb3IgKi8KLQkJZWxvZyhFUlJPUiwgImNo ZWNrX2ZvcmVpZ25fa2V5OiBtdXN0IGJlIGZpcmVkIGZvciByb3ciKTsKLQotCS8qIE5vdCBzaG91 bGQgYmUgY2FsbGVkIGZvciBJTlNFUlQgKi8KLQlpZiAoVFJJR0dFUl9GSVJFRF9CWV9JTlNFUlQo dHJpZ2RhdGEtPnRnX2V2ZW50KSkKLQkJLyogaW50ZXJuYWwgZXJyb3IgKi8KLQkJZWxvZyhFUlJP UiwgImNoZWNrX2ZvcmVpZ25fa2V5OiBjYW5ub3QgcHJvY2VzcyBJTlNFUlQgZXZlbnRzIik7Ci0K LQlpZiAoIVRSSUdHRVJfRklSRURfQUZURVIodHJpZ2RhdGEtPnRnX2V2ZW50KSkKLQkJLyogaW50 ZXJuYWwgZXJyb3IgKi8KLQkJZWxvZyhFUlJPUiwgImNoZWNrX2ZvcmVpZ25fa2V5OiBtdXN0IGJl IGZpcmVkIGJ5IEFGVEVSIHRyaWdnZXIiKTsKLQotCS8qIEhhdmUgdG8gY2hlY2sgdGdfdHJpZ3R1 cGxlIC0gdHVwbGUgYmVpbmcgZGVsZXRlZCAqLwotCXRyaWd0dXBsZSA9IHRyaWdkYXRhLT50Z190 cmlndHVwbGU7Ci0KLQkvKgotCSAqIEJ1dCBpZiB0aGlzIGlzIFVQREFURSB0aGVuIHdlIGhhdmUg dG8gcmV0dXJuIHRnX25ld3R1cGxlLiBBbHNvLCBpZiBrZXkKLQkgKiBpbiB0Z19uZXd0dXBsZSBp cyB0aGUgc2FtZSBhcyBpbiB0Z190cmlndHVwbGUgdGhlbiBub3RoaW5nIHRvIGRvLgotCSAqLwot CWlzX3VwZGF0ZSA9IDA7Ci0JaWYgKFRSSUdHRVJfRklSRURfQllfVVBEQVRFKHRyaWdkYXRhLT50 Z19ldmVudCkpCi0JewotCQluZXd0dXBsZSA9IHRyaWdkYXRhLT50Z19uZXd0dXBsZTsKLQkJaXNf dXBkYXRlID0gMTsKLQl9Ci0JdHJpZ2dlciA9IHRyaWdkYXRhLT50Z190cmlnZ2VyOwotCW5hcmdz ID0gdHJpZ2dlci0+dGduYXJnczsKLQlhcmdzID0gdHJpZ2dlci0+dGdhcmdzOwotCi0JaWYgKG5h cmdzIDwgNSkJCQkJLyogbnJlZnMsIGFjdGlvbiwga2V5LCBSZWxhdGlvbiwga2V5IC0gYXQKLQkJ CQkJCQkJICogbGVhc3QgKi8KLQkJLyogaW50ZXJuYWwgZXJyb3IgKi8KLQkJZWxvZyhFUlJPUiwg ImNoZWNrX2ZvcmVpZ25fa2V5OiB0b28gc2hvcnQgJWQgKDwgNSkgbGlzdCBvZiBhcmd1bWVudHMi LCBuYXJncyk7Ci0KLQlucmVmcyA9IHBnX3N0cnRvaW50MzIoYXJnc1swXSk7Ci0JaWYgKG5yZWZz IDwgMSkKLQkJLyogaW50ZXJuYWwgZXJyb3IgKi8KLQkJZWxvZyhFUlJPUiwgImNoZWNrX2ZvcmVp Z25fa2V5OiAlZCAoPCAxKSBudW1iZXIgb2YgcmVmZXJlbmNlcyBzcGVjaWZpZWQiLCBucmVmcyk7 Ci0JYWN0aW9uID0gcGdfYXNjaWlfdG9sb3dlcigodW5zaWduZWQgY2hhcikgKihhcmdzWzFdKSk7 Ci0JaWYgKGFjdGlvbiAhPSAncicgJiYgYWN0aW9uICE9ICdjJyAmJiBhY3Rpb24gIT0gJ3MnKQot CQkvKiBpbnRlcm5hbCBlcnJvciAqLwotCQllbG9nKEVSUk9SLCAiY2hlY2tfZm9yZWlnbl9rZXk6 IGludmFsaWQgYWN0aW9uICVzIiwgYXJnc1sxXSk7Ci0JbmFyZ3MgLT0gMjsKLQlhcmdzICs9IDI7 Ci0JbmtleXMgPSAobmFyZ3MgLSBucmVmcykgLyAobnJlZnMgKyAxKTsKLQlpZiAobmtleXMgPD0g MCB8fCBuYXJncyAhPSAobnJlZnMgKyBua2V5cyAqIChucmVmcyArIDEpKSkKLQkJLyogaW50ZXJu YWwgZXJyb3IgKi8KLQkJZWxvZyhFUlJPUiwgImNoZWNrX2ZvcmVpZ25fa2V5OiBpbnZhbGlkIG51 bWJlciBvZiBhcmd1bWVudHMgJWQgZm9yICVkIHJlZmVyZW5jZXMiLAotCQkJIG5hcmdzICsgMiwg bnJlZnMpOwotCi0JcmVsID0gdHJpZ2RhdGEtPnRnX3JlbGF0aW9uOwotCXR1cGRlc2MgPSByZWwt PnJkX2F0dDsKLQotCS8qIENvbm5lY3QgdG8gU1BJIG1hbmFnZXIgKi8KLQlTUElfY29ubmVjdCgp OwotCi0JLyoKLQkgKiBXZSB1c2UgU1BJIHBsYW4gcHJlcGFyYXRpb24gZmVhdHVyZSwgc28gYWxs b2NhdGUgc3BhY2UgdG8gcGxhY2Uga2V5Ci0JICogdmFsdWVzLgotCSAqLwotCWt2YWxzID0gKERh dHVtICopIHBhbGxvYyhua2V5cyAqIHNpemVvZihEYXR1bSkpOwotCi0JLyogYWxsb2NhdGUgYXJn dHlwZXMgZm9yIHByZXBhcmF0aW9uICovCi0JYXJndHlwZXMgPSAoT2lkICopIHBhbGxvYyhua2V5 cyAqIHNpemVvZihPaWQpKTsKLQotCS8qIEZvciBlYWNoIGNvbHVtbiBpbiBrZXkgLi4uICovCi0J Zm9yIChpID0gMDsgaSA8IG5rZXlzOyBpKyspCi0JewotCQkvKiBnZXQgaW5kZXggb2YgY29sdW1u IGluIHR1cGxlICovCi0JCWludAkJCWZudW1iZXIgPSBTUElfZm51bWJlcih0dXBkZXNjLCBhcmdz W2ldKTsKLQotCQkvKiBCYWQgZ3V5cyBtYXkgZ2l2ZSB1cyB1bi1leGlzdGluZyBjb2x1bW4gaW4g Q1JFQVRFIFRSSUdHRVIgKi8KLQkJaWYgKGZudW1iZXIgPD0gMCkKLQkJCWVyZXBvcnQoRVJST1Is Ci0JCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX0NPTFVNTiksCi0JCQkJCSBlcnJtc2co InRoZXJlIGlzIG5vIGF0dHJpYnV0ZSBcIiVzXCIgaW4gcmVsYXRpb24gXCIlc1wiIiwKLQkJCQkJ CQlhcmdzW2ldLCBTUElfZ2V0cmVsbmFtZShyZWwpKSkpOwotCi0JCS8qIFdlbGwsIGdldCBiaW5h cnkgKGluIGludGVybmFsIGZvcm1hdCkgdmFsdWUgb2YgY29sdW1uICovCi0JCWt2YWxzW2ldID0g U1BJX2dldGJpbnZhbCh0cmlndHVwbGUsIHR1cGRlc2MsIGZudW1iZXIsICZpc251bGwpOwotCi0J CS8qCi0JCSAqIElmIGl0J3MgTlVMTCB0aGVuIG5vdGhpbmcgdG8gZG8hIERPTidUIEZPUkdFVCBj YWxsIFNQSV9maW5pc2ggKCkhCi0JCSAqIERPTidUIEZPUkdFVCByZXR1cm4gdHVwbGUhIEV4ZWN1 dG9yIGluc2VydHMgdHVwbGUgeW91J3JlIHJldHVybmluZyEKLQkJICogSWYgeW91IHJldHVybiBO VUxMIHRoZW4gbm90aGluZyB3aWxsIGJlIGluc2VydGVkIQotCQkgKi8KLQkJaWYgKGlzbnVsbCkK LQkJewotCQkJU1BJX2ZpbmlzaCgpOwotCQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bSgobmV3dHVw bGUgPT0gTlVMTCkgPyB0cmlndHVwbGUgOiBuZXd0dXBsZSk7Ci0JCX0KLQotCQkvKgotCQkgKiBJ ZiBVUERBVEUgdGhlbiBnZXQgY29sdW1uIHZhbHVlIGZyb20gbmV3IHR1cGxlIGJlaW5nIGluc2Vy dGVkIGFuZAotCQkgKiBjb21wYXJlIGlzIHRoaXMgdGhlIHNhbWUgYXMgb2xkIG9uZS4gRm9yIHRo ZSBtb21lbnQgd2UgdXNlIHN0cmluZwotCQkgKiBwcmVzZW50YXRpb24gb2YgdmFsdWVzLi4uCi0J CSAqLwotCQlpZiAobmV3dHVwbGUgIT0gTlVMTCkKLQkJewotCQkJY2hhcgkgICAqb2xkdmFsID0g U1BJX2dldHZhbHVlKHRyaWd0dXBsZSwgdHVwZGVzYywgZm51bWJlcik7Ci0JCQljaGFyCSAgICpu ZXd2YWw7Ci0KLQkJCS8qIHRoaXMgc2hvdWxkbid0IGhhcHBlbiEgU1BJX0VSUk9SX05PT1VURlVO QyA/ICovCi0JCQlpZiAob2xkdmFsID09IE5VTEwpCi0JCQkJLyogaW50ZXJuYWwgZXJyb3IgKi8K LQkJCQllbG9nKEVSUk9SLCAiY2hlY2tfZm9yZWlnbl9rZXk6IFNQSV9nZXR2YWx1ZSByZXR1cm5l ZCAlcyIsIFNQSV9yZXN1bHRfY29kZV9zdHJpbmcoU1BJX3Jlc3VsdCkpOwotCQkJbmV3dmFsID0g U1BJX2dldHZhbHVlKG5ld3R1cGxlLCB0dXBkZXNjLCBmbnVtYmVyKTsKLQkJCWlmIChuZXd2YWwg PT0gTlVMTCB8fCBzdHJjbXAob2xkdmFsLCBuZXd2YWwpICE9IDApCi0JCQkJaXNlcXVhbCA9IGZh bHNlOwotCQl9Ci0KLQkJLyogR2V0IHR5cGVJZCBvZiBjb2x1bW4gKi8KLQkJYXJndHlwZXNbaV0g PSBTUElfZ2V0dHlwZWlkKHR1cGRlc2MsIGZudW1iZXIpOwotCX0KLQlhcmdzX3RlbXAgPSBhcmdz OwotCW5hcmdzIC09IG5rZXlzOwotCWFyZ3MgKz0gbmtleXM7Ci0JYXJnczIgPSBhcmdzOwotCi0J c3BsYW4gPSAoU1BJUGxhblB0ciAqKSBwYWxsb2MobnJlZnMgKiBzaXplb2YoU1BJUGxhblB0cikp OwotCi0JZm9yIChyID0gMDsgciA8IG5yZWZzOyByKyspCi0JewotCQlTdHJpbmdJbmZvRGF0YSBz cWw7Ci0JCVNQSVBsYW5QdHIJcHBsYW47Ci0KLQkJaW5pdFN0cmluZ0luZm8oJnNxbCk7Ci0KLQkJ cmVsbmFtZSA9IGFyZ3MyWzBdOwotCi0JCS8qLS0tLS0tLS0tCi0JCSAqIEZvciAnUidlc3RyaWN0 IGFjdGlvbiB3ZSBjb25zdHJ1Y3QgU0VMRUNUIHF1ZXJ5OgotCQkgKgotCQkgKglTRUxFQ1QgMQot CQkgKglGUk9NIF9yZWZlcmVuY2luZ19yZWxhdGlvbl8KLQkJICoJV0hFUkUgRmtleTEgPSAkMSBb QU5EIEZrZXkyID0gJDIgWy4uLl1dCi0JCSAqCi0JCSAqCXRvIGNoZWNrIGlzIHR1cGxlIHJlZmVy ZW5jZWQgb3Igbm90LgotCQkgKi0tLS0tLS0tLQotCQkgKi8KLQkJaWYgKGFjdGlvbiA9PSAncicp Ci0JCQlhcHBlbmRTdHJpbmdJbmZvKCZzcWwsICJzZWxlY3QgMSBmcm9tICVzIHdoZXJlICIsIHJl bG5hbWUpOwotCi0JCS8qLS0tLS0tLS0tCi0JCSAqIEZvciAnQydhc2NhZGUgYWN0aW9uIHdlIGNv bnN0cnVjdCBERUxFVEUgcXVlcnkKLQkJICoKLQkJICoJREVMRVRFCi0JCSAqCUZST00gX3JlZmVy ZW5jaW5nX3JlbGF0aW9uXwotCQkgKglXSEVSRSBGa2V5MSA9ICQxIFtBTkQgRmtleTIgPSAkMiBb Li4uXV0KLQkJICoKLQkJICogdG8gZGVsZXRlIGFsbCByZWZlcmVuY2luZyB0dXBsZXMuCi0JCSAq LS0tLS0tLS0tCi0JCSAqLwotCi0JCS8qCi0JCSAqIE1heCA6IENhc2NhZGUgd2l0aCBVUERBVEUg cXVlcnkgaSBjcmVhdGUgdXBkYXRlIHF1ZXJ5IHRoYXQgdXBkYXRlcwotCQkgKiBuZXcga2V5IHZh bHVlcyBpbiByZWZlcmVuY2VkIHRhYmxlcwotCQkgKi8KLQotCi0JCWVsc2UgaWYgKGFjdGlvbiA9 PSAnYycpCi0JCXsKLQkJCWlmIChpc191cGRhdGUgPT0gMSkKLQkJCXsKLQkJCQlpbnQJCQlmbjsK LQkJCQljaGFyCSAgICpudjsKLQkJCQlpbnQJCQlrOwotCi0JCQkJYXBwZW5kU3RyaW5nSW5mbygm c3FsLCAidXBkYXRlICVzIHNldCAiLCByZWxuYW1lKTsKLQkJCQlmb3IgKGsgPSAxOyBrIDw9IG5r ZXlzOyBrKyspCi0JCQkJewotCQkJCQlmbiA9IFNQSV9mbnVtYmVyKHR1cGRlc2MsIGFyZ3NfdGVt cFtrIC0gMV0pOwotCQkJCQlBc3NlcnQoZm4gPiAwKTsgLyogYWxyZWFkeSBjaGVja2VkIGFib3Zl ICovCi0JCQkJCW52ID0gU1BJX2dldHZhbHVlKG5ld3R1cGxlLCB0dXBkZXNjLCBmbik7Ci0KLQkJ CQkJYXBwZW5kU3RyaW5nSW5mbygmc3FsLCAiICVzID0gJXMgIiwKLQkJCQkJCQkJCSBhcmdzMltr XSwKLQkJCQkJCQkJCSBudiA/IHF1b3RlX2xpdGVyYWxfY3N0cihudikgOiAiTlVMTCIpOwotCQkJ CQlpZiAoayA8IG5rZXlzKQotCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmc3FsLCAiLCAi KTsKLQkJCQl9Ci0JCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmc3FsLCAiIHdoZXJlICIpOwot CQkJfQotCQkJZWxzZQotCQkJCS8qIERFTEVURSAqLwotCQkJCWFwcGVuZFN0cmluZ0luZm8oJnNx bCwgImRlbGV0ZSBmcm9tICVzIHdoZXJlICIsIHJlbG5hbWUpOwotCQl9Ci0KLQkJLyoKLQkJICog Rm9yICdTJ2V0bnVsbCBhY3Rpb24gd2UgY29uc3RydWN0IFVQREFURSBxdWVyeSAtIFVQREFURQot CQkgKiBfcmVmZXJlbmNpbmdfcmVsYXRpb25fIFNFVCBGa2V5MSBudWxsIFssIEZrZXkyIG51bGwg Wy4uLl1dIFdIRVJFCi0JCSAqIEZrZXkxID0gJDEgW0FORCBGa2V5MiA9ICQyIFsuLi5dXSAtIHRv IHNldCBrZXkgY29sdW1ucyBpbiBhbGwKLQkJICogcmVmZXJlbmNpbmcgdHVwbGVzIHRvIE5VTEwu Ci0JCSAqLwotCQllbHNlIGlmIChhY3Rpb24gPT0gJ3MnKQotCQl7Ci0JCQlhcHBlbmRTdHJpbmdJ bmZvKCZzcWwsICJ1cGRhdGUgJXMgc2V0ICIsIHJlbG5hbWUpOwotCQkJZm9yIChpID0gMTsgaSA8 PSBua2V5czsgaSsrKQotCQkJewotCQkJCWFwcGVuZFN0cmluZ0luZm8oJnNxbCwgIiVzID0gbnVs bCIsIGFyZ3MyW2ldKTsKLQkJCQlpZiAoaSA8IG5rZXlzKQotCQkJCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKCZzcWwsICIsICIpOwotCQkJfQotCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmc3Fs LCAiIHdoZXJlICIpOwotCQl9Ci0KLQkJLyogQ29uc3RydWN0IFdIRVJFIHF1YWwgKi8KLQkJZm9y IChpID0gMTsgaSA8PSBua2V5czsgaSsrKQotCQl7Ci0JCQlhcHBlbmRTdHJpbmdJbmZvKCZzcWws ICIlcyA9ICQlZCAiLCBhcmdzMltpXSwgaSk7Ci0JCQlpZiAoaSA8IG5rZXlzKQotCQkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJnNxbCwgImFuZCAiKTsKLQkJfQotCi0JCS8qIFByZXBhcmUgcGxh biBmb3IgcXVlcnkgKi8KLQkJcHBsYW4gPSBTUElfcHJlcGFyZShzcWwuZGF0YSwgbmtleXMsIGFy Z3R5cGVzKTsKLQkJaWYgKHBwbGFuID09IE5VTEwpCi0JCQkvKiBpbnRlcm5hbCBlcnJvciAqLwot CQkJZWxvZyhFUlJPUiwgImNoZWNrX2ZvcmVpZ25fa2V5OiBTUElfcHJlcGFyZSByZXR1cm5lZCAl cyIsIFNQSV9yZXN1bHRfY29kZV9zdHJpbmcoU1BJX3Jlc3VsdCkpOwotCi0JCXNwbGFuW3JdID0g cHBsYW47Ci0KLQkJYXJnczIgKz0gbmtleXMgKyAxOwkJLyogdG8gdGhlIG5leHQgcmVsYXRpb24g Ki8KLQotI2lmZGVmIERFQlVHX1FVRVJZCi0JCWVsb2coREVCVUc0LCAiY2hlY2tfZm9yZWlnbl9r ZXkgRGVidWcgUXVlcnkgaXMgOiAgJXMgIiwgc3FsLmRhdGEpOwotI2VuZGlmCi0KLQkJcGZyZWUo c3FsLmRhdGEpOwotCX0KLQotCS8qCi0JICogSWYgVVBEQVRFIGFuZCBrZXkgaXMgbm90IGNoYW5n ZWQgLi4uCi0JICovCi0JaWYgKG5ld3R1cGxlICE9IE5VTEwgJiYgaXNlcXVhbCkKLQl7Ci0JCVNQ SV9maW5pc2goKTsKLQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShuZXd0dXBsZSk7Ci0JfQotCi0J LyoKLQkgKiBPaywgZXhlY3V0ZSBwcmVwYXJlZCBwbGFuKHMpLgotCSAqLwotCWZvciAociA9IDA7 IHIgPCBucmVmczsgcisrKQotCXsKLQkJLyoKLQkJICogRm9yICdSJ2VzdHJpY3Qgd2UgbWF5IHRv IGV4ZWN1dGUgcGxhbiBmb3Igb25lIHR1cGxlIG9ubHksIGZvciBvdGhlcgotCQkgKiBhY3Rpb25z IC0gZm9yIGFsbCB0dXBsZXMuCi0JCSAqLwotCQlpbnQJCQl0Y291bnQgPSAoYWN0aW9uID09ICdy JykgPyAxIDogMDsKLQotCQlyZWxuYW1lID0gYXJnc1swXTsKLQotCQlyZXQgPSBTUElfZXhlY3Ao c3BsYW5bcl0sIGt2YWxzLCBOVUxMLCB0Y291bnQpOwotCQkvKiB3ZSBoYXZlIG5vIE5VTExzIC0g c28gd2UgcGFzcyAgIF5eXl4gIGhlcmUgKi8KLQotCQlpZiAocmV0IDwgMCkKLQkJCWVyZXBvcnQo RVJST1IsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfVFJJR0dFUkVEX0FDVElPTl9FWENFUFRJT04p LAotCQkJCQkgZXJybXNnKCJTUElfZXhlY3AgcmV0dXJuZWQgJWQiLCByZXQpKSk7Ci0KLQkJLyog SWYgYWN0aW9uIGlzICdSJ2VzdHJpY3QgLi4uICovCi0JCWlmIChhY3Rpb24gPT0gJ3InKQotCQl7 Ci0JCQkvKiBJZiB0aGVyZSBpcyB0dXBsZSByZXR1cm5lZCBieSBTRUxFQ1QgdGhlbiAuLi4gKi8K LQkJCWlmIChTUElfcHJvY2Vzc2VkID4gMCkKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9UUklHR0VSRURfQUNUSU9OX0VYQ0VQVElPTiksCi0JCQkJCQkgZXJybXNn KCJcIiVzXCI6IHR1cGxlIGlzIHJlZmVyZW5jZWQgaW4gXCIlc1wiIiwKLQkJCQkJCQkJdHJpZ2dl ci0+dGduYW1lLCByZWxuYW1lKSkpOwotCQl9Ci0JCWVsc2UKLQkJewotI2lmZGVmIFJFRklOVF9W RVJCT1NFCi0JCQljb25zdCBjaGFyICpvcGVyYXRpb247Ci0KLQkJCWlmIChhY3Rpb24gPT0gJ2Mn KQotCQkJCW9wZXJhdGlvbiA9IGlzX3VwZGF0ZSA/ICJ1cGRhdGVkIiA6ICJkZWxldGVkIjsKLQkJ CWVsc2UKLQkJCQlvcGVyYXRpb24gPSAic2V0IHRvIG51bGwiOwotCi0JCQllbG9nKE5PVElDRSwg IiVzOiAiIFVJTlQ2NF9GT1JNQVQgIiB0dXBsZShzKSBvZiAlcyBhcmUgJXMiLAotCQkJCSB0cmln Z2VyLT50Z25hbWUsIFNQSV9wcm9jZXNzZWQsIHJlbG5hbWUsIG9wZXJhdGlvbik7Ci0jZW5kaWYK LQkJfQotCQlhcmdzICs9IG5rZXlzICsgMTsJCS8qIHRvIHRoZSBuZXh0IHJlbGF0aW9uICovCi0J fQotCi0JU1BJX2ZpbmlzaCgpOwotCi0JcmV0dXJuIFBvaW50ZXJHZXREYXR1bSgobmV3dHVwbGUg PT0gTlVMTCkgPyB0cmlndHVwbGUgOiBuZXd0dXBsZSk7Ci19CmRpZmYgLS1naXQgYS9jb250cmli L3NwaS9yZWZpbnQuY29udHJvbCBiL2NvbnRyaWIvc3BpL3JlZmludC5jb250cm9sCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmVkZTQ1Nzg0Yy4uMDAwMDAwMDAwMDAKLS0tIGEvY29u dHJpYi9zcGkvcmVmaW50LmNvbnRyb2wKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSMg cmVmaW50IGV4dGVuc2lvbgotY29tbWVudCA9ICdmdW5jdGlvbnMgZm9yIGltcGxlbWVudGluZyBy ZWZlcmVudGlhbCBpbnRlZ3JpdHkgKG9ic29sZXRlKScKLWRlZmF1bHRfdmVyc2lvbiA9ICcxLjAn Ci1tb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci9yZWZpbnQnCi1yZWxvY2F0YWJsZSA9IHRydWUK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3BpL3JlZmludC5leGFtcGxlIGIvY29udHJpYi9zcGkvcmVm aW50LmV4YW1wbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5OTE2NmQ1MDQxLi4w MDAwMDAwMDAwMAotLS0gYS9jb250cmliL3NwaS9yZWZpbnQuZXhhbXBsZQorKysgL2Rldi9udWxs CkBAIC0xLDgyICswLDAgQEAKLS0tQ29sdW1uIElEIG9mIHRhYmxlIEEgaXMgcHJpbWFyeSBrZXk6 Ci0KLUNSRUFURSBUQUJMRSBBICgKLQlJRAlpbnQ0IG5vdCBudWxsCi0pOwotQ1JFQVRFIFVOSVFV RSBJTkRFWCBBSSBPTiBBIChJRCk7Ci0KLS0tQ29sdW1ucyBSRUZCIG9mIHRhYmxlIEIgYW5kIFJF RkMgb2YgQyBhcmUgZm9yZWlnbiBrZXlzIHJlZmVyZW5jaW5nIElEIG9mIEE6Ci0KLUNSRUFURSBU QUJMRSBCICgKLQlSRUZCCWludDQKLSk7Ci1DUkVBVEUgSU5ERVggQkkgT04gQiAoUkVGQik7Ci0K LUNSRUFURSBUQUJMRSBDICgKLQlSRUZDCWludDQKLSk7Ci1DUkVBVEUgSU5ERVggQ0kgT04gQyAo UkVGQyk7Ci0KLS0tVHJpZ2dlciBmb3IgdGFibGUgQToKLQotQ1JFQVRFIFRSSUdHRVIgQVQgQkVG T1JFIERFTEVURSBPUiBVUERBVEUgT04gQSBGT1IgRUFDSCBST1cKLUVYRUNVVEUgUFJPQ0VEVVJF Ci1jaGVja19mb3JlaWduX2tleSAoMiwgJ2Nhc2NhZGUnLCAnSUQnLCAnQicsICdSRUZCJywgJ0Mn LCAnUkVGQycpOwotLyoKLTIJLSBtZWFucyB0aGF0IGNoZWNrIG11c3QgYmUgcGVyZm9ybWVkIGZv ciBmb3JlaWduIGtleXMgb2YgMiB0YWJsZXMuCi1jYXNjYWRlCS0gZGVmaW5lcyB0aGF0IGNvcnJl c3BvbmRpbmcga2V5cyBtdXN0IGJlIGRlbGV0ZWQuCi1JRAktIG5hbWUgb2YgcHJpbWFyeSBrZXkg Y29sdW1uIGluIHRyaWdnZXJlZCB0YWJsZSAoQSkuIFlvdSBtYXkKLQkgIHVzZSBhcyBtYW55IGNv bHVtbnMgYXMgeW91IG5lZWQuCi1CCS0gbmFtZSBvZiAoZmlyc3QpIHRhYmxlIHdpdGggZm9yZWln biBrZXlzLgotUkVGQgktIG5hbWUgb2YgZm9yZWlnbiBrZXkgY29sdW1uIGluIHRoaXMgdGFibGUu IFlvdSBtYXkgdXNlIGFzIG1hbnkKLQkgIGNvbHVtbnMgYXMgeW91IG5lZWQsIGJ1dCBudW1iZXIg b2Yga2V5IGNvbHVtbnMgaW4gcmVmZXJlbmNlZAotCSAgdGFibGUgKEEpIG11c3QgYmUgdGhlIHNh bWUuCi1DCS0gbmFtZSBvZiBzZWNvbmQgdGFibGUgd2l0aCBmb3JlaWduIGtleXMuCi1SRUZDCS0g bmFtZSBvZiBmb3JlaWduIGtleSBjb2x1bW4gaW4gdGhpcyB0YWJsZS4KLSovCi0KLS0tVHJpZ2dl ciBmb3IgdGFibGUgQjoKLQotQ1JFQVRFIFRSSUdHRVIgQlQgQkVGT1JFIElOU0VSVCBPUiBVUERB VEUgT04gQiBGT1IgRUFDSCBST1cKLUVYRUNVVEUgUFJPQ0VEVVJFCi1jaGVja19wcmltYXJ5X2tl eSAoJ1JFRkInLCAnQScsICdJRCcpOwotCi0vKgotUkVGQgktIG5hbWUgb2YgZm9yZWlnbiBrZXkg Y29sdW1uIGluIHRyaWdnZXJlZCAoQikgdGFibGUuIFlvdSBtYXkgdXNlIGFzCi0JICBtYW55IGNv bHVtbnMgYXMgeW91IG5lZWQsIGJ1dCBudW1iZXIgb2Yga2V5IGNvbHVtbnMgaW4gcmVmZXJlbmNl ZAotCSAgdGFibGUgbXVzdCBiZSB0aGUgc2FtZS4KLUEJLSByZWZlcmVuY2VkIHRhYmxlIG5hbWUu Ci1JRAktIG5hbWUgb2YgcHJpbWFyeSBrZXkgY29sdW1uIGluIHJlZmVyZW5jZWQgdGFibGUuCi0q LwotCi0tLVRyaWdnZXIgZm9yIHRhYmxlIEM6Ci0KLUNSRUFURSBUUklHR0VSIENUIEJFRk9SRSBJ TlNFUlQgT1IgVVBEQVRFIE9OIEMgRk9SIEVBQ0ggUk9XCi1FWEVDVVRFIFBST0NFRFVSRQotY2hl Y2tfcHJpbWFyeV9rZXkgKCdSRUZDJywgJ0EnLCAnSUQnKTsKLQotLS0gTm93IHRyeQotCi1JTlNF UlQgSU5UTyBBIFZBTFVFUyAoMTApOwotSU5TRVJUIElOVE8gQSBWQUxVRVMgKDIwKTsKLUlOU0VS VCBJTlRPIEEgVkFMVUVTICgzMCk7Ci1JTlNFUlQgSU5UTyBBIFZBTFVFUyAoNDApOwotSU5TRVJU IElOVE8gQSBWQUxVRVMgKDUwKTsKLQotSU5TRVJUIElOVE8gQiBWQUxVRVMgKDEpOwktLSBpbnZh bGlkIHJlZmVyZW5jZQotSU5TRVJUIElOVE8gQiBWQUxVRVMgKDEwKTsKLUlOU0VSVCBJTlRPIEIg VkFMVUVTICgzMCk7Ci1JTlNFUlQgSU5UTyBCIFZBTFVFUyAoMzApOwotCi1JTlNFUlQgSU5UTyBD IFZBTFVFUyAoMTEpOwktLSBpbnZhbGlkIHJlZmVyZW5jZQotSU5TRVJUIElOVE8gQyBWQUxVRVMg KDIwKTsKLUlOU0VSVCBJTlRPIEMgVkFMVUVTICgyMCk7Ci1JTlNFUlQgSU5UTyBDIFZBTFVFUyAo MzApOwotCi1ERUxFVEUgRlJPTSBBIFdIRVJFIElEID0gMTA7Ci1ERUxFVEUgRlJPTSBBIFdIRVJF IElEID0gMjA7Ci1ERUxFVEUgRlJPTSBBIFdIRVJFIElEID0gMzA7Ci0KLVNFTEVDVCAqIEZST00g QTsKLVNFTEVDVCAqIEZST00gQjsKLVNFTEVDVCAqIEZST00gQzsKZGlmZiAtLWdpdCBhL2NvbnRy aWIvc3BpL3NxbC9yZWZpbnQuc3FsIGIvY29udHJpYi9zcGkvc3FsL3JlZmludC5zcWwKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNDU4MTI3OTE3Li4wMDAwMDAwMDAwMAotLS0gYS9j b250cmliL3NwaS9zcWwvcmVmaW50LnNxbAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAK LUNSRUFURSBFWFRFTlNJT04gcmVmaW50OwotCi1jcmVhdGUgdGFibGUgcGtleXMgKHBrZXkxIGlu dDQgbm90IG51bGwsIHBrZXkyIHRleHQgbm90IG51bGwpOwotY3JlYXRlIHRhYmxlIGZrZXlzIChm a2V5MSBpbnQ0LCBma2V5MiB0ZXh0LCBma2V5MyBpbnQpOwotY3JlYXRlIHRhYmxlIGZrZXlzMiAo ZmtleTIxIGludDQsIGZrZXkyMiB0ZXh0LCBwa2V5MjMgaW50IG5vdCBudWxsKTsKLQotY3JlYXRl IGluZGV4IGZrZXlzX2kgb24gZmtleXMgKGZrZXkxLCBma2V5Mik7Ci1jcmVhdGUgaW5kZXggZmtl eXMyX2kgb24gZmtleXMyIChma2V5MjEsIGZrZXkyMik7Ci1jcmVhdGUgaW5kZXggZmtleXMycF9p IG9uIGZrZXlzMiAocGtleTIzKTsKLQotaW5zZXJ0IGludG8gcGtleXMgdmFsdWVzICgxMCwgJzEn KTsKLWluc2VydCBpbnRvIHBrZXlzIHZhbHVlcyAoMjAsICcyJyk7Ci1pbnNlcnQgaW50byBwa2V5 cyB2YWx1ZXMgKDMwLCAnMycpOwotaW5zZXJ0IGludG8gcGtleXMgdmFsdWVzICg0MCwgJzQnKTsK LWluc2VydCBpbnRvIHBrZXlzIHZhbHVlcyAoNTAsICc1Jyk7Ci1pbnNlcnQgaW50byBwa2V5cyB2 YWx1ZXMgKDYwLCAnNicpOwotY3JlYXRlIHVuaXF1ZSBpbmRleCBwa2V5c19pIG9uIHBrZXlzIChw a2V5MSwgcGtleTIpOwotCi0tLQotLS0gRm9yIGZrZXlzOgotLS0gCShma2V5MSwgZmtleTIpCS0t PiBwa2V5cyAocGtleTEsIHBrZXkyKQotLS0gCShma2V5MykJCS0tPiBma2V5czIgKHBrZXkyMykK LS0tCi1jcmVhdGUgdHJpZ2dlciBjaGVja19ma2V5c19wa2V5X2V4aXN0Ci0JYWZ0ZXIgaW5zZXJ0 IG9yIHVwZGF0ZSBvbiBma2V5cwotCWZvciBlYWNoIHJvdwotCWV4ZWN1dGUgZnVuY3Rpb24KLQlj aGVja19wcmltYXJ5X2tleSAoJ2ZrZXkxJywgJ2ZrZXkyJywgJ3BrZXlzJywgJ3BrZXkxJywgJ3Br ZXkyJyk7Ci0KLWNyZWF0ZSB0cmlnZ2VyIGNoZWNrX2ZrZXlzX3BrZXkyX2V4aXN0Ci0JYWZ0ZXIg aW5zZXJ0IG9yIHVwZGF0ZSBvbiBma2V5cwotCWZvciBlYWNoIHJvdwotCWV4ZWN1dGUgZnVuY3Rp b24gY2hlY2tfcHJpbWFyeV9rZXkgKCdma2V5MycsICdma2V5czInLCAncGtleTIzJyk7Ci0KLS0t Ci0tLSBGb3IgZmtleXMyOgotLS0gCShma2V5MjEsIGZrZXkyMikJLS0+IHBrZXlzIChwa2V5MSwg cGtleTIpCi0tLQotY3JlYXRlIHRyaWdnZXIgY2hlY2tfZmtleXMyX3BrZXlfZXhpc3QKLQlhZnRl ciBpbnNlcnQgb3IgdXBkYXRlIG9uIGZrZXlzMgotCWZvciBlYWNoIHJvdwotCWV4ZWN1dGUgcHJv Y2VkdXJlCi0JY2hlY2tfcHJpbWFyeV9rZXkgKCdma2V5MjEnLCAnZmtleTIyJywgJ3BrZXlzJywg J3BrZXkxJywgJ3BrZXkyJyk7Ci0KLS0tCi0tLSBGb3IgcGtleXM6Ci0tLSAJT04gREVMRVRFL1VQ REFURSAocGtleTEsIHBrZXkyKSBDQVNDQURFOgotLS0gCQlma2V5cyAoZmtleTEsIGZrZXkyKSBh bmQgZmtleXMyIChma2V5MjEsIGZrZXkyMikKLS0tCi1jcmVhdGUgdHJpZ2dlciBjaGVja19wa2V5 c19ma2V5X2Nhc2NhZGUKLQlhZnRlciBkZWxldGUgb3IgdXBkYXRlIG9uIHBrZXlzCi0JZm9yIGVh Y2ggcm93Ci0JZXhlY3V0ZSBwcm9jZWR1cmUKLQljaGVja19mb3JlaWduX2tleSAoMiwgJ2Nhc2Nh ZGUnLCAncGtleTEnLCAncGtleTInLAotCSdma2V5cycsICdma2V5MScsICdma2V5MicsICdma2V5 czInLCAnZmtleTIxJywgJ2ZrZXkyMicpOwotCi0tLQotLS0gRm9yIGZrZXlzMjoKLS0tIAlPTiBE RUxFVEUvVVBEQVRFIChwa2V5MjMpIFJFU1RSSUNUOgotLS0gCQlma2V5cyAoZmtleTMpCi0tLQot Y3JlYXRlIHRyaWdnZXIgY2hlY2tfZmtleXMyX2ZrZXlfcmVzdHJpY3QKLQlhZnRlciBkZWxldGUg b3IgdXBkYXRlIG9uIGZrZXlzMgotCWZvciBlYWNoIHJvdwotCWV4ZWN1dGUgcHJvY2VkdXJlIGNo ZWNrX2ZvcmVpZ25fa2V5ICgxLCAncmVzdHJpY3QnLCAncGtleTIzJywgJ2ZrZXlzJywgJ2ZrZXkz Jyk7Ci0KLWluc2VydCBpbnRvIGZrZXlzMiB2YWx1ZXMgKDEwLCAnMScsIDEpOwotaW5zZXJ0IGlu dG8gZmtleXMyIHZhbHVlcyAoMzAsICczJywgMik7Ci1pbnNlcnQgaW50byBma2V5czIgdmFsdWVz ICg0MCwgJzQnLCA1KTsKLWluc2VydCBpbnRvIGZrZXlzMiB2YWx1ZXMgKDUwLCAnNScsIDMpOwot LS0gbm8ga2V5IGluIHBrZXlzCi1pbnNlcnQgaW50byBma2V5czIgdmFsdWVzICg3MCwgJzUnLCAz KTsKLQotaW5zZXJ0IGludG8gZmtleXMgdmFsdWVzICgxMCwgJzEnLCAyKTsKLWluc2VydCBpbnRv IGZrZXlzIHZhbHVlcyAoMzAsICczJywgMyk7Ci1pbnNlcnQgaW50byBma2V5cyB2YWx1ZXMgKDQw LCAnNCcsIDIpOwotaW5zZXJ0IGludG8gZmtleXMgdmFsdWVzICg1MCwgJzUnLCAyKTsKLS0tIG5v IGtleSBpbiBwa2V5cwotaW5zZXJ0IGludG8gZmtleXMgdmFsdWVzICg3MCwgJzUnLCAxKTsKLS0t IG5vIGtleSBpbiBma2V5czIKLWluc2VydCBpbnRvIGZrZXlzIHZhbHVlcyAoNjAsICc2JywgNCk7 Ci0KLWRlbGV0ZSBmcm9tIHBrZXlzIHdoZXJlIHBrZXkxID0gMzAgYW5kIHBrZXkyID0gJzMnOwot ZGVsZXRlIGZyb20gcGtleXMgd2hlcmUgcGtleTEgPSA0MCBhbmQgcGtleTIgPSAnNCc7Ci11cGRh dGUgcGtleXMgc2V0IHBrZXkxID0gNywgcGtleTIgPSAnNzAnIHdoZXJlIHBrZXkxID0gNTAgYW5k IHBrZXkyID0gJzUnOwotdXBkYXRlIHBrZXlzIHNldCBwa2V5MSA9IDcsIHBrZXkyID0gJzcwJyB3 aGVyZSBwa2V5MSA9IDEwIGFuZCBwa2V5MiA9ICcxJzsKLQotU0VMRUNUIHRyaWdnZXJfbmFtZSwg ZXZlbnRfbWFuaXB1bGF0aW9uLCBldmVudF9vYmplY3Rfc2NoZW1hLCBldmVudF9vYmplY3RfdGFi bGUsCi0gICAgICAgYWN0aW9uX29yZGVyLCBhY3Rpb25fY29uZGl0aW9uLCBhY3Rpb25fb3JpZW50 YXRpb24sIGFjdGlvbl90aW1pbmcsCi0gICAgICAgYWN0aW9uX3JlZmVyZW5jZV9vbGRfdGFibGUs IGFjdGlvbl9yZWZlcmVuY2VfbmV3X3RhYmxlCi0gIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRy aWdnZXJzCi0gIFdIRVJFIGV2ZW50X29iamVjdF90YWJsZSBpbiAoJ3BrZXlzJywgJ2ZrZXlzJywg J2ZrZXlzMicpCi0gIE9SREVSIEJZIHRyaWdnZXJfbmFtZSBDT0xMQVRFICJDIiwgMjsKLQotRFJP UCBUQUJMRSBwa2V5czsKLURST1AgVEFCTEUgZmtleXM7Ci1EUk9QIFRBQkxFIGZrZXlzMjsKZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9hcHBlbmRpeC1vYnNvbGV0ZS1yZWZpbnQuc2dtbCBiL2Rv Yy9zcmMvc2dtbC9hcHBlbmRpeC1vYnNvbGV0ZS1yZWZpbnQuc2dtbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzAyNGZmNDgzOWUKLS0tIC9kZXYvbnVsbAorKysgYi9k b2Mvc3JjL3NnbWwvYXBwZW5kaXgtb2Jzb2xldGUtcmVmaW50LnNnbWwKQEAgLTAsMCArMSwyNSBA QAorPCEtLSBkb2Mvc3JjL3NnbWwvYXBwZW5kaXgtb2Jzb2xldGUtcmVmaW50LnNnbWwgLS0+Cis8 IS0tCisgIFNlZSBkb2Mvc3JjL3NnbWwvYXBwZW5kaXgtb2Jzb2xldGUuc2dtbCBmb3Igd2h5IHRo aXMgZmlsZSBleGlzdHMuIERvIG5vdCBjaGFuZ2UgdGhlIGlkIGF0dHJpYnV0ZS4KKy0tPgorCis8 c2VjdDEgaWQ9ImNvbnRyaWItc3BpLXJlZmludCI+CisgIDx0aXRsZT5yZWZpbnQgRXh0ZW5zaW9u IFJlbW92ZWQ8L3RpdGxlPgorCisgICA8aW5kZXh0ZXJtIHpvbmU9ImNvbnRyaWItc3BpLXJlZmlu dCI+CisgICAgPHByaW1hcnk+cmVmaW50PC9wcmltYXJ5PgorICAgPC9pbmRleHRlcm0+CisKKyAg IDxwYXJhPgorICAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gMTkgYW5k IGJlbG93IHNoaXBwZWQgYW4KKyAgICBleHRlbnNpb24gbmFtZWQgPGxpdGVyYWw+cmVmaW50PC9s aXRlcmFsPiwgcGFydCBvZiB0aGUKKyAgICA8bGl0ZXJhbD5zcGk8L2xpdGVyYWw+IGNvbnRyaWIg bW9kdWxlLCBwcm92aWRpbmcgdGhlIHRyaWdnZXIKKyAgICBmdW5jdGlvbnMgPGZ1bmN0aW9uPmNo ZWNrX3ByaW1hcnlfa2V5PC9mdW5jdGlvbj4gYW5kCisgICAgPGZ1bmN0aW9uPmNoZWNrX2ZvcmVp Z25fa2V5PC9mdW5jdGlvbj4gYXMgYW4gZWFybHkgd2F5IHRvIGVuZm9yY2UKKyAgICByZWZlcmVu dGlhbCBpbnRlZ3JpdHkuICBUaGlzIGZ1bmN0aW9uYWxpdHkgd2FzIGxvbmcgc3VwZXJzZWRlZCBi eQorICAgIHRoZSBidWlsdC1pbiBmb3JlaWduIGtleSBtZWNoYW5pc20gKHNlZQorICAgIDx4cmVm IGxpbmtlbmQ9ImRkbC1jb25zdHJhaW50cy1mayIvPiksIGFuZCB0aGUgZXh0ZW5zaW9uIHdhcyBy ZW1vdmVkCisgICAgaW4gPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiAyMC4K KyAgIDwvcGFyYT4KKworPC9zZWN0MT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9hcHBlbmRp eC1vYnNvbGV0ZS5zZ21sIGIvZG9jL3NyYy9zZ21sL2FwcGVuZGl4LW9ic29sZXRlLnNnbWwKaW5k ZXggY2MwMDI2NTMwNTIuLjc1OWE2NWNiNWUwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvYXBw ZW5kaXgtb2Jzb2xldGUuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvYXBwZW5kaXgtb2Jzb2xldGUu c2dtbApAQCAtMzksNSArMzksNiBAQAogICZvYnNvbGV0ZS1wZ3Jlc2V0eGxvZzsKICAmb2Jzb2xl dGUtcGdyZWNlaXZleGxvZzsKICAmb2Jzb2xldGUtYXV0aC1yYWRpdXM7CisgJm9ic29sZXRlLXJl ZmludDsKIAogPC9hcHBlbmRpeD4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb250cmliLXNw aS5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbnRyaWItc3BpLnNnbWwKaW5kZXggN2U0ZTU4MGJjNzQu LmI1ODUwODNjNmZiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29udHJpYi1zcGkuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvY29udHJpYi1zcGkuc2dtbApAQCAtMjQsMTEzICsyNCw2IEBACiAg IHNlcGFyYXRlbHktaW5zdGFsbGFibGUgZXh0ZW5zaW9uLgogIDwvcGFyYT4KIAotIDxzZWN0MiBp ZD0iY29udHJpYi1zcGktcmVmaW50Ij4KLSAgPHRpdGxlPnJlZmludCAmbWRhc2g7IEZ1bmN0aW9u cyBmb3IgSW1wbGVtZW50aW5nIFJlZmVyZW50aWFsIEludGVncml0eTwvdGl0bGU+Ci0KLSAgPHBh cmE+Ci0gICA8ZnVuY3Rpb24+Y2hlY2tfcHJpbWFyeV9rZXkoKTwvZnVuY3Rpb24+IGFuZAotICAg PGZ1bmN0aW9uPmNoZWNrX2ZvcmVpZ25fa2V5KCk8L2Z1bmN0aW9uPiBhcmUgdXNlZCB0byBjaGVj ayBmb3JlaWduIGtleSBjb25zdHJhaW50cy4KLSAgIChUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbG9u ZyBzaW5jZSBzdXBlcnNlZGVkIGJ5IHRoZSBidWlsdC1pbiBmb3JlaWduCi0gICBrZXkgbWVjaGFu aXNtLCBvZiBjb3Vyc2UsIGJ1dCB0aGUgbW9kdWxlIGlzIHN0aWxsIHVzZWZ1bCBhcyBhbiBleGFt cGxlLikKLSAgPC9wYXJhPgotCi0gIDxub3RlPgotICAgPHBhcmE+Ci0gICAgPGZpbGVuYW1lPnJl ZmludDwvZmlsZW5hbWU+IHJlcXVpcmVzIGEKLSAgICA8bGluayBsaW5rZW5kPSJkZGwtc2NoZW1h cy1wYXR0ZXJucyI+c2VjdXJlIHNjaGVtYSB1c2FnZSBwYXR0ZXJuPC9saW5rPiBhbmQKLSAgICBk YXRhIHR5cGVzIHdoZXJlIHRoZSBlcXVhbGl0eSBvcGVyYXRvciBpcyBuYW1lZCA8bGl0ZXJhbD49 PC9saXRlcmFsPi4KLSAgIDwvcGFyYT4KLSAgPC9ub3RlPgotCi0gIDxwYXJhPgotICAgPGZ1bmN0 aW9uPmNoZWNrX3ByaW1hcnlfa2V5KCk8L2Z1bmN0aW9uPiBjaGVja3MgdGhlIHJlZmVyZW5jaW5n IHRhYmxlLgotICAgVG8gdXNlLCBjcmVhdGUgYW4gPGxpdGVyYWw+QUZURVIgSU5TRVJUIE9SIFVQ REFURTwvbGl0ZXJhbD4gdHJpZ2dlciB1c2luZyB0aGlzCi0gICBmdW5jdGlvbiBvbiBhIHRhYmxl IHJlZmVyZW5jaW5nIGFub3RoZXIgdGFibGUuIFNwZWNpZnkgYXMgdGhlIHRyaWdnZXIKLSAgIGFy Z3VtZW50czogdGhlIHJlZmVyZW5jaW5nIHRhYmxlJ3MgY29sdW1uIG5hbWUocykgd2hpY2ggZm9y bSB0aGUgZm9yZWlnbgotICAga2V5LCB0aGUgcmVmZXJlbmNlZCB0YWJsZSBuYW1lLCBhbmQgdGhl IGNvbHVtbiBuYW1lcyBpbiB0aGUgcmVmZXJlbmNlZCB0YWJsZQotICAgd2hpY2ggZm9ybSB0aGUg cHJpbWFyeS91bmlxdWUga2V5LiAgVG8gaGFuZGxlIG11bHRpcGxlIGZvcmVpZ24KLSAgIGtleXMs IGNyZWF0ZSBhIHRyaWdnZXIgZm9yIGVhY2ggcmVmZXJlbmNlLgotICA8L3BhcmE+Ci0KLSAgPG5v dGU+Ci0gICA8cGFyYT4KLSAgICBUaGUgPGVtcGhhc2lzPnJlZmVyZW5jZWQ8L2VtcGhhc2lzPiB0 YWJsZSBuYW1lIGFuZCBjb2x1bW4gbmFtZSBhcmd1bWVudHMgdG8KLSAgICA8ZnVuY3Rpb24+Y2hl Y2tfcHJpbWFyeV9rZXkoKTwvZnVuY3Rpb24+IGFyZSBjb3BpZWQgYXMtaXMgaW50byBpbnRlcm5h bGx5Ci0gICAgZ2VuZXJhdGVkIFNRTCBzdGF0ZW1lbnRzIGFuZCB0aGVyZWZvcmUgbXVzdCBiZSBk b3VibGUtcXVvdGVkIGJ5IHRoZSB1c2VyIGFzCi0gICAgbmVjZXNzYXJ5IGluIHRoZSA8Y29tbWFu ZD5DUkVBVEUgVFJJR0dFUjwvY29tbWFuZD4gY29tbWFuZC4gIFNlZQotICAgIDx4cmVmIGxpbmtl bmQ9InNxbC1zeW50YXgtaWRlbnRpZmllcnMiLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQg cXVvdGluZwotICAgIFNRTCBpZGVudGlmaWVycy4gIENvbnZlcnNlbHksIHRoZSA8ZW1waGFzaXM+ cmVmZXJlbmNpbmc8L2VtcGhhc2lzPiB0YWJsZQotICAgIGNvbHVtbiBuYW1lIGFyZ3VtZW50cyBz aG91bGQgbm90IGJlIGRvdWJsZSBxdW90ZWQuICBTZWUgdGhlIGZvbGxvd2luZyBtb2NrCi0gICAg ZXhhbXBsZSBvZiBwcm9wZXIgdXNlIG9mIDxmdW5jdGlvbj5jaGVja19wcmltYXJ5X2tleSgpPC9m dW5jdGlvbj46Ci08cHJvZ3JhbWxpc3Rpbmc+Ci1DUkVBVEUgVFJJR0dFUiBteXRyaWdnZXIKLUFG VEVSIElOU0VSVCBPUiBVUERBVEUgT04gcmVmZXJlbmNpbmdfdGFibGUKLUZPUiBFQUNIIFJPVyBF WEVDVVRFIFBST0NFRFVSRQotY2hlY2tfcHJpbWFyeV9rZXkgKAotICAgICdjb2x1bW4gQScsICdj b2x1bW4gQicsICAgICAgICAgLS0gcmVmZXJlbmNpbmcgdGFibGUgY29sdW1ucwotICAgICdteXNj aGVtYS4icmVmZXJlbmNlZCB0YWJsZSInLCAgLS0gcmVmZXJlbmNlZCB0YWJsZQotICAgICciY29s dW1uIEEiJywgJyJjb2x1bW4gQiInICAgICAgLS0gcmVmZXJlbmNlZCB0YWJsZSBjb2x1bW5zCi0p OwotPC9wcm9ncmFtbGlzdGluZz4KLSAgIDwvcGFyYT4KLSAgPC9ub3RlPgotCi0gIDxwYXJhPgot ICAgPGZ1bmN0aW9uPmNoZWNrX2ZvcmVpZ25fa2V5KCk8L2Z1bmN0aW9uPiBjaGVja3MgdGhlIHJl ZmVyZW5jZWQgdGFibGUuCi0gICBUbyB1c2UsIGNyZWF0ZSBhbiA8bGl0ZXJhbD5BRlRFUiBERUxF VEUgT1IgVVBEQVRFPC9saXRlcmFsPiB0cmlnZ2VyIHVzaW5nIHRoaXMKLSAgIGZ1bmN0aW9uIG9u IGEgdGFibGUgcmVmZXJlbmNlZCBieSBvdGhlciB0YWJsZShzKS4gIFNwZWNpZnkgYXMgdGhlIHRy aWdnZXIKLSAgIGFyZ3VtZW50czogdGhlIG51bWJlciBvZiByZWZlcmVuY2luZyB0YWJsZXMgZm9y IHdoaWNoIHRoZSBmdW5jdGlvbiBoYXMgdG8KLSAgIHBlcmZvcm0gY2hlY2tpbmcsIHRoZSBhY3Rp b24gaWYgYSByZWZlcmVuY2luZyBrZXkgaXMgZm91bmQKLSAgICg8bGl0ZXJhbD5jYXNjYWRlPC9s aXRlcmFsPiAmbWRhc2g7IHRvIGRlbGV0ZSB0aGUgcmVmZXJlbmNpbmcgcm93LAotICAgPGxpdGVy YWw+cmVzdHJpY3Q8L2xpdGVyYWw+ICZtZGFzaDsgdG8gYWJvcnQgdHJhbnNhY3Rpb24gaWYgcmVm ZXJlbmNpbmcga2V5cwotICAgZXhpc3QsIDxsaXRlcmFsPnNldG51bGw8L2xpdGVyYWw+ICZtZGFz aDsgdG8gc2V0IHJlZmVyZW5jaW5nIGtleSBmaWVsZHMgdG8gbnVsbCksCi0gICB0aGUgcmVmZXJl bmNlZCB0YWJsZSdzIGNvbHVtbiBuYW1lcyB3aGljaCBmb3JtIHRoZSBwcmltYXJ5L3VuaXF1ZSBr ZXksIHRoZW4KLSAgIHRoZSByZWZlcmVuY2luZyB0YWJsZSBuYW1lIGFuZCBjb2x1bW4gbmFtZXMg KHJlcGVhdGVkIGZvciBhcyBtYW55Ci0gICByZWZlcmVuY2luZyB0YWJsZXMgYXMgd2VyZSBzcGVj aWZpZWQgYnkgZmlyc3QgYXJndW1lbnQpLiAgTm90ZSB0aGF0IHRoZQotICAgcHJpbWFyeS91bmlx dWUga2V5IGNvbHVtbnMgc2hvdWxkIGJlIG1hcmtlZCBOT1QgTlVMTCBhbmQgc2hvdWxkIGhhdmUg YQotICAgdW5pcXVlIGluZGV4LgotICA8L3BhcmE+Ci0KLSAgPG5vdGU+Ci0gICA8cGFyYT4KLSAg ICBUaGUgPGVtcGhhc2lzPnJlZmVyZW5jaW5nPC9lbXBoYXNpcz4gdGFibGUgbmFtZSBhbmQgY29s dW1uIG5hbWUgYXJndW1lbnRzCi0gICAgdG8gPGZ1bmN0aW9uPmNoZWNrX2ZvcmVpZ25fa2V5KCk8 L2Z1bmN0aW9uPiBhcmUgY29waWVkIGFzLWlzIGludG8KLSAgICBpbnRlcm5hbGx5IGdlbmVyYXRl ZCBTUUwgc3RhdGVtZW50cyBhbmQgdGhlcmVmb3JlIG11c3QgYmUgZG91YmxlLXF1b3RlZCBieQot ICAgIHRoZSB1c2VyIGFzIG5lY2Vzc2FyeSBpbiB0aGUgPGNvbW1hbmQ+Q1JFQVRFIFRSSUdHRVI8 L2NvbW1hbmQ+IGNvbW1hbmQuCi0gICAgU2VlIDx4cmVmIGxpbmtlbmQ9InNxbC1zeW50YXgtaWRl bnRpZmllcnMiLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKLSAgICBxdW90aW5nIFNRTCBp ZGVudGlmaWVycy4gIENvbnZlcnNlbHksIHRoZSA8ZW1waGFzaXM+cmVmZXJlbmNlZDwvZW1waGFz aXM+Ci0gICAgdGFibGUgY29sdW1uIG5hbWUgYXJndW1lbnRzIHNob3VsZCBub3QgYmUgZG91Ymxl IHF1b3RlZC4gIFNlZSB0aGUgZm9sbG93aW5nCi0gICAgbW9jayBleGFtcGxlIG9mIHByb3BlciB1 c2Ugb2YgPGZ1bmN0aW9uPmNoZWNrX2ZvcmVpZ25fa2V5KCk8L2Z1bmN0aW9uPjoKLTxwcm9ncmFt bGlzdGluZz4KLUNSRUFURSBUUklHR0VSIG15dHJpZ2dlcgotQUZURVIgREVMRVRFIE9SIFVQREFU RSBPTiByZWZlcmVuY2VkX3RhYmxlCi1GT1IgRUFDSCBST1cgRVhFQ1VURSBQUk9DRURVUkUKLWNo ZWNrX2ZvcmVpZ25fa2V5ICgKLSAgICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0t IG51bWJlciBvZiByZWZlcmVuY2luZyB0YWJsZXMKLSAgICAnY2FzY2FkZScsICAgICAgICAgICAg ICAgICAgICAgIC0tIGFjdGlvbgotICAgICdjb2x1bW4gQScsICdjb2x1bW4gQicsICAgICAgICAg LS0gcmVmZXJlbmNlZCB0YWJsZSBjb2x1bW5zCi0gICAgJ215c2NoZW1hLiJyZWZlcmVuY2luZyB0 YWJsZSInLCAtLSByZWZlcmVuY2luZyB0YWJsZQotICAgICciY29sdW1uIEEiJywgJyJjb2x1bW4g QiInICAgICAgLS0gcmVmZXJlbmNpbmcgdGFibGUgY29sdW1ucwotKTsKLTwvcHJvZ3JhbWxpc3Rp bmc+Ci0gICA8L3BhcmE+Ci0gIDwvbm90ZT4KLQotICA8cGFyYT4KLSAgIE5vdGUgdGhhdCBpZiB0 aGVzZSB0cmlnZ2VycyBhcmUgZXhlY3V0ZWQgZnJvbQotICAgYW5vdGhlciA8bGl0ZXJhbD5CRUZP UkU8L2xpdGVyYWw+IHRyaWdnZXIsIHRoZXkgY2FuIGZhaWwgdW5leHBlY3RlZGx5LiBGb3IKLSAg IGV4YW1wbGUsIGlmIGEgdXNlciBpbnNlcnRzIHJvdzEgYW5kIHRoZW4gdGhlIDxsaXRlcmFsPkJF Rk9SRTwvbGl0ZXJhbD4KLSAgIHRyaWdnZXIgaW5zZXJ0cyByb3cyIGFuZCBjYWxscyBhIHRyaWdn ZXIgd2l0aCB0aGUKLSAgIDxmdW5jdGlvbj5jaGVja19mb3JlaWduX2tleSgpPC9mdW5jdGlvbj4s Ci0gICB0aGUgPGZ1bmN0aW9uPmNoZWNrX2ZvcmVpZ25fa2V5KCk8L2Z1bmN0aW9uPgotICAgZnVu Y3Rpb24gd2lsbCBub3Qgc2VlIHJvdzEgYW5kIHdpbGwgZmFpbC4KLSAgPC9wYXJhPgotCi0gIDxw YXJhPgotICAgVGhlcmUgYXJlIGV4YW1wbGVzIGluIDxmaWxlbmFtZT5yZWZpbnQuZXhhbXBsZTwv ZmlsZW5hbWU+LgotICA8L3BhcmE+Ci0gPC9zZWN0Mj4KLQogIDxzZWN0MiBpZD0iY29udHJpYi1z cGktYXV0b2luYyI+CiAgIDx0aXRsZT5hdXRvaW5jICZtZGFzaDsgRnVuY3Rpb25zIGZvciBBdXRv aW5jcmVtZW50aW5nIEZpZWxkczwvdGl0bGU+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9m aWxlbGlzdC5zZ21sIGIvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwKaW5kZXggMjVhODUwODI3 NTkuLjA4MmQ1NTY1MjE1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbApAQCAtMjA5LDMgKzIwOSw0IEBACiA8IUVO VElUWSBvYnNvbGV0ZS1wZ3Jlc2V0eGxvZyBTWVNURU0gImFwcGVuZGl4LW9ic29sZXRlLXBncmVz ZXR4bG9nLnNnbWwiPgogPCFFTlRJVFkgb2Jzb2xldGUtcGdyZWNlaXZleGxvZyBTWVNURU0gImFw cGVuZGl4LW9ic29sZXRlLXBncmVjZWl2ZXhsb2cuc2dtbCI+CiA8IUVOVElUWSBvYnNvbGV0ZS1h dXRoLXJhZGl1cyBTWVNURU0gImFwcGVuZGl4LW9ic29sZXRlLWF1dGgtcmFkaXVzLnNnbWwiPgor PCFFTlRJVFkgb2Jzb2xldGUtcmVmaW50IFNZU1RFTSAiYXBwZW5kaXgtb2Jzb2xldGUtcmVmaW50 LnNnbWwiPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBjNWRiNmNhNjcwNS4uZWU3ZjUz OWVjZmIgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC03MjMsNyArNzIzLDYgQEAgRU5H SU5FCiBFT01fZmxhdHRlbl9pbnRvX21ldGhvZAogRU9NX2dldF9mbGF0X3NpemVfbWV0aG9kCiBF UFFTdGF0ZQotRVBsYW4KIEVTdGF0ZQogRVN0YXR1cwogRVZQX0NJUEhFUgotLSAKMi40My4wCgo= --000000000000d4955506555d1161 Content-Type: application/octet-stream; name="v4-0002-Handle-refint-removal-in-cross-version-pg_upgrade.patch" Content-Disposition: attachment; filename="v4-0002-Handle-refint-removal-in-cross-version-pg_upgrade.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqyqble51 RnJvbSAxZmI1ZDE3MWRiNzcxNTRjYTFiNmViYWYxYmZjYTkxZjMzNzM0ZjhkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBeXVzaCBUaXdhcmkgPGF5dXNodGl3YXJpLnNnbDAxQGdtYWls LmNvbT4KRGF0ZTogTW9uLCAyOSBKdW4gMjAyNiAwNDoyNzoxNCArMDAwMApTdWJqZWN0OiBbUEFU Q0ggdjQgMi8yXSBIYW5kbGUgcmVmaW50IHJlbW92YWwgaW4gY3Jvc3MtdmVyc2lvbiBwZ191cGdy YWRlIAogdGVzdHMuCgpUaGUgcHJldmlvdXMgY29tbWl0IHJlbW92ZXMgdGhlIHJlZmludCBleHRl bnNpb24gaW4gdjIwLiAgV2hlbiBjcm9zcy0KdmVyc2lvbiBwZ191cGdyYWRlIHRlc3RzIHVwZ3Jh ZGUgZnJvbSBhIHZlcnNpb24gdGhhdCBzdGlsbCBzaGlwcGVkCnJlZmludCwgdGhlIHVwZ3JhZGVk IGNvbnRyaWJfcmVncmVzc2lvbl9zcGkgKGFuZCByZWdyZXNzaW9uX3NwaSkKZGF0YWJhc2VzIHN0 aWxsIGhhdmUgdGhlIHJlZmludCBleHRlbnNpb24gYW5kIGl0cyB0YWJsZXMgKHBrZXlzLApma2V5 cywgZmtleXMyKSBpbiB0aGVpciBjYXRhbG9ncywgYnV0IGEgZnJlc2ggdjIwIGluc3RhbGwgZG9l cyBub3QuCldpdGhvdXQgYWRqdXN0bWVudCB0aGUgZHVtcCBjb21wYXJpc29uIGZhaWxzLgoKVGVh Y2ggQWRqdXN0VXBncmFkZS5wbSB0byBkcm9wIHRoZSByZWZpbnQgZXh0ZW5zaW9uIGFuZCBpdHMg bGVmdG92ZXIKdGFibGVzIGluIHRob3NlIGRhdGFiYXNlcyB3aGVuIHRoZSBzb3VyY2UgdmVyc2lv biBpcyA8IDIwLCBtYXRjaGluZwp0aGUgZXhpc3RpbmcgcGF0dGVybiBmb3IgcHJpb3IgY3Jvc3Mt dmVyc2lvbiB0ZXN0IGZpeHR1cmVzLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9D QUpUWXNXVUhxOE9oYzYtTi14YW1PUFl6LXEzcVVZTXR3UVgtMSUzRFppJTNENU4xUV9HU0VRJTQw bWFpbC5nbWFpbC5jb20KLS0tCiAuLi4vcGVybC9Qb3N0Z3JlU1FML1Rlc3QvQWRqdXN0VXBncmFk ZS5wbSAgICAgfCAyMSArKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMjEgaW5z ZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0Fk anVzdFVwZ3JhZGUucG0gYi9zcmMvdGVzdC9wZXJsL1Bvc3RncmVTUUwvVGVzdC9BZGp1c3RVcGdy YWRlLnBtCmluZGV4IGRiZGRkNDFiZmNhLi4yMTZlNGQ1NWZiMSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3QvQWRqdXN0VXBncmFkZS5wbQorKysgYi9zcmMvdGVzdC9w ZXJsL1Bvc3RncmVTUUwvVGVzdC9BZGp1c3RVcGdyYWRlLnBtCkBAIC0xNDEsNiArMTQxLDI3IEBA IHN1YiBhZGp1c3RfZGF0YWJhc2VfY29udGVudHMKIAkJfQogCX0KIAorCSMgcmVmaW50IHdhcyBy ZW1vdmVkIGluIHYyMAorCWlmICgkb2xkX3ZlcnNpb24gPCAyMCkKKwl7CisJCWlmICgkZGJuYW1l c3siY29udHJpYl9yZWdyZXNzaW9uX3NwaSJ9KQorCQl7CisJCQlfYWRkX3N0KAorCQkJCSRyZXN1 bHQsCisJCQkJJ2NvbnRyaWJfcmVncmVzc2lvbl9zcGknLAorCQkJCSdkcm9wIGV4dGVuc2lvbiBp ZiBleGlzdHMgcmVmaW50IGNhc2NhZGUnLAorCQkJCSdkcm9wIHRhYmxlIGlmIGV4aXN0cyBwa2V5 cywgZmtleXMsIGZrZXlzMicpOworCQl9CisJCWlmICgkZGJuYW1lc3sicmVncmVzc2lvbl9zcGki fSkKKwkJeworCQkJX2FkZF9zdCgKKwkJCQkkcmVzdWx0LAorCQkJCSdyZWdyZXNzaW9uX3NwaScs CisJCQkJJ2Ryb3AgZXh0ZW5zaW9uIGlmIGV4aXN0cyByZWZpbnQgY2FzY2FkZScsCisJCQkJJ2Ry b3AgdGFibGUgaWYgZXhpc3RzIHBrZXlzLCBma2V5cywgZmtleXMyJyk7CisJCX0KKwl9CisKIAkj IHdlIHJlbW92ZWQgdGhlc2UgdGVzdC1zdXBwb3J0IGZ1bmN0aW9ucyBpbiB2MTgKIAlpZiAoJG9s ZF92ZXJzaW9uIDwgMTgpCiAJewotLSAKMi40My4wCgo= --000000000000d4955506555d1161--