[PATCH] Add SRFI 158: Generators and Accumulators

"Yitzchak Gale" <[email protected]> Mon, 27 Jul 2026 10:51:14 +0300
Newsgroups gmane.lisp.guile.devel
Message-ID <[email protected]>
--0746dbdd83758d84caee6824a7c08f303dce4071
Content-Type: multipart/alternative;
 boundary=87626a0c51f65426ec1b55ecd369c3070b30b0c8

--87626a0c51f65426ec1b55ecd369c3070b30b0c8
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

Subject: [PATCH] Add SRFI 158: Generators and Accumulators

This patch adds support for SRFI 158 (Generators and Accumulators), a
widely-implemented and fundamental SRFI that has been final since 2017.

WHAT IS SRFI 158?
-----------------
SRFI 158 provides two complementary abstractions:

1. Generators: procedures that produce a sequence of values when called
   repeatedly. They are lightweight, stateful, and destructive (unlike
   SRFI 41 streams which are persistent).

2. Accumulators: the inverse of generators - procedures that consume a
   sequence of values.

Generators are a fundamental building block used throughout the Scheme
ecosystem, similar to Python's itertools or Clojure's lazy sequences.
They are particularly useful for:
- Processing large or infinite sequences efficiently
- Composing data transformations
- Building lazy pipelines
- Working with external data sources (files, network, etc.)
- Separation of concerns: abstracting boundaries and processing from data

WHY ADD IT TO GUILE?
--------------------
1. Widespread adoption: Implemented in Gauche, Chicken, Chibi, Sagittarius,
   and other major Scheme implementations.

2. Referenced by newer SRFIs: SRFI 171 (Transducers), already in Guile,
   can work with generators. SRFI 158 makes that integration natural.

3. Fills a gap: While Guile has SRFI 41 (streams) for persistent lazy
   sequences, it lacks a lightweight mutable sequence abstraction.

4. Mature and stable: Finalized in 2017, with nearly a decade of
   real-world use.

5. Easy maintenance: Uses the well-tested reference implementation with
   minimal Guile-specific glue code.

IMPLEMENTATION NOTES
--------------------
- Based on the official reference implementation from
  https://srfi.schemers.org/srfi-158/

- Requires only SRFI 11 (let-values) and basic R6RS modules already
  in Guile

- All exports follow the SRFI 158 specification exactly

- Comprehensive test suite covering all major functionality

- No conflicts with existing Guile procedures

TESTING
-------
The included test suite covers:
- Generator constructors (make-range-generator, list->generator, etc.)
- Generator operations (gfilter, gmap, gtake, gdrop, etc.)
- Generator consumers (generator->list, generator-fold, etc.)
- Accumulators (list-accumulator, sum-accumulator, etc.)

The tests are based on the existing tests in the reference implementation,
adapted for Guile's test framework.

All tests pass with the current Guile 3.0.11.

DOCUMENTATION
-------------
The patch includes documentation for the Guile Reference Manual
(doc/ref/srfi-modules.texi) following the style of existing SRFIs like
SRFI-171. The documentation covers:
- Introduction to generators and accumulators
- Constructor procedures with examples
- Generator operations (filtering, mapping, etc.)
- Consumer procedures
- Accumulator procedures

The documentation references the full SRFI-158 specification for
additional details and rationale.

FUTURE WORK
-----------
If accepted, this opens the door for:
- Better SRFI 171 (transducers) integration
- Potential future SRFIs that build on generators
- Examples showing generator usage in Guile

DISCLAIMER
----------
I was aided by Claude Sonnet 5 while developing this patch,
under my close supervision and review. The work is mine.

Please let me know if you have any questions or if any changes are needed.

Thanks for considering this contribution!

Yitz Gale
[email protected]

--87626a0c51f65426ec1b55ecd369c3070b30b0c8
Content-Type: text/html
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title></head><body><div>Subject: [PA=
TCH] Add SRFI 158: Generators and Accumulators</div><div><br></div><div>=
This patch adds support for SRFI 158 (Generators and Accumulators), a</d=
iv><div>widely-implemented and fundamental SRFI that has been final sinc=
e 2017.</div><div><br></div><div>WHAT IS SRFI 158?</div><div>-----------=
------</div><div>SRFI 158 provides two complementary abstractions:</div>=
<div><br></div><div>1. Generators: procedures that produce a sequence of=
 values when called</div><div>&nbsp;&nbsp; repeatedly. They are lightwei=
ght, stateful, and destructive (unlike</div><div>&nbsp;&nbsp; SRFI 41 st=
reams which are persistent).</div><div><br></div><div>2. Accumulators: t=
he inverse of generators - procedures that consume a</div><div>&nbsp;&nb=
sp; sequence of values.</div><div><br></div><div>Generators are a fundam=
ental building block used throughout the Scheme</div><div>ecosystem, sim=
ilar to Python's itertools or Clojure's lazy sequences.</div><div>They a=
re particularly useful for:</div><div>- Processing large or infinite seq=
uences efficiently</div><div>- Composing data transformations</div><div>=
- Building lazy pipelines</div><div>- Working with external data sources=
 (files, network, etc.)</div><div>- Separation of concerns: abstracting =
boundaries and processing from data</div><div><br></div><div>WHY ADD IT =
TO GUILE?</div><div>--------------------</div><div>1. Widespread adoptio=
n: Implemented in Gauche, Chicken, Chibi, Sagittarius,</div><div>&nbsp;&=
nbsp; and other major Scheme implementations.</div><div><br></div><div>2=
. Referenced by newer SRFIs: SRFI 171 (Transducers), already in Guile,</=
div><div>&nbsp;&nbsp; can work with generators. SRFI 158 makes that inte=
gration natural.</div><div><br></div><div>3. Fills a gap: While Guile ha=
s SRFI 41 (streams) for persistent lazy</div><div>&nbsp;&nbsp; sequences=
, it lacks a lightweight mutable sequence abstraction.</div><div><br></d=
iv><div>4. Mature and stable: Finalized in 2017, with nearly a decade of=
</div><div>&nbsp;&nbsp; real-world use.</div><div><br></div><div>5. Easy=
 maintenance: Uses the well-tested reference implementation with</div><d=
iv>&nbsp;&nbsp; minimal Guile-specific glue code.</div><div><br></div><d=
iv>IMPLEMENTATION NOTES</div><div>--------------------</div><div>- Based=
 on the official reference implementation from</div><div>&nbsp; <a href=3D=
"https://srfi.schemers.org/srfi-158/">https://srfi.schemers.org/srfi-158=
/</a></div><div><br></div><div>- Requires only SRFI 11 (let-values) and =
basic R6RS modules already</div><div>&nbsp; in Guile</div><div><br></div=
><div>- All exports follow the SRFI 158 specification exactly</div><div>=
<br></div><div>- Comprehensive test suite covering all major functionali=
ty</div><div><br></div><div>- No conflicts with existing Guile procedure=
s</div><div><br></div><div>TESTING</div><div>-------</div><div>The inclu=
ded test suite covers:</div><div>- Generator constructors (make-range-ge=
nerator, list-&gt;generator, etc.)</div><div>- Generator operations (gfi=
lter, gmap, gtake, gdrop, etc.)</div><div>- Generator consumers (generat=
or-&gt;list, generator-fold, etc.)</div><div>- Accumulators (list-accumu=
lator, sum-accumulator, etc.)</div><div><br></div><div>The tests are bas=
ed on the existing tests in the reference implementation,</div><div>adap=
ted for Guile's test framework.</div><div><br></div><div>All tests pass =
with the current Guile 3.0.11.</div><div><br></div><div>DOCUMENTATION</d=
iv><div>-------------</div><div>The patch includes documentation for the=
 Guile Reference Manual</div><div>(doc/ref/srfi-modules.texi) following =
the style of existing SRFIs like</div><div>SRFI-171. The documentation c=
overs:</div><div>- Introduction to generators and accumulators</div><div=
>- Constructor procedures with examples</div><div>- Generator operations=
 (filtering, mapping, etc.)</div><div>- Consumer procedures</div><div>- =
Accumulator procedures</div><div><br></div><div>The documentation refere=
nces the full SRFI-158 specification for</div><div>additional details an=
d rationale.</div><div><br></div><div>FUTURE WORK</div><div>-----------<=
/div><div>If accepted, this opens the door for:</div><div>- Better SRFI =
171 (transducers) integration</div><div>- Potential future SRFIs that bu=
ild on generators</div><div>- Examples showing generator usage in Guile<=
/div><div><br></div><div>DISCLAIMER</div><div>----------</div><div>I was=
 aided by Claude Sonnet 5 while developing this patch,</div><div>under m=
y close supervision and review. The work is mine.</div><div><br></div><d=
iv>Please let me know if you have any questions or if any changes are ne=
eded.</div><div><br></div><div>Thanks for considering this contribution!=
</div><div><br></div><div>Yitz Gale</div><div><a href=3D"mailto:gale@sef=
er.org">[email protected]</a></div><div><br></div></body></html>
--87626a0c51f65426ec1b55ecd369c3070b30b0c8--

--0746dbdd83758d84caee6824a7c08f303dce4071
Content-Disposition: attachment; filename="srfi-158.patch"
Content-Type: text/x-diff; name="srfi-158.patch"
Content-Transfer-Encoding: base64

