<?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>211656</bug_id>
          
          <creation_ts>2020-05-08 19:27:26 -0700</creation_ts>
          <short_desc>Streamline MarkupAccumulator to improve efficiency a bit</short_desc>
          <delta_ts>2020-05-09 16:34:53 -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>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbarton</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>msaboff</cc>
    
    <cc>pdr</cc>
    
    <cc>saam</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1650862</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-08 19:27:26 -0700</bug_when>
    <thetext>Streamline MarkupAccumulator to improve efficiency a bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650864</commentid>
    <comment_count>1</comment_count>
      <attachid>398910</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-08 19:49:07 -0700</bug_when>
    <thetext>Created attachment 398910
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650894</commentid>
    <comment_count>2</comment_count>
      <attachid>398910</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-08 23:47:28 -0700</bug_when>
    <thetext>Comment on attachment 398910
Patch

Lost a quote mark. Oops.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650912</commentid>
    <comment_count>3</comment_count>
      <attachid>398925</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-09 06:35:40 -0700</bug_when>
    <thetext>Created attachment 398925
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650916</commentid>
    <comment_count>4</comment_count>
      <attachid>398926</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-09 07:30:25 -0700</bug_when>
    <thetext>Created attachment 398926
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650919</commentid>
    <comment_count>5</comment_count>
      <attachid>398926</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2020-05-09 08:55:14 -0700</bug_when>
    <thetext>Comment on attachment 398926
Patch

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

&gt; Source/WebCore/editing/MarkupAccumulator.h:75
&gt; +    template&lt;typename ...StringTypes&gt; void append(StringTypes... strings) { m_markup.append(strings...); }

Any reason why StringTypes isn&apos;t a forwarding reference, and why you&apos;re not using std::forward in the call?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650920</commentid>
    <comment_count>6</comment_count>
      <attachid>398926</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-09 08:55:54 -0700</bug_when>
    <thetext>Comment on attachment 398926
Patch

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

&gt;&gt; Source/WebCore/editing/MarkupAccumulator.h:75
&gt;&gt; +    template&lt;typename ...StringTypes&gt; void append(StringTypes... strings) { m_markup.append(strings...); }
&gt; 
&gt; Any reason why StringTypes isn&apos;t a forwarding reference, and why you&apos;re not using std::forward in the call?

No reason. I will do what you suggest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650921</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-09 08:56:28 -0700</bug_when>
    <thetext>Also, I will need to fix the crash seen on mac-debug!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650922</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-09 08:57:55 -0700</bug_when>
    <thetext>Ah, got the null check wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650927</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-09 09:04:05 -0700</bug_when>
    <thetext>Committed r261437: &lt;https://trac.webkit.org/changeset/261437&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650928</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-09 09:05:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/63054009&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650974</commentid>
    <comment_count>11</comment_count>
      <attachid>398926</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-09 15:48:12 -0700</bug_when>
    <thetext>Comment on attachment 398926
Patch

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

&gt; Source/WebCore/editing/markup.cpp:407
&gt; +// Stopgap until C++20 adds std::ranges::reverse_view.
&gt; +template&lt;typename Collection&gt; struct ReverseView {
&gt; +    Collection&amp; collection;
&gt; +    decltype(collection.rbegin()) begin() const { return collection.rbegin(); }
&gt; +    decltype(collection.rend()) end() const { return collection.rend(); }
&gt; +    decltype(collection.size()) size() const { return collection.size(); }
&gt; +    ReverseView(Collection&amp; collection)
&gt; +        : collection(collection)
&gt; +    {
&gt; +    }
&gt; +};

We really should just import a copy of our own as we did with Optional and Variant.

That said, we actually have the equivalent (I think) functionality already by way of makeReversedRange() in &lt;wtf/IteratorRange.h&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650984</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-09 16:22:05 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #11)
&gt; We really should just import a copy of our own as we did with Optional and
&gt; Variant.

OK.

I was just working on replacing WTF::Optional with std::optional.

&gt; That said, we actually have the equivalent (I think) functionality already
&gt; by way of makeReversedRange() in &lt;wtf/IteratorRange.h&gt;.

