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 1vYD2N-00Fw2N-2q for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Dec 2025 00:47:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vYD2M-002mJK-2a for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Dec 2025 00:47:35 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vYD2L-002mJB-2y for pgsql-hackers@lists.postgresql.org; Wed, 24 Dec 2025 00:47:35 +0000 Received: from mail-ej1-x631.google.com ([2a00:1450:4864:20::631]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vYD2J-002Gk4-37 for pgsql-hackers@lists.postgresql.org; Wed, 24 Dec 2025 00:47:33 +0000 Received: by mail-ej1-x631.google.com with SMTP id a640c23a62f3a-b736d883ac4so962639266b.2 for ; Tue, 23 Dec 2025 16:47:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766537248; x=1767142048; 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=4vD7vHewnDuqODR1KrVFxJemlmj8LYaad8ySDlnwQYM=; b=HBX/FgU2XgLMU4ngBvnV23VuM/hgFLsbg5YshZEdkkHzjOTmizX9X3i5oAXTvEnUmD 6wYm0WqoA8T8Qfk7rGPHd9gN/BKzwmE3wk6P9mzfLqbCyaBeNV5oHIRbD0FUZUChmy/W yY2vn1ICMFmOSP9rPQc8F3Fv+HGWofYhQqoRXRZeMY2jZpvbNhPwN9IQQ6Vvr4DRg5ZG ojDMOswxXQSQCq9BaIfHaegeTbigVI8piieAODwoJR/UaIqA7Jn7IqtTtI7nQ7SeiJTo lB2hwqzklFqW44tyGOcTUwsoQsZyWF074Lnj3iK+e+h0XxRiKB0PuwrZ4iSk9jHPPi7h I9mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766537248; x=1767142048; 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=4vD7vHewnDuqODR1KrVFxJemlmj8LYaad8ySDlnwQYM=; b=aLerv7kviBVBHPiM+l0sP09Bsb3+ZdXodiYANV0d41qX2g6zpW6ppPdH2sEeovROLD BcBwAYPoGEwluDkO1VAgszcDiEKzgJ/jEhgqu1+rqHl3brF5/dIF1JYsT0foQ9dTPQic A5PTl+iB5kKKAkLF21cwcvJs3m5r01HEBci6z0bLKH92jsOLMGAFVTFHB2l684smjPfc JI1QDNxpxBVEtQqg5EWmbxdR5H24xVZSDIJuxzc5SO9DJe47jVIVt0HlADXHz3eeKfnJ xnZtCVoB/73XMAtX1DmeEcL1zCR+eYX4AveqLA86yvQjiXrYfMkwRdqkUNixmuc5MzmD M1ew== X-Forwarded-Encrypted: i=1; AJvYcCW/g1bhTef+RzS5Qrnk9HuoAxDsbocBfBJEdq4RVRhxaAvhfgmBr5E/A9HOsHQaynFHnY1xjvX2+YeSvrg5@lists.postgresql.org X-Gm-Message-State: AOJu0YzWxMLIB3pQ+E1v8Ow8MgyK8oxRhNsIOoSg0+TDmhrBN/KrZDGf 3GNsrsN1+6qGADXdrEkctRRvleaRY0aRZxmvxxiixlas0FdoWuACpzvdCOYoMFA79JUwqlz6eK2 VNiPSyvUMnNYtizUSn+eeOozDs4XPEyv808Yp X-Gm-Gg: AY/fxX4cqKkMQfezS4PTbcLNAF6xNxx1ltqUnilIQaE0XRsce63UGalgRB9a7r/xYMC jETT7R0QEdZgxDrHhL4CLqkcg4+c24PW6nQ+Ob1l/GxAPlGDBBEaAOIacave3OTtUpXROQjhy44 d1x4DoCp6OUrywIkpYDZEpu+PYYveh8KF4S6XYSLH87xZlVBl4ln1Kd1ZzaUAebVBeir1QQN2fA vVdspR63/m8BLJWSq17VFTnRXV2L6IwwA+bgGAUiNqgfcPBj7FmNdH2QaFPY/wPzrUmkzEenwbK Pb98owkVHlCsKLKhQe2ijMul5+t2/jBbhmYgPcD6 X-Google-Smtp-Source: AGHT+IF4t28HE+V0wHOFlcwHC1BujjrCEgcOlab6vwB3VlrC68MiuQTo0fEt8/OzORoIutdFYM/F37NeWHODH7K0KSo= X-Received: by 2002:a17:907:980e:b0:b73:b05b:1f9c with SMTP id a640c23a62f3a-b8036f54f08mr1613656166b.14.1766537248202; Tue, 23 Dec 2025 16:47:28 -0800 (PST) MIME-Version: 1.0 References: <4c70b0f6-5aba-464c-b145-464a620c1222@eisentraut.org> In-Reply-To: From: Dharin Shah Date: Wed, 24 Dec 2025 01:47:16 +0100 X-Gm-Features: AQt7F2rf2wdwMQXm4OLrNivGloXQd1uo4zIa71nYolouruKobgXQJHt4m4kNH0U Message-ID: Subject: Re: Fwd: [PATCH] Add zstd compression for TOAST using extended header format To: Michael Paquier Cc: Peter Eisentraut , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000029c3720646a80184" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000029c3720646a80184 Content-Type: multipart/alternative; boundary="00000000000029c3710646a80182" --00000000000029c3710646a80182 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello, Following up on my earlier patch submission, I've reworked the zstd TOAST compression implementation based on our discussion here. The new patch now avoids the 20-byte extended header. Current Approach - New `VARTAG_ONDISK_ZSTD` (value 19) for ZSTD external storage - Maintains existing 16-byte varatt_external structure - ZSTD external-only (no inline compression) Note: Using a dedicated VARTAG_ONDISK_ZSTD keeps the on-disk TOAST pointer payload at 16 bytes, but it is not a general extensible metadata carrier. If PostgreSQL later adopts a more general extensible TOAST framework, this change should not block it; VARTAG_ONDISK_ZSTD would remain as a supported legacy encoding, while new toasted values could be written using the newer framework and old values rewritten via normal table rewrites. Storage (170 MB uncompressed): ZSTD: 22 MB (7.60x) - 38.7% space savings vs LZ4 PGLZ: 36 MB (4.76x) LZ4: 36 MB (4.66x) Key findings: - Large values (>50KB): ZSTD 33% better compression than PGLZ (~30% better than LZ4) - Low-entropy data: ZSTD compresses what LZ77 methods cannot - Small values: ZSTD pays external overhead vs inline PGLZ/LZ4 While ZSTD uses slightly less space overall, the external storage mechanism incurs a TOAST fetch overhead for small values, potentially impacting performance. Backwards Compatibility Tests - Mixed compression: Rows with PGLZ, LZ4, and ZSTD coexist and decompress correctly - Lazy recompression: ALTER COLUMN ... SET COMPRESSION zstd affects new data; existing data is lazily recompressed upon UPDATE or VACUUM FULL. - Inline vs external: Small values remain inline; large values use appropriate external compression. Data integrity: All data decompresses correctly across all methods. Trade-offs and Design Considerations - External-only avoids consuming cmid=3D3 and extended header complexity - Slice access: no ZSTD-specific optimization (follow-up area) - Hybrid inline/external for small values: not in this patch (feedback welcome) Reviewer Questions - Is vartag-based external-only acceptable? - Should compression level (currently 3) be configurable? - Is the external storage overhead for small values acceptable, or is hybrid inline/external behavior needed? Thanks, Dharin On Thu, Dec 18, 2025 at 11:44=E2=80=AFPM Michael Paquier wrote: > On Thu, Dec 18, 2025 at 10:44:22PM +0100, Dharin Shah wrote: > > I want to make sure I understand your main point: you're OK with a new > > `vartag_external`, but prefer we avoid increasing the heap TOAST pointe= r > > from 16 -> 20 bytes since every zstd-toasted value would pay +4 bytes i= n > > the main heap tuple. > > That would be my choice, yes. Not sure about the opinion of others on > this matter. > > > I also realize the "compatibility" of the extended header doesn't buy u= s > > much =E2=80=94 we'll need to support the existing 16-byte varatt_extern= al forever > > for backward compatibility. Adding a 20-byte structure just means two > > formats to maintain indefinitely. > > Yes. Patches have to maintain on-disk compatibility. > > > A couple clarifying questions if we go with new vartag (e.g., > > `VARTAG_ONDISK_ZSTD`), same 16-byte `varatt_external` payload, vartag a= s > > discriminator > > 1. How should we handle future methods beyond zstd? One tag per method, > or > > store a method id elsewhere (e.g., in TOAST chunk header)? > > My suspicion would be that we could either use a new set of vartags in > the future for each compression method. When it comes to zstd there > is something that comes in play: we could set some bits related to > dictionnaries at tuple level. Not sure if this is the best design or > if using an attribute-level option is more adapted (for example a > JSONB blob could be applied as an attribute with common keys in a > dictionnary saving a lot of on-disk space even before compression), > but keeping some bits free in the 16-byte header leaves this option > open with a new vartag_external. Saying that, zstd is good enough > that I strongly suspect that we would not regret it for quite a few > years. One issue that has pushed towards the addition of lz4 as an > option for toast compression is that pglz was worse in terms of CPU > cost. zlib is also more expensive than lz4 or zstd, especially at > very high compression level for usually little compression gains. > > > 2. And re: "as long as the TOAST value is 32 bits" =E2=80=94 are you re= ferring to > > the 30-bit extsize field in va_extinfo (i.e., avoid stealing bits from > > extsize for method encoding)? > > I mean extending the TOAST value to 8 bytes, as per the following > issues: > https://www.postgresql.org/message-id/764273.1669674269%40sss.pgh.pa.us > https://commitfest.postgresql.org/patch/5830/ > > > *Key findings (i guess well known at this point):* > > - ZSTD excels for repetitive/pattern-heavy data (6.7x better than PGLZ) > > - For low-redundancy data (MD5 hashes), ZSTD still achieves ~2x better > > - The T4 result showing zstd as "worse" is not about compression qualit= y > - > > it's about missing inline storage support. ZSTD actually compresses > better, > > but pays unnecessary TOAST overhead. > > > > I'll share the detailed benchmark script with the next patch revision. > But > > also a potential path forward could be that we could just fully replace > > pglz (can bring it up later in different thread) > > I don't think that we will ever be able to remove pglz. It would be > nice, as final result of course, but I also expect that not being able > to decompress pglz data is going to lead to a lot of user pain. That > would be also very expensive to check at upgrade for large instances. > > > *On Testing and Patch Structure* > > Agreed on both points: > > - I'll use `compression_zstd.sql` following the `compression_lz4.sql` > > pattern (removing the test_toast_ext module) > > Okay. > > > - I'll split the GUC refactoring into a separate preparatory patch > > This refactoring, if done nicely, is worth an independent piece. It's > something that I have actually done for the sake of the other thread, > though the result was not really much liked by others. Perhaps I'm > just lacking imagination with this abstraction, and I'd surely welcome > different ideas. > -- > Michael > --00000000000029c3710646a80182 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello,

Following up on my earlier = patch submission, I've reworked the zstd TOAST compression implementati= on based on our discussion here. The=C2=A0new patch now avoids the 20-byte = extended header.

Current Approach
- New `VARTAG_ONDISK_ZSTD` (val= ue 19) for ZSTD external storage
- Maintains existing 16-byte varatt_ext= ernal structure
- ZSTD external-only (no inline compression)

Note: Using a dedicated VARTAG_ONDISK= _ZSTD keeps the on-disk TOAST pointer payload at 16 bytes, but it is not a = general extensible metadata carrier. If PostgreSQL later adopts a more gene= ral extensible TOAST framework, this change should not block it; VARTAG_OND= ISK_ZSTD would remain as a supported legacy encoding, while new toasted val= ues could be written using the newer framework and old values rewritten via= normal table rewrites.

St= orage (170 MB uncompressed):
=C2=A0 =C2=A0 ZSTD: 22 MB (7.60x) - 38.7% s= pace savings vs LZ4
=C2=A0 =C2=A0 PGLZ: 36 MB (4.76x)
=C2=A0 =C2=A0 L= Z4: =C2=A036 MB (4.66x)

Key findings:
- Large = values (>50KB): ZSTD 33% better compression than PGLZ (~30% better than = LZ4)
- Low-entropy data: ZSTD compresses what LZ77 me= thods cannot
- Small values: ZSTD pays external overh= ead vs inline PGLZ/LZ4
While ZSTD uses slightly less space overall, the external storage mechanism= incurs a TOAST fetch overhead for small values, potentially impacting perf= ormance.
Backwards Compatibility Tests
<= div style=3D"margin-left:0pt" align=3D"left">- Mixed compression: Rows with PGLZ, LZ4, and ZSTD coexist and = decompress correctly
- Lazy recompression:<= span style=3D"background-color:transparent;color:rgb(0,0,0);font-family:Ari= al,sans-serif;font-variant-numeric:normal;font-variant-east-asian:normal;fo= nt-variant-alternates:normal;vertical-align:baseline"> ALTER COLU= MN ... SET COMPRESSION zstd affects new data; existing data is lazily recompressed upon = UPDATE or VACUUM FULL.
- Inline vs external: Small values remain inline; = large values use appropriate external compression.
Data integrity: All data decompresses correctly across all methods.
<= div style=3D"margin-left:0pt" align=3D"left">
Trade-offs= and Design Considerations

- External-only avoids consuming cmid=3D3 and extended header compl= exity

-=C2=A0Slice access: no ZSTD-specific optimization (follow-up area= )

-=C2=A0Hybrid inline/external for small values: not in this patch (fee= dback welcome)

Reviewer Questions - Is vartag-based external-only acceptable?- Should compression level (curren= tly 3) be configurable? - Is the external storage overhead for small values = acceptable, or is hybrid inline/external behavior needed?

= Thanks, Dharin
<= br>
On Thu, Dec 18, 2025 at 11:44=E2=80=AFPM Michael Paquier &l= t;michael@paquier.xyz> wrote:=
On Thu, Dec 18,= 2025 at 10:44:22PM +0100, Dharin Shah wrote:
> I want to make sure I understand your main point: you're OK with a= new
> `vartag_external`, but prefer we avoid increasing the heap TOAST point= er
> from 16 -> 20 bytes since every zstd-toasted value would pay +4 byt= es in
> the main heap tuple.

That would be my choice, yes.=C2=A0 Not sure about the opinion of others on=
this matter.

> I also realize the "compatibility" of the extended header do= esn't buy us
> much =E2=80=94 we'll need to support the existing 16-byte varatt_e= xternal forever
> for backward compatibility. Adding a 20-byte structure just means two<= br> > formats to maintain indefinitely.

Yes.=C2=A0 Patches have to maintain on-disk compatibility.

> A couple clarifying questions if we go with new vartag (e.g.,
> `VARTAG_ONDISK_ZSTD`), same 16-byte `varatt_external` payload, vartag = as
> discriminator
> 1. How should we handle future methods beyond zstd? One tag per method= , or
> store a method id elsewhere (e.g., in TOAST chunk header)?

My suspicion would be that we could either use a new set of vartags in
the future for each compression method.=C2=A0 When it comes to zstd there is something that comes in play: we could set some bits related to
dictionnaries at tuple level.=C2=A0 Not sure if this is the best design or =
if using an attribute-level option is more adapted (for example a
JSONB blob could be applied as an attribute with common keys in a
dictionnary saving a lot of on-disk space even before compression),
but keeping some bits free in the 16-byte header leaves this option
open with a new vartag_external.=C2=A0 Saying that, zstd is good enough
that I strongly suspect that we would not regret it for quite a few
years.=C2=A0 One issue that has pushed towards the addition of lz4 as an option for toast compression is that pglz was worse in terms of CPU
cost.=C2=A0 zlib is also more expensive than lz4 or zstd, especially at
very high compression level for usually little compression gains.

> 2. And re: "as long as the TOAST value is 32 bits" =E2=80=94= are you referring to
> the 30-bit extsize field in va_extinfo (i.e., avoid stealing bits from=
> extsize for method encoding)?

I mean extending the TOAST value to 8 bytes, as per the following
issues:
https://www.postgresql.org/me= ssage-id/764273.1669674269%40sss.pgh.pa.us
https://commitfest.postgresql.org/patch/5830/

> *Key findings (i guess well known at this point):*
> - ZSTD excels for repetitive/pattern-heavy data (6.7x better than PGLZ= )
> - For low-redundancy data (MD5 hashes), ZSTD still achieves ~2x better=
> - The T4 result showing zstd as "worse" is not about compres= sion quality -
> it's about missing inline storage support. ZSTD actually compresse= s better,
> but pays unnecessary TOAST overhead.
>
> I'll share the detailed benchmark script with the next patch revis= ion. But
> also a potential path forward could be that we could just fully replac= e
> pglz (can bring it up later in different thread)

I don't think that we will ever be able to remove pglz.=C2=A0 It would = be
nice, as final result of course, but I also expect that not being able
to decompress pglz data is going to lead to a lot of user pain.=C2=A0 That<= br> would be also very expensive to check at upgrade for large instances.

> *On Testing and Patch Structure*
> Agreed on both points:
> - I'll use `compression_zstd.sql` following the `compression_lz4.s= ql`
> pattern (removing the test_toast_ext module)

Okay.

> - I'll split the GUC refactoring into a separate preparatory patch=

This refactoring, if done nicely, is worth an independent piece.=C2=A0 It&#= 39;s
something that I have actually done for the sake of the other thread,
though the result was not really much liked by others.=C2=A0 Perhaps I'= m
just lacking imagination with this abstraction, and I'd surely welcome<= br> different ideas.
--
Michael
--00000000000029c3710646a80182-- --00000000000029c3720646a80184 Content-Type: application/octet-stream; name="benchmark_toast_compression.sql" Content-Disposition: attachment; filename="benchmark_toast_compression.sql" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjja58q01 LS0KLS0gQ29tcHJlaGVuc2l2ZSBUT0FTVCBDb21wcmVzc2lvbiBCZW5jaG1hcms6IFBHTFogdnMg TFo0IHZzIFpTVEQKLS0KLS0gTWVhc3VyZXMgY29tcHJlc3Npb24gcmF0aW9zLCBzcGVlZCwgc3Rv cmFnZSBlZmZpY2llbmN5LCBhbmQgVE9BU1QgYmVoYXZpb3IKLS0gYWNyb3NzIGRpdmVyc2Ugd29y a2xvYWRzLiBEYXRhIGlzIGdlbmVyYXRlZCBpbmxpbmUgcGVyIElOU0VSVCB0byBlbnN1cmUKLS0g ZWFjaCBjb21wcmVzc2lvbiBtZXRob2QgcHJvY2Vzc2VzIGlkZW50aWNhbCBmcmVzaCBpbnB1dC4K LS0KLS0gVXNhZ2U6IHBzcWwgLWYgYmVuY2htYXJrX3RvYXN0X2NvbXByZXNzaW9uLnNxbCA+IHJl c3VsdHMudHh0Ci0tCgpcdGltaW5nIG9uClxwc2V0IHBhZ2VyIG9mZgpccHNldCBmb3JtYXQgd3Jh cHBlZApccHNldCBjb2x1bW5zIDEyMApcc2V0IE9OX0VSUk9SX1NUT1Agb24KCkRST1AgU0NIRU1B IElGIEVYSVNUUyB0b2FzdF9iZW5jaCBDQVNDQURFOwpDUkVBVEUgU0NIRU1BIHRvYXN0X2JlbmNo OwpTRVQgc2VhcmNoX3BhdGggVE8gdG9hc3RfYmVuY2g7CgpcZWNobyAnJwpcZWNobyAnPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jwpc ZWNobyAnUG9zdGdyZVNRTCBUT0FTVCBDb21wcmVzc2lvbiBCZW5jaG1hcmsnClxlY2hvICc9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0n ClxlY2hvICcnCgotLSBEZXRlY3QgYXZhaWxhYmxlIGNvbXByZXNzaW9uIG1ldGhvZHMKXHNldCBo YXNfbHo0IDAKXHNldCBoYXNfenN0ZCAwClNFTEVDVAogICAgKGVudW12YWxzIEA+ICd7bHo0fScp OjppbnQgIEFTIGhhc19sejQsCiAgICAoZW51bXZhbHMgQD4gJ3t6c3RkfScpOjppbnQgQVMgaGFz X3pzdGQKRlJPTSBwZ19zZXR0aW5ncwpXSEVSRSBuYW1lID0gJ2RlZmF1bHRfdG9hc3RfY29tcHJl c3Npb24nClxnc2V0CgpcZWNobyAnQ29tcHJlc3Npb24gbWV0aG9kcyBhdmFpbGFibGU6JwpcZWNo byAnICBQR0xaOiB5ZXMgKGJ1aWx0LWluKScKXGVjaG8gJyAgTFo0OicgOmhhc19sejQKXGVjaG8g JyAgWlNURDonIDpoYXNfenN0ZApcZWNobyAnJwoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tIEhlbHBlciBGdW5jdGlvbnMgZm9y IERhdGEgR2VuZXJhdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KCkNSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGdlbmVyYXRl X3Byb2R1Y3RfanNvbihwcm9kdWN0X2lkIGludGVnZXIpIFJFVFVSTlMganNvbmIgQVMgJCQKQkVH SU4KICAgIFJFVFVSTiBqc29uYl9idWlsZF9vYmplY3QoCiAgICAgICAgJ2lkJywgcHJvZHVjdF9p ZCwKICAgICAgICAnbmFtZScsICdQcm9kdWN0IE5hbWUgJyB8fCBwcm9kdWN0X2lkLAogICAgICAg ICdkZXNjcmlwdGlvbicsICdUaGlzIGlzIGEgZGV0YWlsZWQgcHJvZHVjdCBkZXNjcmlwdGlvbiBm b3IgaXRlbSAnIHx8IHByb2R1Y3RfaWQgfHwKICAgICAgICAgICAgICAgICAgICAgICcuIEl0IGlu Y2x1ZGVzIGZlYXR1cmVzLCBzcGVjaWZpY2F0aW9ucywgYW5kIHVzYWdlIGluZm9ybWF0aW9uLiAn IHx8CiAgICAgICAgICAgICAgICAgICAgICAnVGhlIHByb2R1Y3QgaXMgZGVzaWduZWQgZm9yIGhp Z2gtcXVhbGl0eSBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkuICcgfHwKICAgICAgICAgICAg ICAgICAgICAgIHJlcGVhdCgnQWRkaXRpb25hbCBkZXRhaWxzIGFib3V0IHF1YWxpdHksIG1hbnVm YWN0dXJpbmcsIGFuZCB3YXJyYW50eS4gJywgNSksCiAgICAgICAgJ3ByaWNlJywgKHJhbmRvbSgp ICogMTAwMCk6Om51bWVyaWMoMTAsMiksCiAgICAgICAgJ2NhdGVnb3J5JywgQVJSQVlbJ0VsZWN0 cm9uaWNzJywgJ0NvbXB1dGVycycsICdMYXB0b3BzJywgJ0dhbWluZyddLAogICAgICAgICdyZXZp ZXdzJywgKAogICAgICAgICAgICBTRUxFQ1QganNvbmJfYWdnKAogICAgICAgICAgICAgICAganNv bmJfYnVpbGRfb2JqZWN0KAogICAgICAgICAgICAgICAgICAgICd1c2VyJywgJ3VzZXJfJyB8fCBp LAogICAgICAgICAgICAgICAgICAgICdyYXRpbmcnLCAxICsgZmxvb3IocmFuZG9tKCkgKiA1KTo6 aW50LAogICAgICAgICAgICAgICAgICAgICdjb21tZW50JywgJ1RoaXMgaXMgcmV2aWV3IG51bWJl ciAnIHx8IGkgfHwgJyBmb3IgcHJvZHVjdCAnIHx8IHByb2R1Y3RfaWQgfHwgJy4gJyB8fAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXQoJ0dyZWF0IHByb2R1Y3Qgd2l0aCBleGNl bGxlbnQgZmVhdHVyZXMuICcsIDMpLAogICAgICAgICAgICAgICAgICAgICdkYXRlJywgJzIwMjUt JyB8fCBscGFkKCgxICsgZmxvb3IocmFuZG9tKCkgKiAxMikpOjp0ZXh0LCAyLCAnMCcpIHx8ICct JyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbHBhZCgoMSArIGZsb29yKHJhbmRvbSgp ICogMjgpKTo6dGV4dCwgMiwgJzAnKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICApCiAg ICAgICAgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwKSBpCiAgICAgICAgKSwKICAgICAg ICAnc3BlY2lmaWNhdGlvbnMnLCBqc29uYl9idWlsZF9vYmplY3QoCiAgICAgICAgICAgICd3ZWln aHQnLCAocmFuZG9tKCkgKiAxMCk6Om51bWVyaWMoNCwyKSB8fCAnIGtnJywKICAgICAgICAgICAg J2RpbWVuc2lvbnMnLCBqc29uYl9idWlsZF9vYmplY3QoJ2xlbmd0aCcsIDMwICsgcmFuZG9tKCkg KiAyMCwgJ3dpZHRoJywgMjAgKyByYW5kb20oKSAqIDEwLCAnaGVpZ2h0JywgNSArIHJhbmRvbSgp ICogNSksCiAgICAgICAgICAgICd3YXJyYW50eScsICcyIHllYXJzJywKICAgICAgICAgICAgJ21h bnVmYWN0dXJlcicsICdUZWNoQ29ycCBJbmMuJywKICAgICAgICAgICAgJ21vZGVsJywgJ1RDLScg fHwgcHJvZHVjdF9pZCB8fCAnLTIwMjUnCiAgICAgICAgKSwKICAgICAgICAnbWV0YWRhdGEnLCBq c29uYl9idWlsZF9vYmplY3QoCiAgICAgICAgICAgICdjcmVhdGVkX2F0Jywgbm93KCkgLSAocmFu ZG9tKCkgKiAzNjUgfHwgJyBkYXlzJyk6OmludGVydmFsLAogICAgICAgICAgICAndXBkYXRlZF9h dCcsIG5vdygpIC0gKHJhbmRvbSgpICogMzAgfHwgJyBkYXlzJyk6OmludGVydmFsLAogICAgICAg ICAgICAndmlld3MnLCBmbG9vcihyYW5kb20oKSAqIDEwMDAwKTo6aW50LAogICAgICAgICAgICAn c2FsZXMnLCBmbG9vcihyYW5kb20oKSAqIDEwMDApOjppbnQKICAgICAgICApCiAgICApOwpFTkQ7 CiQkIExBTkdVQUdFIHBscGdzcWw7CgotLSBTZXJ2ZXIvYXBwbGljYXRpb24gbG9ncwpDUkVBVEUg T1IgUkVQTEFDRSBGVU5DVElPTiBnZW5lcmF0ZV9sb2dfZW50cmllcyhudW1fZW50cmllcyBpbnRl Z2VyKSBSRVRVUk5TIHRleHQKTEFOR1VBR0Ugc3FsIFZPTEFUSUxFIEFTICQkCiAgICBTRUxFQ1Qg c3RyaW5nX2FnZygKICAgICAgICBmb3JtYXQoJyVzIFslc10gJXMtJXMgLSBSZXF1ZXN0IGlkPSVz IHVzZXI9dXNlcl8lcyBlbmRwb2ludD0vYXBpL3YxL3Jlc291cmNlLyVzIG1ldGhvZD0lcyBkdXJh dGlvbj0lc21zIHN0YXR1cz0lcyBtZXNzYWdlPSJQcm9jZXNzaW5nIGNvbXBsZXRlZCBmb3Igb3Bl cmF0aW9uIHR5cGUgJXMiJywKICAgICAgICAgICAgICAgdG9fY2hhcihjbG9ja190aW1lc3RhbXAo KSAtIChyYW5kb20oKSAqIDg2NDAwIHx8ICcgc2Vjb25kcycpOjppbnRlcnZhbCwgJ1lZWVktTU0t REQgSEgyNDpNSTpTUy5NUycpLAogICAgICAgICAgICAgICAoQVJSQVlbJ0RFQlVHJywnSU5GTycs J1dBUk4nLCdFUlJPUicsJ0ZBVEFMJ10pWzEgKyBmbG9vcihyYW5kb20oKSAqIDUpOjppbnRdLAog ICAgICAgICAgICAgICAoQVJSQVlbJ0F1dGhTZXJ2aWNlJywnRGF0YVNlcnZpY2UnLCdDYWNoZVNl cnZpY2UnLCdBUElHYXRld2F5JywnRGF0YWJhc2VQb29sJ10pWzEgKyBmbG9vcihyYW5kb20oKSAq IDUpOjppbnRdLAogICAgICAgICAgICAgICBmbG9vcihyYW5kb20oKSAqIDEwMCk6OmludCwKICAg ICAgICAgICAgICAgbWQ1KHJhbmRvbSgpOjp0ZXh0IHx8IGNsb2NrX3RpbWVzdGFtcCgpOjp0ZXh0 IHx8IGc6OnRleHQpLAogICAgICAgICAgICAgICBmbG9vcihyYW5kb20oKSAqIDEwMDApOjppbnQs CiAgICAgICAgICAgICAgIGZsb29yKHJhbmRvbSgpICogMTAwKTo6aW50LAogICAgICAgICAgICAg ICAoQVJSQVlbJ0dFVCcsJ1BPU1QnLCdQVVQnLCdERUxFVEUnXSlbMSArIGZsb29yKHJhbmRvbSgp ICogNCk6OmludF0sCiAgICAgICAgICAgICAgIGZsb29yKHJhbmRvbSgpICogNTAwMCk6OmludCwK ICAgICAgICAgICAgICAgKEFSUkFZWzIwMCwgMjAxLCA0MDAsIDQwNCwgNTAwXSlbMSArIGZsb29y KHJhbmRvbSgpICogNSk6OmludF0sCiAgICAgICAgICAgICAgIGcpCiAgICAgICAgLCBFJ1xuJyBP UkRFUiBCWSBnKQogICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgbnVtX2VudHJpZXMpIEFTIGc7 CiQkOwoKLS0gSFRNTC9YTUwgZG9jdW1lbnRzCkNSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGdl bmVyYXRlX2h0bWxfZG9jdW1lbnQocGFnZV9udW0gaW50ZWdlcikgUkVUVVJOUyB0ZXh0IEFTICQk CkRFQ0xBUkUKICAgIHJlc3VsdCB0ZXh0IDo9ICc8IURPQ1RZUEUgaHRtbD48aHRtbD48aGVhZD48 bWV0YSBjaGFyc2V0PSJVVEYtOCI+PHRpdGxlPkRvY3VtZW50ICcgfHwgcGFnZV9udW0gfHwgJzwv dGl0bGU+JzsKQkVHSU4KICAgIHJlc3VsdCA6PSByZXN1bHQgfHwgJzxzdHlsZT5ib2R5e2ZvbnQt ZmFtaWx5OkFyaWFsO21hcmdpbjoyMHB4O30gLnNlY3Rpb257bWFyZ2luOjEwcHg7cGFkZGluZzox MHB4O308L3N0eWxlPjwvaGVhZD48Ym9keT4nOwogICAgcmVzdWx0IDo9IHJlc3VsdCB8fCAnPGgx PkRvY3VtZW50IFRpdGxlICcgfHwgcGFnZV9udW0gfHwgJzwvaDE+JzsKICAgIEZPUiBpIElOIDEu LjIwIExPT1AKICAgICAgICByZXN1bHQgOj0gcmVzdWx0IHx8ICc8ZGl2IGNsYXNzPSJzZWN0aW9u Ij48aDI+U2VjdGlvbiAnIHx8IGkgfHwgJzwvaDI+JzsKICAgICAgICByZXN1bHQgOj0gcmVzdWx0 IHx8ICc8cD4nIHx8IHJlcGVhdCgnVGhpcyBpcyBwYXJhZ3JhcGggdGV4dCBmb3Igc2VjdGlvbiAn IHx8IGkgfHwgJyBvZiBkb2N1bWVudCAnIHx8IHBhZ2VfbnVtIHx8ICcuICcsIDIwKSB8fCAnPC9w Pic7CiAgICAgICAgcmVzdWx0IDo9IHJlc3VsdCB8fCAnPHVsPjxsaT5JdGVtIDE8L2xpPjxsaT5J dGVtIDI8L2xpPjxsaT5JdGVtIDM8L2xpPjxsaT5JdGVtIDQ8L2xpPjwvdWw+JzsKICAgICAgICBy ZXN1bHQgOj0gcmVzdWx0IHx8ICc8L2Rpdj4nOwogICAgRU5EIExPT1A7CiAgICByZXN1bHQgOj0g cmVzdWx0IHx8ICc8L2JvZHk+PC9odG1sPic7CiAgICBSRVRVUk4gcmVzdWx0OwpFTkQ7CiQkIExB TkdVQUdFIHBscGdzcWw7CgotLSBCYXNlNjQtZW5jb2RlZCBiaW5hcnktbGlrZSBkYXRhCkNSRUFU RSBPUiBSRVBMQUNFIEZVTkNUSU9OIGdlbmVyYXRlX2Jhc2U2NF9kYXRhKHNpemVfa2IgaW50ZWdl cikgUkVUVVJOUyB0ZXh0CkxBTkdVQUdFIHNxbCBWT0xBVElMRSBBUyAkJAogICAgU0VMRUNUIHN1 YnN0cigKICAgICAgICBzdHJpbmdfYWdnKG1kNShyYW5kb20oKTo6dGV4dCB8fCBjbG9ja190aW1l c3RhbXAoKTo6dGV4dCB8fCBnOjp0ZXh0KSwgJycgT1JERVIgQlkgZyksCiAgICAgICAgMSwKICAg ICAgICBzaXplX2tiICogMTAyNCkKICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKAogICAgICAgIDEs CiAgICAgICAgY2VpbCgoc2l6ZV9rYiAqIDEwMjQpIC8gMzIuMCk6OmludCkgQVMgZzsKJCQ7Cgot LSBDU1YtbGlrZSBkYXRhCkNSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGdlbmVyYXRlX2Nzdl9k YXRhKG51bV9yb3dzIGludGVnZXIpIFJFVFVSTlMgdGV4dApMQU5HVUFHRSBzcWwgVk9MQVRJTEUg QVMgJCQKICAgIFNFTEVDVAogICAgICAgICdpZCx0aW1lc3RhbXAsdXNlcl9pZCxhY3Rpb24scmVz b3VyY2UsZHVyYXRpb25fbXMsc3RhdHVzLGlwX2FkZHJlc3MsdXNlcl9hZ2VudCcgfHwgRSdcbicg fHwKICAgICAgICBzdHJpbmdfYWdnKAogICAgICAgICAgICBmb3JtYXQoJyVzLCVzLCVzLCVzLCVz LCVzLCVzLCVzLCVzJywKICAgICAgICAgICAgICAgICAgIGcsCiAgICAgICAgICAgICAgICAgICB0 b19jaGFyKGNsb2NrX3RpbWVzdGFtcCgpIC0gKHJhbmRvbSgpICogODY0MDAgfHwgJyBzZWNvbmRz Jyk6OmludGVydmFsLCAnWVlZWS1NTS1ERCBISDI0Ok1JOlNTJyksCiAgICAgICAgICAgICAgICAg ICBmbG9vcihyYW5kb20oKSAqIDEwMDAwKTo6aW50LAogICAgICAgICAgICAgICAgICAgKEFSUkFZ Wydsb2dpbicsJ2xvZ291dCcsJ2NyZWF0ZScsJ3JlYWQnLCd1cGRhdGUnLCdkZWxldGUnXSlbMSAr IGZsb29yKHJhbmRvbSgpICogNik6OmludF0sCiAgICAgICAgICAgICAgICAgICAnL2FwaS92MS9y ZXNvdXJjZS8nIHx8IGZsb29yKHJhbmRvbSgpICogMTAwKTo6aW50LAogICAgICAgICAgICAgICAg ICAgZmxvb3IocmFuZG9tKCkgKiA1MDAwKTo6aW50LAogICAgICAgICAgICAgICAgICAgKEFSUkFZ WydzdWNjZXNzJywnZmFpbHVyZScsJ3RpbWVvdXQnXSlbMSArIGZsb29yKHJhbmRvbSgpICogMyk6 OmludF0sCiAgICAgICAgICAgICAgICAgICAoMTAgKyBmbG9vcihyYW5kb20oKSAqIDI0NSkpOjpp bnQgfHwgJy4nIHx8CiAgICAgICAgICAgICAgICAgICAgICAgZmxvb3IocmFuZG9tKCkgKiAyNTYp OjppbnQgfHwgJy4nIHx8CiAgICAgICAgICAgICAgICAgICAgICAgZmxvb3IocmFuZG9tKCkgKiAy NTYpOjppbnQgfHwgJy4nIHx8CiAgICAgICAgICAgICAgICAgICAgICAgZmxvb3IocmFuZG9tKCkg KiAyNTYpOjppbnQsCiAgICAgICAgICAgICAgICAgICAnTW96aWxsYS81LjAgKFBsYXRmb3JtKSBC cm93c2VyLycgfHwgZmxvb3IocmFuZG9tKCkgKiAxMDApOjppbnQpLAogICAgICAgICAgICBFJ1xu JyBPUkRFUiBCWSBnKQogICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgbnVtX3Jvd3MpIEFTIGc7 CiQkOwoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi0tIENyZWF0ZSBCZW5jaG1hcmsgVGFibGVzIChvbmUgcGVyIGNvbXByZXNzaW9u IG1ldGhvZCkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCgpcZWNobyAnLS0tIENyZWF0aW5nIGJlbmNobWFyayB0YWJsZXMgLS0tJwoK LS0gUHJvZHVjdCBKU09OIGRhdGEKQ1JFQVRFIFRBQkxFIGJlbmNoX3BnbHpfcHJvZHVjdHMgKGlk IHNlcmlhbCBQUklNQVJZIEtFWSwgZGF0YSBqc29uYiBDT01QUkVTU0lPTiBwZ2x6KTsKXGlmIDpo YXNfbHo0CkNSRUFURSBUQUJMRSBiZW5jaF9sejRfcHJvZHVjdHMgKGlkIHNlcmlhbCBQUklNQVJZ IEtFWSwgZGF0YSBqc29uYiBDT01QUkVTU0lPTiBsejQpOwpcZW5kaWYKXGlmIDpoYXNfenN0ZApD UkVBVEUgVEFCTEUgYmVuY2hfenN0ZF9wcm9kdWN0cyAoaWQgc2VyaWFsIFBSSU1BUlkgS0VZLCBk YXRhIGpzb25iIENPTVBSRVNTSU9OIHpzdGQpOwpcZW5kaWYKCi0tIExvZyBkYXRhCkNSRUFURSBU QUJMRSBiZW5jaF9wZ2x6X2xvZ3MgKGlkIHNlcmlhbCBQUklNQVJZIEtFWSwgZGF0YSB0ZXh0IENP TVBSRVNTSU9OIHBnbHopOwpcaWYgOmhhc19sejQKQ1JFQVRFIFRBQkxFIGJlbmNoX2x6NF9sb2dz IChpZCBzZXJpYWwgUFJJTUFSWSBLRVksIGRhdGEgdGV4dCBDT01QUkVTU0lPTiBsejQpOwpcZW5k aWYKXGlmIDpoYXNfenN0ZApDUkVBVEUgVEFCTEUgYmVuY2hfenN0ZF9sb2dzIChpZCBzZXJpYWwg UFJJTUFSWSBLRVksIGRhdGEgdGV4dCBDT01QUkVTU0lPTiB6c3RkKTsKXGVuZGlmCgotLSBIVE1M IGRvY3VtZW50cwpDUkVBVEUgVEFCTEUgYmVuY2hfcGdsel9odG1sIChpZCBzZXJpYWwgUFJJTUFS WSBLRVksIGRhdGEgdGV4dCBDT01QUkVTU0lPTiBwZ2x6KTsKXGlmIDpoYXNfbHo0CkNSRUFURSBU QUJMRSBiZW5jaF9sejRfaHRtbCAoaWQgc2VyaWFsIFBSSU1BUlkgS0VZLCBkYXRhIHRleHQgQ09N UFJFU1NJT04gbHo0KTsKXGVuZGlmClxpZiA6aGFzX3pzdGQKQ1JFQVRFIFRBQkxFIGJlbmNoX3pz dGRfaHRtbCAoaWQgc2VyaWFsIFBSSU1BUlkgS0VZLCBkYXRhIHRleHQgQ09NUFJFU1NJT04genN0 ZCk7ClxlbmRpZgoKLS0gQmFzZTY0IGRhdGEgKGxvdyBjb21wcmVzc2liaWxpdHkpCkNSRUFURSBU QUJMRSBiZW5jaF9wZ2x6X2Jhc2U2NCAoaWQgc2VyaWFsIFBSSU1BUlkgS0VZLCBkYXRhIHRleHQg Q09NUFJFU1NJT04gcGdseik7ClxpZiA6aGFzX2x6NApDUkVBVEUgVEFCTEUgYmVuY2hfbHo0X2Jh c2U2NCAoaWQgc2VyaWFsIFBSSU1BUlkgS0VZLCBkYXRhIHRleHQgQ09NUFJFU1NJT04gbHo0KTsK XGVuZGlmClxpZiA6aGFzX3pzdGQKQ1JFQVRFIFRBQkxFIGJlbmNoX3pzdGRfYmFzZTY0IChpZCBz ZXJpYWwgUFJJTUFSWSBLRVksIGRhdGEgdGV4dCBDT01QUkVTU0lPTiB6c3RkKTsKXGVuZGlmCgot LSBDU1YgZGF0YQpDUkVBVEUgVEFCTEUgYmVuY2hfcGdsel9jc3YgKGlkIHNlcmlhbCBQUklNQVJZ IEtFWSwgZGF0YSB0ZXh0IENPTVBSRVNTSU9OIHBnbHopOwpcaWYgOmhhc19sejQKQ1JFQVRFIFRB QkxFIGJlbmNoX2x6NF9jc3YgKGlkIHNlcmlhbCBQUklNQVJZIEtFWSwgZGF0YSB0ZXh0IENPTVBS RVNTSU9OIGx6NCk7ClxlbmRpZgpcaWYgOmhhc196c3RkCkNSRUFURSBUQUJMRSBiZW5jaF96c3Rk X2NzdiAoaWQgc2VyaWFsIFBSSU1BUlkgS0VZLCBkYXRhIHRleHQgQ09NUFJFU1NJT04genN0ZCk7 ClxlbmRpZgoKLS0gSGlnaGx5IHJlcGV0aXRpdmUgZGF0YQpDUkVBVEUgVEFCTEUgYmVuY2hfcGds el9yZXBldGl0aXZlIChpZCBzZXJpYWwgUFJJTUFSWSBLRVksIGRhdGEgdGV4dCBDT01QUkVTU0lP TiBwZ2x6KTsKXGlmIDpoYXNfbHo0CkNSRUFURSBUQUJMRSBiZW5jaF9sejRfcmVwZXRpdGl2ZSAo aWQgc2VyaWFsIFBSSU1BUlkgS0VZLCBkYXRhIHRleHQgQ09NUFJFU1NJT04gbHo0KTsKXGVuZGlm ClxpZiA6aGFzX3pzdGQKQ1JFQVRFIFRBQkxFIGJlbmNoX3pzdGRfcmVwZXRpdGl2ZSAoaWQgc2Vy aWFsIFBSSU1BUlkgS0VZLCBkYXRhIHRleHQgQ09NUFJFU1NJT04genN0ZCk7ClxlbmRpZgoKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci0tIEJFTkNITUFSSyAxOiBDb21wcmVzc2lvbiBTcGVlZCAoSU5TRVJUKQotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClxlY2hvICcn ClxlY2hvICc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0nClxlY2hvICdCRU5DSE1BUksgMTogQ09NUFJFU1NJT04gU1BFRUQgKElOU0VS VCBQRVJGT1JNQU5DRSknClxlY2hvICc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0nCgpcZWNobyAnJwpcZWNobyAnLS0tIDFhLiBQcm9k dWN0IEpTT04gRGF0YSAoNTAwIHJvd3MsIH4zS0IgZWFjaCkgLS0tJwpcdGltaW5nIG9uCklOU0VS VCBJTlRPIGJlbmNoX3BnbHpfcHJvZHVjdHMgKGRhdGEpIFNFTEVDVCBnZW5lcmF0ZV9wcm9kdWN0 X2pzb24oaSkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwKSBpOwpcdGltaW5nIG9mZgoKXGVj aG8gJycKXGlmIDpoYXNfbHo0Clx0aW1pbmcgb24KSU5TRVJUIElOVE8gYmVuY2hfbHo0X3Byb2R1 Y3RzIChkYXRhKSBTRUxFQ1QgZ2VuZXJhdGVfcHJvZHVjdF9qc29uKGkpIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDUwMCkgaTsKXHRpbWluZyBvZmYKXGVuZGlmCgpcZWNobyAnJwpcaWYgOmhhc196 c3RkClx0aW1pbmcgb24KSU5TRVJUIElOVE8gYmVuY2hfenN0ZF9wcm9kdWN0cyAoZGF0YSkgU0VM RUNUIGdlbmVyYXRlX3Byb2R1Y3RfanNvbihpKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1MDAp IGk7Clx0aW1pbmcgb2ZmClxlbmRpZgoKXGVjaG8gJycKXGVjaG8gJy0tLSAxYi4gTG9nIERhdGEg KDIwMCByb3dzLCB+MTAwS0IgZWFjaCkgLS0tJwpcdGltaW5nIG9uCklOU0VSVCBJTlRPIGJlbmNo X3BnbHpfbG9ncyAoZGF0YSkgU0VMRUNUIGdlbmVyYXRlX2xvZ19lbnRyaWVzKDEwMDApIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsIDIwMCk7Clx0aW1pbmcgb2ZmCgpcZWNobyAnJwpcaWYgOmhhc19s ejQKXHRpbWluZyBvbgpJTlNFUlQgSU5UTyBiZW5jaF9sejRfbG9ncyAoZGF0YSkgU0VMRUNUIGdl bmVyYXRlX2xvZ19lbnRyaWVzKDEwMDApIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMCk7Clx0 aW1pbmcgb2ZmClxlbmRpZgoKXGVjaG8gJycKXGlmIDpoYXNfenN0ZApcdGltaW5nIG9uCklOU0VS VCBJTlRPIGJlbmNoX3pzdGRfbG9ncyAoZGF0YSkgU0VMRUNUIGdlbmVyYXRlX2xvZ19lbnRyaWVz KDEwMDApIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMCk7Clx0aW1pbmcgb2ZmClxlbmRpZgoK XGVjaG8gJycKXGVjaG8gJy0tLSAxYy4gSFRNTCBEb2N1bWVudHMgKDMwMCByb3dzLCB+NTBLQiBl YWNoKSAtLS0nClx0aW1pbmcgb24KSU5TRVJUIElOVE8gYmVuY2hfcGdsel9odG1sIChkYXRhKSBT RUxFQ1QgZ2VuZXJhdGVfaHRtbF9kb2N1bWVudChpKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAz MDApIGk7Clx0aW1pbmcgb2ZmCgpcZWNobyAnJwpcaWYgOmhhc19sejQKXHRpbWluZyBvbgpJTlNF UlQgSU5UTyBiZW5jaF9sejRfaHRtbCAoZGF0YSkgU0VMRUNUIGdlbmVyYXRlX2h0bWxfZG9jdW1l bnQoaSkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMzAwKSBpOwpcdGltaW5nIG9mZgpcZW5kaWYK ClxlY2hvICcnClxpZiA6aGFzX3pzdGQKXHRpbWluZyBvbgpJTlNFUlQgSU5UTyBiZW5jaF96c3Rk X2h0bWwgKGRhdGEpIFNFTEVDVCBnZW5lcmF0ZV9odG1sX2RvY3VtZW50KGkpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDMwMCkgaTsKXHRpbWluZyBvZmYKXGVuZGlmCgpcZWNobyAnJwpcZWNobyAn LS0tIDFkLiBCYXNlNjQgRGF0YSAoMTAwIHJvd3MsIDEwMEtCIGVhY2ggLSBsb3cgY29tcHJlc3Np YmlsaXR5KSAtLS0nClx0aW1pbmcgb24KSU5TRVJUIElOVE8gYmVuY2hfcGdsel9iYXNlNjQgKGRh dGEpIFNFTEVDVCBnZW5lcmF0ZV9iYXNlNjRfZGF0YSgxMDApIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsIDEwMCk7Clx0aW1pbmcgb2ZmCgpcZWNobyAnJwpcaWYgOmhhc19sejQKXHRpbWluZyBvbgpJ TlNFUlQgSU5UTyBiZW5jaF9sejRfYmFzZTY0IChkYXRhKSBTRUxFQ1QgZ2VuZXJhdGVfYmFzZTY0 X2RhdGEoMTAwKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApOwpcdGltaW5nIG9mZgpcZW5k aWYKClxlY2hvICcnClxpZiA6aGFzX3pzdGQKXHRpbWluZyBvbgpJTlNFUlQgSU5UTyBiZW5jaF96 c3RkX2Jhc2U2NCAoZGF0YSkgU0VMRUNUIGdlbmVyYXRlX2Jhc2U2NF9kYXRhKDEwMCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKTsKXHRpbWluZyBvZmYKXGVuZGlmCgpcZWNobyAnJwpcZWNo byAnLS0tIDFlLiBDU1YgRGF0YSAoNDAwIHJvd3MsIH41MEtCIGVhY2gpIC0tLScKXHRpbWluZyBv bgpJTlNFUlQgSU5UTyBiZW5jaF9wZ2x6X2NzdiAoZGF0YSkgU0VMRUNUIGdlbmVyYXRlX2Nzdl9k YXRhKDUwMCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNDAwKTsKXHRpbWluZyBvZmYKClxlY2hv ICcnClxpZiA6aGFzX2x6NApcdGltaW5nIG9uCklOU0VSVCBJTlRPIGJlbmNoX2x6NF9jc3YgKGRh dGEpIFNFTEVDVCBnZW5lcmF0ZV9jc3ZfZGF0YSg1MDApIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDQwMCk7Clx0aW1pbmcgb2ZmClxlbmRpZgoKXGVjaG8gJycKXGlmIDpoYXNfenN0ZApcdGltaW5n IG9uCklOU0VSVCBJTlRPIGJlbmNoX3pzdGRfY3N2IChkYXRhKSBTRUxFQ1QgZ2VuZXJhdGVfY3N2 X2RhdGEoNTAwKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA0MDApOwpcdGltaW5nIG9mZgpcZW5k aWYKClxlY2hvICcnClxlY2hvICctLS0gMWYuIEhpZ2hseSBSZXBldGl0aXZlIERhdGEgKDEwMDAg cm93cywgfjkwS0IgZWFjaCkgLS0tJwpcdGltaW5nIG9uCklOU0VSVCBJTlRPIGJlbmNoX3BnbHpf cmVwZXRpdGl2ZSAoZGF0YSkgU0VMRUNUIHJlcGVhdCgnQUFBQkJCQ0NDRERERUVFRkZGJywgNTAw MCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCk7Clx0aW1pbmcgb2ZmCgpcZWNobyAnJwpc aWYgOmhhc19sejQKXHRpbWluZyBvbgpJTlNFUlQgSU5UTyBiZW5jaF9sejRfcmVwZXRpdGl2ZSAo ZGF0YSkgU0VMRUNUIHJlcGVhdCgnQUFBQkJCQ0NDRERERUVFRkZGJywgNTAwMCkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwgMTAwMCk7Clx0aW1pbmcgb2ZmClxlbmRpZgoKXGVjaG8gJycKXGlmIDpo YXNfenN0ZApcdGltaW5nIG9uCklOU0VSVCBJTlRPIGJlbmNoX3pzdGRfcmVwZXRpdGl2ZSAoZGF0 YSkgU0VMRUNUIHJlcGVhdCgnQUFBQkJCQ0NDRERERUVFRkZGJywgNTAwMCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwgMTAwMCk7Clx0aW1pbmcgb2ZmClxlbmRpZgoKLS0gRm9yY2UgZXZlcnl0aGlu ZyB0byBkaXNrCkNIRUNLUE9JTlQ7CgotLSBFbnN1cmUgY2F0YWxvZyBzdGF0cyAocmVsdHVwbGVz L3JlbHBhZ2VzKSBhcmUgcG9wdWxhdGVkIGZvciBsYXRlciByZXBvcnRpbmcuClxlY2hvICcnClxl Y2hvICctLS0gQ29sbGVjdGluZyBzdGF0aXN0aWNzIChBTkFMWVpFKSBmb3Igc3RvcmFnZSByZXBv cnRpbmcgLS0tJwpBTkFMWVpFOwoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tIEJFTkNITUFSSyAyOiBEZWNvbXByZXNzaW9uIFNw ZWVkIChTRUxFQ1QgRlVMTCkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpcZWNobyAnJwpcZWNobyAnPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JwpcZWNobyAnQkVOQ0hN QVJLIDI6IERFQ09NUFJFU1NJT04gU1BFRUQgKEZVTEwgUk9XIFJFQURTKScKXGVjaG8gJz09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScK ClxlY2hvICcnClxlY2hvICctLS0gMmEuIFByb2R1Y3QgSlNPTiAoZnVsbCBzY2FuKSAtLS0nClx0 aW1pbmcgb24KU0VMRUNUIGNvdW50KCopLCBzdW0oanNvbmJfYXJyYXlfbGVuZ3RoKGRhdGEtPidy ZXZpZXdzJykpIEZST00gYmVuY2hfcGdsel9wcm9kdWN0czsKXHRpbWluZyBvZmYKClxlY2hvICcn ClxpZiA6aGFzX2x6NApcdGltaW5nIG9uClNFTEVDVCBjb3VudCgqKSwgc3VtKGpzb25iX2FycmF5 X2xlbmd0aChkYXRhLT4ncmV2aWV3cycpKSBGUk9NIGJlbmNoX2x6NF9wcm9kdWN0czsKXHRpbWlu ZyBvZmYKXGVuZGlmCgpcZWNobyAnJwpcaWYgOmhhc196c3RkClx0aW1pbmcgb24KU0VMRUNUIGNv dW50KCopLCBzdW0oanNvbmJfYXJyYXlfbGVuZ3RoKGRhdGEtPidyZXZpZXdzJykpIEZST00gYmVu Y2hfenN0ZF9wcm9kdWN0czsKXHRpbWluZyBvZmYKXGVuZGlmCgpcZWNobyAnJwpcZWNobyAnLS0t IDJiLiBMb2cgRGF0YSAoZnVsbCBzY2FuIHdpdGggbGVuZ3RoKSAtLS0nClx0aW1pbmcgb24KU0VM RUNUIGNvdW50KCopLCBhdmcobGVuZ3RoKGRhdGEpKSwgbWF4KGxlbmd0aChkYXRhKSkgRlJPTSBi ZW5jaF9wZ2x6X2xvZ3M7Clx0aW1pbmcgb2ZmCgpcZWNobyAnJwpcaWYgOmhhc19sejQKXHRpbWlu ZyBvbgpTRUxFQ1QgY291bnQoKiksIGF2ZyhsZW5ndGgoZGF0YSkpLCBtYXgobGVuZ3RoKGRhdGEp KSBGUk9NIGJlbmNoX2x6NF9sb2dzOwpcdGltaW5nIG9mZgpcZW5kaWYKClxlY2hvICcnClxpZiA6 aGFzX3pzdGQKXHRpbWluZyBvbgpTRUxFQ1QgY291bnQoKiksIGF2ZyhsZW5ndGgoZGF0YSkpLCBt YXgobGVuZ3RoKGRhdGEpKSBGUk9NIGJlbmNoX3pzdGRfbG9nczsKXHRpbWluZyBvZmYKXGVuZGlm CgpcZWNobyAnJwpcZWNobyAnLS0tIDJjLiBIVE1MIERvY3VtZW50cyAoZnVsbCBzY2FuKSAtLS0n Clx0aW1pbmcgb24KU0VMRUNUIGNvdW50KCopLCBzdW0obGVuZ3RoKGRhdGEpKSBGUk9NIGJlbmNo X3BnbHpfaHRtbDsKXHRpbWluZyBvZmYKClxlY2hvICcnClxpZiA6aGFzX2x6NApcdGltaW5nIG9u ClNFTEVDVCBjb3VudCgqKSwgc3VtKGxlbmd0aChkYXRhKSkgRlJPTSBiZW5jaF9sejRfaHRtbDsK XHRpbWluZyBvZmYKXGVuZGlmCgpcZWNobyAnJwpcaWYgOmhhc196c3RkClx0aW1pbmcgb24KU0VM RUNUIGNvdW50KCopLCBzdW0obGVuZ3RoKGRhdGEpKSBGUk9NIGJlbmNoX3pzdGRfaHRtbDsKXHRp bWluZyBvZmYKXGVuZGlmCgpcZWNobyAnJwpcZWNobyAnLS0tIDJkLiBSZXBldGl0aXZlIERhdGEg KGZ1bGwgc2NhbikgLS0tJwpcdGltaW5nIG9uClNFTEVDVCBjb3VudCgqKSwgc3VtKGxlbmd0aChk YXRhKSkgRlJPTSBiZW5jaF9wZ2x6X3JlcGV0aXRpdmU7Clx0aW1pbmcgb2ZmCgpcZWNobyAnJwpc aWYgOmhhc19sejQKXHRpbWluZyBvbgpTRUxFQ1QgY291bnQoKiksIHN1bShsZW5ndGgoZGF0YSkp IEZST00gYmVuY2hfbHo0X3JlcGV0aXRpdmU7Clx0aW1pbmcgb2ZmClxlbmRpZgoKXGVjaG8gJycK XGlmIDpoYXNfenN0ZApcdGltaW5nIG9uClNFTEVDVCBjb3VudCgqKSwgc3VtKGxlbmd0aChkYXRh KSkgRlJPTSBiZW5jaF96c3RkX3JlcGV0aXRpdmU7Clx0aW1pbmcgb2ZmClxlbmRpZgoKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0t IEJFTkNITUFSSyAzOiBTbGljZSBBY2Nlc3MgUGVyZm9ybWFuY2UKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpcZWNobyAnJwpcZWNo byAnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09JwpcZWNobyAnQkVOQ0hNQVJLIDM6IFNMSUNFIEFDQ0VTUyAoUEFSVElBTCBERUNPTVBS RVNTSU9OKScKXGVjaG8gJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PScKClxlY2hvICcnClxlY2hvICctLS0gM2EuIExvZyBEYXRhIChm aXJzdCA1MDAgY2hhcnMpIC0tLScKXHRpbWluZyBvbgpTRUxFQ1QgY291bnQoKiksIHN1bShsZW5n dGgoc3Vic3RyaW5nKGRhdGEsIDEsIDUwMCkpKSBGUk9NIGJlbmNoX3BnbHpfbG9nczsKXHRpbWlu ZyBvZmYKClxlY2hvICcnClxpZiA6aGFzX2x6NApcdGltaW5nIG9uClNFTEVDVCBjb3VudCgqKSwg c3VtKGxlbmd0aChzdWJzdHJpbmcoZGF0YSwgMSwgNTAwKSkpIEZST00gYmVuY2hfbHo0X2xvZ3M7 Clx0aW1pbmcgb2ZmClxlbmRpZgoKXGVjaG8gJycKXGlmIDpoYXNfenN0ZApcdGltaW5nIG9uClNF TEVDVCBjb3VudCgqKSwgc3VtKGxlbmd0aChzdWJzdHJpbmcoZGF0YSwgMSwgNTAwKSkpIEZST00g YmVuY2hfenN0ZF9sb2dzOwpcdGltaW5nIG9mZgpcZW5kaWYKClxlY2hvICcnClxlY2hvICctLS0g M2IuIEhUTUwgKGZpcnN0IDIwMDAgY2hhcnMpIC0tLScKXHRpbWluZyBvbgpTRUxFQ1QgY291bnQo KiksIHN1bShsZW5ndGgoc3Vic3RyaW5nKGRhdGEsIDEsIDIwMDApKSkgRlJPTSBiZW5jaF9wZ2x6 X2h0bWw7Clx0aW1pbmcgb2ZmCgpcZWNobyAnJwpcaWYgOmhhc19sejQKXHRpbWluZyBvbgpTRUxF Q1QgY291bnQoKiksIHN1bShsZW5ndGgoc3Vic3RyaW5nKGRhdGEsIDEsIDIwMDApKSkgRlJPTSBi ZW5jaF9sejRfaHRtbDsKXHRpbWluZyBvZmYKXGVuZGlmCgpcZWNobyAnJwpcaWYgOmhhc196c3Rk Clx0aW1pbmcgb24KU0VMRUNUIGNvdW50KCopLCBzdW0obGVuZ3RoKHN1YnN0cmluZyhkYXRhLCAx LCAyMDAwKSkpIEZST00gYmVuY2hfenN0ZF9odG1sOwpcdGltaW5nIG9mZgpcZW5kaWYKCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot LSBCRU5DSE1BUksgNDogQ29tcHJlc3Npb24gUmF0aW9zICYgU3RvcmFnZSBNZXRyaWNzCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK XGVjaG8gJycKXGVjaG8gJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PScKXGVjaG8gJ0JFTkNITUFSSyA0OiBDT01QUkVTU0lPTiBWRVJJ RklDQVRJT04gJiBTVE9SQUdFIEFOQUxZU0lTJwpcZWNobyAnPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JwoKLS0gQ3JlYXRlIGhlbHBl ciB2aWV3IGZvciBUT0FTVCB0YWJsZSBhbmFseXNpcwpDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIHRv YXN0X3RhYmxlX2luZm8gQVMKU0VMRUNUCiAgICBjLnJlbG5hbWUgQVMgbWFpbl90YWJsZSwKICAg IHQucmVsbmFtZSBBUyB0b2FzdF90YWJsZSwKICAgIHQub2lkIEFTIHRvYXN0X29pZCwKICAgIHBn X3JlbGF0aW9uX3NpemUoYy5vaWQpIEFTIG1haW5fdGFibGVfc2l6ZSwKICAgIHBnX3JlbGF0aW9u X3NpemUodC5vaWQpIEFTIHRvYXN0X3RhYmxlX3NpemUsCiAgICBwZ190b3RhbF9yZWxhdGlvbl9z aXplKGMub2lkKSBBUyB0b3RhbF9zaXplLAogICAgKFNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX2Ns YXNzIHRjIFdIRVJFIHRjLnJlbHRvYXN0cmVsaWQgPSBjLm9pZCBBTkQgdGMucmVsbmFtZSA9IHQu cmVsbmFtZSkgYXMgaGFzX3RvYXN0LAogICAgKFNFTEVDVCByZWx0dXBsZXM6OmJpZ2ludCBGUk9N IHBnX2NsYXNzIFdIRVJFIG9pZCA9IHQub2lkKSBBUyB0b2FzdF9yb3dfY291bnQsCiAgICAoU0VM RUNUIHJlbHBhZ2VzIEZST00gcGdfY2xhc3MgV0hFUkUgb2lkID0gdC5vaWQpIEFTIHRvYXN0X3Bh Z2VzCkZST00gcGdfY2xhc3MgYwpKT0lOIHBnX2NsYXNzIHQgT04gYy5yZWx0b2FzdHJlbGlkID0g dC5vaWQKV0hFUkUgYy5yZWxuYW1lc3BhY2UgPSAoU0VMRUNUIG9pZCBGUk9NIHBnX25hbWVzcGFj ZSBXSEVSRSBuc3BuYW1lID0gJ3RvYXN0X2JlbmNoJykKT1JERVIgQlkgYy5yZWxuYW1lOwoKXGVj aG8gJycKXGVjaG8gJy0tLSA0YS4gUHJvZHVjdCBKU09OOiBWZXJpZnkgQ29tcHJlc3Npb24gTWV0 aG9kcyBVc2VkIC0tLScKU0VMRUNUCiAgICAnUEdMWicgYXMgZGVjbGFyZWRfbWV0aG9kLAogICAg Y291bnQoKikgYXMgdG90YWxfcm93cywKICAgIGNvdW50KCopIEZJTFRFUiAoV0hFUkUgcGdfY29s dW1uX3RvYXN0X2NodW5rX2lkKGRhdGEpIElTIE5PVCBOVUxMKSBhcyBleHRlcm5hbF9yb3dzLAog ICAgY291bnQoKikgRklMVEVSIChXSEVSRSBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YTo6dGV4 dCkgPSAncGdseicpIGFzIHBnbHpfY29tcHJlc3NlZCwKICAgIGNvdW50KCopIEZJTFRFUiAoV0hF UkUgcGdfY29sdW1uX2NvbXByZXNzaW9uKGRhdGE6OnRleHQpID0gJ2x6NCcpIGFzIGx6NF9jb21w cmVzc2VkLAogICAgY291bnQoKikgRklMVEVSIChXSEVSRSBwZ19jb2x1bW5fY29tcHJlc3Npb24o ZGF0YTo6dGV4dCkgPSAnenN0ZCcpIGFzIHpzdGRfY29tcHJlc3NlZCwKICAgIGNvdW50KCopIEZJ TFRFUiAoV0hFUkUgcGdfY29sdW1uX2NvbXByZXNzaW9uKGRhdGE6OnRleHQpIElTIE5VTEwpIGFz IHVuY29tcHJlc3NlZCwKICAgIHBnX3NpemVfcHJldHR5KHBnX3RvdGFsX3JlbGF0aW9uX3NpemUo J2JlbmNoX3BnbHpfcHJvZHVjdHMnKSkgYXMgdG90YWxfc3RvcmFnZQpGUk9NIGJlbmNoX3BnbHpf cHJvZHVjdHM7CgpcaWYgOmhhc19sejQKU0VMRUNUCiAgICAnTFo0JyBhcyBkZWNsYXJlZF9tZXRo b2QsCiAgICBjb3VudCgqKSBhcyB0b3RhbF9yb3dzLAogICAgY291bnQoKikgRklMVEVSIChXSEVS RSBwZ19jb2x1bW5fdG9hc3RfY2h1bmtfaWQoZGF0YSkgSVMgTk9UIE5VTEwpIGFzIGV4dGVybmFs X3Jvd3MsCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVtbl9jb21wcmVzc2lvbihk YXRhOjp0ZXh0KSA9ICdwZ2x6JykgYXMgcGdsel9jb21wcmVzc2VkLAogICAgY291bnQoKikgRklM VEVSIChXSEVSRSBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YTo6dGV4dCkgPSAnbHo0JykgYXMg bHo0X2NvbXByZXNzZWQsCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVtbl9jb21w cmVzc2lvbihkYXRhOjp0ZXh0KSA9ICd6c3RkJykgYXMgenN0ZF9jb21wcmVzc2VkLAogICAgY291 bnQoKikgRklMVEVSIChXSEVSRSBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YTo6dGV4dCkgSVMg TlVMTCkgYXMgdW5jb21wcmVzc2VkLAogICAgcGdfc2l6ZV9wcmV0dHkocGdfdG90YWxfcmVsYXRp b25fc2l6ZSgnYmVuY2hfbHo0X3Byb2R1Y3RzJykpIGFzIHRvdGFsX3N0b3JhZ2UKRlJPTSBiZW5j aF9sejRfcHJvZHVjdHM7ClxlbmRpZgoKXGlmIDpoYXNfenN0ZApTRUxFQ1QKICAgICdaU1REJyBh cyBkZWNsYXJlZF9tZXRob2QsCiAgICBjb3VudCgqKSBhcyB0b3RhbF9yb3dzLAogICAgY291bnQo KikgRklMVEVSIChXSEVSRSBwZ19jb2x1bW5fdG9hc3RfY2h1bmtfaWQoZGF0YSkgSVMgTk9UIE5V TEwpIGFzIGV4dGVybmFsX3Jvd3MsCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVt bl9jb21wcmVzc2lvbihkYXRhOjp0ZXh0KSA9ICdwZ2x6JykgYXMgcGdsel9jb21wcmVzc2VkLAog ICAgY291bnQoKikgRklMVEVSIChXSEVSRSBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YTo6dGV4 dCkgPSAnbHo0JykgYXMgbHo0X2NvbXByZXNzZWQsCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJF IHBnX2NvbHVtbl9jb21wcmVzc2lvbihkYXRhOjp0ZXh0KSA9ICd6c3RkJykgYXMgenN0ZF9jb21w cmVzc2VkLAogICAgY291bnQoKikgRklMVEVSIChXSEVSRSBwZ19jb2x1bW5fY29tcHJlc3Npb24o ZGF0YTo6dGV4dCkgSVMgTlVMTCkgYXMgdW5jb21wcmVzc2VkLAogICAgcGdfc2l6ZV9wcmV0dHko cGdfdG90YWxfcmVsYXRpb25fc2l6ZSgnYmVuY2hfenN0ZF9wcm9kdWN0cycpKSBhcyB0b3RhbF9z dG9yYWdlCkZST00gYmVuY2hfenN0ZF9wcm9kdWN0czsKXGVuZGlmCgpcZWNobyAnJwpcZWNobyAn LS0tIDRiLiBMb2cgRGF0YTogVmVyaWZ5IENvbXByZXNzaW9uIE1ldGhvZHMgVXNlZCAtLS0nClNF TEVDVAogICAgJ1BHTFonIGFzIGRlY2xhcmVkX21ldGhvZCwKICAgIGNvdW50KCopIGFzIHRvdGFs X3Jvd3MsCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVtbl90b2FzdF9jaHVua19p ZChkYXRhKSBJUyBOT1QgTlVMTCkgYXMgZXh0ZXJuYWxfcm93cywKICAgIGNvdW50KCopIEZJTFRF UiAoV0hFUkUgcGdfY29sdW1uX2NvbXByZXNzaW9uKGRhdGEpID0gJ3BnbHonKSBhcyBwZ2x6X2Nv bXByZXNzZWQsCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVtbl9jb21wcmVzc2lv bihkYXRhKSA9ICdsejQnKSBhcyBsejRfY29tcHJlc3NlZCwKICAgIGNvdW50KCopIEZJTFRFUiAo V0hFUkUgcGdfY29sdW1uX2NvbXByZXNzaW9uKGRhdGEpID0gJ3pzdGQnKSBhcyB6c3RkX2NvbXBy ZXNzZWQsCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVtbl9jb21wcmVzc2lvbihk YXRhKSBJUyBOVUxMKSBhcyB1bmNvbXByZXNzZWQsCiAgICBwZ19zaXplX3ByZXR0eShhdmcobGVu Z3RoKGRhdGEpKTo6YmlnaW50KSBhcyBhdmdfdW5jb21wcmVzc2VkLAogICAgcGdfc2l6ZV9wcmV0 dHkocGdfdG90YWxfcmVsYXRpb25fc2l6ZSgnYmVuY2hfcGdsel9sb2dzJykpIGFzIHRvdGFsX3N0 b3JhZ2UKRlJPTSBiZW5jaF9wZ2x6X2xvZ3M7CgpcaWYgOmhhc19sejQKU0VMRUNUCiAgICAnTFo0 JyBhcyBkZWNsYXJlZF9tZXRob2QsCiAgICBjb3VudCgqKSBhcyB0b3RhbF9yb3dzLAogICAgY291 bnQoKikgRklMVEVSIChXSEVSRSBwZ19jb2x1bW5fdG9hc3RfY2h1bmtfaWQoZGF0YSkgSVMgTk9U IE5VTEwpIGFzIGV4dGVybmFsX3Jvd3MsCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2Nv bHVtbl9jb21wcmVzc2lvbihkYXRhKSA9ICdwZ2x6JykgYXMgcGdsel9jb21wcmVzc2VkLAogICAg Y291bnQoKikgRklMVEVSIChXSEVSRSBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YSkgPSAnbHo0 JykgYXMgbHo0X2NvbXByZXNzZWQsCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVt bl9jb21wcmVzc2lvbihkYXRhKSA9ICd6c3RkJykgYXMgenN0ZF9jb21wcmVzc2VkLAogICAgY291 bnQoKikgRklMVEVSIChXSEVSRSBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YSkgSVMgTlVMTCkg YXMgdW5jb21wcmVzc2VkLAogICAgcGdfc2l6ZV9wcmV0dHkoYXZnKGxlbmd0aChkYXRhKSk6OmJp Z2ludCkgYXMgYXZnX3VuY29tcHJlc3NlZCwKICAgIHBnX3NpemVfcHJldHR5KHBnX3RvdGFsX3Jl bGF0aW9uX3NpemUoJ2JlbmNoX2x6NF9sb2dzJykpIGFzIHRvdGFsX3N0b3JhZ2UKRlJPTSBiZW5j aF9sejRfbG9nczsKXGVuZGlmCgpcaWYgOmhhc196c3RkClNFTEVDVAogICAgJ1pTVEQnIGFzIGRl Y2xhcmVkX21ldGhvZCwKICAgIGNvdW50KCopIGFzIHRvdGFsX3Jvd3MsCiAgICBjb3VudCgqKSBG SUxURVIgKFdIRVJFIHBnX2NvbHVtbl90b2FzdF9jaHVua19pZChkYXRhKSBJUyBOT1QgTlVMTCkg YXMgZXh0ZXJuYWxfcm93cywKICAgIGNvdW50KCopIEZJTFRFUiAoV0hFUkUgcGdfY29sdW1uX2Nv bXByZXNzaW9uKGRhdGEpID0gJ3BnbHonKSBhcyBwZ2x6X2NvbXByZXNzZWQsCiAgICBjb3VudCgq KSBGSUxURVIgKFdIRVJFIHBnX2NvbHVtbl9jb21wcmVzc2lvbihkYXRhKSA9ICdsejQnKSBhcyBs ejRfY29tcHJlc3NlZCwKICAgIGNvdW50KCopIEZJTFRFUiAoV0hFUkUgcGdfY29sdW1uX2NvbXBy ZXNzaW9uKGRhdGEpID0gJ3pzdGQnKSBhcyB6c3RkX2NvbXByZXNzZWQsCiAgICBjb3VudCgqKSBG SUxURVIgKFdIRVJFIHBnX2NvbHVtbl9jb21wcmVzc2lvbihkYXRhKSBJUyBOVUxMKSBhcyB1bmNv bXByZXNzZWQsCiAgICBwZ19zaXplX3ByZXR0eShhdmcobGVuZ3RoKGRhdGEpKTo6YmlnaW50KSBh cyBhdmdfdW5jb21wcmVzc2VkLAogICAgcGdfc2l6ZV9wcmV0dHkocGdfdG90YWxfcmVsYXRpb25f c2l6ZSgnYmVuY2hfenN0ZF9sb2dzJykpIGFzIHRvdGFsX3N0b3JhZ2UKRlJPTSBiZW5jaF96c3Rk X2xvZ3M7ClxlbmRpZgoKXGVjaG8gJycKXGVjaG8gJy0tLSA0Yy4gQmFzZTY0IERhdGE6IFZlcmlm eSBDb21wcmVzc2lvbiBNZXRob2RzIFVzZWQgLS0tJwpTRUxFQ1QKICAgICdQR0xaJyBhcyBkZWNs YXJlZF9tZXRob2QsCiAgICBjb3VudCgqKSBhcyB0b3RhbF9yb3dzLAogICAgY291bnQoKikgRklM VEVSIChXSEVSRSBwZ19jb2x1bW5fdG9hc3RfY2h1bmtfaWQoZGF0YSkgSVMgTk9UIE5VTEwpIGFz IGV4dGVybmFsX3Jvd3MsCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVtbl9jb21w cmVzc2lvbihkYXRhKSA9ICdwZ2x6JykgYXMgcGdsel9jb21wcmVzc2VkLAogICAgY291bnQoKikg RklMVEVSIChXSEVSRSBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YSkgPSAnbHo0JykgYXMgbHo0 X2NvbXByZXNzZWQsCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVtbl9jb21wcmVz c2lvbihkYXRhKSA9ICd6c3RkJykgYXMgenN0ZF9jb21wcmVzc2VkLAogICAgY291bnQoKikgRklM VEVSIChXSEVSRSBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YSkgSVMgTlVMTCkgYXMgdW5jb21w cmVzc2VkLAogICAgcGdfc2l6ZV9wcmV0dHkocGdfdG90YWxfcmVsYXRpb25fc2l6ZSgnYmVuY2hf cGdsel9iYXNlNjQnKSkgYXMgdG90YWxfc3RvcmFnZQpGUk9NIGJlbmNoX3BnbHpfYmFzZTY0OwoK XGlmIDpoYXNfbHo0ClNFTEVDVAogICAgJ0xaNCcgYXMgZGVjbGFyZWRfbWV0aG9kLAogICAgY291 bnQoKikgYXMgdG90YWxfcm93cywKICAgIGNvdW50KCopIEZJTFRFUiAoV0hFUkUgcGdfY29sdW1u X3RvYXN0X2NodW5rX2lkKGRhdGEpIElTIE5PVCBOVUxMKSBhcyBleHRlcm5hbF9yb3dzLAogICAg Y291bnQoKikgRklMVEVSIChXSEVSRSBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YSkgPSAncGds eicpIGFzIHBnbHpfY29tcHJlc3NlZCwKICAgIGNvdW50KCopIEZJTFRFUiAoV0hFUkUgcGdfY29s dW1uX2NvbXByZXNzaW9uKGRhdGEpID0gJ2x6NCcpIGFzIGx6NF9jb21wcmVzc2VkLAogICAgY291 bnQoKikgRklMVEVSIChXSEVSRSBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YSkgPSAnenN0ZCcp IGFzIHpzdGRfY29tcHJlc3NlZCwKICAgIGNvdW50KCopIEZJTFRFUiAoV0hFUkUgcGdfY29sdW1u X2NvbXByZXNzaW9uKGRhdGEpIElTIE5VTEwpIGFzIHVuY29tcHJlc3NlZCwKICAgIHBnX3NpemVf cHJldHR5KHBnX3RvdGFsX3JlbGF0aW9uX3NpemUoJ2JlbmNoX2x6NF9iYXNlNjQnKSkgYXMgdG90 YWxfc3RvcmFnZQpGUk9NIGJlbmNoX2x6NF9iYXNlNjQ7ClxlbmRpZgoKXGlmIDpoYXNfenN0ZApT RUxFQ1QKICAgICdaU1REJyBhcyBkZWNsYXJlZF9tZXRob2QsCiAgICBjb3VudCgqKSBhcyB0b3Rh bF9yb3dzLAogICAgY291bnQoKikgRklMVEVSIChXSEVSRSBwZ19jb2x1bW5fdG9hc3RfY2h1bmtf aWQoZGF0YSkgSVMgTk9UIE5VTEwpIGFzIGV4dGVybmFsX3Jvd3MsCiAgICBjb3VudCgqKSBGSUxU RVIgKFdIRVJFIHBnX2NvbHVtbl9jb21wcmVzc2lvbihkYXRhKSA9ICdwZ2x6JykgYXMgcGdsel9j b21wcmVzc2VkLAogICAgY291bnQoKikgRklMVEVSIChXSEVSRSBwZ19jb2x1bW5fY29tcHJlc3Np b24oZGF0YSkgPSAnbHo0JykgYXMgbHo0X2NvbXByZXNzZWQsCiAgICBjb3VudCgqKSBGSUxURVIg KFdIRVJFIHBnX2NvbHVtbl9jb21wcmVzc2lvbihkYXRhKSA9ICd6c3RkJykgYXMgenN0ZF9jb21w cmVzc2VkLAogICAgY291bnQoKikgRklMVEVSIChXSEVSRSBwZ19jb2x1bW5fY29tcHJlc3Npb24o ZGF0YSkgSVMgTlVMTCkgYXMgdW5jb21wcmVzc2VkLAogICAgcGdfc2l6ZV9wcmV0dHkocGdfdG90 YWxfcmVsYXRpb25fc2l6ZSgnYmVuY2hfenN0ZF9iYXNlNjQnKSkgYXMgdG90YWxfc3RvcmFnZQpG Uk9NIGJlbmNoX3pzdGRfYmFzZTY0OwpcZW5kaWYKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLSBCRU5DSE1BUksgNTogT3ZlcmFs bCBTdW1tYXJ5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQoKXGVjaG8gJycKXGVjaG8gJz09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScKXGVjaG8gJ0ZJTkFMIFNVTU1BUlk6 IE9WRVJBTEwgU1RPUkFHRSBDT01QQVJJU09OJwpcZWNobyAnPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JwoKQ1JFQVRFIFRFTVAgVEFC TEUgc3VtbWFyeV9zdGF0cyAoCiAgICBjb21wcmVzc2lvbl9tZXRob2QgdGV4dCwKICAgIHRvdGFs X2J5dGVzIGJpZ2ludCwKICAgIHRvdGFsX3RvYXN0X3Jvd3MgYmlnaW50LAogICAgdG90YWxfdG9h c3RfYmxvY2tzIGJpZ2ludAopOwoKSU5TRVJUIElOVE8gc3VtbWFyeV9zdGF0cwpTRUxFQ1QKICAg ICdwZ2x6JyBBUyBjb21wcmVzc2lvbl9tZXRob2QsCiAgICBwZ190b3RhbF9yZWxhdGlvbl9zaXpl KCdiZW5jaF9wZ2x6X3Byb2R1Y3RzJykgKwogICAgcGdfdG90YWxfcmVsYXRpb25fc2l6ZSgnYmVu Y2hfcGdsel9sb2dzJykgKwogICAgcGdfdG90YWxfcmVsYXRpb25fc2l6ZSgnYmVuY2hfcGdsel9o dG1sJykgKwogICAgcGdfdG90YWxfcmVsYXRpb25fc2l6ZSgnYmVuY2hfcGdsel9iYXNlNjQnKSAr CiAgICBwZ190b3RhbF9yZWxhdGlvbl9zaXplKCdiZW5jaF9wZ2x6X2NzdicpICsKICAgIHBnX3Rv dGFsX3JlbGF0aW9uX3NpemUoJ2JlbmNoX3BnbHpfcmVwZXRpdGl2ZScpIEFTIHRvdGFsX2J5dGVz LAogICAgKFNFTEVDVCBzdW0odG9hc3Rfcm93X2NvdW50KSBGUk9NIHRvYXN0X3RhYmxlX2luZm8g V0hFUkUgbWFpbl90YWJsZSBMSUtFICdiZW5jaF9wZ2x6JScpIEFTIHRvdGFsX3RvYXN0X3Jvd3Ms CiAgICAoU0VMRUNUIHN1bSh0b2FzdF9wYWdlcykgRlJPTSB0b2FzdF90YWJsZV9pbmZvIFdIRVJF IG1haW5fdGFibGUgTElLRSAnYmVuY2hfcGdseiUnKSBBUyB0b3RhbF90b2FzdF9ibG9ja3M7Cgpc aWYgOmhhc19sejQKSU5TRVJUIElOVE8gc3VtbWFyeV9zdGF0cwpTRUxFQ1QKICAgICdsejQnLAog ICAgcGdfdG90YWxfcmVsYXRpb25fc2l6ZSgnYmVuY2hfbHo0X3Byb2R1Y3RzJykgKwogICAgcGdf dG90YWxfcmVsYXRpb25fc2l6ZSgnYmVuY2hfbHo0X2xvZ3MnKSArCiAgICBwZ190b3RhbF9yZWxh dGlvbl9zaXplKCdiZW5jaF9sejRfaHRtbCcpICsKICAgIHBnX3RvdGFsX3JlbGF0aW9uX3NpemUo J2JlbmNoX2x6NF9iYXNlNjQnKSArCiAgICBwZ190b3RhbF9yZWxhdGlvbl9zaXplKCdiZW5jaF9s ejRfY3N2JykgKwogICAgcGdfdG90YWxfcmVsYXRpb25fc2l6ZSgnYmVuY2hfbHo0X3JlcGV0aXRp dmUnKSwKICAgIChTRUxFQ1Qgc3VtKHRvYXN0X3Jvd19jb3VudCkgRlJPTSB0b2FzdF90YWJsZV9p bmZvIFdIRVJFIG1haW5fdGFibGUgTElLRSAnYmVuY2hfbHo0JScpLAogICAgKFNFTEVDVCBzdW0o dG9hc3RfcGFnZXMpIEZST00gdG9hc3RfdGFibGVfaW5mbyBXSEVSRSBtYWluX3RhYmxlIExJS0Ug J2JlbmNoX2x6NCUnKTsKXGVuZGlmCgpcaWYgOmhhc196c3RkCklOU0VSVCBJTlRPIHN1bW1hcnlf c3RhdHMKU0VMRUNUCiAgICAnenN0ZCcsCiAgICBwZ190b3RhbF9yZWxhdGlvbl9zaXplKCdiZW5j aF96c3RkX3Byb2R1Y3RzJykgKwogICAgcGdfdG90YWxfcmVsYXRpb25fc2l6ZSgnYmVuY2hfenN0 ZF9sb2dzJykgKwogICAgcGdfdG90YWxfcmVsYXRpb25fc2l6ZSgnYmVuY2hfenN0ZF9odG1sJykg KwogICAgcGdfdG90YWxfcmVsYXRpb25fc2l6ZSgnYmVuY2hfenN0ZF9iYXNlNjQnKSArCiAgICBw Z190b3RhbF9yZWxhdGlvbl9zaXplKCdiZW5jaF96c3RkX2NzdicpICsKICAgIHBnX3RvdGFsX3Jl bGF0aW9uX3NpemUoJ2JlbmNoX3pzdGRfcmVwZXRpdGl2ZScpLAogICAgKFNFTEVDVCBzdW0odG9h c3Rfcm93X2NvdW50KSBGUk9NIHRvYXN0X3RhYmxlX2luZm8gV0hFUkUgbWFpbl90YWJsZSBMSUtF ICdiZW5jaF96c3RkJScpLAogICAgKFNFTEVDVCBzdW0odG9hc3RfcGFnZXMpIEZST00gdG9hc3Rf dGFibGVfaW5mbyBXSEVSRSBtYWluX3RhYmxlIExJS0UgJ2JlbmNoX3pzdGQlJyk7ClxlbmRpZgoK XGVjaG8gJycKU0VMRUNUCiAgICBjb21wcmVzc2lvbl9tZXRob2QsCiAgICBwZ19zaXplX3ByZXR0 eSh0b3RhbF9ieXRlcykgQVMgdG90YWxfc3RvcmFnZSwKICAgIHRvdGFsX2J5dGVzLAogICAgdG90 YWxfdG9hc3Rfcm93cywKICAgIHRvdGFsX3RvYXN0X2Jsb2NrcywKICAgIHBnX3NpemVfcHJldHR5 KHRvdGFsX2J5dGVzIC8gTlVMTElGKHRvdGFsX3RvYXN0X3Jvd3MsIDApKSBBUyBhdmdfYnl0ZXNf cGVyX3RvYXN0X3JvdywKICAgIHJvdW5kKDEwMC4wICogdG90YWxfYnl0ZXMgLyBOVUxMSUYoKFNF TEVDVCBtYXgodG90YWxfYnl0ZXMpIEZST00gc3VtbWFyeV9zdGF0cyksIDApLCAyKSBBUyBwY3Rf b2ZfbGFyZ2VzdCwKICAgIHJvdW5kKDEwMC4wICogKDEgLSB0b3RhbF9ieXRlczo6bnVtZXJpYyAv IE5VTExJRigoU0VMRUNUIG1heCh0b3RhbF9ieXRlcykgRlJPTSBzdW1tYXJ5X3N0YXRzKSwgMCkp LCAyKSBBUyBzcGFjZV9zYXZlZF9wY3QKRlJPTSBzdW1tYXJ5X3N0YXRzCk9SREVSIEJZIHRvdGFs X2J5dGVzOwoKXGVjaG8gJycKXGVjaG8gJy0tLSBDb21wcmVzc2lvbiBSYXRpbyBTdW1tYXJ5ICh2 cyB1bmNvbXByZXNzZWQpIC0tLScKLS0gRXN0aW1hdGUgdW5jb21wcmVzc2VkIHNpemUgZnJvbSBv bmUgdGFibGUKV0lUSCB1bmNvbXByZXNzZWQgQVMgKAogICAgU0VMRUNUIHN1bShsZW5ndGgoZGF0 YSkpIGFzIHRvdGFsIEZST00gYmVuY2hfcGdsel9sb2dzCiAgICBVTklPTiBBTEwgU0VMRUNUIHN1 bShsZW5ndGgoZGF0YSkpIEZST00gYmVuY2hfcGdsel9odG1sCiAgICBVTklPTiBBTEwgU0VMRUNU IHN1bShsZW5ndGgoZGF0YTo6dGV4dCkpIEZST00gYmVuY2hfcGdsel9wcm9kdWN0cwogICAgVU5J T04gQUxMIFNFTEVDVCBzdW0obGVuZ3RoKGRhdGEpKSBGUk9NIGJlbmNoX3BnbHpfYmFzZTY0CiAg ICBVTklPTiBBTEwgU0VMRUNUIHN1bShsZW5ndGgoZGF0YSkpIEZST00gYmVuY2hfcGdsel9jc3YK ICAgIFVOSU9OIEFMTCBTRUxFQ1Qgc3VtKGxlbmd0aChkYXRhKSkgRlJPTSBiZW5jaF9wZ2x6X3Jl cGV0aXRpdmUKKQpTRUxFQ1QKICAgIHMuY29tcHJlc3Npb25fbWV0aG9kLAogICAgcGdfc2l6ZV9w cmV0dHkoKFNFTEVDVCBzdW0odG90YWwpIEZST00gdW5jb21wcmVzc2VkKSkgQVMgZXN0aW1hdGVk X3VuY29tcHJlc3NlZCwKICAgIHBnX3NpemVfcHJldHR5KHMudG90YWxfYnl0ZXMpIEFTIGNvbXBy ZXNzZWRfc2l6ZSwKICAgIHJvdW5kKChTRUxFQ1Qgc3VtKHRvdGFsKTo6bnVtZXJpYyBGUk9NIHVu Y29tcHJlc3NlZCkgLyBOVUxMSUYocy50b3RhbF9ieXRlcywgMCksIDIpIEFTIGNvbXByZXNzaW9u X3JhdGlvCkZST00gc3VtbWFyeV9zdGF0cyBzCk9SREVSIEJZIHMudG90YWxfYnl0ZXM7CgpcZWNo byAnJwpcZWNobyAnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09JwpcZWNobyAnQkVOQ0hNQVJLIENPTVBMRVRFJwpcZWNobyAnPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jwpc ZWNobyAnJwpcZWNobyAnVG8gY2xlYW4gdXA6IERST1AgU0NIRU1BIHRvYXN0X2JlbmNoIENBU0NB REU7JwpcZWNobyAnJwo= --00000000000029c3720646a80184 Content-Type: application/octet-stream; name="v3-0001-Add-ZSTD-TOAST-compression-using-VARTAG-ONDISK-ZSTD.patch" Content-Disposition: attachment; filename="v3-0001-Add-ZSTD-TOAST-compression-using-VARTAG-ONDISK-ZSTD.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjja58pu0 RnJvbSBiMjA2ZWEwMmEyNjZhNjMwZDFjODY5ZjE5ZmEyYWRmNzE2MTY1ODA5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEaGFyaW4gU2hhaCA8ODYxNjEzMCtEaGFyaW4tc2hhaEB1c2Vy cy5ub3JlcGx5LmdpdGh1Yi5jb20+CkRhdGU6IFN1biwgMjEgRGVjIDIwMjUgMTg6Mzg6MzYgKzAx MDAKU3ViamVjdDogW1BBVENIIHYzXSBBZGQgWlNURCBjb21wcmVzc2lvbiBzdXBwb3J0IGZvciBU T0FTVCB1c2luZwogVkFSVEFHX09ORElTS19aU1REIChPcHRpb24gQiwgbGV2ZWwgMykKCi0tLQog c3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9kZXRvYXN0LmMgICAgICAgICAgIHwgIDk4ICsrKyst CiBzcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2luZGV4dHVwbGUuYyAgICAgICAgfCAgMjIgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdG9hc3RfY29tcHJlc3Npb24uYyB8IDE2NiArKysr KysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9pbnRlcm5hbHMuYyAgIHwgIDgw ICsrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90b2FzdF9oZWxwZXIuYyAgICAgICB8ICAx MSArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAgICAgIHwgICA0 ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jICAgfCAgIDYg Ky0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMgICAgICAgICAgICAgICB8ICAgNiAr LQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAgIHwgICAzICsK IHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgICB8ICAgMyArCiBz cmMvYmluL3BzcWwvZGVzY3JpYmUuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNy Yy9pbmNsdWRlL2FjY2Vzcy90b2FzdF9jb21wcmVzc2lvbi5oICAgICAgICB8ICAxNCArCiBzcmMv aW5jbHVkZS9hY2Nlc3MvdG9hc3RfaW50ZXJuYWxzLmggICAgICAgICAgfCAgMTAgKy0KIHNyYy9p bmNsdWRlL3ZhcmF0dC5oICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNyArLQogLi4uL3Jl Z3Jlc3MvZXhwZWN0ZWQvY29tcHJlc3Npb25fenN0ZC5vdXQgICAgIHwgMzYxICsrKysrKysrKysr KysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAgICAgICAgICAgIHwg ICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9jb21wcmVzc2lvbl96c3RkLnNxbCAgICAgfCAx NzggKysrKysrKysrCiAxNyBmaWxlcyBjaGFuZ2VkLCA5NDcgaW5zZXJ0aW9ucygrKSwgMzkgZGVs ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9j b21wcmVzc2lvbl96c3RkLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2NvbXByZXNzaW9uX3pzdGQuc3FsCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2NvbW1vbi9kZXRvYXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2RldG9hc3QuYwpp bmRleCA2MjY1MTc4Nzc0Mi4uZWJmMjFjODVjODYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9jb21tb24vZGV0b2FzdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vZGV0 b2FzdC5jCkBAIC00Niw3ICs0NiwyMyBAQCBkZXRvYXN0X2V4dGVybmFsX2F0dHIoc3RydWN0IHZh cmxlbmEgKmF0dHIpCiB7CiAJc3RydWN0IHZhcmxlbmEgKnJlc3VsdDsKIAotCWlmIChWQVJBVFRf SVNfRVhURVJOQUxfT05ESVNLKGF0dHIpKQorCWlmIChWQVJBVFRfSVNfRVhURVJOQUxfT05ESVNL X1pTVEQoYXR0cikpCisJeworCQkvKgorCQkgKiBUaGlzIGlzIGEgWlNURC1jb21wcmVzc2VkIGV4 dGVybmFsIGRhdHVtIC0tLSBmZXRjaCBhbmQgZGVjb21wcmVzcyBpdAorCQkgKi8KKwkJc3RydWN0 IHZhcmF0dF9leHRlcm5hbCB0b2FzdF9wb2ludGVyOworCQlzdHJ1Y3QgdmFybGVuYSAqY29tcHJl c3NlZDsKKwkJaW50MzIJCXJhd3NpemU7CisKKwkJVkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVS KHRvYXN0X3BvaW50ZXIsIGF0dHIpOworCQlyYXdzaXplID0gdG9hc3RfcG9pbnRlci52YV9yYXdz aXplIC0gVkFSSERSU1o7CisKKwkJY29tcHJlc3NlZCA9IHRvYXN0X2ZldGNoX2RhdHVtKGF0dHIp OworCQlyZXN1bHQgPSB6c3RkX2RlY29tcHJlc3NfZGF0dW0oY29tcHJlc3NlZCwgcmF3c2l6ZSk7 CisJCXBmcmVlKGNvbXByZXNzZWQpOworCX0KKwllbHNlIGlmIChWQVJBVFRfSVNfRVhURVJOQUxf T05ESVNLKGF0dHIpKQogCXsKIAkJLyoKIAkJICogVGhpcyBpcyBhbiBleHRlcm5hbCBzdG9yZWQg cGxhaW4gdmFsdWUKQEAgLTExNSw3ICsxMzEsMjMgQEAgZGV0b2FzdF9leHRlcm5hbF9hdHRyKHN0 cnVjdCB2YXJsZW5hICphdHRyKQogc3RydWN0IHZhcmxlbmEgKgogZGV0b2FzdF9hdHRyKHN0cnVj dCB2YXJsZW5hICphdHRyKQogewotCWlmIChWQVJBVFRfSVNfRVhURVJOQUxfT05ESVNLKGF0dHIp KQorCWlmIChWQVJBVFRfSVNfRVhURVJOQUxfT05ESVNLX1pTVEQoYXR0cikpCisJeworCQkvKgor CQkgKiBUaGlzIGlzIGEgWlNURC1jb21wcmVzc2VkIGV4dGVybmFsIGRhdHVtIC0tLSBmZXRjaCBh bmQgZGVjb21wcmVzcyBpdAorCQkgKi8KKwkJc3RydWN0IHZhcmF0dF9leHRlcm5hbCB0b2FzdF9w b2ludGVyOworCQlzdHJ1Y3QgdmFybGVuYSAqY29tcHJlc3NlZDsKKwkJaW50MzIJCXJhd3NpemU7 CisKKwkJVkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVSKHRvYXN0X3BvaW50ZXIsIGF0dHIpOwor CQlyYXdzaXplID0gdG9hc3RfcG9pbnRlci52YV9yYXdzaXplIC0gVkFSSERSU1o7CisKKwkJY29t cHJlc3NlZCA9IHRvYXN0X2ZldGNoX2RhdHVtKGF0dHIpOworCQlhdHRyID0genN0ZF9kZWNvbXBy ZXNzX2RhdHVtKGNvbXByZXNzZWQsIHJhd3NpemUpOworCQlwZnJlZShjb21wcmVzc2VkKTsKKwl9 CisJZWxzZSBpZiAoVkFSQVRUX0lTX0VYVEVSTkFMX09ORElTSyhhdHRyKSkKIAl7CiAJCS8qCiAJ CSAqIFRoaXMgaXMgYW4gZXh0ZXJuYWxseSBzdG9yZWQgZGF0dW0gLS0tIGZldGNoIGl0IGJhY2sg ZnJvbSB0aGVyZQpAQCAtMjIzLDcgKzI1NSwyMyBAQCBkZXRvYXN0X2F0dHJfc2xpY2Uoc3RydWN0 IHZhcmxlbmEgKmF0dHIsCiAJZWxzZSBpZiAocGdfYWRkX3MzMl9vdmVyZmxvdyhzbGljZW9mZnNl dCwgc2xpY2VsZW5ndGgsICZzbGljZWxpbWl0KSkKIAkJc2xpY2VsZW5ndGggPSBzbGljZWxpbWl0 ID0gLTE7CiAKLQlpZiAoVkFSQVRUX0lTX0VYVEVSTkFMX09ORElTSyhhdHRyKSkKKwlpZiAoVkFS QVRUX0lTX0VYVEVSTkFMX09ORElTS19aU1REKGF0dHIpKQorCXsKKwkJLyoKKwkJICogVGhpcyBp cyBhIFpTVEQtY29tcHJlc3NlZCBleHRlcm5hbCBkYXR1bSAtLS0gZmV0Y2gsIGRlY29tcHJlc3Ms IHRoZW4gc2xpY2UKKwkJICovCisJCXN0cnVjdCB2YXJhdHRfZXh0ZXJuYWwgdG9hc3RfcG9pbnRl cjsKKwkJc3RydWN0IHZhcmxlbmEgKmNvbXByZXNzZWQ7CisJCWludDMyCQlyYXdzaXplOworCisJ CVZBUkFUVF9FWFRFUk5BTF9HRVRfUE9JTlRFUih0b2FzdF9wb2ludGVyLCBhdHRyKTsKKwkJcmF3 c2l6ZSA9IHRvYXN0X3BvaW50ZXIudmFfcmF3c2l6ZSAtIFZBUkhEUlNaOworCisJCWNvbXByZXNz ZWQgPSB0b2FzdF9mZXRjaF9kYXR1bShhdHRyKTsKKwkJcHJlc2xpY2UgPSB6c3RkX2RlY29tcHJl c3NfZGF0dW1fc2xpY2UoY29tcHJlc3NlZCwgcmF3c2l6ZSwgc2xpY2VsaW1pdCA+PSAwID8gc2xp Y2VsaW1pdCA6IHJhd3NpemUpOworCQlwZnJlZShjb21wcmVzc2VkKTsKKwl9CisJZWxzZSBpZiAo VkFSQVRUX0lTX0VYVEVSTkFMX09ORElTSyhhdHRyKSkKIAl7CiAJCXN0cnVjdCB2YXJhdHRfZXh0 ZXJuYWwgdG9hc3RfcG9pbnRlcjsKIApAQCAtMjQ2LDggKzI5NCw4IEBAIGRldG9hc3RfYXR0cl9z bGljZShzdHJ1Y3QgdmFybGVuYSAqYXR0ciwKIAkJCSAqIERldGVybWluZSBtYXhpbXVtIGFtb3Vu dCBvZiBjb21wcmVzc2VkIGRhdGEgbmVlZGVkIGZvciBhIHByZWZpeAogCQkJICogb2YgYSBnaXZl biBsZW5ndGggKGFmdGVyIGRlY29tcHJlc3Npb24pLgogCQkJICoKLQkJCSAqIEF0IGxlYXN0IGZv ciBub3csIGlmIGl0J3MgTFo0IGRhdGEsIHdlJ2xsIGhhdmUgdG8gZmV0Y2ggdGhlCi0JCQkgKiB3 aG9sZSB0aGluZywgYmVjYXVzZSB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYW4gQVBJIGNhbGwg dG8KKwkJCSAqIEF0IGxlYXN0IGZvciBub3csIGlmIGl0J3MgTFo0IGRhdGEsIHdlJ2xsIGhhdmUg dG8gZmV0Y2gKKwkJCSAqIHRoZSB3aG9sZSB0aGluZywgYmVjYXVzZSB0aGVyZSBkb2Vzbid0IHNl ZW0gdG8gYmUgYW4gQVBJIGNhbGwgdG8KIAkJCSAqIGRldGVybWluZSBob3cgbXVjaCBjb21wcmVz c2VkIGRhdGEgd2UgbmVlZCB0byBiZSBzdXJlIG9mIGJlaW5nCiAJCQkgKiBhYmxlIHRvIGRlY29t cHJlc3MgdGhlIHJlcXVpcmVkIHNsaWNlLgogCQkJICovCkBAIC0zNDYsOCArMzk0LDkgQEAgdG9h c3RfZmV0Y2hfZGF0dW0oc3RydWN0IHZhcmxlbmEgKmF0dHIpCiAJc3RydWN0IHZhcmxlbmEgKnJl c3VsdDsKIAlzdHJ1Y3QgdmFyYXR0X2V4dGVybmFsIHRvYXN0X3BvaW50ZXI7CiAJaW50MzIJCWF0 dHJzaXplOworCWJvb2wJCWlzX3pzdGQgPSBWQVJBVFRfSVNfRVhURVJOQUxfT05ESVNLX1pTVEQo YXR0cik7CiAKLQlpZiAoIVZBUkFUVF9JU19FWFRFUk5BTF9PTkRJU0soYXR0cikpCisJaWYgKCFW QVJBVFRfSVNfRVhURVJOQUxfT05ESVNLKGF0dHIpICYmICFpc196c3RkKQogCQllbG9nKEVSUk9S LCAidG9hc3RfZmV0Y2hfZGF0dW0gc2hvdWxkbid0IGJlIGNhbGxlZCBmb3Igbm9uLW9uZGlzayBk YXR1bXMiKTsKIAogCS8qIE11c3QgY29weSB0byBhY2Nlc3MgYWxpZ25lZCBmaWVsZHMgKi8KQEAg LTM1Nyw2ICs0MDYsMTcgQEAgdG9hc3RfZmV0Y2hfZGF0dW0oc3RydWN0IHZhcmxlbmEgKmF0dHIp CiAKIAlyZXN1bHQgPSAoc3RydWN0IHZhcmxlbmEgKikgcGFsbG9jKGF0dHJzaXplICsgVkFSSERS U1opOwogCisJLyoKKwkgKiBTZXQgdmFybGVuYSBoZWFkZXIgZm9ybWF0IGJhc2VkIG9uIGhvdyBk YXRhIGlzIHN0b3JlZCBpbiBUT0FTVDoKKwkgKgorCSAqIEZvciBQR0xaL0xaNDogVE9BU1QgY2h1 bmtzIGNvbnRhaW4gdGNpbmZvIGNvbXByZXNzaW9uIGhlYWRlciBmb2xsb3dlZAorCSAqIGJ5IGNv bXByZXNzZWQgZGF0YS4gTWFyayBhcyBjb21wcmVzc2VkIHZhcmxlbmEgc28gZGVjb21wcmVzc2lv biBjYW4KKwkgKiByZWFkIHRoZSB0Y2luZm8gbWV0YWRhdGEuCisJICoKKwkgKiBGb3IgWlNURDog VE9BU1QgY2h1bmtzIGNvbnRhaW4gb25seSByYXcgWlNURCBjb21wcmVzc2VkIGJ5dGVzIChubyB0 Y2luZm8pLgorCSAqIFRoZSBjb21wcmVzc2lvbiBtZXRob2QgaXMgaWRlbnRpZmllZCBieSBWQVJU QUdfT05ESVNLX1pTVEQgaW5zdGVhZCBvZgorCSAqIHRjaW5mbyBiaXRzLiBNYXJrIGFzIHBsYWlu IHZhcmxlbmEgc2luY2UgdGhlcmUncyBubyB0Y2luZm8gaGVhZGVyIHRvIHBhcnNlLgorCSAqLwog CWlmIChWQVJBVFRfRVhURVJOQUxfSVNfQ09NUFJFU1NFRCh0b2FzdF9wb2ludGVyKSkKIAkJU0VU X1ZBUlNJWkVfQ09NUFJFU1NFRChyZXN1bHQsIGF0dHJzaXplICsgVkFSSERSU1opOwogCWVsc2UK QEAgLTQwMCwxOSArNDYwLDI0IEBAIHRvYXN0X2ZldGNoX2RhdHVtX3NsaWNlKHN0cnVjdCB2YXJs ZW5hICphdHRyLCBpbnQzMiBzbGljZW9mZnNldCwKIAlzdHJ1Y3QgdmFybGVuYSAqcmVzdWx0Owog CXN0cnVjdCB2YXJhdHRfZXh0ZXJuYWwgdG9hc3RfcG9pbnRlcjsKIAlpbnQzMgkJYXR0cnNpemU7 CisJYm9vbAkJaXNfenN0ZCA9IFZBUkFUVF9JU19FWFRFUk5BTF9PTkRJU0tfWlNURChhdHRyKTsK Kwlib29sCQlpc19jb21wcmVzc2VkOwogCi0JaWYgKCFWQVJBVFRfSVNfRVhURVJOQUxfT05ESVNL KGF0dHIpKQorCWlmICghVkFSQVRUX0lTX0VYVEVSTkFMX09ORElTSyhhdHRyKSAmJiAhaXNfenN0 ZCkKIAkJZWxvZyhFUlJPUiwgInRvYXN0X2ZldGNoX2RhdHVtX3NsaWNlIHNob3VsZG4ndCBiZSBj YWxsZWQgZm9yIG5vbi1vbmRpc2sgZGF0dW1zIik7CiAKIAkvKiBNdXN0IGNvcHkgdG8gYWNjZXNz IGFsaWduZWQgZmllbGRzICovCiAJVkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVSKHRvYXN0X3Bv aW50ZXIsIGF0dHIpOwogCisJLyogRm9yIFpTVEQsIHRoZSB2YXJ0YWcgaW5kaWNhdGVzIGNvbXBy ZXNzaW9uOyBmb3Igb3RoZXJzLCBjaGVjayB2YV9leHRpbmZvICovCisJaXNfY29tcHJlc3NlZCA9 IGlzX3pzdGQgfHwgVkFSQVRUX0VYVEVSTkFMX0lTX0NPTVBSRVNTRUQodG9hc3RfcG9pbnRlcik7 CisKIAkvKgogCSAqIEl0J3Mgbm9uc2Vuc2UgdG8gZmV0Y2ggc2xpY2VzIG9mIGEgY29tcHJlc3Nl ZCBkYXR1bSB1bmxlc3Mgd2hlbiBpdCdzIGEKIAkgKiBwcmVmaXggLS0gdGhpcyBpc24ndCBsb18q IHdlIGNhbid0IHJldHVybiBhIGNvbXByZXNzZWQgZGF0dW0gd2hpY2ggaXMKIAkgKiBtZWFuaW5n ZnVsIHRvIHRvYXN0IGxhdGVyLgogCSAqLwotCUFzc2VydCghVkFSQVRUX0VYVEVSTkFMX0lTX0NP TVBSRVNTRUQodG9hc3RfcG9pbnRlcikgfHwgMCA9PSBzbGljZW9mZnNldCk7CisJQXNzZXJ0KCFp c19jb21wcmVzc2VkIHx8IDAgPT0gc2xpY2VvZmZzZXQpOwogCiAJYXR0cnNpemUgPSBWQVJBVFRf RVhURVJOQUxfR0VUX0VYVFNJWkUodG9hc3RfcG9pbnRlcik7CiAKQEAgLTQyNSw3ICs0OTAsOCBA QCB0b2FzdF9mZXRjaF9kYXR1bV9zbGljZShzdHJ1Y3QgdmFybGVuYSAqYXR0ciwgaW50MzIgc2xp Y2VvZmZzZXQsCiAJLyoKIAkgKiBXaGVuIGZldGNoaW5nIGEgcHJlZml4IG9mIGEgY29tcHJlc3Nl ZCBleHRlcm5hbCBkYXR1bSwgYWNjb3VudCBmb3IgdGhlCiAJICogc3BhY2UgcmVxdWlyZWQgYnkg dmFfdGNpbmZvLCB3aGljaCBpcyBzdG9yZWQgYXQgdGhlIGJlZ2lubmluZyBhcyBhbgotCSAqIGlu dDMyIHZhbHVlLgorCSAqIGludDMyIHZhbHVlLiBUaGlzIG9ubHkgYXBwbGllcyB0byBwZ2x6L2x6 NCwgbm90IHpzdGQgKHdoaWNoIGhhcyBubworCSAqIHRjaW5mbyBoZWFkZXIpLgogCSAqLwogCWlm IChWQVJBVFRfRVhURVJOQUxfSVNfQ09NUFJFU1NFRCh0b2FzdF9wb2ludGVyKSAmJiBzbGljZWxl bmd0aCA+IDApCiAJCXNsaWNlbGVuZ3RoID0gc2xpY2VsZW5ndGggKyBzaXplb2YoaW50MzIpOwpA QCAtNDQwLDYgKzUwNiwxMCBAQCB0b2FzdF9mZXRjaF9kYXR1bV9zbGljZShzdHJ1Y3QgdmFybGVu YSAqYXR0ciwgaW50MzIgc2xpY2VvZmZzZXQsCiAKIAlyZXN1bHQgPSAoc3RydWN0IHZhcmxlbmEg KikgcGFsbG9jKHNsaWNlbGVuZ3RoICsgVkFSSERSU1opOwogCisJLyoKKwkgKiBVc2UgY29tcHJl c3NlZCB2YXJsZW5hIGZvcm1hdCBvbmx5IGZvciBwZ2x6L2x6NCB3aGljaCBoYXZlIHRjaW5mby4K KwkgKiBGb3IgenN0ZCwgdXNlIHBsYWluIGZvcm1hdCBzaW5jZSBwYXlsb2FkIGxhY2tzIHRjaW5m by4KKwkgKi8KIAlpZiAoVkFSQVRUX0VYVEVSTkFMX0lTX0NPTVBSRVNTRUQodG9hc3RfcG9pbnRl cikpCiAJCVNFVF9WQVJTSVpFX0NPTVBSRVNTRUQocmVzdWx0LCBzbGljZWxlbmd0aCArIFZBUkhE UlNaKTsKIAllbHNlCkBAIC00NzcsNiArNTQ3LDkgQEAgdG9hc3RfZGVjb21wcmVzc19kYXR1bShz dHJ1Y3QgdmFybGVuYSAqYXR0cikKIAkvKgogCSAqIEZldGNoIHRoZSBjb21wcmVzc2lvbiBtZXRo b2QgaWQgc3RvcmVkIGluIHRoZSBjb21wcmVzc2lvbiBoZWFkZXIgYW5kCiAJICogZGVjb21wcmVz cyB0aGUgZGF0YSB1c2luZyB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiByb3V0aW5lLgor CSAqCisJICogTm90ZTogWnN0ZCBleHRlcm5hbCBkYXRhIG5ldmVyIGdvZXMgdGhyb3VnaCB0aGlz IGRpc3BhdGNoIChpdCB1c2VzCisJICogVkFSVEFHX09ORElTS19aU1REIGFuZCBpcyBoYW5kbGVk IHNlcGFyYXRlbHkpLgogCSAqLwogCWNtaWQgPSBUT0FTVF9DT01QUkVTU19NRVRIT0QoYXR0cik7 CiAJc3dpdGNoIChjbWlkKQpAQCAtNTIwLDYgKzU5Myw5IEBAIHRvYXN0X2RlY29tcHJlc3NfZGF0 dW1fc2xpY2Uoc3RydWN0IHZhcmxlbmEgKmF0dHIsIGludDMyIHNsaWNlbGVuZ3RoKQogCS8qCiAJ ICogRmV0Y2ggdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBpZCBzdG9yZWQgaW4gdGhlIGNvbXByZXNz aW9uIGhlYWRlciBhbmQKIAkgKiBkZWNvbXByZXNzIHRoZSBkYXRhIHNsaWNlIHVzaW5nIHRoZSBh cHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIHJvdXRpbmUuCisJICoKKwkgKiBOb3RlOiBac3RkIGV4 dGVybmFsIGRhdGEgbmV2ZXIgZ29lcyB0aHJvdWdoIHRoaXMgZGlzcGF0Y2ggKGl0IHVzZXMKKwkg KiBWQVJUQUdfT05ESVNLX1pTVEQgYW5kIGlzIGhhbmRsZWQgc2VwYXJhdGVseSkuCiAJICovCiAJ Y21pZCA9IFRPQVNUX0NPTVBSRVNTX01FVEhPRChhdHRyKTsKIAlzd2l0Y2ggKGNtaWQpCkBAIC01 NDcsNyArNjIzLDcgQEAgdG9hc3RfcmF3X2RhdHVtX3NpemUoRGF0dW0gdmFsdWUpCiAJc3RydWN0 IHZhcmxlbmEgKmF0dHIgPSAoc3RydWN0IHZhcmxlbmEgKikgRGF0dW1HZXRQb2ludGVyKHZhbHVl KTsKIAlTaXplCQlyZXN1bHQ7CiAKLQlpZiAoVkFSQVRUX0lTX0VYVEVSTkFMX09ORElTSyhhdHRy KSkKKwlpZiAoVkFSQVRUX0lTX0VYVEVSTkFMX09ORElTSyhhdHRyKSB8fCBWQVJBVFRfSVNfRVhU RVJOQUxfT05ESVNLX1pTVEQoYXR0cikpCiAJewogCQkvKiB2YV9yYXdzaXplIGlzIHRoZSBzaXpl IG9mIHRoZSBvcmlnaW5hbCBkYXR1bSAtLSBpbmNsdWRpbmcgaGVhZGVyICovCiAJCXN0cnVjdCB2 YXJhdHRfZXh0ZXJuYWwgdG9hc3RfcG9pbnRlcjsKQEAgLTYwMyw3ICs2NzksNyBAQCB0b2FzdF9k YXR1bV9zaXplKERhdHVtIHZhbHVlKQogCXN0cnVjdCB2YXJsZW5hICphdHRyID0gKHN0cnVjdCB2 YXJsZW5hICopIERhdHVtR2V0UG9pbnRlcih2YWx1ZSk7CiAJU2l6ZQkJcmVzdWx0OwogCi0JaWYg KFZBUkFUVF9JU19FWFRFUk5BTF9PTkRJU0soYXR0cikpCisJaWYgKFZBUkFUVF9JU19FWFRFUk5B TF9PTkRJU0soYXR0cikgfHwgVkFSQVRUX0lTX0VYVEVSTkFMX09ORElTS19aU1REKGF0dHIpKQog CXsKIAkJLyoKIAkJICogQXR0cmlidXRlIGlzIHN0b3JlZCBleHRlcm5hbGx5IC0gcmV0dXJuIHRo ZSBleHRzaXplIHdoZXRoZXIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24v aW5kZXh0dXBsZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9pbmRleHR1cGxlLmMKaW5k ZXggM2VmYTM4ODljNmYuLmIyNDkwMmI3YTI1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvY29tbW9uL2luZGV4dHVwbGUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2lu ZGV4dHVwbGUuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9oZWFwdG9hc3Qu aCIKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0 dXAuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdG9hc3RfY29tcHJlc3Npb24uaCIKICNpbmNsdWRlICJh Y2Nlc3MvdG9hc3RfaW50ZXJuYWxzLmgiCiAKIC8qCkBAIC0xMjMsOSArMTI0LDI4IEBAIGluZGV4 X2Zvcm1fdHVwbGVfY29udGV4dChUdXBsZURlc2MgdHVwbGVEZXNjcmlwdG9yLAogCQkJIGF0dC0+ YXR0c3RvcmFnZSA9PSBUWVBTVE9SQUdFX01BSU4pKQogCQl7CiAJCQlEYXR1bQkJY3ZhbHVlOwor CQkJY2hhcgkJY21ldGhvZCA9IGF0dC0+YXR0Y29tcHJlc3Npb247CisKKwkJCS8qCisJCQkgKiBJ bmRleCB0dXBsZXMgbXVzdCBiZSBzZWxmLWNvbnRhaW5lZCAoY2Fubm90IHJlZmVyZW5jZSBleHRl cm5hbCBUT0FTVCkuCisJCQkgKiBaU1REIGNvbXByZXNzaW9uIHVzZXMgZXh0ZXJuYWwgc3RvcmFn ZSBvbmx5IChpZGVudGlmaWVkIGJ5IHZhcnRhZyByYXRoZXIKKwkJCSAqIHRoYW4gaW5saW5lIHRj aW5mbyBiaXRzKS4gRm9yIGluZGV4ZWQgdmFsdWVzIGRlY2xhcmVkIENPTVBSRVNTSU9OIHpzdGQs CisJCQkgKiBmYWxsIGJhY2sgdG8gaW5saW5lLWNhcGFibGUgY29tcHJlc3Npb246IHByZWZlciBM WjQgd2hlbiBhdmFpbGFibGUsIGVsc2UgUEdMWi4KKwkJCSAqCisJCQkgKiBVc2UgZXhwbGljaXQg bWV0aG9kIHJhdGhlciB0aGFuIGRlZmF1bHRfdG9hc3RfY29tcHJlc3Npb24gc28gZmFsbGJhY2sK KwkJCSAqIHdvcmtzIGV2ZW4gd2hlbiBkZWZhdWx0IGlzIHpzdGQuCisJCQkgKi8KKwkJCWlmIChj bWV0aG9kID09IFRPQVNUX1pTVERfQ09NUFJFU1NJT04pCisJCQl7CisjaWZkZWYgVVNFX0xaNAor CQkJCWNtZXRob2QgPSBUT0FTVF9MWjRfQ09NUFJFU1NJT047CisjZWxzZQorCQkJCWNtZXRob2Qg PSBUT0FTVF9QR0xaX0NPTVBSRVNTSU9OOworI2VuZGlmCisJCQl9CiAKIAkJCWN2YWx1ZSA9IHRv YXN0X2NvbXByZXNzX2RhdHVtKHVudG9hc3RlZF92YWx1ZXNbaV0sCi0JCQkJCQkJCQkJICBhdHQt PmF0dGNvbXByZXNzaW9uKTsKKwkJCQkJCQkJCQkgIGNtZXRob2QpOwogCiAJCQlpZiAoRGF0dW1H ZXRQb2ludGVyKGN2YWx1ZSkgIT0gTlVMTCkKIAkJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9jb21tb24vdG9hc3RfY29tcHJlc3Npb24uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9j b21tb24vdG9hc3RfY29tcHJlc3Npb24uYwppbmRleCA5MjZmMWU0MDA4YS4uZThhNGM2ZjMyOGQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdG9hc3RfY29tcHJlc3Npb24u YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3RvYXN0X2NvbXByZXNzaW9uLmMKQEAg LTE3LDggKzE3LDEzIEBACiAjaW5jbHVkZSA8bHo0Lmg+CiAjZW5kaWYKIAorI2lmZGVmIFVTRV9a U1RECisjaW5jbHVkZSA8enN0ZC5oPgorI2VuZGlmCisKICNpbmNsdWRlICJhY2Nlc3MvZGV0b2Fz dC5oIgogI2luY2x1ZGUgImFjY2Vzcy90b2FzdF9jb21wcmVzc2lvbi5oIgorI2luY2x1ZGUgImFj Y2Vzcy90b2FzdF9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJjb21tb24vcGdfbHpjb21wcmVzcy5o IgogI2luY2x1ZGUgInZhcmF0dC5oIgogCkBAIC0yNDUsNiArMjUwLDE0NyBAQCBsejRfZGVjb21w cmVzc19kYXR1bV9zbGljZShjb25zdCBzdHJ1Y3QgdmFybGVuYSAqdmFsdWUsIGludDMyIHNsaWNl bGVuZ3RoKQogI2VuZGlmCiB9CiAKKy8qIC0tLS0tLS0tLS0KKyAqIHpzdGQgY29tcHJlc3Npb24v ZGVjb21wcmVzc2lvbiByb3V0aW5lcworICoKKyAqIFpTVEQgdXNlcyBWQVJUQUdfT05ESVNLX1pT VEQgZm9yIGV4dGVybmFsIHN0b3JhZ2UsIG5vdCBjbWlkPTMuCisgKiBUT0FTVF9aU1REX0NPTVBS RVNTSU9OX0lEIGV4aXN0cyBvbmx5IGZvciBpbnRyb3NwZWN0aW9uIChTUUwgZnVuY3Rpb25zKS4K KyAqIC0tLS0tLS0tLS0KKyAqLworCisvKgorICogQ29tcHJlc3MgYSB2YXJsZW5hIHVzaW5nIFpT VEQuCisgKgorICogUmV0dXJucyB0aGUgY29tcHJlc3NlZCB2YXJsZW5hLCBvciBOVUxMIGlmIGNv bXByZXNzaW9uIGZhaWxzLgorICovCitzdHJ1Y3QgdmFybGVuYSAqCit6c3RkX2NvbXByZXNzX2Rh dHVtKGNvbnN0IHN0cnVjdCB2YXJsZW5hICp2YWx1ZSkKK3sKKyNpZm5kZWYgVVNFX1pTVEQKKwlO T19DT01QUkVTU0lPTl9TVVBQT1JUKCJ6c3RkIik7CisJcmV0dXJuIE5VTEw7CQkJCS8qIGtlZXAg Y29tcGlsZXIgcXVpZXQgKi8KKyNlbHNlCisJaW50MzIJCXZhbHNpemU7CisJc2l6ZV90CQlsZW47 CisJc2l6ZV90CQltYXhfc2l6ZTsKKwlzdHJ1Y3QgdmFybGVuYSAqdG1wID0gTlVMTDsKKworCXZh bHNpemUgPSBWQVJTSVpFX0FOWV9FWEhEUih2YWx1ZSk7CisKKwkvKgorCSAqIE5vIHBvaW50IGlu IHdhc3RpbmcgYSB6c3RkIGhlYWRlciBvbiBlbXB0eSBvciB2ZXJ5IHNob3J0IGlucHV0cy4KKwkg Ki8KKwlpZiAodW5saWtlbHkodmFsc2l6ZSA8IDMyKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgor CSAqIEFsbG9jYXRlIGJ1ZmZlciBmb3IgY29tcHJlc3NlZCBvdXRwdXQuIFJldHVybiBhIHBsYWlu IHZhcmxlbmEgY29udGFpbmluZworCSAqIGp1c3QgdGhlIFpTVEQgY29tcHJlc3NlZCBmcmFtZS4g dG9hc3Rfc2F2ZV9kYXR1bSgpIHdpbGwgc3RvcmUgdGhpcyB0bworCSAqIGV4dGVybmFsIFRPQVNU IHdpdGhvdXQgYWRkaW5nIHRjaW5mbyBoZWFkZXIgKGNvbXByZXNzaW9uIG1ldGhvZCBpcworCSAq IGlkZW50aWZpZWQgYnkgVkFSVEFHX09ORElTS19aU1REIGluc3RlYWQpLgorCSAqLworCW1heF9z aXplID0gWlNURF9jb21wcmVzc0JvdW5kKHZhbHNpemUpOworCXRtcCA9IChzdHJ1Y3QgdmFybGVu YSAqKSBwYWxsb2MobWF4X3NpemUgKyBWQVJIRFJTWik7CisKKwlsZW4gPSBaU1REX2NvbXByZXNz KChjaGFyICopIHRtcCArIFZBUkhEUlNaLAorCQkJCQkJbWF4X3NpemUsCisJCQkJCQlWQVJEQVRB X0FOWSh2YWx1ZSksCisJCQkJCQl2YWxzaXplLAorCQkJCQkJMyk7CQkvKiBjb21wcmVzc2lvbiBs ZXZlbCAzIGZvciBiYWxhbmNlZCBzcGVlZC9yYXRpbyAqLworCisJaWYgKHVubGlrZWx5KFpTVERf aXNFcnJvcihsZW4pKSkKKwkJZWxvZyhFUlJPUiwgInpzdGQgY29tcHJlc3Npb24gZmFpbGVkOiAl cyIsIFpTVERfZ2V0RXJyb3JOYW1lKGxlbikpOworCisJLyogZGF0YSBpcyBpbmNvbXByZXNzaWJs ZSBzbyBqdXN0IGZyZWUgdGhlIG1lbW9yeSBhbmQgcmV0dXJuIE5VTEwgKi8KKwlpZiAobGVuID49 IChzaXplX3QpIHZhbHNpemUpCisJeworCQlwZnJlZSh0bXApOworCQlyZXR1cm4gTlVMTDsKKwl9 CisKKwlTRVRfVkFSU0laRSh0bXAsIGxlbiArIFZBUkhEUlNaKTsKKworCXJldHVybiB0bXA7Cisj ZW5kaWYKK30KKworLyoKKyAqIERlY29tcHJlc3MgYSB2YXJsZW5hIHRoYXQgd2FzIGNvbXByZXNz ZWQgdXNpbmcgWlNURC4KKyAqLworc3RydWN0IHZhcmxlbmEgKgorenN0ZF9kZWNvbXByZXNzX2Rh dHVtKGNvbnN0IHN0cnVjdCB2YXJsZW5hICp2YWx1ZSwgaW50MzIgcmF3c2l6ZSkKK3sKKyNpZm5k ZWYgVVNFX1pTVEQKKwlOT19DT01QUkVTU0lPTl9TVVBQT1JUKCJ6c3RkIik7CisJcmV0dXJuIE5V TEw7CQkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKyNlbHNlCisJc2l6ZV90CQlkZWNvbXBf c2l6ZTsKKwlzdHJ1Y3QgdmFybGVuYSAqcmVzdWx0OworCisJcmVzdWx0ID0gKHN0cnVjdCB2YXJs ZW5hICopIHBhbGxvYyhyYXdzaXplICsgVkFSSERSU1opOworCisJZGVjb21wX3NpemUgPSBaU1RE X2RlY29tcHJlc3MoVkFSREFUQShyZXN1bHQpLAorCQkJCQkJCQkgICByYXdzaXplLAorCQkJCQkJ CQkgICAoY2hhciAqKSB2YWx1ZSArIFZBUkhEUlNaLAorCQkJCQkJCQkgICBWQVJTSVpFKHZhbHVl KSAtIFZBUkhEUlNaKTsKKworCWlmICh1bmxpa2VseShaU1REX2lzRXJyb3IoZGVjb21wX3NpemUp KSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVE KSwKKwkJCQkgZXJybXNnX2ludGVybmFsKCJjb21wcmVzc2VkIHpzdGQgZGF0YSBpcyBjb3JydXB0 OiAlcyIsCisJCQkJCQkJCSBaU1REX2dldEVycm9yTmFtZShkZWNvbXBfc2l6ZSkpKSk7CisKKwlT RVRfVkFSU0laRShyZXN1bHQsIGRlY29tcF9zaXplICsgVkFSSERSU1opOworCisJcmV0dXJuIHJl c3VsdDsKKyNlbmRpZgorfQorCisvKgorICogRGVjb21wcmVzcyBwYXJ0IG9mIGEgdmFybGVuYSB0 aGF0IHdhcyBjb21wcmVzc2VkIHVzaW5nIFpTVEQuCisgKgorICogTm90ZTogV2UgZGVjb21wcmVz cyB0aGUgZnVsbCBkYXR1bSB0aGVuIHJldHVybiB0aGUgcmVxdWVzdGVkIHNsaWNlLgorICogVGhp cyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBkZXRvYXN0X2F0dHJfc2xpY2UoKSBjYWxscyB0b2FzdF9m ZXRjaF9kYXR1bSgpCisgKiBmaXJzdCAod2hpY2ggZmV0Y2hlcyBhbGwgY29tcHJlc3NlZCBUT0FT VCBjaHVua3MpLCBzbyB0aGUgcmVhbCBib3R0bGVuZWNrCisgKiBpcyBUT0FTVCBJL08sIG5vdCBk ZWNvbXByZXNzaW9uIG1ldGhvZC4gWlNURCBkb2Vzbid0IHN1cHBvcnQgdHJ1ZSByYW5kb20KKyAq IGFjY2VzcyB3aXRoaW4gY29tcHJlc3NlZCBmcmFtZXMsIGFuZCBzdHJlYW1pbmcgQVBJcyBkb24n dCBoZWxwIHdoZW4gdGhlCisgKiBmdWxsIGNvbXByZXNzZWQgaW5wdXQgaXMgYWxyZWFkeSBtYXRl cmlhbGl6ZWQgaW4gbWVtb3J5LgorICovCitzdHJ1Y3QgdmFybGVuYSAqCit6c3RkX2RlY29tcHJl c3NfZGF0dW1fc2xpY2UoY29uc3Qgc3RydWN0IHZhcmxlbmEgKnZhbHVlLCBpbnQzMiByYXdzaXpl LCBpbnQzMiBzbGljZWxlbmd0aCkKK3sKKyNpZm5kZWYgVVNFX1pTVEQKKwlOT19DT01QUkVTU0lP Tl9TVVBQT1JUKCJ6c3RkIik7CisJcmV0dXJuIE5VTEw7CQkJCS8qIGtlZXAgY29tcGlsZXIgcXVp ZXQgKi8KKyNlbHNlCisJc2l6ZV90CQlkZWNvbXBfc2l6ZTsKKwlzdHJ1Y3QgdmFybGVuYSAqcmVz dWx0OworCisJLyogTGltaXQgdG8gYWN0dWFsIHNpemUgaWYgc2xpY2UgcmVxdWVzdCBpcyBsYXJn ZXIgKi8KKwlpZiAoc2xpY2VsZW5ndGggPj0gcmF3c2l6ZSkKKwkJcmV0dXJuIHpzdGRfZGVjb21w cmVzc19kYXR1bSh2YWx1ZSwgcmF3c2l6ZSk7CisKKwkvKiBEZWNvbXByZXNzIHRoZSBmdWxsIGRh dGEgKi8KKwlyZXN1bHQgPSAoc3RydWN0IHZhcmxlbmEgKikgcGFsbG9jKHJhd3NpemUgKyBWQVJI RFJTWik7CisKKwlkZWNvbXBfc2l6ZSA9IFpTVERfZGVjb21wcmVzcyhWQVJEQVRBKHJlc3VsdCks CisJCQkJCQkJCSAgIHJhd3NpemUsCisJCQkJCQkJCSAgIChjaGFyICopIHZhbHVlICsgVkFSSERS U1osCisJCQkJCQkJCSAgIFZBUlNJWkUodmFsdWUpIC0gVkFSSERSU1opOworCisJaWYgKHVubGlr ZWx5KFpTVERfaXNFcnJvcihkZWNvbXBfc2l6ZSkpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAorCQkJCSBlcnJtc2dfaW50ZXJuYWwoImNv bXByZXNzZWQgenN0ZCBkYXRhIGlzIGNvcnJ1cHQ6ICVzIiwKKwkJCQkJCQkJIFpTVERfZ2V0RXJy b3JOYW1lKGRlY29tcF9zaXplKSkpKTsKKworCS8qIFRydW5jYXRlIHRvIHJlcXVlc3RlZCBzaXpl ICovCisJU0VUX1ZBUlNJWkUocmVzdWx0LCBzbGljZWxlbmd0aCArIFZBUkhEUlNaKTsKKworCXJl dHVybiByZXN1bHQ7CisjZW5kaWYKK30KKwogLyoKICAqIEV4dHJhY3QgY29tcHJlc3Npb24gSUQg ZnJvbSBhIHZhcmxlbmEuCiAgKgpAQCAtMjU5LDggKzQwNSwxNyBAQCB0b2FzdF9nZXRfY29tcHJl c3Npb25faWQoc3RydWN0IHZhcmxlbmEgKmF0dHIpCiAJICogSWYgaXQgaXMgc3RvcmVkIGV4dGVy bmFsbHkgdGhlbiBmZXRjaCB0aGUgY29tcHJlc3Npb24gbWV0aG9kIGlkIGZyb20KIAkgKiB0aGUg ZXh0ZXJuYWwgdG9hc3QgcG9pbnRlci4gIElmIGNvbXByZXNzZWQgaW5saW5lLCBmZXRjaCBpdCBm cm9tIHRoZQogCSAqIHRvYXN0IGNvbXByZXNzaW9uIGhlYWRlci4KKwkgKgorCSAqIEZvciBaU1RE IGV4dGVybmFsIGRhdGEsIFZBUlRBR19PTkRJU0tfWlNURCBpbmRpY2F0ZXMgY29tcHJlc3Npb24s CisJICogc28gd2UgcmV0dXJuIFRPQVNUX1pTVERfQ09NUFJFU1NJT05fSUQgZGlyZWN0bHkgd2l0 aG91dCBjaGVja2luZworCSAqIHZhX2V4dGluZm8gYml0cy4KIAkgKi8KLQlpZiAoVkFSQVRUX0lT X0VYVEVSTkFMX09ORElTSyhhdHRyKSkKKwlpZiAoVkFSQVRUX0lTX0VYVEVSTkFMX09ORElTS19a U1REKGF0dHIpKQorCXsKKwkJLyogWlNURCBleHRlcm5hbCBkYXRhIHVzZXMgdmFydGFnIHRvIGlu ZGljYXRlIGNvbXByZXNzaW9uICovCisJCWNtaWQgPSBUT0FTVF9aU1REX0NPTVBSRVNTSU9OX0lE OworCX0KKwllbHNlIGlmIChWQVJBVFRfSVNfRVhURVJOQUxfT05ESVNLKGF0dHIpKQogCXsKIAkJ c3RydWN0IHZhcmF0dF9leHRlcm5hbCB0b2FzdF9wb2ludGVyOwogCkBAIC0yOTMsNiArNDQ4LDEz IEBAIENvbXByZXNzaW9uTmFtZVRvTWV0aG9kKGNvbnN0IGNoYXIgKmNvbXByZXNzaW9uKQogI2Vu ZGlmCiAJCXJldHVybiBUT0FTVF9MWjRfQ09NUFJFU1NJT047CiAJfQorCWVsc2UgaWYgKHN0cmNt cChjb21wcmVzc2lvbiwgInpzdGQiKSA9PSAwKQorCXsKKyNpZm5kZWYgVVNFX1pTVEQKKwkJTk9f Q09NUFJFU1NJT05fU1VQUE9SVCgienN0ZCIpOworI2VuZGlmCisJCXJldHVybiBUT0FTVF9aU1RE X0NPTVBSRVNTSU9OOworCX0KIAogCXJldHVybiBJbnZhbGlkQ29tcHJlc3Npb25NZXRob2Q7CiB9 CkBAIC0zMDksNiArNDcxLDggQEAgR2V0Q29tcHJlc3Npb25NZXRob2ROYW1lKGNoYXIgbWV0aG9k KQogCQkJcmV0dXJuICJwZ2x6IjsKIAkJY2FzZSBUT0FTVF9MWjRfQ09NUFJFU1NJT046CiAJCQly ZXR1cm4gImx6NCI7CisJCWNhc2UgVE9BU1RfWlNURF9DT01QUkVTU0lPTjoKKwkJCXJldHVybiAi enN0ZCI7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBjb21wcmVzc2lvbiBt ZXRob2QgJWMiLCBtZXRob2QpOwogCQkJcmV0dXJuIE5VTEw7CQkvKiBrZWVwIGNvbXBpbGVyIHF1 aWV0ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3RvYXN0X2ludGVy bmFscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9pbnRlcm5hbHMuYwppbmRl eCBkMDZhZjgyZGUxNS4uNzdmZDhiYzY0ZWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9jb21tb24vdG9hc3RfaW50ZXJuYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1v bi90b2FzdF9pbnRlcm5hbHMuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9o ZWFwYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvaGVhcHRvYXN0LmgiCiAjaW5jbHVkZSAiYWNjZXNz L3RhYmxlLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RvYXN0X2NvbXByZXNzaW9uLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3RvYXN0X2ludGVybmFscy5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9jYXRhbG9nLmgiCkBAIC02MCw2ICs2MSw5IEBAIHRvYXN0X2NvbXBy ZXNzX2RhdHVtKERhdHVtIHZhbHVlLCBjaGFyIGNtZXRob2QpCiAKIAkvKgogCSAqIENhbGwgYXBw cm9wcmlhdGUgY29tcHJlc3Npb24gcm91dGluZSBmb3IgdGhlIGNvbXByZXNzaW9uIG1ldGhvZC4K KwkgKgorCSAqIE5vdGU6IFpzdGQgZG9lcyBub3Qgc3VwcG9ydCBpbmxpbmUgY29tcHJlc3Npb24g KHJldHVybnMgTlVMTCBpbW1lZGlhdGVseSkuCisJICogWnN0ZCBkYXRhIGlzIGFsd2F5cyBzdG9y ZWQgZXh0ZXJuYWxseSB3aXRoIFZBUlRBR19PTkRJU0tfWlNURC4KIAkgKi8KIAlzd2l0Y2ggKGNt ZXRob2QpCiAJewpAQCAtNzEsNiArNzUsOSBAQCB0b2FzdF9jb21wcmVzc19kYXR1bShEYXR1bSB2 YWx1ZSwgY2hhciBjbWV0aG9kKQogCQkJdG1wID0gbHo0X2NvbXByZXNzX2RhdHVtKChjb25zdCBz dHJ1Y3QgdmFybGVuYSAqKSBEYXR1bUdldFBvaW50ZXIodmFsdWUpKTsKIAkJCWNtaWQgPSBUT0FT VF9MWjRfQ09NUFJFU1NJT05fSUQ7CiAJCQlicmVhazsKKwkJY2FzZSBUT0FTVF9aU1REX0NPTVBS RVNTSU9OOgorCQkJLyogWnN0ZDogbm8gaW5saW5lIGNvbXByZXNzaW9uLCBmb3JjZSBleHRlcm5h bCBzdG9yYWdlICovCisJCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwogCQlkZWZhdWx0 OgogCQkJZWxvZyhFUlJPUiwgImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kICVjIiwgY21ldGhv ZCk7CiAJfQpAQCAtMTEyLDEyICsxMTksMTMgQEAgdG9hc3RfY29tcHJlc3NfZGF0dW0oRGF0dW0g dmFsdWUsIGNoYXIgY21ldGhvZCkKICAqIHJlbDogdGhlIG1haW4gcmVsYXRpb24gd2UncmUgd29y a2luZyB3aXRoIChub3QgdGhlIHRvYXN0IHJlbCEpCiAgKiB2YWx1ZTogZGF0dW0gdG8gYmUgcHVz aGVkIHRvIHRvYXN0IHN0b3JhZ2UKICAqIG9sZGV4dGVybmFsOiBpZiBub3QgTlVMTCwgdG9hc3Qg cG9pbnRlciBwcmV2aW91c2x5IHJlcHJlc2VudGluZyB0aGUgZGF0dW0KKyAqIGNtZXRob2Q6IGNv bXByZXNzaW9uIG1ldGhvZCBmb3IgdGhlIGNvbHVtbiAoZnJvbSBhdHRjb21wcmVzc2lvbikKICAq IG9wdGlvbnM6IG9wdGlvbnMgdG8gYmUgcGFzc2VkIHRvIGhlYXBfaW5zZXJ0KCkgZm9yIHRvYXN0 IHJvd3MKICAqIC0tLS0tLS0tLS0KICAqLwogRGF0dW0KIHRvYXN0X3NhdmVfZGF0dW0oUmVsYXRp b24gcmVsLCBEYXR1bSB2YWx1ZSwKLQkJCQkgc3RydWN0IHZhcmxlbmEgKm9sZGV4dGVybmFsLCBp bnQgb3B0aW9ucykKKwkJCQkgc3RydWN0IHZhcmxlbmEgKm9sZGV4dGVybmFsLCBjaGFyIGNtZXRo b2QsIGludCBvcHRpb25zKQogewogCVJlbGF0aW9uCXRvYXN0cmVsOwogCVJlbGF0aW9uICAgKnRv YXN0aWR4czsKQEAgLTEzMSw2ICsxMzksOCBAQCB0b2FzdF9zYXZlX2RhdHVtKFJlbGF0aW9uIHJl bCwgRGF0dW0gdmFsdWUsCiAJUG9pbnRlcgkJZHZhbCA9IERhdHVtR2V0UG9pbnRlcih2YWx1ZSk7 CiAJaW50CQkJbnVtX2luZGV4ZXM7CiAJaW50CQkJdmFsaWRJbmRleDsKKwlib29sCQlpc196c3Rk ID0gZmFsc2U7CisJc3RydWN0IHZhcmxlbmEgKnpzdGRfY29tcHJlc3NlZCA9IE5VTEw7CiAKIAlB c3NlcnQoIVZBUkFUVF9JU19FWFRFUk5BTChkdmFsKSk7CiAKQEAgLTE3MiwxOCArMTgyLDU3IEBA IHRvYXN0X3NhdmVfZGF0dW0oUmVsYXRpb24gcmVsLCBEYXR1bSB2YWx1ZSwKIAkJLyogcmF3c2l6 ZSBpbiBhIGNvbXByZXNzZWQgZGF0dW0gaXMganVzdCB0aGUgc2l6ZSBvZiB0aGUgcGF5bG9hZCAq LwogCQl0b2FzdF9wb2ludGVyLnZhX3Jhd3NpemUgPSBWQVJEQVRBX0NPTVBSRVNTRURfR0VUX0VY VFNJWkUoZHZhbCkgKyBWQVJIRFJTWjsKIAotCQkvKiBzZXQgZXh0ZXJuYWwgc2l6ZSBhbmQgY29t cHJlc3Npb24gbWV0aG9kICovCisJCS8qCisJCSAqIElubGluZS1jb21wcmVzc2VkIGRhdGEgKG9u bHkgcGdsei9sejQsIG5ldmVyIHpzdGQpLgorCQkgKiBFbmNvZGUgY29tcHJlc3Npb24gbWV0aG9k IGZyb20gdGNpbmZvIGludG8gdmFfZXh0aW5mbyBiaXRzIDMwLTMxLgorCQkgKi8KIAkJVkFSQVRU X0VYVEVSTkFMX1NFVF9TSVpFX0FORF9DT01QUkVTU19NRVRIT0QodG9hc3RfcG9pbnRlciwgZGF0 YV90b2RvLAogCQkJCQkJCQkJCQkJCSBWQVJEQVRBX0NPTVBSRVNTRURfR0VUX0NPTVBSRVNTX01F VEhPRChkdmFsKSk7Ci0JCS8qIEFzc2VydCB0aGF0IHRoZSBudW1iZXJzIGxvb2sgbGlrZSBpdCdz IGNvbXByZXNzZWQgKi8KIAkJQXNzZXJ0KFZBUkFUVF9FWFRFUk5BTF9JU19DT01QUkVTU0VEKHRv YXN0X3BvaW50ZXIpKTsKIAl9CiAJZWxzZQogCXsKLQkJZGF0YV9wID0gVkFSREFUQShkdmFsKTsK LQkJZGF0YV90b2RvID0gVkFSU0laRShkdmFsKSAtIFZBUkhEUlNaOwotCQl0b2FzdF9wb2ludGVy LnZhX3Jhd3NpemUgPSBWQVJTSVpFKGR2YWwpOwotCQl0b2FzdF9wb2ludGVyLnZhX2V4dGluZm8g PSBkYXRhX3RvZG87CisJCS8qCisJCSAqIFVuY29tcHJlc3NlZCBkYXRhLiBGb3IgenN0ZCwgY29t cHJlc3MgaXQgbm93IGJlZm9yZSBzdG9yaW5nLgorCQkgKiBJZiBubyBjb21wcmVzc2lvbiBtZXRo b2Qgc3BlY2lmaWVkLCB1c2UgZGVmYXVsdF90b2FzdF9jb21wcmVzc2lvbi4KKwkJICovCisJCWNo YXIgZWZmZWN0aXZlX2NtZXRob2QgPSBjbWV0aG9kOworCQlpZiAoIUNvbXByZXNzaW9uTWV0aG9k SXNWYWxpZChlZmZlY3RpdmVfY21ldGhvZCkpCisJCQllZmZlY3RpdmVfY21ldGhvZCA9IGRlZmF1 bHRfdG9hc3RfY29tcHJlc3Npb247CisKKwkJaWYgKGVmZmVjdGl2ZV9jbWV0aG9kID09IFRPQVNU X1pTVERfQ09NUFJFU1NJT04pCisJCXsKKwkJCXpzdGRfY29tcHJlc3NlZCA9IHpzdGRfY29tcHJl c3NfZGF0dW0oKGNvbnN0IHN0cnVjdCB2YXJsZW5hICopIGR2YWwpOworCQkJaWYgKGxpa2VseSh6 c3RkX2NvbXByZXNzZWQgIT0gTlVMTCkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBTdWNjZXNzZnVs bHkgY29tcHJlc3NlZCB3aXRoIFpTVEQuIFN0b3JlIHJhdyBjb21wcmVzc2VkIGJ5dGVzCisJCQkJ ICogdG8gVE9BU1QgKG5vIHRjaW5mbyBoZWFkZXIpLiBWQVJUQUdfT05ESVNLX1pTVEQgaWRlbnRp ZmllcyB0aGUKKwkJCQkgKiBjb21wcmVzc2lvbiBtZXRob2QuCisJCQkJICovCisJCQkJZGF0YV9w ID0gVkFSREFUQSh6c3RkX2NvbXByZXNzZWQpOworCQkJCWRhdGFfdG9kbyA9IFZBUlNJWkUoenN0 ZF9jb21wcmVzc2VkKSAtIFZBUkhEUlNaOworCQkJCXRvYXN0X3BvaW50ZXIudmFfcmF3c2l6ZSA9 IFZBUlNJWkUoZHZhbCk7CisJCQkJdG9hc3RfcG9pbnRlci52YV9leHRpbmZvID0gZGF0YV90b2Rv OworCQkJCWlzX3pzdGQgPSB0cnVlOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIEluY29t cHJlc3NpYmxlLCBzdG9yZSB1bmNvbXByZXNzZWQgKi8KKwkJCQlkYXRhX3AgPSBWQVJEQVRBKGR2 YWwpOworCQkJCWRhdGFfdG9kbyA9IFZBUlNJWkUoZHZhbCkgLSBWQVJIRFJTWjsKKwkJCQl0b2Fz dF9wb2ludGVyLnZhX3Jhd3NpemUgPSBWQVJTSVpFKGR2YWwpOworCQkJCXRvYXN0X3BvaW50ZXIu dmFfZXh0aW5mbyA9IGRhdGFfdG9kbzsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIHBn bHovbHo0IG9yIHVuY29tcHJlc3NlZDogc3RvcmUgYXMtaXMgKi8KKwkJCWRhdGFfcCA9IFZBUkRB VEEoZHZhbCk7CisJCQlkYXRhX3RvZG8gPSBWQVJTSVpFKGR2YWwpIC0gVkFSSERSU1o7CisJCQl0 b2FzdF9wb2ludGVyLnZhX3Jhd3NpemUgPSBWQVJTSVpFKGR2YWwpOworCQkJdG9hc3RfcG9pbnRl ci52YV9leHRpbmZvID0gZGF0YV90b2RvOworCQl9CiAJfQogCiAJLyoKQEAgLTIyNyw3ICsyNzYs OCBAQCB0b2FzdF9zYXZlX2RhdHVtKFJlbGF0aW9uIHJlbCwgRGF0dW0gdmFsdWUsCiAJCXsKIAkJ CXN0cnVjdCB2YXJhdHRfZXh0ZXJuYWwgb2xkX3RvYXN0X3BvaW50ZXI7CiAKLQkJCUFzc2VydChW QVJBVFRfSVNfRVhURVJOQUxfT05ESVNLKG9sZGV4dGVybmFsKSk7CisJCQlBc3NlcnQoVkFSQVRU X0lTX0VYVEVSTkFMX09ORElTSyhvbGRleHRlcm5hbCkgfHwKKwkJCQkgICBWQVJBVFRfSVNfRVhU RVJOQUxfT05ESVNLX1pTVEQob2xkZXh0ZXJuYWwpKTsKIAkJCS8qIE11c3QgY29weSB0byBhY2Nl c3MgYWxpZ25lZCBmaWVsZHMgKi8KIAkJCVZBUkFUVF9FWFRFUk5BTF9HRVRfUE9JTlRFUihvbGRf dG9hc3RfcG9pbnRlciwgb2xkZXh0ZXJuYWwpOwogCQkJaWYgKG9sZF90b2FzdF9wb2ludGVyLnZh X3RvYXN0cmVsaWQgPT0gcmVsLT5yZF90b2FzdG9pZCkKQEAgLTM1NywxMCArNDA3LDE4IEBAIHRv YXN0X3NhdmVfZGF0dW0oUmVsYXRpb24gcmVsLCBEYXR1bSB2YWx1ZSwKIAl0YWJsZV9jbG9zZSh0 b2FzdHJlbCwgTm9Mb2NrKTsKIAogCS8qCi0JICogQ3JlYXRlIHRoZSBUT0FTVCBwb2ludGVyIHZh bHVlIHRoYXQgd2UnbGwgcmV0dXJuCisJICogRnJlZSB0aGUgWlNURCBjb21wcmVzc2VkIHZhcmxl bmEgaWYgd2UgYWxsb2NhdGVkIG9uZQorCSAqLworCWlmICh6c3RkX2NvbXByZXNzZWQgIT0gTlVM TCkKKwkJcGZyZWUoenN0ZF9jb21wcmVzc2VkKTsKKworCS8qCisJICogQ3JlYXRlIHRoZSBUT0FT VCBwb2ludGVyIHZhbHVlIHRoYXQgd2UnbGwgcmV0dXJuLgorCSAqIFVzZSBWQVJUQUdfT05ESVNL X1pTVEQgZm9yIFpTVEQtY29tcHJlc3NlZCBkYXRhIHRvIGluZGljYXRlIGNvbXByZXNzaW9uCisJ ICogdmlhIHRoZSB2YXJ0YWcgcmF0aGVyIHRoYW4gZW5jb2RpbmcgaXQgaW4gdmFfZXh0aW5mbyBi aXRzIDMwLTMxLgogCSAqLwogCXJlc3VsdCA9IChzdHJ1Y3QgdmFybGVuYSAqKSBwYWxsb2MoVE9B U1RfUE9JTlRFUl9TSVpFKTsKLQlTRVRfVkFSVEFHX0VYVEVSTkFMKHJlc3VsdCwgVkFSVEFHX09O RElTSyk7CisJU0VUX1ZBUlRBR19FWFRFUk5BTChyZXN1bHQsIGlzX3pzdGQgPyBWQVJUQUdfT05E SVNLX1pTVEQgOiBWQVJUQUdfT05ESVNLKTsKIAltZW1jcHkoVkFSREFUQV9FWFRFUk5BTChyZXN1 bHQpLCAmdG9hc3RfcG9pbnRlciwgc2l6ZW9mKHRvYXN0X3BvaW50ZXIpKTsKIAogCXJldHVybiBQ b2ludGVyR2V0RGF0dW0ocmVzdWx0KTsKQEAgLTM4NSw3ICs0NDMsNyBAQCB0b2FzdF9kZWxldGVf ZGF0dW0oUmVsYXRpb24gcmVsLCBEYXR1bSB2YWx1ZSwgYm9vbCBpc19zcGVjdWxhdGl2ZSkKIAlp bnQJCQludW1faW5kZXhlczsKIAlpbnQJCQl2YWxpZEluZGV4OwogCi0JaWYgKCFWQVJBVFRfSVNf RVhURVJOQUxfT05ESVNLKGF0dHIpKQorCWlmICghVkFSQVRUX0lTX0VYVEVSTkFMX09ORElTSyhh dHRyKSAmJiAhVkFSQVRUX0lTX0VYVEVSTkFMX09ORElTS19aU1REKGF0dHIpKQogCQlyZXR1cm47 CiAKIAkvKiBNdXN0IGNvcHkgdG8gYWNjZXNzIGFsaWduZWQgZmllbGRzICovCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdG9hc3RfaGVscGVyLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdGFibGUvdG9hc3RfaGVscGVyLmMKaW5kZXggMTFmOTdkNjUzNjcuLmYyMzcxYTYwOTcx IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdG9hc3RfaGVscGVyLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RvYXN0X2hlbHBlci5jCkBAIC03MSwxMCArNzEs MTIgQEAgdG9hc3RfdHVwbGVfaW5pdChUb2FzdFR1cGxlQ29udGV4dCAqdHRjKQogCQkJICogd2Ug aGF2ZSB0byBkZWxldGUgaXQgbGF0ZXIuCiAJCQkgKi8KIAkJCWlmIChhdHQtPmF0dGxlbiA9PSAt MSAmJiAhdHRjLT50dGNfb2xkaXNudWxsW2ldICYmCi0JCQkJVkFSQVRUX0lTX0VYVEVSTkFMX09O RElTSyhvbGRfdmFsdWUpKQorCQkJCShWQVJBVFRfSVNfRVhURVJOQUxfT05ESVNLKG9sZF92YWx1 ZSkgfHwKKwkJCQkgVkFSQVRUX0lTX0VYVEVSTkFMX09ORElTS19aU1REKG9sZF92YWx1ZSkpKQog CQkJewogCQkJCWlmICh0dGMtPnR0Y19pc251bGxbaV0gfHwKLQkJCQkJIVZBUkFUVF9JU19FWFRF Uk5BTF9PTkRJU0sobmV3X3ZhbHVlKSB8fAorCQkJCQkoIVZBUkFUVF9JU19FWFRFUk5BTF9PTkRJ U0sobmV3X3ZhbHVlKSAmJgorCQkJCQkgIVZBUkFUVF9JU19FWFRFUk5BTF9PTkRJU0tfWlNURChu ZXdfdmFsdWUpKSB8fAogCQkJCQltZW1jbXAob2xkX3ZhbHVlLCBuZXdfdmFsdWUsCiAJCQkJCQkg ICBWQVJTSVpFX0VYVEVSTkFMKG9sZF92YWx1ZSkpICE9IDApCiAJCQkJewpAQCAtMjYxLDcgKzI2 Myw3IEBAIHRvYXN0X3R1cGxlX2V4dGVybmFsaXplKFRvYXN0VHVwbGVDb250ZXh0ICp0dGMsIGlu dCBhdHRyaWJ1dGUsIGludCBvcHRpb25zKQogCiAJYXR0ci0+dGFpX2NvbGZsYWdzIHw9IFRPQVNU Q09MX0lHTk9SRTsKIAkqdmFsdWUgPSB0b2FzdF9zYXZlX2RhdHVtKHR0Yy0+dHRjX3JlbCwgb2xk X3ZhbHVlLCBhdHRyLT50YWlfb2xkZXh0ZXJuYWwsCi0JCQkJCQkJICBvcHRpb25zKTsKKwkJCQkJ CQkgIGF0dHItPnRhaV9jb21wcmVzc2lvbiwgb3B0aW9ucyk7CiAJaWYgKChhdHRyLT50YWlfY29s ZmxhZ3MgJiBUT0FTVENPTF9ORUVEU19GUkVFKSAhPSAwKQogCQlwZnJlZShEYXR1bUdldFBvaW50 ZXIob2xkX3ZhbHVlKSk7CiAJYXR0ci0+dGFpX2NvbGZsYWdzIHw9IFRPQVNUQ09MX05FRURTX0ZS RUU7CkBAIC0zMzAsNyArMzMyLDggQEAgdG9hc3RfZGVsZXRlX2V4dGVybmFsKFJlbGF0aW9uIHJl bCwgY29uc3QgRGF0dW0gKnZhbHVlcywgY29uc3QgYm9vbCAqaXNudWxsLAogCiAJCQlpZiAoaXNu dWxsW2ldKQogCQkJCWNvbnRpbnVlOwotCQkJZWxzZSBpZiAoVkFSQVRUX0lTX0VYVEVSTkFMX09O RElTSyhEYXR1bUdldFBvaW50ZXIodmFsdWUpKSkKKwkJCWVsc2UgaWYgKFZBUkFUVF9JU19FWFRF Uk5BTF9PTkRJU0soRGF0dW1HZXRQb2ludGVyKHZhbHVlKSkgfHwKKwkJCQkJIFZBUkFUVF9JU19F WFRFUk5BTF9PTkRJU0tfWlNURChEYXR1bUdldFBvaW50ZXIodmFsdWUpKSkKIAkJCQl0b2FzdF9k ZWxldGVfZGF0dW0ocmVsLCB2YWx1ZSwgaXNfc3BlY3VsYXRpdmUpOwogCQl9CiAJfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IDI3YWQ3NGZkNzU5Li4wOTUzNWFi ZDc3OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAtODEyLDcg KzgxMiw5IEBAIGxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUoU3RyaW5nSW5mbyBvdXQsIFJlbGF0aW9u IHJlbCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChh dHQtPmF0dGxlbiA9PSAtMSAmJiBWQVJBVFRfSVNfRVhURVJOQUxfT05ESVNLKERhdHVtR2V0UG9p bnRlcih2YWx1ZXNbaV0pKSkKKwkJaWYgKGF0dC0+YXR0bGVuID09IC0xICYmCisJCQkoVkFSQVRU X0lTX0VYVEVSTkFMX09ORElTSyhEYXR1bUdldFBvaW50ZXIodmFsdWVzW2ldKSkgfHwKKwkJCSBW QVJBVFRfSVNfRVhURVJOQUxfT05ESVNLX1pTVEQoRGF0dW1HZXRQb2ludGVyKHZhbHVlc1tpXSkp KSkKIAkJewogCQkJLyoKIAkJCSAqIFVuY2hhbmdlZCB0b2FzdGVkIGRhdHVtLiAgKE5vdGUgdGhh dCB3ZSBkb24ndCBwcm9taXNlIHRvIGRldGVjdApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bn b3V0cHV0L3Bnb3V0cHV0LmMKaW5kZXggNzg3OTk4YWJiOGEuLmZiZTIyOWMyNjJiIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTEzOTcsOCArMTM5 NywxMCBAQCBwZ291dHB1dF9yb3dfZmlsdGVyKFJlbGF0aW9uIHJlbGF0aW9uLCBUdXBsZVRhYmxl U2xvdCAqb2xkX3Nsb3QsCiAJCSAqIFZBUlRBR19JTkRJUkVDVC4gU2VlIFJlb3JkZXJCdWZmZXJU b2FzdFJlcGxhY2UuCiAJCSAqLwogCQlpZiAoYXR0LT5hdHRsZW4gPT0gLTEgJiYKLQkJCVZBUkFU VF9JU19FWFRFUk5BTF9PTkRJU0soRGF0dW1HZXRQb2ludGVyKG5ld19zbG90LT50dHNfdmFsdWVz W2ldKSkgJiYKLQkJCSFWQVJBVFRfSVNfRVhURVJOQUxfT05ESVNLKERhdHVtR2V0UG9pbnRlcihv bGRfc2xvdC0+dHRzX3ZhbHVlc1tpXSkpKQorCQkJKFZBUkFUVF9JU19FWFRFUk5BTF9PTkRJU0so RGF0dW1HZXRQb2ludGVyKG5ld19zbG90LT50dHNfdmFsdWVzW2ldKSkgfHwKKwkJCSBWQVJBVFRf SVNfRVhURVJOQUxfT05ESVNLX1pTVEQoRGF0dW1HZXRQb2ludGVyKG5ld19zbG90LT50dHNfdmFs dWVzW2ldKSkpICYmCisJCQkhVkFSQVRUX0lTX0VYVEVSTkFMX09ORElTSyhEYXR1bUdldFBvaW50 ZXIob2xkX3Nsb3QtPnR0c192YWx1ZXNbaV0pKSAmJgorCQkJIVZBUkFUVF9JU19FWFRFUk5BTF9P TkRJU0tfWlNURChEYXR1bUdldFBvaW50ZXIob2xkX3Nsb3QtPnR0c192YWx1ZXNbaV0pKSkKIAkJ ewogCQkJaWYgKCF0bXBfbmV3X3Nsb3QpCiAJCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvdmFybGVuYS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYwppbmRl eCA4YWRlYjhkYWRjNi4uNWY1Y2M1ZGE0NDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC92YXJsZW5hLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYwpAQCAt NDE3OSw2ICs0MTc5LDkgQEAgcGdfY29sdW1uX2NvbXByZXNzaW9uKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJCWNhc2UgVE9BU1RfTFo0X0NPTVBSRVNTSU9OX0lEOgogCQkJcmVzdWx0ID0gImx6NCI7CiAJ CQlicmVhazsKKwkJY2FzZSBUT0FTVF9aU1REX0NPTVBSRVNTSU9OX0lEOgorCQkJcmVzdWx0ID0g InpzdGQiOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBj b21wcmVzc2lvbiBtZXRob2QgaWQgJWQiLCBjbWlkKTsKIAl9CkBAIC00MjE5LDcgKzQyMjIsOCBA QCBwZ19jb2x1bW5fdG9hc3RfY2h1bmtfaWQoUEdfRlVOQ1RJT05fQVJHUykKIAogCWF0dHIgPSAo c3RydWN0IHZhcmxlbmEgKikgRGF0dW1HZXRQb2ludGVyKFBHX0dFVEFSR19EQVRVTSgwKSk7CiAK LQlpZiAoIVZBUkFUVF9JU19FWFRFUk5BTF9PTkRJU0soYXR0cikpCisJaWYgKCFWQVJBVFRfSVNf RVhURVJOQUxfT05ESVNLKGF0dHIpICYmCisJCSFWQVJBVFRfSVNfRVhURVJOQUxfT05ESVNLX1pT VEQoYXR0cikpCiAJCVBHX1JFVFVSTl9OVUxMKCk7CiAKIAlWQVJBVFRfRVhURVJOQUxfR0VUX1BP SU5URVIodG9hc3RfcG9pbnRlciwgYXR0cik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5j CmluZGV4IDA0YWIwYTI2NjA4Li41NTViMDE0MzY4NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf dGFibGVzLmMKQEAgLTQ2MCw2ICs0NjAsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19l bnVtX2VudHJ5IGRlZmF1bHRfdG9hc3RfY29tcHJlc3Npb25fb3B0aW9uc1tdID0gewogCXsicGds eiIsIFRPQVNUX1BHTFpfQ09NUFJFU1NJT04sIGZhbHNlfSwKICNpZmRlZiAgVVNFX0xaNAogCXsi bHo0IiwgVE9BU1RfTFo0X0NPTVBSRVNTSU9OLCBmYWxzZX0sCisjZW5kaWYKKyNpZmRlZiBVU0Vf WlNURAorCXsienN0ZCIsIFRPQVNUX1pTVERfQ09NUFJFU1NJT04sIGZhbHNlfSwKICNlbmRpZgog CXtOVUxMLCAwLCBmYWxzZX0KIH07CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVt cC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCAyN2Y2YmUzZjBmOC4uNGY2NjBh MTljMzUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtMTc5MDUsNiArMTc5MDUsOSBAQCBkdW1wVGFibGVTY2hl bWEoQXJjaGl2ZSAqZm91dCwgY29uc3QgVGFibGVJbmZvICp0YmluZm8pCiAJCQkJCWNhc2UgJ2wn OgogCQkJCQkJY21uYW1lID0gImx6NCI7CiAJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAneic6CisJ CQkJCQljbW5hbWUgPSAienN0ZCI7CisJCQkJCQlicmVhazsKIAkJCQkJZGVmYXVsdDoKIAkJCQkJ CWNtbmFtZSA9IE5VTEw7CiAJCQkJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9k ZXNjcmliZS5jIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKaW5kZXggMzZmMjQ1MDI4NDIuLjdk NjM3N2UyN2NhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMv YmluL3BzcWwvZGVzY3JpYmUuYwpAQCAtMjIwNiw4ICsyMjA2LDkgQEAgZGVzY3JpYmVPbmVUYWJs ZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCS8qIHRoZXNlIHN0cmluZ3MgYXJl IGxpdGVyYWwgaW4gb3VyIHN5bnRheCwgc28gbm90IHRyYW5zbGF0ZWQuICovCiAJCQlwcmludFRh YmxlQWRkQ2VsbCgmY29udCwgKGNvbXByZXNzaW9uWzBdID09ICdwJyA/ICJwZ2x6IiA6CiAJCQkJ CQkJCQkgIChjb21wcmVzc2lvblswXSA9PSAnbCcgPyAibHo0IiA6Ci0JCQkJCQkJCQkgICAoY29t cHJlc3Npb25bMF0gPT0gJ1wwJyA/ICIiIDoKLQkJCQkJCQkJCQkiPz8/IikpKSwKKwkJCQkJCQkJ CSAgIChjb21wcmVzc2lvblswXSA9PSAneicgPyAienN0ZCIgOgorCQkJCQkJCQkJICAgIChjb21w cmVzc2lvblswXSA9PSAnXDAnID8gIiIgOgorCQkJCQkJCQkJCSAiPz8/IikpKSksCiAJCQkJCQkJ ICBmYWxzZSwgZmFsc2UpOwogCQl9CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90 b2FzdF9jb21wcmVzc2lvbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RvYXN0X2NvbXByZXNzaW9u LmgKaW5kZXggMTNjNDYxMmNlZWQuLjFiZTA2YWFmY2NiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvdG9hc3RfY29tcHJlc3Npb24uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdG9h c3RfY29tcHJlc3Npb24uaApAQCAtMzMsMTIgKzMzLDE3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBp bnQgZGVmYXVsdF90b2FzdF9jb21wcmVzc2lvbjsKICAqIGJlbG93LiBXZSBtaWdodCBzb21lZGF5 IHN1cHBvcnQgbW9yZSB0aGFuIDQgY29tcHJlc3Npb24gbWV0aG9kcywgYnV0CiAgKiB3ZSBjYW4g bmV2ZXIgaGF2ZSBtb3JlIHRoYW4gNCB2YWx1ZXMgaW4gdGhpcyBlbnVtLCBiZWNhdXNlIHRoZXJl IGFyZQogICogb25seSAyIGJpdHMgYXZhaWxhYmxlIGluIHRoZSBwbGFjZXMgd2hlcmUgdGhpcyBp cyBzdG9yZWQuCisgKgorICogTm90ZTogVE9BU1RfWlNURF9DT01QUkVTU0lPTl9JRCBpcyBub3Qg dXNlZCBpbiAyLWJpdCBjbWlkIGZpZWxkcy4gWnN0ZAorICogdXNlcyBWQVJUQUdfT05ESVNLX1pT VEQgZm9yIGV4dGVybmFsIHN0b3JhZ2UuIFRoaXMgSUQgZXhpc3RzIG9ubHkgZm9yCisgKiBpbnRy b3NwZWN0aW9uIChlLmcuLCBwZ19jb2x1bW5fY29tcHJlc3Npb24oKSkuCiAgKi8KIHR5cGVkZWYg ZW51bSBUb2FzdENvbXByZXNzaW9uSWQKIHsKIAlUT0FTVF9QR0xaX0NPTVBSRVNTSU9OX0lEID0g MCwKIAlUT0FTVF9MWjRfQ09NUFJFU1NJT05fSUQgPSAxLAogCVRPQVNUX0lOVkFMSURfQ09NUFJF U1NJT05fSUQgPSAyLAorCVRPQVNUX1pTVERfQ09NUFJFU1NJT05fSUQgPSAzLAkJLyogaW50cm9z cGVjdGlvbiBvbmx5LCBub3QgaW4gY21pZCAqLwogfSBUb2FzdENvbXByZXNzaW9uSWQ7CiAKIC8q CkBAIC00OCw2ICs1Myw3IEBAIHR5cGVkZWYgZW51bSBUb2FzdENvbXByZXNzaW9uSWQKICAqLwog I2RlZmluZSBUT0FTVF9QR0xaX0NPTVBSRVNTSU9OCQkJJ3AnCiAjZGVmaW5lIFRPQVNUX0xaNF9D T01QUkVTU0lPTgkJCSdsJworI2RlZmluZSBUT0FTVF9aU1REX0NPTVBSRVNTSU9OCQkJJ3onCiAj ZGVmaW5lIEludmFsaWRDb21wcmVzc2lvbk1ldGhvZAkJJ1wwJwogCiAjZGVmaW5lIENvbXByZXNz aW9uTWV0aG9kSXNWYWxpZChjbSkgICgoY20pICE9IEludmFsaWRDb21wcmVzc2lvbk1ldGhvZCkK QEAgLTY1LDYgKzcxLDE0IEBAIGV4dGVybiBzdHJ1Y3QgdmFybGVuYSAqbHo0X2RlY29tcHJlc3Nf ZGF0dW0oY29uc3Qgc3RydWN0IHZhcmxlbmEgKnZhbHVlKTsKIGV4dGVybiBzdHJ1Y3QgdmFybGVu YSAqbHo0X2RlY29tcHJlc3NfZGF0dW1fc2xpY2UoY29uc3Qgc3RydWN0IHZhcmxlbmEgKnZhbHVl LAogCQkJCQkJCQkJCQkJICBpbnQzMiBzbGljZWxlbmd0aCk7CiAKKy8qIHpzdGQgY29tcHJlc3Np b24vZGVjb21wcmVzc2lvbiByb3V0aW5lcyAqLworZXh0ZXJuIHN0cnVjdCB2YXJsZW5hICp6c3Rk X2NvbXByZXNzX2RhdHVtKGNvbnN0IHN0cnVjdCB2YXJsZW5hICp2YWx1ZSk7CitleHRlcm4gc3Ry dWN0IHZhcmxlbmEgKnpzdGRfZGVjb21wcmVzc19kYXR1bShjb25zdCBzdHJ1Y3QgdmFybGVuYSAq dmFsdWUsCisJCQkJCQkJCQkJCSAgaW50MzIgcmF3c2l6ZSk7CitleHRlcm4gc3RydWN0IHZhcmxl bmEgKnpzdGRfZGVjb21wcmVzc19kYXR1bV9zbGljZShjb25zdCBzdHJ1Y3QgdmFybGVuYSAqdmFs dWUsCisJCQkJCQkJCQkJCQkgICBpbnQzMiByYXdzaXplLAorCQkJCQkJCQkJCQkJICAgaW50MzIg c2xpY2VsZW5ndGgpOworCiAvKiBvdGhlciBzdHVmZiAqLwogZXh0ZXJuIFRvYXN0Q29tcHJlc3Np b25JZCB0b2FzdF9nZXRfY29tcHJlc3Npb25faWQoc3RydWN0IHZhcmxlbmEgKmF0dHIpOwogZXh0 ZXJuIGNoYXIgQ29tcHJlc3Npb25OYW1lVG9NZXRob2QoY29uc3QgY2hhciAqY29tcHJlc3Npb24p OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RvYXN0X2ludGVybmFscy5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL3RvYXN0X2ludGVybmFscy5oCmluZGV4IDA2YWU4NTgzYzFlLi43N2Q1 MDgxZWVlZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RvYXN0X2ludGVybmFscy5o CisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90b2FzdF9pbnRlcm5hbHMuaApAQCAtMzYsMTEgKzM2 LDE3IEBAIHR5cGVkZWYgc3RydWN0IHRvYXN0X2NvbXByZXNzX2hlYWRlcgogI2RlZmluZSBUT0FT VF9DT01QUkVTU19NRVRIT0QocHRyKSBcCiAJKCgodG9hc3RfY29tcHJlc3NfaGVhZGVyICopIChw dHIpKS0+dGNpbmZvID4+IFZBUkxFTkFfRVhUU0laRV9CSVRTKQogCisvKgorICogU2V0IGNvbXBy ZXNzaW9uIGhlYWRlciBpbmZvLiBac3RkIHVzZXMgVE9BU1RfSU5WQUxJRF9DT01QUkVTU0lPTl9J RCwgbm90CisgKiBUT0FTVF9aU1REX0NPTVBSRVNTSU9OX0lEIChjbWlkPTMgaXMgbm90IHVzZWQg aW4gdGNpbmZvKS4KKyAqLwogI2RlZmluZSBUT0FTVF9DT01QUkVTU19TRVRfU0laRV9BTkRfQ09N UFJFU1NfTUVUSE9EKHB0ciwgbGVuLCBjbV9tZXRob2QpIFwKIAlkbyB7IFwKIAkJQXNzZXJ0KChs ZW4pID4gMCAmJiAobGVuKSA8PSBWQVJMRU5BX0VYVFNJWkVfTUFTSyk7IFwKIAkJQXNzZXJ0KChj bV9tZXRob2QpID09IFRPQVNUX1BHTFpfQ09NUFJFU1NJT05fSUQgfHwgXAotCQkJICAgKGNtX21l dGhvZCkgPT0gVE9BU1RfTFo0X0NPTVBSRVNTSU9OX0lEKTsgXAorCQkJICAgKGNtX21ldGhvZCkg PT0gVE9BU1RfTFo0X0NPTVBSRVNTSU9OX0lEIHx8IFwKKwkJCSAgIChjbV9tZXRob2QpID09IFRP QVNUX0lOVkFMSURfQ09NUFJFU1NJT05fSUQpOyBcCisJCUFzc2VydCgoY21fbWV0aG9kKSAhPSBU T0FTVF9aU1REX0NPTVBSRVNTSU9OX0lEKTsgXAogCQkoKHRvYXN0X2NvbXByZXNzX2hlYWRlciAq KSAocHRyKSktPnRjaW5mbyA9IFwKIAkJCShsZW4pIHwgKCh1aW50MzIpIChjbV9tZXRob2QpIDw8 IFZBUkxFTkFfRVhUU0laRV9CSVRTKTsgXAogCX0gd2hpbGUgKDApCkBAIC01MCw3ICs1Niw3IEBA IGV4dGVybiBPaWQJdG9hc3RfZ2V0X3ZhbGlkX2luZGV4KE9pZCB0b2FzdG9pZCwgTE9DS01PREUg bG9jayk7CiAKIGV4dGVybiB2b2lkIHRvYXN0X2RlbGV0ZV9kYXR1bShSZWxhdGlvbiByZWwsIERh dHVtIHZhbHVlLCBib29sIGlzX3NwZWN1bGF0aXZlKTsKIGV4dGVybiBEYXR1bSB0b2FzdF9zYXZl X2RhdHVtKFJlbGF0aW9uIHJlbCwgRGF0dW0gdmFsdWUsCi0JCQkJCQkJICBzdHJ1Y3QgdmFybGVu YSAqb2xkZXh0ZXJuYWwsIGludCBvcHRpb25zKTsKKwkJCQkJCQkgIHN0cnVjdCB2YXJsZW5hICpv bGRleHRlcm5hbCwgY2hhciBjbWV0aG9kLCBpbnQgb3B0aW9ucyk7CiAKIGV4dGVybiBpbnQJdG9h c3Rfb3Blbl9pbmRleGVzKFJlbGF0aW9uIHRvYXN0cmVsLAogCQkJCQkJCSAgIExPQ0tNT0RFIGxv Y2ssCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS92YXJhdHQuaCBiL3NyYy9pbmNsdWRlL3ZhcmF0 dC5oCmluZGV4IGFlZWFiZjkxNDViLi5jZjU0MzZmN2JmMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdmFyYXR0LmgKKysrIGIvc3JjL2luY2x1ZGUvdmFyYXR0LmgKQEAgLTgwLDEzICs4MCwxOSBA QCB0eXBlZGVmIHN0cnVjdCB2YXJhdHRfZXhwYW5kZWQKICAqIFR5cGUgdGFnIGZvciB0aGUgdmFy aW91cyBzb3J0cyBvZiAiVE9BU1QgcG9pbnRlciIgZGF0dW1zLiAgVGhlIHBlY3VsaWFyCiAgKiB2 YWx1ZSBmb3IgVkFSVEFHX09ORElTSyBjb21lcyBmcm9tIGEgcmVxdWlyZW1lbnQgZm9yIG9uLWRp c2sgY29tcGF0aWJpbGl0eQogICogd2l0aCBhIHByZXZpb3VzIG5vdGlvbiB0aGF0IHRoZSB0YWcg ZmllbGQgd2FzIHRoZSBwb2ludGVyIGRhdHVtJ3MgbGVuZ3RoLgorICoKKyAqIFZBUlRBR19PTkRJ U0tfWlNURCBpcyB1c2VkIGZvciBaU1RELWNvbXByZXNzZWQgZXh0ZXJuYWwgVE9BU1QgZGF0YS4K KyAqIFVubGlrZSBwZ2x6IGFuZCBsejQgd2hpY2ggc3RvcmUgdGhlIGNvbXByZXNzaW9uIG1ldGhv ZCBpbiB2YV9leHRpbmZvIGJpdHMKKyAqIDMwLTMxLCBaU1REIHVzZXMgYSBzZXBhcmF0ZSB2YXJ0 YWcgdG8gcHJlc2VydmUgYWxsIDMyIGJpdHMgb2YgdmFfZXh0aW5mbworICogZm9yIGZ1dHVyZSB1 c2UgKGNvbXByZXNzaW9uIGxldmVsLCBkaWN0aW9uYXJ5IElELCBldGMuKS4KICAqLwogdHlwZWRl ZiBlbnVtIHZhcnRhZ19leHRlcm5hbAogewogCVZBUlRBR19JTkRJUkVDVCA9IDEsCiAJVkFSVEFH X0VYUEFOREVEX1JPID0gMiwKIAlWQVJUQUdfRVhQQU5ERURfUlcgPSAzLAotCVZBUlRBR19PTkRJ U0sgPSAxOAorCVZBUlRBR19PTkRJU0sgPSAxOCwKKwlWQVJUQUdfT05ESVNLX1pTVEQgPSAxOQog fSB2YXJ0YWdfZXh0ZXJuYWw7CiAKIC8qIElzIGEgVE9BU1QgcG9pbnRlciBlaXRoZXIgdHlwZSBv ZiBleHBhbmRlZC1vYmplY3QgcG9pbnRlcj8gKi8KQEAgLTEwNSw3ICsxMTEsNyBAQCBWQVJUQUdf U0laRSh2YXJ0YWdfZXh0ZXJuYWwgdGFnKQogCQlyZXR1cm4gc2l6ZW9mKHZhcmF0dF9pbmRpcmVj dCk7CiAJZWxzZSBpZiAoVkFSVEFHX0lTX0VYUEFOREVEKHRhZykpCiAJCXJldHVybiBzaXplb2Yo dmFyYXR0X2V4cGFuZGVkKTsKLQllbHNlIGlmICh0YWcgPT0gVkFSVEFHX09ORElTSykKKwllbHNl IGlmICh0YWcgPT0gVkFSVEFHX09ORElTSyB8fCB0YWcgPT0gVkFSVEFHX09ORElTS19aU1REKQog CQlyZXR1cm4gc2l6ZW9mKHZhcmF0dF9leHRlcm5hbCk7CiAJZWxzZQogCXsKQEAgLTM2Myw2ICsz NjksMTMgQEAgVkFSQVRUX0lTX0VYVEVSTkFMX09ORElTSyhjb25zdCB2b2lkICpQVFIpCiAJcmV0 dXJuIFZBUkFUVF9JU19FWFRFUk5BTChQVFIpICYmIFZBUlRBR19FWFRFUk5BTChQVFIpID09IFZB UlRBR19PTkRJU0s7CiB9CiAKKy8qIElzIHZhcmxlbmEgZGF0dW0gYSBwb2ludGVyIHRvIG9uLWRp c2sgWlNURC1jb21wcmVzc2VkIHRvYXN0ZWQgZGF0YT8gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAor VkFSQVRUX0lTX0VYVEVSTkFMX09ORElTS19aU1REKGNvbnN0IHZvaWQgKlBUUikKK3sKKwlyZXR1 cm4gVkFSQVRUX0lTX0VYVEVSTkFMKFBUUikgJiYgVkFSVEFHX0VYVEVSTkFMKFBUUikgPT0gVkFS VEFHX09ORElTS19aU1REOworfQorCiAvKiBJcyB2YXJsZW5hIGRhdHVtIGFuIGluZGlyZWN0IHBv aW50ZXI/ICovCiBzdGF0aWMgaW5saW5lIGJvb2wKIFZBUkFUVF9JU19FWFRFUk5BTF9JTkRJUkVD VChjb25zdCB2b2lkICpQVFIpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2NvbXByZXNzaW9uX3pzdGQub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb21wcmVz c2lvbl96c3RkLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMWY1 YmI0M2I1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Nv bXByZXNzaW9uX3pzdGQub3V0CkBAIC0wLDAgKzEsMzYxIEBACistLSBUZXN0cyBmb3IgVE9BU1Qg Y29tcHJlc3Npb24gd2l0aCB6c3RkCitTRUxFQ1QgTk9UKGVudW12YWxzIEA+ICd7enN0ZH0nKSBB UyBza2lwX3Rlc3QgRlJPTSBwZ19zZXR0aW5ncyBXSEVSRQorICBuYW1lID0gJ2RlZmF1bHRfdG9h c3RfY29tcHJlc3Npb24nIFxnc2V0CitcaWYgOnNraXBfdGVzdAorICAgXGVjaG8gJyoqKiBza2lw cGluZyBUT0FTVCB0ZXN0cyB3aXRoIHpzdGQgKG5vdCBzdXBwb3J0ZWQpICoqKicKKyAgIFxxdWl0 CitcZW5kaWYKK0NSRUFURSBTQ0hFTUEgenN0ZDsKK1NFVCBzZWFyY2hfcGF0aCBUTyB6c3RkLCBw dWJsaWM7Citcc2V0IEhJREVfVE9BU1RfQ09NUFJFU1NJT04gZmFsc2UKKy0tIEVuc3VyZSB3ZSBn ZXQgc3RhYmxlIHJlc3VsdHMgcmVnYXJkbGVzcyBvZiB0aGUgaW5zdGFsbGF0aW9uJ3MgZGVmYXVs dC4KKy0tIFdlIHJlbHkgb24gdGhpcyBHVUMgdmFsdWUgZm9yIGEgZmV3IHRlc3RzLgorU0VUIGRl ZmF1bHRfdG9hc3RfY29tcHJlc3Npb24gPSAncGdseic7CistLSB0ZXN0IGNyZWF0aW5nIHRhYmxl IHdpdGggY29tcHJlc3Npb24gbWV0aG9kCitDUkVBVEUgVEFCTEUgY21kYXRhX3BnbHooZjEgdGV4 dCBDT01QUkVTU0lPTiBwZ2x6KTsKK0NSRUFURSBJTkRFWCBpZHggT04gY21kYXRhX3BnbHooZjEp OworSU5TRVJUIElOVE8gY21kYXRhX3BnbHogVkFMVUVTKHJlcGVhdCgnMTIzNDU2Nzg5MCcsIDEw MDApKTsKK1xkKyBjbWRhdGFfcGdsegorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVGFibGUgInpzdGQuY21kYXRhX3BnbHoiCisgQ29sdW1uIHwgVHlwZSB8IENvbGxhdGlv biB8IE51bGxhYmxlIHwgRGVmYXVsdCB8IFN0b3JhZ2UgIHwgQ29tcHJlc3Npb24gfCBTdGF0cyB0 YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLQorIGYxICAgICB8IHRleHQgfCAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAg ICAgfCBleHRlbmRlZCB8IHBnbHogICAgICAgIHwgICAgICAgICAgICAgIHwgCitJbmRleGVzOgor ICAgICJpZHgiIGJ0cmVlIChmMSkKKworQ1JFQVRFIFRBQkxFIGNtZGF0YV96c3RkKGYxIFRFWFQg Q09NUFJFU1NJT04genN0ZCk7CitJTlNFUlQgSU5UTyBjbWRhdGFfenN0ZCBWQUxVRVMocmVwZWF0 KCcxMjM0NTY3ODkwJywgMTAwNCkpOworXGQrIGNtZGF0YV96c3RkCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBUYWJsZSAienN0ZC5jbWRhdGFfenN0ZCIKKyBDb2x1bW4g fCBUeXBlIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IHwgU3RvcmFnZSAgfCBDb21w cmVzc2lvbiB8IFN0YXRzIHRhcmdldCB8IERlc2NyaXB0aW9uIAorLS0tLS0tLS0rLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgZjEgICAgIHwgdGV4dCB8ICAgICAgICAgICB8 ICAgICAgICAgIHwgICAgICAgICB8IGV4dGVuZGVkIHwgenN0ZCAgICAgICAgfCAgICAgICAgICAg ICAgfCAKKworLS0gdmVyaWZ5IHN0b3JlZCBjb21wcmVzc2lvbiBtZXRob2QgaW4gdGhlIGRhdGEK K1NFTEVDVCBwZ19jb2x1bW5fY29tcHJlc3Npb24oZjEpIEZST00gY21kYXRhX3pzdGQ7CisgcGdf Y29sdW1uX2NvbXByZXNzaW9uIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB6c3RkCisoMSBy b3cpCisKKy0tIGRlY29tcHJlc3MgZGF0YSBzbGljZQorU0VMRUNUIFNVQlNUUihmMSwgMjAwLCA1 KSBGUk9NIGNtZGF0YV9wZ2x6OworIHN1YnN0ciAKKy0tLS0tLS0tCisgMDEyMzQKKygxIHJvdykK KworU0VMRUNUIFNVQlNUUihmMSwgMjAwMCwgNTApIEZST00gY21kYXRhX3pzdGQ7CisgICAgICAg ICAgICAgICAgICAgICAgIHN1YnN0ciAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMDEyMzQ1Njc4OTAx MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkKKygxIHJvdykKKworLS0gY29w eSB3aXRoIHRhYmxlIGNyZWF0aW9uCitTRUxFQ1QgKiBJTlRPIGNtbW92ZTEgRlJPTSBjbWRhdGFf enN0ZDsKK1xkKyBjbW1vdmUxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFRhYmxlICJ6c3RkLmNtbW92ZTEiCisgQ29sdW1uIHwgVHlwZSB8IENvbGxhdGlvbiB8IE51 bGxhYmxlIHwgRGVmYXVsdCB8IFN0b3JhZ2UgIHwgQ29tcHJlc3Npb24gfCBTdGF0cyB0YXJnZXQg fCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLQorIGYxICAgICB8IHRleHQgfCAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfCBl eHRlbmRlZCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgCisKK1NFTEVDVCBwZ19jb2x1 bW5fY29tcHJlc3Npb24oZjEpIEZST00gY21tb3ZlMTsKKyBwZ19jb2x1bW5fY29tcHJlc3Npb24g CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHBnbHoKKygxIHJvdykKKworLS0gdGVzdCBMSUtF IElOQ0xVRElORyBDT01QUkVTU0lPTi4gIFRoZSBHVUMgZGVmYXVsdF90b2FzdF9jb21wcmVzc2lv bgorLS0gaGFzIG5vIGVmZmVjdCwgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBmcm9tIHRoZSB0YWJs ZSBiZWluZyBjb3BpZWQuCitDUkVBVEUgVEFCTEUgY21kYXRhMiAoTElLRSBjbWRhdGFfenN0ZCBJ TkNMVURJTkcgQ09NUFJFU1NJT04pOworXGQrIGNtZGF0YTIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVGFibGUgInpzdGQuY21kYXRhMiIKKyBDb2x1bW4gfCBUeXBl IHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IHwgU3RvcmFnZSAgfCBDb21wcmVzc2lv biB8IFN0YXRzIHRhcmdldCB8IERlc2NyaXB0aW9uIAorLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tCisgZjEgICAgIHwgdGV4dCB8ICAgICAgICAgICB8ICAgICAg ICAgIHwgICAgICAgICB8IGV4dGVuZGVkIHwgenN0ZCAgICAgICAgfCAgICAgICAgICAgICAgfCAK KworRFJPUCBUQUJMRSBjbWRhdGEyOworLS0gY29weSB0byBleGlzdGluZyB0YWJsZQorQ1JFQVRF IFRBQkxFIGNtbW92ZTMoZjEgdGV4dCBDT01QUkVTU0lPTiBwZ2x6KTsKK0lOU0VSVCBJTlRPIGNt bW92ZTMgU0VMRUNUICogRlJPTSBjbWRhdGFfcGdsejsKK0lOU0VSVCBJTlRPIGNtbW92ZTMgU0VM RUNUICogRlJPTSBjbWRhdGFfenN0ZDsKK1NFTEVDVCBwZ19jb2x1bW5fY29tcHJlc3Npb24oZjEp IEZST00gY21tb3ZlMzsKKyBwZ19jb2x1bW5fY29tcHJlc3Npb24gCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIHBnbHoKKyBwZ2x6CisoMiByb3dzKQorCistLSB1cGRhdGUgdXNpbmcgZGF0dW0g ZnJvbSBkaWZmZXJlbnQgdGFibGUgd2l0aCBaU1REIGRhdGEuCitDUkVBVEUgVEFCTEUgY21tb3Zl MihmMSB0ZXh0IENPTVBSRVNTSU9OIHBnbHopOworSU5TRVJUIElOVE8gY21tb3ZlMiBWQUxVRVMg KHJlcGVhdCgnMTIzNDU2Nzg5MCcsIDEwMDQpKTsKK1NFTEVDVCBwZ19jb2x1bW5fY29tcHJlc3Np b24oZjEpIEZST00gY21tb3ZlMjsKKyBwZ19jb2x1bW5fY29tcHJlc3Npb24gCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIHBnbHoKKygxIHJvdykKKworVVBEQVRFIGNtbW92ZTIgU0VUIGYxID0g Y21kYXRhX3pzdGQuZjEgRlJPTSBjbWRhdGFfenN0ZDsKK1NFTEVDVCBwZ19jb2x1bW5fY29tcHJl c3Npb24oZjEpIEZST00gY21tb3ZlMjsKKyBwZ19jb2x1bW5fY29tcHJlc3Npb24gCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIHBnbHoKKygxIHJvdykKKworLS0gdGVzdCBleHRlcm5hbGx5IHN0 b3JlZCBjb21wcmVzc2VkIGRhdGEKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGxhcmdlX3Zh bF96c3RkKCkgUkVUVVJOUyBURVhUIExBTkdVQUdFIFNRTCBBUworJ3NlbGVjdCBhcnJheV9hZ2co Zmlwc2hhc2goZzo6dGV4dCkpOjp0ZXh0IGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDI1NikgZyc7 CitDUkVBVEUgVEFCTEUgY21kYXRhMiAoZjEgdGV4dCBDT01QUkVTU0lPTiB6c3RkKTsKK0lOU0VS VCBJTlRPIGNtZGF0YTIgU0VMRUNUIGxhcmdlX3ZhbF96c3RkKCkgfHwgcmVwZWF0KCdhJywgNDAw MCk7CitTRUxFQ1QgcGdfY29sdW1uX2NvbXByZXNzaW9uKGYxKSBGUk9NIGNtZGF0YTI7CisgcGdf Y29sdW1uX2NvbXByZXNzaW9uIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB6c3RkCisoMSBy b3cpCisKK1NFTEVDVCBTVUJTVFIoZjEsIDIwMCwgNSkgRlJPTSBjbWRhdGEyOworIHN1YnN0ciAK Ky0tLS0tLS0tCisgNzkwMjYKKygxIHJvdykKKworLS0gdGVzdCBwZ19jb2x1bW5fdG9hc3RfY2h1 bmtfaWQgd2l0aCB6c3RkCitTRUxFQ1QgcGdfY29sdW1uX3RvYXN0X2NodW5rX2lkKGYxKSBJUyBO T1QgTlVMTCBBUyBoYXNfdG9hc3RfY2h1bmsgRlJPTSBjbWRhdGEyOworIGhhc190b2FzdF9jaHVu ayAKKy0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitEUk9QIFRBQkxFIGNtZGF0YTI7 CitEUk9QIEZVTkNUSU9OIGxhcmdlX3ZhbF96c3RkOworLS0gdGVzdCBjb21wcmVzc2lvbiB3aXRo IG1hdGVyaWFsaXplZCB2aWV3CitDUkVBVEUgTUFURVJJQUxJWkVEIFZJRVcgY29tcHJlc3Ntdih4 KSBBUyBTRUxFQ1QgKiBGUk9NIGNtZGF0YV96c3RkOworXGQrIGNvbXByZXNzbXYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGVyaWFsaXplZCB2aWV3ICJ6c3RkLmNvbXByZXNz bXYiCisgQ29sdW1uIHwgVHlwZSB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCB8IFN0 b3JhZ2UgIHwgQ29tcHJlc3Npb24gfCBTdGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0t LS0tKy0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIHggICAgICB8IHRleHQg fCAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfCBleHRlbmRlZCB8ICAgICAgICAgICAg IHwgICAgICAgICAgICAgIHwgCitWaWV3IGRlZmluaXRpb246CisgU0VMRUNUIGYxIEFTIHgKKyAg IEZST00gY21kYXRhX3pzdGQ7CisKK1NFTEVDVCBwZ19jb2x1bW5fY29tcHJlc3Npb24oZjEpIEZS T00gY21kYXRhX3pzdGQ7CisgcGdfY29sdW1uX2NvbXByZXNzaW9uIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyB6c3RkCisoMSByb3cpCisKK1NFTEVDVCBwZ19jb2x1bW5fY29tcHJlc3Npb24o eCkgRlJPTSBjb21wcmVzc212OworIHBnX2NvbHVtbl9jb21wcmVzc2lvbiAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgcGdsegorKDEgcm93KQorCistLSB0ZXN0IGNvbXByZXNzaW9uIHdpdGgg cGFydGl0aW9uCitDUkVBVEUgVEFCTEUgY21wYXJ0KGYxIHRleHQgQ09NUFJFU1NJT04genN0ZCkg UEFSVElUSU9OIEJZIEhBU0goZjEpOworQ1JFQVRFIFRBQkxFIGNtcGFydDEgUEFSVElUSU9OIE9G IGNtcGFydCBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDApOworQ1JFQVRF IFRBQkxFIGNtcGFydDIoZjEgdGV4dCBDT01QUkVTU0lPTiBwZ2x6KTsKK0FMVEVSIFRBQkxFIGNt cGFydCBBVFRBQ0ggUEFSVElUSU9OIGNtcGFydDIgRk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDIs IFJFTUFJTkRFUiAxKTsKK0lOU0VSVCBJTlRPIGNtcGFydCBWQUxVRVMgKHJlcGVhdCgnMTIzNDU2 Nzg5JywgMTAwNCkpOworSU5TRVJUIElOVE8gY21wYXJ0IFZBTFVFUyAocmVwZWF0KCcxMjM0NTY3 ODknLCA0MDA0KSk7CitTRUxFQ1QgcGdfY29sdW1uX2NvbXByZXNzaW9uKGYxKSBGUk9NIGNtcGFy dDE7CisgcGdfY29sdW1uX2NvbXByZXNzaW9uIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB6 c3RkCisoMSByb3cpCisKK1NFTEVDVCBwZ19jb2x1bW5fY29tcHJlc3Npb24oZjEpIEZST00gY21w YXJ0MjsKKyBwZ19jb2x1bW5fY29tcHJlc3Npb24gCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IHBnbHoKKygxIHJvdykKKworLS0gdGVzdCBjb21wcmVzc2lvbiB3aXRoIGluaGVyaXRhbmNlCitD UkVBVEUgVEFCTEUgY21pbmgoKSBJTkhFUklUUyhjbWRhdGFfcGdseiwgY21kYXRhX3pzdGQpOyAt LSBlcnJvcgorTk9USUNFOiAgbWVyZ2luZyBtdWx0aXBsZSBpbmhlcml0ZWQgZGVmaW5pdGlvbnMg b2YgY29sdW1uICJmMSIKK0VSUk9SOiAgY29sdW1uICJmMSIgaGFzIGEgY29tcHJlc3Npb24gbWV0 aG9kIGNvbmZsaWN0CitERVRBSUw6ICBwZ2x6IHZlcnN1cyB6c3RkCitDUkVBVEUgVEFCTEUgY21p bmgoZjEgVEVYVCBDT01QUkVTU0lPTiB6c3RkKSBJTkhFUklUUyhjbWRhdGFfcGdseik7IC0tIGVy cm9yCitOT1RJQ0U6ICBtZXJnaW5nIGNvbHVtbiAiZjEiIHdpdGggaW5oZXJpdGVkIGRlZmluaXRp b24KK0VSUk9SOiAgY29sdW1uICJmMSIgaGFzIGEgY29tcHJlc3Npb24gbWV0aG9kIGNvbmZsaWN0 CitERVRBSUw6ICBwZ2x6IHZlcnN1cyB6c3RkCitDUkVBVEUgVEFCTEUgY21kYXRhMyhmMSB0ZXh0 KTsKK0NSRUFURSBUQUJMRSBjbWluaCgpIElOSEVSSVRTIChjbWRhdGFfcGdseiwgY21kYXRhMyk7 CitOT1RJQ0U6ICBtZXJnaW5nIG11bHRpcGxlIGluaGVyaXRlZCBkZWZpbml0aW9ucyBvZiBjb2x1 bW4gImYxIgorLS0gdGVzdCBkZWZhdWx0X3RvYXN0X2NvbXByZXNzaW9uIEdVQworU0VUIGRlZmF1 bHRfdG9hc3RfY29tcHJlc3Npb24gPSAnenN0ZCc7CistLSB0ZXN0IGFsdGVyIGNvbXByZXNzaW9u IG1ldGhvZAorQUxURVIgVEFCTEUgY21kYXRhX3BnbHogQUxURVIgQ09MVU1OIGYxIFNFVCBDT01Q UkVTU0lPTiB6c3RkOworSU5TRVJUIElOVE8gY21kYXRhX3BnbHogVkFMVUVTIChyZXBlYXQoJzEy MzQ1Njc4OScsIDQwMDQpKTsKK1xkKyBjbWRhdGFfcGdsegorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVGFibGUgInpzdGQuY21kYXRhX3BnbHoiCisgQ29sdW1uIHwgVHlw ZSB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCB8IFN0b3JhZ2UgIHwgQ29tcHJlc3Np b24gfCBTdGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIGYxICAgICB8IHRleHQgfCAgICAgICAgICAgfCAgICAg ICAgICB8ICAgICAgICAgfCBleHRlbmRlZCB8IHpzdGQgICAgICAgIHwgICAgICAgICAgICAgIHwg CitJbmRleGVzOgorICAgICJpZHgiIGJ0cmVlIChmMSkKK0NoaWxkIHRhYmxlczogY21pbmgKKwor U0VMRUNUIHBnX2NvbHVtbl9jb21wcmVzc2lvbihmMSkgRlJPTSBjbWRhdGFfcGdsejsKKyBwZ19j b2x1bW5fY29tcHJlc3Npb24gCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHBnbHoKKyB6c3Rk CisoMiByb3dzKQorCitBTFRFUiBUQUJMRSBjbWRhdGFfcGdseiBBTFRFUiBDT0xVTU4gZjEgU0VU IENPTVBSRVNTSU9OIHBnbHo7CistLSB0ZXN0IGFsdGVyIGNvbXByZXNzaW9uIG1ldGhvZCBmb3Ig bWF0ZXJpYWxpemVkIHZpZXdzCitBTFRFUiBNQVRFUklBTElaRUQgVklFVyBjb21wcmVzc212IEFM VEVSIENPTFVNTiB4IFNFVCBDT01QUkVTU0lPTiB6c3RkOworXGQrIGNvbXByZXNzbXYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGVyaWFsaXplZCB2aWV3ICJ6c3RkLmNvbXBy ZXNzbXYiCisgQ29sdW1uIHwgVHlwZSB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCB8 IFN0b3JhZ2UgIHwgQ29tcHJlc3Npb24gfCBTdGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0t LS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIHggICAgICB8IHRl eHQgfCAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfCBleHRlbmRlZCB8IHpzdGQgICAg ICAgIHwgICAgICAgICAgICAgIHwgCitWaWV3IGRlZmluaXRpb246CisgU0VMRUNUIGYxIEFTIHgK KyAgIEZST00gY21kYXRhX3pzdGQ7CisKKy0tIHRlc3QgYWx0ZXIgY29tcHJlc3Npb24gbWV0aG9k IGZvciBwYXJ0aXRpb25lZCB0YWJsZXMKK0FMVEVSIFRBQkxFIGNtcGFydDEgQUxURVIgQ09MVU1O IGYxIFNFVCBDT01QUkVTU0lPTiBwZ2x6OworQUxURVIgVEFCTEUgY21wYXJ0MiBBTFRFUiBDT0xV TU4gZjEgU0VUIENPTVBSRVNTSU9OIHpzdGQ7CistLSBuZXcgZGF0YSBzaG91bGQgYmUgY29tcHJl c3NlZCB3aXRoIHRoZSBjdXJyZW50IGNvbXByZXNzaW9uIG1ldGhvZAorSU5TRVJUIElOVE8gY21w YXJ0IFZBTFVFUyAocmVwZWF0KCcxMjM0NTY3ODknLCAxMDA0KSk7CitJTlNFUlQgSU5UTyBjbXBh cnQgVkFMVUVTIChyZXBlYXQoJzEyMzQ1Njc4OScsIDQwMDQpKTsKK1NFTEVDVCBwZ19jb2x1bW5f Y29tcHJlc3Npb24oZjEpIEZST00gY21wYXJ0MTsKKyBwZ19jb2x1bW5fY29tcHJlc3Npb24gCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHpzdGQKKyBwZ2x6CisoMiByb3dzKQorCitTRUxFQ1Qg cGdfY29sdW1uX2NvbXByZXNzaW9uKGYxKSBGUk9NIGNtcGFydDI7CisgcGdfY29sdW1uX2NvbXBy ZXNzaW9uIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBwZ2x6CisgenN0ZAorKDIgcm93cykK KworLS0gdGVzdCBleHByZXNzaW9uIGluZGV4CitDUkVBVEUgVEFCTEUgY21kYXRhMiAoZjEgVEVY VCBDT01QUkVTU0lPTiBwZ2x6LCBmMiBURVhUIENPTVBSRVNTSU9OIHpzdGQpOworQ1JFQVRFIFVO SVFVRSBJTkRFWCBpZHgxIE9OIGNtZGF0YTIgKChmMSB8fCBmMikpOworSU5TRVJUIElOVE8gY21k YXRhMiBWQUxVRVMoKFNFTEVDVCBhcnJheV9hZ2coZmlwc2hhc2goZzo6VEVYVCkpOjpURVhUIEZS T00KK2dlbmVyYXRlX3NlcmllcygxLCA1MCkgZyksIFZFUlNJT04oKSk7CistLSB0ZXN0IGNyb3Nz LW1ldGhvZCBvcGVyYXRpb25zICh6c3RkIDwtPiBsejQgaWYgYXZhaWxhYmxlKQorLS0gVGhpcyB0 ZXN0cyBpbnRlcmFjdGlvbiBiZXR3ZWVuIGFsbCB0aHJlZSBjb21wcmVzc2lvbiBtZXRob2RzCitT RUxFQ1QgZW51bXZhbHMgQD4gJ3tsejR9JyBBUyBoYXNfbHo0IEZST00gcGdfc2V0dGluZ3MgV0hF UkUKKyAgbmFtZSA9ICdkZWZhdWx0X3RvYXN0X2NvbXByZXNzaW9uJyBcZ3NldAorXGlmIDpoYXNf bHo0CitDUkVBVEUgVEFCTEUgY21kYXRhX2x6NChmMSBURVhUIENPTVBSRVNTSU9OIGx6NCk7CitJ TlNFUlQgSU5UTyBjbWRhdGFfbHo0IFZBTFVFUyhyZXBlYXQoJzEyMzQ1Njc4OTAnLCAxMDA0KSk7 CitTRUxFQ1QgcGdfY29sdW1uX2NvbXByZXNzaW9uKGYxKSBGUk9NIGNtZGF0YV9sejQ7CisgcGdf Y29sdW1uX2NvbXByZXNzaW9uIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBsejQKKygxIHJv dykKKworLS0gY29weSBmcm9tIHpzdGQgdG8gbHo0IHRhYmxlCitDUkVBVEUgVEFCTEUgY21tb3Zl NChmMSB0ZXh0IENPTVBSRVNTSU9OIGx6NCk7CitJTlNFUlQgSU5UTyBjbW1vdmU0IFNFTEVDVCAq IEZST00gY21kYXRhX3pzdGQ7CitTRUxFQ1QgcGdfY29sdW1uX2NvbXByZXNzaW9uKGYxKSBGUk9N IGNtbW92ZTQ7CisgcGdfY29sdW1uX2NvbXByZXNzaW9uIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBsejQKKygxIHJvdykKKworLS0gY29weSBmcm9tIGx6NCB0byB6c3RkIHRhYmxlCitDUkVB VEUgVEFCTEUgY21tb3ZlNShmMSB0ZXh0IENPTVBSRVNTSU9OIHpzdGQpOworSU5TRVJUIElOVE8g Y21tb3ZlNSBTRUxFQ1QgKiBGUk9NIGNtZGF0YV9sejQ7CitTRUxFQ1QgcGdfY29sdW1uX2NvbXBy ZXNzaW9uKGYxKSBGUk9NIGNtbW92ZTU7CisgcGdfY29sdW1uX2NvbXByZXNzaW9uIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBsejQKKygxIHJvdykKKworXGVsc2UKK1xlY2hvICcqKiogc2tp cHBpbmcgTFo0IGNyb3NzLW1ldGhvZCB0ZXN0cyAobHo0IG5vdCBzdXBwb3J0ZWQpICoqKicKK1xl bmRpZgorLS0gY2hlY2sgZGF0YSBpcyBvaworU0VMRUNUIGxlbmd0aChmMSkgRlJPTSBjbWRhdGFf cGdsejsKKyBsZW5ndGggCistLS0tLS0tLQorICAxMDAwMAorICAzNjAzNgorKDIgcm93cykKKwor U0VMRUNUIGxlbmd0aChmMSkgRlJPTSBjbWRhdGFfenN0ZDsKKyBsZW5ndGggCistLS0tLS0tLQor ICAxMDA0MAorKDEgcm93KQorCitcaWYgOmhhc19sejQKK1NFTEVDVCBsZW5ndGgoZjEpIEZST00g Y21kYXRhX2x6NDsKKyBsZW5ndGggCistLS0tLS0tLQorICAxMDA0MAorKDEgcm93KQorCitcZW5k aWYKK1NFTEVDVCBsZW5ndGgoZjEpIEZST00gY21tb3ZlMTsKKyBsZW5ndGggCistLS0tLS0tLQor ICAxMDA0MAorKDEgcm93KQorCitTRUxFQ1QgbGVuZ3RoKGYxKSBGUk9NIGNtbW92ZTI7CisgbGVu Z3RoIAorLS0tLS0tLS0KKyAgMTAwNDAKKygxIHJvdykKKworU0VMRUNUIGxlbmd0aChmMSkgRlJP TSBjbW1vdmUzOworIGxlbmd0aCAKKy0tLS0tLS0tCisgIDEwMDAwCisgIDEwMDQwCisoMiByb3dz KQorCitcaWYgOmhhc19sejQKK1NFTEVDVCBsZW5ndGgoZjEpIEZST00gY21tb3ZlNDsKKyBsZW5n dGggCistLS0tLS0tLQorICAxMDA0MAorKDEgcm93KQorCitTRUxFQ1QgbGVuZ3RoKGYxKSBGUk9N IGNtbW92ZTU7CisgbGVuZ3RoIAorLS0tLS0tLS0KKyAgMTAwNDAKKygxIHJvdykKKworXGVuZGlm CistLSB0ZXN0IHBhcmFsbGVsIHdvcmtlcnMgd2l0aCBaU1REIChpZiBzdXBwb3J0ZWQpCitDUkVB VEUgVEFCTEUgcGFyYWxsZWxfenN0ZF90ZXN0IChpZCBpbnQsIGRhdGEgdGV4dCBDT01QUkVTU0lP TiB6c3RkKTsKK0lOU0VSVCBJTlRPIHBhcmFsbGVsX3pzdGRfdGVzdCBTRUxFQ1QgaSwgcmVwZWF0 KCd4JyB8fCBpOjp0ZXh0LCAzMDAwKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGk7CitT RUxFQ1QgY291bnQoKiksIGF2ZyhsZW5ndGgoZGF0YSkpIEZST00gcGFyYWxsZWxfenN0ZF90ZXN0 OworIGNvdW50IHwgICAgICAgICAgYXZnICAgICAgICAgIAorLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICAgMTAwIHwgODc2MC4wMDAwMDAwMDAwMDAwMDAwCisoMSByb3cpCisKK1NF TEVDVCBjb3VudCgqKSwgc3VtKGxlbmd0aChzdWJzdHJpbmcoZGF0YSwgMSwgNTApKSkgRlJPTSBw YXJhbGxlbF96c3RkX3Rlc3Q7CisgY291bnQgfCBzdW0gIAorLS0tLS0tLSstLS0tLS0KKyAgIDEw MCB8IDUwMDAKKygxIHJvdykKKworRFJPUCBUQUJMRSBwYXJhbGxlbF96c3RkX3Rlc3Q7CistLSB0 ZXN0IENPUFkgd2l0aCBaU1REIGNvbXByZXNzZWQgZGF0YQorQ1JFQVRFIFRBQkxFIGNvcHlfenN0 ZF90ZXN0IChpZCBpbnQsIGRhdGEgdGV4dCBDT01QUkVTU0lPTiB6c3RkKTsKK0lOU0VSVCBJTlRP IGNvcHlfenN0ZF90ZXN0IFZBTFVFUyAoMSwgcmVwZWF0KCdjb3B5ZGF0YScsIDIwMDApKTsKK1xj b3B5IGNvcHlfenN0ZF90ZXN0IFRPICcvdG1wL3pzdGRfY29weV90ZXN0LmRhdCcKK1RSVU5DQVRF IGNvcHlfenN0ZF90ZXN0OworXGNvcHkgY29weV96c3RkX3Rlc3QgRlJPTSAnL3RtcC96c3RkX2Nv cHlfdGVzdC5kYXQnCitTRUxFQ1QgaWQsIGxlbmd0aChkYXRhKSwgcGdfY29sdW1uX2NvbXByZXNz aW9uKGRhdGEpIEZST00gY29weV96c3RkX3Rlc3Q7CisgaWQgfCBsZW5ndGggfCBwZ19jb2x1bW5f Y29tcHJlc3Npb24gCistLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDEg fCAgMTYwMDAgfCB6c3RkCisoMSByb3cpCisKK0RST1AgVEFCTEUgY29weV96c3RkX3Rlc3Q7Citc c2V0IEhJREVfVE9BU1RfQ09NUFJFU1NJT04gdHJ1ZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1 bGUKaW5kZXggOTA1ZjliY2E5NTkuLjFjZDE2MWZhMmM0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxf c2NoZWR1bGUKQEAgLTEyMyw3ICsxMjMsNyBAQCB0ZXN0OiBwbGFuY2FjaGUgbGltaXQgcGxwZ3Nx bCBjb3B5MiB0ZW1wIGRvbWFpbiByYW5nZWZ1bmNzIHByZXBhcmUgY29udmVyc2lvbiB0cgogIyBU aGUgc3RhdHMgdGVzdCByZXNldHMgc3RhdHMsIHNvIG5vdGhpbmcgZWxzZSBuZWVkaW5nIHN0YXRz IGFjY2VzcyBjYW4gYmUgaW4KICMgdGhpcyBncm91cC4KICMgLS0tLS0tLS0tLQotdGVzdDogcGFy dGl0aW9uX21lcmdlIHBhcnRpdGlvbl9zcGxpdCBwYXJ0aXRpb25fam9pbiBwYXJ0aXRpb25fcHJ1 bmUgcmVsb3B0aW9ucyBoYXNoX3BhcnQgaW5kZXhpbmcgcGFydGl0aW9uX2FnZ3JlZ2F0ZSBwYXJ0 aXRpb25faW5mbyB0dXBsZXNvcnQgZXhwbGFpbiBjb21wcmVzc2lvbiBjb21wcmVzc2lvbl9sejQg bWVtb2l6ZSBzdGF0cyBwcmVkaWNhdGUgbnVtYSBlYWdlcl9hZ2dyZWdhdGUKK3Rlc3Q6IHBhcnRp dGlvbl9tZXJnZSBwYXJ0aXRpb25fc3BsaXQgcGFydGl0aW9uX2pvaW4gcGFydGl0aW9uX3BydW5l IHJlbG9wdGlvbnMgaGFzaF9wYXJ0IGluZGV4aW5nIHBhcnRpdGlvbl9hZ2dyZWdhdGUgcGFydGl0 aW9uX2luZm8gdHVwbGVzb3J0IGV4cGxhaW4gY29tcHJlc3Npb24gY29tcHJlc3Npb25fbHo0IGNv bXByZXNzaW9uX3pzdGQgbWVtb2l6ZSBzdGF0cyBwcmVkaWNhdGUgbnVtYSBlYWdlcl9hZ2dyZWdh dGUKIAogIyBldmVudF90cmlnZ2VyIGRlcGVuZHMgb24gY3JlYXRlX2FtIGFuZCBjYW5ub3QgcnVu IGNvbmN1cnJlbnRseSB3aXRoCiAjIGFueSB0ZXN0IHRoYXQgcnVucyBEREwKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbXByZXNzaW9uX3pzdGQuc3FsIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvY29tcHJlc3Npb25fenN0ZC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjhhMzgwOTJmMDM0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvY29tcHJlc3Npb25fenN0ZC5zcWwKQEAgLTAsMCArMSwxNzggQEAKKy0tIFRlc3Rz IGZvciBUT0FTVCBjb21wcmVzc2lvbiB3aXRoIHpzdGQKKworU0VMRUNUIE5PVChlbnVtdmFscyBA PiAne3pzdGR9JykgQVMgc2tpcF90ZXN0IEZST00gcGdfc2V0dGluZ3MgV0hFUkUKKyAgbmFtZSA9 ICdkZWZhdWx0X3RvYXN0X2NvbXByZXNzaW9uJyBcZ3NldAorXGlmIDpza2lwX3Rlc3QKKyAgIFxl Y2hvICcqKiogc2tpcHBpbmcgVE9BU1QgdGVzdHMgd2l0aCB6c3RkIChub3Qgc3VwcG9ydGVkKSAq KionCisgICBccXVpdAorXGVuZGlmCisKK0NSRUFURSBTQ0hFTUEgenN0ZDsKK1NFVCBzZWFyY2hf cGF0aCBUTyB6c3RkLCBwdWJsaWM7CisKK1xzZXQgSElERV9UT0FTVF9DT01QUkVTU0lPTiBmYWxz ZQorCistLSBFbnN1cmUgd2UgZ2V0IHN0YWJsZSByZXN1bHRzIHJlZ2FyZGxlc3Mgb2YgdGhlIGlu c3RhbGxhdGlvbidzIGRlZmF1bHQuCistLSBXZSByZWx5IG9uIHRoaXMgR1VDIHZhbHVlIGZvciBh IGZldyB0ZXN0cy4KK1NFVCBkZWZhdWx0X3RvYXN0X2NvbXByZXNzaW9uID0gJ3BnbHonOworCist LSB0ZXN0IGNyZWF0aW5nIHRhYmxlIHdpdGggY29tcHJlc3Npb24gbWV0aG9kCitDUkVBVEUgVEFC TEUgY21kYXRhX3BnbHooZjEgdGV4dCBDT01QUkVTU0lPTiBwZ2x6KTsKK0NSRUFURSBJTkRFWCBp ZHggT04gY21kYXRhX3BnbHooZjEpOworSU5TRVJUIElOVE8gY21kYXRhX3BnbHogVkFMVUVTKHJl cGVhdCgnMTIzNDU2Nzg5MCcsIDEwMDApKTsKK1xkKyBjbWRhdGFfcGdsegorQ1JFQVRFIFRBQkxF IGNtZGF0YV96c3RkKGYxIFRFWFQgQ09NUFJFU1NJT04genN0ZCk7CitJTlNFUlQgSU5UTyBjbWRh dGFfenN0ZCBWQUxVRVMocmVwZWF0KCcxMjM0NTY3ODkwJywgMTAwNCkpOworXGQrIGNtZGF0YV96 c3RkCisKKy0tIHZlcmlmeSBzdG9yZWQgY29tcHJlc3Npb24gbWV0aG9kIGluIHRoZSBkYXRhCitT RUxFQ1QgcGdfY29sdW1uX2NvbXByZXNzaW9uKGYxKSBGUk9NIGNtZGF0YV96c3RkOworCistLSBk ZWNvbXByZXNzIGRhdGEgc2xpY2UKK1NFTEVDVCBTVUJTVFIoZjEsIDIwMCwgNSkgRlJPTSBjbWRh dGFfcGdsejsKK1NFTEVDVCBTVUJTVFIoZjEsIDIwMDAsIDUwKSBGUk9NIGNtZGF0YV96c3RkOwor CistLSBjb3B5IHdpdGggdGFibGUgY3JlYXRpb24KK1NFTEVDVCAqIElOVE8gY21tb3ZlMSBGUk9N IGNtZGF0YV96c3RkOworXGQrIGNtbW92ZTEKK1NFTEVDVCBwZ19jb2x1bW5fY29tcHJlc3Npb24o ZjEpIEZST00gY21tb3ZlMTsKKworLS0gdGVzdCBMSUtFIElOQ0xVRElORyBDT01QUkVTU0lPTi4g IFRoZSBHVUMgZGVmYXVsdF90b2FzdF9jb21wcmVzc2lvbgorLS0gaGFzIG5vIGVmZmVjdCwgdGhl IGNvbXByZXNzaW9uIG1ldGhvZCBmcm9tIHRoZSB0YWJsZSBiZWluZyBjb3BpZWQuCitDUkVBVEUg VEFCTEUgY21kYXRhMiAoTElLRSBjbWRhdGFfenN0ZCBJTkNMVURJTkcgQ09NUFJFU1NJT04pOwor XGQrIGNtZGF0YTIKK0RST1AgVEFCTEUgY21kYXRhMjsKKworLS0gY29weSB0byBleGlzdGluZyB0 YWJsZQorQ1JFQVRFIFRBQkxFIGNtbW92ZTMoZjEgdGV4dCBDT01QUkVTU0lPTiBwZ2x6KTsKK0lO U0VSVCBJTlRPIGNtbW92ZTMgU0VMRUNUICogRlJPTSBjbWRhdGFfcGdsejsKK0lOU0VSVCBJTlRP IGNtbW92ZTMgU0VMRUNUICogRlJPTSBjbWRhdGFfenN0ZDsKK1NFTEVDVCBwZ19jb2x1bW5fY29t cHJlc3Npb24oZjEpIEZST00gY21tb3ZlMzsKKworLS0gdXBkYXRlIHVzaW5nIGRhdHVtIGZyb20g ZGlmZmVyZW50IHRhYmxlIHdpdGggWlNURCBkYXRhLgorQ1JFQVRFIFRBQkxFIGNtbW92ZTIoZjEg dGV4dCBDT01QUkVTU0lPTiBwZ2x6KTsKK0lOU0VSVCBJTlRPIGNtbW92ZTIgVkFMVUVTIChyZXBl YXQoJzEyMzQ1Njc4OTAnLCAxMDA0KSk7CitTRUxFQ1QgcGdfY29sdW1uX2NvbXByZXNzaW9uKGYx KSBGUk9NIGNtbW92ZTI7CitVUERBVEUgY21tb3ZlMiBTRVQgZjEgPSBjbWRhdGFfenN0ZC5mMSBG Uk9NIGNtZGF0YV96c3RkOworU0VMRUNUIHBnX2NvbHVtbl9jb21wcmVzc2lvbihmMSkgRlJPTSBj bW1vdmUyOworCistLSB0ZXN0IGV4dGVybmFsbHkgc3RvcmVkIGNvbXByZXNzZWQgZGF0YQorQ1JF QVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gbGFyZ2VfdmFsX3pzdGQoKSBSRVRVUk5TIFRFWFQgTEFO R1VBR0UgU1FMIEFTCisnc2VsZWN0IGFycmF5X2FnZyhmaXBzaGFzaChnOjp0ZXh0KSk6OnRleHQg ZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjU2KSBnJzsKK0NSRUFURSBUQUJMRSBjbWRhdGEyIChm MSB0ZXh0IENPTVBSRVNTSU9OIHpzdGQpOworSU5TRVJUIElOVE8gY21kYXRhMiBTRUxFQ1QgbGFy Z2VfdmFsX3pzdGQoKSB8fCByZXBlYXQoJ2EnLCA0MDAwKTsKK1NFTEVDVCBwZ19jb2x1bW5fY29t cHJlc3Npb24oZjEpIEZST00gY21kYXRhMjsKK1NFTEVDVCBTVUJTVFIoZjEsIDIwMCwgNSkgRlJP TSBjbWRhdGEyOworCistLSB0ZXN0IHBnX2NvbHVtbl90b2FzdF9jaHVua19pZCB3aXRoIHpzdGQK K1NFTEVDVCBwZ19jb2x1bW5fdG9hc3RfY2h1bmtfaWQoZjEpIElTIE5PVCBOVUxMIEFTIGhhc190 b2FzdF9jaHVuayBGUk9NIGNtZGF0YTI7CisKK0RST1AgVEFCTEUgY21kYXRhMjsKK0RST1AgRlVO Q1RJT04gbGFyZ2VfdmFsX3pzdGQ7CisKKy0tIHRlc3QgY29tcHJlc3Npb24gd2l0aCBtYXRlcmlh bGl6ZWQgdmlldworQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIGNvbXByZXNzbXYoeCkgQVMgU0VM RUNUICogRlJPTSBjbWRhdGFfenN0ZDsKK1xkKyBjb21wcmVzc212CitTRUxFQ1QgcGdfY29sdW1u X2NvbXByZXNzaW9uKGYxKSBGUk9NIGNtZGF0YV96c3RkOworU0VMRUNUIHBnX2NvbHVtbl9jb21w cmVzc2lvbih4KSBGUk9NIGNvbXByZXNzbXY7CisKKy0tIHRlc3QgY29tcHJlc3Npb24gd2l0aCBw YXJ0aXRpb24KK0NSRUFURSBUQUJMRSBjbXBhcnQoZjEgdGV4dCBDT01QUkVTU0lPTiB6c3RkKSBQ QVJUSVRJT04gQlkgSEFTSChmMSk7CitDUkVBVEUgVEFCTEUgY21wYXJ0MSBQQVJUSVRJT04gT0Yg Y21wYXJ0IEZPUiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMCk7CitDUkVBVEUg VEFCTEUgY21wYXJ0MihmMSB0ZXh0IENPTVBSRVNTSU9OIHBnbHopOworCitBTFRFUiBUQUJMRSBj bXBhcnQgQVRUQUNIIFBBUlRJVElPTiBjbXBhcnQyIEZPUiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAy LCBSRU1BSU5ERVIgMSk7CitJTlNFUlQgSU5UTyBjbXBhcnQgVkFMVUVTIChyZXBlYXQoJzEyMzQ1 Njc4OScsIDEwMDQpKTsKK0lOU0VSVCBJTlRPIGNtcGFydCBWQUxVRVMgKHJlcGVhdCgnMTIzNDU2 Nzg5JywgNDAwNCkpOworU0VMRUNUIHBnX2NvbHVtbl9jb21wcmVzc2lvbihmMSkgRlJPTSBjbXBh cnQxOworU0VMRUNUIHBnX2NvbHVtbl9jb21wcmVzc2lvbihmMSkgRlJPTSBjbXBhcnQyOworCist LSB0ZXN0IGNvbXByZXNzaW9uIHdpdGggaW5oZXJpdGFuY2UKK0NSRUFURSBUQUJMRSBjbWluaCgp IElOSEVSSVRTKGNtZGF0YV9wZ2x6LCBjbWRhdGFfenN0ZCk7IC0tIGVycm9yCitDUkVBVEUgVEFC TEUgY21pbmgoZjEgVEVYVCBDT01QUkVTU0lPTiB6c3RkKSBJTkhFUklUUyhjbWRhdGFfcGdseik7 IC0tIGVycm9yCitDUkVBVEUgVEFCTEUgY21kYXRhMyhmMSB0ZXh0KTsKK0NSRUFURSBUQUJMRSBj bWluaCgpIElOSEVSSVRTIChjbWRhdGFfcGdseiwgY21kYXRhMyk7CisKKy0tIHRlc3QgZGVmYXVs dF90b2FzdF9jb21wcmVzc2lvbiBHVUMKK1NFVCBkZWZhdWx0X3RvYXN0X2NvbXByZXNzaW9uID0g J3pzdGQnOworCistLSB0ZXN0IGFsdGVyIGNvbXByZXNzaW9uIG1ldGhvZAorQUxURVIgVEFCTEUg Y21kYXRhX3BnbHogQUxURVIgQ09MVU1OIGYxIFNFVCBDT01QUkVTU0lPTiB6c3RkOworSU5TRVJU IElOVE8gY21kYXRhX3BnbHogVkFMVUVTIChyZXBlYXQoJzEyMzQ1Njc4OScsIDQwMDQpKTsKK1xk KyBjbWRhdGFfcGdsegorU0VMRUNUIHBnX2NvbHVtbl9jb21wcmVzc2lvbihmMSkgRlJPTSBjbWRh dGFfcGdsejsKK0FMVEVSIFRBQkxFIGNtZGF0YV9wZ2x6IEFMVEVSIENPTFVNTiBmMSBTRVQgQ09N UFJFU1NJT04gcGdsejsKKworLS0gdGVzdCBhbHRlciBjb21wcmVzc2lvbiBtZXRob2QgZm9yIG1h dGVyaWFsaXplZCB2aWV3cworQUxURVIgTUFURVJJQUxJWkVEIFZJRVcgY29tcHJlc3NtdiBBTFRF UiBDT0xVTU4geCBTRVQgQ09NUFJFU1NJT04genN0ZDsKK1xkKyBjb21wcmVzc212CisKKy0tIHRl c3QgYWx0ZXIgY29tcHJlc3Npb24gbWV0aG9kIGZvciBwYXJ0aXRpb25lZCB0YWJsZXMKK0FMVEVS IFRBQkxFIGNtcGFydDEgQUxURVIgQ09MVU1OIGYxIFNFVCBDT01QUkVTU0lPTiBwZ2x6OworQUxU RVIgVEFCTEUgY21wYXJ0MiBBTFRFUiBDT0xVTU4gZjEgU0VUIENPTVBSRVNTSU9OIHpzdGQ7CisK Ky0tIG5ldyBkYXRhIHNob3VsZCBiZSBjb21wcmVzc2VkIHdpdGggdGhlIGN1cnJlbnQgY29tcHJl c3Npb24gbWV0aG9kCitJTlNFUlQgSU5UTyBjbXBhcnQgVkFMVUVTIChyZXBlYXQoJzEyMzQ1Njc4 OScsIDEwMDQpKTsKK0lOU0VSVCBJTlRPIGNtcGFydCBWQUxVRVMgKHJlcGVhdCgnMTIzNDU2Nzg5 JywgNDAwNCkpOworU0VMRUNUIHBnX2NvbHVtbl9jb21wcmVzc2lvbihmMSkgRlJPTSBjbXBhcnQx OworU0VMRUNUIHBnX2NvbHVtbl9jb21wcmVzc2lvbihmMSkgRlJPTSBjbXBhcnQyOworCistLSB0 ZXN0IGV4cHJlc3Npb24gaW5kZXgKK0NSRUFURSBUQUJMRSBjbWRhdGEyIChmMSBURVhUIENPTVBS RVNTSU9OIHBnbHosIGYyIFRFWFQgQ09NUFJFU1NJT04genN0ZCk7CitDUkVBVEUgVU5JUVVFIElO REVYIGlkeDEgT04gY21kYXRhMiAoKGYxIHx8IGYyKSk7CitJTlNFUlQgSU5UTyBjbWRhdGEyIFZB TFVFUygoU0VMRUNUIGFycmF5X2FnZyhmaXBzaGFzaChnOjpURVhUKSk6OlRFWFQgRlJPTQorZ2Vu ZXJhdGVfc2VyaWVzKDEsIDUwKSBnKSwgVkVSU0lPTigpKTsKKworLS0gdGVzdCBjcm9zcy1tZXRo b2Qgb3BlcmF0aW9ucyAoenN0ZCA8LT4gbHo0IGlmIGF2YWlsYWJsZSkKKy0tIFRoaXMgdGVzdHMg aW50ZXJhY3Rpb24gYmV0d2VlbiBhbGwgdGhyZWUgY29tcHJlc3Npb24gbWV0aG9kcworU0VMRUNU IGVudW12YWxzIEA+ICd7bHo0fScgQVMgaGFzX2x6NCBGUk9NIHBnX3NldHRpbmdzIFdIRVJFCisg IG5hbWUgPSAnZGVmYXVsdF90b2FzdF9jb21wcmVzc2lvbicgXGdzZXQKK1xpZiA6aGFzX2x6NAor Q1JFQVRFIFRBQkxFIGNtZGF0YV9sejQoZjEgVEVYVCBDT01QUkVTU0lPTiBsejQpOworSU5TRVJU IElOVE8gY21kYXRhX2x6NCBWQUxVRVMocmVwZWF0KCcxMjM0NTY3ODkwJywgMTAwNCkpOworU0VM RUNUIHBnX2NvbHVtbl9jb21wcmVzc2lvbihmMSkgRlJPTSBjbWRhdGFfbHo0OworCistLSBjb3B5 IGZyb20genN0ZCB0byBsejQgdGFibGUKK0NSRUFURSBUQUJMRSBjbW1vdmU0KGYxIHRleHQgQ09N UFJFU1NJT04gbHo0KTsKK0lOU0VSVCBJTlRPIGNtbW92ZTQgU0VMRUNUICogRlJPTSBjbWRhdGFf enN0ZDsKK1NFTEVDVCBwZ19jb2x1bW5fY29tcHJlc3Npb24oZjEpIEZST00gY21tb3ZlNDsKKwor LS0gY29weSBmcm9tIGx6NCB0byB6c3RkIHRhYmxlCitDUkVBVEUgVEFCTEUgY21tb3ZlNShmMSB0 ZXh0IENPTVBSRVNTSU9OIHpzdGQpOworSU5TRVJUIElOVE8gY21tb3ZlNSBTRUxFQ1QgKiBGUk9N IGNtZGF0YV9sejQ7CitTRUxFQ1QgcGdfY29sdW1uX2NvbXByZXNzaW9uKGYxKSBGUk9NIGNtbW92 ZTU7CitcZWxzZQorXGVjaG8gJyoqKiBza2lwcGluZyBMWjQgY3Jvc3MtbWV0aG9kIHRlc3RzIChs ejQgbm90IHN1cHBvcnRlZCkgKioqJworXGVuZGlmCisKKy0tIGNoZWNrIGRhdGEgaXMgb2sKK1NF TEVDVCBsZW5ndGgoZjEpIEZST00gY21kYXRhX3BnbHo7CitTRUxFQ1QgbGVuZ3RoKGYxKSBGUk9N IGNtZGF0YV96c3RkOworXGlmIDpoYXNfbHo0CitTRUxFQ1QgbGVuZ3RoKGYxKSBGUk9NIGNtZGF0 YV9sejQ7CitcZW5kaWYKK1NFTEVDVCBsZW5ndGgoZjEpIEZST00gY21tb3ZlMTsKK1NFTEVDVCBs ZW5ndGgoZjEpIEZST00gY21tb3ZlMjsKK1NFTEVDVCBsZW5ndGgoZjEpIEZST00gY21tb3ZlMzsK K1xpZiA6aGFzX2x6NAorU0VMRUNUIGxlbmd0aChmMSkgRlJPTSBjbW1vdmU0OworU0VMRUNUIGxl bmd0aChmMSkgRlJPTSBjbW1vdmU1OworXGVuZGlmCisKKy0tIHRlc3QgcGFyYWxsZWwgd29ya2Vy cyB3aXRoIFpTVEQgKGlmIHN1cHBvcnRlZCkKK0NSRUFURSBUQUJMRSBwYXJhbGxlbF96c3RkX3Rl c3QgKGlkIGludCwgZGF0YSB0ZXh0IENPTVBSRVNTSU9OIHpzdGQpOworSU5TRVJUIElOVE8gcGFy YWxsZWxfenN0ZF90ZXN0IFNFTEVDVCBpLCByZXBlYXQoJ3gnIHx8IGk6OnRleHQsIDMwMDApIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKK1NFTEVDVCBjb3VudCgqKSwgYXZnKGxlbmd0 aChkYXRhKSkgRlJPTSBwYXJhbGxlbF96c3RkX3Rlc3Q7CitTRUxFQ1QgY291bnQoKiksIHN1bShs ZW5ndGgoc3Vic3RyaW5nKGRhdGEsIDEsIDUwKSkpIEZST00gcGFyYWxsZWxfenN0ZF90ZXN0Owor RFJPUCBUQUJMRSBwYXJhbGxlbF96c3RkX3Rlc3Q7CisKKy0tIHRlc3QgQ09QWSB3aXRoIFpTVEQg Y29tcHJlc3NlZCBkYXRhCitDUkVBVEUgVEFCTEUgY29weV96c3RkX3Rlc3QgKGlkIGludCwgZGF0 YSB0ZXh0IENPTVBSRVNTSU9OIHpzdGQpOworSU5TRVJUIElOVE8gY29weV96c3RkX3Rlc3QgVkFM VUVTICgxLCByZXBlYXQoJ2NvcHlkYXRhJywgMjAwMCkpOworXGNvcHkgY29weV96c3RkX3Rlc3Qg VE8gJy90bXAvenN0ZF9jb3B5X3Rlc3QuZGF0JworVFJVTkNBVEUgY29weV96c3RkX3Rlc3Q7Citc Y29weSBjb3B5X3pzdGRfdGVzdCBGUk9NICcvdG1wL3pzdGRfY29weV90ZXN0LmRhdCcKK1NFTEVD VCBpZCwgbGVuZ3RoKGRhdGEpLCBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YSkgRlJPTSBjb3B5 X3pzdGRfdGVzdDsKK0RST1AgVEFCTEUgY29weV96c3RkX3Rlc3Q7CisKK1xzZXQgSElERV9UT0FT VF9DT01QUkVTU0lPTiB0cnVlCi0tIAoyLjM5LjMgKEFwcGxlIEdpdC0xNDYpCgo= --00000000000029c3720646a80184 Content-Type: application/octet-stream; name="backwards_compatibility_test.sql" Content-Disposition: attachment; filename="backwards_compatibility_test.sql" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjjanl052 LS0KLS0gQmFja3dhcmRzIENvbXBhdGliaWxpdHkgVGVzdCBmb3IgVE9BU1QgQ29tcHJlc3Npb24K LS0KLS0gVGVzdHMgdGhhdCBleGlzdGluZyBQR0xaL0xaNCBjb21wcmVzc2VkIGRhdGEgY2FuIGJl IHJlYWQgY29ycmVjdGx5Ci0tIGFuZCB0aGF0IG5ldyBaU1REIGRhdGEgd29ya3MgYWxvbmdzaWRl IGxlZ2FjeSBkYXRhLgotLQotLSBUaGlzIGVuc3VyZXMgc21vb3RoIHVwZ3JhZGVzIGFuZCBtaXhl ZC1tZXRob2QgZW52aXJvbm1lbnRzLgotLQoKXHRpbWluZyBvbgpccHNldCBwYWdlciBvZmYKXHNl dCBPTl9FUlJPUl9TVE9QIG9uCgpEUk9QIFNDSEVNQSBJRiBFWElTVFMgY29tcGF0X3Rlc3QgQ0FT Q0FERTsKQ1JFQVRFIFNDSEVNQSBjb21wYXRfdGVzdDsKU0VUIHNlYXJjaF9wYXRoIFRPIGNvbXBh dF90ZXN0OwoKXGVjaG8gJycKXGVjaG8gJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PScKXGVjaG8gJ0JBQ0tXQVJEUyBDT01QQVRJQklM SVRZIFRFU1QgRk9SIFRPQVNUIENPTVBSRVNTSU9OJwpcZWNobyAnPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JwpcZWNobyAnJwoKLS0g RGV0ZWN0IGF2YWlsYWJsZSBjb21wcmVzc2lvbiBtZXRob2RzClNFTEVDVAogICAgKGVudW12YWxz IEA+ICd7bHo0fScpOjppbnQgIEFTIGhhc19sejQsCiAgICAoZW51bXZhbHMgQD4gJ3t6c3RkfScp OjppbnQgQVMgaGFzX3pzdGQKRlJPTSBwZ19zZXR0aW5ncwpXSEVSRSBuYW1lID0gJ2RlZmF1bHRf dG9hc3RfY29tcHJlc3Npb24nClxnc2V0CgpcZWNobyAnQXZhaWxhYmxlIGNvbXByZXNzaW9uIG1l dGhvZHM6JwpcZWNobyAnICBQR0xaOiB5ZXMgKGJ1aWx0LWluKScKXGVjaG8gJyAgTFo0OicgOmhh c19sejQKXGVjaG8gJyAgWlNURDonIDpoYXNfenN0ZApcZWNobyAnJwoKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tIFRFU1QgMTog U21hbGwgVmFsdWVzIChJbmxpbmUgU3RvcmFnZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpcZWNobyAnPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JwpcZWNobyAnVEVT VCAxOiBTTUFMTCBWQUxVRVMgKElOTElORSBTVE9SQUdFIC0gTk8gVE9BU1QpJwpcZWNobyAnPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 JwpcZWNobyAnJwoKLS0gU21hbGwgdmFsdWVzIHNob3VsZCBzdGF5IGlubGluZSByZWdhcmRsZXNz IG9mIGNvbXByZXNzaW9uIHNldHRpbmcKQ1JFQVRFIFRBQkxFIHNtYWxsX3BnbHogKGlkIHNlcmlh bCwgZGF0YSB0ZXh0IENPTVBSRVNTSU9OIHBnbHopOwpDUkVBVEUgVEFCTEUgc21hbGxfbHo0IChp ZCBzZXJpYWwsIGRhdGEgdGV4dCBDT01QUkVTU0lPTiBsejQpOwpDUkVBVEUgVEFCTEUgc21hbGxf enN0ZCAoaWQgc2VyaWFsLCBkYXRhIHRleHQgQ09NUFJFU1NJT04genN0ZCk7CgotLSBJbnNlcnQg c21hbGwgdmFsdWVzICg1MDAgYnl0ZXMgLSB3ZWxsIGJlbG93IFRPQVNUIHRocmVzaG9sZCkKSU5T RVJUIElOVE8gc21hbGxfcGdseiAoZGF0YSkgU0VMRUNUIHJlcGVhdCgnQScsIDUwMCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKTsKSU5TRVJUIElOVE8gc21hbGxfbHo0IChkYXRhKSBTRUxF Q1QgcmVwZWF0KCdCJywgNTAwKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApOwpJTlNFUlQg SU5UTyBzbWFsbF96c3RkIChkYXRhKSBTRUxFQ1QgcmVwZWF0KCdDJywgNTAwKSBGUk9NIGdlbmVy YXRlX3NlcmllcygxLCAxMDApOwoKXGVjaG8gJy0tLSBTbWFsbCBWYWx1ZXM6IFZlcmlmeSBJbmxp bmUgU3RvcmFnZSAtLS0nClNFTEVDVAogICAgJ1BHTFonIGFzIG1ldGhvZCwKICAgIGNvdW50KCop IGFzIHJvd3MsCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVtbl90b2FzdF9jaHVu a19pZChkYXRhKSBJUyBOT1QgTlVMTCkgYXMgdG9hc3RlZCwKICAgIGNvdW50KCopIEZJTFRFUiAo V0hFUkUgcGdfY29sdW1uX3RvYXN0X2NodW5rX2lkKGRhdGEpIElTIE5VTEwpIGFzIGlubGluZQpG Uk9NIHNtYWxsX3BnbHoKVU5JT04gQUxMClNFTEVDVAogICAgJ0xaNCcsCiAgICBjb3VudCgqKSwK ICAgIGNvdW50KCopIEZJTFRFUiAoV0hFUkUgcGdfY29sdW1uX3RvYXN0X2NodW5rX2lkKGRhdGEp IElTIE5PVCBOVUxMKSwKICAgIGNvdW50KCopIEZJTFRFUiAoV0hFUkUgcGdfY29sdW1uX3RvYXN0 X2NodW5rX2lkKGRhdGEpIElTIE5VTEwpCkZST00gc21hbGxfbHo0ClVOSU9OIEFMTApTRUxFQ1QK ICAgICdaU1REJywKICAgIGNvdW50KCopLAogICAgY291bnQoKikgRklMVEVSIChXSEVSRSBwZ19j b2x1bW5fdG9hc3RfY2h1bmtfaWQoZGF0YSkgSVMgTk9UIE5VTEwpLAogICAgY291bnQoKikgRklM VEVSIChXSEVSRSBwZ19jb2x1bW5fdG9hc3RfY2h1bmtfaWQoZGF0YSkgSVMgTlVMTCkKRlJPTSBz bWFsbF96c3RkOwoKXGVjaG8gJycKXGVjaG8gJ0V4cGVjdGVkOiBBbGwgcm93cyBpbmxpbmUgKHRv YXN0ZWQ9MCkgZm9yIGFsbCBtZXRob2RzJwpcZWNobyAnJwoKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tIFRFU1QgMjogTWVkaXVt IFZhbHVlcyAoSW5saW5lIENvbXByZXNzZWQpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKXGVjaG8gJz09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScKXGVjaG8gJ1RFU1Qg MjogTUVESVVNIFZBTFVFUyAoSU5MSU5FIENPTVBSRVNTRUQpJwpcZWNobyAnPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JwpcZWNobyAn JwoKQ1JFQVRFIFRBQkxFIG1lZGl1bV9wZ2x6IChpZCBzZXJpYWwsIGRhdGEgdGV4dCBDT01QUkVT U0lPTiBwZ2x6KTsKQ1JFQVRFIFRBQkxFIG1lZGl1bV9sejQgKGlkIHNlcmlhbCwgZGF0YSB0ZXh0 IENPTVBSRVNTSU9OIGx6NCk7CkNSRUFURSBUQUJMRSBtZWRpdW1fenN0ZCAoaWQgc2VyaWFsLCBk YXRhIHRleHQgQ09NUFJFU1NJT04genN0ZCk7CgotLSBJbnNlcnQgY29tcHJlc3NpYmxlIGRhdGEg fjVLQiAoc2hvdWxkIGNvbXByZXNzIGlubGluZSBmb3IgUEdMWi9MWjQpCklOU0VSVCBJTlRPIG1l ZGl1bV9wZ2x6IChkYXRhKSBTRUxFQ1QgcmVwZWF0KCdQb3N0Z3JlU1FMIGlzIGF3ZXNvbWUhICcs IDI1MCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKTsKSU5TRVJUIElOVE8gbWVkaXVtX2x6 NCAoZGF0YSkgU0VMRUNUIHJlcGVhdCgnUG9zdGdyZVNRTCBpcyBhd2Vzb21lISAnLCAyNTApIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCk7CklOU0VSVCBJTlRPIG1lZGl1bV96c3RkIChkYXRh KSBTRUxFQ1QgcmVwZWF0KCdQb3N0Z3JlU1FMIGlzIGF3ZXNvbWUhICcsIDI1MCkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwgMTAwKTsKClxlY2hvICctLS0gTWVkaXVtIFZhbHVlczogVmVyaWZ5IENv bXByZXNzaW9uIE1ldGhvZCAtLS0nClNFTEVDVAogICAgJ1BHTFonIGFzIGRlY2xhcmVkX21ldGhv ZCwKICAgIGNvdW50KCopIGFzIHJvd3MsCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2Nv bHVtbl90b2FzdF9jaHVua19pZChkYXRhKSBJUyBOT1QgTlVMTCkgYXMgZXh0ZXJuYWwsCiAgICBj b3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVtbl9jb21wcmVzc2lvbihkYXRhKSA9ICdwZ2x6 JykgYXMgcGdsel9jb21wcmVzc2VkLAogICAgY291bnQoKikgRklMVEVSIChXSEVSRSBwZ19jb2x1 bW5fY29tcHJlc3Npb24oZGF0YSkgPSAnbHo0JykgYXMgbHo0X2NvbXByZXNzZWQsCiAgICBjb3Vu dCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVtbl9jb21wcmVzc2lvbihkYXRhKSA9ICd6c3RkJykg YXMgenN0ZF9jb21wcmVzc2VkLAogICAgY291bnQoKikgRklMVEVSIChXSEVSRSBwZ19jb2x1bW5f Y29tcHJlc3Npb24oZGF0YSkgSVMgTlVMTCkgYXMgdW5jb21wcmVzc2VkX29yX2lubGluZQpGUk9N IG1lZGl1bV9wZ2x6ClVOSU9OIEFMTApTRUxFQ1QKICAgICdMWjQnLAogICAgY291bnQoKiksCiAg ICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVtbl90b2FzdF9jaHVua19pZChkYXRhKSBJ UyBOT1QgTlVMTCksCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVtbl9jb21wcmVz c2lvbihkYXRhKSA9ICdwZ2x6JyksCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVt bl9jb21wcmVzc2lvbihkYXRhKSA9ICdsejQnKSwKICAgIGNvdW50KCopIEZJTFRFUiAoV0hFUkUg cGdfY29sdW1uX2NvbXByZXNzaW9uKGRhdGEpID0gJ3pzdGQnKSwKICAgIGNvdW50KCopIEZJTFRF UiAoV0hFUkUgcGdfY29sdW1uX2NvbXByZXNzaW9uKGRhdGEpIElTIE5VTEwpCkZST00gbWVkaXVt X2x6NApVTklPTiBBTEwKU0VMRUNUCiAgICAnWlNURCcsCiAgICBjb3VudCgqKSwKICAgIGNvdW50 KCopIEZJTFRFUiAoV0hFUkUgcGdfY29sdW1uX3RvYXN0X2NodW5rX2lkKGRhdGEpIElTIE5PVCBO VUxMKSwKICAgIGNvdW50KCopIEZJTFRFUiAoV0hFUkUgcGdfY29sdW1uX2NvbXByZXNzaW9uKGRh dGEpID0gJ3BnbHonKSwKICAgIGNvdW50KCopIEZJTFRFUiAoV0hFUkUgcGdfY29sdW1uX2NvbXBy ZXNzaW9uKGRhdGEpID0gJ2x6NCcpLAogICAgY291bnQoKikgRklMVEVSIChXSEVSRSBwZ19jb2x1 bW5fY29tcHJlc3Npb24oZGF0YSkgPSAnenN0ZCcpLAogICAgY291bnQoKikgRklMVEVSIChXSEVS RSBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YSkgSVMgTlVMTCkKRlJPTSBtZWRpdW1fenN0ZDsK ClxlY2hvICcnClxlY2hvICdFeHBlY3RlZDogUEdMWi9MWjQgaW5saW5lIGNvbXByZXNzZWQsIFpT VEQgZXh0ZXJuYWwnClxlY2hvICcnCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0gVEVTVCAzOiBMYXJnZSBWYWx1ZXMgKEV4dGVy bmFsIFN0b3JhZ2UpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQoKXGVjaG8gJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PScKXGVjaG8gJ1RFU1QgMzogTEFSR0UgVkFMVUVT IChFWFRFUk5BTCBUT0FTVCBTVE9SQUdFKScKXGVjaG8gJz09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScKXGVjaG8gJycKCkNSRUFURSBU QUJMRSBsYXJnZV9wZ2x6IChpZCBzZXJpYWwsIGRhdGEgdGV4dCBDT01QUkVTU0lPTiBwZ2x6KTsK Q1JFQVRFIFRBQkxFIGxhcmdlX2x6NCAoaWQgc2VyaWFsLCBkYXRhIHRleHQgQ09NUFJFU1NJT04g bHo0KTsKQ1JFQVRFIFRBQkxFIGxhcmdlX3pzdGQgKGlkIHNlcmlhbCwgZGF0YSB0ZXh0IENPTVBS RVNTSU9OIHpzdGQpOwoKLS0gSW5zZXJ0IGxhcmdlIGNvbXByZXNzaWJsZSBkYXRhICgxMDBLQiBl YWNoKQpJTlNFUlQgSU5UTyBsYXJnZV9wZ2x6IChkYXRhKSBTRUxFQ1QgcmVwZWF0KCdUaGlzIGlz IGEgbGFyZ2UgdGV4dCB2YWx1ZSBmb3IgZXh0ZXJuYWwgVE9BU1Qgc3RvcmFnZS4gJywgMjAwMCkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTApOwpJTlNFUlQgSU5UTyBsYXJnZV9sejQgKGRhdGEp IFNFTEVDVCByZXBlYXQoJ1RoaXMgaXMgYSBsYXJnZSB0ZXh0IHZhbHVlIGZvciBleHRlcm5hbCBU T0FTVCBzdG9yYWdlLiAnLCAyMDAwKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1MCk7CklOU0VS VCBJTlRPIGxhcmdlX3pzdGQgKGRhdGEpIFNFTEVDVCByZXBlYXQoJ1RoaXMgaXMgYSBsYXJnZSB0 ZXh0IHZhbHVlIGZvciBleHRlcm5hbCBUT0FTVCBzdG9yYWdlLiAnLCAyMDAwKSBGUk9NIGdlbmVy YXRlX3NlcmllcygxLCA1MCk7CgpcZWNobyAnLS0tIExhcmdlIFZhbHVlczogVmVyaWZ5IEV4dGVy bmFsIFN0b3JhZ2UgJiBDb21wcmVzc2lvbiAtLS0nClNFTEVDVAogICAgJ1BHTFonIGFzIGRlY2xh cmVkX21ldGhvZCwKICAgIGNvdW50KCopIGFzIHJvd3MsCiAgICBjb3VudCgqKSBGSUxURVIgKFdI RVJFIHBnX2NvbHVtbl90b2FzdF9jaHVua19pZChkYXRhKSBJUyBOT1QgTlVMTCkgYXMgZXh0ZXJu YWwsCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVtbl9jb21wcmVzc2lvbihkYXRh KSA9ICdwZ2x6JykgYXMgcGdsel9jb3VudCwKICAgIGNvdW50KCopIEZJTFRFUiAoV0hFUkUgcGdf Y29sdW1uX2NvbXByZXNzaW9uKGRhdGEpID0gJ2x6NCcpIGFzIGx6NF9jb3VudCwKICAgIGNvdW50 KCopIEZJTFRFUiAoV0hFUkUgcGdfY29sdW1uX2NvbXByZXNzaW9uKGRhdGEpID0gJ3pzdGQnKSBh cyB6c3RkX2NvdW50LAogICAgcGdfc2l6ZV9wcmV0dHkocGdfdG90YWxfcmVsYXRpb25fc2l6ZSgn bGFyZ2VfcGdseicpKSBhcyBzdG9yYWdlCkZST00gbGFyZ2VfcGdsegpVTklPTiBBTEwKU0VMRUNU CiAgICAnTFo0JywKICAgIGNvdW50KCopLAogICAgY291bnQoKikgRklMVEVSIChXSEVSRSBwZ19j b2x1bW5fdG9hc3RfY2h1bmtfaWQoZGF0YSkgSVMgTk9UIE5VTEwpLAogICAgY291bnQoKikgRklM VEVSIChXSEVSRSBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YSkgPSAncGdseicpLAogICAgY291 bnQoKikgRklMVEVSIChXSEVSRSBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YSkgPSAnbHo0Jyks CiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVtbl9jb21wcmVzc2lvbihkYXRhKSA9 ICd6c3RkJyksCiAgICBwZ19zaXplX3ByZXR0eShwZ190b3RhbF9yZWxhdGlvbl9zaXplKCdsYXJn ZV9sejQnKSkKRlJPTSBsYXJnZV9sejQKVU5JT04gQUxMClNFTEVDVAogICAgJ1pTVEQnLAogICAg Y291bnQoKiksCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2NvbHVtbl90b2FzdF9jaHVu a19pZChkYXRhKSBJUyBOT1QgTlVMTCksCiAgICBjb3VudCgqKSBGSUxURVIgKFdIRVJFIHBnX2Nv bHVtbl9jb21wcmVzc2lvbihkYXRhKSA9ICdwZ2x6JyksCiAgICBjb3VudCgqKSBGSUxURVIgKFdI RVJFIHBnX2NvbHVtbl9jb21wcmVzc2lvbihkYXRhKSA9ICdsejQnKSwKICAgIGNvdW50KCopIEZJ TFRFUiAoV0hFUkUgcGdfY29sdW1uX2NvbXByZXNzaW9uKGRhdGEpID0gJ3pzdGQnKSwKICAgIHBn X3NpemVfcHJldHR5KHBnX3RvdGFsX3JlbGF0aW9uX3NpemUoJ2xhcmdlX3pzdGQnKSkKRlJPTSBs YXJnZV96c3RkOwoKXGVjaG8gJycKXGVjaG8gJ0V4cGVjdGVkOiBQR0xaL0xaNCBpbmxpbmUgKGhp Z2hseSBjb21wcmVzc2libGUgZGF0YSksIFpTVEQgZXh0ZXJuYWwgKGV4dGVybmFsLW9ubHkgYnkg ZGVzaWduKScKXGVjaG8gJycKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLSBURVNUIDQ6IE1peGVkIENvbXByZXNzaW9uIGluIFNp bmdsZSBUYWJsZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KClxlY2hvICc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0nClxlY2hvICdURVNUIDQ6IE1JWEVEIENPTVBSRVNT SU9OIE1FVEhPRFMgKEJBQ0tXQVJEUyBDT01QQVRJQklMSVRZKScKXGVjaG8gJz09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScKXGVjaG8g JycKCi0tIENyZWF0ZSB0YWJsZSB3aXRoIGRlZmF1bHQgY29tcHJlc3Npb24KQ1JFQVRFIFRBQkxF IG1peGVkX2RhdGEgKAogICAgaWQgc2VyaWFsIFBSSU1BUlkgS0VZLAogICAgZGF0YSB0ZXh0Cik7 CgotLSBJbnNlcnQgZGF0YSB3aXRoIFBHTFogKHNpbXVsYXRlIG9sZCBkYXRhKQpTRVQgZGVmYXVs dF90b2FzdF9jb21wcmVzc2lvbiA9IHBnbHo7CklOU0VSVCBJTlRPIG1peGVkX2RhdGEgKGRhdGEp IFNFTEVDVCByZXBlYXQoJ09sZCBQR0xaIGRhdGEgJyB8fCBnLCAxMDAwMCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwgMjApIGc7CgotLSBJbnNlcnQgZGF0YSB3aXRoIExaNCAoc2ltdWxhdGUgdXBn cmFkZSB0byBMWjQpClNFVCBkZWZhdWx0X3RvYXN0X2NvbXByZXNzaW9uID0gbHo0OwpJTlNFUlQg SU5UTyBtaXhlZF9kYXRhIChkYXRhKSBTRUxFQ1QgcmVwZWF0KCdOZXdlciBMWjQgZGF0YSAnIHx8 IGcsIDEwMDAwKSBGUk9NIGdlbmVyYXRlX3NlcmllcygyMSwgNDApIGc7CgotLSBJbnNlcnQgZGF0 YSB3aXRoIFpTVEQgKHNpbXVsYXRlIGxhdGVzdCB1cGdyYWRlKQpTRVQgZGVmYXVsdF90b2FzdF9j b21wcmVzc2lvbiA9IHpzdGQ7CklOU0VSVCBJTlRPIG1peGVkX2RhdGEgKGRhdGEpIFNFTEVDVCBy ZXBlYXQoJ0xhdGVzdCBaU1REIGRhdGEgJyB8fCBnLCAxMDAwMCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoNDEsIDYwKSBnOwoKQU5BTFlaRSBtaXhlZF9kYXRhOwoKXGVjaG8gJy0tLSBNaXhlZCBUYWJs ZTogQ29tcHJlc3Npb24gTWV0aG9kIERpc3RyaWJ1dGlvbiAtLS0nClNFTEVDVAogICAgcGdfY29s dW1uX2NvbXByZXNzaW9uKGRhdGEpIGFzIGNvbXByZXNzaW9uX21ldGhvZCwKICAgIGNvdW50KCop IGFzIHJvd19jb3VudCwKICAgIHBnX3NpemVfcHJldHR5KHN1bShwZ19jb2x1bW5fc2l6ZShkYXRh KSkpIGFzIHRvdGFsX2NvbXByZXNzZWRfc2l6ZQpGUk9NIG1peGVkX2RhdGEKR1JPVVAgQlkgcGdf Y29sdW1uX2NvbXByZXNzaW9uKGRhdGEpCk9SREVSIEJZCiAgICBDQVNFIHBnX2NvbHVtbl9jb21w cmVzc2lvbihkYXRhKQogICAgICAgIFdIRU4gJ3BnbHonIFRIRU4gMQogICAgICAgIFdIRU4gJ2x6 NCcgVEhFTiAyCiAgICAgICAgV0hFTiAnenN0ZCcgVEhFTiAzCiAgICAgICAgRUxTRSA0CiAgICBF TkQ7CgpcZWNobyAnJwpcZWNobyAnRXhwZWN0ZWQ6IDIwIFBHTFosIDIwIExaNCwgMjAgWlNURCBy b3dzIGNvZXhpc3RpbmcnClxlY2hvICcnCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0gVEVTVCA1OiBSZWFkIEFsbCBEYXRhIChE ZWNvbXByZXNzIFZlcmlmaWNhdGlvbikKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpcZWNobyAnPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JwpcZWNobyAnVEVTVCA1OiBE QVRBIElOVEVHUklUWSAoUkVBRCAmIERFQ09NUFJFU1MgQUxMIE1FVEhPRFMpJwpcZWNobyAnPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 JwpcZWNobyAnJwoKXGVjaG8gJy0tLSBWZXJpZnkgYWxsIGRhdGEgZGVjb21wcmVzc2VzIGNvcnJl Y3RseSAtLS0nCgotLSBTbWFsbCB2YWx1ZXMKU0VMRUNUICdTbWFsbCBQR0xaJyBhcyB0ZXN0LCBj b3VudCgqKSBhcyByb3dzLCBzdW0obGVuZ3RoKGRhdGEpKSBhcyB0b3RhbF9ieXRlcyBGUk9NIHNt YWxsX3BnbHo7ClNFTEVDVCAnU21hbGwgTFo0JyBhcyB0ZXN0LCBjb3VudCgqKSBhcyByb3dzLCBz dW0obGVuZ3RoKGRhdGEpKSBhcyB0b3RhbF9ieXRlcyBGUk9NIHNtYWxsX2x6NDsKU0VMRUNUICdT bWFsbCBaU1REJyBhcyB0ZXN0LCBjb3VudCgqKSBhcyByb3dzLCBzdW0obGVuZ3RoKGRhdGEpKSBh cyB0b3RhbF9ieXRlcyBGUk9NIHNtYWxsX3pzdGQ7CgotLSBNZWRpdW0gdmFsdWVzClNFTEVDVCAn TWVkaXVtIFBHTFonIGFzIHRlc3QsIGNvdW50KCopIGFzIHJvd3MsIHN1bShsZW5ndGgoZGF0YSkp IGFzIHRvdGFsX2J5dGVzIEZST00gbWVkaXVtX3BnbHo7ClNFTEVDVCAnTWVkaXVtIExaNCcgYXMg dGVzdCwgY291bnQoKikgYXMgcm93cywgc3VtKGxlbmd0aChkYXRhKSkgYXMgdG90YWxfYnl0ZXMg RlJPTSBtZWRpdW1fbHo0OwpTRUxFQ1QgJ01lZGl1bSBaU1REJyBhcyB0ZXN0LCBjb3VudCgqKSBh cyByb3dzLCBzdW0obGVuZ3RoKGRhdGEpKSBhcyB0b3RhbF9ieXRlcyBGUk9NIG1lZGl1bV96c3Rk OwoKLS0gTGFyZ2UgdmFsdWVzClNFTEVDVCAnTGFyZ2UgUEdMWicgYXMgdGVzdCwgY291bnQoKikg YXMgcm93cywgc3VtKGxlbmd0aChkYXRhKSkgYXMgdG90YWxfYnl0ZXMgRlJPTSBsYXJnZV9wZ2x6 OwpTRUxFQ1QgJ0xhcmdlIExaNCcgYXMgdGVzdCwgY291bnQoKikgYXMgcm93cywgc3VtKGxlbmd0 aChkYXRhKSkgYXMgdG90YWxfYnl0ZXMgRlJPTSBsYXJnZV9sejQ7ClNFTEVDVCAnTGFyZ2UgWlNU RCcgYXMgdGVzdCwgY291bnQoKikgYXMgcm93cywgc3VtKGxlbmd0aChkYXRhKSkgYXMgdG90YWxf Ynl0ZXMgRlJPTSBsYXJnZV96c3RkOwoKLS0gTWl4ZWQgdGFibGUKU0VMRUNUICdNaXhlZCAoQWxs KScgYXMgdGVzdCwgY291bnQoKikgYXMgcm93cywgc3VtKGxlbmd0aChkYXRhKSkgYXMgdG90YWxf Ynl0ZXMgRlJPTSBtaXhlZF9kYXRhOwoKXGVjaG8gJycKXGVjaG8gJ0V4cGVjdGVkOiBBbGwgZGF0 YSByZWFkYWJsZSwgY29ycmVjdCBieXRlIGNvdW50cycKXGVjaG8gJycKCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLSBURVNUIDY6 IEFMVEVSIENPTFVNTiBDb21wcmVzc2lvbiBNZXRob2QKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpcZWNobyAnPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JwpcZWNobyAn VEVTVCA2OiBBTFRFUiBDT0xVTU4gQ09NUFJFU1NJT04gKExBWlkgUkVDT01QUkVTU0lPTiknClxl Y2hvICc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0nClxlY2hvICcnCgotLSBDcmVhdGUgdGFibGUgd2l0aCBQR0xaCkNSRUFURSBUQUJM RSBhbHRlcl90ZXN0IChpZCBzZXJpYWwsIGRhdGEgdGV4dCBDT01QUkVTU0lPTiBwZ2x6KTsKSU5T RVJUIElOVE8gYWx0ZXJfdGVzdCAoZGF0YSkgU0VMRUNUIHJlcGVhdCgnT3JpZ2luYWwgUEdMWiBk YXRhICcgfHwgZywgNTAwMCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjApIGc7CgpcZWNobyAn LS0tIEJlZm9yZSBBTFRFUjogQ29tcHJlc3Npb24gTWV0aG9kIC0tLScKU0VMRUNUCiAgICBwZ19j b2x1bW5fY29tcHJlc3Npb24oZGF0YSkgYXMgbWV0aG9kLAogICAgY291bnQoKikgYXMgcm93cwpG Uk9NIGFsdGVyX3Rlc3QKR1JPVVAgQlkgcGdfY29sdW1uX2NvbXByZXNzaW9uKGRhdGEpOwoKLS0g Q2hhbmdlIGNvbXByZXNzaW9uIHRvIFpTVEQgKGV4aXN0aW5nIGRhdGEgc3RheXMgUEdMWiB1bnRp bCByZXdyaXR0ZW4pCkFMVEVSIFRBQkxFIGFsdGVyX3Rlc3QgQUxURVIgQ09MVU1OIGRhdGEgU0VU IENPTVBSRVNTSU9OIHpzdGQ7CgpcZWNobyAnJwpcZWNobyAnLS0tIEFmdGVyIEFMVEVSIChiZWZv cmUgVVBEQVRFKTogQ29tcHJlc3Npb24gTWV0aG9kIC0tLScKU0VMRUNUCiAgICBwZ19jb2x1bW5f Y29tcHJlc3Npb24oZGF0YSkgYXMgbWV0aG9kLAogICAgY291bnQoKikgYXMgcm93cwpGUk9NIGFs dGVyX3Rlc3QKR1JPVVAgQlkgcGdfY29sdW1uX2NvbXByZXNzaW9uKGRhdGEpOwoKXGVjaG8gJycK XGVjaG8gJ0V4cGVjdGVkOiBTdGlsbCBQR0xaIChsYXp5IGNvbnZlcnNpb24gLSBkYXRhIG5vdCBy ZXdyaXR0ZW4geWV0KScKXGVjaG8gJycKCi0tIEZvcmNlIHJld3JpdGUgd2l0aCBVUERBVEUgKG11 c3QgYWN0dWFsbHkgbW9kaWZ5IGRhdGEgdG8gdHJpZ2dlciByZS10b2FzdCkKVVBEQVRFIGFsdGVy X3Rlc3QgU0VUIGRhdGEgPSBkYXRhIHx8ICcnOwoKXGVjaG8gJycKXGVjaG8gJy0tLSBBZnRlciBV UERBVEU6IENvbXByZXNzaW9uIE1ldGhvZCAtLS0nClNFTEVDVAogICAgcGdfY29sdW1uX2NvbXBy ZXNzaW9uKGRhdGEpIGFzIG1ldGhvZCwKICAgIGNvdW50KCopIGFzIHJvd3MKRlJPTSBhbHRlcl90 ZXN0CkdST1VQIEJZIHBnX2NvbHVtbl9jb21wcmVzc2lvbihkYXRhKTsKClxlY2hvICcnClxlY2hv ICdFeHBlY3RlZDogTm93IFpTVEQgKGRhdGEgcmV3cml0dGVuIHdpdGggbmV3IGNvbXByZXNzaW9u KScKXGVjaG8gJycKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotLSBURVNUIDc6IFZBQ1VVTSBGVUxMIChSZWNvbXByZXNzaW9uIFZl cmlmaWNhdGlvbikKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCgpcZWNobyAnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09JwpcZWNobyAnVEVTVCA3OiBWQUNVVU0gRlVMTCAo VkVSSUZZIFJFQ09NUFJFU1NJT04pJwpcZWNobyAnPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JwpcZWNobyAnJwoKLS0gQ3JlYXRlIHRh YmxlIHdpdGggUEdMWiwgdGhlbiBjaGFuZ2UgdG8gWlNURAotLSBVc2UgbGVzcy1jb21wcmVzc2li bGUgZGF0YSAobWQ1IGhhc2hlcykgc28gaXQgZ29lcyBleHRlcm5hbCB3aXRoIFBHTFoKQ1JFQVRF IFRBQkxFIHZhY3V1bV90ZXN0IChpZCBzZXJpYWwsIGRhdGEgdGV4dCBDT01QUkVTU0lPTiBwZ2x6 KTsKSU5TRVJUIElOVE8gdmFjdXVtX3Rlc3QgKGRhdGEpClNFTEVDVCBzdHJpbmdfYWdnKG1kNShn Ojp0ZXh0IHx8IHM6OnRleHQpLCAnJykKRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApIHMsIGdl bmVyYXRlX3NlcmllcygxLCAzMDAwKSBnCkdST1VQIEJZIHM7CgpcZWNobyAnLS0tIEJlZm9yZSBj aGFuZ2luZyBjb21wcmVzc2lvbiAtLS0nClNFTEVDVAogICAgcGdfY29sdW1uX2NvbXByZXNzaW9u KGRhdGEpIGFzIG1ldGhvZCwKICAgIGNvdW50KCopIGFzIHJvd3MKRlJPTSB2YWN1dW1fdGVzdApH Uk9VUCBCWSBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YSk7CgotLSBDaGFuZ2UgdG8gWlNURApB TFRFUiBUQUJMRSB2YWN1dW1fdGVzdCBBTFRFUiBDT0xVTU4gZGF0YSBTRVQgQ09NUFJFU1NJT04g enN0ZDsKClxlY2hvICcnClxlY2hvICctLS0gQWZ0ZXIgQUxURVIgKGJlZm9yZSBWQUNVVU0gRlVM TCkgLS0tJwpTRUxFQ1QKICAgIHBnX2NvbHVtbl9jb21wcmVzc2lvbihkYXRhKSBhcyBtZXRob2Qs CiAgICBjb3VudCgqKSBhcyByb3dzCkZST00gdmFjdXVtX3Rlc3QKR1JPVVAgQlkgcGdfY29sdW1u X2NvbXByZXNzaW9uKGRhdGEpOwoKLS0gVkFDVVVNIEZVTEwgcmV3cml0ZXMgdGFibGUgd2l0aCBu ZXcgY29tcHJlc3Npb24KVkFDVVVNIEZVTEwgdmFjdXVtX3Rlc3Q7CgpcZWNobyAnJwpcZWNobyAn LS0tIEFmdGVyIFZBQ1VVTSBGVUxMIC0tLScKU0VMRUNUCiAgICBwZ19jb2x1bW5fY29tcHJlc3Np b24oZGF0YSkgYXMgbWV0aG9kLAogICAgY291bnQoKikgYXMgcm93cwpGUk9NIHZhY3V1bV90ZXN0 CkdST1VQIEJZIHBnX2NvbHVtbl9jb21wcmVzc2lvbihkYXRhKTsKClxlY2hvICcnClxlY2hvICdF eHBlY3RlZDogWlNURCAoVkFDVVVNIEZVTEwgcmV3cml0ZXMgd2l0aCBuZXcgY29tcHJlc3Npb24p JwpcZWNobyAnJwoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi0tIFNVTU1BUlkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpcZWNobyAnPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JwpcZWNobyAnQkFDS1dB UkRTIENPTVBBVElCSUxJVFkgVEVTVCBDT01QTEVURScKXGVjaG8gJz09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScKXGVjaG8gJycKXGVj aG8gJycKXGVjaG8gJ0FsbCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBzY2VuYXJpb3MgdmFsaWRh dGVkIScKXGVjaG8gJycKXGVjaG8gJ1RvIGNsZWFuIHVwOiBEUk9QIFNDSEVNQSBjb21wYXRfdGVz dCBDQVNDQURFOycKXGVjaG8gJycK --00000000000029c3720646a80184--