RnJvbSBkZjNhNzcwNWVkODhkNGI5NGY1M2UyOWRjZGVlYjVjZjg0MTFkNTA5IE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBZaXR6IEdhbGUgPGdhbGVAc2VmZXIub3JnPgpEYXRl
OiBNb24sIDI3IEp1bCAyMDI2IDAxOjA3OjI1ICswMzAwClN1YmplY3Q6IFtQQVRDSF0gQWRk
IFNSRkkgMTU4OiBHZW5lcmF0b3JzIGFuZCBBY2N1bXVsYXRvcnMKClNSRkkgMTU4IHByb3Zp
ZGVzIGdlbmVyYXRvcnMgKHByb2NlZHVyZXMgdGhhdCBwcm9kdWNlIHNlcXVlbmNlcyBvZgp2
YWx1ZXMpIGFuZCBhY2N1bXVsYXRvcnMgKHByb2NlZHVyZXMgdGhhdCBjb25zdW1lIHNlcXVl
bmNlcykuIFRoaXMgaXMKYSBmdW5kYW1lbnRhbCBsYXp5IHNlcXVlbmNlIGFic3RyYWN0aW9u
IHVzZWQgYnkgbWFueSBtb2Rlcm4gU2NoZW1lCnByb2dyYW1zLgoKVGhlIGltcGxlbWVudGF0
aW9uIHVzZXMgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBmcm9tCmh0dHBzOi8vc3Jm
aS5zY2hlbWVycy5vcmcvc3JmaS0xNTgvIHdpdGggbWluaW1hbCBHdWlsZS1zcGVjaWZpYwp3
cmFwcGVyIGNvZGUuCgoqIG1vZHVsZS9zcmZpL3NyZmktMTU4LnNjbTogTmV3IGZpbGUuIE1h
aW4gbW9kdWxlIHdyYXBwZXIuCiogbW9kdWxlL3NyZmkvc3JmaS0xNTgvaW1wbC5zY206IE5l
dyBmaWxlLiBSZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uCiogdGVzdC1zdWl0ZS90ZXN0cy9z
cmZpLTE1OC50ZXN0OiBOZXcgZmlsZS4gVGVzdCBzdWl0ZSBiYXNlZCBvbiB0aGUKICBTUkZJ
IDE1OCByZWZlcmVuY2UgdGVzdHMsIGFkYXB0ZWQgdG8gR3VpbGUncyB0ZXN0IGZyYW1ld29y
ay4KKiBkb2MvcmVmL3NyZmktbW9kdWxlcy50ZXhpOiBBZGQgU1JGSS0xNTggZG9jdW1lbnRh
dGlvbi4KLS0tCiBkb2MvcmVmL3NyZmktbW9kdWxlcy50ZXhpICAgICAgfCAzMjAgKysrKysr
KysrKysrKysrKysrCiBtb2R1bGUvc3JmaS9zcmZpLTE1OC5zY20gICAgICAgfCAxMjEgKysr
KysrKwogbW9kdWxlL3NyZmkvc3JmaS0xNTgvaW1wbC5zY20gIHwgNTgwICsrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKwogdGVzdC1zdWl0ZS90ZXN0cy9zcmZpLTE1OC50ZXN0
IHwgMjQ1ICsrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDEyNjYgaW5zZXJ0aW9u
cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IG1vZHVsZS9zcmZpL3NyZmktMTU4LnNjbQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IG1vZHVsZS9zcmZpL3NyZmktMTU4L2ltcGwuc2NtCiBjcmVhdGUg
bW9kZSAxMDA2NDQgdGVzdC1zdWl0ZS90ZXN0cy9zcmZpLTE1OC50ZXN0CgpkaWZmIC0tZ2l0
IGEvZG9jL3JlZi9zcmZpLW1vZHVsZXMudGV4aSBiL2RvYy9yZWYvc3JmaS1tb2R1bGVzLnRl
eGkKaW5kZXggMWNiYjBjMDMwLi45MGMzZjkwOTIgMTAwNjQ0Ci0tLSBhL2RvYy9yZWYvc3Jm
aS1tb2R1bGVzLnRleGkKKysrIGIvZG9jL3JlZi9zcmZpLW1vZHVsZXMudGV4aQpAQCAtNjgs
NiArNjgsNyBAQCBnZXQgdGhlIHJlbGV2YW50IFNSRkkgZG9jdW1lbnRzIGZyb20gdGhlIFNS
RkkgaG9tZSBwYWdlCiAqIFNSRkktMTA1OjogICAgICAgICAgICAgICAgICAgIEN1cmx5LWlu
Zml4IGV4cHJlc3Npb25zLgogKiBTUkZJLTExMTo6ICAgICAgICAgICAgICAgICAgICBCb3hl
cy4KICogU1JGSS0xMTk6OiAgICAgICAgICAgICAgICAgICAgV2lzcDogc2ltcGxlciBpbmRl
bnRhdGlvbi1zZW5zaXRpdmUgU2NoZW1lLgorKiBTUkZJLTE1ODo6ICAgICAgICAgICAgICAg
ICAgICBHZW5lcmF0b3JzIGFuZCBBY2N1bXVsYXRvcnMKICogU1JGSS0xNzE6OiAgICAgICAg
ICAgICAgICAgICAgVHJhbnNkdWNlcnMKICogU1JGSS0xOTc6OiAgICAgICAgICAgICAgICAg
ICAgUGlwZWxpbmUgb3BlcmF0b3JzCiAqIFNSRkktMjA3OjogICAgICAgICAgICAgICAgICAg
IFN0cmluZy1ub3RhdGVkIGJ5dGV2ZWN0b3JzCkBAIC02NTk2LDYgKzY1OTcsMzI1IEBAIGV4
dGVuc2lvbiBAY29kZXsud30gdmllIEBjb2Rle2d1aWxlIC0tbGFuZ3VhZ2U9d2lzcCAteCAu
d30uCiBJbiBmaWxlcyB1c2luZyBXaXNwLCBAeHJlZntTUkZJLTEwNX0gKEN1cmx5IEluZml4
KSBpcyBhbHdheXMgYWN0aXZhdGVkLgogCiAKK0Bub2RlIFNSRkktMTU4CitAc3Vic2VjdGlv
biBHZW5lcmF0b3JzIGFuZCBBY2N1bXVsYXRvcnMKK0BjaW5kZXggU1JGSS0xNTgKK0BjaW5k
ZXggZ2VuZXJhdG9ycworQGNpbmRleCBhY2N1bXVsYXRvcnMKKworVGhpcyBzdWJzZWN0aW9u
IGlzIGJhc2VkIG9uIHRoZQorQHVyZWZ7aHR0cHM6Ly9zcmZpLnNjaGVtZXJzLm9yZy9zcmZp
LTE1OC9zcmZpLTE1OC5odG1sLCBzcGVjaWZpY2F0aW9uIG9mCitTUkZJLTE1OH0gYnkgU2hp
cm8gS2F3YWksIEpvaG4gQ293YW4sIGFuZCBUaG9tYXMgR2lscmF5LgorCitHZW5lcmF0b3Jz
IGFyZSBwcm9jZWR1cmVzIHdpdGggbm8gYXJndW1lbnRzIHRoYXQgcHJvZHVjZSBhIHNlcXVl
bmNlIG9mIHZhbHVlcy4KK0V2ZXJ5IHRpbWUgYSBnZW5lcmF0b3IgaXMgY2FsbGVkLCBpdCB5
aWVsZHMgdGhlIG5leHQgdmFsdWUgaW4gdGhlIHNlcXVlbmNlLgorV2hlbiBhIGZpbml0ZSBn
ZW5lcmF0b3IgaXMgZXhoYXVzdGVkLCBpdCByZXR1cm5zIGFuIGVuZC1vZi1maWxlIG9iamVj
dC4KK0dlbmVyYXRvcnMgcHJvdmlkZSBsaWdodHdlaWdodCBsYXppbmVzcyB3aXRob3V0IHRo
ZSBvdmVyaGVhZCBvZiBjcmVhdGluZyB0aHVua3MKK2ZvciBlYWNoIGVsZW1lbnQsIG1ha2lu
ZyB0aGVtIHdlbGwtc3VpdGVkIGZvciBwcm9jZXNzaW5nIGxhcmdlIG9yIGluZmluaXRlCitz
ZXF1ZW5jZXMgZWZmaWNpZW50bHkuCisKK0FjY3VtdWxhdG9ycyBhcmUgdGhlIGludmVyc2Ug
b2YgZ2VuZXJhdG9yczogdGhleSBhcmUgcHJvY2VkdXJlcyBvZiBvbmUgYXJndW1lbnQKK3Ro
YXQgY29uc3VtZSBhIHNlcXVlbmNlIG9mIHZhbHVlcy4gIFdoZW4gY2FsbGVkIHdpdGggYW4g
ZW5kLW9mLWZpbGUgb2JqZWN0LCBhbgorYWNjdW11bGF0b3IgcmV0dXJucyBpdHMgYWNjdW11
bGF0ZWQgcmVzdWx0LgorCitTUkZJLTE1OCBjYW4gYmUgbWFkZSBhdmFpbGFibGUgd2l0aDoK
KworQGV4YW1wbGUKKyh1c2UtbW9kdWxlcyAoc3JmaSBzcmZpLTE1OCkpCitAZW5kIGV4YW1w
bGUKKworQG1lbnUKKyogU1JGSS0xNTggQ29uc3RydWN0b3JzOjogICAgICAgQ3JlYXRpbmcg
Z2VuZXJhdG9ycworKiBTUkZJLTE1OCBPcGVyYXRpb25zOjogICAgICAgICBUcmFuc2Zvcm1p
bmcgZ2VuZXJhdG9ycworKiBTUkZJLTE1OCBDb25zdW1lcnM6OiAgICAgICAgICBDb25zdW1p
bmcgZ2VuZXJhdG9ycworKiBTUkZJLTE1OCBBY2N1bXVsYXRvcnM6OiAgICAgICBBY2N1bXVs
YXRpbmcgdmFsdWVzCitAZW5kIG1lbnUKKworQG5vZGUgU1JGSS0xNTggQ29uc3RydWN0b3Jz
CitAc3Vic3Vic2VjdGlvbiBTUkZJLTE1OCBDb25zdHJ1Y3RvcnMKKworR2VuZXJhdG9ycyBj
YW4gYmUgY29uc3RydWN0ZWQgZnJvbSB2YXJpb3VzIGRhdGEgc291cmNlcyBvciBjcmVhdGVk
IHdpdGgKK3NwZWNpZmljIHBhdHRlcm5zLgorCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9
IGdlbmVyYXRvciBhcmcgQGRvdHN7fQorUmV0dXJucyBhIGdlbmVyYXRvciB0aGF0IHlpZWxk
cyB0aGUgZ2l2ZW4gYXJndW1lbnRzIGluIHNlcXVlbmNlLCB0aGVuCityZXR1cm5zIGFuIGVu
ZC1vZi1maWxlIG9iamVjdC4KKworQGV4YW1wbGUKKyhkZWZpbmUgZyAoZ2VuZXJhdG9yIDEg
MiAzKSkKKyhnKSBAcmVzdWx0e30gMQorKGcpIEByZXN1bHR7fSAyCisoZykgQHJlc3VsdHt9
IDMKKyhnKSBAcmVzdWx0e30gIzxlb2Y+CitAZW5kIGV4YW1wbGUKK0BlbmQgZGVmZm4KKwor
QGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSBjaXJjdWxhci1nZW5lcmF0b3IgYXJnIEBkb3Rz
e30KK1JldHVybnMgYSBnZW5lcmF0b3IgdGhhdCB5aWVsZHMgdGhlIGdpdmVuIGFyZ3VtZW50
cyBpbiBzZXF1ZW5jZSwgdGhlbgorcmVwZWF0cyB0aGUgc2VxdWVuY2UgaW5maW5pdGVseS4K
KworQGV4YW1wbGUKKyhkZWZpbmUgZyAoY2lyY3VsYXItZ2VuZXJhdG9yIDEgMiAzKSkKKyhn
ZW5lcmF0b3ItPmxpc3QgZyA3KSBAcmVzdWx0e30gKDEgMiAzIDEgMiAzIDEpCitAZW5kIGV4
YW1wbGUKK0BlbmQgZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSBtYWtlLWlv
dGEtZ2VuZXJhdG9yIFtjb3VudCBbc3RhcnQgW3N0ZXBdXV0KK1JldHVybnMgYSBnZW5lcmF0
b3IgdGhhdCB5aWVsZHMgQHZhcntjb3VudH0gbnVtYmVycyBzdGFydGluZyBmcm9tIEB2YXJ7
c3RhcnR9CisoZGVmYXVsdCAwKSB3aXRoIGFuIGluY3JlbWVudCBvZiBAdmFye3N0ZXB9IChk
ZWZhdWx0IDEpLiAgSWYgQHZhcntjb3VudH0gaXMKK29taXR0ZWQsIHRoZSBnZW5lcmF0b3Ig
aXMgaW5maW5pdGUuCisKK0BleGFtcGxlCisoZ2VuZXJhdG9yLT5saXN0IChtYWtlLWlvdGEt
Z2VuZXJhdG9yIDUgMTAgMikpCitAcmVzdWx0e30gKDEwIDEyIDE0IDE2IDE4KQorQGVuZCBl
eGFtcGxlCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gbWFrZS1y
YW5nZS1nZW5lcmF0b3Igc3RhcnQgW2VuZCBbc3RlcF1dCitSZXR1cm5zIGEgZ2VuZXJhdG9y
IHRoYXQgeWllbGRzIG51bWJlcnMgZnJvbSBAdmFye3N0YXJ0fSAoaW5jbHVzaXZlKSB0bwor
QHZhcntlbmR9IChleGNsdXNpdmUpIHdpdGggYW4gaW5jcmVtZW50IG9mIEB2YXJ7c3RlcH0g
KGRlZmF1bHQgMSkuICBJZgorQHZhcntlbmR9IGlzIG9taXR0ZWQsIHRoZSBnZW5lcmF0b3Ig
aXMgaW5maW5pdGUuCisKK0BleGFtcGxlCisoZ2VuZXJhdG9yLT5saXN0IChtYWtlLXJhbmdl
LWdlbmVyYXRvciAzIDgpKQorQHJlc3VsdHt9ICgzIDQgNSA2IDcpCisoZ2VuZXJhdG9yLT5s
aXN0IChtYWtlLXJhbmdlLWdlbmVyYXRvciAzIDggMikpCitAcmVzdWx0e30gKDMgNSA3KQor
KGdlbmVyYXRvci0+bGlzdCAobWFrZS1yYW5nZS1nZW5lcmF0b3IgMTApIDUpCitAcmVzdWx0
e30gKDEwIDExIDEyIDEzIDE0KQorQGVuZCBleGFtcGxlCitAZW5kIGRlZmZuCisKK0BkZWZm
biB7U2NoZW1lIFByb2NlZHVyZX0gbWFrZS1jb3JvdXRpbmUtZ2VuZXJhdG9yIHByb2MKK0Ny
ZWF0ZXMgYSBnZW5lcmF0b3IgZnJvbSBhIGNvcm91dGluZS4gIEB2YXJ7cHJvY30gaXMgYSBw
cm9jZWR1cmUgdGhhdCB0YWtlcworb25lIGFyZ3VtZW50LCBAY29kZXt5aWVsZH0uICBXaGVu
IEBjb2Rle3lpZWxkfSBpcyBjYWxsZWQgd2l0aCBhIHZhbHVlLCB0aGF0Cit2YWx1ZSBiZWNv
bWVzIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgZ2VuZXJhdG9yLgorCitAZXhhbXBsZQor
KGRlZmluZSBnCisgIChtYWtlLWNvcm91dGluZS1nZW5lcmF0b3IKKyAgIChsYW1iZGEgKHlp
ZWxkKQorICAgICAobGV0IGxvb3AgKChpIDApKQorICAgICAgICh3aGVuICg8IGkgMykKKyAg
ICAgICAgICh5aWVsZCBpKQorICAgICAgICAgKGxvb3AgKCsgaSAxKSkpKSkpKQorKGdlbmVy
YXRvci0+bGlzdCBnKSBAcmVzdWx0e30gKDAgMSAyKQorQGVuZCBleGFtcGxlCitAZW5kIGRl
ZmZuCisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gbGlzdC0+Z2VuZXJhdG9yIGxzdAor
QGRlZmZueCB7U2NoZW1lIFByb2NlZHVyZX0gdmVjdG9yLT5nZW5lcmF0b3IgdmVjCitAZGVm
Zm54IHtTY2hlbWUgUHJvY2VkdXJlfSByZXZlcnNlLXZlY3Rvci0+Z2VuZXJhdG9yIHZlYwor
QGRlZmZueCB7U2NoZW1lIFByb2NlZHVyZX0gc3RyaW5nLT5nZW5lcmF0b3Igc3RyCitAZGVm
Zm54IHtTY2hlbWUgUHJvY2VkdXJlfSBieXRldmVjdG9yLT5nZW5lcmF0b3IgYnYKK1JldHVy
bnMgYSBnZW5lcmF0b3IgdGhhdCB5aWVsZHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBk
YXRhIHN0cnVjdHVyZQoraW4gc2VxdWVuY2UuICBAY29kZXtyZXZlcnNlLXZlY3Rvci0+Z2Vu
ZXJhdG9yfSB5aWVsZHMgdmVjdG9yIGVsZW1lbnRzIGluCityZXZlcnNlIG9yZGVyLgorQGVu
ZCBkZWZmbgorCitAbm9kZSBTUkZJLTE1OCBPcGVyYXRpb25zCitAc3Vic3Vic2VjdGlvbiBT
UkZJLTE1OCBPcGVyYXRpb25zCisKK1RoZXNlIHByb2NlZHVyZXMgdHJhbnNmb3JtIGdlbmVy
YXRvcnMgaW50byBuZXcgZ2VuZXJhdG9ycy4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJl
fSBnY29ucyogaXRlbSBAZG90c3t9IGdlbgorUmV0dXJucyBhIGdlbmVyYXRvciB0aGF0IHlp
ZWxkcyB0aGUgZ2l2ZW4gQHZhcntpdGVtfXMsIHRoZW4geWllbGRzIHZhbHVlcworZnJvbSBA
dmFye2dlbn0uCisKK0BleGFtcGxlCisoZ2VuZXJhdG9yLT5saXN0IChnY29ucyogJ2EgJ2Ig
KGdlbmVyYXRvciAxIDIgMykpKQorQHJlc3VsdHt9IChhIGIgMSAyIDMpCitAZW5kIGV4YW1w
bGUKK0BlbmQgZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSBnYXBwZW5kIGdl
biBAZG90c3t9CitSZXR1cm5zIGEgZ2VuZXJhdG9yIHRoYXQgeWllbGRzIHZhbHVlcyBmcm9t
IHRoZSBmaXJzdCBAdmFye2dlbn0sIHRoZW4gdGhlCitzZWNvbmQsIGFuZCBzbyBvbi4KKwor
QGV4YW1wbGUKKyhnZW5lcmF0b3ItPmxpc3QgKGdhcHBlbmQgKGdlbmVyYXRvciAxIDIpIChn
ZW5lcmF0b3IgMyA0KSkpCitAcmVzdWx0e30gKDEgMiAzIDQpCitAZW5kIGV4YW1wbGUKK0Bl
bmQgZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSBnZmlsdGVyIHByZWQgZ2Vu
CitSZXR1cm5zIGEgZ2VuZXJhdG9yIHRoYXQgeWllbGRzIG9ubHkgdGhlIHZhbHVlcyBmcm9t
IEB2YXJ7Z2VufSBmb3Igd2hpY2gKK0B2YXJ7cHJlZH0gcmV0dXJucyB0cnVlLgorCitAZXhh
bXBsZQorKGdlbmVyYXRvci0+bGlzdCAoZ2ZpbHRlciBvZGQ/IChtYWtlLXJhbmdlLWdlbmVy
YXRvciAxIDEwKSkpCitAcmVzdWx0e30gKDEgMyA1IDcgOSkKK0BlbmQgZXhhbXBsZQorQGVu
ZCBkZWZmbgorCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IGdyZW1vdmUgcHJlZCBnZW4K
K1JldHVybnMgYSBnZW5lcmF0b3IgdGhhdCB5aWVsZHMgb25seSB0aGUgdmFsdWVzIGZyb20g
QHZhcntnZW59IGZvciB3aGljaAorQHZhcntwcmVkfSByZXR1cm5zIGZhbHNlLgorQGVuZCBk
ZWZmbgorCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IGdtYXAgcHJvYyBnZW4gQGRvdHN7
fQorUmV0dXJucyBhIGdlbmVyYXRvciB0aGF0IGFwcGxpZXMgQHZhcntwcm9jfSB0byB0aGUg
dmFsdWVzIGZyb20gdGhlIGdpdmVuCitnZW5lcmF0b3JzIGFuZCB5aWVsZHMgdGhlIHJlc3Vs
dHMuCisKK0BleGFtcGxlCisoZ2VuZXJhdG9yLT5saXN0IChnbWFwIChsYW1iZGEgKHgpICgq
IHggMikpIChnZW5lcmF0b3IgMSAyIDMpKSkKK0ByZXN1bHR7fSAoMiA0IDYpCitAZW5kIGV4
YW1wbGUKK0BlbmQgZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSBndGFrZSBn
ZW4gayBbcGFkZGluZ10KK1JldHVybnMgYSBnZW5lcmF0b3IgdGhhdCB5aWVsZHMgdGhlIGZp
cnN0IEB2YXJ7a30gdmFsdWVzIGZyb20gQHZhcntnZW59LgorSWYgQHZhcntnZW59IGlzIGV4
aGF1c3RlZCBiZWZvcmUgQHZhcntrfSB2YWx1ZXMgYXJlIHByb2R1Y2VkLCBhbmQKK0B2YXJ7
cGFkZGluZ30gaXMgcHJvdmlkZWQsIHRoZSByZW1haW5pbmcgdmFsdWVzIGFyZSBAdmFye3Bh
ZGRpbmd9LgorCitAZXhhbXBsZQorKGdlbmVyYXRvci0+bGlzdCAoZ3Rha2UgKGdlbmVyYXRv
ciAxIDIgMyA0IDUpIDMpKQorQHJlc3VsdHt9ICgxIDIgMykKKyhnZW5lcmF0b3ItPmxpc3Qg
KGd0YWtlIChnZW5lcmF0b3IgMSAyKSA0IDApKQorQHJlc3VsdHt9ICgxIDIgMCAwKQorQGVu
ZCBleGFtcGxlCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gZ2Ry
b3AgZ2VuIGsKK1JldHVybnMgYSBnZW5lcmF0b3IgdGhhdCBza2lwcyB0aGUgZmlyc3QgQHZh
cntrfSB2YWx1ZXMgZnJvbSBAdmFye2dlbn0sCit0aGVuIHlpZWxkcyB0aGUgcmVtYWluaW5n
IHZhbHVlcy4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSBndGFr
ZS13aGlsZSBwcmVkIGdlbgorQGRlZmZueCB7U2NoZW1lIFByb2NlZHVyZX0gZ2Ryb3Atd2hp
bGUgcHJlZCBnZW4KK0Bjb2Rle2d0YWtlLXdoaWxlfSByZXR1cm5zIGEgZ2VuZXJhdG9yIHRo
YXQgeWllbGRzIHZhbHVlcyBmcm9tIEB2YXJ7Z2VufQorYXMgbG9uZyBhcyBAdmFye3ByZWR9
IHJldHVybnMgdHJ1ZS4gIEBjb2Rle2dkcm9wLXdoaWxlfSByZXR1cm5zIGEgZ2VuZXJhdG9y
Cit0aGF0IHNraXBzIHZhbHVlcyBmcm9tIEB2YXJ7Z2VufSBhcyBsb25nIGFzIEB2YXJ7cHJl
ZH0gcmV0dXJucyB0cnVlLCB0aGVuCit5aWVsZHMgdGhlIHJlbWFpbmluZyB2YWx1ZXMuCitA
ZW5kIGRlZmZuCisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gZ2ZsYXR0ZW4gZ2VuCitS
ZXR1cm5zIGEgZ2VuZXJhdG9yIHRoYXQgeWllbGRzIHRoZSBlbGVtZW50cyBvZiB0aGUgbGlz
dHMgcHJvZHVjZWQgYnkKK0B2YXJ7Z2VufS4KKworQGV4YW1wbGUKKyhnZW5lcmF0b3ItPmxp
c3QgKGdmbGF0dGVuIChnZW5lcmF0b3IgJygxIDIpICcoMyA0KSkpKQorQHJlc3VsdHt9ICgx
IDIgMyA0KQorQGVuZCBleGFtcGxlCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7U2NoZW1lIFBy
b2NlZHVyZX0gZ21lcmdlIGxlc3MtdGhhbiBnZW4gQGRvdHN7fQorUmV0dXJucyBhIGdlbmVy
YXRvciB0aGF0IG1lcmdlcyB2YWx1ZXMgZnJvbSB0aGUgZ2l2ZW4gZ2VuZXJhdG9ycywgd2hp
Y2gKK211c3QgeWllbGQgdmFsdWVzIGluIG5vbi1kZWNyZWFzaW5nIG9yZGVyIGFjY29yZGlu
ZyB0byBAdmFye2xlc3MtdGhhbn0uCitUaGUgb3V0cHV0IGlzIGFsc28gaW4gbm9uLWRlY3Jl
YXNpbmcgb3JkZXIuCisKK0BleGFtcGxlCisoZ2VuZXJhdG9yLT5saXN0IChnbWVyZ2UgPCAo
Z2VuZXJhdG9yIDEgMyA1KSAoZ2VuZXJhdG9yIDIgNCA2KSkpCitAcmVzdWx0e30gKDEgMiAz
IDQgNSA2KQorQGVuZCBleGFtcGxlCitAZW5kIGRlZmZuCisKK0Bub2RlIFNSRkktMTU4IENv
bnN1bWVycworQHN1YnN1YnNlY3Rpb24gU1JGSS0xNTggQ29uc3VtZXJzCisKK1RoZXNlIHBy
b2NlZHVyZXMgY29uc3VtZSB2YWx1ZXMgZnJvbSBnZW5lcmF0b3JzLgorCitAZGVmZm4ge1Nj
aGVtZSBQcm9jZWR1cmV9IGdlbmVyYXRvci0+bGlzdCBnZW5lcmF0b3IgW2tdCitSZWFkcyBp
dGVtcyBmcm9tIEB2YXJ7Z2VuZXJhdG9yfSBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgdGhlbS4g
IElmIEB2YXJ7a30KK2lzIGdpdmVuLCByZWFkcyBhdCBtb3N0IEB2YXJ7a30gaXRlbXMuCisK
K0BleGFtcGxlCisoZ2VuZXJhdG9yLT5saXN0IChnZW5lcmF0b3IgMSAyIDMpKQorQHJlc3Vs
dHt9ICgxIDIgMykKKyhnZW5lcmF0b3ItPmxpc3QgKG1ha2UtcmFuZ2UtZ2VuZXJhdG9yIDEp
IDUpCitAcmVzdWx0e30gKDEgMiAzIDQgNSkKK0BlbmQgZXhhbXBsZQorQGVuZCBkZWZmbgor
CitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IGdlbmVyYXRvci0+cmV2ZXJzZS1saXN0IGdl
bmVyYXRvciBba10KK0xpa2UgQGNvZGV7Z2VuZXJhdG9yLT5saXN0fSwgYnV0IHJldHVybnMg
dGhlIGl0ZW1zIGluIHJldmVyc2Ugb3JkZXIuCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7U2No
ZW1lIFByb2NlZHVyZX0gZ2VuZXJhdG9yLT52ZWN0b3IgZ2VuZXJhdG9yIFtrXQorQGRlZmZu
eCB7U2NoZW1lIFByb2NlZHVyZX0gZ2VuZXJhdG9yLT5zdHJpbmcgZ2VuZXJhdG9yIFtrXQor
UmVhZHMgaXRlbXMgZnJvbSBAdmFye2dlbmVyYXRvcn0gYW5kIHJldHVybnMgYSB2ZWN0b3Ig
b3Igc3RyaW5nIG9mIHRoZW0uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7U2NoZW1lIFByb2Nl
ZHVyZX0gZ2VuZXJhdG9yLWZvbGQgcHJvYyBzZWVkIGdlbiBAZG90c3t9CitBcHBsaWVzIEB2
YXJ7cHJvY30gdG8gdGhlIHZhbHVlcyBmcm9tIHRoZSBnZW5lcmF0b3JzIGFuZCBhbiBhY2N1
bXVsYXRvciwKK3N0YXJ0aW5nIHdpdGggQHZhcntzZWVkfS4gIFJldHVybnMgdGhlIGZpbmFs
IGFjY3VtdWxhdG9yIHZhbHVlLgorCitAZXhhbXBsZQorKGdlbmVyYXRvci1mb2xkICsgMCAo
Z2VuZXJhdG9yIDEgMiAzIDQgNSkpCitAcmVzdWx0e30gMTUKK0BlbmQgZXhhbXBsZQorQGVu
ZCBkZWZmbgorCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IGdlbmVyYXRvci1mb3ItZWFj
aCBwcm9jIGdlbiBAZG90c3t9CitBcHBsaWVzIEB2YXJ7cHJvY30gdG8gdGhlIHZhbHVlcyBm
cm9tIHRoZSBnZW5lcmF0b3JzIGZvciBzaWRlIGVmZmVjdHMuCitSZXR1cm5zIGFuIHVuc3Bl
Y2lmaWVkIHZhbHVlLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9
IGdlbmVyYXRvci1maW5kIHByZWQgZ2VuCitSZXR1cm5zIHRoZSBmaXJzdCB2YWx1ZSBmcm9t
IEB2YXJ7Z2VufSBmb3Igd2hpY2ggQHZhcntwcmVkfSByZXR1cm5zIHRydWUsCitvciBAY29k
ZXsjZn0gaWYgbm8gc3VjaCB2YWx1ZSBpcyBmb3VuZC4KK0BlbmQgZGVmZm4KKworQGRlZmZu
IHtTY2hlbWUgUHJvY2VkdXJlfSBnZW5lcmF0b3ItY291bnQgcHJlZCBnZW4KK1JldHVybnMg
dGhlIG51bWJlciBvZiB2YWx1ZXMgZnJvbSBAdmFye2dlbn0gZm9yIHdoaWNoIEB2YXJ7cHJl
ZH0gcmV0dXJucwordHJ1ZS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2Vk
dXJlfSBnZW5lcmF0b3ItYW55IHByZWQgZ2VuCitAZGVmZm54IHtTY2hlbWUgUHJvY2VkdXJl
fSBnZW5lcmF0b3ItZXZlcnkgcHJlZCBnZW4KK0Bjb2Rle2dlbmVyYXRvci1hbnl9IHJldHVy
bnMgdHJ1ZSBpZiBAdmFye3ByZWR9IHJldHVybnMgdHJ1ZSBmb3IgYW55IHZhbHVlCitmcm9t
IEB2YXJ7Z2VufS4gIEBjb2Rle2dlbmVyYXRvci1ldmVyeX0gcmV0dXJucyB0cnVlIGlmIEB2
YXJ7cHJlZH0gcmV0dXJucwordHJ1ZSBmb3IgYWxsIHZhbHVlcyBmcm9tIEB2YXJ7Z2VufS4K
K0BlbmQgZGVmZm4KKworQG5vZGUgU1JGSS0xNTggQWNjdW11bGF0b3JzCitAc3Vic3Vic2Vj
dGlvbiBTUkZJLTE1OCBBY2N1bXVsYXRvcnMKKworQWNjdW11bGF0b3JzIGNvbnN1bWUgdmFs
dWVzIGFuZCByZXR1cm4gYSByZXN1bHQgd2hlbiBwYXNzZWQgYW4gZW5kLW9mLWZpbGUKK29i
amVjdC4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSBsaXN0LWFjY3VtdWxhdG9yCitS
ZXR1cm5zIGFuIGFjY3VtdWxhdG9yIHRoYXQgY29sbGVjdHMgdmFsdWVzIGludG8gYSBsaXN0
LgorCitAZXhhbXBsZQorKGRlZmluZSBhY2MgKGxpc3QtYWNjdW11bGF0b3IpKQorKGFjYyAx
KQorKGFjYyAyKQorKGFjYyAzKQorKGFjYyAoZW9mLW9iamVjdCkpIEByZXN1bHR7fSAoMSAy
IDMpCitAZW5kIGV4YW1wbGUKK0BlbmQgZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2Vk
dXJlfSByZXZlcnNlLWxpc3QtYWNjdW11bGF0b3IKK1JldHVybnMgYW4gYWNjdW11bGF0b3Ig
dGhhdCBjb2xsZWN0cyB2YWx1ZXMgaW50byBhIGxpc3QgaW4gcmV2ZXJzZSBvcmRlci4KK0Bl
bmQgZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSB2ZWN0b3ItYWNjdW11bGF0
b3IKK0BkZWZmbngge1NjaGVtZSBQcm9jZWR1cmV9IHN0cmluZy1hY2N1bXVsYXRvcgorQGRl
ZmZueCB7U2NoZW1lIFByb2NlZHVyZX0gYnl0ZXZlY3Rvci1hY2N1bXVsYXRvcgorUmV0dXJu
cyBhbiBhY2N1bXVsYXRvciB0aGF0IGNvbGxlY3RzIHZhbHVlcyBpbnRvIGEgdmVjdG9yLCBz
dHJpbmcsIG9yCitieXRldmVjdG9yLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1NjaGVtZSBQ
cm9jZWR1cmV9IGNvdW50LWFjY3VtdWxhdG9yCitSZXR1cm5zIGFuIGFjY3VtdWxhdG9yIHRo
YXQgY291bnRzIHRoZSBudW1iZXIgb2YgdmFsdWVzIGl0IHJlY2VpdmVzLgorQGVuZCBkZWZm
bgorCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IHN1bS1hY2N1bXVsYXRvcgorQGRlZmZu
eCB7U2NoZW1lIFByb2NlZHVyZX0gcHJvZHVjdC1hY2N1bXVsYXRvcgorUmV0dXJucyBhbiBh
Y2N1bXVsYXRvciB0aGF0IGNvbXB1dGVzIHRoZSBzdW0gb3IgcHJvZHVjdCBvZiB0aGUgdmFs
dWVzIGl0CityZWNlaXZlcy4KKworQGV4YW1wbGUKKyhkZWZpbmUgYWNjIChzdW0tYWNjdW11
bGF0b3IpKQorKGFjYyAxKQorKGFjYyAyKQorKGFjYyAzKQorKGFjYyAoZW9mLW9iamVjdCkp
IEByZXN1bHR7fSA2CitAZW5kIGV4YW1wbGUKK0BlbmQgZGVmZm4KKworCiBAbm9kZSBTUkZJ
LTE3MQogQHN1YnNlY3Rpb24gVHJhbnNkdWNlcnMKIEBjaW5kZXggU1JGSS0xNzEKZGlmZiAt
LWdpdCBhL21vZHVsZS9zcmZpL3NyZmktMTU4LnNjbSBiL21vZHVsZS9zcmZpL3NyZmktMTU4
LnNjbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjZiZTE3YTA1Ywot
LS0gL2Rldi9udWxsCisrKyBiL21vZHVsZS9zcmZpL3NyZmktMTU4LnNjbQpAQCAtMCwwICsx
LDEyMSBAQAorOzsgc3JmaS0xNTguc2NtIC0tLSBHZW5lcmF0b3JzIGFuZCBBY2N1bXVsYXRv
cnMKKworOzsgCUNvcHlyaWdodCAoQykgMjAyNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4KKzs7Cis7OyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7OyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCis7OyBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKzs7IHZlcnNpb24g
MyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKzs7Cis7OyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7OyBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorOzsg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzs7Cis7
OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCis7OyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCis7OyBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEg
VVNBCisKKzs7OyBSZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gZnJvbSBTUkZJIDE1OAorOzs7
IENvcHlyaWdodCAoYykgMjAxNSwgMjAxNyBTaGlybyBLYXdhaSwgSm9obiBDb3dhbiwgVGhv
bWFzIEdpbHJheQorOzs7IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg
Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKzs7OyBvZiB0aGlzIHNv
ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh
cmUiKSwgdG8gZGVhbAorOzs7IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u
LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKzs7OyB0byB1c2Us
IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us
IGFuZC9vciBzZWxsCis7OzsgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p
dCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCis7OzsgZnVybmlzaGVkIHRvIGRv
IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKzs7OworOzs7IFRo
ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo
YWxsIGJlIGluY2x1ZGVkIGluCis7OzsgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0
aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKzs7OyBDb21tZW50YXJ5OgorCis7OyBUaGlzIGlz
IGFuIGltcGxlbWVudGF0aW9uIG9mIFNSRkktMTU4IChHZW5lcmF0b3JzIGFuZCBBY2N1bXVs
YXRvcnMpLgorOzsKKzs7IEdlbmVyYXRvcnMgYXJlIHByb2NlZHVyZXMgdGhhdCBjYW4gYmUg
Y2FsbGVkIHJlcGVhdGVkbHkgdG8gcHJvZHVjZSBhCis7OyBzZXF1ZW5jZSBvZiB2YWx1ZXMu
IEFjY3VtdWxhdG9ycyBhcmUgdGhlIGludmVyc2U6IHByb2NlZHVyZXMgdGhhdCBjYW4KKzs7
IGJlIGNhbGxlZCByZXBlYXRlZGx5IHRvIGNvbnN1bWUgYSBzZXF1ZW5jZSBvZiB2YWx1ZXMu
Cis7OworOzsgU2VlIHRoZSBTUkZJIDE1OCBzcGVjaWZpY2F0aW9uIGF0IGh0dHBzOi8vc3Jm
aS5zY2hlbWVycy5vcmcvc3JmaS0xNTgvCis7OyBmb3IgZGV0YWlsZWQgZG9jdW1lbnRhdGlv
bi4KKworOzs7IENvZGU6CisKKyhkZWZpbmUtbW9kdWxlIChzcmZpIHNyZmktMTU4KQorICAj
OnVzZS1tb2R1bGUgKHJucnMgaW8gcG9ydHMpCisgICM6dXNlLW1vZHVsZSAocm5ycyBieXRl
dmVjdG9ycykKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMTEpCisgICM6ZXhwb3J0ICgK
Kzs7OyBHZW5lcmF0b3JzCisgZ2VuZXJhdG9yCisgY2lyY3VsYXItZ2VuZXJhdG9yCisgbWFr
ZS1pb3RhLWdlbmVyYXRvcgorIG1ha2UtcmFuZ2UtZ2VuZXJhdG9yCisgbWFrZS1jb3JvdXRp
bmUtZ2VuZXJhdG9yCisgbGlzdC0+Z2VuZXJhdG9yCisgdmVjdG9yLT5nZW5lcmF0b3IKKyBy
ZXZlcnNlLXZlY3Rvci0+Z2VuZXJhdG9yCisgc3RyaW5nLT5nZW5lcmF0b3IKKyBieXRldmVj
dG9yLT5nZW5lcmF0b3IKKyBtYWtlLWZvci1lYWNoLWdlbmVyYXRvcgorIG1ha2UtdW5mb2xk
LWdlbmVyYXRvcgorCis7OzsgR2VuZXJhdG9yIG9wZXJhdGlvbnMKKyBnY29ucyoKKyBnYXBw
ZW5kCisgZ2NvbWJpbmUKKyBnZmlsdGVyCisgZ3JlbW92ZQorIGd0YWtlCisgZ2Ryb3AKKyBn
dGFrZS13aGlsZQorIGdkcm9wLXdoaWxlCisgZ2ZsYXR0ZW4KKyBnZ3JvdXAKKyBnbWVyZ2UK
KyBnbWFwCisgZ3N0YXRlLWZpbHRlcgorIGdkZWxldGUKKyBnZGVsZXRlLW5laWdoYm9yLWR1
cHMKKyBnaW5kZXgKKyBnc2VsZWN0CisKKzs7OyBDb25zdW1pbmcgZ2VuZXJhdG9ycworIGdl
bmVyYXRvci0+bGlzdAorIGdlbmVyYXRvci0+cmV2ZXJzZS1saXN0CisgZ2VuZXJhdG9yLT52
ZWN0b3IKKyBnZW5lcmF0b3ItPnZlY3RvciEKKyBnZW5lcmF0b3ItPnN0cmluZworIGdlbmVy
YXRvci1mb2xkCisgZ2VuZXJhdG9yLW1hcC0+bGlzdAorIGdlbmVyYXRvci1mb3ItZWFjaAor
IGdlbmVyYXRvci1maW5kCisgZ2VuZXJhdG9yLWNvdW50CisgZ2VuZXJhdG9yLWFueQorIGdl
bmVyYXRvci1ldmVyeQorIGdlbmVyYXRvci11bmZvbGQKKworOzs7IEFjY3VtdWxhdG9ycwor
IG1ha2UtYWNjdW11bGF0b3IKKyBjb3VudC1hY2N1bXVsYXRvcgorIGxpc3QtYWNjdW11bGF0
b3IKKyByZXZlcnNlLWxpc3QtYWNjdW11bGF0b3IKKyB2ZWN0b3ItYWNjdW11bGF0b3IKKyBy
ZXZlcnNlLXZlY3Rvci1hY2N1bXVsYXRvcgorIHZlY3Rvci1hY2N1bXVsYXRvciEKKyBzdHJp
bmctYWNjdW11bGF0b3IKKyBieXRldmVjdG9yLWFjY3VtdWxhdG9yCisgYnl0ZXZlY3Rvci1h
Y2N1bXVsYXRvciEKKyBzdW0tYWNjdW11bGF0b3IKKyBwcm9kdWN0LWFjY3VtdWxhdG9yCisg
KSkKKworKGNvbmQtZXhwYW5kLXByb3ZpZGUgKGN1cnJlbnQtbW9kdWxlKSAnKHNyZmktMTU4
KSkKKworOzsgR3VpbGUgY29tcGF0aWJpbGl0eSBzaGltcyBmb3IgUjdSUyBmdW5jdGlvbnMK
KworKGRlZmluZSAodHJ1bmNhdGUvIG4xIG4yKQorICAodmFsdWVzIChxdW90aWVudCBuMSBu
MikgKHJlbWFpbmRlciBuMSBuMikpKQorCis7OyBMb2FkIHRoZSByZWZlcmVuY2UgaW1wbGVt
ZW50YXRpb24KKyhpbmNsdWRlLWZyb20tcGF0aCAic3JmaS9zcmZpLTE1OC9pbXBsLnNjbSIp
CmRpZmYgLS1naXQgYS9tb2R1bGUvc3JmaS9zcmZpLTE1OC9pbXBsLnNjbSBiL21vZHVsZS9z
cmZpL3NyZmktMTU4L2ltcGwuc2NtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMC4uMjE4NTRlMzZkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlL3NyZmkvc3JmaS0x
NTgvaW1wbC5zY20KQEAgLTAsMCArMSw1ODAgQEAKKzs7IENoaWJpIFNjaGVtZSB2ZXJzaW9u
IG9mIGFueQorCisoZGVmaW5lIChhbnkgcHJlZCBscykKKyAgKGlmIChudWxsPyAoY2RyIGxz
KSkKKyAgICAocHJlZCAoY2FyIGxzKSkKKyAgICAoKGxhbWJkYSAoeCkgKGlmIHggeCAoYW55
IHByZWQgKGNkciBscykpKSkgKHByZWQgKGNhciBscykpKSkpCisKKzs7IGxpc3QtPmJ5dGV2
ZWN0b3IKKyhkZWZpbmUgKGxpc3QtPmJ5dGV2ZWN0b3IgbGlzdCkKKyAgKGxldCAoKHZlYyAo
bWFrZS1ieXRldmVjdG9yIChsZW5ndGggbGlzdCkgMCkpKQorICAgIChsZXQgbG9vcCAoKGkg
MCkgKGxpc3QgbGlzdCkpCisgICAgICAoaWYgKG51bGw/IGxpc3QpCisgICAgICAgIHZlYwor
ICAgICAgICAoYmVnaW4KKyAgICAgICAgICAoYnl0ZXZlY3Rvci11OC1zZXQhIHZlYyBpIChj
YXIgbGlzdCkpCisgICAgICAgICAgKGxvb3AgKCsgaSAxKSAoY2RyIGxpc3QpKSkpKSkpCisK
KworOzsgZ2VuZXJhdG9yCisoZGVmaW5lIChnZW5lcmF0b3IgLiBhcmdzKQorICAobGFtYmRh
ICgpIChpZiAobnVsbD8gYXJncykKKyAgICAgICAgICAgICAgIChlb2Ytb2JqZWN0KQorICAg
ICAgICAgICAgICAgKGxldCAoKG5leHQgKGNhciBhcmdzKSkpCisgICAgICAgICAgICAgICAg
KHNldCEgYXJncyAoY2RyIGFyZ3MpKQorICAgICAgICAgICAgICAgIG5leHQpKSkpCisKKzs7
IGNpcmN1bGFyLWdlbmVyYXRvcgorKGRlZmluZSAoY2lyY3VsYXItZ2VuZXJhdG9yIC4gYXJn
cykKKyAgKGxldCAoKGJhc2UtYXJncyBhcmdzKSkKKyAgICAobGFtYmRhICgpCisgICAgICAo
d2hlbiAobnVsbD8gYXJncykKKyAgICAgICAgKHNldCEgYXJncyBiYXNlLWFyZ3MpKQorICAg
ICAgICAgIChsZXQgKChuZXh0IChjYXIgYXJncykpKQorICAgICAgICAgICAgICAgIChzZXQh
IGFyZ3MgKGNkciBhcmdzKSkKKyAgICAgICAgICAgICAgICBuZXh0KSkpKQorCisKKzs7IG1h
a2UtaW90YS1nZW5lcmF0b3IKKyhkZWZpbmUgbWFrZS1pb3RhLWdlbmVyYXRvcgorICAoY2Fz
ZS1sYW1iZGEgKChjb3VudCkgKG1ha2UtaW90YS1nZW5lcmF0b3IgY291bnQgMCAxKSkKKyAg
ICAgICAgICAgICAgICgoY291bnQgc3RhcnQpIChtYWtlLWlvdGEtZ2VuZXJhdG9yIGNvdW50
IHN0YXJ0IDEpKQorICAgICAgICAgICAgICAgKChjb3VudCBzdGFydCBzdGVwKSAobWFrZS1p
b3RhIGNvdW50IHN0YXJ0IHN0ZXApKSkpCisKKzs7IG1ha2UtaW90YQorKGRlZmluZSAobWFr
ZS1pb3RhIGNvdW50IHN0YXJ0IHN0ZXApCisgIChsYW1iZGEgKCkKKyAgICAoY29uZAorICAg
ICAgKCg8PSBjb3VudCAwKQorICAgICAgIChlb2Ytb2JqZWN0KSkKKyAgICAgIChlbHNlCisg
ICAgICAgIChsZXQgKChyZXN1bHQgc3RhcnQpKQorICAgICAgICAgKHNldCEgY291bnQgKC0g
Y291bnQgMSkpCisgICAgICAgICAoc2V0ISBzdGFydCAoKyBzdGFydCBzdGVwKSkKKyAgICAg
ICAgIHJlc3VsdCkpKSkpCisKKworOzsgbWFrZS1yYW5nZS1nZW5lcmF0b3IKKyhkZWZpbmUg
bWFrZS1yYW5nZS1nZW5lcmF0b3IKKyAgKGNhc2UtbGFtYmRhICgoc3RhcnQgZW5kKSAobWFr
ZS1yYW5nZS1nZW5lcmF0b3Igc3RhcnQgZW5kIDEpKQorICAgICAgICAgICAgICAgKChzdGFy
dCkgKG1ha2UtaW5maW5pdGUtcmFuZ2UtZ2VuZXJhdG9yIHN0YXJ0KSkKKyAgICAgICAgICAg
ICAgICgoc3RhcnQgZW5kIHN0ZXApCisgICAgICAgICAgICAgICAgKHNldCEgc3RhcnQgKC0g
KCsgc3RhcnQgc3RlcCkgc3RlcCkpCisgICAgICAgICAgICAgICAgKGxhbWJkYSAoKSAoaWYg
KDwgc3RhcnQgZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgodiBz
dGFydCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0ISBzdGFydCAoKyBz
dGFydCBzdGVwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChlb2Ytb2JqZWN0KSkpKSkpCisKKyhkZWZpbmUgKG1h
a2UtaW5maW5pdGUtcmFuZ2UtZ2VuZXJhdG9yIHN0YXJ0KQorICAobGFtYmRhICgpCisgICAg
KGxldCAoKHJlc3VsdCBzdGFydCkpCisgICAgIChzZXQhIHN0YXJ0ICgrIHN0YXJ0IDEpKQor
ICAgICByZXN1bHQpKSkKKworCisKKzs7IG1ha2UtY29yb3V0aW5lLWdlbmVyYXRvcgorKGRl
ZmluZSAobWFrZS1jb3JvdXRpbmUtZ2VuZXJhdG9yIHByb2MpCisgIChkZWZpbmUgcmV0dXJu
ICNmKQorICAoZGVmaW5lIHJlc3VtZSAjZikKKyAgKGRlZmluZSB5aWVsZCAobGFtYmRhICh2
KSAoY2FsbC9jYyAobGFtYmRhIChyKSAoc2V0ISByZXN1bWUgcikgKHJldHVybiB2KSkpKSkK
KyAgKGxhbWJkYSAoKSAoY2FsbC9jYyAobGFtYmRhIChjYykgKHNldCEgcmV0dXJuIGNjKQor
ICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHJlc3VtZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAocmVzdW1lIChpZiAjZiAjZikpICA7IHZvaWQ/IG9yIHlpZWxkIGFnYWluPwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAoYmVnaW4gKHByb2MgeWllbGQpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0ISByZXN1bWUgKGxhbWJkYSAodikgKHJl
dHVybiAoZW9mLW9iamVjdCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChyZXR1cm4gKGVvZi1vYmplY3QpKSkpKSkpKQorCisKKzs7IGxpc3QtPmdlbmVyYXRvcgor
KGRlZmluZSAobGlzdC0+Z2VuZXJhdG9yIGxzdCkKKyAgKGxhbWJkYSAoKSAoaWYgKG51bGw/
IGxzdCkKKyAgICAgICAgICAgICAgIChlb2Ytb2JqZWN0KQorICAgICAgICAgICAgICAgKGxl
dCAoKG5leHQgKGNhciBsc3QpKSkKKyAgICAgICAgICAgICAgICAoc2V0ISBsc3QgKGNkciBs
c3QpKQorICAgICAgICAgICAgICAgIG5leHQpKSkpCisKKworOzsgdmVjdG9yLT5nZW5lcmF0
b3IKKyhkZWZpbmUgdmVjdG9yLT5nZW5lcmF0b3IKKyAgKGNhc2UtbGFtYmRhICgodmVjKSAo
dmVjdG9yLT5nZW5lcmF0b3IgdmVjIDAgKHZlY3Rvci1sZW5ndGggdmVjKSkpCisgICAgICAg
ICAgICAgICAoKHZlYyBzdGFydCkgKHZlY3Rvci0+Z2VuZXJhdG9yIHZlYyBzdGFydCAodmVj
dG9yLWxlbmd0aCB2ZWMpKSkKKyAgICAgICAgICAgICAgICgodmVjIHN0YXJ0IGVuZCkKKyAg
ICAgICAgICAgICAgICAobGFtYmRhICgpIChpZiAoPj0gc3RhcnQgZW5kKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoZW9mLW9iamVjdCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGxldCAoKG5leHQgKHZlY3Rvci1yZWYgdmVjIHN0YXJ0KSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc2V0ISBzdGFydCAoKyBzdGFydCAxKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQpKSkpKSkKKworCis7OyByZXZlcnNlLXZl
Y3Rvci0+Z2VuZXJhdG9yCisoZGVmaW5lIHJldmVyc2UtdmVjdG9yLT5nZW5lcmF0b3IKKyAg
KGNhc2UtbGFtYmRhICgodmVjKSAocmV2ZXJzZS12ZWN0b3ItPmdlbmVyYXRvciB2ZWMgMCAo
dmVjdG9yLWxlbmd0aCB2ZWMpKSkKKyAgICAgICAgICAgICAgICgodmVjIHN0YXJ0KSAocmV2
ZXJzZS12ZWN0b3ItPmdlbmVyYXRvciB2ZWMgc3RhcnQgKHZlY3Rvci1sZW5ndGggdmVjKSkp
CisgICAgICAgICAgICAgICAoKHZlYyBzdGFydCBlbmQpCisgICAgICAgICAgICAgICAgKGxh
bWJkYSAoKSAoaWYgKD49IHN0YXJ0IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGVvZi1vYmplY3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZXQgKChu
ZXh0ICh2ZWN0b3ItcmVmIHZlYyAoLSBlbmQgMSkpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChzZXQhIGVuZCAoLSBlbmQgMSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXh0KSkpKSkpCisKKworOzsgc3RyaW5nLT5nZW5lcmF0b3IKKyhkZWZpbmUg
c3RyaW5nLT5nZW5lcmF0b3IKKyAgKGNhc2UtbGFtYmRhICgoc3RyKSAoc3RyaW5nLT5nZW5l
cmF0b3Igc3RyIDAgKHN0cmluZy1sZW5ndGggc3RyKSkpCisgICAgICAgICAgICAgICAoKHN0
ciBzdGFydCkgKHN0cmluZy0+Z2VuZXJhdG9yIHN0ciBzdGFydCAoc3RyaW5nLWxlbmd0aCBz
dHIpKSkKKyAgICAgICAgICAgICAgICgoc3RyIHN0YXJ0IGVuZCkKKyAgICAgICAgICAgICAg
ICAobGFtYmRhICgpIChpZiAoPj0gc3RhcnQgZW5kKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoZW9mLW9iamVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxl
dCAoKG5leHQgKHN0cmluZy1yZWYgc3RyIHN0YXJ0KSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoc2V0ISBzdGFydCAoKyBzdGFydCAxKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5leHQpKSkpKSkKKworCis7OyBieXRldmVjdG9yLT5nZW5lcmF0b3IK
KyhkZWZpbmUgYnl0ZXZlY3Rvci0+Z2VuZXJhdG9yCisgIChjYXNlLWxhbWJkYSAoKHN0cikg
KGJ5dGV2ZWN0b3ItPmdlbmVyYXRvciBzdHIgMCAoYnl0ZXZlY3Rvci1sZW5ndGggc3RyKSkp
CisgICAgICAgICAgICAgICAoKHN0ciBzdGFydCkgKGJ5dGV2ZWN0b3ItPmdlbmVyYXRvciBz
dHIgc3RhcnQgKGJ5dGV2ZWN0b3ItbGVuZ3RoIHN0cikpKQorICAgICAgICAgICAgICAgKChz
dHIgc3RhcnQgZW5kKQorICAgICAgICAgICAgICAgIChsYW1iZGEgKCkgKGlmICg+PSBzdGFy
dCBlbmQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlb2Ytb2JqZWN0KQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgobmV4dCAoYnl0ZXZlY3Rvci11OC1y
ZWYgc3RyIHN0YXJ0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0ISBz
dGFydCAoKyBzdGFydCAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQp
KSkpKSkKKworCis7OyBtYWtlLWZvci1lYWNoLWdlbmVyYXRvcgorO0ZJWE1FOiBzZWVtcyB0
byBmYWlsIHRlc3QKKyhkZWZpbmUgKG1ha2UtZm9yLWVhY2gtZ2VuZXJhdG9yIGZvci1lYWNo
IG9iaikKKyAgKG1ha2UtY29yb3V0aW5lLWdlbmVyYXRvciAobGFtYmRhICh5aWVsZCkgKGZv
ci1lYWNoIHlpZWxkIG9iaikpKSkKKworCis7OyBtYWtlLXVuZm9sZC1nZW5lcmF0b3IKKyhk
ZWZpbmUgKG1ha2UtdW5mb2xkLWdlbmVyYXRvciBzdG9wPyBtYXBwZXIgc3VjY2Vzc29yIHNl
ZWQpCisgIChtYWtlLWNvcm91dGluZS1nZW5lcmF0b3IgKGxhbWJkYSAoeWllbGQpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAobGV0IGxvb3AgKChzIHNlZWQpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoc3RvcD8gcykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChpZiAjZiAjZikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChiZWdpbiAoeWllbGQgKG1hcHBlciBzKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAobG9vcCAoc3VjY2Vzc29yIHMpKSkpKSkpKQorCisK
Kzs7IGdjb25zKgorKGRlZmluZSAoZ2NvbnMqIC4gYXJncykKKyAgKGxhbWJkYSAoKSAoaWYg
KG51bGw/IGFyZ3MpCisgICAgICAgICAgICAgICAoZW9mLW9iamVjdCkKKyAgICAgICAgICAg
ICAgIChpZiAoPSAobGVuZ3RoIGFyZ3MpIDEpCisgICAgICAgICAgICAgICAgICgoY2FyIGFy
Z3MpKQorICAgICAgICAgICAgICAgICAobGV0ICgodiAoY2FyIGFyZ3MpKSkKKyAgICAgICAg
ICAgICAgICAgIChzZXQhIGFyZ3MgKGNkciBhcmdzKSkKKyAgICAgICAgICAgICAgICAgIHYp
KSkpKQorCisKKzs7IGdhcHBlbmQKKyhkZWZpbmUgKGdhcHBlbmQgLiBhcmdzKQorICAobGFt
YmRhICgpIChpZiAobnVsbD8gYXJncykKKyAgICAgICAgICAgICAgIChlb2Ytb2JqZWN0KQor
ICAgICAgICAgICAgICAgKGxldCBsb29wICgodiAoKGNhciBhcmdzKSkpKQorICAgICAgICAg
ICAgICAgIChpZiAoZW9mLW9iamVjdD8gdikKKyAgICAgICAgICAgICAgICAgIChiZWdpbiAo
c2V0ISBhcmdzIChjZHIgYXJncykpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChu
dWxsPyBhcmdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVvZi1vYmplY3QpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9vcCAoKGNhciBhcmdzKSkpKSkKKyAgICAg
ICAgICAgICAgICAgIHYpKSkpKQorCis7OyBnZmxhdHRlbgorKGRlZmluZSAoZ2ZsYXR0ZW4g
Z2VuKQorICAobGV0ICgoc3RhdGUgJygpKSkKKyAgICAobGFtYmRhICgpCisgICAgICAoaWYg
KG51bGw/IHN0YXRlKSAoc2V0ISBzdGF0ZSAoZ2VuKSkpCisgICAgICAoaWYgKGVvZi1vYmpl
Y3Q/IHN0YXRlKQorICAgICAgICBzdGF0ZQorICAgICAgICAobGV0ICgob2JqIChjYXIgc3Rh
dGUpKSkKKyAgICAgICAgICAoc2V0ISBzdGF0ZSAoY2RyIHN0YXRlKSkKKyAgICAgICAgICBv
YmopKSkpKQorCis7OyBnZ3JvdXAKKyhkZWZpbmUgZ2dyb3VwCisgIChjYXNlLWxhbWJkYQor
ICAgICgoZ2VuIGspCisgICAgIChzaW1wbGUtZ2dyb3VwIGdlbiBrKSkKKyAgICAoKGdlbiBr
IHBhZGRpbmcpCisgICAgIChwYWRkZWQtZ2dyb3VwIChzaW1wbGUtZ2dyb3VwIGdlbiBrKSBr
IHBhZGRpbmcpKSkpCisKKyhkZWZpbmUgKHNpbXBsZS1nZ3JvdXAgZ2VuIGspCisgIChsYW1i
ZGEgKCkKKyAgICAobGV0IGxvb3AgKChpdGVtIChnZW4pKSAocmVzdWx0ICcoKSkgKGNvdW50
ICgtIGsgMSkpKQorICAgICAgKGlmIChlb2Ytb2JqZWN0PyBpdGVtKQorICAgICAgICAoaWYg
KG51bGw/IHJlc3VsdCkgaXRlbSAocmV2ZXJzZSByZXN1bHQpKQorICAgICAgICAoaWYgKD0g
Y291bnQgMCkKKyAgICAgICAgICAocmV2ZXJzZSAoY29ucyBpdGVtIHJlc3VsdCkpCisgICAg
ICAgICAgKGxvb3AgKGdlbikgKGNvbnMgaXRlbSByZXN1bHQpICgtIGNvdW50IDEpKSkpKSkp
CisKKyhkZWZpbmUgKHBhZGRlZC1nZ3JvdXAgZ2VuIGsgcGFkZGluZykKKyAgKGxhbWJkYSAo
KQorICAgIChsZXQgKChpdGVtIChnZW4pKSkKKyAgICAgIChpZiAoZW9mLW9iamVjdD8gaXRl
bSkKKyAgICAgICAgaXRlbQorICAgICAgICAobGV0ICgobGVuIChsZW5ndGggaXRlbSkpKQor
ICAgICAgICAgIChpZiAoPSBsZW4gaykKKyAgICAgICAgICAgICAgaXRlbQorICAgICAgICAg
ICAgICAoYXBwZW5kIGl0ZW0gKG1ha2UtbGlzdCAoLSBrIGxlbikgcGFkZGluZykpKSkpKSkp
CisKKzs7IGdtZXJnZQorKGRlZmluZSBnbWVyZ2UKKyAgKGNhc2UtbGFtYmRhCisgICAgKCg8
KSAoZXJyb3IgIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGdtZXJnZSIpKQorICAg
ICgoPCBnZW4pIGdlbikKKyAgICAoKDwgZ2VubGVmdCBnZW5yaWdodCkKKyAgICAgKGxldCAo
KGxlZnQgKGdlbmxlZnQpKQorICAgICAgICAgICAocmlnaHQgKGdlbnJpZ2h0KSkpCisgICAg
ICAgKGxhbWJkYSAoKQorICAgICAgICAgKGNvbmQKKyAgICAgICAgICAoKGFuZCAoZW9mLW9i
amVjdD8gbGVmdCkgKGVvZi1vYmplY3Q/IHJpZ2h0KSkKKyAgICAgICAgICAgbGVmdCkKKyAg
ICAgICAgICAoKGVvZi1vYmplY3Q/IGxlZnQpCisgICAgICAgICAgIChsZXQgKChvYmogcmln
aHQpKSAoc2V0ISByaWdodCAoZ2VucmlnaHQpKSBvYmopKQorICAgICAgICAgICgoZW9mLW9i
amVjdD8gcmlnaHQpCisgICAgICAgICAgIChsZXQgKChvYmogbGVmdCkpICAoc2V0ISBsZWZ0
IChnZW5sZWZ0KSkgb2JqKSkKKyAgICAgICAgICAoKDwgcmlnaHQgbGVmdCkKKyAgICAgICAg
ICAgKGxldCAoKG9iaiByaWdodCkpIChzZXQhIHJpZ2h0IChnZW5yaWdodCkpIG9iaikpCisg
ICAgICAgICAgKGVsc2UKKyAgICAgICAgICAgKGxldCAoKG9iaiBsZWZ0KSkgKHNldCEgbGVm
dCAoZ2VubGVmdCkpIG9iaikpKSkpKQorICAgICgoPCAuIGdlbnMpCisgICAgIChhcHBseSBn
bWVyZ2UgPAorICAgICAgICAgICAgKGxldCBsb29wICgoZ2VucyBnZW5zKSAoZ3MgJygpKSkK
KyAgICAgICAgICAgICAgKGNvbmQgKChudWxsPyBnZW5zKSAocmV2ZXJzZSBncykpCisgICAg
ICAgICAgICAgICAgICAgICgobnVsbD8gKGNkciBnZW5zKSkgKHJldmVyc2UgKGNvbnMgKGNh
ciBnZW5zKSBncykpKQorICAgICAgICAgICAgICAgICAgICAoZWxzZSAobG9vcCAoY2RkciBn
ZW5zKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ucyAoZ21lcmdlIDwg
KGNhciBnZW5zKSAoY2FkciBnZW5zKSkgZ3MpKSkpKSkpKSkKKworOzsgZ21hcAorKGRlZmlu
ZSBnbWFwCisgIChjYXNlLWxhbWJkYQorICAgICgocHJvYykgKGVycm9yICJ3cm9uZyBudW1i
ZXIgb2YgYXJndW1lbnRzIGZvciBnbWFwIikpCisgICAgKChwcm9jIGdlbikKKyAgICAgKGxh
bWJkYSAoKQorICAgICAgIChsZXQgKChpdGVtIChnZW4pKSkKKyAgICAgICAgIChpZiAoZW9m
LW9iamVjdD8gaXRlbSkgaXRlbSAocHJvYyBpdGVtKSkpKSkKKyAgICAoKHByb2MgLiBnZW5z
KQorICAgICAobGFtYmRhICgpCisgICAgICAgKGxldCAoKGl0ZW1zIChtYXAgKGxhbWJkYSAo
eCkgKHgpKSBnZW5zKSkpCisgICAgICAgICAoaWYgKGFueSBlb2Ytb2JqZWN0PyBpdGVtcykg
KGVvZi1vYmplY3QpIChhcHBseSBwcm9jIGl0ZW1zKSkpKSkpKQorCis7OyBnY29tYmluZQor
KGRlZmluZSAoZ2NvbWJpbmUgcHJvYyBzZWVkIC4gZ2VucykKKyAgKGxhbWJkYSAoKQorICAg
IChkZWZpbmUgaXRlbXMgKG1hcCAobGFtYmRhICh4KSAoeCkpIGdlbnMpKQorICAgIChpZiAo
YW55IGVvZi1vYmplY3Q/IGl0ZW1zKQorICAgICAgKGVvZi1vYmplY3QpCisgICAgICAobGV0
ICgpCisgICAgICAgKGRlZmluZS12YWx1ZXMgKHZhbHVlIG5ld3NlZWQpIChhcHBseSBwcm9j
IChhcHBlbmQgaXRlbXMgKGxpc3Qgc2VlZCkpKSkKKyAgICAgICAoc2V0ISBzZWVkIG5ld3Nl
ZWQpCisgICAgICAgdmFsdWUpKSkpCisKKzs7IGdmaWx0ZXIKKyhkZWZpbmUgKGdmaWx0ZXIg
cHJlZCBnZW4pCisgIChsYW1iZGEgKCkgKGxldCBsb29wICgpCisgICAgICAgICAgICAgIChs
ZXQgKChuZXh0IChnZW4pKSkKKyAgICAgICAgICAgICAgIChpZiAob3IgKGVvZi1vYmplY3Q/
IG5leHQpCisgICAgICAgICAgICAgICAgICAgICAgIChwcmVkIG5leHQpKQorICAgICAgICAg
ICAgICAgICBuZXh0CisgICAgICAgICAgICAgICAgIChsb29wKSkpKSkpCisKKzs7IGdzdGF0
ZS1maWx0ZXIKKyhkZWZpbmUgKGdzdGF0ZS1maWx0ZXIgcHJvYyBzZWVkIGdlbikKKyAgKGxl
dCAoKHN0YXRlIHNlZWQpKQorICAgIChsYW1iZGEgKCkKKyAgICAgIChsZXQgbG9vcCAoKGl0
ZW0gKGdlbikpKQorICAgICAgICAoaWYgKGVvZi1vYmplY3Q/IGl0ZW0pCisgICAgICAgICAg
aXRlbQorICAgICAgICAgIChsZXQtdmFsdWVzICgoKHllcyBuZXdzdGF0ZSkgKHByb2MgaXRl
bSBzdGF0ZSkpKQorICAgICAgICAgICAgKHNldCEgc3RhdGUgbmV3c3RhdGUpCisgICAgICAg
ICAgICAoaWYgeWVzCisgICAgICAgICAgICAgICBpdGVtCisgICAgICAgICAgICAgICAobG9v
cCAoZ2VuKSkpKSkpKSkpCisKKworCis7OyBncmVtb3ZlCisoZGVmaW5lIChncmVtb3ZlIHBy
ZWQgZ2VuKQorICAoZ2ZpbHRlciAobGFtYmRhICh2KSAobm90IChwcmVkIHYpKSkgZ2VuKSkK
KworCisKKzs7IGd0YWtlCisoZGVmaW5lIGd0YWtlCisgIChjYXNlLWxhbWJkYSAoKGdlbiBr
KSAoZ3Rha2UgZ2VuIGsgKGVvZi1vYmplY3QpKSkKKyAgICAgICAgICAgICAgICgoZ2VuIGsg
cGFkZGluZykKKyAgICAgICAgICAgICAgICAobWFrZS1jb3JvdXRpbmUtZ2VuZXJhdG9yIChs
YW1iZGEgKHlpZWxkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoaWYgKD4gayAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChsZXQgbG9vcCAoKGkgMCkgKHYgKGdlbikpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmVnaW4gKGlmIChlb2Ytb2JqZWN0
PyB2KSAoeWllbGQgcGFkZGluZykgKHlpZWxkIHYpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmICg8ICgrIDEgaSkgaykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGxvb3AgKCsgMSBpKSAoZ2VuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGVvZi1vYmplY3QpKSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVvZi1vYmplY3QpKSkpKSkpCisK
KworCis7OyBnZHJvcAorKGRlZmluZSAoZ2Ryb3AgZ2VuIGspCisgIChsYW1iZGEgKCkgKGRv
ICgpICgoPD0gayAwKSkgKHNldCEgayAoLSBrIDEpKSAoZ2VuKSkKKyAgICAoZ2VuKSkpCisK
KworCis7OyBnZHJvcC13aGlsZQorKGRlZmluZSAoZ2Ryb3Atd2hpbGUgcHJlZCBnZW4pCisg
IChkZWZpbmUgZm91bmQgI2YpCisgIChsYW1iZGEgKCkKKyAgICAobGV0IGxvb3AgKCkKKyAg
ICAgKGxldCAoKHZhbCAoZ2VuKSkpCisgICAgICAoY29uZCAoZm91bmQgdmFsKQorICAgICAg
ICAgICAgKChhbmQgKG5vdCAoZW9mLW9iamVjdD8gdmFsKSkgKHByZWQgdmFsKSkgKGxvb3Ap
KQorICAgICAgICAgICAgKGVsc2UgKHNldCEgZm91bmQgI3QpIHZhbCkpKSkpKQorCisKKzs7
IGd0YWtlLXdoaWxlCisoZGVmaW5lIChndGFrZS13aGlsZSBwcmVkIGdlbikKKyAgKGxhbWJk
YSAoKSAobGV0ICgobmV4dCAoZ2VuKSkpCisgICAgICAgICAgICAgIChpZiAoZW9mLW9iamVj
dD8gbmV4dCkKKyAgICAgICAgICAgICAgICBuZXh0CisgICAgICAgICAgICAgICAgKGlmIChw
cmVkIG5leHQpCisgICAgICAgICAgICAgICAgICBuZXh0CisgICAgICAgICAgICAgICAgICAo
YmVnaW4gKHNldCEgZ2VuIChnZW5lcmF0b3IpKQorICAgICAgICAgICAgICAgICAgICAgICAg
IChnZW4pKSkpKSkpCisKKworCis7OyBnZGVsZXRlCisoZGVmaW5lIGdkZWxldGUKKyAgKGNh
c2UtbGFtYmRhICgoaXRlbSBnZW4pIChnZGVsZXRlIGl0ZW0gZ2VuIGVxdWFsPykpCisgICAg
ICAgICAgICAgICAoKGl0ZW0gZ2VuID09KQorICAgICAgICAgICAgICAgIChsYW1iZGEgKCkg
KGxldCBsb29wICgodiAoZ2VuKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv
bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZW9mLW9iamVjdD8gdikgKGVv
Zi1vYmplY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCg9PSBpdGVtIHYp
IChsb29wIChnZW4pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbHNlIHYp
KSkpKSkpCisKKworCis7OyBnZGVsZXRlLW5laWdoYm9yLWR1cHMKKyhkZWZpbmUgZ2RlbGV0
ZS1uZWlnaGJvci1kdXBzCisgIChjYXNlLWxhbWJkYSAoKGdlbikKKyAgICAgICAgICAgICAg
ICAoZ2RlbGV0ZS1uZWlnaGJvci1kdXBzIGdlbiBlcXVhbD8pKQorICAgICAgICAgICAgICAg
KChnZW4gPT0pCisgICAgICAgICAgICAgICAgKGRlZmluZSBmaXJzdHRpbWUgI3QpCisgICAg
ICAgICAgICAgICAgKGRlZmluZSBwcmV2ICNmKQorICAgICAgICAgICAgICAgIChsYW1iZGEg
KCkgKGlmIGZpcnN0dGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmVnaW4g
KHNldCEgZmlyc3R0aW1lICNmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHNldCEgcHJldiAoZ2VuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByZXYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZXQgbG9vcCAoKHYg
KGdlbikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKChlb2Ytb2JqZWN0PyB2KQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCg9PSBwcmV2IHYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9v
cCAoZ2VuKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldCEgcHJldiB2KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHYpKSkpKSkpKQorCisKKzs7IGdpbmRleAorKGRl
ZmluZSAoZ2luZGV4IHZhbHVlLWdlbiBpbmRleC1nZW4pCisgIChsZXQgKChkb25lPyAjZikg
KGNvdW50IDApKQorICAgKGxhbWJkYSAoKQorICAgICAoaWYgZG9uZT8KKyAgICAgICAoZW9m
LW9iamVjdCkKKyAgICAgICAobGV0IGxvb3AgKCh2YWx1ZSAodmFsdWUtZ2VuKSkgKGluZGV4
IChpbmRleC1nZW4pKSkKKyAgICAgICAgKGNvbmQKKyAgICAgICAgICAoKG9yIChlb2Ytb2Jq
ZWN0PyB2YWx1ZSkgKGVvZi1vYmplY3Q/IGluZGV4KSkKKyAgICAgICAgICAgKHNldCEgZG9u
ZT8gI3QpCisgICAgICAgICAgIChlb2Ytb2JqZWN0KSkKKyAgICAgICAgICAoKD0gaW5kZXgg
Y291bnQpCisgICAgICAgICAgIChzZXQhIGNvdW50ICgrIGNvdW50IDEpKQorICAgICAgICAg
ICB2YWx1ZSkKKyAgICAgICAgICAoZWxzZQorICAgICAgICAgICAgKHNldCEgY291bnQgKCsg
Y291bnQgMSkpCisgICAgICAgICAgICAobG9vcCAodmFsdWUtZ2VuKSBpbmRleCkpKSkpKSkp
CisKKworOzsgZ3NlbGVjdAorKGRlZmluZSAoZ3NlbGVjdCB2YWx1ZS1nZW4gdHJ1dGgtZ2Vu
KQorICAobGV0ICgoZG9uZT8gI2YpKQorICAgKGxhbWJkYSAoKQorICAgICAoaWYgZG9uZT8K
KyAgICAgICAoZW9mLW9iamVjdCkKKyAgICAgICAobGV0IGxvb3AgKCh2YWx1ZSAodmFsdWUt
Z2VuKSkgKHRydXRoICh0cnV0aC1nZW4pKSkKKyAgICAgICAgKGNvbmQKKyAgICAgICAgICAo
KG9yIChlb2Ytb2JqZWN0PyB2YWx1ZSkgKGVvZi1vYmplY3Q/IHRydXRoKSkKKyAgICAgICAg
ICAgKHNldCEgZG9uZT8gI3QpCisgICAgICAgICAgIChlb2Ytb2JqZWN0KSkKKyAgICAgICAg
ICAodHJ1dGggdmFsdWUpCisgICAgICAgICAgKGVsc2UgKGxvb3AgKHZhbHVlLWdlbikgKHRy
dXRoLWdlbikpKSkpKSkpKQorCis7OyBnZW5lcmF0b3ItPmxpc3QKKyhkZWZpbmUgZ2VuZXJh
dG9yLT5saXN0CisgIChjYXNlLWxhbWJkYSAoKGdlbiBuKQorCQkoZ2VuZXJhdG9yLT5saXN0
IChndGFrZSBnZW4gbikpKQorICAgICAgICAgICAgICAgKChnZW4pCisJCShyZXZlcnNlIChn
ZW5lcmF0b3ItPnJldmVyc2UtbGlzdCBnZW4pKSkpKQorCis7OyBnZW5lcmF0b3ItPnJldmVy
c2UtbGlzdAorKGRlZmluZSBnZW5lcmF0b3ItPnJldmVyc2UtbGlzdAorICAoY2FzZS1sYW1i
ZGEgKChnZW4gbikKKwkJKGdlbmVyYXRvci0+cmV2ZXJzZS1saXN0IChndGFrZSBnZW4gbikp
KQorICAgICAgICAgICAgICAgKChnZW4pCisJCShnZW5lcmF0b3ItZm9sZCBjb25zICcoKSBn
ZW4pKSkpCisKKzs7IGdlbmVyYXRvci0+dmVjdG9yCisoZGVmaW5lIGdlbmVyYXRvci0+dmVj
dG9yCisgIChjYXNlLWxhbWJkYSAoKGdlbikgKGxpc3QtPnZlY3RvciAoZ2VuZXJhdG9yLT5s
aXN0IGdlbikpKQorICAgICAgICAgICAgICAgKChnZW4gbikgKGxpc3QtPnZlY3RvciAoZ2Vu
ZXJhdG9yLT5saXN0IGdlbiBuKSkpKSkKKworCis7OyBnZW5lcmF0b3ItPnZlY3RvciEKKyhk
ZWZpbmUgKGdlbmVyYXRvci0+dmVjdG9yISB2ZWN0b3IgYXQgZ2VuKQorICAobGV0IGxvb3Ag
KCh2YWx1ZSAoZ2VuKSkgKGNvdW50IDApIChhdCBhdCkpCisgICAoY29uZAorICAgICAoKGVv
Zi1vYmplY3Q/IHZhbHVlKSBjb3VudCkKKyAgICAgKCg+PSBhdCAodmVjdG9yLWxlbmd0aCB2
ZWN0b3IpKSBjb3VudCkKKyAgICAgKGVsc2UgKGJlZ2luCisgICAgICAgICAgICAgKHZlY3Rv
ci1zZXQhIHZlY3RvciBhdCB2YWx1ZSkKKyAgICAgICAgICAgICAobG9vcCAoZ2VuKSAoKyBj
b3VudCAxKSAoKyBhdCAxKSkpKSkpKQorCisKKzs7IGdlbmVyYXRvci0+c3RyaW5nCisoZGVm
aW5lIGdlbmVyYXRvci0+c3RyaW5nCisgIChjYXNlLWxhbWJkYSAoKGdlbikgKGxpc3QtPnN0
cmluZyAoZ2VuZXJhdG9yLT5saXN0IGdlbikpKQorICAgICAgICAgICAgICAgKChnZW4gbikg
KGxpc3QtPnN0cmluZyAoZ2VuZXJhdG9yLT5saXN0IGdlbiBuKSkpKSkKKworCisKKworOzsg
Z2VuZXJhdG9yLWZvbGQKKyhkZWZpbmUgKGdlbmVyYXRvci1mb2xkIGYgc2VlZCAuIGdzKQor
ICAoZGVmaW5lIChpbm5lci1mb2xkIHNlZWQpCisgICAgKGxldCAoKHZzIChtYXAgKGxhbWJk
YSAoZykgKGcpKSBncykpKQorICAgICAoaWYgKGFueSBlb2Ytb2JqZWN0PyB2cykKKyAgICAg
ICBzZWVkCisgICAgICAgKGlubmVyLWZvbGQgKGFwcGx5IGYgKGFwcGVuZCB2cyAobGlzdCBz
ZWVkKSkpKSkpKQorICAoaW5uZXItZm9sZCBzZWVkKSkKKworCisKKzs7IGdlbmVyYXRvci1m
b3ItZWFjaAorKGRlZmluZSAoZ2VuZXJhdG9yLWZvci1lYWNoIGYgLiBncykKKyAgKGxldCBs
b29wICgpCisgICAobGV0ICgodnMgKG1hcCAobGFtYmRhIChnKSAoZykpIGdzKSkpCisgICAg
KGlmIChhbnkgZW9mLW9iamVjdD8gdnMpCisgICAgICAoaWYgI2YgI2YpCisgICAgICAoYmVn
aW4gKGFwcGx5IGYgdnMpCisgICAgICAgICAgICAgKGxvb3ApKSkpKSkKKworCisoZGVmaW5l
IChnZW5lcmF0b3ItbWFwLT5saXN0IGYgLiBncykKKyAgKGxldCBsb29wICgocmVzdWx0ICco
KSkpCisgICAobGV0ICgodnMgKG1hcCAobGFtYmRhIChnKSAoZykpIGdzKSkpCisgICAgKGlm
IChhbnkgZW9mLW9iamVjdD8gdnMpCisgICAgICAocmV2ZXJzZSByZXN1bHQpCisgICAgICAo
bG9vcCAoY29ucyAoYXBwbHkgZiB2cykgcmVzdWx0KSkpKSkpCisKKworOzsgZ2VuZXJhdG9y
LWZpbmQKKyhkZWZpbmUgKGdlbmVyYXRvci1maW5kIHByZWQgZykKKyAgKGxldCBsb29wICgo
diAoZykpKQorICAgIChjb25kICgoZW9mLW9iamVjdD8gdikgI2YpCisgICAgICAgICAgKChw
cmVkIHYpIHYpCisgICAgICAgICAgKGVsc2UgKGxvb3AgKGcpKSkpKSkKKworOzsgZ2VuZXJh
dG9yLWNvdW50CisoZGVmaW5lIChnZW5lcmF0b3ItY291bnQgcHJlZCBnKQorICAoZ2VuZXJh
dG9yLWZvbGQgKGxhbWJkYSAodiBuKSAoaWYgKHByZWQgdikgKCsgMSBuKSBuKSkgMCBnKSkK
KworCis7OyBnZW5lcmF0b3ItYW55CisoZGVmaW5lIChnZW5lcmF0b3ItYW55IHByZWQgZ2Vu
KQorICAobGV0IGxvb3AgKChpdGVtIChnZW4pKSkKKyAgICAoY29uZCAoKGVvZi1vYmplY3Q/
IGl0ZW0pICNmKQorICAgICAgICAgICgocHJlZCBpdGVtKSkKKyAgICAgICAgICAoZWxzZSAo
bG9vcCAoZ2VuKSkpKSkpCisKKworOzsgZ2VuZXJhdG9yLWV2ZXJ5CisoZGVmaW5lIChnZW5l
cmF0b3ItZXZlcnkgcHJlZCBnZW4pCisgIChsZXQgbG9vcCAoKGl0ZW0gKGdlbikpIChsYXN0
ICN0KSkKKyAgICAoaWYgKGVvZi1vYmplY3Q/IGl0ZW0pCisgICAgICBsYXN0CisgICAgICAo
bGV0ICgociAocHJlZCBpdGVtKSkpCisgICAgICAgIChpZiByCisgICAgICAgICAgKGxvb3Ag
KGdlbikgcikKKyAgICAgICAgICAjZikpKSkpCisKKworOzsgZ2VuZXJhdG9yLXVuZm9sZAor
KGRlZmluZSAoZ2VuZXJhdG9yLXVuZm9sZCBnIHVuZm9sZCAuIGFyZ3MpCisgIChhcHBseSB1
bmZvbGQgZW9mLW9iamVjdD8gKGxhbWJkYSAoeCkgeCkgKGxhbWJkYSAoeCkgKGcpKSAoZykg
YXJncykpCisKKworOzsgbWFrZS1hY2N1bXVsYXRvcgorKGRlZmluZSAobWFrZS1hY2N1bXVs
YXRvciBrb25zIGtuaWwgZmluYWxpemUpCisgIChsZXQgKChzdGF0ZSBrbmlsKSkKKyAgICAo
bGFtYmRhIChvYmopCisgICAgICAoaWYgKGVvZi1vYmplY3Q/IG9iaikKKyAgICAgICAgKGZp
bmFsaXplIHN0YXRlKQorICAgICAgICAoc2V0ISBzdGF0ZSAoa29ucyBvYmogc3RhdGUpKSkp
KSkKKworCis7OyBjb3VudC1hY2N1bXVsYXRvcgorKGRlZmluZSAoY291bnQtYWNjdW11bGF0
b3IpIChtYWtlLWFjY3VtdWxhdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxh
bWJkYSAob2JqIHN0YXRlKSAoKyAxIHN0YXRlKSkgMCAobGFtYmRhICh4KSB4KSkpCisKKzs7
IGxpc3QtYWNjdW11bGF0b3IKKyhkZWZpbmUgKGxpc3QtYWNjdW11bGF0b3IpIChtYWtlLWFj
Y3VtdWxhdG9yIGNvbnMgJygpIHJldmVyc2UpKQorCis7OyByZXZlcnNlLWxpc3QtYWNjdW11
bGF0b3IKKyhkZWZpbmUgKHJldmVyc2UtbGlzdC1hY2N1bXVsYXRvcikgKG1ha2UtYWNjdW11
bGF0b3IgY29ucyAnKCkgKGxhbWJkYSAoeCkgeCkpKQorCis7OyB2ZWN0b3ItYWNjdW11bGF0
b3IKKyhkZWZpbmUgKHZlY3Rvci1hY2N1bXVsYXRvcikKKyAgKG1ha2UtYWNjdW11bGF0b3Ig
Y29ucyAnKCkgKGxhbWJkYSAoeCkgKGxpc3QtPnZlY3RvciAocmV2ZXJzZSB4KSkpKSkKKwor
OzsgcmV2ZXJzZS12ZWN0b3ItYWNjdW11bGF0b3IKKyhkZWZpbmUgKHJldmVyc2UtdmVjdG9y
LWFjY3VtdWxhdG9yKQorICAobWFrZS1hY2N1bXVsYXRvciBjb25zICcoKSBsaXN0LT52ZWN0
b3IpKQorCis7OyB2ZWN0b3ItYWNjdW11bGF0b3IhCisoZGVmaW5lICh2ZWN0b3ItYWNjdW11
bGF0b3IhIHZlYyBhdCkKKyAgKGxhbWJkYSAob2JqKQorICAgIChpZiAoZW9mLW9iamVjdD8g
b2JqKQorICAgICAgdmVjCisgICAgICAoYmVnaW4KKyAgICAgICAgKHZlY3Rvci1zZXQhIHZl
YyBhdCBvYmopCisgICAgICAgIChzZXQhIGF0ICgrIGF0IDEpKSkpKSkKKworOzsgYnl0ZXZl
Y3Rvci1hY2N1bXVsYXRvcgorKGRlZmluZSAoYnl0ZXZlY3Rvci1hY2N1bXVsYXRvcikKKyAg
KG1ha2UtYWNjdW11bGF0b3IgY29ucyAnKCkgKGxhbWJkYSAoeCkgKGxpc3QtPmJ5dGV2ZWN0
b3IgKHJldmVyc2UgeCkpKSkpCisKKyhkZWZpbmUgKGJ5dGV2ZWN0b3ItYWNjdW11bGF0b3Ih
IGJ5dGV2ZWMgYXQpCisgIChsYW1iZGEgKG9iaikKKyAgICAoaWYgKGVvZi1vYmplY3Q/IG9i
aikKKyAgICAgIGJ5dGV2ZWMKKyAgICAgIChiZWdpbgorICAgICAgICAoYnl0ZXZlY3Rvci11
OC1zZXQhIGJ5dGV2ZWMgYXQgb2JqKQorICAgICAgICAoc2V0ISBhdCAoKyBhdCAxKSkpKSkp
CisKKzs7IHN0cmluZy1hY2N1bXVsYXRvcgorKGRlZmluZSAoc3RyaW5nLWFjY3VtdWxhdG9y
KQorICAobWFrZS1hY2N1bXVsYXRvciBjb25zICcoKQorICAgICAgICAobGFtYmRhIChsc3Qp
IChsaXN0LT5zdHJpbmcgKHJldmVyc2UgbHN0KSkpKSkKKworOzsgc3VtLWFjY3VtdWxhdG9y
CisoZGVmaW5lIChzdW0tYWNjdW11bGF0b3IpIChtYWtlLWFjY3VtdWxhdG9yICsgMCAobGFt
YmRhICh4KSB4KSkpCisKKzs7IHByb2R1Y3QtYWNjdW11bGF0b3IKKyhkZWZpbmUgKHByb2R1
Y3QtYWNjdW11bGF0b3IpIChtYWtlLWFjY3VtdWxhdG9yICogMSAobGFtYmRhICh4KSB4KSkp
CisKZGlmZiAtLWdpdCBhL3Rlc3Qtc3VpdGUvdGVzdHMvc3JmaS0xNTgudGVzdCBiL3Rlc3Qt
c3VpdGUvdGVzdHMvc3JmaS0xNTgudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAuLjYyODQ3MjcxNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3Qtc3VpdGUvdGVz
dHMvc3JmaS0xNTgudGVzdApAQCAtMCwwICsxLDI0NSBAQAorOzsgCUNvcHlyaWdodCAoQykg
MjAyNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzs7Cis7OyBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7
OyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCis7OyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKzs7IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzs7Cis7OyBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzs7
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCis7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorOzsgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzs7Cis7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCis7OyBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCis7OyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisKKzs7OyBUZXN0IGNhc2VzIGFy
ZSBiYXNlZCBvbiB0aGUgcmVmZXJlbmNlIHRlc3Qgc3VpdGUgZnJvbSBTUkZJIDE1OCwKKzs7
OyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL3NjaGVtZS1yZXF1ZXN0cy1mb3It
aW1wbGVtZW50YXRpb24vc3JmaS0xNTgKKzs7OyBUaGUgdGVzdHMgaGF2ZSBiZWVuIGFkYXB0
ZWQgdG8gdXNlIEd1aWxlJ3MgdGVzdC1zdWl0ZSBmcmFtZXdvcmsuCisKKyhkZWZpbmUtbW9k
dWxlICh0ZXN0LXNyZmktMTU4KQorICAjOnVzZS1tb2R1bGUgKHRlc3Qtc3VpdGUgbGliKQor
ICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0xNTgpCisgICM6dXNlLW1vZHVsZSAocm5ycyBi
eXRldmVjdG9ycykpCisKKyh3aXRoLXRlc3QtcHJlZml4ICJnZW5lcmF0b3JzL2NvbnN0cnVj
dG9ycyIKKworICAocGFzcy1pZiAiZ2VuZXJhdG9yIHdpdGggbm8gYXJndW1lbnRzIgorICAg
IChlcXVhbD8gJygpIChnZW5lcmF0b3ItPmxpc3QgKGdlbmVyYXRvcikpKSkKKworICAocGFz
cy1pZiAiZ2VuZXJhdG9yIHdpdGggYXJndW1lbnRzIgorICAgIChlcXVhbD8gJygxIDIgMykg
KGdlbmVyYXRvci0+bGlzdCAoZ2VuZXJhdG9yIDEgMiAzKSkpKQorCisgIChwYXNzLWlmICJj
aXJjdWxhci1nZW5lcmF0b3IiCisgICAgKGVxdWFsPyAnKDEgMiAzIDEgMikgKGdlbmVyYXRv
ci0+bGlzdCAoY2lyY3VsYXItZ2VuZXJhdG9yIDEgMiAzKSA1KSkpCisKKyAgKHBhc3MtaWYg
Im1ha2UtaW90YS1nZW5lcmF0b3IiCisgICAgKGVxdWFsPyAnKDggOSAxMCkgKGdlbmVyYXRv
ci0+bGlzdCAobWFrZS1pb3RhLWdlbmVyYXRvciAzIDgpKSkpCisKKyAgKHBhc3MtaWYgIm1h
a2UtaW90YS1nZW5lcmF0b3Igd2l0aCBzdGVwIgorICAgIChlcXVhbD8gJyg4IDEwIDEyKSAo
Z2VuZXJhdG9yLT5saXN0IChtYWtlLWlvdGEtZ2VuZXJhdG9yIDMgOCAyKSkpKQorCisgIChw
YXNzLWlmICJtYWtlLXJhbmdlLWdlbmVyYXRvciB1bmJvdW5kZWQiCisgICAgKGVxdWFsPyAn
KDMgNCA1IDYpIChnZW5lcmF0b3ItPmxpc3QgKG1ha2UtcmFuZ2UtZ2VuZXJhdG9yIDMpIDQp
KSkKKworICAocGFzcy1pZiAibWFrZS1yYW5nZS1nZW5lcmF0b3IgYm91bmRlZCIKKyAgICAo
ZXF1YWw/ICcoMyA0IDUgNiA3KSAoZ2VuZXJhdG9yLT5saXN0IChtYWtlLXJhbmdlLWdlbmVy
YXRvciAzIDgpKSkpCisKKyAgKHBhc3MtaWYgIm1ha2UtcmFuZ2UtZ2VuZXJhdG9yIHdpdGgg
c3RlcCIKKyAgICAoZXF1YWw/ICcoMyA1IDcpIChnZW5lcmF0b3ItPmxpc3QgKG1ha2UtcmFu
Z2UtZ2VuZXJhdG9yIDMgOCAyKSkpKQorCisgIChwYXNzLWlmICJtYWtlLWNvcm91dGluZS1n
ZW5lcmF0b3IiCisgICAgKGxldCAoKGcgKG1ha2UtY29yb3V0aW5lLWdlbmVyYXRvcgorICAg
ICAgICAgICAgICAobGFtYmRhICh5aWVsZCkKKyAgICAgICAgICAgICAgICAobGV0IGxvb3Ag
KChpIDApKQorICAgICAgICAgICAgICAgICAgKHdoZW4gKDwgaSAzKQorICAgICAgICAgICAg
ICAgICAgICAoeWllbGQgaSkKKyAgICAgICAgICAgICAgICAgICAgKGxvb3AgKCsgaSAxKSkp
KSkpKSkKKyAgICAgIChlcXVhbD8gJygwIDEgMikgKGdlbmVyYXRvci0+bGlzdCBnKSkpKQor
CisgIChwYXNzLWlmICJsaXN0LT5nZW5lcmF0b3IiCisgICAgKGVxdWFsPyAnKDEgMiAzIDQg
NSkgKGdlbmVyYXRvci0+bGlzdCAobGlzdC0+Z2VuZXJhdG9yICcoMSAyIDMgNCA1KSkpKSkK
KworICAocGFzcy1pZiAidmVjdG9yLT5nZW5lcmF0b3IiCisgICAgKGVxdWFsPyAnKDEgMiAz
IDQgNSkgKGdlbmVyYXRvci0+bGlzdCAodmVjdG9yLT5nZW5lcmF0b3IgJyMoMSAyIDMgNCA1
KSkpKSkKKworICAocGFzcy1pZiAicmV2ZXJzZS12ZWN0b3ItPmdlbmVyYXRvciIKKyAgICAo
ZXF1YWw/ICcoNSA0IDMgMiAxKSAoZ2VuZXJhdG9yLT5saXN0IChyZXZlcnNlLXZlY3Rvci0+
Z2VuZXJhdG9yICcjKDEgMiAzIDQgNSkpKSkpCisKKyAgKHBhc3MtaWYgInN0cmluZy0+Z2Vu
ZXJhdG9yIgorICAgIChlcXVhbD8gJygjXGEgI1xiICNcYyAjXGQgI1xlKSAoZ2VuZXJhdG9y
LT5saXN0IChzdHJpbmctPmdlbmVyYXRvciAiYWJjZGUiKSkpKQorCisgIChwYXNzLWlmICJi
eXRldmVjdG9yLT5nZW5lcmF0b3IiCisgICAgKGVxdWFsPyAnKDEwIDIwIDMwKSAoZ2VuZXJh
dG9yLT5saXN0IChieXRldmVjdG9yLT5nZW5lcmF0b3IgKGJ5dGV2ZWN0b3ItdTggMTAgMjAg
MzApKSkpKQorCisgIChwYXNzLWlmICJtYWtlLWZvci1lYWNoLWdlbmVyYXRvciIKKyAgICAo
bGV0ICgoZm9yLWVhY2gtZGlnaXQgKGxhbWJkYSAocHJvYyBuKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHdoZW4gKD4gbiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAobGV0LXZhbHVlcyAoKChkaXYgcmVtKSAodHJ1bmNhdGUvIG4gMTApKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAocHJvYyByZW0pCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGZvci1lYWNoLWRpZ2l0IHByb2MgZGl2KSkpKSkpCisgICAgICAoZXF1
YWw/ICcoNSA0IDMgMiAxKSAoZ2VuZXJhdG9yLT5saXN0CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKG1ha2UtZm9yLWVhY2gtZ2VuZXJhdG9yIGZvci1lYWNoLWRpZ2l0IDEyMzQ1
KSkpKSkKKworICAocGFzcy1pZiAibWFrZS11bmZvbGQtZ2VuZXJhdG9yIgorICAgIChlcXVh
bD8gJygwIDIgNCA2IDggMTApIChnZW5lcmF0b3ItPmxpc3QKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKG1ha2UtdW5mb2xkLWdlbmVyYXRvcgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGxhbWJkYSAocykgKD4gcyA1KSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChsYW1iZGEgKHMpICgqIHMgMikpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAobGFtYmRhIChzKSAoKyBzIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCkpKSkpCisKKyh3aXRoLXRlc3QtcHJlZml4ICJnZW5lcmF0b3JzL29wZXJhdG9y
cyIKKworICAocGFzcy1pZiAiZ2NvbnMqIgorICAgIChlcXVhbD8gJyhhIGIgMCAxKSAoZ2Vu
ZXJhdG9yLT5saXN0IChnY29ucyogJ2EgJ2IgKG1ha2UtcmFuZ2UtZ2VuZXJhdG9yIDAgMikp
KSkpCisKKyAgKHBhc3MtaWYgImdhcHBlbmQiCisgICAgKGVxdWFsPyAnKDAgMSAyIDAgMSkg
KGdlbmVyYXRvci0+bGlzdCAoZ2FwcGVuZCAobWFrZS1yYW5nZS1nZW5lcmF0b3IgMCAzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICht
YWtlLXJhbmdlLWdlbmVyYXRvciAwIDIpKSkpKQorCisgIChwYXNzLWlmICJnYXBwZW5kIHdp
dGggbm8gYXJndW1lbnRzIgorICAgIChlcXVhbD8gJygpIChnZW5lcmF0b3ItPmxpc3QgKGdh
cHBlbmQpKSkpCisKKyAgKHBhc3MtaWYgImdjb21iaW5lIgorICAgIChsZXQqICgoZzEgKGdl
bmVyYXRvciAxIDIgMykpCisgICAgICAgICAgIChnMiAoZ2VuZXJhdG9yIDQgNSA2IDcpKQor
ICAgICAgICAgICAocHJvYyAobGFtYmRhIGFyZ3MgKHZhbHVlcyAoYXBwbHkgKyBhcmdzKSAo
YXBwbHkgKyBhcmdzKSkpKSkKKyAgICAgIChlcXVhbD8gJygxNSAyMiAzMSkgKGdlbmVyYXRv
ci0+bGlzdCAoZ2NvbWJpbmUgcHJvYyAxMCBnMSBnMikpKSkpCisKKyAgKHBhc3MtaWYgImdm
aWx0ZXIiCisgICAgKGVxdWFsPyAnKDEgMyA1IDcgOSkgKGdlbmVyYXRvci0+bGlzdCAoZ2Zp
bHRlciBvZGQ/IChtYWtlLXJhbmdlLWdlbmVyYXRvciAxIDExKSkpKSkKKworICAocGFzcy1p
ZiAiZ3JlbW92ZSIKKyAgICAoZXF1YWw/ICcoMiA0IDYgOCAxMCkgKGdlbmVyYXRvci0+bGlz
dCAoZ3JlbW92ZSBvZGQ/IChtYWtlLXJhbmdlLWdlbmVyYXRvciAxIDExKSkpKSkKKworICAo
cGFzcy1pZiAiZ3Rha2UiCisgICAgKGxldCAoKGcgKG1ha2UtcmFuZ2UtZ2VuZXJhdG9yIDEg
NSkpKQorICAgICAgKGFuZCAoZXF1YWw/ICcoMSAyIDMpIChnZW5lcmF0b3ItPmxpc3QgKGd0
YWtlIGcgMykpKQorICAgICAgICAgICAoZXF1YWw/ICcoNCkgKGdlbmVyYXRvci0+bGlzdCBn
KSkpKSkKKworICAocGFzcy1pZiAiZ3Rha2UgbW9yZSB0aGFuIGF2YWlsYWJsZSIKKyAgICAo
ZXF1YWw/ICcoMSAyKSAoZ2VuZXJhdG9yLT5saXN0IChndGFrZSAobWFrZS1yYW5nZS1nZW5l
cmF0b3IgMSAzKSAzKSkpKQorCisgIChwYXNzLWlmICJndGFrZSB3aXRoIHBhZGRpbmciCisg
ICAgKGVxdWFsPyAnKDEgMiAwKSAoZ2VuZXJhdG9yLT5saXN0IChndGFrZSAobWFrZS1yYW5n
ZS1nZW5lcmF0b3IgMSAzKSAzIDApKSkpCisKKyAgKHBhc3MtaWYgImdkcm9wIgorICAgIChl
cXVhbD8gJygzIDQpIChnZW5lcmF0b3ItPmxpc3QgKGdkcm9wIChtYWtlLXJhbmdlLWdlbmVy
YXRvciAxIDUpIDIpKSkpCisKKyAgKHBhc3MtaWYgImd0YWtlLXdoaWxlIgorICAgIChsZXQg
KChnIChtYWtlLXJhbmdlLWdlbmVyYXRvciAxIDUpKSkKKyAgICAgIChlcXVhbD8gJygxIDIp
IChnZW5lcmF0b3ItPmxpc3QgKGd0YWtlLXdoaWxlIChsYW1iZGEgKHgpICg8IHggMykpIGcp
KSkpKQorCisgIChwYXNzLWlmICJnZHJvcC13aGlsZSIKKyAgICAobGV0ICgoZyAobWFrZS1y
YW5nZS1nZW5lcmF0b3IgMSA1KSkpCisgICAgICAoZXF1YWw/ICcoMyA0KSAoZ2VuZXJhdG9y
LT5saXN0IChnZHJvcC13aGlsZSAobGFtYmRhICh4KSAoPCB4IDMpKSBnKSkpKSkKKworICAo
cGFzcy1pZiAiZ2RlbGV0ZSIKKyAgICAoZXF1YWw/ICcoMC4wIDEuMCAwIDIpIChnZW5lcmF0
b3ItPmxpc3QgKGdkZWxldGUgMSAoZ2VuZXJhdG9yIDAuMCAxLjAgMCAxIDIpKSkpKQorCisg
IChwYXNzLWlmICJnZGVsZXRlIHdpdGggZXF1YWxpdHkgcHJlZGljYXRlIgorICAgIChlcXVh
bD8gJygwLjAgMCAyKSAoZ2VuZXJhdG9yLT5saXN0IChnZGVsZXRlIDEgKGdlbmVyYXRvciAw
LjAgMS4wIDAgMSAyKSA9KSkpKQorCisgIChwYXNzLWlmICJnZGVsZXRlLW5laWdoYm9yLWR1
cHMiCisgICAgKGVxdWFsPyAnKDEgMiAzKSAoZ2VuZXJhdG9yLT5saXN0IChnZGVsZXRlLW5l
aWdoYm9yLWR1cHMgKGdlbmVyYXRvciAxIDEgMiAzIDMgMykgPSkpKSkKKworICAocGFzcy1p
ZiAiZ2luZGV4IgorICAgIChlcXVhbD8gJyhhIGMgZSkgKGdlbmVyYXRvci0+bGlzdCAoZ2lu
ZGV4IChsaXN0LT5nZW5lcmF0b3IgJyhhIGIgYyBkIGUgZikpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QtPmdlbmVyYXRvciAnKDAgMiA0
KSkpKSkpCisKKyAgKHBhc3MtaWYgImdzZWxlY3QiCisgICAgKGVxdWFsPyAnKGEgZCBlKSAo
Z2VuZXJhdG9yLT5saXN0IChnc2VsZWN0IChsaXN0LT5nZW5lcmF0b3IgJyhhIGIgYyBkIGUg
ZikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChs
aXN0LT5nZW5lcmF0b3IgJygjdCAjZiAjZiAjdCAjdCAjZikpKSkpKQorCisgIChwYXNzLWlm
ICJnZmxhdHRlbiIKKyAgICAoZXF1YWw/ICcoMSAyIDMgYSBiIGMpIChnZW5lcmF0b3ItPmxp
c3QgKGdmbGF0dGVuIChnZW5lcmF0b3IgJygxIDIgMykgJyhhIGIgYykpKSkpKQorCisgIChw
YXNzLWlmICJnZ3JvdXAiCisgICAgKGVxdWFsPyAnKCgxIDIgMykgKDQgNSA2KSAoNyA4KSkg
KGdlbmVyYXRvci0+bGlzdCAoZ2dyb3VwIChnZW5lcmF0b3IgMSAyIDMgNCA1IDYgNyA4KSAz
KSkpKQorCisgIChwYXNzLWlmICJnZ3JvdXAgd2l0aCBwYWRkaW5nIgorICAgIChlcXVhbD8g
JygoMSAyIDMpICg0IDUgNikgKDcgOCAwKSkgKGdlbmVyYXRvci0+bGlzdCAoZ2dyb3VwIChn
ZW5lcmF0b3IgMSAyIDMgNCA1IDYgNyA4KSAzIDApKSkpCisKKyAgKHBhc3MtaWYgImdtZXJn
ZSIKKyAgICAoZXF1YWw/ICcoMSAyIDMgNCA1IDYpIChnZW5lcmF0b3ItPmxpc3QgKGdtZXJn
ZSA8IChnZW5lcmF0b3IgMSAzIDUpIChnZW5lcmF0b3IgMiA0IDYpKSkpKQorCisgIChwYXNz
LWlmICJnbWFwIgorICAgIChlcXVhbD8gJygyIDQgNiA4KSAoZ2VuZXJhdG9yLT5saXN0IChn
bWFwIChsYW1iZGEgKHgpICgqIHggMikpIChnZW5lcmF0b3IgMSAyIDMgNCkpKSkpKQorCiso
d2l0aC10ZXN0LXByZWZpeCAiZ2VuZXJhdG9ycy9jb25zdW1lcnMiCisKKyAgKHBhc3MtaWYg
ImdlbmVyYXRvci0+bGlzdCB3aXRoIGxlbmd0aCIKKyAgICAoZXF1YWw/ICcoMSAyIDMpIChn
ZW5lcmF0b3ItPmxpc3QgKG1ha2UtcmFuZ2UtZ2VuZXJhdG9yIDEpIDMpKSkKKworICAocGFz
cy1pZiAiZ2VuZXJhdG9yLT5yZXZlcnNlLWxpc3QiCisgICAgKGVxdWFsPyAnKDUgNCAzIDIg
MSkgKGdlbmVyYXRvci0+cmV2ZXJzZS1saXN0IChnZW5lcmF0b3IgMSAyIDMgNCA1KSkpKQor
CisgIChwYXNzLWlmICJnZW5lcmF0b3ItPnZlY3RvciIKKyAgICAoZXF1YWw/ICcjKDEgMiAz
IDQgNSkgKGdlbmVyYXRvci0+dmVjdG9yIChnZW5lcmF0b3IgMSAyIDMgNCA1KSkpKQorCisg
IChwYXNzLWlmICJnZW5lcmF0b3ItPnZlY3RvciEiCisgICAgKGxldCAoKHYgKG1ha2UtdmVj
dG9yIDUgMCkpKQorICAgICAgKGdlbmVyYXRvci0+dmVjdG9yISB2IDIgKGdlbmVyYXRvciAx
IDIgNCkpCisgICAgICAoZXF1YWw/ICcjKDAgMCAxIDIgNCkgdikpKQorCisgIChwYXNzLWlm
ICJnZW5lcmF0b3ItPnN0cmluZyIKKyAgICAoZXF1YWw/ICJhYmNkZSIgKGdlbmVyYXRvci0+
c3RyaW5nIChnZW5lcmF0b3IgI1xhICNcYiAjXGMgI1xkICNcZSkpKSkKKworICAocGFzcy1p
ZiAiZ2VuZXJhdG9yLWZvbGQiCisgICAgKGVxdWFsPyAxNSAoZ2VuZXJhdG9yLWZvbGQgKyAw
IChnZW5lcmF0b3IgMSAyIDMgNCA1KSkpKQorCisgIChwYXNzLWlmICJnZW5lcmF0b3ItZm9y
LWVhY2giCisgICAgKGxldCAoKHN1bSAwKSkKKyAgICAgIChnZW5lcmF0b3ItZm9yLWVhY2gg
KGxhbWJkYSAoeCkgKHNldCEgc3VtICgrIHN1bSB4KSkpIChnZW5lcmF0b3IgMSAyIDMgNCA1
KSkKKyAgICAgIChlcXVhbD8gMTUgc3VtKSkpCisKKyAgKHBhc3MtaWYgImdlbmVyYXRvci1m
aW5kIgorICAgIChlcXVhbD8gNCAoZ2VuZXJhdG9yLWZpbmQgZXZlbj8gKGdlbmVyYXRvciAx
IDMgNCA1IDYpKSkpCisKKyAgKHBhc3MtaWYgImdlbmVyYXRvci1jb3VudCIKKyAgICAoZXF1
YWw/IDMgKGdlbmVyYXRvci1jb3VudCBvZGQ/IChnZW5lcmF0b3IgMSAyIDMgNCA1KSkpKQor
CisgIChwYXNzLWlmICJnZW5lcmF0b3ItYW55IgorICAgIChnZW5lcmF0b3ItYW55IGV2ZW4/
IChnZW5lcmF0b3IgMSAzIDQgNSkpKQorCisgIChwYXNzLWlmICJnZW5lcmF0b3ItZXZlcnki
CisgICAgKG5vdCAoZ2VuZXJhdG9yLWV2ZXJ5IG9kZD8gKGdlbmVyYXRvciAxIDMgNCA1KSkp
KSkKKworKHdpdGgtdGVzdC1wcmVmaXggImFjY3VtdWxhdG9ycyIKKworICAocGFzcy1pZiAi
Y291bnQtYWNjdW11bGF0b3IiCisgICAgKGxldCAoKGFjYyAoY291bnQtYWNjdW11bGF0b3Ip
KSkKKyAgICAgIChhY2MgMSkgKGFjYyAyKSAoYWNjIDMpCisgICAgICAoZXF1YWw/IDMgKGFj
YyAoZW9mLW9iamVjdCkpKSkpCisKKyAgKHBhc3MtaWYgImxpc3QtYWNjdW11bGF0b3IiCisg
ICAgKGxldCAoKGFjYyAobGlzdC1hY2N1bXVsYXRvcikpKQorICAgICAgKGFjYyAxKSAoYWNj
IDIpIChhY2MgMykKKyAgICAgIChlcXVhbD8gJygxIDIgMykgKGFjYyAoZW9mLW9iamVjdCkp
KSkpCisKKyAgKHBhc3MtaWYgInJldmVyc2UtbGlzdC1hY2N1bXVsYXRvciIKKyAgICAobGV0
ICgoYWNjIChyZXZlcnNlLWxpc3QtYWNjdW11bGF0b3IpKSkKKyAgICAgIChhY2MgMSkgKGFj
YyAyKSAoYWNjIDMpCisgICAgICAoZXF1YWw/ICcoMyAyIDEpIChhY2MgKGVvZi1vYmplY3Qp
KSkpKQorCisgIChwYXNzLWlmICJ2ZWN0b3ItYWNjdW11bGF0b3IiCisgICAgKGxldCAoKGFj
YyAodmVjdG9yLWFjY3VtdWxhdG9yKSkpCisgICAgICAoYWNjIDEpIChhY2MgMikgKGFjYyAz
KQorICAgICAgKGVxdWFsPyAnIygxIDIgMykgKGFjYyAoZW9mLW9iamVjdCkpKSkpCisKKyAg
KHBhc3MtaWYgInN0cmluZy1hY2N1bXVsYXRvciIKKyAgICAobGV0ICgoYWNjIChzdHJpbmct
YWNjdW11bGF0b3IpKSkKKyAgICAgIChhY2MgI1xhKSAoYWNjICNcYikgKGFjYyAjXGMpCisg
ICAgICAoZXF1YWw/ICJhYmMiIChhY2MgKGVvZi1vYmplY3QpKSkpKQorCisgIChwYXNzLWlm
ICJzdW0tYWNjdW11bGF0b3IiCisgICAgKGxldCAoKGFjYyAoc3VtLWFjY3VtdWxhdG9yKSkp
CisgICAgICAoYWNjIDEpIChhY2MgMikgKGFjYyAzKQorICAgICAgKGVxdWFsPyA2IChhY2Mg
KGVvZi1vYmplY3QpKSkpKQorCisgIChwYXNzLWlmICJwcm9kdWN0LWFjY3VtdWxhdG9yIgor
ICAgIChsZXQgKChhY2MgKHByb2R1Y3QtYWNjdW11bGF0b3IpKSkKKyAgICAgIChhY2MgMikg
KGFjYyAzKSAoYWNjIDQpCisgICAgICAoZXF1YWw/IDI0IChhY2MgKGVvZi1vYmplY3QpKSkp
KSkKLS0gCjIuNTUuMAoK

--0746dbdd83758d84caee6824a7c08f303dce4071--