<?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>209562</bug_id>
          
          <creation_ts>2020-03-25 13:57:39 -0700</creation_ts>
          <short_desc>results.webkit.org: Add investigation endpoint</short_desc>
          <delta_ts>2020-04-27 14:12:17 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>jlewis3</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zhifei_fang</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1634041</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-03-25 13:57:39 -0700</bug_when>
    <thetext>We should have a place which links all failures for a specific commit or range of commits. This is essentially a visualization of the /api/failures endpoint, which will tell us which tests failed on a given configuration/uuid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634065</commentid>
    <comment_count>1</comment_count>
      <attachid>394548</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-03-25 15:01:14 -0700</bug_when>
    <thetext>Created attachment 394548
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636284</commentid>
    <comment_count>2</comment_count>
      <attachid>395102</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-03-31 15:58:58 -0700</bug_when>
    <thetext>Created attachment 395102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636761</commentid>
    <comment_count>3</comment_count>
      <attachid>395232</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-04-01 18:16:44 -0700</bug_when>
    <thetext>Created attachment 395232
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643672</commentid>
    <comment_count>4</comment_count>
      <attachid>395232</attachid>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2020-04-20 15:53:54 -0700</bug_when>
    <thetext>Comment on attachment 395232
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=395232&amp;action=review

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/common.js:188
&gt; +    result += `${time.getSeconds() &lt;= 9 &amp;&amp; time.getMinutes() ? &apos;0&apos; : &apos;&apos;}${time.getSeconds()}.${time.getMilliseconds() &lt;= 99 ? &apos;0&apos; : &apos;&apos;}${time.getMilliseconds() &lt;= 9 ? &apos;0&apos; : &apos;&apos;}${time.getMilliseconds()} `;

instead of showing things like &quot;Suite took 22:37.856 minutes to run&quot; I think it will be better to change &quot;Suite took 22 minutes and 37.856 seconds to run&quot;

&gt; Tools/resultsdbpy/resultsdbpy/view/templates/investigate.html:116
&gt; +                            &lt;div class=&quot;item text block&quot; style=&quot;width: 100%; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;&quot;&gt;${diff.configuration}&lt;/div&gt;

I guess we may need to consider to add a prefix &quot;Configuration&quot; here to explain what&apos;s this, especially for &quot;all&quot; configuration.

&gt; Tools/resultsdbpy/resultsdbpy/view/templates/investigate.html:118
&gt; +                                Comprised of ${diff.results.length} run${diff.results.length === 1 ? &apos;&apos; : &apos;s&apos;} using

I guess for a single run result , maybe we change this to fit it only show one run result, like &quot;revision: ${}&quot; since we are not aggregating anything, and maybe we should display the commit pair instead

&gt; Tools/resultsdbpy/resultsdbpy/view/templates/investigate.html:131
&gt; +                                        return &apos;unknown commits&apos;;

Not sure if those results are still worth to show, since we cannot locate them, then we cannot compare them, we just know there is a failure. or maybe we just don&apos;t have enough data in the commit database currently, maybe it will later have enough info to display ?

&gt; Tools/resultsdbpy/resultsdbpy/view/templates/investigate.html:173
&gt; +                            &lt;div class=&quot;col-s-6 list&quot;&gt;

Should we add a title here to explain what&apos;s the list for? I guess we are trying to display all the failed test runs here.

&gt; Tools/resultsdbpy/resultsdbpy/view/templates/investigate.html:214
&gt; +                DOM.inject(element, `&lt;div class=&quot;list&quot;&gt;

Should we also consider add a title to explain this list here ? I guess we are displaying the specific failed tests here.

&gt; Tools/resultsdbpy/resultsdbpy/view/templates/investigate.html:370
&gt; +                            &lt;a class=&quot;button&quot; style=&quot;cursor: pointer; display: none&quot; ref=&quot;${this.previous}&quot;&gt;â Previous&lt;/a&gt;

Maybe a drop down will be more useful here, consider the user may want to see an overview, and jump between them</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644522</commentid>
    <comment_count>5</comment_count>
      <attachid>397269</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-04-22 15:02:50 -0700</bug_when>
    <thetext>Created attachment 397269
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646128</commentid>
    <comment_count>6</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-04-27 12:20:40 -0700</bug_when>
    <thetext>rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646153</commentid>
    <comment_count>7</comment_count>
      <attachid>397722</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-04-27 13:00:20 -0700</bug_when>
    <thetext>Created attachment 397722
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646201</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-27 14:11:47 -0700</bug_when>
    <thetext>Committed r260782: &lt;https://trac.webkit.org/changeset/260782&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 397722.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646202</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-27 14:12:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/62468215&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394548</attachid>
            <date>2020-03-25 15:01:14 -0700</date>
            <delta_ts>2020-03-31 15:58:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209562-20200325150113.patch</filename>
            <type>text/plain</type>
            <size>19268</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI1OTAwNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMzIEBACisyMDIwLTAzLTI1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICByZXN1bHRzLndlYmtpdC5vZzogQWRkIGludmVzdGlnYXRpb24gZW5kcG9p
bnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTU2
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdvcmsg
SW4gUHJvZ3Jlc3MKKworICAgICAgICBTdXBwb3J0IGxpc3RpbmcgdGVzdCBmYWlsdXJlcyBmb3Ig
c29tZSBjcml0ZXJpYS4KKworICAgICAgICAqIHJlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcv
c3RhdGljL2pzL2NvbW1vbi5qczoKKyAgICAgICAgKHBhcmFtc1RvUXVlcnkpOiBIYW5kbGUgcGFy
YW1ldGVycyB3aXRoICdGYWxzZScgaW4gdGhlbS4KKyAgICAgICAgKiByZXN1bHRzZGJweS9yZXN1
bHRzZGJweS92aWV3L3N0YXRpYy9qcy9jb25maWd1cmF0aW9uLmpzOgorICAgICAgICAoQ29uZmln
dXJhdGlvbi5jb21iaW5lKTogQ29tYmluZSB0d28gZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGlu
dG8gYSBtb3JlCisgICAgICAgIGdlbmVyaWMgY29uZmlndXJhdGlvbi4KKyAgICAgICAgKiByZXN1
bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9mYWlsdXJlcy5qczogQWRkZWQuCisg
ICAgICAgIChGYWlsdXJlcy5mcm9tRW5kcG9pbnQpOiBDb25zdHJ1Y3QgRmFpbHVyZXMgb2JqZWN0
cyBmcm9tIHRoZSBGYWlsdXJlIGVuZHBvaW50LgorICAgICAgICAoRmFpbHVyZXMuY29tYmluZSk6
IENvbWJpbmUgbXVsdGlwbGUgRmFpbHVyZSBvYmplY3RzIHRvZ2V0aGVyLgorICAgICAgICAoRmFp
bHVyZXMpOiBPYmplY3QgcmVwcmVzZW50aW5nIGEgc2V0IG9mIGZhaWx1cmVzIGZyb20gbXVsdGlw
bGUgdGVzdCBydW5zLgorICAgICAgICAqIHJlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3Rh
dGljL2pzL2ludmVzdGlnYXRlLmpzOgorICAgICAgICAocmV0dXJuLmRpdi5kaXYpOgorICAgICAg
ICAocHJvdG90eXBlLmZhaWx1cmVzVG9EaXNwbGF5LnNvcnQpOgorICAgICAgICAocmV0dXJuLmRp
dik6CisgICAgICAgIChfSW52ZXN0aWdhdGVEcmF3ZXIucHJvdG90eXBlLmV4cGFuZCk6IEFkZCBm
YWlsdXJlcyB0byB0aGUgaW52ZXN0aWdhdGlvbiBkcmF3ZXIuCisgICAgICAgIChfSW52ZXN0aWdh
dGVEcmF3ZXIucHJvdG90eXBlLmRpc3BhdGNoKTogRGlzcGF0Y2ggYW55IGFzeW5jaHJvbm91cyBy
ZXF1ZXN0cyB3aGljaAorICAgICAgICBhZGQgaW5mb3JtYXRpb24gCisgICAgICAgICogcmVzdWx0
c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvdGltZWxpbmUuanM6CisgICAgICAgIChs
ZXQucmVzdWx0LmRpdik6IERpc3BhdGNoIEludmVzdGlnYXRpb24gcmVxdWVzdHMgd2hlbiBmaWx0
ZXIgc3RhdHVzIGNoYW5nZXMuCisKIDIwMjAtMDMtMjUgIEZyYW5rIFlhbmcgIDxndW93ZWlfeWFu
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5wcmVmaXggLXdlYmtpdC10ZXh0LW9yaWVudGF0aW9u
CkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9jb21t
b24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9z
dGF0aWMvanMvY29tbW9uLmpzCShyZXZpc2lvbiAyNTkwMDYpCisrKyBUb29scy9yZXN1bHRzZGJw
eS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9jb21tb24uanMJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDcgKzU1LDcgQEAgZnVuY3Rpb24gcGFyYW1zVG9RdWVyeShqc29uKSB7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBqc29uW3BhcmFtZXRlcl0uZm9yRWFjaCgo
dmFsdWUpID0+IHsKLSAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICBpZiAodmFs
dWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICByZXN1bHQgKz0gKHJlc3VsdCA/ICcmJyA6ICcnKSArIGVuY29kZVVS
SUNvbXBvbmVudChwYXJhbWV0ZXIpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTsK
ICAgICAgICAgfSk7CkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0
YXRpYy9qcy9jb25maWd1cmF0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5
L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2NvbmZpZ3VyYXRpb24uanMJKHJldmlzaW9uIDI1
OTAwNikKKysrIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2Nv
bmZpZ3VyYXRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkxLDIwIEBAIGNsYXNzIENv
bmZpZ3VyYXRpb24gewogICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJy4nKTsKICAgICB9CiAK
KyAgICBzdGF0aWMgY29tYmluZSgpCisgICAgeworICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5n
dGgpCisgICAgICAgICAgICByZXR1cm4gbmV3IENvbmZpZ3VyYXRpb24oKTsKKyAgICAgICAgY29u
c3QgY29tYmluZWQgPSBuZXcgQ29uZmlndXJhdGlvbihhcmd1bWVudHNbMF0pOworICAgICAgICBm
b3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
Q29uZmlndXJhdGlvbi5tZW1iZXJzKCkuZm9yRWFjaChtZW1iZXIgPT4geworICAgICAgICAgICAg
ICAgIGlmIChhcmd1bWVudHNbaV1bbWVtYmVyXSAhPT0gY29tYmluZWRbbWVtYmVyXSkKKyAgICAg
ICAgICAgICAgICAgICAgY29tYmluZWRbbWVtYmVyXSA9IG51bGw7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gY29tYmluZWQ7CisgICAgfQorCiAgICAgY29uc3Ry
dWN0b3IoanNvbiA9IHt9KSB7CiAgICAgICAgIHRoaXMucGxhdGZvcm0gPSBqc29uLnBsYXRmb3Jt
ID8ganNvbi5wbGF0Zm9ybSA6IG51bGw7CiAgICAgICAgIHRoaXMudmVyc2lvbiA9IGpzb24udmVy
c2lvbiA/IENvbmZpZ3VyYXRpb24udmVyc2lvblRvSW50ZWdlcihqc29uLnZlcnNpb24pIDogbnVs
bDsKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2Zh
aWx1cmVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3Zp
ZXcvc3RhdGljL2pzL2ZhaWx1cmVzLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL3Jlc3VsdHNk
YnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2ZhaWx1cmVzLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTYwIEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisvLyBhcmUg
bWV0OgorLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisvLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiCisvLyBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKy8vIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKy8vIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworLy8gQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorLy8gQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKy8vIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworLy8gSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKy8vIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisvLyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisvLyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB7cXVlcnlUb1BhcmFtcywgcGFyYW1zVG9RdWVy
eSwgUXVlcnlNb2RpZmllciwgfSBmcm9tICcvYXNzZXRzL2pzL2NvbW1vbi5qcyc7CitpbXBvcnQg
e0V4cGVjdGF0aW9uc30gZnJvbSAnL2Fzc2V0cy9qcy9leHBlY3RhdGlvbnMuanMnOworaW1wb3J0
IHtDb25maWd1cmF0aW9ufSBmcm9tICcvYXNzZXRzL2pzL2NvbmZpZ3VyYXRpb24uanMnOworCitj
bGFzcyBGYWlsdXJlcyB7CisgICAgc3RhdGljIGZyb21FbmRwb2ludChzdWl0ZSwgdW5leHBlY3Rl
ZD1mYWxzZSwgY29uZmlndXJhdGlvbj1udWxsLCB1dWlkPW51bGwsIHN0YXJ0X3RpbWU9bnVsbCkK
KyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWpl
Y3QpIHsKKyAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGNvbmZpZ3VyYXRpb24gPyBjb25maWd1
cmF0aW9uLnRvUGFyYW1zKCkgOiB7fTsKKyAgICAgICAgICAgIHBhcmFtcy5jb2xsYXBzZWQgPSBb
ZmFsc2VdOworICAgICAgICAgICAgcGFyYW1zLnVuZXhwZWN0ZWQgPSBbdW5leHBlY3RlZF07Cisg
ICAgICAgICAgICBpZiAodXVpZCkgeworICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5
KHV1aWQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh1dWlkLmxlbmd0aCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy5hZnRlcl91dWlkID0gW3V1aWRbMF1dOworICAgICAgICAg
ICAgICAgICAgICBpZiAodXVpZC5sZW5ndGggPiAxKQorICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zLmJlZm9yZV91dWlkID0gW3V1aWRbMV1dOworICAgICAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgICAgICBwYXJhbXMudXVpZCA9IFt1dWlkXTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChzdGFydF90aW1lKSB7CisgICAgICAgICAgICAgICAgaWYgKEFycmF5
LmlzQXJyYXkoc3RhcnRfdGltZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0X3Rp
bWUubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWZ0ZXJfdGltZSA9
IFtzdGFydF90aW1lWzBdXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5iZWZvcmVf
dGltZSA9IFtzdGFydF90aW1lWzBdXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBpZiAoc3RhcnRfdGltZS5sZW5ndGggPiAxKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zLmJlZm9yZV90aW1lcyA9IFtzdGFydF90aW1lWzFdXTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWZ0ZXJfdGltZSA9IFtz
dGFydF90aW1lWzBdXTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmJlZm9yZV90aW1lID0g
W3N0YXJ0X3RpbWVbMV1dOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZmV0Y2goYGFwaS9mYWlsdXJlcy8ke3N1aXRlfT8ke3BhcmFtc1RvUXVlcnkocGFy
YW1zKX1gKS50aGVuKHJlc3BvbnNlID0+IHsKKyAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0g
W107CisgICAgICAgICAgICAgICAgcmVzcG9uc2UuanNvbigpLnRoZW4oanNvbiA9PiB7CisgICAg
ICAgICAgICAgICAgICAgIGpzb24uZm9yRWFjaCgocGFpcnMpID0+IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBhaXJzLnJlc3VsdHMuZm9yRWFjaCgocnVuKSA9PiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IEZhaWx1cmVzKHN1aXRlLCBuZXcgQ29uZmln
dXJhdGlvbihwYWlycy5jb25maWd1cmF0aW9uKSwgcnVuKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIHJl
c29sdmUocmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pLmNhdGNo
KGVycm9yID0+IHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbG9hZCBmYWlscywgbG9nIHRo
ZSBlcnJvciBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKEpTT04u
c3RyaW5naWZ5KGVycm9yLCBudWxsLCA0KSk7CisgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9y
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29t
YmluZSgpCisgICAgeworICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKKworICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgRmFpbHVyZXMoYXJn
dW1lbnRzWzBdLnN1aXRlKTsKKyAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbnMgPSBbXTsKKwor
ICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkgeworICAg
ICAgICAgICAgY29uZmlndXJhdGlvbnMucHVzaChhcmd1bWVudHNbaV0uY29uZmlndXJhdGlvbik7
CisgICAgICAgICAgICByZXN1bHQuYWdncmVnYXRpbmcgKz0gYXJndW1lbnRzW2ldLmFnZ3JlZ2F0
aW5nOworICAgICAgICAgICAgcmVzdWx0LnN0YXJ0X3RpbWVfcmFuZ2UgPSBbCisgICAgICAgICAg
ICAgICAgTWF0aC5taW4ocmVzdWx0LnN0YXJ0X3RpbWVfcmFuZ2VbMF0sIGFyZ3VtZW50c1tpXS5z
dGFydF90aW1lX3JhbmdlWzBdKSwKKyAgICAgICAgICAgICAgICBNYXRoLm1heChyZXN1bHQuc3Rh
cnRfdGltZV9yYW5nZVsxXSwgYXJndW1lbnRzW2ldLnN0YXJ0X3RpbWVfcmFuZ2VbMV0pLAorICAg
ICAgICAgICAgXTsKKyAgICAgICAgICAgIHJlc3VsdC51dWlkX3JhbmdlID0gWworICAgICAgICAg
ICAgICAgIE1hdGgubWluKHJlc3VsdC51dWlkX3JhbmdlWzBdLCBhcmd1bWVudHNbaV0udXVpZF9y
YW5nZVswXSksCisgICAgICAgICAgICAgICAgTWF0aC5tYXgocmVzdWx0LnV1aWRfcmFuZ2VbMV0s
IGFyZ3VtZW50c1tpXS51dWlkX3JhbmdlWzFdKSwKKyAgICAgICAgICAgIF07CisKKyAgICAgICAg
ICAgIC8vIENvbWJpbmUKKyAgICAgICAgICAgIEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXMuZm9y
RWFjaCh0eXBlID0+IHsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCB0ZXN0IGluIGFyZ3VtZW50
c1tpXVt0eXBlXSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0W3R5cGVdW3Rlc3Rd
ID09PSB1bmRlZmluZWQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbdHlwZV1bdGVz
dF0gPSBhcmd1bWVudHNbaV1bdHlwZV1bdGVzdF07CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFt0eXBlXVt0ZXN0XSArPSBhcmd1bWVudHNb
aV1bdHlwZV1bdGVzdF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgICAgIC8vIFByaW9yaXRpemUgZmFpbHVyZXMKKyAgICAgICAgICAgIGNvbnN0IHJlbWFp
bmluZ1R5cGVzID0gWy4uLkV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXNdOworICAgICAgICAgICAg
d2hpbGUgKHJlbWFpbmluZ1R5cGVzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgICAgICBjb25z
dCB0b1JlbW92ZSA9IFtdOworICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUeXBlID0gcmVt
YWluaW5nVHlwZXNbMF07CisgICAgICAgICAgICAgICAgcmVtYWluaW5nVHlwZXMuc2hpZnQoKTsK
KworICAgICAgICAgICAgICAgIGZvciAobGV0IHRlc3QgaW4gcmVzdWx0W2N1cnJlbnRUeXBlXSkg
eworICAgICAgICAgICAgICAgICAgICBsZXQgd29yc3RUeXBlID0gY3VycmVudFR5cGU7CisgICAg
ICAgICAgICAgICAgICAgIHJlbWFpbmluZ1R5cGVzLmZvckVhY2godHlwZSA9PiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocmVzdWx0W3R5cGVdW3Rlc3RdICE9PSB1bmRlZmluZWQpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yc3RUeXBlID0gdHlwZTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh3b3JzdFR5cGUgPT0gY3VycmVu
dFR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0W3dvcnN0VHlwZV1bdGVzdF0gKz0gcmVzdWx0W2N1cnJlbnRUeXBlXVt0ZXN0
XTsKKyAgICAgICAgICAgICAgICAgICAgdG9SZW1vdmUucHVzaCh0ZXN0KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgdG9SZW1vdmUuZm9yRWFjaCh0ZXN0ID0+IHsKKyAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIHJlc3VsdFtjdXJyZW50VHlwZV1bdGVzdF07CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LmNv
bmZpZ3VyYXRpb24gPSBDb25maWd1cmF0aW9uLmNvbWJpbmUoLi4uY29uZmlndXJhdGlvbnMpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGNvbnN0cnVjdG9yKHN1aXRlLCBj
b25maWd1cmF0aW9uID0gbnVsbCwganNvbiA9IG51bGwpIHsKKyAgICAgICAgdGhpcy5zdWl0ZSA9
IHN1aXRlOworICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uID8gbmV3
IENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbikgOiBuZXcgQ29uZmlndXJhdGlvbigpOworCisg
ICAgICAgIEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXMuZm9yRWFjaCh0eXBlID0+IHsKKyAgICAg
ICAgICAgIHRoaXNbdHlwZV0gPSB7fTsKKyAgICAgICAgfSk7CisgICAgICAgIGlmIChqc29uID09
PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLmFnZ3JlZ2F0aW5nID0gMDsKKyAgICAgICAgICAg
IGNvbnN0IGN1cnJlbnRUaW1lID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7CisgICAg
ICAgICAgICB0aGlzLnN0YXJ0X3RpbWVfcmFuZ2UgPSBbY3VycmVudFRpbWUsIDBdOworICAgICAg
ICAgICAgdGhpcy51dWlkX3JhbmdlID0gW2N1cnJlbnRUaW1lICogMTAwLCAwXTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuYWdncmVnYXRpbmcgPSAxOwor
ICAgICAgICB0aGlzLnN0YXJ0X3RpbWVfcmFuZ2UgPSBbanNvbi5zdGFydF90aW1lLCBqc29uLnN0
YXJ0X3RpbWVdOworICAgICAgICB0aGlzLnV1aWRfcmFuZ2UgPSBbanNvbi51dWlkLCBqc29uLnV1
aWRdOworICAgICAgICBmb3IgKHZhciBwYXJhbWV0ZXIgaW4ganNvbikgeworICAgICAgICAgICAg
aWYgKHBhcmFtZXRlciA9PT0gJ3V1aWQnIHx8IHBhcmFtZXRlciA9PT0gJ3N0YXJ0X3RpbWUnKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY29uc3QgdHlwZSA9IEV4cGVj
dGF0aW9ucy50eXBlRm9ySWQoanNvbltwYXJhbWV0ZXJdKTsKKyAgICAgICAgICAgIHRoaXNbdHlw
ZV1bcGFyYW1ldGVyXSA9IDE7CisgICAgICAgIH0KKyAgICB9Cit9OworCitleHBvcnQge0ZhaWx1
cmVzfTsKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pz
L2ludmVzdGlnYXRlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNk
YnB5L3ZpZXcvc3RhdGljL2pzL2ludmVzdGlnYXRlLmpzCShyZXZpc2lvbiAyNTkwMDYpCisrKyBU
b29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9pbnZlc3RpZ2F0ZS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQCBpbXBvcnQge0NvbW1pdEJhbmt9IGZy
b20gJy9hc3NldHMvanMvY29tCiBpbXBvcnQge3F1ZXJ5VG9QYXJhbXMsIHBhcmFtc1RvUXVlcnks
IFF1ZXJ5TW9kaWZpZXIsIH0gZnJvbSAnL2Fzc2V0cy9qcy9jb21tb24uanMnOwogaW1wb3J0IHtD
b25maWd1cmF0aW9ufSBmcm9tICcvYXNzZXRzL2pzL2NvbmZpZ3VyYXRpb24uanMnCiBpbXBvcnQg
e0V4cGVjdGF0aW9uc30gZnJvbSAnL2Fzc2V0cy9qcy9leHBlY3RhdGlvbnMuanMnOworaW1wb3J0
IHtGYWlsdXJlc30gZnJvbSAnL2Fzc2V0cy9qcy9mYWlsdXJlcy5qcyc7CiAKIGZ1bmN0aW9uIGNv
bW1pdHNGb3JVdWlkKHV1aWQpIHsKICAgICByZXR1cm4gYENvbW1pdHM6ICR7Q29tbWl0QmFuay5j
b21taXRzRHVyaW5nVXVpZCh1dWlkKS5tYXAoKGNvbW1pdCkgPT4gewpAQCAtMTAxLDYgKzEwMiw1
NCBAQCBmdW5jdGlvbiBwZXJjZW50YWdlKHZhbHVlLCBtYXgpCiAgICAgcmV0dXJuIGAke3Jlc3Vs
dH0gJWAKIH0KIAorZnVuY3Rpb24gcHJpb3JpdGl6ZWRGYWlsdXJlcyhmYWlsdXJlcywgbWF4ID0g
MCkKK3sKKyAgICBpZiAoZmFpbHVyZXMgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgcmV0dXJuICcn
OworCisgICAgaWYgKGZhaWx1cmVzID09PSBudWxsKQorICAgICAgICByZXR1cm4gYDxkaXYgY2xh
c3M9ImxvYWRlciI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3Bpbm5lciI+PC9kaXY+
CisgICAgICAgICAgICA8L2Rpdj5gOworICAgIGxldCBmYWlsdXJlc1RvRGlzcGxheSA9IFtdOwor
ICAgIEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXMuZm9yRWFjaCh0eXBlID0+IHsKKyAgICAgICAg
Zm9yIChsZXQgdGVzdE5hbWUgaW4gZmFpbHVyZXNbdHlwZV0pIHsKKyAgICAgICAgICAgIGZhaWx1
cmVzVG9EaXNwbGF5LnB1c2goeworICAgICAgICAgICAgICAgIGZhaWx1cmU6IHR5cGUsCisgICAg
ICAgICAgICAgICAgdGVzdDogdGVzdE5hbWUsCisgICAgICAgICAgICAgICAgY291bnQ6IGZhaWx1
cmVzLmFnZ3JlZ2F0aW5nLAorICAgICAgICAgICAgICAgIGZhaWx1cmVDb3VudDogZmFpbHVyZXNb
dHlwZV1bdGVzdE5hbWVdLAorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9KTsKKyAg
ICBmYWlsdXJlc1RvRGlzcGxheS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAgY29uc3Qg
dHlwZUNvbXBhcmUgPSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKEV4cGVjdGF0aW9ucy5m
YWlsdXJlVHlwZU1hcFthLmZhaWx1cmVdKSAtIEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQo
RXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlTWFwW2IuZmFpbHVyZV0pOworICAgICAgICBpZiAodHlw
ZUNvbXBhcmUpCisgICAgICAgICAgICByZXR1cm4gdHlwZUNvbXBhcmU7CisgICAgICAgIGlmIChh
LmZhaWx1cmVDb3VudCAtIGIuZmFpbHVyZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuIGEuZmFp
bHVyZUNvdW50IC0gYi5mYWlsdXJlQ291bnQ7CisgICAgICAgIHJldHVybiAoYS50ZXN0KS5sb2Nh
bGVDb21wYXJlKGIudGVzdCk7CisgICAgfSk7CisKKyAgICBpZiAobWF4ICYmIGZhaWx1cmVzVG9E
aXNwbGF5Lmxlbmd0aCA+IG1heCkgeworICAgICAgICBmYWlsdXJlc1RvRGlzcGxheSA9IGZhaWx1
cmVzVG9EaXNwbGF5LnNwbGljZSgwLCBtYXgpOworICAgICAgICBmYWlsdXJlc1RvRGlzcGxheVtt
YXggLSAxXSA9IG51bGw7CisgICAgfQorCisKKworICAgIHJldHVybiBgPGRpdj4ke2ZhaWx1cmVz
VG9EaXNwbGF5Lm1hcChmYWlsdXJlID0+IHsKKyAgICAgICAgaWYgKGZhaWx1cmUgPT09IG51bGwp
CisgICAgICAgICAgICByZXR1cm4gYDxhIHN0eWxlPSJtYXJnaW4tbGVmdDogY2FsYyh2YXIoLS1t
ZWRpdW1TaXplKSArIDE2cHgpIiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iL2ludmVzdGlnYXRlIj5N
b3JlLi4uIChXSVApPC9hPmA7CisgICAgICAgIHJldHVybiBgPGRpdj4KKyAgICAgICAgICAgICAg
ICA8ZGl2IGNsYXNzPSJkb3QgJHtmYWlsdXJlLmZhaWx1cmV9IHNtYWxsIj4KKyAgICAgICAgICAg
ICAgICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1h
bDttYXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcFtmYWlsdXJlLmZhaWx1
cmVdfTwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxhIGNs
YXNzPSJ0ZXh0IGJsb2NrIiBzdHlsZT0id2lkdGg6IGNhbGMoMTAwJSAtIHZhcigtLW1lZGl1bVNp
emUpIC0gMTZweCk7IG92ZXJmbG93OiBoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IHRleHQt
b3ZlcmZsb3c6IGVsbGlwc2lzOyIgaHJlZj0iLz9zdWl0ZT0ke2ZhaWx1cmVzLnN1aXRlfSZ0ZXN0
PSR7ZmFpbHVyZS50ZXN0fSI+JHtmYWlsdXJlLnRlc3R9PC9hPgorICAgICAgICAgICAgPC9kaXY+
YDsKKyAgICB9KS5qb2luKCcnKX08L2Rpdj5gOworfQorCiBmdW5jdGlvbiByZXN1bHRzRm9yRGF0
YShkYXRhLCB3aWxsRmlsdGVyRXhwZWN0ZWQgPSBmYWxzZSkKIHsKICAgICBjb25zdCByZXN1bHQg
PSBbXTsKQEAgLTExMCwzNCArMTU5LDMzIEBAIGZ1bmN0aW9uIHJlc3VsdHNGb3JEYXRhKGRhdGEs
IHdpbGxGaWx0ZXIKICAgICAgICAgdGVzdHNSYW4gPSBkYXRhLnN0YXRzLnRlc3RzX3J1bjsKICAg
ICAgICAgdG90YWxUZXN0cyA9IGRhdGEuc3RhdHMudGVzdHNfcnVuICsgKGRhdGEuc3RhdHMudGVz
dHNfc2tpcHBlZCA/IGRhdGEuc3RhdHMudGVzdHNfc2tpcHBlZCA6IDApOwogICAgIH0KLSAgICBy
ZXN1bHQucHVzaChgUmFuICR7dGVzdHNSYW4udG9Mb2NhbGVTdHJpbmcoKX0gb2YgJHt0b3RhbFRl
c3RzLnRvTG9jYWxlU3RyaW5nKCl9IHRlc3RzYCk7CisgICAgbGV0IGRvdHNEaXNwbGF5ZWQgPSAw
OworICAgIHJlc3VsdC5wdXNoKGA8ZGl2PlJhbiAke3Rlc3RzUmFuLnRvTG9jYWxlU3RyaW5nKCl9
IG9mICR7dG90YWxUZXN0cy50b0xvY2FsZVN0cmluZygpfSB0ZXN0c2ApOwogICAgIGlmIChkYXRh
LmFjdHVhbCkgewogICAgICAgICBjb25zdCB0eXBlID0gRXhwZWN0YXRpb25zLnR5cGVGb3JJZChk
YXRhLmFjdHVhbCk7Ci0gICAgICAgIHJlc3VsdC5wdXNoKGA8ZGl2PgotICAgICAgICAgICAgICAg
IEFjdHVhbDogJHtkYXRhLmFjdHVhbH0KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb3Qg
JHt0eXBlfSBzbWFsbCI+Ci0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbnkgdGV4
dCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7bWFyZ2luLXRvcDogMHB4Ij4ke0V4cGVjdGF0
aW9ucy5zeW1ib2xNYXBbdHlwZV19PC9kaXY+Ci0gICAgICAgICAgICAgICAgPC9kaXY+CisgICAg
ICAgICsrZG90c0Rpc3BsYXllZDsKKyAgICAgICAgcmVzdWx0LnB1c2goYEFjdHVhbDogJHtkYXRh
LmFjdHVhbH0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvdCAke3R5cGV9IHNtYWxsIj4KKyAg
ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxlPSJmb250LXdlaWdodDog
bm9ybWFsO21hcmdpbi10b3A6IDBweCI+JHtFeHBlY3RhdGlvbnMuc3ltYm9sTWFwW3R5cGVdfTwv
ZGl2PgogICAgICAgICAgICAgPC9kaXY+YCk7CiAgICAgfQogICAgIGlmIChkYXRhLmV4cGVjdGVk
KSB7CiAgICAgICAgIGNvbnN0IHR5cGUgPSBFeHBlY3RhdGlvbnMudHlwZUZvcklkKGRhdGEuZXhw
ZWN0ZWQpOwotICAgICAgICByZXN1bHQucHVzaChgPGRpdj4KLSAgICAgICAgICAgICAgICBFeHBl
Y3RlZDogJHtkYXRhLmV4cGVjdGVkfQotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvdCAk
e3R5cGV9IHNtYWxsIj4KLSAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0
IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDttYXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRp
b25zLnN5bWJvbE1hcFt0eXBlXX08L2Rpdj4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAg
ICAgKytkb3RzRGlzcGxheWVkOworICAgICAgICByZXN1bHQucHVzaChgRXhwZWN0ZWQ6ICR7ZGF0
YS5leHBlY3RlZH0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvdCAke3R5cGV9IHNtYWxsIj4K
KyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxlPSJmb250LXdlaWdo
dDogbm9ybWFsO21hcmdpbi10b3A6IDBweCI+JHtFeHBlY3RhdGlvbnMuc3ltYm9sTWFwW3R5cGVd
fTwvZGl2PgogICAgICAgICAgICAgPC9kaXY+YCk7CiAgICAgfQogICAgIGlmIChkYXRhLnN0YXRz
ICYmIGRhdGEuc3RhdHMudGVzdHNfcnVuKSB7CiAgICAgICAgIGNvbnN0IHN1Y2NlZWRlZCA9IGRh
dGEuc3RhdHMudGVzdHNfcnVuIC0gZGF0YS5zdGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJFeHBlY3Rl
ZCA/ICdfdW5leHBlY3RlZF8nIDogJ18nfWZhaWxlZGBdOwotICAgICAgICBpZiAoc3VjY2VlZGVk
KQotICAgICAgICAgICAgcmVzdWx0LnB1c2goYDxkaXY+Ci0gICAgICAgICAgICAgICAgICAgIDxk
aXYgY2xhc3M9ImRvdCBzdWNjZXNzIHNtYWxsIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxk
aXYgY2xhc3M9InRpbnkgdGV4dCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7bWFyZ2luLXRv
cDogMHB4Ij4ke0V4cGVjdGF0aW9ucy5zeW1ib2xNYXAuc3VjY2Vzc308L2Rpdj4KLSAgICAgICAg
ICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgICR7ZGF0YS5zdGFydF90aW1l
ID8gc3VjY2VlZGVkLnRvTG9jYWxlU3RyaW5nKCkgOiBwZXJjZW50YWdlKHN1Y2NlZWRlZCwgZGF0
YS5zdGF0cy50ZXN0c19ydW4pfSBwYXNzZWQKLSAgICAgICAgICAgICAgICA8L2Rpdj5gKTsKKyAg
ICAgICAgaWYgKHN1Y2NlZWRlZCkgeworICAgICAgICAgICAgKytkb3RzRGlzcGxheWVkOworICAg
ICAgICAgICAgcmVzdWx0LnB1c2goYDxkaXYgY2xhc3M9ImRvdCBzdWNjZXNzIHNtYWxsIj4KKyAg
ICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0IiBzdHlsZT0iZm9udC13ZWln
aHQ6IG5vcm1hbDttYXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcC5zdWNj
ZXNzfTwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICR7ZGF0
YS5zdGFydF90aW1lID8gc3VjY2VlZGVkLnRvTG9jYWxlU3RyaW5nKCkgOiBwZXJjZW50YWdlKHN1
Y2NlZWRlZCwgZGF0YS5zdGF0cy50ZXN0c19ydW4pfSBwYXNzZWRgKTsKKyAgICAgICAgfQogICAg
IH0KICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXMubGVu
Z3RoOyBpKyspIHsKICAgICAgICAgaWYgKCFkYXRhLnN0YXRzKQpAQCAtMTQ4LDEzICsxOTYsMTQg
QEAgZnVuY3Rpb24gcmVzdWx0c0ZvckRhdGEoZGF0YSwgd2lsbEZpbHRlcgogICAgICAgICAgICAg
dmFsdWUgLT0gZGF0YS5zdGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJFeHBlY3RlZCA/ICdfdW5leHBl
Y3RlZF8nIDogJ18nfSR7RXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlc1tpICsgMV19YF07CiAgICAg
ICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVzdWx0LnB1
c2goYDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG90ICR7dHlwZX0gc21hbGwi
PgotICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxlPSJmb250
LXdlaWdodDogbm9ybWFsO21hcmdpbi10b3A6IDBweCI+JHtFeHBlY3RhdGlvbnMuc3ltYm9sTWFw
W3R5cGVdfTwvZGl2PgotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICR7
ZGF0YS5zdGFydF90aW1lID8gdmFsdWUudG9Mb2NhbGVTdHJpbmcoKSA6IHBlcmNlbnRhZ2UodmFs
dWUsIGRhdGEuc3RhdHMudGVzdHNfcnVuKX0gJHt0eXBlfQotICAgICAgICAgICAgPC9kaXY+YCk7
CisgICAgICAgICsrZG90c0Rpc3BsYXllZDsKKyAgICAgICAgcmVzdWx0LnB1c2goYDxkaXYgY2xh
c3M9ImRvdCAke3R5cGV9IHNtYWxsIj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW55
IHRleHQiIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsO21hcmdpbi10b3A6IDBweCI+JHtFeHBl
Y3RhdGlvbnMuc3ltYm9sTWFwW3R5cGVdfTwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAg
ICAgICAgICAke2RhdGEuc3RhcnRfdGltZSA/IHZhbHVlLnRvTG9jYWxlU3RyaW5nKCkgOiBwZXJj
ZW50YWdlKHZhbHVlLCBkYXRhLnN0YXRzLnRlc3RzX3J1bil9ICR7dHlwZX1gKTsKICAgICB9Cisg
ICAgcmVzdWx0LnB1c2goJzwvZGl2PicpOworICAgIHJlc3VsdC5wdXNoKHByaW9yaXRpemVkRmFp
bHVyZXMoZGF0YS5mYWlsdXJlcywgTWF0aC5tYXgoNiAtIGRvdHNEaXNwbGF5ZWQsIDEpKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzAwLDggKzM0OSw0MCBAQCBjbGFzcyBfSW52ZXN0
aWdhdGVEcmF3ZXIgewogICAgICAgICB0aGlzLnN1aXRlID0gc3VpdGU7CiAgICAgICAgIHRoaXMu
YWdyZWdhdGUgPSBhZ3JlZ2F0ZURhdGE7CiAgICAgICAgIHRoaXMuZGF0YSA9IGFsbERhdGE7Cisg
ICAgICAgIHRoaXMuZGlzcGF0Y2goKTsKICAgICAgICAgdGhpcy5zZWxlY3QoMCk7CiAgICAgfQor
ICAgIGRpc3BhdGNoKCkgeworICAgICAgICBpZiAoIXRoaXMuZGF0YS5sZW5ndGgpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YVtpXS5zdGF0cykKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaChk
YXR1bSA9PiB7CisgICAgICAgICAgICBkYXR1bS5mYWlsdXJlcyA9IG51bGw7CisgICAgICAgIH0p
OworICAgICAgICB0aGlzLmFncmVnYXRlLmZhaWx1cmVzID0gbnVsbDsKKworICAgICAgICBGYWls
dXJlcy5mcm9tRW5kcG9pbnQoCisgICAgICAgICAgICB0aGlzLnN1aXRlLAorICAgICAgICAgICAg
dGhpcy53aWxsRmlsdGVyRXhwZWN0ZWQsCisgICAgICAgICAgICB0aGlzLmFncmVnYXRlLmNvbmZp
Z3VyYXRpb24sCisgICAgICAgICAgICB0aGlzLmFncmVnYXRlLnV1aWQsCisgICAgICAgICAgICB0
aGlzLmFncmVnYXRlLnN0YXJ0X3RpbWUgPyB0aGlzLmFncmVnYXRlLnN0YXJ0X3RpbWUgOiBudWxs
LAorICAgICAgICApLnRoZW4oZmFpbHVyZXMgPT4geworICAgICAgICAgICAgdGhpcy5hZ3JlZ2F0
ZS5mYWlsdXJlcyA9IEZhaWx1cmVzLmNvbWJpbmUoLi4uZmFpbHVyZXMpOworICAgICAgICAgICAg
dGhpcy5kYXRhLmZvckVhY2goZGF0dW0gPT4geworICAgICAgICAgICAgICAgIGRhdHVtLmZhaWx1
cmVzID0gbmV3IEZhaWx1cmVzKHRoaXMuc3VpdGUpOworICAgICAgICAgICAgICAgIGZhaWx1cmVz
LmZvckVhY2goZmFpbHVyZSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXR1bS5jb25m
aWd1cmF0aW9uLmNvbXBhcmUoZmFpbHVyZS5jb25maWd1cmF0aW9uKSA9PT0gMCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdHVtLmZhaWx1cmVzID0gRmFpbHVyZXMuY29tYmluZShkYXR1bS5m
YWlsdXJlcywgZmFpbHVyZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIHRoaXMuc2VsZWN0KHRoaXMuc2VsZWN0ZWQpOworICAgICAgICB9KTsKKyAg
ICB9CiAgICAgY29sbGFwc2UoKSB7CiAgICAgICAgIGlmICghdGhpcy5pc1JlbmRlcmVkKCkpCiAg
ICAgICAgICAgICByZXR1cm47CkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92
aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9yZXN1bHRzZGJw
eS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qcwkocmV2aXNpb24gMjU5MDA2
KQorKysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvdGltZWxp
bmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTg5NCw2ICs4OTQsNyBAQCBmdW5jdGlvbiBMZWdlbmQo
Y2FsbGJhY2s9bnVsbCwgcGx1cmFsPWZhCiAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsRmls
dGVyRXhwZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTGFiZWxFdmVu
dHMuYWRkKHdpbGxGaWx0ZXJFeHBlY3RlZCk7CiAgICAgICAgICAgICAgICAgICAgIEludmVzdGln
YXRlRHJhd2VyLndpbGxGaWx0ZXJFeHBlY3RlZCA9IHdpbGxGaWx0ZXJFeHBlY3RlZDsKKyAgICAg
ICAgICAgICAgICAgICAgSW52ZXN0aWdhdGVEcmF3ZXIuZGlzcGF0Y2goKTsKICAgICAgICAgICAg
ICAgICAgICAgSW52ZXN0aWdhdGVEcmF3ZXIuc2VsZWN0KEludmVzdGlnYXRlRHJhd2VyLnNlbGVj
dGVkKTsKICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICB9
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395102</attachid>
            <date>2020-03-31 15:58:58 -0700</date>
            <delta_ts>2020-04-01 18:16:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209562-20200331155856.patch</filename>
            <type>text/plain</type>
            <size>58384</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI1OTMxMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU5IEBACisyMDIwLTAzLTMxICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICByZXN1bHRzLndlYmtpdC5vZzogQWRkIGludmVzdGlnYXRpb24gZW5kcG9p
bnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTU2
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBh
biBlbmRwb2ludCB0aGF0IGFsbG93cyB1c2VycyB0byBsaXN0IGFsbCB0ZXN0IGZhaWx1cmVzIGdp
dmVuIHNvbWUgY3JpdGVyaWEsIGFuZAorICAgICAgICBwcm92aWRlIGEgcGFydGlhbCBsaXN0IG9m
IGZhaWx1cmVzIGluIHRoZSBpbnZlc3RpZ2F0aW9uIGRyYXdlci4KKworICAgICAgICAqIHJlc3Vs
dHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2NvbW1pdC5qczoKKyAgICAgICAgKENv
bW1pdFRhYmxlKTogTGluayBjb21taXQgdG8gaW52ZXN0aWdhdGlvbiBlbmRwb2ludC4KKyAgICAg
ICAgKF9Db21taXRCYW5rLnByb3RvdHlwZS5sYXRlc3QpOiBQb3B1bGF0ZSB0aGUgQ29tbWl0QmFu
ayB3aXRoIHRoZSBsYXN0IHggY29tbWl0cy4KKyAgICAgICAgKF9Db21taXRCYW5rLnByb3RvdHlw
ZS5fbG9hZCk6IExvYWQgYSBzaW5nbGUgY29tbWl0IGlmIHRoZSBiZWZvcmUgYW5kIGFmdGVyIHV1
aWQgbWF0Y2guCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMv
anMvY29tbW9uLmpzOgorICAgICAgICAocGFyYW1zVG9RdWVyeSk6IEZhbHNlIHNob3VsZCBiZSBh
ZGRlZCBhcyBhIHBhcmFtZXRlciwgaWYgcHJvdmlkZWQuCisgICAgICAgIChwZXJjZW50YWdlKTog
TW92ZWQgZnJvbSBpbnZlc3RpZ2F0ZS5qcy4KKyAgICAgICAgKGVsYXBzZWRUaW1lKTogRGl0dG8u
CisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvY29uZmln
dXJhdGlvbi5qczoKKyAgICAgICAgKENvbmZpZ3VyYXRpb24uY29tYmluZSk6IEFsbG93IGNvbmZp
Z3VyYXRpb25zIHRvIGJlIGNvbWJpbmVkIHRvIGEgc2luZ2xlLCBtb3JlIGdlbmVyYWwsIGNvbmZp
Z3VyYXRpb24uCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMv
anMvZmFpbHVyZXMuanM6IEFkZGVkLgorICAgICAgICAoRmFpbHVyZXMucHJvdG90eXBlLmZyb21F
bmRwb2ludCk6IENvbnN0cnVjdCBhIGZhaWx1cmUgb2JqZWN0IGZyb20gdGhlIGZhaWx1cmVzIGVu
ZHBvaW50LgorICAgICAgICAoRmFpbHVyZXMuY29tYmluZSk6IENvbWJpbmUgdHdvIGZhaWx1cmUg
b2JqZWN0cyB0b2dldGhlci4KKyAgICAgICAgKEZhaWx1cmVzKToKKyAgICAgICAgKEZhaWx1cmVz
LnByb3RvdHlwZS50b1BhcmFtcyk6IENvbnZlcnQgb2JqZWN0IHRvIHBhcmFtZXRlcnMgZm9yIG90
aGVyIHJlc3VsdHMgZGF0YWJhc2UgcXVlcmllcy4KKyAgICAgICAgKiByZXN1bHRzZGJweS9yZXN1
bHRzZGJweS92aWV3L3N0YXRpYy9qcy9pbnZlc3RpZ2F0ZS5qczoKKyAgICAgICAgKGVsYXBzZWQp
OiBVc2VkIHNoYXJlZCB0aW1lIGVsYXBzZWQgZnVuY3Rpb24uCisgICAgICAgIChwZXJjZW50YWdl
KTogTW92ZWQgdG8gY29tbW9uLmpzLgorICAgICAgICAocHJpb3JpdGl6ZWRGYWlsdXJlcyk6IFJl
dHVybiBhIGRpdiB3aXRoIGEgdHJ1bmNhdGVkIGxpc3Qgb2YgdGVzdHMgd2hpY2ggZmFpbGVkLgor
ICAgICAgICAocmVzdWx0c0ZvckRhdGEpOiBJbmNsdWRlIHNvbWUgbnVtYmVyIG9mIHByaW9yaXRp
emVkIHRlc3QgZmFpbHVyZXMgYmFzZWQgb24gaG93IG1hbnkgYnViYmxlcyBhcmUKKyAgICAgICAg
YWxyZWFkeSBkaXNwbGF5ZWQuCisgICAgICAgIChfSW52ZXN0aWdhdGVEcmF3ZXIucHJvdG90eXBl
LmV4cGFuZCk6IERpc3BhdGNoIGZhaWx1cmUgcmVxdWVzdC4KKyAgICAgICAgKF9JbnZlc3RpZ2F0
ZURyYXdlci5wcm90b3R5cGUuZGlzcGF0Y2gpOiBTdGFydCByZXF1ZXN0IHRvIGZhaWx1cmVzIGVu
ZHBvaW50LgorICAgICAgICAqIHJlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pz
L3RpbWVsaW5lLmpzOgorICAgICAgICAoVGltZWxpbmVGcm9tRW5kcG9pbnQucHJvdG90eXBlLnJl
bmRlci5vbkRvdEVudGVyRmFjdG9yeSk6IEFkZCBsaW5rIHRvIGludmVzdGlnYXRpb24gZW5kcG9p
bnQuCisgICAgICAgIChMZWdlbmQpOiBXaGVuIHNlYXJjaCBwYXJhbWV0ZXJzIGNoYW5nZSwgd2Ug
bmVlZCB0byByZS1kaXNwYXRjaCBmYWlsdXJlIHJlcXVlc3RzLgorICAgICAgICAqIHJlc3VsdHNk
YnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3VpdGVfdmlldy5weToKKyAgICAgICAgKFN1aXRlVmlldy5f
c3VpdGVzX2Zvcl9pbnZlc3RpZ2F0aW9uKTogRmlsdGVyIHBhcmFtZXRlcnMgZm9yIGludmVzdGln
YXRpb24gZW5kcG9pbnQuCisgICAgICAgIChTdWl0ZVZpZXcuaW52ZXN0aWdhdGUpOiBSZXR1cm4g
aW52ZXN0aWdhdGlvbiBlbmRwb2ludCBodG1sIHRlbXBsYXRlLgorICAgICAgICAqIHJlc3VsdHNk
YnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL2ludmVzdGlnYXRlLmh0bWw6IEFkZGVkLgor
ICAgICAgICAod2lsbEZpbHRlckV4cGVjdGVkKTogQ2hlY2sgaWYgdGhlIHF1ZXJ5IHBhcmFtZXRl
cnMgaW5kaWNhdGUgdGhhdCBleHBlY3RlZCBmYWlsdXJlcyBhcmUgdG8gYmUgaWdub3JlZC4KKyAg
ICAgICAgKGNvbW1pdHNGb3JSYW5nZSk6IFJldHVybiBhIGxpc3Qgb2YgY29tbWl0cyBmb3IgYSB1
dWlkIHJhbmdlLgorICAgICAgICAoU3VpdGVGYWlsdXJlc1ZpZXcuY29uc3RydWN0b3IpOiBBYnN0
cmFjdGlvbiB0byBob2xkIHRoZSBpbnZlc3RpZ2F0aW9uIGRhdGEgZm9yIGEgc2luZ2xlIHN1aXRl
LgorICAgICAgICAoU3VpdGVGYWlsdXJlc1ZpZXcucmVsb2FkKTogRGlzcGF0Y2ggcmVxdWVzdHMg
dG8gdGhlIHJlc3VsdHMgYW5kIGZhaWx1cmVzIGVuZHBvaW50IHRvIHBvcHVsYXRlCisgICAgICAg
IGludmVzdGlnYXRpb24gZGF0YS4KKyAgICAgICAgKFN1aXRlRmFpbHVyZXNWaWV3LnNlbGVjdCk6
IEJ5IGRlZmF1bHQsIGZhaWx1cmVzIGZvciBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgYXJlIGNv
bGxhcHNlZCBpbnRvIGEgc2luZ2xlCisgICAgICAgIHZpZXcuIEFsbG93cyB0aGUgdXNlciB0byBp
dGVyYXRlIHRocm91Z2ggZWFjaCBjb25maWd1cmF0aW9uIHRoYXQgY29tcHJpc2VzIHRoZSB2aWV3
LgorICAgICAgICAoU3VpdGVGYWlsdXJlc1ZpZXcudG9TdHJpbmcpOgorICAgICAgICAocG9wdWxh
dGVSYW5nZXMpOiBFaXRoZXIgY29udmVydCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzIHRvIGEgcmFu
Z2UgdG8gc2VhcmNoIGZvciBmYWlsdXJlcyBhbmQgcmVzdWx0cworICAgICAgICBpbiwgb3IgdXNl
IHRoZSBtb3N0IHJlY2VudCBjb21taXQuCisgICAgICAgIChyZWxvYWQpOiBGb3JjZSBhbGwgc3Vp
dGUgdmlld3MgdG8gcmUtZGlzcGF0Y2ggcmVzdWx0cyBhbmQgZmFpbHVyZXMgcmVxdWVzdHMuCisg
ICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVz
dWx0cy5odG1sOiBBZGQgc3BhY2UgYmV0d2VlbiBzdWl0ZSBjb250ZW50IGFuZAorICAgICAgICB0
b3AgYmFyLgorICAgICAgICAqIHJlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdmlld19yb3V0
ZXMucHk6CisgICAgICAgIChWaWV3Um91dGVzLl9faW5pdF9fKTogQWRkIGludmVzdGlnYXRlIGVu
ZHBvaW50LgorCiAyMDIwLTAzLTMxICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgQWRkIFNQSSBXS1dlYnBhZ2VQcmVmZXJlbmNlcy5fdXNlckNv
bnRlbnRDb250cm9sbGVyCkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3
L3N1aXRlX3ZpZXcucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2Ri
cHkvdmlldy9zdWl0ZV92aWV3LnB5CShyZXZpc2lvbiAyNTkzMDEpCisrKyBUb29scy9yZXN1bHRz
ZGJweS9yZXN1bHRzZGJweS92aWV3L3N1aXRlX3ZpZXcucHkJKHdvcmtpbmcgY29weSkKQEAgLTEs
NCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxOSwgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc3LDYgKzc3LDM2IEBA
IGNsYXNzIFN1aXRlVmlldyhIYXNDb21taXRDb250ZXh0KToKICAgICBAbGltaXRfZm9yX3F1ZXJ5
KERFRkFVTFRfTElNSVQpCiAgICAgQGNvbmZpZ3VyYXRpb25fZm9yX3F1ZXJ5KCkKICAgICBAdGlt
ZV9yYW5nZV9mb3JfcXVlcnkoKQorICAgIGRlZiBfc3VpdGVzX2Zvcl9pbnZlc3RpZ2F0aW9uKAor
ICAgICAgICBzZWxmLCBzdWl0ZT1Ob25lLCBjb25maWd1cmF0aW9ucz1Ob25lLCByZWNlbnQ9Tm9u
ZSwKKyAgICAgICAgYnJhbmNoPU5vbmUsIGJlZ2luPU5vbmUsIGVuZD1Ob25lLAorICAgICAgICBi
ZWdpbl9xdWVyeV90aW1lPU5vbmUsIGVuZF9xdWVyeV90aW1lPU5vbmUsCisgICAgICAgIHVuZXhw
ZWN0ZWQ9Tm9uZSwKKyAgICAgICAgbGltaXQ9Tm9uZSwgKiprd2FyZ3MKKyAgICApOgorICAgICAg
ICBBc3NlcnRSZXF1ZXN0LmlzX3R5cGUoWydHRVQnXSkKKyAgICAgICAgQXNzZXJ0UmVxdWVzdC5x
dWVyeV9rd2FyZ3NfZW1wdHkoKiprd2FyZ3MpCisKKyAgICAgICAgd2l0aCBzZWxmLnVwbG9hZF9j
b250cm9sbGVyLnVwbG9hZF9jb250ZXh0OgorICAgICAgICAgICAgc3VpdGVzX2J5X2NvbmZpZ3Vy
YXRpb24gPSBzZWxmLnVwbG9hZF9jb250cm9sbGVyLnVwbG9hZF9jb250ZXh0LmZpbmRfc3VpdGVz
KGNvbmZpZ3VyYXRpb25zPWNvbmZpZ3VyYXRpb25zLCByZWNlbnQ9Ym9vbGVhbl9xdWVyeSgqcmVj
ZW50KVswXSBpZiByZWNlbnQgZWxzZSBUcnVlKQorICAgICAgICAgICAgY2FuZGlkYXRlX3N1aXRl
cyA9IHNldCgpCisgICAgICAgICAgICBmb3Igc3VpdGVzX2Zvcl9jb25maWcgaW4gc3VpdGVzX2J5
X2NvbmZpZ3VyYXRpb24udmFsdWVzKCk6CisgICAgICAgICAgICAgICAgZm9yIHMgaW4gc3VpdGVz
X2Zvcl9jb25maWc6CisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZV9zdWl0ZXMuYWRkKHMp
CisgICAgICAgICAgICByZXR1cm4gc29ydGVkKFtzIGZvciBzIGluIGNhbmRpZGF0ZV9zdWl0ZXMg
aWYgbm90IHN1aXRlIG9yIHMgaW4gc3VpdGVdKQorCisgICAgQFNpdGVNZW51LnJlbmRlcl93aXRo
X3NpdGVfbWVudSgpCisgICAgZGVmIGludmVzdGlnYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuZW52aXJvbm1lbnQuZ2V0X3RlbXBsYXRlKCdpbnZlc3RpZ2F0ZS5odG1s
JykucmVuZGVyKAorICAgICAgICAgICAgdGl0bGU9c2VsZi5zaXRlX21lbnUudGl0bGUsCisgICAg
ICAgICAgICBzdWl0ZXM9anNvbi5kdW1wcyhzZWxmLl9zdWl0ZXNfZm9yX2ludmVzdGlnYXRpb24o
KSksCisgICAgICAgICAgICAqKmt3YXJncykKKworICAgIEBxdWVyeV9hc19rd2FyZ3MoKQorICAg
IEB1dWlkX3JhbmdlX2Zvcl9xdWVyeSgpCisgICAgQGxpbWl0X2Zvcl9xdWVyeShERUZBVUxUX0xJ
TUlUKQorICAgIEBjb25maWd1cmF0aW9uX2Zvcl9xdWVyeSgpCisgICAgQHRpbWVfcmFuZ2VfZm9y
X3F1ZXJ5KCkKICAgICBkZWYgX3N1aXRlc19mb3Jfc2VhcmNoKAogICAgICAgICBzZWxmLCBzdWl0
ZT1Ob25lLCBjb25maWd1cmF0aW9ucz1Ob25lLCByZWNlbnQ9Tm9uZSwKICAgICAgICAgYnJhbmNo
PU5vbmUsIGJlZ2luPU5vbmUsIGVuZD1Ob25lLApJbmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVz
dWx0c2RicHkvdmlldy92aWV3X3JvdXRlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9yZXN1bHRz
ZGJweS9yZXN1bHRzZGJweS92aWV3L3ZpZXdfcm91dGVzLnB5CShyZXZpc2lvbiAyNTkzMDEpCisr
KyBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3ZpZXdfcm91dGVzLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTksIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC04NSw3ICs4NSw5IEBAIGNsYXNzIFZpZXdSb3V0ZXMoQXV0aGVkQmx1ZXByaW50KToKICAgICAg
ICAgc2VsZi5hZGRfdXJsX3J1bGUoJy9jb21taXQvcHJldmlvdXMnLCAnY29tbWl0X3ByZXZpb3Vz
Jywgc2VsZi5jb21taXRzLnByZXZpb3VzLCBtZXRob2RzPSgnR0VUJywpKQogICAgICAgICBzZWxm
LmFkZF91cmxfcnVsZSgnL2NvbW1pdC9uZXh0JywgJ2NvbW1pdF9uZXh0Jywgc2VsZi5jb21taXRz
Lm5leHQsIG1ldGhvZHM9KCdHRVQnLCkpCiAgICAgICAgIHNlbGYuYWRkX3VybF9ydWxlKCcvY29t
bWl0cycsICdjb21taXRzJywgc2VsZi5jb21taXRzLmNvbW1pdHMsIG1ldGhvZHM9KCdHRVQnLCkp
CisKICAgICAgICAgc2VsZi5hZGRfdXJsX3J1bGUoJy9zdWl0ZXMnLCAnc3VpdGVzJywgc2VsZi5z
dWl0ZXMucmVzdWx0cywgbWV0aG9kcz0oJ0dFVCcsKSkKKyAgICAgICAgc2VsZi5hZGRfdXJsX3J1
bGUoJy9pbnZlc3RpZ2F0ZScsICdpbnZlc3RpZ2F0ZScsIHNlbGYuc3VpdGVzLmludmVzdGlnYXRl
LCBtZXRob2RzPSgnR0VUJywpKQogCiAgICAgICAgIHNlbGYuYWRkX3VybF9ydWxlKCcvdXJscy9x
dWV1ZScsICd1cmxzLXF1ZXVlJywgc2VsZi5jaS5xdWV1ZSwgbWV0aG9kcz0oJ0dFVCcsKSkKICAg
ICAgICAgc2VsZi5hZGRfdXJsX3J1bGUoJy91cmxzL3dvcmtlcicsICd1cmxzLXdvcmtlcicsIHNl
bGYuY2kud29ya2VyLCBtZXRob2RzPSgnR0VUJywpKQpAQCAtMTA3LDYgKzEwOSw3IEBAIGNsYXNz
IFZpZXdSb3V0ZXMoQXV0aGVkQmx1ZXByaW50KToKIAogICAgICAgICBzZWxmLnNpdGVfbWVudS5h
ZGRfZW5kcG9pbnQoJ01haW4nLCBzZWxmLm5hbWUgKyAnLm1haW4nLCBwYXJhbWV0ZXJzPVsnYnJh
bmNoJ10pCiAgICAgICAgIHNlbGYuc2l0ZV9tZW51LmFkZF9lbmRwb2ludCgnU3VpdGVzJywgc2Vs
Zi5uYW1lICsgJy5zdWl0ZXMnLCBwYXJhbWV0ZXJzPVsnYnJhbmNoJ10pCisgICAgICAgIHNlbGYu
c2l0ZV9tZW51LmFkZF9lbmRwb2ludCgnSW52ZXN0aWdhdGUnLCBzZWxmLm5hbWUgKyAnLmludmVz
dGlnYXRlJywgcGFyYW1ldGVycz1bJ2JyYW5jaCddKQogICAgICAgICBzZWxmLnNpdGVfbWVudS5h
ZGRfZW5kcG9pbnQoJ0RvY3VtZW50YXRpb24nLCBzZWxmLm5hbWUgKyAnLmRvY3VtZW50YXRpb24n
KQogICAgICAgICBzZWxmLnNpdGVfbWVudS5hZGRfZW5kcG9pbnQoJ0NvbW1pdHMnLCBzZWxmLm5h
bWUgKyAnLmNvbW1pdHMnLCBwYXJhbWV0ZXJzPVsnYnJhbmNoJ10pCiAKSW5kZXg6IFRvb2xzL3Jl
c3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2NvbW1pdC5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9jb21taXQu
anMJKHJldmlzaW9uIDI1OTMwMSkKKysrIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3Zp
ZXcvc3RhdGljL2pzL2NvbW1pdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8v
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKEMpIDIwMTksIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8KIC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OCwxMiArOTgsMjEgQEAgZnVuY3Rp
b24gQ29tbWl0VGFibGUoY29tbWl0cywgcmVwb3NpdG9yeQogICAgICAgICAgICAgICAgICAgICBp
ZiAoY2VsbC50aW1lc3RhbXApCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDx0ZCBy
b3dzcGFuPSIke2NlbGwucm93c3Bhbn0iPiR7bmV3IERhdGUoY2VsbC50aW1lc3RhbXAgKiAxMDAw
KS50b0xvY2FsZVN0cmluZygpfTwvdGQ+YDsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgY29t
bWl0X2FyZ3MgPSAncmVwb3NpdG9yeV9pZD0nICsgY2VsbC5jb21taXQucmVwb3NpdG9yeV9pZCAr
ICcmYnJhbmNoPScgKyBjZWxsLmNvbW1pdC5icmFuY2ggKyAnJmlkPScgKyBjZWxsLmNvbW1pdC5p
ZDsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGNvbW1pdEFyZ3MgPSBwYXJhbXNUb1F1ZXJ5KHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ6IFtjZWxsLmNvbW1pdC5yZXBv
c2l0b3J5X2lkXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaDogW2NlbGwuY29tbWl0
LmJyYW5jaF0sCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogW2NlbGwuY29tbWl0LmlkXSwK
KyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGxldCBpbnZlc3Rp
Z2F0ZUFyZ3MgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZDogW2NlbGwuY29tbWl0Lmlk
XSwKKyAgICAgICAgICAgICAgICAgICAgfTsKKwogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
YDx0ZCByb3dzcGFuPSIke2NlbGwucm93c3Bhbn0iPgotICAgICAgICAgICAgICAgICAgICAgICAg
PGEgaHJlZj0iL2NvbW1pdD8ke2NvbW1pdF9hcmdzfSI+JHtjZWxsLmNvbW1pdC5pZH08L2E+IDxi
cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii9jb21taXQ/JHtjb21taXRBcmdz
fSI+JHtjZWxsLmNvbW1pdC5pZH08L2E+IDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgIEJy
YW5jaDogJHtjZWxsLmNvbW1pdC5icmFuY2h9IDxicj4KICAgICAgICAgICAgICAgICAgICAgICAg
IENvbW1pdHRlcjogJHtlc2NhcGVIVE1MKGNlbGwuY29tbWl0LmNvbW1pdHRlcil9IDxicj4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii9jb21taXQvaW5mbz8ke2NvbW1pdF9hcmdz
fSI+TW9yZSBJbmZvPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL2NvbW1p
dC9pbmZvPyR7Y29tbWl0QXJnc30iPk1vcmUgSW5mbzwvYT48YnI+CisgICAgICAgICAgICAgICAg
ICAgICAgICA8YSBocmVmPSIvaW52ZXN0aWdhdGU/JHtwYXJhbXNUb1F1ZXJ5KGludmVzdGlnYXRl
QXJncyl9Ij5UZXN0IHJlc3VsdHMgZm9yIGNvbW1pdDwvYT4KICAgICAgICAgICAgICAgICAgICAg
ICAgICR7ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjZWxs
LmNvbW1pdC5tZXNzYWdlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Jyc7CkBAIC0xNDcsNiArMTU2LDU5IEBAIGNsYXNzIF9Db21taXRCYW5rIHsKICAgICAgICAgdGhp
cy5jYWxsYmFja3MgPSBbXTsKIAogICAgIH0KKyAgICBsYXRlc3QocGFyYW1zKSB7CisgICAgICAg
IHRoaXMuX2JyYW5jaGVzID0gbmV3IFNldChwYXJhbXMuYnJhbmNoKTsKKyAgICAgICAgdGhpcy5f
cmVwb3NpdG9yaWVzID0gbmV3IFNldChwYXJhbXMucmVwb3NpdG9yeV9pZCk7CisgICAgICAgIHRo
aXMuX2JlZ2luVXVpZCA9IG51bGw7CisgICAgICAgIHRoaXMuX2VuZFV1aWQgPSBudWxsOworCisg
ICAgICAgIC8vIE9ubHkgcHJvdmlkZSB0aGUgbGF0ZXN0IGNvbW1pdHMKKyAgICAgICAgY29uc3Qg
c2VsZiA9IHRoaXM7CisgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZl
LCByZWplY3QpIHsKKyAgICAgICAgICAgIGZldGNoKE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3Ro
ID8gYGFwaS9jb21taXRzPyR7cGFyYW1zVG9RdWVyeShwYXJhbXMpfWAgOiAnYXBpL2NvbW1pdHMn
KS50aGVuKHJlc3BvbnNlID0+IHsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5qc29uKCkudGhl
bihqc29uID0+IHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmVnaW5VdWlkID0gTWF0aC5m
bG9vcihEYXRlLm5vdygpIC8gMTAwMCk7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2VuZFV1
aWQgPSAwOworCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9sZGVzdElkRm9yUmVwbyA9IHt9
OworICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gW107CisgICAgICAgICAg
ICAgICAgICAgIGpzb24uZm9yRWFjaChkYXR1bSA9PnsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNvbW1pdCA9IG5ldyBDb21taXQoZGF0dW0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FuZGlkYXRlcy5wdXNoKGNvbW1pdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChvbGRlc3RJZEZvclJlcG9bY29tbWl0LnJlcG9zaXRvcnlfaWRdKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9sZGVzdElkRm9yUmVwb1tjb21taXQucmVwb3NpdG9yeV9pZF0gPSBNYXRo
Lm1pbihjb21taXQudXVpZCwgb2xkZXN0SWRGb3JSZXBvW2NvbW1pdC5yZXBvc2l0b3J5X2lkXSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb2xkZXN0SWRGb3JSZXBvW2NvbW1pdC5yZXBvc2l0b3J5X2lkXSA9IGNvbW1pdC51dWlkOwor
ICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICBsZXQgb2xkZXN0
VmFsaWRVdWlkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMob2xkZXN0SWRG
b3JSZXBvKS5mb3JFYWNoKGlkID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZGVzdFZh
bGlkVXVpZCA9IE1hdGgubWF4KG9sZGVzdFZhbGlkVXVpZCwgaWQpOworICAgICAgICAgICAgICAg
ICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmZvckVhY2goY29tbWl0
ID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXQudXVpZCA8PSBvbGRlc3RW
YWxpZFV1aWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5jb21taXRzLnB1c2goY29tbWl0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2JlZ2luVXVpZCA9IE1hdGgubWluKGNvbW1pdC51dWlkLCBzZWxmLl9i
ZWdpblV1aWQpOworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZW5kVXVpZCA9IE1hdGgu
bWF4KGNvbW1pdC51dWlkLCBzZWxmLl9lbmRVdWlkKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX2JlZ2luVXVpZCA+IHNlbGYuX2VuZFV1
aWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2JlZ2luVXVpZCA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9lbmRVdWlkID0gbnVsbDsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcyk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7CisgICAgICAgICAg
ICAgICAgLy8gSWYgdGhlIGxvYWQgZmFpbHMsIGxvZyB0aGUgZXJyb3IgYW5kIGNvbnRpbnVlCisg
ICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihKU09OLnN0cmluZ2lmeShlcnJvciwgbnVsbCwg
NCkpOworICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSk7CisgICAgfQogICAgIGNvbW1pdEJ5VXVpZCh1dWlkKSB7CiAgICAgICAgIGxldCBi
ZWdpbiA9IDA7CiAgICAgICAgIGxldCBlbmQgPSB0aGlzLmNvbW1pdHMubGVuZ3RoIC0gMTsKQEAg
LTI0NSw3ICszMDcsNyBAQCBjbGFzcyBfQ29tbWl0QmFuayB7CiAgICAgICAgIH0pOwogICAgIH0K
ICAgICBfbG9hZChiZWdpblV1aWQsIGVuZFV1aWQpIHsKLSAgICAgICAgaWYgKGVuZFV1aWQgPD0g
YmVnaW5VdWlkKQorICAgICAgICBpZiAoZW5kVXVpZCA8IGJlZ2luVXVpZCkKICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICBjb25zdCBsaW1pdCA9IDI1MDA7CkBAIC0zNjYsNCArNDI4LDQg
QEAgY2xhc3MgX0NvbW1pdEJhbmsgewogCiBjb25zdCBDb21taXRCYW5rID0gbmV3IF9Db21taXRC
YW5rKCk7CiAKLWV4cG9ydCB7Q29tbWl0LCBDb21taXRCYW5rLCBDb21taXRUYWJsZX07CitleHBv
cnQge0NvbW1pdCwgQ29tbWl0QmFuaywgQ29tbWl0VGFibGUsIFRJTUVTVEFNUF9UT19VVUlEX01V
TFRJUExJRVJ9OwpJbmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0
aWMvanMvY29tbW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNk
YnB5L3ZpZXcvc3RhdGljL2pzL2NvbW1vbi5qcwkocmV2aXNpb24gMjU5MzAxKQorKysgVG9vbHMv
cmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvY29tbW9uLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIGZ1bmN0aW9uIHBhcmFtc1RvUXVlcnkoanNvbikgewog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAganNvbltwYXJhbWV0ZXJd
LmZvckVhY2goKHZhbHVlKSA9PiB7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAg
ICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgcmVzdWx0ICs9IChyZXN1bHQgPyAnJicgOiAnJykg
KyBlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyKSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVu
dCh2YWx1ZSk7CiAgICAgICAgIH0pOwpAQCAtMTY1LDQgKzE2NSwzMiBAQCBmdW5jdGlvbiBkZWVw
Q29tcGFyZShhLCBiKSB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWV4cG9ydCB7ZGVlcENvbXBh
cmUsIEVycm9yRGlzcGxheSwgcXVlcnlUb1BhcmFtcywgcGFyYW1zVG9RdWVyeSwgUXVlcnlNb2Rp
ZmllciwgZXNjYXBlSFRNTH07CitmdW5jdGlvbiBwZXJjZW50YWdlKHZhbHVlLCBtYXgpCit7Cisg
ICAgaWYgKHZhbHVlID09PSBtYXgpCisgICAgICAgIHJldHVybiAnMTAwICUnOworICAgIGlmICgh
dmFsdWUpCisgICAgICAgIHJldHVybiAnMCAlJzsKKyAgICBjb25zdCByZXN1bHQgPSBNYXRoLnJv
dW5kKHZhbHVlIC8gbWF4ICogMTAwKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJu
ICc8MSAlJzsKKyAgICBpZiAocmVzdWx0ID09PSAxMDApCisgICAgICAgIHJldHVybiAnOTkgJSc7
CisgICAgcmV0dXJuIGAke3Jlc3VsdH0gJWAKK30KKworZnVuY3Rpb24gZWxhcHNlZFRpbWUoc3Rh
cnRUaW1lc3RhbXAsIGVuZFRpbWVzdGFtcCkKK3sKKyAgICBjb25zdCB0aW1lID0gbmV3IERhdGUo
KGVuZFRpbWVzdGFtcCAtIHN0YXJ0VGltZXN0YW1wKSAqIDEwMDApOworICAgIGxldCByZXN1bHQg
PSAnJzsKKyAgICBpZiAodGltZS5nZXRNaW51dGVzKCkpCisgICAgICAgIHJlc3VsdCArPSBgJHt0
aW1lLmdldE1pbnV0ZXMoKX06YDsKKyAgICByZXN1bHQgKz0gYCR7dGltZS5nZXRTZWNvbmRzKCkg
PD0gOSAmJiB0aW1lLmdldE1pbnV0ZXMoKSA/ICcwJyA6ICcnfSR7dGltZS5nZXRTZWNvbmRzKCl9
LiR7dGltZS5nZXRNaWxsaXNlY29uZHMoKSA8PSA5OSA/ICcwJyA6ICcnfSR7dGltZS5nZXRNaWxs
aXNlY29uZHMoKSA8PSA5ID8gJzAnIDogJyd9JHt0aW1lLmdldE1pbGxpc2Vjb25kcygpfSBgOwor
ICAgIGlmICh0aW1lLmdldE1pbnV0ZXMoKSkKKyAgICAgICAgcmVzdWx0ICs9ICdtaW51dGVzIHRv
IHJ1bic7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgKz0gJ3NlY29uZHMgdG8gcnVuJzsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitleHBvcnQge2RlZXBDb21wYXJlLCBFcnJvckRpc3BsYXks
IHF1ZXJ5VG9QYXJhbXMsIHBhcmFtc1RvUXVlcnksIFF1ZXJ5TW9kaWZpZXIsIGVzY2FwZUhUTUws
IHBlcmNlbnRhZ2UsIGVsYXBzZWRUaW1lfTsKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3Vs
dHNkYnB5L3ZpZXcvc3RhdGljL2pzL2NvbmZpZ3VyYXRpb24uanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvY29uZmlndXJhdGlvbi5q
cwkocmV2aXNpb24gMjU5MzAxKQorKysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmll
dy9zdGF0aWMvanMvY29uZmlndXJhdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEs
MjAgQEAgY2xhc3MgQ29uZmlndXJhdGlvbiB7CiAgICAgICAgIHJldHVybiByZXN1bHQuam9pbign
LicpOwogICAgIH0KIAorICAgIHN0YXRpYyBjb21iaW5lKCkKKyAgICB7CisgICAgICAgIGlmICgh
YXJndW1lbnRzLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ29uZmlndXJhdGlvbigp
OworICAgICAgICBjb25zdCBjb21iaW5lZCA9IG5ldyBDb25maWd1cmF0aW9uKGFyZ3VtZW50c1sw
XSk7CisgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICBDb25maWd1cmF0aW9uLm1lbWJlcnMoKS5mb3JFYWNoKG1lbWJlciA9PiB7
CisgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXVttZW1iZXJdICE9PSBjb21iaW5lZFtt
ZW1iZXJdKQorICAgICAgICAgICAgICAgICAgICBjb21iaW5lZFttZW1iZXJdID0gbnVsbDsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjb21iaW5lZDsKKyAgICB9
CisKICAgICBjb25zdHJ1Y3Rvcihqc29uID0ge30pIHsKICAgICAgICAgdGhpcy5wbGF0Zm9ybSA9
IGpzb24ucGxhdGZvcm0gPyBqc29uLnBsYXRmb3JtIDogbnVsbDsKICAgICAgICAgdGhpcy52ZXJz
aW9uID0ganNvbi52ZXJzaW9uID8gQ29uZmlndXJhdGlvbi52ZXJzaW9uVG9JbnRlZ2VyKGpzb24u
dmVyc2lvbikgOiBudWxsOwpJbmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmll
dy9zdGF0aWMvanMvZmFpbHVyZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0c2RicHkv
cmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvZmFpbHVyZXMuanMJKG5vbmV4aXN0ZW50KQorKysg
VG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvZmFpbHVyZXMuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTkgQEAKKy8vIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKy8vIGFyZSBtZXQ6CisvLyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKy8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLworLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIKKy8vIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorLy8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorLy8gUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisvLyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisvLyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorLy8gU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisv
LyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorLy8gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKy8vIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKy8v
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHtUSU1FU1RBTVBfVE9f
VVVJRF9NVUxUSVBMSUVSfSBmcm9tICcvYXNzZXRzL2pzL2NvbW1pdC5qcyc7CitpbXBvcnQge3F1
ZXJ5VG9QYXJhbXMsIHBhcmFtc1RvUXVlcnksIFF1ZXJ5TW9kaWZpZXJ9IGZyb20gJy9hc3NldHMv
anMvY29tbW9uLmpzJzsKK2ltcG9ydCB7RXhwZWN0YXRpb25zfSBmcm9tICcvYXNzZXRzL2pzL2V4
cGVjdGF0aW9ucy5qcyc7CitpbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gJy9hc3NldHMvanMv
Y29uZmlndXJhdGlvbi5qcyc7CisKK2NsYXNzIEZhaWx1cmVzIHsKKyAgICBzdGF0aWMgZnJvbUVu
ZHBvaW50KHN1aXRlLCBjb25maWd1cmF0aW9uPW51bGwsIHBhcmFtcz17fSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAg
ICAgICAgIGNvbnN0IHBhcmFtc1RvRGlzcGF0Y2ggPSBPYmplY3QuYXNzaWduKGNvbmZpZ3VyYXRp
b24gPyBjb25maWd1cmF0aW9uLnRvUGFyYW1zKCkgOiB7fSwgcGFyYW1zKTsKKyAgICAgICAgICAg
IHBhcmFtc1RvRGlzcGF0Y2guY29sbGFwc2VkID0gW2ZhbHNlXTsKKyAgICAgICAgICAgIGlmIChw
YXJhbXNUb0Rpc3BhdGNoLnVuZXhwZWN0ZWQgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAg
ICBwYXJhbXNUb0Rpc3BhdGNoLnVuZXhwZWN0ZWQgPSBbZmFsc2VdOworCisgICAgICAgICAgICBm
ZXRjaChgYXBpL2ZhaWx1cmVzLyR7c3VpdGV9PyR7cGFyYW1zVG9RdWVyeShwYXJhbXNUb0Rpc3Bh
dGNoKX1gKS50aGVuKHJlc3BvbnNlID0+IHsKKyAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0g
W107CisgICAgICAgICAgICAgICAgcmVzcG9uc2UuanNvbigpLnRoZW4oanNvbiA9PiB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShqc29uKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgICAgICAgICAgICAganNvbi5mb3JFYWNoKChw
YWlycykgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnMucmVzdWx0cy5mb3JFYWNo
KChydW4pID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXcg
RmFpbHVyZXMoc3VpdGUsIG5ldyBDb25maWd1cmF0aW9uKHBhaXJzLmNvbmZpZ3VyYXRpb24pLCBy
dW4pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4geworICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBsb2FkIGZhaWxzLCBsb2cgdGhlIGVycm9yIGFuZCBjb250aW51ZQorICAgICAgICAg
ICAgICAgIGNvbnNvbGUuZXJyb3IoSlNPTi5zdHJpbmdpZnkoZXJyb3IsIG51bGwsIDQpKTsKKyAg
ICAgICAgICAgICAgICByZWplY3QoZXJyb3IpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0p
OworICAgIH0KKworICAgIHN0YXRpYyBjb21iaW5lKCkKKyAgICB7CisgICAgICAgIGlmICghYXJn
dW1lbnRzLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIGNvbnN0
IHJlc3VsdCA9IG5ldyBGYWlsdXJlcyhhcmd1bWVudHNbMF0uc3VpdGUpOworICAgICAgICBjb25z
dCBjb25maWd1cmF0aW9ucyA9IFtdOworCisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJn
dW1lbnRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBjb25maWd1cmF0aW9ucy5wdXNoKGFy
Z3VtZW50c1tpXS5jb25maWd1cmF0aW9uKTsKKyAgICAgICAgICAgIHJlc3VsdC5hZ2dyZWdhdGlu
ZyArPSBhcmd1bWVudHNbaV0uYWdncmVnYXRpbmc7CisgICAgICAgICAgICByZXN1bHQuc3RhcnRf
dGltZV9yYW5nZSA9IFsKKyAgICAgICAgICAgICAgICBNYXRoLm1pbihyZXN1bHQuc3RhcnRfdGlt
ZV9yYW5nZVswXSwgYXJndW1lbnRzW2ldLnN0YXJ0X3RpbWVfcmFuZ2VbMF0pLAorICAgICAgICAg
ICAgICAgIE1hdGgubWF4KHJlc3VsdC5zdGFydF90aW1lX3JhbmdlWzFdLCBhcmd1bWVudHNbaV0u
c3RhcnRfdGltZV9yYW5nZVsxXSksCisgICAgICAgICAgICBdOworICAgICAgICAgICAgcmVzdWx0
LnV1aWRfcmFuZ2UgPSBbCisgICAgICAgICAgICAgICAgTWF0aC5taW4ocmVzdWx0LnV1aWRfcmFu
Z2VbMF0sIGFyZ3VtZW50c1tpXS51dWlkX3JhbmdlWzBdKSwKKyAgICAgICAgICAgICAgICBNYXRo
Lm1heChyZXN1bHQudXVpZF9yYW5nZVsxXSwgYXJndW1lbnRzW2ldLnV1aWRfcmFuZ2VbMV0pLAor
ICAgICAgICAgICAgXTsKKworICAgICAgICAgICAgLy8gQ29tYmluZQorICAgICAgICAgICAgRXhw
ZWN0YXRpb25zLmZhaWx1cmVUeXBlcy5mb3JFYWNoKHR5cGUgPT4geworICAgICAgICAgICAgICAg
IGZvciAobGV0IHRlc3QgaW4gYXJndW1lbnRzW2ldW3R5cGVdKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHRbdHlwZV1bdGVzdF0gPT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdFt0eXBlXVt0ZXN0XSA9IGFyZ3VtZW50c1tpXVt0eXBlXVt0ZXN0XTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
W3R5cGVdW3Rlc3RdICs9IGFyZ3VtZW50c1tpXVt0eXBlXVt0ZXN0XTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLy8gUHJpb3JpdGl6ZSBmYWlsdXJl
cworICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nVHlwZXMgPSBbLi4uRXhwZWN0YXRpb25zLmZh
aWx1cmVUeXBlc107CisgICAgICAgICAgICB3aGlsZSAocmVtYWluaW5nVHlwZXMubGVuZ3RoID4g
MSkgeworICAgICAgICAgICAgICAgIGNvbnN0IHRvUmVtb3ZlID0gW107CisgICAgICAgICAgICAg
ICAgY29uc3QgY3VycmVudFR5cGUgPSByZW1haW5pbmdUeXBlc1swXTsKKyAgICAgICAgICAgICAg
ICByZW1haW5pbmdUeXBlcy5zaGlmdCgpOworCisgICAgICAgICAgICAgICAgZm9yIChsZXQgdGVz
dCBpbiByZXN1bHRbY3VycmVudFR5cGVdKSB7CisgICAgICAgICAgICAgICAgICAgIGxldCB3b3Jz
dFR5cGUgPSBjdXJyZW50VHlwZTsKKyAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nVHlwZXMu
Zm9yRWFjaCh0eXBlID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRbdHlw
ZV1bdGVzdF0gIT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jz
dFR5cGUgPSB0eXBlOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHdvcnN0VHlwZSA9PSBjdXJyZW50VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICByZXN1bHRbd29yc3RUeXBlXVt0ZXN0XSAr
PSByZXN1bHRbY3VycmVudFR5cGVdW3Rlc3RdOworICAgICAgICAgICAgICAgICAgICB0b1JlbW92
ZS5wdXNoKHRlc3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0b1JlbW92
ZS5mb3JFYWNoKHRlc3QgPT4geworICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0W2N1
cnJlbnRUeXBlXVt0ZXN0XTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXN1bHQuY29uZmlndXJhdGlvbiA9IENvbmZpZ3VyYXRpb24uY29t
YmluZSguLi5jb25maWd1cmF0aW9ucyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgY29uc3RydWN0b3Ioc3VpdGUsIGNvbmZpZ3VyYXRpb24gPSBudWxsLCBqc29uID0gbnVs
bCkgeworICAgICAgICB0aGlzLnN1aXRlID0gc3VpdGU7CisgICAgICAgIHRoaXMuY29uZmlndXJh
dGlvbiA9IGNvbmZpZ3VyYXRpb24gPyBuZXcgQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKSA6
IG5ldyBDb25maWd1cmF0aW9uKCk7CisKKyAgICAgICAgRXhwZWN0YXRpb25zLmZhaWx1cmVUeXBl
cy5mb3JFYWNoKHR5cGUgPT4geworICAgICAgICAgICAgdGhpc1t0eXBlXSA9IHt9OworICAgICAg
ICB9KTsKKyAgICAgICAgaWYgKGpzb24gPT09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuYWdn
cmVnYXRpbmcgPSAwOworICAgICAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBNYXRoLmZsb29y
KERhdGUubm93KCkgLyAxMDAwKTsKKyAgICAgICAgICAgIHRoaXMuc3RhcnRfdGltZV9yYW5nZSA9
IFtjdXJyZW50VGltZSwgMF07CisgICAgICAgICAgICB0aGlzLnV1aWRfcmFuZ2UgPSBbY3VycmVu
dFRpbWUgKiBUSU1FU1RBTVBfVE9fVVVJRF9NVUxUSVBMSUVSLCAwXTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuYWdncmVnYXRpbmcgPSAxOworICAgICAg
ICB0aGlzLnN0YXJ0X3RpbWVfcmFuZ2UgPSBbanNvbi5zdGFydF90aW1lLCBqc29uLnN0YXJ0X3Rp
bWVdOworICAgICAgICB0aGlzLnV1aWRfcmFuZ2UgPSBbanNvbi51dWlkLCBqc29uLnV1aWRdOwor
ICAgICAgICBmb3IgKHZhciBwYXJhbWV0ZXIgaW4ganNvbikgeworICAgICAgICAgICAgaWYgKHBh
cmFtZXRlciA9PT0gJ3V1aWQnIHx8IHBhcmFtZXRlciA9PT0gJ3N0YXJ0X3RpbWUnKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY29uc3QgdHlwZSA9IEV4cGVjdGF0aW9u
cy50eXBlRm9ySWQoanNvbltwYXJhbWV0ZXJdKTsKKyAgICAgICAgICAgIHRoaXNbdHlwZV1bcGFy
YW1ldGVyXSA9IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgdG9QYXJhbXMoKSB7CisgICAgICAg
IGNvbnN0IHBhcmFtcyA9IHRoaXMuY29uZmlndXJhdGlvbi50b1BhcmFtcygpOworICAgICAgICBw
YXJhbXMuc3VpdGUgPSBbdGhpcy5zdWl0ZV07CisgICAgICAgIGlmICh0aGlzLnV1aWRfcmFuZ2Vb
MF0gPD0gdGhpcy51dWlkX3JhbmdlWzFdKSB7CisgICAgICAgICAgICBpZiAodGhpcy51dWlkX3Jh
bmdlWzBdID09PSB0aGlzLnV1aWRfcmFuZ2VbMV0pCisgICAgICAgICAgICAgICAgcGFyYW1zLnV1
aWQgPSBbdGhpcy51dWlkX3JhbmdlWzBdXTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIHBhcmFtcy5hZnRlcl91dWlkID0gW3RoaXMudXVpZF9yYW5nZVswXV07CisgICAgICAg
ICAgICAgICAgcGFyYW1zLmJlZm9yZV91dWlkID0gW3RoaXMudXVpZF9yYW5nZVsxXV07CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuc3RhcnRfdGltZV9yYW5nZVsw
XSA8PSB0aGlzLnN0YXJ0X3RpbWVfcmFuZ2VbMV0pIHsKKyAgICAgICAgICAgIHBhcmFtcy5hZnRl
cl90aW1lID0gW3RoaXMuc3RhcnRfdGltZV9yYW5nZVswXV07CisgICAgICAgICAgICBwYXJhbXMu
YmVmb3JlX3RpbWUgPSBbdGhpcy5zdGFydF90aW1lX3JhbmdlWzFdXTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gcGFyYW1zOworICAgIH0KK307CisKK2V4cG9ydCB7RmFpbHVyZXN9OwpJbmRl
eDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvaW52ZXN0aWdh
dGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9z
dGF0aWMvanMvaW52ZXN0aWdhdGUuanMJKHJldmlzaW9uIDI1OTMwMSkKKysrIFRvb2xzL3Jlc3Vs
dHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2ludmVzdGlnYXRlLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCw5ICsyNCwxMCBAQAogaW1wb3J0IHtBcmNoaXZlUm91dGVyfSBmcm9tICcv
YXNzZXRzL2pzL2FyY2hpdmVSb3V0ZXIuanMnOwogaW1wb3J0IHtET00sIFJFRn0gZnJvbSAnL2xp
YnJhcnkvanMvUmVmLmpzJzsKIGltcG9ydCB7Q29tbWl0QmFua30gZnJvbSAnL2Fzc2V0cy9qcy9j
b21taXQuanMnOwotaW1wb3J0IHtxdWVyeVRvUGFyYW1zLCBwYXJhbXNUb1F1ZXJ5LCBRdWVyeU1v
ZGlmaWVyLCB9IGZyb20gJy9hc3NldHMvanMvY29tbW9uLmpzJzsKK2ltcG9ydCB7cXVlcnlUb1Bh
cmFtcywgcGFyYW1zVG9RdWVyeSwgUXVlcnlNb2RpZmllciwgcGVyY2VudGFnZSwgZWxhcHNlZFRp
bWV9IGZyb20gJy9hc3NldHMvanMvY29tbW9uLmpzJzsKIGltcG9ydCB7Q29uZmlndXJhdGlvbn0g
ZnJvbSAnL2Fzc2V0cy9qcy9jb25maWd1cmF0aW9uLmpzJwogaW1wb3J0IHtFeHBlY3RhdGlvbnN9
IGZyb20gJy9hc3NldHMvanMvZXhwZWN0YXRpb25zLmpzJzsKK2ltcG9ydCB7RmFpbHVyZXN9IGZy
b20gJy9hc3NldHMvanMvZmFpbHVyZXMuanMnOwogCiBmdW5jdGlvbiBjb21taXRzRm9yVXVpZCh1
dWlkKSB7CiAgICAgcmV0dXJuIGBDb21taXRzOiAke0NvbW1pdEJhbmsuY29tbWl0c0R1cmluZ1V1
aWQodXVpZCkubWFwKChjb21taXQpID0+IHsKQEAgLTcyLDMzICs3Myw2MCBAQCBmdW5jdGlvbiBl
bGFwc2VkKGRhdGEpCiB7CiAgICAgaWYgKGRhdGEudGltZSkKICAgICAgICAgcmV0dXJuIGBUb29r
ICR7ZGF0YS50aW1lIC8gMTAwMH0gc2Vjb25kc2A7Ci0gICAgaWYgKGRhdGEuc3RhdHMgJiYgZGF0
YS5zdGF0cy5zdGFydF90aW1lICYmIGRhdGEuc3RhdHMuZW5kX3RpbWUpIHsKLSAgICAgICAgY29u
c3QgdGltZSA9IG5ldyBEYXRlKChkYXRhLnN0YXRzLmVuZF90aW1lIC0gZGF0YS5zdGF0cy5zdGFy
dF90aW1lKSAqIDEwMDApOwotICAgICAgICBsZXQgcmVzdWx0ID0gJ1N1aXRlIHRvb2sgJzsKLSAg
ICAgICAgaWYgKHRpbWUuZ2V0TWludXRlcygpKQotICAgICAgICAgICAgcmVzdWx0ICs9IGAke3Rp
bWUuZ2V0TWludXRlcygpfTpgOwotICAgICAgICByZXN1bHQgKz0gYCR7dGltZS5nZXRTZWNvbmRz
KCkgPD0gOSAmJiB0aW1lLmdldE1pbnV0ZXMoKSA/ICcwJyA6ICcnfSR7dGltZS5nZXRTZWNvbmRz
KCl9LiR7dGltZS5nZXRNaWxsaXNlY29uZHMoKSA8PSA5OSA/ICcwJyA6ICcnfSR7dGltZS5nZXRN
aWxsaXNlY29uZHMoKSA8PSA5ID8gJzAnIDogJyd9JHt0aW1lLmdldE1pbGxpc2Vjb25kcygpfSBg
OwotICAgICAgICBpZiAodGltZS5nZXRNaW51dGVzKCkpCi0gICAgICAgICAgICByZXN1bHQgKz0g
J21pbnV0ZXMgdG8gcnVuJzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ICs9ICdz
ZWNvbmRzIHRvIHJ1bic7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChk
YXRhLnN0YXRzICYmIGRhdGEuc3RhdHMuc3RhcnRfdGltZSAmJiBkYXRhLnN0YXRzLmVuZF90aW1l
KQorICAgICAgICByZXR1cm4gYFN1aXRlIHRvb2sgJHtlbGFwc2VkVGltZShkYXRhLnN0YXRzLnN0
YXJ0X3RpbWUsIGRhdGEuc3RhdHMuZW5kX3RpbWUpfWA7CiAgICAgcmV0dXJuICcnOwogfQogCi1m
dW5jdGlvbiBwZXJjZW50YWdlKHZhbHVlLCBtYXgpCitmdW5jdGlvbiBwcmlvcml0aXplZEZhaWx1
cmVzKGZhaWx1cmVzLCBtYXggPSAwLCB3aWxsRmlsdGVyRXhwZWN0ZWQgPSBmYWxzZSkKIHsKLSAg
ICBpZiAodmFsdWUgPT09IG1heCkKLSAgICAgICAgcmV0dXJuICcxMDAgJSc7Ci0gICAgaWYgKCF2
YWx1ZSkKLSAgICAgICAgcmV0dXJuICcwICUnOwotICAgIGNvbnN0IHJlc3VsdCA9IE1hdGgucm91
bmQodmFsdWUgLyBtYXggKiAxMDApOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4g
JzwxICUnOwotICAgIGlmIChyZXN1bHQgPT09IDEwMCkKLSAgICAgICAgcmV0dXJuICc5OSAlJzsK
LSAgICByZXR1cm4gYCR7cmVzdWx0fSAlYAorICAgIGlmIChmYWlsdXJlcyA9PT0gdW5kZWZpbmVk
KQorICAgICAgICByZXR1cm4gJyc7CisKKyAgICBpZiAoZmFpbHVyZXMgPT09IG51bGwpCisgICAg
ICAgIHJldHVybiBgPGRpdiBjbGFzcz0ibG9hZGVyIj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNs
YXNzPSJzcGlubmVyIj48L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PmA7CisgICAgbGV0IGZhaWx1
cmVzVG9EaXNwbGF5ID0gW107CisgICAgRXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlcy5mb3JFYWNo
KHR5cGUgPT4geworICAgICAgICBmb3IgKGxldCB0ZXN0TmFtZSBpbiBmYWlsdXJlc1t0eXBlXSkg
eworICAgICAgICAgICAgZmFpbHVyZXNUb0Rpc3BsYXkucHVzaCh7CisgICAgICAgICAgICAgICAg
ZmFpbHVyZTogdHlwZSwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0TmFtZSwKKyAgICAgICAg
ICAgICAgICBjb3VudDogZmFpbHVyZXMuYWdncmVnYXRpbmcsCisgICAgICAgICAgICAgICAgZmFp
bHVyZUNvdW50OiBmYWlsdXJlc1t0eXBlXVt0ZXN0TmFtZV0sCisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorICAgIH0pOworICAgIGZhaWx1cmVzVG9EaXNwbGF5LnNvcnQoZnVuY3Rpb24oYSwg
YikgeworICAgICAgICBjb25zdCB0eXBlQ29tcGFyZSA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0
YXRlSWQoRXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlTWFwW2EuZmFpbHVyZV0pIC0gRXhwZWN0YXRp
b25zLnN0cmluZ1RvU3RhdGVJZChFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVNYXBbYi5mYWlsdXJl
XSk7CisgICAgICAgIGlmICh0eXBlQ29tcGFyZSkKKyAgICAgICAgICAgIHJldHVybiB0eXBlQ29t
cGFyZTsKKyAgICAgICAgaWYgKGEuZmFpbHVyZUNvdW50IC0gYi5mYWlsdXJlQ291bnQpCisgICAg
ICAgICAgICByZXR1cm4gYS5mYWlsdXJlQ291bnQgLSBiLmZhaWx1cmVDb3VudDsKKyAgICAgICAg
cmV0dXJuIChhLnRlc3QpLmxvY2FsZUNvbXBhcmUoYi50ZXN0KTsKKyAgICB9KTsKKworICAgIGlm
IChtYXggJiYgZmFpbHVyZXNUb0Rpc3BsYXkubGVuZ3RoID4gbWF4KSB7CisgICAgICAgIGZhaWx1
cmVzVG9EaXNwbGF5ID0gZmFpbHVyZXNUb0Rpc3BsYXkuc3BsaWNlKDAsIG1heCk7CisgICAgICAg
IGZhaWx1cmVzVG9EaXNwbGF5W21heCAtIDFdID0gbnVsbDsKKyAgICB9CisKKworCisgICAgcmV0
dXJuIGA8ZGl2PiR7ZmFpbHVyZXNUb0Rpc3BsYXkubWFwKGZhaWx1cmUgPT4geworICAgICAgICBp
ZiAoZmFpbHVyZSA9PT0gbnVsbCkgeworICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gZmFpbHVy
ZXMudG9QYXJhbXMoKTsKKyAgICAgICAgICAgIHBhcmFtcy51bmV4cGVjdGVkID0gW3dpbGxGaWx0
ZXJFeHBlY3RlZF07CisgICAgICAgICAgICByZXR1cm4gYDxhIHN0eWxlPSJtYXJnaW4tbGVmdDog
Y2FsYyh2YXIoLS1tZWRpdW1TaXplKSArIDE2cHgpIiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iL2lu
dmVzdGlnYXRlPyR7cGFyYW1zVG9RdWVyeShwYXJhbXMpfSI+TW9yZS4uLjwvYT5gOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBgPGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJk
b3QgJHtmYWlsdXJlLmZhaWx1cmV9IHNtYWxsIj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBj
bGFzcz0idGlueSB0ZXh0IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDttYXJnaW4tdG9wOiAw
cHgiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcFtmYWlsdXJlLmZhaWx1cmVdfTwvZGl2PgorICAg
ICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJ0ZXh0IGJsb2Nr
IiBzdHlsZT0id2lkdGg6IGNhbGMoMTAwJSAtIHZhcigtLW1lZGl1bVNpemUpIC0gMTZweCk7IG92
ZXJmbG93OiBoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IHRleHQtb3ZlcmZsb3c6IGVsbGlw
c2lzOyIgaHJlZj0iLz9zdWl0ZT0ke2ZhaWx1cmVzLnN1aXRlfSZ0ZXN0PSR7ZmFpbHVyZS50ZXN0
fSI+JHtmYWlsdXJlLnRlc3R9PC9hPgorICAgICAgICAgICAgPC9kaXY+YDsKKyAgICB9KS5qb2lu
KCcnKX08L2Rpdj5gOwogfQogCiBmdW5jdGlvbiByZXN1bHRzRm9yRGF0YShkYXRhLCB3aWxsRmls
dGVyRXhwZWN0ZWQgPSBmYWxzZSkKQEAgLTExMCwzNCArMTM4LDMzIEBAIGZ1bmN0aW9uIHJlc3Vs
dHNGb3JEYXRhKGRhdGEsIHdpbGxGaWx0ZXIKICAgICAgICAgdGVzdHNSYW4gPSBkYXRhLnN0YXRz
LnRlc3RzX3J1bjsKICAgICAgICAgdG90YWxUZXN0cyA9IGRhdGEuc3RhdHMudGVzdHNfcnVuICsg
KGRhdGEuc3RhdHMudGVzdHNfc2tpcHBlZCA/IGRhdGEuc3RhdHMudGVzdHNfc2tpcHBlZCA6IDAp
OwogICAgIH0KLSAgICByZXN1bHQucHVzaChgUmFuICR7dGVzdHNSYW4udG9Mb2NhbGVTdHJpbmco
KX0gb2YgJHt0b3RhbFRlc3RzLnRvTG9jYWxlU3RyaW5nKCl9IHRlc3RzYCk7CisgICAgbGV0IGRv
dHNEaXNwbGF5ZWQgPSAwOworICAgIHJlc3VsdC5wdXNoKGA8ZGl2PlJhbiAke3Rlc3RzUmFuLnRv
TG9jYWxlU3RyaW5nKCl9IG9mICR7dG90YWxUZXN0cy50b0xvY2FsZVN0cmluZygpfSB0ZXN0c2Ap
OwogICAgIGlmIChkYXRhLmFjdHVhbCkgewogICAgICAgICBjb25zdCB0eXBlID0gRXhwZWN0YXRp
b25zLnR5cGVGb3JJZChkYXRhLmFjdHVhbCk7Ci0gICAgICAgIHJlc3VsdC5wdXNoKGA8ZGl2Pgot
ICAgICAgICAgICAgICAgIEFjdHVhbDogJHtkYXRhLmFjdHVhbH0KLSAgICAgICAgICAgICAgICA8
ZGl2IGNsYXNzPSJkb3QgJHt0eXBlfSBzbWFsbCI+Ci0gICAgICAgICAgICAgICAgICAgIDxkaXYg
Y2xhc3M9InRpbnkgdGV4dCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7bWFyZ2luLXRvcDog
MHB4Ij4ke0V4cGVjdGF0aW9ucy5zeW1ib2xNYXBbdHlwZV19PC9kaXY+Ci0gICAgICAgICAgICAg
ICAgPC9kaXY+CisgICAgICAgICsrZG90c0Rpc3BsYXllZDsKKyAgICAgICAgcmVzdWx0LnB1c2go
YEFjdHVhbDogJHtkYXRhLmFjdHVhbH0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvdCAke3R5
cGV9IHNtYWxsIj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxl
PSJmb250LXdlaWdodDogbm9ybWFsO21hcmdpbi10b3A6IDBweCI+JHtFeHBlY3RhdGlvbnMuc3lt
Ym9sTWFwW3R5cGVdfTwvZGl2PgogICAgICAgICAgICAgPC9kaXY+YCk7CiAgICAgfQogICAgIGlm
IChkYXRhLmV4cGVjdGVkKSB7CiAgICAgICAgIGNvbnN0IHR5cGUgPSBFeHBlY3RhdGlvbnMudHlw
ZUZvcklkKGRhdGEuZXhwZWN0ZWQpOwotICAgICAgICByZXN1bHQucHVzaChgPGRpdj4KLSAgICAg
ICAgICAgICAgICBFeHBlY3RlZDogJHtkYXRhLmV4cGVjdGVkfQotICAgICAgICAgICAgICAgIDxk
aXYgY2xhc3M9ImRvdCAke3R5cGV9IHNtYWxsIj4KLSAgICAgICAgICAgICAgICAgICAgPGRpdiBj
bGFzcz0idGlueSB0ZXh0IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDttYXJnaW4tdG9wOiAw
cHgiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcFt0eXBlXX08L2Rpdj4KLSAgICAgICAgICAgICAg
ICA8L2Rpdj4KKyAgICAgICAgKytkb3RzRGlzcGxheWVkOworICAgICAgICByZXN1bHQucHVzaChg
RXhwZWN0ZWQ6ICR7ZGF0YS5leHBlY3RlZH0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvdCAk
e3R5cGV9IHNtYWxsIj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0
eWxlPSJmb250LXdlaWdodDogbm9ybWFsO21hcmdpbi10b3A6IDBweCI+JHtFeHBlY3RhdGlvbnMu
c3ltYm9sTWFwW3R5cGVdfTwvZGl2PgogICAgICAgICAgICAgPC9kaXY+YCk7CiAgICAgfQogICAg
IGlmIChkYXRhLnN0YXRzICYmIGRhdGEuc3RhdHMudGVzdHNfcnVuKSB7CiAgICAgICAgIGNvbnN0
IHN1Y2NlZWRlZCA9IGRhdGEuc3RhdHMudGVzdHNfcnVuIC0gZGF0YS5zdGF0c1tgdGVzdHMke3dp
bGxGaWx0ZXJFeHBlY3RlZCA/ICdfdW5leHBlY3RlZF8nIDogJ18nfWZhaWxlZGBdOwotICAgICAg
ICBpZiAoc3VjY2VlZGVkKQotICAgICAgICAgICAgcmVzdWx0LnB1c2goYDxkaXY+Ci0gICAgICAg
ICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvdCBzdWNjZXNzIHNtYWxsIj4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbnkgdGV4dCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBu
b3JtYWw7bWFyZ2luLXRvcDogMHB4Ij4ke0V4cGVjdGF0aW9ucy5zeW1ib2xNYXAuc3VjY2Vzc308
L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgICR7
ZGF0YS5zdGFydF90aW1lID8gc3VjY2VlZGVkLnRvTG9jYWxlU3RyaW5nKCkgOiBwZXJjZW50YWdl
KHN1Y2NlZWRlZCwgZGF0YS5zdGF0cy50ZXN0c19ydW4pfSBwYXNzZWQKLSAgICAgICAgICAgICAg
ICA8L2Rpdj5gKTsKKyAgICAgICAgaWYgKHN1Y2NlZWRlZCkgeworICAgICAgICAgICAgKytkb3Rz
RGlzcGxheWVkOworICAgICAgICAgICAgcmVzdWx0LnB1c2goYDxkaXYgY2xhc3M9ImRvdCBzdWNj
ZXNzIHNtYWxsIj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0IiBz
dHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDttYXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRpb25z
LnN5bWJvbE1hcC5zdWNjZXNzfTwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAg
ICAgICAgICAgICR7ZGF0YS5zdGFydF90aW1lID8gc3VjY2VlZGVkLnRvTG9jYWxlU3RyaW5nKCkg
OiBwZXJjZW50YWdlKHN1Y2NlZWRlZCwgZGF0YS5zdGF0cy50ZXN0c19ydW4pfSBwYXNzZWRgKTsK
KyAgICAgICAgfQogICAgIH0KICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEV4cGVjdGF0aW9ucy5m
YWlsdXJlVHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgaWYgKCFkYXRhLnN0YXRzKQpAQCAt
MTQ4LDEzICsxNzUsMTQgQEAgZnVuY3Rpb24gcmVzdWx0c0ZvckRhdGEoZGF0YSwgd2lsbEZpbHRl
cgogICAgICAgICAgICAgdmFsdWUgLT0gZGF0YS5zdGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJFeHBl
Y3RlZCA/ICdfdW5leHBlY3RlZF8nIDogJ18nfSR7RXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlc1tp
ICsgMV19YF07CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgcmVzdWx0LnB1c2goYDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG90
ICR7dHlwZX0gc21hbGwiPgotICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW55IHRl
eHQiIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsO21hcmdpbi10b3A6IDBweCI+JHtFeHBlY3Rh
dGlvbnMuc3ltYm9sTWFwW3R5cGVdfTwvZGl2PgotICAgICAgICAgICAgICAgIDwvZGl2PgotICAg
ICAgICAgICAgICAgICR7ZGF0YS5zdGFydF90aW1lID8gdmFsdWUudG9Mb2NhbGVTdHJpbmcoKSA6
IHBlcmNlbnRhZ2UodmFsdWUsIGRhdGEuc3RhdHMudGVzdHNfcnVuKX0gJHt0eXBlfQotICAgICAg
ICAgICAgPC9kaXY+YCk7CisgICAgICAgICsrZG90c0Rpc3BsYXllZDsKKyAgICAgICAgcmVzdWx0
LnB1c2goYDxkaXYgY2xhc3M9ImRvdCAke3R5cGV9IHNtYWxsIj4KKyAgICAgICAgICAgICAgICA8
ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsO21hcmdpbi10
b3A6IDBweCI+JHtFeHBlY3RhdGlvbnMuc3ltYm9sTWFwW3R5cGVdfTwvZGl2PgorICAgICAgICAg
ICAgPC9kaXY+CisgICAgICAgICAgICAke2RhdGEuc3RhcnRfdGltZSA/IHZhbHVlLnRvTG9jYWxl
U3RyaW5nKCkgOiBwZXJjZW50YWdlKHZhbHVlLCBkYXRhLnN0YXRzLnRlc3RzX3J1bil9ICR7dHlw
ZX1gKTsKICAgICB9CisgICAgcmVzdWx0LnB1c2goJzwvZGl2PicpOworICAgIHJlc3VsdC5wdXNo
KHByaW9yaXRpemVkRmFpbHVyZXMoZGF0YS5mYWlsdXJlcywgTWF0aC5tYXgoNiAtIGRvdHNEaXNw
bGF5ZWQsIDEpLCB3aWxsRmlsdGVyRXhwZWN0ZWQpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CkBAIC0zMDAsOCArMzI4LDUwIEBAIGNsYXNzIF9JbnZlc3RpZ2F0ZURyYXdlciB7CiAgICAgICAg
IHRoaXMuc3VpdGUgPSBzdWl0ZTsKICAgICAgICAgdGhpcy5hZ3JlZ2F0ZSA9IGFncmVnYXRlRGF0
YTsKICAgICAgICAgdGhpcy5kYXRhID0gYWxsRGF0YTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaCgp
OwogICAgICAgICB0aGlzLnNlbGVjdCgwKTsKICAgICB9CisgICAgZGlzcGF0Y2goKSB7CisgICAg
ICAgIGlmICghdGhpcy5kYXRhLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IGlmICghdGhpcy5kYXRhW2ldLnN0YXRzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGRhdHVtID0+IHsKKyAgICAgICAgICAg
IGRhdHVtLmZhaWx1cmVzID0gbnVsbDsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuYWdyZWdh
dGUuZmFpbHVyZXMgPSBudWxsOworCisgICAgICAgIGNvbnN0IGJyYW5jaCA9IHF1ZXJ5VG9QYXJh
bXMoZG9jdW1lbnQuVVJMLnNwbGl0KCc/JylbMV0pLmJyYW5jaDsKKyAgICAgICAgY29uc3QgcGFy
YW1zID0geworICAgICAgICAgICAgdW5leHBlY3RlZDogW3RoaXMud2lsbEZpbHRlckV4cGVjdGVk
XSwKKyAgICAgICAgICAgIHV1aWQ6IFt0aGlzLmFncmVnYXRlLnV1aWRdLAorICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLmFncmVnYXRlLnN0YXJ0X3RpbWUpIHsKKyAgICAgICAgICAgIHBhcmFt
cy5iZWZvcmVfdGltZSA9IFt0aGlzLmFncmVnYXRlLnN0YXJ0X3RpbWVdOworICAgICAgICAgICAg
cGFyYW1zLmFmdGVyX3RpbWUgPSBbdGhpcy5hZ3JlZ2F0ZS5zdGFydF90aW1lXTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoYnJhbmNoKQorICAgICAgICAgICAgcGFyYW1zLmJyYW5jaCA9IFticmFu
Y2hdOworCisgICAgICAgIEZhaWx1cmVzLmZyb21FbmRwb2ludCgKKyAgICAgICAgICAgIHRoaXMu
c3VpdGUsCisgICAgICAgICAgICB0aGlzLmFncmVnYXRlLmNvbmZpZ3VyYXRpb24sCisgICAgICAg
ICAgICBwYXJhbXMsCisgICAgICAgICkudGhlbihmYWlsdXJlcyA9PiB7CisgICAgICAgICAgICB0
aGlzLmFncmVnYXRlLmZhaWx1cmVzID0gRmFpbHVyZXMuY29tYmluZSguLi5mYWlsdXJlcyk7Cisg
ICAgICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaChkYXR1bSA9PiB7CisgICAgICAgICAgICAgICAg
ZGF0dW0uZmFpbHVyZXMgPSBuZXcgRmFpbHVyZXModGhpcy5zdWl0ZSwgZGF0dW0uY29uZmlndXJh
dGlvbik7CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuZm9yRWFjaChmYWlsdXJlID0+IHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGRhdHVtLmNvbmZpZ3VyYXRpb24uY29tcGFyZShmYWlsdXJl
LmNvbmZpZ3VyYXRpb24pID09PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0dW0uZmFp
bHVyZXMgPSBGYWlsdXJlcy5jb21iaW5lKGRhdHVtLmZhaWx1cmVzLCBmYWlsdXJlKTsKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGhpcy5zZWxlY3Qo
dGhpcy5zZWxlY3RlZCk7CisgICAgICAgIH0pOworICAgIH0KICAgICBjb2xsYXBzZSgpIHsKICAg
ICAgICAgaWYgKCF0aGlzLmlzUmVuZGVyZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6
IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL3RpbWVsaW5lLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGlj
L2pzL3RpbWVsaW5lLmpzCShyZXZpc2lvbiAyNTkzMDEpCisrKyBUb29scy9yZXN1bHRzZGJweS9y
ZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
NjU4LDcgKzY1OCw3IEBAIGNsYXNzIFRpbWVsaW5lRnJvbUVuZHBvaW50IHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydGlhbENvbmZp
Z3VyYXRpb259CiAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+Ci0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICR7ZGF0YS5zdGF0cyA/IGA8YSBocmVmPSIvaW52ZXN0aWdhdGU/JHtwYXJhbXNU
b1F1ZXJ5KGJ1aWxkUGFyYW1zKX0iIHRhcmdldD0iX2JsYW5rIj5JbnZlc3RpZ2F0ZSBmYWlsdXJl
czwvYT48YnI+YCA6ICcnfQogICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhLmV4cGVjdGVk
ID8gYEV4cGVjdGVkOiAke2RhdGEuZXhwZWN0ZWR9PGJyPmAgOiAnJ30KICAgICAgICAgICAgICAg
ICAgICAgICAgICR7ZGF0YS5hY3R1YWwgPyBgQWN0dWFsOiAke2RhdGEuYWN0dWFsfTxicj5gIDog
Jyd9CiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmAsCkBAIC04OTQsNiArODk0LDcgQEAgZnVu
Y3Rpb24gTGVnZW5kKGNhbGxiYWNrPW51bGwsIHBsdXJhbD1mYQogICAgICAgICAgICAgICAgICAg
ICAgICAgd2lsbEZpbHRlckV4cGVjdGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHVw
ZGF0ZUxhYmVsRXZlbnRzLmFkZCh3aWxsRmlsdGVyRXhwZWN0ZWQpOwogICAgICAgICAgICAgICAg
ICAgICBJbnZlc3RpZ2F0ZURyYXdlci53aWxsRmlsdGVyRXhwZWN0ZWQgPSB3aWxsRmlsdGVyRXhw
ZWN0ZWQ7CisgICAgICAgICAgICAgICAgICAgIEludmVzdGlnYXRlRHJhd2VyLmRpc3BhdGNoKCk7
CiAgICAgICAgICAgICAgICAgICAgIEludmVzdGlnYXRlRHJhd2VyLnNlbGVjdChJbnZlc3RpZ2F0
ZURyYXdlci5zZWxlY3RlZCk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CiAgICAg
ICAgICAgICAgICAgfTsKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcv
dGVtcGxhdGVzL2ludmVzdGlnYXRlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0c2Ri
cHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvaW52ZXN0aWdhdGUuaHRtbAkobm9uZXhpc3Rl
bnQpCisrKyBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9pbnZl
c3RpZ2F0ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDczIEBACis8IS0tCisgQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIGFyZSBtZXQ6CisgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiAiQVMgSVMiIEFORCBBTlkKKyBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKy0tPgorCit7JSBleHRl
bmRzICJiYXNlLmh0bWwiICV9Cit7JSBibG9jayBoZWFkICV9Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJhc3NldHMvY3NzL3RpbWVsaW5lLmNzcyI+CisKKzxz
Y3JpcHQgdHlwZT0ibW9kdWxlIj4KK2ltcG9ydCB7Q29tbWl0QmFua30gZnJvbSAnL2Fzc2V0cy9q
cy9jb21taXQuanMnOworaW1wb3J0IHtFcnJvckRpc3BsYXksIFF1ZXJ5TW9kaWZpZXIsIHBhcmFt
c1RvUXVlcnksIHF1ZXJ5VG9QYXJhbXMsIHBlcmNlbnRhZ2UsIGVsYXBzZWRUaW1lfSBmcm9tICcv
YXNzZXRzL2pzL2NvbW1vbi5qcyc7CitpbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gJy9hc3Nl
dHMvanMvY29uZmlndXJhdGlvbi5qcyc7CitpbXBvcnQge0V4cGVjdGF0aW9uc30gZnJvbSAnL2Fz
c2V0cy9qcy9leHBlY3RhdGlvbnMuanMnOworaW1wb3J0IHtEcmF3ZXIsIENvbmZpZ3VyYXRpb25T
ZWxlY3RvcnN9IGZyb20gJy9hc3NldHMvanMvZHJhd2VyLmpzJzsKK2ltcG9ydCB7TGVnZW5kfSBm
cm9tICcvYXNzZXRzL2pzL3RpbWVsaW5lLmpzJzsKK2ltcG9ydCB7VG9vbFRpcH0gZnJvbSAnL2Fz
c2V0cy9qcy90b29sdGlwLmpzJzsKK2ltcG9ydCB7RmFpbHVyZXN9IGZyb20gJy9hc3NldHMvanMv
ZmFpbHVyZXMuanMnOworaW1wb3J0IHtET00sIFJFRiwgRXZlbnRTdHJlYW19IGZyb20gJy9saWJy
YXJ5L2pzL1JlZi5qcyc7CisKK2NvbnN0IERFRkFVTFRfTElNSVQgPSAxMDA7Citjb25zdCBTVUlU
RVMgPSBKU09OLnBhcnNlKCd7eyBzdWl0ZXN8c2FmZSB9fScpOworCitjb25zdCB2aWV3cyA9IFtd
OworbGV0IGFncmVnYXRlQ29ubmZpZ3VyYXRpb24gPSBDb25maWd1cmF0aW9uLmZyb21RdWVyeSgp
OworbGV0IHJhbmdlUGFyYW1zID0ge307CisKK2NvbnN0IHVuZXhwZWN0ZWRRdWVyeSA9IG5ldyBR
dWVyeU1vZGlmaWVyKCd1bmV4cGVjdGVkJyk7CitmdW5jdGlvbiB3aWxsRmlsdGVyRXhwZWN0ZWQo
KSB7CisgICAgY29uc3QgY3VycmVudCA9IHVuZXhwZWN0ZWRRdWVyeS5jdXJyZW50KCk7CisgICAg
aWYgKCFjdXJyZW50Lmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKFsndHJ1
ZScsICdUUlVFJywgJ3llcycsICdZRVMnLCAnMSddLmluY2x1ZGVzKGN1cnJlbnRbY3VycmVudC5s
ZW5ndGggLSAxXSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30K
KworCitmdW5jdGlvbiBjb21taXRzRm9yUmFuZ2UobWluVXVpZCwgbWF4VXVpZCkgeworICAgIGNv
bnN0IGNvbW1pdHMgPSBbXTsKKyAgICBDb21taXRCYW5rLmNvbW1pdHMuZm9yRWFjaChjb21taXQg
PT4geworICAgICAgICBpZiAoY29tbWl0LnV1aWQgPj0gbWluVXVpZCAmJiBjb21taXQudXVpZCA8
PSBtYXhVdWlkKQorICAgICAgICAgICAgY29tbWl0cy5wdXNoKGNvbW1pdCk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIGNvbW1pdHM7Cit9CisKKworY2xhc3MgU3VpdGVGYWlsdXJlc1ZpZXcgeworICAg
IGNvbnN0cnVjdG9yKHN1aXRlKSB7CisgICAgICAgIHRoaXMuc3VpdGUgPSBzdWl0ZTsKKyAgICAg
ICAgdGhpcy5kYXRhRm9yQ29uZmlnID0ge307CisKKyAgICAgICAgdGhpcy5yZWYgPSBSRUYuY3Jl
YXRlUmVmKHsKKyAgICAgICAgICAgIHN0YXRlOiB7ZGlzcGxheWVkOiB0cnVlfSwKKyAgICAgICAg
ICAgIG9uU3RhdGVVcGRhdGU6IChlbGVtZW50LCBkaWZmLCBzdGF0ZSkgPT4geworICAgICAgICAg
ICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IGRpZmYuZGlzcGxheWVkID8gbnVsbCA6ICdu
b25lJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMucHJldmlvdXMg
PSBSRUYuY3JlYXRlUmVmKHsKKyAgICAgICAgICAgIG9uRWxlbWVudE1vdW50OiAoZWxlbWVudCkg
PT4geworICAgICAgICAgICAgICAgIGVsZW1lbnQub25jbGljayA9ICgpID0+IHRoaXMuc2VsZWN0
KHRoaXMuc2VsZWN0ZWQgLSAxKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0pCisgICAgICAg
IHRoaXMubmV4dCA9IFJFRi5jcmVhdGVSZWYoeworICAgICAgICAgICAgb25FbGVtZW50TW91bnQ6
IChlbGVtZW50KSA9PiB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5vbmNsaWNrID0gKCkgPT4g
dGhpcy5zZWxlY3QodGhpcy5zZWxlY3RlZCArIDEpOworICAgICAgICAgICAgfSwKKyAgICAgICAg
fSk7CisKKyAgICAgICAgdGhpcy5yZXN1bHRWaWV3ID0gUkVGLmNyZWF0ZVJlZih7CisgICAgICAg
ICAgICBzdGF0ZToge2NvbmZpZ3VyYXRpb246IG51bGwsIHJlc3VsdHM6IFtdLCBmYWlsdXJlczog
W119LAorICAgICAgICAgICAgb25TdGF0ZVVwZGF0ZTogKGVsZW1lbnQsIGRpZmYsIHN0YXRlKSA9
PiB7CisgICAgICAgICAgICAgICAgaWYgKCFkaWZmLmNvbmZpZ3VyYXRpb24gfHwgIWRpZmYucmVz
dWx0cyB8fCAhZGlmZi5mYWlsdXJlcykgeworICAgICAgICAgICAgICAgICAgICBET00uaW5qZWN0
KGVsZW1lbnQsICc8ZGl2IGNsYXNzPSJsb2FkZXIiPjxkaXYgY2xhc3M9InNwaW5uZXIiPjwvZGl2
PjwvZGl2PicpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgY29uc3QgYWdyZWdhdGVkU3RhdHMgPSB7CisgICAgICAgICAg
ICAgICAgICAgIHRlc3RzX3J1bjogZGlmZi5yZXN1bHRzLm1hcChyZXN1bHQgPT4gcmVzdWx0LnN0
YXRzLnRlc3RzX3J1bikucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCksCisgICAgICAgICAgICAg
ICAgICAgIHRlc3RzX3NraXBwZWQ6IGRpZmYucmVzdWx0cy5tYXAocmVzdWx0ID0+IHJlc3VsdC5z
dGF0cy50ZXN0c19za2lwcGVkKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSwKKyAgICAgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICAgICAgbGV0IGxhc3RWYWx1ZSA9IDA7CisgICAgICAg
ICAgICAgICAgY29uc3Qgd2lsbEZpbHRlckV4cGVjdGVkVmFsdWUgPSB3aWxsRmlsdGVyRXhwZWN0
ZWQoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gRXhwZWN0YXRpb25zLmZhaWx1cmVU
eXBlcy5sZW5ndGggLSAxOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGtleSA9IHdpbGxGaWx0ZXJFeHBlY3RlZFZhbHVlID8gYHRlc3RzX3VuZXhwZWN0ZWRfJHtFeHBl
Y3RhdGlvbnMuZmFpbHVyZVR5cGVzW2ldfWAgOiBgdGVzdHNfJHtFeHBlY3RhdGlvbnMuZmFpbHVy
ZVR5cGVzW2ldfWA7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbWJpbmVkID0gZGlmZi5y
ZXN1bHRzLm1hcChyZXN1bHQgPT4gcmVzdWx0LnN0YXRzW2tleV0gPyByZXN1bHQuc3RhdHNba2V5
XSA6IDApLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApOworICAgICAgICAgICAgICAgICAgICBh
Z3JlZ2F0ZWRTdGF0c1tgdGVzdHNfJHtFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVzW2ldfWBdID0g
TWF0aC5tYXgoY29tYmluZWQgLSBsYXN0VmFsdWUsIDApOworICAgICAgICAgICAgICAgICAgICBs
YXN0VmFsdWUgPSBjb21iaW5lZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YWdyZWdhdGVkU3RhdHMudGVzdHNfc3VjY2VzcyA9IE1hdGgubWF4KGFncmVnYXRlZFN0YXRzLnRl
c3RzX3J1biAtIGxhc3RWYWx1ZSwgMCk7CisKKyAgICAgICAgICAgICAgICBET00uaW5qZWN0KGVs
ZW1lbnQsIGA8ZGl2IGNsYXNzPSJyb3ciPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBj
bGFzcz0iY29sLXMtJHtkaWZmLnJlc3VsdHMubGVuZ3RoID09PSAxID8gJzEyJyA6ICc2J30gbGlz
dCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbSB0ZXh0IGJs
b2NrIiBzdHlsZT0id2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IHdoaXRlLXNwYWNlOiBu
b3dyYXA7IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyI+JHtkaWZmLmNvbmZpZ3VyYXRpb259PC9k
aXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbSI+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXByaXNlZCBvZiAke2RpZmYucmVzdWx0cy5s
ZW5ndGh9IHJ1biR7ZGlmZi5yZXN1bHRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfSB1c2luZwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeygoKSA9PiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWluVXVpZCA9IE1hdGgucm91bmQobmV3IERhdGUo
KS5nZXRUaW1lKCkgLyAxMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZXQgbWF4VXVpZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZm
LnJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1pblV1aWQgPSBNYXRoLm1pbihtaW5VdWlkLCByZXN1bHQudXVpZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4VXVpZCA9IE1hdGgubWF4
KG1heFV1aWQsIHJlc3VsdC51dWlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pblV1aWQg
PiBtYXhVdWlkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAnaW52YWxpZCBjb21taXQgcmFuZ2UnOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjb21taXRzID0gY29tbWl0c0ZvclJhbmdlKG1pblV1aWQsIG1heFV1aWQp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21taXRzLmxlbmd0
aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3Vua25v
d24gY29tbWl0cyc7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNvbW1pdFBhcmFtcyA9IHticmFuY2g6IFtjb21taXRzLm1hcChjb21taXQgPT4gY29tbWl0LmJy
YW5jaCldfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXRz
Lmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29tbWl0UGFyYW1zLnV1aWQgPSBbY29tbWl0c1swXS51dWlkXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxhIGhyZWY9Ii9jb21taXQ/JHtwYXJhbXNU
b1F1ZXJ5KGNvbW1pdFBhcmFtcyl9Ij4ke2NvbW1pdHNbMF0uaWQuc3Vic3RyaW5nKDAsMTIpfTwv
YT5gOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0UGFyYW1zLmFmdGVyX3V1aWQgPSBbbWluVXVp
ZF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRQYXJhbXMuYmVm
b3JlX3V1aWQgPSBbbWluVXVpZF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYDxhIGhyZWY9Ii9jb21taXRzPyR7cGFyYW1zVG9RdWVyeShjb21taXRQYXJhbXMp
fSI+JHtjb21taXRzLmxlbmd0aH0gY29tbWl0czwvYT5gOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9KSgpfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Iml0ZW0iPgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSYW4gJHthZ3JlZ2F0ZWRTdGF0cy50ZXN0c19ydW59IG9mICR7
YWdyZWdhdGVkU3RhdHMudGVzdHNfc2tpcHBlZCArIGFncmVnYXRlZFN0YXRzLnRlc3RzX3J1bn0g
dGVzdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCR7cGVyY2VudGFnZShhZ3Jl
Z2F0ZWRTdGF0cy50ZXN0c19ydW4sIGFncmVnYXRlZFN0YXRzLnRlc3RzX3NraXBwZWQgKyBhZ3Jl
Z2F0ZWRTdGF0cy50ZXN0c19ydW4pfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke09iamVjdC5rZXlzKEV4cGVj
dGF0aW9ucy5jb2xvck1hcCgpKS5tYXAodHlwZSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWFncmVnYXRlZFN0YXRzW2B0ZXN0c18ke3R5cGV9YF0pCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJkb3QgJHt0eXBl
fSBzbWFsbCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxk
aXYgY2xhc3M9InRpbnkgdGV4dCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7bWFyZ2luLXRv
cDogMHB4Ij4ke0V4cGVjdGF0aW9ucy5zeW1ib2xNYXBbdHlwZV19PC9kaXY+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICR7ZGlmZi5yZXN1bHRzLmxlbmd0
aCA9PT0gMSA/IGFncmVnYXRlZFN0YXRzW2B0ZXN0c18ke3R5cGV9YF0gOiBwZXJjZW50YWdlKGFn
cmVnYXRlZFN0YXRzW2B0ZXN0c18ke3R5cGV9YF0sIGFncmVnYXRlZFN0YXRzLnRlc3RzX3J1bil9
ICR7dHlwZSA9PT0gJ3N1Y2Nlc3MnID8gJ3Bhc3NlZCcgOiB0eXBlfTxicj5gOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCcnKX0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RpZmYucmVzdWx0
cy5sZW5ndGggPT09IDEgPyBgPGRpdiBjbGFzcz0iaXRlbSI+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICR7ZGlmZi5yZXN1bHRzWzBdLnN0YXJ0X3RpbWUgPworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYDxhIGhyZWY9Ii91cmxzL2J1aWxkPyR7KCgpID0+IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmFuY2ggPSBx
dWVyeVRvUGFyYW1zKGRvY3VtZW50LlVSTC5zcGxpdCgnPycpWzFdKS5icmFuY2g7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnVpbGRQYXJhbXMgPSBkaWZm
LmNvbmZpZ3VyYXRpb24udG9QYXJhbXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBidWlsZFBhcmFtc1snc3VpdGUnXSA9IFt0aGlzLnN1aXRlXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1sndXVpZCddID0gW2Rp
ZmYucmVzdWx0c1swXS51dWlkXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBidWlsZFBhcmFtc1snYWZ0ZXJfdGltZSddID0gW2RpZmYucmVzdWx0c1swXS5zdGFydF90
aW1lXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFt
c1snYmVmb3JlX3RpbWUnXSA9IFtkaWZmLnJlc3VsdHNbMF0uc3RhcnRfdGltZV07CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyYW5jaCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXNbJ2JyYW5jaCddID0g
YnJhbmNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBw
YXJhbXNUb1F1ZXJ5KGJ1aWxkUGFyYW1zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0pKCl9IiB0YXJnZXQ9Il9ibGFuayI+VGVzdCBydW48L2E+IEAgJHtuZXcgRGF0ZShk
aWZmLnJlc3VsdHNbMF0uc3RhcnRfdGltZSAqIDEwMDApLnRvTG9jYWxlU3RyaW5nKCl9PGJyPmAg
OiAnJ30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkaWZmLnJlc3VsdHNbMF0u
c3RhdHMuc3RhcnRfdGltZSAmJiBkaWZmLnJlc3VsdHNbMF0uc3RhdHMuZW5kX3RpbWUgPworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFN1aXRlIHRvb2sgJHtlbGFwc2VkVGlt
ZShkaWZmLnJlc3VsdHNbMF0uc3RhdHMuc3RhcnRfdGltZSwgZGlmZi5yZXN1bHRzWzBdLnN0YXRz
LmVuZF90aW1lKX1gIDogJyd9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCA6
ICcnfQorICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAg
ICAgICAke2RpZmYucmVzdWx0cy5sZW5ndGggPT09IDEgfHwgIWRpZmYuZmFpbHVyZXMubGVuZ3Ro
ID8gJycgOiBgPGRpdiBjbGFzcz0iZGl2aWRlciBtb2JpbGUtY29udHJvbCI+PC9kaXY+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXMtNiBsaXN0Ij4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkaWZmLmZhaWx1cmVzLnNsaWNlKDAsIDUpLm1h
cChmYWlsdXJlID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB3
b3JzdCA9ICdzdWNjZXNzJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4
cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXMuZm9yRWFjaCh0eXBlID0+IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoZmFpbHVyZVt0eXBlXSku
bGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jz
dCA9IHR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tbWl0cyA9IGNvbW1pdHNG
b3JSYW5nZShmYWlsdXJlLnV1aWRfcmFuZ2VbMF0sIGZhaWx1cmUudXVpZF9yYW5nZVsxXSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9Iml0
ZW0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNs
YXNzPSJkb3QgJHt3b3JzdH0gc21hbGwiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0IiBzdHlsZT0iZm9udC13ZWln
aHQ6IG5vcm1hbDttYXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcFt3b3Jz
dF19PC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwv
ZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFz
cz0idGV4dCBibG9jayIgc3R5bGU9IndpZHRoOiBjYWxjKDEwMCUgLSB2YXIoLS1tZWRpdW1TaXpl
KSAtIDE2cHgpOyBvdmVyZmxvdzogaGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB0ZXh0LW92
ZXJmbG93OiBlbGxpcHNpczsgImhyZWY9Ii9pbnZlc3RpZ2F0ZT8ke3BhcmFtc1RvUXVlcnkoZmFp
bHVyZS50b1BhcmFtcygpKX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJHtjb21taXRzLmxlbmd0aCA/CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29tbWl0c1swXS5pZC5zdWJzdHJpbmcoMCwx
Mil9ICR7Y29tbWl0cy5sZW5ndGggPiAxID8gY29tbWl0c1tjb21taXRzLmxlbmd0aCAtIDFdLmlk
LnN1YnN0cmluZygwLDEyKSA6ICcnfWAgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICc/J30gb24gJHtmYWlsdXJlLmNvbmZpZ3VyYXRpb259Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9KS5qb2luKCcnKX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJHtkaWZmLnJlc3VsdHMubGVuZ3RoID4gMTAgPyAnPGRpdiBjbGFzcz0iaXRlbSBjb250
ZW50Ij5Ub28gbWFueSBydW5zIHRvIGRpc3BsYXkuLi48ZGl2PicgOiAnJ30KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmB9
CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PmApOwor
ICAgICAgICAgICAgfSwKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuZmFpbHVyZVZpZXcgPSBS
RUYuY3JlYXRlUmVmKHsKKyAgICAgICAgICAgIHN0YXRlOiB7Y29uZmlndXJhdGlvbjogbnVsbCwg
cmVzdWx0czogW10sIGZhaWx1cmVzOiBbXX0sCisgICAgICAgICAgICBvblN0YXRlVXBkYXRlOiAo
ZWxlbWVudCwgZGlmZiwgc3RhdGUpID0+IHsKKyAgICAgICAgICAgICAgICBpZiAoIWRpZmYuY29u
ZmlndXJhdGlvbiB8fCAhZGlmZi5yZXN1bHRzIHx8ICFkaWZmLmZhaWx1cmVzKSB7CisgICAgICAg
ICAgICAgICAgICAgIERPTS5pbmplY3QoZWxlbWVudCwgJzxkaXYgY2xhc3M9ImxvYWRlciI+PGRp
diBjbGFzcz0ic3Bpbm5lciI+PC9kaXY+PC9kaXY+Jyk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFkaWZmLmZhaWx1
cmVzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBET00uaW5qZWN0KGVsZW1lbnQsICc8
ZGl2IGNsYXNzPSJjb250ZW50IiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogdmFyKC0tc21hbGxTaXpl
KTsiPk5vIGZhaWx1cmVzPC9kaXY+Jyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29uc3QgZmFpbHVyZXMgPSBGYWlsdXJl
cy5jb21iaW5lKC4uLmRpZmYuZmFpbHVyZXMpOworICAgICAgICAgICAgICAgIGNvbnN0IHJldmVy
c2VkVHlwZXMgPSBbLi4uRXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlc10ucmV2ZXJzZSgpOworCisg
ICAgICAgICAgICAgICAgRE9NLmluamVjdChlbGVtZW50LCBgPGRpdiBjbGFzcz0ibGlzdCI+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAke3JldmVyc2VkVHlwZXMubWFwKHR5cGUgPT4geworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhmYWlsdXJlc1t0eXBl
XSkuc29ydCgoYSwgYikgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBudW1iZXJEaWZmZXJlbmNlID0gZmFpbHVyZXNbdHlwZV1bYV0gLSBmYWlsdXJlc1t0eXBlXVti
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlckRpZmZlcmVuY2Up
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyRGlmZmVy
ZW5jZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubG9jYWxlQ29t
cGFyZShiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5tYXAodGVzdCA9PiB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0iaXRlbSI+
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb3QgJHt0
eXBlfSBzbWFsbCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRp
diBjbGFzcz0idGlueSB0ZXh0IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDttYXJnaW4tdG9w
OiAwcHgiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcFt0eXBlXX08L2Rpdj4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPGEgY2xhc3M9InRleHQgYmxvY2siIHN0eWxlPSJ3aWR0aDogY2FsYygxMDAl
IC0gdmFyKC0tbWVkaXVtU2l6ZSkgLSAxNnB4KTsgb3ZlcmZsb3c6IGhpZGRlbjsgd2hpdGUtc3Bh
Y2U6IG5vd3JhcDsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IiBocmVmPSIvP3N1aXRlPSR7dGhp
cy5zdWl0ZX0mdGVzdD0ke3Rlc3R9IiB0YXJnZXQ9Il9ibGFuayI+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJHt0ZXN0fQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5g
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oJycpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfSkuam9pbignJyl9CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PmApOwor
ICAgICAgICAgICAgfSwKKyAgICAgICAgfSk7CisgICAgICAgIENvbW1pdEJhbmsuY2FsbGJhY2tz
LnB1c2goKCkgPT4ge3RoaXMuc2VsZWN0KHRoaXMuc2VsZWN0ZWQpfSk7CisgICAgICAgIHRoaXMu
cmVsb2FkKCk7CisgICAgfQorICAgIHJlbG9hZCgpIHsKKyAgICAgICAgaWYgKCFPYmplY3Qua2V5
cyhyYW5nZVBhcmFtcykubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRo
aXMuZGF0YUZvckNvbmZpZyA9IHt9OworICAgICAgICB0aGlzLnNlbGVjdCgwKTsKKworICAgICAg
ICBsZXQgcmVzdWx0c0Rpc3BhdGNoZWQgPSBhZ3JlZ2F0ZUNvbm5maWd1cmF0aW9uLmxlbmd0aDsK
KyAgICAgICAgdGhpcy5yZXN1bHRWaWV3LnNldFN0YXRlKHtjb25maWd1cmF0aW9uOiBudWxsLCBy
ZXN1bHRzOiBbXSwgZmFpbHVyZXM6IFtdfSk7CisKKyAgICAgICAgbGV0IGZhaWx1cmVzRGlzcGF0
Y2hlZCA9IGFncmVnYXRlQ29ubmZpZ3VyYXRpb24ubGVuZ3RoOworICAgICAgICB0aGlzLmZhaWx1
cmVWaWV3LnNldFN0YXRlKHtjb25maWd1cmF0aW9uOiBudWxsLCByZXN1bHRzOiBbXSwgZmFpbHVy
ZXM6IFtdfSk7CisKKyAgICAgICAgYWdyZWdhdGVDb25uZmlndXJhdGlvbi5mb3JFYWNoKGNvbmZp
Z1RvU2VhcmNoID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdFBhcmFtcyA9IE9iamVjdC5h
c3NpZ24oY29uZmlnVG9TZWFyY2gudG9QYXJhbXMoKSwgcmFuZ2VQYXJhbXMpOworICAgICAgICAg
ICAgZmV0Y2goYC9hcGkvcmVzdWx0cy8ke3RoaXMuc3VpdGV9PyR7cGFyYW1zVG9RdWVyeShyZXN1
bHRQYXJhbXMpfWApLnRoZW4ocmVzcG9uc2UgPT4geworICAgICAgICAgICAgICAgIHJlc3BvbnNl
Lmpzb24oKS50aGVuKGpzb24gPT4geworICAgICAgICAgICAgICAgICAgICBsZXQgbWluVXVpZCA9
IE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkvMTApOworICAgICAgICAgICAgICAgICAg
ICBsZXQgbWF4VXVpZCA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAganNvbi5mb3JFYWNoKHJl
c3VsdCA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0ZUNvbmZpZyA9
IG5ldyBDb25maWd1cmF0aW9uKHJlc3VsdC5jb25maWd1cmF0aW9uKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghdGhpcy5kYXRhRm9yQ29uZmlnW2NvbXBsZXRlQ29uZmlnLnRvS2V5KCld
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZvckNvbmZpZ1tjb21wbGV0
ZUNvbmZpZy50b0tleSgpXSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
ZmlndXJhdGlvbjogY29tcGxldGVDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdHM6IFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJl
czogW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFGb3JDb25m
aWdbY29tcGxldGVDb25maWcudG9LZXkoKV0uY29uZmlndXJhdGlvbiA9IENvbmZpZ3VyYXRpb24u
Y29tYmluZSh0aGlzLmRhdGFGb3JDb25maWdbY29tcGxldGVDb25maWcudG9LZXkoKV0uY29uZmln
dXJhdGlvbiwgY29tcGxldGVDb25maWcpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5k
YXRhRm9yQ29uZmlnW2NvbXBsZXRlQ29uZmlnLnRvS2V5KCldLnJlc3VsdHMgPSB0aGlzLmRhdGFG
b3JDb25maWdbY29tcGxldGVDb25maWcudG9LZXkoKV0ucmVzdWx0cy5jb25jYXQocmVzdWx0LnJl
c3VsdHMpOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucmVzdWx0cy5mb3JFYWNo
KHJlc3VsdCA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluVXVpZCA9IE1hdGgu
bWluKG1pblV1aWQsIHJlc3VsdC51dWlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YXhVdWlkID0gTWF0aC5tYXgobWF4VXVpZCwgcmVzdWx0LnV1aWQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAg
ICAgIGlmIChtYXhVdWlkID0+IG1pblV1aWQpCisgICAgICAgICAgICAgICAgICAgICAgICBDb21t
aXRCYW5rLmFkZChtaW5VdWlkLCBtYXhVdWlkKTsKKworICAgICAgICAgICAgICAgICAgICAtLXJl
c3VsdHNEaXNwYXRjaGVkOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdHNEaXNwYXRj
aGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZi5zZXRTdGF0ZSh7ZGlzcGxh
eWVkOiBPYmplY3Qua2V5cyh0aGlzLmRhdGFGb3JDb25maWcpLmxlbmd0aH0pOworICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QodGhpcy5zZWxlY3RlZCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pLmNhdGNoKGVycm9y
ID0+IHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbG9hZCBmYWlscywgbG9nIHRoZSBlcnJv
ciBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKEpTT04uc3RyaW5n
aWZ5KGVycm9yLCBudWxsLCA0KSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgRmFp
bHVyZXMuZnJvbUVuZHBvaW50KHRoaXMuc3VpdGUsIGNvbmZpZ1RvU2VhcmNoLCBPYmplY3QuYXNz
aWduKHt1bmV4cGVjdGVkOiBbd2lsbEZpbHRlckV4cGVjdGVkKCldfSwgcmFuZ2VQYXJhbXMpKS50
aGVuKGZhaWx1cmVzID0+IHsKKyAgICAgICAgICAgICAgICBsZXQgbWluVXVpZCA9IE1hdGgucm91
bmQobmV3IERhdGUoKS5nZXRUaW1lKCkvMTApOworICAgICAgICAgICAgICAgIGxldCBtYXhVdWlk
ID0gMDsKKworICAgICAgICAgICAgICAgIGZhaWx1cmVzLmZvckVhY2goZmFpbHVyZSA9PiB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhRm9yQ29uZmlnW2ZhaWx1cmUuY29uZmln
dXJhdGlvbi50b0tleSgpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZvckNv
bmZpZ1tmYWlsdXJlLmNvbmZpZ3VyYXRpb24udG9LZXkoKV0gPSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uZmlndXJhdGlvbjogZmFpbHVyZS5jb25maWd1cmF0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHM6IFtdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZhaWx1cmVzOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZvckNv
bmZpZ1tmYWlsdXJlLmNvbmZpZ3VyYXRpb24udG9LZXkoKV0uY29uZmlndXJhdGlvbiA9IENvbmZp
Z3VyYXRpb24uY29tYmluZSh0aGlzLmRhdGFGb3JDb25maWdbZmFpbHVyZS5jb25maWd1cmF0aW9u
LnRvS2V5KCldLmNvbmZpZ3VyYXRpb24sIGZhaWx1cmUuY29uZmlndXJhdGlvbik7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuZGF0YUZvckNvbmZpZ1tmYWlsdXJlLmNvbmZpZ3VyYXRpb24udG9L
ZXkoKV0uZmFpbHVyZXMucHVzaChmYWlsdXJlKTsKKyAgICAgICAgICAgICAgICAgICAgbWluVXVp
ZCA9IE1hdGgubWluKG1pblV1aWQsIGZhaWx1cmUudXVpZF9yYW5nZVswXSk7CisgICAgICAgICAg
ICAgICAgICAgIG1heFV1aWQgPSBNYXRoLm1heChtYXhVdWlkLCBmYWlsdXJlLnV1aWRfcmFuZ2Vb
MV0pOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaWYgKG1heFV1aWQg
PT4gbWluVXVpZCkKKyAgICAgICAgICAgICAgICAgICAgQ29tbWl0QmFuay5hZGQobWluVXVpZCwg
bWF4VXVpZCk7CisKKyAgICAgICAgICAgICAgICAtLWZhaWx1cmVzRGlzcGF0Y2hlZDsKKyAgICAg
ICAgICAgICAgICBpZiAoIWZhaWx1cmVzRGlzcGF0Y2hlZCkKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5zZWxlY3QodGhpcy5zZWxlY3RlZCk7CisgICAgICAgICAgICB9KS5jYXRjaChlcnJvciA9
PiB7CisgICAgICAgICAgICAgICAgLy8gQSBsb2FkIGZhaWx1cmUgcHJvYmFibHkganVzdCBtZWFu
cyBubyBmYWlsdXJlcyBmb3VuZCwgaW4gdGhhdCBjYXNlLCBpZ25vcmUgdGhlIGVycm9yCisgICAg
ICAgICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhlcnJvcikpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKEpTT04uc3RyaW5naWZ5KGVy
cm9yLCBudWxsLCA0KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorICAg
IHNlbGVjdChzZWxlY3RlZCkgeworICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uS2V5cyA9IE9i
amVjdC5rZXlzKHRoaXMuZGF0YUZvckNvbmZpZyk7CisgICAgICAgIGNvbmZpZ3VyYXRpb25LZXlz
LnNvcnQoKTsKKworICAgICAgICBpZiAodGhpcy5wcmV2aW91cy5lbGVtZW50ICYmIHRoaXMubmV4
dC5lbGVtZW50KSB7CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgJiYgY29uZmlndXJhdGlvbktl
eXMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXMuZWxlbWVudC5zdHlsZS5k
aXNwbGF5ID0gbnVsbDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLnBy
ZXZpb3VzLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgICAgIGlmIChj
b25maWd1cmF0aW9uS2V5cy5sZW5ndGggPiAxICYmIHNlbGVjdGVkIDwgY29uZmlndXJhdGlvbktl
eXMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHRoaXMubmV4dC5lbGVtZW50LnN0eWxlLmRpc3Bs
YXkgPSBudWxsOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRoaXMubmV4dC5l
bGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5z
ZWxlY3RlZCA9IE1hdGgubWluKHNlbGVjdGVkLCBjb25maWd1cmF0aW9uS2V5cy5sZW5ndGgpOwor
CisgICAgICAgIGlmICghY29uZmlndXJhdGlvbktleXMubGVuZ3RoKSB7CisgICAgICAgICAgICB0
aGlzLnJlc3VsdFZpZXcuc2V0U3RhdGUoe2NvbmZpZ3VyYXRpb246IG51bGwsIHJlc3VsdHM6IFtd
LCBmYWlsdXJlczogW119KTsKKyAgICAgICAgICAgIHRoaXMuZmFpbHVyZVZpZXcuc2V0U3RhdGUo
e2NvbmZpZ3VyYXRpb246IG51bGwsIHJlc3VsdHM6IFtdLCBmYWlsdXJlczogW119KTsKKyAgICAg
ICAgfSBlbHNlIGlmIChjb25maWd1cmF0aW9uS2V5cy5sZW5ndGggPT0gMSkgeworICAgICAgICAg
ICAgdGhpcy5yZXN1bHRWaWV3LnNldFN0YXRlKHRoaXMuZGF0YUZvckNvbmZpZ1tjb25maWd1cmF0
aW9uS2V5c1swXV0pOworICAgICAgICAgICAgdGhpcy5mYWlsdXJlVmlldy5zZXRTdGF0ZSh0aGlz
LmRhdGFGb3JDb25maWdbY29uZmlndXJhdGlvbktleXNbMF1dKTsKKyAgICAgICAgfSBlbHNlIGlm
ICh0aGlzLnNlbGVjdGVkID09IDApIHsKKyAgICAgICAgICAgIGNvbnN0IGNvbWJpbmVkID0gewor
ICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24uY29tYmluZSguLi5j
b25maWd1cmF0aW9uS2V5cy5tYXAoa2V5ID0+IHRoaXMuZGF0YUZvckNvbmZpZ1trZXldLmNvbmZp
Z3VyYXRpb24pKSwKKyAgICAgICAgICAgICAgICByZXN1bHRzOiBbXSwKKyAgICAgICAgICAgICAg
ICBmYWlsdXJlczogW10sCisgICAgICAgICAgICB9OworICAgICAgICAgICAgY29uZmlndXJhdGlv
bktleXMuZm9yRWFjaChrZXkgPT4geworICAgICAgICAgICAgICAgIGNvbWJpbmVkLnJlc3VsdHMg
PSBjb21iaW5lZC5yZXN1bHRzLmNvbmNhdCh0aGlzLmRhdGFGb3JDb25maWdba2V5XS5yZXN1bHRz
KTsKKyAgICAgICAgICAgICAgICBjb21iaW5lZC5mYWlsdXJlcyA9IGNvbWJpbmVkLmZhaWx1cmVz
LmNvbmNhdCh0aGlzLmRhdGFGb3JDb25maWdba2V5XS5mYWlsdXJlcyk7CisgICAgICAgICAgICB9
KTsKKworICAgICAgICAgICAgdGhpcy5yZXN1bHRWaWV3LnNldFN0YXRlKGNvbWJpbmVkKTsKKyAg
ICAgICAgICAgIHRoaXMuZmFpbHVyZVZpZXcuc2V0U3RhdGUoY29tYmluZWQpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdGhpcy5yZXN1bHRWaWV3LnNldFN0YXRlKHRoaXMuZGF0YUZv
ckNvbmZpZ1tjb25maWd1cmF0aW9uS2V5c1t0aGlzLnNlbGVjdGVkIC0gMV1dKTsKKyAgICAgICAg
ICAgIHRoaXMuZmFpbHVyZVZpZXcuc2V0U3RhdGUodGhpcy5kYXRhRm9yQ29uZmlnW2NvbmZpZ3Vy
YXRpb25LZXlzW3RoaXMuc2VsZWN0ZWQgLSAxXV0pOworICAgICAgICB9CisgICAgfQorICAgIHRv
U3RyaW5nKCkgeworICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9InNlY3Rpb24iIHJlZj0iJHt0
aGlzLnJlZn0iPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CisgICAgICAg
ICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj4ke3RoaXMuc3VpdGV9PC9kaXY+CisgICAg
ICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAg
ICAgICAgPGRpdiBjbGFzcz0iY29udGVudCB1bnNlbGVjdGFibGUiIHN0eWxlPSJkaXNwbGF5OiBm
bGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGZsZXgtZGlyZWN0aW9uOiByb3c7
IHBhZGRpbmc6IDEwcHg7Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9Indp
ZHRoOiAxNTBweDsgdGV4dC1hbGlnbjogbGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGEgY2xhc3M9ImJ1dHRvbiIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogbm9u
ZSIgcmVmPSIke3RoaXMucHJldmlvdXN9Ij7il4AgUHJldmlvdXM8L2E+CisgICAgICAgICAgICAg
ICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9Indp
ZHRoOiAxNTBweDsgdGV4dC1hbGlnbjogcmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDxhIGNsYXNzPSJidXR0b24iIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IG5v
bmUiIHJlZj0iJHt0aGlzLm5leHR9Ij5OZXh0IOKWtjwvYT4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8
L2Rpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNs
YXNzPSJjb250ZW50IiByZWY9IiR7dGhpcy5yZXN1bHRWaWV3fSI+PC9kaXY+CisgICAgICAgICAg
ICAgICAgICAgIDxkaXYgY2xhc3M9ImRpdmlkZXIiPjwvZGl2PgorICAgICAgICAgICAgICAgICAg
ICA8ZGl2IGNsYXNzPSJjb250ZW50IiByZWY9IiR7dGhpcy5mYWlsdXJlVmlld30iPjwvZGl2Pgor
ICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+PGJyPmA7CisgICAgfQor
fQorCisKK2Z1bmN0aW9uIHBvcHVsYXRlUmFuZ2VzKCkKK3sKKyAgICBsZXQgZGVmaW5lZFJhbmdl
ID0gZmFsc2U7CisgICAgbGV0IGNvbW1pdFBhcmFtcyA9IHt9OworICAgIGxldCB0aW1lUGFyYW1z
ID0ge307CisKKyAgICBbJ2lkJywgJ3V1aWQnLCAndGltZXN0YW1wJywgJ2JyYW5jaCcsICdyZXBv
c2l0b3J5X2lkJ10uZm9yRWFjaChwYXJhbSA9PiB7CisgICAgICAgIFsnJywgJ2JlZm9yZV8nLCAn
YWZ0ZXJfJ10uZm9yRWFjaChwYXJ0aWFsID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9
IChuZXcgUXVlcnlNb2RpZmllcihgJHtwYXJ0aWFsfSR7cGFyYW19YCkpLmN1cnJlbnQoKTsKKyAg
ICAgICAgICAgIGlmICghdmFsdWVzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBpZiAoWydpZCcsICd1dWlkJywgJ3RpbWVzdGFtcCddLmluZGV4T2YocGFyYW0p
ID49IDApCisgICAgICAgICAgICAgICAgZGVmaW5lZFJhbmdlID0gdHJ1ZTsKKyAgICAgICAgICAg
IGNvbW1pdFBhcmFtc1tgJHtwYXJ0aWFsfSR7cGFyYW19YF0gPSB2YWx1ZXM7CisgICAgICAgIH0p
OworICAgIH0pOworCisgICAgWyd0aW1lJywgJ2JlZm9yZV90aW1lJywgJ2FmdGVyX3RpbWUnXS5m
b3JFYWNoKHBhcmFtID0+IHsKKyAgICAgICAgY29uc3QgdmFsdWVzID0gKG5ldyBRdWVyeU1vZGlm
aWVyKHBhcmFtKSkuY3VycmVudCgpOworICAgICAgICBpZiAoIXZhbHVlcy5sZW5ndGgpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmluZWRSYW5nZSA9IHRydWU7CisgICAgICAgIHRp
bWVQYXJhbXNbcGFyYW1dID0gdmFsdWVzOworICAgIH0pOworCisgICAgcmFuZ2VQYXJhbXMgPSBP
YmplY3QuYXNzaWduKGNvbW1pdFBhcmFtcywgdGltZVBhcmFtcyk7CisgICAgY29uc3QgYnJhbmNo
ID0gcXVlcnlUb1BhcmFtcyhkb2N1bWVudC5VUkwuc3BsaXQoJz8nKVsxXSkuYnJhbmNoOworICAg
IGlmIChicmFuY2gpCisgICAgICAgIHJhbmdlUGFyYW1zLmJyYW5jaCA9IFticmFuY2hdOworCisg
ICAgaWYgKCFPYmplY3Qua2V5cyhyYW5nZVBhcmFtcykubGVuZ3RoICYmICFkZWZpbmVkUmFuZ2Up
IHsKKyAgICAgICAgcmFuZ2VQYXJhbXMgPSB7fTsKKyAgICAgICAgY29uc3QgcGFyYW1zID0gT2Jq
ZWN0LmFzc2lnbih7fSwgY29tbWl0UGFyYW1zKTsKKyAgICAgICAgaWYgKCFkZWZpbmVkUmFuZ2Up
CisgICAgICAgICAgICBwYXJhbXMubGltaXQgPSBbMV07CisgICAgICAgIENvbW1pdEJhbmsubGF0
ZXN0KHBhcmFtcykudGhlbigoKSA9PiB7CisgICAgICAgICAgICByYW5nZVBhcmFtcyA9IE9iamVj
dC5hc3NpZ24oY29tbWl0UGFyYW1zLCB0aW1lUGFyYW1zKTsKKyAgICAgICAgICAgIHJhbmdlUGFy
YW1zLmFmdGVyX3V1aWQgPSBbQ29tbWl0QmFuay5jb21taXRzWzBdLnV1aWRdOworICAgICAgICAg
ICAgcmFuZ2VQYXJhbXMuYmVmb3JlX3V1aWQgPSBbQ29tbWl0QmFuay5jb21taXRzW0NvbW1pdEJh
bmsuY29tbWl0cy5sZW5ndGggLSAxXS51dWlkXTsKKyAgICAgICAgICAgIHZpZXdzLmZvckVhY2go
dmlldyA9PiB2aWV3LnJlbG9hZCgpKTsKKyAgICAgICAgfSk7CisgICAgfSAgIAorfQorCisKK2Z1
bmN0aW9uIHJlbG9hZCgpCit7CisgICAgYWdyZWdhdGVDb25uZmlndXJhdGlvbiA9IENvbmZpZ3Vy
YXRpb24uZnJvbVF1ZXJ5KCk7CisgICAgcG9wdWxhdGVSYW5nZXMoKTsKKyAgICB2aWV3cy5mb3JF
YWNoKHZpZXcgPT4gdmlldy5yZWxvYWQoKSk7Cit9CisKKworcG9wdWxhdGVSYW5nZXMoKTsKK1NV
SVRFUy5mb3JFYWNoKHN1aXRlID0+IHsKKyAgICB2aWV3cy5wdXNoKG5ldyBTdWl0ZUZhaWx1cmVz
VmlldyhzdWl0ZSkpOworfSkKKword2luZG93Lm9ucG9wc3RhdGUgPSBldmVudCA9PiB7CisgICAg
cmVsb2FkKCk7Cit9Oword2luZG93Lm9ucHVzaHN0YXRlID0gZXZlbnQgPT4geworICAgIHJlbG9h
ZCgpOworfTsKKworbGV0IHZpZXdwb3J0ID0gbnVsbDsKK0RPTS5pbmplY3QoCisgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcCcpLAorICAgIGAke0RyYXdlcihbQ29uZmlndXJhdGlvblNl
bGVjdG9ycyhyZWxvYWQpXSl9CisKKyAgICA8ZGl2IGNsYXNzPSJtYWluIHJpZ2h0LXNpZGViYXIg
dW5kZXItdG9wYmFyLXdpdGgtYWN0aW9ucyI+CisgICAgICAgIDxicj4KKyAgICAgICAgPGRpdiBj
bGFzcz0iY29udGVudCI+CisgICAgICAgICAgICAke3ZpZXdzLmpvaW4oJycpfQorICAgICAgICA8
L2Rpdj4KKyAgICA8L2Rpdj5gCispOworCis8L3NjcmlwdD4KKworeyUgZW5kYmxvY2sgJX0KK3sl
IGJsb2NrIGNvbnRlbnQgJX0KKworPGRpdiBpZD0iYXBwIj4KKzwvZGl2PgorCit7JSBlbmRibG9j
ayAlfQpJbmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMv
c3VpdGVfcmVzdWx0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3Vs
dHNkYnB5L3ZpZXcvdGVtcGxhdGVzL3N1aXRlX3Jlc3VsdHMuaHRtbAkocmV2aXNpb24gMjU5MzAx
KQorKysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVf
cmVzdWx0cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDcgQEAgJHtEcmF3ZXIo
WwogICAgIENvbmZpZ3VyYXRpb25TZWxlY3RvcnMoKCkgPT4ge3ZpZXcucmVsb2FkKCl9KSwKIF0s
ICgpID0+IG9uTGF5b3V0Q2hhbmdlLmFkZCgpKX0KIDxkaXYgY2xhc3M9Im1haW4gcmlnaHQtc2lk
ZWJhciB1bmRlci10b3BiYXItd2l0aC1hY3Rpb25zIj4KKyAgICA8YnI+CiAgICAgPGRpdiBjbGFz
cz0iY29udGVudCIgcmVmPSR7UkVGLmNyZWF0ZVJlZih7CiAgICAgICAgICAgICBvbkVsZW1lbnRN
b3VudDogKGVsZW1lbnQpID0+IHsKICAgICAgICAgICAgICAgICBmb3IgKGxldCBzdWl0ZSBpbiB2
aWV3LmNoaWxkcmVuKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395232</attachid>
            <date>2020-04-01 18:16:44 -0700</date>
            <delta_ts>2020-04-22 15:02:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209562-20200401181643.patch</filename>
            <type>text/plain</type>
            <size>59139</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI1OTMxMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU5IEBACisyMDIwLTAzLTMxICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICByZXN1bHRzLndlYmtpdC5vZzogQWRkIGludmVzdGlnYXRpb24gZW5kcG9p
bnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTU2
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBh
biBlbmRwb2ludCB0aGF0IGFsbG93cyB1c2VycyB0byBsaXN0IGFsbCB0ZXN0IGZhaWx1cmVzIGdp
dmVuIHNvbWUgY3JpdGVyaWEsIGFuZAorICAgICAgICBwcm92aWRlIGEgcGFydGlhbCBsaXN0IG9m
IGZhaWx1cmVzIGluIHRoZSBpbnZlc3RpZ2F0aW9uIGRyYXdlci4KKworICAgICAgICAqIHJlc3Vs
dHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2NvbW1pdC5qczoKKyAgICAgICAgKENv
bW1pdFRhYmxlKTogTGluayBjb21taXQgdG8gaW52ZXN0aWdhdGlvbiBlbmRwb2ludC4KKyAgICAg
ICAgKF9Db21taXRCYW5rLnByb3RvdHlwZS5sYXRlc3QpOiBQb3B1bGF0ZSB0aGUgQ29tbWl0QmFu
ayB3aXRoIHRoZSBsYXN0IHggY29tbWl0cy4KKyAgICAgICAgKF9Db21taXRCYW5rLnByb3RvdHlw
ZS5fbG9hZCk6IExvYWQgYSBzaW5nbGUgY29tbWl0IGlmIHRoZSBiZWZvcmUgYW5kIGFmdGVyIHV1
aWQgbWF0Y2guCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMv
anMvY29tbW9uLmpzOgorICAgICAgICAocGFyYW1zVG9RdWVyeSk6IEZhbHNlIHNob3VsZCBiZSBh
ZGRlZCBhcyBhIHBhcmFtZXRlciwgaWYgcHJvdmlkZWQuCisgICAgICAgIChwZXJjZW50YWdlKTog
TW92ZWQgZnJvbSBpbnZlc3RpZ2F0ZS5qcy4KKyAgICAgICAgKGVsYXBzZWRUaW1lKTogRGl0dG8u
CisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvY29uZmln
dXJhdGlvbi5qczoKKyAgICAgICAgKENvbmZpZ3VyYXRpb24uY29tYmluZSk6IEFsbG93IGNvbmZp
Z3VyYXRpb25zIHRvIGJlIGNvbWJpbmVkIHRvIGEgc2luZ2xlLCBtb3JlIGdlbmVyYWwsIGNvbmZp
Z3VyYXRpb24uCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMv
anMvZmFpbHVyZXMuanM6IEFkZGVkLgorICAgICAgICAoRmFpbHVyZXMucHJvdG90eXBlLmZyb21F
bmRwb2ludCk6IENvbnN0cnVjdCBhIGZhaWx1cmUgb2JqZWN0IGZyb20gdGhlIGZhaWx1cmVzIGVu
ZHBvaW50LgorICAgICAgICAoRmFpbHVyZXMuY29tYmluZSk6IENvbWJpbmUgdHdvIGZhaWx1cmUg
b2JqZWN0cyB0b2dldGhlci4KKyAgICAgICAgKEZhaWx1cmVzKToKKyAgICAgICAgKEZhaWx1cmVz
LnByb3RvdHlwZS50b1BhcmFtcyk6IENvbnZlcnQgb2JqZWN0IHRvIHBhcmFtZXRlcnMgZm9yIG90
aGVyIHJlc3VsdHMgZGF0YWJhc2UgcXVlcmllcy4KKyAgICAgICAgKiByZXN1bHRzZGJweS9yZXN1
bHRzZGJweS92aWV3L3N0YXRpYy9qcy9pbnZlc3RpZ2F0ZS5qczoKKyAgICAgICAgKGVsYXBzZWQp
OiBVc2VkIHNoYXJlZCB0aW1lIGVsYXBzZWQgZnVuY3Rpb24uCisgICAgICAgIChwZXJjZW50YWdl
KTogTW92ZWQgdG8gY29tbW9uLmpzLgorICAgICAgICAocHJpb3JpdGl6ZWRGYWlsdXJlcyk6IFJl
dHVybiBhIGRpdiB3aXRoIGEgdHJ1bmNhdGVkIGxpc3Qgb2YgdGVzdHMgd2hpY2ggZmFpbGVkLgor
ICAgICAgICAocmVzdWx0c0ZvckRhdGEpOiBJbmNsdWRlIHNvbWUgbnVtYmVyIG9mIHByaW9yaXRp
emVkIHRlc3QgZmFpbHVyZXMgYmFzZWQgb24gaG93IG1hbnkgYnViYmxlcyBhcmUKKyAgICAgICAg
YWxyZWFkeSBkaXNwbGF5ZWQuCisgICAgICAgIChfSW52ZXN0aWdhdGVEcmF3ZXIucHJvdG90eXBl
LmV4cGFuZCk6IERpc3BhdGNoIGZhaWx1cmUgcmVxdWVzdC4KKyAgICAgICAgKF9JbnZlc3RpZ2F0
ZURyYXdlci5wcm90b3R5cGUuZGlzcGF0Y2gpOiBTdGFydCByZXF1ZXN0IHRvIGZhaWx1cmVzIGVu
ZHBvaW50LgorICAgICAgICAqIHJlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pz
L3RpbWVsaW5lLmpzOgorICAgICAgICAoVGltZWxpbmVGcm9tRW5kcG9pbnQucHJvdG90eXBlLnJl
bmRlci5vbkRvdEVudGVyRmFjdG9yeSk6IEFkZCBsaW5rIHRvIGludmVzdGlnYXRpb24gZW5kcG9p
bnQuCisgICAgICAgIChMZWdlbmQpOiBXaGVuIHNlYXJjaCBwYXJhbWV0ZXJzIGNoYW5nZSwgd2Ug
bmVlZCB0byByZS1kaXNwYXRjaCBmYWlsdXJlIHJlcXVlc3RzLgorICAgICAgICAqIHJlc3VsdHNk
YnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3VpdGVfdmlldy5weToKKyAgICAgICAgKFN1aXRlVmlldy5f
c3VpdGVzX2Zvcl9pbnZlc3RpZ2F0aW9uKTogRmlsdGVyIHBhcmFtZXRlcnMgZm9yIGludmVzdGln
YXRpb24gZW5kcG9pbnQuCisgICAgICAgIChTdWl0ZVZpZXcuaW52ZXN0aWdhdGUpOiBSZXR1cm4g
aW52ZXN0aWdhdGlvbiBlbmRwb2ludCBodG1sIHRlbXBsYXRlLgorICAgICAgICAqIHJlc3VsdHNk
YnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL2ludmVzdGlnYXRlLmh0bWw6IEFkZGVkLgor
ICAgICAgICAod2lsbEZpbHRlckV4cGVjdGVkKTogQ2hlY2sgaWYgdGhlIHF1ZXJ5IHBhcmFtZXRl
cnMgaW5kaWNhdGUgdGhhdCBleHBlY3RlZCBmYWlsdXJlcyBhcmUgdG8gYmUgaWdub3JlZC4KKyAg
ICAgICAgKGNvbW1pdHNGb3JSYW5nZSk6IFJldHVybiBhIGxpc3Qgb2YgY29tbWl0cyBmb3IgYSB1
dWlkIHJhbmdlLgorICAgICAgICAoU3VpdGVGYWlsdXJlc1ZpZXcuY29uc3RydWN0b3IpOiBBYnN0
cmFjdGlvbiB0byBob2xkIHRoZSBpbnZlc3RpZ2F0aW9uIGRhdGEgZm9yIGEgc2luZ2xlIHN1aXRl
LgorICAgICAgICAoU3VpdGVGYWlsdXJlc1ZpZXcucmVsb2FkKTogRGlzcGF0Y2ggcmVxdWVzdHMg
dG8gdGhlIHJlc3VsdHMgYW5kIGZhaWx1cmVzIGVuZHBvaW50IHRvIHBvcHVsYXRlCisgICAgICAg
IGludmVzdGlnYXRpb24gZGF0YS4KKyAgICAgICAgKFN1aXRlRmFpbHVyZXNWaWV3LnNlbGVjdCk6
IEJ5IGRlZmF1bHQsIGZhaWx1cmVzIGZvciBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgYXJlIGNv
bGxhcHNlZCBpbnRvIGEgc2luZ2xlCisgICAgICAgIHZpZXcuIEFsbG93cyB0aGUgdXNlciB0byBp
dGVyYXRlIHRocm91Z2ggZWFjaCBjb25maWd1cmF0aW9uIHRoYXQgY29tcHJpc2VzIHRoZSB2aWV3
LgorICAgICAgICAoU3VpdGVGYWlsdXJlc1ZpZXcudG9TdHJpbmcpOgorICAgICAgICAocG9wdWxh
dGVSYW5nZXMpOiBFaXRoZXIgY29udmVydCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzIHRvIGEgcmFu
Z2UgdG8gc2VhcmNoIGZvciBmYWlsdXJlcyBhbmQgcmVzdWx0cworICAgICAgICBpbiwgb3IgdXNl
IHRoZSBtb3N0IHJlY2VudCBjb21taXQuCisgICAgICAgIChyZWxvYWQpOiBGb3JjZSBhbGwgc3Vp
dGUgdmlld3MgdG8gcmUtZGlzcGF0Y2ggcmVzdWx0cyBhbmQgZmFpbHVyZXMgcmVxdWVzdHMuCisg
ICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVz
dWx0cy5odG1sOiBBZGQgc3BhY2UgYmV0d2VlbiBzdWl0ZSBjb250ZW50IGFuZAorICAgICAgICB0
b3AgYmFyLgorICAgICAgICAqIHJlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdmlld19yb3V0
ZXMucHk6CisgICAgICAgIChWaWV3Um91dGVzLl9faW5pdF9fKTogQWRkIGludmVzdGlnYXRlIGVu
ZHBvaW50LgorCiAyMDIwLTAzLTMxICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgQWRkIFNQSSBXS1dlYnBhZ2VQcmVmZXJlbmNlcy5fdXNlckNv
bnRlbnRDb250cm9sbGVyCkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3
L3N1aXRlX3ZpZXcucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2Ri
cHkvdmlldy9zdWl0ZV92aWV3LnB5CShyZXZpc2lvbiAyNTkzMDEpCisrKyBUb29scy9yZXN1bHRz
ZGJweS9yZXN1bHRzZGJweS92aWV3L3N1aXRlX3ZpZXcucHkJKHdvcmtpbmcgY29weSkKQEAgLTEs
NCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxOSwgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc3LDYgKzc3LDM2IEBA
IGNsYXNzIFN1aXRlVmlldyhIYXNDb21taXRDb250ZXh0KToKICAgICBAbGltaXRfZm9yX3F1ZXJ5
KERFRkFVTFRfTElNSVQpCiAgICAgQGNvbmZpZ3VyYXRpb25fZm9yX3F1ZXJ5KCkKICAgICBAdGlt
ZV9yYW5nZV9mb3JfcXVlcnkoKQorICAgIGRlZiBfc3VpdGVzX2Zvcl9pbnZlc3RpZ2F0aW9uKAor
ICAgICAgICBzZWxmLCBzdWl0ZT1Ob25lLCBjb25maWd1cmF0aW9ucz1Ob25lLCByZWNlbnQ9Tm9u
ZSwKKyAgICAgICAgYnJhbmNoPU5vbmUsIGJlZ2luPU5vbmUsIGVuZD1Ob25lLAorICAgICAgICBi
ZWdpbl9xdWVyeV90aW1lPU5vbmUsIGVuZF9xdWVyeV90aW1lPU5vbmUsCisgICAgICAgIHVuZXhw
ZWN0ZWQ9Tm9uZSwKKyAgICAgICAgbGltaXQ9Tm9uZSwgKiprd2FyZ3MKKyAgICApOgorICAgICAg
ICBBc3NlcnRSZXF1ZXN0LmlzX3R5cGUoWydHRVQnXSkKKyAgICAgICAgQXNzZXJ0UmVxdWVzdC5x
dWVyeV9rd2FyZ3NfZW1wdHkoKiprd2FyZ3MpCisKKyAgICAgICAgd2l0aCBzZWxmLnVwbG9hZF9j
b250cm9sbGVyLnVwbG9hZF9jb250ZXh0OgorICAgICAgICAgICAgc3VpdGVzX2J5X2NvbmZpZ3Vy
YXRpb24gPSBzZWxmLnVwbG9hZF9jb250cm9sbGVyLnVwbG9hZF9jb250ZXh0LmZpbmRfc3VpdGVz
KGNvbmZpZ3VyYXRpb25zPWNvbmZpZ3VyYXRpb25zLCByZWNlbnQ9Ym9vbGVhbl9xdWVyeSgqcmVj
ZW50KVswXSBpZiByZWNlbnQgZWxzZSBUcnVlKQorICAgICAgICAgICAgY2FuZGlkYXRlX3N1aXRl
cyA9IHNldCgpCisgICAgICAgICAgICBmb3Igc3VpdGVzX2Zvcl9jb25maWcgaW4gc3VpdGVzX2J5
X2NvbmZpZ3VyYXRpb24udmFsdWVzKCk6CisgICAgICAgICAgICAgICAgZm9yIHMgaW4gc3VpdGVz
X2Zvcl9jb25maWc6CisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZV9zdWl0ZXMuYWRkKHMp
CisgICAgICAgICAgICByZXR1cm4gc29ydGVkKFtzIGZvciBzIGluIGNhbmRpZGF0ZV9zdWl0ZXMg
aWYgbm90IHN1aXRlIG9yIHMgaW4gc3VpdGVdKQorCisgICAgQFNpdGVNZW51LnJlbmRlcl93aXRo
X3NpdGVfbWVudSgpCisgICAgZGVmIGludmVzdGlnYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuZW52aXJvbm1lbnQuZ2V0X3RlbXBsYXRlKCdpbnZlc3RpZ2F0ZS5odG1s
JykucmVuZGVyKAorICAgICAgICAgICAgdGl0bGU9c2VsZi5zaXRlX21lbnUudGl0bGUsCisgICAg
ICAgICAgICBzdWl0ZXM9anNvbi5kdW1wcyhzZWxmLl9zdWl0ZXNfZm9yX2ludmVzdGlnYXRpb24o
KSksCisgICAgICAgICAgICAqKmt3YXJncykKKworICAgIEBxdWVyeV9hc19rd2FyZ3MoKQorICAg
IEB1dWlkX3JhbmdlX2Zvcl9xdWVyeSgpCisgICAgQGxpbWl0X2Zvcl9xdWVyeShERUZBVUxUX0xJ
TUlUKQorICAgIEBjb25maWd1cmF0aW9uX2Zvcl9xdWVyeSgpCisgICAgQHRpbWVfcmFuZ2VfZm9y
X3F1ZXJ5KCkKICAgICBkZWYgX3N1aXRlc19mb3Jfc2VhcmNoKAogICAgICAgICBzZWxmLCBzdWl0
ZT1Ob25lLCBjb25maWd1cmF0aW9ucz1Ob25lLCByZWNlbnQ9Tm9uZSwKICAgICAgICAgYnJhbmNo
PU5vbmUsIGJlZ2luPU5vbmUsIGVuZD1Ob25lLApJbmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVz
dWx0c2RicHkvdmlldy92aWV3X3JvdXRlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9yZXN1bHRz
ZGJweS9yZXN1bHRzZGJweS92aWV3L3ZpZXdfcm91dGVzLnB5CShyZXZpc2lvbiAyNTkzMDEpCisr
KyBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3ZpZXdfcm91dGVzLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTksIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC04NSw3ICs4NSw5IEBAIGNsYXNzIFZpZXdSb3V0ZXMoQXV0aGVkQmx1ZXByaW50KToKICAgICAg
ICAgc2VsZi5hZGRfdXJsX3J1bGUoJy9jb21taXQvcHJldmlvdXMnLCAnY29tbWl0X3ByZXZpb3Vz
Jywgc2VsZi5jb21taXRzLnByZXZpb3VzLCBtZXRob2RzPSgnR0VUJywpKQogICAgICAgICBzZWxm
LmFkZF91cmxfcnVsZSgnL2NvbW1pdC9uZXh0JywgJ2NvbW1pdF9uZXh0Jywgc2VsZi5jb21taXRz
Lm5leHQsIG1ldGhvZHM9KCdHRVQnLCkpCiAgICAgICAgIHNlbGYuYWRkX3VybF9ydWxlKCcvY29t
bWl0cycsICdjb21taXRzJywgc2VsZi5jb21taXRzLmNvbW1pdHMsIG1ldGhvZHM9KCdHRVQnLCkp
CisKICAgICAgICAgc2VsZi5hZGRfdXJsX3J1bGUoJy9zdWl0ZXMnLCAnc3VpdGVzJywgc2VsZi5z
dWl0ZXMucmVzdWx0cywgbWV0aG9kcz0oJ0dFVCcsKSkKKyAgICAgICAgc2VsZi5hZGRfdXJsX3J1
bGUoJy9pbnZlc3RpZ2F0ZScsICdpbnZlc3RpZ2F0ZScsIHNlbGYuc3VpdGVzLmludmVzdGlnYXRl
LCBtZXRob2RzPSgnR0VUJywpKQogCiAgICAgICAgIHNlbGYuYWRkX3VybF9ydWxlKCcvdXJscy9x
dWV1ZScsICd1cmxzLXF1ZXVlJywgc2VsZi5jaS5xdWV1ZSwgbWV0aG9kcz0oJ0dFVCcsKSkKICAg
ICAgICAgc2VsZi5hZGRfdXJsX3J1bGUoJy91cmxzL3dvcmtlcicsICd1cmxzLXdvcmtlcicsIHNl
bGYuY2kud29ya2VyLCBtZXRob2RzPSgnR0VUJywpKQpAQCAtMTA3LDYgKzEwOSw3IEBAIGNsYXNz
IFZpZXdSb3V0ZXMoQXV0aGVkQmx1ZXByaW50KToKIAogICAgICAgICBzZWxmLnNpdGVfbWVudS5h
ZGRfZW5kcG9pbnQoJ01haW4nLCBzZWxmLm5hbWUgKyAnLm1haW4nLCBwYXJhbWV0ZXJzPVsnYnJh
bmNoJ10pCiAgICAgICAgIHNlbGYuc2l0ZV9tZW51LmFkZF9lbmRwb2ludCgnU3VpdGVzJywgc2Vs
Zi5uYW1lICsgJy5zdWl0ZXMnLCBwYXJhbWV0ZXJzPVsnYnJhbmNoJ10pCisgICAgICAgIHNlbGYu
c2l0ZV9tZW51LmFkZF9lbmRwb2ludCgnSW52ZXN0aWdhdGUnLCBzZWxmLm5hbWUgKyAnLmludmVz
dGlnYXRlJywgcGFyYW1ldGVycz1bJ2JyYW5jaCddKQogICAgICAgICBzZWxmLnNpdGVfbWVudS5h
ZGRfZW5kcG9pbnQoJ0RvY3VtZW50YXRpb24nLCBzZWxmLm5hbWUgKyAnLmRvY3VtZW50YXRpb24n
KQogICAgICAgICBzZWxmLnNpdGVfbWVudS5hZGRfZW5kcG9pbnQoJ0NvbW1pdHMnLCBzZWxmLm5h
bWUgKyAnLmNvbW1pdHMnLCBwYXJhbWV0ZXJzPVsnYnJhbmNoJ10pCiAKSW5kZXg6IFRvb2xzL3Jl
c3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2NvbW1pdC5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9jb21taXQu
anMJKHJldmlzaW9uIDI1OTMwMSkKKysrIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3Zp
ZXcvc3RhdGljL2pzL2NvbW1pdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8v
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKEMpIDIwMTksIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8KIC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OCwxMiArOTgsMjEgQEAgZnVuY3Rp
b24gQ29tbWl0VGFibGUoY29tbWl0cywgcmVwb3NpdG9yeQogICAgICAgICAgICAgICAgICAgICBp
ZiAoY2VsbC50aW1lc3RhbXApCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDx0ZCBy
b3dzcGFuPSIke2NlbGwucm93c3Bhbn0iPiR7bmV3IERhdGUoY2VsbC50aW1lc3RhbXAgKiAxMDAw
KS50b0xvY2FsZVN0cmluZygpfTwvdGQ+YDsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgY29t
bWl0X2FyZ3MgPSAncmVwb3NpdG9yeV9pZD0nICsgY2VsbC5jb21taXQucmVwb3NpdG9yeV9pZCAr
ICcmYnJhbmNoPScgKyBjZWxsLmNvbW1pdC5icmFuY2ggKyAnJmlkPScgKyBjZWxsLmNvbW1pdC5p
ZDsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGNvbW1pdEFyZ3MgPSBwYXJhbXNUb1F1ZXJ5KHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ6IFtjZWxsLmNvbW1pdC5yZXBv
c2l0b3J5X2lkXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaDogW2NlbGwuY29tbWl0
LmJyYW5jaF0sCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogW2NlbGwuY29tbWl0LmlkXSwK
KyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGxldCBpbnZlc3Rp
Z2F0ZUFyZ3MgPSB7aWQ6IFtjZWxsLmNvbW1pdC5pZF19OworICAgICAgICAgICAgICAgICAgICBp
ZiAoIVsnbWFzdGVyJywgJ3RydW5rJ10uaW5jbHVkZXMoY2VsbC5jb21taXQuYnJhbmNoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGludmVzdGlnYXRlQXJncy5icmFuY2ggPSBbY2VsbC5jb21t
aXQuYnJhbmNoXTsKKwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDx0ZCByb3dzcGFuPSIk
e2NlbGwucm93c3Bhbn0iPgotICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL2NvbW1p
dD8ke2NvbW1pdF9hcmdzfSI+JHtjZWxsLmNvbW1pdC5pZH08L2E+IDxicj4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIDxhIGhyZWY9Ii9jb21taXQ/JHtjb21taXRBcmdzfSI+JHtjZWxsLmNvbW1p
dC5pZH08L2E+IDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgIEJyYW5jaDogJHtjZWxsLmNv
bW1pdC5icmFuY2h9IDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1pdHRlcjogJHtl
c2NhcGVIVE1MKGNlbGwuY29tbWl0LmNvbW1pdHRlcil9IDxicj4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIDxhIGhyZWY9Ii9jb21taXQvaW5mbz8ke2NvbW1pdF9hcmdzfSI+TW9yZSBJbmZvPC9h
PgorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL2NvbW1pdC9pbmZvPyR7Y29tbWl0
QXJnc30iPk1vcmUgSW5mbzwvYT48YnI+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVm
PSIvaW52ZXN0aWdhdGU/JHtwYXJhbXNUb1F1ZXJ5KGludmVzdGlnYXRlQXJncyl9Ij5UZXN0IHJl
c3VsdHMgZm9yIGNvbW1pdDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICR7ZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjZWxsLmNvbW1pdC5tZXNzYWdl
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7CkBAIC0xNDcsNiAr
MTU2LDU5IEBAIGNsYXNzIF9Db21taXRCYW5rIHsKICAgICAgICAgdGhpcy5jYWxsYmFja3MgPSBb
XTsKIAogICAgIH0KKyAgICBsYXRlc3QocGFyYW1zKSB7CisgICAgICAgIHRoaXMuX2JyYW5jaGVz
ID0gbmV3IFNldChwYXJhbXMuYnJhbmNoKTsKKyAgICAgICAgdGhpcy5fcmVwb3NpdG9yaWVzID0g
bmV3IFNldChwYXJhbXMucmVwb3NpdG9yeV9pZCk7CisgICAgICAgIHRoaXMuX2JlZ2luVXVpZCA9
IG51bGw7CisgICAgICAgIHRoaXMuX2VuZFV1aWQgPSBudWxsOworCisgICAgICAgIC8vIE9ubHkg
cHJvdmlkZSB0aGUgbGF0ZXN0IGNvbW1pdHMKKyAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7Cisg
ICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAg
ICAgICAgICAgIGZldGNoKE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoID8gYGFwaS9jb21taXRz
PyR7cGFyYW1zVG9RdWVyeShwYXJhbXMpfWAgOiAnYXBpL2NvbW1pdHMnKS50aGVuKHJlc3BvbnNl
ID0+IHsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5qc29uKCkudGhlbihqc29uID0+IHsKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fYmVnaW5VdWlkID0gTWF0aC5mbG9vcihEYXRlLm5vdygp
IC8gMTAwMCk7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2VuZFV1aWQgPSAwOworCisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG9sZGVzdElkRm9yUmVwbyA9IHt9OworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gW107CisgICAgICAgICAgICAgICAgICAgIGpzb24u
Zm9yRWFjaChkYXR1bSA9PnsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1pdCA9
IG5ldyBDb21taXQoZGF0dW0pOworICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5w
dXNoKGNvbW1pdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRlc3RJZEZvclJl
cG9bY29tbWl0LnJlcG9zaXRvcnlfaWRdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9s
ZGVzdElkRm9yUmVwb1tjb21taXQucmVwb3NpdG9yeV9pZF0gPSBNYXRoLm1pbihjb21taXQudXVp
ZCwgb2xkZXN0SWRGb3JSZXBvW2NvbW1pdC5yZXBvc2l0b3J5X2lkXSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkZXN0SWRGb3JS
ZXBvW2NvbW1pdC5yZXBvc2l0b3J5X2lkXSA9IGNvbW1pdC51dWlkOworICAgICAgICAgICAgICAg
ICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICBsZXQgb2xkZXN0VmFsaWRVdWlkID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMob2xkZXN0SWRGb3JSZXBvKS5mb3JFYWNo
KGlkID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZGVzdFZhbGlkVXVpZCA9IE1hdGgu
bWF4KG9sZGVzdFZhbGlkVXVpZCwgaWQpOworICAgICAgICAgICAgICAgICAgICB9KTsKKworICAg
ICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmZvckVhY2goY29tbWl0ID0+IHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjb21taXQudXVpZCA8PSBvbGRlc3RWYWxpZFV1aWQpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5jb21taXRzLnB1c2goY29tbWl0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X2JlZ2luVXVpZCA9IE1hdGgubWluKGNvbW1pdC51dWlkLCBzZWxmLl9iZWdpblV1aWQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZW5kVXVpZCA9IE1hdGgubWF4KGNvbW1pdC51dWlk
LCBzZWxmLl9lbmRVdWlkKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHNlbGYuX2JlZ2luVXVpZCA+IHNlbGYuX2VuZFV1aWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX2JlZ2luVXVpZCA9IG51bGw7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9lbmRVdWlkID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcyk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhl
IGxvYWQgZmFpbHMsIGxvZyB0aGUgZXJyb3IgYW5kIGNvbnRpbnVlCisgICAgICAgICAgICAgICAg
Y29uc29sZS5lcnJvcihKU09OLnN0cmluZ2lmeShlcnJvciwgbnVsbCwgNCkpOworICAgICAgICAg
ICAgICAgIHJlamVjdChlcnJvcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAg
fQogICAgIGNvbW1pdEJ5VXVpZCh1dWlkKSB7CiAgICAgICAgIGxldCBiZWdpbiA9IDA7CiAgICAg
ICAgIGxldCBlbmQgPSB0aGlzLmNvbW1pdHMubGVuZ3RoIC0gMTsKQEAgLTI0NSw3ICszMDcsNyBA
QCBjbGFzcyBfQ29tbWl0QmFuayB7CiAgICAgICAgIH0pOwogICAgIH0KICAgICBfbG9hZChiZWdp
blV1aWQsIGVuZFV1aWQpIHsKLSAgICAgICAgaWYgKGVuZFV1aWQgPD0gYmVnaW5VdWlkKQorICAg
ICAgICBpZiAoZW5kVXVpZCA8IGJlZ2luVXVpZCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBjb25zdCBsaW1pdCA9IDI1MDA7CkBAIC0zNjYsNCArNDI4LDQgQEAgY2xhc3MgX0NvbW1p
dEJhbmsgewogCiBjb25zdCBDb21taXRCYW5rID0gbmV3IF9Db21taXRCYW5rKCk7CiAKLWV4cG9y
dCB7Q29tbWl0LCBDb21taXRCYW5rLCBDb21taXRUYWJsZX07CitleHBvcnQge0NvbW1pdCwgQ29t
bWl0QmFuaywgQ29tbWl0VGFibGUsIFRJTUVTVEFNUF9UT19VVUlEX01VTFRJUExJRVJ9OwpJbmRl
eDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvY29tbW9uLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGlj
L2pzL2NvbW1vbi5qcwkocmV2aXNpb24gMjU5MzAxKQorKysgVG9vbHMvcmVzdWx0c2RicHkvcmVz
dWx0c2RicHkvdmlldy9zdGF0aWMvanMvY29tbW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3
ICs1NSw3IEBAIGZ1bmN0aW9uIHBhcmFtc1RvUXVlcnkoanNvbikgewogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KICAgICAgICAganNvbltwYXJhbWV0ZXJdLmZvckVhY2goKHZhbHVl
KSA9PiB7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgaWYgKHZhbHVlID09
PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgcmVzdWx0ICs9IChyZXN1bHQgPyAnJicgOiAnJykgKyBlbmNvZGVVUklDb21w
b25lbnQocGFyYW1ldGVyKSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7CiAgICAg
ICAgIH0pOwpAQCAtMTY1LDQgKzE2NSwzMiBAQCBmdW5jdGlvbiBkZWVwQ29tcGFyZShhLCBiKSB7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWV4cG9ydCB7ZGVlcENvbXBhcmUsIEVycm9yRGlzcGxh
eSwgcXVlcnlUb1BhcmFtcywgcGFyYW1zVG9RdWVyeSwgUXVlcnlNb2RpZmllciwgZXNjYXBlSFRN
TH07CitmdW5jdGlvbiBwZXJjZW50YWdlKHZhbHVlLCBtYXgpCit7CisgICAgaWYgKHZhbHVlID09
PSBtYXgpCisgICAgICAgIHJldHVybiAnMTAwICUnOworICAgIGlmICghdmFsdWUpCisgICAgICAg
IHJldHVybiAnMCAlJzsKKyAgICBjb25zdCByZXN1bHQgPSBNYXRoLnJvdW5kKHZhbHVlIC8gbWF4
ICogMTAwKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuICc8MSAlJzsKKyAgICBp
ZiAocmVzdWx0ID09PSAxMDApCisgICAgICAgIHJldHVybiAnOTkgJSc7CisgICAgcmV0dXJuIGAk
e3Jlc3VsdH0gJWAKK30KKworZnVuY3Rpb24gZWxhcHNlZFRpbWUoc3RhcnRUaW1lc3RhbXAsIGVu
ZFRpbWVzdGFtcCkKK3sKKyAgICBjb25zdCB0aW1lID0gbmV3IERhdGUoKGVuZFRpbWVzdGFtcCAt
IHN0YXJ0VGltZXN0YW1wKSAqIDEwMDApOworICAgIGxldCByZXN1bHQgPSAnJzsKKyAgICBpZiAo
dGltZS5nZXRNaW51dGVzKCkpCisgICAgICAgIHJlc3VsdCArPSBgJHt0aW1lLmdldE1pbnV0ZXMo
KX06YDsKKyAgICByZXN1bHQgKz0gYCR7dGltZS5nZXRTZWNvbmRzKCkgPD0gOSAmJiB0aW1lLmdl
dE1pbnV0ZXMoKSA/ICcwJyA6ICcnfSR7dGltZS5nZXRTZWNvbmRzKCl9LiR7dGltZS5nZXRNaWxs
aXNlY29uZHMoKSA8PSA5OSA/ICcwJyA6ICcnfSR7dGltZS5nZXRNaWxsaXNlY29uZHMoKSA8PSA5
ID8gJzAnIDogJyd9JHt0aW1lLmdldE1pbGxpc2Vjb25kcygpfSBgOworICAgIGlmICh0aW1lLmdl
dE1pbnV0ZXMoKSkKKyAgICAgICAgcmVzdWx0ICs9ICdtaW51dGVzIHRvIHJ1bic7CisgICAgZWxz
ZQorICAgICAgICByZXN1bHQgKz0gJ3NlY29uZHMgdG8gcnVuJzsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitleHBvcnQge2RlZXBDb21wYXJlLCBFcnJvckRpc3BsYXksIHF1ZXJ5VG9QYXJhbXMs
IHBhcmFtc1RvUXVlcnksIFF1ZXJ5TW9kaWZpZXIsIGVzY2FwZUhUTUwsIHBlcmNlbnRhZ2UsIGVs
YXBzZWRUaW1lfTsKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3Rh
dGljL2pzL2NvbmZpZ3VyYXRpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0c2RicHkv
cmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvY29uZmlndXJhdGlvbi5qcwkocmV2aXNpb24gMjU5
MzAxKQorKysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvY29u
ZmlndXJhdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsMjAgQEAgY2xhc3MgQ29u
ZmlndXJhdGlvbiB7CiAgICAgICAgIHJldHVybiByZXN1bHQuam9pbignLicpOwogICAgIH0KIAor
ICAgIHN0YXRpYyBjb21iaW5lKCkKKyAgICB7CisgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0
aCkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ29uZmlndXJhdGlvbigpOworICAgICAgICBjb25z
dCBjb21iaW5lZCA9IG5ldyBDb25maWd1cmF0aW9uKGFyZ3VtZW50c1swXSk7CisgICAgICAgIGZv
ciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBD
b25maWd1cmF0aW9uLm1lbWJlcnMoKS5mb3JFYWNoKG1lbWJlciA9PiB7CisgICAgICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50c1tpXVttZW1iZXJdICE9PSBjb21iaW5lZFttZW1iZXJdKQorICAgICAg
ICAgICAgICAgICAgICBjb21iaW5lZFttZW1iZXJdID0gbnVsbDsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBjb21iaW5lZDsKKyAgICB9CisKICAgICBjb25zdHJ1
Y3Rvcihqc29uID0ge30pIHsKICAgICAgICAgdGhpcy5wbGF0Zm9ybSA9IGpzb24ucGxhdGZvcm0g
PyBqc29uLnBsYXRmb3JtIDogbnVsbDsKICAgICAgICAgdGhpcy52ZXJzaW9uID0ganNvbi52ZXJz
aW9uID8gQ29uZmlndXJhdGlvbi52ZXJzaW9uVG9JbnRlZ2VyKGpzb24udmVyc2lvbikgOiBudWxs
OwpJbmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvZmFp
bHVyZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmll
dy9zdGF0aWMvanMvZmFpbHVyZXMuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvcmVzdWx0c2Ri
cHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvZmFpbHVyZXMuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNTkgQEAKKy8vIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy8vIGFyZSBt
ZXQ6CisvLyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKy8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIKKy8vIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorLy8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisvLyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisvLyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorLy8gU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisvLyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorLy8gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKy8vIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKy8vIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHtUSU1FU1RBTVBfVE9fVVVJRF9NVUxUSVBMSUVS
fSBmcm9tICcvYXNzZXRzL2pzL2NvbW1pdC5qcyc7CitpbXBvcnQge3F1ZXJ5VG9QYXJhbXMsIHBh
cmFtc1RvUXVlcnksIFF1ZXJ5TW9kaWZpZXJ9IGZyb20gJy9hc3NldHMvanMvY29tbW9uLmpzJzsK
K2ltcG9ydCB7RXhwZWN0YXRpb25zfSBmcm9tICcvYXNzZXRzL2pzL2V4cGVjdGF0aW9ucy5qcyc7
CitpbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gJy9hc3NldHMvanMvY29uZmlndXJhdGlvbi5q
cyc7CisKK2NsYXNzIEZhaWx1cmVzIHsKKyAgICBzdGF0aWMgZnJvbUVuZHBvaW50KHN1aXRlLCBj
b25maWd1cmF0aW9uPW51bGwsIHBhcmFtcz17fSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcg
UHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIGNvbnN0IHBh
cmFtc1RvRGlzcGF0Y2ggPSBPYmplY3QuYXNzaWduKGNvbmZpZ3VyYXRpb24gPyBjb25maWd1cmF0
aW9uLnRvUGFyYW1zKCkgOiB7fSwgcGFyYW1zKTsKKyAgICAgICAgICAgIHBhcmFtc1RvRGlzcGF0
Y2guY29sbGFwc2VkID0gW2ZhbHNlXTsKKyAgICAgICAgICAgIGlmIChwYXJhbXNUb0Rpc3BhdGNo
LnVuZXhwZWN0ZWQgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgICBwYXJhbXNUb0Rpc3Bh
dGNoLnVuZXhwZWN0ZWQgPSBbZmFsc2VdOworCisgICAgICAgICAgICBmZXRjaChgYXBpL2ZhaWx1
cmVzLyR7c3VpdGV9PyR7cGFyYW1zVG9RdWVyeShwYXJhbXNUb0Rpc3BhdGNoKX1gKS50aGVuKHJl
c3BvbnNlID0+IHsKKyAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107CisgICAgICAgICAg
ICAgICAgcmVzcG9uc2UuanNvbigpLnRoZW4oanNvbiA9PiB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghQXJyYXkuaXNBcnJheShqc29uKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBbXTsKKyAgICAgICAgICAgICAgICAgICAganNvbi5mb3JFYWNoKChwYWlycykgPT4geworICAg
ICAgICAgICAgICAgICAgICAgICAgcGFpcnMucmVzdWx0cy5mb3JFYWNoKChydW4pID0+IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXcgRmFpbHVyZXMoc3VpdGUs
IG5ldyBDb25maWd1cmF0aW9uKHBhaXJzLmNvbmZpZ3VyYXRpb24pLCBydW4pKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzb2x2ZShyZXN1bHQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfSkuY2F0Y2goZXJyb3IgPT4geworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBsb2FkIGZh
aWxzLCBsb2cgdGhlIGVycm9yIGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnNvbGUu
ZXJyb3IoSlNPTi5zdHJpbmdpZnkoZXJyb3IsIG51bGwsIDQpKTsKKyAgICAgICAgICAgICAgICBy
ZWplY3QoZXJyb3IpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IHN0YXRpYyBjb21iaW5lKCkKKyAgICB7CisgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBG
YWlsdXJlcyhhcmd1bWVudHNbMF0uc3VpdGUpOworICAgICAgICBjb25zdCBjb25maWd1cmF0aW9u
cyA9IFtdOworCisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICBjb25maWd1cmF0aW9ucy5wdXNoKGFyZ3VtZW50c1tpXS5jb25m
aWd1cmF0aW9uKTsKKyAgICAgICAgICAgIHJlc3VsdC5hZ2dyZWdhdGluZyArPSBhcmd1bWVudHNb
aV0uYWdncmVnYXRpbmc7CisgICAgICAgICAgICByZXN1bHQuc3RhcnRfdGltZV9yYW5nZSA9IFsK
KyAgICAgICAgICAgICAgICBNYXRoLm1pbihyZXN1bHQuc3RhcnRfdGltZV9yYW5nZVswXSwgYXJn
dW1lbnRzW2ldLnN0YXJ0X3RpbWVfcmFuZ2VbMF0pLAorICAgICAgICAgICAgICAgIE1hdGgubWF4
KHJlc3VsdC5zdGFydF90aW1lX3JhbmdlWzFdLCBhcmd1bWVudHNbaV0uc3RhcnRfdGltZV9yYW5n
ZVsxXSksCisgICAgICAgICAgICBdOworICAgICAgICAgICAgcmVzdWx0LnV1aWRfcmFuZ2UgPSBb
CisgICAgICAgICAgICAgICAgTWF0aC5taW4ocmVzdWx0LnV1aWRfcmFuZ2VbMF0sIGFyZ3VtZW50
c1tpXS51dWlkX3JhbmdlWzBdKSwKKyAgICAgICAgICAgICAgICBNYXRoLm1heChyZXN1bHQudXVp
ZF9yYW5nZVsxXSwgYXJndW1lbnRzW2ldLnV1aWRfcmFuZ2VbMV0pLAorICAgICAgICAgICAgXTsK
KworICAgICAgICAgICAgLy8gQ29tYmluZQorICAgICAgICAgICAgRXhwZWN0YXRpb25zLmZhaWx1
cmVUeXBlcy5mb3JFYWNoKHR5cGUgPT4geworICAgICAgICAgICAgICAgIGZvciAobGV0IHRlc3Qg
aW4gYXJndW1lbnRzW2ldW3R5cGVdKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRb
dHlwZV1bdGVzdF0gPT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dFt0eXBlXVt0ZXN0XSA9IGFyZ3VtZW50c1tpXVt0eXBlXVt0ZXN0XTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3R5cGVdW3Rlc3RdICs9
IGFyZ3VtZW50c1tpXVt0eXBlXVt0ZXN0XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgLy8gUHJpb3JpdGl6ZSBmYWlsdXJlcworICAgICAgICAgICAg
Y29uc3QgcmVtYWluaW5nVHlwZXMgPSBbLi4uRXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlc107Cisg
ICAgICAgICAgICB3aGlsZSAocmVtYWluaW5nVHlwZXMubGVuZ3RoID4gMSkgeworICAgICAgICAg
ICAgICAgIGNvbnN0IHRvUmVtb3ZlID0gW107CisgICAgICAgICAgICAgICAgY29uc3QgY3VycmVu
dFR5cGUgPSByZW1haW5pbmdUeXBlc1swXTsKKyAgICAgICAgICAgICAgICByZW1haW5pbmdUeXBl
cy5zaGlmdCgpOworCisgICAgICAgICAgICAgICAgZm9yIChsZXQgdGVzdCBpbiByZXN1bHRbY3Vy
cmVudFR5cGVdKSB7CisgICAgICAgICAgICAgICAgICAgIGxldCB3b3JzdFR5cGUgPSBjdXJyZW50
VHlwZTsKKyAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nVHlwZXMuZm9yRWFjaCh0eXBlID0+
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRbdHlwZV1bdGVzdF0gIT09IHVu
ZGVmaW5lZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JzdFR5cGUgPSB0eXBlOwor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdvcnN0VHlw
ZSA9PSBjdXJyZW50VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICByZXN1bHRbd29yc3RUeXBlXVt0ZXN0XSArPSByZXN1bHRbY3VycmVu
dFR5cGVdW3Rlc3RdOworICAgICAgICAgICAgICAgICAgICB0b1JlbW92ZS5wdXNoKHRlc3QpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0b1JlbW92ZS5mb3JFYWNoKHRlc3Qg
PT4geworICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0W2N1cnJlbnRUeXBlXVt0ZXN0
XTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXN1bHQuY29uZmlndXJhdGlvbiA9IENvbmZpZ3VyYXRpb24uY29tYmluZSguLi5jb25maWd1
cmF0aW9ucyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgY29uc3RydWN0
b3Ioc3VpdGUsIGNvbmZpZ3VyYXRpb24gPSBudWxsLCBqc29uID0gbnVsbCkgeworICAgICAgICB0
aGlzLnN1aXRlID0gc3VpdGU7CisgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3Vy
YXRpb24gPyBuZXcgQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKSA6IG5ldyBDb25maWd1cmF0
aW9uKCk7CisKKyAgICAgICAgRXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlcy5mb3JFYWNoKHR5cGUg
PT4geworICAgICAgICAgICAgdGhpc1t0eXBlXSA9IHt9OworICAgICAgICB9KTsKKyAgICAgICAg
aWYgKGpzb24gPT09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuYWdncmVnYXRpbmcgPSAwOwor
ICAgICAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAx
MDAwKTsKKyAgICAgICAgICAgIHRoaXMuc3RhcnRfdGltZV9yYW5nZSA9IFtjdXJyZW50VGltZSwg
MF07CisgICAgICAgICAgICB0aGlzLnV1aWRfcmFuZ2UgPSBbY3VycmVudFRpbWUgKiBUSU1FU1RB
TVBfVE9fVVVJRF9NVUxUSVBMSUVSLCAwXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIHRoaXMuYWdncmVnYXRpbmcgPSAxOworICAgICAgICB0aGlzLnN0YXJ0X3Rp
bWVfcmFuZ2UgPSBbanNvbi5zdGFydF90aW1lLCBqc29uLnN0YXJ0X3RpbWVdOworICAgICAgICB0
aGlzLnV1aWRfcmFuZ2UgPSBbanNvbi51dWlkLCBqc29uLnV1aWRdOworICAgICAgICBmb3IgKHZh
ciBwYXJhbWV0ZXIgaW4ganNvbikgeworICAgICAgICAgICAgaWYgKHBhcmFtZXRlciA9PT0gJ3V1
aWQnIHx8IHBhcmFtZXRlciA9PT0gJ3N0YXJ0X3RpbWUnKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgY29uc3QgdHlwZSA9IEV4cGVjdGF0aW9ucy50eXBlRm9ySWQoanNv
bltwYXJhbWV0ZXJdKTsKKyAgICAgICAgICAgIHRoaXNbdHlwZV1bcGFyYW1ldGVyXSA9IDE7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgdG9QYXJhbXMoKSB7CisgICAgICAgIGNvbnN0IHBhcmFtcyA9
IHRoaXMuY29uZmlndXJhdGlvbi50b1BhcmFtcygpOworICAgICAgICBwYXJhbXMuc3VpdGUgPSBb
dGhpcy5zdWl0ZV07CisgICAgICAgIGlmICh0aGlzLnV1aWRfcmFuZ2VbMF0gPD0gdGhpcy51dWlk
X3JhbmdlWzFdKSB7CisgICAgICAgICAgICBpZiAodGhpcy51dWlkX3JhbmdlWzBdID09PSB0aGlz
LnV1aWRfcmFuZ2VbMV0pCisgICAgICAgICAgICAgICAgcGFyYW1zLnV1aWQgPSBbdGhpcy51dWlk
X3JhbmdlWzBdXTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHBhcmFtcy5h
ZnRlcl91dWlkID0gW3RoaXMudXVpZF9yYW5nZVswXV07CisgICAgICAgICAgICAgICAgcGFyYW1z
LmJlZm9yZV91dWlkID0gW3RoaXMudXVpZF9yYW5nZVsxXV07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHRoaXMuc3RhcnRfdGltZV9yYW5nZVswXSA8PSB0aGlzLnN0YXJ0
X3RpbWVfcmFuZ2VbMV0pIHsKKyAgICAgICAgICAgIHBhcmFtcy5hZnRlcl90aW1lID0gW3RoaXMu
c3RhcnRfdGltZV9yYW5nZVswXV07CisgICAgICAgICAgICBwYXJhbXMuYmVmb3JlX3RpbWUgPSBb
dGhpcy5zdGFydF90aW1lX3JhbmdlWzFdXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGFy
YW1zOworICAgIH0KK307CisKK2V4cG9ydCB7RmFpbHVyZXN9OwpJbmRleDogVG9vbHMvcmVzdWx0
c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvaW52ZXN0aWdhdGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvaW52ZXN0
aWdhdGUuanMJKHJldmlzaW9uIDI1OTMwMSkKKysrIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNk
YnB5L3ZpZXcvc3RhdGljL2pzL2ludmVzdGlnYXRlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw5
ICsyNCwxMCBAQAogaW1wb3J0IHtBcmNoaXZlUm91dGVyfSBmcm9tICcvYXNzZXRzL2pzL2FyY2hp
dmVSb3V0ZXIuanMnOwogaW1wb3J0IHtET00sIFJFRn0gZnJvbSAnL2xpYnJhcnkvanMvUmVmLmpz
JzsKIGltcG9ydCB7Q29tbWl0QmFua30gZnJvbSAnL2Fzc2V0cy9qcy9jb21taXQuanMnOwotaW1w
b3J0IHtxdWVyeVRvUGFyYW1zLCBwYXJhbXNUb1F1ZXJ5LCBRdWVyeU1vZGlmaWVyLCB9IGZyb20g
Jy9hc3NldHMvanMvY29tbW9uLmpzJzsKK2ltcG9ydCB7cXVlcnlUb1BhcmFtcywgcGFyYW1zVG9R
dWVyeSwgUXVlcnlNb2RpZmllciwgcGVyY2VudGFnZSwgZWxhcHNlZFRpbWV9IGZyb20gJy9hc3Nl
dHMvanMvY29tbW9uLmpzJzsKIGltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnL2Fzc2V0cy9q
cy9jb25maWd1cmF0aW9uLmpzJwogaW1wb3J0IHtFeHBlY3RhdGlvbnN9IGZyb20gJy9hc3NldHMv
anMvZXhwZWN0YXRpb25zLmpzJzsKK2ltcG9ydCB7RmFpbHVyZXN9IGZyb20gJy9hc3NldHMvanMv
ZmFpbHVyZXMuanMnOwogCiBmdW5jdGlvbiBjb21taXRzRm9yVXVpZCh1dWlkKSB7CiAgICAgcmV0
dXJuIGBDb21taXRzOiAke0NvbW1pdEJhbmsuY29tbWl0c0R1cmluZ1V1aWQodXVpZCkubWFwKChj
b21taXQpID0+IHsKQEAgLTcyLDMzICs3Myw2MCBAQCBmdW5jdGlvbiBlbGFwc2VkKGRhdGEpCiB7
CiAgICAgaWYgKGRhdGEudGltZSkKICAgICAgICAgcmV0dXJuIGBUb29rICR7ZGF0YS50aW1lIC8g
MTAwMH0gc2Vjb25kc2A7Ci0gICAgaWYgKGRhdGEuc3RhdHMgJiYgZGF0YS5zdGF0cy5zdGFydF90
aW1lICYmIGRhdGEuc3RhdHMuZW5kX3RpbWUpIHsKLSAgICAgICAgY29uc3QgdGltZSA9IG5ldyBE
YXRlKChkYXRhLnN0YXRzLmVuZF90aW1lIC0gZGF0YS5zdGF0cy5zdGFydF90aW1lKSAqIDEwMDAp
OwotICAgICAgICBsZXQgcmVzdWx0ID0gJ1N1aXRlIHRvb2sgJzsKLSAgICAgICAgaWYgKHRpbWUu
Z2V0TWludXRlcygpKQotICAgICAgICAgICAgcmVzdWx0ICs9IGAke3RpbWUuZ2V0TWludXRlcygp
fTpgOwotICAgICAgICByZXN1bHQgKz0gYCR7dGltZS5nZXRTZWNvbmRzKCkgPD0gOSAmJiB0aW1l
LmdldE1pbnV0ZXMoKSA/ICcwJyA6ICcnfSR7dGltZS5nZXRTZWNvbmRzKCl9LiR7dGltZS5nZXRN
aWxsaXNlY29uZHMoKSA8PSA5OSA/ICcwJyA6ICcnfSR7dGltZS5nZXRNaWxsaXNlY29uZHMoKSA8
PSA5ID8gJzAnIDogJyd9JHt0aW1lLmdldE1pbGxpc2Vjb25kcygpfSBgOwotICAgICAgICBpZiAo
dGltZS5nZXRNaW51dGVzKCkpCi0gICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0ZXMgdG8gcnVu
JzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWNvbmRzIHRvIHJ1bic7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChkYXRhLnN0YXRzICYmIGRh
dGEuc3RhdHMuc3RhcnRfdGltZSAmJiBkYXRhLnN0YXRzLmVuZF90aW1lKQorICAgICAgICByZXR1
cm4gYFN1aXRlIHRvb2sgJHtlbGFwc2VkVGltZShkYXRhLnN0YXRzLnN0YXJ0X3RpbWUsIGRhdGEu
c3RhdHMuZW5kX3RpbWUpfWA7CiAgICAgcmV0dXJuICcnOwogfQogCi1mdW5jdGlvbiBwZXJjZW50
YWdlKHZhbHVlLCBtYXgpCitmdW5jdGlvbiBwcmlvcml0aXplZEZhaWx1cmVzKGZhaWx1cmVzLCBt
YXggPSAwLCB3aWxsRmlsdGVyRXhwZWN0ZWQgPSBmYWxzZSkKIHsKLSAgICBpZiAodmFsdWUgPT09
IG1heCkKLSAgICAgICAgcmV0dXJuICcxMDAgJSc7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAg
cmV0dXJuICcwICUnOwotICAgIGNvbnN0IHJlc3VsdCA9IE1hdGgucm91bmQodmFsdWUgLyBtYXgg
KiAxMDApOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gJzwxICUnOwotICAgIGlm
IChyZXN1bHQgPT09IDEwMCkKLSAgICAgICAgcmV0dXJuICc5OSAlJzsKLSAgICByZXR1cm4gYCR7
cmVzdWx0fSAlYAorICAgIGlmIChmYWlsdXJlcyA9PT0gdW5kZWZpbmVkKQorICAgICAgICByZXR1
cm4gJyc7CisKKyAgICBpZiAoZmFpbHVyZXMgPT09IG51bGwpCisgICAgICAgIHJldHVybiBgPGRp
diBjbGFzcz0ibG9hZGVyIj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGlubmVyIj48
L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PmA7CisgICAgbGV0IGZhaWx1cmVzVG9EaXNwbGF5ID0g
W107CisgICAgRXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlcy5mb3JFYWNoKHR5cGUgPT4geworICAg
ICAgICBmb3IgKGxldCB0ZXN0TmFtZSBpbiBmYWlsdXJlc1t0eXBlXSkgeworICAgICAgICAgICAg
ZmFpbHVyZXNUb0Rpc3BsYXkucHVzaCh7CisgICAgICAgICAgICAgICAgZmFpbHVyZTogdHlwZSwK
KyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0TmFtZSwKKyAgICAgICAgICAgICAgICBjb3VudDog
ZmFpbHVyZXMuYWdncmVnYXRpbmcsCisgICAgICAgICAgICAgICAgZmFpbHVyZUNvdW50OiBmYWls
dXJlc1t0eXBlXVt0ZXN0TmFtZV0sCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0p
OworICAgIGZhaWx1cmVzVG9EaXNwbGF5LnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICBj
b25zdCB0eXBlQ29tcGFyZSA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoRXhwZWN0YXRp
b25zLmZhaWx1cmVUeXBlTWFwW2EuZmFpbHVyZV0pIC0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3Rh
dGVJZChFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVNYXBbYi5mYWlsdXJlXSk7CisgICAgICAgIGlm
ICh0eXBlQ29tcGFyZSkKKyAgICAgICAgICAgIHJldHVybiB0eXBlQ29tcGFyZTsKKyAgICAgICAg
aWYgKGEuZmFpbHVyZUNvdW50IC0gYi5mYWlsdXJlQ291bnQpCisgICAgICAgICAgICByZXR1cm4g
YS5mYWlsdXJlQ291bnQgLSBiLmZhaWx1cmVDb3VudDsKKyAgICAgICAgcmV0dXJuIChhLnRlc3Qp
LmxvY2FsZUNvbXBhcmUoYi50ZXN0KTsKKyAgICB9KTsKKworICAgIGlmIChtYXggJiYgZmFpbHVy
ZXNUb0Rpc3BsYXkubGVuZ3RoID4gbWF4KSB7CisgICAgICAgIGZhaWx1cmVzVG9EaXNwbGF5ID0g
ZmFpbHVyZXNUb0Rpc3BsYXkuc3BsaWNlKDAsIG1heCk7CisgICAgICAgIGZhaWx1cmVzVG9EaXNw
bGF5W21heCAtIDFdID0gbnVsbDsKKyAgICB9CisKKworCisgICAgcmV0dXJuIGA8ZGl2PiR7ZmFp
bHVyZXNUb0Rpc3BsYXkubWFwKGZhaWx1cmUgPT4geworICAgICAgICBpZiAoZmFpbHVyZSA9PT0g
bnVsbCkgeworICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gZmFpbHVyZXMudG9QYXJhbXMoKTsK
KyAgICAgICAgICAgIHBhcmFtcy51bmV4cGVjdGVkID0gW3dpbGxGaWx0ZXJFeHBlY3RlZF07Cisg
ICAgICAgICAgICByZXR1cm4gYDxhIHN0eWxlPSJtYXJnaW4tbGVmdDogY2FsYyh2YXIoLS1tZWRp
dW1TaXplKSArIDE2cHgpIiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iL2ludmVzdGlnYXRlPyR7cGFy
YW1zVG9RdWVyeShwYXJhbXMpfSI+TW9yZS4uLjwvYT5gOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBgPGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb3QgJHtmYWlsdXJlLmZh
aWx1cmV9IHNtYWxsIj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0
IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDttYXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRp
b25zLnN5bWJvbE1hcFtmYWlsdXJlLmZhaWx1cmVdfTwvZGl2PgorICAgICAgICAgICAgICAgIDwv
ZGl2PgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJ0ZXh0IGJsb2NrIiBzdHlsZT0id2lkdGg6
IGNhbGMoMTAwJSAtIHZhcigtLW1lZGl1bVNpemUpIC0gMTZweCk7IG92ZXJmbG93OiBoaWRkZW47
IHdoaXRlLXNwYWNlOiBub3dyYXA7IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyIgaHJlZj0iLz9z
dWl0ZT0ke2ZhaWx1cmVzLnN1aXRlfSZ0ZXN0PSR7ZmFpbHVyZS50ZXN0fSI+JHtmYWlsdXJlLnRl
c3R9PC9hPgorICAgICAgICAgICAgPC9kaXY+YDsKKyAgICB9KS5qb2luKCcnKX08L2Rpdj5gOwog
fQogCiBmdW5jdGlvbiByZXN1bHRzRm9yRGF0YShkYXRhLCB3aWxsRmlsdGVyRXhwZWN0ZWQgPSBm
YWxzZSkKQEAgLTExMCwzNCArMTM4LDMzIEBAIGZ1bmN0aW9uIHJlc3VsdHNGb3JEYXRhKGRhdGEs
IHdpbGxGaWx0ZXIKICAgICAgICAgdGVzdHNSYW4gPSBkYXRhLnN0YXRzLnRlc3RzX3J1bjsKICAg
ICAgICAgdG90YWxUZXN0cyA9IGRhdGEuc3RhdHMudGVzdHNfcnVuICsgKGRhdGEuc3RhdHMudGVz
dHNfc2tpcHBlZCA/IGRhdGEuc3RhdHMudGVzdHNfc2tpcHBlZCA6IDApOwogICAgIH0KLSAgICBy
ZXN1bHQucHVzaChgUmFuICR7dGVzdHNSYW4udG9Mb2NhbGVTdHJpbmcoKX0gb2YgJHt0b3RhbFRl
c3RzLnRvTG9jYWxlU3RyaW5nKCl9IHRlc3RzYCk7CisgICAgbGV0IGRvdHNEaXNwbGF5ZWQgPSAw
OworICAgIHJlc3VsdC5wdXNoKGA8ZGl2PlJhbiAke3Rlc3RzUmFuLnRvTG9jYWxlU3RyaW5nKCl9
IG9mICR7dG90YWxUZXN0cy50b0xvY2FsZVN0cmluZygpfSB0ZXN0c2ApOwogICAgIGlmIChkYXRh
LmFjdHVhbCkgewogICAgICAgICBjb25zdCB0eXBlID0gRXhwZWN0YXRpb25zLnR5cGVGb3JJZChk
YXRhLmFjdHVhbCk7Ci0gICAgICAgIHJlc3VsdC5wdXNoKGA8ZGl2PgotICAgICAgICAgICAgICAg
IEFjdHVhbDogJHtkYXRhLmFjdHVhbH0KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb3Qg
JHt0eXBlfSBzbWFsbCI+Ci0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbnkgdGV4
dCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7bWFyZ2luLXRvcDogMHB4Ij4ke0V4cGVjdGF0
aW9ucy5zeW1ib2xNYXBbdHlwZV19PC9kaXY+Ci0gICAgICAgICAgICAgICAgPC9kaXY+CisgICAg
ICAgICsrZG90c0Rpc3BsYXllZDsKKyAgICAgICAgcmVzdWx0LnB1c2goYEFjdHVhbDogJHtkYXRh
LmFjdHVhbH0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvdCAke3R5cGV9IHNtYWxsIj4KKyAg
ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxlPSJmb250LXdlaWdodDog
bm9ybWFsO21hcmdpbi10b3A6IDBweCI+JHtFeHBlY3RhdGlvbnMuc3ltYm9sTWFwW3R5cGVdfTwv
ZGl2PgogICAgICAgICAgICAgPC9kaXY+YCk7CiAgICAgfQogICAgIGlmIChkYXRhLmV4cGVjdGVk
KSB7CiAgICAgICAgIGNvbnN0IHR5cGUgPSBFeHBlY3RhdGlvbnMudHlwZUZvcklkKGRhdGEuZXhw
ZWN0ZWQpOwotICAgICAgICByZXN1bHQucHVzaChgPGRpdj4KLSAgICAgICAgICAgICAgICBFeHBl
Y3RlZDogJHtkYXRhLmV4cGVjdGVkfQotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvdCAk
e3R5cGV9IHNtYWxsIj4KLSAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0
IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDttYXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRp
b25zLnN5bWJvbE1hcFt0eXBlXX08L2Rpdj4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAg
ICAgKytkb3RzRGlzcGxheWVkOworICAgICAgICByZXN1bHQucHVzaChgRXhwZWN0ZWQ6ICR7ZGF0
YS5leHBlY3RlZH0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvdCAke3R5cGV9IHNtYWxsIj4K
KyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxlPSJmb250LXdlaWdo
dDogbm9ybWFsO21hcmdpbi10b3A6IDBweCI+JHtFeHBlY3RhdGlvbnMuc3ltYm9sTWFwW3R5cGVd
fTwvZGl2PgogICAgICAgICAgICAgPC9kaXY+YCk7CiAgICAgfQogICAgIGlmIChkYXRhLnN0YXRz
ICYmIGRhdGEuc3RhdHMudGVzdHNfcnVuKSB7CiAgICAgICAgIGNvbnN0IHN1Y2NlZWRlZCA9IGRh
dGEuc3RhdHMudGVzdHNfcnVuIC0gZGF0YS5zdGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJFeHBlY3Rl
ZCA/ICdfdW5leHBlY3RlZF8nIDogJ18nfWZhaWxlZGBdOwotICAgICAgICBpZiAoc3VjY2VlZGVk
KQotICAgICAgICAgICAgcmVzdWx0LnB1c2goYDxkaXY+Ci0gICAgICAgICAgICAgICAgICAgIDxk
aXYgY2xhc3M9ImRvdCBzdWNjZXNzIHNtYWxsIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxk
aXYgY2xhc3M9InRpbnkgdGV4dCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7bWFyZ2luLXRv
cDogMHB4Ij4ke0V4cGVjdGF0aW9ucy5zeW1ib2xNYXAuc3VjY2Vzc308L2Rpdj4KLSAgICAgICAg
ICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgICR7ZGF0YS5zdGFydF90aW1l
ID8gc3VjY2VlZGVkLnRvTG9jYWxlU3RyaW5nKCkgOiBwZXJjZW50YWdlKHN1Y2NlZWRlZCwgZGF0
YS5zdGF0cy50ZXN0c19ydW4pfSBwYXNzZWQKLSAgICAgICAgICAgICAgICA8L2Rpdj5gKTsKKyAg
ICAgICAgaWYgKHN1Y2NlZWRlZCkgeworICAgICAgICAgICAgKytkb3RzRGlzcGxheWVkOworICAg
ICAgICAgICAgcmVzdWx0LnB1c2goYDxkaXYgY2xhc3M9ImRvdCBzdWNjZXNzIHNtYWxsIj4KKyAg
ICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0IiBzdHlsZT0iZm9udC13ZWln
aHQ6IG5vcm1hbDttYXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcC5zdWNj
ZXNzfTwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICR7ZGF0
YS5zdGFydF90aW1lID8gc3VjY2VlZGVkLnRvTG9jYWxlU3RyaW5nKCkgOiBwZXJjZW50YWdlKHN1
Y2NlZWRlZCwgZGF0YS5zdGF0cy50ZXN0c19ydW4pfSBwYXNzZWRgKTsKKyAgICAgICAgfQogICAg
IH0KICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXMubGVu
Z3RoOyBpKyspIHsKICAgICAgICAgaWYgKCFkYXRhLnN0YXRzKQpAQCAtMTQ4LDEzICsxNzUsMTQg
QEAgZnVuY3Rpb24gcmVzdWx0c0ZvckRhdGEoZGF0YSwgd2lsbEZpbHRlcgogICAgICAgICAgICAg
dmFsdWUgLT0gZGF0YS5zdGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJFeHBlY3RlZCA/ICdfdW5leHBl
Y3RlZF8nIDogJ18nfSR7RXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlc1tpICsgMV19YF07CiAgICAg
ICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVzdWx0LnB1
c2goYDxkaXY+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG90ICR7dHlwZX0gc21hbGwi
PgotICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxlPSJmb250
LXdlaWdodDogbm9ybWFsO21hcmdpbi10b3A6IDBweCI+JHtFeHBlY3RhdGlvbnMuc3ltYm9sTWFw
W3R5cGVdfTwvZGl2PgotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICR7
ZGF0YS5zdGFydF90aW1lID8gdmFsdWUudG9Mb2NhbGVTdHJpbmcoKSA6IHBlcmNlbnRhZ2UodmFs
dWUsIGRhdGEuc3RhdHMudGVzdHNfcnVuKX0gJHt0eXBlfQotICAgICAgICAgICAgPC9kaXY+YCk7
CisgICAgICAgICsrZG90c0Rpc3BsYXllZDsKKyAgICAgICAgcmVzdWx0LnB1c2goYDxkaXYgY2xh
c3M9ImRvdCAke3R5cGV9IHNtYWxsIj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW55
IHRleHQiIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsO21hcmdpbi10b3A6IDBweCI+JHtFeHBl
Y3RhdGlvbnMuc3ltYm9sTWFwW3R5cGVdfTwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAg
ICAgICAgICAke2RhdGEuc3RhcnRfdGltZSA/IHZhbHVlLnRvTG9jYWxlU3RyaW5nKCkgOiBwZXJj
ZW50YWdlKHZhbHVlLCBkYXRhLnN0YXRzLnRlc3RzX3J1bil9ICR7dHlwZX1gKTsKICAgICB9Cisg
ICAgcmVzdWx0LnB1c2goJzwvZGl2PicpOworICAgIHJlc3VsdC5wdXNoKHByaW9yaXRpemVkRmFp
bHVyZXMoZGF0YS5mYWlsdXJlcywgTWF0aC5tYXgoNiAtIGRvdHNEaXNwbGF5ZWQsIDEpLCB3aWxs
RmlsdGVyRXhwZWN0ZWQpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMDAsOCArMzI4
LDUwIEBAIGNsYXNzIF9JbnZlc3RpZ2F0ZURyYXdlciB7CiAgICAgICAgIHRoaXMuc3VpdGUgPSBz
dWl0ZTsKICAgICAgICAgdGhpcy5hZ3JlZ2F0ZSA9IGFncmVnYXRlRGF0YTsKICAgICAgICAgdGhp
cy5kYXRhID0gYWxsRGF0YTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaCgpOwogICAgICAgICB0aGlz
LnNlbGVjdCgwKTsKICAgICB9CisgICAgZGlzcGF0Y2goKSB7CisgICAgICAgIGlmICghdGhpcy5k
YXRhLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5kYXRh
W2ldLnN0YXRzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IHRoaXMuZGF0YS5mb3JFYWNoKGRhdHVtID0+IHsKKyAgICAgICAgICAgIGRhdHVtLmZhaWx1cmVz
ID0gbnVsbDsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuYWdyZWdhdGUuZmFpbHVyZXMgPSBu
dWxsOworCisgICAgICAgIGNvbnN0IGJyYW5jaCA9IHF1ZXJ5VG9QYXJhbXMoZG9jdW1lbnQuVVJM
LnNwbGl0KCc/JylbMV0pLmJyYW5jaDsKKyAgICAgICAgY29uc3QgcGFyYW1zID0geworICAgICAg
ICAgICAgdW5leHBlY3RlZDogW3RoaXMud2lsbEZpbHRlckV4cGVjdGVkXSwKKyAgICAgICAgICAg
IHV1aWQ6IFt0aGlzLmFncmVnYXRlLnV1aWRdLAorICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
LmFncmVnYXRlLnN0YXJ0X3RpbWUpIHsKKyAgICAgICAgICAgIHBhcmFtcy5iZWZvcmVfdGltZSA9
IFt0aGlzLmFncmVnYXRlLnN0YXJ0X3RpbWVdOworICAgICAgICAgICAgcGFyYW1zLmFmdGVyX3Rp
bWUgPSBbdGhpcy5hZ3JlZ2F0ZS5zdGFydF90aW1lXTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
YnJhbmNoKQorICAgICAgICAgICAgcGFyYW1zLmJyYW5jaCA9IFticmFuY2hdOworCisgICAgICAg
IEZhaWx1cmVzLmZyb21FbmRwb2ludCgKKyAgICAgICAgICAgIHRoaXMuc3VpdGUsCisgICAgICAg
ICAgICB0aGlzLmFncmVnYXRlLmNvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICBwYXJhbXMsCisg
ICAgICAgICkudGhlbihmYWlsdXJlcyA9PiB7CisgICAgICAgICAgICB0aGlzLmFncmVnYXRlLmZh
aWx1cmVzID0gRmFpbHVyZXMuY29tYmluZSguLi5mYWlsdXJlcyk7CisgICAgICAgICAgICB0aGlz
LmRhdGEuZm9yRWFjaChkYXR1bSA9PiB7CisgICAgICAgICAgICAgICAgZGF0dW0uZmFpbHVyZXMg
PSBuZXcgRmFpbHVyZXModGhpcy5zdWl0ZSwgZGF0dW0uY29uZmlndXJhdGlvbik7CisgICAgICAg
ICAgICAgICAgZmFpbHVyZXMuZm9yRWFjaChmYWlsdXJlID0+IHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGRhdHVtLmNvbmZpZ3VyYXRpb24uY29tcGFyZShmYWlsdXJlLmNvbmZpZ3VyYXRpb24p
ID09PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0dW0uZmFpbHVyZXMgPSBGYWlsdXJl
cy5jb21iaW5lKGRhdHVtLmZhaWx1cmVzLCBmYWlsdXJlKTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGhpcy5zZWxlY3QodGhpcy5zZWxlY3RlZCk7
CisgICAgICAgIH0pOworICAgIH0KICAgICBjb2xsYXBzZSgpIHsKICAgICAgICAgaWYgKCF0aGlz
LmlzUmVuZGVyZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMxMiw2ICszODIsOSBAQCBj
bGFzcyBfSW52ZXN0aWdhdGVEcmF3ZXIgewogICAgICAgICB0aGlzLnNlbGVjdCgwKTsKICAgICB9
CiAgICAgc2VsZWN0KGluZGV4KSB7CisgICAgICAgIGlmICghdGhpcy5yZWYpCisgICAgICAgICAg
ICByZXR1cm47CisKICAgICAgICAgbGV0IGNhbmRpZGF0ZXMgPSB0aGlzLmRhdGEubGVuZ3RoOwog
ICAgICAgICBpZiAodGhpcy5hZ3JlZ2F0ZSAmJiB0aGlzLmRhdGEubGVuZ3RoID4gMSkKICAgICAg
ICAgICAgIGNhbmRpZGF0ZXMgKz0gMTsKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNk
YnB5L3ZpZXcvc3RhdGljL2pzL3RpbWVsaW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3Vs
dHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL3RpbWVsaW5lLmpzCShyZXZpc2lvbiAy
NTkzMDEpCisrKyBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy90
aW1lbGluZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNjU4LDcgKzY1OCw3IEBAIGNsYXNzIFRpbWVs
aW5lRnJvbUVuZHBvaW50IHsKICAgICAgICAgICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAg
ICAgICAgICAgICAgICAgICR7cGFydGlhbENvbmZpZ3VyYXRpb259CiAgICAgICAgICAgICAgICAg
ICAgICAgICA8YnI+Ci0KKyAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YS5zdGF0cyA/IGA8
YSBocmVmPSIvaW52ZXN0aWdhdGU/JHtwYXJhbXNUb1F1ZXJ5KGJ1aWxkUGFyYW1zKX0iIHRhcmdl
dD0iX2JsYW5rIj5JbnZlc3RpZ2F0ZSBmYWlsdXJlczwvYT48YnI+YCA6ICcnfQogICAgICAgICAg
ICAgICAgICAgICAgICAgJHtkYXRhLmV4cGVjdGVkID8gYEV4cGVjdGVkOiAke2RhdGEuZXhwZWN0
ZWR9PGJyPmAgOiAnJ30KICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YS5hY3R1YWwgPyBg
QWN0dWFsOiAke2RhdGEuYWN0dWFsfTxicj5gIDogJyd9CiAgICAgICAgICAgICAgICAgICAgIDwv
ZGl2PmAsCkBAIC04OTQsOCArODk0LDkgQEAgZnVuY3Rpb24gTGVnZW5kKGNhbGxiYWNrPW51bGws
IHBsdXJhbD1mYQogICAgICAgICAgICAgICAgICAgICAgICAgd2lsbEZpbHRlckV4cGVjdGVkID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUxhYmVsRXZlbnRzLmFkZCh3aWxsRmls
dGVyRXhwZWN0ZWQpOwogICAgICAgICAgICAgICAgICAgICBJbnZlc3RpZ2F0ZURyYXdlci53aWxs
RmlsdGVyRXhwZWN0ZWQgPSB3aWxsRmlsdGVyRXhwZWN0ZWQ7CisgICAgICAgICAgICAgICAgICAg
IEludmVzdGlnYXRlRHJhd2VyLmRpc3BhdGNoKCk7CiAgICAgICAgICAgICAgICAgICAgIEludmVz
dGlnYXRlRHJhd2VyLnNlbGVjdChJbnZlc3RpZ2F0ZURyYXdlci5zZWxlY3RlZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHdp
bGxGaWx0ZXJFeHBlY3RlZCk7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgIH0sCiAg
ICAgICAgIH0pOwpJbmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1w
bGF0ZXMvaW52ZXN0aWdhdGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9yZXN1bHRzZGJweS9y
ZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9pbnZlc3RpZ2F0ZS5odG1sCShub25leGlzdGVudCkK
KysrIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL2ludmVzdGln
YXRlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0ODMgQEAKKzwhLS0KKyBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgYXJlIG1ldDoKKyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuICJBUyBJUyIgQU5EIEFOWQorIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorLS0+CisKK3slIGV4dGVuZHMg
ImJhc2UuaHRtbCIgJX0KK3slIGJsb2NrIGhlYWQgJX0KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
dHlwZT0idGV4dC9jc3MiIGhyZWY9ImFzc2V0cy9jc3MvdGltZWxpbmUuY3NzIj4KKworPHNjcmlw
dCB0eXBlPSJtb2R1bGUiPgoraW1wb3J0IHtDb21taXRCYW5rfSBmcm9tICcvYXNzZXRzL2pzL2Nv
bW1pdC5qcyc7CitpbXBvcnQge0Vycm9yRGlzcGxheSwgUXVlcnlNb2RpZmllciwgcGFyYW1zVG9R
dWVyeSwgcXVlcnlUb1BhcmFtcywgcGVyY2VudGFnZSwgZWxhcHNlZFRpbWV9IGZyb20gJy9hc3Nl
dHMvanMvY29tbW9uLmpzJzsKK2ltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnL2Fzc2V0cy9q
cy9jb25maWd1cmF0aW9uLmpzJzsKK2ltcG9ydCB7RXhwZWN0YXRpb25zfSBmcm9tICcvYXNzZXRz
L2pzL2V4cGVjdGF0aW9ucy5qcyc7CitpbXBvcnQge0RyYXdlciwgQnJhbmNoU2VsZWN0b3IsIENv
bmZpZ3VyYXRpb25TZWxlY3RvcnN9IGZyb20gJy9hc3NldHMvanMvZHJhd2VyLmpzJzsKK2ltcG9y
dCB7TGVnZW5kfSBmcm9tICcvYXNzZXRzL2pzL3RpbWVsaW5lLmpzJzsKK2ltcG9ydCB7VG9vbFRp
cH0gZnJvbSAnL2Fzc2V0cy9qcy90b29sdGlwLmpzJzsKK2ltcG9ydCB7RmFpbHVyZXN9IGZyb20g
Jy9hc3NldHMvanMvZmFpbHVyZXMuanMnOworaW1wb3J0IHtET00sIFJFRiwgRXZlbnRTdHJlYW19
IGZyb20gJy9saWJyYXJ5L2pzL1JlZi5qcyc7CisKK2NvbnN0IERFRkFVTFRfTElNSVQgPSAxMDA7
Citjb25zdCBTVUlURVMgPSBKU09OLnBhcnNlKCd7eyBzdWl0ZXN8c2FmZSB9fScpOworCitjb25z
dCB2aWV3cyA9IFtdOworbGV0IGFncmVnYXRlQ29ubmZpZ3VyYXRpb24gPSBDb25maWd1cmF0aW9u
LmZyb21RdWVyeSgpOworbGV0IHJhbmdlUGFyYW1zID0ge307CisKK2NvbnN0IHVuZXhwZWN0ZWRR
dWVyeSA9IG5ldyBRdWVyeU1vZGlmaWVyKCd1bmV4cGVjdGVkJyk7CitmdW5jdGlvbiB3aWxsRmls
dGVyRXhwZWN0ZWQoKSB7CisgICAgY29uc3QgY3VycmVudCA9IHVuZXhwZWN0ZWRRdWVyeS5jdXJy
ZW50KCk7CisgICAgaWYgKCFjdXJyZW50Lmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgaWYgKFsndHJ1ZScsICdUUlVFJywgJ3llcycsICdZRVMnLCAnMSddLmluY2x1ZGVzKGN1cnJl
bnRbY3VycmVudC5sZW5ndGggLSAxXSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBmYWxzZTsKK30KKworCitmdW5jdGlvbiBjb21taXRzRm9yUmFuZ2UobWluVXVpZCwgbWF4VXVp
ZCkgeworICAgIGNvbnN0IGNvbW1pdHMgPSBbXTsKKyAgICBDb21taXRCYW5rLmNvbW1pdHMuZm9y
RWFjaChjb21taXQgPT4geworICAgICAgICBpZiAoY29tbWl0LnV1aWQgPj0gbWluVXVpZCAmJiBj
b21taXQudXVpZCA8PSBtYXhVdWlkKQorICAgICAgICAgICAgY29tbWl0cy5wdXNoKGNvbW1pdCk7
CisgICAgfSk7CisgICAgcmV0dXJuIGNvbW1pdHM7Cit9CisKKworY2xhc3MgU3VpdGVGYWlsdXJl
c1ZpZXcgeworICAgIGNvbnN0cnVjdG9yKHN1aXRlKSB7CisgICAgICAgIHRoaXMuc3VpdGUgPSBz
dWl0ZTsKKyAgICAgICAgdGhpcy5kYXRhRm9yQ29uZmlnID0ge307CisKKyAgICAgICAgdGhpcy5y
ZWYgPSBSRUYuY3JlYXRlUmVmKHsKKyAgICAgICAgICAgIHN0YXRlOiB7ZGlzcGxheWVkOiB0cnVl
fSwKKyAgICAgICAgICAgIG9uU3RhdGVVcGRhdGU6IChlbGVtZW50LCBkaWZmLCBzdGF0ZSkgPT4g
eworICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IGRpZmYuZGlzcGxheWVk
ID8gbnVsbCA6ICdub25lJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHRo
aXMucHJldmlvdXMgPSBSRUYuY3JlYXRlUmVmKHsKKyAgICAgICAgICAgIG9uRWxlbWVudE1vdW50
OiAoZWxlbWVudCkgPT4geworICAgICAgICAgICAgICAgIGVsZW1lbnQub25jbGljayA9ICgpID0+
IHRoaXMuc2VsZWN0KHRoaXMuc2VsZWN0ZWQgLSAxKTsKKyAgICAgICAgICAgIH0sCisgICAgICAg
IH0pCisgICAgICAgIHRoaXMubmV4dCA9IFJFRi5jcmVhdGVSZWYoeworICAgICAgICAgICAgb25F
bGVtZW50TW91bnQ6IChlbGVtZW50KSA9PiB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5vbmNs
aWNrID0gKCkgPT4gdGhpcy5zZWxlY3QodGhpcy5zZWxlY3RlZCArIDEpOworICAgICAgICAgICAg
fSwKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5yZXN1bHRWaWV3ID0gUkVGLmNyZWF0ZVJl
Zih7CisgICAgICAgICAgICBzdGF0ZToge2NvbmZpZ3VyYXRpb246IG51bGwsIHJlc3VsdHM6IFtd
LCBmYWlsdXJlczogW119LAorICAgICAgICAgICAgb25TdGF0ZVVwZGF0ZTogKGVsZW1lbnQsIGRp
ZmYsIHN0YXRlKSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKCFkaWZmLmNvbmZpZ3VyYXRpb24g
fHwgIWRpZmYucmVzdWx0cyB8fCAhZGlmZi5mYWlsdXJlcykgeworICAgICAgICAgICAgICAgICAg
ICBET00uaW5qZWN0KGVsZW1lbnQsICc8ZGl2IGNsYXNzPSJsb2FkZXIiPjxkaXYgY2xhc3M9InNw
aW5uZXIiPjwvZGl2PjwvZGl2PicpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY29uc3QgYWdyZWdhdGVkU3RhdHMgPSB7
CisgICAgICAgICAgICAgICAgICAgIHRlc3RzX3J1bjogZGlmZi5yZXN1bHRzLm1hcChyZXN1bHQg
PT4gcmVzdWx0LnN0YXRzLnRlc3RzX3J1bikucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCksCisg
ICAgICAgICAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ6IGRpZmYucmVzdWx0cy5tYXAocmVzdWx0
ID0+IHJlc3VsdC5zdGF0cy50ZXN0c19za2lwcGVkKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAw
KSwKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgbGV0IGxhc3RWYWx1ZSA9
IDA7CisgICAgICAgICAgICAgICAgY29uc3Qgd2lsbEZpbHRlckV4cGVjdGVkVmFsdWUgPSB3aWxs
RmlsdGVyRXhwZWN0ZWQoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gRXhwZWN0YXRp
b25zLmZhaWx1cmVUeXBlcy5sZW5ndGggLSAxOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGtleSA9IHdpbGxGaWx0ZXJFeHBlY3RlZFZhbHVlID8gYHRlc3RzX3VuZXhw
ZWN0ZWRfJHtFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVzW2ldfWAgOiBgdGVzdHNfJHtFeHBlY3Rh
dGlvbnMuZmFpbHVyZVR5cGVzW2ldfWA7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbWJp
bmVkID0gZGlmZi5yZXN1bHRzLm1hcChyZXN1bHQgPT4gcmVzdWx0LnN0YXRzW2tleV0gPyByZXN1
bHQuc3RhdHNba2V5XSA6IDApLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApOworICAgICAgICAg
ICAgICAgICAgICBhZ3JlZ2F0ZWRTdGF0c1tgdGVzdHNfJHtFeHBlY3RhdGlvbnMuZmFpbHVyZVR5
cGVzW2ldfWBdID0gTWF0aC5tYXgoY29tYmluZWQgLSBsYXN0VmFsdWUsIDApOworICAgICAgICAg
ICAgICAgICAgICBsYXN0VmFsdWUgPSBjb21iaW5lZDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYWdyZWdhdGVkU3RhdHMudGVzdHNfc3VjY2VzcyA9IE1hdGgubWF4KGFncmVn
YXRlZFN0YXRzLnRlc3RzX3J1biAtIGxhc3RWYWx1ZSwgMCk7CisKKyAgICAgICAgICAgICAgICBE
T00uaW5qZWN0KGVsZW1lbnQsIGA8ZGl2IGNsYXNzPSJyb3ciPgorICAgICAgICAgICAgICAgICAg
ICAgICAgPGRpdiBjbGFzcz0iY29sLXMtJHtkaWZmLnJlc3VsdHMubGVuZ3RoID09PSAxID8gJzEy
JyA6ICc2J30gbGlzdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0i
aXRlbSB0ZXh0IGJsb2NrIiBzdHlsZT0id2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IHdo
aXRlLXNwYWNlOiBub3dyYXA7IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyI+JHtkaWZmLmNvbmZp
Z3VyYXRpb259PC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0i
aXRlbSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXByaXNlZCBvZiAke2Rp
ZmYucmVzdWx0cy5sZW5ndGh9IHJ1biR7ZGlmZi5yZXN1bHRzLmxlbmd0aCA9PT0gMSA/ICcnIDog
J3MnfSB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeygoKSA9PiB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWluVXVpZCA9IE1hdGgucm91
bmQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsZXQgbWF4VXVpZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkaWZmLnJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4geworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1pblV1aWQgPSBNYXRoLm1pbihtaW5VdWlkLCByZXN1
bHQudXVpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4VXVp
ZCA9IE1hdGgubWF4KG1heFV1aWQsIHJlc3VsdC51dWlkKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG1pblV1aWQgPiBtYXhVdWlkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAnaW52YWxpZCBjb21taXQgcmFuZ2UnOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21taXRzID0gY29tbWl0c0ZvclJhbmdlKG1pblV1
aWQsIG1heFV1aWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFj
b21taXRzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gJ3Vua25vd24gY29tbWl0cyc7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNvbW1pdFBhcmFtcyA9IHticmFuY2g6IFtjb21taXRzLm1hcChjb21taXQg
PT4gY29tbWl0LmJyYW5jaCldfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChjb21taXRzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29tbWl0UGFyYW1zLnV1aWQgPSBbY29tbWl0c1swXS51dWlkXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxhIGhyZWY9Ii9jb21t
aXQ/JHtwYXJhbXNUb1F1ZXJ5KGNvbW1pdFBhcmFtcyl9Ij4ke2NvbW1pdHNbMF0uaWQuc3Vic3Ry
aW5nKDAsMTIpfTwvYT5gOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0UGFyYW1zLmFmdGVyX3V1
aWQgPSBbbWluVXVpZF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21t
aXRQYXJhbXMuYmVmb3JlX3V1aWQgPSBbbWluVXVpZF07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYDxhIGhyZWY9Ii9jb21taXRzPyR7cGFyYW1zVG9RdWVyeShj
b21taXRQYXJhbXMpfSI+JHtjb21taXRzLmxlbmd0aH0gY29tbWl0czwvYT5gOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9KSgpfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Iml0ZW0iPgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYW4gJHthZ3JlZ2F0ZWRTdGF0cy50ZXN0
c19ydW59IG9mICR7YWdyZWdhdGVkU3RhdHMudGVzdHNfc2tpcHBlZCArIGFncmVnYXRlZFN0YXRz
LnRlc3RzX3J1bn0gdGVzdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCR7cGVy
Y2VudGFnZShhZ3JlZ2F0ZWRTdGF0cy50ZXN0c19ydW4sIGFncmVnYXRlZFN0YXRzLnRlc3RzX3Nr
aXBwZWQgKyBhZ3JlZ2F0ZWRTdGF0cy50ZXN0c19ydW4pfSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke09iamVj
dC5rZXlzKEV4cGVjdGF0aW9ucy5jb2xvck1hcCgpKS5tYXAodHlwZSA9PiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFncmVnYXRlZFN0YXRzW2B0ZXN0c18ke3R5
cGV9YF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcn
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNz
PSJkb3QgJHt0eXBlfSBzbWFsbCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDxkaXYgY2xhc3M9InRpbnkgdGV4dCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3Jt
YWw7bWFyZ2luLXRvcDogMHB4Ij4ke0V4cGVjdGF0aW9ucy5zeW1ib2xNYXBbdHlwZV19PC9kaXY+
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICR7ZGlmZi5y
ZXN1bHRzLmxlbmd0aCA9PT0gMSA/IGFncmVnYXRlZFN0YXRzW2B0ZXN0c18ke3R5cGV9YF0gOiBw
ZXJjZW50YWdlKGFncmVnYXRlZFN0YXRzW2B0ZXN0c18ke3R5cGV9YF0sIGFncmVnYXRlZFN0YXRz
LnRlc3RzX3J1bil9ICR7dHlwZSA9PT0gJ3N1Y2Nlc3MnID8gJ3Bhc3NlZCcgOiB0eXBlfTxicj5g
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCcnKX0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
e2RpZmYucmVzdWx0cy5sZW5ndGggPT09IDEgPyBgPGRpdiBjbGFzcz0iaXRlbSI+CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGlmZi5yZXN1bHRzWzBdLnN0YXJ0X3RpbWUgPwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDxhIGhyZWY9Ii91cmxzL2J1aWxk
PyR7KCgpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBicmFuY2ggPSBxdWVyeVRvUGFyYW1zKGRvY3VtZW50LlVSTC5zcGxpdCgnPycpWzFdKS5icmFu
Y2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnVpbGRQ
YXJhbXMgPSBkaWZmLmNvbmZpZ3VyYXRpb24udG9QYXJhbXMoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1snc3VpdGUnXSA9IFt0aGlzLnN1aXRl
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1sn
dXVpZCddID0gW2RpZmYucmVzdWx0c1swXS51dWlkXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1snYWZ0ZXJfdGltZSddID0gW2RpZmYucmVzdWx0
c1swXS5zdGFydF90aW1lXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBidWlsZFBhcmFtc1snYmVmb3JlX3RpbWUnXSA9IFtkaWZmLnJlc3VsdHNbMF0uc3RhcnRfdGlt
ZV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyYW5jaCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXNb
J2JyYW5jaCddID0gYnJhbmNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBwYXJhbXNUb1F1ZXJ5KGJ1aWxkUGFyYW1zKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0pKCl9IiB0YXJnZXQ9Il9ibGFuayI+VGVzdCBydW48L2E+IEAg
JHtuZXcgRGF0ZShkaWZmLnJlc3VsdHNbMF0uc3RhcnRfdGltZSAqIDEwMDApLnRvTG9jYWxlU3Ry
aW5nKCl9PGJyPmAgOiAnJ30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkaWZm
LnJlc3VsdHNbMF0uc3RhdHMuc3RhcnRfdGltZSAmJiBkaWZmLnJlc3VsdHNbMF0uc3RhdHMuZW5k
X3RpbWUgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFN1aXRlIHRvb2sg
JHtlbGFwc2VkVGltZShkaWZmLnJlc3VsdHNbMF0uc3RhdHMuc3RhcnRfdGltZSwgZGlmZi5yZXN1
bHRzWzBdLnN0YXRzLmVuZF90aW1lKX1gIDogJyd9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPC9kaXY+YCA6ICcnfQorICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAg
ICAgICAgICAgICAgICAgICAke2RpZmYucmVzdWx0cy5sZW5ndGggPT09IDEgfHwgIWRpZmYuZmFp
bHVyZXMubGVuZ3RoID8gJycgOiBgPGRpdiBjbGFzcz0iZGl2aWRlciBtb2JpbGUtY29udHJvbCI+
PC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXMtNiBs
aXN0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkaWZmLmZhaWx1cmVzLnNs
aWNlKDAsIDUpLm1hcChmYWlsdXJlID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxldCB3b3JzdCA9ICdzdWNjZXNzJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXMuZm9yRWFjaCh0eXBlID0+IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoZmFp
bHVyZVt0eXBlXSkubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3b3JzdCA9IHR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tbWl0
cyA9IGNvbW1pdHNGb3JSYW5nZShmYWlsdXJlLnV1aWRfcmFuZ2VbMF0sIGZhaWx1cmUudXVpZF9y
YW5nZVsxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxk
aXYgY2xhc3M9Iml0ZW0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8ZGl2IGNsYXNzPSJkb3QgJHt3b3JzdH0gc21hbGwiPgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0IiBzdHls
ZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDttYXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRpb25zLnN5
bWJvbE1hcFt3b3JzdF19PC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8YSBjbGFzcz0idGV4dCBibG9jayIgc3R5bGU9IndpZHRoOiBjYWxjKDEwMCUgLSB2YXIo
LS1tZWRpdW1TaXplKSAtIDE2cHgpOyBvdmVyZmxvdzogaGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93
cmFwOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgImhyZWY9Ii9pbnZlc3RpZ2F0ZT8ke3BhcmFt
c1RvUXVlcnkoZmFpbHVyZS50b1BhcmFtcygpKX0iPgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJHtjb21taXRzLmxlbmd0aCA/CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29tbWl0c1swXS5pZC5z
dWJzdHJpbmcoMCwxMil9ICR7Y29tbWl0cy5sZW5ndGggPiAxID8gY29tbWl0c1tjb21taXRzLmxl
bmd0aCAtIDFdLmlkLnN1YnN0cmluZygwLDEyKSA6ICcnfWAgOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc/J30gb24gJHtmYWlsdXJlLmNvbmZp
Z3VyYXRpb259CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwv
YT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCcnKX0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJHtkaWZmLnJlc3VsdHMubGVuZ3RoID4gMTAgPyAnPGRpdiBjbGFz
cz0iaXRlbSBjb250ZW50Ij5Ub28gbWFueSBydW5zIHRvIGRpc3BsYXkuLi48ZGl2PicgOiAnJ30K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIDwvZGl2PmB9CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAg
IDwvZGl2PmApOworICAgICAgICAgICAgfSwKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuZmFp
bHVyZVZpZXcgPSBSRUYuY3JlYXRlUmVmKHsKKyAgICAgICAgICAgIHN0YXRlOiB7Y29uZmlndXJh
dGlvbjogbnVsbCwgcmVzdWx0czogW10sIGZhaWx1cmVzOiBbXX0sCisgICAgICAgICAgICBvblN0
YXRlVXBkYXRlOiAoZWxlbWVudCwgZGlmZiwgc3RhdGUpID0+IHsKKyAgICAgICAgICAgICAgICBp
ZiAoIWRpZmYuY29uZmlndXJhdGlvbiB8fCAhZGlmZi5yZXN1bHRzIHx8ICFkaWZmLmZhaWx1cmVz
KSB7CisgICAgICAgICAgICAgICAgICAgIERPTS5pbmplY3QoZWxlbWVudCwgJzxkaXYgY2xhc3M9
ImxvYWRlciI+PGRpdiBjbGFzcz0ic3Bpbm5lciI+PC9kaXY+PC9kaXY+Jyk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KCFkaWZmLmZhaWx1cmVzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBET00uaW5qZWN0
KGVsZW1lbnQsICc8ZGl2IGNsYXNzPSJjb250ZW50IiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogdmFy
KC0tc21hbGxTaXplKTsiPk5vIGZhaWx1cmVzPC9kaXY+Jyk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29uc3QgZmFpbHVy
ZXMgPSBGYWlsdXJlcy5jb21iaW5lKC4uLmRpZmYuZmFpbHVyZXMpOworICAgICAgICAgICAgICAg
IGNvbnN0IHJldmVyc2VkVHlwZXMgPSBbLi4uRXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlc10ucmV2
ZXJzZSgpOworCisgICAgICAgICAgICAgICAgRE9NLmluamVjdChlbGVtZW50LCBgPGRpdiBjbGFz
cz0ibGlzdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAke3JldmVyc2VkVHlwZXMubWFwKHR5
cGUgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhm
YWlsdXJlc1t0eXBlXSkuc29ydCgoYSwgYikgPT4geworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBudW1iZXJEaWZmZXJlbmNlID0gZmFpbHVyZXNbdHlwZV1bYV0gLSBmYWls
dXJlc1t0eXBlXVtiXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJl
ckRpZmZlcmVuY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVtYmVyRGlmZmVyZW5jZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGEubG9jYWxlQ29tcGFyZShiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5tYXAo
dGVzdCA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBj
bGFzcz0iaXRlbSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNs
YXNzPSJkb3QgJHt0eXBlfSBzbWFsbCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1h
bDttYXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcFt0eXBlXX08L2Rpdj4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InRleHQgYmxvY2siIHN0eWxlPSJ3aWR0
aDogY2FsYygxMDAlIC0gdmFyKC0tbWVkaXVtU2l6ZSkgLSAxNnB4KTsgb3ZlcmZsb3c6IGhpZGRl
bjsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IiBocmVmPSIv
P3N1aXRlPSR7dGhpcy5zdWl0ZX0mdGVzdD0ke3Rlc3R9IiB0YXJnZXQ9Il9ibGFuayI+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0ZXN0fQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8L2Rpdj5gOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oJycpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9pbignJyl9CisgICAgICAgICAgICAgICAgICAg
IDwvZGl2PmApOworICAgICAgICAgICAgfSwKKyAgICAgICAgfSk7CisgICAgICAgIENvbW1pdEJh
bmsuY2FsbGJhY2tzLnB1c2goKCkgPT4ge3RoaXMuc2VsZWN0KHRoaXMuc2VsZWN0ZWQpfSk7Cisg
ICAgICAgIHRoaXMucmVsb2FkKCk7CisgICAgfQorICAgIHJlbG9hZCgpIHsKKyAgICAgICAgaWYg
KCFPYmplY3Qua2V5cyhyYW5nZVBhcmFtcykubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHRoaXMuZGF0YUZvckNvbmZpZyA9IHt9OworICAgICAgICB0aGlzLnNlbGVjdCgw
KTsKKworICAgICAgICBsZXQgcmVzdWx0c0Rpc3BhdGNoZWQgPSBhZ3JlZ2F0ZUNvbm5maWd1cmF0
aW9uLmxlbmd0aDsKKyAgICAgICAgdGhpcy5yZXN1bHRWaWV3LnNldFN0YXRlKHtjb25maWd1cmF0
aW9uOiBudWxsLCByZXN1bHRzOiBbXSwgZmFpbHVyZXM6IFtdfSk7CisKKyAgICAgICAgbGV0IGZh
aWx1cmVzRGlzcGF0Y2hlZCA9IGFncmVnYXRlQ29ubmZpZ3VyYXRpb24ubGVuZ3RoOworICAgICAg
ICB0aGlzLmZhaWx1cmVWaWV3LnNldFN0YXRlKHtjb25maWd1cmF0aW9uOiBudWxsLCByZXN1bHRz
OiBbXSwgZmFpbHVyZXM6IFtdfSk7CisKKyAgICAgICAgYWdyZWdhdGVDb25uZmlndXJhdGlvbi5m
b3JFYWNoKGNvbmZpZ1RvU2VhcmNoID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdFBhcmFt
cyA9IE9iamVjdC5hc3NpZ24oY29uZmlnVG9TZWFyY2gudG9QYXJhbXMoKSwgcmFuZ2VQYXJhbXMp
OworICAgICAgICAgICAgZmV0Y2goYC9hcGkvcmVzdWx0cy8ke3RoaXMuc3VpdGV9PyR7cGFyYW1z
VG9RdWVyeShyZXN1bHRQYXJhbXMpfWApLnRoZW4ocmVzcG9uc2UgPT4geworICAgICAgICAgICAg
ICAgIHJlc3BvbnNlLmpzb24oKS50aGVuKGpzb24gPT4geworICAgICAgICAgICAgICAgICAgICBs
ZXQgbWluVXVpZCA9IE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkvMTApOworICAgICAg
ICAgICAgICAgICAgICBsZXQgbWF4VXVpZCA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAganNv
bi5mb3JFYWNoKHJlc3VsdCA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21w
bGV0ZUNvbmZpZyA9IG5ldyBDb25maWd1cmF0aW9uKHJlc3VsdC5jb25maWd1cmF0aW9uKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhRm9yQ29uZmlnW2NvbXBsZXRlQ29u
ZmlnLnRvS2V5KCldKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZvckNv
bmZpZ1tjb21wbGV0ZUNvbmZpZy50b0tleSgpXSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uZmlndXJhdGlvbjogY29tcGxldGVDb25maWcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdHM6IFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmYWlsdXJlczogW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmRhdGFGb3JDb25maWdbY29tcGxldGVDb25maWcudG9LZXkoKV0uY29uZmlndXJhdGlvbiA9IENv
bmZpZ3VyYXRpb24uY29tYmluZSh0aGlzLmRhdGFGb3JDb25maWdbY29tcGxldGVDb25maWcudG9L
ZXkoKV0uY29uZmlndXJhdGlvbiwgY29tcGxldGVDb25maWcpOworICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5kYXRhRm9yQ29uZmlnW2NvbXBsZXRlQ29uZmlnLnRvS2V5KCldLnJlc3VsdHMg
PSB0aGlzLmRhdGFGb3JDb25maWdbY29tcGxldGVDb25maWcudG9LZXkoKV0ucmVzdWx0cy5jb25j
YXQocmVzdWx0LnJlc3VsdHMpOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucmVz
dWx0cy5mb3JFYWNoKHJlc3VsdCA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlu
VXVpZCA9IE1hdGgubWluKG1pblV1aWQsIHJlc3VsdC51dWlkKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXhVdWlkID0gTWF0aC5tYXgobWF4VXVpZCwgcmVzdWx0LnV1aWQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAg
ICAgICAgICAgICAgICAgIGlmIChtYXhVdWlkID0+IG1pblV1aWQpCisgICAgICAgICAgICAgICAg
ICAgICAgICBDb21taXRCYW5rLmFkZChtaW5VdWlkLCBtYXhVdWlkKTsKKworICAgICAgICAgICAg
ICAgICAgICAtLXJlc3VsdHNEaXNwYXRjaGVkOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJl
c3VsdHNEaXNwYXRjaGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZi5zZXRT
dGF0ZSh7ZGlzcGxheWVkOiBPYmplY3Qua2V5cyh0aGlzLmRhdGFGb3JDb25maWcpLmxlbmd0aH0p
OworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QodGhpcy5zZWxlY3RlZCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0p
LmNhdGNoKGVycm9yID0+IHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbG9hZCBmYWlscywg
bG9nIHRoZSBlcnJvciBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9y
KEpTT04uc3RyaW5naWZ5KGVycm9yLCBudWxsLCA0KSk7CisgICAgICAgICAgICB9KTsKKworICAg
ICAgICAgICAgRmFpbHVyZXMuZnJvbUVuZHBvaW50KHRoaXMuc3VpdGUsIGNvbmZpZ1RvU2VhcmNo
LCBPYmplY3QuYXNzaWduKHt1bmV4cGVjdGVkOiBbd2lsbEZpbHRlckV4cGVjdGVkKCldfSwgcmFu
Z2VQYXJhbXMpKS50aGVuKGZhaWx1cmVzID0+IHsKKyAgICAgICAgICAgICAgICBsZXQgbWluVXVp
ZCA9IE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkvMTApOworICAgICAgICAgICAgICAg
IGxldCBtYXhVdWlkID0gMDsKKworICAgICAgICAgICAgICAgIGZhaWx1cmVzLmZvckVhY2goZmFp
bHVyZSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhRm9yQ29uZmlnW2Zh
aWx1cmUuY29uZmlndXJhdGlvbi50b0tleSgpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuZGF0YUZvckNvbmZpZ1tmYWlsdXJlLmNvbmZpZ3VyYXRpb24udG9LZXkoKV0gPSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbjogZmFpbHVyZS5jb25maWd1cmF0
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHM6IFtdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZhaWx1cmVzOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuZGF0YUZvckNvbmZpZ1tmYWlsdXJlLmNvbmZpZ3VyYXRpb24udG9LZXkoKV0uY29uZmlndXJh
dGlvbiA9IENvbmZpZ3VyYXRpb24uY29tYmluZSh0aGlzLmRhdGFGb3JDb25maWdbZmFpbHVyZS5j
b25maWd1cmF0aW9uLnRvS2V5KCldLmNvbmZpZ3VyYXRpb24sIGZhaWx1cmUuY29uZmlndXJhdGlv
bik7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZvckNvbmZpZ1tmYWlsdXJlLmNvbmZp
Z3VyYXRpb24udG9LZXkoKV0uZmFpbHVyZXMucHVzaChmYWlsdXJlKTsKKyAgICAgICAgICAgICAg
ICAgICAgbWluVXVpZCA9IE1hdGgubWluKG1pblV1aWQsIGZhaWx1cmUudXVpZF9yYW5nZVswXSk7
CisgICAgICAgICAgICAgICAgICAgIG1heFV1aWQgPSBNYXRoLm1heChtYXhVdWlkLCBmYWlsdXJl
LnV1aWRfcmFuZ2VbMV0pOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAg
aWYgKG1heFV1aWQgPT4gbWluVXVpZCkKKyAgICAgICAgICAgICAgICAgICAgQ29tbWl0QmFuay5h
ZGQobWluVXVpZCwgbWF4VXVpZCk7CisKKyAgICAgICAgICAgICAgICAtLWZhaWx1cmVzRGlzcGF0
Y2hlZDsKKyAgICAgICAgICAgICAgICBpZiAoIWZhaWx1cmVzRGlzcGF0Y2hlZCkKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5zZWxlY3QodGhpcy5zZWxlY3RlZCk7CisgICAgICAgICAgICB9KS5j
YXRjaChlcnJvciA9PiB7CisgICAgICAgICAgICAgICAgLy8gQSBsb2FkIGZhaWx1cmUgcHJvYmFi
bHkganVzdCBtZWFucyBubyBmYWlsdXJlcyBmb3VuZCwgaW4gdGhhdCBjYXNlLCBpZ25vcmUgdGhl
IGVycm9yCisgICAgICAgICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhlcnJvcikpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKEpTT04u
c3RyaW5naWZ5KGVycm9yLCBudWxsLCA0KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
CisgICAgfQorICAgIHNlbGVjdChzZWxlY3RlZCkgeworICAgICAgICBjb25zdCBjb25maWd1cmF0
aW9uS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZGF0YUZvckNvbmZpZyk7CisgICAgICAgIGNvbmZp
Z3VyYXRpb25LZXlzLnNvcnQoKTsKKworICAgICAgICBpZiAodGhpcy5wcmV2aW91cy5lbGVtZW50
ICYmIHRoaXMubmV4dC5lbGVtZW50KSB7CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgJiYgY29u
ZmlndXJhdGlvbktleXMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXMuZWxl
bWVudC5zdHlsZS5kaXNwbGF5ID0gbnVsbDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB0aGlzLnByZXZpb3VzLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAg
ICAgICAgIGlmIChjb25maWd1cmF0aW9uS2V5cy5sZW5ndGggPiAxICYmIHNlbGVjdGVkIDwgY29u
ZmlndXJhdGlvbktleXMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHRoaXMubmV4dC5lbGVtZW50
LnN0eWxlLmRpc3BsYXkgPSBudWxsOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHRoaXMubmV4dC5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5zZWxlY3RlZCA9IE1hdGgubWluKHNlbGVjdGVkLCBjb25maWd1cmF0aW9uS2V5
cy5sZW5ndGgpOworCisgICAgICAgIGlmICghY29uZmlndXJhdGlvbktleXMubGVuZ3RoKSB7Cisg
ICAgICAgICAgICB0aGlzLnJlc3VsdFZpZXcuc2V0U3RhdGUoe2NvbmZpZ3VyYXRpb246IG51bGws
IHJlc3VsdHM6IFtdLCBmYWlsdXJlczogW119KTsKKyAgICAgICAgICAgIHRoaXMuZmFpbHVyZVZp
ZXcuc2V0U3RhdGUoe2NvbmZpZ3VyYXRpb246IG51bGwsIHJlc3VsdHM6IFtdLCBmYWlsdXJlczog
W119KTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25maWd1cmF0aW9uS2V5cy5sZW5ndGggPT0gMSkg
eworICAgICAgICAgICAgdGhpcy5yZXN1bHRWaWV3LnNldFN0YXRlKHRoaXMuZGF0YUZvckNvbmZp
Z1tjb25maWd1cmF0aW9uS2V5c1swXV0pOworICAgICAgICAgICAgdGhpcy5mYWlsdXJlVmlldy5z
ZXRTdGF0ZSh0aGlzLmRhdGFGb3JDb25maWdbY29uZmlndXJhdGlvbktleXNbMF1dKTsKKyAgICAg
ICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkID09IDApIHsKKyAgICAgICAgICAgIGNvbnN0IGNv
bWJpbmVkID0geworICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24u
Y29tYmluZSguLi5jb25maWd1cmF0aW9uS2V5cy5tYXAoa2V5ID0+IHRoaXMuZGF0YUZvckNvbmZp
Z1trZXldLmNvbmZpZ3VyYXRpb24pKSwKKyAgICAgICAgICAgICAgICByZXN1bHRzOiBbXSwKKyAg
ICAgICAgICAgICAgICBmYWlsdXJlczogW10sCisgICAgICAgICAgICB9OworICAgICAgICAgICAg
Y29uZmlndXJhdGlvbktleXMuZm9yRWFjaChrZXkgPT4geworICAgICAgICAgICAgICAgIGNvbWJp
bmVkLnJlc3VsdHMgPSBjb21iaW5lZC5yZXN1bHRzLmNvbmNhdCh0aGlzLmRhdGFGb3JDb25maWdb
a2V5XS5yZXN1bHRzKTsKKyAgICAgICAgICAgICAgICBjb21iaW5lZC5mYWlsdXJlcyA9IGNvbWJp
bmVkLmZhaWx1cmVzLmNvbmNhdCh0aGlzLmRhdGFGb3JDb25maWdba2V5XS5mYWlsdXJlcyk7Cisg
ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgdGhpcy5yZXN1bHRWaWV3LnNldFN0YXRlKGNv
bWJpbmVkKTsKKyAgICAgICAgICAgIHRoaXMuZmFpbHVyZVZpZXcuc2V0U3RhdGUoY29tYmluZWQp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5yZXN1bHRWaWV3LnNldFN0YXRl
KHRoaXMuZGF0YUZvckNvbmZpZ1tjb25maWd1cmF0aW9uS2V5c1t0aGlzLnNlbGVjdGVkIC0gMV1d
KTsKKyAgICAgICAgICAgIHRoaXMuZmFpbHVyZVZpZXcuc2V0U3RhdGUodGhpcy5kYXRhRm9yQ29u
ZmlnW2NvbmZpZ3VyYXRpb25LZXlzW3RoaXMuc2VsZWN0ZWQgLSAxXV0pOworICAgICAgICB9Cisg
ICAgfQorICAgIHRvU3RyaW5nKCkgeworICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9InNlY3Rp
b24iIHJlZj0iJHt0aGlzLnJlZn0iPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRl
ciI+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj4ke3RoaXMuc3VpdGV9
PC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAg
ICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCB1bnNlbGVjdGFibGUiIHN0eWxl
PSJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGZsZXgtZGly
ZWN0aW9uOiByb3c7IHBhZGRpbmc6IDEwcHg7Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxk
aXYgc3R5bGU9IndpZHRoOiAxNTBweDsgdGV4dC1hbGlnbjogbGVmdCI+CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPGEgY2xhc3M9ImJ1dHRvbiIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsg
ZGlzcGxheTogbm9uZSIgcmVmPSIke3RoaXMucHJldmlvdXN9Ij7il4AgUHJldmlvdXM8L2E+Cisg
ICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxk
aXYgc3R5bGU9IndpZHRoOiAxNTBweDsgdGV4dC1hbGlnbjogcmlnaHQiPgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidXR0b24iIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7
IGRpc3BsYXk6IG5vbmUiIHJlZj0iJHt0aGlzLm5leHR9Ij5OZXh0IOKWtjwvYT4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAg
ICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAg
ICAgICA8ZGl2IGNsYXNzPSJjb250ZW50IiByZWY9IiR7dGhpcy5yZXN1bHRWaWV3fSI+PC9kaXY+
CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpdmlkZXIiPjwvZGl2PgorICAgICAg
ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50IiByZWY9IiR7dGhpcy5mYWlsdXJlVmll
d30iPjwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+PGJy
PmA7CisgICAgfQorfQorCisKK2Z1bmN0aW9uIHBvcHVsYXRlUmFuZ2VzKCkKK3sKKyAgICBsZXQg
ZGVmaW5lZFJhbmdlID0gZmFsc2U7CisgICAgbGV0IGNvbW1pdFBhcmFtcyA9IHt9OworICAgIGxl
dCB0aW1lUGFyYW1zID0ge307CisKKyAgICBbJ2lkJywgJ3V1aWQnLCAndGltZXN0YW1wJywgJ2Jy
YW5jaCcsICdyZXBvc2l0b3J5X2lkJ10uZm9yRWFjaChwYXJhbSA9PiB7CisgICAgICAgIFsnJywg
J2JlZm9yZV8nLCAnYWZ0ZXJfJ10uZm9yRWFjaChwYXJ0aWFsID0+IHsKKyAgICAgICAgICAgIGNv
bnN0IHZhbHVlcyA9IChuZXcgUXVlcnlNb2RpZmllcihgJHtwYXJ0aWFsfSR7cGFyYW19YCkpLmN1
cnJlbnQoKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVzLmxlbmd0aCkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBpZiAoWydpZCcsICd1dWlkJywgJ3RpbWVzdGFtcCddLmlu
ZGV4T2YocGFyYW0pID49IDApCisgICAgICAgICAgICAgICAgZGVmaW5lZFJhbmdlID0gdHJ1ZTsK
KyAgICAgICAgICAgIGNvbW1pdFBhcmFtc1tgJHtwYXJ0aWFsfSR7cGFyYW19YF0gPSB2YWx1ZXM7
CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgWyd0aW1lJywgJ2JlZm9yZV90aW1lJywgJ2Fm
dGVyX3RpbWUnXS5mb3JFYWNoKHBhcmFtID0+IHsKKyAgICAgICAgY29uc3QgdmFsdWVzID0gKG5l
dyBRdWVyeU1vZGlmaWVyKHBhcmFtKSkuY3VycmVudCgpOworICAgICAgICBpZiAoIXZhbHVlcy5s
ZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmluZWRSYW5nZSA9IHRydWU7
CisgICAgICAgIHRpbWVQYXJhbXNbcGFyYW1dID0gdmFsdWVzOworICAgIH0pOworCisgICAgcmFu
Z2VQYXJhbXMgPSBPYmplY3QuYXNzaWduKGNvbW1pdFBhcmFtcywgdGltZVBhcmFtcyk7CisgICAg
Y29uc3QgYnJhbmNoID0gcXVlcnlUb1BhcmFtcyhkb2N1bWVudC5VUkwuc3BsaXQoJz8nKVsxXSku
YnJhbmNoOworICAgIGlmIChicmFuY2gpCisgICAgICAgIHJhbmdlUGFyYW1zLmJyYW5jaCA9IFti
cmFuY2hdOworCisgICAgaWYgKCFPYmplY3Qua2V5cyhyYW5nZVBhcmFtcykubGVuZ3RoICYmICFk
ZWZpbmVkUmFuZ2UpIHsKKyAgICAgICAgcmFuZ2VQYXJhbXMgPSB7fTsKKyAgICAgICAgY29uc3Qg
cGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgY29tbWl0UGFyYW1zKTsKKyAgICAgICAgaWYgKCFk
ZWZpbmVkUmFuZ2UpCisgICAgICAgICAgICBwYXJhbXMubGltaXQgPSBbMV07CisgICAgICAgIENv
bW1pdEJhbmsubGF0ZXN0KHBhcmFtcykudGhlbigoKSA9PiB7CisgICAgICAgICAgICByYW5nZVBh
cmFtcyA9IE9iamVjdC5hc3NpZ24oY29tbWl0UGFyYW1zLCB0aW1lUGFyYW1zKTsKKyAgICAgICAg
ICAgIHJhbmdlUGFyYW1zLmFmdGVyX3V1aWQgPSBbQ29tbWl0QmFuay5jb21taXRzWzBdLnV1aWRd
OworICAgICAgICAgICAgcmFuZ2VQYXJhbXMuYmVmb3JlX3V1aWQgPSBbQ29tbWl0QmFuay5jb21t
aXRzW0NvbW1pdEJhbmsuY29tbWl0cy5sZW5ndGggLSAxXS51dWlkXTsKKyAgICAgICAgICAgIHZp
ZXdzLmZvckVhY2godmlldyA9PiB2aWV3LnJlbG9hZCgpKTsKKyAgICAgICAgfSk7CisgICAgfSAg
IAorfQorCisKK2Z1bmN0aW9uIHJlbG9hZCgpCit7CisgICAgYWdyZWdhdGVDb25uZmlndXJhdGlv
biA9IENvbmZpZ3VyYXRpb24uZnJvbVF1ZXJ5KCk7CisgICAgcG9wdWxhdGVSYW5nZXMoKTsKKyAg
ICB2aWV3cy5mb3JFYWNoKHZpZXcgPT4gdmlldy5yZWxvYWQoKSk7Cit9CisKKworcG9wdWxhdGVS
YW5nZXMoKTsKK1NVSVRFUy5mb3JFYWNoKHN1aXRlID0+IHsKKyAgICB2aWV3cy5wdXNoKG5ldyBT
dWl0ZUZhaWx1cmVzVmlldyhzdWl0ZSkpOworfSkKKword2luZG93Lm9ucG9wc3RhdGUgPSBldmVu
dCA9PiB7CisgICAgcmVsb2FkKCk7Cit9Oword2luZG93Lm9ucHVzaHN0YXRlID0gZXZlbnQgPT4g
eworICAgIHJlbG9hZCgpOworfTsKKworbGV0IHZpZXdwb3J0ID0gbnVsbDsKK0RPTS5pbmplY3Qo
CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcCcpLAorICAgIGAke0RyYXdlcihbCisg
ICAgICAgIExlZ2VuZCgoZmlsdGVyRmxhZykgPT4geworICAgICAgICAgICAgaWYgKGZpbHRlckZs
YWcpCisgICAgICAgICAgICAgICAgdW5leHBlY3RlZFF1ZXJ5LnJlbW92ZSgpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWRRdWVyeS5yZXBsYWNlKGZhbHNlKTsK
KyAgICAgICAgICAgIHJlbG9hZCgpOworICAgICAgICB9LCB0cnVlLCB3aWxsRmlsdGVyRXhwZWN0
ZWQoKSksCisgICAgICAgIEJyYW5jaFNlbGVjdG9yKHJlbG9hZCksCisgICAgICAgIENvbmZpZ3Vy
YXRpb25TZWxlY3RvcnMocmVsb2FkKSwKKyAgICBdKX0KKworICAgIDxkaXYgY2xhc3M9Im1haW4g
cmlnaHQtc2lkZWJhciB1bmRlci10b3BiYXItd2l0aC1hY3Rpb25zIj4KKyAgICAgICAgPGJyPgor
ICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KKyAgICAgICAgICAgICR7dmlld3Muam9pbign
Jyl9CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PmAKKyk7CisKKzwvc2NyaXB0PgorCit7JSBl
bmRibG9jayAlfQoreyUgYmxvY2sgY29udGVudCAlfQorCis8ZGl2IGlkPSJhcHAiPgorPC9kaXY+
CisKK3slIGVuZGJsb2NrICV9CkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92
aWV3L3RlbXBsYXRlcy9zdWl0ZV9yZXN1bHRzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVz
dWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVzdWx0cy5odG1sCShy
ZXZpc2lvbiAyNTkzMDEpCisrKyBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3Rl
bXBsYXRlcy9zdWl0ZV9yZXN1bHRzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw2ICsxODQs
NyBAQCAke0RyYXdlcihbCiAgICAgQ29uZmlndXJhdGlvblNlbGVjdG9ycygoKSA9PiB7dmlldy5y
ZWxvYWQoKX0pLAogXSwgKCkgPT4gb25MYXlvdXRDaGFuZ2UuYWRkKCkpfQogPGRpdiBjbGFzcz0i
bWFpbiByaWdodC1zaWRlYmFyIHVuZGVyLXRvcGJhci13aXRoLWFjdGlvbnMiPgorICAgIDxicj4K
ICAgICA8ZGl2IGNsYXNzPSJjb250ZW50IiByZWY9JHtSRUYuY3JlYXRlUmVmKHsKICAgICAgICAg
ICAgIG9uRWxlbWVudE1vdW50OiAoZWxlbWVudCkgPT4gewogICAgICAgICAgICAgICAgIGZvciAo
bGV0IHN1aXRlIGluIHZpZXcuY2hpbGRyZW4pIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397269</attachid>
            <date>2020-04-22 15:02:50 -0700</date>
            <delta_ts>2020-04-27 13:00:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209562-20200422150249.patch</filename>
            <type>text/plain</type>
            <size>64528</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2MDQ0NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYxIEBACisyMDIwLTAzLTMxICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICByZXN1bHRzLndlYmtpdC5vZzogQWRkIGludmVzdGlnYXRpb24gZW5kcG9p
bnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTU2
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBh
biBlbmRwb2ludCB0aGF0IGFsbG93cyB1c2VycyB0byBsaXN0IGFsbCB0ZXN0IGZhaWx1cmVzIGdp
dmVuIHNvbWUgY3JpdGVyaWEsIGFuZAorICAgICAgICBwcm92aWRlIGEgcGFydGlhbCBsaXN0IG9m
IGZhaWx1cmVzIGluIHRoZSBpbnZlc3RpZ2F0aW9uIGRyYXdlci4KKworICAgICAgICAqIHJlc3Vs
dHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2NvbW1pdC5qczoKKyAgICAgICAgKENv
bW1pdFRhYmxlKTogTGluayBjb21taXQgdG8gaW52ZXN0aWdhdGlvbiBlbmRwb2ludC4KKyAgICAg
ICAgKF9Db21taXRCYW5rLnByb3RvdHlwZS5sYXRlc3QpOiBQb3B1bGF0ZSB0aGUgQ29tbWl0QmFu
ayB3aXRoIHRoZSBsYXN0IHggY29tbWl0cy4KKyAgICAgICAgKF9Db21taXRCYW5rLnByb3RvdHlw
ZS5jb21taXRzRHVyaW5nVXVpZCk6IFJlbmFtZWQgY29tbWl0c0R1cmluZy4KKyAgICAgICAgKF9D
b21taXRCYW5rLnByb3RvdHlwZS4gY29tbWl0c0R1cmluZyk6IEFjY2VwdCBhIHJhbmdlIFV1aWRz
IGluc3RlYWQgb2YgYSBzaW5nbGUgVXVpZC4KKyAgICAgICAgKF9Db21taXRCYW5rLnByb3RvdHlw
ZS5fbG9hZCk6IExvYWQgYSBzaW5nbGUgY29tbWl0IGlmIHRoZSBiZWZvcmUgYW5kIGFmdGVyIHV1
aWQgbWF0Y2guCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMv
anMvY29tbW9uLmpzOgorICAgICAgICAocGFyYW1zVG9RdWVyeSk6IEZhbHNlIHNob3VsZCBiZSBh
ZGRlZCBhcyBhIHBhcmFtZXRlciwgaWYgcHJvdmlkZWQuCisgICAgICAgIChwZXJjZW50YWdlKTog
TW92ZWQgZnJvbSBpbnZlc3RpZ2F0ZS5qcy4KKyAgICAgICAgKGVsYXBzZWRUaW1lKTogRGl0dG8u
CisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvY29uZmln
dXJhdGlvbi5qczoKKyAgICAgICAgKENvbmZpZ3VyYXRpb24uY29tYmluZSk6IEFsbG93IGNvbmZp
Z3VyYXRpb25zIHRvIGJlIGNvbWJpbmVkIHRvIGEgc2luZ2xlLCBtb3JlIGdlbmVyYWwsIGNvbmZp
Z3VyYXRpb24uCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMv
anMvZmFpbHVyZXMuanM6IEFkZGVkLgorICAgICAgICAoRmFpbHVyZXMucHJvdG90eXBlLmZyb21F
bmRwb2ludCk6IENvbnN0cnVjdCBhIGZhaWx1cmUgb2JqZWN0IGZyb20gdGhlIGZhaWx1cmVzIGVu
ZHBvaW50LgorICAgICAgICAoRmFpbHVyZXMuY29tYmluZSk6IENvbWJpbmUgdHdvIGZhaWx1cmUg
b2JqZWN0cyB0b2dldGhlci4KKyAgICAgICAgKEZhaWx1cmVzKToKKyAgICAgICAgKEZhaWx1cmVz
LnByb3RvdHlwZS50b1BhcmFtcyk6IENvbnZlcnQgb2JqZWN0IHRvIHBhcmFtZXRlcnMgZm9yIG90
aGVyIHJlc3VsdHMgZGF0YWJhc2UgcXVlcmllcy4KKyAgICAgICAgKiByZXN1bHRzZGJweS9yZXN1
bHRzZGJweS92aWV3L3N0YXRpYy9qcy9pbnZlc3RpZ2F0ZS5qczoKKyAgICAgICAgKGVsYXBzZWQp
OiBVc2VkIHNoYXJlZCB0aW1lIGVsYXBzZWQgZnVuY3Rpb24uCisgICAgICAgIChwZXJjZW50YWdl
KTogTW92ZWQgdG8gY29tbW9uLmpzLgorICAgICAgICAocHJpb3JpdGl6ZWRGYWlsdXJlcyk6IFJl
dHVybiBhIGRpdiB3aXRoIGEgdHJ1bmNhdGVkIGxpc3Qgb2YgdGVzdHMgd2hpY2ggZmFpbGVkLgor
ICAgICAgICAocmVzdWx0c0ZvckRhdGEpOiBJbmNsdWRlIHNvbWUgbnVtYmVyIG9mIHByaW9yaXRp
emVkIHRlc3QgZmFpbHVyZXMgYmFzZWQgb24gaG93IG1hbnkgYnViYmxlcyBhcmUKKyAgICAgICAg
YWxyZWFkeSBkaXNwbGF5ZWQuCisgICAgICAgIChfSW52ZXN0aWdhdGVEcmF3ZXIucHJvdG90eXBl
LmV4cGFuZCk6IERpc3BhdGNoIGZhaWx1cmUgcmVxdWVzdC4KKyAgICAgICAgKF9JbnZlc3RpZ2F0
ZURyYXdlci5wcm90b3R5cGUuZGlzcGF0Y2gpOiBTdGFydCByZXF1ZXN0IHRvIGZhaWx1cmVzIGVu
ZHBvaW50LgorICAgICAgICAqIHJlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pz
L3RpbWVsaW5lLmpzOgorICAgICAgICAoVGltZWxpbmVGcm9tRW5kcG9pbnQucHJvdG90eXBlLnJl
bmRlci5vbkRvdEVudGVyRmFjdG9yeSk6IEFkZCBsaW5rIHRvIGludmVzdGlnYXRpb24gZW5kcG9p
bnQuCisgICAgICAgIChMZWdlbmQpOiBXaGVuIHNlYXJjaCBwYXJhbWV0ZXJzIGNoYW5nZSwgd2Ug
bmVlZCB0byByZS1kaXNwYXRjaCBmYWlsdXJlIHJlcXVlc3RzLgorICAgICAgICAqIHJlc3VsdHNk
YnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3VpdGVfdmlldy5weToKKyAgICAgICAgKFN1aXRlVmlldy5f
c3VpdGVzX2Zvcl9pbnZlc3RpZ2F0aW9uKTogRmlsdGVyIHBhcmFtZXRlcnMgZm9yIGludmVzdGln
YXRpb24gZW5kcG9pbnQuCisgICAgICAgIChTdWl0ZVZpZXcuaW52ZXN0aWdhdGUpOiBSZXR1cm4g
aW52ZXN0aWdhdGlvbiBlbmRwb2ludCBodG1sIHRlbXBsYXRlLgorICAgICAgICAqIHJlc3VsdHNk
YnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL2ludmVzdGlnYXRlLmh0bWw6IEFkZGVkLgor
ICAgICAgICAod2lsbEZpbHRlckV4cGVjdGVkKTogQ2hlY2sgaWYgdGhlIHF1ZXJ5IHBhcmFtZXRl
cnMgaW5kaWNhdGUgdGhhdCBleHBlY3RlZCBmYWlsdXJlcyBhcmUgdG8gYmUgaWdub3JlZC4KKyAg
ICAgICAgKGNvbW1pdHNGb3JSYW5nZSk6IFJldHVybiBhIGxpc3Qgb2YgY29tbWl0cyBmb3IgYSB1
dWlkIHJhbmdlLgorICAgICAgICAoU3VpdGVGYWlsdXJlc1ZpZXcuY29uc3RydWN0b3IpOiBBYnN0
cmFjdGlvbiB0byBob2xkIHRoZSBpbnZlc3RpZ2F0aW9uIGRhdGEgZm9yIGEgc2luZ2xlIHN1aXRl
LgorICAgICAgICAoU3VpdGVGYWlsdXJlc1ZpZXcucmVsb2FkKTogRGlzcGF0Y2ggcmVxdWVzdHMg
dG8gdGhlIHJlc3VsdHMgYW5kIGZhaWx1cmVzIGVuZHBvaW50IHRvIHBvcHVsYXRlCisgICAgICAg
IGludmVzdGlnYXRpb24gZGF0YS4KKyAgICAgICAgKFN1aXRlRmFpbHVyZXNWaWV3LnNlbGVjdCk6
IEJ5IGRlZmF1bHQsIGZhaWx1cmVzIGZvciBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgYXJlIGNv
bGxhcHNlZCBpbnRvIGEgc2luZ2xlCisgICAgICAgIHZpZXcuIEFsbG93cyB0aGUgdXNlciB0byBp
dGVyYXRlIHRocm91Z2ggZWFjaCBjb25maWd1cmF0aW9uIHRoYXQgY29tcHJpc2VzIHRoZSB2aWV3
LgorICAgICAgICAoU3VpdGVGYWlsdXJlc1ZpZXcudG9TdHJpbmcpOgorICAgICAgICAocG9wdWxh
dGVSYW5nZXMpOiBFaXRoZXIgY29udmVydCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzIHRvIGEgcmFu
Z2UgdG8gc2VhcmNoIGZvciBmYWlsdXJlcyBhbmQgcmVzdWx0cworICAgICAgICBpbiwgb3IgdXNl
IHRoZSBtb3N0IHJlY2VudCBjb21taXQuCisgICAgICAgIChyZWxvYWQpOiBGb3JjZSBhbGwgc3Vp
dGUgdmlld3MgdG8gcmUtZGlzcGF0Y2ggcmVzdWx0cyBhbmQgZmFpbHVyZXMgcmVxdWVzdHMuCisg
ICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVz
dWx0cy5odG1sOiBBZGQgc3BhY2UgYmV0d2VlbiBzdWl0ZSBjb250ZW50IGFuZAorICAgICAgICB0
b3AgYmFyLgorICAgICAgICAqIHJlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdmlld19yb3V0
ZXMucHk6CisgICAgICAgIChWaWV3Um91dGVzLl9faW5pdF9fKTogQWRkIGludmVzdGlnYXRlIGVu
ZHBvaW50LgorCiAyMDIwLTA0LTIxICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KIAogICAgICAgICBbZXdzXSBEaXNwbGF5IGVycm9yIG1lc3NhZ2Ugd2hlbiBzdWJtaXQgZm9y
IEVXUyBhbmFseXNpcyBidXR0b24gZG9lc24ndCB3b3JrCkluZGV4OiBUb29scy9yZXN1bHRzZGJw
eS9yZXN1bHRzZGJweS92aWV3L3N1aXRlX3ZpZXcucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVz
dWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdWl0ZV92aWV3LnB5CShyZXZpc2lvbiAyNjA0NDUp
CisrKyBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N1aXRlX3ZpZXcucHkJKHdv
cmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxOSwgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTc3LDYgKzc3LDM2IEBAIGNsYXNzIFN1aXRlVmlldyhIYXNDb21taXRDb250ZXh0KToKICAg
ICBAbGltaXRfZm9yX3F1ZXJ5KERFRkFVTFRfTElNSVQpCiAgICAgQGNvbmZpZ3VyYXRpb25fZm9y
X3F1ZXJ5KCkKICAgICBAdGltZV9yYW5nZV9mb3JfcXVlcnkoKQorICAgIGRlZiBfc3VpdGVzX2Zv
cl9pbnZlc3RpZ2F0aW9uKAorICAgICAgICBzZWxmLCBzdWl0ZT1Ob25lLCBjb25maWd1cmF0aW9u
cz1Ob25lLCByZWNlbnQ9Tm9uZSwKKyAgICAgICAgYnJhbmNoPU5vbmUsIGJlZ2luPU5vbmUsIGVu
ZD1Ob25lLAorICAgICAgICBiZWdpbl9xdWVyeV90aW1lPU5vbmUsIGVuZF9xdWVyeV90aW1lPU5v
bmUsCisgICAgICAgIHVuZXhwZWN0ZWQ9Tm9uZSwKKyAgICAgICAgbGltaXQ9Tm9uZSwgKiprd2Fy
Z3MKKyAgICApOgorICAgICAgICBBc3NlcnRSZXF1ZXN0LmlzX3R5cGUoWydHRVQnXSkKKyAgICAg
ICAgQXNzZXJ0UmVxdWVzdC5xdWVyeV9rd2FyZ3NfZW1wdHkoKiprd2FyZ3MpCisKKyAgICAgICAg
d2l0aCBzZWxmLnVwbG9hZF9jb250cm9sbGVyLnVwbG9hZF9jb250ZXh0OgorICAgICAgICAgICAg
c3VpdGVzX2J5X2NvbmZpZ3VyYXRpb24gPSBzZWxmLnVwbG9hZF9jb250cm9sbGVyLnVwbG9hZF9j
b250ZXh0LmZpbmRfc3VpdGVzKGNvbmZpZ3VyYXRpb25zPWNvbmZpZ3VyYXRpb25zLCByZWNlbnQ9
Ym9vbGVhbl9xdWVyeSgqcmVjZW50KVswXSBpZiByZWNlbnQgZWxzZSBUcnVlKQorICAgICAgICAg
ICAgY2FuZGlkYXRlX3N1aXRlcyA9IHNldCgpCisgICAgICAgICAgICBmb3Igc3VpdGVzX2Zvcl9j
b25maWcgaW4gc3VpdGVzX2J5X2NvbmZpZ3VyYXRpb24udmFsdWVzKCk6CisgICAgICAgICAgICAg
ICAgZm9yIHMgaW4gc3VpdGVzX2Zvcl9jb25maWc6CisgICAgICAgICAgICAgICAgICAgIGNhbmRp
ZGF0ZV9zdWl0ZXMuYWRkKHMpCisgICAgICAgICAgICByZXR1cm4gc29ydGVkKFtzIGZvciBzIGlu
IGNhbmRpZGF0ZV9zdWl0ZXMgaWYgbm90IHN1aXRlIG9yIHMgaW4gc3VpdGVdKQorCisgICAgQFNp
dGVNZW51LnJlbmRlcl93aXRoX3NpdGVfbWVudSgpCisgICAgZGVmIGludmVzdGlnYXRlKHNlbGYs
ICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZW52aXJvbm1lbnQuZ2V0X3RlbXBsYXRl
KCdpbnZlc3RpZ2F0ZS5odG1sJykucmVuZGVyKAorICAgICAgICAgICAgdGl0bGU9c2VsZi5zaXRl
X21lbnUudGl0bGUsCisgICAgICAgICAgICBzdWl0ZXM9anNvbi5kdW1wcyhzZWxmLl9zdWl0ZXNf
Zm9yX2ludmVzdGlnYXRpb24oKSksCisgICAgICAgICAgICAqKmt3YXJncykKKworICAgIEBxdWVy
eV9hc19rd2FyZ3MoKQorICAgIEB1dWlkX3JhbmdlX2Zvcl9xdWVyeSgpCisgICAgQGxpbWl0X2Zv
cl9xdWVyeShERUZBVUxUX0xJTUlUKQorICAgIEBjb25maWd1cmF0aW9uX2Zvcl9xdWVyeSgpCisg
ICAgQHRpbWVfcmFuZ2VfZm9yX3F1ZXJ5KCkKICAgICBkZWYgX3N1aXRlc19mb3Jfc2VhcmNoKAog
ICAgICAgICBzZWxmLCBzdWl0ZT1Ob25lLCBjb25maWd1cmF0aW9ucz1Ob25lLCByZWNlbnQ9Tm9u
ZSwKICAgICAgICAgYnJhbmNoPU5vbmUsIGJlZ2luPU5vbmUsIGVuZD1Ob25lLApJbmRleDogVG9v
bHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy92aWV3X3JvdXRlcy5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3ZpZXdfcm91dGVzLnB5CShy
ZXZpc2lvbiAyNjA0NDUpCisrKyBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3Zp
ZXdfcm91dGVzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMp
IDIwMTksIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC04NSw3ICs4NSw5IEBAIGNsYXNzIFZpZXdSb3V0ZXMoQXV0aGVk
Qmx1ZXByaW50KToKICAgICAgICAgc2VsZi5hZGRfdXJsX3J1bGUoJy9jb21taXQvcHJldmlvdXMn
LCAnY29tbWl0X3ByZXZpb3VzJywgc2VsZi5jb21taXRzLnByZXZpb3VzLCBtZXRob2RzPSgnR0VU
JywpKQogICAgICAgICBzZWxmLmFkZF91cmxfcnVsZSgnL2NvbW1pdC9uZXh0JywgJ2NvbW1pdF9u
ZXh0Jywgc2VsZi5jb21taXRzLm5leHQsIG1ldGhvZHM9KCdHRVQnLCkpCiAgICAgICAgIHNlbGYu
YWRkX3VybF9ydWxlKCcvY29tbWl0cycsICdjb21taXRzJywgc2VsZi5jb21taXRzLmNvbW1pdHMs
IG1ldGhvZHM9KCdHRVQnLCkpCisKICAgICAgICAgc2VsZi5hZGRfdXJsX3J1bGUoJy9zdWl0ZXMn
LCAnc3VpdGVzJywgc2VsZi5zdWl0ZXMucmVzdWx0cywgbWV0aG9kcz0oJ0dFVCcsKSkKKyAgICAg
ICAgc2VsZi5hZGRfdXJsX3J1bGUoJy9pbnZlc3RpZ2F0ZScsICdpbnZlc3RpZ2F0ZScsIHNlbGYu
c3VpdGVzLmludmVzdGlnYXRlLCBtZXRob2RzPSgnR0VUJywpKQogCiAgICAgICAgIHNlbGYuYWRk
X3VybF9ydWxlKCcvdXJscy9xdWV1ZScsICd1cmxzLXF1ZXVlJywgc2VsZi5jaS5xdWV1ZSwgbWV0
aG9kcz0oJ0dFVCcsKSkKICAgICAgICAgc2VsZi5hZGRfdXJsX3J1bGUoJy91cmxzL3dvcmtlcics
ICd1cmxzLXdvcmtlcicsIHNlbGYuY2kud29ya2VyLCBtZXRob2RzPSgnR0VUJywpKQpAQCAtMTA3
LDYgKzEwOSw3IEBAIGNsYXNzIFZpZXdSb3V0ZXMoQXV0aGVkQmx1ZXByaW50KToKIAogICAgICAg
ICBzZWxmLnNpdGVfbWVudS5hZGRfZW5kcG9pbnQoJ01haW4nLCBzZWxmLm5hbWUgKyAnLm1haW4n
LCBwYXJhbWV0ZXJzPVsnYnJhbmNoJ10pCiAgICAgICAgIHNlbGYuc2l0ZV9tZW51LmFkZF9lbmRw
b2ludCgnU3VpdGVzJywgc2VsZi5uYW1lICsgJy5zdWl0ZXMnLCBwYXJhbWV0ZXJzPVsnYnJhbmNo
J10pCisgICAgICAgIHNlbGYuc2l0ZV9tZW51LmFkZF9lbmRwb2ludCgnSW52ZXN0aWdhdGUnLCBz
ZWxmLm5hbWUgKyAnLmludmVzdGlnYXRlJywgcGFyYW1ldGVycz1bJ2JyYW5jaCddKQogICAgICAg
ICBzZWxmLnNpdGVfbWVudS5hZGRfZW5kcG9pbnQoJ0RvY3VtZW50YXRpb24nLCBzZWxmLm5hbWUg
KyAnLmRvY3VtZW50YXRpb24nKQogICAgICAgICBzZWxmLnNpdGVfbWVudS5hZGRfZW5kcG9pbnQo
J0NvbW1pdHMnLCBzZWxmLm5hbWUgKyAnLmNvbW1pdHMnLCBwYXJhbWV0ZXJzPVsnYnJhbmNoJ10p
CiAKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2Nv
bW1pdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3
L3N0YXRpYy9qcy9jb21taXQuanMJKHJldmlzaW9uIDI2MDQ0NSkKKysrIFRvb2xzL3Jlc3VsdHNk
YnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2NvbW1pdC5qcwkod29ya2luZyBjb3B5KQpA
QCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTksIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogLy8KIC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OCwx
MiArOTgsMjEgQEAgZnVuY3Rpb24gQ29tbWl0VGFibGUoY29tbWl0cywgcmVwb3NpdG9yeQogICAg
ICAgICAgICAgICAgICAgICBpZiAoY2VsbC50aW1lc3RhbXApCiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gYDx0ZCByb3dzcGFuPSIke2NlbGwucm93c3Bhbn0iPiR7bmV3IERhdGUoY2Vs
bC50aW1lc3RhbXAgKiAxMDAwKS50b0xvY2FsZVN0cmluZygpfTwvdGQ+YDsKIAotICAgICAgICAg
ICAgICAgICAgICB2YXIgY29tbWl0X2FyZ3MgPSAncmVwb3NpdG9yeV9pZD0nICsgY2VsbC5jb21t
aXQucmVwb3NpdG9yeV9pZCArICcmYnJhbmNoPScgKyBjZWxsLmNvbW1pdC5icmFuY2ggKyAnJmlk
PScgKyBjZWxsLmNvbW1pdC5pZDsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGNvbW1pdEFyZ3Mg
PSBwYXJhbXNUb1F1ZXJ5KHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ6
IFtjZWxsLmNvbW1pdC5yZXBvc2l0b3J5X2lkXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
YW5jaDogW2NlbGwuY29tbWl0LmJyYW5jaF0sCisgICAgICAgICAgICAgICAgICAgICAgICBpZDog
W2NlbGwuY29tbWl0LmlkXSwKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgICAgIGxldCBpbnZlc3RpZ2F0ZUFyZ3MgPSB7aWQ6IFtjZWxsLmNvbW1pdC5pZF19OworICAg
ICAgICAgICAgICAgICAgICBpZiAoIVsnbWFzdGVyJywgJ3RydW5rJ10uaW5jbHVkZXMoY2VsbC5j
b21taXQuYnJhbmNoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGludmVzdGlnYXRlQXJncy5i
cmFuY2ggPSBbY2VsbC5jb21taXQuYnJhbmNoXTsKKwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gYDx0ZCByb3dzcGFuPSIke2NlbGwucm93c3Bhbn0iPgotICAgICAgICAgICAgICAgICAgICAg
ICAgPGEgaHJlZj0iL2NvbW1pdD8ke2NvbW1pdF9hcmdzfSI+JHtjZWxsLmNvbW1pdC5pZH08L2E+
IDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii9jb21taXQ/JHtjb21taXRB
cmdzfSI+JHtjZWxsLmNvbW1pdC5pZH08L2E+IDxicj4KICAgICAgICAgICAgICAgICAgICAgICAg
IEJyYW5jaDogJHtjZWxsLmNvbW1pdC5icmFuY2h9IDxicj4KICAgICAgICAgICAgICAgICAgICAg
ICAgIENvbW1pdHRlcjogJHtlc2NhcGVIVE1MKGNlbGwuY29tbWl0LmNvbW1pdHRlcil9IDxicj4K
LSAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii9jb21taXQvaW5mbz8ke2NvbW1pdF9h
cmdzfSI+TW9yZSBJbmZvPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL2Nv
bW1pdC9pbmZvPyR7Y29tbWl0QXJnc30iPk1vcmUgSW5mbzwvYT48YnI+CisgICAgICAgICAgICAg
ICAgICAgICAgICA8YSBocmVmPSIvaW52ZXN0aWdhdGU/JHtwYXJhbXNUb1F1ZXJ5KGludmVzdGln
YXRlQXJncyl9Ij5UZXN0IHJlc3VsdHMgZm9yIGNvbW1pdDwvYT4KICAgICAgICAgICAgICAgICAg
ICAgICAgICR7ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFj
ZWxsLmNvbW1pdC5tZXNzYWdlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gJyc7CkBAIC0xNDcsNiArMTU2LDU5IEBAIGNsYXNzIF9Db21taXRCYW5rIHsKICAgICAgICAg
dGhpcy5jYWxsYmFja3MgPSBbXTsKIAogICAgIH0KKyAgICBsYXRlc3QocGFyYW1zKSB7CisgICAg
ICAgIHRoaXMuX2JyYW5jaGVzID0gbmV3IFNldChwYXJhbXMuYnJhbmNoKTsKKyAgICAgICAgdGhp
cy5fcmVwb3NpdG9yaWVzID0gbmV3IFNldChwYXJhbXMucmVwb3NpdG9yeV9pZCk7CisgICAgICAg
IHRoaXMuX2JlZ2luVXVpZCA9IG51bGw7CisgICAgICAgIHRoaXMuX2VuZFV1aWQgPSBudWxsOwor
CisgICAgICAgIC8vIE9ubHkgcHJvdmlkZSB0aGUgbGF0ZXN0IGNvbW1pdHMKKyAgICAgICAgY29u
c3Qgc2VsZiA9IHRoaXM7CisgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNv
bHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIGZldGNoKE9iamVjdC5rZXlzKHBhcmFtcykubGVu
Z3RoID8gYGFwaS9jb21taXRzPyR7cGFyYW1zVG9RdWVyeShwYXJhbXMpfWAgOiAnYXBpL2NvbW1p
dHMnKS50aGVuKHJlc3BvbnNlID0+IHsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5qc29uKCku
dGhlbihqc29uID0+IHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmVnaW5VdWlkID0gTWF0
aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Vu
ZFV1aWQgPSAwOworCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9sZGVzdElkRm9yUmVwbyA9
IHt9OworICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gW107CisgICAgICAg
ICAgICAgICAgICAgIGpzb24uZm9yRWFjaChkYXR1bSA9PnsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNvbW1pdCA9IG5ldyBDb21taXQoZGF0dW0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgY2FuZGlkYXRlcy5wdXNoKGNvbW1pdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChvbGRlc3RJZEZvclJlcG9bY29tbWl0LnJlcG9zaXRvcnlfaWRdKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9sZGVzdElkRm9yUmVwb1tjb21taXQucmVwb3NpdG9yeV9pZF0gPSBN
YXRoLm1pbihjb21taXQudXVpZCwgb2xkZXN0SWRGb3JSZXBvW2NvbW1pdC5yZXBvc2l0b3J5X2lk
XSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2xkZXN0SWRGb3JSZXBvW2NvbW1pdC5yZXBvc2l0b3J5X2lkXSA9IGNvbW1pdC51dWlk
OworICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICBsZXQgb2xk
ZXN0VmFsaWRVdWlkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMob2xkZXN0
SWRGb3JSZXBvKS5mb3JFYWNoKGlkID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZGVz
dFZhbGlkVXVpZCA9IE1hdGgubWF4KG9sZGVzdFZhbGlkVXVpZCwgaWQpOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmZvckVhY2goY29t
bWl0ID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXQudXVpZCA8PSBvbGRl
c3RWYWxpZFV1aWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5jb21taXRzLnB1c2goY29tbWl0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX2JlZ2luVXVpZCA9IE1hdGgubWluKGNvbW1pdC51dWlkLCBzZWxm
Ll9iZWdpblV1aWQpOworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZW5kVXVpZCA9IE1h
dGgubWF4KGNvbW1pdC51dWlkLCBzZWxmLl9lbmRVdWlkKTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX2JlZ2luVXVpZCA+IHNlbGYuX2Vu
ZFV1aWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2JlZ2luVXVpZCA9IG51bGw7
CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9lbmRVdWlkID0gbnVsbDsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcyk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7CisgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIGxvYWQgZmFpbHMsIGxvZyB0aGUgZXJyb3IgYW5kIGNvbnRpbnVl
CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihKU09OLnN0cmluZ2lmeShlcnJvciwgbnVs
bCwgNCkpOworICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfSk7CisgICAgfQogICAgIGNvbW1pdEJ5VXVpZCh1dWlkKSB7CiAgICAgICAgIGxl
dCBiZWdpbiA9IDA7CiAgICAgICAgIGxldCBlbmQgPSB0aGlzLmNvbW1pdHMubGVuZ3RoIC0gMTsK
QEAgLTE2MiwyMyArMjI0LDM5IEBAIGNsYXNzIF9Db21taXRCYW5rIHsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgY29tbWl0c0R1cmluZ1V1aWQodXVpZCkgewor
ICAgIGNvbW1pdHNEdXJpbmcobWluVXVpZCwgbWF4VXVpZCA9IDApIHsKICAgICAgICAgbGV0IGNv
bW1pdHMgPSBbXTsKICAgICAgICAgbGV0IGJlZ2luID0gMDsKICAgICAgICAgbGV0IGVuZCA9IHRo
aXMuY29tbWl0cy5sZW5ndGggLSAxOworICAgICAgICBsZXQgY291bnRlciA9IDA7CiAgICAgICAg
IGxldCBpbmRleCA9IHRoaXMuY29tbWl0cy5sZW5ndGggLSAxOworCisgICAgICAgIGlmIChtYXhV
dWlkID09IDApCisgICAgICAgICAgICBtYXhVdWlkID0gbWluVXVpZDsKKyAgICAgICAgaWYgKG1h
eFV1aWQgPCBtaW5VdWlkKSB7CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIHV1
aWQgcmFuZ2UnKTsKKyAgICAgICAgICAgIHJldHVybiBjb21taXRzOworICAgICAgICB9CisKICAg
ICAgICAgd2hpbGUgKGJlZ2luIDw9IGVuZCkgewotICAgICAgICAgICAgY29uc3QgbWlkID0gTWF0
aC5jZWlsKChiZWdpbiArIGVuZCkgLyAyKTsKLSAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9
IHRoaXMuY29tbWl0c1ttaWRdOwotICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS51dWlkID09PSB1
dWlkKSB7Ci0gICAgICAgICAgICAgICAgY29tbWl0cy5wdXNoKGNhbmRpZGF0ZSk7Ci0gICAgICAg
ICAgICAgICAgaW5kZXggPSBtaWQgLSAxOworICAgICAgICAgICAgY291bnRlciA9IE1hdGguY2Vp
bCgoYmVnaW4gKyBlbmQpIC8gMik7CisgICAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0aGlz
LmNvbW1pdHNbY291bnRlcl07CisgICAgICAgICAgICBpZiAobWluVXVpZCA8PSBjYW5kaWRhdGUu
dXVpZCAmJiBjYW5kaWRhdGUudXVpZCA8PSBtYXhVdWlkKSB7CisgICAgICAgICAgICAgICAgaW5k
ZXggPSBjb3VudGVyIC0gMTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChjYW5kaWRhdGUudXVpZCA8IHV1aWQpCi0gICAgICAgICAgICAgICAg
YmVnaW4gPSBtaWQgKyAxOworCisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLnV1aWQgPCBtaW5V
dWlkKQorICAgICAgICAgICAgICAgIGJlZ2luID0gY291bnRlciArIDE7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTsKKyAgICAgICAgICAgICAgICBlbmQg
PSBjb3VudGVyIC0gMTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoY291bnRlciA8IHRoaXMu
Y29tbWl0cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRoaXMuY29t
bWl0c1tjb3VudGVyXTsKKyAgICAgICAgICAgIGlmIChtaW5VdWlkID4gY2FuZGlkYXRlLnV1aWQg
fHwgY2FuZGlkYXRlLnV1aWQgPiBtYXhVdWlkKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAg
ICAgICAgICBjb21taXRzLnB1c2goY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICsrY291bnRlcjsK
ICAgICAgICAgfQogCiAgICAgICAgIGxldCByZXBvc2l0b3JpZXMgPSBuZXcgU2V0KCk7CkBAIC0x
OTUsMTQgKzI3MywxNCBAQCBjbGFzcyBfQ29tbWl0QmFuayB7CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNvbW1pdHMucHVzaCh0aGlzLmNv
bW1pdHNbaW5kZXhdKTsKKyAgICAgICAgICAgIGNvbW1pdHMudW5zaGlmdCh0aGlzLmNvbW1pdHNb
aW5kZXhdKTsKICAgICAgICAgICAgIHJlcG9zaXRvcmllcy5hZGQodGhpcy5jb21taXRzW2luZGV4
XS5yZXBvc2l0b3J5X2lkKTsKICAgICAgICAgICAgIGlmIChyZXBvc2l0b3JpZXMubGVuZ3RoID09
IHRoaXMuX3JlcG9zaXRvcmllcy5sZW5ndGgpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgICAgIC0taW5kZXg7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNvbW1pdHMuc29y
dChmdW5jdGlvbihhLCBiKSB7cmV0dXJuIGEucmVwb3NpdG9yeV9pZC5sb2NhbGVDb21wYXJlKGIu
cmVwb3NpdG9yeV9pZCl9KTsKKyAgICAgICAgcmV0dXJuIGNvbW1pdHM7CiAgICAgfQogICAgIF9s
b2FkU2libGluZ3MoY29tbWl0KSB7CiAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gcGFyYW1zVG9RdWVy
eSh7CkBAIC0yNDUsNyArMzIzLDcgQEAgY2xhc3MgX0NvbW1pdEJhbmsgewogICAgICAgICB9KTsK
ICAgICB9CiAgICAgX2xvYWQoYmVnaW5VdWlkLCBlbmRVdWlkKSB7Ci0gICAgICAgIGlmIChlbmRV
dWlkIDw9IGJlZ2luVXVpZCkKKyAgICAgICAgaWYgKGVuZFV1aWQgPCBiZWdpblV1aWQpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgY29uc3QgbGltaXQgPSAyNTAwOwpAQCAtMzY2LDQg
KzQ0NCw0IEBAIGNsYXNzIF9Db21taXRCYW5rIHsKIAogY29uc3QgQ29tbWl0QmFuayA9IG5ldyBf
Q29tbWl0QmFuaygpOwogCi1leHBvcnQge0NvbW1pdCwgQ29tbWl0QmFuaywgQ29tbWl0VGFibGV9
OworZXhwb3J0IHtDb21taXQsIENvbW1pdEJhbmssIENvbW1pdFRhYmxlLCBUSU1FU1RBTVBfVE9f
VVVJRF9NVUxUSVBMSUVSfTsKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3Zp
ZXcvc3RhdGljL2pzL2NvbW1vbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9yZXN1bHRzZGJweS9y
ZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9jb21tb24uanMJKHJldmlzaW9uIDI2MDQ0NSkKKysr
IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2NvbW1vbi5qcwko
d29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTksIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8KIC8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01NSw3ICs1NSw3IEBAIGZ1bmN0aW9uIHBhcmFtc1RvUXVlcnkoanNvbikgewog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAganNvbltwYXJhbWV0ZXJd
LmZvckVhY2goKHZhbHVlKSA9PiB7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAg
ICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgcmVzdWx0ICs9IChyZXN1bHQgPyAnJicgOiAnJykg
KyBlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyKSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVu
dCh2YWx1ZSk7CiAgICAgICAgIH0pOwpAQCAtMTY1LDQgKzE2NSwyOCBAQCBmdW5jdGlvbiBkZWVw
Q29tcGFyZShhLCBiKSB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWV4cG9ydCB7ZGVlcENvbXBh
cmUsIEVycm9yRGlzcGxheSwgcXVlcnlUb1BhcmFtcywgcGFyYW1zVG9RdWVyeSwgUXVlcnlNb2Rp
ZmllciwgZXNjYXBlSFRNTH07CitmdW5jdGlvbiBwZXJjZW50YWdlKHZhbHVlLCBtYXgpCit7Cisg
ICAgaWYgKHZhbHVlID09PSBtYXgpCisgICAgICAgIHJldHVybiAnMTAwICUnOworICAgIGlmICgh
dmFsdWUpCisgICAgICAgIHJldHVybiAnMCAlJzsKKyAgICBjb25zdCByZXN1bHQgPSBNYXRoLnJv
dW5kKHZhbHVlIC8gbWF4ICogMTAwKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJu
ICc8MSAlJzsKKyAgICBpZiAocmVzdWx0ID09PSAxMDApCisgICAgICAgIHJldHVybiAnOTkgJSc7
CisgICAgcmV0dXJuIGAke3Jlc3VsdH0gJWAKK30KKworZnVuY3Rpb24gZWxhcHNlZFRpbWUoc3Rh
cnRUaW1lc3RhbXAsIGVuZFRpbWVzdGFtcCkKK3sKKyAgICBjb25zdCB0aW1lID0gbmV3IERhdGUo
KGVuZFRpbWVzdGFtcCAtIHN0YXJ0VGltZXN0YW1wKSAqIDEwMDApOworICAgIGxldCByZXN1bHQg
PSAnJzsKKyAgICBpZiAodGltZS5nZXRNaW51dGVzKCkpCisgICAgICAgIHJlc3VsdCArPSBgJHt0
aW1lLmdldE1pbnV0ZXMoKX0gbWludXRlJHt0aW1lLmdldE1pbnV0ZXMoKSA9PSAxID8gJycgOiAn
cyd9IGFuZCBgOworICAgIHJlc3VsdCArPSBgJHt0aW1lLmdldFNlY29uZHMoKX0gc2Vjb25kJHt0
aW1lLmdldFNlY29uZHMoKSA9PSAxID8gJycgOiAncyd9IHRvIHJ1bmA7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworZXhwb3J0IHtkZWVwQ29tcGFyZSwgRXJyb3JEaXNwbGF5LCBxdWVyeVRvUGFy
YW1zLCBwYXJhbXNUb1F1ZXJ5LCBRdWVyeU1vZGlmaWVyLCBlc2NhcGVIVE1MLCBwZXJjZW50YWdl
LCBlbGFwc2VkVGltZX07CkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3
L3N0YXRpYy9qcy9jb25maWd1cmF0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNk
YnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2NvbmZpZ3VyYXRpb24uanMJKHJldmlzaW9u
IDI2MDQ0NSkKKysrIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pz
L2NvbmZpZ3VyYXRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkxLDIwIEBAIGNsYXNz
IENvbmZpZ3VyYXRpb24gewogICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJy4nKTsKICAgICB9
CiAKKyAgICBzdGF0aWMgY29tYmluZSgpCisgICAgeworICAgICAgICBpZiAoIWFyZ3VtZW50cy5s
ZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gbmV3IENvbmZpZ3VyYXRpb24oKTsKKyAgICAgICAg
Y29uc3QgY29tYmluZWQgPSBuZXcgQ29uZmlndXJhdGlvbihhcmd1bWVudHNbMF0pOworICAgICAg
ICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgQ29uZmlndXJhdGlvbi5tZW1iZXJzKCkuZm9yRWFjaChtZW1iZXIgPT4geworICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudHNbaV1bbWVtYmVyXSAhPT0gY29tYmluZWRbbWVtYmVyXSkKKyAg
ICAgICAgICAgICAgICAgICAgY29tYmluZWRbbWVtYmVyXSA9IG51bGw7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY29tYmluZWQ7CisgICAgfQorCiAgICAgY29u
c3RydWN0b3IoanNvbiA9IHt9KSB7CiAgICAgICAgIHRoaXMucGxhdGZvcm0gPSBqc29uLnBsYXRm
b3JtID8ganNvbi5wbGF0Zm9ybSA6IG51bGw7CiAgICAgICAgIHRoaXMudmVyc2lvbiA9IGpzb24u
dmVyc2lvbiA/IENvbmZpZ3VyYXRpb24udmVyc2lvblRvSW50ZWdlcihqc29uLnZlcnNpb24pIDog
bnVsbDsKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pz
L2ZhaWx1cmVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5
L3ZpZXcvc3RhdGljL2pzL2ZhaWx1cmVzLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL3Jlc3Vs
dHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2ZhaWx1cmVzLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTU5IEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisvLyBh
cmUgbWV0OgorLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisvLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiCisvLyBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKy8vIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKy8vIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworLy8gQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorLy8gQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKy8vIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworLy8gSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKy8vIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisvLyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisvLyBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB7VElNRVNUQU1QX1RPX1VVSURfTVVMVElQ
TElFUn0gZnJvbSAnL2Fzc2V0cy9qcy9jb21taXQuanMnOworaW1wb3J0IHtxdWVyeVRvUGFyYW1z
LCBwYXJhbXNUb1F1ZXJ5LCBRdWVyeU1vZGlmaWVyfSBmcm9tICcvYXNzZXRzL2pzL2NvbW1vbi5q
cyc7CitpbXBvcnQge0V4cGVjdGF0aW9uc30gZnJvbSAnL2Fzc2V0cy9qcy9leHBlY3RhdGlvbnMu
anMnOworaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tICcvYXNzZXRzL2pzL2NvbmZpZ3VyYXRp
b24uanMnOworCitjbGFzcyBGYWlsdXJlcyB7CisgICAgc3RhdGljIGZyb21FbmRwb2ludChzdWl0
ZSwgY29uZmlndXJhdGlvbj1udWxsLCBwYXJhbXM9e30pCisgICAgeworICAgICAgICByZXR1cm4g
bmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBjb25z
dCBwYXJhbXNUb0Rpc3BhdGNoID0gT2JqZWN0LmFzc2lnbihjb25maWd1cmF0aW9uID8gY29uZmln
dXJhdGlvbi50b1BhcmFtcygpIDoge30sIHBhcmFtcyk7CisgICAgICAgICAgICBwYXJhbXNUb0Rp
c3BhdGNoLmNvbGxhcHNlZCA9IFtmYWxzZV07CisgICAgICAgICAgICBpZiAocGFyYW1zVG9EaXNw
YXRjaC51bmV4cGVjdGVkID09PSB1bmRlZmluZWQpCisgICAgICAgICAgICAgICAgcGFyYW1zVG9E
aXNwYXRjaC51bmV4cGVjdGVkID0gW2ZhbHNlXTsKKworICAgICAgICAgICAgZmV0Y2goYGFwaS9m
YWlsdXJlcy8ke3N1aXRlfT8ke3BhcmFtc1RvUXVlcnkocGFyYW1zVG9EaXNwYXRjaCl9YCkudGhl
bihyZXNwb25zZSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFtdOworICAgICAg
ICAgICAgICAgIHJlc3BvbnNlLmpzb24oKS50aGVuKGpzb24gPT4geworICAgICAgICAgICAgICAg
ICAgICBpZiAoIUFycmF5LmlzQXJyYXkoanNvbikpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gW107CisgICAgICAgICAgICAgICAgICAgIGpzb24uZm9yRWFjaCgocGFpcnMpID0+IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJzLnJlc3VsdHMuZm9yRWFjaCgocnVuKSA9PiB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IEZhaWx1cmVzKHN1
aXRlLCBuZXcgQ29uZmlndXJhdGlvbihwYWlycy5jb25maWd1cmF0aW9uKSwgcnVuKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbG9h
ZCBmYWlscywgbG9nIHRoZSBlcnJvciBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICBjb25z
b2xlLmVycm9yKEpTT04uc3RyaW5naWZ5KGVycm9yLCBudWxsLCA0KSk7CisgICAgICAgICAgICAg
ICAgcmVqZWN0KGVycm9yKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisK
KyAgICBzdGF0aWMgY29tYmluZSgpCisgICAgeworICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5n
dGgpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICBjb25zdCByZXN1bHQgPSBu
ZXcgRmFpbHVyZXMoYXJndW1lbnRzWzBdLnN1aXRlKTsKKyAgICAgICAgY29uc3QgY29uZmlndXJh
dGlvbnMgPSBbXTsKKworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgY29uZmlndXJhdGlvbnMucHVzaChhcmd1bWVudHNbaV0u
Y29uZmlndXJhdGlvbik7CisgICAgICAgICAgICByZXN1bHQuYWdncmVnYXRpbmcgKz0gYXJndW1l
bnRzW2ldLmFnZ3JlZ2F0aW5nOworICAgICAgICAgICAgcmVzdWx0LnN0YXJ0X3RpbWVfcmFuZ2Ug
PSBbCisgICAgICAgICAgICAgICAgTWF0aC5taW4ocmVzdWx0LnN0YXJ0X3RpbWVfcmFuZ2VbMF0s
IGFyZ3VtZW50c1tpXS5zdGFydF90aW1lX3JhbmdlWzBdKSwKKyAgICAgICAgICAgICAgICBNYXRo
Lm1heChyZXN1bHQuc3RhcnRfdGltZV9yYW5nZVsxXSwgYXJndW1lbnRzW2ldLnN0YXJ0X3RpbWVf
cmFuZ2VbMV0pLAorICAgICAgICAgICAgXTsKKyAgICAgICAgICAgIHJlc3VsdC51dWlkX3Jhbmdl
ID0gWworICAgICAgICAgICAgICAgIE1hdGgubWluKHJlc3VsdC51dWlkX3JhbmdlWzBdLCBhcmd1
bWVudHNbaV0udXVpZF9yYW5nZVswXSksCisgICAgICAgICAgICAgICAgTWF0aC5tYXgocmVzdWx0
LnV1aWRfcmFuZ2VbMV0sIGFyZ3VtZW50c1tpXS51dWlkX3JhbmdlWzFdKSwKKyAgICAgICAgICAg
IF07CisKKyAgICAgICAgICAgIC8vIENvbWJpbmUKKyAgICAgICAgICAgIEV4cGVjdGF0aW9ucy5m
YWlsdXJlVHlwZXMuZm9yRWFjaCh0eXBlID0+IHsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCB0
ZXN0IGluIGFyZ3VtZW50c1tpXVt0eXBlXSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVz
dWx0W3R5cGVdW3Rlc3RdID09PSB1bmRlZmluZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRbdHlwZV1bdGVzdF0gPSBhcmd1bWVudHNbaV1bdHlwZV1bdGVzdF07CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFt0eXBlXVt0ZXN0
XSArPSBhcmd1bWVudHNbaV1bdHlwZV1bdGVzdF07CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIFByaW9yaXRpemUgZmFpbHVyZXMKKyAgICAgICAg
ICAgIGNvbnN0IHJlbWFpbmluZ1R5cGVzID0gWy4uLkV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXNd
OworICAgICAgICAgICAgd2hpbGUgKHJlbWFpbmluZ1R5cGVzLmxlbmd0aCA+IDEpIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCB0b1JlbW92ZSA9IFtdOworICAgICAgICAgICAgICAgIGNvbnN0IGN1
cnJlbnRUeXBlID0gcmVtYWluaW5nVHlwZXNbMF07CisgICAgICAgICAgICAgICAgcmVtYWluaW5n
VHlwZXMuc2hpZnQoKTsKKworICAgICAgICAgICAgICAgIGZvciAobGV0IHRlc3QgaW4gcmVzdWx0
W2N1cnJlbnRUeXBlXSkgeworICAgICAgICAgICAgICAgICAgICBsZXQgd29yc3RUeXBlID0gY3Vy
cmVudFR5cGU7CisgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ1R5cGVzLmZvckVhY2godHlw
ZSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0W3R5cGVdW3Rlc3RdICE9
PSB1bmRlZmluZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yc3RUeXBlID0gdHlw
ZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh3b3Jz
dFR5cGUgPT0gY3VycmVudFR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3dvcnN0VHlwZV1bdGVzdF0gKz0gcmVzdWx0W2N1
cnJlbnRUeXBlXVt0ZXN0XTsKKyAgICAgICAgICAgICAgICAgICAgdG9SZW1vdmUucHVzaCh0ZXN0
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdG9SZW1vdmUuZm9yRWFjaCh0
ZXN0ID0+IHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlc3VsdFtjdXJyZW50VHlwZV1b
dGVzdF07CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmVzdWx0LmNvbmZpZ3VyYXRpb24gPSBDb25maWd1cmF0aW9uLmNvbWJpbmUoLi4uY29u
ZmlndXJhdGlvbnMpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGNvbnN0
cnVjdG9yKHN1aXRlLCBjb25maWd1cmF0aW9uID0gbnVsbCwganNvbiA9IG51bGwpIHsKKyAgICAg
ICAgdGhpcy5zdWl0ZSA9IHN1aXRlOworICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25m
aWd1cmF0aW9uID8gbmV3IENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbikgOiBuZXcgQ29uZmln
dXJhdGlvbigpOworCisgICAgICAgIEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXMuZm9yRWFjaCh0
eXBlID0+IHsKKyAgICAgICAgICAgIHRoaXNbdHlwZV0gPSB7fTsKKyAgICAgICAgfSk7CisgICAg
ICAgIGlmIChqc29uID09PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLmFnZ3JlZ2F0aW5nID0g
MDsKKyAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gTWF0aC5mbG9vcihEYXRlLm5vdygp
IC8gMTAwMCk7CisgICAgICAgICAgICB0aGlzLnN0YXJ0X3RpbWVfcmFuZ2UgPSBbY3VycmVudFRp
bWUsIDBdOworICAgICAgICAgICAgdGhpcy51dWlkX3JhbmdlID0gW2N1cnJlbnRUaW1lICogVElN
RVNUQU1QX1RPX1VVSURfTVVMVElQTElFUiwgMF07CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICB0aGlzLmFnZ3JlZ2F0aW5nID0gMTsKKyAgICAgICAgdGhpcy5zdGFy
dF90aW1lX3JhbmdlID0gW2pzb24uc3RhcnRfdGltZSwganNvbi5zdGFydF90aW1lXTsKKyAgICAg
ICAgdGhpcy51dWlkX3JhbmdlID0gW2pzb24udXVpZCwganNvbi51dWlkXTsKKyAgICAgICAgZm9y
ICh2YXIgcGFyYW1ldGVyIGluIGpzb24pIHsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIgPT09
ICd1dWlkJyB8fCBwYXJhbWV0ZXIgPT09ICdzdGFydF90aW1lJykKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBFeHBlY3RhdGlvbnMudHlwZUZvcklk
KGpzb25bcGFyYW1ldGVyXSk7CisgICAgICAgICAgICB0aGlzW3R5cGVdW3BhcmFtZXRlcl0gPSAx
OworICAgICAgICB9CisgICAgfQorICAgIHRvUGFyYW1zKCkgeworICAgICAgICBjb25zdCBwYXJh
bXMgPSB0aGlzLmNvbmZpZ3VyYXRpb24udG9QYXJhbXMoKTsKKyAgICAgICAgcGFyYW1zLnN1aXRl
ID0gW3RoaXMuc3VpdGVdOworICAgICAgICBpZiAodGhpcy51dWlkX3JhbmdlWzBdIDw9IHRoaXMu
dXVpZF9yYW5nZVsxXSkgeworICAgICAgICAgICAgaWYgKHRoaXMudXVpZF9yYW5nZVswXSA9PT0g
dGhpcy51dWlkX3JhbmdlWzFdKQorICAgICAgICAgICAgICAgIHBhcmFtcy51dWlkID0gW3RoaXMu
dXVpZF9yYW5nZVswXV07CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJh
bXMuYWZ0ZXJfdXVpZCA9IFt0aGlzLnV1aWRfcmFuZ2VbMF1dOworICAgICAgICAgICAgICAgIHBh
cmFtcy5iZWZvcmVfdXVpZCA9IFt0aGlzLnV1aWRfcmFuZ2VbMV1dOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnN0YXJ0X3RpbWVfcmFuZ2VbMF0gPD0gdGhpcy5z
dGFydF90aW1lX3JhbmdlWzFdKSB7CisgICAgICAgICAgICBwYXJhbXMuYWZ0ZXJfdGltZSA9IFt0
aGlzLnN0YXJ0X3RpbWVfcmFuZ2VbMF1dOworICAgICAgICAgICAgcGFyYW1zLmJlZm9yZV90aW1l
ID0gW3RoaXMuc3RhcnRfdGltZV9yYW5nZVsxXV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHBhcmFtczsKKyAgICB9Cit9OworCitleHBvcnQge0ZhaWx1cmVzfTsKSW5kZXg6IFRvb2xzL3Jl
c3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2ludmVzdGlnYXRlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2lu
dmVzdGlnYXRlLmpzCShyZXZpc2lvbiAyNjA0NDUpCisrKyBUb29scy9yZXN1bHRzZGJweS9yZXN1
bHRzZGJweS92aWV3L3N0YXRpYy9qcy9pbnZlc3RpZ2F0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MjQsMTIgKzI0LDEzIEBACiBpbXBvcnQge0FyY2hpdmVSb3V0ZXJ9IGZyb20gJy9hc3NldHMvanMv
YXJjaGl2ZVJvdXRlci5qcyc7CiBpbXBvcnQge0RPTSwgUkVGfSBmcm9tICcvbGlicmFyeS9qcy9S
ZWYuanMnOwogaW1wb3J0IHtDb21taXRCYW5rfSBmcm9tICcvYXNzZXRzL2pzL2NvbW1pdC5qcyc7
Ci1pbXBvcnQge3F1ZXJ5VG9QYXJhbXMsIHBhcmFtc1RvUXVlcnksIFF1ZXJ5TW9kaWZpZXIsIH0g
ZnJvbSAnL2Fzc2V0cy9qcy9jb21tb24uanMnOworaW1wb3J0IHtxdWVyeVRvUGFyYW1zLCBwYXJh
bXNUb1F1ZXJ5LCBRdWVyeU1vZGlmaWVyLCBwZXJjZW50YWdlLCBlbGFwc2VkVGltZX0gZnJvbSAn
L2Fzc2V0cy9qcy9jb21tb24uanMnOwogaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tICcvYXNz
ZXRzL2pzL2NvbmZpZ3VyYXRpb24uanMnCiBpbXBvcnQge0V4cGVjdGF0aW9uc30gZnJvbSAnL2Fz
c2V0cy9qcy9leHBlY3RhdGlvbnMuanMnOworaW1wb3J0IHtGYWlsdXJlc30gZnJvbSAnL2Fzc2V0
cy9qcy9mYWlsdXJlcy5qcyc7CiAKIGZ1bmN0aW9uIGNvbW1pdHNGb3JVdWlkKHV1aWQpIHsKLSAg
ICByZXR1cm4gYENvbW1pdHM6ICR7Q29tbWl0QmFuay5jb21taXRzRHVyaW5nVXVpZCh1dWlkKS5t
YXAoKGNvbW1pdCkgPT4geworICAgIHJldHVybiBgQ29tbWl0czogJHtDb21taXRCYW5rLmNvbW1p
dHNEdXJpbmcodXVpZCkubWFwKChjb21taXQpID0+IHsKICAgICAgICAgICAgIGNvbnN0IHBhcmFt
cyA9IHsKICAgICAgICAgICAgICAgICBicmFuY2g6IGNvbW1pdC5icmFuY2ggPyBbY29tbWl0LmJy
YW5jaF0gOiBicmFuY2gsCiAgICAgICAgICAgICAgICAgdXVpZDogW2NvbW1pdC51dWlkXSwKQEAg
LTcyLDMzICs3Myw2MCBAQCBmdW5jdGlvbiBlbGFwc2VkKGRhdGEpCiB7CiAgICAgaWYgKGRhdGEu
dGltZSkKICAgICAgICAgcmV0dXJuIGBUb29rICR7ZGF0YS50aW1lIC8gMTAwMH0gc2Vjb25kc2A7
Ci0gICAgaWYgKGRhdGEuc3RhdHMgJiYgZGF0YS5zdGF0cy5zdGFydF90aW1lICYmIGRhdGEuc3Rh
dHMuZW5kX3RpbWUpIHsKLSAgICAgICAgY29uc3QgdGltZSA9IG5ldyBEYXRlKChkYXRhLnN0YXRz
LmVuZF90aW1lIC0gZGF0YS5zdGF0cy5zdGFydF90aW1lKSAqIDEwMDApOwotICAgICAgICBsZXQg
cmVzdWx0ID0gJ1N1aXRlIHRvb2sgJzsKLSAgICAgICAgaWYgKHRpbWUuZ2V0TWludXRlcygpKQot
ICAgICAgICAgICAgcmVzdWx0ICs9IGAke3RpbWUuZ2V0TWludXRlcygpfTpgOwotICAgICAgICBy
ZXN1bHQgKz0gYCR7dGltZS5nZXRTZWNvbmRzKCkgPD0gOSAmJiB0aW1lLmdldE1pbnV0ZXMoKSA/
ICcwJyA6ICcnfSR7dGltZS5nZXRTZWNvbmRzKCl9LiR7dGltZS5nZXRNaWxsaXNlY29uZHMoKSA8
PSA5OSA/ICcwJyA6ICcnfSR7dGltZS5nZXRNaWxsaXNlY29uZHMoKSA8PSA5ID8gJzAnIDogJyd9
JHt0aW1lLmdldE1pbGxpc2Vjb25kcygpfSBgOwotICAgICAgICBpZiAodGltZS5nZXRNaW51dGVz
KCkpCi0gICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0ZXMgdG8gcnVuJzsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWNvbmRzIHRvIHJ1bic7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChkYXRhLnN0YXRzICYmIGRhdGEuc3RhdHMuc3RhcnRf
dGltZSAmJiBkYXRhLnN0YXRzLmVuZF90aW1lKQorICAgICAgICByZXR1cm4gYFN1aXRlIHRvb2sg
JHtlbGFwc2VkVGltZShkYXRhLnN0YXRzLnN0YXJ0X3RpbWUsIGRhdGEuc3RhdHMuZW5kX3RpbWUp
fWA7CiAgICAgcmV0dXJuICcnOwogfQogCi1mdW5jdGlvbiBwZXJjZW50YWdlKHZhbHVlLCBtYXgp
CitmdW5jdGlvbiBwcmlvcml0aXplZEZhaWx1cmVzKGZhaWx1cmVzLCBtYXggPSAwLCB3aWxsRmls
dGVyRXhwZWN0ZWQgPSBmYWxzZSkKIHsKLSAgICBpZiAodmFsdWUgPT09IG1heCkKLSAgICAgICAg
cmV0dXJuICcxMDAgJSc7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuICcwICUnOwot
ICAgIGNvbnN0IHJlc3VsdCA9IE1hdGgucm91bmQodmFsdWUgLyBtYXggKiAxMDApOwotICAgIGlm
ICghcmVzdWx0KQotICAgICAgICByZXR1cm4gJzwxICUnOwotICAgIGlmIChyZXN1bHQgPT09IDEw
MCkKLSAgICAgICAgcmV0dXJuICc5OSAlJzsKLSAgICByZXR1cm4gYCR7cmVzdWx0fSAlYAorICAg
IGlmIChmYWlsdXJlcyA9PT0gdW5kZWZpbmVkKQorICAgICAgICByZXR1cm4gJyc7CisKKyAgICBp
ZiAoZmFpbHVyZXMgPT09IG51bGwpCisgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0ibG9hZGVy
Ij4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGlubmVyIj48L2Rpdj4KKyAgICAgICAg
ICAgIDwvZGl2PmA7CisgICAgbGV0IGZhaWx1cmVzVG9EaXNwbGF5ID0gW107CisgICAgRXhwZWN0
YXRpb25zLmZhaWx1cmVUeXBlcy5mb3JFYWNoKHR5cGUgPT4geworICAgICAgICBmb3IgKGxldCB0
ZXN0TmFtZSBpbiBmYWlsdXJlc1t0eXBlXSkgeworICAgICAgICAgICAgZmFpbHVyZXNUb0Rpc3Bs
YXkucHVzaCh7CisgICAgICAgICAgICAgICAgZmFpbHVyZTogdHlwZSwKKyAgICAgICAgICAgICAg
ICB0ZXN0OiB0ZXN0TmFtZSwKKyAgICAgICAgICAgICAgICBjb3VudDogZmFpbHVyZXMuYWdncmVn
YXRpbmcsCisgICAgICAgICAgICAgICAgZmFpbHVyZUNvdW50OiBmYWlsdXJlc1t0eXBlXVt0ZXN0
TmFtZV0sCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0pOworICAgIGZhaWx1cmVz
VG9EaXNwbGF5LnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICBjb25zdCB0eXBlQ29tcGFy
ZSA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoRXhwZWN0YXRpb25zLmZhaWx1cmVUeXBl
TWFwW2EuZmFpbHVyZV0pIC0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChFeHBlY3RhdGlv
bnMuZmFpbHVyZVR5cGVNYXBbYi5mYWlsdXJlXSk7CisgICAgICAgIGlmICh0eXBlQ29tcGFyZSkK
KyAgICAgICAgICAgIHJldHVybiB0eXBlQ29tcGFyZTsKKyAgICAgICAgaWYgKGEuZmFpbHVyZUNv
dW50IC0gYi5mYWlsdXJlQ291bnQpCisgICAgICAgICAgICByZXR1cm4gYS5mYWlsdXJlQ291bnQg
LSBiLmZhaWx1cmVDb3VudDsKKyAgICAgICAgcmV0dXJuIChhLnRlc3QpLmxvY2FsZUNvbXBhcmUo
Yi50ZXN0KTsKKyAgICB9KTsKKworICAgIGlmIChtYXggJiYgZmFpbHVyZXNUb0Rpc3BsYXkubGVu
Z3RoID4gbWF4KSB7CisgICAgICAgIGZhaWx1cmVzVG9EaXNwbGF5ID0gZmFpbHVyZXNUb0Rpc3Bs
YXkuc3BsaWNlKDAsIG1heCk7CisgICAgICAgIGZhaWx1cmVzVG9EaXNwbGF5W21heCAtIDFdID0g
bnVsbDsKKyAgICB9CisKKworCisgICAgcmV0dXJuIGA8ZGl2PiR7ZmFpbHVyZXNUb0Rpc3BsYXku
bWFwKGZhaWx1cmUgPT4geworICAgICAgICBpZiAoZmFpbHVyZSA9PT0gbnVsbCkgeworICAgICAg
ICAgICAgY29uc3QgcGFyYW1zID0gZmFpbHVyZXMudG9QYXJhbXMoKTsKKyAgICAgICAgICAgIHBh
cmFtcy51bmV4cGVjdGVkID0gW3dpbGxGaWx0ZXJFeHBlY3RlZF07CisgICAgICAgICAgICByZXR1
cm4gYDxhIHN0eWxlPSJtYXJnaW4tbGVmdDogY2FsYyh2YXIoLS1tZWRpdW1TaXplKSArIDE2cHgp
IiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iL2ludmVzdGlnYXRlPyR7cGFyYW1zVG9RdWVyeShwYXJh
bXMpfSI+TW9yZS4uLjwvYT5gOworICAgICAgICB9CisgICAgICAgIHJldHVybiBgPGRpdj4KKyAg
ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb3QgJHtmYWlsdXJlLmZhaWx1cmV9IHNtYWxsIj4K
KyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0IiBzdHlsZT0iZm9udC13
ZWlnaHQ6IG5vcm1hbDttYXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcFtm
YWlsdXJlLmZhaWx1cmVdfTwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAg
ICAgICAgIDxhIGNsYXNzPSJ0ZXh0IGJsb2NrIiBzdHlsZT0id2lkdGg6IGNhbGMoMTAwJSAtIHZh
cigtLW1lZGl1bVNpemUpIC0gMTZweCk7IG92ZXJmbG93OiBoaWRkZW47IHdoaXRlLXNwYWNlOiBu
b3dyYXA7IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyIgaHJlZj0iLz9zdWl0ZT0ke2ZhaWx1cmVz
LnN1aXRlfSZ0ZXN0PSR7ZmFpbHVyZS50ZXN0fSI+JHtmYWlsdXJlLnRlc3R9PC9hPgorICAgICAg
ICAgICAgPC9kaXY+YDsKKyAgICB9KS5qb2luKCcnKX08L2Rpdj5gOwogfQogCiBmdW5jdGlvbiBy
ZXN1bHRzRm9yRGF0YShkYXRhLCB3aWxsRmlsdGVyRXhwZWN0ZWQgPSBmYWxzZSkKQEAgLTExMCwz
NCArMTM4LDMzIEBAIGZ1bmN0aW9uIHJlc3VsdHNGb3JEYXRhKGRhdGEsIHdpbGxGaWx0ZXIKICAg
ICAgICAgdGVzdHNSYW4gPSBkYXRhLnN0YXRzLnRlc3RzX3J1bjsKICAgICAgICAgdG90YWxUZXN0
cyA9IGRhdGEuc3RhdHMudGVzdHNfcnVuICsgKGRhdGEuc3RhdHMudGVzdHNfc2tpcHBlZCA/IGRh
dGEuc3RhdHMudGVzdHNfc2tpcHBlZCA6IDApOwogICAgIH0KLSAgICByZXN1bHQucHVzaChgUmFu
ICR7dGVzdHNSYW4udG9Mb2NhbGVTdHJpbmcoKX0gb2YgJHt0b3RhbFRlc3RzLnRvTG9jYWxlU3Ry
aW5nKCl9IHRlc3RzYCk7CisgICAgbGV0IGRvdHNEaXNwbGF5ZWQgPSAwOworICAgIHJlc3VsdC5w
dXNoKGA8ZGl2PlJhbiAke3Rlc3RzUmFuLnRvTG9jYWxlU3RyaW5nKCl9IG9mICR7dG90YWxUZXN0
cy50b0xvY2FsZVN0cmluZygpfSB0ZXN0c2ApOwogICAgIGlmIChkYXRhLmFjdHVhbCkgewogICAg
ICAgICBjb25zdCB0eXBlID0gRXhwZWN0YXRpb25zLnR5cGVGb3JJZChkYXRhLmFjdHVhbCk7Ci0g
ICAgICAgIHJlc3VsdC5wdXNoKGA8ZGl2PgotICAgICAgICAgICAgICAgIEFjdHVhbDogJHtkYXRh
LmFjdHVhbH0KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb3QgJHt0eXBlfSBzbWFsbCI+
Ci0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbnkgdGV4dCIgc3R5bGU9ImZvbnQt
d2VpZ2h0OiBub3JtYWw7bWFyZ2luLXRvcDogMHB4Ij4ke0V4cGVjdGF0aW9ucy5zeW1ib2xNYXBb
dHlwZV19PC9kaXY+Ci0gICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICsrZG90c0Rpc3Bs
YXllZDsKKyAgICAgICAgcmVzdWx0LnB1c2goYEFjdHVhbDogJHtkYXRhLmFjdHVhbH0KKyAgICAg
ICAgICAgIDxkaXYgY2xhc3M9ImRvdCAke3R5cGV9IHNtYWxsIj4KKyAgICAgICAgICAgICAgICA8
ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsO21hcmdpbi10
b3A6IDBweCI+JHtFeHBlY3RhdGlvbnMuc3ltYm9sTWFwW3R5cGVdfTwvZGl2PgogICAgICAgICAg
ICAgPC9kaXY+YCk7CiAgICAgfQogICAgIGlmIChkYXRhLmV4cGVjdGVkKSB7CiAgICAgICAgIGNv
bnN0IHR5cGUgPSBFeHBlY3RhdGlvbnMudHlwZUZvcklkKGRhdGEuZXhwZWN0ZWQpOwotICAgICAg
ICByZXN1bHQucHVzaChgPGRpdj4KLSAgICAgICAgICAgICAgICBFeHBlY3RlZDogJHtkYXRhLmV4
cGVjdGVkfQotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvdCAke3R5cGV9IHNtYWxsIj4K
LSAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0IiBzdHlsZT0iZm9udC13
ZWlnaHQ6IG5vcm1hbDttYXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcFt0
eXBlXX08L2Rpdj4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgKytkb3RzRGlzcGxh
eWVkOworICAgICAgICByZXN1bHQucHVzaChgRXhwZWN0ZWQ6ICR7ZGF0YS5leHBlY3RlZH0KKyAg
ICAgICAgICAgIDxkaXYgY2xhc3M9ImRvdCAke3R5cGV9IHNtYWxsIj4KKyAgICAgICAgICAgICAg
ICA8ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsO21hcmdp
bi10b3A6IDBweCI+JHtFeHBlY3RhdGlvbnMuc3ltYm9sTWFwW3R5cGVdfTwvZGl2PgogICAgICAg
ICAgICAgPC9kaXY+YCk7CiAgICAgfQogICAgIGlmIChkYXRhLnN0YXRzICYmIGRhdGEuc3RhdHMu
dGVzdHNfcnVuKSB7CiAgICAgICAgIGNvbnN0IHN1Y2NlZWRlZCA9IGRhdGEuc3RhdHMudGVzdHNf
cnVuIC0gZGF0YS5zdGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJFeHBlY3RlZCA/ICdfdW5leHBlY3Rl
ZF8nIDogJ18nfWZhaWxlZGBdOwotICAgICAgICBpZiAoc3VjY2VlZGVkKQotICAgICAgICAgICAg
cmVzdWx0LnB1c2goYDxkaXY+Ci0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvdCBz
dWNjZXNzIHNtYWxsIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbnkg
dGV4dCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7bWFyZ2luLXRvcDogMHB4Ij4ke0V4cGVj
dGF0aW9ucy5zeW1ib2xNYXAuc3VjY2Vzc308L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgPC9k
aXY+Ci0gICAgICAgICAgICAgICAgICAgICR7ZGF0YS5zdGFydF90aW1lID8gc3VjY2VlZGVkLnRv
TG9jYWxlU3RyaW5nKCkgOiBwZXJjZW50YWdlKHN1Y2NlZWRlZCwgZGF0YS5zdGF0cy50ZXN0c19y
dW4pfSBwYXNzZWQKLSAgICAgICAgICAgICAgICA8L2Rpdj5gKTsKKyAgICAgICAgaWYgKHN1Y2Nl
ZWRlZCkgeworICAgICAgICAgICAgKytkb3RzRGlzcGxheWVkOworICAgICAgICAgICAgcmVzdWx0
LnB1c2goYDxkaXYgY2xhc3M9ImRvdCBzdWNjZXNzIHNtYWxsIj4KKyAgICAgICAgICAgICAgICAg
ICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDttYXJn
aW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcC5zdWNjZXNzfTwvZGl2PgorICAg
ICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICR7ZGF0YS5zdGFydF90aW1lID8g
c3VjY2VlZGVkLnRvTG9jYWxlU3RyaW5nKCkgOiBwZXJjZW50YWdlKHN1Y2NlZWRlZCwgZGF0YS5z
dGF0cy50ZXN0c19ydW4pfSBwYXNzZWRgKTsKKyAgICAgICAgfQogICAgIH0KICAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXMubGVuZ3RoOyBpKyspIHsKICAg
ICAgICAgaWYgKCFkYXRhLnN0YXRzKQpAQCAtMTQ4LDEzICsxNzUsMTQgQEAgZnVuY3Rpb24gcmVz
dWx0c0ZvckRhdGEoZGF0YSwgd2lsbEZpbHRlcgogICAgICAgICAgICAgdmFsdWUgLT0gZGF0YS5z
dGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJFeHBlY3RlZCA/ICdfdW5leHBlY3RlZF8nIDogJ18nfSR7
RXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlc1tpICsgMV19YF07CiAgICAgICAgIGlmICghdmFsdWUp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVzdWx0LnB1c2goYDxkaXY+Ci0gICAg
ICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG90ICR7dHlwZX0gc21hbGwiPgotICAgICAgICAgICAg
ICAgICAgICA8ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFs
O21hcmdpbi10b3A6IDBweCI+JHtFeHBlY3RhdGlvbnMuc3ltYm9sTWFwW3R5cGVdfTwvZGl2Pgot
ICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICR7ZGF0YS5zdGFydF90aW1l
ID8gdmFsdWUudG9Mb2NhbGVTdHJpbmcoKSA6IHBlcmNlbnRhZ2UodmFsdWUsIGRhdGEuc3RhdHMu
dGVzdHNfcnVuKX0gJHt0eXBlfQotICAgICAgICAgICAgPC9kaXY+YCk7CisgICAgICAgICsrZG90
c0Rpc3BsYXllZDsKKyAgICAgICAgcmVzdWx0LnB1c2goYDxkaXYgY2xhc3M9ImRvdCAke3R5cGV9
IHNtYWxsIj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxlPSJm
b250LXdlaWdodDogbm9ybWFsO21hcmdpbi10b3A6IDBweCI+JHtFeHBlY3RhdGlvbnMuc3ltYm9s
TWFwW3R5cGVdfTwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAke2RhdGEu
c3RhcnRfdGltZSA/IHZhbHVlLnRvTG9jYWxlU3RyaW5nKCkgOiBwZXJjZW50YWdlKHZhbHVlLCBk
YXRhLnN0YXRzLnRlc3RzX3J1bil9ICR7dHlwZX1gKTsKICAgICB9CisgICAgcmVzdWx0LnB1c2go
JzwvZGl2PicpOworICAgIHJlc3VsdC5wdXNoKHByaW9yaXRpemVkRmFpbHVyZXMoZGF0YS5mYWls
dXJlcywgTWF0aC5tYXgoNiAtIGRvdHNEaXNwbGF5ZWQsIDEpLCB3aWxsRmlsdGVyRXhwZWN0ZWQp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMDAsOCArMzI4LDUwIEBAIGNsYXNzIF9J
bnZlc3RpZ2F0ZURyYXdlciB7CiAgICAgICAgIHRoaXMuc3VpdGUgPSBzdWl0ZTsKICAgICAgICAg
dGhpcy5hZ3JlZ2F0ZSA9IGFncmVnYXRlRGF0YTsKICAgICAgICAgdGhpcy5kYXRhID0gYWxsRGF0
YTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaCgpOwogICAgICAgICB0aGlzLnNlbGVjdCgwKTsKICAg
ICB9CisgICAgZGlzcGF0Y2goKSB7CisgICAgICAgIGlmICghdGhpcy5kYXRhLmxlbmd0aCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5kYXRhW2ldLnN0YXRzKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuZGF0YS5mb3JF
YWNoKGRhdHVtID0+IHsKKyAgICAgICAgICAgIGRhdHVtLmZhaWx1cmVzID0gbnVsbDsKKyAgICAg
ICAgfSk7CisgICAgICAgIHRoaXMuYWdyZWdhdGUuZmFpbHVyZXMgPSBudWxsOworCisgICAgICAg
IGNvbnN0IGJyYW5jaCA9IHF1ZXJ5VG9QYXJhbXMoZG9jdW1lbnQuVVJMLnNwbGl0KCc/JylbMV0p
LmJyYW5jaDsKKyAgICAgICAgY29uc3QgcGFyYW1zID0geworICAgICAgICAgICAgdW5leHBlY3Rl
ZDogW3RoaXMud2lsbEZpbHRlckV4cGVjdGVkXSwKKyAgICAgICAgICAgIHV1aWQ6IFt0aGlzLmFn
cmVnYXRlLnV1aWRdLAorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmFncmVnYXRlLnN0YXJ0
X3RpbWUpIHsKKyAgICAgICAgICAgIHBhcmFtcy5iZWZvcmVfdGltZSA9IFt0aGlzLmFncmVnYXRl
LnN0YXJ0X3RpbWVdOworICAgICAgICAgICAgcGFyYW1zLmFmdGVyX3RpbWUgPSBbdGhpcy5hZ3Jl
Z2F0ZS5zdGFydF90aW1lXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYnJhbmNoKQorICAgICAg
ICAgICAgcGFyYW1zLmJyYW5jaCA9IFticmFuY2hdOworCisgICAgICAgIEZhaWx1cmVzLmZyb21F
bmRwb2ludCgKKyAgICAgICAgICAgIHRoaXMuc3VpdGUsCisgICAgICAgICAgICB0aGlzLmFncmVn
YXRlLmNvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICBwYXJhbXMsCisgICAgICAgICkudGhlbihm
YWlsdXJlcyA9PiB7CisgICAgICAgICAgICB0aGlzLmFncmVnYXRlLmZhaWx1cmVzID0gRmFpbHVy
ZXMuY29tYmluZSguLi5mYWlsdXJlcyk7CisgICAgICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaChk
YXR1bSA9PiB7CisgICAgICAgICAgICAgICAgZGF0dW0uZmFpbHVyZXMgPSBuZXcgRmFpbHVyZXMo
dGhpcy5zdWl0ZSwgZGF0dW0uY29uZmlndXJhdGlvbik7CisgICAgICAgICAgICAgICAgZmFpbHVy
ZXMuZm9yRWFjaChmYWlsdXJlID0+IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRhdHVtLmNv
bmZpZ3VyYXRpb24uY29tcGFyZShmYWlsdXJlLmNvbmZpZ3VyYXRpb24pID09PSAwKQorICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0dW0uZmFpbHVyZXMgPSBGYWlsdXJlcy5jb21iaW5lKGRhdHVt
LmZhaWx1cmVzLCBmYWlsdXJlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgdGhpcy5zZWxlY3QodGhpcy5zZWxlY3RlZCk7CisgICAgICAgIH0pOwor
ICAgIH0KICAgICBjb2xsYXBzZSgpIHsKICAgICAgICAgaWYgKCF0aGlzLmlzUmVuZGVyZWQoKSkK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTMxMiw2ICszODIsOSBAQCBjbGFzcyBfSW52ZXN0aWdh
dGVEcmF3ZXIgewogICAgICAgICB0aGlzLnNlbGVjdCgwKTsKICAgICB9CiAgICAgc2VsZWN0KGlu
ZGV4KSB7CisgICAgICAgIGlmICghdGhpcy5yZWYpCisgICAgICAgICAgICByZXR1cm47CisKICAg
ICAgICAgbGV0IGNhbmRpZGF0ZXMgPSB0aGlzLmRhdGEubGVuZ3RoOwogICAgICAgICBpZiAodGhp
cy5hZ3JlZ2F0ZSAmJiB0aGlzLmRhdGEubGVuZ3RoID4gMSkKICAgICAgICAgICAgIGNhbmRpZGF0
ZXMgKz0gMTsKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGlj
L2pzL3RpbWVsaW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNk
YnB5L3ZpZXcvc3RhdGljL2pzL3RpbWVsaW5lLmpzCShyZXZpc2lvbiAyNjA0NDUpCisrKyBUb29s
cy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qcwkod29y
a2luZyBjb3B5KQpAQCAtNjQ1LDcgKzY0NSw3IEBAIGNsYXNzIFRpbWVsaW5lRnJvbUVuZHBvaW50
IHsKICAgICAgICAgICAgICAgICAgICAgYDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICAgICAg
ICAgICAgICAgICAgICAgJHtkYXRhLnN0YXJ0X3RpbWUgPyBgPGEgaHJlZj0iL3VybHMvYnVpbGQ/
JHtwYXJhbXNUb1F1ZXJ5KGJ1aWxkUGFyYW1zKX0iIHRhcmdldD0iX2JsYW5rIj5UZXN0IHJ1bjwv
YT4gQCAke25ldyBEYXRlKGRhdGEuc3RhcnRfdGltZSAqIDEwMDApLnRvTG9jYWxlU3RyaW5nKCl9
PGJyPmAgOiAnJ30KICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YS5zdGFydF90aW1lICYm
IEFyY2hpdmVSb3V0ZXIuaGFzQXJjaGl2ZShzZWxmLnN1aXRlLCBkYXRhLmFjdHVhbCkgPyBgPGEg
aHJlZj0iL2FyY2hpdmUvJHtBcmNoaXZlUm91dGVyLnBhdGhGb3Ioc2VsZi5zdWl0ZSwgZGF0YS5h
Y3R1YWwsIHNlbGYudGVzdCl9PyR7cGFyYW1zVG9RdWVyeShidWlsZFBhcmFtcyl9IiB0YXJnZXQ9
Il9ibGFuayI+JHtBcmNoaXZlUm91dGVyLmxhYmVsRm9yKHNlbGYuc3VpdGUsIGRhdGEuYWN0dWFs
KX08L2E+PGJyPmAgOiAnJ30KLSAgICAgICAgICAgICAgICAgICAgICAgIENvbW1pdHM6ICR7Q29t
bWl0QmFuay5jb21taXRzRHVyaW5nVXVpZChkYXRhLnV1aWQpLm1hcCgoY29tbWl0KSA9PiB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBDb21taXRzOiAke0NvbW1pdEJhbmsuY29tbWl0c0R1cmlu
ZyhkYXRhLnV1aWQpLm1hcCgoY29tbWl0KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGV0IHBhcmFtcyA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNo
OiBjb21taXQuYnJhbmNoID8gW2NvbW1pdC5icmFuY2hdIDogYnJhbmNoLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1dWlkOiBbY29tbWl0LnV1aWRdLApAQCAtNjU4LDcgKzY1OCw3
IEBAIGNsYXNzIFRpbWVsaW5lRnJvbUVuZHBvaW50IHsKICAgICAgICAgICAgICAgICAgICAgICAg
IDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydGlhbENvbmZpZ3VyYXRpb259CiAg
ICAgICAgICAgICAgICAgICAgICAgICA8YnI+Ci0KKyAgICAgICAgICAgICAgICAgICAgICAgICR7
ZGF0YS5zdGF0cyA/IGA8YSBocmVmPSIvaW52ZXN0aWdhdGU/JHtwYXJhbXNUb1F1ZXJ5KGJ1aWxk
UGFyYW1zKX0iIHRhcmdldD0iX2JsYW5rIj5JbnZlc3RpZ2F0ZSBmYWlsdXJlczwvYT48YnI+YCA6
ICcnfQogICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhLmV4cGVjdGVkID8gYEV4cGVjdGVk
OiAke2RhdGEuZXhwZWN0ZWR9PGJyPmAgOiAnJ30KICAgICAgICAgICAgICAgICAgICAgICAgICR7
ZGF0YS5hY3R1YWwgPyBgQWN0dWFsOiAke2RhdGEuYWN0dWFsfTxicj5gIDogJyd9CiAgICAgICAg
ICAgICAgICAgICAgIDwvZGl2PmAsCkBAIC04OTQsOCArODk0LDkgQEAgZnVuY3Rpb24gTGVnZW5k
KGNhbGxiYWNrPW51bGwsIHBsdXJhbD1mYQogICAgICAgICAgICAgICAgICAgICAgICAgd2lsbEZp
bHRlckV4cGVjdGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUxhYmVsRXZl
bnRzLmFkZCh3aWxsRmlsdGVyRXhwZWN0ZWQpOwogICAgICAgICAgICAgICAgICAgICBJbnZlc3Rp
Z2F0ZURyYXdlci53aWxsRmlsdGVyRXhwZWN0ZWQgPSB3aWxsRmlsdGVyRXhwZWN0ZWQ7CisgICAg
ICAgICAgICAgICAgICAgIEludmVzdGlnYXRlRHJhd2VyLmRpc3BhdGNoKCk7CiAgICAgICAgICAg
ICAgICAgICAgIEludmVzdGlnYXRlRHJhd2VyLnNlbGVjdChJbnZlc3RpZ2F0ZURyYXdlci5zZWxl
Y3RlZCk7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAg
ICAgIGNhbGxiYWNrKHdpbGxGaWx0ZXJFeHBlY3RlZCk7CiAgICAgICAgICAgICAgICAgfTsKICAg
ICAgICAgICAgIH0sCiAgICAgICAgIH0pOwpJbmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0
c2RicHkvdmlldy90ZW1wbGF0ZXMvaW52ZXN0aWdhdGUuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9pbnZlc3RpZ2F0ZS5odG1s
CShub25leGlzdGVudCkKKysrIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVt
cGxhdGVzL2ludmVzdGlnYXRlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MDggQEAK
KzwhLS0KKyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorCisgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgYXJlIG1ldDoKKyAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuICJBUyBJUyIgQU5EIEFOWQorIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorLS0+
CisKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGJsb2NrIGhlYWQgJX0KKzxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImFzc2V0cy9jc3MvdGltZWxpbmUu
Y3NzIj4KKworPHNjcmlwdCB0eXBlPSJtb2R1bGUiPgoraW1wb3J0IHtBcmNoaXZlUm91dGVyfSBm
cm9tICcvYXNzZXRzL2pzL2FyY2hpdmVSb3V0ZXIuanMnOworaW1wb3J0IHtDb21taXRCYW5rfSBm
cm9tICcvYXNzZXRzL2pzL2NvbW1pdC5qcyc7CitpbXBvcnQge0Vycm9yRGlzcGxheSwgUXVlcnlN
b2RpZmllciwgcGFyYW1zVG9RdWVyeSwgcXVlcnlUb1BhcmFtcywgcGVyY2VudGFnZSwgZWxhcHNl
ZFRpbWV9IGZyb20gJy9hc3NldHMvanMvY29tbW9uLmpzJzsKK2ltcG9ydCB7Q29uZmlndXJhdGlv
bn0gZnJvbSAnL2Fzc2V0cy9qcy9jb25maWd1cmF0aW9uLmpzJzsKK2ltcG9ydCB7RXhwZWN0YXRp
b25zfSBmcm9tICcvYXNzZXRzL2pzL2V4cGVjdGF0aW9ucy5qcyc7CitpbXBvcnQge0RyYXdlciwg
QnJhbmNoU2VsZWN0b3IsIENvbmZpZ3VyYXRpb25TZWxlY3RvcnN9IGZyb20gJy9hc3NldHMvanMv
ZHJhd2VyLmpzJzsKK2ltcG9ydCB7TGVnZW5kfSBmcm9tICcvYXNzZXRzL2pzL3RpbWVsaW5lLmpz
JzsKK2ltcG9ydCB7VG9vbFRpcH0gZnJvbSAnL2Fzc2V0cy9qcy90b29sdGlwLmpzJzsKK2ltcG9y
dCB7RmFpbHVyZXN9IGZyb20gJy9hc3NldHMvanMvZmFpbHVyZXMuanMnOworaW1wb3J0IHtET00s
IFJFRiwgRXZlbnRTdHJlYW19IGZyb20gJy9saWJyYXJ5L2pzL1JlZi5qcyc7CisKK2NvbnN0IERF
RkFVTFRfTElNSVQgPSAxMDA7Citjb25zdCBTVUlURVMgPSBKU09OLnBhcnNlKCd7eyBzdWl0ZXN8
c2FmZSB9fScpOworCitjb25zdCB2aWV3cyA9IFtdOworbGV0IGFncmVnYXRlQ29ubmZpZ3VyYXRp
b24gPSBDb25maWd1cmF0aW9uLmZyb21RdWVyeSgpOworbGV0IHJhbmdlUGFyYW1zID0ge307CisK
K2NvbnN0IHVuZXhwZWN0ZWRRdWVyeSA9IG5ldyBRdWVyeU1vZGlmaWVyKCd1bmV4cGVjdGVkJyk7
CitmdW5jdGlvbiB3aWxsRmlsdGVyRXhwZWN0ZWQoKSB7CisgICAgY29uc3QgY3VycmVudCA9IHVu
ZXhwZWN0ZWRRdWVyeS5jdXJyZW50KCk7CisgICAgaWYgKCFjdXJyZW50Lmxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgaWYgKFsndHJ1ZScsICdUUlVFJywgJ3llcycsICdZRVMnLCAn
MSddLmluY2x1ZGVzKGN1cnJlbnRbY3VycmVudC5sZW5ndGggLSAxXSkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworCitjbGFzcyBTdWl0ZUZhaWx1cmVzVmll
dyB7CisgICAgY29uc3RydWN0b3Ioc3VpdGUpIHsKKyAgICAgICAgdGhpcy5zdWl0ZSA9IHN1aXRl
OworICAgICAgICB0aGlzLmRhdGFGb3JDb25maWcgPSB7fTsKKworICAgICAgICB0aGlzLnJlZiA9
IFJFRi5jcmVhdGVSZWYoeworICAgICAgICAgICAgc3RhdGU6IHtkaXNwbGF5ZWQ6IHRydWV9LAor
ICAgICAgICAgICAgb25TdGF0ZVVwZGF0ZTogKGVsZW1lbnQsIGRpZmYsIHN0YXRlKSA9PiB7Cisg
ICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gZGlmZi5kaXNwbGF5ZWQgPyBu
dWxsIDogJ25vbmUnOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5z
ZWxlY3RDb25maWd1cmF0aW9ucyA9IFJFRi5jcmVhdGVSZWYoeworICAgICAgICAgICAgb25FbGVt
ZW50TW91bnQ6IChlbGVtZW50KSA9PiB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnRF
bGVtZW50LnBhcmVudEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgICAg
ICAgICBlbGVtZW50Lm9uY2hhbmdlID0gKCkgPT4geworICAgICAgICAgICAgICAgICAgICB0aGlz
LnNlbGVjdGVkID0gcGFyc2VJbnQoZWxlbWVudC52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuc2VsZWN0KHRoaXMuc2VsZWN0ZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICBvblN0YXRlVXBkYXRlOiAoZWxlbWVudCwgc3RhdGUpID0+IHsK
KyAgICAgICAgICAgICAgICBpZiAoIXN0YXRlIHx8IHN0YXRlLmxlbmd0aCA8PSAxKSB7CisgICAg
ICAgICAgICAgICAgICAgIGVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnN0eWxl
LmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50
RWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gbnVsbDsKKyAgICAgICAgICAgICAgICBjb25zdCBjb25m
aWd1cmF0aW9ucyA9IFsuLi5zdGF0ZV07CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMu
c29ydCgoYSwgYikgPT4geworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS50b0tleSgpLmxv
Y2FsZUNvbXBhcmUoYi50b0tleSgpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICBjb25maWd1cmF0aW9ucy51bnNoaWZ0KENvbmZpZ3VyYXRpb24uY29tYmluZSguLi5zdGF0
ZSkpOworCisgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICBl
bGVtZW50LmlubmVySFRNTCA9IGNvbmZpZ3VyYXRpb25zLm1hcChjb25maWd1cmF0aW9uID0+IHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8b3B0aW9uIHZhbHVlPSIke2luZGV4fSIke2lu
ZGV4ID09IHRoaXMuc2VsZWN0ZWQgPyAnIHNlbGVjdGVkJyA6ICcnfT4ke2NvbmZpZ3VyYXRpb259
JHtpbmRleCsrID8gJycgOiAnIChBZ3JlZ2F0ZWQpJ308L29wdGlvbj5gOworICAgICAgICAgICAg
ICAgIH0pLmpvaW4oJycpOworICAgICAgICAgICAgfSwKKyAgICAgICAgfSk7CisKKyAgICAgICAg
dGhpcy5yZXN1bHRWaWV3ID0gUkVGLmNyZWF0ZVJlZih7CisgICAgICAgICAgICBzdGF0ZToge2Nv
bmZpZ3VyYXRpb246IG51bGwsIHJlc3VsdHM6IFtdLCBmYWlsdXJlczogW119LAorICAgICAgICAg
ICAgb25TdGF0ZVVwZGF0ZTogKGVsZW1lbnQsIGRpZmYsIHN0YXRlKSA9PiB7CisgICAgICAgICAg
ICAgICAgaWYgKCFkaWZmLmNvbmZpZ3VyYXRpb24gfHwgIWRpZmYucmVzdWx0cyB8fCAhZGlmZi5m
YWlsdXJlcykgeworICAgICAgICAgICAgICAgICAgICBET00uaW5qZWN0KGVsZW1lbnQsICc8ZGl2
IGNsYXNzPSJsb2FkZXIiPjxkaXYgY2xhc3M9InNwaW5uZXIiPjwvZGl2PjwvZGl2PicpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgY29uc3QgYWdyZWdhdGVkU3RhdHMgPSB7CisgICAgICAgICAgICAgICAgICAgIHRlc3Rz
X3J1bjogZGlmZi5yZXN1bHRzLm1hcChyZXN1bHQgPT4gcmVzdWx0LnN0YXRzLnRlc3RzX3J1biku
cmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCksCisgICAgICAgICAgICAgICAgICAgIHRlc3RzX3Nr
aXBwZWQ6IGRpZmYucmVzdWx0cy5tYXAocmVzdWx0ID0+IHJlc3VsdC5zdGF0cy50ZXN0c19za2lw
cGVkKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSwKKyAgICAgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICAgICAgbGV0IGxhc3RWYWx1ZSA9IDA7CisgICAgICAgICAgICAgICAgY29uc3Qg
d2lsbEZpbHRlckV4cGVjdGVkVmFsdWUgPSB3aWxsRmlsdGVyRXhwZWN0ZWQoKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKGxldCBpID0gRXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlcy5sZW5ndGggLSAx
OyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHdpbGxGaWx0
ZXJFeHBlY3RlZFZhbHVlID8gYHRlc3RzX3VuZXhwZWN0ZWRfJHtFeHBlY3RhdGlvbnMuZmFpbHVy
ZVR5cGVzW2ldfWAgOiBgdGVzdHNfJHtFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVzW2ldfWA7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbWJpbmVkID0gZGlmZi5yZXN1bHRzLm1hcChyZXN1
bHQgPT4gcmVzdWx0LnN0YXRzW2tleV0gPyByZXN1bHQuc3RhdHNba2V5XSA6IDApLnJlZHVjZSgo
YSwgYikgPT4gYSArIGIsIDApOworICAgICAgICAgICAgICAgICAgICBhZ3JlZ2F0ZWRTdGF0c1tg
dGVzdHNfJHtFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVzW2ldfWBdID0gTWF0aC5tYXgoY29tYmlu
ZWQgLSBsYXN0VmFsdWUsIDApOworICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBjb21i
aW5lZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWdyZWdhdGVkU3RhdHMu
dGVzdHNfc3VjY2VzcyA9IE1hdGgubWF4KGFncmVnYXRlZFN0YXRzLnRlc3RzX3J1biAtIGxhc3RW
YWx1ZSwgMCk7CisKKyAgICAgICAgICAgICAgICBET00uaW5qZWN0KGVsZW1lbnQsIGA8ZGl2IGNs
YXNzPSJyb3ciPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXMtJHtk
aWZmLnJlc3VsdHMubGVuZ3RoID09PSAxID8gJzEyJyA6ICc2J30gbGlzdCI+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbSI+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDxiPkNvbmZpZ3VyYXRpb248L2I+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQgYmxvY2siIHN0eWxlPSJ3aWR0aDogMTAwJTsgb3Zl
cmZsb3c6IGhpZGRlbjsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgdGV4dC1vdmVyZmxvdzogZWxsaXBz
aXM7Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGlmZi5jb25maWd1
cmF0aW9ufQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
ZGl2IGNsYXNzPSJpdGVtIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+Q29t
cG9zaXRpb248L2I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmlzZWQgb2YgJHtkaWZmLnJlc3Vs
dHMubGVuZ3RofSBydW4ke2RpZmYucmVzdWx0cy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ30gdXNp
bmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7KCgpID0+IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWluVXVpZCA9IE1hdGgucm91
bmQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGV0IG1heFV1aWQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRpZmYucmVzdWx0cy5mb3JFYWNoKHJlc3VsdCA9PiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblV1aWQgPSBNYXRoLm1pbiht
aW5VdWlkLCByZXN1bHQudXVpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1heFV1aWQgPSBNYXRoLm1heChtYXhVdWlkLCByZXN1bHQudXVpZCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pblV1aWQgPiBtYXhVdWlkKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2ludmFsaWQgY29tbWl0
IHJhbmdlJzsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNvbW1pdHMgPSBDb21taXRCYW5rLmNvbW1pdHNEdXJpbmcobWluVXVpZCwgbWF4VXVpZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21taXRzLmxlbmd0
aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd1
bmtub3duIGNvbW1pdHMnOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgYnJhbmNoZXMgPSBuZXcgU2V0KGNvbW1pdHMubWFwKGNvbW1pdCA9PiBjb21taXQu
YnJhbmNoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNo
ZXMuZGVsZXRlKCd0cnVuaycpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyYW5jaGVzLmRlbGV0ZSgnbWFzdGVyJyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCByZXBvc2l0b3JpZXMgPSBuZXcgU2V0KGNvbW1pdHMubWFw
KGNvbW1pdCA9PiBjb21taXQucmVwb3NpdG9yeV9pZCkpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tbWl0UGFyYW1zID0ge307CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyYW5jaGVzLnNpemUpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdFBhcmFtc1snYnJhbmNo
J10gPSBbLi4uYnJhbmNoZXNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbW1pdFBhcmFtcy5hZnRlcl91dWlkID0gW21pblV1aWRdOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdFBhcmFtcy5iZWZvcmVfdXVpZCA9IFttYXhV
dWlkXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBg
PGEgaHJlZj0iL2NvbW1pdHM/JHtwYXJhbXNUb1F1ZXJ5KGNvbW1pdFBhcmFtcyl9Ij4keworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRzLmxlbmd0aCA9
PSByZXBvc2l0b3JpZXMuc2l6ZSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb21taXRzLnJldmVyc2UoKS5tYXAoY29tbWl0ID0+IGNvbW1pdC5pZC5z
dWJzdHJpbmcoMCwxMikpLmpvaW4oJywgJykgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYCR7Y29tbWl0cy5sZW5ndGh9IGNvbW1pdHNgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTwvYT5gOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSkoKX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbSI+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDxiPlJlc3VsdHM8L2I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYW4gJHthZ3Jl
Z2F0ZWRTdGF0cy50ZXN0c19ydW59IG9mICR7YWdyZWdhdGVkU3RhdHMudGVzdHNfc2tpcHBlZCAr
IGFncmVnYXRlZFN0YXRzLnRlc3RzX3J1bn0gdGVzdHMKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICgke3BlcmNlbnRhZ2UoYWdyZWdhdGVkU3RhdHMudGVzdHNfcnVuLCBhZ3Jl
Z2F0ZWRTdGF0cy50ZXN0c19za2lwcGVkICsgYWdyZWdhdGVkU3RhdHMudGVzdHNfcnVuKX0pCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAke09iamVjdC5rZXlzKEV4cGVjdGF0aW9ucy5jb2xvck1hcCgp
KS5tYXAodHlwZSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFhZ3JlZ2F0ZWRTdGF0c1tgdGVzdHNfJHt0eXBlfWBdKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJkb3QgJHt0eXBlfSBzbWFs
bCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2
IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsO21hcmdpbi10b3A6
IDBweCI+JHtFeHBlY3RhdGlvbnMuc3ltYm9sTWFwW3R5cGVdfTwvZGl2PgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gJHtkaWZmLnJlc3VsdHMubGVu
Z3RoID09PSAxID8gYWdyZWdhdGVkU3RhdHNbYHRlc3RzXyR7dHlwZX1gXSA6IHBlcmNlbnRhZ2Uo
YWdyZWdhdGVkU3RhdHNbYHRlc3RzXyR7dHlwZX1gXSwgYWdyZWdhdGVkU3RhdHMudGVzdHNfcnVu
KX0gJHt0eXBlID09PSAnc3VjY2VzcycgPyAncGFzc2VkJyA6IHR5cGV9PGJyPmA7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCcnKX0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9k
aXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkaWZmLnJlc3VsdHMubGVuZ3RoID09
PSAxID8gYDxkaXYgY2xhc3M9Iml0ZW0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8Yj5UZXN0IFJ1bjwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGlmZi5yZXN1bHRzWzBdLnN0
YXJ0X3RpbWUgPyAoKCkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGJyYW5jaCA9IHF1ZXJ5VG9QYXJhbXMoZG9jdW1lbnQuVVJMLnNwbGl0KCc/Jylb
MV0pLmJyYW5jaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBidWlsZFBhcmFtcyA9IGRpZmYuY29uZmlndXJhdGlvbi50b1BhcmFtcygpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1zWydzdWl0ZSddID0gW3Ro
aXMuc3VpdGVdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxk
UGFyYW1zWyd1dWlkJ10gPSBbZGlmZi5yZXN1bHRzWzBdLnV1aWRdOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1zWydhZnRlcl90aW1lJ10gPSBbZGlm
Zi5yZXN1bHRzWzBdLnN0YXJ0X3RpbWVdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJ1aWxkUGFyYW1zWydiZWZvcmVfdGltZSddID0gW2RpZmYucmVzdWx0c1swXS5z
dGFydF90aW1lXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
YnJhbmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWls
ZFBhcmFtc1snYnJhbmNoJ10gPSBicmFuY2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBwYXJhbXNUb1F1ZXJ5KGJ1aWxkUGFyYW1zKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYDxhIGhy
ZWY9Ii91cmxzL2J1aWxkPyR7cXVlcnl9IiB0YXJnZXQ9Il9ibGFuayI+VGVzdCBydW48L2E+IEAg
JHtuZXcgRGF0ZShkaWZmLnJlc3VsdHNbMF0uc3RhcnRfdGltZSAqIDEwMDApLnRvTG9jYWxlU3Ry
aW5nKCl9PGJyPmA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFBcmNoaXZlUm91dGVyLmhhc0FyY2hpdmUoc3VpdGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgPGEgaHJlZj0iL2FyY2hpdmUvJHtBcmNo
aXZlUm91dGVyLnBhdGhGb3Ioc3VpdGUpfT8ke3F1ZXJ5fSIgdGFyZ2V0PSJfYmxhbmsiPiR7QXJj
aGl2ZVJvdXRlci5sYWJlbEZvcihzdWl0ZSl9PC9hPjxicj5gOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9KSgpIDogJyd9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAke2RpZmYucmVzdWx0c1swXS5zdGF0cy5zdGFydF90aW1lICYmIGRpZmYucmVzdWx0
c1swXS5zdGF0cy5lbmRfdGltZSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYFN1aXRlIHRvb2sgJHtlbGFwc2VkVGltZShkaWZmLnJlc3VsdHNbMF0uc3RhdHMuc3Rh
cnRfdGltZSwgZGlmZi5yZXN1bHRzWzBdLnN0YXRzLmVuZF90aW1lKX1gIDogJyd9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDwvZGl2PmAgOiAnJ30KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAg
ICAgICAgICAgICAgICAgICAgJHtkaWZmLnJlc3VsdHMubGVuZ3RoID09PSAxIHx8ICFkaWZmLmZh
aWx1cmVzLmxlbmd0aCA/ICcnIDogYDxkaXYgY2xhc3M9ImRpdmlkZXIgbW9iaWxlLWNvbnRyb2wi
PjwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zLTYg
bGlzdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPlRlc3QgUnVuczwvYj4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkaWZmLmZhaWx1cmVzLnNsaWNlKDAs
IDgpLm1hcChmYWlsdXJlID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxldCB3b3JzdCA9ICdzdWNjZXNzJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXMuZm9yRWFjaCh0eXBlID0+IHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoZmFpbHVyZVt0
eXBlXSkubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3b3JzdCA9IHR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tbWl0cyA9IENv
bW1pdEJhbmsuY29tbWl0c0R1cmluZyhmYWlsdXJlLnV1aWRfcmFuZ2VbMF0sIGZhaWx1cmUudXVp
ZF9yYW5nZVsxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
YDxkaXYgY2xhc3M9Iml0ZW0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8ZGl2IGNsYXNzPSJkb3QgJHt3b3JzdH0gc21hbGwiPgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0IiBz
dHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDttYXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRpb25z
LnN5bWJvbE1hcFt3b3JzdF19PC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8YSBjbGFzcz0idGV4dCBibG9jayIgc3R5bGU9IndpZHRoOiBjYWxjKDEwMCUgLSB2
YXIoLS1tZWRpdW1TaXplKSAtIDE2cHgpOyBvdmVyZmxvdzogaGlkZGVuOyB3aGl0ZS1zcGFjZTog
bm93cmFwOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgImhyZWY9Ii9pbnZlc3RpZ2F0ZT8ke3Bh
cmFtc1RvUXVlcnkoZmFpbHVyZS50b1BhcmFtcygpKX0iPgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb21taXRzLmxlbmd0aCA/CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29tbWl0c1swXS5p
ZC5zdWJzdHJpbmcoMCwxMil9ICR7Y29tbWl0cy5sZW5ndGggPiAxID8gY29tbWl0c1tjb21taXRz
Lmxlbmd0aCAtIDFdLmlkLnN1YnN0cmluZygwLDEyKSA6ICcnfWAgOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc/J30gb24gJHtmYWlsdXJlLmNv
bmZpZ3VyYXRpb259CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCcnKX0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJHtkaWZmLnJlc3VsdHMubGVuZ3RoID4gOCA/ICc8ZGl2IGNs
YXNzPSJpdGVtIGNvbnRlbnQiPlRvbyBtYW55IHJ1bnMgdG8gZGlzcGxheS4uLjxkaXY+JyA6ICcn
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAg
ICAgICAgPC9kaXY+YH0KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAg
ICAgPC9kaXY+YCk7CisgICAgICAgICAgICB9LAorICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5m
YWlsdXJlVmlldyA9IFJFRi5jcmVhdGVSZWYoeworICAgICAgICAgICAgc3RhdGU6IHtjb25maWd1
cmF0aW9uOiBudWxsLCByZXN1bHRzOiBbXSwgZmFpbHVyZXM6IFtdfSwKKyAgICAgICAgICAgIG9u
U3RhdGVVcGRhdGU6IChlbGVtZW50LCBkaWZmLCBzdGF0ZSkgPT4geworICAgICAgICAgICAgICAg
IGlmICghZGlmZi5jb25maWd1cmF0aW9uIHx8ICFkaWZmLnJlc3VsdHMgfHwgIWRpZmYuZmFpbHVy
ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgRE9NLmluamVjdChlbGVtZW50LCAnPGRpdiBjbGFz
cz0ibG9hZGVyIj48ZGl2IGNsYXNzPSJzcGlubmVyIj48L2Rpdj48L2Rpdj4nKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoIWRpZmYuZmFpbHVyZXMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIERPTS5pbmpl
Y3QoZWxlbWVudCwgJzxkaXYgY2xhc3M9ImNvbnRlbnQiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiB2
YXIoLS1zbWFsbFNpemUpOyI+Tm8gZmFpbHVyZXM8L2Rpdj4nKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb25zdCBmYWls
dXJlcyA9IEZhaWx1cmVzLmNvbWJpbmUoLi4uZGlmZi5mYWlsdXJlcyk7CisgICAgICAgICAgICAg
ICAgY29uc3QgcmV2ZXJzZWRUeXBlcyA9IFsuLi5FeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVzXS5y
ZXZlcnNlKCk7CisKKyAgICAgICAgICAgICAgICBET00uaW5qZWN0KGVsZW1lbnQsIGA8Yj5GYWls
dXJlczwvYj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGlzdCI+CisgICAgICAg
ICAgICAgICAgICAgICAgICAke3JldmVyc2VkVHlwZXMubWFwKHR5cGUgPT4geworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhmYWlsdXJlc1t0eXBlXSkuc29y
dCgoYSwgYikgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBudW1i
ZXJEaWZmZXJlbmNlID0gZmFpbHVyZXNbdHlwZV1bYV0gLSBmYWlsdXJlc1t0eXBlXVtiXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlckRpZmZlcmVuY2UpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyRGlmZmVyZW5jZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubG9jYWxlQ29tcGFyZShi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5tYXAodGVzdCA9PiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0iaXRlbSI+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb3QgJHt0eXBlfSBz
bWFsbCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFz
cz0idGlueSB0ZXh0IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDttYXJnaW4tdG9wOiAwcHgi
PiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcFt0eXBlXX08L2Rpdj4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPGEgY2xhc3M9InRleHQgYmxvY2siIHN0eWxlPSJ3aWR0aDogY2FsYygxMDAlIC0gdmFy
KC0tbWVkaXVtU2l6ZSkgLSAxNnB4KTsgb3ZlcmZsb3c6IGhpZGRlbjsgd2hpdGUtc3BhY2U6IG5v
d3JhcDsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IiBocmVmPSIvP3N1aXRlPSR7dGhpcy5zdWl0
ZX0mdGVzdD0ke3Rlc3R9IiB0YXJnZXQ9Il9ibGFuayI+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJHt0ZXN0fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oJycpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfSkuam9pbignJyl9CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PmApOworICAgICAg
ICAgICAgfSwKKyAgICAgICAgfSk7CisgICAgICAgIENvbW1pdEJhbmsuY2FsbGJhY2tzLnB1c2go
KCkgPT4ge3RoaXMuc2VsZWN0KHRoaXMuc2VsZWN0ZWQpfSk7CisgICAgICAgIHRoaXMucmVsb2Fk
KCk7CisgICAgfQorICAgIHJlbG9hZCgpIHsKKyAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhyYW5n
ZVBhcmFtcykubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuZGF0
YUZvckNvbmZpZyA9IHt9OworICAgICAgICB0aGlzLnNlbGVjdCgwKTsKKworICAgICAgICBsZXQg
cmVzdWx0c0Rpc3BhdGNoZWQgPSBhZ3JlZ2F0ZUNvbm5maWd1cmF0aW9uLmxlbmd0aDsKKyAgICAg
ICAgdGhpcy5yZXN1bHRWaWV3LnNldFN0YXRlKHtjb25maWd1cmF0aW9uOiBudWxsLCByZXN1bHRz
OiBbXSwgZmFpbHVyZXM6IFtdfSk7CisKKyAgICAgICAgbGV0IGZhaWx1cmVzRGlzcGF0Y2hlZCA9
IGFncmVnYXRlQ29ubmZpZ3VyYXRpb24ubGVuZ3RoOworICAgICAgICB0aGlzLmZhaWx1cmVWaWV3
LnNldFN0YXRlKHtjb25maWd1cmF0aW9uOiBudWxsLCByZXN1bHRzOiBbXSwgZmFpbHVyZXM6IFtd
fSk7CisKKyAgICAgICAgYWdyZWdhdGVDb25uZmlndXJhdGlvbi5mb3JFYWNoKGNvbmZpZ1RvU2Vh
cmNoID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdFBhcmFtcyA9IE9iamVjdC5hc3NpZ24o
Y29uZmlnVG9TZWFyY2gudG9QYXJhbXMoKSwgcmFuZ2VQYXJhbXMpOworICAgICAgICAgICAgZmV0
Y2goYC9hcGkvcmVzdWx0cy8ke3RoaXMuc3VpdGV9PyR7cGFyYW1zVG9RdWVyeShyZXN1bHRQYXJh
bXMpfWApLnRoZW4ocmVzcG9uc2UgPT4geworICAgICAgICAgICAgICAgIHJlc3BvbnNlLmpzb24o
KS50aGVuKGpzb24gPT4geworICAgICAgICAgICAgICAgICAgICBsZXQgbWluVXVpZCA9IE1hdGgu
cm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkvMTApOworICAgICAgICAgICAgICAgICAgICBsZXQg
bWF4VXVpZCA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAganNvbi5mb3JFYWNoKHJlc3VsdCA9
PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0ZUNvbmZpZyA9IG5ldyBD
b25maWd1cmF0aW9uKHJlc3VsdC5jb25maWd1cmF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghdGhpcy5kYXRhRm9yQ29uZmlnW2NvbXBsZXRlQ29uZmlnLnRvS2V5KCldKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZvckNvbmZpZ1tjb21wbGV0ZUNvbmZp
Zy50b0tleSgpXSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJh
dGlvbjogY29tcGxldGVDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdHM6IFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlczogW10s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFGb3JDb25maWdbY29t
cGxldGVDb25maWcudG9LZXkoKV0uY29uZmlndXJhdGlvbiA9IENvbmZpZ3VyYXRpb24uY29tYmlu
ZSh0aGlzLmRhdGFGb3JDb25maWdbY29tcGxldGVDb25maWcudG9LZXkoKV0uY29uZmlndXJhdGlv
biwgY29tcGxldGVDb25maWcpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhRm9y
Q29uZmlnW2NvbXBsZXRlQ29uZmlnLnRvS2V5KCldLnJlc3VsdHMgPSB0aGlzLmRhdGFGb3JDb25m
aWdbY29tcGxldGVDb25maWcudG9LZXkoKV0ucmVzdWx0cy5jb25jYXQocmVzdWx0LnJlc3VsdHMp
OworCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucmVzdWx0cy5mb3JFYWNoKHJlc3Vs
dCA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluVXVpZCA9IE1hdGgubWluKG1p
blV1aWQsIHJlc3VsdC51dWlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhVdWlk
ID0gTWF0aC5tYXgobWF4VXVpZCwgcmVzdWx0LnV1aWQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgIGlm
IChtYXhVdWlkID0+IG1pblV1aWQpCisgICAgICAgICAgICAgICAgICAgICAgICBDb21taXRCYW5r
LmFkZChtaW5VdWlkLCBtYXhVdWlkKTsKKworICAgICAgICAgICAgICAgICAgICAtLXJlc3VsdHNE
aXNwYXRjaGVkOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdHNEaXNwYXRjaGVkKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZi5zZXRTdGF0ZSh7ZGlzcGxheWVkOiBP
YmplY3Qua2V5cyh0aGlzLmRhdGFGb3JDb25maWcpLmxlbmd0aH0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5zZWxlY3RDb25maWd1cmF0aW9ucy5zZXRTdGF0ZShPYmplY3QudmFsdWVz
KHRoaXMuZGF0YUZvckNvbmZpZykubWFwKGRhdGEgPT4gZGF0YS5jb25maWd1cmF0aW9uKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCh0aGlzLnNlbGVjdGVkKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSkuY2F0
Y2goZXJyb3IgPT4geworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBsb2FkIGZhaWxzLCBsb2cg
dGhlIGVycm9yIGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoSlNP
Ti5zdHJpbmdpZnkoZXJyb3IsIG51bGwsIDQpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAg
ICAgICBGYWlsdXJlcy5mcm9tRW5kcG9pbnQodGhpcy5zdWl0ZSwgY29uZmlnVG9TZWFyY2gsIE9i
amVjdC5hc3NpZ24oe3VuZXhwZWN0ZWQ6IFt3aWxsRmlsdGVyRXhwZWN0ZWQoKV19LCByYW5nZVBh
cmFtcykpLnRoZW4oZmFpbHVyZXMgPT4geworICAgICAgICAgICAgICAgIGxldCBtaW5VdWlkID0g
TWF0aC5yb3VuZChuZXcgRGF0ZSgpLmdldFRpbWUoKS8xMCk7CisgICAgICAgICAgICAgICAgbGV0
IG1heFV1aWQgPSAwOworCisgICAgICAgICAgICAgICAgZmFpbHVyZXMuZm9yRWFjaChmYWlsdXJl
ID0+IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFGb3JDb25maWdbZmFpbHVy
ZS5jb25maWd1cmF0aW9uLnRvS2V5KCldKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5k
YXRhRm9yQ29uZmlnW2ZhaWx1cmUuY29uZmlndXJhdGlvbi50b0tleSgpXSA9IHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uOiBmYWlsdXJlLmNvbmZpZ3VyYXRpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0czogW10sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmFpbHVyZXM6IFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5k
YXRhRm9yQ29uZmlnW2ZhaWx1cmUuY29uZmlndXJhdGlvbi50b0tleSgpXS5jb25maWd1cmF0aW9u
ID0gQ29uZmlndXJhdGlvbi5jb21iaW5lKHRoaXMuZGF0YUZvckNvbmZpZ1tmYWlsdXJlLmNvbmZp
Z3VyYXRpb24udG9LZXkoKV0uY29uZmlndXJhdGlvbiwgZmFpbHVyZS5jb25maWd1cmF0aW9uKTsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhRm9yQ29uZmlnW2ZhaWx1cmUuY29uZmlndXJh
dGlvbi50b0tleSgpXS5mYWlsdXJlcy5wdXNoKGZhaWx1cmUpOworICAgICAgICAgICAgICAgICAg
ICBtaW5VdWlkID0gTWF0aC5taW4obWluVXVpZCwgZmFpbHVyZS51dWlkX3JhbmdlWzBdKTsKKyAg
ICAgICAgICAgICAgICAgICAgbWF4VXVpZCA9IE1hdGgubWF4KG1heFV1aWQsIGZhaWx1cmUudXVp
ZF9yYW5nZVsxXSk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpZiAo
bWF4VXVpZCA9PiBtaW5VdWlkKQorICAgICAgICAgICAgICAgICAgICBDb21taXRCYW5rLmFkZCht
aW5VdWlkLCBtYXhVdWlkKTsKKworICAgICAgICAgICAgICAgIC0tZmFpbHVyZXNEaXNwYXRjaGVk
OworICAgICAgICAgICAgICAgIGlmICghZmFpbHVyZXNEaXNwYXRjaGVkKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuc2VsZWN0Q29uZmlndXJhdGlvbnMuc2V0U3RhdGUoT2JqZWN0LnZhbHVl
cyh0aGlzLmRhdGFGb3JDb25maWcpLm1hcChkYXRhID0+IGRhdGEuY29uZmlndXJhdGlvbikpOwor
ICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCh0aGlzLnNlbGVjdGVkKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7CisgICAgICAgICAgICAg
ICAgLy8gQSBsb2FkIGZhaWx1cmUgcHJvYmFibHkganVzdCBtZWFucyBubyBmYWlsdXJlcyBmb3Vu
ZCwgaW4gdGhhdCBjYXNlLCBpZ25vcmUgdGhlIGVycm9yCisgICAgICAgICAgICAgICAgaWYgKCFP
YmplY3Qua2V5cyhlcnJvcikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICBjb25zb2xlLmVycm9yKEpTT04uc3RyaW5naWZ5KGVycm9yLCBudWxsLCA0KSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIHNlbGVjdChzZWxlY3RlZCkg
eworICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZGF0
YUZvckNvbmZpZyk7CisgICAgICAgIGNvbmZpZ3VyYXRpb25LZXlzLnNvcnQoKTsKKyAgICAgICAg
dGhpcy5zZWxlY3RlZCA9IE1hdGgubWluKHNlbGVjdGVkLCBjb25maWd1cmF0aW9uS2V5cy5sZW5n
dGgpOworCisgICAgICAgIGlmICghY29uZmlndXJhdGlvbktleXMubGVuZ3RoKSB7CisgICAgICAg
ICAgICB0aGlzLnJlc3VsdFZpZXcuc2V0U3RhdGUoe2NvbmZpZ3VyYXRpb246IG51bGwsIHJlc3Vs
dHM6IFtdLCBmYWlsdXJlczogW119KTsKKyAgICAgICAgICAgIHRoaXMuZmFpbHVyZVZpZXcuc2V0
U3RhdGUoe2NvbmZpZ3VyYXRpb246IG51bGwsIHJlc3VsdHM6IFtdLCBmYWlsdXJlczogW119KTsK
KyAgICAgICAgfSBlbHNlIGlmIChjb25maWd1cmF0aW9uS2V5cy5sZW5ndGggPT0gMSkgeworICAg
ICAgICAgICAgdGhpcy5yZXN1bHRWaWV3LnNldFN0YXRlKHRoaXMuZGF0YUZvckNvbmZpZ1tjb25m
aWd1cmF0aW9uS2V5c1swXV0pOworICAgICAgICAgICAgdGhpcy5mYWlsdXJlVmlldy5zZXRTdGF0
ZSh0aGlzLmRhdGFGb3JDb25maWdbY29uZmlndXJhdGlvbktleXNbMF1dKTsKKyAgICAgICAgfSBl
bHNlIGlmICh0aGlzLnNlbGVjdGVkID09IDApIHsKKyAgICAgICAgICAgIGNvbnN0IGNvbWJpbmVk
ID0geworICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24uY29tYmlu
ZSguLi5jb25maWd1cmF0aW9uS2V5cy5tYXAoa2V5ID0+IHRoaXMuZGF0YUZvckNvbmZpZ1trZXld
LmNvbmZpZ3VyYXRpb24pKSwKKyAgICAgICAgICAgICAgICByZXN1bHRzOiBbXSwKKyAgICAgICAg
ICAgICAgICBmYWlsdXJlczogW10sCisgICAgICAgICAgICB9OworICAgICAgICAgICAgY29uZmln
dXJhdGlvbktleXMuZm9yRWFjaChrZXkgPT4geworICAgICAgICAgICAgICAgIGNvbWJpbmVkLnJl
c3VsdHMgPSBjb21iaW5lZC5yZXN1bHRzLmNvbmNhdCh0aGlzLmRhdGFGb3JDb25maWdba2V5XS5y
ZXN1bHRzKTsKKyAgICAgICAgICAgICAgICBjb21iaW5lZC5mYWlsdXJlcyA9IGNvbWJpbmVkLmZh
aWx1cmVzLmNvbmNhdCh0aGlzLmRhdGFGb3JDb25maWdba2V5XS5mYWlsdXJlcyk7CisgICAgICAg
ICAgICB9KTsKKworICAgICAgICAgICAgdGhpcy5yZXN1bHRWaWV3LnNldFN0YXRlKGNvbWJpbmVk
KTsKKyAgICAgICAgICAgIHRoaXMuZmFpbHVyZVZpZXcuc2V0U3RhdGUoY29tYmluZWQpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5yZXN1bHRWaWV3LnNldFN0YXRlKHRoaXMu
ZGF0YUZvckNvbmZpZ1tjb25maWd1cmF0aW9uS2V5c1t0aGlzLnNlbGVjdGVkIC0gMV1dKTsKKyAg
ICAgICAgICAgIHRoaXMuZmFpbHVyZVZpZXcuc2V0U3RhdGUodGhpcy5kYXRhRm9yQ29uZmlnW2Nv
bmZpZ3VyYXRpb25LZXlzW3RoaXMuc2VsZWN0ZWQgLSAxXV0pOworICAgICAgICB9CisgICAgfQor
ICAgIHRvU3RyaW5nKCkgeworICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9InNlY3Rpb24iIHJl
Zj0iJHt0aGlzLnJlZn0iPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciByb3ci
PgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtcy00IHRpdGxlIj4ke3RoaXMu
c3VpdGV9PC9kaXY+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zLTgiPgor
ICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQiPgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxzZWxlY3QgcmVxdWlyZWQgcmVmPSIke3RoaXMuc2VsZWN0Q29uZmln
dXJhdGlvbnN9Ij48L3NlbGVjdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+
Q29uZmlndXJhdGlvbjwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAg
ICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAg
ICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCIg
cmVmPSIke3RoaXMucmVzdWx0Vmlld30iPjwvZGl2PgorICAgICAgICAgICAgICAgICAgICA8ZGl2
IGNsYXNzPSJkaXZpZGVyIj48L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0i
Y29udGVudCIgcmVmPSIke3RoaXMuZmFpbHVyZVZpZXd9Ij48L2Rpdj4KKyAgICAgICAgICAgICAg
ICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2Pjxicj5gOworICAgIH0KK30KKworCitmdW5jdGlv
biBwb3B1bGF0ZVJhbmdlcygpCit7CisgICAgbGV0IGRlZmluZWRSYW5nZSA9IGZhbHNlOworICAg
IGxldCBjb21taXRQYXJhbXMgPSB7fTsKKyAgICBsZXQgdGltZVBhcmFtcyA9IHt9OworCisgICAg
WydpZCcsICd1dWlkJywgJ3RpbWVzdGFtcCcsICdicmFuY2gnLCAncmVwb3NpdG9yeV9pZCddLmZv
ckVhY2gocGFyYW0gPT4geworICAgICAgICBbJycsICdiZWZvcmVfJywgJ2FmdGVyXyddLmZvckVh
Y2gocGFydGlhbCA9PiB7CisgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSAobmV3IFF1ZXJ5TW9k
aWZpZXIoYCR7cGFydGlhbH0ke3BhcmFtfWApKS5jdXJyZW50KCk7CisgICAgICAgICAgICBpZiAo
IXZhbHVlcy5sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYg
KFsnaWQnLCAndXVpZCcsICd0aW1lc3RhbXAnXS5pbmRleE9mKHBhcmFtKSA+PSAwKQorICAgICAg
ICAgICAgICAgIGRlZmluZWRSYW5nZSA9IHRydWU7CisgICAgICAgICAgICBjb21taXRQYXJhbXNb
YCR7cGFydGlhbH0ke3BhcmFtfWBdID0gdmFsdWVzOworICAgICAgICB9KTsKKyAgICB9KTsKKwor
ICAgIFsndGltZScsICdiZWZvcmVfdGltZScsICdhZnRlcl90aW1lJ10uZm9yRWFjaChwYXJhbSA9
PiB7CisgICAgICAgIGNvbnN0IHZhbHVlcyA9IChuZXcgUXVlcnlNb2RpZmllcihwYXJhbSkpLmN1
cnJlbnQoKTsKKyAgICAgICAgaWYgKCF2YWx1ZXMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBkZWZpbmVkUmFuZ2UgPSB0cnVlOworICAgICAgICB0aW1lUGFyYW1zW3BhcmFt
XSA9IHZhbHVlczsKKyAgICB9KTsKKworICAgIHJhbmdlUGFyYW1zID0gT2JqZWN0LmFzc2lnbihj
b21taXRQYXJhbXMsIHRpbWVQYXJhbXMpOworICAgIGNvbnN0IGJyYW5jaCA9IHF1ZXJ5VG9QYXJh
bXMoZG9jdW1lbnQuVVJMLnNwbGl0KCc/JylbMV0pLmJyYW5jaDsKKyAgICBpZiAoYnJhbmNoKQor
ICAgICAgICByYW5nZVBhcmFtcy5icmFuY2ggPSBbYnJhbmNoXTsKKworICAgIGlmICghT2JqZWN0
LmtleXMocmFuZ2VQYXJhbXMpLmxlbmd0aCAmJiAhZGVmaW5lZFJhbmdlKSB7CisgICAgICAgIHJh
bmdlUGFyYW1zID0ge307CisgICAgICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30s
IGNvbW1pdFBhcmFtcyk7CisgICAgICAgIGlmICghZGVmaW5lZFJhbmdlKQorICAgICAgICAgICAg
cGFyYW1zLmxpbWl0ID0gWzFdOworICAgICAgICBDb21taXRCYW5rLmxhdGVzdChwYXJhbXMpLnRo
ZW4oKCkgPT4geworICAgICAgICAgICAgcmFuZ2VQYXJhbXMgPSBPYmplY3QuYXNzaWduKGNvbW1p
dFBhcmFtcywgdGltZVBhcmFtcyk7CisgICAgICAgICAgICByYW5nZVBhcmFtcy5hZnRlcl91dWlk
ID0gW0NvbW1pdEJhbmsuY29tbWl0c1swXS51dWlkXTsKKyAgICAgICAgICAgIHJhbmdlUGFyYW1z
LmJlZm9yZV91dWlkID0gW0NvbW1pdEJhbmsuY29tbWl0c1tDb21taXRCYW5rLmNvbW1pdHMubGVu
Z3RoIC0gMV0udXVpZF07CisgICAgICAgICAgICB2aWV3cy5mb3JFYWNoKHZpZXcgPT4gdmlldy5y
ZWxvYWQoKSk7CisgICAgICAgIH0pOworICAgIH0gICAKK30KKworCitmdW5jdGlvbiByZWxvYWQo
KQoreworICAgIGFncmVnYXRlQ29ubmZpZ3VyYXRpb24gPSBDb25maWd1cmF0aW9uLmZyb21RdWVy
eSgpOworICAgIHBvcHVsYXRlUmFuZ2VzKCk7CisgICAgdmlld3MuZm9yRWFjaCh2aWV3ID0+IHZp
ZXcucmVsb2FkKCkpOworfQorCisKK3BvcHVsYXRlUmFuZ2VzKCk7CitTVUlURVMuZm9yRWFjaChz
dWl0ZSA9PiB7CisgICAgdmlld3MucHVzaChuZXcgU3VpdGVGYWlsdXJlc1ZpZXcoc3VpdGUpKTsK
K30pCisKK3dpbmRvdy5vbnBvcHN0YXRlID0gZXZlbnQgPT4geworICAgIHJlbG9hZCgpOworfTsK
K3dpbmRvdy5vbnB1c2hzdGF0ZSA9IGV2ZW50ID0+IHsKKyAgICByZWxvYWQoKTsKK307CisKK2xl
dCB2aWV3cG9ydCA9IG51bGw7CitET00uaW5qZWN0KAorICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdhcHAnKSwKKyAgICBgJHtEcmF3ZXIoWworICAgICAgICBMZWdlbmQoKGZpbHRlckZsYWcp
ID0+IHsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJGbGFnKQorICAgICAgICAgICAgICAgIHVuZXhw
ZWN0ZWRRdWVyeS5yZW1vdmUoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB1
bmV4cGVjdGVkUXVlcnkucmVwbGFjZShmYWxzZSk7CisgICAgICAgICAgICByZWxvYWQoKTsKKyAg
ICAgICAgfSwgdHJ1ZSwgd2lsbEZpbHRlckV4cGVjdGVkKCkpLAorICAgICAgICBCcmFuY2hTZWxl
Y3RvcihyZWxvYWQpLAorICAgICAgICBDb25maWd1cmF0aW9uU2VsZWN0b3JzKHJlbG9hZCksCisg
ICAgXSl9CisKKyAgICA8ZGl2IGNsYXNzPSJtYWluIHJpZ2h0LXNpZGViYXIgdW5kZXItdG9wYmFy
LXdpdGgtYWN0aW9ucyI+CisgICAgICAgIDxicj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY29udGVu
dCI+CisgICAgICAgICAgICAke3ZpZXdzLmpvaW4oJycpfQorICAgICAgICA8L2Rpdj4KKyAgICA8
L2Rpdj5gCispOworCis8L3NjcmlwdD4KKworeyUgZW5kYmxvY2sgJX0KK3slIGJsb2NrIGNvbnRl
bnQgJX0KKworPGRpdiBpZD0iYXBwIj4KKzwvZGl2PgorCit7JSBlbmRibG9jayAlfQpJbmRleDog
VG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVzdWx0
cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcv
dGVtcGxhdGVzL3N1aXRlX3Jlc3VsdHMuaHRtbAkocmV2aXNpb24gMjYwNDQ1KQorKysgVG9vbHMv
cmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVzdWx0cy5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDcgQEAgJHtEcmF3ZXIoWwogICAgIENvbmZp
Z3VyYXRpb25TZWxlY3RvcnMoKCkgPT4ge3ZpZXcucmVsb2FkKCl9KSwKIF0sICgpID0+IG9uTGF5
b3V0Q2hhbmdlLmFkZCgpKX0KIDxkaXYgY2xhc3M9Im1haW4gcmlnaHQtc2lkZWJhciB1bmRlci10
b3BiYXItd2l0aC1hY3Rpb25zIj4KKyAgICA8YnI+CiAgICAgPGRpdiBjbGFzcz0iY29udGVudCIg
cmVmPSR7UkVGLmNyZWF0ZVJlZih7CiAgICAgICAgICAgICBvbkVsZW1lbnRNb3VudDogKGVsZW1l
bnQpID0+IHsKICAgICAgICAgICAgICAgICBmb3IgKGxldCBzdWl0ZSBpbiB2aWV3LmNoaWxkcmVu
KSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397722</attachid>
            <date>2020-04-27 13:00:20 -0700</date>
            <delta_ts>2020-04-27 14:11:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209562-20200427130018.patch</filename>
            <type>text/plain</type>
            <size>64535</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2MDc2OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYxIEBACisyMDIwLTA0LTI3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICByZXN1bHRzLndlYmtpdC5vZzogQWRkIGludmVzdGlnYXRpb24gZW5kcG9p
bnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTU2
MgorCisgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEFha2FzaCBKYWluLgorCisgICAgICAgIEFk
ZCBhbiBlbmRwb2ludCB0aGF0IGFsbG93cyB1c2VycyB0byBsaXN0IGFsbCB0ZXN0IGZhaWx1cmVz
IGdpdmVuIHNvbWUgY3JpdGVyaWEsIGFuZAorICAgICAgICBwcm92aWRlIGEgcGFydGlhbCBsaXN0
IG9mIGZhaWx1cmVzIGluIHRoZSBpbnZlc3RpZ2F0aW9uIGRyYXdlci4KKworICAgICAgICAqIHJl
c3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2NvbW1pdC5qczoKKyAgICAgICAg
KENvbW1pdFRhYmxlKTogTGluayBjb21taXQgdG8gaW52ZXN0aWdhdGlvbiBlbmRwb2ludC4KKyAg
ICAgICAgKF9Db21taXRCYW5rLnByb3RvdHlwZS5sYXRlc3QpOiBQb3B1bGF0ZSB0aGUgQ29tbWl0
QmFuayB3aXRoIHRoZSBsYXN0IHggY29tbWl0cy4KKyAgICAgICAgKF9Db21taXRCYW5rLnByb3Rv
dHlwZS5jb21taXRzRHVyaW5nVXVpZCk6IFJlbmFtZWQgY29tbWl0c0R1cmluZy4KKyAgICAgICAg
KF9Db21taXRCYW5rLnByb3RvdHlwZS4gY29tbWl0c0R1cmluZyk6IEFjY2VwdCBhIHJhbmdlIFV1
aWRzIGluc3RlYWQgb2YgYSBzaW5nbGUgVXVpZC4KKyAgICAgICAgKF9Db21taXRCYW5rLnByb3Rv
dHlwZS5fbG9hZCk6IExvYWQgYSBzaW5nbGUgY29tbWl0IGlmIHRoZSBiZWZvcmUgYW5kIGFmdGVy
IHV1aWQgbWF0Y2guCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0
aWMvanMvY29tbW9uLmpzOgorICAgICAgICAocGFyYW1zVG9RdWVyeSk6IEZhbHNlIHNob3VsZCBi
ZSBhZGRlZCBhcyBhIHBhcmFtZXRlciwgaWYgcHJvdmlkZWQuCisgICAgICAgIChwZXJjZW50YWdl
KTogTW92ZWQgZnJvbSBpbnZlc3RpZ2F0ZS5qcy4KKyAgICAgICAgKGVsYXBzZWRUaW1lKTogRGl0
dG8uCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvY29u
ZmlndXJhdGlvbi5qczoKKyAgICAgICAgKENvbmZpZ3VyYXRpb24uY29tYmluZSk6IEFsbG93IGNv
bmZpZ3VyYXRpb25zIHRvIGJlIGNvbWJpbmVkIHRvIGEgc2luZ2xlLCBtb3JlIGdlbmVyYWwsIGNv
bmZpZ3VyYXRpb24uCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0
aWMvanMvZmFpbHVyZXMuanM6IEFkZGVkLgorICAgICAgICAoRmFpbHVyZXMucHJvdG90eXBlLmZy
b21FbmRwb2ludCk6IENvbnN0cnVjdCBhIGZhaWx1cmUgb2JqZWN0IGZyb20gdGhlIGZhaWx1cmVz
IGVuZHBvaW50LgorICAgICAgICAoRmFpbHVyZXMuY29tYmluZSk6IENvbWJpbmUgdHdvIGZhaWx1
cmUgb2JqZWN0cyB0b2dldGhlci4KKyAgICAgICAgKEZhaWx1cmVzKToKKyAgICAgICAgKEZhaWx1
cmVzLnByb3RvdHlwZS50b1BhcmFtcyk6IENvbnZlcnQgb2JqZWN0IHRvIHBhcmFtZXRlcnMgZm9y
IG90aGVyIHJlc3VsdHMgZGF0YWJhc2UgcXVlcmllcy4KKyAgICAgICAgKiByZXN1bHRzZGJweS9y
ZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9pbnZlc3RpZ2F0ZS5qczoKKyAgICAgICAgKGVsYXBz
ZWQpOiBVc2VkIHNoYXJlZCB0aW1lIGVsYXBzZWQgZnVuY3Rpb24uCisgICAgICAgIChwZXJjZW50
YWdlKTogTW92ZWQgdG8gY29tbW9uLmpzLgorICAgICAgICAocHJpb3JpdGl6ZWRGYWlsdXJlcyk6
IFJldHVybiBhIGRpdiB3aXRoIGEgdHJ1bmNhdGVkIGxpc3Qgb2YgdGVzdHMgd2hpY2ggZmFpbGVk
LgorICAgICAgICAocmVzdWx0c0ZvckRhdGEpOiBJbmNsdWRlIHNvbWUgbnVtYmVyIG9mIHByaW9y
aXRpemVkIHRlc3QgZmFpbHVyZXMgYmFzZWQgb24gaG93IG1hbnkgYnViYmxlcyBhcmUKKyAgICAg
ICAgYWxyZWFkeSBkaXNwbGF5ZWQuCisgICAgICAgIChfSW52ZXN0aWdhdGVEcmF3ZXIucHJvdG90
eXBlLmV4cGFuZCk6IERpc3BhdGNoIGZhaWx1cmUgcmVxdWVzdC4KKyAgICAgICAgKF9JbnZlc3Rp
Z2F0ZURyYXdlci5wcm90b3R5cGUuZGlzcGF0Y2gpOiBTdGFydCByZXF1ZXN0IHRvIGZhaWx1cmVz
IGVuZHBvaW50LgorICAgICAgICAqIHJlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGlj
L2pzL3RpbWVsaW5lLmpzOgorICAgICAgICAoVGltZWxpbmVGcm9tRW5kcG9pbnQucHJvdG90eXBl
LnJlbmRlci5vbkRvdEVudGVyRmFjdG9yeSk6IEFkZCBsaW5rIHRvIGludmVzdGlnYXRpb24gZW5k
cG9pbnQuCisgICAgICAgIChMZWdlbmQpOiBXaGVuIHNlYXJjaCBwYXJhbWV0ZXJzIGNoYW5nZSwg
d2UgbmVlZCB0byByZS1kaXNwYXRjaCBmYWlsdXJlIHJlcXVlc3RzLgorICAgICAgICAqIHJlc3Vs
dHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3VpdGVfdmlldy5weToKKyAgICAgICAgKFN1aXRlVmll
dy5fc3VpdGVzX2Zvcl9pbnZlc3RpZ2F0aW9uKTogRmlsdGVyIHBhcmFtZXRlcnMgZm9yIGludmVz
dGlnYXRpb24gZW5kcG9pbnQuCisgICAgICAgIChTdWl0ZVZpZXcuaW52ZXN0aWdhdGUpOiBSZXR1
cm4gaW52ZXN0aWdhdGlvbiBlbmRwb2ludCBodG1sIHRlbXBsYXRlLgorICAgICAgICAqIHJlc3Vs
dHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL2ludmVzdGlnYXRlLmh0bWw6IEFkZGVk
LgorICAgICAgICAod2lsbEZpbHRlckV4cGVjdGVkKTogQ2hlY2sgaWYgdGhlIHF1ZXJ5IHBhcmFt
ZXRlcnMgaW5kaWNhdGUgdGhhdCBleHBlY3RlZCBmYWlsdXJlcyBhcmUgdG8gYmUgaWdub3JlZC4K
KyAgICAgICAgKGNvbW1pdHNGb3JSYW5nZSk6IFJldHVybiBhIGxpc3Qgb2YgY29tbWl0cyBmb3Ig
YSB1dWlkIHJhbmdlLgorICAgICAgICAoU3VpdGVGYWlsdXJlc1ZpZXcuY29uc3RydWN0b3IpOiBB
YnN0cmFjdGlvbiB0byBob2xkIHRoZSBpbnZlc3RpZ2F0aW9uIGRhdGEgZm9yIGEgc2luZ2xlIHN1
aXRlLgorICAgICAgICAoU3VpdGVGYWlsdXJlc1ZpZXcucmVsb2FkKTogRGlzcGF0Y2ggcmVxdWVz
dHMgdG8gdGhlIHJlc3VsdHMgYW5kIGZhaWx1cmVzIGVuZHBvaW50IHRvIHBvcHVsYXRlCisgICAg
ICAgIGludmVzdGlnYXRpb24gZGF0YS4KKyAgICAgICAgKFN1aXRlRmFpbHVyZXNWaWV3LnNlbGVj
dCk6IEJ5IGRlZmF1bHQsIGZhaWx1cmVzIGZvciBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgYXJl
IGNvbGxhcHNlZCBpbnRvIGEgc2luZ2xlCisgICAgICAgIHZpZXcuIEFsbG93cyB0aGUgdXNlciB0
byBpdGVyYXRlIHRocm91Z2ggZWFjaCBjb25maWd1cmF0aW9uIHRoYXQgY29tcHJpc2VzIHRoZSB2
aWV3LgorICAgICAgICAoU3VpdGVGYWlsdXJlc1ZpZXcudG9TdHJpbmcpOgorICAgICAgICAocG9w
dWxhdGVSYW5nZXMpOiBFaXRoZXIgY29udmVydCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzIHRvIGEg
cmFuZ2UgdG8gc2VhcmNoIGZvciBmYWlsdXJlcyBhbmQgcmVzdWx0cworICAgICAgICBpbiwgb3Ig
dXNlIHRoZSBtb3N0IHJlY2VudCBjb21taXQuCisgICAgICAgIChyZWxvYWQpOiBGb3JjZSBhbGwg
c3VpdGUgdmlld3MgdG8gcmUtZGlzcGF0Y2ggcmVzdWx0cyBhbmQgZmFpbHVyZXMgcmVxdWVzdHMu
CisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVf
cmVzdWx0cy5odG1sOiBBZGQgc3BhY2UgYmV0d2VlbiBzdWl0ZSBjb250ZW50IGFuZAorICAgICAg
ICB0b3AgYmFyLgorICAgICAgICAqIHJlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdmlld19y
b3V0ZXMucHk6CisgICAgICAgIChWaWV3Um91dGVzLl9faW5pdF9fKTogQWRkIGludmVzdGlnYXRl
IGVuZHBvaW50LgorCiAyMDIwLTA0LTI3ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNv
bT4KIAogICAgICAgICBDYXJldCBtYXkgYmUgcGxhY2VkIGluIHRoZSB3cm9uZyBzcG90IGZvciB0
ZXh0IGlucHV0IGNvbnRleHQgdGhhdCBpcyBhIGZvcm0gY29udHJvbApJbmRleDogVG9vbHMvcmVz
dWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdWl0ZV92aWV3LnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3VpdGVfdmlldy5weQkocmV2aXNpb24g
MjYwNzY4KQorKysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdWl0ZV92aWV3
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTksIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03Nyw2ICs3NywzNiBAQCBjbGFzcyBTdWl0ZVZpZXcoSGFzQ29tbWl0Q29udGV4
dCk6CiAgICAgQGxpbWl0X2Zvcl9xdWVyeShERUZBVUxUX0xJTUlUKQogICAgIEBjb25maWd1cmF0
aW9uX2Zvcl9xdWVyeSgpCiAgICAgQHRpbWVfcmFuZ2VfZm9yX3F1ZXJ5KCkKKyAgICBkZWYgX3N1
aXRlc19mb3JfaW52ZXN0aWdhdGlvbigKKyAgICAgICAgc2VsZiwgc3VpdGU9Tm9uZSwgY29uZmln
dXJhdGlvbnM9Tm9uZSwgcmVjZW50PU5vbmUsCisgICAgICAgIGJyYW5jaD1Ob25lLCBiZWdpbj1O
b25lLCBlbmQ9Tm9uZSwKKyAgICAgICAgYmVnaW5fcXVlcnlfdGltZT1Ob25lLCBlbmRfcXVlcnlf
dGltZT1Ob25lLAorICAgICAgICB1bmV4cGVjdGVkPU5vbmUsCisgICAgICAgIGxpbWl0PU5vbmUs
ICoqa3dhcmdzCisgICAgKToKKyAgICAgICAgQXNzZXJ0UmVxdWVzdC5pc190eXBlKFsnR0VUJ10p
CisgICAgICAgIEFzc2VydFJlcXVlc3QucXVlcnlfa3dhcmdzX2VtcHR5KCoqa3dhcmdzKQorCisg
ICAgICAgIHdpdGggc2VsZi51cGxvYWRfY29udHJvbGxlci51cGxvYWRfY29udGV4dDoKKyAgICAg
ICAgICAgIHN1aXRlc19ieV9jb25maWd1cmF0aW9uID0gc2VsZi51cGxvYWRfY29udHJvbGxlci51
cGxvYWRfY29udGV4dC5maW5kX3N1aXRlcyhjb25maWd1cmF0aW9ucz1jb25maWd1cmF0aW9ucywg
cmVjZW50PWJvb2xlYW5fcXVlcnkoKnJlY2VudClbMF0gaWYgcmVjZW50IGVsc2UgVHJ1ZSkKKyAg
ICAgICAgICAgIGNhbmRpZGF0ZV9zdWl0ZXMgPSBzZXQoKQorICAgICAgICAgICAgZm9yIHN1aXRl
c19mb3JfY29uZmlnIGluIHN1aXRlc19ieV9jb25maWd1cmF0aW9uLnZhbHVlcygpOgorICAgICAg
ICAgICAgICAgIGZvciBzIGluIHN1aXRlc19mb3JfY29uZmlnOgorICAgICAgICAgICAgICAgICAg
ICBjYW5kaWRhdGVfc3VpdGVzLmFkZChzKQorICAgICAgICAgICAgcmV0dXJuIHNvcnRlZChbcyBm
b3IgcyBpbiBjYW5kaWRhdGVfc3VpdGVzIGlmIG5vdCBzdWl0ZSBvciBzIGluIHN1aXRlXSkKKwor
ICAgIEBTaXRlTWVudS5yZW5kZXJfd2l0aF9zaXRlX21lbnUoKQorICAgIGRlZiBpbnZlc3RpZ2F0
ZShzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLmVudmlyb25tZW50LmdldF90
ZW1wbGF0ZSgnaW52ZXN0aWdhdGUuaHRtbCcpLnJlbmRlcigKKyAgICAgICAgICAgIHRpdGxlPXNl
bGYuc2l0ZV9tZW51LnRpdGxlLAorICAgICAgICAgICAgc3VpdGVzPWpzb24uZHVtcHMoc2VsZi5f
c3VpdGVzX2Zvcl9pbnZlc3RpZ2F0aW9uKCkpLAorICAgICAgICAgICAgKiprd2FyZ3MpCisKKyAg
ICBAcXVlcnlfYXNfa3dhcmdzKCkKKyAgICBAdXVpZF9yYW5nZV9mb3JfcXVlcnkoKQorICAgIEBs
aW1pdF9mb3JfcXVlcnkoREVGQVVMVF9MSU1JVCkKKyAgICBAY29uZmlndXJhdGlvbl9mb3JfcXVl
cnkoKQorICAgIEB0aW1lX3JhbmdlX2Zvcl9xdWVyeSgpCiAgICAgZGVmIF9zdWl0ZXNfZm9yX3Nl
YXJjaCgKICAgICAgICAgc2VsZiwgc3VpdGU9Tm9uZSwgY29uZmlndXJhdGlvbnM9Tm9uZSwgcmVj
ZW50PU5vbmUsCiAgICAgICAgIGJyYW5jaD1Ob25lLCBiZWdpbj1Ob25lLCBlbmQ9Tm9uZSwKSW5k
ZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdmlld19yb3V0ZXMucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy92aWV3X3JvdXRl
cy5weQkocmV2aXNpb24gMjYwNzY4KQorKysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkv
dmlldy92aWV3X3JvdXRlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJp
Z2h0IChDKSAyMDE5LCAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNyArODUsOSBAQCBjbGFzcyBWaWV3Um91dGVz
KEF1dGhlZEJsdWVwcmludCk6CiAgICAgICAgIHNlbGYuYWRkX3VybF9ydWxlKCcvY29tbWl0L3By
ZXZpb3VzJywgJ2NvbW1pdF9wcmV2aW91cycsIHNlbGYuY29tbWl0cy5wcmV2aW91cywgbWV0aG9k
cz0oJ0dFVCcsKSkKICAgICAgICAgc2VsZi5hZGRfdXJsX3J1bGUoJy9jb21taXQvbmV4dCcsICdj
b21taXRfbmV4dCcsIHNlbGYuY29tbWl0cy5uZXh0LCBtZXRob2RzPSgnR0VUJywpKQogICAgICAg
ICBzZWxmLmFkZF91cmxfcnVsZSgnL2NvbW1pdHMnLCAnY29tbWl0cycsIHNlbGYuY29tbWl0cy5j
b21taXRzLCBtZXRob2RzPSgnR0VUJywpKQorCiAgICAgICAgIHNlbGYuYWRkX3VybF9ydWxlKCcv
c3VpdGVzJywgJ3N1aXRlcycsIHNlbGYuc3VpdGVzLnJlc3VsdHMsIG1ldGhvZHM9KCdHRVQnLCkp
CisgICAgICAgIHNlbGYuYWRkX3VybF9ydWxlKCcvaW52ZXN0aWdhdGUnLCAnaW52ZXN0aWdhdGUn
LCBzZWxmLnN1aXRlcy5pbnZlc3RpZ2F0ZSwgbWV0aG9kcz0oJ0dFVCcsKSkKIAogICAgICAgICBz
ZWxmLmFkZF91cmxfcnVsZSgnL3VybHMvcXVldWUnLCAndXJscy1xdWV1ZScsIHNlbGYuY2kucXVl
dWUsIG1ldGhvZHM9KCdHRVQnLCkpCiAgICAgICAgIHNlbGYuYWRkX3VybF9ydWxlKCcvdXJscy93
b3JrZXInLCAndXJscy13b3JrZXInLCBzZWxmLmNpLndvcmtlciwgbWV0aG9kcz0oJ0dFVCcsKSkK
QEAgLTEwNyw2ICsxMDksNyBAQCBjbGFzcyBWaWV3Um91dGVzKEF1dGhlZEJsdWVwcmludCk6CiAK
ICAgICAgICAgc2VsZi5zaXRlX21lbnUuYWRkX2VuZHBvaW50KCdNYWluJywgc2VsZi5uYW1lICsg
Jy5tYWluJywgcGFyYW1ldGVycz1bJ2JyYW5jaCddKQogICAgICAgICBzZWxmLnNpdGVfbWVudS5h
ZGRfZW5kcG9pbnQoJ1N1aXRlcycsIHNlbGYubmFtZSArICcuc3VpdGVzJywgcGFyYW1ldGVycz1b
J2JyYW5jaCddKQorICAgICAgICBzZWxmLnNpdGVfbWVudS5hZGRfZW5kcG9pbnQoJ0ludmVzdGln
YXRlJywgc2VsZi5uYW1lICsgJy5pbnZlc3RpZ2F0ZScsIHBhcmFtZXRlcnM9WydicmFuY2gnXSkK
ICAgICAgICAgc2VsZi5zaXRlX21lbnUuYWRkX2VuZHBvaW50KCdEb2N1bWVudGF0aW9uJywgc2Vs
Zi5uYW1lICsgJy5kb2N1bWVudGF0aW9uJykKICAgICAgICAgc2VsZi5zaXRlX21lbnUuYWRkX2Vu
ZHBvaW50KCdDb21taXRzJywgc2VsZi5uYW1lICsgJy5jb21taXRzJywgcGFyYW1ldGVycz1bJ2Jy
YW5jaCddKQogCkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRp
Yy9qcy9jb21taXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2Ri
cHkvdmlldy9zdGF0aWMvanMvY29tbWl0LmpzCShyZXZpc2lvbiAyNjA3NjgpCisrKyBUb29scy9y
ZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9jb21taXQuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE5LCAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtOTgsMTIgKzk4LDIxIEBAIGZ1bmN0aW9uIENvbW1pdFRhYmxlKGNvbW1pdHMsIHJlcG9zaXRv
cnkKICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwudGltZXN0YW1wKQogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGA8dGQgcm93c3Bhbj0iJHtjZWxsLnJvd3NwYW59Ij4ke25ldyBE
YXRlKGNlbGwudGltZXN0YW1wICogMTAwMCkudG9Mb2NhbGVTdHJpbmcoKX08L3RkPmA7CiAKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIGNvbW1pdF9hcmdzID0gJ3JlcG9zaXRvcnlfaWQ9JyArIGNl
bGwuY29tbWl0LnJlcG9zaXRvcnlfaWQgKyAnJmJyYW5jaD0nICsgY2VsbC5jb21taXQuYnJhbmNo
ICsgJyZpZD0nICsgY2VsbC5jb21taXQuaWQ7CisgICAgICAgICAgICAgICAgICAgIGxldCBjb21t
aXRBcmdzID0gcGFyYW1zVG9RdWVyeSh7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0
b3J5X2lkOiBbY2VsbC5jb21taXQucmVwb3NpdG9yeV9pZF0sCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmFuY2g6IFtjZWxsLmNvbW1pdC5icmFuY2hdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgaWQ6IFtjZWxsLmNvbW1pdC5pZF0sCisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgICAgICBsZXQgaW52ZXN0aWdhdGVBcmdzID0ge2lkOiBbY2VsbC5jb21taXQuaWRd
fTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFbJ21hc3RlcicsICd0cnVuayddLmluY2x1ZGVz
KGNlbGwuY29tbWl0LmJyYW5jaCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpbnZlc3RpZ2F0
ZUFyZ3MuYnJhbmNoID0gW2NlbGwuY29tbWl0LmJyYW5jaF07CisKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGA8dGQgcm93c3Bhbj0iJHtjZWxsLnJvd3NwYW59Ij4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIDxhIGhyZWY9Ii9jb21taXQ/JHtjb21taXRfYXJnc30iPiR7Y2VsbC5jb21taXQu
aWR9PC9hPiA8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvY29tbWl0PyR7
Y29tbWl0QXJnc30iPiR7Y2VsbC5jb21taXQuaWR9PC9hPiA8YnI+CiAgICAgICAgICAgICAgICAg
ICAgICAgICBCcmFuY2g6ICR7Y2VsbC5jb21taXQuYnJhbmNofSA8YnI+CiAgICAgICAgICAgICAg
ICAgICAgICAgICBDb21taXR0ZXI6ICR7ZXNjYXBlSFRNTChjZWxsLmNvbW1pdC5jb21taXR0ZXIp
fSA8YnI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvY29tbWl0L2luZm8/JHtj
b21taXRfYXJnc30iPk1vcmUgSW5mbzwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhy
ZWY9Ii9jb21taXQvaW5mbz8ke2NvbW1pdEFyZ3N9Ij5Nb3JlIEluZm88L2E+PGJyPgorICAgICAg
ICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL2ludmVzdGlnYXRlPyR7cGFyYW1zVG9RdWVyeShp
bnZlc3RpZ2F0ZUFyZ3MpfSI+VGVzdCByZXN1bHRzIGZvciBjb21taXQ8L2E+CiAgICAgICAgICAg
ICAgICAgICAgICAgICAke2Z1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghY2VsbC5jb21taXQubWVzc2FnZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICcnOwpAQCAtMTQ3LDYgKzE1Niw1OSBAQCBjbGFzcyBfQ29tbWl0QmFuayB7CiAg
ICAgICAgIHRoaXMuY2FsbGJhY2tzID0gW107CiAKICAgICB9CisgICAgbGF0ZXN0KHBhcmFtcykg
eworICAgICAgICB0aGlzLl9icmFuY2hlcyA9IG5ldyBTZXQocGFyYW1zLmJyYW5jaCk7CisgICAg
ICAgIHRoaXMuX3JlcG9zaXRvcmllcyA9IG5ldyBTZXQocGFyYW1zLnJlcG9zaXRvcnlfaWQpOwor
ICAgICAgICB0aGlzLl9iZWdpblV1aWQgPSBudWxsOworICAgICAgICB0aGlzLl9lbmRVdWlkID0g
bnVsbDsKKworICAgICAgICAvLyBPbmx5IHByb3ZpZGUgdGhlIGxhdGVzdCBjb21taXRzCisgICAg
ICAgIGNvbnN0IHNlbGYgPSB0aGlzOworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rp
b24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBmZXRjaChPYmplY3Qua2V5cyhwYXJh
bXMpLmxlbmd0aCA/IGBhcGkvY29tbWl0cz8ke3BhcmFtc1RvUXVlcnkocGFyYW1zKX1gIDogJ2Fw
aS9jb21taXRzJykudGhlbihyZXNwb25zZSA9PiB7CisgICAgICAgICAgICAgICAgcmVzcG9uc2Uu
anNvbigpLnRoZW4oanNvbiA9PiB7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2JlZ2luVXVp
ZCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApOworICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9lbmRVdWlkID0gMDsKKworICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRlc3RJZEZv
clJlcG8gPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlcyA9IFtdOwor
ICAgICAgICAgICAgICAgICAgICBqc29uLmZvckVhY2goZGF0dW0gPT57CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjb21taXQgPSBuZXcgQ29tbWl0KGRhdHVtKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChjb21taXQpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAob2xkZXN0SWRGb3JSZXBvW2NvbW1pdC5yZXBvc2l0b3J5X2lkXSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvbGRlc3RJZEZvclJlcG9bY29tbWl0LnJlcG9zaXRvcnlf
aWRdID0gTWF0aC5taW4oY29tbWl0LnV1aWQsIG9sZGVzdElkRm9yUmVwb1tjb21taXQucmVwb3Np
dG9yeV9pZF0pOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9sZGVzdElkRm9yUmVwb1tjb21taXQucmVwb3NpdG9yeV9pZF0gPSBjb21t
aXQudXVpZDsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAg
bGV0IG9sZGVzdFZhbGlkVXVpZCA9IDA7CisgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlz
KG9sZGVzdElkRm9yUmVwbykuZm9yRWFjaChpZCA9PiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBvbGRlc3RWYWxpZFV1aWQgPSBNYXRoLm1heChvbGRlc3RWYWxpZFV1aWQsIGlkKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5mb3JF
YWNoKGNvbW1pdCA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0LnV1aWQg
PD0gb2xkZXN0VmFsaWRVdWlkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0cy5wdXNoKGNvbW1pdCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9iZWdpblV1aWQgPSBNYXRoLm1pbihjb21taXQudXVp
ZCwgc2VsZi5fYmVnaW5VdWlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2VuZFV1
aWQgPSBNYXRoLm1heChjb21taXQudXVpZCwgc2VsZi5fZW5kVXVpZCk7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLl9iZWdpblV1aWQgPiBz
ZWxmLl9lbmRVdWlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9iZWdpblV1aWQg
PSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZW5kVXVpZCA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4gewor
ICAgICAgICAgICAgICAgIC8vIElmIHRoZSBsb2FkIGZhaWxzLCBsb2cgdGhlIGVycm9yIGFuZCBj
b250aW51ZQorICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoSlNPTi5zdHJpbmdpZnkoZXJy
b3IsIG51bGwsIDQpKTsKKyAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0pOworICAgIH0KICAgICBjb21taXRCeVV1aWQodXVpZCkgewogICAg
ICAgICBsZXQgYmVnaW4gPSAwOwogICAgICAgICBsZXQgZW5kID0gdGhpcy5jb21taXRzLmxlbmd0
aCAtIDE7CkBAIC0xNjIsMjMgKzIyNCwzOSBAQCBjbGFzcyBfQ29tbWl0QmFuayB7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIGNvbW1pdHNEdXJpbmdVdWlkKHV1
aWQpIHsKKyAgICBjb21taXRzRHVyaW5nKG1pblV1aWQsIG1heFV1aWQgPSAwKSB7CiAgICAgICAg
IGxldCBjb21taXRzID0gW107CiAgICAgICAgIGxldCBiZWdpbiA9IDA7CiAgICAgICAgIGxldCBl
bmQgPSB0aGlzLmNvbW1pdHMubGVuZ3RoIC0gMTsKKyAgICAgICAgbGV0IGNvdW50ZXIgPSAwOwog
ICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmNvbW1pdHMubGVuZ3RoIC0gMTsKKworICAgICAgICBp
ZiAobWF4VXVpZCA9PSAwKQorICAgICAgICAgICAgbWF4VXVpZCA9IG1pblV1aWQ7CisgICAgICAg
IGlmIChtYXhVdWlkIDwgbWluVXVpZCkgeworICAgICAgICAgICAgY29uc29sZS5lcnJvcignSW52
YWxpZCB1dWlkIHJhbmdlJyk7CisgICAgICAgICAgICByZXR1cm4gY29tbWl0czsKKyAgICAgICAg
fQorCiAgICAgICAgIHdoaWxlIChiZWdpbiA8PSBlbmQpIHsKLSAgICAgICAgICAgIGNvbnN0IG1p
ZCA9IE1hdGguY2VpbCgoYmVnaW4gKyBlbmQpIC8gMik7Ci0gICAgICAgICAgICBjb25zdCBjYW5k
aWRhdGUgPSB0aGlzLmNvbW1pdHNbbWlkXTsKLSAgICAgICAgICAgIGlmIChjYW5kaWRhdGUudXVp
ZCA9PT0gdXVpZCkgewotICAgICAgICAgICAgICAgIGNvbW1pdHMucHVzaChjYW5kaWRhdGUpOwot
ICAgICAgICAgICAgICAgIGluZGV4ID0gbWlkIC0gMTsKKyAgICAgICAgICAgIGNvdW50ZXIgPSBN
YXRoLmNlaWwoKGJlZ2luICsgZW5kKSAvIDIpOworICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRl
ID0gdGhpcy5jb21taXRzW2NvdW50ZXJdOworICAgICAgICAgICAgaWYgKG1pblV1aWQgPD0gY2Fu
ZGlkYXRlLnV1aWQgJiYgY2FuZGlkYXRlLnV1aWQgPD0gbWF4VXVpZCkgeworICAgICAgICAgICAg
ICAgIGluZGV4ID0gY291bnRlciAtIDE7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoY2FuZGlkYXRlLnV1aWQgPCB1dWlkKQotICAgICAgICAg
ICAgICAgIGJlZ2luID0gbWlkICsgMTsKKworICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS51dWlk
IDwgbWluVXVpZCkKKyAgICAgICAgICAgICAgICBiZWdpbiA9IGNvdW50ZXIgKyAxOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7CisgICAgICAgICAgICAg
ICAgZW5kID0gY291bnRlciAtIDE7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGNvdW50ZXIg
PCB0aGlzLmNvbW1pdHMubGVuZ3RoKSB7CisgICAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0
aGlzLmNvbW1pdHNbY291bnRlcl07CisgICAgICAgICAgICBpZiAobWluVXVpZCA+IGNhbmRpZGF0
ZS51dWlkIHx8IGNhbmRpZGF0ZS51dWlkID4gbWF4VXVpZCkKKyAgICAgICAgICAgICAgICBicmVh
aworICAgICAgICAgICAgY29tbWl0cy5wdXNoKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICArK2Nv
dW50ZXI7CiAgICAgICAgIH0KIAogICAgICAgICBsZXQgcmVwb3NpdG9yaWVzID0gbmV3IFNldCgp
OwpAQCAtMTk1LDE0ICsyNzMsMTQgQEAgY2xhc3MgX0NvbW1pdEJhbmsgewogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjb21taXRzLnB1c2go
dGhpcy5jb21taXRzW2luZGV4XSk7CisgICAgICAgICAgICBjb21taXRzLnVuc2hpZnQodGhpcy5j
b21taXRzW2luZGV4XSk7CiAgICAgICAgICAgICByZXBvc2l0b3JpZXMuYWRkKHRoaXMuY29tbWl0
c1tpbmRleF0ucmVwb3NpdG9yeV9pZCk7CiAgICAgICAgICAgICBpZiAocmVwb3NpdG9yaWVzLmxl
bmd0aCA9PSB0aGlzLl9yZXBvc2l0b3JpZXMubGVuZ3RoKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICAtLWluZGV4OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjb21t
aXRzLnNvcnQoZnVuY3Rpb24oYSwgYikge3JldHVybiBhLnJlcG9zaXRvcnlfaWQubG9jYWxlQ29t
cGFyZShiLnJlcG9zaXRvcnlfaWQpfSk7CisgICAgICAgIHJldHVybiBjb21taXRzOwogICAgIH0K
ICAgICBfbG9hZFNpYmxpbmdzKGNvbW1pdCkgewogICAgICAgICBjb25zdCBxdWVyeSA9IHBhcmFt
c1RvUXVlcnkoewpAQCAtMjQ1LDcgKzMyMyw3IEBAIGNsYXNzIF9Db21taXRCYW5rIHsKICAgICAg
ICAgfSk7CiAgICAgfQogICAgIF9sb2FkKGJlZ2luVXVpZCwgZW5kVXVpZCkgewotICAgICAgICBp
ZiAoZW5kVXVpZCA8PSBiZWdpblV1aWQpCisgICAgICAgIGlmIChlbmRVdWlkIDwgYmVnaW5VdWlk
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGNvbnN0IGxpbWl0ID0gMjUwMDsKQEAg
LTM2Niw0ICs0NDQsNCBAQCBjbGFzcyBfQ29tbWl0QmFuayB7CiAKIGNvbnN0IENvbW1pdEJhbmsg
PSBuZXcgX0NvbW1pdEJhbmsoKTsKIAotZXhwb3J0IHtDb21taXQsIENvbW1pdEJhbmssIENvbW1p
dFRhYmxlfTsKK2V4cG9ydCB7Q29tbWl0LCBDb21taXRCYW5rLCBDb21taXRUYWJsZSwgVElNRVNU
QU1QX1RPX1VVSURfTVVMVElQTElFUn07CkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRz
ZGJweS92aWV3L3N0YXRpYy9qcy9jb21tb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0
c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvY29tbW9uLmpzCShyZXZpc2lvbiAyNjA3
NjgpCisrKyBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9jb21t
b24uanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE5
LCAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vCiAvLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
IC8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTUsNyArNTUsNyBAQCBmdW5jdGlvbiBwYXJhbXNUb1F1ZXJ5KGpz
b24pIHsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGpzb25bcGFy
YW1ldGVyXS5mb3JFYWNoKCh2YWx1ZSkgPT4gewotICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAg
ICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIHJlc3VsdCArPSAocmVzdWx0ID8gJyYn
IDogJycpICsgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlcikgKyAnPScgKyBlbmNvZGVVUklD
b21wb25lbnQodmFsdWUpOwogICAgICAgICB9KTsKQEAgLTE2NSw0ICsxNjUsMjggQEAgZnVuY3Rp
b24gZGVlcENvbXBhcmUoYSwgYikgewogICAgIHJldHVybiB0cnVlOwogfQogCi1leHBvcnQge2Rl
ZXBDb21wYXJlLCBFcnJvckRpc3BsYXksIHF1ZXJ5VG9QYXJhbXMsIHBhcmFtc1RvUXVlcnksIFF1
ZXJ5TW9kaWZpZXIsIGVzY2FwZUhUTUx9OworZnVuY3Rpb24gcGVyY2VudGFnZSh2YWx1ZSwgbWF4
KQoreworICAgIGlmICh2YWx1ZSA9PT0gbWF4KQorICAgICAgICByZXR1cm4gJzEwMCAlJzsKKyAg
ICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gJzAgJSc7CisgICAgY29uc3QgcmVzdWx0ID0g
TWF0aC5yb3VuZCh2YWx1ZSAvIG1heCAqIDEwMCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
IHJldHVybiAnPDEgJSc7CisgICAgaWYgKHJlc3VsdCA9PT0gMTAwKQorICAgICAgICByZXR1cm4g
Jzk5ICUnOworICAgIHJldHVybiBgJHtyZXN1bHR9ICVgCit9CisKK2Z1bmN0aW9uIGVsYXBzZWRU
aW1lKHN0YXJ0VGltZXN0YW1wLCBlbmRUaW1lc3RhbXApCit7CisgICAgY29uc3QgdGltZSA9IG5l
dyBEYXRlKChlbmRUaW1lc3RhbXAgLSBzdGFydFRpbWVzdGFtcCkgKiAxMDAwKTsKKyAgICBsZXQg
cmVzdWx0ID0gJyc7CisgICAgaWYgKHRpbWUuZ2V0TWludXRlcygpKQorICAgICAgICByZXN1bHQg
Kz0gYCR7dGltZS5nZXRNaW51dGVzKCl9IG1pbnV0ZSR7dGltZS5nZXRNaW51dGVzKCkgPT0gMSA/
ICcnIDogJ3MnfSBhbmQgYDsKKyAgICByZXN1bHQgKz0gYCR7dGltZS5nZXRTZWNvbmRzKCl9IHNl
Y29uZCR7dGltZS5nZXRTZWNvbmRzKCkgPT0gMSA/ICcnIDogJ3MnfSB0byBydW5gOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2V4cG9ydCB7ZGVlcENvbXBhcmUsIEVycm9yRGlzcGxheSwgcXVl
cnlUb1BhcmFtcywgcGFyYW1zVG9RdWVyeSwgUXVlcnlNb2RpZmllciwgZXNjYXBlSFRNTCwgcGVy
Y2VudGFnZSwgZWxhcHNlZFRpbWV9OwpJbmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2Ri
cHkvdmlldy9zdGF0aWMvanMvY29uZmlndXJhdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9y
ZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9jb25maWd1cmF0aW9uLmpzCShy
ZXZpc2lvbiAyNjA3NjgpCisrKyBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0
YXRpYy9qcy9jb25maWd1cmF0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSwyMCBA
QCBjbGFzcyBDb25maWd1cmF0aW9uIHsKICAgICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCcuJyk7
CiAgICAgfQogCisgICAgc3RhdGljIGNvbWJpbmUoKQorICAgIHsKKyAgICAgICAgaWYgKCFhcmd1
bWVudHMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25maWd1cmF0aW9uKCk7Cisg
ICAgICAgIGNvbnN0IGNvbWJpbmVkID0gbmV3IENvbmZpZ3VyYXRpb24oYXJndW1lbnRzWzBdKTsK
KyAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIENvbmZpZ3VyYXRpb24ubWVtYmVycygpLmZvckVhY2gobWVtYmVyID0+IHsKKyAg
ICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldW21lbWJlcl0gIT09IGNvbWJpbmVkW21lbWJl
cl0pCisgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkW21lbWJlcl0gPSBudWxsOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvbWJpbmVkOworICAgIH0KKwog
ICAgIGNvbnN0cnVjdG9yKGpzb24gPSB7fSkgewogICAgICAgICB0aGlzLnBsYXRmb3JtID0ganNv
bi5wbGF0Zm9ybSA/IGpzb24ucGxhdGZvcm0gOiBudWxsOwogICAgICAgICB0aGlzLnZlcnNpb24g
PSBqc29uLnZlcnNpb24gPyBDb25maWd1cmF0aW9uLnZlcnNpb25Ub0ludGVnZXIoanNvbi52ZXJz
aW9uKSA6IG51bGw7CkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0
YXRpYy9qcy9mYWlsdXJlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9yZXN1bHRzZGJweS9yZXN1
bHRzZGJweS92aWV3L3N0YXRpYy9qcy9mYWlsdXJlcy5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9mYWlsdXJlcy5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE1OSBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworLy8gYXJlIG1ldDoKKy8vIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
Ly8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorLy8gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIgor
Ly8gQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisvLyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisvLyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKy8v
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKy8vIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisvLyBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKy8vIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisvLyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorLy8gQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorLy8gVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQge1RJTUVTVEFNUF9UT19VVUlE
X01VTFRJUExJRVJ9IGZyb20gJy9hc3NldHMvanMvY29tbWl0LmpzJzsKK2ltcG9ydCB7cXVlcnlU
b1BhcmFtcywgcGFyYW1zVG9RdWVyeSwgUXVlcnlNb2RpZmllcn0gZnJvbSAnL2Fzc2V0cy9qcy9j
b21tb24uanMnOworaW1wb3J0IHtFeHBlY3RhdGlvbnN9IGZyb20gJy9hc3NldHMvanMvZXhwZWN0
YXRpb25zLmpzJzsKK2ltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnL2Fzc2V0cy9qcy9jb25m
aWd1cmF0aW9uLmpzJzsKKworY2xhc3MgRmFpbHVyZXMgeworICAgIHN0YXRpYyBmcm9tRW5kcG9p
bnQoc3VpdGUsIGNvbmZpZ3VyYXRpb249bnVsbCwgcGFyYW1zPXt9KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAg
ICAgY29uc3QgcGFyYW1zVG9EaXNwYXRjaCA9IE9iamVjdC5hc3NpZ24oY29uZmlndXJhdGlvbiA/
IGNvbmZpZ3VyYXRpb24udG9QYXJhbXMoKSA6IHt9LCBwYXJhbXMpOworICAgICAgICAgICAgcGFy
YW1zVG9EaXNwYXRjaC5jb2xsYXBzZWQgPSBbZmFsc2VdOworICAgICAgICAgICAgaWYgKHBhcmFt
c1RvRGlzcGF0Y2gudW5leHBlY3RlZCA9PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgICAgIHBh
cmFtc1RvRGlzcGF0Y2gudW5leHBlY3RlZCA9IFtmYWxzZV07CisKKyAgICAgICAgICAgIGZldGNo
KGBhcGkvZmFpbHVyZXMvJHtzdWl0ZX0/JHtwYXJhbXNUb1F1ZXJ5KHBhcmFtc1RvRGlzcGF0Y2gp
fWApLnRoZW4ocmVzcG9uc2UgPT4geworICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTsK
KyAgICAgICAgICAgICAgICByZXNwb25zZS5qc29uKCkudGhlbihqc29uID0+IHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb24pKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFtdOworICAgICAgICAgICAgICAgICAgICBqc29uLmZvckVhY2goKHBhaXJz
KSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWlycy5yZXN1bHRzLmZvckVhY2goKHJ1
bikgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBGYWls
dXJlcyhzdWl0ZSwgbmV3IENvbmZpZ3VyYXRpb24ocGFpcnMuY29uZmlndXJhdGlvbiksIHJ1bikp
OworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7CisgICAgICAgICAgICAgICAgLy8gSWYg
dGhlIGxvYWQgZmFpbHMsIGxvZyB0aGUgZXJyb3IgYW5kIGNvbnRpbnVlCisgICAgICAgICAgICAg
ICAgY29uc29sZS5lcnJvcihKU09OLnN0cmluZ2lmeShlcnJvciwgbnVsbCwgNCkpOworICAgICAg
ICAgICAgICAgIHJlamVjdChlcnJvcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgc3RhdGljIGNvbWJpbmUoKQorICAgIHsKKyAgICAgICAgaWYgKCFhcmd1bWVu
dHMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgY29uc3QgcmVz
dWx0ID0gbmV3IEZhaWx1cmVzKGFyZ3VtZW50c1swXS5zdWl0ZSk7CisgICAgICAgIGNvbnN0IGNv
bmZpZ3VyYXRpb25zID0gW107CisKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVu
dHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLnB1c2goYXJndW1l
bnRzW2ldLmNvbmZpZ3VyYXRpb24pOworICAgICAgICAgICAgcmVzdWx0LmFnZ3JlZ2F0aW5nICs9
IGFyZ3VtZW50c1tpXS5hZ2dyZWdhdGluZzsKKyAgICAgICAgICAgIHJlc3VsdC5zdGFydF90aW1l
X3JhbmdlID0gWworICAgICAgICAgICAgICAgIE1hdGgubWluKHJlc3VsdC5zdGFydF90aW1lX3Jh
bmdlWzBdLCBhcmd1bWVudHNbaV0uc3RhcnRfdGltZV9yYW5nZVswXSksCisgICAgICAgICAgICAg
ICAgTWF0aC5tYXgocmVzdWx0LnN0YXJ0X3RpbWVfcmFuZ2VbMV0sIGFyZ3VtZW50c1tpXS5zdGFy
dF90aW1lX3JhbmdlWzFdKSwKKyAgICAgICAgICAgIF07CisgICAgICAgICAgICByZXN1bHQudXVp
ZF9yYW5nZSA9IFsKKyAgICAgICAgICAgICAgICBNYXRoLm1pbihyZXN1bHQudXVpZF9yYW5nZVsw
XSwgYXJndW1lbnRzW2ldLnV1aWRfcmFuZ2VbMF0pLAorICAgICAgICAgICAgICAgIE1hdGgubWF4
KHJlc3VsdC51dWlkX3JhbmdlWzFdLCBhcmd1bWVudHNbaV0udXVpZF9yYW5nZVsxXSksCisgICAg
ICAgICAgICBdOworCisgICAgICAgICAgICAvLyBDb21iaW5lCisgICAgICAgICAgICBFeHBlY3Rh
dGlvbnMuZmFpbHVyZVR5cGVzLmZvckVhY2godHlwZSA9PiB7CisgICAgICAgICAgICAgICAgZm9y
IChsZXQgdGVzdCBpbiBhcmd1bWVudHNbaV1bdHlwZV0pIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdFt0eXBlXVt0ZXN0XSA9PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0W3R5cGVdW3Rlc3RdID0gYXJndW1lbnRzW2ldW3R5cGVdW3Rlc3RdOworICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbdHlw
ZV1bdGVzdF0gKz0gYXJndW1lbnRzW2ldW3R5cGVdW3Rlc3RdOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBQcmlvcml0aXplIGZhaWx1cmVzCisg
ICAgICAgICAgICBjb25zdCByZW1haW5pbmdUeXBlcyA9IFsuLi5FeHBlY3RhdGlvbnMuZmFpbHVy
ZVR5cGVzXTsKKyAgICAgICAgICAgIHdoaWxlIChyZW1haW5pbmdUeXBlcy5sZW5ndGggPiAxKSB7
CisgICAgICAgICAgICAgICAgY29uc3QgdG9SZW1vdmUgPSBbXTsKKyAgICAgICAgICAgICAgICBj
b25zdCBjdXJyZW50VHlwZSA9IHJlbWFpbmluZ1R5cGVzWzBdOworICAgICAgICAgICAgICAgIHJl
bWFpbmluZ1R5cGVzLnNoaWZ0KCk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGxldCB0ZXN0IGlu
IHJlc3VsdFtjdXJyZW50VHlwZV0pIHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IHdvcnN0VHlw
ZSA9IGN1cnJlbnRUeXBlOworICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdUeXBlcy5mb3JF
YWNoKHR5cGUgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFt0eXBlXVt0
ZXN0XSAhPT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcnN0VHlw
ZSA9IHR5cGU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBp
ZiAod29yc3RUeXBlID09IGN1cnJlbnRUeXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFt3b3JzdFR5cGVdW3Rlc3RdICs9IHJl
c3VsdFtjdXJyZW50VHlwZV1bdGVzdF07CisgICAgICAgICAgICAgICAgICAgIHRvUmVtb3ZlLnB1
c2godGVzdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRvUmVtb3ZlLmZv
ckVhY2godGVzdCA9PiB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXN1bHRbY3VycmVu
dFR5cGVdW3Rlc3RdOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJlc3VsdC5jb25maWd1cmF0aW9uID0gQ29uZmlndXJhdGlvbi5jb21iaW5l
KC4uLmNvbmZpZ3VyYXRpb25zKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBjb25zdHJ1Y3RvcihzdWl0ZSwgY29uZmlndXJhdGlvbiA9IG51bGwsIGpzb24gPSBudWxsKSB7
CisgICAgICAgIHRoaXMuc3VpdGUgPSBzdWl0ZTsKKyAgICAgICAgdGhpcy5jb25maWd1cmF0aW9u
ID0gY29uZmlndXJhdGlvbiA/IG5ldyBDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pIDogbmV3
IENvbmZpZ3VyYXRpb24oKTsKKworICAgICAgICBFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVzLmZv
ckVhY2godHlwZSA9PiB7CisgICAgICAgICAgICB0aGlzW3R5cGVdID0ge307CisgICAgICAgIH0p
OworICAgICAgICBpZiAoanNvbiA9PT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5hZ2dyZWdh
dGluZyA9IDA7CisgICAgICAgICAgICBjb25zdCBjdXJyZW50VGltZSA9IE1hdGguZmxvb3IoRGF0
ZS5ub3coKSAvIDEwMDApOworICAgICAgICAgICAgdGhpcy5zdGFydF90aW1lX3JhbmdlID0gW2N1
cnJlbnRUaW1lLCAwXTsKKyAgICAgICAgICAgIHRoaXMudXVpZF9yYW5nZSA9IFtjdXJyZW50VGlt
ZSAqIFRJTUVTVEFNUF9UT19VVUlEX01VTFRJUExJRVIsIDBdOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5hZ2dyZWdhdGluZyA9IDE7CisgICAgICAgIHRo
aXMuc3RhcnRfdGltZV9yYW5nZSA9IFtqc29uLnN0YXJ0X3RpbWUsIGpzb24uc3RhcnRfdGltZV07
CisgICAgICAgIHRoaXMudXVpZF9yYW5nZSA9IFtqc29uLnV1aWQsIGpzb24udXVpZF07CisgICAg
ICAgIGZvciAodmFyIHBhcmFtZXRlciBpbiBqc29uKSB7CisgICAgICAgICAgICBpZiAocGFyYW1l
dGVyID09PSAndXVpZCcgfHwgcGFyYW1ldGVyID09PSAnc3RhcnRfdGltZScpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBjb25zdCB0eXBlID0gRXhwZWN0YXRpb25zLnR5
cGVGb3JJZChqc29uW3BhcmFtZXRlcl0pOworICAgICAgICAgICAgdGhpc1t0eXBlXVtwYXJhbWV0
ZXJdID0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICB0b1BhcmFtcygpIHsKKyAgICAgICAgY29u
c3QgcGFyYW1zID0gdGhpcy5jb25maWd1cmF0aW9uLnRvUGFyYW1zKCk7CisgICAgICAgIHBhcmFt
cy5zdWl0ZSA9IFt0aGlzLnN1aXRlXTsKKyAgICAgICAgaWYgKHRoaXMudXVpZF9yYW5nZVswXSA8
PSB0aGlzLnV1aWRfcmFuZ2VbMV0pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnV1aWRfcmFuZ2Vb
MF0gPT09IHRoaXMudXVpZF9yYW5nZVsxXSkKKyAgICAgICAgICAgICAgICBwYXJhbXMudXVpZCA9
IFt0aGlzLnV1aWRfcmFuZ2VbMF1dOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgcGFyYW1zLmFmdGVyX3V1aWQgPSBbdGhpcy51dWlkX3JhbmdlWzBdXTsKKyAgICAgICAgICAg
ICAgICBwYXJhbXMuYmVmb3JlX3V1aWQgPSBbdGhpcy51dWlkX3JhbmdlWzFdXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5zdGFydF90aW1lX3JhbmdlWzBdIDw9
IHRoaXMuc3RhcnRfdGltZV9yYW5nZVsxXSkgeworICAgICAgICAgICAgcGFyYW1zLmFmdGVyX3Rp
bWUgPSBbdGhpcy5zdGFydF90aW1lX3JhbmdlWzBdXTsKKyAgICAgICAgICAgIHBhcmFtcy5iZWZv
cmVfdGltZSA9IFt0aGlzLnN0YXJ0X3RpbWVfcmFuZ2VbMV1dOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBwYXJhbXM7CisgICAgfQorfTsKKworZXhwb3J0IHtGYWlsdXJlc307CkluZGV4OiBU
b29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9pbnZlc3RpZ2F0ZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRp
Yy9qcy9pbnZlc3RpZ2F0ZS5qcwkocmV2aXNpb24gMjYwNzY4KQorKysgVG9vbHMvcmVzdWx0c2Ri
cHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvaW52ZXN0aWdhdGUuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDEyICsyNCwxMyBAQAogaW1wb3J0IHtBcmNoaXZlUm91dGVyfSBmcm9tICcvYXNz
ZXRzL2pzL2FyY2hpdmVSb3V0ZXIuanMnOwogaW1wb3J0IHtET00sIFJFRn0gZnJvbSAnL2xpYnJh
cnkvanMvUmVmLmpzJzsKIGltcG9ydCB7Q29tbWl0QmFua30gZnJvbSAnL2Fzc2V0cy9qcy9jb21t
aXQuanMnOwotaW1wb3J0IHtxdWVyeVRvUGFyYW1zLCBwYXJhbXNUb1F1ZXJ5LCBRdWVyeU1vZGlm
aWVyLCB9IGZyb20gJy9hc3NldHMvanMvY29tbW9uLmpzJzsKK2ltcG9ydCB7cXVlcnlUb1BhcmFt
cywgcGFyYW1zVG9RdWVyeSwgUXVlcnlNb2RpZmllciwgcGVyY2VudGFnZSwgZWxhcHNlZFRpbWV9
IGZyb20gJy9hc3NldHMvanMvY29tbW9uLmpzJzsKIGltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJv
bSAnL2Fzc2V0cy9qcy9jb25maWd1cmF0aW9uLmpzJwogaW1wb3J0IHtFeHBlY3RhdGlvbnN9IGZy
b20gJy9hc3NldHMvanMvZXhwZWN0YXRpb25zLmpzJzsKK2ltcG9ydCB7RmFpbHVyZXN9IGZyb20g
Jy9hc3NldHMvanMvZmFpbHVyZXMuanMnOwogCiBmdW5jdGlvbiBjb21taXRzRm9yVXVpZCh1dWlk
KSB7Ci0gICAgcmV0dXJuIGBDb21taXRzOiAke0NvbW1pdEJhbmsuY29tbWl0c0R1cmluZ1V1aWQo
dXVpZCkubWFwKChjb21taXQpID0+IHsKKyAgICByZXR1cm4gYENvbW1pdHM6ICR7Q29tbWl0QmFu
ay5jb21taXRzRHVyaW5nKHV1aWQpLm1hcCgoY29tbWl0KSA9PiB7CiAgICAgICAgICAgICBjb25z
dCBwYXJhbXMgPSB7CiAgICAgICAgICAgICAgICAgYnJhbmNoOiBjb21taXQuYnJhbmNoID8gW2Nv
bW1pdC5icmFuY2hdIDogYnJhbmNoLAogICAgICAgICAgICAgICAgIHV1aWQ6IFtjb21taXQudXVp
ZF0sCkBAIC03MiwzMyArNzMsNjAgQEAgZnVuY3Rpb24gZWxhcHNlZChkYXRhKQogewogICAgIGlm
IChkYXRhLnRpbWUpCiAgICAgICAgIHJldHVybiBgVG9vayAke2RhdGEudGltZSAvIDEwMDB9IHNl
Y29uZHNgOwotICAgIGlmIChkYXRhLnN0YXRzICYmIGRhdGEuc3RhdHMuc3RhcnRfdGltZSAmJiBk
YXRhLnN0YXRzLmVuZF90aW1lKSB7Ci0gICAgICAgIGNvbnN0IHRpbWUgPSBuZXcgRGF0ZSgoZGF0
YS5zdGF0cy5lbmRfdGltZSAtIGRhdGEuc3RhdHMuc3RhcnRfdGltZSkgKiAxMDAwKTsKLSAgICAg
ICAgbGV0IHJlc3VsdCA9ICdTdWl0ZSB0b29rICc7Ci0gICAgICAgIGlmICh0aW1lLmdldE1pbnV0
ZXMoKSkKLSAgICAgICAgICAgIHJlc3VsdCArPSBgJHt0aW1lLmdldE1pbnV0ZXMoKX06YDsKLSAg
ICAgICAgcmVzdWx0ICs9IGAke3RpbWUuZ2V0U2Vjb25kcygpIDw9IDkgJiYgdGltZS5nZXRNaW51
dGVzKCkgPyAnMCcgOiAnJ30ke3RpbWUuZ2V0U2Vjb25kcygpfS4ke3RpbWUuZ2V0TWlsbGlzZWNv
bmRzKCkgPD0gOTkgPyAnMCcgOiAnJ30ke3RpbWUuZ2V0TWlsbGlzZWNvbmRzKCkgPD0gOSA/ICcw
JyA6ICcnfSR7dGltZS5nZXRNaWxsaXNlY29uZHMoKX0gYDsKLSAgICAgICAgaWYgKHRpbWUuZ2V0
TWludXRlcygpKQotICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGVzIHRvIHJ1bic7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCArPSAnc2Vjb25kcyB0byBydW4nOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBpZiAoZGF0YS5zdGF0cyAmJiBkYXRhLnN0YXRz
LnN0YXJ0X3RpbWUgJiYgZGF0YS5zdGF0cy5lbmRfdGltZSkKKyAgICAgICAgcmV0dXJuIGBTdWl0
ZSB0b29rICR7ZWxhcHNlZFRpbWUoZGF0YS5zdGF0cy5zdGFydF90aW1lLCBkYXRhLnN0YXRzLmVu
ZF90aW1lKX1gOwogICAgIHJldHVybiAnJzsKIH0KIAotZnVuY3Rpb24gcGVyY2VudGFnZSh2YWx1
ZSwgbWF4KQorZnVuY3Rpb24gcHJpb3JpdGl6ZWRGYWlsdXJlcyhmYWlsdXJlcywgbWF4ID0gMCwg
d2lsbEZpbHRlckV4cGVjdGVkID0gZmFsc2UpCiB7Ci0gICAgaWYgKHZhbHVlID09PSBtYXgpCi0g
ICAgICAgIHJldHVybiAnMTAwICUnOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiAn
MCAlJzsKLSAgICBjb25zdCByZXN1bHQgPSBNYXRoLnJvdW5kKHZhbHVlIC8gbWF4ICogMTAwKTsK
LSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuICc8MSAlJzsKLSAgICBpZiAocmVzdWx0
ID09PSAxMDApCi0gICAgICAgIHJldHVybiAnOTkgJSc7Ci0gICAgcmV0dXJuIGAke3Jlc3VsdH0g
JWAKKyAgICBpZiAoZmFpbHVyZXMgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgcmV0dXJuICcnOwor
CisgICAgaWYgKGZhaWx1cmVzID09PSBudWxsKQorICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9
ImxvYWRlciI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3Bpbm5lciI+PC9kaXY+Cisg
ICAgICAgICAgICA8L2Rpdj5gOworICAgIGxldCBmYWlsdXJlc1RvRGlzcGxheSA9IFtdOworICAg
IEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXMuZm9yRWFjaCh0eXBlID0+IHsKKyAgICAgICAgZm9y
IChsZXQgdGVzdE5hbWUgaW4gZmFpbHVyZXNbdHlwZV0pIHsKKyAgICAgICAgICAgIGZhaWx1cmVz
VG9EaXNwbGF5LnB1c2goeworICAgICAgICAgICAgICAgIGZhaWx1cmU6IHR5cGUsCisgICAgICAg
ICAgICAgICAgdGVzdDogdGVzdE5hbWUsCisgICAgICAgICAgICAgICAgY291bnQ6IGZhaWx1cmVz
LmFnZ3JlZ2F0aW5nLAorICAgICAgICAgICAgICAgIGZhaWx1cmVDb3VudDogZmFpbHVyZXNbdHlw
ZV1bdGVzdE5hbWVdLAorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBm
YWlsdXJlc1RvRGlzcGxheS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAgY29uc3QgdHlw
ZUNvbXBhcmUgPSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKEV4cGVjdGF0aW9ucy5mYWls
dXJlVHlwZU1hcFthLmZhaWx1cmVdKSAtIEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoRXhw
ZWN0YXRpb25zLmZhaWx1cmVUeXBlTWFwW2IuZmFpbHVyZV0pOworICAgICAgICBpZiAodHlwZUNv
bXBhcmUpCisgICAgICAgICAgICByZXR1cm4gdHlwZUNvbXBhcmU7CisgICAgICAgIGlmIChhLmZh
aWx1cmVDb3VudCAtIGIuZmFpbHVyZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuIGEuZmFpbHVy
ZUNvdW50IC0gYi5mYWlsdXJlQ291bnQ7CisgICAgICAgIHJldHVybiAoYS50ZXN0KS5sb2NhbGVD
b21wYXJlKGIudGVzdCk7CisgICAgfSk7CisKKyAgICBpZiAobWF4ICYmIGZhaWx1cmVzVG9EaXNw
bGF5Lmxlbmd0aCA+IG1heCkgeworICAgICAgICBmYWlsdXJlc1RvRGlzcGxheSA9IGZhaWx1cmVz
VG9EaXNwbGF5LnNwbGljZSgwLCBtYXgpOworICAgICAgICBmYWlsdXJlc1RvRGlzcGxheVttYXgg
LSAxXSA9IG51bGw7CisgICAgfQorCisKKworICAgIHJldHVybiBgPGRpdj4ke2ZhaWx1cmVzVG9E
aXNwbGF5Lm1hcChmYWlsdXJlID0+IHsKKyAgICAgICAgaWYgKGZhaWx1cmUgPT09IG51bGwpIHsK
KyAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGZhaWx1cmVzLnRvUGFyYW1zKCk7CisgICAgICAg
ICAgICBwYXJhbXMudW5leHBlY3RlZCA9IFt3aWxsRmlsdGVyRXhwZWN0ZWRdOworICAgICAgICAg
ICAgcmV0dXJuIGA8YSBzdHlsZT0ibWFyZ2luLWxlZnQ6IGNhbGModmFyKC0tbWVkaXVtU2l6ZSkg
KyAxNnB4KSIgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ii9pbnZlc3RpZ2F0ZT8ke3BhcmFtc1RvUXVl
cnkocGFyYW1zKX0iPk1vcmUuLi48L2E+YDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYDxk
aXY+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG90ICR7ZmFpbHVyZS5mYWlsdXJlfSBz
bWFsbCI+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbnkgdGV4dCIgc3R5bGU9
ImZvbnQtd2VpZ2h0OiBub3JtYWw7bWFyZ2luLXRvcDogMHB4Ij4ke0V4cGVjdGF0aW9ucy5zeW1i
b2xNYXBbZmFpbHVyZS5mYWlsdXJlXX08L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAg
ICAgICAgICAgICAgICA8YSBjbGFzcz0idGV4dCBibG9jayIgc3R5bGU9IndpZHRoOiBjYWxjKDEw
MCUgLSB2YXIoLS1tZWRpdW1TaXplKSAtIDE2cHgpOyBvdmVyZmxvdzogaGlkZGVuOyB3aGl0ZS1z
cGFjZTogbm93cmFwOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsiIGhyZWY9Ii8/c3VpdGU9JHtm
YWlsdXJlcy5zdWl0ZX0mdGVzdD0ke2ZhaWx1cmUudGVzdH0iPiR7ZmFpbHVyZS50ZXN0fTwvYT4K
KyAgICAgICAgICAgIDwvZGl2PmA7CisgICAgfSkuam9pbignJyl9PC9kaXY+YDsKIH0KIAogZnVu
Y3Rpb24gcmVzdWx0c0ZvckRhdGEoZGF0YSwgd2lsbEZpbHRlckV4cGVjdGVkID0gZmFsc2UpCkBA
IC0xMTAsMzQgKzEzOCwzMyBAQCBmdW5jdGlvbiByZXN1bHRzRm9yRGF0YShkYXRhLCB3aWxsRmls
dGVyCiAgICAgICAgIHRlc3RzUmFuID0gZGF0YS5zdGF0cy50ZXN0c19ydW47CiAgICAgICAgIHRv
dGFsVGVzdHMgPSBkYXRhLnN0YXRzLnRlc3RzX3J1biArIChkYXRhLnN0YXRzLnRlc3RzX3NraXBw
ZWQgPyBkYXRhLnN0YXRzLnRlc3RzX3NraXBwZWQgOiAwKTsKICAgICB9Ci0gICAgcmVzdWx0LnB1
c2goYFJhbiAke3Rlc3RzUmFuLnRvTG9jYWxlU3RyaW5nKCl9IG9mICR7dG90YWxUZXN0cy50b0xv
Y2FsZVN0cmluZygpfSB0ZXN0c2ApOworICAgIGxldCBkb3RzRGlzcGxheWVkID0gMDsKKyAgICBy
ZXN1bHQucHVzaChgPGRpdj5SYW4gJHt0ZXN0c1Jhbi50b0xvY2FsZVN0cmluZygpfSBvZiAke3Rv
dGFsVGVzdHMudG9Mb2NhbGVTdHJpbmcoKX0gdGVzdHNgKTsKICAgICBpZiAoZGF0YS5hY3R1YWwp
IHsKICAgICAgICAgY29uc3QgdHlwZSA9IEV4cGVjdGF0aW9ucy50eXBlRm9ySWQoZGF0YS5hY3R1
YWwpOwotICAgICAgICByZXN1bHQucHVzaChgPGRpdj4KLSAgICAgICAgICAgICAgICBBY3R1YWw6
ICR7ZGF0YS5hY3R1YWx9Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG90ICR7dHlwZX0g
c21hbGwiPgotICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxl
PSJmb250LXdlaWdodDogbm9ybWFsO21hcmdpbi10b3A6IDBweCI+JHtFeHBlY3RhdGlvbnMuc3lt
Ym9sTWFwW3R5cGVdfTwvZGl2PgotICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICArK2Rv
dHNEaXNwbGF5ZWQ7CisgICAgICAgIHJlc3VsdC5wdXNoKGBBY3R1YWw6ICR7ZGF0YS5hY3R1YWx9
CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb3QgJHt0eXBlfSBzbWFsbCI+CisgICAgICAgICAg
ICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDtt
YXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcFt0eXBlXX08L2Rpdj4KICAg
ICAgICAgICAgIDwvZGl2PmApOwogICAgIH0KICAgICBpZiAoZGF0YS5leHBlY3RlZCkgewogICAg
ICAgICBjb25zdCB0eXBlID0gRXhwZWN0YXRpb25zLnR5cGVGb3JJZChkYXRhLmV4cGVjdGVkKTsK
LSAgICAgICAgcmVzdWx0LnB1c2goYDxkaXY+Ci0gICAgICAgICAgICAgICAgRXhwZWN0ZWQ6ICR7
ZGF0YS5leHBlY3RlZH0KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb3QgJHt0eXBlfSBz
bWFsbCI+Ci0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbnkgdGV4dCIgc3R5bGU9
ImZvbnQtd2VpZ2h0OiBub3JtYWw7bWFyZ2luLXRvcDogMHB4Ij4ke0V4cGVjdGF0aW9ucy5zeW1i
b2xNYXBbdHlwZV19PC9kaXY+Ci0gICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICsrZG90
c0Rpc3BsYXllZDsKKyAgICAgICAgcmVzdWx0LnB1c2goYEV4cGVjdGVkOiAke2RhdGEuZXhwZWN0
ZWR9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb3QgJHt0eXBlfSBzbWFsbCI+CisgICAgICAg
ICAgICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1h
bDttYXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcFt0eXBlXX08L2Rpdj4K
ICAgICAgICAgICAgIDwvZGl2PmApOwogICAgIH0KICAgICBpZiAoZGF0YS5zdGF0cyAmJiBkYXRh
LnN0YXRzLnRlc3RzX3J1bikgewogICAgICAgICBjb25zdCBzdWNjZWVkZWQgPSBkYXRhLnN0YXRz
LnRlc3RzX3J1biAtIGRhdGEuc3RhdHNbYHRlc3RzJHt3aWxsRmlsdGVyRXhwZWN0ZWQgPyAnX3Vu
ZXhwZWN0ZWRfJyA6ICdfJ31mYWlsZWRgXTsKLSAgICAgICAgaWYgKHN1Y2NlZWRlZCkKLSAgICAg
ICAgICAgIHJlc3VsdC5wdXNoKGA8ZGl2PgotICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNz
PSJkb3Qgc3VjY2VzcyBzbWFsbCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNz
PSJ0aW55IHRleHQiIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsO21hcmdpbi10b3A6IDBweCI+
JHtFeHBlY3RhdGlvbnMuc3ltYm9sTWFwLnN1Y2Nlc3N9PC9kaXY+Ci0gICAgICAgICAgICAgICAg
ICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICAke2RhdGEuc3RhcnRfdGltZSA/IHN1Y2Nl
ZWRlZC50b0xvY2FsZVN0cmluZygpIDogcGVyY2VudGFnZShzdWNjZWVkZWQsIGRhdGEuc3RhdHMu
dGVzdHNfcnVuKX0gcGFzc2VkCi0gICAgICAgICAgICAgICAgPC9kaXY+YCk7CisgICAgICAgIGlm
IChzdWNjZWVkZWQpIHsKKyAgICAgICAgICAgICsrZG90c0Rpc3BsYXllZDsKKyAgICAgICAgICAg
IHJlc3VsdC5wdXNoKGA8ZGl2IGNsYXNzPSJkb3Qgc3VjY2VzcyBzbWFsbCI+CisgICAgICAgICAg
ICAgICAgICAgIDxkaXYgY2xhc3M9InRpbnkgdGV4dCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3Jt
YWw7bWFyZ2luLXRvcDogMHB4Ij4ke0V4cGVjdGF0aW9ucy5zeW1ib2xNYXAuc3VjY2Vzc308L2Rp
dj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAke2RhdGEuc3RhcnRf
dGltZSA/IHN1Y2NlZWRlZC50b0xvY2FsZVN0cmluZygpIDogcGVyY2VudGFnZShzdWNjZWVkZWQs
IGRhdGEuc3RhdHMudGVzdHNfcnVuKX0gcGFzc2VkYCk7CisgICAgICAgIH0KICAgICB9CiAgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCBFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVzLmxlbmd0aDsgaSsr
KSB7CiAgICAgICAgIGlmICghZGF0YS5zdGF0cykKQEAgLTE0OCwxMyArMTc1LDE0IEBAIGZ1bmN0
aW9uIHJlc3VsdHNGb3JEYXRhKGRhdGEsIHdpbGxGaWx0ZXIKICAgICAgICAgICAgIHZhbHVlIC09
IGRhdGEuc3RhdHNbYHRlc3RzJHt3aWxsRmlsdGVyRXhwZWN0ZWQgPyAnX3VuZXhwZWN0ZWRfJyA6
ICdfJ30ke0V4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXNbaSArIDFdfWBdOwogICAgICAgICBpZiAo
IXZhbHVlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJlc3VsdC5wdXNoKGA8ZGl2
PgotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvdCAke3R5cGV9IHNtYWxsIj4KLSAgICAg
ICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0IiBzdHlsZT0iZm9udC13ZWlnaHQ6
IG5vcm1hbDttYXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcFt0eXBlXX08
L2Rpdj4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICAke2RhdGEuc3Rh
cnRfdGltZSA/IHZhbHVlLnRvTG9jYWxlU3RyaW5nKCkgOiBwZXJjZW50YWdlKHZhbHVlLCBkYXRh
LnN0YXRzLnRlc3RzX3J1bil9ICR7dHlwZX0KLSAgICAgICAgICAgIDwvZGl2PmApOworICAgICAg
ICArK2RvdHNEaXNwbGF5ZWQ7CisgICAgICAgIHJlc3VsdC5wdXNoKGA8ZGl2IGNsYXNzPSJkb3Qg
JHt0eXBlfSBzbWFsbCI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0IiBz
dHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDttYXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRpb25z
LnN5bWJvbE1hcFt0eXBlXX08L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAg
JHtkYXRhLnN0YXJ0X3RpbWUgPyB2YWx1ZS50b0xvY2FsZVN0cmluZygpIDogcGVyY2VudGFnZSh2
YWx1ZSwgZGF0YS5zdGF0cy50ZXN0c19ydW4pfSAke3R5cGV9YCk7CiAgICAgfQorICAgIHJlc3Vs
dC5wdXNoKCc8L2Rpdj4nKTsKKyAgICByZXN1bHQucHVzaChwcmlvcml0aXplZEZhaWx1cmVzKGRh
dGEuZmFpbHVyZXMsIE1hdGgubWF4KDYgLSBkb3RzRGlzcGxheWVkLCAxKSwgd2lsbEZpbHRlckV4
cGVjdGVkKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzAwLDggKzMyOCw1MCBAQCBj
bGFzcyBfSW52ZXN0aWdhdGVEcmF3ZXIgewogICAgICAgICB0aGlzLnN1aXRlID0gc3VpdGU7CiAg
ICAgICAgIHRoaXMuYWdyZWdhdGUgPSBhZ3JlZ2F0ZURhdGE7CiAgICAgICAgIHRoaXMuZGF0YSA9
IGFsbERhdGE7CisgICAgICAgIHRoaXMuZGlzcGF0Y2goKTsKICAgICAgICAgdGhpcy5zZWxlY3Qo
MCk7CiAgICAgfQorICAgIGRpc3BhdGNoKCkgeworICAgICAgICBpZiAoIXRoaXMuZGF0YS5sZW5n
dGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhp
cy5kYXRhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YVtpXS5zdGF0
cykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmRh
dGEuZm9yRWFjaChkYXR1bSA9PiB7CisgICAgICAgICAgICBkYXR1bS5mYWlsdXJlcyA9IG51bGw7
CisgICAgICAgIH0pOworICAgICAgICB0aGlzLmFncmVnYXRlLmZhaWx1cmVzID0gbnVsbDsKKwor
ICAgICAgICBjb25zdCBicmFuY2ggPSBxdWVyeVRvUGFyYW1zKGRvY3VtZW50LlVSTC5zcGxpdCgn
PycpWzFdKS5icmFuY2g7CisgICAgICAgIGNvbnN0IHBhcmFtcyA9IHsKKyAgICAgICAgICAgIHVu
ZXhwZWN0ZWQ6IFt0aGlzLndpbGxGaWx0ZXJFeHBlY3RlZF0sCisgICAgICAgICAgICB1dWlkOiBb
dGhpcy5hZ3JlZ2F0ZS51dWlkXSwKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5hZ3JlZ2F0
ZS5zdGFydF90aW1lKSB7CisgICAgICAgICAgICBwYXJhbXMuYmVmb3JlX3RpbWUgPSBbdGhpcy5h
Z3JlZ2F0ZS5zdGFydF90aW1lXTsKKyAgICAgICAgICAgIHBhcmFtcy5hZnRlcl90aW1lID0gW3Ro
aXMuYWdyZWdhdGUuc3RhcnRfdGltZV07CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJyYW5jaCkK
KyAgICAgICAgICAgIHBhcmFtcy5icmFuY2ggPSBbYnJhbmNoXTsKKworICAgICAgICBGYWlsdXJl
cy5mcm9tRW5kcG9pbnQoCisgICAgICAgICAgICB0aGlzLnN1aXRlLAorICAgICAgICAgICAgdGhp
cy5hZ3JlZ2F0ZS5jb25maWd1cmF0aW9uLAorICAgICAgICAgICAgcGFyYW1zLAorICAgICAgICAp
LnRoZW4oZmFpbHVyZXMgPT4geworICAgICAgICAgICAgdGhpcy5hZ3JlZ2F0ZS5mYWlsdXJlcyA9
IEZhaWx1cmVzLmNvbWJpbmUoLi4uZmFpbHVyZXMpOworICAgICAgICAgICAgdGhpcy5kYXRhLmZv
ckVhY2goZGF0dW0gPT4geworICAgICAgICAgICAgICAgIGRhdHVtLmZhaWx1cmVzID0gbmV3IEZh
aWx1cmVzKHRoaXMuc3VpdGUsIGRhdHVtLmNvbmZpZ3VyYXRpb24pOworICAgICAgICAgICAgICAg
IGZhaWx1cmVzLmZvckVhY2goZmFpbHVyZSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChk
YXR1bS5jb25maWd1cmF0aW9uLmNvbXBhcmUoZmFpbHVyZS5jb25maWd1cmF0aW9uKSA9PT0gMCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRhdHVtLmZhaWx1cmVzID0gRmFpbHVyZXMuY29tYmlu
ZShkYXR1bS5mYWlsdXJlcywgZmFpbHVyZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0KHRoaXMuc2VsZWN0ZWQpOworICAgICAg
ICB9KTsKKyAgICB9CiAgICAgY29sbGFwc2UoKSB7CiAgICAgICAgIGlmICghdGhpcy5pc1JlbmRl
cmVkKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMTIsNiArMzgyLDkgQEAgY2xhc3MgX0lu
dmVzdGlnYXRlRHJhd2VyIHsKICAgICAgICAgdGhpcy5zZWxlY3QoMCk7CiAgICAgfQogICAgIHNl
bGVjdChpbmRleCkgeworICAgICAgICBpZiAoIXRoaXMucmVmKQorICAgICAgICAgICAgcmV0dXJu
OworCiAgICAgICAgIGxldCBjYW5kaWRhdGVzID0gdGhpcy5kYXRhLmxlbmd0aDsKICAgICAgICAg
aWYgKHRoaXMuYWdyZWdhdGUgJiYgdGhpcy5kYXRhLmxlbmd0aCA+IDEpCiAgICAgICAgICAgICBj
YW5kaWRhdGVzICs9IDE7CkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3
L3N0YXRpYy9qcy90aW1lbGluZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9yZXN1bHRzZGJweS9y
ZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qcwkocmV2aXNpb24gMjYwNzY4KQor
KysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvdGltZWxpbmUu
anMJKHdvcmtpbmcgY29weSkKQEAgLTY0NSw3ICs2NDUsNyBAQCBjbGFzcyBUaW1lbGluZUZyb21F
bmRwb2ludCB7CiAgICAgICAgICAgICAgICAgICAgIGA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAg
ICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YS5zdGFydF90aW1lID8gYDxhIGhyZWY9Ii91cmxz
L2J1aWxkPyR7cGFyYW1zVG9RdWVyeShidWlsZFBhcmFtcyl9IiB0YXJnZXQ9Il9ibGFuayI+VGVz
dCBydW48L2E+IEAgJHtuZXcgRGF0ZShkYXRhLnN0YXJ0X3RpbWUgKiAxMDAwKS50b0xvY2FsZVN0
cmluZygpfTxicj5gIDogJyd9CiAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGEuc3RhcnRf
dGltZSAmJiBBcmNoaXZlUm91dGVyLmhhc0FyY2hpdmUoc2VsZi5zdWl0ZSwgZGF0YS5hY3R1YWwp
ID8gYDxhIGhyZWY9Ii9hcmNoaXZlLyR7QXJjaGl2ZVJvdXRlci5wYXRoRm9yKHNlbGYuc3VpdGUs
IGRhdGEuYWN0dWFsLCBzZWxmLnRlc3QpfT8ke3BhcmFtc1RvUXVlcnkoYnVpbGRQYXJhbXMpfSIg
dGFyZ2V0PSJfYmxhbmsiPiR7QXJjaGl2ZVJvdXRlci5sYWJlbEZvcihzZWxmLnN1aXRlLCBkYXRh
LmFjdHVhbCl9PC9hPjxicj5gIDogJyd9Ci0gICAgICAgICAgICAgICAgICAgICAgICBDb21taXRz
OiAke0NvbW1pdEJhbmsuY29tbWl0c0R1cmluZ1V1aWQoZGF0YS51dWlkKS5tYXAoKGNvbW1pdCkg
PT4geworICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWl0czogJHtDb21taXRCYW5rLmNvbW1p
dHNEdXJpbmcoZGF0YS51dWlkKS5tYXAoKGNvbW1pdCkgPT4gewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCBwYXJhbXMgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyYW5jaDogY29tbWl0LmJyYW5jaCA/IFtjb21taXQuYnJhbmNoXSA6IGJyYW5jaCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXVpZDogW2NvbW1pdC51dWlkXSwKQEAgLTY1OCw3
ICs2NTgsNyBAQCBjbGFzcyBUaW1lbGluZUZyb21FbmRwb2ludCB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnRpYWxDb25maWd1cmF0
aW9ufQogICAgICAgICAgICAgICAgICAgICAgICAgPGJyPgotCisgICAgICAgICAgICAgICAgICAg
ICAgICAke2RhdGEuc3RhdHMgPyBgPGEgaHJlZj0iL2ludmVzdGlnYXRlPyR7cGFyYW1zVG9RdWVy
eShidWlsZFBhcmFtcyl9IiB0YXJnZXQ9Il9ibGFuayI+SW52ZXN0aWdhdGUgZmFpbHVyZXM8L2E+
PGJyPmAgOiAnJ30KICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YS5leHBlY3RlZCA/IGBF
eHBlY3RlZDogJHtkYXRhLmV4cGVjdGVkfTxicj5gIDogJyd9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAke2RhdGEuYWN0dWFsID8gYEFjdHVhbDogJHtkYXRhLmFjdHVhbH08YnI+YCA6ICcnfQog
ICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gLApAQCAtODk0LDggKzg5NCw5IEBAIGZ1bmN0aW9u
IExlZ2VuZChjYWxsYmFjaz1udWxsLCBwbHVyYWw9ZmEKICAgICAgICAgICAgICAgICAgICAgICAg
IHdpbGxGaWx0ZXJFeHBlY3RlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB1cGRhdGVM
YWJlbEV2ZW50cy5hZGQod2lsbEZpbHRlckV4cGVjdGVkKTsKICAgICAgICAgICAgICAgICAgICAg
SW52ZXN0aWdhdGVEcmF3ZXIud2lsbEZpbHRlckV4cGVjdGVkID0gd2lsbEZpbHRlckV4cGVjdGVk
OworICAgICAgICAgICAgICAgICAgICBJbnZlc3RpZ2F0ZURyYXdlci5kaXNwYXRjaCgpOwogICAg
ICAgICAgICAgICAgICAgICBJbnZlc3RpZ2F0ZURyYXdlci5zZWxlY3QoSW52ZXN0aWdhdGVEcmF3
ZXIuc2VsZWN0ZWQpOwotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAg
ICAgICAgICAgICBjYWxsYmFjayh3aWxsRmlsdGVyRXhwZWN0ZWQpOwogICAgICAgICAgICAgICAg
IH07CiAgICAgICAgICAgICB9LAogICAgICAgICB9KTsKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5
L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL2ludmVzdGlnYXRlLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvaW52ZXN0aWdh
dGUuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92
aWV3L3RlbXBsYXRlcy9pbnZlc3RpZ2F0ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTA4IEBACis8IS0tCisgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKworIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIGFyZSBtZXQ6CisgMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KworIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiAiQVMgSVMiIEFORCBB
TlkKKyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKy0tPgorCit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9Cit7JSBibG9jayBoZWFkICV9Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJhc3NldHMvY3NzL3Rp
bWVsaW5lLmNzcyI+CisKKzxzY3JpcHQgdHlwZT0ibW9kdWxlIj4KK2ltcG9ydCB7QXJjaGl2ZVJv
dXRlcn0gZnJvbSAnL2Fzc2V0cy9qcy9hcmNoaXZlUm91dGVyLmpzJzsKK2ltcG9ydCB7Q29tbWl0
QmFua30gZnJvbSAnL2Fzc2V0cy9qcy9jb21taXQuanMnOworaW1wb3J0IHtFcnJvckRpc3BsYXks
IFF1ZXJ5TW9kaWZpZXIsIHBhcmFtc1RvUXVlcnksIHF1ZXJ5VG9QYXJhbXMsIHBlcmNlbnRhZ2Us
IGVsYXBzZWRUaW1lfSBmcm9tICcvYXNzZXRzL2pzL2NvbW1vbi5qcyc7CitpbXBvcnQge0NvbmZp
Z3VyYXRpb259IGZyb20gJy9hc3NldHMvanMvY29uZmlndXJhdGlvbi5qcyc7CitpbXBvcnQge0V4
cGVjdGF0aW9uc30gZnJvbSAnL2Fzc2V0cy9qcy9leHBlY3RhdGlvbnMuanMnOworaW1wb3J0IHtE
cmF3ZXIsIEJyYW5jaFNlbGVjdG9yLCBDb25maWd1cmF0aW9uU2VsZWN0b3JzfSBmcm9tICcvYXNz
ZXRzL2pzL2RyYXdlci5qcyc7CitpbXBvcnQge0xlZ2VuZH0gZnJvbSAnL2Fzc2V0cy9qcy90aW1l
bGluZS5qcyc7CitpbXBvcnQge1Rvb2xUaXB9IGZyb20gJy9hc3NldHMvanMvdG9vbHRpcC5qcyc7
CitpbXBvcnQge0ZhaWx1cmVzfSBmcm9tICcvYXNzZXRzL2pzL2ZhaWx1cmVzLmpzJzsKK2ltcG9y
dCB7RE9NLCBSRUYsIEV2ZW50U3RyZWFtfSBmcm9tICcvbGlicmFyeS9qcy9SZWYuanMnOworCitj
b25zdCBERUZBVUxUX0xJTUlUID0gMTAwOworY29uc3QgU1VJVEVTID0gSlNPTi5wYXJzZSgne3sg
c3VpdGVzfHNhZmUgfX0nKTsKKworY29uc3Qgdmlld3MgPSBbXTsKK2xldCBhZ3JlZ2F0ZUNvbm5m
aWd1cmF0aW9uID0gQ29uZmlndXJhdGlvbi5mcm9tUXVlcnkoKTsKK2xldCByYW5nZVBhcmFtcyA9
IHt9OworCitjb25zdCB1bmV4cGVjdGVkUXVlcnkgPSBuZXcgUXVlcnlNb2RpZmllcigndW5leHBl
Y3RlZCcpOworZnVuY3Rpb24gd2lsbEZpbHRlckV4cGVjdGVkKCkgeworICAgIGNvbnN0IGN1cnJl
bnQgPSB1bmV4cGVjdGVkUXVlcnkuY3VycmVudCgpOworICAgIGlmICghY3VycmVudC5sZW5ndGgp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChbJ3RydWUnLCAnVFJVRScsICd5ZXMnLCAn
WUVTJywgJzEnXS5pbmNsdWRlcyhjdXJyZW50W2N1cnJlbnQubGVuZ3RoIC0gMV0pKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKworY2xhc3MgU3VpdGVGYWls
dXJlc1ZpZXcgeworICAgIGNvbnN0cnVjdG9yKHN1aXRlKSB7CisgICAgICAgIHRoaXMuc3VpdGUg
PSBzdWl0ZTsKKyAgICAgICAgdGhpcy5kYXRhRm9yQ29uZmlnID0ge307CisKKyAgICAgICAgdGhp
cy5yZWYgPSBSRUYuY3JlYXRlUmVmKHsKKyAgICAgICAgICAgIHN0YXRlOiB7ZGlzcGxheWVkOiB0
cnVlfSwKKyAgICAgICAgICAgIG9uU3RhdGVVcGRhdGU6IChlbGVtZW50LCBkaWZmLCBzdGF0ZSkg
PT4geworICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IGRpZmYuZGlzcGxh
eWVkID8gbnVsbCA6ICdub25lJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAg
IHRoaXMuc2VsZWN0Q29uZmlndXJhdGlvbnMgPSBSRUYuY3JlYXRlUmVmKHsKKyAgICAgICAgICAg
IG9uRWxlbWVudE1vdW50OiAoZWxlbWVudCkgPT4geworICAgICAgICAgICAgICAgIGVsZW1lbnQu
cGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAg
ICAgICAgICAgICAgZWxlbWVudC5vbmNoYW5nZSA9ICgpID0+IHsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5zZWxlY3RlZCA9IHBhcnNlSW50KGVsZW1lbnQudmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICB0aGlzLnNlbGVjdCh0aGlzLnNlbGVjdGVkKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgb25TdGF0ZVVwZGF0ZTogKGVsZW1lbnQsIHN0YXRl
KSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZSB8fCBzdGF0ZS5sZW5ndGggPD0gMSkg
eworICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVu
dC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnRFbGVtZW50
LnBhcmVudEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IG51bGw7CisgICAgICAgICAgICAgICAgY29u
c3QgY29uZmlndXJhdGlvbnMgPSBbLi4uc3RhdGVdOworICAgICAgICAgICAgICAgIGNvbmZpZ3Vy
YXRpb25zLnNvcnQoKGEsIGIpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEudG9L
ZXkoKS5sb2NhbGVDb21wYXJlKGIudG9LZXkoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgY29uZmlndXJhdGlvbnMudW5zaGlmdChDb25maWd1cmF0aW9uLmNvbWJpbmUo
Li4uc3RhdGUpKTsKKworICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDA7CisgICAgICAgICAg
ICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBjb25maWd1cmF0aW9ucy5tYXAoY29uZmlndXJhdGlv
biA9PiB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPG9wdGlvbiB2YWx1ZT0iJHtpbmRl
eH0iJHtpbmRleCA9PSB0aGlzLnNlbGVjdGVkID8gJyBzZWxlY3RlZCcgOiAnJ30+JHtjb25maWd1
cmF0aW9ufSR7aW5kZXgrKyA/ICcnIDogJyAoQWdyZWdhdGVkKSd9PC9vcHRpb24+YDsKKyAgICAg
ICAgICAgICAgICB9KS5qb2luKCcnKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0pOworCisg
ICAgICAgIHRoaXMucmVzdWx0VmlldyA9IFJFRi5jcmVhdGVSZWYoeworICAgICAgICAgICAgc3Rh
dGU6IHtjb25maWd1cmF0aW9uOiBudWxsLCByZXN1bHRzOiBbXSwgZmFpbHVyZXM6IFtdfSwKKyAg
ICAgICAgICAgIG9uU3RhdGVVcGRhdGU6IChlbGVtZW50LCBkaWZmLCBzdGF0ZSkgPT4geworICAg
ICAgICAgICAgICAgIGlmICghZGlmZi5jb25maWd1cmF0aW9uIHx8ICFkaWZmLnJlc3VsdHMgfHwg
IWRpZmYuZmFpbHVyZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgRE9NLmluamVjdChlbGVtZW50
LCAnPGRpdiBjbGFzcz0ibG9hZGVyIj48ZGl2IGNsYXNzPSJzcGlubmVyIj48L2Rpdj48L2Rpdj4n
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGNvbnN0IGFncmVnYXRlZFN0YXRzID0geworICAgICAgICAgICAgICAgICAg
ICB0ZXN0c19ydW46IGRpZmYucmVzdWx0cy5tYXAocmVzdWx0ID0+IHJlc3VsdC5zdGF0cy50ZXN0
c19ydW4pLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApLAorICAgICAgICAgICAgICAgICAgICB0
ZXN0c19za2lwcGVkOiBkaWZmLnJlc3VsdHMubWFwKHJlc3VsdCA9PiByZXN1bHQuc3RhdHMudGVz
dHNfc2tpcHBlZCkucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCksCisgICAgICAgICAgICAgICAg
fTsKKworICAgICAgICAgICAgICAgIGxldCBsYXN0VmFsdWUgPSAwOworICAgICAgICAgICAgICAg
IGNvbnN0IHdpbGxGaWx0ZXJFeHBlY3RlZFZhbHVlID0gd2lsbEZpbHRlckV4cGVjdGVkKCk7Cisg
ICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXMubGVu
Z3RoIC0gMTsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSB3
aWxsRmlsdGVyRXhwZWN0ZWRWYWx1ZSA/IGB0ZXN0c191bmV4cGVjdGVkXyR7RXhwZWN0YXRpb25z
LmZhaWx1cmVUeXBlc1tpXX1gIDogYHRlc3RzXyR7RXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlc1tp
XX1gOworICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21iaW5lZCA9IGRpZmYucmVzdWx0cy5t
YXAocmVzdWx0ID0+IHJlc3VsdC5zdGF0c1trZXldID8gcmVzdWx0LnN0YXRzW2tleV0gOiAwKS5y
ZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgYWdyZWdhdGVk
U3RhdHNbYHRlc3RzXyR7RXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlc1tpXX1gXSA9IE1hdGgubWF4
KGNvbWJpbmVkIC0gbGFzdFZhbHVlLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVl
ID0gY29tYmluZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFncmVnYXRl
ZFN0YXRzLnRlc3RzX3N1Y2Nlc3MgPSBNYXRoLm1heChhZ3JlZ2F0ZWRTdGF0cy50ZXN0c19ydW4g
LSBsYXN0VmFsdWUsIDApOworCisgICAgICAgICAgICAgICAgRE9NLmluamVjdChlbGVtZW50LCBg
PGRpdiBjbGFzcz0icm93Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNv
bC1zLSR7ZGlmZi5yZXN1bHRzLmxlbmd0aCA9PT0gMSA/ICcxMicgOiAnNid9IGxpc3QiPgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Iml0ZW0iPgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8Yj5Db25maWd1cmF0aW9uPC9iPgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0IGJsb2NrIiBzdHlsZT0id2lkdGg6IDEw
MCU7IG92ZXJmbG93OiBoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IHRleHQtb3ZlcmZsb3c6
IGVsbGlwc2lzOyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RpZmYu
Y29uZmlndXJhdGlvbn0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPGRpdiBjbGFzcz0iaXRlbSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDxiPkNvbXBvc2l0aW9uPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2
PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJpc2VkIG9mICR7ZGlm
Zi5yZXN1bHRzLmxlbmd0aH0gcnVuJHtkaWZmLnJlc3VsdHMubGVuZ3RoID09PSAxID8gJycgOiAn
cyd9IHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeygoKSA9PiB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1pblV1aWQgPSBN
YXRoLnJvdW5kKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxldCBtYXhVdWlkID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaWZmLnJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4gewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5VdWlkID0gTWF0
aC5taW4obWluVXVpZCwgcmVzdWx0LnV1aWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXhVdWlkID0gTWF0aC5tYXgobWF4VXVpZCwgcmVzdWx0LnV1aWQp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtaW5VdWlkID4gbWF4VXVpZCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdpbnZhbGlk
IGNvbW1pdCByYW5nZSc7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjb21taXRzID0gQ29tbWl0QmFuay5jb21taXRzRHVyaW5nKG1pblV1aWQsIG1heFV1
aWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29tbWl0
cy5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAndW5rbm93biBjb21taXRzJzsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGJyYW5jaGVzID0gbmV3IFNldChjb21taXRzLm1hcChjb21taXQgPT4g
Y29tbWl0LmJyYW5jaCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyYW5jaGVzLmRlbGV0ZSgndHJ1bmsnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmFuY2hlcy5kZWxldGUoJ21hc3RlcicpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVwb3NpdG9yaWVzID0gbmV3IFNldChjb21t
aXRzLm1hcChjb21taXQgPT4gY29tbWl0LnJlcG9zaXRvcnlfaWQpKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1pdFBhcmFtcyA9IHt9OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicmFuY2hlcy5zaXplKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRQYXJhbXNb
J2JyYW5jaCddID0gWy4uLmJyYW5jaGVzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb21taXRQYXJhbXMuYWZ0ZXJfdXVpZCA9IFttaW5VdWlkXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRQYXJhbXMuYmVmb3JlX3V1aWQg
PSBbbWF4VXVpZF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gYDxhIGhyZWY9Ii9jb21taXRzPyR7cGFyYW1zVG9RdWVyeShjb21taXRQYXJhbXMpfSI+
JHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0cy5s
ZW5ndGggPT0gcmVwb3NpdG9yaWVzLnNpemUgPworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29tbWl0cy5yZXZlcnNlKCkubWFwKGNvbW1pdCA9PiBjb21t
aXQuaWQuc3Vic3RyaW5nKDAsMTIpKS5qb2luKCcsICcpIDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2NvbW1pdHMubGVuZ3RofSBjb21taXRzYAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH08L2E+YDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Iml0ZW0iPgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8Yj5SZXN1bHRzPC9iPgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFu
ICR7YWdyZWdhdGVkU3RhdHMudGVzdHNfcnVufSBvZiAke2FncmVnYXRlZFN0YXRzLnRlc3RzX3Nr
aXBwZWQgKyBhZ3JlZ2F0ZWRTdGF0cy50ZXN0c19ydW59IHRlc3RzCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoJHtwZXJjZW50YWdlKGFncmVnYXRlZFN0YXRzLnRlc3RzX3J1
biwgYWdyZWdhdGVkU3RhdHMudGVzdHNfc2tpcHBlZCArIGFncmVnYXRlZFN0YXRzLnRlc3RzX3J1
bil9KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtPYmplY3Qua2V5cyhFeHBlY3RhdGlvbnMuY29s
b3JNYXAoKSkubWFwKHR5cGUgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghYWdyZWdhdGVkU3RhdHNbYHRlc3RzXyR7dHlwZX1gXSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0iZG90ICR7dHlw
ZX0gc21hbGwiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDttYXJn
aW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcFt0eXBlXX08L2Rpdj4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICR7ZGlmZi5yZXN1
bHRzLmxlbmd0aCA9PT0gMSA/IGFncmVnYXRlZFN0YXRzW2B0ZXN0c18ke3R5cGV9YF0gOiBwZXJj
ZW50YWdlKGFncmVnYXRlZFN0YXRzW2B0ZXN0c18ke3R5cGV9YF0sIGFncmVnYXRlZFN0YXRzLnRl
c3RzX3J1bil9ICR7dHlwZSA9PT0gJ3N1Y2Nlc3MnID8gJ3Bhc3NlZCcgOiB0eXBlfTxicj5gOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9pbignJyl9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGlmZi5yZXN1bHRzLmxl
bmd0aCA9PT0gMSA/IGA8ZGl2IGNsYXNzPSJpdGVtIj4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPGI+VGVzdCBSdW48L2I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDxkaXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RpZmYucmVzdWx0
c1swXS5zdGFydF90aW1lID8gKCgpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBicmFuY2ggPSBxdWVyeVRvUGFyYW1zKGRvY3VtZW50LlVSTC5zcGxp
dCgnPycpWzFdKS5icmFuY2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgYnVpbGRQYXJhbXMgPSBkaWZmLmNvbmZpZ3VyYXRpb24udG9QYXJhbXMoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1snc3VpdGUn
XSA9IFt0aGlzLnN1aXRlXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBidWlsZFBhcmFtc1sndXVpZCddID0gW2RpZmYucmVzdWx0c1swXS51dWlkXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1snYWZ0ZXJfdGltZSdd
ID0gW2RpZmYucmVzdWx0c1swXS5zdGFydF90aW1lXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1snYmVmb3JlX3RpbWUnXSA9IFtkaWZmLnJlc3Vs
dHNbMF0uc3RhcnRfdGltZV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGJyYW5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnVpbGRQYXJhbXNbJ2JyYW5jaCddID0gYnJhbmNoOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gcGFyYW1zVG9RdWVyeShidWlsZFBhcmFt
cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9
IGA8YSBocmVmPSIvdXJscy9idWlsZD8ke3F1ZXJ5fSIgdGFyZ2V0PSJfYmxhbmsiPlRlc3QgcnVu
PC9hPiBAICR7bmV3IERhdGUoZGlmZi5yZXN1bHRzWzBdLnN0YXJ0X3RpbWUgKiAxMDAwKS50b0xv
Y2FsZVN0cmluZygpfTxicj5gOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghQXJjaGl2ZVJvdXRlci5oYXNBcmNoaXZlKHN1aXRlKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYDxhIGhyZWY9Ii9hcmNoaXZl
LyR7QXJjaGl2ZVJvdXRlci5wYXRoRm9yKHN1aXRlKX0/JHtxdWVyeX0iIHRhcmdldD0iX2JsYW5r
Ij4ke0FyY2hpdmVSb3V0ZXIubGFiZWxGb3Ioc3VpdGUpfTwvYT48YnI+YDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSkoKSA6ICcnfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJHtkaWZmLnJlc3VsdHNbMF0uc3RhdHMuc3RhcnRfdGltZSAmJiBkaWZm
LnJlc3VsdHNbMF0uc3RhdHMuZW5kX3RpbWUgPworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGBTdWl0ZSB0b29rICR7ZWxhcHNlZFRpbWUoZGlmZi5yZXN1bHRzWzBdLnN0
YXRzLnN0YXJ0X3RpbWUsIGRpZmYucmVzdWx0c1swXS5zdGF0cy5lbmRfdGltZSl9YCA6ICcnfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8L2Rpdj5gIDogJyd9CisgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4K
KyAgICAgICAgICAgICAgICAgICAgICAgICR7ZGlmZi5yZXN1bHRzLmxlbmd0aCA9PT0gMSB8fCAh
ZGlmZi5mYWlsdXJlcy5sZW5ndGggPyAnJyA6IGA8ZGl2IGNsYXNzPSJkaXZpZGVyIG1vYmlsZS1j
b250cm9sIj48L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJj
b2wtcy02IGxpc3QiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5UZXN0IFJ1
bnM8L2I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGlmZi5mYWlsdXJlcy5z
bGljZSgwLCA4KS5tYXAoZmFpbHVyZSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsZXQgd29yc3QgPSAnc3VjY2Vzcyc7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVzLmZvckVhY2godHlwZSA9PiB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGZh
aWx1cmVbdHlwZV0pLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd29yc3QgPSB0eXBlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1p
dHMgPSBDb21taXRCYW5rLmNvbW1pdHNEdXJpbmcoZmFpbHVyZS51dWlkX3JhbmdlWzBdLCBmYWls
dXJlLnV1aWRfcmFuZ2VbMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGA8ZGl2IGNsYXNzPSJpdGVtIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG90ICR7d29yc3R9IHNtYWxsIj4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbnkg
dGV4dCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7bWFyZ2luLXRvcDogMHB4Ij4ke0V4cGVj
dGF0aW9ucy5zeW1ib2xNYXBbd29yc3RdfTwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPGEgY2xhc3M9InRleHQgYmxvY2siIHN0eWxlPSJ3aWR0aDogY2FsYygx
MDAlIC0gdmFyKC0tbWVkaXVtU2l6ZSkgLSAxNnB4KTsgb3ZlcmZsb3c6IGhpZGRlbjsgd2hpdGUt
c3BhY2U6IG5vd3JhcDsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7ICJocmVmPSIvaW52ZXN0aWdh
dGU/JHtwYXJhbXNUb1F1ZXJ5KGZhaWx1cmUudG9QYXJhbXMoKSl9Ij4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Y29tbWl0cy5sZW5ndGggPworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2NvbW1p
dHNbMF0uaWQuc3Vic3RyaW5nKDAsMTIpfSAke2NvbW1pdHMubGVuZ3RoID4gMSA/IGNvbW1pdHNb
Y29tbWl0cy5sZW5ndGggLSAxXS5pZC5zdWJzdHJpbmcoMCwxMikgOiAnJ31gIDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPyd9IG9uICR7ZmFp
bHVyZS5jb25maWd1cmF0aW9ufQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9k
aXY+YDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9pbignJyl9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGlmZi5yZXN1bHRzLmxlbmd0aCA+IDggPyAn
PGRpdiBjbGFzcz0iaXRlbSBjb250ZW50Ij5Ub28gbWFueSBydW5zIHRvIGRpc3BsYXkuLi48ZGl2
PicgOiAnJ30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIDwvZGl2PmB9CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAg
ICAgICAgICAgIDwvZGl2PmApOworICAgICAgICAgICAgfSwKKyAgICAgICAgfSk7CisgICAgICAg
IHRoaXMuZmFpbHVyZVZpZXcgPSBSRUYuY3JlYXRlUmVmKHsKKyAgICAgICAgICAgIHN0YXRlOiB7
Y29uZmlndXJhdGlvbjogbnVsbCwgcmVzdWx0czogW10sIGZhaWx1cmVzOiBbXX0sCisgICAgICAg
ICAgICBvblN0YXRlVXBkYXRlOiAoZWxlbWVudCwgZGlmZiwgc3RhdGUpID0+IHsKKyAgICAgICAg
ICAgICAgICBpZiAoIWRpZmYuY29uZmlndXJhdGlvbiB8fCAhZGlmZi5yZXN1bHRzIHx8ICFkaWZm
LmZhaWx1cmVzKSB7CisgICAgICAgICAgICAgICAgICAgIERPTS5pbmplY3QoZWxlbWVudCwgJzxk
aXYgY2xhc3M9ImxvYWRlciI+PGRpdiBjbGFzcz0ic3Bpbm5lciI+PC9kaXY+PC9kaXY+Jyk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKCFkaWZmLmZhaWx1cmVzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBE
T00uaW5qZWN0KGVsZW1lbnQsICc8ZGl2IGNsYXNzPSJjb250ZW50IiBzdHlsZT0ibWFyZ2luLWJv
dHRvbTogdmFyKC0tc21hbGxTaXplKTsiPk5vIGZhaWx1cmVzPC9kaXY+Jyk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29u
c3QgZmFpbHVyZXMgPSBGYWlsdXJlcy5jb21iaW5lKC4uLmRpZmYuZmFpbHVyZXMpOworICAgICAg
ICAgICAgICAgIGNvbnN0IHJldmVyc2VkVHlwZXMgPSBbLi4uRXhwZWN0YXRpb25zLmZhaWx1cmVU
eXBlc10ucmV2ZXJzZSgpOworCisgICAgICAgICAgICAgICAgRE9NLmluamVjdChlbGVtZW50LCBg
PGI+RmFpbHVyZXM8L2I+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxpc3QiPgor
ICAgICAgICAgICAgICAgICAgICAgICAgJHtyZXZlcnNlZFR5cGVzLm1hcCh0eXBlID0+IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZmFpbHVyZXNbdHlw
ZV0pLnNvcnQoKGEsIGIpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnVtYmVyRGlmZmVyZW5jZSA9IGZhaWx1cmVzW3R5cGVdW2FdIC0gZmFpbHVyZXNbdHlwZV1b
Yl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXJEaWZmZXJlbmNl
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlckRpZmZl
cmVuY2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmxvY2FsZUNv
bXBhcmUoYik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkubWFwKHRlc3QgPT4gewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9Iml0ZW0i
PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG90ICR7
dHlwZX0gc21hbGwiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxk
aXYgY2xhc3M9InRpbnkgdGV4dCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7bWFyZ2luLXRv
cDogMHB4Ij4ke0V4cGVjdGF0aW9ucy5zeW1ib2xNYXBbdHlwZV19PC9kaXY+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDxhIGNsYXNzPSJ0ZXh0IGJsb2NrIiBzdHlsZT0id2lkdGg6IGNhbGMoMTAw
JSAtIHZhcigtLW1lZGl1bVNpemUpIC0gMTZweCk7IG92ZXJmbG93OiBoaWRkZW47IHdoaXRlLXNw
YWNlOiBub3dyYXA7IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyIgaHJlZj0iLz9zdWl0ZT0ke3Ro
aXMuc3VpdGV9JnRlc3Q9JHt0ZXN0fSIgdGFyZ2V0PSJfYmxhbmsiPgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICR7dGVzdH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+
YDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCcnKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0pLmpvaW4oJycpfQorICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTsK
KyAgICAgICAgICAgIH0sCisgICAgICAgIH0pOworICAgICAgICBDb21taXRCYW5rLmNhbGxiYWNr
cy5wdXNoKCgpID0+IHt0aGlzLnNlbGVjdCh0aGlzLnNlbGVjdGVkKX0pOworICAgICAgICB0aGlz
LnJlbG9hZCgpOworICAgIH0KKyAgICByZWxvYWQoKSB7CisgICAgICAgIGlmICghT2JqZWN0Lmtl
eXMocmFuZ2VQYXJhbXMpLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0
aGlzLmRhdGFGb3JDb25maWcgPSB7fTsKKyAgICAgICAgdGhpcy5zZWxlY3QoMCk7CisKKyAgICAg
ICAgbGV0IHJlc3VsdHNEaXNwYXRjaGVkID0gYWdyZWdhdGVDb25uZmlndXJhdGlvbi5sZW5ndGg7
CisgICAgICAgIHRoaXMucmVzdWx0Vmlldy5zZXRTdGF0ZSh7Y29uZmlndXJhdGlvbjogbnVsbCwg
cmVzdWx0czogW10sIGZhaWx1cmVzOiBbXX0pOworCisgICAgICAgIGxldCBmYWlsdXJlc0Rpc3Bh
dGNoZWQgPSBhZ3JlZ2F0ZUNvbm5maWd1cmF0aW9uLmxlbmd0aDsKKyAgICAgICAgdGhpcy5mYWls
dXJlVmlldy5zZXRTdGF0ZSh7Y29uZmlndXJhdGlvbjogbnVsbCwgcmVzdWx0czogW10sIGZhaWx1
cmVzOiBbXX0pOworCisgICAgICAgIGFncmVnYXRlQ29ubmZpZ3VyYXRpb24uZm9yRWFjaChjb25m
aWdUb1NlYXJjaCA9PiB7CisgICAgICAgICAgICBjb25zdCByZXN1bHRQYXJhbXMgPSBPYmplY3Qu
YXNzaWduKGNvbmZpZ1RvU2VhcmNoLnRvUGFyYW1zKCksIHJhbmdlUGFyYW1zKTsKKyAgICAgICAg
ICAgIGZldGNoKGAvYXBpL3Jlc3VsdHMvJHt0aGlzLnN1aXRlfT8ke3BhcmFtc1RvUXVlcnkocmVz
dWx0UGFyYW1zKX1gKS50aGVuKHJlc3BvbnNlID0+IHsKKyAgICAgICAgICAgICAgICByZXNwb25z
ZS5qc29uKCkudGhlbihqc29uID0+IHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG1pblV1aWQg
PSBNYXRoLnJvdW5kKG5ldyBEYXRlKCkuZ2V0VGltZSgpLzEwKTsKKyAgICAgICAgICAgICAgICAg
ICAgbGV0IG1heFV1aWQgPSAwOworCisgICAgICAgICAgICAgICAgICAgIGpzb24uZm9yRWFjaChy
ZXN1bHQgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGxldGVDb25maWcg
PSBuZXcgQ29uZmlndXJhdGlvbihyZXN1bHQuY29uZmlndXJhdGlvbik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXRoaXMuZGF0YUZvckNvbmZpZ1tjb21wbGV0ZUNvbmZpZy50b0tleSgp
XSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFGb3JDb25maWdbY29tcGxl
dGVDb25maWcudG9LZXkoKV0gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bmZpZ3VyYXRpb246IGNvbXBsZXRlQ29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHRzOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVy
ZXM6IFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhRm9yQ29u
ZmlnW2NvbXBsZXRlQ29uZmlnLnRvS2V5KCldLmNvbmZpZ3VyYXRpb24gPSBDb25maWd1cmF0aW9u
LmNvbWJpbmUodGhpcy5kYXRhRm9yQ29uZmlnW2NvbXBsZXRlQ29uZmlnLnRvS2V5KCldLmNvbmZp
Z3VyYXRpb24sIGNvbXBsZXRlQ29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
ZGF0YUZvckNvbmZpZ1tjb21wbGV0ZUNvbmZpZy50b0tleSgpXS5yZXN1bHRzID0gdGhpcy5kYXRh
Rm9yQ29uZmlnW2NvbXBsZXRlQ29uZmlnLnRvS2V5KCldLnJlc3VsdHMuY29uY2F0KHJlc3VsdC5y
ZXN1bHRzKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc3VsdHMuZm9yRWFj
aChyZXN1bHQgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblV1aWQgPSBNYXRo
Lm1pbihtaW5VdWlkLCByZXN1bHQudXVpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF4VXVpZCA9IE1hdGgubWF4KG1heFV1aWQsIHJlc3VsdC51dWlkKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAg
ICAgICBpZiAobWF4VXVpZCA9PiBtaW5VdWlkKQorICAgICAgICAgICAgICAgICAgICAgICAgQ29t
bWl0QmFuay5hZGQobWluVXVpZCwgbWF4VXVpZCk7CisKKyAgICAgICAgICAgICAgICAgICAgLS1y
ZXN1bHRzRGlzcGF0Y2hlZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRzRGlzcGF0
Y2hlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWYuc2V0U3RhdGUoe2Rpc3Bs
YXllZDogT2JqZWN0LmtleXModGhpcy5kYXRhRm9yQ29uZmlnKS5sZW5ndGh9KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29uZmlndXJhdGlvbnMuc2V0U3RhdGUoT2JqZWN0
LnZhbHVlcyh0aGlzLmRhdGFGb3JDb25maWcpLm1hcChkYXRhID0+IGRhdGEuY29uZmlndXJhdGlv
bikpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QodGhpcy5zZWxlY3RlZCk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH0pLmNhdGNoKGVycm9yID0+IHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbG9hZCBmYWls
cywgbG9nIHRoZSBlcnJvciBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVy
cm9yKEpTT04uc3RyaW5naWZ5KGVycm9yLCBudWxsLCA0KSk7CisgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgRmFpbHVyZXMuZnJvbUVuZHBvaW50KHRoaXMuc3VpdGUsIGNvbmZpZ1RvU2Vh
cmNoLCBPYmplY3QuYXNzaWduKHt1bmV4cGVjdGVkOiBbd2lsbEZpbHRlckV4cGVjdGVkKCldfSwg
cmFuZ2VQYXJhbXMpKS50aGVuKGZhaWx1cmVzID0+IHsKKyAgICAgICAgICAgICAgICBsZXQgbWlu
VXVpZCA9IE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkvMTApOworICAgICAgICAgICAg
ICAgIGxldCBtYXhVdWlkID0gMDsKKworICAgICAgICAgICAgICAgIGZhaWx1cmVzLmZvckVhY2go
ZmFpbHVyZSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhRm9yQ29uZmln
W2ZhaWx1cmUuY29uZmlndXJhdGlvbi50b0tleSgpXSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuZGF0YUZvckNvbmZpZ1tmYWlsdXJlLmNvbmZpZ3VyYXRpb24udG9LZXkoKV0gPSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbjogZmFpbHVyZS5jb25maWd1
cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHM6IFtdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVzOiBbXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuZGF0YUZvckNvbmZpZ1tmYWlsdXJlLmNvbmZpZ3VyYXRpb24udG9LZXkoKV0uY29uZmln
dXJhdGlvbiA9IENvbmZpZ3VyYXRpb24uY29tYmluZSh0aGlzLmRhdGFGb3JDb25maWdbZmFpbHVy
ZS5jb25maWd1cmF0aW9uLnRvS2V5KCldLmNvbmZpZ3VyYXRpb24sIGZhaWx1cmUuY29uZmlndXJh
dGlvbik7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZvckNvbmZpZ1tmYWlsdXJlLmNv
bmZpZ3VyYXRpb24udG9LZXkoKV0uZmFpbHVyZXMucHVzaChmYWlsdXJlKTsKKyAgICAgICAgICAg
ICAgICAgICAgbWluVXVpZCA9IE1hdGgubWluKG1pblV1aWQsIGZhaWx1cmUudXVpZF9yYW5nZVsw
XSk7CisgICAgICAgICAgICAgICAgICAgIG1heFV1aWQgPSBNYXRoLm1heChtYXhVdWlkLCBmYWls
dXJlLnV1aWRfcmFuZ2VbMV0pOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAg
ICAgaWYgKG1heFV1aWQgPT4gbWluVXVpZCkKKyAgICAgICAgICAgICAgICAgICAgQ29tbWl0QmFu
ay5hZGQobWluVXVpZCwgbWF4VXVpZCk7CisKKyAgICAgICAgICAgICAgICAtLWZhaWx1cmVzRGlz
cGF0Y2hlZDsKKyAgICAgICAgICAgICAgICBpZiAoIWZhaWx1cmVzRGlzcGF0Y2hlZCkgeworICAg
ICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdENvbmZpZ3VyYXRpb25zLnNldFN0YXRlKE9iamVj
dC52YWx1ZXModGhpcy5kYXRhRm9yQ29uZmlnKS5tYXAoZGF0YSA9PiBkYXRhLmNvbmZpZ3VyYXRp
b24pKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QodGhpcy5zZWxlY3RlZCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4geworICAgICAg
ICAgICAgICAgIC8vIEEgbG9hZCBmYWlsdXJlIHByb2JhYmx5IGp1c3QgbWVhbnMgbm8gZmFpbHVy
ZXMgZm91bmQsIGluIHRoYXQgY2FzZSwgaWdub3JlIHRoZSBlcnJvcgorICAgICAgICAgICAgICAg
IGlmICghT2JqZWN0LmtleXMoZXJyb3IpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihKU09OLnN0cmluZ2lmeShlcnJvciwgbnVsbCwg
NCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKyAgICBzZWxlY3Qoc2Vs
ZWN0ZWQpIHsKKyAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbktleXMgPSBPYmplY3Qua2V5cyh0
aGlzLmRhdGFGb3JDb25maWcpOworICAgICAgICBjb25maWd1cmF0aW9uS2V5cy5zb3J0KCk7Cisg
ICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBNYXRoLm1pbihzZWxlY3RlZCwgY29uZmlndXJhdGlvbktl
eXMubGVuZ3RoKTsKKworICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb25LZXlzLmxlbmd0aCkgewor
ICAgICAgICAgICAgdGhpcy5yZXN1bHRWaWV3LnNldFN0YXRlKHtjb25maWd1cmF0aW9uOiBudWxs
LCByZXN1bHRzOiBbXSwgZmFpbHVyZXM6IFtdfSk7CisgICAgICAgICAgICB0aGlzLmZhaWx1cmVW
aWV3LnNldFN0YXRlKHtjb25maWd1cmF0aW9uOiBudWxsLCByZXN1bHRzOiBbXSwgZmFpbHVyZXM6
IFtdfSk7CisgICAgICAgIH0gZWxzZSBpZiAoY29uZmlndXJhdGlvbktleXMubGVuZ3RoID09IDEp
IHsKKyAgICAgICAgICAgIHRoaXMucmVzdWx0Vmlldy5zZXRTdGF0ZSh0aGlzLmRhdGFGb3JDb25m
aWdbY29uZmlndXJhdGlvbktleXNbMF1dKTsKKyAgICAgICAgICAgIHRoaXMuZmFpbHVyZVZpZXcu
c2V0U3RhdGUodGhpcy5kYXRhRm9yQ29uZmlnW2NvbmZpZ3VyYXRpb25LZXlzWzBdXSk7CisgICAg
ICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZCA9PSAwKSB7CisgICAgICAgICAgICBjb25zdCBj
b21iaW5lZCA9IHsKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9u
LmNvbWJpbmUoLi4uY29uZmlndXJhdGlvbktleXMubWFwKGtleSA9PiB0aGlzLmRhdGFGb3JDb25m
aWdba2V5XS5jb25maWd1cmF0aW9uKSksCisgICAgICAgICAgICAgICAgcmVzdWx0czogW10sCisg
ICAgICAgICAgICAgICAgZmFpbHVyZXM6IFtdLAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IGNvbmZpZ3VyYXRpb25LZXlzLmZvckVhY2goa2V5ID0+IHsKKyAgICAgICAgICAgICAgICBjb21i
aW5lZC5yZXN1bHRzID0gY29tYmluZWQucmVzdWx0cy5jb25jYXQodGhpcy5kYXRhRm9yQ29uZmln
W2tleV0ucmVzdWx0cyk7CisgICAgICAgICAgICAgICAgY29tYmluZWQuZmFpbHVyZXMgPSBjb21i
aW5lZC5mYWlsdXJlcy5jb25jYXQodGhpcy5kYXRhRm9yQ29uZmlnW2tleV0uZmFpbHVyZXMpOwor
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHRoaXMucmVzdWx0Vmlldy5zZXRTdGF0ZShj
b21iaW5lZCk7CisgICAgICAgICAgICB0aGlzLmZhaWx1cmVWaWV3LnNldFN0YXRlKGNvbWJpbmVk
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMucmVzdWx0Vmlldy5zZXRTdGF0
ZSh0aGlzLmRhdGFGb3JDb25maWdbY29uZmlndXJhdGlvbktleXNbdGhpcy5zZWxlY3RlZCAtIDFd
XSk7CisgICAgICAgICAgICB0aGlzLmZhaWx1cmVWaWV3LnNldFN0YXRlKHRoaXMuZGF0YUZvckNv
bmZpZ1tjb25maWd1cmF0aW9uS2V5c1t0aGlzLnNlbGVjdGVkIC0gMV1dKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICB0b1N0cmluZygpIHsKKyAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJzZWN0
aW9uIiByZWY9IiR7dGhpcy5yZWZ9Ij4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFk
ZXIgcm93Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXMtNCB0aXRsZSI+
JHt0aGlzLnN1aXRlfTwvZGl2PgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wt
cy04Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0Ij4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IHJlcXVpcmVkIHJlZj0iJHt0aGlzLnNlbGVj
dENvbmZpZ3VyYXRpb25zfSI+PC9zZWxlY3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PGxhYmVsPkNvbmZpZ3VyYXRpb248L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9k
aXY+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2Pgor
ICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNv
bnRlbnQiIHJlZj0iJHt0aGlzLnJlc3VsdFZpZXd9Ij48L2Rpdj4KKyAgICAgICAgICAgICAgICAg
ICAgPGRpdiBjbGFzcz0iZGl2aWRlciI+PC9kaXY+CisgICAgICAgICAgICAgICAgICAgIDxkaXYg
Y2xhc3M9ImNvbnRlbnQiIHJlZj0iJHt0aGlzLmZhaWx1cmVWaWV3fSI+PC9kaXY+CisgICAgICAg
ICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj48YnI+YDsKKyAgICB9Cit9CisKKwor
ZnVuY3Rpb24gcG9wdWxhdGVSYW5nZXMoKQoreworICAgIGxldCBkZWZpbmVkUmFuZ2UgPSBmYWxz
ZTsKKyAgICBsZXQgY29tbWl0UGFyYW1zID0ge307CisgICAgbGV0IHRpbWVQYXJhbXMgPSB7fTsK
KworICAgIFsnaWQnLCAndXVpZCcsICd0aW1lc3RhbXAnLCAnYnJhbmNoJywgJ3JlcG9zaXRvcnlf
aWQnXS5mb3JFYWNoKHBhcmFtID0+IHsKKyAgICAgICAgWycnLCAnYmVmb3JlXycsICdhZnRlcl8n
XS5mb3JFYWNoKHBhcnRpYWwgPT4geworICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gKG5ldyBR
dWVyeU1vZGlmaWVyKGAke3BhcnRpYWx9JHtwYXJhbX1gKSkuY3VycmVudCgpOworICAgICAgICAg
ICAgaWYgKCF2YWx1ZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIGlmIChbJ2lkJywgJ3V1aWQnLCAndGltZXN0YW1wJ10uaW5kZXhPZihwYXJhbSkgPj0gMCkK
KyAgICAgICAgICAgICAgICBkZWZpbmVkUmFuZ2UgPSB0cnVlOworICAgICAgICAgICAgY29tbWl0
UGFyYW1zW2Ake3BhcnRpYWx9JHtwYXJhbX1gXSA9IHZhbHVlczsKKyAgICAgICAgfSk7CisgICAg
fSk7CisKKyAgICBbJ3RpbWUnLCAnYmVmb3JlX3RpbWUnLCAnYWZ0ZXJfdGltZSddLmZvckVhY2go
cGFyYW0gPT4geworICAgICAgICBjb25zdCB2YWx1ZXMgPSAobmV3IFF1ZXJ5TW9kaWZpZXIocGFy
YW0pKS5jdXJyZW50KCk7CisgICAgICAgIGlmICghdmFsdWVzLmxlbmd0aCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgZGVmaW5lZFJhbmdlID0gdHJ1ZTsKKyAgICAgICAgdGltZVBhcmFt
c1twYXJhbV0gPSB2YWx1ZXM7CisgICAgfSk7CisKKyAgICByYW5nZVBhcmFtcyA9IE9iamVjdC5h
c3NpZ24oY29tbWl0UGFyYW1zLCB0aW1lUGFyYW1zKTsKKyAgICBjb25zdCBicmFuY2ggPSBxdWVy
eVRvUGFyYW1zKGRvY3VtZW50LlVSTC5zcGxpdCgnPycpWzFdKS5icmFuY2g7CisgICAgaWYgKGJy
YW5jaCkKKyAgICAgICAgcmFuZ2VQYXJhbXMuYnJhbmNoID0gW2JyYW5jaF07CisKKyAgICBpZiAo
IU9iamVjdC5rZXlzKHJhbmdlUGFyYW1zKS5sZW5ndGggJiYgIWRlZmluZWRSYW5nZSkgeworICAg
ICAgICByYW5nZVBhcmFtcyA9IHt9OworICAgICAgICBjb25zdCBwYXJhbXMgPSBPYmplY3QuYXNz
aWduKHt9LCBjb21taXRQYXJhbXMpOworICAgICAgICBpZiAoIWRlZmluZWRSYW5nZSkKKyAgICAg
ICAgICAgIHBhcmFtcy5saW1pdCA9IFsxXTsKKyAgICAgICAgQ29tbWl0QmFuay5sYXRlc3QocGFy
YW1zKS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgIHJhbmdlUGFyYW1zID0gT2JqZWN0LmFzc2ln
bihjb21taXRQYXJhbXMsIHRpbWVQYXJhbXMpOworICAgICAgICAgICAgcmFuZ2VQYXJhbXMuYWZ0
ZXJfdXVpZCA9IFtDb21taXRCYW5rLmNvbW1pdHNbMF0udXVpZF07CisgICAgICAgICAgICByYW5n
ZVBhcmFtcy5iZWZvcmVfdXVpZCA9IFtDb21taXRCYW5rLmNvbW1pdHNbQ29tbWl0QmFuay5jb21t
aXRzLmxlbmd0aCAtIDFdLnV1aWRdOworICAgICAgICAgICAgdmlld3MuZm9yRWFjaCh2aWV3ID0+
IHZpZXcucmVsb2FkKCkpOworICAgICAgICB9KTsKKyAgICB9ICAgCit9CisKKworZnVuY3Rpb24g
cmVsb2FkKCkKK3sKKyAgICBhZ3JlZ2F0ZUNvbm5maWd1cmF0aW9uID0gQ29uZmlndXJhdGlvbi5m
cm9tUXVlcnkoKTsKKyAgICBwb3B1bGF0ZVJhbmdlcygpOworICAgIHZpZXdzLmZvckVhY2godmll
dyA9PiB2aWV3LnJlbG9hZCgpKTsKK30KKworCitwb3B1bGF0ZVJhbmdlcygpOworU1VJVEVTLmZv
ckVhY2goc3VpdGUgPT4geworICAgIHZpZXdzLnB1c2gobmV3IFN1aXRlRmFpbHVyZXNWaWV3KHN1
aXRlKSk7Cit9KQorCit3aW5kb3cub25wb3BzdGF0ZSA9IGV2ZW50ID0+IHsKKyAgICByZWxvYWQo
KTsKK307Cit3aW5kb3cub25wdXNoc3RhdGUgPSBldmVudCA9PiB7CisgICAgcmVsb2FkKCk7Cit9
OworCitsZXQgdmlld3BvcnQgPSBudWxsOworRE9NLmluamVjdCgKKyAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnYXBwJyksCisgICAgYCR7RHJhd2VyKFsKKyAgICAgICAgTGVnZW5kKChmaWx0
ZXJGbGFnKSA9PiB7CisgICAgICAgICAgICBpZiAoZmlsdGVyRmxhZykKKyAgICAgICAgICAgICAg
ICB1bmV4cGVjdGVkUXVlcnkucmVtb3ZlKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgdW5leHBlY3RlZFF1ZXJ5LnJlcGxhY2UoZmFsc2UpOworICAgICAgICAgICAgcmVsb2Fk
KCk7CisgICAgICAgIH0sIHRydWUsIHdpbGxGaWx0ZXJFeHBlY3RlZCgpKSwKKyAgICAgICAgQnJh
bmNoU2VsZWN0b3IocmVsb2FkKSwKKyAgICAgICAgQ29uZmlndXJhdGlvblNlbGVjdG9ycyhyZWxv
YWQpLAorICAgIF0pfQorCisgICAgPGRpdiBjbGFzcz0ibWFpbiByaWdodC1zaWRlYmFyIHVuZGVy
LXRvcGJhci13aXRoLWFjdGlvbnMiPgorICAgICAgICA8YnI+CisgICAgICAgIDxkaXYgY2xhc3M9
ImNvbnRlbnQiPgorICAgICAgICAgICAgJHt2aWV3cy5qb2luKCcnKX0KKyAgICAgICAgPC9kaXY+
CisgICAgPC9kaXY+YAorKTsKKworPC9zY3JpcHQ+CisKK3slIGVuZGJsb2NrICV9Cit7JSBibG9j
ayBjb250ZW50ICV9CisKKzxkaXYgaWQ9ImFwcCI+Cis8L2Rpdj4KKworeyUgZW5kYmxvY2sgJX0K
SW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL3N1aXRl
X3Jlc3VsdHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJw
eS92aWV3L3RlbXBsYXRlcy9zdWl0ZV9yZXN1bHRzLmh0bWwJKHJldmlzaW9uIDI2MDc2OCkKKysr
IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL3N1aXRlX3Jlc3Vs
dHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDYgKzE4NCw3IEBAICR7RHJhd2VyKFsKICAg
ICBDb25maWd1cmF0aW9uU2VsZWN0b3JzKCgpID0+IHt2aWV3LnJlbG9hZCgpfSksCiBdLCAoKSA9
PiBvbkxheW91dENoYW5nZS5hZGQoKSl9CiA8ZGl2IGNsYXNzPSJtYWluIHJpZ2h0LXNpZGViYXIg
dW5kZXItdG9wYmFyLXdpdGgtYWN0aW9ucyI+CisgICAgPGJyPgogICAgIDxkaXYgY2xhc3M9ImNv
bnRlbnQiIHJlZj0ke1JFRi5jcmVhdGVSZWYoewogICAgICAgICAgICAgb25FbGVtZW50TW91bnQ6
IChlbGVtZW50KSA9PiB7CiAgICAgICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgaW4gdmlldy5j
aGlsZHJlbikgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>