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 1wc1H3-0031iF-0z for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Jun 2026 13:34:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wc1H2-00C25O-0m for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Jun 2026 13:34:44 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wc1H1-00C25D-1m for pgsql-hackers@lists.postgresql.org; Tue, 23 Jun 2026 13:34:43 +0000 Received: from mail-ed1-x52a.google.com ([2a00:1450:4864:20::52a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wc1Gx-00000001vXi-2kSZ for pgsql-hackers@lists.postgresql.org; Tue, 23 Jun 2026 13:34:41 +0000 Received: by mail-ed1-x52a.google.com with SMTP id 4fb4d7f45d1cf-697764213d6so6077357a12.1 for ; Tue, 23 Jun 2026 06:34:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782221678; cv=none; d=google.com; s=arc-20240605; b=JS5SkQm2/bWXSXP0Owq19kT3MsT7snCP0IwUfYTKyOP72l7Ezn2HjpWt71yFcpp0HM pVQr88coHSPVwDPfxrvLcXCc5mh3Pz/w2R9rhefKuKWcfVW2dy6hApcZ9q6M8FBipu5z 5MW684s9fAAE/GJd9fv9k68p3fwtT3u8nvNfA+8YdDZ+4iWkzyfjqugofU67dDIFznZm 2A33Uq7GJWgzrAEa/Xo5ms2qs5BUjBLLwc5ApwGYA4Em2mIFZaErbW/AyfvBRbSs+nDL 3fLrjBIAufXzkKS5KakRjocpJwnNeUx31suPiXaIll8N4y4dnlEpVvm4QjXcrjnL/gRr KxZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=fLuMHB4ggG+HV0itGOLxo/IJFQUNyNik8hkIjNwt74g=; fh=4vCJCxy8AUWhCDvrp6cp+pGj5S03Er9Gvzb5vMVonD0=; b=iIprtDnlbdBTyRIQCbp3keoDMMClXlBb8vFDGdy+4vnqoFwjqTJUG9jKpgx+IXiCQC bD1zHuYkWO48kUYYFwJKYcLY9ZThAqC5dS1jZxH4OSoYRMCQ/E01NTMFIrXa1lx/ydON heyg6L10Cg1vKTy5K07v8eUYV/ZKugKGpxDnZgUQ4LK3HV2vQf5S7VYGPz1GHr7u0EAx 7OR5HFfRMtvAwuDY5/N6NU92t2mwn4QlithYCl2UX+ESCUqSb9RdYLQ25BGkiDC9m5dx ERROosjHRifmibprUAqs9f3GuUxH4coijl0ycZh5Jqr0a5B67I6L7SwljNL13nVK6h25 I+FQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1782221678; x=1782826478; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=fLuMHB4ggG+HV0itGOLxo/IJFQUNyNik8hkIjNwt74g=; b=QISWAt+zZU7iRpJTV7+Rf6gQuaAnV/+ndXgjJcCfYGhBK9AbtU9Gc9HhgbbnXgzpwY EmjLwGkG5sKHw3dpFL8vmIWq4goXPmVW3r/PeDsqNEzNlwGiIDwID0sfIKaRd/UTCgBk 3rYmKczfeSqh2fYVqD6AlqKUnVpeX4F/UV7bxLPNu29529szDOX4PJbw6d9zC5sR0mkK r3HGwtPOsUzQPGrsU06FakrdykaUCSl6bQwdp9tL5ZGPS1+ai2cIfYIa4M3Adf9KglI5 VP28HaErMlEq/c7hVJbHYJsUqaciY/gdaw7CFsAV4hWvEKnBa1c99G6H+8TFSwVKC2zp Lxdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782221678; x=1782826478; 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=fLuMHB4ggG+HV0itGOLxo/IJFQUNyNik8hkIjNwt74g=; b=hqSQa8Vn57CjcAeYwhg9Gco4TTmSPdoRQPiQs7lMIxaJVz2zdmJ29i8Ctv6S0kGjlZ apFhFpHw2ayQmzVsxuccTx+8kxdYYH9/zr0i/bPERzIchLztayi4fdEnOmHuDdgw9XXH M8IYUToZUdaHGc59eonY0ZF5R4igqkPGzsFMpVLXUpsDPhqdLv7IkvW0dZeobQ5I3ly5 04HLCNtYWhJokpMiimC7fs4BcfvUIbiLWBKFJVhTPXOgew9xl4kNXwUJzYCoPt3bMoxE Z479PLA2UzKI7OMWAw1Yd0TmS90tY9OtZWPNYGcSGo3be/wjtuQ/WEtru5aMF4lX8eV6 NEgA== X-Forwarded-Encrypted: i=1; AFNElJ+DNS6WzZT0GPCTk+T2YQrALnk/uYyttBICWW4B6K3hfjQJCZVl0O3RARyxrYBTqXsuhFQM8XF4dSu3DTW/@lists.postgresql.org X-Gm-Message-State: AOJu0YzOib4DZPNMMhFlLtLo11XuOuMC601aU1qbqmY/FsRhiB8w46H/ cAMDFh4IUOwVInAnQ2vL7pwehrZ4WQSm1+dn+lehay150loK048HwL7h3EmO9Mr3M/6FyCYsAlk EG++5i16YLt9x3rWZXKHWRyT4Qw25/e7cb8voQ/zz X-Gm-Gg: AfdE7cmJyn0Tf4/q29VURiS427bPLF6PwTEV50RspwMqsZTfbQWi9mRtB3/C8cp5f7N ZeBibqF882SmTnEi9ef5aqhZnF4mIwsZD3tzSIntNF8VIsw4MQU5V+pVRcRvY6+rZs/V/hVwjZg cnb8FjF8/aYKF30PGTYrlH+nnJh9rXfOc+HhXW61OCR4uPTPXjtbAMm8V/Qanoru8iXO8zLWWw9 0cDxl4ovaWzb6fCzlQYu4PAj4R5STvrhr8bhEd9iYw9yAic36qeOcbtlivKrC/Lm/Cg7o1dyA== X-Received: by 2002:a17:907:1998:b0:c0d:ab45:a070 with SMTP id a640c23a62f3a-c10901da8d8mr148287166b.35.1782221677804; Tue, 23 Jun 2026 06:34:37 -0700 (PDT) MIME-Version: 1.0 References: <983C7B03-D9C3-4F15-8913-7616EC5E6414@gmail.com> <20260623.162104.775158751399277188.horikyota.ntt@gmail.com> In-Reply-To: From: Akshay Joshi Date: Tue, 23 Jun 2026 19:04:25 +0530 X-Gm-Features: AVVi8Cfoy8RtSTdN83Itc9YUO7T3yPoskeaIReUk1Ta7R9qoy5WyNgTI5kVAYE8 Message-ID: Subject: Re: [PATCH] Add pg_get_table_ddl() to reconstruct CREATE TABLE statements To: Kyotaro Horiguchi Cc: li.evan.chao@gmail.com, zsolt.parragi@percona.com, pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000000488a00654ebd253" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000488a00654ebd253 Content-Type: multipart/alternative; boundary="0000000000000488a00654ebd251" --0000000000000488a00654ebd251 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable All, A quick note on a design change I made in the *pg_get_table_ddl* option surface. The earlier draft exposed one boolean option per sub-object kind: include_indexes, include_primary_key, include_check, include_foreign_keys, include_rules, include_statistics, include_rls, include_replica_identity, include_partitions, and so on. Every new kind we wanted to gate (triggers, policies, exclusion constraints=E2=80=A6) meant another option name. Caller= s wanting "everything except FKs" had to flip nine flags, and the include/exclude polarity was not symmetric: to drop one item, you toggled one flag, but to keep only one item, you toggled all the others. *I have replaced those with two options:* - include =E2=80=94 comma-separated list of kinds; emit only the listed o= nes. - exclude =E2=80=94 comma-separated list of kinds; emit everything except= the listed ones. *Vocabulary*: table, indexes, primary_key, unique, check, foreign_keys, exclusion, rules, statistics, triggers, policies, rls, replica_identity, partitions. NOT NULL is intentionally omitted from the vocabulary; it's always emitted to avoid silently producing schemas that accept NULLs when the source would have rejected them. The v10 patch is ready for review. On Tue, Jun 23, 2026 at 2:52=E2=80=AFPM Akshay Joshi wrote: > > > On Tue, Jun 23, 2026 at 12:51=E2=80=AFPM Kyotaro Horiguchi < > horikyota.ntt@gmail.com> wrote: > >> At Mon, 22 Jun 2026 18:10:53 +0530, Akshay Joshi < >> akshay.joshi@enterprisedb.com> wrote in >> > The v9 patch is ready for review. >> >> I have not looked closely at the DDL generation logic itself, but I >> have a few comments on how pg_get_table_ddl handles its options. >> >> Since pg_get_table_ddl_internal() appears to copy these values into >> TableDdlContext almost immediately, I wonder whether TableDdlContext >> could be initialized by the caller instead. >> >> Using positional boolean arguments is probably fine when there are >> only a handful of options, but with around fifteen of them the current >> approach seems somewhat error-prone. >> >> It might also be clearer to initialize the default values first, and >> then override only the fields corresponding to explicitly specified >> options, rather than folding the default handling and option lookup >> into the same expression. >> > > I assume that changing the implementation model, as I mentioned in my > other email, will solve this problem as well. We can drop the entire > includes_* family and only_foreign_keys, and replace them with two mutual= ly > exclusive variadic keys: > include =3D> 'kind1,kind2,...' =E2=80=94 emit only these kinds > exclude =3D> 'kind1,kind2,...' =E2=80=94 emit everything except these kin= ds >> >> >> Regards, >> >> -- >> Kyotaro Horiguchi >> NTT Open Source Software Center >> > --0000000000000488a00654ebd251 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
All,

A quick note on a design change I made in= the pg_get_table_ddl option surface.

The earlier draft exposed one boolean option per sub-objec= t kind: include_indexes, include_primary_key, include_check, include_foreig= n_keys, include_rules, include_statistics, include_rls,=C2=A0include_replica_identity, include_par= titions, and so on. Every new kind we wanted to gate (triggers, policies, e= xclusion constraints=E2=80=A6) meant another option name. Callers wanting &= quot;everything except=C2=A0FKs" had to flip nine flags, and the include/exclude polarity was= not symmetric: to drop one item, you toggled one flag, but to keep only on= e item, you toggled all the others.=C2=A0

I have replaced those with two options:<= /div>
=C2=A0 - include =E2=80=94 comma-separated list of kinds; emit on= ly the listed ones.=C2=A0
=C2=A0 - exclude =E2=80=94 comma-separated lis= t of kinds; emit everything except the listed ones.

Vocabulary: table, indexes, primary_key, unique, check, foreign_ke= ys, exclusion, rules, statistics, triggers, policies, rls, replica_identity= , partitions.
NOT NULL is intentionally omitted from the voca= bulary; it's always emitted to avoid silently producing schemas that ac= cept NULLs when the source would have rejected them.=C2=A0

The v10 patch is ready for review.

On T= ue, Jun 23, 2026 at 2:52=E2=80=AFPM Akshay Joshi <akshay.joshi@enterprisedb.com> wrote:
=


On Tue, Jun 23, 2026 at 12:51=E2=80=AFPM Kyotaro Horiguc= hi <horikyo= ta.ntt@gmail.com> wrote:
At Mon, 22 Jun 2026 18:10:53 +0530, Akshay Joshi <akshay.joshi@e= nterprisedb.com> wrote in
> The v9 patch is ready for review.

I have not looked closely at the DDL generation logic itself, but I
have a few comments on how pg_get_table_ddl handles its options.

Since pg_get_table_ddl_internal() appears to copy these values into
TableDdlContext almost immediately, I wonder whether TableDdlContext
could be initialized by the caller instead.

Using positional boolean arguments is probably fine when there are
only a handful of options, but with around fifteen of them the current
approach seems somewhat error-prone.

It might also be clearer to initialize the default values first, and
then override only the fields corresponding to explicitly specified
options, rather than folding the default handling and option lookup
into the same expression.

I assume that changing the implementation= model, as I mentioned in my other email, will solve this problem as well. = We can drop the entire includes_* family and only_foreign_keys, and replace= them with two mutually exclusive variadic keys:
include =3D>= ; 'kind1,kind2,...' =E2=80=94 emit only these kinds
exclude =3D&= gt; 'kind1,kind2,...' =E2=80=94 emit everything except these kinds<= blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l= eft:1px solid rgb(204,204,204);padding-left:1ex">
Regards,

--
Kyotaro Horiguchi
NTT Open Source Software Center
--0000000000000488a00654ebd251-- --0000000000000488a00654ebd253 Content-Type: application/octet-stream; name="v10-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Disposition: attachment; filename="v10-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqqor5dw0 RnJvbSAwN2QzMDc5N2JlYjRhYWI3NzhmNDZmYTFkYWJjZWJhYmE1MjUwZjIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBUdWUsIDIgSnVuIDIwMjYgMTQ6MTg6NDAgKzA1MzAKU3ViamVjdDogW1BB VENIIHYxMF0gQWRkIHBnX2dldF90YWJsZV9kZGwoKSB0byByZWNvbnN0cnVjdCBDUkVBVEUgVEFC TEUKIHN0YXRlbWVudHMKClRoZSBmdW5jdGlvbiByZWNvbnN0cnVjdHMgdGhlIENSRUFURSBUQUJM RSBzdGF0ZW1lbnQgZm9yIGFuIG9yZGluYXJ5IG9yCnBhcnRpdGlvbmVkIHRhYmxlLCBmb2xsb3dl ZCBieSB0aGUgQUxURVIgVEFCTEUgLyBDUkVBVEUgSU5ERVggLwpDUkVBVEUgUlVMRSAvIENSRUFU RSBTVEFUSVNUSUNTIHN0YXRlbWVudHMgbmVlZGVkIHRvIHJlc3RvcmUgaXRzIGZ1bGwKZGVmaW5p dGlvbi4gIEVhY2ggc3RhdGVtZW50IGlzIHJldHVybmVkIGFzIGEgc2VwYXJhdGUgcm93LgoKU3Vw cG9ydGVkIHBlci1jb2x1bW4gZmVhdHVyZXM6IGRhdGEgdHlwZSB3aXRoIHR5cGUgbW9kaWZpZXJz LCBDT0xMQVRFLApTVE9SQUdFLCBDT01QUkVTU0lPTiAocGdseiAvIGx6NCksIEdFTkVSQVRFRCBB TFdBWVMgQVMgKGV4cHIpClNUT1JFRC9WSVJUVUFMLCBHRU5FUkFURUQgQUxXQVlTfEJZIERFRkFV TFQgQVMgSURFTlRJVFkgKHdpdGggc2VxdWVuY2UKb3B0aW9ucyksIERFRkFVTFQsIE5PVCBOVUxM LCBhbmQgcGVyLWNvbHVtbiBhdHRvcHRpb25zIGVtaXR0ZWQgYXMKQUxURVIgQ09MVU1OIFNFVCAo Li4uKS4KClN1cHBvcnRlZCB0YWJsZS1sZXZlbCBmZWF0dXJlczogVU5MT0dHRUQsIElOSEVSSVRT LCBQQVJUSVRJT04gQlkgKFJBTkdFCi8gTElTVCAvIEhBU0ggcGFyZW50cyksIFBBUlRJVElPTiBP RiBwYXJlbnQgRk9SIFZBTFVFUyAoRlJPTS9UTywgV0lUSAptb2R1bHVzL3JlbWFpbmRlciwgREVG QVVMVCksIFVTSU5HIHRhYmxlIGFjY2VzcyBtZXRob2QsIFdJVEgKKHJlbG9wdGlvbnMpLCBUQUJM RVNQQUNFLCBhbmQgaW5saW5lIENIRUNLIGNvbnN0cmFpbnRzIGluIHRoZQpDUkVBVEUgVEFCTEUg Ym9keS4KClN1cHBvcnRlZCBzdWItb2JqZWN0cyAocmUtdXNpbmcgZXhpc3RpbmcgZGVwYXJzZSBo ZWxwZXJzIGZyb20KcnVsZXV0aWxzLmMpOiBpbmRleGVzIHZpYSBwZ19nZXRfaW5kZXhkZWZfc3Ry aW5nLCBjb25zdHJhaW50cwooUFJJTUFSWSBLRVksIFVOSVFVRSwgRk9SRUlHTiBLRVksIEVYQ0xV REUsIG5hbWVkIE5PVCBOVUxMKSB2aWEKcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZCwgcnVs ZXMgdmlhIHBnX2dldF9ydWxlZGVmLCBleHRlbmRlZApzdGF0aXN0aWNzIHZpYSBwZ19nZXRfc3Rh dGlzdGljc29iamRlZl9zdHJpbmcsIFJFUExJQ0EgSURFTlRJVFkKTk9USElORy9GVUxML1VTSU5H IElOREVYLCBBTFRFUiBUQUJMRSBFTkFCTEUvRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZLAphbmQg Y2hpbGQtbG9jYWwgREVGQVVMVCBvdmVycmlkZXMgb24gaW5oZXJpdGFuY2UvcGFydGl0aW9uIGNo aWxkcmVuLgpEREwgZm9yIHBhcnRpdGlvbiBjaGlsZHJlbiBvZiBhIHBhcnRpdGlvbmVkLXRhYmxl IHBhcmVudCBpcyBhcHBlbmRlZAphZnRlciB0aGUgcGFyZW50IGJ5IGRlZmF1bHQuCgpPcHRpb25z IGFyZSBwYXNzZWQgYXMgdmFyaWFkaWMgbmFtZS92YWx1ZSBwYWlycy4gIEZvcm1hdHRpbmcgb3B0 aW9ucwphcmUgcHJldHR5IChib29sZWFuKSwgb3duZXIgKGJvb2xlYW4sIGNvbnRyb2xzIHRoZQpB TFRFUiBUQUJMRSAuLi4gT1dORVIgVE8gbGluZSksIHRhYmxlc3BhY2UgKGJvb2xlYW4sIGNvbnRy b2xzIHRoZQpUQUJMRVNQQUNFIGNsYXVzZSksIGFuZCBzY2hlbWFfcXVhbGlmaWVkIChib29sZWFu LCBjb250cm9scyB3aGV0aGVyCnRoZSB0YXJnZXQgdGFibGUgYW5kIHNhbWUtc2NoZW1hIHNpYmxp bmcgcmVmZXJlbmNlcyBhcmUgZW1pdHRlZCB3aXRoCnRoZWlyIHNjaGVtYSBwcmVmaXgpLiAgT2Jq ZWN0LWNsYXNzIGZpbHRlcmluZyBpcyBleHByZXNzZWQgdGhyb3VnaCB0d28KbXV0dWFsbHktZXhj bHVzaXZlIG9wdGlvbnMsIGluY2x1ZGUgYW5kIGV4Y2x1ZGUsIGVhY2ggdGFraW5nIGEKY29tbWEt c2VwYXJhdGVkIGxpc3QgZHJhd24gZnJvbSB0aGUga2luZCB2b2NhYnVsYXJ5Cnt0YWJsZSwgaW5k ZXhlcywgcHJpbWFyeV9rZXksIHVuaXF1ZSwgY2hlY2ssIGZvcmVpZ25fa2V5cywgZXhjbHVzaW9u LApydWxlcywgc3RhdGlzdGljcywgdHJpZ2dlcnMsIHBvbGljaWVzLCBybHMsIHJlcGxpY2FfaWRl bnRpdHksCnBhcnRpdGlvbnN9LiAgV2hlbiBpbmNsdWRlIGlzIHNldCwgb25seSB0aGUgbGlzdGVk IGtpbmRzIGFyZSBlbWl0dGVkOwp3aGVuIGV4Y2x1ZGUgaXMgc2V0LCBldmVyeSBraW5kIGV4Y2Vw dCB0aGUgbGlzdGVkIG9uZXMgaXMgZW1pdHRlZDsKd2hlbiBuZWl0aGVyIGlzIHNldCwgZXZlcnkg a2luZCBpcyBlbWl0dGVkLiAgVW5rbm93biBraW5kIG5hbWVzIHJhaXNlCmFuIGVycm9yIGF0IHBh cnNlIHRpbWUuICBOT1QgTlVMTCBpcyBkZWxpYmVyYXRlbHkgbm90IHBhcnQgb2YgdGhlCnZvY2Fi dWxhcnkgLSBpdCBpcyBhbHdheXMgZW1pdHRlZCB0byBwcmV2ZW50IHByb2R1Y2luZyBzY2hlbWFz IHRoYXQKc2lsZW50bHkgYWNjZXB0IE5VTExzIHRoZSBzb3VyY2Ugd291bGQgaGF2ZSByZWplY3Rl ZC4gIEV4Y2x1ZGluZwpwcmltYXJ5X2tleSBvbiBhIHRhYmxlIHdob3NlIFJFUExJQ0EgSURFTlRJ VFkgaXMgVVNJTkcgSU5ERVggb2YgdGhlCnByaW1hcnkga2V5IGlzIHJlamVjdGVkIHVubGVzcyBy ZXBsaWNhX2lkZW50aXR5IGlzIGFsc28gZXhjbHVkZWQsIHNvCnRoZSBlbWl0dGVkIERETCBuZXZl ciByZWZlcmVuY2VzIGFuIGluZGV4IGl0IGp1c3QgZHJvcHBlZC4KCkRlZmF1bHQgb21pc3Npb24g Y29udmVudGlvbjogZXZlcnkgb3B0aW9uYWwgY2xhdXNlIGlzIGRyb3BwZWQgd2hlbiBpdHMKdmFs dWUgZXF1YWxzIHdoYXQgdGhlIHN5c3RlbSB3b3VsZCByZWFwcGx5IG9uIHJvdW5kLXRyaXAsIGlu Y2x1ZGluZwp0eXBlLWRlZmF1bHQgQ09MTEFURSwgcGVyLXR5cGUgU1RPUkFHRSwgdGhlIGF1dG8t Z2VuZXJhdGVkIGlkZW50aXR5CnNlcXVlbmNlIG5hbWUgYW5kIHBhcmFtZXRlciBkZWZhdWx0cywg aGVhcCBhY2Nlc3MgbWV0aG9kLCBkZWZhdWx0ClJFUExJQ0EgSURFTlRJVFksIGRpc2FibGVkIFJM UyB0b2dnbGVzLCBlbXB0eSByZWxvcHRpb25zLCBhbmQgdGhlCmRlZmF1bHQgdGFibGVzcGFjZS4K CkF1dGhvcjogQWtzaGF5IEpvc2hpIDxha3NoYXkuam9zaGlAZW50ZXJwcmlzZWRiLmNvbT4KUmV2 aWV3ZWQtYnk6IE1hcmNvcyBQZWdvcmFybyA8bWFyY29zQGYxMC5jb20uYnI+ClJldmlld2VkLWJ5 OiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgpSZXZpZXdlZC1ieTog S3lvdGFybyBIb3JpZ3VjaGkgPGhvcmlreW90YS5udHRAZ21haWwuY29tPgpSZXZpZXdlZC1ieTog Q2hhbyBMaSA8bGkuZXZhbi5jaGFvQGdtYWlsLmNvbT4KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy9m dW5jLWluZm8uc2dtbCAgICAgICAgICAgICAgfCAgMTIwICsKIHNyYy9iYWNrZW5kL2NhdGFsb2cv cGdfaW5oZXJpdHMuYyAgICAgICAgICAgICB8ICAgOTMgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv dGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgICAzMCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2RkbHV0aWxzLmMgICAgICAgICAgICAgIHwgMTk5NiArKysrKysrKysrKysrKysrKwogc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19pbmhlcml0cy5oICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgfCAgICA3ICsKIHNyYy9pbmNs dWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oICAgICAgICAgICAgICB8ICAgIDMgKwogLi4uL3JlZ3Jl c3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5vdXQgICAgIHwgIDg4NSArKysrKysrKwogc3Jj L3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAgICAgICAgICAgIHwgICAgMiArLQogc3Jj L3Rlc3QvcmVncmVzcy9zcWwvcGdfZ2V0X3RhYmxlX2RkbC5zcWwgICAgIHwgIDU0MiArKysrKwog MTAgZmlsZXMgY2hhbmdlZCwgMzY3NiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2Rk bC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFi bGVfZGRsLnNxbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21s IGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwKaW5kZXggOGZmYTdlODMyNzUuLmQx NzU5ZGJkZTY3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbApAQCAtMzk0Nyw2ICszOTQ3LDEy NiBAQCBhY2wgICAgICB8IHtwb3N0Z3Jlcz1hcndkRHh0bS9wb3N0Z3Jlcyxmb289ci9wb3N0Z3Jl c30KICAgICAgICAgPGxpdGVyYWw+VEFCTEVTUEFDRTwvbGl0ZXJhbD4uCiAgICAgICAgPC9wYXJh PjwvZW50cnk+CiAgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9 ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAg PGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX2dldF90YWJsZV9kZGw8L3ByaW1hcnk+ CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0X3RhYmxlX2Rk bDwvZnVuY3Rpb24+CisgICAgICAgICggPHBhcmFtZXRlcj50YWJsZTwvcGFyYW1ldGVyPiA8dHlw ZT5yZWdjbGFzczwvdHlwZT4KKyAgICAgICAgPG9wdGlvbmFsPiwgPGxpdGVyYWw+VkFSSUFESUM8 L2xpdGVyYWw+IDxwYXJhbWV0ZXI+b3B0aW9uczwvcGFyYW1ldGVyPgorICAgICAgICA8dHlwZT50 ZXh0PC90eXBlPiA8L29wdGlvbmFsPiApCisgICAgICAgIDxyZXR1cm52YWx1ZT5zZXRvZiB0ZXh0 PC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJl Y29uc3RydWN0cyB0aGUgPGNvbW1hbmQ+Q1JFQVRFIFRBQkxFPC9jb21tYW5kPiBzdGF0ZW1lbnQg Zm9yIHRoZQorICAgICAgICBzcGVjaWZpZWQgb3JkaW5hcnkgb3IgcGFydGl0aW9uZWQgdGFibGUs IGZvbGxvd2VkIGJ5IHRoZQorICAgICAgICA8Y29tbWFuZD5BTFRFUiBUQUJMRTwvY29tbWFuZD4s IDxjb21tYW5kPkNSRUFURSBJTkRFWDwvY29tbWFuZD4sCisgICAgICAgIDxjb21tYW5kPkNSRUFU RSBSVUxFPC9jb21tYW5kPiwgYW5kIDxjb21tYW5kPkNSRUFURSBTVEFUSVNUSUNTPC9jb21tYW5k PgorICAgICAgICBzdGF0ZW1lbnRzIG5lZWRlZCB0byByZWNyZWF0ZSB0aGUgdGFibGUncyBjb2x1 bW5zLCBjb25zdHJhaW50cywKKyAgICAgICAgaW5kZXhlcywgcnVsZXMsIGV4dGVuZGVkIHN0YXRp c3RpY3MsIGFuZCByb3ctbGV2ZWwgc2VjdXJpdHkgZmxhZ3MuCisgICAgICAgIEluaGVyaXRlZCBj b2x1bW5zIGFuZCBjb25zdHJhaW50cyBhcmUgZW1pdHRlZCBieSB0aGUgcGFyZW50IHRhYmxlJ3MK KyAgICAgICAgRERMIGFuZCBhcmUgbm90IGR1cGxpY2F0ZWQgb24gaW5oZXJpdGFuY2UgY2hpbGRy ZW4gb3IgcGFydGl0aW9ucy4KKyAgICAgICAgRWFjaCBzdGF0ZW1lbnQgaXMgcmV0dXJuZWQgYXMg YSBzZXBhcmF0ZSByb3cuCisgICAgICAgIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgc3VwcG9y dGVkOgorICAgICAgICA8bGl0ZXJhbD5wcmV0dHk8L2xpdGVyYWw+IChib29sZWFuKSBmb3IgZm9y bWF0dGVkIG91dHB1dCwKKyAgICAgICAgPGxpdGVyYWw+b3duZXI8L2xpdGVyYWw+IChib29sZWFu KSB0byBpbmNsdWRlIHRoZQorICAgICAgICA8Y29tbWFuZD5BTFRFUiBUQUJMRSAuLi4gT1dORVIg VE88L2NvbW1hbmQ+IHN0YXRlbWVudCwKKyAgICAgICAgPGxpdGVyYWw+dGFibGVzcGFjZTwvbGl0 ZXJhbD4gKGJvb2xlYW4pIHRvIGluY2x1ZGUgdGhlCisgICAgICAgIDxsaXRlcmFsPlRBQkxFU1BB Q0U8L2xpdGVyYWw+IGNsYXVzZSBvbiB0aGUKKyAgICAgICAgPGNvbW1hbmQ+Q1JFQVRFIFRBQkxF PC9jb21tYW5kPiBzdGF0ZW1lbnQsIGFuZCB0aGUKKyAgICAgICAgPGxpdGVyYWw+aW5jbHVkZTwv bGl0ZXJhbD4gYW5kIDxsaXRlcmFsPmV4Y2x1ZGU8L2xpdGVyYWw+CisgICAgICAgIG9wdGlvbnMg ZGVzY3JpYmVkIGJlbG93IGZvciBmaWx0ZXJpbmcgd2hpY2ggb2JqZWN0IGNsYXNzZXMgYXJlCisg ICAgICAgIGVtaXR0ZWQuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBU aGUgPGxpdGVyYWw+aW5jbHVkZTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPmV4Y2x1ZGU8L2xpdGVy YWw+CisgICAgICAgIG9wdGlvbnMgZWFjaCB0YWtlIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Yg b2JqZWN0LWNsYXNzIGtpbmQKKyAgICAgICAgbmFtZXMgYW5kIGFyZSBtdXR1YWxseSBleGNsdXNp dmUgKHNwZWNpZnlpbmcgYm90aCByYWlzZXMgYW4KKyAgICAgICAgZXJyb3IpLiAgV2hlbiA8bGl0 ZXJhbD5pbmNsdWRlPC9saXRlcmFsPiBpcyBzZXQsIG9ubHkgdGhlCisgICAgICAgIGxpc3RlZCBr aW5kcyBhcmUgZW1pdHRlZDsgd2hlbiA8bGl0ZXJhbD5leGNsdWRlPC9saXRlcmFsPiBpcworICAg ICAgICBzZXQsIGV2ZXJ5IGtpbmQgPGVtcGhhc2lzPmV4Y2VwdDwvZW1waGFzaXM+IHRoZSBsaXN0 ZWQgb25lcyBpcworICAgICAgICBlbWl0dGVkLiAgV2hlbiBuZWl0aGVyIGlzIHNldCAodGhlIGRl ZmF1bHQpLCBldmVyeSBraW5kIGlzCisgICAgICAgIGVtaXR0ZWQuICBXaGl0ZXNwYWNlIGFyb3Vu ZCBlYWNoIGVudHJ5IGlzIGlnbm9yZWQgYW5kIG1hdGNoaW5nCisgICAgICAgIGlzIGNhc2UtaW5z ZW5zaXRpdmU7IGFuIHVucmVjb2duaXplZCBraW5kIG5hbWUgcmFpc2VzIGFuIGVycm9yLgorICAg ICAgICBUaGUga2luZCB2b2NhYnVsYXJ5IGlzCisgICAgICAgIDxsaXRlcmFsPnRhYmxlPC9saXRl cmFsPiwKKyAgICAgICAgPGxpdGVyYWw+aW5kZXhlczwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRl cmFsPnByaW1hcnlfa2V5PC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+dW5pcXVlPC9saXRl cmFsPiwKKyAgICAgICAgPGxpdGVyYWw+Y2hlY2s8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJh bD5mb3JlaWduX2tleXM8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5leGNsdXNpb248L2xp dGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5ydWxlczwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRl cmFsPnN0YXRpc3RpY3M8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD50cmlnZ2VyczwvbGl0 ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPnBvbGljaWVzPC9saXRlcmFsPiwKKyAgICAgICAgPGxp dGVyYWw+cmxzPC9saXRlcmFsPiAodGhlCisgICAgICAgIDxjb21tYW5kPkVOQUJMRTwvY29tbWFu ZD4vPGNvbW1hbmQ+Rk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZPC9jb21tYW5kPgorICAgICAgICB0 b2dnbGVzKSwKKyAgICAgICAgPGxpdGVyYWw+cmVwbGljYV9pZGVudGl0eTwvbGl0ZXJhbD4sIGFu ZAorICAgICAgICA8bGl0ZXJhbD5wYXJ0aXRpb25zPC9saXRlcmFsPiAodGhlIERETCBmb3IgZWFj aCBkaXJlY3QKKyAgICAgICAgcGFydGl0aW9uIGNoaWxkIG9mIGEgcGFydGl0aW9uZWQtdGFibGUg cGFyZW50KS4gIFRoZQorICAgICAgICA8bGl0ZXJhbD50YWJsZTwvbGl0ZXJhbD4ga2luZCBncm91 cHMgdGhlCisgICAgICAgIDxjb21tYW5kPkNSRUFURSBUQUJMRTwvY29tbWFuZD4gc3RhdGVtZW50 IHRvZ2V0aGVyIHdpdGggdGhlCisgICAgICAgIHJlbGF0ZWQgcGVyLXRhYmxlIDxjb21tYW5kPkFM VEVSIFRBQkxFPC9jb21tYW5kPiBwYXNzZXM6CisgICAgICAgIDxjb21tYW5kPk9XTkVSIFRPPC9j b21tYW5kPiwgY2hpbGQtZGVmYXVsdAorICAgICAgICA8Y29tbWFuZD5TRVQgREVGQVVMVDwvY29t bWFuZD4sIGFuZCBwZXItY29sdW1uCisgICAgICAgIDxjb21tYW5kPlNFVCAoPHJlcGxhY2VhYmxl PmF0dG9wdGlvbnM8L3JlcGxhY2VhYmxlPik8L2NvbW1hbmQ+LgorICAgICAgICA8bGl0ZXJhbD5O T1QgTlVMTDwvbGl0ZXJhbD4gY29uc3RyYWludHMgYXJlIG5vdCBwYXJ0IG9mIHRoZQorICAgICAg ICB2b2NhYnVsYXJ5OyB0aGV5IGFyZSBhbHdheXMgZW1pdHRlZCBhcyBwYXJ0IG9mIHRoZSB0YWJs ZSB0bworICAgICAgICBhdm9pZCBwcm9kdWNpbmcgc2NoZW1hcyB0aGF0IHNpbGVudGx5IGFjY2Vw dAorICAgICAgICA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiB2YWx1ZXMgdGhlIHNvdXJjZSB3b3Vs ZCBoYXZlIHJlamVjdGVkLgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIHNlY29uZCBwYXNzIG9m IGEgdHdvLXBhc3Mgc2NoZW1hIGNsb25lIHRoYXQKKyAgICAgICAgYWRkcyBjcm9zcy10YWJsZSBm b3JlaWduIGtleXMgYWZ0ZXIgZGF0YSBoYXMgbG9hZGVkIGNhbiBiZQorICAgICAgICB3cml0dGVu IGFzCisgICAgICAgIDxsaXRlcmFsPmluY2x1ZGUgPT4gJ2ZvcmVpZ25fa2V5cyc8L2xpdGVyYWw+ LCBhbmQgdGhlCisgICAgICAgIHB1Yi9zdWItc3R5bGUgY2xvbmUgdGhhdCBrZWVwcyBhIHByaW1h cnkga2V5IGJ1dCBkcm9wcyBldmVyeQorICAgICAgICBvdGhlciBjb25zdHJhaW50IGNhbiBiZSB3 cml0dGVuIGFzCisgICAgICAgIDxsaXRlcmFsPmV4Y2x1ZGUgPT4gJ3VuaXF1ZSxjaGVjayxmb3Jl aWduX2tleXMsZXhjbHVzaW9uJzwvbGl0ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxw YXJhPgorICAgICAgICBFeGNsdWRpbmcgPGxpdGVyYWw+cHJpbWFyeV9rZXk8L2xpdGVyYWw+IG9u IGEgdGFibGUgd2hvc2UKKyAgICAgICAgPGxpdGVyYWw+UkVQTElDQSBJREVOVElUWTwvbGl0ZXJh bD4gaXMgc2V0IHRvCisgICAgICAgIDxsaXRlcmFsPlVTSU5HIElOREVYPC9saXRlcmFsPiBvZiB0 aGUgcHJpbWFyeSBrZXkgcmFpc2VzIGFuCisgICAgICAgIGVycm9yIHVubGVzcyA8bGl0ZXJhbD5y ZXBsaWNhX2lkZW50aXR5PC9saXRlcmFsPiBpcyBhbHNvCisgICAgICAgIGV4Y2x1ZGVkOyBvdGhl cndpc2UgdGhlIGVtaXR0ZWQgRERMIHdvdWxkIHJlZmVyZW5jZSBhbiBpbmRleAorICAgICAgICB0 aGUgc2FtZSBEREwganVzdCBkcm9wcGVkLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgVGhlIDxsaXRlcmFsPnNjaGVtYV9xdWFsaWZpZWQ8L2xpdGVyYWw+IG9wdGlvbiAo Ym9vbGVhbiwgZGVmYXVsdAorICAgICAgICA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPikgY29udHJv bHMgd2hldGhlciB0aGUgdGFyZ2V0IHRhYmxlJ3Mgb3duCisgICAgICAgIHNjaGVtYSBpcyBpbmNs dWRlZCBpbiB0aGUgZ2VuZXJhdGVkIERETC4gIFdoZW4gc2V0IHRvCisgICAgICAgIDxsaXRlcmFs PmZhbHNlPC9saXRlcmFsPiwgdGhlIHRhYmxlIG5hbWUgaXMgZW1pdHRlZCB1bnF1YWxpZmllZAor ICAgICAgICBpbiB0aGUgPGNvbW1hbmQ+Q1JFQVRFIFRBQkxFPC9jb21tYW5kPiBhbmQgZXZlcnkg c3Vic2VxdWVudAorICAgICAgICA8Y29tbWFuZD5BTFRFUiBUQUJMRTwvY29tbWFuZD4sIDxjb21t YW5kPkNSRUFURSBJTkRFWDwvY29tbWFuZD4sCisgICAgICAgIDxjb21tYW5kPkNSRUFURSBSVUxF PC9jb21tYW5kPiwgYW5kCisgICAgICAgIDxjb21tYW5kPkNSRUFURSBTVEFUSVNUSUNTPC9jb21t YW5kPiBzdGF0ZW1lbnQuICBSZWZlcmVuY2VzIHRvCisgICAgICAgIG9iamVjdHMgaW4gdGhlIHNh bWUgc2NoZW1hIGFzIHRoZSB0YXJnZXQgdGFibGUgKGluaGVyaXRhbmNlCisgICAgICAgIHBhcmVu dHMsIHBhcnRpdGlvbiBwYXJlbnRzLCBpZGVudGl0eSBzZXF1ZW5jZXMsIGFuZCBhbnkKKyAgICAg ICAgc2FtZS1zY2hlbWEgb2JqZWN0IHRoZSBkZXBhcnNlIGhlbHBlcnMgaGFwcGVuIHRvIG1lbnRp b24pIGFyZQorICAgICAgICBhbHNvIGVtaXR0ZWQgdW5xdWFsaWZpZWQsIHNvIHRoZSBzY3JpcHQg Y2FuIGJlIHJlcGxheWVkIHVuZGVyIGEKKyAgICAgICAgZGlmZmVyZW50IDx2YXJuYW1lPnNlYXJj aF9wYXRoPC92YXJuYW1lPiB0byByZWNyZWF0ZSB0aGUgdGFibGUKKyAgICAgICAgaW4gYW5vdGhl ciBzY2hlbWEuICBDcm9zcy1zY2hlbWEgcmVmZXJlbmNlcyAoZm9yIGV4YW1wbGUgYQorICAgICAg ICBmb3JlaWduIGtleSB0YXJnZXQgaW4gYSBkaWZmZXJlbnQgc2NoZW1hKSByZW1haW4gcXVhbGlm aWVkIGZvcgorICAgICAgICBjb3JyZWN0bmVzcy4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBh cmE+CisgICAgICAgIEFsbCB0aHJlZSBmb3JtcyBvZiA8Y29tbWFuZD5DUkVBVEUgVEFCTEU8L2Nv bW1hbmQ+IGFyZSBzdXBwb3J0ZWQ6CisgICAgICAgIHRoZSBvcmRpbmFyeSBjb2x1bW4tbGlzdCBm b3JtLCB0aGUgdHlwZWQtdGFibGUgZm9ybQorICAgICAgICAoPGxpdGVyYWw+T0YgPHJlcGxhY2Vh YmxlPnR5cGVfbmFtZTwvcmVwbGFjZWFibGU+PC9saXRlcmFsPiwgd2l0aAorICAgICAgICBwZXIt Y29sdW1uIDxsaXRlcmFsPldJVEggT1BUSU9OUzwvbGl0ZXJhbD4gb3ZlcnJpZGVzIGZvciBsb2Nh bAorICAgICAgICBkZWZhdWx0cywgPGxpdGVyYWw+Tk9UIE5VTEw8L2xpdGVyYWw+LCBhbmQgPGxp dGVyYWw+Q0hFQ0s8L2xpdGVyYWw+CisgICAgICAgIGNvbnN0cmFpbnRzKSwgYW5kIHRoZSA8bGl0 ZXJhbD5QQVJUSVRJT04gT0Y8L2xpdGVyYWw+IGZvcm0uCisgICAgICAgIDxsaXRlcmFsPlRFTVBP UkFSWTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPlVOTE9HR0VEPC9saXRlcmFsPgorICAgICAgICBw ZXJzaXN0ZW5jZSBtb2RlcyBhcmUgZW1pdHRlZCBmcm9tCisgICAgICAgIDxzdHJ1Y3RmaWVsZD5y ZWxwZXJzaXN0ZW5jZTwvc3RydWN0ZmllbGQ+LiAgRm9yIHRlbXBvcmFyeSB0YWJsZXMKKyAgICAg ICAgcmVnaXN0ZXJlZCBpbiB0aGUgY3VycmVudCBzZXNzaW9uLCB0aGUKKyAgICAgICAgPGxpdGVy YWw+T04gQ09NTUlUIERFTEVURSBST1dTPC9saXRlcmFsPiBhbmQKKyAgICAgICAgPGxpdGVyYWw+ T04gQ09NTUlUIERST1A8L2xpdGVyYWw+IGNsYXVzZXMgYXJlIGVtaXR0ZWQ7IHRoZSBkZWZhdWx0 CisgICAgICAgIDxsaXRlcmFsPk9OIENPTU1JVCBQUkVTRVJWRSBST1dTPC9saXRlcmFsPiBpcyBv bWl0dGVkLgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgPC9yb3c+CiAgICAgIDwvdGJv ZHk+CiAgICAgPC90Z3JvdXA+CiAgICA8L3RhYmxlPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9wZ19pbmhlcml0cy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5j CmluZGV4IDRiOTgwMmFhZmNjLi44OTcxNTFiZDZkMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9wZ19pbmhlcml0cy5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfaW5oZXJp dHMuYwpAQCAtMjM2LDYgKzIzNiw5OSBAQCBmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVu ZGVkKE9pZCBwYXJlbnRyZWxJZCwgYm9vbCBvbWl0X2RldGFjaGVkLAogfQogCiAKKy8qCisgKiBm aW5kX2luaGVyaXRhbmNlX3BhcmVudHMKKyAqCisgKiBSZXR1cm5zIGEgbGlzdCBjb250YWluaW5n IHRoZSBPSURzIG9mIGFsbCByZWxhdGlvbnMgdGhhdCB0aGUgcmVsYXRpb24gd2l0aAorICogT0lE ICdyZWxpZCcgaW5oZXJpdHMgKmRpcmVjdGx5KiBmcm9tLCBpbiBpbmhzZXFubyBvcmRlciAodGhl IG9yZGVyIGluIHdoaWNoCisgKiB0aGV5IHNob3VsZCBhcHBlYXIgaW4gYW4gSU5IRVJJVFMgY2xh dXNlKS4KKyAqCisgKiBUaGUgc3BlY2lmaWVkIGxvY2sgdHlwZSBpcyBhY3F1aXJlZCBvbiBlYWNo IHBhcmVudCByZWxhdGlvbiAoYnV0IG5vdCBvbiB0aGUKKyAqIGdpdmVuIHJlbDsgY2FsbGVyIHNo b3VsZCBhbHJlYWR5IGhhdmUgbG9ja2VkIGl0KS4gIElmIGxvY2ttb2RlIGlzIE5vTG9jaworICog dGhlbiBubyBsb2NrcyBhcmUgYWNxdWlyZWQsIGJ1dCBjYWxsZXIgbXVzdCBiZXdhcmUgb2YgcmFj ZSBjb25kaXRpb25zCisgKiBhZ2FpbnN0IHBvc3NpYmxlIERST1BzIG9mIHBhcmVudCByZWxhdGlv bnMuCisgKgorICogUGFydGl0aW9uIGNoaWxkcmVuIGFsc28gaGF2ZSBhIHBnX2luaGVyaXRzIGVu dHJ5IHBvaW50aW5nIHRvIHRoZQorICogcGFydGl0aW9uZWQgcGFyZW50OyBjYWxsZXJzIHRoYXQg ZGlzdGluZ3Vpc2ggSU5IRVJJVFMgZnJvbSBQQVJUSVRJT04gT0YKKyAqIG11c3QgY2hlY2sgcmVs aXNwYXJ0aXRpb24gdGhlbXNlbHZlcy4KKyAqLworTGlzdCAqCitmaW5kX2luaGVyaXRhbmNlX3Bh cmVudHMoT2lkIHJlbGlkLCBMT0NLTU9ERSBsb2NrbW9kZSkKK3sKKwlMaXN0CSAgICpsaXN0ID0g TklMOworCVJlbGF0aW9uCXJlbGF0aW9uOworCVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURh dGEga2V5WzFdOworCUhlYXBUdXBsZQlpbmhlcml0c1R1cGxlOworCU9pZAkJCWluaHBhcmVudDsK KwlPaWQJCSAgICpvaWRhcnI7CisJaW50CQkJbWF4b2lkcywKKwkJCQludW1vaWRzLAorCQkJCWk7 CisKKwkvKgorCSAqIFNjYW4gcGdfaW5oZXJpdHMgdmlhIHRoZSAoaW5ocmVsaWQsIGluaHNlcW5v KSBpbmRleCBzbyB0aGF0IHRoZSByb3dzCisJICogY29tZSBvdXQgaW4gaW5oc2Vxbm8gb3JkZXIs IHdoaWNoIGlzIHRoZSBvcmRlciByZXF1aXJlZCBmb3IgdGhlCisJICogSU5IRVJJVFMgY2xhdXNl LgorCSAqLworCW1heG9pZHMgPSA4OworCW9pZGFyciA9IChPaWQgKikgcGFsbG9jKG1heG9pZHMg KiBzaXplb2YoT2lkKSk7CisJbnVtb2lkcyA9IDA7CisKKwlyZWxhdGlvbiA9IHRhYmxlX29wZW4o SW5oZXJpdHNSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJU2NhbktleUluaXQoJmtl eVswXSwKKwkJCQlBbnVtX3BnX2luaGVyaXRzX2luaHJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVn eU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKHJlbGlkKSk7CisKKwlzY2Fu ID0gc3lzdGFibGVfYmVnaW5zY2FuKHJlbGF0aW9uLCBJbmhlcml0c1JlbGlkU2Vxbm9JbmRleElk LCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMSwga2V5KTsKKworCXdoaWxlICgoaW5oZXJpdHNUdXBs ZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpICE9IE5VTEwpCisJeworCQlpbmhwYXJlbnQgPSAo KEZvcm1fcGdfaW5oZXJpdHMpIEdFVFNUUlVDVChpbmhlcml0c1R1cGxlKSktPmluaHBhcmVudDsK KwkJaWYgKG51bW9pZHMgPj0gbWF4b2lkcykKKwkJeworCQkJbWF4b2lkcyAqPSAyOworCQkJb2lk YXJyID0gKE9pZCAqKSByZXBhbGxvYyhvaWRhcnIsIG1heG9pZHMgKiBzaXplb2YoT2lkKSk7CisJ CX0KKwkJb2lkYXJyW251bW9pZHMrK10gPSBpbmhwYXJlbnQ7CisJfQorCisJc3lzdGFibGVfZW5k c2NhbihzY2FuKTsKKworCXRhYmxlX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOwor CisJLyoKKwkgKiBBY3F1aXJlIGxvY2tzIGFuZCBidWlsZCB0aGUgcmVzdWx0IGxpc3QuICBVbmxp a2UKKwkgKiBmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuIHdlIGRvICpub3QqIHNvcnQgYnkgT0lE OiBjYWxsZXJzIG5lZWQgdGhlCisJICogc2Vxbm8tb3JkZXJlZCB0cmF2ZXJzYWwuCisJICovCisJ Zm9yIChpID0gMDsgaSA8IG51bW9pZHM7IGkrKykKKwl7CisJCWluaHBhcmVudCA9IG9pZGFycltp XTsKKworCQlpZiAobG9ja21vZGUgIT0gTm9Mb2NrKQorCQl7CisJCQlMb2NrUmVsYXRpb25PaWQo aW5ocGFyZW50LCBsb2NrbW9kZSk7CisKKwkJCWlmICghU2VhcmNoU3lzQ2FjaGVFeGlzdHMxKFJF TE9JRCwgT2JqZWN0SWRHZXREYXR1bShpbmhwYXJlbnQpKSkKKwkJCXsKKwkJCQlVbmxvY2tSZWxh dGlvbk9pZChpbmhwYXJlbnQsIGxvY2ttb2RlKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQor CisJCWxpc3QgPSBsYXBwZW5kX29pZChsaXN0LCBpbmhwYXJlbnQpOworCX0KKworCXBmcmVlKG9p ZGFycik7CisKKwlyZXR1cm4gbGlzdDsKK30KKworCiAvKgogICogZmluZF9hbGxfaW5oZXJpdG9y cyAtCiAgKgkJUmV0dXJucyBhIGxpc3Qgb2YgcmVsYXRpb24gT0lEcyBpbmNsdWRpbmcgdGhlIGdp dmVuIHJlbCBwbHVzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDI2NWRjZmU3ZmRhLi5h NWY0NjUyMmMzMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTczOSw3ICs3MzksNiBA QCBzdGF0aWMgT2JqZWN0QWRkcmVzcyBBVEV4ZWNTZXRDb21wcmVzc2lvbihSZWxhdGlvbiByZWws CiAJCQkJCQkJCQkJICBjb25zdCBjaGFyICpjb2x1bW4sIE5vZGUgKm5ld1ZhbHVlLCBMT0NLTU9E RSBsb2NrbW9kZSk7CiAKIHN0YXRpYyB2b2lkIGluZGV4X2NvcHlfZGF0YShSZWxhdGlvbiByZWws IFJlbEZpbGVMb2NhdG9yIG5ld3Jsb2NhdG9yKTsKLXN0YXRpYyBjb25zdCBjaGFyICpzdG9yYWdl X25hbWUoY2hhciBjKTsKIAogc3RhdGljIHZvaWQgUmFuZ2VWYXJDYWxsYmFja0ZvckRyb3BSZWxh dGlvbihjb25zdCBSYW5nZVZhciAqcmVsLCBPaWQgcmVsT2lkLAogCQkJCQkJCQkJCQlPaWQgb2xk UmVsT2lkLCB2b2lkICphcmcpOwpAQCAtMjUxNSw3ICsyNTE0LDcgQEAgdHJ1bmNhdGVfY2hlY2tf YWN0aXZpdHkoUmVsYXRpb24gcmVsKQogICogc3RvcmFnZV9uYW1lCiAgKgkgIHJldHVybnMgdGhl IG5hbWUgY29ycmVzcG9uZGluZyB0byBhIHR5cHN0b3JhZ2UvYXR0c3RvcmFnZSBlbnVtIHZhbHVl CiAgKi8KLXN0YXRpYyBjb25zdCBjaGFyICoKK2NvbnN0IGNoYXIgKgogc3RvcmFnZV9uYW1lKGNo YXIgYykKIHsKIAlzd2l0Y2ggKGMpCkBAIC0xOTU1OCw2ICsxOTU1NywzMyBAQCByZW1vdmVfb25f Y29tbWl0X2FjdGlvbihPaWQgcmVsaWQpCiAJfQogfQogCisvKgorICogTG9vayB1cCB0aGUgcmVn aXN0ZXJlZCBPTiBDT01NSVQgYWN0aW9uIGZvciBhIHJlbGF0aW9uLgorICoKKyAqIFJldHVybnMg T05DT01NSVRfTk9PUCB3aGVuIG5vdGhpbmcgd2FzIHJlZ2lzdGVyZWQsIHdoaWNoIGFsc28gY292 ZXJzCisgKiB0ZW1wb3JhcnkgdGFibGVzIGNyZWF0ZWQgd2l0aCB0aGUgZGVmYXVsdCBPTiBDT01N SVQgUFJFU0VSVkUgUk9XUworICogYmVoYXZpb3IgKHJlZ2lzdGVyX29uX2NvbW1pdF9hY3Rpb24o KSBza2lwcyB0aG9zZSwgc2luY2Ugbm8gYWN0aW9uIGlzCisgKiBuZWVkZWQgYXQgY29tbWl0KS4g IEVudHJpZXMgbWFya2VkIGZvciBkZWxldGlvbiBpbiB0aGUgY3VycmVudAorICogdHJhbnNhY3Rp b24gYXJlIGlnbm9yZWQuCisgKi8KK09uQ29tbWl0QWN0aW9uCitnZXRfb25fY29tbWl0X2FjdGlv bihPaWQgcmVsaWQpCit7CisJTGlzdENlbGwgICAqbDsKKworCWZvcmVhY2gobCwgb25fY29tbWl0 cykKKwl7CisJCU9uQ29tbWl0SXRlbSAqb2MgPSAoT25Db21taXRJdGVtICopIGxmaXJzdChsKTsK KworCQlpZiAob2MtPnJlbGlkICE9IHJlbGlkKQorCQkJY29udGludWU7CisJCWlmIChvYy0+ZGVs ZXRpbmdfc3ViaWQgIT0gSW52YWxpZFN1YlRyYW5zYWN0aW9uSWQpCisJCQljb250aW51ZTsKKwkJ cmV0dXJuIG9jLT5vbmNvbW1pdDsKKwl9CisJcmV0dXJuIE9OQ09NTUlUX05PT1A7Cit9CisKIC8q CiAgKiBQZXJmb3JtIE9OIENPTU1JVCBhY3Rpb25zLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxz LmMKaW5kZXggZjMyZmNkNDUzZWYuLjllMDAwNjFjNjJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvZGRsdXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRp bHMuYwpAQCAtMjEsMTIgKzIxLDI1IEBACiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5j bHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgor I2luY2x1ZGUgImFjY2Vzcy90b2FzdF9jb21wcmVzc2lvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cv cGdfYXV0aF9tZW1iZXJzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24u aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnN0cmFpbnQuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX2RhdGFiYXNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYl9yb2xlX3NldHRpbmcuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmhlcml0 cy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcG9saWN5LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljX2V4dC5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJp Z2dlci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGFydGl0aW9uLmgiCisjaW5jbHVkZSAiY29tbWFu ZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVjbWRzLmgiCisjaW5jbHVkZSAi bm9kZXMvbm9kZXMuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCiAjaW5jbHVk ZSAiY29tbW9uL3JlbHBhdGguaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCkBAIC03Myw4ICs4Niw1 NSBAQCB0eXBlZGVmIHN0cnVjdCBEZGxPcHRpb24KIH0gRGRsT3B0aW9uOwogCiAKKy8qCisgKiBP YmplY3QtY2xhc3Mga2luZHMgdGhhdCB0aGUgaW5jbHVkZS9leGNsdWRlIG9wdGlvbnMgb24KKyAq IHBnX2dldF90YWJsZV9kZGwgY2FuIGZpbHRlciBvbi4gIE1lbWJlcnMgYXJlIHN0b3JlZCBhcyBp bnRlZ2VycyBpbiBhCisgKiBCaXRtYXBzZXQgb24gVGFibGVEZGxDb250ZXh0LiAgS2VlcCB0YWJs ZV9kZGxfa2luZF9uYW1lc1tdIGluIHN5bmMKKyAqIHdpdGggdGhlIG9yZGVyIG9mIGFkZGl0aW9u cyBoZXJlLgorICovCit0eXBlZGVmIGVudW0gVGFibGVEZGxLaW5kCit7CisJVEFCTEVfRERMX0tJ TkRfVEFCTEUsCisJVEFCTEVfRERMX0tJTkRfSU5ERVhFUywKKwlUQUJMRV9ERExfS0lORF9QUklN QVJZX0tFWSwKKwlUQUJMRV9ERExfS0lORF9VTklRVUUsCisJVEFCTEVfRERMX0tJTkRfQ0hFQ0ss CisJVEFCTEVfRERMX0tJTkRfRk9SRUlHTl9LRVlTLAorCVRBQkxFX0RETF9LSU5EX0VYQ0xVU0lP TiwKKwlUQUJMRV9ERExfS0lORF9SVUxFUywKKwlUQUJMRV9ERExfS0lORF9TVEFUSVNUSUNTLAor CVRBQkxFX0RETF9LSU5EX1RSSUdHRVJTLAorCVRBQkxFX0RETF9LSU5EX1BPTElDSUVTLAorCVRB QkxFX0RETF9LSU5EX1JMUywKKwlUQUJMRV9ERExfS0lORF9SRVBMSUNBX0lERU5USVRZLAorCVRB QkxFX0RETF9LSU5EX1BBUlRJVElPTlMsCit9CQkJVGFibGVEZGxLaW5kOworCitzdGF0aWMgY29u c3Qgc3RydWN0Cit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlUYWJsZURkbEtpbmQga2luZDsKK30J CQl0YWJsZV9kZGxfa2luZF9uYW1lc1tdID0KK3sKKwl7InRhYmxlIiwgVEFCTEVfRERMX0tJTkRf VEFCTEV9LAorCXsiaW5kZXhlcyIsIFRBQkxFX0RETF9LSU5EX0lOREVYRVN9LAorCXsicHJpbWFy eV9rZXkiLCBUQUJMRV9ERExfS0lORF9QUklNQVJZX0tFWX0sCisJeyJ1bmlxdWUiLCBUQUJMRV9E RExfS0lORF9VTklRVUV9LAorCXsiY2hlY2siLCBUQUJMRV9ERExfS0lORF9DSEVDS30sCisJeyJm b3JlaWduX2tleXMiLCBUQUJMRV9ERExfS0lORF9GT1JFSUdOX0tFWVN9LAorCXsiZXhjbHVzaW9u IiwgVEFCTEVfRERMX0tJTkRfRVhDTFVTSU9OfSwKKwl7InJ1bGVzIiwgVEFCTEVfRERMX0tJTkRf UlVMRVN9LAorCXsic3RhdGlzdGljcyIsIFRBQkxFX0RETF9LSU5EX1NUQVRJU1RJQ1N9LAorCXsi dHJpZ2dlcnMiLCBUQUJMRV9ERExfS0lORF9UUklHR0VSU30sCisJeyJwb2xpY2llcyIsIFRBQkxF X0RETF9LSU5EX1BPTElDSUVTfSwKKwl7InJscyIsIFRBQkxFX0RETF9LSU5EX1JMU30sCisJeyJy ZXBsaWNhX2lkZW50aXR5IiwgVEFCTEVfRERMX0tJTkRfUkVQTElDQV9JREVOVElUWX0sCisJeyJw YXJ0aXRpb25zIiwgVEFCTEVfRERMX0tJTkRfUEFSVElUSU9OU30sCit9OworCiBzdGF0aWMgdm9p ZCBwYXJzZV9kZGxfb3B0aW9ucyhGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgaW50IHZhcmlhZGlj X3N0YXJ0LAogCQkJCQkJCSAgRGRsT3B0aW9uICpvcHRzLCBpbnQgbm9wdHMpOworc3RhdGljIEJp dG1hcHNldCAqcGFyc2Vfa2luZF9saXN0KGNvbnN0IGNoYXIgKm9wdG5hbWUsIGNvbnN0IGNoYXIg Kmxpc3QpOwogc3RhdGljIHZvaWQgYXBwZW5kX2RkbF9vcHRpb24oU3RyaW5nSW5mbyBidWYsIGJv b2wgcHJldHR5LCBpbnQgaW5kZW50LAogCQkJCQkJCSAgY29uc3QgY2hhciAqZm10LCAuLi4pCiAJ CQlwZ19hdHRyaWJ1dGVfcHJpbnRmKDQsIDUpOwpAQCAtODcsNiArMTQ3LDk1IEBAIHN0YXRpYyBE YXR1bSBwZ19nZXRfdGFibGVzcGFjZV9kZGxfc3JmKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBP aWQgdHNpZCwgYm9vbCBpCiBzdGF0aWMgTGlzdCAqcGdfZ2V0X2RhdGFiYXNlX2RkbF9pbnRlcm5h bChPaWQgZGJpZCwgYm9vbCBwcmV0dHksCiAJCQkJCQkJCQkJICBib29sIG5vX293bmVyLCBib29s IG5vX3RhYmxlc3BhY2UpOwogCisvKgorICogUGVyLWNvbHVtbiBjYWNoZSBvZiBsb2NhbGx5LWRl Y2xhcmVkIE5PVCBOVUxMIGNvbnN0cmFpbnRzLiAgQnVpbHQgb25jZQorICogYnkgY29sbGVjdF9s b2NhbF9ub3RfbnVsbCgpIGFuZCBjb25zdWx0ZWQgYnkgdGhlIGNvbHVtbi1lbWl0IGhlbHBlcnMK KyAqIGFuZCB0aGUgcG9zdC1DUkVBVEUgY29uc3RyYWludCBsb29wLiAgRW50cmllcyB3aXRoIGNv bm9pZCA9PSBJbnZhbGlkT2lkCisgKiBtZWFuIHRoZSBjb2x1bW4gaGFzIG5vIGxvY2FsIE5PVCBO VUxMIGNvbnN0cmFpbnQgcm93IGluIHBnX2NvbnN0cmFpbnQKKyAqICh0aGUgY29sdW1uIG1heSBz dGlsbCBoYXZlIGF0dG5vdG51bGw9dHJ1ZSBvbiBhIHByZS1QRy0xOC11cGdyYWRlZAorICogY2F0 YWxvZywgaW4gd2hpY2ggY2FzZSBlbWl0IHBsYWluIGlubGluZSBOT1QgTlVMTCkuCisgKi8KK3R5 cGVkZWYgc3RydWN0IExvY2FsTm90TnVsbEVudHJ5Cit7CisJT2lkCQkJY29ub2lkOworCWNoYXIJ ICAgKm5hbWU7CisJYm9vbAkJaXNfYXV0bzsJCS8qIG1hdGNoZXMgIjx0YWJsZT5fPGNvbD5fbm90 X251bGwiICovCisJYm9vbAkJbm9faW5oZXJpdDsKK30JCQlMb2NhbE5vdE51bGxFbnRyeTsKKwor LyoKKyAqIFdvcmtpbmcgY29udGV4dCB0aHJlYWRlZCB0aHJvdWdoIHRoZSBwZXItcGFzcyBoZWxw ZXJzIGJlbG93LiAgSW5wdXRzCisgKiAoY2FsbGVyLXByb3ZpZGVkIG9wdGlvbiBmbGFncykgYXJl IGZpbGxlZCBpbiBvbmNlIGF0IHRoZSB0b3Agb2YKKyAqIHBnX2dldF90YWJsZV9kZGxfaW50ZXJu YWwgYW5kIHRyZWF0ZWQgYXMgcmVhZC1vbmx5IHRoZXJlYWZ0ZXIuICBEZXJpdmVkCisgKiBmaWVs ZHMgKHF1YWxuYW1lLCBzY2hlbWFfcHJlZml4LCBubl9lbnRyaWVzLCBza2lwX25vdG51bGxfb2lk cykgYXJlCisgKiBjb21wdXRlZCBvbmNlIGR1cmluZyBzZXR1cC4gIEVhY2ggcGFzcyBhcHBlbmRz IHRvIGN0eC0+YnVmIGFuZCBwdXNoZXMKKyAqIHRoZSBmaW5pc2hlZCBzdGF0ZW1lbnQgb250byBj dHgtPnN0YXRlbWVudHMgdmlhIGFwcGVuZF9zdG10KCkuCisgKi8KK3R5cGVkZWYgc3RydWN0IFRh YmxlRGRsQ29udGV4dAoreworCVJlbGF0aW9uCXJlbDsKKwlPaWQJCQlyZWxpZDsKKwlib29sCQlw cmV0dHk7CisJYm9vbAkJbm9fb3duZXI7CisJYm9vbAkJbm9fdGFibGVzcGFjZTsKKwlib29sCQlz Y2hlbWFfcXVhbGlmaWVkOworCisJLyoKKwkgKiBPYmplY3QtY2xhc3MgZmlsdGVyaW5nLiAgSWYg aW5jbHVkZWRfa2luZHMgaXMgbm9uLU5VTEwsIG9ubHkgdGhlCisJICoga2luZHMgaW4gdGhhdCBz ZXQgYXJlIGVtaXR0ZWQ7IGlmIGV4Y2x1ZGVkX2tpbmRzIGlzIG5vbi1OVUxMLCBhbGwKKwkgKiBr aW5kcyAqZXhjZXB0KiB0aG9zZSBpbiB0aGF0IHNldCBhcmUgZW1pdHRlZDsgaWYgYm90aCBhcmUg TlVMTCwKKwkgKiBldmVyeSBraW5kIGlzIGVtaXR0ZWQgKHRoZSBkZWZhdWx0KS4gIFRoZSB0d28g YXJlIG11dHVhbGx5CisJICogZXhjbHVzaXZlIGF0IHRoZSB1c2VyLWZhY2luZyBsYXllciAodGhl IFNSRiBlbnRyeSByZWplY3RzCisJICogc3BlY2lmeWluZyBib3RoKS4KKwkgKi8KKwlCaXRtYXBz ZXQgICppbmNsdWRlZF9raW5kczsKKwlCaXRtYXBzZXQgICpleGNsdWRlZF9raW5kczsKKworCS8q IERlcml2ZWQgZHVyaW5nIHNldHVwICovCisJT2lkCQkJYmFzZV9uYW1lc3BhY2U7CisJY2hhcgkg ICAqcXVhbG5hbWU7CisJY2hhcgkgICAqc2NoZW1hX3ByZWZpeDsJLyogTlVMTCB3aGVuIHNjaGVt YV9xdWFsaWZpZWQgKi8KKwlpbnQJCQlzYXZlX25lc3RsZXZlbDsgLyogPj0gMCBpZiB3ZSBuYXJy b3dlZCBzZWFyY2hfcGF0aCAqLworCUxvY2FsTm90TnVsbEVudHJ5ICpubl9lbnRyaWVzOworCUxp c3QJICAgKnNraXBfbm90bnVsbF9vaWRzOworCisJLyogTXV0YWJsZSB3b3JraW5nIHN0YXRlICov CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCUxpc3QJICAgKnN0YXRlbWVudHM7Cit9CQkJVGFibGVE ZGxDb250ZXh0OworCitzdGF0aWMgTGlzdCAqcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbChUYWJs ZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgYm9vbCBpc19raW5kX2luY2x1ZGVkKGNvbnN0IFRh YmxlRGRsQ29udGV4dCAqY3R4LCBUYWJsZURkbEtpbmQga2luZCk7CitzdGF0aWMgdm9pZCBhcHBl bmRfY29sdW1uX2RlZnMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgYm9vbCBwcmV0dHks CisJCQkJCQkJICAgYm9vbCBpbmNsdWRlX2NoZWNrLAorCQkJCQkJCSAgIGJvb2wgc2NoZW1hX3F1 YWxpZmllZCwKKwkJCQkJCQkgICBMb2NhbE5vdE51bGxFbnRyeSAqIG5uX2VudHJpZXMpOworc3Rh dGljIHZvaWQgYXBwZW5kX3R5cGVkX2NvbHVtbl9vdmVycmlkZXMoU3RyaW5nSW5mbyBidWYsIFJl bGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkgIGJvb2wgcHJldHR5LCBib29sIGluY2x1ZGVfY2hlY2ss CisJCQkJCQkJCQkJICBMb2NhbE5vdE51bGxFbnRyeSAqIG5uX2VudHJpZXMpOworc3RhdGljIHZv aWQgYXBwZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50cyhTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRp b24gcmVsLAorCQkJCQkJCQkJCQlib29sIHByZXR0eSwgYm9vbCAqZmlyc3QpOworc3RhdGljIGNo YXIgKmZpbmRfYXR0cmRlZl90ZXh0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRudW0sCisJ CQkJCQkJICAgTGlzdCAqKmRwY29udGV4dCk7CitzdGF0aWMgY2hhciAqbG9va3VwX3JlbG5hbWVf Zm9yX2VtaXQoT2lkIHJlbGlkLCBib29sIHNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJCQkgT2lk IGJhc2VfbmFtZXNwYWNlKTsKK3N0YXRpYyBjaGFyICpzdHJpcF9zY2hlbWFfcHJlZml4KGNvbnN0 IGNoYXIgKnN0bXQsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitzdGF0aWMgTG9jYWxOb3ROdWxsRW50 cnkgKiBjb2xsZWN0X2xvY2FsX25vdF9udWxsKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJCSAg TGlzdCAqKnNraXBfb2lkcyk7CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9zdG10KFRhYmxlRGRsQ29u dGV4dCAqIGN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRhYmxlRGRs Q29udGV4dCAqIGN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X293bmVyX3N0bXQoVGFibGVEZGxDb250 ZXh0ICogY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfY2hpbGRfZGVmYXVsdF9vdmVycmlkZXMoVGFi bGVEZGxDb250ZXh0ICogY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfYXR0b3B0aW9ucyhUYWJsZURk bENvbnRleHQgKiBjdHgpOworc3RhdGljIHZvaWQgZW1pdF9pbmRleGVzKFRhYmxlRGRsQ29udGV4 dCAqIGN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X2xvY2FsX2NvbnN0cmFpbnRzKFRhYmxlRGRsQ29u dGV4dCAqIGN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X3J1bGVzKFRhYmxlRGRsQ29udGV4dCAqIGN0 eCk7CitzdGF0aWMgdm9pZCBlbWl0X3N0YXRpc3RpY3MoVGFibGVEZGxDb250ZXh0ICogY3R4KTsK K3N0YXRpYyB2b2lkIGVtaXRfcmVwbGljYV9pZGVudGl0eShUYWJsZURkbENvbnRleHQgKiBjdHgp Oworc3RhdGljIHZvaWQgZW1pdF9ybHNfdG9nZ2xlcyhUYWJsZURkbENvbnRleHQgKiBjdHgpOwor c3RhdGljIHZvaWQgZW1pdF9wYXJ0aXRpb25fY2hpbGRyZW4oVGFibGVEZGxDb250ZXh0ICogY3R4 KTsKKwogCiAvKgogICogcGFyc2VfZGRsX29wdGlvbnMKQEAgLTIyNyw2ICszNzYsMTAyIEBAIHBh cnNlX2RkbF9vcHRpb25zKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBpbnQgdmFyaWFkaWNfc3Rh cnQsCiAJfQogfQogCisvKgorICogcGFyc2Vfa2luZF9saXN0CisgKgkJUGFyc2UgYSBjb21tYS1z ZXBhcmF0ZWQgbGlzdCBvZiBvYmplY3QtY2xhc3Mga2luZCBuYW1lcyBpbnRvIGEKKyAqCQlCaXRt YXBzZXQgb2YgVGFibGVEZGxLaW5kIHZhbHVlcy4KKyAqCisgKiBXaGl0ZXNwYWNlIGFyb3VuZCBl YWNoIGVudHJ5IGlzIHRyaW1tZWQuICBFbXB0eSBlbnRyaWVzIChlLmcuICJhLCxiIiBvciBhCisg KiB0cmFpbGluZyBjb21tYSkgYXJlIHJlamVjdGVkLiAgVW5rbm93biBraW5kIG5hbWVzIHJhaXNl IGFuIGVycm9yIGNpdGluZworICogdGhlIHN1cHBsaWVkIG9wdGlvbiBuYW1lIHNvIHRoZSBtZXNz YWdlIHBvaW50cyBhdCB0aGUgb2ZmZW5kaW5nIG9wdGlvbi4KKyAqIFJldHVybnMgTlVMTCBvbmx5 IHdoZW4gdGhlIGxpc3QgaXMgc3RydWN0dXJhbGx5IGVtcHR5OyBjYWxsZXJzIHNob3VsZAorICog dHJlYXQgYW4gYWxsLXdoaXRlc3BhY2UgbGlzdCBhcyBhbiBlcnJvciByYXRoZXIgdGhhbiBlcXVp dmFsZW50IHRvIE5VTEwuCisgKi8KK3N0YXRpYyBCaXRtYXBzZXQgKgorcGFyc2Vfa2luZF9saXN0 KGNvbnN0IGNoYXIgKm9wdG5hbWUsIGNvbnN0IGNoYXIgKmxpc3QpCit7CisJQml0bWFwc2V0ICAq cmVzdWx0ID0gTlVMTDsKKwljb25zdCBjaGFyICpwID0gbGlzdDsKKworCXdoaWxlICgqcCkKKwl7 CisJCWNvbnN0IGNoYXIgKnN0YXJ0OworCQljb25zdCBjaGFyICplbmQ7CisJCWNoYXIJICAgKnRv a2VuOworCQlib29sCQlmb3VuZCA9IGZhbHNlOworCisJCS8qIFNraXAgbGVhZGluZyB3aGl0ZXNw YWNlLiAqLworCQl3aGlsZSAoKnAgPT0gJyAnIHx8ICpwID09ICdcdCcpCisJCQlwKys7CisKKwkJ aWYgKCpwID09ICcsJyB8fCAqcCA9PSAnXDAnKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coImVt cHR5IGVudHJ5IGluIG9wdGlvbiBcIiVzXCIiLCBvcHRuYW1lKSkpOworCisJCXN0YXJ0ID0gcDsK KwkJd2hpbGUgKCpwICYmICpwICE9ICcsJyAmJiAqcCAhPSAnICcgJiYgKnAgIT0gJ1x0JykKKwkJ CXArKzsKKwkJZW5kID0gcDsKKworCQkvKiBTa2lwIHRyYWlsaW5nIHdoaXRlc3BhY2UuICovCisJ CXdoaWxlICgqcCA9PSAnICcgfHwgKnAgPT0gJ1x0JykKKwkJCXArKzsKKworCQlpZiAoKnAgIT0g J1wwJyAmJiAqcCAhPSAnLCcpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiaW52YWxpZCBjaGFy YWN0ZXIgaW4gb3B0aW9uIFwiJXNcIiIsIG9wdG5hbWUpKSk7CisKKwkJaWYgKCpwID09ICcsJykK KwkJCXArKzsKKworCQl0b2tlbiA9IHBuc3RyZHVwKHN0YXJ0LCBlbmQgLSBzdGFydCk7CisKKwkJ Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhvZih0YWJsZV9kZGxfa2luZF9uYW1lcyk7IGkr KykKKwkJeworCQkJaWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIHRhYmxlX2RkbF9raW5kX25hbWVz W2ldLm5hbWUpID09IDApCisJCQl7CisJCQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1iZXIocmVzdWx0 LAorCQkJCQkJCQkJCShpbnQpIHRhYmxlX2RkbF9raW5kX25hbWVzW2ldLmtpbmQpOworCQkJCWZv dW5kID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghZm91bmQpCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJIGVycm1zZygidW5yZWNvZ25pemVkIGtpbmQgXCIlc1wiIGluIG9wdGlvbiBc IiVzXCIiLAorCQkJCQkJCXRva2VuLCBvcHRuYW1lKSkpOworCisJCXBmcmVlKHRva2VuKTsKKwl9 CisKKwlpZiAocmVzdWx0ID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygib3B0aW9uIFwi JXNcIiBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIGtpbmQiLAorCQkJCQkJb3B0bmFtZSkpKTsK KworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBpc19raW5kX2luY2x1ZGVkCisgKgkJRGV0 ZXJtaW5lIHdoZXRoZXIgRERMIGZvciB0aGUgZ2l2ZW4gb2JqZWN0LWNsYXNzIGtpbmQgc2hvdWxk IGJlCisgKgkJZW1pdHRlZCB1bmRlciB0aGUgY3VycmVudCBvcHRpb25zLgorICovCitzdGF0aWMg Ym9vbAoraXNfa2luZF9pbmNsdWRlZChjb25zdCBUYWJsZURkbENvbnRleHQgKmN0eCwgVGFibGVE ZGxLaW5kIGtpbmQpCit7CisJaWYgKGN0eC0+aW5jbHVkZWRfa2luZHMgIT0gTlVMTCkKKwkJcmV0 dXJuIGJtc19pc19tZW1iZXIoKGludCkga2luZCwgY3R4LT5pbmNsdWRlZF9raW5kcyk7CisJaWYg KGN0eC0+ZXhjbHVkZWRfa2luZHMgIT0gTlVMTCkKKwkJcmV0dXJuICFibXNfaXNfbWVtYmVyKChp bnQpIGtpbmQsIGN0eC0+ZXhjbHVkZWRfa2luZHMpOworCXJldHVybiB0cnVlOworfQorCiAvKgog ICogSGVscGVyIHRvIGFwcGVuZCBhIGZvcm1hdHRlZCBzdHJpbmcgd2l0aCBvcHRpb25hbCBwcmV0 dHktcHJpbnRpbmcuCiAgKi8KQEAgLTExODUsMyArMTQzMCwxNzU0IEBAIHBnX2dldF9kYXRhYmFz ZV9kZGwoUEdfRlVOQ1RJT05fQVJHUykKIAkJU1JGX1JFVFVSTl9ET05FKGZ1bmNjdHgpOwogCX0K IH0KKworLyoKKyAqIGxvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0CisgKgkJUmV0dXJuIGVpdGhlciB0 aGUgc2NoZW1hLXF1YWxpZmllZCBvciB0aGUgYmFyZSBxdW90ZWQgbmFtZSBvZiBhCisgKgkJcmVs YXRpb24sIGRlcGVuZGluZyBvbiB0aGUgc2NoZW1hX3F1YWxpZmllZCBmbGFnLgorICoKKyAqIFdo ZW4gc2NoZW1hX3F1YWxpZmllZCBpcyB0cnVlIHRoZSBzY2hlbWEtcXVhbGlmaWVkIG5hbWUgaXMg YWx3YXlzCisgKiByZXR1cm5lZC4gIFdoZW4gZmFsc2UsIHRoZSBiYXJlIHJlbG5hbWUgaXMgcmV0 dXJuZWQgb25seSBpZiB0aGUgdGFyZ2V0CisgKiByZWxhdGlvbiBsaXZlcyBpbiBiYXNlX25hbWVz cGFjZSAodGhlIG5hbWVzcGFjZSBvZiB0aGUgdGFibGUgd2hvc2UgRERMIGlzCisgKiBiZWluZyBn ZW5lcmF0ZWQpOyBvdGhlcndpc2UgdGhlIHNjaGVtYS1xdWFsaWZpZWQgZm9ybSBpcyByZXR1cm5l ZCwKKyAqIGJlY2F1c2UgY3Jvc3Mtc2NoZW1hIHJlZmVyZW5jZXMgKGZvciBleGFtcGxlIGFuIGlu aGVyaXRhbmNlIHBhcmVudCBvcgorICogZm9yZWlnbiBrZXkgdGFyZ2V0IGluIGEgZGlmZmVyZW50 IHNjaGVtYSkgYXJlIG5vdCBzYWZlIHRvIHN0cmlwLgorICoKKyAqIFRoaXMgcmVwbGFjZXMgdGhl IHVuc2FmZSBwYXR0ZXJuCisgKgkgIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGdldF9uYW1l c3BhY2VfbmFtZShnZXRfcmVsX25hbWVzcGFjZShvaWQpKSwKKyAqCSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2V0X3JlbF9uYW1lKG9pZCkpCisgKiB3aGljaCBkZXJlZmVyZW5jZXMgTlVM TCB3aGVuIGEgY29uY3VycmVudCB0cmFuc2FjdGlvbiBoYXMgZHJvcHBlZCB0aGUKKyAqIHJlZmVy ZW5jZWQgcmVsYXRpb24gKG9yIGl0cyBzY2hlbWEpIGJldHdlZW4gd2hlbiB3ZSBjYWNoZWQgaXRz IE9JRCBhbmQKKyAqIHdoZW4gd2UgYXNrIHRoZSBzeXNjYWNoZSBmb3IgaXRzIG5hbWUuICBIb2xk aW5nIEFjY2Vzc1NoYXJlTG9jayBvbiBhCisgKiBkZXBlbmRlbnQgcmVsYXRpb24gbWFrZXMgdGhp cyByYWNlIHZhbmlzaGluZ2x5IHVubGlrZWx5IGluIHByYWN0aWNlLCBidXQKKyAqIHdlIHN0aWxs IGRlZmVuZCBhZ2FpbnN0IGl0IGJlY2F1c2UgdGhlIGFsdGVybmF0aXZlIGlzIGEgU0lHU0VHVi4K KyAqCisgKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBmcmVlKClpbmcgdGhlIHJlc3VsdC4K KyAqLworc3RhdGljIGNoYXIgKgorbG9va3VwX3JlbG5hbWVfZm9yX2VtaXQoT2lkIHJlbGlkLCBi b29sIHNjaGVtYV9xdWFsaWZpZWQsIE9pZCBiYXNlX25hbWVzcGFjZSkKK3sKKwlIZWFwVHVwbGUJ dHA7CisJRm9ybV9wZ19jbGFzcyByZWx0dXA7CisJY2hhcgkgICAqbnNwbmFtZTsKKwljaGFyCSAg ICpyZXN1bHQ7CisKKwl0cCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElkR2V0RGF0 dW0ocmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJIGVycm1zZygi cmVsYXRpb24gd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLCByZWxpZCksCisJCQkJIGVycmRl dGFpbCgiSXQgbWF5IGhhdmUgYmVlbiBjb25jdXJyZW50bHkgZHJvcHBlZC4iKSkpOworCisJcmVs dHVwID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVCh0cCk7CisKKwkvKiBCYXJlIG5hbWUgb25s eSB3aGVuIGNhbGxlciBhc2tlZCBhbmQgdGFyZ2V0IGlzIGluIHRoZSBiYXNlIG5hbWVzcGFjZS4g Ki8KKwlpZiAoIXNjaGVtYV9xdWFsaWZpZWQgJiYgcmVsdHVwLT5yZWxuYW1lc3BhY2UgPT0gYmFz ZV9uYW1lc3BhY2UpCisJeworCQlyZXN1bHQgPSBwc3RyZHVwKHF1b3RlX2lkZW50aWZpZXIoTmFt ZVN0cihyZWx0dXAtPnJlbG5hbWUpKSk7CisJCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJCXJldHVy biByZXN1bHQ7CisJfQorCisJbnNwbmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShyZWx0dXAtPnJl bG5hbWVzcGFjZSk7CisJaWYgKG5zcG5hbWUgPT0gTlVMTCkKKwl7CisJCU9pZAkJCW5zcG9pZCA9 IHJlbHR1cC0+cmVsbmFtZXNwYWNlOworCisJCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkg ZXJybXNnKCJzY2hlbWEgd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLCBuc3BvaWQpLAorCQkJ CSBlcnJkZXRhaWwoIkl0IG1heSBoYXZlIGJlZW4gY29uY3VycmVudGx5IGRyb3BwZWQuIikpKTsK Kwl9CisKKwlyZXN1bHQgPSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihuc3BuYW1lLCBOYW1l U3RyKHJlbHR1cC0+cmVsbmFtZSkpOworCisJcGZyZWUobnNwbmFtZSk7CisJUmVsZWFzZVN5c0Nh Y2hlKHRwKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBzdHJpcF9zY2hlbWFfcHJl Zml4CisgKgkJUmV0dXJuIGEgcGFsbG9jJ2QgY29weSBvZiBzdG10IHdpdGggZXZlcnkgb2NjdXJy ZW5jZSBvZiBwcmVmaXgKKyAqCQlyZW1vdmVkLCBleGNlcHQgb2NjdXJyZW5jZXMgdGhhdCBmYWxs IGluc2lkZSBhIHNpbmdsZS1xdW90ZWQgU1FMCisgKgkJc3RyaW5nIGxpdGVyYWwgb3IgYSBkb3Vi bGUtcXVvdGVkIFNRTCBpZGVudGlmaWVyLgorICoKKyAqIFVzZWQgdG8gc3RyaXAgdGhlIHF1YWxp ZmllZC1zY2hlbWEgcHJlZml4IChmb3IgZXhhbXBsZSAib2xkX3NjaGVtYS4iKQorICogZnJvbSBE REwgZW1pdHRlZCBieSB0aGUgYWx3YXlzLXF1YWxpZmllZCBydWxldXRpbHMgaGVscGVycworICog KHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQsIHBnX2dldF9pbmRleGRlZl9zdHJpbmcsCisg KiBwZ19nZXRfcnVsZWRlZiwgcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKSB3aGVuIHRo ZSBjYWxsZXIgaGFzCisgKiByZXF1ZXN0ZWQgdW5xdWFsaWZpZWQgb3V0cHV0IHZpYSBzY2hlbWFf cXVhbGlmaWVkPWZhbHNlLiAgQSBwbGFpbgorICogc3Vic3RyaW5nIHN0cmlwIHdvdWxkIGNvcnJ1 cHQgc3RyaW5nIGxpdGVyYWxzIHdob3NlIGNvbnRlbnRzIGhhcHBlbgorICogdG8gY29udGFpbiAi PHNjaGVtYT4uIiAoZm9yIGV4YW1wbGUgYSBDSEVDSyBjb21wYXJpbmcgYWdhaW5zdAorICogJ215 c2NoZW1hLnNlY3JldCcpIG9yIGRvdWJsZS1xdW90ZWQgY29sdW1uL2lkZW50aWZpZXIgbmFtZXMg d2hvc2UKKyAqIGNvbnRlbnRzIGhhcHBlbiB0byBjb250YWluICI8c2NoZW1hPi4iIChmb3IgZXhh bXBsZSBhIGNvbHVtbiBuYW1lZAorICogInMud2VpcmQiIHdoZW4gc3RyaXBwaW5nIHRoZSBwcmVm aXggInMuIiksIHNvIHdlIHRyYWNrIHF1b3Rpbmcgc3RhdGUKKyAqIGFuZCBza2lwIG1hdGNoZXMg dGhhdCBvY2N1ciB3aGlsZSB3ZSBhcmUgaW5zaWRlIGVpdGhlciBraW5kIG9mCisgKiBxdW90ZWQg dG9rZW4uICBFc2NhcGVkIHF1b3RlcyAoJycgaW5zaWRlIGEgc3RyaW5nLCAiIiBpbnNpZGUgYW4K KyAqIGlkZW50aWZpZXIpIGFyZSBoYW5kbGVkIGJ5IGtlZXBpbmcgdGhlIGNvcnJlc3BvbmRpbmcg ZmxhZyBzZXQgYWNyb3NzCisgKiB0aGVtLgorICovCitzdGF0aWMgY2hhciAqCitzdHJpcF9zY2hl bWFfcHJlZml4KGNvbnN0IGNoYXIgKnN0bXQsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlTdHJp bmdJbmZvRGF0YSBidWY7CisJc2l6ZV90CQlwbGVuID0gc3RybGVuKHByZWZpeCk7CisJY29uc3Qg Y2hhciAqcCA9IHN0bXQ7CisJYm9vbAkJaW5fc3RyaW5nID0gZmFsc2U7CisJYm9vbAkJaW5faWRl bnQgPSBmYWxzZTsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCXdoaWxlICgqcCkKKwl7CisJ CS8qCisJCSAqIFRyeSB0aGUgcHJlZml4IG1hdGNoIEJFRk9SRSB0aGUgcXVvdGUtc3RhdGUgdG9n Z2xlcy4gIFRoZSBwcmVmaXgKKwkJICogaXRzZWxmIG1heSBiZWdpbiB3aXRoIGEgZG91YmxlIHF1 b3RlIHdoZW4gdGhlIGJhc2Ugc2NoZW1hIG5hbWUKKwkJICogcmVxdWlyZXMgcXVvdGluZyAoZS5n LiAiTXktU2NoZW1hIi4pLCBhbmQgYXQgdGhhdCBsZWFkaW5nICIgd2UgbXVzdAorCQkgKiBzdHJp cCB0aGUgd2hvbGUgcHJlZml4IHJhdGhlciB0aGFuIHRyZWF0IGl0IGFzIHRoZSBvcGVuaW5nIG9m IGEKKwkJICogcmVndWxhciBxdW90ZWQgaWRlbnRpZmllci4gIFRoZSBjaGVjayBpcyBnYXRlZCBv biAhaW5faWRlbnQgJiYKKwkJICogIWluX3N0cmluZywgc28gb25jZSB3ZSBoYXZlIHRvZ2dsZWQg aW50byBhIHF1b3RlZCB0b2tlbiB3ZSBuZXZlcgorCQkgKiBzdHJpcCBhIGNvaW5jaWRlbnRhbCBz dWJzdHJpbmcgaW5zaWRlIGl0LgorCQkgKi8KKwkJaWYgKCFpbl9zdHJpbmcgJiYgIWluX2lkZW50 ICYmIHN0cm5jbXAocCwgcHJlZml4LCBwbGVuKSA9PSAwKQorCQl7CisJCQlwICs9IHBsZW47CisJ CQljb250aW51ZTsKKwkJfQorCQlpZiAoKnAgPT0gJ1wnJyAmJiAhaW5faWRlbnQpCisJCXsKKwkJ CS8qIFNRTCAnJyBlc2NhcGU6IGVtaXQgYm90aCBxdW90ZXMgYW5kIHN0YXkgaW5zaWRlIHRoZSBz dHJpbmcuICovCisJCQlpZiAoaW5fc3RyaW5nICYmIHBbMV0gPT0gJ1wnJykKKwkJCXsKKwkJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnXCcnKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cigmYnVmLCAnXCcnKTsKKwkJCQlwICs9IDI7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpbl9z dHJpbmcgPSAhaW5fc3RyaW5nOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgKnApOwor CQkJcCsrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCpwID09ICciJyAmJiAhaW5fc3RyaW5n KQorCQl7CisJCQkvKiBTUUwgIiIgZXNjYXBlOiBlbWl0IGJvdGggcXVvdGVzIGFuZCBzdGF5IGlu c2lkZSB0aGUgaWRlbnQuICovCisJCQlpZiAoaW5faWRlbnQgJiYgcFsxXSA9PSAnIicpCisJCQl7 CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyInKTsKKwkJCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcigmYnVmLCAnIicpOworCQkJCXAgKz0gMjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJ CWluX2lkZW50ID0gIWluX2lkZW50OworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgKnAp OworCQkJcCsrOworCQkJY29udGludWU7CisJCX0KKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1 ZiwgKnApOworCQlwKys7CisJfQorCXJldHVybiBidWYuZGF0YTsKK30KKworLyoKKyAqIGNvbGxl Y3RfbG9jYWxfbm90X251bGwKKyAqCQlTY2FuIHBnX2NvbnN0cmFpbnQgb25jZSBmb3IgbG9jYWxs eS1kZWNsYXJlZCBOT1QgTlVMTCBjb25zdHJhaW50cworICoJCW9uIHJlbCwgcmV0dXJuaW5nIGEg cGFsbG9jJ2QgYXJyYXkgaW5kZXhlZCBieSBhdHRudW0gKDEuLm5hdHRzKS4KKyAqCisgKiBFbnRy aWVzIHdpdGggY29ub2lkPT1JbnZhbGlkT2lkIG1lYW4gIm5vIGxvY2FsIE5PVCBOVUxMIHJvdyBm b3IgdGhpcworICogY29sdW1uIi4gIFdoZW4gdGhlIGNvbnN0cmFpbnQgbmFtZSBkb2VzIG5vdCBt YXRjaCB0aGUgYXV0by1nZW5lcmF0ZWQKKyAqIHBhdHRlcm4gIjx0YWJsZW5hbWU+Xzxjb2x1bW5u YW1lPl9ub3RfbnVsbCIsIHRoZSBjb25zdHJhaW50IE9JRCBpcworICogYXBwZW5kZWQgdG8gKnNr aXBfb2lkcyBzbyB0aGUgcG9zdC1DUkVBVEUgY29uc3RyYWludCBsb29wIGNhbiBhdm9pZAorICog cmUtZW1pdHRpbmcgaXQgYXMgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIC0gdGhlIGNv bHVtbi1lbWl0CisgKiBwYXNzIHdpbGwgcHJvZHVjZSBpdCBpbmxpbmUgYXMgIkNPTlNUUkFJTlQg bmFtZSBOT1QgTlVMTCIgaW5zdGVhZC4KKyAqLworc3RhdGljIExvY2FsTm90TnVsbEVudHJ5ICoK K2NvbGxlY3RfbG9jYWxfbm90X251bGwoUmVsYXRpb24gcmVsLCBMaXN0ICoqc2tpcF9vaWRzKQor eworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCWludAkJCW5h dHRzID0gdHVwZGVzYy0+bmF0dHM7CisJTG9jYWxOb3ROdWxsRW50cnkgKmVudHJpZXM7CisJY29u c3QgY2hhciAqcmVsbmFtZSA9IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCk7CisJUmVsYXRp b24JY29uUmVsOworCVN5c1NjYW5EZXNjIGNvblNjYW47CisJU2NhbktleURhdGEgY29uS2V5Owor CUhlYXBUdXBsZQljb25UdXA7CisKKwllbnRyaWVzID0gKExvY2FsTm90TnVsbEVudHJ5ICopIHBh bGxvYzAoc2l6ZW9mKExvY2FsTm90TnVsbEVudHJ5KSAqCisJCQkJCQkJCQkJCShuYXR0cyArIDEp KTsKKworCWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1No YXJlTG9jayk7CisJU2NhbktleUluaXQoJmNvbktleSwKKwkJCQlBbnVtX3BnX2NvbnN0cmFpbnRf Y29ucmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVj dElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpKSk7CisJY29uU2NhbiA9IHN5c3RhYmxl X2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFtZUluZGV4SWQsCisJCQkJ CQkJCSB0cnVlLCBOVUxMLCAxLCAmY29uS2V5KTsKKworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlk KGNvblR1cCA9IHN5c3RhYmxlX2dldG5leHQoY29uU2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25z dHJhaW50IGNvbiA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVChjb25UdXApOworCQlE YXR1bQkJY29ua2V5RGF0OworCQlib29sCQljb25rZXlOdWxsOworCQlBcnJheVR5cGUgICpjb25r ZXlBcnI7CisJCWludDE2CSAgICpjb25rZXlWYWxzOworCQlpbnQJCQlhdHRudW07CisJCUZvcm1f cGdfYXR0cmlidXRlIGF0dDsKKwkJY2hhcgkJYXV0b25hbWVbTkFNRURBVEFMRU5dOworCisJCWlm IChjb24tPmNvbnR5cGUgIT0gQ09OU1RSQUlOVF9OT1ROVUxMKQorCQkJY29udGludWU7CisJCWlm ICghY29uLT5jb25pc2xvY2FsKQorCQkJY29udGludWU7CisKKwkJY29ua2V5RGF0ID0gaGVhcF9n ZXRhdHRyKGNvblR1cCwgQW51bV9wZ19jb25zdHJhaW50X2NvbmtleSwKKwkJCQkJCQkJIFJlbGF0 aW9uR2V0RGVzY3IoY29uUmVsKSwgJmNvbmtleU51bGwpOworCQlpZiAoY29ua2V5TnVsbCkKKwkJ CWNvbnRpbnVlOworCQljb25rZXlBcnIgPSBEYXR1bUdldEFycmF5VHlwZVAoY29ua2V5RGF0KTsK KworCQkvKgorCQkgKiBEZWZlbmQgYWdhaW5zdCBhIG1hbGZvcm1lZCBjb25rZXk6IGEgTk9UIE5V TEwgY29uc3RyYWludCBpcyBhbHdheXMKKwkJICogYSBzaW5nbGUtY29sdW1uIDEtRCBpbnQyIGFy cmF5LCBidXQgYSBjb3JydXB0ZWQgY2F0YWxvZyBvciBhIGZ1dHVyZQorCQkgKiBwYXRjaCB0aGF0 IHN0b3JlcyB3aWRlciBjb25rZXlzIG11c3RuJ3QgdHJpcCB1cyBpbnRvIHJlYWRpbmcgcGFzdAor CQkgKiB0aGUgYXJyYXkgaGVhZGVyLgorCQkgKi8KKwkJaWYgKEFSUl9ORElNKGNvbmtleUFycikg IT0gMSB8fAorCQkJQVJSX0RJTVMoY29ua2V5QXJyKVswXSA8IDEgfHwKKwkJCUFSUl9IQVNOVUxM KGNvbmtleUFycikgfHwKKwkJCUFSUl9FTEVNVFlQRShjb25rZXlBcnIpICE9IElOVDJPSUQpCisJ CQljb250aW51ZTsKKworCQljb25rZXlWYWxzID0gKGludDE2ICopIEFSUl9EQVRBX1BUUihjb25r ZXlBcnIpOworCQlhdHRudW0gPSBjb25rZXlWYWxzWzBdOworCQlpZiAoYXR0bnVtIDwgMSB8fCBh dHRudW0gPiBuYXR0cykKKwkJCWNvbnRpbnVlOworCisJCWF0dCA9IFR1cGxlRGVzY0F0dHIodHVw ZGVzYywgYXR0bnVtIC0gMSk7CisJCXNucHJpbnRmKGF1dG9uYW1lLCBzaXplb2YoYXV0b25hbWUp LCAiJXNfJXNfbm90X251bGwiLAorCQkJCSByZWxuYW1lLCBOYW1lU3RyKGF0dC0+YXR0bmFtZSkp OworCisJCWVudHJpZXNbYXR0bnVtXS5jb25vaWQgPSBjb24tPm9pZDsKKwkJZW50cmllc1thdHRu dW1dLm5hbWUgPSBwc3RyZHVwKE5hbWVTdHIoY29uLT5jb25uYW1lKSk7CisJCWVudHJpZXNbYXR0 bnVtXS5pc19hdXRvID0gKHN0cmNtcChOYW1lU3RyKGNvbi0+Y29ubmFtZSksIGF1dG9uYW1lKSA9 PSAwKTsKKwkJZW50cmllc1thdHRudW1dLm5vX2luaGVyaXQgPSBjb24tPmNvbm5vaW5oZXJpdDsK KworCQkvKgorCQkgKiBJbmxpbmUgZW1pc3Npb24gb2YgTk9UIE5VTEwgb25seSBoYXBwZW5zIGZv ciBjb2x1bW5zIHRoYXQgdGhlCisJCSAqIGNvbHVtbiBsaXN0IGFjdHVhbGx5IGVtaXRzLCBpLmUu IGF0dGlzbG9jYWwgY29sdW1ucy4gIEZvciB0aG9zZQorCQkgKiB0aGUgaW5saW5lIHBhc3MgYWxy ZWFkeSBtYXRlcmlhbGl6ZXMgdGhlIGNvbnN0cmFpbnQgKGVpdGhlciBhcworCQkgKiAiQ09OU1RS QUlOVCBuYW1lIE5PVCBOVUxMIiBmb3IgdXNlci1uYW1lZCwgb3IgYXMgYSBiYXJlCisJCSAqICJO T1QgTlVMTCIgdGhhdCBQRyByZS1jcmVhdGVzIHVuZGVyIHRoZSBhdXRvLW5hbWUgcGF0dGVybiks IHNvCisJCSAqIHRoZSBwb3N0LUNSRUFURSBjb25zdHJhaW50IGxvb3AgbXVzdCBub3QgZW1pdCBh IHNlY29uZAorCQkgKiBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgZm9yIHRoZSBzYW1l IGNvbHVtbiAtIFBHIG9ubHkKKwkJICogYWxsb3dzIG9uZSBOT1QgTlVMTCBjb25zdHJhaW50IHBl ciBjb2x1bW4gYW5kIHJlamVjdHMgdGhlCisJCSAqIHNlY29uZCB3aXRoIGEgbmFtZSBtaXNtYXRj aCB3aGVuZXZlciB0aGUgc2F2ZWQgYXV0by1uYW1lIG5vCisJCSAqIGxvbmdlciBtYXRjaGVzIHRo ZSBjdXJyZW50IHRhYmxlIG5hbWUgKGUuZy4gYWZ0ZXIgYSByZW5hbWUsIG9yCisJCSAqIHdoZW4g Q1JFQVRFIFRBQkxFIHVuaXF1aWZpZXMgdGhlIGF1dG8tbmFtZSB0byBkb2RnZSBhIHNlcXVlbmNl CisJCSAqIGNvbGxpc2lvbikuICBGb3IgYSBsb2NhbGx5LWRlY2xhcmVkIE5PVCBOVUxMIHNpdHRp bmcgb24gYW4KKwkJICogaW5oZXJpdGVkIChub24tbG9jYWwpIGNvbHVtbiB0aGUgaW5saW5lIHBh dGggbmV2ZXIgZmlyZXMsIHNvCisJCSAqIGxlYXZlIHRoZSBPSUQgb3V0IG9mIHNraXBfb2lkcyBh bmQgbGV0IHRoZSBwb3N0LUNSRUFURSBsb29wCisJCSAqIGVtaXQgQUxURVIgVEFCTEUgLi4uIEFE RCBDT05TVFJBSU5ULgorCQkgKi8KKwkJaWYgKGF0dC0+YXR0aXNsb2NhbCAmJiBza2lwX29pZHMg IT0gTlVMTCkKKwkJCSpza2lwX29pZHMgPSBsYXBwZW5kX29pZCgqc2tpcF9vaWRzLCBjb24tPm9p ZCk7CisJfQorCXN5c3RhYmxlX2VuZHNjYW4oY29uU2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVs LCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGVudHJpZXM7Cit9CisKKy8qCisgKiBmaW5k X2F0dHJkZWZfdGV4dAorICoJCVJldHVybiB0aGUgZGVwYXJzZWQgREVGQVVMVC9HRU5FUkFURUQg ZXhwcmVzc2lvbiBmb3IgYXR0bnVtIG9uIHJlbCwKKyAqCQlvciBOVUxMIGlmIG5vIGVudHJ5IGV4 aXN0cyBpbiBUdXBsZUNvbnN0ci0+ZGVmdmFsLgorICoKKyAqIFRoZSBjYWxsZXIgcGFzc2VzIGEg TGlzdCAqKiBzbyB0aGF0IHRoZSBkZXBhcnNlIGNvbnRleHQgaXMgYnVpbHQgbGF6aWx5CisgKiBh bmQgcmV1c2VkIGFjcm9zcyBjYWxscyAoZGVwYXJzZV9jb250ZXh0X2ZvciBpcyBub3QgY2hlYXAp LiAgUmV0dXJuZWQKKyAqIHN0cmluZyBpcyBwYWxsb2MnZCBpbiB0aGUgY3VycmVudCBtZW1vcnkg Y29udGV4dDsgY2FsbGVyIHBmcmVlJ3MgaXQuCisgKi8KK3N0YXRpYyBjaGFyICoKK2ZpbmRfYXR0 cmRlZl90ZXh0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRudW0sIExpc3QgKipkcGNvbnRl eHQpCit7CisJVHVwbGVDb25zdHIgKmNvbnN0ciA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKS0+Y29u c3RyOworCisJaWYgKGNvbnN0ciA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaW50 IGogPSAwOyBqIDwgY29uc3RyLT5udW1fZGVmdmFsOyBqKyspCisJeworCQlpZiAoY29uc3RyLT5k ZWZ2YWxbal0uYWRudW0gIT0gYXR0bnVtKQorCQkJY29udGludWU7CisKKwkJaWYgKCpkcGNvbnRl eHQgPT0gTklMKQorCQkJKmRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCQkJIFJlbGF0aW9uR2V0UmVsaWQocmVsKSk7 CisKKwkJcmV0dXJuIGRlcGFyc2VfZXhwcmVzc2lvbihzdHJpbmdUb05vZGUoY29uc3RyLT5kZWZ2 YWxbal0uYWRiaW4pLAorCQkJCQkJCQkgICpkcGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisJfQor CXJldHVybiBOVUxMOworfQorCisvKgorICogYXBwZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50 cworICoJCUVtaXQgZWFjaCBsb2NhbGx5LWRlY2xhcmVkIENIRUNLIGNvbnN0cmFpbnQgb24gcmVs IGFzCisgKgkJIkNPTlNUUkFJTlQgbmFtZSA8cGdfZ2V0X2NvbnN0cmFpbnRkZWY+Iiwgc2VwYXJh dGVkIGJ5ICcsJyBmcm9tIGFueQorICoJCXByZXZpb3VzbHktZW1pdHRlZCBjb2x1bW4gb3IgY29u c3RyYWludC4KKyAqCisgKiAqZmlyc3QgdHJhY2tzIHdoZXRoZXIgYW55dGhpbmcgaGFzIGJlZW4g ZW1pdHRlZCBvbiB0aGlzIGxpc3QgeWV0LCBzbyB0aGUKKyAqIGNhbGxlciBjYW4gY2hhaW4gY29s dW1uIGVtaXNzaW9uIGFuZCBjb25zdHJhaW50IGVtaXNzaW9uIHRocm91Z2ggdGhlIHNhbWUKKyAq IGJ1ZmZlci4gIEluaGVyaXRlZCBDSEVDSyBjb25zdHJhaW50cyAoIWNvbmlzbG9jYWwpIGNvbWUg ZnJvbSB0aGUgcGFyZW50J3MKKyAqIERETCBhbmQgYXJlbid0IHJlcGVhdGVkIGhlcmUuCisgKi8K K3N0YXRpYyB2b2lkCithcHBlbmRfaW5saW5lX2NoZWNrX2NvbnN0cmFpbnRzKFN0cmluZ0luZm8g YnVmLCBSZWxhdGlvbiByZWwsIGJvb2wgcHJldHR5LAorCQkJCQkJCQlib29sICpmaXJzdCkKK3sK KwlSZWxhdGlvbgljb25SZWw7CisJU3lzU2NhbkRlc2MgY29uU2NhbjsKKwlTY2FuS2V5RGF0YSBj b25LZXk7CisJSGVhcFR1cGxlCWNvblR1cDsKKworCWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3Ry YWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmNvbktleSwK KwkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVt YmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxpZChyZWwp KSk7CisJY29uU2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxp ZFR5cGlkTmFtZUluZGV4SWQsCisJCQkJCQkJCSB0cnVlLCBOVUxMLCAxLCAmY29uS2V5KTsKKwor CXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCA9IHN5c3RhYmxlX2dldG5leHQoY29uU2Nh bikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbiA9IChGb3JtX3BnX2NvbnN0cmFpbnQp IEdFVFNUUlVDVChjb25UdXApOworCQlEYXR1bQkJZGVmRGF0dW07CisJCWNoYXIJICAgKmRlZmJv ZHk7CisKKwkJaWYgKGNvbi0+Y29udHlwZSAhPSBDT05TVFJBSU5UX0NIRUNLKQorCQkJY29udGlu dWU7CisJCWlmICghY29uLT5jb25pc2xvY2FsKQorCQkJY29udGludWU7CisKKwkJaWYgKCEqZmly c3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcsJyk7CisJCWlmIChwcmV0dHkpCisJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlxuICAgICIpOworCQllbHNlIGlmICghKmZp cnN0KQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCQkqZmlyc3QgPSBmYWxz ZTsKKworCQlkZWZEYXR1bSA9IE9pZEZ1bmN0aW9uQ2FsbDEoRl9QR19HRVRfQ09OU1RSQUlOVERF Rl9PSUQsCisJCQkJCQkJCQlPYmplY3RJZEdldERhdHVtKGNvbi0+b2lkKSk7CisJCWRlZmJvZHkg PSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlZkRhdHVtKTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYs ICJDT05TVFJBSU5UICVzICVzIiwKKwkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoY29u LT5jb25uYW1lKSksCisJCQkJCQkgZGVmYm9keSk7CisJCXBmcmVlKGRlZmJvZHkpOworCX0KKwlz eXN0YWJsZV9lbmRzY2FuKGNvblNjYW4pOworCXRhYmxlX2Nsb3NlKGNvblJlbCwgQWNjZXNzU2hh cmVMb2NrKTsKK30KKworLyoKKyAqIGFwcGVuZF9jb2x1bW5fZGVmcworICoJCUFwcGVuZCB0aGUg Y29tbWEtc2VwYXJhdGVkIGNvbHVtbiBkZWZpbml0aW9uIGxpc3QgZm9yIGEgdGFibGUuCisgKgor ICogRW1pdHMgZWFjaCBub24tZHJvcHBlZCwgbG9jYWxseS1kZWNsYXJlZCBjb2x1bW4gYXMKKyAq CQluYW1lIHR5cGUgW0NPTExBVEUgeF0gW1NUT1JBR0Ugc10gW0NPTVBSRVNTSU9OIGNdCisgKgkJ W0dFTkVSQVRFRCAuLi4gfCBERUZBVUxUIGVdIFtOT1QgTlVMTF0KKyAqIGZvbGxvd2VkIGJ5IGFu eSBsb2NhbGx5LWRlY2xhcmVkIGlubGluZSBDSEVDSyBjb25zdHJhaW50cy4gIE9wdGlvbmFsCisg KiBjbGF1c2VzIGFyZSBvbWl0dGVkIHdoZW4gdGhlaXIgdmFsdWUgbWF0Y2hlcyB3aGF0IHRoZSBz eXN0ZW0gd291bGQKKyAqIHJlYXBwbHkgb24gcm91bmQtdHJpcCAoZS5nLiB0eXBlLWRlZmF1bHQg Q09MTEFURSwgdHlwZS1kZWZhdWx0IFNUT1JBR0UpLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5k X2NvbHVtbl9kZWZzKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwsIGJvb2wgcHJldHR5LAor CQkJCSAgIGJvb2wgaW5jbHVkZV9jaGVjaywKKwkJCQkgICBib29sIHNjaGVtYV9xdWFsaWZpZWQs CisJCQkJICAgTG9jYWxOb3ROdWxsRW50cnkgKiBubl9lbnRyaWVzKQoreworCVR1cGxlRGVzYwl0 dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCU9pZAkJCWJhc2VfbmFtZXNwYWNlID0g UmVsYXRpb25HZXROYW1lc3BhY2UocmVsKTsKKwlMaXN0CSAgICpkcGNvbnRleHQgPSBOSUw7CisJ Ym9vbAkJZmlyc3QgPSB0cnVlOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCB0dXBkZXNjLT5uYXR0 czsgaSsrKQorCXsKKwkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ID0gVHVwbGVEZXNjQXR0cih0dXBk ZXNjLCBpKTsKKwkJY2hhcgkgICAqdHlwc3RyOworCisJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCkK KwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIENvbHVtbnMgaW5oZXJpdGVkIGZyb20gYSBwYXJl bnQgYXJlIGVtaXR0ZWQgYnkgdGhlIElOSEVSSVRTIGNsYXVzZQorCQkgKiAob25jZSBpbXBsZW1l bnRlZCksIG5vdCB0aGUgY29sdW1uIGxpc3QsIHVubGVzcyB0aGUgY2hpbGQKKwkJICogcmVkZWNs YXJlZCB0aGVtIGxvY2FsbHkgKGF0dGlzbG9jYWw9dHJ1ZSkuCisJCSAqLworCQlpZiAoIWF0dC0+ YXR0aXNsb2NhbCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihidWYsICcsJyk7CisJCWlmIChwcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGJ1ZiwgIlxuICAgICIpOworCQllbHNlIGlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihidWYsICcgJyk7CisJCWZpcnN0ID0gZmFsc2U7CisKKwkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUpKSk7 CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyAnKTsKKworCQl0eXBzdHIgPSBmb3JtYXRf dHlwZV93aXRoX3R5cGVtb2QoYXR0LT5hdHR0eXBpZCwgYXR0LT5hdHR0eXBtb2QpOworCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgdHlwc3RyKTsKKwkJcGZyZWUodHlwc3RyKTsKKworCQkv KiBDT0xMQVRFIGNsYXVzZSwgb25seSBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIHR5cGUncyBkZWZh dWx0LiAqLworCQlpZiAoT2lkSXNWYWxpZChhdHQtPmF0dGNvbGxhdGlvbikgJiYKKwkJCWF0dC0+ YXR0Y29sbGF0aW9uICE9IGdldF90eXBjb2xsYXRpb24oYXR0LT5hdHR0eXBpZCkpCisJCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgIiBDT0xMQVRFICVzIiwKKwkJCQkJCQkgZ2VuZXJhdGVfY29sbGF0 aW9uX25hbWUoYXR0LT5hdHRjb2xsYXRpb24pKTsKKworCQkvKiBTVE9SQUdFIGNsYXVzZSwgb25s eSBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIHR5cGUncyBkZWZhdWx0LiAqLworCQlpZiAoYXR0LT5h dHRzdG9yYWdlICE9IGdldF90eXBzdG9yYWdlKGF0dC0+YXR0dHlwaWQpKQorCQkJYXBwZW5kU3Ry aW5nSW5mbyhidWYsICIgU1RPUkFHRSAlcyIsIHN0b3JhZ2VfbmFtZShhdHQtPmF0dHN0b3JhZ2Up KTsKKworCQkvKiBDT01QUkVTU0lPTiBjbGF1c2UsIG9ubHkgaWYgZXhwbGljaXRseSBzZXQgb24g dGhlIGNvbHVtbi4gKi8KKwkJaWYgKENvbXByZXNzaW9uTWV0aG9kSXNWYWxpZChhdHQtPmF0dGNv bXByZXNzaW9uKSkKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIENPTVBSRVNTSU9OICVzIiwK KwkJCQkJCQkgR2V0Q29tcHJlc3Npb25NZXRob2ROYW1lKGF0dC0+YXR0Y29tcHJlc3Npb24pKTsK KworCQkvKgorCQkgKiBMb29rIHVwIHRoZSBkZWZhdWx0L2dlbmVyYXRlZCBleHByZXNzaW9uIHRl eHQgdXAgZnJvbnQ7IGdlbmVyYXRlZAorCQkgKiBjb2x1bW5zIGhhdmUgYXR0aGFzZGVmPXRydWUg d2l0aCBhbiBlbnRyeSBpbiBwZ19hdHRyZGVmIGp1c3QgbGlrZQorCQkgKiByZWd1bGFyIGRlZmF1 bHRzLgorCQkgKi8KKwkJeworCQkJY2hhcgkgICAqZGVmZXhwciA9IE5VTEw7CisKKwkJCWlmIChh dHQtPmF0dGhhc2RlZikKKwkJCQlkZWZleHByID0gZmluZF9hdHRyZGVmX3RleHQocmVsLCBhdHQt PmF0dG51bSwgJmRwY29udGV4dCk7CisKKwkJCS8qIEdFTkVSQVRFRCAvIElERU5USVRZIC8gREVG QVVMVCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAqLworCQkJaWYgKGF0dC0+YXR0Z2VuZXJhdGVk ID09IEFUVFJJQlVURV9HRU5FUkFURURfU1RPUkVEICYmIGRlZmV4cHIpCisJCQkJYXBwZW5kU3Ry aW5nSW5mbyhidWYsICIgR0VORVJBVEVEIEFMV0FZUyBBUyAoJXMpIFNUT1JFRCIsIGRlZmV4cHIp OworCQkJZWxzZSBpZiAoYXR0LT5hdHRnZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9W SVJUVUFMICYmIGRlZmV4cHIpCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgR0VORVJBVEVE IEFMV0FZUyBBUyAoJXMpIFZJUlRVQUwiLCBkZWZleHByKTsKKwkJCWVsc2UgaWYgKGF0dC0+YXR0 aWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0FMV0FZUyB8fAorCQkJCQkgYXR0LT5hdHRp ZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlfQllfREVGQVVMVCkKKwkJCXsKKwkJCQljb25z dCBjaGFyICppZGtpbmQgPQorCQkJCQkoYXR0LT5hdHRpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURF TlRJVFlfQUxXQVlTKQorCQkJCQk/ICJBTFdBWVMiIDogIkJZIERFRkFVTFQiOworCQkJCU9pZAkJ CXNlcWlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShyZWwsIGF0dC0+YXR0bnVtLCB0cnVlKTsKKwor CQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIEdFTkVSQVRFRCAlcyBBUyBJREVOVElUWSIsIGlk a2luZCk7CisKKwkJCQkvKgorCQkJCSAqIEVtaXQgb25seSB0aGUgc2VxdWVuY2Ugb3B0aW9ucyB0 aGF0IGRpZmZlciBmcm9tIHRoZWlyCisJCQkJICogZGVmYXVsdHMgLSBtaXJyb3JpbmcgcGdfZ2V0 X2RhdGFiYXNlX2RkbCdzIHBhdHRlcm4gb2YKKwkJCQkgKiBvbWl0dGluZyB2YWx1ZXMgdGhhdCB0 aGUgc3lzdGVtIHdvdWxkIHJlYXBwbHkgb24gaXRzIG93bi4KKwkJCQkgKi8KKwkJCQlpZiAoT2lk SXNWYWxpZChzZXFpZCkpCisJCQkJeworCQkJCQlIZWFwVHVwbGUJc2VxVHVwID0gU2VhcmNoU3lz Q2FjaGUxKFNFUVJFTElELAorCQkJCQkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShzZXFpZCkp OworCisJCQkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHNlcVR1cCkpCisJCQkJCXsKKwkJCQkJCUZv cm1fcGdfc2VxdWVuY2Ugc2VxID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXFUdXAp OworCQkJCQkJU3RyaW5nSW5mb0RhdGEgb3B0czsKKwkJCQkJCWJvb2wJCWZpcnN0X29wdCA9IHRy dWU7CisJCQkJCQlpbnQ2NAkJZGVmX21pbiwKKwkJCQkJCQkJCWRlZl9tYXgsCisJCQkJCQkJCQlk ZWZfc3RhcnQ7CisJCQkJCQlpbnQ2NAkJdHlwX21pbiwKKwkJCQkJCQkJCXR5cF9tYXg7CisKKwkJ CQkJCS8qCisJCQkJCQkgKiBQZXItdHlwZSBib3VuZHMgZm9yIHRoZSBzZXF1ZW5jZSdzIHVuZGVy bHlpbmcKKwkJCQkJCSAqIGludGVnZXIgdHlwZS4gIERlZmF1bHRzIHRvIGludDggaWYgdGhlIGNv bHVtbiB0eXBlCisJCQkJCQkgKiBpcyBzb21ldGhpbmcgZWxzZSAoc2hvdWxkbid0IGhhcHBlbiBm b3IgSURFTlRJVFksCisJCQkJCQkgKiBidXQgYmUgZGVmZW5zaXZlKS4KKwkJCQkJCSAqLworCQkJ CQkJc3dpdGNoIChhdHQtPmF0dHR5cGlkKQorCQkJCQkJeworCQkJCQkJCWNhc2UgSU5UMk9JRDoK KwkJCQkJCQkJdHlwX21pbiA9IFBHX0lOVDE2X01JTjsKKwkJCQkJCQkJdHlwX21heCA9IFBHX0lO VDE2X01BWDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSBJTlQ0T0lEOgorCQkJCQkJCQl0 eXBfbWluID0gUEdfSU5UMzJfTUlOOworCQkJCQkJCQl0eXBfbWF4ID0gUEdfSU5UMzJfTUFYOwor CQkJCQkJCQlicmVhazsKKwkJCQkJCQlkZWZhdWx0OgorCQkJCQkJCQl0eXBfbWluID0gUEdfSU5U NjRfTUlOOworCQkJCQkJCQl0eXBfbWF4ID0gUEdfSU5UNjRfTUFYOworCQkJCQkJCQlicmVhazsK KwkJCQkJCX0KKworCQkJCQkJaWYgKHNlcS0+c2VxaW5jcmVtZW50ID4gMCkKKwkJCQkJCXsKKwkJ CQkJCQlkZWZfbWluID0gMTsKKwkJCQkJCQlkZWZfbWF4ID0gdHlwX21heDsKKwkJCQkJCQlkZWZf c3RhcnQgPSBkZWZfbWluOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCWRl Zl9taW4gPSB0eXBfbWluOworCQkJCQkJCWRlZl9tYXggPSAtMTsKKwkJCQkJCQlkZWZfc3RhcnQg PSBkZWZfbWF4OworCQkJCQkJfQorCisJCQkJCQlpbml0U3RyaW5nSW5mbygmb3B0cyk7CisKKwkJ CQkJCS8qCisJCQkJCQkgKiBTRVFVRU5DRSBOQU1FIC0gb21pdCB3aGVuIGl0IG1hdGNoZXMgdGhl IGltcGxpY2l0CisJCQkJCQkgKiAiPHRhYmxlbmFtZT5fPGNvbHVtbm5hbWU+X3NlcSIgcGF0dGVy biBpbiB0aGUgc2FtZQorCQkJCQkJICogc2NoZW1hLCBzaW5jZSBDUkVBVEUgVEFCTEUgd2lsbCBy ZWdlbmVyYXRlIHRoYXQKKwkJCQkJCSAqIGV4YWN0IG5hbWUuICBUaGUgc2VxdWVuY2UgaXMgYW4g SU5URVJOQUwgZGVwZW5kZW5jeQorCQkJCQkJICogb2YgdGhlIGNvbHVtbiwgc28gdGhlIGxvY2sg d2UgaG9sZCBvbiB0aGUgdGFibGUKKwkJCQkJCSAqIGFsc28gcGlucyBpdCwgYnV0IHRoZSBsb29r dXAgaGVscGVyIHN0aWxsIGRlZmVuZHMKKwkJCQkJCSAqIGFnYWluc3QgYSBtaXNzaW5nIHBnX2Ns YXNzIHJvdy4KKwkJCQkJCSAqLworCQkJCQkJeworCQkJCQkJCUhlYXBUdXBsZQlzZXFDbGFzc1R1 cDsKKwkJCQkJCQlGb3JtX3BnX2NsYXNzIHNlcUNsYXNzOworCQkJCQkJCWNoYXIJCWF1dG9uYW1l W05BTUVEQVRBTEVOXTsKKworCQkJCQkJCXNlcUNsYXNzVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFJF TE9JRCwKKwkJCQkJCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKHNlcWlkKSk7CisJCQkJCQkJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcUNsYXNzVHVwKSkKKwkJCQkJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCQkJ CQkJCSBlcnJtc2coImlkZW50aXR5IHNlcXVlbmNlIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0 IiwKKwkJCQkJCQkJCQkJCXNlcWlkKSwKKwkJCQkJCQkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2 ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVkLiIpKSk7CisJCQkJCQkJc2VxQ2xhc3MgPSAoRm9y bV9wZ19jbGFzcykgR0VUU1RSVUNUKHNlcUNsYXNzVHVwKTsKKworCQkJCQkJCXNucHJpbnRmKGF1 dG9uYW1lLCBzaXplb2YoYXV0b25hbWUpLCAiJXNfJXNfc2VxIiwKKwkJCQkJCQkJCSBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJIE5hbWVTdHIoYXR0LT5hdHRuYW1lKSk7 CisJCQkJCQkJaWYgKHNlcUNsYXNzLT5yZWxuYW1lc3BhY2UgIT0gUmVsYXRpb25HZXROYW1lc3Bh Y2UocmVsKSB8fAorCQkJCQkJCQlzdHJjbXAoTmFtZVN0cihzZXFDbGFzcy0+cmVsbmFtZSksIGF1 dG9uYW1lKSAhPSAwKQorCQkJCQkJCXsKKwkJCQkJCQkJY2hhcgkgICAqc2VxUXVhbCA9CisJCQkJ CQkJCQlsb29rdXBfcmVsbmFtZV9mb3JfZW1pdChzZXFpZCwKKwkJCQkJCQkJCQkJCQkJCXNjaGVt YV9xdWFsaWZpZWQsCisJCQkJCQkJCQkJCQkJCQliYXNlX25hbWVzcGFjZSk7CisKKwkJCQkJCQkJ YXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVzU0VRVUVOQ0UgTkFNRSAlcyIsCisJCQkJCQkJCQkJ CQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcVF1YWwpOworCQkJCQkJCQlmaXJzdF9vcHQgPSBm YWxzZTsKKwkJCQkJCQkJcGZyZWUoc2VxUXVhbCk7CisJCQkJCQkJfQorCQkJCQkJCVJlbGVhc2VT eXNDYWNoZShzZXFDbGFzc1R1cCk7CisJCQkJCQl9CisKKwkJCQkJCWlmIChzZXEtPnNlcXN0YXJ0 ICE9IGRlZl9zdGFydCkKKwkJCQkJCXsKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAi JXNTVEFSVCBXSVRIICIgSU5UNjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIg OiAiICIsIHNlcS0+c2Vxc3RhcnQpOworCQkJCQkJCWZpcnN0X29wdCA9IGZhbHNlOworCQkJCQkJ fQorCQkJCQkJaWYgKHNlcS0+c2VxaW5jcmVtZW50ICE9IDEpCisJCQkJCQl7CisJCQkJCQkJYXBw ZW5kU3RyaW5nSW5mbygmb3B0cywgIiVzSU5DUkVNRU5UIEJZICIgSU5UNjRfRk9STUFULAorCQkJ CQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxaW5jcmVtZW50KTsKKwkJCQkJ CQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNlcW1pbiAhPSBk ZWZfbWluKQorCQkJCQkJeworCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc01JTlZB TFVFICIgSU5UNjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNl cS0+c2VxbWluKTsKKwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWlm IChzZXEtPnNlcW1heCAhPSBkZWZfbWF4KQorCQkJCQkJeworCQkJCQkJCWFwcGVuZFN0cmluZ0lu Zm8oJm9wdHMsICIlc01BWFZBTFVFICIgSU5UNjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rf b3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxbWF4KTsKKwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsK KwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNlcWNhY2hlICE9IDEpCisJCQkJCQl7CisJCQkJCQkJ YXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVzQ0FDSEUgIiBJTlQ2NF9GT1JNQVQsCisJCQkJCQkJ CQkJCSBmaXJzdF9vcHQgPyAiIiA6ICIgIiwgc2VxLT5zZXFjYWNoZSk7CisJCQkJCQkJZmlyc3Rf b3B0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCQlpZiAoc2VxLT5zZXFjeWNsZSkKKwkJCQkJCXsK KwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAiJXNDWUNMRSIsIGZpcnN0X29wdCA/ICIi IDogIiAiKTsKKwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCX0KKworCQkJCQkJaWYg KCFmaXJzdF9vcHQpCisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgKCVzKSIsIG9wdHMu ZGF0YSk7CisKKwkJCQkJCXBmcmVlKG9wdHMuZGF0YSk7CisJCQkJCQlSZWxlYXNlU3lzQ2FjaGUo c2VxVHVwKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRlZmV4cHIpCisJCQkJ YXBwZW5kU3RyaW5nSW5mbyhidWYsICIgREVGQVVMVCAlcyIsIGRlZmV4cHIpOworCisJCQlpZiAo ZGVmZXhwcikKKwkJCQlwZnJlZShkZWZleHByKTsKKwkJfQorCisJCWlmIChhdHQtPmF0dG5vdG51 bGwpCisJCXsKKwkJCUxvY2FsTm90TnVsbEVudHJ5ICpubiA9ICZubl9lbnRyaWVzW2F0dC0+YXR0 bnVtXTsKKworCQkJaWYgKG5uLT5uYW1lICE9IE5VTEwgJiYgIW5uLT5pc19hdXRvKQorCQkJCWFw cGVuZFN0cmluZ0luZm8oYnVmLCAiIENPTlNUUkFJTlQgJXMgTk9UIE5VTEwiLAorCQkJCQkJCQkg cXVvdGVfaWRlbnRpZmllcihubi0+bmFtZSkpOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoYnVmLCAiIE5PVCBOVUxMIik7CisJCQlpZiAobm4tPm5hbWUgIT0gTlVMTCAmJiBu bi0+bm9faW5oZXJpdCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBOTyBJTkhF UklUIik7CisJCX0KKwl9CisKKwkvKgorCSAqIFRhYmxlLWxldmVsIENIRUNLIGNvbnN0cmFpbnRz IC0gZW1pdHRlZCBpbmxpbmUgaW4gdGhlIENSRUFURSBUQUJMRSBib2R5CisJICogc28gdGhleSBh cHBlYXIgYWxvbmdzaWRlIHRoZSBjb2x1bW5zICh0aGUgcGdfZHVtcCBzaGFwZSkuICBUaGUKKwkg KiBjb25zdHJhaW50IGxvb3AgbGF0ZXIgaW4gcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbCBza2lw cyBDSEVDSworCSAqIGNvbnN0cmFpbnRzIHRvIGF2b2lkIGRvdWJsZS1lbWlzc2lvbi4KKwkgKi8K KwlpZiAoaW5jbHVkZV9jaGVjaykKKwkJYXBwZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50cyhi dWYsIHJlbCwgcHJldHR5LCAmZmlyc3QpOworfQorCisvKgorICogYXBwZW5kX3R5cGVkX2NvbHVt bl9vdmVycmlkZXMKKyAqCQlGb3IgYSB0eXBlZCB0YWJsZSAoQ1JFQVRFIFRBQkxFIC4uLiBPRiB0 eXBlX25hbWUpLCBhcHBlbmQgdGhlCisgKgkJb3B0aW9uYWwgIihjb2wgV0lUSCBPUFRJT05TIC4u LiwgLi4uKSIgbGlzdCBjYXJyeWluZyBsb2NhbGx5CisgKgkJYXBwbGllZCBwZXItY29sdW1uIG92 ZXJyaWRlcyAtIERFRkFVTFQsIE5PVCBOVUxMLCBhbmQgYW55IGxvY2FsbHkKKyAqCQlkZWNsYXJl ZCBDSEVDSyBjb25zdHJhaW50cy4KKyAqCisgKiBDb2x1bW5zIHdob3NlIHR5cGUgaXMgZnVsbHkg ZGljdGF0ZWQgYnkgcmVsb2Z0eXBlIGVtaXQgbm90aGluZy4gIFRoZQorICogcGFyZW50aGVzaXNl ZCBsaXN0IGlzIHN1cHByZXNzZWQgZW50aXJlbHkgd2hlbiBubyBjb2x1bW4gbmVlZHMgYW4KKyAq IG92ZXJyaWRlIGFuZCB0aGVyZSBhcmUgbm8gbG9jYWxseS1kZWNsYXJlZCBDSEVDSyBjb25zdHJh aW50cywgbWF0Y2hpbmcKKyAqIHRoZSBjYW5vbmljYWwgIkNSRUFURSBUQUJMRSB4IE9GIHQ7IiBz aGFwZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF90eXBlZF9jb2x1bW5fb3ZlcnJpZGVzKFN0 cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwsIGJvb2wgcHJldHR5LAorCQkJCQkJCSAgYm9vbCBp bmNsdWRlX2NoZWNrLAorCQkJCQkJCSAgTG9jYWxOb3ROdWxsRW50cnkgKiBubl9lbnRyaWVzKQor eworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCUxpc3QJICAg KmRwY29udGV4dCA9IE5JTDsKKwlTdHJpbmdJbmZvRGF0YSBpbm5lcjsKKwlib29sCQlmaXJzdCA9 IHRydWU7CisKKwlpbml0U3RyaW5nSW5mbygmaW5uZXIpOworCisJZm9yIChpbnQgaSA9IDA7IGkg PCB0dXBkZXNjLT5uYXR0czsgaSsrKQorCXsKKwkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ID0gVHVw bGVEZXNjQXR0cih0dXBkZXNjLCBpKTsKKwkJY2hhcgkgICAqZGVmZXhwciA9IE5VTEw7CisJCWJv b2wJCWhhc19kZWZhdWx0OworCQlib29sCQloYXNfbm90bnVsbDsKKworCQlpZiAoYXR0LT5hdHRp c2Ryb3BwZWQpCisJCQljb250aW51ZTsKKworCQlpZiAoYXR0LT5hdHRoYXNkZWYpCisJCQlkZWZl eHByID0gZmluZF9hdHRyZGVmX3RleHQocmVsLCBhdHQtPmF0dG51bSwgJmRwY29udGV4dCk7CisK KwkJaGFzX2RlZmF1bHQgPSAoZGVmZXhwciAhPSBOVUxMKTsKKwkJaGFzX25vdG51bGwgPSBhdHQt PmF0dG5vdG51bGw7CisKKwkJaWYgKCFoYXNfZGVmYXVsdCAmJiAhaGFzX25vdG51bGwpCisJCXsK KwkJCWlmIChkZWZleHByKQorCQkJCXBmcmVlKGRlZmV4cHIpOworCQkJY29udGludWU7CisJCX0K KworCQlpZiAoIWZpcnN0KQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmlubmVyLCAnLCcpOwor CQlpZiAocHJldHR5KQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmaW5uZXIsICJcbiAgICAi KTsKKwkJZWxzZSBpZiAoIWZpcnN0KQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmlubmVyLCAn ICcpOworCQlmaXJzdCA9IGZhbHNlOworCisJCWFwcGVuZFN0cmluZ0luZm8oJmlubmVyLCAiJXMg V0lUSCBPUFRJT05TIiwKKwkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYXR0LT5hdHRu YW1lKSkpOworCQlpZiAoaGFzX2RlZmF1bHQpCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZpbm5lciwg IiBERUZBVUxUICVzIiwgZGVmZXhwcik7CisJCWlmIChoYXNfbm90bnVsbCkKKwkJeworCQkJTG9j YWxOb3ROdWxsRW50cnkgKm5uID0gJm5uX2VudHJpZXNbYXR0LT5hdHRudW1dOworCisJCQlpZiAo bm4tPm5hbWUgIT0gTlVMTCAmJiAhbm4tPmlzX2F1dG8pCisJCQkJYXBwZW5kU3RyaW5nSW5mbygm aW5uZXIsICIgQ09OU1RSQUlOVCAlcyBOT1QgTlVMTCIsCisJCQkJCQkJCSBxdW90ZV9pZGVudGlm aWVyKG5uLT5uYW1lKSk7CisJCQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmaW5u ZXIsICIgTk9UIE5VTEwiKTsKKwkJCWlmIChubi0+bmFtZSAhPSBOVUxMICYmIG5uLT5ub19pbmhl cml0KQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmlubmVyLCAiIE5PIElOSEVSSVQiKTsK KwkJfQorCisJCWlmIChkZWZleHByKQorCQkJcGZyZWUoZGVmZXhwcik7CisJfQorCisJLyoKKwkg KiBMb2NhbGx5LWRlY2xhcmVkIENIRUNLIGNvbnN0cmFpbnRzIG9uIGEgdHlwZWQgdGFibGUgYmVs b25nIGluIHRoZQorCSAqIGNvbHVtbi1saXN0IHBhcmVudGhlc2VzLCBzYW1lIGFzIGZvciBhbiB1 bnR5cGVkIHRhYmxlLiAgVGhlIG91dC1vZi1saW5lCisJICogY29uc3RyYWludCBsb29wIGxhdGVy IHN0aWxsIHNraXBzIENIRUNLcy4KKwkgKi8KKwlpZiAoaW5jbHVkZV9jaGVjaykKKwkJYXBwZW5k X2lubGluZV9jaGVja19jb25zdHJhaW50cygmaW5uZXIsIHJlbCwgcHJldHR5LCAmZmlyc3QpOwor CisJaWYgKCFmaXJzdCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiICgiKTsK KwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIGlubmVyLmRhdGEpOworCQlpZiAocHJldHR5 KQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJcbikiKTsKKwkJZWxzZQorCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKScpOworCX0KKwlwZnJlZShpbm5lci5kYXRhKTsKK30K KworLyoKKyAqIGFwcGVuZF9zdG10IC8gYXBwZW5kX3N0cmlwcGVkX3N0bXQKKyAqCQlQdXNoIGN0 eC0+YnVmIG9udG8gY3R4LT5zdGF0ZW1lbnRzLgorICoKKyAqIGFwcGVuZF9zdG10IGlzIHVzZWQg Zm9yIGVtaXNzaW9ucyB3aGVyZSB0aGUgdGFibGUgcmVmZXJlbmNlIGlzIGJ1aWx0CisgKiBmcm9t IGN0eC0+cXVhbG5hbWUgKGFscmVhZHkgcGFydGlhbC1xdWFsaWZpZWQgcGVyIHNjaGVtYV9xdWFs aWZpZWQpLgorICogYXBwZW5kX3N0cmlwcGVkX3N0bXQgaXMgdXNlZCBhZnRlciBpbnZva2luZyBh bHdheXMtcXVhbGlmaWVkIHJ1bGV1dGlscworICogaGVscGVycyAocGdfZ2V0X2NvbnN0cmFpbnRk ZWZfY29tbWFuZCwgcGdfZ2V0X2luZGV4ZGVmX3N0cmluZywKKyAqIHBnX2dldF9ydWxlZGVmLCBw Z19nZXRfc3RhdGlzdGljc29iamRlZl9zdHJpbmcpIC0gd2hlbgorICogc2NoZW1hX3F1YWxpZmll ZCBpcyBmYWxzZSwgdGhlIGJhc2Utc2NoZW1hIHByZWZpeCBpcyBzdHJpcHBlZCBmcm9tCisgKiB0 aGVpciBvdXRwdXQgc28gdGhlIGVtaXR0ZWQgRERMIGlzIHJlcGxheS1yZWxvY2F0YWJsZS4KKyAq Lworc3RhdGljIHZvaWQKK2FwcGVuZF9zdG10KFRhYmxlRGRsQ29udGV4dCAqIGN0eCkKK3sKKwlj dHgtPnN0YXRlbWVudHMgPSBsYXBwZW5kKGN0eC0+c3RhdGVtZW50cywgcHN0cmR1cChjdHgtPmJ1 Zi5kYXRhKSk7Cit9CisKK3N0YXRpYyB2b2lkCithcHBlbmRfc3RyaXBwZWRfc3RtdChUYWJsZURk bENvbnRleHQgKiBjdHgpCit7CisJaWYgKGN0eC0+c2NoZW1hX3ByZWZpeCAhPSBOVUxMKQorCQlj dHgtPnN0YXRlbWVudHMgPSBsYXBwZW5kKGN0eC0+c3RhdGVtZW50cywKKwkJCQkJCQkJICBzdHJp cF9zY2hlbWFfcHJlZml4KGN0eC0+YnVmLmRhdGEsCisJCQkJCQkJCQkJCQkJICBjdHgtPnNjaGVt YV9wcmVmaXgpKTsKKwllbHNlCisJCWN0eC0+c3RhdGVtZW50cyA9IGxhcHBlbmQoY3R4LT5zdGF0 ZW1lbnRzLCBwc3RyZHVwKGN0eC0+YnVmLmRhdGEpKTsKK30KKworLyoKKyAqIGVtaXRfY3JlYXRl X3RhYmxlX3N0bXQKKyAqCQlCdWlsZCB0aGUgbGVhZGluZyBDUkVBVEUgVEFCTEUgc3RhdGVtZW50 LCBpbmNsdWRpbmcgcGVyc2lzdGVuY2UKKyAqCQkoVEVNUE9SQVJZIC8gVU5MT0dHRUQpLCBib2R5 IChjb2x1bW4gbGlzdCAvIE9GIHR5cGVfbmFtZSAvCisgKgkJUEFSVElUSU9OIE9GIHBhcmVudCks IElOSEVSSVRTLCBQQVJUSVRJT04gQlksIFVTSU5HIG1ldGhvZCwKKyAqCQlXSVRIIChyZWxvcHRp b25zKSwgVEFCTEVTUEFDRSwgYW5kIE9OIENPTU1JVC4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRf Y3JlYXRlX3RhYmxlX3N0bXQoVGFibGVEZGxDb250ZXh0ICogY3R4KQoreworCVJlbGF0aW9uCXJl bCA9IGN0eC0+cmVsOworCWNoYXIJCXJlbHBlcnNpc3RlbmNlID0gcmVsLT5yZF9yZWwtPnJlbHBl cnNpc3RlbmNlOworCWNoYXIJCXJlbGtpbmQgPSByZWwtPnJkX3JlbC0+cmVsa2luZDsKKwlib29s CQlpc190eXBlZCA9IE9pZElzVmFsaWQocmVsLT5yZF9yZWwtPnJlbG9mdHlwZSk7CisJSGVhcFR1 cGxlCWNsYXNzdHVwOworCURhdHVtCQlyZWxvcHREYXR1bTsKKwlib29sCQlyZWxvcHRJc251bGw7 CisKKwljbGFzc3R1cCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0o Y3R4LT5yZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjbGFzc3R1cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAldSIsIGN0eC0+cmVsaWQp OworCisJcmVsb3B0RGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVMT0lELCBjbGFzc3R1cCwKKwkJ CQkJCQkJICBBbnVtX3BnX2NsYXNzX3JlbG9wdGlvbnMsICZyZWxvcHRJc251bGwpOworCisJcmVz ZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5i dWYsICJDUkVBVEUgIik7CisJaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RF TVApCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiVEVNUE9SQVJZICIpOwor CWVsc2UgaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEKQorCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIlVOTE9HR0VEICIpOworCWFwcGVuZFN0 cmluZ0luZm8oJmN0eC0+YnVmLCAiVEFCTEUgJXMiLCBjdHgtPnF1YWxuYW1lKTsKKworCWlmIChy ZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb24pCisJeworCQlPaWQJCQlwYXJlbnRPaWQgPSBnZXRf cGFydGl0aW9uX3BhcmVudChjdHgtPnJlbGlkLCB0cnVlKTsKKwkJY2hhcgkgICAqcGFyZW50UXVh bCA9IGxvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0KHBhcmVudE9pZCwKKwkJCQkJCQkJCQkJCQkJIGN0 eC0+c2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCQkJCQkJIGN0eC0+YmFzZV9uYW1lc3BhY2Up OworCQljaGFyCSAgICpwYXJlbnRSZWxuYW1lID0gZ2V0X3JlbF9uYW1lKHBhcmVudE9pZCk7CisJ CURhdHVtCQlib3VuZERhdHVtOworCQlib29sCQlib3VuZElzbnVsbDsKKwkJY2hhcgkgICAqZm9y VmFsdWVzID0gTlVMTDsKKwkJY2hhcgkgICAqYm91bmRTdHIgPSBOVUxMOworCisJCWlmIChwYXJl bnRSZWxuYW1lID09IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJD T0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCQkgZXJybXNnKCJwYXJ0aXRpb24gcGFyZW50IHdp dGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJCQlwYXJlbnRPaWQpLAorCQkJCQkgZXJy ZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVkLiIpKSk7CisKKwkJ Ym91bmREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIGNsYXNzdHVwLAorCQkJCQkJCQkJ IEFudW1fcGdfY2xhc3NfcmVscGFydGJvdW5kLCAmYm91bmRJc251bGwpOworCQlpZiAoIWJvdW5k SXNudWxsKQorCQl7CisJCQlOb2RlCSAgICpib3VuZE5vZGU7CisJCQlMaXN0CSAgICpkcGNvbnRl eHQ7CisKKwkJCWJvdW5kU3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhib3VuZERhdHVtKTsKKwkJ CWJvdW5kTm9kZSA9IHN0cmluZ1RvTm9kZShib3VuZFN0cik7CisJCQlkcGNvbnRleHQgPSBkZXBh cnNlX2NvbnRleHRfZm9yKHBhcmVudFJlbG5hbWUsIHBhcmVudE9pZCk7CisJCQlmb3JWYWx1ZXMg PSBkZXBhcnNlX2V4cHJlc3Npb24oYm91bmROb2RlLCBkcGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7 CisJCX0KKworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiBQQVJUSVRJT04gT0YgJXMg JXMiLAorCQkJCQkJIHBhcmVudFF1YWwsIGZvclZhbHVlcyA/IGZvclZhbHVlcyA6ICJERUZBVUxU Iik7CisJCWlmIChmb3JWYWx1ZXMpCisJCQlwZnJlZShmb3JWYWx1ZXMpOworCQlpZiAoYm91bmRT dHIpCisJCQlwZnJlZShib3VuZFN0cik7CisJCXBmcmVlKHBhcmVudFF1YWwpOworCQlwZnJlZShw YXJlbnRSZWxuYW1lKTsKKwl9CisJZWxzZSBpZiAoaXNfdHlwZWQpCisJeworCQljaGFyCSAgICp0 eXBuYW1lID0gZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKHJlbC0+cmRfcmVsLT5yZWxvZnR5cGUp OworCisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiIE9GICVzIiwgdHlwbmFtZSk7CisJ CXBmcmVlKHR5cG5hbWUpOworCisJCWFwcGVuZF90eXBlZF9jb2x1bW5fb3ZlcnJpZGVzKCZjdHgt PmJ1ZiwgcmVsLCBjdHgtPnByZXR0eSwKKwkJCQkJCQkJCSAgaXNfa2luZF9pbmNsdWRlZChjdHgs IFRBQkxFX0RETF9LSU5EX0NIRUNLKSwKKwkJCQkJCQkJCSAgY3R4LT5ubl9lbnRyaWVzKTsKKwl9 CisJZWxzZQorCXsKKwkJTGlzdAkgICAqcGFyZW50czsKKwkJTGlzdENlbGwgICAqbGM7CisJCWJv b2wJCWZpcnN0OworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiICgiKTsK KworCQlhcHBlbmRfY29sdW1uX2RlZnMoJmN0eC0+YnVmLCByZWwsIGN0eC0+cHJldHR5LAorCQkJ CQkJICAgaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX0NIRUNLKSwKKwkJCQkJ CSAgIGN0eC0+c2NoZW1hX3F1YWxpZmllZCwgY3R4LT5ubl9lbnRyaWVzKTsKKworCQlpZiAoY3R4 LT5wcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIlxuKSIpOwor CQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5idWYsICcpJyk7CisKKwkJcGFy ZW50cyA9IGZpbmRfaW5oZXJpdGFuY2VfcGFyZW50cyhjdHgtPnJlbGlkLCBOb0xvY2spOworCQlp ZiAocGFyZW50cyAhPSBOSUwpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+ YnVmLCAiIElOSEVSSVRTICgiKTsKKwkJCWZpcnN0ID0gdHJ1ZTsKKwkJCWZvcmVhY2gobGMsIHBh cmVudHMpCisJCQl7CisJCQkJT2lkCQkJcG9pZCA9IGxmaXJzdF9vaWQobGMpOworCQkJCWNoYXIJ ICAgKnBuYW1lID0gbG9va3VwX3JlbG5hbWVfZm9yX2VtaXQocG9pZCwKKwkJCQkJCQkJCQkJCQkJ CWN0eC0+c2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCQkJCQkJCWN0eC0+YmFzZV9uYW1lc3Bh Y2UpOworCisJCQkJaWYgKCFmaXJzdCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4 LT5idWYsICIsICIpOworCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmY3R4LT5idWYsIHBuYW1lKTsKKwkJCQlwZnJlZShwbmFtZSk7CisJCQl9CisJCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5idWYsICcpJyk7CisJCQlsaXN0X2ZyZWUocGFyZW50cyk7 CisJCX0KKwl9CisKKwlpZiAocmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQor CXsKKwkJRGF0dW0JCXBhcnRrZXlEYXR1bTsKKwkJY2hhcgkgICAqcGFydGtleTsKKworCQlwYXJ0 a2V5RGF0dW0gPSBPaWRGdW5jdGlvbkNhbGwxKEZfUEdfR0VUX1BBUlRLRVlERUYsCisJCQkJCQkJ CQkJT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSk7CisJCXBhcnRrZXkgPSBUZXh0RGF0dW1H ZXRDU3RyaW5nKHBhcnRrZXlEYXR1bSk7CisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAi IFBBUlRJVElPTiBCWSAlcyIsIHBhcnRrZXkpOworCQlwZnJlZShwYXJ0a2V5KTsKKwl9CisKKwlp ZiAoT2lkSXNWYWxpZChyZWwtPnJkX3JlbC0+cmVsYW0pICYmCisJCXJlbC0+cmRfcmVsLT5yZWxh bSAhPSBIRUFQX1RBQkxFX0FNX09JRCkKKwl7CisJCWNoYXIJICAgKmFtbmFtZSA9IGdldF9hbV9u YW1lKHJlbC0+cmRfcmVsLT5yZWxhbSk7CisKKwkJaWYgKGFtbmFtZSAhPSBOVUxMKQorCQl7CisJ CQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiBVU0lORyAlcyIsCisJCQkJCQkJIHF1b3Rl X2lkZW50aWZpZXIoYW1uYW1lKSk7CisJCQlwZnJlZShhbW5hbWUpOworCQl9CisJfQorCisJaWYg KCFyZWxvcHRJc251bGwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1Ziwg IiBXSVRIICgiKTsKKwkJZ2V0X3JlbG9wdGlvbnMoJmN0eC0+YnVmLCByZWxvcHREYXR1bSk7CisJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjdHgtPmJ1ZiwgJyknKTsKKwl9CisKKwlSZWxlYXNlU3lz Q2FjaGUoY2xhc3N0dXApOworCisJaWYgKCFjdHgtPm5vX3RhYmxlc3BhY2UgJiYgT2lkSXNWYWxp ZChyZWwtPnJkX3JlbC0+cmVsdGFibGVzcGFjZSkpCisJeworCQljaGFyCSAgICp0c25hbWUgPSBn ZXRfdGFibGVzcGFjZV9uYW1lKHJlbC0+cmRfcmVsLT5yZWx0YWJsZXNwYWNlKTsKKworCQlpZiAo dHNuYW1lICE9IE5VTEwpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiIFRB QkxFU1BBQ0UgJXMiLAorCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHRzbmFtZSkpOworCQkJcGZy ZWUodHNuYW1lKTsKKwkJfQorCX0KKworCWlmIChyZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNU RU5DRV9URU1QKQorCXsKKwkJT25Db21taXRBY3Rpb24gb2MgPSBnZXRfb25fY29tbWl0X2FjdGlv bihjdHgtPnJlbGlkKTsKKworCQlpZiAob2MgPT0gT05DT01NSVRfREVMRVRFX1JPV1MpCisJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIiBPTiBDT01NSVQgREVMRVRFIFJPV1Mi KTsKKwkJZWxzZSBpZiAob2MgPT0gT05DT01NSVRfRFJPUCkKKwkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmN0eC0+YnVmLCAiIE9OIENPTU1JVCBEUk9QIik7CisJfQorCisJYXBwZW5kU3RyaW5n SW5mb0NoYXIoJmN0eC0+YnVmLCAnOycpOworCWFwcGVuZF9zdG10KGN0eCk7Cit9CisKKy8qCisg KiBlbWl0X293bmVyX3N0bXQKKyAqCQlBTFRFUiBUQUJMRSBxdWFsbmFtZSBPV05FUiBUTyByb2xl LgorICovCitzdGF0aWMgdm9pZAorZW1pdF9vd25lcl9zdG10KFRhYmxlRGRsQ29udGV4dCAqIGN0 eCkKK3sKKwljaGFyCSAgICpvd25lcjsKKworCWlmIChjdHgtPm5vX293bmVyKQorCQlyZXR1cm47 CisKKwlvd25lciA9IEdldFVzZXJOYW1lRnJvbUlkKGN0eC0+cmVsLT5yZF9yZWwtPnJlbG93bmVy LCBmYWxzZSk7CisJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJYXBwZW5kU3RyaW5nSW5m bygmY3R4LT5idWYsICJBTFRFUiBUQUJMRSAlcyBPV05FUiBUTyAlczsiLAorCQkJCQkgY3R4LT5x dWFsbmFtZSwgcXVvdGVfaWRlbnRpZmllcihvd25lcikpOworCWFwcGVuZF9zdG10KGN0eCk7CisJ cGZyZWUob3duZXIpOworfQorCisvKgorICogZW1pdF9jaGlsZF9kZWZhdWx0X292ZXJyaWRlcwor ICoJCUFMVEVSIFRBQkxFIHF1YWxuYW1lIEFMVEVSIENPTFVNTiBjb2wgU0VUIERFRkFVTFQgZXhw ciAtIG9uZSBwZXIKKyAqCQlpbmhlcml0ZWQgKGF0dGlzbG9jYWw9ZmFsc2UpIG5vbi1nZW5lcmF0 ZWQgY29sdW1uIGNhcnJ5aW5nIGEKKyAqCQlsb2NhbGx5LXNldCBkZWZhdWx0LiAgR2VuZXJhdGVk IGNvbHVtbnMgYXJlIHNraXBwZWQ6IHRoZWlyCisgKgkJZXhwcmVzc2lvbiBpcyBpbmhlcml0ZWQg YXV0b21hdGljYWxseSBhbmQgU0VUIERFRkFVTFQgd291bGQKKyAqCQlmYWlsIGF0IHJlcGxheS4K KyAqLworc3RhdGljIHZvaWQKK2VtaXRfY2hpbGRfZGVmYXVsdF9vdmVycmlkZXMoVGFibGVEZGxD b250ZXh0ICogY3R4KQoreworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihj dHgtPnJlbCk7CisJTGlzdAkgICAqZHBjb250ZXh0ID0gTklMOworCisJZm9yIChpbnQgaSA9IDA7 IGkgPCB0dXBkZXNjLT5uYXR0czsgaSsrKQorCXsKKwkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ID0g VHVwbGVEZXNjQXR0cih0dXBkZXNjLCBpKTsKKwkJY2hhcgkgICAqZGVmc3RyOworCisJCWlmIChh dHQtPmF0dGlzZHJvcHBlZCB8fCBhdHQtPmF0dGlzbG9jYWwgfHwgIWF0dC0+YXR0aGFzZGVmKQor CQkJY29udGludWU7CisJCWlmIChhdHQtPmF0dGdlbmVyYXRlZCAhPSAnXDAnKQorCQkJY29udGlu dWU7CisKKwkJZGVmc3RyID0gZmluZF9hdHRyZGVmX3RleHQoY3R4LT5yZWwsIGF0dC0+YXR0bnVt LCAmZHBjb250ZXh0KTsKKwkJaWYgKGRlZnN0ciA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJ cmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVm LAorCQkJCQkJICJBTFRFUiBUQUJMRSAlcyBBTFRFUiBDT0xVTU4gJXMgU0VUIERFRkFVTFQgJXM7 IiwKKwkJCQkJCSBjdHgtPnF1YWxuYW1lLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0 cihhdHQtPmF0dG5hbWUpKSwKKwkJCQkJCSBkZWZzdHIpOworCQlhcHBlbmRfc3RtdChjdHgpOwor CQlwZnJlZShkZWZzdHIpOworCX0KK30KKworLyoKKyAqIGVtaXRfYXR0b3B0aW9ucworICoJCUFM VEVSIFRBQkxFIHF1YWxuYW1lIEFMVEVSIENPTFVNTiBjb2wgU0VUICguLi4pIC0gb25lIHBlciBj b2x1bW4KKyAqCQl3aXRoIG5vbi1udWxsIHBnX2F0dHJpYnV0ZS5hdHRvcHRpb25zLiAgVGhlIGlu bGluZSBmb3JtIG9mIHRoZXNlCisgKgkJb3B0aW9ucyBpc24ndCBhdmFpbGFibGUgaW4gQ1JFQVRF IFRBQkxFLCBzbyB0aGV5IGNvbWUgb3V0IGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X2F0 dG9wdGlvbnMoVGFibGVEZGxDb250ZXh0ICogY3R4KQoreworCVR1cGxlRGVzYwl0dXBkZXNjID0g UmVsYXRpb25HZXREZXNjcihjdHgtPnJlbCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHR1cGRl c2MtPm5hdHRzOyBpKyspCisJeworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NB dHRyKHR1cGRlc2MsIGkpOworCQlIZWFwVHVwbGUJYXR0VHVwOworCQlEYXR1bQkJb3B0RGF0dW07 CisJCWJvb2wJCW9wdElzbnVsbDsKKworCQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQpCisJCQljb250 aW51ZTsKKworCQlhdHRUdXAgPSBTZWFyY2hTeXNDYWNoZTIoQVRUTlVNLAorCQkJCQkJCQkgT2Jq ZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSwKKwkJCQkJCQkJIEludDE2R2V0RGF0dW0oYXR0LT5h dHRudW0pKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dFR1cCkpCisJCQljb250aW51ZTsK KworCQlvcHREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihBVFROVU0sIGF0dFR1cCwKKwkJCQkJCQkJ ICAgQW51bV9wZ19hdHRyaWJ1dGVfYXR0b3B0aW9ucywgJm9wdElzbnVsbCk7CisJCWlmICghb3B0 SXNudWxsKQorCQl7CisJCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJCWFwcGVuZFN0 cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCSAiQUxURVIgVEFCTEUgJXMgQUxURVIgQ09MVU1O ICVzIFNFVCAoIiwKKwkJCQkJCQkgY3R4LT5xdWFsbmFtZSwKKwkJCQkJCQkgcXVvdGVfaWRlbnRp ZmllcihOYW1lU3RyKGF0dC0+YXR0bmFtZSkpKTsKKwkJCWdldF9yZWxvcHRpb25zKCZjdHgtPmJ1 Ziwgb3B0RGF0dW0pOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICIpOyIp OworCQkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJfQorCQlSZWxlYXNlU3lzQ2FjaGUoYXR0VHVwKTsK Kwl9Cit9CisKKy8qCisgKiBlbWl0X2luZGV4ZXMKKyAqCQlDUkVBVEUgSU5ERVggcGVyIG5vbi1j b25zdHJhaW50LWJhY2tlZCBpbmRleCBvbiB0aGUgcmVsYXRpb24uCisgKgkJSW5kZXhlcyB0aGF0 IGJhY2sgUEsgLyBVTklRVUUgLyBFWENMVURFIGNvbnN0cmFpbnRzIGFyZSBlbWl0dGVkCisgKgkJ b3V0LW9mLWxpbmUgYnkgZW1pdF9sb2NhbF9jb25zdHJhaW50cyAodGhlIEFMVEVSIFRBQkxFIC4u LiBBREQKKyAqCQlDT05TVFJBSU5UIHN0YXRlbWVudCBjcmVhdGVzIHRoZSBpbmRleCBpbXBsaWNp dGx5KS4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfaW5kZXhlcyhUYWJsZURkbENvbnRleHQgKiBj dHgpCit7CisJTGlzdAkgICAqaW5kZXhvaWRzOworCUxpc3RDZWxsICAgKmxjOworCisJaWYgKCFp c19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfSU5ERVhFUykpCisJCXJldHVybjsK KworCWluZGV4b2lkcyA9IFJlbGF0aW9uR2V0SW5kZXhMaXN0KGN0eC0+cmVsKTsKKwlmb3JlYWNo KGxjLCBpbmRleG9pZHMpCisJeworCQlPaWQJCQlpZHhvaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJ Y2hhcgkgICAqaWR4ZGVmOworCisJCWlmIChPaWRJc1ZhbGlkKGdldF9pbmRleF9jb25zdHJhaW50 KGlkeG9pZCkpKQorCQkJY29udGludWU7CisKKwkJaWR4ZGVmID0gcGdfZ2V0X2luZGV4ZGVmX3N0 cmluZyhpZHhvaWQpOworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3Ry aW5nSW5mbygmY3R4LT5idWYsICIlczsiLCBpZHhkZWYpOworCQlhcHBlbmRfc3RyaXBwZWRfc3Rt dChjdHgpOworCQlwZnJlZShpZHhkZWYpOworCX0KKwlsaXN0X2ZyZWUoaW5kZXhvaWRzKTsKK30K KworLyoKKyAqIGVtaXRfbG9jYWxfY29uc3RyYWludHMKKyAqCQlBTFRFUiBUQUJMRSAuLi4gQURE IENPTlNUUkFJTlQgZm9yIGVhY2ggbG9jYWxseS1kZWZpbmVkIGNvbnN0cmFpbnQKKyAqCQlvbiB0 aGUgcmVsYXRpb24uICBJbmhlcml0ZWQgY29uc3RyYWludHMgKGNvbmlzbG9jYWw9ZmFsc2UpIGNv bWUKKyAqCQlmcm9tIHRoZSBwYXJlbnQncyBEREwuICBDSEVDSyBjb25zdHJhaW50cyBhcmUgZW1p dHRlZCBpbmxpbmUgZm9yCisgKgkJcmVndWxhci90eXBlZCB0YWJsZXMgKHNraXAgaGVyZSkgYnV0 IG91dC1vZi1saW5lIGZvciBwYXJ0aXRpb24KKyAqCQljaGlsZHJlbiAobm8gY29sdW1uIGxpc3Qg dG8gbGl2ZSBpbikuICBMb2NhbCBOT1QgTlVMTAorICoJCWNvbnN0cmFpbnRzIG9uIGF0dGlzbG9j YWwgY29sdW1ucyAtIHdoZXRoZXIgdXNlci1uYW1lZCBvcgorICoJCW1hdGNoaW5nIHRoZSBhdXRv LW5hbWUgcGF0dGVybiAtIGFyZSBlbWl0dGVkIGlubGluZSBieSB0aGUKKyAqCQljb2x1bW4tZW1p dCBoZWxwZXJzIGFuZCBhcmUgc2tpcHBlZCB2aWEgc2tpcF9ub3RudWxsX29pZHMsCisgKgkJYmVj YXVzZSBQRyBvbmx5IGFsbG93cyBvbmUgTk9UIE5VTEwgcGVyIGNvbHVtbiBhbmQgd291bGQgcmVq ZWN0CisgKgkJYSBzZWNvbmQgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5ULiAgUGFydGl0 aW9uIGNoaWxkcmVuCisgKgkJaGF2ZSBubyBjb2x1bW4gbGlzdCwgc28gdGhlaXIgTk9UIE5VTExz IGZhbGwgdGhyb3VnaCBoZXJlLgorICoKKyAqCQlFYWNoIGNvbnR5cGUgaXMgZ2F0ZWQgb24gdGhl IG1hdGNoaW5nIGtpbmQgaW4gdGhlIGluY2x1ZGUgLworICoJCWV4Y2x1ZGUgdm9jYWJ1bGFyeSwg c28gY2FsbGVycyBjYW4gcHJvZHVjZSBlLmcuIGFuIEZLLW9ubHkgcGFzcworICoJCShpbmNsdWRl ID0+ICdmb3JlaWduX2tleXMnKSBvciBhIHB1Yi9zdWIgY2xvbmUgdGhhdCBrZWVwcyBvbmx5Cisg KgkJdGhlIHByaW1hcnkga2V5IChleGNsdWRlID0+ICd1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXlz LGV4Y2x1c2lvbicpLgorICoJCU5PVCBOVUxMIGlzIGludGVudGlvbmFsbHkgbm90IGluIHRoZSB2 b2NhYnVsYXJ5IC0gYWx3YXlzIGVtaXR0ZWQKKyAqCQlzbyBjbG9uZWQgc2NoZW1hcyBkb24ndCBz aWxlbnRseSBhY2NlcHQgTlVMTHMgdGhlIHNvdXJjZSB3b3VsZAorICoJCWhhdmUgcmVqZWN0ZWQu CisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X2xvY2FsX2NvbnN0cmFpbnRzKFRhYmxlRGRsQ29udGV4 dCAqIGN0eCkKK3sKKwlSZWxhdGlvbgljb25SZWw7CisJU3lzU2NhbkRlc2MgY29uU2NhbjsKKwlT Y2FuS2V5RGF0YSBjb25LZXk7CisJSGVhcFR1cGxlCWNvblR1cDsKKwlib29sCQlpc19wYXJ0aXRp b24gPSBjdHgtPnJlbC0+cmRfcmVsLT5yZWxpc3BhcnRpdGlvbjsKKworCWNvblJlbCA9IHRhYmxl X29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUlu aXQoJmNvbktleSwKKwkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJQlRFcXVh bFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oY3R4LT5yZWxp ZCkpOworCWNvblNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50UmVs aWRUeXBpZE5hbWVJbmRleElkLAorCQkJCQkJCQkgdHJ1ZSwgTlVMTCwgMSwgJmNvbktleSk7CisK Kwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChjb25UdXAgPSBzeXN0YWJsZV9nZXRuZXh0KGNvblNj YW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb24gPSAoRm9ybV9wZ19jb25zdHJhaW50 KSBHRVRTVFJVQ1QoY29uVHVwKTsKKwkJY2hhcgkgICAqY29uZGVmOworCisJCWlmICghY29uLT5j b25pc2xvY2FsKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogRWFjaCBjb250eXBlIGlzIGdh dGVkIG9uIGl0cyBraW5kIGluIHRoZSBpbmNsdWRlL2V4Y2x1ZGUKKwkJICogdm9jYWJ1bGFyeS4g IENIRUNLIGlzIGFsc28gc2tpcHBlZCBmb3Igbm9uLXBhcnRpdGlvbiByZWxhdGlvbnMKKwkJICog YmVjYXVzZSBhcHBlbmRfaW5saW5lX2NoZWNrX2NvbnN0cmFpbnRzIGVtaXRzIHRob3NlIGlubGlu ZSBpbgorCQkgKiB0aGUgQ1JFQVRFIFRBQkxFIGJvZHk7IHBhcnRpdGlvbiBjaGlsZHJlbiBoYXZl IG5vIGNvbHVtbiBsaXN0CisJCSAqIHRvIGxpdmUgaW4sIHNvIHRoZXkgY29tZSB0aHJvdWdoIHRo aXMgbG9vcC4gIE5PVCBOVUxMIGlzIG5vdCBhCisJCSAqIGZpbHRlcmFibGUga2luZCAtIGVtaXR0 ZWQgdW5jb25kaXRpb25hbGx5IHRvIGF2b2lkIHByb2R1Y2luZworCQkgKiBzY2hlbWFzIHRoYXQg c2lsZW50bHkgYWNjZXB0IE5VTExzIHRoZSBzb3VyY2Ugd291bGQgaGF2ZQorCQkgKiByZWplY3Rl ZC4KKwkJICovCisJCXN3aXRjaCAoY29uLT5jb250eXBlKQorCQl7CisJCQljYXNlIENPTlNUUkFJ TlRfUFJJTUFSWToKKwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lO RF9QUklNQVJZX0tFWSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05T VFJBSU5UX1VOSVFVRToKKwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExf S0lORF9VTklRVUUpKQorCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RS QUlOVF9DSEVDSzoKKwkJCQlpZiAoIWlzX3BhcnRpdGlvbikKKwkJCQkJY29udGludWU7CisJCQkJ aWYgKCFpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfQ0hFQ0spKQorCQkJCQlj b250aW51ZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9GT1JFSUdOOgorCQkJCWlm ICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX0ZPUkVJR05fS0VZUykpCisJ CQkJCWNvbnRpbnVlOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0VYQ0xVU0lPTjoK KwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9FWENMVVNJT04p KQorCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9OT1ROVUxM OgorCQkJCS8qCisJCQkJICogT3V0LW9mLWxpbmUgTk9UIE5VTEwgaXMgY29uY2VwdHVhbGx5IHBh cnQgb2YgdGhlCisJCQkJICogdGFibGUgZGVmaW5pdGlvbjogZ2F0aW5nIGl0IG9uIEtJTkRfVEFC TEUgbWVhbnMgYW4KKwkJCQkgKiBpbmNsdWRlPWZvcmVpZ25fa2V5cyBzZWNvbmQgcGFzcyBkb2Vz IG5vdCByZS1lbWl0CisJCQkJICogTk9UIE5VTExzIHRoYXQgdGhlIGZpcnN0IHBhc3MgYWxyZWFk eSBjcmVhdGVkLAorCQkJCSAqIHdoaWxlIHRoZSBuby1vcHRpb25zIGRlZmF1bHQgc3RpbGwgZW1p dHMgdGhlbS4KKwkJCQkgKi8KKwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9E RExfS0lORF9UQUJMRSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmICghaXNfcGFydGl0aW9uICYm CisJCQkJCWxpc3RfbWVtYmVyX29pZChjdHgtPnNraXBfbm90bnVsbF9vaWRzLCBjb24tPm9pZCkp CisJCQkJCWNvbnRpbnVlOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKgorCQkJCSAq IEFueSBmdXR1cmUgY29udHlwZSB0aGUgdm9jYWJ1bGFyeSBkb2VzIG5vdCB5ZXQgY292ZXI6CisJ CQkJICogZmFsbCB0aHJvdWdoIGFuZCBlbWl0IGl0IHZpYSBwZ19nZXRfY29uc3RyYWludGRlZl9j b21tYW5kLAorCQkJCSAqIG1hdGNoaW5nIHRoZSBvcmlnaW5hbCBsb29wJ3MgImVtaXQgdW5sZXNz IGZpbHRlcmVkIgorCQkJCSAqIGJlaGF2aW9yLiAgVGhpcyBpcyB1bnJlYWNoYWJsZSBpbiBjdXJy ZW50IFBHIChldmVyeQorCQkJCSAqIGNvbnR5cGUgYWJvdmUgaXMgZW51bWVyYXRlZCkgYnV0IGtl cHQgZGVmZW5zaXZlIGFnYWluc3QKKwkJCQkgKiBhIG5ldyBjb250eXBlIGJlaW5nIGludHJvZHVj ZWQuCisJCQkJICovCisJCQkJYnJlYWs7CisJCX0KKworCQljb25kZWYgPSBwZ19nZXRfY29uc3Ry YWludGRlZl9jb21tYW5kKGNvbi0+b2lkKTsKKwkJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7 CisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiJXM7IiwgY29uZGVmKTsKKwkJYXBwZW5k X3N0cmlwcGVkX3N0bXQoY3R4KTsKKwkJcGZyZWUoY29uZGVmKTsKKwl9CisJc3lzdGFibGVfZW5k c2Nhbihjb25TY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7Cit9 CisKKy8qCisgKiBlbWl0X3J1bGVzCisgKgkJQ1JFQVRFIFJVTEUgcGVyIGNhY2hlZCByZXdyaXRl IHJ1bGUgb24gdGhlIHJlbGF0aW9uLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9ydWxlcyhUYWJs ZURkbENvbnRleHQgKiBjdHgpCit7CisJaWYgKCFpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVf RERMX0tJTkRfUlVMRVMpIHx8CisJCWN0eC0+cmVsLT5yZF9ydWxlcyA9PSBOVUxMKQorCQlyZXR1 cm47CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGN0eC0+cmVsLT5yZF9ydWxlcy0+bnVtTG9ja3M7 IGkrKykKKwl7CisJCU9pZAkJCXJ1bGVpZCA9IGN0eC0+cmVsLT5yZF9ydWxlcy0+cnVsZXNbaV0t PnJ1bGVJZDsKKwkJRGF0dW0JCXJ1bGVkZWY7CisJCWNoYXIJICAgKnJ1bGVkZWZfc3RyOworCisJ CXJ1bGVkZWYgPSBPaWRGdW5jdGlvbkNhbGwxKEZfUEdfR0VUX1JVTEVERUZfT0lELAorCQkJCQkJ CQkgICBPYmplY3RJZEdldERhdHVtKHJ1bGVpZCkpOworCQlydWxlZGVmX3N0ciA9IFRleHREYXR1 bUdldENTdHJpbmcocnVsZWRlZik7CisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgcnVsZWRlZl9zdHIpOworCQlhcHBlbmRf c3RyaXBwZWRfc3RtdChjdHgpOworCQlwZnJlZShydWxlZGVmX3N0cik7CisJfQorfQorCisvKgor ICogZW1pdF9zdGF0aXN0aWNzCisgKgkJQ1JFQVRFIFNUQVRJU1RJQ1MgcGVyIGV4dGVuZGVkIHN0 YXRpc3RpY3Mgb2JqZWN0IG9uIHRoZSByZWxhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRf c3RhdGlzdGljcyhUYWJsZURkbENvbnRleHQgKiBjdHgpCit7CisJUmVsYXRpb24Jc3RhdFJlbDsK KwlTeXNTY2FuRGVzYyBzdGF0U2NhbjsKKwlTY2FuS2V5RGF0YSBzdGF0S2V5OworCUhlYXBUdXBs ZQlzdGF0VHVwOworCisJaWYgKCFpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRf U1RBVElTVElDUykpCisJCXJldHVybjsKKworCXN0YXRSZWwgPSB0YWJsZV9vcGVuKFN0YXRpc3Rp Y0V4dFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJnN0YXRLZXks CisJCQkJQW51bV9wZ19zdGF0aXN0aWNfZXh0X3N0eHJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVn eU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsKKwlz dGF0U2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihzdGF0UmVsLCBTdGF0aXN0aWNFeHRSZWxpZElu ZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJnN0YXRLZXkpOworCisJd2hpbGUgKEhl YXBUdXBsZUlzVmFsaWQoc3RhdFR1cCA9IHN5c3RhYmxlX2dldG5leHQoc3RhdFNjYW4pKSkKKwl7 CisJCUZvcm1fcGdfc3RhdGlzdGljX2V4dCBzdGF0ID0gKEZvcm1fcGdfc3RhdGlzdGljX2V4dCkg R0VUU1RSVUNUKHN0YXRUdXApOworCQljaGFyCSAgICpzdGF0ZGVmID0gcGdfZ2V0X3N0YXRpc3Rp Y3NvYmpkZWZfc3RyaW5nKHN0YXQtPm9pZCk7CisKKwkJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1 Zik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiJXM7Iiwgc3RhdGRlZik7CisJCWFw cGVuZF9zdHJpcHBlZF9zdG10KGN0eCk7CisJCXBmcmVlKHN0YXRkZWYpOworCX0KKwlzeXN0YWJs ZV9lbmRzY2FuKHN0YXRTY2FuKTsKKwl0YWJsZV9jbG9zZShzdGF0UmVsLCBBY2Nlc3NTaGFyZUxv Y2spOworfQorCisvKgorICogZW1pdF9yZXBsaWNhX2lkZW50aXR5CisgKgkJQUxURVIgVEFCTEUg cXVhbG5hbWUgUkVQTElDQSBJREVOVElUWSAuLi4gLSBlbWl0dGVkIG9ubHkgd2hlbiB0aGUKKyAq CQlyZWxyZXBsaWRlbnQgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0ICgnZCcgPSB1c2UgcHJpbWFy eSBrZXkpLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9yZXBsaWNhX2lkZW50aXR5KFRhYmxlRGRs Q29udGV4dCAqIGN0eCkKK3sKKwlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExf S0lORF9SRVBMSUNBX0lERU5USVRZKSkKKwkJcmV0dXJuOworCWlmIChjdHgtPnJlbC0+cmRfcmVs LT5yZWxyZXBsaWRlbnQgPT0gUkVQTElDQV9JREVOVElUWV9ERUZBVUxUKQorCQlyZXR1cm47CisK KwlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwlzd2l0Y2ggKGN0eC0+cmVsLT5yZF9yZWwt PnJlbHJlcGxpZGVudCkKKwl7CisJCWNhc2UgUkVQTElDQV9JREVOVElUWV9OT1RISU5HOgorCQkJ YXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkJICJBTFRFUiBUQUJMRSAlcyBSRVBM SUNBIElERU5USVRZIE5PVEhJTkc7IiwKKwkJCQkJCQkgY3R4LT5xdWFsbmFtZSk7CisJCQlhcHBl bmRfc3RtdChjdHgpOworCQkJYnJlYWs7CisJCWNhc2UgUkVQTElDQV9JREVOVElUWV9GVUxMOgor CQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkJICJBTFRFUiBUQUJMRSAlcyBS RVBMSUNBIElERU5USVRZIEZVTEw7IiwKKwkJCQkJCQkgY3R4LT5xdWFsbmFtZSk7CisJCQlhcHBl bmRfc3RtdChjdHgpOworCQkJYnJlYWs7CisJCWNhc2UgUkVQTElDQV9JREVOVElUWV9JTkRFWDoK KwkJCXsKKwkJCQlPaWQJCQlyZXBsaWR4ID0gUmVsYXRpb25HZXRSZXBsaWNhSW5kZXgoY3R4LT5y ZWwpOworCisJCQkJaWYgKE9pZElzVmFsaWQocmVwbGlkeCkpCisJCQkJeworCQkJCQljaGFyCSAg ICppZHhuYW1lID0gZ2V0X3JlbF9uYW1lKHJlcGxpZHgpOworCisJCQkJCWlmIChpZHhuYW1lID09 IE5VTEwpCisJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1VO REVGSU5FRF9PQkpFQ1QpLAorCQkJCQkJCQkgZXJybXNnKCJyZXBsaWNhIGlkZW50aXR5IGluZGV4 IHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJCQkJCQlyZXBsaWR4KSwKKwkJCQkJ CQkJIGVycmRldGFpbCgiSXQgbWF5IGhhdmUgYmVlbiBjb25jdXJyZW50bHkgZHJvcHBlZC4iKSkp OworCisJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCQkJICJBTFRFUiBU QUJMRSAlcyBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYICVzOyIsCisJCQkJCQkJCQkgY3R4 LT5xdWFsbmFtZSwKKwkJCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKGlkeG5hbWUpKTsKKwkJCQkJ YXBwZW5kX3N0bXQoY3R4KTsKKwkJCQkJcGZyZWUoaWR4bmFtZSk7CisJCQkJfQorCQkJfQorCQkJ YnJlYWs7CisJfQorfQorCisvKgorICogZW1pdF9ybHNfdG9nZ2xlcworICoJCUFMVEVSIFRBQkxF IHF1YWxuYW1lIEVOQUJMRSAvIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWS4KKyAqLworc3RhdGlj IHZvaWQKK2VtaXRfcmxzX3RvZ2dsZXMoVGFibGVEZGxDb250ZXh0ICogY3R4KQoreworCWlmICgh aXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1JMUykpCisJCXJldHVybjsKKwor CWlmIChjdHgtPnJlbC0+cmRfcmVsLT5yZWxyb3dzZWN1cml0eSkKKwl7CisJCXJlc2V0U3RyaW5n SW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCSAi QUxURVIgVEFCTEUgJXMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsiLAorCQkJCQkJIGN0eC0+ cXVhbG5hbWUpOworCQlhcHBlbmRfc3RtdChjdHgpOworCX0KKwlpZiAoY3R4LT5yZWwtPnJkX3Jl bC0+cmVsZm9yY2Vyb3dzZWN1cml0eSkKKwl7CisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYp OworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCSAiQUxURVIgVEFCTEUgJXMg Rk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZOyIsCisJCQkJCQkgY3R4LT5xdWFsbmFtZSk7CisJCWFw cGVuZF9zdG10KGN0eCk7CisJfQorfQorCisvKgorICogZW1pdF9wYXJ0aXRpb25fY2hpbGRyZW4K KyAqCQlGb3IgZWFjaCBkaXJlY3QgcGFydGl0aW9uIGNoaWxkIG9mIGEgcGFydGl0aW9uZWQtdGFi bGUgcGFyZW50LAorICoJCXJlY3Vyc2l2ZWx5IGNhbGwgcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5h bCBhbmQgYXBwZW5kIHRoZSBjaGlsZCdzCisgKgkJc3RhdGVtZW50cy4gIEVhY2ggY2hpbGQncyBv d24gRERMIGhhbmRsZXMgZnVydGhlciBsZXZlbHMgdGhyb3VnaAorICoJCXRoZSBzYW1lIHJlY3Vy c2lvbi4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfcGFydGl0aW9uX2NoaWxkcmVuKFRhYmxlRGRs Q29udGV4dCAqIGN0eCkKK3sKKwlMaXN0CSAgICpjaGlsZHJlbjsKKwlMaXN0Q2VsbCAgICpsYzsK KworCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1BBUlRJVElPTlMp IHx8CisJCWN0eC0+cmVsLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05FRF9U QUJMRSkKKwkJcmV0dXJuOworCisJY2hpbGRyZW4gPSBmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVu KGN0eC0+cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZm9yZWFjaChsYywgY2hpbGRyZW4pCisJ eworCQlPaWQJCQljaGlsZG9pZCA9IGxmaXJzdF9vaWQobGMpOworCQlUYWJsZURkbENvbnRleHQg Y2hpbGRjdHggPSB7MH07CisJCUxpc3QJICAgKmNoaWxkc3RtdHM7CisKKwkJLyoKKwkJICogRWFj aCByZWN1cnNpdmUgaW52b2NhdGlvbiByZS1kZXJpdmVzIGl0cyBvd24gcmVsLCBuYW1lc3BhY2Us CisJCSAqIHF1YWxuYW1lLCBOT1QgTlVMTCBjYWNoZSwgYnVmZmVyLCBhbmQgc3RhdGVtZW50IGxp c3QgaW5zaWRlCisJCSAqIHBnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwuICBUaGUgdXNlci1zdXBw bGllZCBvcHRpb24gZmllbGRzCisJCSAqIGNhcnJ5IG92ZXIgdmVyYmF0aW07IHRoZSBpbmNsdWRl ZF9raW5kcyAvIGV4Y2x1ZGVkX2tpbmRzCisJCSAqIGJpdG1hcHNldHMgYXJlIHNoYXJlZCBieSBw b2ludGVyIChyZWFkLW9ubHksIGZyZWVkIG9uY2UgYnkgdGhlCisJCSAqIHRvcC1sZXZlbCBjYWxs ZXIncyBtZW1vcnkgY29udGV4dCBjbGVhbnVwKS4KKwkJICovCisJCWNoaWxkY3R4LnJlbGlkID0g Y2hpbGRvaWQ7CisJCWNoaWxkY3R4LnByZXR0eSA9IGN0eC0+cHJldHR5OworCQljaGlsZGN0eC5u b19vd25lciA9IGN0eC0+bm9fb3duZXI7CisJCWNoaWxkY3R4Lm5vX3RhYmxlc3BhY2UgPSBjdHgt Pm5vX3RhYmxlc3BhY2U7CisJCWNoaWxkY3R4LnNjaGVtYV9xdWFsaWZpZWQgPSBjdHgtPnNjaGVt YV9xdWFsaWZpZWQ7CisJCWNoaWxkY3R4LmluY2x1ZGVkX2tpbmRzID0gY3R4LT5pbmNsdWRlZF9r aW5kczsKKwkJY2hpbGRjdHguZXhjbHVkZWRfa2luZHMgPSBjdHgtPmV4Y2x1ZGVkX2tpbmRzOwor CisJCWNoaWxkc3RtdHMgPSBwZ19nZXRfdGFibGVfZGRsX2ludGVybmFsKCZjaGlsZGN0eCk7CisJ CWN0eC0+c3RhdGVtZW50cyA9IGxpc3RfY29uY2F0KGN0eC0+c3RhdGVtZW50cywgY2hpbGRzdG10 cyk7CisJfQorCWxpc3RfZnJlZShjaGlsZHJlbik7Cit9CisKKy8qCisgKiBwZ19nZXRfdGFibGVf ZGRsX2ludGVybmFsCisgKgkJR2VuZXJhdGUgRERMIHN0YXRlbWVudHMgdG8gcmVjcmVhdGUgYSBy ZWd1bGFyIG9yIHBhcnRpdGlvbmVkIHRhYmxlLgorICoKKyAqIFRoZSBjYWxsZXIgaW5pdGlhbGl6 ZXMgKmN0eCB3aXRoIHRoZSB1c2VyLXN1cHBsaWVkIG9wdGlvbiBmaWVsZHMKKyAqIChyZWxpZCwg cHJldHR5LCBub19vd25lciwgbm9fdGFibGVzcGFjZSwgc2NoZW1hX3F1YWxpZmllZCwKKyAqIGlu Y2x1ZGVkX2tpbmRzLCBleGNsdWRlZF9raW5kcykuICBUaGlzIGZ1bmN0aW9uIG9wZW5zIHRoZSBy ZWxhdGlvbiwKKyAqIHZhbGlkYXRlcyBhY2Nlc3MsIHBvcHVsYXRlcyB0aGUgZGVyaXZlZCBmaWVs ZHMgKHJlbCwgcXVhbG5hbWUsCisgKiBzY2hlbWFfcHJlZml4LCBubl9lbnRyaWVzLCAuLi4pLCBy dW5zIHRoZSBlbWlzc2lvbiBwYXNzZXMsIGFuZAorICogcmV0dXJucyB0aGUgYWNjdW11bGF0ZWQg c3RhdGVtZW50IGxpc3QuCisgKgorICogRWFjaCBlbWlzc2lvbiBoZWxwZXIgY29uc3VsdHMgaXNf a2luZF9pbmNsdWRlZCgpIHRvIGRlY2lkZSB3aGV0aGVyCisgKiBpdCBzaG91bGQgcnVuLiAgVGhl IHRhYmxlLXByb3BlciBwYXNzZXMgKENSRUFURSBUQUJMRSAvIE9XTkVSIC8KKyAqIEFMVEVSIENP TFVNTiAuLi4gU0VUIERFRkFVTFQgLyBBTFRFUiBDT0xVTU4gLi4uIFNFVCAoLi4uKSkgYXJlCisg KiBncm91cGVkIHVuZGVyIEtJTkRfVEFCTEUgc28gdGhlIEZLLW9ubHkgLyBzdWItb2JqZWN0LW9u bHkgd29ya2Zsb3cKKyAqIGlzIGV4cHJlc3NpYmxlIGFzIGEgc2luZ2xlIGluY2x1ZGUgb3IgZXhj bHVkZSBsaXN0LgorICoKKyAqIFRyaWdnZXIgYW5kIHBvbGljeSBlbWlzc2lvbiBhcmUgc2NhZmZv bGRlZCBidXQgY3VycmVudGx5IGRpc2FibGVkCisgKiAoI2lmIDApIC0gdGhleSB3aWxsIGJlY29t ZSBhIHNpbmdsZSBoZWxwZXIgY2FsbCBvbmNlIHRoZSBzdGFuZGFsb25lCisgKiBwZ19nZXRfdHJp Z2dlcl9kZGwgLyBwZ19nZXRfcG9saWN5X2RkbCBoZWxwZXJzIGxhbmQuCisgKi8KK3N0YXRpYyBM aXN0ICoKK3BnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7 CisJUmVsYXRpb24JcmVsOworCWNoYXIJCXJlbGtpbmQ7CisJQWNsUmVzdWx0CWFjbHJlc3VsdDsK KworCXJlbCA9IHRhYmxlX29wZW4oY3R4LT5yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJl bGtpbmQgPSByZWwtPnJkX3JlbC0+cmVsa2luZDsKKworCS8qCisJICogVGhlIGluaXRpYWwgY3V0 IG9ubHkgc3VwcG9ydHMgb3JkaW5hcnkgYW5kIHBhcnRpdGlvbmVkIHRhYmxlcy4gIFZpZXdzLAor CSAqIG1hdHZpZXdzLCBmb3JlaWduIHRhYmxlcywgc2VxdWVuY2VzLCBpbmRleGVzLCBjb21wb3Np dGUgdHlwZXMsIGFuZAorCSAqIFRPQVNUIHRhYmxlcyBhcmUgb3V0IG9mIHNjb3BlIGZvciBub3cu CisJICovCisJaWYgKHJlbGtpbmQgIT0gUkVMS0lORF9SRUxBVElPTiAmJiByZWxraW5kICE9IFJF TEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQljaGFyCSAgICpyZWxuYW1lID0gcHN0cmR1 cChSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKworCQl0YWJsZV9jbG9zZShyZWwsIEFj Y2Vzc1NoYXJlTG9jayk7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9X Uk9OR19PQkpFQ1RfVFlQRSksCisJCQkJIGVycm1zZygiXCIlc1wiIGlzIG5vdCBhbiBvcmRpbmFy eSBvciBwYXJ0aXRpb25lZCB0YWJsZSIsCisJCQkJCQlyZWxuYW1lKSkpOworCX0KKworCS8qIENh bGxlciBuZWVkcyBTRUxFQ1Qgb24gdGhlIHRhYmxlIHRvIHJlYWQgaXRzIGRlZmluaXRpb24uICov CisJYWNscmVzdWx0ID0gcGdfY2xhc3NfYWNsY2hlY2soY3R4LT5yZWxpZCwgR2V0VXNlcklkKCks IEFDTF9TRUxFQ1QpOworCWlmIChhY2xyZXN1bHQgIT0gQUNMQ0hFQ0tfT0spCisJCWFjbGNoZWNr X2Vycm9yKGFjbHJlc3VsdCwgT0JKRUNUX1RBQkxFLAorCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShyZWwpKTsKKworCS8qCisJICogVmFsaWRhdGlvbjogZXhjbHVkaW5nICJwcmltYXJ5 X2tleSIgd2hpbGUgdGhlIHRhYmxlJ3MgUkVQTElDQSBJREVOVElUWQorCSAqIGlzIHNldCB0byBV U0lORyBJTkRFWCBvZiB0aGUgUEsgd291bGQgcHJvZHVjZSBEREwgdGhhdCByZWZlcmVuY2VzIGFu CisJICogaW5kZXggdGhlIHNhbWUgRERMIGp1c3QgZHJvcHBlZC4gIFJlcXVpcmUgdGhlIHVzZXIg dG8gYWxzbyBleGNsdWRlCisJICogInJlcGxpY2FfaWRlbnRpdHkiIGluIHRoYXQgY2FzZSwgb3Ig dG8gbm90IGV4Y2x1ZGUgdGhlIFBLLgorCSAqLworCWlmIChjdHgtPmV4Y2x1ZGVkX2tpbmRzICE9 IE5VTEwgJiYKKwkJYm1zX2lzX21lbWJlcigoaW50KSBUQUJMRV9ERExfS0lORF9QUklNQVJZX0tF WSwKKwkJCQkJICBjdHgtPmV4Y2x1ZGVkX2tpbmRzKSAmJgorCQkhYm1zX2lzX21lbWJlcigoaW50 KSBUQUJMRV9ERExfS0lORF9SRVBMSUNBX0lERU5USVRZLAorCQkJCQkgICBjdHgtPmV4Y2x1ZGVk X2tpbmRzKSAmJgorCQlyZWwtPnJkX3JlbC0+cmVscmVwbGlkZW50ID09IFJFUExJQ0FfSURFTlRJ VFlfSU5ERVgpCisJeworCQlPaWQJCQlyZXBsaWR4ID0gUmVsYXRpb25HZXRSZXBsaWNhSW5kZXgo cmVsKTsKKworCQlpZiAoT2lkSXNWYWxpZChyZXBsaWR4KSkKKwkJeworCQkJSGVhcFR1cGxlCWlk eFR1cCA9IFNlYXJjaFN5c0NhY2hlMShJTkRFWFJFTElELAorCQkJCQkJCQkJCQkJIE9iamVjdElk R2V0RGF0dW0ocmVwbGlkeCkpOworCisJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZChpZHhUdXApKQor CQkJeworCQkJCWJvb2wJCWlzX3BrID0gKChGb3JtX3BnX2luZGV4KSBHRVRTVFJVQ1QoaWR4VHVw KSktPmluZGlzcHJpbWFyeTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShpZHhUdXApOworCisJCQkJ aWYgKGlzX3BrKQorCQkJCXsKKwkJCQkJY2hhcgkgICAqcmVsbmFtZSA9IHBzdHJkdXAoUmVsYXRp b25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CisKKwkJCQkJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NT aGFyZUxvY2spOworCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJCSBlcnJtc2coImNhbm5vdCBleGNsdWRl IFwicHJpbWFyeV9rZXlcIiB3aXRob3V0IGFsc28gZXhjbHVkaW5nIFwicmVwbGljYV9pZGVudGl0 eVwiIGZvciB0YWJsZSBcIiVzXCIiLAorCQkJCQkJCQkJcmVsbmFtZSksCisJCQkJCQkJIGVycmRl dGFpbCgiVGhlIHRhYmxlJ3MgUkVQTElDQSBJREVOVElUWSByZWZlcmVuY2VzIHRoZSBwcmltYXJ5 IGtleSBpbmRleC4iKSkpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogUG9wdWxh dGUgZGVyaXZlZCBmaWVsZHMgbm93IHRoYXQgdGhlIHJlbGF0aW9uIGlzIG9wZW4gYW5kIHZhbGlk YXRlZC4KKwkgKiBUaGUgcmVtYWluaW5nIGRlcml2ZWQgZmllbGRzIChzY2hlbWFfcHJlZml4LCBu bl9lbnRyaWVzLAorCSAqIHNraXBfbm90bnVsbF9vaWRzLCBidWYsIHN0YXRlbWVudHMpIHN0YXJ0 IHplcm9lZCB2aWEgdGhlIGNhbGxlcidzCisJICogYFRhYmxlRGRsQ29udGV4dCBjdHggPSB7MH1g IGluaXRpYWxpemVyOyBzY2hlbWFfcHJlZml4IGlzIHNldAorCSAqIGNvbmRpdGlvbmFsbHkgYmVs b3csIHRoZSBOT1QgTlVMTCBjYWNoZSBpcyBwb3B1bGF0ZWQgYnkKKwkgKiBjb2xsZWN0X2xvY2Fs X25vdF9udWxsLCB0aGUgYnVmZmVyIGlzIGluaXRTdHJpbmdJbmZvJ2QsIGFuZCBlYWNoCisJICog ZW1pdCBwYXNzIGFwcGVuZHMgdG8gc3RhdGVtZW50cyB2aWEgbGFwcGVuZC4KKwkgKi8KKwljdHgt PnJlbCA9IHJlbDsKKwljdHgtPmJhc2VfbmFtZXNwYWNlID0gUmVsYXRpb25HZXROYW1lc3BhY2Uo cmVsKTsKKwljdHgtPnNhdmVfbmVzdGxldmVsID0gLTE7CisJY3R4LT5xdWFsbmFtZSA9IGxvb2t1 cF9yZWxuYW1lX2Zvcl9lbWl0KGN0eC0+cmVsaWQsIGN0eC0+c2NoZW1hX3F1YWxpZmllZCwKKwkJ CQkJCQkJCQkJY3R4LT5iYXNlX25hbWVzcGFjZSk7CisKKwkvKgorCSAqIFdoZW4gc2NoZW1hX3F1 YWxpZmllZCBpcyBmYWxzZSwgbmFycm93IHRoZSBhY3RpdmUgc2VhcmNoX3BhdGggdG8gdGhlCisJ ICogdGFyZ2V0IHRhYmxlJ3Mgb3duIG5hbWVzcGFjZSBmb3IgdGhlIGR1cmF0aW9uIG9mIERETCBl bWlzc2lvbi4gIFRoZQorCSAqIGRlcGFyc2UgY29kZSBpbiBydWxldXRpbHMgKGFuZCB0aGUgcmVn Y2xhc3MvcmVncHJvYyBvdXRwdXQgZnVuY3Rpb25zIHdlCisJICogdHJhbnNpdGl2ZWx5IGNhbGwp IGRlY2lkZXMgd2hldGhlciB0byBzY2hlbWEtcXVhbGlmeSBhIG5hbWUgYmFzZWQgb24KKwkgKiB3 aGV0aGVyIHRoZSByZWZlcmVuY2VkIG9iamVjdCBpcyByZWFjaGFibGUgdGhyb3VnaCBzZWFyY2hf cGF0aCwgc28gdGhpcworCSAqIG1ha2VzIHNhbWUtc2NoZW1hIHJlZmVyZW5jZXMgaW4gREVGQVVM VCBhbmQgQ0hFQ0sgZXhwcmVzc2lvbnMsIHJlZ2NsYXNzCisJICogbGl0ZXJhbHMsIEZLIHRhcmdl dHMsIGV0Yy4gY29tZSBvdXQgdW5xdWFsaWZpZWQuICBDcm9zcy1zY2hlbWEKKwkgKiByZWZlcmVu Y2VzIHN0YXkgcXVhbGlmaWVkLCB3aGljaCBpcyB0aGUgY29ycmVjdG5lc3MgcmVxdWlyZW1lbnQu CisJICogQXRFT1hhY3RfR1VDIGNsZWFucyB1cCBhdCB4YWN0IGVuZCBpZiBhbnl0aGluZyB0aHJv d3MgYmV0d2VlbiBoZXJlIGFuZAorCSAqIHRoZSBleHBsaWNpdCByZXN0b3JlIGJlbG93OyBvbiB0 aGUgbm9ybWFsIHBhdGggd2UgcmVzdG9yZSByaWdodCBiZWZvcmUKKwkgKiByZXR1cm5pbmcuCisJ ICoKKwkgKiBQcmUtY29tcHV0ZSAiPHNjaGVtYT4uIiB0b28gLSB0aGUgYWx3YXlzLXF1YWxpZmll ZCBoZWxwZXJzCisJICogKGNvbnN0cmFpbnRkZWZfY29tbWFuZCwgaW5kZXhkZWZfc3RyaW5nLCBy dWxlZGVmLAorCSAqIHN0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKSBpZ25vcmUgc2VhcmNoX3BhdGgg Zm9yIHRoZSB0YXJnZXQncyBvd24gIkFMVEVSCisJICogVEFCTEUgc2NoZW1hLnRibCIvIk9OIHNj aGVtYS50YmwiLyJUTyBzY2hlbWEudGJsIiBwcmVmaXggYW5kIGZvciB0aGUKKwkgKiBxdWFsaWZp ZWQgc3RhdGlzdGljcyBuYW1lOyB3ZSBzdHJpcCB0aGF0IHN0cmluZyBvdXJzZWx2ZXMgdmlhCisJ ICogc3RyaXBfc2NoZW1hX3ByZWZpeC4KKwkgKi8KKwlpZiAoIWN0eC0+c2NoZW1hX3F1YWxpZmll ZCkKKwl7CisJCWNoYXIJICAgKm5zcG5hbWUgPSBnZXRfbmFtZXNwYWNlX25hbWUoY3R4LT5iYXNl X25hbWVzcGFjZSk7CisKKwkJaWYgKG5zcG5hbWUgIT0gTlVMTCkKKwkJeworCQkJY29uc3QgY2hh ciAqcW5zcCA9IHF1b3RlX2lkZW50aWZpZXIobnNwbmFtZSk7CisKKwkJCWN0eC0+c2NoZW1hX3By ZWZpeCA9IHBzcHJpbnRmKCIlcy4iLCBxbnNwKTsKKwkJCWN0eC0+c2F2ZV9uZXN0bGV2ZWwgPSBO ZXdHVUNOZXN0TGV2ZWwoKTsKKwkJCSh2b2lkKSBzZXRfY29uZmlnX29wdGlvbigic2VhcmNoX3Bh dGgiLCBxbnNwLAorCQkJCQkJCQkJIFBHQ19VU0VSU0VULCBQR0NfU19TRVNTSU9OLAorCQkJCQkJ CQkJIEdVQ19BQ1RJT05fU0FWRSwgdHJ1ZSwgMCwgZmFsc2UpOworCQkJcGZyZWUobnNwbmFtZSk7 CisJCX0KKwl9CisKKwkvKgorCSAqIENhY2hlIGxvY2FsbHktZGVjbGFyZWQgTk9UIE5VTEwgY29u c3RyYWludCBtZXRhZGF0YSBzbyB0aGUgY29sdW1uLSBlbWl0CisJICogaGVscGVycyBjYW4gcHJv ZHVjZSAiQ09OU1RSQUlOVCBuYW1lIE5PVCBOVUxMIiBpbmxpbmUgZm9yIHVzZXItbmFtZWQKKwkg KiBjb25zdHJhaW50cywgYW5kIHNvIHRoZSBjb25zdHJhaW50IGxvb3AgY2FuIGF2b2lkIGRvdWJs ZS1lbWl0dGluZyB0aGVtLgorCSAqLworCWN0eC0+bm5fZW50cmllcyA9IGNvbGxlY3RfbG9jYWxf bm90X251bGwocmVsLCAmY3R4LT5za2lwX25vdG51bGxfb2lkcyk7CisKKwlpbml0U3RyaW5nSW5m bygmY3R4LT5idWYpOworCisJLyoKKwkgKiBFbWlzc2lvbiBwYXNzZXMuICBPcmRlciBpcyBzaWdu aWZpY2FudDogQ1JFQVRFIFRBQkxFIGZpcnN0OyBPV05FUiBhbmQKKwkgKiB0aGUgcGVyLWNvbHVt biBBTFRFUiBDT0xVTU4gcGFzc2VzIGJlZm9yZSBzdWItb2JqZWN0IGVtaXNzaW9uOworCSAqIHN1 Yi1vYmplY3RzIGluIGRlcGVuZGVuY3ktZnJpZW5kbHkgb3JkZXIgKGluZGV4ZXMgYmVmb3JlIGNv bnN0cmFpbnRzLAorCSAqIHNpbmNlIGNvbnN0cmFpbnQtYmFja2VkIGluZGV4ZXMgYXJlIGVtaXR0 ZWQgb3V0LW9mLWxpbmUgYnkgdGhlCisJICogY29uc3RyYWludCBsb29wKTsgcGFydGl0aW9uIGNo aWxkcmVuIGxhc3Qgc28gdGhlIHBhcmVudCBhbHJlYWR5IGV4aXN0cworCSAqIGF0IHJlcGxheSB0 aW1lLiAgRWFjaCBoZWxwZXIgZ2F0ZXMgaXRzZWxmIG9uIGlzX2tpbmRfaW5jbHVkZWQgZm9yIHRo ZQorCSAqIHJlbGV2YW50IFRBQkxFX0RETF9LSU5EXyo7IHRoZSBmb3VyICJ0YWJsZSBpdHNlbGYi IHBhc3NlcyBhcmUgZ3JvdXBlZAorCSAqIGhlcmUgdW5kZXIgS0lORF9UQUJMRSBzbyBhbGwgb2Yg Q1JFQVRFIFRBQkxFIC8gT1dORVIgLyBTRVQgREVGQVVMVCAvCisJICogU0VUICguLi4pIGRyb3Ag b3V0IHRvZ2V0aGVyIHdoZW4gdGhlIHVzZXIgYXNrcyBmb3Igb25seSBzdWItb2JqZWN0cworCSAq IChlLmcuIGluY2x1ZGUgPT4gJ2ZvcmVpZ25fa2V5cycgZm9yIHRoZSBzZWNvbmQgcGFzcyBvZiBh IHR3by1wYXNzIEZLCisJICogY2xvbmUpLgorCSAqLworCWlmIChpc19raW5kX2luY2x1ZGVkKGN0 eCwgVEFCTEVfRERMX0tJTkRfVEFCTEUpKQorCXsKKwkJZW1pdF9jcmVhdGVfdGFibGVfc3RtdChj dHgpOworCQllbWl0X293bmVyX3N0bXQoY3R4KTsKKwkJZW1pdF9jaGlsZF9kZWZhdWx0X292ZXJy aWRlcyhjdHgpOworCQllbWl0X2F0dG9wdGlvbnMoY3R4KTsKKwl9CisJZW1pdF9pbmRleGVzKGN0 eCk7CisJZW1pdF9sb2NhbF9jb25zdHJhaW50cyhjdHgpOworCWVtaXRfcnVsZXMoY3R4KTsKKwll bWl0X3N0YXRpc3RpY3MoY3R4KTsKKwllbWl0X3JlcGxpY2FfaWRlbnRpdHkoY3R4KTsKKwllbWl0 X3Jsc190b2dnbGVzKGN0eCk7CisKKwkvKgorCSAqIFRyaWdnZXJzIGFuZCByb3ctbGV2ZWwgc2Vj dXJpdHkgcG9saWNpZXMgLSBkaXNhYmxlZCB1bnRpbCB0aGUKKwkgKiBzdGFuZGFsb25lIHBnX2dl dF90cmlnZ2VyX2RkbCgpIGFuZCBwZ19nZXRfcG9saWN5X2RkbCgpIGhlbHBlcnMgbGFuZC4KKwkg KiBUaGUgc2NhbiArIGxvY2sgKyBmaWx0ZXIgc2NhZmZvbGRpbmcgYmVsb3cgaXMgcHJlc2VydmVk IChpbnNpZGUgI2lmIDApCisJICogc28gd2lyaW5nIHVwIGVhY2ggZW1pc3Npb24gYmVjb21lcyBh IG9uZS1saW5lciBpbiB0aGUgbG9vcCBib2R5IG9uY2UKKwkgKiB0aG9zZSBoZWxwZXJzIGFyZSBh dmFpbGFibGUuCisJICovCisjaWYgMAorCWlmIChpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVf RERMX0tJTkRfVFJJR0dFUlMpKQorCXsKKwkJUmVsYXRpb24JdHJpZ1JlbDsKKwkJU3lzU2NhbkRl c2MgdHJpZ1NjYW47CisJCVNjYW5LZXlEYXRhIHRyaWdLZXk7CisJCUhlYXBUdXBsZQl0cmlnVHVw OworCisJCXRyaWdSZWwgPSB0YWJsZV9vcGVuKFRyaWdnZXJSZWxhdGlvbklkLCBBY2Nlc3NTaGFy ZUxvY2spOworCQlTY2FuS2V5SW5pdCgmdHJpZ0tleSwKKwkJCQkJQW51bV9wZ190cmlnZ2VyX3Rn cmVsaWQsCisJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0 SWRHZXREYXR1bShjdHgtPnJlbGlkKSk7CisJCXRyaWdTY2FuID0gc3lzdGFibGVfYmVnaW5zY2Fu KHRyaWdSZWwsIFRyaWdnZXJSZWxpZE5hbWVJbmRleElkLAorCQkJCQkJCQkJICB0cnVlLCBOVUxM LCAxLCAmdHJpZ0tleSk7CisJCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHRyaWdUdXAgPSBzeXN0 YWJsZV9nZXRuZXh0KHRyaWdTY2FuKSkpCisJCXsKKwkJCUZvcm1fcGdfdHJpZ2dlciB0cmcgPSAo Rm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1QodHJpZ1R1cCk7CisKKwkJCWlmICh0cmctPnRnaXNp bnRlcm5hbCkKKwkJCQljb250aW51ZTsKKworCQkJLyogVE9ETzogYXBwZW5kIHBnX2dldF90cmln Z2VyX2RkbCh0cmctPm9pZCkgb3V0cHV0IGhlcmUuICovCisJCX0KKwkJc3lzdGFibGVfZW5kc2Nh bih0cmlnU2Nhbik7CisJCXRhYmxlX2Nsb3NlKHRyaWdSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJ fQorCisJaWYgKGlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9QT0xJQ0lFUykp CisJeworCQlSZWxhdGlvbglwb2xSZWw7CisJCVN5c1NjYW5EZXNjIHBvbFNjYW47CisJCVNjYW5L ZXlEYXRhIHBvbEtleTsKKwkJSGVhcFR1cGxlCXBvbFR1cDsKKworCQlwb2xSZWwgPSB0YWJsZV9v cGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCVNjYW5LZXlJbml0KCZw b2xLZXksCisJCQkJCUFudW1fcGdfcG9saWN5X3BvbHJlbGlkLAorCQkJCQlCVEVxdWFsU3RyYXRl Z3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCU9iamVjdElkR2V0RGF0dW0oY3R4LT5yZWxpZCkpOwor CQlwb2xTY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBvbFJlbCwgUG9saWN5UG9scmVsaWRQb2xu YW1lSW5kZXhJZCwKKwkJCQkJCQkJCSB0cnVlLCBOVUxMLCAxLCAmcG9sS2V5KTsKKwkJd2hpbGUg KEhlYXBUdXBsZUlzVmFsaWQocG9sVHVwID0gc3lzdGFibGVfZ2V0bmV4dChwb2xTY2FuKSkpCisJ CXsKKwkJCS8qIFRPRE86IGFwcGVuZCBwZ19nZXRfcG9saWN5X2RkbChyZWxpZCwgcG9sbmFtZSkg b3V0cHV0IGhlcmUuICovCisJCX0KKwkJc3lzdGFibGVfZW5kc2Nhbihwb2xTY2FuKTsKKwkJdGFi bGVfY2xvc2UocG9sUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCX0KKyNlbmRpZgorCisJZW1pdF9w YXJ0aXRpb25fY2hpbGRyZW4oY3R4KTsKKworCXsKKwkJaW50CQkJbmF0dHMgPSBSZWxhdGlvbkdl dERlc2NyKHJlbCktPm5hdHRzOworCisJCWZvciAoaW50IGkgPSAxOyBpIDw9IG5hdHRzOyBpKysp CisJCQlpZiAoY3R4LT5ubl9lbnRyaWVzW2ldLm5hbWUgIT0gTlVMTCkKKwkJCQlwZnJlZShjdHgt Pm5uX2VudHJpZXNbaV0ubmFtZSk7CisJfQorCXBmcmVlKGN0eC0+bm5fZW50cmllcyk7CisKKwl0 YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJcGZyZWUoY3R4LT5idWYuZGF0YSk7 CisJcGZyZWUoY3R4LT5xdWFsbmFtZSk7CisJaWYgKGN0eC0+c2NoZW1hX3ByZWZpeCAhPSBOVUxM KQorCQlwZnJlZShjdHgtPnNjaGVtYV9wcmVmaXgpOworCWxpc3RfZnJlZShjdHgtPnNraXBfbm90 bnVsbF9vaWRzKTsKKworCS8qCisJICogUG9wIHRoZSBuYXJyb3dlZCBzZWFyY2hfcGF0aCBub3cg dGhhdCBhbGwgaGVscGVycyBoYXZlIHJ1bi4gIEVycm9ycworCSAqIHRocm93biBlYXJsaWVyIGFy ZSBjbGVhbmVkIHVwIGJ5IEF0RU9YYWN0X0dVQyBhdCB4YWN0IGVuZC4KKwkgKi8KKwlpZiAoY3R4 LT5zYXZlX25lc3RsZXZlbCA+PSAwKQorCQlBdEVPWGFjdF9HVUModHJ1ZSwgY3R4LT5zYXZlX25l c3RsZXZlbCk7CisKKwlyZXR1cm4gY3R4LT5zdGF0ZW1lbnRzOworfQorCisvKgorICogcGdfZ2V0 X3RhYmxlX2RkbAorICoJCVJldHVybiBEREwgdG8gcmVjcmVhdGUgYSB0YWJsZSBhcyBhIHNldCBv ZiB0ZXh0IHJvd3MuCisgKi8KK0RhdHVtCitwZ19nZXRfdGFibGVfZGRsKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJRnVuY0NhbGxDb250ZXh0ICpmdW5jY3R4OworCUxpc3QJICAgKnN0YXRlbWVudHM7 CisKKwlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQorCXsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250 ZXh0OworCQlUYWJsZURkbENvbnRleHQgY3R4ID0gezB9OworCQlEZGxPcHRpb24Jb3B0c1tdID0g eworCQkJeyJwcmV0dHkiLCBERExfT1BUX0JPT0x9LAorCQkJeyJvd25lciIsIERETF9PUFRfQk9P TH0sCisJCQl7InRhYmxlc3BhY2UiLCBERExfT1BUX0JPT0x9LAorCQkJeyJzY2hlbWFfcXVhbGlm aWVkIiwgRERMX09QVF9CT09MfSwKKwkJCXsiaW5jbHVkZSIsIERETF9PUFRfVEVYVH0sCisJCQl7 ImV4Y2x1ZGUiLCBERExfT1BUX1RFWFR9LAorCQl9OworCQllbnVtCisJCXsKKwkJCU9QVF9QUkVU VFksCisJCQlPUFRfT1dORVIsCisJCQlPUFRfVEFCTEVTUEFDRSwKKwkJCU9QVF9TQ0hFTUFfUVVB TElGSUVELAorCQkJT1BUX0lOQ0xVREUsCisJCQlPUFRfRVhDTFVERSwKKwkJfTsKKworCQlmdW5j Y3R4ID0gU1JGX0ZJUlNUQ0FMTF9JTklUKCk7CisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8oZnVuY2N0eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4KTsKKworCQlpZiAoUEdfQVJH SVNOVUxMKDApKQorCQl7CisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJ CQlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CisJCX0KKworCQlwYXJzZV9kZGxfb3B0aW9ucyhm Y2luZm8sIDEsIG9wdHMsIGxlbmd0aG9mKG9wdHMpKTsKKworCQlpZiAob3B0c1tPUFRfSU5DTFVE RV0uaXNzZXQgJiYgb3B0c1tPUFRfRVhDTFVERV0uaXNzZXQpCisJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVy cm1zZygiXCJpbmNsdWRlXCIgYW5kIFwiZXhjbHVkZVwiIG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4 Y2x1c2l2ZSIpKSk7CisKKwkJLyoKKwkJICogSW5pdGlhbGl6ZSB0aGUgb3B0aW9uIGZpZWxkcyBv ZiB0aGUgY29udGV4dCB0byB0aGVpciBkZWZhdWx0cworCQkgKiBmaXJzdCwgdGhlbiBvdmVycmlk ZSBvbmx5IHRob3NlIHRoYXQgdGhlIGNhbGxlciBleHBsaWNpdGx5CisJCSAqIHNwZWNpZmllZC4g IEtlZXBpbmcgdGhlIGRlZmF1bHQgdmFsdWVzIGxpdGVyYWwgaGVyZSAocmF0aGVyIHRoYW4KKwkJ ICogZm9sZGVkIGludG8gZWFjaCBvcHRzW10gbG9va3VwKSBtYWtlcyB0aGUgZGVmYXVsdHMgb2J2 aW91cyBpbiBvbmUKKwkJICogcGxhY2UgYW5kIGF2b2lkcyB0aGUgdGVybmFyeS1zb3VwIHRoYXQg bWFkZSB0aGUgcHJldmlvdXMKKwkJICogcG9zaXRpb25hbC1ib29sIGNhbGwgc2l0ZSBlcnJvci1w cm9uZS4KKwkJICovCisJCWN0eC5yZWxpZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJCWN0eC5wcmV0 dHkgPSBmYWxzZTsKKwkJY3R4Lm5vX293bmVyID0gZmFsc2U7CisJCWN0eC5ub190YWJsZXNwYWNl ID0gZmFsc2U7CisJCWN0eC5zY2hlbWFfcXVhbGlmaWVkID0gdHJ1ZTsKKwkJY3R4LmluY2x1ZGVk X2tpbmRzID0gTlVMTDsKKwkJY3R4LmV4Y2x1ZGVkX2tpbmRzID0gTlVMTDsKKworCQlpZiAob3B0 c1tPUFRfUFJFVFRZXS5pc3NldCkKKwkJCWN0eC5wcmV0dHkgPSBvcHRzW09QVF9QUkVUVFldLmJv b2x2YWw7CisJCWlmIChvcHRzW09QVF9PV05FUl0uaXNzZXQpCisJCQljdHgubm9fb3duZXIgPSAh b3B0c1tPUFRfT1dORVJdLmJvb2x2YWw7CisJCWlmIChvcHRzW09QVF9UQUJMRVNQQUNFXS5pc3Nl dCkKKwkJCWN0eC5ub190YWJsZXNwYWNlID0gIW9wdHNbT1BUX1RBQkxFU1BBQ0VdLmJvb2x2YWw7 CisJCWlmIChvcHRzW09QVF9TQ0hFTUFfUVVBTElGSUVEXS5pc3NldCkKKwkJCWN0eC5zY2hlbWFf cXVhbGlmaWVkID0gb3B0c1tPUFRfU0NIRU1BX1FVQUxJRklFRF0uYm9vbHZhbDsKKwkJaWYgKG9w dHNbT1BUX0lOQ0xVREVdLmlzc2V0KQorCQkJY3R4LmluY2x1ZGVkX2tpbmRzID0gcGFyc2Vfa2lu ZF9saXN0KCJpbmNsdWRlIiwKKwkJCQkJCQkJCQkJCSBvcHRzW09QVF9JTkNMVURFXS50ZXh0dmFs KTsKKwkJaWYgKG9wdHNbT1BUX0VYQ0xVREVdLmlzc2V0KQorCQkJY3R4LmV4Y2x1ZGVkX2tpbmRz ID0gcGFyc2Vfa2luZF9saXN0KCJleGNsdWRlIiwKKwkJCQkJCQkJCQkJCSBvcHRzW09QVF9FWENM VURFXS50ZXh0dmFsKTsKKworCQlzdGF0ZW1lbnRzID0gcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5h bCgmY3R4KTsKKwkJZnVuY2N0eC0+dXNlcl9mY3R4ID0gc3RhdGVtZW50czsKKwkJZnVuY2N0eC0+ bWF4X2NhbGxzID0gbGlzdF9sZW5ndGgoc3RhdGVtZW50cyk7CisKKwkJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKworCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgp OworCXN0YXRlbWVudHMgPSAoTGlzdCAqKSBmdW5jY3R4LT51c2VyX2ZjdHg7CisKKwlpZiAoZnVu Y2N0eC0+Y2FsbF9jbnRyIDwgZnVuY2N0eC0+bWF4X2NhbGxzKQorCXsKKwkJY2hhcgkgICAqc3Rt dDsKKworCQlzdG10ID0gbGlzdF9udGgoc3RhdGVtZW50cywgZnVuY2N0eC0+Y2FsbF9jbnRyKTsK KworCQlTUkZfUkVUVVJOX05FWFQoZnVuY2N0eCwgQ1N0cmluZ0dldFRleHREYXR1bShzdG10KSk7 CisJfQorCWVsc2UKKwl7CisJCWxpc3RfZnJlZV9kZWVwKHN0YXRlbWVudHMpOworCQlTUkZfUkVU VVJOX0RPTkUoZnVuY2N0eCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19pbmhlcml0cy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhlcml0cy5oCmluZGV4 IGNjODc0YWJhYWJiLi4xZTQ2M2IwMTA2ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19pbmhlcml0cy5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaApA QCAtNTUsNiArNTUsNyBAQCBERUNMQVJFX0lOREVYKHBnX2luaGVyaXRzX3BhcmVudF9pbmRleCwg MjE4NywgSW5oZXJpdHNQYXJlbnRJbmRleElkLCBwZ19pbmhlcml0cwogZXh0ZXJuIExpc3QgKmZp bmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4oT2lkIHBhcmVudHJlbElkLCBMT0NLTU9ERSBsb2NrbW9k ZSk7CiBleHRlcm4gTGlzdCAqZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbl9leHRlbmRlZChPaWQg cGFyZW50cmVsSWQsIGJvb2wgb21pdF9kZXRhY2hlZCwKIAkJCQkJCQkJCQkJCUxPQ0tNT0RFIGxv Y2ttb2RlLCBib29sICpkZXRhY2hlZF9leGlzdCwgVHJhbnNhY3Rpb25JZCAqZGV0YWNoZWRfeG1p bik7CitleHRlcm4gTGlzdCAqZmluZF9pbmhlcml0YW5jZV9wYXJlbnRzKE9pZCByZWxpZCwgTE9D S01PREUgbG9ja21vZGUpOwogCiBleHRlcm4gTGlzdCAqZmluZF9hbGxfaW5oZXJpdG9ycyhPaWQg cGFyZW50cmVsSWQsIExPQ0tNT0RFIGxvY2ttb2RlLAogCQkJCQkJCQkgTGlzdCAqKm51bXBhcmVu dHMpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggYmUxNTdhNWZiZTkuLmQxM2NmMTBlYjQz IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTg2MTUsNiArODYxNSwxMyBAQAogICBwcm9h cmd0eXBlcyA9PiAncmVnZGF0YWJhc2UgdGV4dCcsIHByb2FsbGFyZ3R5cGVzID0+ICd7cmVnZGF0 YWJhc2UsdGV4dH0nLAogICBwcm9hcmdtb2RlcyA9PiAne2ksdn0nLCBwcm9hcmdkZWZhdWx0cyA9 PiAne05VTEx9JywKICAgcHJvc3JjID0+ICdwZ19nZXRfZGF0YWJhc2VfZGRsJyB9LAoreyBvaWQg PT4gJzgyMTUnLCBkZXNjciA9PiAnZ2V0IERETCB0byByZWNyZWF0ZSBhIHRhYmxlJywKKyAgcHJv bmFtZSA9PiAncGdfZ2V0X3RhYmxlX2RkbCcsIHByb3Jvd3MgPT4gJzUwJywgcHJvdmFyaWFkaWMg PT4gJ3RleHQnLAorICBwcm9pc3N0cmljdCA9PiAnZicsIHByb3JldHNldCA9PiAndCcsIHByb3Zv bGF0aWxlID0+ICdzJywgcHJvcGFyYWxsZWwgPT4gJ3InLAorICBwcm9uYXJnZGVmYXVsdHMgPT4g JzEnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJ3JlZ2NsYXNzIF90 ZXh0JywgcHJvYWxsYXJndHlwZXMgPT4gJ3tyZWdjbGFzcyxfdGV4dH0nLAorICBwcm9hcmdtb2Rl cyA9PiAne2ksdn0nLCBwcm9hcmdkZWZhdWx0cyA9PiAne05VTEx9JywKKyAgcHJvc3JjID0+ICdw Z19nZXRfdGFibGVfZGRsJyB9LAogeyBvaWQgPT4gJzI1MDknLAogICBkZXNjciA9PiAnZGVwYXJz ZSBhbiBlbmNvZGVkIGV4cHJlc3Npb24gd2l0aCBwcmV0dHktcHJpbnQgb3B0aW9uJywKICAgcHJv bmFtZSA9PiAncGdfZ2V0X2V4cHInLCBwcm92b2xhdGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4g J3RleHQnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdGFibGVjbWRzLmggYi9z cmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMuaAppbmRleCBjM2Q4NTE4Y2I2Mi4uZDMzNTYz ZmRlYWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCisrKyBi L3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCkBAIC05Miw2ICs5Miw3IEBAIGV4dGVy biB2b2lkIGNoZWNrX29mX3R5cGUoSGVhcFR1cGxlIHR5cGV0dXBsZSk7CiAKIGV4dGVybiB2b2lk IHJlZ2lzdGVyX29uX2NvbW1pdF9hY3Rpb24oT2lkIHJlbGlkLCBPbkNvbW1pdEFjdGlvbiBhY3Rp b24pOwogZXh0ZXJuIHZvaWQgcmVtb3ZlX29uX2NvbW1pdF9hY3Rpb24oT2lkIHJlbGlkKTsKK2V4 dGVybiBPbkNvbW1pdEFjdGlvbiBnZXRfb25fY29tbWl0X2FjdGlvbihPaWQgcmVsaWQpOwogCiBl eHRlcm4gdm9pZCBQcmVDb21taXRfb25fY29tbWl0X2FjdGlvbnModm9pZCk7CiBleHRlcm4gdm9p ZCBBdEVPWGFjdF9vbl9jb21taXRfYWN0aW9ucyhib29sIGlzQ29tbWl0KTsKQEAgLTEwOCw0ICsx MDksNiBAQCBleHRlcm4gdm9pZCBSYW5nZVZhckNhbGxiYWNrT3duc1JlbGF0aW9uKGNvbnN0IFJh bmdlVmFyICpyZWxhdGlvbiwKIGV4dGVybiBib29sIFBhcnRDb25zdHJhaW50SW1wbGllZEJ5UmVs Q29uc3RyYWludChSZWxhdGlvbiBzY2FucmVsLAogCQkJCQkJCQkJCQkJIExpc3QgKnBhcnRDb25z dHJhaW50KTsKIAorZXh0ZXJuIGNvbnN0IGNoYXIgKnN0b3JhZ2VfbmFtZShjaGFyIGMpOworCiAj ZW5kaWYJCQkJCQkJLyogVEFCTEVDTURTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3BnX2dldF90YWJsZV9kZGwub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi4yMDBhY2VkN2E3MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5vdXQKQEAgLTAsMCArMSw4ODUgQEAKKy0tCistLSBw Z19nZXRfdGFibGVfZGRsCistLQorLS0gQWxsIHRlc3RzIHBhc3Mgb3duZXI9PmZhbHNlIHNvIHRo ZSBBTFRFUiBUQUJMRSBPV05FUiBUTyBsaW5lIGlzIG5vdAorLS0gZW1pdHRlZCwga2VlcGluZyBv dXRwdXQgc3RhYmxlIGFjcm9zcyB0ZXN0IHJ1bm5lcnMgKHdoaWNoIG1heSBydW4gdW5kZXIKKy0t IGRpZmZlcmVudCByb2xlIG5hbWVzKS4KKy0tCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF90ZXN0 OworU0VUIHNlYXJjaF9wYXRoID0gcGd0YmxfZGRsX3Rlc3Q7CistLSBCYXNpYyB0YWJsZSB3aXRo IFBSSU1BUlkgS0VZLCBOT1QgTlVMTCwgREVGQVVMVCwgQ09MTEFURS4KK0NSRUFURSBUQUJMRSBi YXNpYyAoCisgICAgaWQgaW50IFBSSU1BUlkgS0VZLAorICAgIG5hbWUgdGV4dCBOT1QgTlVMTCBE RUZBVUxUICdhbm9uJyBDT0xMQVRFICJDIgorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBw Z3RibF9kZGxfdGVzdC5iYXNpYyAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0IENPTExB VEUgIkMiIERFRkFVTFQgJ2Fub24nOjp0ZXh0IE5PVCBOVUxMKTsKKyBBTFRFUiBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5iYXNpYyBBREQgQ09OU1RSQUlOVCBiYXNpY19wa2V5IFBSSU1BUlkgS0VZIChp ZCk7CisoMiByb3dzKQorCistLSBJZGVudGl0eSBjb2x1bW5zICh3aXRoIGRlZmF1bHQgYW5kIGN1 c3RvbSBzZXF1ZW5jZSBvcHRpb25zKS4KK0NSRUFURSBUQUJMRSBpZF9jb2xzICgKKyAgICBpZF9h bHdheXMgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFksCisgICAgaWRfZGVmYXVsdCBp bnQgR0VORVJBVEVEIEJZIERFRkFVTFQgQVMgSURFTlRJVFkKKyk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2lkX2NvbHMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3Rlc3QuaWRfY29scyAoaWRfYWx3YXlzIGludGVnZXIgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVO VElUWSBOT1QgTlVMTCwgaWRfZGVmYXVsdCBpbnRlZ2VyIEdFTkVSQVRFRCBCWSBERUZBVUxUIEFT IElERU5USVRZIE5PVCBOVUxMKTsKKygxIHJvdykKKworQ1JFQVRFIFRBQkxFIGlkX2N1c3RvbSAo CisgICAgdiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSAoCisgICAgICAgIFNFUVVF TkNFIE5BTUUgaWRfY3VzdG9tX3Zfc2VxCisgICAgICAgIFNUQVJUIFdJVEggMTAwIElOQ1JFTUVO VCBCWSA1CisgICAgICAgIE1JTlZBTFVFIDUwIE1BWFZBTFVFIDEwMDAKKyAgICAgICAgQ0FDSEUg MTAgQ1lDTEUKKyAgICApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZF9j dXN0b20nOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lmlk X2N1c3RvbSAodiBpbnRlZ2VyIEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgKFNUQVJUIFdJ VEggMTAwIElOQ1JFTUVOVCBCWSA1IE1JTlZBTFVFIDUwIE1BWFZBTFVFIDEwMDAgQ0FDSEUgMTAg Q1lDTEUpIE5PVCBOVUxMKTsKKygxIHJvdykKKworLS0gR2VuZXJhdGVkIHN0b3JlZCBjb2x1bW4u CitDUkVBVEUgVEFCTEUgZ2VuX2NvbHMgKAorICAgIGNlbnRzIGludCwKKyAgICBkb2xsYXJzIG51 bWVyaWMgR0VORVJBVEVEIEFMV0FZUyBBUyAoY2VudHMgLyAxMDAuMCkgU1RPUkVECispOworU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdnZW5fY29scyc6OnJlZ2NsYXNzLCAnb3duZXIn LCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJM RSBwZ3RibF9kZGxfdGVzdC5nZW5fY29scyAoY2VudHMgaW50ZWdlciwgZG9sbGFycyBudW1lcmlj IEdFTkVSQVRFRCBBTFdBWVMgQVMgKCgoY2VudHMpOjpudW1lcmljIC8gMTAwLjApKSBTVE9SRUQp OworKDEgcm93KQorCistLSBTVE9SQUdFIGFuZCBDT01QUkVTU0lPTiAob25seSBlbWl0dGVkIHdo ZW4gbm9uLWRlZmF1bHQgZm9yIHRoZSB0eXBlKS4KK0NSRUFURSBUQUJMRSBzdG9yYWdlX2NvbHMg KAorICAgIGEgdGV4dCBTVE9SQUdFIEVYVEVSTkFMLAorICAgIGIgdGV4dCBTVE9SQUdFIE1BSU4s CisgICAgYyB0ZXh0IENPTVBSRVNTSU9OIHBnbHoKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3N0b3JhZ2VfY29scyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Quc3RvcmFnZV9jb2xzIChhIHRleHQgU1RP UkFHRSBFWFRFUk5BTCwgYiB0ZXh0IFNUT1JBR0UgTUFJTiwgYyB0ZXh0IENPTVBSRVNTSU9OIHBn bHopOworKDEgcm93KQorCistLSBDb25zdHJhaW50czogQ0hFQ0ssIFVOSVFVRSwgRk9SRUlHTiBL RVkgKERFRkVSUkFCTEUpLgorQ1JFQVRFIFRBQkxFIHJlZmQgKGlkIGludCBQUklNQVJZIEtFWSk7 CitDUkVBVEUgVEFCTEUgY29ucyAoCisgICAgYSBpbnQgQ0hFQ0sgKGEgPiAwKSwKKyAgICBiIGlu dCBVTklRVUUsCisgICAgYyBpbnQgUkVGRVJFTkNFUyByZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJ QUxMWSBERUZFUlJFRAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6 OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyAoYSBpbnRlZ2VyLCBiIGludGVn ZXIsIGMgaW50ZWdlciwgQ09OU1RSQUlOVCBjb25zX2FfY2hlY2sgQ0hFQ0sgKChhID4gMCkpKTsK KyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJBSU5UIGNvbnNfYl9r ZXkgVU5JUVVFIChiKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05T VFJBSU5UIGNvbnNfY19ma2V5IEZPUkVJR04gS0VZIChjKSBSRUZFUkVOQ0VTIHJlZmQoaWQpIERF RkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVEOworKDMgcm93cykKKworLS0gSW5kZXhlczogZnVu Y3Rpb25hbCBhbmQgcGFydGlhbC4gIENvbnN0cmFpbnQtYmFja2luZyBpbmRleGVzIGFyZQorLS0g c3VwcHJlc3NlZCAodGhleSBhcmUgZW1pdHRlZCBieSB0aGUgY29uc3RyYWludCBsb29wKS4KK0NS RUFURSBUQUJMRSBpZHhkIChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7CitDUkVBVEUg SU5ERVggaWR4ZF9sb3dlciBPTiBpZHhkIChsb3dlcihuYW1lKSk7CitDUkVBVEUgSU5ERVggaWR4 ZF9wYXJ0aWFsIE9OIGlkeGQgKGlkKSBXSEVSRSBpZCA+IDEwMDsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBD UkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFt ZSB0ZXh0KTsKKyBDUkVBVEUgSU5ERVggaWR4ZF9sb3dlciBPTiBwZ3RibF9kZGxfdGVzdC5pZHhk IFVTSU5HIGJ0cmVlIChsb3dlcihuYW1lKSk7CisgQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBP TiBwZ3RibF9kZGxfdGVzdC5pZHhkIFVTSU5HIGJ0cmVlIChpZCkgV0hFUkUgKGlkID4gMTAwKTsK KyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIEFERCBDT05TVFJBSU5UIGlkeGRfcGtl eSBQUklNQVJZIEtFWSAoaWQpOworKDQgcm93cykKKworLS0gSW5oZXJpdGFuY2UsIGluY2x1ZGlu ZyBhIGNoaWxkIERFRkFVTFQgb3ZlcnJpZGUgb24gYW4gaW5oZXJpdGVkIGNvbHVtbi4KK0NSRUFU RSBUQUJMRSBwYXIgKGEgaW50IERFRkFVTFQgMSwgYiB0ZXh0KTsKK0NSRUFURSBUQUJMRSBjaCAo YyBpbnQpIElOSEVSSVRTIChwYXIpOworQUxURVIgVEFCTEUgY2ggQUxURVIgQ09MVU1OIGEgU0VU IERFRkFVTFQgOTk5OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2Ns YXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNoIChjIGludGVnZXIpIElOSEVS SVRTIChwZ3RibF9kZGxfdGVzdC5wYXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNo IEFMVEVSIENPTFVNTiBhIFNFVCBERUZBVUxUIDk5OTsKKygyIHJvd3MpCisKKy0tIFBlci1jb2x1 bW4gYXR0b3B0aW9uczogZW1pdHRlZCBhcyBBTFRFUiBDT0xVTU4gU0VUICguLi4pLgorQ1JFQVRF IFRBQkxFIGF0dG9wdCAoYSBpbnQsIGIgdGV4dCk7CitBTFRFUiBUQUJMRSBhdHRvcHQgQUxURVIg Q09MVU1OIGEgU0VUIChuX2Rpc3RpbmN0ID0gMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgnYXR0b3B0Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0 LmF0dG9wdCAoYSBpbnRlZ2VyLCBiIHRleHQpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0 LmF0dG9wdCBBTFRFUiBDT0xVTU4gYSBTRVQgKG5fZGlzdGluY3Q9JzEwMCcpOworKDIgcm93cykK KworLS0gUGFydGl0aW9uZWQgdGFibGUgcGFyZW50IChSQU5HRSBhbmQgSEFTSCkuCitDUkVBVEUg VEFCTEUgcGFydGVkX3JhbmdlIChpZCBpbnQsIGsgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlk KTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlJzo6cmVnY2xh c3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2UgKGlkIGludGVnZXIsIGsgaW50ZWdlcikgUEFSVElUSU9O IEJZIFJBTkdFIChpZCk7CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaGFzaCAoaWQg aW50KSBQQVJUSVRJT04gQlkgSEFTSCAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdwYXJ0ZWRfaGFzaCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF90ZXN0LnBhcnRlZF9oYXNoIChpZCBpbnRlZ2VyKSBQQVJUSVRJT04gQlkgSEFTSCAoaWQp OworKDEgcm93KQorCistLSBQYXJ0aXRpb24gY2hpbGRyZW46IEZST00vVE8sIFdJVEggKG1vZHVs dXMsIHJlbWFpbmRlciksIERFRkFVTFQuCitDUkVBVEUgVEFCTEUgcGFydGVkX3JhbmdlXzEgUEFS VElUSU9OIE9GIHBhcnRlZF9yYW5nZQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7 CitBTFRFUiBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBBTFRFUiBDT0xVTU4gayBTRVQgREVGQVVMVCA3 OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2VfMSc6OnJlZ2Ns YXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rl c3QucGFydGVkX3JhbmdlXzEgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5n ZSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90 ZXN0LnBhcnRlZF9yYW5nZV8xIEFMVEVSIENPTFVNTiBrIFNFVCBERUZBVUxUIDc7CisoMiByb3dz KQorCitDUkVBVEUgVEFCTEUgcGFydGVkX2hhc2hfMCBQQVJUSVRJT04gT0YgcGFydGVkX2hhc2gK KyAgICBGT1IgVkFMVUVTIFdJVEggKG1vZHVsdXMgMiwgcmVtYWluZGVyIDApOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfaGFzaF8wJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF90ZXN0LnBhcnRlZF9oYXNoXzAgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRl ZF9oYXNoIEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAyLCByZW1haW5kZXIgMCk7CisoMSByb3cp CisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFu Z2UgREVGQVVMVDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3Jhbmdl X2RlZic6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZV9kZWYgUEFSVElU SU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZSBERUZBVUxUOworKDEgcm93KQorCist LSBSdWxlcy4KK0NSRUFURSBUQUJMRSBydCAoaWQgaW50KTsKK0NSRUFURSBUQUJMRSBydF9sb2cg KGlkIGludCk7CitDUkVBVEUgUlVMRSBydF9sb2dfaW5zZXJ0IEFTIE9OIElOU0VSVCBUTyBydAor ICAgIERPIEFMU08gSU5TRVJUIElOVE8gcnRfbG9nIFZBTFVFUyAoTkVXLmlkKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncnQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7 CisgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJ0IChpZCBp bnRlZ2VyKTsKKyBDUkVBVEUgUlVMRSBydF9sb2dfaW5zZXJ0IEFTICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICsKKyAgICAgT04gSU5TRVJUIFRPIHBndGJsX2RkbF90ZXN0LnJ0IERP ICBJTlNFUlQgSU5UTyBydF9sb2cgKGlkKSsKKyAgIFZBTFVFUyAobmV3LmlkKTsKKygyIHJvd3Mp CisKKy0tIEV4dGVuZGVkIHN0YXRpc3RpY3MuCitDUkVBVEUgVEFCTEUgc3R4IChhIGludCwgYiBp bnQsIGMgaW50KTsKK0NSRUFURSBTVEFUSVNUSUNTIHN0eF9uZHYgKG5kaXN0aW5jdCkgT04gYSwg YiBGUk9NIHN0eDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xh c3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Quc3R4IChhIGludGVnZXIsIGIgaW50ZWdlciwg YyBpbnRlZ2VyKTsKKyBDUkVBVEUgU1RBVElTVElDUyBwZ3RibF9kZGxfdGVzdC5zdHhfbmR2IChu ZGlzdGluY3QpIE9OIGEsIGIgRlJPTSBzdHg7CisoMiByb3dzKQorCistLSBSb3ctbGV2ZWwgc2Vj dXJpdHkgdG9nZ2xlcy4KK0NSRUFURSBUQUJMRSBybHMgKGlkIGludCk7CitBTFRFUiBUQUJMRSBy bHMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsKK0FMVEVSIFRBQkxFIHJscyBGT1JDRSBST1cg TEVWRUwgU0VDVVJJVFk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jscyc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90 YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9k ZGxfdGVzdC5ybHMgKGlkIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJs cyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0 LnJscyBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFk7CisoMyByb3dzKQorCistLSBSRVBMSUNBIElE RU5USVRZOiBlbWl0dGVkIG9ubHkgd2hlbiBub3QgdGhlIGRlZmF1bHQuCitDUkVBVEUgVEFCTEUg cmlfZnVsbCAoYSBpbnQpOworQUxURVIgVEFCTEUgcmlfZnVsbCBSRVBMSUNBIElERU5USVRZIEZV TEw7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2Z1bGwnOjpyZWdjbGFzcywg J293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRs ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu cmlfZnVsbCAoYSBpbnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9mdWxs IFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKKygyIHJvd3MpCisKK0NSRUFURSBUQUJMRSByaV9pZHgg KGEgaW50IE5PVCBOVUxMKTsKK0NSRUFURSBVTklRVUUgSU5ERVggcmlfaWR4X2EgT04gcmlfaWR4 IChhKTsKK0FMVEVSIFRBQkxFIHJpX2lkeCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJp X2lkeF9hOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9pZHgnOjpyZWdjbGFz cywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfaWR4IChhIGludGVnZXIgTk9UIE5V TEwpOworIENSRUFURSBVTklRVUUgSU5ERVggcmlfaWR4X2EgT04gcGd0YmxfZGRsX3Rlc3Qucmlf aWR4IFVTSU5HIGJ0cmVlIChhKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9pZHgg UkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9pZHhfYTsKKygzIHJvd3MpCisKKy0tIFVO TE9HR0VEICsgcmVsb3B0aW9ucy4KK0NSRUFURSBVTkxPR0dFRCBUQUJMRSB1bm8gKGlkIGludCkg V0lUSCAoZmlsbGZhY3RvciA9IDcwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn dW5vJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBVTkxPR0dFRCBUQUJMRSBwZ3RibF9k ZGxfdGVzdC51bm8gKGlkIGludGVnZXIpIFdJVEggKGZpbGxmYWN0b3I9JzcwJyk7CisoMSByb3cp CisKKy0tIFR5cGVkIHRhYmxlIChDUkVBVEUgVEFCTEUgT0YgdHlwZV9uYW1lKS4gIENvbHVtbnMg aW5oZXJpdGVkIGZyb20gdGhlCistLSB0eXBlIGVtaXQgbm90aGluZzsgbG9jYWxseS1hcHBsaWVk IERFRkFVTFQsIE5PVCBOVUxMIGFuZCBDSEVDSyBjb21lCistLSBvdXQgdGhyb3VnaCBhIHNpbmds ZSAiKGNvbCBXSVRIIE9QVElPTlMgLi4uKSIgbGlzdC4KK0NSRUFURSBUWVBFIHR5cGVkX3QgQVMg KGEgaW50LCBiIHRleHQpOworQ1JFQVRFIFRBQkxFIHR5cGVkX3BsYWluIE9GIHR5cGVkX3Q7CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3R5cGVkX3BsYWluJzo6cmVnY2xhc3MsICdv d25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxF IHBndGJsX2RkbF90ZXN0LnR5cGVkX3BsYWluIE9GIHBndGJsX2RkbF90ZXN0LnR5cGVkX3Q7Ciso MSByb3cpCisKK0NSRUFURSBUQUJMRSB0eXBlZF9vdmVyIE9GIHR5cGVkX3QgKAorICAgIGEgV0lU SCBPUFRJT05TIERFRkFVTFQgNyBOT1QgTlVMTCwKKyAgICBiIFdJVEggT1BUSU9OUyBOT1QgTlVM TCwKKyAgICBDT05TVFJBSU5UIGJfbm9uZW1wdHkgQ0hFQ0sgKGxlbmd0aChiKSA+IDApCispOwor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0eXBlZF9vdmVyJzo6cmVnY2xhc3MsICdv d25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVz dC50eXBlZF9vdmVyIE9GIHBndGJsX2RkbF90ZXN0LnR5cGVkX3QgKGEgV0lUSCBPUFRJT05TIERF RkFVTFQgNyBOT1QgTlVMTCwgYiBXSVRIIE9QVElPTlMgTk9UIE5VTEwsIENPTlNUUkFJTlQgYl9u b25lbXB0eSBDSEVDSyAoKGxlbmd0aChiKSA+IDApKSk7CisoMSByb3cpCisKKy0tIFRlbXBvcmFy eSB0YWJsZXMgKyBPTiBDT01NSVQuICBUZW1wIHRhYmxlcyBsaXZlIGluIGEgc2Vzc2lvbi1sb2Nh bAorLS0gbmFtZXNwYWNlIHdob3NlIG5hbWUgdmFyaWVzIGJldHdlZW4gcnVucywgc28gd2Ugc3Ry aXAgdGhlIHNjaGVtYQorLS0gcHJlZml4LiAgT04gQ09NTUlUIERST1Agb25seSBmaXJlcyBhdCBj b21taXQsIHNvIHRoZSBxdWVyaWVzIHRoYXQKKy0tIG5lZWQgdG8gc2VlIHRoZSBjYXRhbG9nIGVu dHJ5IG11c3QgcnVuIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIGFzCistLSB0aGUgQ1JFQVRFLgor QkVHSU47CitDUkVBVEUgVEVNUCBUQUJMRSB0ZW1wX2RlZmF1bHQgKGlkIGludCk7CitDUkVBVEUg VEVNUCBUQUJMRSB0ZW1wX2RlbGV0ZSAoaWQgaW50KSBPTiBDT01NSVQgREVMRVRFIFJPV1M7CitD UkVBVEUgVEVNUCBUQUJMRSB0ZW1wX2Ryb3AgKGlkIGludCkgT04gQ09NTUlUIERST1A7CitTRUxF Q1QgcmVnZXhwX3JlcGxhY2UobGluZSwgJyI/cGdfdGVtcF8/WzAtOV0rIj9cLicsICdwZ190ZW1w LicpIEFTIGxpbmUKK0ZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9kZWZhdWx0Jzo6cmVnY2xh c3MsICdvd25lcicsICdmYWxzZScpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAnQ1JFQVRFICUn OworICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSBwZ190ZW1wLnRlbXBfZGVmYXVsdCAo aWQgaW50ZWdlcik7CisoMSByb3cpCisKK1NFTEVDVCByZWdleHBfcmVwbGFjZShsaW5lLCAnIj9w Z190ZW1wXz9bMC05XSsiP1wuJywgJ3BnX3RlbXAuJykgQVMgbGluZQorRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCd0ZW1wX2RlbGV0ZSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKSBBUyBsaW5l CitXSEVSRSBsaW5lIExJS0UgJ0NSRUFURSAlJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBURU1QT1JBUlkgVEFCTEUgcGdfdGVtcC50 ZW1wX2RlbGV0ZSAoaWQgaW50ZWdlcikgT04gQ09NTUlUIERFTEVURSBST1dTOworKDEgcm93KQor CitTRUxFQ1QgcmVnZXhwX3JlcGxhY2UobGluZSwgJyI/cGdfdGVtcF8/WzAtOV0rIj9cLicsICdw Z190ZW1wLicpIEFTIGxpbmUKK0ZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9kcm9wJzo6cmVn Y2xhc3MsICdvd25lcicsICdmYWxzZScpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAnQ1JFQVRF ICUnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRFTVBPUkFSWSBU QUJMRSBwZ190ZW1wLnRlbXBfZHJvcCAoaWQgaW50ZWdlcikgT04gQ09NTUlUIERST1A7CisoMSBy b3cpCisKK1JPTExCQUNLOworLS0gUHJldHR5IG1vZGUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsICdwcmV0dHknLCAn dHJ1ZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBD UkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYmFzaWMgKCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKworICAgICBpZCBpbnRlZ2VyIE5PVCBOVUxMLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgIG5hbWUgdGV4 dCBDT0xMQVRFICJDIiBERUZBVUxUICdhbm9uJzo6dGV4dCBOT1QgTlVMTCAgICAgICAgICAgICAg ICAgICAgICsKKyApOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmJhc2ljIEFERCBDT05T VFJBSU5UIGJhc2ljX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygyIHJvd3MpCisKKy0tIFZBUklB RElDIEFSUkFZWy4uLl0gY2FsbCBmb3JtOiBvcHRpb24gcGFpcnMgY2FuIGJlIHBhc3NlZCBhcyBh IHNpbmdsZQorLS0gdGV4dFtdIHRhZ2dlZCB3aXRoIFZBUklBRElDLCBpbiBhZGRpdGlvbiB0byB0 aGUgcG9zaXRpb25hbCBzcGVsbGluZworLS0gZXhlcmNpc2VkIGFib3ZlLiAgVGhpcyByZXF1aXJl cyBwcm9hcmd0eXBlcyB0byBkZWNsYXJlIHRoZSB2YXJpYWRpYworLS0gYXJndW1lbnQgYXMgdGhl IGFycmF5IHR5cGUgKF90ZXh0KS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFz aWMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQVJJQURJQyBB UlJBWVsnb3duZXInLCAnZmFsc2UnXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5iYXNp YyAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0IENPTExBVEUgIkMiIERFRkFVTFQgJ2Fu b24nOjp0ZXh0IE5PVCBOVUxMKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5iYXNpYyBB REQgQ09OU1RSQUlOVCBiYXNpY19wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMiByb3dzKQorCitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVkFSSUFESUMgQVJSQVlbJ293bmVyJywgJ2ZhbHNlJywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJldHR5Jywg J3RydWUnXTo6dGV4dFtdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmJhc2ljICggICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgaWQgaW50ZWdlciBOT1QgTlVMTCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAg ICBuYW1lIHRleHQgQ09MTEFURSAiQyIgREVGQVVMVCAnYW5vbic6OnRleHQgTk9UIE5VTEwgICAg ICAgICAgICAgICAgICAgICArCisgKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5iYXNp YyBBREQgQ09OU1RSQUlOVCBiYXNpY19wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMiByb3dzKQor CistLSBWQVJJQURJQyBOVUxMOjp0ZXh0W10gaXMgZXF1aXZhbGVudCB0byBvbWl0dGluZyB0aGUg dmFyaWFkaWMgYXJndW1lbnRzOworLS0gY2hlY2sgdGhlIHJvdyBjb3VudCByYXRoZXIgdGhhbiB0 aGUgcm93cyB0aGVtc2VsdmVzLCBiZWNhdXNlIHdpdGhvdXQKKy0tICdvd25lcicsICdmYWxzZScg dGhlIG91dHB1dCBjb250YWlucyBhbiBBTFRFUiBUQUJMRSAuLi4gT1dORVIgVE8gbGluZQorLS0g dGhhdCB2YXJpZXMgYWNyb3NzIHRlc3QgcnVubmVycy4KK1NFTEVDVCBjb3VudCgqKSA+IDAgQVMg b2sKKyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBWQVJJQURJQyBO VUxMOjp0ZXh0W10pOworIG9rIAorLS0tLQorIHQKKygxIHJvdykKKworLS0gaW5jbHVkZSAvIGV4 Y2x1ZGUgZ2F0aW5nOiBlYWNoIGVtaXRzIGVpdGhlciBvbmx5IHRoZSBsaXN0ZWQga2luZHMKKy0t IChpbmNsdWRlKSBvciBldmVyeSBraW5kIGV4Y2VwdCB0aGUgbGlzdGVkIG9uZXMgKGV4Y2x1ZGUp LiAgVGhlIHR3bworLS0gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gIEtpbmQgdm9jYWJ1bGFyeTog dGFibGUsIGluZGV4ZXMsCistLSBwcmltYXJ5X2tleSwgdW5pcXVlLCBjaGVjaywgZm9yZWlnbl9r ZXlzLCBleGNsdXNpb24sIHJ1bGVzLAorLS0gc3RhdGlzdGljcywgdHJpZ2dlcnMsIHBvbGljaWVz LCBybHMsIHJlcGxpY2FfaWRlbnRpdHksIHBhcnRpdGlvbnMuCistLSBOT1QgTlVMTCBpcyBub3Qg aW4gdGhlIHZvY2FidWxhcnkgLSBhbHdheXMgZW1pdHRlZCB0byBwcmV2ZW50CistLSBwcm9kdWNp bmcgc2NoZW1hcyB0aGF0IHNpbGVudGx5IGFjY2VwdCBOVUxMcyB0aGUgc291cmNlIHdvdWxkCist LSBoYXZlIHJlamVjdGVkLgorLS0KKy0tIGV4Y2x1ZGU9aW5kZXhlcyBoaWRlcyB0aGUgQ1JFQVRF IElOREVYIHN0YXRlbWVudHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQn OjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnZXhjbHVkZScsICdpbmRleGVzJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgKGlkIGludGVn ZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4 ZCBBREQgQ09OU1RSQUlOVCBpZHhkX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygyIHJvd3MpCisK Ky0tIGV4Y2x1ZGU9cHJpbWFyeV9rZXksdW5pcXVlLGNoZWNrLGZvcmVpZ25fa2V5cyxleGNsdXNp b24gaGlkZXMgZXZlcnkKKy0tIHRhYmxlLWxldmVsIGNvbnN0cmFpbnQuICBJbmxpbmUgQ0hFQ0sg aW4gdGhlIENSRUFURSBUQUJMRSBib2R5IGlzCistLSBzdXBwcmVzc2VkIHRvby4KK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2Un LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNsdWRlJywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAncHJpbWFyeV9rZXksdW5pcXVlLGNoZWNrLGZvcmVpZ25fa2V5 cyxleGNsdXNpb24nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxF IHBndGJsX2RkbF90ZXN0LmNvbnMgKGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIpOwor KDEgcm93KQorCistLSBleGNsdWRlPWZvcmVpZ25fa2V5cyBzdXBwcmVzc2VzIG9ubHkgRk9SRUlH TiBLRVkgY29uc3RyYWludHM7CistLSBQUklNQVJZIEtFWSwgVU5JUVVFLCBDSEVDSywgYW5kIG5h bWVkIE5PVCBOVUxMIHN0YXkuICBUaGlzIGlzIHRoZQorLS0gZmlyc3QgcGFzcyBvZiB0aGUgdHdv LXBhc3MgRkstY2xvbmUgd29ya2Zsb3c6IGVtaXQgdGFibGVzIHdpdGhvdXQKKy0tIGNyb3NzLXRh YmxlIEZLcywgbG9hZCBkYXRhLCB0aGVuIHJlLXJ1biB3aXRoIGluY2x1ZGU9Zm9yZWlnbl9rZXlz CistLSB0byBhZGQgdGhlbSBvbmNlIGFsbCB0YXJnZXRzIGV4aXN0LgorU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2x1ZGUnLCAnZm9yZWlnbl9rZXlzJyk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJs ZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyAoYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50 ZWdlciwgQ09OU1RSQUlOVCBjb25zX2FfY2hlY2sgQ0hFQ0sgKChhID4gMCkpKTsKKyBBTFRFUiBU QUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJBSU5UIGNvbnNfYl9rZXkgVU5JUVVF IChiKTsKKygyIHJvd3MpCisKKy0tIGluY2x1ZGU9Zm9yZWlnbl9rZXlzIGlzIHRoZSBzZWNvbmQg cGFzcyBvZiB0aGUgdHdvLXBhc3MgRkstY2xvbmUKKy0tIHdvcmtmbG93OiBlbWl0IG9ubHkgdGhl IEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCAuLi4gRk9SRUlHTgorLS0gS0VZIHJvd3M7 IHRoZSBDUkVBVEUgVEFCTEUgYW5kIGV2ZXJ5IG5vbi1GSyBzdWItb2JqZWN0IGFyZQorLS0gc3Vw cHJlc3NlZCAodGhlIHRhYmxlIGFscmVhZHkgZXhpc3RzIGZyb20gdGhlIGZpcnN0IHBhc3MpLgor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGUnLCAnZm9y ZWlnbl9rZXlzJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUg cGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RSQUlOVCBjb25zX2NfZmtleSBGT1JFSUdOIEtF WSAoYykgUkVGRVJFTkNFUyByZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRDsK KygxIHJvdykKKworLS0gQSB0YWJsZSB3aXRoIG5vIGZvcmVpZ24ga2V5cyBwcm9kdWNlcyBubyBy b3dzIHVuZGVyCistLSBpbmNsdWRlPWZvcmVpZ25fa2V5cy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgncmVmZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlJywgJ2ZvcmVpZ25fa2V5cycpOworIHBnX2dl dF90YWJsZV9kZGwgCistLS0tLS0tLS0tLS0tLS0tLS0KKygwIHJvd3MpCisKKy0tIGluY2x1ZGU9 dGFibGUgZW1pdHMgb25seSB0aGUgYmFyZSBDUkVBVEUgVEFCTEUgKHdpdGggYW55IGlubGluZQor LS0gY29sdW1uLWxldmVsIE5PVCBOVUxMIGFuZCBDSEVDSykgLSBubyBpbmRleGVzLCBubyBQUklN QVJZIEtFWSBBTFRFUiwKKy0tIG5vIG90aGVyIHN1Yi1vYmplY3RzLiAgVXNlZnVsIGZvciBjYXB0 dXJpbmcgYSB0YWJsZSdzIHNoYXBlIHdpdGhvdXQKKy0tIHB1bGxpbmcgaW4gZXZlcnl0aGluZyBh dHRhY2hlZCB0byBpdC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdpbmNsdWRlJywgJ3RhYmxlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90 YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg VEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0 KTsKKygxIHJvdykKKworLS0gaW5jbHVkZSBhbmQgZXhjbHVkZSBhcmUgbXV0dWFsbHkgZXhjbHVz aXZlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsICdv d25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGUn LCAnZm9yZWlnbl9rZXlzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjbHVk ZScsICdmb3JlaWduX2tleXMnKTsKK0VSUk9SOiAgImluY2x1ZGUiIGFuZCAiZXhjbHVkZSIgb3B0 aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlCistLSBQdWIvc3ViIHNjaGVtYSBjbG9uZToga2Vl cCB0aGUgdGFibGUgYW5kIGl0cyBwcmltYXJ5IGtleSwgZHJvcCB0aGUKKy0tIHJlc3Qgb2YgdGhl IGNvbnN0cmFpbnRzIHNvIHRoZSBzdWJzY3JpYmVyIGNhbiByZXBsaWNhdGUgd2l0aG91dAorLS0g cHVsbGluZyBjcm9zcy10YWJsZSBkZXBlbmRlbmNpZXMgYWxvbmcuCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjbHVkZScsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ3VuaXF1ZSxjaGVjayxmb3JlaWduX2tleXMsZXhjbHVzaW9uJyk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25z IChhIGludGVnZXIsIGIgaW50ZWdlciwgYyBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0gZXhjbHVk ZT1ydWxlcyBoaWRlcyB0aGUgQ1JFQVRFIFJVTEUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ3J0Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ2V4Y2x1ZGUnLCAncnVsZXMnKTsKKyAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucnQgKGlkIGlu dGVnZXIpOworKDEgcm93KQorCistLSBleGNsdWRlPXN0YXRpc3RpY3MgaGlkZXMgdGhlIENSRUFU RSBTVEFUSVNUSUNTLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzdHgnOjpyZWdj bGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn ZXhjbHVkZScsICdzdGF0aXN0aWNzJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Quc3R4IChhIGludGVnZXIsIGIgaW50ZWdlciwgYyBpbnRl Z2VyKTsKKygxIHJvdykKKworLS0gZXhjbHVkZT1ybHMgaGlkZXMgdGhlIEVOQUJMRS9GT1JDRSBS T1cgTEVWRUwgU0VDVVJJVFkgdG9nZ2xlcy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncmxzJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ2V4Y2x1ZGUnLCAncmxzJyk7CisgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmxzIChpZCBpbnRl Z2VyKTsKKygxIHJvdykKKworLS0gZXhjbHVkZT1yZXBsaWNhX2lkZW50aXR5IGhpZGVzIHRoZSBS RVBMSUNBIElERU5USVRZIGNsYXVzZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cmlfZnVsbCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdleGNsdWRlJywgJ3JlcGxpY2FfaWRlbnRpdHknKTsKKyAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9k ZGxfdGVzdC5yaV9mdWxsIChhIGludGVnZXIpOworKDEgcm93KQorCistLSBQYXJ0aXRpb24gY2hp bGRyZW4gYXJlIGVtaXR0ZWQgYnkgZGVmYXVsdDsgZXhjbHVkZT1wYXJ0aXRpb25zCistLSBzdXBw cmVzc2VzIHRoZW0gc28gb25seSB0aGUgcGFydGl0aW9uZWQtdGFibGUgcGFyZW50IGNvbWVzIG91 dC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlJzo6cmVnY2xh c3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4 Y2x1ZGUnLCAncGFydGl0aW9ucycpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2UgKGlkIGludGVnZXIsIGsgaW50ZWdlcikgUEFSVElUSU9O IEJZIFJBTkdFIChpZCk7CisoMSByb3cpCisKKy0tIFVua25vd24ga2luZCBuYW1lIGlzIHJlamVj dGVkIGF0IG9wdGlvbi1wYXJzZSB0aW1lLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdiYXNpYyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdleGNsdWRlJywgJ25vX3N1Y2hfa2luZCcpOworRVJST1I6ICB1bnJlY29n bml6ZWQga2luZCAibm9fc3VjaF9raW5kIiBpbiBvcHRpb24gImV4Y2x1ZGUiCistLSBXaGl0ZXNw YWNlIGFyb3VuZCBraW5kIG5hbWVzIGlzIGFsbG93ZWQ7IGNhc2UgaXMgZm9sZGVkLgorU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2x1ZGUnLCAnICBJTkRFWEVT ICAsICAgUlVMRVMgICcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIChpZCBpbnRlZ2VyIE5PVCBOVUxM LCBuYW1lIHRleHQpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgQUREIENPTlNU UkFJTlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMiByb3dzKQorCistLSBzY2hlbWFf cXVhbGlmaWVkPWZhbHNlIHN0cmlwcyB0aGUgc2NoZW1hIGZyb20gdGhlIHRhcmdldCB0YWJsZSBp dHNlbGYKKy0tIGFuZCBmcm9tIHNhbWUtc2NoZW1hIHNpYmxpbmcgcmVmZXJlbmNlcyAoaW5oZXJp dGFuY2UvcGFydGl0aW9uCistLSBwYXJlbnRzLCBpZGVudGl0eSBzZXF1ZW5jZXMgaW4gdGhlIHNh bWUgc2NoZW1hKSwgd2hpbGUgY3Jvc3Mtc2NoZW1hCistLSByZWZlcmVuY2VzIGFyZSBrZXB0IHF1 YWxpZmllZCBmb3IgY29ycmVjdG5lc3MuCistLQorLS0gQmFyZSBDUkVBVEUgVEFCTEUgZm9yIGFu IG9yZGluYXJ5IHRhYmxlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6 OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBUQUJMRSBiYXNpYyAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0IENP TExBVEUgIkMiIERFRkFVTFQgJ2Fub24nOjp0ZXh0IE5PVCBOVUxMKTsKKyBBTFRFUiBUQUJMRSBi YXNpYyBBREQgQ09OU1RSQUlOVCBiYXNpY19wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMiByb3dz KQorCistLSBJTkhFUklUUyBwYXJlbnQgaW4gdGhlIHNhbWUgc2NoZW1hIGlzIGVtaXR0ZWQgdW5x dWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NoJzo6cmVnY2xhc3Ms ICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVt YV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRs ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIGNoIChjIGludGVnZXIpIElOSEVSSVRTIChwYXIpOwor IEFMVEVSIFRBQkxFIGNoIEFMVEVSIENPTFVNTiBhIFNFVCBERUZBVUxUIDk5OTsKKygyIHJvd3Mp CisKKy0tIFBhcnRpdGlvbiBwYXJlbnQgaW4gdGhlIHNhbWUgc2NoZW1hIGlzIGVtaXR0ZWQgdW5x dWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV8x Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGFy dGVkX3JhbmdlXzEgUEFSVElUSU9OIE9GIHBhcnRlZF9yYW5nZSBGT1IgVkFMVUVTIEZST00gKDAp IFRPICgxMDApOworIEFMVEVSIFRBQkxFIHBhcnRlZF9yYW5nZV8xIEFMVEVSIENPTFVNTiBrIFNF VCBERUZBVUxUIDc7CisoMiByb3dzKQorCistLSBDcm9zcy1zY2hlbWEgRksgdGFyZ2V0IGtlZXBz IHF1YWxpZmljYXRpb24uICBUaGUgJ3JlZmQnIHRhYmxlIGlzIGluCistLSBwZ3RibF9kZGxfdGVz dDsgcGxhY2UgYW4gRksgdGFyZ2V0IGluIGEgZGlmZmVyZW50IHNjaGVtYSBhbmQgdmVyaWZ5IGl0 CistLSBzdGF5cyBxdWFsaWZpZWQgZXZlbiB3aXRoIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UuCitD UkVBVEUgU0NIRU1BIHBndGJsX2RkbF9vdGhlcjsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfb3Ro ZXIucGFyZW50IChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIHhzY2hlbWFfZmsg KAorICAgIGlkICBpbnQgUFJJTUFSWSBLRVksCisgICAgcGlkIGludCBSRUZFUkVOQ0VTIHBndGJs X2RkbF9vdGhlci5wYXJlbnQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3hz Y2hlbWFfZmsnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIFRBQkxFIHhzY2hlbWFfZmsgKGlkIGludGVnZXIgTk9UIE5VTEwsIHBpZCBpbnRlZ2VyKTsK KyBBTFRFUiBUQUJMRSB4c2NoZW1hX2ZrIEFERCBDT05TVFJBSU5UIHhzY2hlbWFfZmtfcGlkX2Zr ZXkgRk9SRUlHTiBLRVkgKHBpZCkgUkVGRVJFTkNFUyBwZ3RibF9kZGxfb3RoZXIucGFyZW50KGlk KTsKKyBBTFRFUiBUQUJMRSB4c2NoZW1hX2ZrIEFERCBDT05TVFJBSU5UIHhzY2hlbWFfZmtfcGtl eSBQUklNQVJZIEtFWSAoaWQpOworKDMgcm93cykKKworLS0gSWRlbnRpdHkgY29sdW1uIHdpdGgg YSBjdXN0b20gc2VxdWVuY2UgbmFtZSBpbiB0aGUgc2FtZSBzY2hlbWEgaXMKKy0tIGVtaXR0ZWQg dW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkX2N1c3RvbSc6 OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IFRBQkxFIGlkX2N1c3RvbSAodiBpbnRlZ2VyIEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkg KFNUQVJUIFdJVEggMTAwIElOQ1JFTUVOVCBCWSA1IE1JTlZBTFVFIDUwIE1BWFZBTFVFIDEwMDAg Q0FDSEUgMTAgQ1lDTEUpIE5PVCBOVUxMKTsKKygxIHJvdykKKworLS0gUm91bmQtdHJpcDogd2l0 aCBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLCBhZnRlciBTRVQgc2VhcmNoX3BhdGggdGhlCistLSBE REwgY2FuIGJlIHJlcGxheWVkIGludG8gYSBkaWZmZXJlbnQgdGFyZ2V0IHNjaGVtYS4KK0NSRUFU RSBTQ0hFTUEgcGd0YmxfZGRsX3JlcGxheTsKK0RPICQkCitERUNMQVJFCisgICAgc3RtdCB0ZXh0 OworQkVHSU4KKyAgICBTRVQgTE9DQUwgc2VhcmNoX3BhdGggPSBwZ3RibF9kZGxfcmVwbGF5Owor ICAgIEZPUiBzdG10IElOCisgICAgICAgIFNFTEVDVCBsaW5lIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGd0YmxfZGRsX3Rlc3QuYmFzaWMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpIEFT IGxpbmUKKyAgICBMT09QCisgICAgICAgIEVYRUNVVEUgc3RtdDsKKyAgICBFTkQgTE9PUDsKK0VO RCAkJDsKK1NFTEVDVCByZWxuYW1lc3BhY2U6OnJlZ25hbWVzcGFjZTo6dGV4dCwgcmVsbmFtZQor RlJPTSBwZ19jbGFzcyBXSEVSRSBvaWQgPSAncGd0YmxfZGRsX3JlcGxheS5iYXNpYyc6OnJlZ2Ns YXNzOworICAgcmVsbmFtZXNwYWNlICAgfCByZWxuYW1lIAorLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLQorIHBndGJsX2RkbF9yZXBsYXkgfCBiYXNpYworKDEgcm93KQorCitEUk9QIFNDSEVN QSBwZ3RibF9kZGxfcmVwbGF5IENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRh YmxlIHBndGJsX2RkbF9yZXBsYXkuYmFzaWMKK0RST1AgVEFCTEUgeHNjaGVtYV9mazsKK0RST1Ag U0NIRU1BIHBndGJsX2RkbF9vdGhlciBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSBwZ3RibF9kZGxfb3RoZXIucGFyZW50CistLSBMb2NhbGx5LWRlY2xhcmVkIENIRUNL IG9uIGEgcGFydGl0aW9uIGNoaWxkIGhhcyBubyBpbmxpbmUgY29sdW1uCistLSBsaXN0IHRvIGxp dmUgaW4gKFBBUlRJVElPTiBPRiBmb3JtKSwgc28gaXQgbXVzdCBjb21lIG91dCBhcyBhCistLSBz ZXBhcmF0ZSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgc3RhdGVtZW50LgorQ1JFQVRF IFRBQkxFIHBhcnRlZF9jaGsgKGlkIGludCwgdmFsIGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChp ZCk7CitDUkVBVEUgVEFCTEUgcGFydGVkX2Noa19jaGlsZCBQQVJUSVRJT04gT0YgcGFydGVkX2No aworICAgIChDT05TVFJBSU5UIGNoa19pbmxpbmUgQ0hFQ0sgKHZhbCA+IDApKQorICAgIEZPUiBW QUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J3BhcnRlZF9jaGtfY2hpbGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9jaGtfY2hpbGQgUEFSVElUSU9OIE9G IHBndGJsX2RkbF90ZXN0LnBhcnRlZF9jaGsgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsK KyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfY2hrX2NoaWxkIEFERCBDT05TVFJB SU5UIGNoa19pbmxpbmUgQ0hFQ0sgKCh2YWwgPiAwKSk7CisoMiByb3dzKQorCitEUk9QIFRBQkxF IHBhcnRlZF9jaGs7CistLSBJbmhlcml0YW5jZSBjaGlsZHJlbiBvZiBhIHBhcmVudCB3aXRoIGEg Z2VuZXJhdGVkIGNvbHVtbiBzaG91bGQgbm90CistLSBlbWl0IGFuIEFMVEVSIENPTFVNTiAuLi4g U0VUIERFRkFVTFQgZm9yIHRoZSBpbmhlcml0ZWQgZ2VuZXJhdGVkCistLSBjb2x1bW46IHRoZSBH RU5FUkFURUQgZXhwcmVzc2lvbiBjYXJyaWVzIGRvd24gdGhyb3VnaCBpbmhlcml0YW5jZSwKKy0t IGFuZCBTRVQgREVGQVVMVCB3b3VsZCBmYWlsIGF0IHJlcGxheSBhZ2FpbnN0IGEgZ2VuZXJhdGVk IGNvbHVtbi4KK0NSRUFURSBUQUJMRSBwYXJfZ2VuICgKKyAgICBpZCBpbnQsCisgICAgZyAgaW50 IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGlkICogMikgU1RPUkVECispOworQ1JFQVRFIFRBQkxFIGNo X2dlbiAoKSBJTkhFUklUUyAocGFyX2dlbik7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2NoX2dlbic6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jaF9n ZW4gKCkgSU5IRVJJVFMgKHBndGJsX2RkbF90ZXN0LnBhcl9nZW4pOworKDEgcm93KQorCitEUk9Q IFRBQkxFIHBhcl9nZW4gQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUg Y2hfZ2VuCistLSBBIHVzZXItbmFtZWQgTk9UIE5VTEwgb24gYSBsb2NhbCBjb2x1bW4gaXMgZW1p dHRlZCBpbmxpbmUgYXMKKy0tICJDT05TVFJBSU5UIG5hbWUgTk9UIE5VTEwiIHNvIHRoZSBvcmln aW5hbCBuYW1lIGlzIHByZXNlcnZlZC4gIEFuCistLSBhdXRvLW5hbWVkIE5PVCBOVUxMIG9uIGEg bG9jYWwgY29sdW1uIGlzIGVtaXR0ZWQgYXMgYSBwbGFpbiBpbmxpbmUKKy0tICJOT1QgTlVMTCIg LSBQRyByZS1jcmVhdGVzIHRoZSBhdXRvLW5hbWVkIGNvbnN0cmFpbnQgd2hlbiBDUkVBVEUKKy0t IFRBQkxFIHJ1bnMsIHNvIHRoZSBjb25zdHJhaW50IGxvb3Agc2tpcHMgYm90aCBmb3JtcyB0byBh dm9pZCB0aGUKKy0tIHJlZHVuZGFudCAoYW5kIG9uIHRhYmxlLXJlbmFtZSBvciBzZXF1ZW5jZS1j b2xsaXNpb24sIGJyb2tlbikKKy0tIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCAuLi4g Tk9UIE5VTEwgc3RhdGVtZW50LgorQ1JFQVRFIFRBQkxFIG5uX25hbWVkICgKKyAgICBhIGludCBD T05TVFJBSU5UIG15X25uIE5PVCBOVUxMLAorICAgIGIgaW50IE5PVCBOVUxMCispOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9uYW1lZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAn ZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3Qubm5fbmFtZWQgKGEgaW50ZWdlciBDT05TVFJBSU5UIG15X25uIE5PVCBOVUxMLCBi IGludGVnZXIgTk9UIE5VTEwpOworKDEgcm93KQorCitEUk9QIFRBQkxFIG5uX25hbWVkOworLS0g UmVuYW1pbmcgdGhlIHRhYmxlIGFmdGVyIGFuIElERU5USVRZIE5PVCBOVUxMIGNvbHVtbiB3YXMg ZGVjbGFyZWQKKy0tIGxlYXZlcyB0aGUgYXV0by1uYW1lZCBjb25zdHJhaW50IGZyb3plbiBhdCB0 aGUgb3JpZ2luYWwgbmFtZSwgd2hpY2gKKy0tIG5vIGxvbmdlciBtYXRjaGVzIHRoZSBwb3N0LXJl bmFtZSAiPHRhYmxlPl88Y29sPl9ub3RfbnVsbCIgcGF0dGVybi4KKy0tIFRoZSBlbWl0dGVkIERE TCBtdXN0IHN0aWxsIHJvdW5kLXRyaXA6IHRoZSBjb25zdHJhaW50IGxvb3AgbXVzdCBub3QKKy0t IEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBhIHNlY29uZCBOT1QgTlVMTCwgc2luY2Ug Q1JFQVRFIFRBQkxFCistLSB3aXRoIHRoZSBpbmxpbmUgSURFTlRJVFkgYWxyZWFkeSBjcmVhdGVz IGFuIGF1dG8tTk9ULU5VTEwgdW5kZXIgdGhlCistLSBuZXcgdGFibGUgbmFtZSBhbmQgUEcgb25s eSBwZXJtaXRzIG9uZSBOT1QgTlVMTCBwZXIgY29sdW1uLgorQ1JFQVRFIFRBQkxFIG5uX3JlbmFt ZWQgKAorICAgIGEgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgTk9UIE5VTEwKKyk7 CitBTFRFUiBUQUJMRSBubl9yZW5hbWVkIFJFTkFNRSBUTyBubl9yZW5hbWVkMjsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5fcmVuYW1lZDInOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qubm5fcmVuYW1l ZDIgKGEgaW50ZWdlciBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZIChTRVFVRU5DRSBOQU1F IHBndGJsX2RkbF90ZXN0Lm5uX3JlbmFtZWRfYV9zZXEpIENPTlNUUkFJTlQgbm5fcmVuYW1lZF9h X25vdF9udWxsIE5PVCBOVUxMKTsKKygxIHJvdykKKworRFJPUCBUQUJMRSBubl9yZW5hbWVkMjsK Ky0tIExvY2FsbHktZGVjbGFyZWQgTk9UIE5VTEwgb24gYW4gaW5oZXJpdGVkIGNvbHVtbi4gIFRo ZSBjb2x1bW4gaXRzZWxmCistLSBpcyBvbWl0dGVkIGZyb20gdGhlIGNoaWxkJ3MgY29sdW1uIGxp c3QgKGF0dGlzbG9jYWw9ZmFsc2UpLCBzbyB0aGUKKy0tIHVzZXItbmFtZWQgTk9UIE5VTEwgbXVz dCBjb21lIG91dCB2aWEgdGhlIHBvc3QtQ1JFQVRFIGNvbnN0cmFpbnQKKy0tIGxvb3AgcmF0aGVy IHRoYW4gaW5saW5lLgorQ1JFQVRFIFRBQkxFIG5uX3BhciAoYSBpbnQpOworQ1JFQVRFIFRBQkxF IG5uX2NoIChiIGludCkgSU5IRVJJVFMgKG5uX3Bhcik7CitBTFRFUiBUQUJMRSBubl9jaCBBREQg Q09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCBhOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdubl9jaCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF90ZXN0Lm5uX2NoIChiIGludGVnZXIpIElOSEVSSVRTIChwZ3RibF9kZGxfdGVzdC5ubl9w YXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm5uX2NoIEFERCBDT05TVFJBSU5UIG15 X25uIE5PVCBOVUxMIGE7CisoMiByb3dzKQorCitEUk9QIFRBQkxFIG5uX3BhciBDQVNDQURFOwor Tk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBubl9jaAorLS0gc2NoZW1hX3F1YWxpZmll ZD1mYWxzZSBtdXN0IGRyb3AgdGhlIHNjaGVtYSBwcmVmaXggZnJvbSBERUZBVUxUCistLSBleHBy ZXNzaW9ucyBhbmQgaW5saW5lIENIRUNLIGJvZGllcyB0aGF0IHJlZmVyZW5jZSBzYW1lLXNjaGVt YQorLS0gb2JqZWN0cyAoc2VxdWVuY2UgdmlhIG5leHR2YWwsIGZ1bmN0aW9uIHZpYSBkaXJlY3Qg Y2FsbCkuICBUaGlzCistLSByZWxpZXMgb24gdGhlIGRlcGFyc2VyIHJlc3BlY3RpbmcgdGhlIG5h cnJvd2VkIHNlYXJjaF9wYXRoIHJhdGhlcgorLS0gdGhhbiBvbiBzdWJzdHJpbmcgc3RyaXBwaW5n LgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfeHJlZjsKK0NSRUFURSBTRVFVRU5DRSBwZ3RibF9k ZGxfeHJlZi5teXNlcTsKK0NSRUFURSBGVU5DVElPTiBwZ3RibF9kZGxfeHJlZi5mKGludCkgUkVU VVJOUyBpbnQgTEFOR1VBR0Ugc3FsIElNTVVUQUJMRQorICAgIEFTICdTRUxFQ1QgJDEnOworQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF94cmVmLnQgKAorICAgIGlkICBpbnQgREVGQVVMVCBuZXh0dmFs KCdwZ3RibF9kZGxfeHJlZi5teXNlcScpLAorICAgIHZhbCBpbnQsCisgICAgQ09OU1RSQUlOVCBj aGsgQ0hFQ0sgKHBndGJsX2RkbF94cmVmLmYodmFsKSA+IDApCispOworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfeHJlZi50Jzo6cmVnY2xhc3MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBUQUJMRSB0IChpZCBpbnRlZ2VyIERFRkFVTFQgbmV4dHZhbCgnbXlzZXEnOjpyZWdjbGFzcyks IHZhbCBpbnRlZ2VyLCBDT05TVFJBSU5UIGNoayBDSEVDSyAoKGYodmFsKSA+IDApKSk7CisoMSBy b3cpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF94cmVmIENBU0NBREU7CitOT1RJQ0U6ICBkcm9w IGNhc2NhZGVzIHRvIDMgb3RoZXIgb2JqZWN0cworREVUQUlMOiAgZHJvcCBjYXNjYWRlcyB0byBz ZXF1ZW5jZSBwZ3RibF9kZGxfeHJlZi5teXNlcQorZHJvcCBjYXNjYWRlcyB0byBmdW5jdGlvbiBw Z3RibF9kZGxfeHJlZi5mKGludGVnZXIpCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBndGJsX2Rk bF94cmVmLnQKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UgbXVzdCBOT1QgY29ycnVwdCBzdHJp bmcgbGl0ZXJhbHMgd2hvc2UKKy0tIGNvbnRlbnRzIGhhcHBlbiB0byBjb250YWluIHRoZSBzY2hl bWEgbmFtZSBmb2xsb3dlZCBieSBhIGRvdC4gIFRoZQorLS0gaW4tc3RyaW5nIHN0YXRlIG9mIHRo ZSBwcmVmaXggc3RyaXBwZXIgcHJlc2VydmVzIHRoZW0gdmVyYmF0aW0uCitDUkVBVEUgU0NIRU1B IHBndGJsX2RkbF9zdHI7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3N0ci5wIChpZCBpbnQsIG5v dGUgdGV4dCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3N0ci5wYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3N0ci5wCisgICAgKENPTlNUUkFJTlQgY2hr IENIRUNLIChub3RlIDw+ICdwZ3RibF9kZGxfc3RyLnNlY3JldCcpKQorICAgIEZPUiBWQUxVRVMg RlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJs X2RkbF9zdHIucGMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn b3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFf cXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGMgUEFSVElUSU9OIE9GIHAgRk9S IFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKyBBTFRFUiBUQUJMRSBwYyBBREQgQ09OU1RSQUlO VCBjaGsgQ0hFQ0sgKChub3RlIDw+ICdwZ3RibF9kZGxfc3RyLnNlY3JldCc6OnRleHQpKTsKKygy IHJvd3MpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9zdHIgQ0FTQ0FERTsKK05PVElDRTogIGRy b3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3N0ci5wCistLSBzY2hlbWFfcXVhbGlmaWVk PWZhbHNlIG11c3QgTk9UIGNvcnJ1cHQgZG91YmxlLXF1b3RlZCBpZGVudGlmaWVycworLS0gd2hv c2UgY29udGVudHMgaGFwcGVuIHRvIGNvbnRhaW4gdGhlIHNjaGVtYSBuYW1lIGZvbGxvd2VkIGJ5 IGEgZG90CistLSAoZm9yIGV4YW1wbGUgYSBjb2x1bW4gbGl0ZXJhbGx5IG5hbWVkICI8c2NoZW1h Pi53ZWlyZCIgaW5zaWRlIHRoYXQKKy0tIHNjaGVtYSkuICBUaGUgaW4taWRlbnQgc3RhdGUgb2Yg dGhlIHByZWZpeCBzdHJpcHBlciBwcmVzZXJ2ZXMgdGhlbQorLS0gdmVyYmF0aW0uCitDUkVBVEUg U0NIRU1BIHBndGJsX2RkbF9xaWQ7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3FpZC5wIChpZCBp bnQsICJwZ3RibF9kZGxfcWlkLndlaXJkIiBpbnQpCisgICAgUEFSVElUSU9OIEJZIFJBTkdFIChp ZCk7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3FpZC5wYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRs X3FpZC5wCisgICAgKENPTlNUUkFJTlQgY2hrIENIRUNLICgicGd0YmxfZGRsX3FpZC53ZWlyZCIg PiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfcWlkLnBjJzo6cmVnY2xhc3MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGMgUEFSVElUSU9OIE9GIHAgRk9S IFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKyBBTFRFUiBUQUJMRSBwYyBBREQgQ09OU1RSQUlO VCBjaGsgQ0hFQ0sgKCgicGd0YmxfZGRsX3FpZC53ZWlyZCIgPiAwKSk7CisoMiByb3dzKQorCitE Uk9QIFNDSEVNQSBwZ3RibF9kZGxfcWlkIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIHBndGJsX2RkbF9xaWQucAorLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSB3aGVu IHRoZSBiYXNlIHNjaGVtYSBuYW1lIGl0c2VsZiByZXF1aXJlcworLS0gcXVvdGluZyAoaXRzIHBy ZWZpeCBzdGFydHMgd2l0aCAiKS4gIEJvdGggZm9ybXMgb2YgdGhlIHByZWZpeCAtCistLSBiYXJl LWxvd2VyY2FzZSBhbmQgcXVvdGVkIC0gbXVzdCBiZSBzdHJpcHBlZCBmcm9tIG91dGVyCistLSBB TFRFUiBUQUJMRSAvIE9OIC8gQ1JFQVRFIElOREVYIHByZWZpeGVzLCB3aGlsZSBpbm5lciBxdW90 ZWQKKy0tIGlkZW50aWZpZXJzIHRoYXQgaGFwcGVuIHRvIGJlZ2luIHRoZSBzYW1lIHdheSBtdXN0 IGJlIHByZXNlcnZlZC4KK0NSRUFURSBTQ0hFTUEgIlBnVGJsLURkbC1RIjsKK0NSRUFURSBUQUJM RSAiUGdUYmwtRGRsLVEiLiJUIiAoaWQgaW50LCB2YWwgaW50LAorICAgIENPTlNUUkFJTlQgY2hr IENIRUNLICh2YWwgPiAwKSk7CitDUkVBVEUgSU5ERVggIlRfdmFsX2lkeCIgT04gIlBnVGJsLURk bC1RIi4iVCIgKHZhbCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJyJQZ1RibC1E ZGwtUSIuIlQiJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ293 bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1 YWxpZmllZCcsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSAiVCIgKGlkIGludGVnZXIsIHZhbCBpbnRlZ2VyLCBD T05TVFJBSU5UIGNoayBDSEVDSyAoKHZhbCA+IDApKSk7CisgQ1JFQVRFIElOREVYICJUX3ZhbF9p ZHgiIE9OICJUIiBVU0lORyBidHJlZSAodmFsKTsKKygyIHJvd3MpCisKK0RST1AgU0NIRU1BICJQ Z1RibC1EZGwtUSIgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgIlBn VGJsLURkbC1RIi4iVCIKKy0tIEVycm9yOiBub3QgYW4gb3JkaW5hcnkgb3IgcGFydGl0aW9uZWQg dGFibGUuCitDUkVBVEUgVklFVyB2IEFTIFNFTEVDVCAxIEFTIHg7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3YnOjpyZWdjbGFzcyk7CitFUlJPUjogICJ2IiBpcyBub3QgYW4gb3Jk aW5hcnkgb3IgcGFydGl0aW9uZWQgdGFibGUKK0NSRUFURSBTRVFVRU5DRSBzOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzJzo6cmVnY2xhc3MpOworRVJST1I6ICAicyIgaXMgbm90 IGFuIG9yZGluYXJ5IG9yIHBhcnRpdGlvbmVkIHRhYmxlCistLSBOVUxMIGFyZ3VtZW50IHJldHVy bnMgbm8gcm93cy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbChOVUxMKTsKKyBwZ19n ZXRfdGFibGVfZGRsIAorLS0tLS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCistLSBVbnJlY29n bml6ZWQgb3B0aW9uLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJl Z2NsYXNzLCAnYm9ndXMnLCAndHJ1ZScpOworRVJST1I6ICB1bnJlY29nbml6ZWQgb3B0aW9uOiAi Ym9ndXMiCistLSBPZGQgbnVtYmVyIG9mIHZhcmlhZGljIGFyZ3MuCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdwcmV0dHknKTsKK0VSUk9SOiAgdmFy aWFkaWMgYXJndW1lbnRzIG11c3QgYmUgbmFtZS92YWx1ZSBwYWlycworSElOVDogIFByb3ZpZGUg YW4gZXZlbiBudW1iZXIgb2YgdmFyaWFkaWMgYXJndW1lbnRzIHRoYXQgY2FuIGJlIGRpdmlkZWQg aW50byBwYWlycy4KKy0tIGV4Y2x1ZGU9cHJpbWFyeV9rZXkgb24gYSB0YWJsZSB3aG9zZSBSRVBM SUNBIElERU5USVRZIHJlZmVyZW5jZXMKKy0tIHRoZSBQSyB3b3VsZCBlbWl0IGEgUkVQTElDQSBJ REVOVElUWSBVU0lORyBJTkRFWCBjbGF1c2UgdGhhdAorLS0gcmVmZXJlbmNlZCBhbiBpbmRleCB0 aGUgc2FtZSBEREwganVzdCBkcm9wcGVkLiAgUmVxdWlyZSB0aGUgdXNlcgorLS0gdG8gYWxzbyBl eGNsdWRlIHJlcGxpY2FfaWRlbnRpdHkgaW4gdGhhdCBjYXNlLgorQ1JFQVRFIFRBQkxFIHJpX3Br X2V4Y2wgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0FMVEVSIFRBQkxFIHJpX3BrX2V4Y2wgUkVQTElD QSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9wa19leGNsX3BrZXk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3JpX3BrX2V4Y2wnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjbHVkZScsICdwcmltYXJ5X2tleScp OworRVJST1I6ICBjYW5ub3QgZXhjbHVkZSAicHJpbWFyeV9rZXkiIHdpdGhvdXQgYWxzbyBleGNs dWRpbmcgInJlcGxpY2FfaWRlbnRpdHkiIGZvciB0YWJsZSAicmlfcGtfZXhjbCIKK0RFVEFJTDog IFRoZSB0YWJsZSdzIFJFUExJQ0EgSURFTlRJVFkgcmVmZXJlbmNlcyB0aGUgcHJpbWFyeSBrZXkg aW5kZXguCistLSBTYW1lIGNhbGwgYnV0IGFsc28gZXhjbHVkaW5nIHJlcGxpY2FfaWRlbnRpdHkg c3VjY2VlZHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3BrX2V4Y2wnOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnZXhjbHVkZScsICdwcmltYXJ5X2tleSxyZXBsaWNhX2lkZW50aXR5Jyk7CisgICAgICAgICAg ICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfcGtfZXhjbCAoYSBpbnRlZ2VyIE5P VCBOVUxMKTsKKygxIHJvdykKKworRFJPUCBUQUJMRSByaV9wa19leGNsOworLS0gUm91bmQtdHJp cCB2ZXJpZmljYXRpb24uICBGb3IgZXZlcnkgdGVzdCB0YWJsZSwgY2FwdHVyZSB0aGUgRERMIHRo ZQorLS0gZnVuY3Rpb24gZW1pdHMsIGRyb3AgdGhlIHNjaGVtYSwgcmVwbGF5IGVhY2ggdGFibGUn cyBEREwgaW4KKy0tIGRlcGVuZGVuY3kgb3JkZXIsIGFuZCBjb25maXJtIHRoYXQgcGdfZ2V0X3Rh YmxlX2RkbCBvbiB0aGUgcmVjcmVhdGVkCistLSByZWxhdGlvbiBtYXRjaGVzIHRoZSBvcmlnaW5h bCBsaW5lLWZvci1saW5lLiAgVGhlIGZpbmFsIFNFTEVDVCBtdXN0CistLSByZXR1cm4gemVybyBy b3dzLgorQ1JFQVRFIFRFTVAgVEFCTEUgcGd0YmxfZGRsX3J0X29yaWcgKG5hbWUgdGV4dCwgb3Jk IGludCwgbGluZSB0ZXh0KTsKK0lOU0VSVCBJTlRPIHBndGJsX2RkbF9ydF9vcmlnCitTRUxFQ1Qg dC5uYW1lLCBvLm9yZCwgby5saW5lCitGUk9NIChWQUxVRVMKKyAgICAgICAgKCdiYXNpYycpLCAo J2lkX2NvbHMnKSwgKCdpZF9jdXN0b20nKSwgKCdnZW5fY29scycpLCAoJ3N0b3JhZ2VfY29scycp LAorICAgICAgICAoJ3JlZmQnKSwgKCdjb25zJyksICgnaWR4ZCcpLAorICAgICAgICAoJ3Bhcicp LCAoJ2NoJyksICgnYXR0b3B0JyksCisgICAgICAgICgncGFydGVkX3JhbmdlJyksICgncGFydGVk X3JhbmdlXzEnKSwgKCdwYXJ0ZWRfcmFuZ2VfZGVmJyksCisgICAgICAgICgncGFydGVkX2hhc2gn KSwgKCdwYXJ0ZWRfaGFzaF8wJyksCisgICAgICAgICgncnRfbG9nJyksICgncnQnKSwKKyAgICAg ICAgKCdzdHgnKSwgKCdybHMnKSwgKCdyaV9mdWxsJyksICgncmlfaWR4JyksICgndW5vJykKKyAg ICAgKSBBUyB0KG5hbWUpLAorICAgICBMQVRFUkFMIHBnX2dldF90YWJsZV9kZGwoKCdwZ3RibF9k ZGxfdGVzdC4nIHx8IHQubmFtZSk6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ293bmVyJywgJ2ZhbHNlJykgV0lUSCBPUkRJTkFMSVRZIG8obGluZSwgb3JkKTsKK0RP ICQkCitERUNMQVJFCisgICAgdGFibGVzIENPTlNUQU5UIHRleHRbXSA6PSBBUlJBWVsKKyAgICAg ICAgJ2Jhc2ljJywgJ2lkX2NvbHMnLCAnaWRfY3VzdG9tJywgJ2dlbl9jb2xzJywgJ3N0b3JhZ2Vf Y29scycsCisgICAgICAgICdyZWZkJywgJ2NvbnMnLCAnaWR4ZCcsCisgICAgICAgICdwYXInLCAn Y2gnLCAnYXR0b3B0JywKKyAgICAgICAgJ3BhcnRlZF9yYW5nZScsICdwYXJ0ZWRfcmFuZ2VfMScs ICdwYXJ0ZWRfcmFuZ2VfZGVmJywKKyAgICAgICAgJ3BhcnRlZF9oYXNoJywgJ3BhcnRlZF9oYXNo XzAnLAorICAgICAgICAncnRfbG9nJywgJ3J0JywKKyAgICAgICAgJ3N0eCcsICdybHMnLCAncmlf ZnVsbCcsICdyaV9pZHgnLCAndW5vJworICAgIF07CisgICAgdCB0ZXh0OworICAgIHN0bXQgdGV4 dDsKK0JFR0lOCisgICAgRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKKyAgICBD UkVBVEUgU0NIRU1BIHBndGJsX2RkbF90ZXN0OworICAgIEZPUkVBQ0ggdCBJTiBBUlJBWSB0YWJs ZXMgTE9PUAorICAgICAgICBGT1Igc3RtdCBJTgorICAgICAgICAgICAgU0VMRUNUIGxpbmUgRlJP TSBwZ3RibF9kZGxfcnRfb3JpZyBXSEVSRSBuYW1lID0gdCBPUkRFUiBCWSBvcmQKKyAgICAgICAg TE9PUAorICAgICAgICAgICAgRVhFQ1VURSBzdG10OworICAgICAgICBFTkQgTE9PUDsKKyAgICBF TkQgTE9PUDsKK0VORCAkJDsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gMjUgb3RoZXIgb2Jq ZWN0cworREVUQUlMOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBiYXNpYworZHJvcCBjYXNjYWRl cyB0byB0YWJsZSBpZF9jb2xzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkX2N1c3RvbQorZHJv cCBjYXNjYWRlcyB0byB0YWJsZSBnZW5fY29scworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBzdG9y YWdlX2NvbHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmVmZAorZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSBjb25zCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkeGQKK2Ryb3AgY2FzY2FkZXMgdG8g dGFibGUgcGFyCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGNoCitkcm9wIGNhc2NhZGVzIHRvIHRh YmxlIGF0dG9wdAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfcmFuZ2UKK2Ryb3AgY2Fz Y2FkZXMgdG8gdGFibGUgcGFydGVkX2hhc2gKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcnQKK2Ry b3AgY2FzY2FkZXMgdG8gdGFibGUgcnRfbG9nCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHN0eAor ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBybHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmlfZnVs bAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSByaV9pZHgKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg dW5vCitkcm9wIGNhc2NhZGVzIHRvIHR5cGUgdHlwZWRfdAorZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSB0eXBlZF9wbGFpbgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB0eXBlZF9vdmVyCitkcm9wIGNh c2NhZGVzIHRvIHZpZXcgdgorZHJvcCBjYXNjYWRlcyB0byBzZXF1ZW5jZSBzCitFUlJPUjogIHJl bGF0aW9uICJwYXJ0ZWRfcmFuZ2VfMSIgYWxyZWFkeSBleGlzdHMKK0NPTlRFWFQ6ICBTUUwgc3Rh dGVtZW50ICJDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3JhbmdlXzEgUEFSVElU SU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZSBGT1IgVkFMVUVTIEZST00gKDApIFRP ICgxMDApOyIKK1BML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxpbmUgMjEgYXQg RVhFQ1VURQorV0lUSCBhZnRlcl9kZGwgQVMgKAorICAgIFNFTEVDVCB0Lm5hbWUsIG8ub3JkLCBv LmxpbmUKKyAgICBGUk9NIChTRUxFQ1QgRElTVElOQ1QgbmFtZSBGUk9NIHBndGJsX2RkbF9ydF9v cmlnKSBBUyB0LAorICAgICAgICAgTEFURVJBTCBwZ19nZXRfdGFibGVfZGRsKCgncGd0YmxfZGRs X3Rlc3QuJyB8fCB0Lm5hbWUpOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnb3duZXInLCAnZmFsc2UnKSBXSVRIIE9SRElOQUxJVFkgbyhsaW5lLCBvcmQpCisp CisoU0VMRUNUICdtaXNzaW5nLWluLWNvcHknIEFTIGtpbmQsIG5hbWUsIG9yZCwgbGluZSBGUk9N IHBndGJsX2RkbF9ydF9vcmlnCisgRVhDRVBUCisgU0VMRUNUICdtaXNzaW5nLWluLWNvcHknLCBu YW1lLCBvcmQsIGxpbmUgRlJPTSBhZnRlcl9kZGwpCitVTklPTiBBTEwKKyhTRUxFQ1QgJ2V4dHJh LWluLWNvcHknIEFTIGtpbmQsIG5hbWUsIG9yZCwgbGluZSBGUk9NIGFmdGVyX2RkbAorIEVYQ0VQ VAorIFNFTEVDVCAnZXh0cmEtaW4tY29weScsIG5hbWUsIG9yZCwgbGluZSBGUk9NIHBndGJsX2Rk bF9ydF9vcmlnKQorT1JERVIgQlkga2luZCwgbmFtZSwgb3JkOworIGtpbmQgfCBuYW1lIHwgb3Jk IHwgbGluZSAKKy0tLS0tLSstLS0tLS0rLS0tLS0rLS0tLS0tCisoMCByb3dzKQorCistLSBDbGVh bnVwLgorRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKK05PVElDRTogIGRyb3Ag Y2FzY2FkZXMgdG8gMjUgb3RoZXIgb2JqZWN0cworREVUQUlMOiAgZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSBiYXNpYworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBpZF9jb2xzCitkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIGlkX2N1c3RvbQorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBnZW5fY29scworZHJv cCBjYXNjYWRlcyB0byB0YWJsZSBzdG9yYWdlX2NvbHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg cmVmZAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBjb25zCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IGlkeGQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFyCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IGNoCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGF0dG9wdAorZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSBwYXJ0ZWRfcmFuZ2UKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2hhc2gKK2Ryb3Ag Y2FzY2FkZXMgdG8gdGFibGUgcnQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcnRfbG9nCitkcm9w IGNhc2NhZGVzIHRvIHRhYmxlIHN0eAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBybHMKK2Ryb3Ag Y2FzY2FkZXMgdG8gdGFibGUgcmlfZnVsbAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSByaV9pZHgK K2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgdW5vCitkcm9wIGNhc2NhZGVzIHRvIHR5cGUgdHlwZWRf dAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB0eXBlZF9wbGFpbgorZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSB0eXBlZF9vdmVyCitkcm9wIGNhc2NhZGVzIHRvIHZpZXcgdgorZHJvcCBjYXNjYWRlcyB0 byBzZXF1ZW5jZSBzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVk dWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQppbmRleCA4ZmEwYTZjNDdm Yi4uOWVjYTY0Y2NhM2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2No ZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpAQCAtODEsNyAr ODEsNyBAQCB0ZXN0OiBjcmVhdGVfdGFibGVfbGlrZSBhbHRlcl9nZW5lcmljIGFsdGVyX29wZXJh dG9yIG1pc2MgYXN5bmMgZGJzaXplIG1lcmdlIG1pcwogIyBjb2xsYXRlLmxpbnV4LnV0ZjggYW5k IGNvbGxhdGUuaWN1LnV0ZjggdGVzdHMgY2Fubm90IGJlIHJ1biBpbiBwYXJhbGxlbCB3aXRoIGVh Y2ggb3RoZXIKICMgcHNxbCBkZXBlbmRzIG9uIGNyZWF0ZV9hbQogIyBhbXV0aWxzIGRlcGVuZHMg b24gZ2VvbWV0cnksIGNyZWF0ZV9pbmRleF9zcGdpc3QsIGhhc2hfaW5kZXgsIGJyaW4KLXRlc3Q6 IHJ1bGVzIHBzcWwgcHNxbF9jcm9zc3RhYiBwc3FsX3BpcGVsaW5lIGFtdXRpbHMgc3RhdHNfZXh0 IGNvbGxhdGUubGludXgudXRmOCBjb2xsYXRlLndpbmRvd3Mud2luMTI1MgordGVzdDogcnVsZXMg cHNxbCBwc3FsX2Nyb3NzdGFiIHBzcWxfcGlwZWxpbmUgYW11dGlscyBzdGF0c19leHQgY29sbGF0 ZS5saW51eC51dGY4IGNvbGxhdGUud2luZG93cy53aW4xMjUyIHBnX2dldF90YWJsZV9kZGwKIAog IyAtLS0tLS0tLS0tCiAjIFJ1biB0aGVzZSBhbG9uZSBzbyB0aGV5IGRvbid0IHJ1biBvdXQgb2Yg cGFyYWxsZWwgd29ya2VycwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGdfZ2V0 X3RhYmxlX2RkbC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFibGVfZGRsLnNx bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWUzMzIxOTRkYjAKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFibGVfZGRsLnNx bApAQCAtMCwwICsxLDU0MiBAQAorLS0KKy0tIHBnX2dldF90YWJsZV9kZGwKKy0tCistLSBBbGwg dGVzdHMgcGFzcyBvd25lcj0+ZmFsc2Ugc28gdGhlIEFMVEVSIFRBQkxFIE9XTkVSIFRPIGxpbmUg aXMgbm90CistLSBlbWl0dGVkLCBrZWVwaW5nIG91dHB1dCBzdGFibGUgYWNyb3NzIHRlc3QgcnVu bmVycyAod2hpY2ggbWF5IHJ1biB1bmRlcgorLS0gZGlmZmVyZW50IHJvbGUgbmFtZXMpLgorLS0K K0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3Q7CitTRVQgc2VhcmNoX3BhdGggPSBwZ3RibF9k ZGxfdGVzdDsKKworLS0gQmFzaWMgdGFibGUgd2l0aCBQUklNQVJZIEtFWSwgTk9UIE5VTEwsIERF RkFVTFQsIENPTExBVEUuCitDUkVBVEUgVEFCTEUgYmFzaWMgKAorICAgIGlkIGludCBQUklNQVJZ IEtFWSwKKyAgICBuYW1lIHRleHQgTk9UIE5VTEwgREVGQVVMVCAnYW5vbicgQ09MTEFURSAiQyIK Kyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdv d25lcicsICdmYWxzZScpOworCistLSBJZGVudGl0eSBjb2x1bW5zICh3aXRoIGRlZmF1bHQgYW5k IGN1c3RvbSBzZXF1ZW5jZSBvcHRpb25zKS4KK0NSRUFURSBUQUJMRSBpZF9jb2xzICgKKyAgICBp ZF9hbHdheXMgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFksCisgICAgaWRfZGVmYXVs dCBpbnQgR0VORVJBVEVEIEJZIERFRkFVTFQgQVMgSURFTlRJVFkKKyk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2lkX2NvbHMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7 CisKK0NSRUFURSBUQUJMRSBpZF9jdXN0b20gKAorICAgIHYgaW50IEdFTkVSQVRFRCBBTFdBWVMg QVMgSURFTlRJVFkgKAorICAgICAgICBTRVFVRU5DRSBOQU1FIGlkX2N1c3RvbV92X3NlcQorICAg ICAgICBTVEFSVCBXSVRIIDEwMCBJTkNSRU1FTlQgQlkgNQorICAgICAgICBNSU5WQUxVRSA1MCBN QVhWQUxVRSAxMDAwCisgICAgICAgIENBQ0hFIDEwIENZQ0xFCisgICAgKQorKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWRfY3VzdG9tJzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScpOworCistLSBHZW5lcmF0ZWQgc3RvcmVkIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBnZW5f Y29scyAoCisgICAgY2VudHMgaW50LAorICAgIGRvbGxhcnMgbnVtZXJpYyBHRU5FUkFURUQgQUxX QVlTIEFTIChjZW50cyAvIDEwMC4wKSBTVE9SRUQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2dlbl9jb2xzJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCistLSBT VE9SQUdFIGFuZCBDT01QUkVTU0lPTiAob25seSBlbWl0dGVkIHdoZW4gbm9uLWRlZmF1bHQgZm9y IHRoZSB0eXBlKS4KK0NSRUFURSBUQUJMRSBzdG9yYWdlX2NvbHMgKAorICAgIGEgdGV4dCBTVE9S QUdFIEVYVEVSTkFMLAorICAgIGIgdGV4dCBTVE9SQUdFIE1BSU4sCisgICAgYyB0ZXh0IENPTVBS RVNTSU9OIHBnbHoKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0b3JhZ2Vf Y29scyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gQ29uc3RyYWludHM6IENI RUNLLCBVTklRVUUsIEZPUkVJR04gS0VZIChERUZFUlJBQkxFKS4KK0NSRUFURSBUQUJMRSByZWZk IChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGNvbnMgKAorICAgIGEgaW50IENI RUNLIChhID4gMCksCisgICAgYiBpbnQgVU5JUVVFLAorICAgIGMgaW50IFJFRkVSRU5DRVMgcmVm ZChpZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQKKyk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0t IEluZGV4ZXM6IGZ1bmN0aW9uYWwgYW5kIHBhcnRpYWwuICBDb25zdHJhaW50LWJhY2tpbmcgaW5k ZXhlcyBhcmUKKy0tIHN1cHByZXNzZWQgKHRoZXkgYXJlIGVtaXR0ZWQgYnkgdGhlIGNvbnN0cmFp bnQgbG9vcCkuCitDUkVBVEUgVEFCTEUgaWR4ZCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRl eHQpOworQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04gaWR4ZCAobG93ZXIobmFtZSkpOworQ1JF QVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBpZHhkIChpZCkgV0hFUkUgaWQgPiAxMDA7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2Zh bHNlJyk7CisKKy0tIEluaGVyaXRhbmNlLCBpbmNsdWRpbmcgYSBjaGlsZCBERUZBVUxUIG92ZXJy aWRlIG9uIGFuIGluaGVyaXRlZCBjb2x1bW4uCitDUkVBVEUgVEFCTEUgcGFyIChhIGludCBERUZB VUxUIDEsIGIgdGV4dCk7CitDUkVBVEUgVEFCTEUgY2ggKGMgaW50KSBJTkhFUklUUyAocGFyKTsK K0FMVEVSIFRBQkxFIGNoIEFMVEVSIENPTFVNTiBhIFNFVCBERUZBVUxUIDk5OTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY2gnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7 CisKKy0tIFBlci1jb2x1bW4gYXR0b3B0aW9uczogZW1pdHRlZCBhcyBBTFRFUiBDT0xVTU4gU0VU ICguLi4pLgorQ1JFQVRFIFRBQkxFIGF0dG9wdCAoYSBpbnQsIGIgdGV4dCk7CitBTFRFUiBUQUJM RSBhdHRvcHQgQUxURVIgQ09MVU1OIGEgU0VUIChuX2Rpc3RpbmN0ID0gMTAwKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYXR0b3B0Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScpOworCistLSBQYXJ0aXRpb25lZCB0YWJsZSBwYXJlbnQgKFJBTkdFIGFuZCBIQVNIKS4KK0NS RUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2UgKGlkIGludCwgayBpbnQpIFBBUlRJVElPTiBCWSBSQU5H RSAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaGFzaCAo aWQgaW50KSBQQVJUSVRJT04gQlkgSEFTSCAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdwYXJ0ZWRfaGFzaCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0g UGFydGl0aW9uIGNoaWxkcmVuOiBGUk9NL1RPLCBXSVRIIChtb2R1bHVzLCByZW1haW5kZXIpLCBE RUZBVUxULgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9yYW5nZV8xIFBBUlRJVElPTiBPRiBwYXJ0ZWRf cmFuZ2UKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworQUxURVIgVEFCTEUgcGFy dGVkX3JhbmdlXzEgQUxURVIgQ09MVU1OIGsgU0VUIERFRkFVTFQgNzsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlXzEnOjpyZWdjbGFzcywgJ293bmVyJywgJ2Zh bHNlJyk7CisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaGFzaF8wIFBBUlRJVElPTiBPRiBwYXJ0ZWRf aGFzaAorICAgIEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAyLCByZW1haW5kZXIgMCk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9oYXNoXzAnOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJyk7CisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElP TiBPRiBwYXJ0ZWRfcmFuZ2UgREVGQVVMVDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGFydGVkX3JhbmdlX2RlZic6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0g UnVsZXMuCitDUkVBVEUgVEFCTEUgcnQgKGlkIGludCk7CitDUkVBVEUgVEFCTEUgcnRfbG9nIChp ZCBpbnQpOworQ1JFQVRFIFJVTEUgcnRfbG9nX2luc2VydCBBUyBPTiBJTlNFUlQgVE8gcnQKKyAg ICBETyBBTFNPIElOU0VSVCBJTlRPIHJ0X2xvZyBWQUxVRVMgKE5FVy5pZCk7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOwor CistLSBFeHRlbmRlZCBzdGF0aXN0aWNzLgorQ1JFQVRFIFRBQkxFIHN0eCAoYSBpbnQsIGIgaW50 LCBjIGludCk7CitDUkVBVEUgU1RBVElTVElDUyBzdHhfbmR2IChuZGlzdGluY3QpIE9OIGEsIGIg RlJPTSBzdHg7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gUm93LWxldmVsIHNlY3VyaXR5IHRvZ2dsZXMuCitD UkVBVEUgVEFCTEUgcmxzIChpZCBpbnQpOworQUxURVIgVEFCTEUgcmxzIEVOQUJMRSBST1cgTEVW RUwgU0VDVVJJVFk7CitBTFRFUiBUQUJMRSBybHMgRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZOwor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdybHMnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJyk7CisKKy0tIFJFUExJQ0EgSURFTlRJVFk6IGVtaXR0ZWQgb25seSB3aGVuIG5vdCB0 aGUgZGVmYXVsdC4KK0NSRUFURSBUQUJMRSByaV9mdWxsIChhIGludCk7CitBTFRFUiBUQUJMRSBy aV9mdWxsIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgncmlfZnVsbCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworQ1JFQVRFIFRB QkxFIHJpX2lkeCAoYSBpbnQgTk9UIE5VTEwpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCByaV9pZHhf YSBPTiByaV9pZHggKGEpOworQUxURVIgVEFCTEUgcmlfaWR4IFJFUExJQ0EgSURFTlRJVFkgVVNJ TkcgSU5ERVggcmlfaWR4X2E7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2lk eCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gVU5MT0dHRUQgKyByZWxvcHRp b25zLgorQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHVubyAoaWQgaW50KSBXSVRIIChmaWxsZmFjdG9y ID0gNzApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd1bm8nOjpyZWdjbGFzcywg J293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIFR5cGVkIHRhYmxlIChDUkVBVEUgVEFCTEUgT0YgdHlw ZV9uYW1lKS4gIENvbHVtbnMgaW5oZXJpdGVkIGZyb20gdGhlCistLSB0eXBlIGVtaXQgbm90aGlu ZzsgbG9jYWxseS1hcHBsaWVkIERFRkFVTFQsIE5PVCBOVUxMIGFuZCBDSEVDSyBjb21lCistLSBv dXQgdGhyb3VnaCBhIHNpbmdsZSAiKGNvbCBXSVRIIE9QVElPTlMgLi4uKSIgbGlzdC4KK0NSRUFU RSBUWVBFIHR5cGVkX3QgQVMgKGEgaW50LCBiIHRleHQpOworQ1JFQVRFIFRBQkxFIHR5cGVkX3Bs YWluIE9GIHR5cGVkX3Q7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3R5cGVkX3Bs YWluJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCitDUkVBVEUgVEFCTEUgdHlwZWRf b3ZlciBPRiB0eXBlZF90ICgKKyAgICBhIFdJVEggT1BUSU9OUyBERUZBVUxUIDcgTk9UIE5VTEws CisgICAgYiBXSVRIIE9QVElPTlMgTk9UIE5VTEwsCisgICAgQ09OU1RSQUlOVCBiX25vbmVtcHR5 IENIRUNLIChsZW5ndGgoYikgPiAwKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgndHlwZWRfb3Zlcic6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gVGVtcG9y YXJ5IHRhYmxlcyArIE9OIENPTU1JVC4gIFRlbXAgdGFibGVzIGxpdmUgaW4gYSBzZXNzaW9uLWxv Y2FsCistLSBuYW1lc3BhY2Ugd2hvc2UgbmFtZSB2YXJpZXMgYmV0d2VlbiBydW5zLCBzbyB3ZSBz dHJpcCB0aGUgc2NoZW1hCistLSBwcmVmaXguICBPTiBDT01NSVQgRFJPUCBvbmx5IGZpcmVzIGF0 IGNvbW1pdCwgc28gdGhlIHF1ZXJpZXMgdGhhdAorLS0gbmVlZCB0byBzZWUgdGhlIGNhdGFsb2cg ZW50cnkgbXVzdCBydW4gaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gYXMKKy0tIHRoZSBDUkVBVEUu CitCRUdJTjsKK0NSRUFURSBURU1QIFRBQkxFIHRlbXBfZGVmYXVsdCAoaWQgaW50KTsKK0NSRUFU RSBURU1QIFRBQkxFIHRlbXBfZGVsZXRlIChpZCBpbnQpIE9OIENPTU1JVCBERUxFVEUgUk9XUzsK K0NSRUFURSBURU1QIFRBQkxFIHRlbXBfZHJvcCAoaWQgaW50KSBPTiBDT01NSVQgRFJPUDsKKwor U0VMRUNUIHJlZ2V4cF9yZXBsYWNlKGxpbmUsICciP3BnX3RlbXBfP1swLTldKyI/XC4nLCAncGdf dGVtcC4nKSBBUyBsaW5lCitGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBfZGVmYXVsdCc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKSBBUyBsaW5lCitXSEVSRSBsaW5lIExJS0UgJ0NSRUFU RSAlJzsKKworU0VMRUNUIHJlZ2V4cF9yZXBsYWNlKGxpbmUsICciP3BnX3RlbXBfP1swLTldKyI/ XC4nLCAncGdfdGVtcC4nKSBBUyBsaW5lCitGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBfZGVs ZXRlJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElL RSAnQ1JFQVRFICUnOworCitTRUxFQ1QgcmVnZXhwX3JlcGxhY2UobGluZSwgJyI/cGdfdGVtcF8/ WzAtOV0rIj9cLicsICdwZ190ZW1wLicpIEFTIGxpbmUKK0ZST00gcGdfZ2V0X3RhYmxlX2RkbCgn dGVtcF9kcm9wJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpIEFTIGxpbmUKK1dIRVJFIGxp bmUgTElLRSAnQ1JFQVRFICUnOworUk9MTEJBQ0s7CisKKy0tIFByZXR0eSBtb2RlLgorU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFs c2UnLCAncHJldHR5JywgJ3RydWUnKTsKKworLS0gVkFSSUFESUMgQVJSQVlbLi4uXSBjYWxsIGZv cm06IG9wdGlvbiBwYWlycyBjYW4gYmUgcGFzc2VkIGFzIGEgc2luZ2xlCistLSB0ZXh0W10gdGFn Z2VkIHdpdGggVkFSSUFESUMsIGluIGFkZGl0aW9uIHRvIHRoZSBwb3NpdGlvbmFsIHNwZWxsaW5n CistLSBleGVyY2lzZWQgYWJvdmUuICBUaGlzIHJlcXVpcmVzIHByb2FyZ3R5cGVzIHRvIGRlY2xh cmUgdGhlIHZhcmlhZGljCistLSBhcmd1bWVudCBhcyB0aGUgYXJyYXkgdHlwZSAoX3RleHQpLgor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZBUklBRElDIEFSUkFZWydvd25lcicsICdmYWxzZSdd KTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQVJJQURJQyBBUlJBWVsnb3duZXInLCAnZmFs c2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcmV0 dHknLCAndHJ1ZSddOjp0ZXh0W10pOworCistLSBWQVJJQURJQyBOVUxMOjp0ZXh0W10gaXMgZXF1 aXZhbGVudCB0byBvbWl0dGluZyB0aGUgdmFyaWFkaWMgYXJndW1lbnRzOworLS0gY2hlY2sgdGhl IHJvdyBjb3VudCByYXRoZXIgdGhhbiB0aGUgcm93cyB0aGVtc2VsdmVzLCBiZWNhdXNlIHdpdGhv dXQKKy0tICdvd25lcicsICdmYWxzZScgdGhlIG91dHB1dCBjb250YWlucyBhbiBBTFRFUiBUQUJM RSAuLi4gT1dORVIgVE8gbGluZQorLS0gdGhhdCB2YXJpZXMgYWNyb3NzIHRlc3QgcnVubmVycy4K K1NFTEVDVCBjb3VudCgqKSA+IDAgQVMgb2sKKyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNp Yyc6OnJlZ2NsYXNzLCBWQVJJQURJQyBOVUxMOjp0ZXh0W10pOworCistLSBpbmNsdWRlIC8gZXhj bHVkZSBnYXRpbmc6IGVhY2ggZW1pdHMgZWl0aGVyIG9ubHkgdGhlIGxpc3RlZCBraW5kcworLS0g KGluY2x1ZGUpIG9yIGV2ZXJ5IGtpbmQgZXhjZXB0IHRoZSBsaXN0ZWQgb25lcyAoZXhjbHVkZSku ICBUaGUgdHdvCistLSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgS2luZCB2b2NhYnVsYXJ5OiB0 YWJsZSwgaW5kZXhlcywKKy0tIHByaW1hcnlfa2V5LCB1bmlxdWUsIGNoZWNrLCBmb3JlaWduX2tl eXMsIGV4Y2x1c2lvbiwgcnVsZXMsCistLSBzdGF0aXN0aWNzLCB0cmlnZ2VycywgcG9saWNpZXMs IHJscywgcmVwbGljYV9pZGVudGl0eSwgcGFydGl0aW9ucy4KKy0tIE5PVCBOVUxMIGlzIG5vdCBp biB0aGUgdm9jYWJ1bGFyeSAtIGFsd2F5cyBlbWl0dGVkIHRvIHByZXZlbnQKKy0tIHByb2R1Y2lu ZyBzY2hlbWFzIHRoYXQgc2lsZW50bHkgYWNjZXB0IE5VTExzIHRoZSBzb3VyY2Ugd291bGQKKy0t IGhhdmUgcmVqZWN0ZWQuCistLQorLS0gZXhjbHVkZT1pbmRleGVzIGhpZGVzIHRoZSBDUkVBVEUg SU5ERVggc3RhdGVtZW50cy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6 OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdleGNsdWRlJywgJ2luZGV4ZXMnKTsKKworLS0gZXhjbHVkZT1wcmltYXJ5X2tleSx1bmlx dWUsY2hlY2ssZm9yZWlnbl9rZXlzLGV4Y2x1c2lvbiBoaWRlcyBldmVyeQorLS0gdGFibGUtbGV2 ZWwgY29uc3RyYWludC4gIElubGluZSBDSEVDSyBpbiB0aGUgQ1JFQVRFIFRBQkxFIGJvZHkgaXMK Ky0tIHN1cHByZXNzZWQgdG9vLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25z Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ2V4Y2x1ZGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcmltYXJ5 X2tleSx1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXlzLGV4Y2x1c2lvbicpOworCistLSBleGNsdWRl PWZvcmVpZ25fa2V5cyBzdXBwcmVzc2VzIG9ubHkgRk9SRUlHTiBLRVkgY29uc3RyYWludHM7Cist LSBQUklNQVJZIEtFWSwgVU5JUVVFLCBDSEVDSywgYW5kIG5hbWVkIE5PVCBOVUxMIHN0YXkuICBU aGlzIGlzIHRoZQorLS0gZmlyc3QgcGFzcyBvZiB0aGUgdHdvLXBhc3MgRkstY2xvbmUgd29ya2Zs b3c6IGVtaXQgdGFibGVzIHdpdGhvdXQKKy0tIGNyb3NzLXRhYmxlIEZLcywgbG9hZCBkYXRhLCB0 aGVuIHJlLXJ1biB3aXRoIGluY2x1ZGU9Zm9yZWlnbl9rZXlzCistLSB0byBhZGQgdGhlbSBvbmNl IGFsbCB0YXJnZXRzIGV4aXN0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25z Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ2V4Y2x1ZGUnLCAnZm9yZWlnbl9rZXlzJyk7CisKKy0tIGluY2x1ZGU9Zm9yZWlnbl9r ZXlzIGlzIHRoZSBzZWNvbmQgcGFzcyBvZiB0aGUgdHdvLXBhc3MgRkstY2xvbmUKKy0tIHdvcmtm bG93OiBlbWl0IG9ubHkgdGhlIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCAuLi4gRk9S RUlHTgorLS0gS0VZIHJvd3M7IHRoZSBDUkVBVEUgVEFCTEUgYW5kIGV2ZXJ5IG5vbi1GSyBzdWIt b2JqZWN0IGFyZQorLS0gc3VwcHJlc3NlZCAodGhlIHRhYmxlIGFscmVhZHkgZXhpc3RzIGZyb20g dGhlIGZpcnN0IHBhc3MpLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6 cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ2luY2x1ZGUnLCAnZm9yZWlnbl9rZXlzJyk7CisKKy0tIEEgdGFibGUgd2l0aCBubyBmb3Jl aWduIGtleXMgcHJvZHVjZXMgbm8gcm93cyB1bmRlcgorLS0gaW5jbHVkZT1mb3JlaWduX2tleXMu CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JlZmQnOjpyZWdjbGFzcywgJ293bmVy JywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZScsICdm b3JlaWduX2tleXMnKTsKKworLS0gaW5jbHVkZT10YWJsZSBlbWl0cyBvbmx5IHRoZSBiYXJlIENS RUFURSBUQUJMRSAod2l0aCBhbnkgaW5saW5lCistLSBjb2x1bW4tbGV2ZWwgTk9UIE5VTEwgYW5k IENIRUNLKSAtIG5vIGluZGV4ZXMsIG5vIFBSSU1BUlkgS0VZIEFMVEVSLAorLS0gbm8gb3RoZXIg c3ViLW9iamVjdHMuICBVc2VmdWwgZm9yIGNhcHR1cmluZyBhIHRhYmxlJ3Mgc2hhcGUgd2l0aG91 dAorLS0gcHVsbGluZyBpbiBldmVyeXRoaW5nIGF0dGFjaGVkIHRvIGl0LgorU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGUnLCAndGFibGUnKTsKKworLS0g aW5jbHVkZSBhbmQgZXhjbHVkZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGUnLCAnZm9yZWlnbl9rZXlzJywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjbHVkZScsICdmb3JlaWduX2tleXMn KTsKKworLS0gUHViL3N1YiBzY2hlbWEgY2xvbmU6IGtlZXAgdGhlIHRhYmxlIGFuZCBpdHMgcHJp bWFyeSBrZXksIGRyb3AgdGhlCistLSByZXN0IG9mIHRoZSBjb25zdHJhaW50cyBzbyB0aGUgc3Vi c2NyaWJlciBjYW4gcmVwbGljYXRlIHdpdGhvdXQKKy0tIHB1bGxpbmcgY3Jvc3MtdGFibGUgZGVw ZW5kZW5jaWVzIGFsb25nLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6 cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ2V4Y2x1ZGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bmlxdWUsY2hl Y2ssZm9yZWlnbl9rZXlzLGV4Y2x1c2lvbicpOworCistLSBleGNsdWRlPXJ1bGVzIGhpZGVzIHRo ZSBDUkVBVEUgUlVMRS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncnQnOjpyZWdj bGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn ZXhjbHVkZScsICdydWxlcycpOworCistLSBleGNsdWRlPXN0YXRpc3RpY3MgaGlkZXMgdGhlIENS RUFURSBTVEFUSVNUSUNTLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzdHgnOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnZXhjbHVkZScsICdzdGF0aXN0aWNzJyk7CisKKy0tIGV4Y2x1ZGU9cmxzIGhpZGVzIHRoZSBF TkFCTEUvRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZIHRvZ2dsZXMuCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3Jscyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdleGNsdWRlJywgJ3JscycpOworCistLSBleGNsdWRl PXJlcGxpY2FfaWRlbnRpdHkgaGlkZXMgdGhlIFJFUExJQ0EgSURFTlRJVFkgY2xhdXNlLgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9mdWxsJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2x1ZGUnLCAncmVw bGljYV9pZGVudGl0eScpOworCistLSBQYXJ0aXRpb24gY2hpbGRyZW4gYXJlIGVtaXR0ZWQgYnkg ZGVmYXVsdDsgZXhjbHVkZT1wYXJ0aXRpb25zCistLSBzdXBwcmVzc2VzIHRoZW0gc28gb25seSB0 aGUgcGFydGl0aW9uZWQtdGFibGUgcGFyZW50IGNvbWVzIG91dC4KK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2x1ZGUnLCAncGFydGl0aW9ucycp OworCistLSBVbmtub3duIGtpbmQgbmFtZSBpcyByZWplY3RlZCBhdCBvcHRpb24tcGFyc2UgdGlt ZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjbHVkZScs ICdub19zdWNoX2tpbmQnKTsKKworLS0gV2hpdGVzcGFjZSBhcm91bmQga2luZCBuYW1lcyBpcyBh bGxvd2VkOyBjYXNlIGlzIGZvbGRlZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn aWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdleGNsdWRlJywgJyAgSU5ERVhFUyAgLCAgIFJVTEVTICAnKTsKKworLS0gc2No ZW1hX3F1YWxpZmllZD1mYWxzZSBzdHJpcHMgdGhlIHNjaGVtYSBmcm9tIHRoZSB0YXJnZXQgdGFi bGUgaXRzZWxmCistLSBhbmQgZnJvbSBzYW1lLXNjaGVtYSBzaWJsaW5nIHJlZmVyZW5jZXMgKGlu aGVyaXRhbmNlL3BhcnRpdGlvbgorLS0gcGFyZW50cywgaWRlbnRpdHkgc2VxdWVuY2VzIGluIHRo ZSBzYW1lIHNjaGVtYSksIHdoaWxlIGNyb3NzLXNjaGVtYQorLS0gcmVmZXJlbmNlcyBhcmUga2Vw dCBxdWFsaWZpZWQgZm9yIGNvcnJlY3RuZXNzLgorLS0KKy0tIEJhcmUgQ1JFQVRFIFRBQkxFIGZv ciBhbiBvcmRpbmFyeSB0YWJsZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFz aWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworCistLSBJTkhFUklUUyBwYXJl bnQgaW4gdGhlIHNhbWUgc2NoZW1hIGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ2NoJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2Un KTsKKworLS0gUGFydGl0aW9uIHBhcmVudCBpbiB0aGUgc2FtZSBzY2hlbWEgaXMgZW1pdHRlZCB1 bnF1YWxpZmllZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3Jhbmdl XzEnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworCistLSBDcm9zcy1zY2hlbWEg RksgdGFyZ2V0IGtlZXBzIHF1YWxpZmljYXRpb24uICBUaGUgJ3JlZmQnIHRhYmxlIGlzIGluCist LSBwZ3RibF9kZGxfdGVzdDsgcGxhY2UgYW4gRksgdGFyZ2V0IGluIGEgZGlmZmVyZW50IHNjaGVt YSBhbmQgdmVyaWZ5IGl0CistLSBzdGF5cyBxdWFsaWZpZWQgZXZlbiB3aXRoIHNjaGVtYV9xdWFs aWZpZWQ9ZmFsc2UuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9vdGhlcjsKK0NSRUFURSBUQUJM RSBwZ3RibF9kZGxfb3RoZXIucGFyZW50IChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRB QkxFIHhzY2hlbWFfZmsgKAorICAgIGlkICBpbnQgUFJJTUFSWSBLRVksCisgICAgcGlkIGludCBS RUZFUkVOQ0VTIHBndGJsX2RkbF9vdGhlci5wYXJlbnQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ3hzY2hlbWFfZmsnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScp OworCistLSBJZGVudGl0eSBjb2x1bW4gd2l0aCBhIGN1c3RvbSBzZXF1ZW5jZSBuYW1lIGluIHRo ZSBzYW1lIHNjaGVtYSBpcworLS0gZW1pdHRlZCB1bnF1YWxpZmllZC4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnaWRfY3VzdG9tJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFs c2UnKTsKKworLS0gUm91bmQtdHJpcDogd2l0aCBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLCBhZnRl ciBTRVQgc2VhcmNoX3BhdGggdGhlCistLSBEREwgY2FuIGJlIHJlcGxheWVkIGludG8gYSBkaWZm ZXJlbnQgdGFyZ2V0IHNjaGVtYS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3JlcGxheTsKK0RP ICQkCitERUNMQVJFCisgICAgc3RtdCB0ZXh0OworQkVHSU4KKyAgICBTRVQgTE9DQUwgc2VhcmNo X3BhdGggPSBwZ3RibF9kZGxfcmVwbGF5OworICAgIEZPUiBzdG10IElOCisgICAgICAgIFNFTEVD VCBsaW5lIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3Rlc3QuYmFzaWMnOjpyZWdj bGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvd25lcics ICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2No ZW1hX3F1YWxpZmllZCcsICdmYWxzZScpIEFTIGxpbmUKKyAgICBMT09QCisgICAgICAgIEVYRUNV VEUgc3RtdDsKKyAgICBFTkQgTE9PUDsKK0VORCAkJDsKK1NFTEVDVCByZWxuYW1lc3BhY2U6OnJl Z25hbWVzcGFjZTo6dGV4dCwgcmVsbmFtZQorRlJPTSBwZ19jbGFzcyBXSEVSRSBvaWQgPSAncGd0 YmxfZGRsX3JlcGxheS5iYXNpYyc6OnJlZ2NsYXNzOworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3Jl cGxheSBDQVNDQURFOworRFJPUCBUQUJMRSB4c2NoZW1hX2ZrOworRFJPUCBTQ0hFTUEgcGd0Ymxf ZGRsX290aGVyIENBU0NBREU7CisKKy0tIExvY2FsbHktZGVjbGFyZWQgQ0hFQ0sgb24gYSBwYXJ0 aXRpb24gY2hpbGQgaGFzIG5vIGlubGluZSBjb2x1bW4KKy0tIGxpc3QgdG8gbGl2ZSBpbiAoUEFS VElUSU9OIE9GIGZvcm0pLCBzbyBpdCBtdXN0IGNvbWUgb3V0IGFzIGEKKy0tIHNlcGFyYXRlIEFM VEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBzdGF0ZW1lbnQuCitDUkVBVEUgVEFCTEUgcGFy dGVkX2NoayAoaWQgaW50LCB2YWwgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFU RSBUQUJMRSBwYXJ0ZWRfY2hrX2NoaWxkIFBBUlRJVElPTiBPRiBwYXJ0ZWRfY2hrCisgICAgKENP TlNUUkFJTlQgY2hrX2lubGluZSBDSEVDSyAodmFsID4gMCkpCisgICAgRk9SIFZBTFVFUyBGUk9N ICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2No a19jaGlsZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKK0RST1AgVEFCTEUgcGFydGVk X2NoazsKKworLS0gSW5oZXJpdGFuY2UgY2hpbGRyZW4gb2YgYSBwYXJlbnQgd2l0aCBhIGdlbmVy YXRlZCBjb2x1bW4gc2hvdWxkIG5vdAorLS0gZW1pdCBhbiBBTFRFUiBDT0xVTU4gLi4uIFNFVCBE RUZBVUxUIGZvciB0aGUgaW5oZXJpdGVkIGdlbmVyYXRlZAorLS0gY29sdW1uOiB0aGUgR0VORVJB VEVEIGV4cHJlc3Npb24gY2FycmllcyBkb3duIHRocm91Z2ggaW5oZXJpdGFuY2UsCistLSBhbmQg U0VUIERFRkFVTFQgd291bGQgZmFpbCBhdCByZXBsYXkgYWdhaW5zdCBhIGdlbmVyYXRlZCBjb2x1 bW4uCitDUkVBVEUgVEFCTEUgcGFyX2dlbiAoCisgICAgaWQgaW50LAorICAgIGcgIGludCBHRU5F UkFURUQgQUxXQVlTIEFTIChpZCAqIDIpIFNUT1JFRAorKTsKK0NSRUFURSBUQUJMRSBjaF9nZW4g KCkgSU5IRVJJVFMgKHBhcl9nZW4pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdj aF9nZW4nOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CitEUk9QIFRBQkxFIHBhcl9nZW4g Q0FTQ0FERTsKKworLS0gQSB1c2VyLW5hbWVkIE5PVCBOVUxMIG9uIGEgbG9jYWwgY29sdW1uIGlz IGVtaXR0ZWQgaW5saW5lIGFzCistLSAiQ09OU1RSQUlOVCBuYW1lIE5PVCBOVUxMIiBzbyB0aGUg b3JpZ2luYWwgbmFtZSBpcyBwcmVzZXJ2ZWQuICBBbgorLS0gYXV0by1uYW1lZCBOT1QgTlVMTCBv biBhIGxvY2FsIGNvbHVtbiBpcyBlbWl0dGVkIGFzIGEgcGxhaW4gaW5saW5lCistLSAiTk9UIE5V TEwiIC0gUEcgcmUtY3JlYXRlcyB0aGUgYXV0by1uYW1lZCBjb25zdHJhaW50IHdoZW4gQ1JFQVRF CistLSBUQUJMRSBydW5zLCBzbyB0aGUgY29uc3RyYWludCBsb29wIHNraXBzIGJvdGggZm9ybXMg dG8gYXZvaWQgdGhlCistLSByZWR1bmRhbnQgKGFuZCBvbiB0YWJsZS1yZW5hbWUgb3Igc2VxdWVu Y2UtY29sbGlzaW9uLCBicm9rZW4pCistLSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQg Li4uIE5PVCBOVUxMIHN0YXRlbWVudC4KK0NSRUFURSBUQUJMRSBubl9uYW1lZCAoCisgICAgYSBp bnQgQ09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCwKKyAgICBiIGludCBOT1QgTlVMTAorKTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5fbmFtZWQnOjpyZWdjbGFzcywgJ293bmVy JywgJ2ZhbHNlJyk7CitEUk9QIFRBQkxFIG5uX25hbWVkOworCistLSBSZW5hbWluZyB0aGUgdGFi bGUgYWZ0ZXIgYW4gSURFTlRJVFkgTk9UIE5VTEwgY29sdW1uIHdhcyBkZWNsYXJlZAorLS0gbGVh dmVzIHRoZSBhdXRvLW5hbWVkIGNvbnN0cmFpbnQgZnJvemVuIGF0IHRoZSBvcmlnaW5hbCBuYW1l LCB3aGljaAorLS0gbm8gbG9uZ2VyIG1hdGNoZXMgdGhlIHBvc3QtcmVuYW1lICI8dGFibGU+Xzxj b2w+X25vdF9udWxsIiBwYXR0ZXJuLgorLS0gVGhlIGVtaXR0ZWQgRERMIG11c3Qgc3RpbGwgcm91 bmQtdHJpcDogdGhlIGNvbnN0cmFpbnQgbG9vcCBtdXN0IG5vdAorLS0gQUxURVIgVEFCTEUgLi4u IEFERCBDT05TVFJBSU5UIGEgc2Vjb25kIE5PVCBOVUxMLCBzaW5jZSBDUkVBVEUgVEFCTEUKKy0t IHdpdGggdGhlIGlubGluZSBJREVOVElUWSBhbHJlYWR5IGNyZWF0ZXMgYW4gYXV0by1OT1QtTlVM TCB1bmRlciB0aGUKKy0tIG5ldyB0YWJsZSBuYW1lIGFuZCBQRyBvbmx5IHBlcm1pdHMgb25lIE5P VCBOVUxMIHBlciBjb2x1bW4uCitDUkVBVEUgVEFCTEUgbm5fcmVuYW1lZCAoCisgICAgYSBpbnQg R0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSBOT1QgTlVMTAorKTsKK0FMVEVSIFRBQkxFIG5u X3JlbmFtZWQgUkVOQU1FIFRPIG5uX3JlbmFtZWQyOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdubl9yZW5hbWVkMic6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKK0RST1Ag VEFCTEUgbm5fcmVuYW1lZDI7CisKKy0tIExvY2FsbHktZGVjbGFyZWQgTk9UIE5VTEwgb24gYW4g aW5oZXJpdGVkIGNvbHVtbi4gIFRoZSBjb2x1bW4gaXRzZWxmCistLSBpcyBvbWl0dGVkIGZyb20g dGhlIGNoaWxkJ3MgY29sdW1uIGxpc3QgKGF0dGlzbG9jYWw9ZmFsc2UpLCBzbyB0aGUKKy0tIHVz ZXItbmFtZWQgTk9UIE5VTEwgbXVzdCBjb21lIG91dCB2aWEgdGhlIHBvc3QtQ1JFQVRFIGNvbnN0 cmFpbnQKKy0tIGxvb3AgcmF0aGVyIHRoYW4gaW5saW5lLgorQ1JFQVRFIFRBQkxFIG5uX3BhciAo YSBpbnQpOworQ1JFQVRFIFRBQkxFIG5uX2NoIChiIGludCkgSU5IRVJJVFMgKG5uX3Bhcik7CitB TFRFUiBUQUJMRSBubl9jaCBBREQgQ09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCBhOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9jaCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFs c2UnKTsKK0RST1AgVEFCTEUgbm5fcGFyIENBU0NBREU7CisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9 ZmFsc2UgbXVzdCBkcm9wIHRoZSBzY2hlbWEgcHJlZml4IGZyb20gREVGQVVMVAorLS0gZXhwcmVz c2lvbnMgYW5kIGlubGluZSBDSEVDSyBib2RpZXMgdGhhdCByZWZlcmVuY2Ugc2FtZS1zY2hlbWEK Ky0tIG9iamVjdHMgKHNlcXVlbmNlIHZpYSBuZXh0dmFsLCBmdW5jdGlvbiB2aWEgZGlyZWN0IGNh bGwpLiAgVGhpcworLS0gcmVsaWVzIG9uIHRoZSBkZXBhcnNlciByZXNwZWN0aW5nIHRoZSBuYXJy b3dlZCBzZWFyY2hfcGF0aCByYXRoZXIKKy0tIHRoYW4gb24gc3Vic3RyaW5nIHN0cmlwcGluZy4K K0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3hyZWY7CitDUkVBVEUgU0VRVUVOQ0UgcGd0YmxfZGRs X3hyZWYubXlzZXE7CitDUkVBVEUgRlVOQ1RJT04gcGd0YmxfZGRsX3hyZWYuZihpbnQpIFJFVFVS TlMgaW50IExBTkdVQUdFIHNxbCBJTU1VVEFCTEUKKyAgICBBUyAnU0VMRUNUICQxJzsKK0NSRUFU RSBUQUJMRSBwZ3RibF9kZGxfeHJlZi50ICgKKyAgICBpZCAgaW50IERFRkFVTFQgbmV4dHZhbCgn cGd0YmxfZGRsX3hyZWYubXlzZXEnKSwKKyAgICB2YWwgaW50LAorICAgIENPTlNUUkFJTlQgY2hr IENIRUNLIChwZ3RibF9kZGxfeHJlZi5mKHZhbCkgPiAwKQorKTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3hyZWYudCc6OnJlZ2NsYXNzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKK0RST1AgU0NIRU1BIHBn dGJsX2RkbF94cmVmIENBU0NBREU7CisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UgbXVzdCBO T1QgY29ycnVwdCBzdHJpbmcgbGl0ZXJhbHMgd2hvc2UKKy0tIGNvbnRlbnRzIGhhcHBlbiB0byBj b250YWluIHRoZSBzY2hlbWEgbmFtZSBmb2xsb3dlZCBieSBhIGRvdC4gIFRoZQorLS0gaW4tc3Ry aW5nIHN0YXRlIG9mIHRoZSBwcmVmaXggc3RyaXBwZXIgcHJlc2VydmVzIHRoZW0gdmVyYmF0aW0u CitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9zdHI7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3N0 ci5wIChpZCBpbnQsIG5vdGUgdGV4dCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUg VEFCTEUgcGd0YmxfZGRsX3N0ci5wYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3N0ci5wCisgICAg KENPTlNUUkFJTlQgY2hrIENIRUNLIChub3RlIDw+ICdwZ3RibF9kZGxfc3RyLnNlY3JldCcpKQor ICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3BndGJsX2RkbF9zdHIucGMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CitEUk9QIFNDSEVNQSBwZ3RibF9k ZGxfc3RyIENBU0NBREU7CisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UgbXVzdCBOT1QgY29y cnVwdCBkb3VibGUtcXVvdGVkIGlkZW50aWZpZXJzCistLSB3aG9zZSBjb250ZW50cyBoYXBwZW4g dG8gY29udGFpbiB0aGUgc2NoZW1hIG5hbWUgZm9sbG93ZWQgYnkgYSBkb3QKKy0tIChmb3IgZXhh bXBsZSBhIGNvbHVtbiBsaXRlcmFsbHkgbmFtZWQgIjxzY2hlbWE+LndlaXJkIiBpbnNpZGUgdGhh dAorLS0gc2NoZW1hKS4gIFRoZSBpbi1pZGVudCBzdGF0ZSBvZiB0aGUgcHJlZml4IHN0cmlwcGVy IHByZXNlcnZlcyB0aGVtCistLSB2ZXJiYXRpbS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3Fp ZDsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfcWlkLnAgKGlkIGludCwgInBndGJsX2RkbF9xaWQu d2VpcmQiIGludCkKKyAgICBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBw Z3RibF9kZGxfcWlkLnBjIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfcWlkLnAKKyAgICAoQ09OU1RS QUlOVCBjaGsgQ0hFQ0sgKCJwZ3RibF9kZGxfcWlkLndlaXJkIiA+IDApKQorICAgIEZPUiBWQUxV RVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Bn dGJsX2RkbF9xaWQucGMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hl bWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfcWlkIENBU0NB REU7CisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ugd2hlbiB0aGUgYmFzZSBzY2hlbWEgbmFt ZSBpdHNlbGYgcmVxdWlyZXMKKy0tIHF1b3RpbmcgKGl0cyBwcmVmaXggc3RhcnRzIHdpdGggIiku ICBCb3RoIGZvcm1zIG9mIHRoZSBwcmVmaXggLQorLS0gYmFyZS1sb3dlcmNhc2UgYW5kIHF1b3Rl ZCAtIG11c3QgYmUgc3RyaXBwZWQgZnJvbSBvdXRlcgorLS0gQUxURVIgVEFCTEUgLyBPTiAvIENS RUFURSBJTkRFWCBwcmVmaXhlcywgd2hpbGUgaW5uZXIgcXVvdGVkCistLSBpZGVudGlmaWVycyB0 aGF0IGhhcHBlbiB0byBiZWdpbiB0aGUgc2FtZSB3YXkgbXVzdCBiZSBwcmVzZXJ2ZWQuCitDUkVB VEUgU0NIRU1BICJQZ1RibC1EZGwtUSI7CitDUkVBVEUgVEFCTEUgIlBnVGJsLURkbC1RIi4iVCIg KGlkIGludCwgdmFsIGludCwKKyAgICBDT05TVFJBSU5UIGNoayBDSEVDSyAodmFsID4gMCkpOwor Q1JFQVRFIElOREVYICJUX3ZhbF9pZHgiIE9OICJQZ1RibC1EZGwtUSIuIlQiICh2YWwpOworU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCciUGdUYmwtRGRsLVEiLiJUIic6OnJlZ2NsYXNz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvd25lcicsICdmYWxzZScsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsK K0RST1AgU0NIRU1BICJQZ1RibC1EZGwtUSIgQ0FTQ0FERTsKKworLS0gRXJyb3I6IG5vdCBhbiBv cmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0YWJsZS4KK0NSRUFURSBWSUVXIHYgQVMgU0VMRUNUIDEg QVMgeDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndic6OnJlZ2NsYXNzKTsKKwor Q1JFQVRFIFNFUVVFTkNFIHM7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3MnOjpy ZWdjbGFzcyk7CisKKy0tIE5VTEwgYXJndW1lbnQgcmV0dXJucyBubyByb3dzLgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKE5VTEwpOworCistLSBVbnJlY29nbml6ZWQgb3B0aW9uLgor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnYm9ndXMn LCAndHJ1ZScpOworCistLSBPZGQgbnVtYmVyIG9mIHZhcmlhZGljIGFyZ3MuCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdwcmV0dHknKTsKKworLS0g ZXhjbHVkZT1wcmltYXJ5X2tleSBvbiBhIHRhYmxlIHdob3NlIFJFUExJQ0EgSURFTlRJVFkgcmVm ZXJlbmNlcworLS0gdGhlIFBLIHdvdWxkIGVtaXQgYSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElO REVYIGNsYXVzZSB0aGF0CistLSByZWZlcmVuY2VkIGFuIGluZGV4IHRoZSBzYW1lIERETCBqdXN0 IGRyb3BwZWQuICBSZXF1aXJlIHRoZSB1c2VyCistLSB0byBhbHNvIGV4Y2x1ZGUgcmVwbGljYV9p ZGVudGl0eSBpbiB0aGF0IGNhc2UuCitDUkVBVEUgVEFCTEUgcmlfcGtfZXhjbCAoYSBpbnQgUFJJ TUFSWSBLRVkpOworQUxURVIgVEFCTEUgcmlfcGtfZXhjbCBSRVBMSUNBIElERU5USVRZIFVTSU5H IElOREVYIHJpX3BrX2V4Y2xfcGtleTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cmlfcGtfZXhjbCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdleGNsdWRlJywgJ3ByaW1hcnlfa2V5Jyk7CistLSBTYW1lIGNhbGwg YnV0IGFsc28gZXhjbHVkaW5nIHJlcGxpY2FfaWRlbnRpdHkgc3VjY2VlZHMuCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3BrX2V4Y2wnOjpyZWdjbGFzcywgJ293bmVyJywgJ2Zh bHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjbHVkZScsICdwcmltYXJ5 X2tleSxyZXBsaWNhX2lkZW50aXR5Jyk7CitEUk9QIFRBQkxFIHJpX3BrX2V4Y2w7CisKKy0tIFJv dW5kLXRyaXAgdmVyaWZpY2F0aW9uLiAgRm9yIGV2ZXJ5IHRlc3QgdGFibGUsIGNhcHR1cmUgdGhl IERETCB0aGUKKy0tIGZ1bmN0aW9uIGVtaXRzLCBkcm9wIHRoZSBzY2hlbWEsIHJlcGxheSBlYWNo IHRhYmxlJ3MgRERMIGluCistLSBkZXBlbmRlbmN5IG9yZGVyLCBhbmQgY29uZmlybSB0aGF0IHBn X2dldF90YWJsZV9kZGwgb24gdGhlIHJlY3JlYXRlZAorLS0gcmVsYXRpb24gbWF0Y2hlcyB0aGUg b3JpZ2luYWwgbGluZS1mb3ItbGluZS4gIFRoZSBmaW5hbCBTRUxFQ1QgbXVzdAorLS0gcmV0dXJu IHplcm8gcm93cy4KK0NSRUFURSBURU1QIFRBQkxFIHBndGJsX2RkbF9ydF9vcmlnIChuYW1lIHRl eHQsIG9yZCBpbnQsIGxpbmUgdGV4dCk7CitJTlNFUlQgSU5UTyBwZ3RibF9kZGxfcnRfb3JpZwor U0VMRUNUIHQubmFtZSwgby5vcmQsIG8ubGluZQorRlJPTSAoVkFMVUVTCisgICAgICAgICgnYmFz aWMnKSwgKCdpZF9jb2xzJyksICgnaWRfY3VzdG9tJyksICgnZ2VuX2NvbHMnKSwgKCdzdG9yYWdl X2NvbHMnKSwKKyAgICAgICAgKCdyZWZkJyksICgnY29ucycpLCAoJ2lkeGQnKSwKKyAgICAgICAg KCdwYXInKSwgKCdjaCcpLCAoJ2F0dG9wdCcpLAorICAgICAgICAoJ3BhcnRlZF9yYW5nZScpLCAo J3BhcnRlZF9yYW5nZV8xJyksICgncGFydGVkX3JhbmdlX2RlZicpLAorICAgICAgICAoJ3BhcnRl ZF9oYXNoJyksICgncGFydGVkX2hhc2hfMCcpLAorICAgICAgICAoJ3J0X2xvZycpLCAoJ3J0Jyks CisgICAgICAgICgnc3R4JyksICgncmxzJyksICgncmlfZnVsbCcpLCAoJ3JpX2lkeCcpLCAoJ3Vu bycpCisgICAgICkgQVMgdChuYW1lKSwKKyAgICAgTEFURVJBTCBwZ19nZXRfdGFibGVfZGRsKCgn cGd0YmxfZGRsX3Rlc3QuJyB8fCB0Lm5hbWUpOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdvd25lcicsICdmYWxzZScpIFdJVEggT1JESU5BTElUWSBvKGxpbmUsIG9y ZCk7CisKK0RPICQkCitERUNMQVJFCisgICAgdGFibGVzIENPTlNUQU5UIHRleHRbXSA6PSBBUlJB WVsKKyAgICAgICAgJ2Jhc2ljJywgJ2lkX2NvbHMnLCAnaWRfY3VzdG9tJywgJ2dlbl9jb2xzJywg J3N0b3JhZ2VfY29scycsCisgICAgICAgICdyZWZkJywgJ2NvbnMnLCAnaWR4ZCcsCisgICAgICAg ICdwYXInLCAnY2gnLCAnYXR0b3B0JywKKyAgICAgICAgJ3BhcnRlZF9yYW5nZScsICdwYXJ0ZWRf cmFuZ2VfMScsICdwYXJ0ZWRfcmFuZ2VfZGVmJywKKyAgICAgICAgJ3BhcnRlZF9oYXNoJywgJ3Bh cnRlZF9oYXNoXzAnLAorICAgICAgICAncnRfbG9nJywgJ3J0JywKKyAgICAgICAgJ3N0eCcsICdy bHMnLCAncmlfZnVsbCcsICdyaV9pZHgnLCAndW5vJworICAgIF07CisgICAgdCB0ZXh0OworICAg IHN0bXQgdGV4dDsKK0JFR0lOCisgICAgRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3QgQ0FTQ0FE RTsKKyAgICBDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF90ZXN0OworICAgIEZPUkVBQ0ggdCBJTiBB UlJBWSB0YWJsZXMgTE9PUAorICAgICAgICBGT1Igc3RtdCBJTgorICAgICAgICAgICAgU0VMRUNU IGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZyBXSEVSRSBuYW1lID0gdCBPUkRFUiBCWSBvcmQK KyAgICAgICAgTE9PUAorICAgICAgICAgICAgRVhFQ1VURSBzdG10OworICAgICAgICBFTkQgTE9P UDsKKyAgICBFTkQgTE9PUDsKK0VORCAkJDsKKworV0lUSCBhZnRlcl9kZGwgQVMgKAorICAgIFNF TEVDVCB0Lm5hbWUsIG8ub3JkLCBvLmxpbmUKKyAgICBGUk9NIChTRUxFQ1QgRElTVElOQ1QgbmFt ZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnKSBBUyB0LAorICAgICAgICAgTEFURVJBTCBwZ19nZXRf dGFibGVfZGRsKCgncGd0YmxfZGRsX3Rlc3QuJyB8fCB0Lm5hbWUpOjpyZWdjbGFzcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnKSBXSVRIIE9SRElO QUxJVFkgbyhsaW5lLCBvcmQpCispCisoU0VMRUNUICdtaXNzaW5nLWluLWNvcHknIEFTIGtpbmQs IG5hbWUsIG9yZCwgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnCisgRVhDRVBUCisgU0VMRUNU ICdtaXNzaW5nLWluLWNvcHknLCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBhZnRlcl9kZGwpCitVTklP TiBBTEwKKyhTRUxFQ1QgJ2V4dHJhLWluLWNvcHknIEFTIGtpbmQsIG5hbWUsIG9yZCwgbGluZSBG Uk9NIGFmdGVyX2RkbAorIEVYQ0VQVAorIFNFTEVDVCAnZXh0cmEtaW4tY29weScsIG5hbWUsIG9y ZCwgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnKQorT1JERVIgQlkga2luZCwgbmFtZSwgb3Jk OworCistLSBDbGVhbnVwLgorRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKLS0g CjIuNTEuMAoK --0000000000000488a00654ebd253--