<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>35198</bug_id>
          
          <creation_ts>2010-02-20 14:51:39 -0800</creation_ts>
          <short_desc>Move pywebsocket into webkitpy/thirdparty</short_desc>
          <delta_ts>2010-02-26 08:53:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Jerdonek">cjerdonek</reporter>
          <assigned_to name="Chris Jerdonek">cjerdonek</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>levin</cc>
    
    <cc>ukai</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>192213</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-20 14:51:39 -0800</bug_when>
    <thetext>See summary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192216</commentid>
    <comment_count>1</comment_count>
      <attachid>49135</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-20 15:10:28 -0800</bug_when>
    <thetext>Created attachment 49135
Proposed patch

As before, this patch does not show the files re-added (since svn-create-patch cannot handle directory moves).  cq- for the same reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192219</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-02-20 15:22:15 -0800</bug_when>
    <thetext>I don&apos;t remember the resolution on whether we have the canonical copy of this library or whether http://code.google.com/p/pywebsocket/ is.

Also, it seems strange to put it in webkitpy because it&apos;s a standalone tool, independent of our python infrastructure...  I&apos;m not necessarily opposed, but we should solicit feedback from others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192221</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-20 15:47:38 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; I don&apos;t remember the resolution on whether we have the canonical copy of this
&gt; library or whether http://code.google.com/p/pywebsocket/ is.

If we have the canonical copy, we should consider moving it into webkitpy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192628</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-22 14:20:39 -0800</bug_when>
    <thetext>We do not have the cannoical copy.  I believe this is a separate code.google.com project.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193382</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-24 08:55:51 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; I don&apos;t remember the resolution on whether we have the canonical copy of this
&gt; library or whether http://code.google.com/p/pywebsocket/ is.
&gt; 
&gt; Also, it seems strange to put it in webkitpy because it&apos;s a standalone tool,
&gt; independent of our python infrastructure...  I&apos;m not necessarily opposed, but
&gt; we should solicit feedback from others.

Things like check-webkit-style and the new Python layout test package are also stand-alone tools that we are putting in webkitpy (in addition to exposing more publicly via a wrapper script in the Scripts/ directory).  They are not really meant to be referenced by other modules in webkitpy.

In other words, webkitpy in my mind is not so much a library of reusable Python code as it is a containing directory for all of our Python code.  A nice feature of this is that we know where to go to find our Python code.  And with webkitpy/thirdparty, we know where to go to find our third-party Python code.

If we want to go another route with webkitpy, we may want to discuss.  Another route, for example, could be to put in webkitpy only the code that is meant to be reused across our tools (to make it a package in the truer sense of the word), and to make all of our stand-alone Python tools siblings of that (or at least outside of webkitpy).  This would require a bit of extra work, thought, and refactoring, etc.  But for the third party code, it shouldn&apos;t really require extra work since those are already stand-alone by nature, and so will not have dependencies on other code inside webkitpy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193451</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-24 12:21:00 -0800</bug_when>
    <thetext>That sounds OK... but that would require moving more of the webkit-patch stuff into its own module.

Also the run-webkit-tests stuff uses some of the webkit-patch module now.  I expect that other scripts may as well.  I don&apos;t know that it makes sense to draw lines in the sand like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193494</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-24 13:46:16 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; That sounds OK... but that would require moving more of the webkit-patch stuff
&gt; into its own module.

Which sounds okay -- (1) having webkitpy contain all of our Python code or (2) having webkitpy contain only code meant to be reused?

&gt; Also the run-webkit-tests stuff uses some of the webkit-patch module now.  I
&gt; expect that other scripts may as well.  I don&apos;t know that it makes sense to
&gt; draw lines in the sand like that.

I&apos;m okay staying with (1) for now since (2) is a large-ish change and should probably be thought through.  I made the suggestion of (2) primarily in response to Adam&apos;s comment 2.  (2) sounds like it may be a better organization in the long-run (in some ways a natural extension of what we&apos;re already moving towards).  But I haven&apos;t really thought through the disadvantages yet.  For example, it might be somewhat harder to track what code depends on webkitpy if we&apos;re not careful about how we organize the code dependent on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193786</commentid>
    <comment_count>8</comment_count>
      <attachid>49135</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-25 10:07:34 -0800</bug_when>
    <thetext>Comment on attachment 49135
Proposed patch

I like everything here (I&apos;ve very much disliked having this external code look like it could be webkit code but have different conventions about things).

I have one request, since this is a large module, I would love for it to have a README.webkit (just inside of its directory). Ideally, it should explain how to get the code, the current revision obtained, and any local modifications. (How to get the code is in this bug, the current revision obtained is unknown but could be filled in the next time this module is updated, there are no local modifications).


Here&apos;s a possible example (though it says more than what I mentioned):
http://src.chromium.org/viewvc/chrome/trunk/src/third_party/lzma_sdk/README.chromium?view=markup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193874</commentid>
    <comment_count>9</comment_count>
      <attachid>49531</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-25 14:06:15 -0800</bug_when>
    <thetext>Created attachment 49531
Proposed patch 2

Thanks, David!  And good suggestion.  I&apos;ve stubbed out a README.webkit.  Over time we can add README.webkit files for our other third-party code.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194127</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-26 08:53:36 -0800</bug_when>
    <thetext>Committed (via &quot;svn ci&quot;): http://trac.webkit.org/changeset/55286</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49135</attachid>
            <date>2010-02-20 15:10:28 -0800</date>
            <delta_ts>2010-02-25 14:06:15 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>_patch-35198-1.diff</filename>
            <type>text/plain</type>
            <size>153314</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU1MDU3KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNjAgQEAKKzIwMTAtMDItMjAgIENocmlzIEplcmRvbmVrICA8
Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTW92ZWQgcHl3ZWJzb2NrZXQgaW50byB3ZWJraXRweS90aGlyZHBhcnR5
IGRpcmVjdG9yeS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzUxOTgKKworICAgICAgICAqIFNjcmlwdHMvcnVuLXdlYmtpdC10ZXN0czoKKyAgICAg
ICAgICAtIFVwZGF0ZWQgcGF0aHMgdG8gcHl3ZWJzb2NrZXQuCisKKyAgICAgICAgKiBTY3JpcHRz
L3J1bi13ZWJraXQtd2Vic29ja2V0c2VydmVyOgorICAgICAgICAgIC0gVXBkYXRlZCBwYXRocyB0
byBweXdlYnNvY2tldC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvd2Vic29ja2V0X3NlcnZlci5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgcGF0aHMgdG8g
cHl3ZWJzb2NrZXQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3
ZWJzb2NrZXQ6IENvcGllZCBmcm9tIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0LgorICAgICAgICAq
IHB5d2Vic29ja2V0OiBSZW1vdmVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L0NPUFlJTkc6IFJl
bW92ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvTUFOSUZFU1QuaW46IFJlbW92ZWQuCisgICAg
ICAgICogcHl3ZWJzb2NrZXQvUkVBRE1FOiBSZW1vdmVkLgorICAgICAgICAqIHB5d2Vic29ja2V0
L2V4YW1wbGU6IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvZXhhbXBsZS9lY2hvX2Ns
aWVudC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9leGFtcGxlL2VjaG9fd3No
LnB5OiBSZW1vdmVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldDogUmVt
b3ZlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvX19pbml0X18ucHk6
IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2Rpc3BhdGNo
LnB5OiBSZW1vdmVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oYW5k
c2hha2UucHk6IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0
L2hlYWRlcnBhcnNlcmhhbmRsZXIucHk6IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQv
bW9kX3B5d2Vic29ja2V0L21lbW9yaXppbmdmaWxlLnB5OiBSZW1vdmVkLgorICAgICAgICAqIHB5
d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9tc2d1dGlsLnB5OiBSZW1vdmVkLgorICAgICAgICAq
IHB5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25lLnB5OiBSZW1vdmVkLgorICAg
ICAgICAqIHB5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC91dGlsLnB5OiBSZW1vdmVkLgorICAg
ICAgICAqIHB5d2Vic29ja2V0L3NldHVwLnB5OiBSZW1vdmVkLgorICAgICAgICAqIHB5d2Vic29j
a2V0L3Rlc3Q6IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC9jb25maWcucHk6
IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC9tb2NrLnB5OiBSZW1vdmVkLgor
ICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvcnVuX2FsbC5weTogUmVtb3ZlZC4KKyAgICAgICAg
KiBweXdlYnNvY2tldC90ZXN0L3Rlc3RfZGlzcGF0Y2gucHk6IFJlbW92ZWQuCisgICAgICAgICog
cHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2hhbmRzaGFrZS5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBw
eXdlYnNvY2tldC90ZXN0L3Rlc3RfbWVtb3JpemluZ2ZpbGUucHk6IFJlbW92ZWQuCisgICAgICAg
ICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X21vY2sucHk6IFJlbW92ZWQuCisgICAgICAgICogcHl3
ZWJzb2NrZXQvdGVzdC90ZXN0X21zZ3V0aWwucHk6IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJz
b2NrZXQvdGVzdC90ZXN0X3V0aWwucHk6IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQv
dGVzdC90ZXN0ZGF0YTogUmVtb3ZlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3Rk
YXRhL2hhbmRsZXJzOiBSZW1vdmVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdGRh
dGEvaGFuZGxlcnMvYmxhbmtfd3NoLnB5OiBSZW1vdmVkLgorICAgICAgICAqIHB5d2Vic29ja2V0
L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvb3JpZ2luX2NoZWNrX3dzaC5weTogUmVtb3ZlZC4KKyAg
ICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1YjogUmVtb3ZlZC4K
KyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9leGNlcHRp
b25faW5fdHJhbnNmZXJfd3NoLnB5OiBSZW1vdmVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rl
c3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL25vX3dzaF9hdF90aGVfZW5kLnB5OiBSZW1vdmVkLgor
ICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL25vbl9jYWxs
YWJsZV93c2gucHk6IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0
YS9oYW5kbGVycy9zdWIvcGxhaW5fd3NoLnB5OiBSZW1vdmVkLgorICAgICAgICAqIHB5d2Vic29j
a2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL3dyb25nX2hhbmRzaGFrZV9zaWdfd3NoLnB5
OiBSZW1vdmVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMv
c3ViL3dyb25nX3RyYW5zZmVyX3NpZ193c2gucHk6IFJlbW92ZWQuCisKIDIwMTAtMDItMjAgIENo
cmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC10ZXN0
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtdGVzdHMJKHJl
dmlzaW9uIDU1MDU2KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Via2l0LXRlc3RzCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzg0LDcgKzEzODQsNyBAQCBzdWIgb3BlbldlYlNvY2tldFNlcnZl
cklmTmVlZGVkKCkKICAgICByZXR1cm4gMCBpZiAkZmFpbGVkVG9TdGFydFdlYlNvY2tldFNlcnZl
cjsKIAogICAgIG15ICR3ZWJTb2NrZXRTZXJ2ZXJQYXRoID0gIi91c3IvYmluL3B5dGhvbiI7Ci0g
ICAgbXkgJHdlYlNvY2tldFB5dGhvblBhdGggPSAiV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQiOwor
ICAgIG15ICR3ZWJTb2NrZXRQeXRob25QYXRoID0gIldlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldCI7CiAgICAgbXkgJHdlYlNvY2tldEhhbmRsZXJEaXIg
PSAiJHRlc3REaXJlY3RvcnkiOwogICAgIG15ICR3ZWJTb2NrZXRIYW5kbGVyU2NhbkRpciA9ICIk
dGVzdERpcmVjdG9yeS93ZWJzb2NrZXQvdGVzdHMiOwogICAgIG15ICR3ZWJTb2NrZXRIYW5kbGVy
TWFwRmlsZSA9ICIkd2ViU29ja2V0SGFuZGxlclNjYW5EaXIvaGFuZGxlcl9tYXAudHh0IjsKQEAg
LTEzOTMsNyArMTM5Myw3IEBAIHN1YiBvcGVuV2ViU29ja2V0U2VydmVySWZOZWVkZWQoKQogICAg
IG15ICRsb2dGaWxlID0gIiRhYnNUZXN0UmVzdWx0c0RpcmVjdG9yeS9weXdlYnNvY2tldF9sb2cu
dHh0IjsKIAogICAgIG15IEBhcmdzID0gKAotICAgICAgICAiV2ViS2l0VG9vbHMvcHl3ZWJzb2Nr
ZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkiLAorICAgICAgICAiV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9z
dGFuZGFsb25lLnB5IiwKICAgICAgICAgIi1wIiwgIiR3ZWJTb2NrZXRQb3J0IiwKICAgICAgICAg
Ii1kIiwgIiR3ZWJTb2NrZXRIYW5kbGVyRGlyIiwKICAgICAgICAgIi1zIiwgIiR3ZWJTb2NrZXRI
YW5kbGVyU2NhbkRpciIsCkBAIC0xNDA0LDcgKzE0MDQsNyBAQCBzdWIgb3BlbldlYlNvY2tldFNl
cnZlcklmTmVlZGVkKCkKICAgICApOwogICAgICMgd3NzIGlzIGRpc2FibGVkIHVudGlsIGFsbCBw
bGF0Zm9ybXMgc3VwcG9ydCBweU9wZW5TU0wuCiAgICAgIyBteSBAYXJnc1NlY3VyZSA9ICgKLSAg
ICAjICAgICAiV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxv
bmUucHkiLAorICAgICMgICAgICJXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkiLAogICAgICMgICAg
ICItcCIsICIkd2ViU29ja2V0U2VjdXJlUG9ydCIsCiAgICAgIyAgICAgIi1kIiwgIiR3ZWJTb2Nr
ZXRIYW5kbGVyRGlyIiwKICAgICAjICAgICAiLXQiLApJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0
cy9ydW4td2Via2l0LXdlYnNvY2tldHNlcnZlcgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9T
Y3JpcHRzL3J1bi13ZWJraXQtd2Vic29ja2V0c2VydmVyCShyZXZpc2lvbiA1NTA1NikKKysrIFdl
YktpdFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC13ZWJzb2NrZXRzZXJ2ZXIJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDEzICs2NCwxMyBAQCBleGl0IDA7CiBzdWIgb3BlbldlYlNvY2tldFNlcnZlcigp
CiB7CiAgICAgbXkgJHdlYlNvY2tldFNlcnZlclBhdGggPSAiL3Vzci9iaW4vcHl0aG9uIjsKLSAg
ICBteSAkd2ViU29ja2V0UHl0aG9uUGF0aCA9ICIkc3JjRGlyL1dlYktpdFRvb2xzL3B5d2Vic29j
a2V0IjsKKyAgICBteSAkd2ViU29ja2V0UHl0aG9uUGF0aCA9ICIkc3JjRGlyL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldCI7CiAgICAgbXkgJHdlYlNv
Y2tldEhhbmRsZXJEaXIgPSAiJHRlc3REaXJlY3RvcnkiOwogICAgIG15ICR3ZWJTb2NrZXRIYW5k
bGVyU2NhbkRpciA9ICIkdGVzdERpcmVjdG9yeS93ZWJzb2NrZXQvdGVzdHMiOwogICAgIG15ICR3
ZWJTb2NrZXRIYW5kbGVyTWFwRmlsZSA9ICIkd2ViU29ja2V0SGFuZGxlclNjYW5EaXIvaGFuZGxl
cl9tYXAudHh0IjsKIAogICAgIG15IEBhcmdzID0gKAotICAgICAgICAiJHNyY0Rpci9XZWJLaXRU
b29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvc3RhbmRhbG9uZS5weSIsCisgICAgICAg
ICIkc3JjRGlyL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNv
Y2tldC9tb2RfcHl3ZWJzb2NrZXQvc3RhbmRhbG9uZS5weSIsCiAgICAgICAgICItcCIsICIkd2Vi
U29ja2V0UG9ydCIsCiAgICAgICAgICItZCIsICIkd2ViU29ja2V0SGFuZGxlckRpciIsCiAgICAg
ICAgICItcyIsICIkd2ViU29ja2V0SGFuZGxlclNjYW5EaXIiLApJbmRleDogV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvd2Vic29ja2V0X3NlcnZlci5weQkocmV2aXNpb24gNTUwNTYpCisrKyBXZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkJKHdv
cmtpbmcgY29weSkKQEAgLTE1MCw4ICsxNTAsNyBAQCBjbGFzcyBQeVdlYlNvY2tldChodHRwX3Nl
cnZlci5MaWdodHRwZCk6CiAgICAgICAgIHB5dGhvbl9pbnRlcnAgPSBzeXMuZXhlY3V0YWJsZQog
ICAgICAgICBweXdlYnNvY2tldF9iYXNlID0gb3MucGF0aC5qb2luKAogICAgICAgICAgICAgb3Mu
cGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoCi0gICAgICAgICAg
ICBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKAotICAgICAgICAgICAgb3MucGF0aC5h
YnNwYXRoKF9fZmlsZV9fKSkpKSkpLCAncHl3ZWJzb2NrZXQnKQorICAgICAgICAgICAgb3MucGF0
aC5hYnNwYXRoKF9fZmlsZV9fKSkpKSkpLCAndGhpcmRwYXJ0eScsICdweXdlYnNvY2tldCcpCiAg
ICAgICAgIHB5d2Vic29ja2V0X3NjcmlwdCA9IG9zLnBhdGguam9pbihweXdlYnNvY2tldF9iYXNl
LCAnbW9kX3B5d2Vic29ja2V0JywKICAgICAgICAgICAgICdzdGFuZGFsb25lLnB5JykKICAgICAg
ICAgc3RhcnRfY21kID0gWwpJbmRleDogV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvQ09QWUlORwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC9DT1BZSU5HCShyZXZpc2lvbiA1
NTA1NikKKysrIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L0NPUFlJTkcJKHdvcmtpbmcgY29weSkK
QEAgLTEsMjggKzAsMCBAQAotQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCi1BbGwgcmlnaHRz
IHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLW1ldDoKLQotICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLW5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLWNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLWluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLWRpc3RyaWJ1dGlvbi4KLSAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLWNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi10aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0iQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi1BIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi1TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi1MSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLURBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi1PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpJbmRleDogV2ViS2l0VG9vbHMv
cHl3ZWJzb2NrZXQvTUFOSUZFU1QuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvcHl3ZWJz
b2NrZXQvTUFOSUZFU1QuaW4JKHJldmlzaW9uIDU1MDU2KQorKysgV2ViS2l0VG9vbHMvcHl3ZWJz
b2NrZXQvTUFOSUZFU1QuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMCwwIEBACi1pbmNsdWRl
IENPUFlJTkcKLWluY2x1ZGUgTUFOSUZFU1QuaW4KLWluY2x1ZGUgUkVBRE1FCi1yZWN1cnNpdmUt
aW5jbHVkZSBleGFtcGxlICoucHkKLXJlY3Vyc2l2ZS1pbmNsdWRlIG1vZF9weXdlYnNvY2tldCAq
LnB5Ci1yZWN1cnNpdmUtaW5jbHVkZSB0ZXN0ICoucHkKSW5kZXg6IFdlYktpdFRvb2xzL3B5d2Vi
c29ja2V0L1JFQURNRQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC9SRUFE
TUUJKHJldmlzaW9uIDU1MDU2KQorKysgV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvUkVBRE1FCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzAsMCBAQAotSW5zdGFsbCB0aGlzIHBhY2thZ2UgYnk6Ci0k
IHB5dGhvbiBzZXR1cC5weSBidWlsZAotJCBzdWRvIHB5dGhvbiBzZXR1cC5weSBpbnN0YWxsCi0K
LVRoZW4gcmVhZCBkb2N1bWVudCBieToKLSQgcHlkb2MgbW9kX3B5d2Vic29ja2V0CkluZGV4OiBX
ZWJLaXRUb29scy9weXdlYnNvY2tldC9zZXR1cC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9weXdlYnNvY2tldC9zZXR1cC5weQkocmV2aXNpb24gNTUwNTYpCisrKyBXZWJLaXRUb29scy9w
eXdlYnNvY2tldC9zZXR1cC5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2MyArMCwwIEBACi0jIS91
c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCi0jIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1l
dDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLSIiIlNldCB1cCBzY3Jp
cHQgZm9yIG1vZF9weXdlYnNvY2tldC4KLSIiIgotCi0KLWZyb20gZGlzdHV0aWxzLmNvcmUgaW1w
b3J0IHNldHVwCi1pbXBvcnQgc3lzCi0KLQotX1BBQ0tBR0VfTkFNRSA9ICdtb2RfcHl3ZWJzb2Nr
ZXQnCi0KLWlmIHN5cy52ZXJzaW9uIDwgJzIuMyc6Ci0gICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAn
JXMgcmVxdWlyZXMgUHl0aG9uIDIuMyBvciBsYXRlci4nICUgX1BBQ0tBR0VfTkFNRQotICAgIHN5
cy5leGl0KDEpCi0KLXNldHVwKGF1dGhvcj0nWXV6byBGdWppc2hpbWEnLAotICAgICAgYXV0aG9y
X2VtYWlsPSd5dXpvQGNocm9taXVtLm9yZycsCi0gICAgICBkZXNjcmlwdGlvbj0nV2ViIFNvY2tl
dCBleHRlbnNpb24gZm9yIEFwYWNoZSBIVFRQIFNlcnZlci4nLAotICAgICAgbG9uZ19kZXNjcmlw
dGlvbj0oCi0gICAgICAgICAgICAgICdtb2RfcHl3ZWJzb2NrZXQgaXMgYW4gQXBhY2hlIEhUVFAg
U2VydmVyIGV4dGVuc2lvbiBmb3IgJwotICAgICAgICAgICAgICAnV2ViIFNvY2tldCAoaHR0cDov
L3Rvb2xzLmlldGYub3JnL2h0bWwvJwotICAgICAgICAgICAgICAnZHJhZnQtaGl4aWUtdGhld2Vi
c29ja2V0cHJvdG9jb2wpLiAnCi0gICAgICAgICAgICAgICdTZWUgbW9kX3B5d2Vic29ja2V0L19f
aW5pdF9fLnB5IGZvciBtb3JlIGRldGFpbC4nKSwKLSAgICAgIGxpY2Vuc2U9J1NlZSBDT1BZSU5H
JywKLSAgICAgIG5hbWU9X1BBQ0tBR0VfTkFNRSwKLSAgICAgIHBhY2thZ2VzPVtfUEFDS0FHRV9O
QU1FXSwKLSAgICAgIHVybD0naHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3B5d2Vic29ja2V0Lycs
Ci0gICAgICB2ZXJzaW9uPScwLjQuOCcsCi0gICAgICApCi0KLQotIyB2aTpzdHM9NCBzdz00IGV0
CkluZGV4OiBXZWJLaXRUb29scy9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9fY2xpZW50LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L2V4YW1wbGUvZWNob19jbGllbnQu
cHkJKHJldmlzaW9uIDU1MDU2KQorKysgV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvZXhhbXBsZS9l
Y2hvX2NsaWVudC5weQkod29ya2luZyBjb3B5KQpAQCAtMSwyMDcgKzAsMCBAQAotIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgotIyBBbGwgcmln
aHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0j
Ci0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi0iIiJXZWIgU29ja2V0IEVjaG8g
Y2xpZW50LgotCi1UaGlzIGlzIGFuIGV4YW1wbGUgV2ViIFNvY2tldCBjbGllbnQgdGhhdCB0YWxr
cyB3aXRoIGVjaG9fd3NoLnB5LgotVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBjaGVja2luZyBtb2Rf
cHl3ZWJzb2NrZXQgaW5zdGFsbGF0aW9uLgotCi1Ob3RlOgotVGhpcyBjb2RlIGlzIGZhciBmcm9t
IHJvYnVzdCwgZS5nLiwgd2UgY3V0IGNvcm5lcnMgaW4gaGFuZHNoYWtlLgotIiIiCi0KLQotaW1w
b3J0IGNvZGVjcwotZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCi1pbXBvcnQgc29j
a2V0Ci1pbXBvcnQgc3lzCi0KLQotX1RJTUVPVVRfU0VDID0gMTAKLQotX0RFRkFVTFRfUE9SVCA9
IDgwCi1fREVGQVVMVF9TRUNVUkVfUE9SVCA9IDQ0MwotX1VOREVGSU5FRF9QT1JUID0gLTEKLQot
X1VQR1JBREVfSEVBREVSID0gJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nCi1fQ09OTkVDVElPTl9I
RUFERVIgPSAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nCi1fRVhQRUNURURfUkVTUE9OU0UgPSAo
Ci0gICAgICAgICdIVFRQLzEuMSAxMDEgV2ViIFNvY2tldCBQcm90b2NvbCBIYW5kc2hha2Vcclxu
JyArCi0gICAgICAgIF9VUEdSQURFX0hFQURFUiArCi0gICAgICAgIF9DT05ORUNUSU9OX0hFQURF
UikKLQotX0dPT0RCWUVfTUVTU0FHRSA9ICdHb29kYnllJwotCi0KLWRlZiBfbWV0aG9kX2xpbmUo
cmVzb3VyY2UpOgotICAgIHJldHVybiAnR0VUICVzIEhUVFAvMS4xXHJcbicgJSByZXNvdXJjZQot
Ci0KLWRlZiBfb3JpZ2luX2hlYWRlcihvcmlnaW4pOgotICAgIHJldHVybiAnT3JpZ2luOiAlc1xy
XG4nICUgb3JpZ2luCi0KLQotY2xhc3MgX1RMU1NvY2tldChvYmplY3QpOgotICAgICIiIldyYXBw
ZXIgZm9yIGEgVExTIGNvbm5lY3Rpb24uIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3
X3NvY2tldCk6Ci0gICAgICAgIHNlbGYuX3NzbCA9IHNvY2tldC5zc2wocmF3X3NvY2tldCkKLQot
ICAgIGRlZiBzZW5kKHNlbGYsIGJ5dGVzKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3NzbC53cml0
ZShieXRlcykKLQotICAgIGRlZiByZWN2KHNlbGYsIHNpemU9LTEpOgotICAgICAgICByZXR1cm4g
c2VsZi5fc3NsLnJlYWQoc2l6ZSkKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgIyBO
b3RoaW5nIHRvIGRvLgotICAgICAgICBwYXNzCi0KLQotY2xhc3MgRWNob0NsaWVudChvYmplY3Qp
OgotICAgICIiIldlYiBTb2NrZXQgZWNobyBjbGllbnQuIiIiCi0KLSAgICBkZWYgX19pbml0X18o
c2VsZiwgb3B0aW9ucyk6Ci0gICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCi0gICAgICAg
IHNlbGYuX3NvY2tldCA9IE5vbmUKLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgICIiIlJ1
biB0aGUgY2xpZW50LgotCi0gICAgICAgIFNoYWtlIGhhbmRzIGFuZCB0aGVuIHJlcGVhdCBzZW5k
aW5nIG1lc3NhZ2UgYW5kIHJlY2VpdmluZyBpdHMgZWNoby4KLSAgICAgICAgIiIiCi0gICAgICAg
IHNlbGYuX3NvY2tldCA9IHNvY2tldC5zb2NrZXQoKQotICAgICAgICBzZWxmLl9zb2NrZXQuc2V0
dGltZW91dChzZWxmLl9vcHRpb25zLnNvY2tldF90aW1lb3V0KQotICAgICAgICB0cnk6Ci0gICAg
ICAgICAgICBzZWxmLl9zb2NrZXQuY29ubmVjdCgoc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfaG9zdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnNlcnZlcl9w
b3J0KSkKLSAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMudXNlX3RsczoKLSAgICAgICAgICAg
ICAgICBzZWxmLl9zb2NrZXQgPSBfVExTU29ja2V0KHNlbGYuX3NvY2tldCkKLSAgICAgICAgICAg
IHNlbGYuX2hhbmRzaGFrZSgpCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9vcHRpb25z
Lm1lc3NhZ2Uuc3BsaXQoJywnKSArIFtfR09PREJZRV9NRVNTQUdFXToKLSAgICAgICAgICAgICAg
ICBmcmFtZSA9ICdceDAwJyArIGxpbmUuZW5jb2RlKCd1dGYtOCcpICsgJ1x4ZmYnCi0gICAgICAg
ICAgICAgICAgc2VsZi5fc29ja2V0LnNlbmQoZnJhbWUpCi0gICAgICAgICAgICAgICAgaWYgc2Vs
Zi5fb3B0aW9ucy52ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICBwcmludCAnU2VuZDogJXMn
ICUgbGluZQotICAgICAgICAgICAgICAgIHJlY2VpdmVkID0gc2VsZi5fc29ja2V0LnJlY3YobGVu
KGZyYW1lKSkKLSAgICAgICAgICAgICAgICBpZiByZWNlaXZlZCAhPSBmcmFtZToKLSAgICAgICAg
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdJbmNvcnJlY3QgZWNobzogJXInICUgcmVjZWl2
ZWQpCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy52ZXJib3NlOgotICAgICAgICAg
ICAgICAgICAgICBwcmludCAnUmVjdjogJXMnICUgcmVjZWl2ZWRbMTotMV0uZGVjb2RlKCd1dGYt
OCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3JlcGxhY2UnKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5f
c29ja2V0LmNsb3NlKCkKLQotICAgIGRlZiBfaGFuZHNoYWtlKHNlbGYpOgotICAgICAgICBzZWxm
Ll9zb2NrZXQuc2VuZChfbWV0aG9kX2xpbmUoc2VsZi5fb3B0aW9ucy5yZXNvdXJjZSkpCi0gICAg
ICAgIHNlbGYuX3NvY2tldC5zZW5kKF9VUEdSQURFX0hFQURFUikKLSAgICAgICAgc2VsZi5fc29j
a2V0LnNlbmQoX0NPTk5FQ1RJT05fSEVBREVSKQotICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZChz
ZWxmLl9mb3JtYXRfaG9zdF9oZWFkZXIoKSkKLSAgICAgICAgc2VsZi5fc29ja2V0LnNlbmQoX29y
aWdpbl9oZWFkZXIoc2VsZi5fb3B0aW9ucy5vcmlnaW4pKQotICAgICAgICBzZWxmLl9zb2NrZXQu
c2VuZCgnXHJcbicpCi0KLSAgICAgICAgZm9yIGV4cGVjdGVkX2NoYXIgaW4gX0VYUEVDVEVEX1JF
U1BPTlNFOgotICAgICAgICAgICAgcmVjZWl2ZWQgPSBzZWxmLl9zb2NrZXQucmVjdigxKVswXQot
ICAgICAgICAgICAgaWYgZXhwZWN0ZWRfY2hhciAhPSByZWNlaXZlZDoKLSAgICAgICAgICAgICAg
ICByYWlzZSBFeGNlcHRpb24oJ0hhbmRzaGFrZSBmYWlsdXJlJykKLSAgICAgICAgIyBXZSBjdXQg
Y29ybmVycyBhbmQgc2tpcCBvdGhlciBoZWFkZXJzLgotICAgICAgICBzZWxmLl9za2lwX2hlYWRl
cnMoKQotCi0gICAgZGVmIF9za2lwX2hlYWRlcnMoc2VsZik6Ci0gICAgICAgIHRlcm1pbmF0b3Ig
PSAnXHJcblxyXG4nCi0gICAgICAgIHBvcyA9IDAKLSAgICAgICAgd2hpbGUgcG9zIDwgbGVuKHRl
cm1pbmF0b3IpOgotICAgICAgICAgICAgcmVjZWl2ZWQgPSBzZWxmLl9zb2NrZXQucmVjdigxKVsw
XQotICAgICAgICAgICAgaWYgcmVjZWl2ZWQgPT0gdGVybWluYXRvcltwb3NdOgotICAgICAgICAg
ICAgICAgIHBvcyArPSAxCi0gICAgICAgICAgICBlbGlmIHJlY2VpdmVkID09IHRlcm1pbmF0b3Jb
MF06Ci0gICAgICAgICAgICAgICAgcG9zID0gMQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICBwb3MgPSAwCi0KLSAgICBkZWYgX2Zvcm1hdF9ob3N0X2hlYWRlcihzZWxmKToKLSAg
ICAgICAgaG9zdCA9ICdIb3N0OiAnICsgc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfaG9zdAotICAgICAg
ICBpZiAoKG5vdCBzZWxmLl9vcHRpb25zLnVzZV90bHMgYW5kCi0gICAgICAgICAgICAgc2VsZi5f
b3B0aW9ucy5zZXJ2ZXJfcG9ydCAhPSBfREVGQVVMVF9QT1JUKSBvcgotICAgICAgICAgICAgKHNl
bGYuX29wdGlvbnMudXNlX3RscyBhbmQKLSAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnNlcnZl
cl9wb3J0ICE9IF9ERUZBVUxUX1NFQ1VSRV9QT1JUKSk6Ci0gICAgICAgICAgICBob3N0ICs9ICc6
JyArIHN0cihzZWxmLl9vcHRpb25zLnNlcnZlcl9wb3J0KQotICAgICAgICBob3N0ICs9ICdcclxu
JwotICAgICAgICByZXR1cm4gaG9zdAotCi0KLWRlZiBtYWluKCk6Ci0gICAgc3lzLnN0ZG91dCA9
IGNvZGVjcy5nZXR3cml0ZXIoJ3V0Zi04Jykoc3lzLnN0ZG91dCkKLQotICAgIHBhcnNlciA9IE9w
dGlvblBhcnNlcigpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oJy1zJywgJy0tc2VydmVyX2hvc3Qn
LCBkZXN0PSdzZXJ2ZXJfaG9zdCcsIHR5cGU9J3N0cmluZycsCi0gICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdD0nbG9jYWxob3N0JywgaGVscD0nc2VydmVyIGhvc3QnKQotICAgIHBhcnNlci5h
ZGRfb3B0aW9uKCctcCcsICctLXNlcnZlcl9wb3J0JywgZGVzdD0nc2VydmVyX3BvcnQnLCB0eXBl
PSdpbnQnLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9X1VOREVGSU5FRF9QT1JULCBo
ZWxwPSdzZXJ2ZXIgcG9ydCcpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oJy1vJywgJy0tb3JpZ2lu
JywgZGVzdD0nb3JpZ2luJywgdHlwZT0nc3RyaW5nJywKLSAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0PSdodHRwOi8vbG9jYWxob3N0LycsIGhlbHA9J29yaWdpbicpCi0gICAgcGFyc2VyLmFk
ZF9vcHRpb24oJy1yJywgJy0tcmVzb3VyY2UnLCBkZXN0PSdyZXNvdXJjZScsIHR5cGU9J3N0cmlu
ZycsCi0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nL2VjaG8nLCBoZWxwPSdyZXNvdXJj
ZSBwYXRoJykKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLW0nLCAnLS1tZXNzYWdlJywgZGVzdD0n
bWVzc2FnZScsIHR5cGU9J3N0cmluZycsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ2Nv
bW1hLXNlcGFyYXRlZCBtZXNzYWdlcyB0byBzZW5kIGV4Y2x1ZGluZyAiJXMiICcKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAndGhhdCBpcyBhbHdheXMgc2VudCBhdCB0aGUgZW5kJyAlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dPT0RCWUVfTUVTU0FHRSkpCi0gICAgcGFyc2Vy
LmFkZF9vcHRpb24oJy1xJywgJy0tcXVpZXQnLCBkZXN0PSd2ZXJib3NlJywgYWN0aW9uPSdzdG9y
ZV9mYWxzZScsCi0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1UcnVlLCBoZWxwPSdzdXBw
cmVzcyBtZXNzYWdlcycpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oJy10JywgJy0tdGxzJywgZGVz
dD0ndXNlX3RscycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdD1GYWxzZSwgaGVscD0ndXNlIFRMUyAod3NzOi8vKScpCi0gICAgcGFyc2VyLmFkZF9v
cHRpb24oJy1rJywgJy0tc29ja2V0X3RpbWVvdXQnLCBkZXN0PSdzb2NrZXRfdGltZW91dCcsCi0g
ICAgICAgICAgICAgICAgICAgICAgdHlwZT0naW50JywgZGVmYXVsdD1fVElNRU9VVF9TRUMsCi0g
ICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGltZW91dChzZWMpIGZvciBzb2NrZXRzJykKLQot
ICAgIChvcHRpb25zLCB1bnVzZWRfYXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCi0KLSAgICAj
IERlZmF1bHQgcG9ydCBudW1iZXIgZGVwZW5kcyBvbiB3aGV0aGVyIFRMUyBpcyB1c2VkLgotICAg
IGlmIG9wdGlvbnMuc2VydmVyX3BvcnQgPT0gX1VOREVGSU5FRF9QT1JUOgotICAgICAgICBpZiBv
cHRpb25zLnVzZV90bHM6Ci0gICAgICAgICAgICBvcHRpb25zLnNlcnZlcl9wb3J0ID0gX0RFRkFV
TFRfU0VDVVJFX1BPUlQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9wdGlvbnMuc2VydmVy
X3BvcnQgPSBfREVGQVVMVF9QT1JUCi0KLSAgICAjIG9wdHBhcnNlIGRvZXNuJ3Qgc2VlbSB0byBo
YW5kbGUgbm9uLWFzY2lpIGRlZmF1bHQgdmFsdWVzLgotICAgICMgU2V0IGRlZmF1bHQgbWVzc2Fn
ZSBoZXJlLgotICAgIGlmIG5vdCBvcHRpb25zLm1lc3NhZ2U6Ci0gICAgICAgIG9wdGlvbnMubWVz
c2FnZSA9IHUnSGVsbG8sXHU2NWU1XHU2NzJjJyAgICMgIkphcGFuIiBpbiBKYXBhbmVzZQotCi0g
ICAgRWNob0NsaWVudChvcHRpb25zKS5ydW4oKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5f
Xyc6Ci0gICAgbWFpbigpCi0KLQotIyB2aTpzdHM9NCBzdz00IGV0CkluZGV4OiBXZWJLaXRUb29s
cy9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9fd3NoLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL3B5d2Vic29ja2V0L2V4YW1wbGUvZWNob193c2gucHkJKHJldmlzaW9uIDU1MDU2KQorKysg
V2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvZXhhbXBsZS9lY2hvX3dzaC5weQkod29ya2luZyBjb3B5
KQpAQCAtMSw0OSArMCwwIEBACi0jIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgotIyBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6
Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1mcm9tIG1vZF9weXdlYnNv
Y2tldCBpbXBvcnQgbXNndXRpbAotCi0KLV9HT09EQllFX01FU1NBR0UgPSAnR29vZGJ5ZScKLQot
Ci1kZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6Ci0gICAgcGFzcyAg
IyBBbHdheXMgYWNjZXB0LgotCi0KLWRlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVz
dCk6Ci0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgbGluZSA9IG1zZ3V0aWwucmVjZWl2ZV9tZXNz
YWdlKHJlcXVlc3QpCi0gICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsIGxpbmUp
Ci0gICAgICAgIGlmIGxpbmUgPT0gX0dPT0RCWUVfTUVTU0FHRToKLSAgICAgICAgICAgIHJldHVy
bgotCi0KLSMgdmk6c3RzPTQgc3c9NCBldApJbmRleDogV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQv
bW9kX3B5d2Vic29ja2V0L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL3B5
d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9fX2luaXRfXy5weQkocmV2aXNpb24gNTUwNTYpCisr
KyBXZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvX19pbml0X18ucHkJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTA1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJ
bmMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMK
LSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLSIiIldl
YiBTb2NrZXQgZXh0ZW5zaW9uIGZvciBBcGFjaGUgSFRUUCBTZXJ2ZXIuCi0KLW1vZF9weXdlYnNv
Y2tldCBpcyBhIFdlYiBTb2NrZXQgZXh0ZW5zaW9uIGZvciBBcGFjaGUgSFRUUCBTZXJ2ZXIKLWlu
dGVuZGVkIGZvciB0ZXN0aW5nIG9yIGV4cGVyaW1lbnRhbCBwdXJwb3Nlcy4gbW9kX3B5dGhvbiBp
cyByZXF1aXJlZC4KLQotSW5zdGFsbGF0aW9uOgotCi0wLiBQcmVwYXJlIGFuIEFwYWNoZSBIVFRQ
IFNlcnZlciBmb3Igd2hpY2ggbW9kX3B5dGhvbiBpcyBlbmFibGVkLgotCi0xLiBTcGVjaWZ5IHRo
ZSBmb2xsb3dpbmcgQXBhY2hlIEhUVFAgU2VydmVyIGRpcmVjdGl2ZXMgdG8gc3VpdCB5b3VyCi0g
ICBjb25maWd1cmF0aW9uLgotCi0gICBJZiBtb2RfcHl3ZWJzb2NrZXQgaXMgbm90IGluIHRoZSBQ
eXRob24gcGF0aCwgc3BlY2lmeSB0aGUgZm9sbG93aW5nLgotICAgPHdlYnNvY2tfbGliPiBpcyB0
aGUgZGlyZWN0b3J5IHdoZXJlIG1vZF9weXdlYnNvY2tldCBpcyBpbnN0YWxsZWQuCi0KLSAgICAg
ICBQeXRob25QYXRoICJzeXMucGF0aCtbJzx3ZWJzb2NrX2xpYj4nXSIKLQotICAgQWx3YXlzIHNw
ZWNpZnkgdGhlIGZvbGxvd2luZy4gPHdlYnNvY2tfaGFuZGxlcnM+IGlzIHRoZSBkaXJlY3Rvcnkg
d2hlcmUKLSAgIHVzZXItd3JpdHRlbiBXZWIgU29ja2V0IGhhbmRsZXJzIGFyZSBwbGFjZWQuCi0K
LSAgICAgICBQeXRob25PcHRpb24gbW9kX3B5d2Vic29ja2V0LmhhbmRsZXJfcm9vdCA8d2Vic29j
a19oYW5kbGVycz4KLSAgICAgICBQeXRob25IZWFkZXJQYXJzZXJIYW5kbGVyIG1vZF9weXdlYnNv
Y2tldC5oZWFkZXJwYXJzZXJoYW5kbGVyCi0KLSAgIFRvIGxpbWl0IHRoZSBzZWFyY2ggZm9yIFdl
YiBTb2NrZXQgaGFuZGxlcnMgdG8gYSBkaXJlY3RvcnkgPHNjYW5fZGlyPgotICAgdW5kZXIgPHdl
YnNvY2tfaGFuZGxlcnM+LCBjb25maWd1cmUgYXMgZm9sbG93czoKLSAgIAotICAgICAgIFB5dGhv
bk9wdGlvbiBtb2RfcHl3ZWJzb2NrZXQuaGFuZGxlcl9zY2FuIDxzY2FuX2Rpcj4KLSAgICAgICAK
LSAgIDxzY2FuX2Rpcj4gaXMgdXNlZnVsIGluIHNhdmluZyBzY2FuIHRpbWUgd2hlbiA8d2Vic29j
a19oYW5kbGVycz4KLSAgIGNvbnRhaW5zIG1hbnkgbm9uLVdlYiBTb2NrZXQgaGFuZGxlciBmaWxl
cy4KLQotICAgRXhhbXBsZSBzbmlwcGV0IG9mIGh0dHBkLmNvbmY6Ci0gICAobW9kX3B5d2Vic29j
a2V0IGlzIGluIC93ZWJzb2NrX2xpYiwgV2ViIFNvY2tldCBoYW5kbGVycyBhcmUgaW4KLSAgIC93
ZWJzb2NrX2hhbmRsZXJzLCBwb3J0IGlzIDgwIGZvciB3cywgNDQzIGZvciB3c3MuKQotCi0gICAg
ICAgPElmTW9kdWxlIHB5dGhvbl9tb2R1bGU+Ci0gICAgICAgICBQeXRob25QYXRoICJzeXMucGF0
aCtbJy93ZWJzb2NrX2xpYiddIgotICAgICAgICAgUHl0aG9uT3B0aW9uIG1vZF9weXdlYnNvY2tl
dC5oYW5kbGVyX3Jvb3QgL3dlYnNvY2tfaGFuZGxlcnMKLSAgICAgICAgIFB5dGhvbkhlYWRlclBh
cnNlckhhbmRsZXIgbW9kX3B5d2Vic29ja2V0LmhlYWRlcnBhcnNlcmhhbmRsZXIKLSAgICAgICA8
L0lmTW9kdWxlPgotCi1Xcml0aW5nIFdlYiBTb2NrZXQgaGFuZGxlcnM6Ci0KLVdoZW4gYSBXZWIg
U29ja2V0IHJlcXVlc3QgY29tZXMgaW4sIHRoZSByZXNvdXJjZSBuYW1lCi1zcGVjaWZpZWQgaW4g
dGhlIGhhbmRzaGFrZSBpcyBjb25zaWRlcmVkIGFzIGlmIGl0IGlzIGEgZmlsZSBwYXRoIHVuZGVy
Ci08d2Vic29ja19oYW5kbGVycz4gYW5kIHRoZSBoYW5kbGVyIGRlZmluZWQgaW4KLTx3ZWJzb2Nr
X2hhbmRsZXJzPi88cmVzb3VyY2VfbmFtZT5fd3NoLnB5IGlzIGludm9rZWQuCi0KLUZvciBleGFt
cGxlLCBpZiB0aGUgcmVzb3VyY2UgbmFtZSBpcyAvZXhhbXBsZS9jaGF0LCB0aGUgaGFuZGxlciBk
ZWZpbmVkIGluCi08d2Vic29ja19oYW5kbGVycz4vZXhhbXBsZS9jaGF0X3dzaC5weSBpcyBpbnZv
a2VkLgotCi1BIFdlYiBTb2NrZXQgaGFuZGxlciBpcyBjb21wb3NlZCBvZiB0aGUgZm9sbG93aW5n
IHR3byBmdW5jdGlvbnM6Ci0KLSAgICB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1
ZXN0KQotICAgIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KQotCi13aGVyZToKLSAg
ICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCi0KLXdlYl9zb2NrZXRfZG9fZXh0cmFfaGFu
ZHNoYWtlIGlzIGNhbGxlZCBkdXJpbmcgdGhlIGhhbmRzaGFrZSBhZnRlciB0aGUKLWhlYWRlcnMg
YXJlIHN1Y2Nlc3NmdWxseSBwYXJzZWQgYW5kIFdlYiBTb2NrZXQgcHJvcGVydGllcyAod3NfbG9j
YXRpb24sCi13c19vcmlnaW4sIHdzX3Byb3RvY29sLCBhbmQgd3NfcmVzb3VyY2UpIGFyZSBhZGRl
ZCB0byByZXF1ZXN0LiBBIGhhbmRsZXIKLWNhbiByZWplY3QgdGhlIHJlcXVlc3QgYnkgcmFpc2lu
ZyBhbiBleGNlcHRpb24uCi0KLXdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YSBpcyBjYWxsZWQgYWZ0
ZXIgdGhlIGhhbmRzaGFrZSBjb21wbGV0ZWQKLXN1Y2Nlc3NmdWxseS4gQSBoYW5kbGVyIGNhbiBy
ZWNlaXZlL3NlbmQgbWVzc2FnZXMgZnJvbS90byB0aGUgY2xpZW50Ci11c2luZyByZXF1ZXN0LiBt
b2RfcHl3ZWJzb2NrZXQubXNndXRpbCBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0aWVzCi1mb3IgZGF0
YSB0cmFuc2Zlci4KLQotQSBXZWIgU29ja2V0IGhhbmRsZXIgbXVzdCBiZSB0aHJlYWQtc2FmZSBp
ZiB0aGUgc2VydmVyIChBcGFjaGUgb3IKLXN0YW5kYWxvbmUucHkpIGlzIGNvbmZpZ3VyZWQgdG8g
dXNlIHRocmVhZHMuCi0iIiIKLQotCi0jIHZpOnN0cz00IHN3PTQgZXQgdHc9NzIKSW5kZXg6IFdl
YktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9kaXNwYXRjaC5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvZGlzcGF0Y2gu
cHkJKHJldmlzaW9uIDU1MDU2KQorKysgV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vi
c29ja2V0L2Rpc3BhdGNoLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDIzMSArMCwwIEBACi0jIENv
cHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotCi0iIiJEaXNwYXRjaCBXZWIgU29ja2V0IHJlcXVlc3QuCi0iIiIKLQot
Ci1pbXBvcnQgb3MKLWltcG9ydCByZQotCi1pbXBvcnQgdXRpbAotCi0KLV9TT1VSQ0VfUEFUSF9Q
QVRURVJOID0gcmUuY29tcGlsZShyJyg/aSlfd3NoXC5weSQnKQotX1NPVVJDRV9TVUZGSVggPSAn
X3dzaC5weScKLV9ET19FWFRSQV9IQU5EU0hBS0VfSEFORExFUl9OQU1FID0gJ3dlYl9zb2NrZXRf
ZG9fZXh0cmFfaGFuZHNoYWtlJwotX1RSQU5TRkVSX0RBVEFfSEFORExFUl9OQU1FID0gJ3dlYl9z
b2NrZXRfdHJhbnNmZXJfZGF0YScKLQotCi1jbGFzcyBEaXNwYXRjaEVycm9yKEV4Y2VwdGlvbik6
Ci0gICAgIiIiRXhjZXB0aW9uIGluIGRpc3BhdGNoaW5nIFdlYiBTb2NrZXQgcmVxdWVzdC4iIiIK
LQotICAgIHBhc3MKLQotCi1kZWYgX25vcm1hbGl6ZV9wYXRoKHBhdGgpOgotICAgICIiIk5vcm1h
bGl6ZSBwYXRoLgotCi0gICAgQXJnczoKLSAgICAgICAgcGF0aDogdGhlIHBhdGggdG8gbm9ybWFs
aXplLgotCi0gICAgUGF0aCBpcyBjb252ZXJ0ZWQgdG8gdGhlIGFic29sdXRlIHBhdGguCi0gICAg
VGhlIGlucHV0IHBhdGggY2FuIHVzZSBlaXRoZXIgJ1xcJyBvciAnLycgYXMgdGhlIHNlcGFyYXRv
ci4KLSAgICBUaGUgbm9ybWFsaXplZCBwYXRoIGFsd2F5cyB1c2VzICcvJyByZWdhcmRsZXNzIG9m
IHRoZSBwbGF0Zm9ybS4KLSAgICAiIiIKLQotICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoJ1xcJywg
b3MucGF0aC5zZXApCi0gICAgcGF0aCA9IG9zLnBhdGgucmVhbHBhdGgocGF0aCkKLSAgICBwYXRo
ID0gcGF0aC5yZXBsYWNlKCdcXCcsICcvJykKLSAgICByZXR1cm4gcGF0aAotCi0KLWRlZiBfcGF0
aF90b19yZXNvdXJjZV9jb252ZXJ0ZXIoYmFzZV9kaXIpOgotICAgIGJhc2VfZGlyID0gX25vcm1h
bGl6ZV9wYXRoKGJhc2VfZGlyKQotICAgIGJhc2VfbGVuID0gbGVuKGJhc2VfZGlyKQotICAgIHN1
ZmZpeF9sZW4gPSBsZW4oX1NPVVJDRV9TVUZGSVgpCi0gICAgZGVmIGNvbnZlcnRlcihwYXRoKToK
LSAgICAgICAgaWYgbm90IHBhdGguZW5kc3dpdGgoX1NPVVJDRV9TVUZGSVgpOgotICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcGF0aCA9IF9ub3JtYWxpemVfcGF0aChwYXRoKQotICAg
ICAgICBpZiBub3QgcGF0aC5zdGFydHN3aXRoKGJhc2VfZGlyKToKLSAgICAgICAgICAgIHJldHVy
biBOb25lCi0gICAgICAgIHJldHVybiBwYXRoW2Jhc2VfbGVuOi1zdWZmaXhfbGVuXQotICAgIHJl
dHVybiBjb252ZXJ0ZXIKLQotCi1kZWYgX3NvdXJjZV9maWxlX3BhdGhzKGRpcmVjdG9yeSk6Ci0g
ICAgIiIiWWllbGQgV2ViIFNvY2tldCBIYW5kbGVyIHNvdXJjZSBmaWxlIG5hbWVzIGluIHRoZSBn
aXZlbiBkaXJlY3RvcnkuIiIiCi0KLSAgICBmb3Igcm9vdCwgdW51c2VkX2RpcnMsIGZpbGVzIGlu
IG9zLndhbGsoZGlyZWN0b3J5KToKLSAgICAgICAgZm9yIGJhc2UgaW4gZmlsZXM6Ci0gICAgICAg
ICAgICBwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsIGJhc2UpCi0gICAgICAgICAgICBpZiBfU09V
UkNFX1BBVEhfUEFUVEVSTi5zZWFyY2gocGF0aCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgcGF0
aAotCi0KLWRlZiBfc291cmNlKHNvdXJjZV9zdHIpOgotICAgICIiIlNvdXJjZSBhIGhhbmRsZXIg
ZGVmaW5pdGlvbiBzdHJpbmcuIiIiCi0KLSAgICBnbG9iYWxfZGljID0ge30KLSAgICB0cnk6Ci0g
ICAgICAgIGV4ZWMgc291cmNlX3N0ciBpbiBnbG9iYWxfZGljCi0gICAgZXhjZXB0IEV4Y2VwdGlv
bjoKLSAgICAgICAgcmFpc2UgRGlzcGF0Y2hFcnJvcignRXJyb3IgaW4gc291cmNpbmcgaGFuZGxl
cjonICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmdldF9zdGFja190cmFjZSgp
KQotICAgIHJldHVybiAoX2V4dHJhY3RfaGFuZGxlcihnbG9iYWxfZGljLCBfRE9fRVhUUkFfSEFO
RFNIQUtFX0hBTkRMRVJfTkFNRSksCi0gICAgICAgICAgICBfZXh0cmFjdF9oYW5kbGVyKGdsb2Jh
bF9kaWMsIF9UUkFOU0ZFUl9EQVRBX0hBTkRMRVJfTkFNRSkpCi0KLQotZGVmIF9leHRyYWN0X2hh
bmRsZXIoZGljLCBuYW1lKToKLSAgICBpZiBuYW1lIG5vdCBpbiBkaWM6Ci0gICAgICAgIHJhaXNl
IERpc3BhdGNoRXJyb3IoJyVzIGlzIG5vdCBkZWZpbmVkLicgJSBuYW1lKQotICAgIGhhbmRsZXIg
PSBkaWNbbmFtZV0KLSAgICBpZiBub3QgY2FsbGFibGUoaGFuZGxlcik6Ci0gICAgICAgIHJhaXNl
IERpc3BhdGNoRXJyb3IoJyVzIGlzIG5vdCBjYWxsYWJsZS4nICUgbmFtZSkKLSAgICByZXR1cm4g
aGFuZGxlcgotCi0KLWNsYXNzIERpc3BhdGNoZXIob2JqZWN0KToKLSAgICAiIiJEaXNwYXRjaGVz
IFdlYiBTb2NrZXQgcmVxdWVzdHMuCi0KLSAgICBUaGlzIGNsYXNzIG1haW50YWlucyBhIG1hcCBm
cm9tIHJlc291cmNlIG5hbWUgdG8gaGFuZGxlcnMuCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0
X18oc2VsZiwgcm9vdF9kaXIsIHNjYW5fZGlyPU5vbmUpOgotICAgICAgICAiIiJDb25zdHJ1Y3Qg
YW4gaW5zdGFuY2UuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICAgIHJvb3RfZGlyOiBUaGUg
ZGlyZWN0b3J5IHdoZXJlIGhhbmRsZXIgZGVmaW5pdGlvbiBmaWxlcyBhcmUKLSAgICAgICAgICAg
ICAgICAgICAgICBwbGFjZWQuCi0gICAgICAgICAgICBzY2FuX2RpcjogVGhlIGRpcmVjdG9yeSB3
aGVyZSBoYW5kbGVyIGRlZmluaXRpb24gZmlsZXMgYXJlCi0gICAgICAgICAgICAgICAgICAgICAg
c2VhcmNoZWQuIHNjYW5fZGlyIG11c3QgYmUgYSBkaXJlY3RvcnkgdW5kZXIgcm9vdF9kaXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHJvb3RfZGlyIGl0c2VsZi4gIElmIHNjYW5f
ZGlyIGlzIE5vbmUsIHJvb3RfZGlyCi0gICAgICAgICAgICAgICAgICAgICAgaXMgdXNlZCBhcyBz
Y2FuX2Rpci4gc2Nhbl9kaXIgY2FuIGJlIHVzZWZ1bCBpbiBzYXZpbmcKLSAgICAgICAgICAgICAg
ICAgICAgICBzY2FuIHRpbWUgd2hlbiByb290X2RpciBjb250YWlucyBtYW55IHN1YmRpcmVjdG9y
aWVzLgotICAgICAgICAiIiIKLQotICAgICAgICBzZWxmLl9oYW5kbGVycyA9IHt9Ci0gICAgICAg
IHNlbGYuX3NvdXJjZV93YXJuaW5ncyA9IFtdCi0gICAgICAgIGlmIHNjYW5fZGlyIGlzIE5vbmU6
Ci0gICAgICAgICAgICBzY2FuX2RpciA9IHJvb3RfZGlyCi0gICAgICAgIGlmIG5vdCBvcy5wYXRo
LnJlYWxwYXRoKHNjYW5fZGlyKS5zdGFydHN3aXRoKAotICAgICAgICAgICAgICAgIG9zLnBhdGgu
cmVhbHBhdGgocm9vdF9kaXIpKToKLSAgICAgICAgICAgIHJhaXNlIERpc3BhdGNoRXJyb3IoJ3Nj
YW5fZGlyOiVzIG11c3QgYmUgYSBkaXJlY3RvcnkgdW5kZXIgJwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAncm9vdF9kaXI6JXMuJyAlIChzY2FuX2Rpciwgcm9vdF9kaXIpKQotICAg
ICAgICBzZWxmLl9zb3VyY2VfZmlsZXNfaW5fZGlyKHJvb3RfZGlyLCBzY2FuX2RpcikKLQotICAg
IGRlZiBhZGRfcmVzb3VyY2VfcGF0aF9hbGlhcyhzZWxmLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhbGlhc19yZXNvdXJjZV9wYXRoLCBleGlzdGluZ19yZXNvdXJjZV9wYXRoKToK
LSAgICAgICAgIiIiQWRkIHJlc291cmNlIHBhdGggYWxpYXMuCi0KLSAgICAgICAgT25jZSBhZGRl
ZCwgcmVxdWVzdCB0byBhbGlhc19yZXNvdXJjZV9wYXRoIHdvdWxkIGJlIGhhbmRsZWQgYnkKLSAg
ICAgICAgaGFuZGxlciByZWdpc3RlcmVkIGZvciBleGlzdGluZ19yZXNvdXJjZV9wYXRoLgotCi0g
ICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBhbGlhc19yZXNvdXJjZV9wYXRoOiBhbGlhcyByZXNv
dXJjZSBwYXRoCi0gICAgICAgICAgICBleGlzdGluZ19yZXNvdXJjZV9wYXRoOiBleGlzdGluZyBy
ZXNvdXJjZSBwYXRoCi0gICAgICAgICIiIgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBoYW5k
bGVyID0gc2VsZi5faGFuZGxlcnNbZXhpc3RpbmdfcmVzb3VyY2VfcGF0aF0KLSAgICAgICAgICAg
IHNlbGYuX2hhbmRsZXJzW2FsaWFzX3Jlc291cmNlX3BhdGhdID0gaGFuZGxlcgotICAgICAgICBl
eGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBEaXNwYXRjaEVycm9yKCdObyBoYW5k
bGVyIGZvcjogJXInICUgZXhpc3RpbmdfcmVzb3VyY2VfcGF0aCkKLQotICAgIGRlZiBzb3VyY2Vf
d2FybmluZ3Moc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB3YXJuaW5ncyBpbiBzb3VyY2luZyBo
YW5kbGVycy4iIiIKLQotICAgICAgICByZXR1cm4gc2VsZi5fc291cmNlX3dhcm5pbmdzCi0KLSAg
ICBkZWYgZG9fZXh0cmFfaGFuZHNoYWtlKHNlbGYsIHJlcXVlc3QpOgotICAgICAgICAiIiJEbyBl
eHRyYSBjaGVja2luZyBpbiBXZWIgU29ja2V0IGhhbmRzaGFrZS4KLQotICAgICAgICBTZWxlY3Qg
YSBoYW5kbGVyIGJhc2VkIG9uIHJlcXVlc3QudXJpIGFuZCBjYWxsIGl0cwotICAgICAgICB3ZWJf
c29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSBmdW5jdGlvbi4KLQotICAgICAgICBBcmdzOgotICAg
ICAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgotICAgICAgICAiIiIKLQotICAg
ICAgICBkb19leHRyYV9oYW5kc2hha2VfLCB1bnVzZWRfdHJhbnNmZXJfZGF0YSA9IHNlbGYuX2hh
bmRsZXIocmVxdWVzdCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZG9fZXh0cmFfaGFuZHNo
YWtlXyhyZXF1ZXN0KQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgotICAgICAgICAgICAg
dXRpbC5wcmVwZW5kX21lc3NhZ2VfdG9fZXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAn
JXMgcmFpc2VkIGV4Y2VwdGlvbiBmb3IgJXM6ICcgJSAoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0RPX0VYVFJBX0hBTkRTSEFLRV9IQU5ETEVSX05BTUUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVxdWVzdC53c19yZXNvdXJjZSksCi0gICAgICAgICAgICAgICAgICAgIGUp
Ci0gICAgICAgICAgICByYWlzZQotCi0gICAgZGVmIHRyYW5zZmVyX2RhdGEoc2VsZiwgcmVxdWVz
dCk6Ci0gICAgICAgICIiIkxldCBhIGhhbmRsZXIgdHJhbnNmZXJfZGF0YSB3aXRoIGEgV2ViIFNv
Y2tldCBjbGllbnQuCi0KLSAgICAgICAgU2VsZWN0IGEgaGFuZGxlciBiYXNlZCBvbiByZXF1ZXN0
LndzX3Jlc291cmNlIGFuZCBjYWxsIGl0cwotICAgICAgICB3ZWJfc29ja2V0X3RyYW5zZmVyX2Rh
dGEgZnVuY3Rpb24uCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICAgIHJlcXVlc3Q6IG1vZF9w
eXRob24gcmVxdWVzdC4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgdW51c2VkX2RvX2V4dHJhX2hh
bmRzaGFrZSwgdHJhbnNmZXJfZGF0YV8gPSBzZWxmLl9oYW5kbGVyKHJlcXVlc3QpCi0gICAgICAg
IHRyeToKLSAgICAgICAgICAgIHRyYW5zZmVyX2RhdGFfKHJlcXVlc3QpCi0gICAgICAgIGV4Y2Vw
dCBFeGNlcHRpb24sIGU6Ci0gICAgICAgICAgICB1dGlsLnByZXBlbmRfbWVzc2FnZV90b19leGNl
cHRpb24oCi0gICAgICAgICAgICAgICAgICAgICclcyByYWlzZWQgZXhjZXB0aW9uIGZvciAlczog
JyAlICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVFJBTlNGRVJfREFUQV9IQU5ETEVS
X05BTUUsIHJlcXVlc3Qud3NfcmVzb3VyY2UpLAotICAgICAgICAgICAgICAgICAgICBlKQotICAg
ICAgICAgICAgcmFpc2UKLQotICAgIGRlZiBfaGFuZGxlcihzZWxmLCByZXF1ZXN0KToKLSAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgd3NfcmVzb3VyY2VfcGF0aCA9IHJlcXVlc3Qud3NfcmVzb3Vy
Y2Uuc3BsaXQoJz8nLCAxKVswXQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZXJzW3dz
X3Jlc291cmNlX3BhdGhdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHJh
aXNlIERpc3BhdGNoRXJyb3IoJ05vIGhhbmRsZXIgZm9yOiAlcicgJSByZXF1ZXN0LndzX3Jlc291
cmNlKQotCi0gICAgZGVmIF9zb3VyY2VfZmlsZXNfaW5fZGlyKHNlbGYsIHJvb3RfZGlyLCBzY2Fu
X2Rpcik6Ci0gICAgICAgICIiIlNvdXJjZSBhbGwgdGhlIGhhbmRsZXIgc291cmNlIGZpbGVzIGlu
IHRoZSBzY2FuX2RpciBkaXJlY3RvcnkuCi0KLSAgICAgICAgVGhlIHJlc291cmNlIHBhdGggaXMg
ZGV0ZXJtaW5lZCByZWxhdGl2ZSB0byByb290X2Rpci4KLSAgICAgICAgIiIiCi0KLSAgICAgICAg
dG9fcmVzb3VyY2UgPSBfcGF0aF90b19yZXNvdXJjZV9jb252ZXJ0ZXIocm9vdF9kaXIpCi0gICAg
ICAgIGZvciBwYXRoIGluIF9zb3VyY2VfZmlsZV9wYXRocyhzY2FuX2Rpcik6Ci0gICAgICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICAgICAgaGFuZGxlcnMgPSBfc291cmNlKG9wZW4ocGF0aCkucmVh
ZCgpKQotICAgICAgICAgICAgZXhjZXB0IERpc3BhdGNoRXJyb3IsIGU6Ci0gICAgICAgICAgICAg
ICAgc2VsZi5fc291cmNlX3dhcm5pbmdzLmFwcGVuZCgnJXM6ICVzJyAlIChwYXRoLCBlKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgc2VsZi5faGFuZGxlcnNbdG9fcmVz
b3VyY2UocGF0aCldID0gaGFuZGxlcnMKLQotCi0jIHZpOnN0cz00IHN3PTQgZXQKSW5kZXg6IFdl
YktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFr
ZS5weQkocmV2aXNpb24gNTUwNTYpCisrKyBXZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3
ZWJzb2NrZXQvaGFuZHNoYWtlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyMCArMCwwIEBACi0j
IENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwot
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0j
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgot
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotCi0iIiJXZWIgU29ja2V0IGhhbmRzaGFraW5nLgotCi1Ob3RlOiBy
ZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUvcmVhZCBhcmUgdXNlZCBpbiB0aGlzIG1vZHVsZSwgZXZl
biB0aG91Z2gKLW1vZF9weXRob24gZG9jdW1lbnQgc2F5cyB0aGF0IHRoZXkgc2hvdWxkIGJlIHVz
ZWQgb25seSBpbiBjb25uZWN0aW9uIGhhbmRsZXJzLgotVW5mb3J0dW5hdGVseSwgd2UgaGF2ZSBu
byBvdGhlciBvcHRpb25zLiBGb3IgZXhhbXBsZSwgcmVxdWVzdC53cml0ZS9yZWFkIGFyZQotbm90
IHN1aXRhYmxlIGJlY2F1c2UgdGhleSBkb24ndCBhbGxvdyBkaXJlY3QgcmF3IGJ5dGVzIHdyaXRp
bmcvcmVhZGluZy4KLSIiIgotCi0KLWltcG9ydCByZQotCi1pbXBvcnQgdXRpbAotCi0KLV9ERUZB
VUxUX1dFQl9TT0NLRVRfUE9SVCA9IDgwCi1fREVGQVVMVF9XRUJfU09DS0VUX1NFQ1VSRV9QT1JU
ID0gNDQzCi1fV0VCX1NPQ0tFVF9TQ0hFTUUgPSAnd3MnCi1fV0VCX1NPQ0tFVF9TRUNVUkVfU0NI
RU1FID0gJ3dzcycKLQotX01BTkRBVE9SWV9IRUFERVJTID0gWwotICAgICMga2V5LCBleHBlY3Rl
ZCB2YWx1ZSBvciBOb25lCi0gICAgWydVcGdyYWRlJywgJ1dlYlNvY2tldCddLAotICAgIFsnQ29u
bmVjdGlvbicsICdVcGdyYWRlJ10sCi0gICAgWydIb3N0JywgTm9uZV0sCi0gICAgWydPcmlnaW4n
LCBOb25lXSwKLV0KLQotX0ZJUlNUX0ZJVkVfTElORVMgPSBtYXAocmUuY29tcGlsZSwgWwotICAg
IHInXkdFVCAvW1xTXSogSFRUUC8xLjFcclxuJCcsCi0gICAgcideVXBncmFkZTogV2ViU29ja2V0
XHJcbiQnLAotICAgIHInXkNvbm5lY3Rpb246IFVwZ3JhZGVcclxuJCcsCi0gICAgcideSG9zdDog
W1xTXStcclxuJCcsCi0gICAgcideT3JpZ2luOiBbXFNdK1xyXG4kJywKLV0pCi0KLV9TSVhUSF9B
TkRfTEFURVIgPSByZS5jb21waWxlKAotICAgIHInXicKLSAgICByJyhXZWJTb2NrZXQtUHJvdG9j
b2w6IFtceDIwLVx4N2VdK1xyXG4pPycKLSAgICByJyhDb29raWU6IFteXHJdKlxyXG4pKicKLSAg
ICByJyhDb29raWUyOiBbXlxyXSpcclxuKT8nCi0gICAgcicoQ29va2llOiBbXlxyXSpcclxuKSon
Ci0gICAgcidcclxuJykKLQotCi1kZWYgX2RlZmF1bHRfcG9ydChpc19zZWN1cmUpOgotICAgIGlm
IGlzX3NlY3VyZToKLSAgICAgICAgcmV0dXJuIF9ERUZBVUxUX1dFQl9TT0NLRVRfU0VDVVJFX1BP
UlQKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gX0RFRkFVTFRfV0VCX1NPQ0tFVF9QT1JUCi0K
LQotY2xhc3MgSGFuZHNoYWtlRXJyb3IoRXhjZXB0aW9uKToKLSAgICAiIiJFeGNlcHRpb24gaW4g
V2ViIFNvY2tldCBIYW5kc2hha2UuIiIiCi0KLSAgICBwYXNzCi0KLQotZGVmIF92YWxpZGF0ZV9w
cm90b2NvbChwcm90b2NvbCk6Ci0gICAgIiIiVmFsaWRhdGUgV2ViU29ja2V0LVByb3RvY29sIHN0
cmluZy4iIiIKLQotICAgIGlmIG5vdCBwcm90b2NvbDoKLSAgICAgICAgcmFpc2UgSGFuZHNoYWtl
RXJyb3IoJ0ludmFsaWQgV2ViU29ja2V0LVByb3RvY29sOiBlbXB0eScpCi0gICAgZm9yIGMgaW4g
cHJvdG9jb2w6Ci0gICAgICAgIGlmIG5vdCAweDIwIDw9IG9yZChjKSA8PSAweDdlOgotICAgICAg
ICAgICAgcmFpc2UgSGFuZHNoYWtlRXJyb3IoJ0lsbGVnYWwgY2hhcmFjdGVyIGluIHByb3RvY29s
OiAlcicgJSBjKQotCi0KLWNsYXNzIEhhbmRzaGFrZXIob2JqZWN0KToKLSAgICAiIiJUaGlzIGNs
YXNzIHBlcmZvcm1zIFdlYiBTb2NrZXQgaGFuZHNoYWtlLiIiIgotCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIHJlcXVlc3QsIGRpc3BhdGNoZXIsIHN0cmljdD1GYWxzZSk6Ci0gICAgICAgICIiIkNv
bnN0cnVjdCBhbiBpbnN0YW5jZS4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgICAgcmVxdWVz
dDogbW9kX3B5dGhvbiByZXF1ZXN0LgotICAgICAgICAgICAgZGlzcGF0Y2hlcjogRGlzcGF0Y2hl
ciAoZGlzcGF0Y2guRGlzcGF0Y2hlcikuCi0gICAgICAgICAgICBzdHJpY3Q6IFN0cmljdGx5IGNo
ZWNrIGhhbmRzaGFrZSByZXF1ZXN0LiBEZWZhdWx0OiBGYWxzZS4KLSAgICAgICAgICAgICAgICBJ
ZiBUcnVlLCByZXF1ZXN0LmNvbm5lY3Rpb24gbXVzdCBwcm92aWRlIGdldF9tZW1vcml6ZWRfbGlu
ZXMKLSAgICAgICAgICAgICAgICBtZXRob2QuCi0KLSAgICAgICAgSGFuZHNoYWtlciB3aWxsIGFk
ZCBhdHRyaWJ1dGVzIHN1Y2ggYXMgd3NfcmVzb3VyY2UgaW4gcGVyZm9ybWluZwotICAgICAgICBo
YW5kc2hha2UuCi0gICAgICAgICIiIgotCi0gICAgICAgIHNlbGYuX3JlcXVlc3QgPSByZXF1ZXN0
Ci0gICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIgPSBkaXNwYXRjaGVyCi0gICAgICAgIHNlbGYuX3N0
cmljdCA9IHN0cmljdAotCi0gICAgZGVmIGRvX2hhbmRzaGFrZShzZWxmKToKLSAgICAgICAgIiIi
UGVyZm9ybSBXZWIgU29ja2V0IEhhbmRzaGFrZS4iIiIKLQotICAgICAgICBzZWxmLl9jaGVja19o
ZWFkZXJfbGluZXMoKQotICAgICAgICBzZWxmLl9zZXRfcmVzb3VyY2UoKQotICAgICAgICBzZWxm
Ll9zZXRfb3JpZ2luKCkKLSAgICAgICAgc2VsZi5fc2V0X2xvY2F0aW9uKCkKLSAgICAgICAgc2Vs
Zi5fc2V0X3Byb3RvY29sKCkKLSAgICAgICAgc2VsZi5fZGlzcGF0Y2hlci5kb19leHRyYV9oYW5k
c2hha2Uoc2VsZi5fcmVxdWVzdCkKLSAgICAgICAgc2VsZi5fc2VuZF9oYW5kc2hha2UoKQotCi0g
ICAgZGVmIF9zZXRfcmVzb3VyY2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfcmVz
b3VyY2UgPSBzZWxmLl9yZXF1ZXN0LnVyaQotCi0gICAgZGVmIF9zZXRfb3JpZ2luKHNlbGYpOgot
ICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX29yaWdpbiA9IHNlbGYuX3JlcXVlc3QuaGVhZGVyc19p
blsnT3JpZ2luJ10KLQotICAgIGRlZiBfc2V0X2xvY2F0aW9uKHNlbGYpOgotICAgICAgICBsb2Nh
dGlvbl9wYXJ0cyA9IFtdCi0gICAgICAgIGlmIHNlbGYuX3JlcXVlc3QuaXNfaHR0cHMoKToKLSAg
ICAgICAgICAgIGxvY2F0aW9uX3BhcnRzLmFwcGVuZChfV0VCX1NPQ0tFVF9TRUNVUkVfU0NIRU1F
KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbG9jYXRpb25fcGFydHMuYXBwZW5kKF9XRUJf
U09DS0VUX1NDSEVNRSkKLSAgICAgICAgbG9jYXRpb25fcGFydHMuYXBwZW5kKCc6Ly8nKQotICAg
ICAgICBob3N0LCBwb3J0ID0gc2VsZi5fcGFyc2VfaG9zdF9oZWFkZXIoKQotICAgICAgICBjb25u
ZWN0aW9uX3BvcnQgPSBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ubG9jYWxfYWRkclsxXQotICAg
ICAgICBpZiBwb3J0ICE9IGNvbm5lY3Rpb25fcG9ydDoKLSAgICAgICAgICAgIHJhaXNlIEhhbmRz
aGFrZUVycm9yKCdIZWFkZXIvY29ubmVjdGlvbiBwb3J0IG1pc21hdGNoOiAlZC8lZCcgJQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvcnQsIGNvbm5lY3Rpb25fcG9ydCkpCi0g
ICAgICAgIGxvY2F0aW9uX3BhcnRzLmFwcGVuZChob3N0KQotICAgICAgICBpZiAocG9ydCAhPSBf
ZGVmYXVsdF9wb3J0KHNlbGYuX3JlcXVlc3QuaXNfaHR0cHMoKSkpOgotICAgICAgICAgICAgbG9j
YXRpb25fcGFydHMuYXBwZW5kKCc6JykKLSAgICAgICAgICAgIGxvY2F0aW9uX3BhcnRzLmFwcGVu
ZChzdHIocG9ydCkpCi0gICAgICAgIGxvY2F0aW9uX3BhcnRzLmFwcGVuZChzZWxmLl9yZXF1ZXN0
LnVyaSkKLSAgICAgICAgc2VsZi5fcmVxdWVzdC53c19sb2NhdGlvbiA9ICcnLmpvaW4obG9jYXRp
b25fcGFydHMpCi0KLSAgICBkZWYgX3BhcnNlX2hvc3RfaGVhZGVyKHNlbGYpOgotICAgICAgICBm
aWVsZHMgPSBzZWxmLl9yZXF1ZXN0LmhlYWRlcnNfaW5bJ0hvc3QnXS5zcGxpdCgnOicsIDEpCi0g
ICAgICAgIGlmIGxlbihmaWVsZHMpID09IDE6Ci0gICAgICAgICAgICByZXR1cm4gZmllbGRzWzBd
LCBfZGVmYXVsdF9wb3J0KHNlbGYuX3JlcXVlc3QuaXNfaHR0cHMoKSkKLSAgICAgICAgdHJ5Ogot
ICAgICAgICAgICAgcmV0dXJuIGZpZWxkc1swXSwgaW50KGZpZWxkc1sxXSkKLSAgICAgICAgZXhj
ZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFcnJvcignSW52
YWxpZCBwb3J0IG51bWJlciBmb3JtYXQ6ICVyJyAlIGUpCi0KLSAgICBkZWYgX3NldF9wcm90b2Nv
bChzZWxmKToKLSAgICAgICAgcHJvdG9jb2wgPSBzZWxmLl9yZXF1ZXN0LmhlYWRlcnNfaW4uZ2V0
KCdXZWJTb2NrZXQtUHJvdG9jb2wnKQotICAgICAgICBpZiBwcm90b2NvbCBpcyBub3QgTm9uZToK
LSAgICAgICAgICAgIF92YWxpZGF0ZV9wcm90b2NvbChwcm90b2NvbCkKLSAgICAgICAgc2VsZi5f
cmVxdWVzdC53c19wcm90b2NvbCA9IHByb3RvY29sCi0KLSAgICBkZWYgX3NlbmRfaGFuZHNoYWtl
KHNlbGYpOgotICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoCi0gICAgICAg
ICAgICAgICAgJ0hUVFAvMS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4n
KQotICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ1VwZ3JhZGU6IFdlYlNv
Y2tldFxyXG4nKQotICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ0Nvbm5l
Y3Rpb246IFVwZ3JhZGVcclxuJykKLSAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndy
aXRlKCdXZWJTb2NrZXQtT3JpZ2luOiAnKQotICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rp
b24ud3JpdGUoc2VsZi5fcmVxdWVzdC53c19vcmlnaW4pCi0gICAgICAgIHNlbGYuX3JlcXVlc3Qu
Y29ubmVjdGlvbi53cml0ZSgnXHJcbicpCi0gICAgICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlv
bi53cml0ZSgnV2ViU29ja2V0LUxvY2F0aW9uOiAnKQotICAgICAgICBzZWxmLl9yZXF1ZXN0LmNv
bm5lY3Rpb24ud3JpdGUoc2VsZi5fcmVxdWVzdC53c19sb2NhdGlvbikKLSAgICAgICAgc2VsZi5f
cmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdcclxuJykKLSAgICAgICAgaWYgc2VsZi5fcmVxdWVz
dC53c19wcm90b2NvbDoKLSAgICAgICAgICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53cml0
ZSgnV2ViU29ja2V0LVByb3RvY29sOiAnKQotICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25u
ZWN0aW9uLndyaXRlKHNlbGYuX3JlcXVlc3Qud3NfcHJvdG9jb2wpCi0gICAgICAgICAgICBzZWxm
Ll9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ1xyXG4nKQotICAgICAgICBzZWxmLl9yZXF1ZXN0
LmNvbm5lY3Rpb24ud3JpdGUoJ1xyXG4nKQotCi0gICAgZGVmIF9jaGVja19oZWFkZXJfbGluZXMo
c2VsZik6Ci0gICAgICAgIGZvciBrZXksIGV4cGVjdGVkX3ZhbHVlIGluIF9NQU5EQVRPUllfSEVB
REVSUzoKLSAgICAgICAgICAgIGFjdHVhbF92YWx1ZSA9IHNlbGYuX3JlcXVlc3QuaGVhZGVyc19p
bi5nZXQoa2V5KQotICAgICAgICAgICAgaWYgbm90IGFjdHVhbF92YWx1ZToKLSAgICAgICAgICAg
ICAgICByYWlzZSBIYW5kc2hha2VFcnJvcignSGVhZGVyICVzIGlzIG5vdCBkZWZpbmVkJyAlIGtl
eSkKLSAgICAgICAgICAgIGlmIGV4cGVjdGVkX3ZhbHVlOgotICAgICAgICAgICAgICAgIGlmIGFj
dHVhbF92YWx1ZSAhPSBleHBlY3RlZF92YWx1ZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2Ug
SGFuZHNoYWtlRXJyb3IoJ0lsbGVnYWwgdmFsdWUgZm9yIGhlYWRlciAlczogJXMnICUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleSwgYWN0dWFsX3ZhbHVlKSkK
LSAgICAgICAgaWYgc2VsZi5fc3RyaWN0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAg
ICAgIGxpbmVzID0gc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLmdldF9tZW1vcml6ZWRfbGluZXMo
KQotICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgotICAgICAgICAgICAgICAg
IHV0aWwucHJlcGVuZF9tZXNzYWdlX3RvX2V4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAg
J1N0cmljdCBoYW5kc2hha2UgaXMgc3BlY2lmaWVkIGJ1dCB0aGUgY29ubmVjdGlvbiAnCi0gICAg
ICAgICAgICAgICAgICAgICdkb2VzblwndCBwcm92aWRlIGdldF9tZW1vcml6ZWRfbGluZXMoKScs
IGUpCi0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIHNlbGYuX2NoZWNrX2ZpcnN0
X2xpbmVzKGxpbmVzKQotCi0gICAgZGVmIF9jaGVja19maXJzdF9saW5lcyhzZWxmLCBsaW5lcyk6
Ci0gICAgICAgIGlmIGxlbihsaW5lcykgPCBsZW4oX0ZJUlNUX0ZJVkVfTElORVMpOgotICAgICAg
ICAgICAgcmFpc2UgSGFuZHNoYWtlRXJyb3IoJ1RvbyBmZXcgaGVhZGVyIGxpbmVzOiAlZCcgJSBs
ZW4obGluZXMpKQotICAgICAgICBmb3IgbGluZSwgcmVnZXhwIGluIHppcChsaW5lcywgX0ZJUlNU
X0ZJVkVfTElORVMpOgotICAgICAgICAgICAgaWYgbm90IHJlZ2V4cC5zZWFyY2gobGluZSk6Ci0g
ICAgICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXJyb3IoJ1VuZXhwZWN0ZWQgaGVhZGVyOiAl
ciBkb2VzblwndCBtYXRjaCAlcicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAlIChsaW5lLCByZWdleHAucGF0dGVybikpCi0gICAgICAgIHNpeHRoX2FuZF9sYXRlciA9ICcn
LmpvaW4obGluZXNbNTpdKQotICAgICAgICBpZiBub3QgX1NJWFRIX0FORF9MQVRFUi5zZWFyY2go
c2l4dGhfYW5kX2xhdGVyKToKLSAgICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUVycm9yKCdVbmV4
cGVjdGVkIGhlYWRlcjogJXIgZG9lc25cJ3QgbWF0Y2ggJXInCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAlIChzaXh0aF9hbmRfbGF0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfU0lYVEhfQU5EX0xBVEVSLnBhdHRlcm4pKQotCi0KLSMgdmk6c3RzPTQg
c3c9NCBldApJbmRleDogV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2hl
YWRlcnBhcnNlcmhhbmRsZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvcHl3ZWJzb2Nr
ZXQvbW9kX3B5d2Vic29ja2V0L2hlYWRlcnBhcnNlcmhhbmRsZXIucHkJKHJldmlzaW9uIDU1MDU2
KQorKysgV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2hlYWRlcnBhcnNl
cmhhbmRsZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsOTkgKzAsMCBAQAotIyBDb3B5cmlnaHQg
MjAwOSwgR29vZ2xlIEluYy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLQotIiIiUHl0aG9uSGVhZGVyUGFyc2VySGFuZGxlciBmb3IgbW9kX3B5d2Vic29ja2V0
LgotCi1BcGFjaGUgSFRUUCBTZXJ2ZXIgYW5kIG1vZF9weXRob24gbXVzdCBiZSBjb25maWd1cmVk
IHN1Y2ggdGhhdCB0aGlzCi1mdW5jdGlvbiBpcyBjYWxsZWQgdG8gaGFuZGxlIFdlYiBTb2NrZXQg
cmVxdWVzdC4KLSIiIgotCi0KLWZyb20gbW9kX3B5dGhvbiBpbXBvcnQgYXBhY2hlCi0KLWltcG9y
dCBkaXNwYXRjaAotaW1wb3J0IGhhbmRzaGFrZQotaW1wb3J0IHV0aWwKLQotCi0jIFB5dGhvbk9w
dGlvbiB0byBzcGVjaWZ5IHRoZSBoYW5kbGVyIHJvb3QgZGlyZWN0b3J5LgotX1BZT1BUX0hBTkRM
RVJfUk9PVCA9ICdtb2RfcHl3ZWJzb2NrZXQuaGFuZGxlcl9yb290JwotCi0jIFB5dGhvbk9wdGlv
biB0byBzcGVjaWZ5IHRoZSBoYW5kbGVyIHNjYW4gZGlyZWN0b3J5LgotIyBUaGlzIG11c3QgYmUg
YSBkaXJlY3RvcnkgdW5kZXIgdGhlIHJvb3QgZGlyZWN0b3J5LgotIyBUaGUgZGVmYXVsdCBpcyB0
aGUgcm9vdCBkaXJlY3RvcnkuCi1fUFlPUFRfSEFORExFUl9TQ0FOID0gJ21vZF9weXdlYnNvY2tl
dC5oYW5kbGVyX3NjYW4nCi0KLQotZGVmIF9jcmVhdGVfZGlzcGF0Y2hlcigpOgotICAgIF9IQU5E
TEVSX1JPT1QgPSBhcGFjaGUubWFpbl9zZXJ2ZXIuZ2V0X29wdGlvbnMoKS5nZXQoCi0gICAgICAg
ICAgICBfUFlPUFRfSEFORExFUl9ST09ULCBOb25lKQotICAgIGlmIG5vdCBfSEFORExFUl9ST09U
OgotICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1B5dGhvbk9wdGlvbiAlcyBpcyBub3QgZGVmaW5l
ZCcgJSBfUFlPUFRfSEFORExFUl9ST09ULAotICAgICAgICAgICAgICAgICAgICAgICAgYXBhY2hl
LkFQTE9HX0VSUikKLSAgICBfSEFORExFUl9TQ0FOID0gYXBhY2hlLm1haW5fc2VydmVyLmdldF9v
cHRpb25zKCkuZ2V0KAotICAgICAgICAgICAgX1BZT1BUX0hBTkRMRVJfU0NBTiwgX0hBTkRMRVJf
Uk9PVCkKLSAgICBkaXNwYXRjaGVyID0gZGlzcGF0Y2guRGlzcGF0Y2hlcihfSEFORExFUl9ST09U
LCBfSEFORExFUl9TQ0FOKQotICAgIGZvciB3YXJuaW5nIGluIGRpc3BhdGNoZXIuc291cmNlX3dh
cm5pbmdzKCk6Ci0gICAgICAgIGFwYWNoZS5sb2dfZXJyb3IoJ21vZF9weXdlYnNvY2tldDogJXMn
ICUgd2FybmluZywgYXBhY2hlLkFQTE9HX1dBUk5JTkcpCi0gICAgcmV0dXJuIGRpc3BhdGNoZXIK
LQotCi0jIEluaXRpYWxpemUKLV9kaXNwYXRjaGVyID0gX2NyZWF0ZV9kaXNwYXRjaGVyKCkKLQot
Ci1kZWYgaGVhZGVycGFyc2VyaGFuZGxlcihyZXF1ZXN0KToKLSAgICAiIiJIYW5kbGUgcmVxdWVz
dC4KLQotICAgIEFyZ3M6Ci0gICAgICAgIHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVzdC4KLQot
ICAgIFRoaXMgZnVuY3Rpb24gaXMgbmFtZWQgaGVhZGVycGFyc2VyaGFuZGxlciBiZWNhdXNlIGl0
IGlzIHRoZSBkZWZhdWx0IG5hbWUKLSAgICBmb3IgYSBQeXRob25IZWFkZXJQYXJzZXJIYW5kbGVy
LgotICAgICIiIgotCi0gICAgdHJ5OgotICAgICAgICBoYW5kc2hha2VyID0gaGFuZHNoYWtlLkhh
bmRzaGFrZXIocmVxdWVzdCwgX2Rpc3BhdGNoZXIpCi0gICAgICAgIGhhbmRzaGFrZXIuZG9faGFu
ZHNoYWtlKCkKLSAgICAgICAgcmVxdWVzdC5sb2dfZXJyb3IoJ21vZF9weXdlYnNvY2tldDogcmVz
b3VyY2U6ICVyJyAlIHJlcXVlc3Qud3NfcmVzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwYWNoZS5BUExPR19ERUJVRykKLSAgICAgICAgX2Rpc3BhdGNoZXIudHJhbnNmZXJfZGF0
YShyZXF1ZXN0KQotICAgIGV4Y2VwdCBoYW5kc2hha2UuSGFuZHNoYWtlRXJyb3IsIGU6Ci0gICAg
ICAgICMgSGFuZHNoYWtlIGZvciB3cy93c3MgZmFpbGVkLgotICAgICAgICAjIEJ1dCB0aGUgcmVx
dWVzdCBjYW4gYmUgdmFsaWQgaHR0cC9odHRwcyByZXF1ZXN0LgotICAgICAgICByZXF1ZXN0Lmxv
Z19lcnJvcignbW9kX3B5d2Vic29ja2V0OiAlcycgJSBlLCBhcGFjaGUuQVBMT0dfSU5GTykKLSAg
ICAgICAgcmV0dXJuIGFwYWNoZS5ERUNMSU5FRAotICAgIGV4Y2VwdCBkaXNwYXRjaC5EaXNwYXRj
aEVycm9yLCBlOgotICAgICAgICByZXF1ZXN0LmxvZ19lcnJvcignbW9kX3B5d2Vic29ja2V0OiAl
cycgJSBlLCBhcGFjaGUuQVBMT0dfV0FSTklORykKLSAgICAgICAgcmV0dXJuIGFwYWNoZS5ERUNM
SU5FRAotICAgIHJldHVybiBhcGFjaGUuRE9ORSAgIyBSZXR1cm4gRE9ORSBzdWNoIHRoYXQgbm8g
b3RoZXIgaGFuZGxlcnMgYXJlIGludm9rZWQuCi0KLQotIyB2aTpzdHM9NCBzdz00IGV0CkluZGV4
OiBXZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvbWVtb3JpemluZ2ZpbGUu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0
L21lbW9yaXppbmdmaWxlLnB5CShyZXZpc2lvbiA1NTA1NikKKysrIFdlYktpdFRvb2xzL3B5d2Vi
c29ja2V0L21vZF9weXdlYnNvY2tldC9tZW1vcml6aW5nZmlsZS5weQkod29ya2luZyBjb3B5KQpA
QCAtMSw4MSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IDIw
MDksIEdvb2dsZSBJbmMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0j
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0KLSIiIk1lbW9yaXppbmcgZmlsZS4KLQotQSBtZW1vcml6aW5nIGZpbGUgd3JhcHMgYSBm
aWxlIGFuZCBtZW1vcml6ZXMgbGluZXMgcmVhZCBieSByZWFkbGluZS4KLSIiIgotCi0KLWltcG9y
dCBzeXMKLQotCi1jbGFzcyBNZW1vcml6aW5nRmlsZShvYmplY3QpOgotICAgICIiIk1lbW9yaXpp
bmdGaWxlIHdyYXBzIGEgZmlsZSBhbmQgbWVtb3JpemVzIGxpbmVzIHJlYWQgYnkgcmVhZGxpbmUu
Ci0KLSAgICBOb3RlIHRoYXQgZGF0YSByZWFkIGJ5IG90aGVyIG1ldGhvZHMgYXJlIG5vdCBtZW1v
cml6ZWQuIFRoaXMgYmVoYXZpb3IKLSAgICBpcyBnb29kIGVub3VnaCBmb3IgbWVtb3JpemluZyBs
aW5lcyBTaW1wbGVIVFRQU2VydmVyIHJlYWRzIGJlZm9yZQotICAgIHRoZSBjb250cm9sIHJlYWNo
ZXMgV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIuCi0gICAgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIGZpbGVfLCBtYXhfbWVtb3JpemVkX2xpbmVzPXN5cy5tYXhpbnQpOgotICAgICAgICAiIiJD
b25zdHJ1Y3QgYW4gaW5zdGFuY2UuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICAgIGZpbGVf
OiB0aGUgZmlsZSBvYmplY3QgdG8gd3JhcC4KLSAgICAgICAgICAgIG1heF9tZW1vcml6ZWRfbGlu
ZXM6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBtZW1vcml6ZS4KLSAgICAgICAgICAg
ICAgICBPbmx5IHRoZSBmaXJzdCBtYXhfbWVtb3JpemVkX2xpbmVzIGFyZSBtZW1vcml6ZWQuCi0g
ICAgICAgICAgICAgICAgRGVmYXVsdDogc3lzLm1heGludC4gCi0gICAgICAgICIiIgotICAgICAg
ICBzZWxmLl9maWxlID0gZmlsZV8KLSAgICAgICAgc2VsZi5fbWVtb3JpemVkX2xpbmVzID0gW10K
LSAgICAgICAgc2VsZi5fbWF4X21lbW9yaXplZF9saW5lcyA9IG1heF9tZW1vcml6ZWRfbGluZXMK
LQotICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBuYW1l
IGluICgnX2ZpbGUnLCAnX21lbW9yaXplZF9saW5lcycsICdfbWF4X21lbW9yaXplZF9saW5lcycs
Ci0gICAgICAgICAgICAgICAgICAgICdyZWFkbGluZScsICdnZXRfbWVtb3JpemVkX2xpbmVzJyk6
Ci0gICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSkK
LSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGUuX19nZXRhdHRyaWJ1dGVfXyhuYW1lKQotCi0gICAg
ZGVmIHJlYWRsaW5lKHNlbGYpOgotICAgICAgICAiIiJPdmVycmlkZSBmaWxlLnJlYWRsaW5lIGFu
ZCBtZW1vcml6ZSB0aGUgbGluZSByZWFkLiIiIgotCi0gICAgICAgIGxpbmUgPSBzZWxmLl9maWxl
LnJlYWRsaW5lKCkKLSAgICAgICAgaWYgbGluZSBhbmQgbGVuKHNlbGYuX21lbW9yaXplZF9saW5l
cykgPCBzZWxmLl9tYXhfbWVtb3JpemVkX2xpbmVzOgotICAgICAgICAgICAgc2VsZi5fbWVtb3Jp
emVkX2xpbmVzLmFwcGVuZChsaW5lKQotICAgICAgICByZXR1cm4gbGluZQotCi0gICAgZGVmIGdl
dF9tZW1vcml6ZWRfbGluZXMoc2VsZik6Ci0gICAgICAgICIiIkdldCBsaW5lcyBtZW1vcml6ZWQg
c28gZmFyLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fbWVtb3JpemVkX2xpbmVzCi0KLQotIyB2
aTpzdHM9NCBzdz00IGV0CkluZGV4OiBXZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJz
b2NrZXQvbXNndXRpbC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC9t
b2RfcHl3ZWJzb2NrZXQvbXNndXRpbC5weQkocmV2aXNpb24gNTUwNTYpCisrKyBXZWJLaXRUb29s
cy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvbXNndXRpbC5weQkod29ya2luZyBjb3B5KQpA
QCAtMSwyNTAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KLSMgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0Ogot
IwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotIiIiTWVzc2FnZSByZWxhdGVk
IHV0aWxpdGllcy4KLQotTm90ZTogcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlL3JlYWQgYXJlIHVz
ZWQgaW4gdGhpcyBtb2R1bGUsIGV2ZW4gdGhvdWdoCi1tb2RfcHl0aG9uIGRvY3VtZW50IHNheXMg
dGhhdCB0aGV5IHNob3VsZCBiZSB1c2VkIG9ubHkgaW4gY29ubmVjdGlvbiBoYW5kbGVycy4KLVVu
Zm9ydHVuYXRlbHksIHdlIGhhdmUgbm8gb3RoZXIgb3B0aW9ucy4gRm9yIGV4YW1wbGUsIHJlcXVl
c3Qud3JpdGUvcmVhZCBhcmUKLW5vdCBzdWl0YWJsZSBiZWNhdXNlIHRoZXkgZG9uJ3QgYWxsb3cg
ZGlyZWN0IHJhdyBieXRlcyB3cml0aW5nL3JlYWRpbmcuCi0iIiIKLQotCi1pbXBvcnQgUXVldWUK
LWltcG9ydCB0aHJlYWRpbmcKLWltcG9ydCB1dGlsCi0KLQotY2xhc3MgTXNnVXRpbEV4Y2VwdGlv
bihFeGNlcHRpb24pOgotICAgIHBhc3MKLQotCi1kZWYgX3JlYWQocmVxdWVzdCwgbGVuZ3RoKToK
LSAgICBieXRlcyA9IHJlcXVlc3QuY29ubmVjdGlvbi5yZWFkKGxlbmd0aCkKLSAgICBpZiBub3Qg
Ynl0ZXM6Ci0gICAgICAgIHJhaXNlIE1zZ1V0aWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAg
J0ZhaWxlZCB0byByZWNlaXZlIG1lc3NhZ2UgZnJvbSAlcicgJQotICAgICAgICAgICAgICAgICAg
ICAgICAgKHJlcXVlc3QuY29ubmVjdGlvbi5yZW1vdGVfYWRkciwpKQotICAgIHJldHVybiBieXRl
cwotCi0KLWRlZiBfd3JpdGUocmVxdWVzdCwgYnl0ZXMpOgotICAgIHRyeToKLSAgICAgICAgcmVx
dWVzdC5jb25uZWN0aW9uLndyaXRlKGJ5dGVzKQotICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6Ci0g
ICAgICAgIHV0aWwucHJlcGVuZF9tZXNzYWdlX3RvX2V4Y2VwdGlvbigKLSAgICAgICAgICAgICAg
ICAnRmFpbGVkIHRvIHNlbmQgbWVzc2FnZSB0byAlcjogJyAlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAocmVxdWVzdC5jb25uZWN0aW9uLnJlbW90ZV9hZGRyLCksCi0gICAgICAgICAgICAgICAg
ZSkKLSAgICAgICAgcmFpc2UKLQotCi1kZWYgc2VuZF9tZXNzYWdlKHJlcXVlc3QsIG1lc3NhZ2Up
OgotICAgICIiIlNlbmQgbWVzc2FnZS4KLQotICAgIEFyZ3M6Ci0gICAgICAgIHJlcXVlc3Q6IG1v
ZF9weXRob24gcmVxdWVzdC4KLSAgICAgICAgbWVzc2FnZTogdW5pY29kZSBzdHJpbmcgdG8gc2Vu
ZC4KLSAgICAiIiIKLQotICAgIF93cml0ZShyZXF1ZXN0LCAnXHgwMCcgKyBtZXNzYWdlLmVuY29k
ZSgndXRmLTgnKSArICdceGZmJykKLQotCi1kZWYgcmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpOgot
ICAgICIiIlJlY2VpdmUgYSBXZWIgU29ja2V0IGZyYW1lIGFuZCByZXR1cm4gaXRzIHBheWxvYWQg
YXMgdW5pY29kZSBzdHJpbmcuCi0KLSAgICBBcmdzOgotICAgICAgICByZXF1ZXN0OiBtb2RfcHl0
aG9uIHJlcXVlc3QuCi0gICAgIiIiCi0KLSAgICB3aGlsZSBUcnVlOgotICAgICAgICAjIFJlYWQg
MSBieXRlLgotICAgICAgICAjIG1wX2Nvbm4ucmVhZCB3aWxsIGJsb2NrIGlmIG5vIGJ5dGVzIGFy
ZSBhdmFpbGFibGUuCi0gICAgICAgICMgVGltZW91dCBpcyBjb250cm9sbGVkIGJ5IFRpbWVPdXQg
ZGlyZWN0aXZlIG9mIEFwYWNoZS4KLSAgICAgICAgZnJhbWVfdHlwZV9zdHIgPSBfcmVhZChyZXF1
ZXN0LCAxKQotICAgICAgICBmcmFtZV90eXBlID0gb3JkKGZyYW1lX3R5cGVfc3RyWzBdKQotICAg
ICAgICBpZiAoZnJhbWVfdHlwZSAmIDB4ODApID09IDB4ODA6Ci0gICAgICAgICAgICAjIFRoZSBw
YXlsb2FkIGxlbmd0aCBpcyBzcGVjaWZpZWQgaW4gdGhlIGZyYW1lLgotICAgICAgICAgICAgIyBS
ZWFkIGFuZCBkaXNjYXJkLgotICAgICAgICAgICAgbGVuZ3RoID0gX3BheWxvYWRfbGVuZ3RoKHJl
cXVlc3QpCi0gICAgICAgICAgICBfcmVjZWl2ZV9ieXRlcyhyZXF1ZXN0LCBsZW5ndGgpCi0gICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAjIFRoZSBwYXlsb2FkIGlzIGRlbGltaXRlZCB3aXRoIFx4
ZmYuCi0gICAgICAgICAgICBieXRlcyA9IF9yZWFkX3VudGlsKHJlcXVlc3QsICdceGZmJykKLSAg
ICAgICAgICAgICMgVGhlIFdlYiBTb2NrZXQgcHJvdG9jb2wgc2VjdGlvbiA0LjQgc3BlY2lmaWVz
IHRoYXQgaW52YWxpZAotICAgICAgICAgICAgIyBjaGFyYWN0ZXJzIG11c3QgYmUgcmVwbGFjZWQg
d2l0aCBVK2ZmZmQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSLgotICAgICAgICAgICAgbWVzc2FnZSA9
IGJ5dGVzLmRlY29kZSgndXRmLTgnLCAncmVwbGFjZScpCi0gICAgICAgICAgICBpZiBmcmFtZV90
eXBlID09IDB4MDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UKLSAgICAgICAgICAg
ICMgRGlzY2FyZCBkYXRhIG9mIG90aGVyIHR5cGVzLgotCi0KLWRlZiBfcGF5bG9hZF9sZW5ndGgo
cmVxdWVzdCk6Ci0gICAgbGVuZ3RoID0gMAotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIGJfc3Ry
ID0gX3JlYWQocmVxdWVzdCwgMSkKLSAgICAgICAgYiA9IG9yZChiX3N0clswXSkKLSAgICAgICAg
bGVuZ3RoID0gbGVuZ3RoICogMTI4ICsgKGIgJiAweDdmKQotICAgICAgICBpZiAoYiAmIDB4ODAp
ID09IDA6Ci0gICAgICAgICAgICBicmVhawotICAgIHJldHVybiBsZW5ndGgKLQotCi1kZWYgX3Jl
Y2VpdmVfYnl0ZXMocmVxdWVzdCwgbGVuZ3RoKToKLSAgICBieXRlcyA9IFtdCi0gICAgd2hpbGUg
bGVuZ3RoID4gMDoKLSAgICAgICAgbmV3X2J5dGVzID0gX3JlYWQocmVxdWVzdCwgbGVuZ3RoKQot
ICAgICAgICBieXRlcy5hcHBlbmQobmV3X2J5dGVzKQotICAgICAgICBsZW5ndGggLT0gbGVuKG5l
d19ieXRlcykKLSAgICByZXR1cm4gJycuam9pbihieXRlcykKLQotCi1kZWYgX3JlYWRfdW50aWwo
cmVxdWVzdCwgZGVsaW1fY2hhcik6Ci0gICAgYnl0ZXMgPSBbXQotICAgIHdoaWxlIFRydWU6Ci0g
ICAgICAgIGNoID0gX3JlYWQocmVxdWVzdCwgMSkKLSAgICAgICAgaWYgY2ggPT0gZGVsaW1fY2hh
cjoKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGJ5dGVzLmFwcGVuZChjaCkKLSAgICByZXR1
cm4gJycuam9pbihieXRlcykKLQotCi1jbGFzcyBNZXNzYWdlUmVjZWl2ZXIodGhyZWFkaW5nLlRo
cmVhZCk6Ci0gICAgIiIiVGhpcyBjbGFzcyByZWNlaXZlcyBtZXNzYWdlcyBmcm9tIHRoZSBjbGll
bnQuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIHRocmVlIHdheXMgdG8gcmVjZWl2ZSBtZXNz
YWdlczogYmxvY2tpbmcsIG5vbi1ibG9ja2luZywKLSAgICBhbmQgdmlhIGNhbGxiYWNrLiBDYWxs
YmFjayBoYXMgdGhlIGhpZ2hlc3QgcHJlY2VkZW5jZS4KLQotICAgIE5vdGU6IFRoaXMgY2xhc3Mg
c2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggdGhlIHN0YW5kYWxvbmUgc2VydmVyIGZvciB3c3MKLSAg
ICBiZWNhdXNlIHB5T3BlblNTTCB1c2VkIGJ5IHRoZSBzZXJ2ZXIgcmFpc2VzIGEgZmF0YWwgZXJy
b3IgaWYgdGhlIHNvY2tldAotICAgIGlzIGFjY2Vzc2VkIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4K
LSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgb25tZXNzYWdlPU5vbmUp
OgotICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCi0KLSAgICAgICAgQXJnczoKLSAg
ICAgICAgICAgIHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVzdC4KLSAgICAgICAgICAgIG9ubWVz
c2FnZTogYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQu
Ci0gICAgICAgICAgICAgICAgICAgICAgIE1heSBiZSBOb25lLiBJZiBub3QgTm9uZSwgdGhlIGZ1
bmN0aW9uIGlzIGNhbGxlZCBvbgotICAgICAgICAgICAgICAgICAgICAgICBhbm90aGVyIHRocmVh
ZC4gSW4gdGhhdCBjYXNlLCBNZXNzYWdlUmVjZWl2ZXIucmVjZWl2ZQotICAgICAgICAgICAgICAg
ICAgICAgICBhbmQgTWVzc2FnZVJlY2VpdmVyLnJlY2VpdmVfbm93YWl0IGFyZSB1c2VsZXNzIGJl
Y2F1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgdGhleSB3aWxsIG5ldmVyIHJldHVybiBhbnkg
bWVzc2FnZXMuCi0gICAgICAgICIiIgotICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9f
KHNlbGYpCi0gICAgICAgIHNlbGYuX3JlcXVlc3QgPSByZXF1ZXN0Ci0gICAgICAgIHNlbGYuX3F1
ZXVlID0gUXVldWUuUXVldWUoKQotICAgICAgICBzZWxmLl9vbm1lc3NhZ2UgPSBvbm1lc3NhZ2UK
LSAgICAgICAgc2VsZi5fc3RvcF9yZXF1ZXN0ZWQgPSBGYWxzZQotICAgICAgICBzZWxmLnNldERh
ZW1vbihUcnVlKQotICAgICAgICBzZWxmLnN0YXJ0KCkKLQotICAgIGRlZiBydW4oc2VsZik6Ci0g
ICAgICAgIHdoaWxlIG5vdCBzZWxmLl9zdG9wX3JlcXVlc3RlZDoKLSAgICAgICAgICAgIG1lc3Nh
Z2UgPSByZWNlaXZlX21lc3NhZ2Uoc2VsZi5fcmVxdWVzdCkKLSAgICAgICAgICAgIGlmIHNlbGYu
X29ubWVzc2FnZToKLSAgICAgICAgICAgICAgICBzZWxmLl9vbm1lc3NhZ2UobWVzc2FnZSkKLSAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcXVldWUucHV0KG1lc3NhZ2Up
Ci0KLSAgICBkZWYgcmVjZWl2ZShzZWxmKToKLSAgICAgICAgIiIiIFJlY2VpdmUgYSBtZXNzYWdl
IGZyb20gdGhlIGNoYW5uZWwsIGJsb2NraW5nLgotCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAg
ICAgICBtZXNzYWdlIGFzIGEgdW5pY29kZSBzdHJpbmcuCi0gICAgICAgICIiIgotICAgICAgICBy
ZXR1cm4gc2VsZi5fcXVldWUuZ2V0KCkKLQotICAgIGRlZiByZWNlaXZlX25vd2FpdChzZWxmKToK
LSAgICAgICAgIiIiIFJlY2VpdmUgYSBtZXNzYWdlIGZyb20gdGhlIGNoYW5uZWwsIG5vbi1ibG9j
a2luZy4KLQotICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgbWVzc2FnZSBhcyBhIHVuaWNv
ZGUgc3RyaW5nIGlmIGF2YWlsYWJsZS4gTm9uZSBvdGhlcndpc2UuCi0gICAgICAgICIiIgotICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICBtZXNzYWdlID0gc2VsZi5fcXVldWUuZ2V0X25vd2FpdCgp
Ci0gICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKLSAgICAgICAgICAgIG1lc3NhZ2UgPSBOb25l
Ci0gICAgICAgIHJldHVybiBtZXNzYWdlCi0KLSAgICBkZWYgc3RvcChzZWxmKToKLSAgICAgICAg
IiIiUmVxdWVzdCB0byBzdG9wIHRoaXMgaW5zdGFuY2UuCi0KLSAgICAgICAgVGhlIGluc3RhbmNl
IHdpbGwgYmUgc3RvcHBlZCBhZnRlciByZWNlaXZpbmcgdGhlIG5leHQgbWVzc2FnZS4KLSAgICAg
ICAgVGhpcyBtZXRob2QgbWF5IG5vdCBiZSB2ZXJ5IHVzZWZ1bCwgYnV0IHRoZXJlIGlzIG5vIGNs
ZWFuIHdheQotICAgICAgICBpbiBQeXRob24gdG8gZm9yY2VmdWxseSBzdG9wIGEgcnVubmluZyB0
aHJlYWQuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9zdG9wX3JlcXVlc3RlZCA9IFRydWUK
LQotCi1jbGFzcyBNZXNzYWdlU2VuZGVyKHRocmVhZGluZy5UaHJlYWQpOgotICAgICIiIlRoaXMg
Y2xhc3Mgc2VuZHMgbWVzc2FnZXMgdG8gdGhlIGNsaWVudC4KLQotICAgIFRoaXMgY2xhc3MgcHJv
dmlkZXMgYm90aCBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHdheXMgdG8gc2VuZAotICAg
IG1lc3NhZ2VzLgotCi0gICAgTm90ZTogVGhpcyBjbGFzcyBzaG91bGQgbm90IGJlIHVzZWQgd2l0
aCB0aGUgc3RhbmRhbG9uZSBzZXJ2ZXIgZm9yIHdzcwotICAgIGJlY2F1c2UgcHlPcGVuU1NMIHVz
ZWQgYnkgdGhlIHNlcnZlciByYWlzZXMgYSBmYXRhbCBlcnJvciBpZiB0aGUgc29ja2V0Ci0gICAg
aXMgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgotICAgICIiIgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCByZXF1ZXN0KToKLSAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgot
Ci0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3Qu
Ci0gICAgICAgICIiIgotICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCi0g
ICAgICAgIHNlbGYuX3JlcXVlc3QgPSByZXF1ZXN0Ci0gICAgICAgIHNlbGYuX3F1ZXVlID0gUXVl
dWUuUXVldWUoKQotICAgICAgICBzZWxmLnNldERhZW1vbihUcnVlKQotICAgICAgICBzZWxmLnN0
YXJ0KCkKLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAg
ICAgICBtZXNzYWdlLCBjb25kaXRpb24gPSBzZWxmLl9xdWV1ZS5nZXQoKQotICAgICAgICAgICAg
Y29uZGl0aW9uLmFjcXVpcmUoKQotICAgICAgICAgICAgc2VuZF9tZXNzYWdlKHNlbGYuX3JlcXVl
c3QsIG1lc3NhZ2UpCi0gICAgICAgICAgICBjb25kaXRpb24ubm90aWZ5KCkKLSAgICAgICAgICAg
IGNvbmRpdGlvbi5yZWxlYXNlKCkKLQotICAgIGRlZiBzZW5kKHNlbGYsIG1lc3NhZ2UpOgotICAg
ICAgICAiIiJTZW5kIGEgbWVzc2FnZSwgYmxvY2tpbmcuIiIiCi0KLSAgICAgICAgY29uZGl0aW9u
ID0gdGhyZWFkaW5nLkNvbmRpdGlvbigpCi0gICAgICAgIGNvbmRpdGlvbi5hY3F1aXJlKCkKLSAg
ICAgICAgc2VsZi5fcXVldWUucHV0KChtZXNzYWdlLCBjb25kaXRpb24pKQotICAgICAgICBjb25k
aXRpb24ud2FpdCgpCi0KLSAgICBkZWYgc2VuZF9ub3dhaXQoc2VsZiwgbWVzc2FnZSk6Ci0gICAg
ICAgICIiIlNlbmQgYSBtZXNzYWdlLCBub24tYmxvY2tpbmcuIiIiCi0KLSAgICAgICAgc2VsZi5f
cXVldWUucHV0KChtZXNzYWdlLCB0aHJlYWRpbmcuQ29uZGl0aW9uKCkpKQotCi0KLSMgdmk6c3Rz
PTQgc3c9NCBldApJbmRleDogV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0
L3N0YW5kYWxvbmUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9k
X3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkJKHJldmlzaW9uIDU1MDU2KQorKysgV2ViS2l0VG9v
bHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDIxICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmln
aHQgMjAwOSwgR29vZ2xlIEluYy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0j
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLQotIiIiU3RhbmRhbG9uZSBXZWIgU29ja2V0IHNlcnZlci4KLQotVXNlIHRoaXMg
c2VydmVyIHRvIHJ1biBtb2RfcHl3ZWJzb2NrZXQgd2l0aG91dCBBcGFjaGUgSFRUUCBTZXJ2ZXIu
Ci0KLVVzYWdlOgotICAgIHB5dGhvbiBzdGFuZGFsb25lLnB5IFstcCA8d3NfcG9ydD5dIFstdyA8
d2Vic29ja19oYW5kbGVycz5dCi0gICAgICAgICAgICAgICAgICAgICAgICAgWy1zIDxzY2FuX2Rp
cj5dCi0gICAgICAgICAgICAgICAgICAgICAgICAgWy1kIDxkb2N1bWVudF9yb290Pl0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICBbLW0gPHdlYnNvY2tfaGFuZGxlcnNfbWFwX2ZpbGU+XQotICAg
ICAgICAgICAgICAgICAgICAgICAgIC4uLiBmb3Igb3RoZXIgb3B0aW9ucywgc2VlIF9tYWluIGJl
bG93IC4uLgotCi08d3NfcG9ydD4gaXMgdGhlIHBvcnQgbnVtYmVyIHRvIHVzZSBmb3Igd3M6Ly8g
Y29ubmVjdGlvbi4KLQotPGRvY3VtZW50X3Jvb3Q+IGlzIHRoZSBwYXRoIHRvIHRoZSByb290IGRp
cmVjdG9yeSBvZiBIVE1MIGZpbGVzLgotCi08d2Vic29ja19oYW5kbGVycz4gaXMgdGhlIHBhdGgg
dG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIFdlYiBTb2NrZXQgaGFuZGxlcnMuCi1TZWUgX19pbml0
X18ucHkgZm9yIGRldGFpbHMgb2YgPHdlYnNvY2tfaGFuZGxlcnM+IGFuZCBob3cgdG8gd3JpdGUg
V2ViIFNvY2tldAotaGFuZGxlcnMuIElmIHRoaXMgcGF0aCBpcyByZWxhdGl2ZSwgPGRvY3VtZW50
X3Jvb3Q+IGlzIHVzZWQgYXMgdGhlIGJhc2UuCi0KLTxzY2FuX2Rpcj4gaXMgYSBwYXRoIHVuZGVy
IHRoZSByb290IGRpcmVjdG9yeS4gSWYgc3BlY2lmaWVkLCBvbmx5IHRoZSBoYW5kbGVycwotdW5k
ZXIgc2Nhbl9kaXIgYXJlIHNjYW5uZWQuIFRoaXMgaXMgdXNlZnVsIGluIHNhdmluZyBzY2FuIHRp
bWUuCi0KLU5vdGU6Ci1UaGlzIHNlcnZlciBpcyBkZXJpdmVkIGZyb20gU29ja2V0U2VydmVyLlRo
cmVhZGluZ01peEluLiBIZW5jZSBhIHRocmVhZCBpcwotdXNlZCBmb3IgZWFjaCByZXF1ZXN0Lgot
IiIiCi0KLWltcG9ydCBCYXNlSFRUUFNlcnZlcgotaW1wb3J0IENHSUhUVFBTZXJ2ZXIKLWltcG9y
dCBTaW1wbGVIVFRQU2VydmVyCi1pbXBvcnQgU29ja2V0U2VydmVyCi1pbXBvcnQgbG9nZ2luZwot
aW1wb3J0IGxvZ2dpbmcuaGFuZGxlcnMKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IG9zCi1pbXBv
cnQgcmUKLWltcG9ydCBzb2NrZXQKLWltcG9ydCBzeXMKLQotX0hBU19PUEVOX1NTTCA9IEZhbHNl
Ci10cnk6Ci0gICAgaW1wb3J0IE9wZW5TU0wuU1NMCi0gICAgX0hBU19PUEVOX1NTTCA9IFRydWUK
LWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi0KLWltcG9ydCBkaXNwYXRjaAotaW1wb3J0
IGhhbmRzaGFrZQotaW1wb3J0IG1lbW9yaXppbmdmaWxlCi1pbXBvcnQgdXRpbAotCi0KLV9MT0df
TEVWRUxTID0gewotICAgICdkZWJ1Zyc6IGxvZ2dpbmcuREVCVUcsCi0gICAgJ2luZm8nOiBsb2dn
aW5nLklORk8sCi0gICAgJ3dhcm4nOiBsb2dnaW5nLldBUk4sCi0gICAgJ2Vycm9yJzogbG9nZ2lu
Zy5FUlJPUiwKLSAgICAnY3JpdGljYWwnOiBsb2dnaW5nLkNSSVRJQ0FMfTsKLQotX0RFRkFVTFRf
TE9HX01BWF9CWVRFUyA9IDEwMjQgKiAyNTYKLV9ERUZBVUxUX0xPR19CQUNLVVBfQ09VTlQgPSA1
Ci0KLV9ERUZBVUxUX1JFUVVFU1RfUVVFVUVfU0laRSA9IDEyOAotCi0jIDEwMjQgaXMgcHJhY3Rp
Y2FsbHkgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gV2ViU29ja2V0IGhhbmRzaGFrZSBsaW5lcy4K
LV9NQVhfTUVNT1JJWkVEX0xJTkVTID0gMTAyNAotCi1kZWYgX3ByaW50X3dhcm5pbmdzX2lmX2Fu
eShkaXNwYXRjaGVyKToKLSAgICB3YXJuaW5ncyA9IGRpc3BhdGNoZXIuc291cmNlX3dhcm5pbmdz
KCkKLSAgICBpZiB3YXJuaW5nczoKLSAgICAgICAgZm9yIHdhcm5pbmcgaW4gd2FybmluZ3M6Ci0g
ICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ21vZF9weXdlYnNvY2tldDogJXMnICUgd2Fybmlu
ZykKLQotCi1jbGFzcyBfU3RhbmRhbG9uZUNvbm5lY3Rpb24ob2JqZWN0KToKLSAgICAiIiJNaW1p
YyBtb2RfcHl0aG9uIG1wX2Nvbm4uIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVz
dF9oYW5kbGVyKToKLSAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgotCi0gICAgICAg
IEFyZ3M6Ci0gICAgICAgICAgICByZXF1ZXN0X2hhbmRsZXI6IEEgV2ViU29ja2V0UmVxdWVzdEhh
bmRsZXIgaW5zdGFuY2UuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9yZXF1ZXN0X2hhbmRs
ZXIgPSByZXF1ZXN0X2hhbmRsZXIKLQotICAgIGRlZiBnZXRfbG9jYWxfYWRkcihzZWxmKToKLSAg
ICAgICAgIiIiR2V0dGVyIHRvIG1pbWljIG1wX2Nvbm4ubG9jYWxfYWRkci4iIiIKLSAgICAgICAg
cmV0dXJuIChzZWxmLl9yZXF1ZXN0X2hhbmRsZXIuc2VydmVyLnNlcnZlcl9uYW1lLAotICAgICAg
ICAgICAgICAgIHNlbGYuX3JlcXVlc3RfaGFuZGxlci5zZXJ2ZXIuc2VydmVyX3BvcnQpCi0gICAg
bG9jYWxfYWRkciA9IHByb3BlcnR5KGdldF9sb2NhbF9hZGRyKQotCi0gICAgZGVmIGdldF9yZW1v
dGVfYWRkcihzZWxmKToKLSAgICAgICAgIiIiR2V0dGVyIHRvIG1pbWljIG1wX2Nvbm4ucmVtb3Rl
X2FkZHIuCi0KLSAgICAgICAgU2V0dGluZyB0aGUgcHJvcGVydHkgaW4gX19pbml0X18gd29uJ3Qg
d29yayBiZWNhdXNlIHRoZSByZXF1ZXN0Ci0gICAgICAgIGhhbmRsZXIgaXMgbm90IGluaXRpYWxp
emVkIHlldCB0aGVyZS4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3JlcXVlc3RfaGFuZGxlci5j
bGllbnRfYWRkcmVzcwotICAgIHJlbW90ZV9hZGRyID0gcHJvcGVydHkoZ2V0X3JlbW90ZV9hZGRy
KQotCi0gICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgotICAgICAgICAiIiJNaW1pYyBtcF9jb25u
LndyaXRlKCkuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIud2ZpbGUu
d3JpdGUoZGF0YSkKLQotICAgIGRlZiByZWFkKHNlbGYsIGxlbmd0aCk6Ci0gICAgICAgICIiIk1p
bWljIG1wX2Nvbm4ucmVhZCgpLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdF9oYW5k
bGVyLnJmaWxlLnJlYWQobGVuZ3RoKQotCi0gICAgZGVmIGdldF9tZW1vcml6ZWRfbGluZXMoc2Vs
Zik6Ci0gICAgICAgICIiIkdldCBtZW1vcml6ZWQgbGluZXMuIiIiCi0gICAgICAgIHJldHVybiBz
ZWxmLl9yZXF1ZXN0X2hhbmRsZXIucmZpbGUuZ2V0X21lbW9yaXplZF9saW5lcygpCi0KLQotY2xh
c3MgX1N0YW5kYWxvbmVSZXF1ZXN0KG9iamVjdCk6Ci0gICAgIiIiTWltaWMgbW9kX3B5dGhvbiBy
ZXF1ZXN0LiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3RfaGFuZGxlciwgdXNl
X3Rscyk6Ci0gICAgICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KLQotICAgICAgICBBcmdz
OgotICAgICAgICAgICAgcmVxdWVzdF9oYW5kbGVyOiBBIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVy
IGluc3RhbmNlLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fcmVxdWVzdF9oYW5kbGVyID0g
cmVxdWVzdF9oYW5kbGVyCi0gICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IF9TdGFuZGFsb25lQ29u
bmVjdGlvbihyZXF1ZXN0X2hhbmRsZXIpCi0gICAgICAgIHNlbGYuX3VzZV90bHMgPSB1c2VfdGxz
Ci0KLSAgICBkZWYgZ2V0X3VyaShzZWxmKToKLSAgICAgICAgIiIiR2V0dGVyIHRvIG1pbWljIHJl
cXVlc3QudXJpLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdF9oYW5kbGVyLnBhdGgK
LSAgICB1cmkgPSBwcm9wZXJ0eShnZXRfdXJpKQotCi0gICAgZGVmIGdldF9oZWFkZXJzX2luKHNl
bGYpOgotICAgICAgICAiIiJHZXR0ZXIgdG8gbWltaWMgcmVxdWVzdC5oZWFkZXJzX2luLiIiIgot
ICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdF9oYW5kbGVyLmhlYWRlcnMKLSAgICBoZWFkZXJz
X2luID0gcHJvcGVydHkoZ2V0X2hlYWRlcnNfaW4pCi0KLSAgICBkZWYgaXNfaHR0cHMoc2VsZik6
Ci0gICAgICAgICIiIk1pbWljIHJlcXVlc3QuaXNfaHR0cHMoKS4iIiIKLSAgICAgICAgcmV0dXJu
IHNlbGYuX3VzZV90bHMKLQotCi1jbGFzcyBXZWJTb2NrZXRTZXJ2ZXIoU29ja2V0U2VydmVyLlRo
cmVhZGluZ01peEluLCBCYXNlSFRUUFNlcnZlci5IVFRQU2VydmVyKToKLSAgICAiIiJIVFRQU2Vy
dmVyIHNwZWNpYWxpemVkIGZvciBXZWIgU29ja2V0LiIiIgotCi0gICAgU29ja2V0U2VydmVyLlRo
cmVhZGluZ01peEluLmRhZW1vbl90aHJlYWRzID0gVHJ1ZQotCi0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIHNlcnZlcl9hZGRyZXNzLCBSZXF1ZXN0SGFuZGxlckNsYXNzKToKLSAgICAgICAgIiIiT3Zl
cnJpZGUgU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuX19pbml0X18uIiIiCi0KLSAgICAgICAgU29j
a2V0U2VydmVyLkJhc2VTZXJ2ZXIuX19pbml0X18oCi0gICAgICAgICAgICAgICAgc2VsZiwgc2Vy
dmVyX2FkZHJlc3MsIFJlcXVlc3RIYW5kbGVyQ2xhc3MpCi0gICAgICAgIHNlbGYuc29ja2V0ID0g
c2VsZi5fY3JlYXRlX3NvY2tldCgpCi0gICAgICAgIHNlbGYuc2VydmVyX2JpbmQoKQotICAgICAg
ICBzZWxmLnNlcnZlcl9hY3RpdmF0ZSgpCi0KLSAgICBkZWYgX2NyZWF0ZV9zb2NrZXQoc2VsZik6
Ci0gICAgICAgIHNvY2tldF8gPSBzb2NrZXQuc29ja2V0KHNlbGYuYWRkcmVzc19mYW1pbHksIHNl
bGYuc29ja2V0X3R5cGUpCi0gICAgICAgIGlmIFdlYlNvY2tldFNlcnZlci5vcHRpb25zLnVzZV90
bHM6Ci0gICAgICAgICAgICBjdHggPSBPcGVuU1NMLlNTTC5Db250ZXh0KE9wZW5TU0wuU1NMLlNT
THYyM19NRVRIT0QpCi0gICAgICAgICAgICBjdHgudXNlX3ByaXZhdGVrZXlfZmlsZShXZWJTb2Nr
ZXRTZXJ2ZXIub3B0aW9ucy5wcml2YXRlX2tleSkKLSAgICAgICAgICAgIGN0eC51c2VfY2VydGlm
aWNhdGVfZmlsZShXZWJTb2NrZXRTZXJ2ZXIub3B0aW9ucy5jZXJ0aWZpY2F0ZSkKLSAgICAgICAg
ICAgIHNvY2tldF8gPSBPcGVuU1NMLlNTTC5Db25uZWN0aW9uKGN0eCwgc29ja2V0XykKLSAgICAg
ICAgcmV0dXJuIHNvY2tldF8KLQotICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZiwgcnF1ZXN0LCBj
bGllbnRfYWRkcmVzcyk6Ci0gICAgICAgICIiIk92ZXJyaWRlIFNvY2tldFNlcnZlci5oYW5kbGVf
ZXJyb3IuIiIiCi0KLSAgICAgICAgbG9nZ2luZy5lcnJvcigKLSAgICAgICAgICAgICgnRXhjZXB0
aW9uIGluIHByb2Nlc3NpbmcgcmVxdWVzdCBmcm9tOiAlcicgJSAoY2xpZW50X2FkZHJlc3MsKSkg
KwotICAgICAgICAgICAgJ1xuJyArIHV0aWwuZ2V0X3N0YWNrX3RyYWNlKCkpCi0gICAgICAgICMg
Tm90ZTogY2xpZW50X2FkZHJlc3MgaXMgYSB0dXBsZS4gVG8gbWF0Y2ggaXQgYWdhaW5zdCAlciwg
d2UgbmVlZCB0aGUKLSAgICAgICAgIyB0cmFpbGluZyBjb21tYS4KLQotCi1jbGFzcyBXZWJTb2Nr
ZXRSZXF1ZXN0SGFuZGxlcihDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxlcik6Ci0g
ICAgIiIiQ0dJSFRUUFJlcXVlc3RIYW5kbGVyIHNwZWNpYWxpemVkIGZvciBXZWIgU29ja2V0LiIi
IgotCi0gICAgZGVmIHNldHVwKHNlbGYpOgotICAgICAgICAiIiJPdmVycmlkZSBTb2NrZXRTZXJ2
ZXIuU3RyZWFtUmVxdWVzdEhhbmRsZXIuc2V0dXAuIiIiCi0KLSAgICAgICAgc2VsZi5jb25uZWN0
aW9uID0gc2VsZi5yZXF1ZXN0Ci0gICAgICAgIHNlbGYucmZpbGUgPSBtZW1vcml6aW5nZmlsZS5N
ZW1vcml6aW5nRmlsZSgKLSAgICAgICAgICAgICAgICBzb2NrZXQuX2ZpbGVvYmplY3Qoc2VsZi5y
ZXF1ZXN0LCAncmInLCBzZWxmLnJidWZzaXplKSwKLSAgICAgICAgICAgICAgICBtYXhfbWVtb3Jp
emVkX2xpbmVzPV9NQVhfTUVNT1JJWkVEX0xJTkVTKQotICAgICAgICBzZWxmLndmaWxlID0gc29j
a2V0Ll9maWxlb2JqZWN0KHNlbGYucmVxdWVzdCwgJ3diJywgc2VsZi53YnVmc2l6ZSkKLQotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprZXl3b3Jkcyk6Ci0gICAgICAgIHNlbGYuX3Jl
cXVlc3QgPSBfU3RhbmRhbG9uZVJlcXVlc3QoCi0gICAgICAgICAgICAgICAgc2VsZiwgV2ViU29j
a2V0UmVxdWVzdEhhbmRsZXIub3B0aW9ucy51c2VfdGxzKQotICAgICAgICBzZWxmLl9kaXNwYXRj
aGVyID0gV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIub3B0aW9ucy5kaXNwYXRjaGVyCi0gICAgICAg
IHNlbGYuX3ByaW50X3dhcm5pbmdzX2lmX2FueSgpCi0gICAgICAgIHNlbGYuX2hhbmRzaGFrZXIg
PSBoYW5kc2hha2UuSGFuZHNoYWtlcigKLSAgICAgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LCBz
ZWxmLl9kaXNwYXRjaGVyLAotICAgICAgICAgICAgICAgIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVy
Lm9wdGlvbnMuc3RyaWN0KQotICAgICAgICBDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFu
ZGxlci5fX2luaXRfXygKLSAgICAgICAgICAgICAgICBzZWxmLCAqYXJncywgKiprZXl3b3JkcykK
LQotICAgIGRlZiBfcHJpbnRfd2FybmluZ3NfaWZfYW55KHNlbGYpOgotICAgICAgICB3YXJuaW5n
cyA9IHNlbGYuX2Rpc3BhdGNoZXIuc291cmNlX3dhcm5pbmdzKCkKLSAgICAgICAgaWYgd2Fybmlu
Z3M6Ci0gICAgICAgICAgICBmb3Igd2FybmluZyBpbiB3YXJuaW5nczoKLSAgICAgICAgICAgICAg
ICBsb2dnaW5nLndhcm5pbmcoJ21vZF9weXdlYnNvY2tldDogJXMnICUgd2FybmluZykKLQotICAg
IGRlZiBwYXJzZV9yZXF1ZXN0KHNlbGYpOgotICAgICAgICAiIiJPdmVycmlkZSBCYXNlSFRUUFNl
cnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnBhcnNlX3JlcXVlc3QuCi0KLSAgICAgICAgUmV0
dXJuIFRydWUgdG8gY29udGludWUgcHJvY2Vzc2luZyBmb3IgSFRUUChTKSwgRmFsc2Ugb3RoZXJ3
aXNlLgotICAgICAgICAiIiIKLSAgICAgICAgcmVzdWx0ID0gQ0dJSFRUUFNlcnZlci5DR0lIVFRQ
UmVxdWVzdEhhbmRsZXIucGFyc2VfcmVxdWVzdChzZWxmKQotICAgICAgICBpZiByZXN1bHQ6Ci0g
ICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5faGFuZHNoYWtlci5kb19oYW5k
c2hha2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIudHJhbnNmZXJfZGF0YShz
ZWxmLl9yZXF1ZXN0KQotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAg
ZXhjZXB0IGhhbmRzaGFrZS5IYW5kc2hha2VFcnJvciwgZToKLSAgICAgICAgICAgICAgICAjIEhh
bmRzaGFrZSBmb3Igd3MocykgZmFpbGVkLiBBc3N1bWUgaHR0cChzKS4KLSAgICAgICAgICAgICAg
ICBsb2dnaW5nLmluZm8oJ21vZF9weXdlYnNvY2tldDogJXMnICUgZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gVHJ1ZQotICAgICAgICAgICAgZXhjZXB0IGRpc3BhdGNoLkRpc3BhdGNoRXJyb3Is
IGU6Ci0gICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdtb2RfcHl3ZWJzb2NrZXQ6ICVz
JyAlIGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICBleGNlcHQg
RXhjZXB0aW9uLCBlOgotICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygnbW9kX3B5d2Vi
c29ja2V0OiAlcycgJSBlKQotICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnbW9kX3B5d2Vi
c29ja2V0OiAlcycgJSB1dGlsLmdldF9zdGFja190cmFjZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBGYWxzZQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICBkZWYgbG9nX3JlcXVlc3Qo
c2VsZiwgY29kZT0nLScsIHNpemU9Jy0nKToKLSAgICAgICAgIiIiT3ZlcnJpZGUgQmFzZUhUVFBT
ZXJ2ZXIubG9nX3JlcXVlc3QuIiIiCi0KLSAgICAgICAgbG9nZ2luZy5pbmZvKCciJXMiICVzICVz
JywKLSAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVxdWVzdGxpbmUsIHN0cihjb2RlKSwgc3Ry
KHNpemUpKQotCi0gICAgZGVmIGxvZ19lcnJvcihzZWxmLCAqYXJncyk6Ci0gICAgICAgICIiIk92
ZXJyaWRlIEJhc2VIVFRQU2VydmVyLmxvZ19lcnJvci4iIiIKLQotICAgICAgICAjIERlc3BpdGUg
dGhlIG5hbWUsIHRoaXMgbWV0aG9kIGlzIGZvciB3YXJuaW5ncyB0aGFuIGZvciBlcnJvcnMuCi0g
ICAgICAgICMgRm9yIGV4YW1wbGUsIEhUVFAgc3RhdHVzIGNvZGUgaXMgbG9nZ2VkIGJ5IHRoaXMg
bWV0aG9kLgotICAgICAgICBsb2dnaW5nLndhcm4oJyVzIC0gJXMnICUgKHNlbGYuYWRkcmVzc19z
dHJpbmcoKSwgKGFyZ3NbMF0gJSBhcmdzWzE6XSkpKQotCi0gICAgZGVmIGlzX2NnaShzZWxmKToK
LSAgICAgICAgIiIiVGVzdCB3aGV0aGVyIHNlbGYucGF0aCBjb3JyZXNwb25kcyB0byBhIENHSSBz
Y3JpcHQuCi0KLSAgICAgICAgQWRkIGV4dHJhIGNoZWNrIHRoYXQgc2VsZi5wYXRoIGRvZXNuJ3Qg
Y29udGFpbnMgLi4iIiIKLSAgICAgICAgaWYgQ0dJSFRUUFNlcnZlci5DR0lIVFRQUmVxdWVzdEhh
bmRsZXIuaXNfY2dpKHNlbGYpOgotICAgICAgICAgICAgaWYgJy4uJyBpbiBzZWxmLnBhdGg6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAg
ICAgICByZXR1cm4gRmFsc2UKLQotCi1kZWYgX2NvbmZpZ3VyZV9sb2dnaW5nKG9wdGlvbnMpOgot
ICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKLSAgICBsb2dnZXIuc2V0TGV2ZWwoX0xP
R19MRVZFTFNbb3B0aW9ucy5sb2dfbGV2ZWxdKQotICAgIGlmIG9wdGlvbnMubG9nX2ZpbGU6Ci0g
ICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLmhhbmRsZXJzLlJvdGF0aW5nRmlsZUhhbmRsZXIoCi0g
ICAgICAgICAgICAgICAgb3B0aW9ucy5sb2dfZmlsZSwgJ2EnLCBvcHRpb25zLmxvZ19tYXgsIG9w
dGlvbnMubG9nX2NvdW50KQotICAgIGVsc2U6Ci0gICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLlN0
cmVhbUhhbmRsZXIoKQotICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKAotICAgICAg
ICAgICAgIlslKGFzY3RpbWUpc10gWyUobGV2ZWxuYW1lKXNdICUobmFtZSlzOiAlKG1lc3NhZ2Up
cyIpCi0gICAgaGFuZGxlci5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQotICAgIGxvZ2dlci5hZGRI
YW5kbGVyKGhhbmRsZXIpCi0KLWRlZiBfYWxpYXNfaGFuZGxlcnMoZGlzcGF0Y2hlciwgd2Vic29j
a19oYW5kbGVyc19tYXBfZmlsZSk6Ci0gICAgIiIiU2V0IGFsaWFzZXMgc3BlY2lmaWVkIGluIHdl
YnNvY2tfaGFuZGxlcl9tYXBfZmlsZSBpbiBkaXNwYXRjaGVyLgotCi0gICAgQXJnczoKLSAgICAg
ICAgZGlzcGF0Y2hlcjogZGlzcGF0Y2guRGlzcGF0Y2hlciBpbnN0YW5jZQotICAgICAgICB3ZWJz
b2NrX2hhbmRsZXJfbWFwX2ZpbGU6IGFsaWFzIG1hcCBmaWxlCi0gICAgIiIiCi0gICAgZnAgPSBv
cGVuKHdlYnNvY2tfaGFuZGxlcnNfbWFwX2ZpbGUpCi0gICAgdHJ5OgotICAgICAgICBmb3IgbGlu
ZSBpbiBmcDoKLSAgICAgICAgICAgIGlmIGxpbmVbMF0gPT0gJyMnIG9yIGxpbmUuaXNzcGFjZSgp
OgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBtID0gcmUubWF0Y2goJyhc
UyspXHMrKFxTKyknLCBsaW5lKQotICAgICAgICAgICAgaWYgbm90IG06Ci0gICAgICAgICAgICAg
ICAgbG9nZ2luZy53YXJuaW5nKCdXcm9uZyBmb3JtYXQgaW4gbWFwIGZpbGU6JyArIGxpbmUpCi0g
ICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAg
ICBkaXNwYXRjaGVyLmFkZF9yZXNvdXJjZV9wYXRoX2FsaWFzKAotICAgICAgICAgICAgICAgICAg
ICBtLmdyb3VwKDEpLCBtLmdyb3VwKDIpKQotICAgICAgICAgICAgZXhjZXB0IGRpc3BhdGNoLkRp
c3BhdGNoRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcihzdHIoZSkpCi0g
ICAgZmluYWxseToKLSAgICAgICAgZnAuY2xvc2UoKQotCi0KLQotZGVmIF9tYWluKCk6Ci0gICAg
cGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKLSAgICBwYXJzZXIuYWRkX29wdGlvbign
LXAnLCAnLS1wb3J0JywgZGVzdD0ncG9ydCcsIHR5cGU9J2ludCcsCi0gICAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdD1oYW5kc2hha2UuX0RFRkFVTFRfV0VCX1NPQ0tFVF9QT1JULAotICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J3BvcnQgdG8gbGlzdGVuIHRvJykKLSAgICBwYXJzZXIuYWRk
X29wdGlvbignLXcnLCAnLS13ZWJzb2NrX2hhbmRsZXJzJywgZGVzdD0nd2Vic29ja19oYW5kbGVy
cycsCi0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nLicsCi0gICAgICAgICAgICAgICAg
ICAgICAgaGVscD0nV2ViIFNvY2tldCBoYW5kbGVycyByb290IGRpcmVjdG9yeS4nKQotICAgIHBh
cnNlci5hZGRfb3B0aW9uKCctbScsICctLXdlYnNvY2tfaGFuZGxlcnNfbWFwX2ZpbGUnLAotICAg
ICAgICAgICAgICAgICAgICAgIGRlc3Q9J3dlYnNvY2tfaGFuZGxlcnNfbWFwX2ZpbGUnLAotICAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSgnV2ViIFNvY2tldCBoYW5kbGVycyBtYXAgZmlsZS4gJwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdFYWNoIGxpbmUgY29uc2lzdHMgb2YgYWxpYXNfcmVzb3VyY2VfcGF0aCBhbmQg
JwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGlzdGluZ19yZXNvdXJjZV9wYXRoLCBz
ZXBhcmF0ZWQgYnkgc3BhY2VzLicpKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcycsICctLXNj
YW5fZGlyJywgZGVzdD0nc2Nhbl9kaXInLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9
Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnV2ViIFNvY2tldCBoYW5kbGVycyBz
Y2FuIGRpcmVjdG9yeS4gJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdXN0IGJlIGEg
ZGlyZWN0b3J5IHVuZGVyIHdlYnNvY2tfaGFuZGxlcnMuJykpCi0gICAgcGFyc2VyLmFkZF9vcHRp
b24oJy1kJywgJy0tZG9jdW1lbnRfcm9vdCcsIGRlc3Q9J2RvY3VtZW50X3Jvb3QnLAotICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ9Jy4nLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
J0RvY3VtZW50IHJvb3QgZGlyZWN0b3J5LicpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oJy14Jywg
Jy0tY2dpX3BhdGhzJywgZGVzdD0nY2dpX3BhdGhzJywKLSAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0PU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ0NHSSBwYXRocyByZWxh
dGl2ZSB0byBkb2N1bWVudF9yb290LicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29t
bWEtc2VwYXJhdGVkLiAoZS5nIC14IC9jZ2ksL2h0YmluKSAnCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ0ZpbGVzIHVuZGVyIGRvY3VtZW50X3Jvb3QvY2dpX3BhdGggYXJlIGhhbmRsZWQg
JwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcyBDR0kgcHJvZ3JhbXMuIE11c3QgYmUg
ZXhlY3V0YWJsZS4nKSkKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS10bHMnLCBkZXN0
PSd1c2VfdGxzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0PUZhbHNlLCBoZWxwPSd1c2UgVExTICh3c3M6Ly8pJykKLSAgICBwYXJzZXIuYWRkX29w
dGlvbignLWsnLCAnLS1wcml2YXRlX2tleScsIGRlc3Q9J3ByaXZhdGVfa2V5JywKLSAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0PScnLCBoZWxwPSdUTFMgcHJpdmF0ZSBrZXkgZmlsZS4nKQot
ICAgIHBhcnNlci5hZGRfb3B0aW9uKCctYycsICctLWNlcnRpZmljYXRlJywgZGVzdD0nY2VydGlm
aWNhdGUnLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9JycsIGhlbHA9J1RMUyBjZXJ0
aWZpY2F0ZSBmaWxlLicpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oJy1sJywgJy0tbG9nX2ZpbGUn
LCBkZXN0PSdsb2dfZmlsZScsCi0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nJywgaGVs
cD0nTG9nIGZpbGUuJykKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLS1sb2dfbGV2ZWwnLCB0eXBl
PSdjaG9pY2UnLCBkZXN0PSdsb2dfbGV2ZWwnLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ9J3dhcm4nLAotICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9WydkZWJ1ZycsICdpbmZv
JywgJ3dhcm4nLCAnZXJyb3InLCAnY3JpdGljYWwnXSwKLSAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSdMb2cgbGV2ZWwuJykKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLS1sb2dfbWF4JywgZGVz
dD0nbG9nX21heCcsIHR5cGU9J2ludCcsCi0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1f
REVGQVVMVF9MT0dfTUFYX0JZVEVTLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0xvZyBt
YXhpbXVtIGJ5dGVzJykKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLS1sb2dfY291bnQnLCBkZXN0
PSdsb2dfY291bnQnLCB0eXBlPSdpbnQnLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9
X0RFRkFVTFRfTE9HX0JBQ0tVUF9DT1VOVCwKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdM
b2cgYmFja3VwIGNvdW50JykKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLS1zdHJpY3QnLCBkZXN0
PSdzdHJpY3QnLCBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ9RmFsc2UsIGhlbHA9J1N0cmljdGx5IGNoZWNrIGhhbmRzaGFrZSByZXF1ZXN0JykKLSAg
ICBwYXJzZXIuYWRkX29wdGlvbignLXEnLCAnLS1xdWV1ZScsIGRlc3Q9J3JlcXVlc3RfcXVldWVf
c2l6ZScsIHR5cGU9J2ludCcsCi0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1fREVGQVVM
VF9SRVFVRVNUX1FVRVVFX1NJWkUsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0ncmVxdWVz
dCBxdWV1ZSBzaXplJykKLSAgICBvcHRpb25zID0gcGFyc2VyLnBhcnNlX2FyZ3MoKVswXQotCi0g
ICAgb3MuY2hkaXIob3B0aW9ucy5kb2N1bWVudF9yb290KQotCi0gICAgX2NvbmZpZ3VyZV9sb2dn
aW5nKG9wdGlvbnMpCi0KLSAgICBTb2NrZXRTZXJ2ZXIuVENQU2VydmVyLnJlcXVlc3RfcXVldWVf
c2l6ZSA9IG9wdGlvbnMucmVxdWVzdF9xdWV1ZV9zaXplCi0gICAgQ0dJSFRUUFNlcnZlci5DR0lI
VFRQUmVxdWVzdEhhbmRsZXIuY2dpX2RpcmVjdG9yaWVzID0gW10KLQotICAgIGlmIG9wdGlvbnMu
Y2dpX3BhdGhzOgotICAgICAgICBDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxlci5j
Z2lfZGlyZWN0b3JpZXMgPSBcCi0gICAgICAgICAgICBvcHRpb25zLmNnaV9wYXRocy5zcGxpdCgn
LCcpCi0KLSAgICBpZiBvcHRpb25zLnVzZV90bHM6Ci0gICAgICAgIGlmIG5vdCBfSEFTX09QRU5f
U1NMOgotICAgICAgICAgICAgbG9nZ2luZy5jcml0aWNhbCgnVG8gdXNlIFRMUywgaW5zdGFsbCBw
eU9wZW5TU0wuJykKLSAgICAgICAgICAgIHN5cy5leGl0KDEpCi0gICAgICAgIGlmIG5vdCBvcHRp
b25zLnByaXZhdGVfa2V5IG9yIG5vdCBvcHRpb25zLmNlcnRpZmljYXRlOgotICAgICAgICAgICAg
bG9nZ2luZy5jcml0aWNhbCgKLSAgICAgICAgICAgICAgICAgICAgJ1RvIHVzZSBUTFMsIHNwZWNp
ZnkgcHJpdmF0ZV9rZXkgYW5kIGNlcnRpZmljYXRlLicpCi0gICAgICAgICAgICBzeXMuZXhpdCgx
KQotCi0gICAgaWYgbm90IG9wdGlvbnMuc2Nhbl9kaXI6Ci0gICAgICAgIG9wdGlvbnMuc2Nhbl9k
aXIgPSBvcHRpb25zLndlYnNvY2tfaGFuZGxlcnMKLQotICAgIHRyeToKLSAgICAgICAgIyBTaGFy
ZSBhIERpc3BhdGNoZXIgYW1vbmcgcmVxdWVzdCBoYW5kbGVycyB0byBzYXZlIHRpbWUgZm9yCi0g
ICAgICAgICMgaW5zdGFudGlhdGlvbi4gIERpc3BhdGNoZXIgY2FuIGJlIHNoYXJlZCBiZWNhdXNl
IGl0IGlzIHRocmVhZC1zYWZlLgotICAgICAgICBvcHRpb25zLmRpc3BhdGNoZXIgPSBkaXNwYXRj
aC5EaXNwYXRjaGVyKG9wdGlvbnMud2Vic29ja19oYW5kbGVycywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnNjYW5fZGlyKQotICAgICAg
ICBpZiBvcHRpb25zLndlYnNvY2tfaGFuZGxlcnNfbWFwX2ZpbGU6Ci0gICAgICAgICAgICBfYWxp
YXNfaGFuZGxlcnMob3B0aW9ucy5kaXNwYXRjaGVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9wdGlvbnMud2Vic29ja19oYW5kbGVyc19tYXBfZmlsZSkKLSAgICAgICAgX3ByaW50X3dh
cm5pbmdzX2lmX2FueShvcHRpb25zLmRpc3BhdGNoZXIpCi0KLSAgICAgICAgV2ViU29ja2V0UmVx
dWVzdEhhbmRsZXIub3B0aW9ucyA9IG9wdGlvbnMKLSAgICAgICAgV2ViU29ja2V0U2VydmVyLm9w
dGlvbnMgPSBvcHRpb25zCi0KLSAgICAgICAgc2VydmVyID0gV2ViU29ja2V0U2VydmVyKCgnJywg
b3B0aW9ucy5wb3J0KSwgV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIpCi0gICAgICAgIHNlcnZlci5z
ZXJ2ZV9mb3JldmVyKCkKLSAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgotICAgICAgICBsb2dnaW5n
LmNyaXRpY2FsKHN0cihlKSkKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotCi1pZiBfX25hbWVfXyA9
PSAnX19tYWluX18nOgotICAgIF9tYWluKCkKLQotCi0jIHZpOnN0cz00IHN3PTQgZXQKSW5kZXg6
IFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC91dGlsLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC91dGlsLnB5CShy
ZXZpc2lvbiA1NTA1NikKKysrIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tl
dC91dGlsLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDU5ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIw
MDksIEdvb2dsZSBJbmMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0j
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0KLSIiIldlYiBTb2NrZXRzIHV0aWxpdGllcy4KLSIiIgotCi0KLWltcG9ydCBTdHJpbmdJ
TwotaW1wb3J0IHRyYWNlYmFjawotCi0KLWRlZiBnZXRfc3RhY2tfdHJhY2UoKToKLSAgICAiIiJH
ZXQgdGhlIGN1cnJlbnQgc3RhY2sgdHJhY2UgYXMgc3RyaW5nLgotCi0gICAgVGhpcyBpcyBuZWVk
ZWQgdG8gc3VwcG9ydCBQeXRob24gMi4zLgotICAgIFRPRE86IFJlbW92ZSB0aGlzIHdoZW4gd2Ug
b25seSBzdXBwb3J0IFB5dGhvbiAyLjQgYW5kIGFib3ZlLgotICAgICAgICAgIFVzZSB0cmFjZWJh
Y2suZm9ybWF0X2V4YyBpbnN0ZWFkLgotICAgICIiIgotCi0gICAgb3V0ID0gU3RyaW5nSU8uU3Ry
aW5nSU8oKQotICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1vdXQpCi0gICAgcmV0dXJuIG91
dC5nZXR2YWx1ZSgpCi0KLQotZGVmIHByZXBlbmRfbWVzc2FnZV90b19leGNlcHRpb24obWVzc2Fn
ZSwgZXhjKToKLSAgICAiIiJQcmVwZW5kIG1lc3NhZ2UgdG8gdGhlIGV4Y2VwdGlvbi4iIiIKLQot
ICAgIGV4Yy5hcmdzID0gKG1lc3NhZ2UgKyBzdHIoZXhjKSwpCi0gICAgcmV0dXJuCi0KLQotIyB2
aTpzdHM9NCBzdz00IGV0CkluZGV4OiBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L2NvbmZp
Zy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L2NvbmZpZy5w
eQkocmV2aXNpb24gNTUwNTYpCisrKyBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L2NvbmZp
Zy5weQkod29ya2luZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0jIENvcHlyaWdodCAyMDA5LCBH
b29nbGUgSW5jLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
Ci0iIiJDb25maWd1cmF0aW9uIGZvciB0ZXN0aW5nLgotCi1UZXN0IGZpbGVzIHNob3VsZCBpbXBv
cnQgdGhpcyBtb2R1bGUgYmVmb3JlIG1vZF9weXdlYnNvY2tldC4KLSIiIgotCi0KLWltcG9ydCBv
cwotaW1wb3J0IHN5cwotCi0KLSMgQWRkIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHRvIHN5cy5wYXRo
IHRvIGVuYWJsZSBpbXBvcnRpbmcgbW9kX3B5d2Vic29ja2V0Lgotc3lzLnBhdGggKz0gW29zLnBh
dGguam9pbihvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSwgJy4uJyldCi0KLQotIyB2aTpzdHM9
NCBzdz00IGV0CkluZGV4OiBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L21vY2sucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC9tb2NrLnB5CShyZXZpc2lv
biA1NTA1NikKKysrIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvbW9jay5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMSwyMDUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4K
LSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0j
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotIiIiTW9ja3Mg
Zm9yIHRlc3RpbmcuCi0iIiIKLQotCi1pbXBvcnQgUXVldWUKLWltcG9ydCB0aHJlYWRpbmcKLQot
Ci1jbGFzcyBfTW9ja0Nvbm5CYXNlKG9iamVjdCk6Ci0gICAgIiIiQmFzZSBjbGFzcyBvZiBtb2Nr
cyBmb3IgbW9kX3B5dGhvbi5hcGFjaGUubXBfY29ubi4KLQotICAgIFRoaXMgZW5hYmxlcyB0ZXN0
cyB0byBjaGVjayB3aGF0IGlzIHdyaXR0ZW4gdG8gYSAobW9jaykgbXBfY29ubi4KLSAgICAiIiIK
LQotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fd3JpdGVfZGF0YSA9IFtd
Ci0KLSAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6Ci0gICAgICAgICIiIk92ZXJyaWRlIG1vZF9w
eXRob24uYXBhY2hlLm1wX2Nvbm4ud3JpdGUuIiIiCi0KLSAgICAgICAgc2VsZi5fd3JpdGVfZGF0
YS5hcHBlbmQoZGF0YSkKLQotICAgIGRlZiB3cml0dGVuX2RhdGEoc2VsZik6Ci0gICAgICAgICIi
IkdldCBieXRlcyB3cml0dGVuIHRvIHRoaXMgbW9jay4iIiIKLQotICAgICAgICByZXR1cm4gJycu
am9pbihzZWxmLl93cml0ZV9kYXRhKQotCi0KLWNsYXNzIE1vY2tDb25uKF9Nb2NrQ29ubkJhc2Up
OgotICAgICIiIk1vY2sgZm9yIG1vZF9weXRob24uYXBhY2hlLm1wX2Nvbm4uCi0KLSAgICBUaGlz
IGVuYWJsZXMgdGVzdHMgdG8gc3BlY2lmeSB3aGF0IHNob3VsZCBiZSByZWFkIGZyb20gYSAobW9j
aykgbXBfY29ubiBhcwotICAgIHdlbGwgYXMgdG8gY2hlY2sgd2hhdCBpcyB3cml0dGVuIHRvIGl0
LgotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlYWRfZGF0YSk6Ci0gICAgICAg
ICIiIkNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICAg
IHJlYWRfZGF0YTogYnl0ZXMgdGhhdCBzaG91bGQgYmUgcmV0dXJuZWQgd2hlbiByZWFkKiBtZXRo
b2RzIGFyZQotICAgICAgICAgICAgY2FsbGVkLgotICAgICAgICAiIiIKLQotICAgICAgICBfTW9j
a0Nvbm5CYXNlLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuX3JlYWRfZGF0YSA9IHJlYWRf
ZGF0YQotICAgICAgICBzZWxmLl9yZWFkX3BvcyA9IDAKLQotICAgIGRlZiByZWFkbGluZShzZWxm
KToKLSAgICAgICAgIiIiT3ZlcnJpZGUgbW9kX3B5dGhvbi5hcGFjaGUubXBfY29ubi5yZWFkbGlu
ZS4iIiIKLQotICAgICAgICBpZiBzZWxmLl9yZWFkX3BvcyA+PSBsZW4oc2VsZi5fcmVhZF9kYXRh
KToKLSAgICAgICAgICAgIHJldHVybiAnJwotICAgICAgICBlbmRfaW5kZXggPSBzZWxmLl9yZWFk
X2RhdGEuZmluZCgnXG4nLCBzZWxmLl9yZWFkX3BvcykgKyAxCi0gICAgICAgIGlmIG5vdCBlbmRf
aW5kZXg6Ci0gICAgICAgICAgICBlbmRfaW5kZXggPSBsZW4oc2VsZi5fcmVhZF9kYXRhKQotICAg
ICAgICByZXR1cm4gc2VsZi5fcmVhZF91cF90byhlbmRfaW5kZXgpCi0KLSAgICBkZWYgcmVhZChz
ZWxmLCBsZW5ndGgpOgotICAgICAgICAiIiJPdmVycmlkZSBtb2RfcHl0aG9uLmFwYWNoZS5tcF9j
b25uLnJlYWQuIiIiCi0KLSAgICAgICAgaWYgc2VsZi5fcmVhZF9wb3MgPj0gbGVuKHNlbGYuX3Jl
YWRfZGF0YSk6Ci0gICAgICAgICAgICByZXR1cm4gJycKLSAgICAgICAgZW5kX2luZGV4ID0gbWlu
KGxlbihzZWxmLl9yZWFkX2RhdGEpLCBzZWxmLl9yZWFkX3BvcyArIGxlbmd0aCkKLSAgICAgICAg
cmV0dXJuIHNlbGYuX3JlYWRfdXBfdG8oZW5kX2luZGV4KQotCi0gICAgZGVmIF9yZWFkX3VwX3Rv
KHNlbGYsIGVuZF9pbmRleCk6Ci0gICAgICAgIGxpbmUgPSBzZWxmLl9yZWFkX2RhdGFbc2VsZi5f
cmVhZF9wb3M6ZW5kX2luZGV4XQotICAgICAgICBzZWxmLl9yZWFkX3BvcyA9IGVuZF9pbmRleAot
ICAgICAgICByZXR1cm4gbGluZQotCi0KLWNsYXNzIE1vY2tCbG9ja2luZ0Nvbm4oX01vY2tDb25u
QmFzZSk6Ci0gICAgIiIiQmxvY2tpbmcgbW9jayBmb3IgbW9kX3B5dGhvbi5hcGFjaGUubXBfY29u
bi4KLQotICAgIFRoaXMgZW5hYmxlcyB0ZXN0cyB0byBzcGVjaWZ5IHdoYXQgc2hvdWxkIGJlIHJl
YWQgZnJvbSBhIChtb2NrKSBtcF9jb25uIGFzCi0gICAgd2VsbCBhcyB0byBjaGVjayB3aGF0IGlz
IHdyaXR0ZW4gdG8gaXQuCi0gICAgQ2FsbGVycyBvZiByZWFkKiBtZXRob2RzIHdpbGwgYmxvY2sg
aWYgdGhlcmUgaXMgbm8gYnl0ZXMgYXZhaWxhYmxlLgotICAgICIiIgotCi0gICAgZGVmIF9faW5p
dF9fKHNlbGYpOgotICAgICAgICBfTW9ja0Nvbm5CYXNlLl9faW5pdF9fKHNlbGYpCi0gICAgICAg
IHNlbGYuX3F1ZXVlID0gUXVldWUuUXVldWUoKQotCi0gICAgZGVmIHJlYWRsaW5lKHNlbGYpOgot
ICAgICAgICAiIiJPdmVycmlkZSBtb2RfcHl0aG9uLmFwYWNoZS5tcF9jb25uLnJlYWRsaW5lLiIi
IgotICAgICAgICBsaW5lID0gJycKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGMg
PSBzZWxmLl9xdWV1ZS5nZXQoKQotICAgICAgICAgICAgbGluZSArPSBjCi0gICAgICAgICAgICBp
ZiBjID09ICdcbic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKLQotICAgIGRlZiByZWFk
KHNlbGYsIGxlbmd0aCk6Ci0gICAgICAgICIiIk92ZXJyaWRlIG1vZF9weXRob24uYXBhY2hlLm1w
X2Nvbm4ucmVhZC4iIiIKLQotICAgICAgICBkYXRhID0gJycKLSAgICAgICAgZm9yIHVudXNlZCBp
biByYW5nZShsZW5ndGgpOgotICAgICAgICAgICAgZGF0YSArPSBzZWxmLl9xdWV1ZS5nZXQoKQot
ICAgICAgICByZXR1cm4gZGF0YQotCi0gICAgZGVmIHB1dF9ieXRlcyhzZWxmLCBieXRlcyk6Ci0g
ICAgICAgICIiIlB1dCBieXRlcyB0byBiZSByZWFkIGZyb20gdGhpcyBtb2NrLgotCi0gICAgICAg
IEFyZ3M6Ci0gICAgICAgICAgICBieXRlczogYnl0ZXMgdG8gYmUgcmVhZC4KLSAgICAgICAgIiIi
Ci0KLSAgICAgICAgZm9yIGJ5dGUgaW4gYnl0ZXM6Ci0gICAgICAgICAgICBzZWxmLl9xdWV1ZS5w
dXQoYnl0ZSkKLQotCi1jbGFzcyBNb2NrVGFibGUoZGljdCk6Ci0gICAgIiIiTW9jayB0YWJsZS4K
LQotICAgIFRoaXMgbWltaWNzIG1vZF9weXRob24gbXBfdGFibGUuIE5vdGUgdGhhdCBvbmx5IHRo
ZSBtZXRob2RzIHVzZWQgYnkKLSAgICB0ZXN0cyBhcmUgb3ZlcnJpZGRlbi4KLSAgICAiIiIKLQot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb3B5X2Zyb209e30pOgotICAgICAgICBpZiBpc2luc3Rh
bmNlKGNvcHlfZnJvbSwgZGljdCk6Ci0gICAgICAgICAgICBjb3B5X2Zyb20gPSBjb3B5X2Zyb20u
aXRlbXMoKQotICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBjb3B5X2Zyb206Ci0gICAgICAgICAg
ICBzZWxmLl9fc2V0aXRlbV9fKGtleSwgdmFsdWUpCi0KLSAgICBkZWYgX19nZXRpdGVtX18oc2Vs
Ziwga2V5KToKLSAgICAgICAgcmV0dXJuIHN1cGVyKE1vY2tUYWJsZSwgc2VsZikuX19nZXRpdGVt
X18oa2V5Lmxvd2VyKCkpCi0KLSAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6
Ci0gICAgICAgIHN1cGVyKE1vY2tUYWJsZSwgc2VsZikuX19zZXRpdGVtX18oa2V5Lmxvd2VyKCks
IHZhbHVlKQotCi0gICAgZGVmIGdldChzZWxmLCBrZXksIGRlZl92YWx1ZT1Ob25lKToKLSAgICAg
ICAgcmV0dXJuIHN1cGVyKE1vY2tUYWJsZSwgc2VsZikuZ2V0KGtleS5sb3dlcigpLCBkZWZfdmFs
dWUpCi0KLQotY2xhc3MgTW9ja1JlcXVlc3Qob2JqZWN0KToKLSAgICAiIiJNb2NrIHJlcXVlc3Qu
Ci0KLSAgICBUaGlzIG1pbWljcyBtb2RfcHl0aG9uIHJlcXVlc3QuCi0gICAgIiIiCi0KLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgdXJpPU5vbmUsIGhlYWRlcnNfaW49e30sIGNvbm5lY3Rpb249Tm9u
ZSwKLSAgICAgICAgICAgICAgICAgaXNfaHR0cHM9RmFsc2UpOgotICAgICAgICAiIiJDb25zdHJ1
Y3QgYW4gaW5zdGFuY2UuCi0KLSAgICAgICAgQXJndW1lbnRzOgotICAgICAgICAgICAgdXJpOiBV
Ukkgb2YgdGhlIHJlcXVlc3QuCi0gICAgICAgICAgICBoZWFkZXJzX2luOiBSZXF1ZXN0IGhlYWRl
cnMuCi0gICAgICAgICAgICBjb25uZWN0aW9uOiBDb25uZWN0aW9uIHVzZWQgZm9yIHRoZSByZXF1
ZXN0LgotICAgICAgICAgICAgaXNfaHR0cHM6IFdoZXRoZXIgdGhpcyByZXF1ZXN0IGlzIG92ZXIg
U1NMLgotCi0gICAgICAgIFNlZSB0aGUgZG9jdW1lbnQgb2YgbW9kX3B5dGhvbiBSZXF1ZXN0IGZv
ciBkZXRhaWxzLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi51cmkgPSB1cmkKLSAgICAgICAg
c2VsZi5jb25uZWN0aW9uID0gY29ubmVjdGlvbgotICAgICAgICBzZWxmLmhlYWRlcnNfaW4gPSBN
b2NrVGFibGUoaGVhZGVyc19pbikKLSAgICAgICAgIyBzZWxmLmlzX2h0dHBzXyBuZWVkcyB0byBi
ZSBhY2Nlc3NpYmxlIGZyb20gdGVzdHMuICBUbyBhdm9pZCBuYW1lCi0gICAgICAgICMgY29uZmxp
Y3Qgd2l0aCBzZWxmLmlzX2h0dHBzKCksIGl0IGlzIG5hbWVkIGFzIHN1Y2guCi0gICAgICAgIHNl
bGYuaXNfaHR0cHNfID0gaXNfaHR0cHMKLQotICAgIGRlZiBpc19odHRwcyhzZWxmKToKLSAgICAg
ICAgIiIiUmV0dXJuIHdoZXRoZXIgdGhpcyByZXF1ZXN0IGlzIG92ZXIgU1NMLiIiIgotICAgICAg
ICByZXR1cm4gc2VsZi5pc19odHRwc18KLQotCi1jbGFzcyBNb2NrRGlzcGF0Y2hlcihvYmplY3Qp
OgotICAgICIiIk1vY2sgZm9yIGRpc3BhdGNoLkRpc3BhdGNoZXIuIiIiCi0KLSAgICBkZWYgZG9f
ZXh0cmFfaGFuZHNoYWtlKHNlbGYsIGNvbm5fY29udGV4dCk6Ci0gICAgICAgIHBhc3MKLQotICAg
IGRlZiB0cmFuc2Zlcl9kYXRhKHNlbGYsIGNvbm5fY29udGV4dCk6Ci0gICAgICAgIHBhc3MKLQot
Ci0jIHZpOnN0cz00IHN3PTQgZXQKSW5kZXg6IFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3Qv
cnVuX2FsbC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3J1
bl9hbGwucHkJKHJldmlzaW9uIDU1MDU2KQorKysgV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVz
dC9ydW5fYWxsLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDY0ICswLDAgQEAKLSMhL3Vzci9iaW4v
ZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KLSMgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwot
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0j
IGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0j
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotIiIiUnVuIGFsbCB0ZXN0cyBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuCi0iIiIKLQotCi1pbXBvcnQgb3MKLWltcG9ydCByZQotaW1wb3J0
IHVuaXR0ZXN0Ci0KLQotX1RFU1RfTU9EVUxFX1BBVFRFUk4gPSByZS5jb21waWxlKHInXih0ZXN0
Xy4rKVwucHkkJykKLQotCi1kZWYgX2xpc3RfdGVzdF9tb2R1bGVzKGRpcmVjdG9yeSk6Ci0gICAg
bW9kdWxlX25hbWVzID0gW10KLSAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihkaXJlY3Rv
cnkpOgotICAgICAgICBtYXRjaCA9IF9URVNUX01PRFVMRV9QQVRURVJOLnNlYXJjaChmaWxlbmFt
ZSkKLSAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgICBtb2R1bGVfbmFtZXMuYXBwZW5kKG1h
dGNoLmdyb3VwKDEpKQotICAgIHJldHVybiBtb2R1bGVfbmFtZXMKLQotCi1kZWYgX3N1aXRlKCk6
Ci0gICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgcmV0dXJuIGxvYWRlci5s
b2FkVGVzdHNGcm9tTmFtZXMoCi0gICAgICAgICAgICBfbGlzdF90ZXN0X21vZHVsZXMob3MucGF0
aC5qb2luKG9zLnBhdGguc3BsaXQoX19maWxlX18pWzBdLCAnLicpKSkKLQotCi1pZiBfX25hbWVf
XyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J19zdWl0ZScp
Ci0KLQotIyB2aTpzdHM9NCBzdz00IGV0CkluZGV4OiBXZWJLaXRUb29scy9weXdlYnNvY2tldC90
ZXN0L3Rlc3RfZGlzcGF0Y2gucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvcHl3ZWJzb2Nr
ZXQvdGVzdC90ZXN0X2Rpc3BhdGNoLnB5CShyZXZpc2lvbiA1NTA1NikKKysrIFdlYktpdFRvb2xz
L3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9kaXNwYXRjaC5weQkod29ya2luZyBjb3B5KQpAQCAtMSwy
NDQgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAyMDA5LCBH
b29nbGUgSW5jLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
Ci0iIiJUZXN0cyBmb3IgZGlzcGF0Y2ggbW9kdWxlLiIiIgotCi0KLQotaW1wb3J0IG9zCi1pbXBv
cnQgdW5pdHRlc3QKLQotaW1wb3J0IGNvbmZpZyAgIyBUaGlzIG11c3QgYmUgaW1wb3J0ZWQgYmVm
b3JlIG1vZF9weXdlYnNvY2tldC4KLWZyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBkaXNwYXRj
aAotCi1pbXBvcnQgbW9jawotCi0KLV9URVNUX0hBTkRMRVJTX0RJUiA9IG9zLnBhdGguam9pbigK
LSAgICAgICAgb3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0sICd0ZXN0ZGF0YScsICdoYW5kbGVy
cycpCi0KLV9URVNUX0hBTkRMRVJTX1NVQl9ESVIgPSBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExF
UlNfRElSLCAnc3ViJykKLQotY2xhc3MgRGlzcGF0Y2hlclRlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgotICAgIGRlZiB0ZXN0X25vcm1hbGl6ZV9wYXRoKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKG9zLnBhdGguYWJzcGF0aCgnL2EvYicpLnJlcGxhY2UoJ1xcJywgJy8nKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaC5fbm9ybWFsaXplX3BhdGgoJy9hL2InKSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmFic3BhdGgoJy9hL2InKS5yZXBsYWNlKCdc
XCcsICcvJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2guX25vcm1hbGl6ZV9w
YXRoKCdcXGFcXGInKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmFic3BhdGgo
Jy9hL2InKS5yZXBsYWNlKCdcXCcsICcvJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGlz
cGF0Y2guX25vcm1hbGl6ZV9wYXRoKCcvYS9jLy4uL2InKSkKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChvcy5wYXRoLmFic3BhdGgoJ2FiYycpLnJlcGxhY2UoJ1xcJywgJy8nKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBkaXNwYXRjaC5fbm9ybWFsaXplX3BhdGgoJ2FiYycpKQotCi0gICAg
ZGVmIHRlc3RfY29udmVydGVyKHNlbGYpOgotICAgICAgICBjb252ZXJ0ZXIgPSBkaXNwYXRjaC5f
cGF0aF90b19yZXNvdXJjZV9jb252ZXJ0ZXIoJy9hL2InKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCcvaCcsIGNvbnZlcnRlcignL2EvYi9oX3dzaC5weScpKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCcvYy9oJywgY29udmVydGVyKCcvYS9iL2MvaF93c2gucHknKSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChOb25lLCBjb252ZXJ0ZXIoJy9hL2IvaC5weScpKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKE5vbmUsIGNvbnZlcnRlcignYS9iL2hfd3NoLnB5JykpCi0KLSAgICAgICAg
Y29udmVydGVyID0gZGlzcGF0Y2guX3BhdGhfdG9fcmVzb3VyY2VfY29udmVydGVyKCdhL2InKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvaCcsIGNvbnZlcnRlcignYS9iL2hfd3NoLnB5Jykp
Ci0KLSAgICAgICAgY29udmVydGVyID0gZGlzcGF0Y2guX3BhdGhfdG9fcmVzb3VyY2VfY29udmVy
dGVyKCcvYS9iLy8vJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2gnLCBjb252ZXJ0ZXIo
Jy9hL2IvaF93c2gucHknKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2gnLCBjb252ZXJ0
ZXIoJy9hL2IvLi4vYi9oX3dzaC5weScpKQotCi0gICAgICAgIGNvbnZlcnRlciA9IGRpc3BhdGNo
Ll9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRlcignL2EvLi4vYS9iLy4uL2IvJykKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnL2gnLCBjb252ZXJ0ZXIoJy9hL2IvaF93c2gucHknKSkKLQotICAg
ICAgICBjb252ZXJ0ZXIgPSBkaXNwYXRjaC5fcGF0aF90b19yZXNvdXJjZV9jb252ZXJ0ZXIocidc
YVxiJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2gnLCBjb252ZXJ0ZXIocidcYVxiXGhf
d3NoLnB5JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9oJywgY29udmVydGVyKHInL2Ev
Yi9oX3dzaC5weScpKQotCi0gICAgZGVmIHRlc3Rfc291cmNlX2ZpbGVfcGF0aHMoc2VsZik6Ci0g
ICAgICAgIHBhdGhzID0gbGlzdChkaXNwYXRjaC5fc291cmNlX2ZpbGVfcGF0aHMoX1RFU1RfSEFO
RExFUlNfRElSKSkKLSAgICAgICAgcGF0aHMuc29ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoNywgbGVuKHBhdGhzKSkKLSAgICAgICAgZXhwZWN0ZWRfcGF0aHMgPSBbCi0gICAgICAgICAg
ICAgICAgb3MucGF0aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJUiwgJ2JsYW5rX3dzaC5weScpLAot
ICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihfVEVTVF9IQU5ETEVSU19ESVIsICdvcmlnaW5f
Y2hlY2tfd3NoLnB5JyksCi0gICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKF9URVNUX0hBTkRM
RVJTX0RJUiwgJ3N1YicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHRpb25f
aW5fdHJhbnNmZXJfd3NoLnB5JyksCi0gICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKF9URVNU
X0hBTkRMRVJTX0RJUiwgJ3N1YicsICdub25fY2FsbGFibGVfd3NoLnB5JyksCi0gICAgICAgICAg
ICAgICAgb3MucGF0aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJUiwgJ3N1YicsICdwbGFpbl93c2gu
cHknKSwKLSAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAn
c3ViJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dyb25nX2hhbmRzaGFrZV9zaWdf
d3NoLnB5JyksCi0gICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJ
UiwgJ3N1YicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3cm9uZ190cmFuc2Zlcl9z
aWdfd3NoLnB5JyksCi0gICAgICAgICAgICAgICAgXQotICAgICAgICBmb3IgZXhwZWN0ZWQsIGFj
dHVhbCBpbiB6aXAoZXhwZWN0ZWRfcGF0aHMsIHBhdGhzKToKLSAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKLQotICAgIGRlZiB0ZXN0X3NvdXJjZShzZWxmKToK
LSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGlzcGF0Y2guRGlzcGF0Y2hFcnJvciwgZGlzcGF0
Y2guX3NvdXJjZSwgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRpc3BhdGNoLkRpc3Bh
dGNoRXJyb3IsIGRpc3BhdGNoLl9zb3VyY2UsICdkZWYnKQotICAgICAgICBzZWxmLmFzc2VydFJh
aXNlcyhkaXNwYXRjaC5EaXNwYXRjaEVycm9yLCBkaXNwYXRjaC5fc291cmNlLCAnMS8wJykKLSAg
ICAgICAgc2VsZi5mYWlsVW5sZXNzKGRpc3BhdGNoLl9zb3VyY2UoCi0gICAgICAgICAgICAgICAg
J2RlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KTpwYXNzXG4nCi0gICAg
ICAgICAgICAgICAgJ2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6cGFzc1xu
JykpCi0KLSAgICBkZWYgdGVzdF9zb3VyY2Vfd2FybmluZ3Moc2VsZik6Ci0gICAgICAgIGRpc3Bh
dGNoZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9URVNUX0hBTkRMRVJTX0RJUiwgTm9uZSkKLSAg
ICAgICAgd2FybmluZ3MgPSBkaXNwYXRjaGVyLnNvdXJjZV93YXJuaW5ncygpCi0gICAgICAgIHdh
cm5pbmdzLnNvcnQoKQotICAgICAgICBleHBlY3RlZF93YXJuaW5ncyA9IFsKLSAgICAgICAgICAg
ICAgICAob3MucGF0aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJUiwgJ2JsYW5rX3dzaC5weScpICsK
LSAgICAgICAgICAgICAgICAgJzogd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UgaXMgbm90
IGRlZmluZWQuJyksCi0gICAgICAgICAgICAgICAgKG9zLnBhdGguam9pbihfVEVTVF9IQU5ETEVS
U19ESVIsICdzdWInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vbl9jYWxsYWJs
ZV93c2gucHknKSArCi0gICAgICAgICAgICAgICAgICc6IHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFu
ZHNoYWtlIGlzIG5vdCBjYWxsYWJsZS4nKSwKLSAgICAgICAgICAgICAgICAob3MucGF0aC5qb2lu
KF9URVNUX0hBTkRMRVJTX0RJUiwgJ3N1YicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnd3JvbmdfaGFuZHNoYWtlX3NpZ193c2gucHknKSArCi0gICAgICAgICAgICAgICAgICc6IHdl
Yl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlIGlzIG5vdCBkZWZpbmVkLicpLAotICAgICAgICAg
ICAgICAgIChvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnc3ViJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICd3cm9uZ190cmFuc2Zlcl9zaWdfd3NoLnB5JykgKwotICAg
ICAgICAgICAgICAgICAnOiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEgaXMgbm90IGRlZmluZWQu
JyksCi0gICAgICAgICAgICAgICAgXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg0LCBsZW4o
d2FybmluZ3MpKQotICAgICAgICBmb3IgZXhwZWN0ZWQsIGFjdHVhbCBpbiB6aXAoZXhwZWN0ZWRf
d2FybmluZ3MsIHdhcm5pbmdzKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVj
dGVkLCBhY3R1YWwpCi0KLSAgICBkZWYgdGVzdF9kb19leHRyYV9oYW5kc2hha2Uoc2VsZik6Ci0g
ICAgICAgIGRpc3BhdGNoZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9URVNUX0hBTkRMRVJTX0RJ
UiwgTm9uZSkKLSAgICAgICAgcmVxdWVzdCA9IG1vY2suTW9ja1JlcXVlc3QoKQotICAgICAgICBy
ZXF1ZXN0LndzX3Jlc291cmNlID0gJy9vcmlnaW5fY2hlY2snCi0gICAgICAgIHJlcXVlc3Qud3Nf
b3JpZ2luID0gJ2h0dHA6Ly9leGFtcGxlLmNvbScKLSAgICAgICAgZGlzcGF0Y2hlci5kb19leHRy
YV9oYW5kc2hha2UocmVxdWVzdCkgICMgTXVzdCBub3QgcmFpc2UgZXhjZXB0aW9uLgotCi0gICAg
ICAgIHJlcXVlc3Qud3Nfb3JpZ2luID0gJ2h0dHA6Ly9iYWQuZXhhbXBsZS5jb20nCi0gICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgZGlzcGF0Y2hlci5kb19leHRyYV9oYW5kc2hh
a2UsIHJlcXVlc3QpCi0KLSAgICBkZWYgdGVzdF90cmFuc2Zlcl9kYXRhKHNlbGYpOgotICAgICAg
ICBkaXNwYXRjaGVyID0gZGlzcGF0Y2guRGlzcGF0Y2hlcihfVEVTVF9IQU5ETEVSU19ESVIsIE5v
bmUpCi0gICAgICAgIHJlcXVlc3QgPSBtb2NrLk1vY2tSZXF1ZXN0KGNvbm5lY3Rpb249bW9jay5N
b2NrQ29ubignJykpCi0gICAgICAgIHJlcXVlc3Qud3NfcmVzb3VyY2UgPSAnL29yaWdpbl9jaGVj
aycKLSAgICAgICAgcmVxdWVzdC53c19wcm90b2NvbCA9ICdwMScKLQotICAgICAgICBkaXNwYXRj
aGVyLnRyYW5zZmVyX2RhdGEocmVxdWVzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnb3Jp
Z2luX2NoZWNrX3dzaC5weSBpcyBjYWxsZWQgZm9yIC9vcmlnaW5fY2hlY2ssIHAxJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCi0K
LSAgICAgICAgcmVxdWVzdCA9IG1vY2suTW9ja1JlcXVlc3QoY29ubmVjdGlvbj1tb2NrLk1vY2tD
b25uKCcnKSkKLSAgICAgICAgcmVxdWVzdC53c19yZXNvdXJjZSA9ICcvc3ViL3BsYWluJwotICAg
ICAgICByZXF1ZXN0LndzX3Byb3RvY29sID0gTm9uZQotICAgICAgICBkaXNwYXRjaGVyLnRyYW5z
ZmVyX2RhdGEocmVxdWVzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc3ViL3BsYWluX3dz
aC5weSBpcyBjYWxsZWQgZm9yIC9zdWIvcGxhaW4sIE5vbmUnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKLQotICAgICAgICByZXF1
ZXN0ID0gbW9jay5Nb2NrUmVxdWVzdChjb25uZWN0aW9uPW1vY2suTW9ja0Nvbm4oJycpKQotICAg
ICAgICByZXF1ZXN0LndzX3Jlc291cmNlID0gJy9zdWIvcGxhaW4/JwotICAgICAgICByZXF1ZXN0
LndzX3Byb3RvY29sID0gTm9uZQotICAgICAgICBkaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEocmVx
dWVzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc3ViL3BsYWluX3dzaC5weSBpcyBjYWxs
ZWQgZm9yIC9zdWIvcGxhaW4/LCBOb25lJywKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCi0KLSAgICAgICAgcmVxdWVzdCA9IG1vY2su
TW9ja1JlcXVlc3QoY29ubmVjdGlvbj1tb2NrLk1vY2tDb25uKCcnKSkKLSAgICAgICAgcmVxdWVz
dC53c19yZXNvdXJjZSA9ICcvc3ViL3BsYWluP3E9dicKLSAgICAgICAgcmVxdWVzdC53c19wcm90
b2NvbCA9IE5vbmUKLSAgICAgICAgZGlzcGF0Y2hlci50cmFuc2Zlcl9kYXRhKHJlcXVlc3QpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3N1Yi9wbGFpbl93c2gucHkgaXMgY2FsbGVkIGZvciAv
c3ViL3BsYWluP3E9diwgTm9uZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5j
b25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQotCi0gICAgZGVmIHRlc3RfdHJhbnNmZXJfZGF0YV9u
b19oYW5kbGVyKHNlbGYpOgotICAgICAgICBkaXNwYXRjaGVyID0gZGlzcGF0Y2guRGlzcGF0Y2hl
cihfVEVTVF9IQU5ETEVSU19ESVIsIE5vbmUpCi0gICAgICAgIGZvciByZXNvdXJjZSBpbiBbJy9i
bGFuaycsICcvc3ViL25vbl9jYWxsYWJsZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJy9z
dWIvbm9fd3NoX2F0X3RoZV9lbmQnLCAnL2RvZXMvbm90L2V4aXN0J106Ci0gICAgICAgICAgICBy
ZXF1ZXN0ID0gbW9jay5Nb2NrUmVxdWVzdChjb25uZWN0aW9uPW1vY2suTW9ja0Nvbm4oJycpKQot
ICAgICAgICAgICAgcmVxdWVzdC53c19yZXNvdXJjZSA9IHJlc291cmNlCi0gICAgICAgICAgICBy
ZXF1ZXN0LndzX3Byb3RvY29sID0gJ3AyJwotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAg
ICAgIGRpc3BhdGNoZXIudHJhbnNmZXJfZGF0YShyZXF1ZXN0KQotICAgICAgICAgICAgICAgIHNl
bGYuZmFpbCgpCi0gICAgICAgICAgICBleGNlcHQgZGlzcGF0Y2guRGlzcGF0Y2hFcnJvciwgZToK
LSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RyKGUpLmZpbmQoJ05vIGhhbmRsZXIn
KSAhPSAtMSkKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAg
c2VsZi5mYWlsKCkKLQotICAgIGRlZiB0ZXN0X3RyYW5zZmVyX2RhdGFfaGFuZGxlcl9leGNlcHRp
b24oc2VsZik6Ci0gICAgICAgIGRpc3BhdGNoZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9URVNU
X0hBTkRMRVJTX0RJUiwgTm9uZSkKLSAgICAgICAgcmVxdWVzdCA9IG1vY2suTW9ja1JlcXVlc3Qo
Y29ubmVjdGlvbj1tb2NrLk1vY2tDb25uKCcnKSkKLSAgICAgICAgcmVxdWVzdC53c19yZXNvdXJj
ZSA9ICcvc3ViL2V4Y2VwdGlvbl9pbl90cmFuc2ZlcicKLSAgICAgICAgcmVxdWVzdC53c19wcm90
b2NvbCA9ICdwMycKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGlzcGF0Y2hlci50cmFuc2Zl
cl9kYXRhKHJlcXVlc3QpCi0gICAgICAgICAgICBzZWxmLmZhaWwoKQotICAgICAgICBleGNlcHQg
RXhjZXB0aW9uLCBlOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cihlKS5maW5kKCdJ
bnRlbnRpb25hbCcpICE9IC0xKQotCi0gICAgZGVmIHRlc3Rfc2Nhbl9kaXIoc2VsZik6Ci0gICAg
ICAgIGRpc3AgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9URVNUX0hBTkRMRVJTX0RJUiwgTm9uZSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBsZW4oZGlzcC5faGFuZGxlcnMpKQotICAgICAg
ICBzZWxmLmZhaWxVbmxlc3MoZGlzcC5faGFuZGxlcnMuaGFzX2tleSgnL29yaWdpbl9jaGVjaycp
KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZGlzcC5faGFuZGxlcnMuaGFzX2tleSgnL3N1Yi9l
eGNlcHRpb25faW5fdHJhbnNmZXInKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRpc3AuX2hh
bmRsZXJzLmhhc19rZXkoJy9zdWIvcGxhaW4nKSkKLQotICAgIGRlZiB0ZXN0X3NjYW5fc3ViX2Rp
cihzZWxmKToKLSAgICAgICAgZGlzcCA9IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RFU1RfSEFORExF
UlNfRElSLCBfVEVTVF9IQU5ETEVSU19TVUJfRElSKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KDIsIGxlbihkaXNwLl9oYW5kbGVycykpCi0gICAgICAgIHNlbGYuZmFpbElmKGRpc3AuX2hhbmRs
ZXJzLmhhc19rZXkoJy9vcmlnaW5fY2hlY2snKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRp
c3AuX2hhbmRsZXJzLmhhc19rZXkoJy9zdWIvZXhjZXB0aW9uX2luX3RyYW5zZmVyJykpCi0gICAg
ICAgIHNlbGYuZmFpbFVubGVzcyhkaXNwLl9oYW5kbGVycy5oYXNfa2V5KCcvc3ViL3BsYWluJykp
Ci0KLSAgICBkZWYgdGVzdF9zY2FuX3N1Yl9kaXJfYXNfcm9vdChzZWxmKToKLSAgICAgICAgZGlz
cCA9IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RFU1RfSEFORExFUlNfU1VCX0RJUiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RFU1RfSEFORExFUlNfU1VCX0RJUikKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oZGlzcC5faGFuZGxlcnMpKQotICAgICAgICBzZWxm
LmZhaWxJZihkaXNwLl9oYW5kbGVycy5oYXNfa2V5KCcvb3JpZ2luX2NoZWNrJykpCi0gICAgICAg
IHNlbGYuZmFpbElmKGRpc3AuX2hhbmRsZXJzLmhhc19rZXkoJy9zdWIvZXhjZXB0aW9uX2luX3Ry
YW5zZmVyJykpCi0gICAgICAgIHNlbGYuZmFpbElmKGRpc3AuX2hhbmRsZXJzLmhhc19rZXkoJy9z
dWIvcGxhaW4nKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRpc3AuX2hhbmRsZXJzLmhhc19r
ZXkoJy9leGNlcHRpb25faW5fdHJhbnNmZXInKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRp
c3AuX2hhbmRsZXJzLmhhc19rZXkoJy9wbGFpbicpKQotCi0gICAgZGVmIHRlc3Rfc2Nhbl9kaXJf
bXVzdF91bmRlcl9yb290KHNlbGYpOgotICAgICAgICBkaXNwYXRjaC5EaXNwYXRjaGVyKCdhL2In
LCAnYS9iL2MnKSAgIyBPSwotICAgICAgICBkaXNwYXRjaC5EaXNwYXRjaGVyKCdhL2IvLy8nLCAn
YS9iJykgICMgT0sKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGlzcGF0Y2guRGlzcGF0Y2hF
cnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2guRGlzcGF0Y2hlciwgJ2Ev
Yi9jJywgJ2EvYicpCi0KLSAgICBkZWYgdGVzdF9yZXNvdXJjZV9wYXRoX2FsaWFzKHNlbGYpOgot
ICAgICAgICBkaXNwID0gZGlzcGF0Y2guRGlzcGF0Y2hlcihfVEVTVF9IQU5ETEVSU19ESVIsIE5v
bmUpCi0gICAgICAgIGRpc3AuYWRkX3Jlc291cmNlX3BhdGhfYWxpYXMoJy8nLCAnL29yaWdpbl9j
aGVjaycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNCwgbGVuKGRpc3AuX2hhbmRsZXJzKSkK
LSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRpc3AuX2hhbmRsZXJzLmhhc19rZXkoJy9vcmlnaW5f
Y2hlY2snKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRpc3AuX2hhbmRsZXJzLmhhc19rZXko
Jy9zdWIvZXhjZXB0aW9uX2luX3RyYW5zZmVyJykpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhk
aXNwLl9oYW5kbGVycy5oYXNfa2V5KCcvc3ViL3BsYWluJykpCi0gICAgICAgIHNlbGYuZmFpbFVu
bGVzcyhkaXNwLl9oYW5kbGVycy5oYXNfa2V5KCcvJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFp
c2VzKGRpc3BhdGNoLkRpc3BhdGNoRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRp
c3AuYWRkX3Jlc291cmNlX3BhdGhfYWxpYXMsICcvYWxpYXMnLCAnL25vdC1leGlzdCcpCi0KLQot
aWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1bml0dGVzdC5tYWluKCkKLQotCi0jIHZp
OnN0cz00IHN3PTQgZXQKSW5kZXg6IFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9o
YW5kc2hha2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90
ZXN0X2hhbmRzaGFrZS5weQkocmV2aXNpb24gNTUwNTYpCisrKyBXZWJLaXRUb29scy9weXdlYnNv
Y2tldC90ZXN0L3Rlc3RfaGFuZHNoYWtlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxMyArMCww
IEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJ
bmMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMK
LSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLSIiIlRl
c3RzIGZvciBoYW5kc2hha2UgbW9kdWxlLiIiIgotCi0KLWltcG9ydCB1bml0dGVzdAotCi1pbXBv
cnQgY29uZmlnICAjIFRoaXMgbXVzdCBiZSBpbXBvcnRlZCBiZWZvcmUgbW9kX3B5d2Vic29ja2V0
LgotZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGhhbmRzaGFrZQotCi1pbXBvcnQgbW9jawot
Ci0KLV9HT09EX1JFUVVFU1QgPSAoCi0gICAgODAsCi0gICAgJy9kZW1vJywKLSAgICB7Ci0gICAg
ICAgICdVcGdyYWRlJzonV2ViU29ja2V0JywKLSAgICAgICAgJ0Nvbm5lY3Rpb24nOidVcGdyYWRl
JywKLSAgICAgICAgJ0hvc3QnOidleGFtcGxlLmNvbScsCi0gICAgICAgICdPcmlnaW4nOidodHRw
Oi8vZXhhbXBsZS5jb20nLAotICAgICAgICAnV2ViU29ja2V0LVByb3RvY29sJzonc2FtcGxlJywK
LSAgICB9Ci0pCi0KLV9HT09EX1JFU1BPTlNFX0RFRkFVTFRfUE9SVCA9ICgKLSAgICAnSFRUUC8x
LjEgMTAxIFdlYiBTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicKLSAgICAnVXBncmFkZTog
V2ViU29ja2V0XHJcbicKLSAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nCi0gICAgJ1dlYlNv
Y2tldC1PcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nCi0gICAgJ1dlYlNvY2tldC1Mb2Nh
dGlvbjogd3M6Ly9leGFtcGxlLmNvbS9kZW1vXHJcbicKLSAgICAnV2ViU29ja2V0LVByb3RvY29s
OiBzYW1wbGVcclxuJwotICAgICdcclxuJykKLQotX0dPT0RfUkVTUE9OU0VfU0VDVVJFID0gKAot
ICAgICdIVFRQLzEuMSAxMDEgV2ViIFNvY2tldCBQcm90b2NvbCBIYW5kc2hha2VcclxuJwotICAg
ICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJwotICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicK
LSAgICAnV2ViU29ja2V0LU9yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicKLSAgICAnV2Vi
U29ja2V0LUxvY2F0aW9uOiB3c3M6Ly9leGFtcGxlLmNvbS9kZW1vXHJcbicKLSAgICAnV2ViU29j
a2V0LVByb3RvY29sOiBzYW1wbGVcclxuJwotICAgICdcclxuJykKLQotX0dPT0RfUkVRVUVTVF9O
T05ERUZBVUxUX1BPUlQgPSAoCi0gICAgODA4MSwKLSAgICAnL2RlbW8nLAotICAgIHsKLSAgICAg
ICAgJ1VwZ3JhZGUnOidXZWJTb2NrZXQnLAotICAgICAgICAnQ29ubmVjdGlvbic6J1VwZ3JhZGUn
LAotICAgICAgICAnSG9zdCc6J2V4YW1wbGUuY29tOjgwODEnLAotICAgICAgICAnT3JpZ2luJzon
aHR0cDovL2V4YW1wbGUuY29tJywKLSAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6J3NhbXBs
ZScsCi0gICAgfQotKQotCi1fR09PRF9SRVNQT05TRV9OT05ERUZBVUxUX1BPUlQgPSAoCi0gICAg
J0hUVFAvMS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nCi0gICAgJ1Vw
Z3JhZGU6IFdlYlNvY2tldFxyXG4nCi0gICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJwotICAg
ICdXZWJTb2NrZXQtT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJwotICAgICdXZWJTb2Nr
ZXQtTG9jYXRpb246IHdzOi8vZXhhbXBsZS5jb206ODA4MS9kZW1vXHJcbicKLSAgICAnV2ViU29j
a2V0LVByb3RvY29sOiBzYW1wbGVcclxuJwotICAgICdcclxuJykKLQotX0dPT0RfUkVTUE9OU0Vf
U0VDVVJFX05PTkRFRiA9ICgKLSAgICAnSFRUUC8xLjEgMTAxIFdlYiBTb2NrZXQgUHJvdG9jb2wg
SGFuZHNoYWtlXHJcbicKLSAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKLSAgICAnQ29ubmVj
dGlvbjogVXBncmFkZVxyXG4nCi0gICAgJ1dlYlNvY2tldC1PcmlnaW46IGh0dHA6Ly9leGFtcGxl
LmNvbVxyXG4nCi0gICAgJ1dlYlNvY2tldC1Mb2NhdGlvbjogd3NzOi8vZXhhbXBsZS5jb206ODA4
MS9kZW1vXHJcbicKLSAgICAnV2ViU29ja2V0LVByb3RvY29sOiBzYW1wbGVcclxuJwotICAgICdc
clxuJykKLQotX0dPT0RfUkVRVUVTVF9OT19QUk9UT0NPTCA9ICgKLSAgICA4MCwKLSAgICAnL2Rl
bW8nLAotICAgIHsKLSAgICAgICAgJ1VwZ3JhZGUnOidXZWJTb2NrZXQnLAotICAgICAgICAnQ29u
bmVjdGlvbic6J1VwZ3JhZGUnLAotICAgICAgICAnSG9zdCc6J2V4YW1wbGUuY29tJywKLSAgICAg
ICAgJ09yaWdpbic6J2h0dHA6Ly9leGFtcGxlLmNvbScsCi0gICAgfQotKQotCi1fR09PRF9SRVNQ
T05TRV9OT19QUk9UT0NPTCA9ICgKLSAgICAnSFRUUC8xLjEgMTAxIFdlYiBTb2NrZXQgUHJvdG9j
b2wgSGFuZHNoYWtlXHJcbicKLSAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKLSAgICAnQ29u
bmVjdGlvbjogVXBncmFkZVxyXG4nCi0gICAgJ1dlYlNvY2tldC1PcmlnaW46IGh0dHA6Ly9leGFt
cGxlLmNvbVxyXG4nCi0gICAgJ1dlYlNvY2tldC1Mb2NhdGlvbjogd3M6Ly9leGFtcGxlLmNvbS9k
ZW1vXHJcbicKLSAgICAnXHJcbicpCi0KLV9HT09EX1JFUVVFU1RfV0lUSF9PUFRJT05BTF9IRUFE
RVJTID0gKAotICAgIDgwLAotICAgICcvZGVtbycsCi0gICAgewotICAgICAgICAnVXBncmFkZSc6
J1dlYlNvY2tldCcsCi0gICAgICAgICdDb25uZWN0aW9uJzonVXBncmFkZScsCi0gICAgICAgICdI
b3N0JzonZXhhbXBsZS5jb20nLAotICAgICAgICAnT3JpZ2luJzonaHR0cDovL2V4YW1wbGUuY29t
JywKLSAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6J3NhbXBsZScsCi0gICAgICAgICdBS2V5
JzonQVZhbHVlJywKLSAgICAgICAgJ0VtcHR5VmFsdWUnOicnLAotICAgIH0KLSkKLQotX0JBRF9S
RVFVRVNUUyA9ICgKLSAgICAoICAjIEhUVFAgcmVxdWVzdAotICAgICAgICA4MCwKLSAgICAgICAg
Jy9kZW1vJywKLSAgICAgICAgewotICAgICAgICAgICAgJ0hvc3QnOid3d3cuZ29vZ2xlLmNvbScs
Ci0gICAgICAgICAgICAnVXNlci1BZ2VudCc6J01vemlsbGEvNS4wIChNYWNpbnRvc2g7IFU7IElu
dGVsIE1hYyBPUyBYIDEwLjU7JwotICAgICAgICAgICAgICAgICAgICAgICAgICcgZW4tVVM7IHJ2
OjEuOS4xLjMpIEdlY2tvLzIwMDkwODI0IEZpcmVmb3gvMy41LjMnCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgJyBHVEI2IEdUQkEnLAotICAgICAgICAgICAgJ0FjY2VwdCc6J3RleHQvaHRtbCxh
cHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LCcKLSAgICAgICAgICAg
ICAgICAgICAgICcqLyo7cT0wLjgnLAotICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6J2Vu
LXVzLGVuO3E9MC41JywKLSAgICAgICAgICAgICdBY2NlcHQtRW5jb2RpbmcnOidnemlwLGRlZmxh
dGUnLAotICAgICAgICAgICAgJ0FjY2VwdC1DaGFyc2V0JzonSVNPLTg4NTktMSx1dGYtODtxPTAu
NywqO3E9MC43JywKLSAgICAgICAgICAgICdLZWVwLUFsaXZlJzonMzAwJywKLSAgICAgICAgICAg
ICdDb25uZWN0aW9uJzona2VlcC1hbGl2ZScsCi0gICAgICAgIH0KLSAgICApLAotICAgICggICMg
TWlzc2luZyBVcGdyYWRlCi0gICAgICAgIDgwLAotICAgICAgICAnL2RlbW8nLAotICAgICAgICB7
Ci0gICAgICAgICAgICAnQ29ubmVjdGlvbic6J1VwZ3JhZGUnLAotICAgICAgICAgICAgJ0hvc3Qn
OidleGFtcGxlLmNvbScsCi0gICAgICAgICAgICAnT3JpZ2luJzonaHR0cDovL2V4YW1wbGUuY29t
JywKLSAgICAgICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2wnOidzYW1wbGUnLAotICAgICAgICB9
Ci0gICAgKSwKLSAgICAoICAjIFdyb25nIFVwZ3JhZGUKLSAgICAgICAgODAsCi0gICAgICAgICcv
ZGVtbycsCi0gICAgICAgIHsKLSAgICAgICAgICAgICdVcGdyYWRlJzonTm9uV2ViU29ja2V0JywK
LSAgICAgICAgICAgICdDb25uZWN0aW9uJzonVXBncmFkZScsCi0gICAgICAgICAgICAnSG9zdCc6
J2V4YW1wbGUuY29tJywKLSAgICAgICAgICAgICdPcmlnaW4nOidodHRwOi8vZXhhbXBsZS5jb20n
LAotICAgICAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6J3NhbXBsZScsCi0gICAgICAgIH0K
LSAgICApLAotICAgICggICMgRW1wdHkgV2ViU29ja2V0LVByb3RvY29sCi0gICAgICAgIDgwLAot
ICAgICAgICAnL2RlbW8nLAotICAgICAgICB7Ci0gICAgICAgICAgICAnVXBncmFkZSc6J1dlYlNv
Y2tldCcsCi0gICAgICAgICAgICAnQ29ubmVjdGlvbic6J1VwZ3JhZGUnLAotICAgICAgICAgICAg
J0hvc3QnOidleGFtcGxlLmNvbScsCi0gICAgICAgICAgICAnT3JpZ2luJzonaHR0cDovL2V4YW1w
bGUuY29tJywKLSAgICAgICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2wnOicnLAotICAgICAgICB9
Ci0gICAgKSwKLSAgICAoICAjIFdyb25nIHBvcnQgbnVtYmVyIGZvcm1hdAotICAgICAgICA4MCwK
LSAgICAgICAgJy9kZW1vJywKLSAgICAgICAgewotICAgICAgICAgICAgJ1VwZ3JhZGUnOidXZWJT
b2NrZXQnLAotICAgICAgICAgICAgJ0Nvbm5lY3Rpb24nOidVcGdyYWRlJywKLSAgICAgICAgICAg
ICdIb3N0JzonZXhhbXBsZS5jb206MHg1MCcsCi0gICAgICAgICAgICAnT3JpZ2luJzonaHR0cDov
L2V4YW1wbGUuY29tJywKLSAgICAgICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2wnOidzYW1wbGUn
LAotICAgICAgICB9Ci0gICAgKSwKLSAgICAoICAjIEhlYWRlci9jb25uZWN0aW9uIHBvcnQgbWlz
bWF0Y2gKLSAgICAgICAgODA4MCwKLSAgICAgICAgJy9kZW1vJywKLSAgICAgICAgewotICAgICAg
ICAgICAgJ1VwZ3JhZGUnOidXZWJTb2NrZXQnLAotICAgICAgICAgICAgJ0Nvbm5lY3Rpb24nOidV
cGdyYWRlJywKLSAgICAgICAgICAgICdIb3N0JzonZXhhbXBsZS5jb20nLAotICAgICAgICAgICAg
J09yaWdpbic6J2h0dHA6Ly9leGFtcGxlLmNvbScsCi0gICAgICAgICAgICAnV2ViU29ja2V0LVBy
b3RvY29sJzonc2FtcGxlJywKLSAgICAgICAgfQotICAgICksCi0gICAgKCAgIyBJbGxlZ2FsIFdl
YlNvY2tldC1Qcm90b2NvbAotICAgICAgICA4MCwKLSAgICAgICAgJy9kZW1vJywKLSAgICAgICAg
ewotICAgICAgICAgICAgJ1VwZ3JhZGUnOidXZWJTb2NrZXQnLAotICAgICAgICAgICAgJ0Nvbm5l
Y3Rpb24nOidVcGdyYWRlJywKLSAgICAgICAgICAgICdIb3N0JzonZXhhbXBsZS5jb20nLAotICAg
ICAgICAgICAgJ09yaWdpbic6J2h0dHA6Ly9leGFtcGxlLmNvbScsCi0gICAgICAgICAgICAnV2Vi
U29ja2V0LVByb3RvY29sJzonaWxsZWdhbFx4MDlwcm90b2NvbCcsCi0gICAgICAgIH0KLSAgICAp
LAotKQotCi1fU1RSSUNUTFlfR09PRF9SRVFVRVNUUyA9ICgKLSAgICAoCi0gICAgICAgICdHRVQg
L2RlbW8gSFRUUC8xLjFcclxuJywKLSAgICAgICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nLAot
ICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nLAotICAgICAgICAnSG9zdDogZXhhbXBs
ZS5jb21cclxuJywKLSAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicsCi0g
ICAgICAgICdcclxuJywKLSAgICApLAotICAgICggICMgV2ViU29ja2V0LVByb3RvY29sCi0gICAg
ICAgICdHRVQgL2RlbW8gSFRUUC8xLjFcclxuJywKLSAgICAgICAgJ1VwZ3JhZGU6IFdlYlNvY2tl
dFxyXG4nLAotICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nLAotICAgICAgICAnSG9z
dDogZXhhbXBsZS5jb21cclxuJywKLSAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4YW1wbGUuY29t
XHJcbicsCi0gICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2w6IHNhbXBsZVxyXG4nLAotICAgICAg
ICAnXHJcbicsCi0gICAgKSwKLSAgICAoICAjIFdlYlNvY2tldC1Qcm90b2NvbCBhbmQgQ29va2ll
Ci0gICAgICAgICdHRVQgL2RlbW8gSFRUUC8xLjFcclxuJywKLSAgICAgICAgJ1VwZ3JhZGU6IFdl
YlNvY2tldFxyXG4nLAotICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nLAotICAgICAg
ICAnSG9zdDogZXhhbXBsZS5jb21cclxuJywKLSAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4YW1w
bGUuY29tXHJcbicsCi0gICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2w6IHNhbXBsZVxyXG4nLAot
ICAgICAgICAnQ29va2llOiB4eXpcclxuJwotICAgICAgICAnXHJcbicsCi0gICAgKSwKLSAgICAo
ICAjIENvb2tpZQotICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4xXHJcbicsCi0gICAgICAgICdV
cGdyYWRlOiBXZWJTb2NrZXRcclxuJywKLSAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxu
JywKLSAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCi0gICAgICAgICdPcmlnaW46IGh0
dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAotICAgICAgICAnQ29va2llOiBhYmMveHl6XHJcbicKLSAg
ICAgICAgJ0Nvb2tpZTI6ICRWZXJzaW9uPTFcclxuJwotICAgICAgICAnQ29va2llOiBhYmNcclxu
JwotICAgICAgICAnXHJcbicsCi0gICAgKSwKLSAgICAoCi0gICAgICAgICdHRVQgLyBIVFRQLzEu
MVxyXG4nLAotICAgICAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicsCi0gICAgICAgICdDb25u
ZWN0aW9uOiBVcGdyYWRlXHJcbicsCi0gICAgICAgICdIb3N0OiBleGFtcGxlLmNvbVxyXG4nLAot
ICAgICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJywKLSAgICAgICAgJ1xyXG4n
LAotICAgICksCi0pCi0KLV9OT1RfU1RSSUNUTFlfR09PRF9SRVFVRVNUUyA9ICgKLSAgICAoICAj
IEV4dHJhIHNwYWNlIGFmdGVyIEdFVAotICAgICAgICAnR0VUICAvZGVtbyBIVFRQLzEuMVxyXG4n
LAotICAgICAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicsCi0gICAgICAgICdDb25uZWN0aW9u
OiBVcGdyYWRlXHJcbicsCi0gICAgICAgICdIb3N0OiBleGFtcGxlLmNvbVxyXG4nLAotICAgICAg
ICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJywKLSAgICAgICAgJ1xyXG4nLAotICAg
ICksCi0gICAgKCAgIyBSZXNvdXJjZSBuYW1lIGRvZXNuJ3Qgc3RhdCB3aXRoICcvJwotICAgICAg
ICAnR0VUIGRlbW8gSFRUUC8xLjFcclxuJywKLSAgICAgICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxy
XG4nLAotICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nLAotICAgICAgICAnSG9zdDog
ZXhhbXBsZS5jb21cclxuJywKLSAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJc
bicsCi0gICAgICAgICdcclxuJywKLSAgICApLAotICAgICggICMgTm8gc3BhY2UgYWZ0ZXIgOgot
ICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4xXHJcbicsCi0gICAgICAgICdVcGdyYWRlOldlYlNv
Y2tldFxyXG4nLAotICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nLAotICAgICAgICAn
SG9zdDogZXhhbXBsZS5jb21cclxuJywKLSAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4YW1wbGUu
Y29tXHJcbicsCi0gICAgICAgICdcclxuJywKLSAgICApLAotICAgICggICMgTG93ZXIgY2FzZSBV
cGdyYWRlIGhlYWRlcgotICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4xXHJcbicsCi0gICAgICAg
ICd1cGdyYWRlOiBXZWJTb2NrZXRcclxuJywKLSAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVc
clxuJywKLSAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCi0gICAgICAgICdPcmlnaW46
IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAotICAgICAgICAnXHJcbicsCi0gICAgKSwKLSAgICAo
ICAjIENvbm5lY3Rpb24gY29tZXMgYmVmb3JlIFVwZ3JhZGUKLSAgICAgICAgJ0dFVCAvZGVtbyBI
VFRQLzEuMVxyXG4nLAotICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nLAotICAgICAg
ICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicsCi0gICAgICAgICdIb3N0OiBleGFtcGxlLmNvbVxy
XG4nLAotICAgICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJywKLSAgICAgICAg
J1xyXG4nLAotICAgICksCi0gICAgKCAgIyBPcmlnaW4gY29tZXMgYmVmb3JlIEhvc3QKLSAgICAg
ICAgJ0dFVCAvZGVtbyBIVFRQLzEuMVxyXG4nLAotICAgICAgICAnVXBncmFkZTogV2ViU29ja2V0
XHJcbicsCi0gICAgICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicsCi0gICAgICAgICdPcmln
aW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAotICAgICAgICAnSG9zdDogZXhhbXBsZS5jb21c
clxuJywKLSAgICAgICAgJ1xyXG4nLAotICAgICksCi0gICAgKCAgIyBIb3N0IGNvbnRpbnVlZCB0
byB0aGUgbmV4dCBsaW5lCi0gICAgICAgICdHRVQgL2RlbW8gSFRUUC8xLjFcclxuJywKLSAgICAg
ICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nLAotICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFk
ZVxyXG4nLAotICAgICAgICAnSG9zdDogZXhhbXBsZVxyXG4nLAotICAgICAgICAnIC5jb21cclxu
JywKLSAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicsCi0gICAgICAgICdc
clxuJywKLSAgICApLAotICAgICggIyBDb29raWUgY29tZXMgYmVmb3JlIFdlYlNvY2tldC1Qcm90
b2NvbAotICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4xXHJcbicsCi0gICAgICAgICdVcGdyYWRl
OiBXZWJTb2NrZXRcclxuJywKLSAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJywKLSAg
ICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCi0gICAgICAgICdPcmlnaW46IGh0dHA6Ly9l
eGFtcGxlLmNvbVxyXG4nLAotICAgICAgICAnQ29va2llOiB4eXpcclxuJwotICAgICAgICAnV2Vi
U29ja2V0LVByb3RvY29sOiBzYW1wbGVcclxuJywKLSAgICAgICAgJ1xyXG4nLAotICAgICksCi0g
ICAgKCAgIyBVbmtub3duIGhlYWRlcgotICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4xXHJcbics
Ci0gICAgICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywKLSAgICAgICAgJ0Nvbm5lY3Rpb246
IFVwZ3JhZGVcclxuJywKLSAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCi0gICAgICAg
ICdPcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAotICAgICAgICAnQ29udGVudC1UeXBl
OiB0ZXh0L2h0bWxcclxuJwotICAgICAgICAnXHJcbicsCi0gICAgKSwKLSAgICAoICAjIENvb2tp
ZSB3aXRoIGNvbnRpbnVhdGlvbiBsaW5lcwotICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4xXHJc
bicsCi0gICAgICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywKLSAgICAgICAgJ0Nvbm5lY3Rp
b246IFVwZ3JhZGVcclxuJywKLSAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCi0gICAg
ICAgICdPcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAotICAgICAgICAnQ29va2llOiB4
eXpcclxuJywKLSAgICAgICAgJyBhYmNcclxuJywKLSAgICAgICAgJyBkZWZnXHJcbicsCi0gICAg
ICAgICdcclxuJywKLSAgICApLAotICAgICggICMgV3JvbmctY2FzZSBjb29raWUKLSAgICAgICAg
J0dFVCAvZGVtbyBIVFRQLzEuMVxyXG4nLAotICAgICAgICAnVXBncmFkZTogV2ViU29ja2V0XHJc
bicsCi0gICAgICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicsCi0gICAgICAgICdIb3N0OiBl
eGFtcGxlLmNvbVxyXG4nLAotICAgICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxu
JywKLSAgICAgICAgJ2Nvb2tpZTogYWJjL3h5elxyXG4nCi0gICAgICAgICdcclxuJywKLSAgICAp
LAotICAgICggICMgQ29va2llLCBubyBzcGFjZSBhZnRlciBjb2xvbgotICAgICAgICAnR0VUIC9k
ZW1vIEhUVFAvMS4xXHJcbicsCi0gICAgICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywKLSAg
ICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJywKLSAgICAgICAgJ0hvc3Q6IGV4YW1wbGUu
Y29tXHJcbicsCi0gICAgICAgICdPcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAotICAg
ICAgICAnQ29va2llOmFiYy94eXpcclxuJwotICAgICAgICAnXHJcbicsCi0gICAgKSwKLSkKLQot
Ci1kZWYgX2NyZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfZGVmKToKLSAgICBjb25uID0gbW9jay5Nb2Nr
Q29ubignJykKLSAgICBjb25uLmxvY2FsX2FkZHIgPSAoJzAuMC4wLjAnLCByZXF1ZXN0X2RlZlsw
XSkKLSAgICByZXR1cm4gbW9jay5Nb2NrUmVxdWVzdCgKLSAgICAgICAgICAgIHVyaT1yZXF1ZXN0
X2RlZlsxXSwKLSAgICAgICAgICAgIGhlYWRlcnNfaW49cmVxdWVzdF9kZWZbMl0sCi0gICAgICAg
ICAgICBjb25uZWN0aW9uPWNvbm4pCi0KLQotZGVmIF9jcmVhdGVfZ2V0X21lbW9yaXplZF9saW5l
cyhsaW5lcyk6Ci0gICAgZGVmIGdldF9tZW1vcml6ZWRfbGluZXMoKToKLSAgICAgICAgcmV0dXJu
IGxpbmVzCi0gICAgcmV0dXJuIGdldF9tZW1vcml6ZWRfbGluZXMKLQotCi1kZWYgX2NyZWF0ZV9y
ZXF1ZXN0c193aXRoX2xpbmVzKHJlcXVlc3RfbGluZXNfc2V0KToKLSAgICByZXF1ZXN0cyA9IFtd
Ci0gICAgZm9yIGxpbmVzIGluIHJlcXVlc3RfbGluZXNfc2V0OgotICAgICAgICByZXF1ZXN0ID0g
X2NyZWF0ZV9yZXF1ZXN0KF9HT09EX1JFUVVFU1QpCi0gICAgICAgIHJlcXVlc3QuY29ubmVjdGlv
bi5nZXRfbWVtb3JpemVkX2xpbmVzID0gX2NyZWF0ZV9nZXRfbWVtb3JpemVkX2xpbmVzKAotICAg
ICAgICAgICAgICAgIGxpbmVzKQotICAgICAgICByZXF1ZXN0cy5hcHBlbmQocmVxdWVzdCkKLSAg
ICByZXR1cm4gcmVxdWVzdHMKLQotCi1jbGFzcyBIYW5kc2hha2VyVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6Ci0gICAgZGVmIHRlc3RfdmFsaWRhdGVfcHJvdG9jb2woc2VsZik6Ci0gICAgICAgIGhh
bmRzaGFrZS5fdmFsaWRhdGVfcHJvdG9jb2woJ3NhbXBsZScpICAjIHNob3VsZCBzdWNjZWVkLgot
ICAgICAgICBoYW5kc2hha2UuX3ZhbGlkYXRlX3Byb3RvY29sKCdTYW1wbGUnKSAgIyBzaG91bGQg
c3VjY2VlZC4KLSAgICAgICAgaGFuZHNoYWtlLl92YWxpZGF0ZV9wcm90b2NvbCgnc2FtcGxlXHgy
MHByb3RvY29sJykgICMgc2hvdWxkIHN1Y2NlZWQuCi0gICAgICAgIGhhbmRzaGFrZS5fdmFsaWRh
dGVfcHJvdG9jb2woJ3NhbXBsZVx4N2Vwcm90b2NvbCcpICAjIHNob3VsZCBzdWNjZWVkLgotICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhoYW5kc2hha2UuSGFuZHNoYWtlRXJyb3IsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGhhbmRzaGFrZS5fdmFsaWRhdGVfcHJvdG9jb2wsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhoYW5kc2hh
a2UuSGFuZHNoYWtlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRzaGFrZS5f
dmFsaWRhdGVfcHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdzYW1wbGVceDE5
cHJvdG9jb2wnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhoYW5kc2hha2UuSGFuZHNoYWtl
RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRzaGFrZS5fdmFsaWRhdGVfcHJv
dG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdzYW1wbGVceDdmcHJvdG9jb2wnKQot
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhoYW5kc2hha2UuSGFuZHNoYWtlRXJyb3IsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIGhhbmRzaGFrZS5fdmFsaWRhdGVfcHJvdG9jb2wsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICMgIkphcGFuIiBpbiBKYXBhbmVzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICB1J1x1NjVlNVx1NjcyYycpCi0KLSAgICBkZWYgdGVzdF9nb29kX3JlcXVl
c3RfZGVmYXVsdF9wb3J0KHNlbGYpOgotICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0
KF9HT09EX1JFUVVFU1QpCi0gICAgICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtl
cihyZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9j
ay5Nb2NrRGlzcGF0Y2hlcigpKQotICAgICAgICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX0dPT0RfUkVTUE9OU0VfREVGQVVMVF9QT1JULAotICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2RlbW8nLCByZXF1ZXN0LndzX3Jlc291cmNlKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdodHRwOi8vZXhhbXBsZS5jb20nLCByZXF1ZXN0Lndz
X29yaWdpbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnd3M6Ly9leGFtcGxlLmNvbS9kZW1v
JywgcmVxdWVzdC53c19sb2NhdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc2FtcGxl
JywgcmVxdWVzdC53c19wcm90b2NvbCkKLQotICAgIGRlZiB0ZXN0X2dvb2RfcmVxdWVzdF9zZWN1
cmVfZGVmYXVsdF9wb3J0KHNlbGYpOgotICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0
KF9HT09EX1JFUVVFU1QpCi0gICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5sb2NhbF9hZGRyID0g
KCcwLjAuMC4wJywgNDQzKQotICAgICAgICByZXF1ZXN0LmlzX2h0dHBzXyA9IFRydWUKLSAgICAg
ICAgaGFuZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3QsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCi0g
ICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChfR09PRF9SRVNQT05TRV9TRUNVUkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdz
YW1wbGUnLCByZXF1ZXN0LndzX3Byb3RvY29sKQotCi0gICAgZGVmIHRlc3RfZ29vZF9yZXF1ZXN0
X25vbmRlZmF1bHRfcG9ydChzZWxmKToKLSAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVz
dChfR09PRF9SRVFVRVNUX05PTkRFRkFVTFRfUE9SVCkKLSAgICAgICAgaGFuZHNoYWtlciA9IGhh
bmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCi0gICAgICAgIGhhbmRzaGFrZXIu
ZG9faGFuZHNoYWtlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfR09PRF9SRVNQT05TRV9O
T05ERUZBVUxUX1BPUlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0
aW9uLndyaXR0ZW5fZGF0YSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdzYW1wbGUnLCBy
ZXF1ZXN0LndzX3Byb3RvY29sKQotCi0gICAgZGVmIHRlc3RfZ29vZF9yZXF1ZXN0X3NlY3VyZV9u
b25fZGVmYXVsdF9wb3J0KHNlbGYpOgotICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0
KF9HT09EX1JFUVVFU1RfTk9OREVGQVVMVF9QT1JUKQotICAgICAgICByZXF1ZXN0LmlzX2h0dHBz
XyA9IFRydWUKLSAgICAgICAgaGFuZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVl
c3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLk1vY2tE
aXNwYXRjaGVyKCkpCi0gICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChfR09PRF9SRVNQT05TRV9TRUNVUkVfTk9OREVGLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnc2FtcGxlJywgcmVxdWVzdC53c19wcm90b2NvbCkKLQotICAg
IGRlZiB0ZXN0X2dvb2RfcmVxdWVzdF9kZWZhdWx0X25vX3Byb3RvY29sKHNlbGYpOgotICAgICAg
ICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KF9HT09EX1JFUVVFU1RfTk9fUFJPVE9DT0wpCi0g
ICAgICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrRGlzcGF0Y2hlcigp
KQotICAgICAgICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoX0dPT0RfUkVTUE9OU0VfTk9fUFJPVE9DT0wsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKE5vbmUsIHJlcXVlc3Qud3NfcHJvdG9jb2wpCi0KLSAgICBkZWYgdGVzdF9nb29kX3Jl
cXVlc3Rfb3B0aW9uYWxfaGVhZGVycyhzZWxmKToKLSAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVf
cmVxdWVzdChfR09PRF9SRVFVRVNUX1dJVEhfT1BUSU9OQUxfSEVBREVSUykKLSAgICAgICAgaGFu
ZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3QsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCi0gICAgICAg
IGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQVZh
bHVlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnNfaW5bJ0FLZXkn
XSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICByZXF1ZXN0LmhlYWRlcnNfaW5bJ0VtcHR5VmFsdWUnXSkKLQotICAgIGRlZiB0ZXN0X2JhZF9y
ZXF1ZXN0cyhzZWxmKToKLSAgICAgICAgZm9yIHJlcXVlc3QgaW4gbWFwKF9jcmVhdGVfcmVxdWVz
dCwgX0JBRF9SRVFVRVNUUyk6Ci0gICAgICAgICAgICBoYW5kc2hha2VyID0gaGFuZHNoYWtlLkhh
bmRzaGFrZXIocmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJh
aXNlcyhoYW5kc2hha2UuSGFuZHNoYWtlRXJyb3IsIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKQot
Ci0gICAgZGVmIHRlc3Rfc3RyaWN0bHlfZ29vZF9yZXF1ZXN0cyhzZWxmKToKLSAgICAgICAgZm9y
IHJlcXVlc3QgaW4gX2NyZWF0ZV9yZXF1ZXN0c193aXRoX2xpbmVzKF9TVFJJQ1RMWV9HT09EX1JF
UVVFU1RTKToKLSAgICAgICAgICAgIHN0cmljdF9oYW5kc2hha2VyID0gaGFuZHNoYWtlLkhhbmRz
aGFrZXIocmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbW9jay5Nb2NrRGlzcGF0Y2hlcigpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKQotICAgICAgICAgICAgc3RyaWN0
X2hhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKLQotICAgIGRlZiB0ZXN0X25vdF9zdHJpY3RseV9n
b29kX3JlcXVlc3RzKHNlbGYpOgotICAgICAgICBmb3IgcmVxdWVzdCBpbiBfY3JlYXRlX3JlcXVl
c3RzX3dpdGhfbGluZXMoX05PVF9TVFJJQ1RMWV9HT09EX1JFUVVFU1RTKToKLSAgICAgICAgICAg
IHN0cmljdF9oYW5kc2hha2VyID0gaGFuZHNoYWtlLkhhbmRzaGFrZXIocmVxdWVzdCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5Nb2Nr
RGlzcGF0Y2hlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUcnVlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaGFuZHNoYWtl
LkhhbmRzaGFrZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWN0X2hh
bmRzaGFrZXIuZG9faGFuZHNoYWtlKQotCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoK
LSAgICB1bml0dGVzdC5tYWluKCkKLQotCi0jIHZpOnN0cz00IHN3PTQgZXQKSW5kZXg6IFdlYktp
dFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9tZW1vcml6aW5nZmlsZS5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbWVtb3JpemluZ2ZpbGUucHkJ
KHJldmlzaW9uIDU1MDU2KQorKysgV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X21l
bW9yaXppbmdmaWxlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAgQEAKLSMhL3Vzci9i
aW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KLSMgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0Ogot
IwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotIiIiVGVzdHMgZm9yIG1lbW9y
aXppbmdmaWxlIG1vZHVsZS4iIiIKLQotCi1pbXBvcnQgU3RyaW5nSU8KLWltcG9ydCB1bml0dGVz
dAotCi1pbXBvcnQgY29uZmlnICAjIFRoaXMgbXVzdCBiZSBpbXBvcnRlZCBiZWZvcmUgbW9kX3B5
d2Vic29ja2V0LgotZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IG1lbW9yaXppbmdmaWxlCi0K
LQotY2xhc3MgVXRpbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBjaGVjayhzZWxm
LCBtZW1vcml6aW5nX2ZpbGUsIG51bV9yZWFkLCBleHBlY3RlZF9saXN0KToKLSAgICAgICAgZm9y
IHVudXNlZCBpbiByYW5nZShudW1fcmVhZCk6Ci0gICAgICAgICAgICBtZW1vcml6aW5nX2ZpbGUu
cmVhZGxpbmUoKQotICAgICAgICBhY3R1YWxfbGlzdCA9IG1lbW9yaXppbmdfZmlsZS5nZXRfbWVt
b3JpemVkX2xpbmVzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXhwZWN0ZWRfbGlz
dCksIGxlbihhY3R1YWxfbGlzdCkpCi0gICAgICAgIGZvciBleHBlY3RlZCwgYWN0dWFsIGluIHpp
cChleHBlY3RlZF9saXN0LCBhY3R1YWxfbGlzdCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGV4cGVjdGVkLCBhY3R1YWwpCi0KLSAgICBkZWYgdGVzdF9nZXRfbWVtb3JpemVkX2xpbmVz
KHNlbGYpOgotICAgICAgICBtZW1vcml6aW5nX2ZpbGUgPSBtZW1vcml6aW5nZmlsZS5NZW1vcml6
aW5nRmlsZShTdHJpbmdJTy5TdHJpbmdJTygKLSAgICAgICAgICAgICAgICAnSGVsbG9cbldvcmxk
XG5XZWxjb21lJykpCi0gICAgICAgIHNlbGYuY2hlY2sobWVtb3JpemluZ19maWxlLCAzLCBbJ0hl
bGxvXG4nLCAnV29ybGRcbicsICdXZWxjb21lJ10pCi0KLSAgICBkZWYgdGVzdF9nZXRfbWVtb3Jp
emVkX2xpbmVzX2xpbWl0X21lbW9yaXplZF9saW5lcyhzZWxmKToKLSAgICAgICAgbWVtb3Jpemlu
Z19maWxlID0gbWVtb3JpemluZ2ZpbGUuTWVtb3JpemluZ0ZpbGUoU3RyaW5nSU8uU3RyaW5nSU8o
Ci0gICAgICAgICAgICAgICAgJ0hlbGxvXG5Xb3JsZFxuV2VsY29tZScpLCAyKQotICAgICAgICBz
ZWxmLmNoZWNrKG1lbW9yaXppbmdfZmlsZSwgMywgWydIZWxsb1xuJywgJ1dvcmxkXG4nXSkKLQot
ICAgIGRlZiB0ZXN0X2dldF9tZW1vcml6ZWRfbGluZXNfZW1wdHlfZmlsZShzZWxmKToKLSAgICAg
ICAgbWVtb3JpemluZ19maWxlID0gbWVtb3JpemluZ2ZpbGUuTWVtb3JpemluZ0ZpbGUoU3RyaW5n
SU8uU3RyaW5nSU8oCi0gICAgICAgICAgICAgICAgJycpKQotICAgICAgICBzZWxmLmNoZWNrKG1l
bW9yaXppbmdfZmlsZSwgMTAsIFtdKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0g
ICAgdW5pdHRlc3QubWFpbigpCi0KLQotIyB2aTpzdHM9NCBzdz00IGV0CkluZGV4OiBXZWJLaXRU
b29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbW9jay5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbW9jay5weQkocmV2aXNpb24gNTUwNTYpCisrKyBX
ZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbW9jay5weQkod29ya2luZyBjb3B5KQpA
QCAtMSwxMjYgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAy
MDA5LCBHb29nbGUgSW5jLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0j
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotCi0iIiJUZXN0cyBmb3IgbW9jayBtb2R1bGUuIiIiCi0KLQotaW1wb3J0IFF1ZXVlCi1p
bXBvcnQgdGhyZWFkaW5nCi1pbXBvcnQgdW5pdHRlc3QKLQotaW1wb3J0IG1vY2sKLQotCi1jbGFz
cyBNb2NrQ29ublRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBzZXRVcChzZWxmKToK
LSAgICAgICAgc2VsZi5fY29ubiA9IG1vY2suTW9ja0Nvbm4oJ0FCQ1xyXG5ERUZHXHJcblxyXG5I
SUpLJykKLQotICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCdBQkNcclxuJywgc2VsZi5fY29ubi5yZWFkbGluZSgpKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCdERUZHXHJcbicsIHNlbGYuX2Nvbm4ucmVhZGxpbmUoKSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnXHJcbicsIHNlbGYuX2Nvbm4ucmVhZGxpbmUoKSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnSElKSycsIHNlbGYuX2Nvbm4ucmVhZGxpbmUoKSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnJywgc2VsZi5fY29ubi5yZWFkbGluZSgpKQotCi0gICAgZGVmIHRlc3Rf
cmVhZChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQUJDXHJcbkQnLCBzZWxmLl9j
b25uLnJlYWQoNikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0VGR1xyXG5cclxuSEknLCBz
ZWxmLl9jb25uLnJlYWQoOSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0pLJywgc2VsZi5f
Y29ubi5yZWFkKDEwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5fY29ubi5y
ZWFkKDEwKSkKLQotICAgIGRlZiB0ZXN0X3JlYWRfYW5kX3JlYWRsaW5lKHNlbGYpOgotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdBQkNcclxuRCcsIHNlbGYuX2Nvbm4ucmVhZCg2KSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnRUZHXHJcbicsIHNlbGYuX2Nvbm4ucmVhZGxpbmUoKSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHJcbkhJSksnLCBzZWxmLl9jb25uLnJlYWQoOSkpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuX2Nvbm4ucmVhZGxpbmUoKSkKLQotICAg
IGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgotICAgICAgICBzZWxmLl9jb25uLndyaXRlKCdIZWxsb1xy
XG4nKQotICAgICAgICBzZWxmLl9jb25uLndyaXRlKCdXb3JsZFxyXG4nKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdIZWxsb1xyXG5Xb3JsZFxyXG4nLCBzZWxmLl9jb25uLndyaXR0ZW5fZGF0
YSgpKQotCi0KLWNsYXNzIE1vY2tCbG9ja2luZ0Nvbm5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
LSAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgotICAgICAgICBjbGFzcyBMaW5lUmVhZGVyKHRocmVh
ZGluZy5UaHJlYWQpOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4sIHF1ZXVl
KToKLSAgICAgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCi0gICAg
ICAgICAgICAgICAgc2VsZi5fcXVldWUgPSBxdWV1ZQotICAgICAgICAgICAgICAgIHNlbGYuX2Nv
bm4gPSBjb25uCi0gICAgICAgICAgICAgICAgc2VsZi5zZXREYWVtb24oVHJ1ZSkKLSAgICAgICAg
ICAgICAgICBzZWxmLnN0YXJ0KCkKLSAgICAgICAgICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAg
ICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2Nv
bm4ucmVhZGxpbmUoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9xdWV1ZS5wdXQoZGF0YSkK
LSAgICAgICAgY29ubiA9IG1vY2suTW9ja0Jsb2NraW5nQ29ubigpCi0gICAgICAgIHF1ZXVlID0g
UXVldWUuUXVldWUoKQotICAgICAgICByZWFkZXIgPSBMaW5lUmVhZGVyKGNvbm4sIHF1ZXVlKQot
ICAgICAgICBzZWxmLmZhaWxVbmxlc3MocXVldWUuZW1wdHkoKSkKLSAgICAgICAgY29ubi5wdXRf
Ynl0ZXMoJ0ZvbyBiYXJcclxuJykKLSAgICAgICAgcmVhZCA9IHF1ZXVlLmdldCgpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ0ZvbyBiYXJcclxuJywgcmVhZCkKLQotCi1jbGFzcyBNb2NrVGFi
bGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9kaWN0
KHNlbGYpOgotICAgICAgICB0YWJsZSA9IG1vY2suTW9ja1RhYmxlKHsnS2V5JzonVmFsdWUnfSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZS5nZXQoJ0tFWScpKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlWydrZXknXSkKLQotICAgIGRlZiB0
ZXN0X2NyZWF0ZV9mcm9tX2xpc3Qoc2VsZik6Ci0gICAgICAgIHRhYmxlID0gbW9jay5Nb2NrVGFi
bGUoWygnS2V5JywgJ1ZhbHVlJyldKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScs
IHRhYmxlLmdldCgnS0VZJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFi
bGVbJ2tleSddKQotCi0gICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fdHVwbGUoc2VsZik6Ci0gICAg
ICAgIHRhYmxlID0gbW9jay5Nb2NrVGFibGUoKCgnS2V5JywgJ1ZhbHVlJyksKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZS5nZXQoJ0tFWScpKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlWydrZXknXSkKLQotICAgIGRlZiB0ZXN0X3NldF9h
bmRfZ2V0KHNlbGYpOgotICAgICAgICB0YWJsZSA9IG1vY2suTW9ja1RhYmxlKCkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChOb25lLCB0YWJsZS5nZXQoJ0tleScpKQotICAgICAgICB0YWJsZVsn
S2V5J10gPSAnVmFsdWUnCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGUu
Z2V0KCdLZXknKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZS5nZXQo
J2tleScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlLmdldCgnS0VZ
JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGVbJ0tleSddKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlWydrZXknXSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZVsnS0VZJ10pCi0KLQotaWYgX19uYW1lX18gPT0g
J19fbWFpbl9fJzoKLSAgICB1bml0dGVzdC5tYWluKCkKLQotCi0jIHZpOnN0cz00IHN3PTQgZXQK
SW5kZXg6IFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9tc2d1dGlsLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9tc2d1dGlsLnB5CShy
ZXZpc2lvbiA1NTA1NikKKysrIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9tc2d1
dGlsLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1NiArMCwwIEBACi0jIS91c3IvYmluL2VudiBw
eXRob24KLSMKLSMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCi0jIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0
cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLSIiIlRlc3RzIGZvciBtc2d1dGlsIG1vZHVs
ZS4iIiIKLQotCi1pbXBvcnQgUXVldWUKLWltcG9ydCB1bml0dGVzdAotCi1pbXBvcnQgY29uZmln
ICAjIFRoaXMgbXVzdCBiZSBpbXBvcnRlZCBiZWZvcmUgbW9kX3B5d2Vic29ja2V0LgotZnJvbSBt
b2RfcHl3ZWJzb2NrZXQgaW1wb3J0IG1zZ3V0aWwKLQotaW1wb3J0IG1vY2sKLQotCi1kZWYgX2Ny
ZWF0ZV9yZXF1ZXN0KHJlYWRfZGF0YSk6Ci0gICAgcmV0dXJuIG1vY2suTW9ja1JlcXVlc3QoY29u
bmVjdGlvbj1tb2NrLk1vY2tDb25uKHJlYWRfZGF0YSkpCi0KLWRlZiBfY3JlYXRlX2Jsb2NraW5n
X3JlcXVlc3QoKToKLSAgICByZXR1cm4gbW9jay5Nb2NrUmVxdWVzdChjb25uZWN0aW9uPW1vY2su
TW9ja0Jsb2NraW5nQ29ubigpKQotCi1jbGFzcyBNZXNzYWdlVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6Ci0gICAgZGVmIHRlc3Rfc2VuZF9tZXNzYWdlKHNlbGYpOgotICAgICAgICByZXF1ZXN0ID0g
X2NyZWF0ZV9yZXF1ZXN0KCcnKQotICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0
LCAnSGVsbG8nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwSGVsbG9ceGZmJywgcmVx
dWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQotCi0gICAgZGVmIHRlc3Rfc2VuZF9tZXNz
YWdlX3VuaWNvZGUoc2VsZik6Ci0gICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoJycp
Ci0gICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsIHUnXHU2NWU1JykKLSAgICAg
ICAgIyBVKzY1ZTUgaXMgZW5jb2RlZCBhcyBlNiw5NyxhNSBpbiBVVEYtOAotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdceDAwXHhlNlx4OTdceGE1XHhmZicsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQotCi0gICAgZGVmIHRlc3Rf
cmVjZWl2ZV9tZXNzYWdlKHNlbGYpOgotICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0
KCdceDAwSGVsbG9ceGZmXHgwMFdvcmxkIVx4ZmYnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCdIZWxsbycsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdXb3JsZCEnLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkK
LQotICAgIGRlZiB0ZXN0X3JlY2VpdmVfbWVzc2FnZV91bmljb2RlKHNlbGYpOgotICAgICAgICBy
ZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCdceDAwXHhlNlx4OWNceGFjXHhmZicpCi0gICAgICAg
ICMgVSs2NzJjIGlzIGVuY29kZWQgYXMgZTYsOWMsYWMgaW4gVVRGLTgKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCh1J1x1NjcyYycsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQot
Ci0gICAgZGVmIHRlc3RfcmVjZWl2ZV9tZXNzYWdlX2Vycm9uZW91c191bmljb2RlKHNlbGYpOgot
ICAgICAgICAjIFx4ODAgYW5kIFx4ODEgYXJlIGludmFsaWQgYXMgVVRGLTguCi0gICAgICAgIHJl
cXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoJ1x4MDBceDgwXHg4MVx4ZmYnKQotICAgICAgICAjIElu
dmFsaWQgY2hhcmFjdGVycyBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aAotICAgICAgICAjIFUrZmZm
ZCBSRVBMQUNFTUVOVCBDSEFSQUNURVIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x1ZmZm
ZFx1ZmZmZCcsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQotCi0gICAgZGVmIHRl
c3RfcmVjZWl2ZV9tZXNzYWdlX2Rpc2NhcmQoc2VsZik6Ci0gICAgICAgIHJlcXVlc3QgPSBfY3Jl
YXRlX3JlcXVlc3QoJ1x4ODBceDA2SUdOT1JFXHgwMEhlbGxvXHhmZicKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ1x4MDFESVNSRUdBUkRceGZmXHgwMFdvcmxkIVx4ZmYnKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdIZWxsbycsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJl
cXVlc3QpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdXb3JsZCEnLCBtc2d1dGlsLnJlY2Vp
dmVfbWVzc2FnZShyZXF1ZXN0KSkKLQotICAgIGRlZiB0ZXN0X3BheWxvYWRfbGVuZ3RoKHNlbGYp
OgotICAgICAgICBmb3IgbGVuZ3RoLCBieXRlcyBpbiAoKDAsICdceDAwJyksICgweDdmLCAnXHg3
ZicpLCAoMHg4MCwgJ1x4ODFceDAwJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
MHgxMjM0LCAnXHg4MFx4YTRceDM0JykpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChs
ZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ3V0aWwuX3BheWxvYWRfbGVu
Z3RoKF9jcmVhdGVfcmVxdWVzdChieXRlcykpKQotCi0gICAgZGVmIHRlc3RfcmVjZWl2ZV9ieXRl
cyhzZWxmKToKLSAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgnYWJjZGVmZycpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FiYycsIG1zZ3V0aWwuX3JlY2VpdmVfYnl0ZXMocmVx
dWVzdCwgMykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2RlZmcnLCBtc2d1dGlsLl9yZWNl
aXZlX2J5dGVzKHJlcXVlc3QsIDQpKQotCi0gICAgZGVmIHRlc3RfcmVhZF91bnRpbChzZWxmKToK
LSAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgnYWJjWGRlZmdYJykKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnYWJjJywgbXNndXRpbC5fcmVhZF91bnRpbChyZXF1ZXN0LCAnWCcp
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdkZWZnJywgbXNndXRpbC5fcmVhZF91bnRpbChy
ZXF1ZXN0LCAnWCcpKQotCi0KLWNsYXNzIE1lc3NhZ2VSZWNlaXZlclRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgotICAgIGRlZiB0ZXN0X3F1ZXVlKHNlbGYpOgotICAgICAgICByZXF1ZXN0ID0gX2Ny
ZWF0ZV9ibG9ja2luZ19yZXF1ZXN0KCkKLSAgICAgICAgcmVjZWl2ZXIgPSBtc2d1dGlsLk1lc3Nh
Z2VSZWNlaXZlcihyZXF1ZXN0KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcmVj
ZWl2ZXIucmVjZWl2ZV9ub3dhaXQoKSkKLQotICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0
X2J5dGVzKCdceDAwSGVsbG8hXHhmZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlbGxv
IScsIHJlY2VpdmVyLnJlY2VpdmUoKSkKLQotICAgIGRlZiB0ZXN0X29ubWVzc2FnZShzZWxmKToK
LSAgICAgICAgb25tZXNzYWdlX3F1ZXVlID0gUXVldWUuUXVldWUoKQotICAgICAgICBkZWYgb25t
ZXNzYWdlX2hhbmRsZXIobWVzc2FnZSk6Ci0gICAgICAgICAgICBvbm1lc3NhZ2VfcXVldWUucHV0
KG1lc3NhZ2UpCi0KLSAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfYmxvY2tpbmdfcmVxdWVzdCgp
Ci0gICAgICAgIHJlY2VpdmVyID0gbXNndXRpbC5NZXNzYWdlUmVjZWl2ZXIocmVxdWVzdCwgb25t
ZXNzYWdlX2hhbmRsZXIpCi0KLSAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcygn
XHgwMEhlbGxvIVx4ZmYnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdIZWxsbyEnLCBvbm1l
c3NhZ2VfcXVldWUuZ2V0KCkpCi0KLQotY2xhc3MgTWVzc2FnZVNlbmRlclRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X3NlbmQoc2VsZik6Ci0gICAgICAgIHJlcXVlc3QgPSBf
Y3JlYXRlX2Jsb2NraW5nX3JlcXVlc3QoKQotICAgICAgICBzZW5kZXIgPSBtc2d1dGlsLk1lc3Nh
Z2VTZW5kZXIocmVxdWVzdCkKLQotICAgICAgICBzZW5kZXIuc2VuZCgnV29ybGQnKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdceDAwV29ybGRceGZmJywgcmVxdWVzdC5jb25uZWN0aW9uLndy
aXR0ZW5fZGF0YSgpKQotCi0gICAgZGVmIHRlc3Rfc2VuZF9ub3dhaXQoc2VsZik6Ci0gICAgICAg
ICMgVXNlIGEgcXVldWUgdG8gY2hlY2sgdGhlIGJ5dGVzIHdyaXR0ZW4gYnkgTWVzc2FnZVNlbmRl
ci4KLSAgICAgICAgIyByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkgY2Fubm90IGJl
IHVzZWQgaGVyZSBiZWNhdXNlCi0gICAgICAgICMgTWVzc2FnZVNlbmRlciBydW5zIGluIGEgc2Vw
YXJhdGUgdGhyZWFkLgotICAgICAgICBzZW5kX3F1ZXVlID0gUXVldWUuUXVldWUoKQotICAgICAg
ICBkZWYgd3JpdGUoYnl0ZXMpOgotICAgICAgICAgICAgc2VuZF9xdWV1ZS5wdXQoYnl0ZXMpCi0g
ICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX2Jsb2NraW5nX3JlcXVlc3QoKQotICAgICAgICByZXF1
ZXN0LmNvbm5lY3Rpb24ud3JpdGUgPSB3cml0ZQotCi0gICAgICAgIHNlbmRlciA9IG1zZ3V0aWwu
TWVzc2FnZVNlbmRlcihyZXF1ZXN0KQotCi0gICAgICAgIHNlbmRlci5zZW5kX25vd2FpdCgnSGVs
bG8nKQotICAgICAgICBzZW5kZXIuc2VuZF9ub3dhaXQoJ1dvcmxkJykKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnXHgwMEhlbGxvXHhmZicsIHNlbmRfcXVldWUuZ2V0KCkpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJ1x4MDBXb3JsZFx4ZmYnLCBzZW5kX3F1ZXVlLmdldCgpKQotCi0KLWlm
IF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdW5pdHRlc3QubWFpbigpCi0KLQotIyB2aTpz
dHM9NCBzdz00IGV0CkluZGV4OiBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfdXRp
bC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfdXRp
bC5weQkocmV2aXNpb24gNTUwNTYpCisrKyBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rl
c3RfdXRpbC5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2MyArMCwwIEBACi0jIS91c3IvYmluL2Vu
diBweXRob24KLSMKLSMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCi0jIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBk
aXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0j
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0j
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLSIiIlRlc3RzIGZvciB1dGlsIG1vZHVs
ZS4iIiIKLQotCi1pbXBvcnQgdW5pdHRlc3QKLQotaW1wb3J0IGNvbmZpZyAgIyBUaGlzIG11c3Qg
YmUgaW1wb3J0ZWQgYmVmb3JlIG1vZF9weXdlYnNvY2tldC4KLWZyb20gbW9kX3B5d2Vic29ja2V0
IGltcG9ydCB1dGlsCi0KLQotY2xhc3MgVXRpbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAg
IGRlZiB0ZXN0X2dldF9zdGFja190cmFjZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnTm9uZVxuJywgdXRpbC5nZXRfc3RhY2tfdHJhY2UoKSkKLSAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgYSA9IDEgLyAwICAjIEludGVudGlvbmFsbHkgcmFpc2UgZXhjZXB0aW9uLgotICAgICAg
ICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgdHJhY2UgPSB1dGlsLmdldF9zdGFja190
cmFjZSgpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHJhY2Uuc3RhcnRzd2l0aCgnVHJh
Y2ViYWNrJykpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHJhY2UuZmluZCgnWmVyb0Rp
dmlzaW9uRXJyb3InKSAhPSAtMSkKLQotICAgIGRlZiB0ZXN0X3ByZXBlbmRfbWVzc2FnZV90b19l
eGNlcHRpb24oc2VsZik6Ci0gICAgICAgIGV4YyA9IEV4Y2VwdGlvbignV29ybGQnKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdXb3JsZCcsIHN0cihleGMpKQotICAgICAgICB1dGlsLnByZXBl
bmRfbWVzc2FnZV90b19leGNlcHRpb24oJ0hlbGxvICcsIGV4YykKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnSGVsbG8gV29ybGQnLCBzdHIoZXhjKSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19t
YWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4oKQotCi0KLSMgdmk6c3RzPTQgc3c9NCBldApJbmRl
eDogV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9ibGFua193
c2gucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0
YS9oYW5kbGVycy9ibGFua193c2gucHkJKHJldmlzaW9uIDU1MDU2KQorKysgV2ViS2l0VG9vbHMv
cHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9ibGFua193c2gucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMzEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KLSMg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMg
bWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotIyBpbnRlbnRpb25h
bGx5IGxlZnQgYmxhbmsKSW5kZXg6IFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRh
dGEvaGFuZGxlcnMvb3JpZ2luX2NoZWNrX3dzaC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL29yaWdpbl9jaGVja193c2gucHkJ
KHJldmlzaW9uIDU1MDU2KQorKysgV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0
YS9oYW5kbGVycy9vcmlnaW5fY2hlY2tfd3NoLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQyICsw
LDAgQEAKLSMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCi0jIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmli
dXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWRlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRz
aGFrZShyZXF1ZXN0KToKLSAgICBpZiByZXF1ZXN0LndzX29yaWdpbiA9PSAnaHR0cDovL2V4YW1w
bGUuY29tJzoKLSAgICAgICAgcmV0dXJuCi0gICAgcmFpc2UgVmFsdWVFcnJvcignVW5hY2NlcHRh
YmxlIG9yaWdpbjogJXInICUgcmVxdWVzdC53c19vcmlnaW4pCi0KLQotZGVmIHdlYl9zb2NrZXRf
dHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKLSAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ29y
aWdpbl9jaGVja193c2gucHkgaXMgY2FsbGVkIGZvciAlcywgJXMnICUKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHJlcXVlc3Qud3NfcmVzb3VyY2UsIHJlcXVlc3Qud3NfcHJvdG9jb2wp
KQotCi0KLSMgdmk6c3RzPTQgc3c9NCBldApJbmRleDogV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQv
dGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvZXhjZXB0aW9uX2luX3RyYW5zZmVyX3dzaC5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRs
ZXJzL3N1Yi9leGNlcHRpb25faW5fdHJhbnNmZXJfd3NoLnB5CShyZXZpc2lvbiA1NTA1NikKKysr
IFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2V4Y2Vw
dGlvbl9pbl90cmFuc2Zlcl93c2gucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNDQgKzAsMCBAQAot
IyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMK
LSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4K
LSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLQotIiIiRXhjZXB0aW9uIGluIHdlYl9zb2NrZXRfdHJhbnNmZXJf
ZGF0YSgpLgotIiIiCi0KLQotZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVl
c3QpOgotICAgIHBhc3MKLQotCi1kZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3Qp
OgotICAgIHJhaXNlIEV4Y2VwdGlvbignSW50ZW50aW9uYWwgRXhjZXB0aW9uIGZvciAlcywgJXMn
ICUKLSAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3Qud3NfcmVzb3VyY2UsIHJlcXVlc3Qud3Nf
cHJvdG9jb2wpKQotCi0KLSMgdmk6c3RzPTQgc3c9NCBldApJbmRleDogV2ViS2l0VG9vbHMvcHl3
ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvbm9fd3NoX2F0X3RoZV9lbmQucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5k
bGVycy9zdWIvbm9fd3NoX2F0X3RoZV9lbmQucHkJKHJldmlzaW9uIDU1MDU2KQorKysgV2ViS2l0
VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvbm9fd3NoX2F0X3Ro
ZV9lbmQucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAw
OSwgR29vZ2xlIEluYy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0j
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLQotIiIiQ29ycmVjdCBzaWduYXR1cmVzLCB3cm9uZyBmaWxlIG5hbWUuCi0iIiIKLQotCi1k
ZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6Ci0gICAgcGFzcwotCi0K
LWRlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6Ci0gICAgcmVxdWVzdC5jb25u
ZWN0aW9uLndyaXRlKAotICAgICAgICAgICAgJ3N1Yi9ub193c2hfYXRfdGhlX2VuZC5weSBpcyBj
YWxsZWQgZm9yICVzLCAlcycgJQotICAgICAgICAgICAgKHJlcXVlc3Qud3NfcmVzb3VyY2UsIHJl
cXVlc3Qud3NfcHJvdG9jb2wpKQotCi0KLSMgdmk6c3RzPTQgc3c9NCBldApJbmRleDogV2ViS2l0
VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvbm9uX2NhbGxhYmxl
X3dzaC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3Rk
YXRhL2hhbmRsZXJzL3N1Yi9ub25fY2FsbGFibGVfd3NoLnB5CShyZXZpc2lvbiA1NTA1NikKKysr
IFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL25vbl9j
YWxsYWJsZV93c2gucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMzkgKzAsMCBAQAotIyBDb3B5cmln
aHQgMjAwOSwgR29vZ2xlIEluYy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0j
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLQotIiIiTm9uLWNhbGxhYmxlIGhhbmRsZXJzLgotIiIiCi0KLQotd2ViX3NvY2tl
dF9kb19leHRyYV9oYW5kc2hha2UgPSBUcnVlCi13ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEgPSAx
Ci0KLQotIyB2aTpzdHM9NCBzdz00IGV0CkluZGV4OiBXZWJLaXRUb29scy9weXdlYnNvY2tldC90
ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9wbGFpbl93c2gucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvcGxhaW5fd3No
LnB5CShyZXZpc2lvbiA1NTA1NikKKysrIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVz
dGRhdGEvaGFuZGxlcnMvc3ViL3BsYWluX3dzaC5weQkod29ya2luZyBjb3B5KQpAQCAtMSw0MCAr
MCwwIEBACi0jIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgotIyBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJp
YnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1kZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5k
c2hha2UocmVxdWVzdCk6Ci0gICAgcGFzcwotCi0KLWRlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2Rh
dGEocmVxdWVzdCk6Ci0gICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdzdWIvcGxhaW5fd3No
LnB5IGlzIGNhbGxlZCBmb3IgJXMsICVzJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChyZXF1ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKLQotCi0jIHZpOnN0
cz00IHN3PTQgZXQKSW5kZXg6IFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEv
aGFuZGxlcnMvc3ViL3dyb25nX2hhbmRzaGFrZV9zaWdfd3NoLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL3dyb25nX2hh
bmRzaGFrZV9zaWdfd3NoLnB5CShyZXZpc2lvbiA1NTA1NikKKysrIFdlYktpdFRvb2xzL3B5d2Vi
c29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL3dyb25nX2hhbmRzaGFrZV9zaWdfd3No
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMDksIEdv
b2dsZSBJbmMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0K
LSIiIldyb25nIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlIHNpZ25hdHVyZS4KLSIiIgot
Ci0KLWRlZiBub193ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKLSAgICBw
YXNzCi0KLQotZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKLSAgICByZXF1
ZXN0LmNvbm5lY3Rpb24ud3JpdGUoCi0gICAgICAgICAgICAnc3ViL3dyb25nX2hhbmRzaGFrZV9z
aWdfd3NoLnB5IGlzIGNhbGxlZCBmb3IgJXMsICVzJyAlCi0gICAgICAgICAgICAgKHJlcXVlc3Qu
d3NfcmVzb3VyY2UsIHJlcXVlc3Qud3NfcHJvdG9jb2wpKQotCi0KLSMgdmk6c3RzPTQgc3c9NCBl
dApJbmRleDogV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9z
dWIvd3JvbmdfdHJhbnNmZXJfc2lnX3dzaC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9w
eXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi93cm9uZ190cmFuc2Zlcl9zaWdf
d3NoLnB5CShyZXZpc2lvbiA1NTA1NikKKysrIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3Qv
dGVzdGRhdGEvaGFuZGxlcnMvc3ViL3dyb25nX3RyYW5zZmVyX3NpZ193c2gucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNDUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KLSMg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMg
bWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotIiIiV3Jvbmcgd2Vi
X3NvY2tldF90cmFuc2Zlcl9kYXRhKCkgc2lnbmF0dXJlLgotIiIiCi0KLQotZGVmIHdlYl9zb2Nr
ZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgotICAgIHBhc3MKLQotCi1kZWYgbm9fd2Vi
X3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgotICAgIHJlcXVlc3QuY29ubmVjdGlvbi53
cml0ZSgKLSAgICAgICAgICAgICdzdWIvd3JvbmdfdHJhbnNmZXJfc2lnX3dzaC5weSBpcyBjYWxs
ZWQgZm9yICVzLCAlcycgJQotICAgICAgICAgICAgKHJlcXVlc3Qud3NfcmVzb3VyY2UsIHJlcXVl
c3Qud3NfcHJvdG9jb2wpKQotCi0KLSMgdmk6c3RzPTQgc3c9NCBldAo=
</data>
<flag name="review"
          id="31920"
          type_id="1"
          status="-"
          setter="levin"
    />
    <flag name="commit-queue"
          id="31921"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49531</attachid>
            <date>2010-02-25 14:06:15 -0800</date>
            <delta_ts>2010-02-25 16:18:29 -0800</delta_ts>
            <desc>Proposed patch 2</desc>
            <filename>_patch-35198-2.diff</filename>
            <type>text/plain</type>
            <size>154672</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU1MjUzKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNjkgQEAKKzIwMTAtMDItMjUgIENocmlzIEplcmRvbmVrICA8
Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTW92ZWQgcHl3ZWJzb2NrZXQgaW50byB0aGUgd2Via2l0cHkvdGhpcmRw
YXJ0eSBkaXJlY3RvcnkgYW5kIGFkZGVkCisgICAgICAgIGFuIGFzc29jaWF0ZWQgUkVBRE1FLndl
YmtpdCBmaWxlIHRvIHRoZSBweXdlYnNvY2tldCBkaXJlY3RvcnkuCisgICAgICAgIFRoaXMgbWFr
ZXMgcHl3ZWJzb2NrZXQgbW9yZSBjb25zaXN0ZW50IHdpdGggdGhlIG90aGVyIHRoaXJkLXBhcnR5
CisgICAgICAgIFB5dGhvbiBjb2RlIGluIG91ciByZXBvc2l0b3J5LgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTE5OAorCisgICAgICAgICogU2Ny
aXB0cy9ydW4td2Via2l0LXRlc3RzOgorICAgICAgICAgIC0gVXBkYXRlZCBwYXRocyB0byBweXdl
YnNvY2tldC4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLXdlYmtpdC13ZWJzb2NrZXRzZXJ2ZXI6
CisgICAgICAgICAgLSBVcGRhdGVkIHBhdGhzIHRvIHB5d2Vic29ja2V0LgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5Ogor
ICAgICAgICAgIC0gVXBkYXRlZCBwYXRocyB0byBweXdlYnNvY2tldC4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldDogQ29waWVkIGZyb20gV2ViS2l0
VG9vbHMvcHl3ZWJzb2NrZXQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L3B5d2Vic29ja2V0L1JFQURNRS53ZWJraXQ6IEFkZGVkLgorICAgICAgICAgIC0gQWRkZWQgYSBm
aWxlIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbnRlbnRzCisgICAgICAgICAg
ICBvZiB0aGUgcHl3ZWJzb2NrZXQgZGlyZWN0b3J5LiBUaGlzIHdpbGwgbWFrZSBpdCBlYXNpZXIg
dG8KKyAgICAgICAgICAgIHVuZGVyc3RhbmQgd2hlcmUgdGhlIHRoaXJkLXBhcnR5IGNvZGUgY2Ft
ZSBmcm9tIGFuZCB3aGF0CisgICAgICAgICAgICBsb2NhbCBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRl
LgorCisgICAgICAgICogcHl3ZWJzb2NrZXQ6IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJzb2Nr
ZXQvQ09QWUlORzogUmVtb3ZlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9NQU5JRkVTVC5pbjog
UmVtb3ZlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9SRUFETUU6IFJlbW92ZWQuCisgICAgICAg
ICogcHl3ZWJzb2NrZXQvZXhhbXBsZTogUmVtb3ZlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9l
eGFtcGxlL2VjaG9fY2xpZW50LnB5OiBSZW1vdmVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L2V4
YW1wbGUvZWNob193c2gucHk6IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5
d2Vic29ja2V0OiBSZW1vdmVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L21vZF9weXdlYnNvY2tl
dC9fX2luaXRfXy5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9tb2RfcHl3ZWJz
b2NrZXQvZGlzcGF0Y2gucHk6IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5
d2Vic29ja2V0L2hhbmRzaGFrZS5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9t
b2RfcHl3ZWJzb2NrZXQvaGVhZGVycGFyc2VyaGFuZGxlci5weTogUmVtb3ZlZC4KKyAgICAgICAg
KiBweXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvbWVtb3JpemluZ2ZpbGUucHk6IFJlbW92ZWQu
CisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L21zZ3V0aWwucHk6IFJlbW92
ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHk6
IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3V0aWwucHk6
IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvc2V0dXAucHk6IFJlbW92ZWQuCisgICAg
ICAgICogcHl3ZWJzb2NrZXQvdGVzdDogUmVtb3ZlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90
ZXN0L2NvbmZpZy5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L21vY2su
cHk6IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC9ydW5fYWxsLnB5OiBSZW1v
dmVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdF9kaXNwYXRjaC5weTogUmVtb3Zl
ZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RfaGFuZHNoYWtlLnB5OiBSZW1vdmVk
LgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdF9tZW1vcml6aW5nZmlsZS5weTogUmVt
b3ZlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RfbW9jay5weTogUmVtb3ZlZC4K
KyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RfbXNndXRpbC5weTogUmVtb3ZlZC4KKyAg
ICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RfdXRpbC5weTogUmVtb3ZlZC4KKyAgICAgICAg
KiBweXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhOiBSZW1vdmVkLgorICAgICAgICAqIHB5d2Vic29j
a2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnM6IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJzb2Nr
ZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9ibGFua193c2gucHk6IFJlbW92ZWQuCisgICAgICAg
ICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9vcmlnaW5fY2hlY2tfd3NoLnB5
OiBSZW1vdmVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMv
c3ViOiBSZW1vdmVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxl
cnMvc3ViL2V4Y2VwdGlvbl9pbl90cmFuc2Zlcl93c2gucHk6IFJlbW92ZWQuCisgICAgICAgICog
cHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvbm9fd3NoX2F0X3RoZV9lbmQu
cHk6IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVy
cy9zdWIvbm9uX2NhbGxhYmxlX3dzaC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBweXdlYnNvY2tl
dC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9wbGFpbl93c2gucHk6IFJlbW92ZWQuCisgICAg
ICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvd3JvbmdfaGFuZHNo
YWtlX3NpZ193c2gucHk6IFJlbW92ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0
ZGF0YS9oYW5kbGVycy9zdWIvd3JvbmdfdHJhbnNmZXJfc2lnX3dzaC5weTogUmVtb3ZlZC4KKwog
MjAxMC0wMi0yNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Vi
a2l0LXRlc3RzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC10
ZXN0cwkocmV2aXNpb24gNTUyNTMpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQt
dGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTEzOTQsNyArMTM5NCw3IEBAIHN1YiBvcGVuV2ViU29j
a2V0U2VydmVySWZOZWVkZWQoKQogICAgIHJldHVybiAwIGlmICRmYWlsZWRUb1N0YXJ0V2ViU29j
a2V0U2VydmVyOwogCiAgICAgbXkgJHdlYlNvY2tldFNlcnZlclBhdGggPSAiL3Vzci9iaW4vcHl0
aG9uIjsKLSAgICBteSAkd2ViU29ja2V0UHl0aG9uUGF0aCA9ICJXZWJLaXRUb29scy9weXdlYnNv
Y2tldCI7CisgICAgbXkgJHdlYlNvY2tldFB5dGhvblBhdGggPSAiV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0IjsKICAgICBteSAkd2ViU29ja2V0SGFu
ZGxlckRpciA9ICIkdGVzdERpcmVjdG9yeSI7CiAgICAgbXkgJHdlYlNvY2tldEhhbmRsZXJTY2Fu
RGlyID0gIiR0ZXN0RGlyZWN0b3J5L3dlYnNvY2tldC90ZXN0cyI7CiAgICAgbXkgJHdlYlNvY2tl
dEhhbmRsZXJNYXBGaWxlID0gIiR3ZWJTb2NrZXRIYW5kbGVyU2NhbkRpci9oYW5kbGVyX21hcC50
eHQiOwpAQCAtMTQwMyw3ICsxNDAzLDcgQEAgc3ViIG9wZW5XZWJTb2NrZXRTZXJ2ZXJJZk5lZWRl
ZCgpCiAgICAgbXkgJGxvZ0ZpbGUgPSAiJGFic1Rlc3RSZXN1bHRzRGlyZWN0b3J5L3B5d2Vic29j
a2V0X2xvZy50eHQiOwogCiAgICAgbXkgQGFyZ3MgPSAoCi0gICAgICAgICJXZWJLaXRUb29scy9w
eXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvc3RhbmRhbG9uZS5weSIsCisgICAgICAgICJXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vi
c29ja2V0L3N0YW5kYWxvbmUucHkiLAogICAgICAgICAiLXAiLCAiJHdlYlNvY2tldFBvcnQiLAog
ICAgICAgICAiLWQiLCAiJHdlYlNvY2tldEhhbmRsZXJEaXIiLAogICAgICAgICAiLXMiLCAiJHdl
YlNvY2tldEhhbmRsZXJTY2FuRGlyIiwKQEAgLTE0MTQsNyArMTQxNCw3IEBAIHN1YiBvcGVuV2Vi
U29ja2V0U2VydmVySWZOZWVkZWQoKQogICAgICk7CiAgICAgIyB3c3MgaXMgZGlzYWJsZWQgdW50
aWwgYWxsIHBsYXRmb3JtcyBzdXBwb3J0IHB5T3BlblNTTC4KICAgICAjIG15IEBhcmdzU2VjdXJl
ID0gKAotICAgICMgICAgICJXZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQv
c3RhbmRhbG9uZS5weSIsCisgICAgIyAgICAgIldlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvc3RhbmRhbG9uZS5weSIsCiAg
ICAgIyAgICAgIi1wIiwgIiR3ZWJTb2NrZXRTZWN1cmVQb3J0IiwKICAgICAjICAgICAiLWQiLCAi
JHdlYlNvY2tldEhhbmRsZXJEaXIiLAogICAgICMgICAgICItdCIsCkluZGV4OiBXZWJLaXRUb29s
cy9TY3JpcHRzL3J1bi13ZWJraXQtd2Vic29ja2V0c2VydmVyCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC13ZWJzb2NrZXRzZXJ2ZXIJKHJldmlzaW9uIDU1MjUz
KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Via2l0LXdlYnNvY2tldHNlcnZlcgkod29y
a2luZyBjb3B5KQpAQCAtNjQsMTMgKzY0LDEzIEBAIGV4aXQgMDsKIHN1YiBvcGVuV2ViU29ja2V0
U2VydmVyKCkKIHsKICAgICBteSAkd2ViU29ja2V0U2VydmVyUGF0aCA9ICIvdXNyL2Jpbi9weXRo
b24iOwotICAgIG15ICR3ZWJTb2NrZXRQeXRob25QYXRoID0gIiRzcmNEaXIvV2ViS2l0VG9vbHMv
cHl3ZWJzb2NrZXQiOworICAgIG15ICR3ZWJTb2NrZXRQeXRob25QYXRoID0gIiRzcmNEaXIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0IjsKICAgICBt
eSAkd2ViU29ja2V0SGFuZGxlckRpciA9ICIkdGVzdERpcmVjdG9yeSI7CiAgICAgbXkgJHdlYlNv
Y2tldEhhbmRsZXJTY2FuRGlyID0gIiR0ZXN0RGlyZWN0b3J5L3dlYnNvY2tldC90ZXN0cyI7CiAg
ICAgbXkgJHdlYlNvY2tldEhhbmRsZXJNYXBGaWxlID0gIiR3ZWJTb2NrZXRIYW5kbGVyU2NhbkRp
ci9oYW5kbGVyX21hcC50eHQiOwogCiAgICAgbXkgQGFyZ3MgPSAoCi0gICAgICAgICIkc3JjRGly
L1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25lLnB5IiwK
KyAgICAgICAgIiRzcmNEaXIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25lLnB5IiwKICAgICAgICAgIi1w
IiwgIiR3ZWJTb2NrZXRQb3J0IiwKICAgICAgICAgIi1kIiwgIiR3ZWJTb2NrZXRIYW5kbGVyRGly
IiwKICAgICAgICAgIi1zIiwgIiR3ZWJTb2NrZXRIYW5kbGVyU2NhbkRpciIsCkluZGV4OiBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2
ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5CShyZXZpc2lvbiA1NTI1MykKKysrIFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZl
ci5weQkod29ya2luZyBjb3B5KQpAQCAtMTUxLDggKzE1MSw3IEBAIGNsYXNzIFB5V2ViU29ja2V0
KGh0dHBfc2VydmVyLkxpZ2h0dHBkKToKICAgICAgICAgcHl0aG9uX2ludGVycCA9IHN5cy5leGVj
dXRhYmxlCiAgICAgICAgIHB5d2Vic29ja2V0X2Jhc2UgPSBvcy5wYXRoLmpvaW4oCiAgICAgICAg
ICAgICBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZSgKLSAg
ICAgICAgICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoCi0gICAgICAgICAgICBv
cy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkpKSksICdweXdlYnNvY2tldCcpCisgICAgICAgICAg
ICBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkpKSksICd0aGlyZHBhcnR5JywgJ3B5d2Vic29j
a2V0JykKICAgICAgICAgcHl3ZWJzb2NrZXRfc2NyaXB0ID0gb3MucGF0aC5qb2luKHB5d2Vic29j
a2V0X2Jhc2UsICdtb2RfcHl3ZWJzb2NrZXQnLAogICAgICAgICAgICAgJ3N0YW5kYWxvbmUucHkn
KQogICAgICAgICBzdGFydF9jbWQgPSBbCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvUkVBRE1FLndlYmtpdAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvUkVBRE1F
LndlYmtpdAkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS9weXdlYnNvY2tldC9SRUFETUUud2Via2l0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE0IEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhIGNvcHkgb2YgdGhlIHB5d2Vic29ja2V0
IFB5dGhvbiBtb2R1bGUgb2J0YWluZWQKK2Zyb20gdGhlIGZvbGxvd2luZyBsb2NhdGlvbjoKKwor
aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3B5d2Vic29ja2V0LworCitUaGlzIGRpcmVjdG9yeSBj
dXJyZW50bHkgY29udGFpbnMgdGhlIGZvbGxvd2luZyB2ZXJzaW9uOgorRklYTUU6IEZpbGwgaW4g
dGhlIGN1cnJlbnQgdmVyc2lvbiBoZXJlLgorCitUaGUgZm9sbG93aW5nIG1vZGlmaWNhdGlvbnMg
aGF2ZSBiZWVuIG1hZGUgdG8gdGhpcyBsb2NhbCB2ZXJzaW9uOgorRklYTUU6IEZpbGwgaW4gbG9j
YWwgbW9kaWZpY2F0aW9ucy4KKworTW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSBsb2NhbCBtb2Rp
ZmljYXRpb25zIGNhbiBiZSBmb3VuZCBoZXJlOgorCitodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jy
b3dzZXIvdHJ1bmsvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vi
c29ja2V0CkluZGV4OiBXZWJLaXRUb29scy9weXdlYnNvY2tldC9DT1BZSU5HCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L0NPUFlJTkcJKHJldmlzaW9uIDU1MjUzKQorKysg
V2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvQ09QWUlORwkod29ya2luZyBjb3B5KQpAQCAtMSwyOCAr
MCwwIEBACi1Db3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KLUFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotbWV0OgotCi0gICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotZGlzdHJpYnV0aW9uLgotICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LXRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi1MSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLUEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi1PV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLVNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLUxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi1USEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLU9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCkluZGV4OiBXZWJLaXRUb29scy9weXdlYnNvY2tl
dC9NQU5JRkVTVC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC9NQU5J
RkVTVC5pbgkocmV2aXNpb24gNTUyNTMpCisrKyBXZWJLaXRUb29scy9weXdlYnNvY2tldC9NQU5J
RkVTVC5pbgkod29ya2luZyBjb3B5KQpAQCAtMSw2ICswLDAgQEAKLWluY2x1ZGUgQ09QWUlORwot
aW5jbHVkZSBNQU5JRkVTVC5pbgotaW5jbHVkZSBSRUFETUUKLXJlY3Vyc2l2ZS1pbmNsdWRlIGV4
YW1wbGUgKi5weQotcmVjdXJzaXZlLWluY2x1ZGUgbW9kX3B5d2Vic29ja2V0ICoucHkKLXJlY3Vy
c2l2ZS1pbmNsdWRlIHRlc3QgKi5weQpJbmRleDogV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvUkVB
RE1FCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L1JFQURNRQkocmV2aXNp
b24gNTUyNTMpCisrKyBXZWJLaXRUb29scy9weXdlYnNvY2tldC9SRUFETUUJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMCwwIEBACi1JbnN0YWxsIHRoaXMgcGFja2FnZSBieToKLSQgcHl0aG9uIHNl
dHVwLnB5IGJ1aWxkCi0kIHN1ZG8gcHl0aG9uIHNldHVwLnB5IGluc3RhbGwKLQotVGhlbiByZWFk
IGRvY3VtZW50IGJ5OgotJCBweWRvYyBtb2RfcHl3ZWJzb2NrZXQKSW5kZXg6IFdlYktpdFRvb2xz
L3B5d2Vic29ja2V0L3NldHVwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL3B5d2Vic29j
a2V0L3NldHVwLnB5CShyZXZpc2lvbiA1NTI1MykKKysrIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0
L3NldHVwLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYzICswLDAgQEAKLSMhL3Vzci9iaW4vZW52
IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KLSMgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRp
c3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotIiIiU2V0IHVwIHNjcmlwdCBmb3IgbW9k
X3B5d2Vic29ja2V0LgotIiIiCi0KLQotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAK
LWltcG9ydCBzeXMKLQotCi1fUEFDS0FHRV9OQU1FID0gJ21vZF9weXdlYnNvY2tldCcKLQotaWYg
c3lzLnZlcnNpb24gPCAnMi4zJzoKLSAgICBwcmludCA+PnN5cy5zdGRlcnIsICclcyByZXF1aXJl
cyBQeXRob24gMi4zIG9yIGxhdGVyLicgJSBfUEFDS0FHRV9OQU1FCi0gICAgc3lzLmV4aXQoMSkK
LQotc2V0dXAoYXV0aG9yPSdZdXpvIEZ1amlzaGltYScsCi0gICAgICBhdXRob3JfZW1haWw9J3l1
em9AY2hyb21pdW0ub3JnJywKLSAgICAgIGRlc2NyaXB0aW9uPSdXZWIgU29ja2V0IGV4dGVuc2lv
biBmb3IgQXBhY2hlIEhUVFAgU2VydmVyLicsCi0gICAgICBsb25nX2Rlc2NyaXB0aW9uPSgKLSAg
ICAgICAgICAgICAgJ21vZF9weXdlYnNvY2tldCBpcyBhbiBBcGFjaGUgSFRUUCBTZXJ2ZXIgZXh0
ZW5zaW9uIGZvciAnCi0gICAgICAgICAgICAgICdXZWIgU29ja2V0IChodHRwOi8vdG9vbHMuaWV0
Zi5vcmcvaHRtbC8nCi0gICAgICAgICAgICAgICdkcmFmdC1oaXhpZS10aGV3ZWJzb2NrZXRwcm90
b2NvbCkuICcKLSAgICAgICAgICAgICAgJ1NlZSBtb2RfcHl3ZWJzb2NrZXQvX19pbml0X18ucHkg
Zm9yIG1vcmUgZGV0YWlsLicpLAotICAgICAgbGljZW5zZT0nU2VlIENPUFlJTkcnLAotICAgICAg
bmFtZT1fUEFDS0FHRV9OQU1FLAotICAgICAgcGFja2FnZXM9W19QQUNLQUdFX05BTUVdLAotICAg
ICAgdXJsPSdodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHl3ZWJzb2NrZXQvJywKLSAgICAgIHZl
cnNpb249JzAuNC44JywKLSAgICAgICkKLQotCi0jIHZpOnN0cz00IHN3PTQgZXQKSW5kZXg6IFdl
YktpdFRvb2xzL3B5d2Vic29ja2V0L2V4YW1wbGUvZWNob19jbGllbnQucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvZXhhbXBsZS9lY2hvX2NsaWVudC5weQkocmV2aXNp
b24gNTUyNTMpCisrKyBXZWJLaXRUb29scy9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9fY2xpZW50
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwNyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRo
b24KLSMKLSMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCi0jIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmli
dXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLSIiIldlYiBTb2NrZXQgRWNobyBjbGllbnQuCi0K
LVRoaXMgaXMgYW4gZXhhbXBsZSBXZWIgU29ja2V0IGNsaWVudCB0aGF0IHRhbGtzIHdpdGggZWNo
b193c2gucHkuCi1UaGlzIG1heSBiZSB1c2VmdWwgZm9yIGNoZWNraW5nIG1vZF9weXdlYnNvY2tl
dCBpbnN0YWxsYXRpb24uCi0KLU5vdGU6Ci1UaGlzIGNvZGUgaXMgZmFyIGZyb20gcm9idXN0LCBl
LmcuLCB3ZSBjdXQgY29ybmVycyBpbiBoYW5kc2hha2UuCi0iIiIKLQotCi1pbXBvcnQgY29kZWNz
Ci1mcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKLWltcG9ydCBzb2NrZXQKLWltcG9y
dCBzeXMKLQotCi1fVElNRU9VVF9TRUMgPSAxMAotCi1fREVGQVVMVF9QT1JUID0gODAKLV9ERUZB
VUxUX1NFQ1VSRV9QT1JUID0gNDQzCi1fVU5ERUZJTkVEX1BPUlQgPSAtMQotCi1fVVBHUkFERV9I
RUFERVIgPSAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKLV9DT05ORUNUSU9OX0hFQURFUiA9ICdD
b25uZWN0aW9uOiBVcGdyYWRlXHJcbicKLV9FWFBFQ1RFRF9SRVNQT05TRSA9ICgKLSAgICAgICAg
J0hUVFAvMS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nICsKLSAgICAg
ICAgX1VQR1JBREVfSEVBREVSICsKLSAgICAgICAgX0NPTk5FQ1RJT05fSEVBREVSKQotCi1fR09P
REJZRV9NRVNTQUdFID0gJ0dvb2RieWUnCi0KLQotZGVmIF9tZXRob2RfbGluZShyZXNvdXJjZSk6
Ci0gICAgcmV0dXJuICdHRVQgJXMgSFRUUC8xLjFcclxuJyAlIHJlc291cmNlCi0KLQotZGVmIF9v
cmlnaW5faGVhZGVyKG9yaWdpbik6Ci0gICAgcmV0dXJuICdPcmlnaW46ICVzXHJcbicgJSBvcmln
aW4KLQotCi1jbGFzcyBfVExTU29ja2V0KG9iamVjdCk6Ci0gICAgIiIiV3JhcHBlciBmb3IgYSBU
TFMgY29ubmVjdGlvbi4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXdfc29ja2V0KToK
LSAgICAgICAgc2VsZi5fc3NsID0gc29ja2V0LnNzbChyYXdfc29ja2V0KQotCi0gICAgZGVmIHNl
bmQoc2VsZiwgYnl0ZXMpOgotICAgICAgICByZXR1cm4gc2VsZi5fc3NsLndyaXRlKGJ5dGVzKQot
Ci0gICAgZGVmIHJlY3Yoc2VsZiwgc2l6ZT0tMSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9zc2wu
cmVhZChzaXplKQotCi0gICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICAjIE5vdGhpbmcgdG8g
ZG8uCi0gICAgICAgIHBhc3MKLQotCi1jbGFzcyBFY2hvQ2xpZW50KG9iamVjdCk6Ci0gICAgIiIi
V2ViIFNvY2tldCBlY2hvIGNsaWVudC4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRp
b25zKToKLSAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKLSAgICAgICAgc2VsZi5fc29j
a2V0ID0gTm9uZQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgIiIiUnVuIHRoZSBjbGll
bnQuCi0KLSAgICAgICAgU2hha2UgaGFuZHMgYW5kIHRoZW4gcmVwZWF0IHNlbmRpbmcgbWVzc2Fn
ZSBhbmQgcmVjZWl2aW5nIGl0cyBlY2hvLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fc29j
a2V0ID0gc29ja2V0LnNvY2tldCgpCi0gICAgICAgIHNlbGYuX3NvY2tldC5zZXR0aW1lb3V0KHNl
bGYuX29wdGlvbnMuc29ja2V0X3RpbWVvdXQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNl
bGYuX3NvY2tldC5jb25uZWN0KChzZWxmLl9vcHRpb25zLnNlcnZlcl9ob3N0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2VydmVyX3BvcnQpKQotICAg
ICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy51c2VfdGxzOgotICAgICAgICAgICAgICAgIHNlbGYu
X3NvY2tldCA9IF9UTFNTb2NrZXQoc2VsZi5fc29ja2V0KQotICAgICAgICAgICAgc2VsZi5faGFu
ZHNoYWtlKCkKLSAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuX29wdGlvbnMubWVzc2FnZS5z
cGxpdCgnLCcpICsgW19HT09EQllFX01FU1NBR0VdOgotICAgICAgICAgICAgICAgIGZyYW1lID0g
J1x4MDAnICsgbGluZS5lbmNvZGUoJ3V0Zi04JykgKyAnXHhmZicKLSAgICAgICAgICAgICAgICBz
ZWxmLl9zb2NrZXQuc2VuZChmcmFtZSkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25z
LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ICdTZW5kOiAlcycgJSBsaW5lCi0g
ICAgICAgICAgICAgICAgcmVjZWl2ZWQgPSBzZWxmLl9zb2NrZXQucmVjdihsZW4oZnJhbWUpKQot
ICAgICAgICAgICAgICAgIGlmIHJlY2VpdmVkICE9IGZyYW1lOgotICAgICAgICAgICAgICAgICAg
ICByYWlzZSBFeGNlcHRpb24oJ0luY29ycmVjdCBlY2hvOiAlcicgJSByZWNlaXZlZCkKLSAgICAg
ICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgICAg
IHByaW50ICdSZWN2OiAlcycgJSByZWNlaXZlZFsxOi0xXS5kZWNvZGUoJ3V0Zi04JywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
cmVwbGFjZScpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLl9zb2NrZXQuY2xv
c2UoKQotCi0gICAgZGVmIF9oYW5kc2hha2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuX3NvY2tldC5z
ZW5kKF9tZXRob2RfbGluZShzZWxmLl9vcHRpb25zLnJlc291cmNlKSkKLSAgICAgICAgc2VsZi5f
c29ja2V0LnNlbmQoX1VQR1JBREVfSEVBREVSKQotICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZChf
Q09OTkVDVElPTl9IRUFERVIpCi0gICAgICAgIHNlbGYuX3NvY2tldC5zZW5kKHNlbGYuX2Zvcm1h
dF9ob3N0X2hlYWRlcigpKQotICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZChfb3JpZ2luX2hlYWRl
cihzZWxmLl9vcHRpb25zLm9yaWdpbikpCi0gICAgICAgIHNlbGYuX3NvY2tldC5zZW5kKCdcclxu
JykKLQotICAgICAgICBmb3IgZXhwZWN0ZWRfY2hhciBpbiBfRVhQRUNURURfUkVTUE9OU0U6Ci0g
ICAgICAgICAgICByZWNlaXZlZCA9IHNlbGYuX3NvY2tldC5yZWN2KDEpWzBdCi0gICAgICAgICAg
ICBpZiBleHBlY3RlZF9jaGFyICE9IHJlY2VpdmVkOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4
Y2VwdGlvbignSGFuZHNoYWtlIGZhaWx1cmUnKQotICAgICAgICAjIFdlIGN1dCBjb3JuZXJzIGFu
ZCBza2lwIG90aGVyIGhlYWRlcnMuCi0gICAgICAgIHNlbGYuX3NraXBfaGVhZGVycygpCi0KLSAg
ICBkZWYgX3NraXBfaGVhZGVycyhzZWxmKToKLSAgICAgICAgdGVybWluYXRvciA9ICdcclxuXHJc
bicKLSAgICAgICAgcG9zID0gMAotICAgICAgICB3aGlsZSBwb3MgPCBsZW4odGVybWluYXRvcik6
Ci0gICAgICAgICAgICByZWNlaXZlZCA9IHNlbGYuX3NvY2tldC5yZWN2KDEpWzBdCi0gICAgICAg
ICAgICBpZiByZWNlaXZlZCA9PSB0ZXJtaW5hdG9yW3Bvc106Ci0gICAgICAgICAgICAgICAgcG9z
ICs9IDEKLSAgICAgICAgICAgIGVsaWYgcmVjZWl2ZWQgPT0gdGVybWluYXRvclswXToKLSAgICAg
ICAgICAgICAgICBwb3MgPSAxCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHBv
cyA9IDAKLQotICAgIGRlZiBfZm9ybWF0X2hvc3RfaGVhZGVyKHNlbGYpOgotICAgICAgICBob3N0
ID0gJ0hvc3Q6ICcgKyBzZWxmLl9vcHRpb25zLnNlcnZlcl9ob3N0Ci0gICAgICAgIGlmICgobm90
IHNlbGYuX29wdGlvbnMudXNlX3RscyBhbmQKLSAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnNl
cnZlcl9wb3J0ICE9IF9ERUZBVUxUX1BPUlQpIG9yCi0gICAgICAgICAgICAoc2VsZi5fb3B0aW9u
cy51c2VfdGxzIGFuZAotICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2VydmVyX3BvcnQgIT0g
X0RFRkFVTFRfU0VDVVJFX1BPUlQpKToKLSAgICAgICAgICAgIGhvc3QgKz0gJzonICsgc3RyKHNl
bGYuX29wdGlvbnMuc2VydmVyX3BvcnQpCi0gICAgICAgIGhvc3QgKz0gJ1xyXG4nCi0gICAgICAg
IHJldHVybiBob3N0Ci0KLQotZGVmIG1haW4oKToKLSAgICBzeXMuc3Rkb3V0ID0gY29kZWNzLmdl
dHdyaXRlcigndXRmLTgnKShzeXMuc3Rkb3V0KQotCi0gICAgcGFyc2VyID0gT3B0aW9uUGFyc2Vy
KCkKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLXMnLCAnLS1zZXJ2ZXJfaG9zdCcsIGRlc3Q9J3Nl
cnZlcl9ob3N0JywgdHlwZT0nc3RyaW5nJywKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
PSdsb2NhbGhvc3QnLCBoZWxwPSdzZXJ2ZXIgaG9zdCcpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24o
Jy1wJywgJy0tc2VydmVyX3BvcnQnLCBkZXN0PSdzZXJ2ZXJfcG9ydCcsIHR5cGU9J2ludCcsCi0g
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1fVU5ERUZJTkVEX1BPUlQsIGhlbHA9J3NlcnZl
ciBwb3J0JykKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLW8nLCAnLS1vcmlnaW4nLCBkZXN0PSdv
cmlnaW4nLCB0eXBlPSdzdHJpbmcnLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J2h0
dHA6Ly9sb2NhbGhvc3QvJywgaGVscD0nb3JpZ2luJykKLSAgICBwYXJzZXIuYWRkX29wdGlvbign
LXInLCAnLS1yZXNvdXJjZScsIGRlc3Q9J3Jlc291cmNlJywgdHlwZT0nc3RyaW5nJywKLSAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0PScvZWNobycsIGhlbHA9J3Jlc291cmNlIHBhdGgnKQot
ICAgIHBhcnNlci5hZGRfb3B0aW9uKCctbScsICctLW1lc3NhZ2UnLCBkZXN0PSdtZXNzYWdlJywg
dHlwZT0nc3RyaW5nJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnY29tbWEtc2VwYXJh
dGVkIG1lc3NhZ2VzIHRvIHNlbmQgZXhjbHVkaW5nICIlcyIgJwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICd0aGF0IGlzIGFsd2F5cyBzZW50IGF0IHRoZSBlbmQnICUKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfR09PREJZRV9NRVNTQUdFKSkKLSAgICBwYXJzZXIuYWRkX29wdGlv
bignLXEnLCAnLS1xdWlldCcsIGRlc3Q9J3ZlcmJvc2UnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywK
LSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsIGhlbHA9J3N1cHByZXNzIG1lc3Nh
Z2VzJykKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS10bHMnLCBkZXN0PSd1c2VfdGxz
JywgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZh
bHNlLCBoZWxwPSd1c2UgVExTICh3c3M6Ly8pJykKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLWsn
LCAnLS1zb2NrZXRfdGltZW91dCcsIGRlc3Q9J3NvY2tldF90aW1lb3V0JywKLSAgICAgICAgICAg
ICAgICAgICAgICB0eXBlPSdpbnQnLCBkZWZhdWx0PV9USU1FT1VUX1NFQywKLSAgICAgICAgICAg
ICAgICAgICAgICBoZWxwPSdUaW1lb3V0KHNlYykgZm9yIHNvY2tldHMnKQotCi0gICAgKG9wdGlv
bnMsIHVudXNlZF9hcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLQotICAgICMgRGVmYXVsdCBw
b3J0IG51bWJlciBkZXBlbmRzIG9uIHdoZXRoZXIgVExTIGlzIHVzZWQuCi0gICAgaWYgb3B0aW9u
cy5zZXJ2ZXJfcG9ydCA9PSBfVU5ERUZJTkVEX1BPUlQ6Ci0gICAgICAgIGlmIG9wdGlvbnMudXNl
X3RsczoKLSAgICAgICAgICAgIG9wdGlvbnMuc2VydmVyX3BvcnQgPSBfREVGQVVMVF9TRUNVUkVf
UE9SVAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgb3B0aW9ucy5zZXJ2ZXJfcG9ydCA9IF9E
RUZBVUxUX1BPUlQKLQotICAgICMgb3B0cGFyc2UgZG9lc24ndCBzZWVtIHRvIGhhbmRsZSBub24t
YXNjaWkgZGVmYXVsdCB2YWx1ZXMuCi0gICAgIyBTZXQgZGVmYXVsdCBtZXNzYWdlIGhlcmUuCi0g
ICAgaWYgbm90IG9wdGlvbnMubWVzc2FnZToKLSAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gdSdI
ZWxsbyxcdTY1ZTVcdTY3MmMnICAgIyAiSmFwYW4iIGluIEphcGFuZXNlCi0KLSAgICBFY2hvQ2xp
ZW50KG9wdGlvbnMpLnJ1bigpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBt
YWluKCkKLQotCi0jIHZpOnN0cz00IHN3PTQgZXQKSW5kZXg6IFdlYktpdFRvb2xzL3B5d2Vic29j
a2V0L2V4YW1wbGUvZWNob193c2gucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvcHl3ZWJz
b2NrZXQvZXhhbXBsZS9lY2hvX3dzaC5weQkocmV2aXNpb24gNTUyNTMpCisrKyBXZWJLaXRUb29s
cy9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9fd3NoLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5
ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCi0jIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0
cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWZyb20gbW9kX3B5d2Vic29ja2V0IGltcG9y
dCBtc2d1dGlsCi0KLQotX0dPT0RCWUVfTUVTU0FHRSA9ICdHb29kYnllJwotCi0KLWRlZiB3ZWJf
c29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKLSAgICBwYXNzICAjIEFsd2F5cyBh
Y2NlcHQuCi0KLQotZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKLSAgICB3
aGlsZSBUcnVlOgotICAgICAgICBsaW5lID0gbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVz
dCkKLSAgICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgbGluZSkKLSAgICAgICAg
aWYgbGluZSA9PSBfR09PREJZRV9NRVNTQUdFOgotICAgICAgICAgICAgcmV0dXJuCi0KLQotIyB2
aTpzdHM9NCBzdz00IGV0CkluZGV4OiBXZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJz
b2NrZXQvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQv
bW9kX3B5d2Vic29ja2V0L19faW5pdF9fLnB5CShyZXZpc2lvbiA1NTI1MykKKysrIFdlYktpdFRv
b2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9fX2luaXRfXy5weQkod29ya2luZyBjb3B5
KQpAQCAtMSwxMDUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KLSMgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0
OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotIiIiV2ViIFNvY2tldCBl
eHRlbnNpb24gZm9yIEFwYWNoZSBIVFRQIFNlcnZlci4KLQotbW9kX3B5d2Vic29ja2V0IGlzIGEg
V2ViIFNvY2tldCBleHRlbnNpb24gZm9yIEFwYWNoZSBIVFRQIFNlcnZlcgotaW50ZW5kZWQgZm9y
IHRlc3Rpbmcgb3IgZXhwZXJpbWVudGFsIHB1cnBvc2VzLiBtb2RfcHl0aG9uIGlzIHJlcXVpcmVk
LgotCi1JbnN0YWxsYXRpb246Ci0KLTAuIFByZXBhcmUgYW4gQXBhY2hlIEhUVFAgU2VydmVyIGZv
ciB3aGljaCBtb2RfcHl0aG9uIGlzIGVuYWJsZWQuCi0KLTEuIFNwZWNpZnkgdGhlIGZvbGxvd2lu
ZyBBcGFjaGUgSFRUUCBTZXJ2ZXIgZGlyZWN0aXZlcyB0byBzdWl0IHlvdXIKLSAgIGNvbmZpZ3Vy
YXRpb24uCi0KLSAgIElmIG1vZF9weXdlYnNvY2tldCBpcyBub3QgaW4gdGhlIFB5dGhvbiBwYXRo
LCBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcuCi0gICA8d2Vic29ja19saWI+IGlzIHRoZSBkaXJlY3Rv
cnkgd2hlcmUgbW9kX3B5d2Vic29ja2V0IGlzIGluc3RhbGxlZC4KLQotICAgICAgIFB5dGhvblBh
dGggInN5cy5wYXRoK1snPHdlYnNvY2tfbGliPiddIgotCi0gICBBbHdheXMgc3BlY2lmeSB0aGUg
Zm9sbG93aW5nLiA8d2Vic29ja19oYW5kbGVycz4gaXMgdGhlIGRpcmVjdG9yeSB3aGVyZQotICAg
dXNlci13cml0dGVuIFdlYiBTb2NrZXQgaGFuZGxlcnMgYXJlIHBsYWNlZC4KLQotICAgICAgIFB5
dGhvbk9wdGlvbiBtb2RfcHl3ZWJzb2NrZXQuaGFuZGxlcl9yb290IDx3ZWJzb2NrX2hhbmRsZXJz
PgotICAgICAgIFB5dGhvbkhlYWRlclBhcnNlckhhbmRsZXIgbW9kX3B5d2Vic29ja2V0LmhlYWRl
cnBhcnNlcmhhbmRsZXIKLQotICAgVG8gbGltaXQgdGhlIHNlYXJjaCBmb3IgV2ViIFNvY2tldCBo
YW5kbGVycyB0byBhIGRpcmVjdG9yeSA8c2Nhbl9kaXI+Ci0gICB1bmRlciA8d2Vic29ja19oYW5k
bGVycz4sIGNvbmZpZ3VyZSBhcyBmb2xsb3dzOgotICAgCi0gICAgICAgUHl0aG9uT3B0aW9uIG1v
ZF9weXdlYnNvY2tldC5oYW5kbGVyX3NjYW4gPHNjYW5fZGlyPgotICAgICAgIAotICAgPHNjYW5f
ZGlyPiBpcyB1c2VmdWwgaW4gc2F2aW5nIHNjYW4gdGltZSB3aGVuIDx3ZWJzb2NrX2hhbmRsZXJz
PgotICAgY29udGFpbnMgbWFueSBub24tV2ViIFNvY2tldCBoYW5kbGVyIGZpbGVzLgotCi0gICBF
eGFtcGxlIHNuaXBwZXQgb2YgaHR0cGQuY29uZjoKLSAgIChtb2RfcHl3ZWJzb2NrZXQgaXMgaW4g
L3dlYnNvY2tfbGliLCBXZWIgU29ja2V0IGhhbmRsZXJzIGFyZSBpbgotICAgL3dlYnNvY2tfaGFu
ZGxlcnMsIHBvcnQgaXMgODAgZm9yIHdzLCA0NDMgZm9yIHdzcy4pCi0KLSAgICAgICA8SWZNb2R1
bGUgcHl0aG9uX21vZHVsZT4KLSAgICAgICAgIFB5dGhvblBhdGggInN5cy5wYXRoK1snL3dlYnNv
Y2tfbGliJ10iCi0gICAgICAgICBQeXRob25PcHRpb24gbW9kX3B5d2Vic29ja2V0LmhhbmRsZXJf
cm9vdCAvd2Vic29ja19oYW5kbGVycwotICAgICAgICAgUHl0aG9uSGVhZGVyUGFyc2VySGFuZGxl
ciBtb2RfcHl3ZWJzb2NrZXQuaGVhZGVycGFyc2VyaGFuZGxlcgotICAgICAgIDwvSWZNb2R1bGU+
Ci0KLVdyaXRpbmcgV2ViIFNvY2tldCBoYW5kbGVyczoKLQotV2hlbiBhIFdlYiBTb2NrZXQgcmVx
dWVzdCBjb21lcyBpbiwgdGhlIHJlc291cmNlIG5hbWUKLXNwZWNpZmllZCBpbiB0aGUgaGFuZHNo
YWtlIGlzIGNvbnNpZGVyZWQgYXMgaWYgaXQgaXMgYSBmaWxlIHBhdGggdW5kZXIKLTx3ZWJzb2Nr
X2hhbmRsZXJzPiBhbmQgdGhlIGhhbmRsZXIgZGVmaW5lZCBpbgotPHdlYnNvY2tfaGFuZGxlcnM+
LzxyZXNvdXJjZV9uYW1lPl93c2gucHkgaXMgaW52b2tlZC4KLQotRm9yIGV4YW1wbGUsIGlmIHRo
ZSByZXNvdXJjZSBuYW1lIGlzIC9leGFtcGxlL2NoYXQsIHRoZSBoYW5kbGVyIGRlZmluZWQgaW4K
LTx3ZWJzb2NrX2hhbmRsZXJzPi9leGFtcGxlL2NoYXRfd3NoLnB5IGlzIGludm9rZWQuCi0KLUEg
V2ViIFNvY2tldCBoYW5kbGVyIGlzIGNvbXBvc2VkIG9mIHRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0
aW9uczoKLQotICAgIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpCi0gICAg
d2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpCi0KLXdoZXJlOgotICAgIHJlcXVlc3Q6
IG1vZF9weXRob24gcmVxdWVzdC4KLQotd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UgaXMg
Y2FsbGVkIGR1cmluZyB0aGUgaGFuZHNoYWtlIGFmdGVyIHRoZQotaGVhZGVycyBhcmUgc3VjY2Vz
c2Z1bGx5IHBhcnNlZCBhbmQgV2ViIFNvY2tldCBwcm9wZXJ0aWVzICh3c19sb2NhdGlvbiwKLXdz
X29yaWdpbiwgd3NfcHJvdG9jb2wsIGFuZCB3c19yZXNvdXJjZSkgYXJlIGFkZGVkIHRvIHJlcXVl
c3QuIEEgaGFuZGxlcgotY2FuIHJlamVjdCB0aGUgcmVxdWVzdCBieSByYWlzaW5nIGFuIGV4Y2Vw
dGlvbi4KLQotd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhIGlzIGNhbGxlZCBhZnRlciB0aGUgaGFu
ZHNoYWtlIGNvbXBsZXRlZAotc3VjY2Vzc2Z1bGx5LiBBIGhhbmRsZXIgY2FuIHJlY2VpdmUvc2Vu
ZCBtZXNzYWdlcyBmcm9tL3RvIHRoZSBjbGllbnQKLXVzaW5nIHJlcXVlc3QuIG1vZF9weXdlYnNv
Y2tldC5tc2d1dGlsIG1vZHVsZSBwcm92aWRlcyB1dGlsaXRpZXMKLWZvciBkYXRhIHRyYW5zZmVy
LgotCi1BIFdlYiBTb2NrZXQgaGFuZGxlciBtdXN0IGJlIHRocmVhZC1zYWZlIGlmIHRoZSBzZXJ2
ZXIgKEFwYWNoZSBvcgotc3RhbmRhbG9uZS5weSkgaXMgY29uZmlndXJlZCB0byB1c2UgdGhyZWFk
cy4KLSIiIgotCi0KLSMgdmk6c3RzPTQgc3c9NCBldCB0dz03MgpJbmRleDogV2ViS2l0VG9vbHMv
cHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2Rpc3BhdGNoLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9kaXNwYXRjaC5weQkocmV2aXNp
b24gNTUyNTMpCisrKyBXZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvZGlz
cGF0Y2gucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMjMxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIw
MDksIEdvb2dsZSBJbmMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0j
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0KLSIiIkRpc3BhdGNoIFdlYiBTb2NrZXQgcmVxdWVzdC4KLSIiIgotCi0KLWltcG9ydCBv
cwotaW1wb3J0IHJlCi0KLWltcG9ydCB1dGlsCi0KLQotX1NPVVJDRV9QQVRIX1BBVFRFUk4gPSBy
ZS5jb21waWxlKHInKD9pKV93c2hcLnB5JCcpCi1fU09VUkNFX1NVRkZJWCA9ICdfd3NoLnB5Jwot
X0RPX0VYVFJBX0hBTkRTSEFLRV9IQU5ETEVSX05BTUUgPSAnd2ViX3NvY2tldF9kb19leHRyYV9o
YW5kc2hha2UnCi1fVFJBTlNGRVJfREFUQV9IQU5ETEVSX05BTUUgPSAnd2ViX3NvY2tldF90cmFu
c2Zlcl9kYXRhJwotCi0KLWNsYXNzIERpc3BhdGNoRXJyb3IoRXhjZXB0aW9uKToKLSAgICAiIiJF
eGNlcHRpb24gaW4gZGlzcGF0Y2hpbmcgV2ViIFNvY2tldCByZXF1ZXN0LiIiIgotCi0gICAgcGFz
cwotCi0KLWRlZiBfbm9ybWFsaXplX3BhdGgocGF0aCk6Ci0gICAgIiIiTm9ybWFsaXplIHBhdGgu
Ci0KLSAgICBBcmdzOgotICAgICAgICBwYXRoOiB0aGUgcGF0aCB0byBub3JtYWxpemUuCi0KLSAg
ICBQYXRoIGlzIGNvbnZlcnRlZCB0byB0aGUgYWJzb2x1dGUgcGF0aC4KLSAgICBUaGUgaW5wdXQg
cGF0aCBjYW4gdXNlIGVpdGhlciAnXFwnIG9yICcvJyBhcyB0aGUgc2VwYXJhdG9yLgotICAgIFRo
ZSBub3JtYWxpemVkIHBhdGggYWx3YXlzIHVzZXMgJy8nIHJlZ2FyZGxlc3Mgb2YgdGhlIHBsYXRm
b3JtLgotICAgICIiIgotCi0gICAgcGF0aCA9IHBhdGgucmVwbGFjZSgnXFwnLCBvcy5wYXRoLnNl
cCkKLSAgICBwYXRoID0gb3MucGF0aC5yZWFscGF0aChwYXRoKQotICAgIHBhdGggPSBwYXRoLnJl
cGxhY2UoJ1xcJywgJy8nKQotICAgIHJldHVybiBwYXRoCi0KLQotZGVmIF9wYXRoX3RvX3Jlc291
cmNlX2NvbnZlcnRlcihiYXNlX2Rpcik6Ci0gICAgYmFzZV9kaXIgPSBfbm9ybWFsaXplX3BhdGgo
YmFzZV9kaXIpCi0gICAgYmFzZV9sZW4gPSBsZW4oYmFzZV9kaXIpCi0gICAgc3VmZml4X2xlbiA9
IGxlbihfU09VUkNFX1NVRkZJWCkKLSAgICBkZWYgY29udmVydGVyKHBhdGgpOgotICAgICAgICBp
ZiBub3QgcGF0aC5lbmRzd2l0aChfU09VUkNFX1NVRkZJWCk6Ci0gICAgICAgICAgICByZXR1cm4g
Tm9uZQotICAgICAgICBwYXRoID0gX25vcm1hbGl6ZV9wYXRoKHBhdGgpCi0gICAgICAgIGlmIG5v
dCBwYXRoLnN0YXJ0c3dpdGgoYmFzZV9kaXIpOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAg
ICAgICAgcmV0dXJuIHBhdGhbYmFzZV9sZW46LXN1ZmZpeF9sZW5dCi0gICAgcmV0dXJuIGNvbnZl
cnRlcgotCi0KLWRlZiBfc291cmNlX2ZpbGVfcGF0aHMoZGlyZWN0b3J5KToKLSAgICAiIiJZaWVs
ZCBXZWIgU29ja2V0IEhhbmRsZXIgc291cmNlIGZpbGUgbmFtZXMgaW4gdGhlIGdpdmVuIGRpcmVj
dG9yeS4iIiIKLQotICAgIGZvciByb290LCB1bnVzZWRfZGlycywgZmlsZXMgaW4gb3Mud2Fsayhk
aXJlY3RvcnkpOgotICAgICAgICBmb3IgYmFzZSBpbiBmaWxlczoKLSAgICAgICAgICAgIHBhdGgg
PSBvcy5wYXRoLmpvaW4ocm9vdCwgYmFzZSkKLSAgICAgICAgICAgIGlmIF9TT1VSQ0VfUEFUSF9Q
QVRURVJOLnNlYXJjaChwYXRoKToKLSAgICAgICAgICAgICAgICB5aWVsZCBwYXRoCi0KLQotZGVm
IF9zb3VyY2Uoc291cmNlX3N0cik6Ci0gICAgIiIiU291cmNlIGEgaGFuZGxlciBkZWZpbml0aW9u
IHN0cmluZy4iIiIKLQotICAgIGdsb2JhbF9kaWMgPSB7fQotICAgIHRyeToKLSAgICAgICAgZXhl
YyBzb3VyY2Vfc3RyIGluIGdsb2JhbF9kaWMKLSAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAg
ICByYWlzZSBEaXNwYXRjaEVycm9yKCdFcnJvciBpbiBzb3VyY2luZyBoYW5kbGVyOicgKwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuZ2V0X3N0YWNrX3RyYWNlKCkpCi0gICAgcmV0
dXJuIChfZXh0cmFjdF9oYW5kbGVyKGdsb2JhbF9kaWMsIF9ET19FWFRSQV9IQU5EU0hBS0VfSEFO
RExFUl9OQU1FKSwKLSAgICAgICAgICAgIF9leHRyYWN0X2hhbmRsZXIoZ2xvYmFsX2RpYywgX1RS
QU5TRkVSX0RBVEFfSEFORExFUl9OQU1FKSkKLQotCi1kZWYgX2V4dHJhY3RfaGFuZGxlcihkaWMs
IG5hbWUpOgotICAgIGlmIG5hbWUgbm90IGluIGRpYzoKLSAgICAgICAgcmFpc2UgRGlzcGF0Y2hF
cnJvcignJXMgaXMgbm90IGRlZmluZWQuJyAlIG5hbWUpCi0gICAgaGFuZGxlciA9IGRpY1tuYW1l
XQotICAgIGlmIG5vdCBjYWxsYWJsZShoYW5kbGVyKToKLSAgICAgICAgcmFpc2UgRGlzcGF0Y2hF
cnJvcignJXMgaXMgbm90IGNhbGxhYmxlLicgJSBuYW1lKQotICAgIHJldHVybiBoYW5kbGVyCi0K
LQotY2xhc3MgRGlzcGF0Y2hlcihvYmplY3QpOgotICAgICIiIkRpc3BhdGNoZXMgV2ViIFNvY2tl
dCByZXF1ZXN0cy4KLQotICAgIFRoaXMgY2xhc3MgbWFpbnRhaW5zIGEgbWFwIGZyb20gcmVzb3Vy
Y2UgbmFtZSB0byBoYW5kbGVycy4KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBy
b290X2Rpciwgc2Nhbl9kaXI9Tm9uZSk6Ci0gICAgICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5j
ZS4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgICAgcm9vdF9kaXI6IFRoZSBkaXJlY3Rvcnkg
d2hlcmUgaGFuZGxlciBkZWZpbml0aW9uIGZpbGVzIGFyZQotICAgICAgICAgICAgICAgICAgICAg
IHBsYWNlZC4KLSAgICAgICAgICAgIHNjYW5fZGlyOiBUaGUgZGlyZWN0b3J5IHdoZXJlIGhhbmRs
ZXIgZGVmaW5pdGlvbiBmaWxlcyBhcmUKLSAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hlZC4g
c2Nhbl9kaXIgbXVzdCBiZSBhIGRpcmVjdG9yeSB1bmRlciByb290X2RpciwKLSAgICAgICAgICAg
ICAgICAgICAgICBpbmNsdWRpbmcgcm9vdF9kaXIgaXRzZWxmLiAgSWYgc2Nhbl9kaXIgaXMgTm9u
ZSwgcm9vdF9kaXIKLSAgICAgICAgICAgICAgICAgICAgICBpcyB1c2VkIGFzIHNjYW5fZGlyLiBz
Y2FuX2RpciBjYW4gYmUgdXNlZnVsIGluIHNhdmluZwotICAgICAgICAgICAgICAgICAgICAgIHNj
YW4gdGltZSB3aGVuIHJvb3RfZGlyIGNvbnRhaW5zIG1hbnkgc3ViZGlyZWN0b3JpZXMuCi0gICAg
ICAgICIiIgotCi0gICAgICAgIHNlbGYuX2hhbmRsZXJzID0ge30KLSAgICAgICAgc2VsZi5fc291
cmNlX3dhcm5pbmdzID0gW10KLSAgICAgICAgaWYgc2Nhbl9kaXIgaXMgTm9uZToKLSAgICAgICAg
ICAgIHNjYW5fZGlyID0gcm9vdF9kaXIKLSAgICAgICAgaWYgbm90IG9zLnBhdGgucmVhbHBhdGgo
c2Nhbl9kaXIpLnN0YXJ0c3dpdGgoCi0gICAgICAgICAgICAgICAgb3MucGF0aC5yZWFscGF0aChy
b290X2RpcikpOgotICAgICAgICAgICAgcmFpc2UgRGlzcGF0Y2hFcnJvcignc2Nhbl9kaXI6JXMg
bXVzdCBiZSBhIGRpcmVjdG9yeSB1bmRlciAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdyb290X2Rpcjolcy4nICUgKHNjYW5fZGlyLCByb290X2RpcikpCi0gICAgICAgIHNlbGYu
X3NvdXJjZV9maWxlc19pbl9kaXIocm9vdF9kaXIsIHNjYW5fZGlyKQotCi0gICAgZGVmIGFkZF9y
ZXNvdXJjZV9wYXRoX2FsaWFzKHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFsaWFzX3Jlc291cmNlX3BhdGgsIGV4aXN0aW5nX3Jlc291cmNlX3BhdGgpOgotICAgICAgICAi
IiJBZGQgcmVzb3VyY2UgcGF0aCBhbGlhcy4KLQotICAgICAgICBPbmNlIGFkZGVkLCByZXF1ZXN0
IHRvIGFsaWFzX3Jlc291cmNlX3BhdGggd291bGQgYmUgaGFuZGxlZCBieQotICAgICAgICBoYW5k
bGVyIHJlZ2lzdGVyZWQgZm9yIGV4aXN0aW5nX3Jlc291cmNlX3BhdGguCi0KLSAgICAgICAgQXJn
czoKLSAgICAgICAgICAgIGFsaWFzX3Jlc291cmNlX3BhdGg6IGFsaWFzIHJlc291cmNlIHBhdGgK
LSAgICAgICAgICAgIGV4aXN0aW5nX3Jlc291cmNlX3BhdGg6IGV4aXN0aW5nIHJlc291cmNlIHBh
dGgKLSAgICAgICAgIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGhhbmRsZXIgPSBzZWxm
Ll9oYW5kbGVyc1tleGlzdGluZ19yZXNvdXJjZV9wYXRoXQotICAgICAgICAgICAgc2VsZi5faGFu
ZGxlcnNbYWxpYXNfcmVzb3VyY2VfcGF0aF0gPSBoYW5kbGVyCi0gICAgICAgIGV4Y2VwdCBLZXlF
cnJvcjoKLSAgICAgICAgICAgIHJhaXNlIERpc3BhdGNoRXJyb3IoJ05vIGhhbmRsZXIgZm9yOiAl
cicgJSBleGlzdGluZ19yZXNvdXJjZV9wYXRoKQotCi0gICAgZGVmIHNvdXJjZV93YXJuaW5ncyhz
ZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHdhcm5pbmdzIGluIHNvdXJjaW5nIGhhbmRsZXJzLiIi
IgotCi0gICAgICAgIHJldHVybiBzZWxmLl9zb3VyY2Vfd2FybmluZ3MKLQotICAgIGRlZiBkb19l
eHRyYV9oYW5kc2hha2Uoc2VsZiwgcmVxdWVzdCk6Ci0gICAgICAgICIiIkRvIGV4dHJhIGNoZWNr
aW5nIGluIFdlYiBTb2NrZXQgaGFuZHNoYWtlLgotCi0gICAgICAgIFNlbGVjdCBhIGhhbmRsZXIg
YmFzZWQgb24gcmVxdWVzdC51cmkgYW5kIGNhbGwgaXRzCi0gICAgICAgIHdlYl9zb2NrZXRfZG9f
ZXh0cmFfaGFuZHNoYWtlIGZ1bmN0aW9uLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBy
ZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCi0gICAgICAgICIiIgotCi0gICAgICAgIGRvX2V4
dHJhX2hhbmRzaGFrZV8sIHVudXNlZF90cmFuc2Zlcl9kYXRhID0gc2VsZi5faGFuZGxlcihyZXF1
ZXN0KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkb19leHRyYV9oYW5kc2hha2VfKHJlcXVl
c3QpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6Ci0gICAgICAgICAgICB1dGlsLnByZXBl
bmRfbWVzc2FnZV90b19leGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICclcyByYWlzZWQg
ZXhjZXB0aW9uIGZvciAlczogJyAlICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRE9f
RVhUUkFfSEFORFNIQUtFX0hBTkRMRVJfTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXF1ZXN0LndzX3Jlc291cmNlKSwKLSAgICAgICAgICAgICAgICAgICAgZSkKLSAgICAgICAg
ICAgIHJhaXNlCi0KLSAgICBkZWYgdHJhbnNmZXJfZGF0YShzZWxmLCByZXF1ZXN0KToKLSAgICAg
ICAgIiIiTGV0IGEgaGFuZGxlciB0cmFuc2Zlcl9kYXRhIHdpdGggYSBXZWIgU29ja2V0IGNsaWVu
dC4KLQotICAgICAgICBTZWxlY3QgYSBoYW5kbGVyIGJhc2VkIG9uIHJlcXVlc3Qud3NfcmVzb3Vy
Y2UgYW5kIGNhbGwgaXRzCi0gICAgICAgIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YSBmdW5jdGlv
bi4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1
ZXN0LgotICAgICAgICAiIiIKLQotICAgICAgICB1bnVzZWRfZG9fZXh0cmFfaGFuZHNoYWtlLCB0
cmFuc2Zlcl9kYXRhXyA9IHNlbGYuX2hhbmRsZXIocmVxdWVzdCkKLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgdHJhbnNmZXJfZGF0YV8ocmVxdWVzdCkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlv
biwgZToKLSAgICAgICAgICAgIHV0aWwucHJlcGVuZF9tZXNzYWdlX3RvX2V4Y2VwdGlvbigKLSAg
ICAgICAgICAgICAgICAgICAgJyVzIHJhaXNlZCBleGNlcHRpb24gZm9yICVzOiAnICUgKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9UUkFOU0ZFUl9EQVRBX0hBTkRMRVJfTkFNRSwgcmVx
dWVzdC53c19yZXNvdXJjZSksCi0gICAgICAgICAgICAgICAgICAgIGUpCi0gICAgICAgICAgICBy
YWlzZQotCi0gICAgZGVmIF9oYW5kbGVyKHNlbGYsIHJlcXVlc3QpOgotICAgICAgICB0cnk6Ci0g
ICAgICAgICAgICB3c19yZXNvdXJjZV9wYXRoID0gcmVxdWVzdC53c19yZXNvdXJjZS5zcGxpdCgn
PycsIDEpWzBdCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlcnNbd3NfcmVzb3VyY2Vf
cGF0aF0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcmFpc2UgRGlzcGF0
Y2hFcnJvcignTm8gaGFuZGxlciBmb3I6ICVyJyAlIHJlcXVlc3Qud3NfcmVzb3VyY2UpCi0KLSAg
ICBkZWYgX3NvdXJjZV9maWxlc19pbl9kaXIoc2VsZiwgcm9vdF9kaXIsIHNjYW5fZGlyKToKLSAg
ICAgICAgIiIiU291cmNlIGFsbCB0aGUgaGFuZGxlciBzb3VyY2UgZmlsZXMgaW4gdGhlIHNjYW5f
ZGlyIGRpcmVjdG9yeS4KLQotICAgICAgICBUaGUgcmVzb3VyY2UgcGF0aCBpcyBkZXRlcm1pbmVk
IHJlbGF0aXZlIHRvIHJvb3RfZGlyLgotICAgICAgICAiIiIKLQotICAgICAgICB0b19yZXNvdXJj
ZSA9IF9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRlcihyb290X2RpcikKLSAgICAgICAgZm9yIHBh
dGggaW4gX3NvdXJjZV9maWxlX3BhdGhzKHNjYW5fZGlyKToKLSAgICAgICAgICAgIHRyeToKLSAg
ICAgICAgICAgICAgICBoYW5kbGVycyA9IF9zb3VyY2Uob3BlbihwYXRoKS5yZWFkKCkpCi0gICAg
ICAgICAgICBleGNlcHQgRGlzcGF0Y2hFcnJvciwgZToKLSAgICAgICAgICAgICAgICBzZWxmLl9z
b3VyY2Vfd2FybmluZ3MuYXBwZW5kKCclczogJXMnICUgKHBhdGgsIGUpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBzZWxmLl9oYW5kbGVyc1t0b19yZXNvdXJjZShwYXRo
KV0gPSBoYW5kbGVycwotCi0KLSMgdmk6c3RzPTQgc3c9NCBldApJbmRleDogV2ViS2l0VG9vbHMv
cHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlLnB5CShyZXZp
c2lvbiA1NTI1MykKKysrIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9o
YW5kc2hha2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMjIwICswLDAgQEAKLSMgQ29weXJpZ2h0
IDIwMDksIEdvb2dsZSBJbmMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0KLSIiIldlYiBTb2NrZXQgaGFuZHNoYWtpbmcuCi0KLU5vdGU6IHJlcXVlc3QuY29u
bmVjdGlvbi53cml0ZS9yZWFkIGFyZSB1c2VkIGluIHRoaXMgbW9kdWxlLCBldmVuIHRob3VnaAot
bW9kX3B5dGhvbiBkb2N1bWVudCBzYXlzIHRoYXQgdGhleSBzaG91bGQgYmUgdXNlZCBvbmx5IGlu
IGNvbm5lY3Rpb24gaGFuZGxlcnMuCi1VbmZvcnR1bmF0ZWx5LCB3ZSBoYXZlIG5vIG90aGVyIG9w
dGlvbnMuIEZvciBleGFtcGxlLCByZXF1ZXN0LndyaXRlL3JlYWQgYXJlCi1ub3Qgc3VpdGFibGUg
YmVjYXVzZSB0aGV5IGRvbid0IGFsbG93IGRpcmVjdCByYXcgYnl0ZXMgd3JpdGluZy9yZWFkaW5n
LgotIiIiCi0KLQotaW1wb3J0IHJlCi0KLWltcG9ydCB1dGlsCi0KLQotX0RFRkFVTFRfV0VCX1NP
Q0tFVF9QT1JUID0gODAKLV9ERUZBVUxUX1dFQl9TT0NLRVRfU0VDVVJFX1BPUlQgPSA0NDMKLV9X
RUJfU09DS0VUX1NDSEVNRSA9ICd3cycKLV9XRUJfU09DS0VUX1NFQ1VSRV9TQ0hFTUUgPSAnd3Nz
JwotCi1fTUFOREFUT1JZX0hFQURFUlMgPSBbCi0gICAgIyBrZXksIGV4cGVjdGVkIHZhbHVlIG9y
IE5vbmUKLSAgICBbJ1VwZ3JhZGUnLCAnV2ViU29ja2V0J10sCi0gICAgWydDb25uZWN0aW9uJywg
J1VwZ3JhZGUnXSwKLSAgICBbJ0hvc3QnLCBOb25lXSwKLSAgICBbJ09yaWdpbicsIE5vbmVdLAot
XQotCi1fRklSU1RfRklWRV9MSU5FUyA9IG1hcChyZS5jb21waWxlLCBbCi0gICAgcideR0VUIC9b
XFNdKiBIVFRQLzEuMVxyXG4kJywKLSAgICByJ15VcGdyYWRlOiBXZWJTb2NrZXRcclxuJCcsCi0g
ICAgcideQ29ubmVjdGlvbjogVXBncmFkZVxyXG4kJywKLSAgICByJ15Ib3N0OiBbXFNdK1xyXG4k
JywKLSAgICByJ15PcmlnaW46IFtcU10rXHJcbiQnLAotXSkKLQotX1NJWFRIX0FORF9MQVRFUiA9
IHJlLmNvbXBpbGUoCi0gICAgcideJwotICAgIHInKFdlYlNvY2tldC1Qcm90b2NvbDogW1x4MjAt
XHg3ZV0rXHJcbik/JwotICAgIHInKENvb2tpZTogW15ccl0qXHJcbikqJwotICAgIHInKENvb2tp
ZTI6IFteXHJdKlxyXG4pPycKLSAgICByJyhDb29raWU6IFteXHJdKlxyXG4pKicKLSAgICByJ1xy
XG4nKQotCi0KLWRlZiBfZGVmYXVsdF9wb3J0KGlzX3NlY3VyZSk6Ci0gICAgaWYgaXNfc2VjdXJl
OgotICAgICAgICByZXR1cm4gX0RFRkFVTFRfV0VCX1NPQ0tFVF9TRUNVUkVfUE9SVAotICAgIGVs
c2U6Ci0gICAgICAgIHJldHVybiBfREVGQVVMVF9XRUJfU09DS0VUX1BPUlQKLQotCi1jbGFzcyBI
YW5kc2hha2VFcnJvcihFeGNlcHRpb24pOgotICAgICIiIkV4Y2VwdGlvbiBpbiBXZWIgU29ja2V0
IEhhbmRzaGFrZS4iIiIKLQotICAgIHBhc3MKLQotCi1kZWYgX3ZhbGlkYXRlX3Byb3RvY29sKHBy
b3RvY29sKToKLSAgICAiIiJWYWxpZGF0ZSBXZWJTb2NrZXQtUHJvdG9jb2wgc3RyaW5nLiIiIgot
Ci0gICAgaWYgbm90IHByb3RvY29sOgotICAgICAgICByYWlzZSBIYW5kc2hha2VFcnJvcignSW52
YWxpZCBXZWJTb2NrZXQtUHJvdG9jb2w6IGVtcHR5JykKLSAgICBmb3IgYyBpbiBwcm90b2NvbDoK
LSAgICAgICAgaWYgbm90IDB4MjAgPD0gb3JkKGMpIDw9IDB4N2U6Ci0gICAgICAgICAgICByYWlz
ZSBIYW5kc2hha2VFcnJvcignSWxsZWdhbCBjaGFyYWN0ZXIgaW4gcHJvdG9jb2w6ICVyJyAlIGMp
Ci0KLQotY2xhc3MgSGFuZHNoYWtlcihvYmplY3QpOgotICAgICIiIlRoaXMgY2xhc3MgcGVyZm9y
bXMgV2ViIFNvY2tldCBoYW5kc2hha2UuIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcmVx
dWVzdCwgZGlzcGF0Y2hlciwgc3RyaWN0PUZhbHNlKToKLSAgICAgICAgIiIiQ29uc3RydWN0IGFu
IGluc3RhbmNlLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICByZXF1ZXN0OiBtb2RfcHl0
aG9uIHJlcXVlc3QuCi0gICAgICAgICAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyIChkaXNwYXRj
aC5EaXNwYXRjaGVyKS4KLSAgICAgICAgICAgIHN0cmljdDogU3RyaWN0bHkgY2hlY2sgaGFuZHNo
YWtlIHJlcXVlc3QuIERlZmF1bHQ6IEZhbHNlLgotICAgICAgICAgICAgICAgIElmIFRydWUsIHJl
cXVlc3QuY29ubmVjdGlvbiBtdXN0IHByb3ZpZGUgZ2V0X21lbW9yaXplZF9saW5lcwotICAgICAg
ICAgICAgICAgIG1ldGhvZC4KLQotICAgICAgICBIYW5kc2hha2VyIHdpbGwgYWRkIGF0dHJpYnV0
ZXMgc3VjaCBhcyB3c19yZXNvdXJjZSBpbiBwZXJmb3JtaW5nCi0gICAgICAgIGhhbmRzaGFrZS4K
LSAgICAgICAgIiIiCi0KLSAgICAgICAgc2VsZi5fcmVxdWVzdCA9IHJlcXVlc3QKLSAgICAgICAg
c2VsZi5fZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXIKLSAgICAgICAgc2VsZi5fc3RyaWN0ID0gc3Ry
aWN0Ci0KLSAgICBkZWYgZG9faGFuZHNoYWtlKHNlbGYpOgotICAgICAgICAiIiJQZXJmb3JtIFdl
YiBTb2NrZXQgSGFuZHNoYWtlLiIiIgotCi0gICAgICAgIHNlbGYuX2NoZWNrX2hlYWRlcl9saW5l
cygpCi0gICAgICAgIHNlbGYuX3NldF9yZXNvdXJjZSgpCi0gICAgICAgIHNlbGYuX3NldF9vcmln
aW4oKQotICAgICAgICBzZWxmLl9zZXRfbG9jYXRpb24oKQotICAgICAgICBzZWxmLl9zZXRfcHJv
dG9jb2woKQotICAgICAgICBzZWxmLl9kaXNwYXRjaGVyLmRvX2V4dHJhX2hhbmRzaGFrZShzZWxm
Ll9yZXF1ZXN0KQotICAgICAgICBzZWxmLl9zZW5kX2hhbmRzaGFrZSgpCi0KLSAgICBkZWYgX3Nl
dF9yZXNvdXJjZShzZWxmKToKLSAgICAgICAgc2VsZi5fcmVxdWVzdC53c19yZXNvdXJjZSA9IHNl
bGYuX3JlcXVlc3QudXJpCi0KLSAgICBkZWYgX3NldF9vcmlnaW4oc2VsZik6Ci0gICAgICAgIHNl
bGYuX3JlcXVlc3Qud3Nfb3JpZ2luID0gc2VsZi5fcmVxdWVzdC5oZWFkZXJzX2luWydPcmlnaW4n
XQotCi0gICAgZGVmIF9zZXRfbG9jYXRpb24oc2VsZik6Ci0gICAgICAgIGxvY2F0aW9uX3BhcnRz
ID0gW10KLSAgICAgICAgaWYgc2VsZi5fcmVxdWVzdC5pc19odHRwcygpOgotICAgICAgICAgICAg
bG9jYXRpb25fcGFydHMuYXBwZW5kKF9XRUJfU09DS0VUX1NFQ1VSRV9TQ0hFTUUpCi0gICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICBsb2NhdGlvbl9wYXJ0cy5hcHBlbmQoX1dFQl9TT0NLRVRfU0NI
RU1FKQotICAgICAgICBsb2NhdGlvbl9wYXJ0cy5hcHBlbmQoJzovLycpCi0gICAgICAgIGhvc3Qs
IHBvcnQgPSBzZWxmLl9wYXJzZV9ob3N0X2hlYWRlcigpCi0gICAgICAgIGNvbm5lY3Rpb25fcG9y
dCA9IHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi5sb2NhbF9hZGRyWzFdCi0gICAgICAgIGlmIHBv
cnQgIT0gY29ubmVjdGlvbl9wb3J0OgotICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXJyb3Io
J0hlYWRlci9jb25uZWN0aW9uIHBvcnQgbWlzbWF0Y2g6ICVkLyVkJyAlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAocG9ydCwgY29ubmVjdGlvbl9wb3J0KSkKLSAgICAgICAgbG9j
YXRpb25fcGFydHMuYXBwZW5kKGhvc3QpCi0gICAgICAgIGlmIChwb3J0ICE9IF9kZWZhdWx0X3Bv
cnQoc2VsZi5fcmVxdWVzdC5pc19odHRwcygpKSk6Ci0gICAgICAgICAgICBsb2NhdGlvbl9wYXJ0
cy5hcHBlbmQoJzonKQotICAgICAgICAgICAgbG9jYXRpb25fcGFydHMuYXBwZW5kKHN0cihwb3J0
KSkKLSAgICAgICAgbG9jYXRpb25fcGFydHMuYXBwZW5kKHNlbGYuX3JlcXVlc3QudXJpKQotICAg
ICAgICBzZWxmLl9yZXF1ZXN0LndzX2xvY2F0aW9uID0gJycuam9pbihsb2NhdGlvbl9wYXJ0cykK
LQotICAgIGRlZiBfcGFyc2VfaG9zdF9oZWFkZXIoc2VsZik6Ci0gICAgICAgIGZpZWxkcyA9IHNl
bGYuX3JlcXVlc3QuaGVhZGVyc19pblsnSG9zdCddLnNwbGl0KCc6JywgMSkKLSAgICAgICAgaWYg
bGVuKGZpZWxkcykgPT0gMToKLSAgICAgICAgICAgIHJldHVybiBmaWVsZHNbMF0sIF9kZWZhdWx0
X3BvcnQoc2VsZi5fcmVxdWVzdC5pc19odHRwcygpKQotICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICByZXR1cm4gZmllbGRzWzBdLCBpbnQoZmllbGRzWzFdKQotICAgICAgICBleGNlcHQgVmFsdWVF
cnJvciwgZToKLSAgICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUVycm9yKCdJbnZhbGlkIHBvcnQg
bnVtYmVyIGZvcm1hdDogJXInICUgZSkKLQotICAgIGRlZiBfc2V0X3Byb3RvY29sKHNlbGYpOgot
ICAgICAgICBwcm90b2NvbCA9IHNlbGYuX3JlcXVlc3QuaGVhZGVyc19pbi5nZXQoJ1dlYlNvY2tl
dC1Qcm90b2NvbCcpCi0gICAgICAgIGlmIHByb3RvY29sIGlzIG5vdCBOb25lOgotICAgICAgICAg
ICAgX3ZhbGlkYXRlX3Byb3RvY29sKHByb3RvY29sKQotICAgICAgICBzZWxmLl9yZXF1ZXN0Lndz
X3Byb3RvY29sID0gcHJvdG9jb2wKLQotICAgIGRlZiBfc2VuZF9oYW5kc2hha2Uoc2VsZik6Ci0g
ICAgICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgKLSAgICAgICAgICAgICAgICAn
SFRUUC8xLjEgMTAxIFdlYiBTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicpCi0gICAgICAg
IHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnVXBncmFkZTogV2ViU29ja2V0XHJcbicp
Ci0gICAgICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnQ29ubmVjdGlvbjogVXBn
cmFkZVxyXG4nKQotICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ1dlYlNv
Y2tldC1PcmlnaW46ICcpCi0gICAgICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZShz
ZWxmLl9yZXF1ZXN0LndzX29yaWdpbikKLSAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9u
LndyaXRlKCdcclxuJykKLSAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdX
ZWJTb2NrZXQtTG9jYXRpb246ICcpCi0gICAgICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53
cml0ZShzZWxmLl9yZXF1ZXN0LndzX2xvY2F0aW9uKQotICAgICAgICBzZWxmLl9yZXF1ZXN0LmNv
bm5lY3Rpb24ud3JpdGUoJ1xyXG4nKQotICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0LndzX3Byb3Rv
Y29sOgotICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdXZWJTb2Nr
ZXQtUHJvdG9jb2w6ICcpCi0gICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3Jp
dGUoc2VsZi5fcmVxdWVzdC53c19wcm90b2NvbCkKLSAgICAgICAgICAgIHNlbGYuX3JlcXVlc3Qu
Y29ubmVjdGlvbi53cml0ZSgnXHJcbicpCi0gICAgICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlv
bi53cml0ZSgnXHJcbicpCi0KLSAgICBkZWYgX2NoZWNrX2hlYWRlcl9saW5lcyhzZWxmKToKLSAg
ICAgICAgZm9yIGtleSwgZXhwZWN0ZWRfdmFsdWUgaW4gX01BTkRBVE9SWV9IRUFERVJTOgotICAg
ICAgICAgICAgYWN0dWFsX3ZhbHVlID0gc2VsZi5fcmVxdWVzdC5oZWFkZXJzX2luLmdldChrZXkp
Ci0gICAgICAgICAgICBpZiBub3QgYWN0dWFsX3ZhbHVlOgotICAgICAgICAgICAgICAgIHJhaXNl
IEhhbmRzaGFrZUVycm9yKCdIZWFkZXIgJXMgaXMgbm90IGRlZmluZWQnICUga2V5KQotICAgICAg
ICAgICAgaWYgZXhwZWN0ZWRfdmFsdWU6Ci0gICAgICAgICAgICAgICAgaWYgYWN0dWFsX3ZhbHVl
ICE9IGV4cGVjdGVkX3ZhbHVlOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VF
cnJvcignSWxsZWdhbCB2YWx1ZSBmb3IgaGVhZGVyICVzOiAlcycgJQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5LCBhY3R1YWxfdmFsdWUpKQotICAgICAgICBp
ZiBzZWxmLl9zdHJpY3Q6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbGluZXMg
PSBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24uZ2V0X21lbW9yaXplZF9saW5lcygpCi0gICAgICAg
ICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgdXRpbC5wcmVw
ZW5kX21lc3NhZ2VfdG9fZXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAnU3RyaWN0IGhh
bmRzaGFrZSBpcyBzcGVjaWZpZWQgYnV0IHRoZSBjb25uZWN0aW9uICcKLSAgICAgICAgICAgICAg
ICAgICAgJ2RvZXNuXCd0IHByb3ZpZGUgZ2V0X21lbW9yaXplZF9saW5lcygpJywgZSkKLSAgICAg
ICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgc2VsZi5fY2hlY2tfZmlyc3RfbGluZXMobGlu
ZXMpCi0KLSAgICBkZWYgX2NoZWNrX2ZpcnN0X2xpbmVzKHNlbGYsIGxpbmVzKToKLSAgICAgICAg
aWYgbGVuKGxpbmVzKSA8IGxlbihfRklSU1RfRklWRV9MSU5FUyk6Ci0gICAgICAgICAgICByYWlz
ZSBIYW5kc2hha2VFcnJvcignVG9vIGZldyBoZWFkZXIgbGluZXM6ICVkJyAlIGxlbihsaW5lcykp
Ci0gICAgICAgIGZvciBsaW5lLCByZWdleHAgaW4gemlwKGxpbmVzLCBfRklSU1RfRklWRV9MSU5F
Uyk6Ci0gICAgICAgICAgICBpZiBub3QgcmVnZXhwLnNlYXJjaChsaW5lKToKLSAgICAgICAgICAg
ICAgICByYWlzZSBIYW5kc2hha2VFcnJvcignVW5leHBlY3RlZCBoZWFkZXI6ICVyIGRvZXNuXCd0
IG1hdGNoICVyJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGxpbmUs
IHJlZ2V4cC5wYXR0ZXJuKSkKLSAgICAgICAgc2l4dGhfYW5kX2xhdGVyID0gJycuam9pbihsaW5l
c1s1Ol0pCi0gICAgICAgIGlmIG5vdCBfU0lYVEhfQU5EX0xBVEVSLnNlYXJjaChzaXh0aF9hbmRf
bGF0ZXIpOgotICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXJyb3IoJ1VuZXhwZWN0ZWQgaGVh
ZGVyOiAlciBkb2VzblwndCBtYXRjaCAlcicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICUgKHNpeHRoX2FuZF9sYXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9TSVhUSF9BTkRfTEFURVIucGF0dGVybikpCi0KLQotIyB2aTpzdHM9NCBzdz00IGV0Cklu
ZGV4OiBXZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGVhZGVycGFyc2Vy
aGFuZGxlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3
ZWJzb2NrZXQvaGVhZGVycGFyc2VyaGFuZGxlci5weQkocmV2aXNpb24gNTUyNTMpCisrKyBXZWJL
aXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGVhZGVycGFyc2VyaGFuZGxlci5w
eQkod29ya2luZyBjb3B5KQpAQCAtMSw5OSArMCwwIEBACi0jIENvcHlyaWdodCAyMDA5LCBHb29n
bGUgSW5jLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0j
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi0i
IiJQeXRob25IZWFkZXJQYXJzZXJIYW5kbGVyIGZvciBtb2RfcHl3ZWJzb2NrZXQuCi0KLUFwYWNo
ZSBIVFRQIFNlcnZlciBhbmQgbW9kX3B5dGhvbiBtdXN0IGJlIGNvbmZpZ3VyZWQgc3VjaCB0aGF0
IHRoaXMKLWZ1bmN0aW9uIGlzIGNhbGxlZCB0byBoYW5kbGUgV2ViIFNvY2tldCByZXF1ZXN0Lgot
IiIiCi0KLQotZnJvbSBtb2RfcHl0aG9uIGltcG9ydCBhcGFjaGUKLQotaW1wb3J0IGRpc3BhdGNo
Ci1pbXBvcnQgaGFuZHNoYWtlCi1pbXBvcnQgdXRpbAotCi0KLSMgUHl0aG9uT3B0aW9uIHRvIHNw
ZWNpZnkgdGhlIGhhbmRsZXIgcm9vdCBkaXJlY3RvcnkuCi1fUFlPUFRfSEFORExFUl9ST09UID0g
J21vZF9weXdlYnNvY2tldC5oYW5kbGVyX3Jvb3QnCi0KLSMgUHl0aG9uT3B0aW9uIHRvIHNwZWNp
ZnkgdGhlIGhhbmRsZXIgc2NhbiBkaXJlY3RvcnkuCi0jIFRoaXMgbXVzdCBiZSBhIGRpcmVjdG9y
eSB1bmRlciB0aGUgcm9vdCBkaXJlY3RvcnkuCi0jIFRoZSBkZWZhdWx0IGlzIHRoZSByb290IGRp
cmVjdG9yeS4KLV9QWU9QVF9IQU5ETEVSX1NDQU4gPSAnbW9kX3B5d2Vic29ja2V0LmhhbmRsZXJf
c2NhbicKLQotCi1kZWYgX2NyZWF0ZV9kaXNwYXRjaGVyKCk6Ci0gICAgX0hBTkRMRVJfUk9PVCA9
IGFwYWNoZS5tYWluX3NlcnZlci5nZXRfb3B0aW9ucygpLmdldCgKLSAgICAgICAgICAgIF9QWU9Q
VF9IQU5ETEVSX1JPT1QsIE5vbmUpCi0gICAgaWYgbm90IF9IQU5ETEVSX1JPT1Q6Ci0gICAgICAg
IHJhaXNlIEV4Y2VwdGlvbignUHl0aG9uT3B0aW9uICVzIGlzIG5vdCBkZWZpbmVkJyAlIF9QWU9Q
VF9IQU5ETEVSX1JPT1QsCi0gICAgICAgICAgICAgICAgICAgICAgICBhcGFjaGUuQVBMT0dfRVJS
KQotICAgIF9IQU5ETEVSX1NDQU4gPSBhcGFjaGUubWFpbl9zZXJ2ZXIuZ2V0X29wdGlvbnMoKS5n
ZXQoCi0gICAgICAgICAgICBfUFlPUFRfSEFORExFUl9TQ0FOLCBfSEFORExFUl9ST09UKQotICAg
IGRpc3BhdGNoZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9IQU5ETEVSX1JPT1QsIF9IQU5ETEVS
X1NDQU4pCi0gICAgZm9yIHdhcm5pbmcgaW4gZGlzcGF0Y2hlci5zb3VyY2Vfd2FybmluZ3MoKToK
LSAgICAgICAgYXBhY2hlLmxvZ19lcnJvcignbW9kX3B5d2Vic29ja2V0OiAlcycgJSB3YXJuaW5n
LCBhcGFjaGUuQVBMT0dfV0FSTklORykKLSAgICByZXR1cm4gZGlzcGF0Y2hlcgotCi0KLSMgSW5p
dGlhbGl6ZQotX2Rpc3BhdGNoZXIgPSBfY3JlYXRlX2Rpc3BhdGNoZXIoKQotCi0KLWRlZiBoZWFk
ZXJwYXJzZXJoYW5kbGVyKHJlcXVlc3QpOgotICAgICIiIkhhbmRsZSByZXF1ZXN0LgotCi0gICAg
QXJnczoKLSAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgotCi0gICAgVGhpcyBm
dW5jdGlvbiBpcyBuYW1lZCBoZWFkZXJwYXJzZXJoYW5kbGVyIGJlY2F1c2UgaXQgaXMgdGhlIGRl
ZmF1bHQgbmFtZQotICAgIGZvciBhIFB5dGhvbkhlYWRlclBhcnNlckhhbmRsZXIuCi0gICAgIiIi
Ci0KLSAgICB0cnk6Ci0gICAgICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihy
ZXF1ZXN0LCBfZGlzcGF0Y2hlcikKLSAgICAgICAgaGFuZHNoYWtlci5kb19oYW5kc2hha2UoKQot
ICAgICAgICByZXF1ZXN0LmxvZ19lcnJvcignbW9kX3B5d2Vic29ja2V0OiByZXNvdXJjZTogJXIn
ICUgcmVxdWVzdC53c19yZXNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYXBhY2hl
LkFQTE9HX0RFQlVHKQotICAgICAgICBfZGlzcGF0Y2hlci50cmFuc2Zlcl9kYXRhKHJlcXVlc3Qp
Ci0gICAgZXhjZXB0IGhhbmRzaGFrZS5IYW5kc2hha2VFcnJvciwgZToKLSAgICAgICAgIyBIYW5k
c2hha2UgZm9yIHdzL3dzcyBmYWlsZWQuCi0gICAgICAgICMgQnV0IHRoZSByZXF1ZXN0IGNhbiBi
ZSB2YWxpZCBodHRwL2h0dHBzIHJlcXVlc3QuCi0gICAgICAgIHJlcXVlc3QubG9nX2Vycm9yKCdt
b2RfcHl3ZWJzb2NrZXQ6ICVzJyAlIGUsIGFwYWNoZS5BUExPR19JTkZPKQotICAgICAgICByZXR1
cm4gYXBhY2hlLkRFQ0xJTkVECi0gICAgZXhjZXB0IGRpc3BhdGNoLkRpc3BhdGNoRXJyb3IsIGU6
Ci0gICAgICAgIHJlcXVlc3QubG9nX2Vycm9yKCdtb2RfcHl3ZWJzb2NrZXQ6ICVzJyAlIGUsIGFw
YWNoZS5BUExPR19XQVJOSU5HKQotICAgICAgICByZXR1cm4gYXBhY2hlLkRFQ0xJTkVECi0gICAg
cmV0dXJuIGFwYWNoZS5ET05FICAjIFJldHVybiBET05FIHN1Y2ggdGhhdCBubyBvdGhlciBoYW5k
bGVycyBhcmUgaW52b2tlZC4KLQotCi0jIHZpOnN0cz00IHN3PTQgZXQKSW5kZXg6IFdlYktpdFRv
b2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9tZW1vcml6aW5nZmlsZS5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvbWVtb3Jpemlu
Z2ZpbGUucHkJKHJldmlzaW9uIDU1MjUzKQorKysgV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9k
X3B5d2Vic29ja2V0L21lbW9yaXppbmdmaWxlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDgxICsw
LDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xl
IEluYy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
IwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotIiIi
TWVtb3JpemluZyBmaWxlLgotCi1BIG1lbW9yaXppbmcgZmlsZSB3cmFwcyBhIGZpbGUgYW5kIG1l
bW9yaXplcyBsaW5lcyByZWFkIGJ5IHJlYWRsaW5lLgotIiIiCi0KLQotaW1wb3J0IHN5cwotCi0K
LWNsYXNzIE1lbW9yaXppbmdGaWxlKG9iamVjdCk6Ci0gICAgIiIiTWVtb3JpemluZ0ZpbGUgd3Jh
cHMgYSBmaWxlIGFuZCBtZW1vcml6ZXMgbGluZXMgcmVhZCBieSByZWFkbGluZS4KLQotICAgIE5v
dGUgdGhhdCBkYXRhIHJlYWQgYnkgb3RoZXIgbWV0aG9kcyBhcmUgbm90IG1lbW9yaXplZC4gVGhp
cyBiZWhhdmlvcgotICAgIGlzIGdvb2QgZW5vdWdoIGZvciBtZW1vcml6aW5nIGxpbmVzIFNpbXBs
ZUhUVFBTZXJ2ZXIgcmVhZHMgYmVmb3JlCi0gICAgdGhlIGNvbnRyb2wgcmVhY2hlcyBXZWJTb2Nr
ZXRSZXF1ZXN0SGFuZGxlci4KLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV8s
IG1heF9tZW1vcml6ZWRfbGluZXM9c3lzLm1heGludCk6Ci0gICAgICAgICIiIkNvbnN0cnVjdCBh
biBpbnN0YW5jZS4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgICAgZmlsZV86IHRoZSBmaWxl
IG9iamVjdCB0byB3cmFwLgotICAgICAgICAgICAgbWF4X21lbW9yaXplZF9saW5lczogdGhlIG1h
eGltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIG1lbW9yaXplLgotICAgICAgICAgICAgICAgIE9ubHkg
dGhlIGZpcnN0IG1heF9tZW1vcml6ZWRfbGluZXMgYXJlIG1lbW9yaXplZC4KLSAgICAgICAgICAg
ICAgICBEZWZhdWx0OiBzeXMubWF4aW50LiAKLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX2Zp
bGUgPSBmaWxlXwotICAgICAgICBzZWxmLl9tZW1vcml6ZWRfbGluZXMgPSBbXQotICAgICAgICBz
ZWxmLl9tYXhfbWVtb3JpemVkX2xpbmVzID0gbWF4X21lbW9yaXplZF9saW5lcwotCi0gICAgZGVm
IF9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSk6Ci0gICAgICAgIGlmIG5hbWUgaW4gKCdfZmls
ZScsICdfbWVtb3JpemVkX2xpbmVzJywgJ19tYXhfbWVtb3JpemVkX2xpbmVzJywKLSAgICAgICAg
ICAgICAgICAgICAgJ3JlYWRsaW5lJywgJ2dldF9tZW1vcml6ZWRfbGluZXMnKToKLSAgICAgICAg
ICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKQotICAgICAgICBy
ZXR1cm4gc2VsZi5fZmlsZS5fX2dldGF0dHJpYnV0ZV9fKG5hbWUpCi0KLSAgICBkZWYgcmVhZGxp
bmUoc2VsZik6Ci0gICAgICAgICIiIk92ZXJyaWRlIGZpbGUucmVhZGxpbmUgYW5kIG1lbW9yaXpl
IHRoZSBsaW5lIHJlYWQuIiIiCi0KLSAgICAgICAgbGluZSA9IHNlbGYuX2ZpbGUucmVhZGxpbmUo
KQotICAgICAgICBpZiBsaW5lIGFuZCBsZW4oc2VsZi5fbWVtb3JpemVkX2xpbmVzKSA8IHNlbGYu
X21heF9tZW1vcml6ZWRfbGluZXM6Ci0gICAgICAgICAgICBzZWxmLl9tZW1vcml6ZWRfbGluZXMu
YXBwZW5kKGxpbmUpCi0gICAgICAgIHJldHVybiBsaW5lCi0KLSAgICBkZWYgZ2V0X21lbW9yaXpl
ZF9saW5lcyhzZWxmKToKLSAgICAgICAgIiIiR2V0IGxpbmVzIG1lbW9yaXplZCBzbyBmYXIuIiIi
Ci0gICAgICAgIHJldHVybiBzZWxmLl9tZW1vcml6ZWRfbGluZXMKLQotCi0jIHZpOnN0cz00IHN3
PTQgZXQKSW5kZXg6IFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9tc2d1
dGlsLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNv
Y2tldC9tc2d1dGlsLnB5CShyZXZpc2lvbiA1NTI1MykKKysrIFdlYktpdFRvb2xzL3B5d2Vic29j
a2V0L21vZF9weXdlYnNvY2tldC9tc2d1dGlsLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDI1MCAr
MCwwIEBACi0jIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgotIyBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJp
YnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi0iIiJNZXNzYWdlIHJlbGF0ZWQgdXRpbGl0aWVz
LgotCi1Ob3RlOiByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUvcmVhZCBhcmUgdXNlZCBpbiB0aGlz
IG1vZHVsZSwgZXZlbiB0aG91Z2gKLW1vZF9weXRob24gZG9jdW1lbnQgc2F5cyB0aGF0IHRoZXkg
c2hvdWxkIGJlIHVzZWQgb25seSBpbiBjb25uZWN0aW9uIGhhbmRsZXJzLgotVW5mb3J0dW5hdGVs
eSwgd2UgaGF2ZSBubyBvdGhlciBvcHRpb25zLiBGb3IgZXhhbXBsZSwgcmVxdWVzdC53cml0ZS9y
ZWFkIGFyZQotbm90IHN1aXRhYmxlIGJlY2F1c2UgdGhleSBkb24ndCBhbGxvdyBkaXJlY3QgcmF3
IGJ5dGVzIHdyaXRpbmcvcmVhZGluZy4KLSIiIgotCi0KLWltcG9ydCBRdWV1ZQotaW1wb3J0IHRo
cmVhZGluZwotaW1wb3J0IHV0aWwKLQotCi1jbGFzcyBNc2dVdGlsRXhjZXB0aW9uKEV4Y2VwdGlv
bik6Ci0gICAgcGFzcwotCi0KLWRlZiBfcmVhZChyZXF1ZXN0LCBsZW5ndGgpOgotICAgIGJ5dGVz
ID0gcmVxdWVzdC5jb25uZWN0aW9uLnJlYWQobGVuZ3RoKQotICAgIGlmIG5vdCBieXRlczoKLSAg
ICAgICAgcmFpc2UgTXNnVXRpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAnRmFpbGVkIHRv
IHJlY2VpdmUgbWVzc2FnZSBmcm9tICVyJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAocmVx
dWVzdC5jb25uZWN0aW9uLnJlbW90ZV9hZGRyLCkpCi0gICAgcmV0dXJuIGJ5dGVzCi0KLQotZGVm
IF93cml0ZShyZXF1ZXN0LCBieXRlcyk6Ci0gICAgdHJ5OgotICAgICAgICByZXF1ZXN0LmNvbm5l
Y3Rpb24ud3JpdGUoYnl0ZXMpCi0gICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKLSAgICAgICAgdXRp
bC5wcmVwZW5kX21lc3NhZ2VfdG9fZXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICdGYWlsZWQg
dG8gc2VuZCBtZXNzYWdlIHRvICVyOiAnICUKLSAgICAgICAgICAgICAgICAgICAgICAgIChyZXF1
ZXN0LmNvbm5lY3Rpb24ucmVtb3RlX2FkZHIsKSwKLSAgICAgICAgICAgICAgICBlKQotICAgICAg
ICByYWlzZQotCi0KLWRlZiBzZW5kX21lc3NhZ2UocmVxdWVzdCwgbWVzc2FnZSk6Ci0gICAgIiIi
U2VuZCBtZXNzYWdlLgotCi0gICAgQXJnczoKLSAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhvbiBy
ZXF1ZXN0LgotICAgICAgICBtZXNzYWdlOiB1bmljb2RlIHN0cmluZyB0byBzZW5kLgotICAgICIi
IgotCi0gICAgX3dyaXRlKHJlcXVlc3QsICdceDAwJyArIG1lc3NhZ2UuZW5jb2RlKCd1dGYtOCcp
ICsgJ1x4ZmYnKQotCi0KLWRlZiByZWNlaXZlX21lc3NhZ2UocmVxdWVzdCk6Ci0gICAgIiIiUmVj
ZWl2ZSBhIFdlYiBTb2NrZXQgZnJhbWUgYW5kIHJldHVybiBpdHMgcGF5bG9hZCBhcyB1bmljb2Rl
IHN0cmluZy4KLQotICAgIEFyZ3M6Ci0gICAgICAgIHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVz
dC4KLSAgICAiIiIKLQotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICMgUmVhZCAxIGJ5dGUuCi0g
ICAgICAgICMgbXBfY29ubi5yZWFkIHdpbGwgYmxvY2sgaWYgbm8gYnl0ZXMgYXJlIGF2YWlsYWJs
ZS4KLSAgICAgICAgIyBUaW1lb3V0IGlzIGNvbnRyb2xsZWQgYnkgVGltZU91dCBkaXJlY3RpdmUg
b2YgQXBhY2hlLgotICAgICAgICBmcmFtZV90eXBlX3N0ciA9IF9yZWFkKHJlcXVlc3QsIDEpCi0g
ICAgICAgIGZyYW1lX3R5cGUgPSBvcmQoZnJhbWVfdHlwZV9zdHJbMF0pCi0gICAgICAgIGlmIChm
cmFtZV90eXBlICYgMHg4MCkgPT0gMHg4MDoKLSAgICAgICAgICAgICMgVGhlIHBheWxvYWQgbGVu
Z3RoIGlzIHNwZWNpZmllZCBpbiB0aGUgZnJhbWUuCi0gICAgICAgICAgICAjIFJlYWQgYW5kIGRp
c2NhcmQuCi0gICAgICAgICAgICBsZW5ndGggPSBfcGF5bG9hZF9sZW5ndGgocmVxdWVzdCkKLSAg
ICAgICAgICAgIF9yZWNlaXZlX2J5dGVzKHJlcXVlc3QsIGxlbmd0aCkKLSAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICMgVGhlIHBheWxvYWQgaXMgZGVsaW1pdGVkIHdpdGggXHhmZi4KLSAgICAg
ICAgICAgIGJ5dGVzID0gX3JlYWRfdW50aWwocmVxdWVzdCwgJ1x4ZmYnKQotICAgICAgICAgICAg
IyBUaGUgV2ViIFNvY2tldCBwcm90b2NvbCBzZWN0aW9uIDQuNCBzcGVjaWZpZXMgdGhhdCBpbnZh
bGlkCi0gICAgICAgICAgICAjIGNoYXJhY3RlcnMgbXVzdCBiZSByZXBsYWNlZCB3aXRoIFUrZmZm
ZCBSRVBMQUNFTUVOVCBDSEFSQUNURVIuCi0gICAgICAgICAgICBtZXNzYWdlID0gYnl0ZXMuZGVj
b2RlKCd1dGYtOCcsICdyZXBsYWNlJykKLSAgICAgICAgICAgIGlmIGZyYW1lX3R5cGUgPT0gMHgw
MDoKLSAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZQotICAgICAgICAgICAgIyBEaXNjYXJk
IGRhdGEgb2Ygb3RoZXIgdHlwZXMuCi0KLQotZGVmIF9wYXlsb2FkX2xlbmd0aChyZXF1ZXN0KToK
LSAgICBsZW5ndGggPSAwCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgYl9zdHIgPSBfcmVhZChy
ZXF1ZXN0LCAxKQotICAgICAgICBiID0gb3JkKGJfc3RyWzBdKQotICAgICAgICBsZW5ndGggPSBs
ZW5ndGggKiAxMjggKyAoYiAmIDB4N2YpCi0gICAgICAgIGlmIChiICYgMHg4MCkgPT0gMDoKLSAg
ICAgICAgICAgIGJyZWFrCi0gICAgcmV0dXJuIGxlbmd0aAotCi0KLWRlZiBfcmVjZWl2ZV9ieXRl
cyhyZXF1ZXN0LCBsZW5ndGgpOgotICAgIGJ5dGVzID0gW10KLSAgICB3aGlsZSBsZW5ndGggPiAw
OgotICAgICAgICBuZXdfYnl0ZXMgPSBfcmVhZChyZXF1ZXN0LCBsZW5ndGgpCi0gICAgICAgIGJ5
dGVzLmFwcGVuZChuZXdfYnl0ZXMpCi0gICAgICAgIGxlbmd0aCAtPSBsZW4obmV3X2J5dGVzKQot
ICAgIHJldHVybiAnJy5qb2luKGJ5dGVzKQotCi0KLWRlZiBfcmVhZF91bnRpbChyZXF1ZXN0LCBk
ZWxpbV9jaGFyKToKLSAgICBieXRlcyA9IFtdCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgY2gg
PSBfcmVhZChyZXF1ZXN0LCAxKQotICAgICAgICBpZiBjaCA9PSBkZWxpbV9jaGFyOgotICAgICAg
ICAgICAgYnJlYWsKLSAgICAgICAgYnl0ZXMuYXBwZW5kKGNoKQotICAgIHJldHVybiAnJy5qb2lu
KGJ5dGVzKQotCi0KLWNsYXNzIE1lc3NhZ2VSZWNlaXZlcih0aHJlYWRpbmcuVGhyZWFkKToKLSAg
ICAiIiJUaGlzIGNsYXNzIHJlY2VpdmVzIG1lc3NhZ2VzIGZyb20gdGhlIGNsaWVudC4KLQotICAg
IFRoaXMgY2xhc3MgcHJvdmlkZXMgdGhyZWUgd2F5cyB0byByZWNlaXZlIG1lc3NhZ2VzOiBibG9j
a2luZywgbm9uLWJsb2NraW5nLAotICAgIGFuZCB2aWEgY2FsbGJhY2suIENhbGxiYWNrIGhhcyB0
aGUgaGlnaGVzdCBwcmVjZWRlbmNlLgotCi0gICAgTm90ZTogVGhpcyBjbGFzcyBzaG91bGQgbm90
IGJlIHVzZWQgd2l0aCB0aGUgc3RhbmRhbG9uZSBzZXJ2ZXIgZm9yIHdzcwotICAgIGJlY2F1c2Ug
cHlPcGVuU1NMIHVzZWQgYnkgdGhlIHNlcnZlciByYWlzZXMgYSBmYXRhbCBlcnJvciBpZiB0aGUg
c29ja2V0Ci0gICAgaXMgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgotICAgICIiIgot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0LCBvbm1lc3NhZ2U9Tm9uZSk6Ci0gICAgICAg
ICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgICAg
cmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgotICAgICAgICAgICAgb25tZXNzYWdlOiBhIGZ1
bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZC4KLSAgICAgICAg
ICAgICAgICAgICAgICAgTWF5IGJlIE5vbmUuIElmIG5vdCBOb25lLCB0aGUgZnVuY3Rpb24gaXMg
Y2FsbGVkIG9uCi0gICAgICAgICAgICAgICAgICAgICAgIGFub3RoZXIgdGhyZWFkLiBJbiB0aGF0
IGNhc2UsIE1lc3NhZ2VSZWNlaXZlci5yZWNlaXZlCi0gICAgICAgICAgICAgICAgICAgICAgIGFu
ZCBNZXNzYWdlUmVjZWl2ZXIucmVjZWl2ZV9ub3dhaXQgYXJlIHVzZWxlc3MgYmVjYXVzZQotICAg
ICAgICAgICAgICAgICAgICAgICB0aGV5IHdpbGwgbmV2ZXIgcmV0dXJuIGFueSBtZXNzYWdlcy4K
LSAgICAgICAgIiIiCi0gICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKLSAg
ICAgICAgc2VsZi5fcmVxdWVzdCA9IHJlcXVlc3QKLSAgICAgICAgc2VsZi5fcXVldWUgPSBRdWV1
ZS5RdWV1ZSgpCi0gICAgICAgIHNlbGYuX29ubWVzc2FnZSA9IG9ubWVzc2FnZQotICAgICAgICBz
ZWxmLl9zdG9wX3JlcXVlc3RlZCA9IEZhbHNlCi0gICAgICAgIHNlbGYuc2V0RGFlbW9uKFRydWUp
Ci0gICAgICAgIHNlbGYuc3RhcnQoKQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgd2hp
bGUgbm90IHNlbGYuX3N0b3BfcmVxdWVzdGVkOgotICAgICAgICAgICAgbWVzc2FnZSA9IHJlY2Vp
dmVfbWVzc2FnZShzZWxmLl9yZXF1ZXN0KQotICAgICAgICAgICAgaWYgc2VsZi5fb25tZXNzYWdl
OgotICAgICAgICAgICAgICAgIHNlbGYuX29ubWVzc2FnZShtZXNzYWdlKQotICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9xdWV1ZS5wdXQobWVzc2FnZSkKLQotICAgIGRl
ZiByZWNlaXZlKHNlbGYpOgotICAgICAgICAiIiIgUmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSB0aGUg
Y2hhbm5lbCwgYmxvY2tpbmcuCi0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIG1lc3Nh
Z2UgYXMgYSB1bmljb2RlIHN0cmluZy4KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxm
Ll9xdWV1ZS5nZXQoKQotCi0gICAgZGVmIHJlY2VpdmVfbm93YWl0KHNlbGYpOgotICAgICAgICAi
IiIgUmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSB0aGUgY2hhbm5lbCwgbm9uLWJsb2NraW5nLgotCi0g
ICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgICBtZXNzYWdlIGFzIGEgdW5pY29kZSBzdHJpbmcg
aWYgYXZhaWxhYmxlLiBOb25lIG90aGVyd2lzZS4KLSAgICAgICAgIiIiCi0gICAgICAgIHRyeToK
LSAgICAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLl9xdWV1ZS5nZXRfbm93YWl0KCkKLSAgICAgICAg
ZXhjZXB0IFF1ZXVlLkVtcHR5OgotICAgICAgICAgICAgbWVzc2FnZSA9IE5vbmUKLSAgICAgICAg
cmV0dXJuIG1lc3NhZ2UKLQotICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICAiIiJSZXF1ZXN0
IHRvIHN0b3AgdGhpcyBpbnN0YW5jZS4KLQotICAgICAgICBUaGUgaW5zdGFuY2Ugd2lsbCBiZSBz
dG9wcGVkIGFmdGVyIHJlY2VpdmluZyB0aGUgbmV4dCBtZXNzYWdlLgotICAgICAgICBUaGlzIG1l
dGhvZCBtYXkgbm90IGJlIHZlcnkgdXNlZnVsLCBidXQgdGhlcmUgaXMgbm8gY2xlYW4gd2F5Ci0g
ICAgICAgIGluIFB5dGhvbiB0byBmb3JjZWZ1bGx5IHN0b3AgYSBydW5uaW5nIHRocmVhZC4KLSAg
ICAgICAgIiIiCi0gICAgICAgIHNlbGYuX3N0b3BfcmVxdWVzdGVkID0gVHJ1ZQotCi0KLWNsYXNz
IE1lc3NhZ2VTZW5kZXIodGhyZWFkaW5nLlRocmVhZCk6Ci0gICAgIiIiVGhpcyBjbGFzcyBzZW5k
cyBtZXNzYWdlcyB0byB0aGUgY2xpZW50LgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBib3Ro
IHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgd2F5cyB0byBzZW5kCi0gICAgbWVzc2FnZXMu
Ci0KLSAgICBOb3RlOiBUaGlzIGNsYXNzIHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIHRoZSBzdGFu
ZGFsb25lIHNlcnZlciBmb3Igd3NzCi0gICAgYmVjYXVzZSBweU9wZW5TU0wgdXNlZCBieSB0aGUg
c2VydmVyIHJhaXNlcyBhIGZhdGFsIGVycm9yIGlmIHRoZSBzb2NrZXQKLSAgICBpcyBhY2Nlc3Nl
ZCBmcm9tIG11bHRpcGxlIHRocmVhZHMuCi0gICAgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IHJlcXVlc3QpOgotICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCi0KLSAgICAgICAg
QXJnczoKLSAgICAgICAgICAgIHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVzdC4KLSAgICAgICAg
IiIiCi0gICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKLSAgICAgICAgc2Vs
Zi5fcmVxdWVzdCA9IHJlcXVlc3QKLSAgICAgICAgc2VsZi5fcXVldWUgPSBRdWV1ZS5RdWV1ZSgp
Ci0gICAgICAgIHNlbGYuc2V0RGFlbW9uKFRydWUpCi0gICAgICAgIHNlbGYuc3RhcnQoKQotCi0g
ICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIG1lc3Nh
Z2UsIGNvbmRpdGlvbiA9IHNlbGYuX3F1ZXVlLmdldCgpCi0gICAgICAgICAgICBjb25kaXRpb24u
YWNxdWlyZSgpCi0gICAgICAgICAgICBzZW5kX21lc3NhZ2Uoc2VsZi5fcmVxdWVzdCwgbWVzc2Fn
ZSkKLSAgICAgICAgICAgIGNvbmRpdGlvbi5ub3RpZnkoKQotICAgICAgICAgICAgY29uZGl0aW9u
LnJlbGVhc2UoKQotCi0gICAgZGVmIHNlbmQoc2VsZiwgbWVzc2FnZSk6Ci0gICAgICAgICIiIlNl
bmQgYSBtZXNzYWdlLCBibG9ja2luZy4iIiIKLQotICAgICAgICBjb25kaXRpb24gPSB0aHJlYWRp
bmcuQ29uZGl0aW9uKCkKLSAgICAgICAgY29uZGl0aW9uLmFjcXVpcmUoKQotICAgICAgICBzZWxm
Ll9xdWV1ZS5wdXQoKG1lc3NhZ2UsIGNvbmRpdGlvbikpCi0gICAgICAgIGNvbmRpdGlvbi53YWl0
KCkKLQotICAgIGRlZiBzZW5kX25vd2FpdChzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgIiIiU2Vu
ZCBhIG1lc3NhZ2UsIG5vbi1ibG9ja2luZy4iIiIKLQotICAgICAgICBzZWxmLl9xdWV1ZS5wdXQo
KG1lc3NhZ2UsIHRocmVhZGluZy5Db25kaXRpb24oKSkpCi0KLQotIyB2aTpzdHM9NCBzdz00IGV0
CkluZGV4OiBXZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvc3RhbmRhbG9u
ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2Nr
ZXQvc3RhbmRhbG9uZS5weQkocmV2aXNpb24gNTUyNTMpCisrKyBXZWJLaXRUb29scy9weXdlYnNv
Y2tldC9tb2RfcHl3ZWJzb2NrZXQvc3RhbmRhbG9uZS5weQkod29ya2luZyBjb3B5KQpAQCAtMSw0
MjEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAyMDA5LCBH
b29nbGUgSW5jLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
Ci0iIiJTdGFuZGFsb25lIFdlYiBTb2NrZXQgc2VydmVyLgotCi1Vc2UgdGhpcyBzZXJ2ZXIgdG8g
cnVuIG1vZF9weXdlYnNvY2tldCB3aXRob3V0IEFwYWNoZSBIVFRQIFNlcnZlci4KLQotVXNhZ2U6
Ci0gICAgcHl0aG9uIHN0YW5kYWxvbmUucHkgWy1wIDx3c19wb3J0Pl0gWy13IDx3ZWJzb2NrX2hh
bmRsZXJzPl0KLSAgICAgICAgICAgICAgICAgICAgICAgICBbLXMgPHNjYW5fZGlyPl0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICBbLWQgPGRvY3VtZW50X3Jvb3Q+XQotICAgICAgICAgICAgICAg
ICAgICAgICAgIFstbSA8d2Vic29ja19oYW5kbGVyc19tYXBfZmlsZT5dCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgLi4uIGZvciBvdGhlciBvcHRpb25zLCBzZWUgX21haW4gYmVsb3cgLi4uCi0K
LTx3c19wb3J0PiBpcyB0aGUgcG9ydCBudW1iZXIgdG8gdXNlIGZvciB3czovLyBjb25uZWN0aW9u
LgotCi08ZG9jdW1lbnRfcm9vdD4gaXMgdGhlIHBhdGggdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9m
IEhUTUwgZmlsZXMuCi0KLTx3ZWJzb2NrX2hhbmRsZXJzPiBpcyB0aGUgcGF0aCB0byB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgV2ViIFNvY2tldCBoYW5kbGVycy4KLVNlZSBfX2luaXRfXy5weSBmb3Ig
ZGV0YWlscyBvZiA8d2Vic29ja19oYW5kbGVycz4gYW5kIGhvdyB0byB3cml0ZSBXZWIgU29ja2V0
Ci1oYW5kbGVycy4gSWYgdGhpcyBwYXRoIGlzIHJlbGF0aXZlLCA8ZG9jdW1lbnRfcm9vdD4gaXMg
dXNlZCBhcyB0aGUgYmFzZS4KLQotPHNjYW5fZGlyPiBpcyBhIHBhdGggdW5kZXIgdGhlIHJvb3Qg
ZGlyZWN0b3J5LiBJZiBzcGVjaWZpZWQsIG9ubHkgdGhlIGhhbmRsZXJzCi11bmRlciBzY2FuX2Rp
ciBhcmUgc2Nhbm5lZC4gVGhpcyBpcyB1c2VmdWwgaW4gc2F2aW5nIHNjYW4gdGltZS4KLQotTm90
ZToKLVRoaXMgc2VydmVyIGlzIGRlcml2ZWQgZnJvbSBTb2NrZXRTZXJ2ZXIuVGhyZWFkaW5nTWl4
SW4uIEhlbmNlIGEgdGhyZWFkIGlzCi11c2VkIGZvciBlYWNoIHJlcXVlc3QuCi0iIiIKLQotaW1w
b3J0IEJhc2VIVFRQU2VydmVyCi1pbXBvcnQgQ0dJSFRUUFNlcnZlcgotaW1wb3J0IFNpbXBsZUhU
VFBTZXJ2ZXIKLWltcG9ydCBTb2NrZXRTZXJ2ZXIKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgbG9n
Z2luZy5oYW5kbGVycwotaW1wb3J0IG9wdHBhcnNlCi1pbXBvcnQgb3MKLWltcG9ydCByZQotaW1w
b3J0IHNvY2tldAotaW1wb3J0IHN5cwotCi1fSEFTX09QRU5fU1NMID0gRmFsc2UKLXRyeToKLSAg
ICBpbXBvcnQgT3BlblNTTC5TU0wKLSAgICBfSEFTX09QRU5fU1NMID0gVHJ1ZQotZXhjZXB0IElt
cG9ydEVycm9yOgotICAgIHBhc3MKLQotaW1wb3J0IGRpc3BhdGNoCi1pbXBvcnQgaGFuZHNoYWtl
Ci1pbXBvcnQgbWVtb3JpemluZ2ZpbGUKLWltcG9ydCB1dGlsCi0KLQotX0xPR19MRVZFTFMgPSB7
Ci0gICAgJ2RlYnVnJzogbG9nZ2luZy5ERUJVRywKLSAgICAnaW5mbyc6IGxvZ2dpbmcuSU5GTywK
LSAgICAnd2Fybic6IGxvZ2dpbmcuV0FSTiwKLSAgICAnZXJyb3InOiBsb2dnaW5nLkVSUk9SLAot
ICAgICdjcml0aWNhbCc6IGxvZ2dpbmcuQ1JJVElDQUx9OwotCi1fREVGQVVMVF9MT0dfTUFYX0JZ
VEVTID0gMTAyNCAqIDI1NgotX0RFRkFVTFRfTE9HX0JBQ0tVUF9DT1VOVCA9IDUKLQotX0RFRkFV
TFRfUkVRVUVTVF9RVUVVRV9TSVpFID0gMTI4Ci0KLSMgMTAyNCBpcyBwcmFjdGljYWxseSBsYXJn
ZSBlbm91Z2ggdG8gY29udGFpbiBXZWJTb2NrZXQgaGFuZHNoYWtlIGxpbmVzLgotX01BWF9NRU1P
UklaRURfTElORVMgPSAxMDI0Ci0KLWRlZiBfcHJpbnRfd2FybmluZ3NfaWZfYW55KGRpc3BhdGNo
ZXIpOgotICAgIHdhcm5pbmdzID0gZGlzcGF0Y2hlci5zb3VyY2Vfd2FybmluZ3MoKQotICAgIGlm
IHdhcm5pbmdzOgotICAgICAgICBmb3Igd2FybmluZyBpbiB3YXJuaW5nczoKLSAgICAgICAgICAg
IGxvZ2dpbmcud2FybmluZygnbW9kX3B5d2Vic29ja2V0OiAlcycgJSB3YXJuaW5nKQotCi0KLWNs
YXNzIF9TdGFuZGFsb25lQ29ubmVjdGlvbihvYmplY3QpOgotICAgICIiIk1pbWljIG1vZF9weXRo
b24gbXBfY29ubi4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0X2hhbmRsZXIp
OgotICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCi0KLSAgICAgICAgQXJnczoKLSAg
ICAgICAgICAgIHJlcXVlc3RfaGFuZGxlcjogQSBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlciBpbnN0
YW5jZS4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX3JlcXVlc3RfaGFuZGxlciA9IHJlcXVl
c3RfaGFuZGxlcgotCi0gICAgZGVmIGdldF9sb2NhbF9hZGRyKHNlbGYpOgotICAgICAgICAiIiJH
ZXR0ZXIgdG8gbWltaWMgbXBfY29ubi5sb2NhbF9hZGRyLiIiIgotICAgICAgICByZXR1cm4gKHNl
bGYuX3JlcXVlc3RfaGFuZGxlci5zZXJ2ZXIuc2VydmVyX25hbWUsCi0gICAgICAgICAgICAgICAg
c2VsZi5fcmVxdWVzdF9oYW5kbGVyLnNlcnZlci5zZXJ2ZXJfcG9ydCkKLSAgICBsb2NhbF9hZGRy
ID0gcHJvcGVydHkoZ2V0X2xvY2FsX2FkZHIpCi0KLSAgICBkZWYgZ2V0X3JlbW90ZV9hZGRyKHNl
bGYpOgotICAgICAgICAiIiJHZXR0ZXIgdG8gbWltaWMgbXBfY29ubi5yZW1vdGVfYWRkci4KLQot
ICAgICAgICBTZXR0aW5nIHRoZSBwcm9wZXJ0eSBpbiBfX2luaXRfXyB3b24ndCB3b3JrIGJlY2F1
c2UgdGhlIHJlcXVlc3QKLSAgICAgICAgaGFuZGxlciBpcyBub3QgaW5pdGlhbGl6ZWQgeWV0IHRo
ZXJlLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdF9oYW5kbGVyLmNsaWVudF9hZGRy
ZXNzCi0gICAgcmVtb3RlX2FkZHIgPSBwcm9wZXJ0eShnZXRfcmVtb3RlX2FkZHIpCi0KLSAgICBk
ZWYgd3JpdGUoc2VsZiwgZGF0YSk6Ci0gICAgICAgICIiIk1pbWljIG1wX2Nvbm4ud3JpdGUoKS4i
IiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3JlcXVlc3RfaGFuZGxlci53ZmlsZS53cml0ZShkYXRh
KQotCi0gICAgZGVmIHJlYWQoc2VsZiwgbGVuZ3RoKToKLSAgICAgICAgIiIiTWltaWMgbXBfY29u
bi5yZWFkKCkuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIucmZpbGUu
cmVhZChsZW5ndGgpCi0KLSAgICBkZWYgZ2V0X21lbW9yaXplZF9saW5lcyhzZWxmKToKLSAgICAg
ICAgIiIiR2V0IG1lbW9yaXplZCBsaW5lcy4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3JlcXVl
c3RfaGFuZGxlci5yZmlsZS5nZXRfbWVtb3JpemVkX2xpbmVzKCkKLQotCi1jbGFzcyBfU3RhbmRh
bG9uZVJlcXVlc3Qob2JqZWN0KToKLSAgICAiIiJNaW1pYyBtb2RfcHl0aG9uIHJlcXVlc3QuIiIi
Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdF9oYW5kbGVyLCB1c2VfdGxzKToKLSAg
ICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAg
ICAgICByZXF1ZXN0X2hhbmRsZXI6IEEgV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIgaW5zdGFuY2Uu
Ci0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIgPSByZXF1ZXN0X2hh
bmRsZXIKLSAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gX1N0YW5kYWxvbmVDb25uZWN0aW9uKHJl
cXVlc3RfaGFuZGxlcikKLSAgICAgICAgc2VsZi5fdXNlX3RscyA9IHVzZV90bHMKLQotICAgIGRl
ZiBnZXRfdXJpKHNlbGYpOgotICAgICAgICAiIiJHZXR0ZXIgdG8gbWltaWMgcmVxdWVzdC51cmku
IiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIucGF0aAotICAgIHVyaSA9
IHByb3BlcnR5KGdldF91cmkpCi0KLSAgICBkZWYgZ2V0X2hlYWRlcnNfaW4oc2VsZik6Ci0gICAg
ICAgICIiIkdldHRlciB0byBtaW1pYyByZXF1ZXN0LmhlYWRlcnNfaW4uIiIiCi0gICAgICAgIHJl
dHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIuaGVhZGVycwotICAgIGhlYWRlcnNfaW4gPSBwcm9w
ZXJ0eShnZXRfaGVhZGVyc19pbikKLQotICAgIGRlZiBpc19odHRwcyhzZWxmKToKLSAgICAgICAg
IiIiTWltaWMgcmVxdWVzdC5pc19odHRwcygpLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fdXNl
X3RscwotCi0KLWNsYXNzIFdlYlNvY2tldFNlcnZlcihTb2NrZXRTZXJ2ZXIuVGhyZWFkaW5nTWl4
SW4sIEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgotICAgICIiIkhUVFBTZXJ2ZXIgc3BlY2lh
bGl6ZWQgZm9yIFdlYiBTb2NrZXQuIiIiCi0KLSAgICBTb2NrZXRTZXJ2ZXIuVGhyZWFkaW5nTWl4
SW4uZGFlbW9uX3RocmVhZHMgPSBUcnVlCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVy
X2FkZHJlc3MsIFJlcXVlc3RIYW5kbGVyQ2xhc3MpOgotICAgICAgICAiIiJPdmVycmlkZSBTb2Nr
ZXRTZXJ2ZXIuQmFzZVNlcnZlci5fX2luaXRfXy4iIiIKLQotICAgICAgICBTb2NrZXRTZXJ2ZXIu
QmFzZVNlcnZlci5fX2luaXRfXygKLSAgICAgICAgICAgICAgICBzZWxmLCBzZXJ2ZXJfYWRkcmVz
cywgUmVxdWVzdEhhbmRsZXJDbGFzcykKLSAgICAgICAgc2VsZi5zb2NrZXQgPSBzZWxmLl9jcmVh
dGVfc29ja2V0KCkKLSAgICAgICAgc2VsZi5zZXJ2ZXJfYmluZCgpCi0gICAgICAgIHNlbGYuc2Vy
dmVyX2FjdGl2YXRlKCkKLQotICAgIGRlZiBfY3JlYXRlX3NvY2tldChzZWxmKToKLSAgICAgICAg
c29ja2V0XyA9IHNvY2tldC5zb2NrZXQoc2VsZi5hZGRyZXNzX2ZhbWlseSwgc2VsZi5zb2NrZXRf
dHlwZSkKLSAgICAgICAgaWYgV2ViU29ja2V0U2VydmVyLm9wdGlvbnMudXNlX3RsczoKLSAgICAg
ICAgICAgIGN0eCA9IE9wZW5TU0wuU1NMLkNvbnRleHQoT3BlblNTTC5TU0wuU1NMdjIzX01FVEhP
RCkKLSAgICAgICAgICAgIGN0eC51c2VfcHJpdmF0ZWtleV9maWxlKFdlYlNvY2tldFNlcnZlci5v
cHRpb25zLnByaXZhdGVfa2V5KQotICAgICAgICAgICAgY3R4LnVzZV9jZXJ0aWZpY2F0ZV9maWxl
KFdlYlNvY2tldFNlcnZlci5vcHRpb25zLmNlcnRpZmljYXRlKQotICAgICAgICAgICAgc29ja2V0
XyA9IE9wZW5TU0wuU1NMLkNvbm5lY3Rpb24oY3R4LCBzb2NrZXRfKQotICAgICAgICByZXR1cm4g
c29ja2V0XwotCi0gICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmLCBycXVlc3QsIGNsaWVudF9hZGRy
ZXNzKToKLSAgICAgICAgIiIiT3ZlcnJpZGUgU29ja2V0U2VydmVyLmhhbmRsZV9lcnJvci4iIiIK
LQotICAgICAgICBsb2dnaW5nLmVycm9yKAotICAgICAgICAgICAgKCdFeGNlcHRpb24gaW4gcHJv
Y2Vzc2luZyByZXF1ZXN0IGZyb206ICVyJyAlIChjbGllbnRfYWRkcmVzcywpKSArCi0gICAgICAg
ICAgICAnXG4nICsgdXRpbC5nZXRfc3RhY2tfdHJhY2UoKSkKLSAgICAgICAgIyBOb3RlOiBjbGll
bnRfYWRkcmVzcyBpcyBhIHR1cGxlLiBUbyBtYXRjaCBpdCBhZ2FpbnN0ICVyLCB3ZSBuZWVkIHRo
ZQotICAgICAgICAjIHRyYWlsaW5nIGNvbW1hLgotCi0KLWNsYXNzIFdlYlNvY2tldFJlcXVlc3RI
YW5kbGVyKENHSUhUVFBTZXJ2ZXIuQ0dJSFRUUFJlcXVlc3RIYW5kbGVyKToKLSAgICAiIiJDR0lI
VFRQUmVxdWVzdEhhbmRsZXIgc3BlY2lhbGl6ZWQgZm9yIFdlYiBTb2NrZXQuIiIiCi0KLSAgICBk
ZWYgc2V0dXAoc2VsZik6Ci0gICAgICAgICIiIk92ZXJyaWRlIFNvY2tldFNlcnZlci5TdHJlYW1S
ZXF1ZXN0SGFuZGxlci5zZXR1cC4iIiIKLQotICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBzZWxm
LnJlcXVlc3QKLSAgICAgICAgc2VsZi5yZmlsZSA9IG1lbW9yaXppbmdmaWxlLk1lbW9yaXppbmdG
aWxlKAotICAgICAgICAgICAgICAgIHNvY2tldC5fZmlsZW9iamVjdChzZWxmLnJlcXVlc3QsICdy
YicsIHNlbGYucmJ1ZnNpemUpLAotICAgICAgICAgICAgICAgIG1heF9tZW1vcml6ZWRfbGluZXM9
X01BWF9NRU1PUklaRURfTElORVMpCi0gICAgICAgIHNlbGYud2ZpbGUgPSBzb2NrZXQuX2ZpbGVv
YmplY3Qoc2VsZi5yZXF1ZXN0LCAnd2InLCBzZWxmLndidWZzaXplKQotCi0gICAgZGVmIF9faW5p
dF9fKHNlbGYsICphcmdzLCAqKmtleXdvcmRzKToKLSAgICAgICAgc2VsZi5fcmVxdWVzdCA9IF9T
dGFuZGFsb25lUmVxdWVzdCgKLSAgICAgICAgICAgICAgICBzZWxmLCBXZWJTb2NrZXRSZXF1ZXN0
SGFuZGxlci5vcHRpb25zLnVzZV90bHMpCi0gICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIgPSBXZWJT
b2NrZXRSZXF1ZXN0SGFuZGxlci5vcHRpb25zLmRpc3BhdGNoZXIKLSAgICAgICAgc2VsZi5fcHJp
bnRfd2FybmluZ3NfaWZfYW55KCkKLSAgICAgICAgc2VsZi5faGFuZHNoYWtlciA9IGhhbmRzaGFr
ZS5IYW5kc2hha2VyKAotICAgICAgICAgICAgICAgIHNlbGYuX3JlcXVlc3QsIHNlbGYuX2Rpc3Bh
dGNoZXIsCi0gICAgICAgICAgICAgICAgV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIub3B0aW9ucy5z
dHJpY3QpCi0gICAgICAgIENHSUhUVFBTZXJ2ZXIuQ0dJSFRUUFJlcXVlc3RIYW5kbGVyLl9faW5p
dF9fKAotICAgICAgICAgICAgICAgIHNlbGYsICphcmdzLCAqKmtleXdvcmRzKQotCi0gICAgZGVm
IF9wcmludF93YXJuaW5nc19pZl9hbnkoc2VsZik6Ci0gICAgICAgIHdhcm5pbmdzID0gc2VsZi5f
ZGlzcGF0Y2hlci5zb3VyY2Vfd2FybmluZ3MoKQotICAgICAgICBpZiB3YXJuaW5nczoKLSAgICAg
ICAgICAgIGZvciB3YXJuaW5nIGluIHdhcm5pbmdzOgotICAgICAgICAgICAgICAgIGxvZ2dpbmcu
d2FybmluZygnbW9kX3B5d2Vic29ja2V0OiAlcycgJSB3YXJuaW5nKQotCi0gICAgZGVmIHBhcnNl
X3JlcXVlc3Qoc2VsZik6Ci0gICAgICAgICIiIk92ZXJyaWRlIEJhc2VIVFRQU2VydmVyLkJhc2VI
VFRQUmVxdWVzdEhhbmRsZXIucGFyc2VfcmVxdWVzdC4KLQotICAgICAgICBSZXR1cm4gVHJ1ZSB0
byBjb250aW51ZSBwcm9jZXNzaW5nIGZvciBIVFRQKFMpLCBGYWxzZSBvdGhlcndpc2UuCi0gICAg
ICAgICIiIgotICAgICAgICByZXN1bHQgPSBDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFu
ZGxlci5wYXJzZV9yZXF1ZXN0KHNlbGYpCi0gICAgICAgIGlmIHJlc3VsdDoKLSAgICAgICAgICAg
IHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl9oYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCi0g
ICAgICAgICAgICAgICAgc2VsZi5fZGlzcGF0Y2hlci50cmFuc2Zlcl9kYXRhKHNlbGYuX3JlcXVl
c3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICBleGNlcHQgaGFu
ZHNoYWtlLkhhbmRzaGFrZUVycm9yLCBlOgotICAgICAgICAgICAgICAgICMgSGFuZHNoYWtlIGZv
ciB3cyhzKSBmYWlsZWQuIEFzc3VtZSBodHRwKHMpLgotICAgICAgICAgICAgICAgIGxvZ2dpbmcu
aW5mbygnbW9kX3B5d2Vic29ja2V0OiAlcycgJSBlKQotICAgICAgICAgICAgICAgIHJldHVybiBU
cnVlCi0gICAgICAgICAgICBleGNlcHQgZGlzcGF0Y2guRGlzcGF0Y2hFcnJvciwgZToKLSAgICAg
ICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ21vZF9weXdlYnNvY2tldDogJXMnICUgZSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24s
IGU6Ci0gICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdtb2RfcHl3ZWJzb2NrZXQ6ICVz
JyAlIGUpCi0gICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdtb2RfcHl3ZWJzb2NrZXQ6ICVz
JyAlIHV0aWwuZ2V0X3N0YWNrX3RyYWNlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNl
Ci0gICAgICAgIHJldHVybiByZXN1bHQKLQotICAgIGRlZiBsb2dfcmVxdWVzdChzZWxmLCBjb2Rl
PSctJywgc2l6ZT0nLScpOgotICAgICAgICAiIiJPdmVycmlkZSBCYXNlSFRUUFNlcnZlci5sb2df
cmVxdWVzdC4iIiIKLQotICAgICAgICBsb2dnaW5nLmluZm8oJyIlcyIgJXMgJXMnLAotICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5yZXF1ZXN0bGluZSwgc3RyKGNvZGUpLCBzdHIoc2l6ZSkpCi0K
LSAgICBkZWYgbG9nX2Vycm9yKHNlbGYsICphcmdzKToKLSAgICAgICAgIiIiT3ZlcnJpZGUgQmFz
ZUhUVFBTZXJ2ZXIubG9nX2Vycm9yLiIiIgotCi0gICAgICAgICMgRGVzcGl0ZSB0aGUgbmFtZSwg
dGhpcyBtZXRob2QgaXMgZm9yIHdhcm5pbmdzIHRoYW4gZm9yIGVycm9ycy4KLSAgICAgICAgIyBG
b3IgZXhhbXBsZSwgSFRUUCBzdGF0dXMgY29kZSBpcyBsb2dnZWQgYnkgdGhpcyBtZXRob2QuCi0g
ICAgICAgIGxvZ2dpbmcud2FybignJXMgLSAlcycgJSAoc2VsZi5hZGRyZXNzX3N0cmluZygpLCAo
YXJnc1swXSAlIGFyZ3NbMTpdKSkpCi0KLSAgICBkZWYgaXNfY2dpKHNlbGYpOgotICAgICAgICAi
IiJUZXN0IHdoZXRoZXIgc2VsZi5wYXRoIGNvcnJlc3BvbmRzIHRvIGEgQ0dJIHNjcmlwdC4KLQot
ICAgICAgICBBZGQgZXh0cmEgY2hlY2sgdGhhdCBzZWxmLnBhdGggZG9lc24ndCBjb250YWlucyAu
LiIiIgotICAgICAgICBpZiBDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxlci5pc19j
Z2koc2VsZik6Ci0gICAgICAgICAgICBpZiAnLi4nIGluIHNlbGYucGF0aDoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVy
biBGYWxzZQotCi0KLWRlZiBfY29uZmlndXJlX2xvZ2dpbmcob3B0aW9ucyk6Ci0gICAgbG9nZ2Vy
ID0gbG9nZ2luZy5nZXRMb2dnZXIoKQotICAgIGxvZ2dlci5zZXRMZXZlbChfTE9HX0xFVkVMU1tv
cHRpb25zLmxvZ19sZXZlbF0pCi0gICAgaWYgb3B0aW9ucy5sb2dfZmlsZToKLSAgICAgICAgaGFu
ZGxlciA9IGxvZ2dpbmcuaGFuZGxlcnMuUm90YXRpbmdGaWxlSGFuZGxlcigKLSAgICAgICAgICAg
ICAgICBvcHRpb25zLmxvZ19maWxlLCAnYScsIG9wdGlvbnMubG9nX21heCwgb3B0aW9ucy5sb2df
Y291bnQpCi0gICAgZWxzZToKLSAgICAgICAgaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxl
cigpCi0gICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoCi0gICAgICAgICAgICAiWyUo
YXNjdGltZSlzXSBbJShsZXZlbG5hbWUpc10gJShuYW1lKXM6ICUobWVzc2FnZSlzIikKLSAgICBo
YW5kbGVyLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCi0gICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFu
ZGxlcikKLQotZGVmIF9hbGlhc19oYW5kbGVycyhkaXNwYXRjaGVyLCB3ZWJzb2NrX2hhbmRsZXJz
X21hcF9maWxlKToKLSAgICAiIiJTZXQgYWxpYXNlcyBzcGVjaWZpZWQgaW4gd2Vic29ja19oYW5k
bGVyX21hcF9maWxlIGluIGRpc3BhdGNoZXIuCi0KLSAgICBBcmdzOgotICAgICAgICBkaXNwYXRj
aGVyOiBkaXNwYXRjaC5EaXNwYXRjaGVyIGluc3RhbmNlCi0gICAgICAgIHdlYnNvY2tfaGFuZGxl
cl9tYXBfZmlsZTogYWxpYXMgbWFwIGZpbGUKLSAgICAiIiIKLSAgICBmcCA9IG9wZW4od2Vic29j
a19oYW5kbGVyc19tYXBfZmlsZSkKLSAgICB0cnk6Ci0gICAgICAgIGZvciBsaW5lIGluIGZwOgot
ICAgICAgICAgICAgaWYgbGluZVswXSA9PSAnIycgb3IgbGluZS5pc3NwYWNlKCk6Ci0gICAgICAg
ICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIG0gPSByZS5tYXRjaCgnKFxTKylccysoXFMr
KScsIGxpbmUpCi0gICAgICAgICAgICBpZiBub3QgbToKLSAgICAgICAgICAgICAgICBsb2dnaW5n
Lndhcm5pbmcoJ1dyb25nIGZvcm1hdCBpbiBtYXAgZmlsZTonICsgbGluZSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGRpc3BhdGNo
ZXIuYWRkX3Jlc291cmNlX3BhdGhfYWxpYXMoCi0gICAgICAgICAgICAgICAgICAgIG0uZ3JvdXAo
MSksIG0uZ3JvdXAoMikpCi0gICAgICAgICAgICBleGNlcHQgZGlzcGF0Y2guRGlzcGF0Y2hFcnJv
ciwgZToKLSAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKHN0cihlKSkKLSAgICBmaW5hbGx5
OgotICAgICAgICBmcC5jbG9zZSgpCi0KLQotCi1kZWYgX21haW4oKToKLSAgICBwYXJzZXIgPSBv
cHRwYXJzZS5PcHRpb25QYXJzZXIoKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcCcsICctLXBv
cnQnLCBkZXN0PSdwb3J0JywgdHlwZT0naW50JywKLSAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0PWhhbmRzaGFrZS5fREVGQVVMVF9XRUJfU09DS0VUX1BPUlQsCi0gICAgICAgICAgICAgICAg
ICAgICAgaGVscD0ncG9ydCB0byBsaXN0ZW4gdG8nKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCct
dycsICctLXdlYnNvY2tfaGFuZGxlcnMnLCBkZXN0PSd3ZWJzb2NrX2hhbmRsZXJzJywKLSAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0PScuJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSdXZWIgU29ja2V0IGhhbmRsZXJzIHJvb3QgZGlyZWN0b3J5LicpCi0gICAgcGFyc2VyLmFkZF9v
cHRpb24oJy1tJywgJy0td2Vic29ja19oYW5kbGVyc19tYXBfZmlsZScsCi0gICAgICAgICAgICAg
ICAgICAgICAgZGVzdD0nd2Vic29ja19oYW5kbGVyc19tYXBfZmlsZScsCi0gICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdXZWIg
U29ja2V0IGhhbmRsZXJzIG1hcCBmaWxlLiAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
J0VhY2ggbGluZSBjb25zaXN0cyBvZiBhbGlhc19yZXNvdXJjZV9wYXRoIGFuZCAnCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ2V4aXN0aW5nX3Jlc291cmNlX3BhdGgsIHNlcGFyYXRlZCBi
eSBzcGFjZXMuJykpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oJy1zJywgJy0tc2Nhbl9kaXInLCBk
ZXN0PSdzY2FuX2RpcicsCi0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAotICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9KCdXZWIgU29ja2V0IGhhbmRsZXJzIHNjYW4gZGlyZWN0
b3J5LiAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011c3QgYmUgYSBkaXJlY3Rvcnkg
dW5kZXIgd2Vic29ja19oYW5kbGVycy4nKSkKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLWQnLCAn
LS1kb2N1bWVudF9yb290JywgZGVzdD0nZG9jdW1lbnRfcm9vdCcsCi0gICAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdD0nLicsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0nRG9jdW1lbnQg
cm9vdCBkaXJlY3RvcnkuJykKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLXgnLCAnLS1jZ2lfcGF0
aHMnLCBkZXN0PSdjZ2lfcGF0aHMnLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9u
ZSwKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnQ0dJIHBhdGhzIHJlbGF0aXZlIHRvIGRv
Y3VtZW50X3Jvb3QuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb21tYS1zZXBhcmF0
ZWQuIChlLmcgLXggL2NnaSwvaHRiaW4pICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
RmlsZXMgdW5kZXIgZG9jdW1lbnRfcm9vdC9jZ2lfcGF0aCBhcmUgaGFuZGxlZCAnCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ2FzIENHSSBwcm9ncmFtcy4gTXVzdCBiZSBleGVjdXRhYmxl
LicpKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctdCcsICctLXRscycsIGRlc3Q9J3VzZV90bHMn
LCBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFs
c2UsIGhlbHA9J3VzZSBUTFMgKHdzczovLyknKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctaycs
ICctLXByaXZhdGVfa2V5JywgZGVzdD0ncHJpdmF0ZV9rZXknLAotICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ9JycsIGhlbHA9J1RMUyBwcml2YXRlIGtleSBmaWxlLicpCi0gICAgcGFyc2Vy
LmFkZF9vcHRpb24oJy1jJywgJy0tY2VydGlmaWNhdGUnLCBkZXN0PSdjZXJ0aWZpY2F0ZScsCi0g
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nJywgaGVscD0nVExTIGNlcnRpZmljYXRlIGZp
bGUuJykKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLWwnLCAnLS1sb2dfZmlsZScsIGRlc3Q9J2xv
Z19maWxlJywKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnLCBoZWxwPSdMb2cgZmls
ZS4nKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLWxvZ19sZXZlbCcsIHR5cGU9J2Nob2ljZScs
IGRlc3Q9J2xvZ19sZXZlbCcsCi0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nd2Fybics
Ci0gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1bJ2RlYnVnJywgJ2luZm8nLCAnd2Fybics
ICdlcnJvcicsICdjcml0aWNhbCddLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0xvZyBs
ZXZlbC4nKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLWxvZ19tYXgnLCBkZXN0PSdsb2dfbWF4
JywgdHlwZT0naW50JywKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PV9ERUZBVUxUX0xP
R19NQVhfQllURVMsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0nTG9nIG1heGltdW0gYnl0
ZXMnKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLWxvZ19jb3VudCcsIGRlc3Q9J2xvZ19jb3Vu
dCcsIHR5cGU9J2ludCcsCi0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1fREVGQVVMVF9M
T0dfQkFDS1VQX0NPVU5ULAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0xvZyBiYWNrdXAg
Y291bnQnKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLXN0cmljdCcsIGRlc3Q9J3N0cmljdCcs
IGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxz
ZSwgaGVscD0nU3RyaWN0bHkgY2hlY2sgaGFuZHNoYWtlIHJlcXVlc3QnKQotICAgIHBhcnNlci5h
ZGRfb3B0aW9uKCctcScsICctLXF1ZXVlJywgZGVzdD0ncmVxdWVzdF9xdWV1ZV9zaXplJywgdHlw
ZT0naW50JywKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PV9ERUZBVUxUX1JFUVVFU1Rf
UVVFVUVfU0laRSwKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdyZXF1ZXN0IHF1ZXVlIHNp
emUnKQotICAgIG9wdGlvbnMgPSBwYXJzZXIucGFyc2VfYXJncygpWzBdCi0KLSAgICBvcy5jaGRp
cihvcHRpb25zLmRvY3VtZW50X3Jvb3QpCi0KLSAgICBfY29uZmlndXJlX2xvZ2dpbmcob3B0aW9u
cykKLQotICAgIFNvY2tldFNlcnZlci5UQ1BTZXJ2ZXIucmVxdWVzdF9xdWV1ZV9zaXplID0gb3B0
aW9ucy5yZXF1ZXN0X3F1ZXVlX3NpemUKLSAgICBDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0
SGFuZGxlci5jZ2lfZGlyZWN0b3JpZXMgPSBbXQotCi0gICAgaWYgb3B0aW9ucy5jZ2lfcGF0aHM6
Ci0gICAgICAgIENHSUhUVFBTZXJ2ZXIuQ0dJSFRUUFJlcXVlc3RIYW5kbGVyLmNnaV9kaXJlY3Rv
cmllcyA9IFwKLSAgICAgICAgICAgIG9wdGlvbnMuY2dpX3BhdGhzLnNwbGl0KCcsJykKLQotICAg
IGlmIG9wdGlvbnMudXNlX3RsczoKLSAgICAgICAgaWYgbm90IF9IQVNfT1BFTl9TU0w6Ci0gICAg
ICAgICAgICBsb2dnaW5nLmNyaXRpY2FsKCdUbyB1c2UgVExTLCBpbnN0YWxsIHB5T3BlblNTTC4n
KQotICAgICAgICAgICAgc3lzLmV4aXQoMSkKLSAgICAgICAgaWYgbm90IG9wdGlvbnMucHJpdmF0
ZV9rZXkgb3Igbm90IG9wdGlvbnMuY2VydGlmaWNhdGU6Ci0gICAgICAgICAgICBsb2dnaW5nLmNy
aXRpY2FsKAotICAgICAgICAgICAgICAgICAgICAnVG8gdXNlIFRMUywgc3BlY2lmeSBwcml2YXRl
X2tleSBhbmQgY2VydGlmaWNhdGUuJykKLSAgICAgICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBp
ZiBub3Qgb3B0aW9ucy5zY2FuX2RpcjoKLSAgICAgICAgb3B0aW9ucy5zY2FuX2RpciA9IG9wdGlv
bnMud2Vic29ja19oYW5kbGVycwotCi0gICAgdHJ5OgotICAgICAgICAjIFNoYXJlIGEgRGlzcGF0
Y2hlciBhbW9uZyByZXF1ZXN0IGhhbmRsZXJzIHRvIHNhdmUgdGltZSBmb3IKLSAgICAgICAgIyBp
bnN0YW50aWF0aW9uLiAgRGlzcGF0Y2hlciBjYW4gYmUgc2hhcmVkIGJlY2F1c2UgaXQgaXMgdGhy
ZWFkLXNhZmUuCi0gICAgICAgIG9wdGlvbnMuZGlzcGF0Y2hlciA9IGRpc3BhdGNoLkRpc3BhdGNo
ZXIob3B0aW9ucy53ZWJzb2NrX2hhbmRsZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2Nhbl9kaXIpCi0gICAgICAgIGlmIG9wdGlv
bnMud2Vic29ja19oYW5kbGVyc19tYXBfZmlsZToKLSAgICAgICAgICAgIF9hbGlhc19oYW5kbGVy
cyhvcHRpb25zLmRpc3BhdGNoZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9u
cy53ZWJzb2NrX2hhbmRsZXJzX21hcF9maWxlKQotICAgICAgICBfcHJpbnRfd2FybmluZ3NfaWZf
YW55KG9wdGlvbnMuZGlzcGF0Y2hlcikKLQotICAgICAgICBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxl
ci5vcHRpb25zID0gb3B0aW9ucwotICAgICAgICBXZWJTb2NrZXRTZXJ2ZXIub3B0aW9ucyA9IG9w
dGlvbnMKLQotICAgICAgICBzZXJ2ZXIgPSBXZWJTb2NrZXRTZXJ2ZXIoKCcnLCBvcHRpb25zLnBv
cnQpLCBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlcikKLSAgICAgICAgc2VydmVyLnNlcnZlX2ZvcmV2
ZXIoKQotICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6Ci0gICAgICAgIGxvZ2dpbmcuY3JpdGljYWwo
c3RyKGUpKQotICAgICAgICBzeXMuZXhpdCgxKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5f
Xyc6Ci0gICAgX21haW4oKQotCi0KLSMgdmk6c3RzPTQgc3c9NCBldApJbmRleDogV2ViS2l0VG9v
bHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3V0aWwucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3V0aWwucHkJKHJldmlzaW9uIDU1
MjUzKQorKysgV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3V0aWwucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xl
IEluYy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
IwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotIiIi
V2ViIFNvY2tldHMgdXRpbGl0aWVzLgotIiIiCi0KLQotaW1wb3J0IFN0cmluZ0lPCi1pbXBvcnQg
dHJhY2ViYWNrCi0KLQotZGVmIGdldF9zdGFja190cmFjZSgpOgotICAgICIiIkdldCB0aGUgY3Vy
cmVudCBzdGFjayB0cmFjZSBhcyBzdHJpbmcuCi0KLSAgICBUaGlzIGlzIG5lZWRlZCB0byBzdXBw
b3J0IFB5dGhvbiAyLjMuCi0gICAgVE9ETzogUmVtb3ZlIHRoaXMgd2hlbiB3ZSBvbmx5IHN1cHBv
cnQgUHl0aG9uIDIuNCBhbmQgYWJvdmUuCi0gICAgICAgICAgVXNlIHRyYWNlYmFjay5mb3JtYXRf
ZXhjIGluc3RlYWQuCi0gICAgIiIiCi0KLSAgICBvdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCi0g
ICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPW91dCkKLSAgICByZXR1cm4gb3V0LmdldHZhbHVl
KCkKLQotCi1kZWYgcHJlcGVuZF9tZXNzYWdlX3RvX2V4Y2VwdGlvbihtZXNzYWdlLCBleGMpOgot
ICAgICIiIlByZXBlbmQgbWVzc2FnZSB0byB0aGUgZXhjZXB0aW9uLiIiIgotCi0gICAgZXhjLmFy
Z3MgPSAobWVzc2FnZSArIHN0cihleGMpLCkKLSAgICByZXR1cm4KLQotCi0jIHZpOnN0cz00IHN3
PTQgZXQKSW5kZXg6IFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvY29uZmlnLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvY29uZmlnLnB5CShyZXZpc2lv
biA1NTI1MykKKysrIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvY29uZmlnLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQ1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMu
Ci0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLSIiIkNvbmZp
Z3VyYXRpb24gZm9yIHRlc3RpbmcuCi0KLVRlc3QgZmlsZXMgc2hvdWxkIGltcG9ydCB0aGlzIG1v
ZHVsZSBiZWZvcmUgbW9kX3B5d2Vic29ja2V0LgotIiIiCi0KLQotaW1wb3J0IG9zCi1pbXBvcnQg
c3lzCi0KLQotIyBBZGQgdGhlIHBhcmVudCBkaXJlY3RvcnkgdG8gc3lzLnBhdGggdG8gZW5hYmxl
IGltcG9ydGluZyBtb2RfcHl3ZWJzb2NrZXQuCi1zeXMucGF0aCArPSBbb3MucGF0aC5qb2luKG9z
LnBhdGguc3BsaXQoX19maWxlX18pWzBdLCAnLi4nKV0KLQotCi0jIHZpOnN0cz00IHN3PTQgZXQK
SW5kZXg6IFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvbW9jay5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L21vY2sucHkJKHJldmlzaW9uIDU1MjUzKQor
KysgV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC9tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0xLDIwNSArMCwwIEBACi0jIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgotIyBBbGwgcmln
aHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0j
Ci0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi0iIiJNb2NrcyBmb3IgdGVzdGlu
Zy4KLSIiIgotCi0KLWltcG9ydCBRdWV1ZQotaW1wb3J0IHRocmVhZGluZwotCi0KLWNsYXNzIF9N
b2NrQ29ubkJhc2Uob2JqZWN0KToKLSAgICAiIiJCYXNlIGNsYXNzIG9mIG1vY2tzIGZvciBtb2Rf
cHl0aG9uLmFwYWNoZS5tcF9jb25uLgotCi0gICAgVGhpcyBlbmFibGVzIHRlc3RzIHRvIGNoZWNr
IHdoYXQgaXMgd3JpdHRlbiB0byBhIChtb2NrKSBtcF9jb25uLgotICAgICIiIgotCi0gICAgZGVm
IF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl93cml0ZV9kYXRhID0gW10KLQotICAgIGRl
ZiB3cml0ZShzZWxmLCBkYXRhKToKLSAgICAgICAgIiIiT3ZlcnJpZGUgbW9kX3B5dGhvbi5hcGFj
aGUubXBfY29ubi53cml0ZS4iIiIKLQotICAgICAgICBzZWxmLl93cml0ZV9kYXRhLmFwcGVuZChk
YXRhKQotCi0gICAgZGVmIHdyaXR0ZW5fZGF0YShzZWxmKToKLSAgICAgICAgIiIiR2V0IGJ5dGVz
IHdyaXR0ZW4gdG8gdGhpcyBtb2NrLiIiIgotCi0gICAgICAgIHJldHVybiAnJy5qb2luKHNlbGYu
X3dyaXRlX2RhdGEpCi0KLQotY2xhc3MgTW9ja0Nvbm4oX01vY2tDb25uQmFzZSk6Ci0gICAgIiIi
TW9jayBmb3IgbW9kX3B5dGhvbi5hcGFjaGUubXBfY29ubi4KLQotICAgIFRoaXMgZW5hYmxlcyB0
ZXN0cyB0byBzcGVjaWZ5IHdoYXQgc2hvdWxkIGJlIHJlYWQgZnJvbSBhIChtb2NrKSBtcF9jb25u
IGFzCi0gICAgd2VsbCBhcyB0byBjaGVjayB3aGF0IGlzIHdyaXR0ZW4gdG8gaXQuCi0gICAgIiIi
Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcmVhZF9kYXRhKToKLSAgICAgICAgIiIiQ29uc3Ry
dWN0cyBhbiBpbnN0YW5jZS4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgICAgcmVhZF9kYXRh
OiBieXRlcyB0aGF0IHNob3VsZCBiZSByZXR1cm5lZCB3aGVuIHJlYWQqIG1ldGhvZHMgYXJlCi0g
ICAgICAgICAgICBjYWxsZWQuCi0gICAgICAgICIiIgotCi0gICAgICAgIF9Nb2NrQ29ubkJhc2Uu
X19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5fcmVhZF9kYXRhID0gcmVhZF9kYXRhCi0gICAg
ICAgIHNlbGYuX3JlYWRfcG9zID0gMAotCi0gICAgZGVmIHJlYWRsaW5lKHNlbGYpOgotICAgICAg
ICAiIiJPdmVycmlkZSBtb2RfcHl0aG9uLmFwYWNoZS5tcF9jb25uLnJlYWRsaW5lLiIiIgotCi0g
ICAgICAgIGlmIHNlbGYuX3JlYWRfcG9zID49IGxlbihzZWxmLl9yZWFkX2RhdGEpOgotICAgICAg
ICAgICAgcmV0dXJuICcnCi0gICAgICAgIGVuZF9pbmRleCA9IHNlbGYuX3JlYWRfZGF0YS5maW5k
KCdcbicsIHNlbGYuX3JlYWRfcG9zKSArIDEKLSAgICAgICAgaWYgbm90IGVuZF9pbmRleDoKLSAg
ICAgICAgICAgIGVuZF9pbmRleCA9IGxlbihzZWxmLl9yZWFkX2RhdGEpCi0gICAgICAgIHJldHVy
biBzZWxmLl9yZWFkX3VwX3RvKGVuZF9pbmRleCkKLQotICAgIGRlZiByZWFkKHNlbGYsIGxlbmd0
aCk6Ci0gICAgICAgICIiIk92ZXJyaWRlIG1vZF9weXRob24uYXBhY2hlLm1wX2Nvbm4ucmVhZC4i
IiIKLQotICAgICAgICBpZiBzZWxmLl9yZWFkX3BvcyA+PSBsZW4oc2VsZi5fcmVhZF9kYXRhKToK
LSAgICAgICAgICAgIHJldHVybiAnJwotICAgICAgICBlbmRfaW5kZXggPSBtaW4obGVuKHNlbGYu
X3JlYWRfZGF0YSksIHNlbGYuX3JlYWRfcG9zICsgbGVuZ3RoKQotICAgICAgICByZXR1cm4gc2Vs
Zi5fcmVhZF91cF90byhlbmRfaW5kZXgpCi0KLSAgICBkZWYgX3JlYWRfdXBfdG8oc2VsZiwgZW5k
X2luZGV4KToKLSAgICAgICAgbGluZSA9IHNlbGYuX3JlYWRfZGF0YVtzZWxmLl9yZWFkX3Bvczpl
bmRfaW5kZXhdCi0gICAgICAgIHNlbGYuX3JlYWRfcG9zID0gZW5kX2luZGV4Ci0gICAgICAgIHJl
dHVybiBsaW5lCi0KLQotY2xhc3MgTW9ja0Jsb2NraW5nQ29ubihfTW9ja0Nvbm5CYXNlKToKLSAg
ICAiIiJCbG9ja2luZyBtb2NrIGZvciBtb2RfcHl0aG9uLmFwYWNoZS5tcF9jb25uLgotCi0gICAg
VGhpcyBlbmFibGVzIHRlc3RzIHRvIHNwZWNpZnkgd2hhdCBzaG91bGQgYmUgcmVhZCBmcm9tIGEg
KG1vY2spIG1wX2Nvbm4gYXMKLSAgICB3ZWxsIGFzIHRvIGNoZWNrIHdoYXQgaXMgd3JpdHRlbiB0
byBpdC4KLSAgICBDYWxsZXJzIG9mIHJlYWQqIG1ldGhvZHMgd2lsbCBibG9jayBpZiB0aGVyZSBp
cyBubyBieXRlcyBhdmFpbGFibGUuCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZik6
Ci0gICAgICAgIF9Nb2NrQ29ubkJhc2UuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5fcXVl
dWUgPSBRdWV1ZS5RdWV1ZSgpCi0KLSAgICBkZWYgcmVhZGxpbmUoc2VsZik6Ci0gICAgICAgICIi
Ik92ZXJyaWRlIG1vZF9weXRob24uYXBhY2hlLm1wX2Nvbm4ucmVhZGxpbmUuIiIiCi0gICAgICAg
IGxpbmUgPSAnJwotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgYyA9IHNlbGYuX3F1
ZXVlLmdldCgpCi0gICAgICAgICAgICBsaW5lICs9IGMKLSAgICAgICAgICAgIGlmIGMgPT0gJ1xu
JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gbGluZQotCi0gICAgZGVmIHJlYWQoc2VsZiwgbGVu
Z3RoKToKLSAgICAgICAgIiIiT3ZlcnJpZGUgbW9kX3B5dGhvbi5hcGFjaGUubXBfY29ubi5yZWFk
LiIiIgotCi0gICAgICAgIGRhdGEgPSAnJwotICAgICAgICBmb3IgdW51c2VkIGluIHJhbmdlKGxl
bmd0aCk6Ci0gICAgICAgICAgICBkYXRhICs9IHNlbGYuX3F1ZXVlLmdldCgpCi0gICAgICAgIHJl
dHVybiBkYXRhCi0KLSAgICBkZWYgcHV0X2J5dGVzKHNlbGYsIGJ5dGVzKToKLSAgICAgICAgIiIi
UHV0IGJ5dGVzIHRvIGJlIHJlYWQgZnJvbSB0aGlzIG1vY2suCi0KLSAgICAgICAgQXJnczoKLSAg
ICAgICAgICAgIGJ5dGVzOiBieXRlcyB0byBiZSByZWFkLgotICAgICAgICAiIiIKLQotICAgICAg
ICBmb3IgYnl0ZSBpbiBieXRlczoKLSAgICAgICAgICAgIHNlbGYuX3F1ZXVlLnB1dChieXRlKQot
Ci0KLWNsYXNzIE1vY2tUYWJsZShkaWN0KToKLSAgICAiIiJNb2NrIHRhYmxlLgotCi0gICAgVGhp
cyBtaW1pY3MgbW9kX3B5dGhvbiBtcF90YWJsZS4gTm90ZSB0aGF0IG9ubHkgdGhlIG1ldGhvZHMg
dXNlZCBieQotICAgIHRlc3RzIGFyZSBvdmVycmlkZGVuLgotICAgICIiIgotCi0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGNvcHlfZnJvbT17fSk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoY29weV9m
cm9tLCBkaWN0KToKLSAgICAgICAgICAgIGNvcHlfZnJvbSA9IGNvcHlfZnJvbS5pdGVtcygpCi0g
ICAgICAgIGZvciBrZXksIHZhbHVlIGluIGNvcHlfZnJvbToKLSAgICAgICAgICAgIHNlbGYuX19z
ZXRpdGVtX18oa2V5LCB2YWx1ZSkKLQotICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgot
ICAgICAgICByZXR1cm4gc3VwZXIoTW9ja1RhYmxlLCBzZWxmKS5fX2dldGl0ZW1fXyhrZXkubG93
ZXIoKSkKLQotICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKLSAgICAgICAg
c3VwZXIoTW9ja1RhYmxlLCBzZWxmKS5fX3NldGl0ZW1fXyhrZXkubG93ZXIoKSwgdmFsdWUpCi0K
LSAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmX3ZhbHVlPU5vbmUpOgotICAgICAgICByZXR1cm4g
c3VwZXIoTW9ja1RhYmxlLCBzZWxmKS5nZXQoa2V5Lmxvd2VyKCksIGRlZl92YWx1ZSkKLQotCi1j
bGFzcyBNb2NrUmVxdWVzdChvYmplY3QpOgotICAgICIiIk1vY2sgcmVxdWVzdC4KLQotICAgIFRo
aXMgbWltaWNzIG1vZF9weXRob24gcmVxdWVzdC4KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCB1cmk9Tm9uZSwgaGVhZGVyc19pbj17fSwgY29ubmVjdGlvbj1Ob25lLAotICAgICAg
ICAgICAgICAgICBpc19odHRwcz1GYWxzZSk6Ci0gICAgICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0
YW5jZS4KLQotICAgICAgICBBcmd1bWVudHM6Ci0gICAgICAgICAgICB1cmk6IFVSSSBvZiB0aGUg
cmVxdWVzdC4KLSAgICAgICAgICAgIGhlYWRlcnNfaW46IFJlcXVlc3QgaGVhZGVycy4KLSAgICAg
ICAgICAgIGNvbm5lY3Rpb246IENvbm5lY3Rpb24gdXNlZCBmb3IgdGhlIHJlcXVlc3QuCi0gICAg
ICAgICAgICBpc19odHRwczogV2hldGhlciB0aGlzIHJlcXVlc3QgaXMgb3ZlciBTU0wuCi0KLSAg
ICAgICAgU2VlIHRoZSBkb2N1bWVudCBvZiBtb2RfcHl0aG9uIFJlcXVlc3QgZm9yIGRldGFpbHMu
Ci0gICAgICAgICIiIgotICAgICAgICBzZWxmLnVyaSA9IHVyaQotICAgICAgICBzZWxmLmNvbm5l
Y3Rpb24gPSBjb25uZWN0aW9uCi0gICAgICAgIHNlbGYuaGVhZGVyc19pbiA9IE1vY2tUYWJsZSho
ZWFkZXJzX2luKQotICAgICAgICAjIHNlbGYuaXNfaHR0cHNfIG5lZWRzIHRvIGJlIGFjY2Vzc2li
bGUgZnJvbSB0ZXN0cy4gIFRvIGF2b2lkIG5hbWUKLSAgICAgICAgIyBjb25mbGljdCB3aXRoIHNl
bGYuaXNfaHR0cHMoKSwgaXQgaXMgbmFtZWQgYXMgc3VjaC4KLSAgICAgICAgc2VsZi5pc19odHRw
c18gPSBpc19odHRwcwotCi0gICAgZGVmIGlzX2h0dHBzKHNlbGYpOgotICAgICAgICAiIiJSZXR1
cm4gd2hldGhlciB0aGlzIHJlcXVlc3QgaXMgb3ZlciBTU0wuIiIiCi0gICAgICAgIHJldHVybiBz
ZWxmLmlzX2h0dHBzXwotCi0KLWNsYXNzIE1vY2tEaXNwYXRjaGVyKG9iamVjdCk6Ci0gICAgIiIi
TW9jayBmb3IgZGlzcGF0Y2guRGlzcGF0Y2hlci4iIiIKLQotICAgIGRlZiBkb19leHRyYV9oYW5k
c2hha2Uoc2VsZiwgY29ubl9jb250ZXh0KToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHRyYW5z
ZmVyX2RhdGEoc2VsZiwgY29ubl9jb250ZXh0KToKLSAgICAgICAgcGFzcwotCi0KLSMgdmk6c3Rz
PTQgc3c9NCBldApJbmRleDogV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC9ydW5fYWxsLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvcnVuX2FsbC5weQko
cmV2aXNpb24gNTUyNTMpCisrKyBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3J1bl9hbGwu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNjQgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
Ci0jCi0jIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgotIyBBbGwgcmlnaHRzIHJlc2VydmVk
LgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0
aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi0iIiJSdW4gYWxsIHRlc3RzIGluIHRoZSBzYW1lIGRp
cmVjdG9yeS4KLSIiIgotCi0KLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgdW5pdHRlc3QK
LQotCi1fVEVTVF9NT0RVTEVfUEFUVEVSTiA9IHJlLmNvbXBpbGUocideKHRlc3RfLispXC5weSQn
KQotCi0KLWRlZiBfbGlzdF90ZXN0X21vZHVsZXMoZGlyZWN0b3J5KToKLSAgICBtb2R1bGVfbmFt
ZXMgPSBbXQotICAgIGZvciBmaWxlbmFtZSBpbiBvcy5saXN0ZGlyKGRpcmVjdG9yeSk6Ci0gICAg
ICAgIG1hdGNoID0gX1RFU1RfTU9EVUxFX1BBVFRFUk4uc2VhcmNoKGZpbGVuYW1lKQotICAgICAg
ICBpZiBtYXRjaDoKLSAgICAgICAgICAgIG1vZHVsZV9uYW1lcy5hcHBlbmQobWF0Y2guZ3JvdXAo
MSkpCi0gICAgcmV0dXJuIG1vZHVsZV9uYW1lcwotCi0KLWRlZiBfc3VpdGUoKToKLSAgICBsb2Fk
ZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICByZXR1cm4gbG9hZGVyLmxvYWRUZXN0c0Zy
b21OYW1lcygKLSAgICAgICAgICAgIF9saXN0X3Rlc3RfbW9kdWxlcyhvcy5wYXRoLmpvaW4ob3Mu
cGF0aC5zcGxpdChfX2ZpbGVfXylbMF0sICcuJykpKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21h
aW5fXyc6Ci0gICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0nX3N1aXRlJykKLQotCi0jIHZp
OnN0cz00IHN3PTQgZXQKSW5kZXg6IFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9k
aXNwYXRjaC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rl
c3RfZGlzcGF0Y2gucHkJKHJldmlzaW9uIDU1MjUzKQorKysgV2ViS2l0VG9vbHMvcHl3ZWJzb2Nr
ZXQvdGVzdC90ZXN0X2Rpc3BhdGNoLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDI0NCArMCwwIEBA
Ci0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMu
Ci0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLSIiIlRlc3Rz
IGZvciBkaXNwYXRjaCBtb2R1bGUuIiIiCi0KLQotCi1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVz
dAotCi1pbXBvcnQgY29uZmlnICAjIFRoaXMgbXVzdCBiZSBpbXBvcnRlZCBiZWZvcmUgbW9kX3B5
d2Vic29ja2V0LgotZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGRpc3BhdGNoCi0KLWltcG9y
dCBtb2NrCi0KLQotX1RFU1RfSEFORExFUlNfRElSID0gb3MucGF0aC5qb2luKAotICAgICAgICBv
cy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSwgJ3Rlc3RkYXRhJywgJ2hhbmRsZXJzJykKLQotX1RF
U1RfSEFORExFUlNfU1VCX0RJUiA9IG9zLnBhdGguam9pbihfVEVTVF9IQU5ETEVSU19ESVIsICdz
dWInKQotCi1jbGFzcyBEaXNwYXRjaGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVm
IHRlc3Rfbm9ybWFsaXplX3BhdGgoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Mu
cGF0aC5hYnNwYXRoKCcvYS9iJykucmVwbGFjZSgnXFwnLCAnLycpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpc3BhdGNoLl9ub3JtYWxpemVfcGF0aCgnL2EvYicpKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKG9zLnBhdGguYWJzcGF0aCgnL2EvYicpLnJlcGxhY2UoJ1xcJywgJy8nKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaC5fbm9ybWFsaXplX3BhdGgoJ1xcYVxc
YicpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYWJzcGF0aCgnL2EvYicpLnJl
cGxhY2UoJ1xcJywgJy8nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaC5fbm9y
bWFsaXplX3BhdGgoJy9hL2MvLi4vYicpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBh
dGguYWJzcGF0aCgnYWJjJykucmVwbGFjZSgnXFwnLCAnLycpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpc3BhdGNoLl9ub3JtYWxpemVfcGF0aCgnYWJjJykpCi0KLSAgICBkZWYgdGVzdF9j
b252ZXJ0ZXIoc2VsZik6Ci0gICAgICAgIGNvbnZlcnRlciA9IGRpc3BhdGNoLl9wYXRoX3RvX3Jl
c291cmNlX2NvbnZlcnRlcignL2EvYicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9oJywg
Y29udmVydGVyKCcvYS9iL2hfd3NoLnB5JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9j
L2gnLCBjb252ZXJ0ZXIoJy9hL2IvYy9oX3dzaC5weScpKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKE5vbmUsIGNvbnZlcnRlcignL2EvYi9oLnB5JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoTm9uZSwgY29udmVydGVyKCdhL2IvaF93c2gucHknKSkKLQotICAgICAgICBjb252ZXJ0ZXIg
PSBkaXNwYXRjaC5fcGF0aF90b19yZXNvdXJjZV9jb252ZXJ0ZXIoJ2EvYicpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJy9oJywgY29udmVydGVyKCdhL2IvaF93c2gucHknKSkKLQotICAgICAg
ICBjb252ZXJ0ZXIgPSBkaXNwYXRjaC5fcGF0aF90b19yZXNvdXJjZV9jb252ZXJ0ZXIoJy9hL2Iv
Ly8nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvaCcsIGNvbnZlcnRlcignL2EvYi9oX3dz
aC5weScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvaCcsIGNvbnZlcnRlcignL2EvYi8u
Li9iL2hfd3NoLnB5JykpCi0KLSAgICAgICAgY29udmVydGVyID0gZGlzcGF0Y2guX3BhdGhfdG9f
cmVzb3VyY2VfY29udmVydGVyKCcvYS8uLi9hL2IvLi4vYi8nKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCcvaCcsIGNvbnZlcnRlcignL2EvYi9oX3dzaC5weScpKQotCi0gICAgICAgIGNvbnZl
cnRlciA9IGRpc3BhdGNoLl9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRlcihyJ1xhXGInKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCcvaCcsIGNvbnZlcnRlcihyJ1xhXGJcaF93c2gucHknKSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2gnLCBjb252ZXJ0ZXIocicvYS9iL2hfd3NoLnB5
JykpCi0KLSAgICBkZWYgdGVzdF9zb3VyY2VfZmlsZV9wYXRocyhzZWxmKToKLSAgICAgICAgcGF0
aHMgPSBsaXN0KGRpc3BhdGNoLl9zb3VyY2VfZmlsZV9wYXRocyhfVEVTVF9IQU5ETEVSU19ESVIp
KQotICAgICAgICBwYXRocy5zb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBsZW4o
cGF0aHMpKQotICAgICAgICBleHBlY3RlZF9wYXRocyA9IFsKLSAgICAgICAgICAgICAgICBvcy5w
YXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnYmxhbmtfd3NoLnB5JyksCi0gICAgICAgICAg
ICAgICAgb3MucGF0aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJUiwgJ29yaWdpbl9jaGVja193c2gu
cHknKSwKLSAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAn
c3ViJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbl9pbl90cmFuc2Zl
cl93c2gucHknKSwKLSAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNf
RElSLCAnc3ViJywgJ25vbl9jYWxsYWJsZV93c2gucHknKSwKLSAgICAgICAgICAgICAgICBvcy5w
YXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnc3ViJywgJ3BsYWluX3dzaC5weScpLAotICAg
ICAgICAgICAgICAgIG9zLnBhdGguam9pbihfVEVTVF9IQU5ETEVSU19ESVIsICdzdWInLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnd3JvbmdfaGFuZHNoYWtlX3NpZ193c2gucHknKSwK
LSAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnc3ViJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dyb25nX3RyYW5zZmVyX3NpZ193c2gucHkn
KSwKLSAgICAgICAgICAgICAgICBdCi0gICAgICAgIGZvciBleHBlY3RlZCwgYWN0dWFsIGluIHpp
cChleHBlY3RlZF9wYXRocywgcGF0aHMpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChl
eHBlY3RlZCwgYWN0dWFsKQotCi0gICAgZGVmIHRlc3Rfc291cmNlKHNlbGYpOgotICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhkaXNwYXRjaC5EaXNwYXRjaEVycm9yLCBkaXNwYXRjaC5fc291cmNl
LCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGlzcGF0Y2guRGlzcGF0Y2hFcnJvciwg
ZGlzcGF0Y2guX3NvdXJjZSwgJ2RlZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRpc3Bh
dGNoLkRpc3BhdGNoRXJyb3IsIGRpc3BhdGNoLl9zb3VyY2UsICcxLzAnKQotICAgICAgICBzZWxm
LmZhaWxVbmxlc3MoZGlzcGF0Y2guX3NvdXJjZSgKLSAgICAgICAgICAgICAgICAnZGVmIHdlYl9z
b2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOnBhc3NcbicKLSAgICAgICAgICAgICAg
ICAnZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KTpwYXNzXG4nKSkKLQotICAg
IGRlZiB0ZXN0X3NvdXJjZV93YXJuaW5ncyhzZWxmKToKLSAgICAgICAgZGlzcGF0Y2hlciA9IGRp
c3BhdGNoLkRpc3BhdGNoZXIoX1RFU1RfSEFORExFUlNfRElSLCBOb25lKQotICAgICAgICB3YXJu
aW5ncyA9IGRpc3BhdGNoZXIuc291cmNlX3dhcm5pbmdzKCkKLSAgICAgICAgd2FybmluZ3Muc29y
dCgpCi0gICAgICAgIGV4cGVjdGVkX3dhcm5pbmdzID0gWwotICAgICAgICAgICAgICAgIChvcy5w
YXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnYmxhbmtfd3NoLnB5JykgKwotICAgICAgICAg
ICAgICAgICAnOiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSBpcyBub3QgZGVmaW5lZC4n
KSwKLSAgICAgICAgICAgICAgICAob3MucGF0aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJUiwgJ3N1
YicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9uX2NhbGxhYmxlX3dzaC5weScp
ICsKLSAgICAgICAgICAgICAgICAgJzogd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UgaXMg
bm90IGNhbGxhYmxlLicpLAotICAgICAgICAgICAgICAgIChvcy5wYXRoLmpvaW4oX1RFU1RfSEFO
RExFUlNfRElSLCAnc3ViJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3cm9uZ19o
YW5kc2hha2Vfc2lnX3dzaC5weScpICsKLSAgICAgICAgICAgICAgICAgJzogd2ViX3NvY2tldF9k
b19leHRyYV9oYW5kc2hha2UgaXMgbm90IGRlZmluZWQuJyksCi0gICAgICAgICAgICAgICAgKG9z
LnBhdGguam9pbihfVEVTVF9IQU5ETEVSU19ESVIsICdzdWInLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3dyb25nX3RyYW5zZmVyX3NpZ193c2gucHknKSArCi0gICAgICAgICAgICAg
ICAgICc6IHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YSBpcyBub3QgZGVmaW5lZC4nKSwKLSAgICAg
ICAgICAgICAgICBdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQsIGxlbih3YXJuaW5ncykp
Ci0gICAgICAgIGZvciBleHBlY3RlZCwgYWN0dWFsIGluIHppcChleHBlY3RlZF93YXJuaW5ncywg
d2FybmluZ3MpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGFjdHVh
bCkKLQotICAgIGRlZiB0ZXN0X2RvX2V4dHJhX2hhbmRzaGFrZShzZWxmKToKLSAgICAgICAgZGlz
cGF0Y2hlciA9IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RFU1RfSEFORExFUlNfRElSLCBOb25lKQot
ICAgICAgICByZXF1ZXN0ID0gbW9jay5Nb2NrUmVxdWVzdCgpCi0gICAgICAgIHJlcXVlc3Qud3Nf
cmVzb3VyY2UgPSAnL29yaWdpbl9jaGVjaycKLSAgICAgICAgcmVxdWVzdC53c19vcmlnaW4gPSAn
aHR0cDovL2V4YW1wbGUuY29tJwotICAgICAgICBkaXNwYXRjaGVyLmRvX2V4dHJhX2hhbmRzaGFr
ZShyZXF1ZXN0KSAgIyBNdXN0IG5vdCByYWlzZSBleGNlcHRpb24uCi0KLSAgICAgICAgcmVxdWVz
dC53c19vcmlnaW4gPSAnaHR0cDovL2JhZC5leGFtcGxlLmNvbScKLSAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoRXhjZXB0aW9uLCBkaXNwYXRjaGVyLmRvX2V4dHJhX2hhbmRzaGFrZSwgcmVxdWVz
dCkKLQotICAgIGRlZiB0ZXN0X3RyYW5zZmVyX2RhdGEoc2VsZik6Ci0gICAgICAgIGRpc3BhdGNo
ZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9URVNUX0hBTkRMRVJTX0RJUiwgTm9uZSkKLSAgICAg
ICAgcmVxdWVzdCA9IG1vY2suTW9ja1JlcXVlc3QoY29ubmVjdGlvbj1tb2NrLk1vY2tDb25uKCcn
KSkKLSAgICAgICAgcmVxdWVzdC53c19yZXNvdXJjZSA9ICcvb3JpZ2luX2NoZWNrJwotICAgICAg
ICByZXF1ZXN0LndzX3Byb3RvY29sID0gJ3AxJwotCi0gICAgICAgIGRpc3BhdGNoZXIudHJhbnNm
ZXJfZGF0YShyZXF1ZXN0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdvcmlnaW5fY2hlY2tf
d3NoLnB5IGlzIGNhbGxlZCBmb3IgL29yaWdpbl9jaGVjaywgcDEnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKLQotICAgICAgICBy
ZXF1ZXN0ID0gbW9jay5Nb2NrUmVxdWVzdChjb25uZWN0aW9uPW1vY2suTW9ja0Nvbm4oJycpKQot
ICAgICAgICByZXF1ZXN0LndzX3Jlc291cmNlID0gJy9zdWIvcGxhaW4nCi0gICAgICAgIHJlcXVl
c3Qud3NfcHJvdG9jb2wgPSBOb25lCi0gICAgICAgIGRpc3BhdGNoZXIudHJhbnNmZXJfZGF0YShy
ZXF1ZXN0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdzdWIvcGxhaW5fd3NoLnB5IGlzIGNh
bGxlZCBmb3IgL3N1Yi9wbGFpbiwgTm9uZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVx
dWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQotCi0gICAgICAgIHJlcXVlc3QgPSBtb2Nr
Lk1vY2tSZXF1ZXN0KGNvbm5lY3Rpb249bW9jay5Nb2NrQ29ubignJykpCi0gICAgICAgIHJlcXVl
c3Qud3NfcmVzb3VyY2UgPSAnL3N1Yi9wbGFpbj8nCi0gICAgICAgIHJlcXVlc3Qud3NfcHJvdG9j
b2wgPSBOb25lCi0gICAgICAgIGRpc3BhdGNoZXIudHJhbnNmZXJfZGF0YShyZXF1ZXN0KQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdzdWIvcGxhaW5fd3NoLnB5IGlzIGNhbGxlZCBmb3IgL3N1
Yi9wbGFpbj8sIE5vbmUnLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVj
dGlvbi53cml0dGVuX2RhdGEoKSkKLQotICAgICAgICByZXF1ZXN0ID0gbW9jay5Nb2NrUmVxdWVz
dChjb25uZWN0aW9uPW1vY2suTW9ja0Nvbm4oJycpKQotICAgICAgICByZXF1ZXN0LndzX3Jlc291
cmNlID0gJy9zdWIvcGxhaW4/cT12JwotICAgICAgICByZXF1ZXN0LndzX3Byb3RvY29sID0gTm9u
ZQotICAgICAgICBkaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEocmVxdWVzdCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnc3ViL3BsYWluX3dzaC5weSBpcyBjYWxsZWQgZm9yIC9zdWIvcGxhaW4/
cT12LCBOb25lJywKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24u
d3JpdHRlbl9kYXRhKCkpCi0KLSAgICBkZWYgdGVzdF90cmFuc2Zlcl9kYXRhX25vX2hhbmRsZXIo
c2VsZik6Ci0gICAgICAgIGRpc3BhdGNoZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9URVNUX0hB
TkRMRVJTX0RJUiwgTm9uZSkKLSAgICAgICAgZm9yIHJlc291cmNlIGluIFsnL2JsYW5rJywgJy9z
dWIvbm9uX2NhbGxhYmxlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnL3N1Yi9ub193c2hf
YXRfdGhlX2VuZCcsICcvZG9lcy9ub3QvZXhpc3QnXToKLSAgICAgICAgICAgIHJlcXVlc3QgPSBt
b2NrLk1vY2tSZXF1ZXN0KGNvbm5lY3Rpb249bW9jay5Nb2NrQ29ubignJykpCi0gICAgICAgICAg
ICByZXF1ZXN0LndzX3Jlc291cmNlID0gcmVzb3VyY2UKLSAgICAgICAgICAgIHJlcXVlc3Qud3Nf
cHJvdG9jb2wgPSAncDInCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZGlzcGF0
Y2hlci50cmFuc2Zlcl9kYXRhKHJlcXVlc3QpCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCkK
LSAgICAgICAgICAgIGV4Y2VwdCBkaXNwYXRjaC5EaXNwYXRjaEVycm9yLCBlOgotICAgICAgICAg
ICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHIoZSkuZmluZCgnTm8gaGFuZGxlcicpICE9IC0xKQot
ICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwo
KQotCi0gICAgZGVmIHRlc3RfdHJhbnNmZXJfZGF0YV9oYW5kbGVyX2V4Y2VwdGlvbihzZWxmKToK
LSAgICAgICAgZGlzcGF0Y2hlciA9IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RFU1RfSEFORExFUlNf
RElSLCBOb25lKQotICAgICAgICByZXF1ZXN0ID0gbW9jay5Nb2NrUmVxdWVzdChjb25uZWN0aW9u
PW1vY2suTW9ja0Nvbm4oJycpKQotICAgICAgICByZXF1ZXN0LndzX3Jlc291cmNlID0gJy9zdWIv
ZXhjZXB0aW9uX2luX3RyYW5zZmVyJwotICAgICAgICByZXF1ZXN0LndzX3Byb3RvY29sID0gJ3Az
JwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEocmVx
dWVzdCkKLSAgICAgICAgICAgIHNlbGYuZmFpbCgpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24s
IGU6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RyKGUpLmZpbmQoJ0ludGVudGlvbmFs
JykgIT0gLTEpCi0KLSAgICBkZWYgdGVzdF9zY2FuX2RpcihzZWxmKToKLSAgICAgICAgZGlzcCA9
IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RFU1RfSEFORExFUlNfRElSLCBOb25lKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKDMsIGxlbihkaXNwLl9oYW5kbGVycykpCi0gICAgICAgIHNlbGYuZmFp
bFVubGVzcyhkaXNwLl9oYW5kbGVycy5oYXNfa2V5KCcvb3JpZ2luX2NoZWNrJykpCi0gICAgICAg
IHNlbGYuZmFpbFVubGVzcyhkaXNwLl9oYW5kbGVycy5oYXNfa2V5KCcvc3ViL2V4Y2VwdGlvbl9p
bl90cmFuc2ZlcicpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZGlzcC5faGFuZGxlcnMuaGFz
X2tleSgnL3N1Yi9wbGFpbicpKQotCi0gICAgZGVmIHRlc3Rfc2Nhbl9zdWJfZGlyKHNlbGYpOgot
ICAgICAgICBkaXNwID0gZGlzcGF0Y2guRGlzcGF0Y2hlcihfVEVTVF9IQU5ETEVSU19ESVIsIF9U
RVNUX0hBTkRMRVJTX1NVQl9ESVIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKGRp
c3AuX2hhbmRsZXJzKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoZGlzcC5faGFuZGxlcnMuaGFzX2tl
eSgnL29yaWdpbl9jaGVjaycpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZGlzcC5faGFuZGxl
cnMuaGFzX2tleSgnL3N1Yi9leGNlcHRpb25faW5fdHJhbnNmZXInKSkKLSAgICAgICAgc2VsZi5m
YWlsVW5sZXNzKGRpc3AuX2hhbmRsZXJzLmhhc19rZXkoJy9zdWIvcGxhaW4nKSkKLQotICAgIGRl
ZiB0ZXN0X3NjYW5fc3ViX2Rpcl9hc19yb290KHNlbGYpOgotICAgICAgICBkaXNwID0gZGlzcGF0
Y2guRGlzcGF0Y2hlcihfVEVTVF9IQU5ETEVSU19TVUJfRElSLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfVEVTVF9IQU5ETEVSU19TVUJfRElSKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKDIsIGxlbihkaXNwLl9oYW5kbGVycykpCi0gICAgICAgIHNlbGYuZmFpbElmKGRp
c3AuX2hhbmRsZXJzLmhhc19rZXkoJy9vcmlnaW5fY2hlY2snKSkKLSAgICAgICAgc2VsZi5mYWls
SWYoZGlzcC5faGFuZGxlcnMuaGFzX2tleSgnL3N1Yi9leGNlcHRpb25faW5fdHJhbnNmZXInKSkK
LSAgICAgICAgc2VsZi5mYWlsSWYoZGlzcC5faGFuZGxlcnMuaGFzX2tleSgnL3N1Yi9wbGFpbicp
KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZGlzcC5faGFuZGxlcnMuaGFzX2tleSgnL2V4Y2Vw
dGlvbl9pbl90cmFuc2ZlcicpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZGlzcC5faGFuZGxl
cnMuaGFzX2tleSgnL3BsYWluJykpCi0KLSAgICBkZWYgdGVzdF9zY2FuX2Rpcl9tdXN0X3VuZGVy
X3Jvb3Qoc2VsZik6Ci0gICAgICAgIGRpc3BhdGNoLkRpc3BhdGNoZXIoJ2EvYicsICdhL2IvYycp
ICAjIE9LCi0gICAgICAgIGRpc3BhdGNoLkRpc3BhdGNoZXIoJ2EvYi8vLycsICdhL2InKSAgIyBP
SwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkaXNwYXRjaC5EaXNwYXRjaEVycm9yLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaC5EaXNwYXRjaGVyLCAnYS9iL2MnLCAnYS9i
JykKLQotICAgIGRlZiB0ZXN0X3Jlc291cmNlX3BhdGhfYWxpYXMoc2VsZik6Ci0gICAgICAgIGRp
c3AgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9URVNUX0hBTkRMRVJTX0RJUiwgTm9uZSkKLSAgICAg
ICAgZGlzcC5hZGRfcmVzb3VyY2VfcGF0aF9hbGlhcygnLycsICcvb3JpZ2luX2NoZWNrJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0LCBsZW4oZGlzcC5faGFuZGxlcnMpKQotICAgICAgICBz
ZWxmLmZhaWxVbmxlc3MoZGlzcC5faGFuZGxlcnMuaGFzX2tleSgnL29yaWdpbl9jaGVjaycpKQot
ICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZGlzcC5faGFuZGxlcnMuaGFzX2tleSgnL3N1Yi9leGNl
cHRpb25faW5fdHJhbnNmZXInKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRpc3AuX2hhbmRs
ZXJzLmhhc19rZXkoJy9zdWIvcGxhaW4nKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRpc3Au
X2hhbmRsZXJzLmhhc19rZXkoJy8nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGlzcGF0
Y2guRGlzcGF0Y2hFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcC5hZGRfcmVz
b3VyY2VfcGF0aF9hbGlhcywgJy9hbGlhcycsICcvbm90LWV4aXN0JykKLQotCi1pZiBfX25hbWVf
XyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4oKQotCi0KLSMgdmk6c3RzPTQgc3c9
NCBldApJbmRleDogV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2hhbmRzaGFrZS5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfaGFuZHNo
YWtlLnB5CShyZXZpc2lvbiA1NTI1MykKKysrIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3Qv
dGVzdF9oYW5kc2hha2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNTEzICswLDAgQEAKLSMhL3Vz
ci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KLSMgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0
OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotIiIiVGVzdHMgZm9yIGhh
bmRzaGFrZSBtb2R1bGUuIiIiCi0KLQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWltcG9ydCBjb25maWcg
ICMgVGhpcyBtdXN0IGJlIGltcG9ydGVkIGJlZm9yZSBtb2RfcHl3ZWJzb2NrZXQuCi1mcm9tIG1v
ZF9weXdlYnNvY2tldCBpbXBvcnQgaGFuZHNoYWtlCi0KLWltcG9ydCBtb2NrCi0KLQotX0dPT0Rf
UkVRVUVTVCA9ICgKLSAgICA4MCwKLSAgICAnL2RlbW8nLAotICAgIHsKLSAgICAgICAgJ1VwZ3Jh
ZGUnOidXZWJTb2NrZXQnLAotICAgICAgICAnQ29ubmVjdGlvbic6J1VwZ3JhZGUnLAotICAgICAg
ICAnSG9zdCc6J2V4YW1wbGUuY29tJywKLSAgICAgICAgJ09yaWdpbic6J2h0dHA6Ly9leGFtcGxl
LmNvbScsCi0gICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2wnOidzYW1wbGUnLAotICAgIH0KLSkK
LQotX0dPT0RfUkVTUE9OU0VfREVGQVVMVF9QT1JUID0gKAotICAgICdIVFRQLzEuMSAxMDEgV2Vi
IFNvY2tldCBQcm90b2NvbCBIYW5kc2hha2VcclxuJwotICAgICdVcGdyYWRlOiBXZWJTb2NrZXRc
clxuJwotICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicKLSAgICAnV2ViU29ja2V0LU9yaWdp
bjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicKLSAgICAnV2ViU29ja2V0LUxvY2F0aW9uOiB3czov
L2V4YW1wbGUuY29tL2RlbW9cclxuJwotICAgICdXZWJTb2NrZXQtUHJvdG9jb2w6IHNhbXBsZVxy
XG4nCi0gICAgJ1xyXG4nKQotCi1fR09PRF9SRVNQT05TRV9TRUNVUkUgPSAoCi0gICAgJ0hUVFAv
MS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nCi0gICAgJ1VwZ3JhZGU6
IFdlYlNvY2tldFxyXG4nCi0gICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJwotICAgICdXZWJT
b2NrZXQtT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJwotICAgICdXZWJTb2NrZXQtTG9j
YXRpb246IHdzczovL2V4YW1wbGUuY29tL2RlbW9cclxuJwotICAgICdXZWJTb2NrZXQtUHJvdG9j
b2w6IHNhbXBsZVxyXG4nCi0gICAgJ1xyXG4nKQotCi1fR09PRF9SRVFVRVNUX05PTkRFRkFVTFRf
UE9SVCA9ICgKLSAgICA4MDgxLAotICAgICcvZGVtbycsCi0gICAgewotICAgICAgICAnVXBncmFk
ZSc6J1dlYlNvY2tldCcsCi0gICAgICAgICdDb25uZWN0aW9uJzonVXBncmFkZScsCi0gICAgICAg
ICdIb3N0JzonZXhhbXBsZS5jb206ODA4MScsCi0gICAgICAgICdPcmlnaW4nOidodHRwOi8vZXhh
bXBsZS5jb20nLAotICAgICAgICAnV2ViU29ja2V0LVByb3RvY29sJzonc2FtcGxlJywKLSAgICB9
Ci0pCi0KLV9HT09EX1JFU1BPTlNFX05PTkRFRkFVTFRfUE9SVCA9ICgKLSAgICAnSFRUUC8xLjEg
MTAxIFdlYiBTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicKLSAgICAnVXBncmFkZTogV2Vi
U29ja2V0XHJcbicKLSAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nCi0gICAgJ1dlYlNvY2tl
dC1PcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nCi0gICAgJ1dlYlNvY2tldC1Mb2NhdGlv
bjogd3M6Ly9leGFtcGxlLmNvbTo4MDgxL2RlbW9cclxuJwotICAgICdXZWJTb2NrZXQtUHJvdG9j
b2w6IHNhbXBsZVxyXG4nCi0gICAgJ1xyXG4nKQotCi1fR09PRF9SRVNQT05TRV9TRUNVUkVfTk9O
REVGID0gKAotICAgICdIVFRQLzEuMSAxMDEgV2ViIFNvY2tldCBQcm90b2NvbCBIYW5kc2hha2Vc
clxuJwotICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJwotICAgICdDb25uZWN0aW9uOiBVcGdy
YWRlXHJcbicKLSAgICAnV2ViU29ja2V0LU9yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicK
LSAgICAnV2ViU29ja2V0LUxvY2F0aW9uOiB3c3M6Ly9leGFtcGxlLmNvbTo4MDgxL2RlbW9cclxu
JwotICAgICdXZWJTb2NrZXQtUHJvdG9jb2w6IHNhbXBsZVxyXG4nCi0gICAgJ1xyXG4nKQotCi1f
R09PRF9SRVFVRVNUX05PX1BST1RPQ09MID0gKAotICAgIDgwLAotICAgICcvZGVtbycsCi0gICAg
ewotICAgICAgICAnVXBncmFkZSc6J1dlYlNvY2tldCcsCi0gICAgICAgICdDb25uZWN0aW9uJzon
VXBncmFkZScsCi0gICAgICAgICdIb3N0JzonZXhhbXBsZS5jb20nLAotICAgICAgICAnT3JpZ2lu
JzonaHR0cDovL2V4YW1wbGUuY29tJywKLSAgICB9Ci0pCi0KLV9HT09EX1JFU1BPTlNFX05PX1BS
T1RPQ09MID0gKAotICAgICdIVFRQLzEuMSAxMDEgV2ViIFNvY2tldCBQcm90b2NvbCBIYW5kc2hh
a2VcclxuJwotICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJwotICAgICdDb25uZWN0aW9uOiBV
cGdyYWRlXHJcbicKLSAgICAnV2ViU29ja2V0LU9yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJc
bicKLSAgICAnV2ViU29ja2V0LUxvY2F0aW9uOiB3czovL2V4YW1wbGUuY29tL2RlbW9cclxuJwot
ICAgICdcclxuJykKLQotX0dPT0RfUkVRVUVTVF9XSVRIX09QVElPTkFMX0hFQURFUlMgPSAoCi0g
ICAgODAsCi0gICAgJy9kZW1vJywKLSAgICB7Ci0gICAgICAgICdVcGdyYWRlJzonV2ViU29ja2V0
JywKLSAgICAgICAgJ0Nvbm5lY3Rpb24nOidVcGdyYWRlJywKLSAgICAgICAgJ0hvc3QnOidleGFt
cGxlLmNvbScsCi0gICAgICAgICdPcmlnaW4nOidodHRwOi8vZXhhbXBsZS5jb20nLAotICAgICAg
ICAnV2ViU29ja2V0LVByb3RvY29sJzonc2FtcGxlJywKLSAgICAgICAgJ0FLZXknOidBVmFsdWUn
LAotICAgICAgICAnRW1wdHlWYWx1ZSc6JycsCi0gICAgfQotKQotCi1fQkFEX1JFUVVFU1RTID0g
KAotICAgICggICMgSFRUUCByZXF1ZXN0Ci0gICAgICAgIDgwLAotICAgICAgICAnL2RlbW8nLAot
ICAgICAgICB7Ci0gICAgICAgICAgICAnSG9zdCc6J3d3dy5nb29nbGUuY29tJywKLSAgICAgICAg
ICAgICdVc2VyLUFnZW50JzonTW96aWxsYS81LjAgKE1hY2ludG9zaDsgVTsgSW50ZWwgTWFjIE9T
IFggMTAuNTsnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyBlbi1VUzsgcnY6MS45LjEuMykg
R2Vja28vMjAwOTA4MjQgRmlyZWZveC8zLjUuMycKLSAgICAgICAgICAgICAgICAgICAgICAgICAn
IEdUQjYgR1RCQScsCi0gICAgICAgICAgICAnQWNjZXB0JzondGV4dC9odG1sLGFwcGxpY2F0aW9u
L3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksJwotICAgICAgICAgICAgICAgICAgICAg
JyovKjtxPTAuOCcsCi0gICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzonZW4tdXMsZW47cT0w
LjUnLAotICAgICAgICAgICAgJ0FjY2VwdC1FbmNvZGluZyc6J2d6aXAsZGVmbGF0ZScsCi0gICAg
ICAgICAgICAnQWNjZXB0LUNoYXJzZXQnOidJU08tODg1OS0xLHV0Zi04O3E9MC43LCo7cT0wLjcn
LAotICAgICAgICAgICAgJ0tlZXAtQWxpdmUnOiczMDAnLAotICAgICAgICAgICAgJ0Nvbm5lY3Rp
b24nOidrZWVwLWFsaXZlJywKLSAgICAgICAgfQotICAgICksCi0gICAgKCAgIyBNaXNzaW5nIFVw
Z3JhZGUKLSAgICAgICAgODAsCi0gICAgICAgICcvZGVtbycsCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICdDb25uZWN0aW9uJzonVXBncmFkZScsCi0gICAgICAgICAgICAnSG9zdCc6J2V4YW1wbGUu
Y29tJywKLSAgICAgICAgICAgICdPcmlnaW4nOidodHRwOi8vZXhhbXBsZS5jb20nLAotICAgICAg
ICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6J3NhbXBsZScsCi0gICAgICAgIH0KLSAgICApLAot
ICAgICggICMgV3JvbmcgVXBncmFkZQotICAgICAgICA4MCwKLSAgICAgICAgJy9kZW1vJywKLSAg
ICAgICAgewotICAgICAgICAgICAgJ1VwZ3JhZGUnOidOb25XZWJTb2NrZXQnLAotICAgICAgICAg
ICAgJ0Nvbm5lY3Rpb24nOidVcGdyYWRlJywKLSAgICAgICAgICAgICdIb3N0JzonZXhhbXBsZS5j
b20nLAotICAgICAgICAgICAgJ09yaWdpbic6J2h0dHA6Ly9leGFtcGxlLmNvbScsCi0gICAgICAg
ICAgICAnV2ViU29ja2V0LVByb3RvY29sJzonc2FtcGxlJywKLSAgICAgICAgfQotICAgICksCi0g
ICAgKCAgIyBFbXB0eSBXZWJTb2NrZXQtUHJvdG9jb2wKLSAgICAgICAgODAsCi0gICAgICAgICcv
ZGVtbycsCi0gICAgICAgIHsKLSAgICAgICAgICAgICdVcGdyYWRlJzonV2ViU29ja2V0JywKLSAg
ICAgICAgICAgICdDb25uZWN0aW9uJzonVXBncmFkZScsCi0gICAgICAgICAgICAnSG9zdCc6J2V4
YW1wbGUuY29tJywKLSAgICAgICAgICAgICdPcmlnaW4nOidodHRwOi8vZXhhbXBsZS5jb20nLAot
ICAgICAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6JycsCi0gICAgICAgIH0KLSAgICApLAot
ICAgICggICMgV3JvbmcgcG9ydCBudW1iZXIgZm9ybWF0Ci0gICAgICAgIDgwLAotICAgICAgICAn
L2RlbW8nLAotICAgICAgICB7Ci0gICAgICAgICAgICAnVXBncmFkZSc6J1dlYlNvY2tldCcsCi0g
ICAgICAgICAgICAnQ29ubmVjdGlvbic6J1VwZ3JhZGUnLAotICAgICAgICAgICAgJ0hvc3QnOidl
eGFtcGxlLmNvbToweDUwJywKLSAgICAgICAgICAgICdPcmlnaW4nOidodHRwOi8vZXhhbXBsZS5j
b20nLAotICAgICAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6J3NhbXBsZScsCi0gICAgICAg
IH0KLSAgICApLAotICAgICggICMgSGVhZGVyL2Nvbm5lY3Rpb24gcG9ydCBtaXNtYXRjaAotICAg
ICAgICA4MDgwLAotICAgICAgICAnL2RlbW8nLAotICAgICAgICB7Ci0gICAgICAgICAgICAnVXBn
cmFkZSc6J1dlYlNvY2tldCcsCi0gICAgICAgICAgICAnQ29ubmVjdGlvbic6J1VwZ3JhZGUnLAot
ICAgICAgICAgICAgJ0hvc3QnOidleGFtcGxlLmNvbScsCi0gICAgICAgICAgICAnT3JpZ2luJzon
aHR0cDovL2V4YW1wbGUuY29tJywKLSAgICAgICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2wnOidz
YW1wbGUnLAotICAgICAgICB9Ci0gICAgKSwKLSAgICAoICAjIElsbGVnYWwgV2ViU29ja2V0LVBy
b3RvY29sCi0gICAgICAgIDgwLAotICAgICAgICAnL2RlbW8nLAotICAgICAgICB7Ci0gICAgICAg
ICAgICAnVXBncmFkZSc6J1dlYlNvY2tldCcsCi0gICAgICAgICAgICAnQ29ubmVjdGlvbic6J1Vw
Z3JhZGUnLAotICAgICAgICAgICAgJ0hvc3QnOidleGFtcGxlLmNvbScsCi0gICAgICAgICAgICAn
T3JpZ2luJzonaHR0cDovL2V4YW1wbGUuY29tJywKLSAgICAgICAgICAgICdXZWJTb2NrZXQtUHJv
dG9jb2wnOidpbGxlZ2FsXHgwOXByb3RvY29sJywKLSAgICAgICAgfQotICAgICksCi0pCi0KLV9T
VFJJQ1RMWV9HT09EX1JFUVVFU1RTID0gKAotICAgICgKLSAgICAgICAgJ0dFVCAvZGVtbyBIVFRQ
LzEuMVxyXG4nLAotICAgICAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicsCi0gICAgICAgICdD
b25uZWN0aW9uOiBVcGdyYWRlXHJcbicsCi0gICAgICAgICdIb3N0OiBleGFtcGxlLmNvbVxyXG4n
LAotICAgICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJywKLSAgICAgICAgJ1xy
XG4nLAotICAgICksCi0gICAgKCAgIyBXZWJTb2NrZXQtUHJvdG9jb2wKLSAgICAgICAgJ0dFVCAv
ZGVtbyBIVFRQLzEuMVxyXG4nLAotICAgICAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicsCi0g
ICAgICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicsCi0gICAgICAgICdIb3N0OiBleGFtcGxl
LmNvbVxyXG4nLAotICAgICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJywKLSAg
ICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbDogc2FtcGxlXHJcbicsCi0gICAgICAgICdcclxuJywK
LSAgICApLAotICAgICggICMgV2ViU29ja2V0LVByb3RvY29sIGFuZCBDb29raWUKLSAgICAgICAg
J0dFVCAvZGVtbyBIVFRQLzEuMVxyXG4nLAotICAgICAgICAnVXBncmFkZTogV2ViU29ja2V0XHJc
bicsCi0gICAgICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicsCi0gICAgICAgICdIb3N0OiBl
eGFtcGxlLmNvbVxyXG4nLAotICAgICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxu
JywKLSAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbDogc2FtcGxlXHJcbicsCi0gICAgICAgICdD
b29raWU6IHh5elxyXG4nCi0gICAgICAgICdcclxuJywKLSAgICApLAotICAgICggICMgQ29va2ll
Ci0gICAgICAgICdHRVQgL2RlbW8gSFRUUC8xLjFcclxuJywKLSAgICAgICAgJ1VwZ3JhZGU6IFdl
YlNvY2tldFxyXG4nLAotICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nLAotICAgICAg
ICAnSG9zdDogZXhhbXBsZS5jb21cclxuJywKLSAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4YW1w
bGUuY29tXHJcbicsCi0gICAgICAgICdDb29raWU6IGFiYy94eXpcclxuJwotICAgICAgICAnQ29v
a2llMjogJFZlcnNpb249MVxyXG4nCi0gICAgICAgICdDb29raWU6IGFiY1xyXG4nCi0gICAgICAg
ICdcclxuJywKLSAgICApLAotICAgICgKLSAgICAgICAgJ0dFVCAvIEhUVFAvMS4xXHJcbicsCi0g
ICAgICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywKLSAgICAgICAgJ0Nvbm5lY3Rpb246IFVw
Z3JhZGVcclxuJywKLSAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCi0gICAgICAgICdP
cmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAotICAgICAgICAnXHJcbicsCi0gICAgKSwK
LSkKLQotX05PVF9TVFJJQ1RMWV9HT09EX1JFUVVFU1RTID0gKAotICAgICggICMgRXh0cmEgc3Bh
Y2UgYWZ0ZXIgR0VUCi0gICAgICAgICdHRVQgIC9kZW1vIEhUVFAvMS4xXHJcbicsCi0gICAgICAg
ICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywKLSAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVc
clxuJywKLSAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCi0gICAgICAgICdPcmlnaW46
IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAotICAgICAgICAnXHJcbicsCi0gICAgKSwKLSAgICAo
ICAjIFJlc291cmNlIG5hbWUgZG9lc24ndCBzdGF0IHdpdGggJy8nCi0gICAgICAgICdHRVQgZGVt
byBIVFRQLzEuMVxyXG4nLAotICAgICAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicsCi0gICAg
ICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicsCi0gICAgICAgICdIb3N0OiBleGFtcGxlLmNv
bVxyXG4nLAotICAgICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJywKLSAgICAg
ICAgJ1xyXG4nLAotICAgICksCi0gICAgKCAgIyBObyBzcGFjZSBhZnRlciA6Ci0gICAgICAgICdH
RVQgL2RlbW8gSFRUUC8xLjFcclxuJywKLSAgICAgICAgJ1VwZ3JhZGU6V2ViU29ja2V0XHJcbics
Ci0gICAgICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicsCi0gICAgICAgICdIb3N0OiBleGFt
cGxlLmNvbVxyXG4nLAotICAgICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJywK
LSAgICAgICAgJ1xyXG4nLAotICAgICksCi0gICAgKCAgIyBMb3dlciBjYXNlIFVwZ3JhZGUgaGVh
ZGVyCi0gICAgICAgICdHRVQgL2RlbW8gSFRUUC8xLjFcclxuJywKLSAgICAgICAgJ3VwZ3JhZGU6
IFdlYlNvY2tldFxyXG4nLAotICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nLAotICAg
ICAgICAnSG9zdDogZXhhbXBsZS5jb21cclxuJywKLSAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4
YW1wbGUuY29tXHJcbicsCi0gICAgICAgICdcclxuJywKLSAgICApLAotICAgICggICMgQ29ubmVj
dGlvbiBjb21lcyBiZWZvcmUgVXBncmFkZQotICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4xXHJc
bicsCi0gICAgICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicsCi0gICAgICAgICdVcGdyYWRl
OiBXZWJTb2NrZXRcclxuJywKLSAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCi0gICAg
ICAgICdPcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAotICAgICAgICAnXHJcbicsCi0g
ICAgKSwKLSAgICAoICAjIE9yaWdpbiBjb21lcyBiZWZvcmUgSG9zdAotICAgICAgICAnR0VUIC9k
ZW1vIEhUVFAvMS4xXHJcbicsCi0gICAgICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywKLSAg
ICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJywKLSAgICAgICAgJ09yaWdpbjogaHR0cDov
L2V4YW1wbGUuY29tXHJcbicsCi0gICAgICAgICdIb3N0OiBleGFtcGxlLmNvbVxyXG4nLAotICAg
ICAgICAnXHJcbicsCi0gICAgKSwKLSAgICAoICAjIEhvc3QgY29udGludWVkIHRvIHRoZSBuZXh0
IGxpbmUKLSAgICAgICAgJ0dFVCAvZGVtbyBIVFRQLzEuMVxyXG4nLAotICAgICAgICAnVXBncmFk
ZTogV2ViU29ja2V0XHJcbicsCi0gICAgICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicsCi0g
ICAgICAgICdIb3N0OiBleGFtcGxlXHJcbicsCi0gICAgICAgICcgLmNvbVxyXG4nLAotICAgICAg
ICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJywKLSAgICAgICAgJ1xyXG4nLAotICAg
ICksCi0gICAgKCAjIENvb2tpZSBjb21lcyBiZWZvcmUgV2ViU29ja2V0LVByb3RvY29sCi0gICAg
ICAgICdHRVQgL2RlbW8gSFRUUC8xLjFcclxuJywKLSAgICAgICAgJ1VwZ3JhZGU6IFdlYlNvY2tl
dFxyXG4nLAotICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nLAotICAgICAgICAnSG9z
dDogZXhhbXBsZS5jb21cclxuJywKLSAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4YW1wbGUuY29t
XHJcbicsCi0gICAgICAgICdDb29raWU6IHh5elxyXG4nCi0gICAgICAgICdXZWJTb2NrZXQtUHJv
dG9jb2w6IHNhbXBsZVxyXG4nLAotICAgICAgICAnXHJcbicsCi0gICAgKSwKLSAgICAoICAjIFVu
a25vd24gaGVhZGVyCi0gICAgICAgICdHRVQgL2RlbW8gSFRUUC8xLjFcclxuJywKLSAgICAgICAg
J1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nLAotICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxy
XG4nLAotICAgICAgICAnSG9zdDogZXhhbXBsZS5jb21cclxuJywKLSAgICAgICAgJ09yaWdpbjog
aHR0cDovL2V4YW1wbGUuY29tXHJcbicsCi0gICAgICAgICdDb250ZW50LVR5cGU6IHRleHQvaHRt
bFxyXG4nCi0gICAgICAgICdcclxuJywKLSAgICApLAotICAgICggICMgQ29va2llIHdpdGggY29u
dGludWF0aW9uIGxpbmVzCi0gICAgICAgICdHRVQgL2RlbW8gSFRUUC8xLjFcclxuJywKLSAgICAg
ICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nLAotICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFk
ZVxyXG4nLAotICAgICAgICAnSG9zdDogZXhhbXBsZS5jb21cclxuJywKLSAgICAgICAgJ09yaWdp
bjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicsCi0gICAgICAgICdDb29raWU6IHh5elxyXG4nLAot
ICAgICAgICAnIGFiY1xyXG4nLAotICAgICAgICAnIGRlZmdcclxuJywKLSAgICAgICAgJ1xyXG4n
LAotICAgICksCi0gICAgKCAgIyBXcm9uZy1jYXNlIGNvb2tpZQotICAgICAgICAnR0VUIC9kZW1v
IEhUVFAvMS4xXHJcbicsCi0gICAgICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywKLSAgICAg
ICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJywKLSAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29t
XHJcbicsCi0gICAgICAgICdPcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAotICAgICAg
ICAnY29va2llOiBhYmMveHl6XHJcbicKLSAgICAgICAgJ1xyXG4nLAotICAgICksCi0gICAgKCAg
IyBDb29raWUsIG5vIHNwYWNlIGFmdGVyIGNvbG9uCi0gICAgICAgICdHRVQgL2RlbW8gSFRUUC8x
LjFcclxuJywKLSAgICAgICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nLAotICAgICAgICAnQ29u
bmVjdGlvbjogVXBncmFkZVxyXG4nLAotICAgICAgICAnSG9zdDogZXhhbXBsZS5jb21cclxuJywK
LSAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicsCi0gICAgICAgICdDb29r
aWU6YWJjL3h5elxyXG4nCi0gICAgICAgICdcclxuJywKLSAgICApLAotKQotCi0KLWRlZiBfY3Jl
YXRlX3JlcXVlc3QocmVxdWVzdF9kZWYpOgotICAgIGNvbm4gPSBtb2NrLk1vY2tDb25uKCcnKQot
ICAgIGNvbm4ubG9jYWxfYWRkciA9ICgnMC4wLjAuMCcsIHJlcXVlc3RfZGVmWzBdKQotICAgIHJl
dHVybiBtb2NrLk1vY2tSZXF1ZXN0KAotICAgICAgICAgICAgdXJpPXJlcXVlc3RfZGVmWzFdLAot
ICAgICAgICAgICAgaGVhZGVyc19pbj1yZXF1ZXN0X2RlZlsyXSwKLSAgICAgICAgICAgIGNvbm5l
Y3Rpb249Y29ubikKLQotCi1kZWYgX2NyZWF0ZV9nZXRfbWVtb3JpemVkX2xpbmVzKGxpbmVzKToK
LSAgICBkZWYgZ2V0X21lbW9yaXplZF9saW5lcygpOgotICAgICAgICByZXR1cm4gbGluZXMKLSAg
ICByZXR1cm4gZ2V0X21lbW9yaXplZF9saW5lcwotCi0KLWRlZiBfY3JlYXRlX3JlcXVlc3RzX3dp
dGhfbGluZXMocmVxdWVzdF9saW5lc19zZXQpOgotICAgIHJlcXVlc3RzID0gW10KLSAgICBmb3Ig
bGluZXMgaW4gcmVxdWVzdF9saW5lc19zZXQ6Ci0gICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3Jl
cXVlc3QoX0dPT0RfUkVRVUVTVCkKLSAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLmdldF9tZW1v
cml6ZWRfbGluZXMgPSBfY3JlYXRlX2dldF9tZW1vcml6ZWRfbGluZXMoCi0gICAgICAgICAgICAg
ICAgbGluZXMpCi0gICAgICAgIHJlcXVlc3RzLmFwcGVuZChyZXF1ZXN0KQotICAgIHJldHVybiBy
ZXF1ZXN0cwotCi0KLWNsYXNzIEhhbmRzaGFrZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAg
ICBkZWYgdGVzdF92YWxpZGF0ZV9wcm90b2NvbChzZWxmKToKLSAgICAgICAgaGFuZHNoYWtlLl92
YWxpZGF0ZV9wcm90b2NvbCgnc2FtcGxlJykgICMgc2hvdWxkIHN1Y2NlZWQuCi0gICAgICAgIGhh
bmRzaGFrZS5fdmFsaWRhdGVfcHJvdG9jb2woJ1NhbXBsZScpICAjIHNob3VsZCBzdWNjZWVkLgot
ICAgICAgICBoYW5kc2hha2UuX3ZhbGlkYXRlX3Byb3RvY29sKCdzYW1wbGVceDIwcHJvdG9jb2wn
KSAgIyBzaG91bGQgc3VjY2VlZC4KLSAgICAgICAgaGFuZHNoYWtlLl92YWxpZGF0ZV9wcm90b2Nv
bCgnc2FtcGxlXHg3ZXByb3RvY29sJykgICMgc2hvdWxkIHN1Y2NlZWQuCi0gICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKGhhbmRzaGFrZS5IYW5kc2hha2VFcnJvciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGFuZHNoYWtlLl92YWxpZGF0ZV9wcm90b2NvbCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGhhbmRzaGFrZS5IYW5kc2hh
a2VFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZHNoYWtlLl92YWxpZGF0ZV9w
cm90b2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhbXBsZVx4MTlwcm90b2NvbCcp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGhhbmRzaGFrZS5IYW5kc2hha2VFcnJvciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGFuZHNoYWtlLl92YWxpZGF0ZV9wcm90b2NvbCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3NhbXBsZVx4N2Zwcm90b2NvbCcpCi0gICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKGhhbmRzaGFrZS5IYW5kc2hha2VFcnJvciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGFuZHNoYWtlLl92YWxpZGF0ZV9wcm90b2NvbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIyAiSmFwYW4iIGluIEphcGFuZXNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIHUnXHU2NWU1XHU2NzJjJykKLQotICAgIGRlZiB0ZXN0X2dvb2RfcmVxdWVzdF9kZWZhdWx0
X3BvcnQoc2VsZik6Ci0gICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoX0dPT0RfUkVR
VUVTVCkKLSAgICAgICAgaGFuZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3Qs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLk1vY2tEaXNw
YXRjaGVyKCkpCi0gICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChfR09PRF9SRVNQT05TRV9ERUZBVUxUX1BPUlQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCcvZGVtbycsIHJlcXVlc3Qud3NfcmVzb3VyY2UpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJ2h0dHA6Ly9leGFtcGxlLmNvbScsIHJlcXVlc3Qud3Nfb3JpZ2luKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd3czovL2V4YW1wbGUuY29tL2RlbW8nLCByZXF1ZXN0
LndzX2xvY2F0aW9uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdzYW1wbGUnLCByZXF1ZXN0
LndzX3Byb3RvY29sKQotCi0gICAgZGVmIHRlc3RfZ29vZF9yZXF1ZXN0X3NlY3VyZV9kZWZhdWx0
X3BvcnQoc2VsZik6Ci0gICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoX0dPT0RfUkVR
VUVTVCkKLSAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLmxvY2FsX2FkZHIgPSAoJzAuMC4wLjAn
LCA0NDMpCi0gICAgICAgIHJlcXVlc3QuaXNfaHR0cHNfID0gVHJ1ZQotICAgICAgICBoYW5kc2hh
a2VyID0gaGFuZHNoYWtlLkhhbmRzaGFrZXIocmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKLSAgICAgICAgaGFu
ZHNoYWtlci5kb19oYW5kc2hha2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9HT09EX1JF
U1BPTlNFX1NFQ1VSRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rp
b24ud3JpdHRlbl9kYXRhKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NhbXBsZScsIHJl
cXVlc3Qud3NfcHJvdG9jb2wpCi0KLSAgICBkZWYgdGVzdF9nb29kX3JlcXVlc3Rfbm9uZGVmYXVs
dF9wb3J0KHNlbGYpOgotICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KF9HT09EX1JF
UVVFU1RfTk9OREVGQVVMVF9QT1JUKQotICAgICAgICBoYW5kc2hha2VyID0gaGFuZHNoYWtlLkhh
bmRzaGFrZXIocmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKLSAgICAgICAgaGFuZHNoYWtlci5kb19oYW5kc2hh
a2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9HT09EX1JFU1BPTlNFX05PTkRFRkFVTFRf
UE9SVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRl
bl9kYXRhKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NhbXBsZScsIHJlcXVlc3Qud3Nf
cHJvdG9jb2wpCi0KLSAgICBkZWYgdGVzdF9nb29kX3JlcXVlc3Rfc2VjdXJlX25vbl9kZWZhdWx0
X3BvcnQoc2VsZik6Ci0gICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoX0dPT0RfUkVR
VUVTVF9OT05ERUZBVUxUX1BPUlQpCi0gICAgICAgIHJlcXVlc3QuaXNfaHR0cHNfID0gVHJ1ZQot
ICAgICAgICBoYW5kc2hha2VyID0gaGFuZHNoYWtlLkhhbmRzaGFrZXIocmVxdWVzdCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIo
KSkKLSAgICAgICAgaGFuZHNoYWtlci5kb19oYW5kc2hha2UoKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKF9HT09EX1JFU1BPTlNFX1NFQ1VSRV9OT05ERUYsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCdzYW1wbGUnLCByZXF1ZXN0LndzX3Byb3RvY29sKQotCi0gICAgZGVmIHRlc3Rf
Z29vZF9yZXF1ZXN0X2RlZmF1bHRfbm9fcHJvdG9jb2woc2VsZik6Ci0gICAgICAgIHJlcXVlc3Qg
PSBfY3JlYXRlX3JlcXVlc3QoX0dPT0RfUkVRVUVTVF9OT19QUk9UT0NPTCkKLSAgICAgICAgaGFu
ZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3QsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCi0gICAgICAg
IGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfR09P
RF9SRVNQT05TRV9OT19QUk9UT0NPTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0
LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9u
ZSwgcmVxdWVzdC53c19wcm90b2NvbCkKLQotICAgIGRlZiB0ZXN0X2dvb2RfcmVxdWVzdF9vcHRp
b25hbF9oZWFkZXJzKHNlbGYpOgotICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KF9H
T09EX1JFUVVFU1RfV0lUSF9PUFRJT05BTF9IRUFERVJTKQotICAgICAgICBoYW5kc2hha2VyID0g
aGFuZHNoYWtlLkhhbmRzaGFrZXIocmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKLSAgICAgICAgaGFuZHNoYWtl
ci5kb19oYW5kc2hha2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdBVmFsdWUnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVyc19pblsnQUtleSddKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCcnLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qu
aGVhZGVyc19pblsnRW1wdHlWYWx1ZSddKQotCi0gICAgZGVmIHRlc3RfYmFkX3JlcXVlc3RzKHNl
bGYpOgotICAgICAgICBmb3IgcmVxdWVzdCBpbiBtYXAoX2NyZWF0ZV9yZXF1ZXN0LCBfQkFEX1JF
UVVFU1RTKToKLSAgICAgICAgICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihy
ZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1v
Y2suTW9ja0Rpc3BhdGNoZXIoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGhhbmRz
aGFrZS5IYW5kc2hha2VFcnJvciwgaGFuZHNoYWtlci5kb19oYW5kc2hha2UpCi0KLSAgICBkZWYg
dGVzdF9zdHJpY3RseV9nb29kX3JlcXVlc3RzKHNlbGYpOgotICAgICAgICBmb3IgcmVxdWVzdCBp
biBfY3JlYXRlX3JlcXVlc3RzX3dpdGhfbGluZXMoX1NUUklDVExZX0dPT0RfUkVRVUVTVFMpOgot
ICAgICAgICAgICAgc3RyaWN0X2hhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1
ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtb2NrLk1vY2tEaXNwYXRjaGVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRydWUpCi0gICAgICAgICAgICBzdHJpY3RfaGFuZHNoYWtl
ci5kb19oYW5kc2hha2UoKQotCi0gICAgZGVmIHRlc3Rfbm90X3N0cmljdGx5X2dvb2RfcmVxdWVz
dHMoc2VsZik6Ci0gICAgICAgIGZvciByZXF1ZXN0IGluIF9jcmVhdGVfcmVxdWVzdHNfd2l0aF9s
aW5lcyhfTk9UX1NUUklDVExZX0dPT0RfUkVRVUVTVFMpOgotICAgICAgICAgICAgc3RyaWN0X2hh
bmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLk1vY2tEaXNwYXRjaGVy
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRydWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhoYW5kc2hha2UuSGFuZHNoYWtl
RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpY3RfaGFuZHNoYWtlci5k
b19oYW5kc2hha2UpCi0KLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0
ZXN0Lm1haW4oKQotCi0KLSMgdmk6c3RzPTQgc3c9NCBldApJbmRleDogV2ViS2l0VG9vbHMvcHl3
ZWJzb2NrZXQvdGVzdC90ZXN0X21lbW9yaXppbmdmaWxlLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9tZW1vcml6aW5nZmlsZS5weQkocmV2aXNpb24g
NTUyNTMpCisrKyBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbWVtb3JpemluZ2Zp
bGUucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNzIgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCi0jCi0jIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgotIyBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJp
YnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi0iIiJUZXN0cyBmb3IgbWVtb3JpemluZ2ZpbGUg
bW9kdWxlLiIiIgotCi0KLWltcG9ydCBTdHJpbmdJTwotaW1wb3J0IHVuaXR0ZXN0Ci0KLWltcG9y
dCBjb25maWcgICMgVGhpcyBtdXN0IGJlIGltcG9ydGVkIGJlZm9yZSBtb2RfcHl3ZWJzb2NrZXQu
Ci1mcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgbWVtb3JpemluZ2ZpbGUKLQotCi1jbGFzcyBV
dGlsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIGNoZWNrKHNlbGYsIG1lbW9yaXpp
bmdfZmlsZSwgbnVtX3JlYWQsIGV4cGVjdGVkX2xpc3QpOgotICAgICAgICBmb3IgdW51c2VkIGlu
IHJhbmdlKG51bV9yZWFkKToKLSAgICAgICAgICAgIG1lbW9yaXppbmdfZmlsZS5yZWFkbGluZSgp
Ci0gICAgICAgIGFjdHVhbF9saXN0ID0gbWVtb3JpemluZ19maWxlLmdldF9tZW1vcml6ZWRfbGlu
ZXMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihleHBlY3RlZF9saXN0KSwgbGVuKGFj
dHVhbF9saXN0KSkKLSAgICAgICAgZm9yIGV4cGVjdGVkLCBhY3R1YWwgaW4gemlwKGV4cGVjdGVk
X2xpc3QsIGFjdHVhbF9saXN0KToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0
ZWQsIGFjdHVhbCkKLQotICAgIGRlZiB0ZXN0X2dldF9tZW1vcml6ZWRfbGluZXMoc2VsZik6Ci0g
ICAgICAgIG1lbW9yaXppbmdfZmlsZSA9IG1lbW9yaXppbmdmaWxlLk1lbW9yaXppbmdGaWxlKFN0
cmluZ0lPLlN0cmluZ0lPKAotICAgICAgICAgICAgICAgICdIZWxsb1xuV29ybGRcbldlbGNvbWUn
KSkKLSAgICAgICAgc2VsZi5jaGVjayhtZW1vcml6aW5nX2ZpbGUsIDMsIFsnSGVsbG9cbicsICdX
b3JsZFxuJywgJ1dlbGNvbWUnXSkKLQotICAgIGRlZiB0ZXN0X2dldF9tZW1vcml6ZWRfbGluZXNf
bGltaXRfbWVtb3JpemVkX2xpbmVzKHNlbGYpOgotICAgICAgICBtZW1vcml6aW5nX2ZpbGUgPSBt
ZW1vcml6aW5nZmlsZS5NZW1vcml6aW5nRmlsZShTdHJpbmdJTy5TdHJpbmdJTygKLSAgICAgICAg
ICAgICAgICAnSGVsbG9cbldvcmxkXG5XZWxjb21lJyksIDIpCi0gICAgICAgIHNlbGYuY2hlY2so
bWVtb3JpemluZ19maWxlLCAzLCBbJ0hlbGxvXG4nLCAnV29ybGRcbiddKQotCi0gICAgZGVmIHRl
c3RfZ2V0X21lbW9yaXplZF9saW5lc19lbXB0eV9maWxlKHNlbGYpOgotICAgICAgICBtZW1vcml6
aW5nX2ZpbGUgPSBtZW1vcml6aW5nZmlsZS5NZW1vcml6aW5nRmlsZShTdHJpbmdJTy5TdHJpbmdJ
TygKLSAgICAgICAgICAgICAgICAnJykpCi0gICAgICAgIHNlbGYuY2hlY2sobWVtb3JpemluZ19m
aWxlLCAxMCwgW10pCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1bml0dGVz
dC5tYWluKCkKLQotCi0jIHZpOnN0cz00IHN3PTQgZXQKSW5kZXg6IFdlYktpdFRvb2xzL3B5d2Vi
c29ja2V0L3Rlc3QvdGVzdF9tb2NrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL3B5d2Vi
c29ja2V0L3Rlc3QvdGVzdF9tb2NrLnB5CShyZXZpc2lvbiA1NTI1MykKKysrIFdlYktpdFRvb2xz
L3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyNiAr
MCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IDIwMDksIEdvb2ds
ZSBJbmMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLSIi
IlRlc3RzIGZvciBtb2NrIG1vZHVsZS4iIiIKLQotCi1pbXBvcnQgUXVldWUKLWltcG9ydCB0aHJl
YWRpbmcKLWltcG9ydCB1bml0dGVzdAotCi1pbXBvcnQgbW9jawotCi0KLWNsYXNzIE1vY2tDb25u
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBz
ZWxmLl9jb25uID0gbW9jay5Nb2NrQ29ubignQUJDXHJcbkRFRkdcclxuXHJcbkhJSksnKQotCi0g
ICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0FC
Q1xyXG4nLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J0RFRkdcclxuJywgc2VsZi5fY29ubi5yZWFkbGluZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdcclxuJywgc2VsZi5fY29ubi5yZWFkbGluZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdISUpLJywgc2VsZi5fY29ubi5yZWFkbGluZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCcnLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCi0KLSAgICBkZWYgdGVzdF9yZWFkKHNlbGYp
OgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdBQkNcclxuRCcsIHNlbGYuX2Nvbm4ucmVhZCg2
KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRUZHXHJcblxyXG5ISScsIHNlbGYuX2Nvbm4u
cmVhZCg5KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSksnLCBzZWxmLl9jb25uLnJlYWQo
MTApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxmLl9jb25uLnJlYWQoMTApKQot
Ci0gICAgZGVmIHRlc3RfcmVhZF9hbmRfcmVhZGxpbmUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ0FCQ1xyXG5EJywgc2VsZi5fY29ubi5yZWFkKDYpKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCdFRkdcclxuJywgc2VsZi5fY29ubi5yZWFkbGluZSgpKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdcclxuSElKSycsIHNlbGYuX2Nvbm4ucmVhZCg5KSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnJywgc2VsZi5fY29ubi5yZWFkbGluZSgpKQotCi0gICAgZGVmIHRlc3Rf
d3JpdGUoc2VsZik6Ci0gICAgICAgIHNlbGYuX2Nvbm4ud3JpdGUoJ0hlbGxvXHJcbicpCi0gICAg
ICAgIHNlbGYuX2Nvbm4ud3JpdGUoJ1dvcmxkXHJcbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJ0hlbGxvXHJcbldvcmxkXHJcbicsIHNlbGYuX2Nvbm4ud3JpdHRlbl9kYXRhKCkpCi0KLQot
Y2xhc3MgTW9ja0Jsb2NraW5nQ29ublRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0
ZXN0X3JlYWQoc2VsZik6Ci0gICAgICAgIGNsYXNzIExpbmVSZWFkZXIodGhyZWFkaW5nLlRocmVh
ZCk6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubiwgcXVldWUpOgotICAgICAg
ICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKLSAgICAgICAgICAgICAg
ICBzZWxmLl9xdWV1ZSA9IHF1ZXVlCi0gICAgICAgICAgICAgICAgc2VsZi5fY29ubiA9IGNvbm4K
LSAgICAgICAgICAgICAgICBzZWxmLnNldERhZW1vbihUcnVlKQotICAgICAgICAgICAgICAgIHNl
bGYuc3RhcnQoKQotICAgICAgICAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgICAgICAgICB3
aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fY29ubi5yZWFkbGlu
ZSgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3F1ZXVlLnB1dChkYXRhKQotICAgICAgICBj
b25uID0gbW9jay5Nb2NrQmxvY2tpbmdDb25uKCkKLSAgICAgICAgcXVldWUgPSBRdWV1ZS5RdWV1
ZSgpCi0gICAgICAgIHJlYWRlciA9IExpbmVSZWFkZXIoY29ubiwgcXVldWUpCi0gICAgICAgIHNl
bGYuZmFpbFVubGVzcyhxdWV1ZS5lbXB0eSgpKQotICAgICAgICBjb25uLnB1dF9ieXRlcygnRm9v
IGJhclxyXG4nKQotICAgICAgICByZWFkID0gcXVldWUuZ2V0KCkKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnRm9vIGJhclxyXG4nLCByZWFkKQotCi0KLWNsYXNzIE1vY2tUYWJsZVRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX2RpY3Qoc2VsZik6Ci0g
ICAgICAgIHRhYmxlID0gbW9jay5Nb2NrVGFibGUoeydLZXknOidWYWx1ZSd9KQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlLmdldCgnS0VZJykpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGVbJ2tleSddKQotCi0gICAgZGVmIHRlc3RfY3JlYXRl
X2Zyb21fbGlzdChzZWxmKToKLSAgICAgICAgdGFibGUgPSBtb2NrLk1vY2tUYWJsZShbKCdLZXkn
LCAnVmFsdWUnKV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGUuZ2V0
KCdLRVknKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZVsna2V5J10p
Ci0KLSAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV90dXBsZShzZWxmKToKLSAgICAgICAgdGFibGUg
PSBtb2NrLk1vY2tUYWJsZSgoKCdLZXknLCAnVmFsdWUnKSwpKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCdWYWx1ZScsIHRhYmxlLmdldCgnS0VZJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJ1ZhbHVlJywgdGFibGVbJ2tleSddKQotCi0gICAgZGVmIHRlc3Rfc2V0X2FuZF9nZXQoc2Vs
Zik6Ci0gICAgICAgIHRhYmxlID0gbW9jay5Nb2NrVGFibGUoKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKE5vbmUsIHRhYmxlLmdldCgnS2V5JykpCi0gICAgICAgIHRhYmxlWydLZXknXSA9ICdW
YWx1ZScKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZS5nZXQoJ0tleScp
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlLmdldCgna2V5JykpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGUuZ2V0KCdLRVknKSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZVsnS2V5J10pCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGVbJ2tleSddKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdWYWx1ZScsIHRhYmxlWydLRVknXSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18n
OgotICAgIHVuaXR0ZXN0Lm1haW4oKQotCi0KLSMgdmk6c3RzPTQgc3c9NCBldApJbmRleDogV2Vi
S2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X21zZ3V0aWwucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X21zZ3V0aWwucHkJKHJldmlzaW9uIDU1
MjUzKQorKysgV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X21zZ3V0aWwucHkJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTU2ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwot
IyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMK
LSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4K
LSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLQotIiIiVGVzdHMgZm9yIG1zZ3V0aWwgbW9kdWxlLiIiIgotCi0K
LWltcG9ydCBRdWV1ZQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWltcG9ydCBjb25maWcgICMgVGhpcyBt
dXN0IGJlIGltcG9ydGVkIGJlZm9yZSBtb2RfcHl3ZWJzb2NrZXQuCi1mcm9tIG1vZF9weXdlYnNv
Y2tldCBpbXBvcnQgbXNndXRpbAotCi1pbXBvcnQgbW9jawotCi0KLWRlZiBfY3JlYXRlX3JlcXVl
c3QocmVhZF9kYXRhKToKLSAgICByZXR1cm4gbW9jay5Nb2NrUmVxdWVzdChjb25uZWN0aW9uPW1v
Y2suTW9ja0Nvbm4ocmVhZF9kYXRhKSkKLQotZGVmIF9jcmVhdGVfYmxvY2tpbmdfcmVxdWVzdCgp
OgotICAgIHJldHVybiBtb2NrLk1vY2tSZXF1ZXN0KGNvbm5lY3Rpb249bW9jay5Nb2NrQmxvY2tp
bmdDb25uKCkpCi0KLWNsYXNzIE1lc3NhZ2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBk
ZWYgdGVzdF9zZW5kX21lc3NhZ2Uoc2VsZik6Ci0gICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3Jl
cXVlc3QoJycpCi0gICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdIZWxsbycp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDBIZWxsb1x4ZmYnLCByZXF1ZXN0LmNvbm5l
Y3Rpb24ud3JpdHRlbl9kYXRhKCkpCi0KLSAgICBkZWYgdGVzdF9zZW5kX21lc3NhZ2VfdW5pY29k
ZShzZWxmKToKLSAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgnJykKLSAgICAgICAg
bXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgdSdcdTY1ZTUnKQotICAgICAgICAjIFUrNjVl
NSBpcyBlbmNvZGVkIGFzIGU2LDk3LGE1IGluIFVURi04Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJ1x4MDBceGU2XHg5N1x4YTVceGZmJywKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCi0KLSAgICBkZWYgdGVzdF9yZWNlaXZlX21l
c3NhZ2Uoc2VsZik6Ci0gICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoJ1x4MDBIZWxs
b1x4ZmZceDAwV29ybGQhXHhmZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlbGxvJywg
bXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJ1dvcmxkIScsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQotCi0gICAgZGVm
IHRlc3RfcmVjZWl2ZV9tZXNzYWdlX3VuaWNvZGUoc2VsZik6Ci0gICAgICAgIHJlcXVlc3QgPSBf
Y3JlYXRlX3JlcXVlc3QoJ1x4MDBceGU2XHg5Y1x4YWNceGZmJykKLSAgICAgICAgIyBVKzY3MmMg
aXMgZW5jb2RlZCBhcyBlNiw5YyxhYyBpbiBVVEYtOAotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHUnXHU2NzJjJywgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCi0KLSAgICBkZWYg
dGVzdF9yZWNlaXZlX21lc3NhZ2VfZXJyb25lb3VzX3VuaWNvZGUoc2VsZik6Ci0gICAgICAgICMg
XHg4MCBhbmQgXHg4MSBhcmUgaW52YWxpZCBhcyBVVEYtOC4KLSAgICAgICAgcmVxdWVzdCA9IF9j
cmVhdGVfcmVxdWVzdCgnXHgwMFx4ODBceDgxXHhmZicpCi0gICAgICAgICMgSW52YWxpZCBjaGFy
YWN0ZXJzIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoCi0gICAgICAgICMgVStmZmZkIFJFUExBQ0VN
RU5UIENIQVJBQ1RFUgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXHVmZmZkXHVmZmZkJywg
bXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCi0KLSAgICBkZWYgdGVzdF9yZWNlaXZl
X21lc3NhZ2VfZGlzY2FyZChzZWxmKToKLSAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVz
dCgnXHg4MFx4MDZJR05PUkVceDAwSGVsbG9ceGZmJwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnXHgwMURJU1JFR0FSRFx4ZmZceDAwV29ybGQhXHhmZicpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ0hlbGxvJywgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1dvcmxkIScsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdl
KHJlcXVlc3QpKQotCi0gICAgZGVmIHRlc3RfcGF5bG9hZF9sZW5ndGgoc2VsZik6Ci0gICAgICAg
IGZvciBsZW5ndGgsIGJ5dGVzIGluICgoMCwgJ1x4MDAnKSwgKDB4N2YsICdceDdmJyksICgweDgw
LCAnXHg4MVx4MDAnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEyMzQsICdc
eDgwXHhhNFx4MzQnKSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNndXRpbC5fcGF5bG9hZF9sZW5ndGgoX2NyZWF0
ZV9yZXF1ZXN0KGJ5dGVzKSkpCi0KLSAgICBkZWYgdGVzdF9yZWNlaXZlX2J5dGVzKHNlbGYpOgot
ICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCdhYmNkZWZnJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnYWJjJywgbXNndXRpbC5fcmVjZWl2ZV9ieXRlcyhyZXF1ZXN0LCAzKSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZGVmZycsIG1zZ3V0aWwuX3JlY2VpdmVfYnl0ZXMo
cmVxdWVzdCwgNCkpCi0KLSAgICBkZWYgdGVzdF9yZWFkX3VudGlsKHNlbGYpOgotICAgICAgICBy
ZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCdhYmNYZGVmZ1gnKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCdhYmMnLCBtc2d1dGlsLl9yZWFkX3VudGlsKHJlcXVlc3QsICdYJykpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ2RlZmcnLCBtc2d1dGlsLl9yZWFkX3VudGlsKHJlcXVlc3QsICdY
JykpCi0KLQotY2xhc3MgTWVzc2FnZVJlY2VpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0g
ICAgZGVmIHRlc3RfcXVldWUoc2VsZik6Ci0gICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX2Jsb2Nr
aW5nX3JlcXVlc3QoKQotICAgICAgICByZWNlaXZlciA9IG1zZ3V0aWwuTWVzc2FnZVJlY2VpdmVy
KHJlcXVlc3QpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCByZWNlaXZlci5yZWNl
aXZlX25vd2FpdCgpKQotCi0gICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoJ1x4
MDBIZWxsbyFceGZmJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSGVsbG8hJywgcmVjZWl2
ZXIucmVjZWl2ZSgpKQotCi0gICAgZGVmIHRlc3Rfb25tZXNzYWdlKHNlbGYpOgotICAgICAgICBv
bm1lc3NhZ2VfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgIGRlZiBvbm1lc3NhZ2VfaGFu
ZGxlcihtZXNzYWdlKToKLSAgICAgICAgICAgIG9ubWVzc2FnZV9xdWV1ZS5wdXQobWVzc2FnZSkK
LQotICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9ibG9ja2luZ19yZXF1ZXN0KCkKLSAgICAgICAg
cmVjZWl2ZXIgPSBtc2d1dGlsLk1lc3NhZ2VSZWNlaXZlcihyZXF1ZXN0LCBvbm1lc3NhZ2VfaGFu
ZGxlcikKLQotICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKCdceDAwSGVsbG8h
XHhmZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlbGxvIScsIG9ubWVzc2FnZV9xdWV1
ZS5nZXQoKSkKLQotCi1jbGFzcyBNZXNzYWdlU2VuZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
Ci0gICAgZGVmIHRlc3Rfc2VuZChzZWxmKToKLSAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfYmxv
Y2tpbmdfcmVxdWVzdCgpCi0gICAgICAgIHNlbmRlciA9IG1zZ3V0aWwuTWVzc2FnZVNlbmRlcihy
ZXF1ZXN0KQotCi0gICAgICAgIHNlbmRlci5zZW5kKCdXb3JsZCcpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ1x4MDBXb3JsZFx4ZmYnLCByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRh
KCkpCi0KLSAgICBkZWYgdGVzdF9zZW5kX25vd2FpdChzZWxmKToKLSAgICAgICAgIyBVc2UgYSBx
dWV1ZSB0byBjaGVjayB0aGUgYnl0ZXMgd3JpdHRlbiBieSBNZXNzYWdlU2VuZGVyLgotICAgICAg
ICAjIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSBjYW5ub3QgYmUgdXNlZCBoZXJl
IGJlY2F1c2UKLSAgICAgICAgIyBNZXNzYWdlU2VuZGVyIHJ1bnMgaW4gYSBzZXBhcmF0ZSB0aHJl
YWQuCi0gICAgICAgIHNlbmRfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgIGRlZiB3cml0
ZShieXRlcyk6Ci0gICAgICAgICAgICBzZW5kX3F1ZXVlLnB1dChieXRlcykKLSAgICAgICAgcmVx
dWVzdCA9IF9jcmVhdGVfYmxvY2tpbmdfcmVxdWVzdCgpCi0gICAgICAgIHJlcXVlc3QuY29ubmVj
dGlvbi53cml0ZSA9IHdyaXRlCi0KLSAgICAgICAgc2VuZGVyID0gbXNndXRpbC5NZXNzYWdlU2Vu
ZGVyKHJlcXVlc3QpCi0KLSAgICAgICAgc2VuZGVyLnNlbmRfbm93YWl0KCdIZWxsbycpCi0gICAg
ICAgIHNlbmRlci5zZW5kX25vd2FpdCgnV29ybGQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCdceDAwSGVsbG9ceGZmJywgc2VuZF9xdWV1ZS5nZXQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnXHgwMFdvcmxkXHhmZicsIHNlbmRfcXVldWUuZ2V0KCkpCi0KLQotaWYgX19uYW1lX18g
PT0gJ19fbWFpbl9fJzoKLSAgICB1bml0dGVzdC5tYWluKCkKLQotCi0jIHZpOnN0cz00IHN3PTQg
ZXQKSW5kZXg6IFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF91dGlsLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF91dGlsLnB5CShyZXZp
c2lvbiA1NTI1MykKKysrIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF91dGlsLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYzICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgot
IwotIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlv
bi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0j
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotIiIiVGVzdHMgZm9yIHV0aWwgbW9kdWxlLiIiIgotCi0K
LWltcG9ydCB1bml0dGVzdAotCi1pbXBvcnQgY29uZmlnICAjIFRoaXMgbXVzdCBiZSBpbXBvcnRl
ZCBiZWZvcmUgbW9kX3B5d2Vic29ja2V0LgotZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IHV0
aWwKLQotCi1jbGFzcyBVdGlsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3Rf
Z2V0X3N0YWNrX3RyYWNlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdOb25lXG4n
LCB1dGlsLmdldF9zdGFja190cmFjZSgpKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBhID0g
MSAvIDAgICMgSW50ZW50aW9uYWxseSByYWlzZSBleGNlcHRpb24uCi0gICAgICAgIGV4Y2VwdCBF
eGNlcHRpb246Ci0gICAgICAgICAgICB0cmFjZSA9IHV0aWwuZ2V0X3N0YWNrX3RyYWNlKCkKLSAg
ICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0cmFjZS5zdGFydHN3aXRoKCdUcmFjZWJhY2snKSkK
LSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0cmFjZS5maW5kKCdaZXJvRGl2aXNpb25FcnJv
cicpICE9IC0xKQotCi0gICAgZGVmIHRlc3RfcHJlcGVuZF9tZXNzYWdlX3RvX2V4Y2VwdGlvbihz
ZWxmKToKLSAgICAgICAgZXhjID0gRXhjZXB0aW9uKCdXb3JsZCcpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ1dvcmxkJywgc3RyKGV4YykpCi0gICAgICAgIHV0aWwucHJlcGVuZF9tZXNzYWdl
X3RvX2V4Y2VwdGlvbignSGVsbG8gJywgZXhjKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdI
ZWxsbyBXb3JsZCcsIHN0cihleGMpKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0g
ICAgdW5pdHRlc3QubWFpbigpCi0KLQotIyB2aTpzdHM9NCBzdz00IGV0CkluZGV4OiBXZWJLaXRU
b29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL2JsYW5rX3dzaC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJz
L2JsYW5rX3dzaC5weQkocmV2aXNpb24gNTUyNTMpCisrKyBXZWJLaXRUb29scy9weXdlYnNvY2tl
dC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL2JsYW5rX3dzaC5weQkod29ya2luZyBjb3B5KQpAQCAt
MSwzMSArMCwwIEBACi0jIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgotIyBBbGwgcmlnaHRz
IHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0j
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMg
ZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi0jIGludGVudGlvbmFsbHkgbGVmdCBi
bGFuawpJbmRleDogV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVy
cy9vcmlnaW5fY2hlY2tfd3NoLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL3B5d2Vic29j
a2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvb3JpZ2luX2NoZWNrX3dzaC5weQkocmV2aXNpb24g
NTUyNTMpCisrKyBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJz
L29yaWdpbl9jaGVja193c2gucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNDIgKzAsMCBAQAotIyBD
b3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMg
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0j
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLQotZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVl
c3QpOgotICAgIGlmIHJlcXVlc3Qud3Nfb3JpZ2luID09ICdodHRwOi8vZXhhbXBsZS5jb20nOgot
ICAgICAgICByZXR1cm4KLSAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFjY2VwdGFibGUgb3JpZ2lu
OiAlcicgJSByZXF1ZXN0LndzX29yaWdpbikKLQotCi1kZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9k
YXRhKHJlcXVlc3QpOgotICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnb3JpZ2luX2NoZWNr
X3dzaC5weSBpcyBjYWxsZWQgZm9yICVzLCAlcycgJQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAocmVxdWVzdC53c19yZXNvdXJjZSwgcmVxdWVzdC53c19wcm90b2NvbCkpCi0KLQotIyB2
aTpzdHM9NCBzdz00IGV0CkluZGV4OiBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3Rk
YXRhL2hhbmRsZXJzL3N1Yi9leGNlcHRpb25faW5fdHJhbnNmZXJfd3NoLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2V4
Y2VwdGlvbl9pbl90cmFuc2Zlcl93c2gucHkJKHJldmlzaW9uIDU1MjUzKQorKysgV2ViS2l0VG9v
bHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvZXhjZXB0aW9uX2luX3Ry
YW5zZmVyX3dzaC5weQkod29ya2luZyBjb3B5KQpAQCAtMSw0NCArMCwwIEBACi0jIENvcHlyaWdo
dCAyMDA5LCBHb29nbGUgSW5jLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotCi0iIiJFeGNlcHRpb24gaW4gd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKCkuCi0i
IiIKLQotCi1kZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6Ci0gICAg
cGFzcwotCi0KLWRlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6Ci0gICAgcmFp
c2UgRXhjZXB0aW9uKCdJbnRlbnRpb25hbCBFeGNlcHRpb24gZm9yICVzLCAlcycgJQotICAgICAg
ICAgICAgICAgICAgICAocmVxdWVzdC53c19yZXNvdXJjZSwgcmVxdWVzdC53c19wcm90b2NvbCkp
Ci0KLQotIyB2aTpzdHM9NCBzdz00IGV0CkluZGV4OiBXZWJLaXRUb29scy9weXdlYnNvY2tldC90
ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9ub193c2hfYXRfdGhlX2VuZC5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9u
b193c2hfYXRfdGhlX2VuZC5weQkocmV2aXNpb24gNTUyNTMpCisrKyBXZWJLaXRUb29scy9weXdl
YnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9ub193c2hfYXRfdGhlX2VuZC5weQko
d29ya2luZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0jIENvcHlyaWdodCAyMDA5LCBHb29nbGUg
SW5jLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0j
Ci0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi0iIiJD
b3JyZWN0IHNpZ25hdHVyZXMsIHdyb25nIGZpbGUgbmFtZS4KLSIiIgotCi0KLWRlZiB3ZWJfc29j
a2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKLSAgICBwYXNzCi0KLQotZGVmIHdlYl9z
b2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKLSAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3Jp
dGUoCi0gICAgICAgICAgICAnc3ViL25vX3dzaF9hdF90aGVfZW5kLnB5IGlzIGNhbGxlZCBmb3Ig
JXMsICVzJyAlCi0gICAgICAgICAgICAocmVxdWVzdC53c19yZXNvdXJjZSwgcmVxdWVzdC53c19w
cm90b2NvbCkpCi0KLQotIyB2aTpzdHM9NCBzdz00IGV0CkluZGV4OiBXZWJLaXRUb29scy9weXdl
YnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9ub25fY2FsbGFibGVfd3NoLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxl
cnMvc3ViL25vbl9jYWxsYWJsZV93c2gucHkJKHJldmlzaW9uIDU1MjUzKQorKysgV2ViS2l0VG9v
bHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvbm9uX2NhbGxhYmxlX3dz
aC5weQkod29ya2luZyBjb3B5KQpAQCAtMSwzOSArMCwwIEBACi0jIENvcHlyaWdodCAyMDA5LCBH
b29nbGUgSW5jLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
Ci0iIiJOb24tY2FsbGFibGUgaGFuZGxlcnMuCi0iIiIKLQotCi13ZWJfc29ja2V0X2RvX2V4dHJh
X2hhbmRzaGFrZSA9IFRydWUKLXdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YSA9IDEKLQotCi0jIHZp
OnN0cz00IHN3PTQgZXQKSW5kZXg6IFdlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRh
dGEvaGFuZGxlcnMvc3ViL3BsYWluX3dzaC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9w
eXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9wbGFpbl93c2gucHkJKHJldmlz
aW9uIDU1MjUzKQorKysgV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5k
bGVycy9zdWIvcGxhaW5fd3NoLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQwICswLDAgQEAKLSMg
Q29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0j
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0j
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0KLWRlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1
ZXN0KToKLSAgICBwYXNzCi0KLQotZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0
KToKLSAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ3N1Yi9wbGFpbl93c2gucHkgaXMgY2Fs
bGVkIGZvciAlcywgJXMnICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3Qu
d3NfcmVzb3VyY2UsIHJlcXVlc3Qud3NfcHJvdG9jb2wpKQotCi0KLSMgdmk6c3RzPTQgc3c9NCBl
dApJbmRleDogV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9z
dWIvd3JvbmdfaGFuZHNoYWtlX3NpZ193c2gucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
cHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvd3JvbmdfaGFuZHNoYWtlX3Np
Z193c2gucHkJKHJldmlzaW9uIDU1MjUzKQorKysgV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVz
dC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvd3JvbmdfaGFuZHNoYWtlX3NpZ193c2gucHkJKHdvcmtp
bmcgY29weSkKQEAgLTEsNDUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4K
LSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0j
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotIiIiV3Jvbmcg
d2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2Ugc2lnbmF0dXJlLgotIiIiCi0KLQotZGVmIG5v
X3dlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgotICAgIHBhc3MKLQotCi1k
ZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgotICAgIHJlcXVlc3QuY29ubmVj
dGlvbi53cml0ZSgKLSAgICAgICAgICAgICdzdWIvd3JvbmdfaGFuZHNoYWtlX3NpZ193c2gucHkg
aXMgY2FsbGVkIGZvciAlcywgJXMnICUKLSAgICAgICAgICAgICAocmVxdWVzdC53c19yZXNvdXJj
ZSwgcmVxdWVzdC53c19wcm90b2NvbCkpCi0KLQotIyB2aTpzdHM9NCBzdz00IGV0CkluZGV4OiBX
ZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi93cm9uZ190
cmFuc2Zlcl9zaWdfd3NoLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL3B5d2Vic29ja2V0
L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL3dyb25nX3RyYW5zZmVyX3NpZ193c2gucHkJKHJl
dmlzaW9uIDU1MjUzKQorKysgV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9o
YW5kbGVycy9zdWIvd3JvbmdfdHJhbnNmZXJfc2lnX3dzaC5weQkod29ya2luZyBjb3B5KQpAQCAt
MSw0NSArMCwwIEBACi0jIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgotIyBBbGwgcmlnaHRz
IHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0j
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMg
ZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi0iIiJXcm9uZyB3ZWJfc29ja2V0X3Ry
YW5zZmVyX2RhdGEoKSBzaWduYXR1cmUuCi0iIiIKLQotCi1kZWYgd2ViX3NvY2tldF9kb19leHRy
YV9oYW5kc2hha2UocmVxdWVzdCk6Ci0gICAgcGFzcwotCi0KLWRlZiBub193ZWJfc29ja2V0X3Ry
YW5zZmVyX2RhdGEocmVxdWVzdCk6Ci0gICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKAotICAg
ICAgICAgICAgJ3N1Yi93cm9uZ190cmFuc2Zlcl9zaWdfd3NoLnB5IGlzIGNhbGxlZCBmb3IgJXMs
ICVzJyAlCi0gICAgICAgICAgICAocmVxdWVzdC53c19yZXNvdXJjZSwgcmVxdWVzdC53c19wcm90
b2NvbCkpCi0KLQotIyB2aTpzdHM9NCBzdz00IGV0Cg==
</data>
<flag name="review"
          id="32437"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="32438"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
      

    </bug>

</bugzilla>