constant switch test bug in x86Translate

Matthew Fluet Matthew Fluet <fluet@CS.Cornell.EDU>
Tue, 16 Jan 2001 18:56:05 -0500 (EST)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-684387517-979689365=:13415
Content-Type: TEXT/PLAIN; charset=US-ASCII


> library.  I decided that I'm in a weird enough state that it's worth rerunning
> the regressions, and indeed, many of them failed.  The only two changes since I
> ran the regressions are my bug fix (a couple of lines in constant propagation)
> and the codegen changes you sent today, so I'm betting on the codegen.  I put a
> snapshot at http://www.star-lab.com/sweeks/src.tgz.  I'm now backing out the
> codegen to the one from last night and trying again.  I'll report shortly.

I recreated the bug, and I think I have a fix, but I'll run through the
regressions before sending the patch.  (All o.k.)  I'm happy with either
the old version of Switch statements or the new version; the advantage of
the new version is that it is a little more general (allowing immediate
constants for the test operand), but will produce less than optimal
switches for constant tests.  Here are the pros and cons of the different
fixes I considered to the original problem: 

1. if the test is an immediate, choose the right label.
   pros: a simple fix
   cons: why do it in the codegen when the cps simplifier normally does it

2. if the test is an immediate, copy it to a temporary memory location
   and then use the temp memory location as the test
   pros: no changes to the Switch constructor
   cons: copyPropagation tries to undo it

3. change the Switch constructor to allow an arbitrary operand for the
   test (in reality, it will only be an immediate or a memory location)
   pros: adds a little generality to Switches
   cons: will get poor code for switches with an immediate test that
         aren't turned into jump tables
         The problem is that x86 doesn't allow a comparison of one
         constant to another; one of the operands must be in a register;
         the register allocator isn't set up to keep constants in
         registers, so for each comparison the immediate test is copied
         to a register and then the comparison with the target constant is
         made.  I tried to get around this by copying the test to a
         temporary memory location when translating the switch statement
         to assembly, but this introduced those seg-faults; the temp
         was spilled when setting up inter-block registers.

The fix included (x86-simplify.fun) just doesn't move the test to a
temporary. So, we will get the repeated loads of the test if the switch as
an immediate test.


---559023410-684387517-979689365=:13415
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="x86-simplify.fun"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.SOL.3.95.1010116185604.13415B@hoho.cs.cornell.edu>
Content-Description: 

KCogQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgTkVDIFJlc2VhcmNoIEluc3RpdHV0ZS4NCiAqIFBs
ZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRSBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi4NCiAqKQ0K
ZnVuY3RvciB4ODZTaW1wbGlmeShTOiBYODZfU0lNUExJRllfU1RSVUNUUyk6IFg4Nl9TSU1QTElG
WSA9DQpzdHJ1Y3QNCg0KICBvcGVuIFMNCiAgb3BlbiB4ODYNCg0KICB2YWwgcmVjIHBhcnRpdGlv
bg0KICAgID0gZm4gKFtdLHApID0+IChbXSxbXSkNCiAgICAgICB8IChoOjp0LHApID0+IGxldA0K
CQkgICAgICAgdmFsICh0cnVlZSxmYWxzZWUpID0gcGFydGl0aW9uKHQsIHApDQoJCSAgICAgaW4N
CgkJICAgICAgIGlmIHAgaA0KCQkJIHRoZW4gKGg6OnRydWVlLGZhbHNlZSkNCgkJCSBlbHNlICh0
cnVlZSxoOjpmYWxzZWUpDQoJCSAgICAgZW5kDQoNCiAgdmFsIHJlYyBvbmVzIDogaW50IC0+IHdv
cmQNCiAgICA9IGZuIDAgPT4gMHd4MA0KICAgICAgIHwgbiA9PiBXb3JkLm9yYihXb3JkLjw8KG9u
ZXMgKG4tMSksIDB3eDEpLDB3eDEpDQoNCiAgdmFsIHRyYWNlcg0KICAgID0gQ29udHJvbC50cmFj
ZUJhdGNoDQooKg0KICAgID0gZm4gcyA9PiBmbiBmID0+IChDb250cm9sLnRyYWNlQ2FsbCBzIGYs
IGZuICgpID0+ICgpKQ0KKikNCg0KICBzdHJ1Y3R1cmUgSnVtcEluZm8gPQ0KICAgIHN0cnVjdA0K
ICAgICAgZGF0YXR5cGUgc3RhdHVzID0gTXVzdCB8IE1heWJlIG9mIGludA0KDQogICAgICB2YWwg
bHQNCgk9IGZuIChNYXliZSBpMSwgTXVzdCkgPT4gdHJ1ZQ0KCSAgIHwgKE1heWJlIGkxLCBNYXli
ZSBpMikgPT4gaTEgPCBpMg0KCSAgIHwgXyA9PiBmYWxzZQ0KICAgICAgdmFsIGVxDQoJPSBmbiAo
TXVzdCwgTXVzdCkgPT4gdHJ1ZQ0KICAgICAgICAgICB8IChNYXliZSBpMSwgTWF5YmUgaTIpID0+
IGkxID0gaTINCgkgICB8IF8gPT4gZmFsc2UNCg0KICAgICAgdmFsIHRvU3RyaW5nDQogICAgICAg
ID0gZm4gTXVzdCA9PiAiTXVzdCINCgkgICB8IE1heWJlIGkgPT4gY29uY2F0IFsiTWF5YmUgIiwg
SW50LnRvU3RyaW5nIGldDQoNCiAgICAgIGxvY2FsDQoJZnVuIGRvaXQgKHN0YXR1c19yZWYsIG1h
eWJlX2ZuKQ0KCSAgPSBjYXNlICFzdGF0dXNfcmVmDQoJICAgICAgb2YgTXVzdCA9PiAoKQ0KCSAg
ICAgICB8IE1heWJlIGkgPT4gc3RhdHVzX3JlZiA6PSAobWF5YmVfZm4gaSkNCiAgICAgIGluDQoJ
ZnVuIGluYyB7bGFiZWwsIGp1bXBJbmZvIGFzIHtnZXR9fQ0KCSAgPSBkb2l0IChnZXQgbGFiZWws
IGZuIGkgPT4gTWF5YmUgKGkrMSkpDQoJZnVuIGRlYyB7bGFiZWwsIGp1bXBJbmZvIGFzIHtnZXR9
fQ0KCSAgPSBkb2l0IChnZXQgbGFiZWwsIGZuIGkgPT4gTWF5YmUgKGktMSkpDQoJZnVuIGZvcmNl
IHtsYWJlbCwganVtcEluZm8gYXMge2dldH19DQoJICA9IGRvaXQgKGdldCBsYWJlbCwgZm4gaSA9
PiBNdXN0KQ0KICAgICAgZW5kDQoNCiAgICAgIGZ1biBjb21wdXRlSnVtcEluZm8ge2Jsb2Nrczog
QmxvY2sudCBsaXN0LCANCgkJCSAgIGV4cG9ydHM6IExhYmVsLnQgbGlzdCwNCgkJCSAgIGJsb2Nr
X3ByZTogTGFiZWwudCAtPiBBc3NlbWJseS50IGxpc3Qgb3B0aW9ufQ0KCT0gbGV0DQoJICAgIHZh
bCBqdW1wSW5mbyBhcyB7Z2V0OiBMYWJlbC50IC0+IHN0YXR1cyByZWZ9DQoJICAgICAgPSBQcm9w
ZXJ0eS5nZXQNCgkgICAgICAgIChMYWJlbC5wbGlzdCwgDQoJCSBQcm9wZXJ0eS5pbml0RnVuIA0K
CQkgKGZuIGxhYmVsDQoJCSAgID0+IGNhc2UgYmxvY2tfcHJlIGxhYmVsIA0KCQkJb2YgTk9ORSA9
PiBpZiBMaXN0LmNvbnRhaW5zKGV4cG9ydHMsDQoJCQkJCQkgICAgbGFiZWwsDQoJCQkJCQkgICAg
TGFiZWwuZXF1YWxzKQ0KCQkJCSAgICAgdGhlbiByZWYgTXVzdA0KCQkJCSAgICAgZWxzZSByZWYg
KE1heWJlIDApIA0KCQkJIHwgU09NRSBhc3NlbWJseSA9PiByZWYgTXVzdCkpDQoNCgkgICAgdmFs
IF8gDQoJICAgICAgPSBMaXN0LmZvcmVhY2gNCgkgICAgICAgIChibG9ja3MsDQoJCSBmbiBCbG9j
ay5UIHt0cmFuc2ZlciwuLi59DQoJCSAgPT4gTGlzdC5mb3JlYWNoDQoJCSAgICAgKFRyYW5zZmVy
LnRhcmdldHMgdHJhbnNmZXIsDQoJCSAgICAgIGZuIGxhYmVsIA0KCQkgICAgICAgPT4gaW5jIHts
YWJlbCA9IGxhYmVsLA0KCQkJICAgICAgIGp1bXBJbmZvID0ganVtcEluZm99KSkNCgkgIGluDQoJ
ICAgIGp1bXBJbmZvDQoJICBlbmQNCg0KICAgICAgdmFsIChjb21wdXRlSnVtcEluZm8sIGNvbXB1
dGVKdW1wSW5mb19tc2cpDQoJPSB0cmFjZXINCiAgICAgICAgICAiY29tcHV0ZUp1bXBJbmZvIg0K
CSAgY29tcHV0ZUp1bXBJbmZvDQoNCiAgICAgIGZ1biB2ZXJpZnlKdW1wSW5mbyB7YmxvY2tzOiBC
bG9jay50IGxpc3QsIA0KCQkJICBleHBvcnRzOiBMYWJlbC50IGxpc3QsDQoJCQkgIGJsb2NrX3By
ZTogTGFiZWwudCAtPiBBc3NlbWJseS50IGxpc3Qgb3B0aW9uLA0KCQkJICBqdW1wSW5mbzoge2dl
dDogTGFiZWwudCAtPiBzdGF0dXMgcmVmfX0NCgk9IGxldA0KCSAgICB2YWwganVtcEluZm8nID0g
Y29tcHV0ZUp1bXBJbmZvIHtibG9ja3MgPSBibG9ja3MsDQoJCQkJCSAgICAgZXhwb3J0cyA9IGV4
cG9ydHMsDQoJCQkJCSAgICAgYmxvY2tfcHJlID0gYmxvY2tfcHJlfQ0KDQoJICAgIHZhbCB2ZXJp
ZmllZCANCgkgICAgICA9IExpc3QuZm9yYWxsDQoJICAgICAgICAoYmxvY2tzLA0KCQkgZm4gQmxv
Y2suVCB7bGFiZWwsLi4ufQ0KCQkgID0+IGlmICEoKCNnZXQganVtcEluZm8nKSBsYWJlbCkgPSAh
KCgjZ2V0IGp1bXBJbmZvKSBsYWJlbCkNCgkJICAgICAgIHRoZW4gdHJ1ZQ0KCQkgICAgICAgZWxz
ZSBmYWxzZSkNCgkgIGluDQoJICAgIHZlcmlmaWVkDQoJICBlbmQNCg0KICAgICAgdmFsICh2ZXJp
ZnlKdW1wSW5mbywgdmVyaWZ5SnVtcEluZm9fbXNnKQ0KCT0gdHJhY2VyDQogICAgICAgICAgInZl
cmlmeUp1bXBJbmZvIg0KCSAgdmVyaWZ5SnVtcEluZm8NCiAgICBlbmQNCg0KICBzdHJ1Y3R1cmUg
UGVlcGhvbGVCbG9jayA9DQogICAgc3RydWN0DQogICAgICBzdHJ1Y3R1cmUgUGVlcGhvbGUNCgk9
IFBlZXBob2xlKHR5cGUgbGFiZWxfdHlwZSA9IExhYmVsLnQNCgkJICAgdHlwZSBwcm9maWxlSW5m
b190eXBlID0gUHJvZmlsZUluZm8udA0KCQkgICB0eXBlIHN0YXRlbWVudF90eXBlID0gQXNzZW1i
bHkudA0KCQkgICB0eXBlIHRyYW5zZmVyX3R5cGUgPSBUcmFuc2Zlci50DQoJCSAgIGRhdGF0eXBl
IGJsb2NrID0gZGF0YXR5cGUgQmxvY2sudCkNCiAgICAgIG9wZW4gUGVlcGhvbGUNCg0KICAgICAg
ZnVuIG1ha2VfY2FsbGJhY2tfbXNnIG5hbWUNCgk9IGxldA0KCSAgICB2YWwgY291bnQgPSByZWYg
MA0KCSAgICB2YWwgdG90YWwgPSByZWYgMA0KCSAgICB2YWwgY2FsbGJhY2sgPSBmbiB0cnVlID0+
IChJbnQuaW5jIGNvdW50OyBJbnQuaW5jIHRvdGFsKQ0KCSAgICAgICAgICAgICAgICAgICAgfCBm
YWxzZSA9PiBJbnQuaW5jIHRvdGFsDQoJICAgIHZhbCBtc2cgPSBmbiAoKSA9PiBDb250cm9sLm1l
c3NhZ2VTdHIgDQoJICAgICAgICAgICAgICAgICAgICAgICAoY29uY2F0IFtuYW1lLCANCgkJCQkJ
IjogIiwgSW50LnRvU3RyaW5nICghY291bnQpLA0KCQkJCQkiIC8gIiwgSW50LnRvU3RyaW5nICgh
dG90YWwpXSkNCgkgIGluDQoJICAgIChjYWxsYmFjayxtc2cpDQoJICBlbmQNCg0KICAgICAgdmFs
IGlzQ29tbWVudCA6IHN0YXRlbWVudF90eXBlIC0+IGJvb2wNCgk9IGZuIEFzc2VtYmx5LkNvbW1l
bnQgXw0KCSAgID0+IHRydWUNCgkgICB8IF8gPT4gZmFsc2UNCg0KICAgICAgbG9jYWwNCgl2YWwg
aXNJbnN0cnVjdGlvbk1PViA6IHN0YXRlbWVudF90eXBlIC0+IGJvb2wNCgkgID0gZm4gQXNzZW1i
bHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9uLk1PVg0KCQkJCSAgICAgey4uLn0pDQoJICAgICA9
PiB0cnVlDQoJICAgICB8IF8gPT4gZmFsc2UNCg0KCXZhbCBpc0luc3RydWN0aW9uQmluQUxNRCA6
IHN0YXRlbWVudF90eXBlIC0+IGJvb2wNCgkgID0gZm4gQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKElu
c3RydWN0aW9uLkJpbkFMIHsuLi59KQ0KCSAgICAgPT4gdHJ1ZQ0KCSAgICAgfCBBc3NlbWJseS5J
bnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24ucE1EIHsuLi59KQ0KCSAgICAgPT4gdHJ1ZQ0KCSAgICAg
fCBfID0+IGZhbHNlDQoNCgl2YWwgdGVtcGxhdGUgOiB0ZW1wbGF0ZQ0KCSAgPSB7c3RhcnQgPSBF
bXB0eU9yTm9uRW1wdHksDQoJICAgICBzdGF0ZW1lbnRzID0gW09uZSBpc0luc3RydWN0aW9uTU9W
LA0KCQkJICAgQWxsIGlzQ29tbWVudCwNCgkJCSAgIE9uZSBpc0luc3RydWN0aW9uQmluQUxNRF0s
DQoJICAgICBmaW5pc2ggPSBFbXB0eU9yTm9uRW1wdHksDQoJICAgICB0cmFuc2ZlciA9IGZuIF8g
PT4gdHJ1ZX0NCg0KCXZhbCByZXdyaXRlciA6IHJld3JpdGVyDQoJICA9IGZuIHtsYWJlbCwNCgkJ
cHJvZmlsZUluZm8sDQoJCXN0YXJ0LCANCgkJc3RhdGVtZW50cyBhcw0KCQlbW0Fzc2VtYmx5Lklu
c3RydWN0aW9uIChJbnN0cnVjdGlvbi5NT1YNCgkJCQkJe3NyYyA9IHNyYzEsDQoJCQkJCSBkc3Qg
PSBkc3QxLCANCgkJCQkJIHNpemUgPSBzaXplMX0pXSwNCgkJIGNvbW1lbnRzLA0KCQkgW0Fzc2Vt
Ymx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5CaW5BTA0KCQkJCQl7b3BlciA9IG9wZXIyLA0K
CQkJCQkgc3JjID0gc3JjMiwNCgkJCQkJIGRzdCA9IGRzdDIsDQoJCQkJCSBzaXplID0gc2l6ZTJ9
KV1dLA0KCQlmaW5pc2gsIA0KCQl0cmFuc2Zlcn0NCgkgICAgID0+IGlmIFNpemUuZXEoc2l6ZTEs
IHNpemUyKSBhbmRhbHNvDQoJICAgICAgICAgICBPcGVyYW5kLmVxKGRzdDEsIGRzdDIpIGFuZGFs
c28NCgkJICAgT3BlcmFuZC5lcShzcmMxLCBzcmMyKQ0KCQkgIHRoZW4gbGV0DQoJCQkgdmFsIHN0
YXRlbWVudHMNCgkJCSAgID0gKEFzc2VtYmx5Lmluc3RydWN0aW9uX21vdg0KCQkJICAgICAge3Ny
YyA9IHNyYzEsDQoJCQkgICAgICAgZHN0ID0gZHN0MSwNCgkJCSAgICAgICBzaXplID0gc2l6ZTF9
KTo6DQoJCQkgICAgIChBc3NlbWJseS5pbnN0cnVjdGlvbl9iaW5hbA0KCQkJICAgICAge29wZXIg
PSBvcGVyMiwNCgkJCSAgICAgICBzcmMgPSBkc3QxLA0KCQkJICAgICAgIGRzdCA9IGRzdDIsDQoJ
CQkgICAgICAgc2l6ZSA9IHNpemUxfSk6Og0KCQkJICAgICBmaW5pc2gNCg0KCQkJIHZhbCBzdGF0
ZW1lbnRzDQoJCQkgICA9IExpc3QuZm9sZChzdGFydCwNCgkJCQkgICAgICAgTGlzdC5jb25jYXQg
W2NvbW1lbnRzLCANCgkJCQkJCSAgICBzdGF0ZW1lbnRzXSwNCgkJCQkgICAgICAgb3AgOjopDQoJ
CSAgICAgICBpbg0KCQkJIFNPTUUgKEJsb2NrLlQNCgkJCSAgICAgICB7bGFiZWwgPSBsYWJlbCwN
CgkJCQlwcm9maWxlSW5mbyA9IHByb2ZpbGVJbmZvLA0KCQkJCXN0YXRlbWVudHMgPSBzdGF0ZW1l
bnRzLA0KCQkJCXRyYW5zZmVyID0gdHJhbnNmZXJ9KQ0KCQkgICAgICAgZW5kDQoJCSAgZWxzZSBO
T05FDQoJICAgICB8IHtsYWJlbCwNCgkJcHJvZmlsZUluZm8sDQoJCXN0YXJ0LCANCgkJc3RhdGVt
ZW50cyBhcw0KCQlbW0Fzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5NT1YNCgkJCQkJ
e3NyYyA9IHNyYzEsDQoJCQkJCSBkc3QgPSBkc3QxLCANCgkJCQkJIHNpemUgPSBzaXplMX0pXSwN
CgkJIGNvbW1lbnRzLA0KCQkgW0Fzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5wTUQN
CgkJCQkJe29wZXIgPSBvcGVyMiwNCgkJCQkJIHNyYyA9IHNyYzIsDQoJCQkJCSBkc3QgPSBkc3Qy
LA0KCQkJCQkgc2l6ZSA9IHNpemUyfSldXSwNCgkJZmluaXNoLCANCgkJdHJhbnNmZXJ9DQoJICAg
ICA9PiBpZiBTaXplLmVxKHNpemUxLCBzaXplMikgYW5kYWxzbw0KCSAgICAgICAgICAgT3BlcmFu
ZC5lcShkc3QxLCBkc3QyKSBhbmRhbHNvDQoJCSAgIE9wZXJhbmQuZXEoc3JjMSwgc3JjMikNCgkJ
ICB0aGVuIGxldA0KCQkJIHZhbCBzdGF0ZW1lbnRzDQoJCQkgICA9IChBc3NlbWJseS5pbnN0cnVj
dGlvbl9tb3YNCgkJCSAgICAgIHtzcmMgPSBzcmMxLA0KCQkJICAgICAgIGRzdCA9IGRzdDEsDQoJ
CQkgICAgICAgc2l6ZSA9IHNpemUxfSk6Og0KCQkJICAgICAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25f
cG1kDQoJCQkgICAgICB7b3BlciA9IG9wZXIyLA0KCQkJICAgICAgIHNyYyA9IGRzdDEsDQoJCQkg
ICAgICAgZHN0ID0gZHN0MiwNCgkJCSAgICAgICBzaXplID0gc2l6ZTF9KTo6DQoJCQkgICAgIGZp
bmlzaA0KDQoJCQkgdmFsIHN0YXRlbWVudHMNCgkJCSAgID0gTGlzdC5mb2xkKHN0YXJ0LA0KCQkJ
CSAgICAgICBMaXN0LmNvbmNhdCBbY29tbWVudHMsIA0KCQkJCQkJICAgIHN0YXRlbWVudHNdLA0K
CQkJCSAgICAgICBvcCA6OikNCgkJICAgICAgIGluDQoJCQkgU09NRSAoQmxvY2suVA0KCQkJICAg
ICAgIHtsYWJlbCA9IGxhYmVsLA0KCQkJCXByb2ZpbGVJbmZvID0gcHJvZmlsZUluZm8sDQoJCQkJ
c3RhdGVtZW50cyA9IHN0YXRlbWVudHMsDQoJCQkJdHJhbnNmZXIgPSB0cmFuc2Zlcn0pDQoJCSAg
ICAgICBlbmQNCgkJICBlbHNlIE5PTkUNCgkgICAgIHwgXyA9PiBFcnJvci5idWcgIlBlZXBob2xl
OiBlbGltQmluQUxNRERvdWJsZSINCg0KCXZhbCAoY2FsbGJhY2ssZWxpbUJpbkFMTUREb3VibGVf
bXNnKSANCgkgID0gbWFrZV9jYWxsYmFja19tc2cgImVsaW1CaW5BTE1ERG91YmxlIg0KICAgICAg
aW4NCgl2YWwgZWxpbUJpbkFMTUREb3VibGUgOiBvcHRpbWl6YXRpb24NCgkgID0ge3RlbXBsYXRl
ID0gdGVtcGxhdGUsDQoJICAgICByZXdyaXRlciA9IHJld3JpdGVyLA0KCSAgICAgY2FsbGJhY2sg
PSBjYWxsYmFja30NCgl2YWwgZWxpbUJpbkFMTUREb3VibGVfbXNnID0gZWxpbUJpbkFMTUREb3Vi
bGVfbXNnDQogICAgICBlbmQNCg0KICAgICAgbG9jYWwNCgl2YWwgaXNJbnN0cnVjdGlvbkZNT1Yg
OiBzdGF0ZW1lbnRfdHlwZSAtPiBib29sDQoJICA9IGZuIEFzc2VtYmx5Lkluc3RydWN0aW9uIChJ
bnN0cnVjdGlvbi5wRk1PVg0KCQkJCSAgICAgey4uLn0pDQoJICAgICA9PiB0cnVlDQoJICAgICB8
IF8gPT4gZmFsc2UNCg0KCXZhbCBpc0luc3RydWN0aW9uRkJpbkEgOiBzdGF0ZW1lbnRfdHlwZSAt
PiBib29sDQoJICA9IGZuIEFzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5wRkJpbkEg
ey4uLn0pDQoJICAgICA9PiB0cnVlDQoJICAgICB8IEFzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0
cnVjdGlvbi5wRkJpbkFTIHsuLi59KQ0KCSAgICAgPT4gdHJ1ZQ0KCSAgICAgfCBBc3NlbWJseS5J
bnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24ucEZCaW5BU1Agey4uLn0pDQoJICAgICA9PiB0cnVlDQoJ
ICAgICB8IF8gPT4gZmFsc2UNCg0KCXZhbCB0ZW1wbGF0ZSA6IHRlbXBsYXRlDQoJICA9IHtzdGFy
dCA9IEVtcHR5T3JOb25FbXB0eSwNCgkgICAgIHN0YXRlbWVudHMgPSBbT25lIGlzSW5zdHJ1Y3Rp
b25GTU9WLA0KCQkJICAgQWxsIGlzQ29tbWVudCwNCgkJCSAgIE9uZSBpc0luc3RydWN0aW9uRkJp
bkFdLA0KCSAgICAgZmluaXNoID0gRW1wdHlPck5vbkVtcHR5LA0KCSAgICAgdHJhbnNmZXIgPSBm
biBfID0+IHRydWV9DQoNCgl2YWwgcmV3cml0ZXIgOiByZXdyaXRlcg0KCSAgPSBmbiB7bGFiZWws
DQoJCXByb2ZpbGVJbmZvLA0KCQlzdGFydCwgDQoJCXN0YXRlbWVudHMgYXMNCgkJW1tBc3NlbWJs
eS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24ucEZNT1YNCgkJCQkJe3NyYyA9IHNyYzEsDQoJCQkJ
CSBkc3QgPSBkc3QxLCANCgkJCQkJIHNpemUgPSBzaXplMX0pXSwNCgkJIGNvbW1lbnRzLA0KCQkg
W0Fzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5wRkJpbkENCgkJCQkJe29wZXIgPSBv
cGVyMiwNCgkJCQkJIHNyYyA9IHNyYzIsDQoJCQkJCSBkc3QgPSBkc3QyLA0KCQkJCQkgc2l6ZSA9
IHNpemUyfSldXSwNCgkJZmluaXNoLCANCgkJdHJhbnNmZXJ9DQoJICAgICA9PiBpZiBTaXplLmVx
KHNpemUxLCBzaXplMikgYW5kYWxzbw0KCSAgICAgICAgICAgT3BlcmFuZC5lcShkc3QxLCBkc3Qy
KSBhbmRhbHNvDQoJCSAgIE9wZXJhbmQuZXEoc3JjMSwgc3JjMikNCgkJICB0aGVuIGxldA0KCQkJ
IHZhbCBzdGF0ZW1lbnRzDQoJCQkgICA9IChBc3NlbWJseS5pbnN0cnVjdGlvbl9wZm1vdg0KCQkJ
ICAgICAge3NyYyA9IHNyYzEsDQoJCQkgICAgICAgZHN0ID0gZHN0MSwNCgkJCSAgICAgICBzaXpl
ID0gc2l6ZTF9KTo6DQoJCQkgICAgIChBc3NlbWJseS5pbnN0cnVjdGlvbl9wZmJpbmENCgkJCSAg
ICAgIHtvcGVyID0gb3BlcjIsDQoJCQkgICAgICAgc3JjID0gZHN0MSwNCgkJCSAgICAgICBkc3Qg
PSBkc3QyLA0KCQkJICAgICAgIHNpemUgPSBzaXplMX0pOjoNCgkJCSAgICAgZmluaXNoDQoNCgkJ
CSB2YWwgc3RhdGVtZW50cw0KCQkJICAgPSBMaXN0LmZvbGQoc3RhcnQsDQoJCQkJICAgICAgIExp
c3QuY29uY2F0IFtjb21tZW50cywgDQoJCQkJCQkgICAgc3RhdGVtZW50c10sDQoJCQkJICAgICAg
IG9wIDo6KQ0KCQkgICAgICAgaW4NCgkJCSBTT01FIChCbG9jay5UDQoJCQkgICAgICAge2xhYmVs
ID0gbGFiZWwsDQoJCQkJcHJvZmlsZUluZm8gPSBwcm9maWxlSW5mbywNCgkJCQlzdGF0ZW1lbnRz
ID0gc3RhdGVtZW50cywNCgkJCQl0cmFuc2ZlciA9IHRyYW5zZmVyfSkNCgkJICAgICAgIGVuZA0K
CQkgIGVsc2UgTk9ORQ0KCSAgICAgfCB7bGFiZWwsDQoJCXByb2ZpbGVJbmZvLCANCgkJc3RhcnQs
IA0KCQlzdGF0ZW1lbnRzIGFzDQoJCVtbQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9u
LnBGTU9WDQoJCQkJCXtzcmMgPSBzcmMxLA0KCQkJCQkgZHN0ID0gZHN0MSwgDQoJCQkJCSBzaXpl
ID0gc2l6ZTF9KV0sDQoJCSBjb21tZW50cywNCgkJIFtBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5z
dHJ1Y3Rpb24ucEZCaW5BUw0KCQkJCQl7b3BlciA9IG9wZXIyLA0KCQkJCQkgc3JjID0gc3JjMiwN
CgkJCQkJIGRzdCA9IGRzdDIsDQoJCQkJCSBzaXplID0gc2l6ZTJ9KV1dLA0KCQlmaW5pc2gsIA0K
CQl0cmFuc2Zlcn0NCgkgICAgID0+IGlmIFNpemUuZXEoc2l6ZTEsIHNpemUyKSBhbmRhbHNvDQoJ
ICAgICAgICAgICBPcGVyYW5kLmVxKGRzdDEsIGRzdDIpIGFuZGFsc28NCgkJICAgT3BlcmFuZC5l
cShzcmMxLCBzcmMyKQ0KCQkgIHRoZW4gbGV0DQoJCQkgdmFsIHN0YXRlbWVudHMNCgkJCSAgID0g
KEFzc2VtYmx5Lmluc3RydWN0aW9uX3BmbW92DQoJCQkgICAgICB7c3JjID0gc3JjMSwNCgkJCSAg
ICAgICBkc3QgPSBkc3QxLA0KCQkJICAgICAgIHNpemUgPSBzaXplMX0pOjoNCgkJCSAgICAgKEFz
c2VtYmx5Lmluc3RydWN0aW9uX3BmYmluYXMNCgkJCSAgICAgIHtvcGVyID0gb3BlcjIsDQoJCQkg
ICAgICAgc3JjID0gZHN0MSwNCgkJCSAgICAgICBkc3QgPSBkc3QyLA0KCQkJICAgICAgIHNpemUg
PSBzaXplMX0pOjoNCgkJCSAgICAgZmluaXNoDQoNCgkJCSB2YWwgc3RhdGVtZW50cw0KCQkJICAg
PSBMaXN0LmZvbGQoc3RhcnQsDQoJCQkJICAgICAgIExpc3QuY29uY2F0IFtjb21tZW50cywNCgkJ
CQkJCSAgICBzdGF0ZW1lbnRzXSwNCgkJCQkgICAgICAgb3AgOjopDQoJCSAgICAgICBpbg0KCQkJ
IFNPTUUgKEJsb2NrLlQNCgkJCSAgICAgICB7bGFiZWwgPSBsYWJlbCwNCgkJCQlwcm9maWxlSW5m
byA9IHByb2ZpbGVJbmZvLA0KCQkJCXN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzLA0KCQkJCXRyYW5z
ZmVyID0gdHJhbnNmZXJ9KQ0KCQkgICAgICAgZW5kDQoJCSAgZWxzZSBOT05FDQoJICAgICB8IHts
YWJlbCwNCgkgICAgICAgIHByb2ZpbGVJbmZvLA0KCQlzdGFydCwgDQoJCXN0YXRlbWVudHMgYXMN
CgkJW1tBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24ucEZNT1YNCgkJCQkJe3NyYyA9
IHNyYzEsDQoJCQkJCSBkc3QgPSBkc3QxLCANCgkJCQkJIHNpemUgPSBzaXplMX0pXSwNCgkJIGNv
bW1lbnRzLA0KCQkgW0Fzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5wRkJpbkFTUA0K
CQkJCQl7b3BlciA9IG9wZXIyLA0KCQkJCQkgc3JjID0gc3JjMiwNCgkJCQkJIGRzdCA9IGRzdDIs
DQoJCQkJCSBzaXplID0gc2l6ZTJ9KV1dLA0KCQlmaW5pc2gsIA0KCQl0cmFuc2Zlcn0NCgkgICAg
ID0+IGlmIFNpemUuZXEoc2l6ZTEsIHNpemUyKSBhbmRhbHNvDQoJICAgICAgICAgICBPcGVyYW5k
LmVxKGRzdDEsIGRzdDIpIGFuZGFsc28NCgkJICAgT3BlcmFuZC5lcShzcmMxLCBzcmMyKQ0KCQkg
IHRoZW4gbGV0DQoJCQkgdmFsIHN0YXRlbWVudHMNCgkJCSAgID0gKEFzc2VtYmx5Lmluc3RydWN0
aW9uX3BmbW92DQoJCQkgICAgICB7c3JjID0gc3JjMSwNCgkJCSAgICAgICBkc3QgPSBkc3QxLA0K
CQkJICAgICAgIHNpemUgPSBzaXplMX0pOjoNCgkJCSAgICAgKEFzc2VtYmx5Lmluc3RydWN0aW9u
X3BmYmluYXNwDQoJCQkgICAgICB7b3BlciA9IG9wZXIyLA0KCQkJICAgICAgIHNyYyA9IGRzdDEs
DQoJCQkgICAgICAgZHN0ID0gZHN0MiwNCgkJCSAgICAgICBzaXplID0gc2l6ZTF9KTo6DQoJCQkg
ICAgIGZpbmlzaA0KDQoJCQkgdmFsIHN0YXRlbWVudHMNCgkJCSAgID0gTGlzdC5mb2xkKHN0YXJ0
LA0KCQkJCSAgICAgICBMaXN0LmNvbmNhdCBbY29tbWVudHMsDQoJCQkJCQkgICAgc3RhdGVtZW50
c10sDQoJCQkJICAgICAgIG9wIDo6KQ0KCQkgICAgICAgaW4NCgkJCSBTT01FIChCbG9jay5UDQoJ
CQkgICAgICAge2xhYmVsID0gbGFiZWwsDQoJCQkJcHJvZmlsZUluZm8gPSBwcm9maWxlSW5mbywN
CgkJCQlzdGF0ZW1lbnRzID0gc3RhdGVtZW50cywNCgkJCQl0cmFuc2ZlciA9IHRyYW5zZmVyfSkN
CgkJICAgICAgIGVuZA0KCQkgIGVsc2UgTk9ORQ0KCSAgICAgfCBfID0+IEVycm9yLmJ1ZyAiUGVl
cGhvbGU6IGVsaW1GbHRCaW5BRG91YmxlIg0KDQoJdmFsIChjYWxsYmFjayxlbGltRmx0QmluQURv
dWJsZV9tc2cpIA0KCSAgPSBtYWtlX2NhbGxiYWNrX21zZyAiZWxpbUZsdEJpbkFEb3VibGUiDQog
ICAgICBpbg0KCXZhbCBlbGltRmx0QmluQURvdWJsZSA6IG9wdGltaXphdGlvbg0KCSAgPSB7dGVt
cGxhdGUgPSB0ZW1wbGF0ZSwNCgkgICAgIHJld3JpdGVyID0gcmV3cml0ZXIsDQoJICAgICBjYWxs
YmFjayA9IGNhbGxiYWNrfQ0KCXZhbCBlbGltRmx0QmluQURvdWJsZV9tc2cgPSBlbGltRmx0Qmlu
QURvdWJsZV9tc2cNCiAgICAgIGVuZA0KDQogICAgICBsb2NhbA0KCXZhbCBpc0luc3RydWN0aW9u
TU9WX3NyY0ltbWVkaWF0ZSA6IHN0YXRlbWVudF90eXBlIC0+IGJvb2wNCgkgID0gZm4gQXNzZW1i
bHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9uLk1PViANCgkJCQkgICAgIHtzcmMgPSBPcGVyYW5k
LkltbWVkaWF0ZSBpbW1lZGlhdGUsDQoJCQkJICAgICAgLi4ufSkNCgkgICAgID0+IHRydWUNCgkg
ICAgIHwgXyA9PiBmYWxzZQkJCQkgICAgIA0KDQoJdmFsIGlzSW5zdHJ1Y3Rpb25CaW5BTE1EX29w
ZXJDb21tdXRlIDogc3RhdGVtZW50X3R5cGUgLT4gYm9vbA0KCSAgPSBmbiBBc3NlbWJseS5JbnN0
cnVjdGlvbiAoSW5zdHJ1Y3Rpb24uQmluQUwNCgkJCQkgICAgIHtvcGVyLA0KCQkJCSAgICAgIC4u
Ln0pDQoJICAgICA9PiAob3BlciA9IEluc3RydWN0aW9uLkFERCkNCgkgICAgICAgIG9yZWxzZQ0K
CQkob3BlciA9IEluc3RydWN0aW9uLkFEQykNCgkJb3JlbHNlDQoJCShvcGVyID0gSW5zdHJ1Y3Rp
b24uQU5EKQ0KCQlvcmVsc2UNCgkJKG9wZXIgPSBJbnN0cnVjdGlvbi5PUikNCgkJb3JlbHNlDQoJ
CShvcGVyID0gSW5zdHJ1Y3Rpb24uWE9SKQ0KCSAgICAgfCBBc3NlbWJseS5JbnN0cnVjdGlvbiAo
SW5zdHJ1Y3Rpb24ucE1EDQoJCQkJICAgICB7b3BlciwNCgkJCQkgICAgICAuLi59KQ0KCSAgICAg
PT4gKG9wZXIgPSBJbnN0cnVjdGlvbi5JTVVMKQ0KCSAgICAgICAgb3JlbHNlDQoJCShvcGVyID0g
SW5zdHJ1Y3Rpb24uTVVMKQ0KCSAgICAgfCBfID0+IGZhbHNlDQoNCgl2YWwgdGVtcGxhdGUgOiB0
ZW1wbGF0ZQ0KCSAgPSB7c3RhcnQgPSBFbXB0eU9yTm9uRW1wdHksDQoJICAgICBzdGF0ZW1lbnRz
ID0gW09uZSBpc0luc3RydWN0aW9uTU9WX3NyY0ltbWVkaWF0ZSwNCgkJCSAgIEFsbCBpc0NvbW1l
bnQsDQoJCQkgICBPbmUgaXNJbnN0cnVjdGlvbkJpbkFMTURfb3BlckNvbW11dGVdLA0KCSAgICAg
ZmluaXNoID0gRW1wdHlPck5vbkVtcHR5LA0KCSAgICAgdHJhbnNmZXIgPSBmbiBfID0+IHRydWV9
DQoNCgl2YWwgcmV3cml0ZXIgOiByZXdyaXRlcg0KCSAgPSBmbiB7bGFiZWwsDQoJCXByb2ZpbGVJ
bmZvLA0KCQlzdGFydCwgDQoJCXN0YXRlbWVudHMgYXMNCgkJW1tBc3NlbWJseS5JbnN0cnVjdGlv
biAoSW5zdHJ1Y3Rpb24uTU9WDQoJCQkJCXtzcmMgPSBzcmMxLCANCgkJCQkJIGRzdCA9IGRzdDEs
IA0KCQkJCQkgc2l6ZSA9IHNpemUxfSldLA0KCQkgY29tbWVudHMsDQoJCSBbQXNzZW1ibHkuSW5z
dHJ1Y3Rpb24gKEluc3RydWN0aW9uLkJpbkFMDQoJCQkJCXtvcGVyID0gb3BlcjIsDQoJCQkJCSBz
cmMgPSBzcmMyLA0KCQkJCQkgZHN0ID0gZHN0MiwNCgkJCQkJIHNpemUgPSBzaXplMn0pXV0sDQoJ
CWZpbmlzaCwgDQoJCXRyYW5zZmVyfQ0KCSAgICAgPT4gaWYgU2l6ZS5lcShzaXplMSwgc2l6ZTIp
IGFuZGFsc28NCgkgICAgICAgICAgIE9wZXJhbmQuZXEoZHN0MSwgZHN0MikNCgkJICB0aGVuIGNh
c2UgKHNyYzEsIHNyYzIpDQoJCQkgb2YgKE9wZXJhbmQuSW1tZWRpYXRlIF8sIE9wZXJhbmQuSW1t
ZWRpYXRlIF8pDQoJCQkgID0+IE5PTkUNCgkJCSAgfCAoT3BlcmFuZC5JbW1lZGlhdGUgXywgXykN
CgkJCSAgPT4gbGV0DQoJCQkgICAgICAgdmFsIHN0YXRlbWVudHMNCgkJCQkgPSAoQXNzZW1ibHku
aW5zdHJ1Y3Rpb25fbW92DQoJCQkJICAgIHtzcmMgPSBzcmMyLA0KCQkJCSAgICAgZHN0ID0gZHN0
MSwNCgkJCQkgICAgIHNpemUgPSBzaXplMX0pOjoNCgkJCQkgICAoQXNzZW1ibHkuaW5zdHJ1Y3Rp
b25fYmluYWwNCgkJCQkgICAge29wZXIgPSBvcGVyMiwNCgkJCQkgICAgIHNyYyA9IHNyYzEsDQoJ
CQkJICAgICBkc3QgPSBkc3QyLA0KCQkJCSAgICAgc2l6ZSA9IHNpemUyfSk6Og0KCQkJCSAgIGZp
bmlzaA0KDQoJCQkgICAgICAgdmFsIHN0YXRlbWVudHMNCgkJCQkgPSBMaXN0LmZvbGQoc3RhcnQs
DQoJCQkJCSAgICAgTGlzdC5jb25jYXQgW2NvbW1lbnRzLA0KCQkJCQkJCSAgc3RhdGVtZW50c10s
DQoJCQkJCSAgICAgb3AgOjopDQoJCQkgICAgIGluDQoJCQkgICAgICAgU09NRSAoQmxvY2suVA0K
CQkJCSAgICAge2xhYmVsID0gbGFiZWwsDQoJCQkJICAgICAgcHJvZmlsZUluZm8gPSBwcm9maWxl
SW5mbywNCgkJCQkgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50cywNCgkJCQkgICAgICB0cmFu
c2ZlciA9IHRyYW5zZmVyfSkNCgkJCSAgICAgZW5kDQoJCQkgIHwgXyA9PiBOT05FDQoJCSAgZWxz
ZSBOT05FDQoJICAgICB8IHtsYWJlbCwNCgkJcHJvZmlsZUluZm8sDQoJCXN0YXJ0LCANCgkJc3Rh
dGVtZW50cyBhcw0KCQlbW0Fzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5NT1YNCgkJ
CQkJe3NyYyA9IHNyYzEsIA0KCQkJCQkgZHN0ID0gZHN0MSwgDQoJCQkJCSBzaXplID0gc2l6ZTF9
KV0sDQoJCSBjb21tZW50cywNCgkJIFtBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24u
cE1EDQoJCQkJCXtvcGVyID0gb3BlcjIsDQoJCQkJCSBzcmMgPSBzcmMyLA0KCQkJCQkgZHN0ID0g
ZHN0MiwNCgkJCQkJIHNpemUgPSBzaXplMn0pXV0sDQoJCWZpbmlzaCwgDQoJCXRyYW5zZmVyfQ0K
CSAgICAgPT4gaWYgU2l6ZS5lcShzaXplMSwgc2l6ZTIpIGFuZGFsc28NCgkgICAgICAgICAgIE9w
ZXJhbmQuZXEoZHN0MSwgZHN0MikNCgkJICB0aGVuIGNhc2UgKHNyYzEsIHNyYzIpDQoJCQkgb2Yg
KE9wZXJhbmQuSW1tZWRpYXRlIF8sIE9wZXJhbmQuSW1tZWRpYXRlIF8pDQoJCQkgID0+IE5PTkUN
CgkJCSAgfCAoT3BlcmFuZC5JbW1lZGlhdGUgXywgXykNCgkJCSAgPT4gbGV0DQoJCQkgICAgICAg
dmFsIHN0YXRlbWVudHMNCgkJCQkgPSAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fbW92DQoJCQkJICAg
IHtzcmMgPSBzcmMyLA0KCQkJCSAgICAgZHN0ID0gZHN0MSwNCgkJCQkgICAgIHNpemUgPSBzaXpl
MX0pOjoNCgkJCQkgICAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fcG1kDQoJCQkJICAgIHtvcGVyID0g
b3BlcjIsDQoJCQkJICAgICBzcmMgPSBzcmMxLA0KCQkJCSAgICAgZHN0ID0gZHN0MiwNCgkJCQkg
ICAgIHNpemUgPSBzaXplMn0pOjoNCgkJCQkgICBmaW5pc2gNCg0KCQkJICAgICAgIHZhbCBzdGF0
ZW1lbnRzDQoJCQkJID0gTGlzdC5mb2xkKHN0YXJ0LA0KCQkJCQkgICAgIExpc3QuY29uY2F0IFtj
b21tZW50cywNCgkJCQkJCQkgIHN0YXRlbWVudHNdLA0KCQkJCQkgICAgIG9wIDo6KQ0KCQkJICAg
ICBpbg0KCQkJICAgICAgIFNPTUUgKEJsb2NrLlQNCgkJCQkgICAgIHtsYWJlbCA9IGxhYmVsLA0K
CQkJCSAgICAgIHByb2ZpbGVJbmZvID0gcHJvZmlsZUluZm8sDQoJCQkJICAgICAgc3RhdGVtZW50
cyA9IHN0YXRlbWVudHMsDQoJCQkJICAgICAgdHJhbnNmZXIgPSB0cmFuc2Zlcn0pDQoJCQkgICAg
IGVuZA0KCQkJICB8IF8gPT4gTk9ORQ0KCQkgIGVsc2UgTk9ORQ0KCSAgICAgfCBfID0+IEVycm9y
LmJ1ZyAiUGVlcGhvbGU6IGNvbW11dGVCaW5BTE1EIg0KDQoJdmFsIChjYWxsYmFjayxjb21tdXRl
QmluQUxNRF9tc2cpIA0KCSAgPSBtYWtlX2NhbGxiYWNrX21zZyAiY29tbXV0ZUJpbkFMTUQiDQog
ICAgICBpbg0KCXZhbCBjb21tdXRlQmluQUxNRCA6IG9wdGltaXphdGlvbg0KCSAgPSB7dGVtcGxh
dGUgPSB0ZW1wbGF0ZSwNCgkgICAgIHJld3JpdGVyID0gcmV3cml0ZXIsDQoJICAgICBjYWxsYmFj
ayA9IGNhbGxiYWNrfQ0KCXZhbCBjb21tdXRlQmluQUxNRF9tc2cgPSBjb21tdXRlQmluQUxNRF9t
c2cNCiAgICAgIGVuZA0KDQogICAgICBsb2NhbA0KCXZhbCBpc0ltbWVkaWF0ZTANCgkgID0gZm4g
SW1tZWRpYXRlLkNvbnN0IChJbW1lZGlhdGUuQ2hhciAjIlwwMDAiKSA9PiB0cnVlDQoJICAgICB8
IEltbWVkaWF0ZS5Db25zdCAoSW1tZWRpYXRlLkludCAwKSA9PiB0cnVlDQoJICAgICB8IEltbWVk
aWF0ZS5Db25zdCAoSW1tZWRpYXRlLldvcmQgMHd4MCkgPT4gdHJ1ZQ0KCSAgICAgfCBfID0+IGZh
bHNlDQoNCgl2YWwgaXNJbnN0cnVjdGlvbk1PVl9zcmNJbW1lZGlhdGUwIDogc3RhdGVtZW50X3R5
cGUgLT4gYm9vbA0KCSAgPSBmbiBBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24uTU9W
DQoJCQkJICAgICB7c3JjID0gT3BlcmFuZC5JbW1lZGlhdGUgaW1tZWRpYXRlLA0KCQkJCSAgICAg
IC4uLn0pDQoJICAgICA9PiBpc0ltbWVkaWF0ZTAgaW1tZWRpYXRlDQoJICAgICB8IF8gPT4gZmFs
c2UNCg0KCXZhbCBpc0luc3RydWN0aW9uQmluQUwgOiBzdGF0ZW1lbnRfdHlwZSAtPiBib29sDQoJ
ICA9IGZuIEFzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5CaW5BTA0KCQkJCSAgICAg
e29wZXIsDQoJCQkJICAgICAgLi4ufSkNCiAgICAgICAJICAgICA9PiAoY2FzZSBvcGVyDQoJCSAg
IG9mIEluc3RydWN0aW9uLkFEQyA9PiBmYWxzZQ0KCQkgICAgfCBJbnN0cnVjdGlvbi5TQkIgPT4g
ZmFsc2UNCgkJICAgIHwgXyA9PiB0cnVlKQ0KCSAgICAgfCBfID0+IGZhbHNlDQoNCgl2YWwgdGVt
cGxhdGUgOiB0ZW1wbGF0ZQ0KCSAgPSB7c3RhcnQgPSBFbXB0eU9yTm9uRW1wdHksDQoJICAgICBz
dGF0ZW1lbnRzID0gW09uZSBpc0luc3RydWN0aW9uTU9WX3NyY0ltbWVkaWF0ZTAsDQoJCQkgICBB
bGwgaXNDb21tZW50LA0KCQkJICAgT25lIGlzSW5zdHJ1Y3Rpb25CaW5BTF0sDQoJICAgICBmaW5p
c2ggPSBFbXB0eU9yTm9uRW1wdHksDQoJICAgICB0cmFuc2ZlciA9IGZuIF8gPT4gdHJ1ZX0NCg0K
CXZhbCByZXdyaXRlciA6IHJld3JpdGVyDQoJICA9IGZuIHtsYWJlbCwNCgkJcHJvZmlsZUluZm8s
DQoJCXN0YXJ0LA0KCQlzdGF0ZW1lbnRzIGFzDQoJCVtbQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKElu
c3RydWN0aW9uLk1PVg0KCQkJCQl7c3JjID0gc3JjMSBhcyBPcGVyYW5kLkltbWVkaWF0ZSBpbW1l
ZGlhdGUsIA0KCQkJCQkgZHN0ID0gZHN0MSwgDQoJCQkJCSBzaXplID0gc2l6ZTF9KV0sDQoJCSBj
b21tZW50cywNCgkJIFtBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24uQmluQUwNCgkJ
CQkJe29wZXIgPSBvcGVyMiwNCgkJCQkJIHNyYyA9IHNyYzIsDQoJCQkJCSBkc3QgPSBkc3QyLA0K
CQkJCQkgc2l6ZSA9IHNpemUyfSldXSwNCgkJZmluaXNoIGFzIFtdLCANCgkJdHJhbnNmZXIgYXMg
VHJhbnNmZXIuSWZmIHtjb25kaXRpb24gPSBJbnN0cnVjdGlvbi5PLA0KCQkJCQkgIHRydWVlLA0K
CQkJCQkgIGZhbHNlZX19DQoJICAgICA9PiBpZiBTaXplLmVxKHNpemUxLCBzaXplMikgYW5kYWxz
bw0KCSAgICAgICAgICAgT3BlcmFuZC5lcShkc3QxLCBkc3QyKQ0KCQkgIHRoZW4gbGV0DQoJCQkg
dmFsIHN0YXRlbWVudHMNCgkJCSAgID0gKGZuIGwNCgkJCSAgICAgICA9PiBjYXNlIG9wZXIyDQoJ
CQkJICAgIG9mIEluc3RydWN0aW9uLkFERA0KCQkJCSAgICAgPT4gKEFzc2VtYmx5Lmluc3RydWN0
aW9uX21vdg0KCQkJCQkge3NyYyA9IHNyYzIsDQoJCQkJCSAgZHN0ID0gZHN0MSwNCgkJCQkJICBz
aXplID0gc2l6ZTF9KTo6DQoJCQkJICAgICAgICBsDQoJCQkgICAgICAgICAgICAgfCBJbnN0cnVj
dGlvbi5TVUINCgkJCQkgICAgID0+IChBc3NlbWJseS5pbnN0cnVjdGlvbl9tb3YNCgkJCQkJIHtz
cmMgPSBzcmMyLA0KCQkJCQkgIGRzdCA9IGRzdDEsDQoJCQkJCSAgc2l6ZSA9IHNpemUxfSk6Og0K
CQkJCQkoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fdW5hbA0KCQkJCQkge29wZXIgPSBJbnN0cnVjdGlv
bi5ORUcsDQoJCQkJCSAgZHN0ID0gZHN0MSwNCgkJCQkJICBzaXplID0gc2l6ZTF9KTo6DQoJCQkJ
CWwNCgkJCSAgICAgICAgICAgICB8IEluc3RydWN0aW9uLkFORA0KCQkJCSAgICAgPT4gKEFzc2Vt
Ymx5Lmluc3RydWN0aW9uX21vdg0KCQkJCQkge3NyYyA9IHNyYzEsDQoJCQkJCSAgZHN0ID0gZHN0
MSwNCgkJCQkJICBzaXplID0gc2l6ZTF9KTo6DQoJCQkJCWwNCgkJCSAgICAgICAgICAgICB8IElu
c3RydWN0aW9uLk9SDQoJCQkJICAgICA9PiAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fbW92DQoJCQkJ
CSB7c3JjID0gc3JjMiwNCgkJCQkJICBkc3QgPSBkc3QxLA0KCQkJCQkgIHNpemUgPSBzaXplMX0p
OjoNCgkJCQkJbA0KCQkJICAgICAgICAgICAgIHwgSW5zdHJ1Y3Rpb24uWE9SDQoJCQkJICAgICA9
PiAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fbW92DQoJCQkJCSB7c3JjID0gc3JjMiwNCgkJCQkJICBk
c3QgPSBkc3QxLA0KCQkJCQkgIHNpemUgPSBzaXplMX0pOjoNCgkJCQkJbA0KCQkJCSAgICAgfCBf
ID0+IEVycm9yLmJ1ZyAiZWxpbUJpbkFMMEwiKQ0KCQkJICAgICBmaW5pc2gNCg0KCQkJIHZhbCBz
dGF0ZW1lbnRzDQoJCQkgICA9IExpc3QuZm9sZChzdGFydCwNCgkJCQkgICAgICAgTGlzdC5jb25j
YXQgW2NvbW1lbnRzLCANCgkJCQkJCSAgICBzdGF0ZW1lbnRzXSwNCgkJCQkgICAgICAgb3AgOjop
DQoNCgkJCSB2YWwgdHJhbnNmZXINCgkJCSAgID0gY2FzZSBvcGVyMg0KCQkJICAgICAgIG9mIElu
c3RydWN0aW9uLlNVQiA9PiB0cmFuc2Zlcg0KCQkJCXwgXyA9PiBUcmFuc2Zlci5Hb3RvIHt0YXJn
ZXQgPSBmYWxzZWV9DQoJCSAgICAgICBpbg0KCQkJIFNPTUUgKEJsb2NrLlQNCgkJCSAgICAgICB7
bGFiZWwgPSBsYWJlbCwNCgkJCQlwcm9maWxlSW5mbyA9IHByb2ZpbGVJbmZvLA0KCQkJCXN0YXRl
bWVudHMgPSBzdGF0ZW1lbnRzLA0KCQkJCXRyYW5zZmVyID0gdHJhbnNmZXJ9KQ0KCQkgICAgICAg
ZW5kDQoJCSAgZWxzZSBOT05FDQoJICAgICB8IHtsYWJlbCwNCgkJcHJvZmlsZUluZm8sDQoJCXN0
YXJ0LA0KCQlzdGF0ZW1lbnRzIGFzDQoJCVtbQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0
aW9uLk1PVg0KCQkJCQl7c3JjID0gc3JjMSBhcyBPcGVyYW5kLkltbWVkaWF0ZSBpbW1lZGlhdGUs
IA0KCQkJCQkgZHN0ID0gZHN0MSwgDQoJCQkJCSBzaXplID0gc2l6ZTF9KV0sDQoJCSBjb21tZW50
cywNCgkJIFtBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24uQmluQUwNCgkJCQkJe29w
ZXIgPSBvcGVyMiwNCgkJCQkJIHNyYyA9IHNyYzIsDQoJCQkJCSBkc3QgPSBkc3QyLA0KCQkJCQkg
c2l6ZSA9IHNpemUyfSldXSwNCgkJZmluaXNoIGFzIFtdLCANCgkJdHJhbnNmZXIgYXMgVHJhbnNm
ZXIuSWZmIHtjb25kaXRpb24gPSBJbnN0cnVjdGlvbi5OTywNCgkJCQkJICB0cnVlZSwNCgkJCQkJ
ICBmYWxzZWV9fQ0KCSAgICAgPT4gaWYgU2l6ZS5lcShzaXplMSwgc2l6ZTIpIGFuZGFsc28NCgkg
ICAgICAgICAgIE9wZXJhbmQuZXEoZHN0MSwgZHN0MikNCgkJICB0aGVuIGxldA0KCQkJIHZhbCBz
dGF0ZW1lbnRzDQoJCQkgICA9IChmbiBsIA0KCQkJICAgICAgID0+IGNhc2Ugb3BlcjINCgkJCQkg
ICAgb2YgSW5zdHJ1Y3Rpb24uQUREDQoJCQkJICAgICA9PiAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25f
bW92DQoJCQkJICAgICAgICAge3NyYyA9IHNyYzIsDQoJCQkJCSAgZHN0ID0gZHN0MSwNCgkJCQkJ
ICBzaXplID0gc2l6ZTF9KTo6DQoJCQkJICAgICAgICBsDQoJCQkgICAgICAgICAgICAgfCBJbnN0
cnVjdGlvbi5TVUINCgkJCQkgICAgID0+IChBc3NlbWJseS5pbnN0cnVjdGlvbl9tb3YNCgkJCQkJ
IHtzcmMgPSBzcmMyLA0KCQkJCQkgIGRzdCA9IGRzdDEsDQoJCQkJCSAgc2l6ZSA9IHNpemUxfSk6
Og0KCQkJCQkoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fdW5hbA0KCQkJCQkge29wZXIgPSBJbnN0cnVj
dGlvbi5ORUcsDQoJCQkJCSAgZHN0ID0gZHN0MiwNCgkJCQkJICBzaXplID0gc2l6ZTJ9KTo6DQoJ
CQkJCWwNCgkJCSAgICAgICAgICAgICB8IEluc3RydWN0aW9uLkFORA0KCQkJCSAgICAgPT4gKEFz
c2VtYmx5Lmluc3RydWN0aW9uX21vdg0KCQkJCQkge3NyYyA9IHNyYzEsDQoJCQkJCSAgZHN0ID0g
ZHN0MSwNCgkJCQkJICBzaXplID0gc2l6ZTF9KTo6DQoJCQkJCWwNCgkJCSAgICAgICAgICAgICB8
IEluc3RydWN0aW9uLk9SDQoJCQkJICAgICA9PiAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fbW92DQoJ
CQkJCSB7c3JjID0gc3JjMiwNCgkJCQkJICBkc3QgPSBkc3QxLA0KCQkJCQkgIHNpemUgPSBzaXpl
MX0pOjoNCgkJCQkJbA0KCQkJICAgICAgICAgICAgIHwgSW5zdHJ1Y3Rpb24uWE9SDQoJCQkJICAg
ICA9PiAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fbW92DQoJCQkJCSB7c3JjID0gc3JjMiwNCgkJCQkJ
ICBkc3QgPSBkc3QxLA0KCQkJCQkgIHNpemUgPSBzaXplMX0pOjoNCgkJCQkJbA0KCQkJCSAgICAg
fCBfID0+IEVycm9yLmJ1ZyAiZWxpbUJpbkFMMEwiKQ0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaW5pc2gNCg0KCQkJIHZhbCBzdGF0ZW1lbnRzDQoJCQkgICA9IExpc3QuZm9sZChzdGFy
dCwNCgkJCQkgICAgICAgTGlzdC5jb25jYXQgW2NvbW1lbnRzLA0KCQkJCQkJICAgIHN0YXRlbWVu
dHNdLA0KCQkJCSAgICAgICBvcCA6OikNCgkJCSAgICAgDQoJCQkgdmFsIHRyYW5zZmVyDQoJCQkg
ICA9IGNhc2Ugb3BlcjINCgkJCSAgICAgICBvZiBJbnN0cnVjdGlvbi5TVUIgPT4gdHJhbnNmZXIN
CgkJCQl8IF8gPT4gVHJhbnNmZXIuR290byB7dGFyZ2V0ID0gdHJ1ZWV9DQoJCSAgICAgICBpbg0K
CQkJIFNPTUUgKEJsb2NrLlQNCgkJCSAgICAgICB7bGFiZWwgPSBsYWJlbCwNCgkJCQlwcm9maWxl
SW5mbyA9IHByb2ZpbGVJbmZvLA0KCQkJCXN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzLA0KCQkJCXRy
YW5zZmVyID0gdHJhbnNmZXJ9KQ0KCQkgICAgICAgZW5kDQoJCSAgZWxzZSBOT05FDQoJICAgICB8
IHtsYWJlbCwNCgkJcHJvZmlsZUluZm8sDQoJCXN0YXJ0LCANCgkJc3RhdGVtZW50cyBhcw0KCQlb
W0Fzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5NT1YNCgkJCQkJe3NyYyA9IHNyYzEg
YXMgT3BlcmFuZC5JbW1lZGlhdGUgaW1tZWRpYXRlLCANCgkJCQkJIGRzdCA9IGRzdDEsIA0KCQkJ
CQkgc2l6ZSA9IHNpemUxfSldLA0KCQkgY29tbWVudHMsDQoJCSBbQXNzZW1ibHkuSW5zdHJ1Y3Rp
b24gKEluc3RydWN0aW9uLkJpbkFMDQoJCQkJCXtvcGVyID0gb3BlcjIsDQoJCQkJCSBzcmMgPSBz
cmMyLA0KCQkJCQkgZHN0ID0gZHN0MiwNCgkJCQkJIHNpemUgPSBzaXplMn0pXV0sDQoJCWZpbmlz
aCwgDQoJCXRyYW5zZmVyfQ0KCSAgICAgPT4gaWYgU2l6ZS5lcShzaXplMSwgc2l6ZTIpIGFuZGFs
c28NCgkgICAgICAgICAgIE9wZXJhbmQuZXEoZHN0MSwgZHN0MikNCgkJICB0aGVuIGxldA0KCQkJ
IHZhbCBzdGF0ZW1lbnRzDQoJCQkgICA9IChmbiBsIA0KCQkJICAgICAgID0+IGNhc2Ugb3BlcjIN
CgkJCQkgICAgb2YgSW5zdHJ1Y3Rpb24uQUREDQoJCQkJICAgICA9PiAoQXNzZW1ibHkuaW5zdHJ1
Y3Rpb25fbW92DQoJCQkJCSB7c3JjID0gc3JjMiwNCgkJCQkJICBkc3QgPSBkc3QxLA0KCQkJCQkg
IHNpemUgPSBzaXplMX0pOjoNCgkJCQkgICAgICAgIGwNCgkJCSAgICAgICAgICAgICB8IEluc3Ry
dWN0aW9uLlNVQg0KCQkJCSAgICAgPT4gKEFzc2VtYmx5Lmluc3RydWN0aW9uX21vdg0KCQkJCQkg
e3NyYyA9IHNyYzIsDQoJCQkJCSAgZHN0ID0gZHN0MSwNCgkJCQkJICBzaXplID0gc2l6ZTF9KTo6
DQoJCQkJCShBc3NlbWJseS5pbnN0cnVjdGlvbl91bmFsDQoJCQkJCSB7b3BlciA9IEluc3RydWN0
aW9uLk5FRywNCgkJCQkJICBkc3QgPSBkc3QxLA0KCQkJCQkgIHNpemUgPSBzaXplMX0pOjoNCgkJ
CQkJbA0KCQkJICAgICAgICAgICAgIHwgSW5zdHJ1Y3Rpb24uQU5EDQoJCQkJICAgICA9PiAoQXNz
ZW1ibHkuaW5zdHJ1Y3Rpb25fbW92DQoJCQkJCSB7c3JjID0gc3JjMSwNCgkJCQkJICBkc3QgPSBk
c3QxLA0KCQkJCQkgIHNpemUgPSBzaXplMX0pOjoNCgkJCQkJbA0KCQkJICAgICAgICAgICAgIHwg
SW5zdHJ1Y3Rpb24uT1INCgkJCQkgICAgID0+IChBc3NlbWJseS5pbnN0cnVjdGlvbl9tb3YNCgkJ
CQkJIHtzcmMgPSBzcmMyLA0KCQkJCQkgIGRzdCA9IGRzdDEsDQoJCQkJCSAgc2l6ZSA9IHNpemUx
fSk6Og0KCQkJCQlsDQoJCQkgICAgICAgICAgICAgfCBJbnN0cnVjdGlvbi5YT1INCgkJCQkgICAg
ID0+IChBc3NlbWJseS5pbnN0cnVjdGlvbl9tb3YNCgkJCQkJIHtzcmMgPSBzcmMyLA0KCQkJCQkg
IGRzdCA9IGRzdDEsDQoJCQkJCSAgc2l6ZSA9IHNpemUxfSk6Og0KCQkJCQlsDQoJCQkJICAgICB8
IF8gPT4gRXJyb3IuYnVnICJlbGltQmluQUwwTCIpDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpbmlzaA0KDQoJCQkgdmFsIHN0YXRlbWVudHMNCgkJCSAgID0gTGlzdC5mb2xkKHN0YXJ0
LA0KCQkJCSAgICAgICBMaXN0LmNvbmNhdCBbY29tbWVudHMsDQoJCQkJCQkgICAgc3RhdGVtZW50
c10sDQoJCQkJICAgICAgIG9wIDo6KQ0KCQkgICAgICAgaW4NCgkJCSBTT01FIChCbG9jay5UDQoJ
CQkgICAgICAge2xhYmVsID0gbGFiZWwsDQoJCQkJcHJvZmlsZUluZm8gPSBwcm9maWxlSW5mbywN
CgkJCQlzdGF0ZW1lbnRzID0gc3RhdGVtZW50cywNCgkJCQl0cmFuc2ZlciA9IHRyYW5zZmVyfSkN
CgkJICAgICAgIGVuZA0KCQkgIGVsc2UgTk9ORQ0KCSAgICAgfCBfID0+IEVycm9yLmJ1ZyAiUGVl
cGhvbGU6IGVsaW1CaW5BTDBMIg0KDQoJdmFsIChjYWxsYmFjayxlbGltQmluQUwwTF9tc2cpIA0K
CSAgPSBtYWtlX2NhbGxiYWNrX21zZyAiZWxpbUJpbkFMMEwiDQogICAgICBpbg0KCXZhbCBlbGlt
QmluQUwwTCA6IG9wdGltaXphdGlvbg0KCSAgPSB7dGVtcGxhdGUgPSB0ZW1wbGF0ZSwNCgkgICAg
IHJld3JpdGVyID0gcmV3cml0ZXIsDQoJICAgICBjYWxsYmFjayA9IGNhbGxiYWNrfQ0KCXZhbCBl
bGltQmluQUwwTF9tc2cgPSBlbGltQmluQUwwTF9tc2cNCiAgICAgIGVuZA0KDQogICAgICBsb2Nh
bA0KCXZhbCBpc0ltbWVkaWF0ZTANCgkgID0gZm4gSW1tZWRpYXRlLkNvbnN0IChJbW1lZGlhdGUu
Q2hhciAjIlwwMDAiKSA9PiB0cnVlDQoJICAgICB8IEltbWVkaWF0ZS5Db25zdCAoSW1tZWRpYXRl
LkludCAwKSA9PiB0cnVlDQoJICAgICB8IEltbWVkaWF0ZS5Db25zdCAoSW1tZWRpYXRlLldvcmQg
MHd4MCkgPT4gdHJ1ZQ0KCSAgICAgfCBfID0+IGZhbHNlDQoNCgl2YWwgaXNJbnN0cnVjdGlvbk1P
ViA6IHN0YXRlbWVudF90eXBlIC0+IGJvb2wNCgkgID0gZm4gQXNzZW1ibHkuSW5zdHJ1Y3Rpb24g
KEluc3RydWN0aW9uLk1PVg0KCQkJCSAgICAgey4uLn0pDQoJICAgICA9PiB0cnVlDQoJICAgICB8
IF8gPT4gZmFsc2UNCg0KCXZhbCBpc0luc3RydWN0aW9uQmluQUxfc3JjSW1tZWRpYXRlMCA6IHN0
YXRlbWVudF90eXBlIC0+IGJvb2wNCgkgID0gZm4gQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3Ry
dWN0aW9uLkJpbkFMDQoJCQkJICAgICB7b3BlciwNCgkJCQkgICAgICBzcmMgPSBPcGVyYW5kLklt
bWVkaWF0ZSBpbW1lZGlhdGUsDQoJCQkJICAgICAgLi4ufSkNCiAgICAgICAJICAgICA9PiAoY2Fz
ZSBvcGVyDQoJCSAgIG9mIEluc3RydWN0aW9uLkFEQyA9PiBmYWxzZQ0KCQkgICAgfCBJbnN0cnVj
dGlvbi5TQkIgPT4gZmFsc2UNCgkJICAgIHwgXyA9PiB0cnVlKQ0KICAgICAgICAgICAgICAgIGFu
ZGFsc28NCgkJaXNJbW1lZGlhdGUwIGltbWVkaWF0ZQ0KCSAgICAgfCBfID0+IGZhbHNlDQoNCgl2
YWwgdGVtcGxhdGUgOiB0ZW1wbGF0ZQ0KCSAgPSB7c3RhcnQgPSBFbXB0eU9yTm9uRW1wdHksDQoJ
ICAgICBzdGF0ZW1lbnRzID0gW09uZSBpc0luc3RydWN0aW9uTU9WLA0KCQkJICAgQWxsIGlzQ29t
bWVudCwNCgkJCSAgIE9uZSBpc0luc3RydWN0aW9uQmluQUxfc3JjSW1tZWRpYXRlMF0sDQoJICAg
ICBmaW5pc2ggPSBFbXB0eU9yTm9uRW1wdHksDQoJICAgICB0cmFuc2ZlciA9IGZuIF8gPT4gdHJ1
ZX0NCg0KCXZhbCByZXdyaXRlciA6IHJld3JpdGVyDQoJICA9IGZuIHtsYWJlbCwNCgkJcHJvZmls
ZUluZm8sDQoJCXN0YXJ0LCANCgkJc3RhdGVtZW50cyBhcw0KCQlbW0Fzc2VtYmx5Lkluc3RydWN0
aW9uIChJbnN0cnVjdGlvbi5NT1YNCgkJCQkJe3NyYyA9IHNyYzEsDQoJCQkJCSBkc3QgPSBkc3Qx
LCANCgkJCQkJIHNpemUgPSBzaXplMX0pXSwNCgkJIGNvbW1lbnRzLA0KCQkgW0Fzc2VtYmx5Lklu
c3RydWN0aW9uIChJbnN0cnVjdGlvbi5CaW5BTA0KCQkJCQl7b3BlciA9IG9wZXIyLA0KCQkJCQkg
c3JjID0gc3JjMiBhcyBPcGVyYW5kLkltbWVkaWF0ZSBpbW1lZGlhdGUsDQoJCQkJCSBkc3QgPSBk
c3QyLA0KCQkJCQkgc2l6ZSA9IHNpemUyfSldXSwNCgkJZmluaXNoIGFzIFtdLCANCgkJdHJhbnNm
ZXIgYXMgVHJhbnNmZXIuSWZmIHtjb25kaXRpb24gPSBJbnN0cnVjdGlvbi5PLA0KCQkJCQkgIHRy
dWVlLA0KCQkJCQkgIGZhbHNlZX19DQoJICAgICA9PiBpZiBTaXplLmVxKHNpemUxLCBzaXplMikg
YW5kYWxzbw0KCSAgICAgICAgICAgT3BlcmFuZC5lcShkc3QxLCBkc3QyKQ0KCQkgIHRoZW4gbGV0
DQoJCQkgdmFsIHN0YXRlbWVudHMNCgkJCSAgID0gKGZuIGwgDQoJCQkgICAgICAgPT4gY2FzZSBv
cGVyMg0KCQkJCSAgICBvZiBJbnN0cnVjdGlvbi5BREQNCgkJCQkgICAgID0+IChBc3NlbWJseS5p
bnN0cnVjdGlvbl9tb3YNCgkJCQkJIHtzcmMgPSBzcmMxLA0KCQkJCQkgIGRzdCA9IGRzdDEsDQoJ
CQkJCSAgc2l6ZSA9IHNpemUxfSk6Og0KCQkJCSAgICAgICAgbA0KCQkJICAgICAgICAgICAgIHwg
SW5zdHJ1Y3Rpb24uU1VCDQoJCQkJICAgICA9PiAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fbW92DQoJ
CQkJCSB7c3JjID0gc3JjMSwNCgkJCQkJICBkc3QgPSBkc3QxLA0KCQkJCQkgIHNpemUgPSBzaXpl
MX0pOjoNCgkJCQkJbA0KCQkJICAgICAgICAgICAgIHwgSW5zdHJ1Y3Rpb24uQU5EDQoJCQkJICAg
ICA9PiAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fbW92DQoJCQkJCSB7c3JjID0gc3JjMiwNCgkJCQkJ
ICBkc3QgPSBkc3QxLA0KCQkJCQkgIHNpemUgPSBzaXplMX0pOjoNCgkJCQkJbA0KCQkJICAgICAg
ICAgICAgIHwgSW5zdHJ1Y3Rpb24uT1INCgkJCQkgICAgID0+IChBc3NlbWJseS5pbnN0cnVjdGlv
bl9tb3YNCgkJCQkJIHtzcmMgPSBzcmMxLA0KCQkJCQkgIGRzdCA9IGRzdDEsDQoJCQkJCSAgc2l6
ZSA9IHNpemUxfSk6Og0KCQkJCQlsDQoJCQkgICAgICAgICAgICAgfCBJbnN0cnVjdGlvbi5YT1IN
CgkJCQkgICAgID0+IChBc3NlbWJseS5pbnN0cnVjdGlvbl9tb3YNCgkJCQkJIHtzcmMgPSBzcmMx
LA0KCQkJCQkgIGRzdCA9IGRzdDEsDQoJCQkJCSAgc2l6ZSA9IHNpemUxfSk6Og0KCQkJCQlsDQoJ
CQkJICAgICB8IF8gPT4gRXJyb3IuYnVnICJlbGltQmluQUwwUiIpDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbmlzaA0KDQoJCQkgdmFsIHN0YXRlbWVudHMNCgkJCSAgID0gTGlzdC5m
b2xkKHN0YXJ0LA0KCQkJCSAgICAgICBMaXN0LmNvbmNhdCBbY29tbWVudHMsDQoJCQkJCQkgICAg
c3RhdGVtZW50c10sDQoJCQkJICAgICAgIG9wIDo6KQ0KDQoJCQkgdmFsIHRyYW5zZmVyID0gVHJh
bnNmZXIuR290byB7dGFyZ2V0ID0gZmFsc2VlfQ0KCQkgICAgICAgaW4NCgkJCSBTT01FIChCbG9j
ay5UDQoJCQkgICAgICAge2xhYmVsID0gbGFiZWwsDQoJCQkJcHJvZmlsZUluZm8gPSBwcm9maWxl
SW5mbywNCgkJCQlzdGF0ZW1lbnRzID0gc3RhdGVtZW50cywNCgkJCQl0cmFuc2ZlciA9IHRyYW5z
ZmVyfSkNCgkJICAgICAgIGVuZA0KCQkgIGVsc2UgTk9ORQ0KCSAgICAgfCB7bGFiZWwsDQoJCXBy
b2ZpbGVJbmZvLA0KCQlzdGFydCwgDQoJCXN0YXRlbWVudHMgYXMNCgkJW1tBc3NlbWJseS5JbnN0
cnVjdGlvbiAoSW5zdHJ1Y3Rpb24uTU9WDQoJCQkJCXtzcmMgPSBzcmMxLA0KCQkJCQkgZHN0ID0g
ZHN0MSwgDQoJCQkJCSBzaXplID0gc2l6ZTF9KV0sDQoJCSBjb21tZW50cywNCgkJIFtBc3NlbWJs
eS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24uQmluQUwNCgkJCQkJe29wZXIgPSBvcGVyMiwNCgkJ
CQkJIHNyYyA9IHNyYzIgYXMgT3BlcmFuZC5JbW1lZGlhdGUgaW1tZWRpYXRlLA0KCQkJCQkgZHN0
ID0gZHN0MiwNCgkJCQkJIHNpemUgPSBzaXplMn0pXV0sDQoJCWZpbmlzaCBhcyBbXSwgDQoJCXRy
YW5zZmVyIGFzIFRyYW5zZmVyLklmZiB7Y29uZGl0aW9uID0gSW5zdHJ1Y3Rpb24uTk8sDQoJCQkJ
CSAgdHJ1ZWUsDQoJCQkJCSAgZmFsc2VlfX0NCgkgICAgID0+IGlmIFNpemUuZXEoc2l6ZTEsIHNp
emUyKSBhbmRhbHNvDQoJICAgICAgICAgICBPcGVyYW5kLmVxKGRzdDEsIGRzdDIpDQoJCSAgdGhl
biBsZXQNCgkJCSB2YWwgc3RhdGVtZW50cw0KCQkJICAgPSAoZm4gbA0KCQkJICAgICAgID0+IGNh
c2Ugb3BlcjINCgkJCQkgICAgb2YgSW5zdHJ1Y3Rpb24uQUREDQoJCQkJICAgICA9PiAoQXNzZW1i
bHkuaW5zdHJ1Y3Rpb25fbW92DQoJCQkJICAgICAgICAge3NyYyA9IHNyYzEsDQoJCQkJCSAgZHN0
ID0gZHN0MSwNCgkJCQkJICBzaXplID0gc2l6ZTF9KTo6DQoJCQkJICAgICAgICBsDQoJCQkgICAg
ICAgICAgICAgfCBJbnN0cnVjdGlvbi5TVUINCgkJCQkgICAgID0+IChBc3NlbWJseS5pbnN0cnVj
dGlvbl9tb3YNCgkJCQkJIHtzcmMgPSBzcmMxLA0KCQkJCQkgIGRzdCA9IGRzdDEsDQoJCQkJCSAg
c2l6ZSA9IHNpemUxfSk6Og0KCQkJCQlsDQoJCQkgICAgICAgICAgICAgfCBJbnN0cnVjdGlvbi5B
TkQNCgkJCQkgICAgID0+IChBc3NlbWJseS5pbnN0cnVjdGlvbl9tb3YNCgkJCQkJIHtzcmMgPSBz
cmMyLA0KCQkJCQkgIGRzdCA9IGRzdDEsDQoJCQkJCSAgc2l6ZSA9IHNpemUxfSk6Og0KCQkJCQls
DQoJCQkgICAgICAgICAgICAgfCBJbnN0cnVjdGlvbi5PUg0KCQkJCSAgICAgPT4gKEFzc2VtYmx5
Lmluc3RydWN0aW9uX21vdg0KCQkJCQkge3NyYyA9IHNyYzEsDQoJCQkJCSAgZHN0ID0gZHN0MSwN
CgkJCQkJICBzaXplID0gc2l6ZTF9KTo6DQoJCQkJCWwNCgkJCSAgICAgICAgICAgICB8IEluc3Ry
dWN0aW9uLlhPUg0KCQkJCSAgICAgPT4gKEFzc2VtYmx5Lmluc3RydWN0aW9uX21vdg0KCQkJCQkg
e3NyYyA9IHNyYzEsDQoJCQkJCSAgZHN0ID0gZHN0MSwNCgkJCQkJICBzaXplID0gc2l6ZTF9KTo6
DQoJCQkJCWwNCgkJCQkgICAgIHwgXyA9PiBFcnJvci5idWcgImVsaW1CaW5BTDBSIikNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoDQoNCgkJCSB2YWwgc3RhdGVtZW50cw0KCQkJ
ICAgPSBMaXN0LmZvbGQoc3RhcnQsDQoJCQkJICAgICAgIExpc3QuY29uY2F0IFtjb21tZW50cywN
CgkJCQkJCSAgICBzdGF0ZW1lbnRzXSwNCgkJCQkgICAgICAgb3AgOjopDQoNCgkJCSB2YWwgdHJh
bnNmZXIgPSBUcmFuc2Zlci5Hb3RvIHt0YXJnZXQgPSB0cnVlZX0NCgkJICAgICAgIGluDQoJCQkg
U09NRSAoQmxvY2suVA0KCQkJICAgICAgIHtsYWJlbCA9IGxhYmVsLA0KCQkJCXByb2ZpbGVJbmZv
ID0gcHJvZmlsZUluZm8sDQoJCQkJc3RhdGVtZW50cyA9IHN0YXRlbWVudHMsDQoJCQkJdHJhbnNm
ZXIgPSB0cmFuc2Zlcn0pDQoJCSAgICAgICBlbmQNCgkJICBlbHNlIE5PTkUNCgkgICAgIHwge2xh
YmVsLA0KCQlwcm9maWxlSW5mbywNCgkJc3RhcnQsIA0KCQlzdGF0ZW1lbnRzIGFzDQoJCVtbQXNz
ZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9uLk1PVg0KCQkJCQl7c3JjID0gc3JjMSwNCgkJ
CQkJIGRzdCA9IGRzdDEsIA0KCQkJCQkgc2l6ZSA9IHNpemUxfSldLA0KCQkgY29tbWVudHMsDQoJ
CSBbQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9uLkJpbkFMDQoJCQkJCXtvcGVyID0g
b3BlcjIsDQoJCQkJCSBzcmMgPSBzcmMyIGFzIE9wZXJhbmQuSW1tZWRpYXRlIGltbWVkaWF0ZSwN
CgkJCQkJIGRzdCA9IGRzdDIsDQoJCQkJCSBzaXplID0gc2l6ZTJ9KV1dLA0KCQlmaW5pc2gsIA0K
CQl0cmFuc2Zlcn0NCgkgICAgID0+IGlmIFNpemUuZXEoc2l6ZTEsIHNpemUyKSBhbmRhbHNvDQoJ
ICAgICAgICAgICBPcGVyYW5kLmVxKGRzdDEsIGRzdDIpDQoJCSAgdGhlbiBsZXQNCgkJCSB2YWwg
c3RhdGVtZW50cw0KCQkJICAgPSAoZm4gbA0KCQkJICAgICAgID0+IGNhc2Ugb3BlcjINCgkJCQkg
ICAgb2YgSW5zdHJ1Y3Rpb24uQUREDQoJCQkJICAgICA9PiAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25f
bW92DQoJCQkJCSB7c3JjID0gc3JjMSwNCgkJCQkJICBkc3QgPSBkc3QxLA0KCQkJCQkgIHNpemUg
PSBzaXplMX0pOjoNCgkJCQkgICAgICAgIGwNCgkJCSAgICAgICAgICAgICB8IEluc3RydWN0aW9u
LlNVQg0KCQkJCSAgICAgPT4gKEFzc2VtYmx5Lmluc3RydWN0aW9uX21vdg0KCQkJCQkge3NyYyA9
IHNyYzEsDQoJCQkJCSAgZHN0ID0gZHN0MSwNCgkJCQkJICBzaXplID0gc2l6ZTF9KTo6DQoJCQkJ
CWwNCgkJCSAgICAgICAgICAgICB8IEluc3RydWN0aW9uLkFORA0KCQkJCSAgICAgPT4gKEFzc2Vt
Ymx5Lmluc3RydWN0aW9uX21vdg0KCQkJCQkge3NyYyA9IHNyYzIsDQoJCQkJCSAgZHN0ID0gZHN0
MSwNCgkJCQkJICBzaXplID0gc2l6ZTF9KTo6DQoJCQkJCWwNCgkJCSAgICAgICAgICAgICB8IElu
c3RydWN0aW9uLk9SDQoJCQkJICAgICA9PiAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fbW92DQoJCQkJ
CSB7c3JjID0gc3JjMSwNCgkJCQkJICBkc3QgPSBkc3QxLA0KCQkJCQkgIHNpemUgPSBzaXplMX0p
OjoNCgkJCQkJbA0KCQkJICAgICAgICAgICAgIHwgSW5zdHJ1Y3Rpb24uWE9SDQoJCQkJICAgICA9
PiAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fbW92DQoJCQkJCSB7c3JjID0gc3JjMSwNCgkJCQkJICBk
c3QgPSBkc3QxLA0KCQkJCQkgIHNpemUgPSBzaXplMX0pOjoNCgkJCQkJbA0KCQkJCSAgICAgfCBf
ID0+IEVycm9yLmJ1ZyAiZWxpbUJpbkFMMFIiKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaW5pc2gNCg0KCQkJIHZhbCBzdGF0ZW1lbnRzDQoJCQkgICA9IExpc3QuZm9sZChzdGFydCwN
CgkJCQkgICAgICAgTGlzdC5jb25jYXQgW2NvbW1lbnRzLA0KCQkJCQkJICAgIHN0YXRlbWVudHNd
LA0KCQkJCSAgICAgICBvcCA6OikNCgkJICAgICAgIGluDQoJCQkgU09NRSAoQmxvY2suVA0KCQkJ
ICAgICAgIHtsYWJlbCA9IGxhYmVsLA0KCQkJCXByb2ZpbGVJbmZvID0gcHJvZmlsZUluZm8sDQoJ
CQkJc3RhdGVtZW50cyA9IHN0YXRlbWVudHMsDQoJCQkJdHJhbnNmZXIgPSB0cmFuc2Zlcn0pDQoJ
CSAgICAgICBlbmQNCgkJICBlbHNlIE5PTkUNCgkgICAgIHwgXyA9PiBFcnJvci5idWcgIlBlZXBo
b2xlOiBlbGltQmluQUwwUiINCg0KCXZhbCAoY2FsbGJhY2ssZWxpbUJpbkFMMFJfbXNnKSANCgkg
ID0gbWFrZV9jYWxsYmFja19tc2cgImVsaW1CaW5BTDBSIg0KICAgICAgaW4NCgl2YWwgZWxpbUJp
bkFMMFIgOiBvcHRpbWl6YXRpb24NCgkgID0ge3RlbXBsYXRlID0gdGVtcGxhdGUsDQoJICAgICBy
ZXdyaXRlciA9IHJld3JpdGVyLA0KCSAgICAgY2FsbGJhY2sgPSBjYWxsYmFja30NCgl2YWwgZWxp
bUJpbkFMMFJfbXNnID0gZWxpbUJpbkFMMFJfbXNnDQogICAgICBlbmQNCg0KICAgICAgbG9jYWwN
Cgl2YWwgaXNJbW1lZGlhdGUxDQoJICA9IGZuIEltbWVkaWF0ZS5Db25zdCAoSW1tZWRpYXRlLkNo
YXIgIyJcMDAxIikgPT4gdHJ1ZQ0KCSAgICAgfCBJbW1lZGlhdGUuQ29uc3QgKEltbWVkaWF0ZS5J
bnQgMSkgPT4gdHJ1ZQ0KCSAgICAgfCBJbW1lZGlhdGUuQ29uc3QgKEltbWVkaWF0ZS5JbnQgfjEp
ID0+IHRydWUNCgkgICAgIHwgSW1tZWRpYXRlLkNvbnN0IChJbW1lZGlhdGUuV29yZCAwd3gxKSA9
PiB0cnVlDQoJICAgICB8IEltbWVkaWF0ZS5Db25zdCAoSW1tZWRpYXRlLldvcmQgMHd4RkZGRkZG
RkYpID0+IHRydWUNCgkgICAgIHwgXyA9PiBmYWxzZQ0KDQoJdmFsIGdldEltbWVkaWF0ZTENCgkg
ID0gZm4gSW1tZWRpYXRlLkNvbnN0IChJbW1lZGlhdGUuQ2hhciAjIlwwMDEiKSA9PiBTT01FIGZh
bHNlDQoJICAgICB8IEltbWVkaWF0ZS5Db25zdCAoSW1tZWRpYXRlLkludCAxKSA9PiBTT01FIGZh
bHNlDQoJICAgICB8IEltbWVkaWF0ZS5Db25zdCAoSW1tZWRpYXRlLkludCB+MSkgPT4gU09NRSB0
cnVlDQoJICAgICB8IEltbWVkaWF0ZS5Db25zdCAoSW1tZWRpYXRlLldvcmQgMHd4MSkgPT4gU09N
RSBmYWxzZQ0KCSAgICAgfCBJbW1lZGlhdGUuQ29uc3QgKEltbWVkaWF0ZS5Xb3JkIDB3eEZGRkZG
RkZGKSA9PiBTT01FIHRydWUNCgkgICAgIHwgXyA9PiBOT05FDQoNCgl2YWwgaXNJbnN0cnVjdGlv
bkFERG9yU1VCX3NyY0ltbWVkaWF0ZTEgOiBzdGF0ZW1lbnRfdHlwZSAtPiBib29sDQoJPSBmbiBB
c3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24uQmluQUwgDQoJCQkJICAge29wZXIsDQoJ
CQkJICAgIHNyYyA9IE9wZXJhbmQuSW1tZWRpYXRlIGltbWVkaWF0ZSwNCgkJCQkgICAgLi4ufSkN
CgkgICA9PiAoY2FzZSBvcGVyDQoJCSBvZiBJbnN0cnVjdGlvbi5BREQgPT4gdHJ1ZQ0KCQkgIHwg
SW5zdHJ1Y3Rpb24uU1VCID0+IHRydWUNCgkJICB8IF8gPT4gZmFsc2UpDQoJICAgICAgYW5kYWxz
bw0KCSAgICAgIGlzU29tZSAoZ2V0SW1tZWRpYXRlMSBpbW1lZGlhdGUpDQoJICAgfCBfID0+IGZh
bHNlDQoNCgl2YWwgdGVtcGxhdGUgOiB0ZW1wbGF0ZSANCgkgID0ge3N0YXJ0ID0gRW1wdHlPck5v
bkVtcHR5LA0KCSAgICAgc3RhdGVtZW50cyA9IFtPbmUgaXNJbnN0cnVjdGlvbkFERG9yU1VCX3Ny
Y0ltbWVkaWF0ZTFdLA0KCSAgICAgZmluaXNoID0gRW1wdHlPck5vbkVtcHR5LA0KCSAgICAgdHJh
bnNmZXIgPSBmbiBfID0+IHRydWV9DQoNCgl2YWwgcmV3cml0ZXIgOiByZXdyaXRlcg0KCSAgPSBm
biB7bGFiZWwsDQoJCXByb2ZpbGVJbmZvLA0KCQlzdGFydCwgDQoJCXN0YXRlbWVudHMgYXMNCgkJ
W1tBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24uQmluQUwgDQoJCQkJCXtvcGVyLA0K
CQkJCQkgc3JjID0gT3BlcmFuZC5JbW1lZGlhdGUgaW1tZWRpYXRlLCANCgkJCQkJIGRzdCwgDQoJ
CQkJCSBzaXplfSldXSwNCgkJZmluaXNoLCANCgkJdHJhbnNmZXJ9DQoJICAgICA9PiBsZXQNCgkJ
ICB2YWwgb3Blcg0KCQkgICAgPSBjYXNlIChvcGVyLCBnZXRJbW1lZGlhdGUxIGltbWVkaWF0ZSkN
CgkJICAgICAgICBvZiAoSW5zdHJ1Y3Rpb24uQURELCBTT01FIGZhbHNlKSA9PiBJbnN0cnVjdGlv
bi5JTkMNCgkJICAgICAgICAgfCAoSW5zdHJ1Y3Rpb24uQURELCBTT01FIHRydWUgKSA9PiBJbnN0
cnVjdGlvbi5ERUMNCgkJICAgICAgICAgfCAoSW5zdHJ1Y3Rpb24uU1VCLCBTT01FIGZhbHNlKSA9
PiBJbnN0cnVjdGlvbi5ERUMNCgkJICAgICAgICAgfCAoSW5zdHJ1Y3Rpb24uU1VCLCBTT01FIHRy
dWUgKSA9PiBJbnN0cnVjdGlvbi5JTkMNCgkJCSB8IF8gPT4gRXJyb3IuYnVnICJlbGltQWRkU3Vi
MSINCg0KCQkgIHZhbCBzdGF0ZW1lbnRzDQoJCSAgICA9IChBc3NlbWJseS5pbnN0cnVjdGlvbl91
bmFsDQoJCSAgICAgICB7b3BlciA9IG9wZXIsDQoJCQlkc3QgPSBkc3QsDQoJCQlzaXplID0gc2l6
ZX0pOjoNCgkJICAgICAgZmluaXNoDQoNCgkJICB2YWwgc3RhdGVtZW50cw0KCQkgICAgPSBMaXN0
LmZvbGQoc3RhcnQsDQoJCQkJc3RhdGVtZW50cywNCgkJCQlvcCA6OikNCgkJaW4gDQoJCSAgU09N
RSAoQmxvY2suVA0KCQkJe2xhYmVsID0gbGFiZWwsDQoJCQkgcHJvZmlsZUluZm8gPSBwcm9maWxl
SW5mbywNCgkJCSBzdGF0ZW1lbnRzID0gc3RhdGVtZW50cywNCgkJCSB0cmFuc2ZlciA9IHRyYW5z
ZmVyfSkNCgkJZW5kDQoJICAgICB8IF8gPT4gRXJyb3IuYnVnICJQZWVwaG9sZTogZWxpbUFkZFN1
YjEiDQogDQoJdmFsIChjYWxsYmFjayxlbGltQWRkU3ViMV9tc2cpIA0KCSAgPSBtYWtlX2NhbGxi
YWNrX21zZyAiZWxpbUFkZFN1YjEiDQogICAgICBpbg0KCXZhbCBlbGltQWRkU3ViMTogb3B0aW1p
emF0aW9uDQoJICA9IHt0ZW1wbGF0ZSA9IHRlbXBsYXRlLA0KCSAgICAgcmV3cml0ZXIgPSByZXdy
aXRlciwNCgkgICAgIGNhbGxiYWNrID0gY2FsbGJhY2t9DQoJdmFsIGVsaW1BZGRTdWIxX21zZyA9
IGVsaW1BZGRTdWIxX21zZw0KICAgICAgZW5kDQoNCiAgICAgIGxvY2FsDQoJdmFsIHJlYyBsb2cy
Jw0KCSAgPSBmbiAoMHd4MCwgXykgPT4gTk9ORQ0KCSAgICAgfCAodyA6IFdvcmQzMi53b3JkLCBp
IDogaW50KQ0KCSAgICAgPT4gaWYgMHd4MSA9IFdvcmQzMi5hbmRiKHcsIDB3eDEpDQoJCSAgdGhl
biBjYXNlIHcNCgkJCSBvZiAwd3gwMDAwMDAwMSA9PiBTT01FIChpLCBmYWxzZSkNCgkJCSAgfCAw
d3hGRkZGRkZGRiA9PiBTT01FIChpLCB0cnVlKQ0KCQkJICB8IF8gPT4gTk9ORQ0KCQkgIGVsc2Ug
bG9nMicgKFdvcmQzMi5+Pj4odywgMHd4MSksIGkgKyAxKQ0KCWZ1biBsb2cyIHcgPSBsb2cyJyAo
dywgMCA6IGludCkNCg0KCXZhbCBpc0ltbWVkaWF0ZVBvdzINCgkgID0gZm4gSW1tZWRpYXRlLkNv
bnN0IChJbW1lZGlhdGUuQ2hhciBjKSANCgkgICAgID0+IGlzU29tZSAobG9nMiAoV29yZC5mcm9t
Q2hhciBjKSkNCgkgICAgIHwgSW1tZWRpYXRlLkNvbnN0IChJbW1lZGlhdGUuSW50IGkpIA0KCSAg
ICAgPT4gaXNTb21lIChsb2cyIChXb3JkLmZyb21JbnQgaSkpDQoJICAgICB8IEltbWVkaWF0ZS5D
b25zdCAoSW1tZWRpYXRlLldvcmQgdykgDQoJICAgICA9PiBpc1NvbWUgKGxvZzIgdykNCgkgICAg
IHwgXyA9PiBmYWxzZQ0KDQoJdmFsIGdldEltbWVkaWF0ZUxvZzINCgkgID0gZm4gSW1tZWRpYXRl
LkNvbnN0IChJbW1lZGlhdGUuQ2hhciBjKSANCgkgICAgID0+IGxvZzIgKFdvcmQuZnJvbUNoYXIg
YykNCgkgICAgIHwgSW1tZWRpYXRlLkNvbnN0IChJbW1lZGlhdGUuSW50IGkpIA0KCSAgICAgPT4g
bG9nMiAoV29yZC5mcm9tSW50IGkpDQoJICAgICB8IEltbWVkaWF0ZS5Db25zdCAoSW1tZWRpYXRl
LldvcmQgdykNCgkgICAgID0+IGxvZzIgdw0KCSAgICAgfCBfID0+IE5PTkUNCg0KCXZhbCBpc0lu
c3RydWN0aW9uTVVMb3JESVZfc3JjSW1tZWRpYXRlUG93MiA6IHN0YXRlbWVudF90eXBlIC0+IGJv
b2wNCgk9IGZuIEFzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5wTUQgDQoJCQkJICAg
e29wZXIsDQoJCQkJICAgIHNyYyA9IE9wZXJhbmQuSW1tZWRpYXRlIGltbWVkaWF0ZSwNCgkJCQkg
ICAgLi4ufSkNCgkgICA9PiAoY2FzZSBvcGVyDQoJCSBvZiBJbnN0cnVjdGlvbi5JTVVMID0+IHRy
dWUNCgkJICB8IEluc3RydWN0aW9uLk1VTCA9PiB0cnVlDQoJCSAgfCBJbnN0cnVjdGlvbi5JRElW
ID0+IHRydWUNCgkJICB8IEluc3RydWN0aW9uLkRJViA9PiB0cnVlDQoJCSAgfCBfID0+IGZhbHNl
KQ0KCSAgICAgIGFuZGFsc28NCgkgICAgICBpc0ltbWVkaWF0ZVBvdzIgaW1tZWRpYXRlDQoJICAg
fCBfID0+IGZhbHNlDQoNCgl2YWwgdGVtcGxhdGUgOiB0ZW1wbGF0ZSANCgkgID0ge3N0YXJ0ID0g
RW1wdHlPck5vbkVtcHR5LA0KCSAgICAgc3RhdGVtZW50cyANCgkgICAgID0gW09uZSBpc0luc3Ry
dWN0aW9uTVVMb3JESVZfc3JjSW1tZWRpYXRlUG93Ml0sDQoJICAgICBmaW5pc2ggPSBFbXB0eU9y
Tm9uRW1wdHksDQoJICAgICB0cmFuc2ZlciA9IGZuIF8gPT4gdHJ1ZX0NCg0KCXZhbCByZXdyaXRl
ciA6IHJld3JpdGVyDQoJICA9IGZuIHtsYWJlbCwNCgkJcHJvZmlsZUluZm8sDQoJCXN0YXJ0LCAN
CgkJc3RhdGVtZW50cyBhcw0KCQlbW0Fzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5w
TUQgDQoJCQkJCXtvcGVyID0gSW5zdHJ1Y3Rpb24uSU1VTCwgDQoJCQkJCSBzcmMgPSBPcGVyYW5k
LkltbWVkaWF0ZSBpbW1lZGlhdGUsIA0KCQkJCQkgZHN0LCANCgkJCQkJIHNpemV9KV1dLA0KCQlm
aW5pc2ggYXMgW10sIA0KCQl0cmFuc2ZlciBhcyBUcmFuc2Zlci5JZmYge2NvbmRpdGlvbiA9IElu
c3RydWN0aW9uLk8sDQoJCQkJCSAgdHJ1ZWUsDQoJCQkJCSAgZmFsc2VlfX0NCgkgICAgID0+IE5P
TkUNCgkgICAgIHwge2xhYmVsLA0KCQlwcm9maWxlSW5mbywNCgkJc3RhcnQsIA0KCQlzdGF0ZW1l
bnRzIGFzDQoJCVtbQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9uLnBNRCANCgkJCQkJ
e29wZXIgPSBJbnN0cnVjdGlvbi5JTVVMLCANCgkJCQkJIHNyYyA9IE9wZXJhbmQuSW1tZWRpYXRl
IGltbWVkaWF0ZSwgDQoJCQkJCSBkc3QsIA0KCQkJCQkgc2l6ZX0pXV0sDQoJCWZpbmlzaCBhcyBb
XSwgDQoJCXRyYW5zZmVyIGFzIFRyYW5zZmVyLklmZiB7Y29uZGl0aW9uID0gSW5zdHJ1Y3Rpb24u
Tk8sDQoJCQkJCSAgdHJ1ZWUsDQoJCQkJCSAgZmFsc2VlfX0NCgkgICAgID0+IE5PTkUNCgkgICAg
IHwge2xhYmVsLA0KCQlwcm9maWxlSW5mbywNCgkJc3RhcnQsIA0KCQlzdGF0ZW1lbnRzIGFzDQoJ
CVtbQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9uLnBNRCANCgkJCQkJe29wZXIgPSBJ
bnN0cnVjdGlvbi5JTVVMLCANCgkJCQkJIHNyYyA9IE9wZXJhbmQuSW1tZWRpYXRlIGltbWVkaWF0
ZSwgDQoJCQkJCSBkc3QsIA0KCQkJCQkgc2l6ZX0pXV0sDQoJCWZpbmlzaCwgDQoJCXRyYW5zZmVy
fQ0KCSAgICAgPT4gKGNhc2UgZ2V0SW1tZWRpYXRlTG9nMiBpbW1lZGlhdGUNCgkJICAgb2YgTk9O
RSA9PiBFcnJvci5idWcgIlBlZXBob2xlOiBlbGltTURQb3cyIg0KCQkgICAgfCBTT01FICgwLGZh
bHNlKSANCgkJICAgID0+IFNPTUUgKEJsb2NrLlQNCgkJCSAgICAge2xhYmVsID0gbGFiZWwsDQoJ
CQkgICAgICBwcm9maWxlSW5mbyA9IHByb2ZpbGVJbmZvLA0KCQkJICAgICAgc3RhdGVtZW50cyA9
IExpc3QuZm9sZChzdGFydCwNCgkJCQkJCSAgICAgZmluaXNoLA0KCQkJCQkJICAgICBvcCA6Oiks
DQoJCQkgICAgICB0cmFuc2ZlciA9IHRyYW5zZmVyfSkNCgkJICAgIHwgU09NRSAoMCx0cnVlKQ0K
CQkgICAgPT4gbGV0DQoJCQkgdmFsIHN0YXRlbWVudHMNCgkJCSAgID0gKEFzc2VtYmx5Lmluc3Ry
dWN0aW9uX3VuYWwNCgkJCSAgICAgIHtvcGVyID0gSW5zdHJ1Y3Rpb24uTkVHLA0KCQkJICAgICAg
IGRzdCA9IGRzdCwNCgkJCSAgICAgICBzaXplID0gc2l6ZX0pOjoNCgkJCSAgICAgZmluaXNoDQoN
CgkJCSB2YWwgc3RhdGVtZW50cw0KCQkJICAgPSBMaXN0LmZvbGQoc3RhcnQsIA0KCQkJCSAgICAg
ICBzdGF0ZW1lbnRzLA0KCQkJCSAgICAgICBvcCA6OikNCgkJICAgICAgIGluDQoJCQkgU09NRSAo
QmxvY2suVA0KCQkJICAgICAgIHtsYWJlbCA9IGxhYmVsLA0KCQkJCXByb2ZpbGVJbmZvID0gcHJv
ZmlsZUluZm8sDQoJCQkJc3RhdGVtZW50cyA9IHN0YXRlbWVudHMsDQoJCQkJdHJhbnNmZXIgPSB0
cmFuc2Zlcn0pDQoJCSAgICAgICBlbmQNCgkJICAgIHwgU09NRSAoaSxiKQ0KCQkgICAgPT4gaWYg
aSA8ICg4ICogU2l6ZS50b0J5dGVzIHNpemUpDQoJCQkgdGhlbiBsZXQNCgkJCQl2YWwgc3RhdGVt
ZW50cw0KCQkJCSAgPSAoZm4gbA0KCQkJCSAgICAgID0+IChBc3NlbWJseS5pbnN0cnVjdGlvbl9z
cmFsDQoJCQkJCSAge29wZXIgPSBJbnN0cnVjdGlvbi5TQUwsDQoJCQkJCSAgIGNvdW50ID0gT3Bl
cmFuZC5pbW1lZGlhdGVfY29uc3RfaW50IGksDQoJCQkJCSAgIGRzdCA9IGRzdCwNCgkJCQkJICAg
c2l6ZSA9IHNpemV9KTo6DQoJCQkJICAgICAgICAgKGlmIGINCgkJCQkJICAgIHRoZW4gKEFzc2Vt
Ymx5Lmluc3RydWN0aW9uX3VuYWwNCgkJCQkJCSAge29wZXIgPSBJbnN0cnVjdGlvbi5ORUcsDQoJ
CQkJCQkgICBkc3QgPSBkc3QsDQoJCQkJCQkgICBzaXplID0gc2l6ZX0pOjoNCgkJCQkJICAgICAg
ICAgbA0KCQkJCQkgICAgZWxzZSBsKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpbmlzaA0KDQoJCQkJdmFsIHN0YXRlbWVudHMNCgkJCQkgID0gTGlzdC5mb2xkKHN0YXJ0
LCANCgkJCQkJICAgICAgc3RhdGVtZW50cywNCgkJCQkJICAgICAgb3AgOjopDQoJCQkgICAgICBp
bg0KCQkJCVNPTUUgKEJsb2NrLlQNCgkJCQkgICAgICB7bGFiZWwgPSBsYWJlbCwNCgkJCQkgICAg
ICAgcHJvZmlsZUluZm8gPSBwcm9maWxlSW5mbywNCgkJCQkgICAgICAgc3RhdGVtZW50cyA9IHN0
YXRlbWVudHMsDQoJCQkJICAgICAgIHRyYW5zZmVyID0gdHJhbnNmZXJ9KQ0KCQkJICAgICAgZW5k
DQoJCQkgZWxzZSBOT05FKQ0KCSAgICAgfCB7bGFiZWwsDQoJCXByb2ZpbGVJbmZvLA0KCQlzdGFy
dCwgDQoJCXN0YXRlbWVudHMgYXMNCgkJW1tBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rp
b24ucE1EIA0KCQkJCQkge29wZXIgPSBJbnN0cnVjdGlvbi5NVUwsIA0KCQkJCQkgIHNyYyA9IE9w
ZXJhbmQuSW1tZWRpYXRlIGltbWVkaWF0ZSwgDQoJCQkJCSAgZHN0LCANCgkJCQkJICBzaXplfSld
XSwNCgkJZmluaXNoLCANCgkJdHJhbnNmZXJ9DQoJICAgICA9PiAoY2FzZSBnZXRJbW1lZGlhdGVM
b2cyIGltbWVkaWF0ZQ0KCQkgICBvZiBOT05FID0+IEVycm9yLmJ1ZyAiUGVlcGhvbGU6IGVsaW1N
RFBvdzIiDQoJCSAgICB8IFNPTUUgKDAsZmFsc2UpIA0KCQkgICAgPT4gU09NRSAoQmxvY2suVA0K
CQkJICAgICB7bGFiZWwgPSBsYWJlbCwNCgkJCSAgICAgIHByb2ZpbGVJbmZvID0gcHJvZmlsZUlu
Zm8sDQoJCQkgICAgICBzdGF0ZW1lbnRzID0gTGlzdC5mb2xkKHN0YXJ0LA0KCQkJCQkJICAgICBm
aW5pc2gsDQoJCQkJCQkgICAgIG9wIDo6KSwNCgkJCSAgICAgIHRyYW5zZmVyID0gdHJhbnNmZXJ9
KQ0KCQkgICAgfCBTT01FIChpLGZhbHNlKQ0KCQkgICAgPT4gaWYgaSA8ICg4ICogU2l6ZS50b0J5
dGVzIHNpemUpDQoJCQkgdGhlbiBsZXQNCgkJCQl2YWwgc3RhdGVtZW50cw0KCQkJCSAgPSAoQXNz
ZW1ibHkuaW5zdHJ1Y3Rpb25fc3JhbA0KCQkJCSAgICAge29wZXIgPSBJbnN0cnVjdGlvbi5TQUws
DQoJCQkJICAgICAgY291bnQgPSBPcGVyYW5kLmltbWVkaWF0ZV9jb25zdF9pbnQgaSwNCgkJCQkg
ICAgICBkc3QgPSBkc3QsDQoJCQkJICAgICAgc2l6ZSA9IHNpemV9KTo6DQoJCQkJICAgIGZpbmlz
aA0KDQoJCQkJdmFsIHN0YXRlbWVudHMNCgkJCQkgID0gTGlzdC5mb2xkKHN0YXJ0LCANCgkJCQkJ
ICAgICAgc3RhdGVtZW50cywNCgkJCQkJICAgICAgb3AgOjopDQoJCQkgICAgICBpbiANCgkJCQlT
T01FIChCbG9jay5UDQoJCQkJICAgICAge2xhYmVsID0gbGFiZWwsDQoJCQkJICAgICAgIHByb2Zp
bGVJbmZvID0gcHJvZmlsZUluZm8sDQoJCQkJICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRz
LA0KCQkJCSAgICAgICB0cmFuc2ZlciA9IHRyYW5zZmVyfSkNCgkJCSAgICAgIGVuZA0KCQkJIGVs
c2UgTk9ORQ0KCQkgICAgfCBTT01FIChpLHRydWUpDQoJCSAgICA9PiBOT05FKQ0KCSAgICAgfCB7
bGFiZWwsDQoJCXByb2ZpbGVJbmZvLA0KCQlzdGFydCwgDQoJCXN0YXRlbWVudHMgYXMNCgkJW1tB
c3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24ucE1EDQoJCQkJCXtvcGVyID0gSW5zdHJ1
Y3Rpb24uSURJViwNCgkJCQkJIHNyYyA9IE9wZXJhbmQuSW1tZWRpYXRlIGltbWVkaWF0ZSwgDQoJ
CQkJCSBkc3QsIA0KCQkJCQkgc2l6ZX0pXV0sDQoJCWZpbmlzaCwgDQoJCXRyYW5zZmVyfQ0KCSAg
ICAgPT4gKGNhc2UgZ2V0SW1tZWRpYXRlTG9nMiBpbW1lZGlhdGUNCgkJICAgb2YgTk9ORSA9PiBF
cnJvci5idWcgIlBlZXBob2xlOiBlbGltTURQb3cyIg0KCQkgICAgfCBTT01FICgwLGZhbHNlKSAN
CgkJICAgID0+IFNPTUUgKEJsb2NrLlQNCgkJCSAgICAge2xhYmVsID0gbGFiZWwsDQoJCQkgICAg
ICBwcm9maWxlSW5mbyA9IHByb2ZpbGVJbmZvLA0KCQkJICAgICAgc3RhdGVtZW50cyA9IExpc3Qu
Zm9sZChzdGFydCwNCgkJCQkJCSAgICAgZmluaXNoLA0KCQkJCQkJICAgICBvcCA6OiksDQoJCQkg
ICAgICB0cmFuc2ZlciA9IHRyYW5zZmVyfSkNCgkJICAgIHwgU09NRSAoMCx0cnVlKQ0KCQkgICAg
PT4gbGV0DQoJCQkgdmFsIHN0YXRlbWVudHMNCgkJCSAgID0gKEFzc2VtYmx5Lmluc3RydWN0aW9u
X3VuYWwNCgkJCSAgICAgIHtvcGVyID0gSW5zdHJ1Y3Rpb24uTkVHLA0KCQkJICAgICAgIGRzdCA9
IGRzdCwNCgkJCSAgICAgICBzaXplID0gc2l6ZX0pOjoNCgkJCSAgICAgZmluaXNoDQoNCgkJCSB2
YWwgc3RhdGVtZW50cw0KCQkJICAgPSBMaXN0LmZvbGQoc3RhcnQsIA0KCQkJCSAgICAgICBzdGF0
ZW1lbnRzLA0KCQkJCSAgICAgICBvcCA6OikNCgkJICAgICAgIGluDQoJCQkgU09NRSAoQmxvY2su
VA0KCQkJICAgICAgIHtsYWJlbCA9IGxhYmVsLA0KCQkJCXByb2ZpbGVJbmZvID0gcHJvZmlsZUlu
Zm8sDQoJCQkJc3RhdGVtZW50cyA9IHN0YXRlbWVudHMsDQoJCQkJdHJhbnNmZXIgPSB0cmFuc2Zl
cn0pDQoJCSAgICAgICBlbmQNCgkJICAgIHwgU09NRSAoaSxiKQ0KCQkgICAgPT4gaWYgaSA8ICg4
ICogU2l6ZS50b0J5dGVzIHNpemUpDQoJCQkgdGhlbiBsZXQNCgkJCQl2YWwgdGVtcA0KCQkJCSAg
PSAoT3BlcmFuZC5tZW1sb2MgbyBNZW1Mb2MuaW1tKQ0KCQkJCSAgICB7YmFzZSA9IEltbWVkaWF0
ZS5jb25zdF9pbnQgMCwNCgkJCQkgICAgIGluZGV4ID0gSW1tZWRpYXRlLmNvbnN0X2ludCAwLA0K
CQkJCSAgICAgc2NhbGUgPSBTY2FsZS5Gb3VyLA0KCQkJCSAgICAgc2l6ZSA9IFNpemUuTE9ORywN
CgkJCQkgICAgIGNvbW1pdCA9IE1lbUxvYy5Db21taXQuY29tbWl0DQoJCQkJICAgICAgICAgICAg
ICB7aXNUZW1wID0gdHJ1ZSwNCgkJCQkJICAgICAgIG9uRmx1c2ggPSBmYWxzZX0sDQoJCQkJICAg
ICBjbGFzcyA9IE1lbUxvYy5DbGFzcy5uZXcgIlRlbXAifQ0KDQoJCQkJdmFsIHdpZHRoID0gOCAq
IFNpemUudG9CeXRlcyBzaXplDQoNCgkJCQl2YWwgc3RhdGVtZW50cw0KCQkJCSAgPSAoKGZuIGwN
CgkJCQkgICAgICAgPT4gKEFzc2VtYmx5Lmluc3RydWN0aW9uX21vdg0KCQkJCQkgICB7c3JjID0g
ZHN0LA0KCQkJCQkgICAgZHN0ID0gdGVtcCwNCgkJCQkJICAgIHNpemUgPSBzaXplfSk6Og0KCQkJ
CSAgICAgICAgICBsKSBvDQoJCQkJICAgICAoZm4gbA0KCQkJCSAgICAgICA9PiBpZiBpID4gMA0K
CQkJCQkgICAgdGhlbiAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fc3JhbA0KCQkJCQkJICB7b3BlciA9
IEluc3RydWN0aW9uLlNBUiwNCgkJCQkJCSAgIGRzdCA9IHRlbXAsDQoJCQkJCQkgICBjb3VudCAN
CgkJCQkJCSAgID0gT3BlcmFuZC5pbW1lZGlhdGVfY29uc3RfaW50IChpIC0gMSksDQoJCQkJCQkg
ICBzaXplID0gc2l6ZX0pOjoNCgkJCQkJICAgICAgICAgbA0KCQkJCQkgICAgZWxzZSBsKSBvDQoJ
CQkJICAgICAoZm4gbA0KCQkJCSAgICAgICA9PiBpZiBpIDwgd2lkdGgNCgkJCQkJICAgIHRoZW4g
KEFzc2VtYmx5Lmluc3RydWN0aW9uX3NyYWwNCgkJCQkJCSAge29wZXIgPSBJbnN0cnVjdGlvbi5T
SFIsDQoJCQkJCQkgICBkc3QgPSB0ZW1wLA0KCQkJCQkJICAgY291bnQgDQoJCQkJCQkgICA9IE9w
ZXJhbmQuaW1tZWRpYXRlX2NvbnN0X2ludCAod2lkdGggLSBpKSwNCgkJCQkJCSAgIHNpemUgPSBz
aXplfSk6Og0KCQkJCQkgICAgICAgICBsDQoJCQkJCSAgICBlbHNlIGwpIG8NCgkJCQkgICAgIChm
biBsDQoJCQkJICAgICAgID0+IChBc3NlbWJseS5pbnN0cnVjdGlvbl9iaW5hbA0KCQkJCQkgICB7
b3BlciA9IEluc3RydWN0aW9uLkFERCwNCgkJCQkJICAgIHNyYyA9IHRlbXAsDQoJCQkJCSAgICBk
c3QgPSBkc3QsDQoJCQkJCSAgICBzaXplID0gc2l6ZX0pOjoNCgkJCQkJICAoQXNzZW1ibHkuaW5z
dHJ1Y3Rpb25fc3JhbA0KCQkJCQkgICB7b3BlciA9IEluc3RydWN0aW9uLlNBUiwNCgkJCQkJICAg
IGNvdW50ID0gT3BlcmFuZC5pbW1lZGlhdGVfY29uc3RfaW50IGksDQoJCQkJCSAgICBkc3QgPSBk
c3QsDQoJCQkJCSAgICBzaXplID0gc2l6ZX0pOjoNCgkJCQkJICBsKSBvDQoJCQkJICAgICAoZm4g
bA0KCQkJCSAgICAgICA9PiBpZiBiDQoJCQkJCSAgICB0aGVuIChBc3NlbWJseS5pbnN0cnVjdGlv
bl91bmFsDQoJCQkJCQkgIHtvcGVyID0gSW5zdHJ1Y3Rpb24uTkVHLA0KCQkJCQkJICAgZHN0ID0g
ZHN0LA0KCQkJCQkJICAgc2l6ZSA9IHNpemV9KTo6DQoJCQkJCSAgICAgICAgICBsDQoJCQkJCSAg
ICAgZWxzZSBsKSkNCgkJCQkgICAgZmluaXNoDQoNCgkJCQl2YWwgc3RhdGVtZW50cw0KCQkJCSAg
PSBMaXN0LmZvbGQoc3RhcnQsDQoJCQkJCSAgICAgIHN0YXRlbWVudHMsDQoJCQkJCSAgICAgIG9w
IDo6KQ0KCQkJICAgICAgaW4gDQoJCQkJU09NRSAoQmxvY2suVA0KCQkJCSAgICAgIHtsYWJlbCA9
IGxhYmVsLA0KCQkJCSAgICAgICBwcm9maWxlSW5mbyA9IHByb2ZpbGVJbmZvLA0KCQkJCSAgICAg
ICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50cywNCgkJCQkgICAgICAgdHJhbnNmZXIgPSB0cmFuc2Zl
cn0pDQoJCQkgICAgICBlbmQNCgkJCSBlbHNlIE5PTkUpDQoJICAgICB8IHtsYWJlbCwNCgkJcHJv
ZmlsZUluZm8sDQoJCXN0YXJ0LCANCgkJc3RhdGVtZW50cyBhcw0KCQlbW0Fzc2VtYmx5Lkluc3Ry
dWN0aW9uIChJbnN0cnVjdGlvbi5wTUQNCgkJCQkJe29wZXIgPSBJbnN0cnVjdGlvbi5ESVYsDQoJ
CQkJCSBzcmMgPSBPcGVyYW5kLkltbWVkaWF0ZSBpbW1lZGlhdGUsIA0KCQkJCQkgZHN0LCANCgkJ
CQkJIHNpemV9KV1dLA0KCQlmaW5pc2gsIA0KCQl0cmFuc2Zlcn0NCgkgICAgID0+IChjYXNlIGdl
dEltbWVkaWF0ZUxvZzIgaW1tZWRpYXRlDQoJCSAgIG9mIE5PTkUgPT4gRXJyb3IuYnVnICJQZWVw
aG9sZTogZWxpbU1EUG93MiINCgkJICAgIHwgU09NRSAoMCxmYWxzZSkgDQoJCSAgICA9PiBTT01F
IChCbG9jay5UDQoJCQkgICAgIHtsYWJlbCA9IGxhYmVsLA0KCQkJICAgICAgcHJvZmlsZUluZm8g
PSBwcm9maWxlSW5mbywNCgkJCSAgICAgIHN0YXRlbWVudHMgPSBMaXN0LmZvbGQoc3RhcnQsDQoJ
CQkJCQkgICAgIGZpbmlzaCwNCgkJCQkJCSAgICAgb3AgOjopLA0KCQkJICAgICAgdHJhbnNmZXIg
PSB0cmFuc2Zlcn0pDQoJCSAgICB8IFNPTUUgKGksZmFsc2UpDQoJCSAgICA9PiBpZiBpIDwgKDgg
KiBTaXplLnRvQnl0ZXMgc2l6ZSkNCgkJCSB0aGVuIGxldA0KCQkJCXZhbCBzdGF0ZW1lbnRzDQoJ
CQkJICA9IChBc3NlbWJseS5pbnN0cnVjdGlvbl9zcmFsDQoJCQkJICAgICB7b3BlciA9IEluc3Ry
dWN0aW9uLlNIUiwNCgkJCQkgICAgICBjb3VudCA9IE9wZXJhbmQuaW1tZWRpYXRlX2NvbnN0X2lu
dCBpLA0KCQkJCSAgICAgIGRzdCA9IGRzdCwNCgkJCQkgICAgICBzaXplID0gc2l6ZX0pOjoNCgkJ
CQkgICAgZmluaXNoDQoNCgkJCQl2YWwgc3RhdGVtZW50cw0KCQkJCSAgPSBMaXN0LmZvbGQoc3Rh
cnQsDQoJCQkJCSAgICAgIHN0YXRlbWVudHMsDQoJCQkJCSAgICAgIG9wIDo6KQ0KCQkJICAgICAg
aW4gDQoJCQkJU09NRSAoQmxvY2suVA0KCQkJCSAgICAgIHtsYWJlbCA9IGxhYmVsLA0KCQkJCSAg
ICAgICBwcm9maWxlSW5mbyA9IHByb2ZpbGVJbmZvLA0KCQkJCSAgICAgICBzdGF0ZW1lbnRzID0g
c3RhdGVtZW50cywNCgkJCQkgICAgICAgdHJhbnNmZXIgPSB0cmFuc2Zlcn0pDQoJCQkgICAgICBl
bmQNCgkJCSBlbHNlIE5PTkUNCgkgICAgICAgICAgICB8IFNPTUUgKGksdHJ1ZSkgPT4gTk9ORSkN
CiAJICAgICB8IF8gPT4gRXJyb3IuYnVnICJQZWVwaG9sZTogZWxpbU1EUG93MiINCg0KCXZhbCAo
Y2FsbGJhY2ssZWxpbU1EUG93Ml9tc2cpIA0KCSAgPSBtYWtlX2NhbGxiYWNrX21zZyAiZWxpbU1E
UG93MiINCiAgICAgIGluDQoJdmFsIGVsaW1NRFBvdzIgOiBvcHRpbWl6YXRpb24NCgkgID0ge3Rl
bXBsYXRlID0gdGVtcGxhdGUsDQoJICAgICByZXdyaXRlciA9IHJld3JpdGVyLA0KCSAgICAgY2Fs
bGJhY2sgPSBjYWxsYmFja30NCgl2YWwgZWxpbU1EUG93Ml9tc2cgPSBlbGltTURQb3cyX21zZw0K
ICAgICAgZW5kICANCg0KICAgICAgbG9jYWwNCgl2YWwgaXNJbnN0cnVjdGlvbkNNUG9yVEVTVA0K
CSAgPSBmbiBBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24uQ01QIF8pDQoJICAgICA9
PiB0cnVlDQoJICAgICB8IEFzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5URVNUIF8p
DQoJICAgICA9PiB0cnVlDQoJICAgICB8IF8gPT4gZmFsc2UNCg0KCXZhbCBpc1RyYW5zZmVyX0lm
Zg0KCSAgPSBmbiBUcmFuc2Zlci5JZmYge3RydWVlLCBmYWxzZWUsIC4uLn0NCgkgICAgID0+IHRy
dWUNCgkgICAgIHwgXyA9PiBmYWxzZQ0KDQoJdmFsIHRlbXBsYXRlIA0KCSAgPSB7c3RhcnQgPSBF
bXB0eU9yTm9uRW1wdHksDQoJICAgICBzdGF0ZW1lbnRzID0gW09uZSBpc0luc3RydWN0aW9uQ01Q
b3JURVNULA0KCQkJICAgQWxsIGlzQ29tbWVudF0sDQoJICAgICBmaW5pc2ggPSBFbXB0eSwNCgkg
ICAgIHRyYW5zZmVyID0gbm90IG8gaXNUcmFuc2Zlcl9JZmZ9DQoNCgl2YWwgcmV3cml0ZXIgDQoJ
ICA9IGZuIHtsYWJlbCwNCgkJcHJvZmlsZUluZm8sDQoJCXN0YXJ0LCANCgkJc3RhdGVtZW50cyBh
cw0KCQlbW0Fzc2VtYmx5Lkluc3RydWN0aW9uIGluc3RydWN0aW9uXSwNCgkJIGNvbW1lbnRzXSwN
CgkJZmluaXNoIGFzIFtdLA0KCQl0cmFuc2Zlcn0NCgkgICAgID0+IGxldA0KCQkgIHZhbCBzdGF0
ZW1lbnRzIA0KCQkgICAgPSBMaXN0LmZvbGQoc3RhcnQsIA0KCQkJCWNvbW1lbnRzLA0KCQkJCW9w
IDo6KQ0KCQlpbiANCgkJICBTT01FIChCbG9jay5UIHtsYWJlbCA9IGxhYmVsLA0KCQkJCSBwcm9m
aWxlSW5mbyA9IHByb2ZpbGVJbmZvLA0KCQkJCSBzdGF0ZW1lbnRzID0gc3RhdGVtZW50cywNCgkJ
CQkgdHJhbnNmZXIgPSB0cmFuc2Zlcn0pDQoJCWVuZA0KCSAgICAgfCBfID0+IEVycm9yLmJ1ZyAi
ZWxpbUNNUFRTVCINCg0KCXZhbCAoY2FsbGJhY2ssZWxpbUNNUFRTVF9tc2cpIA0KCSAgPSBtYWtl
X2NhbGxiYWNrX21zZyAiZWxpbUNNUFRTVCINCiAgICAgIGluDQoJdmFsIGVsaW1DTVBUU1QgOiBv
cHRpbWl6YXRpb24NCgkgID0ge3RlbXBsYXRlID0gdGVtcGxhdGUsDQoJICAgICByZXdyaXRlciA9
IHJld3JpdGVyLA0KCSAgICAgY2FsbGJhY2sgPSBjYWxsYmFja30NCgl2YWwgZWxpbUNNUFRTVF9t
c2cgPSBlbGltQ01QVFNUX21zZw0KICAgICAgZW5kDQoNCiAgICAgIGxvY2FsDQoJdmFsIG9wdGlt
aXphdGlvbnNfcHJlDQoJICA9IFtjb21tdXRlQmluQUxNRCwNCigqDQogCSAgICAgZWxpbUJpbkFM
MEwsDQoJICAgICBlbGltQmluQUwwUiwNCiopDQoJICAgICBlbGltQWRkU3ViMSwNCgkgICAgIGVs
aW1NRFBvdzJdDQoJdmFsIG9wdGltaXphdGlvbnNfcHJlX21zZw0KCSAgPSBbY29tbXV0ZUJpbkFM
TURfbXNnLA0KKCoNCgkgICAgIGVsaW1CaW5BTDBMX21zZywNCgkgICAgIGVsaW1CaW5BTDBSX21z
ZywNCiopDQoJICAgICBlbGltQWRkU3ViMV9tc2csDQoJICAgICBlbGltTURQb3cyX21zZ10NCg0K
CXZhbCBvcHRpbWl6YXRpb25zX3Bvc3QNCgkgID0gW2VsaW1CaW5BTE1ERG91YmxlLA0KCSAgICAg
ZWxpbUZsdEJpbkFEb3VibGUsDQoJICAgICBlbGltQ01QVFNUXQ0KCXZhbCBvcHRpbWl6YXRpb25z
X3Bvc3RfbXNnDQoJICA9IFtlbGltQmluQUxNRERvdWJsZV9tc2csDQoJICAgICBlbGltRmx0Qmlu
QURvdWJsZV9tc2csDQoJICAgICBlbGltQ01QVFNUX21zZ10NCiAgICAgIGluDQoJdmFsIChwZWVw
aG9sZUJsb2NrX3ByZSwgcGVlcGhvbGVCbG9ja19wcmVfbXNnKQ0KCSAgPSB0cmFjZXINCgkgICAg
InBlZXBob2xlQmxvY2tfcHJlIg0KCSAgICAoZm4gYmxvY2sgPT4gcGVlcGhvbGVCbG9jayB7b3B0
aW1pemF0aW9ucyA9IG9wdGltaXphdGlvbnNfcHJlLA0KCQkJCQlibG9jayA9IGJsb2NrfSkNCgl2
YWwgcGVlcGhvbGVCbG9ja19wcmVfbXNnDQoJICA9IGZuICgpID0+IChwZWVwaG9sZUJsb2NrX3By
ZV9tc2cgKCk7DQoJCSAgICAgIENvbnRyb2wuaW5kZW50ICgpOw0KCQkgICAgICBMaXN0LmZvcmVh
Y2gob3B0aW1pemF0aW9uc19wcmVfbXNnLCBmbiBtc2cgPT4gbXNnICgpKTsNCgkJICAgICAgQ29u
dHJvbC51bmluZGVudCAoKSkNCg0KCXZhbCAocGVlcGhvbGVCbG9ja19wb3N0LCBwZWVwaG9sZUJs
b2NrX3Bvc3RfbXNnKQ0KCSAgPSB0cmFjZXINCgkgICAgInBlZXBob2xlQmxvY2tfcG9zdCINCgkg
ICAgKGZuIGJsb2NrID0+IHBlZXBob2xlQmxvY2sge29wdGltaXphdGlvbnMgPSBvcHRpbWl6YXRp
b25zX3Bvc3QsDQoJCQkJCWJsb2NrID0gYmxvY2t9KQ0KDQoJdmFsIHBlZXBob2xlQmxvY2tfcG9z
dF9tc2cNCgkgID0gZm4gKCkgPT4gKHBlZXBob2xlQmxvY2tfcG9zdF9tc2cgKCk7DQoJCSAgICAg
IENvbnRyb2wuaW5kZW50ICgpOw0KCQkgICAgICBMaXN0LmZvcmVhY2gob3B0aW1pemF0aW9uc19w
b3N0X21zZywgZm4gbXNnID0+IG1zZyAoKSk7DQoJCSAgICAgIENvbnRyb2wudW5pbmRlbnQgKCkp
DQogICAgICBlbmQNCg0KICAgICAgb3BlbiBKdW1wSW5mbw0KDQogICAgICB2YWwgKGNhbGxiYWNr
X2VsaW1JZmYsZWxpbUlmZl9tc2cpDQoJPSBtYWtlX2NhbGxiYWNrX21zZyAiZWxpbUlmZiINCiAg
ICAgIGZ1biBtYWtlRWxpbUlmZiB7anVtcEluZm8gOiB7Z2V0OiBMYWJlbC50IC0+IHN0YXR1cyBy
ZWZ9fSA6DQoJICAgICAgICAgICAgICBvcHRpbWl6YXRpb24NCgk9IGxldA0KCSAgICB2YWwgaXND
b21tZW50DQoJICAgICAgPSBmbiBBc3NlbWJseS5Db21tZW50IF8gPT4gdHJ1ZQ0KCSAgICAgICAg
IHwgXyA9PiBmYWxzZQ0KDQoJICAgIHZhbCBpc0luc3RydWN0aW9uQ01Qb3JURVNUDQoJICAgICAg
PSBmbiBBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24uQ01QIF8pDQoJICAgICAgICAg
PT4gdHJ1ZQ0KCSAgICAgICAgIHwgQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9uLlRF
U1QgXykNCgkgICAgICAgICA9PiB0cnVlDQoJICAgICAgICAgfCBfID0+IGZhbHNlDQoNCgkgICAg
dmFsIGlzVHJhbnNmZXJJZmZfZXFUYXJnZXRzDQoJICAgICAgPSBmbiBUcmFuc2Zlci5JZmYge3Ry
dWVlLCBmYWxzZWUsIC4uLn0NCgkgICAgICAgICA9PiBMYWJlbC5lcXVhbHModHJ1ZWUsIGZhbHNl
ZSkNCgkgICAgICAgICB8IF8gPT4gZmFsc2UNCg0KCSAgICB2YWwgdGVtcGxhdGUgDQoJICAgICAg
PSB7c3RhcnQgPSBFbXB0eU9yTm9uRW1wdHksDQoJCSBzdGF0ZW1lbnRzID0gW09uZSBpc0luc3Ry
dWN0aW9uQ01Qb3JURVNULA0KCQkJICAgICAgIEFsbCBpc0NvbW1lbnRdLA0KCQkgZmluaXNoID0g
RW1wdHksDQoJCSB0cmFuc2ZlciA9IGlzVHJhbnNmZXJJZmZfZXFUYXJnZXRzfQ0KDQoJICAgIHZh
bCByZXdyaXRlciANCgkgICAgICA9IGZuIHtsYWJlbCwNCgkJICAgIHByb2ZpbGVJbmZvLA0KCQkg
ICAgc3RhcnQsIA0KCQkgICAgc3RhdGVtZW50cyBhcw0KCQkgICAgW3N0YXRlbWVudCwNCgkJICAg
ICBjb21tZW50c10sDQoJCSAgICBmaW5pc2ggYXMgW10sDQoJCSAgICB0cmFuc2ZlciBhcyBUcmFu
c2Zlci5JZmYge2NvbmRpdGlvbiwgdHJ1ZWUsIGZhbHNlZX19DQoJICAgICAgICAgPT4gbGV0DQoJ
CSAgICAgIHZhbCBfID0gZGVjIHtsYWJlbCA9IGZhbHNlZSwNCgkJCQkgICBqdW1wSW5mbyA9IGp1
bXBJbmZvfQ0KCQkJDQoJCSAgICAgIHZhbCBzdGF0ZW1lbnRzIA0KCQkJPSBMaXN0LmZvbGQoc3Rh
cnQsIA0KCQkJCSAgICBjb21tZW50cywgDQoJCQkJICAgIG9wIDo6KQ0KCQkJDQoJCSAgICAgIHZh
bCB0cmFuc2ZlciA9IFRyYW5zZmVyLmdvdG8ge3RhcmdldCA9IHRydWVlfQ0KCQkgICAgaW4gDQoJ
CSAgICAgIFNPTUUgKEJsb2NrLlQge2xhYmVsID0gbGFiZWwsDQoJCQkJICAgICBwcm9maWxlSW5m
byA9IHByb2ZpbGVJbmZvLA0KCQkJCSAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHMsDQoJCQkJ
ICAgICB0cmFuc2ZlciA9IHRyYW5zZmVyfSkNCgkJICAgIGVuZA0KCSAgICAgICAgIHwgXyA9PiBF
cnJvci5idWcgImVsaW1JZmYiDQoJICBpbg0KCSAgICB7dGVtcGxhdGUgPSB0ZW1wbGF0ZSwNCgkg
ICAgIHJld3JpdGVyID0gcmV3cml0ZXIsDQoJICAgICBjYWxsYmFjayA9IGNhbGxiYWNrX2VsaW1J
ZmZ9DQoJICBlbmQNCg0KICAgICAgdmFsIChjYWxsYmFja19lbGltU3dpdGNoLGVsaW1Td2l0Y2hf
bXNnKQ0KCT0gbWFrZV9jYWxsYmFja19tc2cgImVsaW1Td2l0Y2giDQogICAgICBmdW4gbWFrZUVs
aW1Td2l0Y2gge2p1bXBJbmZvIDoge2dldDogTGFiZWwudCAtPiBzdGF0dXMgcmVmfX0gOg0KCSAg
ICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uDQoJPSBsZXQNCgkgICAgdmFsIGlzQ29tbWVudA0K
CSAgICAgID0gZm4gQXNzZW1ibHkuQ29tbWVudCBfID0+IHRydWUNCgkgICAgICAgICB8IF8gPT4g
ZmFsc2UNCg0KCSAgICB2YWwgaXNUcmFuc2ZlclN3aXRjaF9kZWZhdWx0VGFyZ2V0cw0KCSAgICAg
ID0gZm4gVHJhbnNmZXIuU3dpdGNoIHtjYXNlcywgZGVmYXVsdCwgLi4ufQ0KCSAgICAgICAgID0+
IGxldA0KCQkgICAgICB2YWwgbiA9IFRyYW5zZmVyLkNhc2VzLmNvdW50DQoJCQkgICAgICAoY2Fz
ZXMsIA0KCQkJICAgICAgIGZuIHRhcmdldCA9PiBMYWJlbC5lcXVhbHModGFyZ2V0LCBkZWZhdWx0
KSkNCgkJICAgIGluIA0KCQkgICAgICBuID4gMA0KCQkgICAgZW5kDQoJCSB8IF8gPT4gZmFsc2UN
Cg0KCSAgICB2YWwgdGVtcGxhdGUgDQoJICAgICAgPSB7c3RhcnQgPSBFbXB0eSwNCgkJIHN0YXRl
bWVudHMgPSBbQWxsIChmbiBfID0+IHRydWUpXSwNCgkJIGZpbmlzaCA9IEVtcHR5LA0KCQkgdHJh
bnNmZXIgPSBpc1RyYW5zZmVyU3dpdGNoX2RlZmF1bHRUYXJnZXRzfQ0KDQoJICAgIHZhbCByZXdy
aXRlciANCgkgICAgICA9IGZuIHtsYWJlbCwNCgkJICAgIHByb2ZpbGVJbmZvLA0KCQkgICAgc3Rh
cnQgYXMgW10sIA0KCQkgICAgc3RhdGVtZW50cyBhcyBbc3RhdGVtZW50cyddLA0KCQkgICAgZmlu
aXNoIGFzIFtdLA0KCQkgICAgdHJhbnNmZXIgYXMgVHJhbnNmZXIuU3dpdGNoIHt0ZXN0LCBjYXNl
cywgZGVmYXVsdH19DQoJICAgICAgICAgPT4gbGV0DQoJCSAgICAgIHZhbCBzdGF0ZW1lbnRzID0g
c3RhdGVtZW50cycNCgkJICAgICAgdmFsIGNhc2VzDQoJCQk9IFRyYW5zZmVyLkNhc2VzLmtlZXBB
bGwNCgkJCSAgKGNhc2VzLA0KCQkJICAgZm4gdGFyZ2V0ID0+IGlmIExhYmVsLmVxdWFscyh0YXJn
ZXQsIGRlZmF1bHQpDQoJCQkJCSAgdGhlbiAoZGVjIHtsYWJlbCA9IHRhcmdldCwNCgkJCQkJCSAg
ICAganVtcEluZm8gPSBqdW1wSW5mb307DQoJCQkJCQlmYWxzZSkNCgkJCQkJICBlbHNlIHRydWUp
DQoNCgkJICAgICAgdmFsIChzdGF0ZW1lbnRzLCB0cmFuc2ZlcikNCgkJCT0gaWYgVHJhbnNmZXIu
Q2FzZXMuaXNFbXB0eSBjYXNlcw0KCQkJICAgIHRoZW4gKHN0YXRlbWVudHMsDQoJCQkJICBUcmFu
c2Zlci5nb3RvIHt0YXJnZXQgPSBkZWZhdWx0fSkNCgkJCSAgZWxzZSBpZiBUcmFuc2Zlci5DYXNl
cy5pc1NpbmdsZSBjYXNlcw0KCQkJICAgIHRoZW4gbGV0DQoJCQkJICAgdmFsIChrLHRhcmdldCkN
CgkJCQkgICAgID0gVHJhbnNmZXIuQ2FzZXMuZXh0cmFjdCcNCgkJCQkgICAgICAgKGNhc2VzLA0K
CQkJCQlmbiAoayx0YXJnZXQpID0+IChrLHRhcmdldCksDQoJCQkJCWZuIChjLHRhcmdldCkgDQoJ
CQkJCSA9PiAoSW1tZWRpYXRlLmNvbnN0X2NoYXIgYywgdGFyZ2V0KSwNCgkJCQkJZm4gKGksdGFy
Z2V0KQ0KCQkJCQkgPT4gKEltbWVkaWF0ZS5jb25zdF9pbnQgaSwgdGFyZ2V0KSwNCgkJCQkJZm4g
KHcsdGFyZ2V0KQ0KCQkJCQkgPT4gKEltbWVkaWF0ZS5jb25zdF93b3JkIHcsIHRhcmdldCkpDQoJ
CQkJICAgdmFsIHNpemUNCgkJCQkgICAgID0gY2FzZSBPcGVyYW5kLnNpemUgdGVzdA0KCQkJCQkg
b2YgU09NRSBzaXplID0+IHNpemUNCgkJCQkJICB8IE5PTkUgPT4gU2l6ZS5MT05HDQoJCQkJIGlu
IA0KCQkJCSAgIChMaXN0LmNvbmNhdA0KCQkJCSAgICBbc3RhdGVtZW50cywNCgkJCQkgICAgIFtB
c3NlbWJseS5pbnN0cnVjdGlvbl9jbXANCgkJCQkgICAgICB7c3JjMSA9IHRlc3QsDQoJCQkJICAg
ICAgIHNyYzIgPSBPcGVyYW5kLmltbWVkaWF0ZSBrLA0KCQkJCSAgICAgICBzaXplID0gc2l6ZX1d
XSwNCgkJCQkgICAgVHJhbnNmZXIuaWZmIHtjb25kaXRpb24gPSBJbnN0cnVjdGlvbi5FLA0KCQkJ
CQkJICB0cnVlZSA9IHRhcmdldCwNCgkJCQkJCSAgZmFsc2VlID0gZGVmYXVsdH0pDQoJCQkJIGVu
ZAkJCQkgICAgDQoJCQkgIGVsc2UgKHN0YXRlbWVudHMsDQoJCQkJVHJhbnNmZXIuc3dpdGNoIHt0
ZXN0ID0gdGVzdCwNCgkJCQkJCSBjYXNlcyA9IGNhc2VzLA0KCQkJCQkJIGRlZmF1bHQgPSBkZWZh
dWx0fSkNCgkJICAgIGluIA0KCQkgICAgICBTT01FIChCbG9jay5UIHtsYWJlbCA9IGxhYmVsLAkN
CgkJCQkgICAgIHByb2ZpbGVJbmZvID0gcHJvZmlsZUluZm8sDQoJCQkJICAgICBzdGF0ZW1lbnRz
ID0gc3RhdGVtZW50cywNCgkJCQkgICAgIHRyYW5zZmVyID0gdHJhbnNmZXJ9KQ0KCQkgICAgZW5k
DQoJICAgICAgICAgfCBfID0+IEVycm9yLmJ1ZyAiZWxpbVN3aXRjaCINCgkgIGluDQoJICAgIHt0
ZW1wbGF0ZSA9IHRlbXBsYXRlLA0KCSAgICAgcmV3cml0ZXIgPSByZXdyaXRlciwNCgkgICAgIGNh
bGxiYWNrID0gY2FsbGJhY2tfZWxpbVN3aXRjaH0NCgkgIGVuZA0KICAgIGVuZA0KDQogIHN0cnVj
dHVyZSBFbGltR290byA9DQogICAgc3RydWN0DQogICAgICBvcGVuIEp1bXBJbmZvDQoNCiAgICAg
IGZ1biBlbGltU2ltcGxlR290byB7YmxvY2tzIDogQmxvY2sudCBsaXN0LA0KCQkJICBqdW1wSW5m
byA6IHtnZXQ6IExhYmVsLnQgLT4gc3RhdHVzIHJlZn19IA0KCT0gbGV0DQoJICAgIHZhbCBnb3Rv
SW5mbyBhcyB7Z2V0OiBMYWJlbC50IC0+IExhYmVsLnQgb3B0aW9uLA0KCQkJICAgICBzZXQ6IExh
YmVsLnQgKiBMYWJlbC50IG9wdGlvbiAtPiB1bml0fQ0KCSAgICAgID0gUHJvcGVydHkuZ2V0U2V0
KExhYmVsLnBsaXN0LCBQcm9wZXJ0eS5pbml0Q29uc3QgTk9ORSkNCgkgICAgdmFsIGNoYW5nZWQg
PSByZWYgZmFsc2UNCgkgICAgICANCgkgICAgdmFsIGxhYmVscw0KCSAgICAgID0gTGlzdC5rZWVw
QWxsTWFwDQoJICAgICAgICAoYmxvY2tzLA0KCQkgZm4gYmxvY2sgYXMgQmxvY2suVCB7bGFiZWws
IA0KCQkJCSAgICAgIHByb2ZpbGVJbmZvLA0KCQkJCSAgICAgIHN0YXRlbWVudHMsIA0KCQkJCSAg
ICAgIHRyYW5zZmVyIGFzIFRyYW5zZmVyLkdvdG8ge3RhcmdldH19DQoJCSAgPT4gaWYgTGlzdC5m
b3JhbGwoc3RhdGVtZW50cywNCgkJCQkgICAgZm4gQXNzZW1ibHkuQ29tbWVudCBfID0+IHRydWUN
CgkJCQkgICAgIHwgXyA9PiBmYWxzZSkNCgkJICAgICAgICBhbmRhbHNvDQoJCQlub3QgKExhYmVs
LmVxdWFscyhsYWJlbCwgdGFyZ2V0KSkNCgkJCWFuZGFsc28NCgkJCSEoKCNnZXQganVtcEluZm8p
IGxhYmVsKSA8PiBNdXN0DQoJCSAgICAgICB0aGVuIChzZXQobGFiZWwsIFNPTUUgdGFyZ2V0KTsg
U09NRSBsYWJlbCkNCgkJICAgICAgIGVsc2UgTk9ORQ0KCQkgIHwgXyA9PiBOT05FKQ0KCQkNCgkg
ICAgZnVuIGxvb3AgKCkNCgkgICAgICA9IGlmIExpc3QuZm9sZChsYWJlbHMsDQoJCQkgICAgIGZh
bHNlLA0KCQkJICAgICBmbiAobGFiZWwsYikNCgkJCSAgICAgID0+IGNhc2UgZ2V0IGxhYmVsDQoJ
CQkJICAgb2YgTk9ORSA9PiBiDQoJCQkgICAgICAgICAgICB8IFNPTUUgdGFyZ2V0DQoJCQkJICAg
ID0+IChjYXNlIGdldCB0YXJnZXQNCgkJCQkJICBvZiBOT05FID0+IGINCgkJCQkJICAgfCBTT01F
IHRhcmdldCcNCgkJCQkJICAgPT4gKHNldChsYWJlbCwgU09NRSB0YXJnZXQnKTsNCgkJCQkJICAg
ICAgIHRydWUpKSkNCgkJICB0aGVuIGxvb3AgKCkNCgkJICBlbHNlICgpDQoJCSAgICANCgkgICAg
dmFsIF8gPSBsb29wICgpDQoNCgkgICAgZnVuIHVwZGF0ZSB0YXJnZXQNCgkgICAgICA9IGNhc2Ug
Z2V0IHRhcmdldA0KCQkgIG9mIFNPTUUgdGFyZ2V0Jw0KCQkgICA9PiAoY2hhbmdlZCA6PSB0cnVl
Ow0KCQkgICAgICAgZGVjIHtsYWJlbCA9IHRhcmdldCwNCgkJCSAgICBqdW1wSW5mbyA9IGp1bXBJ
bmZvfTsNCgkJICAgICAgIGluYyB7bGFiZWwgPSB0YXJnZXQnLA0KCQkJICAgIGp1bXBJbmZvID0g
anVtcEluZm99Ow0KCQkgICAgICAgdGFyZ2V0JykNCgkJICAgfCBOT05FID0+IHRhcmdldA0KDQoJ
ICAgIHZhbCBlbGltU2ltcGxlR290bycNCgkgICAgICA9IGZuIFRyYW5zZmVyLkdvdG8ge3Rhcmdl
dH0gDQoJICAgICAgICAgPT4gVHJhbnNmZXIuR290byB7dGFyZ2V0ID0gdXBkYXRlIHRhcmdldH0N
CgkJIHwgVHJhbnNmZXIuSWZmIHtjb25kaXRpb24sIHRydWVlLCBmYWxzZWV9DQoJICAgICAgICAg
PT4gVHJhbnNmZXIuSWZmIHtjb25kaXRpb24gPSBjb25kaXRpb24sDQoJCQkJICB0cnVlZSA9IHVw
ZGF0ZSB0cnVlZSwNCgkJCQkgIGZhbHNlZSA9IHVwZGF0ZSBmYWxzZWV9DQoJICAgICAgICAgfCBU
cmFuc2Zlci5Td2l0Y2gge3Rlc3QsIGNhc2VzLCBkZWZhdWx0fQ0KCSAgICAgICAgID0+IFRyYW5z
ZmVyLlN3aXRjaCB7dGVzdCA9IHRlc3QsDQoJCQkJICAgICBjYXNlcyA9IFRyYW5zZmVyLkNhc2Vz
Lm1hcA0KCQkJCSAgICAgICAgICAgICAoY2FzZXMsDQoJCQkJCSAgICAgIGZuIHRhcmdldCA9PiB1
cGRhdGUgdGFyZ2V0KSwNCgkJCSAgICAgICAgICAgICBkZWZhdWx0ID0gdXBkYXRlIGRlZmF1bHR9
DQoJICAgICAgICAgfCB0cmFuc2ZlciA9PiB0cmFuc2Zlcg0KDQoJICAgIHZhbCBibG9ja3MNCgkg
ICAgICA9IExpc3QubWFwDQoJICAgICAgICAoYmxvY2tzLA0KCQkgZm4gQmxvY2suVCB7bGFiZWws
IHByb2ZpbGVJbmZvLCBzdGF0ZW1lbnRzLCB0cmFuc2Zlcn0NCgkJICA9PiBCbG9jay5UIHtsYWJl
bCA9IGxhYmVsLA0KCQkJICAgICAgcHJvZmlsZUluZm8gPSBwcm9maWxlSW5mbywNCgkJCSAgICAg
IHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzLA0KCQkJICAgICAgdHJhbnNmZXIgPSBlbGltU2ltcGxl
R290bycgdHJhbnNmZXJ9KQ0KDQoJICAgIHZhbCBibG9ja3MNCgkgICAgICA9IExpc3QucmVtb3Zl
QWxsDQoJICAgICAgICAoYmxvY2tzLA0KCQkgZm4gQmxvY2suVCB7bGFiZWwsLi4ufQ0KCQkgID0+
IChjYXNlIGdldCBsYWJlbA0KCQkJb2YgU09NRSBsYWJlbCcgPT4gKGNoYW5nZWQgOj0gdHJ1ZTsN
CgkJCQkJICAgZGVjIHtsYWJlbCA9IGxhYmVsJywNCgkJCQkJCWp1bXBJbmZvID0ganVtcEluZm99
Ow0KCQkJCQkgICB0cnVlKQ0KCQkJIHwgTk9ORSA9PiBmYWxzZSkpDQoJICBpbg0KCSAgICB7Ymxv
Y2tzID0gYmxvY2tzLA0KCSAgICAgY2hhbmdlZCA9ICFjaGFuZ2VkfQ0KCSAgZW5kDQoNCiAgICAg
IHZhbCAoZWxpbVNpbXBsZUdvdG8sZWxpbVNpbXBsZUdvdG9fbXNnKQ0KCT0gdHJhY2VyDQoJICAi
ZWxpbVNpbXBsZUdvdG8iDQoJICBlbGltU2ltcGxlR290bw0KDQogICAgICBmdW4gZWxpbUNvbXBs
ZXhHb3RvIHtibG9ja3MgOiBCbG9jay50IGxpc3QsDQoJCQkgICBqdW1wSW5mbyA6IHtnZXQ6IExh
YmVsLnQgLT4gc3RhdHVzIHJlZn19DQoJPSBsZXQNCgkgICAgdmFsIGdvdG9JbmZvIGFzIHtnZXQ6
IExhYmVsLnQgLT4gQmxvY2sudCBvcHRpb24sDQoJCQkgICAgIHNldDogTGFiZWwudCAqIEJsb2Nr
LnQgb3B0aW9uIC0+IHVuaXR9DQoJICAgICAgPSBQcm9wZXJ0eS5nZXRTZXQoTGFiZWwucGxpc3Qs
IFByb3BlcnR5LmluaXRDb25zdCBOT05FKQ0KDQoJICAgIHZhbCBsYWJlbHMNCgkgICAgICA9IExp
c3Qua2VlcEFsbE1hcA0KCSAgICAgICAgKGJsb2NrcywNCgkJIGZuIGJsb2NrIGFzIEJsb2NrLlQg
e2xhYmVsLC4uLn0NCgkJICA9PiBpZiAhKCgjZ2V0IGp1bXBJbmZvKSBsYWJlbCkgPSBNYXliZSAx
DQoJCSAgICAgICB0aGVuIChzZXQobGFiZWwsIFNPTUUgYmxvY2spOyBTT01FIGxhYmVsKQ0KCQkg
ICAgICAgZWxzZSBOT05FKQ0KDQoJICAgIGZ1biBsb29wICgpDQoJICAgICAgPSBpZiBMaXN0LmZv
bGQNCgkgICAgICAgICAgIChsYWJlbHMsDQoJCSAgICBmYWxzZSwNCgkJICAgIGZuIChsYWJlbCxi
KQ0KCQkgICAgID0+IGNhc2UgZ2V0IGxhYmVsDQoJCQkgIG9mIFNPTUUgKEJsb2NrLlQgDQoJCQkJ
ICAge2xhYmVsLA0KCQkJCSAgICBwcm9maWxlSW5mbywNCgkJCQkgICAgc3RhdGVtZW50cywNCgkJ
CQkgICAgdHJhbnNmZXIgYXMgVHJhbnNmZXIuR290byB7dGFyZ2V0fX0pDQoJCQkgICA9PiAoaWYg
TGFiZWwuZXF1YWxzKGxhYmVsLHRhcmdldCkNCgkJCQkgdGhlbiBiDQoJCQkJIGVsc2UgKGNhc2Ug
Z2V0IHRhcmdldA0KCQkJCQkgb2YgTk9ORSA9PiBiDQoJCQkJCSAgfCBTT01FIChCbG9jay5UDQoJ
CQkJCQkgIHtsYWJlbCA9IGxhYmVsJywNCgkJCQkJCSAgIHByb2ZpbGVJbmZvIA0KCQkJCQkJICAg
PSBwcm9maWxlSW5mbycsDQoJCQkJCQkgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50cycsDQoJCQkJ
CQkgICB0cmFuc2ZlciA9IHRyYW5zZmVyJ30pDQoJCQkJCSAgPT4gKHNldChsYWJlbCwNCgkJCQkJ
CSAgU09NRSAoQmxvY2suVA0KCQkJCQkJCXtsYWJlbCA9IGxhYmVsLA0KCQkJCQkJCSBwcm9maWxl
SW5mbw0KCQkJCQkJCSA9IFByb2ZpbGVJbmZvLmNvbWJpbmUNCgkJCQkJCQkgICAocHJvZmlsZUlu
Zm8sDQoJCQkJCQkJICAgIHByb2ZpbGVJbmZvJyksDQoJCQkJCQkJIHN0YXRlbWVudHMNCgkJCQkJ
CQkgPSBMaXN0LmNvbmNhdA0KCQkJCQkJCSAgIFtzdGF0ZW1lbnRzLCANCgkJCQkJCQkgICAgc3Rh
dGVtZW50cyddLA0KCQkJCQkJICAgICAgICAgdHJhbnNmZXIgDQoJCQkJCQkgICAgICAgICA9IHRy
YW5zZmVyJ30pKTsNCgkJCQkJICAgICAgdHJ1ZSkpKQ0KCQkgICAgICAgICAgIHwgXyA9PiBiKQ0K
CQkgIHRoZW4gbG9vcCAoKQ0KCQkgIGVsc2UgKCkNCg0KCSAgICB2YWwgXyA9IGxvb3AgKCkNCg0K
CSAgICB2YWwgZWxpbUNvbXBsZXhHb3RvJw0KCSAgICAgID0gZm4gYmxvY2sgYXMgQmxvY2suVCB7
bGFiZWwsIA0KCQkJCSAgICAgcHJvZmlsZUluZm8sDQoJCQkJICAgICBzdGF0ZW1lbnRzLCANCgkJ
CQkgICAgIHRyYW5zZmVyIGFzIFRyYW5zZmVyLkdvdG8ge3RhcmdldH19DQoJCSA9PiBpZiBMYWJl
bC5lcXVhbHMobGFiZWwsdGFyZ2V0KQ0KCQkgICAgICB0aGVuIGJsb2NrDQoJCSAgICAgIGVsc2Ug
KGNhc2UgZ2V0IHRhcmdldA0KCQkJICAgICAgb2YgTk9ORSA9PiBibG9jaw0KCQkJICAgICAgIHwg
U09NRSAoQmxvY2suVCB7bGFiZWwgPSBsYWJlbCcsDQoJCQkJCQlwcm9maWxlSW5mbyA9IHByb2Zp
bGVJbmZvJywNCgkJCQkJCXN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzJywNCgkJCQkJCXRyYW5zZmVy
ID0gdHJhbnNmZXInfSkNCgkJCSAgICAgICA9PiBsZXQNCgkJCQkgICAgdmFsIF8gPSBkZWMge2xh
YmVsID0gbGFiZWwnLA0KCQkJCQkJIGp1bXBJbmZvID0ganVtcEluZm99DQoJCQkJICAgIHZhbCBf
ID0gTGlzdC5mb3JlYWNoDQoJCQkJICAgICAgICAgICAgKFRyYW5zZmVyLnRhcmdldHMgdHJhbnNm
ZXInLA0KCQkJCQkgICAgIGZuIHRhcmdldCANCgkJCQkJICAgICAgPT4gaW5jIHtsYWJlbCA9IHRh
cmdldCwgDQoJCQkJCQkgICAgICBqdW1wSW5mbyA9IGp1bXBJbmZvfSkNCg0KCQkJCSAgICB2YWwg
YmxvY2sNCgkJCQkgICAgICA9IEJsb2NrLlQge2xhYmVsID0gbGFiZWwsDQoJCQkJCQkgcHJvZmls
ZUluZm8gDQoJCQkJCQkgPSBQcm9maWxlSW5mby5jb21iaW5lDQoJCQkJCQkgICAocHJvZmlsZUlu
Zm8sDQoJCQkJCQkgICAgcHJvZmlsZUluZm8nKSwNCgkJCQkJCSBzdGF0ZW1lbnRzIA0KCQkJCQkJ
ID0gTGlzdC5jb25jYXQNCgkJCQkJCSAgIFtzdGF0ZW1lbnRzLCANCgkJCQkJCSAgICBzdGF0ZW1l
bnRzJ10sDQoJCQkJCQkgdHJhbnNmZXIgPSB0cmFuc2Zlcid9DQoJCQkJICBpbg0KCQkJCSAgICBi
bG9jaw0KCQkJCSAgZW5kKQ0KCSAgICAgICAgIHwgYmxvY2sgPT4gYmxvY2sNCg0KCSAgICB2YWwg
YmxvY2tzDQoJICAgICAgPSBMaXN0Lm1hcChibG9ja3MsIGVsaW1Db21wbGV4R290bycpDQoNCgkg
ICAgZnVuIGxvb3Age2Jsb2NrcywgY2hhbmdlZH0NCgkgICAgICA9IGxldA0KCQkgIHZhbCB7Ymxv
Y2tzLGNoYW5nZWQnfQ0KCQkgICAgPSBMaXN0LmZvbGRyDQoJCSAgICAgIChibG9ja3MsDQoJCSAg
ICAgICB7YmxvY2tzID0gW10sIGNoYW5nZWQnID0gZmFsc2V9LA0KCQkgICAgICAgZm4gKGJsb2Nr
IGFzIEJsb2NrLlQge2xhYmVsLHRyYW5zZmVyLC4uLn0sDQoJCQkgICB7YmxvY2tzLCBjaGFuZ2Vk
J30pDQoJCSAgICAgICAgPT4gaWYgISgoI2dldCBqdW1wSW5mbyBsYWJlbCkpID0gTWF5YmUgMA0K
CQkJICAgICB0aGVuIGxldA0KCQkJCSAgICB2YWwgXyA9IExpc3QuZm9yZWFjaA0KCQkJCSAgICAg
ICAgICAgIChUcmFuc2Zlci50YXJnZXRzIHRyYW5zZmVyLA0KCQkJCQkgICAgIGZuIHRhcmdldCAN
CgkJCQkJICAgICAgPT4gZGVjIHtsYWJlbCA9IHRhcmdldCwNCgkJCQkJCSAgICAgIGp1bXBJbmZv
ID0ganVtcEluZm99KQ0KCQkJCSAgaW4NCgkJCQkgICAge2Jsb2NrcyA9IGJsb2NrcywNCgkJCQkg
ICAgIGNoYW5nZWQnID0gdHJ1ZX0NCgkJCQkgIGVuZA0KCQkJICAgICBlbHNlIHtibG9ja3MgPSBi
bG9jazo6YmxvY2tzLA0KCQkJCSAgIGNoYW5nZWQnID0gY2hhbmdlZCd9KQ0KCQlpbg0KCQkgIGlm
IGNoYW5nZWQnDQoJCSAgICB0aGVuIGxvb3Age2Jsb2NrcyA9IGJsb2NrcywgY2hhbmdlZCA9IHRy
dWV9DQoJCSAgICBlbHNlIHtibG9ja3MgPSBibG9ja3MsIGNoYW5nZWQgPSBjaGFuZ2VkfQ0KCQll
bmQNCg0KCSAgICB2YWwge2Jsb2NrcywgY2hhbmdlZH0gPSBsb29wIHtibG9ja3MgPSBibG9ja3Ms
IGNoYW5nZWQgPSBmYWxzZX0NCgkgIGluDQoJICAgIHtibG9ja3MgPSBibG9ja3MsDQoJICAgICBj
aGFuZ2VkID0gY2hhbmdlZH0NCgkgIGVuZA0KDQogICAgICB2YWwgKGVsaW1Db21wbGV4R290bywg
ZWxpbUNvbXBsZXhHb3RvX21zZykNCgk9IHRyYWNlcg0KCSAgImVsaW1Db21wbGV4R290byINCgkg
IGVsaW1Db21wbGV4R290bw0KDQogICAgICBmdW4gZWxpbUdvdG8ge2Jsb2NrcyA6IEJsb2NrLnQg
bGlzdCwNCgkJICAgIGp1bXBJbmZvIDoge2dldDogTGFiZWwudCAtPiBzdGF0dXMgcmVmfX0NCgk9
IGxldA0KCSAgICB2YWwgZWxpbUlmZiA9IFBlZXBob2xlQmxvY2subWFrZUVsaW1JZmYge2p1bXBJ
bmZvID0ganVtcEluZm99DQoJICAgIHZhbCBlbGltU3dpdGNoID0gUGVlcGhvbGVCbG9jay5tYWtl
RWxpbVN3aXRjaCB7anVtcEluZm8gPSBqdW1wSW5mb30NCg0KCSAgICBmdW4gbG9vcCB7YmxvY2tz
LGNoYW5nZWR9DQoJICAgICAgPSBsZXQNCgkJICB2YWwge2Jsb2NrcywNCgkJICAgICAgIGNoYW5n
ZWQgPSBjaGFuZ2VkX2VsaW1TaW1wbGVHb3RvfQ0KCQkgICAgPSBlbGltU2ltcGxlR290byB7Ymxv
Y2tzID0gYmxvY2tzLA0KCQkJCSAgICAgIGp1bXBJbmZvID0ganVtcEluZm99DQoNCgkJICB2YWwg
e2Jsb2NrcywNCgkJICAgICAgIGNoYW5nZWQgPSBjaGFuZ2VkX3BlZXBob2xlQmxvY2tzfQ0KCQkg
ICAgPSBQZWVwaG9sZUJsb2NrLnBlZXBob2xlQmxvY2tzDQoJCSAgICAgIHtibG9ja3MgPSBibG9j
a3MsDQoJCSAgICAgICBvcHRpbWl6YXRpb25zID0gW2VsaW1JZmYsIGVsaW1Td2l0Y2hdfQ0KCQlp
bg0KCQkgIGlmIGNoYW5nZWRfZWxpbVNpbXBsZUdvdG8gb3JlbHNlIGNoYW5nZWRfcGVlcGhvbGVC
bG9ja3MNCgkJICAgIHRoZW4gbG9vcCB7YmxvY2tzID0gYmxvY2tzLCBjaGFuZ2VkID0gdHJ1ZX0N
CgkJICAgIGVsc2Uge2Jsb2NrcyA9IGJsb2NrcywgY2hhbmdlZCA9IGNoYW5nZWR9DQoJCWVuZA0K
DQoJICAgIHZhbCB7YmxvY2tzLCANCgkJIGNoYW5nZWQgPSBjaGFuZ2VkX2xvb3B9IA0KCSAgICAg
ID0gbG9vcCB7YmxvY2tzID0gYmxvY2tzLCBjaGFuZ2VkID0gZmFsc2V9DQoNCgkgICAgdmFsIHti
bG9ja3MsDQoJCSBjaGFuZ2VkID0gY2hhbmdlZF9lbGltQ29tcGxleEdvdG99IA0KCSAgICAgID0g
ZWxpbUNvbXBsZXhHb3RvIHtibG9ja3MgPSBibG9ja3MsDQoJCQkJIGp1bXBJbmZvID0ganVtcElu
Zm99DQoJICBpbg0KCSAgICB7YmxvY2tzID0gYmxvY2tzLA0KCSAgICAgY2hhbmdlZCA9IGNoYW5n
ZWRfbG9vcCBvcmVsc2UgY2hhbmdlZF9lbGltQ29tcGxleEdvdG99DQoJICBlbmQNCg0KICAgICAg
dmFsIChlbGltR290bywgZWxpbUdvdG9fbXNnKQ0KCT0gdHJhY2VyDQoJICAiZWxpbUdvdG8iDQoJ
ICBlbGltR290bw0KDQogICAgICB2YWwgZWxpbUdvdG9fbXNnIA0KCT0gZm4gKCkgPT4gKGVsaW1H
b3RvX21zZyAoKTsNCgkJICAgIENvbnRyb2wuaW5kZW50ICgpOw0KCQkgICAgUGVlcGhvbGVCbG9j
ay5lbGltSWZmX21zZyAoKTsNCgkJICAgIFBlZXBob2xlQmxvY2suZWxpbVN3aXRjaF9tc2cgKCk7
DQoJCSAgICBlbGltU2ltcGxlR290b19tc2cgKCk7DQoJCSAgICBlbGltQ29tcGxleEdvdG9fbXNn
ICgpOw0KCQkgICAgQ29udHJvbC51bmluZGVudCAoKSkNCiAgICBlbmQNCg0KICBzdHJ1Y3R1cmUg
TGl2ZW5lc3MgPQ0KICAgIHN0cnVjdA0KDQogICAgICB0eXBlIHQgPSB7bGl2ZU91dDogTWVtTG9j
LnQgbGlzdCwNCgkJZGVhZDogTWVtTG9jLnQgbGlzdH0NCg0KICAgICAgZnVuIHRvU3RyaW5nIHts
aXZlT3V0LCBkZWFkfQ0KCT0gbGV0DQoJICAgIGZ1biBkb2l0IChuYW1lLCBsLCB0b1N0cmluZywg
cykNCgkgICAgICA9IExpc3QuZm9sZChsLCBzLA0KCQkJICBmbiAoeCwgcykNCgkJCSAgID0+IGNv
bmNhdCBbbmFtZSwgdG9TdHJpbmcgeCwgIlxuIiwgc10pDQoJICBpbg0KCSAgICBkb2l0KCJsaXZl
T3V0OiAiLCBsaXZlT3V0LCBNZW1Mb2MudG9TdHJpbmcsDQoJICAgIGRvaXQoImRlYWQ6ICIsIGRl
YWQsIE1lbUxvYy50b1N0cmluZywNCgkJICIiKSkNCgkgIGVuZA0KCQ0KICAgICAgZnVuIGVxKHts
aXZlT3V0ID0gbGl2ZU91dDEsDQoJICAgICAgZGVhZCA9IGRlYWQxfSwNCgkgICAgIHtsaXZlT3V0
ID0gbGl2ZU91dDIsDQoJICAgICAgZGVhZCA9IGRlYWQyfSkNCgk9IExpc3QuZXF1YWxzQXNTZXQo
bGl2ZU91dDEsIGxpdmVPdXQyLCBNZW1Mb2MuZXEpDQoJICBhbmRhbHNvDQoJICBMaXN0LmVxdWFs
c0FzU2V0KGRlYWQxLCBkZWFkMiwgTWVtTG9jLmVxKQ0KDQogICAgICBmdW4gdGVtcF91c2VzX2Rl
ZnMge3VzZXMgOiBPcGVyYW5kLnQgbGlzdCwNCgkJCSAgZGVmcyA6IE9wZXJhbmQudCBsaXN0fQ0K
CT0gbGV0DQoJICAgIHZhbCBiYXNlVXNlcw0KCSAgICAgID0gTGlzdC5mb2xkDQoJICAgICAgICAo
dXNlcywNCgkJIFtdLA0KCQkgZm4gKG9wZXJhbmQsIGJhc2VVc2VzKQ0KCQkgID0+IGNhc2UgT3Bl
cmFuZC5kZU1lbWxvYyBvcGVyYW5kDQoJCSAgICAgICBvZiBTT01FIG1lbWxvYyA9PiBpZiBNZW1M
b2MuaXNUZW1wIG1lbWxvYw0KCQkJICAgICAgICAgICAgICAgICAgICBhbmRhbHNvIA0KCQkJCQkg
ICAgbm90IChMaXN0LmNvbnRhaW5zKGJhc2VVc2VzLA0KCQkJCQkJCSAgICAgICBtZW1sb2MsDQoJ
CQkJCQkJICAgICAgIE1lbUxvYy5lcSkpDQoJCQkJCSAgIHRoZW4gbWVtbG9jOjpiYXNlVXNlcw0K
CQkJCQkgICBlbHNlIGJhc2VVc2VzDQoJCSAgICAgICAgfCBOT05FID0+IGJhc2VVc2VzKQ0KCQkg
ICANCgkgICAgdmFsIHRlbXBVc2VzDQoJICAgICAgPSBsZXQNCgkJICBmdW4gZG9pdCAob3BlcmFu
ZHMsIHRlbXBVc2VzKQ0KCQkgICAgPSBMaXN0LmZvbGQNCgkJICAgICAgKG9wZXJhbmRzLA0KCQkg
ICAgICAgdGVtcFVzZXMsDQoJCSAgICAgICBmbiAob3BlcmFuZCwgdGVtcFVzZXMpDQoJCSAgICAg
ICAgPT4gY2FzZSBPcGVyYW5kLmRlTWVtbG9jIG9wZXJhbmQNCgkJCSAgICAgb2YgU09NRSBtZW1s
b2MNCgkJCSAgICAgID0+IExpc3QuZm9sZChNZW1Mb2MudXRpbGl6ZWQgbWVtbG9jLA0KCQkJCQkg
ICB0ZW1wVXNlcywNCgkJCQkJICAgZm4gKG1lbWxvYywgdGVtcFVzZXMpDQoJCQkJCSAgICA9PiBp
ZiBNZW1Mb2MuaXNUZW1wIG1lbWxvYw0KCQkJCQkgICAgICAgICAgYW5kYWxzbw0KCQkJCQkJICBu
b3QgKExpc3QuY29udGFpbnModGVtcFVzZXMsDQoJCQkJCQkJCSAgICAgbWVtbG9jLA0KCQkJCQkJ
CQkgICAgIE1lbUxvYy5lcSkpDQoJCQkJCQkgdGhlbiBtZW1sb2M6OnRlbXBVc2VzDQoJCQkJCQkg
ZWxzZSB0ZW1wVXNlcykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTk9ORSA9PiB0
ZW1wVXNlcykNCgkJaW4NCgkJICBkb2l0KGRlZnMsIA0KCQkgIGRvaXQodXNlcywgDQoJCSAgICAg
ICBiYXNlVXNlcykpDQoJCWVuZA0KDQoJICAgIHZhbCBiYXNlRGVmcw0KCSAgICAgID0gTGlzdC5m
b2xkDQoJICAgICAgICAoZGVmcywNCgkJIFtdLA0KCQkgZm4gKG9wZXJhbmQsIGJhc2VEZWZzKQ0K
CQkgID0+IGNhc2UgT3BlcmFuZC5kZU1lbWxvYyBvcGVyYW5kDQoJCSAgICAgICBvZiBTT01FIG1l
bWxvYyA9PiBpZiBNZW1Mb2MuaXNUZW1wIG1lbWxvYw0KCQkJICAgICAgICAgICAgICAgICAgICBh
bmRhbHNvIA0KCQkJCQkgICAgbm90IChMaXN0LmNvbnRhaW5zKGJhc2VEZWZzLA0KCQkJCQkJCSAg
ICAgICBtZW1sb2MsDQoJCQkJCQkJICAgICAgIE1lbUxvYy5lcSkpDQoJCQkJCSAgIHRoZW4gbWVt
bG9jOjpiYXNlRGVmcw0KCQkJCQkgICBlbHNlIGJhc2VEZWZzDQoJCQl8IE5PTkUgPT4gYmFzZURl
ZnMpDQoJICAgIHZhbCB0ZW1wRGVmcyA9IGJhc2VEZWZzDQoJICBpbg0KCSAgICB7dXNlcyA9IHRl
bXBVc2VzLA0KCSAgICAgZGVmcyA9IHRlbXBEZWZzfQ0KCSAgZW5kDQoNCiAgICAgIGZ1biBsaXZl
bmVzcyB7dXNlcyA6IE1lbUxvYy50IGxpc3QsDQoJCSAgICBkZWZzIDogTWVtTG9jLnQgbGlzdCwN
CgkJICAgIGxpdmUgOiBNZW1Mb2MudCBsaXN0fSA6IA0KCSAgICAgICAgICAge2luZm8gOiB0LA0K
CQkgICAgbGl2ZSA6IE1lbUxvYy50IGxpc3R9DQoJPSBsZXQNCgkgICAgdmFsIGxpdmVPdXQgPSBs
aXZlDQoNCgkgICAgdmFsIGxpdmVJbg0KCSAgICAgID0gbGV0DQoJCSAgZnVuIGRvaXQgKG1lbWxv
Y3MsIGxpdmVJbikNCgkJICAgID0gTGlzdC5mb2xkKG1lbWxvY3MsDQoJCQkJbGl2ZUluLA0KCQkJ
CWZuIChtZW1sb2MsbGl2ZUluKQ0KCQkJCSA9PiBpZiBMaXN0LmNvbnRhaW5zKGRlZnMsDQoJCQkJ
CQkgICAgIG1lbWxvYywNCgkJCQkJCSAgICAgTWVtTG9jLmVxKQ0KICAJCQkJICAgICAgIG9yZWxz
ZQ0KCQkJCSAgICAgICBMaXN0LmNvbnRhaW5zKGxpdmVJbiwNCgkJCQkJCSAgICAgbWVtbG9jLA0K
CQkJCQkJICAgICBNZW1Mb2MuZXEpDQoJCQkJICAgICAgdGhlbiBsaXZlSW4NCgkJCQkgICAgICBl
bHNlIG1lbWxvYzo6bGl2ZUluKQ0KCQlpbg0KCQkgIGRvaXQobGl2ZSwNCgkJICAgICAgIHVzZXMp
DQoJCWVuZA0KDQoJICAgIHZhbCBkZWFkDQoJICAgICAgPSBsZXQNCgkJICBmdW4gZG9pdCAobWVt
bG9jcywgZGVhZCkNCgkJICAgID0gTGlzdC5mb2xkKG1lbWxvY3MsDQoJCQkJZGVhZCwNCgkJCQlm
biAobWVtbG9jLGRlYWQpDQoJCQkJID0+IGlmIExpc3QuY29udGFpbnMobGl2ZU91dCwNCgkJCQkJ
CSAgICAgbWVtbG9jLA0KCQkJCQkJICAgICBNZW1Mb2MuZXEpDQoJCQkJICAgICAgIG9yZWxzZQ0K
CQkJCSAgICAgICBMaXN0LmNvbnRhaW5zKGRlYWQsDQoJCQkJCQkgICAgIG1lbWxvYywNCgkJCQkJ
CSAgICAgTWVtTG9jLmVxKQ0KCQkJCSAgICAgIHRoZW4gZGVhZA0KCQkJCSAgICAgIGVsc2UgbWVt
bG9jOjpkZWFkKQ0KCQlpbg0KCQkgIGRvaXQobGl2ZUluLA0KCQkgIGRvaXQoZGVmcywNCgkJICAg
ICAgIFtdKSkNCgkJZW5kDQoJICBpbg0KCSAgICB7aW5mbyA9IHtsaXZlT3V0ID0gbGl2ZU91dCwN
CgkJICAgICBkZWFkID0gZGVhZH0sDQoJICAgICBsaXZlID0gbGl2ZUlufQ0KCSAgZW5kDQoNCiAg
ICAgIGZ1biBsaXZlbmVzc0Fzc2VtYmx5IHthc3NlbWJseTogQXNzZW1ibHkudCwNCgkJCSAgICBs
aXZlOiBNZW1Mb2MudCBsaXN0fSA6DQoJICAgICAgICAgICAgICAgICAgIHtpbmZvOiB0LA0KCQkJ
ICAgIGxpdmU6IE1lbUxvYy50IGxpc3R9DQoJPSBsZXQNCgkgICAgdmFsIHt1c2VzLGRlZnMsLi4u
fSA9IEFzc2VtYmx5LnVzZXNfZGVmc19raWxscyBhc3NlbWJseQ0KCSAgICB2YWwge3VzZXMsZGVm
c30gPSB0ZW1wX3VzZXNfZGVmcyB7dXNlcyA9IHVzZXMsIGRlZnMgPSBkZWZzfQ0KCSAgaW4gDQoJ
ICAgIGxpdmVuZXNzIHt1c2VzID0gdXNlcywNCgkJICAgICAgZGVmcyA9IGRlZnMsDQoJCSAgICAg
IGxpdmUgPSBsaXZlfQ0KCSAgZW5kIA0KDQogICAgICBmdW4gbGl2ZW5lc3NUcmFuc2Zlcicge3Ry
YW5zZmVyOiBUcmFuc2Zlci50LA0KCQkJICAgICBsaXZlOiBNZW1Mb2MudCBsaXN0fSA6DQoJICAg
ICAgICAgICAgICAgICAgICB7aW5mbzogdCwNCgkJCSAgICAgbGl2ZTogTWVtTG9jLnQgbGlzdH0N
Cgk9IGxldA0KCSAgICB2YWwge3VzZXMsZGVmcywuLi59ID0gVHJhbnNmZXIudXNlc19kZWZzX2tp
bGxzIHRyYW5zZmVyDQoJICAgIHZhbCB7dXNlcyxkZWZzfSA9IHRlbXBfdXNlc19kZWZzIHt1c2Vz
ID0gdXNlcywgZGVmcyA9IGRlZnN9DQoJICBpbiANCgkgICAgbGl2ZW5lc3Mge3VzZXMgPSB1c2Vz
LA0KCQkgICAgICBkZWZzID0gZGVmcywNCgkJICAgICAgbGl2ZSA9IGxpdmV9DQoJICBlbmQNCg0K
ICAgICAgZnVuIGxpdmVuZXNzVHJhbnNmZXIge3RyYW5zZmVyOiBUcmFuc2Zlci50LA0KCQkJICAg
IGxpdmVJbmZvIA0KCQkJICAgIGFzIHtnZXQ6IExhYmVsLnQgLT4gTWVtTG9jLnQgbGlzdCwNCgkJ
CQlzZXQ6IExhYmVsLnQgKiBNZW1Mb2MudCBsaXN0IC0+IHVuaXR9fSA6DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICB7aW5mbzogdCwNCgkJCSAgICBsaXZlOiBNZW1Mb2MudCBsaXN0fQ0KCT0g
bGV0DQoJICAgIHZhbCB0YXJnZXRzID0gVHJhbnNmZXIudGFyZ2V0cyB0cmFuc2Zlcg0KCSAgICB2
YWwgbGl2ZSA9IExpc3QuY29uY2F0TWFwKHRhcmdldHMsIGdldCkNCgkgIGluDQoJICAgIGxpdmVu
ZXNzVHJhbnNmZXInIHt0cmFuc2ZlciA9IHRyYW5zZmVyLA0KCQkJICAgICAgIGxpdmUgPSBsaXZl
fQ0KCSAgZW5kDQoNCiAgICAgIGZ1biBsaXZlbmVzc0Jsb2NrRm4ge2Jsb2NrIGFzIEJsb2NrLlQg
e2xhYmVsLCBwcm9maWxlSW5mbywNCgkJCQkJICAgICBzdGF0ZW1lbnRzLCB0cmFuc2Zlcn19DQoJ
PSBsZXQNCgkgICAgdmFsIHt1c2VzLCBkZWZzLCAuLi59ID0gVHJhbnNmZXIudXNlc19kZWZzX2tp
bGxzIHRyYW5zZmVyDQoJICAgIHZhbCB7dXNlcywgZGVmc30gPSB0ZW1wX3VzZXNfZGVmcyB7dXNl
cyA9IHVzZXMsIGRlZnMgPSBkZWZzfQ0KDQoJICAgIHZhbCB7dXNlc19ibG9jaywgZGVmc19ibG9j
a30NCgkgICAgICA9IExpc3QuZm9sZHINCgkgICAgICAgIChzdGF0ZW1lbnRzLA0KCQkge3VzZXNf
YmxvY2sgPSB1c2VzLA0KCQkgIGRlZnNfYmxvY2sgPSBkZWZzfSwNCgkJIGZuIChhc20se3VzZXNf
YmxvY2ssZGVmc19ibG9ja30pDQoJCSAgPT4gbGV0DQoJCSAgICAgICB2YWwge3VzZXMsZGVmcywu
Li59IA0KCQkJID0gQXNzZW1ibHkudXNlc19kZWZzX2tpbGxzIGFzbQ0KCQkgICAgICAgdmFsIHt1
c2VzLGRlZnN9IA0KCQkJID0gdGVtcF91c2VzX2RlZnMge3VzZXMgPSB1c2VzLCBkZWZzID0gZGVm
c30NCg0KCQkgICAgICAgdmFsIHVzZXNfYmxvY2sNCgkJCSA9IExpc3QuZm9sZCh1c2VzX2Jsb2Nr
LA0KCQkJCSAgICAgdXNlcywNCgkJCQkgICAgIGZuIChtZW1sb2MsdXNlc19ibG9jaykNCgkJCQkg
ICAgICA9PiBpZiBMaXN0LmNvbnRhaW5zKGRlZnMsDQoJCQkJCQkJICBtZW1sb2MsDQoJCQkJCQkJ
ICBNZW1Mb2MuZXEpDQoJCQkJICAgICAgICAgICAgb3JlbHNlDQoJCQkJCSAgICBMaXN0LmNvbnRh
aW5zKHVzZXNfYmxvY2ssDQoJCQkJCQkJICBtZW1sb2MsDQoJCQkJCQkJICBNZW1Mb2MuZXEpDQoJ
CQkJCSAgIHRoZW4gdXNlc19ibG9jaw0KCQkJCQkgICBlbHNlIG1lbWxvYzo6dXNlc19ibG9jaykN
Cg0KCQkgICAgICAgdmFsIGRlZnNfYmxvY2sNCgkJCSA9IExpc3QuZm9sZChkZWZzLA0KCQkJCSAg
ICAgZGVmc19ibG9jaywNCgkJCQkgICAgIGZuIChtZW1sb2MsZGVmc19ibG9jaykNCgkJCQkgICAg
ICA9PiBpZiBMaXN0LmNvbnRhaW5zKGRlZnNfYmxvY2ssDQoJCQkJCQkJICBtZW1sb2MsDQoJCQkJ
CQkJICBNZW1Mb2MuZXEpDQoJCQkJCSAgIHRoZW4gZGVmc19ibG9jaw0KCQkJCQkgICBlbHNlIG1l
bWxvYzo6ZGVmc19ibG9jaykNCgkJCQkJCQkgDQoJCSAgICAgaW4NCgkJICAgICAgIHt1c2VzX2Js
b2NrID0gdXNlc19ibG9jaywNCgkJCWRlZnNfYmxvY2sgPSBkZWZzX2Jsb2NrfQ0KCQkgICAgIGVu
ZCkNCgkgIGluDQoJICAgIGZuIGxpdmUgPT4gbGl2ZW5lc3Mge3VzZXMgPSB1c2VzX2Jsb2NrLA0K
CQkJCSBkZWZzID0gZGVmc19ibG9jaywNCgkJCQkgbGl2ZSA9IGxpdmV9DQoJICBlbmQNCg0KKCoN
CiAgICAgIGZ1biB2ZXJpZnlMaXZlSW5mbyB7YmxvY2tzLA0KCQkJICBsaXZlSW5mbw0KCQkJICBh
cyB7Z2V0OiBMYWJlbC50IC0+IE1lbUxvYy50IGxpc3QsDQoJCQkgICAgICBzZXQ6IExhYmVsLnQg
KiBNZW1Mb2MudCBsaXN0IC0+IHVuaXR9fQ0KCT0gbGV0IA0KCSAgICB2YWwgZXJyb3IgPSBmbiBf
ID0+IEVycm9yLmJ1ZyAiZ2V0QmxvY2tJbmZvOiBsaXZlbmVzc0ZuIg0KCSAgICB2YWwgYmxvY2tJ
bmZvDQoJICAgICAgYXMge2dldCA9IGdldEJsb2NrSW5mbyA6IA0KCQkgICAgICAgIExhYmVsLnQg
LT4gDQoJCQl7cHJlZDogTGFiZWwudCBsaXN0IHJlZiwNCgkJCSBzdWNjOiBMYWJlbC50IGxpc3Qg
cmVmLA0KCQkJIHRvcG86IGludCByZWYsDQoJCQkgbGl2ZW5lc3NGbjogKE1lbUxvYy50IGxpc3Qg
LT4gDQoJCQkJICAgICAge2luZm86IHQsIGxpdmU6IE1lbUxvYy50IGxpc3R9KSByZWZ9fQ0KCSAg
ICAgID0gUHJvcGVydHkuZ2V0DQoJICAgICAgICAoTGFiZWwucGxpc3QsDQoJICAgICAgICAgUHJv
cGVydHkuaW5pdEZ1biAoZm4gbGFiZWwgPT4ge3ByZWQgPSByZWYgW10sDQoJCQkJCQlzdWNjID0g
cmVmIFtdLA0KCQkJCQkJdG9wbyA9IHJlZiB+MSwNCgkJCQkJCWxpdmVuZXNzRm4gPSByZWYgZXJy
b3J9KSkNCgkgICAgdmFsIGdldF9wcmVkID0gKCNwcmVkIG8gZ2V0QmxvY2tJbmZvKQ0KCSAgICB2
YWwgZ2V0X3N1Y2MgPSAoI3N1Y2MgbyBnZXRCbG9ja0luZm8pDQoJICAgIHZhbCBnZXRfdG9wbyA9
ICgjdG9wbyBvIGdldEJsb2NrSW5mbykNCgkgICAgdmFsIGdldF9saXZlbmVzc0ZuID0gKCNsaXZl
bmVzc0ZuIG8gZ2V0QmxvY2tJbmZvKQ0KCSAgICB2YWwgZ2V0X3ByZWQnID0gKCEgbyAjcHJlZCBv
IGdldEJsb2NrSW5mbykNCgkgICAgdmFsIGdldF9zdWNjJyA9ICghIG8gI3N1Y2MgbyBnZXRCbG9j
a0luZm8pDQoJICAgIHZhbCBnZXRfdG9wbycgPSAoISBvICN0b3BvIG8gZ2V0QmxvY2tJbmZvKQ0K
CSAgICB2YWwgZ2V0X2xpdmVuZXNzRm4nID0gKCEgbyAjbGl2ZW5lc3NGbiBvIGdldEJsb2NrSW5m
bykNCg0KCSAgICB2YWwgbGFiZWxzDQoJICAgICAgPSBMaXN0Lm1hcA0KCSAgICAgICAgKGJsb2Nr
cywNCgkJIGZuIGJsb2NrJyBhcyBCbG9jay5UIHtsYWJlbCx0cmFuc2ZlciwuLi59DQoJCSAgPT4g
bGV0DQoJCSAgICAgICB2YWwge3N1Y2MsdG9wbyxsaXZlbmVzc0ZuLC4uLn0gPSBnZXRCbG9ja0lu
Zm8gbGFiZWwNCgkJICAgICAgIHZhbCB0YXJnZXRzID0gVHJhbnNmZXIudGFyZ2V0cyB0cmFuc2Zl
cg0KCQkgICAgIGluIAkJDQoJCSAgICAgICBzdWNjIDo9IHRhcmdldHM7DQoJCSAgICAgICB0b3Bv
IDo9IDA7DQoJCSAgICAgICBsaXZlbmVzc0ZuIDo9IGxpdmVuZXNzQmxvY2tGbiB7YmxvY2sgPSBi
bG9jayd9Ow0KCQkgICAgICAgTGlzdC5mb3JlYWNoDQoJCSAgICAgICAodGFyZ2V0cywNCgkJCWZu
IHRhcmdldCA9PiBMaXN0LnB1c2goZ2V0X3ByZWQgdGFyZ2V0LCBsYWJlbCkpOw0KCQkgICAgICAg
bGFiZWwNCgkJICAgICBlbmQpDQoNCgkgICAgbG9jYWwNCgkgICAgICB2YWwgdG9kbyA9IHJlZiBb
XQ0KCSAgICAgIGZ1biB0b3BvX29yZGVyKHgseSkgPSBJbnQuY29tcGFyZShnZXRfdG9wbycgeCwg
Z2V0X3RvcG8nIHkpDQoJICAgIGluDQoJICAgICAgZnVuIGFkZF90b2RvIHggPSB0b2RvIDo9IExp
c3QuaW5zZXJ0KCF0b2RvLCB4LCB0b3BvX29yZGVyKQ0KCSAgICAgIGZ1biBwdXNoX3RvZG8geCA9
IHRvZG8gOj0geDo6KCF0b2RvKQ0KCSAgICAgIGZ1biByZXZfdG9kbyAoKSA9IHRvZG8gOj0gTGlz
dC5yZXYgKCF0b2RvKQ0KCSAgICAgIGZ1biBnZXRfdG9kbyAoKSANCgkJPSAoY2FzZSAhdG9kbw0K
CQkgICAgIG9mIFtdID0+IE5PTkUNCgkJICAgICAgfCAoeDo6dG9kbycpID0+ICh0b2RvIDo9IHRv
ZG8nOw0KCQkJCSAgICAgICBTT01FIHgpKQ0KCSAgICBlbmQNCg0KCSAgICBsb2NhbA0KCSAgICAg
IHZhbCBudW0gPSByZWYgMQ0KCSAgICBpbg0KCSAgICAgIGZ1biB0b3BvX3NvcnQgbGFiZWwNCgkJ
PSBsZXQNCgkJICAgIHZhbCB7dG9wbywgcHJlZCwgLi4ufSA9IGdldEJsb2NrSW5mbyBsYWJlbA0K
CQkgIGluDQoJCSAgICBpZiAhdG9wbyA9IDANCgkJICAgICAgdGhlbiAodG9wbyA6PSAhbnVtOw0K
CQkJICAgIEludC5pbmMgbnVtOw0KCQkJICAgIHB1c2hfdG9kbyBsYWJlbDsNCgkJCSAgICBMaXN0
LmZvcmVhY2goIXByZWQsIHRvcG9fc29ydCkpDQoJCSAgICAgIGVsc2UgKCkNCgkJICBlbmQNCgkg
ICAgICBmdW4gdG9wb19yb290IGxhYmVsDQoJCT0gKGdldF90b3BvIGxhYmVsIDo9ICFudW07DQoJ
CSAgIEludC5pbmMgbnVtOw0KCQkgICBwdXNoX3RvZG8gbGFiZWwpDQoJICAgIGVuZA0KDQoJICAg
IGZ1biBsb29wIChsYWJlbHMsIG4pDQoJICAgICAgPSBpZiBMaXN0LmlzRW1wdHkgbGFiZWxzDQoJ
CSAgdGhlbiAoKQ0KCQkgIGVsc2UgbGV0DQoJCQkgdmFsIChleGl0cyxsYWJlbHMpDQoJCQkgICA9
IHBhcnRpdGlvbg0KCQkJICAgICAobGFiZWxzLA0KCQkJICAgICAgZm4gbGFiZWwNCgkJCSAgICAg
ICA9PiBsZXQNCgkJCQkgICAgdmFsIHN1Y2MgPSBnZXRfc3VjYycgbGFiZWwNCgkJCQkgICAgdmFs
IHN1Y2MnIA0KCQkJCSAgICAgID0gTGlzdC5yZW1vdmVBbGwNCgkJCQkgICAgICAgIChzdWNjLA0K
CQkJCQkgZm4gdGFyZ2V0IA0KCQkJCQkgID0+IGdldF90b3BvJyB0YXJnZXQgPSB+MSkNCgkJCQkg
IGluDQoJCQkJICAgIExpc3QubGVuZ3RoIHN1Y2MnID0gbg0KCQkJCSAgZW5kKQ0KCQkJIHZhbCBl
eGl0cw0KCQkJICAgPSBMaXN0LnJlbW92ZUFsbA0KCQkJICAgICAoZXhpdHMsDQoJCQkgICAgICBm
biBsYWJlbCA9PiBnZXRfdG9wbycgbGFiZWwgPD4gMCkNCgkJCSB2YWwgXyANCgkJCSAgID0gKExp
c3QuZm9yZWFjaA0KCQkJICAgICAgKGV4aXRzLCANCgkJCSAgICAgICBmbiBsYWJlbCA9PiB0b3Bv
X3Jvb3QgbGFiZWwpOw0KCQkJICAgICAgTGlzdC5mb3JlYWNoDQoJCQkgICAgICAoZXhpdHMsDQoJ
CQkgICAgICAgZm4gbGFiZWwgDQoJCQkgICAgICAgID0+IExpc3QuZm9yZWFjaChnZXRfcHJlZCcg
bGFiZWwsIHRvcG9fc29ydCkpKQ0KCQkgICAgICAgaW4NCgkJCSBsb29wKGxhYmVscywgbiArIDEp
DQoJCSAgICAgICBlbmQNCgkgICAgdmFsIF8gPSBsb29wKGxhYmVscywgMCkNCgkgICAgdmFsIF8g
PSByZXZfdG9kbyAoKQ0KDQoJICAgIHZhbCBjaGFuZ2VkID0gcmVmIGZhbHNlDQoJICAgIGZ1biBk
b2l0ICgpDQoJICAgICAgPSAoY2FzZSBnZXRfdG9kbyAoKQ0KCQkgICBvZiBOT05FID0+ICgpDQoJ
CSAgICB8IFNPTUUgbGFiZWwNCgkJICAgID0+IGxldA0KCQkJIHZhbCB7cHJlZCwgc3VjYywgbGl2
ZW5lc3NGbiwgLi4ufSA9IGdldEJsb2NrSW5mbyBsYWJlbA0KDQoJCQkgdmFsIGxpdmUgPSBMaXN0
LmNvbmNhdE1hcA0KCQkJICAgICAgICAgICAgKCFzdWNjLA0KCQkJCSAgICAgZm4gbGFiZWwgPT4g
Y2FzZSBnZXQgbGFiZWwNCgkJCQkJCSAgICBvZiBTT01FIGxpdmUgPT4gbGl2ZQ0KCQkJCQkJICAg
ICB8IE5PTkUgPT4gW10pDQoJCQkJICAgIA0KCQkJIHZhbCB7bGl2ZSwuLi59ID0gKCFsaXZlbmVz
c0ZuKSBsaXZlDQoNCgkJCSB2YWwgbGl2ZScgPSBjYXNlIGdldCBsYWJlbA0KCQkJCSAgICAgICBv
ZiBTT01FIGxpdmUnID0+IGxpdmUnDQoJCQkJCXwgTk9ORSA9PiBbXQ0KCQkgICAgICAgaW4NCgkJ
CSBpZiBMaXN0LmVxdWFsc0FzU2V0KGxpdmUsbGl2ZScsTWVtTG9jLmVxKQ0KCQkJICAgdGhlbiAo
KQ0KCQkJICAgZWxzZSAoc2V0KGxhYmVsLCBTT01FIGxpdmUpOw0KCQkJCSBMaXN0LmZvcmVhY2go
IXByZWQsIGFkZF90b2RvKTsNCigqDQoJCQkJIHByaW50ICJMaXZlbmVzczogdmVyaWZ5TGl2ZUlu
Zm86ICI7DQoJCQkJIHByaW50IChMYWJlbC50b1N0cmluZyBsYWJlbCk7DQoJCQkgICAgICAgICBw
cmludCAiXG4iOw0KCQkJICAgICAgICAgcHJpbnQgImJhY2tlbmQ6ICI7DQoJCQkgICAgICAgICBM
aXN0LmZvcmVhY2gNCgkJCSAgICAgICAgIChsaXZlJywNCgkJCSAgICAgICAgICBmbiBtIA0KCQkJ
ICAgICAgICAgICA9PiAocHJpbnQgKE1lbUxvYy50b1N0cmluZyBtKTsNCgkJCSAgICAgICAgIHBy
aW50ICIgIikpOw0KCQkJICAgICAgICAgcHJpbnQgIlxuIjsNCgkJCSAgICAgICAgIHByaW50ICJj
YWxjdWxhdGVkOiAiOw0KCQkJCSBMaXN0LmZvcmVhY2gNCgkJCSAgICAgICAgIChsaXZlLA0KCQkJ
ICAgICAgICAgIGZuIG0gDQoJCQkgICAgICAgICAgID0+IChwcmludCAoTWVtTG9jLnRvU3RyaW5n
IG0pOw0KCQkJICAgICAgIAkgcHJpbnQgIiAiKSk7DQoJCQkgICAgICAgICBwcmludCAiXG4iOw0K
KikNCgkJCQkgY2hhbmdlZCA6PSB0cnVlKTsNCgkJCSBkb2l0ICgpDQoJCSAgICAgICBlbmQpDQoJ
ICAgIHZhbCBfID0gZG9pdCAoKQ0KCSAgaW4NCgkgICAge2NoYW5nZWQgPSAhY2hhbmdlZH0NCgkg
IGVuZA0KKikNCg0KICAgICAgZnVuIHZlcmlmeUxpdmVJbmZvIHtibG9ja3MsDQoJCQkgIGxpdmVJ
bmZvDQoJCQkgIGFzIHtnZXQ6IExhYmVsLnQgLT4gTWVtTG9jLnQgbGlzdCwNCgkJCSAgICAgIHNl
dDogTGFiZWwudCAqIE1lbUxvYy50IGxpc3QgLT4gdW5pdH19DQoJPSBsZXQgDQoJICAgIHZhbCBi
bG9ja0luZm8NCgkgICAgICBhcyB7Z2V0ID0gZ2V0QmxvY2tJbmZvIDogDQoJCSAgICAgICAgTGFi
ZWwudCAtPiB7cHJlZDogTGFiZWwudCBsaXN0IHJlZiwNCgkJCQkgICAgYmxvY2s6IEJsb2NrLnQg
b3B0aW9uIHJlZiwNCgkJCQkgICAgdG9wbzogaW50IHJlZn19DQoJICAgICAgPSBQcm9wZXJ0eS5n
ZXQNCgkgICAgICAgIChMYWJlbC5wbGlzdCwNCgkgICAgICAgICBQcm9wZXJ0eS5pbml0RnVuIChm
biBsYWJlbCA9PiB7cHJlZCA9IHJlZiBbXSwNCgkJCQkJCWJsb2NrID0gcmVmIE5PTkUsDQoJCQkJ
CQl0b3BvID0gcmVmIH4xfSkpDQoJICAgIHZhbCBnZXRfcHJlZCA9ICgjcHJlZCBvIGdldEJsb2Nr
SW5mbykNCgkgICAgdmFsIGdldF9ibG9jayA9ICgjYmxvY2sgbyBnZXRCbG9ja0luZm8pDQoJICAg
IHZhbCBnZXRfdG9wbyA9ICgjdG9wbyBvIGdldEJsb2NrSW5mbykNCgkgICAgdmFsIGdldF9wcmVk
JyA9ICghIG8gI3ByZWQgbyBnZXRCbG9ja0luZm8pDQoJICAgIHZhbCBnZXRfYmxvY2snID0gKCEg
byAjYmxvY2sgbyBnZXRCbG9ja0luZm8pDQoJICAgIHZhbCBnZXRfdG9wbycgPSAoISBvICN0b3Bv
IG8gZ2V0QmxvY2tJbmZvKQ0KDQoJICAgIHZhbCBsYWJlbHMNCgkgICAgICA9IExpc3QubWFwDQoJ
ICAgICAgICAoYmxvY2tzLA0KCQkgZm4gYmxvY2snIGFzIEJsb2NrLlQge2xhYmVsLHRyYW5zZmVy
LC4uLn0NCgkJICA9PiBsZXQNCgkJICAgICAgIHZhbCB7YmxvY2ssdG9wbywuLi59ID0gZ2V0Qmxv
Y2tJbmZvIGxhYmVsDQoJCSAgICAgICB2YWwgdGFyZ2V0cyA9IFRyYW5zZmVyLnRhcmdldHMgdHJh
bnNmZXINCgkJICAgICBpbiANCgkJICAgICAgIGJsb2NrIDo9IFNPTUUgYmxvY2snOw0KCQkgICAg
ICAgdG9wbyA6PSAwOw0KCQkgICAgICAgTGlzdC5mb3JlYWNoDQoJCSAgICAgICAodGFyZ2V0cywN
CgkJCWZuIHRhcmdldCA9PiBMaXN0LnB1c2goZ2V0X3ByZWQgdGFyZ2V0LCBsYWJlbCkpOw0KCQkg
ICAgICAgbGFiZWwNCgkJICAgICBlbmQpDQoNCgkgICAgbG9jYWwNCgkgICAgICB2YWwgdG9kbyA9
IHJlZiBbXQ0KCSAgICAgIGZ1biB0b3BvX29yZGVyKHgseSkgPSBJbnQuY29tcGFyZShnZXRfdG9w
bycgeCwgZ2V0X3RvcG8nIHkpDQoJICAgIGluDQoJICAgICAgZnVuIGFkZF90b2RvIHggPSB0b2Rv
IDo9IExpc3QuaW5zZXJ0KCF0b2RvLCB4LCB0b3BvX29yZGVyKQ0KCSAgICAgIGZ1biBwdXNoX3Rv
ZG8geCA9IHRvZG8gOj0geDo6KCF0b2RvKQ0KCSAgICAgIGZ1biByZXZfdG9kbyAoKSA9IHRvZG8g
Oj0gTGlzdC5yZXYgKCF0b2RvKQ0KCSAgICAgIGZ1biBnZXRfdG9kbyAoKSANCgkJPSAoY2FzZSAh
dG9kbw0KCQkgICAgIG9mIFtdID0+IE5PTkUNCgkJICAgICAgfCAoeDo6dG9kbycpID0+ICh0b2Rv
IDo9IHRvZG8nOw0KCQkJCSAgICAgICBTT01FIHgpKQ0KCSAgICBlbmQNCg0KCSAgICBsb2NhbA0K
CSAgICAgIHZhbCBudW0gPSBDb3VudGVyLm5ldyAxDQoJICAgIGluDQoJICAgICAgZnVuIHRvcG9f
c29ydCBsYWJlbA0KCQk9IGxldA0KCQkgICAgdmFsIHt0b3BvLCBwcmVkLCAuLi59ID0gZ2V0Qmxv
Y2tJbmZvIGxhYmVsDQoJCSAgaW4NCgkJICAgIGlmICF0b3BvID0gMA0KCQkgICAgICB0aGVuICh0
b3BvIDo9IENvdW50ZXIubmV4dCBudW07DQoJCQkgICAgcHVzaF90b2RvIGxhYmVsOw0KCQkJICAg
IExpc3QuZm9yZWFjaCghcHJlZCwgdG9wb19zb3J0KSkNCgkJICAgICAgZWxzZSAoKQ0KCQkgIGVu
ZA0KCSAgICAgIGZ1biB0b3BvX3Jvb3QgbGFiZWwNCgkJPSAoZ2V0X3RvcG8gbGFiZWwgOj0gQ291
bnRlci5uZXh0IG51bTsNCgkJICAgcHVzaF90b2RvIGxhYmVsKQ0KCSAgICBlbmQNCg0KCSAgICBm
dW4gbG9vcCAobGFiZWxzLCBuKQ0KCSAgICAgID0gaWYgTGlzdC5pc0VtcHR5IGxhYmVscw0KCQkg
IHRoZW4gKCkNCgkJICBlbHNlIGxldA0KCQkJIHZhbCAoZXhpdHMsbGFiZWxzKQ0KCQkJICAgPSBw
YXJ0aXRpb24NCgkJCSAgICAgKGxhYmVscywNCgkJCSAgICAgIGZuIGxhYmVsDQoJCQkgICAgICAg
PT4gbGV0DQoJCQkJICAgIHZhbCBCbG9jay5UIHt0cmFuc2ZlciwuLi59IA0KCQkJCSAgICAgID0g
dmFsT2YgKGdldF9ibG9jaycgbGFiZWwpDQoJCQkJICAgIHZhbCB0YXJnZXRzID0gVHJhbnNmZXIu
dGFyZ2V0cyB0cmFuc2Zlcg0KDQoJCQkJICAgIHZhbCB0YXJnZXRzJw0KCQkJCSAgICAgID0gTGlz
dC5mb2xkKHRhcmdldHMsDQoJCQkJCQkgIDAsDQoJCQkJCQkgIGZuICh0YXJnZXQsdGFyZ2V0cycp
DQoJCQkJCQkgICA9PiBpZiBnZXRfdG9wbycgdGFyZ2V0ID0gfjENCgkJCQkJCQl0aGVuIHRhcmdl
dHMnDQoJCQkJCQkJZWxzZSB0YXJnZXRzJyArIDEpDQoJCQkJICBpbg0KCQkJCSAgICB0YXJnZXRz
JyA9IG4NCgkJCQkgIGVuZCkNCgkJCSB2YWwgZXhpdHMNCgkJCSAgID0gTGlzdC5yZW1vdmVBbGwN
CgkJCSAgICAgKGV4aXRzLA0KCQkJICAgICAgZm4gbGFiZWwgPT4gZ2V0X3RvcG8nIGxhYmVsIDw+
IDApDQoJCQkgdmFsIF8gDQoJCQkgICA9IChMaXN0LmZvcmVhY2gNCgkJCSAgICAgIChleGl0cywg
DQoJCQkgICAgICAgZm4gbGFiZWwgPT4gdG9wb19yb290IGxhYmVsKTsNCgkJCSAgICAgIExpc3Qu
Zm9yZWFjaA0KCQkJICAgICAgKGV4aXRzLA0KCQkJICAgICAgIGZuIGxhYmVsIA0KCQkJICAgICAg
ICA9PiBMaXN0LmZvcmVhY2goZ2V0X3ByZWQnIGxhYmVsLCB0b3BvX3NvcnQpKSkNCgkJICAgICAg
IGluDQoJCQkgbG9vcChsYWJlbHMsIG4gKyAxKQ0KCQkgICAgICAgZW5kDQoJICAgIHZhbCBfID0g
bG9vcChsYWJlbHMsIDApDQoJICAgIHZhbCBfID0gcmV2X3RvZG8gKCkNCg0KCSAgICB2YWwgY2hh
bmdlZCA9IHJlZiBmYWxzZQ0KCSAgICBmdW4gZG9pdCAoKQ0KCSAgICAgID0gKGNhc2UgZ2V0X3Rv
ZG8gKCkNCgkJICAgb2YgTk9ORSA9PiAoKQ0KCQkgICAgfCBTT01FIGxhYmVsDQoJCSAgICA9PiBs
ZXQNCgkJCSB2YWwge3ByZWQsIGJsb2NrLCAuLi59ID0gZ2V0QmxvY2tJbmZvIGxhYmVsDQoJCQkg
dmFsIChCbG9jay5UIHtzdGF0ZW1lbnRzLCB0cmFuc2ZlciwuLi59KSANCgkJCSAgID0gdmFsT2Yg
KCFibG9jaykNCg0KCQkJIHZhbCB7bGl2ZSwuLi59DQoJCQkgICA9IGxpdmVuZXNzVHJhbnNmZXIg
e3RyYW5zZmVyID0gdHJhbnNmZXIsDQoJCQkJCSAgICAgICBsaXZlSW5mbyA9IGxpdmVJbmZvfQ0K
CQkJICAgDQoJCQkgdmFsIGxpdmUNCgkJCSAgID0gTGlzdC5mb2xkcg0KCQkJICAgICAoc3RhdGVt
ZW50cywNCgkJCSAgICAgIGxpdmUsDQoJCQkgICAgICBmbiAoYXNtLGxpdmUpDQoJCQkgICAgICAg
PT4gbGV0DQoJCQkJICAgIHZhbCB7bGl2ZSwuLi59DQoJCQkJICAgICAgPSBsaXZlbmVzc0Fzc2Vt
Ymx5IA0KCQkJCSAgICAgICAge2Fzc2VtYmx5ID0gYXNtLA0KCQkJCQkgbGl2ZSA9IGxpdmV9DQoJ
CQkJICBpbg0KCQkJCSAgICBsaXZlDQoJCQkJICBlbmQpDQoJCQkgICAgIA0KCQkJIHZhbCBsaXZl
JyA9IGdldCBsYWJlbA0KCQkgICAgICAgaW4NCgkJCSBpZiBMaXN0LmVxdWFsc0FzU2V0KGxpdmUs
bGl2ZScsTWVtTG9jLmVxKQ0KCQkJICAgdGhlbiAoKQ0KCQkJICAgZWxzZSAoc2V0KGxhYmVsLCBs
aXZlKTsNCgkJCQkgTGlzdC5mb3JlYWNoKCFwcmVkLCBhZGRfdG9kbyk7DQooKg0KCQkJCSBwcmlu
dCAiTGl2ZW5lc3M6IHZlcmlmeUxpdmVJbmZvOiAiOw0KCQkJCSBwcmludCAoTGFiZWwudG9TdHJp
bmcgbGFiZWwpOw0KCQkJICAgICAgICAgcHJpbnQgIlxuIjsNCgkJCSAgICAgICAgIHByaW50ICJi
YWNrZW5kOiAiOw0KCQkJICAgICAgICAgTGlzdC5mb3JlYWNoDQoJCQkgICAgICAgICAobGl2ZScs
DQoJCQkgICAgICAgICAgZm4gbSANCgkJCSAgICAgICAgICAgPT4gKHByaW50IChNZW1Mb2MudG9T
dHJpbmcgbSk7DQoJCQkgICAgICAgICBwcmludCAiICIpKTsNCgkJCSAgICAgICAgIHByaW50ICJc
biI7DQoJCQkgICAgICAgICBwcmludCAiY2FsY3VsYXRlZDogIjsNCgkJCQkgTGlzdC5mb3JlYWNo
DQoJCQkgICAgICAgICAobGl2ZSwNCgkJCSAgICAgICAgICBmbiBtIA0KCQkJICAgICAgICAgICA9
PiAocHJpbnQgKE1lbUxvYy50b1N0cmluZyBtKTsNCgkJCSAgICAgICAgIHByaW50ICIgIikpOw0K
CQkJICAgICAgICAgcHJpbnQgIlxuIjsNCiopDQoJCQkJIGNoYW5nZWQgOj0gdHJ1ZSk7DQoJCQkg
ZG9pdCAoKQ0KCQkgICAgICAgZW5kKQ0KCSAgICB2YWwgXyA9IGRvaXQgKCkNCgkgIGluDQoJICAg
IHtjaGFuZ2VkID0gIWNoYW5nZWR9DQoJICBlbmQNCg0KKCoNCiAgICAgIGZ1biB2ZXJpZnlMaXZl
SW5mbyB7YmxvY2tzLA0KCQkJICBsaXZlSW5mbyANCgkJCSAgYXMge2dldDogTGFiZWwudCAtPiBN
ZW1Mb2MudCBsaXN0LA0KCQkJICAgICAgc2V0OiBMYWJlbC50ICogTWVtTG9jLnQgbGlzdCAtPiB1
bml0fX0NCgk9IGxldCANCgkgICAgZnVuIGxvb3AgY2hhbmdlZA0KCSAgICAgID0gaWYgTGlzdC5m
b2xkDQoJICAgICAgICAgICAoYmxvY2tzLA0KCQkgICAgZmFsc2UsDQoJCSAgICBmbiAoYmxvY2sg
YXMgQmxvY2suVCB7bGFiZWwsIHByb2ZpbGVJbmZvLA0KCQkJCQkgIHN0YXRlbWVudHMsIHRyYW5z
ZmVyfSwNCgkJCWNoYW5nZWQpDQoJCSAgICA9PiBsZXQNCgkJCSB2YWwge2xpdmUsLi4ufQ0KCQkJ
ICAgPSBsaXZlbmVzc1RyYW5zZmVyIHt0cmFuc2ZlciA9IHRyYW5zZmVyLA0KCQkJCQkgICAgICAg
bGl2ZUluZm8gPSBsaXZlSW5mb30NCg0KCQkJIHZhbCBsaXZlDQoJCQkgICA9IExpc3QuZm9sZHIN
CgkJCSAgICAgKHN0YXRlbWVudHMsDQoJCQkgICAgICBsaXZlLA0KCQkJICAgICAgZm4gKGFzbSxs
aXZlKQ0KCQkJICAgICAgID0+IGxldA0KCQkJCSAgICB2YWwge2xpdmUsLi4ufQ0KCQkJCSAgICAg
ID0gbGl2ZW5lc3NBc3NlbWJseSB7YXNzZW1ibHkgPSBhc20sDQoJCQkJCQkJICBsaXZlID0gbGl2
ZX0NCgkJCQkgIGluDQoJCQkJICAgIGxpdmUNCgkJCQkgIGVuZCkNCg0KCQkJIHZhbCBsaXZlJyAN
CgkJCSAgID0gY2FzZSBnZXQgbGFiZWwNCgkJCSAgICAgICBvZiBTT01FIGxpdmUnID0+IGxpdmUn
DQoJCQkgICAgICAgIHwgTk9ORSA9PiBbXQ0KCQkgICAgICAgaW4NCgkJCSBpZiBMaXN0LmVxdWFs
c0FzU2V0KGxpdmUsbGl2ZScsTWVtTG9jLmVxKQ0KCQkJICAgdGhlbiBjaGFuZ2VkDQoJCQkgICBl
bHNlIChzZXQobGFiZWwsIFNPTUUgbGl2ZSk7DQooKg0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJpbnQgIkxpdmVuZXNzOiB2ZXJpZnlMaXZlSW5mbzogIjsNCgkJCQkgcHJpbnQg
KExhYmVsLnRvU3RyaW5nIGxhYmVsKTsNCgkJCQkgcHJpbnQgIlxuIjsNCgkJCQkgcHJpbnQgImJh
Y2tlbmQ6ICI7DQoJCQkJIExpc3QuZm9yZWFjaA0KCQkJCSAobGl2ZScsDQoJCQkJICBmbiBtIA0K
CQkJCSAgID0+IChwcmludCAoTWVtTG9jLnRvU3RyaW5nIG0pOw0KCQkJCSAgICAgICBwcmludCAi
ICIpKTsNCgkJCQkgcHJpbnQgIlxuIjsNCgkJCQkgcHJpbnQgImNhbGN1bGF0ZWQ6ICI7DQoJCQkJ
IExpc3QuZm9yZWFjaA0KCQkJCSAobGl2ZSwNCgkJCQkgIGZuIG0gDQoJCQkJICAgPT4gKHByaW50
IChNZW1Mb2MudG9TdHJpbmcgbSk7DQoJCQkJICAgICAgIHByaW50ICIgIikpOw0KCQkJCSBwcmlu
dCAiXG4iOw0KKikNCgkJCQkgdHJ1ZSkNCgkJICAgICAgIGVuZCkNCgkJICB0aGVuIGxvb3AgdHJ1
ZQ0KCQkgIGVsc2UgY2hhbmdlZA0KDQogICAgICAgICAgICB2YWwgY2hhbmdlZCA9IGxvb3AgZmFs
c2UNCgkgIGluDQoJICAgIHtjaGFuZ2VkID0gY2hhbmdlZH0NCgkgIGVuZA0KKikNCg0KICAgICAg
dmFsICh2ZXJpZnlMaXZlSW5mbyA6DQoJICAge2Jsb2NrczogQmxvY2sudCBsaXN0LCANCgkgICAg
bGl2ZUluZm86IHtnZXQ6IExhYmVsLnQgLT4gTWVtTG9jLnQgbGlzdCwNCgkJICAgICAgIHNldDog
TGFiZWwudCAqIE1lbUxvYy50IGxpc3QgLT4gdW5pdH19IC0+DQoJICAge2NoYW5nZWQ6IGJvb2x9
LA0KCSAgIHZlcmlmeUxpdmVJbmZvX21zZykNCgk9IHRyYWNlcg0KICAgICAgICAgICJ2ZXJpZnlM
aXZlSW5mbyINCgkgIHZlcmlmeUxpdmVJbmZvDQogICAgZW5kDQoNCiAgc3RydWN0dXJlIExpdmVu
ZXNzQmxvY2sgPQ0KICAgIHN0cnVjdA0KDQogICAgICBkYXRhdHlwZSB0ID0gVCBvZiB7bGFiZWw6
IExhYmVsLnQsDQoJCQkgcHJvZmlsZUluZm86IFByb2ZpbGVJbmZvLnQsDQoJCQkgc3RhdGVtZW50
czogKEFzc2VtYmx5LnQgKiBMaXZlbmVzcy50KSBsaXN0LA0KCQkJIHRyYW5zZmVyOiBUcmFuc2Zl
ci50ICogTGl2ZW5lc3MudH0NCg0KICAgICAgZnVuIHRvU3RyaW5nIChUIHtsYWJlbCwgcHJvZmls
ZUluZm8sIHN0YXRlbWVudHMsIHRyYW5zZmVyfSkNCgk9IGNvbmNhdCBbTGFiZWwudG9TdHJpbmcg
bGFiZWwsDQoJCSAgIjpcbiIsDQoJCSAgTGlzdC5mb2xkDQoJCSAgKHN0YXRlbWVudHMsDQoJCSAg
ICIiLA0KCQkgICBmbiAoKGFzbSxpbmZvKSxzKQ0KCQkgICA9PiBjb25jYXQgW3MsDQoJCQkgICAg
ICBBc3NlbWJseS50b1N0cmluZyBhc20sDQoJCQkgICAgICAiXG4iLA0KCQkJICAgICAgTGl2ZW5l
c3MudG9TdHJpbmcgaW5mb10pLA0KCQkgIGxldA0KCQkgICAgdmFsICh0cmFucyxpbmZvKSA9IHRy
YW5zZmVyDQoJCSAgaW4NCgkJICAgIGNvbmNhdFtUcmFuc2Zlci50b1N0cmluZyB0cmFucywNCgkJ
CSAgICJcbiIsDQoJCQkgICBMaXZlbmVzcy50b1N0cmluZyBpbmZvXQ0KCQkgIGVuZF0NCg0KICAg
ICAgZnVuIHByaW50X2Jsb2NrIChUIHtsYWJlbCwgcHJvZmlsZUluZm8sIHN0YXRlbWVudHMsIHRy
YW5zZmVyfSkNCgk9IChwcmludCAoTGFiZWwudG9TdHJpbmcgbGFiZWwpOw0KCSAgIHByaW50ICI6
XG4iOw0KCSAgIExpc3QuZm9yZWFjaA0KCSAgIChzdGF0ZW1lbnRzLA0KCSAgICBmbiAoYXNtLGlu
Zm8pDQoJICAgICA9PiAocHJpbnQgKEFzc2VtYmx5LnRvU3RyaW5nIGFzbSk7DQoJCSBwcmludCAi
XG4iOw0KCQkgcHJpbnQgKExpdmVuZXNzLnRvU3RyaW5nIGluZm8pKSk7DQoJICAgbGV0DQoJICAg
ICB2YWwgKHRyYW5zLGluZm8pID0gdHJhbnNmZXINCgkgICBpbg0KCSAgICAgcHJpbnQgKFRyYW5z
ZmVyLnRvU3RyaW5nIHRyYW5zKTsNCgkgICAgIHByaW50ICJcbiI7DQoJICAgICBwcmludCAoTGl2
ZW5lc3MudG9TdHJpbmcgaW5mbykNCgkgICBlbmQpDQoNCiAgICAgIGZ1biB0b0xpdmVuZXNzU3Rh
dGVtZW50cyB7c3RhdGVtZW50cywNCgkJCQlsaXZlfQ0KCT0gbGV0DQoJICAgIHZhbCB7c3RhdGVt
ZW50cyxsaXZlfQ0KCSAgICAgID0gTGlzdC5mb2xkcihzdGF0ZW1lbnRzLA0KCQkJICAge3N0YXRl
bWVudHMgPSBbXSwgbGl2ZSA9IGxpdmV9LA0KCQkJICAgZm4gKGFzbSx7c3RhdGVtZW50cyxsaXZl
fSkNCgkJCSAgICA9PiBsZXQNCgkJCQkgdmFsIHtpbmZvLCBsaXZlfQ0KCQkJCSAgID0gTGl2ZW5l
c3MubGl2ZW5lc3NBc3NlbWJseSANCgkJCQkgICAgIHthc3NlbWJseSA9IGFzbSwNCgkJCQkgICAg
ICBsaXZlID0gbGl2ZX0NCgkJCSAgICAgICBpbg0KCQkJCSB7c3RhdGVtZW50cyA9IChhc20sIGlu
Zm8pOjpzdGF0ZW1lbnRzLCANCgkJCQkgIGxpdmUgPSBsaXZlfQ0KCQkJICAgICAgIGVuZCkNCgkg
IGluDQoJICAgIHtzdGF0ZW1lbnRzID0gc3RhdGVtZW50cywNCgkgICAgIGxpdmUgPSBsaXZlfQ0K
CSAgZW5kDQoNCiAgICAgIGZ1biByZUxpdmVuZXNzU3RhdGVtZW50cyB7c3RhdGVtZW50czogKEFz
c2VtYmx5LnQgKiBMaXZlbmVzcy50KSBsaXN0LA0KCQkJCWxpdmV9DQoJPSBsZXQNCgkgICAgdmFs
IHtzdGF0ZW1lbnRzLGxpdmUsLi4ufQ0KCSAgICAgID0gTGlzdC5mb2xkcihzdGF0ZW1lbnRzLA0K
CQkJICAge3N0YXRlbWVudHMgPSBbXSwgDQoJCQkgICAgbGl2ZSA9IGxpdmUsIA0KCQkJICAgIGNv
bnRpbnVlID0gZmFsc2V9LA0KCQkJICAgZm4gKChhc20saW5mbykse3N0YXRlbWVudHMsbGl2ZSxj
b250aW51ZX0pDQoJCQkgICA9PiBpZiBjb250aW51ZQ0KCQkJCXRoZW4ge3N0YXRlbWVudHMgPSAo
YXNtLGluZm8pOjpzdGF0ZW1lbnRzLA0KCQkJCSAgICAgIGxpdmUgPSBbXSwNCgkJCQkgICAgICBj
b250aW51ZSA9IGNvbnRpbnVlfQ0KCQkJCWVsc2UgbGV0DQoJCQkJICAgICAgIHZhbCB7aW5mbyA9
IGluZm8nLCBsaXZlID0gbGl2ZSd9DQoJCQkJCSA9IExpdmVuZXNzLmxpdmVuZXNzQXNzZW1ibHkg
DQoJCQkJCSAgIHthc3NlbWJseSA9IGFzbSwNCgkJCQkJICAgIGxpdmUgPSBsaXZlfQ0KCQkJCSAg
ICAgaW4NCgkJCQkgICAgICAge3N0YXRlbWVudHMgPSAoYXNtLCBpbmZvJyk6OnN0YXRlbWVudHMs
IA0KCQkJCQlsaXZlID0gbGl2ZScsDQoJCQkJCWNvbnRpbnVlID0gTGl2ZW5lc3MuZXEoaW5mbyxp
bmZvJyl9DQoJCQkJICAgICBlbmQpDQoJICBpbg0KCSAgICB7c3RhdGVtZW50cyA9IHN0YXRlbWVu
dHN9DQoJICBlbmQNCg0KICAgICAgZnVuIHRvTGl2ZW5lc3NUcmFuc2ZlciB7dHJhbnNmZXIsDQoJ
CQkgICAgICBsaXZlSW5mb30NCgk9IGxldA0KCSAgICB2YWwge2luZm8sIGxpdmV9DQoJICAgICAg
PSBMaXZlbmVzcy5saXZlbmVzc1RyYW5zZmVyIHt0cmFuc2ZlciA9IHRyYW5zZmVyLA0KCQkJCQkg
ICBsaXZlSW5mbyA9IGxpdmVJbmZvfQ0KCSAgaW4NCgkgICAge3RyYW5zZmVyID0gKHRyYW5zZmVy
LGluZm8pLA0KCSAgICAgbGl2ZSA9IGxpdmV9DQoJICBlbmQNCg0KICAgICAgZnVuIHJlTGl2ZW5l
c3NUcmFuc2ZlciB7dHJhbnNmZXI6IFRyYW5zZmVyLnQgKiBMaXZlbmVzcy50fQ0KCT0gbGV0DQoJ
ICAgIHZhbCAodHJhbnNmZXIse2xpdmVPdXQsLi4ufSkgPSB0cmFuc2Zlcg0KCSAgICB2YWwge2lu
Zm8sIGxpdmV9ID0gTGl2ZW5lc3MubGl2ZW5lc3NUcmFuc2Zlcicge3RyYW5zZmVyID0gdHJhbnNm
ZXIsDQoJCQkJCQkJICAgbGl2ZSA9IGxpdmVPdXR9DQoJICBpbg0KCSAgICB7dHJhbnNmZXIgPSAo
dHJhbnNmZXIsIGluZm8pLA0KCSAgICAgbGl2ZSA9IGxpdmV9DQoJICBlbmQNCg0KICAgICAgZnVu
IHRvTGl2ZW5lc3NCbG9jayB7YmxvY2sgYXMgQmxvY2suVCB7bGFiZWwsIHByb2ZpbGVJbmZvLA0K
CQkJCQkgICAgIHN0YXRlbWVudHMsIHRyYW5zZmVyfSwNCgkJCSAgIGxpdmVJbmZvIDoge2dldDog
TGFiZWwudCAtPiBNZW1Mb2MudCBsaXN0LA0KCQkJCSAgICAgICBzZXQ6IExhYmVsLnQgKiBNZW1M
b2MudCBsaXN0IC0+IHVuaXR9fQ0KDQoJPSBsZXQNCgkgICAgdmFsIHt0cmFuc2ZlciwgbGl2ZX0N
CgkgICAgICA9IHRvTGl2ZW5lc3NUcmFuc2ZlciB7dHJhbnNmZXIgPSB0cmFuc2ZlciwNCgkJCQkg
ICAgbGl2ZUluZm8gPSBsaXZlSW5mb30NCg0KCSAgICB2YWwge3N0YXRlbWVudHMsIGxpdmV9DQoJ
ICAgICAgPSB0b0xpdmVuZXNzU3RhdGVtZW50cyB7c3RhdGVtZW50cyA9c3RhdGVtZW50cywNCgkJ
CQkgICAgICBsaXZlID0gbGl2ZX0NCg0KCSAgICB2YWwgbGl2ZW5lc3NfYmxvY2sNCgkgICAgICA9
IFQge2xhYmVsID0gbGFiZWwsDQoJCSAgIHByb2ZpbGVJbmZvID0gcHJvZmlsZUluZm8sDQoJCSAg
IHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzLA0KCQkgICB0cmFuc2ZlciA9IHRyYW5zZmVyfQ0KCSAg
aW4gDQoJICAgIGxpdmVuZXNzX2Jsb2NrDQoJICBlbmQNCg0KICAgICAgdmFsICh0b0xpdmVuZXNz
QmxvY2s6DQoJICAge2Jsb2NrOiBCbG9jay50LA0KCSAgICBsaXZlSW5mbzoge2dldDogTGFiZWwu
dCAtPiBNZW1Mb2MudCBsaXN0LA0KCSAgICAgICAgICAgICAgIHNldDogTGFiZWwudCAqIE1lbUxv
Yy50IGxpc3QgLT4gdW5pdH19IC0+DQoJICAgdCwNCgkgICB0b0xpdmVuZXNzQmxvY2tfbXNnKQ0K
CT0gdHJhY2VyDQoJICAidG9MaXZlbmVzc0Jsb2NrIg0KICAgICAgICAgIHRvTGl2ZW5lc3NCbG9j
aw0KDQogICAgICBmdW4gdmVyaWZ5TGl2ZW5lc3NTdGF0ZW1lbnRzIHtzdGF0ZW1lbnRzLA0KCQkJ
CSAgICBsaXZlfQ0KCT0gTGlzdC5mb2xkcihzdGF0ZW1lbnRzLA0KCQkgICAgIHt2ZXJpZmllZCA9
IHRydWUsIGxpdmUgPSBsaXZlfSwNCgkJICAgICBmbiAoKGFzbSxpbmZvKSx7dmVyaWZpZWQsIGxp
dmV9KQ0KCQkgICAgICA9PiBsZXQNCgkJCSAgIHZhbCB7aW5mbyA9IGluZm8nLCBsaXZlfQ0KCQkJ
ICAgICA9IExpdmVuZXNzLmxpdmVuZXNzQXNzZW1ibHkgDQoJCQkgICAgICAge2Fzc2VtYmx5ID0g
YXNtLA0KCQkJCWxpdmUgPSBsaXZlfQ0KCQkJIGluDQoJCQkgICB7dmVyaWZpZWQgPSB2ZXJpZmll
ZCBhbmRhbHNvIA0KCQkJICAgICAgICAgICAgICAgTGl2ZW5lc3MuZXEoaW5mbywgaW5mbycpLCAN
CgkJCSAgICBsaXZlID0gbGl2ZX0NCgkJCSBlbmQpDQoNCiAgICAgIGZ1biB2ZXJpZnlMaXZlbmVz
c1RyYW5zZmVyIHt0cmFuc2ZlciA9ICh0cmFuc2ZlcixpbmZvKSwNCgkJCQkgIGxpdmVJbmZvfQ0K
CT0gbGV0DQoJICAgIHZhbCB7aW5mbyA9IGluZm8nLCBsaXZlfQ0KCSAgICAgID0gTGl2ZW5lc3Mu
bGl2ZW5lc3NUcmFuc2ZlciB7dHJhbnNmZXIgPSB0cmFuc2ZlciwNCgkJCQkJICAgbGl2ZUluZm8g
PSBsaXZlSW5mb30NCgkgIGluDQoJICAgIHt2ZXJpZmllZCA9IExpdmVuZXNzLmVxKGluZm8sIGlu
Zm8nKSwNCgkgICAgIGxpdmUgPSBsaXZlfQ0KCSAgZW5kDQoNCiAgICAgIGZ1biB2ZXJpZnlMaXZl
bmVzc0Jsb2NrIHtibG9jayBhcyBUIHtsYWJlbCwgcHJvZmlsZUluZm8sDQoJCQkJCSAgIHN0YXRl
bWVudHMsIHRyYW5zZmVyfSwNCgkJCSAgICAgICBsaXZlSW5mbyANCgkJCSAgICAgICBhcyB7Z2V0
OiBMYWJlbC50IC0+IE1lbUxvYy50IGxpc3QsDQoJCQkJICAgc2V0OiBMYWJlbC50ICogTWVtTG9j
LnQgbGlzdCAtPiB1bml0fX0NCgk9IGxldA0KCSAgICB2YWwge3ZlcmlmaWVkID0gdmVyaWZpZWRf
dHJhbnNmZXIsDQoJCSBsaXZlfQ0KCSAgICAgID0gdmVyaWZ5TGl2ZW5lc3NUcmFuc2ZlciB7dHJh
bnNmZXIgPSB0cmFuc2ZlciwNCgkJCQkJbGl2ZUluZm8gPSBsaXZlSW5mb30NCg0KCSAgICB2YWwg
e3ZlcmlmaWVkID0gdmVyaWZpZWRfc3RhdGVtZW50cywNCgkJIGxpdmV9DQoJICAgICAgPSB2ZXJp
ZnlMaXZlbmVzc1N0YXRlbWVudHMge3N0YXRlbWVudHMgPXN0YXRlbWVudHMsDQoJCQkJCSAgbGl2
ZSA9IGxpdmV9DQoNCigqDQoJICAgIHZhbCBsaXZlJyA9IGdldCBsYWJlbA0KDQoJICAgIHZhbCB2
ZXJpZmllZF9saXZlID0gTGlzdC5lcXVhbHNBc1NldChsaXZlLCBsaXZlJywgTWVtTG9jLmVxKQ0K
KikNCgkgICAgdmFsIHZlcmlmaWVkX2xpdmUgPSB0cnVlDQoJICBpbiANCgkgICAgdmVyaWZpZWRf
dHJhbnNmZXIgYW5kYWxzbyANCgkgICAgdmVyaWZpZWRfc3RhdGVtZW50cyBhbmRhbHNvDQoJICAg
IHZlcmlmaWVkX2xpdmUNCgkgIGVuZA0KDQogICAgICB2YWwgKHZlcmlmeUxpdmVuZXNzQmxvY2s6
DQoJICAge2Jsb2NrOiB0LA0KCSAgICBsaXZlSW5mbzoge2dldDogTGFiZWwudCAtPiBNZW1Mb2Mu
dCBsaXN0LA0KCSAgICAgICAgICAgICAgIHNldDogTGFiZWwudCAqIE1lbUxvYy50IGxpc3QgLT4g
dW5pdH19IC0+DQoJICAgYm9vbCwNCgkgICB2ZXJpZnlMaXZlbmVzc0Jsb2NrX21zZykNCgk9IHRy
YWNlcg0KCSAgInZlcmlmeUxpdmVuZXNzQmxvY2siDQogICAgICAgICAgdmVyaWZ5TGl2ZW5lc3NC
bG9jaw0KDQogICAgICBmdW4gdG9CbG9jayAoVCB7bGFiZWwsIHByb2ZpbGVJbmZvLCBzdGF0ZW1l
bnRzLCB0cmFuc2Zlcn0pDQoJPSBsZXQNCgkgICAgdmFsIHN0YXRlbWVudHMgPSBMaXN0Lm1hcChz
dGF0ZW1lbnRzLCBmbiAoYXNtLGluZm8pID0+IGFzbSkNCgkgICAgdmFsICh0cmFuc2ZlcixpbmZv
KSA9IHRyYW5zZmVyDQoJICBpbiANCgkgICAgQmxvY2suVCB7bGFiZWwgPSBsYWJlbCwNCgkJICAg
ICBwcm9maWxlSW5mbyA9IHByb2ZpbGVJbmZvLA0KCQkgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1l
bnRzLA0KCQkgICAgIHRyYW5zZmVyID0gdHJhbnNmZXJ9DQoJICBlbmQNCg0KICAgICAgdmFsICh0
b0Jsb2NrOiB0IC0+IEJsb2NrLnQsIA0KCSAgIHRvQmxvY2tfbXNnKQ0KCT0gdHJhY2VyDQoJICAi
dG9CbG9jayINCiAgICAgICAgICB0b0Jsb2NrDQogICAgZW5kDQoNCiAgc3RydWN0dXJlIE1vdmVI
b2lzdExpdmVuZXNzQmxvY2sgPSANCiAgICBzdHJ1Y3QNCiAgICAgIGZ1biBtb3ZlSG9pc3Qge2Js
b2NrIGFzIExpdmVuZXNzQmxvY2suVCANCgkJICAgICAgICAgICAgICB7bGFiZWwsIHByb2ZpbGVJ
bmZvLCBzdGF0ZW1lbnRzLCB0cmFuc2Zlcn19DQoJPSBsZXQNCgkgICAgdmFsIHt0cmFuc2Zlcixs
aXZlfSANCgkgICAgICA9IExpdmVuZXNzQmxvY2sucmVMaXZlbmVzc1RyYW5zZmVyIHt0cmFuc2Zl
ciA9IHRyYW5zZmVyfQ0KDQoJICAgIHZhbCB7c3RhdGVtZW50cywgY2hhbmdlZCwgbW92ZXMsIGxp
dmV9DQoJICAgICAgPSBMaXN0LmZvbGRyDQoJICAgICAgICAoc3RhdGVtZW50cywNCgkJIHtzdGF0
ZW1lbnRzID0gW10sDQoJCSAgY2hhbmdlZCA9IGZhbHNlLA0KCQkgIG1vdmVzID0gW10sDQoJCSAg
bGl2ZSA9IGxpdmV9LA0KCQkgZm4gKChhc20saW5mbyBhcyB7ZGVhZCwuLi59KSwNCgkJICAgICB7
c3RhdGVtZW50cyxjaGFuZ2VkLG1vdmVzLGxpdmV9KQ0KCQkgID0+IGxldA0KCQkgICAgICAgZnVu
IGRlZmF1bHQgKCkNCgkJCSA9IGxldA0KCQkJICAgICB2YWwge3VzZXMsZGVmcywuLi59ID0gQXNz
ZW1ibHkudXNlc19kZWZzX2tpbGxzIGFzbQ0KDQoJCQkgICAgIHZhbCBiYXNlVXNlcw0KCQkJICAg
ICAgID0gTGlzdC5mb2xkDQoJCQkgICAgICAgICAodXNlcywNCgkJCQkgIFtdLA0KCQkJCSAgZm4g
KG9wZXJhbmQsYmFzZVVzZXMpDQoJCQkJICAgPT4gY2FzZSBPcGVyYW5kLmRlTWVtbG9jIG9wZXJh
bmQNCgkJCQkJb2YgU09NRSBtZW1sb2MNCgkJCQkJID0+IGlmIExpc3QuY29udGFpbnMNCgkJCQkJ
ICAgICAgIChiYXNlVXNlcywNCgkJCQkJCW1lbWxvYywNCgkJCQkJCU1lbUxvYy5lcSkNCgkJCQkJ
ICAgICAgdGhlbiBiYXNlVXNlcw0KCQkJCQkgICAgICBlbHNlIG1lbWxvYzo6YmFzZVVzZXMNCgkJ
CQkgICAgICAgICB8IE5PTkUgPT4gYmFzZVVzZXMpDQoJCQkgICAgIHZhbCBiYXNlRGVmcw0KCQkJ
ICAgICAgID0gTGlzdC5mb2xkDQoJCQkgICAgICAgICAoZGVmcywNCgkJCQkgIFtdLA0KCQkJCSAg
Zm4gKG9wZXJhbmQsYmFzZURlZnMpDQoJCQkJICAgPT4gY2FzZSBPcGVyYW5kLmRlTWVtbG9jIG9w
ZXJhbmQNCgkJCQkJb2YgU09NRSBtZW1sb2MNCgkJCQkJID0+IGlmIExpc3QuY29udGFpbnMNCgkJ
CQkJICAgICAgIChiYXNlRGVmcywNCgkJCQkJCW1lbWxvYywNCgkJCQkJCU1lbUxvYy5lcSkNCgkJ
CQkJICAgICAgdGhlbiBiYXNlRGVmcw0KCQkJCQkgICAgICBlbHNlIG1lbWxvYzo6YmFzZURlZnMN
CgkJCQkgICAgICAgICB8IE5PTkUgPT4gYmFzZURlZnMpDQoNCgkJCSAgICAgdmFsIGFsbFVzZXMN
CgkJCSAgICAgICA9IGxldA0KCQkJCSAgIGZ1biBkb2l0KG1lbWxvY3MsYWxsVXNlcykNCgkJCQkg
ICAgID0gTGlzdC5mb2xkDQoJCQkJICAgICAgIChtZW1sb2NzLA0KCQkJCQlhbGxVc2VzLA0KCQkJ
CQlmbiAobWVtbG9jLGFsbFVzZXMpDQoJCQkJCSA9PiBMaXN0LmZvbGQNCgkJCQkJICAgIChNZW1M
b2MudXRpbGl6ZWQgbWVtbG9jLA0KCQkJCQkgICAgIGFsbFVzZXMsDQoJCQkJCSAgICAgZm4gKG1l
bWxvYyxhbGxVc2VzKQ0KCQkJCQkgICAgICA9PiBpZiBMaXN0LmNvbnRhaW5zDQoJCQkJCSAgICAg
ICAgICAgIChhbGxVc2VzLA0KCQkJCQkJICAgICBtZW1sb2MsDQoJCQkJCQkgICAgIE1lbUxvYy5l
cSkNCgkJCQkJCSAgIHRoZW4gYWxsVXNlcw0KCQkJCQkJICAgZWxzZSBtZW1sb2M6OmFsbFVzZXMp
KQ0KCQkJCSBpbg0KCQkJCSAgIGRvaXQoYmFzZURlZnMsDQoJCQkJICAgZG9pdChiYXNlVXNlcywN
CgkJCQkJYmFzZVVzZXMpKQ0KCQkJCSBlbmQNCgkJCSAgICAgdmFsIGFsbERlZnMgPSBiYXNlRGVm
cw0KDQoJCQkgICAgIHZhbCB7Zm9yY2VzLA0KCQkJCSAgbW92ZXMsDQoJCQkJICAuLi59DQoJCQkg
ICAgICAgPSBMaXN0LmZvbGQNCgkJCSAgICAgICAgIChtb3ZlcywNCgkJCQkgIHtmb3JjZXMgPSBb
XSwNCgkJCQkgICBtb3ZlcyA9IFtdLA0KCQkJCSAgIGFsbFVzZXMgPSBhbGxVc2VzLA0KCQkJCSAg
IGFsbERlZnMgPSBhbGxEZWZzfSwNCgkJCQkgIGZuIChtb3ZlIGFzIHtzcmMsZHN0LC4uLn0sDQoJ
CQkJICAgICAge2ZvcmNlcywNCgkJCQkgICAgICAgbW92ZXMsDQoJCQkJICAgICAgIGFsbFVzZXMs
DQoJCQkJICAgICAgIGFsbERlZnN9KQ0KCQkJCSAgID0+IGxldA0KCQkJCQl2YWwgdXRpbGl6ZWRf
c3JjDQoJCQkJCSAgPSBNZW1Mb2MudXRpbGl6ZWQgc3JjDQoJCQkJCXZhbCB1dGlsaXplZF9kc3QN
CgkJCQkJICA9IE1lbUxvYy51dGlsaXplZCBkc3QNCgkJCQkgICAgICBpbiANCgkJCQkJaWYgTGlz
dC5leGlzdHMNCgkJCQkgICAgICAgICAgIChhbGxEZWZzLA0KCQkJCQkgICAgZm4gbWVtbG9jJw0K
CQkJCQkgICAgID0+IExpc3QuZXhpc3RzDQoJCQkJCSAgICAgICAgKHNyYzo6dXRpbGl6ZWRfc3Jj
LA0KCQkJCQkJIGZuIG1lbWxvYycnIA0KCQkJCQkJICA9PiBNZW1Mb2MubWF5QWxpYXMNCgkJCQkJ
CSAgICAgKG1lbWxvYycsIG1lbWxvYycnKSkpDQoJCQkJCSAgIG9yZWxzZQ0KCQkJCQkgICBMaXN0
LmV4aXN0cw0KCQkJCQkgICAoYWxsRGVmcywNCgkJCQkJICAgIGZuIG1lbWxvYycNCgkJCQkJICAg
ICA9PiBMaXN0LmV4aXN0cw0KCQkJCQkgICAgICAgIChkc3Q6OnV0aWxpemVkX2RzdCwNCgkJCQkJ
CSBmbiBtZW1sb2MnJyANCgkJCQkJCSAgPT4gTWVtTG9jLm1heUFsaWFzDQoJCQkJCQkgICAgICht
ZW1sb2MnLCBtZW1sb2MnJykpKQ0KCQkJCQkgICBvcmVsc2UNCgkJCQkJICAgTGlzdC5leGlzdHMN
CgkJCQkJICAgKGFsbFVzZXMsDQoJCQkJCSAgICBmbiBtZW1sb2MnDQoJCQkJCSAgICAgPT4gTWVt
TG9jLm1heUFsaWFzDQoJCQkJCSAgICAgICAgKG1lbWxvYycsZHN0KSANCgkJCQkJCW9yZWxzZQ0K
CQkJCQkJTWVtTG9jLm1heUFsaWFzDQoJCQkJCQkobWVtbG9jJyxzcmMpKQ0KCQkJCQkgIHRoZW4g
e2ZvcmNlcyA9IG1vdmU6OmZvcmNlcywNCgkJCQkJCW1vdmVzID0gbW92ZXMsDQoJCQkJCQlhbGxV
c2VzDQoJCQkJCQk9IHNyYzo6KExpc3QuY29uY2F0DQoJCQkJCQkJW3V0aWxpemVkX3NyYywNCgkJ
CQkJCQkgdXRpbGl6ZWRfZHN0LA0KCQkJCQkJCSBhbGxVc2VzXSksDQoJCQkJCQlhbGxEZWZzIA0K
CQkJCQkJPSBkc3Q6OmFsbERlZnN9DQoJCQkJCSAgZWxzZSB7Zm9yY2VzID0gZm9yY2VzLA0KCQkJ
CQkJbW92ZXMgPSBtb3ZlOjptb3ZlcywNCgkJCQkJCWFsbFVzZXMgPSBhbGxVc2VzLA0KCQkJCQkJ
YWxsRGVmcyA9IGFsbERlZnN9DQoJCQkJICAgICAgZW5kKQ0KDQoJCQkgICAgIHZhbCBtb3ZlcyAN
CgkJCSAgICAgICA9IExpc3QucmV2TWFwDQoJCQkgICAgICAgICAobW92ZXMsDQoJCQkJICBmbiBt
b3ZlIGFzIHtzcmMsZHN0LHNpemUsYWdlfQ0KCQkJCSAgID0+IHtzcmMgPSBzcmMsDQoJCQkJICAg
ICAgIGRzdCA9IGRzdCwNCgkJCQkgICAgICAgc2l6ZSA9IHNpemUsDQoJCQkJICAgICAgIGFnZSA9
IGFnZSArIDF9KQ0KCQkJICAgICAgIA0KCQkJICAgICB2YWwgc3RhdGVtZW50c19mb3JjZXMNCgkJ
CSAgICAgICA9IExpc3QucmV2TWFwDQoJCQkgICAgICAgICAoZm9yY2VzLA0KCQkJCSAgZm4gZm9y
Y2UgYXMge3NyYyxkc3Qsc2l6ZSwuLi59DQoJCQkJICAgPT4gKGNhc2UgU2l6ZS5jbGFzcyBzaXpl
DQoJCQkJCSBvZiBTaXplLklOVA0KCQkJCQkgID0+IEFzc2VtYmx5Lmluc3RydWN0aW9uX21vdg0K
CQkJCQkgICAgIHtzcmMgPSBPcGVyYW5kLm1lbWxvYyBzcmMsDQoJCQkJCSAgICAgIGRzdCA9IE9w
ZXJhbmQubWVtbG9jIGRzdCwNCgkJCQkJICAgICAgc2l6ZSA9IHNpemV9DQoJCQkJCSAgfCBfDQoJ
CQkJCSAgPT4gQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fcGZtb3YNCgkJCQkJICAgICB7c3JjID0gT3Bl
cmFuZC5tZW1sb2Mgc3JjLA0KCQkJCQkgICAgICBkc3QgPSBPcGVyYW5kLm1lbWxvYyBkc3QsDQoJ
CQkJCSAgICAgIHNpemUgPSBzaXplfSkpDQoNCgkJCSAgICAgdmFsIHtzdGF0ZW1lbnRzID0gc3Rh
dGVtZW50c19hc21fZm9yY2VzLA0KCQkJCSAgbGl2ZX0NCgkJCSAgICAgICA9IExpdmVuZXNzQmxv
Y2sudG9MaXZlbmVzc1N0YXRlbWVudHMNCgkJCSAgICAgICAgIHtzdGF0ZW1lbnRzID0gYXNtOjpz
dGF0ZW1lbnRzX2ZvcmNlcywNCgkJCQkgIGxpdmUgPSBsaXZlfQ0KCQkJICAgaW4NCgkJCSAgICAg
e3N0YXRlbWVudHMgDQoJCQkgICAgICA9IExpc3QuY29uY2F0DQoJCQkgICAgICAgIFtzdGF0ZW1l
bnRzX2FzbV9mb3JjZXMsDQoJCQkJIHN0YXRlbWVudHNdLA0KCQkJICAgICAgY2hhbmdlZCANCgkJ
CSAgICAgID0gY2hhbmdlZCANCgkJCSAgICAgICAgb3JlbHNlDQoJCQkJTGlzdC5leGlzdHMoZm9y
Y2VzLA0KCQkJCQkgICAgZm4gZm9yY2UgYXMge2FnZSwuLi59DQoJCQkJCSAgICAgPT4gYWdlIDw+
IDApLA0KCQkJICAgICAgbW92ZXMgPSBtb3ZlcywNCgkJCSAgICAgIGxpdmUgPSBsaXZlfQ0KCQkJ
ICAgZW5kDQoNCgkJICAgICAgIGZ1biBmb3JjZSAoKQ0KCQkJID0gbGV0DQoJCQkgICAgIHZhbCBm
b3JjZXMgPSBtb3Zlcw0KCQkJICAgICB2YWwgc3RhdGVtZW50c19mb3JjZXMNCgkJCSAgICAgICA9
IExpc3QubWFwDQoJCQkgICAgICAgICAoZm9yY2VzLA0KCQkJCSAgZm4gZm9yY2UgYXMge3NyYyxk
c3Qsc2l6ZSwuLi59DQoJCQkJICAgPT4gKGNhc2UgU2l6ZS5jbGFzcyBzaXplDQoJCQkJCSBvZiBT
aXplLklOVA0KCQkJCQkgID0+IEFzc2VtYmx5Lmluc3RydWN0aW9uX21vdg0KCQkJCQkgICAgIHtz
cmMgPSBPcGVyYW5kLm1lbWxvYyBzcmMsDQoJCQkJCSAgICAgIGRzdCA9IE9wZXJhbmQubWVtbG9j
IGRzdCwNCgkJCQkJICAgICAgc2l6ZSA9IHNpemV9DQoJCQkJCSAgfCBfDQoJCQkJCSAgPT4gQXNz
ZW1ibHkuaW5zdHJ1Y3Rpb25fcGZtb3YNCgkJCQkJICAgICB7c3JjID0gT3BlcmFuZC5tZW1sb2Mg
c3JjLA0KCQkJCQkgICAgICBkc3QgPSBPcGVyYW5kLm1lbWxvYyBkc3QsDQoJCQkJCSAgICAgIHNp
emUgPSBzaXplfSkpDQoJCQkJIA0KCQkJICAgICB2YWwge3N0YXRlbWVudHMgPSBzdGF0ZW1lbnRz
X2FzbV9mb3JjZXMsDQoJCQkJICBsaXZlfQ0KCQkJICAgICAgID0gTGl2ZW5lc3NCbG9jay50b0xp
dmVuZXNzU3RhdGVtZW50cw0KCQkJICAgICAgICAge3N0YXRlbWVudHMgPSBhc206OnN0YXRlbWVu
dHNfZm9yY2VzLA0KCQkJCSAgbGl2ZSA9IGxpdmV9DQoJCQkgICBpbg0KCQkJICAgICB7c3RhdGVt
ZW50cyANCgkJCSAgICAgID0gTGlzdC5jb25jYXQNCgkJCSAgICAgICAgW3N0YXRlbWVudHNfYXNt
X2ZvcmNlcywNCgkJCQkgc3RhdGVtZW50c10sDQoJCQkgICAgICBjaGFuZ2VkID0gY2hhbmdlZA0K
CQkJICAgICAgICAgICAgICAgIG9yZWxzZQ0KCQkJCQlMaXN0LmV4aXN0cyhmb3JjZXMsDQoJCQkJ
CQkgICAgZm4gZm9yY2UgYXMge2FnZSwuLi59DQoJCQkJCQkgICAgID0+IGFnZSA8PiAwKSwNCgkJ
CSAgICAgIG1vdmVzID0gW10sDQoJCQkgICAgICBsaXZlID0gbGl2ZX0NCgkJCSAgIGVuZA0KCQkg
ICAgIGluDQoJCSAgICAgICBjYXNlIGFzbQ0KCQkJIG9mIEFzc2VtYmx5Lkluc3RydWN0aW9uIA0K
CQkJICAgIChJbnN0cnVjdGlvbi5NT1YNCgkJCSAgICAge3NyYyBhcyBPcGVyYW5kLk1lbUxvYyBt
ZW1sb2Nfc3JjLA0KCQkJICAgICAgZHN0IGFzIE9wZXJhbmQuTWVtTG9jIG1lbWxvY19kc3QsDQoJ
CQkgICAgICBzaXplfSkNCgkJCSAgPT4gaWYgTGlzdC5jb250YWlucyhkZWFkLA0KCQkJCQkgICAg
ICBtZW1sb2Nfc3JjLA0KCQkJCQkgICAgICBNZW1Mb2MuZXEpDQoJCQkgICAgICAgIG9yZWxzZQ0K
CQkJCUxpc3QuZXhpc3RzKG1vdmVzLA0KCQkJCQkgICAgZm4ge3NyYywuLi59DQoJCQkJCSAgICAg
PT4gTWVtTG9jLmVxKG1lbWxvY19zcmMsc3JjKSkNCgkJCSAgICAgICB0aGVuIHtzdGF0ZW1lbnRz
ID0gc3RhdGVtZW50cywNCgkJCQkgICAgIGNoYW5nZWQgPSBjaGFuZ2VkLA0KCQkJCSAgICAgbW92
ZXMgPSB7c3JjID0gbWVtbG9jX3NyYywNCgkJCQkJICAgICAgZHN0ID0gbWVtbG9jX2RzdCwNCgkJ
CQkJICAgICAgc2l6ZSA9IHNpemUsDQoJCQkJCSAgICAgIGFnZSA9IDB9Ojptb3ZlcywNCgkJCQkg
ICAgIGxpdmUgPSBsaXZlfQ0KCQkJICAgICAgIGVsc2UgZGVmYXVsdCAoKQ0KCQkJICB8IEFzc2Vt
Ymx5Lkluc3RydWN0aW9uIA0KCQkJICAgIChJbnN0cnVjdGlvbi5wRk1PVg0KCQkJICAgICB7c3Jj
IGFzIE9wZXJhbmQuTWVtTG9jIG1lbWxvY19zcmMsDQoJCQkgICAgICBkc3QgYXMgT3BlcmFuZC5N
ZW1Mb2MgbWVtbG9jX2RzdCwNCgkJCSAgICAgIHNpemV9KQ0KCQkJICA9PiBpZiBMaXN0LmNvbnRh
aW5zKGRlYWQsDQoJCQkJCSAgICAgIG1lbWxvY19zcmMsDQoJCQkJCSAgICAgIE1lbUxvYy5lcSkN
CgkJCSAgICAgICAgb3JlbHNlDQoJCQkJTGlzdC5leGlzdHMobW92ZXMsDQoJCQkJCSAgICBmbiB7
c3JjLC4uLn0NCgkJCQkJICAgICA9PiBNZW1Mb2MuZXEobWVtbG9jX3NyYyxzcmMpKQ0KCQkJICAg
ICAgIHRoZW4ge3N0YXRlbWVudHMgPSBzdGF0ZW1lbnRzLA0KCQkJCSAgICAgY2hhbmdlZCA9IGNo
YW5nZWQsDQoJCQkJICAgICBtb3ZlcyA9IHtzcmMgPSBtZW1sb2Nfc3JjLA0KCQkJCQkgICAgICBk
c3QgPSBtZW1sb2NfZHN0LA0KCQkJCQkgICAgICBzaXplID0gc2l6ZSwNCgkJCQkJICAgICAgYWdl
ID0gMH06Om1vdmVzLA0KCQkJCSAgICAgbGl2ZSA9IGxpdmV9DQoJCQkgICAgICAgZWxzZSBkZWZh
dWx0ICgpDQoJCQkgIHwgXyA9PiBkZWZhdWx0ICgpDQoJCSAgICAgZW5kKQ0KDQoJICAgIHZhbCBm
b3JjZXMgPSBtb3Zlcw0KCSAgICB2YWwgc3RhdGVtZW50c19mb3JjZXMNCgkgICAgICA9IExpc3Qu
bWFwDQoJICAgICAgICAoZm9yY2VzLA0KCQkgZm4gbW92ZSBhcyB7c3JjLGRzdCxzaXplLC4uLn0N
CgkJICA9PiAoY2FzZSBTaXplLmNsYXNzIHNpemUNCgkJCW9mIFNpemUuSU5UDQoJCQkgPT4gQXNz
ZW1ibHkuaW5zdHJ1Y3Rpb25fbW92DQoJCQkgICAge3NyYyA9IE9wZXJhbmQubWVtbG9jIHNyYywN
CgkJCSAgICAgZHN0ID0gT3BlcmFuZC5tZW1sb2MgZHN0LA0KCQkJICAgICBzaXplID0gc2l6ZX0N
CgkJCSB8IF8NCgkJCSA9PiBBc3NlbWJseS5pbnN0cnVjdGlvbl9wZm1vdg0KCQkJICAgIHtzcmMg
PSBPcGVyYW5kLm1lbWxvYyBzcmMsDQoJCQkgICAgIGRzdCA9IE9wZXJhbmQubWVtbG9jIGRzdCwN
CgkJCSAgICAgc2l6ZSA9IHNpemV9KSkNCgkgICAgdmFsIHtzdGF0ZW1lbnRzID0gc3RhdGVtZW50
c19mb3JjZXMsDQoJCSBsaXZlfQ0KCSAgICAgID0gTGl2ZW5lc3NCbG9jay50b0xpdmVuZXNzU3Rh
dGVtZW50cw0KCSAgICAgICAge3N0YXRlbWVudHMgPSBzdGF0ZW1lbnRzX2ZvcmNlcywNCgkJIGxp
dmUgPSBsaXZlfQ0KCSAgICB2YWwgc3RhdGVtZW50cyA9IExpc3QuY29uY2F0IFtzdGF0ZW1lbnRz
X2ZvcmNlcywgDQoJCQkJCSAgc3RhdGVtZW50c10NCgkgICAgdmFsIGNoYW5nZWQgPSBjaGFuZ2Vk
DQoJICAgICAgICAgICAgICAgICAgb3JlbHNlDQoJCQkgIExpc3QuZXhpc3RzKGZvcmNlcywNCgkJ
CQkgICAgICBmbiBmb3JjZSBhcyB7YWdlLC4uLn0NCgkJCQkgICAgICAgPT4gYWdlIDw+IDApDQoJ
ICAgIHZhbCBibG9jayA9IExpdmVuZXNzQmxvY2suVCB7bGFiZWwgPSBsYWJlbCwNCgkJCQkJIHBy
b2ZpbGVJbmZvID0gcHJvZmlsZUluZm8sDQoJCQkJCSBzdGF0ZW1lbnRzID0gc3RhdGVtZW50cywN
CgkJCQkJIHRyYW5zZmVyID0gdHJhbnNmZXJ9DQoJICBpbg0KCSAgICB7YmxvY2sgPSBibG9jaywN
CgkgICAgIGNoYW5nZWQgPSBjaGFuZ2VkfQ0KCSAgZW5kDQoNCiAgICAgIHZhbCAobW92ZUhvaXN0
OiANCgkgICB7YmxvY2s6IExpdmVuZXNzQmxvY2sudH0gLT4gDQoJICAge2Jsb2NrOiBMaXZlbmVz
c0Jsb2NrLnQsIA0KCSAgICBjaGFuZ2VkOiBib29sfSwNCgkgICBtb3ZlSG9pc3RfbXNnKQ0KCT0g
dHJhY2VyDQoJICAibW92ZUhvaXN0Ig0KCSAgbW92ZUhvaXN0DQogICAgZW5kDQoNCiAgc3RydWN0
dXJlIENvcHlQcm9wYWdhdGVMaXZlbmVzc0Jsb2NrID0NCiAgICBzdHJ1Y3QNCiAgICAgIGZ1biBj
b3B5UHJvcGFnYXRlJyB7c3JjLA0KCQkJICBkc3QgYXMgT3BlcmFuZC5NZW1Mb2MgbWVtbG9jX2Rz
dCwNCgkJCSAgYmxvY2sgYXMgTGl2ZW5lc3NCbG9jay5UIHtsYWJlbCwNCgkJCQkJCSAgICBwcm9m
aWxlSW5mbywNCgkJCQkJCSAgICBzdGF0ZW1lbnRzLA0KCQkJCQkJICAgIHRyYW5zZmVyfSwNCgkJ
CSAgbGl2ZUluZm99DQoJPSBsZXQNCgkgICAgdmFsIGNoYW5nZWQgPSByZWYgMA0KCSAgICB2YWwg
KGFsbCxyZXBsYWNlcikNCgkgICAgICA9IGNhc2Ugc3JjDQoJCSAgb2YgT3BlcmFuZC5NZW1Mb2Mg
bWVtbG9jX3NyYw0KCQkgICA9PiBsZXQNCgkJCXZhbCBhbGwNCgkJCSAgPSBsZXQNCgkJCSAgICAg
IGZ1biBkb2l0IChtZW1sb2NzLCBhbGwpDQoJCQkJPSBMaXN0LmZvbGQNCgkJCQkgIChtZW1sb2Nz
LA0KCQkJCSAgIGFsbCwNCgkJCQkgICBmbiAobWVtbG9jLGFsbCkNCgkJCQkgICAgPT4gaWYgTGlz
dC5jb250YWlucyhhbGwsDQoJCQkJCQkJbWVtbG9jLA0KCQkJCQkJCU1lbUxvYy5lcSkNCgkJCQkJ
IHRoZW4gYWxsDQoJCQkJCSBlbHNlIG1lbWxvYzo6YWxsKQ0KCQkJICAgIGluDQoJCQkgICAgICBk
b2l0KG1lbWxvY19kc3Q6OihNZW1Mb2MudXRpbGl6ZWQgbWVtbG9jX2RzdCksDQoJCQkgICAgICBk
b2l0KG1lbWxvY19zcmM6OihNZW1Mb2MudXRpbGl6ZWQgbWVtbG9jX3NyYyksDQoJCQkJICAgW10p
KQ0KCQkJICAgIGVuZA0KDQoJCQlmdW4gcmVwbGFjZXInIG1lbWxvYw0KCQkJICA9IGlmIE1lbUxv
Yy5lcShtZW1sb2MsbWVtbG9jX2RzdCkNCgkJCSAgICAgIHRoZW4gKGNoYW5nZWQgOj0gIWNoYW5n
ZWQgKyAxOyANCgkJCQkgICAgbWVtbG9jX3NyYykNCgkJCSAgICAgIGVsc2UgbWVtbG9jDQoJCQkJ
DQoJCQl2YWwgcmVwbGFjZXINCgkJCSAgPSBmbiB7dXNlLGRlZn0gPT4gZm4gb3BlcmFuZA0KCQkJ
ICAgICA9PiBpZiB1c2UgYW5kYWxzbyBub3QgZGVmDQoJCQkJICB0aGVuIGNhc2Ugb3BlcmFuZA0K
CQkJCQkgb2YgT3BlcmFuZC5NZW1Mb2MgbWVtbG9jDQoJCQkJCSAgPT4gT3BlcmFuZC5tZW1sb2Mg
DQoJCQkJCSAgICAgKE1lbUxvYy5yZXBsYWNlIHJlcGxhY2VyJyANCgkJCQkJICAgICAgICAgICAg
ICAgICAgICAgbWVtbG9jKQ0KCQkJCQkgIHwgXyA9PiBvcGVyYW5kDQoJCQkJZWxzZSBjYXNlIG9w
ZXJhbmQNCgkJCQkgICAgICAgb2YgT3BlcmFuZC5NZW1Mb2MgbWVtbG9jDQoJCQkJICAgICAgICA9
PiBpZiBNZW1Mb2MuZXEobWVtbG9jLA0KCQkJCQkJCW1lbWxvY19kc3QpDQoJCQkJCSAgICAgdGhl
biBvcGVyYW5kDQoJCQkJCSAgICAgZWxzZSBPcGVyYW5kLm1lbWxvYw0KCQkJCQkgICAgICAgICAg
KE1lbUxvYy5yZXBsYWNlIHJlcGxhY2VyJyANCgkJCQkJCSAgICAgICAgICAgICAgICAgIG1lbWxv
YykNCgkJCQkgICAgICAgIHwgXyA9PiBvcGVyYW5kDQoJCSAgICAgIGluDQoJCQkoYWxsLCByZXBs
YWNlcikNCgkJICAgICAgZW5kDQoJCSAgIHwgXw0KCQkgICA9PiBsZXQNCgkJCXZhbCBhbGwNCgkJ
CSAgPSBsZXQNCgkJCSAgICAgIGZ1biBkb2l0IChtZW1sb2NzLCBhbGwpDQoJCQkJPSBMaXN0LmZv
bGQNCgkJCQkgIChtZW1sb2NzLA0KCQkJCSAgIGFsbCwNCgkJCQkgICBmbiAobWVtbG9jLGFsbCkN
CgkJCQkgICAgPT4gaWYgTGlzdC5jb250YWlucyhhbGwsDQoJCQkJCQkJbWVtbG9jLA0KCQkJCQkJ
CU1lbUxvYy5lcSkNCgkJCQkJIHRoZW4gYWxsDQoJCQkJCSBlbHNlIG1lbWxvYzo6YWxsKQ0KCQkJ
ICAgIGluDQoJCQkgICAgICBkb2l0KG1lbWxvY19kc3Q6OihNZW1Mb2MudXRpbGl6ZWQgbWVtbG9j
X2RzdCksDQoJCQkJICAgW10pDQoJCQkgICAgZW5kDQoJCQkJDQoJCQl2YWwgcmVwbGFjZXINCgkJ
CSAgPSBmbiB7dXNlLGRlZn0gDQoJCQkgICAgID0+IGZuIG9wZXJhbmQNCgkJCSAgICAgICAgID0+
IGlmIHVzZSBhbmRhbHNvIG5vdCBkZWYNCgkJCQkgICAgICB0aGVuIGlmIE9wZXJhbmQuZXEob3Bl
cmFuZCxkc3QpDQoJCQkJCSAgICAgdGhlbiAoY2hhbmdlZCA6PSAhY2hhbmdlZCArIDE7IA0KCQkJ
CQkJICAgc3JjKQ0KCQkJCQkgICAgIGVsc2Ugb3BlcmFuZA0KCQkJCSAgICAgIGVsc2Ugb3BlcmFu
ZA0KCQkgICAgICBpbg0KCQkJKGFsbCwgcmVwbGFjZXIpDQoJCSAgICAgIGVuZA0KDQoJICAgIHZh
bCAodHJhbnNmZXIsXykgPSB0cmFuc2Zlcg0KDQoJICAgIGZ1biBkb2l0IChbXSA6IChBc3NlbWJs
eS50ICogTGl2ZW5lc3MudCkgbGlzdCkgDQoJICAgICAgPSBTT01FIChCbG9jay5UIHtsYWJlbCA9
IGxhYmVsLA0KCQkJICAgICAgIHByb2ZpbGVJbmZvID0gcHJvZmlsZUluZm8sDQoJCQkgICAgICAg
c3RhdGVtZW50cyA9IFtdLA0KCQkJICAgICAgIHRyYW5zZmVyID0gVHJhbnNmZXIucmVwbGFjZQ0K
CQkJICAgICAgICAgICAgICAgICAgcmVwbGFjZXINCgkJCQkJICB0cmFuc2Zlcn0pDQoJICAgICAg
fCBkb2l0ICgoYXNtLHtkZWFkLC4uLn0pOjpzdGF0ZW1lbnRzKQ0KCSAgICAgID0gbGV0DQoJCSAg
dmFsIGFzbSA9IEFzc2VtYmx5LnJlcGxhY2UgcmVwbGFjZXIgYXNtDQoNCgkJICB2YWwge3VzZXMs
ZGVmcywuLi59ID0gQXNzZW1ibHkudXNlc19kZWZzX2tpbGxzIGFzbQ0KDQoJCSAgbG9jYWwNCgkJ
ICAgIGZ1biBkb2l0IG9wZXJhbmRzDQoJCSAgICAgID0gTGlzdC5mb2xkDQoJCSAgICAgICAgKG9w
ZXJhbmRzLA0KCQkJIFtdLA0KCQkJIGZuIChvcGVyYW5kLG1lbWxvY3MpDQoJCQkgID0+IGNhc2Ug
T3BlcmFuZC5kZU1lbWxvYyBvcGVyYW5kDQoJCQkgICAgICAgb2YgU09NRSBtZW1sb2MNCgkJCQk9
PiBpZiBMaXN0LmNvbnRhaW5zKG1lbWxvY3MsDQoJCQkJCQkgICAgbWVtbG9jLA0KCQkJCQkJICAg
IE1lbUxvYy5lcSkNCgkJCQkgICAgIHRoZW4gbWVtbG9jcw0KCQkJCSAgICAgZWxzZSBtZW1sb2M6
Om1lbWxvY3MNCgkJCQl8IE5PTkUgPT4gbWVtbG9jcykNCgkJICBpbg0KCQkgICAgdmFsIHVzZXMg
PSBkb2l0IHVzZXMNCgkJICAgIHZhbCBkZWZzID0gZG9pdCBkZWZzDQoJCSAgZW5kDQoNCgkJICB2
YWwgdXNlcycNCgkJICAgID0gbGV0DQoJCQlmdW4gZG9pdChtZW1sb2NzLHVzZXMnKQ0KCQkJICA9
IExpc3QuZm9sZA0KCQkJICAgIChtZW1sb2NzLA0KCQkJICAgICB1c2VzJywNCgkJCSAgICAgZm4g
KG1lbWxvYyx1c2VzJykNCgkJCSAgICAgID0+IGlmIExpc3QuY29udGFpbnModXNlcycsDQoJCQkJ
CQkgIG1lbWxvYywNCgkJCQkJCSAgTWVtTG9jLmVxKQ0KCQkJCSAgIHRoZW4gdXNlcycNCgkJCQkg
ICBlbHNlIG1lbWxvYzo6dXNlcycpDQoJCQlmdW4gZG9pdCcobWVtbG9jcyx1c2VzJykNCgkJCSAg
PSBMaXN0LmZvbGQNCgkJCSAgICAobWVtbG9jcywNCgkJCSAgICAgdXNlcycsDQoJCQkgICAgIGZu
IChtZW1sb2MsdXNlcycpDQoJCQkgICAgICA9PiBkb2l0KE1lbUxvYy51dGlsaXplZCBtZW1sb2Ms
IHVzZXMnKSkNCgkJICAgICAgaW4NCgkJCWRvaXQnKGRlZnMsDQoJCSAgICAgICAgZG9pdCcodXNl
cywNCgkJCWRvaXQodXNlcywNCgkJCSAgICAgW10pKSkNCgkJICAgICAgZW5kDQoJCWluDQoJCSAg
aWYgbm90IChMaXN0LmNvbnRhaW5zKHVzZXMnLA0KCQkJCQltZW1sb2NfZHN0LA0KCQkJCQlNZW1M
b2MuZXEpKQ0KCQkgICAgdGhlbiBpZiBMaXN0LmNvbnRhaW5zKGRlYWQsbWVtbG9jX2RzdCxNZW1M
b2MuZXEpDQoJCQkgICB0aGVuIGxldA0KCQkJCSAgdmFsIHN0YXRlbWVudHMgDQoJCQkJICAgID0g
TGlzdC5tYXAoc3RhdGVtZW50cywgDQoJCQkJCSAgICAgICBmbiAoYXNtLHsuLi59KSA9PiBhc20p
DQoJCQkJaW4gDQoJCQkJICBTT01FIChCbG9jay5UIA0KCQkJCQl7bGFiZWwgPSBsYWJlbCwNCgkJ
CQkJIHByb2ZpbGVJbmZvID0gcHJvZmlsZUluZm8sDQoJCQkJCSBzdGF0ZW1lbnRzID0gYXNtOjpz
dGF0ZW1lbnRzLA0KCQkJCQkgdHJhbnNmZXIgPSB0cmFuc2Zlcn0pDQoJCQkJZW5kDQoJCQkgZWxz
ZSBpZiBMaXN0LmZvcmFsbA0KCQkJICAgICAgICAgKGFsbCwNCgkJCQkgIGZuIG1lbWxvYw0KCQkJ
CSAgID0+IExpc3QuZm9yYWxsDQoJCQkJICAgICAgKGRlZnMsDQoJCQkJICAgICAgIGZuIG1lbWxv
YycNCgkJCSAgICAgICAgICAgICAgICA9PiBub3QgKE1lbUxvYy5tYXlBbGlhcyhtZW1sb2MsIA0K
CQkJCQkJCQltZW1sb2MnKSkpKQ0KCQkJICAgdGhlbiBjYXNlIGRvaXQgc3RhdGVtZW50cw0KCQkJ
CSAgb2YgTk9ORSA9PiBOT05FDQoJCQkJICAgfCBTT01FIChCbG9jay5UIHtsYWJlbCwNCgkJCQkJ
CSAgICBwcm9maWxlSW5mbywNCgkJCQkJCSAgICBzdGF0ZW1lbnRzLA0KCQkJCQkJICAgIHRyYW5z
ZmVyfSkNCgkJCQkgICA9PiBTT01FIChCbG9jay5UIA0KCQkJCQkgICAge2xhYmVsID0gbGFiZWws
DQoJCQkJCSAgICAgcHJvZmlsZUluZm8gPSBwcm9maWxlSW5mbywNCgkJCQkJICAgICBzdGF0ZW1l
bnRzID0gYXNtOjpzdGF0ZW1lbnRzLA0KCQkJCQkgICAgIHRyYW5zZmVyID0gdHJhbnNmZXJ9KQ0K
CQkgICAgICAgICBlbHNlIE5PTkUNCgkJICAgIGVsc2UgTk9ORQ0KCQllbmQNCgkgIGluDQoJICAg
IGNhc2UgZG9pdCBzdGF0ZW1lbnRzDQoJICAgICAgb2YgTk9ORSA9PiBOT05FDQoJICAgICAgIHwg
U09NRSBibG9jayA9PiBTT01FIHtibG9jayA9IExpdmVuZXNzQmxvY2sudG9MaXZlbmVzc0Jsb2Nr
IA0KCQkJCSAgICAgICAgICAgICB7YmxvY2sgPSBibG9jaywNCgkJCQkJICAgICAgbGl2ZUluZm8g
PSBsaXZlSW5mb30sDQoJCQkJICAgICBjaGFuZ2VkID0gIWNoYW5nZWQgPiAwfQ0KCSAgZW5kDQoJ
fCBjb3B5UHJvcGFnYXRlJyBfID0gRXJyb3IuYnVnICJjb3B5UHJvcGFnYXRlJyINCg0KICAgICAg
ZnVuIGNvcHlQcm9wYWdhdGUge2Jsb2NrIGFzIExpdmVuZXNzQmxvY2suVCANCgkJCSAgICAgICAg
ICB7bGFiZWwsIHByb2ZpbGVJbmZvLCBzdGF0ZW1lbnRzLCB0cmFuc2Zlcn0sDQoJCQkgbGl2ZUlu
Zm99DQoJPSBsZXQNCgkgICAgdmFsIChfLHtsaXZlT3V0LC4uLn0pID0gdHJhbnNmZXINCg0KCSAg
ICB2YWwge2Jsb2NrLGNoYW5nZWQsbGl2ZU91dH0NCgkgICAgICA9IExpc3QuZm9sZHINCgkgICAg
ICAgIChzdGF0ZW1lbnRzLA0KCQkge2Jsb2NrID0gTGl2ZW5lc3NCbG9jay5UIHtsYWJlbCA9IGxh
YmVsLA0KCQkJCQkgICBwcm9maWxlSW5mbyA9IHByb2ZpbGVJbmZvLA0KCQkJCQkgICBzdGF0ZW1l
bnRzID0gW10sDQoJCQkJCSAgIHRyYW5zZmVyID0gdHJhbnNmZXJ9LA0KCQkgIGNoYW5nZWQgPSBm
YWxzZSwNCgkJICBsaXZlT3V0ID0gbGl2ZU91dH0sDQoJCSBmbiAoKGFzbSBhcyBBc3NlbWJseS5J
bnN0cnVjdGlvbiANCgkJICAgICAgICAgICAgIChJbnN0cnVjdGlvbi5NT1YNCgkJCSAgICAgIHtz
cmMsDQoJCQkgICAgICAgZHN0IGFzIE9wZXJhbmQuTWVtTG9jIG1lbWxvY19kc3QsDQoJCQkgICAg
ICAgc2l6ZX0pLA0KCQkgICAgICBpbmZvIGFzIHtkZWFkLC4uLn0pLA0KCQkgICAgIHtibG9jayBh
cyBMaXZlbmVzc0Jsb2NrLlQge2xhYmVsLHByb2ZpbGVJbmZvLA0KCQkJCQkJc3RhdGVtZW50cyx0
cmFuc2Zlcn0sDQoJCSAgICAgIGNoYW5nZWQsDQoJCSAgICAgIGxpdmVPdXR9KQ0KCQkgID0+IGxl
dA0KCQkgICAgICAgdmFsIGJsb2NrJw0KCQkJID0gTGl2ZW5lc3NCbG9jay5UIA0KCQkJICAge2xh
YmVsID0gbGFiZWwsDQoJCQkgICAgcHJvZmlsZUluZm8gPSBwcm9maWxlSW5mbywNCgkJCSAgICBz
dGF0ZW1lbnRzID0gKGFzbSxpbmZvKTo6c3RhdGVtZW50cywNCgkJCSAgICB0cmFuc2ZlciA9IHRy
YW5zZmVyfQkNCgkJICAgICAgIHZhbCBsaXZlT3V0Jw0KCQkJID0gTGlzdC5yZW1vdmVBbGwobGl2
ZU91dCwNCgkJCQkJICBmbiBtZW1sb2MgDQoJCQkJCSAgID0+IExpc3QuY29udGFpbnMNCgkJCQkJ
ICAgICAgKGRlYWQsDQoJCQkJCSAgICAgICBtZW1sb2MsDQoJCQkJCSAgICAgICBNZW1Mb2MuZXEp
KQ0KCQkgICAgIGluDQoJCSAgICAgICBpZiBNZW1Mb2MuaXNUZW1wIG1lbWxvY19kc3QgDQoJCQkg
IGFuZGFsc28NCgkJCSAgbm90IChMaXN0LmNvbnRhaW5zKGxpdmVPdXQsDQoJCQkJCSAgICAgbWVt
bG9jX2RzdCwNCgkJCQkJICAgICBNZW1Mb2MuZXEpKQ0KCQkJIHRoZW4gY2FzZSBjb3B5UHJvcGFn
YXRlJyB7c3JjID0gc3JjLA0KCQkJCQkJICAgZHN0ID0gZHN0LA0KCQkJCQkJICAgYmxvY2sgPSBi
bG9jaywNCgkJCQkJCSAgIGxpdmVJbmZvID0gbGl2ZUluZm99DQoJCQkJb2YgTk9ORSA9PiB7Ymxv
Y2sgPSBibG9jaycsDQoJCQkJCSAgICBjaGFuZ2VkID0gY2hhbmdlZCwNCgkJCQkJICAgIGxpdmVP
dXQgPSBsaXZlT3V0J30NCgkJCQkgfCBTT01FIHtibG9jayA9IGJsb2NrJywNCgkJCQkJIGNoYW5n
ZWQgPSBjaGFuZ2VkJ30NCgkJCQkgID0+IHtibG9jayA9IGJsb2NrJywNCgkJCQkgICAgICBjaGFu
Z2VkID0gY2hhbmdlZCBvcmVsc2UgY2hhbmdlZCcsDQoJCQkJICAgICAgbGl2ZU91dCA9IGxpdmVP
dXQnfQ0KCQkJIGVsc2Uge2Jsb2NrID0gYmxvY2snLA0KCQkJICAgICAgIGNoYW5nZWQgPSBjaGFu
Z2VkLA0KCQkJICAgICAgIGxpdmVPdXQgPSBsaXZlT3V0J30NCgkJICAgICBlbmQNCgkJICB8ICgo
YXNtIGFzIEFzc2VtYmx5Lkluc3RydWN0aW9uIA0KCQkgICAgICAgICAgICAgKEluc3RydWN0aW9u
LnBGTU9WDQoJCQkgICAgICB7c3JjLA0KCQkJICAgICAgIGRzdCBhcyBPcGVyYW5kLk1lbUxvYyBt
ZW1sb2NfZHN0LA0KCQkJICAgICAgIHNpemV9KSwNCgkJICAgICAgaW5mbyBhcyB7ZGVhZCwuLi59
KSwNCgkJICAgICB7YmxvY2sgYXMgTGl2ZW5lc3NCbG9jay5UIHtsYWJlbCxwcm9maWxlSW5mbywN
CgkJCQkJCXN0YXRlbWVudHMsdHJhbnNmZXJ9LA0KCQkgICAgICBjaGFuZ2VkLA0KCQkgICAgICBs
aXZlT3V0fSkNCgkJICA9PiBsZXQNCgkJICAgICAgIHZhbCBibG9jaycNCgkJCSA9IExpdmVuZXNz
QmxvY2suVCANCgkJCSAgIHtsYWJlbCA9IGxhYmVsLA0KCQkJICAgIHByb2ZpbGVJbmZvID0gcHJv
ZmlsZUluZm8sDQoJCQkgICAgc3RhdGVtZW50cyA9IChhc20saW5mbyk6OnN0YXRlbWVudHMsDQoJ
CQkgICAgdHJhbnNmZXIgPSB0cmFuc2Zlcn0JDQoJCSAgICAgICB2YWwgbGl2ZU91dCcNCgkJCSA9
IExpc3QucmVtb3ZlQWxsKGxpdmVPdXQsDQoJCQkJCSAgZm4gbWVtbG9jIA0KCQkJCQkgICA9PiBM
aXN0LmNvbnRhaW5zDQoJCQkJCSAgICAgIChkZWFkLA0KCQkJCQkgICAgICAgbWVtbG9jLA0KCQkJ
CQkgICAgICAgTWVtTG9jLmVxKSkNCgkJICAgICBpbiANCgkJICAgICAgIGlmIE1lbUxvYy5pc1Rl
bXAgbWVtbG9jX2RzdCANCgkJICAgICAgICAgIGFuZGFsc28NCgkJCSAgbm90IChMaXN0LmNvbnRh
aW5zKGxpdmVPdXQsDQoJCQkJCSAgICAgbWVtbG9jX2RzdCwNCgkJCQkJICAgICBNZW1Mb2MuZXEp
KQ0KCQkJIHRoZW4gY2FzZSBjb3B5UHJvcGFnYXRlJyB7c3JjID0gc3JjLA0KCQkJCQkJICAgZHN0
ID0gZHN0LA0KCQkJCQkJICAgYmxvY2sgPSBibG9jaywNCgkJCQkJCSAgIGxpdmVJbmZvID0gbGl2
ZUluZm99DQoJCQkJb2YgTk9ORSANCgkJCQkgPT4ge2Jsb2NrID0gYmxvY2snLA0KCQkJCSAgICAg
Y2hhbmdlZCA9IGNoYW5nZWQsDQoJCQkJICAgICBsaXZlT3V0ID0gbGl2ZU91dCd9DQoJCQkJIHwg
U09NRSB7YmxvY2sgPSBibG9jaycsDQoJCQkJCSBjaGFuZ2VkID0gY2hhbmdlZCd9DQoJCQkJID0+
IHtibG9jayA9IGJsb2NrJywNCgkJCQkgICAgIGNoYW5nZWQgPSBjaGFuZ2VkIG9yZWxzZSBjaGFu
Z2VkJywNCgkJCQkgICAgIGxpdmVPdXQgPSBsaXZlT3V0J30NCgkJCSBlbHNlIHtibG9jayA9IGJs
b2NrJywNCgkJCSAgICAgICBjaGFuZ2VkID0gY2hhbmdlZCwNCgkJCSAgICAgICBsaXZlT3V0ID0g
bGl2ZU91dCd9DQoJCSAgICAgZW5kDQoJCSAgfCAoKGFzbSxpbmZvIGFzIHtkZWFkLC4uLn0pLA0K
CQkgICAgIHtibG9jayBhcyBMaXZlbmVzc0Jsb2NrLlQge2xhYmVsLHByb2ZpbGVJbmZvLA0KCQkJ
CQkJc3RhdGVtZW50cyx0cmFuc2Zlcn0sDQoJCSAgICAgIGNoYW5nZWQsDQoJCSAgICAgIGxpdmVP
dXR9KQ0KCQkgID0+IGxldA0KCQkgICAgICAgdmFsIGJsb2NrJw0KCQkJID0gTGl2ZW5lc3NCbG9j
ay5UIA0KCQkJICAge2xhYmVsID0gbGFiZWwsDQoJCQkgICAgcHJvZmlsZUluZm8gPSBwcm9maWxl
SW5mbywNCgkJCSAgICBzdGF0ZW1lbnRzID0gKGFzbSxpbmZvKTo6c3RhdGVtZW50cywNCgkJCSAg
ICB0cmFuc2ZlciA9IHRyYW5zZmVyfQ0KCQkgICAgICAgdmFsIGxpdmVPdXQnDQoJCQkgPSBMaXN0
LnJlbW92ZUFsbChsaXZlT3V0LA0KCQkJCQkgIGZuIG1lbWxvYyANCgkJCQkJICAgPT4gTGlzdC5j
b250YWlucw0KCQkJCQkgICAgICAoZGVhZCwNCgkJCQkJICAgICAgIG1lbWxvYywNCgkJCQkJICAg
ICAgIE1lbUxvYy5lcSkpDQoJCSAgICAgaW4NCgkJICAgICAgIHtibG9jayA9IGJsb2NrJywNCgkJ
CWNoYW5nZWQgPSBjaGFuZ2VkLA0KCQkJbGl2ZU91dCA9IGxpdmVPdXQnfQ0KCQkgICAgIGVuZCkN
CgkgIGluDQoJICAgIHtibG9jayA9IGJsb2NrLA0KCSAgICAgY2hhbmdlZCA9IGNoYW5nZWR9DQoJ
ICBlbmQNCg0KICAgICAgdmFsIChjb3B5UHJvcGFnYXRlIDogDQoJICAge2Jsb2NrOiBMaXZlbmVz
c0Jsb2NrLnQsIA0KCSAgICBsaXZlSW5mbzoge2dldDogTGFiZWwudCAtPiBNZW1Mb2MudCBsaXN0
LA0KCQkgICAgICAgc2V0OiBMYWJlbC50ICogTWVtTG9jLnQgbGlzdCAtPiB1bml0fX0gLT4NCgkg
ICB7YmxvY2s6IExpdmVuZXNzQmxvY2sudCwNCgkgICAgY2hhbmdlZDogYm9vbH0sDQoJICAgY29w
eVByb3BhZ2F0ZV9tc2cpDQoJPSB0cmFjZXINCgkgICJjb3B5UHJvcGFnYXRlIg0KCSAgY29weVBy
b3BhZ2F0ZQ0KICAgIGVuZA0KDQogIHN0cnVjdHVyZSBQZWVwaG9sZUxpdmVuZXNzQmxvY2sgPQ0K
ICAgIHN0cnVjdA0KICAgICAgc3RydWN0dXJlIFBlZXBob2xlIA0KCT0gUGVlcGhvbGUodHlwZSBs
YWJlbF90eXBlID0gTGFiZWwudA0KCQkgICB0eXBlIHByb2ZpbGVJbmZvX3R5cGUgPSBQcm9maWxl
SW5mby50DQoJCSAgIHR5cGUgc3RhdGVtZW50X3R5cGUgPSBBc3NlbWJseS50ICogTGl2ZW5lc3Mu
dA0KCQkgICB0eXBlIHRyYW5zZmVyX3R5cGUgPSBUcmFuc2Zlci50ICogTGl2ZW5lc3MudA0KCQkg
ICBkYXRhdHlwZSBibG9jayA9IGRhdGF0eXBlIExpdmVuZXNzQmxvY2sudCkNCiAgICAgIG9wZW4g
UGVlcGhvbGUNCg0KICAgICAgZnVuIG1ha2VfY2FsbGJhY2tfbXNnIG5hbWUNCgk9IGxldA0KCSAg
ICB2YWwgY291bnQgPSByZWYgMA0KCSAgICB2YWwgdG90YWwgPSByZWYgMA0KCSAgICB2YWwgY2Fs
bGJhY2sgPSBmbiB0cnVlID0+IChJbnQuaW5jIGNvdW50OyBJbnQuaW5jIHRvdGFsKQ0KCSAgICAg
ICAgICAgICAgICAgICAgfCBmYWxzZSA9PiBJbnQuaW5jIHRvdGFsDQoJICAgIHZhbCBtc2cgPSBm
biAoKSA9PiBDb250cm9sLm1lc3NhZ2VTdHIgDQoJICAgICAgICAgICAgICAgICAgICAgICAoY29u
Y2F0IFtuYW1lLCANCgkJCQkJIjogIiwgSW50LnRvU3RyaW5nICghY291bnQpLA0KCQkJCQkiIC8g
IiwgSW50LnRvU3RyaW5nICghdG90YWwpXSkNCgkgIGluDQoJICAgIChjYWxsYmFjayxtc2cpDQoJ
ICBlbmQNCg0KICAgICAgdmFsIGlzQ29tbWVudCA6IHN0YXRlbWVudF90eXBlIC0+IGJvb2wNCgk9
IGZuIChBc3NlbWJseS5Db21tZW50IF8sIA0KCSAgICAgIHsuLi59KSA9PiB0cnVlDQoJICAgfCBf
ID0+IGZhbHNlDQoNCiAgICAgIGxvY2FsDQoJdmFsIGlzSW5zdHJ1Y3Rpb25fZHN0c1RlbXBfZHN0
c0RlYWQgOiBzdGF0ZW1lbnRfdHlwZSAtPiBib29sDQoJICA9IGZuIChBc3NlbWJseS5JbnN0cnVj
dGlvbiBpbnN0cnVjdGlvbiwNCgkJe2RlYWQsLi4ufSkNCgkgICAgID0+IGxldA0KCQkgIHZhbCB7
ZHN0cywuLi59ID0gSW5zdHJ1Y3Rpb24uc3Jjc19kc3RzIGluc3RydWN0aW9uDQoJCWluIA0KCQkg
IGNhc2UgZHN0cw0KCQkgICAgb2YgTk9ORSA9PiBmYWxzZQ0KCQkgICAgIHwgU09NRSBkc3RzID0+
IExpc3QuZm9yYWxsDQoJCSAgICAgICAgICAgICAgICAgICAgKGRzdHMsDQoJCQkJICAgICBmbiBP
cGVyYW5kLk1lbUxvYyBtZW1sb2MNCgkJCQkgICAgICA9PiBNZW1Mb2MuaXNUZW1wIG1lbWxvYw0K
CQkJCSAgICAgICAgIGFuZGFsc28NCgkJCQkJIExpc3QuY29udGFpbnMoZGVhZCxtZW1sb2MsTWVt
TG9jLmVxKQ0KCQkJCSAgICAgIHwgXyA9PiBmYWxzZSkNCgkJZW5kIA0KCSAgICAgfCBfID0+IGZh
bHNlDQoNCgl2YWwgdGVtcGxhdGUgOiB0ZW1wbGF0ZSANCgkgID0ge3N0YXJ0ID0gRW1wdHlPck5v
bkVtcHR5LA0KCSAgICAgc3RhdGVtZW50cyA9IFtPbmUgaXNJbnN0cnVjdGlvbl9kc3RzVGVtcF9k
c3RzRGVhZF0sDQoJICAgICBmaW5pc2ggPSBFbXB0eU9yTm9uRW1wdHksDQoJICAgICB0cmFuc2Zl
ciA9IGZuIF8gPT4gdHJ1ZX0NCg0KCXZhbCByZXdyaXRlciA6IHJld3JpdGVyDQoJICA9IGZuIHts
YWJlbCwNCgkJcHJvZmlsZUluZm8sDQoJCXN0YXJ0LCANCgkJc3RhdGVtZW50cyBhcw0KCQlbWyhB
c3NlbWJseS5JbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwNCgkJICAgaW5mbyBhcyB7Li4ufSldXSwN
CgkJZmluaXNoIGFzIFtdLCANCgkJdHJhbnNmZXIgYXMgKFRyYW5zZmVyLklmZiB7Y29uZGl0aW9u
ID0gSW5zdHJ1Y3Rpb24uTywNCgkJCQkJICAgdHJ1ZWUsDQoJCQkJCSAgIGZhbHNlZX0sDQoJCQkg
ICAgIHsuLi59KX0NCgkgICAgID0+IE5PTkUNCgkgICAgIHwge2xhYmVsLA0KCQlwcm9maWxlSW5m
bywNCgkJc3RhcnQsIA0KCQlzdGF0ZW1lbnRzIGFzDQoJCVtbKEFzc2VtYmx5Lkluc3RydWN0aW9u
IGluc3RydWN0aW9uLA0KCQkgICBpbmZvIGFzIHsuLi59KV1dLA0KCQlmaW5pc2ggYXMgW10sIA0K
CQl0cmFuc2ZlciBhcyAoVHJhbnNmZXIuSWZmIHtjb25kaXRpb24gPSBJbnN0cnVjdGlvbi5OTywN
CgkJCQkJICAgdHJ1ZWUsDQoJCQkJCSAgIGZhbHNlZX0sDQoJCQkgICAgIHsuLi59KX0NCgkgICAg
ID0+IE5PTkUNCgkgICAgIHwge2xhYmVsLA0KCQlwcm9maWxlSW5mbywNCgkJc3RhcnQsIA0KCQlz
dGF0ZW1lbnRzIGFzDQoJCVtbKEFzc2VtYmx5Lkluc3RydWN0aW9uIGluc3RydWN0aW9uLA0KCQkg
ICBpbmZvIGFzIHtsaXZlT3V0LC4uLn0pXV0sDQoJCWZpbmlzaCwgDQoJCXRyYW5zZmVyfQ0KCSAg
ICAgPT4gbGV0DQoJCSAgdmFsIHtzdGF0ZW1lbnRzfQ0KCQkgICAgPSBMaXZlbmVzc0Jsb2NrLnJl
TGl2ZW5lc3NTdGF0ZW1lbnRzDQoJCSAgICAgIHtzdGF0ZW1lbnRzID0gTGlzdC5yZXYgc3RhcnQs
DQoJCSAgICAgICBsaXZlID0gbGl2ZU91dH0NCg0KCQkgIHZhbCBzdGF0ZW1lbnRzDQoJCSAgICA9
IExpc3QuY29uY2F0IFtzdGF0ZW1lbnRzLCBmaW5pc2hdDQoJCWluDQoJCSAgU09NRSAoTGl2ZW5l
c3NCbG9jay5UDQoJCQl7bGFiZWwgPSBsYWJlbCwNCgkJCSBwcm9maWxlSW5mbyA9IHByb2ZpbGVJ
bmZvLA0KCQkJIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzLA0KCQkJIHRyYW5zZmVyID0gdHJhbnNm
ZXJ9KQ0KCQllbmQNCiAgICAgICAgICAgICB8IF8gPT4gRXJyb3IuYnVnICJQZWVwaG9sZTogZWxp
bURlYWREc3RzIg0KDQoJdmFsIChjYWxsYmFjayxlbGltRGVhZERzdHNfbXNnKQ0KCSAgPSBtYWtl
X2NhbGxiYWNrX21zZyAiZWxpbURlYWREc3RzIg0KICAgICAgaW4NCgl2YWwgZWxpbURlYWREc3Rz
IDogb3B0aW1pemF0aW9uDQoJICA9IHt0ZW1wbGF0ZSA9IHRlbXBsYXRlLA0KCSAgICAgcmV3cml0
ZXIgPSByZXdyaXRlciwNCgkgICAgIGNhbGxiYWNrID0gY2FsbGJhY2t9DQoJdmFsIGVsaW1EZWFk
RHN0c19tc2cgPSBlbGltRGVhZERzdHNfbXNnDQogICAgICBlbmQNCg0KICAgICAgbG9jYWwNCgl2
YWwgaXNJbnN0cnVjdGlvbk1PVl9kc3RUZW1wIDogc3RhdGVtZW50X3R5cGUgLT4gYm9vbA0KCSAg
PSBmbiAoQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9uLk1PViANCgkJCQkgICAgICB7
ZHN0ID0gT3BlcmFuZC5NZW1Mb2MgbWVtbG9jLC4uLn0pLCANCgkJey4uLn0pDQoJICAgICA9PiBN
ZW1Mb2MuaXNUZW1wIG1lbWxvYw0KCSAgICAgfCBfID0+IGZhbHNlDQoNCgl2YWwgaXNJbnN0cnVj
dGlvbkFMX2RzdFRlbXAgOiBzdGF0ZW1lbnRfdHlwZSAtPiBib29sDQoJICA9IGZuIChBc3NlbWJs
eS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24uQmluQUwNCgkJCQkgICAgICB7ZHN0ID0gT3BlcmFu
ZC5NZW1Mb2MgbWVtbG9jLC4uLn0pLA0KCQl7Li4ufSkNCgkgICAgID0+IE1lbUxvYy5pc1RlbXAg
bWVtbG9jDQoJICAgICB8IChBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24ucE1EDQoJ
CQkJICAgICAge2RzdCA9IE9wZXJhbmQuTWVtTG9jIG1lbWxvYywuLi59KSwNCgkJDQoJCXsuLi59
KQ0KCSAgICAgPT4gTWVtTG9jLmlzVGVtcCBtZW1sb2MNCgkgICAgIHwgKEFzc2VtYmx5Lkluc3Ry
dWN0aW9uIChJbnN0cnVjdGlvbi5VbkFMDQoJCQkJICAgICAge2RzdCA9IE9wZXJhbmQuTWVtTG9j
IG1lbWxvYywuLi59KSwNCgkJDQoJCXsuLi59KQ0KCSAgICAgPT4gTWVtTG9jLmlzVGVtcCBtZW1s
b2MNCgkgICAgIHwgKEFzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5TUkFMDQoJCQkJ
ICAgICAge2RzdCA9IE9wZXJhbmQuTWVtTG9jIG1lbWxvYywuLi59KSwNCgkJDQoJCXsuLi59KQ0K
CSAgICAgPT4gTWVtTG9jLmlzVGVtcCBtZW1sb2MNCgkgICAgIHwgXyA9PiBmYWxzZQ0KDQoJdmFs
IGlzSW5zdHJ1Y3Rpb25NT1Zfc3JjVGVtcF9zcmNEZWFkIDogc3RhdGVtZW50X3R5cGUgLT4gYm9v
bA0KCSAgPSBmbiAoQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9uLk1PViANCgkJCQkg
ICAgICB7c3JjID0gT3BlcmFuZC5NZW1Mb2MgbWVtbG9jLC4uLn0pLA0KCQl7ZGVhZCwuLi59KQ0K
CSAgICAgPT4gTWVtTG9jLmlzVGVtcCBtZW1sb2MNCgkgICAgICAgIGFuZGFsc28NCgkJTGlzdC5j
b250YWlucyhkZWFkLCBtZW1sb2MsIE1lbUxvYy5lcSkNCgkgICAgIHwgXyA9PiBmYWxzZQ0KDQoJ
dmFsIHRlbXBsYXRlIDogdGVtcGxhdGUgDQoJICA9IHtzdGFydCA9IEVtcHR5T3JOb25FbXB0eSwN
CgkgICAgIHN0YXRlbWVudHMgPSBbT25lIGlzSW5zdHJ1Y3Rpb25NT1ZfZHN0VGVtcCwNCgkJCSAg
IEFsbCAoZm4gYXNtIA0KCQkJCSA9PiAoaXNDb21tZW50IGFzbSkgDQoJCQkJICAgIG9yZWxzZQ0K
CQkJCSAgICAoaXNJbnN0cnVjdGlvbkFMX2RzdFRlbXAgYXNtKSksDQoJCQkgICBPbmUgaXNJbnN0
cnVjdGlvbk1PVl9zcmNUZW1wX3NyY0RlYWRdLA0KCSAgICAgZmluaXNoID0gRW1wdHlPck5vbkVt
cHR5LA0KCSAgICAgdHJhbnNmZXIgPSBmbiBfID0+IHRydWV9DQoNCgl2YWwgcmV3cml0ZXIgOiBy
ZXdyaXRlcg0KCSAgPSBmbiB7bGFiZWwsDQoJCXByb2ZpbGVJbmZvLA0KCQlzdGFydCwgDQoJCXN0
YXRlbWVudHMgYXMNCgkJW1soQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9uLk1PViAN
CgkJCQkJIHtzcmMgPSBzcmMxLA0KCQkJCQkgIGRzdCA9IGRzdDEgYXMgT3BlcmFuZC5NZW1Mb2Mg
bWVtbG9jMSwNCgkJCQkJICBzaXplID0gc2l6ZTF9KSwNCgkJICAgey4uLn0pXSwNCgkJIHN0YXRl
bWVudHMnLA0KCQkgWyhBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24uTU9WIA0KCQkJ
CQkge3NyYyA9IHNyYzIgYXMgT3BlcmFuZC5NZW1Mb2MgbWVtbG9jMiwNCgkJCQkJICBkc3QgPSBk
c3QyLA0KCQkJCQkgIHNpemUgPSBzaXplMn0pLA0KCQkgICB7bGl2ZU91dCA9IGxpdmVPdXQyLC4u
Ln0pXV0sDQoJCWZpbmlzaCwgDQoJCXRyYW5zZmVyfQ0KCSAgICAgPT4gaWYgU2l6ZS5lcShzaXpl
MSxzaXplMikgYW5kYWxzbw0KCSAgICAgICAgICAgTWVtTG9jLmVxKG1lbWxvYzEsbWVtbG9jMikg
YW5kYWxzbw0KCQkgICBMaXN0LmZvcmFsbA0KCQkgICAoc3RhdGVtZW50cycsDQoJCSAgICBmbiAo
QXNzZW1ibHkuQ29tbWVudCBfLCBsaXZlSW5mbykgPT4gdHJ1ZQ0KCQkgICAgIHwgKEFzc2VtYmx5
Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5CaW5BTA0KCQkJCQkgICAgICB7b3BlciwgDQoJCQkJ
CSAgICAgICBzcmMsIA0KCQkJCQkgICAgICAgZHN0IGFzIE9wZXJhbmQuTWVtTG9jIG1lbWxvYywg
DQoJCQkJCSAgICAgICBzaXplfSksDQoJCQlsaXZlSW5mbykNCgkJICAgICA9PiBTaXplLmVxKHNp
emUxLHNpemUpIGFuZGFsc28NCiAgICAgICAgICAgICAgICAgICAgICAgIE1lbUxvYy5lcShtZW1s
b2MxLG1lbWxvYykgYW5kYWxzbw0KCQkJKGNhc2UgKHNyYyxkc3QyKQ0KCQkJICAgb2YgKE9wZXJh
bmQuTWVtTG9jIG1lbWxvY19zcmMsDQoJCQkgICAgICAgT3BlcmFuZC5NZW1Mb2MgbWVtbG9jX2Rz
dDIpDQoJCQkgICAgPT4gTGlzdC5mb3JhbGwNCgkJCSAgICAgICAobWVtbG9jX3NyYzo6KE1lbUxv
Yy51dGlsaXplZCBtZW1sb2Nfc3JjKSwNCgkJCQlmbiBtZW1sb2MnIA0KCQkJCSA9PiBub3QgKE1l
bUxvYy5tYXlBbGlhcyhtZW1sb2NfZHN0MixtZW1sb2MnKSkpDQoJCQkgICAgfCAoT3BlcmFuZC5J
bW1lZGlhdGUgXywgXykgPT4gdHJ1ZQ0KCQkJICAgIHwgXyA9PiBmYWxzZSkNCgkJICAgICB8IChB
c3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24ucE1EDQoJCQkJCSAgICAgIHtvcGVyLCAN
CgkJCQkJICAgICAgIHNyYywgDQoJCQkJCSAgICAgICBkc3QgYXMgT3BlcmFuZC5NZW1Mb2MgbWVt
bG9jLCANCgkJCQkJICAgICAgIHNpemV9KSwNCgkJCWxpdmVJbmZvKQ0KCQkgICAgID0+IFNpemUu
ZXEoc2l6ZTEsc2l6ZSkgYW5kYWxzbw0KICAgICAgICAgICAgICAgICAgICAgICAgTWVtTG9jLmVx
KG1lbWxvYzEsbWVtbG9jKSBhbmRhbHNvDQoJCQkoY2FzZSAoc3JjLGRzdDIpDQoJCQkgICBvZiAo
T3BlcmFuZC5NZW1Mb2MgbWVtbG9jX3NyYywNCgkJCSAgICAgICBPcGVyYW5kLk1lbUxvYyBtZW1s
b2NfZHN0MikNCgkJCSAgICA9PiBMaXN0LmZvcmFsbA0KCQkJICAgICAgIChtZW1sb2Nfc3JjOjoo
TWVtTG9jLnV0aWxpemVkIG1lbWxvY19zcmMpLA0KCQkJCWZuIG1lbWxvYycgDQoJCQkJID0+IG5v
dCAoTWVtTG9jLm1heUFsaWFzKG1lbWxvY19kc3QyLG1lbWxvYycpKSkNCgkJCSAgICB8IChPcGVy
YW5kLkltbWVkaWF0ZSBfLCBfKSA9PiB0cnVlDQoJCQkgICAgfCBfID0+IGZhbHNlKQ0KCQkgICAg
IHwgKEFzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5VbkFMDQoJCQkJCSAgICAgIHtv
cGVyLCANCgkJCQkJICAgICAgIGRzdCBhcyBPcGVyYW5kLk1lbUxvYyBtZW1sb2MsIA0KCQkJCQkg
ICAgICAgc2l6ZX0pLA0KCQkJbGl2ZUluZm8pDQoJCSAgICAgPT4gU2l6ZS5lcShzaXplMSxzaXpl
KSBhbmRhbHNvDQogICAgICAgICAgICAgICAgICAgICAgICBNZW1Mb2MuZXEobWVtbG9jMSxtZW1s
b2MpIA0KCQkgICAgIHwgKEFzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5TUkFMDQoJ
CQkJCSAgICAgIHtvcGVyLCANCgkJCQkJICAgICAgIGNvdW50LA0KCQkJCQkgICAgICAgZHN0IGFz
IE9wZXJhbmQuTWVtTG9jIG1lbWxvYywgDQoJCQkJCSAgICAgICBzaXplfSksDQoJCQlsaXZlSW5m
bykNCgkJICAgICA9PiBTaXplLmVxKHNpemUxLHNpemUpIGFuZGFsc28NCiAgICAgICAgICAgICAg
ICAgICAgICAgIE1lbUxvYy5lcShtZW1sb2MxLG1lbWxvYykgYW5kYWxzbw0KCQkJKGNhc2UgKGNv
dW50LGRzdDIpDQoJCQkgICBvZiAoT3BlcmFuZC5NZW1Mb2MgbWVtbG9jX2NvdW50LA0KCQkJICAg
ICAgIE9wZXJhbmQuTWVtTG9jIG1lbWxvY19kc3QyKQ0KCQkJICAgID0+IExpc3QuZm9yYWxsDQoJ
CQkgICAgICAgKG1lbWxvY19jb3VudDo6KE1lbUxvYy51dGlsaXplZCBtZW1sb2NfY291bnQpLA0K
CQkJCWZuIG1lbWxvYycgDQoJCQkJID0+IG5vdCAoTWVtTG9jLm1heUFsaWFzKG1lbWxvY19kc3Qy
LG1lbWxvYycpKSkNCgkJCSAgICB8IChPcGVyYW5kLkltbWVkaWF0ZSBfLCBfKSA9PiB0cnVlDQoJ
CQkgICAgfCBfID0+IGZhbHNlKQ0KCQkgICAgIHwgXyA9PiBFcnJvci5idWcgIlBlZXBob2xlOiBl
bGltQUxDb3B5IikNCgkJICB0aGVuIGxldA0KCQkJIHZhbCBzdGF0ZW1lbnRzDQoJCQkgICA9IExp
c3QubWFwDQoJCQkgICAgIChzdGF0ZW1lbnRzJywNCgkJCSAgICAgIGZuIChhc20saW5mbykNCgkJ
CSAgICAgICA9PiBBc3NlbWJseS5yZXBsYWNlDQoJCQkgICAgICAgICAgKGZuIHt1c2UsIGRlZn0g
DQoJCQkJICAgID0+IGZuIG9wZXJhbmQgDQoJCQkJICAgICAgICA9PiBpZiBPcGVyYW5kLmVxKG9w
ZXJhbmQsZHN0MSkNCgkJCQkJICAgICB0aGVuIGRzdDINCgkJCQkJICAgICBlbHNlIG9wZXJhbmQp
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNtKQ0KDQoJCQkgdmFsIHtzdGF0
ZW1lbnRzLCAuLi59DQoJCQkgICA9IExpdmVuZXNzQmxvY2sudG9MaXZlbmVzc1N0YXRlbWVudHMN
CgkJCSAgICAge3N0YXRlbWVudHMgDQoJCQkgICAgICA9IChBc3NlbWJseS5pbnN0cnVjdGlvbl9t
b3YNCgkJCQkge3NyYyA9IHNyYzEsDQoJCQkJICBkc3QgPSBkc3QyLA0KCQkJCSAgc2l6ZSA9IHNp
emUxfSk6OnN0YXRlbWVudHMsDQoJCQkgICAgICBsaXZlID0gbGl2ZU91dDJ9DQoNCgkJCSB2YWwg
c3RhdGVtZW50cw0KCQkJICAgPSBMaXN0LmZvbGQoc3RhcnQsDQoJCQkJICAgICAgIExpc3QuY29u
Y2F0IFtzdGF0ZW1lbnRzLA0KCQkJCQkJICAgIGZpbmlzaF0sDQoJCQkJICAgICAgIG9wIDo6KQ0K
CQkgICAgICAgaW4NCgkJCSBTT01FIChMaXZlbmVzc0Jsb2NrLlQNCgkJCSAgICAgICB7bGFiZWwg
PSBsYWJlbCwNCgkJCQlwcm9maWxlSW5mbyA9IHByb2ZpbGVJbmZvLA0KCQkJCXN0YXRlbWVudHMg
PSBzdGF0ZW1lbnRzLA0KCQkJCXRyYW5zZmVyID0gdHJhbnNmZXJ9KQkJIA0KCQkgICAgICAgZW5k
DQoJCSAgZWxzZSBOT05FDQogICAgICAgICAgICAgfCBfID0+IEVycm9yLmJ1ZyAiUGVlcGhvbGU6
IGVsaW1BTENvcHkiDQoNCgl2YWwgKGNhbGxiYWNrLGVsaW1BTENvcHlfbXNnKQ0KCSAgPSBtYWtl
X2NhbGxiYWNrX21zZyAiZWxpbUFMQ29weSINCiAgICAgIGluDQoJdmFsIGVsaW1BTENvcHkgOiBv
cHRpbWl6YXRpb24NCgkgID0ge3RlbXBsYXRlID0gdGVtcGxhdGUsDQoJICAgICByZXdyaXRlciA9
IHJld3JpdGVyLA0KCSAgICAgY2FsbGJhY2sgPSBjYWxsYmFja30NCgl2YWwgZWxpbUFMQ29weV9t
c2cgPSBlbGltQUxDb3B5X21zZw0KICAgICAgZW5kDQoNCiAgICAgIGxvY2FsDQoJdmFsIGlzSW5z
dHJ1Y3Rpb25NT1ZfZXFTcmNEc3QgOiBzdGF0ZW1lbnRfdHlwZSAtPiBib29sDQoJPSBmbiAoQXNz
ZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9uLk1PViANCgkJCQkgICAge2RzdCA9IE9wZXJh
bmQuTWVtTG9jIG1lbWxvYzEsDQoJCQkJICAgICBzcmMgPSBPcGVyYW5kLk1lbUxvYyBtZW1sb2My
LC4uLn0pLA0KCSAgICAgIHsuLi59KSANCgkgICA9PiBNZW1Mb2MuZXEobWVtbG9jMSxtZW1sb2My
KSANCgkgICB8IF8gPT4gZmFsc2UNCg0KCXZhbCB0ZW1wbGF0ZSA6IHRlbXBsYXRlIA0KCSAgPSB7
c3RhcnQgPSBFbXB0eU9yTm9uRW1wdHksDQoJICAgICBzdGF0ZW1lbnRzID0gW09uZSBpc0luc3Ry
dWN0aW9uTU9WX2VxU3JjRHN0XSwNCgkgICAgIGZpbmlzaCA9IEVtcHR5T3JOb25FbXB0eSwNCgkg
ICAgIHRyYW5zZmVyID0gZm4gXyA9PiB0cnVlfQ0KDQoJdmFsIHJld3JpdGVyIDogcmV3cml0ZXIN
CgkgID0gZm4ge2xhYmVsLA0KCQlwcm9maWxlSW5mbywNCgkJc3RhcnQsIA0KCQlzdGF0ZW1lbnRz
IGFzDQoJCVtbKEFzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5NT1YgDQoJCQkJCSB7
c3JjID0gc3JjMSwgDQoJCQkJCSAgZHN0ID0gZHN0MSwgDQoJCQkJCSAgc2l6ZSA9IHNpemUxfSks
DQoJCSAgIHsuLi59KV1dLA0KCQlmaW5pc2gsIA0KCQl0cmFuc2Zlcn0NCgkgICAgID0+IGxldA0K
CQkgIHZhbCBzdGF0ZW1lbnRzDQoJCSAgICA9IExpc3QuZm9sZChzdGFydCwNCgkJCQlmaW5pc2gs
DQoJCQkJb3AgOjopDQoJCWluIA0KCQkgIFNPTUUgKExpdmVuZXNzQmxvY2suVA0KCQkJe2xhYmVs
ID0gbGFiZWwsDQoJCQkgcHJvZmlsZUluZm8gPSBwcm9maWxlSW5mbywNCgkJCSBzdGF0ZW1lbnRz
ID0gc3RhdGVtZW50cywNCgkJCSB0cmFuc2ZlciA9IHRyYW5zZmVyfSkNCgkJZW5kDQoJICAgICB8
IF8gPT4gRXJyb3IuYnVnICJQZWVwaG9sZTogZWxpbVNlbGZNb3ZlIg0KDQoJdmFsIChjYWxsYmFj
ayxlbGltU2VsZk1vdmVfbXNnKQ0KCSAgPSBtYWtlX2NhbGxiYWNrX21zZyAiZWxpbVNlbGZNb3Zl
Ig0KICAgICAgaW4NCgl2YWwgZWxpbVNlbGZNb3ZlIDogb3B0aW1pemF0aW9uDQoJICA9IHt0ZW1w
bGF0ZSA9IHRlbXBsYXRlLA0KCSAgICAgcmV3cml0ZXIgPSByZXdyaXRlciwNCgkgICAgIGNhbGxi
YWNrID0gY2FsbGJhY2t9DQoJdmFsIGVsaW1TZWxmTW92ZV9tc2cgPSBlbGltU2VsZk1vdmVfbXNn
DQogICAgICBlbmQNCg0KICAgICAgbG9jYWwNCgl2YWwgaXNJbnN0cnVjdGlvbk1PVl9kc3RNZW1s
b2MgOiBzdGF0ZW1lbnRfdHlwZSAtPiBib29sDQoJICA9IGZuIChBc3NlbWJseS5JbnN0cnVjdGlv
biAoSW5zdHJ1Y3Rpb24uTU9WIA0KCQkJCSAgICAgIHtkc3QgPSBPcGVyYW5kLk1lbUxvYyBtZW1s
b2MsLi4ufSksDQoJCXsuLi59KQ0KCSAgICAgPT4gdHJ1ZQ0KCSAgICAgfCBfID0+IGZhbHNlDQoN
Cgl2YWwgaXNJbnN0cnVjdGlvbkJpbkFMTURfZHN0TWVtbG9jX29wZXJDb21tdXRlIDogc3RhdGVt
ZW50X3R5cGUgLT4gYm9vbA0KCSAgPSBmbiAoQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0
aW9uLkJpbkFMDQoJCQkJICAgICAge29wZXIsDQoJCQkJICAgICAgIGRzdCA9IE9wZXJhbmQuTWVt
TG9jIG1lbWxvYywuLi59KSwNCgkJey4uLn0pDQoJICAgICA9PiAob3BlciA9IEluc3RydWN0aW9u
LkFERCkNCgkgICAgICAgIG9yZWxzZQ0KCQkob3BlciA9IEluc3RydWN0aW9uLkFEQykNCgkJb3Jl
bHNlDQoJCShvcGVyID0gSW5zdHJ1Y3Rpb24uQU5EKQ0KCQlvcmVsc2UNCgkJKG9wZXIgPSBJbnN0
cnVjdGlvbi5PUikNCgkJb3JlbHNlDQoJCShvcGVyID0gSW5zdHJ1Y3Rpb24uWE9SKQ0KCSAgICAg
fCAoQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9uLnBNRA0KCQkJCSAgICAgIHtvcGVy
LA0KCQkJCSAgICAgICBkc3QgPSBPcGVyYW5kLk1lbUxvYyBtZW1sb2MsLi4ufSksDQoJCXsuLi59
KQ0KCSAgICAgPT4gKG9wZXIgPSBJbnN0cnVjdGlvbi5JTVVMKQ0KCSAgICAgICAgb3JlbHNlDQoJ
CShvcGVyID0gSW5zdHJ1Y3Rpb24uTVVMKQ0KCSAgIHwgXyA9PiBmYWxzZQ0KDQoJdmFsIHRlbXBs
YXRlIDogdGVtcGxhdGUgDQoJICA9IHtzdGFydCA9IEVtcHR5T3JOb25FbXB0eSwNCgkgICAgIHN0
YXRlbWVudHMgPSBbT25lIGlzSW5zdHJ1Y3Rpb25NT1ZfZHN0TWVtbG9jLA0KCQkJICAgQWxsIGlz
Q29tbWVudCwNCgkJCSAgIE9uZSBpc0luc3RydWN0aW9uQmluQUxNRF9kc3RNZW1sb2Nfb3BlckNv
bW11dGVdLA0KCSAgICAgZmluaXNoID0gRW1wdHlPck5vbkVtcHR5LA0KCSAgICAgdHJhbnNmZXIg
PSBmbiBfID0+IHRydWV9DQoNCgl2YWwgcmV3cml0ZXIgOiByZXdyaXRlcg0KCSAgPSBmbiB7bGFi
ZWwsDQoJCXByb2ZpbGVJbmZvLA0KCQlzdGFydCwgDQoJCXN0YXRlbWVudHMgYXMNCgkJW1soQXNz
ZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9uLk1PViANCgkJCQkJIHtzcmMgPSBzcmMxLA0K
CQkJCQkgIGRzdCANCgkJCQkJICA9IGRzdDEgYXMgT3BlcmFuZC5NZW1Mb2MgbWVtbG9jX2RzdDEs
DQoJCQkJCSAgc2l6ZSA9IHNpemUxfSksDQoJCSAgIHtkZWFkID0gZGVhZDEsLi4ufSldLA0KCQkg
Y29tbWVudHMsDQoJCSBbKEFzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5CaW5BTCAN
CgkJCQkJIHtvcGVyID0gb3BlcjIsDQoJCQkJCSAgc3JjID0gc3JjMiwNCgkJCQkJICBkc3QgDQoJ
CQkJCSAgPSBkc3QyIGFzIE9wZXJhbmQuTWVtTG9jIG1lbWxvY19kc3QyLA0KCQkJCQkgIHNpemUg
PSBzaXplMn0pLA0KCQkgICB7ZGVhZCA9IGRlYWQyLA0KCQkgICAgbGl2ZU91dCA9IGxpdmVPdXQy
LC4uLn0pXV0sDQoJCWZpbmlzaCwgDQoJCXRyYW5zZmVyfQ0KCSAgICAgPT4gaWYgU2l6ZS5lcShz
aXplMSxzaXplMikgYW5kYWxzbw0KCSAgICAgICAgICAgT3BlcmFuZC5lcShkc3QxLGRzdDIpIGFu
ZGFsc28NCgkJICAgbm90IChPcGVyYW5kLmVxKHNyYzEsc3JjMikpIGFuZGFsc28NCgkJICAgKGNh
c2UgKHNyYzEsc3JjMikNCgkJICAgICAgb2YgKE9wZXJhbmQuTWVtTG9jIG1lbWxvY19zcmMxLA0K
CQkJICBPcGVyYW5kLk1lbUxvYyBtZW1sb2Nfc3JjMikNCgkJICAgICAgID0+IExpc3QuY29udGFp
bnMoZGVhZDIsDQoJCQkJCW1lbWxvY19zcmMyLA0KCQkJCQlNZW1Mb2MuZXEpDQoJCQkgIGFuZGFs
c28NCgkJCSAgbm90IChMaXN0LmNvbnRhaW5zKGRlYWQxLA0KCQkJCQkgICAgIG1lbWxvY19zcmMx
LA0KCQkJCQkgICAgIE1lbUxvYy5lcSkpDQoJCSAgICAgICB8IChfLCBPcGVyYW5kLk1lbUxvYyBt
ZW1sb2Nfc3JjMikNCgkJICAgICAgID0+IExpc3QuY29udGFpbnMoZGVhZDIsDQoJCQkJCW1lbWxv
Y19zcmMyLA0KCQkJCQlNZW1Mb2MuZXEpDQoJCSAgICAgICB8IF8gPT4gZmFsc2UpIGFuZGFsc28N
CgkJICAgKGNhc2Ugc3JjMQ0KCQkgICAgICBvZiBPcGVyYW5kLk1lbUxvYyBtZW1sb2Nfc3JjMQ0K
CQkgICAgICAgPT4gbm90IChMaXN0LmV4aXN0cw0KCQkJICAgICAgIChtZW1sb2Nfc3JjMTo6KE1l
bUxvYy51dGlsaXplZCBtZW1sb2Nfc3JjMSksDQoJCQkJZm4gbWVtbG9jJw0KCQkJCSA9PiBNZW1M
b2MubWF5QWxpYXMobWVtbG9jJyxtZW1sb2NfZHN0MSkpKQ0KCQkgICAgICAgfCBfID0+IHRydWUp
IGFuZGFsc28NCgkJICAgKGNhc2Ugc3JjMg0KCQkgICAgICBvZiBPcGVyYW5kLk1lbUxvYyBtZW1s
b2Nfc3JjMg0KCQkgICAgICAgPT4gbm90IChMaXN0LmV4aXN0cw0KCQkJICAgICAgIChtZW1sb2Nf
c3JjMjo6KE1lbUxvYy51dGlsaXplZCBtZW1sb2Nfc3JjMiksDQoJCQkJZm4gbWVtbG9jJw0KCQkJ
CSA9PiBNZW1Mb2MubWF5QWxpYXMobWVtbG9jJyxtZW1sb2NfZHN0MSkpKQ0KCQkgICAgICAgfCBf
ID0+IHRydWUpDQoJCSAgdGhlbiBsZXQNCgkJCSB2YWwgc3RhdGVtZW50cw0KCQkJICAgPSAoQXNz
ZW1ibHkuaW5zdHJ1Y3Rpb25fbW92DQoJCQkgICAgICB7c3JjID0gc3JjMiwNCgkJCSAgICAgICBk
c3QgPSBkc3QxLA0KCQkJICAgICAgIHNpemUgPSBzaXplMX0pOjoNCgkJCSAgICAgKExpc3QuY29u
Y2F0DQoJCQkgICAgICBbTGlzdC5tYXAoY29tbWVudHMsICMxKSwNCgkJCSAgICAgICBbQXNzZW1i
bHkuaW5zdHJ1Y3Rpb25fYmluYWwNCgkJCQl7b3BlciA9IG9wZXIyLA0KCQkJCSBzcmMgPSBzcmMx
LA0KCQkJCSBkc3QgPSBkc3QyLA0KCQkJCSBzaXplID0gc2l6ZTJ9XV0pDQoNCgkJCSB2YWwge3N0
YXRlbWVudHMsIC4uLn0NCgkJCSAgID0gTGl2ZW5lc3NCbG9jay50b0xpdmVuZXNzU3RhdGVtZW50
cw0KCQkJICAgICB7c3RhdGVtZW50cyA9IHN0YXRlbWVudHMsDQoJCQkgICAgICBsaXZlID0gbGl2
ZU91dDJ9DQoNCgkJCSB2YWwgc3RhdGVtZW50cw0KCQkJICAgPSBMaXN0LmZvbGQoc3RhcnQsDQoJ
CQkJICAgICAgIExpc3QuY29uY2F0IFtzdGF0ZW1lbnRzLCANCgkJCQkJCSAgICBmaW5pc2hdLA0K
CQkJCSAgICAgICBvcCA6OikNCgkJICAgICAgIGluDQoJCQkgU09NRSAoTGl2ZW5lc3NCbG9jay5U
DQoJCQkgICAgICAge2xhYmVsID0gbGFiZWwsCQ0KCQkJCXByb2ZpbGVJbmZvID0gcHJvZmlsZUlu
Zm8sDQoJCQkJc3RhdGVtZW50cyA9IHN0YXRlbWVudHMsDQoJCQkJdHJhbnNmZXIgPSB0cmFuc2Zl
cn0pCQkgDQoJCSAgICAgICBlbmQNCgkJICBlbHNlIE5PTkUNCgkgICAgIHwge2xhYmVsLA0KCQlw
cm9maWxlSW5mbywNCgkJc3RhcnQsIA0KCQlzdGF0ZW1lbnRzIGFzDQoJCVtbKEFzc2VtYmx5Lklu
c3RydWN0aW9uIChJbnN0cnVjdGlvbi5NT1YgDQoJCQkJCSB7c3JjID0gc3JjMSwNCgkJCQkJICBk
c3QgDQoJCQkJCSAgPSBkc3QxIGFzIE9wZXJhbmQuTWVtTG9jIG1lbWxvY19kc3QxLA0KCQkJCQkg
IHNpemUgPSBzaXplMX0pLA0KCQkgICB7ZGVhZCA9IGRlYWQxLC4uLn0pXSwNCgkJIGNvbW1lbnRz
LA0KCQkgWyhBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24ucE1EIA0KCQkJCQkge29w
ZXIgPSBvcGVyMiwNCgkJCQkJICBzcmMgPSBzcmMyLA0KCQkJCQkgIGRzdCANCgkJCQkJICA9IGRz
dDIgYXMgT3BlcmFuZC5NZW1Mb2MgbWVtbG9jX2RzdDIsDQoJCQkJCSAgc2l6ZSA9IHNpemUyfSks
DQoJCSAgIHtkZWFkID0gZGVhZDIsDQoJCSAgICBsaXZlT3V0ID0gbGl2ZU91dDIsLi4ufSldXSwN
CgkJZmluaXNoLCANCgkJdHJhbnNmZXJ9DQoJICAgICA9PiBpZiBTaXplLmVxKHNpemUxLHNpemUy
KSBhbmRhbHNvDQoJICAgICAgICAgICBPcGVyYW5kLmVxKGRzdDEsZHN0MikgYW5kYWxzbw0KCQkg
ICBub3QgKE9wZXJhbmQuZXEoc3JjMSxzcmMyKSkgYW5kYWxzbw0KCQkgICAoY2FzZSAoc3JjMSxz
cmMyKQ0KCQkgICAgICBvZiAoT3BlcmFuZC5NZW1Mb2MgbWVtbG9jX3NyYzEsDQoJCQkgIE9wZXJh
bmQuTWVtTG9jIG1lbWxvY19zcmMyKQ0KCQkgICAgICAgPT4gTGlzdC5jb250YWlucyhkZWFkMiwN
CgkJCQkJbWVtbG9jX3NyYzIsDQoJCQkJCU1lbUxvYy5lcSkNCgkJCSAgYW5kYWxzbw0KCQkJICBu
b3QgKExpc3QuY29udGFpbnMoZGVhZDEsDQoJCQkJCSAgICAgbWVtbG9jX3NyYzEsDQoJCQkJCSAg
ICAgTWVtTG9jLmVxKSkNCgkJICAgICAgIHwgKF8sIE9wZXJhbmQuTWVtTG9jIG1lbWxvY19zcmMy
KQ0KCQkgICAgICAgPT4gTGlzdC5jb250YWlucyhkZWFkMiwNCgkJCQkJbWVtbG9jX3NyYzIsDQoJ
CQkJCU1lbUxvYy5lcSkNCgkJICAgICAgIHwgXyA9PiBmYWxzZSkgYW5kYWxzbw0KCQkgICAoY2Fz
ZSBzcmMxDQoJCSAgICAgIG9mIE9wZXJhbmQuTWVtTG9jIG1lbWxvY19zcmMxDQoJCSAgICAgICA9
PiBub3QgKExpc3QuZXhpc3RzDQoJCQkgICAgICAgKG1lbWxvY19zcmMxOjooTWVtTG9jLnV0aWxp
emVkIG1lbWxvY19zcmMxKSwNCgkJCQlmbiBtZW1sb2MnDQoJCQkJID0+IE1lbUxvYy5tYXlBbGlh
cyhtZW1sb2MnLG1lbWxvY19kc3QxKSkpDQoJCSAgICAgICB8IF8gPT4gdHJ1ZSkgYW5kYWxzbw0K
CQkgICAoY2FzZSBzcmMyDQoJCSAgICAgIG9mIE9wZXJhbmQuTWVtTG9jIG1lbWxvY19zcmMyDQoJ
CSAgICAgICA9PiBub3QgKExpc3QuZXhpc3RzDQoJCQkgICAgICAgKG1lbWxvY19zcmMyOjooTWVt
TG9jLnV0aWxpemVkIG1lbWxvY19zcmMyKSwNCgkJCQlmbiBtZW1sb2MnDQoJCQkJID0+IE1lbUxv
Yy5tYXlBbGlhcyhtZW1sb2MnLG1lbWxvY19kc3QxKSkpDQoJCSAgICAgICB8IF8gPT4gdHJ1ZSkN
CgkJICB0aGVuIGxldA0KCQkJIHZhbCBzdGF0ZW1lbnRzDQoJCQkgICA9IChBc3NlbWJseS5pbnN0
cnVjdGlvbl9tb3YNCgkJCSAgICAgIHtzcmMgPSBzcmMyLA0KCQkJICAgICAgIGRzdCA9IGRzdDEs
DQoJCQkgICAgICAgc2l6ZSA9IHNpemUxfSk6Og0KCQkJICAgICAoTGlzdC5jb25jYXQNCgkJCSAg
ICAgIFtMaXN0Lm1hcChjb21tZW50cywgIzEpLA0KCQkJICAgICAgIFtBc3NlbWJseS5pbnN0cnVj
dGlvbl9wbWQNCgkJCQl7b3BlciA9IG9wZXIyLA0KCQkJCSBzcmMgPSBzcmMxLA0KCQkJCSBkc3Qg
PSBkc3QyLA0KCQkJCSBzaXplID0gc2l6ZTJ9XV0pDQoNCgkJCSB2YWwge3N0YXRlbWVudHMsIC4u
Ln0NCgkJCSAgID0gTGl2ZW5lc3NCbG9jay50b0xpdmVuZXNzU3RhdGVtZW50cw0KCQkJICAgICB7
c3RhdGVtZW50cyA9IHN0YXRlbWVudHMsDQoJCQkgICAgICBsaXZlID0gbGl2ZU91dDJ9DQoNCgkJ
CSB2YWwgc3RhdGVtZW50cw0KCQkJICAgPSBMaXN0LmZvbGQoc3RhcnQsDQoJCQkJICAgICAgIExp
c3QuY29uY2F0IFtzdGF0ZW1lbnRzLA0KCQkJCQkJICAgIGZpbmlzaF0sDQoJCQkJICAgICAgIG9w
IDo6KQ0KCQkgICAgICAgaW4NCgkJCSBTT01FIChMaXZlbmVzc0Jsb2NrLlQNCgkJCSAgICAgICB7
bGFiZWwgPSBsYWJlbCwNCgkJCQlwcm9maWxlSW5mbyA9IHByb2ZpbGVJbmZvLA0KCQkJCXN0YXRl
bWVudHMgPSBzdGF0ZW1lbnRzLA0KCQkJCXRyYW5zZmVyID0gdHJhbnNmZXJ9KQkJIA0KCQkgICAg
ICAgZW5kDQoJCSAgZWxzZSBOT05FDQogICAgICAgICAgICAgfCBfID0+IEVycm9yLmJ1ZyAiUGVl
cGhvbGU6IGNvbW11dGVCaW5BTE1EIg0KDQoJdmFsIChjYWxsYmFjayxjb21tdXRlQmluQUxNRF9t
c2cpDQoJICA9IG1ha2VfY2FsbGJhY2tfbXNnICJjb21tdXRlQmluQUxNRCINCiAgICAgIGluDQoJ
dmFsIGNvbW11dGVCaW5BTE1EIDogb3B0aW1pemF0aW9uDQoJICA9IHt0ZW1wbGF0ZSA9IHRlbXBs
YXRlLA0KCSAgICAgcmV3cml0ZXIgPSByZXdyaXRlciwNCgkgICAgIGNhbGxiYWNrID0gY2FsbGJh
Y2t9DQoJdmFsIGNvbW11dGVCaW5BTE1EX21zZyA9IGNvbW11dGVCaW5BTE1EX21zZw0KICAgICAg
ZW5kDQoNCiAgICAgIGxvY2FsDQoJdmFsIGlzSW5zdHJ1Y3Rpb25GTU9WX2RzdFRlbXAgOiBzdGF0
ZW1lbnRfdHlwZSAtPiBib29sDQoJICA9IGZuIChBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1
Y3Rpb24ucEZNT1YgDQoJCQkJICAgICAge2RzdCA9IE9wZXJhbmQuTWVtTG9jIG1lbWxvYywuLi59
KSwgDQoJCXsuLi59KQ0KCSAgICAgPT4gTWVtTG9jLmlzVGVtcCBtZW1sb2MNCgkgICAgIHwgXyA9
PiBmYWxzZQ0KDQoJdmFsIGlzSW5zdHJ1Y3Rpb25GbHRBX2RzdFRlbXAgOiBzdGF0ZW1lbnRfdHlw
ZSAtPiBib29sDQoJICA9IGZuIChBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24ucEZC
aW5BDQoJCQkJICAgICAge2RzdCA9IE9wZXJhbmQuTWVtTG9jIG1lbWxvYywuLi59KSwNCgkJey4u
Ln0pDQoJICAgICA9PiBNZW1Mb2MuaXNUZW1wIG1lbWxvYw0KCSAgICAgfCAoQXNzZW1ibHkuSW5z
dHJ1Y3Rpb24gKEluc3RydWN0aW9uLnBGVW5BDQoJCQkJICAgICAge2RzdCA9IE9wZXJhbmQuTWVt
TG9jIG1lbWxvYywuLi59KSwNCgkJDQoJCXsuLi59KQ0KCSAgICAgPT4gTWVtTG9jLmlzVGVtcCBt
ZW1sb2MNCgkgICAgIHwgKEFzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5wRlBUQU4N
CgkJCQkgICAgICB7ZHN0ID0gT3BlcmFuZC5NZW1Mb2MgbWVtbG9jLC4uLn0pLA0KCQkNCgkJey4u
Ln0pDQoJICAgICA9PiBNZW1Mb2MuaXNUZW1wIG1lbWxvYw0KCSAgICAgfCAoQXNzZW1ibHkuSW5z
dHJ1Y3Rpb24gKEluc3RydWN0aW9uLnBGQmluQVMNCgkJCQkgICAgICB7ZHN0ID0gT3BlcmFuZC5N
ZW1Mb2MgbWVtbG9jLC4uLn0pLA0KCQl7Li4ufSkNCgkgICAgID0+IE1lbUxvYy5pc1RlbXAgbWVt
bG9jDQoJICAgICB8IChBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24ucEZCaW5BU1AN
CgkJCQkgICAgICB7ZHN0ID0gT3BlcmFuZC5NZW1Mb2MgbWVtbG9jLC4uLn0pLA0KCQl7Li4ufSkN
CgkgICAgID0+IE1lbUxvYy5pc1RlbXAgbWVtbG9jDQoJICAgICB8IF8gPT4gZmFsc2UNCg0KCXZh
bCBpc0luc3RydWN0aW9uRk1PVl9zcmNUZW1wX3NyY0RlYWQgOiBzdGF0ZW1lbnRfdHlwZSAtPiBi
b29sDQoJICA9IGZuIChBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rpb24ucEZNT1YgDQoJ
CQkJICAgICAge3NyYyA9IE9wZXJhbmQuTWVtTG9jIG1lbWxvYywuLi59KSwNCgkJe2RlYWQsLi4u
fSkNCgkgICAgID0+IE1lbUxvYy5pc1RlbXAgbWVtbG9jDQoJICAgICAgICBhbmRhbHNvDQoJCUxp
c3QuY29udGFpbnMoZGVhZCwgbWVtbG9jLCBNZW1Mb2MuZXEpDQoJICAgICB8IF8gPT4gZmFsc2UN
Cg0KCXZhbCB0ZW1wbGF0ZSA6IHRlbXBsYXRlIA0KCSAgPSB7c3RhcnQgPSBFbXB0eU9yTm9uRW1w
dHksDQoJICAgICBzdGF0ZW1lbnRzID0gW09uZSBpc0luc3RydWN0aW9uRk1PVl9kc3RUZW1wLA0K
CQkJICAgQWxsIChmbiBhc20gDQoJCQkJID0+IChpc0NvbW1lbnQgYXNtKSANCgkJCQkgICAgb3Jl
bHNlDQoJCQkJICAgIChpc0luc3RydWN0aW9uRmx0QV9kc3RUZW1wIGFzbSkpLA0KCQkJICAgT25l
IGlzSW5zdHJ1Y3Rpb25GTU9WX3NyY1RlbXBfc3JjRGVhZF0sDQoJICAgICBmaW5pc2ggPSBFbXB0
eU9yTm9uRW1wdHksDQoJICAgICB0cmFuc2ZlciA9IGZuIF8gPT4gdHJ1ZX0NCg0KCXZhbCByZXdy
aXRlciA6IHJld3JpdGVyDQoJICA9IGZuIHtsYWJlbCwNCgkJcHJvZmlsZUluZm8sDQoJCXN0YXJ0
LCANCgkJc3RhdGVtZW50cyBhcw0KCQlbWyhBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5zdHJ1Y3Rp
b24ucEZNT1YgDQoJCQkJCSB7c3JjID0gc3JjMSwNCgkJCQkJICBkc3QgPSBkc3QxIGFzIE9wZXJh
bmQuTWVtTG9jIG1lbWxvYzEsDQoJCQkJCSAgc2l6ZSA9IHNpemUxfSksDQoJCSAgIHsuLi59KV0s
DQoJCSBzdGF0ZW1lbnRzJywNCgkJIFsoQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9u
LnBGTU9WIA0KCQkJCQkge3NyYyA9IHNyYzIgYXMgT3BlcmFuZC5NZW1Mb2MgbWVtbG9jMiwNCgkJ
CQkJICBkc3QgPSBkc3QyLA0KCQkJCQkgIHNpemUgPSBzaXplMn0pLA0KCQkgICB7bGl2ZU91dCA9
IGxpdmVPdXQyLC4uLn0pXV0sDQoJCWZpbmlzaCwgDQoJCXRyYW5zZmVyfQ0KCSAgICAgPT4gaWYg
U2l6ZS5lcShzaXplMSxzaXplMikgYW5kYWxzbw0KCSAgICAgICAgICAgTWVtTG9jLmVxKG1lbWxv
YzEsbWVtbG9jMikgYW5kYWxzbw0KCQkgICBMaXN0LmZvcmFsbA0KCQkgICAoc3RhdGVtZW50cycs
DQoJCSAgICBmbiAoQXNzZW1ibHkuQ29tbWVudCBfLCBsaXZlSW5mbykgPT4gdHJ1ZQ0KCQkgICAg
IHwgKEFzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5wRkJpbkENCgkJCQkJICAgICAg
e29wZXIsIA0KCQkJCQkgICAgICAgc3JjLCANCgkJCQkJICAgICAgIGRzdCBhcyBPcGVyYW5kLk1l
bUxvYyBtZW1sb2MsIA0KCQkJCQkgICAgICAgc2l6ZX0pLA0KCQkJbGl2ZUluZm8pDQoJCSAgICAg
PT4gU2l6ZS5lcShzaXplMSxzaXplKSBhbmRhbHNvDQogICAgICAgICAgICAgICAgICAgICAgICBN
ZW1Mb2MuZXEobWVtbG9jMSxtZW1sb2MpIGFuZGFsc28NCgkJCShjYXNlIChzcmMsZHN0MikNCgkJ
CSAgIG9mIChPcGVyYW5kLk1lbUxvYyBtZW1sb2Nfc3JjLA0KCQkJICAgICAgIE9wZXJhbmQuTWVt
TG9jIG1lbWxvY19kc3QyKQ0KCQkJICAgID0+IExpc3QuZm9yYWxsDQoJCQkgICAgICAgKG1lbWxv
Y19zcmM6OihNZW1Mb2MudXRpbGl6ZWQgbWVtbG9jX3NyYyksDQoJCQkJZm4gbWVtbG9jJyANCgkJ
CQkgPT4gbm90IChNZW1Mb2MubWF5QWxpYXMobWVtbG9jX2RzdDIsbWVtbG9jJykpKQ0KCQkJICAg
IHwgKE9wZXJhbmQuSW1tZWRpYXRlIF8sIF8pID0+IHRydWUNCgkJCSAgICB8IF8gPT4gZmFsc2Up
DQoJCSAgICAgfCAoQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9uLnBGVW5BDQoJCQkJ
CSAgICAgIHtvcGVyLCANCgkJCQkJICAgICAgIGRzdCBhcyBPcGVyYW5kLk1lbUxvYyBtZW1sb2Ms
IA0KCQkJCQkgICAgICAgc2l6ZX0pLA0KCQkJbGl2ZUluZm8pDQoJCSAgICAgPT4gU2l6ZS5lcShz
aXplMSxzaXplKSBhbmRhbHNvDQogICAgICAgICAgICAgICAgICAgICAgICBNZW1Mb2MuZXEobWVt
bG9jMSxtZW1sb2MpIA0KCQkgICAgIHwgKEFzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlv
bi5wRlBUQU4NCgkJCQkJICAgICAge2RzdCBhcyBPcGVyYW5kLk1lbUxvYyBtZW1sb2MsIA0KCQkJ
CQkgICAgICAgc2l6ZX0pLA0KCQkJbGl2ZUluZm8pDQoJCSAgICAgPT4gU2l6ZS5lcShzaXplMSxz
aXplKSBhbmRhbHNvDQogICAgICAgICAgICAgICAgICAgICAgICBNZW1Mb2MuZXEobWVtbG9jMSxt
ZW1sb2MpIA0KCQkgICAgIHwgKEFzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5wRkJp
bkFTDQoJCQkJCSAgICAgIHtvcGVyLCANCgkJCQkJICAgICAgIHNyYywgDQoJCQkJCSAgICAgICBk
c3QgYXMgT3BlcmFuZC5NZW1Mb2MgbWVtbG9jLCANCgkJCQkJICAgICAgIHNpemV9KSwNCgkJCWxp
dmVJbmZvKQ0KCQkgICAgID0+IFNpemUuZXEoc2l6ZTEsc2l6ZSkgYW5kYWxzbw0KICAgICAgICAg
ICAgICAgICAgICAgICAgTWVtTG9jLmVxKG1lbWxvYzEsbWVtbG9jKSBhbmRhbHNvDQoJCQkoY2Fz
ZSAoc3JjLGRzdDIpDQoJCQkgICBvZiAoT3BlcmFuZC5NZW1Mb2MgbWVtbG9jX3NyYywNCgkJCSAg
ICAgICBPcGVyYW5kLk1lbUxvYyBtZW1sb2NfZHN0MikNCgkJCSAgICA9PiBMaXN0LmZvcmFsbA0K
CQkJICAgICAgIChtZW1sb2Nfc3JjOjooTWVtTG9jLnV0aWxpemVkIG1lbWxvY19zcmMpLA0KCQkJ
CWZuIG1lbWxvYycgDQoJCQkJID0+IG5vdCAoTWVtTG9jLm1heUFsaWFzKG1lbWxvY19kc3QyLG1l
bWxvYycpKSkNCgkJCSAgICB8IChPcGVyYW5kLkltbWVkaWF0ZSBfLCBfKSA9PiB0cnVlDQoJCQkg
ICAgfCBfID0+IGZhbHNlKQ0KCQkgICAgIHwgKEFzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVj
dGlvbi5wRkJpbkFTUA0KCQkJCQkgICAgICB7b3BlciwgDQoJCQkJCSAgICAgICBzcmMsIA0KCQkJ
CQkgICAgICAgZHN0IGFzIE9wZXJhbmQuTWVtTG9jIG1lbWxvYywgDQoJCQkJCSAgICAgICBzaXpl
fSksDQoJCQlsaXZlSW5mbykNCgkJICAgICA9PiBTaXplLmVxKHNpemUxLHNpemUpIGFuZGFsc28N
CiAgICAgICAgICAgICAgICAgICAgICAgIE1lbUxvYy5lcShtZW1sb2MxLG1lbWxvYykgYW5kYWxz
bw0KCQkJKGNhc2UgKHNyYyxkc3QyKQ0KCQkJICAgb2YgKE9wZXJhbmQuTWVtTG9jIG1lbWxvY19z
cmMsDQoJCQkgICAgICAgT3BlcmFuZC5NZW1Mb2MgbWVtbG9jX2RzdDIpDQoJCQkgICAgPT4gTGlz
dC5mb3JhbGwNCgkJCSAgICAgICAobWVtbG9jX3NyYzo6KE1lbUxvYy51dGlsaXplZCBtZW1sb2Nf
c3JjKSwNCgkJCQlmbiBtZW1sb2MnIA0KCQkJCSA9PiBub3QgKE1lbUxvYy5tYXlBbGlhcyhtZW1s
b2NfZHN0MixtZW1sb2MnKSkpDQoJCQkgICAgfCAoT3BlcmFuZC5JbW1lZGlhdGUgXywgXykgPT4g
dHJ1ZQ0KCQkJICAgIHwgXyA9PiBmYWxzZSkNCgkJICAgICB8IF8gPT4gRXJyb3IuYnVnICJQZWVw
aG9sZTogZWxpbUZsdEFDb3B5IikNCgkJICB0aGVuIGxldA0KCQkJIHZhbCBzdGF0ZW1lbnRzDQoJ
CQkgICA9IExpc3QubWFwDQoJCQkgICAgIChzdGF0ZW1lbnRzJywNCgkJCSAgICAgIGZuIChhc20s
aW5mbykNCgkJCSAgICAgICA9PiBBc3NlbWJseS5yZXBsYWNlDQoJCQkgICAgICAgICAgKGZuIHt1
c2UsIGRlZn0gDQoJCQkJICAgID0+IGZuIG9wZXJhbmQgDQoJCQkJICAgICAgICA9PiBpZiBPcGVy
YW5kLmVxKG9wZXJhbmQsZHN0MSkNCgkJCQkJICAgICB0aGVuIGRzdDINCgkJCQkJICAgICBlbHNl
IG9wZXJhbmQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNtKQ0KDQoJCQkg
dmFsIHtzdGF0ZW1lbnRzLCAuLi59DQoJCQkgICA9IExpdmVuZXNzQmxvY2sudG9MaXZlbmVzc1N0
YXRlbWVudHMNCgkJCSAgICAge3N0YXRlbWVudHMgDQoJCQkgICAgICA9IChBc3NlbWJseS5pbnN0
cnVjdGlvbl9wZm1vdg0KCQkJCSB7c3JjID0gc3JjMSwNCgkJCQkgIGRzdCA9IGRzdDIsDQoJCQkJ
ICBzaXplID0gc2l6ZTF9KTo6c3RhdGVtZW50cywNCgkJCSAgICAgIGxpdmUgPSBsaXZlT3V0Mn0N
Cg0KCQkJIHZhbCBzdGF0ZW1lbnRzDQoJCQkgICA9IExpc3QuZm9sZChzdGFydCwNCgkJCQkgICAg
ICAgTGlzdC5jb25jYXQgW3N0YXRlbWVudHMsIA0KCQkJCQkJICAgIGZpbmlzaF0sDQoJCQkJICAg
ICAgIG9wIDo6KQ0KCQkgICAgICAgaW4NCgkJCSBTT01FIChMaXZlbmVzc0Jsb2NrLlQNCgkJCSAg
ICAgICB7bGFiZWwgPSBsYWJlbCwNCgkJCQlwcm9maWxlSW5mbyA9IHByb2ZpbGVJbmZvLA0KCQkJ
CXN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzLA0KCQkJCXRyYW5zZmVyID0gdHJhbnNmZXJ9KQkJIA0K
CQkgICAgICAgZW5kDQoJCSAgZWxzZSBOT05FDQogICAgICAgICAgICAgfCBfID0+IEVycm9yLmJ1
ZyAiUGVlcGhvbGU6IGVsaW1GbHRBQ29weSINCg0KCXZhbCAoY2FsbGJhY2ssZWxpbUZsdEFDb3B5
X21zZykNCgkgID0gbWFrZV9jYWxsYmFja19tc2cgImVsaW1GbHRBQ29weSINCiAgICAgIGluDQoJ
dmFsIGVsaW1GbHRBQ29weSA6IG9wdGltaXphdGlvbg0KCSAgPSB7dGVtcGxhdGUgPSB0ZW1wbGF0
ZSwNCgkgICAgIHJld3JpdGVyID0gcmV3cml0ZXIsDQoJICAgICBjYWxsYmFjayA9IGNhbGxiYWNr
fQ0KCXZhbCBlbGltRmx0QUNvcHlfbXNnID0gZWxpbUZsdEFDb3B5X21zZw0KICAgICAgZW5kDQoN
CiAgICAgIGxvY2FsDQoJdmFsIGlzSW5zdHJ1Y3Rpb25GTU9WX2VxU3JjRHN0IDogc3RhdGVtZW50
X3R5cGUgLT4gYm9vbA0KCT0gZm4gKEFzc2VtYmx5Lkluc3RydWN0aW9uIChJbnN0cnVjdGlvbi5w
Rk1PViANCgkJCQkgICAge2RzdCA9IE9wZXJhbmQuTWVtTG9jIG1lbWxvYzEsDQoJCQkJICAgICBz
cmMgPSBPcGVyYW5kLk1lbUxvYyBtZW1sb2MyLC4uLn0pLA0KCSAgICAgIHsuLi59KSANCgkgICA9
PiBNZW1Mb2MuZXEobWVtbG9jMSxtZW1sb2MyKSANCgkgICB8IF8gPT4gZmFsc2UNCg0KCXZhbCB0
ZW1wbGF0ZSA6IHRlbXBsYXRlIA0KCSAgPSB7c3RhcnQgPSBFbXB0eU9yTm9uRW1wdHksDQoJICAg
ICBzdGF0ZW1lbnRzID0gW09uZSBpc0luc3RydWN0aW9uRk1PVl9lcVNyY0RzdF0sDQoJICAgICBm
aW5pc2ggPSBFbXB0eU9yTm9uRW1wdHksDQoJICAgICB0cmFuc2ZlciA9IGZuIF8gPT4gdHJ1ZX0N
Cg0KCXZhbCByZXdyaXRlciA6IHJld3JpdGVyDQoJICA9IGZuIHtsYWJlbCwNCgkJcHJvZmlsZUlu
Zm8sDQoJCXN0YXJ0LCANCgkJc3RhdGVtZW50cyBhcw0KCQlbWyhBc3NlbWJseS5JbnN0cnVjdGlv
biAoSW5zdHJ1Y3Rpb24ucEZNT1YgDQoJCQkJCSB7c3JjID0gc3JjMSwgDQoJCQkJCSAgZHN0ID0g
ZHN0MSwgDQoJCQkJCSAgc2l6ZSA9IHNpemUxfSksDQoJCSAgIHsuLi59KV1dLA0KCQlmaW5pc2gs
IA0KCQl0cmFuc2Zlcn0NCgkgICAgID0+IGxldA0KCQkgIHZhbCBzdGF0ZW1lbnRzIA0KCQkgICAg
PSBMaXN0LmZvbGQNCgkJICAgICAgKHN0YXJ0LCANCgkJICAgICAgIGZpbmlzaCwgDQoJCSAgICAg
ICBvcCA6OikNCgkJaW4gDQoJCSAgU09NRSAoTGl2ZW5lc3NCbG9jay5UDQoJCQl7bGFiZWwgPSBs
YWJlbCwNCgkJCSBwcm9maWxlSW5mbyA9IHByb2ZpbGVJbmZvLA0KCQkJIHN0YXRlbWVudHMgPSBz
dGF0ZW1lbnRzLA0KCQkJIHRyYW5zZmVyID0gdHJhbnNmZXJ9KQ0KCQllbmQNCgkgICAgIHwgXyA9
PiBFcnJvci5idWcgIlBlZXBob2xlOiBlbGltRmx0U2VsZk1vdmUiDQogDQoJdmFsIChjYWxsYmFj
ayxlbGltRmx0U2VsZk1vdmVfbXNnKQ0KCSAgPSBtYWtlX2NhbGxiYWNrX21zZyAiZWxpbUZsdFNl
bGZNb3ZlIg0KICAgICAgaW4NCgl2YWwgZWxpbUZsdFNlbGZNb3ZlIDogb3B0aW1pemF0aW9uDQoJ
ICA9IHt0ZW1wbGF0ZSA9IHRlbXBsYXRlLA0KCSAgICAgcmV3cml0ZXIgPSByZXdyaXRlciwNCgkg
ICAgIGNhbGxiYWNrID0gY2FsbGJhY2t9DQoJdmFsIGVsaW1GbHRTZWxmTW92ZV9tc2cgPSBlbGlt
Rmx0U2VsZk1vdmVfbXNnDQogICAgICBlbmQNCg0KICAgICAgbG9jYWwNCgl2YWwgaXNJbnN0cnVj
dGlvbkZNT1ZfZHN0TWVtbG9jIDogc3RhdGVtZW50X3R5cGUgLT4gYm9vbA0KCSAgPSBmbiAoQXNz
ZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9uLnBGTU9WIA0KCQkJCSAgICAgIHtkc3QgPSBP
cGVyYW5kLk1lbUxvYyBtZW1sb2MsLi4ufSksDQoJCXsuLi59KQ0KCSAgICAgPT4gdHJ1ZQ0KCSAg
ICAgfCBfID0+IGZhbHNlDQoNCgl2YWwgaXNJbnN0cnVjdGlvbkZsdEJpbkFfZHN0TWVtbG9jIDog
c3RhdGVtZW50X3R5cGUgLT4gYm9vbA0KCSAgPSBmbiAoQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKElu
c3RydWN0aW9uLnBGQmluQQ0KCQkJCSAgICAgIHtvcGVyLA0KCQkJCSAgICAgICBkc3QgPSBPcGVy
YW5kLk1lbUxvYyBtZW1sb2MsLi4ufSksDQoJCXsuLi59KQ0KCSAgICAgPT4gdHJ1ZQ0KCSAgICAg
fCBfID0+IGZhbHNlDQoNCgl2YWwgdGVtcGxhdGUgOiB0ZW1wbGF0ZSANCgkgID0ge3N0YXJ0ID0g
RW1wdHlPck5vbkVtcHR5LA0KCSAgICAgc3RhdGVtZW50cyA9IFtPbmUgaXNJbnN0cnVjdGlvbkZN
T1ZfZHN0TWVtbG9jLA0KCQkJICAgQWxsIGlzQ29tbWVudCwNCgkJCSAgIE9uZSBpc0luc3RydWN0
aW9uRmx0QmluQV9kc3RNZW1sb2NdLA0KCSAgICAgZmluaXNoID0gRW1wdHlPck5vbkVtcHR5LA0K
CSAgICAgdHJhbnNmZXIgPSBmbiBfID0+IHRydWV9DQoNCgl2YWwgcmV3cml0ZXIgOiByZXdyaXRl
cg0KCSAgPSBmbiB7bGFiZWwsDQoJCXByb2ZpbGVJbmZvLA0KCQlzdGFydCwgDQoJCXN0YXRlbWVu
dHMgYXMNCgkJW1soQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9uLnBGTU9WIA0KCQkJ
CQkge3NyYyA9IHNyYzEsDQoJCQkJCSAgZHN0IA0KCQkJCQkgID0gZHN0MSBhcyBPcGVyYW5kLk1l
bUxvYyBtZW1sb2NfZHN0MSwNCgkJCQkJICBzaXplID0gc2l6ZTF9KSwNCgkJICAge2RlYWQgPSBk
ZWFkMSwuLi59KV0sDQoJCSBjb21tZW50cywNCgkJIFsoQXNzZW1ibHkuSW5zdHJ1Y3Rpb24gKElu
c3RydWN0aW9uLnBGQmluQSANCgkJCQkJIHtvcGVyID0gb3BlcjIsDQoJCQkJCSAgc3JjID0gc3Jj
MiwNCgkJCQkJICBkc3QgDQoJCQkJCSAgPSBkc3QyIGFzIE9wZXJhbmQuTWVtTG9jIG1lbWxvY19k
c3QyLA0KCQkJCQkgIHNpemUgPSBzaXplMn0pLA0KCQkgICB7ZGVhZCA9IGRlYWQyLA0KCQkgICAg
bGl2ZU91dCA9IGxpdmVPdXQyLC4uLn0pXV0sDQoJCWZpbmlzaCwgDQoJCXRyYW5zZmVyfQ0KCSAg
ICAgPT4gaWYgU2l6ZS5lcShzaXplMSxzaXplMikgYW5kYWxzbw0KCSAgICAgICAgICAgT3BlcmFu
ZC5lcShkc3QxLGRzdDIpIGFuZGFsc28NCgkJICAgbm90IChPcGVyYW5kLmVxKHNyYzEsIHNyYzIp
KSBhbmRhbHNvDQoJCSAgIChjYXNlIChzcmMxLHNyYzIpDQoJCSAgICAgIG9mIChPcGVyYW5kLk1l
bUxvYyBtZW1sb2Nfc3JjMSwNCgkJCSAgT3BlcmFuZC5NZW1Mb2MgbWVtbG9jX3NyYzIpDQoJCSAg
ICAgICA9PiBMaXN0LmNvbnRhaW5zKGRlYWQyLA0KCQkJCQltZW1sb2Nfc3JjMiwNCgkJCQkJTWVt
TG9jLmVxKQ0KCQkJICBhbmRhbHNvDQoJCQkgIG5vdCAoTGlzdC5jb250YWlucyhkZWFkMSwNCgkJ
CQkJICAgICBtZW1sb2Nfc3JjMSwNCgkJCQkJICAgICBNZW1Mb2MuZXEpKQ0KCQkgICAgICAgfCAo
XywgT3BlcmFuZC5NZW1Mb2MgbWVtbG9jX3NyYzIpDQoJCSAgICAgICA9PiBMaXN0LmNvbnRhaW5z
KGRlYWQyLA0KCQkJCQltZW1sb2Nfc3JjMiwNCgkJCQkJTWVtTG9jLmVxKQ0KCQkgICAgICAgfCBf
ID0+IGZhbHNlKSBhbmRhbHNvDQoJCSAgIChjYXNlIHNyYzENCgkJICAgICAgb2YgT3BlcmFuZC5N
ZW1Mb2MgbWVtbG9jX3NyYzENCgkJICAgICAgID0+IG5vdCAoTGlzdC5leGlzdHMNCgkJCSAgICAg
ICAobWVtbG9jX3NyYzE6OihNZW1Mb2MudXRpbGl6ZWQgbWVtbG9jX3NyYzEpLA0KCQkJCWZuIG1l
bWxvYycNCgkJCQkgPT4gTWVtTG9jLm1heUFsaWFzKG1lbWxvYycsbWVtbG9jX2RzdDEpKSkNCgkJ
ICAgICAgIHwgXyA9PiB0cnVlKSBhbmRhbHNvDQoJCSAgIChjYXNlIHNyYzINCgkJICAgICAgb2Yg
T3BlcmFuZC5NZW1Mb2MgbWVtbG9jX3NyYzINCgkJICAgICAgID0+IG5vdCAoTGlzdC5leGlzdHMN
CgkJCSAgICAgICAobWVtbG9jX3NyYzI6OihNZW1Mb2MudXRpbGl6ZWQgbWVtbG9jX3NyYzIpLA0K
CQkJCWZuIG1lbWxvYycNCgkJCQkgPT4gTWVtTG9jLm1heUFsaWFzKG1lbWxvYycsbWVtbG9jX2Rz
dDEpKSkNCgkJICAgICAgIHwgXyA9PiB0cnVlKQ0KCQkgIHRoZW4gbGV0DQoJCQkgdmFsIHN0YXRl
bWVudHMNCgkJCSAgID0gKEFzc2VtYmx5Lmluc3RydWN0aW9uX3BmbW92DQoJCQkgICAgICB7c3Jj
ID0gc3JjMiwNCgkJCSAgICAgICBkc3QgPSBkc3QxLA0KCQkJICAgICAgIHNpemUgPSBzaXplMX0p
OjoNCgkJCSAgICAgKExpc3QuY29uY2F0DQoJCQkgICAgICBbTGlzdC5tYXAoY29tbWVudHMsICMx
KSwNCgkJCSAgICAgICBbQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fcGZiaW5hDQoJCQkJe29wZXIgPSBJ
bnN0cnVjdGlvbi5mYmluYV9yZXZlcnNlIG9wZXIyLA0KCQkJCSBzcmMgPSBzcmMxLA0KCQkJCSBk
c3QgPSBkc3QyLA0KCQkJCSBzaXplID0gc2l6ZTJ9XV0pDQoNCgkJCSB2YWwge3N0YXRlbWVudHMs
IC4uLn0NCgkJCSAgID0gTGl2ZW5lc3NCbG9jay50b0xpdmVuZXNzU3RhdGVtZW50cw0KCQkJICAg
ICB7c3RhdGVtZW50cyA9IHN0YXRlbWVudHMsDQoJCQkgICAgICBsaXZlID0gbGl2ZU91dDJ9DQoN
CgkJCSB2YWwgc3RhdGVtZW50cyANCgkJCSAgID0gTGlzdC5mb2xkKHN0YXJ0LCANCgkJCQkgICAg
ICAgTGlzdC5jb25jYXQgW3N0YXRlbWVudHMsDQoJCQkJCQkgICAgZmluaXNoXSwgDQoJCQkJICAg
ICAgIG9wIDo6KQ0KCQkgICAgICAgaW4NCgkJCSBTT01FIChMaXZlbmVzc0Jsb2NrLlQNCgkJCSAg
ICAgICB7bGFiZWwgPSBsYWJlbCwJDQoJCQkJcHJvZmlsZUluZm8gPSBwcm9maWxlSW5mbywNCgkJ
CQlzdGF0ZW1lbnRzID0gc3RhdGVtZW50cywNCgkJCQl0cmFuc2ZlciA9IHRyYW5zZmVyfSkJCSAN
CgkJICAgICAgIGVuZA0KCQkgIGVsc2UgTk9ORQ0KICAgICAgICAgICAgIHwgXyA9PiBFcnJvci5i
dWcgIlBlZXBob2xlOiBjb21tdXRlRmx0QmluQSINCg0KCXZhbCAoY2FsbGJhY2ssY29tbXV0ZUZs
dEJpbkFfbXNnKQ0KCSAgPSBtYWtlX2NhbGxiYWNrX21zZyAiY29tbXV0ZUZsdEJpbkEiDQogICAg
ICBpbg0KCXZhbCBjb21tdXRlRmx0QmluQSA6IG9wdGltaXphdGlvbg0KCSAgPSB7dGVtcGxhdGUg
PSB0ZW1wbGF0ZSwNCgkgICAgIHJld3JpdGVyID0gcmV3cml0ZXIsDQoJICAgICBjYWxsYmFjayA9
IGNhbGxiYWNrfQ0KCXZhbCBjb21tdXRlRmx0QmluQV9tc2cgPSBjb21tdXRlRmx0QmluQV9tc2cN
CiAgICAgIGVuZA0KDQogICAgICBsb2NhbA0KCXZhbCBpc0luc3RydWN0aW9uU0VUY2NfZHN0VGVt
cCA6IHN0YXRlbWVudF90eXBlIC0+IGJvb2wNCgkgID0gZm4gKEFzc2VtYmx5Lkluc3RydWN0aW9u
IChJbnN0cnVjdGlvbi5TRVRjYyANCgkJCQkgICAgICB7ZHN0ID0gT3BlcmFuZC5NZW1Mb2MgbWVt
bG9jLC4uLn0pLA0KCQl7Li4ufSkgDQoJICAgICA9PiBNZW1Mb2MuaXNUZW1wIG1lbWxvYw0KCSAg
ICAgfCBfID0+IGZhbHNlDQoNCgl2YWwgaXNJbnN0cnVjdGlvblRFU1RfZXFTcmNzX3NyY3NUZW1w
X3NyY3NEZWFkIDogc3RhdGVtZW50X3R5cGUgLT4gYm9vbA0KCSAgPSBmbiAoQXNzZW1ibHkuSW5z
dHJ1Y3Rpb24gKEluc3RydWN0aW9uLlRFU1QgDQoJCQkJICAgICAge3NyYzEgPSBPcGVyYW5kLk1l
bUxvYyBtZW1sb2MxLA0KCQkJCSAgICAgICBzcmMyID0gT3BlcmFuZC5NZW1Mb2MgbWVtbG9jMiwu
Li59KSwNCgkJe2RlYWQsLi4ufSkNCgkgICAgID0+IE1lbUxvYy5lcShtZW1sb2MxLG1lbWxvYzIp
IGFuZGFsc28NCgkgICAgICAgIE1lbUxvYy5pc1RlbXAgbWVtbG9jMSBhbmRhbHNvDQoJCUxpc3Qu
Y29udGFpbnMoZGVhZCwgbWVtbG9jMSwgTWVtTG9jLmVxKQ0KCSAgICAgfCBfID0+IGZhbHNlDQoN
Cgl2YWwgaXNJZmZfY29uZGl0aW9uWm9yTlogOiB0cmFuc2Zlcl90eXBlIC0+IGJvb2wNCgkgID0g
Zm4gKFRyYW5zZmVyLklmZiB7Y29uZGl0aW9uLC4uLn0sDQoJCXsuLi59KQ0KCSAgICAgPT4gKGNh
c2UgY29uZGl0aW9uDQoJCSAgIG9mIEluc3RydWN0aW9uLlogPT4gdHJ1ZQ0KCQkgICAgfCBJbnN0
cnVjdGlvbi5OWiA9PiB0cnVlDQoJCSAgICB8IF8gPT4gZmFsc2UpDQoJICAgICB8IF8gPT4gZmFs
c2UNCg0KCXZhbCB0ZW1wbGF0ZSA6IHRlbXBsYXRlDQoJICA9IHtzdGFydCA9IEVtcHR5T3JOb25F
bXB0eSwNCgkgICAgIHN0YXRlbWVudHMgPSBbT25lIGlzSW5zdHJ1Y3Rpb25TRVRjY19kc3RUZW1w
LA0KCQkJICAgQWxsIGlzQ29tbWVudCwNCgkJCSAgIE9uZSBpc0luc3RydWN0aW9uVEVTVF9lcVNy
Y3Nfc3Jjc1RlbXBfc3Jjc0RlYWQsDQoJCQkgICBBbGwgaXNDb21tZW50XSwNCgkgICAgIGZpbmlz
aCA9IEVtcHR5LA0KCSAgICAgdHJhbnNmZXIgPSBpc0lmZl9jb25kaXRpb25ab3JOWn0NCg0KCXZh
bCByZXdyaXRlciA6IHJld3JpdGVyDQoJICA9IGZuIHtsYWJlbCwNCgkJcHJvZmlsZUluZm8sDQoJ
CXN0YXJ0LCANCgkJc3RhdGVtZW50cyBhcw0KCQlbWyhBc3NlbWJseS5JbnN0cnVjdGlvbiAoSW5z
dHJ1Y3Rpb24uU0VUY2MNCgkJCQkJIHtjb25kaXRpb24gPSBjb25kaXRpb24xLA0KCQkJCQkgIGRz
dCANCgkJCQkJICA9IGRzdDEgYXMgT3BlcmFuZC5NZW1Mb2MgbWVtbG9jMSwNCgkJCQkJICBzaXpl
ID0gc2l6ZTF9KSwNCgkJICAgey4uLn0pXSwNCgkJIGNvbW1lbnRzMSwNCgkJIFsoQXNzZW1ibHku
SW5zdHJ1Y3Rpb24gKEluc3RydWN0aW9uLlRFU1QNCgkJCQkJIHtzcmMxIA0KCQkJCQkgID0gc3Jj
MTIgYXMgT3BlcmFuZC5NZW1Mb2MgbWVtbG9jMTIsDQoJCQkJCSAgc3JjMiANCgkJCQkJICA9IHNy
YzIyIGFzIE9wZXJhbmQuTWVtTG9jIG1lbWxvYzIyLA0KCQkJCQkgIHNpemUgPSBzaXplMn0pLA0K
CQkgICB7Li4ufSldLA0KCQkgY29tbWVudHMyXSwNCgkJZmluaXNoIGFzIFtdLA0KCQl0cmFuc2Zl
ciBhcw0KCQkoVHJhbnNmZXIuSWZmIHtjb25kaXRpb24sIHRydWVlLCBmYWxzZWV9LA0KCQkgaW5m
b1QgYXMgey4uLn0pfQ0KCSAgICAgPT4gaWYgTWVtTG9jLmVxKG1lbWxvYzEsbWVtbG9jMTIpDQoJ
CSAgdGhlbiBsZXQNCgkJCSB2YWwgY29uZGl0aW9uIA0KCQkJICAgPSBjYXNlIGNvbmRpdGlvbg0K
CQkJICAgICAgIG9mIEluc3RydWN0aW9uLlogDQoJCQkJPT4gSW5zdHJ1Y3Rpb24uY29uZGl0aW9u
X25lZ2F0ZSBjb25kaXRpb24xDQoJCQkgICAgICAgIHwgSW5zdHJ1Y3Rpb24uTlogPT4gY29uZGl0
aW9uMQ0KCQkJICAgICAgICB8IF8gPT4gRXJyb3IuYnVnICJQZWVwaG9sZTogY29uZGl0aW9uYWxK
dW1wIg0KDQoJCQkgdmFsIHRyYW5zZmVyIA0KCQkJICAgPSAoVHJhbnNmZXIuaWZmIHtjb25kaXRp
b24gPSBjb25kaXRpb24sDQoJCQkJCSAgICB0cnVlZSA9IHRydWVlLA0KCQkJCQkgICAgZmFsc2Vl
ID0gZmFsc2VlfSwNCgkJCSAgICAgIGluZm9UKQ0KDQoJCQkgdmFsIHt0cmFuc2ZlcixsaXZlfQ0K
CQkJICAgPSBMaXZlbmVzc0Jsb2NrLnJlTGl2ZW5lc3NUcmFuc2ZlciANCgkJCSAgICAge3RyYW5z
ZmVyID0gdHJhbnNmZXJ9DQoNCgkJCSB2YWwgc3RhdGVtZW50cw0KCQkJICAgPSBMaXN0LmNvbmNh
dA0KCQkJICAgICBbTGlzdC5tYXAoY29tbWVudHMxLCAjMSksDQoJCQkgICAgICBMaXN0Lm1hcChj
b21tZW50czIsICMxKV0NCg0KCQkJIHZhbCB7c3RhdGVtZW50cywgLi4ufQ0KCQkJICAgPSBMaXZl
bmVzc0Jsb2NrLnRvTGl2ZW5lc3NTdGF0ZW1lbnRzDQoJCQkgICAgIHtzdGF0ZW1lbnRzID0gc3Rh
dGVtZW50cywNCgkJCSAgICAgIGxpdmUgPSBsaXZlfQ0KDQoJCQkgdmFsIHN0YXRlbWVudHMgDQoJ
CQkgICA9IExpc3QuZm9sZChzdGFydCwgDQoJCQkJICAgICAgIHN0YXRlbWVudHMsIA0KCQkJCSAg
ICAgICBvcCA6OikNCgkJICAgICAgIGluDQoJCQkgU09NRSAoTGl2ZW5lc3NCbG9jay5UDQoJCQkg
ICAgICAge2xhYmVsID0gbGFiZWwsDQoJCQkJcHJvZmlsZUluZm8gPSBwcm9maWxlSW5mbywNCgkJ
CQlzdGF0ZW1lbnRzID0gc3RhdGVtZW50cywNCgkJCQl0cmFuc2ZlciA9IHRyYW5zZmVyfSkNCgkJ
ICAgICAgIGVuZA0KCQkgIGVsc2UgTk9ORQ0KCSAgICAgfCBfID0+IEVycm9yLmJ1ZyAiUGVlcGhv
bGU6IGNvbmRpdGlvbmFsSnVtcCINCg0KCXZhbCAoY2FsbGJhY2ssY29uZGl0aW9uYWxKdW1wX21z
ZykNCgkgID0gbWFrZV9jYWxsYmFja19tc2cgImNvbmRpdGlvbmFsSnVtcCINCiAgICAgIGluDQoJ
dmFsIGNvbmRpdGlvbmFsSnVtcCA6IG9wdGltaXphdGlvbg0KCSAgPSB7dGVtcGxhdGUgPSB0ZW1w
bGF0ZSwNCgkgICAgIHJld3JpdGVyID0gcmV3cml0ZXIsDQoJICAgICBjYWxsYmFjayA9IGNhbGxi
YWNrfQ0KCXZhbCBjb25kaXRpb25hbEp1bXBfbXNnID0gY29uZGl0aW9uYWxKdW1wX21zZw0KICAg
ICAgZW5kDQoNCiAgICAgIGxvY2FsDQoJdmFsIHt0ZW1wbGF0ZSwgcmV3cml0ZXIsIC4uLn0gPSBl
bGltRGVhZERzdHMNCgl2YWwgKGNhbGxiYWNrLGVsaW1EZWFkRHN0c19taW5vcl9tc2cpDQoJICA9
IG1ha2VfY2FsbGJhY2tfbXNnICJlbGltRGVhZERzdHNfbWlub3IiDQogICAgICBpbg0KCXZhbCBl
bGltRGVhZERzdHNfbWlub3IgOiBvcHRpbWl6YXRpb24NCgkgID0ge3RlbXBsYXRlID0gdGVtcGxh
dGUsDQoJICAgICByZXdyaXRlciA9IHJld3JpdGVyLA0KCSAgICAgY2FsbGJhY2sgPSBjYWxsYmFj
a30NCgl2YWwgZWxpbURlYWREc3RzX21pbm9yX21zZyA9IGVsaW1EZWFkRHN0c19taW5vcl9tc2cN
CiAgICAgIGVuZA0KDQogICAgICBsb2NhbA0KCXZhbCB7dGVtcGxhdGUsIHJld3JpdGVyLCAuLi59
ID0gZWxpbVNlbGZNb3ZlDQoJdmFsIChjYWxsYmFjayxlbGltU2VsZk1vdmVfbWlub3JfbXNnKQ0K
CSAgPSBtYWtlX2NhbGxiYWNrX21zZyAiZWxpbVNlbGZNb3ZlX21pbm9yIg0KICAgICAgaW4NCgl2
YWwgZWxpbVNlbGZNb3ZlX21pbm9yIDogb3B0aW1pemF0aW9uDQoJICA9IHt0ZW1wbGF0ZSA9IHRl
bXBsYXRlLA0KCSAgICAgcmV3cml0ZXIgPSByZXdyaXRlciwNCgkgICAgIGNhbGxiYWNrID0gY2Fs
bGJhY2t9DQoJdmFsIGVsaW1TZWxmTW92ZV9taW5vcl9tc2cgPSBlbGltU2VsZk1vdmVfbWlub3Jf
bXNnDQogICAgICBlbmQNCg0KICAgICAgbG9jYWwNCgl2YWwge3RlbXBsYXRlLCByZXdyaXRlciwg
Li4ufSA9IGVsaW1GbHRTZWxmTW92ZQ0KCXZhbCAoY2FsbGJhY2ssZWxpbUZsdFNlbGZNb3ZlX21p
bm9yX21zZykNCgkgID0gbWFrZV9jYWxsYmFja19tc2cgImVsaW1GbHRTZWxmTW92ZV9taW5vciIN
CiAgICAgIGluDQoJdmFsIGVsaW1GbHRTZWxmTW92ZV9taW5vciA6IG9wdGltaXphdGlvbg0KCSAg
PSB7dGVtcGxhdGUgPSB0ZW1wbGF0ZSwNCgkgICAgIHJld3JpdGVyID0gcmV3cml0ZXIsDQoJICAg
ICBjYWxsYmFjayA9IGNhbGxiYWNrfQ0KCXZhbCBlbGltRmx0U2VsZk1vdmVfbWlub3JfbXNnID0g
ZWxpbUZsdFNlbGZNb3ZlX21pbm9yX21zZw0KICAgICAgZW5kDQoNCiAgICAgIGxvY2FsDQoJdmFs
IG9wdGltaXphdGlvbnMgDQoJICA9IFtlbGltQUxDb3B5LCANCgkgICAgIGVsaW1GbHRBQ29weSwN
CgkgICAgIGVsaW1EZWFkRHN0cywNCgkgICAgIGVsaW1TZWxmTW92ZSwNCgkgICAgIGVsaW1GbHRT
ZWxmTW92ZSwNCgkgICAgIGNvbW11dGVCaW5BTE1ELA0KCSAgICAgY29tbXV0ZUZsdEJpbkEsDQoJ
ICAgICBjb25kaXRpb25hbEp1bXBdDQoJdmFsIG9wdGltaXphdGlvbnNfbXNnDQoJICA9IFtlbGlt
QUxDb3B5X21zZywgDQoJICAgICBlbGltRmx0QUNvcHlfbXNnLA0KCSAgICAgZWxpbURlYWREc3Rz
X21zZywNCgkgICAgIGVsaW1TZWxmTW92ZV9tc2csDQoJICAgICBlbGltRmx0U2VsZk1vdmVfbXNn
LA0KCSAgICAgY29tbXV0ZUJpbkFMTURfbXNnLA0KCSAgICAgY29tbXV0ZUZsdEJpbkFfbXNnLA0K
CSAgICAgY29uZGl0aW9uYWxKdW1wX21zZ10NCg0KCXZhbCBvcHRpbWl6YXRpb25zX21pbm9yDQoJ
ICA9IFtlbGltRGVhZERzdHNfbWlub3IsDQoJICAgICBlbGltU2VsZk1vdmVfbWlub3IsDQoJICAg
ICBlbGltRmx0U2VsZk1vdmVfbWlub3JdDQoJdmFsIG9wdGltaXphdGlvbnNfbWlub3JfbXNnDQoJ
ICA9IFtlbGltRGVhZERzdHNfbWlub3JfbXNnLA0KCSAgICAgZWxpbVNlbGZNb3ZlX21pbm9yX21z
ZywNCgkgICAgIGVsaW1GbHRTZWxmTW92ZV9taW5vcl9tc2ddDQogICAgICBpbg0KCXZhbCAocGVl
cGhvbGVMaXZlbmVzc0Jsb2NrLCBwZWVwaG9sZUxpdmVuZXNzQmxvY2tfbXNnKQ0KCSAgPSB0cmFj
ZXINCiAgICAgICAgICAgICJwZWVwaG9sZUxpdmVuZXNzQmxvY2siDQoJICAgIChmbiBibG9jayA9
PiBwZWVwaG9sZUJsb2NrIHtvcHRpbWl6YXRpb25zID0gb3B0aW1pemF0aW9ucywNCgkJCQkJYmxv
Y2sgPSBibG9ja30pDQoNCgl2YWwgcGVlcGhvbGVMaXZlbmVzc0Jsb2NrX21zZw0KCSAgPSBmbiAo
KSA9PiAocGVlcGhvbGVMaXZlbmVzc0Jsb2NrX21zZyAoKTsNCgkJICAgICAgQ29udHJvbC5pbmRl
bnQgKCk7DQoJCSAgICAgIExpc3QuZm9yZWFjaChvcHRpbWl6YXRpb25zX21zZywgZm4gbXNnID0+
IG1zZyAoKSk7DQoJCSAgICAgIENvbnRyb2wudW5pbmRlbnQgKCkpDQoNCgl2YWwgKHBlZXBob2xl
TGl2ZW5lc3NCbG9ja19taW5vciwgcGVlcGhvbGVMaXZlbmVzc0Jsb2NrX21pbm9yX21zZykNCgkg
ID0gdHJhY2VyDQogICAgICAgICAgICAicGVlcGhvbGVMaXZlbmVzc0Jsb2NrX21pbm9yIg0KCSAg
ICAoZm4gYmxvY2sgPT4gcGVlcGhvbGVCbG9jayB7b3B0aW1pemF0aW9ucyA9IG9wdGltaXphdGlv
bnNfbWlub3IsDQoJCQkJCWJsb2NrID0gYmxvY2t9KQ0KDQoJdmFsIHBlZXBob2xlTGl2ZW5lc3NC
bG9ja19taW5vcl9tc2cNCgkgID0gZm4gKCkgPT4gKHBlZXBob2xlTGl2ZW5lc3NCbG9ja19taW5v
cl9tc2cgKCk7DQoJCSAgICAgIENvbnRyb2wuaW5kZW50ICgpOw0KCQkgICAgICBMaXN0LmZvcmVh
Y2gob3B0aW1pemF0aW9uc19taW5vcl9tc2csIGZuIG1zZyA9PiBtc2cgKCkpOw0KCQkgICAgICBD
b250cm9sLnVuaW5kZW50ICgpKQ0KICAgICAgZW5kDQogICAgZW5kDQoNCiAgc3RydWN0dXJlIExp
dmVUcmFuc2ZlckluZm8gPQ0KICAgIHN0cnVjdA0KICAgICAgb3BlbiBKdW1wSW5mbw0KDQogICAg
ICBmdW4gdGVtcF91c2VzX2RlZnMge3VzZXMgOiBPcGVyYW5kLnQgbGlzdCwNCgkJCSAgZGVmcyA6
IE9wZXJhbmQudCBsaXN0fQ0KCT0gbGV0DQoJICAgIHZhbCBiYXNlVXNlcw0KCSAgICAgID0gTGlz
dC5mb2xkDQoJICAgICAgICAodXNlcywNCgkJIFtdLA0KCQkgZm4gKG9wZXJhbmQsIGJhc2VVc2Vz
KQ0KCQkgID0+IGNhc2UgT3BlcmFuZC5kZU1lbWxvYyBvcGVyYW5kDQoJCSAgICAgICBvZiBTT01F
IG1lbWxvYyA9PiBpZiBNZW1Mb2MuaXNUZW1wIG1lbWxvYw0KCQkJICAgICAgICAgICAgICAgICAg
ICBhbmRhbHNvIA0KCQkJCQkgICAgbm90IChMaXN0LmNvbnRhaW5zKGJhc2VVc2VzLA0KCQkJCQkJ
CSAgICAgICBtZW1sb2MsDQoJCQkJCQkJICAgICAgIE1lbUxvYy5lcSkpDQoJCQkJCSAgIHRoZW4g
bWVtbG9jOjpiYXNlVXNlcw0KCQkJCQkgICBlbHNlIGJhc2VVc2VzDQoJCSAgICAgICAgfCBOT05F
ID0+IGJhc2VVc2VzKQ0KCQkgICANCgkgICAgdmFsIHRlbXBVc2VzDQoJICAgICAgPSBsZXQNCgkJ
ICBmdW4gZG9pdCAob3BlcmFuZHMsIHRlbXBVc2VzKQ0KCQkgICAgPSBMaXN0LmZvbGQNCgkJICAg
ICAgKG9wZXJhbmRzLA0KCQkgICAgICAgdGVtcFVzZXMsDQoJCSAgICAgICBmbiAob3BlcmFuZCwg
dGVtcFVzZXMpDQoJCSAgICAgICAgPT4gY2FzZSBPcGVyYW5kLmRlTWVtbG9jIG9wZXJhbmQNCgkJ
CSAgICAgb2YgU09NRSBtZW1sb2MNCgkJCSAgICAgID0+IExpc3QuZm9sZChNZW1Mb2MudXRpbGl6
ZWQgbWVtbG9jLA0KCQkJCQkgICB0ZW1wVXNlcywNCgkJCQkJICAgZm4gKG1lbWxvYywgdGVtcFVz
ZXMpDQoJCQkJCSAgICA9PiBpZiBNZW1Mb2MuaXNUZW1wIG1lbWxvYw0KCQkJCQkgICAgICAgICAg
YW5kYWxzbw0KCQkJCQkJICBub3QgKExpc3QuY29udGFpbnMNCgkJCQkJCSAgICAgICAodGVtcFVz
ZXMsDQoJCQkJCQkJbWVtbG9jLA0KCQkJCQkJCU1lbUxvYy5lcSkpDQoJCQkJCQkgdGhlbiBtZW1s
b2M6OnRlbXBVc2VzDQoJCQkJCQkgZWxzZSB0ZW1wVXNlcykNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgTk9ORSA9PiB0ZW1wVXNlcykNCgkJaW4NCgkJICBkb2l0KGRlZnMsIA0KCQkg
IGRvaXQodXNlcywgDQoJCSAgICAgICBiYXNlVXNlcykpDQoJCWVuZA0KDQoJICAgIHZhbCBiYXNl
RGVmcw0KCSAgICAgID0gTGlzdC5mb2xkDQoJICAgICAgICAoZGVmcywNCgkJIFtdLA0KCQkgZm4g
KG9wZXJhbmQsIGJhc2VEZWZzKQ0KCQkgID0+IGNhc2UgT3BlcmFuZC5kZU1lbWxvYyBvcGVyYW5k
DQoJCSAgICAgICBvZiBTT01FIG1lbWxvYyA9PiBpZiBNZW1Mb2MuaXNUZW1wIG1lbWxvYw0KCQkJ
ICAgICAgICAgICAgICAgICAgICBhbmRhbHNvIA0KCQkJCQkgICAgbm90IChMaXN0LmNvbnRhaW5z
KGJhc2VEZWZzLA0KCQkJCQkJCSAgICAgICBtZW1sb2MsDQoJCQkJCQkJICAgICAgIE1lbUxvYy5l
cSkpDQoJCQkJCSAgIHRoZW4gbWVtbG9jOjpiYXNlRGVmcw0KCQkJCQkgICBlbHNlIGJhc2VEZWZz
DQoJCQl8IE5PTkUgPT4gYmFzZURlZnMpDQoJICAgIHZhbCB0ZW1wRGVmcyA9IGJhc2VEZWZzDQoJ
ICBpbg0KCSAgICB7dXNlcyA9IHRlbXBVc2VzLA0KCSAgICAgZGVmcyA9IHRlbXBEZWZzfQ0KCSAg
ZW5kDQoNCiAgICAgIGZ1biBjb21wdXRlTGl2ZVRyYW5zZmVySW5mbyB7YmxvY2tzIDogQmxvY2su
dCBsaXN0LA0KCQkJCSAgIHRyYW5zZmVyUmVncyA6IFJlZ2lzdGVyLnQgbGlzdCwNCgkJCQkgICBs
aXZlSW5mbyA6IA0KCQkJCSAgIHtnZXQgOiBMYWJlbC50IC0+IE1lbUxvYy50IGxpc3QsDQoJCQkJ
ICAgIHNldCA6IExhYmVsLnQgKiBNZW1Mb2MudCBsaXN0IC0+IHVuaXR9LA0KCQkJCSAgIGp1bXBJ
bmZvIDoge2dldDogTGFiZWwudCAtPiBzdGF0dXMgcmVmfX0NCgk9IGxldA0KCSAgICBkYXRhdHlw
ZSBsaXZlVHJhbnNmZXJUeXBlDQoJICAgICAgPSBOb3JtYWwNCgkgICAgICB8IERlZmF1bHQgb2Yg
TGFiZWwudCBsaXN0DQoJICAgICAgfCBDYXNlIG9mIExhYmVsLnQNCgkgICAgICB8IFRvcA0KDQoJ
ICAgIHZhbCBqb2luDQoJICAgICAgPSBmbiAoTm9ybWFsLCBrKSA9PiBrDQoJCSB8IChrLCBOb3Jt
YWwpID0+IGsNCgkJIHwgKERlZmF1bHQgbDEsIERlZmF1bHQgbDIpIA0KCSAgICAgICAgID0+IGlm
IExpc3QuZXF1YWxzQXNTZXQobDEsIGwyLCBMYWJlbC5lcXVhbHMpDQoJCSAgICAgIHRoZW4gRGVm
YXVsdCBsMQ0KCQkgICAgICBlbHNlIFRvcA0KCQkgfCAoQ2FzZSBsMSwgQ2FzZSBsMikgDQoJCSA9
PiBpZiBMYWJlbC5lcXVhbHMobDEsbDIpDQoJCSAgICAgIHRoZW4gQ2FzZSBsMQ0KCQkgICAgICBl
bHNlIFRvcA0KCQkgfCBfID0+IFRvcA0KDQoJICAgIHZhbCBibG9ja0luZm8NCgkgICAgIGFzIHtn
ZXQgPSBnZXRCbG9ja0luZm8gOg0KCQkgICAgICAgTGFiZWwudCAtPiB7cHJlZDogTGFiZWwudCBs
aXN0IHJlZiwNCgkJCQkgICBibG9jazogQmxvY2sudCBvcHRpb24gcmVmLA0KCQkJCSAgIHN1Y2M6
IExhYmVsLnQgbGlzdCByZWYsDQoJCQkJICAgZGlzdGFuY2VzRjogDQoJCQkJICAgKE1lbUxvYy50
ICogKGludCBsaXN0KSByZWYpIGxpc3QgcmVmLA0KCQkJCSAgIGRpc3RhbmNlc0I6IA0KCQkJCSAg
IChNZW1Mb2MudCAqIChpbnQgbGlzdCkgcmVmKSBsaXN0IHJlZiwNCgkJCQkgICBsaXZlVHJhbnNm
ZXJUeXBlOiBsaXZlVHJhbnNmZXJUeXBlIHJlZn19DQoJICAgICAgPSBQcm9wZXJ0eS5nZXQNCgkg
ICAgICAgIChMYWJlbC5wbGlzdCwNCgkJIFByb3BlcnR5LmluaXRGdW4gKGZuIGxhYmVsIA0KCQkJ
CSAgICA9PiB7cHJlZCA9IHJlZiBbXSwNCgkJCQkJYmxvY2sgPSByZWYgTk9ORSwNCgkJCQkJc3Vj
YyA9IHJlZiBbXSwNCgkJCQkJZGlzdGFuY2VzRiA9IHJlZiBbXSwNCgkJCQkJZGlzdGFuY2VzQiA9
IHJlZiBbXSwNCgkJCQkJbGl2ZVRyYW5zZmVyVHlwZSA9IHJlZiBOb3JtYWx9KSkNCg0KCSAgICB2
YWwgZ2V0X3ByZWQgPSAoI3ByZWQgbyBnZXRCbG9ja0luZm8pDQoJICAgIHZhbCBnZXRfYmxvY2sg
PSAoI2Jsb2NrIG8gZ2V0QmxvY2tJbmZvKQ0KCSAgICB2YWwgZ2V0X3N1Y2MgPSAoI3N1Y2MgbyBn
ZXRCbG9ja0luZm8pDQoJICAgIHZhbCBnZXRfbGl2ZVRyYW5zZmVyVHlwZSA9ICgjbGl2ZVRyYW5z
ZmVyVHlwZSBvIGdldEJsb2NrSW5mbykNCgkgICAgZnVuIGpvaW5fbGl2ZVRyYW5zZmVyVHlwZSAo
bGFiZWwsIGxpdmVUcmFuc2ZlclR5cGUnKQ0KCSAgICAgID0gbGV0DQoJCSAgdmFsIGxpdmVUcmFu
c2ZlclR5cGUgPSBnZXRfbGl2ZVRyYW5zZmVyVHlwZSBsYWJlbA0KCQlpbg0KCQkgIGxpdmVUcmFu
c2ZlclR5cGUgOj0gam9pbihsaXZlVHJhbnNmZXJUeXBlJywgDQoJCQkJCSAgICFsaXZlVHJhbnNm
ZXJUeXBlKQ0KCQllbmQNCg0KCSAgICBmdW4gZ2V0X2Rpc3RhbmNlc0YnIHt0ZW1wIDogTWVtTG9j
LnQsDQoJCQkJIGxhYmVsIDogTGFiZWwudH0NCgkgICAgICA9IGxldA0KCQkgIHZhbCB7YmxvY2ss
IHN1Y2MsIGRpc3RhbmNlc0YsIC4uLn0gPSBnZXRCbG9ja0luZm8gbGFiZWwNCgkJaW4NCgkJICBj
YXNlIExpc3QucGVlayghZGlzdGFuY2VzRiwNCgkJCQkgZm4gKHRlbXAnLF8pID0+IE1lbUxvYy5l
cSh0ZW1wLHRlbXAnKSkNCgkJICAgIG9mIFNPTUUgKF8sZGlzdGFuY2VzKSA9PiAhZGlzdGFuY2Vz
DQoJCSAgICAgfCBOT05FIA0KCQkgICAgID0+IGxldA0KCQkJICB2YWwgdGVtcF9kaXN0YW5jZXNG
ID0gcmVmIFtdDQoJCQkgIHZhbCBfID0gTGlzdC5wdXNoKGRpc3RhbmNlc0YsIA0KCQkJCQkgICAg
KHRlbXAsdGVtcF9kaXN0YW5jZXNGKSk7DQoNCgkJCSAgdmFsIEJsb2NrLlQge3N0YXRlbWVudHMs
IHRyYW5zZmVyLCAuLi59IA0KCQkJICAgID0gdmFsT2YgKCFibG9jaykNCg0KCQkJICBkYXRhdHlw
ZSB0ID0gUG9zIG9mIGludCB8IExlbmd0aCBvZiBpbnQNCgkJCSAgZnVuIHBvc0YgKFtdLG4pIA0K
CQkJICAgID0gbGV0DQoJCQkJdmFsIHt1c2VzLGRlZnMsLi4ufSANCgkJCQkgID0gVHJhbnNmZXIu
dXNlc19kZWZzX2tpbGxzIHRyYW5zZmVyDQoJCQkJdmFsIHt1c2VzLGRlZnN9IA0KCQkJCSAgPSB0
ZW1wX3VzZXNfZGVmcyB7dXNlcyA9IHVzZXMsDQoJCQkJCQkgICAgZGVmcyA9IGRlZnN9DQoJCQkg
ICAgICBpbg0KCQkJCWlmIExpc3QuY29udGFpbnModXNlcywNCgkJCQkJCSB0ZW1wLA0KCQkJCQkJ
IE1lbUxvYy5lcSkNCgkJCQkgIHRoZW4gUG9zIG4NCgkJCQkgIGVsc2UgTGVuZ3RoIChuICsgMSkN
CgkJCSAgICAgIGVuZA0KCQkJICAgIHwgcG9zRiAoYXNtOjphc3NlbWJseSxuKQ0KCQkJICAgID0g
bGV0DQoJCQkJdmFsIHt1c2VzLGRlZnMsLi4ufSANCgkJCQkgID0gQXNzZW1ibHkudXNlc19kZWZz
X2tpbGxzIGFzbQ0KCQkJCXZhbCB7dXNlcyxkZWZzfSANCgkJCQkgID0gdGVtcF91c2VzX2RlZnMg
e3VzZXMgPSB1c2VzLA0KCQkJCQkJICAgIGRlZnMgPSBkZWZzfQ0KCQkJICAgICAgaW4NCgkJCQlp
ZiBMaXN0LmNvbnRhaW5zKHVzZXMsDQoJCQkJCQkgdGVtcCwNCgkJCQkJCSBNZW1Mb2MuZXEpDQoJ
CQkJICB0aGVuIFBvcyBuDQoJCQkJICBlbHNlIHBvc0YgKGFzc2VtYmx5LCBuICsgMSkNCgkJCSAg
ICAgIGVuZA0KDQoJCQkgIHZhbCBkaXN0YW5jZXMNCgkJCSAgICA9IGNhc2UgcG9zRihzdGF0ZW1l
bnRzLCAxKQ0KCQkJCW9mIFBvcyBuID0+IFtuXQ0KCQkJCSB8IExlbmd0aCBuDQoJCQkJID0+IExp
c3QuY29uY2F0TWFwDQoJCQkJICAgICghc3VjYywNCgkJCQkgICAgIGZuIGxhYmVsDQoJCQkJICAg
ICAgPT4gaWYgTGlzdC5jb250YWlucw0KCQkJCSAgICAgICAgICAgICgoI2dldCBsaXZlSW5mbykg
bGFiZWwsDQoJCQkJCSAgICAgdGVtcCwNCgkJCQkJICAgICBNZW1Mb2MuZXEpDQoJCQkJCSAgIHRo
ZW4gTGlzdC5tYXANCgkJCQkJICAgICAgICAoZ2V0X2Rpc3RhbmNlc0YnIA0KCQkJCQkJIHt0ZW1w
ID0gdGVtcCwNCgkJCQkJCSAgbGFiZWwgPSBsYWJlbH0sDQoJCQkJCQkgZm4gbSA9PiBtICsgbikN
CgkJCQkJICAgZWxzZSBbXSkNCgkJCWluDQoJCQkgIHRlbXBfZGlzdGFuY2VzRiA6PSBkaXN0YW5j
ZXM7DQoJCQkgIGRpc3RhbmNlcw0KCQkJZW5kDQoJCWVuZA0KDQoJICAgIGZ1biBnZXRfZGlzdGFu
Y2VzRiB7dGVtcCA6IE1lbUxvYy50LA0KCQkJCWxhYmVsIDogTGFiZWwudH0NCgkgICAgICA9IGxl
dA0KCQkgIHZhbCBkaXN0YW5jZXMgDQoJCSAgICA9IGdldF9kaXN0YW5jZXNGJyB7dGVtcCA9IHRl
bXAsDQoJCQkJICAgICAgIGxhYmVsID0gbGFiZWx9DQoJCWluDQoJCSAgZGlzdGFuY2VzDQoJCWVu
ZA0KDQoJICAgIGZ1biBnZXRfZGlzdGFuY2VzQicge3RlbXAgOiBNZW1Mb2MudCwNCgkJCQkgbGFi
ZWwgOiBMYWJlbC50fQ0KCSAgICAgID0gbGV0DQoJCSAgdmFsIHtwcmVkLCBibG9jaywgZGlzdGFu
Y2VzQiwgLi4ufSA9IGdldEJsb2NrSW5mbyBsYWJlbA0KCQlpbg0KCQkgIGNhc2UgTGlzdC5wZWVr
KCFkaXN0YW5jZXNCLA0KCQkJCSBmbiAodGVtcCcsXykgPT4gTWVtTG9jLmVxKHRlbXAsdGVtcCcp
KQ0KCQkgICAgb2YgU09NRSAoXyxkaXN0YW5jZXMpID0+ICFkaXN0YW5jZXMNCgkJICAgICB8IE5P
TkUgDQoJCSAgICAgPT4gbGV0DQoJCQkgIHZhbCB0ZW1wX2Rpc3RhbmNlc0IgPSByZWYgW10NCgkJ
CSAgdmFsIF8gPSBMaXN0LnB1c2goZGlzdGFuY2VzQiwgDQoJCQkJCSAgICAodGVtcCx0ZW1wX2Rp
c3RhbmNlc0IpKTsNCg0KCQkJICB2YWwgQmxvY2suVCB7c3RhdGVtZW50cywgdHJhbnNmZXIsIC4u
Ln0gDQoJCQkgICAgPSB2YWxPZiAoIWJsb2NrKQ0KDQoJCQkgIGRhdGF0eXBlIHQgPSBQb3Mgb2Yg
aW50IHwgTGVuZ3RoIG9mIGludA0KCQkJICBmdW4gcG9zUiBbXQ0KCQkJICAgID0gbGV0DQoJCQkJ
dmFsIHt1c2VzLGRlZnMsLi4ufSANCgkJCQkgID0gVHJhbnNmZXIudXNlc19kZWZzX2tpbGxzIHRy
YW5zZmVyDQoJCQkJdmFsIHt1c2VzLGRlZnN9IA0KCQkJCSAgPSB0ZW1wX3VzZXNfZGVmcyB7dXNl
cyA9IHVzZXMsDQoJCQkJCQkgICAgZGVmcyA9IGRlZnN9DQoJCQkgICAgICBpbg0KCQkJCWlmIExp
c3QuY29udGFpbnModXNlcywNCgkJCQkJCSB0ZW1wLA0KCQkJCQkJIE1lbUxvYy5lcSkNCgkJCQkg
ICBvcmVsc2UNCgkJCQkgICBMaXN0LmNvbnRhaW5zKGRlZnMsDQoJCQkJCQkgdGVtcCwNCgkJCQkJ
CSBNZW1Mb2MuZXEpDQoJCQkJICB0aGVuIFBvcyAxDQoJCQkJICBlbHNlIExlbmd0aCAyDQoJCQkg
ICAgICBlbmQNCgkJCSAgICB8IHBvc1IgKGFzbTo6YXNzZW1ibHkpDQoJCQkgICAgPSAoY2FzZSBw
b3NSIGFzc2VtYmx5DQoJCQkJIG9mIFBvcyBuID0+IFBvcyBuDQoJCQkJICB8IExlbmd0aCBuDQoJ
CQkJICA9PiBsZXQNCgkJCQkgICAgICAgdmFsIHt1c2VzLGRlZnMsLi4ufSANCgkJCQkJID0gQXNz
ZW1ibHkudXNlc19kZWZzX2tpbGxzIGFzbQ0KCQkJCSAgICAgICB2YWwge3VzZXMsZGVmc30gDQoJ
CQkJCSA9IHRlbXBfdXNlc19kZWZzIHt1c2VzID0gdXNlcywNCgkJCQkJCQkgICBkZWZzID0gZGVm
c30NCgkJCQkgICAgIGluDQoJCQkJICAgICAgIGlmIExpc3QuY29udGFpbnModXNlcywNCgkJCQkJ
CQl0ZW1wLA0KCQkJCQkJCU1lbUxvYy5lcSkNCgkJCQkJICBvcmVsc2UNCgkJCQkJICBMaXN0LmNv
bnRhaW5zKGRlZnMsDQoJCQkJCQkJdGVtcCwNCgkJCQkJCQlNZW1Mb2MuZXEpDQoJCQkJCSB0aGVu
IFBvcyBuDQoJCQkJCSBlbHNlIExlbmd0aCAobiArIDEpDQoJCQkJICAgICBlbmQpDQoNCgkJCSAg
dmFsIGRpc3RhbmNlcw0KCQkJICAgID0gY2FzZSBwb3NSIHN0YXRlbWVudHMNCgkJCQlvZiBQb3Mg
biA9PiBbbl0NCgkJCQkgfCBMZW5ndGggbg0KCQkJCSA9PiBMaXN0LmNvbmNhdE1hcA0KCQkJCSAg
ICAoIXByZWQsDQoJCQkJICAgICBmbiBsYWJlbA0KCQkJCSAgICAgID0+IExpc3QubWFwDQoJCQkJ
ICAgICAgICAgKGdldF9kaXN0YW5jZXNCJyB7dGVtcCA9IHRlbXAsDQoJCQkJCQkJICAgbGFiZWwg
PSBsYWJlbH0sDQoJCQkJCSAgZm4gbSA9PiBtICsgbikpDQoJCQlpbg0KCQkJICB0ZW1wX2Rpc3Rh
bmNlc0IgOj0gZGlzdGFuY2VzOw0KCQkJICBkaXN0YW5jZXMNCgkJCWVuZA0KCQllbmQNCg0KCSAg
ICBmdW4gZ2V0X2Rpc3RhbmNlc0Ige3RlbXAgOiBNZW1Mb2MudCwNCgkJCQlsYWJlbCA6IExhYmVs
LnR9DQoJICAgICAgPSBsZXQNCgkJICB2YWwge3ByZWQsIC4uLn0gPSBnZXRCbG9ja0luZm8gbGFi
ZWwNCg0KCQkgIHZhbCBkaXN0YW5jZXMNCgkJICAgID0gTGlzdC5jb25jYXRNYXANCgkJICAgICAg
KCFwcmVkLA0KCQkgICAgICAgZm4gbGFiZWwNCgkJICAgICAgICA9PiBnZXRfZGlzdGFuY2VzQicg
e3RlbXAgPSB0ZW1wLA0KCQkJCQkgICAgbGFiZWwgPSBsYWJlbH0pDQoJCWluDQoJCSAgICAgIGRp
c3RhbmNlcw0KCQllbmQNCg0KCSAgICB2YWwgbGl2ZVRyYW5zZmVySW5mbw0KCSAgICAgYXMge2dl
dCA9IGdldExpdmVUcmFuc2ZlckluZm8gOg0KCQkgICAgICAgTGFiZWwudCAtPiAoTWVtTG9jLnQg
KiBSZWdpc3Rlci50KSBsaXN0LA0KCQkgc2V0ID0gc2V0TGl2ZVRyYW5zZmVySW5mb30NCgkgICAg
ID0gUHJvcGVydHkuZ2V0U2V0DQoJICAgICAgIChMYWJlbC5wbGlzdCwNCgkJUHJvcGVydHkuaW5p
dEZ1biAoZm4gbGFiZWwgPT4gW10pKQ0KDQoJICAgIHZhbCBsYWJlbHMNCgkgICAgICA9IExpc3Qu
bWFwDQoJICAgICAgICAoYmxvY2tzLA0KCQkgZm4gYmxvY2snIGFzIEJsb2NrLlQge2xhYmVsLCB0
cmFuc2ZlciwgLi4ufQ0KCQkgID0+IGxldA0KCQkgICAgICAgdmFsIHtibG9jayxzdWNjLGxpdmVU
cmFuc2ZlclR5cGUsLi4ufSANCgkJCSA9IGdldEJsb2NrSW5mbyBsYWJlbA0KCQkgICAgICAgdmFs
IHRhcmdldHMgPSBUcmFuc2Zlci50YXJnZXRzIHRyYW5zZmVyDQoJCSAgICAgaW4gDQoJCSAgICAg
ICBibG9jayA6PSBTT01FIGJsb2NrJzsNCgkJICAgICAgIHN1Y2MgOj0gdGFyZ2V0czsNCgkJICAg
ICAgIChpZiAhKCgjZ2V0IGp1bXBJbmZvKSBsYWJlbCkgPSBNdXN0DQoJCQkgIHRoZW4gbGl2ZVRy
YW5zZmVyVHlwZSA6PSBUb3ANCgkJCSAgZWxzZSAoKSk7DQoJCSAgICAgICBMaXN0LmZvcmVhY2gN
CgkJICAgICAgICh0YXJnZXRzLA0KCQkJZm4gdGFyZ2V0ID0+IExpc3QucHVzaChnZXRfcHJlZCB0
YXJnZXQsIGxhYmVsKSk7DQoJCSAgICAgICAoY2FzZSB0cmFuc2Zlcg0KCQkJICBvZiBUcmFuc2Zl
ci5Td2l0Y2gge2RlZmF1bHQsIGNhc2VzLCAuLi59DQoJCQkgICA9PiBsZXQNCgkJCQl2YWwgY2Fz
ZXMNCgkJCQkgID0gVHJhbnNmZXIuQ2FzZXMubWFwJw0KCQkJCSAgICAoY2FzZXMsDQoJCQkJICAg
ICBmbiB0YXJnZXQgPT4gdGFyZ2V0LA0KCQkJCSAgICAgZm4gKGssIHRhcmdldCkgPT4gdGFyZ2V0
LA0KCQkJCSAgICAgZm4gKGssIHRhcmdldCkgPT4gdGFyZ2V0LA0KCQkJCSAgICAgZm4gKGssIHRh
cmdldCkgPT4gdGFyZ2V0KQ0KCQkJICAgICAgaW4NCgkJCQkoam9pbl9saXZlVHJhbnNmZXJUeXBl
IChkZWZhdWx0LCANCgkJCQkJCQlEZWZhdWx0IGNhc2VzKTsNCgkJCQkgTGlzdC5mb3JlYWNoDQoJ
CQkJIChjYXNlcywNCgkJCQkgIGZuIHRhcmdldCANCgkJCQkgICA9PiBqb2luX2xpdmVUcmFuc2Zl
clR5cGUgKHRhcmdldCwgDQoJCQkJCQkJICAgICBDYXNlIGRlZmF1bHQpKSkNCgkJCSAgICAgIGVu
ZA0KCQkJICAgfCBfID0+ICgpKTsNCgkJICAgICAgIGxhYmVsDQoJCSAgICAgZW5kKQ0KDQoJICAg
IGZ1biBkb2l0IGxhYmVsDQoJICAgICAgPSBsZXQNCgkJICB2YWwgbGl2ZUluX2Rpc3RhbmNlDQoJ
CSAgICA9IExpc3Qua2VlcEFsbE1hcA0KCQkgICAgICAoKCNnZXQgbGl2ZUluZm8pIGxhYmVsLA0K
CQkgICAgICAgZm4gdGVtcA0KCQkgICAgICAgID0+IGlmIExpc3QuZXhpc3RzDQoJCSAgICAgICAg
ICAgICAgKHRyYW5zZmVyUmVncywNCgkJCSAgICAgICBmbiByZWdpc3Rlcg0KCQkJICAgICAgICA9
PiBNZW1Mb2Muc2l6ZSB0ZW1wID0gUmVnaXN0ZXIuc2l6ZSByZWdpc3RlcikNCgkJCSAgICAgdGhl
biBsZXQNCgkJCQkgICAgdmFsIGRpc3RhbmNlc0YNCgkJCQkgICAgICA9IGdldF9kaXN0YW5jZXNG
IHt0ZW1wID0gdGVtcCwNCgkJCQkJCQlsYWJlbCA9IGxhYmVsfQ0KCQkJCSAgICB2YWwgZGlzdGFu
Y2VzQg0KCQkJCSAgICAgID0gZ2V0X2Rpc3RhbmNlc0Ige3RlbXAgPSB0ZW1wLA0KCQkJCQkJCWxh
YmVsID0gbGFiZWx9DQoNCgkJCQkgICAgdmFsICh0b3RhbCxudW0pDQoJCQkJICAgICAgPSBMaXN0
LmZvbGQNCgkJCQkgICAgICAgIChkaXN0YW5jZXNGLA0KCQkJCQkgKDAsMCksDQoJCQkJCSBmbiAo
ZGlzdGFuY2VGLCh0b3RhbCxudW0pKQ0KCQkJCQkgID0+IExpc3QuZm9sZA0KCQkJCQkgICAgIChk
aXN0YW5jZXNCLA0KCQkJCQkgICAgICAodG90YWwsbnVtKSwNCgkJCQkJICAgICAgZm4gKGRpc3Rh
bmNlQiwodG90YWwsbnVtKSkNCgkJCQkJICAgICAgID0+ICh0b3RhbCANCgkJCQkJCSAgICsgZGlz
dGFuY2VGDQoJCQkJCQkgICArIGRpc3RhbmNlQiwgDQoJCQkJCQkgICBudW0gKyAxKSkpDQoJCQkJ
ICBpbg0KCQkJCSAgICBTT01FICh0ZW1wLCB0b3RhbCBkaXYgbnVtKQ0KCQkJCSAgZW5kDQoJCQkg
ICAgIGVsc2UgTk9ORSkNCg0KCQkgIHZhbCBsaXZlSW5fZGlzdGFuY2Vfc29ydGVkDQoJCSAgICA9
IExpc3QuaW5zZXJ0aW9uU29ydA0KCQkgICAgICAobGl2ZUluX2Rpc3RhbmNlLA0KCQkgICAgICAg
Zm4gKChfLGRpc3RhbmNlMSksKF8sZGlzdGFuY2UyKSkgDQoJCSAgICAgICAgPT4gZGlzdGFuY2Ux
IDwgZGlzdGFuY2UyKQ0KDQoJCSAgdmFsIGxpdmVJbiA9IExpc3QubWFwKGxpdmVJbl9kaXN0YW5j
ZV9zb3J0ZWQsICMxKQ0KDQoJCSAgdmFsIChfLGxpdmVUcmFuc2ZlcikNCgkJICAgID0gTGlzdC5m
b2xkDQoJCSAgICAgIChsaXZlSW4sDQoJCSAgICAgICAodHJhbnNmZXJSZWdzLFtdKSwNCgkJICAg
ICAgIGZuICh0ZW1wLCh0cmFuc2ZlclJlZ3MsbGl2ZVRyYW5zZmVyKSkNCgkJICAgICAgICA9PiBj
YXNlIExpc3QucGVlaw0KCQkgICAgICAgICAgICAgICAgKHRyYW5zZmVyUmVncywNCgkJCQkgZm4g
cmVnaXN0ZXIgDQoJCQkJICA9PiBNZW1Mb2Muc2l6ZSB0ZW1wID0gUmVnaXN0ZXIuc2l6ZSByZWdp
c3RlcikNCgkJCSAgICAgb2YgU09NRSByZWdpc3Rlcg0KCQkJICAgICAgPT4gKExpc3QucmVtb3Zl
QWxsDQoJCQkJICAodHJhbnNmZXJSZWdzLA0KCQkJCSAgIGZuIHJlZ2lzdGVyJw0KCQkJCSAgICA9
PiBSZWdpc3Rlci5jb2luY2lkZShyZWdpc3RlciwNCgkJCQkJCQkgcmVnaXN0ZXInKSksDQoJCQkJ
ICAodGVtcCxyZWdpc3Rlcik6OmxpdmVUcmFuc2ZlcikNCgkJCSAgICAgIHwgTk9ORSA9PiAodHJh
bnNmZXJSZWdzLGxpdmVUcmFuc2ZlcikpDQoJCWluDQoJCSAgc2V0TGl2ZVRyYW5zZmVySW5mbyhs
YWJlbCwgbGl2ZVRyYW5zZmVyKQ0KCQllbmQNCg0KCSAgICBmdW4gZG9pdCcgbGFiZWxzDQoJICAg
ICAgPSBsZXQNCgkJICB2YWwgbGl2ZUluX2Rpc3RhbmNlJycNCgkJICAgID0gTGlzdC5jb25jYXRN
YXANCgkJICAgICAgKGxhYmVscywNCgkJICAgICAgIGZuIGxhYmVsIA0KCQkgICAgICAgID0+IExp
c3Qua2VlcEFsbE1hcA0KCQkgICAgICAgICAgICgoI2dldCBsaXZlSW5mbykgbGFiZWwsDQoJCQkg
ICAgZm4gdGVtcA0KCQkJICAgICA9PiBpZiBMaXN0LmV4aXN0cw0KCQkJICAgICAgICAgICAodHJh
bnNmZXJSZWdzLA0KCQkJCSAgICBmbiByZWdpc3Rlcg0KCQkJCSAgICAgPT4gTWVtTG9jLnNpemUg
dGVtcCA9IFJlZ2lzdGVyLnNpemUgcmVnaXN0ZXIpDQoJCQkJICB0aGVuIGxldA0KCQkJCQkgdmFs
IGRpc3RhbmNlc0YNCgkJCQkJICAgPSBnZXRfZGlzdGFuY2VzRiB7dGVtcCA9IHRlbXAsDQoJCQkJ
CQkJICAgICBsYWJlbCA9IGxhYmVsfQ0KCQkJCQkgdmFsIGRpc3RhbmNlc0INCgkJCQkJICAgPSBn
ZXRfZGlzdGFuY2VzQiB7dGVtcCA9IHRlbXAsDQoJCQkJCQkJICAgICBsYWJlbCA9IGxhYmVsfQ0K
CQkJCQkgICANCgkJCQkJIHZhbCAodG90YWwsbnVtKQ0KCQkJCQkgICA9IExpc3QuZm9sZA0KCQkJ
CQkgICAgIChkaXN0YW5jZXNGLA0KCQkJCQkgICAgICAoMCwwKSwNCgkJCQkJICAgICAgZm4gKGRp
c3RhbmNlRiwodG90YWwsbnVtKSkNCgkJCQkJICAgICAgID0+IExpc3QuZm9sZA0KCQkJCQkgICAg
ICAgICAgKGRpc3RhbmNlc0IsDQoJCQkJCQkgICAodG90YWwsbnVtKSwNCgkJCQkJCSAgIGZuIChk
aXN0YW5jZUIsKHRvdGFsLG51bSkpDQoJCQkJCQkgICA9PiAodG90YWwgDQoJCQkJCQkgICAgICAg
KyBkaXN0YW5jZUYNCgkJCQkJCSAgICAgICArIGRpc3RhbmNlQiwgDQoJCQkJCQkgICAgICAgbnVt
ICsgMSkpKQ0KCQkJCSAgICAgICBpbg0KCQkJCQkgU09NRSAodGVtcCwgdG90YWwgZGl2IG51bSkN
CgkJCQkgICAgICAgZW5kDQoJCQkJICBlbHNlIE5PTkUpKQ0KDQoJCSAgdmFsIGxpdmVJbl9kaXN0
YW5jZScNCgkJICAgID0gTGlzdC5mb2xkDQoJCSAgICAgIChsaXZlSW5fZGlzdGFuY2UnJywNCgkJ
ICAgICAgIFtdLA0KCQkgICAgICAgZm4gKCh0ZW1wLGRpc3RhbmNlKSxsaXZlSW5fZGlzdGFuY2Un
KQ0KCQkgICAgICAgID0+IGxldA0KCQkJICAgICB2YWwgcmVjIGFkZA0KCQkJICAgICAgID0gZm4g
W10gPT4gWyh0ZW1wLGRpc3RhbmNlLDEpXQ0KCQkJICAgICAgICAgIHwgKHRlbXAnLGRpc3RhbmNl
JyxudW0nKTo6bGl2ZUluX2Rpc3RhbmNlJw0KCQkJICAgICAgICAgID0+IGlmIE1lbUxvYy5lcSh0
ZW1wLCB0ZW1wJykNCgkJCQkgICAgICAgdGhlbiAodGVtcCcsDQoJCQkJCSAgICAgZGlzdGFuY2Un
ICsgZGlzdGFuY2UsDQoJCQkJCSAgICAgbnVtJyArIDEpOjoNCgkJCQkJICAgIGxpdmVJbl9kaXN0
YW5jZScNCgkJCQkgICAgICAgZWxzZSAodGVtcCcsDQoJCQkJCSAgICAgZGlzdGFuY2UnLA0KCQkJ
CQkgICAgIG51bScpOjoNCgkJCQkJICAgIChhZGQgbGl2ZUluX2Rpc3RhbmNlJykNCgkJCSAgIGlu
DQoJCQkgICAgIGFkZCBsaXZlSW5fZGlzdGFuY2UnDQoJCQkgICBlbmQpDQoNCgkJICB2YWwgbGl2
ZUluX2Rpc3RhbmNlDQoJCSAgICA9IExpc3QubWFwDQoJCSAgICAgIChsaXZlSW5fZGlzdGFuY2Un
LA0KCQkgICAgICAgZm4gKHRlbXAsZGlzdGFuY2UsbnVtKSA9PiAodGVtcCwgZGlzdGFuY2UgZGl2
IG51bSkpDQoNCgkJICB2YWwgbGl2ZUluX2Rpc3RhbmNlX3NvcnRlZA0KCQkgICAgPSBMaXN0Lmlu
c2VydGlvblNvcnQNCgkJICAgICAgKGxpdmVJbl9kaXN0YW5jZSwNCgkJICAgICAgIGZuICgoXyxk
aXN0YW5jZTEpLChfLGRpc3RhbmNlMikpIA0KCQkgICAgICAgID0+IGRpc3RhbmNlMSA8IGRpc3Rh
bmNlMikNCg0KCQkgIHZhbCBsaXZlSW4gPSBMaXN0Lm1hcChsaXZlSW5fZGlzdGFuY2Vfc29ydGVk
LCAjMSkNCg0KCQkgIHZhbCAoXyxsaXZlVHJhbnNmZXIpDQoJCSAgICA9IExpc3QuZm9sZA0KCQkg
ICAgICAobGl2ZUluLA0KCQkgICAgICAgKHRyYW5zZmVyUmVncyxbXSksDQoJCSAgICAgICBmbiAo
dGVtcCwodHJhbnNmZXJSZWdzLGxpdmVUcmFuc2ZlcikpDQoJCSAgICAgICAgPT4gY2FzZSBMaXN0
LnBlZWsNCgkJICAgICAgICAgICAgICAgICh0cmFuc2ZlclJlZ3MsDQoJCQkJIGZuIHJlZ2lzdGVy
IA0KCQkJCSAgPT4gTWVtTG9jLnNpemUgdGVtcCA9IFJlZ2lzdGVyLnNpemUgcmVnaXN0ZXIpDQoJ
CQkgICAgIG9mIFNPTUUgcmVnaXN0ZXINCgkJCSAgICAgID0+IChMaXN0LnJlbW92ZUFsbA0KCQkJ
CSAgKHRyYW5zZmVyUmVncywNCgkJCQkgICBmbiByZWdpc3RlcicNCgkJCQkgICAgPT4gUmVnaXN0
ZXIuY29pbmNpZGUocmVnaXN0ZXIsDQoJCQkJCQkJIHJlZ2lzdGVyJykpLA0KCQkJCSAgKHRlbXAs
cmVnaXN0ZXIpOjpsaXZlVHJhbnNmZXIpDQoJCQkgICAgICB8IE5PTkUgPT4gKHRyYW5zZmVyUmVn
cyxsaXZlVHJhbnNmZXIpKQ0KCQlpbg0KCQkgIExpc3QuZm9yZWFjaA0KCQkgIChsYWJlbHMsDQoJ
CSAgIGZuIGxhYmVsDQoJCSAgICA9PiBsZXQNCgkJCSB2YWwgbGl2ZUluID0gKCNnZXQgbGl2ZUlu
Zm8pIGxhYmVsDQoNCgkJCSB2YWwgbGl2ZVRyYW5zZmVyDQoJCQkgICA9IExpc3Qua2VlcEFsbA0K
CQkJICAgICAobGl2ZVRyYW5zZmVyLA0KCQkJICAgICAgZm4gKHRlbXAscmVnaXN0ZXIpDQoJCQkg
ICAgICAgPT4gTGlzdC5jb250YWlucyhsaXZlSW4sDQoJCQkJCQl0ZW1wLA0KCQkJCQkJTWVtTG9j
LmVxKSkNCgkJICAgICAgIGluDQoJCQkgc2V0TGl2ZVRyYW5zZmVySW5mbyhsYWJlbCwgbGl2ZVRy
YW5zZmVyKQ0KCQkgICAgICAgZW5kKQ0KCQllbmQNCg0KCSAgICB2YWwgXw0KCSAgICAgID0gTGlz
dC5mb3JlYWNoDQoJICAgICAgICAobGFiZWxzLA0KCQkgZm4gbGFiZWwNCgkJICA9PiBjYXNlICEo
Z2V0X2xpdmVUcmFuc2ZlclR5cGUgbGFiZWwpDQoJCSAgICAgICBvZiBOb3JtYWwgPT4gZG9pdCBs
YWJlbA0KCQkJfCBEZWZhdWx0IGxhYmVscw0KCQkJPT4gaWYgTGlzdC5mb3JhbGwNCgkJCSAgICAg
IChsYWJlbHMsDQoJCQkgICAgICAgZm4gbGFiZWwnIA0KCQkJICAgICAgICA9PiBjYXNlICEoZ2V0
X2xpdmVUcmFuc2ZlclR5cGUgbGFiZWwnKQ0KCQkJCSAgICAgb2YgQ2FzZSBsYWJlbCcnIA0KCQkJ
CSAgICAgID0+IExhYmVsLmVxdWFscyhsYWJlbCxsYWJlbCcnKQ0KCQkJCSAgICAgIHwgXyA9PiBm
YWxzZSkNCgkJCSAgICAgdGhlbiBkb2l0JyAobGFiZWw6OmxhYmVscykNCgkJCSAgICAgZWxzZSBz
ZXRMaXZlVHJhbnNmZXJJbmZvKGxhYmVsLCBbXSkNCgkJCXwgQ2FzZSBsYWJlbCcgPT4gKCkNCgkJ
CXwgVG9wID0+IHNldExpdmVUcmFuc2ZlckluZm8obGFiZWwsIFtdKSkNCgkgIGluDQoJICAgIGxp
dmVUcmFuc2ZlckluZm8NCgkgIGVuZA0KDQogICAgICB2YWwgKGNvbXB1dGVMaXZlVHJhbnNmZXJJ
bmZvLCBjb21wdXRlTGl2ZVRyYW5zZmVySW5mb19tc2cpDQoJPSB0cmFjZXINCgkgICJjb21wdXRl
TGl2ZVRyYW5zZmVySW5mbyINCgkgIGNvbXB1dGVMaXZlVHJhbnNmZXJJbmZvDQoNCiAgICAgIGZ1
biBjb21wdXRlTm9MaXZlVHJhbnNmZXJJbmZvICgpDQoJPSBsZXQNCgkgICAgdmFsIGxpdmVUcmFu
c2ZlckluZm8NCgkgICAgIGFzIHtnZXQgPSBnZXRMaXZlVHJhbnNmZXJJbmZvIDoNCgkJICAgICAg
IExhYmVsLnQgLT4gKE1lbUxvYy50ICogUmVnaXN0ZXIudCkgbGlzdCwNCgkJIHNldCA9IHNldExp
dmVUcmFuc2ZlckluZm99DQoJICAgICA9IFByb3BlcnR5LmdldFNldA0KCSAgICAgICAoTGFiZWwu
cGxpc3QsDQoJCVByb3BlcnR5LmluaXRGdW4gKGZuIGxhYmVsID0+IFtdKSkNCgkgIGluDQoJICAg
IGxpdmVUcmFuc2ZlckluZm8NCgkgIGVuZA0KICAgIGVuZA0KDQogIHN0cnVjdHVyZSBHZW5lcmF0
ZVRyYW5zZmVycyA9DQogICAgc3RydWN0DQogICAgICBvcGVuIFRyYW5zZmVyDQogICAgICBvcGVu
IEp1bXBJbmZvDQoNCiAgICAgIGRhdGF0eXBlIGdlZiA9IEdFRiBvZiB7Z2VuZXJhdGUgOiBnZWYg
LT4gDQoJCQkgICAgICAgICAgICAgICAge2xhYmVsIDogTGFiZWwudCwNCgkJCQkJIGJlZ2luIDog
Ym9vbCwNCgkJCQkJIGFsaWduIDogYm9vbH0gLT4gDQoJCQkJCUFzc2VtYmx5LnQgbGlzdCwNCgkJ
CSAgICAgZWZmZWN0IDogZ2VmIC0+IA0KCQkJICAgICAgICAgICAgICB7dHJhbnNmZXIgOiBUcmFu
c2Zlci50LA0KCQkJCSAgICAgICBwcm9maWxlX2VuZCA6IEFzc2VtYmx5LnQgbGlzdH0gLT4NCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZW1ibHkudCBsaXN0LA0KCQkJ
ICAgICBmYWxsIDogZ2VmIC0+DQoJCQkgICAgICAgICAgICB7cHJvZmlsZV9lbmQgOiBBc3NlbWJs
eS50IGxpc3QsDQoJCQkJICAgICBsYWJlbCA6IExhYmVsLnQsDQoJCQkJICAgICBsaXZlIDogTWVt
TG9jLnQgbGlzdH0gLT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2Vt
Ymx5LnQgbGlzdH0NCg0KICAgICAgZnVuIGdlbmVyYXRlVHJhbnNmZXJzIHtibG9ja3MgOiBCbG9j
ay50IGxpc3QsDQoJCQkgICAgIGV4cG9ydHMgOiBMYWJlbC50IGxpc3QsDQoJCQkgICAgIG9wdGlt
aXplOiBpbnQsDQoJCQkgICAgIGJsb2NrX3ByZSA6IExhYmVsLnQgLT4gQXNzZW1ibHkudCBsaXN0
IG9wdGlvbiwNCgkJCSAgICAgYmxvY2tfYmVnaW4gOiBBc3NlbWJseS50IGxpc3QsDQoJCQkgICAg
IGJsb2NrX2VuZCA6IEFzc2VtYmx5LnQgbGlzdCwNCgkJCSAgICAgYmxvY2tfZmFsbCA6IEFzc2Vt
Ymx5LnQgbGlzdCwNCgkJCSAgICAgdHJhbnNmZXJSZWdzIDogUmVnaXN0ZXIudCBsaXN0LA0KCQkJ
ICAgICBsaXZlSW5mbyA6IHtnZXQgOiBMYWJlbC50IC0+IE1lbUxvYy50IGxpc3QsDQoJCQkJCSBz
ZXQgOiBMYWJlbC50ICogTWVtTG9jLnQgbGlzdCANCgkJCQkJICAgICAgIC0+IHVuaXR9LA0KCQkJ
ICAgICBqdW1wSW5mbyA6IHtnZXQ6IExhYmVsLnQgLT4gc3RhdHVzIHJlZn19DQoJPSBsZXQNCgkg
ICAgdmFsIGxpdmVUcmFuc2ZlckluZm8NCgkgICAgICA9IGlmICFDb250cm9sLk5hdGl2ZS5saXZl
VHJhbnNmZXINCgkJICB0aGVuIExpdmVUcmFuc2ZlckluZm8uY29tcHV0ZUxpdmVUcmFuc2Zlcklu
Zm8NCgkJICAgICAgIHtibG9ja3MgPSBibG9ja3MsDQoJCQl0cmFuc2ZlclJlZ3MgPSB0cmFuc2Zl
clJlZ3MsDQoJCQlsaXZlSW5mbyA9IGxpdmVJbmZvLA0KCQkJanVtcEluZm8gPSBqdW1wSW5mb30N
CgkJICBlbHNlIExpdmVUcmFuc2ZlckluZm8uY29tcHV0ZU5vTGl2ZVRyYW5zZmVySW5mbyAoKQ0K
DQoJICAgIHZhbCBsYXlvdXRJbmZvIGFzIHtnZXQgOiBMYWJlbC50IC0+IEJsb2NrLnQgb3B0aW9u
LA0KCQkJICAgICAgIHNldH0NCgkgICAgICA9IFByb3BlcnR5LmdldFNldChMYWJlbC5wbGlzdCwg
UHJvcGVydHkuaW5pdENvbnN0IE5PTkUpDQoNCgkgICAgdmFsIF8gDQoJICAgICAgPSBMaXN0LmZv
cmVhY2gNCgkgICAgICAgIChibG9ja3MsDQoJCSBmbiBibG9jayBhcyBCbG9jay5UIHtsYWJlbCwu
Li59DQoJCSAgPT4gc2V0KGxhYmVsLCBTT01FIGJsb2NrKSkNCg0KCSAgICBsb2NhbA0KCSAgICAg
IHZhbCBxdWV1ZSA9IHJlZiAoUXVldWUuZW1wdHkgKCkpDQoJICAgIGluDQoJICAgICAgZnVuIGVu
cXVlIHggPSBxdWV1ZSA6PSBRdWV1ZS5lbnF1ZSghcXVldWUsIHgpDQoJICAgICAgZnVuIGRlcXVl
ICgpID0gY2FzZSBRdWV1ZS5kZXF1ZSghcXVldWUpDQoJCQkgICAgICAgb2YgTk9ORSA9PiBOT05F
DQoJCQkJfCBTT01FKHgsIHF1ZXVlJykgPT4gKHF1ZXVlIDo9IHF1ZXVlJzsNCgkJCQkJCSAgICAg
IFNPTUUgeCkNCgkgICAgZW5kDQoNCgkgICAgZnVuIGdlbmVyYXRlQWxsIChnZWYgYXMgR0VGIHtn
ZW5lcmF0ZSxlZmZlY3QsZmFsbH0pDQoJICAgICAgICAgICAgICAgICAgICB7bGFiZWwsIGJlZ2lu
LCBhbGlnbn0gOiBBc3NlbWJseS50IGxpc3QNCgkgICAgICA9IChjYXNlIGdldCBsYWJlbA0KCQkg
ICBvZiBOT05FID0+IFtdDQoJCSAgICB8IFNPTUUgKEJsb2NrLlQge2xhYmVsLCBwcm9maWxlSW5m
bywNCgkJCQkgICAgIHN0YXRlbWVudHMsIHRyYW5zZmVyfSkNCgkJICAgID0+IGxldA0KCQkJIHZh
bCBfID0gc2V0KGxhYmVsLCBOT05FKQ0KDQoJCQkgdmFsIChwcm9maWxlX2JlZ2luLHByb2ZpbGVf
ZW5kKQ0KCQkJICAgPSBQcm9maWxlSW5mby5wcm9maWxlX2JlZ2luX2VuZCBwcm9maWxlSW5mbw0K
DQoJCQkgdmFsIHByZSANCgkJCSAgID0gaWYgYmVnaW4NCgkJCSAgICAgICB0aGVuICgoZm4gbA0K
CQkJCSAgICAgICA9PiBpZiBhbGlnbg0KCQkJCQkgICAgdGhlbiAoQXNzZW1ibHkucHNldWRvb3Bf
cDJhbGlnbiAyKTo6DQoJCQkJCSAgICAgICAgIGwNCgkJCQkJICAgIGVsc2UgbCkgbw0KCQkJCSAg
ICAgKGZuIGwNCgkJCQkgICAgICAgPT4gaWYgTGlzdC5jb250YWlucyhleHBvcnRzLA0KCQkJCQkJ
CSAgIGxhYmVsLA0KCQkJCQkJCSAgIExhYmVsLmVxdWFscykNCgkJCQkJICAgIHRoZW4gKEFzc2Vt
Ymx5LnBzZXVkb29wX2dsb2JhbCBsYWJlbCk6Og0KCQkJCQkgICAgICAgICBsDQoJCQkJCSAgICBl
bHNlIGwpIG8NCgkJCQkgICAgIChmbiBsDQoJCQkJICAgICAgID0+IGNhc2UgYmxvY2tfcHJlIGxh
YmVsDQoJCQkJCSAgICBvZiBOT05FID0+IGwNCgkJCQkJICAgICB8IFNPTUUgYXNzZW1ibHkgPT4g
TGlzdC5jb25jYXQNCgkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgW2Fzc2VtYmx5LCBsXSkp
DQoJCQkJICAgICgoQXNzZW1ibHkubGFiZWwgbGFiZWwpOjoNCgkJCQkgICAgIChMaXN0LmZvbGQN
CgkJCQkgICAgICAoKCNnZXQgbGl2ZVRyYW5zZmVySW5mbykgbGFiZWwsDQoJCQkJICAgICAgIGJs
b2NrX2JlZ2luLA0KCQkJCSAgICAgICBmbiAoKHRlbXAscmVnaXN0ZXIpLGJsb2NrX2JlZ2luKQ0K
CQkJCSAgICAgICAgPT4gKHg4Ni5Bc3NlbWJseS5kaXJlY3RpdmVfYXNzdW1lDQoJCQkJCSAgICB7
cmVnaXN0ZXIgPSByZWdpc3RlciwNCgkJCQkJICAgICBtZW1sb2MgPSB0ZW1wLA0KCQkJCQkgICAg
IHdlaWdodCA9IDEwMjQsDQoJCQkJCSAgICAgc3luYyA9IGZhbHNlLA0KCQkJCQkgICAgIHJlc2Vy
dmUgPSBmYWxzZX0pOjoNCgkJCQkgICAgICAgICAgIGJsb2NrX2JlZ2luKSkpDQoJCQkgICAgICAg
ZWxzZSBbXQ0KDQoJCQkgdmFsIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzDQoNCgkJCSB2YWwgcG9z
dCANCgkJCSAgID0gTGlzdC5jb25jYXQgW2Jsb2NrX2VuZCwgDQoJCQkJCSAgW0Fzc2VtYmx5LmRp
cmVjdGl2ZV9mbHVzaCAoKV1dDQoNCgkJCSB2YWwgdHJhbnNmZXIgPSBlZmZlY3QgZ2VmIHt0cmFu
c2ZlciA9IHRyYW5zZmVyLA0KCQkJCQkJICAgIHByb2ZpbGVfZW5kID0gcHJvZmlsZV9lbmR9DQoJ
CSAgICAgICBpbg0KCQkJIExpc3QuY29uY2F0IFtwcm9maWxlX2JlZ2luLA0KCQkJCSAgICAgIHBy
ZSwNCgkJCQkgICAgICBzdGF0ZW1lbnRzLA0KCQkJCSAgICAgIHBvc3QsDQoJCQkJICAgICAgdHJh
bnNmZXJdDQoJCSAgICAgICBlbmQpDQoNCgkgICAgZnVuIGVmZmVjdERlZmF1bHQgKGdlZiBhcyBH
RUYge2dlbmVyYXRlLGVmZmVjdCxmYWxsfSkNCgkgICAgICAgICAgICAgICAgICAgICAge3RyYW5z
ZmVyLCBwcm9maWxlX2VuZH0gOiBBc3NlbWJseS50IGxpc3QNCgkgICAgICA9IChjYXNlIHRyYW5z
ZmVyDQoJCSAgIG9mIEFzc2VtYmx5IGFzc2VtYmx5IA0KCQkgICAgPT4gTGlzdC5jb25jYXQgW2Fz
c2VtYmx5LCBwcm9maWxlX2VuZF0NCgkgICAgICAgICAgICB8IEdvdG8ge3RhcmdldH0NCgkJICAg
ID0+IGZhbGwgZ2VmDQoJCSAgICAgICAgICAgIHtwcm9maWxlX2VuZCA9IHByb2ZpbGVfZW5kLA0K
CQkJICAgICBsYWJlbCA9IHRhcmdldCwNCgkJCSAgICAgbGl2ZSA9ICgjZ2V0IGxpdmVJbmZvKSB0
YXJnZXR9DQoJCSAgICB8IElmZiB7Y29uZGl0aW9uLCB0cnVlZSwgZmFsc2VlfQ0KCQkgICAgPT4g
bGV0DQoJCQkgdmFsIGNvbmRpdGlvbl9uZWcgDQoJCQkgICA9IEluc3RydWN0aW9uLmNvbmRpdGlv
bl9uZWdhdGUgY29uZGl0aW9uDQoJCQkgICANCgkJCSB2YWwgdHJ1ZWVfbGl2ZSA9ICgjZ2V0IGxp
dmVJbmZvKSB0cnVlZQ0KCQkJIHZhbCB0cnVlZV9saXZlVHJhbnNmZXIgDQoJCQkgICA9ICgjZ2V0
IGxpdmVUcmFuc2ZlckluZm8pIHRydWVlDQoJCQkgdmFsIHRydWVlX2xpdmUNCgkJCSAgID0gTGlz
dC5yZW1vdmVBbGwNCgkJCSAgICAgKHRydWVlX2xpdmUsDQoJCQkgICAgICBmbiB0ZW1wID0+IExp
c3QuZXhpc3RzDQoJCQkgICAgICAgICAgICAgICAgICh0cnVlZV9saXZlVHJhbnNmZXIsDQoJCQkJ
CSAgZm4gKHRlbXAnLF8pIA0KCQkJCQkgICA9PiBNZW1Mb2MuZXEodGVtcCwgdGVtcCcpKSkNCg0K
CQkJIHZhbCBmYWxzZWVfbGl2ZSA9ICgjZ2V0IGxpdmVJbmZvKSBmYWxzZWUNCgkJCSB2YWwgZmFs
c2VlX2xpdmVUcmFuc2Zlcg0KCQkJICAgPSAoI2dldCBsaXZlVHJhbnNmZXJJbmZvKSBmYWxzZWUN
CgkJCSB2YWwgZmFsc2VlX2xpdmUNCgkJCSAgID0gTGlzdC5yZW1vdmVBbGwNCgkJCSAgICAgKGZh
bHNlZV9saXZlLA0KCQkJICAgICAgZm4gdGVtcCA9PiBMaXN0LmV4aXN0cw0KCQkJICAgICAgICAg
ICAgICAgICAoZmFsc2VlX2xpdmVUcmFuc2ZlciwNCgkJCQkJICBmbiAodGVtcCcsXykgDQoJCQkJ
CSAgID0+IE1lbUxvYy5lcSh0ZW1wLCB0ZW1wJykpKQ0KDQoJCQkgdmFsIGNvbW1vbl9saXZlDQoJ
CQkgICA9IExpc3Qua2VlcEFsbCh0cnVlZV9saXZlLA0KCQkJCQkgIGZuIHRlbXANCgkJCQkJICAg
PT4gTGlzdC5jb250YWlucyhmYWxzZWVfbGl2ZSwNCgkJCQkJCQkgICAgdGVtcCwNCgkJCQkJCQkg
ICAgTWVtTG9jLmVxKSkNCg0KCQkJIHZhbCAodHJ1ZWVfbGl2ZSx0cnVlZV9saXZlX2xlbmd0aCkN
CgkJCSAgID0gTGlzdC5mb2xkDQoJCQkgICAgICh0cnVlZV9saXZlLA0KCQkJICAgICAgKFtdLDAp
LA0KCQkJICAgICAgZm4gKHRlbXAsKHRydWVlX2xpdmUsdHJ1ZWVfbGl2ZV9sZW5ndGgpKQ0KCQkJ
ICAgICAgID0+IGlmIExpc3QuY29udGFpbnMoY29tbW9uX2xpdmUsDQoJCQkJCQkgICB0ZW1wLA0K
CQkJCQkJICAgTWVtTG9jLmVxKQ0KCQkJCSAgICB0aGVuICh0cnVlZV9saXZlLHRydWVlX2xpdmVf
bGVuZ3RoKQ0KCQkJCSAgICBlbHNlICh0ZW1wOjp0cnVlZV9saXZlLA0KCQkJCQkgIDEgKyB0cnVl
ZV9saXZlX2xlbmd0aCkpDQoJCQkgdmFsIHRydWVlX2xpdmVfbGVuZ3RoDQoJCQkgICA9IHRydWVl
X2xpdmVfbGVuZ3RoICsgDQoJCQkgICAgIChMaXN0Lmxlbmd0aCB0cnVlZV9saXZlVHJhbnNmZXIp
DQoJCQkgICANCg0KCQkJIHZhbCAoZmFsc2VlX2xpdmUsZmFsc2VlX2xpdmVfbGVuZ3RoKQ0KCQkJ
ICAgPSBMaXN0LmZvbGQNCgkJCSAgICAgKGZhbHNlZV9saXZlLA0KCQkJICAgICAgKFtdLDApLA0K
CQkJICAgICAgZm4gKHRlbXAsKGZhbHNlZV9saXZlLGZhbHNlZV9saXZlX2xlbmd0aCkpDQoJCQkg
ICAgICAgPT4gaWYgTGlzdC5jb250YWlucyhjb21tb25fbGl2ZSwNCgkJCQkJCSAgIHRlbXAsDQoJ
CQkJCQkgICBNZW1Mb2MuZXEpDQoJCQkJICAgIHRoZW4gKGZhbHNlZV9saXZlLGZhbHNlZV9saXZl
X2xlbmd0aCkNCgkJCQkgICAgZWxzZSAodGVtcDo6ZmFsc2VlX2xpdmUsDQoJCQkJCSAgMSArIGZh
bHNlZV9saXZlX2xlbmd0aCkpDQoJCQkgdmFsIGZhbHNlZV9saXZlX2xlbmd0aA0KCQkJICAgPSBm
YWxzZWVfbGl2ZV9sZW5ndGggKyANCgkJCSAgICAgKExpc3QubGVuZ3RoIGZhbHNlZV9saXZlVHJh
bnNmZXIpDQoNCgkJCSBmdW4gZmFsbF90cnVlZSAoKQ0KCQkJICAgPSAoZW5xdWUgZmFsc2VlOw0K
CQkJICAgICAgTGlzdC5jb25jYXQNCgkJCSAgICAgIFsoQXNzZW1ibHkuZGlyZWN0aXZlX2NvbW1p
dCANCgkJCQl7bWVtbG9jcyA9IExpc3QuY29uY2F0IFtjb21tb25fbGl2ZSwgDQoJCQkJCQkJZmFs
c2VlX2xpdmVdfSk6Og0KCQkJICAgICAgIChMaXN0Lm1hcA0KCQkJCShmYWxzZWVfbGl2ZVRyYW5z
ZmVyLA0KCQkJCSBmbiAodGVtcCxyZWdpc3RlcikNCgkJCQkgID0+IEFzc2VtYmx5LmRpcmVjdGl2
ZV9jYWNoZQ0KCQkJCSAgICAge3JlZ2lzdGVyID0gcmVnaXN0ZXIsDQoJCQkJICAgICAgbWVtbG9j
ID0gdGVtcCwNCgkJCQkgICAgICByZXNlcnZlID0gZmFsc2V9KSksDQoJCQkgICAgICAgKEFzc2Vt
Ymx5Lmluc3RydWN0aW9uX2pjYw0KCQkJCXtjb25kaXRpb24gPSBjb25kaXRpb25fbmVnLA0KCQkJ
CSB0YXJnZXQgPSBPcGVyYW5kLmxhYmVsIGZhbHNlZX0pOjoNCgkJCSAgICAgICAoZmFsbCBnZWYg
DQogCQkJICAgICAgICAgICAgIHtwcm9maWxlX2VuZCA9IHByb2ZpbGVfZW5kLA0KCQkJCSAgICAg
IGxhYmVsID0gdHJ1ZWUsDQoJCQkJICAgICAgbGl2ZSA9IHRydWVlX2xpdmV9KV0pDQoNCgkJCSBm
dW4gZmFsbF9mYWxzZWUgKCkNCgkJCSAgID0gKGVucXVlIHRydWVlOw0KCQkJICAgICAgTGlzdC5j
b25jYXQNCgkJCSAgICAgIFsoQXNzZW1ibHkuZGlyZWN0aXZlX2NvbW1pdCANCgkJCQl7bWVtbG9j
cyA9IExpc3QuY29uY2F0IFtjb21tb25fbGl2ZSwNCgkJCQkJCQl0cnVlZV9saXZlXX0pOjoNCgkJ
CSAgICAgICAoTGlzdC5tYXANCgkJCQkodHJ1ZWVfbGl2ZVRyYW5zZmVyLA0KCQkJCSBmbiAodGVt
cCxyZWdpc3RlcikNCgkJCQkgID0+IEFzc2VtYmx5LmRpcmVjdGl2ZV9jYWNoZQ0KCQkJCSAgICAg
e3JlZ2lzdGVyID0gcmVnaXN0ZXIsDQoJCQkJICAgICAgbWVtbG9jID0gdGVtcCwNCgkJCQkgICAg
ICByZXNlcnZlID0gZmFsc2V9KSksDQoJCQkgICAgICAgKEFzc2VtYmx5Lmluc3RydWN0aW9uX2pj
Yw0KCQkJCXtjb25kaXRpb24gPSBjb25kaXRpb24sDQoJCQkJIHRhcmdldCA9IE9wZXJhbmQubGFi
ZWwgdHJ1ZWV9KTo6DQoJCQkgICAgICAgKGZhbGwgZ2VmDQoJCQkgICAgICAgICAgICAge3Byb2Zp
bGVfZW5kID0gcHJvZmlsZV9lbmQsDQoJCQkJICAgICAgbGFiZWwgPSBmYWxzZWUsDQoJCQkJICAg
ICAgbGl2ZSA9IGZhbHNlZV9saXZlfSldKQ0KCQkgICAgICAgaW4gDQoJCQkgY2FzZSAoISgoI2dl
dCBqdW1wSW5mbykgdHJ1ZWUpLA0KCQkJICAgICAgICEoKCNnZXQganVtcEluZm8pIGZhbHNlZSkp
DQoJCQkgICBvZiAoTWF5YmUgMSwgTWF5YmUgMSkNCgkJCSAgICA9PiBpZiB0cnVlZV9saXZlX2xl
bmd0aCA8PSBmYWxzZWVfbGl2ZV9sZW5ndGgNCgkJCQkgdGhlbiBmYWxsX2ZhbHNlZSAoKQ0KCQkJ
CSBlbHNlIGZhbGxfdHJ1ZWUgKCkNCgkJCSAgICB8IChNYXliZSAxLCBfKQ0KCQkJICAgID0+IGZh
bGxfdHJ1ZWUgKCkNCgkJCSAgICB8IChfLCBNYXliZSAxKQ0KCQkJICAgID0+IGZhbGxfZmFsc2Vl
ICgpDQoJCQkgICAgfCBfDQoJCQkgICAgPT4gaWYgdHJ1ZWVfbGl2ZV9sZW5ndGggPD0gZmFsc2Vl
X2xpdmVfbGVuZ3RoDQoJCQkJIHRoZW4gZmFsbF9mYWxzZWUgKCkNCgkJCQkgZWxzZSBmYWxsX3Ry
dWVlICgpDQoJCSAgICAgICBlbmQNCgkgICAgICAgICAgICB8IFN3aXRjaCB7dGVzdCwgY2FzZXMs
IGRlZmF1bHR9DQoJCSAgICA9PiBsZXQNCgkJCSB2YWwgc2l6ZSANCgkJCSAgID0gY2FzZSBPcGVy
YW5kLnNpemUgdGVzdA0KCQkJICAgICAgIG9mIFNPTUUgc2l6ZSA9PiBzaXplDQoJCQkJfCBOT05F
ID0+IFNpemUuTE9ORw0KDQoJCQkgdmFsIGRlZmF1bHRfbGl2ZSA9ICgjZ2V0IGxpdmVJbmZvKSBk
ZWZhdWx0DQoJCQkgdmFsIGRlZmF1bHRfbGl2ZVRyYW5zZmVyDQoJCQkgICA9ICgjZ2V0IGxpdmVU
cmFuc2ZlckluZm8pIGRlZmF1bHQNCgkJCSB2YWwgZGVmYXVsdF9saXZlDQoJCQkgICA9IExpc3Qu
cmVtb3ZlQWxsDQoJCQkgICAgIChkZWZhdWx0X2xpdmUsDQoJCQkgICAgICBmbiB0ZW1wIA0KCQkJ
ICAgICAgID0+IExpc3QuZXhpc3RzDQoJCQkgICAgICAgICAgKGRlZmF1bHRfbGl2ZVRyYW5zZmVy
LA0KCQkJCSAgIGZuICh0ZW1wJyxfKSANCgkJCQkgICAgPT4gTWVtTG9jLmVxKHRlbXAsIHRlbXAn
KSkpDQoNCgkJCSB2YWwgY2FzZXNfY2FzZXNfbGl2ZV9jYXNlc19saXZlVHJhbnNmZXINCgkJCSAg
ID0gVHJhbnNmZXIuQ2FzZXMubWFwJw0KCQkJICAgICAoY2FzZXMsDQoJCQkgICAgICBmbiAoaywg
dGFyZ2V0KSANCgkJCSAgICAgICA9PiBsZXQNCgkJCQkgICAgdmFsIHRhcmdldF9saXZlID0gKCNn
ZXQgbGl2ZUluZm8pIHRhcmdldA0KCQkJCSAgICB2YWwgdGFyZ2V0X2xpdmVUcmFuc2Zlcg0KCQkJ
CSAgICAgID0gKCNnZXQgbGl2ZVRyYW5zZmVySW5mbykgdGFyZ2V0DQoJCQkJICAgIHZhbCB0YXJn
ZXRfbGl2ZQ0KCQkJCSAgICAgID0gTGlzdC5yZW1vdmVBbGwNCgkJCQkgICAgICAgICh0YXJnZXRf
bGl2ZSwNCgkJCQkJIGZuIHRlbXAgDQoJCQkJCSAgPT4gTGlzdC5leGlzdHMNCgkJCQkJICAgICAo
dGFyZ2V0X2xpdmVUcmFuc2ZlciwNCgkJCQkJICAgICAgZm4gKHRlbXAnLF8pIA0KCQkJCQkgICAg
ICAgPT4gTWVtTG9jLmVxKHRlbXAsIHRlbXAnKSkpDQoJCQkJICBpbg0KCQkJCSAgICAoKGssdGFy
Z2V0KSwNCgkJCQkgICAgIHRhcmdldF9saXZlLA0KCQkJCSAgICAgdGFyZ2V0X2xpdmVUcmFuc2Zl
cikNCgkJCQkgIGVuZCwNCgkJCSAgICAgIGZuIChjLCB0YXJnZXQpID0+IChJbW1lZGlhdGUuQ2hh
ciBjLCB0YXJnZXQpLA0KCQkJICAgICAgZm4gKGksIHRhcmdldCkgPT4gKEltbWVkaWF0ZS5JbnQg
aSwgdGFyZ2V0KSwNCgkJCSAgICAgIGZuICh3LCB0YXJnZXQpID0+IChJbW1lZGlhdGUuV29yZCB3
LCB0YXJnZXQpKQ0KDQoJCQkgdmFsIChjYXNlcywgY2FycnlfbGl2ZSwgY2FycnlfbGl2ZVRyYW5z
ZmVyKQ0KCQkJICAgPSBMaXN0LmZvbGQNCgkJCSAgICAgKGNhc2VzX2Nhc2VzX2xpdmVfY2FzZXNf
bGl2ZVRyYW5zZmVyLA0KCQkJICAgICAgKFtdLCBbXSwgW10pLA0KCQkJICAgICAgZm4gKCgoayx0
YXJnZXQpLCANCgkJCQkgICB0YXJnZXRfbGl2ZSwgDQoJCQkJICAgdGFyZ2V0X2xpdmVUcmFuc2Zl
ciksDQoJCQkJICAoY2FzZXMsIA0KCQkJCSAgIGNhcnJ5X2xpdmUsIA0KCQkJCSAgIGNhcnJ5X2xp
dmVUcmFuc2ZlcikpDQoJCQkgICAgICAgPT4gbGV0DQoJCQkJICAgIHZhbCAodGFyZ2V0X2xpdmUs
DQoJCQkJCSBjYXJyeV9saXZlKQ0KCQkJCSAgICAgID0gTGlzdC5mb2xkDQoJCQkJICAgICAgICAo
dGFyZ2V0X2xpdmUsDQoJCQkJCSAoW10sY2FycnlfbGl2ZSksDQoJCQkJCSBmbiAodGVtcCwNCgkJ
CQkJICAgICAodGFyZ2V0X2xpdmUnLA0KCQkJCQkgICAgICBjYXJyeV9saXZlJykpDQoJCQkJCSAg
PT4gaWYgTGlzdC5jb250YWlucw0KCQkJCQkgICAgICAgIChjYXJyeV9saXZlLA0KCQkJCQkJIHRl
bXAsDQoJCQkJCQkgTWVtTG9jLmVxKQ0KCQkJCQkgICAgICAgdGhlbiAodGFyZ2V0X2xpdmUnLA0K
CQkJCQkJICAgICBjYXJyeV9saXZlJykNCgkJCQkJICAgICAgIGVsc2UgKHRlbXA6OnRhcmdldF9s
aXZlJywNCgkJCQkJCSAgICAgdGVtcDo6Y2FycnlfbGl2ZScpKQ0KDQoJCQkJICAgIHZhbCAodGFy
Z2V0X2xpdmVUcmFuc2ZlciwNCgkJCQkJIGNhcnJ5X2xpdmVUcmFuc2ZlcikNCgkJCQkgICAgICA9
IExpc3QuZm9sZA0KCQkJCSAgICAgICAgKHRhcmdldF9saXZlVHJhbnNmZXIsDQoJCQkJCSAoW10s
Y2FycnlfbGl2ZVRyYW5zZmVyKSwNCgkJCQkJIGZuICgodGVtcCxyZWdpc3RlciksDQoJCQkJCSAg
ICAgKHRhcmdldF9saXZlVHJhbnNmZXInLA0KCQkJCQkgICAgICBjYXJyeV9saXZlVHJhbnNmZXIn
KSkNCgkJCQkJICA9PiBpZiBMaXN0LmNvbnRhaW5zDQoJCQkJCSAgICAgICAgKGNhcnJ5X2xpdmVU
cmFuc2ZlciwNCgkJCQkJCSAodGVtcCxyZWdpc3RlciksDQoJCQkJCQkgZm4gKCh0MSxyMSksKHQy
LHIyKSkNCgkJCQkJCSAgPT4gTWVtTG9jLmVxKHQxLHQyKQ0KCQkJCQkJICAgICBhbmRhbHNvDQoJ
CQkJCQkgICAgIFJlZ2lzdGVyLmVxKHIxLHIyKSkNCgkJCQkJICAgICAgIHRoZW4gKHRhcmdldF9s
aXZlVHJhbnNmZXInLA0KCQkJCQkJICAgICBjYXJyeV9saXZlVHJhbnNmZXInKQ0KCQkJCQkgICAg
ICAgZWxzZSAoKHRlbXAscmVnaXN0ZXIpOjoNCgkJCQkJCSAgICAgdGFyZ2V0X2xpdmVUcmFuc2Zl
cicsDQoJCQkJCQkgICAgICh0ZW1wLHJlZ2lzdGVyKTo6DQoJCQkJCQkgICAgIGNhcnJ5X2xpdmVU
cmFuc2ZlcicpKQ0KCQkJCSAgaW4NCgkJCQkgICAgZW5xdWUgdGFyZ2V0Ow0KCQkJCSAgICAoTGlz
dC5jb25jYXQNCgkJCQkgICAgIFsoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25famNjDQoJCQkJICAgICAg
IHtjb25kaXRpb24gPSBJbnN0cnVjdGlvbi5FLA0KCQkJCQl0YXJnZXQgPSBPcGVyYW5kLmxhYmVs
IHRhcmdldH0pOjoNCgkJCQkgICAgICAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fY21wDQoJCQkJICAg
ICAgIHtzcmMxID0gdGVzdCwNCgkJCQkJc3JjMiA9IE9wZXJhbmQuaW1tZWRpYXRlX2NvbnN0IGss
DQoJCQkJCXNpemUgPSBzaXplfSk6OgkNCgkJCQkgICAgICAoTGlzdC5tYXANCgkJCQkgICAgICAg
KHRhcmdldF9saXZlVHJhbnNmZXIsDQoJCQkJCWZuICh0ZW1wLHJlZ2lzdGVyKQ0KCQkJCQkgPT4g
QXNzZW1ibHkuZGlyZWN0aXZlX2NhY2hlDQoJCQkJCSAgICB7cmVnaXN0ZXIgPSByZWdpc3RlciwN
CgkJCQkJICAgICBtZW1sb2MgPSB0ZW1wLA0KCQkJCQkgICAgIHJlc2VydmUgPSB0cnVlfSkpLA0K
CQkJCSAgICAgIChBc3NlbWJseS5kaXJlY3RpdmVfY29tbWl0IA0KCQkJCSAgICAgICB7bWVtbG9j
cyA9IHRhcmdldF9saXZlfSk6Og0KCQkJCSAgICAgIGNhc2VzXSwNCgkJCQkgICAgIGNhcnJ5X2xp
dmUsDQoJCQkJICAgICBjYXJyeV9saXZlVHJhbnNmZXIpDQoJCQkJICBlbmQpDQoNCgkJCSB2YWwg
ZGVmYXVsdF9saXZlDQoJCQkgICA9IExpc3QucmVtb3ZlQWxsDQoJCQkgICAgIChkZWZhdWx0X2xp
dmUsDQoJCQkgICAgICBmbiB0ZW1wIA0KCQkJICAgICAgID0+IExpc3QuY29udGFpbnMNCgkJCSAg
ICAgICAgICAoY2FycnlfbGl2ZSwNCgkJCQkgICB0ZW1wLA0KCQkJCSAgIE1lbUxvYy5lcSkpDQoN
CgkJCSB2YWwgY2FzZXMNCgkJCSAgID0gTGlzdC5mb2xkDQoJCQkgICAgIChjYXJyeV9saXZlVHJh
bnNmZXIsDQoJCQkgICAgICBjYXNlcywNCgkJCSAgICAgIGZuICgodGVtcCxyZWdpc3RlciksY2Fz
ZXMpDQoJCQkgICAgICAgPT4gKEFzc2VtYmx5LmRpcmVjdGl2ZV91bnJlc2VydmUNCgkJCQkgICB7
cmVnaXN0ZXIgPSByZWdpc3Rlcn0pOjoNCgkJCSAgICAgICAgICBjYXNlcykNCgkJICAgICAgIGlu
IA0KCQkJIExpc3QuZm9sZChjYXNlcywNCgkJCQkgICBmYWxsIGdlZg0KCQkJCSAgICAgICAge3By
b2ZpbGVfZW5kID0gcHJvZmlsZV9lbmQsDQoJCQkJICAgICAgICAgbGFiZWwgPSBkZWZhdWx0LA0K
CQkJCSAgICAgICAgIGxpdmUgPSBkZWZhdWx0X2xpdmV9LA0KCQkJCSAgIG9wIDo6KQ0KCQkgICAg
ICBlbmQpDQoNCgkgICAgZnVuIGVmZmVjdEp1bXBUYWJsZSAoZ2VmIGFzIEdFRiB7Z2VuZXJhdGUs
ZWZmZWN0LGZhbGx9KQ0KCSAgICAgICAgICAgICAgICAgICAgICAgICB7dHJhbnNmZXIsIHByb2Zp
bGVfZW5kfSA6IEFzc2VtYmx5LnQgbGlzdA0KCSAgICAgID0gY2FzZSB0cmFuc2Zlcg0KCQkgIG9m
IFN3aXRjaCB7dGVzdCwgY2FzZXMsIGRlZmF1bHR9DQoJCSAgID0+IGxldA0KCQkJZnVuIHJlZHVj
ZShjYXNlcywNCgkJCQkgICBvcHMgYXMge3plcm8sDQoJCQkJCSAgIGV2ZW4sDQoJCQkJCSAgIGlu
Y0ZuLCBkZWNGbiwgaGFsZkZuLA0KCQkJCQkgICBsdEZuLCBndEZuLA0KCQkJCQkgICBtaW4sIG1p
bkZuLA0KCQkJCQkgICBtYXgsIG1heEZuLA0KCQkJCQkgICByYW5nZX0pDQoJCQkgID0gbGV0DQoJ
CQkgICAgICBmdW4gcmVkdWNlJyBjYXNlcw0KCQkJCT0gbGV0DQoJCQkJICAgIHZhbCAobWluSyxt
YXhLLGxlbmd0aCwNCgkJCQkJIGFsbEV2ZW4sYWxsT2RkKQ0KCQkJCSAgICAgID0gTGlzdC5mb2xk
DQoJCQkJICAgICAgICAoY2FzZXMsDQoJCQkJCSAobWF4LCBtaW4sIDAsDQoJCQkJCSAgdHJ1ZSwg
dHJ1ZSksDQoJCQkJCSBmbiAoKGssdGFyZ2V0KSwNCgkJCQkJICAgICAobWluSyxtYXhLLGxlbmd0
aCwNCgkJCQkJICAgICAgYWxsRXZlbixhbGxPZGQpKQ0KCQkJCQkgID0+IGxldA0KCQkJCQkgICAg
ICAgdmFsIGlzRXZlbiA9IGV2ZW4gaw0KCQkJCQkgICAgIGluDQoJCQkJCSAgICAgICAobWluRm4o
ayxtaW5LKSwNCgkJCQkJCW1heEZuKGssbWF4SyksDQoJCQkJCQlsZW5ndGggKyAxLA0KCQkJCQkJ
YWxsRXZlbiBhbmRhbHNvIGlzRXZlbiwNCgkJCQkJCWFsbE9kZCBhbmRhbHNvIG5vdCBpc0V2ZW4p
DQoJCQkJCSAgICAgZW5kKQ0KCQkJCSAgaW4NCgkJCQkgICAgaWYgbGVuZ3RoID4gMSBhbmRhbHNv
DQoJCQkJICAgICAgIChhbGxFdmVuIG9yZWxzZSBhbGxPZGQpDQoJCQkJICAgICAgdGhlbiBsZXQN
CgkJCQkJICAgICB2YWwgZiA9IGlmIGFsbE9kZA0KCQkJCQkJICAgICAgIHRoZW4gaGFsZkZuIG8g
ZGVjRm4NCgkJCQkJCSAgICAgICBlbHNlIGhhbGZGbg0KCQkJCQkgICAgIHZhbCBjYXNlcycgDQoJ
CQkJCSAgICAgICA9IExpc3QubWFwDQoJCQkJCSAgICAgICAgIChjYXNlcywNCgkJCQkJCSAgZm4g
KGssdGFyZ2V0KQ0KCQkJCQkJICAgPT4gKGYgaywgdGFyZ2V0KSkNCg0KCQkJCQkgICAgIHZhbCAo
Y2FzZXMnJywgDQoJCQkJCQkgIG1pbksnJywgbWF4SycnLCBsZW5ndGgnJywNCgkJCQkJCSAgc2hp
ZnQnJywgbWFzaycnKQ0KCQkJCQkgICAgICAgPSByZWR1Y2UnIGNhc2VzJw0KDQoJCQkJCSAgICAg
dmFsIHNoaWZ0JyA9IDEgKyBzaGlmdCcnDQoJCQkJCSAgICAgdmFsIG1hc2snIA0KCQkJCQkgICAg
ICAgPSBXb3JkLm9yYg0KCQkJCQkgICAgICAgICAoV29yZC48PChtYXNrJycsIDB3eDEpLA0KCQkJ
CQkJICBpZiBhbGxPZGQNCgkJCQkJCSAgICB0aGVuIDB3eDENCgkJCQkJCSAgICBlbHNlIDB3eDAp
DQoJCQkJCSAgIGluDQoJCQkJCSAgICAgKGNhc2VzJycsIA0KCQkJCQkgICAgICBtaW5LJycsIG1h
eEsnJywgbGVuZ3RoJycsDQoJCQkJCSAgICAgIHNoaWZ0JywgbWFzaycpDQoJCQkJCSAgIGVuZA0K
CQkJCSAgICAgIGVsc2UgKGNhc2VzLCANCgkJCQkJICAgIG1pbkssIG1heEssIGxlbmd0aCwNCgkJ
CQkJICAgIDAsIDB3eDApDQoJCQkJICBlbmQNCgkJCSAgICBpbiANCgkJCSAgICAgIHJlZHVjZScg
Y2FzZXMNCgkJCSAgICBlbmQNCg0KCQkJZnVuIGRvaXRUYWJsZShjYXNlcywNCgkJCQkgICAgICBv
cHMgYXMge3plcm8sDQoJCQkJCSAgICAgIGV2ZW4sDQoJCQkJCSAgICAgIGluY0ZuLCBkZWNGbiwg
aGFsZkZuLA0KCQkJCQkgICAgICBsdEZuLCBndEZuLA0KCQkJCQkgICAgICBtaW4sIG1pbkZuLA0K
CQkJCQkgICAgICBtYXgsIG1heEZuLA0KCQkJCQkgICAgICByYW5nZX0sDQoJCQkJICAgICAgbWlu
SywgbWF4SywgcmFuZ2VLLCBzaGlmdCwgbWFzaywNCgkJCQkgICAgICBjb25zdEZuKQ0KCQkJICA9
IGxldA0KCQkJICAgICAgdmFsIGp1bXBfdGFibGVfbGFiZWwNCgkJCQk9IExhYmVsLm5ld1N0cmlu
ZyAianVtcFRhYmxlIg0KDQoJCQkgICAgICB2YWwgcmVjIGZpbGxlciANCgkJCQk9IGZuIChbXSxf
KSA9PiBbXQ0KCQkJCSAgIHwgKGNhc2VzIGFzIChpLHRhcmdldCk6OmNhc2VzJyxqKQ0KCQkJCSAg
ID0+IGlmIGkgPSBqDQoJCQkJCXRoZW4gKGVucXVlIHRhcmdldDsNCgkJCQkJICAgICAgKEltbWVk
aWF0ZS5sYWJlbCB0YXJnZXQpOjoNCgkJCQkJICAgICAgKGZpbGxlcihjYXNlcycsIGluY0ZuIGop
KSkNCgkJCQkJZWxzZSAoSW1tZWRpYXRlLmxhYmVsIGRlZmF1bHQpOjoNCgkJCQkJICAgICAoZmls
bGVyKGNhc2VzLCBpbmNGbiBqKSkNCg0KCQkJICAgICAgdmFsIF8gPSBlbnF1ZSBkZWZhdWx0DQoJ
CQkgICAgICB2YWwganVtcF90YWJsZSA9IGZpbGxlciAoY2FzZXMsIG1pbkspDQoNCgkJCSAgICAg
IHZhbCBpbmRleA0KCQkJCT0gTWVtTG9jLmltbQ0KCQkJCSAge2Jhc2UgPSBJbW1lZGlhdGUuY29u
c3RfaW50IDAsDQoJCQkJICAgaW5kZXggPSBJbW1lZGlhdGUuY29uc3RfaW50IDAsDQoJCQkJICAg
c2NhbGUgPSBTY2FsZS5Gb3VyLA0KCQkJCSAgIHNpemUgPSBTaXplLkxPTkcsDQoJCQkJICAgY29t
bWl0ID0gTWVtTG9jLkNvbW1pdC5jb21taXQNCgkJCQkgICAgICAgICAgICB7aXNUZW1wID0gdHJ1
ZSwNCgkJCQkJICAgICBvbkZsdXNoID0gZmFsc2V9LA0KCQkJCSAgIGNsYXNzID0gTWVtTG9jLkNs
YXNzLm5ldyAiVGVtcCJ9DQoJCQkgICAgICB2YWwgY2hlY2sNCgkJCQk9IE1lbUxvYy5pbW0NCgkJ
CQkgIHtiYXNlID0gSW1tZWRpYXRlLmNvbnN0X2ludCAwLA0KCQkJCSAgIGluZGV4ID0gSW1tZWRp
YXRlLmNvbnN0X2ludCAwLA0KCQkJCSAgIHNjYWxlID0gU2NhbGUuRm91ciwNCgkJCQkgICBzaXpl
ID0gU2l6ZS5MT05HLA0KCQkJCSAgIGNvbW1pdCA9IE1lbUxvYy5Db21taXQuY29tbWl0DQoJCQkJ
ICAgICAgICAgICAge2lzVGVtcCA9IHRydWUsDQoJCQkJCSAgICAgb25GbHVzaCA9IGZhbHNlfSwN
CgkJCQkgICBjbGFzcyA9IE1lbUxvYy5DbGFzcy5uZXcgIlRlbXAifQ0KDQoJCQkgICAgICB2YWwg
YWRkcmVzcw0KCQkJCT0gTWVtTG9jLmJhc2ljDQoJCQkJICB7YmFzZSA9IEltbWVkaWF0ZS5sYWJl
bCBqdW1wX3RhYmxlX2xhYmVsLA0KCQkJCSAgIGluZGV4ID0gaW5kZXgsDQoJCQkJICAgc2NhbGUg
PSBTY2FsZS5Gb3VyLA0KCQkJCSAgIHNpemUgPSBTaXplLkxPTkcsDQoJCQkJICAgY29tbWl0ID0g
TWVtTG9jLkNvbW1pdC5jb21taXQNCgkJCQkgICAgICAgICAgICB7aXNUZW1wID0gdHJ1ZSwNCgkJ
CQkJICAgICBvbkZsdXNoID0gZmFsc2V9LA0KCQkJCSAgIGNsYXNzID0gTWVtTG9jLkNsYXNzLkNv
ZGV9DQoNCgkJCSAgICAgIHZhbCBzaXplIA0KCQkJCT0gY2FzZSBPcGVyYW5kLnNpemUgdGVzdA0K
CQkJCSAgICBvZiBTT01FIHNpemUgPT4gc2l6ZQ0KCQkJCSAgICAgfCBOT05FID0+IFNpemUuTE9O
Rw0KCQkJICAgICAgdmFsIGluZGV4ID0gT3BlcmFuZC5tZW1sb2MgaW5kZXgNCgkJCSAgICAgIHZh
bCBjaGVjayA9IE9wZXJhbmQubWVtbG9jIGNoZWNrDQoJCQkgICAgICB2YWwgYWRkcmVzcyA9IE9w
ZXJhbmQubWVtbG9jIGFkZHJlc3MNCgkJCSAgICAgIHZhbCBkZWZhdWx0ID0gT3BlcmFuZC5sYWJl
bCBkZWZhdWx0DQoJCQkgICAgaW4NCgkJCSAgICAgICgoZm4gbA0KCQkJCSA9PiBpZiBTaXplLmx0
KHNpemUsIFNpemUuTE9ORykNCgkJCQkgICAgICB0aGVuIChBc3NlbWJseS5pbnN0cnVjdGlvbl9t
b3Z4DQoJCQkJCSAgICB7b3BlciA9IEluc3RydWN0aW9uLk1PVlpYLA0KCQkJCQkgICAgIHNyYyA9
IHRlc3QsDQoJCQkJCSAgICAgc3Jjc2l6ZSA9IHNpemUsDQoJCQkJCSAgICAgZHN0ID0gaW5kZXgs
DQoJCQkJCSAgICAgZHN0c2l6ZSA9IFNpemUuTE9OR30pOjoNCgkJCQkJICAgbA0KCQkJCSAgICAg
IGVsc2UgKEFzc2VtYmx5Lmluc3RydWN0aW9uX21vdg0KCQkJCQkgICAge3NyYyA9IHRlc3QsDQoJ
CQkJCSAgICAgZHN0ID0gaW5kZXgsDQoJCQkJCSAgICAgc2l6ZSA9IFNpemUuTE9OR30pOjoNCgkJ
CQkJICAgbCkgbw0KCQkJICAgICAgIChmbiBsDQoJCQkJID0+IGlmIHNoaWZ0ID4gMA0KCQkJCSAg
ICAgIHRoZW4gKChmbiBsDQoJCQkJCSAgICAgID0+IChBc3NlbWJseS5pbnN0cnVjdGlvbl9tb3YN
CgkJCQkJCSAge3NyYyA9IGluZGV4LA0KCQkJCQkJICAgZHN0ID0gY2hlY2ssDQoJCQkJCQkgICBz
aXplID0gU2l6ZS5MT05HfSk6Og0KCQkJCQkgICAgICAgICAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25f
YmluYWwNCgkJCQkJCSAge29wZXIgPSBJbnN0cnVjdGlvbi5BTkQsDQoJCQkJCQkgICBzcmMgPSBP
cGVyYW5kLmltbWVkaWF0ZV9jb25zdF93b3JkIChvbmVzIHNoaWZ0KSwNCgkJCQkJCSAgIGRzdCA9
IGNoZWNrLA0KCQkJCQkJICAgc2l6ZSA9IFNpemUuTE9OR30pOjoNCgkJCQkJCSBsKSBvDQoJCQkJ
CSAgICAoZm4gbA0KCQkJCQkgICAgICA9PiBpZiBtYXNrID0gMHd4MA0KCQkJCQkJICAgdGhlbiBs
DQoJCQkJCQkgICBlbHNlIChBc3NlbWJseS5pbnN0cnVjdGlvbl9iaW5hbA0KCQkJCQkJCSB7b3Bl
ciA9IEluc3RydWN0aW9uLlNVQiwNCgkJCQkJCQkgIHNyYyA9IE9wZXJhbmQuaW1tZWRpYXRlX2Nv
bnN0X3dvcmQgbWFzaywNCgkJCQkJCQkgIGRzdCA9IGNoZWNrLA0KCQkJCQkJCSAgc2l6ZSA9IFNp
emUuTE9OR30pOjoNCgkJCQkJCSAgICAgICAgbCkgbw0KCQkJCQkgICAgKGZuIGwNCgkJCQkJICAg
ICAgPT4gKEFzc2VtYmx5Lmluc3RydWN0aW9uX2pjYw0KCQkJCQkJICB7Y29uZGl0aW9uID0gSW5z
dHJ1Y3Rpb24uTlosDQoJCQkJCQkgICB0YXJnZXQgPSBkZWZhdWx0fSk6Og0KCQkJCQkgICAgICAg
ICAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fc3JhbA0KCQkJCQkJICB7b3BlciA9IEluc3RydWN0aW9u
LlNBUiwNCgkJCQkJCSAgIGNvdW50ID0gT3BlcmFuZC5pbW1lZGlhdGVfY29uc3RfaW50IHNoaWZ0
LA0KCQkJCQkJICAgZHN0ID0gaW5kZXgsDQoJCQkJCQkgICBzaXplID0gU2l6ZS5MT05HfSk6Og0K
CQkJCQkJIGwpKSANCgkJCQkJICAgbA0KCQkJCSAgICAgIGVsc2UgbCkgbw0KCQkJICAgICAgIChm
biBsDQoJCQkJID0+IGlmIG1pbksgPSB6ZXJvDQoJCQkJICAgICAgdGhlbiBsDQoJCQkJICAgICAg
ZWxzZSAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fYmluYWwNCgkJCQkJICAgIHtvcGVyID0gSW5zdHJ1
Y3Rpb24uU1VCLA0KCQkJCQkgICAgIHNyYyA9IE9wZXJhbmQuaW1tZWRpYXRlIA0KCQkJCQkgICAg
ICAgICAgIChjb25zdEZuIG1pbkspLA0KCQkJCQkgICAgIGRzdCA9IGluZGV4LA0KCQkJCQkgICAg
IHNpemUgPSBTaXplLkxPTkd9KTo6DQoJCQkJCSAgIGwpIG8NCgkJCSAgICAgICAoZm4gbA0KCQkJ
CSA9PiAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fY21wDQoJCQkJICAgICB7c3JjMSA9IGluZGV4LA0K
CQkJCSAgICAgIHNyYzIgPSBPcGVyYW5kLmltbWVkaWF0ZV9jb25zdF9pbnQgcmFuZ2VLLA0KCQkJ
CSAgICAgIHNpemUgPSBzaXplfSk6Og0KCQkJCSAgICAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25famNj
DQoJCQkJICAgICB7Y29uZGl0aW9uID0gSW5zdHJ1Y3Rpb24uQUUsDQoJCQkJICAgICAgdGFyZ2V0
ID0gZGVmYXVsdH0pOjoNCgkJCQkgICAgKEFzc2VtYmx5Lmluc3RydWN0aW9uX2ptcA0KCQkJCSAg
ICAge3RhcmdldCA9IGFkZHJlc3MsDQoJCQkJICAgICAgYWJzb2x1dGUgPSB0cnVlfSk6Og0KCQkJ
CSAgICBsKSkNCgkJCSAgICAgIChMaXN0LmNvbmNhdA0KCQkJICAgICAgIFtwcm9maWxlX2VuZCwN
CgkJCQlbQXNzZW1ibHkucHNldWRvb3BfZGF0YSAoKSwNCgkJCQkgQXNzZW1ibHkucHNldWRvb3Bf
cDJhbGlnbiAyLA0KCQkJCSBBc3NlbWJseS5sYWJlbCBqdW1wX3RhYmxlX2xhYmVsLA0KCQkJCSBB
c3NlbWJseS5wc2V1ZG9vcF9sb25nIGp1bXBfdGFibGUsDQoJCQkJIEFzc2VtYmx5LnBzZXVkb29w
X3RleHQgKCldXSkNCgkJCSAgICBlbmQNCg0KCQkJZnVuIGRvaXQoY2FzZXMsDQoJCQkJIG9wcyBh
cyB7emVybywNCgkJCQkJIGV2ZW4sDQoJCQkJCSBpbmNGbiwgZGVjRm4sIGhhbGZGbiwNCgkJCQkJ
IGx0Rm4sIGd0Rm4sDQoJCQkJCSBtaW4sIG1pbkZuLA0KCQkJCQkgbWF4LCBtYXhGbiwNCgkJCQkJ
IHJhbmdlfSwNCgkJCQkgY29uc3RGbikNCgkJCSAgPSBsZXQNCgkJCSAgICAgIHZhbCAoY2FzZXMs
IA0KCQkJCSAgIG1pbkssIG1heEssIGxlbmd0aCwNCgkJCQkgICBzaGlmdCwgbWFzaykgDQoJCQkJ
PSByZWR1Y2UoY2FzZXMsIG9wcykNCg0KCQkJICAgICAgdmFsIHJhbmdlSyANCgkJCQk9IFNPTUUg
KHJhbmdlKG1pbkssbWF4SykpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlIE92ZXJmbG93DQoJCQkJICA9PiBOT05FDQoJCQkgICAgaW4NCgkJCSAgICAgIGlmIGxlbmd0
aCA+PSA4IA0KCQkJCSBhbmRhbHNvDQoJCQkJIChpc1NvbWUgcmFuZ2VLDQoJCQkJICBhbmRhbHNv
DQoJCQkJICB2YWxPZiByYW5nZUsgPD0gMiAqIGxlbmd0aCkNCgkJCQl0aGVuIGxldA0KCQkJCSAg
ICAgICB2YWwgcmFuZ2VLID0gdmFsT2YgcmFuZ2VLDQoNCgkJCQkgICAgICAgdmFsIGRlZmF1bHRf
bGl2ZSANCgkJCQkJID0gKCNnZXQgbGl2ZUluZm8pIGRlZmF1bHQNCgkJCQkgICAgICAgdmFsIGRl
ZmF1bHRfbGl2ZVRyYW5zZmVyDQoJCQkJCSA9ICgjZ2V0IGxpdmVUcmFuc2ZlckluZm8pIGRlZmF1
bHQNCgkJCQkgICAgICAgdmFsIGRlZmF1bHRfbGl2ZQ0KCQkJCQkgPSBMaXN0LnJlbW92ZUFsbA0K
CQkJCQkgICAoZGVmYXVsdF9saXZlLA0KCQkJCQkgICAgZm4gdGVtcCANCgkJCQkJICAgICA9PiBM
aXN0LmV4aXN0cw0KCQkJCQkgICAgICAgIChkZWZhdWx0X2xpdmVUcmFuc2ZlciwNCgkJCQkJCSBm
biAodGVtcCcsXykgDQoJCQkJCQkgID0+IE1lbUxvYy5lcSh0ZW1wLCB0ZW1wJykpKQ0KDQoJCQkJ
ICAgICAgIHZhbCBjYXNlcyANCgkJCQkJID0gTGlzdC5pbnNlcnRpb25Tb3J0DQoJCQkJCSAgIChj
YXNlcywgDQoJCQkJCSAgICBmbiAoKGssdGFyZ2V0KSwoaycsdGFyZ2V0JykpIA0KCQkJCQkgICAg
ID0+IGx0Rm4oayxrJykpDQoJCQkJICAgICANCgkJCQkgICAgICAgdmFsIGNhc2VzX2xpdmVfY2Fz
ZXNfbGl2ZVRyYW5zZmVyDQoJCQkJCSA9IExpc3QubWFwDQoJCQkJCSAgIChjYXNlcywNCgkJCQkJ
ICAgIGZuIChrLCB0YXJnZXQpDQoJCQkJCSAgICAgPT4gbGV0DQoJCQkJCQkgIHZhbCB0YXJnZXRf
bGl2ZSANCgkJCQkJCSAgICA9ICgjZ2V0IGxpdmVJbmZvKSB0YXJnZXQNCgkJCQkJCSAgdmFsIHRh
cmdldF9saXZlVHJhbnNmZXINCgkJCQkJCSAgICA9ICgjZ2V0IGxpdmVUcmFuc2ZlckluZm8pIA0K
CQkJCQkJICAgICAgdGFyZ2V0DQoJCQkJCQkgIHZhbCB0YXJnZXRfbGl2ZQ0KCQkJCQkJICAgID0g
TGlzdC5yZW1vdmVBbGwNCgkJCQkJCSAgICAgICh0YXJnZXRfbGl2ZSwNCgkJCQkJCSAgICAgICBm
biB0ZW1wIA0KCQkJCQkJICAgICAgICA9PiBMaXN0LmV4aXN0cw0KCQkJCQkJICAgICAgICAgICAo
dGFyZ2V0X2xpdmVUcmFuc2ZlciwNCgkJCQkJCQkgICAgZm4gKHRlbXAnLF8pIA0KCQkJCQkJCSAg
ICAgPT4gTWVtTG9jLmVxKHRlbXAsIHRlbXAnKSkpDQoJCQkJCQlpbiANCgkJCQkJCSAgKHRhcmdl
dF9saXZlLA0KCQkJCQkJICAgdGFyZ2V0X2xpdmVUcmFuc2ZlcikNCgkJCQkJCWVuZCkNCg0KCQkJ
CSAgICAgICB2YWwgKGxpdmUsbGl2ZVRyYW5zZmVyKQ0KCQkJCQkgPSBMaXN0LmZvbGQNCgkJCQkJ
ICAgKGNhc2VzX2xpdmVfY2FzZXNfbGl2ZVRyYW5zZmVyLA0KCQkJCQkgICAgKGRlZmF1bHRfbGl2
ZSwNCgkJCQkJICAgICBkZWZhdWx0X2xpdmVUcmFuc2ZlciksDQoJCQkJCSAgICBmbiAoKHRhcmdl
dF9saXZlLA0KCQkJCQkJIHRhcmdldF9saXZlVHJhbnNmZXIpLA0KCQkJCQkJKGxpdmUsDQoJCQkJ
CQkgbGl2ZVRyYW5zZmVyKSkNCgkJCQkJICAgICA9PiBsZXQNCgkJCQkJCSAgdmFsIGxpdmUNCgkJ
CQkJCSAgICA9IExpc3QuZm9sZA0KCQkJCQkJICAgICAgKHRhcmdldF9saXZlLA0KCQkJCQkJICAg
ICAgIGxpdmUsDQoJCQkJCQkgICAgICAgZm4gKHRlbXAsDQoJCQkJCQkJICAgbGl2ZSkNCgkJCQkJ
CSAgICAgICAgPT4gaWYgTGlzdC5jb250YWlucw0KCQkJCQkJICAgICAgICAgICAgICAobGl2ZSwN
CgkJCQkJCQkgICAgICAgdGVtcCwNCgkJCQkJCQkgICAgICAgTWVtTG9jLmVxKQ0KCQkJCQkJCSAg
ICAgdGhlbiBsaXZlDQoJCQkJCQkJICAgICBlbHNlIHRlbXA6OmxpdmUpDQoNCgkJCQkJCSAgdmFs
IGxpdmVUcmFuc2Zlcg0KCQkJCQkJICAgID0gTGlzdC5mb2xkDQoJCQkJCQkgICAgICAodGFyZ2V0
X2xpdmVUcmFuc2ZlciwNCgkJCQkJCSAgICAgICBsaXZlVHJhbnNmZXIsDQoJCQkJCQkgICAgICAg
Zm4gKCh0ZW1wLHJlZ2lzdGVyKSwNCgkJCQkJCQkgICBsaXZlVHJhbnNmZXIpDQoJCQkJCQkgICAg
ICAgID0+IGlmIExpc3QuY29udGFpbnMNCgkJCQkJCSAgICAgICAgICAgICAgKGxpdmVUcmFuc2Zl
ciwNCgkJCQkJCQkgICAgICAgKHRlbXAscmVnaXN0ZXIpLA0KCQkJCQkJCSAgICAgICBmbiAoKHQx
LHIxKSwodDIscjIpKQ0KCQkJCQkJCSAgICAgICAgPT4gTWVtTG9jLmVxKHQxLHQyKQ0KCQkJCQkJ
CSAgICAgICAgICAgYW5kYWxzbw0KCQkJCQkJCQkgICBSZWdpc3Rlci5lcShyMSxyMikpDQoJCQkJ
CQkJICAgICB0aGVuIGxpdmVUcmFuc2Zlcg0KCQkJCQkJCSAgICAgZWxzZSAodGVtcCxyZWdpc3Rl
cik6Og0KCQkJCQkJCSAgICAgICAgICBsaXZlVHJhbnNmZXIpDQoJCQkJCQlpbiANCgkJCQkJCSAg
KGxpdmUsbGl2ZVRyYW5zZmVyKQ0KCQkJCQkJZW5kKQ0KDQoNCgkJCQkgICAgIGluIA0KCQkJCSAg
ICAgICBMaXN0LmNvbmNhdA0KCQkJCSAgICAgICBbKEFzc2VtYmx5LmRpcmVjdGl2ZV9jb21taXQN
CgkJCQkJIHttZW1sb2NzID0gbGl2ZX0pOjoNCgkJCQkJKExpc3QubWFwDQoJCQkJCSAobGl2ZVRy
YW5zZmVyLA0KCQkJCQkgIGZuICh0ZW1wLHJlZ2lzdGVyKQ0KCQkJCQkgICA9PiBBc3NlbWJseS5k
aXJlY3RpdmVfY2FjaGUNCgkJCQkJICAgICAge3JlZ2lzdGVyID0gcmVnaXN0ZXIsDQoJCQkJCSAg
ICAgICBtZW1sb2MgPSB0ZW1wLA0KCQkJCQkgICAgICAgcmVzZXJ2ZSA9IHRydWV9KSksDQoJCQkJ
CShkb2l0VGFibGUoY2FzZXMsIA0KCQkJCQkJICAgb3BzLA0KCQkJCQkJICAgbWluSywgbWF4Sywg
cmFuZ2VLLA0KCQkJCQkJICAgc2hpZnQsIG1hc2ssDQoJCQkJCQkgICBjb25zdEZuKSldDQoJCQkJ
ICAgICBlbmQNCgkJCQllbHNlIGVmZmVjdERlZmF1bHQgZ2VmDQoJCQkJICAgICAgICAgICAgICAg
ICAgIHt0cmFuc2ZlciA9IHRyYW5zZmVyLA0KCQkJCQkJICAgIHByb2ZpbGVfZW5kID0gcHJvZmls
ZV9lbmR9DQoJCQkgICAgZW5kDQoJCSAgICAgIGluDQoJCQljYXNlIGNhc2VzDQoJCQkgIG9mIFRy
YW5zZmVyLkNhc2VzLkNoYXIgY2FzZXMNCgkJCSAgID0+IGRvaXQNCgkJCSAgICAgIChjYXNlcywN
CgkJCSAgICAgICB7emVybyA9ICMiXDAwMCIsDQoJCQkJZXZlbiA9IGZuIGMgPT4gKENoYXIub3Jk
IGMpIG1vZCAyID0gMCwNCgkJCQlpbmNGbiA9IENoYXIuc3VjYywNCgkJCQlkZWNGbiA9IENoYXIu
cHJlZCwNCgkJCQloYWxmRm4gPSBmbiBjID0+IENoYXIuY2hyKChDaGFyLm9yZCBjKSBkaXYgMiks
DQoJCQkJbHRGbiA9IENoYXIuPCwNCgkJCQlndEZuID0gQ2hhci4+LA0KCQkJCW1pbiA9IENoYXIu
bWluQ2hhciwNCgkJCQltaW5GbiA9IENoYXIubWluLA0KCQkJCW1heCA9IENoYXIubWF4Q2hhciwN
CgkJCQltYXhGbiA9IENoYXIubWF4LA0KCQkJCXJhbmdlID0gZm4gKG1pbixtYXgpID0+ICgoQ2hh
ci5vcmQgbWF4KSAtIA0KCQkJCQkJCSAoQ2hhci5vcmQgbWluKSkgKyAxfSwNCgkJCSAgICAgICBJ
bW1lZGlhdGUuY29uc3RfY2hhcikNCgkJCSAgIHwgVHJhbnNmZXIuQ2FzZXMuSW50IGNhc2VzDQoJ
CQkgICA9PiBkb2l0DQoJCQkgICAgICAoY2FzZXMsDQoJCQkgICAgICAge3plcm8gPSAwLA0KCQkJ
CWV2ZW4gPSBmbiBpID0+IGkgbW9kIDIgPSAwLA0KCQkJCWluY0ZuID0gZm4gaSA9PiBpICsgMSwN
CgkJCQlkZWNGbiA9IGZuIGkgPT4gaSAtIDEsDQoJCQkJaGFsZkZuID0gZm4gaSA9PiBpIGRpdiAy
LA0KCQkJCWx0Rm4gPSBJbnQuPCwNCgkJCQlndEZuID0gSW50Lj4sDQoJCQkJbWluID0gSW50Lm1p
bkludCwNCgkJCQltaW5GbiA9IEludC5taW4sDQoJCQkJbWF4ID0gSW50Lm1heEludCwNCgkJCQlt
YXhGbiA9IEludC5tYXgsDQoJCQkJcmFuZ2UgPSBmbiAobWluLG1heCkgPT4gbWF4IC0gbWluICsg
MX0sDQoJCQkgICAgICAgSW1tZWRpYXRlLmNvbnN0X2ludCkNCgkJCSAgIHwgVHJhbnNmZXIuQ2Fz
ZXMuV29yZCBjYXNlcw0KCQkJICAgPT4gZG9pdA0KCQkJICAgICAgKGNhc2VzLA0KCQkJICAgICAg
IHt6ZXJvID0gMHd4MCwNCgkJCQlldmVuID0gZm4gdyA9PiBXb3JkLm1vZCh3LDB3eDIpID0gMHd4
MCwNCgkJCQlpbmNGbiA9IGZuIHggPT4gV29yZC4rKHgsMHd4MSksDQoJCQkJZGVjRm4gPSBmbiB4
ID0+IFdvcmQuLSh4LDB3eDEpLA0KCQkJCWhhbGZGbiA9IGZuIHggPT4gV29yZC5kaXYoeCwwd3gy
KSwNCgkJCQlsdEZuID0gV29yZC48LA0KCQkJCWd0Rm4gPSBXb3JkLj4sDQoJCQkJbWluID0gMHd4
MCwNCgkJCQltaW5GbiA9IFdvcmQubWluLA0KCQkJCW1heCA9IDB3eEZGRkZGRkZGLA0KCQkJCW1h
eEZuID0gV29yZC5tYXgsDQoJCQkJcmFuZ2UgPSBmbiAobWluLG1heCkgPT4gKChXb3JkLnRvSW50
IG1heCkgLQ0KCQkJCQkJCSAoV29yZC50b0ludCBtaW4pICsgDQoJCQkJCQkJIDEpfSwNCgkJCSAg
ICAgICBJbW1lZGlhdGUuY29uc3Rfd29yZCkNCgkJICAgICAgZW5kDQoJCSAgIHwgXyA9PiBlZmZl
Y3REZWZhdWx0IGdlZiANCgkJICAgICAgICAgICAgICAgICAgICAgICAge3RyYW5zZmVyID0gdHJh
bnNmZXIsDQoJCQkJCSBwcm9maWxlX2VuZCA9IHByb2ZpbGVfZW5kfQ0KDQoJICAgIGZ1biBmYWxs
Tm9uZSAoZ2VmIGFzIEdFRiB7Z2VuZXJhdGUsZWZmZWN0LGZhbGx9KQ0KCSAgICAgICAgICAgICAg
ICAge3Byb2ZpbGVfZW5kLCBsYWJlbCwgbGl2ZX0gOiBBc3NlbWJseS50IGxpc3QNCgkgICAgICA9
IGxldA0KCQkgIHZhbCBsaXZlVHJhbnNmZXIgPSAoI2dldCBsaXZlVHJhbnNmZXJJbmZvKSBsYWJl
bA0KDQoJCSAgdmFsIGxpdmUgDQoJCSAgICA9IExpc3QucmVtb3ZlQWxsDQoJCSAgICAgIChsaXZl
LA0KCQkgICAgICAgZm4gdGVtcCANCgkJICAgICAgICA9PiBMaXN0LmV4aXN0cw0KCQkgICAgICAg
ICAgIChsaXZlVHJhbnNmZXIsDQoJCQkgICAgZm4gKHRlbXAnLF8pIA0KCQkJICAgICA9PiBNZW1M
b2MuZXEodGVtcCwgdGVtcCcpKSkNCg0KCQkgIGZ1biBkZWZhdWx0ICgpDQoJCSAgICA9IExpc3Qu
Y29uY2F0DQoJCSAgICAgIFsoQXNzZW1ibHkuZGlyZWN0aXZlX2NvbW1pdA0KCQkJe21lbWxvY3Mg
PSBsaXZlfSk6Og0KCQkgICAgICAgKExpc3QubWFwDQoJCQkobGl2ZVRyYW5zZmVyLA0KCQkJIGZu
ICh0ZW1wLHJlZ2lzdGVyKQ0KCQkJICA9PiBBc3NlbWJseS5kaXJlY3RpdmVfY2FjaGUNCgkJCSAg
ICAge3JlZ2lzdGVyID0gcmVnaXN0ZXIsDQoJCQkgICAgICBtZW1sb2MgPSB0ZW1wLA0KCQkJICAg
ICAgcmVzZXJ2ZSA9IGZhbHNlfSkpLA0KCQkgICAgICAgKEFzc2VtYmx5Lmluc3RydWN0aW9uX2pt
cA0KCQkJe3RhcmdldCA9IE9wZXJhbmQubGFiZWwgbGFiZWwsDQoJCQkgYWJzb2x1dGUgPSBmYWxz
ZX0pOjoNCgkJICAgICAgIHByb2ZpbGVfZW5kXQ0KCQlpbg0KCQkgIGNhc2UgZ2V0IGxhYmVsDQoJ
CSAgICBvZiBOT05FDQoJCSAgICAgPT4gZGVmYXVsdCAoKQ0KCQkgICAgIHwgU09NRSAoYmxvY2sg
YXMgQmxvY2suVCB7bGFiZWwsLi4ufSkNCgkJICAgICA9PiAoZW5xdWUgbGFiZWw7DQoJCQkgZGVm
YXVsdCAoKSkNCgkJZW5kDQoNCgkgICAgZnVuIGZhbGxEZWZhdWx0IChnZWYgYXMgR0VGIHtnZW5l
cmF0ZSxlZmZlY3QsZmFsbH0pDQoJICAgICAgICAgICAgICAgICAgICB7cHJvZmlsZV9lbmQsIGxh
YmVsLCBsaXZlfSA6IEFzc2VtYmx5LnQgbGlzdA0KCSAgICAgID0gbGV0DQoJCSAgdmFsIGxpdmVU
cmFuc2ZlciA9ICgjZ2V0IGxpdmVUcmFuc2ZlckluZm8pIGxhYmVsDQoNCgkJICB2YWwgbGl2ZSAN
CgkJICAgID0gTGlzdC5yZW1vdmVBbGwNCgkJICAgICAgKGxpdmUsDQoJCSAgICAgICBmbiB0ZW1w
IA0KCQkgICAgICAgID0+IExpc3QuZXhpc3RzDQoJCSAgICAgICAgICAgKGxpdmVUcmFuc2ZlciwN
CgkJCSAgICBmbiAodGVtcCcsXykgDQoJCQkgICAgID0+IE1lbUxvYy5lcSh0ZW1wLCB0ZW1wJykp
KQ0KDQoJCSAgZnVuIGRlZmF1bHQgKCkNCgkJICAgID0gTGlzdC5jb25jYXQNCgkJICAgICAgWyhB
c3NlbWJseS5kaXJlY3RpdmVfY29tbWl0DQoJCQl7bWVtbG9jcyA9IGxpdmV9KTo6DQoJCSAgICAg
ICAoTGlzdC5tYXANCgkJCShsaXZlVHJhbnNmZXIsDQoJCQkgZm4gKHRlbXAscmVnaXN0ZXIpDQoJ
CQkgID0+IEFzc2VtYmx5LmRpcmVjdGl2ZV9jYWNoZQ0KCQkJICAgICB7cmVnaXN0ZXIgPSByZWdp
c3RlciwNCgkJCSAgICAgIG1lbWxvYyA9IHRlbXAsDQoJCQkgICAgICByZXNlcnZlID0gZmFsc2V9
KSksDQoJCSAgICAgICAoQXNzZW1ibHkuaW5zdHJ1Y3Rpb25fam1wDQoJCQl7dGFyZ2V0ID0gT3Bl
cmFuZC5sYWJlbCBsYWJlbCwNCgkJCSBhYnNvbHV0ZSA9IGZhbHNlfSk6Og0KCQkgICAgICAgcHJv
ZmlsZV9lbmRdDQoJCWluDQoJCSAgY2FzZSBnZXQgbGFiZWwNCgkJICAgIG9mIE5PTkUgDQoJCSAg
ICAgPT4gZGVmYXVsdCAoKQ0KCQkgICAgIHwgU09NRSAoYmxvY2sgYXMgQmxvY2suVCB7bGFiZWws
Li4ufSkNCgkJICAgICA9PiAoY2FzZSBibG9ja19wcmUgbGFiZWwNCgkJCSAgIG9mIFNPTUUgXyAN
CgkJCSAgICA9PiAoZW5xdWUgbGFiZWw7DQoJCQkJZGVmYXVsdCAoKSkNCgkJCSAgICB8IE5PTkUg
DQoJCQkgICAgPT4gKGNhc2UgISgoI2dldCBqdW1wSW5mbykgbGFiZWwpDQoJCQkJICBvZiBNYXli
ZSAxIA0KCQkJCSAgID0+IExpc3QuY29uY2F0DQoJCQkJICAgICAgW2Jsb2NrX2ZhbGwsDQoJCQkJ
ICAgICAgIHByb2ZpbGVfZW5kLA0KCQkJCSAgICAgICBnZW5lcmF0ZSBnZWYNCgkJCQkgICAgICAg
ICAgICAgICAge2xhYmVsID0gbGFiZWwsDQoJCQkJCSAJIGJlZ2luID0gZmFsc2UsDQoJCQkJCQkg
YWxpZ24gPSBmYWxzZX1dDQoJCQkJICAgfCBfID0+IExpc3QuY29uY2F0DQoJCQkJICAgICAgICAg
IFsoQXNzZW1ibHkuZGlyZWN0aXZlX2NvbW1pdCANCgkJCQkJICAgIHttZW1sb2NzID0gbGl2ZX0p
OjoNCgkJCQkJICAgKExpc3QubWFwDQoJCQkJCSAgICAobGl2ZVRyYW5zZmVyLA0KCQkJCQkgICAg
IGZuICh0ZW1wLHJlZ2lzdGVyKQ0KCQkJCQkgICAgICA9PiBBc3NlbWJseS5kaXJlY3RpdmVfY2Fj
aGUNCgkJCQkJICAgICAgICAge3JlZ2lzdGVyID0gcmVnaXN0ZXIsDQoJCQkJCQkgIG1lbWxvYyA9
IHRlbXAsDQoJCQkJCQkgIHJlc2VydmUgPSBmYWxzZX0pKSwNCgkJCQkJICAgKEFzc2VtYmx5LmRp
cmVjdGl2ZV9yZXNldCAoKSk6Og0KCQkJCQkgICAoTGlzdC5jb25jYXQNCgkJCQkJICAgIFtwcm9m
aWxlX2VuZCwNCgkJCQkJICAgICAoZ2VuZXJhdGUgZ2VmDQoJCQkJCSAgICAgICAgICAgICAgIHts
YWJlbCA9IGxhYmVsLA0KCQkJCQkJCWJlZ2luID0gdHJ1ZSwNCgkJCQkJCQlhbGlnbiA9IGZhbHNl
fSldKV0pKQ0KCQllbmQNCg0KCSAgICBmdW4gbWFrZSB7Z2VuZXJhdGUsIGVmZmVjdCwgZmFsbH0N
CgkgICAgICA9IGdlbmVyYXRlIChHRUYge2dlbmVyYXRlID0gZ2VuZXJhdGUsDQoJCQkgICAgICAg
ZWZmZWN0ID0gZWZmZWN0LA0KCQkJICAgICAgIGZhbGwgPSBmYWxsfSkNCgkJCSANCgkgICAgdmFs
IGdlbmVyYXRlDQoJICAgICAgPSBjYXNlIG9wdGltaXplIA0KCQkgIG9mIDAgPT4gbWFrZSB7Z2Vu
ZXJhdGUgPSBnZW5lcmF0ZUFsbCwNCgkJCQllZmZlY3QgPSBlZmZlY3REZWZhdWx0LA0KCQkJCWZh
bGwgPSBmYWxsTm9uZX0NCgkJICAgfCBfID0+IG1ha2Uge2dlbmVyYXRlID0gZ2VuZXJhdGVBbGws
DQoJCQkJZWZmZWN0ID0gZWZmZWN0SnVtcFRhYmxlLA0KCQkJCWZhbGwgPSBmYWxsRGVmYXVsdH0N
Cg0KCSAgICB2YWwgXyA9IExpc3QuZm9yZWFjaChleHBvcnRzLCBmbiBsYWJlbCA9PiBlbnF1ZSBs
YWJlbCkNCgkgICAgZnVuIGRvaXQgKCkgOiBBc3NlbWJseS50IGxpc3QgbGlzdA0KCSAgICAgID0g
KGNhc2UgZGVxdWUgKCkNCgkJICAgb2YgTk9ORSA9PiBbXQ0KCQkgICAgfCBTT01FIGxhYmVsDQoJ
CSAgICA9PiAoY2FzZSBnZW5lcmF0ZSB7bGFiZWwgPSBsYWJlbCwNCgkJCQkgICAgICAgYmVnaW4g
PSB0cnVlLA0KCQkJCSAgICAgICBhbGlnbiA9IHRydWV9DQoJCQkgIG9mIFtdID0+IGRvaXQgKCkN
CgkJCSAgIHwgYmxvY2sgPT4gYmxvY2s6Oihkb2l0ICgpKSkpDQoJICAgIHZhbCBhc3NlbWJseSA9
IGRvaXQgKCkNCiAgICAgICAJICBpbg0KCSAgICBhc3NlbWJseQ0KCSAgZW5kDQoNCiAgICAgIHZh
bCAoZ2VuZXJhdGVUcmFuc2ZlcnMsIGdlbmVyYXRlVHJhbnNmZXJzX21zZykNCgk9IHRyYWNlcg0K
ICAgICAgICAgICJnZW5lcmF0ZVRyYW5zZmVycyINCgkgIGdlbmVyYXRlVHJhbnNmZXJzDQogICAg
ZW5kDQoNCiAgZnVuIHNpbXBsaWZ5IHtjaHVuayBhcyBDaHVuay5UIHtleHBvcnRzLCBibG9ja3N9
OiBDaHVuay50LA0KCQlvcHRpbWl6ZSA6IGludCwNCgkJYmxvY2tfcHJlIDogTGFiZWwudCAtPiBB
c3NlbWJseS50IGxpc3Qgb3B0aW9uLA0KCQlibG9ja19iZWdpbiA6IEFzc2VtYmx5LnQgbGlzdCwN
CgkJYmxvY2tfZW5kIDogQXNzZW1ibHkudCBsaXN0LA0KCQlibG9ja19mYWxsIDogQXNzZW1ibHku
dCBsaXN0LA0KCQl0cmFuc2ZlclJlZ3MgOiBSZWdpc3Rlci50IGxpc3QsDQoJCWxpdmVJbmZvIDog
e2dldCA6IExhYmVsLnQgLT4gTWVtTG9jLnQgbGlzdCwNCgkJCSAgICBzZXQgOiBMYWJlbC50ICog
TWVtTG9jLnQgbGlzdCAtPiB1bml0fX0gOg0KICAgICAgICAgICAgICAgQXNzZW1ibHkudCBsaXN0
IGxpc3QNCiAgICA9IGxldA0KCXZhbCBsYWJlbHMNCgkgID0gTGlzdC5tYXAoYmxvY2tzLCBmbiBC
bG9jay5UIHtsYWJlbCwuLi59ID0+IGxhYmVsKQ0KDQoJZnVuIGNoYW5nZWRfbXNnKGNoYW5nZWQs
bXNnKQ0KKCoNCgkgID0gQ29udHJvbC5tZXNzYWdlU3RyICgiY29tcGxldGVkICIgXiBtc2cpDQoq
KQ0KKCoNCgkgID0gaWYgY2hhbmdlZA0KCSAgICAgIHRoZW4gQ29udHJvbC5tZXNzYWdlU3RyICht
c2cgXiAiIGNoYW5nZWQiKQ0KCSAgICAgIGVsc2UgKCkNCiopDQoJICA9ICgpDQoNCgkoKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKQ0KCSgqIHZlcmlmeUxpdmVJbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICopDQoJKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKikNCgl2YWwge2NoYW5nZWR9
ID0gTGl2ZW5lc3MudmVyaWZ5TGl2ZUluZm8ge2Jsb2NrcyA9IGJsb2NrcywNCgkJCQkJCSBsaXZl
SW5mbyA9IGxpdmVJbmZvfQ0KCXZhbCBfID0gY2hhbmdlZF9tc2coY2hhbmdlZCwgInZlcmlmeUxp
dmVJbmZvIikNCgkgIA0KCSgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiopDQoJKCogY29tcHV0ZUp1bXBJbmZvICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKikNCgkoKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKQ0KCXZhbCBqdW1wSW5mbw0KCSAgPSBKdW1wSW5mby5jb21wdXRlSnVtcEluZm8ge2Js
b2NrcyA9IGJsb2NrcywNCgkJCQkgICAgICBleHBvcnRzID0gZXhwb3J0cywNCgkJCQkgICAgICBi
bG9ja19wcmUgPSBibG9ja19wcmV9DQoNCg0KCSgqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopDQoJKCogb3B0aW1pemVy
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KikNCgkoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKQ0KCWZ1biBvcHRpbWl6ZXIgYmxvY2tzDQoJICA9IGxldA0KCSAg
ICAgICB2YWwgYmxvY2tzID0gYmxvY2tzDQoJICAgICAgIHZhbCBjaGFuZ2VkID0gZmFsc2UNCg0K
CSAgICAgICAoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiopDQoJICAgICAgICgqIGVsaW1Hb3RvICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKikNCgkgICAgICAgKCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKQ0KCSAgICAg
ICB2YWwge2Jsb2NrcyA9IGJsb2NrcycsDQoJCSAgICBjaGFuZ2VkID0gY2hhbmdlZCd9DQoJCSA9
IEVsaW1Hb3RvLmVsaW1Hb3RvIHtibG9ja3MgPSBibG9ja3MsDQoJCQkJICAgICAganVtcEluZm8g
PSBqdW1wSW5mb30NCg0KCSAgICAgICB2YWwgXw0KCQkgPSBBc3NlcnQuYXNzZXJ0DQoJCSAgICgi
dmVyaWZ5SnVtcEluZm8iLA0KCQkgICAgZm4gKCkgPT4gSnVtcEluZm8udmVyaWZ5SnVtcEluZm8g
e2Jsb2NrcyA9IGJsb2NrcycsDQoJCQkJCQkgICAgICBleHBvcnRzID0gZXhwb3J0cywNCgkJCQkJ
CSAgICAgIGJsb2NrX3ByZSA9IGJsb2NrX3ByZSwNCgkJCQkJCSAgICAgIGp1bXBJbmZvID0ganVt
cEluZm99KQ0KDQoJICAgICAgIHZhbCBibG9ja3MgPSBibG9ja3MnDQoJICAgICAgIHZhbCBfIA0K
CQkgPSBjaGFuZ2VkX21zZw0KCQkgICAoY2hhbmdlZCcsIA0KCQkgICAgImVsaW1Hb3RvIikNCgkg
ICAgICAgdmFsIGNoYW5nZWQgPSBjaGFuZ2VkIG9yZWxzZSBjaGFuZ2VkJwkJIA0KDQoJICAgICAg
ICgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKikNCgkgICAgICAgKCogcGVlcGhvbGVCbG9jay9tb3ZlSG9pc3QvcGVlcGhvbGVMaXZl
bmVzc0Jsb2NrL2NvcHlQcm9wYWdhdGUqKQ0KCSAgICAgICAoKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopDQoJICAgICAgIHZhbCB7
YmxvY2tzID0gYmxvY2tzJywNCgkJICAgIGNoYW5nZWQgPSBjaGFuZ2VkJ30NCgkJID0gTGlzdC5m
b2xkDQoJCSAgIChibG9ja3MsDQoJCSAgICB7YmxvY2tzID0gW10sIGNoYW5nZWQgPSBmYWxzZX0s
DQoJCSAgICBmbiAoYmxvY2ssIHtibG9ja3MsIGNoYW5nZWR9KQ0KCQkgICAgID0+IGxldA0KCQkJ
ICB2YWwgYmxvY2sgPSBibG9jaw0KCQkJICB2YWwgY2hhbmdlZCA9IGNoYW5nZWQNCg0KCQkJICAo
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKQ0KCQkJ
ICAoKiBwZWVwaG9sZUJsb2NrX3ByZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKQ0K
CQkJICAoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KQ0KCQkJICB2YWwge2Jsb2NrID0gYmxvY2snLA0KCQkJICAgICAgIGNoYW5nZWQgPSBjaGFuZ2Vk
J30NCgkJCSAgICA9IFBlZXBob2xlQmxvY2sucGVlcGhvbGVCbG9ja19wcmUNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrDQoNCgkJCSAgdmFsIGJsb2NrID0gYmxvY2snDQoJCQkg
IHZhbCBfIA0KCQkJICAgID0gY2hhbmdlZF9tc2cNCgkJCSAgICAgIChjaGFuZ2VkJywgDQoJCQkg
ICAgICAgInBlZXBob2xlQmxvY2tfcHJlIikNCgkJCSAgdmFsIGNoYW5nZWQgPSBjaGFuZ2VkIG9y
ZWxzZSBjaGFuZ2VkJw0KDQoJCQkgICgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiopDQoJCQkgICgqIHRvTGl2ZW5lc3NCbG9jayAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICopDQoJCQkgICgqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiopDQoJCQkgIHZhbCBibG9jaycNCgkJCSAgICA9IExpdmVu
ZXNzQmxvY2sudG9MaXZlbmVzc0Jsb2NrIA0KCQkJICAgICAge2Jsb2NrID0gYmxvY2ssDQoJCQkg
ICAgICAgbGl2ZUluZm8gPSBsaXZlSW5mb30NCgkJCSAgdmFsIGNoYW5nZWQnID0gZmFsc2UNCg0K
CQkJICB2YWwgYmxvY2sgPSBibG9jaycNCgkJCSAgdmFsIGJsb2NrX3RvTGl2ZW5lc3NCbG9jayA9
IGJsb2NrDQoJCQkgIHZhbCBfIA0KCQkJICAgID0gY2hhbmdlZF9tc2cNCgkJCSAgICAgIChjaGFu
Z2VkJywgDQoJCQkgICAgICAgInRvTGl2ZW5lc3NCbG9jayIpDQoJCQkgIHZhbCBjaGFuZ2VkID0g
Y2hhbmdlZCBvcmVsc2UgY2hhbmdlZCcNCg0KCQkJICAoKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKQ0KCQkJICAoKiBtb3ZlSG9pc3QgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKQ0KCQkJICAoKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKQ0KCQkJICB2YWwge2Jsb2NrID0gYmxv
Y2snLCANCgkJCSAgICAgICBjaGFuZ2VkID0gY2hhbmdlZCd9DQoJCQkgICAgPSBpZiAhQ29udHJv
bC5OYXRpdmUubW92ZUhvaXN0DQoJCQkJdGhlbiBNb3ZlSG9pc3RMaXZlbmVzc0Jsb2NrLm1vdmVI
b2lzdA0KCQkJCSAgICAge2Jsb2NrID0gYmxvY2t9DQoJCQkJZWxzZSB7YmxvY2sgPSBibG9jaywN
CgkJCQkgICAgICBjaGFuZ2VkID0gZmFsc2V9DQoNCgkJCSAgdmFsIF8NCgkJCSAgICA9IEFzc2Vy
dC5hc3NlcnQNCgkJCSAgICAgICgidmVyaWZ5TGl2ZW5lc3NCbG9jazogbW92ZUhvaXN0IiwNCgkJ
CSAgICAgICBmbiAoKSA9PiBMaXZlbmVzc0Jsb2NrLnZlcmlmeUxpdmVuZXNzQmxvY2sNCgkJCSAg
ICAgICAgICAgICAgICB7YmxvY2sgPSBibG9jaycsDQoJCQkJCSBsaXZlSW5mbyA9IGxpdmVJbmZv
fSkNCg0KCQkJICB2YWwgYmxvY2sgPSBibG9jaycNCgkJCSAgdmFsIGJsb2NrX21vdmVIb2lzdCA9
IGJsb2NrDQoJCQkgIHZhbCBfIA0KCQkJICAgID0gY2hhbmdlZF9tc2cNCgkJCSAgICAgIChjaGFu
Z2VkJywgDQoJCQkgICAgICAgIm1vdmVIb2lzdExpdmVuZXNzQmxvY2siKQ0KCQkJICB2YWwgY2hh
bmdlZCA9IGNoYW5nZWQgb3JlbHNlIGNoYW5nZWQnDQoNCgkJCSAgKCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKikNCgkJCSAgKCogcGVlcGhvbGVMaXZl
bmVzc0Jsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgKikNCgkJCSAgKCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKikNCgkJCSAgdmFsIHtibG9j
ayA9IGJsb2NrJywNCgkJCSAgICAgICBjaGFuZ2VkID0gY2hhbmdlZCd9DQoJCQkgICAgPSBQZWVw
aG9sZUxpdmVuZXNzQmxvY2sucGVlcGhvbGVMaXZlbmVzc0Jsb2NrDQoJCQkgICAgICBibG9jaw0K
DQoJCQkgIHZhbCBfDQoJCQkgICAgPSBBc3NlcnQuYXNzZXJ0DQoJCQkgICAgICAoInZlcmlmeUxp
dmVuZXNzQmxvY2s6IHBlZXBob2xlTGl2ZW5lc3NCbG9jayIsDQoJCQkgICAgICAgZm4gKCkgPT4g
TGl2ZW5lc3NCbG9jay52ZXJpZnlMaXZlbmVzc0Jsb2NrDQoJCQkgICAgICAgICAgICAgICAge2Js
b2NrID0gYmxvY2snLA0KCQkJCQkgbGl2ZUluZm8gPSBsaXZlSW5mb30pDQoNCgkJCSAgdmFsIGJs
b2NrID0gYmxvY2snDQoJCQkgIHZhbCBibG9ja19wZWVwaG9sZUxpdmVuZXNzQmxvY2sgPSBibG9j
aw0KCQkJICB2YWwgXyANCgkJCSAgICA9IGNoYW5nZWRfbXNnDQoJCQkgICAgICAoY2hhbmdlZCcs
IA0KCQkJICAgICAgICJwZWVwaG9sZUxpdmVuZXNzQmxvY2siKQ0KCQkJICB2YWwgY2hhbmdlZCA9
IGNoYW5nZWQgb3JlbHNlIGNoYW5nZWQnDQoNCgkJCSAgKCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKikNCgkJCSAgKCogY29weVByb3BhZ2F0ZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKikNCgkJCSAgKCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKikNCgkJCSAgdmFsIHtibG9jayA9IGJs
b2NrJywgDQoJCQkgICAgICAgY2hhbmdlZCA9IGNoYW5nZWQnfQ0KCQkJICAgID0gaWYgIUNvbnRy
b2wuTmF0aXZlLmNvcHlQcm9wDQoJCQkJdGhlbiBDb3B5UHJvcGFnYXRlTGl2ZW5lc3NCbG9jay5j
b3B5UHJvcGFnYXRlDQoJCQkJICAgICB7YmxvY2sgPSBibG9jaywNCgkJCQkgICAgICBsaXZlSW5m
byA9IGxpdmVJbmZvfQ0KCQkJCWVsc2Uge2Jsb2NrID0gYmxvY2ssDQoJCQkJICAgICAgY2hhbmdl
ZCA9IGZhbHNlfQ0KDQoJCQkgIHZhbCBfDQoJCQkgICAgPSBBc3NlcnQuYXNzZXJ0DQoJCQkgICAg
ICAoInZlcmlmeUxpdmVuZXNzQmxvY2s6IGNvcHlQcm9wYWdhdGUiLA0KCQkJICAgICAgIGZuICgp
ID0+IExpdmVuZXNzQmxvY2sudmVyaWZ5TGl2ZW5lc3NCbG9jaw0KCQkJICAgICAgICAgICAgICAg
IHtibG9jayA9IGJsb2NrJywNCgkJCQkJIGxpdmVJbmZvID0gbGl2ZUluZm99KQ0KDQoJCQkgIHZh
bCBibG9jayA9IGJsb2NrJw0KCQkJICB2YWwgYmxvY2tfY29weVByb3BhZ2F0ZSA9IGJsb2NrDQoJ
CQkgIHZhbCBfIA0KCQkJICAgID0gY2hhbmdlZF9tc2cNCgkJCSAgICAgIChjaGFuZ2VkJywgDQoJ
CQkgICAgICAgImNvcHlQcm9wYWdhdGUiKQ0KCQkJICB2YWwgY2hhbmdlZCA9IGNoYW5nZWQgb3Jl
bHNlIGNoYW5nZWQnDQoNCgkJCSAgKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKikNCgkJCSAgKCogcGVlcGhvbGVMaXZlbmVzc0Jsb2NrX21pbm9yICAg
ICAgICAgICAgICAgICAgICAgKikNCgkJCSAgKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKikNCgkJCSAgdmFsIHtibG9jayA9IGJsb2NrJywNCgkJCSAg
ICAgICBjaGFuZ2VkID0gY2hhbmdlZCd9DQoJCQkgICAgPSBQZWVwaG9sZUxpdmVuZXNzQmxvY2su
cGVlcGhvbGVMaXZlbmVzc0Jsb2NrX21pbm9yDQoJCQkgICAgICBibG9jaw0KDQoJCQkgIHZhbCBf
DQoJCQkgICAgPSBBc3NlcnQuYXNzZXJ0DQoJCQkgICAgICAoInZlcmlmeUxpdmVuZXNzQmxvY2s6
IHBlZXBob2xlTGl2ZW5lc3NCbG9ja19taW5vciIsDQoJCQkgICAgICAgZm4gKCkgPT4gTGl2ZW5l
c3NCbG9jay52ZXJpZnlMaXZlbmVzc0Jsb2NrDQoJCQkgICAgICAgICAgICAgICAge2Jsb2NrID0g
YmxvY2snLA0KCQkJCQkgbGl2ZUluZm8gPSBsaXZlSW5mb30pDQoNCgkJCSAgdmFsIGJsb2NrID0g
YmxvY2snDQoJCQkgIHZhbCBibG9ja19wZWVwaG9sZUxpdmVuZXNzQmxvY2tfbWlub3IgPSBibG9j
aw0KCQkJICB2YWwgXyANCgkJCSAgICA9IGNoYW5nZWRfbXNnDQoJCQkgICAgICAoY2hhbmdlZCcs
IA0KCQkJICAgICAgICJwZWVwaG9sZUxpdmVuZXNzQmxvY2tfbWlub3IiKQ0KCQkJICB2YWwgY2hh
bmdlZCA9IGNoYW5nZWQgb3JlbHNlIGNoYW5nZWQnDQoNCgkJCSAgKCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKikNCgkJCSAgKCogdG9CbG9jayAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKikNCgkJCSAgKCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKikNCgkJCSAgdmFsIGJsb2Nr
Jw0KCQkJICAgID0gTGl2ZW5lc3NCbG9jay50b0Jsb2NrIGJsb2NrDQoJCQkgIHZhbCBjaGFuZ2Vk
JyA9IGZhbHNlDQoNCgkJCSAgdmFsIGJsb2NrID0gYmxvY2snDQoJCQkgIHZhbCBibG9ja190b0Js
b2NrID0gYmxvY2sNCgkJCSAgdmFsIF8gPSBjaGFuZ2VkX21zZyhjaGFuZ2VkJywgInRvQmxvY2si
KQ0KCQkJICB2YWwgY2hhbmdlZCA9IGNoYW5nZWQgb3JlbHNlIGNoYW5nZWQnDQoNCgkJCSAgKCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKikNCgkJCSAg
KCogcGVlcGhvbGVCbG9ja19wb3N0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKikNCgkJ
CSAgKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKikN
CgkJCSAgdmFsIHtibG9jayA9IGJsb2NrJywNCgkJCSAgICAgICBjaGFuZ2VkID0gY2hhbmdlZCd9
DQoJCQkgICAgPSBQZWVwaG9sZUJsb2NrLnBlZXBob2xlQmxvY2tfcG9zdA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmxvY2sNCg0KCQkJICB2YWwgYmxvY2sgPSBibG9jaycNCgkJCSAg
dmFsIGJsb2NrX3BlZXBob2xlQmxvY2tfcG9zdCA9IGJsb2NrDQoJCQkgIHZhbCBfID0gY2hhbmdl
ZF9tc2coY2hhbmdlZCcsICJwZWVwaG9sZUJsb2NrX3Bvc3QiKQ0KCQkJICB2YWwgY2hhbmdlZCA9
IGNoYW5nZWQgb3JlbHNlIGNoYW5nZWQnDQoJCQlpbg0KCQkJICB7YmxvY2tzID0gYmxvY2s6OmJs
b2NrcywNCgkJCSAgIGNoYW5nZWQgPSBjaGFuZ2VkfQ0KCQkJZW5kKQ0KDQoJICAgICAgIHZhbCBi
bG9ja3MgPSBibG9ja3MnDQoJICAgICAgIHZhbCBfID0gY2hhbmdlZF9tc2coY2hhbmdlZCcsICJw
ZWVwaG9sZUJsb2NrL21vdmVIb2lzdC9wZWVwaG9sZUxpdmVuZXNzQmxvY2svY29weVByb3BhZ2F0
ZSIpDQoJICAgICAgIHZhbCBjaGFuZ2VkID0gY2hhbmdlZCBvcmVsc2UgY2hhbmdlZCcNCg0KCSAg
ICAgICAoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiopDQoJICAgICAgICgqIHZlcmlmeUxpdmVJbmZvICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKikNCgkgICAgICAgKCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKQ0KCSAgICAgICB2
YWwge2NoYW5nZWQgPSBjaGFuZ2VkJ30gDQoJCSA9IExpdmVuZXNzLnZlcmlmeUxpdmVJbmZvIHti
bG9ja3MgPSBibG9ja3MsDQoJCQkJCSAgICBsaXZlSW5mbyA9IGxpdmVJbmZvfQ0KCSAgICAgICB2
YWwgXyA9IGNoYW5nZWRfbXNnKGNoYW5nZWQsICJ2ZXJpZnlMaXZlSW5mbyIpDQoJICAgICAgIHZh
bCBjaGFuZ2VkID0gY2hhbmdlZCBvcmVsc2UgY2hhbmdlZCcNCgkgICAgaW4NCgkgICAgICB7Ymxv
Y2tzID0gYmxvY2tzLA0KCSAgICAgICBjaGFuZ2VkID0gY2hhbmdlZH0NCgkgICAgZW5kDQoNCg0K
CSgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiopDQoJKCogb3B0aW1pemVyX2xvb3AgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKikNCgkoKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKQ0KCWZ1biBv
cHRpbWl6ZXJfbG9vcCBibG9ja3MNCgkgID0gbGV0DQoJICAgICAgZnVuIGxvb3AgKGJsb2Nrcyxj
aGFuZ2VkKQ0KCQk9IGxldA0KCQkgICAgdmFsIHtibG9ja3MsDQoJCQkgY2hhbmdlZCA9IGNoYW5n
ZWQnfQ0KCQkgICAgICA9IG9wdGltaXplciBibG9ja3MNCgkJICBpbg0KCQkgICAgaWYgY2hhbmdl
ZCcNCgkJICAgICAgdGhlbiBsb29wIChibG9ja3MsIHRydWUpDQoJCSAgICAgIGVsc2UgKGJsb2Nr
cyxjaGFuZ2VkKQ0KCQkgIGVuZA0KDQoJICAgICAgdmFsIChibG9ja3MsY2hhbmdlZCkgPSBsb29w
IChibG9ja3MsZmFsc2UpDQoJICAgIGluDQoJICAgICAge2Jsb2NrcyA9IGJsb2NrcywNCgkgICAg
ICAgY2hhbmdlZCA9IGNoYW5nZWR9DQoJICAgIGVuZA0KDQoNCgkoKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKQ0KCSgq
IGJsb2NrcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICopDQoJKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKikNCgl2YWwge2Jsb2NrcywuLi59DQoJICA9IGNh
c2Ugb3B0aW1pemUNCgkgICAgICBvZiAwID0+IHtibG9ja3MgPSBibG9ja3MsIGNoYW5nZWQgPSBm
YWxzZX0NCgkgICAgICAgfCAxID0+IG9wdGltaXplciBibG9ja3MNCgkgICAgICAgfCBfID0+IG9w
dGltaXplcl9sb29wIGJsb2Nrcw0KDQoJKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKikNCgkoKiBhc3NlbWJseSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKQ0K
CSgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiopDQoJdmFsIGFzc2VtYmx5DQoJICA9IEdlbmVyYXRlVHJhbnNmZXJzLmdl
bmVyYXRlVHJhbnNmZXJzDQoJICAgIHtibG9ja3MgPSBibG9ja3MsDQoJICAgICBleHBvcnRzID0g
ZXhwb3J0cywNCgkgICAgIG9wdGltaXplID0gb3B0aW1pemUsDQoJICAgICBibG9ja19wcmUgPSBi
bG9ja19wcmUsDQoJICAgICBibG9ja19iZWdpbiA9IGJsb2NrX2JlZ2luLA0KCSAgICAgYmxvY2tf
ZW5kID0gYmxvY2tfZW5kLA0KCSAgICAgYmxvY2tfZmFsbCA9IGJsb2NrX2ZhbGwsDQoJICAgICB0
cmFuc2ZlclJlZ3MgPSB0cmFuc2ZlclJlZ3MsDQoJICAgICBsaXZlSW5mbyA9IGxpdmVJbmZvLA0K
CSAgICAganVtcEluZm8gPSBqdW1wSW5mb30NCg0KCXZhbCBfID0gTGlzdC5mb3JlYWNoKGxhYmVs
cywgTGFiZWwuY2xlYXIpDQogICAgICBpbg0KCWFzc2VtYmx5DQogICAgICBlbmQNCg0KICB2YWwg
KHNpbXBsaWZ5LCBzaW1wbGlmeV9tc2cpDQogICAgPSB0cmFjZXINCiAgICAgICJzaW1wbGlmeSIN
CiAgICAgIHNpbXBsaWZ5DQoNCiAgZnVuIHNpbXBsaWZ5X3RvdGFscyAoKQ0KICAgID0gKHNpbXBs
aWZ5X21zZyAoKTsNCiAgICAgICBDb250cm9sLmluZGVudCAoKTsNCiAgICAgICBMaXZlbmVzcy52
ZXJpZnlMaXZlSW5mb19tc2cgKCk7DQogICAgICAgSnVtcEluZm8uY29tcHV0ZUp1bXBJbmZvX21z
ZyAoKTsNCiAgICAgICBFbGltR290by5lbGltR290b19tc2cgKCk7DQogICAgICAgSnVtcEluZm8u
dmVyaWZ5SnVtcEluZm9fbXNnICgpOw0KICAgICAgIFBlZXBob2xlQmxvY2sucGVlcGhvbGVCbG9j
a19wcmVfbXNnICgpOw0KICAgICAgIExpdmVuZXNzQmxvY2sudG9MaXZlbmVzc0Jsb2NrX21zZyAo
KTsNCiAgICAgICBNb3ZlSG9pc3RMaXZlbmVzc0Jsb2NrLm1vdmVIb2lzdF9tc2cgKCk7DQogICAg
ICAgUGVlcGhvbGVMaXZlbmVzc0Jsb2NrLnBlZXBob2xlTGl2ZW5lc3NCbG9ja19tc2cgKCk7DQog
ICAgICAgQ29weVByb3BhZ2F0ZUxpdmVuZXNzQmxvY2suY29weVByb3BhZ2F0ZV9tc2cgKCk7DQog
ICAgICAgUGVlcGhvbGVMaXZlbmVzc0Jsb2NrLnBlZXBob2xlTGl2ZW5lc3NCbG9ja19taW5vcl9t
c2cgKCk7DQogICAgICAgTGl2ZW5lc3NCbG9jay52ZXJpZnlMaXZlbmVzc0Jsb2NrX21zZyAoKTsN
CiAgICAgICBMaXZlbmVzc0Jsb2NrLnRvQmxvY2tfbXNnICgpOw0KICAgICAgIFBlZXBob2xlQmxv
Y2sucGVlcGhvbGVCbG9ja19wb3N0X21zZyAoKTsNCiAgICAgICBHZW5lcmF0ZVRyYW5zZmVycy5n
ZW5lcmF0ZVRyYW5zZmVyc19tc2cgKCk7DQogICAgICAgQ29udHJvbC5pbmRlbnQgKCk7DQogICAg
ICAgTGl2ZVRyYW5zZmVySW5mby5jb21wdXRlTGl2ZVRyYW5zZmVySW5mb19tc2cgKCk7DQogICAg
ICAgQ29udHJvbC51bmluZGVudCAoKTsNCiAgICAgICBDb250cm9sLnVuaW5kZW50ICgpKQ0KZW5k
DQo=

---559023410-684387517-979689365=:13415--