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 1wbY7u-002ekk-1S for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Jun 2026 06:27:23 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wbY7s-004i18-0e for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Jun 2026 06:27:20 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wbY7r-004i0y-2C for pgsql-hackers@lists.postgresql.org; Mon, 22 Jun 2026 06:27:19 +0000 Received: from mail-ed1-x52f.google.com ([2a00:1450:4864:20::52f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wbY7l-00000001iEl-2BJZ for pgsql-hackers@lists.postgresql.org; Mon, 22 Jun 2026 06:27:16 +0000 Received: by mail-ed1-x52f.google.com with SMTP id 4fb4d7f45d1cf-695bba79ae1so5433417a12.1 for ; Sun, 21 Jun 2026 23:27:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782109630; cv=none; d=google.com; s=arc-20240605; b=NL043QKimH37xCA8j8uZQioBcdUJU9Nn0N9WQ8mj2gntwYtMkwWe4R9hIdXKiMJQez nfpJ8MEOdLiqRpZVv5tftWydsjLNjUUqTWaCnYVEpMXFXCUF0vOtMsIfKXLBiCxtSPvw HhJVqolTFfrOxE9MNZFuUzEH/1X2nN/1y+dgOgJp84JguXHD1i1oSx8lXTe9a/W67M4I fDHdjh2E/tlyzSkKFJmOTWVjfFD8kfGvHRnnjtKATjO3DSP1OnBI0tv9sraHrKK+ScNV w6bHZVHHpBrVb8u5i9JOkKrB1P3pjaH8DP0FOf4tVaopePTScJE0yHuCP0xnHUJySzbW VbIQ== 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=zx3gPG6RhlQ07zeo3+PUFxAkxEKihhlbMjU8dcoJ0P8=; fh=jA1y0o48KsEr1ncbKeaqgkONBUmAh+4Dc8UAqTSPpFs=; b=GBmg1zEKKuJuyl5JO8cVQzsdtnuBdZMoMJ9CcueH8QYJZDzJfhU9UIfDRX9cywO2UI JLg+ap9gdh3ysMqIbnQKqWRBSk40KrDm9VyBavR71XoeZ+NmfFi+c7PMec1j5P4AONpX 2GbsCl5n/ZtWPpB9rTFmIBSY4vJpifi9Y6LxFZqjlCNUGKZoMWNHB2i+VOpnEOmVqtGs BIv1d3zinRJ5NxABnO5MntH4pV/o109DlUO35THAX953WUtM4TuyZweKdOkpNDQY6RJp HnpXkbBzd3ROCE0Zt5wgDJl1rsR3pNsIZwaFPUNz+00q3G7RlU0PlspobiSKp2ZZJvJ6 l+EQ==; 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=1782109630; x=1782714430; 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=zx3gPG6RhlQ07zeo3+PUFxAkxEKihhlbMjU8dcoJ0P8=; b=dY0ov8y7xWKvtaOzQneQqtXcZ0NmlUgFSbGmFwDkiCyVsxzu1KMaONWzro0gOS/lmB udvy+IbXs6VPYuqBTSabA8x7dCf/MZL3dpGVBe2UsQw+zrXhr/SosRgJQqDGMJuVID9t t++/go10Ohy6uSaoxU1wP7ciiRFiUBEt+S07S3mUslId/2Hkegbmj8PLRAPGWkPld0WY Yj6dFXf5r42rEL+neS05LgPyi3Ufd3uUT3HWctJOIEUhuO97Ou/NrkPOILFRzqkidctB wf1VWB9Tgw5IM5YqgMRI7CeJQuS9BstoIKRQ9JC2+hCOQbn+ApVawwpggVixVyiRJO8y VWyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782109630; x=1782714430; 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=zx3gPG6RhlQ07zeo3+PUFxAkxEKihhlbMjU8dcoJ0P8=; b=Wr441EManWzA8/51V6lyQgWbM6RKq9DE4nI8EtW8bqLBOFfyHt9TB+Anyzd/wdMPyO CxEkIYW6r0DiS8YmhSSIHzlcFGn04/DuJsLIUDGESNekjeT0MFCjR68limbH4kV+AOwN Qu2F+S9KI1RoEizZ+Zj5Ctqi1K5a++8HdSidiW4jqUN2tr5sSdfoiEiw3hNeQWQ9dug0 WSpYnNyrdb4Uvo8ax1xLeWh2HkafqDdUEWjnUmlv+B9yxvzPgZ+FTFlU4NK7KFM+Q0gO dhcGB0t3LWGW86OE2I0yn/yFSTU0po+DDs7c54rZ7Pfs2Rv72R0h24EBp7k27i9hGRKd STJQ== X-Gm-Message-State: AOJu0Yzo0ZBMaJQcbCYcSUhPG2ij+VFq927inJrgVea6zLyzUkucrxVL YF1gxZAwD74X9TcxJyZH0LGcxe/iuZtwsFKCuF72BR1mtlO7pOqDlYsLAHVE9B2IL4A2qysQTEq XK6fULcuAhI9uhefiy9SzFdxHxjKY7PCKcpMA+6To X-Gm-Gg: AfdE7clvpAOyKX2728mYvycF4DrJe3XsuihnBlZlBP4czMPFQaQncNhODrT11TyQNk3 yeGrWoqR1JTKX4kVXPpMifLFImmwzQ5pGComk8jkvnL4UhNoUBKntKK8XjbYtSHsmuVjWMZjHcf yvSEKtYVy6qm4JRGFJbGU0pACtkLanv1TI1MbfUAJdN22hgfPAqnP6YqkmvVNx843tvttViMoZ4 ZDgv1RZQ2abT1gA6Di7+wSSW0tPYmiPl61ZB7pqJisxvZxg1bvRv+zj314c3FZpLLYkxGW6FMr/ 6grBGlGiWA== X-Received: by 2002:a17:907:d06:b0:beb:d461:7b09 with SMTP id a640c23a62f3a-c09b7e9a999mr380044666b.11.1782109630471; Sun, 21 Jun 2026 23:27:10 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Akshay Joshi Date: Mon, 22 Jun 2026 11:56:58 +0530 X-Gm-Features: AVVi8Cf4yCrqQF5dElI9EBJ0kOWbnAN1huKrlZZ8o68YvgaoWAWFBnWHN6neHhc Message-ID: Subject: Re: [PATCH] Add pg_get_table_ddl() to reconstruct CREATE TABLE statements To: Zsolt Parragi Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000007a1ac60654d1bbe7" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007a1ac60654d1bbe7 Content-Type: multipart/alternative; boundary="0000000000007a1ac10654d1bbe5" --0000000000007a1ac10654d1bbe5 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks for the review; you're right, `includes_foreign_keys=3Dfalse` on its own is a half-measure. Re-running with the default to add FKs back collides with the existing CREATE TABLE, UNIQUE indexes, etc. I've added an only_foreign_keys option (boolean, default false) as the natural complement of includes_foreign_keys=3Dfalse. When set to true, the function emits only the ALTER TABLE ... ADD CONSTRAINT ... FOREIGN KEY statements and suppresses everything else (CREATE TABLE, owner, indexes, non-FK constraints, rules, statistics, replica identity, RLS toggles). Partition-child recursion still runs so child FKs are reached too. Combining `only_foreign_keys=3Dtrue` with `includes_foreign_keys=3Dfalse` i= s rejected upfront since it would produce no output. The documentation paragraph for `includes_foreign_keys` now directs users to `only_foreign_keys` as the intended second pass. Regression coverage adds three cases: the FK-only emission for your cons example, the zero-row result for a table without FKs, and the error path. The v8 patch is ready for review. On Sat, Jun 20, 2026 at 1:15=E2=80=AFAM Zsolt Parragi wrote: > The previous features all look good to me, I only have one question > for the new flag. > > > Calling > > pg_get_table_ddl(t, 'includes_foreign_keys', 'false') now emits > everything > > except FOREIGN KEY constraints. This covers the multi-tenant clone > > workflow: create tables first without cross-table references, then re-r= un > > with the default to add the constraints once all targets exist. > > I think this feature needs a bit more documentation, an > "only_foreign_keys" flag, or both. > > CREATE TABLE refd (id int PRIMARY KEY); > CREATE TABLE cons (a int CHECK(a>0), b int UNIQUE, c int REFERENCES > refd(id)); > > -- pass 1: running without foreign keys > SELECT * FROM pg_get_table_ddl('cons','includes_foreign_keys','false'); > -- execute everything > > -- loading data > > -- pass 2: running with everything > SELECT * FROM pg_get_table_ddl('cons','includes_foreign_keys','true'); > -- ERROR: relation "cons" already exists (and the unique constraint > also collides) > > I could do a "grep FOREIGN KEY" before executing (unless it's a tricky > schema where that phrase appears elsewhere), or since psql continues > on error, it will simply work if I accept a significant error noise, > but then the documentation should be clear about this limitation. > Following the documented approach and getting a bunch of unexpected > errors could be confusing for users. > > > --0000000000007a1ac10654d1bbe5 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thanks for the review; you're right, `includes_fo= reign_keys=3Dfalse` on its own is a half-measure. Re-running with the defau= lt to add FKs back collides with the existing CREATE TABLE, UNIQUE indexes,= etc.

I've added an only_foreign_keys option (boolean= , default false) as the natural complement of includes_foreign_keys=3Dfalse= . When set to true, the function emits only the ALTER TABLE ... ADD CONSTRA= INT ... FOREIGN KEY statements and suppresses everything else (CREATE TABLE= , owner, indexes, non-FK constraints, rules, statistics, replica identity, = RLS toggles). Partition-child recursion still runs so child FKs are reached= too. Combining `only_foreign_keys=3Dtrue` with `includes_foreign_keys=3Dfa= lse` is rejected upfront since it would produce no output.

The documentation paragraph for `includes_foreign_keys` now direct= s users to `only_foreign_keys` as the intended second pass. Regression cove= rage adds three cases: the FK-only emission for your cons example, the zero= -row result for a table without FKs, and the error path.=C2=A0
The v8 patch is ready for review.

O= n Sat, Jun 20, 2026 at 1:15=E2=80=AFAM Zsolt Parragi <zsolt.parragi@percona.com> wrote:
The previous features a= ll look good to me, I only have one question
for the new flag.

> Calling
> pg_get_table_ddl(t, 'includes_foreign_keys', 'false') = now emits everything
> except FOREIGN KEY constraints. This covers the multi-tenant clone
> workflow: create tables first without cross-table references, then re-= run
> with the default to add the constraints once all targets exist.

I think this feature needs a bit more documentation, an
"only_foreign_keys" flag, or both.

CREATE TABLE refd (id int PRIMARY KEY);
CREATE TABLE cons (a int CHECK(a>0), b int UNIQUE, c int REFERENCES refd= (id));

-- pass 1: running without foreign keys
SELECT * FROM pg_get_table_ddl('cons','includes_foreign_keys= 9;,'false');
-- execute everything

-- loading data

-- pass 2: running with everything
SELECT * FROM pg_get_table_ddl('cons','includes_foreign_keys= 9;,'true');
-- ERROR: relation "cons" already exists (and the unique constrai= nt
also collides)

I could do a "grep FOREIGN KEY" before executing (unless it's= a tricky
schema where that phrase appears elsewhere), or since psql continues
on error, it will simply work if I accept a significant error noise,
but then the documentation should be clear about this limitation.
Following the documented approach and getting a bunch of unexpected
errors could be confusing for users.


--0000000000007a1ac10654d1bbe5-- --0000000000007a1ac60654d1bbe7 Content-Type: application/octet-stream; name="v8-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Disposition: attachment; filename="v8-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqotzalq0 RnJvbSBmMjg4MDEwZDcyMTZiNzE3Zjk1NTNiMTY2OTgyOGQzZTA3YWRhNzM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBUdWUsIDIgSnVuIDIwMjYgMTQ6MTg6NDAgKzA1MzAKU3ViamVjdDogW1BB VENIIHY4XSBBZGQgcGdfZ2V0X3RhYmxlX2RkbCgpIHRvIHJlY29uc3RydWN0IENSRUFURSBUQUJM RQogc3RhdGVtZW50cwoKVGhlIGZ1bmN0aW9uIHJlY29uc3RydWN0cyB0aGUgQ1JFQVRFIFRBQkxF IHN0YXRlbWVudCBmb3IgYW4gb3JkaW5hcnkgb3IKcGFydGl0aW9uZWQgdGFibGUsIGZvbGxvd2Vk IGJ5IHRoZSBBTFRFUiBUQUJMRSAvIENSRUFURSBJTkRFWCAvCkNSRUFURSBSVUxFIC8gQ1JFQVRF IFNUQVRJU1RJQ1Mgc3RhdGVtZW50cyBuZWVkZWQgdG8gcmVzdG9yZSBpdHMgZnVsbApkZWZpbml0 aW9uLiAgRWFjaCBzdGF0ZW1lbnQgaXMgcmV0dXJuZWQgYXMgYSBzZXBhcmF0ZSByb3cuCgpTdXBw b3J0ZWQgcGVyLWNvbHVtbiBmZWF0dXJlczogZGF0YSB0eXBlIHdpdGggdHlwZSBtb2RpZmllcnMs IENPTExBVEUsClNUT1JBR0UsIENPTVBSRVNTSU9OIChwZ2x6IC8gbHo0KSwgR0VORVJBVEVEIEFM V0FZUyBBUyAoZXhwcikKU1RPUkVEL1ZJUlRVQUwsIEdFTkVSQVRFRCBBTFdBWVN8QlkgREVGQVVM VCBBUyBJREVOVElUWSAod2l0aCBzZXF1ZW5jZQpvcHRpb25zKSwgREVGQVVMVCwgTk9UIE5VTEws IGFuZCBwZXItY29sdW1uIGF0dG9wdGlvbnMgZW1pdHRlZCBhcwpBTFRFUiBDT0xVTU4gU0VUICgu Li4pLgoKU3VwcG9ydGVkIHRhYmxlLWxldmVsIGZlYXR1cmVzOiBVTkxPR0dFRCwgSU5IRVJJVFMs IFBBUlRJVElPTiBCWSAoUkFOR0UKLyBMSVNUIC8gSEFTSCBwYXJlbnRzKSwgUEFSVElUSU9OIE9G IHBhcmVudCBGT1IgVkFMVUVTIChGUk9NL1RPLCBXSVRICm1vZHVsdXMvcmVtYWluZGVyLCBERUZB VUxUKSwgVVNJTkcgdGFibGUgYWNjZXNzIG1ldGhvZCwgV0lUSAoocmVsb3B0aW9ucyksIFRBQkxF U1BBQ0UsIGFuZCBpbmxpbmUgQ0hFQ0sgY29uc3RyYWludHMgaW4gdGhlCkNSRUFURSBUQUJMRSBi b2R5LgoKU3VwcG9ydGVkIHN1Yi1vYmplY3RzIChyZS11c2luZyBleGlzdGluZyBkZXBhcnNlIGhl bHBlcnMgZnJvbQpydWxldXRpbHMuYyk6IGluZGV4ZXMgdmlhIHBnX2dldF9pbmRleGRlZl9zdHJp bmcsIGNvbnN0cmFpbnRzCihQUklNQVJZIEtFWSwgVU5JUVVFLCBGT1JFSUdOIEtFWSwgRVhDTFVE RSwgbmFtZWQgTk9UIE5VTEwpIHZpYQpwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kLCBydWxl cyB2aWEgcGdfZ2V0X3J1bGVkZWYsIGV4dGVuZGVkCnN0YXRpc3RpY3MgdmlhIHBnX2dldF9zdGF0 aXN0aWNzb2JqZGVmX3N0cmluZywgUkVQTElDQSBJREVOVElUWQpOT1RISU5HL0ZVTEwvVVNJTkcg SU5ERVgsIEFMVEVSIFRBQkxFIEVOQUJMRS9GT1JDRSBST1cgTEVWRUwgU0VDVVJJVFksCmFuZCBj aGlsZC1sb2NhbCBERUZBVUxUIG92ZXJyaWRlcyBvbiBpbmhlcml0YW5jZS9wYXJ0aXRpb24gY2hp bGRyZW4uCgpEZWZhdWx0IG9taXNzaW9uIGNvbnZlbnRpb246IGV2ZXJ5IG9wdGlvbmFsIGNsYXVz ZSBpcyBkcm9wcGVkIHdoZW4gaXRzCnZhbHVlIGVxdWFscyB3aGF0IHRoZSBzeXN0ZW0gd291bGQg cmVhcHBseSBvbiByb3VuZC10cmlwLCBpbmNsdWRpbmcKdHlwZS1kZWZhdWx0IENPTExBVEUsIHBl ci10eXBlIFNUT1JBR0UsIHRoZSBhdXRvLWdlbmVyYXRlZCBpZGVudGl0eQpzZXF1ZW5jZSBuYW1l IGFuZCBwYXJhbWV0ZXIgZGVmYXVsdHMsIGhlYXAgYWNjZXNzIG1ldGhvZCwgZGVmYXVsdApSRVBM SUNBIElERU5USVRZLCBkaXNhYmxlZCBSTFMgdG9nZ2xlcywgZW1wdHkgcmVsb3B0aW9ucywgYW5k IHRoZQpkZWZhdWx0IHRhYmxlc3BhY2UuCgpBIHJlZ3Jlc3Npb24gdGVzdCB1bmRlciBzcmMvdGVz dC9yZWdyZXNzIGNvdmVycyBvcmRpbmFyeSB0YWJsZXMsCmlkZW50aXR5IChkZWZhdWx0IGFuZCBj dXN0b20gc2VxdWVuY2Ugb3B0aW9ucyksIGdlbmVyYXRlZCBjb2x1bW5zLApTVE9SQUdFL0NPTVBS RVNTSU9OLCBjb25zdHJhaW50cyAoQ0hFQ0svVU5JUVVFL0ZLIHdpdGggZGVmZXJyYWJsZSksCmZ1 bmN0aW9uYWwgYW5kIHBhcnRpYWwgaW5kZXhlcywgaW5oZXJpdGFuY2UgYW5kIHBhcnRpdGlvbmlu ZywKcGFydGl0aW9uIGNoaWxkcmVuIHdpdGggRk9SIFZBTFVFUyBGUk9NL1RPLCBXSVRIIG1vZHVs dXMvcmVtYWluZGVyLCBhbmQKREVGQVVMVCwgcnVsZXMsIGV4dGVuZGVkIHN0YXRpc3RpY3MsIFJM UyB0b2dnbGVzLCBSRVBMSUNBIElERU5USVRZLApVTkxPR0dFRCB3aXRoIHJlbG9wdGlvbnMsIHBl ci1jb2x1bW4gYXR0b3B0aW9ucywgY2hpbGQgREVGQVVMVApvdmVycmlkZXMsIHByZXR0eSBtb2Rl LCBvd25lcj1mYWxzZSwgYW5kIHRoZSBlcnJvciBwYXRocyBmb3Igdmlld3MsCnNlcXVlbmNlcywg TlVMTCwgdW5rbm93biBvcHRpb25zLCBhbmQgb2RkLXZhcmlhZGljIGFyZ3VtZW50IGNvdW50cy4K CkF1dGhvcjogQWtzaGF5IEpvc2hpIDxha3NoYXkuam9zaGlAZW50ZXJwcmlzZWRiLmNvbT4KUmV2 aWV3ZWQtYnk6IE1hcmNvcyBQZWdvcmFybyA8bWFyY29zQGYxMC5jb20uYnI+ClJldmlld2VkLWJ5 OiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgpSZXZpZXdlZC1ieTog S3lvdGFybyBIb3JpZ3VjaGkgPGhvcmlreW90YS5udHRAZ21haWwuY29tPgotLS0KIGRvYy9zcmMv c2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sICAgICAgICAgICAgICB8ICAxMDUgKwogc3JjL2JhY2tl bmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jICAgICAgICAgICAgIHwgICA5MyArCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICAgICAgfCAgIDMwICstCiBzcmMvYmFja2Vu ZC91dGlscy9hZHQvZGRsdXRpbHMuYyAgICAgICAgICAgICAgfCAxNzc1ICsrKysrKysrKysrKysr KysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVyaXRzLmggICAgICAgICAgICAgfCAgICAx ICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICB8ICAgIDcg Kwogc3JjL2luY2x1ZGUvY29tbWFuZHMvdGFibGVjbWRzLmggICAgICAgICAgICAgIHwgICAgMyAr CiAuLi4vcmVncmVzcy9leHBlY3RlZC9wZ19nZXRfdGFibGVfZGRsLm91dCAgICAgfCAgNzc5ICsr KysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAg ICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFibGVfZGRsLnNxbCAgICAgfCAg NDY1ICsrKysrCiAxMCBmaWxlcyBjaGFuZ2VkLCAzMjU3IGluc2VydGlvbnMoKyksIDMgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wZ19n ZXRfdGFibGVfZGRsLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3BnX2dldF90YWJsZV9kZGwuc3FsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVu Yy1pbmZvLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbAppbmRleCA4ZmZh N2U4MzI3NS4uYjAzYjY1Njg5ZDMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMt aW5mby5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sCkBAIC0zOTQ3 LDYgKzM5NDcsMTExIEBAIGFjbCAgICAgIHwge3Bvc3RncmVzPWFyd2REeHRtL3Bvc3RncmVzLGZv bz1yL3Bvc3RncmVzfQogICAgICAgICA8bGl0ZXJhbD5UQUJMRVNQQUNFPC9saXRlcmFsPi4KICAg ICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgIDwvcm93PgorICAgICAgPHJvdz4KKyAgICAgICA8 ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUi PgorICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+cGdfZ2V0X3RhYmxlX2Rk bDwvcHJpbWFyeT4KKyAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5wZ19n ZXRfdGFibGVfZGRsPC9mdW5jdGlvbj4KKyAgICAgICAgKCA8cGFyYW1ldGVyPnRhYmxlPC9wYXJh bWV0ZXI+IDx0eXBlPnJlZ2NsYXNzPC90eXBlPgorICAgICAgICA8b3B0aW9uYWw+LCA8bGl0ZXJh bD5WQVJJQURJQzwvbGl0ZXJhbD4gPHBhcmFtZXRlcj5vcHRpb25zPC9wYXJhbWV0ZXI+CisgICAg ICAgIDx0eXBlPnRleHQ8L3R5cGU+IDwvb3B0aW9uYWw+ICkKKyAgICAgICAgPHJldHVybnZhbHVl PnNldG9mIHRleHQ8L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgUmVjb25zdHJ1Y3RzIHRoZSA8Y29tbWFuZD5DUkVBVEUgVEFCTEU8L2NvbW1hbmQ+ IHN0YXRlbWVudCBmb3IgdGhlCisgICAgICAgIHNwZWNpZmllZCBvcmRpbmFyeSBvciBwYXJ0aXRp b25lZCB0YWJsZSwgZm9sbG93ZWQgYnkgdGhlCisgICAgICAgIDxjb21tYW5kPkFMVEVSIFRBQkxF PC9jb21tYW5kPiwgPGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5kPiwKKyAgICAgICAgPGNv bW1hbmQ+Q1JFQVRFIFJVTEU8L2NvbW1hbmQ+LCBhbmQgPGNvbW1hbmQ+Q1JFQVRFIFNUQVRJU1RJ Q1M8L2NvbW1hbmQ+CisgICAgICAgIHN0YXRlbWVudHMgbmVlZGVkIHRvIHJlY3JlYXRlIHRoZSB0 YWJsZSdzIGNvbHVtbnMsIGNvbnN0cmFpbnRzLAorICAgICAgICBpbmRleGVzLCBydWxlcywgZXh0 ZW5kZWQgc3RhdGlzdGljcywgYW5kIHJvdy1sZXZlbCBzZWN1cml0eSBmbGFncy4KKyAgICAgICAg SW5oZXJpdGVkIGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzIGFyZSBlbWl0dGVkIGJ5IHRoZSBwYXJl bnQgdGFibGUncworICAgICAgICBEREwgYW5kIGFyZSBub3QgZHVwbGljYXRlZCBvbiBpbmhlcml0 YW5jZSBjaGlsZHJlbiBvciBwYXJ0aXRpb25zLgorICAgICAgICBFYWNoIHN0YXRlbWVudCBpcyBy ZXR1cm5lZCBhcyBhIHNlcGFyYXRlIHJvdy4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBvcHRpb25z IGFyZSBzdXBwb3J0ZWQ6CisgICAgICAgIDxsaXRlcmFsPnByZXR0eTwvbGl0ZXJhbD4gKGJvb2xl YW4pIGZvciBmb3JtYXR0ZWQgb3V0cHV0LAorICAgICAgICA8bGl0ZXJhbD5vd25lcjwvbGl0ZXJh bD4gKGJvb2xlYW4pIHRvIGluY2x1ZGUgdGhlCisgICAgICAgIDxjb21tYW5kPkFMVEVSIFRBQkxF IC4uLiBPV05FUiBUTzwvY29tbWFuZD4gc3RhdGVtZW50LAorICAgICAgICA8bGl0ZXJhbD50YWJs ZXNwYWNlPC9saXRlcmFsPiAoYm9vbGVhbikgdG8gaW5jbHVkZSB0aGUKKyAgICAgICAgPGxpdGVy YWw+VEFCTEVTUEFDRTwvbGl0ZXJhbD4gY2xhdXNlIG9uIHRoZQorICAgICAgICA8Y29tbWFuZD5D UkVBVEUgVEFCTEU8L2NvbW1hbmQ+IHN0YXRlbWVudCwgYW5kIGEgZmFtaWx5IG9mCisgICAgICAg IDxsaXRlcmFsPmluY2x1ZGVzXzxyZXBsYWNlYWJsZT5jYXRlZ29yeTwvcmVwbGFjZWFibGU+PC9s aXRlcmFsPgorICAgICAgICBib29sZWFucyB0aGF0IGdhdGUgZW1pc3Npb24gb2Ygb3B0aW9uYWwg c3ViLW9iamVjdHM6CisgICAgICAgIDxsaXRlcmFsPmluY2x1ZGVzX2luZGV4ZXM8L2xpdGVyYWw+ LAorICAgICAgICA8bGl0ZXJhbD5pbmNsdWRlc19jb25zdHJhaW50czwvbGl0ZXJhbD4sCisgICAg ICAgIDxsaXRlcmFsPmluY2x1ZGVzX2ZvcmVpZ25fa2V5czwvbGl0ZXJhbD4sCisgICAgICAgIDxs aXRlcmFsPmluY2x1ZGVzX3J1bGVzPC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+aW5jbHVk ZXNfc3RhdGlzdGljczwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPmluY2x1ZGVzX3RyaWdn ZXJzPC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+aW5jbHVkZXNfcG9saWNpZXM8L2xpdGVy YWw+LAorICAgICAgICA8bGl0ZXJhbD5pbmNsdWRlc19ybHM8L2xpdGVyYWw+ICh0aGUKKyAgICAg ICAgPGNvbW1hbmQ+RU5BQkxFPC9jb21tYW5kPi88Y29tbWFuZD5GT1JDRSBST1cgTEVWRUwgU0VD VVJJVFk8L2NvbW1hbmQ+CisgICAgICAgIHRvZ2dsZXMpLCBhbmQKKyAgICAgICAgPGxpdGVyYWw+ aW5jbHVkZXNfcmVwbGljYV9pZGVudGl0eTwvbGl0ZXJhbD4uICBFYWNoIG9mIHRoZXNlCisgICAg ICAgIGRlZmF1bHRzIHRvIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+LgorICAgICAgICA8bGl0ZXJh bD5pbmNsdWRlc19mb3JlaWduX2tleXM8L2xpdGVyYWw+IGFjdHMgYXMgYSBmaW5lci1ncmFpbmVk CisgICAgICAgIGdhdGUgYmVuZWF0aCA8bGl0ZXJhbD5pbmNsdWRlc19jb25zdHJhaW50czwvbGl0 ZXJhbD46IHdoZW4gc2V0CisgICAgICAgIHRvIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPiwgPGxp dGVyYWw+Rk9SRUlHTiBLRVk8L2xpdGVyYWw+CisgICAgICAgIGNvbnN0cmFpbnRzIGFyZSBzdXBw cmVzc2VkIHdoaWxlIG90aGVyIGNvbnN0cmFpbnQgdHlwZXMKKyAgICAgICAgKDxsaXRlcmFsPlBS SU1BUlkgS0VZPC9saXRlcmFsPiwgPGxpdGVyYWw+VU5JUVVFPC9saXRlcmFsPiwKKyAgICAgICAg PGxpdGVyYWw+Q0hFQ0s8L2xpdGVyYWw+LCA8bGl0ZXJhbD5FWENMVURFPC9saXRlcmFsPiwgYW5k IG5hbWVkCisgICAgICAgIDxsaXRlcmFsPk5PVCBOVUxMPC9saXRlcmFsPikgYXJlIHN0aWxsIGVt aXR0ZWQ7IHRoaXMgaXMgaW50ZW5kZWQKKyAgICAgICAgZm9yIHNjaGVtYS1jbG9uaW5nIHdvcmtm bG93cyB0aGF0IG5lZWQgdG8gY3JlYXRlIGFsbCB0YWJsZXMKKyAgICAgICAgYmVmb3JlIGFueSBj cm9zcy10YWJsZSByZWZlcmVuY2VzIGV4aXN0LiAgVGhlCisgICAgICAgIDxsaXRlcmFsPm9ubHlf Zm9yZWlnbl9rZXlzPC9saXRlcmFsPiBvcHRpb24gKGJvb2xlYW4sIGRlZmF1bHQKKyAgICAgICAg PGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+KSBpcyB0aGUgbmF0dXJhbCBjb21wbGVtZW50OiB3aGVu IHNldAorICAgICAgICB0byA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPiwgdGhlIGZ1bmN0aW9uIGVt aXRzIG9ubHkgdGhlCisgICAgICAgIDxjb21tYW5kPkFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RS QUlOVCAuLi4gRk9SRUlHTiBLRVk8L2NvbW1hbmQ+CisgICAgICAgIHN0YXRlbWVudHMgYW5kIHN1 cHByZXNzZXMgZXZlcnl0aGluZyBlbHNlICh0aGUKKyAgICAgICAgPGNvbW1hbmQ+Q1JFQVRFIFRB QkxFPC9jb21tYW5kPiwgb3duZXIsIGluZGV4ZXMsIG5vbi1GSworICAgICAgICBjb25zdHJhaW50 cywgcnVsZXMsIHN0YXRpc3RpY3MsIHJlcGxpY2EgaWRlbnRpdHksIGFuZCBSTFMKKyAgICAgICAg dG9nZ2xlcykuICBDb21iaW5lZCB3aXRoIGEgcHJpb3IgY2FsbCB1c2luZworICAgICAgICA8bGl0 ZXJhbD5pbmNsdWRlc19mb3JlaWduX2tleXM8L2xpdGVyYWw+IHNldCB0bworICAgICAgICA8bGl0 ZXJhbD5mYWxzZTwvbGl0ZXJhbD4sIHRoaXMgc3VwcG9ydHMgdGhlIHR5cGljYWwgdHdvLXBhc3MK KyAgICAgICAgd29ya2Zsb3c6IGNyZWF0ZSB0aGUgdGFibGVzIGFuZCBsb2FkIGRhdGEgZmlyc3Qs IHRoZW4gYWRkIHRoZQorICAgICAgICBjcm9zcy10YWJsZSBmb3JlaWduLWtleSByZWZlcmVuY2Vz LiAgU2V0dGluZworICAgICAgICA8bGl0ZXJhbD5vbmx5X2ZvcmVpZ25fa2V5czwvbGl0ZXJhbD4g dG8gPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4KKyAgICAgICAgdG9nZXRoZXIgd2l0aCA8bGl0ZXJh bD5pbmNsdWRlc19mb3JlaWduX2tleXM8L2xpdGVyYWw+IHNldCB0bworICAgICAgICA8bGl0ZXJh bD5mYWxzZTwvbGl0ZXJhbD4gaXMgcmVqZWN0ZWQgYXMgaXQgd291bGQgcHJvZHVjZSBubworICAg ICAgICBvdXRwdXQuICBUaGUgPGxpdGVyYWw+aW5jbHVkZXNfcGFydGl0aW9uPC9saXRlcmFsPiBv cHRpb24sCisgICAgICAgIHdoaWNoIGRlZmF1bHRzIHRvIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFs PiwgY29udHJvbHMgd2hldGhlcgorICAgICAgICB0aGUgRERMIGZvciBwYXJ0aXRpb24gY2hpbGRy ZW4gaXMgYXBwZW5kZWQgYWZ0ZXIgYQorICAgICAgICBwYXJ0aXRpb25lZC10YWJsZSBwYXJlbnQu CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPGxpdGVyYWw+c2No ZW1hX3F1YWxpZmllZDwvbGl0ZXJhbD4gb3B0aW9uIChib29sZWFuLCBkZWZhdWx0CisgICAgICAg IDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+KSBjb250cm9scyB3aGV0aGVyIHRoZSB0YXJnZXQgdGFi bGUncyBvd24KKyAgICAgICAgc2NoZW1hIGlzIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgRERM LiAgV2hlbiBzZXQgdG8KKyAgICAgICAgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LCB0aGUgdGFi bGUgbmFtZSBpcyBlbWl0dGVkIHVucXVhbGlmaWVkCisgICAgICAgIGluIHRoZSA8Y29tbWFuZD5D UkVBVEUgVEFCTEU8L2NvbW1hbmQ+IGFuZCBldmVyeSBzdWJzZXF1ZW50CisgICAgICAgIDxjb21t YW5kPkFMVEVSIFRBQkxFPC9jb21tYW5kPiwgPGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5k PiwKKyAgICAgICAgPGNvbW1hbmQ+Q1JFQVRFIFJVTEU8L2NvbW1hbmQ+LCBhbmQKKyAgICAgICAg PGNvbW1hbmQ+Q1JFQVRFIFNUQVRJU1RJQ1M8L2NvbW1hbmQ+IHN0YXRlbWVudC4gIFJlZmVyZW5j ZXMgdG8KKyAgICAgICAgb2JqZWN0cyBpbiB0aGUgc2FtZSBzY2hlbWEgYXMgdGhlIHRhcmdldCB0 YWJsZSAoaW5oZXJpdGFuY2UKKyAgICAgICAgcGFyZW50cywgcGFydGl0aW9uIHBhcmVudHMsIGlk ZW50aXR5IHNlcXVlbmNlcywgYW5kIGFueQorICAgICAgICBzYW1lLXNjaGVtYSBvYmplY3QgdGhl IGRlcGFyc2UgaGVscGVycyBoYXBwZW4gdG8gbWVudGlvbikgYXJlCisgICAgICAgIGFsc28gZW1p dHRlZCB1bnF1YWxpZmllZCwgc28gdGhlIHNjcmlwdCBjYW4gYmUgcmVwbGF5ZWQgdW5kZXIgYQor ICAgICAgICBkaWZmZXJlbnQgPHZhcm5hbWU+c2VhcmNoX3BhdGg8L3Zhcm5hbWU+IHRvIHJlY3Jl YXRlIHRoZSB0YWJsZQorICAgICAgICBpbiBhbm90aGVyIHNjaGVtYS4gIENyb3NzLXNjaGVtYSBy ZWZlcmVuY2VzIChmb3IgZXhhbXBsZSBhCisgICAgICAgIGZvcmVpZ24ga2V5IHRhcmdldCBpbiBh IGRpZmZlcmVudCBzY2hlbWEpIHJlbWFpbiBxdWFsaWZpZWQgZm9yCisgICAgICAgIGNvcnJlY3Ru ZXNzLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgQWxsIHRocmVlIGZv cm1zIG9mIDxjb21tYW5kPkNSRUFURSBUQUJMRTwvY29tbWFuZD4gYXJlIHN1cHBvcnRlZDoKKyAg ICAgICAgdGhlIG9yZGluYXJ5IGNvbHVtbi1saXN0IGZvcm0sIHRoZSB0eXBlZC10YWJsZSBmb3Jt CisgICAgICAgICg8bGl0ZXJhbD5PRiA8cmVwbGFjZWFibGU+dHlwZV9uYW1lPC9yZXBsYWNlYWJs ZT48L2xpdGVyYWw+LCB3aXRoCisgICAgICAgIHBlci1jb2x1bW4gPGxpdGVyYWw+V0lUSCBPUFRJ T05TPC9saXRlcmFsPiBvdmVycmlkZXMgZm9yIGxvY2FsCisgICAgICAgIGRlZmF1bHRzLCA8bGl0 ZXJhbD5OT1QgTlVMTDwvbGl0ZXJhbD4sIGFuZCA8bGl0ZXJhbD5DSEVDSzwvbGl0ZXJhbD4KKyAg ICAgICAgY29uc3RyYWludHMpLCBhbmQgdGhlIDxsaXRlcmFsPlBBUlRJVElPTiBPRjwvbGl0ZXJh bD4gZm9ybS4KKyAgICAgICAgPGxpdGVyYWw+VEVNUE9SQVJZPC9saXRlcmFsPiBhbmQgPGxpdGVy YWw+VU5MT0dHRUQ8L2xpdGVyYWw+CisgICAgICAgIHBlcnNpc3RlbmNlIG1vZGVzIGFyZSBlbWl0 dGVkIGZyb20KKyAgICAgICAgPHN0cnVjdGZpZWxkPnJlbHBlcnNpc3RlbmNlPC9zdHJ1Y3RmaWVs ZD4uICBGb3IgdGVtcG9yYXJ5IHRhYmxlcworICAgICAgICByZWdpc3RlcmVkIGluIHRoZSBjdXJy ZW50IHNlc3Npb24sIHRoZQorICAgICAgICA8bGl0ZXJhbD5PTiBDT01NSVQgREVMRVRFIFJPV1M8 L2xpdGVyYWw+IGFuZAorICAgICAgICA8bGl0ZXJhbD5PTiBDT01NSVQgRFJPUDwvbGl0ZXJhbD4g Y2xhdXNlcyBhcmUgZW1pdHRlZDsgdGhlIGRlZmF1bHQKKyAgICAgICAgPGxpdGVyYWw+T04gQ09N TUlUIFBSRVNFUlZFIFJPV1M8L2xpdGVyYWw+IGlzIG9taXR0ZWQuCisgICAgICAgPC9wYXJhPjwv ZW50cnk+CisgICAgICA8L3Jvdz4KICAgICAgPC90Ym9keT4KICAgICA8L3Rncm91cD4KICAgIDwv dGFibGU+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMgYi9z cmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMKaW5kZXggNGI5ODAyYWFmY2MuLjg5NzE1 MWJkNmQxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMKKysr IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jCkBAIC0yMzYsNiArMjM2LDk5IEBA IGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW5fZXh0ZW5kZWQoT2lkIHBhcmVudHJlbElkLCBib29s IG9taXRfZGV0YWNoZWQsCiB9CiAKIAorLyoKKyAqIGZpbmRfaW5oZXJpdGFuY2VfcGFyZW50cwor ICoKKyAqIFJldHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgdGhlIE9JRHMgb2YgYWxsIHJlbGF0aW9u cyB0aGF0IHRoZSByZWxhdGlvbiB3aXRoCisgKiBPSUQgJ3JlbGlkJyBpbmhlcml0cyAqZGlyZWN0 bHkqIGZyb20sIGluIGluaHNlcW5vIG9yZGVyICh0aGUgb3JkZXIgaW4gd2hpY2gKKyAqIHRoZXkg c2hvdWxkIGFwcGVhciBpbiBhbiBJTkhFUklUUyBjbGF1c2UpLgorICoKKyAqIFRoZSBzcGVjaWZp ZWQgbG9jayB0eXBlIGlzIGFjcXVpcmVkIG9uIGVhY2ggcGFyZW50IHJlbGF0aW9uIChidXQgbm90 IG9uIHRoZQorICogZ2l2ZW4gcmVsOyBjYWxsZXIgc2hvdWxkIGFscmVhZHkgaGF2ZSBsb2NrZWQg aXQpLiAgSWYgbG9ja21vZGUgaXMgTm9Mb2NrCisgKiB0aGVuIG5vIGxvY2tzIGFyZSBhY3F1aXJl ZCwgYnV0IGNhbGxlciBtdXN0IGJld2FyZSBvZiByYWNlIGNvbmRpdGlvbnMKKyAqIGFnYWluc3Qg cG9zc2libGUgRFJPUHMgb2YgcGFyZW50IHJlbGF0aW9ucy4KKyAqCisgKiBQYXJ0aXRpb24gY2hp bGRyZW4gYWxzbyBoYXZlIGEgcGdfaW5oZXJpdHMgZW50cnkgcG9pbnRpbmcgdG8gdGhlCisgKiBw YXJ0aXRpb25lZCBwYXJlbnQ7IGNhbGxlcnMgdGhhdCBkaXN0aW5ndWlzaCBJTkhFUklUUyBmcm9t IFBBUlRJVElPTiBPRgorICogbXVzdCBjaGVjayByZWxpc3BhcnRpdGlvbiB0aGVtc2VsdmVzLgor ICovCitMaXN0ICoKK2ZpbmRfaW5oZXJpdGFuY2VfcGFyZW50cyhPaWQgcmVsaWQsIExPQ0tNT0RF IGxvY2ttb2RlKQoreworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJUmVsYXRpb24JcmVsYXRpb247 CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXlbMV07CisJSGVhcFR1cGxlCWlu aGVyaXRzVHVwbGU7CisJT2lkCQkJaW5ocGFyZW50OworCU9pZAkJICAgKm9pZGFycjsKKwlpbnQJ CQltYXhvaWRzLAorCQkJCW51bW9pZHMsCisJCQkJaTsKKworCS8qCisJICogU2NhbiBwZ19pbmhl cml0cyB2aWEgdGhlIChpbmhyZWxpZCwgaW5oc2Vxbm8pIGluZGV4IHNvIHRoYXQgdGhlIHJvd3MK KwkgKiBjb21lIG91dCBpbiBpbmhzZXFubyBvcmRlciwgd2hpY2ggaXMgdGhlIG9yZGVyIHJlcXVp cmVkIGZvciB0aGUKKwkgKiBJTkhFUklUUyBjbGF1c2UuCisJICovCisJbWF4b2lkcyA9IDg7CisJ b2lkYXJyID0gKE9pZCAqKSBwYWxsb2MobWF4b2lkcyAqIHNpemVvZihPaWQpKTsKKwludW1vaWRz ID0gMDsKKworCXJlbGF0aW9uID0gdGFibGVfb3BlbihJbmhlcml0c1JlbGF0aW9uSWQsIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgma2V5WzBdLAorCQkJCUFudW1fcGdfaW5oZXJp dHNfaW5ocmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9i amVjdElkR2V0RGF0dW0ocmVsaWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocmVs YXRpb24sIEluaGVyaXRzUmVsaWRTZXFub0luZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAx LCBrZXkpOworCisJd2hpbGUgKChpbmhlcml0c1R1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2Fu KSkgIT0gTlVMTCkKKwl7CisJCWluaHBhcmVudCA9ICgoRm9ybV9wZ19pbmhlcml0cykgR0VUU1RS VUNUKGluaGVyaXRzVHVwbGUpKS0+aW5ocGFyZW50OworCQlpZiAobnVtb2lkcyA+PSBtYXhvaWRz KQorCQl7CisJCQltYXhvaWRzICo9IDI7CisJCQlvaWRhcnIgPSAoT2lkICopIHJlcGFsbG9jKG9p ZGFyciwgbWF4b2lkcyAqIHNpemVvZihPaWQpKTsKKwkJfQorCQlvaWRhcnJbbnVtb2lkcysrXSA9 IGluaHBhcmVudDsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCisJdGFibGVfY2xv c2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKgorCSAqIEFjcXVpcmUgbG9ja3Mg YW5kIGJ1aWxkIHRoZSByZXN1bHQgbGlzdC4gIFVubGlrZQorCSAqIGZpbmRfaW5oZXJpdGFuY2Vf Y2hpbGRyZW4gd2UgZG8gKm5vdCogc29ydCBieSBPSUQ6IGNhbGxlcnMgbmVlZCB0aGUKKwkgKiBz ZXFuby1vcmRlcmVkIHRyYXZlcnNhbC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtb2lkczsg aSsrKQorCXsKKwkJaW5ocGFyZW50ID0gb2lkYXJyW2ldOworCisJCWlmIChsb2NrbW9kZSAhPSBO b0xvY2spCisJCXsKKwkJCUxvY2tSZWxhdGlvbk9pZChpbmhwYXJlbnQsIGxvY2ttb2RlKTsKKwor CQkJaWYgKCFTZWFyY2hTeXNDYWNoZUV4aXN0czEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKGlu aHBhcmVudCkpKQorCQkJeworCQkJCVVubG9ja1JlbGF0aW9uT2lkKGluaHBhcmVudCwgbG9ja21v ZGUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJbGlzdCA9IGxhcHBlbmRfb2lkKGxp c3QsIGluaHBhcmVudCk7CisJfQorCisJcGZyZWUob2lkYXJyKTsKKworCXJldHVybiBsaXN0Owor fQorCisKIC8qCiAgKiBmaW5kX2FsbF9pbmhlcml0b3JzIC0KICAqCQlSZXR1cm5zIGEgbGlzdCBv ZiByZWxhdGlvbiBPSURzIGluY2x1ZGluZyB0aGUgZ2l2ZW4gcmVsIHBsdXMKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv dGFibGVjbWRzLmMKaW5kZXggMjY1ZGNmZTdmZGEuLmE1ZjQ2NTIyYzMzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy90YWJsZWNtZHMuYwpAQCAtNzM5LDcgKzczOSw2IEBAIHN0YXRpYyBPYmplY3RBZGRyZXNzIEFU RXhlY1NldENvbXByZXNzaW9uKFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJCQkgIGNvbnN0IGNoYXIg KmNvbHVtbiwgTm9kZSAqbmV3VmFsdWUsIExPQ0tNT0RFIGxvY2ttb2RlKTsKIAogc3RhdGljIHZv aWQgaW5kZXhfY29weV9kYXRhKFJlbGF0aW9uIHJlbCwgUmVsRmlsZUxvY2F0b3IgbmV3cmxvY2F0 b3IpOwotc3RhdGljIGNvbnN0IGNoYXIgKnN0b3JhZ2VfbmFtZShjaGFyIGMpOwogCiBzdGF0aWMg dm9pZCBSYW5nZVZhckNhbGxiYWNrRm9yRHJvcFJlbGF0aW9uKGNvbnN0IFJhbmdlVmFyICpyZWws IE9pZCByZWxPaWQsCiAJCQkJCQkJCQkJCU9pZCBvbGRSZWxPaWQsIHZvaWQgKmFyZyk7CkBAIC0y NTE1LDcgKzI1MTQsNyBAQCB0cnVuY2F0ZV9jaGVja19hY3Rpdml0eShSZWxhdGlvbiByZWwpCiAg KiBzdG9yYWdlX25hbWUKICAqCSAgcmV0dXJucyB0aGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvIGEg dHlwc3RvcmFnZS9hdHRzdG9yYWdlIGVudW0gdmFsdWUKICAqLwotc3RhdGljIGNvbnN0IGNoYXIg KgorY29uc3QgY2hhciAqCiBzdG9yYWdlX25hbWUoY2hhciBjKQogewogCXN3aXRjaCAoYykKQEAg LTE5NTU4LDYgKzE5NTU3LDMzIEBAIHJlbW92ZV9vbl9jb21taXRfYWN0aW9uKE9pZCByZWxpZCkK IAl9CiB9CiAKKy8qCisgKiBMb29rIHVwIHRoZSByZWdpc3RlcmVkIE9OIENPTU1JVCBhY3Rpb24g Zm9yIGEgcmVsYXRpb24uCisgKgorICogUmV0dXJucyBPTkNPTU1JVF9OT09QIHdoZW4gbm90aGlu ZyB3YXMgcmVnaXN0ZXJlZCwgd2hpY2ggYWxzbyBjb3ZlcnMKKyAqIHRlbXBvcmFyeSB0YWJsZXMg Y3JlYXRlZCB3aXRoIHRoZSBkZWZhdWx0IE9OIENPTU1JVCBQUkVTRVJWRSBST1dTCisgKiBiZWhh dmlvciAocmVnaXN0ZXJfb25fY29tbWl0X2FjdGlvbigpIHNraXBzIHRob3NlLCBzaW5jZSBubyBh Y3Rpb24gaXMKKyAqIG5lZWRlZCBhdCBjb21taXQpLiAgRW50cmllcyBtYXJrZWQgZm9yIGRlbGV0 aW9uIGluIHRoZSBjdXJyZW50CisgKiB0cmFuc2FjdGlvbiBhcmUgaWdub3JlZC4KKyAqLworT25D b21taXRBY3Rpb24KK2dldF9vbl9jb21taXRfYWN0aW9uKE9pZCByZWxpZCkKK3sKKwlMaXN0Q2Vs bCAgICpsOworCisJZm9yZWFjaChsLCBvbl9jb21taXRzKQorCXsKKwkJT25Db21taXRJdGVtICpv YyA9IChPbkNvbW1pdEl0ZW0gKikgbGZpcnN0KGwpOworCisJCWlmIChvYy0+cmVsaWQgIT0gcmVs aWQpCisJCQljb250aW51ZTsKKwkJaWYgKG9jLT5kZWxldGluZ19zdWJpZCAhPSBJbnZhbGlkU3Vi VHJhbnNhY3Rpb25JZCkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gb2MtPm9uY29tbWl0OworCX0K KwlyZXR1cm4gT05DT01NSVRfTk9PUDsKK30KKwogLyoKICAqIFBlcmZvcm0gT04gQ09NTUlUIGFj dGlvbnMuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYwppbmRleCBmMzJmY2Q0NTNlZi4uNWZi ZjFkNTE1YzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jCkBAIC0yMSwxMiArMjEsMjUgQEAK ICNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxz LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RvYXN0X2Nv bXByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoX21lbWJlcnMuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX2F1dGhpZC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf Y29uc3RyYWludC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2UuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2RiX3JvbGVfc2V0dGluZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYW0u aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19wb2xpY3kuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3NlcXVlbmNlLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19zdGF0aXN0aWNfZXh0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190YWJsZXNw YWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190cmlnZ2VyLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wYXJ0aXRpb24uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJj b21tYW5kcy90YWJsZWNtZHMuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgogI2luY2x1ZGUg ImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKICNpbmNsdWRlICJjb21tb24vcmVscGF0aC5oIgogI2lu Y2x1ZGUgImZ1bmNhcGkuaCIKQEAgLTg3LDYgKzEwMCwxMDcgQEAgc3RhdGljIERhdHVtIHBnX2dl dF90YWJsZXNwYWNlX2RkbF9zcmYoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIE9pZCB0c2lkLCBi b29sIGkKIHN0YXRpYyBMaXN0ICpwZ19nZXRfZGF0YWJhc2VfZGRsX2ludGVybmFsKE9pZCBkYmlk LCBib29sIHByZXR0eSwKIAkJCQkJCQkJCQkgIGJvb2wgbm9fb3duZXIsIGJvb2wgbm9fdGFibGVz cGFjZSk7CiAKKy8qCisgKiBQZXItY29sdW1uIGNhY2hlIG9mIGxvY2FsbHktZGVjbGFyZWQgTk9U IE5VTEwgY29uc3RyYWludHMuICBCdWlsdCBvbmNlCisgKiBieSBjb2xsZWN0X2xvY2FsX25vdF9u dWxsKCkgYW5kIGNvbnN1bHRlZCBieSB0aGUgY29sdW1uLWVtaXQgaGVscGVycworICogYW5kIHRo ZSBwb3N0LUNSRUFURSBjb25zdHJhaW50IGxvb3AuICBFbnRyaWVzIHdpdGggY29ub2lkID09IElu dmFsaWRPaWQKKyAqIG1lYW4gdGhlIGNvbHVtbiBoYXMgbm8gbG9jYWwgTk9UIE5VTEwgY29uc3Ry YWludCByb3cgaW4gcGdfY29uc3RyYWludAorICogKHRoZSBjb2x1bW4gbWF5IHN0aWxsIGhhdmUg YXR0bm90bnVsbD10cnVlIG9uIGEgcHJlLVBHLTE4LXVwZ3JhZGVkCisgKiBjYXRhbG9nLCBpbiB3 aGljaCBjYXNlIGVtaXQgcGxhaW4gaW5saW5lIE5PVCBOVUxMKS4KKyAqLwordHlwZWRlZiBzdHJ1 Y3QgTG9jYWxOb3ROdWxsRW50cnkKK3sKKwlPaWQJCQljb25vaWQ7CisJY2hhcgkgICAqbmFtZTsK Kwlib29sCQlpc19hdXRvOwkJLyogbWF0Y2hlcyAiPHRhYmxlPl88Y29sPl9ub3RfbnVsbCIgKi8K Kwlib29sCQlub19pbmhlcml0OworfQkJCUxvY2FsTm90TnVsbEVudHJ5OworCisvKgorICogV29y a2luZyBjb250ZXh0IHRocmVhZGVkIHRocm91Z2ggdGhlIHBlci1wYXNzIGhlbHBlcnMgYmVsb3cu ICBJbnB1dHMKKyAqIChjYWxsZXItcHJvdmlkZWQgb3B0aW9uIGZsYWdzKSBhcmUgZmlsbGVkIGlu IG9uY2UgYXQgdGhlIHRvcCBvZgorICogcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbCBhbmQgdHJl YXRlZCBhcyByZWFkLW9ubHkgdGhlcmVhZnRlci4gIERlcml2ZWQKKyAqIGZpZWxkcyAocXVhbG5h bWUsIHNjaGVtYV9wcmVmaXgsIG5uX2VudHJpZXMsIHNraXBfbm90bnVsbF9vaWRzKSBhcmUKKyAq IGNvbXB1dGVkIG9uY2UgZHVyaW5nIHNldHVwLiAgRWFjaCBwYXNzIGFwcGVuZHMgdG8gY3R4LT5i dWYgYW5kIHB1c2hlcworICogdGhlIGZpbmlzaGVkIHN0YXRlbWVudCBvbnRvIGN0eC0+c3RhdGVt ZW50cyB2aWEgYXBwZW5kX3N0bXQoKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgVGFibGVEZGxDb250 ZXh0Cit7CisJUmVsYXRpb24JcmVsOworCU9pZAkJCXJlbGlkOworCWJvb2wJCXByZXR0eTsKKwli b29sCQlub19vd25lcjsKKwlib29sCQlub190YWJsZXNwYWNlOworCWJvb2wJCWluY2x1ZGVfaW5k ZXhlczsKKwlib29sCQlpbmNsdWRlX2NvbnN0cmFpbnRzOworCWJvb2wJCWluY2x1ZGVfZm9yZWln bl9rZXlzOworCWJvb2wJCW9ubHlfZm9yZWlnbl9rZXlzOworCWJvb2wJCWluY2x1ZGVfcnVsZXM7 CisJYm9vbAkJaW5jbHVkZV9zdGF0aXN0aWNzOworCWJvb2wJCWluY2x1ZGVfdHJpZ2dlcnM7CisJ Ym9vbAkJaW5jbHVkZV9wb2xpY2llczsKKwlib29sCQlpbmNsdWRlX3JsczsKKwlib29sCQlpbmNs dWRlX3JlcGxpY2FfaWRlbnRpdHk7CisJYm9vbAkJaW5jbHVkZV9wYXJ0aXRpb247CisJYm9vbAkJ c2NoZW1hX3F1YWxpZmllZDsKKworCS8qIERlcml2ZWQgZHVyaW5nIHNldHVwICovCisJT2lkCQkJ YmFzZV9uYW1lc3BhY2U7CisJY2hhcgkgICAqcXVhbG5hbWU7CisJY2hhcgkgICAqc2NoZW1hX3By ZWZpeDsJLyogTlVMTCB3aGVuIHNjaGVtYV9xdWFsaWZpZWQgKi8KKwlpbnQJCQlzYXZlX25lc3Rs ZXZlbDsgLyogPj0gMCBpZiB3ZSBuYXJyb3dlZCBzZWFyY2hfcGF0aCAqLworCUxvY2FsTm90TnVs bEVudHJ5ICpubl9lbnRyaWVzOworCUxpc3QJICAgKnNraXBfbm90bnVsbF9vaWRzOworCisJLyog TXV0YWJsZSB3b3JraW5nIHN0YXRlICovCisJU3RyaW5nSW5mb0RhdGEgYnVmOworCUxpc3QJICAg KnN0YXRlbWVudHM7Cit9CQkJVGFibGVEZGxDb250ZXh0OworCitzdGF0aWMgTGlzdCAqcGdfZ2V0 X3RhYmxlX2RkbF9pbnRlcm5hbChPaWQgcmVsaWQsIGJvb2wgcHJldHR5LAorCQkJCQkJCQkJICAg Ym9vbCBub19vd25lciwgYm9vbCBub190YWJsZXNwYWNlLAorCQkJCQkJCQkJICAgYm9vbCBpbmNs dWRlX2luZGV4ZXMsCisJCQkJCQkJCQkgICBib29sIGluY2x1ZGVfY29uc3RyYWludHMsCisJCQkJ CQkJCQkgICBib29sIGluY2x1ZGVfZm9yZWlnbl9rZXlzLAorCQkJCQkJCQkJICAgYm9vbCBvbmx5 X2ZvcmVpZ25fa2V5cywKKwkJCQkJCQkJCSAgIGJvb2wgaW5jbHVkZV9ydWxlcywKKwkJCQkJCQkJ CSAgIGJvb2wgaW5jbHVkZV9zdGF0aXN0aWNzLAorCQkJCQkJCQkJICAgYm9vbCBpbmNsdWRlX3Ry aWdnZXJzLAorCQkJCQkJCQkJICAgYm9vbCBpbmNsdWRlX3BvbGljaWVzLAorCQkJCQkJCQkJICAg Ym9vbCBpbmNsdWRlX3JscywKKwkJCQkJCQkJCSAgIGJvb2wgaW5jbHVkZV9yZXBsaWNhX2lkZW50 aXR5LAorCQkJCQkJCQkJICAgYm9vbCBpbmNsdWRlX3BhcnRpdGlvbiwKKwkJCQkJCQkJCSAgIGJv b2wgc2NoZW1hX3F1YWxpZmllZCk7CitzdGF0aWMgdm9pZCBhcHBlbmRfY29sdW1uX2RlZnMoU3Ry aW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgYm9vbCBwcmV0dHksCisJCQkJCQkJICAgYm9vbCBp bmNsdWRlX2NvbnN0cmFpbnRzLAorCQkJCQkJCSAgIGJvb2wgc2NoZW1hX3F1YWxpZmllZCwKKwkJ CQkJCQkgICBMb2NhbE5vdE51bGxFbnRyeSAqIG5uX2VudHJpZXMpOworc3RhdGljIHZvaWQgYXBw ZW5kX3R5cGVkX2NvbHVtbl9vdmVycmlkZXMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwK KwkJCQkJCQkJCQkgIGJvb2wgcHJldHR5LCBib29sIGluY2x1ZGVfY29uc3RyYWludHMsCisJCQkJ CQkJCQkJICBMb2NhbE5vdE51bGxFbnRyeSAqIG5uX2VudHJpZXMpOworc3RhdGljIHZvaWQgYXBw ZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50cyhTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVs LAorCQkJCQkJCQkJCQlib29sIHByZXR0eSwgYm9vbCAqZmlyc3QpOworc3RhdGljIGNoYXIgKmZp bmRfYXR0cmRlZl90ZXh0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRudW0sCisJCQkJCQkJ ICAgTGlzdCAqKmRwY29udGV4dCk7CitzdGF0aWMgY2hhciAqbG9va3VwX3JlbG5hbWVfZm9yX2Vt aXQoT2lkIHJlbGlkLCBib29sIHNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJCQkgT2lkIGJhc2Vf bmFtZXNwYWNlKTsKK3N0YXRpYyBjaGFyICpzdHJpcF9zY2hlbWFfcHJlZml4KGNvbnN0IGNoYXIg KnN0bXQsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitzdGF0aWMgTG9jYWxOb3ROdWxsRW50cnkgKiBj b2xsZWN0X2xvY2FsX25vdF9udWxsKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJCSAgTGlzdCAq KnNraXBfb2lkcyk7CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9zdG10KFRhYmxlRGRsQ29udGV4dCAq IGN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRhYmxlRGRsQ29udGV4 dCAqIGN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X293bmVyX3N0bXQoVGFibGVEZGxDb250ZXh0ICog Y3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfY2hpbGRfZGVmYXVsdF9vdmVycmlkZXMoVGFibGVEZGxD b250ZXh0ICogY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfYXR0b3B0aW9ucyhUYWJsZURkbENvbnRl eHQgKiBjdHgpOworc3RhdGljIHZvaWQgZW1pdF9pbmRleGVzKFRhYmxlRGRsQ29udGV4dCAqIGN0 eCk7CitzdGF0aWMgdm9pZCBlbWl0X2xvY2FsX2NvbnN0cmFpbnRzKFRhYmxlRGRsQ29udGV4dCAq IGN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X3J1bGVzKFRhYmxlRGRsQ29udGV4dCAqIGN0eCk7Citz dGF0aWMgdm9pZCBlbWl0X3N0YXRpc3RpY3MoVGFibGVEZGxDb250ZXh0ICogY3R4KTsKK3N0YXRp YyB2b2lkIGVtaXRfcmVwbGljYV9pZGVudGl0eShUYWJsZURkbENvbnRleHQgKiBjdHgpOworc3Rh dGljIHZvaWQgZW1pdF9ybHNfdG9nZ2xlcyhUYWJsZURkbENvbnRleHQgKiBjdHgpOworc3RhdGlj IHZvaWQgZW1pdF9wYXJ0aXRpb25fY2hpbGRyZW4oVGFibGVEZGxDb250ZXh0ICogY3R4KTsKKwog CiAvKgogICogcGFyc2VfZGRsX29wdGlvbnMKQEAgLTExODUsMyArMTI5OSwxNjY0IEBAIHBnX2dl dF9kYXRhYmFzZV9kZGwoUEdfRlVOQ1RJT05fQVJHUykKIAkJU1JGX1JFVFVSTl9ET05FKGZ1bmNj dHgpOwogCX0KIH0KKworLyoKKyAqIGxvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0CisgKgkJUmV0dXJu IGVpdGhlciB0aGUgc2NoZW1hLXF1YWxpZmllZCBvciB0aGUgYmFyZSBxdW90ZWQgbmFtZSBvZiBh CisgKgkJcmVsYXRpb24sIGRlcGVuZGluZyBvbiB0aGUgc2NoZW1hX3F1YWxpZmllZCBmbGFnLgor ICoKKyAqIFdoZW4gc2NoZW1hX3F1YWxpZmllZCBpcyB0cnVlIHRoZSBzY2hlbWEtcXVhbGlmaWVk IG5hbWUgaXMgYWx3YXlzCisgKiByZXR1cm5lZC4gIFdoZW4gZmFsc2UsIHRoZSBiYXJlIHJlbG5h bWUgaXMgcmV0dXJuZWQgb25seSBpZiB0aGUgdGFyZ2V0CisgKiByZWxhdGlvbiBsaXZlcyBpbiBi YXNlX25hbWVzcGFjZSAodGhlIG5hbWVzcGFjZSBvZiB0aGUgdGFibGUgd2hvc2UgRERMIGlzCisg KiBiZWluZyBnZW5lcmF0ZWQpOyBvdGhlcndpc2UgdGhlIHNjaGVtYS1xdWFsaWZpZWQgZm9ybSBp cyByZXR1cm5lZCwKKyAqIGJlY2F1c2UgY3Jvc3Mtc2NoZW1hIHJlZmVyZW5jZXMgKGZvciBleGFt cGxlIGFuIGluaGVyaXRhbmNlIHBhcmVudCBvcgorICogZm9yZWlnbiBrZXkgdGFyZ2V0IGluIGEg ZGlmZmVyZW50IHNjaGVtYSkgYXJlIG5vdCBzYWZlIHRvIHN0cmlwLgorICoKKyAqIFRoaXMgcmVw bGFjZXMgdGhlIHVuc2FmZSBwYXR0ZXJuCisgKgkgIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVy KGdldF9uYW1lc3BhY2VfbmFtZShnZXRfcmVsX25hbWVzcGFjZShvaWQpKSwKKyAqCSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2V0X3JlbF9uYW1lKG9pZCkpCisgKiB3aGljaCBkZXJlZmVy ZW5jZXMgTlVMTCB3aGVuIGEgY29uY3VycmVudCB0cmFuc2FjdGlvbiBoYXMgZHJvcHBlZCB0aGUK KyAqIHJlZmVyZW5jZWQgcmVsYXRpb24gKG9yIGl0cyBzY2hlbWEpIGJldHdlZW4gd2hlbiB3ZSBj YWNoZWQgaXRzIE9JRCBhbmQKKyAqIHdoZW4gd2UgYXNrIHRoZSBzeXNjYWNoZSBmb3IgaXRzIG5h bWUuICBIb2xkaW5nIEFjY2Vzc1NoYXJlTG9jayBvbiBhCisgKiBkZXBlbmRlbnQgcmVsYXRpb24g bWFrZXMgdGhpcyByYWNlIHZhbmlzaGluZ2x5IHVubGlrZWx5IGluIHByYWN0aWNlLCBidXQKKyAq IHdlIHN0aWxsIGRlZmVuZCBhZ2FpbnN0IGl0IGJlY2F1c2UgdGhlIGFsdGVybmF0aXZlIGlzIGEg U0lHU0VHVi4KKyAqCisgKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBmcmVlKClpbmcgdGhl IHJlc3VsdC4KKyAqLworc3RhdGljIGNoYXIgKgorbG9va3VwX3JlbG5hbWVfZm9yX2VtaXQoT2lk IHJlbGlkLCBib29sIHNjaGVtYV9xdWFsaWZpZWQsIE9pZCBiYXNlX25hbWVzcGFjZSkKK3sKKwlI ZWFwVHVwbGUJdHA7CisJRm9ybV9wZ19jbGFzcyByZWx0dXA7CisJY2hhcgkgICAqbnNwbmFtZTsK KwljaGFyCSAgICpyZXN1bHQ7CisKKwl0cCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVj dElkR2V0RGF0dW0ocmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJ IGVycm1zZygicmVsYXRpb24gd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLCByZWxpZCksCisJ CQkJIGVycmRldGFpbCgiSXQgbWF5IGhhdmUgYmVlbiBjb25jdXJyZW50bHkgZHJvcHBlZC4iKSkp OworCisJcmVsdHVwID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVCh0cCk7CisKKwkvKiBCYXJl IG5hbWUgb25seSB3aGVuIGNhbGxlciBhc2tlZCBhbmQgdGFyZ2V0IGlzIGluIHRoZSBiYXNlIG5h bWVzcGFjZS4gKi8KKwlpZiAoIXNjaGVtYV9xdWFsaWZpZWQgJiYgcmVsdHVwLT5yZWxuYW1lc3Bh Y2UgPT0gYmFzZV9uYW1lc3BhY2UpCisJeworCQlyZXN1bHQgPSBwc3RyZHVwKHF1b3RlX2lkZW50 aWZpZXIoTmFtZVN0cihyZWx0dXAtPnJlbG5hbWUpKSk7CisJCVJlbGVhc2VTeXNDYWNoZSh0cCk7 CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJbnNwbmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShy ZWx0dXAtPnJlbG5hbWVzcGFjZSk7CisJaWYgKG5zcG5hbWUgPT0gTlVMTCkKKwl7CisJCU9pZAkJ CW5zcG9pZCA9IHJlbHR1cC0+cmVsbmFtZXNwYWNlOworCisJCVJlbGVhc2VTeXNDYWNoZSh0cCk7 CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNU KSwKKwkJCQkgZXJybXNnKCJzY2hlbWEgd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLCBuc3Bv aWQpLAorCQkJCSBlcnJkZXRhaWwoIkl0IG1heSBoYXZlIGJlZW4gY29uY3VycmVudGx5IGRyb3Bw ZWQuIikpKTsKKwl9CisKKwlyZXN1bHQgPSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihuc3Bu YW1lLCBOYW1lU3RyKHJlbHR1cC0+cmVsbmFtZSkpOworCisJcGZyZWUobnNwbmFtZSk7CisJUmVs ZWFzZVN5c0NhY2hlKHRwKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBzdHJpcF9z Y2hlbWFfcHJlZml4CisgKgkJUmV0dXJuIGEgcGFsbG9jJ2QgY29weSBvZiBzdG10IHdpdGggZXZl cnkgb2NjdXJyZW5jZSBvZiBwcmVmaXgKKyAqCQlyZW1vdmVkLCBleGNlcHQgb2NjdXJyZW5jZXMg dGhhdCBmYWxsIGluc2lkZSBhIHNpbmdsZS1xdW90ZWQgU1FMCisgKgkJc3RyaW5nIGxpdGVyYWwg b3IgYSBkb3VibGUtcXVvdGVkIFNRTCBpZGVudGlmaWVyLgorICoKKyAqIFVzZWQgdG8gc3RyaXAg dGhlIHF1YWxpZmllZC1zY2hlbWEgcHJlZml4IChmb3IgZXhhbXBsZSAib2xkX3NjaGVtYS4iKQor ICogZnJvbSBEREwgZW1pdHRlZCBieSB0aGUgYWx3YXlzLXF1YWxpZmllZCBydWxldXRpbHMgaGVs cGVycworICogKHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQsIHBnX2dldF9pbmRleGRlZl9z dHJpbmcsCisgKiBwZ19nZXRfcnVsZWRlZiwgcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5n KSB3aGVuIHRoZSBjYWxsZXIgaGFzCisgKiByZXF1ZXN0ZWQgdW5xdWFsaWZpZWQgb3V0cHV0IHZp YSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLiAgQSBwbGFpbgorICogc3Vic3RyaW5nIHN0cmlwIHdv dWxkIGNvcnJ1cHQgc3RyaW5nIGxpdGVyYWxzIHdob3NlIGNvbnRlbnRzIGhhcHBlbgorICogdG8g Y29udGFpbiAiPHNjaGVtYT4uIiAoZm9yIGV4YW1wbGUgYSBDSEVDSyBjb21wYXJpbmcgYWdhaW5z dAorICogJ215c2NoZW1hLnNlY3JldCcpIG9yIGRvdWJsZS1xdW90ZWQgY29sdW1uL2lkZW50aWZp ZXIgbmFtZXMgd2hvc2UKKyAqIGNvbnRlbnRzIGhhcHBlbiB0byBjb250YWluICI8c2NoZW1hPi4i IChmb3IgZXhhbXBsZSBhIGNvbHVtbiBuYW1lZAorICogInMud2VpcmQiIHdoZW4gc3RyaXBwaW5n IHRoZSBwcmVmaXggInMuIiksIHNvIHdlIHRyYWNrIHF1b3Rpbmcgc3RhdGUKKyAqIGFuZCBza2lw IG1hdGNoZXMgdGhhdCBvY2N1ciB3aGlsZSB3ZSBhcmUgaW5zaWRlIGVpdGhlciBraW5kIG9mCisg KiBxdW90ZWQgdG9rZW4uICBFc2NhcGVkIHF1b3RlcyAoJycgaW5zaWRlIGEgc3RyaW5nLCAiIiBp bnNpZGUgYW4KKyAqIGlkZW50aWZpZXIpIGFyZSBoYW5kbGVkIGJ5IGtlZXBpbmcgdGhlIGNvcnJl c3BvbmRpbmcgZmxhZyBzZXQgYWNyb3NzCisgKiB0aGVtLgorICovCitzdGF0aWMgY2hhciAqCitz dHJpcF9zY2hlbWFfcHJlZml4KGNvbnN0IGNoYXIgKnN0bXQsIGNvbnN0IGNoYXIgKnByZWZpeCkK K3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJc2l6ZV90CQlwbGVuID0gc3RybGVuKHByZWZpeCk7 CisJY29uc3QgY2hhciAqcCA9IHN0bXQ7CisJYm9vbAkJaW5fc3RyaW5nID0gZmFsc2U7CisJYm9v bAkJaW5faWRlbnQgPSBmYWxzZTsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCXdoaWxlICgq cCkKKwl7CisJCS8qCisJCSAqIFRyeSB0aGUgcHJlZml4IG1hdGNoIEJFRk9SRSB0aGUgcXVvdGUt c3RhdGUgdG9nZ2xlcy4gIFRoZSBwcmVmaXgKKwkJICogaXRzZWxmIG1heSBiZWdpbiB3aXRoIGEg ZG91YmxlIHF1b3RlIHdoZW4gdGhlIGJhc2Ugc2NoZW1hIG5hbWUKKwkJICogcmVxdWlyZXMgcXVv dGluZyAoZS5nLiAiTXktU2NoZW1hIi4pLCBhbmQgYXQgdGhhdCBsZWFkaW5nICIgd2UgbXVzdAor CQkgKiBzdHJpcCB0aGUgd2hvbGUgcHJlZml4IHJhdGhlciB0aGFuIHRyZWF0IGl0IGFzIHRoZSBv cGVuaW5nIG9mIGEKKwkJICogcmVndWxhciBxdW90ZWQgaWRlbnRpZmllci4gIFRoZSBjaGVjayBp cyBnYXRlZCBvbiAhaW5faWRlbnQgJiYKKwkJICogIWluX3N0cmluZywgc28gb25jZSB3ZSBoYXZl IHRvZ2dsZWQgaW50byBhIHF1b3RlZCB0b2tlbiB3ZSBuZXZlcgorCQkgKiBzdHJpcCBhIGNvaW5j aWRlbnRhbCBzdWJzdHJpbmcgaW5zaWRlIGl0LgorCQkgKi8KKwkJaWYgKCFpbl9zdHJpbmcgJiYg IWluX2lkZW50ICYmIHN0cm5jbXAocCwgcHJlZml4LCBwbGVuKSA9PSAwKQorCQl7CisJCQlwICs9 IHBsZW47CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKnAgPT0gJ1wnJyAmJiAhaW5faWRlbnQp CisJCXsKKwkJCS8qIFNRTCAnJyBlc2NhcGU6IGVtaXQgYm90aCBxdW90ZXMgYW5kIHN0YXkgaW5z aWRlIHRoZSBzdHJpbmcuICovCisJCQlpZiAoaW5fc3RyaW5nICYmIHBbMV0gPT0gJ1wnJykKKwkJ CXsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnXCcnKTsKKwkJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcigmYnVmLCAnXCcnKTsKKwkJCQlwICs9IDI7CisJCQkJY29udGludWU7CisJCQl9 CisJCQlpbl9zdHJpbmcgPSAhaW5fc3RyaW5nOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1 ZiwgKnApOworCQkJcCsrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCpwID09ICciJyAmJiAh aW5fc3RyaW5nKQorCQl7CisJCQkvKiBTUUwgIiIgZXNjYXBlOiBlbWl0IGJvdGggcXVvdGVzIGFu ZCBzdGF5IGluc2lkZSB0aGUgaWRlbnQuICovCisJCQlpZiAoaW5faWRlbnQgJiYgcFsxXSA9PSAn IicpCisJCQl7CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyInKTsKKwkJCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnIicpOworCQkJCXAgKz0gMjsKKwkJCQljb250aW51ZTsK KwkJCX0KKwkJCWluX2lkZW50ID0gIWluX2lkZW50OworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo JmJ1ZiwgKnApOworCQkJcCsrOworCQkJY29udGludWU7CisJCX0KKwkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoJmJ1ZiwgKnApOworCQlwKys7CisJfQorCXJldHVybiBidWYuZGF0YTsKK30KKworLyoK KyAqIGNvbGxlY3RfbG9jYWxfbm90X251bGwKKyAqCQlTY2FuIHBnX2NvbnN0cmFpbnQgb25jZSBm b3IgbG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBjb25zdHJhaW50cworICoJCW9uIHJlbCwgcmV0 dXJuaW5nIGEgcGFsbG9jJ2QgYXJyYXkgaW5kZXhlZCBieSBhdHRudW0gKDEuLm5hdHRzKS4KKyAq CisgKiBFbnRyaWVzIHdpdGggY29ub2lkPT1JbnZhbGlkT2lkIG1lYW4gIm5vIGxvY2FsIE5PVCBO VUxMIHJvdyBmb3IgdGhpcworICogY29sdW1uIi4gIFdoZW4gdGhlIGNvbnN0cmFpbnQgbmFtZSBk b2VzIG5vdCBtYXRjaCB0aGUgYXV0by1nZW5lcmF0ZWQKKyAqIHBhdHRlcm4gIjx0YWJsZW5hbWU+ Xzxjb2x1bW5uYW1lPl9ub3RfbnVsbCIsIHRoZSBjb25zdHJhaW50IE9JRCBpcworICogYXBwZW5k ZWQgdG8gKnNraXBfb2lkcyBzbyB0aGUgcG9zdC1DUkVBVEUgY29uc3RyYWludCBsb29wIGNhbiBh dm9pZAorICogcmUtZW1pdHRpbmcgaXQgYXMgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5U IC0gdGhlIGNvbHVtbi1lbWl0CisgKiBwYXNzIHdpbGwgcHJvZHVjZSBpdCBpbmxpbmUgYXMgIkNP TlNUUkFJTlQgbmFtZSBOT1QgTlVMTCIgaW5zdGVhZC4KKyAqLworc3RhdGljIExvY2FsTm90TnVs bEVudHJ5ICoKK2NvbGxlY3RfbG9jYWxfbm90X251bGwoUmVsYXRpb24gcmVsLCBMaXN0ICoqc2tp cF9vaWRzKQoreworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOwor CWludAkJCW5hdHRzID0gdHVwZGVzYy0+bmF0dHM7CisJTG9jYWxOb3ROdWxsRW50cnkgKmVudHJp ZXM7CisJY29uc3QgY2hhciAqcmVsbmFtZSA9IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCk7 CisJUmVsYXRpb24JY29uUmVsOworCVN5c1NjYW5EZXNjIGNvblNjYW47CisJU2NhbktleURhdGEg Y29uS2V5OworCUhlYXBUdXBsZQljb25UdXA7CisKKwllbnRyaWVzID0gKExvY2FsTm90TnVsbEVu dHJ5ICopIHBhbGxvYzAoc2l6ZW9mKExvY2FsTm90TnVsbEVudHJ5KSAqCisJCQkJCQkJCQkJCShu YXR0cyArIDEpKTsKKworCWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQs IEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmNvbktleSwKKwkJCQlBbnVtX3BnX2Nv bnN0cmFpbnRfY29ucmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAor CQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpKSk7CisJY29uU2NhbiA9 IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFtZUluZGV4 SWQsCisJCQkJCQkJCSB0cnVlLCBOVUxMLCAxLCAmY29uS2V5KTsKKworCXdoaWxlIChIZWFwVHVw bGVJc1ZhbGlkKGNvblR1cCA9IHN5c3RhYmxlX2dldG5leHQoY29uU2NhbikpKQorCXsKKwkJRm9y bV9wZ19jb25zdHJhaW50IGNvbiA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVChjb25U dXApOworCQlEYXR1bQkJY29ua2V5RGF0OworCQlib29sCQljb25rZXlOdWxsOworCQlBcnJheVR5 cGUgICpjb25rZXlBcnI7CisJCWludDE2CSAgICpjb25rZXlWYWxzOworCQlpbnQJCQlhdHRudW07 CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dDsKKwkJY2hhcgkJYXV0b25hbWVbTkFNRURBVEFMRU5d OworCisJCWlmIChjb24tPmNvbnR5cGUgIT0gQ09OU1RSQUlOVF9OT1ROVUxMKQorCQkJY29udGlu dWU7CisJCWlmICghY29uLT5jb25pc2xvY2FsKQorCQkJY29udGludWU7CisKKwkJY29ua2V5RGF0 ID0gaGVhcF9nZXRhdHRyKGNvblR1cCwgQW51bV9wZ19jb25zdHJhaW50X2NvbmtleSwKKwkJCQkJ CQkJIFJlbGF0aW9uR2V0RGVzY3IoY29uUmVsKSwgJmNvbmtleU51bGwpOworCQlpZiAoY29ua2V5 TnVsbCkKKwkJCWNvbnRpbnVlOworCQljb25rZXlBcnIgPSBEYXR1bUdldEFycmF5VHlwZVAoY29u a2V5RGF0KTsKKworCQkvKgorCQkgKiBEZWZlbmQgYWdhaW5zdCBhIG1hbGZvcm1lZCBjb25rZXk6 IGEgTk9UIE5VTEwgY29uc3RyYWludCBpcyBhbHdheXMKKwkJICogYSBzaW5nbGUtY29sdW1uIDEt RCBpbnQyIGFycmF5LCBidXQgYSBjb3JydXB0ZWQgY2F0YWxvZyBvciBhIGZ1dHVyZQorCQkgKiBw YXRjaCB0aGF0IHN0b3JlcyB3aWRlciBjb25rZXlzIG11c3RuJ3QgdHJpcCB1cyBpbnRvIHJlYWRp bmcgcGFzdAorCQkgKiB0aGUgYXJyYXkgaGVhZGVyLgorCQkgKi8KKwkJaWYgKEFSUl9ORElNKGNv bmtleUFycikgIT0gMSB8fAorCQkJQVJSX0RJTVMoY29ua2V5QXJyKVswXSA8IDEgfHwKKwkJCUFS Ul9IQVNOVUxMKGNvbmtleUFycikgfHwKKwkJCUFSUl9FTEVNVFlQRShjb25rZXlBcnIpICE9IElO VDJPSUQpCisJCQljb250aW51ZTsKKworCQljb25rZXlWYWxzID0gKGludDE2ICopIEFSUl9EQVRB X1BUUihjb25rZXlBcnIpOworCQlhdHRudW0gPSBjb25rZXlWYWxzWzBdOworCQlpZiAoYXR0bnVt IDwgMSB8fCBhdHRudW0gPiBuYXR0cykKKwkJCWNvbnRpbnVlOworCisJCWF0dCA9IFR1cGxlRGVz Y0F0dHIodHVwZGVzYywgYXR0bnVtIC0gMSk7CisJCXNucHJpbnRmKGF1dG9uYW1lLCBzaXplb2Yo YXV0b25hbWUpLCAiJXNfJXNfbm90X251bGwiLAorCQkJCSByZWxuYW1lLCBOYW1lU3RyKGF0dC0+ YXR0bmFtZSkpOworCisJCWVudHJpZXNbYXR0bnVtXS5jb25vaWQgPSBjb24tPm9pZDsKKwkJZW50 cmllc1thdHRudW1dLm5hbWUgPSBwc3RyZHVwKE5hbWVTdHIoY29uLT5jb25uYW1lKSk7CisJCWVu dHJpZXNbYXR0bnVtXS5pc19hdXRvID0gKHN0cmNtcChOYW1lU3RyKGNvbi0+Y29ubmFtZSksIGF1 dG9uYW1lKSA9PSAwKTsKKwkJZW50cmllc1thdHRudW1dLm5vX2luaGVyaXQgPSBjb24tPmNvbm5v aW5oZXJpdDsKKworCQkvKgorCQkgKiBJbmxpbmUgZW1pc3Npb24gb2YgIkNPTlNUUkFJTlQgbmFt ZSBOT1QgTlVMTCIgb25seSBoYXBwZW5zIGZvcgorCQkgKiBjb2x1bW5zIHRoYXQgdGhlIGNvbHVt biBsaXN0IGFjdHVhbGx5IGVtaXRzLCBpLmUuIGF0dGlzbG9jYWwKKwkJICogY29sdW1ucy4gIEZv ciBhIGxvY2FsbHktZGVjbGFyZWQgTk9UIE5VTEwgc2l0dGluZyBvbiBhbiBpbmhlcml0ZWQKKwkJ ICogY29sdW1uIHRoZSBpbmxpbmUgcGF0aCBuZXZlciBmaXJlcywgc28gd2UgbXVzdCBsZWF2ZSB0 aGUgY29uc3RyYWludAorCQkgKiBPSUQgb3V0IG9mIHNraXBfb2lkcyBhbmQgbGV0IHRoZSBwb3N0 LUNSRUFURSBjb25zdHJhaW50IGxvb3AgZW1pdAorCQkgKiBBTFRFUiBUQUJMRSAuLi4gQUREIENP TlNUUkFJTlQuCisJCSAqLworCQlpZiAoIWVudHJpZXNbYXR0bnVtXS5pc19hdXRvICYmIGF0dC0+ YXR0aXNsb2NhbCAmJiBza2lwX29pZHMgIT0gTlVMTCkKKwkJCSpza2lwX29pZHMgPSBsYXBwZW5k X29pZCgqc2tpcF9vaWRzLCBjb24tPm9pZCk7CisJfQorCXN5c3RhYmxlX2VuZHNjYW4oY29uU2Nh bik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGVu dHJpZXM7Cit9CisKKy8qCisgKiBmaW5kX2F0dHJkZWZfdGV4dAorICoJCVJldHVybiB0aGUgZGVw YXJzZWQgREVGQVVMVC9HRU5FUkFURUQgZXhwcmVzc2lvbiBmb3IgYXR0bnVtIG9uIHJlbCwKKyAq CQlvciBOVUxMIGlmIG5vIGVudHJ5IGV4aXN0cyBpbiBUdXBsZUNvbnN0ci0+ZGVmdmFsLgorICoK KyAqIFRoZSBjYWxsZXIgcGFzc2VzIGEgTGlzdCAqKiBzbyB0aGF0IHRoZSBkZXBhcnNlIGNvbnRl eHQgaXMgYnVpbHQgbGF6aWx5CisgKiBhbmQgcmV1c2VkIGFjcm9zcyBjYWxscyAoZGVwYXJzZV9j b250ZXh0X2ZvciBpcyBub3QgY2hlYXApLiAgUmV0dXJuZWQKKyAqIHN0cmluZyBpcyBwYWxsb2Mn ZCBpbiB0aGUgY3VycmVudCBtZW1vcnkgY29udGV4dDsgY2FsbGVyIHBmcmVlJ3MgaXQuCisgKi8K K3N0YXRpYyBjaGFyICoKK2ZpbmRfYXR0cmRlZl90ZXh0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJl ciBhdHRudW0sIExpc3QgKipkcGNvbnRleHQpCit7CisJVHVwbGVDb25zdHIgKmNvbnN0ciA9IFJl bGF0aW9uR2V0RGVzY3IocmVsKS0+Y29uc3RyOworCisJaWYgKGNvbnN0ciA9PSBOVUxMKQorCQly ZXR1cm4gTlVMTDsKKworCWZvciAoaW50IGogPSAwOyBqIDwgY29uc3RyLT5udW1fZGVmdmFsOyBq KyspCisJeworCQlpZiAoY29uc3RyLT5kZWZ2YWxbal0uYWRudW0gIT0gYXR0bnVtKQorCQkJY29u dGludWU7CisKKwkJaWYgKCpkcGNvbnRleHQgPT0gTklMKQorCQkJKmRwY29udGV4dCA9IGRlcGFy c2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCQkJ IFJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisKKwkJcmV0dXJuIGRlcGFyc2VfZXhwcmVzc2lvbihz dHJpbmdUb05vZGUoY29uc3RyLT5kZWZ2YWxbal0uYWRiaW4pLAorCQkJCQkJCQkgICpkcGNvbnRl eHQsIGZhbHNlLCBmYWxzZSk7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogYXBwZW5k X2lubGluZV9jaGVja19jb25zdHJhaW50cworICoJCUVtaXQgZWFjaCBsb2NhbGx5LWRlY2xhcmVk IENIRUNLIGNvbnN0cmFpbnQgb24gcmVsIGFzCisgKgkJIkNPTlNUUkFJTlQgbmFtZSA8cGdfZ2V0 X2NvbnN0cmFpbnRkZWY+Iiwgc2VwYXJhdGVkIGJ5ICcsJyBmcm9tIGFueQorICoJCXByZXZpb3Vz bHktZW1pdHRlZCBjb2x1bW4gb3IgY29uc3RyYWludC4KKyAqCisgKiAqZmlyc3QgdHJhY2tzIHdo ZXRoZXIgYW55dGhpbmcgaGFzIGJlZW4gZW1pdHRlZCBvbiB0aGlzIGxpc3QgeWV0LCBzbyB0aGUK KyAqIGNhbGxlciBjYW4gY2hhaW4gY29sdW1uIGVtaXNzaW9uIGFuZCBjb25zdHJhaW50IGVtaXNz aW9uIHRocm91Z2ggdGhlIHNhbWUKKyAqIGJ1ZmZlci4gIEluaGVyaXRlZCBDSEVDSyBjb25zdHJh aW50cyAoIWNvbmlzbG9jYWwpIGNvbWUgZnJvbSB0aGUgcGFyZW50J3MKKyAqIERETCBhbmQgYXJl bid0IHJlcGVhdGVkIGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfaW5saW5lX2NoZWNr X2NvbnN0cmFpbnRzKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwsIGJvb2wgcHJldHR5LAor CQkJCQkJCQlib29sICpmaXJzdCkKK3sKKwlSZWxhdGlvbgljb25SZWw7CisJU3lzU2NhbkRlc2Mg Y29uU2NhbjsKKwlTY2FuS2V5RGF0YSBjb25LZXk7CisJSGVhcFR1cGxlCWNvblR1cDsKKworCWNv blJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisJU2NhbktleUluaXQoJmNvbktleSwKKwkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQs CisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0 dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpKSk7CisJY29uU2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nh bihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFtZUluZGV4SWQsCisJCQkJCQkJCSB0cnVl LCBOVUxMLCAxLCAmY29uS2V5KTsKKworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCA9 IHN5c3RhYmxlX2dldG5leHQoY29uU2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNv biA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVChjb25UdXApOworCQlEYXR1bQkJZGVm RGF0dW07CisJCWNoYXIJICAgKmRlZmJvZHk7CisKKwkJaWYgKGNvbi0+Y29udHlwZSAhPSBDT05T VFJBSU5UX0NIRUNLKQorCQkJY29udGludWU7CisJCWlmICghY29uLT5jb25pc2xvY2FsKQorCQkJ Y29udGludWU7CisKKwkJaWYgKCEqZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYs ICcsJyk7CisJCSpmaXJzdCA9IGZhbHNlOworCQlpZiAocHJldHR5KQorCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhidWYsICJcbiAgICAiKTsKKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mb0No YXIoYnVmLCAnICcpOworCisJCWRlZkRhdHVtID0gT2lkRnVuY3Rpb25DYWxsMShGX1BHX0dFVF9D T05TVFJBSU5UREVGX09JRCwKKwkJCQkJCQkJCU9iamVjdElkR2V0RGF0dW0oY29uLT5vaWQpKTsK KwkJZGVmYm9keSA9IFRleHREYXR1bUdldENTdHJpbmcoZGVmRGF0dW0pOworCQlhcHBlbmRTdHJp bmdJbmZvKGJ1ZiwgIkNPTlNUUkFJTlQgJXMgJXMiLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIo TmFtZVN0cihjb24tPmNvbm5hbWUpKSwKKwkJCQkJCSBkZWZib2R5KTsKKwkJcGZyZWUoZGVmYm9k eSk7CisJfQorCXN5c3RhYmxlX2VuZHNjYW4oY29uU2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVs LCBBY2Nlc3NTaGFyZUxvY2spOworfQorCisvKgorICogYXBwZW5kX2NvbHVtbl9kZWZzCisgKgkJ QXBwZW5kIHRoZSBjb21tYS1zZXBhcmF0ZWQgY29sdW1uIGRlZmluaXRpb24gbGlzdCBmb3IgYSB0 YWJsZS4KKyAqCisgKiBFbWl0cyBlYWNoIG5vbi1kcm9wcGVkLCBsb2NhbGx5LWRlY2xhcmVkIGNv bHVtbiBhcworICoJCW5hbWUgdHlwZSBbQ09MTEFURSB4XSBbU1RPUkFHRSBzXSBbQ09NUFJFU1NJ T04gY10KKyAqCQlbR0VORVJBVEVEIC4uLiB8IERFRkFVTFQgZV0gW05PVCBOVUxMXQorICogZm9s bG93ZWQgYnkgYW55IGxvY2FsbHktZGVjbGFyZWQgaW5saW5lIENIRUNLIGNvbnN0cmFpbnRzLiAg T3B0aW9uYWwKKyAqIGNsYXVzZXMgYXJlIG9taXR0ZWQgd2hlbiB0aGVpciB2YWx1ZSBtYXRjaGVz IHdoYXQgdGhlIHN5c3RlbSB3b3VsZAorICogcmVhcHBseSBvbiByb3VuZC10cmlwIChlLmcuIHR5 cGUtZGVmYXVsdCBDT0xMQVRFLCB0eXBlLWRlZmF1bHQgU1RPUkFHRSkuCisgKi8KK3N0YXRpYyB2 b2lkCithcHBlbmRfY29sdW1uX2RlZnMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgYm9v bCBwcmV0dHksCisJCQkJICAgYm9vbCBpbmNsdWRlX2NvbnN0cmFpbnRzLAorCQkJCSAgIGJvb2wg c2NoZW1hX3F1YWxpZmllZCwKKwkJCQkgICBMb2NhbE5vdE51bGxFbnRyeSAqIG5uX2VudHJpZXMp Cit7CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJT2lkCQkJ YmFzZV9uYW1lc3BhY2UgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpOworCUxpc3QJICAgKmRw Y29udGV4dCA9IE5JTDsKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwlmb3IgKGludCBpID0gMDsg aSA8IHR1cGRlc2MtPm5hdHRzOyBpKyspCisJeworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBU dXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpOworCQljaGFyCSAgICp0eXBzdHI7CisKKwkJaWYgKGF0 dC0+YXR0aXNkcm9wcGVkKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogQ29sdW1ucyBpbmhl cml0ZWQgZnJvbSBhIHBhcmVudCBhcmUgZW1pdHRlZCBieSB0aGUgSU5IRVJJVFMgY2xhdXNlCisJ CSAqIChvbmNlIGltcGxlbWVudGVkKSwgbm90IHRoZSBjb2x1bW4gbGlzdCwgdW5sZXNzIHRoZSBj aGlsZAorCQkgKiByZWRlY2xhcmVkIHRoZW0gbG9jYWxseSAoYXR0aXNsb2NhbD10cnVlKS4KKwkJ ICovCisJCWlmICghYXR0LT5hdHRpc2xvY2FsKQorCQkJY29udGludWU7CisKKwkJaWYgKCFmaXJz dCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywnKTsKKwkJZmlyc3QgPSBmYWxzZTsK KworCQlpZiAocHJldHR5KQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJcbiAgICAi KTsKKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCisJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYXR0LT5hdHRu YW1lKSkpOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisKKwkJdHlwc3RyID0g Zm9ybWF0X3R5cGVfd2l0aF90eXBlbW9kKGF0dC0+YXR0dHlwaWQsIGF0dC0+YXR0dHlwbW9kKTsK KwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHR5cHN0cik7CisJCXBmcmVlKHR5cHN0cik7 CisKKwkJLyogQ09MTEFURSBjbGF1c2UsIG9ubHkgaWYgaXQgZGlmZmVycyBmcm9tIHRoZSB0eXBl J3MgZGVmYXVsdC4gKi8KKwkJaWYgKE9pZElzVmFsaWQoYXR0LT5hdHRjb2xsYXRpb24pICYmCisJ CQlhdHQtPmF0dGNvbGxhdGlvbiAhPSBnZXRfdHlwY29sbGF0aW9uKGF0dC0+YXR0dHlwaWQpKQor CQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgQ09MTEFURSAlcyIsCisJCQkJCQkJIGdlbmVyYXRl X2NvbGxhdGlvbl9uYW1lKGF0dC0+YXR0Y29sbGF0aW9uKSk7CisKKwkJLyogU1RPUkFHRSBjbGF1 c2UsIG9ubHkgaWYgaXQgZGlmZmVycyBmcm9tIHRoZSB0eXBlJ3MgZGVmYXVsdC4gKi8KKwkJaWYg KGF0dC0+YXR0c3RvcmFnZSAhPSBnZXRfdHlwc3RvcmFnZShhdHQtPmF0dHR5cGlkKSkKKwkJCWFw cGVuZFN0cmluZ0luZm8oYnVmLCAiIFNUT1JBR0UgJXMiLCBzdG9yYWdlX25hbWUoYXR0LT5hdHRz dG9yYWdlKSk7CisKKwkJLyogQ09NUFJFU1NJT04gY2xhdXNlLCBvbmx5IGlmIGV4cGxpY2l0bHkg c2V0IG9uIHRoZSBjb2x1bW4uICovCisJCWlmIChDb21wcmVzc2lvbk1ldGhvZElzVmFsaWQoYXR0 LT5hdHRjb21wcmVzc2lvbikpCisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBDT01QUkVTU0lP TiAlcyIsCisJCQkJCQkJIEdldENvbXByZXNzaW9uTWV0aG9kTmFtZShhdHQtPmF0dGNvbXByZXNz aW9uKSk7CisKKwkJLyoKKwkJICogTG9vayB1cCB0aGUgZGVmYXVsdC9nZW5lcmF0ZWQgZXhwcmVz c2lvbiB0ZXh0IHVwIGZyb250OyBnZW5lcmF0ZWQKKwkJICogY29sdW1ucyBoYXZlIGF0dGhhc2Rl Zj10cnVlIHdpdGggYW4gZW50cnkgaW4gcGdfYXR0cmRlZiBqdXN0IGxpa2UKKwkJICogcmVndWxh ciBkZWZhdWx0cy4KKwkJICovCisJCXsKKwkJCWNoYXIJICAgKmRlZmV4cHIgPSBOVUxMOworCisJ CQlpZiAoYXR0LT5hdHRoYXNkZWYpCisJCQkJZGVmZXhwciA9IGZpbmRfYXR0cmRlZl90ZXh0KHJl bCwgYXR0LT5hdHRudW0sICZkcGNvbnRleHQpOworCisJCQkvKiBHRU5FUkFURUQgLyBJREVOVElU WSAvIERFRkFVTFQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gKi8KKwkJCWlmIChhdHQtPmF0dGdl bmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1NUT1JFRCAmJiBkZWZleHByKQorCQkJCWFw cGVuZFN0cmluZ0luZm8oYnVmLCAiIEdFTkVSQVRFRCBBTFdBWVMgQVMgKCVzKSBTVE9SRUQiLCBk ZWZleHByKTsKKwkJCWVsc2UgaWYgKGF0dC0+YXR0Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5F UkFURURfVklSVFVBTCAmJiBkZWZleHByKQorCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIEdF TkVSQVRFRCBBTFdBWVMgQVMgKCVzKSBWSVJUVUFMIiwgZGVmZXhwcik7CisJCQllbHNlIGlmIChh dHQtPmF0dGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVOVElUWV9BTFdBWVMgfHwKKwkJCQkJIGF0 dC0+YXR0aWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0JZX0RFRkFVTFQpCisJCQl7CisJ CQkJY29uc3QgY2hhciAqaWRraW5kID0KKwkJCQkJKGF0dC0+YXR0aWRlbnRpdHkgPT0gQVRUUklC VVRFX0lERU5USVRZX0FMV0FZUykKKwkJCQkJPyAiQUxXQVlTIiA6ICJCWSBERUZBVUxUIjsKKwkJ CQlPaWQJCQlzZXFpZCA9IGdldElkZW50aXR5U2VxdWVuY2UocmVsLCBhdHQtPmF0dG51bSwgdHJ1 ZSk7CisKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBHRU5FUkFURUQgJXMgQVMgSURFTlRJ VFkiLCBpZGtpbmQpOworCisJCQkJLyoKKwkJCQkgKiBFbWl0IG9ubHkgdGhlIHNlcXVlbmNlIG9w dGlvbnMgdGhhdCBkaWZmZXIgZnJvbSB0aGVpcgorCQkJCSAqIGRlZmF1bHRzIC0gbWlycm9yaW5n IHBnX2dldF9kYXRhYmFzZV9kZGwncyBwYXR0ZXJuIG9mCisJCQkJICogb21pdHRpbmcgdmFsdWVz IHRoYXQgdGhlIHN5c3RlbSB3b3VsZCByZWFwcGx5IG9uIGl0cyBvd24uCisJCQkJICovCisJCQkJ aWYgKE9pZElzVmFsaWQoc2VxaWQpKQorCQkJCXsKKwkJCQkJSGVhcFR1cGxlCXNlcVR1cCA9IFNl YXJjaFN5c0NhY2hlMShTRVFSRUxJRCwKKwkJCQkJCQkJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0o c2VxaWQpKTsKKworCQkJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZChzZXFUdXApKQorCQkJCQl7CisJ CQkJCQlGb3JtX3BnX3NlcXVlbmNlIHNlcSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qo c2VxVHVwKTsKKwkJCQkJCVN0cmluZ0luZm9EYXRhIG9wdHM7CisJCQkJCQlib29sCQlmaXJzdF9v cHQgPSB0cnVlOworCQkJCQkJaW50NjQJCWRlZl9taW4sCisJCQkJCQkJCQlkZWZfbWF4LAorCQkJ CQkJCQkJZGVmX3N0YXJ0OworCQkJCQkJaW50NjQJCXR5cF9taW4sCisJCQkJCQkJCQl0eXBfbWF4 OworCisJCQkJCQkvKgorCQkJCQkJICogUGVyLXR5cGUgYm91bmRzIGZvciB0aGUgc2VxdWVuY2Un cyB1bmRlcmx5aW5nCisJCQkJCQkgKiBpbnRlZ2VyIHR5cGUuICBEZWZhdWx0cyB0byBpbnQ4IGlm IHRoZSBjb2x1bW4gdHlwZQorCQkJCQkJICogaXMgc29tZXRoaW5nIGVsc2UgKHNob3VsZG4ndCBo YXBwZW4gZm9yIElERU5USVRZLAorCQkJCQkJICogYnV0IGJlIGRlZmVuc2l2ZSkuCisJCQkJCQkg Ki8KKwkJCQkJCXN3aXRjaCAoYXR0LT5hdHR0eXBpZCkKKwkJCQkJCXsKKwkJCQkJCQljYXNlIElO VDJPSUQ6CisJCQkJCQkJCXR5cF9taW4gPSBQR19JTlQxNl9NSU47CisJCQkJCQkJCXR5cF9tYXgg PSBQR19JTlQxNl9NQVg7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgSU5UNE9JRDoKKwkJ CQkJCQkJdHlwX21pbiA9IFBHX0lOVDMyX01JTjsKKwkJCQkJCQkJdHlwX21heCA9IFBHX0lOVDMy X01BWDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQkJdHlwX21pbiA9 IFBHX0lOVDY0X01JTjsKKwkJCQkJCQkJdHlwX21heCA9IFBHX0lOVDY0X01BWDsKKwkJCQkJCQkJ YnJlYWs7CisJCQkJCQl9CisKKwkJCQkJCWlmIChzZXEtPnNlcWluY3JlbWVudCA+IDApCisJCQkJ CQl7CisJCQkJCQkJZGVmX21pbiA9IDE7CisJCQkJCQkJZGVmX21heCA9IHR5cF9tYXg7CisJCQkJ CQkJZGVmX3N0YXJ0ID0gZGVmX21pbjsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJ CQkJCQlkZWZfbWluID0gdHlwX21pbjsKKwkJCQkJCQlkZWZfbWF4ID0gLTE7CisJCQkJCQkJZGVm X3N0YXJ0ID0gZGVmX21heDsKKwkJCQkJCX0KKworCQkJCQkJaW5pdFN0cmluZ0luZm8oJm9wdHMp OworCisJCQkJCQkvKgorCQkJCQkJICogU0VRVUVOQ0UgTkFNRSAtIG9taXQgd2hlbiBpdCBtYXRj aGVzIHRoZSBpbXBsaWNpdAorCQkJCQkJICogIjx0YWJsZW5hbWU+Xzxjb2x1bW5uYW1lPl9zZXEi IHBhdHRlcm4gaW4gdGhlIHNhbWUKKwkJCQkJCSAqIHNjaGVtYSwgc2luY2UgQ1JFQVRFIFRBQkxF IHdpbGwgcmVnZW5lcmF0ZSB0aGF0CisJCQkJCQkgKiBleGFjdCBuYW1lLiAgVGhlIHNlcXVlbmNl IGlzIGFuIElOVEVSTkFMIGRlcGVuZGVuY3kKKwkJCQkJCSAqIG9mIHRoZSBjb2x1bW4sIHNvIHRo ZSBsb2NrIHdlIGhvbGQgb24gdGhlIHRhYmxlCisJCQkJCQkgKiBhbHNvIHBpbnMgaXQsIGJ1dCB0 aGUgbG9va3VwIGhlbHBlciBzdGlsbCBkZWZlbmRzCisJCQkJCQkgKiBhZ2FpbnN0IGEgbWlzc2lu ZyBwZ19jbGFzcyByb3cuCisJCQkJCQkgKi8KKwkJCQkJCXsKKwkJCQkJCQlIZWFwVHVwbGUJc2Vx Q2xhc3NUdXA7CisJCQkJCQkJRm9ybV9wZ19jbGFzcyBzZXFDbGFzczsKKwkJCQkJCQljaGFyCQlh dXRvbmFtZVtOQU1FREFUQUxFTl07CisKKwkJCQkJCQlzZXFDbGFzc1R1cCA9IFNlYXJjaFN5c0Nh Y2hlMShSRUxPSUQsCisJCQkJCQkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShzZXFpZCkpOwor CQkJCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXFDbGFzc1R1cCkpCisJCQkJCQkJCWVyZXBv cnQoRVJST1IsCisJCQkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwK KwkJCQkJCQkJCQkgZXJybXNnKCJpZGVudGl0eSBzZXF1ZW5jZSB3aXRoIE9JRCAldSBkb2VzIG5v dCBleGlzdCIsCisJCQkJCQkJCQkJCQlzZXFpZCksCisJCQkJCQkJCQkJIGVycmRldGFpbCgiSXQg bWF5IGhhdmUgYmVlbiBjb25jdXJyZW50bHkgZHJvcHBlZC4iKSkpOworCQkJCQkJCXNlcUNsYXNz ID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVChzZXFDbGFzc1R1cCk7CisKKwkJCQkJCQlzbnBy aW50ZihhdXRvbmFtZSwgc2l6ZW9mKGF1dG9uYW1lKSwgIiVzXyVzX3NlcSIsCisJCQkJCQkJCQkg UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCSBOYW1lU3RyKGF0dC0+YXR0 bmFtZSkpOworCQkJCQkJCWlmIChzZXFDbGFzcy0+cmVsbmFtZXNwYWNlICE9IFJlbGF0aW9uR2V0 TmFtZXNwYWNlKHJlbCkgfHwKKwkJCQkJCQkJc3RyY21wKE5hbWVTdHIoc2VxQ2xhc3MtPnJlbG5h bWUpLCBhdXRvbmFtZSkgIT0gMCkKKwkJCQkJCQl7CisJCQkJCQkJCWNoYXIJICAgKnNlcVF1YWwg PQorCQkJCQkJCQkJbG9va3VwX3JlbG5hbWVfZm9yX2VtaXQoc2VxaWQsCisJCQkJCQkJCQkJCQkJ CQlzY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJCQkJCQkJCQkJYmFzZV9uYW1lc3BhY2UpOworCisJ CQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc1NFUVVFTkNFIE5BTUUgJXMiLAorCQkJ CQkJCQkJCQkJIGZpcnN0X29wdCA/ICIiIDogIiAiLCBzZXFRdWFsKTsKKwkJCQkJCQkJZmlyc3Rf b3B0ID0gZmFsc2U7CisJCQkJCQkJCXBmcmVlKHNlcVF1YWwpOworCQkJCQkJCX0KKwkJCQkJCQlS ZWxlYXNlU3lzQ2FjaGUoc2VxQ2xhc3NUdXApOworCQkJCQkJfQorCisJCQkJCQlpZiAoc2VxLT5z ZXFzdGFydCAhPSBkZWZfc3RhcnQpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygm b3B0cywgIiVzU1RBUlQgV0lUSCAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJCQkJCQkJIGZpcnN0X29w dCA/ICIiIDogIiAiLCBzZXEtPnNlcXN0YXJ0KTsKKwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsK KwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNlcWluY3JlbWVudCAhPSAxKQorCQkJCQkJeworCQkJ CQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc0lOQ1JFTUVOVCBCWSAiIElOVDY0X0ZPUk1B VCwKKwkJCQkJCQkJCQkJIGZpcnN0X29wdCA/ICIiIDogIiAiLCBzZXEtPnNlcWluY3JlbWVudCk7 CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCQlpZiAoc2VxLT5zZXFt aW4gIT0gZGVmX21pbikKKwkJCQkJCXsKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAi JXNNSU5WQUxVRSAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJCQkJCQkJIGZpcnN0X29wdCA/ICIiIDog IiAiLCBzZXEtPnNlcW1pbik7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQl9CisJ CQkJCQlpZiAoc2VxLT5zZXFtYXggIT0gZGVmX21heCkKKwkJCQkJCXsKKwkJCQkJCQlhcHBlbmRT dHJpbmdJbmZvKCZvcHRzLCAiJXNNQVhWQUxVRSAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJCQkJCQkJ IGZpcnN0X29wdCA/ICIiIDogIiAiLCBzZXEtPnNlcW1heCk7CisJCQkJCQkJZmlyc3Rfb3B0ID0g ZmFsc2U7CisJCQkJCQl9CisJCQkJCQlpZiAoc2VxLT5zZXFjYWNoZSAhPSAxKQorCQkJCQkJewor CQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc0NBQ0hFICIgSU5UNjRfRk9STUFULAor CQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxY2FjaGUpOworCQkJCQkJ CWZpcnN0X29wdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQkJaWYgKHNlcS0+c2VxY3ljbGUpCisJ CQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVzQ1lDTEUiLCBmaXJzdF9v cHQgPyAiIiA6ICIgIik7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQl9CisKKwkJ CQkJCWlmICghZmlyc3Rfb3B0KQorCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiICglcyki LCBvcHRzLmRhdGEpOworCisJCQkJCQlwZnJlZShvcHRzLmRhdGEpOworCQkJCQkJUmVsZWFzZVN5 c0NhY2hlKHNlcVR1cCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkZWZleHBy KQorCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIERFRkFVTFQgJXMiLCBkZWZleHByKTsKKwor CQkJaWYgKGRlZmV4cHIpCisJCQkJcGZyZWUoZGVmZXhwcik7CisJCX0KKworCQlpZiAoYXR0LT5h dHRub3RudWxsKQorCQl7CisJCQlMb2NhbE5vdE51bGxFbnRyeSAqbm4gPSAmbm5fZW50cmllc1th dHQtPmF0dG51bV07CisKKwkJCWlmIChubi0+bmFtZSAhPSBOVUxMICYmICFubi0+aXNfYXV0bykK KwkJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBDT05TVFJBSU5UICVzIE5PVCBOVUxMIiwKKwkJ CQkJCQkJIHF1b3RlX2lkZW50aWZpZXIobm4tPm5hbWUpKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBOT1QgTlVMTCIpOworCQkJaWYgKG5uLT5uYW1lICE9IE5V TEwgJiYgbm4tPm5vX2luaGVyaXQpCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIg Tk8gSU5IRVJJVCIpOworCQl9CisJfQorCisJLyoKKwkgKiBUYWJsZS1sZXZlbCBDSEVDSyBjb25z dHJhaW50cyAtIGVtaXR0ZWQgaW5saW5lIGluIHRoZSBDUkVBVEUgVEFCTEUgYm9keQorCSAqIHNv IHRoZXkgYXBwZWFyIGFsb25nc2lkZSB0aGUgY29sdW1ucyAodGhlIHBnX2R1bXAgc2hhcGUpLiAg VGhlCisJICogY29uc3RyYWludCBsb29wIGxhdGVyIGluIHBnX2dldF90YWJsZV9kZGxfaW50ZXJu YWwgc2tpcHMgQ0hFQ0sKKwkgKiBjb25zdHJhaW50cyB0byBhdm9pZCBkb3VibGUtZW1pc3Npb24u CisJICovCisJaWYgKGluY2x1ZGVfY29uc3RyYWludHMpCisJCWFwcGVuZF9pbmxpbmVfY2hlY2tf Y29uc3RyYWludHMoYnVmLCByZWwsIHByZXR0eSwgJmZpcnN0KTsKK30KKworLyoKKyAqIGFwcGVu ZF90eXBlZF9jb2x1bW5fb3ZlcnJpZGVzCisgKgkJRm9yIGEgdHlwZWQgdGFibGUgKENSRUFURSBU QUJMRSAuLi4gT0YgdHlwZV9uYW1lKSwgYXBwZW5kIHRoZQorICoJCW9wdGlvbmFsICIoY29sIFdJ VEggT1BUSU9OUyAuLi4sIC4uLikiIGxpc3QgY2FycnlpbmcgbG9jYWxseQorICoJCWFwcGxpZWQg cGVyLWNvbHVtbiBvdmVycmlkZXMgLSBERUZBVUxULCBOT1QgTlVMTCwgYW5kIGFueSBsb2NhbGx5 CisgKgkJZGVjbGFyZWQgQ0hFQ0sgY29uc3RyYWludHMuCisgKgorICogQ29sdW1ucyB3aG9zZSB0 eXBlIGlzIGZ1bGx5IGRpY3RhdGVkIGJ5IHJlbG9mdHlwZSBlbWl0IG5vdGhpbmcuICBUaGUKKyAq IHBhcmVudGhlc2lzZWQgbGlzdCBpcyBzdXBwcmVzc2VkIGVudGlyZWx5IHdoZW4gbm8gY29sdW1u IG5lZWRzIGFuCisgKiBvdmVycmlkZSBhbmQgdGhlcmUgYXJlIG5vIGxvY2FsbHktZGVjbGFyZWQg Q0hFQ0sgY29uc3RyYWludHMsIG1hdGNoaW5nCisgKiB0aGUgY2Fub25pY2FsICJDUkVBVEUgVEFC TEUgeCBPRiB0OyIgc2hhcGUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfdHlwZWRfY29sdW1u X292ZXJyaWRlcyhTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLCBib29sIHByZXR0eSwKKwkJ CQkJCQkgIGJvb2wgaW5jbHVkZV9jb25zdHJhaW50cywKKwkJCQkJCQkgIExvY2FsTm90TnVsbEVu dHJ5ICogbm5fZW50cmllcykKK3sKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVz Y3IocmVsKTsKKwlMaXN0CSAgICpkcGNvbnRleHQgPSBOSUw7CisJU3RyaW5nSW5mb0RhdGEgaW5u ZXI7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJaW5pdFN0cmluZ0luZm8oJmlubmVyKTsKKwor CWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwl7CisJCUZvcm1fcGdf YXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CisJCWNoYXIJICAgKmRl ZmV4cHIgPSBOVUxMOworCQlib29sCQloYXNfZGVmYXVsdDsKKwkJYm9vbAkJaGFzX25vdG51bGw7 CisKKwkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkKQorCQkJY29udGludWU7CisKKwkJaWYgKGF0dC0+ YXR0aGFzZGVmKQorCQkJZGVmZXhwciA9IGZpbmRfYXR0cmRlZl90ZXh0KHJlbCwgYXR0LT5hdHRu dW0sICZkcGNvbnRleHQpOworCisJCWhhc19kZWZhdWx0ID0gKGRlZmV4cHIgIT0gTlVMTCk7CisJ CWhhc19ub3RudWxsID0gYXR0LT5hdHRub3RudWxsOworCisJCWlmICghaGFzX2RlZmF1bHQgJiYg IWhhc19ub3RudWxsKQorCQl7CisJCQlpZiAoZGVmZXhwcikKKwkJCQlwZnJlZShkZWZleHByKTsK KwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFN0cmluZ0luZm9D aGFyKCZpbm5lciwgJywnKTsKKwkJZmlyc3QgPSBmYWxzZTsKKwkJaWYgKHByZXR0eSkKKwkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJmlubmVyLCAiXG4gICAgIik7CisJCWVsc2UKKwkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKCZpbm5lciwgJyAnKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKCZpbm5l ciwgIiVzIFdJVEggT1BUSU9OUyIsCisJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGF0 dC0+YXR0bmFtZSkpKTsKKwkJaWYgKGhhc19kZWZhdWx0KQorCQkJYXBwZW5kU3RyaW5nSW5mbygm aW5uZXIsICIgREVGQVVMVCAlcyIsIGRlZmV4cHIpOworCQlpZiAoaGFzX25vdG51bGwpCisJCXsK KwkJCUxvY2FsTm90TnVsbEVudHJ5ICpubiA9ICZubl9lbnRyaWVzW2F0dC0+YXR0bnVtXTsKKwor CQkJaWYgKG5uLT5uYW1lICE9IE5VTEwgJiYgIW5uLT5pc19hdXRvKQorCQkJCWFwcGVuZFN0cmlu Z0luZm8oJmlubmVyLCAiIENPTlNUUkFJTlQgJXMgTk9UIE5VTEwiLAorCQkJCQkJCQkgcXVvdGVf aWRlbnRpZmllcihubi0+bmFtZSkpOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmlubmVyLCAiIE5PVCBOVUxMIik7CisJCQlpZiAobm4tPm5hbWUgIT0gTlVMTCAmJiBubi0+ bm9faW5oZXJpdCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZpbm5lciwgIiBOTyBJTkhF UklUIik7CisJCX0KKworCQlpZiAoZGVmZXhwcikKKwkJCXBmcmVlKGRlZmV4cHIpOworCX0KKwor CS8qCisJICogTG9jYWxseS1kZWNsYXJlZCBDSEVDSyBjb25zdHJhaW50cyBvbiBhIHR5cGVkIHRh YmxlIGJlbG9uZyBpbiB0aGUKKwkgKiBjb2x1bW4tbGlzdCBwYXJlbnRoZXNlcywgc2FtZSBhcyBm b3IgYW4gdW50eXBlZCB0YWJsZS4gIFRoZSBvdXQtb2YtbGluZQorCSAqIGNvbnN0cmFpbnQgbG9v cCBsYXRlciBzdGlsbCBza2lwcyBDSEVDS3MuCisJICovCisJaWYgKGluY2x1ZGVfY29uc3RyYWlu dHMpCisJCWFwcGVuZF9pbmxpbmVfY2hlY2tfY29uc3RyYWludHMoJmlubmVyLCByZWwsIHByZXR0 eSwgJmZpcnN0KTsKKworCWlmICghZmlyc3QpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGJ1ZiwgIiAoIik7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBpbm5lci5kYXRhKTsK KwkJaWYgKHByZXR0eSkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXG4pIik7CisJ CWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyknKTsKKwl9CisJcGZyZWUoaW5u ZXIuZGF0YSk7Cit9CisKKy8qCisgKiBhcHBlbmRfc3RtdCAvIGFwcGVuZF9zdHJpcHBlZF9zdG10 CisgKgkJUHVzaCBjdHgtPmJ1ZiBvbnRvIGN0eC0+c3RhdGVtZW50cy4KKyAqCisgKiBhcHBlbmRf c3RtdCBpcyB1c2VkIGZvciBlbWlzc2lvbnMgd2hlcmUgdGhlIHRhYmxlIHJlZmVyZW5jZSBpcyBi dWlsdAorICogZnJvbSBjdHgtPnF1YWxuYW1lIChhbHJlYWR5IHBhcnRpYWwtcXVhbGlmaWVkIHBl ciBzY2hlbWFfcXVhbGlmaWVkKS4KKyAqIGFwcGVuZF9zdHJpcHBlZF9zdG10IGlzIHVzZWQgYWZ0 ZXIgaW52b2tpbmcgYWx3YXlzLXF1YWxpZmllZCBydWxldXRpbHMKKyAqIGhlbHBlcnMgKHBnX2dl dF9jb25zdHJhaW50ZGVmX2NvbW1hbmQsIHBnX2dldF9pbmRleGRlZl9zdHJpbmcsCisgKiBwZ19n ZXRfcnVsZWRlZiwgcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKSAtIHdoZW4KKyAqIHNj aGVtYV9xdWFsaWZpZWQgaXMgZmFsc2UsIHRoZSBiYXNlLXNjaGVtYSBwcmVmaXggaXMgc3RyaXBw ZWQgZnJvbQorICogdGhlaXIgb3V0cHV0IHNvIHRoZSBlbWl0dGVkIERETCBpcyByZXBsYXktcmVs b2NhdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfc3RtdChUYWJsZURkbENvbnRleHQg KiBjdHgpCit7CisJY3R4LT5zdGF0ZW1lbnRzID0gbGFwcGVuZChjdHgtPnN0YXRlbWVudHMsIHBz dHJkdXAoY3R4LT5idWYuZGF0YSkpOworfQorCitzdGF0aWMgdm9pZAorYXBwZW5kX3N0cmlwcGVk X3N0bXQoVGFibGVEZGxDb250ZXh0ICogY3R4KQoreworCWlmIChjdHgtPnNjaGVtYV9wcmVmaXgg IT0gTlVMTCkKKwkJY3R4LT5zdGF0ZW1lbnRzID0gbGFwcGVuZChjdHgtPnN0YXRlbWVudHMsCisJ CQkJCQkJCSAgc3RyaXBfc2NoZW1hX3ByZWZpeChjdHgtPmJ1Zi5kYXRhLAorCQkJCQkJCQkJCQkJ CSAgY3R4LT5zY2hlbWFfcHJlZml4KSk7CisJZWxzZQorCQljdHgtPnN0YXRlbWVudHMgPSBsYXBw ZW5kKGN0eC0+c3RhdGVtZW50cywgcHN0cmR1cChjdHgtPmJ1Zi5kYXRhKSk7Cit9CisKKy8qCisg KiBlbWl0X2NyZWF0ZV90YWJsZV9zdG10CisgKgkJQnVpbGQgdGhlIGxlYWRpbmcgQ1JFQVRFIFRB QkxFIHN0YXRlbWVudCwgaW5jbHVkaW5nIHBlcnNpc3RlbmNlCisgKgkJKFRFTVBPUkFSWSAvIFVO TE9HR0VEKSwgYm9keSAoY29sdW1uIGxpc3QgLyBPRiB0eXBlX25hbWUgLworICoJCVBBUlRJVElP TiBPRiBwYXJlbnQpLCBJTkhFUklUUywgUEFSVElUSU9OIEJZLCBVU0lORyBtZXRob2QsCisgKgkJ V0lUSCAocmVsb3B0aW9ucyksIFRBQkxFU1BBQ0UsIGFuZCBPTiBDT01NSVQuCisgKi8KK3N0YXRp YyB2b2lkCitlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRhYmxlRGRsQ29udGV4dCAqIGN0eCkKK3sK KwlSZWxhdGlvbglyZWwgPSBjdHgtPnJlbDsKKwljaGFyCQlyZWxwZXJzaXN0ZW5jZSA9IHJlbC0+ cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZTsKKwljaGFyCQlyZWxraW5kID0gcmVsLT5yZF9yZWwtPnJl bGtpbmQ7CisJYm9vbAkJaXNfdHlwZWQgPSBPaWRJc1ZhbGlkKHJlbC0+cmRfcmVsLT5yZWxvZnR5 cGUpOworCUhlYXBUdXBsZQljbGFzc3R1cDsKKwlEYXR1bQkJcmVsb3B0RGF0dW07CisJYm9vbAkJ cmVsb3B0SXNudWxsOworCisJY2xhc3N0dXAgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCBPYmpl Y3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY2xhc3N0 dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24gJXUi LCBjdHgtPnJlbGlkKTsKKworCXJlbG9wdERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFJFTE9JRCwg Y2xhc3N0dXAsCisJCQkJCQkJCSAgQW51bV9wZ19jbGFzc19yZWxvcHRpb25zLCAmcmVsb3B0SXNu dWxsKTsKKworCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmN0eC0+YnVmLCAiQ1JFQVRFICIpOworCWlmIChyZWxwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9URU1QKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIlRF TVBPUkFSWSAiKTsKKwllbHNlIGlmIChyZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9V TkxPR0dFRCkKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICJVTkxPR0dFRCAi KTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIlRBQkxFICVzIiwgY3R4LT5xdWFsbmFt ZSk7CisKKwlpZiAocmVsLT5yZF9yZWwtPnJlbGlzcGFydGl0aW9uKQorCXsKKwkJT2lkCQkJcGFy ZW50T2lkID0gZ2V0X3BhcnRpdGlvbl9wYXJlbnQoY3R4LT5yZWxpZCwgdHJ1ZSk7CisJCWNoYXIJ ICAgKnBhcmVudFF1YWwgPSBsb29rdXBfcmVsbmFtZV9mb3JfZW1pdChwYXJlbnRPaWQsCisJCQkJ CQkJCQkJCQkJCSBjdHgtPnNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJCQkJCQkJCSBjdHgtPmJh c2VfbmFtZXNwYWNlKTsKKwkJY2hhcgkgICAqcGFyZW50UmVsbmFtZSA9IGdldF9yZWxfbmFtZShw YXJlbnRPaWQpOworCQlEYXR1bQkJYm91bmREYXR1bTsKKwkJYm9vbAkJYm91bmRJc251bGw7CisJ CWNoYXIJICAgKmZvclZhbHVlcyA9IE5VTEw7CisJCWNoYXIJICAgKmJvdW5kU3RyID0gTlVMTDsK KworCQlpZiAocGFyZW50UmVsbmFtZSA9PSBOVUxMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ KGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkJIGVycm1zZygicGFydGl0 aW9uIHBhcmVudCB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsCisJCQkJCQkJcGFyZW50T2lk KSwKKwkJCQkJIGVycmRldGFpbCgiSXQgbWF5IGhhdmUgYmVlbiBjb25jdXJyZW50bHkgZHJvcHBl ZC4iKSkpOworCisJCWJvdW5kRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVMT0lELCBjbGFzc3R1 cCwKKwkJCQkJCQkJCSBBbnVtX3BnX2NsYXNzX3JlbHBhcnRib3VuZCwgJmJvdW5kSXNudWxsKTsK KwkJaWYgKCFib3VuZElzbnVsbCkKKwkJeworCQkJTm9kZQkgICAqYm91bmROb2RlOworCQkJTGlz dAkgICAqZHBjb250ZXh0OworCisJCQlib3VuZFN0ciA9IFRleHREYXR1bUdldENTdHJpbmcoYm91 bmREYXR1bSk7CisJCQlib3VuZE5vZGUgPSBzdHJpbmdUb05vZGUoYm91bmRTdHIpOworCQkJZHBj b250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihwYXJlbnRSZWxuYW1lLCBwYXJlbnRPaWQpOwor CQkJZm9yVmFsdWVzID0gZGVwYXJzZV9leHByZXNzaW9uKGJvdW5kTm9kZSwgZHBjb250ZXh0LCBm YWxzZSwgZmFsc2UpOworCQl9CisKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsICIgUEFS VElUSU9OIE9GICVzICVzIiwKKwkJCQkJCSBwYXJlbnRRdWFsLCBmb3JWYWx1ZXMgPyBmb3JWYWx1 ZXMgOiAiREVGQVVMVCIpOworCQlpZiAoZm9yVmFsdWVzKQorCQkJcGZyZWUoZm9yVmFsdWVzKTsK KwkJaWYgKGJvdW5kU3RyKQorCQkJcGZyZWUoYm91bmRTdHIpOworCQlwZnJlZShwYXJlbnRRdWFs KTsKKwkJcGZyZWUocGFyZW50UmVsbmFtZSk7CisJfQorCWVsc2UgaWYgKGlzX3R5cGVkKQorCXsK KwkJY2hhcgkgICAqdHlwbmFtZSA9IGZvcm1hdF90eXBlX2JlX3F1YWxpZmllZChyZWwtPnJkX3Jl bC0+cmVsb2Z0eXBlKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiBPRiAlcyIs IHR5cG5hbWUpOworCQlwZnJlZSh0eXBuYW1lKTsKKworCQlhcHBlbmRfdHlwZWRfY29sdW1uX292 ZXJyaWRlcygmY3R4LT5idWYsIHJlbCwgY3R4LT5wcmV0dHksCisJCQkJCQkJCQkgIGN0eC0+aW5j bHVkZV9jb25zdHJhaW50cywKKwkJCQkJCQkJCSAgY3R4LT5ubl9lbnRyaWVzKTsKKwl9CisJZWxz ZQorCXsKKwkJTGlzdAkgICAqcGFyZW50czsKKwkJTGlzdENlbGwgICAqbGM7CisJCWJvb2wJCWZp cnN0OworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiICgiKTsKKworCQlh cHBlbmRfY29sdW1uX2RlZnMoJmN0eC0+YnVmLCByZWwsIGN0eC0+cHJldHR5LAorCQkJCQkJICAg Y3R4LT5pbmNsdWRlX2NvbnN0cmFpbnRzLAorCQkJCQkJICAgY3R4LT5zY2hlbWFfcXVhbGlmaWVk LCBjdHgtPm5uX2VudHJpZXMpOworCisJCWlmIChjdHgtPnByZXR0eSkKKwkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiXG4pIik7CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKCZjdHgtPmJ1ZiwgJyknKTsKKworCQlwYXJlbnRzID0gZmluZF9pbmhlcml0YW5jZV9w YXJlbnRzKGN0eC0+cmVsaWQsIE5vTG9jayk7CisJCWlmIChwYXJlbnRzICE9IE5JTCkKKwkJewor CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICIgSU5IRVJJVFMgKCIpOworCQkJ Zmlyc3QgPSB0cnVlOworCQkJZm9yZWFjaChsYywgcGFyZW50cykKKwkJCXsKKwkJCQlPaWQJCQlw b2lkID0gbGZpcnN0X29pZChsYyk7CisJCQkJY2hhcgkgICAqcG5hbWUgPSBsb29rdXBfcmVsbmFt ZV9mb3JfZW1pdChwb2lkLAorCQkJCQkJCQkJCQkJCQkJY3R4LT5zY2hlbWFfcXVhbGlmaWVkLAor CQkJCQkJCQkJCQkJCQkJY3R4LT5iYXNlX25hbWVzcGFjZSk7CisKKwkJCQlpZiAoIWZpcnN0KQor CQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIiwgIik7CisJCQkJZmlyc3Qg PSBmYWxzZTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgcG5hbWUpOwor CQkJCXBmcmVlKHBuYW1lKTsKKwkJCX0KKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjdHgtPmJ1 ZiwgJyknKTsKKwkJCWxpc3RfZnJlZShwYXJlbnRzKTsKKwkJfQorCX0KKworCWlmIChyZWxraW5k ID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQlEYXR1bQkJcGFydGtleURhdHVt OworCQljaGFyCSAgICpwYXJ0a2V5OworCisJCXBhcnRrZXlEYXR1bSA9IE9pZEZ1bmN0aW9uQ2Fs bDEoRl9QR19HRVRfUEFSVEtFWURFRiwKKwkJCQkJCQkJCQlPYmplY3RJZEdldERhdHVtKGN0eC0+ cmVsaWQpKTsKKwkJcGFydGtleSA9IFRleHREYXR1bUdldENTdHJpbmcocGFydGtleURhdHVtKTsK KwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsICIgUEFSVElUSU9OIEJZICVzIiwgcGFydGtl eSk7CisJCXBmcmVlKHBhcnRrZXkpOworCX0KKworCWlmIChPaWRJc1ZhbGlkKHJlbC0+cmRfcmVs LT5yZWxhbSkgJiYKKwkJcmVsLT5yZF9yZWwtPnJlbGFtICE9IEhFQVBfVEFCTEVfQU1fT0lEKQor CXsKKwkJY2hhcgkgICAqYW1uYW1lID0gZ2V0X2FtX25hbWUocmVsLT5yZF9yZWwtPnJlbGFtKTsK KworCQlpZiAoYW1uYW1lICE9IE5VTEwpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+ YnVmLCAiIFVTSU5HICVzIiwKKwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihhbW5hbWUpKTsKKwkJ CXBmcmVlKGFtbmFtZSk7CisJCX0KKwl9CisKKwlpZiAoIXJlbG9wdElzbnVsbCkKKwl7CisJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiIFdJVEggKCIpOworCQlnZXRfcmVsb3B0 aW9ucygmY3R4LT5idWYsIHJlbG9wdERhdHVtKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmN0 eC0+YnVmLCAnKScpOworCX0KKworCVJlbGVhc2VTeXNDYWNoZShjbGFzc3R1cCk7CisKKwlpZiAo IWN0eC0+bm9fdGFibGVzcGFjZSAmJiBPaWRJc1ZhbGlkKHJlbC0+cmRfcmVsLT5yZWx0YWJsZXNw YWNlKSkKKwl7CisJCWNoYXIJICAgKnRzbmFtZSA9IGdldF90YWJsZXNwYWNlX25hbWUocmVsLT5y ZF9yZWwtPnJlbHRhYmxlc3BhY2UpOworCisJCWlmICh0c25hbWUgIT0gTlVMTCkKKwkJeworCQkJ YXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsICIgVEFCTEVTUEFDRSAlcyIsCisJCQkJCQkJIHF1 b3RlX2lkZW50aWZpZXIodHNuYW1lKSk7CisJCQlwZnJlZSh0c25hbWUpOworCQl9CisJfQorCisJ aWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJeworCQlPbkNvbW1p dEFjdGlvbiBvYyA9IGdldF9vbl9jb21taXRfYWN0aW9uKGN0eC0+cmVsaWQpOworCisJCWlmIChv YyA9PSBPTkNPTU1JVF9ERUxFVEVfUk9XUykKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0 eC0+YnVmLCAiIE9OIENPTU1JVCBERUxFVEUgUk9XUyIpOworCQllbHNlIGlmIChvYyA9PSBPTkNP TU1JVF9EUk9QKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICIgT04gQ09N TUlUIERST1AiKTsKKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5idWYsICc7Jyk7 CisJYXBwZW5kX3N0bXQoY3R4KTsKK30KKworLyoKKyAqIGVtaXRfb3duZXJfc3RtdAorICoJCUFM VEVSIFRBQkxFIHF1YWxuYW1lIE9XTkVSIFRPIHJvbGUuCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0 X293bmVyX3N0bXQoVGFibGVEZGxDb250ZXh0ICogY3R4KQoreworCWNoYXIJICAgKm93bmVyOwor CisJaWYgKGN0eC0+bm9fb3duZXIpCisJCXJldHVybjsKKworCW93bmVyID0gR2V0VXNlck5hbWVG cm9tSWQoY3R4LT5yZWwtPnJkX3JlbC0+cmVsb3duZXIsIGZhbHNlKTsKKwlyZXNldFN0cmluZ0lu Zm8oJmN0eC0+YnVmKTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIkFMVEVSIFRBQkxF ICVzIE9XTkVSIFRPICVzOyIsCisJCQkJCSBjdHgtPnF1YWxuYW1lLCBxdW90ZV9pZGVudGlmaWVy KG93bmVyKSk7CisJYXBwZW5kX3N0bXQoY3R4KTsKKwlwZnJlZShvd25lcik7Cit9CisKKy8qCisg KiBlbWl0X2NoaWxkX2RlZmF1bHRfb3ZlcnJpZGVzCisgKgkJQUxURVIgVEFCTEUgcXVhbG5hbWUg QUxURVIgQ09MVU1OIGNvbCBTRVQgREVGQVVMVCBleHByIC0gb25lIHBlcgorICoJCWluaGVyaXRl ZCAoYXR0aXNsb2NhbD1mYWxzZSkgbm9uLWdlbmVyYXRlZCBjb2x1bW4gY2FycnlpbmcgYQorICoJ CWxvY2FsbHktc2V0IGRlZmF1bHQuICBHZW5lcmF0ZWQgY29sdW1ucyBhcmUgc2tpcHBlZDogdGhl aXIKKyAqCQlleHByZXNzaW9uIGlzIGluaGVyaXRlZCBhdXRvbWF0aWNhbGx5IGFuZCBTRVQgREVG QVVMVCB3b3VsZAorICoJCWZhaWwgYXQgcmVwbGF5LgorICovCitzdGF0aWMgdm9pZAorZW1pdF9j aGlsZF9kZWZhdWx0X292ZXJyaWRlcyhUYWJsZURkbENvbnRleHQgKiBjdHgpCit7CisJVHVwbGVE ZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKGN0eC0+cmVsKTsKKwlMaXN0CSAgICpkcGNv bnRleHQgPSBOSUw7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBpKysp CisJeworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkp OworCQljaGFyCSAgICpkZWZzdHI7CisKKwkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkIHx8IGF0dC0+ YXR0aXNsb2NhbCB8fCAhYXR0LT5hdHRoYXNkZWYpCisJCQljb250aW51ZTsKKwkJaWYgKGF0dC0+ YXR0Z2VuZXJhdGVkICE9ICdcMCcpCisJCQljb250aW51ZTsKKworCQlkZWZzdHIgPSBmaW5kX2F0 dHJkZWZfdGV4dChjdHgtPnJlbCwgYXR0LT5hdHRudW0sICZkcGNvbnRleHQpOworCQlpZiAoZGVm c3RyID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVm KTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkgIkFMVEVSIFRBQkxFICVz IEFMVEVSIENPTFVNTiAlcyBTRVQgREVGQVVMVCAlczsiLAorCQkJCQkJIGN0eC0+cXVhbG5hbWUs CisJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGF0dC0+YXR0bmFtZSkpLAorCQkJCQkJ IGRlZnN0cik7CisJCWFwcGVuZF9zdG10KGN0eCk7CisJCXBmcmVlKGRlZnN0cik7CisJfQorfQor CisvKgorICogZW1pdF9hdHRvcHRpb25zCisgKgkJQUxURVIgVEFCTEUgcXVhbG5hbWUgQUxURVIg Q09MVU1OIGNvbCBTRVQgKC4uLikgLSBvbmUgcGVyIGNvbHVtbgorICoJCXdpdGggbm9uLW51bGwg cGdfYXR0cmlidXRlLmF0dG9wdGlvbnMuICBUaGUgaW5saW5lIGZvcm0gb2YgdGhlc2UKKyAqCQlv cHRpb25zIGlzbid0IGF2YWlsYWJsZSBpbiBDUkVBVEUgVEFCTEUsIHNvIHRoZXkgY29tZSBvdXQg aGVyZS4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfYXR0b3B0aW9ucyhUYWJsZURkbENvbnRleHQg KiBjdHgpCit7CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKGN0eC0+cmVs KTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwl7CisJCUZv cm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CisJCUhlYXBU dXBsZQlhdHRUdXA7CisJCURhdHVtCQlvcHREYXR1bTsKKwkJYm9vbAkJb3B0SXNudWxsOworCisJ CWlmIChhdHQtPmF0dGlzZHJvcHBlZCkKKwkJCWNvbnRpbnVlOworCisJCWF0dFR1cCA9IFNlYXJj aFN5c0NhY2hlMihBVFROVU0sCisJCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKGN0eC0+cmVsaWQp LAorCQkJCQkJCQkgSW50MTZHZXREYXR1bShhdHQtPmF0dG51bSkpOworCQlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQoYXR0VHVwKSkKKwkJCWNvbnRpbnVlOworCisJCW9wdERhdHVtID0gU3lzQ2FjaGVH ZXRBdHRyKEFUVE5VTSwgYXR0VHVwLAorCQkJCQkJCQkgICBBbnVtX3BnX2F0dHJpYnV0ZV9hdHRv cHRpb25zLCAmb3B0SXNudWxsKTsKKwkJaWYgKCFvcHRJc251bGwpCisJCXsKKwkJCXJlc2V0U3Ry aW5nSW5mbygmY3R4LT5idWYpOworCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJ CQkJICJBTFRFUiBUQUJMRSAlcyBBTFRFUiBDT0xVTU4gJXMgU0VUICgiLAorCQkJCQkJCSBjdHgt PnF1YWxuYW1lLAorCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYXR0LT5hdHRuYW1l KSkpOworCQkJZ2V0X3JlbG9wdGlvbnMoJmN0eC0+YnVmLCBvcHREYXR1bSk7CisJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIik7Iik7CisJCQlhcHBlbmRfc3RtdChjdHgpOwor CQl9CisJCVJlbGVhc2VTeXNDYWNoZShhdHRUdXApOworCX0KK30KKworLyoKKyAqIGVtaXRfaW5k ZXhlcworICoJCUNSRUFURSBJTkRFWCBwZXIgbm9uLWNvbnN0cmFpbnQtYmFja2VkIGluZGV4IG9u IHRoZSByZWxhdGlvbi4KKyAqCQlJbmRleGVzIHRoYXQgYmFjayBQSyAvIFVOSVFVRSAvIEVYQ0xV REUgY29uc3RyYWludHMgYXJlIGVtaXR0ZWQKKyAqCQlvdXQtb2YtbGluZSBieSBlbWl0X2xvY2Fs X2NvbnN0cmFpbnRzICh0aGUgQUxURVIgVEFCTEUgLi4uIEFERAorICoJCUNPTlNUUkFJTlQgc3Rh dGVtZW50IGNyZWF0ZXMgdGhlIGluZGV4IGltcGxpY2l0bHkpLgorICovCitzdGF0aWMgdm9pZAor ZW1pdF9pbmRleGVzKFRhYmxlRGRsQ29udGV4dCAqIGN0eCkKK3sKKwlMaXN0CSAgICppbmRleG9p ZHM7CisJTGlzdENlbGwgICAqbGM7CisKKwlpZiAoIWN0eC0+aW5jbHVkZV9pbmRleGVzKQorCQly ZXR1cm47CisKKwlpbmRleG9pZHMgPSBSZWxhdGlvbkdldEluZGV4TGlzdChjdHgtPnJlbCk7CisJ Zm9yZWFjaChsYywgaW5kZXhvaWRzKQorCXsKKwkJT2lkCQkJaWR4b2lkID0gbGZpcnN0X29pZChs Yyk7CisJCWNoYXIJICAgKmlkeGRlZjsKKworCQlpZiAoT2lkSXNWYWxpZChnZXRfaW5kZXhfY29u c3RyYWludChpZHhvaWQpKSkKKwkJCWNvbnRpbnVlOworCisJCWlkeGRlZiA9IHBnX2dldF9pbmRl eGRlZl9zdHJpbmcoaWR4b2lkKTsKKwkJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCWFw cGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiJXM7IiwgaWR4ZGVmKTsKKwkJYXBwZW5kX3N0cmlw cGVkX3N0bXQoY3R4KTsKKwkJcGZyZWUoaWR4ZGVmKTsKKwl9CisJbGlzdF9mcmVlKGluZGV4b2lk cyk7Cit9CisKKy8qCisgKiBlbWl0X2xvY2FsX2NvbnN0cmFpbnRzCisgKgkJQUxURVIgVEFCTEUg Li4uIEFERCBDT05TVFJBSU5UIGZvciBlYWNoIGxvY2FsbHktZGVmaW5lZCBjb25zdHJhaW50Cisg KgkJb24gdGhlIHJlbGF0aW9uLiAgSW5oZXJpdGVkIGNvbnN0cmFpbnRzIChjb25pc2xvY2FsPWZh bHNlKSBjb21lCisgKgkJZnJvbSB0aGUgcGFyZW50J3MgRERMLiAgQ0hFQ0sgY29uc3RyYWludHMg YXJlIGVtaXR0ZWQgaW5saW5lIGZvcgorICoJCXJlZ3VsYXIvdHlwZWQgdGFibGVzIChza2lwIGhl cmUpIGJ1dCBvdXQtb2YtbGluZSBmb3IgcGFydGl0aW9uCisgKgkJY2hpbGRyZW4gKG5vIGNvbHVt biBsaXN0IHRvIGxpdmUgaW4pLiAgVXNlci1uYW1lZCBOT1QgTlVMTAorICoJCWNvbnN0cmFpbnRz IGFyZSBlbWl0dGVkIGlubGluZSBieSB0aGUgY29sdW1uLWVtaXQgaGVscGVycyBhbmQKKyAqCQlh cmUgc2tpcHBlZCB2aWEgc2tpcF9ub3RudWxsX29pZHM7IGF1dG8tbmFtZWQgTk9UIE5VTExzIGZh bGwKKyAqCQl0aHJvdWdoIGhlcmUgYW5kIGFyZSBkZWR1cCdkIGJ5IG5hbWUgYXQgcmVwbGF5LiAg Rk9SRUlHTiBLRVkKKyAqCQllbWlzc2lvbiBpcyBmdXJ0aGVyIGdhdGVkIGJ5IGluY2x1ZGVfZm9y ZWlnbl9rZXlzIHNvIGNhbGxlcnMKKyAqCQljbG9uaW5nIGEgc2NoZW1hIGNhbiBzdXBwcmVzcyBj cm9zcy10YWJsZSByZWZlcmVuY2VzIGluIGEgZmlyc3QKKyAqCQlwYXNzIGFuZCByZS1lbWl0IHRo ZW0gYWZ0ZXIgYWxsIHRhcmdldHMgZXhpc3QuICBXaGVuCisgKgkJb25seV9mb3JlaWduX2tleXMg aXMgc2V0LCB0aGUgbG9vcCBlbWl0cyBGT1JFSUdOIEtFWSByb3dzIGFsb25lCisgKgkJYW5kIHNr aXBzIGV2ZXJ5dGhpbmcgZWxzZSAtIHRoYXQgaXMgdGhlIG5hdHVyYWwgY29tcGxlbWVudCBvZgor ICoJCXRoZSBpbmNsdWRlc19mb3JlaWduX2tleXM9ZmFsc2UgZmlyc3QgcGFzcywgdXNlZCB0byBh ZGQgdGhlCisgKgkJY3Jvc3MtdGFibGUgcmVmZXJlbmNlcyBvbmNlIGRhdGEgaGFzIGJlZW4gbG9h ZGVkLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9sb2NhbF9jb25zdHJhaW50cyhUYWJsZURkbENv bnRleHQgKiBjdHgpCit7CisJUmVsYXRpb24JY29uUmVsOworCVN5c1NjYW5EZXNjIGNvblNjYW47 CisJU2NhbktleURhdGEgY29uS2V5OworCUhlYXBUdXBsZQljb25UdXA7CisJYm9vbAkJaXNfcGFy dGl0aW9uID0gY3R4LT5yZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb247CisKKwlpZiAoIWN0eC0+ aW5jbHVkZV9jb25zdHJhaW50cykKKwkJcmV0dXJuOworCisJY29uUmVsID0gdGFibGVfb3BlbihD b25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgmY29u S2V5LAorCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQlCVEVxdWFsU3RyYXRl Z3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSk7CisJ Y29uU2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlk TmFtZUluZGV4SWQsCisJCQkJCQkJCSB0cnVlLCBOVUxMLCAxLCAmY29uS2V5KTsKKworCXdoaWxl IChIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCA9IHN5c3RhYmxlX2dldG5leHQoY29uU2NhbikpKQor CXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbiA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNU UlVDVChjb25UdXApOworCQljaGFyCSAgICpjb25kZWY7CisKKwkJaWYgKCFjb24tPmNvbmlzbG9j YWwpCisJCQljb250aW51ZTsKKwkJaWYgKGN0eC0+b25seV9mb3JlaWduX2tleXMgJiYgY29uLT5j b250eXBlICE9IENPTlNUUkFJTlRfRk9SRUlHTikKKwkJCWNvbnRpbnVlOworCQlpZiAoY29uLT5j b250eXBlID09IENPTlNUUkFJTlRfQ0hFQ0sgJiYgIWlzX3BhcnRpdGlvbikKKwkJCWNvbnRpbnVl OworCQlpZiAoY29uLT5jb250eXBlID09IENPTlNUUkFJTlRfTk9UTlVMTCAmJiAhaXNfcGFydGl0 aW9uICYmCisJCQlsaXN0X21lbWJlcl9vaWQoY3R4LT5za2lwX25vdG51bGxfb2lkcywgY29uLT5v aWQpKQorCQkJY29udGludWU7CisJCWlmIChjb24tPmNvbnR5cGUgPT0gQ09OU1RSQUlOVF9GT1JF SUdOICYmICFjdHgtPmluY2x1ZGVfZm9yZWlnbl9rZXlzKQorCQkJY29udGludWU7CisKKwkJY29u ZGVmID0gcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZChjb24tPm9pZCk7CisJCXJlc2V0U3Ry aW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiVzOyIs IGNvbmRlZik7CisJCWFwcGVuZF9zdHJpcHBlZF9zdG10KGN0eCk7CisJCXBmcmVlKGNvbmRlZik7 CisJfQorCXN5c3RhYmxlX2VuZHNjYW4oY29uU2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBB Y2Nlc3NTaGFyZUxvY2spOworfQorCisvKgorICogZW1pdF9ydWxlcworICoJCUNSRUFURSBSVUxF IHBlciBjYWNoZWQgcmV3cml0ZSBydWxlIG9uIHRoZSByZWxhdGlvbi4KKyAqLworc3RhdGljIHZv aWQKK2VtaXRfcnVsZXMoVGFibGVEZGxDb250ZXh0ICogY3R4KQoreworCWlmICghY3R4LT5pbmNs dWRlX3J1bGVzIHx8IGN0eC0+cmVsLT5yZF9ydWxlcyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlm b3IgKGludCBpID0gMDsgaSA8IGN0eC0+cmVsLT5yZF9ydWxlcy0+bnVtTG9ja3M7IGkrKykKKwl7 CisJCU9pZAkJCXJ1bGVpZCA9IGN0eC0+cmVsLT5yZF9ydWxlcy0+cnVsZXNbaV0tPnJ1bGVJZDsK KwkJRGF0dW0JCXJ1bGVkZWY7CisJCWNoYXIJICAgKnJ1bGVkZWZfc3RyOworCisJCXJ1bGVkZWYg PSBPaWRGdW5jdGlvbkNhbGwxKEZfUEdfR0VUX1JVTEVERUZfT0lELAorCQkJCQkJCQkgICBPYmpl Y3RJZEdldERhdHVtKHJ1bGVpZCkpOworCQlydWxlZGVmX3N0ciA9IFRleHREYXR1bUdldENTdHJp bmcocnVsZWRlZik7CisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgcnVsZWRlZl9zdHIpOworCQlhcHBlbmRfc3RyaXBwZWRf c3RtdChjdHgpOworCQlwZnJlZShydWxlZGVmX3N0cik7CisJfQorfQorCisvKgorICogZW1pdF9z dGF0aXN0aWNzCisgKgkJQ1JFQVRFIFNUQVRJU1RJQ1MgcGVyIGV4dGVuZGVkIHN0YXRpc3RpY3Mg b2JqZWN0IG9uIHRoZSByZWxhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfc3RhdGlzdGlj cyhUYWJsZURkbENvbnRleHQgKiBjdHgpCit7CisJUmVsYXRpb24Jc3RhdFJlbDsKKwlTeXNTY2Fu RGVzYyBzdGF0U2NhbjsKKwlTY2FuS2V5RGF0YSBzdGF0S2V5OworCUhlYXBUdXBsZQlzdGF0VHVw OworCisJaWYgKCFjdHgtPmluY2x1ZGVfc3RhdGlzdGljcykKKwkJcmV0dXJuOworCisJc3RhdFJl bCA9IHRhYmxlX29wZW4oU3RhdGlzdGljRXh0UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwlTY2FuS2V5SW5pdCgmc3RhdEtleSwKKwkJCQlBbnVtX3BnX3N0YXRpc3RpY19leHRfc3R4cmVs aWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0 RGF0dW0oY3R4LT5yZWxpZCkpOworCXN0YXRTY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHN0YXRS ZWwsIFN0YXRpc3RpY0V4dFJlbGlkSW5kZXhJZCwKKwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAm c3RhdEtleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChzdGF0VHVwID0gc3lzdGFibGVf Z2V0bmV4dChzdGF0U2NhbikpKQorCXsKKwkJRm9ybV9wZ19zdGF0aXN0aWNfZXh0IHN0YXQgPSAo Rm9ybV9wZ19zdGF0aXN0aWNfZXh0KSBHRVRTVFJVQ1Qoc3RhdFR1cCk7CisJCWNoYXIJICAgKnN0 YXRkZWYgPSBwZ19nZXRfc3RhdGlzdGljc29iamRlZl9zdHJpbmcoc3RhdC0+b2lkKTsKKworCQly ZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYs ICIlczsiLCBzdGF0ZGVmKTsKKwkJYXBwZW5kX3N0cmlwcGVkX3N0bXQoY3R4KTsKKwkJcGZyZWUo c3RhdGRlZik7CisJfQorCXN5c3RhYmxlX2VuZHNjYW4oc3RhdFNjYW4pOworCXRhYmxlX2Nsb3Nl KHN0YXRSZWwsIEFjY2Vzc1NoYXJlTG9jayk7Cit9CisKKy8qCisgKiBlbWl0X3JlcGxpY2FfaWRl bnRpdHkKKyAqCQlBTFRFUiBUQUJMRSBxdWFsbmFtZSBSRVBMSUNBIElERU5USVRZIC4uLiAtIGVt aXR0ZWQgb25seSB3aGVuIHRoZQorICoJCXJlbHJlcGxpZGVudCBkaWZmZXJzIGZyb20gdGhlIGRl ZmF1bHQgKCdkJyA9IHVzZSBwcmltYXJ5IGtleSkuCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X3Jl cGxpY2FfaWRlbnRpdHkoVGFibGVEZGxDb250ZXh0ICogY3R4KQoreworCWlmICghY3R4LT5pbmNs dWRlX3JlcGxpY2FfaWRlbnRpdHkpCisJCXJldHVybjsKKwlpZiAoY3R4LT5yZWwtPnJkX3JlbC0+ cmVscmVwbGlkZW50ID09IFJFUExJQ0FfSURFTlRJVFlfREVGQVVMVCkKKwkJcmV0dXJuOworCisJ cmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJc3dpdGNoIChjdHgtPnJlbC0+cmRfcmVsLT5y ZWxyZXBsaWRlbnQpCisJeworCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfTk9USElORzoKKwkJCWFw cGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCSAiQUxURVIgVEFCTEUgJXMgUkVQTElD QSBJREVOVElUWSBOT1RISU5HOyIsCisJCQkJCQkJIGN0eC0+cXVhbG5hbWUpOworCQkJYXBwZW5k X3N0bXQoY3R4KTsKKwkJCWJyZWFrOworCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfRlVMTDoKKwkJ CWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCSAiQUxURVIgVEFCTEUgJXMgUkVQ TElDQSBJREVOVElUWSBGVUxMOyIsCisJCQkJCQkJIGN0eC0+cXVhbG5hbWUpOworCQkJYXBwZW5k X3N0bXQoY3R4KTsKKwkJCWJyZWFrOworCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfSU5ERVg6CisJ CQl7CisJCQkJT2lkCQkJcmVwbGlkeCA9IFJlbGF0aW9uR2V0UmVwbGljYUluZGV4KGN0eC0+cmVs KTsKKworCQkJCWlmIChPaWRJc1ZhbGlkKHJlcGxpZHgpKQorCQkJCXsKKwkJCQkJY2hhcgkgICAq aWR4bmFtZSA9IGdldF9yZWxfbmFtZShyZXBsaWR4KTsKKworCQkJCQlpZiAoaWR4bmFtZSA9PSBO VUxMKQorCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRF RklORURfT0JKRUNUKSwKKwkJCQkJCQkJIGVycm1zZygicmVwbGljYSBpZGVudGl0eSBpbmRleCB3 aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsCisJCQkJCQkJCQkJcmVwbGlkeCksCisJCQkJCQkJ CSBlcnJkZXRhaWwoIkl0IG1heSBoYXZlIGJlZW4gY29uY3VycmVudGx5IGRyb3BwZWQuIikpKTsK KworCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkJCSAiQUxURVIgVEFC TEUgJXMgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCAlczsiLAorCQkJCQkJCQkJIGN0eC0+ cXVhbG5hbWUsCisJCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihpZHhuYW1lKSk7CisJCQkJCWFw cGVuZF9zdG10KGN0eCk7CisJCQkJCXBmcmVlKGlkeG5hbWUpOworCQkJCX0KKwkJCX0KKwkJCWJy ZWFrOworCX0KK30KKworLyoKKyAqIGVtaXRfcmxzX3RvZ2dsZXMKKyAqCQlBTFRFUiBUQUJMRSBx dWFsbmFtZSBFTkFCTEUgLyBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkuCisgKi8KK3N0YXRpYyB2 b2lkCitlbWl0X3Jsc190b2dnbGVzKFRhYmxlRGRsQ29udGV4dCAqIGN0eCkKK3sKKwlpZiAoIWN0 eC0+aW5jbHVkZV9ybHMpCisJCXJldHVybjsKKworCWlmIChjdHgtPnJlbC0+cmRfcmVsLT5yZWxy b3dzZWN1cml0eSkKKwl7CisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRT dHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCSAiQUxURVIgVEFCTEUgJXMgRU5BQkxFIFJPVyBM RVZFTCBTRUNVUklUWTsiLAorCQkJCQkJIGN0eC0+cXVhbG5hbWUpOworCQlhcHBlbmRfc3RtdChj dHgpOworCX0KKwlpZiAoY3R4LT5yZWwtPnJkX3JlbC0+cmVsZm9yY2Vyb3dzZWN1cml0eSkKKwl7 CisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgt PmJ1ZiwKKwkJCQkJCSAiQUxURVIgVEFCTEUgJXMgRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZOyIs CisJCQkJCQkgY3R4LT5xdWFsbmFtZSk7CisJCWFwcGVuZF9zdG10KGN0eCk7CisJfQorfQorCisv KgorICogZW1pdF9wYXJ0aXRpb25fY2hpbGRyZW4KKyAqCQlGb3IgZWFjaCBkaXJlY3QgcGFydGl0 aW9uIGNoaWxkIG9mIGEgcGFydGl0aW9uZWQtdGFibGUgcGFyZW50LAorICoJCXJlY3Vyc2l2ZWx5 IGNhbGwgcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbCBhbmQgYXBwZW5kIHRoZSBjaGlsZCdzCisg KgkJc3RhdGVtZW50cy4gIEVhY2ggY2hpbGQncyBvd24gRERMIGhhbmRsZXMgZnVydGhlciBsZXZl bHMgdGhyb3VnaAorICoJCXRoZSBzYW1lIHJlY3Vyc2lvbi4KKyAqLworc3RhdGljIHZvaWQKK2Vt aXRfcGFydGl0aW9uX2NoaWxkcmVuKFRhYmxlRGRsQ29udGV4dCAqIGN0eCkKK3sKKwlMaXN0CSAg ICpjaGlsZHJlbjsKKwlMaXN0Q2VsbCAgICpsYzsKKworCWlmICghY3R4LT5pbmNsdWRlX3BhcnRp dGlvbiB8fAorCQljdHgtPnJlbC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9O RURfVEFCTEUpCisJCXJldHVybjsKKworCWNoaWxkcmVuID0gZmluZF9pbmhlcml0YW5jZV9jaGls ZHJlbihjdHgtPnJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCWZvcmVhY2gobGMsIGNoaWxkcmVu KQorCXsKKwkJT2lkCQkJY2hpbGRvaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJTGlzdAkgICAqY2hp bGRzdG10czsKKworCQljaGlsZHN0bXRzID0gcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbChjaGls ZG9pZCwgY3R4LT5wcmV0dHksCisJCQkJCQkJCQkJCSAgIGN0eC0+bm9fb3duZXIsCisJCQkJCQkJ CQkJCSAgIGN0eC0+bm9fdGFibGVzcGFjZSwKKwkJCQkJCQkJCQkJICAgY3R4LT5pbmNsdWRlX2lu ZGV4ZXMsCisJCQkJCQkJCQkJCSAgIGN0eC0+aW5jbHVkZV9jb25zdHJhaW50cywKKwkJCQkJCQkJ CQkJICAgY3R4LT5pbmNsdWRlX2ZvcmVpZ25fa2V5cywKKwkJCQkJCQkJCQkJICAgY3R4LT5vbmx5 X2ZvcmVpZ25fa2V5cywKKwkJCQkJCQkJCQkJICAgY3R4LT5pbmNsdWRlX3J1bGVzLAorCQkJCQkJ CQkJCQkgICBjdHgtPmluY2x1ZGVfc3RhdGlzdGljcywKKwkJCQkJCQkJCQkJICAgY3R4LT5pbmNs dWRlX3RyaWdnZXJzLAorCQkJCQkJCQkJCQkgICBjdHgtPmluY2x1ZGVfcG9saWNpZXMsCisJCQkJ CQkJCQkJCSAgIGN0eC0+aW5jbHVkZV9ybHMsCisJCQkJCQkJCQkJCSAgIGN0eC0+aW5jbHVkZV9y ZXBsaWNhX2lkZW50aXR5LAorCQkJCQkJCQkJCQkgICBjdHgtPmluY2x1ZGVfcGFydGl0aW9uLAor CQkJCQkJCQkJCQkgICBjdHgtPnNjaGVtYV9xdWFsaWZpZWQpOworCQljdHgtPnN0YXRlbWVudHMg PSBsaXN0X2NvbmNhdChjdHgtPnN0YXRlbWVudHMsIGNoaWxkc3RtdHMpOworCX0KKwlsaXN0X2Zy ZWUoY2hpbGRyZW4pOworfQorCisvKgorICogcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbAorICoJ CUdlbmVyYXRlIERETCBzdGF0ZW1lbnRzIHRvIHJlY3JlYXRlIGEgcmVndWxhciBvciBwYXJ0aXRp b25lZCB0YWJsZS4KKyAqCisgKiBUaGUgZmlyc3QgbGlzdCBlbGVtZW50IGlzIHRoZSBDUkVBVEUg VEFCTEUgc3RhdGVtZW50LiAgU3Vic2VxdWVudAorICogZWxlbWVudHMgYXJlIHRoZSBBTFRFUiBU QUJMRSAvIENSRUFURSBJTkRFWCAvIENSRUFURSBSVUxFIC8KKyAqIENSRUFURSBTVEFUSVNUSUNT IHN0YXRlbWVudHMgbmVlZGVkIHRvIHJlc3RvcmUgdGhlIHRhYmxlJ3MgZnVsbAorICogZGVmaW5p dGlvbi4KKyAqCisgKiBUcmlnZ2VyIGFuZCBwb2xpY3kgZW1pc3Npb24gYXJlIHNjYWZmb2xkZWQg YnV0IGN1cnJlbnRseSBkaXNhYmxlZAorICogKCNpZiAwKSAtIHRoZXkgd2lsbCBiZWNvbWUgYSBz aW5nbGUgaGVscGVyIGNhbGwgb25jZSB0aGUgc3RhbmRhbG9uZQorICogcGdfZ2V0X3RyaWdnZXJf ZGRsIC8gcGdfZ2V0X3BvbGljeV9kZGwgaGVscGVycyBsYW5kLgorICovCitzdGF0aWMgTGlzdCAq CitwZ19nZXRfdGFibGVfZGRsX2ludGVybmFsKE9pZCByZWxpZCwgYm9vbCBwcmV0dHksCisJCQkJ CQkgIGJvb2wgbm9fb3duZXIsIGJvb2wgbm9fdGFibGVzcGFjZSwKKwkJCQkJCSAgYm9vbCBpbmNs dWRlX2luZGV4ZXMsCisJCQkJCQkgIGJvb2wgaW5jbHVkZV9jb25zdHJhaW50cywKKwkJCQkJCSAg Ym9vbCBpbmNsdWRlX2ZvcmVpZ25fa2V5cywKKwkJCQkJCSAgYm9vbCBvbmx5X2ZvcmVpZ25fa2V5 cywKKwkJCQkJCSAgYm9vbCBpbmNsdWRlX3J1bGVzLAorCQkJCQkJICBib29sIGluY2x1ZGVfc3Rh dGlzdGljcywKKwkJCQkJCSAgYm9vbCBpbmNsdWRlX3RyaWdnZXJzLAorCQkJCQkJICBib29sIGlu Y2x1ZGVfcG9saWNpZXMsCisJCQkJCQkgIGJvb2wgaW5jbHVkZV9ybHMsCisJCQkJCQkgIGJvb2wg aW5jbHVkZV9yZXBsaWNhX2lkZW50aXR5LAorCQkJCQkJICBib29sIGluY2x1ZGVfcGFydGl0aW9u LAorCQkJCQkJICBib29sIHNjaGVtYV9xdWFsaWZpZWQpCit7CisJVGFibGVEZGxDb250ZXh0IGN0 eCA9IHswfTsKKwlSZWxhdGlvbglyZWw7CisJY2hhcgkJcmVsa2luZDsKKwlBY2xSZXN1bHQJYWNs cmVzdWx0OworCisJcmVsID0gdGFibGVfb3BlbihyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CXJlbGtpbmQgPSByZWwtPnJkX3JlbC0+cmVsa2luZDsKKworCS8qCisJICogVGhlIGluaXRpYWwg Y3V0IG9ubHkgc3VwcG9ydHMgb3JkaW5hcnkgYW5kIHBhcnRpdGlvbmVkIHRhYmxlcy4gIFZpZXdz LAorCSAqIG1hdHZpZXdzLCBmb3JlaWduIHRhYmxlcywgc2VxdWVuY2VzLCBpbmRleGVzLCBjb21w b3NpdGUgdHlwZXMsIGFuZAorCSAqIFRPQVNUIHRhYmxlcyBhcmUgb3V0IG9mIHNjb3BlIGZvciBu b3cuCisJICovCisJaWYgKHJlbGtpbmQgIT0gUkVMS0lORF9SRUxBVElPTiAmJiByZWxraW5kICE9 IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQljaGFyCSAgICpyZWxuYW1lID0gcHN0 cmR1cChSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKworCQl0YWJsZV9jbG9zZShyZWws IEFjY2Vzc1NoYXJlTG9jayk7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJIGVycm1zZygiXCIlc1wiIGlzIG5vdCBhbiBvcmRp bmFyeSBvciBwYXJ0aXRpb25lZCB0YWJsZSIsCisJCQkJCQlyZWxuYW1lKSkpOworCX0KKworCS8q IENhbGxlciBuZWVkcyBTRUxFQ1Qgb24gdGhlIHRhYmxlIHRvIHJlYWQgaXRzIGRlZmluaXRpb24u ICovCisJYWNscmVzdWx0ID0gcGdfY2xhc3NfYWNsY2hlY2socmVsaWQsIEdldFVzZXJJZCgpLCBB Q0xfU0VMRUNUKTsKKwlpZiAoYWNscmVzdWx0ICE9IEFDTENIRUNLX09LKQorCQlhY2xjaGVja19l cnJvcihhY2xyZXN1bHQsIE9CSkVDVF9UQUJMRSwKKwkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUocmVsKSk7CisKKwkvKgorCSAqIG9ubHlfZm9yZWlnbl9rZXlzIGlzIG1lYW50IHRvIHBh aXIgd2l0aCBhIHByaW9yIGNhbGwgdGhhdCBzdXBwcmVzc2VkCisJICogRk9SRUlHTiBLRVkgZW1p c3Npb24gdmlhIGluY2x1ZGVzX2ZvcmVpZ25fa2V5cz1mYWxzZS4gIENvbWJpbmluZworCSAqIG9u bHlfZm9yZWlnbl9rZXlzPXRydWUgd2l0aCBpbmNsdWRlc19mb3JlaWduX2tleXM9ZmFsc2Ugd291 bGQgZW1pdAorCSAqIG5vdGhpbmcgdXNlZnVsLCBzbyByZWplY3QgdGhhdCBjb21iaW5hdGlvbiB1 cCBmcm9udC4KKwkgKi8KKwlpZiAob25seV9mb3JlaWduX2tleXMgJiYgIWluY2x1ZGVfZm9yZWln bl9rZXlzKQorCXsKKwkJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCSBlcnJtc2coIlwib25seV9mb3JlaWduX2tleXNcIiByZXF1aXJlcyBcImluY2x1ZGVz X2ZvcmVpZ25fa2V5c1wiIHRvIGJlIHRydWUiKSkpOworCX0KKworCWN0eC5yZWwgPSByZWw7CisJ Y3R4LnJlbGlkID0gcmVsaWQ7CisJY3R4LnByZXR0eSA9IHByZXR0eTsKKwljdHgubm9fb3duZXIg PSBub19vd25lcjsKKwljdHgubm9fdGFibGVzcGFjZSA9IG5vX3RhYmxlc3BhY2U7CisJY3R4Lmlu Y2x1ZGVfaW5kZXhlcyA9IGluY2x1ZGVfaW5kZXhlczsKKwljdHguaW5jbHVkZV9jb25zdHJhaW50 cyA9IGluY2x1ZGVfY29uc3RyYWludHM7CisJY3R4LmluY2x1ZGVfZm9yZWlnbl9rZXlzID0gaW5j bHVkZV9mb3JlaWduX2tleXM7CisJY3R4Lm9ubHlfZm9yZWlnbl9rZXlzID0gb25seV9mb3JlaWdu X2tleXM7CisJY3R4LmluY2x1ZGVfcnVsZXMgPSBpbmNsdWRlX3J1bGVzOworCWN0eC5pbmNsdWRl X3N0YXRpc3RpY3MgPSBpbmNsdWRlX3N0YXRpc3RpY3M7CisJY3R4LmluY2x1ZGVfdHJpZ2dlcnMg PSBpbmNsdWRlX3RyaWdnZXJzOworCWN0eC5pbmNsdWRlX3BvbGljaWVzID0gaW5jbHVkZV9wb2xp Y2llczsKKwljdHguaW5jbHVkZV9ybHMgPSBpbmNsdWRlX3JsczsKKwljdHguaW5jbHVkZV9yZXBs aWNhX2lkZW50aXR5ID0gaW5jbHVkZV9yZXBsaWNhX2lkZW50aXR5OworCWN0eC5pbmNsdWRlX3Bh cnRpdGlvbiA9IGluY2x1ZGVfcGFydGl0aW9uOworCWN0eC5zY2hlbWFfcXVhbGlmaWVkID0gc2No ZW1hX3F1YWxpZmllZDsKKwljdHguYmFzZV9uYW1lc3BhY2UgPSBSZWxhdGlvbkdldE5hbWVzcGFj ZShyZWwpOworCWN0eC5zYXZlX25lc3RsZXZlbCA9IC0xOworCWN0eC5xdWFsbmFtZSA9IGxvb2t1 cF9yZWxuYW1lX2Zvcl9lbWl0KHJlbGlkLCBzY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJCQkJCSAg IGN0eC5iYXNlX25hbWVzcGFjZSk7CisKKwkvKgorCSAqIFdoZW4gc2NoZW1hX3F1YWxpZmllZCBp cyBmYWxzZSwgbmFycm93IHRoZSBhY3RpdmUgc2VhcmNoX3BhdGggdG8gdGhlCisJICogdGFyZ2V0 IHRhYmxlJ3Mgb3duIG5hbWVzcGFjZSBmb3IgdGhlIGR1cmF0aW9uIG9mIERETCBlbWlzc2lvbi4g IFRoZQorCSAqIGRlcGFyc2UgY29kZSBpbiBydWxldXRpbHMgKGFuZCB0aGUgcmVnY2xhc3MvcmVn cHJvYyBvdXRwdXQgZnVuY3Rpb25zIHdlCisJICogdHJhbnNpdGl2ZWx5IGNhbGwpIGRlY2lkZXMg d2hldGhlciB0byBzY2hlbWEtcXVhbGlmeSBhIG5hbWUgYmFzZWQgb24KKwkgKiB3aGV0aGVyIHRo ZSByZWZlcmVuY2VkIG9iamVjdCBpcyByZWFjaGFibGUgdGhyb3VnaCBzZWFyY2hfcGF0aCwgc28g dGhpcworCSAqIG1ha2VzIHNhbWUtc2NoZW1hIHJlZmVyZW5jZXMgaW4gREVGQVVMVCBhbmQgQ0hF Q0sgZXhwcmVzc2lvbnMsIHJlZ2NsYXNzCisJICogbGl0ZXJhbHMsIEZLIHRhcmdldHMsIGV0Yy4g Y29tZSBvdXQgdW5xdWFsaWZpZWQuICBDcm9zcy1zY2hlbWEKKwkgKiByZWZlcmVuY2VzIHN0YXkg cXVhbGlmaWVkLCB3aGljaCBpcyB0aGUgY29ycmVjdG5lc3MgcmVxdWlyZW1lbnQuCisJICogQXRF T1hhY3RfR1VDIGNsZWFucyB1cCBhdCB4YWN0IGVuZCBpZiBhbnl0aGluZyB0aHJvd3MgYmV0d2Vl biBoZXJlIGFuZAorCSAqIHRoZSBleHBsaWNpdCByZXN0b3JlIGJlbG93OyBvbiB0aGUgbm9ybWFs IHBhdGggd2UgcmVzdG9yZSByaWdodCBiZWZvcmUKKwkgKiByZXR1cm5pbmcuCisJICoKKwkgKiBQ cmUtY29tcHV0ZSAiPHNjaGVtYT4uIiB0b28gLSB0aGUgYWx3YXlzLXF1YWxpZmllZCBoZWxwZXJz CisJICogKGNvbnN0cmFpbnRkZWZfY29tbWFuZCwgaW5kZXhkZWZfc3RyaW5nLCBydWxlZGVmLAor CSAqIHN0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKSBpZ25vcmUgc2VhcmNoX3BhdGggZm9yIHRoZSB0 YXJnZXQncyBvd24gIkFMVEVSCisJICogVEFCTEUgc2NoZW1hLnRibCIvIk9OIHNjaGVtYS50Ymwi LyJUTyBzY2hlbWEudGJsIiBwcmVmaXggYW5kIGZvciB0aGUKKwkgKiBxdWFsaWZpZWQgc3RhdGlz dGljcyBuYW1lOyB3ZSBzdHJpcCB0aGF0IHN0cmluZyBvdXJzZWx2ZXMgdmlhCisJICogc3RyaXBf c2NoZW1hX3ByZWZpeC4KKwkgKi8KKwlpZiAoIXNjaGVtYV9xdWFsaWZpZWQpCisJeworCQljaGFy CSAgICpuc3BuYW1lID0gZ2V0X25hbWVzcGFjZV9uYW1lKGN0eC5iYXNlX25hbWVzcGFjZSk7CisK KwkJaWYgKG5zcG5hbWUgIT0gTlVMTCkKKwkJeworCQkJY29uc3QgY2hhciAqcW5zcCA9IHF1b3Rl X2lkZW50aWZpZXIobnNwbmFtZSk7CisKKwkJCWN0eC5zY2hlbWFfcHJlZml4ID0gcHNwcmludGYo IiVzLiIsIHFuc3ApOworCQkJY3R4LnNhdmVfbmVzdGxldmVsID0gTmV3R1VDTmVzdExldmVsKCk7 CisJCQkodm9pZCkgc2V0X2NvbmZpZ19vcHRpb24oInNlYXJjaF9wYXRoIiwgcW5zcCwKKwkJCQkJ CQkJCSBQR0NfVVNFUlNFVCwgUEdDX1NfU0VTU0lPTiwKKwkJCQkJCQkJCSBHVUNfQUNUSU9OX1NB VkUsIHRydWUsIDAsIGZhbHNlKTsKKwkJCXBmcmVlKG5zcG5hbWUpOworCQl9CisJfQorCisJLyoK KwkgKiBDYWNoZSBsb2NhbGx5LWRlY2xhcmVkIE5PVCBOVUxMIGNvbnN0cmFpbnQgbWV0YWRhdGEg c28gdGhlIGNvbHVtbi0gZW1pdAorCSAqIGhlbHBlcnMgY2FuIHByb2R1Y2UgIkNPTlNUUkFJTlQg bmFtZSBOT1QgTlVMTCIgaW5saW5lIGZvciB1c2VyLW5hbWVkCisJICogY29uc3RyYWludHMsIGFu ZCBzbyB0aGUgY29uc3RyYWludCBsb29wIGNhbiBhdm9pZCBkb3VibGUtZW1pdHRpbmcgdGhlbS4K KwkgKi8KKwljdHgubm5fZW50cmllcyA9IGNvbGxlY3RfbG9jYWxfbm90X251bGwocmVsLCAmY3R4 LnNraXBfbm90bnVsbF9vaWRzKTsKKworCWluaXRTdHJpbmdJbmZvKCZjdHguYnVmKTsKKworCS8q CisJICogRWFjaCBwYXNzIGJlbG93IGFwcGVuZHMgemVybyBvciBtb3JlIGZpbmlzaGVkIHN0YXRl bWVudHMgdG8KKwkgKiBjdHguc3RhdGVtZW50cyB2aWEgYXBwZW5kX3N0bXQgLyBhcHBlbmRfc3Ry aXBwZWRfc3RtdC4gIE9yZGVyIGlzCisJICogc2lnbmlmaWNhbnQ6IENSRUFURSBUQUJMRSBmaXJz dDsgT1dORVIgYW5kIHRoZSBwZXItY29sdW1uIEFMVEVSIENPTFVNTgorCSAqIHBhc3NlcyBiZWZv cmUgc3ViLW9iamVjdCBlbWlzc2lvbjsgc3ViLW9iamVjdHMgaW4gZGVwZW5kZW5jeS1mcmllbmRs eQorCSAqIG9yZGVyIChpbmRleGVzIGJlZm9yZSBjb25zdHJhaW50cywgc2luY2UgY29uc3RyYWlu dC1iYWNrZWQgaW5kZXhlcyBhcmUKKwkgKiBlbWl0dGVkIG91dC1vZi1saW5lIGJ5IHRoZSBjb25z dHJhaW50IGxvb3ApOyBhbmQgcGFydGl0aW9uIGNoaWxkcmVuCisJICogbGFzdCBzbyB0aGUgcGFy ZW50IGFscmVhZHkgZXhpc3RzIGF0IHJlcGxheSB0aW1lLgorCSAqCisJICogSW4gb25seV9mb3Jl aWduX2tleXMgbW9kZSB0aGUgdGFibGUgaXRzZWxmIGFuZCBldmVyeSBub24tRksgc3ViLW9iamVj dAorCSAqIGFscmVhZHkgZXhpc3QgKHRoZSBjYWxsZXIgcHJvZHVjZWQgdGhlbSBpbiBhIHByaW9y IHBhc3MgdmlhCisJICogaW5jbHVkZXNfZm9yZWlnbl9rZXlzPWZhbHNlKSwgc28gd2Ugc2tpcCBk aXJlY3RseSB0byB0aGUgY29uc3RyYWludAorCSAqIGxvb3AsIHdoaWNoIHRoZW4gZW1pdHMgRk9S RUlHTiBLRVkgcm93cyBvbmx5LiAgUGFydGl0aW9uLWNoaWxkCisJICogcmVjdXJzaW9uIHN0aWxs IHJ1bnMgc28gY2hpbGQgRktzIGFyZSByZWFjaGVkIHRvby4KKwkgKi8KKwlpZiAoIW9ubHlfZm9y ZWlnbl9rZXlzKQorCXsKKwkJZW1pdF9jcmVhdGVfdGFibGVfc3RtdCgmY3R4KTsKKwkJZW1pdF9v d25lcl9zdG10KCZjdHgpOworCQllbWl0X2NoaWxkX2RlZmF1bHRfb3ZlcnJpZGVzKCZjdHgpOwor CQllbWl0X2F0dG9wdGlvbnMoJmN0eCk7CisJCWVtaXRfaW5kZXhlcygmY3R4KTsKKwl9CisJZW1p dF9sb2NhbF9jb25zdHJhaW50cygmY3R4KTsKKwlpZiAoIW9ubHlfZm9yZWlnbl9rZXlzKQorCXsK KwkJZW1pdF9ydWxlcygmY3R4KTsKKwkJZW1pdF9zdGF0aXN0aWNzKCZjdHgpOworCQllbWl0X3Jl cGxpY2FfaWRlbnRpdHkoJmN0eCk7CisJCWVtaXRfcmxzX3RvZ2dsZXMoJmN0eCk7CisJfQorCisJ LyoKKwkgKiBUcmlnZ2VycyBhbmQgcm93LWxldmVsIHNlY3VyaXR5IHBvbGljaWVzIC0gZGlzYWJs ZWQgdW50aWwgdGhlCisJICogc3RhbmRhbG9uZSBwZ19nZXRfdHJpZ2dlcl9kZGwoKSBhbmQgcGdf Z2V0X3BvbGljeV9kZGwoKSBoZWxwZXJzIGxhbmQuCisJICogVGhlIHNjYW4gKyBsb2NrICsgZmls dGVyIHNjYWZmb2xkaW5nIGJlbG93IGlzIHByZXNlcnZlZCAoaW5zaWRlICNpZiAwKQorCSAqIHNv IHdpcmluZyB1cCBlYWNoIGVtaXNzaW9uIGJlY29tZXMgYSBvbmUtbGluZXIgaW4gdGhlIGxvb3Ag Ym9keSBvbmNlCisJICogdGhvc2UgaGVscGVycyBhcmUgYXZhaWxhYmxlLgorCSAqLworI2lmIDAK KwlpZiAoaW5jbHVkZV90cmlnZ2VycykKKwl7CisJCVJlbGF0aW9uCXRyaWdSZWw7CisJCVN5c1Nj YW5EZXNjIHRyaWdTY2FuOworCQlTY2FuS2V5RGF0YSB0cmlnS2V5OworCQlIZWFwVHVwbGUJdHJp Z1R1cDsKKworCQl0cmlnUmVsID0gdGFibGVfb3BlbihUcmlnZ2VyUmVsYXRpb25JZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwkJU2NhbktleUluaXQoJnRyaWdLZXksCisJCQkJCUFudW1fcGdfdHJpZ2dl cl90Z3JlbGlkLAorCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCU9i amVjdElkR2V0RGF0dW0ocmVsaWQpKTsKKwkJdHJpZ1NjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4o dHJpZ1JlbCwgVHJpZ2dlclJlbGlkTmFtZUluZGV4SWQsCisJCQkJCQkJCQkgIHRydWUsIE5VTEws IDEsICZ0cmlnS2V5KTsKKwkJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHJpZ1R1cCA9IHN5c3Rh YmxlX2dldG5leHQodHJpZ1NjYW4pKSkKKwkJeworCQkJRm9ybV9wZ190cmlnZ2VyIHRyZyA9IChG b3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCQkJaWYgKHRyZy0+dGdpc2lu dGVybmFsKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBUT0RPOiBhcHBlbmQgcGdfZ2V0X3RyaWdn ZXJfZGRsKHRyZy0+b2lkKSBvdXRwdXQgaGVyZS4gKi8KKwkJfQorCQlzeXN0YWJsZV9lbmRzY2Fu KHRyaWdTY2FuKTsKKwkJdGFibGVfY2xvc2UodHJpZ1JlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl9 CisKKwlpZiAoaW5jbHVkZV9wb2xpY2llcykKKwl7CisJCVJlbGF0aW9uCXBvbFJlbDsKKwkJU3lz U2NhbkRlc2MgcG9sU2NhbjsKKwkJU2NhbktleURhdGEgcG9sS2V5OworCQlIZWFwVHVwbGUJcG9s VHVwOworCisJCXBvbFJlbCA9IHRhYmxlX29wZW4oUG9saWN5UmVsYXRpb25JZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwkJU2NhbktleUluaXQoJnBvbEtleSwKKwkJCQkJQW51bV9wZ19wb2xpY3lfcG9s cmVsaWQsCisJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0 SWRHZXREYXR1bShyZWxpZCkpOworCQlwb2xTY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBvbFJl bCwgUG9saWN5UG9scmVsaWRQb2xuYW1lSW5kZXhJZCwKKwkJCQkJCQkJCSB0cnVlLCBOVUxMLCAx LCAmcG9sS2V5KTsKKwkJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQocG9sVHVwID0gc3lzdGFibGVf Z2V0bmV4dChwb2xTY2FuKSkpCisJCXsKKwkJCS8qIFRPRE86IGFwcGVuZCBwZ19nZXRfcG9saWN5 X2RkbChyZWxpZCwgcG9sbmFtZSkgb3V0cHV0IGhlcmUuICovCisJCX0KKwkJc3lzdGFibGVfZW5k c2Nhbihwb2xTY2FuKTsKKwkJdGFibGVfY2xvc2UocG9sUmVsLCBBY2Nlc3NTaGFyZUxvY2spOwor CX0KKyNlbHNlCisJKHZvaWQpIGluY2x1ZGVfdHJpZ2dlcnM7CisJKHZvaWQpIGluY2x1ZGVfcG9s aWNpZXM7CisjZW5kaWYKKworCWVtaXRfcGFydGl0aW9uX2NoaWxkcmVuKCZjdHgpOworCisJewor CQlpbnQJCQluYXR0cyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKS0+bmF0dHM7CisKKwkJZm9yIChp bnQgaSA9IDE7IGkgPD0gbmF0dHM7IGkrKykKKwkJCWlmIChjdHgubm5fZW50cmllc1tpXS5uYW1l ICE9IE5VTEwpCisJCQkJcGZyZWUoY3R4Lm5uX2VudHJpZXNbaV0ubmFtZSk7CisJfQorCXBmcmVl KGN0eC5ubl9lbnRyaWVzKTsKKworCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsK KwlwZnJlZShjdHguYnVmLmRhdGEpOworCXBmcmVlKGN0eC5xdWFsbmFtZSk7CisJaWYgKGN0eC5z Y2hlbWFfcHJlZml4ICE9IE5VTEwpCisJCXBmcmVlKGN0eC5zY2hlbWFfcHJlZml4KTsKKwlsaXN0 X2ZyZWUoY3R4LnNraXBfbm90bnVsbF9vaWRzKTsKKworCS8qCisJICogUG9wIHRoZSBuYXJyb3dl ZCBzZWFyY2hfcGF0aCBub3cgdGhhdCBhbGwgaGVscGVycyBoYXZlIHJ1bi4gIEVycm9ycworCSAq IHRocm93biBlYXJsaWVyIGFyZSBjbGVhbmVkIHVwIGJ5IEF0RU9YYWN0X0dVQyBhdCB4YWN0IGVu ZC4KKwkgKi8KKwlpZiAoY3R4LnNhdmVfbmVzdGxldmVsID49IDApCisJCUF0RU9YYWN0X0dVQyh0 cnVlLCBjdHguc2F2ZV9uZXN0bGV2ZWwpOworCisJcmV0dXJuIGN0eC5zdGF0ZW1lbnRzOworfQor CisvKgorICogcGdfZ2V0X3RhYmxlX2RkbAorICoJCVJldHVybiBEREwgdG8gcmVjcmVhdGUgYSB0 YWJsZSBhcyBhIHNldCBvZiB0ZXh0IHJvd3MuCisgKi8KK0RhdHVtCitwZ19nZXRfdGFibGVfZGRs KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJRnVuY0NhbGxDb250ZXh0ICpmdW5jY3R4OworCUxpc3QJ ICAgKnN0YXRlbWVudHM7CisKKwlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQorCXsKKwkJTWVtb3J5 Q29udGV4dCBvbGRjb250ZXh0OworCQlPaWQJCQlyZWxpZDsKKwkJRGRsT3B0aW9uCW9wdHNbXSA9 IHsKKwkJCXsicHJldHR5IiwgRERMX09QVF9CT09MfSwKKwkJCXsib3duZXIiLCBERExfT1BUX0JP T0x9LAorCQkJeyJ0YWJsZXNwYWNlIiwgRERMX09QVF9CT09MfSwKKwkJCXsiaW5jbHVkZXNfaW5k ZXhlcyIsIERETF9PUFRfQk9PTH0sCisJCQl7ImluY2x1ZGVzX2NvbnN0cmFpbnRzIiwgRERMX09Q VF9CT09MfSwKKwkJCXsiaW5jbHVkZXNfZm9yZWlnbl9rZXlzIiwgRERMX09QVF9CT09MfSwKKwkJ CXsib25seV9mb3JlaWduX2tleXMiLCBERExfT1BUX0JPT0x9LAorCQkJeyJpbmNsdWRlc19ydWxl cyIsIERETF9PUFRfQk9PTH0sCisJCQl7ImluY2x1ZGVzX3N0YXRpc3RpY3MiLCBERExfT1BUX0JP T0x9LAorCQkJeyJpbmNsdWRlc190cmlnZ2VycyIsIERETF9PUFRfQk9PTH0sCisJCQl7ImluY2x1 ZGVzX3BvbGljaWVzIiwgRERMX09QVF9CT09MfSwKKwkJCXsiaW5jbHVkZXNfcmxzIiwgRERMX09Q VF9CT09MfSwKKwkJCXsiaW5jbHVkZXNfcmVwbGljYV9pZGVudGl0eSIsIERETF9PUFRfQk9PTH0s CisJCQl7ImluY2x1ZGVzX3BhcnRpdGlvbiIsIERETF9PUFRfQk9PTH0sCisJCQl7InNjaGVtYV9x dWFsaWZpZWQiLCBERExfT1BUX0JPT0x9LAorCQl9OworCisJCWZ1bmNjdHggPSBTUkZfRklSU1RD QUxMX0lOSVQoKTsKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4 LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOworCisJCWlmIChQR19BUkdJU05VTEwoMCkpCisJCXsK KwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJCVNSRl9SRVRVUk5fRE9O RShmdW5jY3R4KTsKKwkJfQorCisJCXJlbGlkID0gUEdfR0VUQVJHX09JRCgwKTsKKwkJcGFyc2Vf ZGRsX29wdGlvbnMoZmNpbmZvLCAxLCBvcHRzLCBsZW5ndGhvZihvcHRzKSk7CisKKwkJc3RhdGVt ZW50cyA9IHBnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwocmVsaWQsCisJCQkJCQkJCQkJCSAgIG9w dHNbMF0uaXNzZXQgJiYgb3B0c1swXS5ib29sdmFsLAorCQkJCQkJCQkJCQkgICBvcHRzWzFdLmlz c2V0ICYmICFvcHRzWzFdLmJvb2x2YWwsCisJCQkJCQkJCQkJCSAgIG9wdHNbMl0uaXNzZXQgJiYg IW9wdHNbMl0uYm9vbHZhbCwKKwkJCQkJCQkJCQkJICAgIW9wdHNbM10uaXNzZXQgfHwgb3B0c1sz XS5ib29sdmFsLAorCQkJCQkJCQkJCQkgICAhb3B0c1s0XS5pc3NldCB8fCBvcHRzWzRdLmJvb2x2 YWwsCisJCQkJCQkJCQkJCSAgICFvcHRzWzVdLmlzc2V0IHx8IG9wdHNbNV0uYm9vbHZhbCwKKwkJ CQkJCQkJCQkJICAgb3B0c1s2XS5pc3NldCAmJiBvcHRzWzZdLmJvb2x2YWwsCisJCQkJCQkJCQkJ CSAgICFvcHRzWzddLmlzc2V0IHx8IG9wdHNbN10uYm9vbHZhbCwKKwkJCQkJCQkJCQkJICAgIW9w dHNbOF0uaXNzZXQgfHwgb3B0c1s4XS5ib29sdmFsLAorCQkJCQkJCQkJCQkgICAhb3B0c1s5XS5p c3NldCB8fCBvcHRzWzldLmJvb2x2YWwsCisJCQkJCQkJCQkJCSAgICFvcHRzWzEwXS5pc3NldCB8 fCBvcHRzWzEwXS5ib29sdmFsLAorCQkJCQkJCQkJCQkgICAhb3B0c1sxMV0uaXNzZXQgfHwgb3B0 c1sxMV0uYm9vbHZhbCwKKwkJCQkJCQkJCQkJICAgIW9wdHNbMTJdLmlzc2V0IHx8IG9wdHNbMTJd LmJvb2x2YWwsCisJCQkJCQkJCQkJCSAgIG9wdHNbMTNdLmlzc2V0ICYmIG9wdHNbMTNdLmJvb2x2 YWwsCisJCQkJCQkJCQkJCSAgICFvcHRzWzE0XS5pc3NldCB8fCBvcHRzWzE0XS5ib29sdmFsKTsK KwkJZnVuY2N0eC0+dXNlcl9mY3R4ID0gc3RhdGVtZW50czsKKwkJZnVuY2N0eC0+bWF4X2NhbGxz ID0gbGlzdF9sZW5ndGgoc3RhdGVtZW50cyk7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGNvbnRleHQpOworCX0KKworCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCXN0YXRl bWVudHMgPSAoTGlzdCAqKSBmdW5jY3R4LT51c2VyX2ZjdHg7CisKKwlpZiAoZnVuY2N0eC0+Y2Fs bF9jbnRyIDwgZnVuY2N0eC0+bWF4X2NhbGxzKQorCXsKKwkJY2hhcgkgICAqc3RtdDsKKworCQlz dG10ID0gbGlzdF9udGgoc3RhdGVtZW50cywgZnVuY2N0eC0+Y2FsbF9jbnRyKTsKKworCQlTUkZf UkVUVVJOX05FWFQoZnVuY2N0eCwgQ1N0cmluZ0dldFRleHREYXR1bShzdG10KSk7CisJfQorCWVs c2UKKwl7CisJCWxpc3RfZnJlZV9kZWVwKHN0YXRlbWVudHMpOworCQlTUkZfUkVUVVJOX0RPTkUo ZnVuY2N0eCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhl cml0cy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhlcml0cy5oCmluZGV4IGNjODc0YWJh YWJiLi4xZTQ2M2IwMTA2ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhl cml0cy5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaApAQCAtNTUsNiAr NTUsNyBAQCBERUNMQVJFX0lOREVYKHBnX2luaGVyaXRzX3BhcmVudF9pbmRleCwgMjE4NywgSW5o ZXJpdHNQYXJlbnRJbmRleElkLCBwZ19pbmhlcml0cwogZXh0ZXJuIExpc3QgKmZpbmRfaW5oZXJp dGFuY2VfY2hpbGRyZW4oT2lkIHBhcmVudHJlbElkLCBMT0NLTU9ERSBsb2NrbW9kZSk7CiBleHRl cm4gTGlzdCAqZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbl9leHRlbmRlZChPaWQgcGFyZW50cmVs SWQsIGJvb2wgb21pdF9kZXRhY2hlZCwKIAkJCQkJCQkJCQkJCUxPQ0tNT0RFIGxvY2ttb2RlLCBi b29sICpkZXRhY2hlZF9leGlzdCwgVHJhbnNhY3Rpb25JZCAqZGV0YWNoZWRfeG1pbik7CitleHRl cm4gTGlzdCAqZmluZF9pbmhlcml0YW5jZV9wYXJlbnRzKE9pZCByZWxpZCwgTE9DS01PREUgbG9j a21vZGUpOwogCiBleHRlcm4gTGlzdCAqZmluZF9hbGxfaW5oZXJpdG9ycyhPaWQgcGFyZW50cmVs SWQsIExPQ0tNT0RFIGxvY2ttb2RlLAogCQkJCQkJCQkgTGlzdCAqKm51bXBhcmVudHMpOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggYmUxNTdhNWZiZTkuLmU0NTZjMjI2ZjUzIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQKQEAgLTg2MTUsNiArODYxNSwxMyBAQAogICBwcm9hcmd0eXBlcyA9 PiAncmVnZGF0YWJhc2UgdGV4dCcsIHByb2FsbGFyZ3R5cGVzID0+ICd7cmVnZGF0YWJhc2UsdGV4 dH0nLAogICBwcm9hcmdtb2RlcyA9PiAne2ksdn0nLCBwcm9hcmdkZWZhdWx0cyA9PiAne05VTEx9 JywKICAgcHJvc3JjID0+ICdwZ19nZXRfZGF0YWJhc2VfZGRsJyB9LAoreyBvaWQgPT4gJzgyMTUn LCBkZXNjciA9PiAnZ2V0IERETCB0byByZWNyZWF0ZSBhIHRhYmxlJywKKyAgcHJvbmFtZSA9PiAn cGdfZ2V0X3RhYmxlX2RkbCcsIHByb3Jvd3MgPT4gJzUwJywgcHJvdmFyaWFkaWMgPT4gJ3RleHQn LAorICBwcm9pc3N0cmljdCA9PiAnZicsIHByb3JldHNldCA9PiAndCcsIHByb3ZvbGF0aWxlID0+ ICdzJywgcHJvcGFyYWxsZWwgPT4gJ3InLAorICBwcm9uYXJnZGVmYXVsdHMgPT4gJzEnLCBwcm9y ZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJ3JlZ2NsYXNzIHRleHQnLCBwcm9h bGxhcmd0eXBlcyA9PiAne3JlZ2NsYXNzLHRleHR9JywKKyAgcHJvYXJnbW9kZXMgPT4gJ3tpLHZ9 JywgcHJvYXJnZGVmYXVsdHMgPT4gJ3tOVUxMfScsCisgIHByb3NyYyA9PiAncGdfZ2V0X3RhYmxl X2RkbCcgfSwKIHsgb2lkID0+ICcyNTA5JywKICAgZGVzY3IgPT4gJ2RlcGFyc2UgYW4gZW5jb2Rl ZCBleHByZXNzaW9uIHdpdGggcHJldHR5LXByaW50IG9wdGlvbicsCiAgIHByb25hbWUgPT4gJ3Bn X2dldF9leHByJywgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oIGIvc3JjL2luY2x1ZGUv Y29tbWFuZHMvdGFibGVjbWRzLmgKaW5kZXggYzNkODUxOGNiNjIuLmQzMzU2M2ZkZWFkIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMuaAorKysgYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy90YWJsZWNtZHMuaApAQCAtOTIsNiArOTIsNyBAQCBleHRlcm4gdm9pZCBjaGVj a19vZl90eXBlKEhlYXBUdXBsZSB0eXBldHVwbGUpOwogCiBleHRlcm4gdm9pZCByZWdpc3Rlcl9v bl9jb21taXRfYWN0aW9uKE9pZCByZWxpZCwgT25Db21taXRBY3Rpb24gYWN0aW9uKTsKIGV4dGVy biB2b2lkIHJlbW92ZV9vbl9jb21taXRfYWN0aW9uKE9pZCByZWxpZCk7CitleHRlcm4gT25Db21t aXRBY3Rpb24gZ2V0X29uX2NvbW1pdF9hY3Rpb24oT2lkIHJlbGlkKTsKIAogZXh0ZXJuIHZvaWQg UHJlQ29tbWl0X29uX2NvbW1pdF9hY3Rpb25zKHZvaWQpOwogZXh0ZXJuIHZvaWQgQXRFT1hhY3Rf b25fY29tbWl0X2FjdGlvbnMoYm9vbCBpc0NvbW1pdCk7CkBAIC0xMDgsNCArMTA5LDYgQEAgZXh0 ZXJuIHZvaWQgUmFuZ2VWYXJDYWxsYmFja093bnNSZWxhdGlvbihjb25zdCBSYW5nZVZhciAqcmVs YXRpb24sCiBleHRlcm4gYm9vbCBQYXJ0Q29uc3RyYWludEltcGxpZWRCeVJlbENvbnN0cmFpbnQo UmVsYXRpb24gc2NhbnJlbCwKIAkJCQkJCQkJCQkJCSBMaXN0ICpwYXJ0Q29uc3RyYWludCk7CiAK K2V4dGVybiBjb25zdCBjaGFyICpzdG9yYWdlX25hbWUoY2hhciBjKTsKKwogI2VuZGlmCQkJCQkJ CS8qIFRBQkxFQ01EU19IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3BnX2dldF90YWJsZV9kZGwub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wZ19nZXRf dGFibGVfZGRsLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGMx NjRjNWI3ODgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Bn X2dldF90YWJsZV9kZGwub3V0CkBAIC0wLDAgKzEsNzc5IEBACistLQorLS0gcGdfZ2V0X3RhYmxl X2RkbAorLS0KKy0tIEFsbCB0ZXN0cyBwYXNzIG93bmVyPT5mYWxzZSBzbyB0aGUgQUxURVIgVEFC TEUgT1dORVIgVE8gbGluZSBpcyBub3QKKy0tIGVtaXR0ZWQsIGtlZXBpbmcgb3V0cHV0IHN0YWJs ZSBhY3Jvc3MgdGVzdCBydW5uZXJzICh3aGljaCBtYXkgcnVuIHVuZGVyCistLSBkaWZmZXJlbnQg cm9sZSBuYW1lcykuCistLQorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfdGVzdDsKK1NFVCBzZWFy Y2hfcGF0aCA9IHBndGJsX2RkbF90ZXN0OworLS0gQmFzaWMgdGFibGUgd2l0aCBQUklNQVJZIEtF WSwgTk9UIE5VTEwsIERFRkFVTFQsIENPTExBVEUuCitDUkVBVEUgVEFCTEUgYmFzaWMgKAorICAg IGlkIGludCBQUklNQVJZIEtFWSwKKyAgICBuYW1lIHRleHQgTk9UIE5VTEwgREVGQVVMVCAnYW5v bicgQ09MTEFURSAiQyIKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2lj Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxf dGVzdC5iYXNpYyAoIGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCBDT0xMQVRFICJDIiBE RUZBVUxUICdhbm9uJzo6dGV4dCBOT1QgTlVMTCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuYmFzaWMgQUREIENPTlNUUkFJTlQgYmFzaWNfaWRfbm90X251bGwgTk9UIE5VTEwgaWQ7Cisg QUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYmFzaWMgQUREIENPTlNUUkFJTlQgYmFzaWNfbmFt ZV9ub3RfbnVsbCBOT1QgTlVMTCBuYW1lOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmJh c2ljIEFERCBDT05TVFJBSU5UIGJhc2ljX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKyg0IHJvd3Mp CisKKy0tIElkZW50aXR5IGNvbHVtbnMgKHdpdGggZGVmYXVsdCBhbmQgY3VzdG9tIHNlcXVlbmNl IG9wdGlvbnMpLgorQ1JFQVRFIFRBQkxFIGlkX2NvbHMgKAorICAgIGlkX2Fsd2F5cyBpbnQgR0VO RVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSwKKyAgICBpZF9kZWZhdWx0IGludCBHRU5FUkFURUQg QlkgREVGQVVMVCBBUyBJREVOVElUWQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnaWRfY29scyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkX2Nv bHMgKCBpZF9hbHdheXMgaW50ZWdlciBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZIE5PVCBO VUxMLCBpZF9kZWZhdWx0IGludGVnZXIgR0VORVJBVEVEIEJZIERFRkFVTFQgQVMgSURFTlRJVFkg Tk9UIE5VTEwpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkX2NvbHMgQUREIENPTlNU UkFJTlQgaWRfY29sc19pZF9hbHdheXNfbm90X251bGwgTk9UIE5VTEwgaWRfYWx3YXlzOworIEFM VEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkX2NvbHMgQUREIENPTlNUUkFJTlQgaWRfY29sc19p ZF9kZWZhdWx0X25vdF9udWxsIE5PVCBOVUxMIGlkX2RlZmF1bHQ7CisoMyByb3dzKQorCitDUkVB VEUgVEFCTEUgaWRfY3VzdG9tICgKKyAgICB2IGludCBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5U SVRZICgKKyAgICAgICAgU0VRVUVOQ0UgTkFNRSBpZF9jdXN0b21fdl9zZXEKKyAgICAgICAgU1RB UlQgV0lUSCAxMDAgSU5DUkVNRU5UIEJZIDUKKyAgICAgICAgTUlOVkFMVUUgNTAgTUFYVkFMVUUg MTAwMAorICAgICAgICBDQUNIRSAxMCBDWUNMRQorICAgICkKKyk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2lkX2N1c3RvbSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBwZ3RibF9kZGxfdGVzdC5pZF9jdXN0b20gKCB2IGludGVnZXIgR0VORVJBVEVEIEFMV0FZ UyBBUyBJREVOVElUWSAoU1RBUlQgV0lUSCAxMDAgSU5DUkVNRU5UIEJZIDUgTUlOVkFMVUUgNTAg TUFYVkFMVUUgMTAwMCBDQUNIRSAxMCBDWUNMRSkgTk9UIE5VTEwpOworIEFMVEVSIFRBQkxFIHBn dGJsX2RkbF90ZXN0LmlkX2N1c3RvbSBBREQgQ09OU1RSQUlOVCBpZF9jdXN0b21fdl9ub3RfbnVs bCBOT1QgTlVMTCB2OworKDIgcm93cykKKworLS0gR2VuZXJhdGVkIHN0b3JlZCBjb2x1bW4uCitD UkVBVEUgVEFCTEUgZ2VuX2NvbHMgKAorICAgIGNlbnRzIGludCwKKyAgICBkb2xsYXJzIG51bWVy aWMgR0VORVJBVEVEIEFMV0FZUyBBUyAoY2VudHMgLyAxMDAuMCkgU1RPUkVECispOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdnZW5fY29scyc6OnJlZ2NsYXNzLCAnb3duZXInLCAn ZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxF IHBndGJsX2RkbF90ZXN0Lmdlbl9jb2xzICggY2VudHMgaW50ZWdlciwgZG9sbGFycyBudW1lcmlj IEdFTkVSQVRFRCBBTFdBWVMgQVMgKCgoY2VudHMpOjpudW1lcmljIC8gMTAwLjApKSBTVE9SRUQp OworKDEgcm93KQorCistLSBTVE9SQUdFIGFuZCBDT01QUkVTU0lPTiAob25seSBlbWl0dGVkIHdo ZW4gbm9uLWRlZmF1bHQgZm9yIHRoZSB0eXBlKS4KK0NSRUFURSBUQUJMRSBzdG9yYWdlX2NvbHMg KAorICAgIGEgdGV4dCBTVE9SQUdFIEVYVEVSTkFMLAorICAgIGIgdGV4dCBTVE9SQUdFIE1BSU4s CisgICAgYyB0ZXh0IENPTVBSRVNTSU9OIHBnbHoKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3N0b3JhZ2VfY29scyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5zdG9yYWdlX2NvbHMgKCBhIHRleHQg U1RPUkFHRSBFWFRFUk5BTCwgYiB0ZXh0IFNUT1JBR0UgTUFJTiwgYyB0ZXh0IENPTVBSRVNTSU9O IHBnbHopOworKDEgcm93KQorCistLSBDb25zdHJhaW50czogQ0hFQ0ssIFVOSVFVRSwgRk9SRUlH TiBLRVkgKERFRkVSUkFCTEUpLgorQ1JFQVRFIFRBQkxFIHJlZmQgKGlkIGludCBQUklNQVJZIEtF WSk7CitDUkVBVEUgVEFCTEUgY29ucyAoCisgICAgYSBpbnQgQ0hFQ0sgKGEgPiAwKSwKKyAgICBi IGludCBVTklRVUUsCisgICAgYyBpbnQgUkVGRVJFTkNFUyByZWZkKGlkKSBERUZFUlJBQkxFIElO SVRJQUxMWSBERUZFUlJFRAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29u cyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyAoIGEgaW50ZWdlciwgYiBp bnRlZ2VyLCBjIGludGVnZXIsIENPTlNUUkFJTlQgY29uc19hX2NoZWNrIENIRUNLICgoYSA+IDAp KSk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RSQUlOVCBjb25z X2Jfa2V5IFVOSVFVRSAoYik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyBBREQg Q09OU1RSQUlOVCBjb25zX2NfZmtleSBGT1JFSUdOIEtFWSAoYykgUkVGRVJFTkNFUyByZWZkKGlk KSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRDsKKygzIHJvd3MpCisKKy0tIEluZGV4ZXM6 IGZ1bmN0aW9uYWwgYW5kIHBhcnRpYWwuICBDb25zdHJhaW50LWJhY2tpbmcgaW5kZXhlcyBhcmUK Ky0tIHN1cHByZXNzZWQgKHRoZXkgYXJlIGVtaXR0ZWQgYnkgdGhlIGNvbnN0cmFpbnQgbG9vcCku CitDUkVBVEUgVEFCTEUgaWR4ZCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOworQ1JF QVRFIElOREVYIGlkeGRfbG93ZXIgT04gaWR4ZCAobG93ZXIobmFtZSkpOworQ1JFQVRFIElOREVY IGlkeGRfcGFydGlhbCBPTiBpZHhkIChpZCkgV0hFUkUgaWQgPiAxMDA7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgKCBpZCBpbnRlZ2VyIE5PVCBOVUxM LCBuYW1lIHRleHQpOworIENSRUFURSBJTkRFWCBpZHhkX2xvd2VyIE9OIHBndGJsX2RkbF90ZXN0 LmlkeGQgVVNJTkcgYnRyZWUgKGxvd2VyKG5hbWUpKTsKKyBDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0 aWFsIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGlkKSBXSEVSRSAoaWQgPiAx MDApOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgQUREIENPTlNUUkFJTlQgaWR4 ZF9pZF9ub3RfbnVsbCBOT1QgTlVMTCBpZDsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5p ZHhkIEFERCBDT05TVFJBSU5UIGlkeGRfcGtleSBQUklNQVJZIEtFWSAoaWQpOworKDUgcm93cykK KworLS0gSW5oZXJpdGFuY2UsIGluY2x1ZGluZyBhIGNoaWxkIERFRkFVTFQgb3ZlcnJpZGUgb24g YW4gaW5oZXJpdGVkIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBwYXIgKGEgaW50IERFRkFVTFQgMSwg YiB0ZXh0KTsKK0NSRUFURSBUQUJMRSBjaCAoYyBpbnQpIElOSEVSSVRTIChwYXIpOworQUxURVIg VEFCTEUgY2ggQUxURVIgQ09MVU1OIGEgU0VUIERFRkFVTFQgOTk5OworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QuY2ggKCBjIGludGVnZXIpIElOSEVSSVRTIChwZ3RibF9kZGxfdGVzdC5wYXIpOwor IEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNoIEFMVEVSIENPTFVNTiBhIFNFVCBERUZBVUxU IDk5OTsKKygyIHJvd3MpCisKKy0tIFBlci1jb2x1bW4gYXR0b3B0aW9uczogZW1pdHRlZCBhcyBB TFRFUiBDT0xVTU4gU0VUICguLi4pLgorQ1JFQVRFIFRBQkxFIGF0dG9wdCAoYSBpbnQsIGIgdGV4 dCk7CitBTFRFUiBUQUJMRSBhdHRvcHQgQUxURVIgQ09MVU1OIGEgU0VUIChuX2Rpc3RpbmN0ID0g MTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYXR0b3B0Jzo6cmVnY2xhc3Ms ICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmF0dG9wdCAoIGEgaW50ZWdlciwgYiB0ZXh0 KTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5hdHRvcHQgQUxURVIgQ09MVU1OIGEgU0VU IChuX2Rpc3RpbmN0PScxMDAnKTsKKygyIHJvd3MpCisKKy0tIFBhcnRpdGlvbmVkIHRhYmxlIHBh cmVudCAoUkFOR0UgYW5kIEhBU0gpLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9yYW5nZSAoaWQgaW50 LCBrIGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2Ug KCBpZCBpbnRlZ2VyLCBrIGludGVnZXIpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworKDEgcm93 KQorCitDUkVBVEUgVEFCTEUgcGFydGVkX2hhc2ggKGlkIGludCkgUEFSVElUSU9OIEJZIEhBU0gg KGlkKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2hhc2gnOjpyZWdj bGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9oYXNo ICggaWQgaW50ZWdlcikgUEFSVElUSU9OIEJZIEhBU0ggKGlkKTsKKygxIHJvdykKKworLS0gUGFy dGl0aW9uIGNoaWxkcmVuOiBGUk9NL1RPLCBXSVRIIChtb2R1bHVzLCByZW1haW5kZXIpLCBERUZB VUxULgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9yYW5nZV8xIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFu Z2UKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworQUxURVIgVEFCTEUgcGFydGVk X3JhbmdlXzEgQUxURVIgQ09MVU1OIGsgU0VUIERFRkFVTFQgNzsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlXzEnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNl Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZV8xIFBB UlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2UgRk9SIFZBTFVFUyBGUk9NICgw KSBUTyAoMTAwKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2VfMSBB TFRFUiBDT0xVTU4gayBTRVQgREVGQVVMVCA3OworKDIgcm93cykKKworQ1JFQVRFIFRBQkxFIHBh cnRlZF9oYXNoXzAgUEFSVElUSU9OIE9GIHBhcnRlZF9oYXNoCisgICAgRk9SIFZBTFVFUyBXSVRI IChtb2R1bHVzIDIsIHJlbWFpbmRlciAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGFydGVkX2hhc2hfMCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJs ZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfaGFz aF8wIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfaGFzaCBGT1IgVkFMVUVTIFdJ VEggKG1vZHVsdXMgMiwgcmVtYWluZGVyIDApOworKDEgcm93KQorCitDUkVBVEUgVEFCTEUgcGFy dGVkX3JhbmdlX2RlZiBQQVJUSVRJT04gT0YgcGFydGVkX3JhbmdlIERFRkFVTFQ7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV9kZWYnOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBw Z3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVz dC5wYXJ0ZWRfcmFuZ2UgREVGQVVMVDsKKygxIHJvdykKKworLS0gUnVsZXMuCitDUkVBVEUgVEFC TEUgcnQgKGlkIGludCk7CitDUkVBVEUgVEFCTEUgcnRfbG9nIChpZCBpbnQpOworQ1JFQVRFIFJV TEUgcnRfbG9nX2luc2VydCBBUyBPTiBJTlNFUlQgVE8gcnQKKyAgICBETyBBTFNPIElOU0VSVCBJ TlRPIHJ0X2xvZyBWQUxVRVMgKE5FVy5pZCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3J0Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ydCAoIGlkIGludGVnZXIpOworIENSRUFURSBS VUxFIHJ0X2xvZ19pbnNlcnQgQVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwor ICAgICBPTiBJTlNFUlQgVE8gcGd0YmxfZGRsX3Rlc3QucnQgRE8gIElOU0VSVCBJTlRPIHJ0X2xv ZyAoaWQpKworICAgVkFMVUVTIChuZXcuaWQpOworKDIgcm93cykKKworLS0gRXh0ZW5kZWQgc3Rh dGlzdGljcy4KK0NSRUFURSBUQUJMRSBzdHggKGEgaW50LCBiIGludCwgYyBpbnQpOworQ1JFQVRF IFNUQVRJU1RJQ1Mgc3R4X25kdiAobmRpc3RpbmN0KSBPTiBhLCBiIEZST00gc3R4OworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzdHgnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNl Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5zdHggKCBhIGludGVnZXIsIGIgaW50ZWdlciwgYyBpbnRlZ2VyKTsKKyBDUkVB VEUgU1RBVElTVElDUyBwZ3RibF9kZGxfdGVzdC5zdHhfbmR2IChuZGlzdGluY3QpIE9OIGEsIGIg RlJPTSBzdHg7CisoMiByb3dzKQorCistLSBSb3ctbGV2ZWwgc2VjdXJpdHkgdG9nZ2xlcy4KK0NS RUFURSBUQUJMRSBybHMgKGlkIGludCk7CitBTFRFUiBUQUJMRSBybHMgRU5BQkxFIFJPVyBMRVZF TCBTRUNVUklUWTsKK0FMVEVSIFRBQkxFIHJscyBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFk7CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jscyc6OnJlZ2NsYXNzLCAnb3duZXInLCAn ZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ybHMgKCBpZCBp bnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ybHMgRU5BQkxFIFJPVyBMRVZF TCBTRUNVUklUWTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ybHMgRk9SQ0UgUk9XIExF VkVMIFNFQ1VSSVRZOworKDMgcm93cykKKworLS0gUkVQTElDQSBJREVOVElUWTogZW1pdHRlZCBv bmx5IHdoZW4gbm90IHRoZSBkZWZhdWx0LgorQ1JFQVRFIFRBQkxFIHJpX2Z1bGwgKGEgaW50KTsK K0FMVEVSIFRBQkxFIHJpX2Z1bGwgUkVQTElDQSBJREVOVElUWSBGVUxMOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdyaV9mdWxsJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScp OworICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2Z1bGwgKCBhIGludGVn ZXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2Z1bGwgUkVQTElDQSBJREVOVElU WSBGVUxMOworKDIgcm93cykKKworQ1JFQVRFIFRBQkxFIHJpX2lkeCAoYSBpbnQgTk9UIE5VTEwp OworQ1JFQVRFIFVOSVFVRSBJTkRFWCByaV9pZHhfYSBPTiByaV9pZHggKGEpOworQUxURVIgVEFC TEUgcmlfaWR4IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfaWR4X2E7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2lkeCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFs c2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9pZHggKCBhIGludGVnZXIgTk9UIE5VTEwp OworIENSRUFURSBVTklRVUUgSU5ERVggcmlfaWR4X2EgT04gcGd0YmxfZGRsX3Rlc3QucmlfaWR4 IFVTSU5HIGJ0cmVlIChhKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9pZHggQURE IENPTlNUUkFJTlQgcmlfaWR4X2Ffbm90X251bGwgTk9UIE5VTEwgYTsKKyBBTFRFUiBUQUJMRSBw Z3RibF9kZGxfdGVzdC5yaV9pZHggUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9pZHhf YTsKKyg0IHJvd3MpCisKKy0tIFVOTE9HR0VEICsgcmVsb3B0aW9ucy4KK0NSRUFURSBVTkxPR0dF RCBUQUJMRSB1bm8gKGlkIGludCkgV0lUSCAoZmlsbGZhY3RvciA9IDcwKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgndW5vJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IFVOTE9HR0VEIFRBQkxFIHBndGJsX2RkbF90ZXN0LnVubyAoIGlkIGludGVnZXIpIFdJVEggKGZp bGxmYWN0b3I9JzcwJyk7CisoMSByb3cpCisKKy0tIFR5cGVkIHRhYmxlIChDUkVBVEUgVEFCTEUg T0YgdHlwZV9uYW1lKS4gIENvbHVtbnMgaW5oZXJpdGVkIGZyb20gdGhlCistLSB0eXBlIGVtaXQg bm90aGluZzsgbG9jYWxseS1hcHBsaWVkIERFRkFVTFQsIE5PVCBOVUxMIGFuZCBDSEVDSyBjb21l CistLSBvdXQgdGhyb3VnaCBhIHNpbmdsZSAiKGNvbCBXSVRIIE9QVElPTlMgLi4uKSIgbGlzdC4K K0NSRUFURSBUWVBFIHR5cGVkX3QgQVMgKGEgaW50LCBiIHRleHQpOworQ1JFQVRFIFRBQkxFIHR5 cGVkX3BsYWluIE9GIHR5cGVkX3Q7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3R5 cGVkX3BsYWluJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnR5cGVkX3BsYWluIE9GIHBn dGJsX2RkbF90ZXN0LnR5cGVkX3Q7CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSB0eXBlZF9vdmVy IE9GIHR5cGVkX3QgKAorICAgIGEgV0lUSCBPUFRJT05TIERFRkFVTFQgNyBOT1QgTlVMTCwKKyAg ICBiIFdJVEggT1BUSU9OUyBOT1QgTlVMTCwKKyAgICBDT05TVFJBSU5UIGJfbm9uZW1wdHkgQ0hF Q0sgKGxlbmd0aChiKSA+IDApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0 eXBlZF9vdmVyJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnR5cGVkX292ZXIgT0YgcGd0YmxfZGRsX3Rlc3Qu dHlwZWRfdCAoIGEgV0lUSCBPUFRJT05TIERFRkFVTFQgNyBOT1QgTlVMTCwgYiBXSVRIIE9QVElP TlMgTk9UIE5VTEwsIENPTlNUUkFJTlQgYl9ub25lbXB0eSBDSEVDSyAoKGxlbmd0aChiKSA+IDAp KSk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QudHlwZWRfb3ZlciBBREQgQ09OU1RSQUlO VCB0eXBlZF9vdmVyX2Ffbm90X251bGwgTk9UIE5VTEwgYTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9k ZGxfdGVzdC50eXBlZF9vdmVyIEFERCBDT05TVFJBSU5UIHR5cGVkX292ZXJfYl9ub3RfbnVsbCBO T1QgTlVMTCBiOworKDMgcm93cykKKworLS0gVGVtcG9yYXJ5IHRhYmxlcyArIE9OIENPTU1JVC4g IFRlbXAgdGFibGVzIGxpdmUgaW4gYSBzZXNzaW9uLWxvY2FsCistLSBuYW1lc3BhY2Ugd2hvc2Ug bmFtZSB2YXJpZXMgYmV0d2VlbiBydW5zLCBzbyB3ZSBzdHJpcCB0aGUgc2NoZW1hCistLSBwcmVm aXguICBPTiBDT01NSVQgRFJPUCBvbmx5IGZpcmVzIGF0IGNvbW1pdCwgc28gdGhlIHF1ZXJpZXMg dGhhdAorLS0gbmVlZCB0byBzZWUgdGhlIGNhdGFsb2cgZW50cnkgbXVzdCBydW4gaW4gdGhlIHNh bWUgdHJhbnNhY3Rpb24gYXMKKy0tIHRoZSBDUkVBVEUuCitCRUdJTjsKK0NSRUFURSBURU1QIFRB QkxFIHRlbXBfZGVmYXVsdCAoaWQgaW50KTsKK0NSRUFURSBURU1QIFRBQkxFIHRlbXBfZGVsZXRl IChpZCBpbnQpIE9OIENPTU1JVCBERUxFVEUgUk9XUzsKK0NSRUFURSBURU1QIFRBQkxFIHRlbXBf ZHJvcCAoaWQgaW50KSBPTiBDT01NSVQgRFJPUDsKK1NFTEVDVCByZWdleHBfcmVwbGFjZShsaW5l LCAnIj9wZ190ZW1wXz9bMC05XSsiP1wuJywgJ3BnX3RlbXAuJykgQVMgbGluZQorRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCd0ZW1wX2RlZmF1bHQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJykg QVMgbGluZQorV0hFUkUgbGluZSBMSUtFICdDUkVBVEUgJSc7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU RU1QT1JBUlkgVEFCTEUgcGdfdGVtcC50ZW1wX2RlZmF1bHQgKCBpZCBpbnRlZ2VyKTsKKygxIHJv dykKKworU0VMRUNUIHJlZ2V4cF9yZXBsYWNlKGxpbmUsICciP3BnX3RlbXBfP1swLTldKyI/XC4n LCAncGdfdGVtcC4nKSBBUyBsaW5lCitGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBfZGVsZXRl Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAn Q1JFQVRFICUnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHBnX3RlbXAudGVtcF9kZWxldGUgKCBpZCBp bnRlZ2VyKSBPTiBDT01NSVQgREVMRVRFIFJPV1M7CisoMSByb3cpCisKK1NFTEVDVCByZWdleHBf cmVwbGFjZShsaW5lLCAnIj9wZ190ZW1wXz9bMC05XSsiP1wuJywgJ3BnX3RlbXAuJykgQVMgbGlu ZQorRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1wX2Ryb3AnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJykgQVMgbGluZQorV0hFUkUgbGluZSBMSUtFICdDUkVBVEUgJSc7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBURU1QT1JBUlkgVEFCTEUgcGdfdGVtcC50 ZW1wX2Ryb3AgKCBpZCBpbnRlZ2VyKSBPTiBDT01NSVQgRFJPUDsKKygxIHJvdykKKworUk9MTEJB Q0s7CistLSBQcmV0dHkgbW9kZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFz aWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywgJ3ByZXR0eScsICd0cnVlJyk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5iYXNpYyAoICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICArCisgICAgIGlkIGludGVnZXIgTk9UIE5VTEwsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAg ICAgbmFtZSB0ZXh0IENPTExBVEUgIkMiIERFRkFVTFQgJ2Fub24nOjp0ZXh0IE5PVCBOVUxMICAg ICAgICAgICAgICAgICAgICAgICAgICAgKworICk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuYmFzaWMgQUREIENPTlNUUkFJTlQgYmFzaWNfaWRfbm90X251bGwgTk9UIE5VTEwgaWQ7Cisg QUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYmFzaWMgQUREIENPTlNUUkFJTlQgYmFzaWNfbmFt ZV9ub3RfbnVsbCBOT1QgTlVMTCBuYW1lOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmJh c2ljIEFERCBDT05TVFJBSU5UIGJhc2ljX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKyg0IHJvd3Mp CisKKy0tIGluY2x1ZGVzXyogZ2F0aW5nOiBlYWNoIHN1Yi1vYmplY3QgY2F0ZWdvcnkgY2FuIGJl IHN1cHByZXNzZWQgaW5kaXZpZHVhbGx5LgorLS0gaW5jbHVkZXNfaW5kZXhlcz1mYWxzZSBoaWRl cyB0aGUgQ1JFQVRFIElOREVYIHN0YXRlbWVudHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnaW5jbHVkZXNfaW5kZXhlcycsICdmYWxzZScpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QuaWR4ZCAoIGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7CisgQUxURVIg VEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX2lkX25vdF9udWxs IE5PVCBOVUxMIGlkOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgQUREIENPTlNU UkFJTlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMyByb3dzKQorCistLSBpbmNsdWRl c19jb25zdHJhaW50cz1mYWxzZSBoaWRlcyBib3RoIGlubGluZSBDSEVDSyBpbiBDUkVBVEUgVEFC TEUgYW5kCistLSB0aGUgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIGxpbmVzLgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVzX2NvbnN0cmFp bnRzJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgKCBhIGludGVnZXIsIGIgaW50ZWdlciwgYyBpbnRlZ2Vy KTsKKygxIHJvdykKKworLS0gaW5jbHVkZXNfZm9yZWlnbl9rZXlzPWZhbHNlIHN1cHByZXNzZXMg b25seSBGT1JFSUdOIEtFWSBjb25zdHJhaW50czsKKy0tIFBSSU1BUlkgS0VZLCBVTklRVUUsIENI RUNLLCBhbmQgbmFtZWQgTk9UIE5VTEwgc3RheS4gIFRoaXMgaXMgdGhlCistLSBzY2hlbWEtY2xv bmluZyB3b3JrZmxvdzogZW1pdCB0YWJsZXMgZmlyc3Qgd2l0aG91dCBjcm9zcy10YWJsZSBGS3Ms CistLSB0aGVuIHJ1biBwZ19nZXRfdGFibGVfZGRsKC4uLiwgb25seV9mb3JlaWduX2tleXM9PnRy dWUpIGFmdGVyIGRhdGEKKy0tIGhhcyBiZWVuIGxvYWRlZCB0byBhZGQgdGhlbSBvbmNlIGFsbCB0 YXJnZXRzIGV4aXN0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVn Y2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J2luY2x1ZGVzX2ZvcmVpZ25fa2V5cycsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3Rlc3QuY29ucyAoIGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIsIENPTlNUUkFJTlQg Y29uc19hX2NoZWNrIENIRUNLICgoYSA+IDApKSk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuY29ucyBBREQgQ09OU1RSQUlOVCBjb25zX2Jfa2V5IFVOSVFVRSAoYik7CisoMiByb3dzKQor CistLSBvbmx5X2ZvcmVpZ25fa2V5cz10cnVlIGlzIHRoZSBjb21wbGVtZW50IG9mIHRoZSBwcmV2 aW91cyBjYWxsOiBpdAorLS0gZW1pdHMgb25seSB0aGUgQUxURVIgVEFCTEUgLi4uIEFERCBDT05T VFJBSU5UIC4uLiBGT1JFSUdOIEtFWSByb3dzCistLSBhbmQgc3VwcHJlc3NlcyB0aGUgQ1JFQVRF IFRBQkxFIGFuZCBldmVyeSBub24tRksgc3ViLW9iamVjdC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdvbmx5X2ZvcmVpZ25fa2V5cycsICd0cnVlJyk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0 X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29u cyBBREQgQ09OU1RSQUlOVCBjb25zX2NfZmtleSBGT1JFSUdOIEtFWSAoYykgUkVGRVJFTkNFUyBy ZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRDsKKygxIHJvdykKKworLS0gQSB0 YWJsZSB3aXRoIG5vIGZvcmVpZ24ga2V5cyBwcm9kdWNlcyBubyByb3dzIGluIG9ubHlfZm9yZWln bl9rZXlzCistLSBtb2RlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyZWZkJzo6 cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ29ubHlfZm9yZWlnbl9rZXlzJywgJ3RydWUnKTsKKyBwZ19nZXRfdGFibGVfZGRsIAorLS0t LS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCistLSBDb21iaW5pbmcgb25seV9mb3JlaWduX2tl eXM9dHJ1ZSB3aXRoIGluY2x1ZGVzX2ZvcmVpZ25fa2V5cz1mYWxzZQorLS0gd291bGQgZW1pdCBu b3RoaW5nIHVzZWZ1bCwgc28gdGhlIGNvbWJpbmF0aW9uIGlzIHJlamVjdGVkLgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHlfZm9yZWlnbl9rZXlzJywgJ3Ry dWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlc19mb3JlaWduX2tl eXMnLCAnZmFsc2UnKTsKK0VSUk9SOiAgIm9ubHlfZm9yZWlnbl9rZXlzIiByZXF1aXJlcyAiaW5j bHVkZXNfZm9yZWlnbl9rZXlzIiB0byBiZSB0cnVlCistLSBpbmNsdWRlc19ydWxlcz1mYWxzZSBo aWRlcyB0aGUgQ1JFQVRFIFJVTEUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0 Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ2luY2x1ZGVzX3J1bGVzJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucnQgKCBpZCBp bnRlZ2VyKTsKKygxIHJvdykKKworLS0gaW5jbHVkZXNfc3RhdGlzdGljcz1mYWxzZSBoaWRlcyB0 aGUgQ1JFQVRFIFNUQVRJU1RJQ1MuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0 eCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdpbmNsdWRlc19zdGF0aXN0aWNzJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5zdHggKCBhIGludGVnZXIs IGIgaW50ZWdlciwgYyBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0gaW5jbHVkZXNfcmxzPWZhbHNl IGhpZGVzIHRoZSBFTkFCTEUvRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZIHRvZ2dsZXMuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jscyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFs c2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlc19ybHMnLCAnZmFs c2UnKTsKKyAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyAoIGlkIGludGVnZXIpOworKDEgcm93KQorCistLSBp bmNsdWRlc19yZXBsaWNhX2lkZW50aXR5PWZhbHNlIGhpZGVzIHRoZSBSRVBMSUNBIElERU5USVRZ IGNsYXVzZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfZnVsbCc6OnJlZ2Ns YXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdp bmNsdWRlc19yZXBsaWNhX2lkZW50aXR5JywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgIHBn X2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVz dC5yaV9mdWxsICggYSBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0gaW5jbHVkZXNfcGFydGl0aW9u OiBkZWZhdWx0IGlzIGZhbHNlLCBzbyB0aGUgcGFydGl0aW9uZWQtdGFibGUgcGFyZW50CistLSBE REwgb24gaXRzIG93biBkb2VzIG5vdCBpbmNsdWRlIGl0cyBjaGlsZHJlbi4gIFNldHRpbmcgaXQg dG8gdHJ1ZQorLS0gYXBwZW5kcyB0aGUgY2hpbGRyZW4ncyBEREwgYWZ0ZXIgdGhlIHBhcmVudC4K K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlJzo6cmVnY2xhc3Ms ICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1 ZGVzX3BhcnRpdGlvbicsICd0cnVlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90 ZXN0LnBhcnRlZF9yYW5nZSAoIGlkIGludGVnZXIsIGsgaW50ZWdlcikgUEFSVElUSU9OIEJZIFJB TkdFIChpZCk7CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZV8xIFBB UlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2UgRk9SIFZBTFVFUyBGUk9NICgw KSBUTyAoMTAwKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2VfMSBB TFRFUiBDT0xVTU4gayBTRVQgREVGQVVMVCA3OworIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVz dC5wYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFu Z2UgREVGQVVMVDsKKyg0IHJvd3MpCisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ugc3RyaXBz IHRoZSBzY2hlbWEgZnJvbSB0aGUgdGFyZ2V0IHRhYmxlIGl0c2VsZgorLS0gYW5kIGZyb20gc2Ft ZS1zY2hlbWEgc2libGluZyByZWZlcmVuY2VzIChpbmhlcml0YW5jZS9wYXJ0aXRpb24KKy0tIHBh cmVudHMsIGlkZW50aXR5IHNlcXVlbmNlcyBpbiB0aGUgc2FtZSBzY2hlbWEpLCB3aGlsZSBjcm9z cy1zY2hlbWEKKy0tIHJlZmVyZW5jZXMgYXJlIGtlcHQgcXVhbGlmaWVkIGZvciBjb3JyZWN0bmVz cy4KKy0tCistLSBCYXJlIENSRUFURSBUQUJMRSBmb3IgYW4gb3JkaW5hcnkgdGFibGUuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQn LCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgYmFz aWMgKCBpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRleHQgQ09MTEFURSAiQyIgREVGQVVMVCAn YW5vbic6OnRleHQgTk9UIE5VTEwpOworIEFMVEVSIFRBQkxFIGJhc2ljIEFERCBDT05TVFJBSU5U IGJhc2ljX2lkX25vdF9udWxsIE5PVCBOVUxMIGlkOworIEFMVEVSIFRBQkxFIGJhc2ljIEFERCBD T05TVFJBSU5UIGJhc2ljX25hbWVfbm90X251bGwgTk9UIE5VTEwgbmFtZTsKKyBBTFRFUiBUQUJM RSBiYXNpYyBBREQgQ09OU1RSQUlOVCBiYXNpY19wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoNCBy b3dzKQorCistLSBJTkhFUklUUyBwYXJlbnQgaW4gdGhlIHNhbWUgc2NoZW1hIGlzIGVtaXR0ZWQg dW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NoJzo6cmVnY2xh c3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nj aGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIGNoICggYyBpbnRlZ2VyKSBJTkhFUklUUyAocGFy KTsKKyBBTFRFUiBUQUJMRSBjaCBBTFRFUiBDT0xVTU4gYSBTRVQgREVGQVVMVCA5OTk7CisoMiBy b3dzKQorCistLSBQYXJ0aXRpb24gcGFyZW50IGluIHRoZSBzYW1lIHNjaGVtYSBpcyBlbWl0dGVk IHVucXVhbGlmaWVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFu Z2VfMSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxF IHBhcnRlZF9yYW5nZV8xIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFuZ2UgRk9SIFZBTFVFUyBGUk9N ICgwKSBUTyAoMTAwKTsKKyBBTFRFUiBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBBTFRFUiBDT0xVTU4g ayBTRVQgREVGQVVMVCA3OworKDIgcm93cykKKworLS0gQ3Jvc3Mtc2NoZW1hIEZLIHRhcmdldCBr ZWVwcyBxdWFsaWZpY2F0aW9uLiAgVGhlICdyZWZkJyB0YWJsZSBpcyBpbgorLS0gcGd0YmxfZGRs X3Rlc3Q7IHBsYWNlIGFuIEZLIHRhcmdldCBpbiBhIGRpZmZlcmVudCBzY2hlbWEgYW5kIHZlcmlm eSBpdAorLS0gc3RheXMgcXVhbGlmaWVkIGV2ZW4gd2l0aCBzY2hlbWFfcXVhbGlmaWVkPWZhbHNl LgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfb3RoZXI7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X290aGVyLnBhcmVudCAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSB4c2NoZW1h X2ZrICgKKyAgICBpZCAgaW50IFBSSU1BUlkgS0VZLAorICAgIHBpZCBpbnQgUkVGRVJFTkNFUyBw Z3RibF9kZGxfb3RoZXIucGFyZW50CispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCd4c2NoZW1hX2ZrJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IENSRUFURSBUQUJMRSB4c2NoZW1hX2ZrICggaWQgaW50ZWdlciBOT1QgTlVMTCwgcGlkIGludGVn ZXIpOworIEFMVEVSIFRBQkxFIHhzY2hlbWFfZmsgQUREIENPTlNUUkFJTlQgeHNjaGVtYV9ma19p ZF9ub3RfbnVsbCBOT1QgTlVMTCBpZDsKKyBBTFRFUiBUQUJMRSB4c2NoZW1hX2ZrIEFERCBDT05T VFJBSU5UIHhzY2hlbWFfZmtfcGlkX2ZrZXkgRk9SRUlHTiBLRVkgKHBpZCkgUkVGRVJFTkNFUyBw Z3RibF9kZGxfb3RoZXIucGFyZW50KGlkKTsKKyBBTFRFUiBUQUJMRSB4c2NoZW1hX2ZrIEFERCBD T05TVFJBSU5UIHhzY2hlbWFfZmtfcGtleSBQUklNQVJZIEtFWSAoaWQpOworKDQgcm93cykKKwor LS0gSWRlbnRpdHkgY29sdW1uIHdpdGggYSBjdXN0b20gc2VxdWVuY2UgbmFtZSBpbiB0aGUgc2Ft ZSBzY2hlbWEgaXMKKy0tIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2lkX2N1c3RvbSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgaWRfY3VzdG9tICggdiBpbnRlZ2VyIEdF TkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgKFNUQVJUIFdJVEggMTAwIElOQ1JFTUVOVCBCWSA1 IE1JTlZBTFVFIDUwIE1BWFZBTFVFIDEwMDAgQ0FDSEUgMTAgQ1lDTEUpIE5PVCBOVUxMKTsKKyBB TFRFUiBUQUJMRSBpZF9jdXN0b20gQUREIENPTlNUUkFJTlQgaWRfY3VzdG9tX3Zfbm90X251bGwg Tk9UIE5VTEwgdjsKKygyIHJvd3MpCisKKy0tIFJvdW5kLXRyaXA6IHdpdGggc2NoZW1hX3F1YWxp ZmllZD1mYWxzZSwgYWZ0ZXIgU0VUIHNlYXJjaF9wYXRoIHRoZQorLS0gRERMIGNhbiBiZSByZXBs YXllZCBpbnRvIGEgZGlmZmVyZW50IHRhcmdldCBzY2hlbWEuCitDUkVBVEUgU0NIRU1BIHBndGJs X2RkbF9yZXBsYXk7CitETyAkJAorREVDTEFSRQorICAgIHN0bXQgdGV4dDsKK0JFR0lOCisgICAg U0VUIExPQ0FMIHNlYXJjaF9wYXRoID0gcGd0YmxfZGRsX3JlcGxheTsKKyAgICBGT1Igc3RtdCBJ TgorICAgICAgICBTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF90 ZXN0LmJhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKSBBUyBsaW5lCisgICAgTE9P UAorICAgICAgICBFWEVDVVRFIHN0bXQ7CisgICAgRU5EIExPT1A7CitFTkQgJCQ7CitTRUxFQ1Qg cmVsbmFtZXNwYWNlOjpyZWduYW1lc3BhY2U6OnRleHQsIHJlbG5hbWUKK0ZST00gcGdfY2xhc3Mg V0hFUkUgb2lkID0gJ3BndGJsX2RkbF9yZXBsYXkuYmFzaWMnOjpyZWdjbGFzczsKKyAgIHJlbG5h bWVzcGFjZSAgIHwgcmVsbmFtZSAKKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBwZ3Ri bF9kZGxfcmVwbGF5IHwgYmFzaWMKKygxIHJvdykKKworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3Jl cGxheSBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwZ3RibF9kZGxf cmVwbGF5LmJhc2ljCitEUk9QIFRBQkxFIHhzY2hlbWFfZms7CitEUk9QIFNDSEVNQSBwZ3RibF9k ZGxfb3RoZXIgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0Ymxf ZGRsX290aGVyLnBhcmVudAorLS0gTG9jYWxseS1kZWNsYXJlZCBDSEVDSyBvbiBhIHBhcnRpdGlv biBjaGlsZCBoYXMgbm8gaW5saW5lIGNvbHVtbgorLS0gbGlzdCB0byBsaXZlIGluIChQQVJUSVRJ T04gT0YgZm9ybSksIHNvIGl0IG11c3QgY29tZSBvdXQgYXMgYQorLS0gc2VwYXJhdGUgQUxURVIg VEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIHN0YXRlbWVudC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRf Y2hrIChpZCBpbnQsIHZhbCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRB QkxFIHBhcnRlZF9jaGtfY2hpbGQgUEFSVElUSU9OIE9GIHBhcnRlZF9jaGsKKyAgICAoQ09OU1RS QUlOVCBjaGtfaW5saW5lIENIRUNLICh2YWwgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDAp IFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfY2hrX2No aWxkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBw Z3RibF9kZGxfdGVzdC5wYXJ0ZWRfY2hrX2NoaWxkIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVz dC5wYXJ0ZWRfY2hrIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CisgQUxURVIgVEFCTEUg cGd0YmxfZGRsX3Rlc3QucGFydGVkX2Noa19jaGlsZCBBREQgQ09OU1RSQUlOVCBjaGtfaW5saW5l IENIRUNLICgodmFsID4gMCkpOworKDIgcm93cykKKworRFJPUCBUQUJMRSBwYXJ0ZWRfY2hrOwor LS0gSW5oZXJpdGFuY2UgY2hpbGRyZW4gb2YgYSBwYXJlbnQgd2l0aCBhIGdlbmVyYXRlZCBjb2x1 bW4gc2hvdWxkIG5vdAorLS0gZW1pdCBhbiBBTFRFUiBDT0xVTU4gLi4uIFNFVCBERUZBVUxUIGZv ciB0aGUgaW5oZXJpdGVkIGdlbmVyYXRlZAorLS0gY29sdW1uOiB0aGUgR0VORVJBVEVEIGV4cHJl c3Npb24gY2FycmllcyBkb3duIHRocm91Z2ggaW5oZXJpdGFuY2UsCistLSBhbmQgU0VUIERFRkFV TFQgd291bGQgZmFpbCBhdCByZXBsYXkgYWdhaW5zdCBhIGdlbmVyYXRlZCBjb2x1bW4uCitDUkVB VEUgVEFCTEUgcGFyX2dlbiAoCisgICAgaWQgaW50LAorICAgIGcgIGludCBHRU5FUkFURUQgQUxX QVlTIEFTIChpZCAqIDIpIFNUT1JFRAorKTsKK0NSRUFURSBUQUJMRSBjaF9nZW4gKCkgSU5IRVJJ VFMgKHBhcl9nZW4pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaF9nZW4nOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY2hfZ2VuICgpIElOSEVSSVRT IChwZ3RibF9kZGxfdGVzdC5wYXJfZ2VuKTsKKygxIHJvdykKKworRFJPUCBUQUJMRSBwYXJfZ2Vu IENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGNoX2dlbgorLS0gVXNl ci1uYW1lZCBOT1QgTlVMTCBjb25zdHJhaW50IG11c3QgYmUgZW1pdHRlZCBpbmxpbmUgYXMKKy0t ICJDT05TVFJBSU5UIG5hbWUgTk9UIE5VTEwiIHNvIGEgcmVwbGF5IGRvZXMgbm90IGNvbGxpZGUg d2l0aCB0aGUKKy0tIGF1dG8tbmFtZWQgTk9UIE5VTEwgdGhhdCBQb3N0Z3JlU1FMIHdvdWxkIG90 aGVyd2lzZSBjcmVhdGUgZnJvbSBhCistLSBwbGFpbiBpbmxpbmUgIk5PVCBOVUxMIi4gIFRoZSBj b25zdHJhaW50IGxvb3Agc2tpcHMgdGhlIHVzZXItbmFtZWQKKy0tIGVudHJ5IHRvIGF2b2lkIGRv dWJsZS1lbWlzc2lvbi4KK0NSRUFURSBUQUJMRSBubl9uYW1lZCAoCisgICAgYSBpbnQgQ09OU1RS QUlOVCBteV9ubiBOT1QgTlVMTCwKKyAgICBiIGludCBOT1QgTlVMTAorKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5fbmFtZWQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNl Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJs ZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3Rlc3Qubm5fbmFtZWQgKCBhIGludGVnZXIgQ09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCwgYiBp bnRlZ2VyIE5PVCBOVUxMKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ubl9uYW1lZCBB REQgQ09OU1RSQUlOVCBubl9uYW1lZF9iX25vdF9udWxsIE5PVCBOVUxMIGI7CisoMiByb3dzKQor CitEUk9QIFRBQkxFIG5uX25hbWVkOworLS0gTG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBvbiBh biBpbmhlcml0ZWQgY29sdW1uLiAgVGhlIGNvbHVtbiBpdHNlbGYKKy0tIGlzIG9taXR0ZWQgZnJv bSB0aGUgY2hpbGQncyBjb2x1bW4gbGlzdCAoYXR0aXNsb2NhbD1mYWxzZSksIHNvIHRoZQorLS0g dXNlci1uYW1lZCBOT1QgTlVMTCBtdXN0IGNvbWUgb3V0IHZpYSB0aGUgcG9zdC1DUkVBVEUgY29u c3RyYWludAorLS0gbG9vcCByYXRoZXIgdGhhbiBpbmxpbmUuCitDUkVBVEUgVEFCTEUgbm5fcGFy IChhIGludCk7CitDUkVBVEUgVEFCTEUgbm5fY2ggKGIgaW50KSBJTkhFUklUUyAobm5fcGFyKTsK K0FMVEVSIFRBQkxFIG5uX2NoIEFERCBDT05TVFJBSU5UIG15X25uIE5PVCBOVUxMIGE7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX2NoJzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ubl9jaCAoIGIgaW50ZWdlcikgSU5I RVJJVFMgKHBndGJsX2RkbF90ZXN0Lm5uX3Bhcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rl c3Qubm5fY2ggQUREIENPTlNUUkFJTlQgbXlfbm4gTk9UIE5VTEwgYTsKKygyIHJvd3MpCisKK0RS T1AgVEFCTEUgbm5fcGFyIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IG5uX2NoCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIG11c3QgZHJvcCB0aGUgc2NoZW1hIHBy ZWZpeCBmcm9tIERFRkFVTFQKKy0tIGV4cHJlc3Npb25zIGFuZCBpbmxpbmUgQ0hFQ0sgYm9kaWVz IHRoYXQgcmVmZXJlbmNlIHNhbWUtc2NoZW1hCistLSBvYmplY3RzIChzZXF1ZW5jZSB2aWEgbmV4 dHZhbCwgZnVuY3Rpb24gdmlhIGRpcmVjdCBjYWxsKS4gIFRoaXMKKy0tIHJlbGllcyBvbiB0aGUg ZGVwYXJzZXIgcmVzcGVjdGluZyB0aGUgbmFycm93ZWQgc2VhcmNoX3BhdGggcmF0aGVyCistLSB0 aGFuIG9uIHN1YnN0cmluZyBzdHJpcHBpbmcuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF94cmVm OworQ1JFQVRFIFNFUVVFTkNFIHBndGJsX2RkbF94cmVmLm15c2VxOworQ1JFQVRFIEZVTkNUSU9O IHBndGJsX2RkbF94cmVmLmYoaW50KSBSRVRVUk5TIGludCBMQU5HVUFHRSBzcWwgSU1NVVRBQkxF CisgICAgQVMgJ1NFTEVDVCAkMSc7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3hyZWYudCAoCisg ICAgaWQgIGludCBERUZBVUxUIG5leHR2YWwoJ3BndGJsX2RkbF94cmVmLm15c2VxJyksCisgICAg dmFsIGludCwKKyAgICBDT05TVFJBSU5UIGNoayBDSEVDSyAocGd0YmxfZGRsX3hyZWYuZih2YWwp ID4gMCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF94cmVm LnQnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXInLCAn ZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVk JywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgdCAoIGlkIGludGVnZXIgREVGQVVM VCBuZXh0dmFsKCdteXNlcSc6OnJlZ2NsYXNzKSwgdmFsIGludGVnZXIsIENPTlNUUkFJTlQgY2hr IENIRUNLICgoZih2YWwpID4gMCkpKTsKKygxIHJvdykKKworRFJPUCBTQ0hFTUEgcGd0YmxfZGRs X3hyZWYgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gMyBvdGhlciBvYmplY3Rz CitERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIHNlcXVlbmNlIHBndGJsX2RkbF94cmVmLm15c2Vx Citkcm9wIGNhc2NhZGVzIHRvIGZ1bmN0aW9uIHBndGJsX2RkbF94cmVmLmYoaW50ZWdlcikKK2Ry b3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3hyZWYudAorLS0gc2NoZW1hX3F1YWxpZmll ZD1mYWxzZSBtdXN0IE5PVCBjb3JydXB0IHN0cmluZyBsaXRlcmFscyB3aG9zZQorLS0gY29udGVu dHMgaGFwcGVuIHRvIGNvbnRhaW4gdGhlIHNjaGVtYSBuYW1lIGZvbGxvd2VkIGJ5IGEgZG90LiAg VGhlCistLSBpbi1zdHJpbmcgc3RhdGUgb2YgdGhlIHByZWZpeCBzdHJpcHBlciBwcmVzZXJ2ZXMg dGhlbSB2ZXJiYXRpbS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3N0cjsKK0NSRUFURSBUQUJM RSBwZ3RibF9kZGxfc3RyLnAgKGlkIGludCwgbm90ZSB0ZXh0KSBQQVJUSVRJT04gQlkgUkFOR0Ug KGlkKTsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfc3RyLnBjIFBBUlRJVElPTiBPRiBwZ3RibF9k ZGxfc3RyLnAKKyAgICAoQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKG5vdGUgPD4gJ3BndGJsX2RkbF9z dHIuc2VjcmV0JykpCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3N0ci5wYyc6OnJlZ2NsYXNzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBUQUJMRSBwYyBQQVJUSVRJT04gT0YgcCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOwor IEFMVEVSIFRBQkxFIHBjIEFERCBDT05TVFJBSU5UIGNoayBDSEVDSyAoKG5vdGUgPD4gJ3BndGJs X2RkbF9zdHIuc2VjcmV0Jzo6dGV4dCkpOworKDIgcm93cykKKworRFJPUCBTQ0hFTUEgcGd0Ymxf ZGRsX3N0ciBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwZ3RibF9k ZGxfc3RyLnAKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UgbXVzdCBOT1QgY29ycnVwdCBkb3Vi bGUtcXVvdGVkIGlkZW50aWZpZXJzCistLSB3aG9zZSBjb250ZW50cyBoYXBwZW4gdG8gY29udGFp biB0aGUgc2NoZW1hIG5hbWUgZm9sbG93ZWQgYnkgYSBkb3QKKy0tIChmb3IgZXhhbXBsZSBhIGNv bHVtbiBsaXRlcmFsbHkgbmFtZWQgIjxzY2hlbWE+LndlaXJkIiBpbnNpZGUgdGhhdAorLS0gc2No ZW1hKS4gIFRoZSBpbi1pZGVudCBzdGF0ZSBvZiB0aGUgcHJlZml4IHN0cmlwcGVyIHByZXNlcnZl cyB0aGVtCistLSB2ZXJiYXRpbS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3FpZDsKK0NSRUFU RSBUQUJMRSBwZ3RibF9kZGxfcWlkLnAgKGlkIGludCwgInBndGJsX2RkbF9xaWQud2VpcmQiIGlu dCkKKyAgICBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxf cWlkLnBjIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfcWlkLnAKKyAgICAoQ09OU1RSQUlOVCBjaGsg Q0hFQ0sgKCJwZ3RibF9kZGxfcWlkLndlaXJkIiA+IDApKQorICAgIEZPUiBWQUxVRVMgRlJPTSAo MCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF9x aWQucGMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXIn LCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlm aWVkJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxl X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBUQUJMRSBwYyBQQVJUSVRJT04gT0YgcCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOwor IEFMVEVSIFRBQkxFIHBjIEFERCBDT05TVFJBSU5UIGNoayBDSEVDSyAoKCJwZ3RibF9kZGxfcWlk LndlaXJkIiA+IDApKTsKKygyIHJvd3MpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9xaWQgQ0FT Q0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3FpZC5wCist LSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIHdoZW4gdGhlIGJhc2Ugc2NoZW1hIG5hbWUgaXRzZWxm IHJlcXVpcmVzCistLSBxdW90aW5nIChpdHMgcHJlZml4IHN0YXJ0cyB3aXRoICIpLiAgQm90aCBm b3JtcyBvZiB0aGUgcHJlZml4IC0KKy0tIGJhcmUtbG93ZXJjYXNlIGFuZCBxdW90ZWQgLSBtdXN0 IGJlIHN0cmlwcGVkIGZyb20gb3V0ZXIKKy0tIEFMVEVSIFRBQkxFIC8gT04gLyBDUkVBVEUgSU5E RVggcHJlZml4ZXMsIHdoaWxlIGlubmVyIHF1b3RlZAorLS0gaWRlbnRpZmllcnMgdGhhdCBoYXBw ZW4gdG8gYmVnaW4gdGhlIHNhbWUgd2F5IG11c3QgYmUgcHJlc2VydmVkLgorQ1JFQVRFIFNDSEVN QSAiUGdUYmwtRGRsLVEiOworQ1JFQVRFIFRBQkxFICJQZ1RibC1EZGwtUSIuIlQiIChpZCBpbnQs IHZhbCBpbnQsCisgICAgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKHZhbCA+IDApKTsKK0NSRUFURSBJ TkRFWCAiVF92YWxfaWR4IiBPTiAiUGdUYmwtRGRsLVEiLiJUIiAodmFsKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnIlBnVGJsLURkbC1RIi4iVCInOjpyZWdjbGFzcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUg IlQiICggaWQgaW50ZWdlciwgdmFsIGludGVnZXIsIENPTlNUUkFJTlQgY2hrIENIRUNLICgodmFs ID4gMCkpKTsKKyBDUkVBVEUgSU5ERVggIlRfdmFsX2lkeCIgT04gIlQiIFVTSU5HIGJ0cmVlICh2 YWwpOworKDIgcm93cykKKworRFJPUCBTQ0hFTUEgIlBnVGJsLURkbC1RIiBDQVNDQURFOworTk9U SUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSAiUGdUYmwtRGRsLVEiLiJUIgorLS0gRXJyb3I6 IG5vdCBhbiBvcmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0YWJsZS4KK0NSRUFURSBWSUVXIHYgQVMg U0VMRUNUIDEgQVMgeDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndic6OnJlZ2Ns YXNzKTsKK0VSUk9SOiAgInYiIGlzIG5vdCBhbiBvcmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0YWJs ZQorQ1JFQVRFIFNFUVVFTkNFIHM7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Mn OjpyZWdjbGFzcyk7CitFUlJPUjogICJzIiBpcyBub3QgYW4gb3JkaW5hcnkgb3IgcGFydGl0aW9u ZWQgdGFibGUKKy0tIE5VTEwgYXJndW1lbnQgcmV0dXJucyBubyByb3dzLgorU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKE5VTEwpOworIHBnX2dldF90YWJsZV9kZGwgCistLS0tLS0tLS0t LS0tLS0tLS0KKygwIHJvd3MpCisKKy0tIFVucmVjb2duaXplZCBvcHRpb24uCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdib2d1cycsICd0cnVlJyk7 CitFUlJPUjogIHVucmVjb2duaXplZCBvcHRpb246ICJib2d1cyIKKy0tIE9kZCBudW1iZXIgb2Yg dmFyaWFkaWMgYXJncy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpy ZWdjbGFzcywgJ3ByZXR0eScpOworRVJST1I6ICB2YXJpYWRpYyBhcmd1bWVudHMgbXVzdCBiZSBu YW1lL3ZhbHVlIHBhaXJzCitISU5UOiAgUHJvdmlkZSBhbiBldmVuIG51bWJlciBvZiB2YXJpYWRp YyBhcmd1bWVudHMgdGhhdCBjYW4gYmUgZGl2aWRlZCBpbnRvIHBhaXJzLgorLS0gUm91bmQtdHJp 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 c2NhZGVzIHRvIHZpZXcgdgorZHJvcCBjYXNjYWRlcyB0byBzZXF1ZW5jZSBzCitXSVRIIGFmdGVy X2RkbCBBUyAoCisgICAgU0VMRUNUIHQubmFtZSwgby5vcmQsIG8ubGluZQorICAgIEZST00gKFNF TEVDVCBESVNUSU5DVCBuYW1lIEZST00gcGd0YmxfZGRsX3J0X29yaWcpIEFTIHQsCisgICAgICAg ICBMQVRFUkFMIHBnX2dldF90YWJsZV9kZGwoKCdwZ3RibF9kZGxfdGVzdC4nIHx8IHQubmFtZSk6 OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvd25lcicsICdm YWxzZScpIFdJVEggT1JESU5BTElUWSBvKGxpbmUsIG9yZCkKKykKKyhTRUxFQ1QgJ21pc3Npbmct aW4tY29weScgQVMga2luZCwgbmFtZSwgb3JkLCBsaW5lIEZST00gcGd0YmxfZGRsX3J0X29yaWcK KyBFWENFUFQKKyBTRUxFQ1QgJ21pc3NpbmctaW4tY29weScsIG5hbWUsIG9yZCwgbGluZSBGUk9N IGFmdGVyX2RkbCkKK1VOSU9OIEFMTAorKFNFTEVDVCAnZXh0cmEtaW4tY29weScgQVMga2luZCwg bmFtZSwgb3JkLCBsaW5lIEZST00gYWZ0ZXJfZGRsCisgRVhDRVBUCisgU0VMRUNUICdleHRyYS1p bi1jb3B5JywgbmFtZSwgb3JkLCBsaW5lIEZST00gcGd0YmxfZGRsX3J0X29yaWcpCitPUkRFUiBC WSBraW5kLCBuYW1lLCBvcmQ7Cisga2luZCB8IG5hbWUgfCBvcmQgfCBsaW5lIAorLS0tLS0tKy0t LS0tLSstLS0tLSstLS0tLS0KKygwIHJvd3MpCisKKy0tIENsZWFudXAuCitEUk9QIFNDSEVNQSBw Z3RibF9kZGxfdGVzdCBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byAyMCBvdGhl ciBvYmplY3RzCitERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGJhc2ljCitkcm9wIGNh c2NhZGVzIHRvIHRhYmxlIGlkX2NvbHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgaWRfY3VzdG9t Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGdlbl9jb2xzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IHN0b3JhZ2VfY29scworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSByZWZkCitkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIGNvbnMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgaWR4ZAorZHJvcCBjYXNjYWRl cyB0byB0YWJsZSBwYXIKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgY2gKK2Ryb3AgY2FzY2FkZXMg dG8gdGFibGUgYXR0b3B0Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9yYW5nZQorZHJv cCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfaGFzaAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBy dF9sb2cKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcnQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg c3R4Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJscworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBy aV9mdWxsCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJpX2lkeAorZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSB1bm8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUg Yi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4IDhmYTBhNmM0N2ZiLi45 ZWNhNjRjY2EzYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVs ZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCkBAIC04MSw3ICs4MSw3 IEBAIHRlc3Q6IGNyZWF0ZV90YWJsZV9saWtlIGFsdGVyX2dlbmVyaWMgYWx0ZXJfb3BlcmF0b3Ig bWlzYyBhc3luYyBkYnNpemUgbWVyZ2UgbWlzCiAjIGNvbGxhdGUubGludXgudXRmOCBhbmQgY29s bGF0ZS5pY3UudXRmOCB0ZXN0cyBjYW5ub3QgYmUgcnVuIGluIHBhcmFsbGVsIHdpdGggZWFjaCBv dGhlcgogIyBwc3FsIGRlcGVuZHMgb24gY3JlYXRlX2FtCiAjIGFtdXRpbHMgZGVwZW5kcyBvbiBn ZW9tZXRyeSwgY3JlYXRlX2luZGV4X3NwZ2lzdCwgaGFzaF9pbmRleCwgYnJpbgotdGVzdDogcnVs ZXMgcHNxbCBwc3FsX2Nyb3NzdGFiIHBzcWxfcGlwZWxpbmUgYW11dGlscyBzdGF0c19leHQgY29s bGF0ZS5saW51eC51dGY4IGNvbGxhdGUud2luZG93cy53aW4xMjUyCit0ZXN0OiBydWxlcyBwc3Fs IHBzcWxfY3Jvc3N0YWIgcHNxbF9waXBlbGluZSBhbXV0aWxzIHN0YXRzX2V4dCBjb2xsYXRlLmxp bnV4LnV0ZjggY29sbGF0ZS53aW5kb3dzLndpbjEyNTIgcGdfZ2V0X3RhYmxlX2RkbAogCiAjIC0t LS0tLS0tLS0KICMgUnVuIHRoZXNlIGFsb25lIHNvIHRoZXkgZG9uJ3QgcnVuIG91dCBvZiBwYXJh bGxlbCB3b3JrZXJzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFi bGVfZGRsLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BnX2dldF90YWJsZV9kZGwuc3FsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40M2ZhNmQ3NDRlNQotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BnX2dldF90YWJsZV9kZGwuc3FsCkBA IC0wLDAgKzEsNDY1IEBACistLQorLS0gcGdfZ2V0X3RhYmxlX2RkbAorLS0KKy0tIEFsbCB0ZXN0 cyBwYXNzIG93bmVyPT5mYWxzZSBzbyB0aGUgQUxURVIgVEFCTEUgT1dORVIgVE8gbGluZSBpcyBu b3QKKy0tIGVtaXR0ZWQsIGtlZXBpbmcgb3V0cHV0IHN0YWJsZSBhY3Jvc3MgdGVzdCBydW5uZXJz ICh3aGljaCBtYXkgcnVuIHVuZGVyCistLSBkaWZmZXJlbnQgcm9sZSBuYW1lcykuCistLQorQ1JF QVRFIFNDSEVNQSBwZ3RibF9kZGxfdGVzdDsKK1NFVCBzZWFyY2hfcGF0aCA9IHBndGJsX2RkbF90 ZXN0OworCistLSBCYXNpYyB0YWJsZSB3aXRoIFBSSU1BUlkgS0VZLCBOT1QgTlVMTCwgREVGQVVM VCwgQ09MTEFURS4KK0NSRUFURSBUQUJMRSBiYXNpYyAoCisgICAgaWQgaW50IFBSSU1BUlkgS0VZ LAorICAgIG5hbWUgdGV4dCBOT1QgTlVMTCBERUZBVUxUICdhbm9uJyBDT0xMQVRFICJDIgorKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVy JywgJ2ZhbHNlJyk7CisKKy0tIElkZW50aXR5IGNvbHVtbnMgKHdpdGggZGVmYXVsdCBhbmQgY3Vz dG9tIHNlcXVlbmNlIG9wdGlvbnMpLgorQ1JFQVRFIFRBQkxFIGlkX2NvbHMgKAorICAgIGlkX2Fs d2F5cyBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSwKKyAgICBpZF9kZWZhdWx0IGlu dCBHRU5FUkFURUQgQlkgREVGQVVMVCBBUyBJREVOVElUWQorKTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnaWRfY29scyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKwor Q1JFQVRFIFRBQkxFIGlkX2N1c3RvbSAoCisgICAgdiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyBJ REVOVElUWSAoCisgICAgICAgIFNFUVVFTkNFIE5BTUUgaWRfY3VzdG9tX3Zfc2VxCisgICAgICAg IFNUQVJUIFdJVEggMTAwIElOQ1JFTUVOVCBCWSA1CisgICAgICAgIE1JTlZBTFVFIDUwIE1BWFZB TFVFIDEwMDAKKyAgICAgICAgQ0FDSEUgMTAgQ1lDTEUKKyAgICApCispOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdpZF9jdXN0b20nOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNl Jyk7CisKKy0tIEdlbmVyYXRlZCBzdG9yZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIGdlbl9jb2xz ICgKKyAgICBjZW50cyBpbnQsCisgICAgZG9sbGFycyBudW1lcmljIEdFTkVSQVRFRCBBTFdBWVMg QVMgKGNlbnRzIC8gMTAwLjApIFNUT1JFRAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnZ2VuX2NvbHMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIFNUT1JB R0UgYW5kIENPTVBSRVNTSU9OIChvbmx5IGVtaXR0ZWQgd2hlbiBub24tZGVmYXVsdCBmb3IgdGhl IHR5cGUpLgorQ1JFQVRFIFRBQkxFIHN0b3JhZ2VfY29scyAoCisgICAgYSB0ZXh0IFNUT1JBR0Ug RVhURVJOQUwsCisgICAgYiB0ZXh0IFNUT1JBR0UgTUFJTiwKKyAgICBjIHRleHQgQ09NUFJFU1NJ T04gcGdsegorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3RvcmFnZV9jb2xz Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCistLSBDb25zdHJhaW50czogQ0hFQ0ss IFVOSVFVRSwgRk9SRUlHTiBLRVkgKERFRkVSUkFCTEUpLgorQ1JFQVRFIFRBQkxFIHJlZmQgKGlk IGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgY29ucyAoCisgICAgYSBpbnQgQ0hFQ0sg KGEgPiAwKSwKKyAgICBiIGludCBVTklRVUUsCisgICAgYyBpbnQgUkVGRVJFTkNFUyByZWZkKGlk KSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gSW5k ZXhlczogZnVuY3Rpb25hbCBhbmQgcGFydGlhbC4gIENvbnN0cmFpbnQtYmFja2luZyBpbmRleGVz IGFyZQorLS0gc3VwcHJlc3NlZCAodGhleSBhcmUgZW1pdHRlZCBieSB0aGUgY29uc3RyYWludCBs b29wKS4KK0NSRUFURSBUQUJMRSBpZHhkIChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7 CitDUkVBVEUgSU5ERVggaWR4ZF9sb3dlciBPTiBpZHhkIChsb3dlcihuYW1lKSk7CitDUkVBVEUg SU5ERVggaWR4ZF9wYXJ0aWFsIE9OIGlkeGQgKGlkKSBXSEVSRSBpZCA+IDEwMDsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2Un KTsKKworLS0gSW5oZXJpdGFuY2UsIGluY2x1ZGluZyBhIGNoaWxkIERFRkFVTFQgb3ZlcnJpZGUg b24gYW4gaW5oZXJpdGVkIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBwYXIgKGEgaW50IERFRkFVTFQg MSwgYiB0ZXh0KTsKK0NSRUFURSBUQUJMRSBjaCAoYyBpbnQpIElOSEVSSVRTIChwYXIpOworQUxU RVIgVEFCTEUgY2ggQUxURVIgQ09MVU1OIGEgU0VUIERFRkFVTFQgOTk5OworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKwor LS0gUGVyLWNvbHVtbiBhdHRvcHRpb25zOiBlbWl0dGVkIGFzIEFMVEVSIENPTFVNTiBTRVQgKC4u LikuCitDUkVBVEUgVEFCTEUgYXR0b3B0IChhIGludCwgYiB0ZXh0KTsKK0FMVEVSIFRBQkxFIGF0 dG9wdCBBTFRFUiBDT0xVTU4gYSBTRVQgKG5fZGlzdGluY3QgPSAxMDApOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdhdHRvcHQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7 CisKKy0tIFBhcnRpdGlvbmVkIHRhYmxlIHBhcmVudCAoUkFOR0UgYW5kIEhBU0gpLgorQ1JFQVRF IFRBQkxFIHBhcnRlZF9yYW5nZSAoaWQgaW50LCBrIGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChp ZCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZSc6OnJlZ2Ns YXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworQ1JFQVRFIFRBQkxFIHBhcnRlZF9oYXNoIChpZCBp bnQpIFBBUlRJVElPTiBCWSBIQVNIIChpZCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3BhcnRlZF9oYXNoJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCistLSBQYXJ0 aXRpb24gY2hpbGRyZW46IEZST00vVE8sIFdJVEggKG1vZHVsdXMsIHJlbWFpbmRlciksIERFRkFV TFQuCitDUkVBVEUgVEFCTEUgcGFydGVkX3JhbmdlXzEgUEFSVElUSU9OIE9GIHBhcnRlZF9yYW5n ZQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitBTFRFUiBUQUJMRSBwYXJ0ZWRf cmFuZ2VfMSBBTFRFUiBDT0xVTU4gayBTRVQgREVGQVVMVCA3OworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2VfMSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2Un KTsKKworQ1JFQVRFIFRBQkxFIHBhcnRlZF9oYXNoXzAgUEFSVElUSU9OIE9GIHBhcnRlZF9oYXNo CisgICAgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAwKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2hhc2hfMCc6OnJlZ2NsYXNzLCAnb3duZXIn LCAnZmFsc2UnKTsKKworQ1JFQVRFIFRBQkxFIHBhcnRlZF9yYW5nZV9kZWYgUEFSVElUSU9OIE9G IHBhcnRlZF9yYW5nZSBERUZBVUxUOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdw YXJ0ZWRfcmFuZ2VfZGVmJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCistLSBSdWxl cy4KK0NSRUFURSBUQUJMRSBydCAoaWQgaW50KTsKK0NSRUFURSBUQUJMRSBydF9sb2cgKGlkIGlu dCk7CitDUkVBVEUgUlVMRSBydF9sb2dfaW5zZXJ0IEFTIE9OIElOU0VSVCBUTyBydAorICAgIERP IEFMU08gSU5TRVJUIElOVE8gcnRfbG9nIFZBTFVFUyAoTkVXLmlkKTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgncnQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0t IEV4dGVuZGVkIHN0YXRpc3RpY3MuCitDUkVBVEUgVEFCTEUgc3R4IChhIGludCwgYiBpbnQsIGMg aW50KTsKK0NSRUFURSBTVEFUSVNUSUNTIHN0eF9uZHYgKG5kaXN0aW5jdCkgT04gYSwgYiBGUk9N IHN0eDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xhc3MsICdv d25lcicsICdmYWxzZScpOworCistLSBSb3ctbGV2ZWwgc2VjdXJpdHkgdG9nZ2xlcy4KK0NSRUFU RSBUQUJMRSBybHMgKGlkIGludCk7CitBTFRFUiBUQUJMRSBybHMgRU5BQkxFIFJPVyBMRVZFTCBT RUNVUklUWTsKK0FMVEVSIFRBQkxFIHJscyBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jscyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFs c2UnKTsKKworLS0gUkVQTElDQSBJREVOVElUWTogZW1pdHRlZCBvbmx5IHdoZW4gbm90IHRoZSBk ZWZhdWx0LgorQ1JFQVRFIFRBQkxFIHJpX2Z1bGwgKGEgaW50KTsKK0FMVEVSIFRBQkxFIHJpX2Z1 bGwgUkVQTElDQSBJREVOVElUWSBGVUxMOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdyaV9mdWxsJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCitDUkVBVEUgVEFCTEUg cmlfaWR4IChhIGludCBOT1QgTlVMTCk7CitDUkVBVEUgVU5JUVVFIElOREVYIHJpX2lkeF9hIE9O IHJpX2lkeCAoYSk7CitBTFRFUiBUQUJMRSByaV9pZHggUkVQTElDQSBJREVOVElUWSBVU0lORyBJ TkRFWCByaV9pZHhfYTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4Jzo6 cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCistLSBVTkxPR0dFRCArIHJlbG9wdGlvbnMu CitDUkVBVEUgVU5MT0dHRUQgVEFCTEUgdW5vIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA3 MCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Vubyc6OnJlZ2NsYXNzLCAnb3du ZXInLCAnZmFsc2UnKTsKKworLS0gVHlwZWQgdGFibGUgKENSRUFURSBUQUJMRSBPRiB0eXBlX25h bWUpLiAgQ29sdW1ucyBpbmhlcml0ZWQgZnJvbSB0aGUKKy0tIHR5cGUgZW1pdCBub3RoaW5nOyBs b2NhbGx5LWFwcGxpZWQgREVGQVVMVCwgTk9UIE5VTEwgYW5kIENIRUNLIGNvbWUKKy0tIG91dCB0 aHJvdWdoIGEgc2luZ2xlICIoY29sIFdJVEggT1BUSU9OUyAuLi4pIiBsaXN0LgorQ1JFQVRFIFRZ UEUgdHlwZWRfdCBBUyAoYSBpbnQsIGIgdGV4dCk7CitDUkVBVEUgVEFCTEUgdHlwZWRfcGxhaW4g T0YgdHlwZWRfdDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndHlwZWRfcGxhaW4n OjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKK0NSRUFURSBUQUJMRSB0eXBlZF9vdmVy IE9GIHR5cGVkX3QgKAorICAgIGEgV0lUSCBPUFRJT05TIERFRkFVTFQgNyBOT1QgTlVMTCwKKyAg ICBiIFdJVEggT1BUSU9OUyBOT1QgTlVMTCwKKyAgICBDT05TVFJBSU5UIGJfbm9uZW1wdHkgQ0hF Q0sgKGxlbmd0aChiKSA+IDApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0 eXBlZF9vdmVyJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCistLSBUZW1wb3Jhcnkg dGFibGVzICsgT04gQ09NTUlULiAgVGVtcCB0YWJsZXMgbGl2ZSBpbiBhIHNlc3Npb24tbG9jYWwK Ky0tIG5hbWVzcGFjZSB3aG9zZSBuYW1lIHZhcmllcyBiZXR3ZWVuIHJ1bnMsIHNvIHdlIHN0cmlw IHRoZSBzY2hlbWEKKy0tIHByZWZpeC4gIE9OIENPTU1JVCBEUk9QIG9ubHkgZmlyZXMgYXQgY29t bWl0LCBzbyB0aGUgcXVlcmllcyB0aGF0CistLSBuZWVkIHRvIHNlZSB0aGUgY2F0YWxvZyBlbnRy eSBtdXN0IHJ1biBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiBhcworLS0gdGhlIENSRUFURS4KK0JF R0lOOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWZhdWx0IChpZCBpbnQpOworQ1JFQVRFIFRF TVAgVEFCTEUgdGVtcF9kZWxldGUgKGlkIGludCkgT04gQ09NTUlUIERFTEVURSBST1dTOworQ1JF QVRFIFRFTVAgVEFCTEUgdGVtcF9kcm9wIChpZCBpbnQpIE9OIENPTU1JVCBEUk9QOworCitTRUxF Q1QgcmVnZXhwX3JlcGxhY2UobGluZSwgJyI/cGdfdGVtcF8/WzAtOV0rIj9cLicsICdwZ190ZW1w LicpIEFTIGxpbmUKK0ZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9kZWZhdWx0Jzo6cmVnY2xh c3MsICdvd25lcicsICdmYWxzZScpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAnQ1JFQVRFICUn OworCitTRUxFQ1QgcmVnZXhwX3JlcGxhY2UobGluZSwgJyI/cGdfdGVtcF8/WzAtOV0rIj9cLics ICdwZ190ZW1wLicpIEFTIGxpbmUKK0ZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9kZWxldGUn OjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJykgQVMgbGluZQorV0hFUkUgbGluZSBMSUtFICdD UkVBVEUgJSc7CisKK1NFTEVDVCByZWdleHBfcmVwbGFjZShsaW5lLCAnIj9wZ190ZW1wXz9bMC05 XSsiP1wuJywgJ3BnX3RlbXAuJykgQVMgbGluZQorRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1w X2Ryb3AnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJykgQVMgbGluZQorV0hFUkUgbGluZSBM SUtFICdDUkVBVEUgJSc7CitST0xMQkFDSzsKKworLS0gUHJldHR5IG1vZGUuCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScs ICdwcmV0dHknLCAndHJ1ZScpOworCistLSBpbmNsdWRlc18qIGdhdGluZzogZWFjaCBzdWItb2Jq ZWN0IGNhdGVnb3J5IGNhbiBiZSBzdXBwcmVzc2VkIGluZGl2aWR1YWxseS4KKy0tIGluY2x1ZGVz X2luZGV4ZXM9ZmFsc2UgaGlkZXMgdGhlIENSRUFURSBJTkRFWCBzdGF0ZW1lbnRzLgorU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVzX2luZGV4ZXMnLCAn ZmFsc2UnKTsKKworLS0gaW5jbHVkZXNfY29uc3RyYWludHM9ZmFsc2UgaGlkZXMgYm90aCBpbmxp bmUgQ0hFQ0sgaW4gQ1JFQVRFIFRBQkxFIGFuZAorLS0gdGhlIEFMVEVSIFRBQkxFIC4uLiBBREQg Q09OU1RSQUlOVCBsaW5lcy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6 OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdpbmNsdWRlc19jb25zdHJhaW50cycsICdmYWxzZScpOworCistLSBpbmNsdWRlc19mb3Jl aWduX2tleXM9ZmFsc2Ugc3VwcHJlc3NlcyBvbmx5IEZPUkVJR04gS0VZIGNvbnN0cmFpbnRzOwor LS0gUFJJTUFSWSBLRVksIFVOSVFVRSwgQ0hFQ0ssIGFuZCBuYW1lZCBOT1QgTlVMTCBzdGF5LiAg VGhpcyBpcyB0aGUKKy0tIHNjaGVtYS1jbG9uaW5nIHdvcmtmbG93OiBlbWl0IHRhYmxlcyBmaXJz dCB3aXRob3V0IGNyb3NzLXRhYmxlIEZLcywKKy0tIHRoZW4gcnVuIHBnX2dldF90YWJsZV9kZGwo Li4uLCBvbmx5X2ZvcmVpZ25fa2V5cz0+dHJ1ZSkgYWZ0ZXIgZGF0YQorLS0gaGFzIGJlZW4gbG9h ZGVkIHRvIGFkZCB0aGVtIG9uY2UgYWxsIHRhcmdldHMgZXhpc3QuCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZXNfZm9yZWlnbl9rZXlzJywgJ2ZhbHNl Jyk7CisKKy0tIG9ubHlfZm9yZWlnbl9rZXlzPXRydWUgaXMgdGhlIGNvbXBsZW1lbnQgb2YgdGhl IHByZXZpb3VzIGNhbGw6IGl0CistLSBlbWl0cyBvbmx5IHRoZSBBTFRFUiBUQUJMRSAuLi4gQURE IENPTlNUUkFJTlQgLi4uIEZPUkVJR04gS0VZIHJvd3MKKy0tIGFuZCBzdXBwcmVzc2VzIHRoZSBD UkVBVEUgVEFCTEUgYW5kIGV2ZXJ5IG5vbi1GSyBzdWItb2JqZWN0LgorU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHlfZm9yZWlnbl9rZXlzJywgJ3RydWUnKTsK KworLS0gQSB0YWJsZSB3aXRoIG5vIGZvcmVpZ24ga2V5cyBwcm9kdWNlcyBubyByb3dzIGluIG9u bHlfZm9yZWlnbl9rZXlzCistLSBtb2RlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdyZWZkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ29ubHlfZm9yZWlnbl9rZXlzJywgJ3RydWUnKTsKKworLS0gQ29tYmluaW5n IG9ubHlfZm9yZWlnbl9rZXlzPXRydWUgd2l0aCBpbmNsdWRlc19mb3JlaWduX2tleXM9ZmFsc2UK Ky0tIHdvdWxkIGVtaXQgbm90aGluZyB1c2VmdWwsIHNvIHRoZSBjb21iaW5hdGlvbiBpcyByZWpl Y3RlZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAn b3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5X2Zv cmVpZ25fa2V5cycsICd0cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5j bHVkZXNfZm9yZWlnbl9rZXlzJywgJ2ZhbHNlJyk7CisKKy0tIGluY2x1ZGVzX3J1bGVzPWZhbHNl IGhpZGVzIHRoZSBDUkVBVEUgUlVMRS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cnQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnaW5jbHVkZXNfcnVsZXMnLCAnZmFsc2UnKTsKKworLS0gaW5jbHVkZXNfc3RhdGlz dGljcz1mYWxzZSBoaWRlcyB0aGUgQ1JFQVRFIFNUQVRJU1RJQ1MuCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlc19zdGF0aXN0aWNzJywgJ2ZhbHNlJyk7 CisKKy0tIGluY2x1ZGVzX3Jscz1mYWxzZSBoaWRlcyB0aGUgRU5BQkxFL0ZPUkNFIFJPVyBMRVZF TCBTRUNVUklUWSB0b2dnbGVzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdybHMn OjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnaW5jbHVkZXNfcmxzJywgJ2ZhbHNlJyk7CisKKy0tIGluY2x1ZGVzX3JlcGxpY2FfaWRl bnRpdHk9ZmFsc2UgaGlkZXMgdGhlIFJFUExJQ0EgSURFTlRJVFkgY2xhdXNlLgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9mdWxsJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVzX3JlcGxpY2FfaWRl bnRpdHknLCAnZmFsc2UnKTsKKworLS0gaW5jbHVkZXNfcGFydGl0aW9uOiBkZWZhdWx0IGlzIGZh bHNlLCBzbyB0aGUgcGFydGl0aW9uZWQtdGFibGUgcGFyZW50CistLSBEREwgb24gaXRzIG93biBk b2VzIG5vdCBpbmNsdWRlIGl0cyBjaGlsZHJlbi4gIFNldHRpbmcgaXQgdG8gdHJ1ZQorLS0gYXBw ZW5kcyB0aGUgY2hpbGRyZW4ncyBEREwgYWZ0ZXIgdGhlIHBhcmVudC4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVzX3BhcnRpdGlvbics ICd0cnVlJyk7CisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ugc3RyaXBzIHRoZSBzY2hlbWEg ZnJvbSB0aGUgdGFyZ2V0IHRhYmxlIGl0c2VsZgorLS0gYW5kIGZyb20gc2FtZS1zY2hlbWEgc2li bGluZyByZWZlcmVuY2VzIChpbmhlcml0YW5jZS9wYXJ0aXRpb24KKy0tIHBhcmVudHMsIGlkZW50 aXR5IHNlcXVlbmNlcyBpbiB0aGUgc2FtZSBzY2hlbWEpLCB3aGlsZSBjcm9zcy1zY2hlbWEKKy0t IHJlZmVyZW5jZXMgYXJlIGtlcHQgcXVhbGlmaWVkIGZvciBjb3JyZWN0bmVzcy4KKy0tCistLSBC YXJlIENSRUFURSBUQUJMRSBmb3IgYW4gb3JkaW5hcnkgdGFibGUuCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsK KworLS0gSU5IRVJJVFMgcGFyZW50IGluIHRoZSBzYW1lIHNjaGVtYSBpcyBlbWl0dGVkIHVucXVh bGlmaWVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2NsYXNzLCAn b3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFf cXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisKKy0tIFBhcnRpdGlvbiBwYXJlbnQgaW4gdGhlIHNhbWUg c2NoZW1hIGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsK KworLS0gQ3Jvc3Mtc2NoZW1hIEZLIHRhcmdldCBrZWVwcyBxdWFsaWZpY2F0aW9uLiAgVGhlICdy ZWZkJyB0YWJsZSBpcyBpbgorLS0gcGd0YmxfZGRsX3Rlc3Q7IHBsYWNlIGFuIEZLIHRhcmdldCBp biBhIGRpZmZlcmVudCBzY2hlbWEgYW5kIHZlcmlmeSBpdAorLS0gc3RheXMgcXVhbGlmaWVkIGV2 ZW4gd2l0aCBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxf b3RoZXI7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX290aGVyLnBhcmVudCAoaWQgaW50IFBSSU1B UlkgS0VZKTsKK0NSRUFURSBUQUJMRSB4c2NoZW1hX2ZrICgKKyAgICBpZCAgaW50IFBSSU1BUlkg S0VZLAorICAgIHBpZCBpbnQgUkVGRVJFTkNFUyBwZ3RibF9kZGxfb3RoZXIucGFyZW50CispOwor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd4c2NoZW1hX2ZrJzo6cmVnY2xhc3MsICdv d25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9x dWFsaWZpZWQnLCAnZmFsc2UnKTsKKworLS0gSWRlbnRpdHkgY29sdW1uIHdpdGggYSBjdXN0b20g c2VxdWVuY2UgbmFtZSBpbiB0aGUgc2FtZSBzY2hlbWEgaXMKKy0tIGVtaXR0ZWQgdW5xdWFsaWZp ZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkX2N1c3RvbSc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hl bWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisKKy0tIFJvdW5kLXRyaXA6IHdpdGggc2NoZW1hX3F1 YWxpZmllZD1mYWxzZSwgYWZ0ZXIgU0VUIHNlYXJjaF9wYXRoIHRoZQorLS0gRERMIGNhbiBiZSBy ZXBsYXllZCBpbnRvIGEgZGlmZmVyZW50IHRhcmdldCBzY2hlbWEuCitDUkVBVEUgU0NIRU1BIHBn dGJsX2RkbF9yZXBsYXk7CitETyAkJAorREVDTEFSRQorICAgIHN0bXQgdGV4dDsKK0JFR0lOCisg ICAgU0VUIExPQ0FMIHNlYXJjaF9wYXRoID0gcGd0YmxfZGRsX3JlcGxheTsKKyAgICBGT1Igc3Rt dCBJTgorICAgICAgICBTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2Rk bF90ZXN0LmJhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKSBBUyBsaW5lCisgICAg TE9PUAorICAgICAgICBFWEVDVVRFIHN0bXQ7CisgICAgRU5EIExPT1A7CitFTkQgJCQ7CitTRUxF Q1QgcmVsbmFtZXNwYWNlOjpyZWduYW1lc3BhY2U6OnRleHQsIHJlbG5hbWUKK0ZST00gcGdfY2xh c3MgV0hFUkUgb2lkID0gJ3BndGJsX2RkbF9yZXBsYXkuYmFzaWMnOjpyZWdjbGFzczsKK0RST1Ag U0NIRU1BIHBndGJsX2RkbF9yZXBsYXkgQ0FTQ0FERTsKK0RST1AgVEFCTEUgeHNjaGVtYV9mazsK K0RST1AgU0NIRU1BIHBndGJsX2RkbF9vdGhlciBDQVNDQURFOworCistLSBMb2NhbGx5LWRlY2xh cmVkIENIRUNLIG9uIGEgcGFydGl0aW9uIGNoaWxkIGhhcyBubyBpbmxpbmUgY29sdW1uCistLSBs aXN0IHRvIGxpdmUgaW4gKFBBUlRJVElPTiBPRiBmb3JtKSwgc28gaXQgbXVzdCBjb21lIG91dCBh cyBhCistLSBzZXBhcmF0ZSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgc3RhdGVtZW50 LgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9jaGsgKGlkIGludCwgdmFsIGludCkgUEFSVElUSU9OIEJZ IFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGFydGVkX2Noa19jaGlsZCBQQVJUSVRJT04gT0Yg cGFydGVkX2NoaworICAgIChDT05TVFJBSU5UIGNoa19pbmxpbmUgQ0hFQ0sgKHZhbCA+IDApKQor ICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3BhcnRlZF9jaGtfY2hpbGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7 CitEUk9QIFRBQkxFIHBhcnRlZF9jaGs7CisKKy0tIEluaGVyaXRhbmNlIGNoaWxkcmVuIG9mIGEg cGFyZW50IHdpdGggYSBnZW5lcmF0ZWQgY29sdW1uIHNob3VsZCBub3QKKy0tIGVtaXQgYW4gQUxU RVIgQ09MVU1OIC4uLiBTRVQgREVGQVVMVCBmb3IgdGhlIGluaGVyaXRlZCBnZW5lcmF0ZWQKKy0t IGNvbHVtbjogdGhlIEdFTkVSQVRFRCBleHByZXNzaW9uIGNhcnJpZXMgZG93biB0aHJvdWdoIGlu aGVyaXRhbmNlLAorLS0gYW5kIFNFVCBERUZBVUxUIHdvdWxkIGZhaWwgYXQgcmVwbGF5IGFnYWlu c3QgYSBnZW5lcmF0ZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIHBhcl9nZW4gKAorICAgIGlkIGlu dCwKKyAgICBnICBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoaWQgKiAyKSBTVE9SRUQKKyk7CitD UkVBVEUgVEFCTEUgY2hfZ2VuICgpIElOSEVSSVRTIChwYXJfZ2VuKTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnY2hfZ2VuJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOwor RFJPUCBUQUJMRSBwYXJfZ2VuIENBU0NBREU7CisKKy0tIFVzZXItbmFtZWQgTk9UIE5VTEwgY29u c3RyYWludCBtdXN0IGJlIGVtaXR0ZWQgaW5saW5lIGFzCistLSAiQ09OU1RSQUlOVCBuYW1lIE5P VCBOVUxMIiBzbyBhIHJlcGxheSBkb2VzIG5vdCBjb2xsaWRlIHdpdGggdGhlCistLSBhdXRvLW5h bWVkIE5PVCBOVUxMIHRoYXQgUG9zdGdyZVNRTCB3b3VsZCBvdGhlcndpc2UgY3JlYXRlIGZyb20g YQorLS0gcGxhaW4gaW5saW5lICJOT1QgTlVMTCIuICBUaGUgY29uc3RyYWludCBsb29wIHNraXBz IHRoZSB1c2VyLW5hbWVkCistLSBlbnRyeSB0byBhdm9pZCBkb3VibGUtZW1pc3Npb24uCitDUkVB VEUgVEFCTEUgbm5fbmFtZWQgKAorICAgIGEgaW50IENPTlNUUkFJTlQgbXlfbm4gTk9UIE5VTEws CisgICAgYiBpbnQgTk9UIE5VTEwKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J25uX25hbWVkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworRFJPUCBUQUJMRSBubl9u YW1lZDsKKworLS0gTG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBvbiBhbiBpbmhlcml0ZWQgY29s dW1uLiAgVGhlIGNvbHVtbiBpdHNlbGYKKy0tIGlzIG9taXR0ZWQgZnJvbSB0aGUgY2hpbGQncyBj b2x1bW4gbGlzdCAoYXR0aXNsb2NhbD1mYWxzZSksIHNvIHRoZQorLS0gdXNlci1uYW1lZCBOT1Qg TlVMTCBtdXN0IGNvbWUgb3V0IHZpYSB0aGUgcG9zdC1DUkVBVEUgY29uc3RyYWludAorLS0gbG9v cCByYXRoZXIgdGhhbiBpbmxpbmUuCitDUkVBVEUgVEFCTEUgbm5fcGFyIChhIGludCk7CitDUkVB VEUgVEFCTEUgbm5fY2ggKGIgaW50KSBJTkhFUklUUyAobm5fcGFyKTsKK0FMVEVSIFRBQkxFIG5u X2NoIEFERCBDT05TVFJBSU5UIG15X25uIE5PVCBOVUxMIGE7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ25uX2NoJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworRFJPUCBU QUJMRSBubl9wYXIgQ0FTQ0FERTsKKworLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBtdXN0IGRy b3AgdGhlIHNjaGVtYSBwcmVmaXggZnJvbSBERUZBVUxUCistLSBleHByZXNzaW9ucyBhbmQgaW5s aW5lIENIRUNLIGJvZGllcyB0aGF0IHJlZmVyZW5jZSBzYW1lLXNjaGVtYQorLS0gb2JqZWN0cyAo c2VxdWVuY2UgdmlhIG5leHR2YWwsIGZ1bmN0aW9uIHZpYSBkaXJlY3QgY2FsbCkuICBUaGlzCist LSByZWxpZXMgb24gdGhlIGRlcGFyc2VyIHJlc3BlY3RpbmcgdGhlIG5hcnJvd2VkIHNlYXJjaF9w YXRoIHJhdGhlcgorLS0gdGhhbiBvbiBzdWJzdHJpbmcgc3RyaXBwaW5nLgorQ1JFQVRFIFNDSEVN QSBwZ3RibF9kZGxfeHJlZjsKK0NSRUFURSBTRVFVRU5DRSBwZ3RibF9kZGxfeHJlZi5teXNlcTsK K0NSRUFURSBGVU5DVElPTiBwZ3RibF9kZGxfeHJlZi5mKGludCkgUkVUVVJOUyBpbnQgTEFOR1VB R0Ugc3FsIElNTVVUQUJMRQorICAgIEFTICdTRUxFQ1QgJDEnOworQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF94cmVmLnQgKAorICAgIGlkICBpbnQgREVGQVVMVCBuZXh0dmFsKCdwZ3RibF9kZGxfeHJl Zi5teXNlcScpLAorICAgIHZhbCBpbnQsCisgICAgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKHBndGJs X2RkbF94cmVmLmYodmFsKSA+IDApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdwZ3RibF9kZGxfeHJlZi50Jzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn c2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3hyZWYg Q0FTQ0FERTsKKworLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBtdXN0IE5PVCBjb3JydXB0IHN0 cmluZyBsaXRlcmFscyB3aG9zZQorLS0gY29udGVudHMgaGFwcGVuIHRvIGNvbnRhaW4gdGhlIHNj aGVtYSBuYW1lIGZvbGxvd2VkIGJ5IGEgZG90LiAgVGhlCistLSBpbi1zdHJpbmcgc3RhdGUgb2Yg dGhlIHByZWZpeCBzdHJpcHBlciBwcmVzZXJ2ZXMgdGhlbSB2ZXJiYXRpbS4KK0NSRUFURSBTQ0hF TUEgcGd0YmxfZGRsX3N0cjsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfc3RyLnAgKGlkIGludCwg bm90ZSB0ZXh0KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwZ3RibF9k ZGxfc3RyLnBjIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfc3RyLnAKKyAgICAoQ09OU1RSQUlOVCBj aGsgQ0hFQ0sgKG5vdGUgPD4gJ3BndGJsX2RkbF9zdHIuc2VjcmV0JykpCisgICAgRk9SIFZBTFVF UyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0 YmxfZGRsX3N0ci5wYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVt YV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9zdHIgQ0FTQ0FE RTsKKworLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBtdXN0IE5PVCBjb3JydXB0IGRvdWJsZS1x dW90ZWQgaWRlbnRpZmllcnMKKy0tIHdob3NlIGNvbnRlbnRzIGhhcHBlbiB0byBjb250YWluIHRo ZSBzY2hlbWEgbmFtZSBmb2xsb3dlZCBieSBhIGRvdAorLS0gKGZvciBleGFtcGxlIGEgY29sdW1u IGxpdGVyYWxseSBuYW1lZCAiPHNjaGVtYT4ud2VpcmQiIGluc2lkZSB0aGF0CistLSBzY2hlbWEp LiAgVGhlIGluLWlkZW50IHN0YXRlIG9mIHRoZSBwcmVmaXggc3RyaXBwZXIgcHJlc2VydmVzIHRo ZW0KKy0tIHZlcmJhdGltLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfcWlkOworQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF9xaWQucCAoaWQgaW50LCAicGd0YmxfZGRsX3FpZC53ZWlyZCIgaW50KQor ICAgIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9xaWQu cGMgUEFSVElUSU9OIE9GIHBndGJsX2RkbF9xaWQucAorICAgIChDT05TVFJBSU5UIGNoayBDSEVD SyAoInBndGJsX2RkbF9xaWQud2VpcmQiID4gMCkpCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBU TyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3FpZC5w Yyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvd25lcicsICdm YWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQn LCAnZmFsc2UnKTsKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9xaWQgQ0FTQ0FERTsKKworLS0gc2No ZW1hX3F1YWxpZmllZD1mYWxzZSB3aGVuIHRoZSBiYXNlIHNjaGVtYSBuYW1lIGl0c2VsZiByZXF1 aXJlcworLS0gcXVvdGluZyAoaXRzIHByZWZpeCBzdGFydHMgd2l0aCAiKS4gIEJvdGggZm9ybXMg b2YgdGhlIHByZWZpeCAtCistLSBiYXJlLWxvd2VyY2FzZSBhbmQgcXVvdGVkIC0gbXVzdCBiZSBz dHJpcHBlZCBmcm9tIG91dGVyCistLSBBTFRFUiBUQUJMRSAvIE9OIC8gQ1JFQVRFIElOREVYIHBy ZWZpeGVzLCB3aGlsZSBpbm5lciBxdW90ZWQKKy0tIGlkZW50aWZpZXJzIHRoYXQgaGFwcGVuIHRv IGJlZ2luIHRoZSBzYW1lIHdheSBtdXN0IGJlIHByZXNlcnZlZC4KK0NSRUFURSBTQ0hFTUEgIlBn VGJsLURkbC1RIjsKK0NSRUFURSBUQUJMRSAiUGdUYmwtRGRsLVEiLiJUIiAoaWQgaW50LCB2YWwg aW50LAorICAgIENPTlNUUkFJTlQgY2hrIENIRUNLICh2YWwgPiAwKSk7CitDUkVBVEUgSU5ERVgg IlRfdmFsX2lkeCIgT04gIlBnVGJsLURkbC1RIi4iVCIgKHZhbCk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJyJQZ1RibC1EZGwtUSIuIlQiJzo6cmVnY2xhc3MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworRFJPUCBTQ0hFTUEg IlBnVGJsLURkbC1RIiBDQVNDQURFOworCistLSBFcnJvcjogbm90IGFuIG9yZGluYXJ5IG9yIHBh cnRpdGlvbmVkIHRhYmxlLgorQ1JFQVRFIFZJRVcgdiBBUyBTRUxFQ1QgMSBBUyB4OworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd2Jzo6cmVnY2xhc3MpOworCitDUkVBVEUgU0VRVUVO Q0UgczsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncyc6OnJlZ2NsYXNzKTsKKwor LS0gTlVMTCBhcmd1bWVudCByZXR1cm5zIG5vIHJvd3MuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoTlVMTCk7CisKKy0tIFVucmVjb2duaXplZCBvcHRpb24uCitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdib2d1cycsICd0cnVlJyk7CisK Ky0tIE9kZCBudW1iZXIgb2YgdmFyaWFkaWMgYXJncy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ3ByZXR0eScpOworCistLSBSb3VuZC10cmlwIHZl cmlmaWNhdGlvbi4gIEZvciBldmVyeSB0ZXN0IHRhYmxlLCBjYXB0dXJlIHRoZSBEREwgdGhlCist LSBmdW5jdGlvbiBlbWl0cywgZHJvcCB0aGUgc2NoZW1hLCByZXBsYXkgZWFjaCB0YWJsZSdzIERE TCBpbgorLS0gZGVwZW5kZW5jeSBvcmRlciwgYW5kIGNvbmZpcm0gdGhhdCBwZ19nZXRfdGFibGVf ZGRsIG9uIHRoZSByZWNyZWF0ZWQKKy0tIHJlbGF0aW9uIG1hdGNoZXMgdGhlIG9yaWdpbmFsIGxp bmUtZm9yLWxpbmUuICBUaGUgZmluYWwgU0VMRUNUIG11c3QKKy0tIHJldHVybiB6ZXJvIHJvd3Mu CitDUkVBVEUgVEVNUCBUQUJMRSBwZ3RibF9kZGxfcnRfb3JpZyAobmFtZSB0ZXh0LCBvcmQgaW50 LCBsaW5lIHRleHQpOworSU5TRVJUIElOVE8gcGd0YmxfZGRsX3J0X29yaWcKK1NFTEVDVCB0Lm5h bWUsIG8ub3JkLCBvLmxpbmUKK0ZST00gKFZBTFVFUworICAgICAgICAoJ2Jhc2ljJyksICgnaWRf Y29scycpLCAoJ2lkX2N1c3RvbScpLCAoJ2dlbl9jb2xzJyksICgnc3RvcmFnZV9jb2xzJyksCisg ICAgICAgICgncmVmZCcpLCAoJ2NvbnMnKSwgKCdpZHhkJyksCisgICAgICAgICgncGFyJyksICgn Y2gnKSwgKCdhdHRvcHQnKSwKKyAgICAgICAgKCdwYXJ0ZWRfcmFuZ2UnKSwgKCdwYXJ0ZWRfcmFu Z2VfMScpLCAoJ3BhcnRlZF9yYW5nZV9kZWYnKSwKKyAgICAgICAgKCdwYXJ0ZWRfaGFzaCcpLCAo J3BhcnRlZF9oYXNoXzAnKSwKKyAgICAgICAgKCdydF9sb2cnKSwgKCdydCcpLAorICAgICAgICAo J3N0eCcpLCAoJ3JscycpLCAoJ3JpX2Z1bGwnKSwgKCdyaV9pZHgnKSwgKCd1bm8nKQorICAgICAp IEFTIHQobmFtZSksCisgICAgIExBVEVSQUwgcGdfZ2V0X3RhYmxlX2RkbCgoJ3BndGJsX2RkbF90 ZXN0LicgfHwgdC5uYW1lKTo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnb3duZXInLCAnZmFsc2UnKSBXSVRIIE9SRElOQUxJVFkgbyhsaW5lLCBvcmQpOworCitETyAk JAorREVDTEFSRQorICAgIHRhYmxlcyBDT05TVEFOVCB0ZXh0W10gOj0gQVJSQVlbCisgICAgICAg ICdiYXNpYycsICdpZF9jb2xzJywgJ2lkX2N1c3RvbScsICdnZW5fY29scycsICdzdG9yYWdlX2Nv bHMnLAorICAgICAgICAncmVmZCcsICdjb25zJywgJ2lkeGQnLAorICAgICAgICAncGFyJywgJ2No JywgJ2F0dG9wdCcsCisgICAgICAgICdwYXJ0ZWRfcmFuZ2UnLCAncGFydGVkX3JhbmdlXzEnLCAn cGFydGVkX3JhbmdlX2RlZicsCisgICAgICAgICdwYXJ0ZWRfaGFzaCcsICdwYXJ0ZWRfaGFzaF8w JywKKyAgICAgICAgJ3J0X2xvZycsICdydCcsCisgICAgICAgICdzdHgnLCAncmxzJywgJ3JpX2Z1 bGwnLCAncmlfaWR4JywgJ3VubycKKyAgICBdOworICAgIHQgdGV4dDsKKyAgICBzdG10IHRleHQ7 CitCRUdJTgorICAgIERST1AgU0NIRU1BIHBndGJsX2RkbF90ZXN0IENBU0NBREU7CisgICAgQ1JF QVRFIFNDSEVNQSBwZ3RibF9kZGxfdGVzdDsKKyAgICBGT1JFQUNIIHQgSU4gQVJSQVkgdGFibGVz IExPT1AKKyAgICAgICAgRk9SIHN0bXQgSU4KKyAgICAgICAgICAgIFNFTEVDVCBsaW5lIEZST00g cGd0YmxfZGRsX3J0X29yaWcgV0hFUkUgbmFtZSA9IHQgT1JERVIgQlkgb3JkCisgICAgICAgIExP T1AKKyAgICAgICAgICAgIEVYRUNVVEUgc3RtdDsKKyAgICAgICAgRU5EIExPT1A7CisgICAgRU5E IExPT1A7CitFTkQgJCQ7CisKK1dJVEggYWZ0ZXJfZGRsIEFTICgKKyAgICBTRUxFQ1QgdC5uYW1l LCBvLm9yZCwgby5saW5lCisgICAgRlJPTSAoU0VMRUNUIERJU1RJTkNUIG5hbWUgRlJPTSBwZ3Ri bF9kZGxfcnRfb3JpZykgQVMgdCwKKyAgICAgICAgIExBVEVSQUwgcGdfZ2V0X3RhYmxlX2RkbCgo J3BndGJsX2RkbF90ZXN0LicgfHwgdC5uYW1lKTo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJykgV0lUSCBPUkRJTkFMSVRZIG8obGlu ZSwgb3JkKQorKQorKFNFTEVDVCAnbWlzc2luZy1pbi1jb3B5JyBBUyBraW5kLCBuYW1lLCBvcmQs IGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZworIEVYQ0VQVAorIFNFTEVDVCAnbWlzc2luZy1p bi1jb3B5JywgbmFtZSwgb3JkLCBsaW5lIEZST00gYWZ0ZXJfZGRsKQorVU5JT04gQUxMCisoU0VM RUNUICdleHRyYS1pbi1jb3B5JyBBUyBraW5kLCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBhZnRlcl9k ZGwKKyBFWENFUFQKKyBTRUxFQ1QgJ2V4dHJhLWluLWNvcHknLCBuYW1lLCBvcmQsIGxpbmUgRlJP TSBwZ3RibF9kZGxfcnRfb3JpZykKK09SREVSIEJZIGtpbmQsIG5hbWUsIG9yZDsKKworLS0gQ2xl YW51cC4KK0RST1AgU0NIRU1BIHBndGJsX2RkbF90ZXN0IENBU0NBREU7Ci0tIAoyLjUxLjAKCg== --0000000000007a1ac60654d1bbe7--