<?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>36483</bug_id>
          
          <creation_ts>2010-03-23 01:12:54 -0700</creation_ts>
          <short_desc>webkitpy: Move the commands folder into webkitpy/patch</short_desc>
          <delta_ts>2010-03-24 23:13:02 -0700</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>
          
          <blocked>36093</blocked>
          <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>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>202960</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-23 01:12:54 -0700</bug_when>
    <thetext>Part of the master bug to move files and folders into appropriate sub-packages:

https://bugs.webkit.org/show_bug.cgi?id=36093</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202966</commentid>
    <comment_count>1</comment_count>
      <attachid>51402</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-23 01:25:25 -0700</bug_when>
    <thetext>Created attachment 51402
Proposed patch

For future reference, the command I used to do this was as follows:

find WebKitTools -type f \
\! \( -wholename &apos;*.pyc&apos; -or \
      -wholename &apos;*.svn*&apos; -or \
      -wholename &apos;*ChangeLog*&apos; \) | \
sed -e &apos;s/ /\\ /g&apos; | \
xargs grep -l &apos;webkitpy\.commands&apos; | \
xargs sed -i &apos;&apos; &apos;s/webkitpy\.commands/webkitpy\.patch\.commands/&apos;

(Thanks to Maciej for the tip: 
 https://lists.webkit.org/pipermail/webkit-dev/2010-March/012064.html )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203186</commentid>
    <comment_count>2</comment_count>
      <attachid>51402</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-03-23 13:50:20 -0700</bug_when>
    <thetext>Comment on attachment 51402
Proposed patch

+ from webkitpy.patch.commands.download_unittest import *

Shouldn&apos;t these be in a unittests.py file in the commands module?

Please coordinate with Eric when landing this patch.  He has some in-flight changes to these files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203200</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-23 14:12:48 -0700</bug_when>
    <thetext>(In reply to comment #2)

Thanks, Adam!

&gt; (From update of attachment 51402 [details])
&gt; + from webkitpy.patch.commands.download_unittest import *
&gt; 
&gt; Shouldn&apos;t these be in a unittests.py file in the commands module?

Personally, I think so.  (I myself haven&apos;t worked on the commands unit tests.)  We can do that in a separate patch.

&gt; Please coordinate with Eric when landing this patch.  He has some in-flight
&gt; changes to these files.

Will do!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203214</commentid>
    <comment_count>4</comment_count>
      <attachid>51402</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-23 14:29:58 -0700</bug_when>
    <thetext>Comment on attachment 51402
Proposed patch

I&apos;m not sure this change really helps anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203215</commentid>
    <comment_count>5</comment_count>
      <attachid>51402</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-23 14:31:13 -0700</bug_when>
    <thetext>Comment on attachment 51402
Proposed patch

I think that since commands and steps contain so much stuff that is not relating to &quot;patching&quot; it makes no sense to put them under a &quot;patch&quot; directory.  And especially since the system is designed for other tools to be able to include these command and steps, it seems wrong to put them under the directory of some specific tool.

I&apos;m against this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203223</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-23 14:46:30 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 51402 [details])
&gt; I think that since commands and steps contain so much stuff that is not
&gt; relating to &quot;patching&quot; it makes no sense to put them under a &quot;patch&quot; directory.
&gt;  And especially since the system is designed for other tools to be able to
&gt; include these command and steps, it seems wrong to put them under the directory
&gt; of some specific tool.
&gt; 
&gt; I&apos;m against this change.

What&apos;s nice about this change is that now nothing outside of patch/ imports anything in the commands/ folder.  It helps to organize and control the dependencies.  Only patch/patcher.py and the command modules themselves import from it (as well as unittests.py which will change once command/ gets its own unittests.py).

It sounds like maybe &quot;patch&quot; is just a bad name for the top-level package.  I just chose &quot;patch&quot; because it held the main() method for webkit-patch.  Adam was okay with this, and we agreed we can choose a better name in a later patch:

https://bugs.webkit.org/show_bug.cgi?id=31533#c7

Basically, I guess &quot;webkitpy/patch&quot; is becoming what webkitpy was in the very beginning (just getting pushed down a level).  Originally that folder was called something like &quot;modules&quot; if I remember right.  But it contained only bugzilla-tool related code.  Any suggestions for a better name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203230</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-23 14:55:32 -0700</bug_when>
    <thetext>So when/if we add another tool for non-patch related things, where does that go?  Another top level?  or inside &quot;patch/&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203233</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-23 14:59:21 -0700</bug_when>
    <thetext>Eventually we&apos;ll probably want to break down the individual files in commands/ into smaller chunks.  possibly even one-file-per-class.

some of the command infrastructure is designed to be general however.  Like &quot;Command&quot; itself, and the whole AbstractDeclaritiveComamnd and MultiCommandTool and steps etc.  it&apos;s unclear to me why that goes under patch/ if patch is just for &quot;webkit-patch&quot;.

I see more scripts moving to be more on more of the wekbit-tools infrastructure (because it was designed with re-use inmind) not the other way around.

Adam talked with breaking out all the data-storage from bugzilla-tool (now patcher.py I think?) into its own tool.py which dealt with holding all the central state that we expect &quot;tool&quot; to have.  If/when that ever happens than it becomes trivial to write additional tools and single-command tools, as we have long envisoned.  Tools which have nothing to do with patching, simply exist on top of the various infrastructure pieces we&apos;ve made to make it easy to write webkit-aware python.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203235</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-23 15:00:15 -0700</bug_when>
    <thetext>I think what I&apos;m unclear on is what &quot;patch/&quot; is for.  What goes in it.  What doesn&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203236</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-23 15:00:35 -0700</bug_when>
    <thetext>The comments here are relevant to this discussion:

https://bugs.webkit.org/show_bug.cgi?id=28459

This is the original report in which bugzilla-tool was renamed to webkit-patch -- getting into some of the issues around how webkit-patch has a fair amount of &quot;non-patch&quot; functionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203239</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-23 15:04:16 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; I think what I&apos;m unclear on is what &quot;patch/&quot; is for.  What goes in it.  What
&gt; doesn&apos;t.

My thinking was that it should contain the code that is used by webkit-patch and none of the other scripts.

There is a parallel set of questions about what functionality should go in webkit-patch as opposed to separate scripts:

https://bugs.webkit.org/show_bug.cgi?id=28459#c8</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203243</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-23 15:07:47 -0700</bug_when>
    <thetext>I don&apos;t think we know what all the pieces of webkit-patch will get re-used.  I think much more will be re-used than currently is.  If we ever have a second multi-command tool certainly many of the steps will get re-used.

I don&apos;t think commiters.py is used by anything else yet, but it&apos;s clearly common infrastructure.  scm.py is also not re-used yet, but I expect new-run-webkit-tests to use it eventually.  likewise bugzilla, buildbot, statusbot, irc, etc.  I think eventually command and multicommandtool and many of the steps.  Some of the command would be specific to webkit-patch in any reasonable future of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203247</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-23 15:11:11 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; So when/if we add another tool for non-patch related things, where does that
&gt; go?  Another top level?  or inside &quot;patch/&quot;

My thinking on this was that we could consider having a separate top-level folder for each major script -- with the package name ideally having some resemblance to the script name (check-webkit-style -&gt; style, webkit-patch -&gt; patch, run-webkit-tests -&gt; layout_tests, etc).  If two scripts are very closely related or variants of each other, we may want to consider putting them in the same top-level package.

Code used by multiple top-level folders could go in common -- organized however we want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203251</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-23 15:21:05 -0700</bug_when>
    <thetext>I get more excited about splitting out existing files into modules (like bugzilla.py or scm.py) and moving exiting sets of files down a folder (like grammar, executive, user, etc.) than moving commands out of the top level.

I think my major trouble is with the &quot;patch&quot; directory name, and the choice of this as a first order of business.

I think it&apos;s more interesting to try and make other scripts fit into the new python infrastructure than trying to box the new python infrastructure off into its own little corner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203254</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-23 15:24:19 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Eventually we&apos;ll probably want to break down the individual files in commands/
&gt; into smaller chunks.  possibly even one-file-per-class.
&gt; 
&gt; some of the command infrastructure is designed to be general however.  Like
&gt; &quot;Command&quot; itself, and the whole AbstractDeclaritiveComamnd and MultiCommandTool
&gt; and steps etc.  it&apos;s unclear to me why that goes under patch/ if patch is just
&gt; for &quot;webkit-patch&quot;.
&gt; 
&gt; I see more scripts moving to be more on more of the wekbit-tools infrastructure
&gt; (because it was designed with re-use inmind) not the other way around.

At that point we can move such modules to common/.  Until they are actually used by more than one script though, it&apos;s not really necessary and keeps the references simpler.  It&apos;s easier to start out keeping things separate and to promote them to being shared than to go the other way around.

See my comment at the end of here, for example:

https://bugs.webkit.org/show_bug.cgi?id=36093#c3

&quot;My initial feeling is that we should try to put modules into the inner-most
package in which they are used (thirdparty/ seems to be an exception).  This
way a module has to &quot;prove&quot; itself before being moved to the shared package at
the root level (i.e. common/).  This will help us limit the size of common/.&quot;

&gt; Adam talked with breaking out all the data-storage from bugzilla-tool (now
&gt; patcher.py I think?) into its own tool.py which dealt with holding all the
&gt; central state that we expect &quot;tool&quot; to have.  If/when that ever happens than it
&gt; becomes trivial to write additional tools and single-command tools, as we have
&gt; long envisoned.  Tools which have nothing to do with patching, simply exist on
&gt; top of the various infrastructure pieces we&apos;ve made to make it easy to write
&gt; webkit-aware python.

That sounds cool.  When the time comes, I think we could find an appropriate place for such code -- perhaps somewhere in common.  For now, I&apos;m just trying to group things up by their actual dependencies, so webkitpy is a bit easier to navigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203259</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-23 15:32:38 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; I don&apos;t think we know what all the pieces of webkit-patch will get re-used.  I
&gt; think much more will be re-used than currently is.  If we ever have a second
&gt; multi-command tool certainly many of the steps will get re-used.

We can always promote to common at the point it which it gets re-used.  It should be easy to do.

&gt; I don&apos;t think commiters.py is used by anything else yet, but it&apos;s clearly
&gt; common infrastructure.

Adam and I discussed moving that to common/config when the time comes:

https://bugs.webkit.org/show_bug.cgi?id=36093#c5

&gt;scm.py is also not re-used yet, but I expect
&gt; new-run-webkit-tests to use it eventually.

It&apos;s actually used by check-webkit-style (to check style for patches).  diff_parser.py is another one.  That&apos;s why I was proposing putting those in common/scm:

https://bugs.webkit.org/show_bug.cgi?id=36093#c10

&gt; likewise bugzilla, buildbot,
&gt; statusbot, irc, etc.  I think eventually command and multicommandtool and many
&gt; of the steps.  Some of the command would be specific to webkit-patch in any
&gt; reasonable future of course.

Yeah, we could leave behind whatever is unique to that script to keep the dependencies more understandable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203334</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-23 23:44:25 -0700</bug_when>
    <thetext>FYI, this afternoon Eric suggested that he, Adam, and I meet to discuss this in person, so we will be doing that tomorrow (Wednesday) evening.  So I will hold off on responding to remaining comments (e.g. comment 14) until then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203819</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-24 23:13:02 -0700</bug_when>
    <thetext>Manually committed:

http://trac.webkit.org/changeset/56494

(This was reviewed again by Adam in Eric&apos;s presence after discussion. :) )</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51402</attachid>
            <date>2010-03-23 01:25:25 -0700</date>
            <delta_ts>2010-03-23 14:31:13 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>_patch-36483-1.diff</filename>
            <type>text/plain</type>
            <size>131625</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU2MzgzKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTAtMDMtMjMgIENocmlzIEplcmRvbmVrICA8
Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW4gU2NyaXB0cy93ZWJraXRweSwgbW92ZWQgY29tbWFuZHNfcmVmZXJl
bmNlcy5weSBhbmQgdGhlIGNvbW1hbmRzCisgICAgICAgIGZvbGRlciBpbnRvIHdlYmtpdHB5L3Bh
dGNoLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NjQ4MworCisgICAgICAgIFRoaXMgaXMgcGFydCBvZiBtYXN0ZXIgYnVnIDM2MDkzIHRvIG9yZ2Fu
aXplIHdlYmtpdHB5LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tYW5kczogUmVt
b3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL19faW5pdF9fLnB5OiBS
ZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvYWJzdHJhY3RzZXF1
ZW5jZWRjb21tYW5kLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29t
bWFuZHMvY29tbWFuZHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tYW5kcy9kb3dubG9hZC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2NvbW1hbmRzL2Rvd25sb2FkX3VuaXR0ZXN0LnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvY29tbWFuZHMvZWFybHlfd2FybmluZ19zeXN0ZW0ucHk6IFJlbW92ZWQu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9lYXJseV93YXJuaW5nX3N5c3Rl
bV91bml0dGVzdC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1h
bmRzL29wZW5idWdzLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29t
bWFuZHMvb3BlbmJ1Z3NfdW5pdHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tYW5kcy9xdWVyaWVzLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvY29tbWFuZHMvcXVlcmllc191bml0dGVzdC5weTogUmVtb3ZlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL3F1ZXVlcy5weTogUmVtb3ZlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL3F1ZXVlc191bml0dGVzdC5weTogUmVtb3ZlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL3F1ZXVlc3Rlc3QucHk6IFJlbW92
ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9zaGVyaWZmYm90LnB5OiBS
ZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvc2hlcmlmZmJvdF91
bml0dGVzdC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRz
L3VwbG9hZC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRz
L3VwbG9hZF91bml0dGVzdC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2NvbW1hbmRzX3JlZmVyZW5jZXMucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9wYXRjaC9jb21tYW5kczogQ29waWVkIGZyb20gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tYW5kcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BhdGNoL2NvbW1hbmRz
L2NvbW1hbmR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcGF0Y2gvY29tbWFu
ZHMvZG93bmxvYWQucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wYXRjaC9jb21tYW5k
cy9kb3dubG9hZF91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BhdGNo
L2NvbW1hbmRzL2Vhcmx5X3dhcm5pbmdfc3lzdGVtLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcGF0Y2gvY29tbWFuZHMvZWFybHlfd2FybmluZ19zeXN0ZW1fdW5pdHRlc3QucHk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wYXRjaC9jb21tYW5kcy9vcGVuYnVnc191bml0dGVz
dC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BhdGNoL2NvbW1hbmRzL3F1ZXJpZXNf
dW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wYXRjaC9jb21tYW5kcy9x
dWV1ZXNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wYXRjaC9jb21t
YW5kcy9xdWV1ZXN0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcGF0Y2gvY29t
bWFuZHMvc2hlcmlmZmJvdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BhdGNoL2Nv
bW1hbmRzL3NoZXJpZmZib3RfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9wYXRjaC9jb21tYW5kcy91cGxvYWQucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9w
YXRjaC9jb21tYW5kcy91cGxvYWRfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9wYXRjaC9jb21tYW5kc19yZWZlcmVuY2VzLnB5OiBDb3BpZWQgZnJvbSBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzX3JlZmVyZW5jZXMucHkuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wYXRjaC9wYXRjaGVyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdW5pdHRlc3RzLnB5OgorCiAyMDEwLTAzLTIyICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHNfcmVmZXJlbmNlcy5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzX3JlZmVyZW5jZXMu
cHkJKHJldmlzaW9uIDU2MzY2KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
YW5kc19yZWZlcmVuY2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDI1ICswLDAgQEAKLSMgQ29w
eXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRvbmVrIChjamVyZG9uZWtAd2Via2l0Lm9yZykKLSMK
LSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
LSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiQ29udGFpbnMgaW50
cmEtcGFja2FnZSByZWZlcmVuY2VzIHVzZWQgYnkgd2Via2l0cHkuY29tbWFuZHMuIiIiCi0KLWZy
b20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCkluZGV4OiBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3VuaXR0ZXN0cy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3VuaXR0ZXN0cy5weQkocmV2aXNpb24gNTYzNjYpCisrKyBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3VuaXR0ZXN0cy5weQkod29ya2luZyBjb3B5KQpAQCAt
MzQsMTMgKzM0LDEzIEBAIGltcG9ydCBzeXMKIGZyb20gd2Via2l0cHkuYnVnemlsbGFfdW5pdHRl
c3QgaW1wb3J0ICoKIGZyb20gd2Via2l0cHkuYnVpbGRib3RfdW5pdHRlc3QgaW1wb3J0ICoKIGZy
b20gd2Via2l0cHkuY2hhbmdlbG9nc191bml0dGVzdCBpbXBvcnQgKgotZnJvbSB3ZWJraXRweS5j
b21tYW5kcy5kb3dubG9hZF91bml0dGVzdCBpbXBvcnQgKgotZnJvbSB3ZWJraXRweS5jb21tYW5k
cy5lYXJseV93YXJuaW5nX3N5c3RlbV91bml0dGVzdCBpbXBvcnQgKgotZnJvbSB3ZWJraXRweS5j
b21tYW5kcy5vcGVuYnVnc191bml0dGVzdCBpbXBvcnQgT3BlbkJ1Z3NUZXN0Ci1mcm9tIHdlYmtp
dHB5LmNvbW1hbmRzLnVwbG9hZF91bml0dGVzdCBpbXBvcnQgKgotZnJvbSB3ZWJraXRweS5jb21t
YW5kcy5xdWVyaWVzX3VuaXR0ZXN0IGltcG9ydCAqCi1mcm9tIHdlYmtpdHB5LmNvbW1hbmRzLnF1
ZXVlc191bml0dGVzdCBpbXBvcnQgKgotZnJvbSB3ZWJraXRweS5jb21tYW5kcy5zaGVyaWZmYm90
X3VuaXR0ZXN0IGltcG9ydCAqCitmcm9tIHdlYmtpdHB5LnBhdGNoLmNvbW1hbmRzLmRvd25sb2Fk
X3VuaXR0ZXN0IGltcG9ydCAqCitmcm9tIHdlYmtpdHB5LnBhdGNoLmNvbW1hbmRzLmVhcmx5X3dh
cm5pbmdfc3lzdGVtX3VuaXR0ZXN0IGltcG9ydCAqCitmcm9tIHdlYmtpdHB5LnBhdGNoLmNvbW1h
bmRzLm9wZW5idWdzX3VuaXR0ZXN0IGltcG9ydCBPcGVuQnVnc1Rlc3QKK2Zyb20gd2Via2l0cHku
cGF0Y2guY29tbWFuZHMudXBsb2FkX3VuaXR0ZXN0IGltcG9ydCAqCitmcm9tIHdlYmtpdHB5LnBh
dGNoLmNvbW1hbmRzLnF1ZXJpZXNfdW5pdHRlc3QgaW1wb3J0ICoKK2Zyb20gd2Via2l0cHkucGF0
Y2guY29tbWFuZHMucXVldWVzX3VuaXR0ZXN0IGltcG9ydCAqCitmcm9tIHdlYmtpdHB5LnBhdGNo
LmNvbW1hbmRzLnNoZXJpZmZib3RfdW5pdHRlc3QgaW1wb3J0ICoKIGZyb20gd2Via2l0cHkuY29t
bWl0aW5mb191bml0dGVzdCBpbXBvcnQgKgogZnJvbSB3ZWJraXRweS5jb21taXR0ZXJzX3VuaXR0
ZXN0IGltcG9ydCAqCiBmcm9tIHdlYmtpdHB5LmNyZWRlbnRpYWxzX3VuaXR0ZXN0IGltcG9ydCAq
CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL19faW5pdF9fLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvX19p
bml0X18ucHkJKHJldmlzaW9uIDU2MzY2KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tYW5kcy9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMSArMCwwIEBACi0jIFJl
cXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUgZmls
ZXMKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvYWJzdHJhY3Rz
ZXF1ZW5jZWRjb21tYW5kLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbWFuZHMvYWJzdHJhY3RzZXF1ZW5jZWRjb21tYW5kLnB5CShyZXZpc2lvbiA1NjM2
NikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvYWJzdHJhY3RzZXF1
ZW5jZWRjb21tYW5kLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQzICswLDAgQEAKLSMgQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMgCi0jICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0j
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0jIAotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLWZyb20gd2Via2l0cHkubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgQWJzdHJh
Y3REZWNsYXJhdGl2ZUNvbW1hbmQKLWZyb20gd2Via2l0cHkuc3RlcHNlcXVlbmNlIGltcG9ydCBT
dGVwU2VxdWVuY2UKLQotCi1jbGFzcyBBYnN0cmFjdFNlcXVlbmNlZENvbW1hbmQoQWJzdHJhY3RE
ZWNsYXJhdGl2ZUNvbW1hbmQpOgotICAgIHN0ZXBzID0gTm9uZQotICAgIGRlZiBfX2luaXRfXyhz
ZWxmKToKLSAgICAgICAgc2VsZi5fc2VxdWVuY2UgPSBTdGVwU2VxdWVuY2Uoc2VsZi5zdGVwcykK
LSAgICAgICAgQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQuX19pbml0X18oc2VsZiwgc2VsZi5f
c2VxdWVuY2Uub3B0aW9ucygpKQotCi0gICAgZGVmIF9wcmVwYXJlX3N0YXRlKHNlbGYsIG9wdGlv
bnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGV4ZWN1dGUo
c2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIHNlbGYuX3NlcXVlbmNlLnJ1bl9h
bmRfaGFuZGxlX2Vycm9ycyh0b29sLCBvcHRpb25zLCBzZWxmLl9wcmVwYXJlX3N0YXRlKG9wdGlv
bnMsIGFyZ3MsIHRvb2wpKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
YW5kcy9jb21tYW5kdGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1hbmRzL2NvbW1hbmR0ZXN0LnB5CShyZXZpc2lvbiA1NjM2NikKKysrIFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvY29tbWFuZHRlc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMzggKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMg
bWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCB1bml0dGVzdAot
Ci1mcm9tIHdlYmtpdHB5LmNvbW1hbmRzX3JlZmVyZW5jZXMgaW1wb3J0IE1vY2sKLWZyb20gd2Vi
a2l0cHkubW9ja19idWd6aWxsYXRvb2wgaW1wb3J0IE1vY2tCdWd6aWxsYVRvb2wKLWZyb20gd2Vi
a2l0cHkub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQotCi1jbGFzcyBDb21tYW5k
c1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBhc3NlcnRfZXhlY3V0ZV9vdXRwdXRz
KHNlbGYsIGNvbW1hbmQsIGFyZ3MsIGV4cGVjdGVkX3N0ZG91dD0iIiwgZXhwZWN0ZWRfc3RkZXJy
PSIiLCBvcHRpb25zPU1vY2soKSwgdG9vbD1Nb2NrQnVnemlsbGFUb29sKCkpOgotICAgICAgICBj
b21tYW5kLmJpbmRfdG9fdG9vbCh0b29sKQotICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0
X291dHB1dHMoc2VsZiwgY29tbWFuZC5leGVjdXRlLCBbb3B0aW9ucywgYXJncywgdG9vbF0sIGV4
cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXQsIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9z
dGRlcnIpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL2Rvd25s
b2FkLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbWFu
ZHMvZG93bmxvYWQucHkJKHJldmlzaW9uIDU2MzY2KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tYW5kcy9kb3dubG9hZC5weQkod29ya2luZyBjb3B5KQpAQCAtMSwzNDAgKzAs
MCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0jIENvcHlyaWdodCAoYykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMgCi0jICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0
aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBvcwotCi1mcm9tIG9wdHBhcnNlIGltcG9y
dCBtYWtlX29wdGlvbgotCi1pbXBvcnQgd2Via2l0cHkuc3RlcHMgYXMgc3RlcHMKLQotZnJvbSB3
ZWJraXRweS5idWd6aWxsYSBpbXBvcnQgcGFyc2VfYnVnX2lkCi0jIFdlIGNvdWxkIGluc3RlYWQg
dXNlIGZyb20gbW9kdWxlcyBpbXBvcnQgYnVpbGRzdGVwcyBhbmQgdGhlbiBwcmVmaXggZXZlcnkg
YnVpbGRzdGVwIHdpdGggImJ1aWxkc3RlcHMuIgotZnJvbSB3ZWJraXRweS5jaGFuZ2Vsb2dzIGlt
cG9ydCBDaGFuZ2VMb2csIHZpZXdfc291cmNlX3VybAotZnJvbSB3ZWJraXRweS5jb21tYW5kcy5h
YnN0cmFjdHNlcXVlbmNlZGNvbW1hbmQgaW1wb3J0IEFic3RyYWN0U2VxdWVuY2VkQ29tbWFuZAot
ZnJvbSB3ZWJraXRweS5jb21tZW50cyBpbXBvcnQgYnVnX2NvbW1lbnRfZnJvbV9jb21taXRfdGV4
dAotZnJvbSB3ZWJraXRweS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCi1mcm9tIHdlYmtp
dHB5LmdyYW1tYXIgaW1wb3J0IHBsdXJhbGl6ZQotZnJvbSB3ZWJraXRweS53ZWJraXRfbG9nZ2lu
ZyBpbXBvcnQgZXJyb3IsIGxvZwotZnJvbSB3ZWJraXRweS5tdWx0aWNvbW1hbmR0b29sIGltcG9y
dCBBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZAotZnJvbSB3ZWJraXRweS5zdGVwc2VxdWVuY2Ug
aW1wb3J0IFN0ZXBTZXF1ZW5jZQotCi0KLWNsYXNzIEJ1aWxkKEFic3RyYWN0U2VxdWVuY2VkQ29t
bWFuZCk6Ci0gICAgbmFtZSA9ICJidWlsZCIKLSAgICBoZWxwX3RleHQgPSAiVXBkYXRlIHdvcmtp
bmcgY29weSBhbmQgYnVpbGQiCi0gICAgc3RlcHMgPSBbCi0gICAgICAgIHN0ZXBzLkNsZWFuV29y
a2luZ0RpcmVjdG9yeSwKLSAgICAgICAgc3RlcHMuVXBkYXRlLAotICAgICAgICBzdGVwcy5CdWls
ZCwKLSAgICBdCi0KLQotY2xhc3MgQnVpbGRBbmRUZXN0KEFic3RyYWN0U2VxdWVuY2VkQ29tbWFu
ZCk6Ci0gICAgbmFtZSA9ICJidWlsZC1hbmQtdGVzdCIKLSAgICBoZWxwX3RleHQgPSAiVXBkYXRl
IHdvcmtpbmcgY29weSwgYnVpbGQsIGFuZCBydW4gdGhlIHRlc3RzIgotICAgIHN0ZXBzID0gWwot
ICAgICAgICBzdGVwcy5DbGVhbldvcmtpbmdEaXJlY3RvcnksCi0gICAgICAgIHN0ZXBzLlVwZGF0
ZSwKLSAgICAgICAgc3RlcHMuQnVpbGQsCi0gICAgICAgIHN0ZXBzLlJ1blRlc3RzLAotICAgIF0K
LQotCi1jbGFzcyBMYW5kKEFic3RyYWN0U2VxdWVuY2VkQ29tbWFuZCk6Ci0gICAgbmFtZSA9ICJs
YW5kIgotICAgIGhlbHBfdGV4dCA9ICJMYW5kIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5
IGRpZmYgYW5kIHVwZGF0ZXMgdGhlIGFzc29jaWF0ZWQgYnVnIGlmIGFueSIKLSAgICBhcmd1bWVu
dF9uYW1lcyA9ICJbQlVHSURdIgotICAgIHNob3dfaW5fbWFpbl9oZWxwID0gVHJ1ZQotICAgIHN0
ZXBzID0gWwotICAgICAgICBzdGVwcy5FbnN1cmVCdWlsZGVyc0FyZUdyZWVuLAotICAgICAgICBz
dGVwcy5VcGRhdGVDaGFuZ2VMb2dzV2l0aFJldmlld2VyLAotICAgICAgICBzdGVwcy5FbnN1cmVC
dWlsZGVyc0FyZUdyZWVuLAotICAgICAgICBzdGVwcy5CdWlsZCwKLSAgICAgICAgc3RlcHMuUnVu
VGVzdHMsCi0gICAgICAgIHN0ZXBzLkNvbW1pdCwKLSAgICAgICAgc3RlcHMuQ2xvc2VCdWdGb3JM
YW5kRGlmZiwKLSAgICBdCi0gICAgbG9uZ19oZWxwID0gIiIibGFuZCBjb21taXRzIHRoZSBjdXJy
ZW50IHdvcmtpbmcgY29weSBkaWZmIChqdXN0IGFzIHN2biBvciBnaXQgY29tbWl0IHdvdWxkKS4K
LWxhbmQgd2lsbCBidWlsZCBhbmQgcnVuIHRoZSB0ZXN0cyBiZWZvcmUgY29tbWl0dGluZy4KLUlm
IGEgYnVnIGlkIGlzIHByb3ZpZGVkLCBvciBvbmUgY2FuIGJlIGZvdW5kIGluIHRoZSBDaGFuZ2VM
b2cgbGFuZCB3aWxsIHVwZGF0ZSB0aGUgYnVnIGFmdGVyIGNvbW1pdHRpbmcuIiIiCi0KLSAgICBk
ZWYgX3ByZXBhcmVfc3RhdGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAiYnVnX2lkIiA6IChhcmdzIGFuZCBhcmdzWzBdKSBvciBwYXJz
ZV9idWdfaWQodG9vbC5zY20oKS5jcmVhdGVfcGF0Y2goKSksCi0gICAgICAgIH0KLQotCi1jbGFz
cyBBYnN0cmFjdFBhdGNoUHJvY2Vzc2luZ0NvbW1hbmQoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1h
bmQpOgotICAgICMgU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCB0aGUgbWV0aG9kcyBiZWxvdy4g
IFdlIGRvbid0IGRlY2xhcmUgdGhlbSBoZXJlCi0gICAgIyBiZWNhdXNlIHdlIHdhbnQgdG8gYmUg
YWJsZSB0byBpbXBsZW1lbnQgdGhlbSB3aXRoIG1peC1pbnMuCi0gICAgIwotICAgICMgZGVmIF9m
ZXRjaF9saXN0X29mX3BhdGNoZXNfdG9fcHJvY2VzcyhzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29s
KToKLSAgICAjIGRlZiBfcHJlcGFyZV90b19wcm9jZXNzKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRv
b2wpOgotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfY29sbGVjdF9wYXRjaGVzX2J5X2J1
ZyhwYXRjaGVzKToKLSAgICAgICAgYnVnc190b19wYXRjaGVzID0ge30KLSAgICAgICAgZm9yIHBh
dGNoIGluIHBhdGNoZXM6Ci0gICAgICAgICAgICBidWdzX3RvX3BhdGNoZXNbcGF0Y2guYnVnX2lk
KCldID0gYnVnc190b19wYXRjaGVzLmdldChwYXRjaC5idWdfaWQoKSwgW10pICsgW3BhdGNoXQot
ICAgICAgICByZXR1cm4gYnVnc190b19wYXRjaGVzCi0KLSAgICBkZWYgZXhlY3V0ZShzZWxmLCBv
cHRpb25zLCBhcmdzLCB0b29sKToKLSAgICAgICAgc2VsZi5fcHJlcGFyZV90b19wcm9jZXNzKG9w
dGlvbnMsIGFyZ3MsIHRvb2wpCi0gICAgICAgIHBhdGNoZXMgPSBzZWxmLl9mZXRjaF9saXN0X29m
X3BhdGNoZXNfdG9fcHJvY2VzcyhvcHRpb25zLCBhcmdzLCB0b29sKQotCi0gICAgICAgICMgSXQn
cyBuaWNlIHRvIHByaW50IG91dCB0b3RhbCBzdGF0aXN0aWNzLgotICAgICAgICBidWdzX3RvX3Bh
dGNoZXMgPSBzZWxmLl9jb2xsZWN0X3BhdGNoZXNfYnlfYnVnKHBhdGNoZXMpCi0gICAgICAgIGxv
ZygiUHJvY2Vzc2luZyAlcyBmcm9tICVzLiIgJSAocGx1cmFsaXplKCJwYXRjaCIsIGxlbihwYXRj
aGVzKSksIHBsdXJhbGl6ZSgiYnVnIiwgbGVuKGJ1Z3NfdG9fcGF0Y2hlcykpKSkKLQotICAgICAg
ICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKLSAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3NfcGF0Y2go
cGF0Y2gsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpCi0KLQotY2xhc3MgQWJzdHJhY3RQYXRjaFNlcXVl
bmNpbmdDb21tYW5kKEFic3RyYWN0UGF0Y2hQcm9jZXNzaW5nQ29tbWFuZCk6Ci0gICAgcHJlcGFy
ZV9zdGVwcyA9IE5vbmUKLSAgICBtYWluX3N0ZXBzID0gTm9uZQotCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYpOgotICAgICAgICBvcHRpb25zID0gW10KLSAgICAgICAgc2VsZi5fcHJlcGFyZV9zZXF1
ZW5jZSA9IFN0ZXBTZXF1ZW5jZShzZWxmLnByZXBhcmVfc3RlcHMpCi0gICAgICAgIHNlbGYuX21h
aW5fc2VxdWVuY2UgPSBTdGVwU2VxdWVuY2Uoc2VsZi5tYWluX3N0ZXBzKQotICAgICAgICBvcHRp
b25zID0gc29ydGVkKHNldChzZWxmLl9wcmVwYXJlX3NlcXVlbmNlLm9wdGlvbnMoKSArIHNlbGYu
X21haW5fc2VxdWVuY2Uub3B0aW9ucygpKSkKLSAgICAgICAgQWJzdHJhY3RQYXRjaFByb2Nlc3Np
bmdDb21tYW5kLl9faW5pdF9fKHNlbGYsIG9wdGlvbnMpCi0KLSAgICBkZWYgX3ByZXBhcmVfdG9f
cHJvY2VzcyhzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKLSAgICAgICAgc2VsZi5fcHJlcGFy
ZV9zZXF1ZW5jZS5ydW5fYW5kX2hhbmRsZV9lcnJvcnModG9vbCwgb3B0aW9ucykKLQotICAgIGRl
ZiBfcHJvY2Vzc19wYXRjaChzZWxmLCBwYXRjaCwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAg
ICAgIHN0YXRlID0geyAicGF0Y2giIDogcGF0Y2ggfQotICAgICAgICBzZWxmLl9tYWluX3NlcXVl
bmNlLnJ1bl9hbmRfaGFuZGxlX2Vycm9ycyh0b29sLCBvcHRpb25zLCBzdGF0ZSkKLQotCi1jbGFz
cyBQcm9jZXNzQXR0YWNobWVudHNNaXhpbihvYmplY3QpOgotICAgIGRlZiBfZmV0Y2hfbGlzdF9v
Zl9wYXRjaGVzX3RvX3Byb2Nlc3Moc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAg
IHJldHVybiBtYXAobGFtYmRhIHBhdGNoX2lkOiB0b29sLmJ1Z3MuZmV0Y2hfYXR0YWNobWVudChw
YXRjaF9pZCksIGFyZ3MpCi0KLQotY2xhc3MgUHJvY2Vzc0J1Z3NNaXhpbihvYmplY3QpOgotICAg
IGRlZiBfZmV0Y2hfbGlzdF9vZl9wYXRjaGVzX3RvX3Byb2Nlc3Moc2VsZiwgb3B0aW9ucywgYXJn
cywgdG9vbCk6Ci0gICAgICAgIGFsbF9wYXRjaGVzID0gW10KLSAgICAgICAgZm9yIGJ1Z19pZCBp
biBhcmdzOgotICAgICAgICAgICAgcGF0Y2hlcyA9IHRvb2wuYnVncy5mZXRjaF9idWcoYnVnX2lk
KS5yZXZpZXdlZF9wYXRjaGVzKCkKLSAgICAgICAgICAgIGxvZygiJXMgZm91bmQgb24gYnVnICVz
LiIgJSAocGx1cmFsaXplKCJyZXZpZXdlZCBwYXRjaCIsIGxlbihwYXRjaGVzKSksIGJ1Z19pZCkp
Ci0gICAgICAgICAgICBhbGxfcGF0Y2hlcyArPSBwYXRjaGVzCi0gICAgICAgIHJldHVybiBhbGxf
cGF0Y2hlcwotCi0KLWNsYXNzIENoZWNrU3R5bGUoQWJzdHJhY3RQYXRjaFNlcXVlbmNpbmdDb21t
YW5kLCBQcm9jZXNzQXR0YWNobWVudHNNaXhpbik6Ci0gICAgbmFtZSA9ICJjaGVjay1zdHlsZSIK
LSAgICBoZWxwX3RleHQgPSAiUnVuIGNoZWNrLXdlYmtpdC1zdHlsZSBvbiB0aGUgc3BlY2lmaWVk
IGF0dGFjaG1lbnRzIgotICAgIGFyZ3VtZW50X25hbWVzID0gIkFUVEFDSE1FTlRfSUQgW0FUVEFD
SE1FTlRfSURTXSIKLSAgICBtYWluX3N0ZXBzID0gWwotICAgICAgICBzdGVwcy5DbGVhbldvcmtp
bmdEaXJlY3RvcnksCi0gICAgICAgIHN0ZXBzLlVwZGF0ZSwKLSAgICAgICAgc3RlcHMuQXBwbHlQ
YXRjaCwKLSAgICAgICAgc3RlcHMuQ2hlY2tTdHlsZSwKLSAgICBdCi0KLQotY2xhc3MgQnVpbGRB
dHRhY2htZW50KEFic3RyYWN0UGF0Y2hTZXF1ZW5jaW5nQ29tbWFuZCwgUHJvY2Vzc0F0dGFjaG1l
bnRzTWl4aW4pOgotICAgIG5hbWUgPSAiYnVpbGQtYXR0YWNobWVudCIKLSAgICBoZWxwX3RleHQg
PSAiQXBwbHkgYW5kIGJ1aWxkIHBhdGNoZXMgZnJvbSBidWd6aWxsYSIKLSAgICBhcmd1bWVudF9u
YW1lcyA9ICJBVFRBQ0hNRU5UX0lEIFtBVFRBQ0hNRU5UX0lEU10iCi0gICAgbWFpbl9zdGVwcyA9
IFsKLSAgICAgICAgc3RlcHMuQ2xlYW5Xb3JraW5nRGlyZWN0b3J5LAotICAgICAgICBzdGVwcy5V
cGRhdGUsCi0gICAgICAgIHN0ZXBzLkFwcGx5UGF0Y2gsCi0gICAgICAgIHN0ZXBzLkJ1aWxkLAot
ICAgIF0KLQotCi1jbGFzcyBBYnN0cmFjdFBhdGNoQXBwbHlpbmdDb21tYW5kKEFic3RyYWN0UGF0
Y2hTZXF1ZW5jaW5nQ29tbWFuZCk6Ci0gICAgcHJlcGFyZV9zdGVwcyA9IFsKLSAgICAgICAgc3Rl
cHMuRW5zdXJlTG9jYWxDb21taXRJZk5lZWRlZCwKLSAgICAgICAgc3RlcHMuQ2xlYW5Xb3JraW5n
RGlyZWN0b3J5V2l0aExvY2FsQ29tbWl0cywKLSAgICAgICAgc3RlcHMuVXBkYXRlLAotICAgIF0K
LSAgICBtYWluX3N0ZXBzID0gWwotICAgICAgICBzdGVwcy5BcHBseVBhdGNoV2l0aExvY2FsQ29t
bWl0LAotICAgIF0KLSAgICBsb25nX2hlbHAgPSAiIiJVcGRhdGVzIHRoZSB3b3JraW5nIGNvcHku
Ci1Eb3dubG9hZHMgYW5kIGFwcGxpZXMgdGhlIHBhdGNoZXMsIGNyZWF0aW5nIGxvY2FsIGNvbW1p
dHMgaWYgbmVjZXNzYXJ5LiIiIgotCi0KLWNsYXNzIEFwcGx5QXR0YWNobWVudChBYnN0cmFjdFBh
dGNoQXBwbHlpbmdDb21tYW5kLCBQcm9jZXNzQXR0YWNobWVudHNNaXhpbik6Ci0gICAgbmFtZSA9
ICJhcHBseS1hdHRhY2htZW50IgotICAgIGhlbHBfdGV4dCA9ICJBcHBseSBhbiBhdHRhY2htZW50
IHRvIHRoZSBsb2NhbCB3b3JraW5nIGRpcmVjdG9yeSIKLSAgICBhcmd1bWVudF9uYW1lcyA9ICJB
VFRBQ0hNRU5UX0lEIFtBVFRBQ0hNRU5UX0lEU10iCi0gICAgc2hvd19pbl9tYWluX2hlbHAgPSBU
cnVlCi0KLQotY2xhc3MgQXBwbHlGcm9tQnVnKEFic3RyYWN0UGF0Y2hBcHBseWluZ0NvbW1hbmQs
IFByb2Nlc3NCdWdzTWl4aW4pOgotICAgIG5hbWUgPSAiYXBwbHktZnJvbS1idWciCi0gICAgaGVs
cF90ZXh0ID0gIkFwcGx5IHJldmlld2VkIHBhdGNoZXMgZnJvbSBwcm92aWRlZCBidWdzIHRvIHRo
ZSBsb2NhbCB3b3JraW5nIGRpcmVjdG9yeSIKLSAgICBhcmd1bWVudF9uYW1lcyA9ICJCVUdJRCBb
QlVHSURTXSIKLSAgICBzaG93X2luX21haW5faGVscCA9IFRydWUKLQotCi1jbGFzcyBBYnN0cmFj
dFBhdGNoTGFuZGluZ0NvbW1hbmQoQWJzdHJhY3RQYXRjaFNlcXVlbmNpbmdDb21tYW5kKToKLSAg
ICBwcmVwYXJlX3N0ZXBzID0gWwotICAgICAgICBzdGVwcy5FbnN1cmVCdWlsZGVyc0FyZUdyZWVu
LAotICAgIF0KLSAgICBtYWluX3N0ZXBzID0gWwotICAgICAgICBzdGVwcy5DbGVhbldvcmtpbmdE
aXJlY3RvcnksCi0gICAgICAgIHN0ZXBzLlVwZGF0ZSwKLSAgICAgICAgc3RlcHMuQXBwbHlQYXRj
aCwKLSAgICAgICAgc3RlcHMuRW5zdXJlQnVpbGRlcnNBcmVHcmVlbiwKLSAgICAgICAgc3RlcHMu
QnVpbGQsCi0gICAgICAgIHN0ZXBzLlJ1blRlc3RzLAotICAgICAgICBzdGVwcy5Db21taXQsCi0g
ICAgICAgIHN0ZXBzLkNsb3NlUGF0Y2gsCi0gICAgICAgIHN0ZXBzLkNsb3NlQnVnLAotICAgIF0K
LSAgICBsb25nX2hlbHAgPSAiIiJDaGVja3MgdG8gbWFrZSBzdXJlIGJ1aWxkZXJzIGFyZSBncmVl
bi4KLVVwZGF0ZXMgdGhlIHdvcmtpbmcgY29weS4KLUFwcGxpZXMgdGhlIHBhdGNoLgotQnVpbGRz
LgotUnVucyB0aGUgbGF5b3V0IHRlc3RzLgotQ29tbWl0cyB0aGUgcGF0Y2guCi1DbGVhcnMgdGhl
IGZsYWdzIG9uIHRoZSBwYXRjaC4KLUNsb3NlcyB0aGUgYnVnIGlmIG5vIHBhdGNoZXMgYXJlIG1h
cmtlZCBmb3IgcmV2aWV3LiIiIgotCi0KLWNsYXNzIExhbmRBdHRhY2htZW50KEFic3RyYWN0UGF0
Y2hMYW5kaW5nQ29tbWFuZCwgUHJvY2Vzc0F0dGFjaG1lbnRzTWl4aW4pOgotICAgIG5hbWUgPSAi
bGFuZC1hdHRhY2htZW50IgotICAgIGhlbHBfdGV4dCA9ICJMYW5kIHBhdGNoZXMgZnJvbSBidWd6
aWxsYSwgb3B0aW9uYWxseSBidWlsZGluZyBhbmQgdGVzdGluZyB0aGVtIGZpcnN0IgotICAgIGFy
Z3VtZW50X25hbWVzID0gIkFUVEFDSE1FTlRfSUQgW0FUVEFDSE1FTlRfSURTXSIKLSAgICBzaG93
X2luX21haW5faGVscCA9IFRydWUKLQotCi1jbGFzcyBMYW5kRnJvbUJ1ZyhBYnN0cmFjdFBhdGNo
TGFuZGluZ0NvbW1hbmQsIFByb2Nlc3NCdWdzTWl4aW4pOgotICAgIG5hbWUgPSAibGFuZC1mcm9t
LWJ1ZyIKLSAgICBoZWxwX3RleHQgPSAiTGFuZCBhbGwgcGF0Y2hlcyBvbiB0aGUgZ2l2ZW4gYnVn
cywgb3B0aW9uYWxseSBidWlsZGluZyBhbmQgdGVzdGluZyB0aGVtIGZpcnN0IgotICAgIGFyZ3Vt
ZW50X25hbWVzID0gIkJVR0lEIFtCVUdJRFNdIgotICAgIHNob3dfaW5fbWFpbl9oZWxwID0gVHJ1
ZQotCi0KLWNsYXNzIEFic3RyYWN0Um9sbG91dFByZXBDb21tYW5kKEFic3RyYWN0U2VxdWVuY2Vk
Q29tbWFuZCk6Ci0gICAgYXJndW1lbnRfbmFtZXMgPSAiUkVWSVNJT04gUkVBU09OIgotCi0gICAg
ZGVmIF9wYXJzZV9idWdfaWRfZnJvbV9yZXZpc2lvbl9kaWZmKHNlbGYsIHJldmlzaW9uKToKLSAg
ICAgICAgb3JpZ2luYWxfZGlmZiA9IHNlbGYudG9vbC5zY20oKS5kaWZmX2Zvcl9yZXZpc2lvbihy
ZXZpc2lvbikKLSAgICAgICAgcmV0dXJuIHBhcnNlX2J1Z19pZChvcmlnaW5hbF9kaWZmKQotCi0g
ICAgZGVmIF9idWdfaWRfZm9yX3JldmlzaW9uKHNlbGYsIHJldmlzaW9uKToKLSAgICAgICAgYnVn
X2lkID0gc2VsZi5fcGFyc2VfYnVnX2lkX2Zyb21fcmV2aXNpb25fZGlmZihyZXZpc2lvbikKLSAg
ICAgICAgaWYgYnVnX2lkOgotICAgICAgICAgICAgbG9nKCJQcmVwYXJpbmcgcm9sbG91dCBmb3Ig
YnVnICVzLiIgJSBidWdfaWQpCi0gICAgICAgICAgICByZXR1cm4gYnVnX2lkCi0gICAgICAgIGxv
ZygiVW5hYmxlIHRvIHBhcnNlIGJ1ZyBudW1iZXIgZnJvbSBkaWZmLiIpCi0KLSAgICBkZWYgX3By
ZXBhcmVfc3RhdGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIHJldmlzaW9u
ID0gYXJnc1swXQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgInJldmlzaW9uIiA6IHJl
dmlzaW9uLAotICAgICAgICAgICAgImJ1Z19pZCIgOiBzZWxmLl9idWdfaWRfZm9yX3JldmlzaW9u
KHJldmlzaW9uKSwKLSAgICAgICAgICAgICJyZWFzb24iIDogYXJnc1sxXSwKLSAgICAgICAgfQot
Ci0KLWNsYXNzIFByZXBhcmVSb2xsb3V0KEFic3RyYWN0Um9sbG91dFByZXBDb21tYW5kKToKLSAg
ICBuYW1lID0gInByZXBhcmUtcm9sbG91dCIKLSAgICBoZWxwX3RleHQgPSAiUmV2ZXJ0IHRoZSBn
aXZlbiByZXZpc2lvbiBpbiB0aGUgd29ya2luZyBjb3B5IGFuZCBwcmVwYXJlIENoYW5nZUxvZ3Mg
d2l0aCByZXZlcnQgcmVhc29uIgotICAgIGxvbmdfaGVscCA9ICIiIlVwZGF0ZXMgdGhlIHdvcmtp
bmcgY29weS4KLUFwcGxpZXMgdGhlIGludmVyc2UgZGlmZiBmb3IgdGhlIHByb3ZpZGVkIHJldmlz
aW9uLgotQ3JlYXRlcyBhbiBhcHByb3ByaWF0ZSByb2xsb3V0IENoYW5nZUxvZywgaW5jbHVkaW5n
IGEgdHJhYyBsaW5rIGFuZCBidWcgbGluay4KLSIiIgotICAgIHN0ZXBzID0gWwotICAgICAgICBz
dGVwcy5DbGVhbldvcmtpbmdEaXJlY3RvcnksCi0gICAgICAgIHN0ZXBzLlVwZGF0ZSwKLSAgICAg
ICAgc3RlcHMuUmV2ZXJ0UmV2aXNpb24sCi0gICAgICAgIHN0ZXBzLlByZXBhcmVDaGFuZ2VMb2dG
b3JSZXZlcnQsCi0gICAgXQotCi0KLWNsYXNzIENyZWF0ZVJvbGxvdXQoQWJzdHJhY3RSb2xsb3V0
UHJlcENvbW1hbmQpOgotICAgIG5hbWUgPSAiY3JlYXRlLXJvbGxvdXQiCi0gICAgaGVscF90ZXh0
ID0gIkNyZWF0ZXMgYSBidWcgdG8gdHJhY2sgYSBicm9rZW4gU1ZOIHJldmlzaW9uIGFuZCB1cGxv
YWRzIGEgcm9sbG91dCBwYXRjaC4iCi0gICAgc3RlcHMgPSBbCi0gICAgICAgIHN0ZXBzLkNyZWF0
ZUJ1ZywKLSAgICAgICAgc3RlcHMuQ2xlYW5Xb3JraW5nRGlyZWN0b3J5LAotICAgICAgICBzdGVw
cy5VcGRhdGUsCi0gICAgICAgIHN0ZXBzLlJldmVydFJldmlzaW9uLCAjIE5vdGljZSB0aGF0IHdl
IHN0aWxsIGNyZWF0ZSB0aGUgYnVnIGlmIHRoaXMgc3RlcCBmYWlscy4KLSAgICAgICAgc3RlcHMu
UHJlcGFyZUNoYW5nZUxvZ0ZvclJldmVydCwKLSAgICAgICAgc3RlcHMuUG9zdERpZmZGb3JSZXZl
cnQsCi0gICAgXQotCi0gICAgZGVmIF9wcmVwYXJlX3N0YXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3Ms
IHRvb2wpOgotICAgICAgICBzdGF0ZSA9IEFic3RyYWN0Um9sbG91dFByZXBDb21tYW5kLl9wcmVw
YXJlX3N0YXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpCi0gICAgICAgICMgQ3VycmVudGx5
LCBzdGF0ZVsiYnVnX2lkIl0gcG9pbnRzIHRvIHRoZSBidWcgdGhhdCBjYXVzZWQgdGhlCi0gICAg
ICAgICMgcmVncmVzc2lvbi4gIFdlIHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJ1ZyB0aGF0IGJsb2Nr
cyB0aGUgb2xkIGJ1ZwotICAgICAgICAjIHNvIHdlIG1vdmUgc3RhdGVbImJ1Z19pZCJdIHRvIHN0
YXRlWyJidWdfYmxvY2tlZCJdIGFuZCBkZWxldGUgdGhlCi0gICAgICAgICMgb2xkIHN0YXRlWyJi
dWdfaWQiXSBzbyB0aGF0IHN0ZXBzLkNyZWF0ZUJ1ZyB3aWxsIGFjdHVhbGx5IGNyZWF0ZQotICAg
ICAgICAjIHRoZSBuZXcgYnVnIHRoYXQgd2Ugd2FudCAoYW5kIHN1YnNlcXVlbnRseSBzdG9yZSBp
dHMgYnVnIGlkIGludG8KLSAgICAgICAgIyBzdGF0ZVsiYnVnX2lkIl0pCi0gICAgICAgIHN0YXRl
WyJidWdfYmxvY2tlZCJdID0gc3RhdGVbImJ1Z19pZCJdCi0gICAgICAgIGRlbCBzdGF0ZVsiYnVn
X2lkIl0KLSAgICAgICAgc3RhdGVbImJ1Z190aXRsZSJdID0gIlJFR1JFU1NJT04ociVzKTogJXMi
ICUgKHN0YXRlWyJyZXZpc2lvbiJdLCBzdGF0ZVsicmVhc29uIl0pCi0gICAgICAgIHN0YXRlWyJi
dWdfZGVzY3JpcHRpb24iXSA9ICIlcyBicm9rZSB0aGUgYnVpbGQ6XG4lcyIgJSAodmlld19zb3Vy
Y2VfdXJsKHN0YXRlWyJyZXZpc2lvbiJdKSwgc3RhdGVbInJlYXNvbiJdKQotICAgICAgICAjIEZJ
WE1FOiBJZiB3ZSBoYWQgbW9yZSBjb250ZXh0IGhlcmUsIHdlIGNvdWxkIGxpbmsgdG8gb3RoZXIg
b3BlbiBidWdzCi0gICAgICAgICMgICAgICAgIHRoYXQgbWVudGlvbiB0aGUgdGVzdCB0aGF0IHJl
Z3Jlc3NlZC4KLSAgICAgICAgaWYgb3B0aW9ucy5wYXJlbnRfY29tbWFuZCA9PSAic2hlcmlmZi1i
b3QiOgotICAgICAgICAgICAgc3RhdGVbImJ1Z19kZXNjcmlwdGlvbiJdICs9ICIiIgotCi1UaGlz
IGlzIGFuIGF1dG9tYXRpYyBidWcgcmVwb3J0IGdlbmVyYXRlZCBieSB0aGUgc2hlcmlmZi1ib3Qu
IElmIHRoaXMgYnVnCi1yZXBvcnQgd2FzIGNyZWF0ZWQgYmVjYXVzZSBvZiBhIGZsYWt5IHRlc3Qs
IHBsZWFzZSBmaWxlIGEgYnVnIGZvciB0aGUgZmxha3kKLXRlc3QgKGlmIHdlIGRvbid0IGFscmVh
ZHkgaGF2ZSBvbmUgb24gZmlsZSkgYW5kIGR1cCB0aGlzIGJ1ZyBhZ2FpbnN0IHRoYXQgYnVnCi1z
byB0aGF0IHdlIGNhbiB0cmFjayBob3cgb2Z0ZW4gdGhlc2UgZmxha3kgdGVzdHMgY2FzZSBwYWlu
LgotCi0iT25seSB5b3UgY2FuIHByZXZlbnQgZm9yZXN0IGZpcmVzLiIgLS0gU21va2V5IHRoZSBC
ZWFyCi0iIiIKLSAgICAgICAgcmV0dXJuIHN0YXRlCi0KLQotY2xhc3MgUm9sbG91dChBYnN0cmFj
dFJvbGxvdXRQcmVwQ29tbWFuZCk6Ci0gICAgbmFtZSA9ICJyb2xsb3V0IgotICAgIHNob3dfaW5f
bWFpbl9oZWxwID0gVHJ1ZQotICAgIGhlbHBfdGV4dCA9ICJSZXZlcnQgdGhlIGdpdmVuIHJldmlz
aW9uIGluIHRoZSB3b3JraW5nIGNvcHkgYW5kIG9wdGlvbmFsbHkgY29tbWl0IHRoZSByZXZlcnQg
YW5kIHJlLW9wZW4gdGhlIG9yaWdpbmFsIGJ1ZyIKLSAgICBsb25nX2hlbHAgPSAiIiJVcGRhdGVz
IHRoZSB3b3JraW5nIGNvcHkuCi1BcHBsaWVzIHRoZSBpbnZlcnNlIGRpZmYgZm9yIHRoZSBwcm92
aWRlZCByZXZpc2lvbi4KLUNyZWF0ZXMgYW4gYXBwcm9wcmlhdGUgcm9sbG91dCBDaGFuZ2VMb2cs
IGluY2x1ZGluZyBhIHRyYWMgbGluayBhbmQgYnVnIGxpbmsuCi1PcGVucyB0aGUgZ2VuZXJhdGVk
IENoYW5nZUxvZ3MgaW4gJEVESVRPUi4KLVNob3dzIHRoZSBwcmVwYXJlZCBkaWZmIGZvciBjb25m
aXJtYXRpb24uCi1Db21taXRzIHRoZSByZXZlcnQgYW5kIHVwZGF0ZXMgdGhlIGJ1ZyAoaW5jbHVk
aW5nIHJlLW9wZW5pbmcgdGhlIGJ1ZyBpZiBuZWNlc3NhcnkpLiIiIgotICAgIHN0ZXBzID0gWwot
ICAgICAgICBzdGVwcy5DbGVhbldvcmtpbmdEaXJlY3RvcnksCi0gICAgICAgIHN0ZXBzLlVwZGF0
ZSwKLSAgICAgICAgc3RlcHMuUmV2ZXJ0UmV2aXNpb24sCi0gICAgICAgIHN0ZXBzLlByZXBhcmVD
aGFuZ2VMb2dGb3JSZXZlcnQsCi0gICAgICAgIHN0ZXBzLkVkaXRDaGFuZ2VMb2csCi0gICAgICAg
IHN0ZXBzLkNvbmZpcm1EaWZmLAotICAgICAgICBzdGVwcy5CdWlsZCwKLSAgICAgICAgc3RlcHMu
Q29tbWl0LAotICAgICAgICBzdGVwcy5SZW9wZW5CdWdBZnRlclJvbGxvdXQsCi0gICAgXQpJbmRl
eDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9kb3dubG9hZF91bml0dGVz
dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRz
L2Rvd25sb2FkX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1NjM2NikKKysrIFdlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbWFuZHMvZG93bmxvYWRfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTMwICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1l
dDoKLSMKLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1mcm9tIHdlYmtpdHB5LmNvbW1h
bmRzX3JlZmVyZW5jZXMgaW1wb3J0IE1vY2sKLWZyb20gd2Via2l0cHkuY29tbWFuZHMuY29tbWFu
ZHRlc3QgaW1wb3J0IENvbW1hbmRzVGVzdAotZnJvbSB3ZWJraXRweS5jb21tYW5kcy5kb3dubG9h
ZCBpbXBvcnQgKgotCi0KLWNsYXNzIERvd25sb2FkQ29tbWFuZHNUZXN0KENvbW1hbmRzVGVzdCk6
Ci0gICAgZGVmIF9kZWZhdWx0X29wdGlvbnMoc2VsZik6Ci0gICAgICAgIG9wdGlvbnMgPSBNb2Nr
KCkKLSAgICAgICAgb3B0aW9ucy5mb3JjZV9jbGVhbiA9IEZhbHNlCi0gICAgICAgIG9wdGlvbnMu
Y2xlYW4gPSBUcnVlCi0gICAgICAgIG9wdGlvbnMuY2hlY2tfYnVpbGRlcnMgPSBUcnVlCi0gICAg
ICAgIG9wdGlvbnMucXVpZXQgPSBGYWxzZQotICAgICAgICBvcHRpb25zLm5vbl9pbnRlcmFjdGl2
ZSA9IEZhbHNlCi0gICAgICAgIG9wdGlvbnMudXBkYXRlID0gVHJ1ZQotICAgICAgICBvcHRpb25z
LmJ1aWxkID0gVHJ1ZQotICAgICAgICBvcHRpb25zLnRlc3QgPSBUcnVlCi0gICAgICAgIG9wdGlv
bnMuY2xvc2VfYnVnID0gVHJ1ZQotICAgICAgICByZXR1cm4gb3B0aW9ucwotCi0gICAgZGVmIHRl
c3RfYnVpbGQoc2VsZik6Ci0gICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICJVcGRhdGluZyB3b3Jr
aW5nIGRpcmVjdG9yeVxuQnVpbGRpbmcgV2ViS2l0XG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0X2V4
ZWN1dGVfb3V0cHV0cyhCdWlsZCgpLCBbXSwgb3B0aW9ucz1zZWxmLl9kZWZhdWx0X29wdGlvbnMo
KSwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKLQotICAgIGRlZiB0ZXN0X2J1aWxk
X2FuZF90ZXN0KHNlbGYpOgotICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiVXBkYXRpbmcgd29y
a2luZyBkaXJlY3RvcnlcbkJ1aWxkaW5nIFdlYktpdFxuUnVubmluZyBQeXRob24gdW5pdCB0ZXN0
c1xuUnVubmluZyBQZXJsIHVuaXQgdGVzdHNcblJ1bm5pbmcgSmF2YVNjcmlwdENvcmUgdGVzdHNc
blJ1bm5pbmcgcnVuLXdlYmtpdC10ZXN0c1xuIgotICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRl
X291dHB1dHMoQnVpbGRBbmRUZXN0KCksIFtdLCBvcHRpb25zPXNlbGYuX2RlZmF1bHRfb3B0aW9u
cygpLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQotCi0gICAgZGVmIHRlc3RfYXBw
bHlfYXR0YWNobWVudChzZWxmKToKLSAgICAgICAgb3B0aW9ucyA9IHNlbGYuX2RlZmF1bHRfb3B0
aW9ucygpCi0gICAgICAgIG9wdGlvbnMudXBkYXRlID0gVHJ1ZQotICAgICAgICBvcHRpb25zLmxv
Y2FsX2NvbW1pdCA9IFRydWUKLSAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0gIlVwZGF0aW5nIHdv
cmtpbmcgZGlyZWN0b3J5XG5Qcm9jZXNzaW5nIDEgcGF0Y2ggZnJvbSAxIGJ1Zy5cblByb2Nlc3Np
bmcgcGF0Y2ggMTk3IGZyb20gYnVnIDQyLlxuIgotICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRl
X291dHB1dHMoQXBwbHlBdHRhY2htZW50KCksIFsxOTddLCBvcHRpb25zPW9wdGlvbnMsIGV4cGVj
dGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCi0KLSAgICBkZWYgdGVzdF9hcHBseV9wYXRjaGVz
KHNlbGYpOgotICAgICAgICBvcHRpb25zID0gc2VsZi5fZGVmYXVsdF9vcHRpb25zKCkKLSAgICAg
ICAgb3B0aW9ucy51cGRhdGUgPSBUcnVlCi0gICAgICAgIG9wdGlvbnMubG9jYWxfY29tbWl0ID0g
VHJ1ZQotICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3Rv
cnlcbjIgcmV2aWV3ZWQgcGF0Y2hlcyBmb3VuZCBvbiBidWcgNDIuXG5Qcm9jZXNzaW5nIDIgcGF0
Y2hlcyBmcm9tIDEgYnVnLlxuUHJvY2Vzc2luZyBwYXRjaCAxOTcgZnJvbSBidWcgNDIuXG5Qcm9j
ZXNzaW5nIHBhdGNoIDEyOCBmcm9tIGJ1ZyA0Mi5cbiIKLSAgICAgICAgc2VsZi5hc3NlcnRfZXhl
Y3V0ZV9vdXRwdXRzKEFwcGx5RnJvbUJ1ZygpLCBbNDJdLCBvcHRpb25zPW9wdGlvbnMsIGV4cGVj
dGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCi0KLSAgICBkZWYgdGVzdF9sYW5kX2RpZmYoc2Vs
Zik6Ci0gICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICJCdWlsZGluZyBXZWJLaXRcblJ1bm5pbmcg
UHl0aG9uIHVuaXQgdGVzdHNcblJ1bm5pbmcgUGVybCB1bml0IHRlc3RzXG5SdW5uaW5nIEphdmFT
Y3JpcHRDb3JlIHRlc3RzXG5SdW5uaW5nIHJ1bi13ZWJraXQtdGVzdHNcblVwZGF0aW5nIGJ1ZyA0
MlxuIgotICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1dHMoTGFuZCgpLCBbNDJdLCBv
cHRpb25zPXNlbGYuX2RlZmF1bHRfb3B0aW9ucygpLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRf
c3RkZXJyKQotCi0gICAgZGVmIHRlc3RfY2hlY2tfc3R5bGUoc2VsZik6Ci0gICAgICAgIGV4cGVj
dGVkX3N0ZGVyciA9ICJQcm9jZXNzaW5nIDEgcGF0Y2ggZnJvbSAxIGJ1Zy5cblVwZGF0aW5nIHdv
cmtpbmcgZGlyZWN0b3J5XG5Qcm9jZXNzaW5nIHBhdGNoIDE5NyBmcm9tIGJ1ZyA0Mi5cblJ1bm5p
bmcgY2hlY2std2Via2l0LXN0eWxlXG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0X2V4ZWN1dGVfb3V0
cHV0cyhDaGVja1N0eWxlKCksIFsxOTddLCBvcHRpb25zPXNlbGYuX2RlZmF1bHRfb3B0aW9ucygp
LCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQotCi0gICAgZGVmIHRlc3RfYnVpbGRf
YXR0YWNobWVudChzZWxmKToKLSAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0gIlByb2Nlc3Npbmcg
MSBwYXRjaCBmcm9tIDEgYnVnLlxuVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnlcblByb2Nlc3Np
bmcgcGF0Y2ggMTk3IGZyb20gYnVnIDQyLlxuQnVpbGRpbmcgV2ViS2l0XG4iCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2V4ZWN1dGVfb3V0cHV0cyhCdWlsZEF0dGFjaG1lbnQoKSwgWzE5N10sIG9wdGlv
bnM9c2VsZi5fZGVmYXVsdF9vcHRpb25zKCksIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRl
cnIpCi0KLSAgICBkZWYgdGVzdF9sYW5kX2F0dGFjaG1lbnQoc2VsZik6Ci0gICAgICAgICMgRklY
TUU6IFRoaXMgZXhwZWN0ZWQgcmVzdWx0IGlzIGltcGVyZmVjdCwgbm90aWNlIGhvdyBpdCdzIHNl
ZWluZyB0aGUgc2FtZSBwYXRjaCBhcyBzdGlsbCB0aGVyZSBhZnRlciBpdCB0aG91Z2h0IGl0IHdv
dWxkIGhhdmUgY2xlYXJlZCB0aGUgZmxhZ3MuCi0gICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICIi
IlByb2Nlc3NpbmcgMSBwYXRjaCBmcm9tIDEgYnVnLgotVXBkYXRpbmcgd29ya2luZyBkaXJlY3Rv
cnkKLVByb2Nlc3NpbmcgcGF0Y2ggMTk3IGZyb20gYnVnIDQyLgotQnVpbGRpbmcgV2ViS2l0Ci1S
dW5uaW5nIFB5dGhvbiB1bml0IHRlc3RzCi1SdW5uaW5nIFBlcmwgdW5pdCB0ZXN0cwotUnVubmlu
ZyBKYXZhU2NyaXB0Q29yZSB0ZXN0cwotUnVubmluZyBydW4td2Via2l0LXRlc3RzCi1Ob3QgY2xv
c2luZyBidWcgNDIgYXMgYXR0YWNobWVudCAxOTcgaGFzIHJldmlldz0rLiAgQXNzdW1pbmcgdGhl
cmUgYXJlIG1vcmUgcGF0Y2hlcyB0byBsYW5kIGZyb20gdGhpcyBidWcuCi0iIiIKLSAgICAgICAg
c2VsZi5hc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKExhbmRBdHRhY2htZW50KCksIFsxOTddLCBvcHRp
b25zPXNlbGYuX2RlZmF1bHRfb3B0aW9ucygpLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3Rk
ZXJyKQotCi0gICAgZGVmIHRlc3RfbGFuZF9wYXRjaGVzKHNlbGYpOgotICAgICAgICAjIEZJWE1F
OiBUaGlzIGV4cGVjdGVkIHJlc3VsdCBpcyBpbXBlcmZlY3QsIG5vdGljZSBob3cgaXQncyBzZWVp
bmcgdGhlIHNhbWUgcGF0Y2ggYXMgc3RpbGwgdGhlcmUgYWZ0ZXIgaXQgdGhvdWdodCBpdCB3b3Vs
ZCBoYXZlIGNsZWFyZWQgdGhlIGZsYWdzLgotICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiIiIy
IHJldmlld2VkIHBhdGNoZXMgZm91bmQgb24gYnVnIDQyLgotUHJvY2Vzc2luZyAyIHBhdGNoZXMg
ZnJvbSAxIGJ1Zy4KLVVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5Ci1Qcm9jZXNzaW5nIHBhdGNo
IDE5NyBmcm9tIGJ1ZyA0Mi4KLUJ1aWxkaW5nIFdlYktpdAotUnVubmluZyBQeXRob24gdW5pdCB0
ZXN0cwotUnVubmluZyBQZXJsIHVuaXQgdGVzdHMKLVJ1bm5pbmcgSmF2YVNjcmlwdENvcmUgdGVz
dHMKLVJ1bm5pbmcgcnVuLXdlYmtpdC10ZXN0cwotTm90IGNsb3NpbmcgYnVnIDQyIGFzIGF0dGFj
aG1lbnQgMTk3IGhhcyByZXZpZXc9Ky4gIEFzc3VtaW5nIHRoZXJlIGFyZSBtb3JlIHBhdGNoZXMg
dG8gbGFuZCBmcm9tIHRoaXMgYnVnLgotVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkKLVByb2Nl
c3NpbmcgcGF0Y2ggMTI4IGZyb20gYnVnIDQyLgotQnVpbGRpbmcgV2ViS2l0Ci1SdW5uaW5nIFB5
dGhvbiB1bml0IHRlc3RzCi1SdW5uaW5nIFBlcmwgdW5pdCB0ZXN0cwotUnVubmluZyBKYXZhU2Ny
aXB0Q29yZSB0ZXN0cwotUnVubmluZyBydW4td2Via2l0LXRlc3RzCi1Ob3QgY2xvc2luZyBidWcg
NDIgYXMgYXR0YWNobWVudCAxOTcgaGFzIHJldmlldz0rLiAgQXNzdW1pbmcgdGhlcmUgYXJlIG1v
cmUgcGF0Y2hlcyB0byBsYW5kIGZyb20gdGhpcyBidWcuCi0iIiIKLSAgICAgICAgc2VsZi5hc3Nl
cnRfZXhlY3V0ZV9vdXRwdXRzKExhbmRGcm9tQnVnKCksIFs0Ml0sIG9wdGlvbnM9c2VsZi5fZGVm
YXVsdF9vcHRpb25zKCksIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCi0KLSAgICBk
ZWYgdGVzdF9wcmVwYXJlX3JvbGxvdXQoc2VsZik6Ci0gICAgICAgIGV4cGVjdGVkX3N0ZGVycj0i
UHJlcGFyaW5nIHJvbGxvdXQgZm9yIGJ1ZyAxMjM0NS5cblVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0
b3J5XG5SdW5uaW5nIHByZXBhcmUtQ2hhbmdlTG9nXG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0X2V4
ZWN1dGVfb3V0cHV0cyhQcmVwYXJlUm9sbG91dCgpLCBbODUyLCAiUmVhc29uIl0sIG9wdGlvbnM9
c2VsZi5fZGVmYXVsdF9vcHRpb25zKCksIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIp
Ci0KLSAgICBkZWYgdGVzdF9jcmVhdGVfcm9sbG91dChzZWxmKToKLSAgICAgICAgZXhwZWN0ZWRf
c3RkZXJyPSJQcmVwYXJpbmcgcm9sbG91dCBmb3IgYnVnIDEyMzQ1LlxuTU9DSyBjcmVhdGVfYnVn
XG5idWdfdGl0bGU6IFJFR1JFU1NJT04ocjg1Mik6IFJlYXNvblxuYnVnX2Rlc2NyaXB0aW9uOiBo
dHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC84NTIgYnJva2UgdGhlIGJ1aWxkOlxuUmVh
c29uXG5VcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeVxuUnVubmluZyBwcmVwYXJlLUNoYW5nZUxv
Z1xuIgotICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1dHMoQ3JlYXRlUm9sbG91dCgp
LCBbODUyLCAiUmVhc29uIl0sIG9wdGlvbnM9c2VsZi5fZGVmYXVsdF9vcHRpb25zKCksIGV4cGVj
dGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCi0KLSAgICBkZWYgdGVzdF9yb2xsb3V0KHNlbGYp
OgotICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiUHJlcGFyaW5nIHJvbGxvdXQgZm9yIGJ1ZyAx
MjM0NS5cblVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5XG5SdW5uaW5nIHByZXBhcmUtQ2hhbmdl
TG9nXG5CdWlsZGluZyBXZWJLaXRcbiIKLSAgICAgICAgc2VsZi5hc3NlcnRfZXhlY3V0ZV9vdXRw
dXRzKFJvbGxvdXQoKSwgWzg1MiwgIlJlYXNvbiJdLCBvcHRpb25zPXNlbGYuX2RlZmF1bHRfb3B0
aW9ucygpLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQotCkluZGV4OiBXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL2Vhcmx5X3dhcm5pbmdfc3lzdGVtLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvZWFybHlf
d2FybmluZ19zeXN0ZW0ucHkJKHJldmlzaW9uIDU2MzY2KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tYW5kcy9lYXJseV93YXJuaW5nX3N5c3RlbS5weQkod29ya2luZyBjb3B5
KQpAQCAtMSwxMjIgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAo
YykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIyAKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSMgCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KLQotZnJvbSB3ZWJraXRweS5j
b21tYW5kcy5xdWV1ZXMgaW1wb3J0IEFic3RyYWN0UmV2aWV3UXVldWUKLWZyb20gd2Via2l0cHku
Y29tbWl0dGVycyBpbXBvcnQgQ29tbWl0dGVyTGlzdAotZnJvbSB3ZWJraXRweS5leGVjdXRpdmUg
aW1wb3J0IFNjcmlwdEVycm9yCi1mcm9tIHdlYmtpdHB5LndlYmtpdHBvcnQgaW1wb3J0IFdlYktp
dFBvcnQKLWZyb20gd2Via2l0cHkucXVldWVlbmdpbmUgaW1wb3J0IFF1ZXVlRW5naW5lCi0KLQot
Y2xhc3MgQWJzdHJhY3RFYXJseVdhcm5pbmdTeXN0ZW0oQWJzdHJhY3RSZXZpZXdRdWV1ZSk6Ci0g
ICAgX2J1aWxkX3N0eWxlID0gInJlbGVhc2UiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0g
ICAgICAgIEFic3RyYWN0UmV2aWV3UXVldWUuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5w
b3J0ID0gV2ViS2l0UG9ydC5wb3J0KHNlbGYucG9ydF9uYW1lKQotCi0gICAgZGVmIHNob3VsZF9w
cm9jZWVkX3dpdGhfd29ya19pdGVtKHNlbGYsIHBhdGNoKToKLSAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgc2VsZi5ydW5fd2Via2l0X3BhdGNoKFsKLSAgICAgICAgICAgICAgICAiYnVpbGQiLAot
ICAgICAgICAgICAgICAgIHNlbGYucG9ydC5mbGFnKCksCi0gICAgICAgICAgICAgICAgIi0tYnVp
bGQtc3R5bGU9JXMiICUgc2VsZi5fYnVpbGRfc3R5bGUsCi0gICAgICAgICAgICAgICAgIi0tZm9y
Y2UtY2xlYW4iLAotICAgICAgICAgICAgICAgICItLXF1aWV0Il0pCi0gICAgICAgICAgICBzZWxm
Ll91cGRhdGVfc3RhdHVzKCJCdWlsZGluZyIsIHBhdGNoKQotICAgICAgICBleGNlcHQgU2NyaXB0
RXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLl91cGRhdGVfc3RhdHVzKCJVbmFibGUgdG8gcGVy
Zm9ybSBhIGJ1aWxkIikKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4g
VHJ1ZQotCi0gICAgZGVmIF9yZXZpZXdfcGF0Y2goc2VsZiwgcGF0Y2gpOgotICAgICAgICBzZWxm
LnJ1bl93ZWJraXRfcGF0Y2goWwotICAgICAgICAgICAgImJ1aWxkLWF0dGFjaG1lbnQiLAotICAg
ICAgICAgICAgc2VsZi5wb3J0LmZsYWcoKSwKLSAgICAgICAgICAgICItLWJ1aWxkLXN0eWxlPSVz
IiAlIHNlbGYuX2J1aWxkX3N0eWxlLAotICAgICAgICAgICAgIi0tZm9yY2UtY2xlYW4iLAotICAg
ICAgICAgICAgIi0tcXVpZXQiLAotICAgICAgICAgICAgIi0tbm9uLWludGVyYWN0aXZlIiwKLSAg
ICAgICAgICAgICItLXBhcmVudC1jb21tYW5kPSVzIiAlIHNlbGYubmFtZSwKLSAgICAgICAgICAg
ICItLW5vLXVwZGF0ZSIsCi0gICAgICAgICAgICBwYXRjaC5pZCgpXSkKLQotICAgIEBjbGFzc21l
dGhvZAotICAgIGRlZiBoYW5kbGVfc2NyaXB0X2Vycm9yKGNscywgdG9vbCwgc3RhdGUsIHNjcmlw
dF9lcnJvcik6Ci0gICAgICAgIGlzX3N2bl9hcHBseSA9IHNjcmlwdF9lcnJvci5jb21tYW5kX25h
bWUoKSA9PSAic3ZuLWFwcGx5IgotICAgICAgICBzdGF0dXNfaWQgPSBjbHMuX3VwZGF0ZV9zdGF0
dXNfZm9yX3NjcmlwdF9lcnJvcih0b29sLCBzdGF0ZSwgc2NyaXB0X2Vycm9yLCBpc19lcnJvcj1p
c19zdm5fYXBwbHkpCi0gICAgICAgIGlmIGlzX3N2bl9hcHBseToKLSAgICAgICAgICAgIFF1ZXVl
RW5naW5lLmV4aXRfYWZ0ZXJfaGFuZGxlZF9lcnJvcihzY3JpcHRfZXJyb3IpCi0gICAgICAgIHJl
c3VsdHNfbGluayA9IHRvb2wuc3RhdHVzX3NlcnZlci5yZXN1bHRzX3VybF9mb3Jfc3RhdHVzKHN0
YXR1c19pZCkKLSAgICAgICAgbWVzc2FnZSA9ICJBdHRhY2htZW50ICVzIGRpZCBub3QgYnVpbGQg
b24gJXM6XG5CdWlsZCBvdXRwdXQ6ICVzIiAlIChzdGF0ZVsicGF0Y2giXS5pZCgpLCBjbHMucG9y
dF9uYW1lLCByZXN1bHRzX2xpbmspCi0gICAgICAgIHRvb2wuYnVncy5wb3N0X2NvbW1lbnRfdG9f
YnVnKHN0YXRlWyJwYXRjaCJdLmJ1Z19pZCgpLCBtZXNzYWdlLCBjYz1jbHMud2F0Y2hlcnMpCi0g
ICAgICAgIGV4aXQoMSkKLQotCi1jbGFzcyBHdGtFV1MoQWJzdHJhY3RFYXJseVdhcm5pbmdTeXN0
ZW0pOgotICAgIG5hbWUgPSAiZ3RrLWV3cyIKLSAgICBwb3J0X25hbWUgPSAiZ3RrIgotICAgIHdh
dGNoZXJzID0gQWJzdHJhY3RFYXJseVdhcm5pbmdTeXN0ZW0ud2F0Y2hlcnMgKyBbCi0gICAgICAg
ICJnbnNAZ25vbWUub3JnIiwKLSAgICAgICAgInhhbi5sb3BlekBnbWFpbC5jb20iLAotICAgIF0K
LQotCi1jbGFzcyBRdEVXUyhBYnN0cmFjdEVhcmx5V2FybmluZ1N5c3RlbSk6Ci0gICAgbmFtZSA9
ICJxdC1ld3MiCi0gICAgcG9ydF9uYW1lID0gInF0IgotCi0KLWNsYXNzIENocm9taXVtRVdTKEFi
c3RyYWN0RWFybHlXYXJuaW5nU3lzdGVtKToKLSAgICBuYW1lID0gImNocm9taXVtLWV3cyIKLSAg
ICBwb3J0X25hbWUgPSAiY2hyb21pdW0iCi0gICAgd2F0Y2hlcnMgPSBBYnN0cmFjdEVhcmx5V2Fy
bmluZ1N5c3RlbS53YXRjaGVycyArIFsKLSAgICAgICAgImRnbGF6a292QGNocm9taXVtLm9yZyIs
Ci0gICAgXQotCi0KLSMgRm9yIHBsYXRmb3JtcyB0aGF0IHdlIGNhbid0IHJ1biBpbnNpZGUgYSBW
TSAobGlrZSBNYWMgT1MgWCksIHdlIHJlcXVpcmUKLSMgcGF0Y2hlcyB0byBiZSB1cGxvYWRlZCBi
eSBjb21taXR0ZXJzLCB3aG8gYXJlIGdlbmVyYWxseSB0cnVzdHdvcnRoeSBmb2xrLiA6KQotY2xh
c3MgQWJzdHJhY3RDb21taXR0ZXJPbmx5RVdTKEFic3RyYWN0RWFybHlXYXJuaW5nU3lzdGVtKToK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWl0dGVycz1Db21taXR0ZXJMaXN0KCkpOgotICAg
ICAgICBBYnN0cmFjdEVhcmx5V2FybmluZ1N5c3RlbS5fX2luaXRfXyhzZWxmKQotICAgICAgICBz
ZWxmLl9jb21taXR0ZXJzID0gY29tbWl0dGVycwotCi0gICAgZGVmIHByb2Nlc3Nfd29ya19pdGVt
KHNlbGYsIHBhdGNoKToKLSAgICAgICAgaWYgbm90IHNlbGYuX2NvbW1pdHRlcnMuY29tbWl0dGVy
X2J5X2VtYWlsKHBhdGNoLmF0dGFjaGVyX2VtYWlsKCkpOgotICAgICAgICAgICAgc2VsZi5fZGlk
X2Vycm9yKHBhdGNoLCAiJXMgY2Fubm90IHByb2Nlc3MgcGF0Y2hlcyBmcm9tIG5vbi1jb21taXR0
ZXJzIDooIiAlIHNlbGYubmFtZSkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBBYnN0cmFj
dEVhcmx5V2FybmluZ1N5c3RlbS5wcm9jZXNzX3dvcmtfaXRlbShzZWxmLCBwYXRjaCkKLQotCi1j
bGFzcyBNYWNFV1MoQWJzdHJhY3RDb21taXR0ZXJPbmx5RVdTKToKLSAgICBuYW1lID0gIm1hYy1l
d3MiCi0gICAgcG9ydF9uYW1lID0gIm1hYyIKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbWFuZHMvZWFybHlfd2FybmluZ19zeXN0ZW1fdW5pdHRlc3QucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9lYXJseV93YXJuaW5n
X3N5c3RlbV91bml0dGVzdC5weQkocmV2aXNpb24gNTYzNjYpCisrKyBXZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1hbmRzL2Vhcmx5X3dhcm5pbmdfc3lzdGVtX3VuaXR0ZXN0LnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0jIG1ldDoKLSMKLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgb3MK
LQotZnJvbSB3ZWJraXRweS5jb21tYW5kc19yZWZlcmVuY2VzIGltcG9ydCBNb2NrCi1mcm9tIHdl
YmtpdHB5LmNvbW1hbmRzLmVhcmx5X3dhcm5pbmdfc3lzdGVtIGltcG9ydCAqCi1mcm9tIHdlYmtp
dHB5LmNvbW1hbmRzLnF1ZXVlc3Rlc3QgaW1wb3J0IFF1ZXVlc1Rlc3QKLQotY2xhc3MgRWFybHlX
YXJuaW5nU3l0ZW1UZXN0KFF1ZXVlc1Rlc3QpOgotICAgIGRlZiB0ZXN0X2Nocm9taXVtX2V3cyhz
ZWxmKToKLSAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0gewotICAgICAgICAgICAgImJlZ2luX3dv
cmtfcXVldWUiIDogIkNBVVRJT046IGNocm9taXVtLWV3cyB3aWxsIGRpc2NhcmQgYWxsIGxvY2Fs
IGNoYW5nZXMgaW4gXCIlc1wiXG5SdW5uaW5nIFdlYktpdCBjaHJvbWl1bS1ld3MuXG4iICUgb3Mu
Z2V0Y3dkKCksCi0gICAgICAgICAgICAiaGFuZGxlX3VuZXhwZWN0ZWRfZXJyb3IiIDogIk1vY2sg
ZXJyb3IgbWVzc2FnZVxuIiwKLSAgICAgICAgfQotICAgICAgICBzZWxmLmFzc2VydF9xdWV1ZV9v
dXRwdXRzKENocm9taXVtRVdTKCksIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCi0K
LSAgICBkZWYgdGVzdF9xdF9ld3Moc2VsZik6Ci0gICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9IHsK
LSAgICAgICAgICAgICJiZWdpbl93b3JrX3F1ZXVlIiA6ICJDQVVUSU9OOiBxdC1ld3Mgd2lsbCBk
aXNjYXJkIGFsbCBsb2NhbCBjaGFuZ2VzIGluIFwiJXNcIlxuUnVubmluZyBXZWJLaXQgcXQtZXdz
LlxuIiAlIG9zLmdldGN3ZCgpLAotICAgICAgICAgICAgImhhbmRsZV91bmV4cGVjdGVkX2Vycm9y
IiA6ICJNb2NrIGVycm9yIG1lc3NhZ2VcbiIsCi0gICAgICAgIH0KLSAgICAgICAgc2VsZi5hc3Nl
cnRfcXVldWVfb3V0cHV0cyhRdEVXUygpLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJy
KQotCi0gICAgZGVmIHRlc3RfZ3RrX2V3cyhzZWxmKToKLSAgICAgICAgZXhwZWN0ZWRfc3RkZXJy
ID0gewotICAgICAgICAgICAgImJlZ2luX3dvcmtfcXVldWUiIDogIkNBVVRJT046IGd0ay1ld3Mg
d2lsbCBkaXNjYXJkIGFsbCBsb2NhbCBjaGFuZ2VzIGluIFwiJXNcIlxuUnVubmluZyBXZWJLaXQg
Z3RrLWV3cy5cbiIgJSBvcy5nZXRjd2QoKSwKLSAgICAgICAgICAgICJoYW5kbGVfdW5leHBlY3Rl
ZF9lcnJvciIgOiAiTW9jayBlcnJvciBtZXNzYWdlXG4iLAotICAgICAgICB9Ci0gICAgICAgIHNl
bGYuYXNzZXJ0X3F1ZXVlX291dHB1dHMoR3RrRVdTKCksIGV4cGVjdGVkX3N0ZGVycj1leHBlY3Rl
ZF9zdGRlcnIpCi0KLSAgICBkZWYgdGVzdF9tYWNfZXdzKHNlbGYpOgotICAgICAgICBleHBlY3Rl
ZF9zdGRlcnIgPSB7Ci0gICAgICAgICAgICAiYmVnaW5fd29ya19xdWV1ZSIgOiAiQ0FVVElPTjog
bWFjLWV3cyB3aWxsIGRpc2NhcmQgYWxsIGxvY2FsIGNoYW5nZXMgaW4gXCIlc1wiXG5SdW5uaW5n
IFdlYktpdCBtYWMtZXdzLlxuIiAlIG9zLmdldGN3ZCgpLAotICAgICAgICAgICAgImhhbmRsZV91
bmV4cGVjdGVkX2Vycm9yIiA6ICJNb2NrIGVycm9yIG1lc3NhZ2VcbiIsCi0gICAgICAgIH0KLSAg
ICAgICAgc2VsZi5hc3NlcnRfcXVldWVfb3V0cHV0cyhNYWNFV1MoKSwgZXhwZWN0ZWRfc3RkZXJy
PWV4cGVjdGVkX3N0ZGVycikKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bWFuZHMvb3BlbmJ1Z3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tYW5kcy9vcGVuYnVncy5weQkocmV2aXNpb24gNTYzNjYpCisrKyBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL29wZW5idWdzLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYzICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMg
Ci0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAotIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCByZQotaW1wb3J0IHN5
cwotCi1mcm9tIHdlYmtpdHB5Lm11bHRpY29tbWFuZHRvb2wgaW1wb3J0IEFic3RyYWN0RGVjbGFy
YXRpdmVDb21tYW5kCi1mcm9tIHdlYmtpdHB5LndlYmtpdF9sb2dnaW5nIGltcG9ydCBsb2cKLQot
Ci1jbGFzcyBPcGVuQnVncyhBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZCk6Ci0gICAgbmFtZSA9
ICJvcGVuLWJ1Z3MiCi0gICAgaGVscF90ZXh0ID0gIkZpbmRzIGFsbCBidWcgbnVtYmVycyBwYXNz
ZWQgaW4gYXJndW1lbnRzIChvciBzdGRpbiBpZiBubyBhcmdzIHByb3ZpZGVkKSBhbmQgb3BlbnMg
dGhlbSBpbiBhIHdlYiBicm93c2VyIgotCi0gICAgYnVnX251bWJlcl9yZWdleHAgPSByZS5jb21w
aWxlKHIiXGJcZHs0LDZ9XGIiKQotCi0gICAgZGVmIF9vcGVuX2J1Z3Moc2VsZiwgYnVnX2lkcyk6
Ci0gICAgICAgIGZvciBidWdfaWQgaW4gYnVnX2lkczoKLSAgICAgICAgICAgIGJ1Z191cmwgPSBz
ZWxmLnRvb2wuYnVncy5idWdfdXJsX2Zvcl9idWdfaWQoYnVnX2lkKQotICAgICAgICAgICAgc2Vs
Zi50b29sLnVzZXIub3Blbl91cmwoYnVnX3VybCkKLQotICAgICMgX2ZpbmRfYnVnc19pbl9zdHJp
bmcgbW9zdGx5IGV4aXN0cyBmb3IgZWFzeSB1bml0IHRlc3RpbmcuCi0gICAgZGVmIF9maW5kX2J1
Z3NfaW5fc3RyaW5nKHNlbGYsIHN0cmluZyk6Ci0gICAgICAgIHJldHVybiBzZWxmLmJ1Z19udW1i
ZXJfcmVnZXhwLmZpbmRhbGwoc3RyaW5nKQotCi0gICAgZGVmIF9maW5kX2J1Z3NfaW5faXRlcmFi
bGUoc2VsZiwgaXRlcmFibGUpOgotICAgICAgICByZXR1cm4gc3VtKFtzZWxmLl9maW5kX2J1Z3Nf
aW5fc3RyaW5nKHN0cmluZykgZm9yIHN0cmluZyBpbiBpdGVyYWJsZV0sIFtdKQotCi0gICAgZGVm
IGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIGlmIGFyZ3M6Ci0g
ICAgICAgICAgICBidWdfaWRzID0gc2VsZi5fZmluZF9idWdzX2luX2l0ZXJhYmxlKGFyZ3MpCi0g
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIFRoaXMgd29uJ3Qgb3BlbiBidWdzIHVudGlsIHN0
ZGluIGlzIGNsb3NlZCBidXQgY291bGQgYmUgbWFkZSB0byBlYXNpbHkuICBUaGF0IHdvdWxkIGp1
c3QgbWFrZSB1bml0IHRlc3Rpbmcgc2xpZ2h0bHkgaGFyZGVyLgotICAgICAgICAgICAgYnVnX2lk
cyA9IHNlbGYuX2ZpbmRfYnVnc19pbl9pdGVyYWJsZShzeXMuc3RkaW4pCi0KLSAgICAgICAgbG9n
KCIlcyBidWdzIGZvdW5kIGluIGlucHV0LiIgJSBsZW4oYnVnX2lkcykpCi0KLSAgICAgICAgc2Vs
Zi5fb3Blbl9idWdzKGJ1Z19pZHMpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1hbmRzL29wZW5idWdzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvb3BlbmJ1Z3NfdW5pdHRlc3QucHkJKHJldmlzaW9u
IDU2MzY2KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9vcGVuYnVn
c191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMSw1MCArMCwwIEBACi0jIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0j
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotZnJvbSB3ZWJraXRweS5jb21tYW5kcy5jb21tYW5kdGVzdCBpbXBvcnQgQ29tbWFuZHNU
ZXN0Ci1mcm9tIHdlYmtpdHB5LmNvbW1hbmRzLm9wZW5idWdzIGltcG9ydCBPcGVuQnVncwotCi1j
bGFzcyBPcGVuQnVnc1Rlc3QoQ29tbWFuZHNUZXN0KToKLQotICAgIGZpbmRfYnVnc19pbl9zdHJp
bmdfZXhwZWN0YXRpb25zID0gWwotICAgICAgICBbIjEyMyIsIFtdXSwKLSAgICAgICAgWyIxMjM0
IiwgWyIxMjM0Il1dLAotICAgICAgICBbIjEyMzQ1IiwgWyIxMjM0NSJdXSwKLSAgICAgICAgWyIx
MjM0NTYiLCBbIjEyMzQ1NiJdXSwKLSAgICAgICAgWyIxMjM0NTY3IiwgW11dLAotICAgICAgICBb
IiAxMjM0NTYgMjM0NTY3IiwgWyIxMjM0NTYiLCAiMjM0NTY3Il1dLAotICAgIF0KLQotICAgIGRl
ZiB0ZXN0X2ZpbmRfYnVnc19pbl9zdHJpbmcoc2VsZik6Ci0gICAgICAgIG9wZW5idWdzID0gT3Bl
bkJ1Z3MoKQotICAgICAgICBmb3IgZXhwZWN0YXRpb24gaW4gc2VsZi5maW5kX2J1Z3NfaW5fc3Ry
aW5nX2V4cGVjdGF0aW9uczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wZW5idWdz
Ll9maW5kX2J1Z3NfaW5fc3RyaW5nKGV4cGVjdGF0aW9uWzBdKSwgZXhwZWN0YXRpb25bMV0pCi0K
LSAgICBkZWYgdGVzdF9hcmdzX3BhcnNpbmcoc2VsZik6Ci0gICAgICAgIGV4cGVjdGVkX3N0ZGVy
ciA9ICIyIGJ1Z3MgZm91bmQgaW4gaW5wdXQuXG5NT0NLOiB1c2VyLm9wZW5fdXJsOiBodHRwOi8v
ZXhhbXBsZS5jb20vMTIzNDVcbk1PQ0s6IHVzZXIub3Blbl91cmw6IGh0dHA6Ly9leGFtcGxlLmNv
bS8yMzQ1NlxuIgotICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1dHMoT3BlbkJ1Z3Mo
KSwgWyIxMjM0NVxuMjM0NTYiXSwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKSW5k
ZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvcXVlcmllcy5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL3F1ZXJpZXMu
cHkJKHJldmlzaW9uIDU2MzY2KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
YW5kcy9xdWVyaWVzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3OSArMCwwIEBACi0jIS91c3Iv
YmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jIAot
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0j
IGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKLSMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWZyb20gb3B0cGFyc2UgaW1wb3J0
IG1ha2Vfb3B0aW9uCi0KLWZyb20gd2Via2l0cHkuYnVpbGRib3QgaW1wb3J0IEJ1aWxkQm90Ci1m
cm9tIHdlYmtpdHB5LmNoYW5nZWxvZ3MgaW1wb3J0IHZpZXdfc291cmNlX3VybAotZnJvbSB3ZWJr
aXRweS5jb21taXRpbmZvIGltcG9ydCBDb21taXRJbmZvCi1mcm9tIHdlYmtpdHB5LmNvbW1pdHRl
cnMgaW1wb3J0IENvbW1pdHRlckxpc3QKLWZyb20gd2Via2l0cHkuZ3JhbW1hciBpbXBvcnQgcGx1
cmFsaXplCi1mcm9tIHdlYmtpdHB5LndlYmtpdF9sb2dnaW5nIGltcG9ydCBsb2cKLWZyb20gd2Vi
a2l0cHkubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQK
LQotCi1jbGFzcyBCdWdzVG9Db21taXQoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQpOgotICAg
IG5hbWUgPSAiYnVncy10by1jb21taXQiCi0gICAgaGVscF90ZXh0ID0gIkxpc3QgYnVncyBpbiB0
aGUgY29tbWl0LXF1ZXVlIgotCi0gICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywg
dG9vbCk6Ci0gICAgICAgICMgRklYTUU6IFRoaXMgY29tbWFuZCBpcyBwb29ybHkgbmFtZWQuICBJ
dCdzIGZldGNoaW5nIHRoZSBjb21taXQtcXVldWUgbGlzdCBoZXJlLiAgVGhlIG5hbWUgaW1wbGll
cyBpdCdzIGZldGNoaW5nIHBlbmRpbmctY29tbWl0IChhbGwgcisnZCBwYXRjaGVzKS4KLSAgICAg
ICAgYnVnX2lkcyA9IHRvb2wuYnVncy5xdWVyaWVzLmZldGNoX2J1Z19pZHNfZnJvbV9jb21taXRf
cXVldWUoKQotICAgICAgICBmb3IgYnVnX2lkIGluIGJ1Z19pZHM6Ci0gICAgICAgICAgICBwcmlu
dCAiJXMiICUgYnVnX2lkCi0KLQotY2xhc3MgUGF0Y2hlc0luQ29tbWl0UXVldWUoQWJzdHJhY3RE
ZWNsYXJhdGl2ZUNvbW1hbmQpOgotICAgIG5hbWUgPSAicGF0Y2hlcy1pbi1jb21taXQtcXVldWUi
Ci0gICAgaGVscF90ZXh0ID0gIkxpc3QgcGF0Y2hlcyBpbiB0aGUgY29tbWl0LXF1ZXVlIgotCi0g
ICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIHBhdGNo
ZXMgPSB0b29sLmJ1Z3MucXVlcmllcy5mZXRjaF9wYXRjaGVzX2Zyb21fY29tbWl0X3F1ZXVlKCkK
LSAgICAgICAgbG9nKCJQYXRjaGVzIGluIGNvbW1pdCBxdWV1ZToiKQotICAgICAgICBmb3IgcGF0
Y2ggaW4gcGF0Y2hlczoKLSAgICAgICAgICAgIHByaW50IHBhdGNoLnVybCgpCi0KLQotY2xhc3Mg
UGF0Y2hlc1RvQ29tbWl0UXVldWUoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQpOgotICAgIG5h
bWUgPSAicGF0Y2hlcy10by1jb21taXQtcXVldWUiCi0gICAgaGVscF90ZXh0ID0gIlBhdGNoZXMg
d2hpY2ggc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBjb21taXQgcXVldWUiCi0gICAgZGVmIF9faW5p
dF9fKHNlbGYpOgotICAgICAgICBvcHRpb25zID0gWwotICAgICAgICAgICAgbWFrZV9vcHRpb24o
Ii0tYnVncyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImJ1Z3MiLCBoZWxwPSJPdXRwdXQg
YnVnIGxpbmtzIGluc3RlYWQgb2YgcGF0Y2ggbGlua3MiKSwKLSAgICAgICAgXQotICAgICAgICBB
YnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZC5fX2luaXRfXyhzZWxmLCBvcHRpb25zPW9wdGlvbnMp
Ci0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9uZWVkc19jb21taXRfcXVldWUocGF0Y2gp
OgotICAgICAgICBpZiBwYXRjaC5jb21taXRfcXVldWUoKSA9PSAiKyI6ICMgSWYgaXQncyBhbHJl
YWR5IGNxKywgaWdub3JlIHRoZSBwYXRjaC4KLSAgICAgICAgICAgIGxvZygiJXMgYWxyZWFkeSBo
YXMgY3E9JXMiICUgKHBhdGNoLmlkKCksIHBhdGNoLmNvbW1pdF9xdWV1ZSgpKSkKLSAgICAgICAg
ICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgICMgV2Ugb25seSBuZWVkIHRvIHdvcnJ5IGFib3V0
IHBhdGNoZXMgZnJvbSBjb250cmlidXRlcnMgd2hvIGFyZSBub3QgeWV0IGNvbW1pdHRlcnMuCi0g
ICAgICAgIGNvbW1pdHRlcl9yZWNvcmQgPSBDb21taXR0ZXJMaXN0KCkuY29tbWl0dGVyX2J5X2Vt
YWlsKHBhdGNoLmF0dGFjaGVyX2VtYWlsKCkpCi0gICAgICAgIGlmIGNvbW1pdHRlcl9yZWNvcmQ6
Ci0gICAgICAgICAgICBsb2coIiVzIGNvbW1pdHRlciA9ICVzIiAlIChwYXRjaC5pZCgpLCBjb21t
aXR0ZXJfcmVjb3JkKSkKLSAgICAgICAgcmV0dXJuIG5vdCBjb21taXR0ZXJfcmVjb3JkCi0KLSAg
ICBkZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKLSAgICAgICAgcGF0Y2hl
cyA9IHRvb2wuYnVncy5xdWVyaWVzLmZldGNoX3BhdGNoZXNfZnJvbV9wZW5kaW5nX2NvbW1pdF9s
aXN0KCkKLSAgICAgICAgcGF0Y2hlc19uZWVkaW5nX2NxID0gZmlsdGVyKHNlbGYuX25lZWRzX2Nv
bW1pdF9xdWV1ZSwgcGF0Y2hlcykKLSAgICAgICAgaWYgb3B0aW9ucy5idWdzOgotICAgICAgICAg
ICAgYnVnc19uZWVkaW5nX2NxID0gbWFwKGxhbWJkYSBwYXRjaDogcGF0Y2guYnVnX2lkKCksIHBh
dGNoZXNfbmVlZGluZ19jcSkKLSAgICAgICAgICAgIGJ1Z3NfbmVlZGluZ19jcSA9IHNvcnRlZChz
ZXQoYnVnc19uZWVkaW5nX2NxKSkKLSAgICAgICAgICAgIGZvciBidWdfaWQgaW4gYnVnc19uZWVk
aW5nX2NxOgotICAgICAgICAgICAgICAgIHByaW50ICIlcyIgJSB0b29sLmJ1Z3MuYnVnX3VybF9m
b3JfYnVnX2lkKGJ1Z19pZCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZvciBwYXRjaCBp
biBwYXRjaGVzX25lZWRpbmdfY3E6Ci0gICAgICAgICAgICAgICAgcHJpbnQgIiVzIiAlIHRvb2wu
YnVncy5hdHRhY2htZW50X3VybF9mb3JfaWQocGF0Y2guaWQoKSwgYWN0aW9uPSJlZGl0IikKLQot
Ci1jbGFzcyBQYXRjaGVzVG9SZXZpZXcoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQpOgotICAg
IG5hbWUgPSAicGF0Y2hlcy10by1yZXZpZXciCi0gICAgaGVscF90ZXh0ID0gIkxpc3QgcGF0Y2hl
cyB0aGF0IGFyZSBwZW5kaW5nIHJldmlldyIKLQotICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlv
bnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBwYXRjaF9pZHMgPSB0b29sLmJ1Z3MucXVlcmllcy5m
ZXRjaF9hdHRhY2htZW50X2lkc19mcm9tX3Jldmlld19xdWV1ZSgpCi0gICAgICAgIGxvZygiUGF0
Y2hlcyBwZW5kaW5nIHJldmlldzoiKQotICAgICAgICBmb3IgcGF0Y2hfaWQgaW4gcGF0Y2hfaWRz
OgotICAgICAgICAgICAgcHJpbnQgcGF0Y2hfaWQKLQotY2xhc3MgV2hhdEJyb2tlKEFic3RyYWN0
RGVjbGFyYXRpdmVDb21tYW5kKToKLSAgICBuYW1lID0gIndoYXQtYnJva2UiCi0gICAgaGVscF90
ZXh0ID0gIlByaW50IGZhaWxpbmcgYnVpbGRib3RzICglcykgYW5kIHdoYXQgcmV2aXNpb25zIGJy
b2tlIHRoZW0iICUgQnVpbGRCb3QuZGVmYXVsdF9ob3N0Ci0KLSAgICBkZWYgX2xvbmdlc3RfYnVp
bGRlcl9uYW1lKHNlbGYsIGJ1aWxkZXJzKToKLSAgICAgICAgcmV0dXJuIG1heChtYXAobGFtYmRh
IGJ1aWxkZXI6IGxlbihidWlsZGVyWyJuYW1lIl0pLCBidWlsZGVycykpCi0KLSAgICBkZWYgX3By
aW50X2J1aWxkZXJfbGluZShzZWxmLCBidWlsZGVyX25hbWUsIG1heF9uYW1lX3dpZHRoLCBzdGF0
dXNfbWVzc2FnZSk6Ci0gICAgICAgIHByaW50ICIlcyA6ICVzIiAlIChidWlsZGVyX25hbWUubGp1
c3QobWF4X25hbWVfd2lkdGgpLCBzdGF0dXNfbWVzc2FnZSkKLQotICAgIGRlZiBfcHJpbnRfYmxh
bWVfaW5mb3JtYXRpb25fZm9yX2NvbW1pdChzZWxmLCBjb21taXRfaW5mbyk6Ci0gICAgICAgIHBy
aW50ICJyJXM6IiAlIGNvbW1pdF9pbmZvLnJldmlzaW9uKCkKLSAgICAgICAgcHJpbnQgIiAgJXMi
ICUgdmlld19zb3VyY2VfdXJsKGNvbW1pdF9pbmZvLnJldmlzaW9uKCkpCi0gICAgICAgIHByaW50
ICIgIEJ1ZzogJXMgKCVzKSIgJSAoY29tbWl0X2luZm8uYnVnX2lkKCksIHNlbGYudG9vbC5idWdz
LmJ1Z191cmxfZm9yX2J1Z19pZChjb21taXRfaW5mby5idWdfaWQoKSkpCi0gICAgICAgIGF1dGhv
cl9saW5lID0gIlwiJXNcIiA8JXM+IiAlIChjb21taXRfaW5mby5hdXRob3JfbmFtZSgpLCBjb21t
aXRfaW5mby5hdXRob3JfZW1haWwoKSkKLSAgICAgICAgcHJpbnQgIiAgQXV0aG9yOiAlcyIgJSAo
Y29tbWl0X2luZm8uYXV0aG9yKCkgb3IgYXV0aG9yX2xpbmUpCi0gICAgICAgIHByaW50ICIgIFJl
dmlld2VyOiAlcyIgJSAoY29tbWl0X2luZm8ucmV2aWV3ZXIoKSBvciBjb21taXRfaW5mby5yZXZp
ZXdlcl90ZXh0KCkpCi0gICAgICAgIHByaW50ICIgIENvbW1pdHRlcjogJXMiICUgY29tbWl0X2lu
Zm8uY29tbWl0dGVyKCkKLQotICAgICMgRklYTUU6IFRoaXMgaXMgc2xpZ2h0bHkgZGlmZmVyZW50
IGZyb20gQnVpbGRlci5zdXNwZWN0X3JldmlzaW9uc19mb3JfZ3JlZW5fdG9fcmVkX3RyYW5zaXRp
b24KLSAgICAjIGR1ZSB0byBuZWVkaW5nIHRvIGRldGVjdCB0aGUgImhpdCB0aGUgbGltaXQiIGNh
c2UgYW4gcHJpbnQgYSBzcGVjaWFsIG1lc3NhZ2UuCi0gICAgZGVmIF9wcmludF9ibGFtZV9pbmZv
cm1hdGlvbl9mb3JfYnVpbGRlcihzZWxmLCBidWlsZGVyX3N0YXR1cywgbmFtZV93aWR0aCwgYXZv
aWRfZmxha2V5X3Rlc3RzPVRydWUpOgotICAgICAgICBidWlsZGVyID0gc2VsZi50b29sLmJ1aWxk
Ym90LmJ1aWxkZXJfd2l0aF9uYW1lKGJ1aWxkZXJfc3RhdHVzWyJuYW1lIl0pCi0gICAgICAgIChs
YXN0X2dyZWVuX2J1aWxkLCBmaXJzdF9yZWRfYnVpbGQpID0gYnVpbGRlci5maW5kX2dyZWVuX3Rv
X3JlZF90cmFuc2l0aW9uKGJ1aWxkZXJfc3RhdHVzWyJidWlsZF9udW1iZXIiXSkKLSAgICAgICAg
aWYgbm90IGxhc3RfZ3JlZW5fYnVpbGQ6Ci0gICAgICAgICAgICBzZWxmLl9wcmludF9idWlsZGVy
X2xpbmUoYnVpbGRlci5uYW1lKCksIG5hbWVfd2lkdGgsICJGQUlMIChibGFtZS1saXN0OiBzb21l
dGltZSBiZWZvcmUgJXM/KSIgJSBmaXJzdF9yZWRfYnVpbGQucmV2aXNpb24oKSkKLSAgICAgICAg
ICAgIHJldHVybgotCi0gICAgICAgIHN1c3BlY3RfcmV2aXNpb25zID0gcmFuZ2UoZmlyc3RfcmVk
X2J1aWxkLnJldmlzaW9uKCksIGxhc3RfZ3JlZW5fYnVpbGQucmV2aXNpb24oKSwgLTEpCi0gICAg
ICAgIHN1c3BlY3RfcmV2aXNpb25zLnJldmVyc2UoKQotICAgICAgICBmaXJzdF9mYWlsdXJlX21l
c3NhZ2UgPSAiIgotICAgICAgICBpZiAoZmlyc3RfcmVkX2J1aWxkID09IGJ1aWxkZXIuYnVpbGQo
YnVpbGRlcl9zdGF0dXNbImJ1aWxkX251bWJlciJdKSk6Ci0gICAgICAgICAgICBmaXJzdF9mYWls
dXJlX21lc3NhZ2UgPSAiIEZJUlNUIEZBSUxVUkUsIHBvc3NpYmx5IGEgZmxha3kgdGVzdCIKLSAg
ICAgICAgc2VsZi5fcHJpbnRfYnVpbGRlcl9saW5lKGJ1aWxkZXIubmFtZSgpLCBuYW1lX3dpZHRo
LCAiRkFJTCAoYmxhbWUtbGlzdDogJXMlcykiICUgKHN1c3BlY3RfcmV2aXNpb25zLCBmaXJzdF9m
YWlsdXJlX21lc3NhZ2UpKQotICAgICAgICBmb3IgcmV2aXNpb24gaW4gc3VzcGVjdF9yZXZpc2lv
bnM6Ci0gICAgICAgICAgICBjb21taXRfaW5mbyA9IENvbW1pdEluZm8uY29tbWl0X2luZm9fZm9y
X3JldmlzaW9uKHNlbGYudG9vbC5zY20oKSwgcmV2aXNpb24pCi0gICAgICAgICAgICBzZWxmLl9w
cmludF9ibGFtZV9pbmZvcm1hdGlvbl9mb3JfY29tbWl0KGNvbW1pdF9pbmZvKQotCi0gICAgZGVm
IGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIGJ1aWxkZXJfc3Rh
dHVzZXMgPSB0b29sLmJ1aWxkYm90LmJ1aWxkZXJfc3RhdHVzZXMoKQotICAgICAgICBsb25nZXN0
X2J1aWxkZXJfbmFtZSA9IHNlbGYuX2xvbmdlc3RfYnVpbGRlcl9uYW1lKGJ1aWxkZXJfc3RhdHVz
ZXMpCi0gICAgICAgIGZhaWxpbmdfYnVpbGRlcnMgPSAwCi0gICAgICAgIGZvciBidWlsZGVyX3N0
YXR1cyBpbiBidWlsZGVyX3N0YXR1c2VzOgotICAgICAgICAgICAgIyBJZiB0aGUgYnVpbGRlciBp
cyBncmVlbiwgcHJpbnQgT0ssIGV4aXQuCi0gICAgICAgICAgICBpZiBidWlsZGVyX3N0YXR1c1si
aXNfZ3JlZW4iXToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgc2VsZi5f
cHJpbnRfYmxhbWVfaW5mb3JtYXRpb25fZm9yX2J1aWxkZXIoYnVpbGRlcl9zdGF0dXMsIG5hbWVf
d2lkdGg9bG9uZ2VzdF9idWlsZGVyX25hbWUpCi0gICAgICAgICAgICBmYWlsaW5nX2J1aWxkZXJz
ICs9IDEKLSAgICAgICAgaWYgZmFpbGluZ19idWlsZGVyczoKLSAgICAgICAgICAgIHByaW50ICIl
cyBvZiAlcyBhcmUgZmFpbGluZyIgJSAoZmFpbGluZ19idWlsZGVycywgcGx1cmFsaXplKCJidWls
ZGVyIiwgbGVuKGJ1aWxkZXJfc3RhdHVzZXMpKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IHByaW50ICJBbGwgYnVpbGRlcnMgYXJlIHBhc3NpbmchIgotCi1jbGFzcyBXaG9Ccm9rZUl0KEFi
c3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKLSAgICBuYW1lID0gIndoby1icm9rZS1pdCIKLSAg
ICBoZWxwX3RleHQgPSAiUHJpbnQgYSBsaXN0IG9mIHJldmlzaW9ucyBjYXVzaW5nIGZhaWx1cmVz
IG9uICVzIiAlIEJ1aWxkQm90LmRlZmF1bHRfaG9zdAotCi0gICAgZGVmIGV4ZWN1dGUoc2VsZiwg
b3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIGZvciByZXZpc2lvbiwgYnVpbGRlcnMgaW4g
c2VsZi50b29sLmJ1aWxkYm90LnJldmlzaW9uc19jYXVzaW5nX2ZhaWx1cmVzKEZhbHNlKS5pdGVt
cygpOgotICAgICAgICAgICAgcHJpbnQgInIlcyBhcHBlYXJzIHRvIGhhdmUgYnJva2VuICVzIiAl
IChyZXZpc2lvbiwgW2J1aWxkZXIubmFtZSgpIGZvciBidWlsZGVyIGluIGJ1aWxkZXJzXSkKLQot
Y2xhc3MgVHJlZVN0YXR1cyhBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZCk6Ci0gICAgbmFtZSA9
ICJ0cmVlLXN0YXR1cyIKLSAgICBoZWxwX3RleHQgPSAiUHJpbnQgdGhlIHN0YXR1cyBvZiB0aGUg
JXMgYnVpbGRib3RzIiAlIEJ1aWxkQm90LmRlZmF1bHRfaG9zdAotICAgIGxvbmdfaGVscCA9ICIi
IkZldGNoZXMgYnVpbGQgc3RhdHVzIGZyb20gaHR0cDovL2J1aWxkLndlYmtpdC5vcmcvb25lX2Jv
eF9wZXJfYnVpbGRlcgotYW5kIGRpc3BsYXllcyB0aGUgc3RhdHVzIG9mIGVhY2ggYnVpbGRlci4i
IiIKLQotICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAg
ICBmb3IgYnVpbGRlciBpbiB0b29sLmJ1aWxkYm90LmJ1aWxkZXJfc3RhdHVzZXMoKToKLSAgICAg
ICAgICAgIHN0YXR1c19zdHJpbmcgPSAib2siIGlmIGJ1aWxkZXJbImlzX2dyZWVuIl0gZWxzZSAi
RkFJTCIKLSAgICAgICAgICAgIHByaW50ICIlcyA6ICVzIiAlIChzdGF0dXNfc3RyaW5nLmxqdXN0
KDQpLCBidWlsZGVyWyJuYW1lIl0pCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9xdWVyaWVzX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1
NjM2NikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvcXVlcmllc191
bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2MyArMCwwIEBACi0jIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotZnJvbSB3ZWJraXRweS5idWd6aWxsYSBpbXBvcnQgQnVnemlsbGEKLWZyb20gd2Via2l0cHku
Y29tbWFuZHNfcmVmZXJlbmNlcyBpbXBvcnQgTW9jawotZnJvbSB3ZWJraXRweS5jb21tYW5kcy5j
b21tYW5kdGVzdCBpbXBvcnQgQ29tbWFuZHNUZXN0Ci1mcm9tIHdlYmtpdHB5LmNvbW1hbmRzLnF1
ZXJpZXMgaW1wb3J0ICoKLWZyb20gd2Via2l0cHkubW9ja19idWd6aWxsYXRvb2wgaW1wb3J0IE1v
Y2tCdWd6aWxsYVRvb2wKLQotY2xhc3MgUXVlcnlDb21tYW5kc1Rlc3QoQ29tbWFuZHNUZXN0KToK
LSAgICBkZWYgdGVzdF9idWdzX3RvX2NvbW1pdChzZWxmKToKLSAgICAgICAgZXhwZWN0ZWRfc3Rk
ZXJyID0gIldhcm5pbmcsIGF0dGFjaG1lbnQgMTI4IG9uIGJ1ZyA0MiBoYXMgaW52YWxpZCBjb21t
aXR0ZXIgKG5vbi1jb21taXR0ZXJAZXhhbXBsZS5jb20pXG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0
X2V4ZWN1dGVfb3V0cHV0cyhCdWdzVG9Db21taXQoKSwgTm9uZSwgIjQyXG43N1xuIiwgZXhwZWN0
ZWRfc3RkZXJyKQotCi0gICAgZGVmIHRlc3RfcGF0Y2hlc19pbl9jb21taXRfcXVldWUoc2VsZik6
Ci0gICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICJodHRwOi8vZXhhbXBsZS5jb20vMTk3XG5odHRw
Oi8vZXhhbXBsZS5jb20vMTAzXG4iCi0gICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICJXYXJuaW5n
LCBhdHRhY2htZW50IDEyOCBvbiBidWcgNDIgaGFzIGludmFsaWQgY29tbWl0dGVyIChub24tY29t
bWl0dGVyQGV4YW1wbGUuY29tKVxuUGF0Y2hlcyBpbiBjb21taXQgcXVldWU6XG4iCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2V4ZWN1dGVfb3V0cHV0cyhQYXRjaGVzSW5Db21taXRRdWV1ZSgpLCBOb25l
LCBleHBlY3RlZF9zdGRvdXQsIGV4cGVjdGVkX3N0ZGVycikKLQotICAgIGRlZiB0ZXN0X3BhdGNo
ZXNfdG9fY29tbWl0X3F1ZXVlKHNlbGYpOgotICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiaHR0
cDovL2V4YW1wbGUuY29tLzEwNCZhY3Rpb249ZWRpdFxuIgotICAgICAgICBleHBlY3RlZF9zdGRl
cnIgPSAiMTk3IGFscmVhZHkgaGFzIGNxPStcbjEyOCBhbHJlYWR5IGhhcyBjcT0rXG4xMDUgY29t
bWl0dGVyID0gXCJFcmljIFNlaWRlbFwiIDxlcmljQHdlYmtpdC5vcmc+XG4iCi0gICAgICAgIG9w
dGlvbnMgPSBNb2NrKCkKLSAgICAgICAgb3B0aW9ucy5idWdzID0gRmFsc2UKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKFBhdGNoZXNUb0NvbW1pdFF1ZXVlKCksIE5vbmUsIGV4
cGVjdGVkX3N0ZG91dCwgZXhwZWN0ZWRfc3RkZXJyLCBvcHRpb25zPW9wdGlvbnMpCi0KLSAgICAg
ICAgZXhwZWN0ZWRfc3Rkb3V0ID0gImh0dHA6Ly9leGFtcGxlLmNvbS83N1xuIgotICAgICAgICBv
cHRpb25zLmJ1Z3MgPSBUcnVlCi0gICAgICAgIHNlbGYuYXNzZXJ0X2V4ZWN1dGVfb3V0cHV0cyhQ
YXRjaGVzVG9Db21taXRRdWV1ZSgpLCBOb25lLCBleHBlY3RlZF9zdGRvdXQsIGV4cGVjdGVkX3N0
ZGVyciwgb3B0aW9ucz1vcHRpb25zKQotCi0gICAgZGVmIHRlc3RfcGF0Y2hlc190b19yZXZpZXco
c2VsZik6Ci0gICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICIxMDNcbiIKLSAgICAgICAgZXhwZWN0
ZWRfc3RkZXJyID0gIlBhdGNoZXMgcGVuZGluZyByZXZpZXc6XG4iCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2V4ZWN1dGVfb3V0cHV0cyhQYXRjaGVzVG9SZXZpZXcoKSwgTm9uZSwgZXhwZWN0ZWRfc3Rk
b3V0LCBleHBlY3RlZF9zdGRlcnIpCi0KLSAgICBkZWYgdGVzdF90cmVlX3N0YXR1cyhzZWxmKToK
LSAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIm9rICAgOiBCdWlsZGVyMVxub2sgICA6IEJ1aWxk
ZXIyXG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0X2V4ZWN1dGVfb3V0cHV0cyhUcmVlU3RhdHVzKCks
IE5vbmUsIGV4cGVjdGVkX3N0ZG91dCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbWFuZHMvcXVldWVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbWFuZHMvcXVldWVzLnB5CShyZXZpc2lvbiA1NjM2NikKKysrIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvcXVldWVzLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMyNyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChjKSAy
MDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotIyBtZXQ6Ci0jIAotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotIyAKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci1pbXBvcnQgdHJhY2ViYWNrCi1pbXBvcnQgb3MKLQotZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0
ZXRpbWUKLWZyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCi1mcm9tIFN0cmluZ0lPIGlt
cG9ydCBTdHJpbmdJTwotCi1mcm9tIHdlYmtpdHB5LmJ1Z3ppbGxhIGltcG9ydCBDb21taXR0ZXJW
YWxpZGF0b3IKLWZyb20gd2Via2l0cHkuZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgotZnJv
bSB3ZWJraXRweS5ncmFtbWFyIGltcG9ydCBwbHVyYWxpemUKLWZyb20gd2Via2l0cHkud2Via2l0
X2xvZ2dpbmcgaW1wb3J0IGVycm9yLCBsb2cKLWZyb20gd2Via2l0cHkubXVsdGljb21tYW5kdG9v
bCBpbXBvcnQgQ29tbWFuZAotZnJvbSB3ZWJraXRweS5wYXRjaGNvbGxlY3Rpb24gaW1wb3J0IFBl
cnNpc3RlbnRQYXRjaENvbGxlY3Rpb24sIFBlcnNpc3RlbnRQYXRjaENvbGxlY3Rpb25EZWxlZ2F0
ZQotZnJvbSB3ZWJraXRweS5zdGF0dXNzZXJ2ZXIgaW1wb3J0IFN0YXR1c1NlcnZlcgotZnJvbSB3
ZWJraXRweS5zdGVwc2VxdWVuY2UgaW1wb3J0IFN0ZXBTZXF1ZW5jZUVycm9ySGFuZGxlcgotZnJv
bSB3ZWJraXRweS5xdWV1ZWVuZ2luZSBpbXBvcnQgUXVldWVFbmdpbmUsIFF1ZXVlRW5naW5lRGVs
ZWdhdGUKLQotY2xhc3MgQWJzdHJhY3RRdWV1ZShDb21tYW5kLCBRdWV1ZUVuZ2luZURlbGVnYXRl
KToKLSAgICB3YXRjaGVycyA9IFsKLSAgICAgICAgIndlYmtpdC1ib3Qtd2F0Y2hlcnNAZ29vZ2xl
Z3JvdXBzLmNvbSIsCi0gICAgXQotCi0gICAgX3Bhc3Nfc3RhdHVzID0gIlBhc3MiCi0gICAgX2Zh
aWxfc3RhdHVzID0gIkZhaWwiCi0gICAgX2Vycm9yX3N0YXR1cyA9ICJFcnJvciIKLQotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zPU5vbmUpOiAjIERlZmF1bHQgdmFsdWVzIHNob3VsZCBu
ZXZlciBiZSBjb2xsZWN0aW9ucyAobGlrZSBbXSkgYXMgZGVmYXVsdCB2YWx1ZXMgYXJlIHNoYXJl
ZCBiZXR3ZWVuIGludm9jYXRpb25zCi0gICAgICAgIG9wdGlvbnNfbGlzdCA9IChvcHRpb25zIG9y
IFtdKSArIFsKLSAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5vLWNvbmZpcm0iLCBhY3Rpb249
InN0b3JlX2ZhbHNlIiwgZGVzdD0iY29uZmlybSIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0iRG8gbm90
IGFzayB0aGUgdXNlciBmb3IgY29uZmlybWF0aW9uIGJlZm9yZSBydW5uaW5nIHRoZSBxdWV1ZS4g
IERhbmdlcm91cyEiKSwKLSAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLWV4aXQtYWZ0ZXItaXRl
cmF0aW9uIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9ImludCIsIGRlc3Q9Iml0ZXJhdGlvbnMiLCBk
ZWZhdWx0PU5vbmUsIGhlbHA9IlN0b3AgcnVubmluZyB0aGUgcXVldWUgYWZ0ZXIgaXRlcmF0aW5n
IHRoaXMgbnVtYmVyIG9mIHRpbWVzLiIpLAotICAgICAgICBdCi0gICAgICAgIENvbW1hbmQuX19p
bml0X18oc2VsZiwgIlJ1biB0aGUgJXMiICUgc2VsZi5uYW1lLCBvcHRpb25zPW9wdGlvbnNfbGlz
dCkKLSAgICAgICAgc2VsZi5faXRlcmF0aW9uX2NvdW50ID0gMAotCi0gICAgZGVmIF9jY193YXRj
aGVycyhzZWxmLCBidWdfaWQpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLnRvb2wu
YnVncy5hZGRfY2NfdG9fYnVnKGJ1Z19pZCwgc2VsZi53YXRjaGVycykKLSAgICAgICAgZXhjZXB0
IEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQotICAgICAg
ICAgICAgbG9nKCJGYWlsZWQgdG8gQ0Mgd2F0Y2hlcnMuIikKLQotICAgIGRlZiBydW5fd2Via2l0
X3BhdGNoKHNlbGYsIGFyZ3MpOgotICAgICAgICB3ZWJraXRfcGF0Y2hfYXJncyA9IFtzZWxmLnRv
b2wucGF0aCgpXQotICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEgaGFjaywgd2Ugc2hvdWxkIGhh
dmUgYSBtb3JlIGdlbmVyYWwgd2F5IHRvIHBhc3MgZ2xvYmFsIG9wdGlvbnMuCi0gICAgICAgIHdl
YmtpdF9wYXRjaF9hcmdzICs9IFsiLS1zdGF0dXMtaG9zdD0lcyIgJSBzZWxmLnRvb2wuc3RhdHVz
X3NlcnZlci5ob3N0XQotICAgICAgICB3ZWJraXRfcGF0Y2hfYXJncyArPSBtYXAoc3RyLCBhcmdz
KQotICAgICAgICBzZWxmLnRvb2wuZXhlY3V0aXZlLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbCh3ZWJr
aXRfcGF0Y2hfYXJncykKLQotICAgICMgUXVldWVFbmdpbmVEZWxlZ2F0ZSBtZXRob2RzCi0KLSAg
ICBkZWYgcXVldWVfbG9nX3BhdGgoc2VsZik6Ci0gICAgICAgIHJldHVybiAiJXMubG9nIiAlIHNl
bGYubmFtZQotCi0gICAgZGVmIHdvcmtfaXRlbV9sb2dfcGF0aChzZWxmLCB3b3JrX2l0ZW0pOgot
ICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxl
bWVudCIKLQotICAgIGRlZiBiZWdpbl93b3JrX3F1ZXVlKHNlbGYpOgotICAgICAgICBsb2coIkNB
VVRJT046ICVzIHdpbGwgZGlzY2FyZCBhbGwgbG9jYWwgY2hhbmdlcyBpbiBcIiVzXCIiICUgKHNl
bGYubmFtZSwgc2VsZi50b29sLnNjbSgpLmNoZWNrb3V0X3Jvb3QpKQotICAgICAgICBpZiBzZWxm
Lm9wdGlvbnMuY29uZmlybToKLSAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi50b29sLnVzZXIu
cHJvbXB0KCJBcmUgeW91IHN1cmU/ICBUeXBlIFwieWVzXCIgdG8gY29udGludWU6ICIpCi0gICAg
ICAgICAgICBpZiAocmVzcG9uc2UgIT0gInllcyIpOgotICAgICAgICAgICAgICAgIGVycm9yKCJV
c2VyIGRlY2xpbmVkLiIpCi0gICAgICAgIGxvZygiUnVubmluZyBXZWJLaXQgJXMuIiAlIHNlbGYu
bmFtZSkKLQotICAgIGRlZiBzaG91bGRfY29udGludWVfd29ya19xdWV1ZShzZWxmKToKLSAgICAg
ICAgc2VsZi5faXRlcmF0aW9uX2NvdW50ICs9IDEKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmLm9w
dGlvbnMuaXRlcmF0aW9ucyBvciBzZWxmLl9pdGVyYXRpb25fY291bnQgPD0gc2VsZi5vcHRpb25z
Lml0ZXJhdGlvbnMKLQotICAgIGRlZiBuZXh0X3dvcmtfaXRlbShzZWxmKToKLSAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCi0KLSAg
ICBkZWYgc2hvdWxkX3Byb2NlZWRfd2l0aF93b3JrX2l0ZW0oc2VsZiwgd29ya19pdGVtKToKLSAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1l
bnQiCi0KLSAgICBkZWYgcHJvY2Vzc193b3JrX2l0ZW0oc2VsZiwgd29ya19pdGVtKToKLSAgICAg
ICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQi
Ci0KLSAgICBkZWYgaGFuZGxlX3VuZXhwZWN0ZWRfZXJyb3Ioc2VsZiwgd29ya19pdGVtLCBtZXNz
YWdlKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVz
dCBpbXBsZW1lbnQiCi0KLSAgICAjIENvbW1hbmQgbWV0aG9kcwotCi0gICAgZGVmIGV4ZWN1dGUo
c2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCwgZW5naW5lPVF1ZXVlRW5naW5lKToKLSAgICAgICAg
c2VsZi5vcHRpb25zID0gb3B0aW9ucwotICAgICAgICBzZWxmLnRvb2wgPSB0b29sCi0gICAgICAg
IHJldHVybiBlbmdpbmUoc2VsZi5uYW1lLCBzZWxmKS5ydW4oKQotCi0gICAgQGNsYXNzbWV0aG9k
Ci0gICAgZGVmIF91cGRhdGVfc3RhdHVzX2Zvcl9zY3JpcHRfZXJyb3IoY2xzLCB0b29sLCBzdGF0
ZSwgc2NyaXB0X2Vycm9yLCBpc19lcnJvcj1GYWxzZSk6Ci0gICAgICAgIG1lc3NhZ2UgPSBzY3Jp
cHRfZXJyb3IubWVzc2FnZQotICAgICAgICBpZiBpc19lcnJvcjoKLSAgICAgICAgICAgIG1lc3Nh
Z2UgPSAiRXJyb3I6ICVzIiAlIG1lc3NhZ2UKLSAgICAgICAgb3V0cHV0ID0gc2NyaXB0X2Vycm9y
Lm1lc3NhZ2Vfd2l0aF9vdXRwdXQob3V0cHV0X2xpbWl0PTEwMjQqMTAyNCkgIyAxTUIKLSAgICAg
ICAgcmV0dXJuIHRvb2wuc3RhdHVzX3NlcnZlci51cGRhdGVfc3RhdHVzKGNscy5uYW1lLCBtZXNz
YWdlLCBzdGF0ZVsicGF0Y2giXSwgU3RyaW5nSU8ob3V0cHV0KSkKLQotCi1jbGFzcyBBYnN0cmFj
dFBhdGNoUXVldWUoQWJzdHJhY3RRdWV1ZSk6Ci0gICAgZGVmIF91cGRhdGVfc3RhdHVzKHNlbGYs
IG1lc3NhZ2UsIHBhdGNoPU5vbmUsIHJlc3VsdHNfZmlsZT1Ob25lKToKLSAgICAgICAgc2VsZi50
b29sLnN0YXR1c19zZXJ2ZXIudXBkYXRlX3N0YXR1cyhzZWxmLm5hbWUsIG1lc3NhZ2UsIHBhdGNo
LCByZXN1bHRzX2ZpbGUpCi0KLSAgICBkZWYgX2RpZF9wYXNzKHNlbGYsIHBhdGNoKToKLSAgICAg
ICAgc2VsZi5fdXBkYXRlX3N0YXR1cyhzZWxmLl9wYXNzX3N0YXR1cywgcGF0Y2gpCi0KLSAgICBk
ZWYgX2RpZF9mYWlsKHNlbGYsIHBhdGNoKToKLSAgICAgICAgc2VsZi5fdXBkYXRlX3N0YXR1cyhz
ZWxmLl9mYWlsX3N0YXR1cywgcGF0Y2gpCi0KLSAgICBkZWYgX2RpZF9lcnJvcihzZWxmLCBwYXRj
aCwgcmVhc29uKToKLSAgICAgICAgbWVzc2FnZSA9ICIlczogJXMiICUgKHNlbGYuX2Vycm9yX3N0
YXR1cywgcmVhc29uKQotICAgICAgICBzZWxmLl91cGRhdGVfc3RhdHVzKG1lc3NhZ2UsIHBhdGNo
KQotCi0gICAgZGVmIHdvcmtfaXRlbV9sb2dfcGF0aChzZWxmLCBwYXRjaCk6Ci0gICAgICAgIHJl
dHVybiBvcy5wYXRoLmpvaW4oIiVzLWxvZ3MiICUgc2VsZi5uYW1lLCAiJXMubG9nIiAlIHBhdGNo
LmJ1Z19pZCgpKQotCi0gICAgZGVmIGxvZ19wcm9ncmVzcyhzZWxmLCBwYXRjaF9pZHMpOgotICAg
ICAgICBsb2coIiVzIGluICVzIFslc10iICUgKHBsdXJhbGl6ZSgicGF0Y2giLCBsZW4ocGF0Y2hf
aWRzKSksIHNlbGYubmFtZSwgIiwgIi5qb2luKG1hcChzdHIsIHBhdGNoX2lkcykpKSkKLQotCi1j
bGFzcyBDb21taXRRdWV1ZShBYnN0cmFjdFBhdGNoUXVldWUsIFN0ZXBTZXF1ZW5jZUVycm9ySGFu
ZGxlcik6Ci0gICAgbmFtZSA9ICJjb21taXQtcXVldWUiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYp
OgotICAgICAgICBBYnN0cmFjdFBhdGNoUXVldWUuX19pbml0X18oc2VsZikKLQotICAgICMgQWJz
dHJhY3RQYXRjaFF1ZXVlIG1ldGhvZHMKLQotICAgIGRlZiBiZWdpbl93b3JrX3F1ZXVlKHNlbGYp
OgotICAgICAgICBBYnN0cmFjdFBhdGNoUXVldWUuYmVnaW5fd29ya19xdWV1ZShzZWxmKQotICAg
ICAgICBzZWxmLmNvbW1pdHRlcl92YWxpZGF0b3IgPSBDb21taXR0ZXJWYWxpZGF0b3Ioc2VsZi50
b29sLmJ1Z3MpCi0KLSAgICBkZWYgX3ZhbGlkYXRlX3BhdGNoZXNfaW5fY29tbWl0X3F1ZXVlKHNl
bGYpOgotICAgICAgICAjIE5vdCB1c2luZyBCdWd6aWxsYVF1ZXJpZXMuZmV0Y2hfcGF0Y2hlc19m
cm9tX2NvbW1pdF9xdWV1ZSgpIHNvIHdlIGNhbiByZWplY3QgcGF0Y2hlcyB3aXRoIGludmFsaWQg
Y29tbWl0dGVycy9yZXZpZXdlcnMuCi0gICAgICAgIGJ1Z19pZHMgPSBzZWxmLnRvb2wuYnVncy5x
dWVyaWVzLmZldGNoX2J1Z19pZHNfZnJvbV9jb21taXRfcXVldWUoKQotICAgICAgICBhbGxfcGF0
Y2hlcyA9IHN1bShbc2VsZi50b29sLmJ1Z3MuZmV0Y2hfYnVnKGJ1Z19pZCkuY29tbWl0X3F1ZXVl
ZF9wYXRjaGVzKGluY2x1ZGVfaW52YWxpZD1UcnVlKSBmb3IgYnVnX2lkIGluIGJ1Z19pZHNdLCBb
XSkKLSAgICAgICAgdmFsaWRfcGF0Y2hlcyA9IHNlbGYuY29tbWl0dGVyX3ZhbGlkYXRvci5wYXRj
aGVzX2FmdGVyX3JlamVjdGluZ19pbnZhbGlkX2NvbW1pdGVyc19hbmRfcmV2aWV3ZXJzKGFsbF9w
YXRjaGVzKQotICAgICAgICBpZiBub3Qgc2VsZi5fYnVpbGRlcnNfYXJlX2dyZWVuKCk6Ci0gICAg
ICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBwYXRjaDogcGF0Y2guaXNfcm9sbG91dCgpLCB2
YWxpZF9wYXRjaGVzKQotICAgICAgICByZXR1cm4gdmFsaWRfcGF0Y2hlcwotCi0gICAgZGVmIG5l
eHRfd29ya19pdGVtKHNlbGYpOgotICAgICAgICBwYXRjaGVzID0gc2VsZi5fdmFsaWRhdGVfcGF0
Y2hlc19pbl9jb21taXRfcXVldWUoKQotICAgICAgICAjIEZJWE1FOiBXZSBjb3VsZCBzb3J0IHRo
ZSBwYXRjaGVzIGluIGEgc3BlY2lmaWMgb3JkZXIgaGVyZSwgd2FzIHN1Z2dlc3RlZCBieSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMzOTUKLSAgICAgICAgaWYgbm90
IHBhdGNoZXM6Ci0gICAgICAgICAgICBzZWxmLl91cGRhdGVfc3RhdHVzKCJFbXB0eSBxdWV1ZSIp
Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAjIE9ubHkgYm90aGVyIGxvZ2dpbmcg
aWYgd2UgaGF2ZSBwYXRjaGVzIGluIHRoZSBxdWV1ZS4KLSAgICAgICAgc2VsZi5sb2dfcHJvZ3Jl
c3MoW3BhdGNoLmlkKCkgZm9yIHBhdGNoIGluIHBhdGNoZXNdKQotICAgICAgICByZXR1cm4gcGF0
Y2hlc1swXQotCi0gICAgZGVmIF9jYW5fYnVpbGRfYW5kX3Rlc3Qoc2VsZik6Ci0gICAgICAgIHRy
eToKLSAgICAgICAgICAgIHNlbGYucnVuX3dlYmtpdF9wYXRjaChbImJ1aWxkLWFuZC10ZXN0Iiwg
Ii0tZm9yY2UtY2xlYW4iLCAiLS1ub24taW50ZXJhY3RpdmUiLCAiLS1idWlsZC1zdHlsZT1ib3Ro
IiwgIi0tcXVpZXQiXSkKLSAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBlOgotICAgICAgICAg
ICAgc2VsZi5fdXBkYXRlX3N0YXR1cygiVW5hYmxlIHRvIHN1Y2Nlc3NmdWxseSBidWlsZCBhbmQg
dGVzdCIsIE5vbmUpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRy
dWUKLQotICAgIGRlZiBfYnVpbGRlcnNfYXJlX2dyZWVuKHNlbGYpOgotICAgICAgICByZWRfYnVp
bGRlcnNfbmFtZXMgPSBzZWxmLnRvb2wuYnVpbGRib3QucmVkX2NvcmVfYnVpbGRlcnNfbmFtZXMo
KQotICAgICAgICBpZiByZWRfYnVpbGRlcnNfbmFtZXM6Ci0gICAgICAgICAgICByZWRfYnVpbGRl
cnNfbmFtZXMgPSBtYXAobGFtYmRhIG5hbWU6ICJcIiVzXCIiICUgbmFtZSwgcmVkX2J1aWxkZXJz
X25hbWVzKSAjIEFkZCBxdW90ZXMgYXJvdW5kIHRoZSBuYW1lcy4KLSAgICAgICAgICAgIHNlbGYu
X3VwZGF0ZV9zdGF0dXMoIkJ1aWxkZXJzIFslc10gYXJlIHJlZC4gU2VlIGh0dHA6Ly9idWlsZC53
ZWJraXQub3JnIiAlICIsICIuam9pbihyZWRfYnVpbGRlcnNfbmFtZXMpLCBOb25lKQotICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgc2hvdWxk
X3Byb2NlZWRfd2l0aF93b3JrX2l0ZW0oc2VsZiwgcGF0Y2gpOgotICAgICAgICBpZiBub3QgcGF0
Y2guaXNfcm9sbG91dCgpOgotICAgICAgICAgICAgaWYgbm90IHNlbGYuX2J1aWxkZXJzX2FyZV9n
cmVlbigpOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgaWYgbm90
IHNlbGYuX2Nhbl9idWlsZF9hbmRfdGVzdCgpOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxz
ZQotICAgICAgICAgICAgaWYgbm90IHNlbGYuX2J1aWxkZXJzX2FyZV9ncmVlbigpOgotICAgICAg
ICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBzZWxmLl91cGRhdGVfc3RhdHVzKCJMYW5k
aW5nIHBhdGNoIiwgcGF0Y2gpCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgcHJvY2Vz
c193b3JrX2l0ZW0oc2VsZiwgcGF0Y2gpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxm
Ll9jY193YXRjaGVycyhwYXRjaC5idWdfaWQoKSkKLSAgICAgICAgICAgIGFyZ3MgPSBbCi0gICAg
ICAgICAgICAgICAgImxhbmQtYXR0YWNobWVudCIsCi0gICAgICAgICAgICAgICAgIi0tZm9yY2Ut
Y2xlYW4iLAotICAgICAgICAgICAgICAgICItLW5vbi1pbnRlcmFjdGl2ZSIsCi0gICAgICAgICAg
ICAgICAgIi0tcGFyZW50LWNvbW1hbmQ9Y29tbWl0LXF1ZXVlIiwKLSAgICAgICAgICAgICAgICAi
LS1idWlsZC1zdHlsZT1ib3RoIiwKLSAgICAgICAgICAgICAgICAiLS1xdWlldCIsCi0gICAgICAg
ICAgICAgICAgcGF0Y2guaWQoKQotICAgICAgICAgICAgXQotICAgICAgICAgICAgaWYgcGF0Y2gu
aXNfcm9sbG91dCgpOgotICAgICAgICAgICAgICAgICMgV2UgbmVlZCB0byBpZ25vcmUgdGhlIGJ1
aWxkZXJzIHdoZW4gbGFuZGluZyBhIHJvbGxvdXQKLSAgICAgICAgICAgICAgICAjIGJlY2F1c2Ug
dGhleSdyZSBwcm9iYWJseSByZWQuCi0gICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoIi0taWdu
b3JlLWJ1aWxkZXJzIikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBXZSBw
YXNzIC0tbm8tdXBkYXRlIGluIHRoZSBub3JtYWwgKG5vbi1yb2xsb3V0KSBjYXNlCi0gICAgICAg
ICAgICAgICAgIyBiZWNhdXNlIHdlJ3ZlIGFscmVhZHkgdmFsaWRhdGVkIHRoYXQgdGhlIGN1cnJl
bnQgcmV2aXNpb24KLSAgICAgICAgICAgICAgICAjIGFjdHVhbGx5IGJ1aWxkcyBhbmQgcGFzc2Vz
IHRoZSB0ZXN0cy4gIElmIHdlIHVwZGF0ZSwgd2UgcmlzawotICAgICAgICAgICAgICAgICMgbW92
aW5nIHRvIGEgcmV2aXNpb24gdGhhdCBkb2Vzbid0IQotICAgICAgICAgICAgICAgIGFyZ3MuYXBw
ZW5kKCItLW5vLXVwZGF0ZSIpCi0gICAgICAgICAgICBzZWxmLnJ1bl93ZWJraXRfcGF0Y2goYXJn
cykKLSAgICAgICAgICAgIHNlbGYuX2RpZF9wYXNzKHBhdGNoKQotICAgICAgICBleGNlcHQgU2Ny
aXB0RXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLl9kaWRfZmFpbChwYXRjaCkKLSAgICAgICAg
ICAgIHJhaXNlIGUKLQotICAgIGRlZiBoYW5kbGVfdW5leHBlY3RlZF9lcnJvcihzZWxmLCBwYXRj
aCwgbWVzc2FnZSk6Ci0gICAgICAgIHNlbGYuY29tbWl0dGVyX3ZhbGlkYXRvci5yZWplY3RfcGF0
Y2hfZnJvbV9jb21taXRfcXVldWUocGF0Y2guaWQoKSwgbWVzc2FnZSkKLQotICAgICMgU3RlcFNl
cXVlbmNlRXJyb3JIYW5kbGVyIG1ldGhvZHMKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYg
X2Vycm9yX21lc3NhZ2VfZm9yX2J1Zyh0b29sLCBzdGF0dXNfaWQsIHNjcmlwdF9lcnJvcik6Ci0g
ICAgICAgIGlmIG5vdCBzY3JpcHRfZXJyb3Iub3V0cHV0OgotICAgICAgICAgICAgcmV0dXJuIHNj
cmlwdF9lcnJvci5tZXNzYWdlX3dpdGhfb3V0cHV0KCkKLSAgICAgICAgcmVzdWx0c19saW5rID0g
dG9vbC5zdGF0dXNfc2VydmVyLnJlc3VsdHNfdXJsX2Zvcl9zdGF0dXMoc3RhdHVzX2lkKQotICAg
ICAgICByZXR1cm4gIiVzXG5GdWxsIG91dHB1dDogJXMiICUgKHNjcmlwdF9lcnJvci5tZXNzYWdl
X3dpdGhfb3V0cHV0KCksIHJlc3VsdHNfbGluaykKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRl
ZiBoYW5kbGVfc2NyaXB0X2Vycm9yKGNscywgdG9vbCwgc3RhdGUsIHNjcmlwdF9lcnJvcik6Ci0g
ICAgICAgIHN0YXR1c19pZCA9IGNscy5fdXBkYXRlX3N0YXR1c19mb3Jfc2NyaXB0X2Vycm9yKHRv
b2wsIHN0YXRlLCBzY3JpcHRfZXJyb3IpCi0gICAgICAgIHZhbGlkYXRvciA9IENvbW1pdHRlclZh
bGlkYXRvcih0b29sLmJ1Z3MpCi0gICAgICAgIHZhbGlkYXRvci5yZWplY3RfcGF0Y2hfZnJvbV9j
b21taXRfcXVldWUoc3RhdGVbInBhdGNoIl0uaWQoKSwgY2xzLl9lcnJvcl9tZXNzYWdlX2Zvcl9i
dWcodG9vbCwgc3RhdHVzX2lkLCBzY3JpcHRfZXJyb3IpKQotCi0KLWNsYXNzIEFic3RyYWN0UmV2
aWV3UXVldWUoQWJzdHJhY3RQYXRjaFF1ZXVlLCBQZXJzaXN0ZW50UGF0Y2hDb2xsZWN0aW9uRGVs
ZWdhdGUsIFN0ZXBTZXF1ZW5jZUVycm9ySGFuZGxlcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IG9wdGlvbnM9Tm9uZSk6Ci0gICAgICAgIEFic3RyYWN0UGF0Y2hRdWV1ZS5fX2luaXRfXyhzZWxm
LCBvcHRpb25zKQotCi0gICAgZGVmIF9yZXZpZXdfcGF0Y2goc2VsZiwgcGF0Y2gpOgotICAgICAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIK
LQotICAgICMgUGVyc2lzdGVudFBhdGNoQ29sbGVjdGlvbkRlbGVnYXRlIG1ldGhvZHMKLQotICAg
IGRlZiBjb2xsZWN0aW9uX25hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLm5hbWUKLQot
ICAgIGRlZiBmZXRjaF9wb3RlbnRpYWxfcGF0Y2hfaWRzKHNlbGYpOgotICAgICAgICByZXR1cm4g
c2VsZi50b29sLmJ1Z3MucXVlcmllcy5mZXRjaF9hdHRhY2htZW50X2lkc19mcm9tX3Jldmlld19x
dWV1ZSgpCi0KLSAgICBkZWYgc3RhdHVzX3NlcnZlcihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNl
bGYudG9vbC5zdGF0dXNfc2VydmVyCi0KLSAgICBkZWYgaXNfdGVybWluYWxfc3RhdHVzKHNlbGYs
IHN0YXR1cyk6Ci0gICAgICAgIHJldHVybiBzdGF0dXMgPT0gIlBhc3MiIG9yIHN0YXR1cyA9PSAi
RmFpbCIgb3Igc3RhdHVzLnN0YXJ0c3dpdGgoIkVycm9yOiIpCi0KLSAgICAjIEFic3RyYWN0UGF0
Y2hRdWV1ZSBtZXRob2RzCi0KLSAgICBkZWYgYmVnaW5fd29ya19xdWV1ZShzZWxmKToKLSAgICAg
ICAgQWJzdHJhY3RQYXRjaFF1ZXVlLmJlZ2luX3dvcmtfcXVldWUoc2VsZikKLSAgICAgICAgc2Vs
Zi5fcGF0Y2hlcyA9IFBlcnNpc3RlbnRQYXRjaENvbGxlY3Rpb24oc2VsZikKLQotICAgIGRlZiBu
ZXh0X3dvcmtfaXRlbShzZWxmKToKLSAgICAgICAgcGF0Y2hfaWQgPSBzZWxmLl9wYXRjaGVzLm5l
eHQoKQotICAgICAgICBpZiBwYXRjaF9pZDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnRvb2wu
YnVncy5mZXRjaF9hdHRhY2htZW50KHBhdGNoX2lkKQotICAgICAgICBzZWxmLl91cGRhdGVfc3Rh
dHVzKCJFbXB0eSBxdWV1ZSIpCi0KLSAgICBkZWYgc2hvdWxkX3Byb2NlZWRfd2l0aF93b3JrX2l0
ZW0oc2VsZiwgcGF0Y2gpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAic3Vi
Y2xhc3NlcyBtdXN0IGltcGxlbWVudCIKLQotICAgIGRlZiBwcm9jZXNzX3dvcmtfaXRlbShzZWxm
LCBwYXRjaCk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX3Jldmlld19wYXRjaChw
YXRjaCkKLSAgICAgICAgICAgIHNlbGYuX2RpZF9wYXNzKHBhdGNoKQotICAgICAgICBleGNlcHQg
U2NyaXB0RXJyb3IsIGU6Ci0gICAgICAgICAgICBpZiBlLmV4aXRfY29kZSAhPSBRdWV1ZUVuZ2lu
ZS5oYW5kbGVkX2Vycm9yX2NvZGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZGlkX2ZhaWwocGF0
Y2gpCi0gICAgICAgICAgICByYWlzZSBlCi0KLSAgICBkZWYgaGFuZGxlX3VuZXhwZWN0ZWRfZXJy
b3Ioc2VsZiwgcGF0Y2gsIG1lc3NhZ2UpOgotICAgICAgICBsb2cobWVzc2FnZSkKLQotICAgICMg
U3RlcFNlcXVlbmNlRXJyb3JIYW5kbGVyIG1ldGhvZHMKLQotICAgIEBjbGFzc21ldGhvZAotICAg
IGRlZiBoYW5kbGVfc2NyaXB0X2Vycm9yKGNscywgdG9vbCwgc3RhdGUsIHNjcmlwdF9lcnJvcik6
Ci0gICAgICAgIGxvZyhzY3JpcHRfZXJyb3IubWVzc2FnZV93aXRoX291dHB1dCgpKQotCi0KLWNs
YXNzIFN0eWxlUXVldWUoQWJzdHJhY3RSZXZpZXdRdWV1ZSk6Ci0gICAgbmFtZSA9ICJzdHlsZS1x
dWV1ZSIKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIEFic3RyYWN0UmV2aWV3UXVl
dWUuX19pbml0X18oc2VsZikKLQotICAgIGRlZiBzaG91bGRfcHJvY2VlZF93aXRoX3dvcmtfaXRl
bShzZWxmLCBwYXRjaCk6Ci0gICAgICAgIHNlbGYuX3VwZGF0ZV9zdGF0dXMoIkNoZWNraW5nIHN0
eWxlIiwgcGF0Y2gpCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgX3Jldmlld19wYXRj
aChzZWxmLCBwYXRjaCk6Ci0gICAgICAgIHNlbGYucnVuX3dlYmtpdF9wYXRjaChbImNoZWNrLXN0
eWxlIiwgIi0tZm9yY2UtY2xlYW4iLCAiLS1ub24taW50ZXJhY3RpdmUiLCAiLS1wYXJlbnQtY29t
bWFuZD1zdHlsZS1xdWV1ZSIsIHBhdGNoLmlkKCldKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAg
ZGVmIGhhbmRsZV9zY3JpcHRfZXJyb3IoY2xzLCB0b29sLCBzdGF0ZSwgc2NyaXB0X2Vycm9yKToK
LSAgICAgICAgaXNfc3ZuX2FwcGx5ID0gc2NyaXB0X2Vycm9yLmNvbW1hbmRfbmFtZSgpID09ICJz
dm4tYXBwbHkiCi0gICAgICAgIHN0YXR1c19pZCA9IGNscy5fdXBkYXRlX3N0YXR1c19mb3Jfc2Ny
aXB0X2Vycm9yKHRvb2wsIHN0YXRlLCBzY3JpcHRfZXJyb3IsIGlzX2Vycm9yPWlzX3N2bl9hcHBs
eSkKLSAgICAgICAgaWYgaXNfc3ZuX2FwcGx5OgotICAgICAgICAgICAgUXVldWVFbmdpbmUuZXhp
dF9hZnRlcl9oYW5kbGVkX2Vycm9yKHNjcmlwdF9lcnJvcikKLSAgICAgICAgbWVzc2FnZSA9ICJB
dHRhY2htZW50ICVzIGRpZCBub3QgcGFzcyAlczpcblxuJXNcblxuSWYgYW55IG9mIHRoZXNlIGVy
cm9ycyBhcmUgZmFsc2UgcG9zaXRpdmVzLCBwbGVhc2UgZmlsZSBhIGJ1ZyBhZ2FpbnN0IGNoZWNr
LXdlYmtpdC1zdHlsZS4iICUgKHN0YXRlWyJwYXRjaCJdLmlkKCksIGNscy5uYW1lLCBzY3JpcHRf
ZXJyb3IubWVzc2FnZV93aXRoX291dHB1dChvdXRwdXRfbGltaXQ9MyoxMDI0KSkKLSAgICAgICAg
dG9vbC5idWdzLnBvc3RfY29tbWVudF90b19idWcoc3RhdGVbInBhdGNoIl0uYnVnX2lkKCksIG1l
c3NhZ2UsIGNjPWNscy53YXRjaGVycykKLSAgICAgICAgZXhpdCgxKQpJbmRleDogV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9xdWV1ZXNfdW5pdHRl
c3QucHkJKHJldmlzaW9uIDU2MzY2KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMTM0ICswLDAg
QEAKLSMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0jICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9u
LgotIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgb3MKLQotZnJvbSB3ZWJraXRweS5idWd6aWxsYSBp
bXBvcnQgQXR0YWNobWVudAotZnJvbSB3ZWJraXRweS5jb21tYW5kc19yZWZlcmVuY2VzIGltcG9y
dCBNb2NrCi1mcm9tIHdlYmtpdHB5LmNvbW1hbmRzLmNvbW1hbmR0ZXN0IGltcG9ydCBDb21tYW5k
c1Rlc3QKLWZyb20gd2Via2l0cHkuY29tbWFuZHMucXVldWVzIGltcG9ydCAqCi1mcm9tIHdlYmtp
dHB5LmNvbW1hbmRzLnF1ZXVlc3Rlc3QgaW1wb3J0IFF1ZXVlc1Rlc3QKLWZyb20gd2Via2l0cHku
bW9ja19idWd6aWxsYXRvb2wgaW1wb3J0IE1vY2tCdWd6aWxsYVRvb2wsIE1vY2tTQ00KLWZyb20g
d2Via2l0cHkub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQotCi0KLWNsYXNzIFRl
c3RRdWV1ZShBYnN0cmFjdFBhdGNoUXVldWUpOgotICAgIG5hbWUgPSAidGVzdC1xdWV1ZSIKLQot
Ci1jbGFzcyBUZXN0UmV2aWV3UXVldWUoQWJzdHJhY3RSZXZpZXdRdWV1ZSk6Ci0gICAgbmFtZSA9
ICJ0ZXN0LXJldmlldy1xdWV1ZSIKLQotCi1jbGFzcyBBYnN0cmFjdFF1ZXVlVGVzdChDb21tYW5k
c1Rlc3QpOgotICAgIGRlZiBfYXNzZXJ0X2xvZ19wcm9ncmVzc19vdXRwdXQoc2VsZiwgcGF0Y2hf
aWRzLCBwcm9ncmVzc19vdXRwdXQpOgotICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291
dHB1dHMoc2VsZiwgVGVzdFF1ZXVlKCkubG9nX3Byb2dyZXNzLCBbcGF0Y2hfaWRzXSwgZXhwZWN0
ZWRfc3RkZXJyPXByb2dyZXNzX291dHB1dCkKLQotICAgIGRlZiB0ZXN0X2xvZ19wcm9ncmVzcyhz
ZWxmKToKLSAgICAgICAgc2VsZi5fYXNzZXJ0X2xvZ19wcm9ncmVzc19vdXRwdXQoWzEsMiwzXSwg
IjMgcGF0Y2hlcyBpbiB0ZXN0LXF1ZXVlIFsxLCAyLCAzXVxuIikKLSAgICAgICAgc2VsZi5fYXNz
ZXJ0X2xvZ19wcm9ncmVzc19vdXRwdXQoWyIxIiwiMiIsIjMiXSwgIjMgcGF0Y2hlcyBpbiB0ZXN0
LXF1ZXVlIFsxLCAyLCAzXVxuIikKLSAgICAgICAgc2VsZi5fYXNzZXJ0X2xvZ19wcm9ncmVzc19v
dXRwdXQoWzFdLCAiMSBwYXRjaCBpbiB0ZXN0LXF1ZXVlIFsxXVxuIikKLQotICAgIGRlZiBfYXNz
ZXJ0X3J1bl93ZWJraXRfcGF0Y2goc2VsZiwgcnVuX2FyZ3MpOgotICAgICAgICBxdWV1ZSA9IFRl
c3RRdWV1ZSgpCi0gICAgICAgIHRvb2wgPSBNb2NrQnVnemlsbGFUb29sKCkKLSAgICAgICAgcXVl
dWUuYmluZF90b190b29sKHRvb2wpCi0KLSAgICAgICAgcXVldWUucnVuX3dlYmtpdF9wYXRjaChy
dW5fYXJncykKLSAgICAgICAgZXhwZWN0ZWRfcnVuX2FyZ3MgPSBbImVjaG8iLCAiLS1zdGF0dXMt
aG9zdD1leGFtcGxlLmNvbSJdICsgbWFwKHN0ciwgcnVuX2FyZ3MpCi0gICAgICAgIHRvb2wuZXhl
Y3V0aXZlLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbC5hc3NlcnRfY2FsbGVkX3dpdGgoZXhwZWN0ZWRf
cnVuX2FyZ3MpCi0KLSAgICBkZWYgdGVzdF9ydW5fd2Via2l0X3BhdGNoKHNlbGYpOgotICAgICAg
ICBzZWxmLl9hc3NlcnRfcnVuX3dlYmtpdF9wYXRjaChbMV0pCi0gICAgICAgIHNlbGYuX2Fzc2Vy
dF9ydW5fd2Via2l0X3BhdGNoKFsib25lIiwgMl0pCi0KLSAgICBkZWYgdGVzdF9pdGVyYXRpb25f
Y291bnQoc2VsZik6Ci0gICAgICAgIHF1ZXVlID0gVGVzdFF1ZXVlKCkKLSAgICAgICAgcXVldWUu
b3B0aW9ucyA9IE1vY2soKQotICAgICAgICBxdWV1ZS5vcHRpb25zLml0ZXJhdGlvbnMgPSAzCi0g
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxdWV1ZS5zaG91bGRfY29udGludWVfd29ya19xdWV1ZSgp
KQotICAgICAgICBzZWxmLmFzc2VydFRydWUocXVldWUuc2hvdWxkX2NvbnRpbnVlX3dvcmtfcXVl
dWUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHF1ZXVlLnNob3VsZF9jb250aW51ZV93b3Jr
X3F1ZXVlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocXVldWUuc2hvdWxkX2NvbnRpbnVl
X3dvcmtfcXVldWUoKSkKLQotICAgIGRlZiB0ZXN0X25vX2l0ZXJhdGlvbl9jb3VudChzZWxmKToK
LSAgICAgICAgcXVldWUgPSBUZXN0UXVldWUoKQotICAgICAgICBxdWV1ZS5vcHRpb25zID0gTW9j
aygpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxdWV1ZS5zaG91bGRfY29udGludWVfd29ya19x
dWV1ZSgpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocXVldWUuc2hvdWxkX2NvbnRpbnVlX3dv
cmtfcXVldWUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHF1ZXVlLnNob3VsZF9jb250aW51
ZV93b3JrX3F1ZXVlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxdWV1ZS5zaG91bGRfY29u
dGludWVfd29ya19xdWV1ZSgpKQotCi0KLWNsYXNzIEFic3RyYWN0UmV2aWV3UXVldWVUZXN0KENv
bW1hbmRzVGVzdCk6Ci0gICAgZGVmIHRlc3RfcGF0Y2hfY29sbGVjdGlvbl9kZWxlZ2F0ZV9tZXRo
b2RzKHNlbGYpOgotICAgICAgICBxdWV1ZSA9IFRlc3RSZXZpZXdRdWV1ZSgpCi0gICAgICAgIHRv
b2wgPSBNb2NrQnVnemlsbGFUb29sKCkKLSAgICAgICAgcXVldWUuYmluZF90b190b29sKHRvb2wp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHF1ZXVlLmNvbGxlY3Rpb25fbmFtZSgpLCAidGVz
dC1yZXZpZXctcXVldWUiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhxdWV1ZS5mZXRjaF9w
b3RlbnRpYWxfcGF0Y2hfaWRzKCksIFsxMDNdKQotICAgICAgICBxdWV1ZS5zdGF0dXNfc2VydmVy
KCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHF1ZXVlLmlzX3Rlcm1pbmFsX3N0YXR1cygiUGFz
cyIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocXVldWUuaXNfdGVybWluYWxfc3RhdHVzKCJG
YWlsIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxdWV1ZS5pc190ZXJtaW5hbF9zdGF0dXMo
IkVycm9yOiBZb3VyIHBhdGNoIGV4cGxvZGVkIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
cXVldWUuaXNfdGVybWluYWxfc3RhdHVzKCJGb28iKSkKLQotCi1jbGFzcyBDb21taXRRdWV1ZVRl
c3QoUXVldWVzVGVzdCk6Ci0gICAgZGVmIHRlc3RfY29tbWl0X3F1ZXVlKHNlbGYpOgotICAgICAg
ICBleHBlY3RlZF9zdGRlcnIgPSB7Ci0gICAgICAgICAgICAiYmVnaW5fd29ya19xdWV1ZSIgOiAi
Q0FVVElPTjogY29tbWl0LXF1ZXVlIHdpbGwgZGlzY2FyZCBhbGwgbG9jYWwgY2hhbmdlcyBpbiBc
IiVzXCJcblJ1bm5pbmcgV2ViS2l0IGNvbW1pdC1xdWV1ZS5cbiIgJSBNb2NrU0NNLmZha2VfY2hl
Y2tvdXRfcm9vdCwKLSAgICAgICAgICAgICMgRklYTUU6IFRoZSBjb21taXQtcXVldWUgd2FybnMg
YWJvdXQgYmFkIGNvbW1pdHRlcnMgdHdpY2UuICBUaGlzIGlzIGR1ZSB0byB0aGUgZmFjdCB0aGF0
IHdlIGFjY2VzcyBBdHRhY2htZW50LnJldmlld2VyKCkgdHdpY2UgYW5kIGl0IGxvZ3MgZWFjaCB0
aW1lLgotICAgICAgICAgICAgIm5leHRfd29ya19pdGVtIiA6ICIiIldhcm5pbmcsIGF0dGFjaG1l
bnQgMTI4IG9uIGJ1ZyA0MiBoYXMgaW52YWxpZCBjb21taXR0ZXIgKG5vbi1jb21taXR0ZXJAZXhh
bXBsZS5jb20pCi1XYXJuaW5nLCBhdHRhY2htZW50IDEyOCBvbiBidWcgNDIgaGFzIGludmFsaWQg
Y29tbWl0dGVyIChub24tY29tbWl0dGVyQGV4YW1wbGUuY29tKQotMiBwYXRjaGVzIGluIGNvbW1p
dC1xdWV1ZSBbMTk3LCAxMDZdCi0iIiIsCi0gICAgICAgIH0KLSAgICAgICAgc2VsZi5hc3NlcnRf
cXVldWVfb3V0cHV0cyhDb21taXRRdWV1ZSgpLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3Rk
ZXJyKQotCi0gICAgZGVmIHRlc3Rfcm9sbG91dChzZWxmKToKLSAgICAgICAgdG9vbCA9IE1vY2tC
dWd6aWxsYVRvb2woKQotICAgICAgICB0b29sLmJ1aWxkYm90LmxpZ2h0X3RyZWVfb25fZmlyZSgp
Ci0gICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9IHsKLSAgICAgICAgICAgICJiZWdpbl93b3JrX3F1
ZXVlIiA6ICJDQVVUSU9OOiBjb21taXQtcXVldWUgd2lsbCBkaXNjYXJkIGFsbCBsb2NhbCBjaGFu
Z2VzIGluIFwiJXNcIlxuUnVubmluZyBXZWJLaXQgY29tbWl0LXF1ZXVlLlxuIiAlIE1vY2tTQ00u
ZmFrZV9jaGVja291dF9yb290LAotICAgICAgICAgICAgIyBGSVhNRTogVGhlIGNvbW1pdC1xdWV1
ZSB3YXJucyBhYm91dCBiYWQgY29tbWl0dGVycyB0d2ljZS4gIFRoaXMgaXMgZHVlIHRvIHRoZSBm
YWN0IHRoYXQgd2UgYWNjZXNzIEF0dGFjaG1lbnQucmV2aWV3ZXIoKSB0d2ljZSBhbmQgaXQgbG9n
cyBlYWNoIHRpbWUuCi0gICAgICAgICAgICAibmV4dF93b3JrX2l0ZW0iIDogIiIiV2FybmluZywg
YXR0YWNobWVudCAxMjggb24gYnVnIDQyIGhhcyBpbnZhbGlkIGNvbW1pdHRlciAobm9uLWNvbW1p
dHRlckBleGFtcGxlLmNvbSkKLVdhcm5pbmcsIGF0dGFjaG1lbnQgMTI4IG9uIGJ1ZyA0MiBoYXMg
aW52YWxpZCBjb21taXR0ZXIgKG5vbi1jb21taXR0ZXJAZXhhbXBsZS5jb20pCi0xIHBhdGNoIGlu
IGNvbW1pdC1xdWV1ZSBbMTA2XQotIiIiLAotICAgICAgICB9Ci0gICAgICAgIHNlbGYuYXNzZXJ0
X3F1ZXVlX291dHB1dHMoQ29tbWl0UXVldWUoKSwgdG9vbD10b29sLCBleHBlY3RlZF9zdGRlcnI9
ZXhwZWN0ZWRfc3RkZXJyKQotCi0KLWNsYXNzIFN0eWxlUXVldWVUZXN0KFF1ZXVlc1Rlc3QpOgot
ICAgIGRlZiB0ZXN0X3N0eWxlX3F1ZXVlKHNlbGYpOgotICAgICAgICBleHBlY3RlZF9zdGRlcnIg
PSB7Ci0gICAgICAgICAgICAiYmVnaW5fd29ya19xdWV1ZSIgOiAiQ0FVVElPTjogc3R5bGUtcXVl
dWUgd2lsbCBkaXNjYXJkIGFsbCBsb2NhbCBjaGFuZ2VzIGluIFwiJXNcIlxuUnVubmluZyBXZWJL
aXQgc3R5bGUtcXVldWUuXG4iICUgTW9ja1NDTS5mYWtlX2NoZWNrb3V0X3Jvb3QsCi0gICAgICAg
ICAgICAiaGFuZGxlX3VuZXhwZWN0ZWRfZXJyb3IiIDogIk1vY2sgZXJyb3IgbWVzc2FnZVxuIiwK
LSAgICAgICAgfQotICAgICAgICBzZWxmLmFzc2VydF9xdWV1ZV9vdXRwdXRzKFN0eWxlUXVldWUo
KSwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKSW5kZXg6IFdlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbWFuZHMvcXVldWVzdGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL3F1ZXVlc3Rlc3QucHkJKHJldmlzaW9u
IDU2MzY2KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9xdWV1ZXN0
ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMCArMCwwIEBACi0jIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
aW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gd2Via2l0cHkuY29tbWFuZHNfcmVmZXJlbmNlcyBpbXBv
cnQgTW9jawotZnJvbSB3ZWJraXRweS5idWd6aWxsYSBpbXBvcnQgQXR0YWNobWVudAotZnJvbSB3
ZWJraXRweS5tb2NrX2J1Z3ppbGxhdG9vbCBpbXBvcnQgTW9ja0J1Z3ppbGxhVG9vbAotZnJvbSB3
ZWJraXRweS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCi0KLQotY2xhc3MgTW9j
a1F1ZXVlRW5naW5lKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHF1ZXVl
KToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgcGFzcwotCi0K
LWNsYXNzIFF1ZXVlc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIG1vY2tfd29ya19pdGVt
ID0gQXR0YWNobWVudCh7Ci0gICAgICAgICJpZCI6IDEyMzQsCi0gICAgICAgICJidWdfaWQiOiAz
NDUsCi0gICAgICAgICJuYW1lIjogIlBhdGNoIiwKLSAgICAgICAgImF0dGFjaGVyX2VtYWlsIjog
ImFkYW1AZXhhbXBsZS5jb20iLAotICAgIH0sIE5vbmUpCi0KLSAgICBkZWYgYXNzZXJ0X3F1ZXVl
X291dHB1dHMoc2VsZiwgcXVldWUsIGFyZ3M9Tm9uZSwgd29ya19pdGVtPU5vbmUsIGV4cGVjdGVk
X3N0ZG91dD1Ob25lLCBleHBlY3RlZF9zdGRlcnI9Tm9uZSwgb3B0aW9ucz1Nb2NrKCksIHRvb2w9
TW9ja0J1Z3ppbGxhVG9vbCgpKToKLSAgICAgICAgaWYgbm90IGV4cGVjdGVkX3N0ZG91dDoKLSAg
ICAgICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9IHt9Ci0gICAgICAgIGlmIG5vdCBleHBlY3RlZF9z
dGRlcnI6Ci0gICAgICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSB7fQotICAgICAgICBpZiBub3Qg
YXJnczoKLSAgICAgICAgICAgIGFyZ3MgPSBbXQotICAgICAgICBpZiBub3Qgd29ya19pdGVtOgot
ICAgICAgICAgICAgd29ya19pdGVtID0gc2VsZi5tb2NrX3dvcmtfaXRlbQotICAgICAgICB0b29s
LnVzZXIucHJvbXB0ID0gbGFtYmRhIG1lc3NhZ2U6ICJ5ZXMiCi0KLSAgICAgICAgcXVldWUuZXhl
Y3V0ZShvcHRpb25zLCBhcmdzLCB0b29sLCBlbmdpbmU9TW9ja1F1ZXVlRW5naW5lKQotCi0gICAg
ICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLAotICAgICAgICAgICAgICAg
IHF1ZXVlLnF1ZXVlX2xvZ19wYXRoLAotICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N0ZG91dD1l
eHBlY3RlZF9zdGRvdXQuZ2V0KCJxdWV1ZV9sb2dfcGF0aCIsICIiKSwKLSAgICAgICAgICAgICAg
ICBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyLmdldCgicXVldWVfbG9nX3BhdGgiLCAi
IikpCi0gICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLAotICAgICAg
ICAgICAgICAgIHF1ZXVlLndvcmtfaXRlbV9sb2dfcGF0aCwKLSAgICAgICAgICAgICAgICBhcmdz
PVt3b3JrX2l0ZW1dLAotICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9z
dGRvdXQuZ2V0KCJ3b3JrX2l0ZW1fbG9nX3BhdGgiLCAiIiksCi0gICAgICAgICAgICAgICAgZXhw
ZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVyci5nZXQoIndvcmtfaXRlbV9sb2dfcGF0aCIsICIi
KSkKLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsCi0gICAgICAg
ICAgICAgICAgcXVldWUuYmVnaW5fd29ya19xdWV1ZSwKLSAgICAgICAgICAgICAgICBleHBlY3Rl
ZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0LmdldCgiYmVnaW5fd29ya19xdWV1ZSIsICIiKSwKLSAg
ICAgICAgICAgICAgICBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyLmdldCgiYmVnaW5f
d29ya19xdWV1ZSIsICIiKSkKLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRz
KHNlbGYsCi0gICAgICAgICAgICAgICAgcXVldWUuc2hvdWxkX2NvbnRpbnVlX3dvcmtfcXVldWUs
Ci0gICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dC5nZXQoInNo
b3VsZF9jb250aW51ZV93b3JrX3F1ZXVlIiwgIiIpLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRf
c3RkZXJyLmdldCgic2hvdWxkX2NvbnRpbnVlX3dvcmtfcXVldWUiLCAiIikpCi0gICAgICAgIE91
dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLAotICAgICAgICAgICAgICAgIHF1ZXVl
Lm5leHRfd29ya19pdGVtLAotICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N0ZG91dD1leHBlY3Rl
ZF9zdGRvdXQuZ2V0KCJuZXh0X3dvcmtfaXRlbSIsICIiKSwKLSAgICAgICAgICAgICAgICBleHBl
Y3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyLmdldCgibmV4dF93b3JrX2l0ZW0iLCAiIikpCi0g
ICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLAotICAgICAgICAgICAg
ICAgIHF1ZXVlLnNob3VsZF9wcm9jZWVkX3dpdGhfd29ya19pdGVtLAotICAgICAgICAgICAgICAg
IGFyZ3M9W3dvcmtfaXRlbV0sCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVj
dGVkX3N0ZG91dC5nZXQoInNob3VsZF9wcm9jZWVkX3dpdGhfd29ya19pdGVtIiwgIiIpLAotICAg
ICAgICAgICAgICAgIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIuZ2V0KCJzaG91bGRf
cHJvY2VlZF93aXRoX3dvcmtfaXRlbSIsICIiKSkKLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFz
c2VydF9vdXRwdXRzKHNlbGYsCi0gICAgICAgICAgICAgICAgcXVldWUucHJvY2Vzc193b3JrX2l0
ZW0sCi0gICAgICAgICAgICAgICAgYXJncz1bd29ya19pdGVtXSwKLSAgICAgICAgICAgICAgICBl
eHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0LmdldCgicHJvY2Vzc193b3JrX2l0ZW0iLCAi
IiksCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVyci5nZXQo
InByb2Nlc3Nfd29ya19pdGVtIiwgIiIpKQotICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0
X291dHB1dHMoc2VsZiwKLSAgICAgICAgICAgICAgICBxdWV1ZS5oYW5kbGVfdW5leHBlY3RlZF9l
cnJvciwKLSAgICAgICAgICAgICAgICBhcmdzPVt3b3JrX2l0ZW0sICJNb2NrIGVycm9yIG1lc3Nh
Z2UiXSwKLSAgICAgICAgICAgICAgICBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0Lmdl
dCgiaGFuZGxlX3VuZXhwZWN0ZWRfZXJyb3IiLCAiIiksCi0gICAgICAgICAgICAgICAgZXhwZWN0
ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVyci5nZXQoImhhbmRsZV91bmV4cGVjdGVkX2Vycm9yIiwg
IiIpKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9zaGVyaWZm
Ym90LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbWFu
ZHMvc2hlcmlmZmJvdC5weQkocmV2aXNpb24gNTYzNjYpCisrKyBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1hbmRzL3NoZXJpZmZib3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsODcg
KzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMgCi0jICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlz
dHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBvcwotCi1mcm9tIHdlYmtpdHB5
LmNvbW1hbmRzLnF1ZXVlcyBpbXBvcnQgQWJzdHJhY3RRdWV1ZQotZnJvbSB3ZWJraXRweS53ZWJr
aXRfbG9nZ2luZyBpbXBvcnQgbG9nCi1mcm9tIHdlYmtpdHB5LndlYmtpdHBvcnQgaW1wb3J0IFdl
YktpdFBvcnQKLQotCi1jbGFzcyBTaGVyaWZmQm90KEFic3RyYWN0UXVldWUpOgotICAgIG5hbWUg
PSAic2hlcmlmZi1ib3QiCi0KLSAgICAjIEFic3RyYWN0UXVldWUgbWV0aG9kcwotCi0gICAgZGVm
IGJlZ2luX3dvcmtfcXVldWUoc2VsZik6Ci0gICAgICAgIEFic3RyYWN0UXVldWUuYmVnaW5fd29y
a19xdWV1ZShzZWxmKQotICAgICAgICBzZWxmLnRvb2wuZW5zdXJlX2lyY19jb25uZWN0ZWQoKQot
Ci0gICAgZGVmIHdvcmtfaXRlbV9sb2dfcGF0aChzZWxmLCBmYWlsdXJlX2luZm8pOgotICAgICAg
ICByZXR1cm4gb3MucGF0aC5qb2luKCIlcy1sb2dzIiAlIHNlbGYubmFtZSwgIiVzLmxvZyIgJSBm
YWlsdXJlX2luZm9bInN2bl9yZXZpc2lvbiJdKQotCi0gICAgZGVmIG5leHRfd29ya19pdGVtKHNl
bGYpOgotICAgICAgICBmb3Igc3ZuX3JldmlzaW9uLCBidWlsZGVycyBpbiBzZWxmLnRvb2wuYnVp
bGRib3QucmV2aXNpb25zX2NhdXNpbmdfZmFpbHVyZXMoKS5pdGVtcygpOgotICAgICAgICAgICAg
aWYgc2VsZi50b29sLnN0YXR1c19zZXJ2ZXIuc3ZuX3JldmlzaW9uKHN2bl9yZXZpc2lvbik6Ci0g
ICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICAgICAgInN2bl9yZXZpc2lvbiI6IHN2bl9yZXZpc2lvbiwKLSAgICAgICAgICAgICAgICAiYnVp
bGRlcnMiOiBidWlsZGVycwotICAgICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9uZQotCi0g
ICAgZGVmIHNob3VsZF9wcm9jZWVkX3dpdGhfd29ya19pdGVtKHNlbGYsIGZhaWx1cmVfaW5mbyk6
Ci0gICAgICAgICMgQ3VycmVudGx5LCB3ZSBkb24ndCBoYXZlIGFueSByZWFzb25zIG5vdCB0byBw
cm9jZWVkIHdpdGggd29yayBpdGVtcy4KLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBw
cm9jZXNzX3dvcmtfaXRlbShzZWxmLCBmYWlsdXJlX2luZm8pOgotICAgICAgICBzdm5fcmV2aXNp
b24gPSBmYWlsdXJlX2luZm9bInN2bl9yZXZpc2lvbiJdCi0gICAgICAgIGJ1aWxkZXJzID0gZmFp
bHVyZV9pbmZvWyJidWlsZGVycyJdCi0KLSAgICAgICAgc2VsZi50b29sLmV4ZWN1dGl2ZS5ydW5f
YW5kX3Rocm93X2lmX2ZhaWwoV2ViS2l0UG9ydC51cGRhdGVfd2Via2l0X2NvbW1hbmQoKSwgcXVp
ZXQ9VHJ1ZSkKLSAgICAgICAgY29tbWl0X2luZm8gPSBzZWxmLnRvb2wuY2hlY2tvdXQoKS5jb21t
aXRfaW5mb19mb3JfcmV2aXNpb24oc3ZuX3JldmlzaW9uKQotICAgICAgICByZXNwb25zaWJsZV9w
YXJ0aWVzID0gWwotICAgICAgICAgICAgY29tbWl0X2luZm8uY29tbWl0dGVyKCksCi0gICAgICAg
ICAgICBjb21taXRfaW5mby5hdXRob3IoKSwKLSAgICAgICAgICAgIGNvbW1pdF9pbmZvLnJldmll
d2VyKCkKLSAgICAgICAgXQotICAgICAgICBpcmNfbmlja25hbWVzID0gc29ydGVkKHNldChbcGFy
dHkuaXJjX25pY2tuYW1lIGZvciBwYXJ0eSBpbiByZXNwb25zaWJsZV9wYXJ0aWVzIGlmIHBhcnR5
IGFuZCBwYXJ0eS5pcmNfbmlja25hbWVdKSkKLSAgICAgICAgaXJjX3ByZWZpeCA9ICI6ICIgaWYg
aXJjX25pY2tuYW1lcyBlbHNlICIiCi0gICAgICAgIGlyY19tZXNzYWdlID0gIiVzJXNyJXMgYXBw
ZWFycyB0byBoYXZlIGJyb2tlbiAlcyIgJSAoCi0gICAgICAgICAgICAiLCAiLmpvaW4oaXJjX25p
Y2tuYW1lcyksCi0gICAgICAgICAgICBpcmNfcHJlZml4LAotICAgICAgICAgICAgc3ZuX3Jldmlz
aW9uLAotICAgICAgICAgICAgIiwgIi5qb2luKFtidWlsZGVyLm5hbWUoKSBmb3IgYnVpbGRlciBp
biBidWlsZGVyc10pKQotCi0gICAgICAgIHNlbGYudG9vbC5pcmMoKS5wb3N0KGlyY19tZXNzYWdl
KQotCi0gICAgICAgIGZvciBidWlsZGVyIGluIGJ1aWxkZXJzOgotICAgICAgICAgICAgc2VsZi50
b29sLnN0YXR1c19zZXJ2ZXIudXBkYXRlX3N2bl9yZXZpc2lvbihzdm5fcmV2aXNpb24sIGJ1aWxk
ZXIubmFtZSgpKQotCi0gICAgZGVmIGhhbmRsZV91bmV4cGVjdGVkX2Vycm9yKHNlbGYsIGZhaWx1
cmVfaW5mbywgbWVzc2FnZSk6Ci0gICAgICAgIGxvZyhtZXNzYWdlKQpJbmRleDogV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9zaGVyaWZmYm90X3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvc2hlcmlmZmJv
dF91bml0dGVzdC5weQkocmV2aXNpb24gNTYzNjYpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1hbmRzL3NoZXJpZmZib3RfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAg
LTEsNDcgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwot
IyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBk
aXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBvcwotCi1mcm9tIHdlYmtpdHB5
LmNvbW1hbmRzLnF1ZXVlc3Rlc3QgaW1wb3J0IFF1ZXVlc1Rlc3QKLWZyb20gd2Via2l0cHkuY29t
bWFuZHMuc2hlcmlmZmJvdCBpbXBvcnQgU2hlcmlmZkJvdAotZnJvbSB3ZWJraXRweS5tb2NrX2J1
Z3ppbGxhdG9vbCBpbXBvcnQgTW9ja0J1Z3ppbGxhVG9vbCwgbW9ja19idWlsZGVyCi0KLWNsYXNz
IFNoZXJpZmZCb3RUZXN0KFF1ZXVlc1Rlc3QpOgotICAgIGRlZiB0ZXN0X3NoZXJpZmZfYm90KHNl
bGYpOgotICAgICAgICBtb2NrX3dvcmtfaXRlbSA9IHsKLSAgICAgICAgICAgICJzdm5fcmV2aXNp
b24iOiAyOTgzNywKLSAgICAgICAgICAgICJidWlsZGVycyI6IFttb2NrX2J1aWxkZXJdCi0gICAg
ICAgIH0KLSAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0gewotICAgICAgICAgICAgImJlZ2luX3dv
cmtfcXVldWUiOiAiQ0FVVElPTjogc2hlcmlmZi1ib3Qgd2lsbCBkaXNjYXJkIGFsbCBsb2NhbCBj
aGFuZ2VzIGluIFwiJXNcIlxuUnVubmluZyBXZWJLaXQgc2hlcmlmZi1ib3QuXG4iICUgb3MuZ2V0
Y3dkKCksCi0gICAgICAgICAgICAibmV4dF93b3JrX2l0ZW0iOiAiIiwKLSAgICAgICAgICAgICJw
cm9jZXNzX3dvcmtfaXRlbSI6ICJNT0NLOiBpcmMucG9zdDogYWJhcnRoLCBkYXJpbiwgZXNlaWRl
bDogcjI5ODM3IGFwcGVhcnMgdG8gaGF2ZSBicm9rZW4gTW9jayBidWlsZGVyIG5hbWUgKFRlc3Rz
KVxuIiwKLSAgICAgICAgICAgICJoYW5kbGVfdW5leHBlY3RlZF9lcnJvciI6ICJNb2NrIGVycm9y
IG1lc3NhZ2VcbiIKLSAgICAgICAgfQotICAgICAgICBzZWxmLmFzc2VydF9xdWV1ZV9vdXRwdXRz
KFNoZXJpZmZCb3QoKSwgd29ya19pdGVtPW1vY2tfd29ya19pdGVtLCBleHBlY3RlZF9zdGRlcnI9
ZXhwZWN0ZWRfc3RkZXJyKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
YW5kcy91cGxvYWQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tYW5kcy91cGxvYWQucHkJKHJldmlzaW9uIDU2MzY2KQorKysgV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tYW5kcy91cGxvYWQucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNDQ3
ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKGMpIDIwMDksIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0jIG1ldDoKLSMgCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0j
IAotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9y
dCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgU3RyaW5nSU8KLWltcG9ydCBzeXMKLQotZnJvbSBvcHRw
YXJzZSBpbXBvcnQgbWFrZV9vcHRpb24KLQotaW1wb3J0IHdlYmtpdHB5LnN0ZXBzIGFzIHN0ZXBz
Ci0KLWZyb20gd2Via2l0cHkuYnVnemlsbGEgaW1wb3J0IHBhcnNlX2J1Z19pZAotZnJvbSB3ZWJr
aXRweS5jb21tYW5kc19yZWZlcmVuY2VzIGltcG9ydCBNb2NrCi1mcm9tIHdlYmtpdHB5LmNvbW1h
bmRzLmFic3RyYWN0c2VxdWVuY2VkY29tbWFuZCBpbXBvcnQgQWJzdHJhY3RTZXF1ZW5jZWRDb21t
YW5kCi1mcm9tIHdlYmtpdHB5LmNvbW1lbnRzIGltcG9ydCBidWdfY29tbWVudF9mcm9tX3N2bl9y
ZXZpc2lvbgotZnJvbSB3ZWJraXRweS5jb21taXR0ZXJzIGltcG9ydCBDb21taXR0ZXJMaXN0Ci1m
cm9tIHdlYmtpdHB5LmdyYW1tYXIgaW1wb3J0IHBsdXJhbGl6ZSwgam9pbl93aXRoX3NlcGFyYXRv
cnMKLWZyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGVycm9yLCBsb2cKLWZyb20g
d2Via2l0cHkubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1h
bmQKLWZyb20gd2Via2l0cHkudXNlciBpbXBvcnQgVXNlcgotCi1jbGFzcyBDb21taXRNZXNzYWdl
Rm9yQ3VycmVudERpZmYoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQpOgotICAgIG5hbWUgPSAi
Y29tbWl0LW1lc3NhZ2UiCi0gICAgaGVscF90ZXh0ID0gIlByaW50IGEgY29tbWl0IG1lc3NhZ2Ug
c3VpdGFibGUgZm9yIHRoZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIgotCi0gICAgZGVmIGV4ZWN1dGUo
c2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIG9zLmNoZGlyKHRvb2wuc2NtKCku
Y2hlY2tvdXRfcm9vdCkKLSAgICAgICAgcHJpbnQgIiVzIiAlIHRvb2wuc2NtKCkuY29tbWl0X21l
c3NhZ2VfZm9yX3RoaXNfY29tbWl0KCkubWVzc2FnZSgpCi0KLWNsYXNzIENsZWFuUGVuZGluZ0Nv
bW1pdChBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZCk6Ci0gICAgbmFtZSA9ICJjbGVhbi1wZW5k
aW5nLWNvbW1pdCIKLSAgICBoZWxwX3RleHQgPSAiQ2xlYXIgcisgb24gb2Jzb2xldGUgcGF0Y2hl
cyBzbyB0aGV5IGRvIG5vdCBhcHBlYXIgaW4gdGhlIHBlbmRpbmctY29tbWl0IGxpc3QuIgotCi0g
ICAgIyBOT1RFOiBUaGlzIHdhcyBkZXNpZ25lZCB0byBiZSBnZW5lcmljLCBidXQgcmlnaHQgbm93
IHdlJ3JlIG9ubHkgcHJvY2Vzc2luZyBwYXRjaGVzIGZyb20gdGhlIHBlbmRpbmctY29tbWl0IGxp
c3QsIHNvIG9ubHkgcisgbWF0dGVycy4KLSAgICBkZWYgX2ZsYWdzX3RvX2NsZWFyX29uX3BhdGNo
KHNlbGYsIHBhdGNoKToKLSAgICAgICAgaWYgbm90IHBhdGNoLmlzX29ic29sZXRlKCk6Ci0gICAg
ICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICB3aGF0X3dhc19jbGVhcmVkID0gW10KLSAgICAg
ICAgaWYgcGF0Y2gucmV2aWV3KCkgPT0gIisiOgotICAgICAgICAgICAgaWYgcGF0Y2gucmV2aWV3
ZXIoKToKLSAgICAgICAgICAgICAgICB3aGF0X3dhc19jbGVhcmVkLmFwcGVuZCgiJXMncyByZXZp
ZXcrIiAlIHBhdGNoLnJldmlld2VyKCkuZnVsbF9uYW1lKQotICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICB3aGF0X3dhc19jbGVhcmVkLmFwcGVuZCgicmV2aWV3KyIpCi0gICAgICAg
IHJldHVybiBqb2luX3dpdGhfc2VwYXJhdG9ycyh3aGF0X3dhc19jbGVhcmVkKQotCi0gICAgZGVm
IGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIGNvbW1pdHRlcnMg
PSBDb21taXR0ZXJMaXN0KCkKLSAgICAgICAgZm9yIGJ1Z19pZCBpbiB0b29sLmJ1Z3MucXVlcmll
cy5mZXRjaF9idWdfaWRzX2Zyb21fcGVuZGluZ19jb21taXRfbGlzdCgpOgotICAgICAgICAgICAg
YnVnID0gc2VsZi50b29sLmJ1Z3MuZmV0Y2hfYnVnKGJ1Z19pZCkKLSAgICAgICAgICAgIHBhdGNo
ZXMgPSBidWcucGF0Y2hlcyhpbmNsdWRlX29ic29sZXRlPVRydWUpCi0gICAgICAgICAgICBmb3Ig
cGF0Y2ggaW4gcGF0Y2hlczoKLSAgICAgICAgICAgICAgICBmbGFnc190b19jbGVhciA9IHNlbGYu
X2ZsYWdzX3RvX2NsZWFyX29uX3BhdGNoKHBhdGNoKQotICAgICAgICAgICAgICAgIGlmIG5vdCBm
bGFnc190b19jbGVhcjoKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAg
ICAgICBtZXNzYWdlID0gIkNsZWFyZWQgJXMgZnJvbSBvYnNvbGV0ZSBhdHRhY2htZW50ICVzIHNv
IHRoYXQgdGhpcyBidWcgZG9lcyBub3QgYXBwZWFyIGluIGh0dHA6Ly93ZWJraXQub3JnL3BlbmRp
bmctY29tbWl0LiIgJSAoZmxhZ3NfdG9fY2xlYXIsIHBhdGNoLmlkKCkpCi0gICAgICAgICAgICAg
ICAgc2VsZi50b29sLmJ1Z3Mub2Jzb2xldGVfYXR0YWNobWVudChwYXRjaC5pZCgpLCBtZXNzYWdl
KQotCi0KLWNsYXNzIEFzc2lnblRvQ29tbWl0dGVyKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5k
KToKLSAgICBuYW1lID0gImFzc2lnbi10by1jb21taXR0ZXIiCi0gICAgaGVscF90ZXh0ID0gIkFz
c2lnbiBidWcgdG8gd2hvZXZlciBhdHRhY2hlZCB0aGUgbW9zdCByZWNlbnQgcisnZCBwYXRjaCIK
LQotICAgIGRlZiBfcGF0Y2hlc19oYXZlX2NvbW1pdGVycyhzZWxmLCByZXZpZXdlZF9wYXRjaGVz
KToKLSAgICAgICAgZm9yIHBhdGNoIGluIHJldmlld2VkX3BhdGNoZXM6Ci0gICAgICAgICAgICBp
ZiBub3QgcGF0Y2guY29tbWl0dGVyKCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0g
ICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgX2Fzc2lnbl9idWdfdG9fbGFzdF9wYXRjaF9h
dHRhY2hlcihzZWxmLCBidWdfaWQpOgotICAgICAgICBjb21taXR0ZXJzID0gQ29tbWl0dGVyTGlz
dCgpCi0gICAgICAgIGJ1ZyA9IHNlbGYudG9vbC5idWdzLmZldGNoX2J1ZyhidWdfaWQpCi0gICAg
ICAgIGFzc2lnbmVkX3RvX2VtYWlsID0gYnVnLmFzc2lnbmVkX3RvX2VtYWlsKCkKLSAgICAgICAg
aWYgYXNzaWduZWRfdG9fZW1haWwgIT0gc2VsZi50b29sLmJ1Z3MudW5hc3NpZ25lZF9lbWFpbDoK
LSAgICAgICAgICAgIGxvZygiQnVnICVzIGlzIGFscmVhZHkgYXNzaWduZWQgdG8gJXMgKCVzKS4i
ICUgKGJ1Z19pZCwgYXNzaWduZWRfdG9fZW1haWwsIGNvbW1pdHRlcnMuY29tbWl0dGVyX2J5X2Vt
YWlsKGFzc2lnbmVkX3RvX2VtYWlsKSkpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBy
ZXZpZXdlZF9wYXRjaGVzID0gYnVnLnJldmlld2VkX3BhdGNoZXMoKQotICAgICAgICBpZiBub3Qg
cmV2aWV3ZWRfcGF0Y2hlczoKLSAgICAgICAgICAgIGxvZygiQnVnICVzIGhhcyBubyBub24tb2Jz
b2xldGUgcGF0Y2hlcywgaWdub3JpbmcuIiAlIGJ1Z19pZCkKLSAgICAgICAgICAgIHJldHVybgot
Ci0gICAgICAgICMgV2Ugb25seSBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhpcyBidWcgaWYg
b25lIG9mIHRoZSByKydkIHBhdGNoZXMgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGNvbW1pdHRlciAo
Y3ErIHNldCkuCi0gICAgICAgIGlmIHNlbGYuX3BhdGNoZXNfaGF2ZV9jb21taXRlcnMocmV2aWV3
ZWRfcGF0Y2hlcyk6Ci0gICAgICAgICAgICBsb2coIkFsbCByZXZpZXdlZCBwYXRjaGVzIG9uIGJ1
ZyAlcyBhbHJlYWR5IGhhdmUgY29tbWl0LXF1ZXVlKywgaWdub3JpbmcuIiAlIGJ1Z19pZCkKLSAg
ICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGxhdGVzdF9wYXRjaCA9IHJldmlld2VkX3BhdGNo
ZXNbLTFdCi0gICAgICAgIGF0dGFjaGVyX2VtYWlsID0gbGF0ZXN0X3BhdGNoLmF0dGFjaGVyX2Vt
YWlsKCkKLSAgICAgICAgY29tbWl0dGVyID0gY29tbWl0dGVycy5jb21taXR0ZXJfYnlfZW1haWwo
YXR0YWNoZXJfZW1haWwpCi0gICAgICAgIGlmIG5vdCBjb21taXR0ZXI6Ci0gICAgICAgICAgICBs
b2coIkF0dGFjaGVyICVzIGlzIG5vdCBhIGNvbW1pdHRlci4gIEJ1ZyAlcyBsaWtlbHkgbmVlZHMg
Y29tbWl0LXF1ZXVlKy4iICUgKGF0dGFjaGVyX2VtYWlsLCBidWdfaWQpKQotICAgICAgICAgICAg
cmV0dXJuCi0KLSAgICAgICAgcmVhc3NpZ25fbWVzc2FnZSA9ICJBdHRhY2htZW50ICVzIHdhcyBw
b3N0ZWQgYnkgYSBjb21taXR0ZXIgYW5kIGhhcyByZXZpZXcrLCBhc3NpZ25pbmcgdG8gJXMgZm9y
IGNvbW1pdC4iICUgKGxhdGVzdF9wYXRjaC5pZCgpLCBjb21taXR0ZXIuZnVsbF9uYW1lKQotICAg
ICAgICBzZWxmLnRvb2wuYnVncy5yZWFzc2lnbl9idWcoYnVnX2lkLCBjb21taXR0ZXIuYnVnemls
bGFfZW1haWwoKSwgcmVhc3NpZ25fbWVzc2FnZSkKLQotICAgIGRlZiBleGVjdXRlKHNlbGYsIG9w
dGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBmb3IgYnVnX2lkIGluIHRvb2wuYnVncy5xdWVy
aWVzLmZldGNoX2J1Z19pZHNfZnJvbV9wZW5kaW5nX2NvbW1pdF9saXN0KCk6Ci0gICAgICAgICAg
ICBzZWxmLl9hc3NpZ25fYnVnX3RvX2xhc3RfcGF0Y2hfYXR0YWNoZXIoYnVnX2lkKQotCi0KLWNs
YXNzIE9ic29sZXRlQXR0YWNobWVudHMoQWJzdHJhY3RTZXF1ZW5jZWRDb21tYW5kKToKLSAgICBu
YW1lID0gIm9ic29sZXRlLWF0dGFjaG1lbnRzIgotICAgIGhlbHBfdGV4dCA9ICJNYXJrIGFsbCBh
dHRhY2htZW50cyBvbiBhIGJ1ZyBhcyBvYnNvbGV0ZSIKLSAgICBhcmd1bWVudF9uYW1lcyA9ICJC
VUdJRCIKLSAgICBzdGVwcyA9IFsKLSAgICAgICAgc3RlcHMuT2Jzb2xldGVQYXRjaGVzLAotICAg
IF0KLQotICAgIGRlZiBfcHJlcGFyZV9zdGF0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToK
LSAgICAgICAgcmV0dXJuIHsgImJ1Z19pZCIgOiBhcmdzWzBdIH0KLQotCi1jbGFzcyBBYnN0cmFj
dFBhdGNoVXBsb2FkaW5nQ29tbWFuZChBYnN0cmFjdFNlcXVlbmNlZENvbW1hbmQpOgotICAgIGRl
ZiBfYnVnX2lkKHNlbGYsIGFyZ3MsIHRvb2wsIHN0YXRlKToKLSAgICAgICAgIyBQZXJmZXIgYSBi
dWcgaWQgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IG92ZXIgYSBidWcgdXJsIGluIHRoZSBkaWZmIChp
LmUuIENoYW5nZUxvZ3MpLgotICAgICAgICBidWdfaWQgPSBhcmdzIGFuZCBhcmdzWzBdCi0gICAg
ICAgIGlmIG5vdCBidWdfaWQ6Ci0gICAgICAgICAgICBzdGF0ZVsiZGlmZiJdID0gdG9vbC5zY20o
KS5jcmVhdGVfcGF0Y2goKQotICAgICAgICAgICAgYnVnX2lkID0gcGFyc2VfYnVnX2lkKHN0YXRl
WyJkaWZmIl0pCi0gICAgICAgIHJldHVybiBidWdfaWQKLQotICAgIGRlZiBfcHJlcGFyZV9zdGF0
ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKLSAgICAgICAgc3RhdGUgPSB7fQotICAgICAg
ICBzdGF0ZVsiYnVnX2lkIl0gPSBzZWxmLl9idWdfaWQoYXJncywgdG9vbCwgc3RhdGUpCi0gICAg
ICAgIGlmIG5vdCBzdGF0ZVsiYnVnX2lkIl06Ci0gICAgICAgICAgICBlcnJvcigiTm8gYnVnIGlk
IHBhc3NlZCBhbmQgbm8gYnVnIHVybCBmb3VuZCBpbiBkaWZmLiIpCi0gICAgICAgIHJldHVybiBz
dGF0ZQotCi0KLWNsYXNzIFBvc3QoQWJzdHJhY3RQYXRjaFVwbG9hZGluZ0NvbW1hbmQpOgotICAg
IG5hbWUgPSAicG9zdCIKLSAgICBoZWxwX3RleHQgPSAiQXR0YWNoIHRoZSBjdXJyZW50IHdvcmtp
bmcgZGlyZWN0b3J5IGRpZmYgdG8gYSBidWcgYXMgYSBwYXRjaCBmaWxlIgotICAgIGFyZ3VtZW50
X25hbWVzID0gIltCVUdJRF0iCi0gICAgc2hvd19pbl9tYWluX2hlbHAgPSBUcnVlCi0gICAgc3Rl
cHMgPSBbCi0gICAgICAgIHN0ZXBzLkNoZWNrU3R5bGUsCi0gICAgICAgIHN0ZXBzLkNvbmZpcm1E
aWZmLAotICAgICAgICBzdGVwcy5PYnNvbGV0ZVBhdGNoZXMsCi0gICAgICAgIHN0ZXBzLlBvc3RE
aWZmLAotICAgIF0KLQotCi1jbGFzcyBMYW5kU2FmZWx5KEFic3RyYWN0UGF0Y2hVcGxvYWRpbmdD
b21tYW5kKToKLSAgICBuYW1lID0gImxhbmQtc2FmZWx5IgotICAgIGhlbHBfdGV4dCA9ICJMYW5k
IHRoZSBjdXJyZW50IGRpZmYgdmlhIHRoZSBjb21taXQtcXVldWUgKEV4cGVyaW1lbnRhbCkiCi0g
ICAgYXJndW1lbnRfbmFtZXMgPSAiW0JVR0lEXSIKLSAgICBzdGVwcyA9IFsKLSAgICAgICAgc3Rl
cHMuVXBkYXRlQ2hhbmdlTG9nc1dpdGhSZXZpZXdlciwKLSAgICAgICAgc3RlcHMuT2Jzb2xldGVQ
YXRjaGVzLAotICAgICAgICBzdGVwcy5Qb3N0RGlmZkZvckNvbW1pdCwKLSAgICBdCi0KLQotY2xh
c3MgUHJlcGFyZShBYnN0cmFjdFNlcXVlbmNlZENvbW1hbmQpOgotICAgIG5hbWUgPSAicHJlcGFy
ZSIKLSAgICBoZWxwX3RleHQgPSAiQ3JlYXRlcyBhIGJ1ZyAob3IgcHJvbXB0cyBmb3IgYW4gZXhp
c3RpbmcgYnVnKSBhbmQgcHJlcGFyZXMgdGhlIENoYW5nZUxvZ3MiCi0gICAgYXJndW1lbnRfbmFt
ZXMgPSAiW0JVR0lEXSIKLSAgICBzaG93X2luX21haW5faGVscCA9IFRydWUKLSAgICBzdGVwcyA9
IFsKLSAgICAgICAgc3RlcHMuUHJvbXB0Rm9yQnVnT3JUaXRsZSwKLSAgICAgICAgc3RlcHMuQ3Jl
YXRlQnVnLAotICAgICAgICBzdGVwcy5QcmVwYXJlQ2hhbmdlTG9nLAotICAgIF0KLQotICAgIGRl
ZiBfcHJlcGFyZV9zdGF0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKLSAgICAgICAgYnVn
X2lkID0gYXJncyBhbmQgYXJnc1swXQotICAgICAgICByZXR1cm4geyAiYnVnX2lkIiA6IGJ1Z19p
ZCB9Ci0KLQotY2xhc3MgVXBsb2FkKEFic3RyYWN0UGF0Y2hVcGxvYWRpbmdDb21tYW5kKToKLSAg
ICBuYW1lID0gInVwbG9hZCIKLSAgICBoZWxwX3RleHQgPSAiQXV0b21hdGVzIHRoZSBwcm9jZXNz
IG9mIHVwbG9hZGluZyBhIHBhdGNoIGZvciByZXZpZXciCi0gICAgYXJndW1lbnRfbmFtZXMgPSAi
W0JVR0lEXSIKLSAgICBzaG93X2luX21haW5faGVscCA9IFRydWUKLSAgICBzdGVwcyA9IFsKLSAg
ICAgICAgc3RlcHMuQ2hlY2tTdHlsZSwKLSAgICAgICAgc3RlcHMuUHJvbXB0Rm9yQnVnT3JUaXRs
ZSwKLSAgICAgICAgc3RlcHMuQ3JlYXRlQnVnLAotICAgICAgICBzdGVwcy5QcmVwYXJlQ2hhbmdl
TG9nLAotICAgICAgICBzdGVwcy5FZGl0Q2hhbmdlTG9nLAotICAgICAgICBzdGVwcy5Db25maXJt
RGlmZiwKLSAgICAgICAgc3RlcHMuT2Jzb2xldGVQYXRjaGVzLAotICAgICAgICBzdGVwcy5Qb3N0
RGlmZiwKLSAgICBdCi0gICAgbG9uZ19oZWxwID0gIiIidXBsb2FkIHVwbG9hZHMgdGhlIGN1cnJl
bnQgZGlmZiB0byBidWdzLndlYmtpdC5vcmcuCi0gICAgSWYgbm8gYnVnIGlkIGlzIHByb3ZpZGVk
LCB1cGxvYWQgd2lsbCBjcmVhdGUgYSBidWcuCi0gICAgSWYgdGhlIGN1cnJlbnQgZGlmZiBkb2Vz
IG5vdCBoYXZlIGEgQ2hhbmdlTG9nLCB1cGxvYWQKLSAgICB3aWxsIHByZXBhcmUgYSBDaGFuZ2VM
b2cuICBPbmNlIGEgcGF0Y2ggaXMgcmVhZCwgdXBsb2FkCi0gICAgd2lsbCBvcGVuIHRoZSBDaGFu
Z2VMb2dzIGZvciBlZGl0aW5nIHVzaW5nIHRoZSBjb21tYW5kIGluIHRoZQotICAgIEVESVRPUiBl
bnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgd2lsbCBkaXNwbGF5IHRoZSBkaWZmIHVzaW5nIHRoZQot
ICAgIGNvbW1hbmQgaW4gdGhlIFBBR0VSIGVudmlyb25tZW50IHZhcmlhYmxlLiIiIgotCi0gICAg
ZGVmIF9wcmVwYXJlX3N0YXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBz
dGF0ZSA9IHt9Ci0gICAgICAgIHN0YXRlWyJidWdfaWQiXSA9IHNlbGYuX2J1Z19pZChhcmdzLCB0
b29sLCBzdGF0ZSkKLSAgICAgICAgcmV0dXJuIHN0YXRlCi0KLQotY2xhc3MgRWRpdENoYW5nZUxv
Z3MoQWJzdHJhY3RTZXF1ZW5jZWRDb21tYW5kKToKLSAgICBuYW1lID0gImVkaXQtY2hhbmdlbG9n
cyIKLSAgICBoZWxwX3RleHQgPSAiT3BlbnMgbW9kaWZpZWQgQ2hhbmdlTG9ncyBpbiAkRURJVE9S
IgotICAgIHNob3dfaW5fbWFpbl9oZWxwID0gVHJ1ZQotICAgIHN0ZXBzID0gWwotICAgICAgICBz
dGVwcy5FZGl0Q2hhbmdlTG9nLAotICAgIF0KLQotCi1jbGFzcyBQb3N0Q29tbWl0cyhBYnN0cmFj
dERlY2xhcmF0aXZlQ29tbWFuZCk6Ci0gICAgbmFtZSA9ICJwb3N0LWNvbW1pdHMiCi0gICAgaGVs
cF90ZXh0ID0gIkF0dGFjaCBhIHJhbmdlIG9mIGxvY2FsIGNvbW1pdHMgdG8gYnVncyBhcyBwYXRj
aCBmaWxlcyIKLSAgICBhcmd1bWVudF9uYW1lcyA9ICJDT01NSVRJU0giCi0KLSAgICBkZWYgX19p
bml0X18oc2VsZik6Ci0gICAgICAgIG9wdGlvbnMgPSBbCi0gICAgICAgICAgICBtYWtlX29wdGlv
bigiLWIiLCAiLS1idWctaWQiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0ic3RyaW5nIiwgZGVzdD0i
YnVnX2lkIiwgaGVscD0iU3BlY2lmeSBidWcgaWQgaWYgbm8gVVJMIGlzIHByb3ZpZGVkIGluIHRo
ZSBjb21taXQgbG9nLiIpLAotICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0tYWRkLWxvZy1hcy1j
b21tZW50IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iYWRkX2xvZ19hc19jb21tZW50Iiwg
ZGVmYXVsdD1GYWxzZSwgaGVscD0iQWRkIGNvbW1pdCBsb2cgbWVzc2FnZSBhcyBhIGNvbW1lbnQg
d2hlbiB1cGxvYWRpbmcgdGhlIHBhdGNoLiIpLAotICAgICAgICAgICAgbWFrZV9vcHRpb24oIi1t
IiwgIi0tZGVzY3JpcHRpb24iLCBhY3Rpb249InN0b3JlIiwgdHlwZT0ic3RyaW5nIiwgZGVzdD0i
ZGVzY3JpcHRpb24iLCBoZWxwPSJEZXNjcmlwdGlvbiBzdHJpbmcgZm9yIHRoZSBhdHRhY2htZW50
IChkZWZhdWx0OiBkZXNjcmlwdGlvbiBmcm9tIGNvbW1pdCBtZXNzYWdlKSIpLAotICAgICAgICAg
ICAgc3RlcHMuT3B0aW9ucy5vYnNvbGV0ZV9wYXRjaGVzLAotICAgICAgICAgICAgc3RlcHMuT3B0
aW9ucy5yZXZpZXcsCi0gICAgICAgICAgICBzdGVwcy5PcHRpb25zLnJlcXVlc3RfY29tbWl0LAot
ICAgICAgICBdCi0gICAgICAgIEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kLl9faW5pdF9fKHNl
bGYsIG9wdGlvbnM9b3B0aW9ucywgcmVxdWlyZXNfbG9jYWxfY29tbWl0cz1UcnVlKQotCi0gICAg
ZGVmIF9jb21tZW50X3RleHRfZm9yX2NvbW1pdChzZWxmLCBvcHRpb25zLCBjb21taXRfbWVzc2Fn
ZSwgdG9vbCwgY29tbWl0X2lkKToKLSAgICAgICAgY29tbWVudF90ZXh0ID0gTm9uZQotICAgICAg
ICBpZiAob3B0aW9ucy5hZGRfbG9nX2FzX2NvbW1lbnQpOgotICAgICAgICAgICAgY29tbWVudF90
ZXh0ID0gY29tbWl0X21lc3NhZ2UuYm9keShsc3RyaXA9VHJ1ZSkKLSAgICAgICAgICAgIGNvbW1l
bnRfdGV4dCArPSAiLS0tXG4iCi0gICAgICAgICAgICBjb21tZW50X3RleHQgKz0gdG9vbC5zY20o
KS5maWxlc19jaGFuZ2VkX3N1bW1hcnlfZm9yX2NvbW1pdChjb21taXRfaWQpCi0gICAgICAgIHJl
dHVybiBjb21tZW50X3RleHQKLQotICAgIGRlZiBfZGlmZl9maWxlX2Zvcl9jb21taXQoc2VsZiwg
dG9vbCwgY29tbWl0X2lkKToKLSAgICAgICAgZGlmZiA9IHRvb2wuc2NtKCkuY3JlYXRlX3BhdGNo
X2Zyb21fbG9jYWxfY29tbWl0KGNvbW1pdF9pZCkKLSAgICAgICAgcmV0dXJuIFN0cmluZ0lPLlN0
cmluZ0lPKGRpZmYpICMgYWRkX3BhdGNoX3RvX2J1ZyBleHBlY3RzIGEgZmlsZS1saWtlIG9iamVj
dAotCi0gICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAg
IGNvbW1pdF9pZHMgPSB0b29sLnNjbSgpLmNvbW1pdF9pZHNfZnJvbV9jb21taXRpc2hfYXJndW1l
bnRzKGFyZ3MpCi0gICAgICAgIGlmIGxlbihjb21taXRfaWRzKSA+IDEwOiAjIFdlIGNvdWxkIGxv
d2VyIHRoaXMgbGltaXQsIDEwIGlzIHRvbyBtYW55IGZvciBvbmUgYnVnIGFzLWlzLgotICAgICAg
ICAgICAgZXJyb3IoIndlYmtpdC1wYXRjaCBkb2VzIG5vdCBzdXBwb3J0IGF0dGFjaGluZyAlcyBh
dCBvbmNlLiAgQXJlIHlvdSBzdXJlIHlvdSBwYXNzZWQgdGhlIHJpZ2h0IGNvbW1pdCByYW5nZT8i
ICUgKHBsdXJhbGl6ZSgicGF0Y2giLCBsZW4oY29tbWl0X2lkcykpKSkKLQotICAgICAgICBoYXZl
X29ic29sZXRlZF9wYXRjaGVzID0gc2V0KCkKLSAgICAgICAgZm9yIGNvbW1pdF9pZCBpbiBjb21t
aXRfaWRzOgotICAgICAgICAgICAgY29tbWl0X21lc3NhZ2UgPSB0b29sLnNjbSgpLmNvbW1pdF9t
ZXNzYWdlX2Zvcl9sb2NhbF9jb21taXQoY29tbWl0X2lkKQotCi0gICAgICAgICAgICAjIFByZWZl
ciAtLWJ1Zy1pZD0sIHRoZW4gYSBidWcgdXJsIGluIHRoZSBjb21taXQgbWVzc2FnZSwgdGhlbiBh
IGJ1ZyB1cmwgaW4gdGhlIGVudGlyZSBjb21taXQgZGlmZiAoaS5lLiBDaGFuZ2VMb2dzKS4KLSAg
ICAgICAgICAgIGJ1Z19pZCA9IG9wdGlvbnMuYnVnX2lkIG9yIHBhcnNlX2J1Z19pZChjb21taXRf
bWVzc2FnZS5tZXNzYWdlKCkpIG9yIHBhcnNlX2J1Z19pZCh0b29sLnNjbSgpLmNyZWF0ZV9wYXRj
aF9mcm9tX2xvY2FsX2NvbW1pdChjb21taXRfaWQpKQotICAgICAgICAgICAgaWYgbm90IGJ1Z19p
ZDoKLSAgICAgICAgICAgICAgICBsb2coIlNraXBwaW5nICVzOiBObyBidWcgaWQgZm91bmQgaW4g
Y29tbWl0IG9yIHNwZWNpZmllZCB3aXRoIC0tYnVnLWlkLiIgJSBjb21taXRfaWQpCi0gICAgICAg
ICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgaWYgb3B0aW9ucy5vYnNvbGV0ZV9wYXRj
aGVzIGFuZCBidWdfaWQgbm90IGluIGhhdmVfb2Jzb2xldGVkX3BhdGNoZXM6Ci0gICAgICAgICAg
ICAgICAgc3RhdGUgPSB7ICJidWdfaWQiOiBidWdfaWQgfQotICAgICAgICAgICAgICAgIHN0ZXBz
Lk9ic29sZXRlUGF0Y2hlcyh0b29sLCBvcHRpb25zKS5ydW4oc3RhdGUpCi0gICAgICAgICAgICAg
ICAgaGF2ZV9vYnNvbGV0ZWRfcGF0Y2hlcy5hZGQoYnVnX2lkKQotCi0gICAgICAgICAgICBkaWZm
X2ZpbGUgPSBzZWxmLl9kaWZmX2ZpbGVfZm9yX2NvbW1pdCh0b29sLCBjb21taXRfaWQpCi0gICAg
ICAgICAgICBkZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb24gb3IgY29tbWl0X21lc3Nh
Z2UuZGVzY3JpcHRpb24obHN0cmlwPVRydWUsIHN0cmlwX3VybD1UcnVlKQotICAgICAgICAgICAg
Y29tbWVudF90ZXh0ID0gc2VsZi5fY29tbWVudF90ZXh0X2Zvcl9jb21taXQob3B0aW9ucywgY29t
bWl0X21lc3NhZ2UsIHRvb2wsIGNvbW1pdF9pZCkKLSAgICAgICAgICAgIHRvb2wuYnVncy5hZGRf
cGF0Y2hfdG9fYnVnKGJ1Z19pZCwgZGlmZl9maWxlLCBkZXNjcmlwdGlvbiwgY29tbWVudF90ZXh0
LCBtYXJrX2Zvcl9yZXZpZXc9b3B0aW9ucy5yZXZpZXcsIG1hcmtfZm9yX2NvbW1pdF9xdWV1ZT1v
cHRpb25zLnJlcXVlc3RfY29tbWl0KQotCi0KLWNsYXNzIE1hcmtCdWdGaXhlZChBYnN0cmFjdERl
Y2xhcmF0aXZlQ29tbWFuZCk6Ci0gICAgbmFtZSA9ICJtYXJrLWJ1Zy1maXhlZCIKLSAgICBoZWxw
X3RleHQgPSAiTWFyayB0aGUgc3BlY2lmaWVkIGJ1ZyBhcyBmaXhlZCIKLSAgICBhcmd1bWVudF9u
YW1lcyA9ICJbU1ZOX1JFVklTSU9OXSIKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAg
IG9wdGlvbnMgPSBbCi0gICAgICAgICAgICBtYWtlX29wdGlvbigiLS1idWctaWQiLCBhY3Rpb249
InN0b3JlIiwgdHlwZT0ic3RyaW5nIiwgZGVzdD0iYnVnX2lkIiwgaGVscD0iU3BlY2lmeSBidWcg
aWQgaWYgbm8gVVJMIGlzIHByb3ZpZGVkIGluIHRoZSBjb21taXQgbG9nLiIpLAotICAgICAgICAg
ICAgbWFrZV9vcHRpb24oIi0tY29tbWVudCIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPSJzdHJpbmci
LCBkZXN0PSJjb21tZW50IiwgaGVscD0iVGV4dCB0byBpbmNsdWRlIGluIGJ1ZyBjb21tZW50LiIp
LAotICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0tb3BlbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIs
IGRlZmF1bHQ9RmFsc2UsIGRlc3Q9Im9wZW5fYnVnIiwgaGVscD0iT3BlbiBidWcgaW4gZGVmYXVs
dCB3ZWIgYnJvd3NlciAoTWFjIG9ubHkpLiIpLAotICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0t
dXBkYXRlLW9ubHkiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLCBkZXN0PSJ1
cGRhdGVfb25seSIsIGhlbHA9IkFkZCBjb21tZW50IHRvIHRoZSBidWcsIGJ1dCBkbyBub3QgY2xv
c2UgaXQuIiksCi0gICAgICAgIF0KLSAgICAgICAgQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQu
X19pbml0X18oc2VsZiwgb3B0aW9ucz1vcHRpb25zKQotCi0gICAgZGVmIF9mZXRjaF9jb21taXRf
bG9nKHNlbGYsIHRvb2wsIHN2bl9yZXZpc2lvbik6Ci0gICAgICAgIGlmIG5vdCBzdm5fcmV2aXNp
b246Ci0gICAgICAgICAgICByZXR1cm4gdG9vbC5zY20oKS5sYXN0X3N2bl9jb21taXRfbG9nKCkK
LSAgICAgICAgcmV0dXJuIHRvb2wuc2NtKCkuc3ZuX2NvbW1pdF9sb2coc3ZuX3JldmlzaW9uKQot
Ci0gICAgZGVmIF9kZXRlcm1pbmVfYnVnX2lkX2FuZF9zdm5fcmV2aXNpb24oc2VsZiwgdG9vbCwg
YnVnX2lkLCBzdm5fcmV2aXNpb24pOgotICAgICAgICBjb21taXRfbG9nID0gc2VsZi5fZmV0Y2hf
Y29tbWl0X2xvZyh0b29sLCBzdm5fcmV2aXNpb24pCi0KLSAgICAgICAgaWYgbm90IGJ1Z19pZDoK
LSAgICAgICAgICAgIGJ1Z19pZCA9IHBhcnNlX2J1Z19pZChjb21taXRfbG9nKQotCi0gICAgICAg
IGlmIG5vdCBzdm5fcmV2aXNpb246Ci0gICAgICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaCgiXnIo
P1A8c3ZuX3JldmlzaW9uPlxkKykgXHwiLCBjb21taXRfbG9nLCByZS5NVUxUSUxJTkUpCi0gICAg
ICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgICAgICBzdm5fcmV2aXNpb24gPSBtYXRjaC5n
cm91cCgnc3ZuX3JldmlzaW9uJykKLQotICAgICAgICBpZiBub3QgYnVnX2lkIG9yIG5vdCBzdm5f
cmV2aXNpb246Ci0gICAgICAgICAgICBub3RfZm91bmQgPSBbXQotICAgICAgICAgICAgaWYgbm90
IGJ1Z19pZDoKLSAgICAgICAgICAgICAgICBub3RfZm91bmQuYXBwZW5kKCJidWcgaWQiKQotICAg
ICAgICAgICAgaWYgbm90IHN2bl9yZXZpc2lvbjoKLSAgICAgICAgICAgICAgICBub3RfZm91bmQu
YXBwZW5kKCJzdm4gcmV2aXNpb24iKQotICAgICAgICAgICAgZXJyb3IoIkNvdWxkIG5vdCBmaW5k
ICVzIG9uIGNvbW1hbmQtbGluZSBvciBpbiAlcy4iCi0gICAgICAgICAgICAgICAgICAlICgiIG9y
ICIuam9pbihub3RfZm91bmQpLCAiciVzIiAlIHN2bl9yZXZpc2lvbiBpZiBzdm5fcmV2aXNpb24g
ZWxzZSAibGFzdCBjb21taXQiKSkKLQotICAgICAgICByZXR1cm4gKGJ1Z19pZCwgc3ZuX3Jldmlz
aW9uKQotCi0gICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAg
ICAgIGJ1Z19pZCA9IG9wdGlvbnMuYnVnX2lkCi0KLSAgICAgICAgc3ZuX3JldmlzaW9uID0gYXJn
cyBhbmQgYXJnc1swXQotICAgICAgICBpZiBzdm5fcmV2aXNpb246Ci0gICAgICAgICAgICBpZiBy
ZS5tYXRjaCgiXnJbMC05XSskIiwgc3ZuX3JldmlzaW9uLCByZS5JR05PUkVDQVNFKToKLSAgICAg
ICAgICAgICAgICBzdm5fcmV2aXNpb24gPSBzdm5fcmV2aXNpb25bMTpdCi0gICAgICAgICAgICBp
ZiBub3QgcmUubWF0Y2goIl5bMC05XSskIiwgc3ZuX3JldmlzaW9uKToKLSAgICAgICAgICAgICAg
ICBlcnJvcigiSW52YWxpZCBzdm4gcmV2aXNpb246ICclcyciICUgc3ZuX3JldmlzaW9uKQotCi0g
ICAgICAgIG5lZWRzX3Byb21wdCA9IEZhbHNlCi0gICAgICAgIGlmIG5vdCBidWdfaWQgb3Igbm90
IHN2bl9yZXZpc2lvbjoKLSAgICAgICAgICAgIG5lZWRzX3Byb21wdCA9IFRydWUKLSAgICAgICAg
ICAgIChidWdfaWQsIHN2bl9yZXZpc2lvbikgPSBzZWxmLl9kZXRlcm1pbmVfYnVnX2lkX2FuZF9z
dm5fcmV2aXNpb24odG9vbCwgYnVnX2lkLCBzdm5fcmV2aXNpb24pCi0KLSAgICAgICAgbG9nKCJC
dWc6IDwlcz4gJXMiICUgKHRvb2wuYnVncy5idWdfdXJsX2Zvcl9idWdfaWQoYnVnX2lkKSwgdG9v
bC5idWdzLmZldGNoX2J1Z19kaWN0aW9uYXJ5KGJ1Z19pZClbInRpdGxlIl0pKQotICAgICAgICBs
b2coIlJldmlzaW9uOiAlcyIgJSBzdm5fcmV2aXNpb24pCi0KLSAgICAgICAgaWYgb3B0aW9ucy5v
cGVuX2J1ZzoKLSAgICAgICAgICAgIHRvb2wudXNlci5vcGVuX3VybCh0b29sLmJ1Z3MuYnVnX3Vy
bF9mb3JfYnVnX2lkKGJ1Z19pZCkpCi0KLSAgICAgICAgaWYgbmVlZHNfcHJvbXB0OgotICAgICAg
ICAgICAgaWYgbm90IHRvb2wudXNlci5jb25maXJtKCJJcyB0aGlzIGNvcnJlY3Q/Iik6Ci0gICAg
ICAgICAgICAgICAgZXhpdCgxKQotCi0gICAgICAgIGJ1Z19jb21tZW50ID0gYnVnX2NvbW1lbnRf
ZnJvbV9zdm5fcmV2aXNpb24oc3ZuX3JldmlzaW9uKQotICAgICAgICBpZiBvcHRpb25zLmNvbW1l
bnQ6Ci0gICAgICAgICAgICBidWdfY29tbWVudCA9ICIlc1xuXG4lcyIgJSAob3B0aW9ucy5jb21t
ZW50LCBidWdfY29tbWVudCkKLQotICAgICAgICBpZiBvcHRpb25zLnVwZGF0ZV9vbmx5OgotICAg
ICAgICAgICAgbG9nKCJBZGRpbmcgY29tbWVudCB0byBCdWcgJXMuIiAlIGJ1Z19pZCkKLSAgICAg
ICAgICAgIHRvb2wuYnVncy5wb3N0X2NvbW1lbnRfdG9fYnVnKGJ1Z19pZCwgYnVnX2NvbW1lbnQp
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsb2coIkFkZGluZyBjb21tZW50IHRvIEJ1ZyAl
cyBhbmQgbWFya2luZyBhcyBSZXNvbHZlZC9GaXhlZC4iICUgYnVnX2lkKQotICAgICAgICAgICAg
dG9vbC5idWdzLmNsb3NlX2J1Z19hc19maXhlZChidWdfaWQsIGJ1Z19jb21tZW50KQotCi0KLSMg
RklYTUU6IFJlcXVpcmVzIHVuaXQgdGVzdC4gIEJsb2NraW5nIGlzc3VlOiB0b28gY29tcGxleCBm
b3Igbm93LgotY2xhc3MgQ3JlYXRlQnVnKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKLSAg
ICBuYW1lID0gImNyZWF0ZS1idWciCi0gICAgaGVscF90ZXh0ID0gIkNyZWF0ZSBhIGJ1ZyBmcm9t
IGxvY2FsIGNoYW5nZXMgb3IgbG9jYWwgY29tbWl0cyIKLSAgICBhcmd1bWVudF9uYW1lcyA9ICJb
Q09NTUlUSVNIXSIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgb3B0aW9ucyA9
IFsKLSAgICAgICAgICAgIHN0ZXBzLk9wdGlvbnMuY2MsCi0gICAgICAgICAgICBzdGVwcy5PcHRp
b25zLmNvbXBvbmVudCwKLSAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5vLXByb21wdCIsIGFj
dGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJwcm9tcHQiLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRv
IG5vdCBwcm9tcHQgZm9yIGJ1ZyB0aXRsZSBhbmQgY29tbWVudDsgdXNlIGNvbW1pdCBsb2cgaW5z
dGVhZC4iKSwKLSAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5vLXJldmlldyIsIGFjdGlvbj0i
c3RvcmVfZmFsc2UiLCBkZXN0PSJyZXZpZXciLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRvIG5vdCBt
YXJrIHRoZSBwYXRjaCBmb3IgcmV2aWV3LiIpLAotICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0t
cmVxdWVzdC1jb21taXQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJyZXF1ZXN0X2NvbW1p
dCIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9Ik1hcmsgdGhlIHBhdGNoIGFzIG5lZWRpbmcgYXV0by1j
b21taXQgYWZ0ZXIgcmV2aWV3LiIpLAotICAgICAgICBdCi0gICAgICAgIEFic3RyYWN0RGVjbGFy
YXRpdmVDb21tYW5kLl9faW5pdF9fKHNlbGYsIG9wdGlvbnM9b3B0aW9ucykKLQotICAgIGRlZiBj
cmVhdGVfYnVnX2Zyb21fY29tbWl0KHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAg
ICBjb21taXRfaWRzID0gdG9vbC5zY20oKS5jb21taXRfaWRzX2Zyb21fY29tbWl0aXNoX2FyZ3Vt
ZW50cyhhcmdzKQotICAgICAgICBpZiBsZW4oY29tbWl0X2lkcykgPiAzOgotICAgICAgICAgICAg
ZXJyb3IoIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjcmVhdGUgb25lIGJ1ZyB3aXRoICVzIHBh
dGNoZXM/IiAlIGxlbihjb21taXRfaWRzKSkKLQotICAgICAgICBjb21taXRfaWQgPSBjb21taXRf
aWRzWzBdCi0KLSAgICAgICAgYnVnX3RpdGxlID0gIiIKLSAgICAgICAgY29tbWVudF90ZXh0ID0g
IiIKLSAgICAgICAgaWYgb3B0aW9ucy5wcm9tcHQ6Ci0gICAgICAgICAgICAoYnVnX3RpdGxlLCBj
b21tZW50X3RleHQpID0gc2VsZi5wcm9tcHRfZm9yX2J1Z190aXRsZV9hbmRfY29tbWVudCgpCi0g
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjb21taXRfbWVzc2FnZSA9IHRvb2wuc2NtKCkuY29t
bWl0X21lc3NhZ2VfZm9yX2xvY2FsX2NvbW1pdChjb21taXRfaWQpCi0gICAgICAgICAgICBidWdf
dGl0bGUgPSBjb21taXRfbWVzc2FnZS5kZXNjcmlwdGlvbihsc3RyaXA9VHJ1ZSwgc3RyaXBfdXJs
PVRydWUpCi0gICAgICAgICAgICBjb21tZW50X3RleHQgPSBjb21taXRfbWVzc2FnZS5ib2R5KGxz
dHJpcD1UcnVlKQotICAgICAgICAgICAgY29tbWVudF90ZXh0ICs9ICItLS1cbiIKLSAgICAgICAg
ICAgIGNvbW1lbnRfdGV4dCArPSB0b29sLnNjbSgpLmZpbGVzX2NoYW5nZWRfc3VtbWFyeV9mb3Jf
Y29tbWl0KGNvbW1pdF9pZCkKLQotICAgICAgICBkaWZmID0gdG9vbC5zY20oKS5jcmVhdGVfcGF0
Y2hfZnJvbV9sb2NhbF9jb21taXQoY29tbWl0X2lkKQotICAgICAgICBkaWZmX2ZpbGUgPSBTdHJp
bmdJTy5TdHJpbmdJTyhkaWZmKSAjIGNyZWF0ZV9idWcgZXhwZWN0cyBhIGZpbGUtbGlrZSBvYmpl
Y3QKLSAgICAgICAgYnVnX2lkID0gdG9vbC5idWdzLmNyZWF0ZV9idWcoYnVnX3RpdGxlLCBjb21t
ZW50X3RleHQsIG9wdGlvbnMuY29tcG9uZW50LCBkaWZmX2ZpbGUsICJQYXRjaCIsIGNjPW9wdGlv
bnMuY2MsIG1hcmtfZm9yX3Jldmlldz1vcHRpb25zLnJldmlldywgbWFya19mb3JfY29tbWl0X3F1
ZXVlPW9wdGlvbnMucmVxdWVzdF9jb21taXQpCi0KLSAgICAgICAgaWYgYnVnX2lkIGFuZCBsZW4o
Y29tbWl0X2lkcykgPiAxOgotICAgICAgICAgICAgb3B0aW9ucy5idWdfaWQgPSBidWdfaWQKLSAg
ICAgICAgICAgIG9wdGlvbnMub2Jzb2xldGVfcGF0Y2hlcyA9IEZhbHNlCi0gICAgICAgICAgICAj
IEZJWE1FOiBXZSBzaG91bGQgcGFzcyB0aHJvdWdoIC0tbm8tY29tbWVudCBzd2l0Y2ggYXMgd2Vs
bC4KLSAgICAgICAgICAgIFBvc3RDb21taXRzLmV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgY29tbWl0
X2lkc1sxOl0sIHRvb2wpCi0KLSAgICBkZWYgY3JlYXRlX2J1Z19mcm9tX3BhdGNoKHNlbGYsIG9w
dGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBidWdfdGl0bGUgPSAiIgotICAgICAgICBjb21t
ZW50X3RleHQgPSAiIgotICAgICAgICBpZiBvcHRpb25zLnByb21wdDoKLSAgICAgICAgICAgIChi
dWdfdGl0bGUsIGNvbW1lbnRfdGV4dCkgPSBzZWxmLnByb21wdF9mb3JfYnVnX3RpdGxlX2FuZF9j
b21tZW50KCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNvbW1pdF9tZXNzYWdlID0gdG9v
bC5zY20oKS5jb21taXRfbWVzc2FnZV9mb3JfdGhpc19jb21taXQoKQotICAgICAgICAgICAgYnVn
X3RpdGxlID0gY29tbWl0X21lc3NhZ2UuZGVzY3JpcHRpb24obHN0cmlwPVRydWUsIHN0cmlwX3Vy
bD1UcnVlKQotICAgICAgICAgICAgY29tbWVudF90ZXh0ID0gY29tbWl0X21lc3NhZ2UuYm9keShs
c3RyaXA9VHJ1ZSkKLQotICAgICAgICBkaWZmID0gdG9vbC5zY20oKS5jcmVhdGVfcGF0Y2goKQot
ICAgICAgICBkaWZmX2ZpbGUgPSBTdHJpbmdJTy5TdHJpbmdJTyhkaWZmKSAjIGNyZWF0ZV9idWcg
ZXhwZWN0cyBhIGZpbGUtbGlrZSBvYmplY3QKLSAgICAgICAgYnVnX2lkID0gdG9vbC5idWdzLmNy
ZWF0ZV9idWcoYnVnX3RpdGxlLCBjb21tZW50X3RleHQsIG9wdGlvbnMuY29tcG9uZW50LCBkaWZm
X2ZpbGUsICJQYXRjaCIsIGNjPW9wdGlvbnMuY2MsIG1hcmtfZm9yX3Jldmlldz1vcHRpb25zLnJl
dmlldywgbWFya19mb3JfY29tbWl0X3F1ZXVlPW9wdGlvbnMucmVxdWVzdF9jb21taXQpCi0KLSAg
ICBkZWYgcHJvbXB0X2Zvcl9idWdfdGl0bGVfYW5kX2NvbW1lbnQoc2VsZik6Ci0gICAgICAgIGJ1
Z190aXRsZSA9IFVzZXIucHJvbXB0KCJCdWcgdGl0bGU6ICIpCi0gICAgICAgIHByaW50ICJCdWcg
Y29tbWVudCAoaGl0IF5EIG9uIGJsYW5rIGxpbmUgdG8gZW5kKToiCi0gICAgICAgIGxpbmVzID0g
c3lzLnN0ZGluLnJlYWRsaW5lcygpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5zdGRp
bi5zZWVrKDAsIG9zLlNFRUtfRU5EKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAg
ICAgICMgQ3lnd2luIHJhaXNlcyBhbiBJbGxlZ2FsIFNlZWsgKGVycm5vIDI5KSBleGNlcHRpb24g
d2hlbiB0aGUgYWJvdmUKLSAgICAgICAgICAgICMgc2VlaygpIGNhbGwgaXMgbWFkZS4gSWdub3Jp
bmcgaXQgc2VlbXMgdG8gY2F1c2Ugbm8gaGFybS4KLSAgICAgICAgICAgICMgRklYTUU6IEZpZ3Vy
ZSBvdXQgYSB3YXkgdG8gZ2V0IGF2b2lkIHRoZSBleGNlcHRpb24gaW4gdGhlIGZpcnN0Ci0gICAg
ICAgICAgICAjIHBsYWNlLgotICAgICAgICAgICAgcGFzcwotICAgICAgICBjb21tZW50X3RleHQg
PSAiIi5qb2luKGxpbmVzKQotICAgICAgICByZXR1cm4gKGJ1Z190aXRsZSwgY29tbWVudF90ZXh0
KQotCi0gICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAg
IGlmIGxlbihhcmdzKToKLSAgICAgICAgICAgIGlmIChub3QgdG9vbC5zY20oKS5zdXBwb3J0c19s
b2NhbF9jb21taXRzKCkpOgotICAgICAgICAgICAgICAgIGVycm9yKCJFeHRyYSBhcmd1bWVudHMg
bm90IHN1cHBvcnRlZDsgcGF0Y2ggaXMgdGFrZW4gZnJvbSB3b3JraW5nIGRpcmVjdG9yeS4iKQot
ICAgICAgICAgICAgc2VsZi5jcmVhdGVfYnVnX2Zyb21fY29tbWl0KG9wdGlvbnMsIGFyZ3MsIHRv
b2wpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmNyZWF0ZV9idWdfZnJvbV9wYXRj
aChvcHRpb25zLCBhcmdzLCB0b29sKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tYW5kcy91cGxvYWRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy91cGxvYWRfdW5pdHRlc3QucHkJKHJldmlzaW9uIDU2
MzY2KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy91cGxvYWRfdW5p
dHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsODggKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0j
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0j
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LWZyb20gd2Via2l0cHkuY29tbWFuZHNfcmVmZXJlbmNlcyBpbXBvcnQgTW9jawotZnJvbSB3ZWJr
aXRweS5jb21tYW5kcy5jb21tYW5kdGVzdCBpbXBvcnQgQ29tbWFuZHNUZXN0Ci1mcm9tIHdlYmtp
dHB5LmNvbW1hbmRzLnVwbG9hZCBpbXBvcnQgKgotZnJvbSB3ZWJraXRweS5tb2NrX2J1Z3ppbGxh
dG9vbCBpbXBvcnQgTW9ja0J1Z3ppbGxhVG9vbAotCi1jbGFzcyBVcGxvYWRDb21tYW5kc1Rlc3Qo
Q29tbWFuZHNUZXN0KToKLSAgICBkZWYgdGVzdF9jb21taXRfbWVzc2FnZV9mb3JfY3VycmVudF9k
aWZmKHNlbGYpOgotICAgICAgICB0b29sID0gTW9ja0J1Z3ppbGxhVG9vbCgpCi0gICAgICAgIG1v
Y2tfY29tbWl0X21lc3NhZ2VfZm9yX3RoaXNfY29tbWl0ID0gTW9jaygpCi0gICAgICAgIG1vY2tf
Y29tbWl0X21lc3NhZ2VfZm9yX3RoaXNfY29tbWl0Lm1lc3NhZ2UgPSBsYW1iZGE6ICJNb2NrIG1l
c3NhZ2UiCi0gICAgICAgIHRvb2wuX3NjbS5jb21taXRfbWVzc2FnZV9mb3JfdGhpc19jb21taXQg
PSBsYW1iZGE6IG1vY2tfY29tbWl0X21lc3NhZ2VfZm9yX3RoaXNfY29tbWl0Ci0gICAgICAgIGV4
cGVjdGVkX3N0ZG91dCA9ICJNb2NrIG1lc3NhZ2VcbiIKLSAgICAgICAgc2VsZi5hc3NlcnRfZXhl
Y3V0ZV9vdXRwdXRzKENvbW1pdE1lc3NhZ2VGb3JDdXJyZW50RGlmZigpLCBbXSwgZXhwZWN0ZWRf
c3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCwgdG9vbD10b29sKQotCi0gICAgZGVmIHRlc3RfY2xlYW5f
cGVuZGluZ19jb21taXQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2V4ZWN1dGVfb3V0cHV0
cyhDbGVhblBlbmRpbmdDb21taXQoKSwgW10pCi0KLSAgICBkZWYgdGVzdF9hc3NpZ25fdG9fY29t
bWl0dGVyKHNlbGYpOgotICAgICAgICB0b29sID0gTW9ja0J1Z3ppbGxhVG9vbCgpCi0gICAgICAg
IGV4cGVjdGVkX3N0ZGVyciA9ICJXYXJuaW5nLCBhdHRhY2htZW50IDEyOCBvbiBidWcgNDIgaGFz
IGludmFsaWQgY29tbWl0dGVyIChub24tY29tbWl0dGVyQGV4YW1wbGUuY29tKVxuQnVnIDc3IGlz
IGFscmVhZHkgYXNzaWduZWQgdG8gZm9vQGZvby5jb20gKE5vbmUpLlxuQnVnIDc2IGhhcyBubyBu
b24tb2Jzb2xldGUgcGF0Y2hlcywgaWdub3JpbmcuXG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0X2V4
ZWN1dGVfb3V0cHV0cyhBc3NpZ25Ub0NvbW1pdHRlcigpLCBbXSwgZXhwZWN0ZWRfc3RkZXJyPWV4
cGVjdGVkX3N0ZGVyciwgdG9vbD10b29sKQotICAgICAgICB0b29sLmJ1Z3MucmVhc3NpZ25fYnVn
LmFzc2VydF9jYWxsZWRfd2l0aCg0MiwgImVyaWNAd2Via2l0Lm9yZyIsICJBdHRhY2htZW50IDEy
OCB3YXMgcG9zdGVkIGJ5IGEgY29tbWl0dGVyIGFuZCBoYXMgcmV2aWV3KywgYXNzaWduaW5nIHRv
IEVyaWMgU2VpZGVsIGZvciBjb21taXQuIikKLQotICAgIGRlZiB0ZXN0X29ic29sZXRlX2F0dGFj
aG1lbnRzKHNlbGYpOgotICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiT2Jzb2xldGluZyAyIG9s
ZCBwYXRjaGVzIG9uIGJ1ZyA0MlxuIgotICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1
dHMoT2Jzb2xldGVBdHRhY2htZW50cygpLCBbNDJdLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRf
c3RkZXJyKQotCi0gICAgZGVmIHRlc3RfcG9zdChzZWxmKToKLSAgICAgICAgZXhwZWN0ZWRfc3Rk
ZXJyID0gIlJ1bm5pbmcgY2hlY2std2Via2l0LXN0eWxlXG5PYnNvbGV0aW5nIDIgb2xkIHBhdGNo
ZXMgb24gYnVnIDQyXG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0X2V4ZWN1dGVfb3V0cHV0cyhQb3N0
KCksIFs0Ml0sIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCi0KLSAgICBkZWYgdGVz
dF9wb3N0KHNlbGYpOgotICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiT2Jzb2xldGluZyAyIG9s
ZCBwYXRjaGVzIG9uIGJ1ZyA0MlxuIgotICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1
dHMoTGFuZFNhZmVseSgpLCBbNDJdLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQot
Ci0gICAgZGVmIHRlc3RfcHJlcGFyZV9kaWZmX3dpdGhfYXJnKHNlbGYpOgotICAgICAgICBzZWxm
LmFzc2VydF9leGVjdXRlX291dHB1dHMoUHJlcGFyZSgpLCBbNDJdKQotCi0gICAgZGVmIHRlc3Rf
cHJlcGFyZShzZWxmKToKLSAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0gIk1PQ0sgY3JlYXRlX2J1
Z1xuYnVnX3RpdGxlOiBNb2NrIHVzZXIgcmVzcG9uc2VcbmJ1Z19kZXNjcmlwdGlvbjogTW9jayB1
c2VyIHJlc3BvbnNlXG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0X2V4ZWN1dGVfb3V0cHV0cyhQcmVw
YXJlKCksIFtdLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQotCi0gICAgZGVmIHRl
c3RfdXBsb2FkKHNlbGYpOgotICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiUnVubmluZyBjaGVj
ay13ZWJraXQtc3R5bGVcbk9ic29sZXRpbmcgMiBvbGQgcGF0Y2hlcyBvbiBidWcgNDJcbk1PQ0s6
IHVzZXIub3Blbl91cmw6IGh0dHA6Ly9leGFtcGxlLmNvbS80MlxuIgotICAgICAgICBzZWxmLmFz
c2VydF9leGVjdXRlX291dHB1dHMoVXBsb2FkKCksIFs0Ml0sIGV4cGVjdGVkX3N0ZGVycj1leHBl
Y3RlZF9zdGRlcnIpCi0KLSAgICBkZWYgdGVzdF9tYXJrX2J1Z19maXhlZChzZWxmKToKLSAgICAg
ICAgdG9vbCA9IE1vY2tCdWd6aWxsYVRvb2woKQotICAgICAgICB0b29sLl9zY20ubGFzdF9zdm5f
Y29tbWl0X2xvZyA9IGxhbWJkYTogInI5ODc2IHwiCi0gICAgICAgIG9wdGlvbnMgPSBNb2NrKCkK
LSAgICAgICAgb3B0aW9ucy5idWdfaWQgPSA0MgotICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAi
IiJCdWc6IDxodHRwOi8vZXhhbXBsZS5jb20vNDI+IEJ1ZyB3aXRoIHR3byByKydkIGFuZCBjcSsn
ZCBwYXRjaGVzLCBvbmUgb2Ygd2hpY2ggaGFzIGFuIGludmFsaWQgY29tbWl0LXF1ZXVlIHNldHRl
ci4KLVJldmlzaW9uOiA5ODc2Ci1NT0NLOiB1c2VyLm9wZW5fdXJsOiBodHRwOi8vZXhhbXBsZS5j
b20vNDIKLUFkZGluZyBjb21tZW50IHRvIEJ1ZyA0Mi4KLSIiIgotICAgICAgICBzZWxmLmFzc2Vy
dF9leGVjdXRlX291dHB1dHMoTWFya0J1Z0ZpeGVkKCksIFtdLCBleHBlY3RlZF9zdGRlcnI9ZXhw
ZWN0ZWRfc3RkZXJyLCB0b29sPXRvb2wsIG9wdGlvbnM9b3B0aW9ucykKLQotICAgIGRlZiB0ZXN0
X2VkaXRfY2hhbmdlbG9nKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1
dHMoRWRpdENoYW5nZUxvZ3MoKSwgW10pCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BhdGNoL2NvbW1hbmRzX3JlZmVyZW5jZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wYXRjaC9jb21tYW5kc19yZWZlcmVuY2VzLnB5CShyZXZpc2lv
biA1NjM2NikJKGZyb20gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kc19yZWZl
cmVuY2VzLnB5OjU2MzY2KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wYXRjaC9j
b21tYW5kc19yZWZlcmVuY2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRvbmVrIChjamVyZG9uZWtAd2Via2l0Lm9yZykK
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiQ29udGFpbnMg
aW50cmEtcGFja2FnZSByZWZlcmVuY2VzIHVzZWQgYnkgd2Via2l0cHkuY29tbWFuZHMuIiIiCisK
K2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCkluZGV4OiBXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BhdGNoL2NvbW1hbmRzX3JlZmVyZW5jZXMucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wYXRjaC9jb21tYW5kc19yZWZl
cmVuY2VzLnB5CShyZXZpc2lvbiA1NjM2NikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcGF0Y2gvY29tbWFuZHNfcmVmZXJlbmNlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMjAsNiAr
MjAsNiBAQAogIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi0iIiJDb250
YWlucyBpbnRyYS1wYWNrYWdlIHJlZmVyZW5jZXMgdXNlZCBieSB3ZWJraXRweS5jb21tYW5kcy4i
IiIKKyIiIkNvbnRhaW5zIGludHJhLXBhY2thZ2UgcmVmZXJlbmNlcyB1c2VkIGJ5IHdlYmtpdHB5
LnBhdGNoLmNvbW1hbmRzLiIiIgogCiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkubW9jayBpbXBv
cnQgTW9jawpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wYXRjaC9wYXRjaGVy
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGF0Y2gvcGF0
Y2hlci5weQkocmV2aXNpb24gNTYzNjYpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BhdGNoL3BhdGNoZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEzICszMywxMyBAQCBpbXBv
cnQgb3MKIAogZnJvbSB3ZWJraXRweS5idWd6aWxsYSBpbXBvcnQgQnVnemlsbGEKIGZyb20gd2Vi
a2l0cHkuYnVpbGRib3QgaW1wb3J0IEJ1aWxkQm90Ci1mcm9tIHdlYmtpdHB5LmNvbW1hbmRzLmRv
d25sb2FkIGltcG9ydCAqCi1mcm9tIHdlYmtpdHB5LmNvbW1hbmRzLmVhcmx5X3dhcm5pbmdfc3lz
dGVtIGltcG9ydCAqCi1mcm9tIHdlYmtpdHB5LmNvbW1hbmRzLm9wZW5idWdzIGltcG9ydCBPcGVu
QnVncwotZnJvbSB3ZWJraXRweS5jb21tYW5kcy5xdWVyaWVzIGltcG9ydCAqCi1mcm9tIHdlYmtp
dHB5LmNvbW1hbmRzLnF1ZXVlcyBpbXBvcnQgKgotZnJvbSB3ZWJraXRweS5jb21tYW5kcy5zaGVy
aWZmYm90IGltcG9ydCAqCi1mcm9tIHdlYmtpdHB5LmNvbW1hbmRzLnVwbG9hZCBpbXBvcnQgKgor
ZnJvbSB3ZWJraXRweS5wYXRjaC5jb21tYW5kcy5kb3dubG9hZCBpbXBvcnQgKgorZnJvbSB3ZWJr
aXRweS5wYXRjaC5jb21tYW5kcy5lYXJseV93YXJuaW5nX3N5c3RlbSBpbXBvcnQgKgorZnJvbSB3
ZWJraXRweS5wYXRjaC5jb21tYW5kcy5vcGVuYnVncyBpbXBvcnQgT3BlbkJ1Z3MKK2Zyb20gd2Vi
a2l0cHkucGF0Y2guY29tbWFuZHMucXVlcmllcyBpbXBvcnQgKgorZnJvbSB3ZWJraXRweS5wYXRj
aC5jb21tYW5kcy5xdWV1ZXMgaW1wb3J0ICoKK2Zyb20gd2Via2l0cHkucGF0Y2guY29tbWFuZHMu
c2hlcmlmZmJvdCBpbXBvcnQgKgorZnJvbSB3ZWJraXRweS5wYXRjaC5jb21tYW5kcy51cGxvYWQg
aW1wb3J0ICoKIGZyb20gd2Via2l0cHkuZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUKIGZyb20g
d2Via2l0cHkuaXJjLmlyY3Byb3h5IGltcG9ydCBJUkNQcm94eQogZnJvbSB3ZWJraXRweS53ZWJr
aXRfbG9nZ2luZyBpbXBvcnQgbG9nCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BhdGNoL2NvbW1hbmRzL2NvbW1hbmR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcGF0Y2gvY29tbWFuZHMvY29tbWFuZHRlc3QucHkJKHJldmlzaW9u
IDU2MzY2KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wYXRjaC9jb21tYW5kcy9j
b21tYW5kdGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiBpbXBvcnQg
dW5pdHRlc3QKIAotZnJvbSB3ZWJraXRweS5jb21tYW5kc19yZWZlcmVuY2VzIGltcG9ydCBNb2Nr
Citmcm9tIHdlYmtpdHB5LnBhdGNoLmNvbW1hbmRzX3JlZmVyZW5jZXMgaW1wb3J0IE1vY2sKIGZy
b20gd2Via2l0cHkubW9ja19idWd6aWxsYXRvb2wgaW1wb3J0IE1vY2tCdWd6aWxsYVRvb2wKIGZy
b20gd2Via2l0cHkub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQogCkluZGV4OiBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BhdGNoL2NvbW1hbmRzL2Rvd25sb2FkLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGF0Y2gvY29tbWFuZHMv
ZG93bmxvYWQucHkJKHJldmlzaW9uIDU2MzY2KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wYXRjaC9jb21tYW5kcy9kb3dubG9hZC5weQkod29ya2luZyBjb3B5KQpAQCAtMzYsNyAr
MzYsNyBAQCBpbXBvcnQgd2Via2l0cHkuc3RlcHMgYXMgc3RlcHMKIGZyb20gd2Via2l0cHkuYnVn
emlsbGEgaW1wb3J0IHBhcnNlX2J1Z19pZAogIyBXZSBjb3VsZCBpbnN0ZWFkIHVzZSBmcm9tIG1v
ZHVsZXMgaW1wb3J0IGJ1aWxkc3RlcHMgYW5kIHRoZW4gcHJlZml4IGV2ZXJ5IGJ1aWxkc3RlcCB3
aXRoICJidWlsZHN0ZXBzLiIKIGZyb20gd2Via2l0cHkuY2hhbmdlbG9ncyBpbXBvcnQgQ2hhbmdl
TG9nLCB2aWV3X3NvdXJjZV91cmwKLWZyb20gd2Via2l0cHkuY29tbWFuZHMuYWJzdHJhY3RzZXF1
ZW5jZWRjb21tYW5kIGltcG9ydCBBYnN0cmFjdFNlcXVlbmNlZENvbW1hbmQKK2Zyb20gd2Via2l0
cHkucGF0Y2guY29tbWFuZHMuYWJzdHJhY3RzZXF1ZW5jZWRjb21tYW5kIGltcG9ydCBBYnN0cmFj
dFNlcXVlbmNlZENvbW1hbmQKIGZyb20gd2Via2l0cHkuY29tbWVudHMgaW1wb3J0IGJ1Z19jb21t
ZW50X2Zyb21fY29tbWl0X3RleHQKIGZyb20gd2Via2l0cHkuZXhlY3V0aXZlIGltcG9ydCBTY3Jp
cHRFcnJvcgogZnJvbSB3ZWJraXRweS5ncmFtbWFyIGltcG9ydCBwbHVyYWxpemUKSW5kZXg6IFdl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGF0Y2gvY29tbWFuZHMvZG93bmxvYWRfdW5pdHRl
c3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wYXRjaC9j
b21tYW5kcy9kb3dubG9hZF91bml0dGVzdC5weQkocmV2aXNpb24gNTYzNjYpCisrKyBXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BhdGNoL2NvbW1hbmRzL2Rvd25sb2FkX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiw5IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogCi1mcm9tIHdlYmtpdHB5LmNvbW1hbmRzX3JlZmVyZW5jZXMgaW1wb3J0IE1vY2sK
LWZyb20gd2Via2l0cHkuY29tbWFuZHMuY29tbWFuZHRlc3QgaW1wb3J0IENvbW1hbmRzVGVzdAot
ZnJvbSB3ZWJraXRweS5jb21tYW5kcy5kb3dubG9hZCBpbXBvcnQgKgorZnJvbSB3ZWJraXRweS5w
YXRjaC5jb21tYW5kc19yZWZlcmVuY2VzIGltcG9ydCBNb2NrCitmcm9tIHdlYmtpdHB5LnBhdGNo
LmNvbW1hbmRzLmNvbW1hbmR0ZXN0IGltcG9ydCBDb21tYW5kc1Rlc3QKK2Zyb20gd2Via2l0cHku
cGF0Y2guY29tbWFuZHMuZG93bmxvYWQgaW1wb3J0ICoKIAogCiBjbGFzcyBEb3dubG9hZENvbW1h
bmRzVGVzdChDb21tYW5kc1Rlc3QpOgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wYXRjaC9jb21tYW5kcy9lYXJseV93YXJuaW5nX3N5c3RlbS5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BhdGNoL2NvbW1hbmRzL2Vhcmx5X3dhcm5pbmdf
c3lzdGVtLnB5CShyZXZpc2lvbiA1NjM2NikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcGF0Y2gvY29tbWFuZHMvZWFybHlfd2FybmluZ19zeXN0ZW0ucHkJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDcgQEAKIAogZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KIAotZnJv
bSB3ZWJraXRweS5jb21tYW5kcy5xdWV1ZXMgaW1wb3J0IEFic3RyYWN0UmV2aWV3UXVldWUKK2Zy
b20gd2Via2l0cHkucGF0Y2guY29tbWFuZHMucXVldWVzIGltcG9ydCBBYnN0cmFjdFJldmlld1F1
ZXVlCiBmcm9tIHdlYmtpdHB5LmNvbW1pdHRlcnMgaW1wb3J0IENvbW1pdHRlckxpc3QKIGZyb20g
d2Via2l0cHkuZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS53ZWJr
aXRwb3J0IGltcG9ydCBXZWJLaXRQb3J0CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BhdGNoL2NvbW1hbmRzL2Vhcmx5X3dhcm5pbmdfc3lzdGVtX3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGF0Y2gvY29tbWFuZHMvZWFy
bHlfd2FybmluZ19zeXN0ZW1fdW5pdHRlc3QucHkJKHJldmlzaW9uIDU2MzY2KQorKysgV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wYXRjaC9jb21tYW5kcy9lYXJseV93YXJuaW5nX3N5c3Rl
bV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsOSBAQAogCiBpbXBvcnQg
b3MKIAotZnJvbSB3ZWJraXRweS5jb21tYW5kc19yZWZlcmVuY2VzIGltcG9ydCBNb2NrCi1mcm9t
IHdlYmtpdHB5LmNvbW1hbmRzLmVhcmx5X3dhcm5pbmdfc3lzdGVtIGltcG9ydCAqCi1mcm9tIHdl
YmtpdHB5LmNvbW1hbmRzLnF1ZXVlc3Rlc3QgaW1wb3J0IFF1ZXVlc1Rlc3QKK2Zyb20gd2Via2l0
cHkucGF0Y2guY29tbWFuZHNfcmVmZXJlbmNlcyBpbXBvcnQgTW9jaworZnJvbSB3ZWJraXRweS5w
YXRjaC5jb21tYW5kcy5lYXJseV93YXJuaW5nX3N5c3RlbSBpbXBvcnQgKgorZnJvbSB3ZWJraXRw
eS5wYXRjaC5jb21tYW5kcy5xdWV1ZXN0ZXN0IGltcG9ydCBRdWV1ZXNUZXN0CiAKIGNsYXNzIEVh
cmx5V2FybmluZ1N5dGVtVGVzdChRdWV1ZXNUZXN0KToKICAgICBkZWYgdGVzdF9jaHJvbWl1bV9l
d3Moc2VsZik6CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BhdGNoL2NvbW1h
bmRzL29wZW5idWdzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcGF0Y2gvY29tbWFuZHMvb3BlbmJ1Z3NfdW5pdHRlc3QucHkJKHJldmlzaW9u
IDU2MzY2KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wYXRjaC9jb21tYW5kcy9v
cGVuYnVnc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotZnJvbSB3ZWJraXRweS5jb21tYW5kcy5jb21t
YW5kdGVzdCBpbXBvcnQgQ29tbWFuZHNUZXN0Ci1mcm9tIHdlYmtpdHB5LmNvbW1hbmRzLm9wZW5i
dWdzIGltcG9ydCBPcGVuQnVncworZnJvbSB3ZWJraXRweS5wYXRjaC5jb21tYW5kcy5jb21tYW5k
dGVzdCBpbXBvcnQgQ29tbWFuZHNUZXN0Citmcm9tIHdlYmtpdHB5LnBhdGNoLmNvbW1hbmRzLm9w
ZW5idWdzIGltcG9ydCBPcGVuQnVncwogCiBjbGFzcyBPcGVuQnVnc1Rlc3QoQ29tbWFuZHNUZXN0
KToKIApJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wYXRjaC9jb21tYW5kcy9x
dWVyaWVzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcGF0Y2gvY29tbWFuZHMvcXVlcmllc191bml0dGVzdC5weQkocmV2aXNpb24gNTYzNjYp
CisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BhdGNoL2NvbW1hbmRzL3F1ZXJpZXNf
dW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDkgQEAKICMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KIAogZnJvbSB3ZWJraXRweS5idWd6aWxsYSBpbXBvcnQgQnVnemlsbGEKLWZyb20gd2Via2l0
cHkuY29tbWFuZHNfcmVmZXJlbmNlcyBpbXBvcnQgTW9jawotZnJvbSB3ZWJraXRweS5jb21tYW5k
cy5jb21tYW5kdGVzdCBpbXBvcnQgQ29tbWFuZHNUZXN0Ci1mcm9tIHdlYmtpdHB5LmNvbW1hbmRz
LnF1ZXJpZXMgaW1wb3J0ICoKK2Zyb20gd2Via2l0cHkucGF0Y2guY29tbWFuZHNfcmVmZXJlbmNl
cyBpbXBvcnQgTW9jaworZnJvbSB3ZWJraXRweS5wYXRjaC5jb21tYW5kcy5jb21tYW5kdGVzdCBp
bXBvcnQgQ29tbWFuZHNUZXN0Citmcm9tIHdlYmtpdHB5LnBhdGNoLmNvbW1hbmRzLnF1ZXJpZXMg
aW1wb3J0ICoKIGZyb20gd2Via2l0cHkubW9ja19idWd6aWxsYXRvb2wgaW1wb3J0IE1vY2tCdWd6
aWxsYVRvb2wKIAogY2xhc3MgUXVlcnlDb21tYW5kc1Rlc3QoQ29tbWFuZHNUZXN0KToKSW5kZXg6
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGF0Y2gvY29tbWFuZHMvcXVldWVzX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGF0Y2gv
Y29tbWFuZHMvcXVldWVzX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1NjM2NikKKysrIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcGF0Y2gvY29tbWFuZHMvcXVldWVzX3VuaXR0ZXN0LnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTAgQEAKIGltcG9ydCBvcwogCiBmcm9tIHdlYmtp
dHB5LmJ1Z3ppbGxhIGltcG9ydCBBdHRhY2htZW50Ci1mcm9tIHdlYmtpdHB5LmNvbW1hbmRzX3Jl
ZmVyZW5jZXMgaW1wb3J0IE1vY2sKLWZyb20gd2Via2l0cHkuY29tbWFuZHMuY29tbWFuZHRlc3Qg
aW1wb3J0IENvbW1hbmRzVGVzdAotZnJvbSB3ZWJraXRweS5jb21tYW5kcy5xdWV1ZXMgaW1wb3J0
ICoKLWZyb20gd2Via2l0cHkuY29tbWFuZHMucXVldWVzdGVzdCBpbXBvcnQgUXVldWVzVGVzdAor
ZnJvbSB3ZWJraXRweS5wYXRjaC5jb21tYW5kc19yZWZlcmVuY2VzIGltcG9ydCBNb2NrCitmcm9t
IHdlYmtpdHB5LnBhdGNoLmNvbW1hbmRzLmNvbW1hbmR0ZXN0IGltcG9ydCBDb21tYW5kc1Rlc3QK
K2Zyb20gd2Via2l0cHkucGF0Y2guY29tbWFuZHMucXVldWVzIGltcG9ydCAqCitmcm9tIHdlYmtp
dHB5LnBhdGNoLmNvbW1hbmRzLnF1ZXVlc3Rlc3QgaW1wb3J0IFF1ZXVlc1Rlc3QKIGZyb20gd2Vi
a2l0cHkubW9ja19idWd6aWxsYXRvb2wgaW1wb3J0IE1vY2tCdWd6aWxsYVRvb2wsIE1vY2tTQ00K
IGZyb20gd2Via2l0cHkub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQogCkluZGV4
OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BhdGNoL2NvbW1hbmRzL3F1ZXVlc3Rlc3Qu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wYXRjaC9jb21t
YW5kcy9xdWV1ZXN0ZXN0LnB5CShyZXZpc2lvbiA1NjM2NikKKysrIFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcGF0Y2gvY29tbWFuZHMvcXVldWVzdGVzdC5weQkod29ya2luZyBjb3B5KQpA
QCAtMjgsNyArMjgsNyBAQAogCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSB3ZWJraXRweS5jb21t
YW5kc19yZWZlcmVuY2VzIGltcG9ydCBNb2NrCitmcm9tIHdlYmtpdHB5LnBhdGNoLmNvbW1hbmRz
X3JlZmVyZW5jZXMgaW1wb3J0IE1vY2sKIGZyb20gd2Via2l0cHkuYnVnemlsbGEgaW1wb3J0IEF0
dGFjaG1lbnQKIGZyb20gd2Via2l0cHkubW9ja19idWd6aWxsYXRvb2wgaW1wb3J0IE1vY2tCdWd6
aWxsYVRvb2wKIGZyb20gd2Via2l0cHkub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVy
ZQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wYXRjaC9jb21tYW5kcy9zaGVy
aWZmYm90LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGF0
Y2gvY29tbWFuZHMvc2hlcmlmZmJvdC5weQkocmV2aXNpb24gNTYzNjYpCisrKyBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BhdGNoL2NvbW1hbmRzL3NoZXJpZmZib3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogaW1wb3J0IG9zCiAKLWZyb20gd2Via2l0cHkuY29t
bWFuZHMucXVldWVzIGltcG9ydCBBYnN0cmFjdFF1ZXVlCitmcm9tIHdlYmtpdHB5LnBhdGNoLmNv
bW1hbmRzLnF1ZXVlcyBpbXBvcnQgQWJzdHJhY3RRdWV1ZQogZnJvbSB3ZWJraXRweS53ZWJraXRf
bG9nZ2luZyBpbXBvcnQgbG9nCiBmcm9tIHdlYmtpdHB5LndlYmtpdHBvcnQgaW1wb3J0IFdlYktp
dFBvcnQKIApJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wYXRjaC9jb21tYW5k
cy9zaGVyaWZmYm90X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcGF0Y2gvY29tbWFuZHMvc2hlcmlmZmJvdF91bml0dGVzdC5weQkocmV2aXNp
b24gNTYzNjYpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BhdGNoL2NvbW1hbmRz
L3NoZXJpZmZib3RfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAK
IAogaW1wb3J0IG9zCiAKLWZyb20gd2Via2l0cHkuY29tbWFuZHMucXVldWVzdGVzdCBpbXBvcnQg
UXVldWVzVGVzdAotZnJvbSB3ZWJraXRweS5jb21tYW5kcy5zaGVyaWZmYm90IGltcG9ydCBTaGVy
aWZmQm90Citmcm9tIHdlYmtpdHB5LnBhdGNoLmNvbW1hbmRzLnF1ZXVlc3Rlc3QgaW1wb3J0IFF1
ZXVlc1Rlc3QKK2Zyb20gd2Via2l0cHkucGF0Y2guY29tbWFuZHMuc2hlcmlmZmJvdCBpbXBvcnQg
U2hlcmlmZkJvdAogZnJvbSB3ZWJraXRweS5tb2NrX2J1Z3ppbGxhdG9vbCBpbXBvcnQgTW9ja0J1
Z3ppbGxhVG9vbCwgbW9ja19idWlsZGVyCiAKIGNsYXNzIFNoZXJpZmZCb3RUZXN0KFF1ZXVlc1Rl
c3QpOgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wYXRjaC9jb21tYW5kcy91
cGxvYWQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wYXRj
aC9jb21tYW5kcy91cGxvYWQucHkJKHJldmlzaW9uIDU2MzY2KQorKysgV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wYXRjaC9jb21tYW5kcy91cGxvYWQucHkJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDggKzM4LDggQEAgZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRpb24KIGltcG9ydCB3
ZWJraXRweS5zdGVwcyBhcyBzdGVwcwogCiBmcm9tIHdlYmtpdHB5LmJ1Z3ppbGxhIGltcG9ydCBw
YXJzZV9idWdfaWQKLWZyb20gd2Via2l0cHkuY29tbWFuZHNfcmVmZXJlbmNlcyBpbXBvcnQgTW9j
awotZnJvbSB3ZWJraXRweS5jb21tYW5kcy5hYnN0cmFjdHNlcXVlbmNlZGNvbW1hbmQgaW1wb3J0
IEFic3RyYWN0U2VxdWVuY2VkQ29tbWFuZAorZnJvbSB3ZWJraXRweS5wYXRjaC5jb21tYW5kc19y
ZWZlcmVuY2VzIGltcG9ydCBNb2NrCitmcm9tIHdlYmtpdHB5LnBhdGNoLmNvbW1hbmRzLmFic3Ry
YWN0c2VxdWVuY2VkY29tbWFuZCBpbXBvcnQgQWJzdHJhY3RTZXF1ZW5jZWRDb21tYW5kCiBmcm9t
IHdlYmtpdHB5LmNvbW1lbnRzIGltcG9ydCBidWdfY29tbWVudF9mcm9tX3N2bl9yZXZpc2lvbgog
ZnJvbSB3ZWJraXRweS5jb21taXR0ZXJzIGltcG9ydCBDb21taXR0ZXJMaXN0CiBmcm9tIHdlYmtp
dHB5LmdyYW1tYXIgaW1wb3J0IHBsdXJhbGl6ZSwgam9pbl93aXRoX3NlcGFyYXRvcnMKSW5kZXg6
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGF0Y2gvY29tbWFuZHMvdXBsb2FkX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGF0Y2gv
Y29tbWFuZHMvdXBsb2FkX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1NjM2NikKKysrIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcGF0Y2gvY29tbWFuZHMvdXBsb2FkX3VuaXR0ZXN0LnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiw5IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogCi1mcm9tIHdlYmtpdHB5LmNvbW1hbmRzX3JlZmVyZW5jZXMgaW1wb3J0IE1vY2sKLWZy
b20gd2Via2l0cHkuY29tbWFuZHMuY29tbWFuZHRlc3QgaW1wb3J0IENvbW1hbmRzVGVzdAotZnJv
bSB3ZWJraXRweS5jb21tYW5kcy51cGxvYWQgaW1wb3J0ICoKK2Zyb20gd2Via2l0cHkucGF0Y2gu
Y29tbWFuZHNfcmVmZXJlbmNlcyBpbXBvcnQgTW9jaworZnJvbSB3ZWJraXRweS5wYXRjaC5jb21t
YW5kcy5jb21tYW5kdGVzdCBpbXBvcnQgQ29tbWFuZHNUZXN0Citmcm9tIHdlYmtpdHB5LnBhdGNo
LmNvbW1hbmRzLnVwbG9hZCBpbXBvcnQgKgogZnJvbSB3ZWJraXRweS5tb2NrX2J1Z3ppbGxhdG9v
bCBpbXBvcnQgTW9ja0J1Z3ppbGxhVG9vbAogCiBjbGFzcyBVcGxvYWRDb21tYW5kc1Rlc3QoQ29t
bWFuZHNUZXN0KToK
</data>
<flag name="review"
          id="34640"
          type_id="1"
          status="-"
          setter="eric"
    />
    <flag name="commit-queue"
          id="34641"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
      

    </bug>

</bugzilla>