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 1we9QP-004b7y-0y for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jun 2026 10:41:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1we9QO-002gXQ-0f for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jun 2026 10:41:12 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1we9QN-002gXG-23 for pgsql-hackers@lists.postgresql.org; Mon, 29 Jun 2026 10:41:11 +0000 Received: from mail-ed1-x530.google.com ([2a00:1450:4864:20::530]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1we9QF-00000000lwJ-1QLA for pgsql-hackers@lists.postgresql.org; Mon, 29 Jun 2026 10:41:05 +0000 Received: by mail-ed1-x530.google.com with SMTP id 4fb4d7f45d1cf-693c69b97e7so6050563a12.2 for ; Mon, 29 Jun 2026 03:41:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782729662; cv=none; d=google.com; s=arc-20260327; b=bgMuGXVFQOdaIr32vaUOBCL1vqrkYb2sXE5a31bx75euqXt1RM7GrHm+LgTCmumm/x /vcRJbv0kGf4WjOG/ZHUv9oUaiXzPPjNyGzA+paPKqVnSu/syST30NnLzouC+77IePqO d1t/+dfhxIoHeE1z2bd8QiY8Z7tbXsn3f+VStMEE/Z75fyESgQ92m5X4kNnkxVug+WfE FadCK2VC/LHcnPO2TDLAE1KYRICn5U3kY/YJnerd9b9iddf6Ca2SHWTla3NudqmbAt7f s8idAXEAUjgvjdA1VoFDxT3F06HzKPj5DAGmCHbIv6VFXhOFYWEwRaUVZl//07h4fuAs UNnQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=0SYS2HP63UfMSPg4TtRK90tr5hgzJ/gB3ESKWnznbKI=; fh=voMueszrVpFqnJJtWzMp0Najac8EkXZQAsLylYWD2Uk=; b=qvOx149mKR9IMXEKzryrNaz/Urr3u0RB0yPTCqrXRGoeaFfNU4il1ulD7GzJe7IPRE 4SQHfKxx9hf6BcyfmDdNWj6kpQiR+Ybnr9PS4gAjjjDrV6zBMdoaHZ7VDMtrO3wrwKTA O9ynTNimq0iDkHV1X0PF1V6YQrE/WGVOvDbL+cd2P5GK3DRpjw7n+nbmc/4viZB2VMVR tsqOUB6WjRrFJGcdITk/xprmUaRPtrJEgAOkubzx9Fy9Ed/o1gNlWB04i3Nvpaj4s+Bx +lBBuJyLRjrOfJ3C82YfG4v5MvVY4OGO3MFyguop04/UoHpXpjXSPn4oXjjg1sxMzpRm LL/Q==; 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=1782729662; x=1783334462; 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=0SYS2HP63UfMSPg4TtRK90tr5hgzJ/gB3ESKWnznbKI=; b=OvPRe6kKnaVQYLZrAwaOrD2nIb6JLWPdnfdwEqSmGDThtd+hL57fpcIM0PREz7D/nk i/RiiXsW75hXlTjIu00itq8+hFYoSB+ScZ5yc4dsbS0n+oThxQg1GcSFmBfORdQ4MDMH 4e+nnjJ4ZkiWBu75ZXCXhIvWztxm++vCGUxeMobCFf7TasBixUZbAV8ZbQKYsfO+vdab CL73O5Em23wkUyQZSGCH2ZIJuZ4VQGMBfq/RWNBGOT3mWh2einNwd8UudoBjsMArLI3f 69MVsLbTrRU4RT1Q0lE/q4W7yP5KSFTCAM9URbJT4Srx/GH2QZzFhGZXP+87kW8Rxaww kzlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782729662; x=1783334462; 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=0SYS2HP63UfMSPg4TtRK90tr5hgzJ/gB3ESKWnznbKI=; b=FBlV6E4O4P4ibv22ec6eoEBUT94kt315WzD1CePVM7Ny0FeiC7hkiyGdS3/4Nurjro ienbwO4yOgpuatq9kakPaiOdt1iDfUbm8ymC6fXv3nTyolhHhULwmQU8XBHv2IPs9gi8 npxYMJ++RChgzeVE8V2fICNw3JM6LwH0ierm/ZvMzp+g0xZdRK/Fpi8l1Oe9iDxDZSll IozFq7cG3dsSbkQj5pizaQYRI/4ABKanLhzXe1QjZ80472wco+ZmCIvYDZorJQHyjgP7 udtCasBPeRkcMXYAl0Kx16nKWHk8loUd6TlECh27t56H0o3wzWbLfNDeTPlZiV9sWvgR 2LvQ== X-Gm-Message-State: AOJu0Yzuhq1JvNSt6LmpXJxy9Ol45D8qtWt0w6m/+99zjWW8c/luEzt3 EsGh0wVIWxnUj8jxquhmDp9HEM2C/EeffTeoBB//VqupGhUrjAZBeTfo85yE12EC7WyXLGRpYpw pZlSYipU5Bre3XvXXAbVtW8UOvI/oMbAWEH8dMLkt X-Gm-Gg: AfdE7cniQeXOhQ43d0FkSu3zISXNSnEvXwoQ4Z65Y6wbuFlQv9HOOXPiQ4zV5X/j3FB 4nHXJQJlSE0BLncBVJlKtmf3aWRbsDP+VCpbeHJ12/09E4WcoWdrzdGifauEMScqi7ZxgePbMPy gkiLg14c35R67TB+eo5spg0Pi423ygMGZbdmMATQ8tsAg5klu5y6wTZIohh6B8Xmj6nYBDpaDKa BKhlN+atJgOkFKswLajr7XTDZeVm6QMJwqeY8nQ+che7MqlRzW5OvdRffkr1gSHpBFcouH7xZ4= X-Received: by 2002:a17:907:969f:b0:bee:ac9b:9abc with SMTP id a640c23a62f3a-c1205ea96b2mr819821066b.22.1782729661579; Mon, 29 Jun 2026 03:41:01 -0700 (PDT) MIME-Version: 1.0 References: <983C7B03-D9C3-4F15-8913-7616EC5E6414@gmail.com> <20260623.162104.775158751399277188.horikyota.ntt@gmail.com> In-Reply-To: From: Akshay Joshi Date: Mon, 29 Jun 2026 16:10:47 +0530 X-Gm-Features: AVVi8CcH7NweMYALa4UHuUmSEtwW39YXAaEoSN9hKjGCJYrcVmuYUepNFg87-cU Message-ID: Subject: Re: [PATCH] Add pg_get_table_ddl() to reconstruct CREATE TABLE statements To: Rui Zhao Cc: pgsql-hackers@lists.postgresql.org, marcos@f10.com.br, horikyota.ntt@gmail.com, li.evan.chao@gmail.com, Zsolt Parragi Content-Type: multipart/mixed; boundary="000000000000360d2306556218a5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000360d2306556218a5 Content-Type: multipart/alternative; boundary="000000000000360d2206556218a3" --000000000000360d2206556218a3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Jun 28, 2026 at 10:14=E2=80=AFPM Rui Zhao wr= ote: > Hi Akshay, > > Nice patch -- server-side CREATE TABLE reconstruction is something we wan= t > in > production. I tested v11 on current master and it round-trips correctly > across the documented coverage, including the recent grammar (VIRTUAL > columns, NOT ENFORCED, temporal WITHOUT OVERLAPS / PERIOD) and state set > later via ALTER. A few comments: > > 1. Real bug in schema_qualified =3D> false. strip_schema_prefix() strips = the > base prefix anywhere in code position with no token-boundary check, so a > cross-schema name whose schema ends with the base schema's name gets > mangled: > > postgres=3D# CREATE SCHEMA xs; > CREATE SCHEMA > postgres=3D# CREATE TABLE xs.reftbl(id int PRIMARY KEY); > CREATE TABLE > postgres=3D# CREATE SCHEMA s; > CREATE SCHEMA > postgres=3D# CREATE TABLE s.orders(id int PRIMARY KEY, ref int > REFERENCES xs.reftbl(id)); > CREATE TABLE > postgres=3D# SELECT d FROM > pg_get_table_ddl('s.orders'::regclass,'schema_qualified','false') d; > d > > -------------------------------------------------------------------------= -------------------- > CREATE TABLE orders (id integer NOT NULL, ref integer); > ALTER TABLE orders OWNER TO postgres; > ALTER TABLE orders ADD CONSTRAINT orders_pkey PRIMARY KEY (id); > ALTER TABLE orders ADD CONSTRAINT orders_ref_fkey FOREIGN KEY (ref) > REFERENCES xreftbl(id); > (4 rows) > > The last FK line says REFERENCES xreftbl(id); it should be xs.reftbl(id), > and the result doesn't replay. Gating the match on a token boundary fixes > it -- though see (2), which would remove this code path (and the bug) > entirely. > Fixed. > > 2. Bigger picture: is schema_qualified needed at all? None of the existin= g > pg_get_*def / pg_get_*ddl functions have such a knob, so this would be th= e > lone exception. The established convention is to let search_path decide > (generate_relation_name): pg_get_viewdef and pg_get_constraintdef already > work that way, and pg_get_indexdef supports it too via > pg_get_indexdef(idx, 0, true) (the PRETTYFLAG_SCHEMA code path). It is > genuinely what we want in production -- the caller > controls qualification through search_path. Set it to the table's schema > for > unqualified output, or to pg_catalog (or '') for fully-qualified > schema.table; pg_dump itself dumps under an empty search_path > (ALWAYS_SECURE_SEARCH_PATH_SQL) for exactly this reason. Following the > convention would also drop the option and the strip_schema_prefix code (a= nd > this bug). > > That last point matters: there's no robust way to strip a schema prefix o= ut > of already-generated SQL by text processing. Doing it safely means > re-tokenizing arbitrary SQL (string literals, quoted identifiers, dollar > quotes, comments, casts, operators, ...), and strip_schema_prefix is a > hand-rolled partial scanner of exactly that. It shows -- it has already > needed several over-stripping fixes during review (the base name appearin= g > inside a string literal, and inside a quoted identifier), and the > token-boundary case in (1) is yet another. Deciding qualification at > generation time (generate_relation_name) avoids the whole class: the > backend's real deparser already gets this right, rather than a post-hoc > string pass trying to re-derive it. > Done. strip_schema_prefix and append_stripped_stmt are gone. Instead of post-processing, I added four thin wrappers in ruleutils.c. Let the deparser decide qualification at generation time: - pg_get_indexdef_ddl passes PRETTYFLAG_SCHEMA to the worker, enabling generate_relation_name instead of generate_qualified_relation_name. - pg_get_ruledef_ddl =E2=80=94 same flag. - pg_get_constraintdef_body =E2=80=94 returns body only (FK targets already= use generate_relation_name); emit_local_constraints now builds the ALTER TABLE ctx->qualname ADD CONSTRAINT prefix itself. - pg_get_statisticsobjdef_ddl =E2=80=94 uses StatisticsObjIsVisible() to qu= alify the statistics object name *The schema_qualified=3Dfalse path still narrows search_path to the base schema, which is what makes all four helpers emit unqualified names for same-schema objects. The option is kept for per-call convenience.* > 3. typedefs.list is missing TableDdlContext and LocalNotNullEntry, so > pgindent leaves the "Type * var" pointer spacing in ~30 places -- for > example the forward declarations at ddlutils.c:226-237: > > static void append_stmt(TableDdlContext * ctx); > > There is also a stale comment at ddlutils.c:1830 in append_column_defs(): > inherited columns are described as "emitted by the INHERITS clause (once > implemented)", but INHERITS is implemented now. > > 4. Related to (2): a temporary table's default output qualifies it with t= he > session-private pg_temp_NN schema (e.g. CREATE TEMPORARY TABLE pg_temp_3.= t > ...), which won't replay anywhere else. A reconstructed temp table should > just be CREATE TEMPORARY TABLE t (...) -- the TEMPORARY keyword already > puts > it in pg_temp, so the schema name should never be emitted. This also fall= s > out for free under the search_path convention in (2): pg_temp is always i= n > the effective search_path, so the table is visible and wouldn't be > qualified > in the first place. > > 5. The commit message is out of sync with the code and func-info.sgml on > the > option interface: it still says "include and exclude" and lists plural ki= nd > names (indexes, foreign_keys, triggers, policies, partitions), whereas th= e > code and docs use only/except and singular names (index, foreign_key, > trigger, policy, partition). Looks like a leftover from the > include/exclude -> only/except rename. (FWIW on the naming itself, > include/exclude is the more common convention for this kind of list > parameter -- pg_dump has --exclude-table/-schema/-extension, etc. -- whil= e > only/except reads more like the SQL keywords.) > Fixed 3, 4 and 5. The v12 patch is ready for review/test. > > Otherwise it looks good. > > Thanks, > Rui > --000000000000360d2206556218a3 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Sun, Jun 28,= 2026 at 10:14=E2=80=AFPM Rui Zhao <zhaorui126@gmail.com> wrote:
Hi Akshay,

Nice patch -- server-side CREATE TABLE reconstruction is something we want = in
production. I tested v11 on current master and it round-trips correctly
across the documented coverage, including the recent grammar (VIRTUAL
columns, NOT ENFORCED, temporal WITHOUT OVERLAPS / PERIOD) and state set later via ALTER. A few comments:

1. Real bug in schema_qualified =3D> false. strip_schema_prefix() strips= the
base prefix anywhere in code position with no token-boundary check, so a cross-schema name whose schema ends with the base schema's name gets mangled:

postgres=3D# CREATE SCHEMA xs;
CREATE SCHEMA
postgres=3D# CREATE TABLE xs.reftbl(id int PRIMARY KEY);
CREATE TABLE
postgres=3D# CREATE SCHEMA s;
CREATE SCHEMA
postgres=3D# CREATE TABLE s.orders(id int PRIMARY KEY, ref int
REFERENCES xs.reftbl(id));
CREATE TABLE
postgres=3D# SELECT d FROM
pg_get_table_ddl('s.orders'::regclass,'schema_qualified',&#= 39;false') d;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 d
---------------------------------------------------------------------------= ------------------
=C2=A0CREATE TABLE orders (id integer NOT NULL, ref integer);
=C2=A0ALTER TABLE orders OWNER TO postgres;
=C2=A0ALTER TABLE orders ADD CONSTRAINT orders_pkey PRIMARY KEY (id);
=C2=A0ALTER TABLE orders ADD CONSTRAINT orders_ref_fkey FOREIGN KEY (ref) REFERENCES xreftbl(id);
(4 rows)

The last FK line says REFERENCES xreftbl(id); it should be xs.reftbl(id), and the result doesn't replay. Gating the match on a token boundary fix= es
it -- though see (2), which would remove this code path (and the bug) entir= ely.

=C2=A0 =C2=A0Fixed.=C2=A0

2. Bigger picture: is schema_qualified needed at all? None of the existing<= br> pg_get_*def / pg_get_*ddl functions have such a knob, so this would be the<= br> lone exception. The established convention is to let search_path decide
(generate_relation_name): pg_get_viewdef and pg_get_constraintdef already work that way, and pg_get_indexdef supports it too via
pg_get_indexdef(idx, 0, true) (the PRETTYFLAG_SCHEMA code path). It is
genuinely what we want in production -- the caller
controls qualification through search_path. Set it to the table's schem= a for
unqualified output, or to pg_catalog (or '') for fully-qualified schema.table; pg_dump itself dumps under an empty search_path
(ALWAYS_SECURE_SEARCH_PATH_SQL) for exactly this reason. Following the
convention would also drop the option and the strip_schema_prefix code (and=
this bug).

That last point matters: there's no robust way to strip a schema prefix= out
of already-generated SQL by text processing. Doing it safely means
re-tokenizing arbitrary SQL (string literals, quoted identifiers, dollar quotes, comments, casts, operators, ...), and strip_schema_prefix is a
hand-rolled partial scanner of exactly that. It shows -- it has already
needed several over-stripping fixes during review (the base name appearing<= br> inside a string literal, and inside a quoted identifier), and the
token-boundary case in (1) is yet another. Deciding qualification at
generation time (generate_relation_name) avoids the whole class: the
backend's real deparser already gets this right, rather than a post-hoc=
string pass trying to re-derive it.

=C2= =A0Done. strip_schema_prefix a= nd append_stripped_stmt are gone. Instead of post-processing, I added four = thin wrappers in ruleutils.c. Let the deparser decide qualification at gene= ration time:=C2=A0
- pg_get_indexdef_ddl passes PRETTYFLAG_SCHEMA to the work= er, enabling generate_relation_name instead of generate_qualified_relation_= name.
- pg_get_ruledef_ddl =E2=80=94 same flag.
- pg_ge= t_constraintdef_body =E2=80=94 returns body only (FK targets already use ge= nerate_relation_name); emit_local_constraints now builds the ALTER TABLE ct= x->qualname ADD CONSTRAINT prefix itself.
- pg_get_statisticso= bjdef_ddl =E2=80=94 uses StatisticsObjIsVisible() to qualify the statistics= object name =C2=A0 =C2=A0=C2=A0
The schema_qualified=3Dfalse = path still narrows search_path to the base schema, which is what makes all = four helpers emit unqualified names for same-schema objects. The option is = kept for per-call convenience.
3. typedefs.list is missing TableDdlContext and LocalNotNullEntry, so
pgindent leaves the "Type * var" pointer spacing in ~30 places --= for
example the forward declarations at ddlutils.c:226-237:

=C2=A0 =C2=A0 static void append_stmt(TableDdlContext * ctx);

There is also a stale comment at ddlutils.c:1830 in append_column_defs(): inherited columns are described as "emitted by the INHERITS clause (on= ce
implemented)", but INHERITS is implemented now.

4. Related to (2): a temporary table's default output qualifies it with= the
session-private pg_temp_NN schema (e.g. CREATE TEMPORARY TABLE pg_temp_3.t<= br> ...), which won't replay anywhere else. A reconstructed temp table shou= ld
just be CREATE TEMPORARY TABLE t (...) -- the TEMPORARY keyword already put= s
it in pg_temp, so the schema name should never be emitted. This also falls<= br> out for free under the search_path convention in (2): pg_temp is always in<= br> the effective search_path, so the table is visible and wouldn't be qual= ified
in the first place.

5. The commit message is out of sync with the code and func-info.sgml on th= e
option interface: it still says "include and exclude" and lists p= lural kind
names (indexes, foreign_keys, triggers, policies, partitions), whereas the<= br> code and docs use only/except and singular names (index, foreign_key,
trigger, policy, partition). Looks like a leftover from the
include/exclude -> only/except rename. (FWIW on the naming itself,
include/exclude is the more common convention for this kind of list
parameter -- pg_dump has --exclude-table/-schema/-extension, etc. -- while<= br> only/except reads more like the SQL keywords.)

=C2=A0 =C2=A0Fixed 3, 4 and 5.=C2=A0

=C2=A0 =C2= =A0The v12 patch is ready for review/test.

Otherwise it looks good.

Thanks,
Rui
--000000000000360d2206556218a3-- --000000000000360d2306556218a5 Content-Type: application/octet-stream; name="v12-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Disposition: attachment; filename="v12-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqz377up0 RnJvbSBjMWYwMzY4NWZlOTNlM2MwMzNjMDkzNWVlYTk5ODk2NDBhOWY4YWZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBUdWUsIDIgSnVuIDIwMjYgMTQ6MTg6NDAgKzA1MzAKU3ViamVjdDogW1BB VENIIHYxMl0gQWRkIHBnX2dldF90YWJsZV9kZGwoKSB0byByZWNvbnN0cnVjdCBDUkVBVEUgVEFC TEUKIHN0YXRlbWVudHMKClRoZSBmdW5jdGlvbiByZWNvbnN0cnVjdHMgdGhlIENSRUFURSBUQUJM RSBzdGF0ZW1lbnQgZm9yIGFuIG9yZGluYXJ5IG9yCnBhcnRpdGlvbmVkIHRhYmxlLCBmb2xsb3dl ZCBieSB0aGUgQUxURVIgVEFCTEUgLyBDUkVBVEUgSU5ERVggLwpDUkVBVEUgUlVMRSAvIENSRUFU RSBTVEFUSVNUSUNTIHN0YXRlbWVudHMgbmVlZGVkIHRvIHJlc3RvcmUgaXRzIGZ1bGwKZGVmaW5p dGlvbi4gIEVhY2ggc3RhdGVtZW50IGlzIHJldHVybmVkIGFzIGEgc2VwYXJhdGUgcm93LgoKU3Vw cG9ydGVkIHBlci1jb2x1bW4gZmVhdHVyZXM6IGRhdGEgdHlwZSB3aXRoIHR5cGUgbW9kaWZpZXJz LCBDT0xMQVRFLApTVE9SQUdFLCBDT01QUkVTU0lPTiAocGdseiAvIGx6NCksIEdFTkVSQVRFRCBB TFdBWVMgQVMgKGV4cHIpClNUT1JFRC9WSVJUVUFMLCBHRU5FUkFURUQgQUxXQVlTfEJZIERFRkFV TFQgQVMgSURFTlRJVFkgKHdpdGggc2VxdWVuY2UKb3B0aW9ucyksIERFRkFVTFQsIE5PVCBOVUxM LCBhbmQgcGVyLWNvbHVtbiBhdHRvcHRpb25zIGVtaXR0ZWQgYXMKQUxURVIgQ09MVU1OIFNFVCAo Li4uKS4KClN1cHBvcnRlZCB0YWJsZS1sZXZlbCBmZWF0dXJlczogVU5MT0dHRUQsIElOSEVSSVRT LCBQQVJUSVRJT04gQlkgKFJBTkdFCi8gTElTVCAvIEhBU0ggcGFyZW50cyksIFBBUlRJVElPTiBP RiBwYXJlbnQgRk9SIFZBTFVFUyAoRlJPTS9UTywgV0lUSAptb2R1bHVzL3JlbWFpbmRlciwgREVG QVVMVCksIFVTSU5HIHRhYmxlIGFjY2VzcyBtZXRob2QsIFdJVEgKKHJlbG9wdGlvbnMpLCBUQUJM RVNQQUNFLCBhbmQgaW5saW5lIENIRUNLIGNvbnN0cmFpbnRzIGluIHRoZQpDUkVBVEUgVEFCTEUg Ym9keS4KClN1cHBvcnRlZCBzdWItb2JqZWN0cyAocmUtdXNpbmcgZXhpc3RpbmcgZGVwYXJzZSBo ZWxwZXJzIGZyb20KcnVsZXV0aWxzLmMpOiBpbmRleGVzIHZpYSBwZ19nZXRfaW5kZXhkZWZfZGRs LCBjb25zdHJhaW50cwooUFJJTUFSWSBLRVksIFVOSVFVRSwgRk9SRUlHTiBLRVksIEVYQ0xVREUs IG5hbWVkIE5PVCBOVUxMKSB2aWEKcGdfZ2V0X2NvbnN0cmFpbnRkZWZfYm9keSwgcnVsZXMgdmlh IHBnX2dldF9ydWxlZGVmX2RkbCwgZXh0ZW5kZWQKc3RhdGlzdGljcyB2aWEgcGdfZ2V0X3N0YXRp c3RpY3NvYmpkZWZfZGRsLCBSRVBMSUNBIElERU5USVRZCk5PVEhJTkcvRlVMTC9VU0lORyBJTkRF WCwgQUxURVIgVEFCTEUgRU5BQkxFL0ZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWSwKYW5kIGNoaWxk LWxvY2FsIERFRkFVTFQgb3ZlcnJpZGVzIG9uIGluaGVyaXRhbmNlL3BhcnRpdGlvbiBjaGlsZHJl bi4KRERMIGZvciBwYXJ0aXRpb24gY2hpbGRyZW4gb2YgYSBwYXJ0aXRpb25lZC10YWJsZSBwYXJl bnQgaXMgYXBwZW5kZWQKYWZ0ZXIgdGhlIHBhcmVudCBieSBkZWZhdWx0LgoKT3B0aW9ucyBhcmUg cGFzc2VkIGFzIHZhcmlhZGljIG5hbWUvdmFsdWUgcGFpcnMuICBGb3JtYXR0aW5nIG9wdGlvbnMK YXJlIHByZXR0eSAoYm9vbGVhbiksIG93bmVyIChib29sZWFuLCBjb250cm9scyB0aGUKQUxURVIg VEFCTEUgLi4uIE9XTkVSIFRPIGxpbmUpLCB0YWJsZXNwYWNlIChib29sZWFuLCBjb250cm9scyB0 aGUKVEFCTEVTUEFDRSBjbGF1c2UpLCBhbmQgc2NoZW1hX3F1YWxpZmllZCAoYm9vbGVhbiwgY29u dHJvbHMgd2hldGhlcgp0aGUgdGFyZ2V0IHRhYmxlIGFuZCBzYW1lLXNjaGVtYSBzaWJsaW5nIHJl ZmVyZW5jZXMgYXJlIGVtaXR0ZWQgd2l0aAp0aGVpciBzY2hlbWEgcHJlZml4KS4gIFRlbXBvcmFy eSB0YWJsZXMgYXJlIG5ldmVyIHNjaGVtYS1xdWFsaWZpZWQKcmVnYXJkbGVzcyBvZiBzY2hlbWFf cXVhbGlmaWVkOiB0aGUgVEVNUE9SQVJZIGtleXdvcmQgYWxyZWFkeSBwbGFjZXMKdGhlbSBpbiBw Z190ZW1wLCBhbmQgZW1pdHRpbmcgcGdfdGVtcF9OTi5yZWxuYW1lIHdvdWxkIGJlCm5vbi1yZXBs YXlhYmxlLiAgT2JqZWN0LWNsYXNzIGZpbHRlcmluZyBpcyBleHByZXNzZWQgdGhyb3VnaCB0d28K bXV0dWFsbHktZXhjbHVzaXZlIG9wdGlvbnMsIG9ubHkgYW5kIGV4Y2VwdCwgZWFjaCB0YWtpbmcg YQpjb21tYS1zZXBhcmF0ZWQgbGlzdCBkcmF3biBmcm9tIHRoZSBraW5kIHZvY2FidWxhcnkKe3Rh YmxlLCBpbmRleCwgcHJpbWFyeV9rZXksIHVuaXF1ZSwgY2hlY2ssIGZvcmVpZ25fa2V5LCBleGNs dXNpb24sCnJ1bGUsIHN0YXRpc3RpY3MsIHRyaWdnZXIsIHBvbGljeSwgcmxzLCByZXBsaWNhX2lk ZW50aXR5LCBwYXJ0aXRpb259LgpXaGVuIG9ubHkgaXMgc2V0LCBvbmx5IHRoZSBsaXN0ZWQga2lu ZHMgYXJlIGVtaXR0ZWQ7IHdoZW4gZXhjZXB0IGlzCnNldCwgZXZlcnkga2luZCBleGNlcHQgdGhl IGxpc3RlZCBvbmVzIGlzIGVtaXR0ZWQ7IHdoZW4gbmVpdGhlciBpcwpzZXQsIGV2ZXJ5IGtpbmQg aXMgZW1pdHRlZC4gIFVua25vd24ga2luZCBuYW1lcyByYWlzZSBhbiBlcnJvciBhdApwYXJzZSB0 aW1lLiAgTk9UIE5VTEwgaXMgZGVsaWJlcmF0ZWx5IG5vdCBwYXJ0IG9mIHRoZSB2b2NhYnVsYXJ5 IC0gaXQKaXMgYWx3YXlzIGVtaXR0ZWQgdG8gcHJldmVudCBwcm9kdWNpbmcgc2NoZW1hcyB0aGF0 IHNpbGVudGx5IGFjY2VwdApOVUxMcyB0aGUgc291cmNlIHdvdWxkIGhhdmUgcmVqZWN0ZWQuICBF eGNsdWRpbmcgcHJpbWFyeV9rZXkgb24gYQp0YWJsZSB3aG9zZSBSRVBMSUNBIElERU5USVRZIGlz IFVTSU5HIElOREVYIG9mIHRoZSBwcmltYXJ5IGtleSBpcwpyZWplY3RlZCB1bmxlc3MgcmVwbGlj YV9pZGVudGl0eSBpcyBhbHNvIGV4Y2x1ZGVkLCBzbyB0aGUgZW1pdHRlZCBEREwKbmV2ZXIgcmVm ZXJlbmNlcyBhbiBpbmRleCBpdCBqdXN0IGRyb3BwZWQuCgpEZWZhdWx0IG9taXNzaW9uIGNvbnZl bnRpb246IGV2ZXJ5IG9wdGlvbmFsIGNsYXVzZSBpcyBkcm9wcGVkIHdoZW4gaXRzCnZhbHVlIGVx dWFscyB3aGF0IHRoZSBzeXN0ZW0gd291bGQgcmVhcHBseSBvbiByb3VuZC10cmlwLCBpbmNsdWRp bmcKdHlwZS1kZWZhdWx0IENPTExBVEUsIHBlci10eXBlIFNUT1JBR0UsIHRoZSBhdXRvLWdlbmVy YXRlZCBpZGVudGl0eQpzZXF1ZW5jZSBuYW1lIGFuZCBwYXJhbWV0ZXIgZGVmYXVsdHMsIGhlYXAg YWNjZXNzIG1ldGhvZCwgZGVmYXVsdApSRVBMSUNBIElERU5USVRZLCBkaXNhYmxlZCBSTFMgdG9n Z2xlcywgZW1wdHkgcmVsb3B0aW9ucywgYW5kIHRoZQpkZWZhdWx0IHRhYmxlc3BhY2UuCgpBdXRo b3I6IEFrc2hheSBKb3NoaSA8YWtzaGF5Lmpvc2hpQGVudGVycHJpc2VkYi5jb20+ClJldmlld2Vk LWJ5OiBNYXJjb3MgUGVnb3Jhcm8gPG1hcmNvc0BmMTAuY29tLmJyPgpSZXZpZXdlZC1ieTogWnNv bHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJjb25hLmNvbT4KUmV2aWV3ZWQtYnk6IEt5b3Rh cm8gSG9yaWd1Y2hpIDxob3Jpa3lvdGEubnR0QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IENoYW8g TGkgPGxpLmV2YW4uY2hhb0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBSdWkgWmhhbyA8emhhb3J1 aTEyNkBnbWFpbC5jb20+Ci0tLQogZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwgICAg ICAgICAgICAgIHwgIDEyNCArCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMgICAg ICAgICAgICAgfCAgIDkzICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAg ICAgICAgICB8ICAgMzAgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jICAgICAg ICAgICAgICB8IDIxNTIgKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYyAgICAgICAgICAgICB8ICAgODQgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdf aW5oZXJpdHMuaCAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdCAgICAgICAgICAgICAgIHwgICAgNyArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy90YWJs ZWNtZHMuaCAgICAgICAgICAgICAgfCAgICAzICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGls cy5oICAgICAgICAgICAgICAgICB8ICAgIDQgKwogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0 X3RhYmxlX2RkbC5vdXQgICAgIHwgMTI2NSArKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3Bh cmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAgICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL3Nx bC9wZ19nZXRfdGFibGVfZGRsLnNxbCAgICAgfCAgNzQxICsrKysrKwogc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAgMiArCiAxMyBmaWxlcyBjaGFuZ2Vk LCA0NDk2IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5vdXQKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFibGVfZGRsLnNxbAoKZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sIGIvZG9jL3NyYy9zZ21s L2Z1bmMvZnVuYy1pbmZvLnNnbWwKaW5kZXggNjllZjM4NTdjZmEuLjNhNmFkNjNjNjM0IDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvZnVuYy9mdW5jLWluZm8uc2dtbApAQCAtMzk2MCw2ICszOTYwLDEzMCBAQCBhY2wgICAgICB8 IHtwb3N0Z3Jlcz1hcndkRHh0bS9wb3N0Z3Jlcyxmb289ci9wb3N0Z3Jlc30KICAgICAgICAgaXMg ZmFsc2UsIHRoZSA8bGl0ZXJhbD5PV05FUjwvbGl0ZXJhbD4gY2xhdXNlIGlzIG9taXR0ZWQuCiAg ICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisgICAgICAg PGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJl Ij4KKyAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX2dldF90YWJsZV9k ZGw8L3ByaW1hcnk+CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdf Z2V0X3RhYmxlX2RkbDwvZnVuY3Rpb24+CisgICAgICAgICggPHBhcmFtZXRlcj50YWJsZTwvcGFy YW1ldGVyPiA8dHlwZT5yZWdjbGFzczwvdHlwZT4KKyAgICAgICAgPG9wdGlvbmFsPiwgPGxpdGVy YWw+VkFSSUFESUM8L2xpdGVyYWw+IDxwYXJhbWV0ZXI+b3B0aW9uczwvcGFyYW1ldGVyPgorICAg ICAgICA8dHlwZT50ZXh0W108L3R5cGU+IDwvb3B0aW9uYWw+ICkKKyAgICAgICAgPHJldHVybnZh bHVlPnNldG9mIHRleHQ8L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgUmVjb25zdHJ1Y3RzIHRoZSA8Y29tbWFuZD5DUkVBVEUgVEFCTEU8L2NvbW1h bmQ+IHN0YXRlbWVudCBmb3IgdGhlCisgICAgICAgIHNwZWNpZmllZCBvcmRpbmFyeSBvciBwYXJ0 aXRpb25lZCB0YWJsZSwgZm9sbG93ZWQgYnkgdGhlCisgICAgICAgIDxjb21tYW5kPkFMVEVSIFRB QkxFPC9jb21tYW5kPiwgPGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5kPiwKKyAgICAgICAg PGNvbW1hbmQ+Q1JFQVRFIFJVTEU8L2NvbW1hbmQ+LCBhbmQgPGNvbW1hbmQ+Q1JFQVRFIFNUQVRJ U1RJQ1M8L2NvbW1hbmQ+CisgICAgICAgIHN0YXRlbWVudHMgbmVlZGVkIHRvIHJlY3JlYXRlIHRo ZSB0YWJsZSdzIGNvbHVtbnMsIGNvbnN0cmFpbnRzLAorICAgICAgICBpbmRleGVzLCBydWxlcywg ZXh0ZW5kZWQgc3RhdGlzdGljcywgYW5kIHJvdy1sZXZlbCBzZWN1cml0eSBmbGFncy4KKyAgICAg ICAgSW5oZXJpdGVkIGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzIGFyZSBlbWl0dGVkIGJ5IHRoZSBw YXJlbnQgdGFibGUncworICAgICAgICBEREwgYW5kIGFyZSBub3QgZHVwbGljYXRlZCBvbiBpbmhl cml0YW5jZSBjaGlsZHJlbiBvciBwYXJ0aXRpb25zLgorICAgICAgICBFYWNoIHN0YXRlbWVudCBp cyByZXR1cm5lZCBhcyBhIHNlcGFyYXRlIHJvdy4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBvcHRp b25zIGFyZSBzdXBwb3J0ZWQ6CisgICAgICAgIDxsaXRlcmFsPnByZXR0eTwvbGl0ZXJhbD4gKGJv b2xlYW4pIGZvciBmb3JtYXR0ZWQgb3V0cHV0LAorICAgICAgICA8bGl0ZXJhbD5vd25lcjwvbGl0 ZXJhbD4gKGJvb2xlYW4pIHRvIGluY2x1ZGUgdGhlCisgICAgICAgIDxjb21tYW5kPkFMVEVSIFRB QkxFIC4uLiBPV05FUiBUTzwvY29tbWFuZD4gc3RhdGVtZW50LAorICAgICAgICA8bGl0ZXJhbD50 YWJsZXNwYWNlPC9saXRlcmFsPiAoYm9vbGVhbikgdG8gaW5jbHVkZSB0aGUKKyAgICAgICAgPGxp dGVyYWw+VEFCTEVTUEFDRTwvbGl0ZXJhbD4gY2xhdXNlIG9uIHRoZQorICAgICAgICA8Y29tbWFu ZD5DUkVBVEUgVEFCTEU8L2NvbW1hbmQ+IHN0YXRlbWVudCwgYW5kIHRoZQorICAgICAgICA8bGl0 ZXJhbD5vbmx5PC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+ZXhjZXB0PC9saXRlcmFsPgorICAgICAg ICBvcHRpb25zIGRlc2NyaWJlZCBiZWxvdyBmb3IgZmlsdGVyaW5nIHdoaWNoIG9iamVjdCBjbGFz c2VzIGFyZQorICAgICAgICBlbWl0dGVkLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgVGhlIDxsaXRlcmFsPm9ubHk8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5leGNlcHQ8 L2xpdGVyYWw+CisgICAgICAgIG9wdGlvbnMgZWFjaCB0YWtlIGEgY29tbWEtc2VwYXJhdGVkIGxp c3Qgb2Ygb2JqZWN0LWNsYXNzIGtpbmQKKyAgICAgICAgbmFtZXMgYW5kIGFyZSBtdXR1YWxseSBl eGNsdXNpdmUgKHNwZWNpZnlpbmcgYm90aCByYWlzZXMgYW4KKyAgICAgICAgZXJyb3IpLiAgV2hl biA8bGl0ZXJhbD5vbmx5PC9saXRlcmFsPiBpcyBzZXQsIG9ubHkgdGhlCisgICAgICAgIGxpc3Rl ZCBraW5kcyBhcmUgZW1pdHRlZDsgd2hlbiA8bGl0ZXJhbD5leGNlcHQ8L2xpdGVyYWw+IGlzCisg ICAgICAgIHNldCwgZXZlcnkga2luZCA8ZW1waGFzaXM+ZXhjZXB0PC9lbXBoYXNpcz4gdGhlIGxp c3RlZCBvbmVzIGlzCisgICAgICAgIGVtaXR0ZWQuICBXaGVuIG5laXRoZXIgaXMgc2V0ICh0aGUg ZGVmYXVsdCksIGV2ZXJ5IGtpbmQgaXMKKyAgICAgICAgZW1pdHRlZC4gIFdoaXRlc3BhY2UgYXJv dW5kIGVhY2ggZW50cnkgaXMgaWdub3JlZCBhbmQgbWF0Y2hpbmcKKyAgICAgICAgaXMgY2FzZS1p bnNlbnNpdGl2ZTsgYW4gdW5yZWNvZ25pemVkIGtpbmQgbmFtZSByYWlzZXMgYW4gZXJyb3IuCisg ICAgICAgIFRoZSBraW5kIHZvY2FidWxhcnkgaXMKKyAgICAgICAgPGxpdGVyYWw+dGFibGU8L2xp dGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5pbmRleDwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRl cmFsPnByaW1hcnlfa2V5PC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+dW5pcXVlPC9saXRl cmFsPiwKKyAgICAgICAgPGxpdGVyYWw+Y2hlY2s8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJh bD5mb3JlaWduX2tleTwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPmV4Y2x1c2lvbjwvbGl0 ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPnJ1bGU8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJh bD5zdGF0aXN0aWNzPC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+dHJpZ2dlcjwvbGl0ZXJh bD4sCisgICAgICAgIDxsaXRlcmFsPnBvbGljeTwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFs PnJsczwvbGl0ZXJhbD4gKHRoZQorICAgICAgICA8Y29tbWFuZD5FTkFCTEU8L2NvbW1hbmQ+Lzxj b21tYW5kPkZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTwvY29tbWFuZD4KKyAgICAgICAgdG9nZ2xl cyksCisgICAgICAgIDxsaXRlcmFsPnJlcGxpY2FfaWRlbnRpdHk8L2xpdGVyYWw+LCBhbmQKKyAg ICAgICAgPGxpdGVyYWw+cGFydGl0aW9uPC9saXRlcmFsPiAodGhlIERETCBmb3IgZWFjaCBkaXJl Y3QKKyAgICAgICAgcGFydGl0aW9uIGNoaWxkIG9mIGEgcGFydGl0aW9uZWQtdGFibGUgcGFyZW50 KS4gIFRoZQorICAgICAgICA8bGl0ZXJhbD50YWJsZTwvbGl0ZXJhbD4ga2luZCBncm91cHMgdGhl CisgICAgICAgIDxjb21tYW5kPkNSRUFURSBUQUJMRTwvY29tbWFuZD4gc3RhdGVtZW50IHRvZ2V0 aGVyIHdpdGggdGhlCisgICAgICAgIHJlbGF0ZWQgcGVyLXRhYmxlIDxjb21tYW5kPkFMVEVSIFRB QkxFPC9jb21tYW5kPiBwYXNzZXM6CisgICAgICAgIDxjb21tYW5kPk9XTkVSIFRPPC9jb21tYW5k PiwgY2hpbGQtZGVmYXVsdAorICAgICAgICA8Y29tbWFuZD5TRVQgREVGQVVMVDwvY29tbWFuZD4s IGFuZCBwZXItY29sdW1uCisgICAgICAgIDxjb21tYW5kPlNFVCAoPHJlcGxhY2VhYmxlPmF0dG9w dGlvbnM8L3JlcGxhY2VhYmxlPik8L2NvbW1hbmQ+LgorICAgICAgICA8bGl0ZXJhbD5OT1QgTlVM TDwvbGl0ZXJhbD4gY29uc3RyYWludHMgYXJlIG5vdCBwYXJ0IG9mIHRoZQorICAgICAgICB2b2Nh YnVsYXJ5OyB0aGV5IGFyZSBhbHdheXMgZW1pdHRlZCBhcyBwYXJ0IG9mIHRoZSB0YWJsZSB0bwor ICAgICAgICBhdm9pZCBwcm9kdWNpbmcgc2NoZW1hcyB0aGF0IHNpbGVudGx5IGFjY2VwdAorICAg ICAgICA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiB2YWx1ZXMgdGhlIHNvdXJjZSB3b3VsZCBoYXZl IHJlamVjdGVkLgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIHNlY29uZCBwYXNzIG9mIGEgdHdv LXBhc3Mgc2NoZW1hIGNsb25lIHRoYXQKKyAgICAgICAgYWRkcyBjcm9zcy10YWJsZSBmb3JlaWdu IGtleXMgYWZ0ZXIgZGF0YSBoYXMgbG9hZGVkIGNhbiBiZQorICAgICAgICB3cml0dGVuIGFzCisg ICAgICAgIDxsaXRlcmFsPm9ubHkgPT4gJ2ZvcmVpZ25fa2V5JzwvbGl0ZXJhbD4sIGFuZCB0aGUK KyAgICAgICAgcHViL3N1Yi1zdHlsZSBjbG9uZSB0aGF0IGtlZXBzIGEgcHJpbWFyeSBrZXkgYnV0 IGRyb3BzIGV2ZXJ5CisgICAgICAgIG90aGVyIGNvbnN0cmFpbnQgY2FuIGJlIHdyaXR0ZW4gYXMK KyAgICAgICAgPGxpdGVyYWw+ZXhjZXB0ID0+ICd1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXksZXhj bHVzaW9uJzwvbGl0ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAg ICBXaGVuIHRoZSB0YWJsZSBoYXMKKyAgICAgICAgPGxpdGVyYWw+UkVQTElDQSBJREVOVElUWSBV U0lORyBJTkRFWDwvbGl0ZXJhbD4gYW5kIHRoZQorICAgICAgICA8bGl0ZXJhbD5yZXBsaWNhX2lk ZW50aXR5PC9saXRlcmFsPiBraW5kIGlzIGluIHRoZSBhY3RpdmUKKyAgICAgICAgZmlsdGVyLCB0 aGUga2luZCB0aGF0IGVtaXRzIHRoZSByZWZlcmVuY2VkIGluZGV4CisgICAgICAgICg8bGl0ZXJh bD5wcmltYXJ5X2tleTwvbGl0ZXJhbD4sIDxsaXRlcmFsPnVuaXF1ZTwvbGl0ZXJhbD4sCisgICAg ICAgIDxsaXRlcmFsPmV4Y2x1c2lvbjwvbGl0ZXJhbD4sIG9yIDxsaXRlcmFsPmluZGV4PC9saXRl cmFsPikgbXVzdAorICAgICAgICBhbHNvIGJlIGluIHRoZSBmaWx0ZXIuICBPdGhlcndpc2UgdGhl IGVtaXR0ZWQKKyAgICAgICAgPGNvbW1hbmQ+QUxURVIgVEFCTEUgLi4uIFJFUExJQ0EgSURFTlRJ VFkgVVNJTkcgSU5ERVg8L2NvbW1hbmQ+CisgICAgICAgIHdvdWxkIHJlZmVyZW5jZSBhbiBpbmRl eCB0aGUgc2FtZSBEREwgbmV2ZXIgcHJvZHVjZWQsIGFuZCB0aGUKKyAgICAgICAgZnVuY3Rpb24g cmVwb3J0cyBhbiBlcnJvciBiZWZvcmUgZW1pdHRpbmcgYW55IHN0YXRlbWVudHMuCisgICAgICAg PC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPGxpdGVyYWw+c2NoZW1hX3F1YWxp ZmllZDwvbGl0ZXJhbD4gb3B0aW9uIChib29sZWFuLCBkZWZhdWx0CisgICAgICAgIDxsaXRlcmFs PnRydWU8L2xpdGVyYWw+KSBjb250cm9scyB3aGV0aGVyIHRoZSB0YXJnZXQgdGFibGUncyBvd24K KyAgICAgICAgc2NoZW1hIGlzIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgRERMLiAgV2hlbiBz ZXQgdG8KKyAgICAgICAgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LCB0aGUgdGFibGUgbmFtZSBp cyBlbWl0dGVkIHVucXVhbGlmaWVkCisgICAgICAgIGluIHRoZSA8Y29tbWFuZD5DUkVBVEUgVEFC TEU8L2NvbW1hbmQ+IGFuZCBldmVyeSBzdWJzZXF1ZW50CisgICAgICAgIDxjb21tYW5kPkFMVEVS IFRBQkxFPC9jb21tYW5kPiwgPGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5kPiwKKyAgICAg ICAgPGNvbW1hbmQ+Q1JFQVRFIFJVTEU8L2NvbW1hbmQ+LCBhbmQKKyAgICAgICAgPGNvbW1hbmQ+ Q1JFQVRFIFNUQVRJU1RJQ1M8L2NvbW1hbmQ+IHN0YXRlbWVudC4gIFJlZmVyZW5jZXMgdG8KKyAg ICAgICAgb2JqZWN0cyBpbiB0aGUgc2FtZSBzY2hlbWEgYXMgdGhlIHRhcmdldCB0YWJsZSAoaW5o ZXJpdGFuY2UKKyAgICAgICAgcGFyZW50cywgcGFydGl0aW9uIHBhcmVudHMsIGlkZW50aXR5IHNl cXVlbmNlcywgYW5kIGFueQorICAgICAgICBzYW1lLXNjaGVtYSBvYmplY3QgdGhlIGRlcGFyc2Ug aGVscGVycyBoYXBwZW4gdG8gbWVudGlvbikgYXJlCisgICAgICAgIGFsc28gZW1pdHRlZCB1bnF1 YWxpZmllZCwgc28gdGhlIHNjcmlwdCBjYW4gYmUgcmVwbGF5ZWQgdW5kZXIgYQorICAgICAgICBk aWZmZXJlbnQgPHZhcm5hbWU+c2VhcmNoX3BhdGg8L3Zhcm5hbWU+IHRvIHJlY3JlYXRlIHRoZSB0 YWJsZQorICAgICAgICBpbiBhbm90aGVyIHNjaGVtYS4gIENyb3NzLXNjaGVtYSByZWZlcmVuY2Vz IChmb3IgZXhhbXBsZSBhCisgICAgICAgIGZvcmVpZ24ga2V5IHRhcmdldCBpbiBhIGRpZmZlcmVu dCBzY2hlbWEpIHJlbWFpbiBxdWFsaWZpZWQgZm9yCisgICAgICAgIGNvcnJlY3RuZXNzLgorICAg ICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgQWxsIHRocmVlIGZvcm1zIG9mIDxj b21tYW5kPkNSRUFURSBUQUJMRTwvY29tbWFuZD4gYXJlIHN1cHBvcnRlZDoKKyAgICAgICAgdGhl IG9yZGluYXJ5IGNvbHVtbi1saXN0IGZvcm0sIHRoZSB0eXBlZC10YWJsZSBmb3JtCisgICAgICAg ICg8bGl0ZXJhbD5PRiA8cmVwbGFjZWFibGU+dHlwZV9uYW1lPC9yZXBsYWNlYWJsZT48L2xpdGVy YWw+LCB3aXRoCisgICAgICAgIHBlci1jb2x1bW4gPGxpdGVyYWw+V0lUSCBPUFRJT05TPC9saXRl cmFsPiBvdmVycmlkZXMgZm9yIGxvY2FsCisgICAgICAgIGRlZmF1bHRzLCA8bGl0ZXJhbD5OT1Qg TlVMTDwvbGl0ZXJhbD4sIGFuZCA8bGl0ZXJhbD5DSEVDSzwvbGl0ZXJhbD4KKyAgICAgICAgY29u c3RyYWludHMpLCBhbmQgdGhlIDxsaXRlcmFsPlBBUlRJVElPTiBPRjwvbGl0ZXJhbD4gZm9ybS4K KyAgICAgICAgPGxpdGVyYWw+VEVNUE9SQVJZPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+VU5MT0dH RUQ8L2xpdGVyYWw+CisgICAgICAgIHBlcnNpc3RlbmNlIG1vZGVzIGFyZSBlbWl0dGVkIGZyb20K KyAgICAgICAgPHN0cnVjdGZpZWxkPnJlbHBlcnNpc3RlbmNlPC9zdHJ1Y3RmaWVsZD4uICBGb3Ig dGVtcG9yYXJ5IHRhYmxlcworICAgICAgICByZWdpc3RlcmVkIGluIHRoZSBjdXJyZW50IHNlc3Np b24sIHRoZQorICAgICAgICA8bGl0ZXJhbD5PTiBDT01NSVQgREVMRVRFIFJPV1M8L2xpdGVyYWw+ IGFuZAorICAgICAgICA8bGl0ZXJhbD5PTiBDT01NSVQgRFJPUDwvbGl0ZXJhbD4gY2xhdXNlcyBh cmUgZW1pdHRlZDsgdGhlIGRlZmF1bHQKKyAgICAgICAgPGxpdGVyYWw+T04gQ09NTUlUIFBSRVNF UlZFIFJPV1M8L2xpdGVyYWw+IGlzIG9taXR0ZWQuCisgICAgICAgPC9wYXJhPjwvZW50cnk+Cisg ICAgICA8L3Jvdz4KICAgICAgPC90Ym9keT4KICAgICA8L3Rncm91cD4KICAgIDwvdGFibGU+CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMKaW5kZXggNGI5ODAyYWFmY2MuLjg5NzE1MWJkNmQxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jCkBAIC0yMzYsNiArMjM2LDk5IEBAIGZpbmRfaW5o ZXJpdGFuY2VfY2hpbGRyZW5fZXh0ZW5kZWQoT2lkIHBhcmVudHJlbElkLCBib29sIG9taXRfZGV0 YWNoZWQsCiB9CiAKIAorLyoKKyAqIGZpbmRfaW5oZXJpdGFuY2VfcGFyZW50cworICoKKyAqIFJl dHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgdGhlIE9JRHMgb2YgYWxsIHJlbGF0aW9ucyB0aGF0IHRo ZSByZWxhdGlvbiB3aXRoCisgKiBPSUQgJ3JlbGlkJyBpbmhlcml0cyAqZGlyZWN0bHkqIGZyb20s IGluIGluaHNlcW5vIG9yZGVyICh0aGUgb3JkZXIgaW4gd2hpY2gKKyAqIHRoZXkgc2hvdWxkIGFw cGVhciBpbiBhbiBJTkhFUklUUyBjbGF1c2UpLgorICoKKyAqIFRoZSBzcGVjaWZpZWQgbG9jayB0 eXBlIGlzIGFjcXVpcmVkIG9uIGVhY2ggcGFyZW50IHJlbGF0aW9uIChidXQgbm90IG9uIHRoZQor ICogZ2l2ZW4gcmVsOyBjYWxsZXIgc2hvdWxkIGFscmVhZHkgaGF2ZSBsb2NrZWQgaXQpLiAgSWYg bG9ja21vZGUgaXMgTm9Mb2NrCisgKiB0aGVuIG5vIGxvY2tzIGFyZSBhY3F1aXJlZCwgYnV0IGNh bGxlciBtdXN0IGJld2FyZSBvZiByYWNlIGNvbmRpdGlvbnMKKyAqIGFnYWluc3QgcG9zc2libGUg RFJPUHMgb2YgcGFyZW50IHJlbGF0aW9ucy4KKyAqCisgKiBQYXJ0aXRpb24gY2hpbGRyZW4gYWxz byBoYXZlIGEgcGdfaW5oZXJpdHMgZW50cnkgcG9pbnRpbmcgdG8gdGhlCisgKiBwYXJ0aXRpb25l ZCBwYXJlbnQ7IGNhbGxlcnMgdGhhdCBkaXN0aW5ndWlzaCBJTkhFUklUUyBmcm9tIFBBUlRJVElP TiBPRgorICogbXVzdCBjaGVjayByZWxpc3BhcnRpdGlvbiB0aGVtc2VsdmVzLgorICovCitMaXN0 ICoKK2ZpbmRfaW5oZXJpdGFuY2VfcGFyZW50cyhPaWQgcmVsaWQsIExPQ0tNT0RFIGxvY2ttb2Rl KQoreworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJUmVsYXRpb24JcmVsYXRpb247CisJU3lzU2Nh bkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXlbMV07CisJSGVhcFR1cGxlCWluaGVyaXRzVHVw bGU7CisJT2lkCQkJaW5ocGFyZW50OworCU9pZAkJICAgKm9pZGFycjsKKwlpbnQJCQltYXhvaWRz LAorCQkJCW51bW9pZHMsCisJCQkJaTsKKworCS8qCisJICogU2NhbiBwZ19pbmhlcml0cyB2aWEg dGhlIChpbmhyZWxpZCwgaW5oc2Vxbm8pIGluZGV4IHNvIHRoYXQgdGhlIHJvd3MKKwkgKiBjb21l IG91dCBpbiBpbmhzZXFubyBvcmRlciwgd2hpY2ggaXMgdGhlIG9yZGVyIHJlcXVpcmVkIGZvciB0 aGUKKwkgKiBJTkhFUklUUyBjbGF1c2UuCisJICovCisJbWF4b2lkcyA9IDg7CisJb2lkYXJyID0g KE9pZCAqKSBwYWxsb2MobWF4b2lkcyAqIHNpemVvZihPaWQpKTsKKwludW1vaWRzID0gMDsKKwor CXJlbGF0aW9uID0gdGFibGVfb3BlbihJbmhlcml0c1JlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwlTY2FuS2V5SW5pdCgma2V5WzBdLAorCQkJCUFudW1fcGdfaW5oZXJpdHNfaW5ocmVs aWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0 RGF0dW0ocmVsaWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocmVsYXRpb24sIElu aGVyaXRzUmVsaWRTZXFub0luZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCBrZXkpOwor CisJd2hpbGUgKChpbmhlcml0c1R1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkgIT0gTlVM TCkKKwl7CisJCWluaHBhcmVudCA9ICgoRm9ybV9wZ19pbmhlcml0cykgR0VUU1RSVUNUKGluaGVy aXRzVHVwbGUpKS0+aW5ocGFyZW50OworCQlpZiAobnVtb2lkcyA+PSBtYXhvaWRzKQorCQl7CisJ CQltYXhvaWRzICo9IDI7CisJCQlvaWRhcnIgPSAoT2lkICopIHJlcGFsbG9jKG9pZGFyciwgbWF4 b2lkcyAqIHNpemVvZihPaWQpKTsKKwkJfQorCQlvaWRhcnJbbnVtb2lkcysrXSA9IGluaHBhcmVu dDsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCisJdGFibGVfY2xvc2UocmVsYXRp b24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKgorCSAqIEFjcXVpcmUgbG9ja3MgYW5kIGJ1aWxk IHRoZSByZXN1bHQgbGlzdC4gIFVubGlrZQorCSAqIGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4g d2UgZG8gKm5vdCogc29ydCBieSBPSUQ6IGNhbGxlcnMgbmVlZCB0aGUKKwkgKiBzZXFuby1vcmRl cmVkIHRyYXZlcnNhbC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtb2lkczsgaSsrKQorCXsK KwkJaW5ocGFyZW50ID0gb2lkYXJyW2ldOworCisJCWlmIChsb2NrbW9kZSAhPSBOb0xvY2spCisJ CXsKKwkJCUxvY2tSZWxhdGlvbk9pZChpbmhwYXJlbnQsIGxvY2ttb2RlKTsKKworCQkJaWYgKCFT ZWFyY2hTeXNDYWNoZUV4aXN0czEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKGluaHBhcmVudCkp KQorCQkJeworCQkJCVVubG9ja1JlbGF0aW9uT2lkKGluaHBhcmVudCwgbG9ja21vZGUpOworCQkJ CWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJbGlzdCA9IGxhcHBlbmRfb2lkKGxpc3QsIGluaHBh cmVudCk7CisJfQorCisJcGZyZWUob2lkYXJyKTsKKworCXJldHVybiBsaXN0OworfQorCisKIC8q CiAgKiBmaW5kX2FsbF9pbmhlcml0b3JzIC0KICAqCQlSZXR1cm5zIGEgbGlzdCBvZiByZWxhdGlv biBPSURzIGluY2x1ZGluZyB0aGUgZ2l2ZW4gcmVsIHBsdXMKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRz LmMKaW5kZXggNDcyZGIxMTJmYTcuLjJlMTA4NTY0ZGUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNt ZHMuYwpAQCAtNzQ2LDcgKzc0Niw2IEBAIHN0YXRpYyBPYmplY3RBZGRyZXNzIEFURXhlY1NldENv bXByZXNzaW9uKFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmNvbHVtbiwg Tm9kZSAqbmV3VmFsdWUsIExPQ0tNT0RFIGxvY2ttb2RlKTsKIAogc3RhdGljIHZvaWQgaW5kZXhf Y29weV9kYXRhKFJlbGF0aW9uIHJlbCwgUmVsRmlsZUxvY2F0b3IgbmV3cmxvY2F0b3IpOwotc3Rh dGljIGNvbnN0IGNoYXIgKnN0b3JhZ2VfbmFtZShjaGFyIGMpOwogCiBzdGF0aWMgdm9pZCBSYW5n ZVZhckNhbGxiYWNrRm9yRHJvcFJlbGF0aW9uKGNvbnN0IFJhbmdlVmFyICpyZWwsIE9pZCByZWxP aWQsCiAJCQkJCQkJCQkJCU9pZCBvbGRSZWxPaWQsIHZvaWQgKmFyZyk7CkBAIC0yNTIyLDcgKzI1 MjEsNyBAQCB0cnVuY2F0ZV9jaGVja19hY3Rpdml0eShSZWxhdGlvbiByZWwpCiAgKiBzdG9yYWdl X25hbWUKICAqCSAgcmV0dXJucyB0aGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvIGEgdHlwc3RvcmFn ZS9hdHRzdG9yYWdlIGVudW0gdmFsdWUKICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3Qg Y2hhciAqCiBzdG9yYWdlX25hbWUoY2hhciBjKQogewogCXN3aXRjaCAoYykKQEAgLTE5Nzc2LDYg KzE5Nzc1LDMzIEBAIHJlbW92ZV9vbl9jb21taXRfYWN0aW9uKE9pZCByZWxpZCkKIAl9CiB9CiAK Ky8qCisgKiBMb29rIHVwIHRoZSByZWdpc3RlcmVkIE9OIENPTU1JVCBhY3Rpb24gZm9yIGEgcmVs YXRpb24uCisgKgorICogUmV0dXJucyBPTkNPTU1JVF9OT09QIHdoZW4gbm90aGluZyB3YXMgcmVn aXN0ZXJlZCwgd2hpY2ggYWxzbyBjb3ZlcnMKKyAqIHRlbXBvcmFyeSB0YWJsZXMgY3JlYXRlZCB3 aXRoIHRoZSBkZWZhdWx0IE9OIENPTU1JVCBQUkVTRVJWRSBST1dTCisgKiBiZWhhdmlvciAocmVn aXN0ZXJfb25fY29tbWl0X2FjdGlvbigpIHNraXBzIHRob3NlLCBzaW5jZSBubyBhY3Rpb24gaXMK KyAqIG5lZWRlZCBhdCBjb21taXQpLiAgRW50cmllcyBtYXJrZWQgZm9yIGRlbGV0aW9uIGluIHRo ZSBjdXJyZW50CisgKiB0cmFuc2FjdGlvbiBhcmUgaWdub3JlZC4KKyAqLworT25Db21taXRBY3Rp b24KK2dldF9vbl9jb21taXRfYWN0aW9uKE9pZCByZWxpZCkKK3sKKwlMaXN0Q2VsbCAgICpsOwor CisJZm9yZWFjaChsLCBvbl9jb21taXRzKQorCXsKKwkJT25Db21taXRJdGVtICpvYyA9IChPbkNv bW1pdEl0ZW0gKikgbGZpcnN0KGwpOworCisJCWlmIChvYy0+cmVsaWQgIT0gcmVsaWQpCisJCQlj b250aW51ZTsKKwkJaWYgKG9jLT5kZWxldGluZ19zdWJpZCAhPSBJbnZhbGlkU3ViVHJhbnNhY3Rp b25JZCkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gb2MtPm9uY29tbWl0OworCX0KKwlyZXR1cm4g T05DT01NSVRfTk9PUDsKK30KKwogLyoKICAqIFBlcmZvcm0gT04gQ09NTUlUIGFjdGlvbnMuCiAg KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYwppbmRleCBhNzBmMWMyODY1NS4uYjJlMTUzODRiMmEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jCkBAIC0yMSwxNyArMjEsMzEgQEAKICNpbmNsdWRl ICJhY2Nlc3MvZ2VuYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3RhYmxlLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RvYXN0X2NvbXByZXNzaW9u LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bh cnRpdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYW0uaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX2F1dGhfbWVtYmVycy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYXV0aGlkLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9u LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19kYXRhYmFzZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGJfcm9sZV9zZXR0aW5nLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmhlcml0cy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf cG9saWN5LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGdfc3RhdGlzdGljX2V4dC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdGFibGVzcGFj ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJpZ2dlci5oIgorI2luY2x1ZGUgImNvbW1hbmRz L2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgogI2luY2x1ZGUgImNv bW1hbmRzL3RhYmxlc3BhY2UuaCIKICNpbmNsdWRlICJjb21tb24vcmVscGF0aC5oIgogI2luY2x1 ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgIm1pc2Nh ZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgi CiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXRldGltZS5o IgpAQCAtNDUsNiArNTksODIgQEAKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKICNpbmNs dWRlICJ1dGlscy92YXJsZW5hLmgiCiAKKy8qIE9wdGlvbiB2YWx1ZSB0eXBlcyBmb3IgRERMIG9w dGlvbiBwYXJzaW5nICovCit0eXBlZGVmIGVudW0KK3sKKwlERExfT1BUX0JPT0wsCisJRERMX09Q VF9URVhULAorCURETF9PUFRfSU5ULAorfSBEZGxPcHRUeXBlOworCisvKgorICogQSBzaW5nbGUg RERMIG9wdGlvbiBkZXNjcmlwdG9yOiBjYWxsZXIgZmlsbHMgaW4gbmFtZSBhbmQgdHlwZSwKKyAq IHBhcnNlX2RkbF9vcHRpb25zIGZpbGxzIGluIGlzc2V0ICsgdGhlIGFwcHJvcHJpYXRlIHZhbHVl IGZpZWxkLgorICovCit0eXBlZGVmIHN0cnVjdCBEZGxPcHRpb24KK3sKKwljb25zdCBjaGFyICpu YW1lOwkJCS8qIG9wdGlvbiBuYW1lIChjYXNlLWluc2Vuc2l0aXZlIG1hdGNoKSAqLworCURkbE9w dFR5cGUJdHlwZTsJCQkvKiBleHBlY3RlZCB2YWx1ZSB0eXBlICovCisJYm9vbAkJaXNzZXQ7CQkJ LyogdHJ1ZSBpZiBjYWxsZXIgc3VwcGxpZWQgdGhpcyBvcHRpb24gKi8KKwkvKiBmaWVsZHMgZm9y IHNwZWNpZmljIG9wdGlvbiB0eXBlcyAqLworCXVuaW9uCisJeworCQlib29sCQlib29sdmFsOwkv KiBmaWxsZWQgaW4gZm9yIERETF9PUFRfQk9PTCAqLworCQljaGFyCSAgICp0ZXh0dmFsOwkvKiBm aWxsZWQgaW4gZm9yIERETF9PUFRfVEVYVCAocGFsbG9jJ2QpICovCisJCWludAkJCWludHZhbDsJ CS8qIGZpbGxlZCBpbiBmb3IgRERMX09QVF9JTlQgKi8KKwl9OworfSBEZGxPcHRpb247CisKKwor LyoKKyAqIE9iamVjdC1jbGFzcyBraW5kcyB0aGF0IHRoZSBvbmx5IC8gZXhjZXB0IG9wdGlvbnMg b24KKyAqIHBnX2dldF90YWJsZV9kZGwgY2FuIGZpbHRlciBvbi4gIE1lbWJlcnMgYXJlIHN0b3Jl ZCBhcyBpbnRlZ2VycyBpbiBhCisgKiBCaXRtYXBzZXQgb24gVGFibGVEZGxDb250ZXh0LiAgS2Vl cCB0YWJsZV9kZGxfa2luZF9uYW1lc1tdIGluIHN5bmMKKyAqIHdpdGggdGhlIG9yZGVyIG9mIGFk ZGl0aW9ucyBoZXJlLgorICovCit0eXBlZGVmIGVudW0gVGFibGVEZGxLaW5kCit7CisJVEFCTEVf RERMX0tJTkRfVEFCTEUsCisJVEFCTEVfRERMX0tJTkRfSU5ERVgsCisJVEFCTEVfRERMX0tJTkRf UFJJTUFSWV9LRVksCisJVEFCTEVfRERMX0tJTkRfVU5JUVVFLAorCVRBQkxFX0RETF9LSU5EX0NI RUNLLAorCVRBQkxFX0RETF9LSU5EX0ZPUkVJR05fS0VZLAorCVRBQkxFX0RETF9LSU5EX0VYQ0xV U0lPTiwKKwlUQUJMRV9ERExfS0lORF9SVUxFLAorCVRBQkxFX0RETF9LSU5EX1NUQVRJU1RJQ1Ms CisJVEFCTEVfRERMX0tJTkRfVFJJR0dFUiwKKwlUQUJMRV9ERExfS0lORF9QT0xJQ1ksCisJVEFC TEVfRERMX0tJTkRfUkxTLAorCVRBQkxFX0RETF9LSU5EX1JFUExJQ0FfSURFTlRJVFksCisJVEFC TEVfRERMX0tJTkRfUEFSVElUSU9OLAorfQkJCVRhYmxlRGRsS2luZDsKKworc3RhdGljIGNvbnN0 IHN0cnVjdAoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJVGFibGVEZGxLaW5kIGtpbmQ7Cit9CQkJ dGFibGVfZGRsX2tpbmRfbmFtZXNbXSA9Cit7CisJeyJ0YWJsZSIsIFRBQkxFX0RETF9LSU5EX1RB QkxFfSwKKwl7ImluZGV4IiwgVEFCTEVfRERMX0tJTkRfSU5ERVh9LAorCXsicHJpbWFyeV9rZXki LCBUQUJMRV9ERExfS0lORF9QUklNQVJZX0tFWX0sCisJeyJ1bmlxdWUiLCBUQUJMRV9ERExfS0lO RF9VTklRVUV9LAorCXsiY2hlY2siLCBUQUJMRV9ERExfS0lORF9DSEVDS30sCisJeyJmb3JlaWdu X2tleSIsIFRBQkxFX0RETF9LSU5EX0ZPUkVJR05fS0VZfSwKKwl7ImV4Y2x1c2lvbiIsIFRBQkxF X0RETF9LSU5EX0VYQ0xVU0lPTn0sCisJeyJydWxlIiwgVEFCTEVfRERMX0tJTkRfUlVMRX0sCisJ eyJzdGF0aXN0aWNzIiwgVEFCTEVfRERMX0tJTkRfU1RBVElTVElDU30sCisJeyJ0cmlnZ2VyIiwg VEFCTEVfRERMX0tJTkRfVFJJR0dFUn0sCisJeyJwb2xpY3kiLCBUQUJMRV9ERExfS0lORF9QT0xJ Q1l9LAorCXsicmxzIiwgVEFCTEVfRERMX0tJTkRfUkxTfSwKKwl7InJlcGxpY2FfaWRlbnRpdHki LCBUQUJMRV9ERExfS0lORF9SRVBMSUNBX0lERU5USVRZfSwKKwl7InBhcnRpdGlvbiIsIFRBQkxF X0RETF9LSU5EX1BBUlRJVElPTn0sCit9OworCitzdGF0aWMgdm9pZCBwYXJzZV9kZGxfb3B0aW9u cyhGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgaW50IHZhcmlhZGljX3N0YXJ0LAorCQkJCQkJCSAg RGRsT3B0aW9uICpvcHRzLCBpbnQgbm9wdHMpOworc3RhdGljIEJpdG1hcHNldCAqcGFyc2Vfa2lu ZF9saXN0KGNvbnN0IGNoYXIgKm9wdG5hbWUsIGNvbnN0IGNoYXIgKmxpc3QpOwogc3RhdGljIHZv aWQgYXBwZW5kX2RkbF9vcHRpb24oU3RyaW5nSW5mbyBidWYsIGJvb2wgcHJldHR5LCBpbnQgaW5k ZW50LAogCQkJCQkJCSAgY29uc3QgY2hhciAqZm10LCAuLi4pCiAJCQlwZ19hdHRyaWJ1dGVfcHJp bnRmKDQsIDUpOwpAQCAtNTcsNiArMTQ3LDM0MSBAQCBzdGF0aWMgRGF0dW0gcGdfZ2V0X3RhYmxl c3BhY2VfZGRsX3NyZihGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgT2lkIHRzaWQpOwogc3RhdGlj IExpc3QgKnBnX2dldF9kYXRhYmFzZV9kZGxfaW50ZXJuYWwoT2lkIGRiaWQsIGJvb2wgcHJldHR5 LAogCQkJCQkJCQkJCSAgYm9vbCBub19vd25lciwgYm9vbCBub190YWJsZXNwYWNlKTsKIAorLyoK KyAqIFBlci1jb2x1bW4gY2FjaGUgb2YgbG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBjb25zdHJh aW50cy4gIEJ1aWx0IG9uY2UKKyAqIGJ5IGNvbGxlY3RfbG9jYWxfbm90X251bGwoKSBhbmQgY29u c3VsdGVkIGJ5IHRoZSBjb2x1bW4tZW1pdCBoZWxwZXJzCisgKiBhbmQgdGhlIHBvc3QtQ1JFQVRF IGNvbnN0cmFpbnQgbG9vcC4gIEVudHJpZXMgd2l0aCBjb25vaWQgPT0gSW52YWxpZE9pZAorICog bWVhbiB0aGUgY29sdW1uIGhhcyBubyBsb2NhbCBOT1QgTlVMTCBjb25zdHJhaW50IHJvdyBpbiBw Z19jb25zdHJhaW50CisgKiAodGhlIGNvbHVtbiBtYXkgc3RpbGwgaGF2ZSBhdHRub3RudWxsPXRy dWUgb24gYSBwcmUtUEctMTgtdXBncmFkZWQKKyAqIGNhdGFsb2csIGluIHdoaWNoIGNhc2UgZW1p dCBwbGFpbiBpbmxpbmUgTk9UIE5VTEwpLgorICovCit0eXBlZGVmIHN0cnVjdCBMb2NhbE5vdE51 bGxFbnRyeQoreworCU9pZAkJCWNvbm9pZDsKKwljaGFyCSAgICpuYW1lOworCWJvb2wJCWlzX2F1 dG87CQkvKiBtYXRjaGVzICI8dGFibGU+Xzxjb2w+X25vdF9udWxsIiAqLworCWJvb2wJCW5vX2lu aGVyaXQ7Cit9CQkJTG9jYWxOb3ROdWxsRW50cnk7CisKKy8qCisgKiBXb3JraW5nIGNvbnRleHQg dGhyZWFkZWQgdGhyb3VnaCB0aGUgcGVyLXBhc3MgaGVscGVycyBiZWxvdy4gIElucHV0cworICog KGNhbGxlci1wcm92aWRlZCBvcHRpb24gZmxhZ3MpIGFyZSBmaWxsZWQgaW4gb25jZSBhdCB0aGUg dG9wIG9mCisgKiBwZ19nZXRfdGFibGVfZGRsX2ludGVybmFsIGFuZCB0cmVhdGVkIGFzIHJlYWQt b25seSB0aGVyZWFmdGVyLiAgRGVyaXZlZAorICogZmllbGRzIChxdWFsbmFtZSwgbm5fZW50cmll cywgc2tpcF9ub3RudWxsX29pZHMpIGFyZSBjb21wdXRlZCBvbmNlCisgKiBkdXJpbmcgc2V0dXAu ICBFYWNoIHBhc3MgYXBwZW5kcyB0byBjdHgtPmJ1ZiBhbmQgcHVzaGVzIHRoZSBmaW5pc2hlZAor ICogc3RhdGVtZW50IG9udG8gY3R4LT5zdGF0ZW1lbnRzIHZpYSBhcHBlbmRfc3RtdCgpLgorICov Cit0eXBlZGVmIHN0cnVjdCBUYWJsZURkbENvbnRleHQKK3sKKwlSZWxhdGlvbglyZWw7CisJT2lk CQkJcmVsaWQ7CisJYm9vbAkJcHJldHR5OworCWJvb2wJCW5vX293bmVyOworCWJvb2wJCW5vX3Rh Ymxlc3BhY2U7CisJYm9vbAkJc2NoZW1hX3F1YWxpZmllZDsKKworCS8qCisJICogT2JqZWN0LWNs YXNzIGZpbHRlcmluZy4gIElmIG9ubHlfa2luZHMgaXMgbm9uLU5VTEwsIG9ubHkgdGhlCisJICog a2luZHMgaW4gdGhhdCBzZXQgYXJlIGVtaXR0ZWQ7IGlmIGV4Y2VwdF9raW5kcyBpcyBub24tTlVM TCwgYWxsCisJICoga2luZHMgKmV4Y2VwdCogdGhvc2UgaW4gdGhhdCBzZXQgYXJlIGVtaXR0ZWQ7 IGlmIGJvdGggYXJlIE5VTEwsCisJICogZXZlcnkga2luZCBpcyBlbWl0dGVkICh0aGUgZGVmYXVs dCkuICBUaGUgdHdvIGFyZSBtdXR1YWxseQorCSAqIGV4Y2x1c2l2ZSBhdCB0aGUgdXNlci1mYWNp bmcgbGF5ZXIgKHRoZSBTUkYgZW50cnkgcmVqZWN0cworCSAqIHNwZWNpZnlpbmcgYm90aCkuCisJ ICovCisJQml0bWFwc2V0ICAqb25seV9raW5kczsKKwlCaXRtYXBzZXQgICpleGNlcHRfa2luZHM7 CisKKwkvKiBEZXJpdmVkIGR1cmluZyBzZXR1cCAqLworCU9pZAkJCWJhc2VfbmFtZXNwYWNlOwor CWNoYXIJICAgKnF1YWxuYW1lOworCWludAkJCXNhdmVfbmVzdGxldmVsOyAvKiA+PSAwIGlmIHdl IG5hcnJvd2VkIHNlYXJjaF9wYXRoICovCisJTG9jYWxOb3ROdWxsRW50cnkgKm5uX2VudHJpZXM7 CisJTGlzdAkgICAqc2tpcF9ub3RudWxsX29pZHM7CisKKwkvKiBNdXRhYmxlIHdvcmtpbmcgc3Rh dGUgKi8KKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJTGlzdAkgICAqc3RhdGVtZW50czsKK30JCQlU YWJsZURkbENvbnRleHQ7CisKK3N0YXRpYyBMaXN0ICpwZ19nZXRfdGFibGVfZGRsX2ludGVybmFs KFRhYmxlRGRsQ29udGV4dCAqY3R4KTsKK3N0YXRpYyBib29sIGlzX2tpbmRfaW5jbHVkZWQoY29u c3QgVGFibGVEZGxDb250ZXh0ICpjdHgsIFRhYmxlRGRsS2luZCBraW5kKTsKK3N0YXRpYyB2b2lk IGFwcGVuZF9jb2x1bW5fZGVmcyhTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLCBib29sIHBy ZXR0eSwKKwkJCQkJCQkgICBib29sIGluY2x1ZGVfY2hlY2ssCisJCQkJCQkJICAgYm9vbCBzY2hl bWFfcXVhbGlmaWVkLAorCQkJCQkJCSAgIExvY2FsTm90TnVsbEVudHJ5ICpubl9lbnRyaWVzKTsK K3N0YXRpYyB2b2lkIGFwcGVuZF90eXBlZF9jb2x1bW5fb3ZlcnJpZGVzKFN0cmluZ0luZm8gYnVm LCBSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJICBib29sIHByZXR0eSwgYm9vbCBpbmNsdWRlX2No ZWNrLAorCQkJCQkJCQkJCSAgTG9jYWxOb3ROdWxsRW50cnkgKm5uX2VudHJpZXMpOworc3RhdGlj IHZvaWQgYXBwZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50cyhTdHJpbmdJbmZvIGJ1ZiwgUmVs YXRpb24gcmVsLAorCQkJCQkJCQkJCQlib29sIHByZXR0eSwgYm9vbCAqZmlyc3QpOworc3RhdGlj IGNoYXIgKmZpbmRfYXR0cmRlZl90ZXh0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRudW0s CisJCQkJCQkJICAgTGlzdCAqKmRwY29udGV4dCk7CitzdGF0aWMgY2hhciAqbG9va3VwX3JlbG5h bWVfZm9yX2VtaXQoT2lkIHJlbGlkLCBib29sIHNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJCQkg T2lkIGJhc2VfbmFtZXNwYWNlKTsKK3N0YXRpYyBMb2NhbE5vdE51bGxFbnRyeSAqY29sbGVjdF9s b2NhbF9ub3RfbnVsbChSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJCQkgIExpc3QgKipza2lwX29p ZHMpOworCitzdGF0aWMgdm9pZCBhcHBlbmRfc3RtdChUYWJsZURkbENvbnRleHQgKmN0eCk7Citz dGF0aWMgdm9pZCBlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRhYmxlRGRsQ29udGV4dCAqY3R4KTsK K3N0YXRpYyB2b2lkIGVtaXRfb3duZXJfc3RtdChUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0 aWMgdm9pZCBlbWl0X2NoaWxkX2RlZmF1bHRfb3ZlcnJpZGVzKFRhYmxlRGRsQ29udGV4dCAqY3R4 KTsKK3N0YXRpYyB2b2lkIGVtaXRfYXR0b3B0aW9ucyhUYWJsZURkbENvbnRleHQgKmN0eCk7Citz dGF0aWMgdm9pZCBlbWl0X2luZGV4ZXMoVGFibGVEZGxDb250ZXh0ICpjdHgpOworc3RhdGljIHZv aWQgZW1pdF9sb2NhbF9jb25zdHJhaW50cyhUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMg dm9pZCBlbWl0X3J1bGVzKFRhYmxlRGRsQ29udGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRf c3RhdGlzdGljcyhUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X3JlcGxp Y2FfaWRlbnRpdHkoVGFibGVEZGxDb250ZXh0ICpjdHgpOworc3RhdGljIHZvaWQgZW1pdF9ybHNf dG9nZ2xlcyhUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X3BhcnRpdGlv bl9jaGlsZHJlbihUYWJsZURkbENvbnRleHQgKmN0eCk7CisKKworLyoKKyAqIHBhcnNlX2RkbF9v cHRpb25zCisgKiAJCVBhcnNlIHZhcmlhZGljIG5hbWUvdmFsdWUgb3B0aW9uIHBhaXJzCisgKgor ICogT3B0aW9ucyBhcmUgcGFzc2VkIGFzIGFsdGVybmF0aW5nIGtleS92YWx1ZSB0ZXh0IHBhaXJz LiAgVGhlIGNhbGxlcgorICogcHJvdmlkZXMgYW4gYXJyYXkgb2YgRGRsT3B0aW9uIGRlc2NyaXB0 b3JzIHNwZWNpZnlpbmcgdGhlIGFjY2VwdGVkCisgKiBvcHRpb24gbmFtZXMgYW5kIHRoZWlyIHR5 cGVzOyB0aGlzIGZ1bmN0aW9uIG1hdGNoZXMgZWFjaCBzdXBwbGllZAorICogcGFpciBhZ2FpbnN0 IHRoZSBhcnJheSwgdmFsaWRhdGVzIHRoZSB2YWx1ZSwgYW5kIGZpbGxzIGluIHRoZQorICogcmVz dWx0IGZpZWxkcy4KKyAqLworc3RhdGljIHZvaWQKK3BhcnNlX2RkbF9vcHRpb25zKEZ1bmN0aW9u Q2FsbEluZm8gZmNpbmZvLCBpbnQgdmFyaWFkaWNfc3RhcnQsCisJCQkJICBEZGxPcHRpb24gKm9w dHMsIGludCBub3B0cykKK3sKKwlEYXR1bQkgICAqYXJnczsKKwlib29sCSAgICpudWxsczsKKwlP aWQJCSAgICp0eXBlczsKKwlpbnQJCQluYXJnczsKKworCS8qIENsZWFyIGFsbCBvdXRwdXQgZmll bGRzICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBub3B0czsgaSsrKQorCXsKKwkJb3B0c1tpXS5p c3NldCA9IGZhbHNlOworCQlzd2l0Y2ggKG9wdHNbaV0udHlwZSkKKwkJeworCQkJY2FzZSBERExf T1BUX0JPT0w6CisJCQkJb3B0c1tpXS5ib29sdmFsID0gZmFsc2U7CisJCQkJYnJlYWs7CisJCQlj YXNlIERETF9PUFRfVEVYVDoKKwkJCQlvcHRzW2ldLnRleHR2YWwgPSBOVUxMOworCQkJCWJyZWFr OworCQkJY2FzZSBERExfT1BUX0lOVDoKKwkJCQlvcHRzW2ldLmludHZhbCA9IDA7CisJCQkJYnJl YWs7CisJCX0KKwl9CisKKwluYXJncyA9IGV4dHJhY3RfdmFyaWFkaWNfYXJncyhmY2luZm8sIHZh cmlhZGljX3N0YXJ0LCB0cnVlLAorCQkJCQkJCQkgICZhcmdzLCAmdHlwZXMsICZudWxscyk7CisK KwlpZiAobmFyZ3MgPD0gMCkKKwkJcmV0dXJuOworCisJLyogSGFuZGxlIERFRkFVTFQgTlVMTCBj YXNlICovCisJaWYgKG5hcmdzID09IDEgJiYgbnVsbHNbMF0pCisJCXJldHVybjsKKworCWlmIChu YXJncyAlIDIgIT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJ2YXJpYWRpYyBhcmd1bWVudHMg bXVzdCBiZSBuYW1lL3ZhbHVlIHBhaXJzIiksCisJCQkJIGVycmhpbnQoIlByb3ZpZGUgYW4gZXZl biBudW1iZXIgb2YgdmFyaWFkaWMgYXJndW1lbnRzIHRoYXQgY2FuIGJlIGRpdmlkZWQgaW50byBw YWlycy4iKSkpOworCisJLyoKKwkgKiBGb3IgZWFjaCBvcHRpb24gbmFtZS92YWx1ZSBwYWlyLCBm aW5kIGNvcnJlc3BvbmRpbmcgcG9zaXRpb25hbCBvcHRpb24KKwkgKiBmb3IgdGhlIG9wdGlvbiBu YW1lLCBhbmQgYXNzaWduIHRoZSBvcHRpb24gdmFsdWUuCisJICovCisJZm9yIChpbnQgaSA9IDA7 IGkgPCBuYXJnczsgaSArPSAyKQorCXsKKwkJY2hhcgkgICAqbmFtZTsKKwkJY2hhcgkgICAqdmFs c3RyOworCQlEZGxPcHRpb24gICpvcHQgPSBOVUxMOworCisJCWlmIChudWxsc1tpXSkKKwkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAorCQkJCQkgZXJybXNnKCJvcHRpb24gbmFtZSBhdCB2YXJpYWRpYyBwb3NpdGlvbiAlZCBp cyBudWxsIiwgaSArIDEpKSk7CisKKwkJbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoYXJnc1tp XSk7CisKKwkJaWYgKG51bGxzW2kgKyAxXSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJ2YWx1 ZSBmb3Igb3B0aW9uIFwiJXNcIiBtdXN0IG5vdCBiZSBudWxsIiwgbmFtZSkpKTsKKworCQkvKiBG aW5kIG1hdGNoaW5nIG9wdGlvbiBkZXNjcmlwdG9yICovCisJCWZvciAoaW50IGogPSAwOyBqIDwg bm9wdHM7IGorKykKKwkJeworCQkJaWYgKHBnX3N0cmNhc2VjbXAobmFtZSwgb3B0c1tqXS5uYW1l KSA9PSAwKQorCQkJeworCQkJCW9wdCA9ICZvcHRzW2pdOworCQkJCWJyZWFrOworCQkJfQorCQl9 CisKKwkJaWYgKG9wdCA9PSBOVUxMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coInVucmVjb2du aXplZCBvcHRpb246IFwiJXNcIiIsIG5hbWUpKSk7CisKKwkJaWYgKG9wdC0+aXNzZXQpCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJIGVycm1zZygib3B0aW9uIFwiJXNcIiBpcyBzcGVjaWZpZWQgbW9yZSB0aGFu IG9uY2UiLAorCQkJCQkJCW5hbWUpKSk7CisKKwkJdmFsc3RyID0gVGV4dERhdHVtR2V0Q1N0cmlu ZyhhcmdzW2kgKyAxXSk7CisKKwkJc3dpdGNoIChvcHQtPnR5cGUpCisJCXsKKwkJCWNhc2UgRERM X09QVF9CT09MOgorCQkJCWlmICghcGFyc2VfYm9vbCh2YWxzdHIsICZvcHQtPmJvb2x2YWwpKQor CQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCQkJCSBlcnJtc2coImludmFsaWQgdmFsdWUgZm9yIGJvb2xlYW4g b3B0aW9uIFwiJXNcIjogJXMiLAorCQkJCQkJCQkJbmFtZSwgdmFsc3RyKSkpOworCQkJCWJyZWFr OworCisJCQljYXNlIERETF9PUFRfVEVYVDoKKwkJCQlvcHQtPnRleHR2YWwgPSB2YWxzdHI7CisJ CQkJdmFsc3RyID0gTlVMTDsJLyogZG9uJ3QgcGZyZWUgYmVsb3cgKi8KKwkJCQlicmVhazsKKwor CQkJY2FzZSBERExfT1BUX0lOVDoKKwkJCQl7CisJCQkJCWNoYXIJICAgKmVuZHA7CisJCQkJCWxv bmcJCXZhbDsKKworCQkJCQllcnJubyA9IDA7CisJCQkJCXZhbCA9IHN0cnRvbCh2YWxzdHIsICZl bmRwLCAxMCk7CisJCQkJCWlmICgqZW5kcCAhPSAnXDAnIHx8IGVycm5vID09IEVSQU5HRSB8fAor CQkJCQkJdmFsIDwgUEdfSU5UMzJfTUlOIHx8IHZhbCA+IFBHX0lOVDMyX01BWCkKKwkJCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCQkJCQkgZXJybXNnKCJpbnZhbGlkIHZhbHVlIGZvciBpbnRlZ2VyIG9wdGlv biBcIiVzXCI6ICVzIiwKKwkJCQkJCQkJCQluYW1lLCB2YWxzdHIpKSk7CisJCQkJCW9wdC0+aW50 dmFsID0gKGludCkgdmFsOworCQkJCX0KKwkJCQlicmVhazsKKwkJfQorCisJCW9wdC0+aXNzZXQg PSB0cnVlOworCisJCWlmICh2YWxzdHIpCisJCQlwZnJlZSh2YWxzdHIpOworCQlwZnJlZShuYW1l KTsKKwl9Cit9CisKKy8qCisgKiBwYXJzZV9raW5kX2xpc3QKKyAqCQlQYXJzZSBhIGNvbW1hLXNl cGFyYXRlZCBsaXN0IG9mIG9iamVjdC1jbGFzcyBraW5kIG5hbWVzIGludG8gYQorICoJCUJpdG1h cHNldCBvZiBUYWJsZURkbEtpbmQgdmFsdWVzLgorICoKKyAqIFdoaXRlc3BhY2UgYXJvdW5kIGVh Y2ggZW50cnkgaXMgdHJpbW1lZC4gIEVtcHR5IGVudHJpZXMgKGUuZy4gImEsLGIiIG9yIGEKKyAq IHRyYWlsaW5nIGNvbW1hKSBhcmUgcmVqZWN0ZWQuICBVbmtub3duIGtpbmQgbmFtZXMgcmFpc2Ug YW4gZXJyb3IgY2l0aW5nCisgKiB0aGUgc3VwcGxpZWQgb3B0aW9uIG5hbWUgc28gdGhlIG1lc3Nh Z2UgcG9pbnRzIGF0IHRoZSBvZmZlbmRpbmcgb3B0aW9uLgorICogUmV0dXJucyBOVUxMIG9ubHkg d2hlbiB0aGUgbGlzdCBpcyBzdHJ1Y3R1cmFsbHkgZW1wdHk7IGNhbGxlcnMgc2hvdWxkCisgKiB0 cmVhdCBhbiBhbGwtd2hpdGVzcGFjZSBsaXN0IGFzIGFuIGVycm9yIHJhdGhlciB0aGFuIGVxdWl2 YWxlbnQgdG8gTlVMTC4KKyAqLworc3RhdGljIEJpdG1hcHNldCAqCitwYXJzZV9raW5kX2xpc3Qo Y29uc3QgY2hhciAqb3B0bmFtZSwgY29uc3QgY2hhciAqbGlzdCkKK3sKKwlCaXRtYXBzZXQgICpy ZXN1bHQgPSBOVUxMOworCWNvbnN0IGNoYXIgKnAgPSBsaXN0OworCisJd2hpbGUgKCpwKQorCXsK KwkJY29uc3QgY2hhciAqc3RhcnQ7CisJCWNvbnN0IGNoYXIgKmVuZDsKKwkJY2hhcgkgICAqdG9r ZW47CisJCWJvb2wJCWZvdW5kID0gZmFsc2U7CisKKwkJLyogU2tpcCBsZWFkaW5nIHdoaXRlc3Bh Y2UuICovCisJCXdoaWxlICgqcCA9PSAnICcgfHwgKnAgPT0gJ1x0JykKKwkJCXArKzsKKworCQlp ZiAoKnAgPT0gJywnIHx8ICpwID09ICdcMCcpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiZW1w dHkgZW50cnkgaW4gb3B0aW9uIFwiJXNcIiIsIG9wdG5hbWUpKSk7CisKKwkJc3RhcnQgPSBwOwor CQl3aGlsZSAoKnAgJiYgKnAgIT0gJywnICYmICpwICE9ICcgJyAmJiAqcCAhPSAnXHQnKQorCQkJ cCsrOworCQllbmQgPSBwOworCisJCS8qIFNraXAgdHJhaWxpbmcgd2hpdGVzcGFjZS4gKi8KKwkJ d2hpbGUgKCpwID09ICcgJyB8fCAqcCA9PSAnXHQnKQorCQkJcCsrOworCisJCWlmICgqcCAhPSAn XDAnICYmICpwICE9ICcsJykKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJpbnZhbGlkIGNoYXJh Y3RlciBpbiBvcHRpb24gXCIlc1wiIiwgb3B0bmFtZSkpKTsKKworCQlpZiAoKnAgPT0gJywnKQor CQl7CisJCQlwKys7CisJCQkvKgorCQkJICogQSBjb21tYSBtdXN0IGJlIGZvbGxvd2VkIGJ5IGFu b3RoZXIgZW50cnkuICBXaXRob3V0IHRoaXMKKwkJCSAqIGNoZWNrIGEgdHJhaWxpbmcgY29tbWEg bGlrZSAiaW5kZXgsIiB3b3VsZCBiZSBzaWxlbnRseQorCQkJICogYWNjZXB0ZWQgYXMgImluZGV4 Iiwgd2hpbGUgIixpbmRleCIgYW5kICJpbmRleCwscnVsZSIgYXJlCisJCQkgKiBhbHJlYWR5IHJl amVjdGVkIGFzICJlbXB0eSBlbnRyeSIgLSB0aGlzIGd1YXJkIG1ha2VzIHRoZQorCQkJICogdGhy ZWUgZm9ybXMgY29uc2lzdGVudC4KKwkJCSAqLworCQkJaWYgKCpwID09ICdcMCcpCisJCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAorCQkJCQkJIGVycm1zZygiZW1wdHkgZW50cnkgaW4gb3B0aW9uIFwiJXNcIiIsIG9wdG5h bWUpKSk7CisJCX0KKworCQl0b2tlbiA9IHBuc3RyZHVwKHN0YXJ0LCBlbmQgLSBzdGFydCk7CisK KwkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhvZih0YWJsZV9kZGxfa2luZF9uYW1lcyk7 IGkrKykKKwkJeworCQkJaWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIHRhYmxlX2RkbF9raW5kX25h bWVzW2ldLm5hbWUpID09IDApCisJCQl7CisJCQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1iZXIocmVz dWx0LAorCQkJCQkJCQkJCShpbnQpIHRhYmxlX2RkbF9raW5kX25hbWVzW2ldLmtpbmQpOworCQkJ CWZvdW5kID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghZm91bmQpCisJ CQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQkJIGVycm1zZygidW5yZWNvZ25pemVkIGtpbmQgXCIlc1wiIGluIG9wdGlv biBcIiVzXCIiLAorCQkJCQkJCXRva2VuLCBvcHRuYW1lKSkpOworCisJCXBmcmVlKHRva2VuKTsK Kwl9CisKKwlpZiAocmVzdWx0ID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygib3B0aW9u IFwiJXNcIiBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIGtpbmQiLAorCQkJCQkJb3B0bmFtZSkp KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBpc19raW5kX2luY2x1ZGVkCisgKgkJ RGV0ZXJtaW5lIHdoZXRoZXIgRERMIGZvciB0aGUgZ2l2ZW4gb2JqZWN0LWNsYXNzIGtpbmQgc2hv dWxkIGJlCisgKgkJZW1pdHRlZCB1bmRlciB0aGUgY3VycmVudCBvcHRpb25zLgorICovCitzdGF0 aWMgYm9vbAoraXNfa2luZF9pbmNsdWRlZChjb25zdCBUYWJsZURkbENvbnRleHQgKmN0eCwgVGFi bGVEZGxLaW5kIGtpbmQpCit7CisJaWYgKGN0eC0+b25seV9raW5kcyAhPSBOVUxMKQorCQlyZXR1 cm4gYm1zX2lzX21lbWJlcigoaW50KSBraW5kLCBjdHgtPm9ubHlfa2luZHMpOworCWlmIChjdHgt PmV4Y2VwdF9raW5kcyAhPSBOVUxMKQorCQlyZXR1cm4gIWJtc19pc19tZW1iZXIoKGludCkga2lu ZCwgY3R4LT5leGNlcHRfa2luZHMpOworCXJldHVybiB0cnVlOworfQogCiAvKgogICogSGVscGVy IHRvIGFwcGVuZCBhIGZvcm1hdHRlZCBzdHJpbmcgd2l0aCBvcHRpb25hbCBwcmV0dHktcHJpbnRp bmcuCkBAIC05NzUsMyArMTQwMCwxNzMwIEBAIHBnX2dldF9kYXRhYmFzZV9kZGwoUEdfRlVOQ1RJ T05fQVJHUykKIAkJU1JGX1JFVFVSTl9ET05FKGZ1bmNjdHgpOwogCX0KIH0KKworLyoKKyAqIGxv b2t1cF9yZWxuYW1lX2Zvcl9lbWl0CisgKgkJUmV0dXJuIGVpdGhlciB0aGUgc2NoZW1hLXF1YWxp ZmllZCBvciB0aGUgYmFyZSBxdW90ZWQgbmFtZSBvZiBhCisgKgkJcmVsYXRpb24sIGRlcGVuZGlu ZyBvbiB0aGUgc2NoZW1hX3F1YWxpZmllZCBmbGFnLgorICoKKyAqIFRlbXBvcmFyeSByZWxhdGlv bnMgYXJlIG5ldmVyIHNjaGVtYS1xdWFsaWZpZWQgcmVnYXJkbGVzcyBvZgorICogc2NoZW1hX3F1 YWxpZmllZDogdGhlIFRFTVBPUkFSWSBrZXl3b3JkIGluIENSRUFURSBURU1QT1JBUlkgVEFCTEUK KyAqIGFscmVhZHkgcGxhY2VzIHRoZSB0YWJsZSBpbiB0aGUgc2Vzc2lvbidzIHRlbXAgc2NoZW1h LCBzbyBlbWl0dGluZworICogcGdfdGVtcF9OTi5yZWxuYW1lIHdvdWxkIHByb2R1Y2UgRERMIHRo YXQgY2Fubm90IGJlIHJlcGxheWVkLgorICoKKyAqIFdoZW4gc2NoZW1hX3F1YWxpZmllZCBpcyB0 cnVlIHRoZSBzY2hlbWEtcXVhbGlmaWVkIG5hbWUgaXMgYWx3YXlzCisgKiByZXR1cm5lZCBmb3Ig bm9uLXRlbXBvcmFyeSByZWxhdGlvbnMuICBXaGVuIGZhbHNlLCB0aGUgYmFyZSByZWxuYW1lCisg KiBpcyByZXR1cm5lZCBvbmx5IGlmIHRoZSB0YXJnZXQgcmVsYXRpb24gbGl2ZXMgaW4gYmFzZV9u YW1lc3BhY2UgKHRoZQorICogbmFtZXNwYWNlIG9mIHRoZSB0YWJsZSB3aG9zZSBEREwgaXMgYmVp bmcgZ2VuZXJhdGVkKTsgb3RoZXJ3aXNlIHRoZQorICogc2NoZW1hLXF1YWxpZmllZCBmb3JtIGlz IHJldHVybmVkLCBiZWNhdXNlIGNyb3NzLXNjaGVtYSByZWZlcmVuY2VzCisgKiAoZm9yIGV4YW1w bGUgYW4gaW5oZXJpdGFuY2UgcGFyZW50IG9yIGZvcmVpZ24ga2V5IHRhcmdldCBpbiBhCisgKiBk aWZmZXJlbnQgc2NoZW1hKSBhcmUgbm90IHNhZmUgdG8gb21pdC4KKyAqCisgKiBUaGlzIHJlcGxh Y2VzIHRoZSB1bnNhZmUgcGF0dGVybgorICoJICBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihn ZXRfbmFtZXNwYWNlX25hbWUoZ2V0X3JlbF9uYW1lc3BhY2Uob2lkKSksCisgKgkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdldF9yZWxfbmFtZShvaWQpKQorICogd2hpY2ggZGVyZWZlcmVu Y2VzIE5VTEwgd2hlbiBhIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb24gaGFzIGRyb3BwZWQgdGhlCisg KiByZWZlcmVuY2VkIHJlbGF0aW9uIChvciBpdHMgc2NoZW1hKSBiZXR3ZWVuIHdoZW4gd2UgY2Fj aGVkIGl0cyBPSUQgYW5kCisgKiB3aGVuIHdlIGFzayB0aGUgc3lzY2FjaGUgZm9yIGl0cyBuYW1l LiAgSG9sZGluZyBBY2Nlc3NTaGFyZUxvY2sgb24gYQorICogZGVwZW5kZW50IHJlbGF0aW9uIG1h a2VzIHRoaXMgcmFjZSB2YW5pc2hpbmdseSB1bmxpa2VseSBpbiBwcmFjdGljZSwgYnV0CisgKiB3 ZSBzdGlsbCBkZWZlbmQgYWdhaW5zdCBpdCBiZWNhdXNlIHRoZSBhbHRlcm5hdGl2ZSBpcyBhIFNJ R1NFR1YuCisgKgorICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwZnJlZSgpaW5nIHRoZSBy ZXN1bHQuCisgKi8KK3N0YXRpYyBjaGFyICoKK2xvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0KE9pZCBy ZWxpZCwgYm9vbCBzY2hlbWFfcXVhbGlmaWVkLCBPaWQgYmFzZV9uYW1lc3BhY2UpCit7CisJSGVh cFR1cGxlCXRwOworCUZvcm1fcGdfY2xhc3MgcmVsdHVwOworCWNoYXIJICAgKm5zcG5hbWU7CisJ Y2hhcgkgICAqcmVzdWx0OworCisJdHAgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCBPYmplY3RJ ZEdldERhdHVtKHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCSBl cnJtc2coInJlbGF0aW9uIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwgcmVsaWQpLAorCQkJ CSBlcnJkZXRhaWwoIkl0IG1heSBoYXZlIGJlZW4gY29uY3VycmVudGx5IGRyb3BwZWQuIikpKTsK KworCXJlbHR1cCA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1QodHApOworCisJLyoKKwkgKiBU ZW1wb3JhcnkgcmVsYXRpb25zIGFyZSBuZXZlciBzY2hlbWEtcXVhbGlmaWVkOiB0aGUgVEVNUE9S QVJZIGtleXdvcmQKKwkgKiBhbHJlYWR5IHBsYWNlcyB0aGVtIGluIHBnX3RlbXAsIGFuZCBwZ190 ZW1wX05OLnJlbG5hbWUgY2Fubm90IGJlCisJICogcmVwbGF5ZWQgaW4gYW55IG90aGVyIHNlc3Np b24uCisJICovCisJaWYgKGlzVGVtcE5hbWVzcGFjZShyZWx0dXAtPnJlbG5hbWVzcGFjZSkpCisJ eworCQlyZXN1bHQgPSBwc3RyZHVwKHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihyZWx0dXAtPnJl bG5hbWUpKSk7CisJCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJCXJldHVybiByZXN1bHQ7CisJfQor CisJLyogQmFyZSBuYW1lIG9ubHkgd2hlbiBjYWxsZXIgYXNrZWQgYW5kIHRhcmdldCBpcyBpbiB0 aGUgYmFzZSBuYW1lc3BhY2UuICovCisJaWYgKCFzY2hlbWFfcXVhbGlmaWVkICYmIHJlbHR1cC0+ cmVsbmFtZXNwYWNlID09IGJhc2VfbmFtZXNwYWNlKQorCXsKKwkJcmVzdWx0ID0gcHN0cmR1cChx dW90ZV9pZGVudGlmaWVyKE5hbWVTdHIocmVsdHVwLT5yZWxuYW1lKSkpOworCQlSZWxlYXNlU3lz Q2FjaGUodHApOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCW5zcG5hbWUgPSBnZXRfbmFtZXNw YWNlX25hbWUocmVsdHVwLT5yZWxuYW1lc3BhY2UpOworCWlmIChuc3BuYW1lID09IE5VTEwpCisJ eworCQlPaWQJCQluc3BvaWQgPSByZWx0dXAtPnJlbG5hbWVzcGFjZTsKKworCQlSZWxlYXNlU3lz Q2FjaGUodHApOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJ TkVEX09CSkVDVCksCisJCQkJIGVycm1zZygic2NoZW1hIHdpdGggT0lEICV1IGRvZXMgbm90IGV4 aXN0IiwgbnNwb2lkKSwKKwkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJl bnRseSBkcm9wcGVkLiIpKSk7CisJfQorCisJcmVzdWx0ID0gcXVvdGVfcXVhbGlmaWVkX2lkZW50 aWZpZXIobnNwbmFtZSwgTmFtZVN0cihyZWx0dXAtPnJlbG5hbWUpKTsKKworCXBmcmVlKG5zcG5h bWUpOworCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgor ICogY29sbGVjdF9sb2NhbF9ub3RfbnVsbAorICoJCVNjYW4gcGdfY29uc3RyYWludCBvbmNlIGZv ciBsb2NhbGx5LWRlY2xhcmVkIE5PVCBOVUxMIGNvbnN0cmFpbnRzCisgKgkJb24gcmVsLCByZXR1 cm5pbmcgYSBwYWxsb2MnZCBhcnJheSBpbmRleGVkIGJ5IGF0dG51bSAoMS4ubmF0dHMpLgorICoK KyAqIEVudHJpZXMgd2l0aCBjb25vaWQ9PUludmFsaWRPaWQgbWVhbiAibm8gbG9jYWwgTk9UIE5V TEwgcm93IGZvciB0aGlzCisgKiBjb2x1bW4iLiAgV2hlbiB0aGUgY29uc3RyYWludCBuYW1lIGRv ZXMgbm90IG1hdGNoIHRoZSBhdXRvLWdlbmVyYXRlZAorICogcGF0dGVybiAiPHRhYmxlbmFtZT5f PGNvbHVtbm5hbWU+X25vdF9udWxsIiwgdGhlIGNvbnN0cmFpbnQgT0lEIGlzCisgKiBhcHBlbmRl ZCB0byAqc2tpcF9vaWRzIHNvIHRoZSBwb3N0LUNSRUFURSBjb25zdHJhaW50IGxvb3AgY2FuIGF2 b2lkCisgKiByZS1lbWl0dGluZyBpdCBhcyBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQg LSB0aGUgY29sdW1uLWVtaXQKKyAqIHBhc3Mgd2lsbCBwcm9kdWNlIGl0IGlubGluZSBhcyAiQ09O U1RSQUlOVCBuYW1lIE5PVCBOVUxMIiBpbnN0ZWFkLgorICovCitzdGF0aWMgTG9jYWxOb3ROdWxs RW50cnkgKgorY29sbGVjdF9sb2NhbF9ub3RfbnVsbChSZWxhdGlvbiByZWwsIExpc3QgKipza2lw X29pZHMpCit7CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJ aW50CQkJbmF0dHMgPSB0dXBkZXNjLT5uYXR0czsKKwlMb2NhbE5vdE51bGxFbnRyeSAqZW50cmll czsKKwljb25zdCBjaGFyICpyZWxuYW1lID0gUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKTsK KwlSZWxhdGlvbgljb25SZWw7CisJU3lzU2NhbkRlc2MgY29uU2NhbjsKKwlTY2FuS2V5RGF0YSBj b25LZXk7CisJSGVhcFR1cGxlCWNvblR1cDsKKworCWVudHJpZXMgPSAoTG9jYWxOb3ROdWxsRW50 cnkgKikgcGFsbG9jMChzaXplb2YoTG9jYWxOb3ROdWxsRW50cnkpICoKKwkJCQkJCQkJCQkJKG5h dHRzICsgMSkpOworCisJY29uUmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwg QWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgmY29uS2V5LAorCQkJCUFudW1fcGdfY29u c3RyYWludF9jb25yZWxpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJ CQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJlbGlkKHJlbCkpKTsKKwljb25TY2FuID0g c3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFJlbGlkVHlwaWROYW1lSW5kZXhJ ZCwKKwkJCQkJCQkJIHRydWUsIE5VTEwsIDEsICZjb25LZXkpOworCisJd2hpbGUgKEhlYXBUdXBs ZUlzVmFsaWQoY29uVHVwID0gc3lzdGFibGVfZ2V0bmV4dChjb25TY2FuKSkpCisJeworCQlGb3Jt X3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvblR1 cCk7CisJCURhdHVtCQljb25rZXlEYXQ7CisJCWJvb2wJCWNvbmtleU51bGw7CisJCUFycmF5VHlw ZSAgKmNvbmtleUFycjsKKwkJaW50MTYJICAgKmNvbmtleVZhbHM7CisJCWludAkJCWF0dG51bTsK KwkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0OworCQljaGFyCQlhdXRvbmFtZVtOQU1FREFUQUxFTl07 CisKKwkJaWYgKGNvbi0+Y29udHlwZSAhPSBDT05TVFJBSU5UX05PVE5VTEwpCisJCQljb250aW51 ZTsKKwkJaWYgKCFjb24tPmNvbmlzbG9jYWwpCisJCQljb250aW51ZTsKKworCQljb25rZXlEYXQg PSBoZWFwX2dldGF0dHIoY29uVHVwLCBBbnVtX3BnX2NvbnN0cmFpbnRfY29ua2V5LAorCQkJCQkJ CQkgUmVsYXRpb25HZXREZXNjcihjb25SZWwpLCAmY29ua2V5TnVsbCk7CisJCWlmIChjb25rZXlO dWxsKQorCQkJY29udGludWU7CisJCWNvbmtleUFyciA9IERhdHVtR2V0QXJyYXlUeXBlUChjb25r ZXlEYXQpOworCisJCS8qCisJCSAqIERlZmVuZCBhZ2FpbnN0IGEgbWFsZm9ybWVkIGNvbmtleTog YSBOT1QgTlVMTCBjb25zdHJhaW50IGlzIGFsd2F5cworCQkgKiBhIHNpbmdsZS1jb2x1bW4gMS1E IGludDIgYXJyYXksIGJ1dCBhIGNvcnJ1cHRlZCBjYXRhbG9nIG9yIGEgZnV0dXJlCisJCSAqIHBh dGNoIHRoYXQgc3RvcmVzIHdpZGVyIGNvbmtleXMgbXVzdG4ndCB0cmlwIHVzIGludG8gcmVhZGlu ZyBwYXN0CisJCSAqIHRoZSBhcnJheSBoZWFkZXIuCisJCSAqLworCQlpZiAoQVJSX05ESU0oY29u a2V5QXJyKSAhPSAxIHx8CisJCQlBUlJfRElNUyhjb25rZXlBcnIpWzBdIDwgMSB8fAorCQkJQVJS X0hBU05VTEwoY29ua2V5QXJyKSB8fAorCQkJQVJSX0VMRU1UWVBFKGNvbmtleUFycikgIT0gSU5U Mk9JRCkKKwkJCWNvbnRpbnVlOworCisJCWNvbmtleVZhbHMgPSAoaW50MTYgKikgQVJSX0RBVEFf UFRSKGNvbmtleUFycik7CisJCWF0dG51bSA9IGNvbmtleVZhbHNbMF07CisJCWlmIChhdHRudW0g PCAxIHx8IGF0dG51bSA+IG5hdHRzKQorCQkJY29udGludWU7CisKKwkJYXR0ID0gVHVwbGVEZXNj QXR0cih0dXBkZXNjLCBhdHRudW0gLSAxKTsKKwkJc25wcmludGYoYXV0b25hbWUsIHNpemVvZihh dXRvbmFtZSksICIlc18lc19ub3RfbnVsbCIsCisJCQkJIHJlbG5hbWUsIE5hbWVTdHIoYXR0LT5h dHRuYW1lKSk7CisKKwkJZW50cmllc1thdHRudW1dLmNvbm9pZCA9IGNvbi0+b2lkOworCQllbnRy aWVzW2F0dG51bV0ubmFtZSA9IHBzdHJkdXAoTmFtZVN0cihjb24tPmNvbm5hbWUpKTsKKwkJZW50 cmllc1thdHRudW1dLmlzX2F1dG8gPSAoc3RyY21wKE5hbWVTdHIoY29uLT5jb25uYW1lKSwgYXV0 b25hbWUpID09IDApOworCQllbnRyaWVzW2F0dG51bV0ubm9faW5oZXJpdCA9IGNvbi0+Y29ubm9p bmhlcml0OworCisJCS8qCisJCSAqIElubGluZSBlbWlzc2lvbiBvZiBOT1QgTlVMTCBvbmx5IGhh cHBlbnMgZm9yIGNvbHVtbnMgdGhhdCB0aGUKKwkJICogY29sdW1uIGxpc3QgYWN0dWFsbHkgZW1p dHMsIGkuZS4gYXR0aXNsb2NhbCBjb2x1bW5zLiAgRm9yIHRob3NlCisJCSAqIHRoZSBpbmxpbmUg cGFzcyBhbHJlYWR5IG1hdGVyaWFsaXplcyB0aGUgY29uc3RyYWludCAoZWl0aGVyIGFzCisJCSAq ICJDT05TVFJBSU5UIG5hbWUgTk9UIE5VTEwiIGZvciB1c2VyLW5hbWVkLCBvciBhcyBhIGJhcmUK KwkJICogIk5PVCBOVUxMIiB0aGF0IFBHIHJlLWNyZWF0ZXMgdW5kZXIgdGhlIGF1dG8tbmFtZSBw YXR0ZXJuKSwgc28KKwkJICogdGhlIHBvc3QtQ1JFQVRFIGNvbnN0cmFpbnQgbG9vcCBtdXN0IG5v dCBlbWl0IGEgc2Vjb25kCisJCSAqIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBmb3Ig dGhlIHNhbWUgY29sdW1uIC0gUEcgb25seQorCQkgKiBhbGxvd3Mgb25lIE5PVCBOVUxMIGNvbnN0 cmFpbnQgcGVyIGNvbHVtbiBhbmQgcmVqZWN0cyB0aGUKKwkJICogc2Vjb25kIHdpdGggYSBuYW1l IG1pc21hdGNoIHdoZW5ldmVyIHRoZSBzYXZlZCBhdXRvLW5hbWUgbm8KKwkJICogbG9uZ2VyIG1h dGNoZXMgdGhlIGN1cnJlbnQgdGFibGUgbmFtZSAoZS5nLiBhZnRlciBhIHJlbmFtZSwgb3IKKwkJ ICogd2hlbiBDUkVBVEUgVEFCTEUgdW5pcXVpZmllcyB0aGUgYXV0by1uYW1lIHRvIGRvZGdlIGEg c2VxdWVuY2UKKwkJICogY29sbGlzaW9uKS4gIEZvciBhIGxvY2FsbHktZGVjbGFyZWQgTk9UIE5V TEwgc2l0dGluZyBvbiBhbgorCQkgKiBpbmhlcml0ZWQgKG5vbi1sb2NhbCkgY29sdW1uIHRoZSBp bmxpbmUgcGF0aCBuZXZlciBmaXJlcywgc28KKwkJICogbGVhdmUgdGhlIE9JRCBvdXQgb2Ygc2tp cF9vaWRzIGFuZCBsZXQgdGhlIHBvc3QtQ1JFQVRFIGxvb3AKKwkJICogZW1pdCBBTFRFUiBUQUJM RSAuLi4gQUREIENPTlNUUkFJTlQuCisJCSAqLworCQlpZiAoYXR0LT5hdHRpc2xvY2FsICYmIHNr aXBfb2lkcyAhPSBOVUxMKQorCQkJKnNraXBfb2lkcyA9IGxhcHBlbmRfb2lkKCpza2lwX29pZHMs IGNvbi0+b2lkKTsKKwl9CisJc3lzdGFibGVfZW5kc2Nhbihjb25TY2FuKTsKKwl0YWJsZV9jbG9z ZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gZW50cmllczsKK30KKworLyoK KyAqIGZpbmRfYXR0cmRlZl90ZXh0CisgKgkJUmV0dXJuIHRoZSBkZXBhcnNlZCBERUZBVUxUL0dF TkVSQVRFRCBleHByZXNzaW9uIGZvciBhdHRudW0gb24gcmVsLAorICoJCW9yIE5VTEwgaWYgbm8g ZW50cnkgZXhpc3RzIGluIFR1cGxlQ29uc3RyLT5kZWZ2YWwuCisgKgorICogVGhlIGNhbGxlciBw YXNzZXMgYSBMaXN0ICoqIHNvIHRoYXQgdGhlIGRlcGFyc2UgY29udGV4dCBpcyBidWlsdCBsYXpp bHkKKyAqIGFuZCByZXVzZWQgYWNyb3NzIGNhbGxzIChkZXBhcnNlX2NvbnRleHRfZm9yIGlzIG5v dCBjaGVhcCkuICBSZXR1cm5lZAorICogc3RyaW5nIGlzIHBhbGxvYydkIGluIHRoZSBjdXJyZW50 IG1lbW9yeSBjb250ZXh0OyBjYWxsZXIgcGZyZWUncyBpdC4KKyAqLworc3RhdGljIGNoYXIgKgor ZmluZF9hdHRyZGVmX3RleHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG51bSwgTGlzdCAq KmRwY29udGV4dCkKK3sKKwlUdXBsZUNvbnN0ciAqY29uc3RyID0gUmVsYXRpb25HZXREZXNjcihy ZWwpLT5jb25zdHI7CisKKwlpZiAoY29uc3RyID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJ Zm9yIChpbnQgaiA9IDA7IGogPCBjb25zdHItPm51bV9kZWZ2YWw7IGorKykKKwl7CisJCWlmIChj b25zdHItPmRlZnZhbFtqXS5hZG51bSAhPSBhdHRudW0pCisJCQljb250aW51ZTsKKworCQlpZiAo KmRwY29udGV4dCA9PSBOSUwpCisJCQkqZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJCQkgUmVsYXRpb25HZXRSZWxp ZChyZWwpKTsKKworCQlyZXR1cm4gZGVwYXJzZV9leHByZXNzaW9uKHN0cmluZ1RvTm9kZShjb25z dHItPmRlZnZhbFtqXS5hZGJpbiksCisJCQkJCQkJCSAgKmRwY29udGV4dCwgZmFsc2UsIGZhbHNl KTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBhcHBlbmRfaW5saW5lX2NoZWNrX2Nv bnN0cmFpbnRzCisgKgkJRW1pdCBlYWNoIGxvY2FsbHktZGVjbGFyZWQgQ0hFQ0sgY29uc3RyYWlu dCBvbiByZWwgYXMKKyAqCQkiQ09OU1RSQUlOVCBuYW1lIDxwZ19nZXRfY29uc3RyYWludGRlZj4i LCBzZXBhcmF0ZWQgYnkgJywnIGZyb20gYW55CisgKgkJcHJldmlvdXNseS1lbWl0dGVkIGNvbHVt biBvciBjb25zdHJhaW50LgorICoKKyAqICpmaXJzdCB0cmFja3Mgd2hldGhlciBhbnl0aGluZyBo YXMgYmVlbiBlbWl0dGVkIG9uIHRoaXMgbGlzdCB5ZXQsIHNvIHRoZQorICogY2FsbGVyIGNhbiBj aGFpbiBjb2x1bW4gZW1pc3Npb24gYW5kIGNvbnN0cmFpbnQgZW1pc3Npb24gdGhyb3VnaCB0aGUg c2FtZQorICogYnVmZmVyLiAgSW5oZXJpdGVkIENIRUNLIGNvbnN0cmFpbnRzICghY29uaXNsb2Nh bCkgY29tZSBmcm9tIHRoZSBwYXJlbnQncworICogRERMIGFuZCBhcmVuJ3QgcmVwZWF0ZWQgaGVy ZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9pbmxpbmVfY2hlY2tfY29uc3RyYWludHMoU3Ry aW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgYm9vbCBwcmV0dHksCisJCQkJCQkJCWJvb2wgKmZp cnN0KQoreworCVJlbGF0aW9uCWNvblJlbDsKKwlTeXNTY2FuRGVzYyBjb25TY2FuOworCVNjYW5L ZXlEYXRhIGNvbktleTsKKwlIZWFwVHVwbGUJY29uVHVwOworCisJY29uUmVsID0gdGFibGVfb3Bl bihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgm Y29uS2V5LAorCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQlCVEVxdWFsU3Ry YXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJl bGlkKHJlbCkpKTsKKwljb25TY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3Ry YWludFJlbGlkVHlwaWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJIHRydWUsIE5VTEwsIDEsICZjb25L ZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoY29uVHVwID0gc3lzdGFibGVfZ2V0bmV4 dChjb25TY2FuKSkpCisJeworCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29u c3RyYWludCkgR0VUU1RSVUNUKGNvblR1cCk7CisJCURhdHVtCQlkZWZEYXR1bTsKKwkJY2hhcgkg ICAqZGVmYm9keTsKKworCQlpZiAoY29uLT5jb250eXBlICE9IENPTlNUUkFJTlRfQ0hFQ0spCisJ CQljb250aW51ZTsKKwkJaWYgKCFjb24tPmNvbmlzbG9jYWwpCisJCQljb250aW51ZTsKKworCQlp ZiAoISpmaXJzdCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywnKTsKKwkJaWYgKHBy ZXR0eSkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXG4gICAgIik7CisJCWVsc2Ug aWYgKCEqZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJCSpmaXJz dCA9IGZhbHNlOworCisJCWRlZkRhdHVtID0gT2lkRnVuY3Rpb25DYWxsMShGX1BHX0dFVF9DT05T VFJBSU5UREVGX09JRCwKKwkJCQkJCQkJCU9iamVjdElkR2V0RGF0dW0oY29uLT5vaWQpKTsKKwkJ ZGVmYm9keSA9IFRleHREYXR1bUdldENTdHJpbmcoZGVmRGF0dW0pOworCQlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgIkNPTlNUUkFJTlQgJXMgJXMiLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFt ZVN0cihjb24tPmNvbm5hbWUpKSwKKwkJCQkJCSBkZWZib2R5KTsKKwkJcGZyZWUoZGVmYm9keSk7 CisJfQorCXN5c3RhYmxlX2VuZHNjYW4oY29uU2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBB Y2Nlc3NTaGFyZUxvY2spOworfQorCisvKgorICogYXBwZW5kX2NvbHVtbl9kZWZzCisgKgkJQXBw ZW5kIHRoZSBjb21tYS1zZXBhcmF0ZWQgY29sdW1uIGRlZmluaXRpb24gbGlzdCBmb3IgYSB0YWJs ZS4KKyAqCisgKiBFbWl0cyBlYWNoIG5vbi1kcm9wcGVkLCBsb2NhbGx5LWRlY2xhcmVkIGNvbHVt biBhcworICoJCW5hbWUgdHlwZSBbQ09MTEFURSB4XSBbU1RPUkFHRSBzXSBbQ09NUFJFU1NJT04g Y10KKyAqCQlbR0VORVJBVEVEIC4uLiB8IERFRkFVTFQgZV0gW05PVCBOVUxMXQorICogZm9sbG93 ZWQgYnkgYW55IGxvY2FsbHktZGVjbGFyZWQgaW5saW5lIENIRUNLIGNvbnN0cmFpbnRzLiAgT3B0 aW9uYWwKKyAqIGNsYXVzZXMgYXJlIG9taXR0ZWQgd2hlbiB0aGVpciB2YWx1ZSBtYXRjaGVzIHdo YXQgdGhlIHN5c3RlbSB3b3VsZAorICogcmVhcHBseSBvbiByb3VuZC10cmlwIChlLmcuIHR5cGUt ZGVmYXVsdCBDT0xMQVRFLCB0eXBlLWRlZmF1bHQgU1RPUkFHRSkuCisgKi8KK3N0YXRpYyB2b2lk CithcHBlbmRfY29sdW1uX2RlZnMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgYm9vbCBw cmV0dHksCisJCQkJICAgYm9vbCBpbmNsdWRlX2NoZWNrLAorCQkJCSAgIGJvb2wgc2NoZW1hX3F1 YWxpZmllZCwKKwkJCQkgICBMb2NhbE5vdE51bGxFbnRyeSAqbm5fZW50cmllcykKK3sKKwlUdXBs ZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwlPaWQJCQliYXNlX25hbWVz cGFjZSA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbCk7CisJTGlzdAkgICAqZHBjb250ZXh0ID0g TklMOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVz Yy0+bmF0dHM7IGkrKykKKwl7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0 dHIodHVwZGVzYywgaSk7CisJCWNoYXIJICAgKnR5cHN0cjsKKworCQlpZiAoYXR0LT5hdHRpc2Ry b3BwZWQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBDb2x1bW5zIGluaGVyaXRlZCBmcm9t IGEgcGFyZW50IGFyZSBjb3ZlcmVkIGJ5IHRoZSBJTkhFUklUUyBjbGF1c2UsCisJCSAqIG5vdCB0 aGUgY29sdW1uIGxpc3QsIHVubGVzcyB0aGUgY2hpbGQgcmVkZWNsYXJlZCB0aGVtIGxvY2FsbHkK KwkJICogKGF0dGlzbG9jYWw9dHJ1ZSkuCisJCSAqLworCQlpZiAoIWF0dC0+YXR0aXNsb2NhbCkK KwkJCWNvbnRpbnVlOworCisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihi dWYsICcsJyk7CisJCWlmIChwcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg IlxuICAgICIpOworCQllbHNlIGlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihi dWYsICcgJyk7CisJCWZpcnN0ID0gZmFsc2U7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhi dWYsIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUpKSk7CisJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKGJ1ZiwgJyAnKTsKKworCQl0eXBzdHIgPSBmb3JtYXRfdHlwZV93aXRoX3R5 cGVtb2QoYXR0LT5hdHR0eXBpZCwgYXR0LT5hdHR0eXBtb2QpOworCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGJ1ZiwgdHlwc3RyKTsKKwkJcGZyZWUodHlwc3RyKTsKKworCQkvKiBDT0xMQVRFIGNs YXVzZSwgb25seSBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIHR5cGUncyBkZWZhdWx0LiAqLworCQlp ZiAoT2lkSXNWYWxpZChhdHQtPmF0dGNvbGxhdGlvbikgJiYKKwkJCWF0dC0+YXR0Y29sbGF0aW9u ICE9IGdldF90eXBjb2xsYXRpb24oYXR0LT5hdHR0eXBpZCkpCisJCQlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgIiBDT0xMQVRFICVzIiwKKwkJCQkJCQkgZ2VuZXJhdGVfY29sbGF0aW9uX25hbWUoYXR0 LT5hdHRjb2xsYXRpb24pKTsKKworCQkvKiBTVE9SQUdFIGNsYXVzZSwgb25seSBpZiBpdCBkaWZm ZXJzIGZyb20gdGhlIHR5cGUncyBkZWZhdWx0LiAqLworCQlpZiAoYXR0LT5hdHRzdG9yYWdlICE9 IGdldF90eXBzdG9yYWdlKGF0dC0+YXR0dHlwaWQpKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYs ICIgU1RPUkFHRSAlcyIsIHN0b3JhZ2VfbmFtZShhdHQtPmF0dHN0b3JhZ2UpKTsKKworCQkvKiBD T01QUkVTU0lPTiBjbGF1c2UsIG9ubHkgaWYgZXhwbGljaXRseSBzZXQgb24gdGhlIGNvbHVtbi4g Ki8KKwkJaWYgKENvbXByZXNzaW9uTWV0aG9kSXNWYWxpZChhdHQtPmF0dGNvbXByZXNzaW9uKSkK KwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIENPTVBSRVNTSU9OICVzIiwKKwkJCQkJCQkgR2V0 Q29tcHJlc3Npb25NZXRob2ROYW1lKGF0dC0+YXR0Y29tcHJlc3Npb24pKTsKKworCQkvKgorCQkg KiBMb29rIHVwIHRoZSBkZWZhdWx0L2dlbmVyYXRlZCBleHByZXNzaW9uIHRleHQgdXAgZnJvbnQ7 IGdlbmVyYXRlZAorCQkgKiBjb2x1bW5zIGhhdmUgYXR0aGFzZGVmPXRydWUgd2l0aCBhbiBlbnRy eSBpbiBwZ19hdHRyZGVmIGp1c3QgbGlrZQorCQkgKiByZWd1bGFyIGRlZmF1bHRzLgorCQkgKi8K KwkJeworCQkJY2hhcgkgICAqZGVmZXhwciA9IE5VTEw7CisKKwkJCWlmIChhdHQtPmF0dGhhc2Rl ZikKKwkJCQlkZWZleHByID0gZmluZF9hdHRyZGVmX3RleHQocmVsLCBhdHQtPmF0dG51bSwgJmRw Y29udGV4dCk7CisKKwkJCS8qIEdFTkVSQVRFRCAvIElERU5USVRZIC8gREVGQVVMVCBhcmUgbXV0 dWFsbHkgZXhjbHVzaXZlLiAqLworCQkJaWYgKGF0dC0+YXR0Z2VuZXJhdGVkID09IEFUVFJJQlVU RV9HRU5FUkFURURfU1RPUkVEICYmIGRlZmV4cHIpCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYs ICIgR0VORVJBVEVEIEFMV0FZUyBBUyAoJXMpIFNUT1JFRCIsIGRlZmV4cHIpOworCQkJZWxzZSBp ZiAoYXR0LT5hdHRnZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMICYmIGRl ZmV4cHIpCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgR0VORVJBVEVEIEFMV0FZUyBBUyAo JXMpIFZJUlRVQUwiLCBkZWZleHByKTsKKwkJCWVsc2UgaWYgKGF0dC0+YXR0aWRlbnRpdHkgPT0g QVRUUklCVVRFX0lERU5USVRZX0FMV0FZUyB8fAorCQkJCQkgYXR0LT5hdHRpZGVudGl0eSA9PSBB VFRSSUJVVEVfSURFTlRJVFlfQllfREVGQVVMVCkKKwkJCXsKKwkJCQljb25zdCBjaGFyICppZGtp bmQgPQorCQkJCQkoYXR0LT5hdHRpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlfQUxXQVlT KQorCQkJCQk/ICJBTFdBWVMiIDogIkJZIERFRkFVTFQiOworCQkJCU9pZAkJCXNlcWlkID0gZ2V0 SWRlbnRpdHlTZXF1ZW5jZShyZWwsIGF0dC0+YXR0bnVtLCB0cnVlKTsKKworCQkJCWFwcGVuZFN0 cmluZ0luZm8oYnVmLCAiIEdFTkVSQVRFRCAlcyBBUyBJREVOVElUWSIsIGlka2luZCk7CisKKwkJ CQkvKgorCQkJCSAqIEVtaXQgb25seSB0aGUgc2VxdWVuY2Ugb3B0aW9ucyB0aGF0IGRpZmZlciBm cm9tIHRoZWlyCisJCQkJICogZGVmYXVsdHMgLSBtaXJyb3JpbmcgcGdfZ2V0X2RhdGFiYXNlX2Rk bCdzIHBhdHRlcm4gb2YKKwkJCQkgKiBvbWl0dGluZyB2YWx1ZXMgdGhhdCB0aGUgc3lzdGVtIHdv dWxkIHJlYXBwbHkgb24gaXRzIG93bi4KKwkJCQkgKi8KKwkJCQlpZiAoT2lkSXNWYWxpZChzZXFp ZCkpCisJCQkJeworCQkJCQlIZWFwVHVwbGUJc2VxVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFNFUVJF TElELAorCQkJCQkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShzZXFpZCkpOworCisJCQkJCWlm IChIZWFwVHVwbGVJc1ZhbGlkKHNlcVR1cCkpCisJCQkJCXsKKwkJCQkJCUZvcm1fcGdfc2VxdWVu Y2Ugc2VxID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXFUdXApOworCQkJCQkJU3Ry aW5nSW5mb0RhdGEgb3B0czsKKwkJCQkJCWJvb2wJCWZpcnN0X29wdCA9IHRydWU7CisJCQkJCQlp bnQ2NAkJZGVmX21pbiwKKwkJCQkJCQkJCWRlZl9tYXgsCisJCQkJCQkJCQlkZWZfc3RhcnQ7CisJ CQkJCQlpbnQ2NAkJdHlwX21pbiwKKwkJCQkJCQkJCXR5cF9tYXg7CisKKwkJCQkJCS8qCisJCQkJ CQkgKiBQZXItdHlwZSBib3VuZHMgZm9yIHRoZSBzZXF1ZW5jZSdzIHVuZGVybHlpbmcKKwkJCQkJ CSAqIGludGVnZXIgdHlwZS4gIERlZmF1bHRzIHRvIGludDggaWYgdGhlIGNvbHVtbiB0eXBlCisJ CQkJCQkgKiBpcyBzb21ldGhpbmcgZWxzZSAoc2hvdWxkbid0IGhhcHBlbiBmb3IgSURFTlRJVFks CisJCQkJCQkgKiBidXQgYmUgZGVmZW5zaXZlKS4KKwkJCQkJCSAqLworCQkJCQkJc3dpdGNoIChh dHQtPmF0dHR5cGlkKQorCQkJCQkJeworCQkJCQkJCWNhc2UgSU5UMk9JRDoKKwkJCQkJCQkJdHlw X21pbiA9IFBHX0lOVDE2X01JTjsKKwkJCQkJCQkJdHlwX21heCA9IFBHX0lOVDE2X01BWDsKKwkJ CQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSBJTlQ0T0lEOgorCQkJCQkJCQl0eXBfbWluID0gUEdf SU5UMzJfTUlOOworCQkJCQkJCQl0eXBfbWF4ID0gUEdfSU5UMzJfTUFYOworCQkJCQkJCQlicmVh azsKKwkJCQkJCQlkZWZhdWx0OgorCQkJCQkJCQl0eXBfbWluID0gUEdfSU5UNjRfTUlOOworCQkJ CQkJCQl0eXBfbWF4ID0gUEdfSU5UNjRfTUFYOworCQkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwor CQkJCQkJaWYgKHNlcS0+c2VxaW5jcmVtZW50ID4gMCkKKwkJCQkJCXsKKwkJCQkJCQlkZWZfbWlu ID0gMTsKKwkJCQkJCQlkZWZfbWF4ID0gdHlwX21heDsKKwkJCQkJCQlkZWZfc3RhcnQgPSBkZWZf bWluOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCWRlZl9taW4gPSB0eXBf bWluOworCQkJCQkJCWRlZl9tYXggPSAtMTsKKwkJCQkJCQlkZWZfc3RhcnQgPSBkZWZfbWF4Owor CQkJCQkJfQorCisJCQkJCQlpbml0U3RyaW5nSW5mbygmb3B0cyk7CisKKwkJCQkJCS8qCisJCQkJ CQkgKiBTRVFVRU5DRSBOQU1FIC0gb21pdCB3aGVuIGl0IG1hdGNoZXMgdGhlIGltcGxpY2l0CisJ CQkJCQkgKiAiPHRhYmxlbmFtZT5fPGNvbHVtbm5hbWU+X3NlcSIgcGF0dGVybiBpbiB0aGUgc2Ft ZQorCQkJCQkJICogc2NoZW1hLCBzaW5jZSBDUkVBVEUgVEFCTEUgd2lsbCByZWdlbmVyYXRlIHRo YXQKKwkJCQkJCSAqIGV4YWN0IG5hbWUuICBUaGUgc2VxdWVuY2UgaXMgYW4gSU5URVJOQUwgZGVw ZW5kZW5jeQorCQkJCQkJICogb2YgdGhlIGNvbHVtbiwgc28gdGhlIGxvY2sgd2UgaG9sZCBvbiB0 aGUgdGFibGUKKwkJCQkJCSAqIGFsc28gcGlucyBpdCwgYnV0IHRoZSBsb29rdXAgaGVscGVyIHN0 aWxsIGRlZmVuZHMKKwkJCQkJCSAqIGFnYWluc3QgYSBtaXNzaW5nIHBnX2NsYXNzIHJvdy4KKwkJ CQkJCSAqLworCQkJCQkJeworCQkJCQkJCUhlYXBUdXBsZQlzZXFDbGFzc1R1cDsKKwkJCQkJCQlG b3JtX3BnX2NsYXNzIHNlcUNsYXNzOworCQkJCQkJCWNoYXIJCWF1dG9uYW1lW05BTUVEQVRBTEVO XTsKKworCQkJCQkJCXNlcUNsYXNzVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwKKwkJCQkJ CQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKHNlcWlkKSk7CisJCQkJCQkJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHNlcUNsYXNzVHVwKSkKKwkJCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJ CQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCQkJCQkJCSBlcnJtc2co ImlkZW50aXR5IHNlcXVlbmNlIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJCQkJ CQkJCXNlcWlkKSwKKwkJCQkJCQkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1 cnJlbnRseSBkcm9wcGVkLiIpKSk7CisJCQkJCQkJc2VxQ2xhc3MgPSAoRm9ybV9wZ19jbGFzcykg R0VUU1RSVUNUKHNlcUNsYXNzVHVwKTsKKworCQkJCQkJCXNucHJpbnRmKGF1dG9uYW1lLCBzaXpl b2YoYXV0b25hbWUpLCAiJXNfJXNfc2VxIiwKKwkJCQkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWwpLAorCQkJCQkJCQkJIE5hbWVTdHIoYXR0LT5hdHRuYW1lKSk7CisJCQkJCQkJaWYg KHNlcUNsYXNzLT5yZWxuYW1lc3BhY2UgIT0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsKSB8fAor CQkJCQkJCQlzdHJjbXAoTmFtZVN0cihzZXFDbGFzcy0+cmVsbmFtZSksIGF1dG9uYW1lKSAhPSAw KQorCQkJCQkJCXsKKwkJCQkJCQkJY2hhcgkgICAqc2VxUXVhbCA9CisJCQkJCQkJCQlsb29rdXBf cmVsbmFtZV9mb3JfZW1pdChzZXFpZCwKKwkJCQkJCQkJCQkJCQkJCXNjaGVtYV9xdWFsaWZpZWQs CisJCQkJCQkJCQkJCQkJCQliYXNlX25hbWVzcGFjZSk7CisKKwkJCQkJCQkJYXBwZW5kU3RyaW5n SW5mbygmb3B0cywgIiVzU0VRVUVOQ0UgTkFNRSAlcyIsCisJCQkJCQkJCQkJCQkgZmlyc3Rfb3B0 ID8gIiIgOiAiICIsIHNlcVF1YWwpOworCQkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJ CQkJcGZyZWUoc2VxUXVhbCk7CisJCQkJCQkJfQorCQkJCQkJCVJlbGVhc2VTeXNDYWNoZShzZXFD bGFzc1R1cCk7CisJCQkJCQl9CisKKwkJCQkJCWlmIChzZXEtPnNlcXN0YXJ0ICE9IGRlZl9zdGFy dCkKKwkJCQkJCXsKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAiJXNTVEFSVCBXSVRI ICIgSU5UNjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+ c2Vxc3RhcnQpOworCQkJCQkJCWZpcnN0X29wdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQkJaWYg KHNlcS0+c2VxaW5jcmVtZW50ICE9IDEpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5m bygmb3B0cywgIiVzSU5DUkVNRU5UIEJZICIgSU5UNjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmly c3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxaW5jcmVtZW50KTsKKwkJCQkJCQlmaXJzdF9vcHQg PSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNlcW1pbiAhPSBkZWZfbWluKQorCQkJ CQkJeworCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc01JTlZBTFVFICIgSU5UNjRf Rk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxbWluKTsK KwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNlcW1h eCAhPSBkZWZfbWF4KQorCQkJCQkJeworCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIl c01BWFZBTFVFICIgSU5UNjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAi ICIsIHNlcS0+c2VxbWF4KTsKKwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJ CQkJCWlmIChzZXEtPnNlcWNhY2hlICE9IDEpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5n SW5mbygmb3B0cywgIiVzQ0FDSEUgIiBJTlQ2NF9GT1JNQVQsCisJCQkJCQkJCQkJCSBmaXJzdF9v cHQgPyAiIiA6ICIgIiwgc2VxLT5zZXFjYWNoZSk7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7 CisJCQkJCQl9CisJCQkJCQlpZiAoc2VxLT5zZXFjeWNsZSkKKwkJCQkJCXsKKwkJCQkJCQlhcHBl bmRTdHJpbmdJbmZvKCZvcHRzLCAiJXNDWUNMRSIsIGZpcnN0X29wdCA/ICIiIDogIiAiKTsKKwkJ CQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCX0KKworCQkJCQkJaWYgKCFmaXJzdF9vcHQp CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgKCVzKSIsIG9wdHMuZGF0YSk7CisKKwkJ CQkJCXBmcmVlKG9wdHMuZGF0YSk7CisJCQkJCQlSZWxlYXNlU3lzQ2FjaGUoc2VxVHVwKTsKKwkJ CQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRlZmV4cHIpCisJCQkJYXBwZW5kU3RyaW5n SW5mbyhidWYsICIgREVGQVVMVCAlcyIsIGRlZmV4cHIpOworCisJCQlpZiAoZGVmZXhwcikKKwkJ CQlwZnJlZShkZWZleHByKTsKKwkJfQorCisJCWlmIChhdHQtPmF0dG5vdG51bGwpCisJCXsKKwkJ CUxvY2FsTm90TnVsbEVudHJ5ICpubiA9ICZubl9lbnRyaWVzW2F0dC0+YXR0bnVtXTsKKworCQkJ aWYgKG5uLT5uYW1lICE9IE5VTEwgJiYgIW5uLT5pc19hdXRvKQorCQkJCWFwcGVuZFN0cmluZ0lu Zm8oYnVmLCAiIENPTlNUUkFJTlQgJXMgTk9UIE5VTEwiLAorCQkJCQkJCQkgcXVvdGVfaWRlbnRp Zmllcihubi0+bmFtZSkpOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVm LCAiIE5PVCBOVUxMIik7CisJCQlpZiAobm4tPm5hbWUgIT0gTlVMTCAmJiBubi0+bm9faW5oZXJp dCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBOTyBJTkhFUklUIik7CisJCX0K Kwl9CisKKwkvKgorCSAqIFRhYmxlLWxldmVsIENIRUNLIGNvbnN0cmFpbnRzIC0gZW1pdHRlZCBp bmxpbmUgaW4gdGhlIENSRUFURSBUQUJMRSBib2R5CisJICogc28gdGhleSBhcHBlYXIgYWxvbmdz aWRlIHRoZSBjb2x1bW5zICh0aGUgcGdfZHVtcCBzaGFwZSkuICBUaGUKKwkgKiBjb25zdHJhaW50 IGxvb3AgbGF0ZXIgaW4gcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbCBza2lwcyBDSEVDSworCSAq IGNvbnN0cmFpbnRzIHRvIGF2b2lkIGRvdWJsZS1lbWlzc2lvbi4KKwkgKi8KKwlpZiAoaW5jbHVk ZV9jaGVjaykKKwkJYXBwZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50cyhidWYsIHJlbCwgcHJl dHR5LCAmZmlyc3QpOworfQorCisvKgorICogYXBwZW5kX3R5cGVkX2NvbHVtbl9vdmVycmlkZXMK KyAqCQlGb3IgYSB0eXBlZCB0YWJsZSAoQ1JFQVRFIFRBQkxFIC4uLiBPRiB0eXBlX25hbWUpLCBh cHBlbmQgdGhlCisgKgkJb3B0aW9uYWwgIihjb2wgV0lUSCBPUFRJT05TIC4uLiwgLi4uKSIgbGlz dCBjYXJyeWluZyBsb2NhbGx5CisgKgkJYXBwbGllZCBwZXItY29sdW1uIG92ZXJyaWRlcyAtIERF RkFVTFQsIE5PVCBOVUxMLCBhbmQgYW55IGxvY2FsbHkKKyAqCQlkZWNsYXJlZCBDSEVDSyBjb25z dHJhaW50cy4KKyAqCisgKiBDb2x1bW5zIHdob3NlIHR5cGUgaXMgZnVsbHkgZGljdGF0ZWQgYnkg cmVsb2Z0eXBlIGVtaXQgbm90aGluZy4gIFRoZQorICogcGFyZW50aGVzaXNlZCBsaXN0IGlzIHN1 cHByZXNzZWQgZW50aXJlbHkgd2hlbiBubyBjb2x1bW4gbmVlZHMgYW4KKyAqIG92ZXJyaWRlIGFu ZCB0aGVyZSBhcmUgbm8gbG9jYWxseS1kZWNsYXJlZCBDSEVDSyBjb25zdHJhaW50cywgbWF0Y2hp bmcKKyAqIHRoZSBjYW5vbmljYWwgIkNSRUFURSBUQUJMRSB4IE9GIHQ7IiBzaGFwZS4KKyAqLwor c3RhdGljIHZvaWQKK2FwcGVuZF90eXBlZF9jb2x1bW5fb3ZlcnJpZGVzKFN0cmluZ0luZm8gYnVm LCBSZWxhdGlvbiByZWwsIGJvb2wgcHJldHR5LAorCQkJCQkJCSAgYm9vbCBpbmNsdWRlX2NoZWNr LAorCQkJCQkJCSAgTG9jYWxOb3ROdWxsRW50cnkgKm5uX2VudHJpZXMpCit7CisJVHVwbGVEZXNj CXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJTGlzdAkgICAqZHBjb250ZXh0ID0g TklMOworCVN0cmluZ0luZm9EYXRhIGlubmVyOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlu aXRTdHJpbmdJbmZvKCZpbm5lcik7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHR1cGRlc2MtPm5h dHRzOyBpKyspCisJeworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1 cGRlc2MsIGkpOworCQljaGFyCSAgICpkZWZleHByID0gTlVMTDsKKwkJYm9vbAkJaGFzX2RlZmF1 bHQ7CisJCWJvb2wJCWhhc19ub3RudWxsOworCisJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCkKKwkJ CWNvbnRpbnVlOworCisJCWlmIChhdHQtPmF0dGhhc2RlZikKKwkJCWRlZmV4cHIgPSBmaW5kX2F0 dHJkZWZfdGV4dChyZWwsIGF0dC0+YXR0bnVtLCAmZHBjb250ZXh0KTsKKworCQloYXNfZGVmYXVs dCA9IChkZWZleHByICE9IE5VTEwpOworCQloYXNfbm90bnVsbCA9IGF0dC0+YXR0bm90bnVsbDsK KworCQlpZiAoIWhhc19kZWZhdWx0ICYmICFoYXNfbm90bnVsbCkKKwkJeworCQkJaWYgKGRlZmV4 cHIpCisJCQkJcGZyZWUoZGVmZXhwcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghZmly c3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmaW5uZXIsICcsJyk7CisJCWlmIChwcmV0dHkp CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZpbm5lciwgIlxuICAgICIpOworCQllbHNlIGlm ICghZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmaW5uZXIsICcgJyk7CisJCWZpcnN0 ID0gZmFsc2U7CisKKwkJYXBwZW5kU3RyaW5nSW5mbygmaW5uZXIsICIlcyBXSVRIIE9QVElPTlMi LAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUpKSk7CisJCWlm IChoYXNfZGVmYXVsdCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmlubmVyLCAiIERFRkFVTFQgJXMi LCBkZWZleHByKTsKKwkJaWYgKGhhc19ub3RudWxsKQorCQl7CisJCQlMb2NhbE5vdE51bGxFbnRy eSAqbm4gPSAmbm5fZW50cmllc1thdHQtPmF0dG51bV07CisKKwkJCWlmIChubi0+bmFtZSAhPSBO VUxMICYmICFubi0+aXNfYXV0bykKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZpbm5lciwgIiBDT05T VFJBSU5UICVzIE5PVCBOVUxMIiwKKwkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIobm4tPm5hbWUp KTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZpbm5lciwgIiBOT1QgTlVM TCIpOworCQkJaWYgKG5uLT5uYW1lICE9IE5VTEwgJiYgbm4tPm5vX2luaGVyaXQpCisJCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZygmaW5uZXIsICIgTk8gSU5IRVJJVCIpOworCQl9CisKKwkJaWYg KGRlZmV4cHIpCisJCQlwZnJlZShkZWZleHByKTsKKwl9CisKKwkvKgorCSAqIExvY2FsbHktZGVj bGFyZWQgQ0hFQ0sgY29uc3RyYWludHMgb24gYSB0eXBlZCB0YWJsZSBiZWxvbmcgaW4gdGhlCisJ ICogY29sdW1uLWxpc3QgcGFyZW50aGVzZXMsIHNhbWUgYXMgZm9yIGFuIHVudHlwZWQgdGFibGUu ICBUaGUgb3V0LW9mLWxpbmUKKwkgKiBjb25zdHJhaW50IGxvb3AgbGF0ZXIgc3RpbGwgc2tpcHMg Q0hFQ0tzLgorCSAqLworCWlmIChpbmNsdWRlX2NoZWNrKQorCQlhcHBlbmRfaW5saW5lX2NoZWNr X2NvbnN0cmFpbnRzKCZpbm5lciwgcmVsLCBwcmV0dHksICZmaXJzdCk7CisKKwlpZiAoIWZpcnN0 KQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIgKCIpOworCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKGJ1ZiwgaW5uZXIuZGF0YSk7CisJCWlmIChwcmV0dHkpCisJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlxuKSIpOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihidWYsICcpJyk7CisJfQorCXBmcmVlKGlubmVyLmRhdGEpOworfQorCisvKgorICogYXBw ZW5kX3N0bXQKKyAqCQlQdXNoIGN0eC0+YnVmIG9udG8gY3R4LT5zdGF0ZW1lbnRzLgorICoKKyAq IFVzZWQgZm9yIGFsbCBEREwgZW1pc3Npb25zLiAgV2hlbiBzY2hlbWFfcXVhbGlmaWVkIGlzIGZh bHNlLCB0aGUKKyAqIGFjdGl2ZSBzZWFyY2hfcGF0aCBoYXMgYWxyZWFkeSBiZWVuIG5hcnJvd2Vk IHRvIHRoZSBiYXNlIHNjaGVtYSwgc28KKyAqIHJ1bGV1dGlscyBoZWxwZXJzIChwZ19nZXRfaW5k ZXhkZWZfZGRsLCBwZ19nZXRfcnVsZWRlZl9kZGwsCisgKiBwZ19nZXRfY29uc3RyYWludGRlZl9i b2R5LCBwZ19nZXRfc3RhdGlzdGljc29iamRlZl9kZGwpIHByb2R1Y2UKKyAqIHVucXVhbGlmaWVk IG5hbWVzIGZvciBzYW1lLXNjaGVtYSBvYmplY3RzIGF1dG9tYXRpY2FsbHkuCisgKi8KK3N0YXRp YyB2b2lkCithcHBlbmRfc3RtdChUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwljdHgtPnN0YXRl bWVudHMgPSBsYXBwZW5kKGN0eC0+c3RhdGVtZW50cywgcHN0cmR1cChjdHgtPmJ1Zi5kYXRhKSk7 Cit9CisKKy8qCisgKiBlbWl0X2NyZWF0ZV90YWJsZV9zdG10CisgKgkJQnVpbGQgdGhlIGxlYWRp bmcgQ1JFQVRFIFRBQkxFIHN0YXRlbWVudCwgaW5jbHVkaW5nIHBlcnNpc3RlbmNlCisgKgkJKFRF TVBPUkFSWSAvIFVOTE9HR0VEKSwgYm9keSAoY29sdW1uIGxpc3QgLyBPRiB0eXBlX25hbWUgLwor ICoJCVBBUlRJVElPTiBPRiBwYXJlbnQpLCBJTkhFUklUUywgUEFSVElUSU9OIEJZLCBVU0lORyBt ZXRob2QsCisgKgkJV0lUSCAocmVsb3B0aW9ucyksIFRBQkxFU1BBQ0UsIGFuZCBPTiBDT01NSVQu CisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRhYmxlRGRsQ29udGV4 dCAqY3R4KQoreworCVJlbGF0aW9uCXJlbCA9IGN0eC0+cmVsOworCWNoYXIJCXJlbHBlcnNpc3Rl bmNlID0gcmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlOworCWNoYXIJCXJlbGtpbmQgPSByZWwt PnJkX3JlbC0+cmVsa2luZDsKKwlib29sCQlpc190eXBlZCA9IE9pZElzVmFsaWQocmVsLT5yZF9y ZWwtPnJlbG9mdHlwZSk7CisJSGVhcFR1cGxlCWNsYXNzdHVwOworCURhdHVtCQlyZWxvcHREYXR1 bTsKKwlib29sCQlyZWxvcHRJc251bGw7CisKKwljbGFzc3R1cCA9IFNlYXJjaFN5c0NhY2hlMShS RUxPSUQsIE9iamVjdElkR2V0RGF0dW0oY3R4LT5yZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNW YWxpZChjbGFzc3R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBy ZWxhdGlvbiAldSIsIGN0eC0+cmVsaWQpOworCisJcmVsb3B0RGF0dW0gPSBTeXNDYWNoZUdldEF0 dHIoUkVMT0lELCBjbGFzc3R1cCwKKwkJCQkJCQkJICBBbnVtX3BnX2NsYXNzX3JlbG9wdGlvbnMs ICZyZWxvcHRJc251bGwpOworCisJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICJDUkVBVEUgIik7CisJaWYgKHJlbHBlcnNpc3Rl bmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0 eC0+YnVmLCAiVEVNUE9SQVJZICIpOworCWVsc2UgaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBF UlNJU1RFTkNFX1VOTE9HR0VEKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1Ziwg IlVOTE9HR0VEICIpOworCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiVEFCTEUgJXMiLCBj dHgtPnF1YWxuYW1lKTsKKworCWlmIChyZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb24pCisJewor CQlPaWQJCQlwYXJlbnRPaWQgPSBnZXRfcGFydGl0aW9uX3BhcmVudChjdHgtPnJlbGlkLCB0cnVl KTsKKwkJY2hhcgkgICAqcGFyZW50UXVhbCA9IGxvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0KHBhcmVu dE9pZCwKKwkJCQkJCQkJCQkJCQkJIGN0eC0+c2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCQkJ CQkJIGN0eC0+YmFzZV9uYW1lc3BhY2UpOworCQljaGFyCSAgICpwYXJlbnRSZWxuYW1lID0gZ2V0 X3JlbF9uYW1lKHBhcmVudE9pZCk7CisJCURhdHVtCQlib3VuZERhdHVtOworCQlib29sCQlib3Vu ZElzbnVsbDsKKwkJY2hhcgkgICAqZm9yVmFsdWVzID0gTlVMTDsKKwkJY2hhcgkgICAqYm91bmRT dHIgPSBOVUxMOworCisJCWlmIChwYXJlbnRSZWxuYW1lID09IE5VTEwpCisJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCQkgZXJy bXNnKCJwYXJ0aXRpb24gcGFyZW50IHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJ CQlwYXJlbnRPaWQpLAorCQkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJl bnRseSBkcm9wcGVkLiIpKSk7CisKKwkJYm91bmREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxP SUQsIGNsYXNzdHVwLAorCQkJCQkJCQkJIEFudW1fcGdfY2xhc3NfcmVscGFydGJvdW5kLCAmYm91 bmRJc251bGwpOworCQlpZiAoIWJvdW5kSXNudWxsKQorCQl7CisJCQlOb2RlCSAgICpib3VuZE5v ZGU7CisJCQlMaXN0CSAgICpkcGNvbnRleHQ7CisKKwkJCWJvdW5kU3RyID0gVGV4dERhdHVtR2V0 Q1N0cmluZyhib3VuZERhdHVtKTsKKwkJCWJvdW5kTm9kZSA9IHN0cmluZ1RvTm9kZShib3VuZFN0 cik7CisJCQlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKHBhcmVudFJlbG5hbWUsIHBh cmVudE9pZCk7CisJCQlmb3JWYWx1ZXMgPSBkZXBhcnNlX2V4cHJlc3Npb24oYm91bmROb2RlLCBk cGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisJCX0KKworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgt PmJ1ZiwgIiBQQVJUSVRJT04gT0YgJXMgJXMiLAorCQkJCQkJIHBhcmVudFF1YWwsIGZvclZhbHVl cyA/IGZvclZhbHVlcyA6ICJERUZBVUxUIik7CisJCWlmIChmb3JWYWx1ZXMpCisJCQlwZnJlZShm b3JWYWx1ZXMpOworCQlpZiAoYm91bmRTdHIpCisJCQlwZnJlZShib3VuZFN0cik7CisJCXBmcmVl KHBhcmVudFF1YWwpOworCQlwZnJlZShwYXJlbnRSZWxuYW1lKTsKKwl9CisJZWxzZSBpZiAoaXNf dHlwZWQpCisJeworCQljaGFyCSAgICp0eXBuYW1lID0gZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVk KHJlbC0+cmRfcmVsLT5yZWxvZnR5cGUpOworCisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVm LCAiIE9GICVzIiwgdHlwbmFtZSk7CisJCXBmcmVlKHR5cG5hbWUpOworCisJCWFwcGVuZF90eXBl ZF9jb2x1bW5fb3ZlcnJpZGVzKCZjdHgtPmJ1ZiwgcmVsLCBjdHgtPnByZXR0eSwKKwkJCQkJCQkJ CSAgaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX0NIRUNLKSwKKwkJCQkJCQkJ CSAgY3R4LT5ubl9lbnRyaWVzKTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdAkgICAqcGFyZW50czsK KwkJTGlzdENlbGwgICAqbGM7CisJCWJvb2wJCWZpcnN0OworCisJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmN0eC0+YnVmLCAiICgiKTsKKworCQlhcHBlbmRfY29sdW1uX2RlZnMoJmN0eC0+YnVm LCByZWwsIGN0eC0+cHJldHR5LAorCQkJCQkJICAgaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxF X0RETF9LSU5EX0NIRUNLKSwKKwkJCQkJCSAgIGN0eC0+c2NoZW1hX3F1YWxpZmllZCwgY3R4LT5u bl9lbnRyaWVzKTsKKworCQlpZiAoY3R4LT5wcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZjdHgtPmJ1ZiwgIlxuKSIpOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigm Y3R4LT5idWYsICcpJyk7CisKKwkJcGFyZW50cyA9IGZpbmRfaW5oZXJpdGFuY2VfcGFyZW50cyhj dHgtPnJlbGlkLCBOb0xvY2spOworCQlpZiAocGFyZW50cyAhPSBOSUwpCisJCXsKKwkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiIElOSEVSSVRTICgiKTsKKwkJCWZpcnN0ID0g dHJ1ZTsKKwkJCWZvcmVhY2gobGMsIHBhcmVudHMpCisJCQl7CisJCQkJT2lkCQkJcG9pZCA9IGxm aXJzdF9vaWQobGMpOworCQkJCWNoYXIJICAgKnBuYW1lID0gbG9va3VwX3JlbG5hbWVfZm9yX2Vt aXQocG9pZCwKKwkJCQkJCQkJCQkJCQkJCWN0eC0+c2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJ CQkJCQkJCWN0eC0+YmFzZV9uYW1lc3BhY2UpOworCisJCQkJaWYgKCFmaXJzdCkKKwkJCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICIsICIpOworCQkJCWZpcnN0ID0gZmFsc2U7 CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsIHBuYW1lKTsKKwkJCQlwZnJl ZShwbmFtZSk7CisJCQl9CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5idWYsICcpJyk7 CisJCQlsaXN0X2ZyZWUocGFyZW50cyk7CisJCX0KKwl9CisKKwlpZiAocmVsa2luZCA9PSBSRUxL SU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCXsKKwkJRGF0dW0JCXBhcnRrZXlEYXR1bTsKKwkJY2hh cgkgICAqcGFydGtleTsKKworCQlwYXJ0a2V5RGF0dW0gPSBPaWRGdW5jdGlvbkNhbGwxKEZfUEdf R0VUX1BBUlRLRVlERUYsCisJCQkJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSk7 CisJCXBhcnRrZXkgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHBhcnRrZXlEYXR1bSk7CisJCWFwcGVu ZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiIFBBUlRJVElPTiBCWSAlcyIsIHBhcnRrZXkpOworCQlw ZnJlZShwYXJ0a2V5KTsKKwl9CisKKwlpZiAoT2lkSXNWYWxpZChyZWwtPnJkX3JlbC0+cmVsYW0p ICYmCisJCXJlbC0+cmRfcmVsLT5yZWxhbSAhPSBIRUFQX1RBQkxFX0FNX09JRCkKKwl7CisJCWNo YXIJICAgKmFtbmFtZSA9IGdldF9hbV9uYW1lKHJlbC0+cmRfcmVsLT5yZWxhbSk7CisKKwkJaWYg KGFtbmFtZSAhPSBOVUxMKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiBV U0lORyAlcyIsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoYW1uYW1lKSk7CisJCQlwZnJlZShh bW5hbWUpOworCQl9CisJfQorCisJaWYgKCFyZWxvcHRJc251bGwpCisJeworCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIiBXSVRIICgiKTsKKwkJZ2V0X3JlbG9wdGlvbnMoJmN0 eC0+YnVmLCByZWxvcHREYXR1bSk7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjdHgtPmJ1Ziwg JyknKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUoY2xhc3N0dXApOworCisJaWYgKCFjdHgtPm5v X3RhYmxlc3BhY2UgJiYgT2lkSXNWYWxpZChyZWwtPnJkX3JlbC0+cmVsdGFibGVzcGFjZSkpCisJ eworCQljaGFyCSAgICp0c25hbWUgPSBnZXRfdGFibGVzcGFjZV9uYW1lKHJlbC0+cmRfcmVsLT5y ZWx0YWJsZXNwYWNlKTsKKworCQlpZiAodHNuYW1lICE9IE5VTEwpCisJCXsKKwkJCWFwcGVuZFN0 cmluZ0luZm8oJmN0eC0+YnVmLCAiIFRBQkxFU1BBQ0UgJXMiLAorCQkJCQkJCSBxdW90ZV9pZGVu dGlmaWVyKHRzbmFtZSkpOworCQkJcGZyZWUodHNuYW1lKTsKKwkJfQorCX0KKworCWlmIChyZWxw ZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCXsKKwkJT25Db21taXRBY3Rpb24g b2MgPSBnZXRfb25fY29tbWl0X2FjdGlvbihjdHgtPnJlbGlkKTsKKworCQlpZiAob2MgPT0gT05D T01NSVRfREVMRVRFX1JPV1MpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1Ziwg IiBPTiBDT01NSVQgREVMRVRFIFJPV1MiKTsKKwkJZWxzZSBpZiAob2MgPT0gT05DT01NSVRfRFJP UCkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiIE9OIENPTU1JVCBEUk9Q Iik7CisJfQorCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmN0eC0+YnVmLCAnOycpOworCWFwcGVu ZF9zdG10KGN0eCk7Cit9CisKKy8qCisgKiBlbWl0X293bmVyX3N0bXQKKyAqCQlBTFRFUiBUQUJM RSBxdWFsbmFtZSBPV05FUiBUTyByb2xlLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9vd25lcl9z dG10KFRhYmxlRGRsQ29udGV4dCAqY3R4KQoreworCWNoYXIJICAgKm93bmVyOworCisJaWYgKGN0 eC0+bm9fb3duZXIpCisJCXJldHVybjsKKworCW93bmVyID0gR2V0VXNlck5hbWVGcm9tSWQoY3R4 LT5yZWwtPnJkX3JlbC0+cmVsb3duZXIsIGZhbHNlKTsKKwlyZXNldFN0cmluZ0luZm8oJmN0eC0+ YnVmKTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIkFMVEVSIFRBQkxFICVzIE9XTkVS IFRPICVzOyIsCisJCQkJCSBjdHgtPnF1YWxuYW1lLCBxdW90ZV9pZGVudGlmaWVyKG93bmVyKSk7 CisJYXBwZW5kX3N0bXQoY3R4KTsKKwlwZnJlZShvd25lcik7Cit9CisKKy8qCisgKiBlbWl0X2No aWxkX2RlZmF1bHRfb3ZlcnJpZGVzCisgKgkJQUxURVIgVEFCTEUgcXVhbG5hbWUgQUxURVIgQ09M VU1OIGNvbCBTRVQgREVGQVVMVCBleHByIC0gb25lIHBlcgorICoJCWluaGVyaXRlZCAoYXR0aXNs b2NhbD1mYWxzZSkgbm9uLWdlbmVyYXRlZCBjb2x1bW4gY2FycnlpbmcgYQorICoJCWxvY2FsbHkt c2V0IGRlZmF1bHQuICBHZW5lcmF0ZWQgY29sdW1ucyBhcmUgc2tpcHBlZDogdGhlaXIKKyAqCQll eHByZXNzaW9uIGlzIGluaGVyaXRlZCBhdXRvbWF0aWNhbGx5IGFuZCBTRVQgREVGQVVMVCB3b3Vs ZAorICoJCWZhaWwgYXQgcmVwbGF5LgorICovCitzdGF0aWMgdm9pZAorZW1pdF9jaGlsZF9kZWZh dWx0X292ZXJyaWRlcyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlUdXBsZURlc2MJdHVwZGVz YyA9IFJlbGF0aW9uR2V0RGVzY3IoY3R4LT5yZWwpOworCUxpc3QJICAgKmRwY29udGV4dCA9IE5J TDsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwl7CisJCUZv cm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CisJCWNoYXIJ ICAgKmRlZnN0cjsKKworCQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQgfHwgYXR0LT5hdHRpc2xvY2Fs IHx8ICFhdHQtPmF0dGhhc2RlZikKKwkJCWNvbnRpbnVlOworCQlpZiAoYXR0LT5hdHRnZW5lcmF0 ZWQgIT0gJ1wwJykKKwkJCWNvbnRpbnVlOworCisJCWRlZnN0ciA9IGZpbmRfYXR0cmRlZl90ZXh0 KGN0eC0+cmVsLCBhdHQtPmF0dG51bSwgJmRwY29udGV4dCk7CisJCWlmIChkZWZzdHIgPT0gTlVM TCkKKwkJCWNvbnRpbnVlOworCisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBl bmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCSAiQUxURVIgVEFCTEUgJXMgQUxURVIgQ09M VU1OICVzIFNFVCBERUZBVUxUICVzOyIsCisJCQkJCQkgY3R4LT5xdWFsbmFtZSwKKwkJCQkJCSBx dW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYXR0LT5hdHRuYW1lKSksCisJCQkJCQkgZGVmc3RyKTsK KwkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJcGZyZWUoZGVmc3RyKTsKKwl9Cit9CisKKy8qCisgKiBl bWl0X2F0dG9wdGlvbnMKKyAqCQlBTFRFUiBUQUJMRSBxdWFsbmFtZSBBTFRFUiBDT0xVTU4gY29s IFNFVCAoLi4uKSAtIG9uZSBwZXIgY29sdW1uCisgKgkJd2l0aCBub24tbnVsbCBwZ19hdHRyaWJ1 dGUuYXR0b3B0aW9ucy4gIFRoZSBpbmxpbmUgZm9ybSBvZiB0aGVzZQorICoJCW9wdGlvbnMgaXNu J3QgYXZhaWxhYmxlIGluIENSRUFURSBUQUJMRSwgc28gdGhleSBjb21lIG91dCBoZXJlLgorICov CitzdGF0aWMgdm9pZAorZW1pdF9hdHRvcHRpb25zKFRhYmxlRGRsQ29udGV4dCAqY3R4KQorewor CVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihjdHgtPnJlbCk7CisKKwlmb3Ig KGludCBpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBpKyspCisJeworCQlGb3JtX3BnX2F0dHJp YnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpOworCQlIZWFwVHVwbGUJYXR0VHVw OworCQlEYXR1bQkJb3B0RGF0dW07CisJCWJvb2wJCW9wdElzbnVsbDsKKworCQlpZiAoYXR0LT5h dHRpc2Ryb3BwZWQpCisJCQljb250aW51ZTsKKworCQlhdHRUdXAgPSBTZWFyY2hTeXNDYWNoZTIo QVRUTlVNLAorCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSwKKwkJCQkJCQkJ IEludDE2R2V0RGF0dW0oYXR0LT5hdHRudW0pKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0 dFR1cCkpCisJCQljb250aW51ZTsKKworCQlvcHREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihBVFRO VU0sIGF0dFR1cCwKKwkJCQkJCQkJICAgQW51bV9wZ19hdHRyaWJ1dGVfYXR0b3B0aW9ucywgJm9w dElzbnVsbCk7CisJCWlmICghb3B0SXNudWxsKQorCQl7CisJCQlyZXNldFN0cmluZ0luZm8oJmN0 eC0+YnVmKTsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCSAiQUxURVIg VEFCTEUgJXMgQUxURVIgQ09MVU1OICVzIFNFVCAoIiwKKwkJCQkJCQkgY3R4LT5xdWFsbmFtZSwK KwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGF0dC0+YXR0bmFtZSkpKTsKKwkJCWdl dF9yZWxvcHRpb25zKCZjdHgtPmJ1Ziwgb3B0RGF0dW0pOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmY3R4LT5idWYsICIpOyIpOworCQkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJfQorCQlSZWxl YXNlU3lzQ2FjaGUoYXR0VHVwKTsKKwl9Cit9CisKKy8qCisgKiBlbWl0X2luZGV4ZXMKKyAqCQlD UkVBVEUgSU5ERVggcGVyIG5vbi1jb25zdHJhaW50LWJhY2tlZCBpbmRleCBvbiB0aGUgcmVsYXRp b24uCisgKgkJSW5kZXhlcyB0aGF0IGJhY2sgUEsgLyBVTklRVUUgLyBFWENMVURFIGNvbnN0cmFp bnRzIGFyZSBlbWl0dGVkCisgKgkJb3V0LW9mLWxpbmUgYnkgZW1pdF9sb2NhbF9jb25zdHJhaW50 cyAodGhlIEFMVEVSIFRBQkxFIC4uLiBBREQKKyAqCQlDT05TVFJBSU5UIHN0YXRlbWVudCBjcmVh dGVzIHRoZSBpbmRleCBpbXBsaWNpdGx5KS4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfaW5kZXhl cyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlMaXN0CSAgICppbmRleG9pZHM7CisJTGlzdENl bGwgICAqbGM7CisKKwlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9J TkRFWCkpCisJCXJldHVybjsKKworCWluZGV4b2lkcyA9IFJlbGF0aW9uR2V0SW5kZXhMaXN0KGN0 eC0+cmVsKTsKKwlmb3JlYWNoKGxjLCBpbmRleG9pZHMpCisJeworCQlPaWQJCQlpZHhvaWQgPSBs Zmlyc3Rfb2lkKGxjKTsKKwkJY2hhcgkgICAqaWR4ZGVmOworCisJCWlmIChPaWRJc1ZhbGlkKGdl dF9pbmRleF9jb25zdHJhaW50KGlkeG9pZCkpKQorCQkJY29udGludWU7CisKKwkJaWR4ZGVmID0g cGdfZ2V0X2luZGV4ZGVmX2RkbChpZHhvaWQpOworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVm KTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsICIlczsiLCBpZHhkZWYpOworCQlhcHBl bmRfc3RtdChjdHgpOworCQlwZnJlZShpZHhkZWYpOworCX0KKwlsaXN0X2ZyZWUoaW5kZXhvaWRz KTsKK30KKworLyoKKyAqIGVtaXRfbG9jYWxfY29uc3RyYWludHMKKyAqCQlBTFRFUiBUQUJMRSAu Li4gQUREIENPTlNUUkFJTlQgZm9yIGVhY2ggbG9jYWxseS1kZWZpbmVkIGNvbnN0cmFpbnQKKyAq CQlvbiB0aGUgcmVsYXRpb24uICBJbmhlcml0ZWQgY29uc3RyYWludHMgKGNvbmlzbG9jYWw9ZmFs c2UpIGNvbWUKKyAqCQlmcm9tIHRoZSBwYXJlbnQncyBEREwuICBDSEVDSyBjb25zdHJhaW50cyBh cmUgZW1pdHRlZCBpbmxpbmUgZm9yCisgKgkJcmVndWxhci90eXBlZCB0YWJsZXMgKHNraXAgaGVy ZSkgYnV0IG91dC1vZi1saW5lIGZvciBwYXJ0aXRpb24KKyAqCQljaGlsZHJlbiAobm8gY29sdW1u IGxpc3QgdG8gbGl2ZSBpbikuICBMb2NhbCBOT1QgTlVMTAorICoJCWNvbnN0cmFpbnRzIG9uIGF0 dGlzbG9jYWwgY29sdW1ucyAtIHdoZXRoZXIgdXNlci1uYW1lZCBvcgorICoJCW1hdGNoaW5nIHRo ZSBhdXRvLW5hbWUgcGF0dGVybiAtIGFyZSBlbWl0dGVkIGlubGluZSBieSB0aGUKKyAqCQljb2x1 bW4tZW1pdCBoZWxwZXJzIGFuZCBhcmUgc2tpcHBlZCB2aWEgc2tpcF9ub3RudWxsX29pZHMsCisg KgkJYmVjYXVzZSBQRyBvbmx5IGFsbG93cyBvbmUgTk9UIE5VTEwgcGVyIGNvbHVtbiBhbmQgd291 bGQgcmVqZWN0CisgKgkJYSBzZWNvbmQgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5ULiAg UGFydGl0aW9uIGNoaWxkcmVuCisgKgkJaGF2ZSBubyBjb2x1bW4gbGlzdCwgc28gdGhlaXIgTk9U IE5VTExzIGZhbGwgdGhyb3VnaCBoZXJlLgorICoKKyAqCQlFYWNoIGNvbnR5cGUgaXMgZ2F0ZWQg b24gdGhlIG1hdGNoaW5nIGtpbmQgaW4gdGhlIG9ubHkgLyBleGNlcHQKKyAqCQl2b2NhYnVsYXJ5 LCBzbyBjYWxsZXJzIGNhbiBwcm9kdWNlIGUuZy4gYW4gRkstb25seSBwYXNzCisgKgkJKG9ubHkg PT4gJ2ZvcmVpZ25fa2V5Jykgb3IgYSBwdWIvc3ViIGNsb25lIHRoYXQga2VlcHMgb25seQorICoJ CXRoZSBwcmltYXJ5IGtleSAoZXhjZXB0ID0+ICd1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXksZXhj bHVzaW9uJykuCisgKgkJTk9UIE5VTEwgaXMgaW50ZW50aW9uYWxseSBub3QgaW4gdGhlIHZvY2Fi dWxhcnkgLSBhbHdheXMgZW1pdHRlZAorICoJCXNvIGNsb25lZCBzY2hlbWFzIGRvbid0IHNpbGVu dGx5IGFjY2VwdCBOVUxMcyB0aGUgc291cmNlIHdvdWxkCisgKgkJaGF2ZSByZWplY3RlZC4KKyAq Lworc3RhdGljIHZvaWQKK2VtaXRfbG9jYWxfY29uc3RyYWludHMoVGFibGVEZGxDb250ZXh0ICpj dHgpCit7CisJUmVsYXRpb24JY29uUmVsOworCVN5c1NjYW5EZXNjIGNvblNjYW47CisJU2Nhbktl eURhdGEgY29uS2V5OworCUhlYXBUdXBsZQljb25UdXA7CisJYm9vbAkJaXNfcGFydGl0aW9uID0g Y3R4LT5yZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb247CisKKwljb25SZWwgPSB0YWJsZV9vcGVu KENvbnN0cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0KCZj b25LZXksCisJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlkLAorCQkJCUJURXF1YWxTdHJh dGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsK Kwljb25TY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFJlbGlkVHlw aWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJIHRydWUsIE5VTEwsIDEsICZjb25LZXkpOworCisJd2hp bGUgKEhlYXBUdXBsZUlzVmFsaWQoY29uVHVwID0gc3lzdGFibGVfZ2V0bmV4dChjb25TY2FuKSkp CisJeworCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VU U1RSVUNUKGNvblR1cCk7CisKKwkJaWYgKCFjb24tPmNvbmlzbG9jYWwpCisJCQljb250aW51ZTsK KworCQkvKgorCQkgKiBFYWNoIGNvbnR5cGUgaXMgZ2F0ZWQgb24gaXRzIGtpbmQgaW4gdGhlIG9u bHkgLyBleGNlcHQKKwkJICogdm9jYWJ1bGFyeS4gIENIRUNLIGlzIGFsc28gc2tpcHBlZCBmb3Ig bm9uLXBhcnRpdGlvbiByZWxhdGlvbnMKKwkJICogYmVjYXVzZSBhcHBlbmRfaW5saW5lX2NoZWNr X2NvbnN0cmFpbnRzIGVtaXRzIHRob3NlIGlubGluZSBpbgorCQkgKiB0aGUgQ1JFQVRFIFRBQkxF IGJvZHk7IHBhcnRpdGlvbiBjaGlsZHJlbiBoYXZlIG5vIGNvbHVtbiBsaXN0CisJCSAqIHRvIGxp dmUgaW4sIHNvIHRoZXkgY29tZSB0aHJvdWdoIHRoaXMgbG9vcC4gIE5PVCBOVUxMIGlzIG5vdCBh CisJCSAqIGZpbHRlcmFibGUga2luZCAtIGVtaXR0ZWQgdW5jb25kaXRpb25hbGx5IHRvIGF2b2lk IHByb2R1Y2luZworCQkgKiBzY2hlbWFzIHRoYXQgc2lsZW50bHkgYWNjZXB0IE5VTExzIHRoZSBz b3VyY2Ugd291bGQgaGF2ZQorCQkgKiByZWplY3RlZC4KKwkJICovCisJCXN3aXRjaCAoY29uLT5j b250eXBlKQorCQl7CisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQlpZiAoIWlzX2tp bmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9QUklNQVJZX0tFWSkpCisJCQkJCWNvbnRp bnVlOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1VOSVFVRToKKwkJCQlpZiAoIWlz X2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9VTklRVUUpKQorCQkJCQljb250aW51 ZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9DSEVDSzoKKwkJCQlpZiAoIWlzX2tp bmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9DSEVDSykpCisJCQkJCWNvbnRpbnVlOwor CisJCQkJLyoKKwkJCQkgKiBGb3Igbm9uLXBhcnRpdGlvbiByZWxhdGlvbnMsIENIRUNLIGlzIG5v cm1hbGx5IGVtaXR0ZWQKKwkJCQkgKiBpbmxpbmUgaW4gdGhlIENSRUFURSBUQUJMRSBib2R5IGJ5 CisJCQkJICogYXBwZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50cywgc28gd2Ugc2tpcCBpdCBo ZXJlIHRvCisJCQkJICogYXZvaWQgZG91YmxlIGVtaXNzaW9uLiAgQnV0IHdoZW4gS0lORF9UQUJM RSBpcyBub3QgaW4KKwkJCQkgKiB0aGUgYWN0aXZlIGZpbHRlciAoZS5nLiBvbmx5PT4nY2hlY2sn IG9yIGEgY2xvbmUgdGhhdAorCQkJCSAqIHRhcmdldHMgb25seSBzdWItb2JqZWN0cyksIHRoZSBp bmxpbmUgcGFzcyBuZXZlciBydW5zOworCQkJCSAqIGZhbGwgdGhyb3VnaCBhbmQgZW1pdCBlYWNo IENIRUNLIHZpYSBBTFRFUiBUQUJMRSBzbyB0aGUKKwkJCQkgKiB1c2VyIGFjdHVhbGx5IGdldHMg dGhlIGNvbnN0cmFpbnQgdGhleSBhc2tlZCBmb3IuCisJCQkJICovCisJCQkJaWYgKCFpc19wYXJ0 aXRpb24gJiYKKwkJCQkJaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1RBQkxF KSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfRk9SRUlH TjoKKwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9GT1JFSUdO X0tFWSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0VY Q0xVU0lPTjoKKwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9F WENMVVNJT04pKQorCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlO VF9OT1ROVUxMOgorCQkJCS8qCisJCQkJICogT3V0LW9mLWxpbmUgTk9UIE5VTEwgaXMgY29uY2Vw dHVhbGx5IHBhcnQgb2YgdGhlCisJCQkJICogdGFibGUgZGVmaW5pdGlvbjogZ2F0aW5nIGl0IG9u IEtJTkRfVEFCTEUgbWVhbnMgYW4KKwkJCQkgKiBvbmx5PWZvcmVpZ25fa2V5IHNlY29uZCBwYXNz IGRvZXMgbm90IHJlLWVtaXQKKwkJCQkgKiBOT1QgTlVMTHMgdGhhdCB0aGUgZmlyc3QgcGFzcyBh bHJlYWR5IGNyZWF0ZWQsCisJCQkJICogd2hpbGUgdGhlIG5vLW9wdGlvbnMgZGVmYXVsdCBzdGls bCBlbWl0cyB0aGVtLgorCQkJCSAqLworCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRB QkxFX0RETF9LSU5EX1RBQkxFKSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKCFpc19wYXJ0aXRp b24gJiYKKwkJCQkJbGlzdF9tZW1iZXJfb2lkKGN0eC0+c2tpcF9ub3RudWxsX29pZHMsIGNvbi0+ b2lkKSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8qCisJ CQkJICogQW55IGZ1dHVyZSBjb250eXBlIHRoZSB2b2NhYnVsYXJ5IGRvZXMgbm90IHlldCBjb3Zl cjoKKwkJCQkgKiBmYWxsIHRocm91Z2ggYW5kIGVtaXQgaXQgdmlhIHBnX2dldF9jb25zdHJhaW50 ZGVmX2NvbW1hbmQsCisJCQkJICogbWF0Y2hpbmcgdGhlIG9yaWdpbmFsIGxvb3AncyAiZW1pdCB1 bmxlc3MgZmlsdGVyZWQiCisJCQkJICogYmVoYXZpb3IuICBUaGlzIGlzIHVucmVhY2hhYmxlIGlu IGN1cnJlbnQgUEcgKGV2ZXJ5CisJCQkJICogY29udHlwZSBhYm92ZSBpcyBlbnVtZXJhdGVkKSBi dXQga2VwdCBkZWZlbnNpdmUgYWdhaW5zdAorCQkJCSAqIGEgbmV3IGNvbnR5cGUgYmVpbmcgaW50 cm9kdWNlZC4KKwkJCQkgKi8KKwkJCQlicmVhazsKKwkJfQorCisJCXsKKwkJCWNoYXIJICAgKmNv bmJvZHkgPSBwZ19nZXRfY29uc3RyYWludGRlZl9ib2R5KGNvbi0+b2lkKTsKKworCQkJcmVzZXRT dHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIkFM VEVSIFRBQkxFICVzIEFERCBDT05TVFJBSU5UICVzICVzOyIsCisJCQkJCQkJIGN0eC0+cXVhbG5h bWUsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihjb24tPmNvbm5hbWUpKSwKKwkJ CQkJCQkgY29uYm9keSk7CisJCQlhcHBlbmRfc3RtdChjdHgpOworCQkJcGZyZWUoY29uYm9keSk7 CisJCX0KKwl9CisJc3lzdGFibGVfZW5kc2Nhbihjb25TY2FuKTsKKwl0YWJsZV9jbG9zZShjb25S ZWwsIEFjY2Vzc1NoYXJlTG9jayk7Cit9CisKKy8qCisgKiBlbWl0X3J1bGVzCisgKgkJQ1JFQVRF IFJVTEUgcGVyIGNhY2hlZCByZXdyaXRlIHJ1bGUgb24gdGhlIHJlbGF0aW9uLgorICovCitzdGF0 aWMgdm9pZAorZW1pdF9ydWxlcyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlpZiAoIWlzX2tp bmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9SVUxFKSB8fAorCQljdHgtPnJlbC0+cmRf cnVsZXMgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBjdHgtPnJl bC0+cmRfcnVsZXMtPm51bUxvY2tzOyBpKyspCisJeworCQlPaWQJCQlydWxlaWQgPSBjdHgtPnJl bC0+cmRfcnVsZXMtPnJ1bGVzW2ldLT5ydWxlSWQ7CisJCWNoYXIJICAgKnJ1bGVkZWZfc3RyOwor CisJCXJ1bGVkZWZfc3RyID0gcGdfZ2V0X3J1bGVkZWZfZGRsKHJ1bGVpZCk7CisJCXJlc2V0U3Ry aW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1Ziwg cnVsZWRlZl9zdHIpOworCQlhcHBlbmRfc3RtdChjdHgpOworCQlwZnJlZShydWxlZGVmX3N0cik7 CisJfQorfQorCisvKgorICogZW1pdF9zdGF0aXN0aWNzCisgKgkJQ1JFQVRFIFNUQVRJU1RJQ1Mg cGVyIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0IG9uIHRoZSByZWxhdGlvbi4KKyAqLworc3Rh dGljIHZvaWQKK2VtaXRfc3RhdGlzdGljcyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlSZWxh dGlvbglzdGF0UmVsOworCVN5c1NjYW5EZXNjIHN0YXRTY2FuOworCVNjYW5LZXlEYXRhIHN0YXRL ZXk7CisJSGVhcFR1cGxlCXN0YXRUdXA7CisKKwlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBU QUJMRV9ERExfS0lORF9TVEFUSVNUSUNTKSkKKwkJcmV0dXJuOworCisJc3RhdFJlbCA9IHRhYmxl X29wZW4oU3RhdGlzdGljRXh0UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5 SW5pdCgmc3RhdEtleSwKKwkJCQlBbnVtX3BnX3N0YXRpc3RpY19leHRfc3R4cmVsaWQsCisJCQkJ QlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oY3R4 LT5yZWxpZCkpOworCXN0YXRTY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHN0YXRSZWwsIFN0YXRp c3RpY0V4dFJlbGlkSW5kZXhJZCwKKwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAmc3RhdEtleSk7 CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChzdGF0VHVwID0gc3lzdGFibGVfZ2V0bmV4dChz dGF0U2NhbikpKQorCXsKKwkJRm9ybV9wZ19zdGF0aXN0aWNfZXh0IHN0YXQgPSAoRm9ybV9wZ19z dGF0aXN0aWNfZXh0KSBHRVRTVFJVQ1Qoc3RhdFR1cCk7CisJCWNoYXIJICAgKnN0YXRkZWYgPSBw Z19nZXRfc3RhdGlzdGljc29iamRlZl9kZGwoc3RhdC0+b2lkKTsKKworCQlyZXNldFN0cmluZ0lu Zm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsICIlczsiLCBzdGF0 ZGVmKTsKKwkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJcGZyZWUoc3RhdGRlZik7CisJfQorCXN5c3Rh YmxlX2VuZHNjYW4oc3RhdFNjYW4pOworCXRhYmxlX2Nsb3NlKHN0YXRSZWwsIEFjY2Vzc1NoYXJl TG9jayk7Cit9CisKKy8qCisgKiBlbWl0X3JlcGxpY2FfaWRlbnRpdHkKKyAqCQlBTFRFUiBUQUJM RSBxdWFsbmFtZSBSRVBMSUNBIElERU5USVRZIC4uLiAtIGVtaXR0ZWQgb25seSB3aGVuIHRoZQor ICoJCXJlbHJlcGxpZGVudCBkaWZmZXJzIGZyb20gdGhlIGRlZmF1bHQgKCdkJyA9IHVzZSBwcmlt YXJ5IGtleSkuCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X3JlcGxpY2FfaWRlbnRpdHkoVGFibGVE ZGxDb250ZXh0ICpjdHgpCit7CisJaWYgKCFpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERM X0tJTkRfUkVQTElDQV9JREVOVElUWSkpCisJCXJldHVybjsKKwlpZiAoY3R4LT5yZWwtPnJkX3Jl bC0+cmVscmVwbGlkZW50ID09IFJFUExJQ0FfSURFTlRJVFlfREVGQVVMVCkKKwkJcmV0dXJuOwor CisJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJc3dpdGNoIChjdHgtPnJlbC0+cmRfcmVs LT5yZWxyZXBsaWRlbnQpCisJeworCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfTk9USElORzoKKwkJ CWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCSAiQUxURVIgVEFCTEUgJXMgUkVQ TElDQSBJREVOVElUWSBOT1RISU5HOyIsCisJCQkJCQkJIGN0eC0+cXVhbG5hbWUpOworCQkJYXBw ZW5kX3N0bXQoY3R4KTsKKwkJCWJyZWFrOworCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfRlVMTDoK KwkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCSAiQUxURVIgVEFCTEUgJXMg UkVQTElDQSBJREVOVElUWSBGVUxMOyIsCisJCQkJCQkJIGN0eC0+cXVhbG5hbWUpOworCQkJYXBw ZW5kX3N0bXQoY3R4KTsKKwkJCWJyZWFrOworCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfSU5ERVg6 CisJCQl7CisJCQkJT2lkCQkJcmVwbGlkeCA9IFJlbGF0aW9uR2V0UmVwbGljYUluZGV4KGN0eC0+ cmVsKTsKKworCQkJCWlmIChPaWRJc1ZhbGlkKHJlcGxpZHgpKQorCQkJCXsKKwkJCQkJY2hhcgkg ICAqaWR4bmFtZSA9IGdldF9yZWxfbmFtZShyZXBsaWR4KTsKKworCQkJCQlpZiAoaWR4bmFtZSA9 PSBOVUxMKQorCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9V TkRFRklORURfT0JKRUNUKSwKKwkJCQkJCQkJIGVycm1zZygicmVwbGljYSBpZGVudGl0eSBpbmRl eCB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsCisJCQkJCQkJCQkJcmVwbGlkeCksCisJCQkJ CQkJCSBlcnJkZXRhaWwoIkl0IG1heSBoYXZlIGJlZW4gY29uY3VycmVudGx5IGRyb3BwZWQuIikp KTsKKworCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkJCSAiQUxURVIg VEFCTEUgJXMgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCAlczsiLAorCQkJCQkJCQkJIGN0 eC0+cXVhbG5hbWUsCisJCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihpZHhuYW1lKSk7CisJCQkJ CWFwcGVuZF9zdG10KGN0eCk7CisJCQkJCXBmcmVlKGlkeG5hbWUpOworCQkJCX0KKwkJCX0KKwkJ CWJyZWFrOworCX0KK30KKworLyoKKyAqIGVtaXRfcmxzX3RvZ2dsZXMKKyAqCQlBTFRFUiBUQUJM RSBxdWFsbmFtZSBFTkFCTEUgLyBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkuCisgKi8KK3N0YXRp YyB2b2lkCitlbWl0X3Jsc190b2dnbGVzKFRhYmxlRGRsQ29udGV4dCAqY3R4KQoreworCWlmICgh aXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1JMUykpCisJCXJldHVybjsKKwor CWlmIChjdHgtPnJlbC0+cmRfcmVsLT5yZWxyb3dzZWN1cml0eSkKKwl7CisJCXJlc2V0U3RyaW5n SW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCSAi QUxURVIgVEFCTEUgJXMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsiLAorCQkJCQkJIGN0eC0+ cXVhbG5hbWUpOworCQlhcHBlbmRfc3RtdChjdHgpOworCX0KKwlpZiAoY3R4LT5yZWwtPnJkX3Jl bC0+cmVsZm9yY2Vyb3dzZWN1cml0eSkKKwl7CisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYp OworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCSAiQUxURVIgVEFCTEUgJXMg Rk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZOyIsCisJCQkJCQkgY3R4LT5xdWFsbmFtZSk7CisJCWFw cGVuZF9zdG10KGN0eCk7CisJfQorfQorCisvKgorICogZW1pdF9wYXJ0aXRpb25fY2hpbGRyZW4K KyAqCQlGb3IgZWFjaCBkaXJlY3QgcGFydGl0aW9uIGNoaWxkIG9mIGEgcGFydGl0aW9uZWQtdGFi bGUgcGFyZW50LAorICoJCXJlY3Vyc2l2ZWx5IGNhbGwgcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5h bCBhbmQgYXBwZW5kIHRoZSBjaGlsZCdzCisgKgkJc3RhdGVtZW50cy4gIEVhY2ggY2hpbGQncyBv d24gRERMIGhhbmRsZXMgZnVydGhlciBsZXZlbHMgdGhyb3VnaAorICoJCXRoZSBzYW1lIHJlY3Vy c2lvbi4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfcGFydGl0aW9uX2NoaWxkcmVuKFRhYmxlRGRs Q29udGV4dCAqY3R4KQoreworCUxpc3QJICAgKmNoaWxkcmVuOworCUxpc3RDZWxsICAgKmxjOwor CisJaWYgKCFpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfUEFSVElUSU9OKSB8 fAorCQljdHgtPnJlbC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFC TEUpCisJCXJldHVybjsKKworCWNoaWxkcmVuID0gZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbihj dHgtPnJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCWZvcmVhY2gobGMsIGNoaWxkcmVuKQorCXsK KwkJT2lkCQkJY2hpbGRvaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJVGFibGVEZGxDb250ZXh0IGNo aWxkY3R4ID0gezB9OworCQlMaXN0CSAgICpjaGlsZHN0bXRzOworCisJCS8qCisJCSAqIEVhY2gg cmVjdXJzaXZlIGludm9jYXRpb24gcmUtZGVyaXZlcyBpdHMgb3duIHJlbCwgbmFtZXNwYWNlLAor CQkgKiBxdWFsbmFtZSwgTk9UIE5VTEwgY2FjaGUsIGJ1ZmZlciwgYW5kIHN0YXRlbWVudCBsaXN0 IGluc2lkZQorCQkgKiBwZ19nZXRfdGFibGVfZGRsX2ludGVybmFsLiAgVGhlIHVzZXItc3VwcGxp ZWQgb3B0aW9uIGZpZWxkcworCQkgKiBjYXJyeSBvdmVyIHZlcmJhdGltIHdpdGggb25lIGV4Y2Vw dGlvbjogS0lORF9QQVJUSVRJT04gaXMgYQorCQkgKiAiZ2F0ZSIga2luZCB0aGF0IGNvbnRyb2xz IHdoZXRoZXIgd2UgcmVjdXJzZSBhdCBhbGwsIG5vdCBhCisJCSAqIGtpbmQgdGhhdCB0aGUgY2hp bGRyZW4gdGhlbXNlbHZlcyBldmVyIGVtaXQuICBJZiB3ZSBwcm9wYWdhdGVkCisJCSAqIGFuIG9u bHktc2V0IHRoYXQgY29udGFpbmVkIFBBUlRJVElPTiBpbnRvIGEgY2hpbGQsIHRoZSBjaGlsZAor CQkgKiB3b3VsZCBub3QgZW1pdCBpdHMgb3duIENSRUFURSBUQUJMRSAoS0lORF9UQUJMRSBhYnNl bnQpIG5vcgorCQkgKiBhbnkgc3ViLW9iamVjdHMsIGFuZCB0aGUgcmVjdXJzaW9uIHdvdWxkIHBy b2R1Y2Ugbm90aGluZy4gIFNvCisJCSAqIHN0cmlwIFBBUlRJVElPTiBvdXQgb2Ygb25seV9raW5k cyB3aGVuIHJlY3Vyc2luZzsgaWYgdGhhdAorCQkgKiBlbXB0aWVzIHRoZSBzZXQsIGRyb3AgdGhl IGZpbHRlciBlbnRpcmVseSBzbyB0aGUgY2hpbGQgZW1pdHMKKwkJICogaXRzIGZ1bGwgRERMLiAg ZXhjZXB0X2tpbmRzIHBhc3NlcyB0aHJvdWdoIHVuY2hhbmdlZCBiZWNhdXNlCisJCSAqIFBBUlRJ VElPTiBpbiB0aGUgZXhjZXB0LXNldCBhbHJlYWR5IHN0b3BwZWQgdXMgZnJvbSBnZXR0aW5nCisJ CSAqIGhlcmUuCisJCSAqLworCQljaGlsZGN0eC5yZWxpZCA9IGNoaWxkb2lkOworCQljaGlsZGN0 eC5wcmV0dHkgPSBjdHgtPnByZXR0eTsKKwkJY2hpbGRjdHgubm9fb3duZXIgPSBjdHgtPm5vX293 bmVyOworCQljaGlsZGN0eC5ub190YWJsZXNwYWNlID0gY3R4LT5ub190YWJsZXNwYWNlOworCQlj aGlsZGN0eC5zY2hlbWFfcXVhbGlmaWVkID0gY3R4LT5zY2hlbWFfcXVhbGlmaWVkOworCQljaGls ZGN0eC5vbmx5X2tpbmRzID0gY3R4LT5vbmx5X2tpbmRzOworCQljaGlsZGN0eC5leGNlcHRfa2lu ZHMgPSBjdHgtPmV4Y2VwdF9raW5kczsKKworCQlpZiAoY2hpbGRjdHgub25seV9raW5kcyAhPSBO VUxMICYmCisJCQlibXNfaXNfbWVtYmVyKChpbnQpIFRBQkxFX0RETF9LSU5EX1BBUlRJVElPTiwK KwkJCQkJCSAgY2hpbGRjdHgub25seV9raW5kcykpCisJCXsKKwkJCUJpdG1hcHNldCAgKmNoaWxk X29ubHkgPSBibXNfY29weShjaGlsZGN0eC5vbmx5X2tpbmRzKTsKKworCQkJY2hpbGRfb25seSA9 IGJtc19kZWxfbWVtYmVyKGNoaWxkX29ubHksCisJCQkJCQkJCQkJKGludCkgVEFCTEVfRERMX0tJ TkRfUEFSVElUSU9OKTsKKwkJCWlmIChibXNfaXNfZW1wdHkoY2hpbGRfb25seSkpCisJCQl7CisJ CQkJYm1zX2ZyZWUoY2hpbGRfb25seSk7CisJCQkJY2hpbGRjdHgub25seV9raW5kcyA9IE5VTEw7 CisJCQl9CisJCQllbHNlCisJCQkJY2hpbGRjdHgub25seV9raW5kcyA9IGNoaWxkX29ubHk7CisJ CX0KKworCQljaGlsZHN0bXRzID0gcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbCgmY2hpbGRjdHgp OworCQljdHgtPnN0YXRlbWVudHMgPSBsaXN0X2NvbmNhdChjdHgtPnN0YXRlbWVudHMsIGNoaWxk c3RtdHMpOworCX0KKwlsaXN0X2ZyZWUoY2hpbGRyZW4pOworfQorCisvKgorICogcGdfZ2V0X3Rh YmxlX2RkbF9pbnRlcm5hbAorICoJCUdlbmVyYXRlIERETCBzdGF0ZW1lbnRzIHRvIHJlY3JlYXRl IGEgcmVndWxhciBvciBwYXJ0aXRpb25lZCB0YWJsZS4KKyAqCisgKiBUaGUgY2FsbGVyIGluaXRp YWxpemVzICpjdHggd2l0aCB0aGUgdXNlci1zdXBwbGllZCBvcHRpb24gZmllbGRzCisgKiAocmVs aWQsIHByZXR0eSwgbm9fb3duZXIsIG5vX3RhYmxlc3BhY2UsIHNjaGVtYV9xdWFsaWZpZWQsCisg KiBvbmx5X2tpbmRzLCBleGNlcHRfa2luZHMpLiAgVGhpcyBmdW5jdGlvbiBvcGVucyB0aGUgcmVs YXRpb24sCisgKiB2YWxpZGF0ZXMgYWNjZXNzLCBwb3B1bGF0ZXMgdGhlIGRlcml2ZWQgZmllbGRz IChyZWwsIHF1YWxuYW1lLAorICogbm5fZW50cmllcywgLi4uKSwgcnVucyB0aGUgZW1pc3Npb24g cGFzc2VzLCBhbmQgcmV0dXJucyB0aGUKKyAqIGFjY3VtdWxhdGVkIHN0YXRlbWVudCBsaXN0Lgor ICoKKyAqIEVhY2ggZW1pc3Npb24gaGVscGVyIGNvbnN1bHRzIGlzX2tpbmRfaW5jbHVkZWQoKSB0 byBkZWNpZGUgd2hldGhlcgorICogaXQgc2hvdWxkIHJ1bi4gIFRoZSB0YWJsZS1wcm9wZXIgcGFz c2VzIChDUkVBVEUgVEFCTEUgLyBPV05FUiAvCisgKiBBTFRFUiBDT0xVTU4gLi4uIFNFVCBERUZB VUxUIC8gQUxURVIgQ09MVU1OIC4uLiBTRVQgKC4uLikpIGFyZQorICogZ3JvdXBlZCB1bmRlciBL SU5EX1RBQkxFIHNvIHRoZSBGSy1vbmx5IC8gc3ViLW9iamVjdC1vbmx5IHdvcmtmbG93CisgKiBp cyBleHByZXNzaWJsZSBhcyBhIHNpbmdsZSBvbmx5IG9yIGV4Y2VwdCBsaXN0LgorICoKKyAqIFRy aWdnZXIgYW5kIHBvbGljeSBlbWlzc2lvbiBhcmUgc2NhZmZvbGRlZCBidXQgY3VycmVudGx5IGRp c2FibGVkCisgKiAoI2lmIDApIC0gdGhleSB3aWxsIGJlY29tZSBhIHNpbmdsZSBoZWxwZXIgY2Fs bCBvbmNlIHRoZSBzdGFuZGFsb25lCisgKiBwZ19nZXRfdHJpZ2dlcl9kZGwgLyBwZ19nZXRfcG9s aWN5X2RkbCBoZWxwZXJzIGxhbmQuCisgKi8KK3N0YXRpYyBMaXN0ICoKK3BnX2dldF90YWJsZV9k ZGxfaW50ZXJuYWwoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJUmVsYXRpb24JcmVsOworCWNo YXIJCXJlbGtpbmQ7CisJQWNsUmVzdWx0CWFjbHJlc3VsdDsKKworCXJlbCA9IHRhYmxlX29wZW4o Y3R4LT5yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJlbGtpbmQgPSByZWwtPnJkX3JlbC0+ cmVsa2luZDsKKworCS8qCisJICogVGhlIGluaXRpYWwgY3V0IG9ubHkgc3VwcG9ydHMgb3JkaW5h cnkgYW5kIHBhcnRpdGlvbmVkIHRhYmxlcy4gIFZpZXdzLAorCSAqIG1hdHZpZXdzLCBmb3JlaWdu IHRhYmxlcywgc2VxdWVuY2VzLCBpbmRleGVzLCBjb21wb3NpdGUgdHlwZXMsIGFuZAorCSAqIFRP QVNUIHRhYmxlcyBhcmUgb3V0IG9mIHNjb3BlIGZvciBub3cuCisJICovCisJaWYgKHJlbGtpbmQg IT0gUkVMS0lORF9SRUxBVElPTiAmJiByZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFC TEUpCisJeworCQljaGFyCSAgICpyZWxuYW1lID0gcHN0cmR1cChSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWwpKTsKKworCQl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJ CQkJIGVycm1zZygiXCIlc1wiIGlzIG5vdCBhbiBvcmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0YWJs ZSIsCisJCQkJCQlyZWxuYW1lKSkpOworCX0KKworCS8qIENhbGxlciBuZWVkcyBTRUxFQ1Qgb24g dGhlIHRhYmxlIHRvIHJlYWQgaXRzIGRlZmluaXRpb24uICovCisJYWNscmVzdWx0ID0gcGdfY2xh c3NfYWNsY2hlY2soY3R4LT5yZWxpZCwgR2V0VXNlcklkKCksIEFDTF9TRUxFQ1QpOworCWlmIChh Y2xyZXN1bHQgIT0gQUNMQ0hFQ0tfT0spCisJCWFjbGNoZWNrX2Vycm9yKGFjbHJlc3VsdCwgT0JK RUNUX1RBQkxFLAorCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKworCS8q CisJICogVmFsaWRhdGlvbjogaWYgdGhlIHRhYmxlIGhhcyBSRVBMSUNBIElERU5USVRZIFVTSU5H IElOREVYIGFuZCB0aGUKKwkgKiByZWZlcmVuY2VkIGluZGV4IHdvdWxkIG5vdCBiZSBlbWl0dGVk IHVuZGVyIHRoZSBhY3RpdmUgZmlsdGVyLCB0aGUKKwkgKiBlbWl0dGVkIFJFUExJQ0EgSURFTlRJ VFkgY2xhdXNlIHdvdWxkIHJlZmVyZW5jZSBhbiBpbmRleCB0aGUgc2FtZSBEREwKKwkgKiBuZXZl ciBwcm9kdWNlZC4gIERldGVybWluZSB3aGljaCBraW5kIHdvdWxkIGVtaXQgdGhlIGluZGV4IChv bmUgb2YKKwkgKiBwcmltYXJ5X2tleSAvIHVuaXF1ZSAvIGV4Y2x1c2lvbiBmb3IgY29uc3RyYWlu dC1iYWNrZWQgaW5kZXhlcywKKwkgKiBvdGhlcndpc2UgdGhlIGdlbmVyaWMgImluZGV4IiBraW5k KSBhbmQgcmVxdWlyZSBpdCB0byBiZSBpbiBzY29wZQorCSAqIHdoZW5ldmVyICJyZXBsaWNhX2lk ZW50aXR5IiBpcy4gIFRoZSBjaGVjayB1c2VzIGlzX2tpbmRfaW5jbHVkZWQgc28KKwkgKiBpdCBj b3ZlcnMgYm90aCBmb3JtcyBuYXR1cmFsbHk6IGFuICJleGNlcHQiIGxpc3QgdGhhdCBvbWl0cyB0 aGUKKwkgKiBzb3VyY2Uga2luZCwgYW5kIGFuICJvbmx5IiBsaXN0IHRoYXQgb21pdHMgaXQuCisJ ICovCisJaWYgKHJlbC0+cmRfcmVsLT5yZWxyZXBsaWRlbnQgPT0gUkVQTElDQV9JREVOVElUWV9J TkRFWCAmJgorCQlpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfUkVQTElDQV9J REVOVElUWSkpCisJeworCQlPaWQJCQlyZXBsaWR4ID0gUmVsYXRpb25HZXRSZXBsaWNhSW5kZXgo cmVsKTsKKworCQlpZiAoT2lkSXNWYWxpZChyZXBsaWR4KSkKKwkJeworCQkJVGFibGVEZGxLaW5k IGlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfSU5ERVg7CisJCQlPaWQJCQljb25vaWQgPSBnZXRf aW5kZXhfY29uc3RyYWludChyZXBsaWR4KTsKKworCQkJaWYgKE9pZElzVmFsaWQoY29ub2lkKSkK KwkJCXsKKwkJCQlIZWFwVHVwbGUJY29uVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTlNUUk9JRCwK KwkJCQkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShjb25vaWQpKTsKKworCQkJCWlmIChIZWFw VHVwbGVJc1ZhbGlkKGNvblR1cCkpCisJCQkJeworCQkJCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29u ID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvblR1cCk7CisKKwkJCQkJc3dpdGNo IChjb24tPmNvbnR5cGUpCisJCQkJCXsKKwkJCQkJCWNhc2UgQ09OU1RSQUlOVF9QUklNQVJZOgor CQkJCQkJCWlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfUFJJTUFSWV9LRVk7CisJCQkJCQkJYnJl YWs7CisJCQkJCQljYXNlIENPTlNUUkFJTlRfVU5JUVVFOgorCQkJCQkJCWlkeF9raW5kID0gVEFC TEVfRERMX0tJTkRfVU5JUVVFOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSBDT05TVFJBSU5U X0VYQ0xVU0lPTjoKKwkJCQkJCQlpZHhfa2luZCA9IFRBQkxFX0RETF9LSU5EX0VYQ0xVU0lPTjsK KwkJCQkJCQlicmVhazsKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJ CQkJUmVsZWFzZVN5c0NhY2hlKGNvblR1cCk7CisJCQkJfQorCQkJfQorCisJCQlpZiAoIWlzX2tp bmRfaW5jbHVkZWQoY3R4LCBpZHhfa2luZCkpCisJCQl7CisJCQkJY2hhcgkgICAqcmVsbmFtZSA9 IHBzdHJkdXAoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CisJCQkJY29uc3QgY2hhciAq aWR4X25hbWUgPSB0YWJsZV9kZGxfa2luZF9uYW1lc1soaW50KSBpZHhfa2luZF0ubmFtZTsKKwor CQkJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ CQkgZXJybXNnKCJSRVBMSUNBIElERU5USVRZIGZvciB0YWJsZSBcIiVzXCIgcmVxdWlyZXMga2lu ZCBcIiVzXCIgdG8gYmUgZW1pdHRlZCIsCisJCQkJCQkJCXJlbG5hbWUsIGlkeF9uYW1lKSwKKwkJ CQkJCSBlcnJkZXRhaWwoIlRoZSB0YWJsZSdzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVgg cmVmZXJlbmNlcyBhbiBpbmRleCBwcm9kdWNlZCBieSB0aGUgXCIlc1wiIGtpbmQsIHdoaWNoIGlz IG5vdCBpbiB0aGUgYWN0aXZlIGZpbHRlci4iLAorCQkJCQkJCQkgICBpZHhfbmFtZSksCisJCQkJ CQkgZXJyaGludCgiRWl0aGVyIGFkZCBcIiVzXCIgdG8gdGhlIGZpbHRlciBvciByZW1vdmUgXCJy ZXBsaWNhX2lkZW50aXR5XCIgZnJvbSBpdC4iLAorCQkJCQkJCQkgaWR4X25hbWUpKSk7CisJCQl9 CisJCX0KKwl9CisKKwkvKgorCSAqIFBvcHVsYXRlIGRlcml2ZWQgZmllbGRzIG5vdyB0aGF0IHRo ZSByZWxhdGlvbiBpcyBvcGVuIGFuZCB2YWxpZGF0ZWQuCisJICogVGhlIHJlbWFpbmluZyBkZXJp dmVkIGZpZWxkcyAobm5fZW50cmllcywgc2tpcF9ub3RudWxsX29pZHMsIGJ1ZiwKKwkgKiBzdGF0 ZW1lbnRzKSBzdGFydCB6ZXJvZWQgdmlhIHRoZSBjYWxsZXIncyBgVGFibGVEZGxDb250ZXh0IGN0 eCA9IHswfWAKKwkgKiBpbml0aWFsaXplcjsgdGhlIE5PVCBOVUxMIGNhY2hlIGlzIHBvcHVsYXRl ZCBieSBjb2xsZWN0X2xvY2FsX25vdF9udWxsLAorCSAqIHRoZSBidWZmZXIgaXMgaW5pdFN0cmlu Z0luZm8nZCwgYW5kIGVhY2ggZW1pdCBwYXNzIGFwcGVuZHMgdG8KKwkgKiBzdGF0ZW1lbnRzIHZp YSBsYXBwZW5kLgorCSAqLworCWN0eC0+cmVsID0gcmVsOworCWN0eC0+YmFzZV9uYW1lc3BhY2Ug PSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpOworCWN0eC0+c2F2ZV9uZXN0bGV2ZWwgPSAtMTsK KwljdHgtPnF1YWxuYW1lID0gbG9va3VwX3JlbG5hbWVfZm9yX2VtaXQoY3R4LT5yZWxpZCwgY3R4 LT5zY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJCQkJCQljdHgtPmJhc2VfbmFtZXNwYWNlKTsKKwor CS8qCisJICogV2hlbiBzY2hlbWFfcXVhbGlmaWVkIGlzIGZhbHNlLCBuYXJyb3cgdGhlIGFjdGl2 ZSBzZWFyY2hfcGF0aCB0byB0aGUKKwkgKiB0YXJnZXQgdGFibGUncyBvd24gbmFtZXNwYWNlIGZv ciB0aGUgZHVyYXRpb24gb2YgRERMIGVtaXNzaW9uLiAgVGhlCisJICogZGVwYXJzZSBjb2RlIGlu IHJ1bGV1dGlscyAoYW5kIHRoZSByZWdjbGFzcy9yZWdwcm9jIG91dHB1dCBmdW5jdGlvbnMgd2UK KwkgKiB0cmFuc2l0aXZlbHkgY2FsbCkgZGVjaWRlcyB3aGV0aGVyIHRvIHNjaGVtYS1xdWFsaWZ5 IGEgbmFtZSBiYXNlZCBvbgorCSAqIHdoZXRoZXIgdGhlIHJlZmVyZW5jZWQgb2JqZWN0IGlzIHJl YWNoYWJsZSB0aHJvdWdoIHNlYXJjaF9wYXRoLCBzbyB0aGlzCisJICogbWFrZXMgc2FtZS1zY2hl bWEgcmVmZXJlbmNlcyBpbiBERUZBVUxUIGFuZCBDSEVDSyBleHByZXNzaW9ucywgcmVnY2xhc3MK KwkgKiBsaXRlcmFscywgRksgdGFyZ2V0cywgaW5kZXhlcywgY29uc3RyYWludHMsIHJ1bGVzLCBh bmQgc3RhdGlzdGljcyBjb21lCisJICogb3V0IHVucXVhbGlmaWVkIGF1dG9tYXRpY2FsbHkuICBD cm9zcy1zY2hlbWEgcmVmZXJlbmNlcyBzdGF5IHF1YWxpZmllZCwKKwkgKiB3aGljaCBpcyB0aGUg Y29ycmVjdG5lc3MgcmVxdWlyZW1lbnQuCisJICogQXRFT1hhY3RfR1VDIGNsZWFucyB1cCBhdCB4 YWN0IGVuZCBpZiBhbnl0aGluZyB0aHJvd3MgYmV0d2VlbiBoZXJlIGFuZAorCSAqIHRoZSBleHBs aWNpdCByZXN0b3JlIGJlbG93OyBvbiB0aGUgbm9ybWFsIHBhdGggd2UgcmVzdG9yZSByaWdodCBi ZWZvcmUKKwkgKiByZXR1cm5pbmcuCisJICovCisJaWYgKCFjdHgtPnNjaGVtYV9xdWFsaWZpZWQp CisJeworCQljaGFyCSAgICpuc3BuYW1lID0gZ2V0X25hbWVzcGFjZV9uYW1lKGN0eC0+YmFzZV9u YW1lc3BhY2UpOworCisJCWlmIChuc3BuYW1lICE9IE5VTEwpCisJCXsKKwkJCWNvbnN0IGNoYXIg KnFuc3AgPSBxdW90ZV9pZGVudGlmaWVyKG5zcG5hbWUpOworCisJCQljdHgtPnNhdmVfbmVzdGxl dmVsID0gTmV3R1VDTmVzdExldmVsKCk7CisJCQkodm9pZCkgc2V0X2NvbmZpZ19vcHRpb24oInNl YXJjaF9wYXRoIiwgcW5zcCwKKwkJCQkJCQkJCSBQR0NfVVNFUlNFVCwgUEdDX1NfU0VTU0lPTiwK KwkJCQkJCQkJCSBHVUNfQUNUSU9OX1NBVkUsIHRydWUsIDAsIGZhbHNlKTsKKwkJCXBmcmVlKG5z cG5hbWUpOworCQl9CisJfQorCisJLyoKKwkgKiBDYWNoZSBsb2NhbGx5LWRlY2xhcmVkIE5PVCBO VUxMIGNvbnN0cmFpbnQgbWV0YWRhdGEgc28gdGhlIGNvbHVtbi0gZW1pdAorCSAqIGhlbHBlcnMg Y2FuIHByb2R1Y2UgIkNPTlNUUkFJTlQgbmFtZSBOT1QgTlVMTCIgaW5saW5lIGZvciB1c2VyLW5h bWVkCisJICogY29uc3RyYWludHMsIGFuZCBzbyB0aGUgY29uc3RyYWludCBsb29wIGNhbiBhdm9p ZCBkb3VibGUtZW1pdHRpbmcgdGhlbS4KKwkgKi8KKwljdHgtPm5uX2VudHJpZXMgPSBjb2xsZWN0 X2xvY2FsX25vdF9udWxsKHJlbCwgJmN0eC0+c2tpcF9ub3RudWxsX29pZHMpOworCisJaW5pdFN0 cmluZ0luZm8oJmN0eC0+YnVmKTsKKworCS8qCisJICogRW1pc3Npb24gcGFzc2VzLiAgT3JkZXIg aXMgc2lnbmlmaWNhbnQ6IENSRUFURSBUQUJMRSBmaXJzdDsgT1dORVIgYW5kCisJICogdGhlIHBl ci1jb2x1bW4gQUxURVIgQ09MVU1OIHBhc3NlcyBiZWZvcmUgc3ViLW9iamVjdCBlbWlzc2lvbjsK KwkgKiBzdWItb2JqZWN0cyBpbiBkZXBlbmRlbmN5LWZyaWVuZGx5IG9yZGVyIChpbmRleGVzIGJl Zm9yZSBjb25zdHJhaW50cywKKwkgKiBzaW5jZSBjb25zdHJhaW50LWJhY2tlZCBpbmRleGVzIGFy ZSBlbWl0dGVkIG91dC1vZi1saW5lIGJ5IHRoZQorCSAqIGNvbnN0cmFpbnQgbG9vcCk7IHBhcnRp dGlvbiBjaGlsZHJlbiBsYXN0IHNvIHRoZSBwYXJlbnQgYWxyZWFkeSBleGlzdHMKKwkgKiBhdCBy ZXBsYXkgdGltZS4gIEVhY2ggaGVscGVyIGdhdGVzIGl0c2VsZiBvbiBpc19raW5kX2luY2x1ZGVk IGZvciB0aGUKKwkgKiByZWxldmFudCBUQUJMRV9ERExfS0lORF8qOyB0aGUgZm91ciAidGFibGUg aXRzZWxmIiBwYXNzZXMgYXJlIGdyb3VwZWQKKwkgKiBoZXJlIHVuZGVyIEtJTkRfVEFCTEUgc28g YWxsIG9mIENSRUFURSBUQUJMRSAvIE9XTkVSIC8gU0VUIERFRkFVTFQgLworCSAqIFNFVCAoLi4u KSBkcm9wIG91dCB0b2dldGhlciB3aGVuIHRoZSB1c2VyIGFza3MgZm9yIG9ubHkgc3ViLW9iamVj dHMKKwkgKiAoZS5nLiBvbmx5ID0+ICdmb3JlaWduX2tleScgZm9yIHRoZSBzZWNvbmQgcGFzcyBv ZiBhIHR3by1wYXNzIEZLCisJICogY2xvbmUpLgorCSAqLworCWlmIChpc19raW5kX2luY2x1ZGVk KGN0eCwgVEFCTEVfRERMX0tJTkRfVEFCTEUpKQorCXsKKwkJZW1pdF9jcmVhdGVfdGFibGVfc3Rt dChjdHgpOworCQllbWl0X293bmVyX3N0bXQoY3R4KTsKKwkJZW1pdF9jaGlsZF9kZWZhdWx0X292 ZXJyaWRlcyhjdHgpOworCQllbWl0X2F0dG9wdGlvbnMoY3R4KTsKKwl9CisJZW1pdF9pbmRleGVz KGN0eCk7CisJZW1pdF9sb2NhbF9jb25zdHJhaW50cyhjdHgpOworCWVtaXRfcnVsZXMoY3R4KTsK KwllbWl0X3N0YXRpc3RpY3MoY3R4KTsKKwllbWl0X3JlcGxpY2FfaWRlbnRpdHkoY3R4KTsKKwll bWl0X3Jsc190b2dnbGVzKGN0eCk7CisKKwkvKgorCSAqIFRyaWdnZXJzIGFuZCByb3ctbGV2ZWwg c2VjdXJpdHkgcG9saWNpZXMgLSBkaXNhYmxlZCB1bnRpbCB0aGUKKwkgKiBzdGFuZGFsb25lIHBn X2dldF90cmlnZ2VyX2RkbCgpIGFuZCBwZ19nZXRfcG9saWN5X2RkbCgpIGhlbHBlcnMgbGFuZC4K KwkgKiBUaGUgc2NhbiArIGxvY2sgKyBmaWx0ZXIgc2NhZmZvbGRpbmcgYmVsb3cgaXMgcHJlc2Vy dmVkIChpbnNpZGUgI2lmIDApCisJICogc28gd2lyaW5nIHVwIGVhY2ggZW1pc3Npb24gYmVjb21l cyBhIG9uZS1saW5lciBpbiB0aGUgbG9vcCBib2R5IG9uY2UKKwkgKiB0aG9zZSBoZWxwZXJzIGFy ZSBhdmFpbGFibGUuCisJICovCisjaWYgMAorCWlmIChpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFC TEVfRERMX0tJTkRfVFJJR0dFUikpCisJeworCQlSZWxhdGlvbgl0cmlnUmVsOworCQlTeXNTY2Fu RGVzYyB0cmlnU2NhbjsKKwkJU2NhbktleURhdGEgdHJpZ0tleTsKKwkJSGVhcFR1cGxlCXRyaWdU dXA7CisKKwkJdHJpZ1JlbCA9IHRhYmxlX29wZW4oVHJpZ2dlclJlbGF0aW9uSWQsIEFjY2Vzc1No YXJlTG9jayk7CisJCVNjYW5LZXlJbml0KCZ0cmlnS2V5LAorCQkJCQlBbnVtX3BnX3RyaWdnZXJf dGdyZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmpl Y3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsKKwkJdHJpZ1NjYW4gPSBzeXN0YWJsZV9iZWdpbnNj YW4odHJpZ1JlbCwgVHJpZ2dlclJlbGlkTmFtZUluZGV4SWQsCisJCQkJCQkJCQkgIHRydWUsIE5V TEwsIDEsICZ0cmlnS2V5KTsKKwkJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHJpZ1R1cCA9IHN5 c3RhYmxlX2dldG5leHQodHJpZ1NjYW4pKSkKKwkJeworCQkJRm9ybV9wZ190cmlnZ2VyIHRyZyA9 IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCQkJaWYgKHRyZy0+dGdp c2ludGVybmFsKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBUT0RPOiBhcHBlbmQgcGdfZ2V0X3Ry aWdnZXJfZGRsKHRyZy0+b2lkKSBvdXRwdXQgaGVyZS4gKi8KKwkJfQorCQlzeXN0YWJsZV9lbmRz Y2FuKHRyaWdTY2FuKTsKKwkJdGFibGVfY2xvc2UodHJpZ1JlbCwgQWNjZXNzU2hhcmVMb2NrKTsK Kwl9CisKKwlpZiAoaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1BPTElDWSkp CisJeworCQlSZWxhdGlvbglwb2xSZWw7CisJCVN5c1NjYW5EZXNjIHBvbFNjYW47CisJCVNjYW5L ZXlEYXRhIHBvbEtleTsKKwkJSGVhcFR1cGxlCXBvbFR1cDsKKworCQlwb2xSZWwgPSB0YWJsZV9v cGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCVNjYW5LZXlJbml0KCZw b2xLZXksCisJCQkJCUFudW1fcGdfcG9saWN5X3BvbHJlbGlkLAorCQkJCQlCVEVxdWFsU3RyYXRl Z3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCU9iamVjdElkR2V0RGF0dW0oY3R4LT5yZWxpZCkpOwor CQlwb2xTY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBvbFJlbCwgUG9saWN5UG9scmVsaWRQb2xu YW1lSW5kZXhJZCwKKwkJCQkJCQkJCSB0cnVlLCBOVUxMLCAxLCAmcG9sS2V5KTsKKwkJd2hpbGUg KEhlYXBUdXBsZUlzVmFsaWQocG9sVHVwID0gc3lzdGFibGVfZ2V0bmV4dChwb2xTY2FuKSkpCisJ CXsKKwkJCS8qIFRPRE86IGFwcGVuZCBwZ19nZXRfcG9saWN5X2RkbChyZWxpZCwgcG9sbmFtZSkg b3V0cHV0IGhlcmUuICovCisJCX0KKwkJc3lzdGFibGVfZW5kc2Nhbihwb2xTY2FuKTsKKwkJdGFi bGVfY2xvc2UocG9sUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCX0KKyNlbmRpZgorCisJZW1pdF9w YXJ0aXRpb25fY2hpbGRyZW4oY3R4KTsKKworCXsKKwkJaW50CQkJbmF0dHMgPSBSZWxhdGlvbkdl dERlc2NyKHJlbCktPm5hdHRzOworCisJCWZvciAoaW50IGkgPSAxOyBpIDw9IG5hdHRzOyBpKysp CisJCQlpZiAoY3R4LT5ubl9lbnRyaWVzW2ldLm5hbWUgIT0gTlVMTCkKKwkJCQlwZnJlZShjdHgt Pm5uX2VudHJpZXNbaV0ubmFtZSk7CisJfQorCXBmcmVlKGN0eC0+bm5fZW50cmllcyk7CisKKwl0 YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJcGZyZWUoY3R4LT5idWYuZGF0YSk7 CisJcGZyZWUoY3R4LT5xdWFsbmFtZSk7CisJbGlzdF9mcmVlKGN0eC0+c2tpcF9ub3RudWxsX29p ZHMpOworCisJLyoKKwkgKiBQb3AgdGhlIG5hcnJvd2VkIHNlYXJjaF9wYXRoIG5vdyB0aGF0IGFs bCBoZWxwZXJzIGhhdmUgcnVuLiAgRXJyb3JzCisJICogdGhyb3duIGVhcmxpZXIgYXJlIGNsZWFu ZWQgdXAgYnkgQXRFT1hhY3RfR1VDIGF0IHhhY3QgZW5kLgorCSAqLworCWlmIChjdHgtPnNhdmVf bmVzdGxldmVsID49IDApCisJCUF0RU9YYWN0X0dVQyh0cnVlLCBjdHgtPnNhdmVfbmVzdGxldmVs KTsKKworCXJldHVybiBjdHgtPnN0YXRlbWVudHM7Cit9CisKKy8qCisgKiBwZ19nZXRfdGFibGVf ZGRsCisgKgkJUmV0dXJuIERETCB0byByZWNyZWF0ZSBhIHRhYmxlIGFzIGEgc2V0IG9mIHRleHQg cm93cy4KKyAqLworRGF0dW0KK3BnX2dldF90YWJsZV9kZGwoUEdfRlVOQ1RJT05fQVJHUykKK3sK KwlGdW5jQ2FsbENvbnRleHQgKmZ1bmNjdHg7CisJTGlzdAkgICAqc3RhdGVtZW50czsKKworCWlm IChTUkZfSVNfRklSU1RDQUxMKCkpCisJeworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJ CVRhYmxlRGRsQ29udGV4dCBjdHggPSB7MH07CisJCURkbE9wdGlvbglvcHRzW10gPSB7CisJCQl7 InByZXR0eSIsIERETF9PUFRfQk9PTH0sCisJCQl7Im93bmVyIiwgRERMX09QVF9CT09MfSwKKwkJ CXsidGFibGVzcGFjZSIsIERETF9PUFRfQk9PTH0sCisJCQl7InNjaGVtYV9xdWFsaWZpZWQiLCBE RExfT1BUX0JPT0x9LAorCQkJeyJvbmx5IiwgRERMX09QVF9URVhUfSwKKwkJCXsiZXhjZXB0Iiwg RERMX09QVF9URVhUfSwKKwkJfTsKKwkJZW51bQorCQl7CisJCQlPUFRfUFJFVFRZLAorCQkJT1BU X09XTkVSLAorCQkJT1BUX1RBQkxFU1BBQ0UsCisJCQlPUFRfU0NIRU1BX1FVQUxJRklFRCwKKwkJ CU9QVF9PTkxZLAorCQkJT1BUX0VYQ0VQVCwKKwkJfTsKKworCQlmdW5jY3R4ID0gU1JGX0ZJUlNU Q0FMTF9JTklUKCk7CisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0 eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4KTsKKworCQlpZiAoUEdfQVJHSVNOVUxMKDApKQorCQl7 CisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJCQlTUkZfUkVUVVJOX0RP TkUoZnVuY2N0eCk7CisJCX0KKworCQlwYXJzZV9kZGxfb3B0aW9ucyhmY2luZm8sIDEsIG9wdHMs IGxlbmd0aG9mKG9wdHMpKTsKKworCQlpZiAob3B0c1tPUFRfT05MWV0uaXNzZXQgJiYgb3B0c1tP UFRfRVhDRVBUXS5pc3NldCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJcIm9ubHlcIiBhbmQg XCJleGNlcHRcIiBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiKSkpOworCisJCS8qCisJ CSAqIEluaXRpYWxpemUgdGhlIG9wdGlvbiBmaWVsZHMgb2YgdGhlIGNvbnRleHQgdG8gdGhlaXIg ZGVmYXVsdHMKKwkJICogZmlyc3QsIHRoZW4gb3ZlcnJpZGUgb25seSB0aG9zZSB0aGF0IHRoZSBj YWxsZXIgZXhwbGljaXRseQorCQkgKiBzcGVjaWZpZWQuICBLZWVwaW5nIHRoZSBkZWZhdWx0IHZh bHVlcyBsaXRlcmFsIGhlcmUgKHJhdGhlciB0aGFuCisJCSAqIGZvbGRlZCBpbnRvIGVhY2ggb3B0 c1tdIGxvb2t1cCkgbWFrZXMgdGhlIGRlZmF1bHRzIG9idmlvdXMgaW4gb25lCisJCSAqIHBsYWNl IGFuZCBhdm9pZHMgdGhlIHRlcm5hcnktc291cCB0aGF0IG1hZGUgdGhlIHByZXZpb3VzCisJCSAq IHBvc2l0aW9uYWwtYm9vbCBjYWxsIHNpdGUgZXJyb3ItcHJvbmUuCisJCSAqLworCQljdHgucmVs aWQgPSBQR19HRVRBUkdfT0lEKDApOworCQljdHgucHJldHR5ID0gZmFsc2U7CisJCWN0eC5ub19v d25lciA9IGZhbHNlOworCQljdHgubm9fdGFibGVzcGFjZSA9IGZhbHNlOworCQljdHguc2NoZW1h X3F1YWxpZmllZCA9IHRydWU7CisJCWN0eC5vbmx5X2tpbmRzID0gTlVMTDsKKwkJY3R4LmV4Y2Vw dF9raW5kcyA9IE5VTEw7CisKKwkJaWYgKG9wdHNbT1BUX1BSRVRUWV0uaXNzZXQpCisJCQljdHgu cHJldHR5ID0gb3B0c1tPUFRfUFJFVFRZXS5ib29sdmFsOworCQlpZiAob3B0c1tPUFRfT1dORVJd Lmlzc2V0KQorCQkJY3R4Lm5vX293bmVyID0gIW9wdHNbT1BUX09XTkVSXS5ib29sdmFsOworCQlp ZiAob3B0c1tPUFRfVEFCTEVTUEFDRV0uaXNzZXQpCisJCQljdHgubm9fdGFibGVzcGFjZSA9ICFv cHRzW09QVF9UQUJMRVNQQUNFXS5ib29sdmFsOworCQlpZiAob3B0c1tPUFRfU0NIRU1BX1FVQUxJ RklFRF0uaXNzZXQpCisJCQljdHguc2NoZW1hX3F1YWxpZmllZCA9IG9wdHNbT1BUX1NDSEVNQV9R VUFMSUZJRURdLmJvb2x2YWw7CisJCWlmIChvcHRzW09QVF9PTkxZXS5pc3NldCkKKwkJCWN0eC5v bmx5X2tpbmRzID0gcGFyc2Vfa2luZF9saXN0KCJvbmx5IiwKKwkJCQkJCQkJCQkJIG9wdHNbT1BU X09OTFldLnRleHR2YWwpOworCQlpZiAob3B0c1tPUFRfRVhDRVBUXS5pc3NldCkKKwkJCWN0eC5l eGNlcHRfa2luZHMgPSBwYXJzZV9raW5kX2xpc3QoImV4Y2VwdCIsCisJCQkJCQkJCQkJCSAgIG9w dHNbT1BUX0VYQ0VQVF0udGV4dHZhbCk7CisKKwkJc3RhdGVtZW50cyA9IHBnX2dldF90YWJsZV9k ZGxfaW50ZXJuYWwoJmN0eCk7CisJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IHN0YXRlbWVudHM7CisJ CWZ1bmNjdHgtPm1heF9jYWxscyA9IGxpc3RfbGVuZ3RoKHN0YXRlbWVudHMpOworCisJCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwlmdW5jY3R4ID0gU1JGX1BFUkNB TExfU0VUVVAoKTsKKwlzdGF0ZW1lbnRzID0gKExpc3QgKikgZnVuY2N0eC0+dXNlcl9mY3R4Owor CisJaWYgKGZ1bmNjdHgtPmNhbGxfY250ciA8IGZ1bmNjdHgtPm1heF9jYWxscykKKwl7CisJCWNo YXIJICAgKnN0bXQ7CisKKwkJc3RtdCA9IGxpc3RfbnRoKHN0YXRlbWVudHMsIGZ1bmNjdHgtPmNh bGxfY250cik7CisKKwkJU1JGX1JFVFVSTl9ORVhUKGZ1bmNjdHgsIENTdHJpbmdHZXRUZXh0RGF0 dW0oc3RtdCkpOworCX0KKwllbHNlCisJeworCQlsaXN0X2ZyZWVfZGVlcChzdGF0ZW1lbnRzKTsK KwkJU1JGX1JFVFVSTl9ET05FKGZ1bmNjdHgpOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRp bHMuYwppbmRleCA4OGRlNWMwNDgxYy4uOTUzNzY2OWY2NGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVs ZXV0aWxzLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxz LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxl LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X2FnZ3JlZ2F0ZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYW0uaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX2F1dGhpZC5oIgpAQCAtMzcwLDcgKzM3MSw3IEBAIHN0YXRpYyB2b2lkIG1ha2VfcHJv cGdyYXBoZGVmX2VsZW1lbnRzKFN0cmluZ0luZm8gYnVmLCBPaWQgcGdyZWxpZCwgY2hhciBwZ2Vr aW5kCiBzdGF0aWMgdm9pZCBtYWtlX3Byb3BncmFwaGRlZl9sYWJlbHMoU3RyaW5nSW5mbyBidWYs IE9pZCBlbGlkLCBjb25zdCBjaGFyICplbGFsaWFzLCBPaWQgZWxyZWxpZCk7CiBzdGF0aWMgdm9p ZCBtYWtlX3Byb3BncmFwaGRlZl9wcm9wZXJ0aWVzKFN0cmluZ0luZm8gYnVmLCBPaWQgZWxsYWJl bGlkLCBPaWQgZWxyZWxpZCk7CiBzdGF0aWMgY2hhciAqcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29y a2VyKE9pZCBzdGF0ZXh0aWQsIGJvb2wgY29sdW1uc19vbmx5LAotCQkJCQkJCQkJCSBib29sIG1p c3Npbmdfb2spOworCQkJCQkJCQkJCSBib29sIG1pc3Npbmdfb2ssIGludCBwcmV0dHlGbGFncyk7 CiBzdGF0aWMgY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKE9pZCByZWxpZCwgaW50IHBy ZXR0eUZsYWdzLAogCQkJCQkJCQkJICBib29sIGF0dHJzT25seSwgYm9vbCBtaXNzaW5nX29rKTsK IHN0YXRpYyBjaGFyICpwZ19nZXRfY29uc3RyYWludGRlZl93b3JrZXIoT2lkIGNvbnN0cmFpbnRJ ZCwgYm9vbCBmdWxsQ29tbWFuZCwKQEAgLTYwMyw2ICs2MDQsMTkgQEAgcGdfZ2V0X3J1bGVkZWZf ZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChy ZXMpKTsKIH0KIAorLyoKKyAqIHBnX2dldF9ydWxlZGVmX2RkbAorICoJCUxpa2UgcGdfZ2V0X3J1 bGVkZWYgYnV0IHVzZXMgdGhlIGFjdGl2ZSBzZWFyY2hfcGF0aCB0byBkZWNpZGUKKyAqCQl3aGV0 aGVyIHRvIHNjaGVtYS1xdWFsaWZ5IHRoZSBydWxlJ3MgdGFyZ2V0IHJlbGF0aW9uIG5hbWUuCisg KgkJRm9yIHVzZSBieSBwZ19nZXRfdGFibGVfZGRsIHdoaWNoIGhhcyBhbHJlYWR5IHNldCBzZWFy Y2hfcGF0aAorICoJCXRvIHRoZSBiYXNlIHNjaGVtYSB3aGVuIHNjaGVtYV9xdWFsaWZpZWQ9ZmFs c2UuCisgKi8KK2NoYXIgKgorcGdfZ2V0X3J1bGVkZWZfZGRsKE9pZCBydWxlb2lkKQoreworCXJl dHVybiBwZ19nZXRfcnVsZWRlZl93b3JrZXIocnVsZW9pZCwgUFJFVFRZRkxBR19JTkRFTlQgfCBQ UkVUVFlGTEFHX1NDSEVNQSk7Cit9CisKIAogc3RhdGljIGNoYXIgKgogcGdfZ2V0X3J1bGVkZWZf d29ya2VyKE9pZCBydWxlb2lkLCBpbnQgcHJldHR5RmxhZ3MpCkBAIC0xMjQxLDYgKzEyNTUsMjIg QEAgcGdfZ2V0X2luZGV4ZGVmX3N0cmluZyhPaWQgaW5kZXhyZWxpZCkKIAkJCQkJCQkJICAwLCBm YWxzZSk7CiB9CiAKKy8qCisgKiBwZ19nZXRfaW5kZXhkZWZfZGRsCisgKgkJTGlrZSBwZ19nZXRf aW5kZXhkZWZfc3RyaW5nIGJ1dCB1c2VzIHRoZSBhY3RpdmUgc2VhcmNoX3BhdGggdG8KKyAqCQlk ZWNpZGUgd2hldGhlciB0byBzY2hlbWEtcXVhbGlmeSB0aGUgaW5kZXhlZCByZWxhdGlvbiBuYW1l LgorICoJCUZvciB1c2UgYnkgcGdfZ2V0X3RhYmxlX2RkbCB3aGljaCBoYXMgYWxyZWFkeSBzZXQg c2VhcmNoX3BhdGgKKyAqCQl0byB0aGUgYmFzZSBzY2hlbWEgd2hlbiBzY2hlbWFfcXVhbGlmaWVk PWZhbHNlLgorICovCitjaGFyICoKK3BnX2dldF9pbmRleGRlZl9kZGwoT2lkIGluZGV4cmVsaWQp Cit7CisJcmV0dXJuIHBnX2dldF9pbmRleGRlZl93b3JrZXIoaW5kZXhyZWxpZCwgMCwgTlVMTCwK KwkJCQkJCQkJICBmYWxzZSwgZmFsc2UsCisJCQkJCQkJCSAgdHJ1ZSwgdHJ1ZSwKKwkJCQkJCQkJ ICBQUkVUVFlGTEFHX1NDSEVNQSwgZmFsc2UpOworfQorCiAvKiBJbnRlcm5hbCB2ZXJzaW9uIHRo YXQganVzdCByZXBvcnRzIHRoZSBrZXktY29sdW1uIGRlZmluaXRpb25zICovCiBjaGFyICoKIHBn X2dldF9pbmRleGRlZl9jb2x1bW5zKE9pZCBpbmRleHJlbGlkLCBib29sIHByZXR0eSkKQEAgLTE5 NjksNyArMTk5OSw3IEBAIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJT2lkCQkJc3RhdGV4dGlkID0gUEdfR0VUQVJHX09JRCgwKTsKIAljaGFyCSAgICpyZXM7CiAK LQlyZXMgPSBwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoc3RhdGV4dGlkLCBmYWxzZSwgdHJ1 ZSk7CisJcmVzID0gcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2VyKHN0YXRleHRpZCwgZmFsc2Us IHRydWUsIDApOwogCiAJaWYgKHJlcyA9PSBOVUxMKQogCQlQR19SRVRVUk5fTlVMTCgpOwpAQCAt MTk4NCw3ICsyMDE0LDIwIEBAIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmKFBHX0ZVTkNUSU9OX0FS R1MpCiBjaGFyICoKIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX3N0cmluZyhPaWQgc3RhdGV4dGlk KQogewotCXJldHVybiBwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoc3RhdGV4dGlkLCBmYWxz ZSwgZmFsc2UpOworCXJldHVybiBwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoc3RhdGV4dGlk LCBmYWxzZSwgZmFsc2UsIDApOworfQorCisvKgorICogcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZf ZGRsCisgKgkJTGlrZSBwZ19nZXRfc3RhdGlzdGljc29iamRlZl9zdHJpbmcgYnV0IHVzZXMgdGhl IGFjdGl2ZSBzZWFyY2hfcGF0aAorICoJCXRvIGRlY2lkZSB3aGV0aGVyIHRvIHNjaGVtYS1xdWFs aWZ5IHRoZSBzdGF0aXN0aWNzIG9iamVjdCBuYW1lLgorICoJCUZvciB1c2UgYnkgcGdfZ2V0X3Rh YmxlX2RkbCB3aGljaCBoYXMgYWxyZWFkeSBzZXQgc2VhcmNoX3BhdGgKKyAqCQl0byB0aGUgYmFz ZSBzY2hlbWEgd2hlbiBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLgorICovCitjaGFyICoKK3BnX2dl dF9zdGF0aXN0aWNzb2JqZGVmX2RkbChPaWQgc3RhdGV4dGlkKQoreworCXJldHVybiBwZ19nZXRf c3RhdGlzdGljc29ial93b3JrZXIoc3RhdGV4dGlkLCBmYWxzZSwgZmFsc2UsIFBSRVRUWUZMQUdf U0NIRU1BKTsKIH0KIAogLyoKQEAgLTE5OTcsNyArMjA0MCw3IEBAIHBnX2dldF9zdGF0aXN0aWNz b2JqZGVmX2NvbHVtbnMoUEdfRlVOQ1RJT05fQVJHUykKIAlPaWQJCQlzdGF0ZXh0aWQgPSBQR19H RVRBUkdfT0lEKDApOwogCWNoYXIJICAgKnJlczsKIAotCXJlcyA9IHBnX2dldF9zdGF0aXN0aWNz b2JqX3dvcmtlcihzdGF0ZXh0aWQsIHRydWUsIHRydWUpOworCXJlcyA9IHBnX2dldF9zdGF0aXN0 aWNzb2JqX3dvcmtlcihzdGF0ZXh0aWQsIHRydWUsIHRydWUsIDApOwogCiAJaWYgKHJlcyA9PSBO VUxMKQogCQlQR19SRVRVUk5fTlVMTCgpOwpAQCAtMjAwOSw3ICsyMDUyLDggQEAgcGdfZ2V0X3N0 YXRpc3RpY3NvYmpkZWZfY29sdW1ucyhQR19GVU5DVElPTl9BUkdTKQogICogSW50ZXJuYWwgd29y a2hvcnNlIHRvIGRlY29tcGlsZSBhbiBleHRlbmRlZCBzdGF0aXN0aWNzIG9iamVjdC4KICAqLwog c3RhdGljIGNoYXIgKgotcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2VyKE9pZCBzdGF0ZXh0aWQs IGJvb2wgY29sdW1uc19vbmx5LCBib29sIG1pc3Npbmdfb2spCitwZ19nZXRfc3RhdGlzdGljc29i al93b3JrZXIoT2lkIHN0YXRleHRpZCwgYm9vbCBjb2x1bW5zX29ubHksIGJvb2wgbWlzc2luZ19v aywKKwkJCQkJCQlpbnQgcHJldHR5RmxhZ3MpCiB7CiAJRm9ybV9wZ19zdGF0aXN0aWNfZXh0IHN0 YXRleHRyZWM7CiAJSGVhcFR1cGxlCXN0YXRleHR0dXA7CkBAIC0yMDY5LDEwICsyMTEzLDE4IEBA IHBnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihPaWQgc3RhdGV4dGlkLCBib29sIGNvbHVtbnNf b25seSwgYm9vbCBtaXNzaW5nX29rKQogCiAJaWYgKCFjb2x1bW5zX29ubHkpCiAJewotCQluc3Ag PSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChzdGF0ZXh0cmVjLT5zdHhuYW1lc3BhY2UpOwot CQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJDUkVBVEUgU1RBVElTVElDUyAlcyIsCi0JCQkJCQkg cXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIobnNwLAotCQkJCQkJCQkJCQkJCU5hbWVTdHIoc3Rh dGV4dHJlYy0+c3R4bmFtZSkpKTsKKwkJaWYgKChwcmV0dHlGbGFncyAmIFBSRVRUWUZMQUdfU0NI RU1BKSAmJgorCQkJU3RhdGlzdGljc09iaklzVmlzaWJsZShzdGF0ZXh0aWQpKQorCQkJYXBwZW5k U3RyaW5nSW5mbygmYnVmLCAiQ1JFQVRFIFNUQVRJU1RJQ1MgJXMiLAorCQkJCQkJCSBxdW90ZV9p ZGVudGlmaWVyKE5hbWVTdHIoc3RhdGV4dHJlYy0+c3R4bmFtZSkpKTsKKwkJZWxzZQorCQl7CisJ CQluc3AgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChzdGF0ZXh0cmVjLT5zdHhuYW1lc3Bh Y2UpOworCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiQ1JFQVRFIFNUQVRJU1RJQ1MgJXMiLAor CQkJCQkJCSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihuc3AsCisJCQkJCQkJCQkJCQkJCU5h bWVTdHIoc3RhdGV4dHJlYy0+c3R4bmFtZSkpKTsKKwkJCXBmcmVlKG5zcCk7CisJCX0KIAogCQkv KgogCQkgKiBEZWNvZGUgdGhlIHN0eGtpbmQgY29sdW1uIHNvIHRoYXQgd2Uga25vdyB3aGljaCBz dGF0cyB0eXBlcyB0bwpAQCAtMjU0NCw2ICsyNTk2LDIwIEBAIHBnX2dldF9jb25zdHJhaW50ZGVm X2NvbW1hbmQoT2lkIGNvbnN0cmFpbnRJZCkKIAlyZXR1cm4gcGdfZ2V0X2NvbnN0cmFpbnRkZWZf d29ya2VyKGNvbnN0cmFpbnRJZCwgdHJ1ZSwgMCwgZmFsc2UpOwogfQogCisvKgorICogcGdfZ2V0 X2NvbnN0cmFpbnRkZWZfYm9keQorICoJCVJldHVybnMgdGhlIGNvbnN0cmFpbnQgZGVmaW5pdGlv biBib2R5IHdpdGhvdXQgdGhlCisgKgkJIkFMVEVSIFRBQkxFIG5hbWUgQUREIENPTlNUUkFJTlQg Y25hbWUiIHByZWZpeC4KKyAqCQlGSyB0YXJnZXQgcmVsYXRpb24gbmFtZXMgaW4gdGhlIGJvZHkg YWxyZWFkeSB1c2UKKyAqCQlnZW5lcmF0ZV9yZWxhdGlvbl9uYW1lIChzZWFyY2hfcGF0aC1hd2Fy ZSkuICBGb3IgdXNlIGJ5CisgKgkJcGdfZ2V0X3RhYmxlX2RkbCB3aGljaCBidWlsZHMgdGhlIEFM VEVSIFRBQkxFIHByZWZpeCBpdHNlbGYuCisgKi8KK2NoYXIgKgorcGdfZ2V0X2NvbnN0cmFpbnRk ZWZfYm9keShPaWQgY29uc3RyYWludElkKQoreworCXJldHVybiBwZ19nZXRfY29uc3RyYWludGRl Zl93b3JrZXIoY29uc3RyYWludElkLCBmYWxzZSwgMCwgZmFsc2UpOworfQorCiAvKgogICogQXMg b2YgOS40LCB3ZSBub3cgdXNlIGFuIE1WQ0Mgc25hcHNob3QgZm9yIHRoaXMuCiAgKi8KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaCBiL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfaW5oZXJpdHMuaAppbmRleCBjYzg3NGFiYWFiYi4uMWU0NjNiMDEwNmQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaAorKysgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX2luaGVyaXRzLmgKQEAgLTU1LDYgKzU1LDcgQEAgREVDTEFSRV9JTkRFWChw Z19pbmhlcml0c19wYXJlbnRfaW5kZXgsIDIxODcsIEluaGVyaXRzUGFyZW50SW5kZXhJZCwgcGdf aW5oZXJpdHMKIGV4dGVybiBMaXN0ICpmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuKE9pZCBwYXJl bnRyZWxJZCwgTE9DS01PREUgbG9ja21vZGUpOwogZXh0ZXJuIExpc3QgKmZpbmRfaW5oZXJpdGFu Y2VfY2hpbGRyZW5fZXh0ZW5kZWQoT2lkIHBhcmVudHJlbElkLCBib29sIG9taXRfZGV0YWNoZWQs CiAJCQkJCQkJCQkJCQlMT0NLTU9ERSBsb2NrbW9kZSwgYm9vbCAqZGV0YWNoZWRfZXhpc3QsIFRy YW5zYWN0aW9uSWQgKmRldGFjaGVkX3htaW4pOworZXh0ZXJuIExpc3QgKmZpbmRfaW5oZXJpdGFu Y2VfcGFyZW50cyhPaWQgcmVsaWQsIExPQ0tNT0RFIGxvY2ttb2RlKTsKIAogZXh0ZXJuIExpc3Qg KmZpbmRfYWxsX2luaGVyaXRvcnMoT2lkIHBhcmVudHJlbElkLCBMT0NLTU9ERSBsb2NrbW9kZSwK IAkJCQkJCQkJIExpc3QgKipudW1wYXJlbnRzKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4 IDQwMmQ4Njk3MTBiLi5iMDE0NTRkMDZkZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC04 NjE0LDYgKzg2MTQsMTMgQEAKICAgcHJvcmV0dHlwZSA9PiAndGV4dCcsIHByb2FyZ3R5cGVzID0+ ICdyZWdkYXRhYmFzZSBib29sIGJvb2wgYm9vbCcsCiAgIHByb2FyZ25hbWVzID0+ICd7ZGF0YWJh c2UscHJldHR5LG93bmVyLHRhYmxlc3BhY2V9JywKICAgcHJvYXJnZGVmYXVsdHMgPT4gJ3tmYWxz ZSx0cnVlLHRydWV9JywgcHJvc3JjID0+ICdwZ19nZXRfZGF0YWJhc2VfZGRsJyB9LAoreyBvaWQg PT4gJzgyMTUnLCBkZXNjciA9PiAnZ2V0IERETCB0byByZWNyZWF0ZSBhIHRhYmxlJywKKyAgcHJv bmFtZSA9PiAncGdfZ2V0X3RhYmxlX2RkbCcsIHByb3Jvd3MgPT4gJzUwJywgcHJvdmFyaWFkaWMg PT4gJ3RleHQnLAorICBwcm9pc3N0cmljdCA9PiAnZicsIHByb3JldHNldCA9PiAndCcsIHByb3Zv bGF0aWxlID0+ICdzJywgcHJvcGFyYWxsZWwgPT4gJ3InLAorICBwcm9uYXJnZGVmYXVsdHMgPT4g JzEnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJ3JlZ2NsYXNzIF90 ZXh0JywgcHJvYWxsYXJndHlwZXMgPT4gJ3tyZWdjbGFzcyxfdGV4dH0nLAorICBwcm9hcmdtb2Rl cyA9PiAne2ksdn0nLCBwcm9hcmdkZWZhdWx0cyA9PiAne05VTEx9JywKKyAgcHJvc3JjID0+ICdw Z19nZXRfdGFibGVfZGRsJyB9LAogeyBvaWQgPT4gJzI1MDknLAogICBkZXNjciA9PiAnZGVwYXJz ZSBhbiBlbmNvZGVkIGV4cHJlc3Npb24gd2l0aCBwcmV0dHktcHJpbnQgb3B0aW9uJywKICAgcHJv bmFtZSA9PiAncGdfZ2V0X2V4cHInLCBwcm92b2xhdGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4g J3RleHQnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdGFibGVjbWRzLmggYi9z cmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMuaAppbmRleCBjM2Q4NTE4Y2I2Mi4uZDMzNTYz ZmRlYWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCisrKyBi L3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCkBAIC05Miw2ICs5Miw3IEBAIGV4dGVy biB2b2lkIGNoZWNrX29mX3R5cGUoSGVhcFR1cGxlIHR5cGV0dXBsZSk7CiAKIGV4dGVybiB2b2lk IHJlZ2lzdGVyX29uX2NvbW1pdF9hY3Rpb24oT2lkIHJlbGlkLCBPbkNvbW1pdEFjdGlvbiBhY3Rp b24pOwogZXh0ZXJuIHZvaWQgcmVtb3ZlX29uX2NvbW1pdF9hY3Rpb24oT2lkIHJlbGlkKTsKK2V4 dGVybiBPbkNvbW1pdEFjdGlvbiBnZXRfb25fY29tbWl0X2FjdGlvbihPaWQgcmVsaWQpOwogCiBl eHRlcm4gdm9pZCBQcmVDb21taXRfb25fY29tbWl0X2FjdGlvbnModm9pZCk7CiBleHRlcm4gdm9p ZCBBdEVPWGFjdF9vbl9jb21taXRfYWN0aW9ucyhib29sIGlzQ29tbWl0KTsKQEAgLTEwOCw0ICsx MDksNiBAQCBleHRlcm4gdm9pZCBSYW5nZVZhckNhbGxiYWNrT3duc1JlbGF0aW9uKGNvbnN0IFJh bmdlVmFyICpyZWxhdGlvbiwKIGV4dGVybiBib29sIFBhcnRDb25zdHJhaW50SW1wbGllZEJ5UmVs Q29uc3RyYWludChSZWxhdGlvbiBzY2FucmVsLAogCQkJCQkJCQkJCQkJIExpc3QgKnBhcnRDb25z dHJhaW50KTsKIAorZXh0ZXJuIGNvbnN0IGNoYXIgKnN0b3JhZ2VfbmFtZShjaGFyIGMpOworCiAj ZW5kaWYJCQkJCQkJLyogVEFCTEVDTURTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0 aWxzL3J1bGV1dGlscy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmgKaW5kZXggMjVj MDVlMmY2NDkuLmMzYjNkYzY1YzkzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ydWxl dXRpbHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaApAQCAtMjUsNiArMjUs NyBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVkU3RtdCBQbGFubmVkU3RtdDsKICNkZWZpbmUgUlVM RV9JTkRFWERFRl9LRVlTX09OTFkJCTB4MDIJLyogaWdub3JlIGluY2x1ZGVkIGF0dHJpYnV0ZXMg Ki8KIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9zdHJpbmcoT2lkIGluZGV4cmVsaWQp OworZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9kZGwoT2lkIGluZGV4cmVsaWQpOwogZXh0 ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9jb2x1bW5zKE9pZCBpbmRleHJlbGlkLCBib29sIHBy ZXR0eSk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX2NvbHVtbnNfZXh0ZW5kZWQoT2lk IGluZGV4cmVsaWQsCiAJCQkJCQkJCQkJCSAgdWludDE2IGZsYWdzKTsKQEAgLTM0LDYgKzM1LDcg QEAgZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29s IHByZXR0eSk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRjb25zdHJkZWZfc3RyaW5nKE9pZCBw YXJ0aXRpb25JZCwgY2hhciAqYWxpYXNuYW1lKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9jb25z dHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFpbnRJZCk7CitleHRlcm4gY2hhciAqcGdfZ2V0 X2NvbnN0cmFpbnRkZWZfYm9keShPaWQgY29uc3RyYWludElkKTsKIGV4dGVybiBjaGFyICpkZXBh cnNlX2V4cHJlc3Npb24oTm9kZSAqZXhwciwgTGlzdCAqZHBjb250ZXh0LAogCQkJCQkJCQlib29s IGZvcmNlcHJlZml4LCBib29sIHNob3dpbXBsaWNpdCk7CiBleHRlcm4gTGlzdCAqZGVwYXJzZV9j b250ZXh0X2Zvcihjb25zdCBjaGFyICphbGlhc25hbWUsIE9pZCByZWxpZCk7CkBAIC01NCw1ICs1 Niw3IEBAIGV4dGVybiBjaGFyICpnZXRfcmFuZ2VfcGFydGJvdW5kX3N0cmluZyhMaXN0ICpib3Vu ZF9kYXR1bXMpOwogZXh0ZXJuIHZvaWQgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERh dHVtIHJlbG9wdGlvbnMpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZf c3RyaW5nKE9pZCBzdGF0ZXh0aWQpOworZXh0ZXJuIGNoYXIgKnBnX2dldF9zdGF0aXN0aWNzb2Jq ZGVmX2RkbChPaWQgc3RhdGV4dGlkKTsKK2V4dGVybiBjaGFyICpwZ19nZXRfcnVsZWRlZl9kZGwo T2lkIHJ1bGVvaWQpOwogCiAjZW5kaWYJCQkJCQkJLyogUlVMRVVUSUxTX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BnX2dldF90YWJsZV9kZGwub3V0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40Y2VkNjQ5ZTlhMwotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5vdXQKQEAgLTAsMCAr MSwxMjY1IEBACistLQorLS0gcGdfZ2V0X3RhYmxlX2RkbAorLS0KKy0tIEFsbCB0ZXN0cyBwYXNz IG93bmVyPT5mYWxzZSBzbyB0aGUgQUxURVIgVEFCTEUgT1dORVIgVE8gbGluZSBpcyBub3QKKy0t IGVtaXR0ZWQsIGtlZXBpbmcgb3V0cHV0IHN0YWJsZSBhY3Jvc3MgdGVzdCBydW5uZXJzICh3aGlj aCBtYXkgcnVuIHVuZGVyCistLSBkaWZmZXJlbnQgcm9sZSBuYW1lcykuCistLQorQ1JFQVRFIFND SEVNQSBwZ3RibF9kZGxfdGVzdDsKK1NFVCBzZWFyY2hfcGF0aCA9IHBndGJsX2RkbF90ZXN0Owor LS0gQmFzaWMgdGFibGUgd2l0aCBQUklNQVJZIEtFWSwgTk9UIE5VTEwsIERFRkFVTFQsIENPTExB VEUuCitDUkVBVEUgVEFCTEUgYmFzaWMgKAorICAgIGlkIGludCBQUklNQVJZIEtFWSwKKyAgICBu YW1lIHRleHQgTk9UIE5VTEwgREVGQVVMVCAnYW5vbicgQ09MTEFURSAiQyIKKyk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYmFzaWMgKGlkIGludGVnZXIgTk9UIE5V TEwsIG5hbWUgdGV4dCBDT0xMQVRFICJDIiBERUZBVUxUICdhbm9uJzo6dGV4dCBOT1QgTlVMTCk7 CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYmFzaWMgQUREIENPTlNUUkFJTlQgYmFzaWNf cGtleSBQUklNQVJZIEtFWSAoaWQpOworKDIgcm93cykKKworLS0gSWRlbnRpdHkgY29sdW1ucyAo d2l0aCBkZWZhdWx0IGFuZCBjdXN0b20gc2VxdWVuY2Ugb3B0aW9ucykuCitDUkVBVEUgVEFCTEUg aWRfY29scyAoCisgICAgaWRfYWx3YXlzIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZ LAorICAgIGlkX2RlZmF1bHQgaW50IEdFTkVSQVRFRCBCWSBERUZBVUxUIEFTIElERU5USVRZCisp OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZF9jb2xzJzo6cmVnY2xhc3MsICdv d25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkX2NvbHMgKGlkX2Fsd2F5cyBpbnRlZ2VyIEdFTkVS QVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgTk9UIE5VTEwsIGlkX2RlZmF1bHQgaW50ZWdlciBHRU5F UkFURUQgQlkgREVGQVVMVCBBUyBJREVOVElUWSBOT1QgTlVMTCk7CisoMSByb3cpCisKK0NSRUFU RSBUQUJMRSBpZF9jdXN0b20gKAorICAgIHYgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJ VFkgKAorICAgICAgICBTRVFVRU5DRSBOQU1FIGlkX2N1c3RvbV92X3NlcQorICAgICAgICBTVEFS VCBXSVRIIDEwMCBJTkNSRU1FTlQgQlkgNQorICAgICAgICBNSU5WQUxVRSA1MCBNQVhWQUxVRSAx MDAwCisgICAgICAgIENBQ0hFIDEwIENZQ0xFCisgICAgKQorKTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnaWRfY3VzdG9tJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJM RSBwZ3RibF9kZGxfdGVzdC5pZF9jdXN0b20gKHYgaW50ZWdlciBHRU5FUkFURUQgQUxXQVlTIEFT IElERU5USVRZIChTVEFSVCBXSVRIIDEwMCBJTkNSRU1FTlQgQlkgNSBNSU5WQUxVRSA1MCBNQVhW QUxVRSAxMDAwIENBQ0hFIDEwIENZQ0xFKSBOT1QgTlVMTCk7CisoMSByb3cpCisKKy0tIEdlbmVy YXRlZCBzdG9yZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIGdlbl9jb2xzICgKKyAgICBjZW50cyBp bnQsCisgICAgZG9sbGFycyBudW1lcmljIEdFTkVSQVRFRCBBTFdBWVMgQVMgKGNlbnRzIC8gMTAw LjApIFNUT1JFRAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnZ2VuX2NvbHMn OjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuZ2VuX2NvbHMgKGNlbnRzIGludGVn ZXIsIGRvbGxhcnMgbnVtZXJpYyBHRU5FUkFURUQgQUxXQVlTIEFTICgoKGNlbnRzKTo6bnVtZXJp YyAvIDEwMC4wKSkgU1RPUkVEKTsKKygxIHJvdykKKworLS0gR2VuZXJhdGVkIHZpcnR1YWwgY29s dW1uLgorQ1JFQVRFIFRBQkxFIGdlbl92aXJ0dWFsICgKKyAgICBiYXNlIGludCwKKyAgICBkZXJp dmVkIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChiYXNlICogMikgVklSVFVBTAorKTsKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnZ2VuX3ZpcnR1YWwnOjpyZWdjbGFzcywgJ293bmVy JywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lmdlbl92aXJ0 dWFsIChiYXNlIGludGVnZXIsIGRlcml2ZWQgaW50ZWdlciBHRU5FUkFURUQgQUxXQVlTIEFTICgo YmFzZSAqIDIpKSBWSVJUVUFMKTsKKygxIHJvdykKKworLS0gU1RPUkFHRSBhbmQgQ09NUFJFU1NJ T04gKG9ubHkgZW1pdHRlZCB3aGVuIG5vbi1kZWZhdWx0IGZvciB0aGUgdHlwZSkuCitDUkVBVEUg VEFCTEUgc3RvcmFnZV9jb2xzICgKKyAgICBhIHRleHQgU1RPUkFHRSBFWFRFUk5BTCwKKyAgICBi IHRleHQgU1RPUkFHRSBNQUlOLAorICAgIGMgdGV4dCBDT01QUkVTU0lPTiBwZ2x6CispOworU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzdG9yYWdlX2NvbHMnOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnN0b3Jh Z2VfY29scyAoYSB0ZXh0IFNUT1JBR0UgRVhURVJOQUwsIGIgdGV4dCBTVE9SQUdFIE1BSU4sIGMg dGV4dCBDT01QUkVTU0lPTiBwZ2x6KTsKKygxIHJvdykKKworLS0gQ29uc3RyYWludHM6IENIRUNL LCBVTklRVUUsIEZPUkVJR04gS0VZIChERUZFUlJBQkxFKS4KK0NSRUFURSBUQUJMRSByZWZkIChp ZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGNvbnMgKAorICAgIGEgaW50IENIRUNL IChhID4gMCksCisgICAgYiBpbnQgVU5JUVVFLAorICAgIGMgaW50IFJFRkVSRU5DRVMgcmVmZChp ZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMg KGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIsIENPTlNUUkFJTlQgY29uc19hX2NoZWNr IENIRUNLICgoYSA+IDApKSk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyBBREQg Q09OU1RSQUlOVCBjb25zX2Jfa2V5IFVOSVFVRSAoYik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRs X3Rlc3QuY29ucyBBREQgQ09OU1RSQUlOVCBjb25zX2NfZmtleSBGT1JFSUdOIEtFWSAoYykgUkVG RVJFTkNFUyByZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRDsKKygzIHJvd3Mp CisKKy0tIEluZGV4ZXM6IGZ1bmN0aW9uYWwgYW5kIHBhcnRpYWwuICBDb25zdHJhaW50LWJhY2tp bmcgaW5kZXhlcyBhcmUKKy0tIHN1cHByZXNzZWQgKHRoZXkgYXJlIGVtaXR0ZWQgYnkgdGhlIGNv bnN0cmFpbnQgbG9vcCkuCitDUkVBVEUgVEFCTEUgaWR4ZCAoaWQgaW50IFBSSU1BUlkgS0VZLCBu YW1lIHRleHQpOworQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04gaWR4ZCAobG93ZXIobmFtZSkp OworQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBpZHhkIChpZCkgV0hFUkUgaWQgPiAxMDA7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVy JywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5h bWUgdGV4dCk7CisgQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04gaWR4ZCBVU0lORyBidHJlZSAo bG93ZXIobmFtZSkpOworIENSRUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gaWR4ZCBVU0lORyBi dHJlZSAoaWQpIFdIRVJFIChpZCA+IDEwMCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu aWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKyg0IHJvd3Mp CisKKy0tIEluaGVyaXRhbmNlLCBpbmNsdWRpbmcgYSBjaGlsZCBERUZBVUxUIG92ZXJyaWRlIG9u IGFuIGluaGVyaXRlZCBjb2x1bW4uCitDUkVBVEUgVEFCTEUgcGFyIChhIGludCBERUZBVUxUIDEs IGIgdGV4dCk7CitDUkVBVEUgVEFCTEUgY2ggKGMgaW50KSBJTkhFUklUUyAocGFyKTsKK0FMVEVS IFRBQkxFIGNoIEFMVEVSIENPTFVNTiBhIFNFVCBERUZBVUxUIDk5OTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnY2gnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9k ZGxfdGVzdC5jaCAoYyBpbnRlZ2VyKSBJTkhFUklUUyAocGd0YmxfZGRsX3Rlc3QucGFyKTsKKyBB TFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jaCBBTFRFUiBDT0xVTU4gYSBTRVQgREVGQVVMVCA5 OTk7CisoMiByb3dzKQorCistLSBQZXItY29sdW1uIGF0dG9wdGlvbnM6IGVtaXR0ZWQgYXMgQUxU RVIgQ09MVU1OIFNFVCAoLi4uKS4KK0NSRUFURSBUQUJMRSBhdHRvcHQgKGEgaW50LCBiIHRleHQp OworQUxURVIgVEFCTEUgYXR0b3B0IEFMVEVSIENPTFVNTiBhIFNFVCAobl9kaXN0aW5jdCA9IDEw MCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2F0dG9wdCc6OnJlZ2NsYXNzLCAn b3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5hdHRvcHQgKGEgaW50ZWdlciwgYiB0ZXh0KTsK KyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5hdHRvcHQgQUxURVIgQ09MVU1OIGEgU0VUIChu X2Rpc3RpbmN0PScxMDAnKTsKKygyIHJvd3MpCisKKy0tIFBhcnRpdGlvbmVkIHRhYmxlIHBhcmVu dHMgKFJBTkdFLCBIQVNILCBhbmQgTElTVCkuCitDUkVBVEUgVEFCTEUgcGFydGVkX3JhbmdlIChp ZCBpbnQsIGsgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFu Z2UgKGlkIGludGVnZXIsIGsgaW50ZWdlcikgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CisoMSBy b3cpCisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaGFzaCAoaWQgaW50KSBQQVJUSVRJT04gQlkgSEFT SCAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfaGFzaCc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9oYXNo IChpZCBpbnRlZ2VyKSBQQVJUSVRJT04gQlkgSEFTSCAoaWQpOworKDEgcm93KQorCitDUkVBVEUg VEFCTEUgcGFydGVkX2xpc3QgKGlkIGludCwgcmVnaW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNU IChyZWdpb24pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfbGlzdCc6 OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfbGlzdCAoaWQgaW50ZWdlciwgcmVnaW9u IHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworKDEgcm93KQorCistLSBQYXJ0aXRp b24gY2hpbGRyZW46IEZST00vVE8sIFdJVEggKG1vZHVsdXMsIHJlbWFpbmRlciksIERFRkFVTFQu CitDUkVBVEUgVEFCTEUgcGFydGVkX3JhbmdlXzEgUEFSVElUSU9OIE9GIHBhcnRlZF9yYW5nZQor ICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitBTFRFUiBUQUJMRSBwYXJ0ZWRfcmFu Z2VfMSBBTFRFUiBDT0xVTU4gayBTRVQgREVGQVVMVCA3OworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2VfMSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3JhbmdlXzEgUEFSVElU SU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZSBGT1IgVkFMVUVTIEZST00gKDApIFRP ICgxMDApOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZV8xIEFMVEVS IENPTFVNTiBrIFNFVCBERUZBVUxUIDc7CisoMiByb3dzKQorCitDUkVBVEUgVEFCTEUgcGFydGVk X2hhc2hfMCBQQVJUSVRJT04gT0YgcGFydGVkX2hhc2gKKyAgICBGT1IgVkFMVUVTIFdJVEggKG1v ZHVsdXMgMiwgcmVtYWluZGVyIDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdw YXJ0ZWRfaGFzaF8wJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9oYXNoXzAg UEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9oYXNoIEZPUiBWQUxVRVMgV0lUSCAo bW9kdWx1cyAyLCByZW1haW5kZXIgMCk7CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRf cmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFuZ2UgREVGQVVMVDsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlX2RlZic6OnJlZ2NsYXNzLCAnb3duZXIn LCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF90ZXN0LnBhcnRlZF9yYW5nZV9kZWYgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBh cnRlZF9yYW5nZSBERUZBVUxUOworKDEgcm93KQorCistLSBSdWxlcy4KK0NSRUFURSBUQUJMRSBy dCAoaWQgaW50KTsKK0NSRUFURSBUQUJMRSBydF9sb2cgKGlkIGludCk7CitDUkVBVEUgUlVMRSBy dF9sb2dfaW5zZXJ0IEFTIE9OIElOU0VSVCBUTyBydAorICAgIERPIEFMU08gSU5TRVJUIElOVE8g cnRfbG9nIFZBTFVFUyAoTkVXLmlkKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cnQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgcGdfZ2V0 X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJ0IChp ZCBpbnRlZ2VyKTsKKyBDUkVBVEUgUlVMRSBydF9sb2dfaW5zZXJ0IEFTICAgICAgICAgICAgICAg ICAgICsKKyAgICAgT04gSU5TRVJUIFRPIHJ0IERPICBJTlNFUlQgSU5UTyBydF9sb2cgKGlkKSsK KyAgIFZBTFVFUyAobmV3LmlkKTsKKygyIHJvd3MpCisKKy0tIEV4dGVuZGVkIHN0YXRpc3RpY3Mu CitDUkVBVEUgVEFCTEUgc3R4IChhIGludCwgYiBpbnQsIGMgaW50KTsKK0NSRUFURSBTVEFUSVNU SUNTIHN0eF9uZHYgKG5kaXN0aW5jdCkgT04gYSwgYiBGUk9NIHN0eDsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnN0eCAo YSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50ZWdlcik7CisgQ1JFQVRFIFNUQVRJU1RJQ1Mgc3R4 X25kdiAobmRpc3RpbmN0KSBPTiBhLCBiIEZST00gc3R4OworKDIgcm93cykKKworLS0gUm93LWxl dmVsIHNlY3VyaXR5IHRvZ2dsZXMuCitDUkVBVEUgVEFCTEUgcmxzIChpZCBpbnQpOworQUxURVIg VEFCTEUgcmxzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CitBTFRFUiBUQUJMRSBybHMgRk9S Q0UgUk9XIExFVkVMIFNFQ1VSSVRZOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdy bHMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUg cGd0YmxfZGRsX3Rlc3QucmxzIChpZCBpbnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxf dGVzdC5ybHMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9k ZGxfdGVzdC5ybHMgRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZOworKDMgcm93cykKKworLS0gUkVQ TElDQSBJREVOVElUWTogZW1pdHRlZCBvbmx5IHdoZW4gbm90IHRoZSBkZWZhdWx0LgorQ1JFQVRF IFRBQkxFIHJpX2Z1bGwgKGEgaW50KTsKK0FMVEVSIFRBQkxFIHJpX2Z1bGwgUkVQTElDQSBJREVO VElUWSBGVUxMOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9mdWxsJzo6cmVn Y2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF90ZXN0LnJpX2Z1bGwgKGEgaW50ZWdlcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu cmlfZnVsbCBSRVBMSUNBIElERU5USVRZIEZVTEw7CisoMiByb3dzKQorCitDUkVBVEUgVEFCTEUg cmlfaWR4IChhIGludCBOT1QgTlVMTCk7CitDUkVBVEUgVU5JUVVFIElOREVYIHJpX2lkeF9hIE9O IHJpX2lkeCAoYSk7CitBTFRFUiBUQUJMRSByaV9pZHggUkVQTElDQSBJREVOVElUWSBVU0lORyBJ TkRFWCByaV9pZHhfYTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4Jzo6 cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2lkeCAoYSBpbnRlZ2Vy IE5PVCBOVUxMKTsKKyBDUkVBVEUgVU5JUVVFIElOREVYIHJpX2lkeF9hIE9OIHJpX2lkeCBVU0lO RyBidHJlZSAoYSk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfaWR4IFJFUExJQ0Eg SURFTlRJVFkgVVNJTkcgSU5ERVggcmlfaWR4X2E7CisoMyByb3dzKQorCistLSBVTkxPR0dFRCAr IHJlbG9wdGlvbnMuCitDUkVBVEUgVU5MT0dHRUQgVEFCTEUgdW5vIChpZCBpbnQpIFdJVEggKGZp bGxmYWN0b3IgPSA3MCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Vubyc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVU5MT0dHRUQgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu dW5vIChpZCBpbnRlZ2VyKSBXSVRIIChmaWxsZmFjdG9yPSc3MCcpOworKDEgcm93KQorCistLSBU eXBlZCB0YWJsZSAoQ1JFQVRFIFRBQkxFIE9GIHR5cGVfbmFtZSkuICBDb2x1bW5zIGluaGVyaXRl ZCBmcm9tIHRoZQorLS0gdHlwZSBlbWl0IG5vdGhpbmc7IGxvY2FsbHktYXBwbGllZCBERUZBVUxU LCBOT1QgTlVMTCBhbmQgQ0hFQ0sgY29tZQorLS0gb3V0IHRocm91Z2ggYSBzaW5nbGUgIihjb2wg V0lUSCBPUFRJT05TIC4uLikiIGxpc3QuCitDUkVBVEUgVFlQRSB0eXBlZF90IEFTIChhIGludCwg YiB0ZXh0KTsKK0NSRUFURSBUQUJMRSB0eXBlZF9wbGFpbiBPRiB0eXBlZF90OworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0eXBlZF9wbGFpbic6OnJlZ2NsYXNzLCAnb3duZXInLCAn ZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9k ZGxfdGVzdC50eXBlZF9wbGFpbiBPRiBwZ3RibF9kZGxfdGVzdC50eXBlZF90OworKDEgcm93KQor CitDUkVBVEUgVEFCTEUgdHlwZWRfb3ZlciBPRiB0eXBlZF90ICgKKyAgICBhIFdJVEggT1BUSU9O UyBERUZBVUxUIDcgTk9UIE5VTEwsCisgICAgYiBXSVRIIE9QVElPTlMgTk9UIE5VTEwsCisgICAg Q09OU1RSQUlOVCBiX25vbmVtcHR5IENIRUNLIChsZW5ndGgoYikgPiAwKQorKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndHlwZWRfb3Zlcic6OnJlZ2NsYXNzLCAnb3duZXInLCAn ZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QudHlwZWRf b3ZlciBPRiBwZ3RibF9kZGxfdGVzdC50eXBlZF90IChhIFdJVEggT1BUSU9OUyBERUZBVUxUIDcg Tk9UIE5VTEwsIGIgV0lUSCBPUFRJT05TIE5PVCBOVUxMLCBDT05TVFJBSU5UIGJfbm9uZW1wdHkg Q0hFQ0sgKChsZW5ndGgoYikgPiAwKSkpOworKDEgcm93KQorCistLSBUZW1wb3JhcnkgdGFibGVz ICsgT04gQ09NTUlULiAgVGVtcCB0YWJsZXMgbXVzdCBuZXZlciBiZSBlbWl0dGVkIHdpdGgKKy0t IHRoZSBzZXNzaW9uLXByaXZhdGUgcGdfdGVtcF9OTiBzY2hlbWEgcHJlZml4IC0tIHRoZSBURU1Q T1JBUlkga2V5d29yZAorLS0gYWxyZWFkeSBwbGFjZXMgdGhlIHRhYmxlIGluIHBnX3RlbXAgYW5k IHRoZSBwcmVmaXggaXMgbm9uLXJlcGxheWFibGUuCistLSBPTiBDT01NSVQgRFJPUCBvbmx5IGZp cmVzIGF0IGNvbW1pdCwgc28gdGhlIHF1ZXJpZXMgdGhhdCBuZWVkIHRvIHNlZQorLS0gdGhlIGNh dGFsb2cgZW50cnkgbXVzdCBydW4gaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gYXMgdGhlIENSRUFU RS4KK0JFR0lOOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWZhdWx0IChpZCBpbnQpOworQ1JF QVRFIFRFTVAgVEFCTEUgdGVtcF9kZWxldGUgKGlkIGludCkgT04gQ09NTUlUIERFTEVURSBST1dT OworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kcm9wIChpZCBpbnQpIE9OIENPTU1JVCBEUk9QOwor U0VMRUNUIGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1wX2RlZmF1bHQnOjpyZWdjbGFz cywgJ293bmVyJywgJ2ZhbHNlJykgQVMgbGluZQorV0hFUkUgbGluZSBMSUtFICdDUkVBVEUgJSc7 CisgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBURU1QT1JBUlkgVEFCTEUgdGVtcF9kZWZhdWx0IChpZCBpbnRlZ2VyKTsKKygxIHJvdykKKwor U0VMRUNUIGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1wX2RlbGV0ZSc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnKSBBUyBsaW5lCitXSEVSRSBsaW5lIExJS0UgJ0NSRUFURSAlJzsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRFTVBPUkFSWSBUQUJM RSB0ZW1wX2RlbGV0ZSAoaWQgaW50ZWdlcikgT04gQ09NTUlUIERFTEVURSBST1dTOworKDEgcm93 KQorCitTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBfZHJvcCc6OnJlZ2Ns YXNzLCAnb3duZXInLCAnZmFsc2UnKSBBUyBsaW5lCitXSEVSRSBsaW5lIExJS0UgJ0NSRUFURSAl JzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSB0ZW1wX2Ryb3AgKGlk IGludGVnZXIpIE9OIENPTU1JVCBEUk9QOworKDEgcm93KQorCitST0xMQkFDSzsKKy0tIFByZXR0 eSBtb2RlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnLCAncHJldHR5JywgJ3RydWUnKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0 LmJhc2ljICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAg aWQgaW50ZWdlciBOT1QgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKworICAgICBuYW1lIHRleHQgQ09MTEFURSAiQyIgREVGQVVMVCAnYW5v bic6OnRleHQgTk9UIE5VTEwgICAgICAgICAgICAgICAgICAgICArCisgKTsKKyBBTFRFUiBUQUJM RSBwZ3RibF9kZGxfdGVzdC5iYXNpYyBBREQgQ09OU1RSQUlOVCBiYXNpY19wa2V5IFBSSU1BUlkg S0VZIChpZCk7CisoMiByb3dzKQorCistLSBWQVJJQURJQyBBUlJBWVsuLi5dIGNhbGwgZm9ybTog b3B0aW9uIHBhaXJzIGNhbiBiZSBwYXNzZWQgYXMgYSBzaW5nbGUKKy0tIHRleHRbXSB0YWdnZWQg d2l0aCBWQVJJQURJQywgaW4gYWRkaXRpb24gdG8gdGhlIHBvc2l0aW9uYWwgc3BlbGxpbmcKKy0t IGV4ZXJjaXNlZCBhYm92ZS4gIFRoaXMgcmVxdWlyZXMgcHJvYXJndHlwZXMgdG8gZGVjbGFyZSB0 aGUgdmFyaWFkaWMKKy0tIGFyZ3VtZW50IGFzIHRoZSBhcnJheSB0eXBlIChfdGV4dCkuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVkFSSUFESUMgQVJSQVlbJ293bmVyJywgJ2ZhbHNlJ10pOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBD UkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYmFzaWMgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5h bWUgdGV4dCBDT0xMQVRFICJDIiBERUZBVUxUICdhbm9uJzo6dGV4dCBOT1QgTlVMTCk7CisgQUxU RVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYmFzaWMgQUREIENPTlNUUkFJTlQgYmFzaWNfcGtleSBQ UklNQVJZIEtFWSAoaWQpOworKDIgcm93cykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZB UklBRElDIEFSUkFZWydvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ3ByZXR0eScsICd0cnVlJ106OnRleHRbXSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5iYXNpYyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICArCisgICAgIGlkIGludGVnZXIgTk9UIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgbmFtZSB0ZXh0IENPTExBVEUgIkMiIERF RkFVTFQgJ2Fub24nOjp0ZXh0IE5PVCBOVUxMICAgICAgICAgICAgICAgICAgICAgKworICk7Cisg QUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYmFzaWMgQUREIENPTlNUUkFJTlQgYmFzaWNfcGtl eSBQUklNQVJZIEtFWSAoaWQpOworKDIgcm93cykKKworLS0gVkFSSUFESUMgTlVMTDo6dGV4dFtd IGlzIGVxdWl2YWxlbnQgdG8gb21pdHRpbmcgdGhlIHZhcmlhZGljIGFyZ3VtZW50czsKKy0tIGNo ZWNrIHRoZSByb3cgY291bnQgcmF0aGVyIHRoYW4gdGhlIHJvd3MgdGhlbXNlbHZlcywgYmVjYXVz ZSB3aXRob3V0CistLSAnb3duZXInLCAnZmFsc2UnIHRoZSBvdXRwdXQgY29udGFpbnMgYW4gQUxU RVIgVEFCTEUgLi4uIE9XTkVSIFRPIGxpbmUKKy0tIHRoYXQgdmFyaWVzIGFjcm9zcyB0ZXN0IHJ1 bm5lcnMuCitTRUxFQ1QgY291bnQoKikgPiAwIEFTIG9rCisgIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnYmFzaWMnOjpyZWdjbGFzcywgVkFSSUFESUMgTlVMTDo6dGV4dFtdKTsKKyBvayAKKy0tLS0K KyB0CisoMSByb3cpCisKKy0tIG9ubHkgLyBleGNlcHQgZ2F0aW5nOiBlYWNoIGVtaXRzIGVpdGhl ciBvbmx5IHRoZSBsaXN0ZWQga2luZHMKKy0tIChvbmx5KSBvciBldmVyeSBraW5kIGV4Y2VwdCB0 aGUgbGlzdGVkIG9uZXMgKGV4Y2VwdCkuICBUaGUgdHdvCistLSBhcmUgbXV0dWFsbHkgZXhjbHVz aXZlLiAgS2luZCB2b2NhYnVsYXJ5OiB0YWJsZSwgaW5kZXgsCistLSBwcmltYXJ5X2tleSwgdW5p cXVlLCBjaGVjaywgZm9yZWlnbl9rZXksIGV4Y2x1c2lvbiwgcnVsZSwKKy0tIHN0YXRpc3RpY3Ms IHRyaWdnZXIsIHBvbGljeSwgcmxzLCByZXBsaWNhX2lkZW50aXR5LCBwYXJ0aXRpb24uCistLSBO T1QgTlVMTCBpcyBub3QgaW4gdGhlIHZvY2FidWxhcnkgLSBhbHdheXMgZW1pdHRlZCB0byBwcmV2 ZW50CistLSBwcm9kdWNpbmcgc2NoZW1hcyB0aGF0IHNpbGVudGx5IGFjY2VwdCBOVUxMcyB0aGUg c291cmNlIHdvdWxkCistLSBoYXZlIHJlamVjdGVkLgorLS0KKy0tIGV4Y2VwdD1pbmRleCBoaWRl cyB0aGUgQ1JFQVRFIElOREVYIHN0YXRlbWVudHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ2luZGV4Jyk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQg KGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRs X3Rlc3QuaWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygy IHJvd3MpCisKKy0tIGV4Y2VwdD1wcmltYXJ5X2tleSx1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXks ZXhjbHVzaW9uIGhpZGVzIGV2ZXJ5CistLSB0YWJsZS1sZXZlbCBjb25zdHJhaW50LiAgSW5saW5l IENIRUNLIGluIHRoZSBDUkVBVEUgVEFCTEUgYm9keSBpcworLS0gc3VwcHJlc3NlZCB0b28uCitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAncHJpbWFyeV9rZXksdW5pcXVlLGNoZWNrLGZvcmVp Z25fa2V5LGV4Y2x1c2lvbicpOworICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg VEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyAoYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50ZWdl cik7CisoMSByb3cpCisKKy0tIGV4Y2VwdD1mb3JlaWduX2tleSBzdXBwcmVzc2VzIG9ubHkgRk9S RUlHTiBLRVkgY29uc3RyYWludHM7CistLSBQUklNQVJZIEtFWSwgVU5JUVVFLCBDSEVDSywgYW5k IG5hbWVkIE5PVCBOVUxMIHN0YXkuICBUaGlzIGlzIHRoZQorLS0gZmlyc3QgcGFzcyBvZiB0aGUg dHdvLXBhc3MgRkstY2xvbmUgd29ya2Zsb3c6IGVtaXQgdGFibGVzIHdpdGhvdXQKKy0tIGNyb3Nz LXRhYmxlIEZLcywgbG9hZCBkYXRhLCB0aGVuIHJlLXJ1biB3aXRoIG9ubHk9Zm9yZWlnbl9rZXkK Ky0tIHRvIGFkZCB0aGVtIG9uY2UgYWxsIHRhcmdldHMgZXhpc3QuCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ2ZvcmVpZ25fa2V5Jyk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg VEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyAoYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50ZWdl ciwgQ09OU1RSQUlOVCBjb25zX2FfY2hlY2sgQ0hFQ0sgKChhID4gMCkpKTsKKyBBTFRFUiBUQUJM RSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJBSU5UIGNvbnNfYl9rZXkgVU5JUVVFIChi KTsKKygyIHJvd3MpCisKKy0tIG9ubHk9Zm9yZWlnbl9rZXkgaXMgdGhlIHNlY29uZCBwYXNzIG9m IHRoZSB0d28tcGFzcyBGSy1jbG9uZQorLS0gd29ya2Zsb3c6IGVtaXQgb25seSB0aGUgQUxURVIg VEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIC4uLiBGT1JFSUdOCistLSBLRVkgcm93czsgdGhlIENS RUFURSBUQUJMRSBhbmQgZXZlcnkgbm9uLUZLIHN1Yi1vYmplY3QgYXJlCistLSBzdXBwcmVzc2Vk ICh0aGUgdGFibGUgYWxyZWFkeSBleGlzdHMgZnJvbSB0aGUgZmlyc3QgcGFzcykuCitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNl JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdmb3JlaWduX2tleScp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90 ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19jX2ZrZXkgRk9SRUlHTiBLRVkgKGMpIFJFRkVS RU5DRVMgcmVmZChpZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQ7CisoMSByb3cpCisK Ky0tIEEgdGFibGUgd2l0aCBubyBmb3JlaWduIGtleXMgcHJvZHVjZXMgbm8gcm93cyB1bmRlcgor LS0gb25seT1mb3JlaWduX2tleS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmVm ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdvbmx5JywgJ2ZvcmVpZ25fa2V5Jyk7CisgcGdfZ2V0X3RhYmxlX2RkbCAKKy0tLS0t LS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworLS0gb25seT10YWJsZSBlbWl0cyBvbmx5IHRoZSBi YXJlIENSRUFURSBUQUJMRSAod2l0aCBhbnkgaW5saW5lCistLSBjb2x1bW4tbGV2ZWwgTk9UIE5V TEwgYW5kIENIRUNLKSAtIG5vIGluZGV4ZXMsIG5vIFBSSU1BUlkgS0VZIEFMVEVSLAorLS0gbm8g b3RoZXIgc3ViLW9iamVjdHMuICBVc2VmdWwgZm9yIGNhcHR1cmluZyBhIHRhYmxlJ3Mgc2hhcGUg d2l0aG91dAorLS0gcHVsbGluZyBpbiBldmVyeXRoaW5nIGF0dGFjaGVkIHRvIGl0LgorU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAndGFibGUnKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhk IChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRleHQpOworKDEgcm93KQorCistLSBvbmx5PWNo ZWNrIG9uIGEgbm9uLXBhcnRpdGlvbiB0YWJsZS4gIFRoZSBjb25zdHJhaW50IGxvb3AgbXVzdCBl bWl0CistLSBjb2x1bW4tbGV2ZWwgYW5kIHRhYmxlLWxldmVsIENIRUNLIGNvbnN0cmFpbnRzIHZp YSBBTFRFUiBUQUJMRSBoZXJlLAorLS0gYmVjYXVzZSB0aGUgaW5saW5lIHBhdGggaW4gQ1JFQVRF IFRBQkxFIG5ldmVyIHJ1bnMgKEtJTkRfVEFCTEUgaXMKKy0tIG5vdCBpbiB0aGUgZmlsdGVyKS4K K0NSRUFURSBUQUJMRSBjaGtfb25seSAoCisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAgICBx dHkgaW50IENIRUNLIChxdHkgPiAwKSwKKyAgICBDT05TVFJBSU5UIGNoa19vbmx5X2lkX3BvcyBD SEVDSyAoaWQgPiAwKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY2hrX29u bHknOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnb25seScsICdjaGVjaycpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5jaGtfb25seSBBREQgQ09OU1RSQUlOVCBjaGtfb25seV9pZF9wb3MgQ0hFQ0sg KChpZCA+IDApKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jaGtfb25seSBBREQgQ09O U1RSQUlOVCBjaGtfb25seV9xdHlfY2hlY2sgQ0hFQ0sgKChxdHkgPiAwKSk7CisoMiByb3dzKQor CitEUk9QIFRBQkxFIGNoa19vbmx5OworLS0gb25seT1wYXJ0aXRpb24gb24gYSBwYXJ0aXRpb25l ZC10YWJsZSBwYXJlbnQ6IGVhY2ggY2hpbGQncyBmdWxsIERETAorLS0gaXMgZW1pdHRlZCAoQ1JF QVRFIFRBQkxFIC4uLiBQQVJUSVRJT04gT0YgLi4uKS4gIFRoZSAicGFydGl0aW9uIgorLS0ga2V5 d29yZCBpcyBhIGdhdGUgYXQgdGhlIHBhcmVudCBsZXZlbDsgaXQgaXMgc3RyaXBwZWQgZnJvbSB0 aGUKKy0tIHByb3BhZ2F0ZWQgZmlsdGVyIHNvIHRoZSBjaGlsZCBkb2VzIG5vdCBleGNsdWRlIGl0 cyBvd24KKy0tIENSRUFURSBUQUJMRS4KK0NSRUFURSBUQUJMRSBwX29ubHkgKGlkIGludCwgdmFs IHRleHQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBfb25seV9hIFBB UlRJVElPTiBPRiBwX29ubHkgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK0NSRUFURSBU QUJMRSBwX29ubHlfYiBQQVJUSVRJT04gT0YgcF9vbmx5IEZPUiBWQUxVRVMgRlJPTSAoMTAwKSBU TyAoMjAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncF9vbmx5Jzo6cmVnY2xh c3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29u bHknLCAncGFydGl0aW9uJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wX29ubHlfYSBQQVJUSVRJT04gT0Yg cGd0YmxfZGRsX3Rlc3QucF9vbmx5IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CisgQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBfb25seV9iIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxf dGVzdC5wX29ubHkgRk9SIFZBTFVFUyBGUk9NICgxMDApIFRPICgyMDApOworKDIgcm93cykKKwor RFJPUCBUQUJMRSBwX29ubHk7CistLSBvbmx5IGFuZCBleGNlcHQgYXJlIG11dHVhbGx5IGV4Y2x1 c2l2ZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAn b3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5Jywg J2ZvcmVpZ25fa2V5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0Jywg J2ZvcmVpZ25fa2V5Jyk7CitFUlJPUjogICJvbmx5IiBhbmQgImV4Y2VwdCIgb3B0aW9ucyBhcmUg bXV0dWFsbHkgZXhjbHVzaXZlCistLSBQdWIvc3ViIHNjaGVtYSBjbG9uZToga2VlcCB0aGUgdGFi bGUgYW5kIGl0cyBwcmltYXJ5IGtleSwgZHJvcCB0aGUKKy0tIHJlc3Qgb2YgdGhlIGNvbnN0cmFp bnRzIHNvIHRoZSBzdWJzY3JpYmVyIGNhbiByZXBsaWNhdGUgd2l0aG91dAorLS0gcHVsbGluZyBj cm9zcy10YWJsZSBkZXBlbmRlbmNpZXMgYWxvbmcuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnZXhjZXB0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAndW5pcXVlLGNoZWNrLGZvcmVpZ25fa2V5LGV4Y2x1c2lvbicpOworICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyAoYSBpbnRlZ2Vy LCBiIGludGVnZXIsIGMgaW50ZWdlcik7CisoMSByb3cpCisKKy0tIGV4Y2VwdD1ydWxlIGhpZGVz IHRoZSBDUkVBVEUgUlVMRS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncnQnOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnZXhjZXB0JywgJ3J1bGUnKTsKKyAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucnQgKGlkIGludGVnZXIpOworKDEgcm93 KQorCistLSBleGNlcHQ9c3RhdGlzdGljcyBoaWRlcyB0aGUgQ1JFQVRFIFNUQVRJU1RJQ1MuCitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNzLCAnb3duZXInLCAn ZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAnc3RhdGlz dGljcycpOworICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF90ZXN0LnN0eCAoYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50ZWdlcik7CisoMSByb3cpCisK Ky0tIGV4Y2VwdD1ybHMgaGlkZXMgdGhlIEVOQUJMRS9GT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkg dG9nZ2xlcy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmxzJzo6cmVnY2xhc3Ms ICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2Vw dCcsICdybHMnKTsKKyAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ybHMgKGlkIGludGVnZXIpOworKDEgcm93KQorCist LSBleGNlcHQ9cmVwbGljYV9pZGVudGl0eSBoaWRlcyB0aGUgUkVQTElDQSBJREVOVElUWSBjbGF1 c2UuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2Z1bGwnOjpyZWdjbGFzcywg J293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0 JywgJ3JlcGxpY2FfaWRlbnRpdHknKTsKKyAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9mdWxsIChhIGlu dGVnZXIpOworKDEgcm93KQorCistLSBQYXJ0aXRpb24gY2hpbGRyZW4gYXJlIGVtaXR0ZWQgYnkg ZGVmYXVsdDsgZXhjZXB0PXBhcnRpdGlvbgorLS0gc3VwcHJlc3NlcyB0aGVtIHNvIG9ubHkgdGhl IHBhcnRpdGlvbmVkLXRhYmxlIHBhcmVudCBjb21lcyBvdXQuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAncGFydGl0aW9uJyk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZSAo aWQgaW50ZWdlciwgayBpbnRlZ2VyKSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKKygxIHJvdykK KworLS0gVW5rbm93biBraW5kIG5hbWUgaXMgcmVqZWN0ZWQgYXQgb3B0aW9uLXBhcnNlIHRpbWUu CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25l cicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdu b19zdWNoX2tpbmQnKTsKK0VSUk9SOiAgdW5yZWNvZ25pemVkIGtpbmQgIm5vX3N1Y2hfa2luZCIg aW4gb3B0aW9uICJleGNlcHQiCistLSBXaGl0ZXNwYWNlIGFyb3VuZCBraW5kIG5hbWVzIGlzIGFs bG93ZWQ7IGNhc2UgaXMgZm9sZGVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdp ZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ2V4Y2VwdCcsICcgIElOREVYICAsICAgUlVMRSAgJyk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0 LmlkeGQgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7CisgQUxURVIgVEFCTEUgcGd0 YmxfZGRsX3Rlc3QuaWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX3BrZXkgUFJJTUFSWSBLRVkgKGlk KTsKKygyIHJvd3MpCisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ugc3RyaXBzIHRoZSBzY2hl bWEgZnJvbSB0aGUgdGFyZ2V0IHRhYmxlIGl0c2VsZgorLS0gYW5kIGZyb20gc2FtZS1zY2hlbWEg c2libGluZyByZWZlcmVuY2VzIChpbmhlcml0YW5jZS9wYXJ0aXRpb24KKy0tIHBhcmVudHMsIGlk ZW50aXR5IHNlcXVlbmNlcyBpbiB0aGUgc2FtZSBzY2hlbWEpLCB3aGlsZSBjcm9zcy1zY2hlbWEK Ky0tIHJlZmVyZW5jZXMgYXJlIGtlcHQgcXVhbGlmaWVkIGZvciBjb3JyZWN0bmVzcy4KKy0tCist LSBCYXJlIENSRUFURSBUQUJMRSBmb3IgYW4gb3JkaW5hcnkgdGFibGUuCitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2Un KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIGJhc2ljIChpZCBpbnRl Z2VyIE5PVCBOVUxMLCBuYW1lIHRleHQgQ09MTEFURSAiQyIgREVGQVVMVCAnYW5vbic6OnRleHQg Tk9UIE5VTEwpOworIEFMVEVSIFRBQkxFIGJhc2ljIEFERCBDT05TVFJBSU5UIGJhc2ljX3BrZXkg UFJJTUFSWSBLRVkgKGlkKTsKKygyIHJvd3MpCisKKy0tIElOSEVSSVRTIHBhcmVudCBpbiB0aGUg c2FtZSBzY2hlbWEgaXMgZW1pdHRlZCB1bnF1YWxpZmllZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnY2gnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworICAgICAg ICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgY2ggKGMg aW50ZWdlcikgSU5IRVJJVFMgKHBhcik7CisgQUxURVIgVEFCTEUgY2ggQUxURVIgQ09MVU1OIGEg U0VUIERFRkFVTFQgOTk5OworKDIgcm93cykKKworLS0gUGFydGl0aW9uIHBhcmVudCBpbiB0aGUg c2FtZSBzY2hlbWEgaXMgZW1pdHRlZCB1bnF1YWxpZmllZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlXzEnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxz ZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBQQVJUSVRJT04gT0YgcGFydGVk X3JhbmdlIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CisgQUxURVIgVEFCTEUgcGFydGVk X3JhbmdlXzEgQUxURVIgQ09MVU1OIGsgU0VUIERFRkFVTFQgNzsKKygyIHJvd3MpCisKKy0tIENy b3NzLXNjaGVtYSBGSyB0YXJnZXQga2VlcHMgcXVhbGlmaWNhdGlvbi4gIFRoZSAncmVmZCcgdGFi bGUgaXMgaW4KKy0tIHBndGJsX2RkbF90ZXN0OyBwbGFjZSBhbiBGSyB0YXJnZXQgaW4gYSBkaWZm ZXJlbnQgc2NoZW1hIGFuZCB2ZXJpZnkgaXQKKy0tIHN0YXlzIHF1YWxpZmllZCBldmVuIHdpdGgg c2NoZW1hX3F1YWxpZmllZD1mYWxzZS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX290aGVyOwor Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF9vdGhlci5wYXJlbnQgKGlkIGludCBQUklNQVJZIEtFWSk7 CitDUkVBVEUgVEFCTEUgeHNjaGVtYV9mayAoCisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAg ICBwaWQgaW50IFJFRkVSRU5DRVMgcGd0YmxfZGRsX290aGVyLnBhcmVudAorKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgneHNjaGVtYV9mayc6OnJlZ2NsYXNzLCAnb3duZXInLCAn ZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVk JywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgeHNjaGVtYV9mayAoaWQgaW50ZWdl ciBOT1QgTlVMTCwgcGlkIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHhzY2hlbWFfZmsgQUREIENP TlNUUkFJTlQgeHNjaGVtYV9ma19waWRfZmtleSBGT1JFSUdOIEtFWSAocGlkKSBSRUZFUkVOQ0VT IHBndGJsX2RkbF9vdGhlci5wYXJlbnQoaWQpOworIEFMVEVSIFRBQkxFIHhzY2hlbWFfZmsgQURE IENPTlNUUkFJTlQgeHNjaGVtYV9ma19wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMyByb3dzKQor CistLSBDcm9zcy1zY2hlbWEgRksgd2hvc2UgdGFyZ2V0IHNjaGVtYSBuYW1lIGVuZHMgd2l0aCB0 aGUgYmFzZSBzY2hlbWEgbmFtZQorLS0gKGUuZy4gInhwZ3RibF9kZGxfdGVzdCIgZW5kcyB3aXRo ICJwZ3RibF9kZGxfdGVzdCIpLiAgQSBwb3N0LWhvYyB0ZXh0CistLSBzdHJpcCB3b3VsZCBtYW5n bGUgInhwZ3RibF9kZGxfdGVzdC5yZWZ0YmwiIGludG8gInhyZWZ0YmwiOyBkZWNpZGluZworLS0g cXVhbGlmaWNhdGlvbiBhdCBnZW5lcmF0aW9uIHRpbWUgYXZvaWRzIHRoZSBwcm9ibGVtIGVudGly ZWx5LgorQ1JFQVRFIFNDSEVNQSB4cGd0YmxfZGRsX3Rlc3Q7CitDUkVBVEUgVEFCTEUgeHBndGJs X2RkbF90ZXN0LnJlZnRibCAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBzdWZm aXhfc2NoZW1hX2ZrICgKKyAgICBpZCAgaW50IFBSSU1BUlkgS0VZLAorICAgIHJlZiBpbnQgUkVG RVJFTkNFUyB4cGd0YmxfZGRsX3Rlc3QucmVmdGJsCispOworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdzdWZmaXhfc2NoZW1hX2ZrJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFs c2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBzdWZm aXhfc2NoZW1hX2ZrIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCByZWYgaW50ZWdlcik7CisgQUxURVIg VEFCTEUgc3VmZml4X3NjaGVtYV9mayBBREQgQ09OU1RSQUlOVCBzdWZmaXhfc2NoZW1hX2ZrX3Br ZXkgUFJJTUFSWSBLRVkgKGlkKTsKKyBBTFRFUiBUQUJMRSBzdWZmaXhfc2NoZW1hX2ZrIEFERCBD T05TVFJBSU5UIHN1ZmZpeF9zY2hlbWFfZmtfcmVmX2ZrZXkgRk9SRUlHTiBLRVkgKHJlZikgUkVG RVJFTkNFUyB4cGd0YmxfZGRsX3Rlc3QucmVmdGJsKGlkKTsKKygzIHJvd3MpCisKK0RST1AgVEFC TEUgc3VmZml4X3NjaGVtYV9mazsKK0RST1AgU0NIRU1BIHhwZ3RibF9kZGxfdGVzdCBDQVNDQURF OworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB4cGd0YmxfZGRsX3Rlc3QucmVmdGJs CistLSBJZGVudGl0eSBjb2x1bW4gd2l0aCBhIGN1c3RvbSBzZXF1ZW5jZSBuYW1lIGluIHRoZSBz YW1lIHNjaGVtYSBpcworLS0gZW1pdHRlZCB1bnF1YWxpZmllZC4KK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnaWRfY3VzdG9tJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2Un KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgaWRfY3VzdG9tICh2IGludGVnZXIgR0VO RVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSAoU1RBUlQgV0lUSCAxMDAgSU5DUkVNRU5UIEJZIDUg TUlOVkFMVUUgNTAgTUFYVkFMVUUgMTAwMCBDQUNIRSAxMCBDWUNMRSkgTk9UIE5VTEwpOworKDEg cm93KQorCistLSBSb3VuZC10cmlwOiB3aXRoIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UsIGFmdGVy IFNFVCBzZWFyY2hfcGF0aCB0aGUKKy0tIERETCBjYW4gYmUgcmVwbGF5ZWQgaW50byBhIGRpZmZl cmVudCB0YXJnZXQgc2NoZW1hLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfcmVwbGF5OworRE8g JCQKK0RFQ0xBUkUKKyAgICBzdG10IHRleHQ7CitCRUdJTgorICAgIFNFVCBMT0NBTCBzZWFyY2hf cGF0aCA9IHBndGJsX2RkbF9yZXBsYXk7CisgICAgRk9SIHN0bXQgSU4KKyAgICAgICAgU0VMRUNU IGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfdGVzdC5iYXNpYyc6OnJlZ2Ns YXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywg J2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hl bWFfcXVhbGlmaWVkJywgJ2ZhbHNlJykgQVMgbGluZQorICAgIExPT1AKKyAgICAgICAgRVhFQ1VU RSBzdG10OworICAgIEVORCBMT09QOworRU5EICQkOworU0VMRUNUIHJlbG5hbWVzcGFjZTo6cmVn bmFtZXNwYWNlOjp0ZXh0LCByZWxuYW1lCitGUk9NIHBnX2NsYXNzIFdIRVJFIG9pZCA9ICdwZ3Ri bF9kZGxfcmVwbGF5LmJhc2ljJzo6cmVnY2xhc3M7CisgICByZWxuYW1lc3BhY2UgICB8IHJlbG5h bWUgCistLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tCisgcGd0YmxfZGRsX3JlcGxheSB8IGJh c2ljCisoMSByb3cpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9yZXBsYXkgQ0FTQ0FERTsKK05P VElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3JlcGxheS5iYXNpYworRFJP UCBUQUJMRSB4c2NoZW1hX2ZrOworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX290aGVyIENBU0NBREU7 CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBndGJsX2RkbF9vdGhlci5wYXJlbnQK Ky0tIExvY2FsbHktZGVjbGFyZWQgQ0hFQ0sgb24gYSBwYXJ0aXRpb24gY2hpbGQgaGFzIG5vIGlu bGluZSBjb2x1bW4KKy0tIGxpc3QgdG8gbGl2ZSBpbiAoUEFSVElUSU9OIE9GIGZvcm0pLCBzbyBp dCBtdXN0IGNvbWUgb3V0IGFzIGEKKy0tIHNlcGFyYXRlIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09O U1RSQUlOVCBzdGF0ZW1lbnQuCitDUkVBVEUgVEFCTEUgcGFydGVkX2NoayAoaWQgaW50LCB2YWwg aW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfY2hrX2No aWxkIFBBUlRJVElPTiBPRiBwYXJ0ZWRfY2hrCisgICAgKENPTlNUUkFJTlQgY2hrX2lubGluZSBD SEVDSyAodmFsID4gMCkpCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2Noa19jaGlsZCc6OnJlZ2NsYXNzLCAn b3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFy dGVkX2Noa19jaGlsZCBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2NoayBGT1Ig VkFMVUVTIEZST00gKDApIFRPICgxMDApOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBh cnRlZF9jaGtfY2hpbGQgQUREIENPTlNUUkFJTlQgY2hrX2lubGluZSBDSEVDSyAoKHZhbCA+IDAp KTsKKygyIHJvd3MpCisKK0RST1AgVEFCTEUgcGFydGVkX2NoazsKKy0tIEluaGVyaXRhbmNlIGNo aWxkcmVuIG9mIGEgcGFyZW50IHdpdGggYSBnZW5lcmF0ZWQgY29sdW1uIHNob3VsZCBub3QKKy0t IGVtaXQgYW4gQUxURVIgQ09MVU1OIC4uLiBTRVQgREVGQVVMVCBmb3IgdGhlIGluaGVyaXRlZCBn ZW5lcmF0ZWQKKy0tIGNvbHVtbjogdGhlIEdFTkVSQVRFRCBleHByZXNzaW9uIGNhcnJpZXMgZG93 biB0aHJvdWdoIGluaGVyaXRhbmNlLAorLS0gYW5kIFNFVCBERUZBVUxUIHdvdWxkIGZhaWwgYXQg cmVwbGF5IGFnYWluc3QgYSBnZW5lcmF0ZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIHBhcl9nZW4g KAorICAgIGlkIGludCwKKyAgICBnICBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoaWQgKiAyKSBT VE9SRUQKKyk7CitDUkVBVEUgVEFCTEUgY2hfZ2VuICgpIElOSEVSSVRTIChwYXJfZ2VuKTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY2hfZ2VuJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF90ZXN0LmNoX2dlbiAoKSBJTkhFUklUUyAocGd0YmxfZGRsX3Rlc3Qu cGFyX2dlbik7CisoMSByb3cpCisKK0RST1AgVEFCTEUgcGFyX2dlbiBDQVNDQURFOworTk9USUNF OiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBjaF9nZW4KKy0tIEEgdXNlci1uYW1lZCBOT1QgTlVM TCBvbiBhIGxvY2FsIGNvbHVtbiBpcyBlbWl0dGVkIGlubGluZSBhcworLS0gIkNPTlNUUkFJTlQg bmFtZSBOT1QgTlVMTCIgc28gdGhlIG9yaWdpbmFsIG5hbWUgaXMgcHJlc2VydmVkLiAgQW4KKy0t IGF1dG8tbmFtZWQgTk9UIE5VTEwgb24gYSBsb2NhbCBjb2x1bW4gaXMgZW1pdHRlZCBhcyBhIHBs YWluIGlubGluZQorLS0gIk5PVCBOVUxMIiAtIFBHIHJlLWNyZWF0ZXMgdGhlIGF1dG8tbmFtZWQg Y29uc3RyYWludCB3aGVuIENSRUFURQorLS0gVEFCTEUgcnVucywgc28gdGhlIGNvbnN0cmFpbnQg bG9vcCBza2lwcyBib3RoIGZvcm1zIHRvIGF2b2lkIHRoZQorLS0gcmVkdW5kYW50IChhbmQgb24g dGFibGUtcmVuYW1lIG9yIHNlcXVlbmNlLWNvbGxpc2lvbiwgYnJva2VuKQorLS0gQUxURVIgVEFC TEUgLi4uIEFERCBDT05TVFJBSU5UIC4uLiBOT1QgTlVMTCBzdGF0ZW1lbnQuCitDUkVBVEUgVEFC TEUgbm5fbmFtZWQgKAorICAgIGEgaW50IENPTlNUUkFJTlQgbXlfbm4gTk9UIE5VTEwsCisgICAg YiBpbnQgTk9UIE5VTEwKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX25h bWVkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ubl9uYW1lZCAoYSBpbnRlZ2VyIENP TlNUUkFJTlQgbXlfbm4gTk9UIE5VTEwsIGIgaW50ZWdlciBOT1QgTlVMTCk7CisoMSByb3cpCisK K0RST1AgVEFCTEUgbm5fbmFtZWQ7CistLSBSZW5hbWluZyB0aGUgdGFibGUgYWZ0ZXIgYW4gSURF TlRJVFkgTk9UIE5VTEwgY29sdW1uIHdhcyBkZWNsYXJlZAorLS0gbGVhdmVzIHRoZSBhdXRvLW5h bWVkIGNvbnN0cmFpbnQgZnJvemVuIGF0IHRoZSBvcmlnaW5hbCBuYW1lLCB3aGljaAorLS0gbm8g bG9uZ2VyIG1hdGNoZXMgdGhlIHBvc3QtcmVuYW1lICI8dGFibGU+Xzxjb2w+X25vdF9udWxsIiBw YXR0ZXJuLgorLS0gVGhlIGVtaXR0ZWQgRERMIG11c3Qgc3RpbGwgcm91bmQtdHJpcDogdGhlIGNv bnN0cmFpbnQgbG9vcCBtdXN0IG5vdAorLS0gQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5U IGEgc2Vjb25kIE5PVCBOVUxMLCBzaW5jZSBDUkVBVEUgVEFCTEUKKy0tIHdpdGggdGhlIGlubGlu ZSBJREVOVElUWSBhbHJlYWR5IGNyZWF0ZXMgYW4gYXV0by1OT1QtTlVMTCB1bmRlciB0aGUKKy0t IG5ldyB0YWJsZSBuYW1lIGFuZCBQRyBvbmx5IHBlcm1pdHMgb25lIE5PVCBOVUxMIHBlciBjb2x1 bW4uCitDUkVBVEUgVEFCTEUgbm5fcmVuYW1lZCAoCisgICAgYSBpbnQgR0VORVJBVEVEIEFMV0FZ UyBBUyBJREVOVElUWSBOT1QgTlVMTAorKTsKK0FMVEVSIFRBQkxFIG5uX3JlbmFtZWQgUkVOQU1F IFRPIG5uX3JlbmFtZWQyOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9yZW5h bWVkMic6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJM RSBwZ3RibF9kZGxfdGVzdC5ubl9yZW5hbWVkMiAoYSBpbnRlZ2VyIEdFTkVSQVRFRCBBTFdBWVMg QVMgSURFTlRJVFkgKFNFUVVFTkNFIE5BTUUgcGd0YmxfZGRsX3Rlc3Qubm5fcmVuYW1lZF9hX3Nl cSkgQ09OU1RSQUlOVCBubl9yZW5hbWVkX2Ffbm90X251bGwgTk9UIE5VTEwpOworKDEgcm93KQor CitEUk9QIFRBQkxFIG5uX3JlbmFtZWQyOworLS0gTG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBv biBhbiBpbmhlcml0ZWQgY29sdW1uLiAgVGhlIGNvbHVtbiBpdHNlbGYKKy0tIGlzIG9taXR0ZWQg ZnJvbSB0aGUgY2hpbGQncyBjb2x1bW4gbGlzdCAoYXR0aXNsb2NhbD1mYWxzZSksIHNvIHRoZQor LS0gdXNlci1uYW1lZCBOT1QgTlVMTCBtdXN0IGNvbWUgb3V0IHZpYSB0aGUgcG9zdC1DUkVBVEUg Y29uc3RyYWludAorLS0gbG9vcCByYXRoZXIgdGhhbiBpbmxpbmUuCitDUkVBVEUgVEFCTEUgbm5f cGFyIChhIGludCk7CitDUkVBVEUgVEFCTEUgbm5fY2ggKGIgaW50KSBJTkhFUklUUyAobm5fcGFy KTsKK0FMVEVSIFRBQkxFIG5uX2NoIEFERCBDT05TVFJBSU5UIG15X25uIE5PVCBOVUxMIGE7CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX2NoJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qubm5fY2ggKGIgaW50ZWdlcikgSU5I RVJJVFMgKHBndGJsX2RkbF90ZXN0Lm5uX3Bhcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rl c3Qubm5fY2ggQUREIENPTlNUUkFJTlQgbXlfbm4gTk9UIE5VTEwgYTsKKygyIHJvd3MpCisKK0RS T1AgVEFCTEUgbm5fcGFyIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IG5uX2NoCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIG11c3QgZHJvcCB0aGUgc2NoZW1hIHBy ZWZpeCBmcm9tIERFRkFVTFQKKy0tIGV4cHJlc3Npb25zIGFuZCBpbmxpbmUgQ0hFQ0sgYm9kaWVz IHRoYXQgcmVmZXJlbmNlIHNhbWUtc2NoZW1hCistLSBvYmplY3RzIChzZXF1ZW5jZSB2aWEgbmV4 dHZhbCwgZnVuY3Rpb24gdmlhIGRpcmVjdCBjYWxsKS4gIFRoaXMKKy0tIHJlbGllcyBvbiB0aGUg ZGVwYXJzZXIgcmVzcGVjdGluZyB0aGUgbmFycm93ZWQgc2VhcmNoX3BhdGggcmF0aGVyCistLSB0 aGFuIG9uIHN1YnN0cmluZyBzdHJpcHBpbmcuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF94cmVm OworQ1JFQVRFIFNFUVVFTkNFIHBndGJsX2RkbF94cmVmLm15c2VxOworQ1JFQVRFIEZVTkNUSU9O IHBndGJsX2RkbF94cmVmLmYoaW50KSBSRVRVUk5TIGludCBMQU5HVUFHRSBzcWwgSU1NVVRBQkxF CisgICAgQVMgJ1NFTEVDVCAkMSc7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3hyZWYudCAoCisg ICAgaWQgIGludCBERUZBVUxUIG5leHR2YWwoJ3BndGJsX2RkbF94cmVmLm15c2VxJyksCisgICAg dmFsIGludCwKKyAgICBDT05TVFJBSU5UIGNoayBDSEVDSyAocGd0YmxfZGRsX3hyZWYuZih2YWwp ID4gMCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF94cmVm LnQnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXInLCAn ZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVk JywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHQgKGlkIGludGVnZXIgREVGQVVMVCBu ZXh0dmFsKCdteXNlcSc6OnJlZ2NsYXNzKSwgdmFsIGludGVnZXIsIENPTlNUUkFJTlQgY2hrIENI RUNLICgoZih2YWwpID4gMCkpKTsKKygxIHJvdykKKworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3hy ZWYgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gMyBvdGhlciBvYmplY3RzCitE RVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIHNlcXVlbmNlIHBndGJsX2RkbF94cmVmLm15c2VxCitk cm9wIGNhc2NhZGVzIHRvIGZ1bmN0aW9uIHBndGJsX2RkbF94cmVmLmYoaW50ZWdlcikKK2Ryb3Ag Y2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3hyZWYudAorLS0gc2NoZW1hX3F1YWxpZmllZD1m YWxzZSBtdXN0IE5PVCBjb3JydXB0IHN0cmluZyBsaXRlcmFscyB3aG9zZQorLS0gY29udGVudHMg aGFwcGVuIHRvIGNvbnRhaW4gdGhlIHNjaGVtYSBuYW1lIGZvbGxvd2VkIGJ5IGEgZG90LiAgVGhl CistLSBpbi1zdHJpbmcgc3RhdGUgb2YgdGhlIHByZWZpeCBzdHJpcHBlciBwcmVzZXJ2ZXMgdGhl bSB2ZXJiYXRpbS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3N0cjsKK0NSRUFURSBUQUJMRSBw Z3RibF9kZGxfc3RyLnAgKGlkIGludCwgbm90ZSB0ZXh0KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlk KTsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfc3RyLnBjIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxf c3RyLnAKKyAgICAoQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKG5vdGUgPD4gJ3BndGJsX2RkbF9zdHIu c2VjcmV0JykpCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3N0ci5wYyc6OnJlZ2NsYXNzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBwYyBQQVJUSVRJT04gT0YgcCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworIEFM VEVSIFRBQkxFIHBjIEFERCBDT05TVFJBSU5UIGNoayBDSEVDSyAoKG5vdGUgPD4gJ3BndGJsX2Rk bF9zdHIuc2VjcmV0Jzo6dGV4dCkpOworKDIgcm93cykKKworRFJPUCBTQ0hFTUEgcGd0YmxfZGRs X3N0ciBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwZ3RibF9kZGxf c3RyLnAKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UgbXVzdCBOT1QgY29ycnVwdCBkb3VibGUt cXVvdGVkIGlkZW50aWZpZXJzCistLSB3aG9zZSBjb250ZW50cyBoYXBwZW4gdG8gY29udGFpbiB0 aGUgc2NoZW1hIG5hbWUgZm9sbG93ZWQgYnkgYSBkb3QKKy0tIChmb3IgZXhhbXBsZSBhIGNvbHVt biBsaXRlcmFsbHkgbmFtZWQgIjxzY2hlbWE+LndlaXJkIiBpbnNpZGUgdGhhdAorLS0gc2NoZW1h KS4gIFRoZSBpbi1pZGVudCBzdGF0ZSBvZiB0aGUgcHJlZml4IHN0cmlwcGVyIHByZXNlcnZlcyB0 aGVtCistLSB2ZXJiYXRpbS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3FpZDsKK0NSRUFURSBU QUJMRSBwZ3RibF9kZGxfcWlkLnAgKGlkIGludCwgInBndGJsX2RkbF9xaWQud2VpcmQiIGludCkK KyAgICBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfcWlk LnBjIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfcWlkLnAKKyAgICAoQ09OU1RSQUlOVCBjaGsgQ0hF Q0sgKCJwZ3RibF9kZGxfcWlkLndlaXJkIiA+IDApKQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkg VE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF9xaWQu cGMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXInLCAn ZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVk JywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBwYyBQQVJUSVRJT04gT0YgcCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworIEFM VEVSIFRBQkxFIHBjIEFERCBDT05TVFJBSU5UIGNoayBDSEVDSyAoKCJwZ3RibF9kZGxfcWlkLndl aXJkIiA+IDApKTsKKygyIHJvd3MpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9xaWQgQ0FTQ0FE RTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3FpZC5wCistLSBz Y2hlbWFfcXVhbGlmaWVkPWZhbHNlIHdoZW4gdGhlIGJhc2Ugc2NoZW1hIG5hbWUgaXRzZWxmIHJl cXVpcmVzCistLSBxdW90aW5nIChpdHMgcHJlZml4IHN0YXJ0cyB3aXRoICIpLiAgQm90aCBmb3Jt cyBvZiB0aGUgcHJlZml4IC0KKy0tIGJhcmUtbG93ZXJjYXNlIGFuZCBxdW90ZWQgLSBtdXN0IGJl IHN0cmlwcGVkIGZyb20gb3V0ZXIKKy0tIEFMVEVSIFRBQkxFIC8gT04gLyBDUkVBVEUgSU5ERVgg cHJlZml4ZXMsIHdoaWxlIGlubmVyIHF1b3RlZAorLS0gaWRlbnRpZmllcnMgdGhhdCBoYXBwZW4g dG8gYmVnaW4gdGhlIHNhbWUgd2F5IG11c3QgYmUgcHJlc2VydmVkLgorQ1JFQVRFIFNDSEVNQSAi UGdUYmwtRGRsLVEiOworQ1JFQVRFIFRBQkxFICJQZ1RibC1EZGwtUSIuIlQiIChpZCBpbnQsIHZh bCBpbnQsCisgICAgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKHZhbCA+IDApKTsKK0NSRUFURSBJTkRF WCAiVF92YWxfaWR4IiBPTiAiUGdUYmwtRGRsLVEiLiJUIiAodmFsKTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnIlBnVGJsLURkbC1RIi4iVCInOjpyZWdjbGFzcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFICJUIiAo aWQgaW50ZWdlciwgdmFsIGludGVnZXIsIENPTlNUUkFJTlQgY2hrIENIRUNLICgodmFsID4gMCkp KTsKKyBDUkVBVEUgSU5ERVggIlRfdmFsX2lkeCIgT04gIlQiIFVTSU5HIGJ0cmVlICh2YWwpOwor KDIgcm93cykKKworRFJPUCBTQ0hFTUEgIlBnVGJsLURkbC1RIiBDQVNDQURFOworTk9USUNFOiAg ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSAiUGdUYmwtRGRsLVEiLiJUIgorLS0gRXJyb3I6IG5vdCBh biBvcmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0YWJsZS4KK0NSRUFURSBWSUVXIHYgQVMgU0VMRUNU IDEgQVMgeDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndic6OnJlZ2NsYXNzKTsK K0VSUk9SOiAgInYiIGlzIG5vdCBhbiBvcmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0YWJsZQorQ1JF QVRFIFNFUVVFTkNFIHM7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3MnOjpyZWdj bGFzcyk7CitFUlJPUjogICJzIiBpcyBub3QgYW4gb3JkaW5hcnkgb3IgcGFydGl0aW9uZWQgdGFi bGUKKy0tIE5VTEwgYXJndW1lbnQgcmV0dXJucyBubyByb3dzLgorU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKE5VTEwpOworIHBnX2dldF90YWJsZV9kZGwgCistLS0tLS0tLS0tLS0tLS0t LS0KKygwIHJvd3MpCisKKy0tIFVucmVjb2duaXplZCBvcHRpb24uCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdib2d1cycsICd0cnVlJyk7CitFUlJP UjogIHVucmVjb2duaXplZCBvcHRpb246ICJib2d1cyIKKy0tIE9kZCBudW1iZXIgb2YgdmFyaWFk aWMgYXJncy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFz cywgJ3ByZXR0eScpOworRVJST1I6ICB2YXJpYWRpYyBhcmd1bWVudHMgbXVzdCBiZSBuYW1lL3Zh bHVlIHBhaXJzCitISU5UOiAgUHJvdmlkZSBhbiBldmVuIG51bWJlciBvZiB2YXJpYWRpYyBhcmd1 bWVudHMgdGhhdCBjYW4gYmUgZGl2aWRlZCBpbnRvIHBhaXJzLgorLS0gUkVQTElDQSBJREVOVElU WSBVU0lORyBJTkRFWCB2YWxpZGF0aW9uOiBpZiB0aGUgcmVmZXJlbmNlZCBpbmRleAorLS0gd291 bGQgbm90IGJlIGVtaXR0ZWQgKGJlY2F1c2UgaXRzIHNvdXJjZSBraW5kIGlzIHN1cHByZXNzZWQp IGJ1dAorLS0gcmVwbGljYV9pZGVudGl0eSBpdHNlbGYgd291bGQgYmUsIHRoZSBmdW5jdGlvbiBy YWlzZXMgYW4gZXJyb3Igc28KKy0tIHRoZSBlbWl0dGVkIERETCBuZXZlciBkYW5nbGVzLiAgRXhl cmNpc2UgYWxsIHRocmVlIGNvbnN0cmFpbnQtYmFja2VkCistLSBmb3JtcyAoUEssIFVOSVFVRSwg RVhDTFVTSU9OKSBhbmQgYSBiYXJlIENSRUFURSBVTklRVUUgSU5ERVgsIGluCistLSBib3RoIHRo ZSBleGNlcHQtbGlzdCBhbmQgb25seS1saXN0IHNoYXBlcy4KKy0tCistLSBQSy1iYWNrZWQ6IGV4 Y2VwdD1wcmltYXJ5X2tleSB3aXRob3V0IGV4Y2VwdD1yZXBsaWNhX2lkZW50aXR5LgorQ1JFQVRF IFRBQkxFIHJpX3BrX2V4Y2wgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0FMVEVSIFRBQkxFIHJpX3Br X2V4Y2wgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9wa19leGNsX3BrZXk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3BrX2V4Y2wnOjpyZWdjbGFzcywgJ293bmVy JywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ3By aW1hcnlfa2V5Jyk7CitFUlJPUjogIFJFUExJQ0EgSURFTlRJVFkgZm9yIHRhYmxlICJyaV9wa19l eGNsIiByZXF1aXJlcyBraW5kICJwcmltYXJ5X2tleSIgdG8gYmUgZW1pdHRlZAorREVUQUlMOiAg VGhlIHRhYmxlJ3MgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByZWZlcmVuY2VzIGFuIGlu ZGV4IHByb2R1Y2VkIGJ5IHRoZSAicHJpbWFyeV9rZXkiIGtpbmQsIHdoaWNoIGlzIG5vdCBpbiB0 aGUgYWN0aXZlIGZpbHRlci4KK0hJTlQ6ICBFaXRoZXIgYWRkICJwcmltYXJ5X2tleSIgdG8gdGhl IGZpbHRlciBvciByZW1vdmUgInJlcGxpY2FfaWRlbnRpdHkiIGZyb20gaXQuCistLSBTYW1lIGNh bGwgYnV0IGFsc28gZXhjbHVkaW5nIHJlcGxpY2FfaWRlbnRpdHkgc3VjY2VlZHMuCitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3BrX2V4Y2wnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ3ByaW1h cnlfa2V5LHJlcGxpY2FfaWRlbnRpdHknKTsKKyAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0 X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBw Z3RibF9kZGxfdGVzdC5yaV9wa19leGNsIChhIGludGVnZXIgTk9UIE5VTEwpOworKDEgcm93KQor CitEUk9QIFRBQkxFIHJpX3BrX2V4Y2w7CistLSBVTklRVUUtY29uc3RyYWludC1iYWNrZWQgcmVw bGljYSBpZGVudGl0eSBpbmRleC4KK0NSRUFURSBUQUJMRSByaV91bmlxX2V4Y2wgKGEgaW50IE5P VCBOVUxMIFVOSVFVRSwgYiBpbnQpOworQUxURVIgVEFCTEUgcmlfdW5pcV9leGNsIFJFUExJQ0Eg SURFTlRJVFkgVVNJTkcgSU5ERVggcmlfdW5pcV9leGNsX2Ffa2V5OworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdyaV91bmlxX2V4Y2wnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNl JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ3VuaXF1ZScpOwor RVJST1I6ICBSRVBMSUNBIElERU5USVRZIGZvciB0YWJsZSAicmlfdW5pcV9leGNsIiByZXF1aXJl cyBraW5kICJ1bmlxdWUiIHRvIGJlIGVtaXR0ZWQKK0RFVEFJTDogIFRoZSB0YWJsZSdzIFJFUExJ Q0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCBwcm9kdWNlZCBieSB0 aGUgInVuaXF1ZSIga2luZCwgd2hpY2ggaXMgbm90IGluIHRoZSBhY3RpdmUgZmlsdGVyLgorSElO VDogIEVpdGhlciBhZGQgInVuaXF1ZSIgdG8gdGhlIGZpbHRlciBvciByZW1vdmUgInJlcGxpY2Ff aWRlbnRpdHkiIGZyb20gaXQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3Vu aXFfZXhjbCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdleGNlcHQnLCAndW5pcXVlLHJlcGxpY2FfaWRlbnRpdHknKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF90ZXN0LnJpX3VuaXFfZXhjbCAoYSBpbnRlZ2VyIE5PVCBOVUxMLCBiIGludGVnZXIpOworKDEg cm93KQorCitEUk9QIFRBQkxFIHJpX3VuaXFfZXhjbDsKKy0tIEJhcmUgQ1JFQVRFIFVOSVFVRSBJ TkRFWCAobm8gYmFja2luZyBjb25zdHJhaW50KSB1c2VkIGFzIFJFUExJQ0EKKy0tIElERU5USVRZ OiB0aGUgaW5kZXggaXMgZW1pdHRlZCBieSB0aGUgImluZGV4IiBraW5kLCBzbyBleGNsdWRpbmcK Ky0tICJpbmRleCIgd2l0aG91dCBhbHNvIGV4Y2x1ZGluZyAicmVwbGljYV9pZGVudGl0eSIgbXVz dCBlcnJvci4KK0NSRUFURSBUQUJMRSByaV9pZHhfZXhjbCAoYSBpbnQgTk9UIE5VTEwsIGIgaW50 KTsKK0NSRUFURSBVTklRVUUgSU5ERVggcmlfaWR4X2V4Y2xfYV91bmlxIE9OIHJpX2lkeF9leGNs IChhKTsKK0FMVEVSIFRBQkxFIHJpX2lkeF9leGNsIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5E RVggcmlfaWR4X2V4Y2xfYV91bmlxOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdy aV9pZHhfZXhjbCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdleGNlcHQnLCAnaW5kZXgnKTsKK0VSUk9SOiAgUkVQTElDQSBJREVO VElUWSBmb3IgdGFibGUgInJpX2lkeF9leGNsIiByZXF1aXJlcyBraW5kICJpbmRleCIgdG8gYmUg ZW1pdHRlZAorREVUQUlMOiAgVGhlIHRhYmxlJ3MgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRF WCByZWZlcmVuY2VzIGFuIGluZGV4IHByb2R1Y2VkIGJ5IHRoZSAiaW5kZXgiIGtpbmQsIHdoaWNo IGlzIG5vdCBpbiB0aGUgYWN0aXZlIGZpbHRlci4KK0hJTlQ6ICBFaXRoZXIgYWRkICJpbmRleCIg dG8gdGhlIGZpbHRlciBvciByZW1vdmUgInJlcGxpY2FfaWRlbnRpdHkiIGZyb20gaXQuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2lkeF9leGNsJzo6cmVnY2xhc3MsICdvd25l cicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdp bmRleCxyZXBsaWNhX2lkZW50aXR5Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfaWR4X2V4Y2wgKGEgaW50ZWdl ciBOT1QgTlVMTCwgYiBpbnRlZ2VyKTsKKygxIHJvdykKKworRFJPUCBUQUJMRSByaV9pZHhfZXhj bDsKKy0tIEluY2x1ZGUtc2lkZSBhbmFsb2c6IG9ubHk9cmVwbGljYV9pZGVudGl0eSBtdXN0IGlu Y2x1ZGUgdGhlIGtpbmQKKy0tIHRoYXQgZW1pdHMgdGhlIGluZGV4LCBvciB0aGUgZnVuY3Rpb24g ZXJyb3JzLgorQ1JFQVRFIFRBQkxFIHJpX29ubHkgKGEgaW50IE5PVCBOVUxMIFVOSVFVRSwgYiBp bnQpOworQUxURVIgVEFCTEUgcmlfb25seSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJp X29ubHlfYV9rZXk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX29ubHknOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnb25seScsICdyZXBsaWNhX2lkZW50aXR5Jyk7CitFUlJPUjogIFJFUExJQ0EgSURFTlRJVFkg Zm9yIHRhYmxlICJyaV9vbmx5IiByZXF1aXJlcyBraW5kICJ1bmlxdWUiIHRvIGJlIGVtaXR0ZWQK K0RFVEFJTDogIFRoZSB0YWJsZSdzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmVmZXJl bmNlcyBhbiBpbmRleCBwcm9kdWNlZCBieSB0aGUgInVuaXF1ZSIga2luZCwgd2hpY2ggaXMgbm90 IGluIHRoZSBhY3RpdmUgZmlsdGVyLgorSElOVDogIEVpdGhlciBhZGQgInVuaXF1ZSIgdG8gdGhl IGZpbHRlciBvciByZW1vdmUgInJlcGxpY2FfaWRlbnRpdHkiIGZyb20gaXQuCistLSBJbmNsdWRp bmcgYm90aCBraW5kcyBzdWNjZWVkcy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cmlfb25seSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdvbmx5JywgJ3VuaXF1ZSxyZXBsaWNhX2lkZW50aXR5Jyk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBUQUJMRSBw Z3RibF9kZGxfdGVzdC5yaV9vbmx5IEFERCBDT05TVFJBSU5UIHJpX29ubHlfYV9rZXkgVU5JUVVF IChhKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9vbmx5IFJFUExJQ0EgSURFTlRJ VFkgVVNJTkcgSU5ERVggcmlfb25seV9hX2tleTsKKygyIHJvd3MpCisKK0RST1AgVEFCTEUgcmlf b25seTsKKy0tIFBlci1raW5kIG9ubHkgLyBleGNlcHQgY292ZXJhZ2UuICBGb3IgZWFjaCBraW5k IGluIHRoZSB2b2NhYnVsYXJ5LAorLS0gdmVyaWZ5IHRoYXQgb25seT1LIGVtaXRzIGp1c3QgdGhh dCBraW5kJ3Mgb3V0cHV0IGFuZCB0aGF0IGV4Y2VwdD1LCistLSBvbWl0cyBqdXN0IHRoYXQga2lu ZCdzIG91dHB1dC4gIEtpbmRzIHdpdGggbm8gZml4dHVyZSBhYm92ZSAodHJpZ2dlciwKKy0tIHBv bGljeSkgYXJlIHN0aWxsIHJlY29nbml6ZWQgYnV0IGN1cnJlbnRseSBlbWl0IG5vdGhpbmc7IG9u bHk9SworLS0gcmV0dXJucyB6ZXJvIHJvd3MgZm9yIHRoZW0uICBGaXh0dXJlcyB1c2VkOgorLS0g ICBpZHhkOiBQSyArIHR3byBzZWNvbmRhcnkgQ1JFQVRFIElOREVYCistLSAgIGNvbnM6IFBLICsg VU5JUVVFICsgQ0hFQ0sgKyBGSyAoY29uc3RyYWludC1iYWNrZWQpCistLSAgIHJ0OiAgIENSRUFU RSBSVUxFCistLSAgIHN0eDogIENSRUFURSBTVEFUSVNUSUNTCistLSAgIHJsczogIEVOQUJMRS9G T1JDRSBST1cgTEVWRUwgU0VDVVJJVFkKKy0tICAgcmlfZnVsbDogUkVQTElDQSBJREVOVElUWSBG VUxMIChubyBzb3VyY2Uta2luZCBkZXBlbmRlbmN5KQorQ1JFQVRFIFRBQkxFIGV4Y2xfZml4IChy bmcgaW50NHJhbmdlLAorICAgIEVYQ0xVREUgVVNJTkcgZ2lzdCAocm5nIFdJVEggJiYpKTsKKy0t IG9ubHk9SzogZW1pdCBvbmx5IGtpbmQgSydzIHN0YXRlbWVudHMuCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdpbmRleCcpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBJTkRFWCBpZHhkX2xvd2VyIE9OIGlkeGQgVVNJTkcg YnRyZWUgKGxvd2VyKG5hbWUpKTsKKyBDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9OIGlkeGQg VVNJTkcgYnRyZWUgKGlkKSBXSEVSRSAoaWQgPiAxMDApOworKDIgcm93cykKKworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAncHJpbWFyeV9rZXknKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBUQUJMRSBw Z3RibF9kZGxfdGVzdC5pZHhkIEFERCBDT05TVFJBSU5UIGlkeGRfcGtleSBQUklNQVJZIEtFWSAo aWQpOworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnb25seScsICd1bmlxdWUnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90 YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFM VEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19iX2tleSBV TklRVUUgKGIpOworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2V4 Y2xfZml4Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ29ubHknLCAnZXhjbHVzaW9uJyk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5leGNsX2ZpeCBB REQgQ09OU1RSQUlOVCBleGNsX2ZpeF9ybmdfZXhjbCBFWENMVURFIFVTSU5HIGdpc3QgKHJuZyBX SVRIICYmKTsKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdydCc6 OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdvbmx5JywgJ3J1bGUnKTsKKyAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgUlVMRSBydF9sb2dfaW5zZXJ0IEFTICAgICAgICAgICAgICAgICAg ICsKKyAgICAgT04gSU5TRVJUIFRPIHJ0IERPICBJTlNFUlQgSU5UTyBydF9sb2cgKGlkKSsKKyAg IFZBTFVFUyAobmV3LmlkKTsKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdzdHgnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnb25seScsICdzdGF0aXN0aWNzJyk7CisgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBTVEFUSVNU SUNTIHN0eF9uZHYgKG5kaXN0aW5jdCkgT04gYSwgYiBGUk9NIHN0eDsKKygxIHJvdykKKworU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdybHMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2Zh bHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdybHMnKTsKKyAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyBFTkFCTEUgUk9XIExFVkVMIFNF Q1VSSVRZOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyBGT1JDRSBST1cgTEVWRUwg U0VDVVJJVFk7CisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jp X2Z1bGwnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnb25seScsICdyZXBsaWNhX2lkZW50aXR5Jyk7CisgICAgICAgICAgICAgICAg ICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBU QUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9mdWxsIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKKygxIHJv dykKKworLS0gdHJpZ2dlciAvIHBvbGljeSBhcmUgc2NhZmZvbGRlZCBidXQgbm90IHlldCBlbWl0 dGluZzsgb25seT1LIGlzIGEKKy0tIHZhbGlkIGZpbHRlciB0aGF0IHByb2R1Y2VzIHplcm8gcm93 cy4gIFdoZW4gdGhlIHN0YW5kYWxvbmUKKy0tIHBnX2dldF90cmlnZ2VyX2RkbCAvIHBnX2dldF9w b2xpY3lfZGRsIGhlbHBlcnMgbGFuZCwgdGhlc2UgcXVlcmllcworLS0gc3RhcnQgcmV0dXJuaW5n IHJvd3Mgd2l0aG91dCBhbiBBUEkgY2hhbmdlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdvbmx5JywgJ3RyaWdnZXInKTsKKyBwZ19nZXRfdGFibGVfZGRsIAor LS0tLS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ29ubHknLCAncG9saWN5Jyk7CisgcGdfZ2V0X3RhYmxlX2RkbCAK Ky0tLS0tLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworLS0gZXhjZXB0PUs6IGVtaXQgZXZlcnl0 aGluZyBleGNlcHQga2luZCBLJ3Mgc3RhdGVtZW50cy4gIFBLL1VOSVFVRS8KKy0tIElOREVYIGFy ZSBleGVyY2lzZWQgb24gdGFibGVzIHdpdGhvdXQgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRF WAorLS0gc28gdGhlIHZhbGlkYXRpb24gZG9lcyBub3QgdHJpcC4KK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAncHJpbWFyeV9rZXknKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4 ZCAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0KTsKKyBDUkVBVEUgSU5ERVggaWR4ZF9s b3dlciBPTiBpZHhkIFVTSU5HIGJ0cmVlIChsb3dlcihuYW1lKSk7CisgQ1JFQVRFIElOREVYIGlk eGRfcGFydGlhbCBPTiBpZHhkIFVTSU5HIGJ0cmVlIChpZCkgV0hFUkUgKGlkID4gMTAwKTsKKygz IHJvd3MpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNl cHQnLCAndW5pcXVlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgKGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIs IENPTlNUUkFJTlQgY29uc19hX2NoZWNrIENIRUNLICgoYSA+IDApKSk7CisgQUxURVIgVEFCTEUg cGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RSQUlOVCBjb25zX2NfZmtleSBGT1JFSUdOIEtF WSAoYykgUkVGRVJFTkNFUyByZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRDsK KygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2Ns YXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdl eGNlcHQnLCAnY2hlY2snKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg VEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyAoYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50ZWdl cik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RSQUlOVCBjb25z X2Jfa2V5IFVOSVFVRSAoYik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyBBREQg Q09OU1RSQUlOVCBjb25zX2NfZmtleSBGT1JFSUdOIEtFWSAoYykgUkVGRVJFTkNFUyByZWZkKGlk KSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRDsKKygzIHJvd3MpCisKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnZXhjbF9maXgnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNl JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ2V4Y2x1c2lvbicp OworICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5leGNsX2ZpeCAocm5nIGludDRyYW5nZSk7 CisoMSByb3cpCisKKy0tIGV4Y2VwdD10YWJsZSBzdXBwcmVzc2VzIHRoZSBDUkVBVEUgVEFCTEUg KyBPV05FUiArIGNoaWxkLWRlZmF1bHQKKy0tIFNFVCBERUZBVUxUICsgYXR0b3B0aW9ucyBwYXNz ZXMsIGxlYXZpbmcgb25seSB0aGUgc3ViLW9iamVjdCBwYXNzZXMuCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ3RhYmxlJyk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIg T04gaWR4ZCBVU0lORyBidHJlZSAobG93ZXIobmFtZSkpOworIENSRUFURSBJTkRFWCBpZHhkX3Bh cnRpYWwgT04gaWR4ZCBVU0lORyBidHJlZSAoaWQpIFdIRVJFIChpZCA+IDEwMCk7CisgQUxURVIg VEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX3BrZXkgUFJJTUFS WSBLRVkgKGlkKTsKKygzIHJvd3MpCisKKy0tIE11bHRpLWtpbmQgY29tcG9zaXRpb25zLgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAndGFibGUsaW5k ZXgnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QuaWR4ZCAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0KTsKKyBDUkVBVEUg SU5ERVggaWR4ZF9sb3dlciBPTiBpZHhkIFVTSU5HIGJ0cmVlIChsb3dlcihuYW1lKSk7CisgQ1JF QVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBpZHhkIFVTSU5HIGJ0cmVlIChpZCkgV0hFUkUgKGlk ID4gMTAwKTsKKygzIHJvd3MpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29u cyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdvbmx5JywgJ3ByaW1hcnlfa2V5LGZvcmVpZ25fa2V5Jyk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09O U1RSQUlOVCBjb25zX2NfZmtleSBGT1JFSUdOIEtFWSAoYykgUkVGRVJFTkNFUyByZWZkKGlkKSBE RUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRDsKKygxIHJvdykKKworLS0gRHVwbGljYXRlIGVu dHJpZXMgaW4gdGhlIGxpc3QgYXJlIHNpbGVudGx5IGRlLWR1cGxpY2F0ZWQgYnkgdGhlCistLSBC aXRtYXBzZXQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFz cywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25s eScsICdpbmRleCxpbmRleCcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBJTkRFWCBpZHhkX2xvd2VyIE9OIGlkeGQgVVNJTkcgYnRyZWUgKGxvd2VyKG5hbWUpKTsKKyBD UkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9OIGlkeGQgVVNJTkcgYnRyZWUgKGlkKSBXSEVSRSAo aWQgPiAxMDApOworKDIgcm93cykKKworRFJPUCBUQUJMRSBleGNsX2ZpeDsKKy0tIG9ubHk9SyBv biBhIHRhYmxlIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgSyBvZiB0aGF0IGtpbmQgaXMgYSB2YWxp ZAorLS0gZmlsdGVyIGFuZCByZXR1cm5zIHplcm8gcm93cy4gIFRlc3RlZCBwcmV2aW91c2x5IHdp dGggZm9yZWlnbl9rZXkKKy0tIG9uICdyZWZkJzsgaGVyZSBhbHNvIHJ1bGUsIHN0YXRpc3RpY3Ms IHJscywgcmVwbGljYV9pZGVudGl0eSwgYW5kCistLSBleGNsdXNpb24gb24gJ2Jhc2ljJyAod2hp Y2ggaGFzIG9ubHkgUEsgKyBjb2x1bW5zKS4KK1NFTEVDVCBjb3VudCgqKSBBUyBydWxlX3Jvd3MK KyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFs c2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAncnVsZScpOworIHJ1bGVfcm93 cyAKKy0tLS0tLS0tLS0tCisgICAgICAgICAwCisoMSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBB UyBzdGF0c19yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywg J293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3N0YXRp c3RpY3MnKTsKKyBzdGF0c19yb3dzIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAgMAorKDEgcm93 KQorCitTRUxFQ1QgY291bnQoKikgQVMgcmxzX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdiYXNpYyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAg ICAgICAgJ29ubHknLCAncmxzJyk7CisgcmxzX3Jvd3MgCistLS0tLS0tLS0tCisgICAgICAgIDAK KygxIHJvdykKKworU0VMRUNUIGNvdW50KCopIEFTIHJpX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAg ICAgICAgICAgICAgJ29ubHknLCAncmVwbGljYV9pZGVudGl0eScpOworIHJpX3Jvd3MgCistLS0t LS0tLS0KKyAgICAgICAwCisoMSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBBUyBleGNsX3Jvd3MK KyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFs c2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAnZXhjbHVzaW9uJyk7CisgZXhj bF9yb3dzIAorLS0tLS0tLS0tLS0KKyAgICAgICAgIDAKKygxIHJvdykKKworLS0gSW5wdXQtdmFs aWRhdGlvbiBlZGdlIGNhc2VzIGZvciB0aGUgY29tbWEtc2VwYXJhdGVkIGtpbmQgbGlzdC4gIEFs bAorLS0gb2YgdGhlc2UgcmFpc2UgYW4gZXJyb3IgYXQgdGhlIHZhcmlhZGljLXBhcnNlIHN0ZXA7 IHRoZSBmdW5jdGlvbgorLS0gbmV2ZXIgcmVhY2hlcyByZWxhdGlvbiBvcGVuLgorLS0gRW1wdHkg bGlzdDoKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywg J29ubHknLCAnJyk7CitFUlJPUjogIG9wdGlvbiAib25seSIgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0 IG9uZSBraW5kCistLSBXaGl0ZXNwYWNlLW9ubHkgbGlzdDoKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ29ubHknLCAnICAgJyk7CitFUlJPUjogIGVt cHR5IGVudHJ5IGluIG9wdGlvbiAib25seSIKKy0tIFRyYWlsaW5nIGNvbW1hOgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb25seScsICdpbmRleCwn KTsKK0VSUk9SOiAgZW1wdHkgZW50cnkgaW4gb3B0aW9uICJvbmx5IgorLS0gTGVhZGluZyBjb21t YToKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ29u bHknLCAnLGluZGV4Jyk7CitFUlJPUjogIGVtcHR5IGVudHJ5IGluIG9wdGlvbiAib25seSIKKy0t IENvbnNlY3V0aXZlIGNvbW1hczoKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFz aWMnOjpyZWdjbGFzcywgJ29ubHknLCAnaW5kZXgsLHJ1bGUnKTsKK0VSUk9SOiAgZW1wdHkgZW50 cnkgaW4gb3B0aW9uICJvbmx5IgorLS0gVG9rZW4gY29udGFpbmluZyBpbm5lciB3aGl0ZXNwYWNl OgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb25s eScsICdmb3JlaWduIGtleScpOworRVJST1I6ICBpbnZhbGlkIGNoYXJhY3RlciBpbiBvcHRpb24g Im9ubHkiCistLSBOVUxMIHZhbHVlIGZvciBhIG5vbi1OVUxMIG9wdGlvbjoKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ29ubHknLCBOVUxMKTsKK0VS Uk9SOiAgdmFsdWUgZm9yIG9wdGlvbiAib25seSIgbXVzdCBub3QgYmUgbnVsbAorLS0gT3B0aW9u IHNwZWNpZmllZCB0d2ljZSBhcyBzZXBhcmF0ZSBuYW1lL3ZhbHVlIHBhaXJzOgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdvbmx5JywgJ2luZGV4JywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnb25seScsICdydWxlJyk7CitFUlJPUjogIG9wdGlvbiAib25seSIgaXMgc3BlY2lm aWVkIG1vcmUgdGhhbiBvbmNlCistLSBTYW1lIGtpbmQgc3BlY2lmaWVkIHRocm91Z2ggYm90aCBv cHRpb25zIGlzIHN0aWxsIG11dGV4LXJlamVjdGVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdvbmx5JywgJ2luZGV4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0 JywgJ3J1bGUnKTsKK0VSUk9SOiAgIm9ubHkiIGFuZCAiZXhjZXB0IiBvcHRpb25zIGFyZSBtdXR1 YWxseSBleGNsdXNpdmUKKy0tIFJvdW5kLXRyaXAgdmVyaWZpY2F0aW9uLiAgRm9yIGV2ZXJ5IHRl c3QgdGFibGUsIGNhcHR1cmUgdGhlIERETCB0aGUKKy0tIGZ1bmN0aW9uIGVtaXRzLCBkcm9wIHRo ZSBzY2hlbWEsIHJlcGxheSBlYWNoIHRhYmxlJ3MgRERMIGluCistLSBkZXBlbmRlbmN5IG9yZGVy LCBhbmQgY29uZmlybSB0aGF0IHBnX2dldF90YWJsZV9kZGwgb24gdGhlIHJlY3JlYXRlZAorLS0g cmVsYXRpb24gbWF0Y2hlcyB0aGUgb3JpZ2luYWwgbGluZS1mb3ItbGluZS4gIFRoZSBmaW5hbCBT RUxFQ1QgbXVzdAorLS0gcmV0dXJuIHplcm8gcm93cy4KK0NSRUFURSBURU1QIFRBQkxFIHBndGJs X2RkbF9ydF9vcmlnIChuYW1lIHRleHQsIG9yZCBpbnQsIGxpbmUgdGV4dCk7CitJTlNFUlQgSU5U TyBwZ3RibF9kZGxfcnRfb3JpZworU0VMRUNUIHQubmFtZSwgby5vcmQsIG8ubGluZQorRlJPTSAo VkFMVUVTCisgICAgICAgICgnYmFzaWMnKSwgKCdpZF9jb2xzJyksICgnaWRfY3VzdG9tJyksICgn Z2VuX2NvbHMnKSwgKCdnZW5fdmlydHVhbCcpLCAoJ3N0b3JhZ2VfY29scycpLAorICAgICAgICAo J3JlZmQnKSwgKCdjb25zJyksICgnaWR4ZCcpLAorICAgICAgICAoJ3BhcicpLCAoJ2NoJyksICgn YXR0b3B0JyksCisgICAgICAgICgncGFydGVkX3JhbmdlJyksICgncGFydGVkX3JhbmdlXzEnKSwg KCdwYXJ0ZWRfcmFuZ2VfZGVmJyksCisgICAgICAgICgncGFydGVkX2hhc2gnKSwgKCdwYXJ0ZWRf aGFzaF8wJyksCisgICAgICAgICgncGFydGVkX2xpc3QnKSwKKyAgICAgICAgKCdydF9sb2cnKSwg KCdydCcpLAorICAgICAgICAoJ3N0eCcpLCAoJ3JscycpLCAoJ3JpX2Z1bGwnKSwgKCdyaV9pZHgn KSwgKCd1bm8nKQorICAgICApIEFTIHQobmFtZSksCisgICAgIExBVEVSQUwgcGdfZ2V0X3RhYmxl X2RkbCgoJ3BndGJsX2RkbF90ZXN0LicgfHwgdC5uYW1lKTo6cmVnY2xhc3MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnKSBXSVRIIE9SRElOQUxJVFkgbyhs aW5lLCBvcmQpOworRE8gJCQKK0RFQ0xBUkUKKyAgICB0YWJsZXMgQ09OU1RBTlQgdGV4dFtdIDo9 IEFSUkFZWworICAgICAgICAnYmFzaWMnLCAnaWRfY29scycsICdpZF9jdXN0b20nLCAnZ2VuX2Nv bHMnLCAnZ2VuX3ZpcnR1YWwnLCAnc3RvcmFnZV9jb2xzJywKKyAgICAgICAgJ3JlZmQnLCAnY29u cycsICdpZHhkJywKKyAgICAgICAgJ3BhcicsICdjaCcsICdhdHRvcHQnLAorICAgICAgICAncGFy dGVkX3JhbmdlJywgJ3BhcnRlZF9yYW5nZV8xJywgJ3BhcnRlZF9yYW5nZV9kZWYnLAorICAgICAg ICAncGFydGVkX2hhc2gnLCAncGFydGVkX2hhc2hfMCcsCisgICAgICAgICdwYXJ0ZWRfbGlzdCcs CisgICAgICAgICdydF9sb2cnLCAncnQnLAorICAgICAgICAnc3R4JywgJ3JscycsICdyaV9mdWxs JywgJ3JpX2lkeCcsICd1bm8nCisgICAgXTsKKyAgICB0IHRleHQ7CisgICAgc3RtdCB0ZXh0Owor QkVHSU4KKyAgICBEUk9QIFNDSEVNQSBwZ3RibF9kZGxfdGVzdCBDQVNDQURFOworICAgIENSRUFU RSBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3Q7CisgICAgRk9SRUFDSCB0IElOIEFSUkFZIHRhYmxlcyBM T09QCisgICAgICAgIEZPUiBzdG10IElOCisgICAgICAgICAgICBTRUxFQ1QgbGluZSBGUk9NIHBn dGJsX2RkbF9ydF9vcmlnIFdIRVJFIG5hbWUgPSB0IE9SREVSIEJZIG9yZAorICAgICAgICBMT09Q CisgICAgICAgICAgICBFWEVDVVRFIHN0bXQ7CisgICAgICAgIEVORCBMT09QOworICAgIEVORCBM T09QOworRU5EICQkOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byAyNyBvdGhlciBvYmplY3Rz CitERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGJhc2ljCitkcm9wIGNhc2NhZGVzIHRv IHRhYmxlIGlkX2NvbHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgaWRfY3VzdG9tCitkcm9wIGNh c2NhZGVzIHRvIHRhYmxlIGdlbl9jb2xzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGdlbl92aXJ0 dWFsCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHN0b3JhZ2VfY29scworZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSByZWZkCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGNvbnMKK2Ryb3AgY2FzY2FkZXMg dG8gdGFibGUgaWR4ZAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXIKK2Ryb3AgY2FzY2FkZXMg dG8gdGFibGUgY2gKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgYXR0b3B0Citkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIHBhcnRlZF9yYW5nZQorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfaGFz aAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfbGlzdAorZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSBydAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBydF9sb2cKK2Ryb3AgY2FzY2FkZXMgdG8g dGFibGUgc3R4Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJscworZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSByaV9mdWxsCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJpX2lkeAorZHJvcCBjYXNjYWRl cyB0byB0YWJsZSB1bm8KK2Ryb3AgY2FzY2FkZXMgdG8gdHlwZSB0eXBlZF90Citkcm9wIGNhc2Nh ZGVzIHRvIHRhYmxlIHR5cGVkX3BsYWluCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHR5cGVkX292 ZXIKK2Ryb3AgY2FzY2FkZXMgdG8gdmlldyB2Citkcm9wIGNhc2NhZGVzIHRvIHNlcXVlbmNlIHMK K0VSUk9SOiAgcmVsYXRpb24gInBhcnRlZF9yYW5nZV8xIiBhbHJlYWR5IGV4aXN0cworQ09OVEVY VDogIFNRTCBzdGF0ZW1lbnQgIkNSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFu Z2VfMSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3JhbmdlIEZPUiBWQUxVRVMg RlJPTSAoMCkgVE8gKDEwMCk7IgorUEwvcGdTUUwgZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sg bGluZSAyMiBhdCBFWEVDVVRFCitXSVRIIGFmdGVyX2RkbCBBUyAoCisgICAgU0VMRUNUIHQubmFt ZSwgby5vcmQsIG8ubGluZQorICAgIEZST00gKFNFTEVDVCBESVNUSU5DVCBuYW1lIEZST00gcGd0 YmxfZGRsX3J0X29yaWcpIEFTIHQsCisgICAgICAgICBMQVRFUkFMIHBnX2dldF90YWJsZV9kZGwo KCdwZ3RibF9kZGxfdGVzdC4nIHx8IHQubmFtZSk6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICdvd25lcicsICdmYWxzZScpIFdJVEggT1JESU5BTElUWSBvKGxp bmUsIG9yZCkKKykKKyhTRUxFQ1QgJ21pc3NpbmctaW4tY29weScgQVMga2luZCwgbmFtZSwgb3Jk LCBsaW5lIEZST00gcGd0YmxfZGRsX3J0X29yaWcKKyBFWENFUFQKKyBTRUxFQ1QgJ21pc3Npbmct aW4tY29weScsIG5hbWUsIG9yZCwgbGluZSBGUk9NIGFmdGVyX2RkbCkKK1VOSU9OIEFMTAorKFNF TEVDVCAnZXh0cmEtaW4tY29weScgQVMga2luZCwgbmFtZSwgb3JkLCBsaW5lIEZST00gYWZ0ZXJf ZGRsCisgRVhDRVBUCisgU0VMRUNUICdleHRyYS1pbi1jb3B5JywgbmFtZSwgb3JkLCBsaW5lIEZS T00gcGd0YmxfZGRsX3J0X29yaWcpCitPUkRFUiBCWSBraW5kLCBuYW1lLCBvcmQ7Cisga2luZCB8 IG5hbWUgfCBvcmQgfCBsaW5lIAorLS0tLS0tKy0tLS0tLSstLS0tLSstLS0tLS0KKygwIHJvd3Mp CisKKy0tIENsZWFudXAuCitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfdGVzdCBDQVNDQURFOworTk9U SUNFOiAgZHJvcCBjYXNjYWRlcyB0byAyNyBvdGhlciBvYmplY3RzCitERVRBSUw6ICBkcm9wIGNh c2NhZGVzIHRvIHRhYmxlIGJhc2ljCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkX2NvbHMKK2Ry b3AgY2FzY2FkZXMgdG8gdGFibGUgaWRfY3VzdG9tCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGdl bl9jb2xzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGdlbl92aXJ0dWFsCitkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIHN0b3JhZ2VfY29scworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSByZWZkCitkcm9w IGNhc2NhZGVzIHRvIHRhYmxlIGNvbnMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgaWR4ZAorZHJv cCBjYXNjYWRlcyB0byB0YWJsZSBwYXIKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgY2gKK2Ryb3Ag Y2FzY2FkZXMgdG8gdGFibGUgYXR0b3B0Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9y YW5nZQorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfaGFzaAorZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSBwYXJ0ZWRfbGlzdAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBydAorZHJvcCBjYXNj YWRlcyB0byB0YWJsZSBydF9sb2cKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgc3R4Citkcm9wIGNh c2NhZGVzIHRvIHRhYmxlIHJscworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSByaV9mdWxsCitkcm9w IGNhc2NhZGVzIHRvIHRhYmxlIHJpX2lkeAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB1bm8KK2Ry b3AgY2FzY2FkZXMgdG8gdHlwZSB0eXBlZF90Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHR5cGVk X3BsYWluCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHR5cGVkX292ZXIKK2Ryb3AgY2FzY2FkZXMg dG8gdmlldyB2Citkcm9wIGNhc2NhZGVzIHRvIHNlcXVlbmNlIHMKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVs X3NjaGVkdWxlCmluZGV4IDhmYTBhNmM0N2ZiLi45ZWNhNjRjY2EzYiAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Bh cmFsbGVsX3NjaGVkdWxlCkBAIC04MSw3ICs4MSw3IEBAIHRlc3Q6IGNyZWF0ZV90YWJsZV9saWtl IGFsdGVyX2dlbmVyaWMgYWx0ZXJfb3BlcmF0b3IgbWlzYyBhc3luYyBkYnNpemUgbWVyZ2UgbWlz CiAjIGNvbGxhdGUubGludXgudXRmOCBhbmQgY29sbGF0ZS5pY3UudXRmOCB0ZXN0cyBjYW5ub3Qg YmUgcnVuIGluIHBhcmFsbGVsIHdpdGggZWFjaCBvdGhlcgogIyBwc3FsIGRlcGVuZHMgb24gY3Jl YXRlX2FtCiAjIGFtdXRpbHMgZGVwZW5kcyBvbiBnZW9tZXRyeSwgY3JlYXRlX2luZGV4X3NwZ2lz dCwgaGFzaF9pbmRleCwgYnJpbgotdGVzdDogcnVsZXMgcHNxbCBwc3FsX2Nyb3NzdGFiIHBzcWxf cGlwZWxpbmUgYW11dGlscyBzdGF0c19leHQgY29sbGF0ZS5saW51eC51dGY4IGNvbGxhdGUud2lu ZG93cy53aW4xMjUyCit0ZXN0OiBydWxlcyBwc3FsIHBzcWxfY3Jvc3N0YWIgcHNxbF9waXBlbGlu ZSBhbXV0aWxzIHN0YXRzX2V4dCBjb2xsYXRlLmxpbnV4LnV0ZjggY29sbGF0ZS53aW5kb3dzLndp bjEyNTIgcGdfZ2V0X3RhYmxlX2RkbAogCiAjIC0tLS0tLS0tLS0KICMgUnVuIHRoZXNlIGFsb25l IHNvIHRoZXkgZG9uJ3QgcnVuIG91dCBvZiBwYXJhbGxlbCB3b3JrZXJzCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFibGVfZGRsLnNxbCBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3BnX2dldF90YWJsZV9kZGwuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi45NWE0ZGQwYjU2OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3BnX2dldF90YWJsZV9kZGwuc3FsCkBAIC0wLDAgKzEsNzQxIEBACistLQorLS0gcGdf Z2V0X3RhYmxlX2RkbAorLS0KKy0tIEFsbCB0ZXN0cyBwYXNzIG93bmVyPT5mYWxzZSBzbyB0aGUg QUxURVIgVEFCTEUgT1dORVIgVE8gbGluZSBpcyBub3QKKy0tIGVtaXR0ZWQsIGtlZXBpbmcgb3V0 cHV0IHN0YWJsZSBhY3Jvc3MgdGVzdCBydW5uZXJzICh3aGljaCBtYXkgcnVuIHVuZGVyCistLSBk aWZmZXJlbnQgcm9sZSBuYW1lcykuCistLQorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfdGVzdDsK K1NFVCBzZWFyY2hfcGF0aCA9IHBndGJsX2RkbF90ZXN0OworCistLSBCYXNpYyB0YWJsZSB3aXRo IFBSSU1BUlkgS0VZLCBOT1QgTlVMTCwgREVGQVVMVCwgQ09MTEFURS4KK0NSRUFURSBUQUJMRSBi YXNpYyAoCisgICAgaWQgaW50IFBSSU1BUlkgS0VZLAorICAgIG5hbWUgdGV4dCBOT1QgTlVMTCBE RUZBVUxUICdhbm9uJyBDT0xMQVRFICJDIgorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIElkZW50aXR5 IGNvbHVtbnMgKHdpdGggZGVmYXVsdCBhbmQgY3VzdG9tIHNlcXVlbmNlIG9wdGlvbnMpLgorQ1JF QVRFIFRBQkxFIGlkX2NvbHMgKAorICAgIGlkX2Fsd2F5cyBpbnQgR0VORVJBVEVEIEFMV0FZUyBB UyBJREVOVElUWSwKKyAgICBpZF9kZWZhdWx0IGludCBHRU5FUkFURUQgQlkgREVGQVVMVCBBUyBJ REVOVElUWQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWRfY29scyc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworQ1JFQVRFIFRBQkxFIGlkX2N1c3RvbSAoCisg ICAgdiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSAoCisgICAgICAgIFNFUVVFTkNF IE5BTUUgaWRfY3VzdG9tX3Zfc2VxCisgICAgICAgIFNUQVJUIFdJVEggMTAwIElOQ1JFTUVOVCBC WSA1CisgICAgICAgIE1JTlZBTFVFIDUwIE1BWFZBTFVFIDEwMDAKKyAgICAgICAgQ0FDSEUgMTAg Q1lDTEUKKyAgICApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZF9jdXN0 b20nOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIEdlbmVyYXRlZCBzdG9yZWQg Y29sdW1uLgorQ1JFQVRFIFRBQkxFIGdlbl9jb2xzICgKKyAgICBjZW50cyBpbnQsCisgICAgZG9s bGFycyBudW1lcmljIEdFTkVSQVRFRCBBTFdBWVMgQVMgKGNlbnRzIC8gMTAwLjApIFNUT1JFRAor KTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnZ2VuX2NvbHMnOjpyZWdjbGFzcywg J293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIEdlbmVyYXRlZCB2aXJ0dWFsIGNvbHVtbi4KK0NSRUFU RSBUQUJMRSBnZW5fdmlydHVhbCAoCisgICAgYmFzZSBpbnQsCisgICAgZGVyaXZlZCBpbnQgR0VO RVJBVEVEIEFMV0FZUyBBUyAoYmFzZSAqIDIpIFZJUlRVQUwKKyk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2dlbl92aXJ0dWFsJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScp OworCistLSBTVE9SQUdFIGFuZCBDT01QUkVTU0lPTiAob25seSBlbWl0dGVkIHdoZW4gbm9uLWRl ZmF1bHQgZm9yIHRoZSB0eXBlKS4KK0NSRUFURSBUQUJMRSBzdG9yYWdlX2NvbHMgKAorICAgIGEg dGV4dCBTVE9SQUdFIEVYVEVSTkFMLAorICAgIGIgdGV4dCBTVE9SQUdFIE1BSU4sCisgICAgYyB0 ZXh0IENPTVBSRVNTSU9OIHBnbHoKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J3N0b3JhZ2VfY29scyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gQ29uc3Ry YWludHM6IENIRUNLLCBVTklRVUUsIEZPUkVJR04gS0VZIChERUZFUlJBQkxFKS4KK0NSRUFURSBU QUJMRSByZWZkIChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGNvbnMgKAorICAg IGEgaW50IENIRUNLIChhID4gMCksCisgICAgYiBpbnQgVU5JUVVFLAorICAgIGMgaW50IFJFRkVS RU5DRVMgcmVmZChpZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQKKyk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNl Jyk7CisKKy0tIEluZGV4ZXM6IGZ1bmN0aW9uYWwgYW5kIHBhcnRpYWwuICBDb25zdHJhaW50LWJh Y2tpbmcgaW5kZXhlcyBhcmUKKy0tIHN1cHByZXNzZWQgKHRoZXkgYXJlIGVtaXR0ZWQgYnkgdGhl IGNvbnN0cmFpbnQgbG9vcCkuCitDUkVBVEUgVEFCTEUgaWR4ZCAoaWQgaW50IFBSSU1BUlkgS0VZ LCBuYW1lIHRleHQpOworQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04gaWR4ZCAobG93ZXIobmFt ZSkpOworQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBpZHhkIChpZCkgV0hFUkUgaWQgPiAx MDA7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJyk7CisKKy0tIEluaGVyaXRhbmNlLCBpbmNsdWRpbmcgYSBjaGlsZCBERUZB VUxUIG92ZXJyaWRlIG9uIGFuIGluaGVyaXRlZCBjb2x1bW4uCitDUkVBVEUgVEFCTEUgcGFyIChh IGludCBERUZBVUxUIDEsIGIgdGV4dCk7CitDUkVBVEUgVEFCTEUgY2ggKGMgaW50KSBJTkhFUklU UyAocGFyKTsKK0FMVEVSIFRBQkxFIGNoIEFMVEVSIENPTFVNTiBhIFNFVCBERUZBVUxUIDk5OTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY2gnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJyk7CisKKy0tIFBlci1jb2x1bW4gYXR0b3B0aW9uczogZW1pdHRlZCBhcyBBTFRFUiBD T0xVTU4gU0VUICguLi4pLgorQ1JFQVRFIFRBQkxFIGF0dG9wdCAoYSBpbnQsIGIgdGV4dCk7CitB TFRFUiBUQUJMRSBhdHRvcHQgQUxURVIgQ09MVU1OIGEgU0VUIChuX2Rpc3RpbmN0ID0gMTAwKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYXR0b3B0Jzo6cmVnY2xhc3MsICdvd25l cicsICdmYWxzZScpOworCistLSBQYXJ0aXRpb25lZCB0YWJsZSBwYXJlbnRzIChSQU5HRSwgSEFT SCwgYW5kIExJU1QpLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9yYW5nZSAoaWQgaW50LCBrIGludCkg UEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J3BhcnRlZF9yYW5nZSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworQ1JFQVRFIFRB QkxFIHBhcnRlZF9oYXNoIChpZCBpbnQpIFBBUlRJVElPTiBCWSBIQVNIIChpZCk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9oYXNoJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScpOworCitDUkVBVEUgVEFCTEUgcGFydGVkX2xpc3QgKGlkIGludCwgcmVnaW9uIHRl eHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdwYXJ0ZWRfbGlzdCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0g UGFydGl0aW9uIGNoaWxkcmVuOiBGUk9NL1RPLCBXSVRIIChtb2R1bHVzLCByZW1haW5kZXIpLCBE RUZBVUxULgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9yYW5nZV8xIFBBUlRJVElPTiBPRiBwYXJ0ZWRf cmFuZ2UKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworQUxURVIgVEFCTEUgcGFy dGVkX3JhbmdlXzEgQUxURVIgQ09MVU1OIGsgU0VUIERFRkFVTFQgNzsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlXzEnOjpyZWdjbGFzcywgJ293bmVyJywgJ2Zh bHNlJyk7CisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaGFzaF8wIFBBUlRJVElPTiBPRiBwYXJ0ZWRf aGFzaAorICAgIEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAyLCByZW1haW5kZXIgMCk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9oYXNoXzAnOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJyk7CisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElP TiBPRiBwYXJ0ZWRfcmFuZ2UgREVGQVVMVDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGFydGVkX3JhbmdlX2RlZic6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0g UnVsZXMuCitDUkVBVEUgVEFCTEUgcnQgKGlkIGludCk7CitDUkVBVEUgVEFCTEUgcnRfbG9nIChp ZCBpbnQpOworQ1JFQVRFIFJVTEUgcnRfbG9nX2luc2VydCBBUyBPTiBJTlNFUlQgVE8gcnQKKyAg ICBETyBBTFNPIElOU0VSVCBJTlRPIHJ0X2xvZyBWQUxVRVMgKE5FVy5pZCk7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOwor CistLSBFeHRlbmRlZCBzdGF0aXN0aWNzLgorQ1JFQVRFIFRBQkxFIHN0eCAoYSBpbnQsIGIgaW50 LCBjIGludCk7CitDUkVBVEUgU1RBVElTVElDUyBzdHhfbmR2IChuZGlzdGluY3QpIE9OIGEsIGIg RlJPTSBzdHg7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gUm93LWxldmVsIHNlY3VyaXR5IHRvZ2dsZXMuCitD UkVBVEUgVEFCTEUgcmxzIChpZCBpbnQpOworQUxURVIgVEFCTEUgcmxzIEVOQUJMRSBST1cgTEVW RUwgU0VDVVJJVFk7CitBTFRFUiBUQUJMRSBybHMgRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZOwor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdybHMnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJyk7CisKKy0tIFJFUExJQ0EgSURFTlRJVFk6IGVtaXR0ZWQgb25seSB3aGVuIG5vdCB0 aGUgZGVmYXVsdC4KK0NSRUFURSBUQUJMRSByaV9mdWxsIChhIGludCk7CitBTFRFUiBUQUJMRSBy aV9mdWxsIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgncmlfZnVsbCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworQ1JFQVRFIFRB QkxFIHJpX2lkeCAoYSBpbnQgTk9UIE5VTEwpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCByaV9pZHhf YSBPTiByaV9pZHggKGEpOworQUxURVIgVEFCTEUgcmlfaWR4IFJFUExJQ0EgSURFTlRJVFkgVVNJ TkcgSU5ERVggcmlfaWR4X2E7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2lk eCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gVU5MT0dHRUQgKyByZWxvcHRp b25zLgorQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHVubyAoaWQgaW50KSBXSVRIIChmaWxsZmFjdG9y ID0gNzApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd1bm8nOjpyZWdjbGFzcywg J293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIFR5cGVkIHRhYmxlIChDUkVBVEUgVEFCTEUgT0YgdHlw ZV9uYW1lKS4gIENvbHVtbnMgaW5oZXJpdGVkIGZyb20gdGhlCistLSB0eXBlIGVtaXQgbm90aGlu ZzsgbG9jYWxseS1hcHBsaWVkIERFRkFVTFQsIE5PVCBOVUxMIGFuZCBDSEVDSyBjb21lCistLSBv dXQgdGhyb3VnaCBhIHNpbmdsZSAiKGNvbCBXSVRIIE9QVElPTlMgLi4uKSIgbGlzdC4KK0NSRUFU RSBUWVBFIHR5cGVkX3QgQVMgKGEgaW50LCBiIHRleHQpOworQ1JFQVRFIFRBQkxFIHR5cGVkX3Bs YWluIE9GIHR5cGVkX3Q7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3R5cGVkX3Bs YWluJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCitDUkVBVEUgVEFCTEUgdHlwZWRf b3ZlciBPRiB0eXBlZF90ICgKKyAgICBhIFdJVEggT1BUSU9OUyBERUZBVUxUIDcgTk9UIE5VTEws CisgICAgYiBXSVRIIE9QVElPTlMgTk9UIE5VTEwsCisgICAgQ09OU1RSQUlOVCBiX25vbmVtcHR5 IENIRUNLIChsZW5ndGgoYikgPiAwKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgndHlwZWRfb3Zlcic6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gVGVtcG9y YXJ5IHRhYmxlcyArIE9OIENPTU1JVC4gIFRlbXAgdGFibGVzIG11c3QgbmV2ZXIgYmUgZW1pdHRl ZCB3aXRoCistLSB0aGUgc2Vzc2lvbi1wcml2YXRlIHBnX3RlbXBfTk4gc2NoZW1hIHByZWZpeCAt LSB0aGUgVEVNUE9SQVJZIGtleXdvcmQKKy0tIGFscmVhZHkgcGxhY2VzIHRoZSB0YWJsZSBpbiBw Z190ZW1wIGFuZCB0aGUgcHJlZml4IGlzIG5vbi1yZXBsYXlhYmxlLgorLS0gT04gQ09NTUlUIERS T1Agb25seSBmaXJlcyBhdCBjb21taXQsIHNvIHRoZSBxdWVyaWVzIHRoYXQgbmVlZCB0byBzZWUK Ky0tIHRoZSBjYXRhbG9nIGVudHJ5IG11c3QgcnVuIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIGFz IHRoZSBDUkVBVEUuCitCRUdJTjsKK0NSRUFURSBURU1QIFRBQkxFIHRlbXBfZGVmYXVsdCAoaWQg aW50KTsKK0NSRUFURSBURU1QIFRBQkxFIHRlbXBfZGVsZXRlIChpZCBpbnQpIE9OIENPTU1JVCBE RUxFVEUgUk9XUzsKK0NSRUFURSBURU1QIFRBQkxFIHRlbXBfZHJvcCAoaWQgaW50KSBPTiBDT01N SVQgRFJPUDsKKworU0VMRUNUIGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1wX2RlZmF1 bHQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJykgQVMgbGluZQorV0hFUkUgbGluZSBMSUtF ICdDUkVBVEUgJSc7CisKK1NFTEVDVCBsaW5lIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9k ZWxldGUnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJykgQVMgbGluZQorV0hFUkUgbGluZSBM SUtFICdDUkVBVEUgJSc7CisKK1NFTEVDVCBsaW5lIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVt cF9kcm9wJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpIEFTIGxpbmUKK1dIRVJFIGxpbmUg TElLRSAnQ1JFQVRFICUnOworUk9MTEJBQ0s7CisKKy0tIFByZXR0eSBtb2RlLgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2Un LCAncHJldHR5JywgJ3RydWUnKTsKKworLS0gVkFSSUFESUMgQVJSQVlbLi4uXSBjYWxsIGZvcm06 IG9wdGlvbiBwYWlycyBjYW4gYmUgcGFzc2VkIGFzIGEgc2luZ2xlCistLSB0ZXh0W10gdGFnZ2Vk IHdpdGggVkFSSUFESUMsIGluIGFkZGl0aW9uIHRvIHRoZSBwb3NpdGlvbmFsIHNwZWxsaW5nCist LSBleGVyY2lzZWQgYWJvdmUuICBUaGlzIHJlcXVpcmVzIHByb2FyZ3R5cGVzIHRvIGRlY2xhcmUg dGhlIHZhcmlhZGljCistLSBhcmd1bWVudCBhcyB0aGUgYXJyYXkgdHlwZSAoX3RleHQpLgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZBUklBRElDIEFSUkFZWydvd25lcicsICdmYWxzZSddKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWQVJJQURJQyBBUlJBWVsnb3duZXInLCAnZmFsc2Un LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcmV0dHkn LCAndHJ1ZSddOjp0ZXh0W10pOworCistLSBWQVJJQURJQyBOVUxMOjp0ZXh0W10gaXMgZXF1aXZh bGVudCB0byBvbWl0dGluZyB0aGUgdmFyaWFkaWMgYXJndW1lbnRzOworLS0gY2hlY2sgdGhlIHJv dyBjb3VudCByYXRoZXIgdGhhbiB0aGUgcm93cyB0aGVtc2VsdmVzLCBiZWNhdXNlIHdpdGhvdXQK Ky0tICdvd25lcicsICdmYWxzZScgdGhlIG91dHB1dCBjb250YWlucyBhbiBBTFRFUiBUQUJMRSAu Li4gT1dORVIgVE8gbGluZQorLS0gdGhhdCB2YXJpZXMgYWNyb3NzIHRlc3QgcnVubmVycy4KK1NF TEVDVCBjb3VudCgqKSA+IDAgQVMgb2sKKyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6 OnJlZ2NsYXNzLCBWQVJJQURJQyBOVUxMOjp0ZXh0W10pOworCistLSBvbmx5IC8gZXhjZXB0IGdh dGluZzogZWFjaCBlbWl0cyBlaXRoZXIgb25seSB0aGUgbGlzdGVkIGtpbmRzCistLSAob25seSkg b3IgZXZlcnkga2luZCBleGNlcHQgdGhlIGxpc3RlZCBvbmVzIChleGNlcHQpLiAgVGhlIHR3bwor LS0gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gIEtpbmQgdm9jYWJ1bGFyeTogdGFibGUsIGluZGV4 LAorLS0gcHJpbWFyeV9rZXksIHVuaXF1ZSwgY2hlY2ssIGZvcmVpZ25fa2V5LCBleGNsdXNpb24s IHJ1bGUsCistLSBzdGF0aXN0aWNzLCB0cmlnZ2VyLCBwb2xpY3ksIHJscywgcmVwbGljYV9pZGVu dGl0eSwgcGFydGl0aW9uLgorLS0gTk9UIE5VTEwgaXMgbm90IGluIHRoZSB2b2NhYnVsYXJ5IC0g YWx3YXlzIGVtaXR0ZWQgdG8gcHJldmVudAorLS0gcHJvZHVjaW5nIHNjaGVtYXMgdGhhdCBzaWxl bnRseSBhY2NlcHQgTlVMTHMgdGhlIHNvdXJjZSB3b3VsZAorLS0gaGF2ZSByZWplY3RlZC4KKy0t CistLSBleGNlcHQ9aW5kZXggaGlkZXMgdGhlIENSRUFURSBJTkRFWCBzdGF0ZW1lbnRzLgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdpbmRleCcp OworCistLSBleGNlcHQ9cHJpbWFyeV9rZXksdW5pcXVlLGNoZWNrLGZvcmVpZ25fa2V5LGV4Y2x1 c2lvbiBoaWRlcyBldmVyeQorLS0gdGFibGUtbGV2ZWwgY29uc3RyYWludC4gIElubGluZSBDSEVD SyBpbiB0aGUgQ1JFQVRFIFRBQkxFIGJvZHkgaXMKKy0tIHN1cHByZXNzZWQgdG9vLgorU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ3ByaW1hcnlfa2V5LHVuaXF1ZSxjaGVjayxmb3JlaWduX2tl eSxleGNsdXNpb24nKTsKKworLS0gZXhjZXB0PWZvcmVpZ25fa2V5IHN1cHByZXNzZXMgb25seSBG T1JFSUdOIEtFWSBjb25zdHJhaW50czsKKy0tIFBSSU1BUlkgS0VZLCBVTklRVUUsIENIRUNLLCBh bmQgbmFtZWQgTk9UIE5VTEwgc3RheS4gIFRoaXMgaXMgdGhlCistLSBmaXJzdCBwYXNzIG9mIHRo ZSB0d28tcGFzcyBGSy1jbG9uZSB3b3JrZmxvdzogZW1pdCB0YWJsZXMgd2l0aG91dAorLS0gY3Jv c3MtdGFibGUgRktzLCBsb2FkIGRhdGEsIHRoZW4gcmUtcnVuIHdpdGggb25seT1mb3JlaWduX2tl eQorLS0gdG8gYWRkIHRoZW0gb25jZSBhbGwgdGFyZ2V0cyBleGlzdC4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAnZm9yZWlnbl9rZXknKTsKKwor LS0gb25seT1mb3JlaWduX2tleSBpcyB0aGUgc2Vjb25kIHBhc3Mgb2YgdGhlIHR3by1wYXNzIEZL LWNsb25lCistLSB3b3JrZmxvdzogZW1pdCBvbmx5IHRoZSBBTFRFUiBUQUJMRSAuLi4gQUREIENP TlNUUkFJTlQgLi4uIEZPUkVJR04KKy0tIEtFWSByb3dzOyB0aGUgQ1JFQVRFIFRBQkxFIGFuZCBl dmVyeSBub24tRksgc3ViLW9iamVjdCBhcmUKKy0tIHN1cHByZXNzZWQgKHRoZSB0YWJsZSBhbHJl YWR5IGV4aXN0cyBmcm9tIHRoZSBmaXJzdCBwYXNzKS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ2ZvcmVpZ25fa2V5Jyk7CisKKy0tIEEgdGFibGUg d2l0aCBubyBmb3JlaWduIGtleXMgcHJvZHVjZXMgbm8gcm93cyB1bmRlcgorLS0gb25seT1mb3Jl aWduX2tleS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmVmZCc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5 JywgJ2ZvcmVpZ25fa2V5Jyk7CisKKy0tIG9ubHk9dGFibGUgZW1pdHMgb25seSB0aGUgYmFyZSBD UkVBVEUgVEFCTEUgKHdpdGggYW55IGlubGluZQorLS0gY29sdW1uLWxldmVsIE5PVCBOVUxMIGFu ZCBDSEVDSykgLSBubyBpbmRleGVzLCBubyBQUklNQVJZIEtFWSBBTFRFUiwKKy0tIG5vIG90aGVy IHN1Yi1vYmplY3RzLiAgVXNlZnVsIGZvciBjYXB0dXJpbmcgYSB0YWJsZSdzIHNoYXBlIHdpdGhv dXQKKy0tIHB1bGxpbmcgaW4gZXZlcnl0aGluZyBhdHRhY2hlZCB0byBpdC4KK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3RhYmxlJyk7CisKKy0tIG9u bHk9Y2hlY2sgb24gYSBub24tcGFydGl0aW9uIHRhYmxlLiAgVGhlIGNvbnN0cmFpbnQgbG9vcCBt dXN0IGVtaXQKKy0tIGNvbHVtbi1sZXZlbCBhbmQgdGFibGUtbGV2ZWwgQ0hFQ0sgY29uc3RyYWlu dHMgdmlhIEFMVEVSIFRBQkxFIGhlcmUsCistLSBiZWNhdXNlIHRoZSBpbmxpbmUgcGF0aCBpbiBD UkVBVEUgVEFCTEUgbmV2ZXIgcnVucyAoS0lORF9UQUJMRSBpcworLS0gbm90IGluIHRoZSBmaWx0 ZXIpLgorQ1JFQVRFIFRBQkxFIGNoa19vbmx5ICgKKyAgICBpZCAgaW50IFBSSU1BUlkgS0VZLAor ICAgIHF0eSBpbnQgQ0hFQ0sgKHF0eSA+IDApLAorICAgIENPTlNUUkFJTlQgY2hrX29ubHlfaWRf cG9zIENIRUNLIChpZCA+IDApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdj aGtfb25seSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdvbmx5JywgJ2NoZWNrJyk7CitEUk9QIFRBQkxFIGNoa19vbmx5OworCist LSBvbmx5PXBhcnRpdGlvbiBvbiBhIHBhcnRpdGlvbmVkLXRhYmxlIHBhcmVudDogZWFjaCBjaGls ZCdzIGZ1bGwgRERMCistLSBpcyBlbWl0dGVkIChDUkVBVEUgVEFCTEUgLi4uIFBBUlRJVElPTiBP RiAuLi4pLiAgVGhlICJwYXJ0aXRpb24iCistLSBrZXl3b3JkIGlzIGEgZ2F0ZSBhdCB0aGUgcGFy ZW50IGxldmVsOyBpdCBpcyBzdHJpcHBlZCBmcm9tIHRoZQorLS0gcHJvcGFnYXRlZCBmaWx0ZXIg c28gdGhlIGNoaWxkIGRvZXMgbm90IGV4Y2x1ZGUgaXRzIG93bgorLS0gQ1JFQVRFIFRBQkxFLgor Q1JFQVRFIFRBQkxFIHBfb25seSAoaWQgaW50LCB2YWwgdGV4dCkgUEFSVElUSU9OIEJZIFJBTkdF IChpZCk7CitDUkVBVEUgVEFCTEUgcF9vbmx5X2EgUEFSVElUSU9OIE9GIHBfb25seSBGT1IgVkFM VUVTIEZST00gKDApIFRPICgxMDApOworQ1JFQVRFIFRBQkxFIHBfb25seV9iIFBBUlRJVElPTiBP RiBwX29ubHkgRk9SIFZBTFVFUyBGUk9NICgxMDApIFRPICgyMDApOworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdwX29ubHknOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdwYXJ0aXRpb24nKTsKK0RST1Ag VEFCTEUgcF9vbmx5OworCistLSBvbmx5IGFuZCBleGNlcHQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2 ZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAnb3du ZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ2Zv cmVpZ25fa2V5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ2Zv cmVpZ25fa2V5Jyk7CisKKy0tIFB1Yi9zdWIgc2NoZW1hIGNsb25lOiBrZWVwIHRoZSB0YWJsZSBh bmQgaXRzIHByaW1hcnkga2V5LCBkcm9wIHRoZQorLS0gcmVzdCBvZiB0aGUgY29uc3RyYWludHMg c28gdGhlIHN1YnNjcmliZXIgY2FuIHJlcGxpY2F0ZSB3aXRob3V0CistLSBwdWxsaW5nIGNyb3Nz LXRhYmxlIGRlcGVuZGVuY2llcyBhbG9uZy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnY29ucyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdleGNlcHQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1 bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXksZXhjbHVzaW9uJyk7CisKKy0tIGV4Y2VwdD1ydWxlIGhp ZGVzIHRoZSBDUkVBVEUgUlVMRS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncnQn OjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnZXhjZXB0JywgJ3J1bGUnKTsKKworLS0gZXhjZXB0PXN0YXRpc3RpY3MgaGlkZXMgdGhl IENSRUFURSBTVEFUSVNUSUNTLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzdHgn OjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnZXhjZXB0JywgJ3N0YXRpc3RpY3MnKTsKKworLS0gZXhjZXB0PXJscyBoaWRlcyB0aGUg RU5BQkxFL0ZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWSB0b2dnbGVzLgorU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdybHMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ3JscycpOworCistLSBleGNlcHQ9 cmVwbGljYV9pZGVudGl0eSBoaWRlcyB0aGUgUkVQTElDQSBJREVOVElUWSBjbGF1c2UuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2Z1bGwnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ3JlcGxp Y2FfaWRlbnRpdHknKTsKKworLS0gUGFydGl0aW9uIGNoaWxkcmVuIGFyZSBlbWl0dGVkIGJ5IGRl ZmF1bHQ7IGV4Y2VwdD1wYXJ0aXRpb24KKy0tIHN1cHByZXNzZXMgdGhlbSBzbyBvbmx5IHRoZSBw YXJ0aXRpb25lZC10YWJsZSBwYXJlbnQgY29tZXMgb3V0LgorU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ3BhcnRpdGlvbicpOworCist LSBVbmtub3duIGtpbmQgbmFtZSBpcyByZWplY3RlZCBhdCBvcHRpb24tcGFyc2UgdGltZS4KK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ25vX3N1 Y2hfa2luZCcpOworCistLSBXaGl0ZXNwYWNlIGFyb3VuZCBraW5kIG5hbWVzIGlzIGFsbG93ZWQ7 IGNhc2UgaXMgZm9sZGVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6 cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ2V4Y2VwdCcsICcgIElOREVYICAsICAgUlVMRSAgJyk7CisKKy0tIHNjaGVtYV9xdWFsaWZp ZWQ9ZmFsc2Ugc3RyaXBzIHRoZSBzY2hlbWEgZnJvbSB0aGUgdGFyZ2V0IHRhYmxlIGl0c2VsZgor LS0gYW5kIGZyb20gc2FtZS1zY2hlbWEgc2libGluZyByZWZlcmVuY2VzIChpbmhlcml0YW5jZS9w YXJ0aXRpb24KKy0tIHBhcmVudHMsIGlkZW50aXR5IHNlcXVlbmNlcyBpbiB0aGUgc2FtZSBzY2hl bWEpLCB3aGlsZSBjcm9zcy1zY2hlbWEKKy0tIHJlZmVyZW5jZXMgYXJlIGtlcHQgcXVhbGlmaWVk IGZvciBjb3JyZWN0bmVzcy4KKy0tCistLSBCYXJlIENSRUFURSBUQUJMRSBmb3IgYW4gb3JkaW5h cnkgdGFibGUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xh c3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nj aGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKworLS0gSU5IRVJJVFMgcGFyZW50IGluIHRoZSBz YW1lIHNjaGVtYSBpcyBlbWl0dGVkIHVucXVhbGlmaWVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdjaCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisKKy0tIFBh cnRpdGlvbiBwYXJlbnQgaW4gdGhlIHNhbWUgc2NoZW1hIGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQu CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xh c3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nj aGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKworLS0gQ3Jvc3Mtc2NoZW1hIEZLIHRhcmdldCBr ZWVwcyBxdWFsaWZpY2F0aW9uLiAgVGhlICdyZWZkJyB0YWJsZSBpcyBpbgorLS0gcGd0YmxfZGRs X3Rlc3Q7IHBsYWNlIGFuIEZLIHRhcmdldCBpbiBhIGRpZmZlcmVudCBzY2hlbWEgYW5kIHZlcmlm eSBpdAorLS0gc3RheXMgcXVhbGlmaWVkIGV2ZW4gd2l0aCBzY2hlbWFfcXVhbGlmaWVkPWZhbHNl LgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfb3RoZXI7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X290aGVyLnBhcmVudCAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSB4c2NoZW1h X2ZrICgKKyAgICBpZCAgaW50IFBSSU1BUlkgS0VZLAorICAgIHBpZCBpbnQgUkVGRVJFTkNFUyBw Z3RibF9kZGxfb3RoZXIucGFyZW50CispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCd4c2NoZW1hX2ZrJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKworLS0gQ3Jv c3Mtc2NoZW1hIEZLIHdob3NlIHRhcmdldCBzY2hlbWEgbmFtZSBlbmRzIHdpdGggdGhlIGJhc2Ug c2NoZW1hIG5hbWUKKy0tIChlLmcuICJ4cGd0YmxfZGRsX3Rlc3QiIGVuZHMgd2l0aCAicGd0Ymxf ZGRsX3Rlc3QiKS4gIEEgcG9zdC1ob2MgdGV4dAorLS0gc3RyaXAgd291bGQgbWFuZ2xlICJ4cGd0 YmxfZGRsX3Rlc3QucmVmdGJsIiBpbnRvICJ4cmVmdGJsIjsgZGVjaWRpbmcKKy0tIHF1YWxpZmlj YXRpb24gYXQgZ2VuZXJhdGlvbiB0aW1lIGF2b2lkcyB0aGUgcHJvYmxlbSBlbnRpcmVseS4KK0NS RUFURSBTQ0hFTUEgeHBndGJsX2RkbF90ZXN0OworQ1JFQVRFIFRBQkxFIHhwZ3RibF9kZGxfdGVz dC5yZWZ0YmwgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgc3VmZml4X3NjaGVt YV9mayAoCisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAgICByZWYgaW50IFJFRkVSRU5DRVMg eHBndGJsX2RkbF90ZXN0LnJlZnRibAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnc3VmZml4X3NjaGVtYV9mayc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CitE Uk9QIFRBQkxFIHN1ZmZpeF9zY2hlbWFfZms7CitEUk9QIFNDSEVNQSB4cGd0YmxfZGRsX3Rlc3Qg Q0FTQ0FERTsKKworLS0gSWRlbnRpdHkgY29sdW1uIHdpdGggYSBjdXN0b20gc2VxdWVuY2UgbmFt ZSBpbiB0aGUgc2FtZSBzY2hlbWEgaXMKKy0tIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkX2N1c3RvbSc6OnJlZ2NsYXNzLCAnb3duZXInLCAn ZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVk JywgJ2ZhbHNlJyk7CisKKy0tIFJvdW5kLXRyaXA6IHdpdGggc2NoZW1hX3F1YWxpZmllZD1mYWxz ZSwgYWZ0ZXIgU0VUIHNlYXJjaF9wYXRoIHRoZQorLS0gRERMIGNhbiBiZSByZXBsYXllZCBpbnRv IGEgZGlmZmVyZW50IHRhcmdldCBzY2hlbWEuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9yZXBs YXk7CitETyAkJAorREVDTEFSRQorICAgIHN0bXQgdGV4dDsKK0JFR0lOCisgICAgU0VUIExPQ0FM IHNlYXJjaF9wYXRoID0gcGd0YmxfZGRsX3JlcGxheTsKKyAgICBGT1Igc3RtdCBJTgorICAgICAg ICBTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF90ZXN0LmJhc2lj Jzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn b3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKSBBUyBsaW5lCisgICAgTE9PUAorICAgICAg ICBFWEVDVVRFIHN0bXQ7CisgICAgRU5EIExPT1A7CitFTkQgJCQ7CitTRUxFQ1QgcmVsbmFtZXNw YWNlOjpyZWduYW1lc3BhY2U6OnRleHQsIHJlbG5hbWUKK0ZST00gcGdfY2xhc3MgV0hFUkUgb2lk ID0gJ3BndGJsX2RkbF9yZXBsYXkuYmFzaWMnOjpyZWdjbGFzczsKK0RST1AgU0NIRU1BIHBndGJs X2RkbF9yZXBsYXkgQ0FTQ0FERTsKK0RST1AgVEFCTEUgeHNjaGVtYV9mazsKK0RST1AgU0NIRU1B IHBndGJsX2RkbF9vdGhlciBDQVNDQURFOworCistLSBMb2NhbGx5LWRlY2xhcmVkIENIRUNLIG9u IGEgcGFydGl0aW9uIGNoaWxkIGhhcyBubyBpbmxpbmUgY29sdW1uCistLSBsaXN0IHRvIGxpdmUg aW4gKFBBUlRJVElPTiBPRiBmb3JtKSwgc28gaXQgbXVzdCBjb21lIG91dCBhcyBhCistLSBzZXBh cmF0ZSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgc3RhdGVtZW50LgorQ1JFQVRFIFRB QkxFIHBhcnRlZF9jaGsgKGlkIGludCwgdmFsIGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7 CitDUkVBVEUgVEFCTEUgcGFydGVkX2Noa19jaGlsZCBQQVJUSVRJT04gT0YgcGFydGVkX2Noawor ICAgIChDT05TVFJBSU5UIGNoa19pbmxpbmUgQ0hFQ0sgKHZhbCA+IDApKQorICAgIEZPUiBWQUxV RVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Bh cnRlZF9jaGtfY2hpbGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CitEUk9QIFRBQkxF IHBhcnRlZF9jaGs7CisKKy0tIEluaGVyaXRhbmNlIGNoaWxkcmVuIG9mIGEgcGFyZW50IHdpdGgg YSBnZW5lcmF0ZWQgY29sdW1uIHNob3VsZCBub3QKKy0tIGVtaXQgYW4gQUxURVIgQ09MVU1OIC4u LiBTRVQgREVGQVVMVCBmb3IgdGhlIGluaGVyaXRlZCBnZW5lcmF0ZWQKKy0tIGNvbHVtbjogdGhl IEdFTkVSQVRFRCBleHByZXNzaW9uIGNhcnJpZXMgZG93biB0aHJvdWdoIGluaGVyaXRhbmNlLAor LS0gYW5kIFNFVCBERUZBVUxUIHdvdWxkIGZhaWwgYXQgcmVwbGF5IGFnYWluc3QgYSBnZW5lcmF0 ZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIHBhcl9nZW4gKAorICAgIGlkIGludCwKKyAgICBnICBp bnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoaWQgKiAyKSBTVE9SRUQKKyk7CitDUkVBVEUgVEFCTEUg Y2hfZ2VuICgpIElOSEVSSVRTIChwYXJfZ2VuKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnY2hfZ2VuJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworRFJPUCBUQUJMRSBw YXJfZ2VuIENBU0NBREU7CisKKy0tIEEgdXNlci1uYW1lZCBOT1QgTlVMTCBvbiBhIGxvY2FsIGNv bHVtbiBpcyBlbWl0dGVkIGlubGluZSBhcworLS0gIkNPTlNUUkFJTlQgbmFtZSBOT1QgTlVMTCIg c28gdGhlIG9yaWdpbmFsIG5hbWUgaXMgcHJlc2VydmVkLiAgQW4KKy0tIGF1dG8tbmFtZWQgTk9U IE5VTEwgb24gYSBsb2NhbCBjb2x1bW4gaXMgZW1pdHRlZCBhcyBhIHBsYWluIGlubGluZQorLS0g Ik5PVCBOVUxMIiAtIFBHIHJlLWNyZWF0ZXMgdGhlIGF1dG8tbmFtZWQgY29uc3RyYWludCB3aGVu IENSRUFURQorLS0gVEFCTEUgcnVucywgc28gdGhlIGNvbnN0cmFpbnQgbG9vcCBza2lwcyBib3Ro IGZvcm1zIHRvIGF2b2lkIHRoZQorLS0gcmVkdW5kYW50IChhbmQgb24gdGFibGUtcmVuYW1lIG9y IHNlcXVlbmNlLWNvbGxpc2lvbiwgYnJva2VuKQorLS0gQUxURVIgVEFCTEUgLi4uIEFERCBDT05T VFJBSU5UIC4uLiBOT1QgTlVMTCBzdGF0ZW1lbnQuCitDUkVBVEUgVEFCTEUgbm5fbmFtZWQgKAor ICAgIGEgaW50IENPTlNUUkFJTlQgbXlfbm4gTk9UIE5VTEwsCisgICAgYiBpbnQgTk9UIE5VTEwK Kyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX25hbWVkJzo6cmVnY2xhc3Ms ICdvd25lcicsICdmYWxzZScpOworRFJPUCBUQUJMRSBubl9uYW1lZDsKKworLS0gUmVuYW1pbmcg dGhlIHRhYmxlIGFmdGVyIGFuIElERU5USVRZIE5PVCBOVUxMIGNvbHVtbiB3YXMgZGVjbGFyZWQK Ky0tIGxlYXZlcyB0aGUgYXV0by1uYW1lZCBjb25zdHJhaW50IGZyb3plbiBhdCB0aGUgb3JpZ2lu YWwgbmFtZSwgd2hpY2gKKy0tIG5vIGxvbmdlciBtYXRjaGVzIHRoZSBwb3N0LXJlbmFtZSAiPHRh YmxlPl88Y29sPl9ub3RfbnVsbCIgcGF0dGVybi4KKy0tIFRoZSBlbWl0dGVkIERETCBtdXN0IHN0 aWxsIHJvdW5kLXRyaXA6IHRoZSBjb25zdHJhaW50IGxvb3AgbXVzdCBub3QKKy0tIEFMVEVSIFRB QkxFIC4uLiBBREQgQ09OU1RSQUlOVCBhIHNlY29uZCBOT1QgTlVMTCwgc2luY2UgQ1JFQVRFIFRB QkxFCistLSB3aXRoIHRoZSBpbmxpbmUgSURFTlRJVFkgYWxyZWFkeSBjcmVhdGVzIGFuIGF1dG8t Tk9ULU5VTEwgdW5kZXIgdGhlCistLSBuZXcgdGFibGUgbmFtZSBhbmQgUEcgb25seSBwZXJtaXRz IG9uZSBOT1QgTlVMTCBwZXIgY29sdW1uLgorQ1JFQVRFIFRBQkxFIG5uX3JlbmFtZWQgKAorICAg IGEgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgTk9UIE5VTEwKKyk7CitBTFRFUiBU QUJMRSBubl9yZW5hbWVkIFJFTkFNRSBUTyBubl9yZW5hbWVkMjsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnbm5fcmVuYW1lZDInOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7 CitEUk9QIFRBQkxFIG5uX3JlbmFtZWQyOworCistLSBMb2NhbGx5LWRlY2xhcmVkIE5PVCBOVUxM IG9uIGFuIGluaGVyaXRlZCBjb2x1bW4uICBUaGUgY29sdW1uIGl0c2VsZgorLS0gaXMgb21pdHRl ZCBmcm9tIHRoZSBjaGlsZCdzIGNvbHVtbiBsaXN0IChhdHRpc2xvY2FsPWZhbHNlKSwgc28gdGhl CistLSB1c2VyLW5hbWVkIE5PVCBOVUxMIG11c3QgY29tZSBvdXQgdmlhIHRoZSBwb3N0LUNSRUFU RSBjb25zdHJhaW50CistLSBsb29wIHJhdGhlciB0aGFuIGlubGluZS4KK0NSRUFURSBUQUJMRSBu bl9wYXIgKGEgaW50KTsKK0NSRUFURSBUQUJMRSBubl9jaCAoYiBpbnQpIElOSEVSSVRTIChubl9w YXIpOworQUxURVIgVEFCTEUgbm5fY2ggQUREIENPTlNUUkFJTlQgbXlfbm4gTk9UIE5VTEwgYTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5fY2gnOjpyZWdjbGFzcywgJ293bmVy JywgJ2ZhbHNlJyk7CitEUk9QIFRBQkxFIG5uX3BhciBDQVNDQURFOworCistLSBzY2hlbWFfcXVh bGlmaWVkPWZhbHNlIG11c3QgZHJvcCB0aGUgc2NoZW1hIHByZWZpeCBmcm9tIERFRkFVTFQKKy0t IGV4cHJlc3Npb25zIGFuZCBpbmxpbmUgQ0hFQ0sgYm9kaWVzIHRoYXQgcmVmZXJlbmNlIHNhbWUt c2NoZW1hCistLSBvYmplY3RzIChzZXF1ZW5jZSB2aWEgbmV4dHZhbCwgZnVuY3Rpb24gdmlhIGRp cmVjdCBjYWxsKS4gIFRoaXMKKy0tIHJlbGllcyBvbiB0aGUgZGVwYXJzZXIgcmVzcGVjdGluZyB0 aGUgbmFycm93ZWQgc2VhcmNoX3BhdGggcmF0aGVyCistLSB0aGFuIG9uIHN1YnN0cmluZyBzdHJp cHBpbmcuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF94cmVmOworQ1JFQVRFIFNFUVVFTkNFIHBn dGJsX2RkbF94cmVmLm15c2VxOworQ1JFQVRFIEZVTkNUSU9OIHBndGJsX2RkbF94cmVmLmYoaW50 KSBSRVRVUk5TIGludCBMQU5HVUFHRSBzcWwgSU1NVVRBQkxFCisgICAgQVMgJ1NFTEVDVCAkMSc7 CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3hyZWYudCAoCisgICAgaWQgIGludCBERUZBVUxUIG5l eHR2YWwoJ3BndGJsX2RkbF94cmVmLm15c2VxJyksCisgICAgdmFsIGludCwKKyAgICBDT05TVFJB SU5UIGNoayBDSEVDSyAocGd0YmxfZGRsX3hyZWYuZih2YWwpID4gMCkKKyk7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF94cmVmLnQnOjpyZWdjbGFzcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CitEUk9QIFND SEVNQSBwZ3RibF9kZGxfeHJlZiBDQVNDQURFOworCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNl IG11c3QgTk9UIGNvcnJ1cHQgc3RyaW5nIGxpdGVyYWxzIHdob3NlCistLSBjb250ZW50cyBoYXBw ZW4gdG8gY29udGFpbiB0aGUgc2NoZW1hIG5hbWUgZm9sbG93ZWQgYnkgYSBkb3QuICBUaGUKKy0t IGluLXN0cmluZyBzdGF0ZSBvZiB0aGUgcHJlZml4IHN0cmlwcGVyIHByZXNlcnZlcyB0aGVtIHZl cmJhdGltLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfc3RyOworQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF9zdHIucCAoaWQgaW50LCBub3RlIHRleHQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOwor Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF9zdHIucGMgUEFSVElUSU9OIE9GIHBndGJsX2RkbF9zdHIu cAorICAgIChDT05TVFJBSU5UIGNoayBDSEVDSyAobm90ZSA8PiAncGd0YmxfZGRsX3N0ci5zZWNy ZXQnKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfc3RyLnBjJzo6cmVnY2xhc3MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworRFJPUCBTQ0hFTUEg cGd0YmxfZGRsX3N0ciBDQVNDQURFOworCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIG11c3Qg Tk9UIGNvcnJ1cHQgZG91YmxlLXF1b3RlZCBpZGVudGlmaWVycworLS0gd2hvc2UgY29udGVudHMg aGFwcGVuIHRvIGNvbnRhaW4gdGhlIHNjaGVtYSBuYW1lIGZvbGxvd2VkIGJ5IGEgZG90CistLSAo Zm9yIGV4YW1wbGUgYSBjb2x1bW4gbGl0ZXJhbGx5IG5hbWVkICI8c2NoZW1hPi53ZWlyZCIgaW5z aWRlIHRoYXQKKy0tIHNjaGVtYSkuICBUaGUgaW4taWRlbnQgc3RhdGUgb2YgdGhlIHByZWZpeCBz dHJpcHBlciBwcmVzZXJ2ZXMgdGhlbQorLS0gdmVyYmF0aW0uCitDUkVBVEUgU0NIRU1BIHBndGJs X2RkbF9xaWQ7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3FpZC5wIChpZCBpbnQsICJwZ3RibF9k ZGxfcWlkLndlaXJkIiBpbnQpCisgICAgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUg VEFCTEUgcGd0YmxfZGRsX3FpZC5wYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3FpZC5wCisgICAg KENPTlNUUkFJTlQgY2hrIENIRUNLICgicGd0YmxfZGRsX3FpZC53ZWlyZCIgPiAwKSkKKyAgICBG T1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdwZ3RibF9kZGxfcWlkLnBjJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3Fp ZCBDQVNDQURFOworCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIHdoZW4gdGhlIGJhc2Ugc2No ZW1hIG5hbWUgaXRzZWxmIHJlcXVpcmVzCistLSBxdW90aW5nIChpdHMgcHJlZml4IHN0YXJ0cyB3 aXRoICIpLiAgQm90aCBmb3JtcyBvZiB0aGUgcHJlZml4IC0KKy0tIGJhcmUtbG93ZXJjYXNlIGFu ZCBxdW90ZWQgLSBtdXN0IGJlIHN0cmlwcGVkIGZyb20gb3V0ZXIKKy0tIEFMVEVSIFRBQkxFIC8g T04gLyBDUkVBVEUgSU5ERVggcHJlZml4ZXMsIHdoaWxlIGlubmVyIHF1b3RlZAorLS0gaWRlbnRp ZmllcnMgdGhhdCBoYXBwZW4gdG8gYmVnaW4gdGhlIHNhbWUgd2F5IG11c3QgYmUgcHJlc2VydmVk LgorQ1JFQVRFIFNDSEVNQSAiUGdUYmwtRGRsLVEiOworQ1JFQVRFIFRBQkxFICJQZ1RibC1EZGwt USIuIlQiIChpZCBpbnQsIHZhbCBpbnQsCisgICAgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKHZhbCA+ IDApKTsKK0NSRUFURSBJTkRFWCAiVF92YWxfaWR4IiBPTiAiUGdUYmwtRGRsLVEiLiJUIiAodmFs KTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnIlBnVGJsLURkbC1RIi4iVCInOjpy ZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2Un LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2Zh bHNlJyk7CitEUk9QIFNDSEVNQSAiUGdUYmwtRGRsLVEiIENBU0NBREU7CisKKy0tIEVycm9yOiBu b3QgYW4gb3JkaW5hcnkgb3IgcGFydGl0aW9uZWQgdGFibGUuCitDUkVBVEUgVklFVyB2IEFTIFNF TEVDVCAxIEFTIHg7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3YnOjpyZWdjbGFz cyk7CisKK0NSRUFURSBTRVFVRU5DRSBzOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdzJzo6cmVnY2xhc3MpOworCistLSBOVUxMIGFyZ3VtZW50IHJldHVybnMgbm8gcm93cy4KK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbChOVUxMKTsKKworLS0gVW5yZWNvZ25pemVkIG9w dGlvbi4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywg J2JvZ3VzJywgJ3RydWUnKTsKKworLS0gT2RkIG51bWJlciBvZiB2YXJpYWRpYyBhcmdzLgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAncHJldHR5Jyk7 CisKKy0tIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdmFsaWRhdGlvbjogaWYgdGhlIHJl ZmVyZW5jZWQgaW5kZXgKKy0tIHdvdWxkIG5vdCBiZSBlbWl0dGVkIChiZWNhdXNlIGl0cyBzb3Vy Y2Uga2luZCBpcyBzdXBwcmVzc2VkKSBidXQKKy0tIHJlcGxpY2FfaWRlbnRpdHkgaXRzZWxmIHdv dWxkIGJlLCB0aGUgZnVuY3Rpb24gcmFpc2VzIGFuIGVycm9yIHNvCistLSB0aGUgZW1pdHRlZCBE REwgbmV2ZXIgZGFuZ2xlcy4gIEV4ZXJjaXNlIGFsbCB0aHJlZSBjb25zdHJhaW50LWJhY2tlZAor LS0gZm9ybXMgKFBLLCBVTklRVUUsIEVYQ0xVU0lPTikgYW5kIGEgYmFyZSBDUkVBVEUgVU5JUVVF IElOREVYLCBpbgorLS0gYm90aCB0aGUgZXhjZXB0LWxpc3QgYW5kIG9ubHktbGlzdCBzaGFwZXMu CistLQorLS0gUEstYmFja2VkOiBleGNlcHQ9cHJpbWFyeV9rZXkgd2l0aG91dCBleGNlcHQ9cmVw bGljYV9pZGVudGl0eS4KK0NSRUFURSBUQUJMRSByaV9wa19leGNsIChhIGludCBQUklNQVJZIEtF WSk7CitBTFRFUiBUQUJMRSByaV9wa19leGNsIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVgg cmlfcGtfZXhjbF9wa2V5OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9wa19l eGNsJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ2V4Y2VwdCcsICdwcmltYXJ5X2tleScpOworLS0gU2FtZSBjYWxsIGJ1dCBhbHNv IGV4Y2x1ZGluZyByZXBsaWNhX2lkZW50aXR5IHN1Y2NlZWRzLgorU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdyaV9wa19leGNsJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdwcmltYXJ5X2tleSxyZXBs aWNhX2lkZW50aXR5Jyk7CitEUk9QIFRBQkxFIHJpX3BrX2V4Y2w7CisKKy0tIFVOSVFVRS1jb25z dHJhaW50LWJhY2tlZCByZXBsaWNhIGlkZW50aXR5IGluZGV4LgorQ1JFQVRFIFRBQkxFIHJpX3Vu aXFfZXhjbCAoYSBpbnQgTk9UIE5VTEwgVU5JUVVFLCBiIGludCk7CitBTFRFUiBUQUJMRSByaV91 bmlxX2V4Y2wgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV91bmlxX2V4Y2xfYV9rZXk7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3VuaXFfZXhjbCc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNl cHQnLCAndW5pcXVlJyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3VuaXFf ZXhjbCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdleGNlcHQnLCAndW5pcXVlLHJlcGxpY2FfaWRlbnRpdHknKTsKK0RST1AgVEFC TEUgcmlfdW5pcV9leGNsOworCistLSBCYXJlIENSRUFURSBVTklRVUUgSU5ERVggKG5vIGJhY2tp bmcgY29uc3RyYWludCkgdXNlZCBhcyBSRVBMSUNBCistLSBJREVOVElUWTogdGhlIGluZGV4IGlz IGVtaXR0ZWQgYnkgdGhlICJpbmRleCIga2luZCwgc28gZXhjbHVkaW5nCistLSAiaW5kZXgiIHdp dGhvdXQgYWxzbyBleGNsdWRpbmcgInJlcGxpY2FfaWRlbnRpdHkiIG11c3QgZXJyb3IuCitDUkVB VEUgVEFCTEUgcmlfaWR4X2V4Y2wgKGEgaW50IE5PVCBOVUxMLCBiIGludCk7CitDUkVBVEUgVU5J UVVFIElOREVYIHJpX2lkeF9leGNsX2FfdW5pcSBPTiByaV9pZHhfZXhjbCAoYSk7CitBTFRFUiBU QUJMRSByaV9pZHhfZXhjbCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJpX2lkeF9leGNs X2FfdW5pcTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4X2V4Y2wnOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnZXhjZXB0JywgJ2luZGV4Jyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jp X2lkeF9leGNsJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdpbmRleCxyZXBsaWNhX2lkZW50aXR5Jyk7CitEUk9Q IFRBQkxFIHJpX2lkeF9leGNsOworCistLSBJbmNsdWRlLXNpZGUgYW5hbG9nOiBvbmx5PXJlcGxp Y2FfaWRlbnRpdHkgbXVzdCBpbmNsdWRlIHRoZSBraW5kCistLSB0aGF0IGVtaXRzIHRoZSBpbmRl eCwgb3IgdGhlIGZ1bmN0aW9uIGVycm9ycy4KK0NSRUFURSBUQUJMRSByaV9vbmx5IChhIGludCBO T1QgTlVMTCBVTklRVUUsIGIgaW50KTsKK0FMVEVSIFRBQkxFIHJpX29ubHkgUkVQTElDQSBJREVO VElUWSBVU0lORyBJTkRFWCByaV9vbmx5X2Ffa2V5OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdyaV9vbmx5Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAncmVwbGljYV9pZGVudGl0eScpOworLS0gSW5j bHVkaW5nIGJvdGgga2luZHMgc3VjY2VlZHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3JpX29ubHknOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnb25seScsICd1bmlxdWUscmVwbGljYV9pZGVudGl0eScpOworRFJP UCBUQUJMRSByaV9vbmx5OworCistLSBQZXIta2luZCBvbmx5IC8gZXhjZXB0IGNvdmVyYWdlLiAg Rm9yIGVhY2gga2luZCBpbiB0aGUgdm9jYWJ1bGFyeSwKKy0tIHZlcmlmeSB0aGF0IG9ubHk9SyBl bWl0cyBqdXN0IHRoYXQga2luZCdzIG91dHB1dCBhbmQgdGhhdCBleGNlcHQ9SworLS0gb21pdHMg anVzdCB0aGF0IGtpbmQncyBvdXRwdXQuICBLaW5kcyB3aXRoIG5vIGZpeHR1cmUgYWJvdmUgKHRy aWdnZXIsCistLSBwb2xpY3kpIGFyZSBzdGlsbCByZWNvZ25pemVkIGJ1dCBjdXJyZW50bHkgZW1p dCBub3RoaW5nOyBvbmx5PUsKKy0tIHJldHVybnMgemVybyByb3dzIGZvciB0aGVtLiAgRml4dHVy ZXMgdXNlZDoKKy0tICAgaWR4ZDogUEsgKyB0d28gc2Vjb25kYXJ5IENSRUFURSBJTkRFWAorLS0g ICBjb25zOiBQSyArIFVOSVFVRSArIENIRUNLICsgRksgKGNvbnN0cmFpbnQtYmFja2VkKQorLS0g ICBydDogICBDUkVBVEUgUlVMRQorLS0gICBzdHg6ICBDUkVBVEUgU1RBVElTVElDUworLS0gICBy bHM6ICBFTkFCTEUvRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZCistLSAgIHJpX2Z1bGw6IFJFUExJ Q0EgSURFTlRJVFkgRlVMTCAobm8gc291cmNlLWtpbmQgZGVwZW5kZW5jeSkKK0NSRUFURSBUQUJM RSBleGNsX2ZpeCAocm5nIGludDRyYW5nZSwKKyAgICBFWENMVURFIFVTSU5HIGdpc3QgKHJuZyBX SVRIICYmKSk7CisKKy0tIG9ubHk9SzogZW1pdCBvbmx5IGtpbmQgSydzIHN0YXRlbWVudHMuCitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdpbmRleCcp OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25l cicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAncHJp bWFyeV9rZXknKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2Ns YXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdv bmx5JywgJ3VuaXF1ZScpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdleGNsX2Zp eCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdvbmx5JywgJ2V4Y2x1c2lvbicpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdydCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdvbmx5JywgJ3J1bGUnKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnc3R4Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ29ubHknLCAnc3RhdGlzdGljcycpOworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdybHMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdybHMnKTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncmlfZnVsbCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3JlcGxpY2FfaWRlbnRpdHknKTsK Ky0tIHRyaWdnZXIgLyBwb2xpY3kgYXJlIHNjYWZmb2xkZWQgYnV0IG5vdCB5ZXQgZW1pdHRpbmc7 IG9ubHk9SyBpcyBhCistLSB2YWxpZCBmaWx0ZXIgdGhhdCBwcm9kdWNlcyB6ZXJvIHJvd3MuICBX aGVuIHRoZSBzdGFuZGFsb25lCistLSBwZ19nZXRfdHJpZ2dlcl9kZGwgLyBwZ19nZXRfcG9saWN5 X2RkbCBoZWxwZXJzIGxhbmQsIHRoZXNlIHF1ZXJpZXMKKy0tIHN0YXJ0IHJldHVybmluZyByb3dz IHdpdGhvdXQgYW4gQVBJIGNoYW5nZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn YmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnb25seScsICd0cmlnZ2VyJyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ29ubHknLCAncG9saWN5Jyk7CisKKy0tIGV4Y2VwdD1LOiBlbWl0 IGV2ZXJ5dGhpbmcgZXhjZXB0IGtpbmQgSydzIHN0YXRlbWVudHMuICBQSy9VTklRVUUvCistLSBJ TkRFWCBhcmUgZXhlcmNpc2VkIG9uIHRhYmxlcyB3aXRob3V0IFJFUExJQ0EgSURFTlRJVFkgVVNJ TkcgSU5ERVgKKy0tIHNvIHRoZSB2YWxpZGF0aW9uIGRvZXMgbm90IHRyaXAuCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ3ByaW1hcnlfa2V5Jyk7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293bmVy JywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ3Vu aXF1ZScpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3Ms ICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2Vw dCcsICdjaGVjaycpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdleGNsX2ZpeCc6 OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdleGNlcHQnLCAnZXhjbHVzaW9uJyk7CistLSBleGNlcHQ9dGFibGUgc3VwcHJlc3NlcyB0 aGUgQ1JFQVRFIFRBQkxFICsgT1dORVIgKyBjaGlsZC1kZWZhdWx0CistLSBTRVQgREVGQVVMVCAr IGF0dG9wdGlvbnMgcGFzc2VzLCBsZWF2aW5nIG9ubHkgdGhlIHN1Yi1vYmplY3QgcGFzc2VzLgor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICd0YWJs ZScpOworCistLSBNdWx0aS1raW5kIGNvbXBvc2l0aW9ucy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3RhYmxlLGluZGV4Jyk7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdwcmltYXJ5X2tleSxmb3Jl aWduX2tleScpOworLS0gRHVwbGljYXRlIGVudHJpZXMgaW4gdGhlIGxpc3QgYXJlIHNpbGVudGx5 IGRlLWR1cGxpY2F0ZWQgYnkgdGhlCistLSBCaXRtYXBzZXQuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdpbmRleCxpbmRleCcpOworCitEUk9QIFRB QkxFIGV4Y2xfZml4OworCistLSBvbmx5PUsgb24gYSB0YWJsZSB0aGF0IGRvZXMgbm90IGhhdmUg YW55IEsgb2YgdGhhdCBraW5kIGlzIGEgdmFsaWQKKy0tIGZpbHRlciBhbmQgcmV0dXJucyB6ZXJv IHJvd3MuICBUZXN0ZWQgcHJldmlvdXNseSB3aXRoIGZvcmVpZ25fa2V5CistLSBvbiAncmVmZCc7 IGhlcmUgYWxzbyBydWxlLCBzdGF0aXN0aWNzLCBybHMsIHJlcGxpY2FfaWRlbnRpdHksIGFuZAor LS0gZXhjbHVzaW9uIG9uICdiYXNpYycgKHdoaWNoIGhhcyBvbmx5IFBLICsgY29sdW1ucykuCitT RUxFQ1QgY291bnQoKikgQVMgcnVsZV9yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFz aWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAg ICdvbmx5JywgJ3J1bGUnKTsKK1NFTEVDVCBjb3VudCgqKSBBUyBzdGF0c19yb3dzCisgIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAg ICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3N0YXRpc3RpY3MnKTsKK1NFTEVDVCBjb3Vu dCgqKSBBUyBybHNfcm93cworICBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xh c3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdy bHMnKTsKK1NFTEVDVCBjb3VudCgqKSBBUyByaV9yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAg ICAgICAgICdvbmx5JywgJ3JlcGxpY2FfaWRlbnRpdHknKTsKK1NFTEVDVCBjb3VudCgqKSBBUyBl eGNsX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb3du ZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAnZXhjbHVzaW9u Jyk7CisKKy0tIElucHV0LXZhbGlkYXRpb24gZWRnZSBjYXNlcyBmb3IgdGhlIGNvbW1hLXNlcGFy YXRlZCBraW5kIGxpc3QuICBBbGwKKy0tIG9mIHRoZXNlIHJhaXNlIGFuIGVycm9yIGF0IHRoZSB2 YXJpYWRpYy1wYXJzZSBzdGVwOyB0aGUgZnVuY3Rpb24KKy0tIG5ldmVyIHJlYWNoZXMgcmVsYXRp b24gb3Blbi4KKy0tIEVtcHR5IGxpc3Q6CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2Jhc2ljJzo6cmVnY2xhc3MsICdvbmx5JywgJycpOworLS0gV2hpdGVzcGFjZS1vbmx5IGxpc3Q6 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvbmx5 JywgJyAgICcpOworLS0gVHJhaWxpbmcgY29tbWE6CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvbmx5JywgJ2luZGV4LCcpOworLS0gTGVhZGluZyBj b21tYToKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywg J29ubHknLCAnLGluZGV4Jyk7CistLSBDb25zZWN1dGl2ZSBjb21tYXM6CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvbmx5JywgJ2luZGV4LCxydWxl Jyk7CistLSBUb2tlbiBjb250YWluaW5nIGlubmVyIHdoaXRlc3BhY2U6CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvbmx5JywgJ2ZvcmVpZ24ga2V5 Jyk7CistLSBOVUxMIHZhbHVlIGZvciBhIG5vbi1OVUxMIG9wdGlvbjoKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ29ubHknLCBOVUxMKTsKKy0tIE9w dGlvbiBzcGVjaWZpZWQgdHdpY2UgYXMgc2VwYXJhdGUgbmFtZS92YWx1ZSBwYWlyczoKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnb25seScsICdpbmRleCcsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ29ubHknLCAncnVsZScpOworLS0gU2FtZSBraW5kIHNwZWNpZmllZCB0aHJv dWdoIGJvdGggb3B0aW9ucyBpcyBzdGlsbCBtdXRleC1yZWplY3RlZC4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnb25seScsICdpbmRleCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ2V4Y2VwdCcsICdydWxlJyk7CisKKy0tIFJvdW5kLXRyaXAgdmVyaWZpY2F0aW9uLiAgRm9y IGV2ZXJ5IHRlc3QgdGFibGUsIGNhcHR1cmUgdGhlIERETCB0aGUKKy0tIGZ1bmN0aW9uIGVtaXRz LCBkcm9wIHRoZSBzY2hlbWEsIHJlcGxheSBlYWNoIHRhYmxlJ3MgRERMIGluCistLSBkZXBlbmRl bmN5IG9yZGVyLCBhbmQgY29uZmlybSB0aGF0IHBnX2dldF90YWJsZV9kZGwgb24gdGhlIHJlY3Jl YXRlZAorLS0gcmVsYXRpb24gbWF0Y2hlcyB0aGUgb3JpZ2luYWwgbGluZS1mb3ItbGluZS4gIFRo ZSBmaW5hbCBTRUxFQ1QgbXVzdAorLS0gcmV0dXJuIHplcm8gcm93cy4KK0NSRUFURSBURU1QIFRB QkxFIHBndGJsX2RkbF9ydF9vcmlnIChuYW1lIHRleHQsIG9yZCBpbnQsIGxpbmUgdGV4dCk7CitJ TlNFUlQgSU5UTyBwZ3RibF9kZGxfcnRfb3JpZworU0VMRUNUIHQubmFtZSwgby5vcmQsIG8ubGlu ZQorRlJPTSAoVkFMVUVTCisgICAgICAgICgnYmFzaWMnKSwgKCdpZF9jb2xzJyksICgnaWRfY3Vz dG9tJyksICgnZ2VuX2NvbHMnKSwgKCdnZW5fdmlydHVhbCcpLCAoJ3N0b3JhZ2VfY29scycpLAor ICAgICAgICAoJ3JlZmQnKSwgKCdjb25zJyksICgnaWR4ZCcpLAorICAgICAgICAoJ3BhcicpLCAo J2NoJyksICgnYXR0b3B0JyksCisgICAgICAgICgncGFydGVkX3JhbmdlJyksICgncGFydGVkX3Jh bmdlXzEnKSwgKCdwYXJ0ZWRfcmFuZ2VfZGVmJyksCisgICAgICAgICgncGFydGVkX2hhc2gnKSwg KCdwYXJ0ZWRfaGFzaF8wJyksCisgICAgICAgICgncGFydGVkX2xpc3QnKSwKKyAgICAgICAgKCdy dF9sb2cnKSwgKCdydCcpLAorICAgICAgICAoJ3N0eCcpLCAoJ3JscycpLCAoJ3JpX2Z1bGwnKSwg KCdyaV9pZHgnKSwgKCd1bm8nKQorICAgICApIEFTIHQobmFtZSksCisgICAgIExBVEVSQUwgcGdf Z2V0X3RhYmxlX2RkbCgoJ3BndGJsX2RkbF90ZXN0LicgfHwgdC5uYW1lKTo6cmVnY2xhc3MsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnKSBXSVRIIE9SRElO QUxJVFkgbyhsaW5lLCBvcmQpOworCitETyAkJAorREVDTEFSRQorICAgIHRhYmxlcyBDT05TVEFO VCB0ZXh0W10gOj0gQVJSQVlbCisgICAgICAgICdiYXNpYycsICdpZF9jb2xzJywgJ2lkX2N1c3Rv bScsICdnZW5fY29scycsICdnZW5fdmlydHVhbCcsICdzdG9yYWdlX2NvbHMnLAorICAgICAgICAn cmVmZCcsICdjb25zJywgJ2lkeGQnLAorICAgICAgICAncGFyJywgJ2NoJywgJ2F0dG9wdCcsCisg ICAgICAgICdwYXJ0ZWRfcmFuZ2UnLCAncGFydGVkX3JhbmdlXzEnLCAncGFydGVkX3JhbmdlX2Rl ZicsCisgICAgICAgICdwYXJ0ZWRfaGFzaCcsICdwYXJ0ZWRfaGFzaF8wJywKKyAgICAgICAgJ3Bh cnRlZF9saXN0JywKKyAgICAgICAgJ3J0X2xvZycsICdydCcsCisgICAgICAgICdzdHgnLCAncmxz JywgJ3JpX2Z1bGwnLCAncmlfaWR4JywgJ3VubycKKyAgICBdOworICAgIHQgdGV4dDsKKyAgICBz dG10IHRleHQ7CitCRUdJTgorICAgIERST1AgU0NIRU1BIHBndGJsX2RkbF90ZXN0IENBU0NBREU7 CisgICAgQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfdGVzdDsKKyAgICBGT1JFQUNIIHQgSU4gQVJS QVkgdGFibGVzIExPT1AKKyAgICAgICAgRk9SIHN0bXQgSU4KKyAgICAgICAgICAgIFNFTEVDVCBs aW5lIEZST00gcGd0YmxfZGRsX3J0X29yaWcgV0hFUkUgbmFtZSA9IHQgT1JERVIgQlkgb3JkCisg ICAgICAgIExPT1AKKyAgICAgICAgICAgIEVYRUNVVEUgc3RtdDsKKyAgICAgICAgRU5EIExPT1A7 CisgICAgRU5EIExPT1A7CitFTkQgJCQ7CisKK1dJVEggYWZ0ZXJfZGRsIEFTICgKKyAgICBTRUxF Q1QgdC5uYW1lLCBvLm9yZCwgby5saW5lCisgICAgRlJPTSAoU0VMRUNUIERJU1RJTkNUIG5hbWUg RlJPTSBwZ3RibF9kZGxfcnRfb3JpZykgQVMgdCwKKyAgICAgICAgIExBVEVSQUwgcGdfZ2V0X3Rh YmxlX2RkbCgoJ3BndGJsX2RkbF90ZXN0LicgfHwgdC5uYW1lKTo6cmVnY2xhc3MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJykgV0lUSCBPUkRJTkFM SVRZIG8obGluZSwgb3JkKQorKQorKFNFTEVDVCAnbWlzc2luZy1pbi1jb3B5JyBBUyBraW5kLCBu YW1lLCBvcmQsIGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZworIEVYQ0VQVAorIFNFTEVDVCAn bWlzc2luZy1pbi1jb3B5JywgbmFtZSwgb3JkLCBsaW5lIEZST00gYWZ0ZXJfZGRsKQorVU5JT04g QUxMCisoU0VMRUNUICdleHRyYS1pbi1jb3B5JyBBUyBraW5kLCBuYW1lLCBvcmQsIGxpbmUgRlJP TSBhZnRlcl9kZGwKKyBFWENFUFQKKyBTRUxFQ1QgJ2V4dHJhLWluLWNvcHknLCBuYW1lLCBvcmQs IGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZykKK09SREVSIEJZIGtpbmQsIG5hbWUsIG9yZDsK KworLS0gQ2xlYW51cC4KK0RST1AgU0NIRU1BIHBndGJsX2RkbF90ZXN0IENBU0NBREU7CmRpZmYg LS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGM1ZGI2Y2E2NzA1Li4zZGM5M2Y1NDY4YyAxMDA2NDQK LS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2NDUsNiArMTY0NSw3IEBAIExpc3RlbmVyRW50cnkK IExvSW5mbwogTG9hZFN0bXQKIExvY2FsQnVmZmVyTG9va3VwRW50CitMb2NhbE5vdE51bGxFbnRy eQogTG9jYWxQZ0JhY2tlbmRTdGF0dXMKIExvY2FsVHJhbnNhY3Rpb25JZAogTG9jYXRpb24KQEAg LTMxNTAsNiArMzE1MSw3IEBAIFRhYmxlRnVuY1NjYW4KIFRhYmxlRnVuY1NjYW5TdGF0ZQogVGFi bGVGdW5jVHlwZQogVGFibGVJbmZvCitUYWJsZURkbENvbnRleHQKIFRhYmxlTGlrZUNsYXVzZQog VGFibGVTYW1wbGVDbGF1c2UKIFRhYmxlU2NhbkRlc2MKLS0gCjIuNTEuMAoK --000000000000360d2306556218a5--