I’ll try using that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650989</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-09 16:31:20 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #12)
&gt; (In reply to Sam Weinig from comment #11)
&gt; &gt; We really should just import a copy of our own as we did with Optional and
&gt; &gt; Variant.
&gt; 
&gt; OK.
&gt; 
&gt; I was just working on replacing WTF::Optional with std::optional.

Sure. That&apos;s the right thing to do now. All I meant that I we brought those in before we had a copy in the standard library we could use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650991</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-09 16:34:53 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #13)
&gt; (In reply to Darin Adler from comment #12)
&gt; &gt; I was just working on replacing WTF::Optional with std::optional.
&gt; 
&gt; Sure. That&apos;s the right thing to do now. All I meant that I we brought those
&gt; in before we had a copy in the standard library we could use.

Sure, I understood that. I was sort of observing the flow of the tides in and back out.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398910</attachid>
            <date>2020-05-08 19:49:07 -0700</date>
            <delta_ts>2020-05-09 06:35:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211656-20200508194904.patch</filename>
            <type>text/plain</type>
            <size>41408</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxNDI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
MDE1MDJlODNjYWQyOGNlMDcwMTk0MzZhNWMzNDJjNWY4YjhjNDEyLi40NGRkMGNiYTMwMzViNmVm
OTlmYmFiNGU1YmM3MzUxZTU3ZGQ5NjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMC0wNS0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgU3RyZWFtbGluZSBNYXJrdXBBY2N1bXVsYXRvciB0byBpbXByb3ZlIGVmZmljaWVu
Y3kgYSBiaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMTY1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oOiBGaXggc3BlbGxpbmcgb2Yg
ImV4cGxpY2l0bHkiLgorCiAyMDIwLTA1LTA3ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnph
cm9AZ25vbWUub3JnPgogCiAgICAgICAgIFNpbXBsaWZ5IHByZXByb2Nlc3NvciBndWFyZHMgaW4g
R0NNZW1vcnlPcGVyYXRpb25zLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYjVkNmFkN2NkNTAzZjFmYmYxMDhkYjA4MDUwNjIz
M2EzZjE2YWQzMC4uODJjNzk0Y2QwOWJiYzA5YjhjM2NlMmI2NTA4ZDhkY2M1YzI5YjRkMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNCBAQAorMjAyMC0wNS0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgU3RyZWFtbGluZSBNYXJrdXBBY2N1bXVsYXRvciB0byBpbXByb3ZlIGVm
ZmljaWVuY3kgYSBiaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxMTY1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHA6CisgICAgICAgIChXVEY6OlN0cmlu
Z0J1aWxkZXI6OmlzQWxsQVNDSUkgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg6IEFkZGVkIGlzQWxsQVNDSUkuCisKIDIwMjAtMDUtMDggIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBub3ctdW5uZWVkZWQgSEFW
RShBVkZPVU5EQVRJT05fTE9BREVSX0RFTEVHQVRFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDU3NzgwZjZmMTk3
NDI0MGVlNDQzMGJiOTczNTgzNTRkOWNiMjQ0MjkuLmRkMzIwNzA1NTdkMjdmMDIyN2IyOWE0NzY2
M2ZkNjNlOTM1OGJkZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NSBAQAorMjAyMC0wNS0wOCAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RyZWFtbGluZSBNYXJr
dXBBY2N1bXVsYXRvciB0byBpbXByb3ZlIGVmZmljaWVuY3kgYSBiaXQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTY1NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZWRpdGluZy9NYXJrdXBBY2N1bXVs
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ2hh
cmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKTogQ29ycmVjdGVkIGVhcmx5CisgICAgICAgIGV4aXQg
c28gaXQgcmV0dXJucyBhbnkgdGltZSB0aGUgbGVuZ3RoIGlzIDAuIEZvciBzb21lIHJlYXNvbiB0
aGUgY29kZSBiZWZvcmUKKyAgICAgICAgd291bGRuJ3QgZG8gdGhlIGVhcmx5IHJldHVybiB3aGVu
IG9mZnNldCBpcyBub24temVybywgd2hpY2ggaXMgdW5uZWNlc3NhcnkuCisgICAgICAgIChXZWJD
b3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHJpbmdWaWV3KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRUYWcpOiBVc2Ug
dmFyaWFkaWMgYXBwZW5kIHRvIGN1dCBkb3duCisgICAgICAgIG9uIG1lbW9yeSBhbGxvY2F0aW9u
cy4KKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjp0b3RhbExlbmd0aCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6Y29uY2F0ZW5hdGVN
YXJrdXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OnRh
a2VNYXJrdXApOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZSk6IFVzZSB2YXJpYWRpYworICAgICAgICBhcHBl
bmQgdG8gY3V0IGRvd24gb24gbWVtb3J5IGFsbG9jYXRpb25zLiBBbHNvIHVzZSBjaGFyIGluc3Rl
YWQgb2YgVUNoYXIgc28KKyAgICAgICAgdGhlIHN0cmluZyBidWlsZGluZyBjb2RlIGRvZXNuJ3Qg
aGF2ZSB0byBkbyBhbiA4LzE2IGJpdCBjaGVjay4KKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEFk
ZE5hbWVzcGFjZUVsZW1lbnQpOiBQcmVwZW5kIGEgbGl0ZXJhbCwgZG9uJ3QgYm90aGVyIHRvCisg
ICAgICAgIG1ha2UgYSBTdHJpbmcganVzdCB0byBhcHBlbmQgdG8gYW5vdGhlciBTdHJpbmcuIEFs
c28gbWFkZSB0aGlzIGEKKyAgICAgICAgbm9uLW1lbWJlciBmdW5jdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OnNob3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZSk6IE1hZGUgdGhpcyBhIG5vbi1tZW1i
ZXIgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
TmFtZXNwYWNlKTogRml4IGhhc2ggdGFibGUgdXNhZ2UKKyAgICAgICAgdG8gdXNlIGFkZCBpbnN0
ZWFkIG9mIGdldCBmb2xsb3dlZCBieSBzZXQgdG8gYXZvaWQgZG91YmxlIGhhc2hpbmcuCisgICAg
ICAgIFVzZSB2YXJpYWRpYyBhcHBlbmQgdG8gY3V0IGRvd24gb24gbWVtb3J5IGFsbG9jYXRpb24u
CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dCk6IFR3ZWFr
ZWQgc3R5bGUgdG8gbWFrZSB0aGlzIGEKKyAgICAgICAgb25lLWxpbmUgZnVuY3Rpb24uCisgICAg
ICAgIChXZWJDb3JlOjphcHBlbmRDb21tZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmFwcGVuZFhNTERlY2xhcmF0aW9uKTogTWFkZSB0aGlzIGEgbm9uLW1lbWJlciBmdW5jdGlvbi4K
KyAgICAgICAgVXNlIHZhcmlhZGljIGFwcGVuZCB0byBjdXQgZG93biBvbiBtZW1vcnkgYWxsb2Nh
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZERvY3VtZW50VHlwZSk6IE1hZGUgdGhpcyBh
IG5vbi1tZW1iZXIgZnVuY3Rpb24uCisgICAgICAgIFVzZSB2YXJpYWRpYyBhcHBlbmQgdG8gY3V0
IGRvd24gb24gbWVtb3J5IGFsbG9jYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb25FbGVtZW50Tm9kZSk6IE1vdmVkIHRoZSBib2Rp
ZXMgb2YKKyAgICAgICAgYXBwZW5kQ29tbWVudCwgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9u
LCBhbmQgYXBwZW5kQ0RBVEFTZWN0aW9uIGluCisgICAgICAgIGhlcmUgc2luY2UgdGhleSBjYW4g
YWxsIGJlIG9uZS1saW5lIHZhcmlhZGljIGFwcGVuZCBjYWxscy4KKworICAgICAgICAqIGVkaXRp
bmcvTWFya3VwQWNjdW11bGF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxh
dG9yOjpsZW5ndGggY29uc3QpOiBDaGFuZ2VkIHRoZSByZXR1cm4gdHlwZQorICAgICAgICBvZiBs
ZW5ndGggdG8gYmUgdW5zaWduZWQgc2luY2UgdGhhdCdzIHdoYXQgU3RyaW5nQnVpbGRlciByZXR1
cm5zLgorICAgICAgICBNYWRlIGlzQWxsQVNDSUkgY2FsbCBTdHJpbmdCdWlsZGVyOjppc0FsbEFT
Q0lJLiBSZXBsYWNlZCBhcHBlbmRTdHJpbmcKKyAgICAgICAgYW5kIGFwcGVuZFN0cmluZ1ZpZXcg
d2l0aCB2YXJpYWRpYyBhcHBlbmQuIFJlbW92ZWQgbWFueSBmdW5jdGlvbnMKKyAgICAgICAgdGhh
dCBubyBsb25nZXIgbmVlZCB0byBiZSBtZW1iZXIgZnVuY3Rpb25zLiBNYWRlIGFwcGVuZEF0dHJp
YnV0ZVZhbHVlCisgICAgICAgIGEgc3RhdGljIG1lbWJlciBmdW5jdGlvbi4gTWFkZSBhcHBlbmRO
YW1lc3BhY2UgcHJpdmF0ZS4gTWFkZQorICAgICAgICBtX3NlcmlhbGl6YXRpb25TeW50YXggY29u
c3QuCisKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhTdHlsZU5vZGUpOiBVc2UgYXBwZW5kCisg
ICAgICAgIGluc3RlYWQgb2YgYXBwZW5TdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRN
YXJrdXBBY2N1bXVsYXRvcjo6aXNBbGxBU0NJSSBjb25zdCk6IEFkZGVkLiBCZWZvcmUKKyAgICAg
ICAgdGhlIGNvZGUgd291bGQgb25seSBjaGVjayB0aGUgU3RyaW5nQnVpbGRlciwgYnV0IHdlIGFs
c28gbmVlZCB0bworICAgICAgICBjaGVjayBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwLgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRha2VSZXN1bHRzKTogVXNl
IENoZWNrZWRVaW50MzIKKyAgICAgICAgc2luY2UgU3RyaW5nQnVpbGRlcidzIHJlc2VydmVDYXBh
Y2l0eSBmdW5jdGlvbiB0YWtlcyB1bnNpZ25lZCwgbm90CisgICAgICAgIHNpemVfdC4gVGhlIG9s
ZCBjb2RlLCB1c2luZyB0b3RhbExlbmd0aCwgd291bGQganVzdCBwYXNzIGEgc2l6ZV90CisgICAg
ICAgIGFuZCBsZXQgaXQgZ2V0IGNob3BwZWQgb2ZmLCB3aGljaCBkaWRuJ3QgZG8gYW55IGhhcm0s
IGJ1dCBpdCBzZWVtcworICAgICAgICBzdHJhbmdlIHRvIGNvbXB1dGUgYSA2NC1iaXQgdmFsdWUg
anVzdCB0byBjaG9wIG9mZiB0aGUgbG93ZXIgMzIKKyAgICAgICAgYml0cy4gQW4gYWx0ZXJuYXRp
dmUgaXMgdG8gY29tcHV0ZSB0aGUgMzItYml0IHZhbHVlIGFuZCBqdXN0IGxldAorICAgICAgICBp
dCBvdmVyZmxvdy4gVXNlIGEgbW9kZXJuIGZvciBsb29wIGJ5IGRlZmluaW5nIGEgUmV2ZXJzZVZp
ZXcKKyAgICAgICAgdGVtcGxhdGUgcmF0aGVyIHRoYW4gd3JpdGluZyBhIGNvbmZ1c2luZyBiYWNr
d2FyZHMgbG9vcC4gVXNlIHRoZQorICAgICAgICBuZXcgdGFrZU1hcmt1cCBpbnN0ZWFkIG9mIGNv
bmNhdGVuYXRlTWFya3VwLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZFRleHQpOiBUd2VhayBjb2RpbmcKKyAgICAgICAgc3R5bGUgYSBsaXR0bGUgYml0
LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0
VGFnKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kTm9kZVRvUHJlc2VydmVNU09MaXN0KToKKyAgICAgICAgVXNlIHZhcmlhZGljIGFwcGVu
ZCB0byBjdXQgZG93biBvbiBtZW1vcnkgYWxsb2NhdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpw
cm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKTogVHdlYWsgY29kaW5nIHN0eWxlIGEgYml0Lgor
ICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2VJbnRl
cm5hbCk6IFVzZQorICAgICAgICBhcHBlbmQgaW5zdGVhZCBvZiBhcHBlbmRTdHJpbmcuCisgICAg
ICAgIChXZWJDb3JlOjpzaG91bGRQcmVzZXJ2ZU1TT0xpc3RzKTogVGFrZSBhIFN0cmluZ1ZpZXcg
aW5zdGVhZCBvZiBhCisgICAgICAgIFN0cmluZyB0byBlbGltaW5hdGUgdW5uZWNlc3NhcnkgbWVt
b3J5IGFsbG9jYXRpb24gaW4gY2FsbCB0byBzdWJzdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpz
YW5pdGl6ZWRNYXJrdXBGb3JGcmFnbWVudEluRG9jdW1lbnQpOiBVc2UgbWFrZVN0cmluZworICAg
ICAgICBpbnN0ZWFkIG9mIFN0cmluZ0J1aWxkZXIgdG8gY3V0IGRvd24gb24gbWVtb3J5IGFsbG9j
YXRpb24uCisKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnJlc2V0RGVmYXVsdEJ1dHRvbik6IEZpeCBzcGVsbGlu
ZyBlcnJvcgorICAgICAgICBpbiB0aGUgd29yZCAiZXhwbGljaXRseSIuCisgICAgICAgICogbWF0
aG1sL01hdGhNTE9wZXJhdG9yRGljdGlvbmFyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYXRo
TUxPcGVyYXRvckRpY3Rpb25hcnk6OnNlYXJjaCk6IERpdHRvLgorCisgICAgICAgICogcGFnZS9Q
YWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6U2Vy
aWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IpOgor
ICAgICAgICBVc2UgdmFyaWFkaWMgYXBwZW5kIGluc3RlYWQgb2YgYXBwZW5kU3RyaW5nIHRvIGN1
dCBkb3duIG9uCisgICAgICAgIG1lbW9yeSBhbGxvY2F0aW9ucy4KKworICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxp
bmVUZXh0Qm94OjpwYWludCk6IEZpeCBzcGVsbGluZyBlcnJvciBpbiB0aGUgd29yZAorICAgICAg
ICAiZXhwbGljaXRseSIuCisKIDIwMjAtMDUtMDggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgQXN5bmMgb3ZlcmZsb3cgc2Nyb2xsOiBzb21ldGltZXMg
YSA8c2VsZWN0PiBiZWNvbWVzIG5vbi1zY3JvbGxhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaAppbmRl
eCAwMDkzMjc5NDhiOWFmMWZiMjZiMDZmNjI4NTZiMzlkMWNjNGJmZTE0Li5hNTVkZTAzYTA4NmU5
MmMzZGNkNzA4MDI3NTY1ZWZmNGE3NzhjMzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmgKQEAgLTM1
LDcgKzM1LDcgQEAgY2xhc3MgQ29kZTsKIC8vCiAvLyBTb21lIGluc3RydWN0aW9ucyB1cGRhdGUg
b25seSBwYXJ0IG9mIGEgcmVnaXN0ZXIsIHRoZXkgY2FuIG9ubHkgYmUgc2NoZWR1bGVkIGFmdGVy
CiAvLyB0aGUgcHJldmlvdXMgZGVmaW5pdGlvbiBpcyBjb21wdXRlZC4gVGhpcyBwcm9ibGVtIGNh
biBiZSBhdm9pZGVkIGJ5IHRoZSBjb21waWxlcgotLy8gYnkgZXhwbGljaXRlbHkgcmVzZXR0aW5n
IHRoZSBlbnRpcmUgcmVnaXN0ZXIgYmVmb3JlIGV4ZWN1dGluZyB0aGUgaW5zdHJ1Y3Rpb24gd2l0
aAorLy8gYnkgZXhwbGljaXRseSByZXNldHRpbmcgdGhlIGVudGlyZSByZWdpc3RlciBiZWZvcmUg
ZXhlY3V0aW5nIHRoZSBpbnN0cnVjdGlvbiB3aXRoCiAvLyBwYXJ0aWFsIHVwZGF0ZS4KIC8vCiAv
LyBTZWUgIlBhcnRpYWwgWE1NIFJlZ2lzdGVyIFN0YWxscyIgYW5kICJEZXBlbmRlbmN5IEJyZWFr
aW5nIElkaW9tcyIgaW4gdGhlIG1hbnVhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
Y3BwCmluZGV4IDJhNDIwNjAxMThhZjdmMjQ1ZWM5MmRiZmJmYTk5NjYwNGY4MDdmM2YuLmE5NzNm
M2JlNjJmMWRkN2U3NjE5OTI5YTA3MzFhMWM2Mzg4ZmFlNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmNwcApAQCAtNDU2LDQgKzQ1NiwxNCBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6
OnNocmlua1RvRml0KCkKICAgICB9CiB9CiAKK2Jvb2wgU3RyaW5nQnVpbGRlcjo6aXNBbGxBU0NJ
SSgpIGNvbnN0Cit7CisgICAgYXV0byBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICBpZiAo
IWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1faXM4Qml0KQorICAgICAg
ICByZXR1cm4gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNoYXJhY3RlcnM4KCksIGxlbmd0aCk7Cisg
ICAgcmV0dXJuIGNoYXJhY3RlcnNBcmVBbGxBU0NJSShjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCmlu
ZGV4IDc4MmM5Y2VjNWZlZGQyZmYwMzJiYTAxZDVmZWYxZDQ5ODAwNjY2M2IuLjU5Njg0NjgxMzc3
ZjNhMTMyOGUxMmZkZDlhMmUxNjRkOWE1MDA3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oCkBAIC0zMjUsNiArMzI1LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBib29s
IGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXM4Qml0OyB9CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0OwogCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAppbmRleCBiNGVk
YTM4NDgzN2NhNmM5ZDBhYjI3ZGQ4OWQ4NDc1MDg0NWYwYmExLi45YTc2ZGI4N2VjODkzOTk4ZGU3
MzM2NDBmMTViZWY0N2ZhZDM5YTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L01hcmt1cEFjY3VtdWxhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1
cEFjY3VtdWxhdG9yLmNwcApAQCAtMTYwLDExICsxNjAsMTEgQEAgc3RhdGljIGlubGluZSB2b2lk
IGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllc0ludGVybmFsKFN0cmluZ0J1aWxkZXIm
IHJlc3UKIAogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2lu
Z0VudGl0aWVzKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBFbnRpdHlNYXNrIGVudGl0eU1hc2spCiB7
Ci0gICAgaWYgKCEob2Zmc2V0ICsgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgQVNT
RVJUKG9mZnNldCArIGxlbmd0aCA8PSBzb3VyY2UubGVuZ3RoKCkpOwogCisgICAgaWYgKCFsZW5n
dGgpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChzb3VyY2UuaXM4Qml0KCkpCiAgICAgICAg
IGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllc0ludGVybmFsPExDaGFyPihyZXN1bHQs
IHNvdXJjZSwgb2Zmc2V0LCBsZW5ndGgsIGVudGl0eU1hc2spOwogICAgIGVsc2UKQEAgLTIzNSwx
NiArMjM1LDYgQEAgU3RyaW5nIE1hcmt1cEFjY3VtdWxhdG9yOjpyZXNvbHZlVVJMSWZOZWVkZWQo
Y29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW4KICAgICByZXR1cm4gdXJsU3RyaW5n
OwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5n
JiBzdHJpbmcpCi17Ci0gICAgbV9tYXJrdXAuYXBwZW5kKHN0cmluZyk7Ci19Ci0KLXZvaWQgTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0cmluZ1ZpZXcoU3RyaW5nVmlldyB2aWV3KQotewotICAg
IG1fbWFya3VwLmFwcGVuZCh2aWV3KTsKLX0KLQogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6c3Rh
cnRBcHBlbmRpbmdOb2RlKGNvbnN0IE5vZGUmIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMp
CiB7CiAgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKQpAQCAtMjYwLDIzICsyNTAsMTIgQEAgdm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwg
Y29uc3QgRWxlbWVudCYgZWxlbWUKIHsKICAgICBpZiAoc2hvdWxkU2VsZkNsb3NlKGVsZW1lbnQs
IG1fc2VyaWFsaXphdGlvblN5bnRheCkgfHwgKCFlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSAmJiBl
bGVtZW50Q2Fubm90SGF2ZUVuZFRhZyhlbGVtZW50KSkpCiAgICAgICAgIHJldHVybjsKLSAgICBy
ZXN1bHQuYXBwZW5kKCc8Jyk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnLycpOwotICAgIHJlc3VsdC5h
cHBlbmQoZWxlbWVudC5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOwotICAgIHJlc3VsdC5hcHBl
bmQoJz4nKTsKLX0KLQotc2l6ZV90IE1hcmt1cEFjY3VtdWxhdG9yOjp0b3RhbExlbmd0aChjb25z
dCBWZWN0b3I8U3RyaW5nPiYgc3RyaW5ncykKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0gMDsKLSAg
ICBmb3IgKGF1dG8mIHN0cmluZyA6IHN0cmluZ3MpCi0gICAgICAgIGxlbmd0aCArPSBzdHJpbmcu
bGVuZ3RoKCk7Ci0gICAgcmV0dXJuIGxlbmd0aDsKKyAgICByZXN1bHQuYXBwZW5kKCI8LyIsIGVs
ZW1lbnQubm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpLCAnPicpOwogfQogCi12b2lkIE1hcmt1cEFj
Y3VtdWxhdG9yOjpjb25jYXRlbmF0ZU1hcmt1cChTdHJpbmdCdWlsZGVyJiByZXN1bHQpCitTdHJp
bmdCdWlsZGVyIE1hcmt1cEFjY3VtdWxhdG9yOjp0YWtlTWFya3VwKCkKIHsKLSAgICByZXN1bHQu
YXBwZW5kKG1fbWFya3VwKTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX21hcmt1cCwgeyB9
KTsKIH0KIAogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVmFsdWUoU3Ry
aW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBpc1Nlcmlh
bGl6aW5nSFRNTCkKQEAgLTI5Myw3ICsyNzIsNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbgog
ewogICAgIEFTU0VSVChlbGVtZW50LmlzVVJMQXR0cmlidXRlKGF0dHJpYnV0ZSkpOwogICAgIFN0
cmluZyByZXNvbHZlZFVSTFN0cmluZyA9IHJlc29sdmVVUkxJZk5lZWRlZChlbGVtZW50LCBhdHRy
aWJ1dGUudmFsdWUoKSk7Ci0gICAgVUNoYXIgcXVvdGVDaGFyID0gJyInOworICAgIGNoYXIgcXVv
dGVDaGFyID0gJyInOwogICAgIGlmIChXVEY6OnByb3RvY29sSXNKYXZhU2NyaXB0KHJlc29sdmVk
VVJMU3RyaW5nKSkgewogICAgICAgICAvLyBtaW5pbWFsIGVzY2FwaW5nIGZvciBqYXZhc2NyaXB0
IHVybHMKICAgICAgICAgaWYgKHJlc29sdmVkVVJMU3RyaW5nLmNvbnRhaW5zKCciJykpIHsKQEAg
LTMwMiw5ICsyODEsNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxB
dHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbgogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIHF1b3RlQ2hhciA9ICdcJyc7CiAgICAgICAgIH0KLSAgICAgICAg
cmVzdWx0LmFwcGVuZChxdW90ZUNoYXIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKHJlc29sdmVk
VVJMU3RyaW5nKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChxdW90ZUNoYXIpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKHF1b3RlQ2hhciwgcmVzb2x2ZWRVUkxTdHJpbmcsIHF1b3RlQ2hhcik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMxNCwxOCArMjkxLDE2IEBAIHZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKFN0cmluZ0J1aWxkZXIm
IHJlc3VsdCwgY29uCiAgICAgcmVzdWx0LmFwcGVuZChxdW90ZUNoYXIpOwogfQogCi1ib29sIE1h
cmt1cEFjY3VtdWxhdG9yOjpzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQpCitzdGF0aWMgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVs
ZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgLy8gRG9uJ3QgYWRkIG5hbWVzcGFjZSBhdHRyaWJ1dGUg
aWYgaXQgaXMgYWxyZWFkeSBkZWZpbmVkIGZvciB0aGlzIGVsZW0uCi0gICAgY29uc3QgQXRvbVN0
cmluZyYgcHJlZml4ID0gZWxlbWVudC5wcmVmaXgoKTsKKyAgICBhdXRvJiBwcmVmaXggPSBlbGVt
ZW50LnByZWZpeCgpOwogICAgIGlmIChwcmVmaXguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
IWVsZW1lbnQuaGFzQXR0cmlidXRlKHhtbG5zQXRvbSgpKTsKLQotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxTdHJpbmc+IHhtbG5zV2l0aENvbG9uKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJ4
bWxuczoiKSk7Ci0gICAgcmV0dXJuICFlbGVtZW50Lmhhc0F0dHJpYnV0ZSh4bWxuc1dpdGhDb2xv
bi5nZXQoKSArIHByZWZpeCk7CisgICAgcmV0dXJuICFlbGVtZW50Lmhhc0F0dHJpYnV0ZSgieG1s
bnM6IiArIHByZWZpeCk7CiB9CiAKLWJvb2wgTWFya3VwQWNjdW11bGF0b3I6OnNob3VsZEFkZE5h
bWVzcGFjZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFtZXNwYWNlcyYg
bmFtZXNwYWNlcykKK3N0YXRpYyBib29sIHNob3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShjb25z
dCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFtZXNwYWNlcyYgbmFtZXNwYWNlcykKIHsKICAgICBu
YW1lc3BhY2VzLmNoZWNrQ29uc2lzdGVuY3koKTsKIApAQCAtMzU2LDI2ICszMzEsMjUgQEAgdm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTmFtZXNwYWNlKFN0cmluZ0J1aWxkZXImIHJlc3Vs
dCwgY29uc3QgQXRvbVN0cmluZyYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIFVz
ZSBlbXB0eUF0b20oKXMncyBpbXBsKCkgZm9yIGJvdGggbnVsbCBhbmQgZW1wdHkgc3RyaW5ncyBz
aW5jZSB0aGUgSGFzaE1hcCBjYW4ndCBoYW5kbGUgMCBhcyBhIGtleQotICAgIEF0b21TdHJpbmdJ
bXBsKiBwcmUgPSBwcmVmaXguaXNFbXB0eSgpID8gZW1wdHlBdG9tKCkuaW1wbCgpIDogcHJlZml4
LmltcGwoKTsKLSAgICBBdG9tU3RyaW5nSW1wbCogZm91bmROUyA9IG5hbWVzcGFjZXMuZ2V0KHBy
ZSk7Ci0gICAgaWYgKGZvdW5kTlMgIT0gbmFtZXNwYWNlVVJJLmltcGwoKSkgewotICAgICAgICBu
YW1lc3BhY2VzLnNldChwcmUsIG5hbWVzcGFjZVVSSS5pbXBsKCkpOwotICAgICAgICAvLyBBZGQg
bmFtZXNwYWNlIHRvIHByZWZpeCBwYWlyIHNvIHdlIGNhbiBkbyBjb25zdHJhaW50IGNoZWNraW5n
IGxhdGVyLgotICAgICAgICBpZiAoaW5YTUxGcmFnbWVudFNlcmlhbGl6YXRpb24oKSAmJiAhcHJl
Zml4LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG5hbWVzcGFjZXMuc2V0KG5hbWVzcGFjZVVSSS5p
bXBsKCksIHByZSk7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB4bWwgcHJlZml4IGFuZCBuYW1lc3Bh
Y2UgYXJlIGFsd2F5cyBrbm93biB0byB1cGhvbGQgdGhlIGNvbnN0cmFpbnRzIGxpc3RlZCBhdCBo
dHRwOi8vd3d3LnczLm9yZy9UUi94bWwtbmFtZXMxMS8jeG1sUmVzZXJ2ZWQuCi0gICAgICAgIGlm
IChuYW1lc3BhY2VVUkkuaW1wbCgpID09IFhNTE5hbWVzOjp4bWxOYW1lc3BhY2VVUkktPmltcGwo
KSkKKyAgICAvLyBVc2UgZW1wdHlBdG9tKClzJ3MgaW1wbCgpIGZvciBudWxsIHN0cmluZ3Mgc2lu
Y2UgdGhpcyBIYXNoTWFwIGNhbid0IGhhbmRsZSBudWxscHRyIGFzIGEga2V5CisgICAgYXV0byBh
ZGRSZXN1bHQgPSBuYW1lc3BhY2VzLmFkZChwcmVmaXguaXNOdWxsKCkgPyBlbXB0eUF0b20oKS5p
bXBsKCkgOiBwcmVmaXguaW1wbCgpLCBuYW1lc3BhY2VVUkkuaW1wbCgpKTsKKyAgICBpZiAoIWFk
ZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIGlmIChhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID09IG5hbWVzcGFjZVVSSS5pbXBsKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHJlc3VsdC5hcHBlbmQoJyAnLCB4bWxuc0F0b20oKSk7Ci0gICAgICAgIGlmICghcHJlZml4Lmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJzonLCBwcmVmaXgpOwotCi0gICAg
ICAgIHJlc3VsdC5hcHBlbmQoJz0nKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwotICAg
ICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShyZXN1bHQsIG5hbWVzcGFjZVVSSSwgZmFsc2UpOwot
ICAgICAgICByZXN1bHQuYXBwZW5kKCciJyk7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWUgPSBuYW1lc3BhY2VVUkkuaW1wbCgpOwogICAgIH0KKworICAgIC8vIEFkZCBuYW1lc3Bh
Y2UgdG8gcHJlZml4IHBhaXIgc28gd2UgY2FuIGRvIGNvbnN0cmFpbnQgY2hlY2tpbmcgbGF0ZXIu
CisgICAgaWYgKGluWE1MRnJhZ21lbnRTZXJpYWxpemF0aW9uKCkgJiYgIXByZWZpeC5pc0VtcHR5
KCkpCisgICAgICAgIG5hbWVzcGFjZXMuc2V0KG5hbWVzcGFjZVVSSS5pbXBsKCksIHByZWZpeC5p
bXBsKCkpOworCisgICAgLy8gTWFrZSBzdXJlIHhtbCBwcmVmaXggYW5kIG5hbWVzcGFjZSBhcmUg
YWx3YXlzIGtub3duIHRvIHVwaG9sZCB0aGUgY29uc3RyYWludHMgbGlzdGVkIGF0IGh0dHA6Ly93
d3cudzMub3JnL1RSL3htbC1uYW1lczExLyN4bWxSZXNlcnZlZC4KKyAgICBpZiAobmFtZXNwYWNl
VVJJID09IFhNTE5hbWVzOjp4bWxOYW1lc3BhY2VVUkkpCisgICAgICAgIHJldHVybjsKKworICAg
IHJlc3VsdC5hcHBlbmQoJyAnLCB4bWxuc0F0b20oKSwgcHJlZml4LmlzRW1wdHkoKSA/ICIiIDog
IjoiLCBwcmVmaXgsICI9XCIiKTsKKyAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShyZXN1bHQsIG5h
bWVzcGFjZVVSSSwgZmFsc2UpOworICAgIHJlc3VsdC5hcHBlbmQoJyInKTsKIH0KIAogRW50aXR5
TWFzayBNYXJrdXBBY2N1bXVsYXRvcjo6ZW50aXR5TWFza0ZvclRleHQoY29uc3QgVGV4dCYgdGV4
dCkgY29uc3QKQEAgLTM5NCw3NiArMzY4LDQwIEBAIEVudGl0eU1hc2sgTWFya3VwQWNjdW11bGF0
b3I6OmVudGl0eU1hc2tGb3JUZXh0KGNvbnN0IFRleHQmIHRleHQpIGNvbnN0CiAKIHZvaWQgTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBU
ZXh0JiB0ZXh0KQogewotICAgIGNvbnN0IFN0cmluZyYgdGV4dERhdGEgPSB0ZXh0LmRhdGEoKTsK
LSAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMocmVzdWx0LCB0ZXh0RGF0YSwg
MCwgdGV4dERhdGEubGVuZ3RoKCksIGVudGl0eU1hc2tGb3JUZXh0KHRleHQpKTsKLX0KLQotc3Rh
dGljIHZvaWQgYXBwZW5kQ29tbWVudChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IFN0cmlu
ZyYgY29tbWVudCkKLXsKLSAgICAvLyBGSVhNRTogQ29tbWVudCBjb250ZW50IGlzIG5vdCBlc2Nh
cGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMpIHNob3Vs
ZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5jbHVkZXMgIi0tPiIuCi0gICAgcmVzdWx0LmFw
cGVuZExpdGVyYWwoIjwhLS0iKTsKLSAgICByZXN1bHQuYXBwZW5kKGNvbW1lbnQpOwotICAgIHJl
c3VsdC5hcHBlbmRMaXRlcmFsKCItLT4iKTsKKyAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5n
RW50aXRpZXMocmVzdWx0LCB0ZXh0LmRhdGEoKSwgMCwgdGV4dC5sZW5ndGgoKSwgZW50aXR5TWFz
a0ZvclRleHQodGV4dCkpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRYTUxE
ZWNsYXJhdGlvbihTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IERvY3VtZW50JiBkb2N1bWVu
dCkKK3N0YXRpYyB2b2lkIGFwcGVuZFhNTERlY2xhcmF0aW9uKFN0cmluZ0J1aWxkZXImIHJlc3Vs
dCwgY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIGlmICghZG9jdW1lbnQuaGFzWE1M
RGVjbGFyYXRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVzdWx0LmFwcGVuZExpdGVy
YWwoIjw/eG1sIHZlcnNpb249XCIiKTsKLSAgICByZXN1bHQuYXBwZW5kKGRvY3VtZW50LnhtbFZl
cnNpb24oKSk7Ci0gICAgY29uc3QgU3RyaW5nJiBlbmNvZGluZyA9IGRvY3VtZW50LnhtbEVuY29k
aW5nKCk7Ci0gICAgaWYgKCFlbmNvZGluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVzdWx0LmFw
cGVuZExpdGVyYWwoIlwiIGVuY29kaW5nPVwiIik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZW5j
b2RpbmcpOwotICAgIH0KLSAgICBpZiAoZG9jdW1lbnQueG1sU3RhbmRhbG9uZVN0YXR1cygpICE9
IERvY3VtZW50OjpTdGFuZGFsb25lU3RhdHVzOjpVbnNwZWNpZmllZCkgewotICAgICAgICByZXN1
bHQuYXBwZW5kTGl0ZXJhbCgiXCIgc3RhbmRhbG9uZT1cIiIpOwotICAgICAgICBpZiAoZG9jdW1l
bnQueG1sU3RhbmRhbG9uZSgpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoInll
cyIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgibm8i
KTsKLSAgICB9CisgICAgYXV0byBlbmNvZGluZyA9IGRvY3VtZW50LnhtbEVuY29kaW5nKCk7Cisg
ICAgYm9vbCBpc1N0YW5kYWxvbmVTcGVjaWZpZWQgPSBkb2N1bWVudC54bWxTdGFuZGFsb25lU3Rh
dHVzKCkgIT0gRG9jdW1lbnQ6OlN0YW5kYWxvbmVTdGF0dXM6OlVuc3BlY2lmaWVkOwogCi0gICAg
cmVzdWx0LmFwcGVuZExpdGVyYWwoIlwiPz4iKTsKKyAgICByZXN1bHQuYXBwZW5kKCI8P3htbCB2
ZXJzaW9uPVwiIiwKKyAgICAgICAgZG9jdW1lbnQueG1sVmVyc2lvbigpLAorICAgICAgICBlbmNv
ZGluZy5pc0VtcHR5KCkgPyAiIiA6ICJcIiBlbmNvZGluZz1cIiIsCisgICAgICAgIGVuY29kaW5n
LAorICAgICAgICBpc1N0YW5kYWxvbmVTcGVjaWZpZWQgPyAoZG9jdW1lbnQueG1sU3RhbmRhbG9u
ZSgpID8gIiBzdGFuZGFsb25lPVwieWVzIiA6ICIgc3RhbmRhbG9uZSA9IFwibm8iKSA6ICIiLAor
ICAgICAgICAiXCI/PiIpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmREb2N1
bWVudFR5cGUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBEb2N1bWVudFR5cGUmIGRvY3Vt
ZW50VHlwZSkKK3N0YXRpYyB2b2lkIGFwcGVuZERvY3VtZW50VHlwZShTdHJpbmdCdWlsZGVyJiBy
ZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSYgZG9jdW1lbnRUeXBlKQogewogICAgIGlmIChkb2N1
bWVudFR5cGUubmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVzdWx0
LmFwcGVuZExpdGVyYWwoIjwhRE9DVFlQRSAiKTsKLSAgICByZXN1bHQuYXBwZW5kKGRvY3VtZW50
VHlwZS5uYW1lKCkpOwotICAgIGlmICghZG9jdW1lbnRUeXBlLnB1YmxpY0lkKCkuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIgUFVCTElDIFwiIik7Ci0gICAgICAg
IHJlc3VsdC5hcHBlbmQoZG9jdW1lbnRUeXBlLnB1YmxpY0lkKCkpOwotICAgICAgICByZXN1bHQu
YXBwZW5kKCciJyk7Ci0gICAgICAgIGlmICghZG9jdW1lbnRUeXBlLnN5c3RlbUlkKCkuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7Ci0gICAgICAgICAgICByZXN1
bHQuYXBwZW5kKCciJyk7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRvY3VtZW50VHlwZS5z
eXN0ZW1JZCgpKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyInKTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSBpZiAoIWRvY3VtZW50VHlwZS5zeXN0ZW1JZCgpLmlzRW1wdHkoKSkgewotICAg
ICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiIFNZU1RFTSBcIiIpOwotICAgICAgICByZXN1bHQu
YXBwZW5kKGRvY3VtZW50VHlwZS5zeXN0ZW1JZCgpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgn
IicpOwotICAgIH0KLSAgICByZXN1bHQuYXBwZW5kKCc+Jyk7Ci19Ci0KLXZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbihTdHJpbmdCdWlsZGVyJiByZXN1
bHQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpCi17Ci0gICAgLy8g
RklYTUU6IFBJIGRhdGEgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChhbmQgcG9z
c2libHkgb3RoZXIgY2FsbGVycykgdGhpcyBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGl0
IGluY2x1ZGVzICI/PiIuCi0gICAgcmVzdWx0LmFwcGVuZCgnPCcpOwotICAgIHJlc3VsdC5hcHBl
bmQoJz8nKTsKLSAgICByZXN1bHQuYXBwZW5kKHRhcmdldCk7Ci0gICAgcmVzdWx0LmFwcGVuZCgn
ICcpOwotICAgIHJlc3VsdC5hcHBlbmQoZGF0YSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnPycpOwot
ICAgIHJlc3VsdC5hcHBlbmQoJz4nKTsKKyAgICByZXN1bHQuYXBwZW5kKAorICAgICAgICAiPCFE
T0NUWVBFICIsCisgICAgICAgIGRvY3VtZW50VHlwZS5uYW1lKCksCisgICAgICAgIGRvY3VtZW50
VHlwZS5wdWJsaWNJZCgpLmlzRW1wdHkoKSA/ICIiIDogIiBQVUJMSUMgXCIiLAorICAgICAgICBk
b2N1bWVudFR5cGUucHVibGljSWQoKSwKKyAgICAgICAgZG9jdW1lbnRUeXBlLnB1YmxpY0lkKCku
aXNFbXB0eSgpID8gIiIgOiAiXCIiLAorICAgICAgICBkb2N1bWVudFR5cGUuc3lzdGVtSWQoKS5p
c0VtcHR5KCkgPyAiIiA6IChkb2N1bWVudFR5cGUucHVibGljSWQoKS5pc0VtcHR5KCkgPyAiIFNZ
U1RFTSBcIiIgOiAiIFwiIiksCisgICAgICAgIGRvY3VtZW50VHlwZS5zeXN0ZW1JZCgpLAorICAg
ICAgICBkb2N1bWVudFR5cGUuc3lzdGVtSWQoKS5pc0VtcHR5KCkgPyAiPiIgOiAiXCI+IgorICAg
ICk7CiB9CiAKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKFN0cmluZ0J1
aWxkZXImIHJlc3VsdCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNw
YWNlcykKQEAgLTU5NywxNCArNTM1LDYgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
QXR0cmlidXRlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRWxlbWVudCYgZWwKICAgICAg
ICAgYXBwZW5kTmFtZXNwYWNlKHJlc3VsdCwgZWZmZWN0aXZlWE1MUHJlZml4ZWROYW1lLT5wcmVm
aXgoKSwgZWZmZWN0aXZlWE1MUHJlZml4ZWROYW1lLT5uYW1lc3BhY2VVUkkoKSwgKm5hbWVzcGFj
ZXMpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDREFUQVNlY3Rpb24oU3Ry
aW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIHNlY3Rpb24pCi17Ci0gICAgLy8gRklY
TUU6IENEQVRBIGNvbnRlbnQgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChhbmQg
cG9zc2libHkgb3RoZXIgY2FsbGVycykgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBp
bmNsdWRlcyAiXV0+Ii4KLSAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiPCFbQ0RBVEFbIik7Ci0g
ICAgcmVzdWx0LmFwcGVuZChzZWN0aW9uKTsKLSAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiXV0+
Iik7Ci19Ci0KIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vbkVsZW1lbnROb2RlKFN0
cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSYgbm9kZSwgTmFtZXNwYWNlcyogbmFtZXNw
YWNlcykKIHsKICAgICBpZiAobmFtZXNwYWNlcykKQEAgLTYxNSw3ICs1NDUsOCBAQCB2b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb25FbGVtZW50Tm9kZShTdHJpbmdCdWlsZGVyJiByZXN1
bHQsIGNvbnN0IE5vZGUmCiAgICAgICAgIGFwcGVuZFRleHQocmVzdWx0LCBkb3duY2FzdDxUZXh0
Pihub2RlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgot
ICAgICAgICBhcHBlbmRDb21tZW50KHJlc3VsdCwgZG93bmNhc3Q8Q29tbWVudD4obm9kZSkuZGF0
YSgpKTsKKyAgICAgICAgLy8gRklYTUU6IENvbW1lbnQgY29udGVudCBpcyBub3QgZXNjYXBlZCwg
YnV0IHRoYXQgbWF5IGJlIE9LIGJlY2F1c2UgWE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90
aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5jbHVkZXMgIi0t
PiIuCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIjwhLS0iLCBkb3duY2FzdDxDb21tZW50Pihub2Rl
KS5kYXRhKCksICItLT4iKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb2RlOjpET0NVTUVO
VF9OT0RFOgogICAgICAgICBhcHBlbmRYTUxEZWNsYXJhdGlvbihyZXN1bHQsIGRvd25jYXN0PERv
Y3VtZW50Pihub2RlKSk7CkBAIC02MjYsMTMgKzU1NywxNSBAQCB2b2lkIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmROb25FbGVtZW50Tm9kZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5v
ZGUmCiAgICAgICAgIGFwcGVuZERvY3VtZW50VHlwZShyZXN1bHQsIGRvd25jYXN0PERvY3VtZW50
VHlwZT4obm9kZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OlBST0NFU1NJTkdf
SU5TVFJVQ1RJT05fTk9ERToKLSAgICAgICAgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKHJl
c3VsdCwgZG93bmNhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uPihub2RlKS50YXJnZXQoKSwgZG93
bmNhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uPihub2RlKS5kYXRhKCkpOworICAgICAgICAvLyBG
SVhNRTogUEkgZGF0YSBpcyBub3QgZXNjYXBlZCwgYnV0IFhNTFNlcmlhbGl6ZXIgKGFuZCBwb3Nz
aWJseSBvdGhlciBjYWxsZXJzKSB0aGlzIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQg
aW5jbHVkZXMgIj8+Ii4KKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiPD8iLCBkb3duY2FzdDxQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24+KG5vZGUpLnRhcmdldCgpLCAnICcsIGRvd25jYXN0PFByb2Nlc3Np
bmdJbnN0cnVjdGlvbj4obm9kZSkuZGF0YSgpLCAiPz4iKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBOb2RlOjpFTEVNRU5UX05PREU6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERToKLSAgICAg
ICAgYXBwZW5kQ0RBVEFTZWN0aW9uKHJlc3VsdCwgZG93bmNhc3Q8Q0RBVEFTZWN0aW9uPihub2Rl
KS5kYXRhKCkpOworICAgICAgICAvLyBGSVhNRTogQ0RBVEEgY29udGVudCBpcyBub3QgZXNjYXBl
ZCwgYnV0IFhNTFNlcmlhbGl6ZXIgKGFuZCBwb3NzaWJseSBvdGhlciBjYWxsZXJzKSBzaG91bGQg
cmFpc2UgYW4gZXhjZXB0aW9uIGlmIGl0IGluY2x1ZGVzICJdXT4iLgorICAgICAgICByZXN1bHQu
YXBwZW5kKCI8IVtDREFUQVsiLCBkb3duY2FzdDxDREFUQVNlY3Rpb24+KG5vZGUpLmRhdGEoKSwg
Il1dPiIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OkFUVFJJQlVURV9OT0RFOgog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFy
a3VwQWNjdW11bGF0b3IuaAppbmRleCA2NzMyNTlkZWE2NDc4ZmE5MWEyNjI1NmU2MzMzOTgyYTdi
OGEyMDRhLi44NGFkZjU4NTE4ZWNkNmI1ZjdjNWU3YzljZTkxYWViNDM3ZmU1NGRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCkBAIC02NywyMSArNjcsMTUg
QEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRp
dGllcyhTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQsIHVuc2lnbmVkLCBF
bnRpdHlNYXNrKTsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBzaXplX3QgdG90YWxMZW5ndGgo
Y29uc3QgVmVjdG9yPFN0cmluZz4mKTsKLSAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9tYXJrdXAubGVuZ3RoKCk7IH0KLSAgICBib29sIGlzQWxsQVNDSUkoKSBjb25zdCB7IHJl
dHVybiBtX21hcmt1cC50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKS5pc0FsbEFTQ0lJKCk7IH0K
KyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX21hcmt1cC5sZW5ndGgoKTsg
fQorICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFya3VwLmlzQWxsQVND
SUkoKTsgfQogCi0gICAgdm9pZCBjb25jYXRlbmF0ZU1hcmt1cChTdHJpbmdCdWlsZGVyJik7Cisg
ICAgU3RyaW5nQnVpbGRlciB0YWtlTWFya3VwKCk7CiAKLSAgICB2b2lkIGFwcGVuZFN0cmluZyhj
b25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGFwcGVuZFN0cmluZ1ZpZXcoU3RyaW5nVmlldyk7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uU3RyaW5nVHlwZXM+IHZvaWQgYXBwZW5kKFN0cmluZ1R5
cGVzLi4uIHN0cmluZ3MpIHsgbV9tYXJrdXAuYXBwZW5kKHN0cmluZ3MuLi4pOyB9CiAKICAgICB2
b2lkIHN0YXJ0QXBwZW5kaW5nTm9kZShjb25zdCBOb2RlJiwgTmFtZXNwYWNlcyogPSBudWxscHRy
KTsKLSAgICB2b2lkIGVuZEFwcGVuZGluZ05vZGUoY29uc3QgTm9kZSYgbm9kZSkKLSAgICB7Ci0g
ICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkKLSAgICAgICAgICAgIGFwcGVuZEVuZFRhZyht
X21hcmt1cCwgZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpOwotICAgIH0KKyAgICB2b2lkIGVuZEFw
cGVuZGluZ05vZGUoY29uc3QgTm9kZSYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFN0YXJ0
VGFnKFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50JiwgTmFtZXNwYWNlcyopOwogICAgIHZp
cnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoU3RyaW5nQnVpbGRlciYsIGNvbnN0IEVsZW1lbnQmKTsK
QEAgLTkyLDIzICs4NiwxNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBhcHBlbmRDbG9zZVRhZyhT
dHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYpOwogCiAgICAgdm9pZCBhcHBlbmROb25FbGVt
ZW50Tm9kZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgTm9kZSYsIE5hbWVzcGFjZXMqKTsKLSAgICB2
b2lkIGFwcGVuZEVuZE1hcmt1cChTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYpOwogCi0g
ICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5n
JiwgYm9vbCBpc1NlcmlhbGl6aW5nSFRNTCk7Ci0gICAgdm9pZCBhcHBlbmROYW1lc3BhY2UoU3Ry
aW5nQnVpbGRlciYsIGNvbnN0IEF0b21TdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbVN0cmluZyYg
bmFtZXNwYWNlVVJJLCBOYW1lc3BhY2VzJiwgYm9vbCBhbGxvd0VtcHR5RGVmYXVsdE5TID0gZmFs
c2UpOwotICAgIHZvaWQgYXBwZW5kWE1MRGVjbGFyYXRpb24oU3RyaW5nQnVpbGRlciYsIGNvbnN0
IERvY3VtZW50Jik7Ci0gICAgdm9pZCBhcHBlbmREb2N1bWVudFR5cGUoU3RyaW5nQnVpbGRlciYs
IGNvbnN0IERvY3VtZW50VHlwZSYpOwotICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0
aW9uKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBk
YXRhKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVy
JiwgY29uc3QgU3RyaW5nJiwgYm9vbCBpc1NlcmlhbGl6aW5nSFRNTCk7CiAgICAgdm9pZCBhcHBl
bmRBdHRyaWJ1dGUoU3RyaW5nQnVpbGRlciYsIGNvbnN0IEVsZW1lbnQmLCBjb25zdCBBdHRyaWJ1
dGUmLCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBlbmRDREFUQVNlY3Rpb24oU3RyaW5nQnVp
bGRlciYsIGNvbnN0IFN0cmluZyYpOwogCi0gICAgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VFbGVt
ZW50KGNvbnN0IEVsZW1lbnQmKTsKLSAgICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0
ZShjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzJik7CiAgICAgRW50aXR5TWFzayBlbnRpdHlN
YXNrRm9yVGV4dChjb25zdCBUZXh0JikgY29uc3Q7CiAKICAgICBWZWN0b3I8Tm9kZSo+KiBjb25z
dCBtX25vZGVzOwogCiBwcml2YXRlOgorICAgIHZvaWQgYXBwZW5kTmFtZXNwYWNlKFN0cmluZ0J1
aWxkZXImLCBjb25zdCBBdG9tU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWVz
cGFjZVVSSSwgTmFtZXNwYWNlcyYsIGJvb2wgYWxsb3dFbXB0eURlZmF1bHROUyA9IGZhbHNlKTsK
ICAgICBTdHJpbmcgcmVzb2x2ZVVSTElmTmVlZGVkKGNvbnN0IEVsZW1lbnQmLCBjb25zdCBTdHJp
bmcmKSBjb25zdDsKICAgICB2b2lkIGFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKFN0cmlu
Z0J1aWxkZXImLCBjb25zdCBFbGVtZW50JiwgY29uc3QgQXR0cmlidXRlJik7CiAgICAgdm9pZCBz
ZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKE5vZGUmIHRhcmdldE5vZGUsIFNlcmlhbGl6ZWRO
b2RlcywgY29uc3QgTmFtZXNwYWNlcyosIFZlY3RvcjxRdWFsaWZpZWROYW1lPiogdGFnTmFtZXNU
b1NraXApOwpAQCAtMTE4LDggKzEwNSwxNCBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nQnVpbGRl
ciBtX21hcmt1cDsKICAgICBjb25zdCBSZXNvbHZlVVJMcyBtX3Jlc29sdmVVUkxzOwotICAgIFNl
cmlhbGl6YXRpb25TeW50YXggbV9zZXJpYWxpemF0aW9uU3ludGF4OworICAgIGNvbnN0IFNlcmlh
bGl6YXRpb25TeW50YXggbV9zZXJpYWxpemF0aW9uU3ludGF4OwogICAgIHVuc2lnbmVkIG1fcHJl
Zml4TGV2ZWwgeyAwIH07CiB9OwogCitpbmxpbmUgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6ZW5k
QXBwZW5kaW5nTm9kZShjb25zdCBOb2RlJiBub2RlKQoreworICAgIGlmIChpczxFbGVtZW50Pihu
b2RlKSkKKyAgICAgICAgYXBwZW5kRW5kVGFnKG1fbWFya3VwLCBkb3duY2FzdDxFbGVtZW50Pihu
b2RlKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmNwcAppbmRleCBhZGM4OGY2ZDE5NzU1MzJmYWExNTQ2MTczMWEwYmU5OGJlYTAxNDI3Li45MGVl
NmMzNzMyOWFhN2RjMjQ3MDVmZTQ2Yjg4OTY3Zjg0OTU3MmM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCkBAIC04Niw3ICs4Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKIAotc3RhdGljIGJvb2wgcHJvcGVydHlNaXNzaW5nT3JFcXVh
bFRvTm9uZShTdHlsZVByb3BlcnRpZXMqLCBDU1NQcm9wZXJ0eUlEKTsKK3N0YXRpYyBib29sIHBy
b3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiwgQ1NTUHJv
cGVydHlJRCk7CiAKIGNsYXNzIEF0dHJpYnV0ZUNoYW5nZSB7CiBwdWJsaWM6CkBAIC0yMzEsNyAr
MjMxLDcgQEAgcHVibGljOgogICAgIGJvb2wgbmVlZFJlbGF0aXZlU3R5bGVXcmFwcGVyKCkgY29u
c3QgeyByZXR1cm4gbV9uZWVkUmVsYXRpdmVTdHlsZVdyYXBwZXI7IH0KICAgICBib29sIG5lZWRD
bGVhcmluZ0RpdigpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZENsZWFyaW5nRGl2OyB9CiAKLSAgICB1
c2luZyBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RyaW5nOworICAgIHVzaW5nIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmQ7CiAKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlKE5vZGUm
IG5vZGUpCiAgICAgewpAQCAtMjQyLDEzICsyNDIsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBw
cmVwZW5kTWV0YUNoYXJzZXRVVEY4VGFnSWZOb25BU0NJSUNoYXJhY3RlcnNBcmVQcmVzZW50KCkK
ICAgICB7Ci0gICAgICAgIGlmIChpc0FsbEFTQ0lJKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cC5hcHBlbmQoIjxtZXRhIGNoYXJzZXQ9
XCJVVEYtOFwiPiJfcyk7CisgICAgICAgIGlmICghaXNBbGxBU0NJSSgpKQorICAgICAgICAgICAg
bV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cC5hcHBlbmQoIjxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwi
PiJfcyk7CiAgICAgfQogCiBwcml2YXRlOgorICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0Owog
ICAgIHZvaWQgYXBwZW5kU3R5bGVOb2RlT3BlblRhZyhTdHJpbmdCdWlsZGVyJiwgU3R5bGVQcm9w
ZXJ0aWVzKiwgRG9jdW1lbnQmLCBib29sIGlzQmxvY2sgPSBmYWxzZSk7CiAgICAgY29uc3QgU3Ry
aW5nJiBzdHlsZU5vZGVDbG9zZVRhZyhib29sIGlzQmxvY2sgPSBmYWxzZSk7CiAKQEAgLTM2NCw3
ICszNjMsNyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0aFN0eWxlTm9k
ZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBEb2N1bWVudAogICAgIFN0cmluZ0J1aWxkZXIgb3Bl
blRhZzsKICAgICBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKG9wZW5UYWcsIHN0eWxlLCBkb2N1bWVu
dCwgaXNCbG9jayk7CiAgICAgbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cC5hcHBlbmQob3BlblRh
Zy50b1N0cmluZygpKTsKLSAgICBhcHBlbmRTdHJpbmcoc3R5bGVOb2RlQ2xvc2VUYWcoaXNCbG9j
aykpOworICAgIGFwcGVuZChzdHlsZU5vZGVDbG9zZVRhZyhpc0Jsb2NrKSk7CiB9CiAKIHZvaWQg
U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0eWxlTm9kZU9wZW5UYWcoU3RyaW5nQnVp
bGRlciYgb3V0LCBTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBEb2N1bWVudCYgZG9jdW1lbnQsIGJv
b2wgaXNCbG9jaykKQEAgLTM4NiwxNyArMzg1LDM4IEBAIGNvbnN0IFN0cmluZyYgU3R5bGVkTWFy
a3VwQWNjdW11bGF0b3I6OnN0eWxlTm9kZUNsb3NlVGFnKGJvb2wgaXNCbG9jaykKICAgICByZXR1
cm4gaXNCbG9jayA/IGRpdkNsb3NlIDogc3R5bGVTcGFuQ2xvc2U7CiB9CiAKLVN0cmluZyBTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvcjo6dGFrZVJlc3VsdHMoKQorYm9vbCBTdHlsZWRNYXJrdXBBY2N1
bXVsYXRvcjo6aXNBbGxBU0NJSSgpIGNvbnN0CiB7Ci0gICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7
Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSh0b3RhbExlbmd0aChtX3JldmVyc2VkUHJlY2Vk
aW5nTWFya3VwKSArIGxlbmd0aCgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSBtX3JldmVyc2Vk
UHJlY2VkaW5nTWFya3VwLnNpemUoKTsgaSA+IDA7IC0taSkKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZChtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwW2kgLSAxXSk7CisgICAgZm9yIChhdXRvJiBwcmVj
ZWRpbmcgOiBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwKSB7CisgICAgICAgIGlmICghcHJlY2Vk
aW5nLmlzQWxsQVNDSUkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIE1hcmt1cEFjY3VtdWxhdG9yOjppc0FsbEFTQ0lJKCk7Cit9CiAKLSAgICBjb25jYXRl
bmF0ZU1hcmt1cChyZXN1bHQpOworLy8gU3RvcGdhcCB1bnRpbCBDKysyMCBhZGRzIHN0ZDo6cmFu
Z2VzOjpyZXZlcnNlX3ZpZXcuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uPiBzdHJ1Y3Qg
UmV2ZXJzZVZpZXcgeworICAgIENvbGxlY3Rpb24mIGNvbGxlY3Rpb247CisgICAgZGVjbHR5cGUo
Y29sbGVjdGlvbi5yYmVnaW4oKSkgYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb2xsZWN0aW9uLnJi
ZWdpbigpOyB9CisgICAgZGVjbHR5cGUoY29sbGVjdGlvbi5yZW5kKCkpIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIGNvbGxlY3Rpb24ucmVuZCgpOyB9CisgICAgZGVjbHR5cGUoY29sbGVjdGlvbi5zaXpl
KCkpIHNpemUoKSBjb25zdCB7IHJldHVybiBjb2xsZWN0aW9uLnNpemUoKTsgfQorICAgIFJldmVy
c2VWaWV3KENvbGxlY3Rpb24mIGNvbGxlY3Rpb24pCisgICAgICAgIDogY29sbGVjdGlvbihjb2xs
ZWN0aW9uKQorICAgIHsKKyAgICB9Cit9OwogCi0gICAgLy8gV2UgcmVtb3ZlICdcMCcgY2hhcmFj
dGVycyBiZWNhdXNlIHRoZXkgYXJlIG5vdCB2aXNpYmx5IHJlbmRlcmVkIHRvIHRoZSB1c2VyLgor
U3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0YWtlUmVzdWx0cygpCit7CisgICAgQ2hl
Y2tlZFVpbnQzMiBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICBmb3IgKGF1dG8mIHN0cmlu
ZyA6IG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXApCisgICAgICAgIGxlbmd0aCArPSBzdHJpbmcu
bGVuZ3RoKCk7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVD
YXBhY2l0eShsZW5ndGgudW5zYWZlR2V0KCkpOworICAgIGZvciAoYXV0byYgc3RyaW5nIDogUmV2
ZXJzZVZpZXcgeyBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwIH0pCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoc3RyaW5nKTsKKyAgICByZXN1bHQuYXBwZW5kKHRha2VNYXJrdXAoKSk7CisgICAgLy8g
UmVtb3ZlICdcMCcgY2hhcmFjdGVycyBiZWNhdXNlIHRoZXkgYXJlIG5vdCB2aXNpYmx5IHJlbmRl
cmVkIHRvIHRoZSB1c2VyLgogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKS5yZXBsYWNlV2l0
aExpdGVyYWwoJ1wwJywgIiIpOwogfQogCkBAIC00MDUsNyArNDI1LDcgQEAgdm9pZCBTdHlsZWRN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFRl
eHQmIHRleHQpCiAgICAgY29uc3QgYm9vbCBwYXJlbnRJc1RleHRhcmVhID0gaXM8SFRNTFRleHRB
cmVhRWxlbWVudD4odGV4dC5wYXJlbnRFbGVtZW50KCkpOwogICAgIGNvbnN0IGJvb2wgd3JhcHBp
bmdTcGFuID0gc2hvdWxkQXBwbHlXcmFwcGluZ1N0eWxlKHRleHQpICYmICFwYXJlbnRJc1RleHRh
cmVhOwogICAgIGlmICh3cmFwcGluZ1NwYW4pIHsKLSAgICAgICAgUmVmUHRyPEVkaXRpbmdTdHls
ZT4gd3JhcHBpbmdTdHlsZSA9IG1fd3JhcHBpbmdTdHlsZS0+Y29weSgpOworICAgICAgICBhdXRv
IHdyYXBwaW5nU3R5bGUgPSBtX3dyYXBwaW5nU3R5bGUtPmNvcHkoKTsKICAgICAgICAgLy8gRklY
TUU6IDxyZGFyOi8vcHJvYmxlbS81MzcxNTM2PiBTdHlsZSBydWxlcyB0aGF0IG1hdGNoIHBhc3Rl
ZCBjb250ZW50IGNhbiBjaGFuZ2UgaXQncyBhcHBlYXJhbmNlCiAgICAgICAgIC8vIE1ha2Ugc3Vy
ZSBzcGFucyBhcmUgaW5saW5lIHN0eWxlIGluIHBhc3RlIHNpZGUgZS5nLiBzcGFuIHsgZGlzcGxh
eTogYmxvY2sgfS4KICAgICAgICAgd3JhcHBpbmdTdHlsZS0+Zm9yY2VJbmxpbmUoKTsKQEAgLTU2
NCw3ICs1ODQsNyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydFRh
ZyhTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IEVsZW1lbnQmCiAgICAgICAgIGlmICghbmV3SW5s
aW5lU3R5bGUtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgb3V0LmFwcGVuZExpdGVyYWwoIiBz
dHlsZT1cIiIpOwogICAgICAgICAgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3V0LCBuZXdJbmxp
bmVTdHlsZS0+c3R5bGUoKS0+YXNUZXh0KCksIGRvY3VtZW50SXNIVE1MKTsKLSAgICAgICAgICAg
IG91dC5hcHBlbmQoJ1wiJyk7CisgICAgICAgICAgICBvdXQuYXBwZW5kKCciJyk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTcyMSw5ICs3NDEsOSBAQCBib29sIFN0eWxlZE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmROb2RlVG9QcmVzZXJ2ZU1TT0xpc3QoTm9kZSYgbm9kZSkKICAgICAgICAgaWYg
KG1zb0xpc3REZWZpbml0aW9uc0VuZCA9PSBub3RGb3VuZCB8fCBzdGFydCA+PSBtc29MaXN0RGVm
aW5pdGlvbnNFbmQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgYXBwZW5k
U3RyaW5nKCI8aGVhZD48c3R5bGUgY2xhc3M9XCIiIFdlYktpdE1TT0xpc3RRdWlya3NTdHlsZSAi
XCI+XG48IS0tXG4iKTsKLSAgICAgICAgYXBwZW5kU3RyaW5nVmlldyhTdHJpbmdWaWV3KHRleHRD
aGlsZC5kYXRhKCkpLnN1YnN0cmluZyhzdGFydCwgbXNvTGlzdERlZmluaXRpb25zRW5kIC0gc3Rh
cnQgKyAzKSk7Ci0gICAgICAgIGFwcGVuZFN0cmluZygiXG4tLT5cbjwvc3R5bGU+PC9oZWFkPiIp
OworICAgICAgICBhcHBlbmQoIjxoZWFkPjxzdHlsZSBjbGFzcz1cIiIgV2ViS2l0TVNPTGlzdFF1
aXJrc1N0eWxlICJcIj5cbjwhLS1cbiIsCisgICAgICAgICAgICBTdHJpbmdWaWV3KHRleHRDaGls
ZC5kYXRhKCkpLnN1YnN0cmluZyhzdGFydCwgbXNvTGlzdERlZmluaXRpb25zRW5kIC0gc3RhcnQg
KyAzKSwKKyAgICAgICAgICAgICJcbi0tPlxuPC9zdHlsZT48L2hlYWQ+Iik7CiAKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNzU0LDE2ICs3NzQsMTIgQEAgc3RhdGljIGlubGluZSBO
b2RlKiBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZShOb2RlKiBjb21tb25B
bmNlc3RvcikKICAgICByZXR1cm4gYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVhcmFu
Y2VGb3JCbG9jayhlbmNsb3NpbmdCbG9jayhjb21tb25BbmNlc3RvcikpOwogfQogCi1zdGF0aWMg
Ym9vbCBwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKFN0eWxlUHJvcGVydGllcyogc3R5bGUs
IENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3N0YXRpYyBib29sIHByb3BlcnR5TWlzc2luZ09y
RXF1YWxUb05vbmUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlEKQogewogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJv
cGVydHlJRCk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYg
KCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS52YWx1ZUlEKCkg
PT0gQ1NTVmFsdWVOb25lOworICAgIGF1dG8gdmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShwcm9wZXJ0eUlEKTsKKyAgICByZXR1cm4gaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NT
VmFsdWVOb25lOwogfQogCiBzdGF0aWMgYm9vbCBuZWVkSW50ZXJjaGFuZ2VOZXdsaW5lQWZ0ZXIo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2KQpAQCAtODY5LDcgKzg4NSw3IEBAIHN0YXRpYyBTdHJp
bmcgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2VJbnRlcm5hbChjb25zdCBQb3Np
dGlvbiYgc3RhcnQsCiAgICAgICAgIGlmICh2aXNpYmxlU3RhcnQgPT0gdmlzaWJsZUVuZC5wcmV2
aW91cygpKQogICAgICAgICAgICAgcmV0dXJuIGludGVyY2hhbmdlTmV3bGluZVN0cmluZzsKIAot
ICAgICAgICBhY2N1bXVsYXRvci5hcHBlbmRTdHJpbmcoaW50ZXJjaGFuZ2VOZXdsaW5lU3RyaW5n
KTsKKyAgICAgICAgYWNjdW11bGF0b3IuYXBwZW5kKGludGVyY2hhbmdlTmV3bGluZVN0cmluZy5n
ZXQoKSk7CiAgICAgICAgIHN0YXJ0QWRqdXN0ZWRGb3JJbnRlcmNoYW5nZU5ld2xpbmUgPSB2aXNp
YmxlU3RhcnQubmV4dCgpLmRlZXBFcXVpdmFsZW50KCk7CiAKICAgICAgICAgaWYgKGNvbXBhcmVQ
b3NpdGlvbnMoc3RhcnRBZGp1c3RlZEZvckludGVyY2hhbmdlTmV3bGluZSwgZW5kKSA+PSAwKQpA
QCAtOTE1LDcgKzkzMSw3IEBAIHN0YXRpYyBTdHJpbmcgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3Vh
bEFwcGVhcmFuY2VJbnRlcm5hbChjb25zdCBQb3NpdGlvbiYgc3RhcnQsCiAgICAgCiAgICAgaWYg
KGFjY3VtdWxhdG9yLm5lZWRSZWxhdGl2ZVN0eWxlV3JhcHBlcigpICYmIG5lZWRzUG9zaXRpb25T
dHlsZUNvbnZlcnNpb24pIHsKICAgICAgICAgaWYgKGFjY3VtdWxhdG9yLm5lZWRDbGVhcmluZ0Rp
digpKQotICAgICAgICAgICAgYWNjdW11bGF0b3IuYXBwZW5kU3RyaW5nKCI8ZGl2IHN0eWxlPVwi
Y2xlYXI6IGJvdGg7XCI+PC9kaXY+Iik7CisgICAgICAgICAgICBhY2N1bXVsYXRvci5hcHBlbmQo
IjxkaXYgc3R5bGU9XCJjbGVhcjogYm90aDtcIj48L2Rpdj4iKTsKICAgICAgICAgUmVmUHRyPEVk
aXRpbmdTdHlsZT4gcG9zaXRpb25SZWxhdGl2ZVN0eWxlID0gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVz
QW5kSW5saW5lRGVjbCgqYm9keSk7CiAgICAgICAgIHBvc2l0aW9uUmVsYXRpdmVTdHlsZS0+c3R5
bGUoKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVSZWxhdGl2ZSk7
CiAgICAgICAgIGFjY3VtdWxhdG9yLndyYXBXaXRoU3R5bGVOb2RlKHBvc2l0aW9uUmVsYXRpdmVT
dHlsZS0+c3R5bGUoKSwgZG9jdW1lbnQsIHRydWUpOwpAQCAtOTIzLDEzICs5MzksMTQgQEAgc3Rh
dGljIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZUludGVybmFsKGNv
bnN0IFBvc2l0aW9uJiBzdGFydCwKIAogICAgIC8vIEZJWE1FOiBUaGUgaW50ZXJjaGFuZ2UgbmV3
bGluZSBzaG91bGQgYmUgcGxhY2VkIGluIHRoZSBibG9jayB0aGF0IGl0J3MgaW4sIG5vdCBhZnRl
ciBhbGwgb2YgdGhlIGNvbnRlbnQsIHVuY29uZGl0aW9uYWxseS4KICAgICBpZiAoYW5ub3RhdGUg
PT0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6WWVzICYmIG5lZWRJbnRlcmNoYW5nZU5ld2xpbmVB
ZnRlcih2aXNpYmxlRW5kLnByZXZpb3VzKCkpKQotICAgICAgICBhY2N1bXVsYXRvci5hcHBlbmRT
dHJpbmcoaW50ZXJjaGFuZ2VOZXdsaW5lU3RyaW5nKTsKKyAgICAgICAgYWNjdW11bGF0b3IuYXBw
ZW5kKGludGVyY2hhbmdlTmV3bGluZVN0cmluZy5nZXQoKSk7CiAKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICAvLyBPbiBDb2NvYSBwbGF0Zm9ybXMsIHRoaXMgbWFya3VwIGlzIGV2ZW50dWFsbHkg
cGVyc2lzdGVkIHRvIHRoZSBwYXN0ZWJvYXJkIGFuZCByZWFkIGJhY2sgYXMgVVRGLTggZGF0YSwK
ICAgICAvLyBzbyB0aGlzIG1ldGEgdGFnIGlzIG5lZWRlZCBmb3IgY2xpZW50cyB0aGF0IHJlYWQg
dGhpcyBkYXRhIGluIHRoZSBmdXR1cmUgZnJvbSB0aGUgcGFzdGVib2FyZCBhbmQgbG9hZCBpdC4K
ICAgICBhY2N1bXVsYXRvci5wcmVwZW5kTWV0YUNoYXJzZXRVVEY4VGFnSWZOb25BU0NJSUNoYXJh
Y3RlcnNBcmVQcmVzZW50KCk7CiAjZW5kaWYKKwogICAgIHJldHVybiBhY2N1bXVsYXRvci50YWtl
UmVzdWx0cygpOwogfQogCkBAIC05NDUsMTcgKzk2MiwxNiBAQCBTdHJpbmcgc2VyaWFsaXplUHJl
c2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
LCBSZQogICAgICAgICBBbm5vdGF0ZUZvckludGVyY2hhbmdlOjpZZXMsIENvbnZlcnRCbG9ja3NU
b0lubGluZXM6Ok5vLCBTdGFuZGFyZEZvbnRGYW1pbHlTZXJpYWxpemF0aW9uTW9kZTo6S2VlcCwg
TVNPTGlzdE1vZGU6OkRvTm90UHJlc2VydmUpOwogfQogCi0KLXN0YXRpYyBib29sIHNob3VsZFBy
ZXNlcnZlTVNPTGlzdHMoY29uc3QgU3RyaW5nJiBtYXJrdXApCitzdGF0aWMgYm9vbCBzaG91bGRQ
cmVzZXJ2ZU1TT0xpc3RzKFN0cmluZ1ZpZXcgbWFya3VwKQogewogICAgIGlmICghbWFya3VwLnN0
YXJ0c1dpdGgoIjxodG1sIHhtbG5zOiIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXV0
byB0YWdDbG9zZSA9IG1hcmt1cC5maW5kKCc+Jyk7CiAgICAgaWYgKHRhZ0Nsb3NlID09IG5vdEZv
dW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byBodG1sVGFnID0gbWFya3VwLnN1
YnN0cmluZygwLCB0YWdDbG9zZSk7Ci0gICAgcmV0dXJuIGh0bWxUYWcuY29udGFpbnMoInhtbG5z
Om89XCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2VcIiIpCi0gICAgICAg
ICYmIGh0bWxUYWcuY29udGFpbnMoInhtbG5zOnc9XCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29t
Om9mZmljZTp3b3JkXCIiKTsKKyAgICBhdXRvIHRhZyA9IG1hcmt1cC5zdWJzdHJpbmcoMCwgdGFn
Q2xvc2UpOworICAgIHJldHVybiB0YWcuY29udGFpbnMoInhtbG5zOm89XCJ1cm46c2NoZW1hcy1t
aWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2VcIiIpCisgICAgICAgICYmIHRhZy5jb250YWlucygi
eG1sbnM6dz1cInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmRcIiIpOwogfQog
CiBTdHJpbmcgc2FuaXRpemVkTWFya3VwRm9yRnJhZ21lbnRJbkRvY3VtZW50KFJlZjxEb2N1bWVu
dEZyYWdtZW50PiYmIGZyYWdtZW50LCBEb2N1bWVudCYgZG9jdW1lbnQsIE1TT0xpc3RRdWlya3Mg
bXNvTGlzdFF1aXJrcywgY29uc3QgU3RyaW5nJiBvcmlnaW5hbE1hcmt1cCkKQEAgLTk3MSwyMCAr
OTg3LDE2IEBAIFN0cmluZyBzYW5pdGl6ZWRNYXJrdXBGb3JGcmFnbWVudEluRG9jdW1lbnQoUmVm
PERvY3VtZW50RnJhZ21lbnQ+JiYgZnJhZ21lbnQsIERvCiAgICAgYXV0byByZXN1bHQgPSBzZXJp
YWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZUludGVybmFsKGZpcnN0UG9zaXRpb25Jbk5v
ZGUoYm9keUVsZW1lbnQuZ2V0KCkpLCBsYXN0UG9zaXRpb25Jbk5vZGUoYm9keUVsZW1lbnQuZ2V0
KCkpLCBudWxscHRyLAogICAgICAgICBSZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxl
VVJMc0ZvclByaXZhY3ksIFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8sIEFubm90YXRlRm9ySW50
ZXJjaGFuZ2U6OlllcywgQ29udmVydEJsb2Nrc1RvSW5saW5lczo6Tm8sICBTdGFuZGFyZEZvbnRG
YW1pbHlTZXJpYWxpemF0aW9uTW9kZTo6U3RyaXAsIG1zb0xpc3RNb2RlKTsKIAotICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKLSAgICBpZiAobXNvTGlzdE1vZGUgPT0gTVNPTGlzdE1vZGU6OlBy
ZXNlcnZlKSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPGh0bWwgeG1sbnM6bz1c
InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZVwiXG4iCi0gICAgICAgICAg
ICAieG1sbnM6dz1cInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmRcIlxuIgot
ICAgICAgICAgICAgInhtbG5zOm09XCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmlj
ZS8yMDA0LzEyL29tbWxcIlxuIgotICAgICAgICAgICAgInhtbG5zPVwiaHR0cDovL3d3dy53My5v
cmcvVFIvUkVDLWh0bWw0MFwiPiIpOwotICAgIH0KLQotICAgIGJ1aWxkZXIuYXBwZW5kKHJlc3Vs
dCk7Ci0KLSAgICBpZiAobXNvTGlzdE1vZGUgPT0gTVNPTGlzdE1vZGU6OlByZXNlcnZlKQotICAg
ICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjwvaHRtbD4iKTsKKyAgICBpZiAobXNvTGlzdE1v
ZGUgIT0gTVNPTGlzdE1vZGU6OlByZXNlcnZlKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0g
ICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygKKyAg
ICAgICAgIjxodG1sIHhtbG5zOm89XCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpv
ZmZpY2VcIlxuIgorICAgICAgICAieG1sbnM6dz1cInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206
b2ZmaWNlOndvcmRcIlxuIgorICAgICAgICAieG1sbnM6bT1cImh0dHA6Ly9zY2hlbWFzLm1pY3Jv
c29mdC5jb20vb2ZmaWNlLzIwMDQvMTIvb21tbFwiXG4iCisgICAgICAgICJ4bWxucz1cImh0dHA6
Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDBcIj4iLAorICAgICAgICByZXN1bHQsCisgICAgICAg
ICI8L2h0bWw+Iik7CiB9CiAKIHN0YXRpYyB2b2lkIHJlc3RvcmVBdHRhY2htZW50RWxlbWVudHNJ
bkZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IDY2NWFjZTQ3ZTc5ZTE0M2ExZDA2NTM1OTg3MzdjZTQw
N2EwYTIwZDcuLmE5MGQ0ZWNiOTU4OTM0N2M1NmYwMGUyYjBiNzc5NDFiOTg5YjgxODQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTcxNCw3ICs3MTQsNyBAQCB2
b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVzZXREZWZhdWx0QnV0dG9uKCkKICAgICBpZiAoIW1fZGVm
YXVsdEJ1dHRvbikgewogICAgICAgICAvLyBDb21wdXRpbmcgdGhlIGRlZmF1bHQgYnV0dG9uIGlz
IG5vdCBjaGVhcCwgd2UgZG9uJ3Qgd2FudCB0byBkbyBpdCB1bmxlc3MgbmVlZGVkLgogICAgICAg
ICAvLyBJZiB0aGVyZSB3YXMgbm8gZGVmYXVsdCBidXR0b24gc2V0LCB0aGUgb25seSBzdHlsZSB0
byBpbnZhbGlkYXRlIGlzIHRoZSBlbGVtZW50Ci0gICAgICAgIC8vIGJlaW5nIGFkZGVkIHRvIHRo
ZSBmb3JtLiBUaGlzIGlzIGRvbmUgZXhwbGljaXRlbHkgaW4gcmVnaXN0ZXJGb3JtRWxlbWVudCgp
LgorICAgICAgICAvLyBiZWluZyBhZGRlZCB0byB0aGUgZm9ybS4gVGhpcyBpcyBkb25lIGV4cGxp
Y2l0bHkgaW4gcmVnaXN0ZXJGb3JtRWxlbWVudCgpLgogICAgICAgICByZXR1cm47CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MT3BlcmF0b3JEaWN0aW9u
YXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxPcGVyYXRvckRpY3Rpb25hcnku
Y3BwCmluZGV4IGU5YmZmODlmZGFhMTk3M2JhYWMyYjFiODBlYmNmZDM3MjM4YWQ0MGEuLjJkMmJj
MmJlNjAxNTBlMGNhOTBiODNjMjlhM2U5ODg4MzkwOWQ4YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL21hdGhtbC9NYXRoTUxPcGVyYXRvckRpY3Rpb25hcnkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL21hdGhtbC9NYXRoTUxPcGVyYXRvckRpY3Rpb25hcnkuY3BwCkBAIC0xMTM4LDcgKzEx
MzgsNyBAQCBPcHRpb25hbDxQcm9wZXJ0eT4gTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpzZWFy
Y2goVUNoYXIzMiBjaGFyYWN0ZXIsIEZvcm0gZm9ybQogICAgIGlmIChleHBsaWNpdEZvcm0pCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAvLyBJZiB3ZSBkaWQgbm90IGZpbmQg
dGhlIGRlc2lyZWQgb3BlcmF0b3IgZm9ybSBhbmQgaWYgaXQgd2FzIG5vdCBzZXQgZXhwbGljaXRl
bHksIHdlIHVzZSB0aGUgZmlyc3Qgb25lIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6IEluZml4LCBQ
cmVmaXgsIFBvc3RmaXguCisgICAgLy8gSWYgd2UgZGlkIG5vdCBmaW5kIHRoZSBkZXNpcmVkIG9w
ZXJhdG9yIGZvcm0gYW5kIGlmIGl0IHdhcyBub3Qgc2V0IGV4cGxpY2l0bHksIHdlIHVzZSB0aGUg
Zmlyc3Qgb25lIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6IEluZml4LCBQcmVmaXgsIFBvc3RmaXgu
CiAgICAgLy8gVGhpcyBpcyB0byBoYW5kbGUgYmFkIE1hdGhNTCBtYXJrdXAgd2l0aG91dCBleHBs
aWNpdCA8bXJvdz4gZGVsaW1pdGVycyBsaWtlICI8bW8+KDwvbW8+PG1pPmE8L21pPjxtbz4pPC9t
bz48bW8+KDwvbW8+PG1pPmI8L21pPjxtbz4pPC9tbz4iIHdoZXJlIGlubmVyZmVuY2VzIHNob3Vs
ZCBub3QgYmUgY29uc2lkZXJlZCBpbmZpeC4KICAgICBpZiAoYXV0byogZW50cnkgPSB0cnlCaW5h
cnlTZWFyY2g8Y29uc3QgRW50cnksIFVDaGFyMzI+KGRpY3Rpb25hcnksIGRpY3Rpb25hcnlTaXpl
LCBjaGFyYWN0ZXIsIEV4dHJhY3RDaGFyKSkgewogICAgICAgICAvLyBUaGVyZSBhcmUgYXQgbW9z
dCB0d28gb3RoZXIgZW50cmllcyBiZWZvcmUgdGhlIG9uZSBmb3VuZC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlU2VyaWFsaXplci5jcHAKaW5kZXggZGNhNDA2Yjk1NGEzZjMwMjE1MDY4ZmQxYzA4ZDk4
ODdiMzFkMjdmNC4uM2Y2ZWQ4NGQwNmQ0NWMzYzcwMDc4ZDc3NzgwNzY1NmRkNDU4ZGFhOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKQEAgLTExMyw5ICsxMTMsOSBAQCBQ
YWdlU2VyaWFsaXplcjo6U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjpTZXJpYWxpemVyTWFy
a3VwQWNjdW11bGF0b3IoUGFnZVNlcgogICAgICwgbV9zZXJpYWxpemVyKHNlcmlhbGl6ZXIpCiAg
ICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogewotICAgIC8vIE1hcmt1cEFjY3VtdWxhdG9yIGRv
ZXMgbm90IHNlcmlhbGl6ZSB0aGUgPD94bWwgLi4uIGxpbmUsIHNvIHdlIGFkZCBpdCBleHBsaWNp
dGVseSB0byBlbnN1cmUgdGhlIHJpZ2h0IGVuY29kaW5nIGlzIHNwZWNpZmllZC4KKyAgICAvLyBN
YXJrdXBBY2N1bXVsYXRvciBkb2VzIG5vdCBzZXJpYWxpemUgdGhlIDw/eG1sIC4uLiBsaW5lLCBz
byB3ZSBhZGQgaXQgZXhwbGljaXRseSB0byBlbnN1cmUgdGhlIHJpZ2h0IGVuY29kaW5nIGlzIHNw
ZWNpZmllZC4KICAgICBpZiAobV9kb2N1bWVudC5pc1hNTERvY3VtZW50KCkgfHwgbV9kb2N1bWVu
dC54bWxTdGFuZGFsb25lKCkpCi0gICAgICAgIGFwcGVuZFN0cmluZygiPD94bWwgdmVyc2lvbj1c
IiIgKyBtX2RvY3VtZW50LnhtbFZlcnNpb24oKSArICJcIiBlbmNvZGluZz1cIiIgKyBtX2RvY3Vt
ZW50LmNoYXJzZXQoKSArICJcIj8+Iik7CisgICAgICAgIGFwcGVuZCgiPD94bWwgdmVyc2lvbj1c
IiIsIG1fZG9jdW1lbnQueG1sVmVyc2lvbigpLCAiXCIgZW5jb2Rpbmc9XCIiLCBtX2RvY3VtZW50
LmNoYXJzZXQoKSwgIlwiPz4iKTsKIH0KIAogdm9pZCBQYWdlU2VyaWFsaXplcjo6U2VyaWFsaXpl
ck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3Qg
VGV4dCYgdGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZVRleHRCb3guY3BwCmluZGV4IDNkMzI1NWY4ZjdiNGU0YjQxOGYwYjRkZjI2OTdjZGRlZjNlM2Rj
MjMuLmRkMTg4YWUxMWIzN2Q3OTdiMTJkODFkMjk2MzY5ZjdmMTk1NzZlYmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcApAQCAtMjQw
LDcgKzI0MCw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNlCiAgICAgaWYgKHJlbmRlcmVyKCku
c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVmlzaWJpbGl0eTo6VmlzaWJsZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgLy8gTm90ZTogV2UncmUgZXhwbGljaXRlbHkgbm90IHN1cHBvcnRpbmcgY29t
cG9zaXRpb24gJiBjdXN0b20gdW5kZXJsaW5lcyBhbmQgY3VzdG9tIGhpZ2hsaWdodGVycyAtIHVu
bGlrZSBJbmxpbmVUZXh0Qm94LgorICAgIC8vIE5vdGU6IFdlJ3JlIGV4cGxpY2l0bHkgbm90IHN1
cHBvcnRpbmcgY29tcG9zaXRpb24gJiBjdXN0b20gdW5kZXJsaW5lcyBhbmQgY3VzdG9tIGhpZ2hs
aWdodGVycyAtIHVubGlrZSBJbmxpbmVUZXh0Qm94LgogICAgIC8vIElmIHdlIGV2ZXIgbmVlZCB0
aGF0IGZvciBTVkcsIGl0J3MgdmVyeSBlYXN5IHRvIHJlZmFjdG9yIGFuZCByZXVzZSB0aGUgY29k
ZS4KIAogICAgIGF1dG8mIHBhcmVudFJlbmRlcmVyID0gcGFyZW50KCktPnJlbmRlcmVyKCk7CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmY2ZDQz
ODE3MDA2YjRhMzllYmIzZGZmZDZmZDQxNWY4YzFlMjQyYS4uMDJjOTIxMDBiYzQwYTk1ZWEzMmZl
ZTRjMjA0MmIzNGI2YjBmNWMwMSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA1LTA4ICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTdHJlYW1saW5lIE1hcmt1cEFjY3VtdWxhdG9y
IHRvIGltcHJvdmUgZWZmaWNpZW5jeSBhIGJpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExNjU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJbXBs
LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOiBGaXggc3BlbGxsaW5nIGVycm9y
IGluIHRoZSB3b3JkICJleHBsaWNpdGx5Ii4KKwogMjAyMC0wNS0wOCAgSm9uYXRoYW4gQmVkYXJk
ICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgd2Via2l0cHk6ICdpUGhvbmUgU0UnIHNo
b3VsZCBtYXRjaCAnaVBob25lIFNFIDFzdCBnZW5lcmF0aW9uJwpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9TdHJpbmdJbXBsLmNwcAppbmRleCBlOGFjZmI2YWQ5NWIzZDViZTcxMDdl
MDcxN2ZlYmM5MGJjMzgxMTNhLi5hYWRmNGY5Y2UzZTUxYmY1NmQxMDhjM2JlNGQwN2JmOWMzZGUz
NmJkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJbXBs
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJbXBsLmNwcApA
QCAtNDEsNyArNDEsNyBAQCBURVNUKFdURiwgU3RyaW5nSW1wbENyZWF0aW9uRnJvbUxpdGVyYWwp
CiAgICAgQVNTRVJUX1RSVUUoZXF1YWwoc3RyaW5nV2l0aFRlbXBsYXRlLmdldCgpLCAiVGVtcGxh
dGUgTGl0ZXJhbCIpKTsKICAgICBBU1NFUlRfVFJVRShzdHJpbmdXaXRoVGVtcGxhdGUtPmlzOEJp
dCgpKTsKIAotICAgIC8vIENvbnN0cnVjdG9yIHRha2luZyB0aGUgc2l6ZSBleHBsaWNpdGVseS4K
KyAgICAvLyBDb25zdHJ1Y3RvciB0YWtpbmcgdGhlIHNpemUgZXhwbGljaXRseS4KICAgICBjb25z
dCBjaGFyKiBwcm9ncmFtbWF0aWNTdHJpbmdEYXRhID0gIkV4cGxpY2l0IFNpemUgTGl0ZXJhbCI7
CiAgICAgYXV0byBwcm9ncmFtbWF0aWNTdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0
ZXJhbChwcm9ncmFtbWF0aWNTdHJpbmdEYXRhLCBzdHJsZW4ocHJvZ3JhbW1hdGljU3RyaW5nRGF0
YSkpOwogICAgIEFTU0VSVF9FUShzdHJsZW4ocHJvZ3JhbW1hdGljU3RyaW5nRGF0YSksIHByb2dy
YW1tYXRpY1N0cmluZy0+bGVuZ3RoKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398925</attachid>
            <date>2020-05-09 06:35:40 -0700</date>
            <delta_ts>2020-05-09 07:30:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211656-20200509063538.patch</filename>
            <type>text/plain</type>
            <size>41499</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxNDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
M2ZiYTZlNmI3MTgwMjc0YTRlM2Q2ZmZlYjY0YTkxYzkzZjc3YzEzLi45M2Q5ZTBiOTc0ODZjYTZk
MzFiMWI4OTE2NzViMjM1NGZmMjQ3NTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMC0wNS0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgU3RyZWFtbGluZSBNYXJrdXBBY2N1bXVsYXRvciB0byBpbXByb3ZlIGVmZmljaWVu
Y3kgYSBiaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMTY1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oOiBGaXggc3BlbGxpbmcgb2Yg
ImV4cGxpY2l0bHkiLgorCiAyMDIwLTA1LTA4ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KIAogICAgICAgICBBcnJheS5wcm90b3R5cGUuY29uY2F0IGZhc3QgcGF0aCBj
aGVja3Mgc2hvdWxkIG5vdCBiZSBvYnNlcnZhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGIzNzM4YjU2YWFlMzY0NjliZGIx
NmYzMTNkNjA2OTQzZDNhMzYxZWMuLjM3OTQwMDZmMTA1NjJjMTUwNWIxNjZiYTEyOWQyMGU5ZTZj
MWU5MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDUtMDggIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0cmVhbWxpbmUgTWFya3VwQWNjdW11bGF0b3IgdG8g
aW1wcm92ZSBlZmZpY2llbmN5IGEgYml0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTE2NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjppc0FsbEFTQ0lJIGNvbnN0KTogQWRkZWQuCisgICAgICAgICog
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oOiBBZGRlZCBpc0FsbEFTQ0lJLgorCiAyMDIwLTA1LTA4
ICBCYXN1a2UgU3V6dWtpICA8YmFzdWtlLnN1enVraUBzb255LmNvbT4KIAogICAgICAgICBbV1RG
XSBTaGFyZSBMaW51eCdzIE1lbW9yeVByZXNzdXJlSGFuZGxlciBhbW9uZyBvdGhlciBVbml4IHBv
cnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggOWQ3MjkyMmE2Yzk4NWE5YTRlYTNkMTQzYjkzMjhmMmU0MTVjOTQz
Yi4uMDhmMWYwYjIxMWZmZWNmNDA4MTExNGEwNjA3ZjdmODgxMWQ2NzA1OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDk1IEBACisyMDIwLTA1LTA4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBTdHJlYW1saW5lIE1hcmt1cEFjY3VtdWxhdG9yIHRvIGltcHJvdmUgZWZm
aWNpZW5jeSBhIGJpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjExNjU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMpOiBD
b3JyZWN0ZWQgZWFybHkKKyAgICAgICAgZXhpdCBzbyBpdCByZXR1cm5zIGFueSB0aW1lIHRoZSBs
ZW5ndGggaXMgMC4gRm9yIHNvbWUgcmVhc29uIHRoZSBjb2RlIGJlZm9yZQorICAgICAgICB3b3Vs
ZG4ndCBkbyB0aGUgZWFybHkgcmV0dXJuIHdoZW4gb2Zmc2V0IGlzIG5vbi16ZXJvLCB3aGljaCBp
cyB1bm5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZFN0cmluZ1ZpZXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZEVuZFRhZyk6IFVzZSB2YXJpYWRpYyBhcHBlbmQgdG8gY3V0IGRvd24K
KyAgICAgICAgb24gbWVtb3J5IGFsbG9jYXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6TWFya3Vw
QWNjdW11bGF0b3I6OnRvdGFsTGVuZ3RoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1h
cmt1cEFjY3VtdWxhdG9yOjpjb25jYXRlbmF0ZU1hcmt1cCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6dGFrZU1hcmt1cCk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVl
KTogVXNlIHZhcmlhZGljCisgICAgICAgIGFwcGVuZCB0byBjdXQgZG93biBvbiBtZW1vcnkgYWxs
b2NhdGlvbnMuIEFsc28gdXNlIGNoYXIgaW5zdGVhZCBvZiBVQ2hhciBzbworICAgICAgICB0aGUg
c3RyaW5nIGJ1aWxkaW5nIGNvZGUgZG9lc24ndCBoYXZlIHRvIGRvIGFuIDgvMTYgYml0IGNoZWNr
LgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudCk6IFByZXBlbmQg
YSBsaXRlcmFsLCBkb24ndCBib3RoZXIgdG8KKyAgICAgICAgbWFrZSBhIFN0cmluZyBqdXN0IHRv
IGFwcGVuZCB0byBhbm90aGVyIFN0cmluZy4gQWxzbyBtYWRlIHRoaXMgYQorICAgICAgICBub24t
bWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQWRkTmFtZXNwYWNlQXR0
cmlidXRlKTogTWFkZSB0aGlzIGEgbm9uLW1lbWJlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNv
cmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROYW1lc3BhY2UpOiBGaXggaGFzaCB0YWJsZSB1
c2FnZQorICAgICAgICB0byB1c2UgYWRkIGluc3RlYWQgb2YgZ2V0IGZvbGxvd2VkIGJ5IHNldCB0
byBhdm9pZCBkb3VibGUgaGFzaGluZy4KKyAgICAgICAgVXNlIHZhcmlhZGljIGFwcGVuZCB0byBj
dXQgZG93biBvbiBtZW1vcnkgYWxsb2NhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRUZXh0KTogVHdlYWtlZCBzdHlsZSB0byBtYWtlIHRoaXMgYQorICAg
ICAgICBvbmUtbGluZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZENvbW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kWE1MRGVjbGFyYXRpb24pOiBNYWRl
IHRoaXMgYSBub24tbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICBVc2UgdmFyaWFkaWMgYXBwZW5k
IHRvIGN1dCBkb3duIG9uIG1lbW9yeSBhbGxvY2F0aW9uLgorICAgICAgICAoV2ViQ29yZTo6YXBw
ZW5kRG9jdW1lbnRUeXBlKTogTWFkZSB0aGlzIGEgbm9uLW1lbWJlciBmdW5jdGlvbi4KKyAgICAg
ICAgVXNlIHZhcmlhZGljIGFwcGVuZCB0byBjdXQgZG93biBvbiBtZW1vcnkgYWxsb2NhdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDREFUQVNlY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5v
bkVsZW1lbnROb2RlKTogTW92ZWQgdGhlIGJvZGllcyBvZgorICAgICAgICBhcHBlbmRDb21tZW50
LCBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sIGFuZCBhcHBlbmRDREFUQVNlY3Rpb24gaW4K
KyAgICAgICAgaGVyZSBzaW5jZSB0aGV5IGNhbiBhbGwgYmUgb25lLWxpbmUgdmFyaWFkaWMgYXBw
ZW5kIGNhbGxzLgorCisgICAgICAgICogZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oOgorICAg
ICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6Omxlbmd0aCBjb25zdCk6IENoYW5nZWQg
dGhlIHJldHVybiB0eXBlCisgICAgICAgIG9mIGxlbmd0aCB0byBiZSB1bnNpZ25lZCBzaW5jZSB0
aGF0J3Mgd2hhdCBTdHJpbmdCdWlsZGVyIHJldHVybnMuCisgICAgICAgIE1hZGUgaXNBbGxBU0NJ
SSBjYWxsIFN0cmluZ0J1aWxkZXI6OmlzQWxsQVNDSUkuIFJlcGxhY2VkIGFwcGVuZFN0cmluZwor
ICAgICAgICBhbmQgYXBwZW5kU3RyaW5nVmlldyB3aXRoIHZhcmlhZGljIGFwcGVuZC4gUmVtb3Zl
ZCBtYW55IGZ1bmN0aW9ucworICAgICAgICB0aGF0IG5vIGxvbmdlciBuZWVkIHRvIGJlIG1lbWJl
ciBmdW5jdGlvbnMuIE1hZGUgYXBwZW5kQXR0cmlidXRlVmFsdWUKKyAgICAgICAgYSBzdGF0aWMg
bWVtYmVyIGZ1bmN0aW9uLiBNYWRlIGFwcGVuZE5hbWVzcGFjZSBwcml2YXRlLiBNYWRlCisgICAg
ICAgIG1fc2VyaWFsaXphdGlvblN5bnRheCBjb25zdC4KKworICAgICAgICAqIGVkaXRpbmcvbWFy
a3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFw
V2l0aFN0eWxlTm9kZSk6IFVzZSBhcHBlbmQKKyAgICAgICAgaW5zdGVhZCBvZiBhcHBlblN0cmlu
Zy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjppc0FsbEFTQ0lJ
IGNvbnN0KTogQWRkZWQuIEJlZm9yZQorICAgICAgICB0aGUgY29kZSB3b3VsZCBvbmx5IGNoZWNr
IHRoZSBTdHJpbmdCdWlsZGVyLCBidXQgd2UgYWxzbyBuZWVkIHRvCisgICAgICAgIGNoZWNrIG1f
cmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXAuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBB
Y2N1bXVsYXRvcjo6dGFrZVJlc3VsdHMpOiBVc2UgQ2hlY2tlZFVpbnQzMgorICAgICAgICBzaW5j
ZSBTdHJpbmdCdWlsZGVyJ3MgcmVzZXJ2ZUNhcGFjaXR5IGZ1bmN0aW9uIHRha2VzIHVuc2lnbmVk
LCBub3QKKyAgICAgICAgc2l6ZV90LiBUaGUgb2xkIGNvZGUsIHVzaW5nIHRvdGFsTGVuZ3RoLCB3
b3VsZCBqdXN0IHBhc3MgYSBzaXplX3QKKyAgICAgICAgYW5kIGxldCBpdCBnZXQgY2hvcHBlZCBv
ZmYsIHdoaWNoIGRpZG4ndCBkbyBhbnkgaGFybSwgYnV0IGl0IHNlZW1zCisgICAgICAgIHN0cmFu
Z2UgdG8gY29tcHV0ZSBhIDY0LWJpdCB2YWx1ZSBqdXN0IHRvIGNob3Agb2ZmIHRoZSBsb3dlciAz
MgorICAgICAgICBiaXRzLiBBbiBhbHRlcm5hdGl2ZSBpcyB0byBjb21wdXRlIHRoZSAzMi1iaXQg
dmFsdWUgYW5kIGp1c3QgbGV0CisgICAgICAgIGl0IG92ZXJmbG93LiBVc2UgYSBtb2Rlcm4gZm9y
IGxvb3AgYnkgZGVmaW5pbmcgYSBSZXZlcnNlVmlldworICAgICAgICB0ZW1wbGF0ZSByYXRoZXIg
dGhhbiB3cml0aW5nIGEgY29uZnVzaW5nIGJhY2t3YXJkcyBsb29wLiBVc2UgdGhlCisgICAgICAg
IG5ldyB0YWtlTWFya3VwIGluc3RlYWQgb2YgY29uY2F0ZW5hdGVNYXJrdXAuCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dCk6IFR3ZWFrIGNvZGlu
ZworICAgICAgICBzdHlsZSBhIGxpdHRsZSBiaXQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRUYWcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlVG9QcmVzZXJ2ZU1TT0xpc3Qp
OgorICAgICAgICBVc2UgdmFyaWFkaWMgYXBwZW5kIHRvIGN1dCBkb3duIG9uIG1lbW9yeSBhbGxv
Y2F0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OnByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUp
OiBUd2VhayBjb2Rpbmcgc3R5bGUgYSBiaXQuCisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVQ
cmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZUludGVybmFsKTogVXNlCisgICAgICAgIGFwcGVuZCBp
bnN0ZWFkIG9mIGFwcGVuZFN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFByZXNlcnZl
TVNPTGlzdHMpOiBUYWtlIGEgU3RyaW5nVmlldyBpbnN0ZWFkIG9mIGEKKyAgICAgICAgU3RyaW5n
IHRvIGVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBtZW1vcnkgYWxsb2NhdGlvbiBpbiBjYWxsIHRvIHN1
YnN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OnNhbml0aXplZE1hcmt1cEZvckZyYWdtZW50SW5E
b2N1bWVudCk6IFVzZSBtYWtlU3RyaW5nCisgICAgICAgIGluc3RlYWQgb2YgU3RyaW5nQnVpbGRl
ciB0byBjdXQgZG93biBvbiBtZW1vcnkgYWxsb2NhdGlvbi4KKworICAgICAgICAqIGh0bWwvSFRN
TEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVz
ZXREZWZhdWx0QnV0dG9uKTogRml4IHNwZWxsaW5nIGVycm9yCisgICAgICAgIGluIHRoZSB3b3Jk
ICJleHBsaWNpdGx5Ii4KKyAgICAgICAgKiBtYXRobWwvTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6c2VhcmNo
KTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OlNl
cmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcik6CisgICAgICAgIFVzZSB2YXJpYWRpYyBhcHBlbmQg
aW5zdGVhZCBvZiBhcHBlbmRTdHJpbmcgdG8gY3V0IGRvd24gb24KKyAgICAgICAgbWVtb3J5IGFs
bG9jYXRpb25zLgorCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50KTogRml4IHNwZWxs
aW5nIGVycm9yIGluIHRoZSB3b3JkCisgICAgICAgICJleHBsaWNpdGx5Ii4KKwogMjAyMC0wNS0w
OSAgSmFjayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBOdWxscHRy
IGNyYXNoIGluIExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZVByb3BlcnR5TGlzdFJlcHJlc2VudGF0
aW9uIHdoZW4gY29weWluZyBzZWxlY3RlZCByYW5nZSB0aGF0IGNvbnRhaW5zIHN1cnJvZ2F0ZSBj
aGFyYWN0ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZp
eFBhcnRpYWxSZWdpc3RlclN0YWxscy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaAppbmRleCAwMDkzMjc5NDhiOWFmMWZiMjZiMDZm
NjI4NTZiMzlkMWNjNGJmZTE0Li5hNTVkZTAzYTA4NmU5MmMzZGNkNzA4MDI3NTY1ZWZmNGE3Nzhj
MzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFBhcnRp
YWxSZWdpc3RlclN0YWxscy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Rml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmgKQEAgLTM1LDcgKzM1LDcgQEAgY2xhc3MgQ29kZTsK
IC8vCiAvLyBTb21lIGluc3RydWN0aW9ucyB1cGRhdGUgb25seSBwYXJ0IG9mIGEgcmVnaXN0ZXIs
IHRoZXkgY2FuIG9ubHkgYmUgc2NoZWR1bGVkIGFmdGVyCiAvLyB0aGUgcHJldmlvdXMgZGVmaW5p
dGlvbiBpcyBjb21wdXRlZC4gVGhpcyBwcm9ibGVtIGNhbiBiZSBhdm9pZGVkIGJ5IHRoZSBjb21w
aWxlcgotLy8gYnkgZXhwbGljaXRlbHkgcmVzZXR0aW5nIHRoZSBlbnRpcmUgcmVnaXN0ZXIgYmVm
b3JlIGV4ZWN1dGluZyB0aGUgaW5zdHJ1Y3Rpb24gd2l0aAorLy8gYnkgZXhwbGljaXRseSByZXNl
dHRpbmcgdGhlIGVudGlyZSByZWdpc3RlciBiZWZvcmUgZXhlY3V0aW5nIHRoZSBpbnN0cnVjdGlv
biB3aXRoCiAvLyBwYXJ0aWFsIHVwZGF0ZS4KIC8vCiAvLyBTZWUgIlBhcnRpYWwgWE1NIFJlZ2lz
dGVyIFN0YWxscyIgYW5kICJEZXBlbmRlbmN5IEJyZWFraW5nIElkaW9tcyIgaW4gdGhlIG1hbnVh
bC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCmluZGV4IDJhNDIwNjAxMThhZjdm
MjQ1ZWM5MmRiZmJmYTk5NjYwNGY4MDdmM2YuLmE5NzNmM2JlNjJmMWRkN2U3NjE5OTI5YTA3MzFh
MWM2Mzg4ZmFlNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcApAQCAtNDU2
LDQgKzQ1NiwxNCBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OnNocmlua1RvRml0KCkKICAgICB9CiB9
CiAKK2Jvb2wgU3RyaW5nQnVpbGRlcjo6aXNBbGxBU0NJSSgpIGNvbnN0Cit7CisgICAgYXV0byBs
ZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgaWYgKG1faXM4Qml0KQorICAgICAgICByZXR1cm4gY2hhcmFjdGVyc0FyZUFs
bEFTQ0lJKGNoYXJhY3RlcnM4KCksIGxlbmd0aCk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNBcmVB
bGxBU0NJSShjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RG
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaCBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCmluZGV4IDc4MmM5Y2VjNWZlZGQyZmYwMzJi
YTAxZDVmZWYxZDQ5ODAwNjY2M2IuLjU5Njg0NjgxMzc3ZjNhMTMyOGUxMmZkZDlhMmUxNjRkOWE1
MDA3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCkBAIC0zMjUsNiArMzI1LDcg
QEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJu
IG1faXM4Qml0OyB9CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNBbGxBU0NJSSgpIGNv
bnN0OwogCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L01hcmt1cEFjY3VtdWxhdG9yLmNwcAppbmRleCBiNGVkYTM4NDgzN2NhNmM5ZDBhYjI3ZGQ4OWQ4
NDc1MDg0NWYwYmExLi5lMDA1M2RjMjVlYmI0Y2U3ZDE5ZWVlNGNkMjA2ZTAwZjQ0MzE5M2MwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcApAQCAtMTYw
LDExICsxNjAsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNp
bmdFbnRpdGllc0ludGVybmFsKFN0cmluZ0J1aWxkZXImIHJlc3UKIAogdm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKFN0cmluZ0J1aWxkZXIm
IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoLCBFbnRpdHlNYXNrIGVudGl0eU1hc2spCiB7Ci0gICAgaWYgKCEob2Zmc2V0ICsgbGVu
Z3RoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgQVNTRVJUKG9mZnNldCArIGxlbmd0aCA8PSBz
b3VyY2UubGVuZ3RoKCkpOwogCisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGlmIChzb3VyY2UuaXM4Qml0KCkpCiAgICAgICAgIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNp
bmdFbnRpdGllc0ludGVybmFsPExDaGFyPihyZXN1bHQsIHNvdXJjZSwgb2Zmc2V0LCBsZW5ndGgs
IGVudGl0eU1hc2spOwogICAgIGVsc2UKQEAgLTIzNSwxNiArMjM1LDYgQEAgU3RyaW5nIE1hcmt1
cEFjY3VtdWxhdG9yOjpyZXNvbHZlVVJMSWZOZWVkZWQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwg
Y29uc3QgU3RyaW4KICAgICByZXR1cm4gdXJsU3RyaW5nOwogfQogCi12b2lkIE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgbV9tYXJr
dXAuYXBwZW5kKHN0cmluZyk7Ci19Ci0KLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0
cmluZ1ZpZXcoU3RyaW5nVmlldyB2aWV3KQotewotICAgIG1fbWFya3VwLmFwcGVuZCh2aWV3KTsK
LX0KLQogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6c3RhcnRBcHBlbmRpbmdOb2RlKGNvbnN0IE5v
ZGUmIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgaWYgKGlzPEVsZW1lbnQ+
KG5vZGUpKQpAQCAtMjYwLDIzICsyNTAsMTIgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kRW5kVGFnKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRWxlbWVudCYgZWxlbWUKIHsK
ICAgICBpZiAoc2hvdWxkU2VsZkNsb3NlKGVsZW1lbnQsIG1fc2VyaWFsaXphdGlvblN5bnRheCkg
fHwgKCFlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSAmJiBlbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyhl
bGVtZW50KSkpCiAgICAgICAgIHJldHVybjsKLSAgICByZXN1bHQuYXBwZW5kKCc8Jyk7Ci0gICAg
cmVzdWx0LmFwcGVuZCgnLycpOwotICAgIHJlc3VsdC5hcHBlbmQoZWxlbWVudC5ub2RlTmFtZVBy
ZXNlcnZpbmdDYXNlKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoJz4nKTsKLX0KLQotc2l6ZV90IE1h
cmt1cEFjY3VtdWxhdG9yOjp0b3RhbExlbmd0aChjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3RyaW5n
cykKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0gMDsKLSAgICBmb3IgKGF1dG8mIHN0cmluZyA6IHN0
cmluZ3MpCi0gICAgICAgIGxlbmd0aCArPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgcmV0dXJuIGxl
bmd0aDsKKyAgICByZXN1bHQuYXBwZW5kKCI8LyIsIGVsZW1lbnQubm9kZU5hbWVQcmVzZXJ2aW5n
Q2FzZSgpLCAnPicpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjpjb25jYXRlbmF0ZU1h
cmt1cChTdHJpbmdCdWlsZGVyJiByZXN1bHQpCitTdHJpbmdCdWlsZGVyIE1hcmt1cEFjY3VtdWxh
dG9yOjp0YWtlTWFya3VwKCkKIHsKLSAgICByZXN1bHQuYXBwZW5kKG1fbWFya3VwKTsKKyAgICBy
ZXR1cm4gc3RkOjpleGNoYW5nZShtX21hcmt1cCwgeyB9KTsKIH0KIAogdm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVmFsdWUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25z
dCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBpc1NlcmlhbGl6aW5nSFRNTCkKQEAgLTI5Myw3ICsy
NzIsNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVW
YWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbgogewogICAgIEFTU0VSVChlbGVtZW50Lmlz
VVJMQXR0cmlidXRlKGF0dHJpYnV0ZSkpOwogICAgIFN0cmluZyByZXNvbHZlZFVSTFN0cmluZyA9
IHJlc29sdmVVUkxJZk5lZWRlZChlbGVtZW50LCBhdHRyaWJ1dGUudmFsdWUoKSk7Ci0gICAgVUNo
YXIgcXVvdGVDaGFyID0gJyInOworICAgIGNoYXIgcXVvdGVDaGFyID0gJyInOwogICAgIGlmIChX
VEY6OnByb3RvY29sSXNKYXZhU2NyaXB0KHJlc29sdmVkVVJMU3RyaW5nKSkgewogICAgICAgICAv
LyBtaW5pbWFsIGVzY2FwaW5nIGZvciBqYXZhc2NyaXB0IHVybHMKICAgICAgICAgaWYgKHJlc29s
dmVkVVJMU3RyaW5nLmNvbnRhaW5zKCciJykpIHsKQEAgLTMwMiw5ICsyODEsNyBAQCB2b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWls
ZGVyJiByZXN1bHQsIGNvbgogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHF1b3Rl
Q2hhciA9ICdcJyc7CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChxdW90ZUNoYXIp
OwotICAgICAgICByZXN1bHQuYXBwZW5kKHJlc29sdmVkVVJMU3RyaW5nKTsKLSAgICAgICAgcmVz
dWx0LmFwcGVuZChxdW90ZUNoYXIpOworICAgICAgICByZXN1bHQuYXBwZW5kKHF1b3RlQ2hhciwg
cmVzb2x2ZWRVUkxTdHJpbmcsIHF1b3RlQ2hhcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTMxNCwxOCArMjkxLDE2IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3Rl
ZFVSTEF0dHJpYnV0ZVZhbHVlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uCiAgICAgcmVzdWx0
LmFwcGVuZChxdW90ZUNoYXIpOwogfQogCi1ib29sIE1hcmt1cEFjY3VtdWxhdG9yOjpzaG91bGRB
ZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCitzdGF0aWMgYm9vbCBz
aG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAg
Ly8gRG9uJ3QgYWRkIG5hbWVzcGFjZSBhdHRyaWJ1dGUgaWYgaXQgaXMgYWxyZWFkeSBkZWZpbmVk
IGZvciB0aGlzIGVsZW0uCi0gICAgY29uc3QgQXRvbVN0cmluZyYgcHJlZml4ID0gZWxlbWVudC5w
cmVmaXgoKTsKKyAgICBhdXRvJiBwcmVmaXggPSBlbGVtZW50LnByZWZpeCgpOwogICAgIGlmIChw
cmVmaXguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gIWVsZW1lbnQuaGFzQXR0cmlidXRlKHht
bG5zQXRvbSgpKTsKLQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHhtbG5zV2l0
aENvbG9uKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJ4bWxuczoiKSk7Ci0gICAgcmV0dXJuICFl
bGVtZW50Lmhhc0F0dHJpYnV0ZSh4bWxuc1dpdGhDb2xvbi5nZXQoKSArIHByZWZpeCk7CisgICAg
cmV0dXJuICFlbGVtZW50Lmhhc0F0dHJpYnV0ZSgieG1sbnM6IiArIHByZWZpeCk7CiB9CiAKLWJv
b2wgTWFya3VwQWNjdW11bGF0b3I6OnNob3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShjb25zdCBB
dHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFtZXNwYWNlcyYgbmFtZXNwYWNlcykKK3N0YXRpYyBib29s
IHNob3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwg
TmFtZXNwYWNlcyYgbmFtZXNwYWNlcykKIHsKICAgICBuYW1lc3BhY2VzLmNoZWNrQ29uc2lzdGVu
Y3koKTsKIApAQCAtMzU2LDI2ICszMzEsMjUgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kTmFtZXNwYWNlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgQXRvbVN0cmluZyYKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIFVzZSBlbXB0eUF0b20oKXMncyBpbXBsKCkg
Zm9yIGJvdGggbnVsbCBhbmQgZW1wdHkgc3RyaW5ncyBzaW5jZSB0aGUgSGFzaE1hcCBjYW4ndCBo
YW5kbGUgMCBhcyBhIGtleQotICAgIEF0b21TdHJpbmdJbXBsKiBwcmUgPSBwcmVmaXguaXNFbXB0
eSgpID8gZW1wdHlBdG9tKCkuaW1wbCgpIDogcHJlZml4LmltcGwoKTsKLSAgICBBdG9tU3RyaW5n
SW1wbCogZm91bmROUyA9IG5hbWVzcGFjZXMuZ2V0KHByZSk7Ci0gICAgaWYgKGZvdW5kTlMgIT0g
bmFtZXNwYWNlVVJJLmltcGwoKSkgewotICAgICAgICBuYW1lc3BhY2VzLnNldChwcmUsIG5hbWVz
cGFjZVVSSS5pbXBsKCkpOwotICAgICAgICAvLyBBZGQgbmFtZXNwYWNlIHRvIHByZWZpeCBwYWly
IHNvIHdlIGNhbiBkbyBjb25zdHJhaW50IGNoZWNraW5nIGxhdGVyLgotICAgICAgICBpZiAoaW5Y
TUxGcmFnbWVudFNlcmlhbGl6YXRpb24oKSAmJiAhcHJlZml4LmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIG5hbWVzcGFjZXMuc2V0KG5hbWVzcGFjZVVSSS5pbXBsKCksIHByZSk7Ci0gICAgICAgIC8v
IE1ha2Ugc3VyZSB4bWwgcHJlZml4IGFuZCBuYW1lc3BhY2UgYXJlIGFsd2F5cyBrbm93biB0byB1
cGhvbGQgdGhlIGNvbnN0cmFpbnRzIGxpc3RlZCBhdCBodHRwOi8vd3d3LnczLm9yZy9UUi94bWwt
bmFtZXMxMS8jeG1sUmVzZXJ2ZWQuCi0gICAgICAgIGlmIChuYW1lc3BhY2VVUkkuaW1wbCgpID09
IFhNTE5hbWVzOjp4bWxOYW1lc3BhY2VVUkktPmltcGwoKSkKKyAgICAvLyBVc2UgZW1wdHlBdG9t
KClzJ3MgaW1wbCgpIGZvciBudWxsIHN0cmluZ3Mgc2luY2UgdGhpcyBIYXNoTWFwIGNhbid0IGhh
bmRsZSBudWxscHRyIGFzIGEga2V5CisgICAgYXV0byBhZGRSZXN1bHQgPSBuYW1lc3BhY2VzLmFk
ZChwcmVmaXguaXNOdWxsKCkgPyBlbXB0eUF0b20oKS5pbXBsKCkgOiBwcmVmaXguaW1wbCgpLCBu
YW1lc3BhY2VVUkkuaW1wbCgpKTsKKyAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Cisg
ICAgICAgIGlmIChhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID09IG5hbWVzcGFjZVVSSS5pbXBs
KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnLCB4bWxu
c0F0b20oKSk7Ci0gICAgICAgIGlmICghcHJlZml4LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJzonLCBwcmVmaXgpOwotCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoJz0nKTsK
LSAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwotICAgICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1
ZShyZXN1bHQsIG5hbWVzcGFjZVVSSSwgZmFsc2UpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCci
Jyk7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuYW1lc3BhY2VVUkkuaW1w
bCgpOwogICAgIH0KKworICAgIC8vIEFkZCBuYW1lc3BhY2UgdG8gcHJlZml4IHBhaXIgc28gd2Ug
Y2FuIGRvIGNvbnN0cmFpbnQgY2hlY2tpbmcgbGF0ZXIuCisgICAgaWYgKGluWE1MRnJhZ21lbnRT
ZXJpYWxpemF0aW9uKCkgJiYgIXByZWZpeC5pc0VtcHR5KCkpCisgICAgICAgIG5hbWVzcGFjZXMu
c2V0KG5hbWVzcGFjZVVSSS5pbXBsKCksIHByZWZpeC5pbXBsKCkpOworCisgICAgLy8gTWFrZSBz
dXJlIHhtbCBwcmVmaXggYW5kIG5hbWVzcGFjZSBhcmUgYWx3YXlzIGtub3duIHRvIHVwaG9sZCB0
aGUgY29uc3RyYWludHMgbGlzdGVkIGF0IGh0dHA6Ly93d3cudzMub3JnL1RSL3htbC1uYW1lczEx
LyN4bWxSZXNlcnZlZC4KKyAgICBpZiAobmFtZXNwYWNlVVJJID09IFhNTE5hbWVzOjp4bWxOYW1l
c3BhY2VVUkkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlc3VsdC5hcHBlbmQoJyAnLCB4bWxu
c0F0b20oKSwgcHJlZml4LmlzRW1wdHkoKSA/ICIiIDogIjoiLCBwcmVmaXgsICI9XCIiKTsKKyAg
ICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShyZXN1bHQsIG5hbWVzcGFjZVVSSSwgZmFsc2UpOworICAg
IHJlc3VsdC5hcHBlbmQoJyInKTsKIH0KIAogRW50aXR5TWFzayBNYXJrdXBBY2N1bXVsYXRvcjo6
ZW50aXR5TWFza0ZvclRleHQoY29uc3QgVGV4dCYgdGV4dCkgY29uc3QKQEAgLTM5NCw3NiArMzY4
LDQwIEBAIEVudGl0eU1hc2sgTWFya3VwQWNjdW11bGF0b3I6OmVudGl0eU1hc2tGb3JUZXh0KGNv
bnN0IFRleHQmIHRleHQpIGNvbnN0CiAKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRl
eHQoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBUZXh0JiB0ZXh0KQogewotICAgIGNvbnN0
IFN0cmluZyYgdGV4dERhdGEgPSB0ZXh0LmRhdGEoKTsKLSAgICBhcHBlbmRDaGFyYWN0ZXJzUmVw
bGFjaW5nRW50aXRpZXMocmVzdWx0LCB0ZXh0RGF0YSwgMCwgdGV4dERhdGEubGVuZ3RoKCksIGVu
dGl0eU1hc2tGb3JUZXh0KHRleHQpKTsKLX0KLQotc3RhdGljIHZvaWQgYXBwZW5kQ29tbWVudChT
dHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IFN0cmluZyYgY29tbWVudCkKLXsKLSAgICAvLyBG
SVhNRTogQ29tbWVudCBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAo
YW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYg
aXQgaW5jbHVkZXMgIi0tPiIuCi0gICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIjwhLS0iKTsKLSAg
ICByZXN1bHQuYXBwZW5kKGNvbW1lbnQpOwotICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCItLT4i
KTsKKyAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMocmVzdWx0LCB0ZXh0LmRh
dGEoKSwgMCwgdGV4dC5sZW5ndGgoKSwgZW50aXR5TWFza0ZvclRleHQodGV4dCkpOwogfQogCi12
b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRYTUxEZWNsYXJhdGlvbihTdHJpbmdCdWlsZGVy
JiByZXN1bHQsIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3N0YXRpYyB2b2lkIGFwcGVuZFhN
TERlY2xhcmF0aW9uKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9jdW1lbnQmIGRvY3Vt
ZW50KQogewogICAgIGlmICghZG9jdW1lbnQuaGFzWE1MRGVjbGFyYXRpb24oKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIjw/eG1sIHZlcnNpb249XCIiKTsK
LSAgICByZXN1bHQuYXBwZW5kKGRvY3VtZW50LnhtbFZlcnNpb24oKSk7Ci0gICAgY29uc3QgU3Ry
aW5nJiBlbmNvZGluZyA9IGRvY3VtZW50LnhtbEVuY29kaW5nKCk7Ci0gICAgaWYgKCFlbmNvZGlu
Zy5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIlwiIGVuY29kaW5n
PVwiIik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZW5jb2RpbmcpOwotICAgIH0KLSAgICBpZiAo
ZG9jdW1lbnQueG1sU3RhbmRhbG9uZVN0YXR1cygpICE9IERvY3VtZW50OjpTdGFuZGFsb25lU3Rh
dHVzOjpVbnNwZWNpZmllZCkgewotICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiXCIgc3Rh
bmRhbG9uZT1cIiIpOwotICAgICAgICBpZiAoZG9jdW1lbnQueG1sU3RhbmRhbG9uZSgpKQotICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoInllcyIpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgibm8iKTsKLSAgICB9CisgICAgYXV0byBlbmNv
ZGluZyA9IGRvY3VtZW50LnhtbEVuY29kaW5nKCk7CisgICAgYm9vbCBpc1N0YW5kYWxvbmVTcGVj
aWZpZWQgPSBkb2N1bWVudC54bWxTdGFuZGFsb25lU3RhdHVzKCkgIT0gRG9jdW1lbnQ6OlN0YW5k
YWxvbmVTdGF0dXM6OlVuc3BlY2lmaWVkOwogCi0gICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIlwi
Pz4iKTsKKyAgICByZXN1bHQuYXBwZW5kKCI8P3htbCB2ZXJzaW9uPVwiIiwKKyAgICAgICAgZG9j
dW1lbnQueG1sVmVyc2lvbigpLAorICAgICAgICBlbmNvZGluZy5pc0VtcHR5KCkgPyAiIiA6ICJc
IiBlbmNvZGluZz1cIiIsCisgICAgICAgIGVuY29kaW5nLAorICAgICAgICBpc1N0YW5kYWxvbmVT
cGVjaWZpZWQgPyAoZG9jdW1lbnQueG1sU3RhbmRhbG9uZSgpID8gIlwiIHN0YW5kYWxvbmU9XCJ5
ZXMiIDogIlwiIHN0YW5kYWxvbmUgPSBcIm5vIikgOiAiIiwKKyAgICAgICAgIlwiPz4iKTsKIH0K
IAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxk
ZXImIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlJiBkb2N1bWVudFR5cGUpCitzdGF0aWMgdm9p
ZCBhcHBlbmREb2N1bWVudFR5cGUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBEb2N1bWVu
dFR5cGUmIGRvY3VtZW50VHlwZSkKIHsKICAgICBpZiAoZG9jdW1lbnRUeXBlLm5hbWUoKS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCI8IURP
Q1RZUEUgIik7Ci0gICAgcmVzdWx0LmFwcGVuZChkb2N1bWVudFR5cGUubmFtZSgpKTsKLSAgICBp
ZiAoIWRvY3VtZW50VHlwZS5wdWJsaWNJZCgpLmlzRW1wdHkoKSkgewotICAgICAgICByZXN1bHQu
YXBwZW5kTGl0ZXJhbCgiIFBVQkxJQyBcIiIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGRvY3Vt
ZW50VHlwZS5wdWJsaWNJZCgpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwotICAgICAg
ICBpZiAoIWRvY3VtZW50VHlwZS5zeXN0ZW1JZCgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICcpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwotICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChkb2N1bWVudFR5cGUuc3lzdGVtSWQoKSk7Ci0gICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCciJyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFkb2N1
bWVudFR5cGUuc3lzdGVtSWQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZExp
dGVyYWwoIiBTWVNURU0gXCIiKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChkb2N1bWVudFR5cGUu
c3lzdGVtSWQoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoJyInKTsKLSAgICB9Ci0gICAgcmVz
dWx0LmFwcGVuZCgnPicpOwotfQotCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24oU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIHRh
cmdldCwgY29uc3QgU3RyaW5nJiBkYXRhKQotewotICAgIC8vIEZJWE1FOiBQSSBkYXRhIGlzIG5v
dCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMp
IHRoaXMgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBpbmNsdWRlcyAiPz4iLgotICAg
IHJlc3VsdC5hcHBlbmQoJzwnKTsKLSAgICByZXN1bHQuYXBwZW5kKCc/Jyk7Ci0gICAgcmVzdWx0
LmFwcGVuZCh0YXJnZXQpOwotICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKLSAgICByZXN1bHQuYXBw
ZW5kKGRhdGEpOwotICAgIHJlc3VsdC5hcHBlbmQoJz8nKTsKLSAgICByZXN1bHQuYXBwZW5kKCc+
Jyk7CisgICAgcmVzdWx0LmFwcGVuZCgKKyAgICAgICAgIjwhRE9DVFlQRSAiLAorICAgICAgICBk
b2N1bWVudFR5cGUubmFtZSgpLAorICAgICAgICBkb2N1bWVudFR5cGUucHVibGljSWQoKS5pc0Vt
cHR5KCkgPyAiIiA6ICIgUFVCTElDIFwiIiwKKyAgICAgICAgZG9jdW1lbnRUeXBlLnB1YmxpY0lk
KCksCisgICAgICAgIGRvY3VtZW50VHlwZS5wdWJsaWNJZCgpLmlzRW1wdHkoKSA/ICIiIDogIlwi
IiwKKyAgICAgICAgZG9jdW1lbnRUeXBlLnN5c3RlbUlkKCkuaXNFbXB0eSgpID8gIiIgOiAoZG9j
dW1lbnRUeXBlLnB1YmxpY0lkKCkuaXNFbXB0eSgpID8gIiBTWVNURU0gXCIiIDogIiBcIiIpLAor
ICAgICAgICBkb2N1bWVudFR5cGUuc3lzdGVtSWQoKSwKKyAgICAgICAgZG9jdW1lbnRUeXBlLnN5
c3RlbUlkKCkuaXNFbXB0eSgpID8gIj4iIDogIlwiPiIKKyAgICApOwogfQogCiB2b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydFRhZyhTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCkBAIC01OTcsMTQgKzUz
NSw2IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZShTdHJpbmdCdWls
ZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQmIGVsCiAgICAgICAgIGFwcGVuZE5hbWVzcGFjZShy
ZXN1bHQsIGVmZmVjdGl2ZVhNTFByZWZpeGVkTmFtZS0+cHJlZml4KCksIGVmZmVjdGl2ZVhNTFBy
ZWZpeGVkTmFtZS0+bmFtZXNwYWNlVVJJKCksICpuYW1lc3BhY2VzKTsKIH0KIAotdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0aW9uKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwg
Y29uc3QgU3RyaW5nJiBzZWN0aW9uKQotewotICAgIC8vIEZJWE1FOiBDREFUQSBjb250ZW50IGlz
IG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90aGVyIGNhbGxl
cnMpIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5jbHVkZXMgIl1dPiIuCi0gICAg
cmVzdWx0LmFwcGVuZExpdGVyYWwoIjwhW0NEQVRBWyIpOwotICAgIHJlc3VsdC5hcHBlbmQoc2Vj
dGlvbik7Ci0gICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIl1dPiIpOwotfQotCiB2b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmROb25FbGVtZW50Tm9kZShTdHJpbmdCdWlsZGVyJiByZXN1bHQs
IGNvbnN0IE5vZGUmIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgaWYgKG5h
bWVzcGFjZXMpCkBAIC02MTUsNyArNTQ1LDggQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kTm9uRWxlbWVudE5vZGUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBOb2RlJgogICAg
ICAgICBhcHBlbmRUZXh0KHJlc3VsdCwgZG93bmNhc3Q8VGV4dD4obm9kZSkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKLSAgICAgICAgYXBwZW5kQ29tbWVu
dChyZXN1bHQsIGRvd25jYXN0PENvbW1lbnQ+KG5vZGUpLmRhdGEoKSk7CisgICAgICAgIC8vIEZJ
WE1FOiBDb21tZW50IGNvbnRlbnQgaXMgbm90IGVzY2FwZWQsIGJ1dCB0aGF0IG1heSBiZSBPSyBi
ZWNhdXNlIFhNTFNlcmlhbGl6ZXIgKGFuZCBwb3NzaWJseSBvdGhlciBjYWxsZXJzKSBzaG91bGQg
cmFpc2UgYW4gZXhjZXB0aW9uIGlmIGl0IGluY2x1ZGVzICItLT4iLgorICAgICAgICByZXN1bHQu
YXBwZW5kKCI8IS0tIiwgZG93bmNhc3Q8Q29tbWVudD4obm9kZSkuZGF0YSgpLCAiLS0+Iik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKICAgICAgICAgYXBw
ZW5kWE1MRGVjbGFyYXRpb24ocmVzdWx0LCBkb3duY2FzdDxEb2N1bWVudD4obm9kZSkpOwpAQCAt
NjI2LDEzICs1NTcsMTUgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTm9uRWxlbWVu
dE5vZGUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBOb2RlJgogICAgICAgICBhcHBlbmRE
b2N1bWVudFR5cGUocmVzdWx0LCBkb3duY2FzdDxEb2N1bWVudFR5cGU+KG5vZGUpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6Ci0g
ICAgICAgIGFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbihyZXN1bHQsIGRvd25jYXN0PFByb2Nl
c3NpbmdJbnN0cnVjdGlvbj4obm9kZSkudGFyZ2V0KCksIGRvd25jYXN0PFByb2Nlc3NpbmdJbnN0
cnVjdGlvbj4obm9kZSkuZGF0YSgpKTsKKyAgICAgICAgLy8gRklYTUU6IFBJIGRhdGEgaXMgbm90
IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVycykg
dGhpcyBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGl0IGluY2x1ZGVzICI/PiIuCisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoIjw/IiwgZG93bmNhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uPihu
b2RlKS50YXJnZXQoKSwgJyAnLCBkb3duY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KG5vZGUp
LmRhdGEoKSwgIj8+Iik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9O
T0RFOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREU6Ci0gICAgICAgIGFwcGVuZENEQVRBU2VjdGlv
bihyZXN1bHQsIGRvd25jYXN0PENEQVRBU2VjdGlvbj4obm9kZSkuZGF0YSgpKTsKKyAgICAgICAg
Ly8gRklYTUU6IENEQVRBIGNvbnRlbnQgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVy
IChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVycykgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBp
ZiBpdCBpbmNsdWRlcyAiXV0+Ii4KKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiPCFbQ0RBVEFbIiwg
ZG93bmNhc3Q8Q0RBVEFTZWN0aW9uPihub2RlKS5kYXRhKCksICJdXT4iKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3Vt
dWxhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKaW5k
ZXggNjczMjU5ZGVhNjQ3OGZhOTFhMjYyNTZlNjMzMzk4MmE3YjhhMjA0YS4uODRhZGY1ODUxOGVj
ZDZiNWY3YzVlN2M5Y2U5MWFlYjQzN2ZlNTRkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
TWFya3VwQWNjdW11bGF0b3IuaApAQCAtNjcsMjEgKzY3LDE1IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoU3RyaW5nQnVpbGRlciYs
IGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgRW50aXR5TWFzayk7CiAKIHByb3Rl
Y3RlZDoKLSAgICBzdGF0aWMgc2l6ZV90IHRvdGFsTGVuZ3RoKGNvbnN0IFZlY3RvcjxTdHJpbmc+
Jik7Ci0gICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFya3VwLmxlbmd0aCgp
OyB9Ci0gICAgYm9vbCBpc0FsbEFTQ0lJKCkgY29uc3QgeyByZXR1cm4gbV9tYXJrdXAudG9TdHJp
bmdQcmVzZXJ2ZUNhcGFjaXR5KCkuaXNBbGxBU0NJSSgpOyB9CisgICAgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9tYXJrdXAubGVuZ3RoKCk7IH0KKyAgICBib29sIGlzQWxsQVND
SUkoKSBjb25zdCB7IHJldHVybiBtX21hcmt1cC5pc0FsbEFTQ0lJKCk7IH0KIAotICAgIHZvaWQg
Y29uY2F0ZW5hdGVNYXJrdXAoU3RyaW5nQnVpbGRlciYpOworICAgIFN0cmluZ0J1aWxkZXIgdGFr
ZU1hcmt1cCgpOwogCi0gICAgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0gICAg
dm9pZCBhcHBlbmRTdHJpbmdWaWV3KFN0cmluZ1ZpZXcpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IC4uLlN0cmluZ1R5cGVzPiB2b2lkIGFwcGVuZChTdHJpbmdUeXBlcy4uLiBzdHJpbmdzKSB7IG1f
bWFya3VwLmFwcGVuZChzdHJpbmdzLi4uKTsgfQogCiAgICAgdm9pZCBzdGFydEFwcGVuZGluZ05v
ZGUoY29uc3QgTm9kZSYsIE5hbWVzcGFjZXMqID0gbnVsbHB0cik7Ci0gICAgdm9pZCBlbmRBcHBl
bmRpbmdOb2RlKGNvbnN0IE5vZGUmIG5vZGUpCi0gICAgewotICAgICAgICBpZiAoaXM8RWxlbWVu
dD4obm9kZSkpCi0gICAgICAgICAgICBhcHBlbmRFbmRUYWcobV9tYXJrdXAsIGRvd25jYXN0PEVs
ZW1lbnQ+KG5vZGUpKTsKLSAgICB9CisgICAgdm9pZCBlbmRBcHBlbmRpbmdOb2RlKGNvbnN0IE5v
ZGUmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTdGFydFRhZyhTdHJpbmdCdWlsZGVyJiwg
Y29uc3QgRWxlbWVudCYsIE5hbWVzcGFjZXMqKTsKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5k
VGFnKFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50Jik7CkBAIC05MiwyMyArODYsMTYgQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgYXBwZW5kQ2xvc2VUYWcoU3RyaW5nQnVpbGRlciYsIGNvbnN0
IEVsZW1lbnQmKTsKIAogICAgIHZvaWQgYXBwZW5kTm9uRWxlbWVudE5vZGUoU3RyaW5nQnVpbGRl
ciYsIGNvbnN0IE5vZGUmLCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBlbmRFbmRNYXJrdXAo
U3RyaW5nQnVpbGRlciYsIGNvbnN0IEVsZW1lbnQmKTsKIAotICAgIHZvaWQgYXBwZW5kQXR0cmli
dXRlVmFsdWUoU3RyaW5nQnVpbGRlciYsIGNvbnN0IFN0cmluZyYsIGJvb2wgaXNTZXJpYWxpemlu
Z0hUTUwpOwotICAgIHZvaWQgYXBwZW5kTmFtZXNwYWNlKFN0cmluZ0J1aWxkZXImLCBjb25zdCBB
dG9tU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWVzcGFjZVVSSSwgTmFtZXNw
YWNlcyYsIGJvb2wgYWxsb3dFbXB0eURlZmF1bHROUyA9IGZhbHNlKTsKLSAgICB2b2lkIGFwcGVu
ZFhNTERlY2xhcmF0aW9uKFN0cmluZ0J1aWxkZXImLCBjb25zdCBEb2N1bWVudCYpOwotICAgIHZv
aWQgYXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXImLCBjb25zdCBEb2N1bWVudFR5cGUm
KTsKLSAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbihTdHJpbmdCdWlsZGVyJiwg
Y29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSk7CisgICAgc3RhdGljIHZv
aWQgYXBwZW5kQXR0cmlidXRlVmFsdWUoU3RyaW5nQnVpbGRlciYsIGNvbnN0IFN0cmluZyYsIGJv
b2wgaXNTZXJpYWxpemluZ0hUTUwpOwogICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlKFN0cmluZ0J1
aWxkZXImLCBjb25zdCBFbGVtZW50JiwgY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyopOwot
ICAgIHZvaWQgYXBwZW5kQ0RBVEFTZWN0aW9uKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcm
KTsKIAotICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudChjb25zdCBFbGVtZW50Jik7
Ci0gICAgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJiwg
TmFtZXNwYWNlcyYpOwogICAgIEVudGl0eU1hc2sgZW50aXR5TWFza0ZvclRleHQoY29uc3QgVGV4
dCYpIGNvbnN0OwogCiAgICAgVmVjdG9yPE5vZGUqPiogY29uc3QgbV9ub2RlczsKIAogcHJpdmF0
ZToKKyAgICB2b2lkIGFwcGVuZE5hbWVzcGFjZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgQXRvbVN0
cmluZyYgcHJlZml4LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMm
LCBib29sIGFsbG93RW1wdHlEZWZhdWx0TlMgPSBmYWxzZSk7CiAgICAgU3RyaW5nIHJlc29sdmVV
UkxJZk5lZWRlZChjb25zdCBFbGVtZW50JiwgY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdm9p
ZCBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxl
bWVudCYsIGNvbnN0IEF0dHJpYnV0ZSYpOwogICAgIHZvaWQgc2VyaWFsaXplTm9kZXNXaXRoTmFt
ZXNwYWNlcyhOb2RlJiB0YXJnZXROb2RlLCBTZXJpYWxpemVkTm9kZXMsIGNvbnN0IE5hbWVzcGFj
ZXMqLCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lwKTsKQEAgLTExOCw4ICsx
MDUsMTQgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZ0J1aWxkZXIgbV9tYXJrdXA7CiAgICAgY29u
c3QgUmVzb2x2ZVVSTHMgbV9yZXNvbHZlVVJMczsKLSAgICBTZXJpYWxpemF0aW9uU3ludGF4IG1f
c2VyaWFsaXphdGlvblN5bnRheDsKKyAgICBjb25zdCBTZXJpYWxpemF0aW9uU3ludGF4IG1fc2Vy
aWFsaXphdGlvblN5bnRheDsKICAgICB1bnNpZ25lZCBtX3ByZWZpeExldmVsIHsgMCB9OwogfTsK
IAoraW5saW5lIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmVuZEFwcGVuZGluZ05vZGUoY29uc3Qg
Tm9kZSYgbm9kZSkKK3sKKyAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAgIGFwcGVu
ZEVuZFRhZyhtX21hcmt1cCwgZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggYWRjODhmNmQx
OTc1NTMyZmFhMTU0NjE3MzFhMGJlOThiZWEwMTQyNy4uOTBlZTZjMzczMjlhYTdkYzI0NzA1ZmU0
NmI4ODk2N2Y4NDk1NzJjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJr
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtODYsNyAr
ODYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKLXN0YXRpYyBib29sIHByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUoU3R5bGVQcm9wZXJ0
aWVzKiwgQ1NTUHJvcGVydHlJRCk7CitzdGF0aWMgYm9vbCBwcm9wZXJ0eU1pc3NpbmdPckVxdWFs
VG9Ob25lKGNvbnN0IFN0eWxlUHJvcGVydGllcyosIENTU1Byb3BlcnR5SUQpOwogCiBjbGFzcyBB
dHRyaWJ1dGVDaGFuZ2UgewogcHVibGljOgpAQCAtMjMxLDcgKzIzMSw3IEBAIHB1YmxpYzoKICAg
ICBib29sIG5lZWRSZWxhdGl2ZVN0eWxlV3JhcHBlcigpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZFJl
bGF0aXZlU3R5bGVXcmFwcGVyOyB9CiAgICAgYm9vbCBuZWVkQ2xlYXJpbmdEaXYoKSBjb25zdCB7
IHJldHVybiBtX25lZWRDbGVhcmluZ0RpdjsgfQogCi0gICAgdXNpbmcgTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZFN0cmluZzsKKyAgICB1c2luZyBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kOwog
CiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZShOb2RlJiBub2RlKQogICAgIHsKQEAgLTI0
MiwxMyArMjQyLDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcHJlcGVuZE1ldGFDaGFyc2V0VVRG
OFRhZ0lmTm9uQVNDSUlDaGFyYWN0ZXJzQXJlUHJlc2VudCgpCiAgICAgewotICAgICAgICBpZiAo
aXNBbGxBU0NJSSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fcmV2ZXJzZWRQ
cmVjZWRpbmdNYXJrdXAuYXBwZW5kKCI8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj4iX3MpOworICAg
ICAgICBpZiAoIWlzQWxsQVNDSUkoKSkKKyAgICAgICAgICAgIG1fcmV2ZXJzZWRQcmVjZWRpbmdN
YXJrdXAuYXBwZW5kKCI8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj4iX3MpOwogICAgIH0KIAogcHJp
dmF0ZToKKyAgICBib29sIGlzQWxsQVNDSUkoKSBjb25zdDsKICAgICB2b2lkIGFwcGVuZFN0eWxl
Tm9kZU9wZW5UYWcoU3RyaW5nQnVpbGRlciYsIFN0eWxlUHJvcGVydGllcyosIERvY3VtZW50Jiwg
Ym9vbCBpc0Jsb2NrID0gZmFsc2UpOwogICAgIGNvbnN0IFN0cmluZyYgc3R5bGVOb2RlQ2xvc2VU
YWcoYm9vbCBpc0Jsb2NrID0gZmFsc2UpOwogCkBAIC0zNjQsNyArMzYzLDcgQEAgdm9pZCBTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhTdHlsZU5vZGUoU3R5bGVQcm9wZXJ0aWVzKiBz
dHlsZSwgRG9jdW1lbnQKICAgICBTdHJpbmdCdWlsZGVyIG9wZW5UYWc7CiAgICAgYXBwZW5kU3R5
bGVOb2RlT3BlblRhZyhvcGVuVGFnLCBzdHlsZSwgZG9jdW1lbnQsIGlzQmxvY2spOwogICAgIG1f
cmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXAuYXBwZW5kKG9wZW5UYWcudG9TdHJpbmcoKSk7Ci0gICAg
YXBwZW5kU3RyaW5nKHN0eWxlTm9kZUNsb3NlVGFnKGlzQmxvY2spKTsKKyAgICBhcHBlbmQoc3R5
bGVOb2RlQ2xvc2VUYWcoaXNCbG9jaykpOwogfQogCiB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRTdHlsZU5vZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXImIG91dCwgU3R5bGVQcm9w
ZXJ0aWVzKiBzdHlsZSwgRG9jdW1lbnQmIGRvY3VtZW50LCBib29sIGlzQmxvY2spCkBAIC0zODYs
MTcgKzM4NSwzOCBAQCBjb25zdCBTdHJpbmcmIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpzdHls
ZU5vZGVDbG9zZVRhZyhib29sIGlzQmxvY2spCiAgICAgcmV0dXJuIGlzQmxvY2sgPyBkaXZDbG9z
ZSA6IHN0eWxlU3BhbkNsb3NlOwogfQogCi1TdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6
OnRha2VSZXN1bHRzKCkKK2Jvb2wgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmlzQWxsQVNDSUko
KSBjb25zdAogewotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZl
Q2FwYWNpdHkodG90YWxMZW5ndGgobV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cCkgKyBsZW5ndGgo
KSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cC5zaXpl
KCk7IGkgPiAwOyAtLWkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQobV9yZXZlcnNlZFByZWNlZGlu
Z01hcmt1cFtpIC0gMV0pOworICAgIGZvciAoYXV0byYgcHJlY2VkaW5nIDogbV9yZXZlcnNlZFBy
ZWNlZGluZ01hcmt1cCkgeworICAgICAgICBpZiAoIXByZWNlZGluZy5pc0FsbEFTQ0lJKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBNYXJrdXBBY2N1bXVs
YXRvcjo6aXNBbGxBU0NJSSgpOworfQogCi0gICAgY29uY2F0ZW5hdGVNYXJrdXAocmVzdWx0KTsK
Ky8vIFN0b3BnYXAgdW50aWwgQysrMjAgYWRkcyBzdGQ6OnJhbmdlczo6cmV2ZXJzZV92aWV3Lgor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvbj4gc3RydWN0IFJldmVyc2VWaWV3IHsKKyAgICBD
b2xsZWN0aW9uJiBjb2xsZWN0aW9uOworICAgIGRlY2x0eXBlKGNvbGxlY3Rpb24ucmJlZ2luKCkp
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gY29sbGVjdGlvbi5yYmVnaW4oKTsgfQorICAgIGRlY2x0
eXBlKGNvbGxlY3Rpb24ucmVuZCgpKSBlbmQoKSBjb25zdCB7IHJldHVybiBjb2xsZWN0aW9uLnJl
bmQoKTsgfQorICAgIGRlY2x0eXBlKGNvbGxlY3Rpb24uc2l6ZSgpKSBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gY29sbGVjdGlvbi5zaXplKCk7IH0KKyAgICBSZXZlcnNlVmlldyhDb2xsZWN0aW9uJiBj
b2xsZWN0aW9uKQorICAgICAgICA6IGNvbGxlY3Rpb24oY29sbGVjdGlvbikKKyAgICB7CisgICAg
fQorfTsKIAotICAgIC8vIFdlIHJlbW92ZSAnXDAnIGNoYXJhY3RlcnMgYmVjYXVzZSB0aGV5IGFy
ZSBub3QgdmlzaWJseSByZW5kZXJlZCB0byB0aGUgdXNlci4KK1N0cmluZyBTdHlsZWRNYXJrdXBB
Y2N1bXVsYXRvcjo6dGFrZVJlc3VsdHMoKQoreworICAgIENoZWNrZWRVaW50MzIgbGVuZ3RoID0g
dGhpcy0+bGVuZ3RoKCk7CisgICAgZm9yIChhdXRvJiBzdHJpbmcgOiBtX3JldmVyc2VkUHJlY2Vk
aW5nTWFya3VwKQorICAgICAgICBsZW5ndGggKz0gc3RyaW5nLmxlbmd0aCgpOworICAgIFN0cmlu
Z0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoLnVuc2Fm
ZUdldCgpKTsKKyAgICBmb3IgKGF1dG8mIHN0cmluZyA6IFJldmVyc2VWaWV3IHsgbV9yZXZlcnNl
ZFByZWNlZGluZ01hcmt1cCB9KQorICAgICAgICByZXN1bHQuYXBwZW5kKHN0cmluZyk7CisgICAg
cmVzdWx0LmFwcGVuZCh0YWtlTWFya3VwKCkpOworICAgIC8vIFJlbW92ZSAnXDAnIGNoYXJhY3Rl
cnMgYmVjYXVzZSB0aGV5IGFyZSBub3QgdmlzaWJseSByZW5kZXJlZCB0byB0aGUgdXNlci4KICAg
ICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCkucmVwbGFjZVdpdGhMaXRlcmFsKCdcMCcsICIiKTsK
IH0KIApAQCAtNDA1LDcgKzQyNSw3IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBUZXh0JiB0ZXh0KQogICAgIGNvbnN0
IGJvb2wgcGFyZW50SXNUZXh0YXJlYSA9IGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KHRleHQucGFy
ZW50RWxlbWVudCgpKTsKICAgICBjb25zdCBib29sIHdyYXBwaW5nU3BhbiA9IHNob3VsZEFwcGx5
V3JhcHBpbmdTdHlsZSh0ZXh0KSAmJiAhcGFyZW50SXNUZXh0YXJlYTsKICAgICBpZiAod3JhcHBp
bmdTcGFuKSB7Ci0gICAgICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHdyYXBwaW5nU3R5bGUgPSBt
X3dyYXBwaW5nU3R5bGUtPmNvcHkoKTsKKyAgICAgICAgYXV0byB3cmFwcGluZ1N0eWxlID0gbV93
cmFwcGluZ1N0eWxlLT5jb3B5KCk7CiAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0v
NTM3MTUzNj4gU3R5bGUgcnVsZXMgdGhhdCBtYXRjaCBwYXN0ZWQgY29udGVudCBjYW4gY2hhbmdl
IGl0J3MgYXBwZWFyYW5jZQogICAgICAgICAvLyBNYWtlIHN1cmUgc3BhbnMgYXJlIGlubGluZSBz
dHlsZSBpbiBwYXN0ZSBzaWRlIGUuZy4gc3BhbiB7IGRpc3BsYXk6IGJsb2NrIH0uCiAgICAgICAg
IHdyYXBwaW5nU3R5bGUtPmZvcmNlSW5saW5lKCk7CkBAIC01NjQsNyArNTg0LDcgQEAgdm9pZCBT
dHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRUYWcoU3RyaW5nQnVpbGRlciYgb3V0
LCBjb25zdCBFbGVtZW50JgogICAgICAgICBpZiAoIW5ld0lubGluZVN0eWxlLT5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIG91dC5hcHBlbmRMaXRlcmFsKCIgc3R5bGU9XCIiKTsKICAgICAgICAg
ICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKG91dCwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmFz
VGV4dCgpLCBkb2N1bWVudElzSFRNTCk7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKCdcIicpOwor
ICAgICAgICAgICAgb3V0LmFwcGVuZCgnIicpOwogICAgICAgICB9CiAgICAgfQogCkBAIC03MjEs
OSArNzQxLDkgQEAgYm9vbCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTm9kZVRvUHJl
c2VydmVNU09MaXN0KE5vZGUmIG5vZGUpCiAgICAgICAgIGlmIChtc29MaXN0RGVmaW5pdGlvbnNF
bmQgPT0gbm90Rm91bmQgfHwgc3RhcnQgPj0gbXNvTGlzdERlZmluaXRpb25zRW5kKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGFwcGVuZFN0cmluZygiPGhlYWQ+PHN0eWxl
IGNsYXNzPVwiIiBXZWJLaXRNU09MaXN0UXVpcmtzU3R5bGUgIlwiPlxuPCEtLVxuIik7Ci0gICAg
ICAgIGFwcGVuZFN0cmluZ1ZpZXcoU3RyaW5nVmlldyh0ZXh0Q2hpbGQuZGF0YSgpKS5zdWJzdHJp
bmcoc3RhcnQsIG1zb0xpc3REZWZpbml0aW9uc0VuZCAtIHN0YXJ0ICsgMykpOwotICAgICAgICBh
cHBlbmRTdHJpbmcoIlxuLS0+XG48L3N0eWxlPjwvaGVhZD4iKTsKKyAgICAgICAgYXBwZW5kKCI8
aGVhZD48c3R5bGUgY2xhc3M9XCIiIFdlYktpdE1TT0xpc3RRdWlya3NTdHlsZSAiXCI+XG48IS0t
XG4iLAorICAgICAgICAgICAgU3RyaW5nVmlldyh0ZXh0Q2hpbGQuZGF0YSgpKS5zdWJzdHJpbmco
c3RhcnQsIG1zb0xpc3REZWZpbml0aW9uc0VuZCAtIHN0YXJ0ICsgMyksCisgICAgICAgICAgICAi
XG4tLT5cbjwvc3R5bGU+PC9oZWFkPiIpOwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
QEAgLTc1NCwxNiArNzc0LDEyIEBAIHN0YXRpYyBpbmxpbmUgTm9kZSogYW5jZXN0b3JUb1JldGFp
blN0cnVjdHVyZUFuZEFwcGVhcmFuY2UoTm9kZSogY29tbW9uQW5jZXN0b3IpCiAgICAgcmV0dXJu
IGFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRBcHBlYXJhbmNlRm9yQmxvY2soZW5jbG9zaW5n
QmxvY2soY29tbW9uQW5jZXN0b3IpKTsKIH0KIAotc3RhdGljIGJvb2wgcHJvcGVydHlNaXNzaW5n
T3JFcXVhbFRvTm9uZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQpCitzdGF0aWMgYm9vbCBwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKGNvbnN0IFN0
eWxlUHJvcGVydGllcyogc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKIHsKICAgICBp
ZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2
YWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwotICAgIGlmICgh
dmFsdWUpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZTsKKyAg
ICBhdXRvIHZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7Cisg
ICAgcmV0dXJuIGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZTsKIH0KIAogc3Rh
dGljIGJvb2wgbmVlZEludGVyY2hhbmdlTmV3bGluZUFmdGVyKGNvbnN0IFZpc2libGVQb3NpdGlv
biYgdikKQEAgLTg2OSw3ICs4ODUsNyBAQCBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZp
bmdWaXN1YWxBcHBlYXJhbmNlSW50ZXJuYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LAogICAgICAg
ICBpZiAodmlzaWJsZVN0YXJ0ID09IHZpc2libGVFbmQucHJldmlvdXMoKSkKICAgICAgICAgICAg
IHJldHVybiBpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmc7CiAKLSAgICAgICAgYWNjdW11bGF0b3Iu
YXBwZW5kU3RyaW5nKGludGVyY2hhbmdlTmV3bGluZVN0cmluZyk7CisgICAgICAgIGFjY3VtdWxh
dG9yLmFwcGVuZChpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcuZ2V0KCkpOwogICAgICAgICBzdGFy
dEFkanVzdGVkRm9ySW50ZXJjaGFuZ2VOZXdsaW5lID0gdmlzaWJsZVN0YXJ0Lm5leHQoKS5kZWVw
RXF1aXZhbGVudCgpOwogCiAgICAgICAgIGlmIChjb21wYXJlUG9zaXRpb25zKHN0YXJ0QWRqdXN0
ZWRGb3JJbnRlcmNoYW5nZU5ld2xpbmUsIGVuZCkgPj0gMCkKQEAgLTkxNSw3ICs5MzEsNyBAQCBz
dGF0aWMgU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlSW50ZXJuYWwo
Y29uc3QgUG9zaXRpb24mIHN0YXJ0LAogICAgIAogICAgIGlmIChhY2N1bXVsYXRvci5uZWVkUmVs
YXRpdmVTdHlsZVdyYXBwZXIoKSAmJiBuZWVkc1Bvc2l0aW9uU3R5bGVDb252ZXJzaW9uKSB7CiAg
ICAgICAgIGlmIChhY2N1bXVsYXRvci5uZWVkQ2xlYXJpbmdEaXYoKSkKLSAgICAgICAgICAgIGFj
Y3VtdWxhdG9yLmFwcGVuZFN0cmluZygiPGRpdiBzdHlsZT1cImNsZWFyOiBib3RoO1wiPjwvZGl2
PiIpOworICAgICAgICAgICAgYWNjdW11bGF0b3IuYXBwZW5kKCI8ZGl2IHN0eWxlPVwiY2xlYXI6
IGJvdGg7XCI+PC9kaXY+Iik7CiAgICAgICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHBvc2l0aW9u
UmVsYXRpdmVTdHlsZSA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0FuZElubGluZURlY2woKmJvZHkp
OwogICAgICAgICBwb3NpdGlvblJlbGF0aXZlU3R5bGUtPnN0eWxlKCktPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5UG9zaXRpb24sIENTU1ZhbHVlUmVsYXRpdmUpOwogICAgICAgICBhY2N1bXVsYXRv
ci53cmFwV2l0aFN0eWxlTm9kZShwb3NpdGlvblJlbGF0aXZlU3R5bGUtPnN0eWxlKCksIGRvY3Vt
ZW50LCB0cnVlKTsKQEAgLTkyMywxMyArOTM5LDE0IEBAIHN0YXRpYyBTdHJpbmcgc2VyaWFsaXpl
UHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2VJbnRlcm5hbChjb25zdCBQb3NpdGlvbiYgc3RhcnQs
CiAKICAgICAvLyBGSVhNRTogVGhlIGludGVyY2hhbmdlIG5ld2xpbmUgc2hvdWxkIGJlIHBsYWNl
ZCBpbiB0aGUgYmxvY2sgdGhhdCBpdCdzIGluLCBub3QgYWZ0ZXIgYWxsIG9mIHRoZSBjb250ZW50
LCB1bmNvbmRpdGlvbmFsbHkuCiAgICAgaWYgKGFubm90YXRlID09IEFubm90YXRlRm9ySW50ZXJj
aGFuZ2U6OlllcyAmJiBuZWVkSW50ZXJjaGFuZ2VOZXdsaW5lQWZ0ZXIodmlzaWJsZUVuZC5wcmV2
aW91cygpKSkKLSAgICAgICAgYWNjdW11bGF0b3IuYXBwZW5kU3RyaW5nKGludGVyY2hhbmdlTmV3
bGluZVN0cmluZyk7CisgICAgICAgIGFjY3VtdWxhdG9yLmFwcGVuZChpbnRlcmNoYW5nZU5ld2xp
bmVTdHJpbmcuZ2V0KCkpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gT24gQ29jb2Eg
cGxhdGZvcm1zLCB0aGlzIG1hcmt1cCBpcyBldmVudHVhbGx5IHBlcnNpc3RlZCB0byB0aGUgcGFz
dGVib2FyZCBhbmQgcmVhZCBiYWNrIGFzIFVURi04IGRhdGEsCiAgICAgLy8gc28gdGhpcyBtZXRh
IHRhZyBpcyBuZWVkZWQgZm9yIGNsaWVudHMgdGhhdCByZWFkIHRoaXMgZGF0YSBpbiB0aGUgZnV0
dXJlIGZyb20gdGhlIHBhc3RlYm9hcmQgYW5kIGxvYWQgaXQuCiAgICAgYWNjdW11bGF0b3IucHJl
cGVuZE1ldGFDaGFyc2V0VVRGOFRhZ0lmTm9uQVNDSUlDaGFyYWN0ZXJzQXJlUHJlc2VudCgpOwog
I2VuZGlmCisKICAgICByZXR1cm4gYWNjdW11bGF0b3IudGFrZVJlc3VsdHMoKTsKIH0KIApAQCAt
OTQ1LDE3ICs5NjIsMTYgQEAgU3RyaW5nIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJh
bmNlKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmUKICAgICAgICAgQW5ub3Rh
dGVGb3JJbnRlcmNoYW5nZTo6WWVzLCBDb252ZXJ0QmxvY2tzVG9JbmxpbmVzOjpObywgU3RhbmRh
cmRGb250RmFtaWx5U2VyaWFsaXphdGlvbk1vZGU6OktlZXAsIE1TT0xpc3RNb2RlOjpEb05vdFBy
ZXNlcnZlKTsKIH0KIAotCi1zdGF0aWMgYm9vbCBzaG91bGRQcmVzZXJ2ZU1TT0xpc3RzKGNvbnN0
IFN0cmluZyYgbWFya3VwKQorc3RhdGljIGJvb2wgc2hvdWxkUHJlc2VydmVNU09MaXN0cyhTdHJp
bmdWaWV3IG1hcmt1cCkKIHsKICAgICBpZiAoIW1hcmt1cC5zdGFydHNXaXRoKCI8aHRtbCB4bWxu
czoiKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1dG8gdGFnQ2xvc2UgPSBtYXJrdXAu
ZmluZCgnPicpOwogICAgIGlmICh0YWdDbG9zZSA9PSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGF1dG8gaHRtbFRhZyA9IG1hcmt1cC5zdWJzdHJpbmcoMCwgdGFnQ2xvc2Up
OwotICAgIHJldHVybiBodG1sVGFnLmNvbnRhaW5zKCJ4bWxuczpvPVwidXJuOnNjaGVtYXMtbWlj
cm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlXCIiKQotICAgICAgICAmJiBodG1sVGFnLmNvbnRhaW5z
KCJ4bWxuczp3PVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZFwiIik7Cisg
ICAgYXV0byB0YWcgPSBtYXJrdXAuc3Vic3RyaW5nKDAsIHRhZ0Nsb3NlKTsKKyAgICByZXR1cm4g
dGFnLmNvbnRhaW5zKCJ4bWxuczpvPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6
b2ZmaWNlXCIiKQorICAgICAgICAmJiB0YWcuY29udGFpbnMoInhtbG5zOnc9XCJ1cm46c2NoZW1h
cy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkXCIiKTsKIH0KIAogU3RyaW5nIHNhbml0aXplZE1h
cmt1cEZvckZyYWdtZW50SW5Eb2N1bWVudChSZWY8RG9jdW1lbnRGcmFnbWVudD4mJiBmcmFnbWVu
dCwgRG9jdW1lbnQmIGRvY3VtZW50LCBNU09MaXN0UXVpcmtzIG1zb0xpc3RRdWlya3MsIGNvbnN0
IFN0cmluZyYgb3JpZ2luYWxNYXJrdXApCkBAIC05NzEsMjAgKzk4NywxNiBAQCBTdHJpbmcgc2Fu
aXRpemVkTWFya3VwRm9yRnJhZ21lbnRJbkRvY3VtZW50KFJlZjxEb2N1bWVudEZyYWdtZW50PiYm
IGZyYWdtZW50LCBEbwogICAgIGF1dG8gcmVzdWx0ID0gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3Vh
bEFwcGVhcmFuY2VJbnRlcm5hbChmaXJzdFBvc2l0aW9uSW5Ob2RlKGJvZHlFbGVtZW50LmdldCgp
KSwgbGFzdFBvc2l0aW9uSW5Ob2RlKGJvZHlFbGVtZW50LmdldCgpKSwgbnVsbHB0ciwKICAgICAg
ICAgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LCBTZXJp
YWxpemVDb21wb3NlZFRyZWU6Ok5vLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlOjpZZXMsIENvbnZl
cnRCbG9ja3NUb0lubGluZXM6Ok5vLCAgU3RhbmRhcmRGb250RmFtaWx5U2VyaWFsaXphdGlvbk1v
ZGU6OlN0cmlwLCBtc29MaXN0TW9kZSk7CiAKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0g
ICAgaWYgKG1zb0xpc3RNb2RlID09IE1TT0xpc3RNb2RlOjpQcmVzZXJ2ZSkgewotICAgICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIjxodG1sIHhtbG5zOm89XCJ1cm46c2NoZW1hcy1taWNyb3Nv
ZnQtY29tOm9mZmljZTpvZmZpY2VcIlxuIgotICAgICAgICAgICAgInhtbG5zOnc9XCJ1cm46c2No
ZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkXCJcbiIKLSAgICAgICAgICAgICJ4bWxuczpt
PVwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sXCJcbiIK
LSAgICAgICAgICAgICJ4bWxucz1cImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDBcIj4i
KTsKLSAgICB9Ci0KLSAgICBidWlsZGVyLmFwcGVuZChyZXN1bHQpOwotCi0gICAgaWYgKG1zb0xp
c3RNb2RlID09IE1TT0xpc3RNb2RlOjpQcmVzZXJ2ZSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmRM
aXRlcmFsKCI8L2h0bWw+Iik7CisgICAgaWYgKG1zb0xpc3RNb2RlICE9IE1TT0xpc3RNb2RlOjpQ
cmVzZXJ2ZSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHJldHVybiBidWlsZGVyLnRv
U3RyaW5nKCk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoCisgICAgICAgICI8aHRtbCB4bWxuczpv
PVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlXCJcbiIKKyAgICAgICAg
InhtbG5zOnc9XCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkXCJcbiIKKyAg
ICAgICAgInhtbG5zOm09XCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA0
LzEyL29tbWxcIlxuIgorICAgICAgICAieG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMt
aHRtbDQwXCI+IiwKKyAgICAgICAgcmVzdWx0LAorICAgICAgICAiPC9odG1sPiIpOwogfQogCiBz
dGF0aWMgdm9pZCByZXN0b3JlQXR0YWNobWVudEVsZW1lbnRzSW5GcmFnbWVudChEb2N1bWVudEZy
YWdtZW50JiBmcmFnbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApp
bmRleCA2NjVhY2U0N2U3OWUxNDNhMWQwNjUzNTk4NzM3Y2U0MDdhMGEyMGQ3Li5hOTBkNGVjYjk1
ODkzNDdjNTZmMDBlMmIwYjc3OTQxYjk4OWI4MTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuY3BwCkBAIC03MTQsNyArNzE0LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6
OnJlc2V0RGVmYXVsdEJ1dHRvbigpCiAgICAgaWYgKCFtX2RlZmF1bHRCdXR0b24pIHsKICAgICAg
ICAgLy8gQ29tcHV0aW5nIHRoZSBkZWZhdWx0IGJ1dHRvbiBpcyBub3QgY2hlYXAsIHdlIGRvbid0
IHdhbnQgdG8gZG8gaXQgdW5sZXNzIG5lZWRlZC4KICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIG5v
IGRlZmF1bHQgYnV0dG9uIHNldCwgdGhlIG9ubHkgc3R5bGUgdG8gaW52YWxpZGF0ZSBpcyB0aGUg
ZWxlbWVudAotICAgICAgICAvLyBiZWluZyBhZGRlZCB0byB0aGUgZm9ybS4gVGhpcyBpcyBkb25l
IGV4cGxpY2l0ZWx5IGluIHJlZ2lzdGVyRm9ybUVsZW1lbnQoKS4KKyAgICAgICAgLy8gYmVpbmcg
YWRkZWQgdG8gdGhlIGZvcm0uIFRoaXMgaXMgZG9uZSBleHBsaWNpdGx5IGluIHJlZ2lzdGVyRm9y
bUVsZW1lbnQoKS4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbWF0aG1sL01hdGhNTE9wZXJhdG9yRGljdGlvbmFyeS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9tYXRobWwvTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5LmNwcAppbmRleCBlOWJmZjg5ZmRh
YTE5NzNiYWFjMmIxYjgwZWJjZmQzNzIzOGFkNDBhLi4yZDJiYzJiZTYwMTUwZTBjYTkwYjgzYzI5
YTNlOTg4ODM5MDlkOGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1M
T3BlcmF0b3JEaWN0aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1M
T3BlcmF0b3JEaWN0aW9uYXJ5LmNwcApAQCAtMTEzOCw3ICsxMTM4LDcgQEAgT3B0aW9uYWw8UHJv
cGVydHk+IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6c2VhcmNoKFVDaGFyMzIgY2hhcmFjdGVy
LCBGb3JtIGZvcm0KICAgICBpZiAoZXhwbGljaXRGb3JtKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgLy8gSWYgd2UgZGlkIG5vdCBmaW5kIHRoZSBkZXNpcmVkIG9wZXJhdG9y
IGZvcm0gYW5kIGlmIGl0IHdhcyBub3Qgc2V0IGV4cGxpY2l0ZWx5LCB3ZSB1c2UgdGhlIGZpcnN0
IG9uZSBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOiBJbmZpeCwgUHJlZml4LCBQb3N0Zml4LgorICAg
IC8vIElmIHdlIGRpZCBub3QgZmluZCB0aGUgZGVzaXJlZCBvcGVyYXRvciBmb3JtIGFuZCBpZiBp
dCB3YXMgbm90IHNldCBleHBsaWNpdGx5LCB3ZSB1c2UgdGhlIGZpcnN0IG9uZSBpbiB0aGUgZm9s
bG93aW5nIG9yZGVyOiBJbmZpeCwgUHJlZml4LCBQb3N0Zml4LgogICAgIC8vIFRoaXMgaXMgdG8g
aGFuZGxlIGJhZCBNYXRoTUwgbWFya3VwIHdpdGhvdXQgZXhwbGljaXQgPG1yb3c+IGRlbGltaXRl
cnMgbGlrZSAiPG1vPig8L21vPjxtaT5hPC9taT48bW8+KTwvbW8+PG1vPig8L21vPjxtaT5iPC9t
aT48bW8+KTwvbW8+IiB3aGVyZSBpbm5lcmZlbmNlcyBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQg
aW5maXguCiAgICAgaWYgKGF1dG8qIGVudHJ5ID0gdHJ5QmluYXJ5U2VhcmNoPGNvbnN0IEVudHJ5
LCBVQ2hhcjMyPihkaWN0aW9uYXJ5LCBkaWN0aW9uYXJ5U2l6ZSwgY2hhcmFjdGVyLCBFeHRyYWN0
Q2hhcikpIHsKICAgICAgICAgLy8gVGhlcmUgYXJlIGF0IG1vc3QgdHdvIG90aGVyIGVudHJpZXMg
YmVmb3JlIHRoZSBvbmUgZm91bmQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3Bw
CmluZGV4IGRjYTQwNmI5NTRhM2YzMDIxNTA2OGZkMWMwOGQ5ODg3YjMxZDI3ZjQuLjNmNmVkODRk
MDZkNDVjM2M3MDA3OGQ3Nzc4MDc2NTZkZDQ1OGRhYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZVNlcmlhbGl6ZXIuY3BwCkBAIC0xMTMsOSArMTEzLDkgQEAgUGFnZVNlcmlhbGl6ZXI6OlNlcmlh
bGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKFBhZ2VT
ZXIKICAgICAsIG1fc2VyaWFsaXplcihzZXJpYWxpemVyKQogICAgICwgbV9kb2N1bWVudChkb2N1
bWVudCkKIHsKLSAgICAvLyBNYXJrdXBBY2N1bXVsYXRvciBkb2VzIG5vdCBzZXJpYWxpemUgdGhl
IDw/eG1sIC4uLiBsaW5lLCBzbyB3ZSBhZGQgaXQgZXhwbGljaXRlbHkgdG8gZW5zdXJlIHRoZSBy
aWdodCBlbmNvZGluZyBpcyBzcGVjaWZpZWQuCisgICAgLy8gTWFya3VwQWNjdW11bGF0b3IgZG9l
cyBub3Qgc2VyaWFsaXplIHRoZSA8P3htbCAuLi4gbGluZSwgc28gd2UgYWRkIGl0IGV4cGxpY2l0
bHkgdG8gZW5zdXJlIHRoZSByaWdodCBlbmNvZGluZyBpcyBzcGVjaWZpZWQuCiAgICAgaWYgKG1f
ZG9jdW1lbnQuaXNYTUxEb2N1bWVudCgpIHx8IG1fZG9jdW1lbnQueG1sU3RhbmRhbG9uZSgpKQot
ICAgICAgICBhcHBlbmRTdHJpbmcoIjw/eG1sIHZlcnNpb249XCIiICsgbV9kb2N1bWVudC54bWxW
ZXJzaW9uKCkgKyAiXCIgZW5jb2Rpbmc9XCIiICsgbV9kb2N1bWVudC5jaGFyc2V0KCkgKyAiXCI/
PiIpOworICAgICAgICBhcHBlbmQoIjw/eG1sIHZlcnNpb249XCIiLCBtX2RvY3VtZW50LnhtbFZl
cnNpb24oKSwgIlwiIGVuY29kaW5nPVwiIiwgbV9kb2N1bWVudC5jaGFyc2V0KCksICJcIj8+Iik7
CiB9CiAKIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFRleHQmIHRleHQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAppbmRleCAz
ZDMyNTVmOGY3YjRlNGI0MThmMGI0ZGYyNjk3Y2RkZWYzZTNkYzIzLi5kZDE4OGFlMTFiMzdkNzk3
YjEyZDgxZDI5NjM2OWY3ZjE5NTc2ZWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKQEAgLTI0MCw3ICsyNDAsNyBAQCB2b2lkIFNW
R0lubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQ
b2ludCYgcGFpbnRPZmZzZQogICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgp
ICE9IFZpc2liaWxpdHk6OlZpc2libGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIE5vdGU6
IFdlJ3JlIGV4cGxpY2l0ZWx5IG5vdCBzdXBwb3J0aW5nIGNvbXBvc2l0aW9uICYgY3VzdG9tIHVu
ZGVybGluZXMgYW5kIGN1c3RvbSBoaWdobGlnaHRlcnMgLSB1bmxpa2UgSW5saW5lVGV4dEJveC4K
KyAgICAvLyBOb3RlOiBXZSdyZSBleHBsaWNpdGx5IG5vdCBzdXBwb3J0aW5nIGNvbXBvc2l0aW9u
ICYgY3VzdG9tIHVuZGVybGluZXMgYW5kIGN1c3RvbSBoaWdobGlnaHRlcnMgLSB1bmxpa2UgSW5s
aW5lVGV4dEJveC4KICAgICAvLyBJZiB3ZSBldmVyIG5lZWQgdGhhdCBmb3IgU1ZHLCBpdCdzIHZl
cnkgZWFzeSB0byByZWZhY3RvciBhbmQgcmV1c2UgdGhlIGNvZGUuCiAKICAgICBhdXRvJiBwYXJl
bnRSZW5kZXJlciA9IHBhcmVudCgpLT5yZW5kZXJlcigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDNjYzlmNzNjZGFkNTA5MGU0OWM4OGQ4NjVi
ZDNmYzcwNGEwMTMyYWMuLjU4MzJlNTk1ZDAyNzUxY2Q1YmNmYWEyNjY2OTNkMzVmODFkYmRjZmEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMC0wNS0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgU3RyZWFtbGluZSBNYXJrdXBBY2N1bXVsYXRvciB0byBpbXByb3ZlIGVmZmljaWVu
Y3kgYSBiaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMTY1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpURVNUKTogRml4IHNwZWxsbGluZyBlcnJvciBpbiB0aGUgd29yZCAiZXhwbGlj
aXRseSIuCisKIDIwMjAtMDUtMDggIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZW1vdmUgZW1wdHkgZGlyZWN0b3JpZXMgZnJvbSBmcm9tIHN2bi53ZWJraXQu
b3JnIHJlcG9zaXRvcnkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1N0cmluZ0ltcGwuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1w
bC5jcHAKaW5kZXggZThhY2ZiNmFkOTViM2Q1YmU3MTA3ZTA3MTdmZWJjOTBiYzM4MTEzYS4uYWFk
ZjRmOWNlM2U1MWJmNTZkMTA4YzNiZTRkMDdiZjljM2RlMzZiZCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHAKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgVEVTVChX
VEYsIFN0cmluZ0ltcGxDcmVhdGlvbkZyb21MaXRlcmFsKQogICAgIEFTU0VSVF9UUlVFKGVxdWFs
KHN0cmluZ1dpdGhUZW1wbGF0ZS5nZXQoKSwgIlRlbXBsYXRlIExpdGVyYWwiKSk7CiAgICAgQVNT
RVJUX1RSVUUoc3RyaW5nV2l0aFRlbXBsYXRlLT5pczhCaXQoKSk7CiAKLSAgICAvLyBDb25zdHJ1
Y3RvciB0YWtpbmcgdGhlIHNpemUgZXhwbGljaXRlbHkuCisgICAgLy8gQ29uc3RydWN0b3IgdGFr
aW5nIHRoZSBzaXplIGV4cGxpY2l0bHkuCiAgICAgY29uc3QgY2hhciogcHJvZ3JhbW1hdGljU3Ry
aW5nRGF0YSA9ICJFeHBsaWNpdCBTaXplIExpdGVyYWwiOwogICAgIGF1dG8gcHJvZ3JhbW1hdGlj
U3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwocHJvZ3JhbW1hdGljU3RyaW5n
RGF0YSwgc3RybGVuKHByb2dyYW1tYXRpY1N0cmluZ0RhdGEpKTsKICAgICBBU1NFUlRfRVEoc3Ry
bGVuKHByb2dyYW1tYXRpY1N0cmluZ0RhdGEpLCBwcm9ncmFtbWF0aWNTdHJpbmctPmxlbmd0aCgp
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398926</attachid>
            <date>2020-05-09 07:30:25 -0700</date>
            <delta_ts>2020-05-09 08:55:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211656-20200509073023.patch</filename>
            <type>text/plain</type>
            <size>41497</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxNDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
M2ZiYTZlNmI3MTgwMjc0YTRlM2Q2ZmZlYjY0YTkxYzkzZjc3YzEzLi45M2Q5ZTBiOTc0ODZjYTZk
MzFiMWI4OTE2NzViMjM1NGZmMjQ3NTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMC0wNS0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgU3RyZWFtbGluZSBNYXJrdXBBY2N1bXVsYXRvciB0byBpbXByb3ZlIGVmZmljaWVu
Y3kgYSBiaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMTY1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oOiBGaXggc3BlbGxpbmcgb2Yg
ImV4cGxpY2l0bHkiLgorCiAyMDIwLTA1LTA4ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KIAogICAgICAgICBBcnJheS5wcm90b3R5cGUuY29uY2F0IGZhc3QgcGF0aCBj
aGVja3Mgc2hvdWxkIG5vdCBiZSBvYnNlcnZhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGIzNzM4YjU2YWFlMzY0NjliZGIx
NmYzMTNkNjA2OTQzZDNhMzYxZWMuLjM3OTQwMDZmMTA1NjJjMTUwNWIxNjZiYTEyOWQyMGU5ZTZj
MWU5MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDUtMDggIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0cmVhbWxpbmUgTWFya3VwQWNjdW11bGF0b3IgdG8g
aW1wcm92ZSBlZmZpY2llbmN5IGEgYml0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTE2NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjppc0FsbEFTQ0lJIGNvbnN0KTogQWRkZWQuCisgICAgICAgICog
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oOiBBZGRlZCBpc0FsbEFTQ0lJLgorCiAyMDIwLTA1LTA4
ICBCYXN1a2UgU3V6dWtpICA8YmFzdWtlLnN1enVraUBzb255LmNvbT4KIAogICAgICAgICBbV1RG
XSBTaGFyZSBMaW51eCdzIE1lbW9yeVByZXNzdXJlSGFuZGxlciBhbW9uZyBvdGhlciBVbml4IHBv
cnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggOWQ3MjkyMmE2Yzk4NWE5YTRlYTNkMTQzYjkzMjhmMmU0MTVjOTQz
Yi4uMDhmMWYwYjIxMWZmZWNmNDA4MTExNGEwNjA3ZjdmODgxMWQ2NzA1OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDk1IEBACisyMDIwLTA1LTA4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBTdHJlYW1saW5lIE1hcmt1cEFjY3VtdWxhdG9yIHRvIGltcHJvdmUgZWZm
aWNpZW5jeSBhIGJpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjExNjU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMpOiBD
b3JyZWN0ZWQgZWFybHkKKyAgICAgICAgZXhpdCBzbyBpdCByZXR1cm5zIGFueSB0aW1lIHRoZSBs
ZW5ndGggaXMgMC4gRm9yIHNvbWUgcmVhc29uIHRoZSBjb2RlIGJlZm9yZQorICAgICAgICB3b3Vs
ZG4ndCBkbyB0aGUgZWFybHkgcmV0dXJuIHdoZW4gb2Zmc2V0IGlzIG5vbi16ZXJvLCB3aGljaCBp
cyB1bm5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZFN0cmluZ1ZpZXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZEVuZFRhZyk6IFVzZSB2YXJpYWRpYyBhcHBlbmQgdG8gY3V0IGRvd24K
KyAgICAgICAgb24gbWVtb3J5IGFsbG9jYXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6TWFya3Vw
QWNjdW11bGF0b3I6OnRvdGFsTGVuZ3RoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1h
cmt1cEFjY3VtdWxhdG9yOjpjb25jYXRlbmF0ZU1hcmt1cCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6dGFrZU1hcmt1cCk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVl
KTogVXNlIHZhcmlhZGljCisgICAgICAgIGFwcGVuZCB0byBjdXQgZG93biBvbiBtZW1vcnkgYWxs
b2NhdGlvbnMuIEFsc28gdXNlIGNoYXIgaW5zdGVhZCBvZiBVQ2hhciBzbworICAgICAgICB0aGUg
c3RyaW5nIGJ1aWxkaW5nIGNvZGUgZG9lc24ndCBoYXZlIHRvIGRvIGFuIDgvMTYgYml0IGNoZWNr
LgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudCk6IFByZXBlbmQg
YSBsaXRlcmFsLCBkb24ndCBib3RoZXIgdG8KKyAgICAgICAgbWFrZSBhIFN0cmluZyBqdXN0IHRv
IGFwcGVuZCB0byBhbm90aGVyIFN0cmluZy4gQWxzbyBtYWRlIHRoaXMgYQorICAgICAgICBub24t
bWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQWRkTmFtZXNwYWNlQXR0
cmlidXRlKTogTWFkZSB0aGlzIGEgbm9uLW1lbWJlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNv
cmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROYW1lc3BhY2UpOiBGaXggaGFzaCB0YWJsZSB1
c2FnZQorICAgICAgICB0byB1c2UgYWRkIGluc3RlYWQgb2YgZ2V0IGZvbGxvd2VkIGJ5IHNldCB0
byBhdm9pZCBkb3VibGUgaGFzaGluZy4KKyAgICAgICAgVXNlIHZhcmlhZGljIGFwcGVuZCB0byBj
dXQgZG93biBvbiBtZW1vcnkgYWxsb2NhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRUZXh0KTogVHdlYWtlZCBzdHlsZSB0byBtYWtlIHRoaXMgYQorICAg
ICAgICBvbmUtbGluZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZENvbW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kWE1MRGVjbGFyYXRpb24pOiBNYWRl
IHRoaXMgYSBub24tbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICBVc2UgdmFyaWFkaWMgYXBwZW5k
IHRvIGN1dCBkb3duIG9uIG1lbW9yeSBhbGxvY2F0aW9uLgorICAgICAgICAoV2ViQ29yZTo6YXBw
ZW5kRG9jdW1lbnRUeXBlKTogTWFkZSB0aGlzIGEgbm9uLW1lbWJlciBmdW5jdGlvbi4KKyAgICAg
ICAgVXNlIHZhcmlhZGljIGFwcGVuZCB0byBjdXQgZG93biBvbiBtZW1vcnkgYWxsb2NhdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDREFUQVNlY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5v
bkVsZW1lbnROb2RlKTogTW92ZWQgdGhlIGJvZGllcyBvZgorICAgICAgICBhcHBlbmRDb21tZW50
LCBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sIGFuZCBhcHBlbmRDREFUQVNlY3Rpb24gaW4K
KyAgICAgICAgaGVyZSBzaW5jZSB0aGV5IGNhbiBhbGwgYmUgb25lLWxpbmUgdmFyaWFkaWMgYXBw
ZW5kIGNhbGxzLgorCisgICAgICAgICogZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oOgorICAg
ICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6Omxlbmd0aCBjb25zdCk6IENoYW5nZWQg
dGhlIHJldHVybiB0eXBlCisgICAgICAgIG9mIGxlbmd0aCB0byBiZSB1bnNpZ25lZCBzaW5jZSB0
aGF0J3Mgd2hhdCBTdHJpbmdCdWlsZGVyIHJldHVybnMuCisgICAgICAgIE1hZGUgaXNBbGxBU0NJ
SSBjYWxsIFN0cmluZ0J1aWxkZXI6OmlzQWxsQVNDSUkuIFJlcGxhY2VkIGFwcGVuZFN0cmluZwor
ICAgICAgICBhbmQgYXBwZW5kU3RyaW5nVmlldyB3aXRoIHZhcmlhZGljIGFwcGVuZC4gUmVtb3Zl
ZCBtYW55IGZ1bmN0aW9ucworICAgICAgICB0aGF0IG5vIGxvbmdlciBuZWVkIHRvIGJlIG1lbWJl
ciBmdW5jdGlvbnMuIE1hZGUgYXBwZW5kQXR0cmlidXRlVmFsdWUKKyAgICAgICAgYSBzdGF0aWMg
bWVtYmVyIGZ1bmN0aW9uLiBNYWRlIGFwcGVuZE5hbWVzcGFjZSBwcml2YXRlLiBNYWRlCisgICAg
ICAgIG1fc2VyaWFsaXphdGlvblN5bnRheCBjb25zdC4KKworICAgICAgICAqIGVkaXRpbmcvbWFy
a3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFw
V2l0aFN0eWxlTm9kZSk6IFVzZSBhcHBlbmQKKyAgICAgICAgaW5zdGVhZCBvZiBhcHBlblN0cmlu
Zy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjppc0FsbEFTQ0lJ
IGNvbnN0KTogQWRkZWQuIEJlZm9yZQorICAgICAgICB0aGUgY29kZSB3b3VsZCBvbmx5IGNoZWNr
IHRoZSBTdHJpbmdCdWlsZGVyLCBidXQgd2UgYWxzbyBuZWVkIHRvCisgICAgICAgIGNoZWNrIG1f
cmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXAuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBB
Y2N1bXVsYXRvcjo6dGFrZVJlc3VsdHMpOiBVc2UgQ2hlY2tlZFVpbnQzMgorICAgICAgICBzaW5j
ZSBTdHJpbmdCdWlsZGVyJ3MgcmVzZXJ2ZUNhcGFjaXR5IGZ1bmN0aW9uIHRha2VzIHVuc2lnbmVk
LCBub3QKKyAgICAgICAgc2l6ZV90LiBUaGUgb2xkIGNvZGUsIHVzaW5nIHRvdGFsTGVuZ3RoLCB3
b3VsZCBqdXN0IHBhc3MgYSBzaXplX3QKKyAgICAgICAgYW5kIGxldCBpdCBnZXQgY2hvcHBlZCBv
ZmYsIHdoaWNoIGRpZG4ndCBkbyBhbnkgaGFybSwgYnV0IGl0IHNlZW1zCisgICAgICAgIHN0cmFu
Z2UgdG8gY29tcHV0ZSBhIDY0LWJpdCB2YWx1ZSBqdXN0IHRvIGNob3Agb2ZmIHRoZSBsb3dlciAz
MgorICAgICAgICBiaXRzLiBBbiBhbHRlcm5hdGl2ZSBpcyB0byBjb21wdXRlIHRoZSAzMi1iaXQg
dmFsdWUgYW5kIGp1c3QgbGV0CisgICAgICAgIGl0IG92ZXJmbG93LiBVc2UgYSBtb2Rlcm4gZm9y
IGxvb3AgYnkgZGVmaW5pbmcgYSBSZXZlcnNlVmlldworICAgICAgICB0ZW1wbGF0ZSByYXRoZXIg
dGhhbiB3cml0aW5nIGEgY29uZnVzaW5nIGJhY2t3YXJkcyBsb29wLiBVc2UgdGhlCisgICAgICAg
IG5ldyB0YWtlTWFya3VwIGluc3RlYWQgb2YgY29uY2F0ZW5hdGVNYXJrdXAuCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dCk6IFR3ZWFrIGNvZGlu
ZworICAgICAgICBzdHlsZSBhIGxpdHRsZSBiaXQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRUYWcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlVG9QcmVzZXJ2ZU1TT0xpc3Qp
OgorICAgICAgICBVc2UgdmFyaWFkaWMgYXBwZW5kIHRvIGN1dCBkb3duIG9uIG1lbW9yeSBhbGxv
Y2F0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OnByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUp
OiBUd2VhayBjb2Rpbmcgc3R5bGUgYSBiaXQuCisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVQ
cmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZUludGVybmFsKTogVXNlCisgICAgICAgIGFwcGVuZCBp
bnN0ZWFkIG9mIGFwcGVuZFN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFByZXNlcnZl
TVNPTGlzdHMpOiBUYWtlIGEgU3RyaW5nVmlldyBpbnN0ZWFkIG9mIGEKKyAgICAgICAgU3RyaW5n
IHRvIGVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBtZW1vcnkgYWxsb2NhdGlvbiBpbiBjYWxsIHRvIHN1
YnN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OnNhbml0aXplZE1hcmt1cEZvckZyYWdtZW50SW5E
b2N1bWVudCk6IFVzZSBtYWtlU3RyaW5nCisgICAgICAgIGluc3RlYWQgb2YgU3RyaW5nQnVpbGRl
ciB0byBjdXQgZG93biBvbiBtZW1vcnkgYWxsb2NhdGlvbi4KKworICAgICAgICAqIGh0bWwvSFRN
TEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVz
ZXREZWZhdWx0QnV0dG9uKTogRml4IHNwZWxsaW5nIGVycm9yCisgICAgICAgIGluIHRoZSB3b3Jk
ICJleHBsaWNpdGx5Ii4KKyAgICAgICAgKiBtYXRobWwvTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6c2VhcmNo
KTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OlNl
cmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcik6CisgICAgICAgIFVzZSB2YXJpYWRpYyBhcHBlbmQg
aW5zdGVhZCBvZiBhcHBlbmRTdHJpbmcgdG8gY3V0IGRvd24gb24KKyAgICAgICAgbWVtb3J5IGFs
bG9jYXRpb25zLgorCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50KTogRml4IHNwZWxs
aW5nIGVycm9yIGluIHRoZSB3b3JkCisgICAgICAgICJleHBsaWNpdGx5Ii4KKwogMjAyMC0wNS0w
OSAgSmFjayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBOdWxscHRy
IGNyYXNoIGluIExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZVByb3BlcnR5TGlzdFJlcHJlc2VudGF0
aW9uIHdoZW4gY29weWluZyBzZWxlY3RlZCByYW5nZSB0aGF0IGNvbnRhaW5zIHN1cnJvZ2F0ZSBj
aGFyYWN0ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZp
eFBhcnRpYWxSZWdpc3RlclN0YWxscy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaAppbmRleCAwMDkzMjc5NDhiOWFmMWZiMjZiMDZm
NjI4NTZiMzlkMWNjNGJmZTE0Li5hNTVkZTAzYTA4NmU5MmMzZGNkNzA4MDI3NTY1ZWZmNGE3Nzhj
MzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFBhcnRp
YWxSZWdpc3RlclN0YWxscy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Rml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmgKQEAgLTM1LDcgKzM1LDcgQEAgY2xhc3MgQ29kZTsK
IC8vCiAvLyBTb21lIGluc3RydWN0aW9ucyB1cGRhdGUgb25seSBwYXJ0IG9mIGEgcmVnaXN0ZXIs
IHRoZXkgY2FuIG9ubHkgYmUgc2NoZWR1bGVkIGFmdGVyCiAvLyB0aGUgcHJldmlvdXMgZGVmaW5p
dGlvbiBpcyBjb21wdXRlZC4gVGhpcyBwcm9ibGVtIGNhbiBiZSBhdm9pZGVkIGJ5IHRoZSBjb21w
aWxlcgotLy8gYnkgZXhwbGljaXRlbHkgcmVzZXR0aW5nIHRoZSBlbnRpcmUgcmVnaXN0ZXIgYmVm
b3JlIGV4ZWN1dGluZyB0aGUgaW5zdHJ1Y3Rpb24gd2l0aAorLy8gYnkgZXhwbGljaXRseSByZXNl
dHRpbmcgdGhlIGVudGlyZSByZWdpc3RlciBiZWZvcmUgZXhlY3V0aW5nIHRoZSBpbnN0cnVjdGlv
biB3aXRoCiAvLyBwYXJ0aWFsIHVwZGF0ZS4KIC8vCiAvLyBTZWUgIlBhcnRpYWwgWE1NIFJlZ2lz
dGVyIFN0YWxscyIgYW5kICJEZXBlbmRlbmN5IEJyZWFraW5nIElkaW9tcyIgaW4gdGhlIG1hbnVh
bC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCmluZGV4IDJhNDIwNjAxMThhZjdm
MjQ1ZWM5MmRiZmJmYTk5NjYwNGY4MDdmM2YuLmE5NzNmM2JlNjJmMWRkN2U3NjE5OTI5YTA3MzFh
MWM2Mzg4ZmFlNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcApAQCAtNDU2
LDQgKzQ1NiwxNCBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OnNocmlua1RvRml0KCkKICAgICB9CiB9
CiAKK2Jvb2wgU3RyaW5nQnVpbGRlcjo6aXNBbGxBU0NJSSgpIGNvbnN0Cit7CisgICAgYXV0byBs
ZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgaWYgKG1faXM4Qml0KQorICAgICAgICByZXR1cm4gY2hhcmFjdGVyc0FyZUFs
bEFTQ0lJKGNoYXJhY3RlcnM4KCksIGxlbmd0aCk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNBcmVB
bGxBU0NJSShjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RG
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaCBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCmluZGV4IDc4MmM5Y2VjNWZlZGQyZmYwMzJi
YTAxZDVmZWYxZDQ5ODAwNjY2M2IuLjU5Njg0NjgxMzc3ZjNhMTMyOGUxMmZkZDlhMmUxNjRkOWE1
MDA3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCkBAIC0zMjUsNiArMzI1LDcg
QEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJu
IG1faXM4Qml0OyB9CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNBbGxBU0NJSSgpIGNv
bnN0OwogCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L01hcmt1cEFjY3VtdWxhdG9yLmNwcAppbmRleCBiNGVkYTM4NDgzN2NhNmM5ZDBhYjI3ZGQ4OWQ4
NDc1MDg0NWYwYmExLi5lZWUxNDIzYmM5YTY0OTg5NzYwN2U5YmViN2VjZDVjYTk0ZmZmOGEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcApAQCAtMTYw
LDExICsxNjAsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNp
bmdFbnRpdGllc0ludGVybmFsKFN0cmluZ0J1aWxkZXImIHJlc3UKIAogdm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKFN0cmluZ0J1aWxkZXIm
IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoLCBFbnRpdHlNYXNrIGVudGl0eU1hc2spCiB7Ci0gICAgaWYgKCEob2Zmc2V0ICsgbGVu
Z3RoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgQVNTRVJUKG9mZnNldCArIGxlbmd0aCA8PSBz
b3VyY2UubGVuZ3RoKCkpOwogCisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGlmIChzb3VyY2UuaXM4Qml0KCkpCiAgICAgICAgIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNp
bmdFbnRpdGllc0ludGVybmFsPExDaGFyPihyZXN1bHQsIHNvdXJjZSwgb2Zmc2V0LCBsZW5ndGgs
IGVudGl0eU1hc2spOwogICAgIGVsc2UKQEAgLTIzNSwxNiArMjM1LDYgQEAgU3RyaW5nIE1hcmt1
cEFjY3VtdWxhdG9yOjpyZXNvbHZlVVJMSWZOZWVkZWQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwg
Y29uc3QgU3RyaW4KICAgICByZXR1cm4gdXJsU3RyaW5nOwogfQogCi12b2lkIE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgbV9tYXJr
dXAuYXBwZW5kKHN0cmluZyk7Ci19Ci0KLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0
cmluZ1ZpZXcoU3RyaW5nVmlldyB2aWV3KQotewotICAgIG1fbWFya3VwLmFwcGVuZCh2aWV3KTsK
LX0KLQogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6c3RhcnRBcHBlbmRpbmdOb2RlKGNvbnN0IE5v
ZGUmIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgaWYgKGlzPEVsZW1lbnQ+
KG5vZGUpKQpAQCAtMjYwLDIzICsyNTAsMTIgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kRW5kVGFnKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRWxlbWVudCYgZWxlbWUKIHsK
ICAgICBpZiAoc2hvdWxkU2VsZkNsb3NlKGVsZW1lbnQsIG1fc2VyaWFsaXphdGlvblN5bnRheCkg
fHwgKCFlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSAmJiBlbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyhl
bGVtZW50KSkpCiAgICAgICAgIHJldHVybjsKLSAgICByZXN1bHQuYXBwZW5kKCc8Jyk7Ci0gICAg
cmVzdWx0LmFwcGVuZCgnLycpOwotICAgIHJlc3VsdC5hcHBlbmQoZWxlbWVudC5ub2RlTmFtZVBy
ZXNlcnZpbmdDYXNlKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoJz4nKTsKLX0KLQotc2l6ZV90IE1h
cmt1cEFjY3VtdWxhdG9yOjp0b3RhbExlbmd0aChjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3RyaW5n
cykKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0gMDsKLSAgICBmb3IgKGF1dG8mIHN0cmluZyA6IHN0
cmluZ3MpCi0gICAgICAgIGxlbmd0aCArPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgcmV0dXJuIGxl
bmd0aDsKKyAgICByZXN1bHQuYXBwZW5kKCI8LyIsIGVsZW1lbnQubm9kZU5hbWVQcmVzZXJ2aW5n
Q2FzZSgpLCAnPicpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjpjb25jYXRlbmF0ZU1h
cmt1cChTdHJpbmdCdWlsZGVyJiByZXN1bHQpCitTdHJpbmdCdWlsZGVyIE1hcmt1cEFjY3VtdWxh
dG9yOjp0YWtlTWFya3VwKCkKIHsKLSAgICByZXN1bHQuYXBwZW5kKG1fbWFya3VwKTsKKyAgICBy
ZXR1cm4gc3RkOjpleGNoYW5nZShtX21hcmt1cCwgeyB9KTsKIH0KIAogdm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVmFsdWUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25z
dCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBpc1NlcmlhbGl6aW5nSFRNTCkKQEAgLTI5Myw3ICsy
NzIsNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVW
YWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbgogewogICAgIEFTU0VSVChlbGVtZW50Lmlz
VVJMQXR0cmlidXRlKGF0dHJpYnV0ZSkpOwogICAgIFN0cmluZyByZXNvbHZlZFVSTFN0cmluZyA9
IHJlc29sdmVVUkxJZk5lZWRlZChlbGVtZW50LCBhdHRyaWJ1dGUudmFsdWUoKSk7Ci0gICAgVUNo
YXIgcXVvdGVDaGFyID0gJyInOworICAgIGNoYXIgcXVvdGVDaGFyID0gJyInOwogICAgIGlmIChX
VEY6OnByb3RvY29sSXNKYXZhU2NyaXB0KHJlc29sdmVkVVJMU3RyaW5nKSkgewogICAgICAgICAv
LyBtaW5pbWFsIGVzY2FwaW5nIGZvciBqYXZhc2NyaXB0IHVybHMKICAgICAgICAgaWYgKHJlc29s
dmVkVVJMU3RyaW5nLmNvbnRhaW5zKCciJykpIHsKQEAgLTMwMiw5ICsyODEsNyBAQCB2b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWls
ZGVyJiByZXN1bHQsIGNvbgogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHF1b3Rl
Q2hhciA9ICdcJyc7CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChxdW90ZUNoYXIp
OwotICAgICAgICByZXN1bHQuYXBwZW5kKHJlc29sdmVkVVJMU3RyaW5nKTsKLSAgICAgICAgcmVz
dWx0LmFwcGVuZChxdW90ZUNoYXIpOworICAgICAgICByZXN1bHQuYXBwZW5kKHF1b3RlQ2hhciwg
cmVzb2x2ZWRVUkxTdHJpbmcsIHF1b3RlQ2hhcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTMxNCwxOCArMjkxLDE2IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3Rl
ZFVSTEF0dHJpYnV0ZVZhbHVlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uCiAgICAgcmVzdWx0
LmFwcGVuZChxdW90ZUNoYXIpOwogfQogCi1ib29sIE1hcmt1cEFjY3VtdWxhdG9yOjpzaG91bGRB
ZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCitzdGF0aWMgYm9vbCBz
aG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAg
Ly8gRG9uJ3QgYWRkIG5hbWVzcGFjZSBhdHRyaWJ1dGUgaWYgaXQgaXMgYWxyZWFkeSBkZWZpbmVk
IGZvciB0aGlzIGVsZW0uCi0gICAgY29uc3QgQXRvbVN0cmluZyYgcHJlZml4ID0gZWxlbWVudC5w
cmVmaXgoKTsKKyAgICBhdXRvJiBwcmVmaXggPSBlbGVtZW50LnByZWZpeCgpOwogICAgIGlmIChw
cmVmaXguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gIWVsZW1lbnQuaGFzQXR0cmlidXRlKHht
bG5zQXRvbSgpKTsKLQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHhtbG5zV2l0
aENvbG9uKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJ4bWxuczoiKSk7Ci0gICAgcmV0dXJuICFl
bGVtZW50Lmhhc0F0dHJpYnV0ZSh4bWxuc1dpdGhDb2xvbi5nZXQoKSArIHByZWZpeCk7CisgICAg
cmV0dXJuICFlbGVtZW50Lmhhc0F0dHJpYnV0ZSgieG1sbnM6IiArIHByZWZpeCk7CiB9CiAKLWJv
b2wgTWFya3VwQWNjdW11bGF0b3I6OnNob3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShjb25zdCBB
dHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFtZXNwYWNlcyYgbmFtZXNwYWNlcykKK3N0YXRpYyBib29s
IHNob3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwg
TmFtZXNwYWNlcyYgbmFtZXNwYWNlcykKIHsKICAgICBuYW1lc3BhY2VzLmNoZWNrQ29uc2lzdGVu
Y3koKTsKIApAQCAtMzU2LDI2ICszMzEsMjUgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kTmFtZXNwYWNlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgQXRvbVN0cmluZyYKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIFVzZSBlbXB0eUF0b20oKXMncyBpbXBsKCkg
Zm9yIGJvdGggbnVsbCBhbmQgZW1wdHkgc3RyaW5ncyBzaW5jZSB0aGUgSGFzaE1hcCBjYW4ndCBo
YW5kbGUgMCBhcyBhIGtleQotICAgIEF0b21TdHJpbmdJbXBsKiBwcmUgPSBwcmVmaXguaXNFbXB0
eSgpID8gZW1wdHlBdG9tKCkuaW1wbCgpIDogcHJlZml4LmltcGwoKTsKLSAgICBBdG9tU3RyaW5n
SW1wbCogZm91bmROUyA9IG5hbWVzcGFjZXMuZ2V0KHByZSk7Ci0gICAgaWYgKGZvdW5kTlMgIT0g
bmFtZXNwYWNlVVJJLmltcGwoKSkgewotICAgICAgICBuYW1lc3BhY2VzLnNldChwcmUsIG5hbWVz
cGFjZVVSSS5pbXBsKCkpOwotICAgICAgICAvLyBBZGQgbmFtZXNwYWNlIHRvIHByZWZpeCBwYWly
IHNvIHdlIGNhbiBkbyBjb25zdHJhaW50IGNoZWNraW5nIGxhdGVyLgotICAgICAgICBpZiAoaW5Y
TUxGcmFnbWVudFNlcmlhbGl6YXRpb24oKSAmJiAhcHJlZml4LmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIG5hbWVzcGFjZXMuc2V0KG5hbWVzcGFjZVVSSS5pbXBsKCksIHByZSk7Ci0gICAgICAgIC8v
IE1ha2Ugc3VyZSB4bWwgcHJlZml4IGFuZCBuYW1lc3BhY2UgYXJlIGFsd2F5cyBrbm93biB0byB1
cGhvbGQgdGhlIGNvbnN0cmFpbnRzIGxpc3RlZCBhdCBodHRwOi8vd3d3LnczLm9yZy9UUi94bWwt
bmFtZXMxMS8jeG1sUmVzZXJ2ZWQuCi0gICAgICAgIGlmIChuYW1lc3BhY2VVUkkuaW1wbCgpID09
IFhNTE5hbWVzOjp4bWxOYW1lc3BhY2VVUkktPmltcGwoKSkKKyAgICAvLyBVc2UgZW1wdHlBdG9t
KClzJ3MgaW1wbCgpIGZvciBudWxsIHN0cmluZ3Mgc2luY2UgdGhpcyBIYXNoTWFwIGNhbid0IGhh
bmRsZSBudWxscHRyIGFzIGEga2V5CisgICAgYXV0byBhZGRSZXN1bHQgPSBuYW1lc3BhY2VzLmFk
ZChwcmVmaXguaXNOdWxsKCkgPyBlbXB0eUF0b20oKS5pbXBsKCkgOiBwcmVmaXguaW1wbCgpLCBu
YW1lc3BhY2VVUkkuaW1wbCgpKTsKKyAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Cisg
ICAgICAgIGlmIChhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID09IG5hbWVzcGFjZVVSSS5pbXBs
KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnLCB4bWxu
c0F0b20oKSk7Ci0gICAgICAgIGlmICghcHJlZml4LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJzonLCBwcmVmaXgpOwotCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoJz0nKTsK
LSAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwotICAgICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1
ZShyZXN1bHQsIG5hbWVzcGFjZVVSSSwgZmFsc2UpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCci
Jyk7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuYW1lc3BhY2VVUkkuaW1w
bCgpOwogICAgIH0KKworICAgIC8vIEFkZCBuYW1lc3BhY2UgdG8gcHJlZml4IHBhaXIgc28gd2Ug
Y2FuIGRvIGNvbnN0cmFpbnQgY2hlY2tpbmcgbGF0ZXIuCisgICAgaWYgKGluWE1MRnJhZ21lbnRT
ZXJpYWxpemF0aW9uKCkgJiYgIXByZWZpeC5pc0VtcHR5KCkpCisgICAgICAgIG5hbWVzcGFjZXMu
c2V0KG5hbWVzcGFjZVVSSS5pbXBsKCksIHByZWZpeC5pbXBsKCkpOworCisgICAgLy8gTWFrZSBz
dXJlIHhtbCBwcmVmaXggYW5kIG5hbWVzcGFjZSBhcmUgYWx3YXlzIGtub3duIHRvIHVwaG9sZCB0
aGUgY29uc3RyYWludHMgbGlzdGVkIGF0IGh0dHA6Ly93d3cudzMub3JnL1RSL3htbC1uYW1lczEx
LyN4bWxSZXNlcnZlZC4KKyAgICBpZiAobmFtZXNwYWNlVVJJID09IFhNTE5hbWVzOjp4bWxOYW1l
c3BhY2VVUkkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlc3VsdC5hcHBlbmQoJyAnLCB4bWxu
c0F0b20oKSwgcHJlZml4LmlzRW1wdHkoKSA/ICIiIDogIjoiLCBwcmVmaXgsICI9XCIiKTsKKyAg
ICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShyZXN1bHQsIG5hbWVzcGFjZVVSSSwgZmFsc2UpOworICAg
IHJlc3VsdC5hcHBlbmQoJyInKTsKIH0KIAogRW50aXR5TWFzayBNYXJrdXBBY2N1bXVsYXRvcjo6
ZW50aXR5TWFza0ZvclRleHQoY29uc3QgVGV4dCYgdGV4dCkgY29uc3QKQEAgLTM5NCw3NiArMzY4
LDQwIEBAIEVudGl0eU1hc2sgTWFya3VwQWNjdW11bGF0b3I6OmVudGl0eU1hc2tGb3JUZXh0KGNv
bnN0IFRleHQmIHRleHQpIGNvbnN0CiAKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRl
eHQoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBUZXh0JiB0ZXh0KQogewotICAgIGNvbnN0
IFN0cmluZyYgdGV4dERhdGEgPSB0ZXh0LmRhdGEoKTsKLSAgICBhcHBlbmRDaGFyYWN0ZXJzUmVw
bGFjaW5nRW50aXRpZXMocmVzdWx0LCB0ZXh0RGF0YSwgMCwgdGV4dERhdGEubGVuZ3RoKCksIGVu
dGl0eU1hc2tGb3JUZXh0KHRleHQpKTsKLX0KLQotc3RhdGljIHZvaWQgYXBwZW5kQ29tbWVudChT
dHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IFN0cmluZyYgY29tbWVudCkKLXsKLSAgICAvLyBG
SVhNRTogQ29tbWVudCBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAo
YW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYg
aXQgaW5jbHVkZXMgIi0tPiIuCi0gICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIjwhLS0iKTsKLSAg
ICByZXN1bHQuYXBwZW5kKGNvbW1lbnQpOwotICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCItLT4i
KTsKKyAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMocmVzdWx0LCB0ZXh0LmRh
dGEoKSwgMCwgdGV4dC5sZW5ndGgoKSwgZW50aXR5TWFza0ZvclRleHQodGV4dCkpOwogfQogCi12
b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRYTUxEZWNsYXJhdGlvbihTdHJpbmdCdWlsZGVy
JiByZXN1bHQsIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3N0YXRpYyB2b2lkIGFwcGVuZFhN
TERlY2xhcmF0aW9uKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9jdW1lbnQmIGRvY3Vt
ZW50KQogewogICAgIGlmICghZG9jdW1lbnQuaGFzWE1MRGVjbGFyYXRpb24oKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIjw/eG1sIHZlcnNpb249XCIiKTsK
LSAgICByZXN1bHQuYXBwZW5kKGRvY3VtZW50LnhtbFZlcnNpb24oKSk7Ci0gICAgY29uc3QgU3Ry
aW5nJiBlbmNvZGluZyA9IGRvY3VtZW50LnhtbEVuY29kaW5nKCk7Ci0gICAgaWYgKCFlbmNvZGlu
Zy5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIlwiIGVuY29kaW5n
PVwiIik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZW5jb2RpbmcpOwotICAgIH0KLSAgICBpZiAo
ZG9jdW1lbnQueG1sU3RhbmRhbG9uZVN0YXR1cygpICE9IERvY3VtZW50OjpTdGFuZGFsb25lU3Rh
dHVzOjpVbnNwZWNpZmllZCkgewotICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiXCIgc3Rh
bmRhbG9uZT1cIiIpOwotICAgICAgICBpZiAoZG9jdW1lbnQueG1sU3RhbmRhbG9uZSgpKQotICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoInllcyIpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgibm8iKTsKLSAgICB9CisgICAgYXV0byBlbmNv
ZGluZyA9IGRvY3VtZW50LnhtbEVuY29kaW5nKCk7CisgICAgYm9vbCBpc1N0YW5kYWxvbmVTcGVj
aWZpZWQgPSBkb2N1bWVudC54bWxTdGFuZGFsb25lU3RhdHVzKCkgIT0gRG9jdW1lbnQ6OlN0YW5k
YWxvbmVTdGF0dXM6OlVuc3BlY2lmaWVkOwogCi0gICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIlwi
Pz4iKTsKKyAgICByZXN1bHQuYXBwZW5kKCI8P3htbCB2ZXJzaW9uPVwiIiwKKyAgICAgICAgZG9j
dW1lbnQueG1sVmVyc2lvbigpLAorICAgICAgICBlbmNvZGluZy5pc0VtcHR5KCkgPyAiIiA6ICJc
IiBlbmNvZGluZz1cIiIsCisgICAgICAgIGVuY29kaW5nLAorICAgICAgICBpc1N0YW5kYWxvbmVT
cGVjaWZpZWQgPyAoZG9jdW1lbnQueG1sU3RhbmRhbG9uZSgpID8gIlwiIHN0YW5kYWxvbmU9XCJ5
ZXMiIDogIlwiIHN0YW5kYWxvbmU9XCJubyIpIDogIiIsCisgICAgICAgICJcIj8+Iik7CiB9CiAK
LXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZERvY3VtZW50VHlwZShTdHJpbmdCdWlsZGVy
JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSYgZG9jdW1lbnRUeXBlKQorc3RhdGljIHZvaWQg
YXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRU
eXBlJiBkb2N1bWVudFR5cGUpCiB7CiAgICAgaWYgKGRvY3VtZW50VHlwZS5uYW1lKCkuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiPCFET0NU
WVBFICIpOwotICAgIHJlc3VsdC5hcHBlbmQoZG9jdW1lbnRUeXBlLm5hbWUoKSk7Ci0gICAgaWYg
KCFkb2N1bWVudFR5cGUucHVibGljSWQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVzdWx0LmFw
cGVuZExpdGVyYWwoIiBQVUJMSUMgXCIiKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChkb2N1bWVu
dFR5cGUucHVibGljSWQoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoJyInKTsKLSAgICAgICAg
aWYgKCFkb2N1bWVudFR5cGUuc3lzdGVtSWQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJyAnKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyInKTsKLSAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoZG9jdW1lbnRUeXBlLnN5c3RlbUlkKCkpOwotICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnIicpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICghZG9jdW1l
bnRUeXBlLnN5c3RlbUlkKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmRMaXRl
cmFsKCIgU1lTVEVNIFwiIik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZG9jdW1lbnRUeXBlLnN5
c3RlbUlkKCkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCciJyk7Ci0gICAgfQotICAgIHJlc3Vs
dC5hcHBlbmQoJz4nKTsKLX0KLQotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUHJvY2Vz
c2luZ0luc3RydWN0aW9uKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKLXsKLSAgICAvLyBGSVhNRTogUEkgZGF0YSBpcyBub3Qg
ZXNjYXBlZCwgYnV0IFhNTFNlcmlhbGl6ZXIgKGFuZCBwb3NzaWJseSBvdGhlciBjYWxsZXJzKSB0
aGlzIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5jbHVkZXMgIj8+Ii4KLSAgICBy
ZXN1bHQuYXBwZW5kKCc8Jyk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnPycpOwotICAgIHJlc3VsdC5h
cHBlbmQodGFyZ2V0KTsKLSAgICByZXN1bHQuYXBwZW5kKCcgJyk7Ci0gICAgcmVzdWx0LmFwcGVu
ZChkYXRhKTsKLSAgICByZXN1bHQuYXBwZW5kKCc/Jyk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnPicp
OworICAgIHJlc3VsdC5hcHBlbmQoCisgICAgICAgICI8IURPQ1RZUEUgIiwKKyAgICAgICAgZG9j
dW1lbnRUeXBlLm5hbWUoKSwKKyAgICAgICAgZG9jdW1lbnRUeXBlLnB1YmxpY0lkKCkuaXNFbXB0
eSgpID8gIiIgOiAiIFBVQkxJQyBcIiIsCisgICAgICAgIGRvY3VtZW50VHlwZS5wdWJsaWNJZCgp
LAorICAgICAgICBkb2N1bWVudFR5cGUucHVibGljSWQoKS5pc0VtcHR5KCkgPyAiIiA6ICJcIiIs
CisgICAgICAgIGRvY3VtZW50VHlwZS5zeXN0ZW1JZCgpLmlzRW1wdHkoKSA/ICIiIDogKGRvY3Vt
ZW50VHlwZS5wdWJsaWNJZCgpLmlzRW1wdHkoKSA/ICIgU1lTVEVNIFwiIiA6ICIgXCIiKSwKKyAg
ICAgICAgZG9jdW1lbnRUeXBlLnN5c3RlbUlkKCksCisgICAgICAgIGRvY3VtZW50VHlwZS5zeXN0
ZW1JZCgpLmlzRW1wdHkoKSA/ICI+IiA6ICJcIj4iCisgICAgKTsKIH0KIAogdm9pZCBNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRUYWcoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBF
bGVtZW50JiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQpAQCAtNTk3LDE0ICs1MzUs
NiBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRyaWJ1dGUoU3RyaW5nQnVpbGRl
ciYgcmVzdWx0LCBjb25zdCBFbGVtZW50JiBlbAogICAgICAgICBhcHBlbmROYW1lc3BhY2UocmVz
dWx0LCBlZmZlY3RpdmVYTUxQcmVmaXhlZE5hbWUtPnByZWZpeCgpLCBlZmZlY3RpdmVYTUxQcmVm
aXhlZE5hbWUtPm5hbWVzcGFjZVVSSSgpLCAqbmFtZXNwYWNlcyk7CiB9CiAKLXZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZENEQVRBU2VjdGlvbihTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNv
bnN0IFN0cmluZyYgc2VjdGlvbikKLXsKLSAgICAvLyBGSVhNRTogQ0RBVEEgY29udGVudCBpcyBu
b3QgZXNjYXBlZCwgYnV0IFhNTFNlcmlhbGl6ZXIgKGFuZCBwb3NzaWJseSBvdGhlciBjYWxsZXJz
KSBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGl0IGluY2x1ZGVzICJdXT4iLgotICAgIHJl
c3VsdC5hcHBlbmRMaXRlcmFsKCI8IVtDREFUQVsiKTsKLSAgICByZXN1bHQuYXBwZW5kKHNlY3Rp
b24pOwotICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJdXT4iKTsKLX0KLQogdm9pZCBNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kTm9uRWxlbWVudE5vZGUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBj
b25zdCBOb2RlJiBub2RlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewogICAgIGlmIChuYW1l
c3BhY2VzKQpAQCAtNjE1LDcgKzU0NSw4IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZE5vbkVsZW1lbnROb2RlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSYKICAgICAg
ICAgYXBwZW5kVGV4dChyZXN1bHQsIGRvd25jYXN0PFRleHQ+KG5vZGUpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6Ci0gICAgICAgIGFwcGVuZENvbW1lbnQo
cmVzdWx0LCBkb3duY2FzdDxDb21tZW50Pihub2RlKS5kYXRhKCkpOworICAgICAgICAvLyBGSVhN
RTogQ29tbWVudCBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQgdGhhdCBtYXkgYmUgT0sgYmVj
YXVzZSBYTUxTZXJpYWxpemVyIChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVycykgc2hvdWxkIHJh
aXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBpbmNsdWRlcyAiLS0+Ii4KKyAgICAgICAgcmVzdWx0LmFw
cGVuZCgiPCEtLSIsIGRvd25jYXN0PENvbW1lbnQ+KG5vZGUpLmRhdGEoKSwgIi0tPiIpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05PREU6CiAgICAgICAgIGFwcGVu
ZFhNTERlY2xhcmF0aW9uKHJlc3VsdCwgZG93bmNhc3Q8RG9jdW1lbnQ+KG5vZGUpKTsKQEAgLTYy
NiwxMyArNTU3LDE1IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vbkVsZW1lbnRO
b2RlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSYKICAgICAgICAgYXBwZW5kRG9j
dW1lbnRUeXBlKHJlc3VsdCwgZG93bmNhc3Q8RG9jdW1lbnRUeXBlPihub2RlKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgotICAg
ICAgICBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocmVzdWx0LCBkb3duY2FzdDxQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24+KG5vZGUpLnRhcmdldCgpLCBkb3duY2FzdDxQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24+KG5vZGUpLmRhdGEoKSk7CisgICAgICAgIC8vIEZJWE1FOiBQSSBkYXRhIGlzIG5vdCBl
c2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMpIHRo
aXMgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBpbmNsdWRlcyAiPz4iLgorICAgICAg
ICByZXN1bHQuYXBwZW5kKCI8PyIsIGRvd25jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4obm9k
ZSkudGFyZ2V0KCksICcgJywgZG93bmNhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uPihub2RlKS5k
YXRhKCksICI/PiIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OkVMRU1FTlRfTk9E
RToKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgotICAgICAgICBhcHBlbmRDREFUQVNlY3Rpb24o
cmVzdWx0LCBkb3duY2FzdDxDREFUQVNlY3Rpb24+KG5vZGUpLmRhdGEoKSk7CisgICAgICAgIC8v
IEZJWE1FOiBDREFUQSBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAo
YW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYg
aXQgaW5jbHVkZXMgIl1dPiIuCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIjwhW0NEQVRBWyIsIGRv
d25jYXN0PENEQVRBU2VjdGlvbj4obm9kZSkuZGF0YSgpLCAiXV0+Iik7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVs
YXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCmluZGV4
IDY3MzI1OWRlYTY0NzhmYTkxYTI2MjU2ZTYzMzM5ODJhN2I4YTIwNGEuLjg0YWRmNTg1MThlY2Q2
YjVmN2M1ZTdjOWNlOTFhZWI0MzdmZTU0ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01h
cmt1cEFjY3VtdWxhdG9yLmgKQEAgLTY3LDIxICs2NywxNSBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKFN0cmluZ0J1aWxkZXImLCBj
b25zdCBTdHJpbmcmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEVudGl0eU1hc2spOwogCiBwcm90ZWN0
ZWQ6Ci0gICAgc3RhdGljIHNpemVfdCB0b3RhbExlbmd0aChjb25zdCBWZWN0b3I8U3RyaW5nPiYp
OwotICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX21hcmt1cC5sZW5ndGgoKTsg
fQotICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFya3VwLnRvU3RyaW5n
UHJlc2VydmVDYXBhY2l0eSgpLmlzQWxsQVNDSUkoKTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWFya3VwLmxlbmd0aCgpOyB9CisgICAgYm9vbCBpc0FsbEFTQ0lJ
KCkgY29uc3QgeyByZXR1cm4gbV9tYXJrdXAuaXNBbGxBU0NJSSgpOyB9CiAKLSAgICB2b2lkIGNv
bmNhdGVuYXRlTWFya3VwKFN0cmluZ0J1aWxkZXImKTsKKyAgICBTdHJpbmdCdWlsZGVyIHRha2VN
YXJrdXAoKTsKIAotICAgIHZvaWQgYXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotICAgIHZv
aWQgYXBwZW5kU3RyaW5nVmlldyhTdHJpbmdWaWV3KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAu
Li5TdHJpbmdUeXBlcz4gdm9pZCBhcHBlbmQoU3RyaW5nVHlwZXMuLi4gc3RyaW5ncykgeyBtX21h
cmt1cC5hcHBlbmQoc3RyaW5ncy4uLik7IH0KIAogICAgIHZvaWQgc3RhcnRBcHBlbmRpbmdOb2Rl
KGNvbnN0IE5vZGUmLCBOYW1lc3BhY2VzKiA9IG51bGxwdHIpOwotICAgIHZvaWQgZW5kQXBwZW5k
aW5nTm9kZShjb25zdCBOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+
KG5vZGUpKQotICAgICAgICAgICAgYXBwZW5kRW5kVGFnKG1fbWFya3VwLCBkb3duY2FzdDxFbGVt
ZW50Pihub2RlKSk7Ci0gICAgfQorICAgIHZvaWQgZW5kQXBwZW5kaW5nTm9kZShjb25zdCBOb2Rl
Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kU3RhcnRUYWcoU3RyaW5nQnVpbGRlciYsIGNv
bnN0IEVsZW1lbnQmLCBOYW1lc3BhY2VzKik7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVuZFRh
ZyhTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYpOwpAQCAtOTIsMjMgKzg2LDE2IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFN0cmluZ0J1aWxkZXImLCBjb25zdCBF
bGVtZW50Jik7CiAKICAgICB2b2lkIGFwcGVuZE5vbkVsZW1lbnROb2RlKFN0cmluZ0J1aWxkZXIm
LCBjb25zdCBOb2RlJiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kRW5kTWFya3VwKFN0
cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50Jik7CiAKLSAgICB2b2lkIGFwcGVuZEF0dHJpYnV0
ZVZhbHVlKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmLCBib29sIGlzU2VyaWFsaXppbmdI
VE1MKTsKLSAgICB2b2lkIGFwcGVuZE5hbWVzcGFjZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgQXRv
bVN0cmluZyYgcHJlZml4LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFj
ZXMmLCBib29sIGFsbG93RW1wdHlEZWZhdWx0TlMgPSBmYWxzZSk7Ci0gICAgdm9pZCBhcHBlbmRY
TUxEZWNsYXJhdGlvbihTdHJpbmdCdWlsZGVyJiwgY29uc3QgRG9jdW1lbnQmKTsKLSAgICB2b2lk
IGFwcGVuZERvY3VtZW50VHlwZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgRG9jdW1lbnRUeXBlJik7
Ci0gICAgdm9pZCBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oU3RyaW5nQnVpbGRlciYsIGNv
bnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpOworICAgIHN0YXRpYyB2b2lk
IGFwcGVuZEF0dHJpYnV0ZVZhbHVlKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmLCBib29s
IGlzU2VyaWFsaXppbmdIVE1MKTsKICAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZShTdHJpbmdCdWls
ZGVyJiwgY29uc3QgRWxlbWVudCYsIGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsKLSAg
ICB2b2lkIGFwcGVuZENEQVRBU2VjdGlvbihTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5nJik7
CiAKLSAgICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQoY29uc3QgRWxlbWVudCYpOwot
ICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYsIE5h
bWVzcGFjZXMmKTsKICAgICBFbnRpdHlNYXNrIGVudGl0eU1hc2tGb3JUZXh0KGNvbnN0IFRleHQm
KSBjb25zdDsKIAogICAgIFZlY3RvcjxOb2RlKj4qIGNvbnN0IG1fbm9kZXM7CiAKIHByaXZhdGU6
CisgICAgdm9pZCBhcHBlbmROYW1lc3BhY2UoU3RyaW5nQnVpbGRlciYsIGNvbnN0IEF0b21TdHJp
bmcmIHByZWZpeCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZXNwYWNlVVJJLCBOYW1lc3BhY2VzJiwg
Ym9vbCBhbGxvd0VtcHR5RGVmYXVsdE5TID0gZmFsc2UpOwogICAgIFN0cmluZyByZXNvbHZlVVJM
SWZOZWVkZWQoY29uc3QgRWxlbWVudCYsIGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZvaWQg
YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoU3RyaW5nQnVpbGRlciYsIGNvbnN0IEVsZW1l
bnQmLCBjb25zdCBBdHRyaWJ1dGUmKTsKICAgICB2b2lkIHNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVz
cGFjZXMoTm9kZSYgdGFyZ2V0Tm9kZSwgU2VyaWFsaXplZE5vZGVzLCBjb25zdCBOYW1lc3BhY2Vz
KiwgVmVjdG9yPFF1YWxpZmllZE5hbWU+KiB0YWdOYW1lc1RvU2tpcCk7CkBAIC0xMTgsOCArMTA1
LDE0IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmdCdWlsZGVyIG1fbWFya3VwOwogICAgIGNvbnN0
IFJlc29sdmVVUkxzIG1fcmVzb2x2ZVVSTHM7Ci0gICAgU2VyaWFsaXphdGlvblN5bnRheCBtX3Nl
cmlhbGl6YXRpb25TeW50YXg7CisgICAgY29uc3QgU2VyaWFsaXphdGlvblN5bnRheCBtX3Nlcmlh
bGl6YXRpb25TeW50YXg7CiAgICAgdW5zaWduZWQgbV9wcmVmaXhMZXZlbCB7IDAgfTsKIH07CiAK
K2lubGluZSB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjplbmRBcHBlbmRpbmdOb2RlKGNvbnN0IE5v
ZGUmIG5vZGUpCit7CisgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBhcHBlbmRF
bmRUYWcobV9tYXJrdXAsIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCmluZGV4IGFkYzg4ZjZkMTk3
NTUzMmZhYTE1NDYxNzMxYTBiZTk4YmVhMDE0MjcuLjkwZWU2YzM3MzI5YWE3ZGMyNDcwNWZlNDZi
ODg5NjdmODQ5NTcyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKQEAgLTg2LDcgKzg2
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
Ci1zdGF0aWMgYm9vbCBwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKFN0eWxlUHJvcGVydGll
cyosIENTU1Byb3BlcnR5SUQpOworc3RhdGljIGJvb2wgcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRv
Tm9uZShjb25zdCBTdHlsZVByb3BlcnRpZXMqLCBDU1NQcm9wZXJ0eUlEKTsKIAogY2xhc3MgQXR0
cmlidXRlQ2hhbmdlIHsKIHB1YmxpYzoKQEAgLTIzMSw3ICsyMzEsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBuZWVkUmVsYXRpdmVTdHlsZVdyYXBwZXIoKSBjb25zdCB7IHJldHVybiBtX25lZWRSZWxh
dGl2ZVN0eWxlV3JhcHBlcjsgfQogICAgIGJvb2wgbmVlZENsZWFyaW5nRGl2KCkgY29uc3QgeyBy
ZXR1cm4gbV9uZWVkQ2xlYXJpbmdEaXY7IH0KIAotICAgIHVzaW5nIE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRTdHJpbmc7CisgICAgdXNpbmcgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZDsKIAog
ICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUoTm9kZSYgbm9kZSkKICAgICB7CkBAIC0yNDIs
MTMgKzI0MiwxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHByZXBlbmRNZXRhQ2hhcnNldFVURjhU
YWdJZk5vbkFTQ0lJQ2hhcmFjdGVyc0FyZVByZXNlbnQoKQogICAgIHsKLSAgICAgICAgaWYgKGlz
QWxsQVNDSUkoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX3JldmVyc2VkUHJl
Y2VkaW5nTWFya3VwLmFwcGVuZCgiPG1ldGEgY2hhcnNldD1cIlVURi04XCI+Il9zKTsKKyAgICAg
ICAgaWYgKCFpc0FsbEFTQ0lJKCkpCisgICAgICAgICAgICBtX3JldmVyc2VkUHJlY2VkaW5nTWFy
a3VwLmFwcGVuZCgiPG1ldGEgY2hhcnNldD1cIlVURi04XCI+Il9zKTsKICAgICB9CiAKIHByaXZh
dGU6CisgICAgYm9vbCBpc0FsbEFTQ0lJKCkgY29uc3Q7CiAgICAgdm9pZCBhcHBlbmRTdHlsZU5v
ZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXImLCBTdHlsZVByb3BlcnRpZXMqLCBEb2N1bWVudCYsIGJv
b2wgaXNCbG9jayA9IGZhbHNlKTsKICAgICBjb25zdCBTdHJpbmcmIHN0eWxlTm9kZUNsb3NlVGFn
KGJvb2wgaXNCbG9jayA9IGZhbHNlKTsKIApAQCAtMzY0LDcgKzM2Myw3IEBAIHZvaWQgU3R5bGVk
TWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydGllcyogc3R5
bGUsIERvY3VtZW50CiAgICAgU3RyaW5nQnVpbGRlciBvcGVuVGFnOwogICAgIGFwcGVuZFN0eWxl
Tm9kZU9wZW5UYWcob3BlblRhZywgc3R5bGUsIGRvY3VtZW50LCBpc0Jsb2NrKTsKICAgICBtX3Jl
dmVyc2VkUHJlY2VkaW5nTWFya3VwLmFwcGVuZChvcGVuVGFnLnRvU3RyaW5nKCkpOwotICAgIGFw
cGVuZFN0cmluZyhzdHlsZU5vZGVDbG9zZVRhZyhpc0Jsb2NrKSk7CisgICAgYXBwZW5kKHN0eWxl
Tm9kZUNsb3NlVGFnKGlzQmxvY2spKTsKIH0KIAogdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kU3R5bGVOb2RlT3BlblRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIFN0eWxlUHJvcGVy
dGllcyogc3R5bGUsIERvY3VtZW50JiBkb2N1bWVudCwgYm9vbCBpc0Jsb2NrKQpAQCAtMzg2LDE3
ICszODUsMzggQEAgY29uc3QgU3RyaW5nJiBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6c3R5bGVO
b2RlQ2xvc2VUYWcoYm9vbCBpc0Jsb2NrKQogICAgIHJldHVybiBpc0Jsb2NrID8gZGl2Q2xvc2Ug
OiBzdHlsZVNwYW5DbG9zZTsKIH0KIAotU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0
YWtlUmVzdWx0cygpCitib29sIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjppc0FsbEFTQ0lJKCkg
Y29uc3QKIHsKLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUNh
cGFjaXR5KHRvdGFsTGVuZ3RoKG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXApICsgbGVuZ3RoKCkp
OwotCi0gICAgZm9yIChzaXplX3QgaSA9IG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXAuc2l6ZSgp
OyBpID4gMDsgLS1pKQotICAgICAgICByZXN1bHQuYXBwZW5kKG1fcmV2ZXJzZWRQcmVjZWRpbmdN
YXJrdXBbaSAtIDFdKTsKKyAgICBmb3IgKGF1dG8mIHByZWNlZGluZyA6IG1fcmV2ZXJzZWRQcmVj
ZWRpbmdNYXJrdXApIHsKKyAgICAgICAgaWYgKCFwcmVjZWRpbmcuaXNBbGxBU0NJSSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gTWFya3VwQWNjdW11bGF0
b3I6OmlzQWxsQVNDSUkoKTsKK30KIAotICAgIGNvbmNhdGVuYXRlTWFya3VwKHJlc3VsdCk7Cisv
LyBTdG9wZ2FwIHVudGlsIEMrKzIwIGFkZHMgc3RkOjpyYW5nZXM6OnJldmVyc2Vfdmlldy4KK3Rl
bXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb24+IHN0cnVjdCBSZXZlcnNlVmlldyB7CisgICAgQ29s
bGVjdGlvbiYgY29sbGVjdGlvbjsKKyAgICBkZWNsdHlwZShjb2xsZWN0aW9uLnJiZWdpbigpKSBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGNvbGxlY3Rpb24ucmJlZ2luKCk7IH0KKyAgICBkZWNsdHlw
ZShjb2xsZWN0aW9uLnJlbmQoKSkgZW5kKCkgY29uc3QgeyByZXR1cm4gY29sbGVjdGlvbi5yZW5k
KCk7IH0KKyAgICBkZWNsdHlwZShjb2xsZWN0aW9uLnNpemUoKSkgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIGNvbGxlY3Rpb24uc2l6ZSgpOyB9CisgICAgUmV2ZXJzZVZpZXcoQ29sbGVjdGlvbiYgY29s
bGVjdGlvbikKKyAgICAgICAgOiBjb2xsZWN0aW9uKGNvbGxlY3Rpb24pCisgICAgeworICAgIH0K
K307CiAKLSAgICAvLyBXZSByZW1vdmUgJ1wwJyBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSBhcmUg
bm90IHZpc2libHkgcmVuZGVyZWQgdG8gdGhlIHVzZXIuCitTdHJpbmcgU3R5bGVkTWFya3VwQWNj
dW11bGF0b3I6OnRha2VSZXN1bHRzKCkKK3sKKyAgICBDaGVja2VkVWludDMyIGxlbmd0aCA9IHRo
aXMtPmxlbmd0aCgpOworICAgIGZvciAoYXV0byYgc3RyaW5nIDogbV9yZXZlcnNlZFByZWNlZGlu
Z01hcmt1cCkKKyAgICAgICAgbGVuZ3RoICs9IHN0cmluZy5sZW5ndGgoKTsKKyAgICBTdHJpbmdC
dWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aC51bnNhZmVH
ZXQoKSk7CisgICAgZm9yIChhdXRvJiBzdHJpbmcgOiBSZXZlcnNlVmlldyB7IG1fcmV2ZXJzZWRQ
cmVjZWRpbmdNYXJrdXAgfSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChzdHJpbmcpOworICAgIHJl
c3VsdC5hcHBlbmQodGFrZU1hcmt1cCgpKTsKKyAgICAvLyBSZW1vdmUgJ1wwJyBjaGFyYWN0ZXJz
IGJlY2F1c2UgdGhleSBhcmUgbm90IHZpc2libHkgcmVuZGVyZWQgdG8gdGhlIHVzZXIuCiAgICAg
cmV0dXJuIHJlc3VsdC50b1N0cmluZygpLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXDAnLCAiIik7CiB9
CiAKQEAgLTQwNSw3ICs0MjUsNyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgVGV4dCYgdGV4dCkKICAgICBjb25zdCBi
b29sIHBhcmVudElzVGV4dGFyZWEgPSBpczxIVE1MVGV4dEFyZWFFbGVtZW50Pih0ZXh0LnBhcmVu
dEVsZW1lbnQoKSk7CiAgICAgY29uc3QgYm9vbCB3cmFwcGluZ1NwYW4gPSBzaG91bGRBcHBseVdy
YXBwaW5nU3R5bGUodGV4dCkgJiYgIXBhcmVudElzVGV4dGFyZWE7CiAgICAgaWYgKHdyYXBwaW5n
U3BhbikgewotICAgICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB3cmFwcGluZ1N0eWxlID0gbV93
cmFwcGluZ1N0eWxlLT5jb3B5KCk7CisgICAgICAgIGF1dG8gd3JhcHBpbmdTdHlsZSA9IG1fd3Jh
cHBpbmdTdHlsZS0+Y29weSgpOwogICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzUz
NzE1MzY+IFN0eWxlIHJ1bGVzIHRoYXQgbWF0Y2ggcGFzdGVkIGNvbnRlbnQgY2FuIGNoYW5nZSBp
dCdzIGFwcGVhcmFuY2UKICAgICAgICAgLy8gTWFrZSBzdXJlIHNwYW5zIGFyZSBpbmxpbmUgc3R5
bGUgaW4gcGFzdGUgc2lkZSBlLmcuIHNwYW4geyBkaXNwbGF5OiBibG9jayB9LgogICAgICAgICB3
cmFwcGluZ1N0eWxlLT5mb3JjZUlubGluZSgpOwpAQCAtNTY0LDcgKzU4NCw3IEBAIHZvaWQgU3R5
bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKFN0cmluZ0J1aWxkZXImIG91dCwg
Y29uc3QgRWxlbWVudCYKICAgICAgICAgaWYgKCFuZXdJbmxpbmVTdHlsZS0+aXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICBvdXQuYXBwZW5kTGl0ZXJhbCgiIHN0eWxlPVwiIik7CiAgICAgICAgICAg
ICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvdXQsIG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5hc1Rl
eHQoKSwgZG9jdW1lbnRJc0hUTUwpOwotICAgICAgICAgICAgb3V0LmFwcGVuZCgnXCInKTsKKyAg
ICAgICAgICAgIG91dC5hcHBlbmQoJyInKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzIxLDkg
Kzc0MSw5IEBAIGJvb2wgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vZGVUb1ByZXNl
cnZlTVNPTGlzdChOb2RlJiBub2RlKQogICAgICAgICBpZiAobXNvTGlzdERlZmluaXRpb25zRW5k
ID09IG5vdEZvdW5kIHx8IHN0YXJ0ID49IG1zb0xpc3REZWZpbml0aW9uc0VuZCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBhcHBlbmRTdHJpbmcoIjxoZWFkPjxzdHlsZSBj
bGFzcz1cIiIgV2ViS2l0TVNPTGlzdFF1aXJrc1N0eWxlICJcIj5cbjwhLS1cbiIpOwotICAgICAg
ICBhcHBlbmRTdHJpbmdWaWV3KFN0cmluZ1ZpZXcodGV4dENoaWxkLmRhdGEoKSkuc3Vic3RyaW5n
KHN0YXJ0LCBtc29MaXN0RGVmaW5pdGlvbnNFbmQgLSBzdGFydCArIDMpKTsKLSAgICAgICAgYXBw
ZW5kU3RyaW5nKCJcbi0tPlxuPC9zdHlsZT48L2hlYWQ+Iik7CisgICAgICAgIGFwcGVuZCgiPGhl
YWQ+PHN0eWxlIGNsYXNzPVwiIiBXZWJLaXRNU09MaXN0UXVpcmtzU3R5bGUgIlwiPlxuPCEtLVxu
IiwKKyAgICAgICAgICAgIFN0cmluZ1ZpZXcodGV4dENoaWxkLmRhdGEoKSkuc3Vic3RyaW5nKHN0
YXJ0LCBtc29MaXN0RGVmaW5pdGlvbnNFbmQgLSBzdGFydCArIDMpLAorICAgICAgICAgICAgIlxu
LS0+XG48L3N0eWxlPjwvaGVhZD4iKTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBA
IC03NTQsMTYgKzc3NCwxMiBAQCBzdGF0aWMgaW5saW5lIE5vZGUqIGFuY2VzdG9yVG9SZXRhaW5T
dHJ1Y3R1cmVBbmRBcHBlYXJhbmNlKE5vZGUqIGNvbW1vbkFuY2VzdG9yKQogICAgIHJldHVybiBh
bmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZUZvckJsb2NrKGVuY2xvc2luZ0Js
b2NrKGNvbW1vbkFuY2VzdG9yKSk7CiB9CiAKLXN0YXRpYyBib29sIHByb3BlcnR5TWlzc2luZ09y
RXF1YWxUb05vbmUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlEKQorc3RhdGljIGJvb2wgcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShjb25zdCBTdHls
ZVByb3BlcnRpZXMqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAgaWYg
KCFzdHlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFs
dWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKLSAgICBpZiAoIXZh
bHVlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVl
PigqdmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmU7CisgICAg
YXV0byB2YWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOworICAg
IHJldHVybiBpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmU7CiB9CiAKIHN0YXRp
YyBib29sIG5lZWRJbnRlcmNoYW5nZU5ld2xpbmVBZnRlcihjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHYpCkBAIC04NjksNyArODg1LDcgQEAgc3RhdGljIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5n
VmlzdWFsQXBwZWFyYW5jZUludGVybmFsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwKICAgICAgICAg
aWYgKHZpc2libGVTdGFydCA9PSB2aXNpYmxlRW5kLnByZXZpb3VzKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gaW50ZXJjaGFuZ2VOZXdsaW5lU3RyaW5nOwogCi0gICAgICAgIGFjY3VtdWxhdG9yLmFw
cGVuZFN0cmluZyhpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcpOworICAgICAgICBhY2N1bXVsYXRv
ci5hcHBlbmQoaW50ZXJjaGFuZ2VOZXdsaW5lU3RyaW5nLmdldCgpKTsKICAgICAgICAgc3RhcnRB
ZGp1c3RlZEZvckludGVyY2hhbmdlTmV3bGluZSA9IHZpc2libGVTdGFydC5uZXh0KCkuZGVlcEVx
dWl2YWxlbnQoKTsKIAogICAgICAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhzdGFydEFkanVzdGVk
Rm9ySW50ZXJjaGFuZ2VOZXdsaW5lLCBlbmQpID49IDApCkBAIC05MTUsNyArOTMxLDcgQEAgc3Rh
dGljIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZUludGVybmFsKGNv
bnN0IFBvc2l0aW9uJiBzdGFydCwKICAgICAKICAgICBpZiAoYWNjdW11bGF0b3IubmVlZFJlbGF0
aXZlU3R5bGVXcmFwcGVyKCkgJiYgbmVlZHNQb3NpdGlvblN0eWxlQ29udmVyc2lvbikgewogICAg
ICAgICBpZiAoYWNjdW11bGF0b3IubmVlZENsZWFyaW5nRGl2KCkpCi0gICAgICAgICAgICBhY2N1
bXVsYXRvci5hcHBlbmRTdHJpbmcoIjxkaXYgc3R5bGU9XCJjbGVhcjogYm90aDtcIj48L2Rpdj4i
KTsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yLmFwcGVuZCgiPGRpdiBzdHlsZT1cImNsZWFyOiBi
b3RoO1wiPjwvZGl2PiIpOwogICAgICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBwb3NpdGlvblJl
bGF0aXZlU3R5bGUgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNBbmRJbmxpbmVEZWNsKCpib2R5KTsK
ICAgICAgICAgcG9zaXRpb25SZWxhdGl2ZVN0eWxlLT5zdHlsZSgpLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVBvc2l0aW9uLCBDU1NWYWx1ZVJlbGF0aXZlKTsKICAgICAgICAgYWNjdW11bGF0b3Iu
d3JhcFdpdGhTdHlsZU5vZGUocG9zaXRpb25SZWxhdGl2ZVN0eWxlLT5zdHlsZSgpLCBkb2N1bWVu
dCwgdHJ1ZSk7CkBAIC05MjMsMTMgKzkzOSwxNCBAQCBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6ZVBy
ZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlSW50ZXJuYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LAog
CiAgICAgLy8gRklYTUU6IFRoZSBpbnRlcmNoYW5nZSBuZXdsaW5lIHNob3VsZCBiZSBwbGFjZWQg
aW4gdGhlIGJsb2NrIHRoYXQgaXQncyBpbiwgbm90IGFmdGVyIGFsbCBvZiB0aGUgY29udGVudCwg
dW5jb25kaXRpb25hbGx5LgogICAgIGlmIChhbm5vdGF0ZSA9PSBBbm5vdGF0ZUZvckludGVyY2hh
bmdlOjpZZXMgJiYgbmVlZEludGVyY2hhbmdlTmV3bGluZUFmdGVyKHZpc2libGVFbmQucHJldmlv
dXMoKSkpCi0gICAgICAgIGFjY3VtdWxhdG9yLmFwcGVuZFN0cmluZyhpbnRlcmNoYW5nZU5ld2xp
bmVTdHJpbmcpOworICAgICAgICBhY2N1bXVsYXRvci5hcHBlbmQoaW50ZXJjaGFuZ2VOZXdsaW5l
U3RyaW5nLmdldCgpKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIC8vIE9uIENvY29hIHBs
YXRmb3JtcywgdGhpcyBtYXJrdXAgaXMgZXZlbnR1YWxseSBwZXJzaXN0ZWQgdG8gdGhlIHBhc3Rl
Ym9hcmQgYW5kIHJlYWQgYmFjayBhcyBVVEYtOCBkYXRhLAogICAgIC8vIHNvIHRoaXMgbWV0YSB0
YWcgaXMgbmVlZGVkIGZvciBjbGllbnRzIHRoYXQgcmVhZCB0aGlzIGRhdGEgaW4gdGhlIGZ1dHVy
ZSBmcm9tIHRoZSBwYXN0ZWJvYXJkIGFuZCBsb2FkIGl0LgogICAgIGFjY3VtdWxhdG9yLnByZXBl
bmRNZXRhQ2hhcnNldFVURjhUYWdJZk5vbkFTQ0lJQ2hhcmFjdGVyc0FyZVByZXNlbnQoKTsKICNl
bmRpZgorCiAgICAgcmV0dXJuIGFjY3VtdWxhdG9yLnRha2VSZXN1bHRzKCk7CiB9CiAKQEAgLTk0
NSwxNyArOTYyLDE2IEBAIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5j
ZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFJlCiAgICAgICAgIEFubm90YXRl
Rm9ySW50ZXJjaGFuZ2U6OlllcywgQ29udmVydEJsb2Nrc1RvSW5saW5lczo6Tm8sIFN0YW5kYXJk
Rm9udEZhbWlseVNlcmlhbGl6YXRpb25Nb2RlOjpLZWVwLCBNU09MaXN0TW9kZTo6RG9Ob3RQcmVz
ZXJ2ZSk7CiB9CiAKLQotc3RhdGljIGJvb2wgc2hvdWxkUHJlc2VydmVNU09MaXN0cyhjb25zdCBT
dHJpbmcmIG1hcmt1cCkKK3N0YXRpYyBib29sIHNob3VsZFByZXNlcnZlTVNPTGlzdHMoU3RyaW5n
VmlldyBtYXJrdXApCiB7CiAgICAgaWYgKCFtYXJrdXAuc3RhcnRzV2l0aCgiPGh0bWwgeG1sbnM6
IikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvIHRhZ0Nsb3NlID0gbWFya3VwLmZp
bmQoJz4nKTsKICAgICBpZiAodGFnQ2xvc2UgPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBhdXRvIGh0bWxUYWcgPSBtYXJrdXAuc3Vic3RyaW5nKDAsIHRhZ0Nsb3NlKTsK
LSAgICByZXR1cm4gaHRtbFRhZy5jb250YWlucygieG1sbnM6bz1cInVybjpzY2hlbWFzLW1pY3Jv
c29mdC1jb206b2ZmaWNlOm9mZmljZVwiIikKLSAgICAgICAgJiYgaHRtbFRhZy5jb250YWlucygi
eG1sbnM6dz1cInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmRcIiIpOworICAg
IGF1dG8gdGFnID0gbWFya3VwLnN1YnN0cmluZygwLCB0YWdDbG9zZSk7CisgICAgcmV0dXJuIHRh
Zy5jb250YWlucygieG1sbnM6bz1cInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9m
ZmljZVwiIikKKyAgICAgICAgJiYgdGFnLmNvbnRhaW5zKCJ4bWxuczp3PVwidXJuOnNjaGVtYXMt
bWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZFwiIik7CiB9CiAKIFN0cmluZyBzYW5pdGl6ZWRNYXJr
dXBGb3JGcmFnbWVudEluRG9jdW1lbnQoUmVmPERvY3VtZW50RnJhZ21lbnQ+JiYgZnJhZ21lbnQs
IERvY3VtZW50JiBkb2N1bWVudCwgTVNPTGlzdFF1aXJrcyBtc29MaXN0UXVpcmtzLCBjb25zdCBT
dHJpbmcmIG9yaWdpbmFsTWFya3VwKQpAQCAtOTcxLDIwICs5ODcsMTYgQEAgU3RyaW5nIHNhbml0
aXplZE1hcmt1cEZvckZyYWdtZW50SW5Eb2N1bWVudChSZWY8RG9jdW1lbnRGcmFnbWVudD4mJiBm
cmFnbWVudCwgRG8KICAgICBhdXRvIHJlc3VsdCA9IHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxB
cHBlYXJhbmNlSW50ZXJuYWwoZmlyc3RQb3NpdGlvbkluTm9kZShib2R5RWxlbWVudC5nZXQoKSks
IGxhc3RQb3NpdGlvbkluTm9kZShib2R5RWxlbWVudC5nZXQoKSksIG51bGxwdHIsCiAgICAgICAg
IFJlc29sdmVVUkxzOjpZZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwgU2VyaWFs
aXplQ29tcG9zZWRUcmVlOjpObywgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6WWVzLCBDb252ZXJ0
QmxvY2tzVG9JbmxpbmVzOjpObywgIFN0YW5kYXJkRm9udEZhbWlseVNlcmlhbGl6YXRpb25Nb2Rl
OjpTdHJpcCwgbXNvTGlzdE1vZGUpOwogCi0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAg
IGlmIChtc29MaXN0TW9kZSA9PSBNU09MaXN0TW9kZTo6UHJlc2VydmUpIHsKLSAgICAgICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCI8aHRtbCB4bWxuczpvPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0
LWNvbTpvZmZpY2U6b2ZmaWNlXCJcbiIKLSAgICAgICAgICAgICJ4bWxuczp3PVwidXJuOnNjaGVt
YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZFwiXG4iCi0gICAgICAgICAgICAieG1sbnM6bT1c
Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDQvMTIvb21tbFwiXG4iCi0g
ICAgICAgICAgICAieG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwXCI+Iik7
Ci0gICAgfQotCi0gICAgYnVpbGRlci5hcHBlbmQocmVzdWx0KTsKLQotICAgIGlmIChtc29MaXN0
TW9kZSA9PSBNU09MaXN0TW9kZTo6UHJlc2VydmUpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiPC9odG1sPiIpOworICAgIGlmIChtc29MaXN0TW9kZSAhPSBNU09MaXN0TW9kZTo6UHJl
c2VydmUpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICByZXR1cm4gYnVpbGRlci50b1N0
cmluZygpOworICAgIHJldHVybiBtYWtlU3RyaW5nKAorICAgICAgICAiPGh0bWwgeG1sbnM6bz1c
InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZVwiXG4iCisgICAgICAgICJ4
bWxuczp3PVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZFwiXG4iCisgICAg
ICAgICJ4bWxuczptPVwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8x
Mi9vbW1sXCJcbiIKKyAgICAgICAgInhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0
bWw0MFwiPiIsCisgICAgICAgIHJlc3VsdCwKKyAgICAgICAgIjwvaHRtbD4iKTsKIH0KIAogc3Rh
dGljIHZvaWQgcmVzdG9yZUF0dGFjaG1lbnRFbGVtZW50c0luRnJhZ21lbnQoRG9jdW1lbnRGcmFn
bWVudCYgZnJhZ21lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5k
ZXggNjY1YWNlNDdlNzllMTQzYTFkMDY1MzU5ODczN2NlNDA3YTBhMjBkNy4uYTkwZDRlY2I5NTg5
MzQ3YzU2ZjAwZTJiMGI3Nzk0MWI5ODliODE4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcApAQCAtNzE0LDcgKzcxNCw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50Ojpy
ZXNldERlZmF1bHRCdXR0b24oKQogICAgIGlmICghbV9kZWZhdWx0QnV0dG9uKSB7CiAgICAgICAg
IC8vIENvbXB1dGluZyB0aGUgZGVmYXVsdCBidXR0b24gaXMgbm90IGNoZWFwLCB3ZSBkb24ndCB3
YW50IHRvIGRvIGl0IHVubGVzcyBuZWVkZWQuCiAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBubyBk
ZWZhdWx0IGJ1dHRvbiBzZXQsIHRoZSBvbmx5IHN0eWxlIHRvIGludmFsaWRhdGUgaXMgdGhlIGVs
ZW1lbnQKLSAgICAgICAgLy8gYmVpbmcgYWRkZWQgdG8gdGhlIGZvcm0uIFRoaXMgaXMgZG9uZSBl
eHBsaWNpdGVseSBpbiByZWdpc3RlckZvcm1FbGVtZW50KCkuCisgICAgICAgIC8vIGJlaW5nIGFk
ZGVkIHRvIHRoZSBmb3JtLiBUaGlzIGlzIGRvbmUgZXhwbGljaXRseSBpbiByZWdpc3RlckZvcm1F
bGVtZW50KCkuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL21hdGhtbC9NYXRoTUxPcGVyYXRvckRpY3Rpb25hcnkuY3BwIGIvU291cmNlL1dlYkNv
cmUvbWF0aG1sL01hdGhNTE9wZXJhdG9yRGljdGlvbmFyeS5jcHAKaW5kZXggZTliZmY4OWZkYWEx
OTczYmFhYzJiMWI4MGViY2ZkMzcyMzhhZDQwYS4uMmQyYmMyYmU2MDE1MGUwY2E5MGI4M2MyOWEz
ZTk4ODgzOTA5ZDhiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE9w
ZXJhdG9yRGljdGlvbmFyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE9w
ZXJhdG9yRGljdGlvbmFyeS5jcHAKQEAgLTExMzgsNyArMTEzOCw3IEBAIE9wdGlvbmFsPFByb3Bl
cnR5PiBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OnNlYXJjaChVQ2hhcjMyIGNoYXJhY3Rlciwg
Rm9ybSBmb3JtCiAgICAgaWYgKGV4cGxpY2l0Rm9ybSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIC8vIElmIHdlIGRpZCBub3QgZmluZCB0aGUgZGVzaXJlZCBvcGVyYXRvciBm
b3JtIGFuZCBpZiBpdCB3YXMgbm90IHNldCBleHBsaWNpdGVseSwgd2UgdXNlIHRoZSBmaXJzdCBv
bmUgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjogSW5maXgsIFByZWZpeCwgUG9zdGZpeC4KKyAgICAv
LyBJZiB3ZSBkaWQgbm90IGZpbmQgdGhlIGRlc2lyZWQgb3BlcmF0b3IgZm9ybSBhbmQgaWYgaXQg
d2FzIG5vdCBzZXQgZXhwbGljaXRseSwgd2UgdXNlIHRoZSBmaXJzdCBvbmUgaW4gdGhlIGZvbGxv
d2luZyBvcmRlcjogSW5maXgsIFByZWZpeCwgUG9zdGZpeC4KICAgICAvLyBUaGlzIGlzIHRvIGhh
bmRsZSBiYWQgTWF0aE1MIG1hcmt1cCB3aXRob3V0IGV4cGxpY2l0IDxtcm93PiBkZWxpbWl0ZXJz
IGxpa2UgIjxtbz4oPC9tbz48bWk+YTwvbWk+PG1vPik8L21vPjxtbz4oPC9tbz48bWk+YjwvbWk+
PG1vPik8L21vPiIgd2hlcmUgaW5uZXJmZW5jZXMgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGlu
Zml4LgogICAgIGlmIChhdXRvKiBlbnRyeSA9IHRyeUJpbmFyeVNlYXJjaDxjb25zdCBFbnRyeSwg
VUNoYXIzMj4oZGljdGlvbmFyeSwgZGljdGlvbmFyeVNpemUsIGNoYXJhY3RlciwgRXh0cmFjdENo
YXIpKSB7CiAgICAgICAgIC8vIFRoZXJlIGFyZSBhdCBtb3N0IHR3byBvdGhlciBlbnRyaWVzIGJl
Zm9yZSB0aGUgb25lIGZvdW5kLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
U2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApp
bmRleCBkY2E0MDZiOTU0YTNmMzAyMTUwNjhmZDFjMDhkOTg4N2IzMWQyN2Y0Li4zZjZlZDg0ZDA2
ZDQ1YzNjNzAwNzhkNzc3ODA3NjU2ZGQ0NThkYWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcApAQCAtMTEzLDkgKzExMyw5IEBAIFBhZ2VTZXJpYWxpemVyOjpTZXJpYWxp
emVyTWFya3VwQWNjdW11bGF0b3I6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcihQYWdlU2Vy
CiAgICAgLCBtX3NlcmlhbGl6ZXIoc2VyaWFsaXplcikKICAgICAsIG1fZG9jdW1lbnQoZG9jdW1l
bnQpCiB7Ci0gICAgLy8gTWFya3VwQWNjdW11bGF0b3IgZG9lcyBub3Qgc2VyaWFsaXplIHRoZSA8
P3htbCAuLi4gbGluZSwgc28gd2UgYWRkIGl0IGV4cGxpY2l0ZWx5IHRvIGVuc3VyZSB0aGUgcmln
aHQgZW5jb2RpbmcgaXMgc3BlY2lmaWVkLgorICAgIC8vIE1hcmt1cEFjY3VtdWxhdG9yIGRvZXMg
bm90IHNlcmlhbGl6ZSB0aGUgPD94bWwgLi4uIGxpbmUsIHNvIHdlIGFkZCBpdCBleHBsaWNpdGx5
IHRvIGVuc3VyZSB0aGUgcmlnaHQgZW5jb2RpbmcgaXMgc3BlY2lmaWVkLgogICAgIGlmIChtX2Rv
Y3VtZW50LmlzWE1MRG9jdW1lbnQoKSB8fCBtX2RvY3VtZW50LnhtbFN0YW5kYWxvbmUoKSkKLSAg
ICAgICAgYXBwZW5kU3RyaW5nKCI8P3htbCB2ZXJzaW9uPVwiIiArIG1fZG9jdW1lbnQueG1sVmVy
c2lvbigpICsgIlwiIGVuY29kaW5nPVwiIiArIG1fZG9jdW1lbnQuY2hhcnNldCgpICsgIlwiPz4i
KTsKKyAgICAgICAgYXBwZW5kKCI8P3htbCB2ZXJzaW9uPVwiIiwgbV9kb2N1bWVudC54bWxWZXJz
aW9uKCksICJcIiBlbmNvZGluZz1cIiIsIG1fZG9jdW1lbnQuY2hhcnNldCgpLCAiXCI/PiIpOwog
fQogCiB2b2lkIFBhZ2VTZXJpYWxpemVyOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBUZXh0JiB0ZXh0KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKaW5kZXggM2Qz
MjU1ZjhmN2I0ZTRiNDE4ZjBiNGRmMjY5N2NkZGVmM2UzZGMyMy4uZGQxODhhZTExYjM3ZDc5N2Ix
MmQ4MWQyOTYzNjlmN2YxOTU3NmViYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBTVkdJ
bmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2UKICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSAh
PSBWaXNpYmlsaXR5OjpWaXNpYmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBOb3RlOiBX
ZSdyZSBleHBsaWNpdGVseSBub3Qgc3VwcG9ydGluZyBjb21wb3NpdGlvbiAmIGN1c3RvbSB1bmRl
cmxpbmVzIGFuZCBjdXN0b20gaGlnaGxpZ2h0ZXJzIC0gdW5saWtlIElubGluZVRleHRCb3guCisg
ICAgLy8gTm90ZTogV2UncmUgZXhwbGljaXRseSBub3Qgc3VwcG9ydGluZyBjb21wb3NpdGlvbiAm
IGN1c3RvbSB1bmRlcmxpbmVzIGFuZCBjdXN0b20gaGlnaGxpZ2h0ZXJzIC0gdW5saWtlIElubGlu
ZVRleHRCb3guCiAgICAgLy8gSWYgd2UgZXZlciBuZWVkIHRoYXQgZm9yIFNWRywgaXQncyB2ZXJ5
IGVhc3kgdG8gcmVmYWN0b3IgYW5kIHJldXNlIHRoZSBjb2RlLgogCiAgICAgYXV0byYgcGFyZW50
UmVuZGVyZXIgPSBwYXJlbnQoKS0+cmVuZGVyZXIoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5n
ZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzY2M5ZjczY2RhZDUwOTBlNDljODhkODY1YmQz
ZmM3MDRhMDEzMmFjLi41ODMyZTU5NWQwMjc1MWNkNWJjZmFhMjY2NjkzZDM1ZjgxZGJkY2ZhIDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMjAtMDUtMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFN0cmVhbWxpbmUgTWFya3VwQWNjdW11bGF0b3IgdG8gaW1wcm92ZSBlZmZpY2llbmN5
IGEgYml0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTE2NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6IEZpeCBzcGVsbGxpbmcgZXJyb3IgaW4gdGhlIHdvcmQgImV4cGxpY2l0
bHkiLgorCiAyMDIwLTA1LTA4ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVtb3ZlIGVtcHR5IGRpcmVjdG9yaWVzIGZyb20gZnJvbSBzdm4ud2Via2l0Lm9y
ZyByZXBvc2l0b3J5CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9T
dHJpbmdJbXBsLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwu
Y3BwCmluZGV4IGU4YWNmYjZhZDk1YjNkNWJlNzEwN2UwNzE3ZmViYzkwYmMzODExM2EuLmFhZGY0
ZjljZTNlNTFiZjU2ZDEwOGMzYmU0ZDA3YmY5YzNkZTM2YmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwCkBAIC00MSw3ICs0MSw3IEBAIFRFU1QoV1RG
LCBTdHJpbmdJbXBsQ3JlYXRpb25Gcm9tTGl0ZXJhbCkKICAgICBBU1NFUlRfVFJVRShlcXVhbChz
dHJpbmdXaXRoVGVtcGxhdGUuZ2V0KCksICJUZW1wbGF0ZSBMaXRlcmFsIikpOwogICAgIEFTU0VS
VF9UUlVFKHN0cmluZ1dpdGhUZW1wbGF0ZS0+aXM4Qml0KCkpOwogCi0gICAgLy8gQ29uc3RydWN0
b3IgdGFraW5nIHRoZSBzaXplIGV4cGxpY2l0ZWx5LgorICAgIC8vIENvbnN0cnVjdG9yIHRha2lu
ZyB0aGUgc2l6ZSBleHBsaWNpdGx5LgogICAgIGNvbnN0IGNoYXIqIHByb2dyYW1tYXRpY1N0cmlu
Z0RhdGEgPSAiRXhwbGljaXQgU2l6ZSBMaXRlcmFsIjsKICAgICBhdXRvIHByb2dyYW1tYXRpY1N0
cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKHByb2dyYW1tYXRpY1N0cmluZ0Rh
dGEsIHN0cmxlbihwcm9ncmFtbWF0aWNTdHJpbmdEYXRhKSk7CiAgICAgQVNTRVJUX0VRKHN0cmxl
bihwcm9ncmFtbWF0aWNTdHJpbmdEYXRhKSwgcHJvZ3JhbW1hdGljU3RyaW5nLT5sZW5ndGgoKSk7
Cg==
</data>
<flag name="review"
          id="414337"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>