<?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>202520</bug_id>
          
          <creation_ts>2019-10-03 05:28:58 -0700</creation_ts>
          <short_desc>[CSS Shadow Parts] Support &apos;exportparts&apos; attribute</short_desc>
          <delta_ts>2019-10-04 01:34:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149443</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1576366</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-03 05:28:58 -0700</bug_when>
    <thetext>Support &apos;exportparts&apos; attribute for exporting part mappings from subcomponents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576370</commentid>
    <comment_count>1</comment_count>
      <attachid>380102</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-03 05:58:20 -0700</bug_when>
    <thetext>Created attachment 380102
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576530</commentid>
    <comment_count>2</comment_count>
      <attachid>380146</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-03 11:41:51 -0700</bug_when>
    <thetext>Created attachment 380146
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576596</commentid>
    <comment_count>3</comment_count>
      <attachid>380146</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-03 14:12:26 -0700</bug_when>
    <thetext>Comment on attachment 380146
patch

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

&gt; Source/WebCore/css/ElementRuleCollector.cpp:273
&gt; +        SetForScope&lt;const Element*&gt; partMatchingScope(m_shadowHostInPartRuleScope, &amp;shadowHost);

Can we use RefPtr?

&gt; Source/WebCore/css/ElementRuleCollector.cpp:282
&gt; +    if (!containingShadowRoot.partMappings().isEmpty()) {

Why not exit early instead of nesting?

&gt; Source/WebCore/css/ElementRuleCollector.h:103
&gt; +    const Element* m_shadowHostInPartRuleScope { nullptr };

Can we use RefPtr instead?

&gt; Source/WebCore/css/SelectorChecker.cpp:1154
&gt; +            auto mapPartName = [&amp;](AtomString partName) {

mapPartName isn&apos;t quite descriptive.
How about partNameInRuleScope or translatePartNameToRuleScope?

&gt; Source/WebCore/css/SelectorChecker.cpp:1155
&gt; +                for (auto* shadowRoot = element.containingShadowRoot(); shadowRoot; shadowRoot = shadowRoot-&gt;host()-&gt;containingShadowRoot()) {

Use RefPtr?

&gt; Source/WebCore/css/SelectorChecker.cpp:1166
&gt; +            Vector&lt;AtomString, 3&gt; mappedElementPartNames;

Why not 4??

&gt; Source/WebCore/css/SelectorChecker.h:87
&gt; +        const Element* shadowHostInPartRuleScope { nullptr };

Can we use RefPtr instead?

&gt; Source/WebCore/dom/Element.cpp:1746
&gt; +        else if (name  == HTMLNames::exportpartsAttr) {

Nit: Two spaces.

&gt; Source/WebCore/dom/Element.cpp:1747
&gt; +            if (auto* shadowRoot = this-&gt;shadowRoot())

Use makeRefPtr?

&gt; Source/WebCore/dom/ShadowRoot.cpp:259
&gt; +    auto parsePartMapping = [&amp;](StringView mappingString) {

I would have preferred this as a regular static function which returns an optional pair of AtomicString or a optional struct.

&gt; Source/WebCore/dom/ShadowRoot.cpp:262
&gt; +        auto skipWhitespace = [&amp;] (auto position) {

We should really add StringView::skipUntil &amp; StringView::skipWhile... not that I think we should do it in this patch.

&gt; Source/WebCore/dom/ShadowRoot.cpp:278
&gt; +        

Nit: whitespace.

&gt; Source/WebCore/dom/ShadowRoot.cpp:288
&gt; +            mappings.add(firstPart, firstPart);
&gt; +            return;

That way, this would read: return { firstPart, firstPart };

&gt; Source/WebCore/dom/ShadowRoot.cpp:313
&gt; +    while (begin &lt; end) {
&gt; +        size_t mappingEnd = begin;
&gt; +        while (mappingEnd &lt; end &amp;&amp; mappingsListString[mappingEnd] != &apos;,&apos;)
&gt; +            ++mappingEnd;

Can&apos;t we just use StringView::split and iterate over SplitResult?

&gt; Source/WebCore/dom/ShadowRoot.h:123
&gt; +    mutable std::unique_ptr&lt;HashMap&lt;AtomString, AtomString&gt;&gt; m_partMappings;

Maybe we can use Optional instead?
It doesn&apos;t seem like an extra pointer size increase to ShadowRoot itself isn&apos;t a big deal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576731</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-03 22:43:24 -0700</bug_when>
    <thetext>&gt; Can we use RefPtr?

No, until bug 202562 is fixed.
 
&gt; Can&apos;t we just use StringView::split and iterate over SplitResult?

The specced parsing is just complex enough that trying to take shortcuts leads to code where it is hard to see if it matches the spec or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576740</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-03 23:40:13 -0700</bug_when>
    <thetext>&gt; Maybe we can use Optional instead?
&gt; It doesn&apos;t seem like an extra pointer size increase to ShadowRoot itself
&gt; isn&apos;t a big deal.

HashTable is like 3 pointers but it still a not a big deal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576742</commentid>
    <comment_count>6</comment_count>
      <attachid>380192</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-03 23:49:35 -0700</bug_when>
    <thetext>Created attachment 380192
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576753</commentid>
    <comment_count>7</comment_count>
      <attachid>380192</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-04 00:34:49 -0700</bug_when>
    <thetext>Comment on attachment 380192
patch

Rejecting attachment 380192 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 380192, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Logging in as commit-queue@webkit.org...
Fetching: https://bugs.webkit.org/attachment.cgi?id=380192&amp;action=edit
Fetching: https://bugs.webkit.org/show_bug.cgi?id=202520&amp;ctype=xml&amp;excludefield=attachmentdata
Processing 1 patch from 1 bug.
Updating working directory
Processing patch 380192 from bug 202520.
Fetching: https://bugs.webkit.org/attachment.cgi?id=380192
Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/imported/w3c/ChangeLog

ERROR from SVN:
Item is out of date: File &apos;/trunk/LayoutTests/imported/w3c/ChangeLog&apos; is out of date
W: ca61dfd2accd813464098eb6aca9ddb3730f86fb and refs/remotes/origin/master differ, using rebase:
:040000 040000 3fa4548e4f4d7d62a414386b23af9da57f9651be a7519737312f74324bace8e89d66a28b8d1b1115 M	LayoutTests
:040000 040000 5eb8944f8412d2e5780731c5e75d1c9605368b28 9ebc68c3dbba69908e3eab5fc4793638d1677715 M	Source
Current branch master is up to date.
ERROR: Not all changes have been committed into SVN, however the committed
ones (if any) seem to be successfully integrated into the working tree.
Please see the above messages for details.


Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/imported/w3c/ChangeLog

ERROR from SVN:
Item is out of date: File &apos;/trunk/LayoutTests/imported/w3c/ChangeLog&apos; is out of date
W: ca61dfd2accd813464098eb6aca9ddb3730f86fb and refs/remotes/origin/master differ, using rebase:
:040000 040000 3fa4548e4f4d7d62a414386b23af9da57f9651be a7519737312f74324bace8e89d66a28b8d1b1115 M	LayoutTests
:040000 040000 5eb8944f8412d2e5780731c5e75d1c9605368b28 9ebc68c3dbba69908e3eab5fc4793638d1677715 M	Source
Current branch master is up to date.
ERROR: Not all changes have been committed into SVN, however the committed
ones (if any) seem to be successfully integrated into the working tree.
Please see the above messages for details.


Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit
Updating OpenSource
Current branch master is up to date.

Full output: https://webkit-queues.webkit.org/results/13094104</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576769</commentid>
    <comment_count>8</comment_count>
      <attachid>380192</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-04 01:33:12 -0700</bug_when>
    <thetext>Comment on attachment 380192
patch

Clearing flags on attachment: 380192

Committed r250712: &lt;https://trac.webkit.org/changeset/250712&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576771</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-04 01:33:14 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576772</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-04 01:34:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/55976544&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380102</attachid>
            <date>2019-10-03 05:58:20 -0700</date>
            <delta_ts>2019-10-03 11:41:51 -0700</delta_ts>
            <desc>patch</desc>
            <filename>css-shadow-parts-export.patch</filename>
            <type>text/plain</type>
            <size>21886</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IDM0ZmI1NDQ2N2EwLi43NTlmYmFhYWQ1
NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTkt
MTAtMDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFtDU1Mg
U2hhZG93IFBhcnRzXSBTdXBwb3J0ICdleHBvcnRwYXJ0cycgYXR0cmlidXRlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI1MjAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9kb3VibGUtZm9yd2FyZC1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2hhZG93LXBhcnRzL2ludmFsaWRhdGlv
bi1jaGFuZ2UtZXhwb3J0cGFydHMtZm9yd2FyZC1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2hhZG93LXBhcnRzL2ludmFsaWRhdGlvbi1jaGFuZ2Ut
cGFydC1uYW1lLWZvcndhcmQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10
ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9pbnZhbGlkYXRpb24tY29tcGxleC1zZWxlY3Rvci1m
b3J3YXJkLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nz
cy1zaGFkb3ctcGFydHMvcHJlY2VkZW5jZS1wYXJ0LXZzLXBhcnQtZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9zaW1wbGUtZm9y
d2FyZC1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mt
c2hhZG93LXBhcnRzL3NpbXBsZS1mb3J3YXJkLXNob3J0aGFuZC1leHBlY3RlZC50eHQ6CisKIDIw
MTktMTAtMDIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtD
U1MgU2hhZG93IFBhcnRzXSBTdXBwb3J0IG11bHRpcGxlIGFyZ3VtZW50cyBmb3IgOjpwYXJ0KCkK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
Y3NzL2Nzcy1zaGFkb3ctcGFydHMvZG91YmxlLWZvcndhcmQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0
cy9kb3VibGUtZm9yd2FyZC1leHBlY3RlZC50eHQKaW5kZXggZjM2OTJjMDY0OWYuLmE0NjI4YTY0
NWJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL2Nzcy9jc3Mtc2hhZG93LXBhcnRzL2RvdWJsZS1mb3J3YXJkLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2hh
ZG93LXBhcnRzL2RvdWJsZS1mb3J3YXJkLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDQgQEAKIFRo
ZSBmb2xsb3dpbmcgdGV4dCBzaG91bGQgYmUgZ3JlZW46IAogCi1GQUlMIFBhcnQgaW4gaW5uZXIg
aG9zdCBpcyBmb3J3YXJkZWQgdGhyb3VnaCB0aGUgbWlkZGxlIGhvc3QgZm9yIHN0eWxpbmcgYnkg
ZG9jdW1lbnQgc3R5bGUgc2hlZXQgYXNzZXJ0X2VxdWFsczogZXhwZWN0ZWQgInJnYigwLCAxMjgs
IDApIiBidXQgZ290ICJyZ2IoMjU1LCAwLCAwKSIKK1BBU1MgUGFydCBpbiBpbm5lciBob3N0IGlz
IGZvcndhcmRlZCB0aHJvdWdoIHRoZSBtaWRkbGUgaG9zdCBmb3Igc3R5bGluZyBieSBkb2N1bWVu
dCBzdHlsZSBzaGVldCAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9pbnZhbGlkYXRpb24tY2hhbmdl
LWV4cG9ydHBhcnRzLWZvcndhcmQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9pbnZhbGlkYXRpb24t
Y2hhbmdlLWV4cG9ydHBhcnRzLWZvcndhcmQtZXhwZWN0ZWQudHh0CmluZGV4IDIyODRmMmJlZGIz
Li42YjUzMDJhYjAzNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9pbnZhbGlkYXRpb24tY2hhbmdlLWV4
cG9ydHBhcnRzLWZvcndhcmQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvaW52YWxpZGF0aW9u
LWNoYW5nZS1leHBvcnRwYXJ0cy1mb3J3YXJkLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDQgQEAK
IFRoZSBmb2xsb3dpbmcgdGV4dCBzaG91bGQgYmUgZ3JlZW46IAogCi1GQUlMIFBhcnQgaW4gc2Vs
ZWN0ZWQgaG9zdCBjaGFuZ2VkIGNvbG9yIGFzc2VydF9ub3RfZXF1YWxzOiBnb3QgZGlzYWxsb3dl
ZCB2YWx1ZSAicmdiKDAsIDEyOCwgMCkiCitGQUlMIFBhcnQgaW4gc2VsZWN0ZWQgaG9zdCBjaGFu
Z2VkIGNvbG9yIGFzc2VydF9ub3RfZXF1YWxzOiBnb3QgZGlzYWxsb3dlZCB2YWx1ZSAicmdiKDI1
NSwgMCwgMCkiCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvaW52YWxpZGF0aW9uLWNoYW5nZS1wYXJ0
LW5hbWUtZm9yd2FyZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2hhZG93LXBhcnRzL2ludmFsaWRhdGlvbi1jaGFuZ2Ut
cGFydC1uYW1lLWZvcndhcmQtZXhwZWN0ZWQudHh0CmluZGV4IDIyODRmMmJlZGIzLi42YjUzMDJh
YjAzNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9pbnZhbGlkYXRpb24tY2hhbmdlLXBhcnQtbmFtZS1m
b3J3YXJkLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2hhZG93LXBhcnRzL2ludmFsaWRhdGlvbi1jaGFuZ2UtcGFy
dC1uYW1lLWZvcndhcmQtZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsNCBAQAogVGhlIGZvbGxvd2lu
ZyB0ZXh0IHNob3VsZCBiZSBncmVlbjogCiAKLUZBSUwgUGFydCBpbiBzZWxlY3RlZCBob3N0IGNo
YW5nZWQgY29sb3IgYXNzZXJ0X25vdF9lcXVhbHM6IGdvdCBkaXNhbGxvd2VkIHZhbHVlICJyZ2Io
MCwgMTI4LCAwKSIKK0ZBSUwgUGFydCBpbiBzZWxlY3RlZCBob3N0IGNoYW5nZWQgY29sb3IgYXNz
ZXJ0X25vdF9lcXVhbHM6IGdvdCBkaXNhbGxvd2VkIHZhbHVlICJyZ2IoMjU1LCAwLCAwKSIKIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9j
c3MvY3NzLXNoYWRvdy1wYXJ0cy9pbnZhbGlkYXRpb24tY29tcGxleC1zZWxlY3Rvci1mb3J3YXJk
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvaW52YWxpZGF0aW9uLWNvbXBsZXgtc2VsZWN0b3ItZm9y
d2FyZC1leHBlY3RlZC50eHQKaW5kZXggMmE2NGQ3MWFlNGEuLmM0YmNjMjRlODE4IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mt
c2hhZG93LXBhcnRzL2ludmFsaWRhdGlvbi1jb21wbGV4LXNlbGVjdG9yLWZvcndhcmQtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
Y3NzL2Nzcy1zaGFkb3ctcGFydHMvaW52YWxpZGF0aW9uLWNvbXBsZXgtc2VsZWN0b3ItZm9yd2Fy
ZC1leHBlY3RlZC50eHQKQEAgLTEsNCArMSw0IEBACiBUaGUgZm9sbG93aW5nIHRleHQgc2hvdWxk
IGJlIGdyZWVuOgogCi1GQUlMIFBhcnQgaW4gc2VsZWN0ZWQgaG9zdCBjaGFuZ2VkIGNvbG9yIGFz
c2VydF9ub3RfZXF1YWxzOiBnb3QgZGlzYWxsb3dlZCB2YWx1ZSAicmdiKDAsIDEyOCwgMCkiCitQ
QVNTIFBhcnQgaW4gc2VsZWN0ZWQgaG9zdCBjaGFuZ2VkIGNvbG9yIAogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2hhZG93
LXBhcnRzL3ByZWNlZGVuY2UtcGFydC12cy1wYXJ0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvcHJl
Y2VkZW5jZS1wYXJ0LXZzLXBhcnQtZXhwZWN0ZWQudHh0CmluZGV4IGM3Zjg3MTYwZmRjLi40MGVl
NjY5OTI2YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9wcmVjZWRlbmNlLXBhcnQtdnMtcGFydC1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9wcmVjZWRlbmNlLXBhcnQtdnMtcGFydC1leHBlY3RlZC50
eHQKQEAgLTEsNCArMSw0IEBACiBUaGUgZm9sbG93aW5nIHRleHQgc2hvdWxkIGJlIGdyZWVuOiAK
IAotRkFJTCBTdHlsZSBmcm9tIGRvY3VtZW50IG92ZXJyaWRlcyBzdHlsZSBmcm9tIG91dGVyIENF
IGFzc2VydF9lcXVhbHM6IGV4cGVjdGVkICJyZ2IoMCwgMTI4LCAwKSIgYnV0IGdvdCAicmdiKDI1
NSwgMCwgMCkiCitQQVNTIFN0eWxlIGZyb20gZG9jdW1lbnQgb3ZlcnJpZGVzIHN0eWxlIGZyb20g
b3V0ZXIgQ0UgCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvc2ltcGxlLWZvcndhcmQtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3Nz
LXNoYWRvdy1wYXJ0cy9zaW1wbGUtZm9yd2FyZC1leHBlY3RlZC50eHQKaW5kZXggMzFmMDlhNjIx
YjUuLjMwODk1ZTE1NTc4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2hhZG93LXBhcnRzL3NpbXBsZS1mb3J3YXJkLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2Nzcy9jc3Mtc2hhZG93LXBhcnRzL3NpbXBsZS1mb3J3YXJkLWV4cGVjdGVkLnR4dApAQCAtMSw0
ICsxLDQgQEAKIFRoZSBmb2xsb3dpbmcgdGV4dCBzaG91bGQgYmUgZ3JlZW46IAogCi1GQUlMIFBh
cnQgaW4gaW5uZXIgaG9zdCBpcyBmb3J3YXJkZWQgZm9yIHN0eWxpbmcgYnkgZG9jdW1lbnQgc3R5
bGUgc2hlZXQgYXNzZXJ0X2VxdWFsczogZXhwZWN0ZWQgInJnYigwLCAxMjgsIDApIiBidXQgZ290
ICJyZ2IoMjU1LCAwLCAwKSIKK1BBU1MgUGFydCBpbiBpbm5lciBob3N0IGlzIGZvcndhcmRlZCBm
b3Igc3R5bGluZyBieSBkb2N1bWVudCBzdHlsZSBzaGVldCAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0
cy9zaW1wbGUtZm9yd2FyZC1zaG9ydGhhbmQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9zaW1wbGUt
Zm9yd2FyZC1zaG9ydGhhbmQtZXhwZWN0ZWQudHh0CmluZGV4IGJmMzA0MjdlMGYwLi43ZTY1ZDFh
MjljNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9zaW1wbGUtZm9yd2FyZC1zaG9ydGhhbmQtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
Y3NzL2Nzcy1zaGFkb3ctcGFydHMvc2ltcGxlLWZvcndhcmQtc2hvcnRoYW5kLWV4cGVjdGVkLnR4
dApAQCAtMSw0ICsxLDQgQEAKIFRoZSBmb2xsb3dpbmcgdGV4dCBzaG91bGQgYmUgZ3JlZW46IAog
Ci1GQUlMIFBhcnQgaW4gaW5uZXIgaG9zdCBpcyBmb3J3YXJkZWQsIHVuZGVyIHRoZSBzYW1lIG5h
bWUsIGZvciBzdHlsaW5nIGJ5IGRvY3VtZW50IHN0eWxlIHNoZWV0IGFzc2VydF9lcXVhbHM6IGV4
cGVjdGVkICJyZ2IoMCwgMTI4LCAwKSIgYnV0IGdvdCAicmdiKDI1NSwgMCwgMCkiCitQQVNTIFBh
cnQgaW4gaW5uZXIgaG9zdCBpcyBmb3J3YXJkZWQsIHVuZGVyIHRoZSBzYW1lIG5hbWUsIGZvciBz
dHlsaW5nIGJ5IGRvY3VtZW50IHN0eWxlIHNoZWV0IAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjhkMTk3MGJh
YWIuLjVkM2E4OTA4ZTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTktMTAtMDMg
IEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFtDU1MgU2hhZG93
IFBhcnRzXSBTdXBwb3J0ICdleHBvcnRwYXJ0cycgYXR0cmlidXRlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI1MjAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdXBwb3J0ICdleHBvcnRwYXJ0cycgYXR0
cmlidXRlIGZvciBleHBvcnRpbmcgcGFydCBtYXBwaW5ncyBmcm9tIHN1YmNvbXBvbmVudHMuCisK
KyAgICAgICAgKiBjc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoQXV0aG9yUnVsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoUGFydFBzZXVkb0VsZW1lbnRSdWxlcyk6
CisKKyAgICAgICAgUmVjdXJzZSB0byBjb250YWluaW5nIHNjb3BlcyB0byBjb2xsZWN0IHBhcnQg
cnVsZXMgaWYgdGhlcmUgYXJlIGV4cG9ydGVkIG1hcHBpbmdzLgorCisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNoZXMpOgorICAgICAgICAqIGNzcy9FbGVt
ZW50UnVsZUNvbGxlY3Rvci5oOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRjaFJlY3Vyc2l2ZWx5IGNvbnN0
KToKKworICAgICAgICBNYWtlIFNoYWRvd0Rlc2NlbmRhbnQgZmFrZSBjb21iaW5hdG9yIHNraXAg
ZGlyZWN0bHkgdG8gdGhlIHNjb3BlIHdoZXJlIHRoZSBwYXJ0IHJ1bGVzIGFyZSBjb21pbmcgZnJv
bS4KKworICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZSBjb25zdCk6
CisKKyAgICAgICAgUmVzb2x2ZSBuYW1lcyB2aWEgbWFwcGluZ3MgaWYgbmVlZGVkLgorCisgICAg
ICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQpOgorCisgICAgICAg
IEludmFsaWRhdGUgbWFwcGluZ3MgYXMgbmVlZGVkLgorCisgICAgICAgICogZG9tL1NoYWRvd1Jv
b3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VQYXJ0TWFwcGluZ3MpOgorCisgICAgICAg
IFBhcnNlIHRoZSBtYXBwaW5ncyBtaWNyb3N5bnRheC4KKworICAgICAgICAoV2ViQ29yZTo6U2hh
ZG93Um9vdDo6cGFydE1hcHBpbmdzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jv
b3Q6OmludmFsaWRhdGVQYXJ0TWFwcGluZ3MpOgorICAgICAgICAqIGRvbS9TaGFkb3dSb290Lmg6
CisgICAgICAgICogaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW46CisKIDIwMTktMTAtMDIgIEFu
dHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtDU1MgU2hhZG93IFBh
cnRzXSBTdXBwb3J0IG11bHRpcGxlIGFyZ3VtZW50cyBmb3IgOjpwYXJ0KCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4IGU2ODNhOTdlMWE4Li5kZjlh
YmFiNmViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVj
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3Bw
CkBAIC0yMDUsNyArMjA1LDcgQEAgdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hBdXRo
b3JSdWxlcyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogICAgICAgICBtYXRjaEF1dGhvclNoYWRv
d1BzZXVkb0VsZW1lbnRSdWxlcyhpbmNsdWRlRW1wdHlSdWxlcywgcnVsZVJhbmdlKTsKIAogICAg
ICAgICBpZiAoIW1fZWxlbWVudC5wYXJ0TmFtZXMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBt
YXRjaFBhcnRQc2V1ZG9FbGVtZW50UnVsZXMoaW5jbHVkZUVtcHR5UnVsZXMsIHJ1bGVSYW5nZSk7
CisgICAgICAgICAgICBtYXRjaFBhcnRQc2V1ZG9FbGVtZW50UnVsZXMoKm1fZWxlbWVudC5jb250
YWluaW5nU2hhZG93Um9vdCgpLCBpbmNsdWRlRW1wdHlSdWxlcywgcnVsZVJhbmdlKTsKICAgICB9
CiAKICAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoKTsKQEAgLTI2MywxNCArMjYzLDI2
IEBAIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoU2xvdHRlZFBzZXVkb0VsZW1lbnRS
dWxlcyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzCiAgICAgfQogfQogCi12b2lkIEVsZW1lbnRSdWxl
Q29sbGVjdG9yOjptYXRjaFBhcnRQc2V1ZG9FbGVtZW50UnVsZXMoYm9vbCBpbmNsdWRlRW1wdHlS
dWxlcywgU3R5bGVSZXNvbHZlcjo6UnVsZVJhbmdlJiBydWxlUmFuZ2UpCit2b2lkIEVsZW1lbnRS
dWxlQ29sbGVjdG9yOjptYXRjaFBhcnRQc2V1ZG9FbGVtZW50UnVsZXMoY29uc3QgU2hhZG93Um9v
dCYgY29udGFpbmluZ1NoYWRvd1Jvb3QsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMsIFN0eWxlUmVz
b2x2ZXI6OlJ1bGVSYW5nZSYgcnVsZVJhbmdlKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQuaXNJ
blNoYWRvd1RyZWUoKSk7Ci0gICAgYXV0byYgc2hhZG93Um9vdCA9ICptX2VsZW1lbnQuY29udGFp
bmluZ1NoYWRvd1Jvb3QoKTsKLSAgICBhdXRvJiBob3N0QXV0aG9yUnVsZXMgPSBTdHlsZTo6U2Nv
cGU6OmZvck5vZGUoKnNoYWRvd1Jvb3QuaG9zdCgpKS5yZXNvbHZlcigpLnJ1bGVTZXRzKCkuYXV0
aG9yU3R5bGUoKTsKKyAgICBBU1NFUlQoIW1fZWxlbWVudC5wYXJ0TmFtZXMoKS5pc0VtcHR5KCkp
OwogCi0gICAgTWF0Y2hSZXF1ZXN0IGhvc3RBdXRob3JSZXF1ZXN0IHsgJmhvc3RBdXRob3JSdWxl
cywgaW5jbHVkZUVtcHR5UnVsZXMsIFN0eWxlOjpTY29wZU9yZGluYWw6OkNvbnRhaW5pbmdIb3N0
IH07Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KCZob3N0QXV0aG9yUnVsZXMucGFy
dFBzZXVkb0VsZW1lbnRSdWxlcygpLCBob3N0QXV0aG9yUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAg
ICBhdXRvJiBzaGFkb3dIb3N0ID0gKmNvbnRhaW5pbmdTaGFkb3dSb290Lmhvc3QoKTsKKyAgICB7
CisgICAgICAgIFNldEZvclNjb3BlPGNvbnN0IEVsZW1lbnQqPiBwYXJ0TWF0Y2hpbmdTY29wZSht
X3NoYWRvd0hvc3RJblBhcnRSdWxlU2NvcGUsICZzaGFkb3dIb3N0KTsKKworICAgICAgICBhdXRv
JiBob3N0QXV0aG9yUnVsZXMgPSBTdHlsZTo6U2NvcGU6OmZvck5vZGUoc2hhZG93SG9zdCkucmVz
b2x2ZXIoKS5ydWxlU2V0cygpLmF1dGhvclN0eWxlKCk7CisKKyAgICAgICAgTWF0Y2hSZXF1ZXN0
IGhvc3RBdXRob3JSZXF1ZXN0IHsgJmhvc3RBdXRob3JSdWxlcywgaW5jbHVkZUVtcHR5UnVsZXMs
IFN0eWxlOjpTY29wZU9yZGluYWw6OkNvbnRhaW5pbmdIb3N0IH07CisgICAgICAgIGNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yTGlzdCgmaG9zdEF1dGhvclJ1bGVzLnBhcnRQc2V1ZG9FbGVtZW50UnVs
ZXMoKSwgaG9zdEF1dGhvclJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgfQorCisgICAgLy8gRWxl
bWVudCBtYXkgYmUgZXhwb3NlZCB0byBzdHlsaW5nIGZyb20gZW5jbG9zaW5nIHNjb3BlcyB2aWEg
ZXhwb3J0cGFydHMgYXR0cmlidXRlcy4KKyAgICBpZiAoIWNvbnRhaW5pbmdTaGFkb3dSb290LnBh
cnRNYXBwaW5ncygpLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoYXV0byogcGFyZW50U2hhZG93
Um9vdCA9IHNoYWRvd0hvc3QuY29udGFpbmluZ1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAgIG1h
dGNoUGFydFBzZXVkb0VsZW1lbnRSdWxlcygqcGFyZW50U2hhZG93Um9vdCwgaW5jbHVkZUVtcHR5
UnVsZXMsIHJ1bGVSYW5nZSk7CisgICAgfQogfQogCiB2b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9y
Ojpjb2xsZWN0TWF0Y2hpbmdTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoY29uc3QgTWF0Y2hSZXF1
ZXN0JiBtYXRjaFJlcXVlc3QsIFN0eWxlUmVzb2x2ZXI6OlJ1bGVSYW5nZSYgcnVsZVJhbmdlKQpA
QCAtNDI4LDYgKzQ0MCw3IEBAIGlubGluZSBib29sIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxl
TWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIHVuc2lnbmVkCiAgICAgY29udGV4dC5z
Y3JvbGxiYXIgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5zY3JvbGxiYXI7CiAgICAgY29udGV4dC5z
Y3JvbGxiYXJQYXJ0ID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3Quc2Nyb2xsYmFyUGFydDsKICAgICBj
b250ZXh0LmlzTWF0Y2hpbmdIb3N0UHNldWRvQ2xhc3MgPSBtX2lzTWF0Y2hpbmdIb3N0UHNldWRv
Q2xhc3M7CisgICAgY29udGV4dC5zaGFkb3dIb3N0SW5QYXJ0UnVsZVNjb3BlID0gbV9zaGFkb3dI
b3N0SW5QYXJ0UnVsZVNjb3BlOwogCiAgICAgYm9vbCBzZWxlY3Rvck1hdGNoZXM7CiAjaWYgRU5B
QkxFKENTU19TRUxFQ1RPUl9KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxl
bWVudFJ1bGVDb2xsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxl
Y3Rvci5oCmluZGV4IGEwNjIzNzhhOTc5Li5kYTkwMTk4YzEyYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIG1hdGNoQXV0aG9yU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMsIFN0eWxlUmVzb2x2ZXI6OlJ1bGVSYW5nZSYpOwogICAgIHZvaWQgbWF0Y2hIb3N0
UHNldWRvQ2xhc3NSdWxlcyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzLCBTdHlsZVJlc29sdmVyOjpS
dWxlUmFuZ2UmKTsKICAgICB2b2lkIG1hdGNoU2xvdHRlZFBzZXVkb0VsZW1lbnRSdWxlcyhib29s
IGluY2x1ZGVFbXB0eVJ1bGVzLCBTdHlsZVJlc29sdmVyOjpSdWxlUmFuZ2UmKTsKLSAgICB2b2lk
IG1hdGNoUGFydFBzZXVkb0VsZW1lbnRSdWxlcyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzLCBTdHls
ZVJlc29sdmVyOjpSdWxlUmFuZ2UmKTsKKyAgICB2b2lkIG1hdGNoUGFydFBzZXVkb0VsZW1lbnRS
dWxlcyhjb25zdCBTaGFkb3dSb290JiBjb250YWluaW5nU2hhZG93Um9vdCwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcywgU3R5bGVSZXNvbHZlcjo6UnVsZVJhbmdlJik7CiAKICAgICB2b2lkIGNvbGxl
Y3RNYXRjaGluZ1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyhjb25zdCBNYXRjaFJlcXVlc3QmLCBT
dHlsZVJlc29sdmVyOjpSdWxlUmFuZ2UmKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVsZVNldDo6
UnVsZURhdGFWZWN0b3I+IGNvbGxlY3RTbG90dGVkUHNldWRvRWxlbWVudFJ1bGVzRm9yU2xvdChi
b29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKQEAgLTEwMCw2ICsxMDAsNyBAQCBwcml2YXRlOgogICAg
IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSBtX21vZGUgeyBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlJl
c29sdmluZ1N0eWxlIH07CiAgICAgYm9vbCBtX2lzTWF0Y2hpbmdTbG90dGVkUHNldWRvRWxlbWVu
dHMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc01hdGNoaW5nSG9zdFBzZXVkb0NsYXNzIHsgZmFs
c2UgfTsKKyAgICBjb25zdCBFbGVtZW50KiBtX3NoYWRvd0hvc3RJblBhcnRSdWxlU2NvcGUgeyBu
dWxscHRyIH07CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxSdWxlU2V0OjpSdWxlRGF0YVZl
Y3Rvcj4+IG1fa2VlcEFsaXZlU2xvdHRlZFBzZXVkb0VsZW1lbnRSdWxlczsKIAogICAgIFZlY3Rv
cjxNYXRjaGVkUnVsZSwgNjQ+IG1fbWF0Y2hlZFJ1bGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JDaGVja2VyLmNwcAppbmRleCAyOWQwY2IwYzM5OS4uMTEwNjBkYTliYzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCkBAIC00MjksMTAgKzQyOSwxMSBAQCBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoUmVzdWx0IFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVseShD
aGVja2luZ0NvbnRleHQmCiAgICAgICAgIH0KICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dE
ZXNjZW5kYW50OgogICAgICAgICB7Ci0gICAgICAgICAgICBFbGVtZW50KiBzaGFkb3dIb3N0Tm9k
ZSA9IGNvbnRleHQuZWxlbWVudC0+c2hhZG93SG9zdCgpOwotICAgICAgICAgICAgaWYgKCFzaGFk
b3dIb3N0Tm9kZSkKKyAgICAgICAgICAgIC8vIFdoZW4gbWF0Y2hpbmcgZm9vOjpwYXJ0KGJhcikg
d2Ugc2tpcCBkaXJlY3RseSB0byB0aGUgdHJlZSBvZiBlbGVtZW50ICdmb28nLgorICAgICAgICAg
ICAgYXV0byogc2hhZG93SG9zdCA9IGNoZWNraW5nQ29udGV4dC5zaGFkb3dIb3N0SW5QYXJ0UnVs
ZVNjb3BlID8gY2hlY2tpbmdDb250ZXh0LnNoYWRvd0hvc3RJblBhcnRSdWxlU2NvcGUgOiBjb250
ZXh0LmVsZW1lbnQtPnNoYWRvd0hvc3QoKTsKKyAgICAgICAgICAgIGlmICghc2hhZG93SG9zdCkK
ICAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3Rv
ckZhaWxzQ29tcGxldGVseSk7Ci0gICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gc2hh
ZG93SG9zdE5vZGU7CisgICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gc2hhZG93SG9z
dDsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0g
bmV4dENvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5pc1N1YmplY3RP
ckFkamFjZW50RWxlbWVudCA9IGZhbHNlOwogICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3Jl
RHluYW1pY1BzZXVkbzsKQEAgLTExNDksMTMgKzExNTAsMzIgQEAgYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrT25lKENoZWNraW5nQ29udGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25zdCBMb2Nh
bENvbnQKICAgICAgICAgICAgIEFTU0VSVChjaGVja2luZ0NvbnRleHQucmVzb2x2aW5nTW9kZSA9
PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXMpOwogICAgICAgICAgICAgcmV0dXJuIGlzPEhUTUxTbG90
RWxlbWVudD4oZWxlbWVudCk7CiAKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxl
bWVudFBhcnQ6CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRQYXJ0OiB7
CisgICAgICAgICAgICBhdXRvIG1hcFBhcnROYW1lID0gWyZdKEF0b21TdHJpbmcgcGFydE5hbWUp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8qIHNoYWRvd1Jvb3QgPSBlbGVtZW50LmNvbnRh
aW5pbmdTaGFkb3dSb290KCk7IHNoYWRvd1Jvb3Q7IHNoYWRvd1Jvb3QgPSBzaGFkb3dSb290LT5o
b3N0KCktPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
QXBwbHkgbWFwcGluZ3MgdXAgdG8gdGhlIHNjb3BlIHRoZSBydWxlcyBhcmUgY29taW5nIGZyb20u
CisgICAgICAgICAgICAgICAgICAgIGlmIChzaGFkb3dSb290LT5ob3N0KCkgPT0gY2hlY2tpbmdD
b250ZXh0LnNoYWRvd0hvc3RJblBhcnRSdWxlU2NvcGUpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgcGFydE5hbWUgPSBzaGFkb3dSb290LT5wYXJ0
TWFwcGluZ3MoKS5nZXQocGFydE5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAocGFydE5h
bWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEF0b21TdHJpbmco
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnROYW1lOwor
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgVmVjdG9yPEF0b21TdHJpbmcsIDM+IG1hcHBl
ZEVsZW1lbnRQYXJ0TmFtZXM7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZWxlbWVudC5wYXJ0TmFtZXMoKS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGF1dG8g
bWFwcGVkUGFydCA9IG1hcFBhcnROYW1lKGVsZW1lbnQucGFydE5hbWVzKClbaV0pOworICAgICAg
ICAgICAgICAgIGlmICghbWFwcGVkUGFydC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAg
IG1hcHBlZEVsZW1lbnRQYXJ0TmFtZXMuYXBwZW5kKG1hcHBlZFBhcnQpOworICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICBmb3IgKGF1dG8mIHBhcnQgOiAqc2VsZWN0b3IuYXJndW1lbnRMaXN0
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQucGFydE5hbWVzKCkuY29udGFpbnMo
cGFydCkpCisgICAgICAgICAgICAgICAgaWYgKCFtYXBwZWRFbGVtZW50UGFydE5hbWVzLmNvbnRh
aW5zKHBhcnQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQorICAgICAgICB9CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5oCmluZGV4IDYwYjdlZWE1MTcwLi4yYTQ4Y2MyOTc0OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaApAQCAtODQsNiArODQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIFNjcm9sbGJhclBhcnQgc2Nyb2xsYmFyUGFydCB7IE5vUGFydCB9OwogICAgICAgICBjb25z
dCBDb250YWluZXJOb2RlKiBzY29wZSB7IG51bGxwdHIgfTsKICAgICAgICAgYm9vbCBpc01hdGNo
aW5nSG9zdFBzZXVkb0NsYXNzIHsgZmFsc2UgfTsKKyAgICAgICAgY29uc3QgRWxlbWVudCogc2hh
ZG93SG9zdEluUGFydFJ1bGVTY29wZSB7IG51bGxwdHIgfTsKIAogICAgICAgICAvLyBGSVhNRTog
SXQgd291bGQgYmUgbmljZXIgdG8gaGF2ZSBhIHNlcGFyYXRlIG9iamVjdCBmb3IgcmV0dXJuIHZh
bHVlcy4gVGhpcyByZXF1aXJlcyBzb21lIG1vcmUgd29yayBpbiB0aGUgc2VsZWN0b3IgY29tcGls
ZXIuCiAgICAgICAgIFN0eWxlOjpSZWxhdGlvbnMgc3R5bGVSZWxhdGlvbnM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKaW5kZXggMGI5YzEzOGFhZjcuLjRjOTIzNjUxODlkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCkBAIC0xNzE5LDggKzE3MTksNiBAQCB2b2lkIEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgb2xkVgogICAg
ICAgICAgICAgZG9jdW1lbnQoKS5pbnZhbGlkYXRlQWNjZXNzS2V5Q2FjaGUoKTsKICAgICAgICAg
ZWxzZSBpZiAobmFtZSA9PSBIVE1MTmFtZXM6OmNsYXNzQXR0cikKICAgICAgICAgICAgIGNsYXNz
QXR0cmlidXRlQ2hhbmdlZChuZXdWYWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gSFRN
TE5hbWVzOjpwYXJ0QXR0cikKLSAgICAgICAgICAgIHBhcnRBdHRyaWJ1dGVDaGFuZ2VkKG5ld1Zh
bHVlKTsKICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSBIVE1MTmFtZXM6OmlkQXR0cikgewogICAg
ICAgICAgICAgQXRvbVN0cmluZyBvbGRJZCA9IGVsZW1lbnREYXRhKCktPmlkRm9yU3R5bGVSZXNv
bHV0aW9uKCk7CiAgICAgICAgICAgICBBdG9tU3RyaW5nIG5ld0lkID0gbWFrZUlkRm9yU3R5bGVS
ZXNvbHV0aW9uKG5ld1ZhbHVlLCBkb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKTsKQEAgLTE3NDMs
NiArMTc0MSwxMSBAQCB2b2lkIEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgb2xkVgogICAgICAgICAgICAgICAgIGlm
IChhdXRvKiBzaGFkb3dSb290ID0gcGFyZW50LT5zaGFkb3dSb290KCkpCiAgICAgICAgICAgICAg
ICAgICAgIHNoYWRvd1Jvb3QtPmhvc3RDaGlsZEVsZW1lbnREaWRDaGFuZ2VTbG90QXR0cmlidXRl
KCp0aGlzLCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwogICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKG5hbWUgPT0gSFRNTE5hbWVzOjpwYXJ0QXR0cikKKyAgICAgICAgICAgIHBhcnRBdHRy
aWJ1dGVDaGFuZ2VkKG5ld1ZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAobmFtZSAgPT0gSFRNTE5h
bWVzOjpleHBvcnRwYXJ0c0F0dHIpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzaGFkb3dSb290
ID0gdGhpcy0+c2hhZG93Um9vdCgpKQorICAgICAgICAgICAgICAgIHNoYWRvd1Jvb3QtPmludmFs
aWRhdGVQYXJ0TWFwcGluZ3MoKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRv
d1Jvb3QuY3BwCmluZGV4IDY3ODZjMGQyMWUxLi43MDNkNWI1ODg0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aGFkb3dSb290LmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVl
dC5oIgogI2luY2x1ZGUgIkVsZW1lbnRUcmF2ZXJzYWwuaCIKKyNpbmNsdWRlICJIVE1MUGFyc2Vy
SWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVy
RWxlbWVudC5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTUwLDYg
KzUxLDcgQEAgc3RydWN0IFNhbWVTaXplQXNTaGFkb3dSb290IDogcHVibGljIERvY3VtZW50RnJh
Z21lbnQsIHB1YmxpYyBUcmVlU2NvcGUgewogICAgIHZvaWQqIHN0eWxlU2hlZXRMaXN0OwogICAg
IHZvaWQqIGhvc3Q7CiAgICAgdm9pZCogc2xvdEFzc2lnbm1lbnQ7CisgICAgdm9pZCogcGFydE1h
cHBpbmdzOwogfTsKIAogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFNoYWRvd1Jvb3QpID09IHNpemVv
ZihTYW1lU2l6ZUFzU2hhZG93Um9vdCksIHNoYWRvd3Jvb3Rfc2hvdWxkX3N0YXlfc21hbGwpOwpA
QCAtMjUyLDYgKzI1NCw5MCBAQCBjb25zdCBWZWN0b3I8Tm9kZSo+KiBTaGFkb3dSb290Ojphc3Np
Z25lZE5vZGVzRm9yU2xvdChjb25zdCBIVE1MU2xvdEVsZW1lbnQmIHNsbwogICAgIHJldHVybiBt
X3Nsb3RBc3NpZ25tZW50LT5hc3NpZ25lZE5vZGVzRm9yU2xvdChzbG90LCAqdGhpcyk7CiB9CiAK
K3N0YXRpYyB2b2lkIHBhcnNlUGFydE1hcHBpbmdzKEhhc2hNYXA8QXRvbVN0cmluZywgQXRvbVN0
cmluZz4mIG1hcHBpbmdzLCBTdHJpbmdWaWV3IG1hcHBpbmdzTGlzdFN0cmluZykKK3sKKyAgICBh
dXRvIHBhcnNlRW50cnkgPSBbJl0oU3RyaW5nVmlldyBtYXBwaW5nU3RyaW5nKSB7CisgICAgICAg
IGNvbnN0IHNpemVfdCBlbmQgPSBtYXBwaW5nU3RyaW5nLmxlbmd0aCgpOworCisgICAgICAgIGF1
dG8gc2tpcFdoaXRlc3BhY2UgPSBbJl0gKGF1dG8gcG9zaXRpb24pIHsKKyAgICAgICAgICAgIHdo
aWxlIChwb3NpdGlvbiA8IGVuZCAmJiBpc0hUTUxTcGFjZShtYXBwaW5nU3RyaW5nW3Bvc2l0aW9u
XSkpCisgICAgICAgICAgICAgICAgKytwb3NpdGlvbjsKKyAgICAgICAgICAgIHJldHVybiBwb3Np
dGlvbjsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGNvbGxlY3RWYWx1ZSA9IFsmXSAoYXV0
byBwb3NpdGlvbikgeworICAgICAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kICYmICghaXNI
VE1MU3BhY2UobWFwcGluZ1N0cmluZ1twb3NpdGlvbl0pICYmIG1hcHBpbmdTdHJpbmdbcG9zaXRp
b25dICE9ICc6JykpCisgICAgICAgICAgICAgICAgKytwb3NpdGlvbjsKKyAgICAgICAgICAgIHJl
dHVybiBwb3NpdGlvbjsKKyAgICAgICAgfTsKKworICAgICAgICBzaXplX3QgYmVnaW4gPSAwOwor
ICAgICAgICBiZWdpbiA9IHNraXBXaGl0ZXNwYWNlKGJlZ2luKTsKKyAgICAgICAgaWYgKGJlZ2lu
ID09IGVuZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGF1dG8gZmly
c3RQYXJ0RW5kID0gY29sbGVjdFZhbHVlKGJlZ2luKTsKKyAgICAgICAgaWYgKGZpcnN0UGFydEVu
ZCA9PSBiZWdpbikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIGZpcnN0UGFy
dCA9IG1hcHBpbmdTdHJpbmcuc3Vic3RyaW5nKGJlZ2luLCBmaXJzdFBhcnRFbmQgLSBiZWdpbiku
dG9BdG9tU3RyaW5nKCk7CisKKyAgICAgICAgYmVnaW4gPSBza2lwV2hpdGVzcGFjZShmaXJzdFBh
cnRFbmQpOworICAgICAgICBpZiAoYmVnaW4gPT0gZW5kKSB7CisgICAgICAgICAgICBtYXBwaW5n
cy5hZGQoZmlyc3RQYXJ0LCBmaXJzdFBhcnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKG1hcHBpbmdTdHJpbmdbYmVnaW5dICE9ICc6JykKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBiZWdpbiA9IHNraXBXaGl0ZXNwYWNlKGJlZ2luICsgMSk7
CisKKyAgICAgICAgYXV0byBzZWNvbmRQYXJ0RW5kID0gY29sbGVjdFZhbHVlKGJlZ2luKTsKKyAg
ICAgICAgaWYgKHNlY29uZFBhcnRFbmQgPT0gYmVnaW4pCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgYXV0byBzZWNvbmRQYXJ0ID0gbWFwcGluZ1N0cmluZy5zdWJzdHJpbmcoYmVnaW4s
IHNlY29uZFBhcnRFbmQgLSBiZWdpbikudG9BdG9tU3RyaW5nKCk7CisKKyAgICAgICAgYmVnaW4g
PSBza2lwV2hpdGVzcGFjZShzZWNvbmRQYXJ0RW5kKTsKKyAgICAgICAgaWYgKGJlZ2luID09IGVu
ZCkKKyAgICAgICAgICAgIG1hcHBpbmdzLmFkZChmaXJzdFBhcnQsIHNlY29uZFBhcnQpOworICAg
IH07CisKKyAgICBjb25zdCBzaXplX3QgZW5kID0gbWFwcGluZ3NMaXN0U3RyaW5nLmxlbmd0aCgp
OworICAgIHNpemVfdCBiZWdpbiA9IDA7CisgICAgd2hpbGUgKGJlZ2luIDwgZW5kKSB7CisgICAg
ICAgIHNpemVfdCBlbnRyeUVuZCA9IGJlZ2luOworCisgICAgICAgIHdoaWxlIChlbnRyeUVuZCA8
IGVuZCAmJiBtYXBwaW5nc0xpc3RTdHJpbmdbZW50cnlFbmRdICE9ICcsJykKKyAgICAgICAgICAg
ICsrZW50cnlFbmQ7CisKKyAgICAgICAgcGFyc2VFbnRyeShtYXBwaW5nc0xpc3RTdHJpbmcuc3Vi
c3RyaW5nKGJlZ2luLCBlbnRyeUVuZCkpOworCisgICAgICAgIGlmIChlbnRyeUVuZCA9PSBlbmQp
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBiZWdpbiA9IGVudHJ5RW5kICsgMTsKKyAg
ICB9Cit9CisKK2NvbnN0IEhhc2hNYXA8QXRvbVN0cmluZywgQXRvbVN0cmluZz4mIFNoYWRvd1Jv
b3Q6OnBhcnRNYXBwaW5ncygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhcnRNYXBwaW5ncykgewor
ICAgICAgICBtX3BhcnRNYXBwaW5ncyA9IG1ha2VVbmlxdWU8SGFzaE1hcDxBdG9tU3RyaW5nLCBB
dG9tU3RyaW5nPj4oKTsKKworICAgICAgICBhdXRvIGV4cG9ydHBhcnRzVmFsdWUgPSBob3N0KCkt
PmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpleHBvcnRwYXJ0c0F0
dHIpOworICAgICAgICBwYXJzZVBhcnRNYXBwaW5ncygqbV9wYXJ0TWFwcGluZ3MsIGV4cG9ydHBh
cnRzVmFsdWUpOworICAgIH0KKworICAgIHJldHVybiAqbV9wYXJ0TWFwcGluZ3M7Cit9CisKK3Zv
aWQgU2hhZG93Um9vdDo6aW52YWxpZGF0ZVBhcnRNYXBwaW5ncygpCit7CisgICAgbV9wYXJ0TWFw
cGluZ3MgPSBudWxscHRyOworfQorCiBWZWN0b3I8U2hhZG93Um9vdCo+IGFzc2lnbmVkU2hhZG93
Um9vdHNJZlNsb3R0ZWQoY29uc3QgTm9kZSYgbm9kZSkKIHsKICAgICBWZWN0b3I8U2hhZG93Um9v
dCo+IHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCmluZGV4IDljYmVlNWE3NTU2Li5jOGRi
NmYxMGMwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRl
ICJTaGFkb3dSb290TW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtOTIsNiArOTMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBtb3ZlU2hh
ZG93Um9vdFRvTmV3UGFyZW50U2NvcGUoVHJlZVNjb3BlJiwgRG9jdW1lbnQmKTsKICAgICB2b2lk
IG1vdmVTaGFkb3dSb290VG9OZXdEb2N1bWVudChEb2N1bWVudCYpOwogCisgICAgY29uc3QgSGFz
aE1hcDxBdG9tU3RyaW5nLCBBdG9tU3RyaW5nPiYgcGFydE1hcHBpbmdzKCkgY29uc3Q7CisgICAg
dm9pZCBpbnZhbGlkYXRlUGFydE1hcHBpbmdzKCk7CisKIHByb3RlY3RlZDoKICAgICBTaGFkb3dS
b290KERvY3VtZW50JiwgU2hhZG93Um9vdE1vZGUpOwogCkBAIC0xMTYsNiArMTIwLDcgQEAgcHJp
dmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHlsZTo6U2NvcGU+IG1fc3R5bGVTY29wZTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdEFzc2lnbm1lbnQ+IG1fc2xvdEFzc2lnbm1lbnQ7Cisg
ICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1hcDxBdG9tU3RyaW5nLCBBdG9tU3RyaW5n
Pj4gbV9wYXJ0TWFwcGluZ3M7CiB9OwogCiBpbmxpbmUgRWxlbWVudCogU2hhZG93Um9vdDo6YWN0
aXZlRWxlbWVudCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
dHRyaWJ1dGVOYW1lcy5pbiBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVz
LmluCmluZGV4IGZiMjZkYjc2ZmU0Li4wNWIzN2E0NmRiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQXR0cmlidXRlTmFtZXMuaW4KQEAgLTEyMyw2ICsxMjMsNyBAQCBlbmN0eXBlCiBlbmQK
IGV2ZW50CiBleHBhbmRlZAorZXhwb3J0cGFydHMKIGZhY2UKIGZpbGVuYW1lCiBmb2N1c2VkCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380146</attachid>
            <date>2019-10-03 11:41:51 -0700</date>
            <delta_ts>2019-10-03 23:49:35 -0700</delta_ts>
            <desc>patch</desc>
            <filename>css-shadow-parts-export-2.patch</filename>
            <type>text/plain</type>
            <size>22036</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IDM0ZmI1NDQ2N2EwLi43NTlmYmFhYWQ1
NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTkt
MTAtMDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFtDU1Mg
U2hhZG93IFBhcnRzXSBTdXBwb3J0ICdleHBvcnRwYXJ0cycgYXR0cmlidXRlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI1MjAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9kb3VibGUtZm9yd2FyZC1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2hhZG93LXBhcnRzL2ludmFsaWRhdGlv
bi1jaGFuZ2UtZXhwb3J0cGFydHMtZm9yd2FyZC1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2hhZG93LXBhcnRzL2ludmFsaWRhdGlvbi1jaGFuZ2Ut
cGFydC1uYW1lLWZvcndhcmQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10
ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9pbnZhbGlkYXRpb24tY29tcGxleC1zZWxlY3Rvci1m
b3J3YXJkLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nz
cy1zaGFkb3ctcGFydHMvcHJlY2VkZW5jZS1wYXJ0LXZzLXBhcnQtZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9zaW1wbGUtZm9y
d2FyZC1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mt
c2hhZG93LXBhcnRzL3NpbXBsZS1mb3J3YXJkLXNob3J0aGFuZC1leHBlY3RlZC50eHQ6CisKIDIw
MTktMTAtMDIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtD
U1MgU2hhZG93IFBhcnRzXSBTdXBwb3J0IG11bHRpcGxlIGFyZ3VtZW50cyBmb3IgOjpwYXJ0KCkK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
Y3NzL2Nzcy1zaGFkb3ctcGFydHMvZG91YmxlLWZvcndhcmQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0
cy9kb3VibGUtZm9yd2FyZC1leHBlY3RlZC50eHQKaW5kZXggZjM2OTJjMDY0OWYuLmE0NjI4YTY0
NWJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL2Nzcy9jc3Mtc2hhZG93LXBhcnRzL2RvdWJsZS1mb3J3YXJkLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2hh
ZG93LXBhcnRzL2RvdWJsZS1mb3J3YXJkLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDQgQEAKIFRo
ZSBmb2xsb3dpbmcgdGV4dCBzaG91bGQgYmUgZ3JlZW46IAogCi1GQUlMIFBhcnQgaW4gaW5uZXIg
aG9zdCBpcyBmb3J3YXJkZWQgdGhyb3VnaCB0aGUgbWlkZGxlIGhvc3QgZm9yIHN0eWxpbmcgYnkg
ZG9jdW1lbnQgc3R5bGUgc2hlZXQgYXNzZXJ0X2VxdWFsczogZXhwZWN0ZWQgInJnYigwLCAxMjgs
IDApIiBidXQgZ290ICJyZ2IoMjU1LCAwLCAwKSIKK1BBU1MgUGFydCBpbiBpbm5lciBob3N0IGlz
IGZvcndhcmRlZCB0aHJvdWdoIHRoZSBtaWRkbGUgaG9zdCBmb3Igc3R5bGluZyBieSBkb2N1bWVu
dCBzdHlsZSBzaGVldCAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9pbnZhbGlkYXRpb24tY2hhbmdl
LWV4cG9ydHBhcnRzLWZvcndhcmQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9pbnZhbGlkYXRpb24t
Y2hhbmdlLWV4cG9ydHBhcnRzLWZvcndhcmQtZXhwZWN0ZWQudHh0CmluZGV4IDIyODRmMmJlZGIz
Li42YjUzMDJhYjAzNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9pbnZhbGlkYXRpb24tY2hhbmdlLWV4
cG9ydHBhcnRzLWZvcndhcmQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvaW52YWxpZGF0aW9u
LWNoYW5nZS1leHBvcnRwYXJ0cy1mb3J3YXJkLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDQgQEAK
IFRoZSBmb2xsb3dpbmcgdGV4dCBzaG91bGQgYmUgZ3JlZW46IAogCi1GQUlMIFBhcnQgaW4gc2Vs
ZWN0ZWQgaG9zdCBjaGFuZ2VkIGNvbG9yIGFzc2VydF9ub3RfZXF1YWxzOiBnb3QgZGlzYWxsb3dl
ZCB2YWx1ZSAicmdiKDAsIDEyOCwgMCkiCitGQUlMIFBhcnQgaW4gc2VsZWN0ZWQgaG9zdCBjaGFu
Z2VkIGNvbG9yIGFzc2VydF9ub3RfZXF1YWxzOiBnb3QgZGlzYWxsb3dlZCB2YWx1ZSAicmdiKDI1
NSwgMCwgMCkiCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvaW52YWxpZGF0aW9uLWNoYW5nZS1wYXJ0
LW5hbWUtZm9yd2FyZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2hhZG93LXBhcnRzL2ludmFsaWRhdGlvbi1jaGFuZ2Ut
cGFydC1uYW1lLWZvcndhcmQtZXhwZWN0ZWQudHh0CmluZGV4IDIyODRmMmJlZGIzLi42YjUzMDJh
YjAzNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9pbnZhbGlkYXRpb24tY2hhbmdlLXBhcnQtbmFtZS1m
b3J3YXJkLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2hhZG93LXBhcnRzL2ludmFsaWRhdGlvbi1jaGFuZ2UtcGFy
dC1uYW1lLWZvcndhcmQtZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsNCBAQAogVGhlIGZvbGxvd2lu
ZyB0ZXh0IHNob3VsZCBiZSBncmVlbjogCiAKLUZBSUwgUGFydCBpbiBzZWxlY3RlZCBob3N0IGNo
YW5nZWQgY29sb3IgYXNzZXJ0X25vdF9lcXVhbHM6IGdvdCBkaXNhbGxvd2VkIHZhbHVlICJyZ2Io
MCwgMTI4LCAwKSIKK0ZBSUwgUGFydCBpbiBzZWxlY3RlZCBob3N0IGNoYW5nZWQgY29sb3IgYXNz
ZXJ0X25vdF9lcXVhbHM6IGdvdCBkaXNhbGxvd2VkIHZhbHVlICJyZ2IoMjU1LCAwLCAwKSIKIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9j
c3MvY3NzLXNoYWRvdy1wYXJ0cy9pbnZhbGlkYXRpb24tY29tcGxleC1zZWxlY3Rvci1mb3J3YXJk
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvaW52YWxpZGF0aW9uLWNvbXBsZXgtc2VsZWN0b3ItZm9y
d2FyZC1leHBlY3RlZC50eHQKaW5kZXggMmE2NGQ3MWFlNGEuLmM0YmNjMjRlODE4IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mt
c2hhZG93LXBhcnRzL2ludmFsaWRhdGlvbi1jb21wbGV4LXNlbGVjdG9yLWZvcndhcmQtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
Y3NzL2Nzcy1zaGFkb3ctcGFydHMvaW52YWxpZGF0aW9uLWNvbXBsZXgtc2VsZWN0b3ItZm9yd2Fy
ZC1leHBlY3RlZC50eHQKQEAgLTEsNCArMSw0IEBACiBUaGUgZm9sbG93aW5nIHRleHQgc2hvdWxk
IGJlIGdyZWVuOgogCi1GQUlMIFBhcnQgaW4gc2VsZWN0ZWQgaG9zdCBjaGFuZ2VkIGNvbG9yIGFz
c2VydF9ub3RfZXF1YWxzOiBnb3QgZGlzYWxsb3dlZCB2YWx1ZSAicmdiKDAsIDEyOCwgMCkiCitQ
QVNTIFBhcnQgaW4gc2VsZWN0ZWQgaG9zdCBjaGFuZ2VkIGNvbG9yIAogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2hhZG93
LXBhcnRzL3ByZWNlZGVuY2UtcGFydC12cy1wYXJ0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvcHJl
Y2VkZW5jZS1wYXJ0LXZzLXBhcnQtZXhwZWN0ZWQudHh0CmluZGV4IGM3Zjg3MTYwZmRjLi40MGVl
NjY5OTI2YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9wcmVjZWRlbmNlLXBhcnQtdnMtcGFydC1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9wcmVjZWRlbmNlLXBhcnQtdnMtcGFydC1leHBlY3RlZC50
eHQKQEAgLTEsNCArMSw0IEBACiBUaGUgZm9sbG93aW5nIHRleHQgc2hvdWxkIGJlIGdyZWVuOiAK
IAotRkFJTCBTdHlsZSBmcm9tIGRvY3VtZW50IG92ZXJyaWRlcyBzdHlsZSBmcm9tIG91dGVyIENF
IGFzc2VydF9lcXVhbHM6IGV4cGVjdGVkICJyZ2IoMCwgMTI4LCAwKSIgYnV0IGdvdCAicmdiKDI1
NSwgMCwgMCkiCitQQVNTIFN0eWxlIGZyb20gZG9jdW1lbnQgb3ZlcnJpZGVzIHN0eWxlIGZyb20g
b3V0ZXIgQ0UgCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvc2ltcGxlLWZvcndhcmQtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3Nz
LXNoYWRvdy1wYXJ0cy9zaW1wbGUtZm9yd2FyZC1leHBlY3RlZC50eHQKaW5kZXggMzFmMDlhNjIx
YjUuLjMwODk1ZTE1NTc4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2hhZG93LXBhcnRzL3NpbXBsZS1mb3J3YXJkLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2Nzcy9jc3Mtc2hhZG93LXBhcnRzL3NpbXBsZS1mb3J3YXJkLWV4cGVjdGVkLnR4dApAQCAtMSw0
ICsxLDQgQEAKIFRoZSBmb2xsb3dpbmcgdGV4dCBzaG91bGQgYmUgZ3JlZW46IAogCi1GQUlMIFBh
cnQgaW4gaW5uZXIgaG9zdCBpcyBmb3J3YXJkZWQgZm9yIHN0eWxpbmcgYnkgZG9jdW1lbnQgc3R5
bGUgc2hlZXQgYXNzZXJ0X2VxdWFsczogZXhwZWN0ZWQgInJnYigwLCAxMjgsIDApIiBidXQgZ290
ICJyZ2IoMjU1LCAwLCAwKSIKK1BBU1MgUGFydCBpbiBpbm5lciBob3N0IGlzIGZvcndhcmRlZCBm
b3Igc3R5bGluZyBieSBkb2N1bWVudCBzdHlsZSBzaGVldCAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0
cy9zaW1wbGUtZm9yd2FyZC1zaG9ydGhhbmQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9zaW1wbGUt
Zm9yd2FyZC1zaG9ydGhhbmQtZXhwZWN0ZWQudHh0CmluZGV4IGJmMzA0MjdlMGYwLi43ZTY1ZDFh
MjljNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9zaW1wbGUtZm9yd2FyZC1zaG9ydGhhbmQtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
Y3NzL2Nzcy1zaGFkb3ctcGFydHMvc2ltcGxlLWZvcndhcmQtc2hvcnRoYW5kLWV4cGVjdGVkLnR4
dApAQCAtMSw0ICsxLDQgQEAKIFRoZSBmb2xsb3dpbmcgdGV4dCBzaG91bGQgYmUgZ3JlZW46IAog
Ci1GQUlMIFBhcnQgaW4gaW5uZXIgaG9zdCBpcyBmb3J3YXJkZWQsIHVuZGVyIHRoZSBzYW1lIG5h
bWUsIGZvciBzdHlsaW5nIGJ5IGRvY3VtZW50IHN0eWxlIHNoZWV0IGFzc2VydF9lcXVhbHM6IGV4
cGVjdGVkICJyZ2IoMCwgMTI4LCAwKSIgYnV0IGdvdCAicmdiKDI1NSwgMCwgMCkiCitQQVNTIFBh
cnQgaW4gaW5uZXIgaG9zdCBpcyBmb3J3YXJkZWQsIHVuZGVyIHRoZSBzYW1lIG5hbWUsIGZvciBz
dHlsaW5nIGJ5IGRvY3VtZW50IHN0eWxlIHNoZWV0IAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjhkMTk3MGJh
YWIuLjVkM2E4OTA4ZTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTktMTAtMDMg
IEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFtDU1MgU2hhZG93
IFBhcnRzXSBTdXBwb3J0ICdleHBvcnRwYXJ0cycgYXR0cmlidXRlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI1MjAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdXBwb3J0ICdleHBvcnRwYXJ0cycgYXR0
cmlidXRlIGZvciBleHBvcnRpbmcgcGFydCBtYXBwaW5ncyBmcm9tIHN1YmNvbXBvbmVudHMuCisK
KyAgICAgICAgKiBjc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoQXV0aG9yUnVsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoUGFydFBzZXVkb0VsZW1lbnRSdWxlcyk6
CisKKyAgICAgICAgUmVjdXJzZSB0byBjb250YWluaW5nIHNjb3BlcyB0byBjb2xsZWN0IHBhcnQg
cnVsZXMgaWYgdGhlcmUgYXJlIGV4cG9ydGVkIG1hcHBpbmdzLgorCisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNoZXMpOgorICAgICAgICAqIGNzcy9FbGVt
ZW50UnVsZUNvbGxlY3Rvci5oOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRjaFJlY3Vyc2l2ZWx5IGNvbnN0
KToKKworICAgICAgICBNYWtlIFNoYWRvd0Rlc2NlbmRhbnQgZmFrZSBjb21iaW5hdG9yIHNraXAg
ZGlyZWN0bHkgdG8gdGhlIHNjb3BlIHdoZXJlIHRoZSBwYXJ0IHJ1bGVzIGFyZSBjb21pbmcgZnJv
bS4KKworICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZSBjb25zdCk6
CisKKyAgICAgICAgUmVzb2x2ZSBuYW1lcyB2aWEgbWFwcGluZ3MgaWYgbmVlZGVkLgorCisgICAg
ICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQpOgorCisgICAgICAg
IEludmFsaWRhdGUgbWFwcGluZ3MgYXMgbmVlZGVkLgorCisgICAgICAgICogZG9tL1NoYWRvd1Jv
b3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VQYXJ0TWFwcGluZ3MpOgorCisgICAgICAg
IFBhcnNlIHRoZSBtYXBwaW5ncyBtaWNyb3N5bnRheC4KKworICAgICAgICAoV2ViQ29yZTo6U2hh
ZG93Um9vdDo6cGFydE1hcHBpbmdzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jv
b3Q6OmludmFsaWRhdGVQYXJ0TWFwcGluZ3MpOgorICAgICAgICAqIGRvbS9TaGFkb3dSb290Lmg6
CisgICAgICAgICogaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW46CisKIDIwMTktMTAtMDIgIEFu
dHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtDU1MgU2hhZG93IFBh
cnRzXSBTdXBwb3J0IG11bHRpcGxlIGFyZ3VtZW50cyBmb3IgOjpwYXJ0KCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4IGU2ODNhOTdlMWE4Li5kZjlh
YmFiNmViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVj
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3Bw
CkBAIC0yMDUsNyArMjA1LDcgQEAgdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hBdXRo
b3JSdWxlcyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogICAgICAgICBtYXRjaEF1dGhvclNoYWRv
d1BzZXVkb0VsZW1lbnRSdWxlcyhpbmNsdWRlRW1wdHlSdWxlcywgcnVsZVJhbmdlKTsKIAogICAg
ICAgICBpZiAoIW1fZWxlbWVudC5wYXJ0TmFtZXMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBt
YXRjaFBhcnRQc2V1ZG9FbGVtZW50UnVsZXMoaW5jbHVkZUVtcHR5UnVsZXMsIHJ1bGVSYW5nZSk7
CisgICAgICAgICAgICBtYXRjaFBhcnRQc2V1ZG9FbGVtZW50UnVsZXMoKm1fZWxlbWVudC5jb250
YWluaW5nU2hhZG93Um9vdCgpLCBpbmNsdWRlRW1wdHlSdWxlcywgcnVsZVJhbmdlKTsKICAgICB9
CiAKICAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoKTsKQEAgLTI2MywxNCArMjYzLDI2
IEBAIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoU2xvdHRlZFBzZXVkb0VsZW1lbnRS
dWxlcyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzCiAgICAgfQogfQogCi12b2lkIEVsZW1lbnRSdWxl
Q29sbGVjdG9yOjptYXRjaFBhcnRQc2V1ZG9FbGVtZW50UnVsZXMoYm9vbCBpbmNsdWRlRW1wdHlS
dWxlcywgU3R5bGVSZXNvbHZlcjo6UnVsZVJhbmdlJiBydWxlUmFuZ2UpCit2b2lkIEVsZW1lbnRS
dWxlQ29sbGVjdG9yOjptYXRjaFBhcnRQc2V1ZG9FbGVtZW50UnVsZXMoY29uc3QgU2hhZG93Um9v
dCYgY29udGFpbmluZ1NoYWRvd1Jvb3QsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMsIFN0eWxlUmVz
b2x2ZXI6OlJ1bGVSYW5nZSYgcnVsZVJhbmdlKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQuaXNJ
blNoYWRvd1RyZWUoKSk7Ci0gICAgYXV0byYgc2hhZG93Um9vdCA9ICptX2VsZW1lbnQuY29udGFp
bmluZ1NoYWRvd1Jvb3QoKTsKLSAgICBhdXRvJiBob3N0QXV0aG9yUnVsZXMgPSBTdHlsZTo6U2Nv
cGU6OmZvck5vZGUoKnNoYWRvd1Jvb3QuaG9zdCgpKS5yZXNvbHZlcigpLnJ1bGVTZXRzKCkuYXV0
aG9yU3R5bGUoKTsKKyAgICBBU1NFUlQoIW1fZWxlbWVudC5wYXJ0TmFtZXMoKS5pc0VtcHR5KCkp
OwogCi0gICAgTWF0Y2hSZXF1ZXN0IGhvc3RBdXRob3JSZXF1ZXN0IHsgJmhvc3RBdXRob3JSdWxl
cywgaW5jbHVkZUVtcHR5UnVsZXMsIFN0eWxlOjpTY29wZU9yZGluYWw6OkNvbnRhaW5pbmdIb3N0
IH07Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KCZob3N0QXV0aG9yUnVsZXMucGFy
dFBzZXVkb0VsZW1lbnRSdWxlcygpLCBob3N0QXV0aG9yUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAg
ICBhdXRvJiBzaGFkb3dIb3N0ID0gKmNvbnRhaW5pbmdTaGFkb3dSb290Lmhvc3QoKTsKKyAgICB7
CisgICAgICAgIFNldEZvclNjb3BlPGNvbnN0IEVsZW1lbnQqPiBwYXJ0TWF0Y2hpbmdTY29wZSht
X3NoYWRvd0hvc3RJblBhcnRSdWxlU2NvcGUsICZzaGFkb3dIb3N0KTsKKworICAgICAgICBhdXRv
JiBob3N0QXV0aG9yUnVsZXMgPSBTdHlsZTo6U2NvcGU6OmZvck5vZGUoc2hhZG93SG9zdCkucmVz
b2x2ZXIoKS5ydWxlU2V0cygpLmF1dGhvclN0eWxlKCk7CisKKyAgICAgICAgTWF0Y2hSZXF1ZXN0
IGhvc3RBdXRob3JSZXF1ZXN0IHsgJmhvc3RBdXRob3JSdWxlcywgaW5jbHVkZUVtcHR5UnVsZXMs
IFN0eWxlOjpTY29wZU9yZGluYWw6OkNvbnRhaW5pbmdIb3N0IH07CisgICAgICAgIGNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yTGlzdCgmaG9zdEF1dGhvclJ1bGVzLnBhcnRQc2V1ZG9FbGVtZW50UnVs
ZXMoKSwgaG9zdEF1dGhvclJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgfQorCisgICAgLy8gRWxl
bWVudCBtYXkgYmUgZXhwb3NlZCB0byBzdHlsaW5nIGZyb20gZW5jbG9zaW5nIHNjb3BlcyB2aWEg
ZXhwb3J0cGFydHMgYXR0cmlidXRlcy4KKyAgICBpZiAoIWNvbnRhaW5pbmdTaGFkb3dSb290LnBh
cnRNYXBwaW5ncygpLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoYXV0byogcGFyZW50U2hhZG93
Um9vdCA9IHNoYWRvd0hvc3QuY29udGFpbmluZ1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAgIG1h
dGNoUGFydFBzZXVkb0VsZW1lbnRSdWxlcygqcGFyZW50U2hhZG93Um9vdCwgaW5jbHVkZUVtcHR5
UnVsZXMsIHJ1bGVSYW5nZSk7CisgICAgfQogfQogCiB2b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9y
Ojpjb2xsZWN0TWF0Y2hpbmdTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoY29uc3QgTWF0Y2hSZXF1
ZXN0JiBtYXRjaFJlcXVlc3QsIFN0eWxlUmVzb2x2ZXI6OlJ1bGVSYW5nZSYgcnVsZVJhbmdlKQpA
QCAtNDI4LDYgKzQ0MCw3IEBAIGlubGluZSBib29sIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxl
TWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIHVuc2lnbmVkCiAgICAgY29udGV4dC5z
Y3JvbGxiYXIgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5zY3JvbGxiYXI7CiAgICAgY29udGV4dC5z
Y3JvbGxiYXJQYXJ0ID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3Quc2Nyb2xsYmFyUGFydDsKICAgICBj
b250ZXh0LmlzTWF0Y2hpbmdIb3N0UHNldWRvQ2xhc3MgPSBtX2lzTWF0Y2hpbmdIb3N0UHNldWRv
Q2xhc3M7CisgICAgY29udGV4dC5zaGFkb3dIb3N0SW5QYXJ0UnVsZVNjb3BlID0gbV9zaGFkb3dI
b3N0SW5QYXJ0UnVsZVNjb3BlOwogCiAgICAgYm9vbCBzZWxlY3Rvck1hdGNoZXM7CiAjaWYgRU5B
QkxFKENTU19TRUxFQ1RPUl9KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxl
bWVudFJ1bGVDb2xsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxl
Y3Rvci5oCmluZGV4IGEwNjIzNzhhOTc5Li5kYTkwMTk4YzEyYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIG1hdGNoQXV0aG9yU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMsIFN0eWxlUmVzb2x2ZXI6OlJ1bGVSYW5nZSYpOwogICAgIHZvaWQgbWF0Y2hIb3N0
UHNldWRvQ2xhc3NSdWxlcyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzLCBTdHlsZVJlc29sdmVyOjpS
dWxlUmFuZ2UmKTsKICAgICB2b2lkIG1hdGNoU2xvdHRlZFBzZXVkb0VsZW1lbnRSdWxlcyhib29s
IGluY2x1ZGVFbXB0eVJ1bGVzLCBTdHlsZVJlc29sdmVyOjpSdWxlUmFuZ2UmKTsKLSAgICB2b2lk
IG1hdGNoUGFydFBzZXVkb0VsZW1lbnRSdWxlcyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzLCBTdHls
ZVJlc29sdmVyOjpSdWxlUmFuZ2UmKTsKKyAgICB2b2lkIG1hdGNoUGFydFBzZXVkb0VsZW1lbnRS
dWxlcyhjb25zdCBTaGFkb3dSb290JiBjb250YWluaW5nU2hhZG93Um9vdCwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcywgU3R5bGVSZXNvbHZlcjo6UnVsZVJhbmdlJik7CiAKICAgICB2b2lkIGNvbGxl
Y3RNYXRjaGluZ1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyhjb25zdCBNYXRjaFJlcXVlc3QmLCBT
dHlsZVJlc29sdmVyOjpSdWxlUmFuZ2UmKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVsZVNldDo6
UnVsZURhdGFWZWN0b3I+IGNvbGxlY3RTbG90dGVkUHNldWRvRWxlbWVudFJ1bGVzRm9yU2xvdChi
b29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKQEAgLTEwMCw2ICsxMDAsNyBAQCBwcml2YXRlOgogICAg
IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSBtX21vZGUgeyBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlJl
c29sdmluZ1N0eWxlIH07CiAgICAgYm9vbCBtX2lzTWF0Y2hpbmdTbG90dGVkUHNldWRvRWxlbWVu
dHMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc01hdGNoaW5nSG9zdFBzZXVkb0NsYXNzIHsgZmFs
c2UgfTsKKyAgICBjb25zdCBFbGVtZW50KiBtX3NoYWRvd0hvc3RJblBhcnRSdWxlU2NvcGUgeyBu
dWxscHRyIH07CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxSdWxlU2V0OjpSdWxlRGF0YVZl
Y3Rvcj4+IG1fa2VlcEFsaXZlU2xvdHRlZFBzZXVkb0VsZW1lbnRSdWxlczsKIAogICAgIFZlY3Rv
cjxNYXRjaGVkUnVsZSwgNjQ+IG1fbWF0Y2hlZFJ1bGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JDaGVja2VyLmNwcAppbmRleCAyOWQwY2IwYzM5OS4uMTEwNjBkYTliYzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCkBAIC00MjksMTAgKzQyOSwxMSBAQCBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoUmVzdWx0IFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVseShD
aGVja2luZ0NvbnRleHQmCiAgICAgICAgIH0KICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dE
ZXNjZW5kYW50OgogICAgICAgICB7Ci0gICAgICAgICAgICBFbGVtZW50KiBzaGFkb3dIb3N0Tm9k
ZSA9IGNvbnRleHQuZWxlbWVudC0+c2hhZG93SG9zdCgpOwotICAgICAgICAgICAgaWYgKCFzaGFk
b3dIb3N0Tm9kZSkKKyAgICAgICAgICAgIC8vIFdoZW4gbWF0Y2hpbmcgZm9vOjpwYXJ0KGJhcikg
d2Ugc2tpcCBkaXJlY3RseSB0byB0aGUgdHJlZSBvZiBlbGVtZW50ICdmb28nLgorICAgICAgICAg
ICAgYXV0byogc2hhZG93SG9zdCA9IGNoZWNraW5nQ29udGV4dC5zaGFkb3dIb3N0SW5QYXJ0UnVs
ZVNjb3BlID8gY2hlY2tpbmdDb250ZXh0LnNoYWRvd0hvc3RJblBhcnRSdWxlU2NvcGUgOiBjb250
ZXh0LmVsZW1lbnQtPnNoYWRvd0hvc3QoKTsKKyAgICAgICAgICAgIGlmICghc2hhZG93SG9zdCkK
ICAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3Rv
ckZhaWxzQ29tcGxldGVseSk7Ci0gICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gc2hh
ZG93SG9zdE5vZGU7CisgICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gc2hhZG93SG9z
dDsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0g
bmV4dENvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5pc1N1YmplY3RP
ckFkamFjZW50RWxlbWVudCA9IGZhbHNlOwogICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3Jl
RHluYW1pY1BzZXVkbzsKQEAgLTExNDksMTMgKzExNTAsMzIgQEAgYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrT25lKENoZWNraW5nQ29udGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25zdCBMb2Nh
bENvbnQKICAgICAgICAgICAgIEFTU0VSVChjaGVja2luZ0NvbnRleHQucmVzb2x2aW5nTW9kZSA9
PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXMpOwogICAgICAgICAgICAgcmV0dXJuIGlzPEhUTUxTbG90
RWxlbWVudD4oZWxlbWVudCk7CiAKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxl
bWVudFBhcnQ6CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRQYXJ0OiB7
CisgICAgICAgICAgICBhdXRvIG1hcFBhcnROYW1lID0gWyZdKEF0b21TdHJpbmcgcGFydE5hbWUp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8qIHNoYWRvd1Jvb3QgPSBlbGVtZW50LmNvbnRh
aW5pbmdTaGFkb3dSb290KCk7IHNoYWRvd1Jvb3Q7IHNoYWRvd1Jvb3QgPSBzaGFkb3dSb290LT5o
b3N0KCktPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
QXBwbHkgbWFwcGluZ3MgdXAgdG8gdGhlIHNjb3BlIHRoZSBydWxlcyBhcmUgY29taW5nIGZyb20u
CisgICAgICAgICAgICAgICAgICAgIGlmIChzaGFkb3dSb290LT5ob3N0KCkgPT0gY2hlY2tpbmdD
b250ZXh0LnNoYWRvd0hvc3RJblBhcnRSdWxlU2NvcGUpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgcGFydE5hbWUgPSBzaGFkb3dSb290LT5wYXJ0
TWFwcGluZ3MoKS5nZXQocGFydE5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAocGFydE5h
bWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEF0b21TdHJpbmco
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnROYW1lOwor
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgVmVjdG9yPEF0b21TdHJpbmcsIDM+IG1hcHBl
ZEVsZW1lbnRQYXJ0TmFtZXM7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZWxlbWVudC5wYXJ0TmFtZXMoKS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGF1dG8g
bWFwcGVkUGFydCA9IG1hcFBhcnROYW1lKGVsZW1lbnQucGFydE5hbWVzKClbaV0pOworICAgICAg
ICAgICAgICAgIGlmICghbWFwcGVkUGFydC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAg
IG1hcHBlZEVsZW1lbnRQYXJ0TmFtZXMuYXBwZW5kKG1hcHBlZFBhcnQpOworICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICBmb3IgKGF1dG8mIHBhcnQgOiAqc2VsZWN0b3IuYXJndW1lbnRMaXN0
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQucGFydE5hbWVzKCkuY29udGFpbnMo
cGFydCkpCisgICAgICAgICAgICAgICAgaWYgKCFtYXBwZWRFbGVtZW50UGFydE5hbWVzLmNvbnRh
aW5zKHBhcnQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQorICAgICAgICB9CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5oCmluZGV4IDYwYjdlZWE1MTcwLi4yYTQ4Y2MyOTc0OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaApAQCAtODQsNiArODQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIFNjcm9sbGJhclBhcnQgc2Nyb2xsYmFyUGFydCB7IE5vUGFydCB9OwogICAgICAgICBjb25z
dCBDb250YWluZXJOb2RlKiBzY29wZSB7IG51bGxwdHIgfTsKICAgICAgICAgYm9vbCBpc01hdGNo
aW5nSG9zdFBzZXVkb0NsYXNzIHsgZmFsc2UgfTsKKyAgICAgICAgY29uc3QgRWxlbWVudCogc2hh
ZG93SG9zdEluUGFydFJ1bGVTY29wZSB7IG51bGxwdHIgfTsKIAogICAgICAgICAvLyBGSVhNRTog
SXQgd291bGQgYmUgbmljZXIgdG8gaGF2ZSBhIHNlcGFyYXRlIG9iamVjdCBmb3IgcmV0dXJuIHZh
bHVlcy4gVGhpcyByZXF1aXJlcyBzb21lIG1vcmUgd29yayBpbiB0aGUgc2VsZWN0b3IgY29tcGls
ZXIuCiAgICAgICAgIFN0eWxlOjpSZWxhdGlvbnMgc3R5bGVSZWxhdGlvbnM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKaW5kZXggMGI5YzEzOGFhZjcuLjRjOTIzNjUxODlkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCkBAIC0xNzE5LDggKzE3MTksNiBAQCB2b2lkIEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgb2xkVgogICAg
ICAgICAgICAgZG9jdW1lbnQoKS5pbnZhbGlkYXRlQWNjZXNzS2V5Q2FjaGUoKTsKICAgICAgICAg
ZWxzZSBpZiAobmFtZSA9PSBIVE1MTmFtZXM6OmNsYXNzQXR0cikKICAgICAgICAgICAgIGNsYXNz
QXR0cmlidXRlQ2hhbmdlZChuZXdWYWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gSFRN
TE5hbWVzOjpwYXJ0QXR0cikKLSAgICAgICAgICAgIHBhcnRBdHRyaWJ1dGVDaGFuZ2VkKG5ld1Zh
bHVlKTsKICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSBIVE1MTmFtZXM6OmlkQXR0cikgewogICAg
ICAgICAgICAgQXRvbVN0cmluZyBvbGRJZCA9IGVsZW1lbnREYXRhKCktPmlkRm9yU3R5bGVSZXNv
bHV0aW9uKCk7CiAgICAgICAgICAgICBBdG9tU3RyaW5nIG5ld0lkID0gbWFrZUlkRm9yU3R5bGVS
ZXNvbHV0aW9uKG5ld1ZhbHVlLCBkb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKTsKQEAgLTE3NDMs
NiArMTc0MSwxMSBAQCB2b2lkIEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgb2xkVgogICAgICAgICAgICAgICAgIGlm
IChhdXRvKiBzaGFkb3dSb290ID0gcGFyZW50LT5zaGFkb3dSb290KCkpCiAgICAgICAgICAgICAg
ICAgICAgIHNoYWRvd1Jvb3QtPmhvc3RDaGlsZEVsZW1lbnREaWRDaGFuZ2VTbG90QXR0cmlidXRl
KCp0aGlzLCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwogICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKG5hbWUgPT0gSFRNTE5hbWVzOjpwYXJ0QXR0cikKKyAgICAgICAgICAgIHBhcnRBdHRy
aWJ1dGVDaGFuZ2VkKG5ld1ZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAobmFtZSAgPT0gSFRNTE5h
bWVzOjpleHBvcnRwYXJ0c0F0dHIpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzaGFkb3dSb290
ID0gdGhpcy0+c2hhZG93Um9vdCgpKQorICAgICAgICAgICAgICAgIHNoYWRvd1Jvb3QtPmludmFs
aWRhdGVQYXJ0TWFwcGluZ3MoKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRv
d1Jvb3QuY3BwCmluZGV4IDY3ODZjMGQyMWUxLi5hYWQ2ZjhlZGY3MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aGFkb3dSb290LmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVl
dC5oIgogI2luY2x1ZGUgIkVsZW1lbnRUcmF2ZXJzYWwuaCIKKyNpbmNsdWRlICJIVE1MUGFyc2Vy
SWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVy
RWxlbWVudC5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTUwLDYg
KzUxLDcgQEAgc3RydWN0IFNhbWVTaXplQXNTaGFkb3dSb290IDogcHVibGljIERvY3VtZW50RnJh
Z21lbnQsIHB1YmxpYyBUcmVlU2NvcGUgewogICAgIHZvaWQqIHN0eWxlU2hlZXRMaXN0OwogICAg
IHZvaWQqIGhvc3Q7CiAgICAgdm9pZCogc2xvdEFzc2lnbm1lbnQ7CisgICAgdm9pZCogcGFydE1h
cHBpbmdzOwogfTsKIAogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFNoYWRvd1Jvb3QpID09IHNpemVv
ZihTYW1lU2l6ZUFzU2hhZG93Um9vdCksIHNoYWRvd3Jvb3Rfc2hvdWxkX3N0YXlfc21hbGwpOwpA
QCAtMjUyLDYgKzI1NCw5MCBAQCBjb25zdCBWZWN0b3I8Tm9kZSo+KiBTaGFkb3dSb290Ojphc3Np
Z25lZE5vZGVzRm9yU2xvdChjb25zdCBIVE1MU2xvdEVsZW1lbnQmIHNsbwogICAgIHJldHVybiBt
X3Nsb3RBc3NpZ25tZW50LT5hc3NpZ25lZE5vZGVzRm9yU2xvdChzbG90LCAqdGhpcyk7CiB9CiAK
K3N0YXRpYyB2b2lkIHBhcnNlUGFydE1hcHBpbmdzTGlzdChIYXNoTWFwPEF0b21TdHJpbmcsIEF0
b21TdHJpbmc+JiBtYXBwaW5ncywgU3RyaW5nVmlldyBtYXBwaW5nc0xpc3RTdHJpbmcpCit7Cisg
ICAgYXV0byBwYXJzZVBhcnRNYXBwaW5nID0gWyZdKFN0cmluZ1ZpZXcgbWFwcGluZ1N0cmluZykg
eworICAgICAgICBjb25zdCBhdXRvIGVuZCA9IG1hcHBpbmdTdHJpbmcubGVuZ3RoKCk7CisKKyAg
ICAgICAgYXV0byBza2lwV2hpdGVzcGFjZSA9IFsmXSAoYXV0byBwb3NpdGlvbikgeworICAgICAg
ICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kICYmIGlzSFRNTFNwYWNlKG1hcHBpbmdTdHJpbmdb
cG9zaXRpb25dKSkKKyAgICAgICAgICAgICAgICArK3Bvc2l0aW9uOworICAgICAgICAgICAgcmV0
dXJuIHBvc2l0aW9uOworICAgICAgICB9OworCisgICAgICAgIGF1dG8gY29sbGVjdFZhbHVlID0g
WyZdIChhdXRvIHBvc2l0aW9uKSB7CisgICAgICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQg
JiYgKCFpc0hUTUxTcGFjZShtYXBwaW5nU3RyaW5nW3Bvc2l0aW9uXSkgJiYgbWFwcGluZ1N0cmlu
Z1twb3NpdGlvbl0gIT0gJzonKSkKKyAgICAgICAgICAgICAgICArK3Bvc2l0aW9uOworICAgICAg
ICAgICAgcmV0dXJuIHBvc2l0aW9uOworICAgICAgICB9OworCisgICAgICAgIHNpemVfdCBiZWdp
biA9IDA7CisgICAgICAgIGJlZ2luID0gc2tpcFdoaXRlc3BhY2UoYmVnaW4pOworICAgICAgICBp
ZiAoYmVnaW4gPT0gZW5kKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
YXV0byBmaXJzdFBhcnRFbmQgPSBjb2xsZWN0VmFsdWUoYmVnaW4pOworICAgICAgICBpZiAoZmly
c3RQYXJ0RW5kID09IGJlZ2luKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8g
Zmlyc3RQYXJ0ID0gbWFwcGluZ1N0cmluZy5zdWJzdHJpbmcoYmVnaW4sIGZpcnN0UGFydEVuZCAt
IGJlZ2luKS50b0F0b21TdHJpbmcoKTsKKworICAgICAgICBiZWdpbiA9IHNraXBXaGl0ZXNwYWNl
KGZpcnN0UGFydEVuZCk7CisgICAgICAgIGlmIChiZWdpbiA9PSBlbmQpIHsKKyAgICAgICAgICAg
IG1hcHBpbmdzLmFkZChmaXJzdFBhcnQsIGZpcnN0UGFydCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBpZiAobWFwcGluZ1N0cmluZ1tiZWdpbl0gIT0gJzonKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGJlZ2luID0gc2tpcFdoaXRlc3BhY2UoYmVn
aW4gKyAxKTsKKworICAgICAgICBhdXRvIHNlY29uZFBhcnRFbmQgPSBjb2xsZWN0VmFsdWUoYmVn
aW4pOworICAgICAgICBpZiAoc2Vjb25kUGFydEVuZCA9PSBiZWdpbikKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBhdXRvIHNlY29uZFBhcnQgPSBtYXBwaW5nU3RyaW5nLnN1YnN0cmlu
ZyhiZWdpbiwgc2Vjb25kUGFydEVuZCAtIGJlZ2luKS50b0F0b21TdHJpbmcoKTsKKworICAgICAg
ICBiZWdpbiA9IHNraXBXaGl0ZXNwYWNlKHNlY29uZFBhcnRFbmQpOworICAgICAgICBpZiAoYmVn
aW4gPT0gZW5kKQorICAgICAgICAgICAgbWFwcGluZ3MuYWRkKGZpcnN0UGFydCwgc2Vjb25kUGFy
dCk7CisgICAgfTsKKworICAgIGNvbnN0IGF1dG8gZW5kID0gbWFwcGluZ3NMaXN0U3RyaW5nLmxl
bmd0aCgpOworCisgICAgc2l6ZV90IGJlZ2luID0gMDsKKyAgICB3aGlsZSAoYmVnaW4gPCBlbmQp
IHsKKyAgICAgICAgc2l6ZV90IG1hcHBpbmdFbmQgPSBiZWdpbjsKKyAgICAgICAgd2hpbGUgKG1h
cHBpbmdFbmQgPCBlbmQgJiYgbWFwcGluZ3NMaXN0U3RyaW5nW21hcHBpbmdFbmRdICE9ICcsJykK
KyAgICAgICAgICAgICsrbWFwcGluZ0VuZDsKKworICAgICAgICBwYXJzZVBhcnRNYXBwaW5nKG1h
cHBpbmdzTGlzdFN0cmluZy5zdWJzdHJpbmcoYmVnaW4sIG1hcHBpbmdFbmQgLSBiZWdpbikpOwor
ICAgICAgICBpZiAobWFwcGluZ0VuZCA9PSBlbmQpCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBiZWdpbiA9IG1hcHBpbmdFbmQgKyAxOworICAgIH0KK30KKworY29uc3QgSGFzaE1hcDxB
dG9tU3RyaW5nLCBBdG9tU3RyaW5nPiYgU2hhZG93Um9vdDo6cGFydE1hcHBpbmdzKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fcGFydE1hcHBpbmdzKSB7CisgICAgICAgIG1fcGFydE1hcHBpbmdzID0g
bWFrZVVuaXF1ZTxIYXNoTWFwPEF0b21TdHJpbmcsIEF0b21TdHJpbmc+PigpOworCisgICAgICAg
IGF1dG8gZXhwb3J0cGFydHNWYWx1ZSA9IGhvc3QoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihIVE1MTmFtZXM6OmV4cG9ydHBhcnRzQXR0cik7CisgICAgICAgIGlmICghZXhwb3J0
cGFydHNWYWx1ZS5pc0VtcHR5KCkgJiYgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS5jc3NTaGFkb3dQYXJ0c0VuYWJsZWQoKSkKKyAgICAgICAgICAgIHBhcnNlUGFydE1h
cHBpbmdzTGlzdCgqbV9wYXJ0TWFwcGluZ3MsIGV4cG9ydHBhcnRzVmFsdWUpOworICAgIH0KKwor
ICAgIHJldHVybiAqbV9wYXJ0TWFwcGluZ3M7Cit9CisKK3ZvaWQgU2hhZG93Um9vdDo6aW52YWxp
ZGF0ZVBhcnRNYXBwaW5ncygpCit7CisgICAgbV9wYXJ0TWFwcGluZ3MgPSBudWxscHRyOworfQor
CiBWZWN0b3I8U2hhZG93Um9vdCo+IGFzc2lnbmVkU2hhZG93Um9vdHNJZlNsb3R0ZWQoY29uc3Qg
Tm9kZSYgbm9kZSkKIHsKICAgICBWZWN0b3I8U2hhZG93Um9vdCo+IHJlc3VsdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2hhZG93Um9vdC5oCmluZGV4IDljYmVlNWE3NTU2Li5jOGRiNmYxMGMwZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2hhZG93Um9vdC5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVu
dC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJTaGFkb3dSb290TW9kZS5oIgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTIs
NiArOTMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBtb3ZlU2hhZG93Um9vdFRvTmV3UGFyZW50U2Nv
cGUoVHJlZVNjb3BlJiwgRG9jdW1lbnQmKTsKICAgICB2b2lkIG1vdmVTaGFkb3dSb290VG9OZXdE
b2N1bWVudChEb2N1bWVudCYpOwogCisgICAgY29uc3QgSGFzaE1hcDxBdG9tU3RyaW5nLCBBdG9t
U3RyaW5nPiYgcGFydE1hcHBpbmdzKCkgY29uc3Q7CisgICAgdm9pZCBpbnZhbGlkYXRlUGFydE1h
cHBpbmdzKCk7CisKIHByb3RlY3RlZDoKICAgICBTaGFkb3dSb290KERvY3VtZW50JiwgU2hhZG93
Um9vdE1vZGUpOwogCkBAIC0xMTYsNiArMTIwLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxTdHlsZTo6U2NvcGU+IG1fc3R5bGVTY29wZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
U2xvdEFzc2lnbm1lbnQ+IG1fc2xvdEFzc2lnbm1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8SGFzaE1hcDxBdG9tU3RyaW5nLCBBdG9tU3RyaW5nPj4gbV9wYXJ0TWFwcGluZ3M7CiB9
OwogCiBpbmxpbmUgRWxlbWVudCogU2hhZG93Um9vdDo6YWN0aXZlRWxlbWVudCgpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbiBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCmluZGV4IGZiMjZkYjc2ZmU0
Li4wNWIzN2E0NmRiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0cmli
dXRlTmFtZXMuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMu
aW4KQEAgLTEyMyw2ICsxMjMsNyBAQCBlbmN0eXBlCiBlbmQKIGV2ZW50CiBleHBhbmRlZAorZXhw
b3J0cGFydHMKIGZhY2UKIGZpbGVuYW1lCiBmb2N1c2VkCg==
</data>
<flag name="review"
          id="395866"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380192</attachid>
            <date>2019-10-03 23:49:35 -0700</date>
            <delta_ts>2019-10-04 01:33:12 -0700</delta_ts>
            <desc>patch</desc>
            <filename>css-shadow-parts-export-3.patch</filename>
            <type>text/plain</type>
            <size>22058</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IDM0ZmI1NDQ2N2EwLi5lOTE2NjExM2M0
MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTkt
MTAtMDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFtDU1Mg
U2hhZG93IFBhcnRzXSBTdXBwb3J0ICdleHBvcnRwYXJ0cycgYXR0cmlidXRlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI1MjAKKworICAgICAgICBS
ZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMv
Y3NzL2Nzcy1zaGFkb3ctcGFydHMvZG91YmxlLWZvcndhcmQtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9pbnZhbGlkYXRpb24t
Y2hhbmdlLWV4cG9ydHBhcnRzLWZvcndhcmQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1w
bGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9pbnZhbGlkYXRpb24tY2hhbmdlLXBh
cnQtbmFtZS1mb3J3YXJkLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvaW52YWxpZGF0aW9uLWNvbXBsZXgtc2VsZWN0b3ItZm9y
d2FyZC1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mt
c2hhZG93LXBhcnRzL3ByZWNlZGVuY2UtcGFydC12cy1wYXJ0LWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvc2ltcGxlLWZvcndh
cmQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNo
YWRvdy1wYXJ0cy9zaW1wbGUtZm9yd2FyZC1zaG9ydGhhbmQtZXhwZWN0ZWQudHh0OgorCiAyMDE5
LTEwLTAyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ1NT
IFNoYWRvdyBQYXJ0c10gU3VwcG9ydCBtdWx0aXBsZSBhcmd1bWVudHMgZm9yIDo6cGFydCgpCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nz
cy9jc3Mtc2hhZG93LXBhcnRzL2RvdWJsZS1mb3J3YXJkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMv
ZG91YmxlLWZvcndhcmQtZXhwZWN0ZWQudHh0CmluZGV4IGYzNjkyYzA2NDlmLi5hNDYyOGE2NDVi
YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9kb3VibGUtZm9yd2FyZC1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRv
dy1wYXJ0cy9kb3VibGUtZm9yd2FyZC1leHBlY3RlZC50eHQKQEAgLTEsNCArMSw0IEBACiBUaGUg
Zm9sbG93aW5nIHRleHQgc2hvdWxkIGJlIGdyZWVuOiAKIAotRkFJTCBQYXJ0IGluIGlubmVyIGhv
c3QgaXMgZm9yd2FyZGVkIHRocm91Z2ggdGhlIG1pZGRsZSBob3N0IGZvciBzdHlsaW5nIGJ5IGRv
Y3VtZW50IHN0eWxlIHNoZWV0IGFzc2VydF9lcXVhbHM6IGV4cGVjdGVkICJyZ2IoMCwgMTI4LCAw
KSIgYnV0IGdvdCAicmdiKDI1NSwgMCwgMCkiCitQQVNTIFBhcnQgaW4gaW5uZXIgaG9zdCBpcyBm
b3J3YXJkZWQgdGhyb3VnaCB0aGUgbWlkZGxlIGhvc3QgZm9yIHN0eWxpbmcgYnkgZG9jdW1lbnQg
c3R5bGUgc2hlZXQgCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvaW52YWxpZGF0aW9uLWNoYW5nZS1l
eHBvcnRwYXJ0cy1mb3J3YXJkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvaW52YWxpZGF0aW9uLWNo
YW5nZS1leHBvcnRwYXJ0cy1mb3J3YXJkLWV4cGVjdGVkLnR4dAppbmRleCAyMjg0ZjJiZWRiMy4u
NmI1MzAyYWIwMzQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvaW52YWxpZGF0aW9uLWNoYW5nZS1leHBv
cnRwYXJ0cy1mb3J3YXJkLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2hhZG93LXBhcnRzL2ludmFsaWRhdGlvbi1j
aGFuZ2UtZXhwb3J0cGFydHMtZm9yd2FyZC1leHBlY3RlZC50eHQKQEAgLTEsNCArMSw0IEBACiBU
aGUgZm9sbG93aW5nIHRleHQgc2hvdWxkIGJlIGdyZWVuOiAKIAotRkFJTCBQYXJ0IGluIHNlbGVj
dGVkIGhvc3QgY2hhbmdlZCBjb2xvciBhc3NlcnRfbm90X2VxdWFsczogZ290IGRpc2FsbG93ZWQg
dmFsdWUgInJnYigwLCAxMjgsIDApIgorRkFJTCBQYXJ0IGluIHNlbGVjdGVkIGhvc3QgY2hhbmdl
ZCBjb2xvciBhc3NlcnRfbm90X2VxdWFsczogZ290IGRpc2FsbG93ZWQgdmFsdWUgInJnYigyNTUs
IDAsIDApIgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL2Nzcy9jc3Mtc2hhZG93LXBhcnRzL2ludmFsaWRhdGlvbi1jaGFuZ2UtcGFydC1u
YW1lLWZvcndhcmQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9pbnZhbGlkYXRpb24tY2hhbmdlLXBh
cnQtbmFtZS1mb3J3YXJkLWV4cGVjdGVkLnR4dAppbmRleCAyMjg0ZjJiZWRiMy4uNmI1MzAyYWIw
MzQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvaW52YWxpZGF0aW9uLWNoYW5nZS1wYXJ0LW5hbWUtZm9y
d2FyZC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9pbnZhbGlkYXRpb24tY2hhbmdlLXBhcnQt
bmFtZS1mb3J3YXJkLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDQgQEAKIFRoZSBmb2xsb3dpbmcg
dGV4dCBzaG91bGQgYmUgZ3JlZW46IAogCi1GQUlMIFBhcnQgaW4gc2VsZWN0ZWQgaG9zdCBjaGFu
Z2VkIGNvbG9yIGFzc2VydF9ub3RfZXF1YWxzOiBnb3QgZGlzYWxsb3dlZCB2YWx1ZSAicmdiKDAs
IDEyOCwgMCkiCitGQUlMIFBhcnQgaW4gc2VsZWN0ZWQgaG9zdCBjaGFuZ2VkIGNvbG9yIGFzc2Vy
dF9ub3RfZXF1YWxzOiBnb3QgZGlzYWxsb3dlZCB2YWx1ZSAicmdiKDI1NSwgMCwgMCkiCiAKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3Nz
L2Nzcy1zaGFkb3ctcGFydHMvaW52YWxpZGF0aW9uLWNvbXBsZXgtc2VsZWN0b3ItZm9yd2FyZC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2Nzcy9jc3Mtc2hhZG93LXBhcnRzL2ludmFsaWRhdGlvbi1jb21wbGV4LXNlbGVjdG9yLWZvcndh
cmQtZXhwZWN0ZWQudHh0CmluZGV4IDJhNjRkNzFhZTRhLi5jNGJjYzI0ZTgxOCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNo
YWRvdy1wYXJ0cy9pbnZhbGlkYXRpb24tY29tcGxleC1zZWxlY3Rvci1mb3J3YXJkLWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nz
cy9jc3Mtc2hhZG93LXBhcnRzL2ludmFsaWRhdGlvbi1jb21wbGV4LXNlbGVjdG9yLWZvcndhcmQt
ZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsNCBAQAogVGhlIGZvbGxvd2luZyB0ZXh0IHNob3VsZCBi
ZSBncmVlbjoKIAotRkFJTCBQYXJ0IGluIHNlbGVjdGVkIGhvc3QgY2hhbmdlZCBjb2xvciBhc3Nl
cnRfbm90X2VxdWFsczogZ290IGRpc2FsbG93ZWQgdmFsdWUgInJnYigwLCAxMjgsIDApIgorUEFT
UyBQYXJ0IGluIHNlbGVjdGVkIGhvc3QgY2hhbmdlZCBjb2xvciAKIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1w
YXJ0cy9wcmVjZWRlbmNlLXBhcnQtdnMtcGFydC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2hhZG93LXBhcnRzL3ByZWNl
ZGVuY2UtcGFydC12cy1wYXJ0LWV4cGVjdGVkLnR4dAppbmRleCBjN2Y4NzE2MGZkYy4uNDBlZTY2
OTkyNmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvcHJlY2VkZW5jZS1wYXJ0LXZzLXBhcnQtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
Y3NzL2Nzcy1zaGFkb3ctcGFydHMvcHJlY2VkZW5jZS1wYXJ0LXZzLXBhcnQtZXhwZWN0ZWQudHh0
CkBAIC0xLDQgKzEsNCBAQAogVGhlIGZvbGxvd2luZyB0ZXh0IHNob3VsZCBiZSBncmVlbjogCiAK
LUZBSUwgU3R5bGUgZnJvbSBkb2N1bWVudCBvdmVycmlkZXMgc3R5bGUgZnJvbSBvdXRlciBDRSBh
c3NlcnRfZXF1YWxzOiBleHBlY3RlZCAicmdiKDAsIDEyOCwgMCkiIGJ1dCBnb3QgInJnYigyNTUs
IDAsIDApIgorUEFTUyBTdHlsZSBmcm9tIGRvY3VtZW50IG92ZXJyaWRlcyBzdHlsZSBmcm9tIG91
dGVyIENFIAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL2Nzcy9jc3Mtc2hhZG93LXBhcnRzL3NpbXBsZS1mb3J3YXJkLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1z
aGFkb3ctcGFydHMvc2ltcGxlLWZvcndhcmQtZXhwZWN0ZWQudHh0CmluZGV4IDMxZjA5YTYyMWI1
Li4zMDg5NWUxNTU3OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNoYWRvdy1wYXJ0cy9zaW1wbGUtZm9yd2FyZC1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9j
c3MvY3NzLXNoYWRvdy1wYXJ0cy9zaW1wbGUtZm9yd2FyZC1leHBlY3RlZC50eHQKQEAgLTEsNCAr
MSw0IEBACiBUaGUgZm9sbG93aW5nIHRleHQgc2hvdWxkIGJlIGdyZWVuOiAKIAotRkFJTCBQYXJ0
IGluIGlubmVyIGhvc3QgaXMgZm9yd2FyZGVkIGZvciBzdHlsaW5nIGJ5IGRvY3VtZW50IHN0eWxl
IHNoZWV0IGFzc2VydF9lcXVhbHM6IGV4cGVjdGVkICJyZ2IoMCwgMTI4LCAwKSIgYnV0IGdvdCAi
cmdiKDI1NSwgMCwgMCkiCitQQVNTIFBhcnQgaW4gaW5uZXIgaG9zdCBpcyBmb3J3YXJkZWQgZm9y
IHN0eWxpbmcgYnkgZG9jdW1lbnQgc3R5bGUgc2hlZXQgCiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMv
c2ltcGxlLWZvcndhcmQtc2hvcnRoYW5kLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvc2ltcGxlLWZv
cndhcmQtc2hvcnRoYW5kLWV4cGVjdGVkLnR4dAppbmRleCBiZjMwNDI3ZTBmMC4uN2U2NWQxYTI5
YzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvY3NzL2Nzcy1zaGFkb3ctcGFydHMvc2ltcGxlLWZvcndhcmQtc2hvcnRoYW5kLWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nz
cy9jc3Mtc2hhZG93LXBhcnRzL3NpbXBsZS1mb3J3YXJkLXNob3J0aGFuZC1leHBlY3RlZC50eHQK
QEAgLTEsNCArMSw0IEBACiBUaGUgZm9sbG93aW5nIHRleHQgc2hvdWxkIGJlIGdyZWVuOiAKIAot
RkFJTCBQYXJ0IGluIGlubmVyIGhvc3QgaXMgZm9yd2FyZGVkLCB1bmRlciB0aGUgc2FtZSBuYW1l
LCBmb3Igc3R5bGluZyBieSBkb2N1bWVudCBzdHlsZSBzaGVldCBhc3NlcnRfZXF1YWxzOiBleHBl
Y3RlZCAicmdiKDAsIDEyOCwgMCkiIGJ1dCBnb3QgInJnYigyNTUsIDAsIDApIgorUEFTUyBQYXJ0
IGluIGlubmVyIGhvc3QgaXMgZm9yd2FyZGVkLCB1bmRlciB0aGUgc2FtZSBuYW1lLCBmb3Igc3R5
bGluZyBieSBkb2N1bWVudCBzdHlsZSBzaGVldCAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDY4ZDE5NzBiYWFi
Li45ZWI1MTQxNmUwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE5LTEwLTAzICBB
bnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBbQ1NTIFNoYWRvdyBQ
YXJ0c10gU3VwcG9ydCAnZXhwb3J0cGFydHMnIGF0dHJpYnV0ZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgUnlvc3VrZSBOaXdhLgorCisgICAgICAgIFN1cHBvcnQgJ2V4cG9ydHBhcnRzJyBhdHRyaWJ1
dGUgZm9yIGV4cG9ydGluZyBwYXJ0IG1hcHBpbmdzIGZyb20gc3ViY29tcG9uZW50cy4KKworICAg
ICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hBdXRob3JSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hQYXJ0UHNldWRvRWxlbWVudFJ1bGVzKToKKwor
ICAgICAgICBSZWN1cnNlIHRvIGNvbnRhaW5pbmcgc2NvcGVzIHRvIGNvbGxlY3QgcGFydCBydWxl
cyBpZiB0aGVyZSBhcmUgZXhwb3J0ZWQgbWFwcGluZ3MuCisKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWF0Y2hlcyk6CisgICAgICAgICogY3NzL0VsZW1lbnRS
dWxlQ29sbGVjdG9yLmg6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkgY29uc3QpOgor
CisgICAgICAgIE1ha2UgU2hhZG93RGVzY2VuZGFudCBmYWtlIGNvbWJpbmF0b3Igc2tpcCBkaXJl
Y3RseSB0byB0aGUgc2NvcGUgd2hlcmUgdGhlIHBhcnQgcnVsZXMgYXJlIGNvbWluZyBmcm9tLgor
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lIGNvbnN0KToKKwor
ICAgICAgICBSZXNvbHZlIG5hbWVzIHZpYSBtYXBwaW5ncyBpZiBuZWVkZWQuCisKKyAgICAgICAg
KiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisKKyAgICAgICAgSW52
YWxpZGF0ZSBtYXBwaW5ncyBhcyBuZWVkZWQuCisKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVBhcnRNYXBwaW5ncyk6CisKKyAgICAgICAgUGFy
c2UgdGhlIG1hcHBpbmdzIG1pY3Jvc3ludGF4LgorCisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dS
b290OjpwYXJ0TWFwcGluZ3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6
aW52YWxpZGF0ZVBhcnRNYXBwaW5ncyk6CisgICAgICAgICogZG9tL1NoYWRvd1Jvb3QuaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbjoKKwogMjAxOS0xMC0wMiAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NTUyBTaGFkb3cgUGFydHNd
IFN1cHBvcnQgbXVsdGlwbGUgYXJndW1lbnRzIGZvciA6OnBhcnQoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKaW5kZXggZTY4M2E5N2UxYTguLjIwN2NiNTMx
ZmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKQEAg
LTIwNSw3ICsyMDUsNyBAQCB2b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjptYXRjaEF1dGhvclJ1
bGVzKGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiAgICAgICAgIG1hdGNoQXV0aG9yU2hhZG93UHNl
dWRvRWxlbWVudFJ1bGVzKGluY2x1ZGVFbXB0eVJ1bGVzLCBydWxlUmFuZ2UpOwogCiAgICAgICAg
IGlmICghbV9lbGVtZW50LnBhcnROYW1lcygpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1hdGNo
UGFydFBzZXVkb0VsZW1lbnRSdWxlcyhpbmNsdWRlRW1wdHlSdWxlcywgcnVsZVJhbmdlKTsKKyAg
ICAgICAgICAgIG1hdGNoUGFydFBzZXVkb0VsZW1lbnRSdWxlcygqbV9lbGVtZW50LmNvbnRhaW5p
bmdTaGFkb3dSb290KCksIGluY2x1ZGVFbXB0eVJ1bGVzLCBydWxlUmFuZ2UpOwogICAgIH0KIAog
ICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcygpOwpAQCAtMjYzLDE0ICsyNjMsMjYgQEAg
dm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hTbG90dGVkUHNldWRvRWxlbWVudFJ1bGVz
KGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMKICAgICB9CiB9CiAKLXZvaWQgRWxlbWVudFJ1bGVDb2xs
ZWN0b3I6Om1hdGNoUGFydFBzZXVkb0VsZW1lbnRSdWxlcyhib29sIGluY2x1ZGVFbXB0eVJ1bGVz
LCBTdHlsZVJlc29sdmVyOjpSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKK3ZvaWQgRWxlbWVudFJ1bGVD
b2xsZWN0b3I6Om1hdGNoUGFydFBzZXVkb0VsZW1lbnRSdWxlcyhjb25zdCBTaGFkb3dSb290JiBj
b250YWluaW5nU2hhZG93Um9vdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcywgU3R5bGVSZXNvbHZl
cjo6UnVsZVJhbmdlJiBydWxlUmFuZ2UpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudC5pc0luU2hh
ZG93VHJlZSgpKTsKLSAgICBhdXRvJiBzaGFkb3dSb290ID0gKm1fZWxlbWVudC5jb250YWluaW5n
U2hhZG93Um9vdCgpOwotICAgIGF1dG8mIGhvc3RBdXRob3JSdWxlcyA9IFN0eWxlOjpTY29wZTo6
Zm9yTm9kZSgqc2hhZG93Um9vdC5ob3N0KCkpLnJlc29sdmVyKCkucnVsZVNldHMoKS5hdXRob3JT
dHlsZSgpOworICAgIEFTU0VSVCghbV9lbGVtZW50LnBhcnROYW1lcygpLmlzRW1wdHkoKSk7CiAK
LSAgICBNYXRjaFJlcXVlc3QgaG9zdEF1dGhvclJlcXVlc3QgeyAmaG9zdEF1dGhvclJ1bGVzLCBp
bmNsdWRlRW1wdHlSdWxlcywgU3R5bGU6OlNjb3BlT3JkaW5hbDo6Q29udGFpbmluZ0hvc3QgfTsK
LSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoJmhvc3RBdXRob3JSdWxlcy5wYXJ0UHNl
dWRvRWxlbWVudFJ1bGVzKCksIGhvc3RBdXRob3JSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGF1
dG8mIHNoYWRvd0hvc3QgPSAqY29udGFpbmluZ1NoYWRvd1Jvb3QuaG9zdCgpOworICAgIHsKKyAg
ICAgICAgU2V0Rm9yU2NvcGU8Y29uc3QgRWxlbWVudCo+IHBhcnRNYXRjaGluZ1Njb3BlKG1fc2hh
ZG93SG9zdEluUGFydFJ1bGVTY29wZSwgJnNoYWRvd0hvc3QpOworCisgICAgICAgIGF1dG8mIGhv
c3RBdXRob3JSdWxlcyA9IFN0eWxlOjpTY29wZTo6Zm9yTm9kZShzaGFkb3dIb3N0KS5yZXNvbHZl
cigpLnJ1bGVTZXRzKCkuYXV0aG9yU3R5bGUoKTsKKyAgICAgICAgTWF0Y2hSZXF1ZXN0IGhvc3RB
dXRob3JSZXF1ZXN0IHsgJmhvc3RBdXRob3JSdWxlcywgaW5jbHVkZUVtcHR5UnVsZXMsIFN0eWxl
OjpTY29wZU9yZGluYWw6OkNvbnRhaW5pbmdIb3N0IH07CisgICAgICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yTGlzdCgmaG9zdEF1dGhvclJ1bGVzLnBhcnRQc2V1ZG9FbGVtZW50UnVsZXMoKSwg
aG9zdEF1dGhvclJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgfQorCisgICAgLy8gRWxlbWVudCBt
YXkgYmUgZXhwb3NlZCB0byBzdHlsaW5nIGZyb20gZW5jbG9zaW5nIHNjb3BlcyB2aWEgZXhwb3J0
cGFydHMgYXR0cmlidXRlcy4KKyAgICBpZiAoY29udGFpbmluZ1NoYWRvd1Jvb3QucGFydE1hcHBp
bmdzKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byogcGFyZW50
U2hhZG93Um9vdCA9IHNoYWRvd0hvc3QuY29udGFpbmluZ1NoYWRvd1Jvb3QoKSkKKyAgICAgICAg
bWF0Y2hQYXJ0UHNldWRvRWxlbWVudFJ1bGVzKCpwYXJlbnRTaGFkb3dSb290LCBpbmNsdWRlRW1w
dHlSdWxlcywgcnVsZVJhbmdlKTsKIH0KIAogdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6Y29s
bGVjdE1hdGNoaW5nU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKGNvbnN0IE1hdGNoUmVxdWVzdCYg
bWF0Y2hSZXF1ZXN0LCBTdHlsZVJlc29sdmVyOjpSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKQEAgLTQy
OCw2ICs0NDAsNyBAQCBpbmxpbmUgYm9vbCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNo
ZXMoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhLCB1bnNpZ25lZAogICAgIGNvbnRleHQuc2Nyb2xs
YmFyID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3Quc2Nyb2xsYmFyOwogICAgIGNvbnRleHQuc2Nyb2xs
YmFyUGFydCA9IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnNjcm9sbGJhclBhcnQ7CiAgICAgY29udGV4
dC5pc01hdGNoaW5nSG9zdFBzZXVkb0NsYXNzID0gbV9pc01hdGNoaW5nSG9zdFBzZXVkb0NsYXNz
OworICAgIGNvbnRleHQuc2hhZG93SG9zdEluUGFydFJ1bGVTY29wZSA9IG1fc2hhZG93SG9zdElu
UGFydFJ1bGVTY29wZTsKIAogICAgIGJvb2wgc2VsZWN0b3JNYXRjaGVzOwogI2lmIEVOQUJMRShD
U1NfU0VMRUNUT1JfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRS
dWxlQ29sbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3Iu
aAppbmRleCBhMDYyMzc4YTk3OS4uZGE5MDE5OGMxMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9F
bGVtZW50UnVsZUNvbGxlY3Rvci5oCkBAIC03NSw3ICs3NSw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBtYXRjaEF1dGhvclNoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyhib29sIGluY2x1ZGVFbXB0eVJ1
bGVzLCBTdHlsZVJlc29sdmVyOjpSdWxlUmFuZ2UmKTsKICAgICB2b2lkIG1hdGNoSG9zdFBzZXVk
b0NsYXNzUnVsZXMoYm9vbCBpbmNsdWRlRW1wdHlSdWxlcywgU3R5bGVSZXNvbHZlcjo6UnVsZVJh
bmdlJik7CiAgICAgdm9pZCBtYXRjaFNsb3R0ZWRQc2V1ZG9FbGVtZW50UnVsZXMoYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcywgU3R5bGVSZXNvbHZlcjo6UnVsZVJhbmdlJik7Ci0gICAgdm9pZCBtYXRj
aFBhcnRQc2V1ZG9FbGVtZW50UnVsZXMoYm9vbCBpbmNsdWRlRW1wdHlSdWxlcywgU3R5bGVSZXNv
bHZlcjo6UnVsZVJhbmdlJik7CisgICAgdm9pZCBtYXRjaFBhcnRQc2V1ZG9FbGVtZW50UnVsZXMo
Y29uc3QgU2hhZG93Um9vdCYgY29udGFpbmluZ1NoYWRvd1Jvb3QsIGJvb2wgaW5jbHVkZUVtcHR5
UnVsZXMsIFN0eWxlUmVzb2x2ZXI6OlJ1bGVSYW5nZSYpOwogCiAgICAgdm9pZCBjb2xsZWN0TWF0
Y2hpbmdTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoY29uc3QgTWF0Y2hSZXF1ZXN0JiwgU3R5bGVS
ZXNvbHZlcjo6UnVsZVJhbmdlJik7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bGVTZXQ6OlJ1bGVE
YXRhVmVjdG9yPiBjb2xsZWN0U2xvdHRlZFBzZXVkb0VsZW1lbnRSdWxlc0ZvclNsb3QoYm9vbCBp
bmNsdWRlRW1wdHlSdWxlcyk7CkBAIC0xMDAsNiArMTAwLDcgQEAgcHJpdmF0ZToKICAgICBTZWxl
Y3RvckNoZWNrZXI6Ok1vZGUgbV9tb2RlIHsgU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZp
bmdTdHlsZSB9OwogICAgIGJvb2wgbV9pc01hdGNoaW5nU2xvdHRlZFBzZXVkb0VsZW1lbnRzIHsg
ZmFsc2UgfTsKICAgICBib29sIG1faXNNYXRjaGluZ0hvc3RQc2V1ZG9DbGFzcyB7IGZhbHNlIH07
CisgICAgY29uc3QgRWxlbWVudCogbV9zaGFkb3dIb3N0SW5QYXJ0UnVsZVNjb3BlIHsgbnVsbHB0
ciB9OwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8UnVsZVNldDo6UnVsZURhdGFWZWN0b3I+
PiBtX2tlZXBBbGl2ZVNsb3R0ZWRQc2V1ZG9FbGVtZW50UnVsZXM7CiAKICAgICBWZWN0b3I8TWF0
Y2hlZFJ1bGUsIDY0PiBtX21hdGNoZWRSdWxlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hl
Y2tlci5jcHAKaW5kZXggMjlkMGNiMGMzOTkuLjAyYzdiNjliMDc4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNDI5LDEwICs0MjksMTEgQEAgU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaFJlc3VsdCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkoQ2hlY2tp
bmdDb250ZXh0JgogICAgICAgICB9CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2Vu
ZGFudDoKICAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudCogc2hhZG93SG9zdE5vZGUgPSBj
b250ZXh0LmVsZW1lbnQtPnNoYWRvd0hvc3QoKTsKLSAgICAgICAgICAgIGlmICghc2hhZG93SG9z
dE5vZGUpCisgICAgICAgICAgICAvLyBXaGVuIG1hdGNoaW5nIGZvbzo6cGFydChiYXIpIHdlIHNr
aXAgZGlyZWN0bHkgdG8gdGhlIHRyZWUgb2YgZWxlbWVudCAnZm9vJy4KKyAgICAgICAgICAgIGF1
dG8qIHNoYWRvd0hvc3QgPSBjaGVja2luZ0NvbnRleHQuc2hhZG93SG9zdEluUGFydFJ1bGVTY29w
ZSA/IGNoZWNraW5nQ29udGV4dC5zaGFkb3dIb3N0SW5QYXJ0UnVsZVNjb3BlIDogY29udGV4dC5l
bGVtZW50LT5zaGFkb3dIb3N0KCk7CisgICAgICAgICAgICBpZiAoIXNoYWRvd0hvc3QpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWls
c0NvbXBsZXRlbHkpOwotICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IHNoYWRvd0hv
c3ROb2RlOworICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IHNoYWRvd0hvc3Q7CiAg
ICAgICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRD
b250ZXh0LnNlbGVjdG9yOwogICAgICAgICAgICAgbmV4dENvbnRleHQuaXNTdWJqZWN0T3JBZGph
Y2VudEVsZW1lbnQgPSBmYWxzZTsKICAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFt
aWNQc2V1ZG87CkBAIC0xMTQ5LDEzICsxMTUwLDMyIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpj
aGVja09uZShDaGVja2luZ0NvbnRleHQmIGNoZWNraW5nQ29udGV4dCwgY29uc3QgTG9jYWxDb250
CiAgICAgICAgICAgICBBU1NFUlQoY2hlY2tpbmdDb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9k
ZTo6Q29sbGVjdGluZ1J1bGVzKTsKICAgICAgICAgICAgIHJldHVybiBpczxIVE1MU2xvdEVsZW1l
bnQ+KGVsZW1lbnQpOwogCi0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRQ
YXJ0OgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50UGFydDogeworICAg
ICAgICAgICAgYXV0byB0cmFuc2xhdGVQYXJ0TmFtZVRvUnVsZVNjb3BlID0gWyZdKEF0b21TdHJp
bmcgcGFydE5hbWUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8qIHNoYWRvd1Jvb3QgPSBl
bGVtZW50LmNvbnRhaW5pbmdTaGFkb3dSb290KCk7IHNoYWRvd1Jvb3Q7IHNoYWRvd1Jvb3QgPSBz
aGFkb3dSb290LT5ob3N0KCktPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gQXBwbHkgbWFwcGluZ3MgdXAgdG8gdGhlIHNjb3BlIHRoZSBydWxlcyBhcmUg
Y29taW5nIGZyb20uCisgICAgICAgICAgICAgICAgICAgIGlmIChzaGFkb3dSb290LT5ob3N0KCkg
PT0gY2hlY2tpbmdDb250ZXh0LnNoYWRvd0hvc3RJblBhcnRSdWxlU2NvcGUpCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgcGFydE5hbWUgPSBzaGFk
b3dSb290LT5wYXJ0TWFwcGluZ3MoKS5nZXQocGFydE5hbWUpOworICAgICAgICAgICAgICAgICAg
ICBpZiAocGFydE5hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEF0b21TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJu
IHBhcnROYW1lOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgVmVjdG9yPEF0b21TdHJp
bmcsIDQ+IHRyYW5zbGF0ZWRQYXJ0TmFtZXM7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZWxlbWVudC5wYXJ0TmFtZXMoKS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
ICAgIGF1dG8gdHJhbnNsYXRlZFBhcnROYW1lID0gdHJhbnNsYXRlUGFydE5hbWVUb1J1bGVTY29w
ZShlbGVtZW50LnBhcnROYW1lcygpW2ldKTsKKyAgICAgICAgICAgICAgICBpZiAoIXRyYW5zbGF0
ZWRQYXJ0TmFtZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRQYXJ0
TmFtZXMuYXBwZW5kKHRyYW5zbGF0ZWRQYXJ0TmFtZSk7CisgICAgICAgICAgICB9CisKICAgICAg
ICAgICAgIGZvciAoYXV0byYgcGFydCA6ICpzZWxlY3Rvci5hcmd1bWVudExpc3QoKSkgewotICAg
ICAgICAgICAgICAgIGlmICghZWxlbWVudC5wYXJ0TmFtZXMoKS5jb250YWlucyhwYXJ0KSkKKyAg
ICAgICAgICAgICAgICBpZiAoIXRyYW5zbGF0ZWRQYXJ0TmFtZXMuY29udGFpbnMocGFydCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotCisgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmgKaW5kZXggNjBiN2VlYTUxNzAuLjJhNDhjYzI5NzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVj
dG9yQ2hlY2tlci5oCkBAIC04NCw2ICs4NCw3IEBAIHB1YmxpYzoKICAgICAgICAgU2Nyb2xsYmFy
UGFydCBzY3JvbGxiYXJQYXJ0IHsgTm9QYXJ0IH07CiAgICAgICAgIGNvbnN0IENvbnRhaW5lck5v
ZGUqIHNjb3BlIHsgbnVsbHB0ciB9OwogICAgICAgICBib29sIGlzTWF0Y2hpbmdIb3N0UHNldWRv
Q2xhc3MgeyBmYWxzZSB9OworICAgICAgICBjb25zdCBFbGVtZW50KiBzaGFkb3dIb3N0SW5QYXJ0
UnVsZVNjb3BlIHsgbnVsbHB0ciB9OwogCiAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBu
aWNlciB0byBoYXZlIGEgc2VwYXJhdGUgb2JqZWN0IGZvciByZXR1cm4gdmFsdWVzLiBUaGlzIHJl
cXVpcmVzIHNvbWUgbW9yZSB3b3JrIGluIHRoZSBzZWxlY3RvciBjb21waWxlci4KICAgICAgICAg
U3R5bGU6OlJlbGF0aW9ucyBzdHlsZVJlbGF0aW9uczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRl
eCAwYjljMTM4YWFmNy4uMDhjNDllMDg5ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTE3
MTksOCArMTcxOSw2IEBAIHZvaWQgRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiBvbGRWCiAgICAgICAgICAgICBkb2N1
bWVudCgpLmludmFsaWRhdGVBY2Nlc3NLZXlDYWNoZSgpOwogICAgICAgICBlbHNlIGlmIChuYW1l
ID09IEhUTUxOYW1lczo6Y2xhc3NBdHRyKQogICAgICAgICAgICAgY2xhc3NBdHRyaWJ1dGVDaGFu
Z2VkKG5ld1ZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAobmFtZSA9PSBIVE1MTmFtZXM6OnBhcnRB
dHRyKQotICAgICAgICAgICAgcGFydEF0dHJpYnV0ZUNoYW5nZWQobmV3VmFsdWUpOwogICAgICAg
ICBlbHNlIGlmIChuYW1lID09IEhUTUxOYW1lczo6aWRBdHRyKSB7CiAgICAgICAgICAgICBBdG9t
U3RyaW5nIG9sZElkID0gZWxlbWVudERhdGEoKS0+aWRGb3JTdHlsZVJlc29sdXRpb24oKTsKICAg
ICAgICAgICAgIEF0b21TdHJpbmcgbmV3SWQgPSBtYWtlSWRGb3JTdHlsZVJlc29sdXRpb24obmV3
VmFsdWUsIGRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpOwpAQCAtMTc0Myw2ICsxNzQxLDExIEBA
IHZvaWQgRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
LCBjb25zdCBBdG9tU3RyaW5nJiBvbGRWCiAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHNoYWRv
d1Jvb3QgPSBwYXJlbnQtPnNoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgICAgICAgICAgc2hhZG93
Um9vdC0+aG9zdENoaWxkRWxlbWVudERpZENoYW5nZVNsb3RBdHRyaWJ1dGUoKnRoaXMsIG9sZFZh
bHVlLCBuZXdWYWx1ZSk7CiAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9
PSBIVE1MTmFtZXM6OnBhcnRBdHRyKQorICAgICAgICAgICAgcGFydEF0dHJpYnV0ZUNoYW5nZWQo
bmV3VmFsdWUpOworICAgICAgICBlbHNlIGlmIChuYW1lID09IEhUTUxOYW1lczo6ZXhwb3J0cGFy
dHNBdHRyKSB7CisgICAgICAgICAgICBpZiAoYXV0byogc2hhZG93Um9vdCA9IHRoaXMtPnNoYWRv
d1Jvb3QoKSkKKyAgICAgICAgICAgICAgICBzaGFkb3dSb290LT5pbnZhbGlkYXRlUGFydE1hcHBp
bmdzKCk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TaGFkb3dSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAppbmRl
eCA2Nzg2YzBkMjFlMS4uNmNkZjZhZDZjNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TaGFkb3dSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRl
ICJFbGVtZW50VHJhdmVyc2FsLmgiCisjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2lu
Y2x1ZGUgIkhUTUxTbG90RWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCkBAIC01MCw2ICs1MSw3IEBAIHN0cnVj
dCBTYW1lU2l6ZUFzU2hhZG93Um9vdCA6IHB1YmxpYyBEb2N1bWVudEZyYWdtZW50LCBwdWJsaWMg
VHJlZVNjb3BlIHsKICAgICB2b2lkKiBzdHlsZVNoZWV0TGlzdDsKICAgICB2b2lkKiBob3N0Owog
ICAgIHZvaWQqIHNsb3RBc3NpZ25tZW50OworICAgIE9wdGlvbmFsPEhhc2hNYXA8QXRvbVN0cmlu
ZywgQXRvbVN0cmluZz4+IHBhcnRNYXBwaW5nczsKIH07CiAKIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihTaGFkb3dSb290KSA9PSBzaXplb2YoU2FtZVNpemVBc1NoYWRvd1Jvb3QpLCBzaGFkb3dyb290
X3Nob3VsZF9zdGF5X3NtYWxsKTsKQEAgLTI1Miw2ICsyNTQsOTIgQEAgY29uc3QgVmVjdG9yPE5v
ZGUqPiogU2hhZG93Um9vdDo6YXNzaWduZWROb2Rlc0ZvclNsb3QoY29uc3QgSFRNTFNsb3RFbGVt
ZW50JiBzbG8KICAgICByZXR1cm4gbV9zbG90QXNzaWdubWVudC0+YXNzaWduZWROb2Rlc0ZvclNs
b3Qoc2xvdCwgKnRoaXMpOwogfQogCitzdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPEF0b21TdHJp
bmcsIEF0b21TdHJpbmc+PiBwYXJzZVBhcnRNYXBwaW5nKFN0cmluZ1ZpZXcgbWFwcGluZ1N0cmlu
ZykKK3sKKyAgICBjb25zdCBhdXRvIGVuZCA9IG1hcHBpbmdTdHJpbmcubGVuZ3RoKCk7CisKKyAg
ICBhdXRvIHNraXBXaGl0ZXNwYWNlID0gWyZdIChhdXRvIHBvc2l0aW9uKSB7CisgICAgICAgIHdo
aWxlIChwb3NpdGlvbiA8IGVuZCAmJiBpc0hUTUxTcGFjZShtYXBwaW5nU3RyaW5nW3Bvc2l0aW9u
XSkpCisgICAgICAgICAgICArK3Bvc2l0aW9uOworICAgICAgICByZXR1cm4gcG9zaXRpb247Cisg
ICAgfTsKKworICAgIGF1dG8gY29sbGVjdFZhbHVlID0gWyZdIChhdXRvIHBvc2l0aW9uKSB7Cisg
ICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCAmJiAoIWlzSFRNTFNwYWNlKG1hcHBpbmdTdHJp
bmdbcG9zaXRpb25dKSAmJiBtYXBwaW5nU3RyaW5nW3Bvc2l0aW9uXSAhPSAnOicpKQorICAgICAg
ICAgICAgKytwb3NpdGlvbjsKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworICAgIH07CisKKyAg
ICBzaXplX3QgYmVnaW4gPSAwOworICAgIGJlZ2luID0gc2tpcFdoaXRlc3BhY2UoYmVnaW4pOwor
CisgICAgYXV0byBmaXJzdFBhcnRFbmQgPSBjb2xsZWN0VmFsdWUoYmVnaW4pOworICAgIGlmIChm
aXJzdFBhcnRFbmQgPT0gYmVnaW4pCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGZp
cnN0UGFydCA9IG1hcHBpbmdTdHJpbmcuc3Vic3RyaW5nKGJlZ2luLCBmaXJzdFBhcnRFbmQgLSBi
ZWdpbikudG9BdG9tU3RyaW5nKCk7CisKKyAgICBiZWdpbiA9IHNraXBXaGl0ZXNwYWNlKGZpcnN0
UGFydEVuZCk7CisgICAgaWYgKGJlZ2luID09IGVuZCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKGZpcnN0UGFydCwgZmlyc3RQYXJ0KTsKKworICAgIGlmIChtYXBwaW5nU3RyaW5nW2Jl
Z2luXSAhPSAnOicpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBiZWdpbiA9IHNraXBXaGl0
ZXNwYWNlKGJlZ2luICsgMSk7CisKKyAgICBhdXRvIHNlY29uZFBhcnRFbmQgPSBjb2xsZWN0VmFs
dWUoYmVnaW4pOworICAgIGlmIChzZWNvbmRQYXJ0RW5kID09IGJlZ2luKQorICAgICAgICByZXR1
cm4geyB9OworCisgICAgYXV0byBzZWNvbmRQYXJ0ID0gbWFwcGluZ1N0cmluZy5zdWJzdHJpbmco
YmVnaW4sIHNlY29uZFBhcnRFbmQgLSBiZWdpbikudG9BdG9tU3RyaW5nKCk7CisKKyAgICBiZWdp
biA9IHNraXBXaGl0ZXNwYWNlKHNlY29uZFBhcnRFbmQpOworICAgIGlmIChiZWdpbiAhPSBlbmQp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZmlyc3RQ
YXJ0LCBzZWNvbmRQYXJ0KTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VQYXJ0TWFwcGluZ3NMaXN0
KEhhc2hNYXA8QXRvbVN0cmluZywgQXRvbVN0cmluZz4mIG1hcHBpbmdzLCBTdHJpbmdWaWV3IG1h
cHBpbmdzTGlzdFN0cmluZykKK3sKKyAgICBjb25zdCBhdXRvIGVuZCA9IG1hcHBpbmdzTGlzdFN0
cmluZy5sZW5ndGgoKTsKKworICAgIHNpemVfdCBiZWdpbiA9IDA7CisgICAgd2hpbGUgKGJlZ2lu
IDwgZW5kKSB7CisgICAgICAgIHNpemVfdCBtYXBwaW5nRW5kID0gYmVnaW47CisgICAgICAgIHdo
aWxlIChtYXBwaW5nRW5kIDwgZW5kICYmIG1hcHBpbmdzTGlzdFN0cmluZ1ttYXBwaW5nRW5kXSAh
PSAnLCcpCisgICAgICAgICAgICArK21hcHBpbmdFbmQ7CisKKyAgICAgICAgYXV0byByZXN1bHQg
PSBwYXJzZVBhcnRNYXBwaW5nKG1hcHBpbmdzTGlzdFN0cmluZy5zdWJzdHJpbmcoYmVnaW4sIG1h
cHBpbmdFbmQgLSBiZWdpbikpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgbWFw
cGluZ3MuYWRkKHJlc3VsdC0+Zmlyc3QsIHJlc3VsdC0+c2Vjb25kKTsKKworICAgICAgICBpZiAo
bWFwcGluZ0VuZCA9PSBlbmQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBiZWdpbiA9
IG1hcHBpbmdFbmQgKyAxOworICAgIH0KK30KKworY29uc3QgSGFzaE1hcDxBdG9tU3RyaW5nLCBB
dG9tU3RyaW5nPiYgU2hhZG93Um9vdDo6cGFydE1hcHBpbmdzKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fcGFydE1hcHBpbmdzKSB7CisgICAgICAgIG1fcGFydE1hcHBpbmdzID0gSGFzaE1hcDxBdG9t
U3RyaW5nLCBBdG9tU3RyaW5nPigpOworCisgICAgICAgIGF1dG8gZXhwb3J0cGFydHNWYWx1ZSA9
IGhvc3QoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OmV4cG9y
dHBhcnRzQXR0cik7CisgICAgICAgIGlmICghZXhwb3J0cGFydHNWYWx1ZS5pc0VtcHR5KCkgJiYg
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5jc3NTaGFkb3dQYXJ0c0Vu
YWJsZWQoKSkKKyAgICAgICAgICAgIHBhcnNlUGFydE1hcHBpbmdzTGlzdCgqbV9wYXJ0TWFwcGlu
Z3MsIGV4cG9ydHBhcnRzVmFsdWUpOworICAgIH0KKworICAgIHJldHVybiAqbV9wYXJ0TWFwcGlu
Z3M7Cit9CisKK3ZvaWQgU2hhZG93Um9vdDo6aW52YWxpZGF0ZVBhcnRNYXBwaW5ncygpCit7Cisg
ICAgbV9wYXJ0TWFwcGluZ3MgPSB7IH07Cit9CisKIFZlY3RvcjxTaGFkb3dSb290Kj4gYXNzaWdu
ZWRTaGFkb3dSb290c0lmU2xvdHRlZChjb25zdCBOb2RlJiBub2RlKQogewogICAgIFZlY3RvcjxT
aGFkb3dSb290Kj4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRv
d1Jvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKaW5kZXggOWNiZWU1YTc1
NTYuLmM1MjNmN2U4OGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9v
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgog
I2luY2x1ZGUgIlNoYWRvd1Jvb3RNb2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05Miw2ICs5Myw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IG1vdmVTaGFkb3dSb290VG9OZXdQYXJlbnRTY29wZShUcmVlU2NvcGUmLCBEb2N1bWVudCYpOwog
ICAgIHZvaWQgbW92ZVNoYWRvd1Jvb3RUb05ld0RvY3VtZW50KERvY3VtZW50Jik7CiAKKyAgICBj
b25zdCBIYXNoTWFwPEF0b21TdHJpbmcsIEF0b21TdHJpbmc+JiBwYXJ0TWFwcGluZ3MoKSBjb25z
dDsKKyAgICB2b2lkIGludmFsaWRhdGVQYXJ0TWFwcGluZ3MoKTsKKwogcHJvdGVjdGVkOgogICAg
IFNoYWRvd1Jvb3QoRG9jdW1lbnQmLCBTaGFkb3dSb290TW9kZSk7CiAKQEAgLTExNiw2ICsxMjAs
NyBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0eWxlOjpTY29wZT4gbV9zdHls
ZVNjb3BlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90QXNzaWdubWVudD4gbV9zbG90QXNzaWdu
bWVudDsKKyAgICBtdXRhYmxlIE9wdGlvbmFsPEhhc2hNYXA8QXRvbVN0cmluZywgQXRvbVN0cmlu
Zz4+IG1fcGFydE1hcHBpbmdzOwogfTsKIAogaW5saW5lIEVsZW1lbnQqIFNoYWRvd1Jvb3Q6OmFj
dGl2ZUVsZW1lbnQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QXR0cmlidXRlTmFtZXMuaW4gYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1l
cy5pbgppbmRleCBmYjI2ZGI3NmZlNC4uMDViMzdhNDZkYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCkBAIC0xMjMsNiArMTIzLDcgQEAgZW5jdHlwZQogZW5k
CiBldmVudAogZXhwYW5kZWQKK2V4cG9ydHBhcnRzCiBmYWNlCiBmaWxlbmFtZQogZm9jdXNlZAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>