<?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>51859</bug_id>
          
          <creation_ts>2011-01-03 18:01:58 -0800</creation_ts>
          <short_desc>WK2: Support Accessibility</short_desc>
          <delta_ts>2011-01-05 11:24:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="chris fleizach">cfleizach</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>328859</commentid>
    <comment_count>0</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-01-03 18:01:58 -0800</bug_when>
    <thetext>Need to support accessibility for the Mac</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329042</commentid>
    <comment_count>1</comment_count>
      <attachid>77896</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-01-04 10:26:22 -0800</bug_when>
    <thetext>Created attachment 77896
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329065</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-04 10:45:13 -0800</bug_when>
    <thetext>Attachment 77896 did not build on chromium:
Build output: http://queues.webkit.org/results/7314339</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329075</commentid>
    <comment_count>3</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-04 10:49:58 -0800</bug_when>
    <thetext>Attachment 77896 did not build on qt:
Build output: http://queues.webkit.org/results/7246433</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329079</commentid>
    <comment_count>4</comment_count>
      <attachid>77907</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-01-04 10:52:31 -0800</bug_when>
    <thetext>Created attachment 77907
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329095</commentid>
    <comment_count>5</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-04 11:16:39 -0800</bug_when>
    <thetext>Attachment 77896 did not build on win:
Build output: http://queues.webkit.org/results/7338296</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329108</commentid>
    <comment_count>6</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-04 11:42:20 -0800</bug_when>
    <thetext>Attachment 77907 did not build on qt:
Build output: http://queues.webkit.org/results/7327339</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329120</commentid>
    <comment_count>7</comment_count>
      <attachid>77914</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-01-04 12:17:33 -0800</bug_when>
    <thetext>Created attachment 77914
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329127</commentid>
    <comment_count>8</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-04 12:26:25 -0800</bug_when>
    <thetext>Attachment 77907 did not build on win:
Build output: http://queues.webkit.org/results/7243408</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329130</commentid>
    <comment_count>9</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-04 12:31:37 -0800</bug_when>
    <thetext>Attachment 77914 did not build on qt:
Build output: http://queues.webkit.org/results/7201407</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329145</commentid>
    <comment_count>10</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-04 12:48:12 -0800</bug_when>
    <thetext>Attachment 77914 did not build on win:
Build output: http://queues.webkit.org/results/7235431</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329151</commentid>
    <comment_count>11</comment_count>
      <attachid>77921</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-01-04 12:59:05 -0800</bug_when>
    <thetext>Created attachment 77921
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329190</commentid>
    <comment_count>12</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-04 13:52:26 -0800</bug_when>
    <thetext>Attachment 77921 did not build on win:
Build output: http://queues.webkit.org/results/7288367</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329210</commentid>
    <comment_count>13</comment_count>
      <attachid>77929</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-01-04 14:14:05 -0800</bug_when>
    <thetext>Created attachment 77929
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329265</commentid>
    <comment_count>14</comment_count>
      <attachid>77929</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-01-04 15:49:28 -0800</bug_when>
    <thetext>Comment on attachment 77929
Patch

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

This overall looks really good. Maybe Anders can give it a once over as well.

&gt; Tools/DumpRenderTree/mac/AccessibilityControllerMac.mm:31
&gt; +#import &lt;AppKit/NSColor.h&gt;

What is this for?  It doesn&apos;t seem related.

&gt; WebCore/accessibility/AccessibilityScrollView.cpp:127
&gt; +}
&gt; +
&gt; +    
&gt; +AccessibilityObject* AccessibilityScrollView::accessibilityHitTest(const IntPoint&amp; point) const

Extra space.

&gt; WebCore/accessibility/AccessibilityScrollbar.cpp:39
&gt; +AccessibilityScrollbar::AccessibilityScrollbar(Scrollbar *scrollbar)

* on the wrong side.

&gt; WebCore/accessibility/mac/AccessibilityObjectWrapper.mm:1027
&gt;  
&gt; +    else if (m_object-&gt;isScrollView())
&gt; +        objectAttributes = scrollViewAttrs;

The newline seems unnecessary.

&gt; WebCore/accessibility/mac/AccessibilityObjectWrapper.mm:1125
&gt; +    }
&gt; +    else {

The } should be on the same line as the else.

&gt; WebCore/accessibility/mac/AccessibilityObjectWrapper.mm:1131
&gt; +            point = [[view window] convertBaseToScreen: [view convertPoint: point toView:nil]];

We usually don&apos;t put a space after the :.

&gt; WebCore/accessibility/mac/AccessibilityObjectWrapper.mm:1459
&gt; +    if (scroll-&gt;platformWidget())
&gt; +        return scroll-&gt;platformWidget();
&gt; +    else
&gt; +        return [self remoteAccessibilityParentObject];

The else is not necessary here.

&gt; WebCore/accessibility/mac/AccessibilityObjectWrapper.mm:1730
&gt;          }
&gt; +        else if (m_object-&gt;isScrollView()) {
&gt; +            AccessibilityObject::AccessibilityChildrenVector children = m_object-&gt;children();

} should be on the same line as the else if.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329266</commentid>
    <comment_count>15</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-01-04 15:52:06 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 77929 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77929&amp;action=review
&gt; 
&gt; This overall looks really good. Maybe Anders can give it a once over as well.
&gt; 
&gt; &gt; Tools/DumpRenderTree/mac/AccessibilityControllerMac.mm:31
&gt; &gt; +#import &lt;AppKit/NSColor.h&gt;
&gt; 
&gt; What is this for?  It doesn&apos;t seem related.
&gt; 

AccessibilityControllerMac.mm now includes WebFramePrivate instead of Internal. WebFramePrivate has a NSColor* in its header.

suggestions for what is expected here are welcome

will do everything else. thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329307</commentid>
    <comment_count>16</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-01-04 17:08:35 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/75031</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329312</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-04 17:19:57 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/75031 might have broken SnowLeopard Intel Release (Build)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329314</commentid>
    <comment_count>18</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-01-04 17:22:57 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/75033</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329331</commentid>
    <comment_count>19</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-01-04 17:37:23 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/75034</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329352</commentid>
    <comment_count>20</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-01-04 18:09:56 -0800</bug_when>
    <thetext>I created https://bugs.webkit.org/show_bug.cgi?id=51911 to handle the GTK layout test failure and other GTK related issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329361</commentid>
    <comment_count>21</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-01-04 18:20:47 -0800</bug_when>
    <thetext>I made https://bugs.webkit.org/show_bug.cgi?id=51912 to handle the failing Windows tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329366</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-04 18:30:02 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/75033 might have broken Leopard Intel Debug (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329367</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-04 18:30:09 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/75034 might have broken Leopard Intel Debug (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329491</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-05 01:59:29 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/75052 might have broken Leopard Intel Debug (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329682</commentid>
    <comment_count>25</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-05 11:20:28 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/75031 seems to broke WIn7 accessibility tests:
http://build.webkit.org/results/Windows%207%20Release%20(Tests)/r75022%20(7918)/
http://build.webkit.org/results/Windows%207%20Release%20(Tests)/r75031%20(7919)/

--- /home/buildbot/slave/WebKit-BuildSlave/win-release-tests/build/layout-test-results/platform/win/accessibility/document-role-expected.txt	2011-01-05 00:33:06.263629600 -0800
+++ /home/buildbot/slave/WebKit-BuildSlave/win-release-tests/build/layout-test-results/platform/win/accessibility/document-role-actual.txt	2011-01-05 00:33:06.261629400 -0800
@@ -1,4 +1,4 @@
 Test for role attribute of document 
 ----------------------------------- 
-role of Document : document 
+role of Document : client 

--- /home/buildbot/slave/WebKit-BuildSlave/win-release-tests/build/layout-test-results/platform/win/accessibility/selection-and-focus-expected.txt	2011-01-05 00:33:07.034673700 -0800
+++ /home/buildbot/slave/WebKit-BuildSlave/win-release-tests/build/layout-test-results/platform/win/accessibility/selection-and-focus-actual.txt	2011-01-05 00:33:07.032673500 -0800
@@ -2,7 +2,7 @@
 This tests that we can adjust focus and selection via accessibility API.
 
 
-PASS accessibilityController.focusedElement.role is &quot;document&quot;
+FAIL accessibilityController.focusedElement.role should be document. Was client.
 PASS accessibilityController.focusedElement.role is &quot;list&quot;
 
 Option 0 is selected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329685</commentid>
    <comment_count>26</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-05 11:24:12 -0800</bug_when>
    <thetext>Apparently, the regression is tracked by https://bugs.webkit.org/show_bug.cgi?id=51912.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77896</attachid>
            <date>2011-01-04 10:26:22 -0800</date>
            <delta_ts>2011-01-04 10:52:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51859-20110104102617.patch</filename>
            <type>text/plain</type>
            <size>104748</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDc0OTczKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTEtMDEtMDQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXSzI6
IFN1cHBvcnQgQWNjZXNzaWJpbGl0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTE4NTkKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpmb2N1c2VkRWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cm9vdEVsZW1lbnQpOgorCiAyMDExLTAxLTAzICBZaSBTaGVuICA8eWkuNC5zaGVuQG5va2lhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQko
cmV2aXNpb24gNzQ5NzMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDEwIEBACiAjaW1w
b3J0ICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgogCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmgiCisjaW1wb3J0IDxBcHBLaXQvTlNDb2xvci5oPgogI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XZWJGcmFtZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlldy5o
PgogCiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQpA
QCAtNDksMTQgKzUxLDE0IEBAIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNv
bnQKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3Vz
ZWRFbGVtZW50KCkKIHsKICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZSBjYWNoaW5nIGhl
cmUuCi0gICAgaWQgYWNjZXNzaWJpbGl0eU9iamVjdCA9IFtbW21haW5GcmFtZSBmcmFtZVZpZXdd
IGRvY3VtZW50Vmlld10gYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRdOworICAgIGlkIGFj
Y2Vzc2liaWxpdHlPYmplY3QgPSBbW21haW5GcmFtZSBhY2Nlc3NpYmlsaXR5Um9vdF0gYWNjZXNz
aWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRdOwogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50KGFjY2Vzc2liaWxpdHlPYmplY3QpOwogfQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgpCiB7CiAgICAgLy8gRklYTUU6IHdl
IGNvdWxkIGRvIHNvbWUgY2FjaGluZyBoZXJlLgotICAgIGlkIGFjY2Vzc2liaWxpdHlPYmplY3Qg
PSBbW21haW5GcmFtZSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgaWQgYWNjZXNzaWJp
bGl0eU9iamVjdCA9IFttYWluRnJhbWUgYWNjZXNzaWJpbGl0eVJvb3RdOwogICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KGFjY2Vzc2liaWxpdHlPYmplY3QpOwogfQogCkluZGV4OiBX
ZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gNzQ5NzMpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDEwMCBAQAorMjAxMS0wMS0wNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdLMjog
U3VwcG9ydCBBY2Nlc3NpYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MTg1OQorCisgICAgICAgIFN1cHBvcnQgV2ViS2l0MiBhY2Nlc3NpYmls
aXR5LiBUbyBkbyBzbywgaXQgd2FzIG5lY2Vzc2FyeSB0byBoYXZlCisgICAgICAgIGFuIEFjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3IGNsYXNzIHRoYXQgY291bGQgbWltaWMgd2hhdCB0aGUgcGxhdGZv
cm0gcHJvdmlkZWQgYmVmb3JlCisgICAgICAgIHdpdGggc2Nyb2xsIHZpZXdzLgorCisgICAgICAg
IFRlc3Q6IHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3dlYmtpdC1zY3JvbGxhcmVhLmh0bWwK
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgor
ICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJvb3RPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZSk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpo
YW5kbGVTY3JvbGxiYXJVcGRhdGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUltYWdlTWFwTGluay5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5SW1hZ2VNYXBMaW5rLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveE9wdGlvbi5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveE9wdGlvbi5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp1cGRhdGVD
aGlsZHJlbklmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmVsZW1lbnRBY2Nlc3NpYmlsaXR5SGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpheE9iamVjdENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OmZvY3VzZWRVSUVsZW1lbnQpOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0Ojppc1Njcm9sbFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6Y2FuU2V0TnVtZXJpY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnNjcm9sbEJhcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OnNldFZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6cGFyZW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2hpbGRyZW4pOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjplbGVtZW50UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpkb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpvcmllbnRhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjppc0VuYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6dmFsdWVGb3JSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpzZXRWYWx1ZSk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpzZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6Y2FuU2V0VmFsdWVBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6Y2FuU2V0TnVtZXJpY1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmlzQWNjZXNzaWJpbGl0eVNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpwYXJl
bnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6cm9s
ZVZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJp
bGl0eUlnbm9yZUF0dGFjaG1lbnQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyLm1tOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdKToKKyAgICAgICAgKC1bQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdF0pOgor
ICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBwb3NpdGlvbl0pOgorICAgICAg
ICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBzY3JvbGxWaWV3UGFyZW50XSk6CisgICAg
ICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZTpdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJp
bGl0eUhpdFRlc3Q6XSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFj
Y2Vzc2liaWxpdHlTZXRWYWx1ZTpmb3JBdHRyaWJ1dGU6XSk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpheE9iamVjdENhY2hlKToKKyAg
ICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZy
YW1lTG9hZGVyQ2xpZW50OjphY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KToKKyAgICAgICAgKiBs
b2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6On5GcmFtZVZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3OjpheE9iamVjdENhY2hlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmll
dy5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3OjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgICogcGxh
dGZvcm0vU2Nyb2xsYmFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6flNjcm9s
bGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXI6OmF4T2JqZWN0Q2FjaGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cm9sbGJhci5oOgorICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5oOgorICAgICAgICAoV2ViQ29y
ZTo6V2lkZ2V0OjpheE9iamVjdENhY2hlKToKKwogMjAxMS0wMS0wNCAgVG9ueSBHZW50aWxjb3Jl
ICA8dG9ueWdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4LgpJ
bmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTU3NSw2ICs1NzUsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAg
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAogICAgIGFjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlTY3JvbGxiYXIuY3BwCisgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xs
Vmlldy5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwCiAgICAg
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCiAgICAgYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA3NDk3MykKKysr
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTY2Miw2ICs2NjIsOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmggXAogCVdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
U2Nyb2xsYmFyLmNwcCBcCiAJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3Jv
bGxiYXIuaCBcCisJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3
LmNwcCBcCisJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Lmgg
XAogCVdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcCBcCiAJV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuaCBcCiAJV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNp
b24gNzQ5NzMpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODksNyArMjg5LDcgQEAgX19aTjdXZWJDb3JlMTJjcmVhdGVNYXJrdXBFUEtOU180Tm9kZUVOUwog
X19aTjdXZWJDb3JlMTJjcmVhdGVNYXJrdXBFUEtOU181UmFuZ2VFUE4zV1RGNlZlY3RvcklQTlNf
NE5vZGVFTG0wRUVFTlNfMjNFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZUViTlNfMTNFQWJzb2x1dGVV
UkxzRQogX19aTjdXZWJDb3JlMTJnY0NvbnRyb2xsZXJFdgogX19aTjdXZWJDb3JlMTJpY29uRGF0
YWJhc2VFdgotX19aTjdXZWJDb3JlMTNBWE9iamVjdENhY2hlMTFnZXRPckNyZWF0ZUVQTlNfMTJS
ZW5kZXJPYmplY3RFCitfX1pON1dlYkNvcmUxM0FYT2JqZWN0Q2FjaGUxMHJvb3RPYmplY3RFdgog
X19aTjdXZWJDb3JlMTNBWE9iamVjdENhY2hlMjFnQWNjZXNzaWJpbGl0eUVuYWJsZWRFCiBfX1pO
N1dlYkNvcmUxM0FYT2JqZWN0Q2FjaGU0MmdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJm
YWNlRW5hYmxlZEUKIF9fWk43V2ViQ29yZTEzSFRUUEhlYWRlck1hcEMxRXYKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZp
c2lvbiA3NDk3MykKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC01
MTgsNiArNTE4LDggQEAKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
U2Nyb2xsYmFyLmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
U2Nyb2xsYmFyLmgnLAorICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNj
cm9sbFZpZXcuY3BwJywKKyAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlT
Y3JvbGxWaWV3LmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNs
aWRlci5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRl
ci5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAn
LApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUucHJvCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcg
Y29weSkKQEAgLTMyMSw2ICszMjEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAgXCAgICAKICAgICBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIFwgICAgCiAgICAgYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmNwcCBcCisgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2Nyb2xsVmlldy5jcHAgXAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNs
aWRlci5jcHAgXCAgICAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5j
cHAgXCAgICAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3Bw
IFwgICAgCkBAIC0xMzk4LDYgKzEzOTksNyBAQCBIRUFERVJTICs9IFwKICAgICBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5oIFwKICAgICBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCBcCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyLmggXAorICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9s
bFZpZXcuaCBcCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmggXAogICAg
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5oIFwKICAgICBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzc1NCw2ICsyMzc1NCw2MiBA
QAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxhY2Nl
c3NpYmlsaXR5XEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcCIKKwkJCQk+CisJCQkJPEZpbGVD
b25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVD
b25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfTFRDR3xXaW4zMiIKKwkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxhY2Nlc3NpYmlsaXR5
XEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGFjY2Vzc2liaWxpdHlcQWNjZXNzaWJpbGl0eVNsaWRlci5j
cHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY5Myw2
ICs2OTMsOCBAQAogCQkyNEY1NEVBRDEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNo
ZUhvc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0
RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTI1NDJGNERBMTE2NkMyNUEwMEU4OUE4
NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyRjREODExNjZDMjVBMDBFODlBODYgLyogVXNlckdlc3R1
cmVJbmRpY2F0b3IuY3BwICovOyB9OwogCQkyNTQyRjREQjExNjZDMjVBMDBFODlBODYgLyogVXNl
ckdlc3R1cmVJbmRpY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDI1NDJGNEQ5MTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTI5
NDg5RkM3MTJDMDBGMDMwMEQ4M0YwRiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjk0ODlGQzUxMkMwMEYw
MzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggKi87IH07CisJCTI5NDg5RkM4
MTJDMDBGMDMwMEQ4M0YwRiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTQ4OUZDNjEyQzAwRjAzMDBE
ODNGMEYgLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwICovOyB9OwogCQkyOUE4MTIyNjBG
QkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUE4MTIwODBGQkI5QzFEMDA1
MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgKi87IH07CiAJCTI5QTgxMjI3
MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBODEyMDkwRkJCOUMxRDAwNTEwMjkz
IC8qIEFjY2Vzc2liaWxpdHlUYWJsZS5jcHAgKi87IH07CiAJCTI5QTgxMjI4MEZCQjlDMUQwMDUx
MDI5MyAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBODEyMEEwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vz
c2liaWxpdHlBUklBR3JpZC5jcHAgKi87IH07CkBAIC02OTk2LDYgKzY5OTgsOCBAQAogCQkyNEY1
NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZUhvc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjU0MkY0RDgxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0
dXJlSW5kaWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVz
ZXJHZXN0dXJlSW5kaWNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjU0
MkY0RDkxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5NDg5RkM1MTJDMDBGMDMwMEQ4M0YwRiAvKiBBY2Nlc3Np
YmlsaXR5U2Nyb2xsVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nl
c3NpYmlsaXR5U2Nyb2xsVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyOTQ4
OUZDNjEyQzAwRjAzMDBEODNGMEYgLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUE4MTIwODBGQkI5QzFEMDA1MTAy
OTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlBODEyMDkwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2li
aWxpdHlUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nl
c3NpYmlsaXR5VGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUE4MTIw
QTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjkzOCw2ICsxMjk0Miw4IEBACiAJCQkJQTQw
OUM5ODMxMTZEMERERDAwNzE5N0JEIC8qIEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5o
ICovLAogCQkJCTI5QTgxMjA4MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcCAqLywKIAkJCQkyOUE4MTIxQjBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5oICovLAorCQkJCTI5NDg5RkM2MTJDMDBGMDMwMEQ4M0YwRiAvKiBB
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAgKi8sCisJCQkJMjk0ODlGQzUxMkMwMEYwMzAwRDgz
RjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggKi8sCiAJCQkJOTNDNEY2RTgxMTA4RjlB
NTAwOTlEMERCIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwICovLAogCQkJCTkzQzRGNkU5
MTEwOEY5QTUwMDk5RDBEQiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmggKi8sCiAJCQkJMDcw
OUZDNEIxMDI1REVEODAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuY3BwICovLApAQCAt
MjIyNjUsNiArMjIyNzEsNyBAQAogCQkJCTkzRjE5OUVEMDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xU
UHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkg
LyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0RENEQ4NzBGREY0RDZF
MDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjk0ODlGQzcxMkMw
MEYwMzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggaW4gSGVhZGVycyAqLywK
IAkJCQk3RUU2ODQ2MDEyRDI2RTM4MDBFNzk0MTUgLyogQXV0aGVudGljYXRpb25DRi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJN0VFNjg0NjExMkQyNkUzODAwRTc5NDE1IC8qIEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUU2ODQ2NDEyRDI2RTM4MDBFNzk0MTUg
LyogQ29va2llU3RvcmFnZUNGTmV0LmggaW4gSGVhZGVycyAqLywKQEAgLTI0OTQzLDYgKzI0OTUw
LDcgQEAKIAkJCQk5M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3NvckxpYnhz
bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhT
TFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0RENEQ4NjBGREY0RDZFMDBF
Q0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyOTQ4OUZDODEyQzAw
RjAzMDBEODNGMEYgLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0VFNjg0NUYxMkQyNkUzODAwRTc5NDE1IC8qIEF1dGhlbnRpY2F0aW9uQ0YuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0NjIxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tpZUphckNG
TmV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFRTY4NDYzMTJEMjZFMzgwMEU3OTQxNSAvKiBD
b29raWVTdG9yYWdlQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIs
NyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmgiCiAjaW5jbHVkZSAi
QWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmgiCiAj
aW5jbHVkZSAiQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxp
dHlTbGlkZXIuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKQEAgLTQ5LDYgKzUw
LDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaCIKICNpbmNsdWRlICJB
Y2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmls
aXR5VGFibGVSb3cuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZvY3VzQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEFyZWFFbGVtZW50
LmgiCkBAIC02Nyw2ICs2OSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKICNpbmNs
dWRlICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAi
U2Nyb2xsVmlldy5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIApAQCAtNzcsOSAr
ODAsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIGJvb2wgQVhPYmplY3RDYWNoZTo6
Z0FjY2Vzc2liaWxpdHlFbmFibGVkID0gZmFsc2U7CiBib29sIEFYT2JqZWN0Q2FjaGU6OmdBY2Nl
c3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZCA9IGZhbHNlOwogCi1BWE9iamVj
dENhY2hlOjpBWE9iamVjdENhY2hlKCkKK0FYT2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2FjaGUoY29u
c3QgRG9jdW1lbnQqIGRvYykKICAgICA6IG1fbm90aWZpY2F0aW9uUG9zdFRpbWVyKHRoaXMsICZB
WE9iamVjdENhY2hlOjpub3RpZmljYXRpb25Qb3N0VGltZXJGaXJlZCkKIHsKKyAgICBtX2RvY3Vt
ZW50ID0gY29uc3RfY2FzdDxEb2N1bWVudCo+KGRvYyk7CiB9CiAKIEFYT2JqZWN0Q2FjaGU6On5B
WE9iamVjdENhY2hlKCkKQEAgLTE1MSwxOSArMTU1LDMwIEBAIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IEFYT2JqZWN0Q2FjaGU6OmZvY3UKICAgICByZXR1cm4gb2JqOwogfQogCitBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCF3
aWRnZXQpCisgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICBBWElEIGF4SUQgPSBtX3dp
ZGdldE9iamVjdE1hcHBpbmcuZ2V0KHdpZGdldCk7CisgICAgQVNTRVJUKCFIYXNoVHJhaXRzPEFY
SUQ+Ojppc0RlbGV0ZWRWYWx1ZShheElEKSk7CisgICAgaWYgKCFheElEKQorICAgICAgICByZXR1
cm4gMDsKKyAgICAKKyAgICByZXR1cm4gbV9vYmplY3RzLmdldChheElEKS5nZXQoKTsgICAgCit9
CisgICAgCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikKIHsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gMDsK
ICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSAwOwogICAgIEFYSUQgYXhJRCA9
IG1fcmVuZGVyT2JqZWN0TWFwcGluZy5nZXQocmVuZGVyZXIpOwogICAgIEFTU0VSVCghSGFzaFRy
YWl0czxBWElEPjo6aXNEZWxldGVkVmFsdWUoYXhJRCkpOwotCi0gICAgaWYgKGF4SUQpCi0gICAg
ICAgIG9iaiA9IG1fb2JqZWN0cy5nZXQoYXhJRCkuZ2V0KCk7CisgICAgaWYgKCFheElEKQorICAg
ICAgICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4gb2JqOworICAgIHJldHVybiBtX29iamVj
dHMuZ2V0KGF4SUQpLmdldCgpOyAgICAKIH0KIAogLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgYmVs
b25ncyBvbiBOb2RlLgpAQCAtMjMwLDYgKzI0NSwyOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxBY2Nl
c3NpYmlsaXR5T2JqZWN0PiBjCiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmNyZWF0ZShyZW5kZXJlcik7CiB9CiAKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2Fj
aGU6OmdldE9yQ3JlYXRlKFdpZGdldCogd2lkZ2V0KQoreworICAgIGlmICghd2lkZ2V0KQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBnZXQo
d2lkZ2V0KSkKKyAgICAgICAgcmV0dXJuIG9iajsKKyAgICAKKyAgICBSZWZQdHI8QWNjZXNzaWJp
bGl0eU9iamVjdD4gbmV3T2JqID0gMDsKKyAgICBpZiAod2lkZ2V0LT5pc0ZyYW1lVmlldygpKQor
ICAgICAgICBuZXdPYmogPSBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6Y3JlYXRlKHN0YXRpY19j
YXN0PFNjcm9sbFZpZXcqPih3aWRnZXQpKTsKKyAgICBlbHNlIGlmICh3aWRnZXQtPmlzU2Nyb2xs
YmFyKCkpCisgICAgICAgIG5ld09iaiA9IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmNyZWF0ZShz
dGF0aWNfY2FzdDxTY3JvbGxiYXIqPih3aWRnZXQpKTsKKyAgICAgICAgCisgICAgZ2V0QVhJRChu
ZXdPYmouZ2V0KCkpOworICAgIAorICAgIG1fd2lkZ2V0T2JqZWN0TWFwcGluZy5zZXQod2lkZ2V0
LCBuZXdPYmotPmF4T2JqZWN0SUQoKSk7CisgICAgbV9vYmplY3RzLnNldChuZXdPYmotPmF4T2Jq
ZWN0SUQoKSwgbmV3T2JqKTsgICAgCisgICAgYXR0YWNoV3JhcHBlcihuZXdPYmouZ2V0KCkpOwor
ICAgIHJldHVybiBuZXdPYmouZ2V0KCk7Cit9CisgICAgCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
WE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAg
IGlmICghcmVuZGVyZXIpCkBAIC0yNDcsNiArMjg0LDExIEBAIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IEFYT2JqZWN0Q2FjaGU6OmdldE8KICAgICBhdHRhY2hXcmFwcGVyKG5ld09iai5nZXQoKSk7CiAg
ICAgcmV0dXJuIG5ld09iai5nZXQoKTsKIH0KKyAgICAKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFY
T2JqZWN0Q2FjaGU6OnJvb3RPYmplY3QoKQoreworICAgIHJldHVybiBnZXRPckNyZWF0ZShtX2Rv
Y3VtZW50LT52aWV3KCkpOworfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hl
OjpnZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSByb2xlKQogewpAQCAtMjc1LDkgKzMxNyw2
IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE8KICAgICBjYXNlIE1l
bnVMaXN0T3B0aW9uUm9sZToKICAgICAgICAgb2JqID0gQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0
aW9uOjpjcmVhdGUoKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTY3JvbGxCYXJSb2xlOgot
ICAgICAgICBvYmogPSBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpjcmVhdGUoKTsKLSAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgb2JqID0gMDsKICAgICB9CkBAIC0zMjMsNiAr
MzYyLDE3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cmVtb3ZlKFJlbmRlck9iamVjdCoKICAgICBt
X3JlbmRlck9iamVjdE1hcHBpbmcucmVtb3ZlKHJlbmRlcmVyKTsKIH0KIAordm9pZCBBWE9iamVj
dENhY2hlOjpyZW1vdmUoV2lkZ2V0KiB2aWV3KQoreworICAgIGlmICghdmlldykKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBBWElEIGF4SUQgPSBtX3dpZGdldE9iamVjdE1hcHBpbmcu
Z2V0KHZpZXcpOworICAgIHJlbW92ZShheElEKTsKKyAgICBtX3dpZGdldE9iamVjdE1hcHBpbmcu
cmVtb3ZlKHZpZXcpOworfQorICAgIAorICAgIAogI2lmICFQTEFURk9STShXSU4pIHx8IE9TKFdJ
TkNFKQogQVhJRCBBWE9iamVjdENhY2hlOjpwbGF0Zm9ybUdlbmVyYXRlQVhJRCgpIGNvbnN0CiB7
CkBAIC00NzgsNiArNTI4LDE4IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6bm9kZVRleHRDaGFuZ2VO
b3RpZmkKICNlbmRpZgogCiAjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQorCit2b2lkIEFYT2JqZWN0
Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KiB2aWV3KQoreworICAgIGlm
ICghdmlldykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFdlIGRvbid0IHdhbnQgdG8g
Y3JlYXRlIGEgc2Nyb2xsIHZpZXcgZnJvbSB0aGlzIG1ldGhvZCwgb25seSB1cGRhdGUgYW4gZXhp
c3Rpbmcgb25lLgorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbFZpZXdPYmplY3QgPSBn
ZXQodmlldyk7CisgICAgaWYgKHNjcm9sbFZpZXdPYmplY3QpCisgICAgICAgIHNjcm9sbFZpZXdP
YmplY3QtPnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKK30KKyAgICAKIHZvaWQgQVhPYmpl
Y3RDYWNoZTo6aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlKFJlbmRlck9iamVjdCAqcmVuZGVyZXIp
CiB7CiAgICAgaWYgKCFyZW5kZXJlcikKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsMTQgQEAgY2xhc3MgV2ViQ29y
ZVRleHRNYXJrZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRG9jdW1lbnQ7CiBj
bGFzcyBIVE1MQXJlYUVsZW1lbnQ7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKIGNsYXNzIFJl
bmRlck9iamVjdDsKK2NsYXNzIFNjcm9sbFZpZXc7CiBjbGFzcyBWaXNpYmxlUG9zaXRpb247Citj
bGFzcyBXaWRnZXQ7CiAKIHN0cnVjdCBUZXh0TWFya2VyRGF0YSB7CiAgICAgQVhJRCBheElEOwpA
QCAtNTksMTQgKzYyLDE3IEBAIGVudW0gUG9zdFR5cGUgeyBQb3N0U3luY2hyb25vdXNseSwgUG9z
dEEKIAogY2xhc3MgQVhPYmplY3RDYWNoZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6
Ci0gICAgQVhPYmplY3RDYWNoZSgpOworICAgIEFYT2JqZWN0Q2FjaGUoY29uc3QgRG9jdW1lbnQq
KTsKICAgICB+QVhPYmplY3RDYWNoZSgpOwogCiAgICAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGZvY3VzZWRVSUVsZW1lbnRGb3JQYWdlKGNvbnN0IFBhZ2UqKTsKIAotICAgIC8vIHRvIGJl
IHVzZWQgd2l0aCByZW5kZXIgb2JqZWN0cwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9y
Q3JlYXRlKFJlbmRlck9iamVjdCopOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvb3RPYmpl
Y3QoKTsKICAgICAKKyAgICAvLyBGb3IgQVggb2JqZWN0cyB3aXRoIGVsZW1lbnRzIHRoYXQgYmFj
ayB0aGVtLgorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKFJlbmRlck9iamVj
dCopOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKFdpZGdldCopOworCiAg
ICAgLy8gdXNlZCBmb3Igb2JqZWN0cyB3aXRob3V0IGJhY2tpbmcgZWxlbWVudHMKICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBnZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSk7CiAgICAgCkBA
IC03NCw2ICs4MCw3IEBAIHB1YmxpYzoKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXQoUmVu
ZGVyT2JqZWN0Kik7CiAgICAgCiAgICAgdm9pZCByZW1vdmUoUmVuZGVyT2JqZWN0Kik7CisgICAg
dm9pZCByZW1vdmUoV2lkZ2V0Kik7CiAgICAgdm9pZCByZW1vdmUoQVhJRCk7CiAKICAgICB2b2lk
IGRldGFjaFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdCopOwpAQCAtODgsNiArOTUsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBoYW5kbGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZChSZW5kZXJPYmpl
Y3QqIG9sZEZvY3VzZWRSZW5kZXJlciwgUmVuZGVyT2JqZWN0KiBuZXdGb2N1c2VkUmVuZGVyZXIp
OwogICAgIHZvaWQgaGFuZGxlU2Nyb2xsZWRUb0FuY2hvcihjb25zdCBOb2RlKiBhbmNob3JOb2Rl
KTsKICAgICB2b2lkIGhhbmRsZUFyaWFFeHBhbmRlZENoYW5nZShSZW5kZXJPYmplY3QqKTsKKyAg
ICB2b2lkIGhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3Kik7CiAgICAgCiAgICAgc3Rh
dGljIHZvaWQgZW5hYmxlQWNjZXNzaWJpbGl0eSgpIHsgZ0FjY2Vzc2liaWxpdHlFbmFibGVkID0g
dHJ1ZTsgfQogICAgIHN0YXRpYyB2b2lkIGVuYWJsZUVuaGFuY2VkVXNlckludGVyZmFjZUFjY2Vz
c2liaWxpdHkoKSB7IGdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZCA9
IHRydWU7IH0KQEAgLTE0NSw4ICsxNTMsMTAgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgbm9kZVRl
eHRDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhUZXh0
Q2hhbmdlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KTsKIAogcHJpdmF0ZToKKyAg
ICBEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3Np
YmlsaXR5T2JqZWN0PiA+IG1fb2JqZWN0czsKICAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIEFY
SUQ+IG1fcmVuZGVyT2JqZWN0TWFwcGluZzsKKyAgICBIYXNoTWFwPFdpZGdldCosIEFYSUQ+IG1f
d2lkZ2V0T2JqZWN0TWFwcGluZzsKICAgICBIYXNoU2V0PE5vZGUqPiBtX3RleHRNYXJrZXJOb2Rl
czsKICAgICBzdGF0aWMgYm9vbCBnQWNjZXNzaWJpbGl0eUVuYWJsZWQ7CiAgICAgc3RhdGljIGJv
b2wgZ0FjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkOwpAQCAtMTYwLDYg
KzE3MCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZvY3Vz
ZWRJbWFnZU1hcFVJRWxlbWVudChIVE1MQXJlYUVsZW1lbnQqKTsKICAgICAKICAgICBBWElEIGdl
dEFYSUQoQWNjZXNzaWJpbGl0eU9iamVjdCopOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdl
dChXaWRnZXQqKTsKIH07CiAKIGJvb2wgbm9kZUhhc1JvbGUoTm9kZSosIGNvbnN0IFN0cmluZyYg
cm9sZSk7CkBAIC0xNzksNiArMTkwLDcgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFu
ZGxlRm9jdXNlZAogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlU2Nyb2xsZWRUb0Fu
Y2hvcihjb25zdCBOb2RlKikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpjb250ZW50
Q2hhbmdlZChSZW5kZXJPYmplY3QqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6Omhh
bmRsZUFyaWFFeHBhbmRlZENoYW5nZShSZW5kZXJPYmplY3QqKSB7IH0KK2lubGluZSB2b2lkIEFY
T2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KikgeyB9CiAjZW5k
aWYKIAogfQpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1h
cExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5SW1hZ2VNYXBMaW5rLmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
NiwxMSArMTM2LDYgQEAgSW50UmVjdCBBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rOjplbGVtZQog
ICAgIHJldHVybiBtX2FyZWFFbGVtZW50LT5nZXRSZWN0KHJlbmRlcmVyKTsKIH0KICAgICAKLUlu
dFNpemUgQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluazo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGVsZW1lbnRSZWN0KCkuc2l6ZSgpOwotfQotCiBTdHJpbmcgQWNjZXNzaWJpbGl0eUltYWdl
TWFwTGluazo6c3RyaW5nVmFsdWVGb3JNU0FBKCkgY29uc3QKIHsKICAgICByZXR1cm4gdXJsKCk7
CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VN
YXBMaW5rLmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlJbWFnZU1hcExpbmsuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nVmFsdWVGb3JNU0FBKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBTdHJpbmcgbmFtZUZvck1TQUEoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgSW50
U2l6ZSBzaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRSZWN0IGVsZW1lbnRSZWN0KCkgY29u
c3Q7CiAKIHByaXZhdGU6ICAgIApJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlMaXN0Qm94T3B0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCShyZXZpc2lvbiA3NDk3MykKKysrIFdl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1MiwxMSArMTUyLDYgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlMaXN0Qm94
T3B0aW9uOjpzdHJpbgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotSW50U2l6ZSBBY2Nlc3Np
YmlsaXR5TGlzdEJveE9wdGlvbjo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGVsZW1lbnRS
ZWN0KCkuc2l6ZSgpOwotfQotCiBFbGVtZW50KiBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6
YWN0aW9uRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fb3B0aW9uRWxlbWVudDsKSW5k
ZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9w
dGlvbi5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5TGlzdEJveE9wdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw2IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUoKSBjb25zdDsK
IAogICAgIHZpcnR1YWwgSW50UmVjdCBlbGVtZW50UmVjdCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
SW50U2l6ZSBzaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBw
YXJlbnRPYmplY3QoKSBjb25zdDsKICAgICBib29sIGlzTGlzdEJveE9wdGlvbigpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KICAgICAKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzAsNiAr
NzMwLDEyIEBAIEZyYW1lVmlldyogQWNjZXNzaWJpbGl0eU9iamVjdDo6ZG9jdW1lbnQKIAogICAg
IHJldHVybiBvYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CiB9CisgICAgCit2b2lkIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKQoreworICAgIGlmICgh
aGFzQ2hpbGRyZW4oKSkKKyAgICAgICAgYWRkQ2hpbGRyZW4oKTsgICAgCit9CiAKIHZvaWQgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6Y2xlYXJDaGlsZHJlbigpCiB7CkBAIC0xMDAxLDYgKzEwMDcsMzkg
QEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdXBwb3J0c0FSSUFMaQogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbGl2ZVJlZ2lvbiA9IGFyaWFMaXZlUmVnaW9uU3RhdHVzKCk7CiAgICAgcmV0
dXJuIGVxdWFsSWdub3JpbmdDYXNlKGxpdmVSZWdpb24sICJwb2xpdGUiKSB8fCBlcXVhbElnbm9y
aW5nQ2FzZShsaXZlUmVnaW9uLCAiYXNzZXJ0aXZlIik7CiB9CisKK0FjY2Vzc2liaWxpdHlPYmpl
Y3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmVsZW1lbnRBY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25z
dCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7IAorICAgIC8vIFNlbmQgdGhlIGhpdCB0ZXN0IGJh
Y2sgaW50byB0aGUgc3ViLWZyYW1lIGlmIG5lY2Vzc2FyeS4KKyAgICBpZiAoaXNBdHRhY2htZW50
KCkpIHsKKyAgICAgICAgV2lkZ2V0KiB3aWRnZXQgPSB3aWRnZXRGb3JBdHRhY2htZW50Vmlldygp
OworICAgICAgICBpZiAod2lkZ2V0ICYmIHdpZGdldC0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAg
ICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHN0YXRpY19jYXN0PFNjcm9s
bFZpZXcqPih3aWRnZXQpKS0+YWNjZXNzaWJpbGl0eUhpdFRlc3QocG9pbnQpOworICAgIH0KKwor
ICAgIHJldHVybiBjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3QqPih0aGlzKTsgCit9Cisg
ICAgCitBWE9iamVjdENhY2hlKiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpheE9iamVjdENhY2hlKCkg
Y29uc3QKK3sKKyAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKKyAgICBpZiAoZG9jKQor
ICAgICAgICByZXR1cm4gZG9jLT5heE9iamVjdENhY2hlKCk7CisgICAgcmV0dXJuIDA7Cit9Cisg
ICAgCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpmb2N1c2VkVUlF
bGVtZW50KCkgY29uc3QKK3sKKyAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKKyAgICBp
ZiAoIWRvYykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgUGFnZSogcGFnZSA9IGRvYy0+
cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0
dXJuIEFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVsZW1lbnRGb3JQYWdlKHBhZ2UpOworfQogICAg
IAogQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNoZWNrYm94
T3JSYWRpb1ZhbHVlKCkgY29uc3QKIHsKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNiArMjYw
LDggQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0Fj
Y2Vzc2liaWxpdHlTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNBbmNob3IoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0F0dGFjaG1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0hlYWRpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQpAQCAtMzA5LDYgKzMxMSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQnV0dG9uKCkgY29uc3Qg
eyByZXR1cm4gcm9sZVZhbHVlKCkgPT0gQnV0dG9uUm9sZTsgfQogICAgIGJvb2wgaXNMaXN0SXRl
bSgpIGNvbnN0IHsgcmV0dXJuIHJvbGVWYWx1ZSgpID09IExpc3RJdGVtUm9sZTsgfQogICAgIGJv
b2wgaXNDaGVja2JveE9yUmFkaW8oKSBjb25zdCB7IHJldHVybiBpc0NoZWNrYm94KCkgfHwgaXNS
YWRpb0J1dHRvbigpOyB9CisgICAgYm9vbCBpc1Njcm9sbFZpZXcoKSBjb25zdCB7IHJldHVybiBy
b2xlVmFsdWUoKSA9PSBTY3JvbGxBcmVhUm9sZTsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBp
c0NoZWNrZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0Vu
YWJsZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMzMyLDYgKzMzNSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRUZXh0UmFuZ2VBdHRyaWJ1dGVzKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0VmFsdWVBdHRy
aWJ1dGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRO
dW1lcmljVmFsdWUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBj
YW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCBib29sIGNhblNldFNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRFeHBhbmRlZEF0dHJpYnV0ZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0zNzMsOSArMzc3LDkgQEAgcHVibGljOgogICAgIC8v
IENhbGxlZCBvbiB0aGUgcm9vdCBBWCBvYmplY3QgdG8gcmV0dXJuIHRoZSBkZWVwZXN0IGF2YWls
YWJsZSBlbGVtZW50LgogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJp
bGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgLy8g
Q2FsbGVkIG9uIHRoZSBBWCBvYmplY3QgYWZ0ZXIgdGhlIHJlbmRlciB0cmVlIGRldGVybWluZXMg
d2hpY2ggaXMgdGhlIHJpZ2h0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuCi0gICAgdmlydHVh
bCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBlbGVtZW50QWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3Qg
SW50UG9pbnQmKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3Qq
Pih0aGlzKTsgfQorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogZWxlbWVudEFjY2Vz
c2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGZvY3VzZWRVSUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiAwOyB9
CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBmb2N1c2VkVUlFbGVtZW50KCkgY29u
c3Q7CiAKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25z
dCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsYXN0Q2hp
bGQoKSBjb25zdCB7IHJldHVybiAwOyB9CkBAIC0zOTEsNyArMzk1LDggQEAgcHVibGljOgogICAg
IHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogdGl0bGVVSUVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiAwOyB9CiAgICAgdmlydHVhbCBib29sIGV4cG9zZXNUaXRsZVVJRWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcnJl
c3BvbmRpbmdDb250cm9sRm9yTGFiZWxFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQotCisg
ICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzY3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9y
aWVudGF0aW9uKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgCiAgICAgdmlydHVhbCBBY2Nlc3Np
YmlsaXR5Um9sZSBhcmlhUm9sZUF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIFVua25vd25Sb2xl
OyB9CiAgICAgdmlydHVhbCBib29sIGlzUHJlc2VudGF0aW9uYWxDaGlsZE9mQXJpYVJvbGUoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBhcmlhUm9sZUhhc1ByZXNl
bnRhdGlvbmFsQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtNDAyLDcgKzQw
Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBhcmlhRGVzY3JpYmVkQnlBdHRyaWJ1
dGUoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgU3RyaW5nIGFjY2Vz
c2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CiAKLSAgICB2
aXJ0dWFsIEFYT2JqZWN0Q2FjaGUqIGF4T2JqZWN0Q2FjaGUoKSBjb25zdCB7IHJldHVybiAwOyB9
CisgICAgdmlydHVhbCBBWE9iamVjdENhY2hlKiBheE9iamVjdENhY2hlKCkgY29uc3Q7CiAgICAg
QVhJRCBheE9iamVjdElEKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQogICAgIHZvaWQgc2V0QVhP
YmplY3RJRChBWElEIGF4T2JqZWN0SUQpIHsgbV9pZCA9IGF4T2JqZWN0SUQ7IH0KICAgICAKQEAg
LTQxMSw3ICs0MTYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBFbGVtZW50KiBhY3Rpb25FbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgSW50UmVjdCBib3VuZGluZ0Jv
eFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KCk7IH0KICAgICB2aXJ0dWFsIEludFJlY3Qg
ZWxlbWVudFJlY3QoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBlbGVtZW50
UmVjdCgpLnNpemUoKTsgfQogICAgIHZpcnR1YWwgSW50UG9pbnQgY2xpY2tQb2ludCgpIGNvbnN0
OwogCiAgICAgdmlydHVhbCBQbGFpblRleHRSYW5nZSBzZWxlY3RlZFRleHRSYW5nZSgpIGNvbnN0
IHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0KQEAgLTQ0Miw2ICs0NDcsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkVGV4dChjb25zdCBTdHJpbmcmKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRUZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2Um
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJikgeyB9CisgICAg
dmlydHVhbCB2b2lkIHNldFZhbHVlKGZsb2F0KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Vs
ZWN0ZWQoYm9vbCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkUm93cyhBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSB7IH0KICAgICAKQEAgLTQ1OSw3ICs0NjUsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkcmVuKCkgeyB9CiAgICAgdmlydHVhbCBib29s
IGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaGFzQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2hhdmVDaGlsZHJlbjsgfQotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0
ZWRDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgdmlzaWJsZUNoaWxkcmVuKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCB0YWJDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Im
KSB7IH0KSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzQs
NyArNDM0LDE1IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXIKICAg
ICAgICAgICAgIHJldHVybiBwYXJlbnQ7CiAgICAgfQogICAgIAotICAgIHJldHVybiBheE9iamVj
dENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlclBhcmVudE9iamVjdCgpKTsKKyAgICBSZW5kZXJP
YmplY3QqIHBhcmVudE9iaiA9IHJlbmRlclBhcmVudE9iamVjdCgpOworICAgIGlmIChwYXJlbnRP
YmopCisgICAgICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHBhcmVudE9i
aik7CisgICAgCisgICAgLy8gV2ViQXJlYSdzIHBhcmVudCBzaG91bGQgYmUgdGhlIHNjcm9sbCB2
aWV3IGNvbnRhaW5pbmcgaXQuCisgICAgaWYgKGlzV2ViQXJlYSgpKQorICAgICAgICByZXR1cm4g
YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShtX3JlbmRlcmVyLT5mcmFtZSgpLT52aWV3KCkp
OworICAgIAorICAgIHJldHVybiAwOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmlzV2ViQXJlYSgpIGNvbnN0CkBAIC0yMzE2LDEyICsyMzI0LDYgQEAgV2lkZ2V0KiBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp3aWRnZQogICAgIHJldHVybiB0b1JlbmRlcldpZGdldCht
X3JlbmRlcmVyKS0+d2lkZ2V0KCk7CiB9CiAKLUFYT2JqZWN0Q2FjaGUqIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmF4T2JqZWN0Q2FjaGUoKSBjb25zdAotewotICAgIEFTU0VSVChtX3JlbmRl
cmVyKTsKLSAgICByZXR1cm4gbV9yZW5kZXJlci0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgp
OwotfQotCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojph
Y2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1hZ2VNYXAoSFRNTE1hcEVsZW1lbnQqIG1hcCkgY29uc3QK
IHsKICAgICAvLyBmaW5kIGFuIGltYWdlIHRoYXQgaXMgdXNpbmcgdGhpcyBtYXAKQEAgLTI3Mzks
OCArMjc0MSw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXIKICAg
ICAKICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckJveChtX3JlbmRlcmVyKS0+bGF5
ZXIoKTsKICAgICAgCi0gICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6
UmVhZE9ubHkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0VGVzdFJlcXVlc3Q6OkFj
dGl2ZSk7CisgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6UmVhZE9u
bHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlKTsKICAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RS
ZXN1bHQgPSBIaXRUZXN0UmVzdWx0KHBvaW50KTsKICAgICBsYXllci0+aGl0VGVzdChyZXF1ZXN0
LCBoaXRUZXN0UmVzdWx0KTsKICAgICBpZiAoIWhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCkpCkBA
IC0yNzc1LDE1ICsyNzc2LDYgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJl
bmRlcgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmZvY3VzZWRVSUVsZW1lbnQoKSBjb25zdAotewotICAgIFBh
Z2UqIHBhZ2UgPSBtX3JlbmRlcmVyLT5kb2N1bWVudCgpLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdl
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBBWE9iamVjdENhY2hlOjpmb2N1c2Vk
VUlFbGVtZW50Rm9yUGFnZShwYWdlKTsKLX0KLQogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjpzaG91bGRGb2N1c0FjdGl2ZURlc2NlbmRhbnQoKSBjb25zdAogewogICAgIHN3aXRjaCAo
YXJpYVJvbGVBdHRyaWJ1dGUoKSkgewpAQCAtMzMxNSw4ICszMzA3LDcgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0Ojp1cGRhdGVDaAogICAgIGlmIChuZWVkc1RvVXBkYXRlQ2hpbGRy
ZW4oKSkKICAgICAgICAgY2xlYXJDaGlsZHJlbigpOyAgICAgICAgCiAgICAgCi0gICAgaWYgKCFo
YXNDaGlsZHJlbigpKQotICAgICAgICBhZGRDaGlsZHJlbigpOyAgICAKKyAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0Ojp1cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCk7CiB9CiAgICAgCiBjb25zdCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmNoaWxkcmVuKCkKQEAgLTMzNTUsNiArMzM0NiwxMyBAQCB2b2lk
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZENoaWxkCiAgICAgICAgIH0KICAgICB9CiAg
ICAgCisgICAgLy8gRnJhbWVWaWV3J3MgbmVlZCB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBBWCBo
aWVyYXJjaHkgd2hlbiBlbmNvdW50ZXJlZC4KKyAgICBpZiAoaXNBdHRhY2htZW50KCkpIHsKKyAg
ICAgICAgV2lkZ2V0KiB3aWRnZXQgPSB3aWRnZXRGb3JBdHRhY2htZW50VmlldygpOworICAgICAg
ICBpZiAod2lkZ2V0ICYmIHdpZGdldC0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgICAgIG1fY2hp
bGRyZW4uYXBwZW5kKGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUod2lkZ2V0KSk7CisgICAg
fQorICAgIAogICAgIC8vIGZvciBhIFJlbmRlckltYWdlLCBhZGQgdGhlIDxhcmVhPiBlbGVtZW50
cyBhcyBpbmRpdmlkdWFsIGFjY2Vzc2liaWxpdHkgb2JqZWN0cwogICAgIFJlbmRlckJveE1vZGVs
T2JqZWN0KiBjc3NCb3ggPSByZW5kZXJCb3hNb2RlbE9iamVjdCgpOwogICAgIGlmIChjc3NCb3gg
JiYgY3NzQm94LT5pc1JlbmRlckltYWdlKCkpIHsKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkocmV2aXNpb24gNzQ5NzMpCisr
KyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IGxh
eW91dENvdW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgZXN0aW1hdGVkTG9hZGluZ1By
b2dyZXNzKCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBm
b2N1c2VkVUlFbGVtZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBmaXJzdENoaWxkKCkgY29uc3Q7CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBs
YXN0Q2hpbGQoKSBjb25zdDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHByZXZp
b3VzU2libGluZygpIGNvbnN0OwpAQCAtMTQ3LDggKzE0Niw2IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgYXJpYVJvbGVIYXNQcmVzZW50YXRpb25hbENoaWxkcmVuKCkgY29uc3Q7CiAgICAg
dm9pZCB1cGRhdGVBY2Nlc3NpYmlsaXR5Um9sZSgpOwogICAgIAotICAgIHZpcnR1YWwgQVhPYmpl
Y3RDYWNoZSogYXhPYmplY3RDYWNoZSgpIGNvbnN0OwotCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxl
ZCBvbiB0aGUgcm9vdCBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0byBraWNrIG9mZiBhIGhpdCB0ZXN0
LgogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eUhpdFRlc3Qo
Y29uc3QgSW50UG9pbnQmKSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDI1ICsyOSw3NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFj
Y2Vzc2liaWxpdHlTY3JvbGxiYXIuaCIKIAorI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAjaW5jbHVkZSAi
U2Nyb2xsYmFyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQWNjZXNzaWJpbGl0eVNjcm9s
bGJhcjo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcigpCi0gICAgOiBtX3Njcm9sbGJhcigwKQorQWNj
ZXNzaWJpbGl0eVNjcm9sbGJhcjo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcihTY3JvbGxiYXIgKnNj
cm9sbGJhcikKKyAgICA6IG1fc2Nyb2xsYmFyKHNjcm9sbGJhcikKKyAgICAsIG1fcGFyZW50KDAp
CiB7CisgICAgQVNTRVJUKHNjcm9sbGJhcik7CiB9CiAKLVBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0
eVNjcm9sbGJhcj4gQWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6Y3JlYXRlKCkKK1Bhc3NSZWZQdHI8
QWNjZXNzaWJpbGl0eVNjcm9sbGJhcj4gQWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6Y3JlYXRlKFNj
cm9sbGJhciAqc2Nyb2xsYmFyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWNjZXNzaWJp
bGl0eVNjcm9sbGJhcik7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5U2Ny
b2xsYmFyKHNjcm9sbGJhcikpOwogfQorICAgIAorSW50UmVjdCBBY2Nlc3NpYmlsaXR5U2Nyb2xs
YmFyOjplbGVtZW50UmVjdCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Njcm9sbGJhcikKKyAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAKKyAgICByZXR1cm4gbV9zY3JvbGxiYXItPmZyYW1l
UmVjdCgpOworfQorICAgIAorRG9jdW1lbnQqIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmRvY3Vt
ZW50KCkgY29uc3QKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBwYXJlbnRP
YmplY3QoKTsKKyAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IHBhcmVudC0+ZG9jdW1lbnQoKTsKK30KKworQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uIEFjY2Vz
c2liaWxpdHlTY3JvbGxiYXI6Om9yaWVudGF0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2Ny
b2xsYmFyKQorICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uSG9yaXpvbnRh
bDsKKworICAgIGlmIChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyKQorICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uSG9yaXpvbnRh
bDsKKyAgICBpZiAobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxi
YXIpCisgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25WZXJ0aWNhbDsKIAor
ICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25Ib3Jpem9udGFsOworfQorCitib29s
IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmlzRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFt
X3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3Njcm9sbGJh
ci0+ZW5hYmxlZCgpOworfQorICAgIAogZmxvYXQgQWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6dmFs
dWVGb3JSYW5nZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3Njcm9sbGJhcikKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCk7CisKKyAgICByZXR1
cm4gbV9zY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAvIG1fc2Nyb2xsYmFyLT5tYXhpbXVtKCk7CiB9
CiAKK3ZvaWQgQWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6c2V0VmFsdWUoZmxvYXQgdmFsdWUpCit7
CisgICAgaWYgKCFtX3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZsb2F0
IG5ld1ZhbHVlID0gdmFsdWUgKiBtX3Njcm9sbGJhci0+bWF4aW11bSgpOworICAgIAorICAgIG1f
c2Nyb2xsYmFyLT5zZXRWYWx1ZShuZXdWYWx1ZSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5p
bWF0b3IpOyAgICAKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuaAkocmV2aXNpb24g
NzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNywzMCArMzcsMzQgQEAgY2xhc3MgU2Nyb2xsYmFyOwogCiBj
bGFzcyBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyIDogcHVibGljIEFjY2Vzc2liaWxpdHlPYmplY3Qg
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI+
IGNyZWF0ZSgpOwotCi0gICAgdm9pZCBzZXRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
IHsgbV9zY3JvbGxiYXIgPSBzY3JvbGxiYXI7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBY2Nl
c3NpYmlsaXR5U2Nyb2xsYmFyPiBjcmVhdGUoU2Nyb2xsYmFyKik7CiAKICAgICBTY3JvbGxiYXIq
IHNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYmFyLmdldCgpOyB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQotCi0gICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlVmFsdWUoKSBjb25zdCB7
IHJldHVybiBTY3JvbGxCYXJSb2xlOyB9Ci0KLSAgICB2aXJ0dWFsIGZsb2F0IHZhbHVlRm9yUmFu
Z2UoKSBjb25zdDsKLQorICAgIHZvaWQgc2V0UGFyZW50KEFjY2Vzc2liaWxpdHlPYmplY3QqIHBh
cmVudCkgeyBtX3BhcmVudCA9IHBhcmVudDsgfQorICAgIAogcHJpdmF0ZToKLSAgICBBY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyKCk7CisgICAgQWNjZXNzaWJpbGl0eVNjcm9sbGJhcihTY3JvbGxiYXIq
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0VmFsdWVBdHRyaWJ1dGUoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGNhblNldE51bWVyaWNWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIC8vIFRoZXNlIHNob3VsZCBuZXZlciBi
ZSByZWFjaGVkIHNpbmNlIHRoZSBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyIGlzIG5vdCBwYXJ0IG9m
Ci0gICAgLy8gdGhlIGFjY2Vzc2liaWxpdHkgdHJlZS4KLSAgICB2aXJ0dWFsIEludFNpemUgc2l6
ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBJbnRTaXplKCk7IH0KLSAg
ICB2aXJ0dWFsIEludFJlY3QgZWxlbWVudFJlY3QoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyByZXR1cm4gSW50UmVjdCgpOyB9Ci0gICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBwYXJlbnRPYmplY3QoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnRPYmpl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQorICAgIHZpcnR1YWwgSW50UmVjdCBlbGVt
ZW50UmVjdCgpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUgcm9s
ZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gU2Nyb2xsQmFyUm9sZTsgfQorICAgIHZpcnR1YWwgQWNj
ZXNzaWJpbGl0eU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBE
b2N1bWVudCogZG9jdW1lbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKCkg
Y29uc3Q7CisgICAgCisgICAgLy8gQXNzdW1lcyBmbG9hdCBbMC4uMV0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VmFsdWUoZmxvYXQpOworICAgIHZpcnR1YWwgZmxvYXQgdmFsdWVGb3JSYW5nZSgpIGNv
bnN0OwogCiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9zY3JvbGxiYXI7CisgICAgQWNjZXNzaWJp
bGl0eU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
bV9wYXJlbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1tCShyZXZp
c2lvbiA3NDk3MykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9i
amVjdE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksMTYgKzI5LDIzIEBACiAjaWYgSEFWRShB
Q0NFU1NJQklMSVRZKQogCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5oIgor
I2ltcG9ydCAiV2lkZ2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogYm9vbCBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5SWdub3JlQXR0YWNobWVudCgpIGNvbnN0CiB7Ci0g
ICAgTlNWaWV3KiBhdHRhY2htZW50ID0gW3dyYXBwZXIoKSBhdHRhY2htZW50Vmlld107Ci0gICAg
aWYgKCFhdHRhY2htZW50KQorICAgIC8vIEZyYW1lVmlldyBhdHRhY2htZW50cyBhcmUgbm93IGhh
bmRsZWQgYnkgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcsIAorICAgIC8vIHNvIGlmIHRoaXMgaXMg
dGhlIGF0dGFjaG1lbnQsIGl0IHNob3VsZCBiZSBpZ25vcmVkLgorICAgIFdpZGdldCogd2lkZ2V0
ID0gMDsKKyAgICBpZiAoaXNBdHRhY2htZW50KCkgJiYgKHdpZGdldCA9IHdpZGdldEZvckF0dGFj
aG1lbnRWaWV3KCkpICYmIHdpZGdldC0+aXNGcmFtZVZpZXcoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoW3dyYXBwZXIoKSBhdHRhY2htZW50Vmlld10pCisgICAgICAgIHJldHVy
biBbW3dyYXBwZXIoKSBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUlzSWdub3JlZF07CiAg
ICAgCi0gICAgcmV0dXJuIFthdHRhY2htZW50IGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRdOworICAg
IC8vIEF0dGFjaG1lbnRzIGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQgKHVubGVzcyB3ZSBkZXRlcm1p
bmUgdGhhdCB3ZSBzaG91bGQgZXhwb3NlIHRoZW0pLgorICAgIHJldHVybiB0cnVlOwogfQogCiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFjY2Vzc2li
aWxpdHlQbGF0Zm9ybUluY2x1ZGVzT2JqZWN0KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQko
cmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw2ICszNiw3
IEBACiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5TGlzdEJveC5oIgogI2ltcG9ydCAiQWNjZXNzaWJp
bGl0eUxpc3QuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCIKKyNpbXBv
cnQgIkFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VGFi
bGUuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaCIKICNpbXBvcnQgIkFjY2Vz
c2liaWxpdHlUYWJsZVJvdy5oIgpAQCAtNDMsNiArNDQsNyBAQAogI2ltcG9ydCAiQ29sb3JNYWMu
aCIKICNpbXBvcnQgIkVkaXRvckNsaWVudC5oIgogI2ltcG9ydCAiRnJhbWUuaCIKKyNpbXBvcnQg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJIVE1MQW5jaG9yRWxlbWVudC5oIgogI2lt
cG9ydCAiSFRNTEFyZWFFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MRnJhbWVPd25lckVsZW1lbnQu
aCIKQEAgLTUzLDYgKzU1LDcgQEAKICNpbXBvcnQgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW1w
b3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJSZW5kZXJXaWRnZXQuaCIKKyNpbXBvcnQgIlNj
cm9sbFZpZXcuaCIKICNpbXBvcnQgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIlNp
bXBsZUZvbnREYXRhLmgiCiAjaW1wb3J0ICJUZXh0SXRlcmF0b3IuaCIKQEAgLTcwNCw2ICs3MDcs
NyBAQCAtIChOU0FycmF5KilhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMKICAgICBzdGF0aWMg
TlNBcnJheSogb3V0bGluZUF0dHJzID0gbmlsOwogICAgIHN0YXRpYyBOU0FycmF5KiBvdXRsaW5l
Um93QXR0cnMgPSBuaWw7CiAgICAgc3RhdGljIE5TQXJyYXkqIGJ1dHRvbkF0dHJzID0gbmlsOwor
ICAgIHN0YXRpYyBOU0FycmF5KiBzY3JvbGxWaWV3QXR0cnMgPSBuaWw7CiAgICAgTlNNdXRhYmxl
QXJyYXkqIHRlbXBBcnJheTsKICAgICBpZiAoYXR0cmlidXRlcyA9PSBuaWwpIHsKICAgICAgICAg
YXR0cmlidXRlcyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOiBOU0FjY2Vzc2li
aWxpdHlSb2xlQXR0cmlidXRlLApAQCAtOTQ0LDYgKzk0OCwxNCBAQCAtIChOU0FycmF5KilhY2Nl
c3NpYmlsaXR5QXR0cmlidXRlTmFtZXMKICAgICAgICAgb3V0bGluZVJvd0F0dHJzID0gW1tOU0Fy
cmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CiAgICAgICAgIFt0ZW1wQXJyYXkg
cmVsZWFzZV07CiAgICAgfQorICAgIGlmIChzY3JvbGxWaWV3QXR0cnMgPT0gbmlsKSB7CisgICAg
ICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0
cmlidXRlc107CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUNv
bnRlbnRzQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5SG9yaXpvbnRhbFNjcm9sbEJhckF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkg
YWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZlcnRpY2FsU2Nyb2xsQmFyQXR0cmlidXRlXTsKKyAg
ICAgICAgc2Nyb2xsVmlld0F0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRl
bXBBcnJheV07CisgICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07CisgICAgfQogICAgIAogICAg
IE5TQXJyYXkgKm9iamVjdEF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogICAgIApAQCAtMTAxMSw2
ICsxMDIzLDkgQEAgLSAoTlNBcnJheSopYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzCiAgICAg
ZWxzZSBpZiAobV9vYmplY3QtPmlzTWVudUl0ZW0oKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRl
cyA9IG1lbnVJdGVtQXR0cnM7CiAKKyAgICBlbHNlIGlmIChtX29iamVjdC0+aXNTY3JvbGxWaWV3
KCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBzY3JvbGxWaWV3QXR0cnM7CisgICAgCiAg
ICAgTlNBcnJheSAqYWRkaXRpb25hbEF0dHJpYnV0ZXMgPSBbc2VsZiBhZGRpdGlvbmFsQWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZU5hbWVzXTsKICAgICBpZiAoW2FkZGl0aW9uYWxBdHRyaWJ1dGVzIGNv
dW50XSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IFtvYmplY3RBdHRyaWJ1dGVzIGFycmF5
QnlBZGRpbmdPYmplY3RzRnJvbUFycmF5OmFkZGl0aW9uYWxBdHRyaWJ1dGVzXTsKQEAgLTEwMzQs
NiArMTA0OSwxNCBAQCAtIChOU0FycmF5KilyZW5kZXJXaWRnZXRDaGlsZHJlbgogICAgIHJldHVy
biBbKHdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSkgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
OiBOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV07CiB9CiAKKy0gKGlkKXJlbW90ZUFj
Y2Vzc2liaWxpdHlQYXJlbnRPYmplY3QKK3sKKyAgICBpZiAoIW1fb2JqZWN0IHx8ICFtX29iamVj
dC0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICByZXR1cm4gbV9v
YmplY3QtPmRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+YWNjZXNzaWJp
bGl0eVJlbW90ZU9iamVjdCgpOworfQorCiBzdGF0aWMgdm9pZCBjb252ZXJ0VG9WZWN0b3IoTlNB
cnJheSogYXJyYXksIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciYgdmVjdG9yKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IFthcnJheSBjb3VudF07CkBA
IC0xMDc1LDE2ICsxMDk4LDQxIEBAIC0gKFdlYkNvcmVUZXh0TWFya2VyUmFuZ2UqKXRleHRNYXJr
ZXJSYW4KIC0gKE5TVmFsdWUqKXBvc2l0aW9uCiB7CiAgICAgSW50UmVjdCByZWN0ID0gbV9vYmpl
Y3QtPmVsZW1lbnRSZWN0KCk7CisgICAgTlNQb2ludCBwb2ludDsKICAgICAKLSAgICAvLyBUaGUg
Q29jb2EgYWNjZXNzaWJpbGl0eSBBUEkgd2FudHMgdGhlIGxvd2VyLWxlZnQgY29ybmVyLgotICAg
IE5TUG9pbnQgcG9pbnQgPSBOU01ha2VQb2ludChyZWN0LngoKSwgcmVjdC5ib3R0b20oKSk7CiAg
ICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX29iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsK
LSAgICBpZiAoZnJhbWVWaWV3KSB7Ci0gICAgICAgIE5TVmlldyogdmlldyA9IGZyYW1lVmlldy0+
ZG9jdW1lbnRWaWV3KCk7Ci0gICAgICAgIHBvaW50ID0gW1t2aWV3IHdpbmRvd10gY29udmVydEJh
c2VUb1NjcmVlbjogW3ZpZXcgY29udmVydFBvaW50OiBwb2ludCB0b1ZpZXc6bmlsXV07CisgICAg
aWQgcmVtb3RlUGFyZW50ID0gW3NlbGYgcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdF07
CisgICAgaWYgKHJlbW90ZVBhcmVudCkgeworICAgICAgICBwb2ludCA9IE5TTWFrZVBvaW50KHJl
Y3QueCgpLCByZWN0LnkoKSk7CisgICAgICAgIAorICAgICAgICBOU1BvaW50IHJlbW90ZVBvc2l0
aW9uID0gW1tyZW1vdGVQYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNz
aWJpbGl0eVBvc2l0aW9uQXR0cmlidXRlXSBwb2ludFZhbHVlXTsKKyAgICAgICAgTlNTaXplIHJl
bW90ZVNpemUgPSBbW3JlbW90ZVBhcmVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNB
Y2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZV0gc2l6ZVZhbHVlXTsKKworICAgICAgICAvLyBHZXQg
dGhlIHkgcG9zaXRpb24gb2YgdGhlIFdLVmlldyAod2UgaGF2ZSB0byBzY3JlZW4tZmxpcCBhbmQg
Z28gZnJvbSBib3R0b20gbGVmdCB0byB0b3AgbGVmdCkuCisgICAgICAgIENHRmxvYXQgc2NyZWVu
SGVpZ2h0ID0gW1tbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRleDowXSBmcmFtZV0uc2l6
ZS5oZWlnaHQ7CisgICAgICAgIHJlbW90ZVBvc2l0aW9uLnkgPSAoc2NyZWVuSGVpZ2h0IC0gcmVt
b3RlUG9zaXRpb24ueSkgLSByZW1vdGVTaXplLmhlaWdodDsKKyAgICAgICAgCisgICAgICAgIE5T
UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBOU01ha2VQb2ludCgwLCAwKTsKKyAgICAgICAgaWYgKGZy
YW1lVmlldyAmJiAhbV9vYmplY3QtPmlzU2Nyb2xsYmFyKCkgJiYgIW1fb2JqZWN0LT5pc1Njcm9s
bFZpZXcoKSkgeworICAgICAgICAgICAgSW50UG9pbnQgZnJhbWVTY3JvbGxQb3MgPSBmcmFtZVZp
ZXctPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IE5TTWFr
ZVBvaW50KGZyYW1lU2Nyb2xsUG9zLngoKSwgZnJhbWVTY3JvbGxQb3MueSgpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcG9pbnQueCArPSByZW1vdGVQb3NpdGlvbi54IC0gc2Nyb2xs
UG9zaXRpb24ueDsKKyAgICAgICAgLy8gU2V0IHRoZSBuZXcgcG9zaXRpb24sIHdoaWNoIG1lYW5z
IGdldHRpbmcgYm90dG9tIHksIGFuZCB0aGVuIGZsaXBwaW5nIHRvIHNjcmVlbiBjb29yZGluYXRl
cy4KKyAgICAgICAgcG9pbnQueSA9IHNjcmVlbkhlaWdodCAtIChwb2ludC55ICsgcmVtb3RlUG9z
aXRpb24ueSArIHJlY3QuaGVpZ2h0KCkgLSBzY3JvbGxQb3NpdGlvbi55KTsKKyAgICB9CisgICAg
ZWxzZSB7CisgICAgICAgIC8vIFRoZSBDb2NvYSBhY2Nlc3NpYmlsaXR5IEFQSSB3YW50cyB0aGUg
bG93ZXItbGVmdCBjb3JuZXIuCisgICAgICAgIHBvaW50ID0gTlNNYWtlUG9pbnQocmVjdC54KCks
IHJlY3QuYm90dG9tKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGZyYW1lVmlldykgeworICAg
ICAgICAgICAgTlNWaWV3KiB2aWV3ID0gZnJhbWVWaWV3LT5kb2N1bWVudFZpZXcoKTsKKyAgICAg
ICAgICAgIHBvaW50ID0gW1t2aWV3IHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjogW3ZpZXcg
Y29udmVydFBvaW50OiBwb2ludCB0b1ZpZXc6bmlsXV07CisgICAgICAgIH0KICAgICB9CiAKLSAg
ICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6IHBvaW50XTsKKyAgICByZXR1cm4gW05T
VmFsdWUgdmFsdWVXaXRoUG9pbnQ6cG9pbnRdOwogfQogCiB0eXBlZGVmIEhhc2hNYXA8aW50LCBO
U1N0cmluZyo+IEFjY2Vzc2liaWxpdHlSb2xlTWFwOwpAQCAtMTM5MCw2ICsxNDM4LDI3IEBAIC0g
KE5TU3RyaW5nKilyb2xlRGVzY3JpcHRpb24KICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5Um9s
ZURlc2NyaXB0aW9uKE5TQWNjZXNzaWJpbGl0eVVua25vd25Sb2xlLCBuaWwpOwogfQogCistIChp
ZClzY3JvbGxWaWV3UGFyZW50Cit7CisgICAgaWYgKCFtX29iamVjdCB8fCAhbV9vYmplY3QtPmlz
QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAg
ICAvLyBJZiB0aGlzIHNjcm9sbCB2aWV3IHByb3ZpZGVzIGl0J3MgcGFyZW50IG9iamVjdCAoYmVj
YXVzZSBpdCdzIGEgc3ViLWZyYW1lKSwgdGhlbgorICAgIC8vIHdlIHNob3VsZCBub3QgZmluZCB0
aGUgcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudC4KKyAgICBpZiAobV9vYmplY3QtPnBhcmVudE9i
amVjdCgpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIEFjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3KiBzY3JvbGxWaWV3ID0gdG9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhtX29iamVjdCk7
CisgICAgU2Nyb2xsVmlldyogc2Nyb2xsID0gc2Nyb2xsVmlldy0+c2Nyb2xsVmlldygpOworICAg
IGlmICghc2Nyb2xsKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIGlmIChzY3JvbGwt
PnBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHJldHVybiBzY3JvbGwtPnBsYXRmb3JtV2lkZ2V0
KCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gW3NlbGYgcmVtb3RlQWNjZXNzaWJpbGl0eVBh
cmVudE9iamVjdF07Cit9CisKIC8vIEZJWE1FOiBzcGxpdCB1cCB0aGlzIGZ1bmN0aW9uIGluIGEg
YmV0dGVyIHdheS4gIAogLy8gc3VnZ2VzdGlvbnM6IFVzZSBhIGhhc2ggdGFibGUgdGhhdCBtYXBz
IGF0dHJpYnV0ZSBuYW1lcyB0byBmdW5jdGlvbiBjYWxscywKIC8vIG9yIG1heWJlIHBvaW50ZXJz
IHRvIG1lbWJlciBmdW5jdGlvbnMKQEAgLTE0MDgsMTEgKzE0NzcsMTEgQEAgLSAoaWQpYWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgICAgICByZXR1cm4gW3NlbGYgcm9sZURl
c2NyaXB0aW9uXTsKIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5T
QWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5p
c0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgewotICAgICAgICAgICAgRnJhbWVWaWV3KiBm
diA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqPihtX29iamVjdCktPmZy
YW1lVmlld0lmUmVuZGVyVmlldygpOwotICAgICAgICAgICAgaWYgKGZ2KQotICAgICAgICAgICAg
ICAgIHJldHVybiBmdi0+cGxhdGZvcm1XaWRnZXQoKTsKLSAgICAgICAgfQorCisgICAgICAgIC8v
IFRoaXMgd2lsbCByZXR1cm4gdGhlIHBhcmVudCBvZiB0aGUgQVhXZWJBcmVhLCBpZiB0aGlzIGlz
IGEgd2ViIGFyZWEuCisgICAgICAgIGlkIHNjcm9sbFZpZXdQYXJlbnQgPSBbc2VsZiBzY3JvbGxW
aWV3UGFyZW50XTsKKyAgICAgICAgaWYgKHNjcm9sbFZpZXdQYXJlbnQpCisgICAgICAgICAgICBy
ZXR1cm4gc2Nyb2xsVmlld1BhcmVudDsKICAgICAgICAgCiAgICAgICAgIC8vIFRyZWUgaXRlbSAo
Y2hhbmdlZCB0byBBWFJvd3MpIGNhbiBvbmx5IHJlcG9ydCB0aGUgdHJlZSAoQVhPdXRsaW5lKSBh
cyBpdHMgcGFyZW50LgogICAgICAgICBpZiAobV9vYmplY3QtPmlzVHJlZUl0ZW0oKSkgewpAQCAt
MTQyNCw3ICsxNDkzLDEwIEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNT
dHIKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1f
b2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKS0+d3JhcHBlcigpOworICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVk
KCk7CisgICAgICAgIGlmIChwYXJlbnQpCisgICAgICAgICAgICByZXR1cm4gcGFyZW50LT53cmFw
cGVyKCk7CisgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdKSB7
CkBAIC0xNjEzLDYgKzE2ODUsMTEgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
OihOU1N0cgogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nl
c3NpYmlsaXR5V2luZG93QXR0cmlidXRlXSB8fAogICAgICAgICBbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVRvcExldmVsVUlFbGVtZW50QXR0cmlidXRlXSkg
eworICAgICAgICAKKyAgICAgICAgaWQgcmVtb3RlUGFyZW50ID0gW3NlbGYgcmVtb3RlQWNjZXNz
aWJpbGl0eVBhcmVudE9iamVjdF07CisgICAgICAgIGlmIChyZW1vdGVQYXJlbnQpCisgICAgICAg
ICAgICByZXR1cm4gW3JlbW90ZVBhcmVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6YXR0
cmlidXRlTmFtZV07CisgICAgICAgIAogICAgICAgICBGcmFtZVZpZXcqIGZ2ID0gbV9vYmplY3Qt
PmRvY3VtZW50RnJhbWVWaWV3KCk7CiAgICAgICAgIGlmIChmdikKICAgICAgICAgICAgIHJldHVy
biBbZnYtPnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93XTsKQEAgLTE2NDksNiArMTcyNiwxOCBAQCAt
IChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShjb250ZW50cyk7CiAgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzU2Nyb2xsVmlldygpKSB7CisgICAgICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRy
ZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
QSBzY3JvbGxWaWV3J3MgY29udGVudHMgYXJlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBzY3JvbGwg
YmFycy4KKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciBjb250ZW50czsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoaWxkcmVuU2l6ZSA9
IGNoaWxkcmVuLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBj
aGlsZHJlblNpemU7ICsraykgeworICAgICAgICAgICAgICAgIGlmICghY2hpbGRyZW5ba10tPmlz
U2Nyb2xsYmFyKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzLmFwcGVuZChjaGlsZHJl
bltrXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJh
eShjb250ZW50cyk7ICAgICAgICAgICAgCisgICAgICAgIH0KICAgICB9ICAgIAogICAgIAogICAg
IGlmIChtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSkgewpAQCAtMTg3NCw2ICsxOTYz
LDE5IEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICB9CiAgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlIb3Jpem9udGFsU2Nyb2xsQmFyQXR0cmlidXRlXSkgewor
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzY3JvbGxCYXIgPSBtX29iamVjdC0+c2Nyb2xs
QmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkhvcml6b250YWwpOworICAgICAgICBpZiAoc2Ny
b2xsQmFyKQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbEJhci0+d3JhcHBlcigpOworICAgICAg
ICByZXR1cm4gbmlsOworICAgIH0KKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eVZlcnRpY2FsU2Nyb2xsQmFyQXR0cmlidXRlXSkgeworICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzY3JvbGxCYXIgPSBtX29iamVjdC0+c2Nyb2xsQmFyKEFj
Y2Vzc2liaWxpdHlPcmllbnRhdGlvblZlcnRpY2FsKTsKKyAgICAgICAgaWYgKHNjcm9sbEJhcikK
KyAgICAgICAgICAgIHJldHVybiBzY3JvbGxCYXItPndyYXBwZXIoKTsKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICB9CisgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlMYW5ndWFnZUF0dHJpYnV0ZV0pIAogICAgICAgICByZXR1cm4gbV9v
YmplY3QtPmxhbmd1YWdlKCk7CiAgICAgCkBAIC0xOTY3LDYgKzIwNjksNyBAQCAtIChpZClhY2Nl
c3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2luCiAgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmpl
Y3RCYWNraW5nU3RvcmVdKQogICAgICAgICByZXR1cm4gbmlsOwogCisgICAgbV9vYmplY3QtPnVw
ZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVj
dD4gYXhPYmplY3QgPSBtX29iamVjdC0+YWNjZXNzaWJpbGl0eUhpdFRlc3QoSW50UG9pbnQocG9p
bnQpKTsKICAgICBpZiAoYXhPYmplY3QpCiAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlV
bmlnbm9yZWRBbmNlc3RvcihheE9iamVjdC0+d3JhcHBlcigpKTsKQEAgLTIyMzksOSArMjM0Miwx
MCBAQCAtICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFsdWUgCiAgICAgICAgIEFT
U0VSVChudW1iZXIpOwogICAgICAgICBtX29iamVjdC0+c2V0Rm9jdXNlZChbbnVtYmVyIGludFZh
bHVlXSAhPSAwKTsKICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzogTlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmICghc3RyaW5n
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX29iamVjdC0+c2V0VmFsdWUoc3RyaW5n
KTsKKyAgICAgICAgaWYgKG51bWJlciAmJiBtX29iamVjdC0+Y2FuU2V0TnVtZXJpY1ZhbHVlKCkp
CisgICAgICAgICAgICBtX29iamVjdC0+c2V0VmFsdWUoW251bWJlciBmbG9hdFZhbHVlXSk7Cisg
ICAgICAgIGVsc2UgaWYgKHN0cmluZykKKyAgICAgICAgICAgIG1fb2JqZWN0LT5zZXRWYWx1ZShz
dHJpbmcpOwogICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBO
U0FjY2Vzc2liaWxpdHlTZWxlY3RlZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgaWYgKCFudW1iZXIp
CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA3NDk3MykKKysr
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxNSw3ICsxOTE1
LDcgQEAgQVhPYmplY3RDYWNoZSogRG9jdW1lbnQ6OmF4T2JqZWN0Q2FjaGUoKQogICAgICAgICBy
ZXR1cm4gZG9jLT5heE9iamVjdENhY2hlKCk7CiAgICAgCiAgICAgLy8gdGhpcyBpcyB0aGUgdG9w
LWxldmVsIGRvY3VtZW50LCBzbyBpbnN0YWxsIGEgbmV3IGNhY2hlCi0gICAgbV9heE9iamVjdENh
Y2hlID0gbmV3IEFYT2JqZWN0Q2FjaGU7CisgICAgbV9heE9iamVjdENhY2hlID0gbmV3IEFYT2Jq
ZWN0Q2FjaGUodGhpcyk7CiAgICAgcmV0dXJuIG1fYXhPYmplY3RDYWNoZTsKIH0KIApJbmRleDog
V2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9sb2FkZXIvRW1w
dHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3Nyw2ICszNzcsNyBAQCBwdWJsaWM6CiAj
ZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIFJlbW90ZUFYT2JqZWN0UmVm
IGFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBO
U0NhY2hlZFVSTFJlc3BvbnNlKiB3aWxsQ2FjaGVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVu
c2lnbmVkIGxvbmcsIE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHJlc3BvbnNlKSBjb25zdCB7IHJldHVy
biByZXNwb25zZTsgfQogI2VuZGlmCiAjaWYgVVNFKENGTkVUV09SSykKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxNSBAQAogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCisjaWYgUExB
VEZPUk0oTUFDKQorI2lmZGVmIF9fT0JKQ19fIAorI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+Cit0eXBlZGVmIGlkIFJlbW90ZUFYT2JqZWN0UmVmOworI2Vsc2UKK3R5cGVkZWYgdm9p
ZCogUmVtb3RlQVhPYmplY3RSZWY7CisjZW5kaWYKKyNlbmRpZgorCiB0eXBlZGVmIGNsYXNzIF9q
b2JqZWN0KiBqb2JqZWN0OwogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChfX09CSkNf
XykKQEAgLTI2NSw2ICsyNzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCByZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCBsaXN0ZW4gPSB0cnVlKSA9
IDA7CiAgICAgICAgIAogI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgLy8gQWxsb3cgYW4gYWNj
ZXNzaWJpbGl0eSBvYmplY3QgdG8gcmV0cmlldmUgYSBGcmFtZSBwYXJlbnQgaWYgdGhlcmUncyBu
byBQbGF0Zm9ybVdpZGdldC4KKyAgICAgICAgdmlydHVhbCBSZW1vdGVBWE9iamVjdFJlZiBhY2Nl
c3NpYmlsaXR5UmVtb3RlT2JqZWN0KCkgPSAwOwogI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKICAg
ICAgICAgdmlydHVhbCBqb2JqZWN0IGphdmFBcHBsZXQoTlNWaWV3KikgeyByZXR1cm4gMDsgfQog
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSwxMCBAQCBGcmFt
ZVZpZXc6On5GcmFtZVZpZXcoKQogICAgICAgICBtX3NjaGVkdWxlZEV2ZW50cy5jbGVhcigpOwog
ICAgICAgICBtX2VucXVldWVFdmVudHMgPSAwOwogICAgIH0KLQorICAgIAorICAgIGlmIChBWE9i
amVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIGF4T2JqZWN0Q2FjaGUoKSkKKyAg
ICAgICAgYXhPYmplY3RDYWNoZSgpLT5yZW1vdmUodGhpcyk7CisgICAgCiAgICAgcmVzZXRTY3Jv
bGxiYXJzKCk7CiAKICAgICAvLyBDdXN0b20gc2Nyb2xsYmFycyBzaG91bGQgYWxyZWFkeSBiZSBk
ZXN0cm95ZWQgYXQgdGhpcyBwb2ludApAQCAtMjQ4Miw0ICsyNDg1LDkgQEAgdm9pZCBGcmFtZVZp
ZXc6Om5vdGlmeVdpZGdldHNJbkFsbEZyYW1lcwogICAgIH0KIH0KICAgICAKK0FYT2JqZWN0Q2Fj
aGUqIEZyYW1lVmlldzo6YXhPYmplY3RDYWNoZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYW1l
KCktPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGVFeGlzdHMoKSA/IGZyYW1lKCktPmRvY3VtZW50
KCktPmF4T2JqZWN0Q2FjaGUoKSA6IDA7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw3IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVNjcm9sbENvcm5lcigpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludFNj
cm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KTsK
IAorICAgIHZpcnR1YWwgQVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSgpIGNvbnN0OwogICAg
IHZvaWQgbm90aWZ5V2lkZ2V0c0luQWxsRnJhbWVzKFdpZGdldE5vdGlmaWNhdGlvbik7CiAgICAg
CiAgICAgc3RhdGljIGRvdWJsZSBzQ3VycmVudFBhaW50VGltZVN0YW1wOyAvLyB1c2VkIGZvciBk
ZXRlY3RpbmcgZGVjb2RlZCByZXNvdXJjZSB0aHJhc2ggaW4gdGhlIGNhY2hlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKIAorI2luY2x1ZGUgIkFYT2JqZWN0
Q2FjaGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIb3N0V2lu
ZG93LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCkBAIC05Niw2ICs5Nyw5IEBA
IHZvaWQgU2Nyb2xsVmlldzo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGIKICAgICAgICAgcmVtb3Zl
Q2hpbGQobV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpKTsKICAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyID0gMDsKICAgICB9CisgICAgCisgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vz
c2liaWxpdHlFbmFibGVkKCkgJiYgYXhPYmplY3RDYWNoZSgpKQorICAgICAgICBheE9iamVjdENh
Y2hlKCktPmhhbmRsZVNjcm9sbGJhclVwZGF0ZSh0aGlzKTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3
OjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc0JhcikKQEAgLTExMSw2ICsxMTUsOSBA
QCB2b2lkIFNjcm9sbFZpZXc6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyCiAgICAgICAgIHJlbW92
ZUNoaWxkKG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCkpOwogICAgICAgICBtX3ZlcnRpY2FsU2Ny
b2xsYmFyID0gMDsKICAgICB9CisgICAgCisgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2li
aWxpdHlFbmFibGVkKCkgJiYgYXhPYmplY3RDYWNoZSgpKQorICAgICAgICBheE9iamVjdENhY2hl
KCktPmhhbmRsZVNjcm9sbGJhclVwZGF0ZSh0aGlzKTsKIH0KIAogI2lmICFQTEFURk9STShHVEsp
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsOSBAQCBT
Y3JvbGxiYXI6OlNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsCiAKIFNjcm9sbGJhcjo6flNj
cm9sbGJhcigpCiB7CisgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVk
KCkgJiYgYXhPYmplY3RDYWNoZSgpKQorICAgICAgICBheE9iamVjdENhY2hlKCktPnJlbW92ZSh0
aGlzKTsKKyAgICAKICAgICBzdG9wVGltZXJJZk5lZWRlZCgpOwogICAgIAogICAgIG1fdGhlbWUt
PnVucmVnaXN0ZXJTY3JvbGxiYXIodGhpcyk7CkBAIC0xMzEsMTUgKzEzNCw4IEBAIHZvaWQgU2Ny
b2xsYmFyOjpzZXRTdGVwcyhpbnQgbGluZVN0ZXAsIGkKIGJvb2wgU2Nyb2xsYmFyOjpzY3JvbGwo
U2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IGZsb2F0IG11bHRpcGxpZXIpCiB7CiAjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQotICAgIGlmIChB
WE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChwYXJl
bnQoKSAmJiBwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSkgewotICAgICAgICAgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5mcmFtZSgpLT5k
b2N1bWVudCgpOwotICAgICAgICAgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1bWVudC0+
YXhPYmplY3RDYWNoZSgpOwotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVNjcm9sbGJhciogYXhP
YmplY3QgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKj4oY2FjaGUtPmdldE9y
Q3JlYXRlKFNjcm9sbEJhclJvbGUpKTsKLSAgICAgICAgICAgIGF4T2JqZWN0LT5zZXRTY3JvbGxi
YXIodGhpcyk7Ci0gICAgICAgICAgICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlvbihheE9iamVjdCwg
ZG9jdW1lbnQsIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKLSAgICAgICAg
fQotICAgIH0KKyAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSAm
JiBheE9iamVjdENhY2hlKCkpCisgICAgICAgIGF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNh
dGlvbihheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHRoaXMpLCAwLCBBWE9iamVjdENhY2hl
OjpBWFZhbHVlQ2hhbmdlZCwgdHJ1ZSk7CiAjZW5kaWYKIAogICAgIC8vIElnbm9yZSBwZXJwZW5k
aWN1bGFyIHNjcm9sbHMuCkBAIC00NzUsNyArNDcxLDE2IEBAIGJvb2wgU2Nyb2xsYmFyOjppc1dp
bmRvd0FjdGl2ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY2xpZW50ICYmIG1fY2xpZW50LT5p
c0FjdGl2ZSgpOwogfQotIAorICAgIAorQVhPYmplY3RDYWNoZSogU2Nyb2xsYmFyOjpheE9iamVj
dENhY2hlKCkgY29uc3QKK3sKKyAgICBpZiAoIXBhcmVudCgpIHx8ICFwYXJlbnQoKS0+aXNGcmFt
ZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5mcmFtZSgpLT5kb2N1bWVudCgp
OworICAgIHJldHVybiBkb2N1bWVudC0+YXhPYmplY3RDYWNoZSgpOworfQorCiB2b2lkIFNjcm9s
bGJhcjo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAoc3Vw
cHJlc3NJbnZhbGlkYXRpb24oKSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkocmV2aXNpb24gNzQ5
NzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzEsNiArMTcxLDcgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBp
c1Njcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIEFYT2JqZWN0
Q2FjaGUqIGF4T2JqZWN0Q2FjaGUoKSBjb25zdDsKIAogICAgIGJvb2wgc2V0Q3VycmVudFBvcyhm
bG9hdCBwb3MsIFNjcm9sbFNvdXJjZSBzb3VyY2UpOwogfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vV2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAkocmV2
aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDMsNiArMTAzLDcgQEAgdHlwZWRlZiBQbGF0Zm9ybVdpZGdldCBQbGF0Zm9ybVBhZ2VD
bGllbgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFYT2JqZWN0Q2FjaGU7CiBjbGFz
cyBDdXJzb3I7CiBjbGFzcyBFdmVudDsKIGNsYXNzIEZvbnQ7CkBAIC0yNDYsNiArMjQ3LDkgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29u
c3QgSW50UG9pbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKIAorICAgIC8vIEEgbWVhbnMgdG8g
YWNjZXNzIHRoZSBBWCBjYWNoZSB3aGVuIHRoaXMgb2JqZWN0IGNhbiBnZXQgYSBwb2ludGVyIHRv
IGl0LgorICAgIHZpcnR1YWwgQVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKyAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0KFBsYXRmb3JtV2lkZ2V0
KTsgLy8gTXVzdCBiZSBjYWxsZWQgYnkgYWxsIFdpZGdldCBjb25zdHJ1Y3RvcnMgdG8gaW5pdGlh
bGl6ZSBjcm9zcy1wbGF0Zm9ybSBkYXRhLgogCkluZGV4OiBXZWJLaXQyL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQy
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDExLTAxLTA0ICBD
aHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0syOiBTdXBwb3J0IEFjY2Vzc2liaWxpdHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxODU5CisK
KyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAg
ICAgICogU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6YWNjZXNzaWJpbGl0eUNoaWxkVG9rZW5SZWNlaXZlZCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9tYWMvV0tWaWV3Lm1tOgorICAgICAgICAoLVtXS1ZpZXcgaW5pdFdpdGhGcmFtZTpjb250
ZXh0UmVmOnBhZ2VHcm91cFJlZjpdKToKKyAgICAgICAgKC1bV0tWaWV3IF91cGRhdGVXaW5kb3dB
bmRWaWV3RnJhbWVzXSk6CisgICAgICAgICgtW1dLVmlldyBfc2V0QWNjZXNzaWJpbGl0eUNoaWxk
VG9rZW46XSk6CisgICAgICAgICgtW1dLVmlldyBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkXSk6Cisg
ICAgICAgICgtW1dLVmlldyBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpdKToKKyAgICAgICAgKC1bV0tW
aWV3IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb250ZXh0OjplbnN1cmVXZWJQcm9jZXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp3aW5kb3dBbmRW
aWV3RnJhbWVzQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVj
ZWl2ZUFjY2Vzc2liaWxpdHlQYWdlVG9rZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnNlbmRBY2Nlc3NpYmlsaXR5UHJlc2VudGVyVG9rZW4pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmFjY2Vzc2liaWxpdHlS
ZW1vdGVPYmplY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2Vk
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjphY2Nlc3NpYmlsaXR5UG9zaXRpb24pOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZv
cm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2VuZEFjY2Vzc2liaWxp
dHlQcmVzZW50ZXJUb2tlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmFjY2Vzc2liaWxp
dHlSZW1vdGVPYmplY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
czo6cHJlc2VudGVyQXBwbGljYXRpb25QaWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvbWFjL1dl
YlByb2Nlc3NNYWluTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpbik6CisK
IDIwMTEtMDEtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvV2Vi
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0
Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDYgKzU1LDcgQEAgdm9pZCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNv
ZAogICAgIGVuY29kZXItPmVuY29kZShzaG91bGRBbHdheXNVc2VDb21wbGV4VGV4dENvZGVQYXRo
KTsKICAgICBlbmNvZGVyLT5lbmNvZGUobGFuZ3VhZ2VDb2RlKTsKICNpZiBQTEFURk9STShNQUMp
CisgICAgZW5jb2Rlci0+ZW5jb2RlKHByZXNlbnRlckFwcGxpY2F0aW9uUGlkKTsKICAgICBlbmNv
ZGVyLT5lbmNvZGUobnNVUkxDYWNoZVBhdGgpOwogICAgIGVuY29kZXItPmVuY29kZShuc1VSTENh
Y2hlTWVtb3J5Q2FwYWNpdHkpOwogICAgIGVuY29kZXItPmVuY29kZShuc1VSTENhY2hlRGlza0Nh
cGFjaXR5KTsKQEAgLTg5LDYgKzkwLDggQEAgYm9vbCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZAogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMubGFuZ3VhZ2VD
b2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAo
IWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJzLnByZXNlbnRlckFwcGxpY2F0aW9uUGlkKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMu
bnNVUkxDYWNoZVBhdGgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUocGFyYW1ldGVycy5uc1VSTENhY2hlTWVtb3J5Q2FwYWNpdHkpKQpJbmRleDogV2Vi
S2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAkocmV2aXNpb24g
NzQ5NzMpCisrKyBXZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDcgQEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMgewogICAgIFN0cmluZyBsYW5ndWFnZUNvZGU7CiAKICNpZiBQTEFURk9STShN
QUMpCisgICAgcGlkX3QgcHJlc2VudGVyQXBwbGljYXRpb25QaWQ7CiAgICAgU3RyaW5nIG5zVVJM
Q2FjaGVQYXRoOwogICAgIHVpbnQ2NF90IG5zVVJMQ2FjaGVNZW1vcnlDYXBhY2l0eTsKICAgICB1
aW50NjRfdCBuc1VSTENhY2hlRGlza0NhcGFjaXR5OwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3Mv
UGFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQu
aAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBj
bGVhckFsbEVkaXRDb21tYW5kcygpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdENvbW1h
bmRTdGF0ZShjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50IHN0
YXRlKSA9IDA7CiAjaWYgUExBVEZPUk0oTUFDKQorICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NpYmls
aXR5Q2hpbGRUb2tlblJlY2VpdmVkKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGludGVyY2VwdEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJv
YXJkRXZlbnQmLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYsIHVpbnQzMl90LCB1
aW50MzJfdCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiYpID0gMDsKICNl
bmRpZgogI2lmIFBMQVRGT1JNKFdJTikKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCShy
ZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjIsNiArMTYyLDcgQEAgdm9pZCBXZWJDb250ZXh0OjplbnN1cmVXZWJQ
cm9jZXNzKCkKICAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBtX2NhY2hlTW9kZWw7CiAgICAg
cGFyYW1ldGVycy5sYW5ndWFnZUNvZGUgPSBkZWZhdWx0TGFuZ3VhZ2UoKTsKICAgICBwYXJhbWV0
ZXJzLmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkgPSBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5
KCk7CisgICAgcGFyYW1ldGVycy5wcmVzZW50ZXJBcHBsaWNhdGlvblBpZCA9IGdldHBpZCgpOwog
ICAgIHBhcmFtZXRlcnMuY2xlYXJSZXNvdXJjZUNhY2hlcyA9IG1fY2xlYXJSZXNvdXJjZUNhY2hl
c0Zvck5ld1dlYlByb2Nlc3M7CiAgICAgcGFyYW1ldGVycy5jbGVhckFwcGxpY2F0aW9uQ2FjaGUg
PSBtX2NsZWFyQXBwbGljYXRpb25DYWNoZUZvck5ld1dlYlByb2Nlc3M7CiAgICAgCkluZGV4OiBX
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk0LDEyICs0OTQs
MTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZVdpbmRvd0lzVmlzaWJsZQogICAgIHByb2Nl
c3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0V2luZG93SXNWaXNpYmxlKHdpbmRvd0lz
VmlzaWJsZSksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OndpbmRvd0FuZFZp
ZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IEludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGlu
YXRlcywgY29uc3QgSW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykKK3ZvaWQg
V2ViUGFnZVByb3h5Ojp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBJbnRSZWN0JiB3
aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IEludFJlY3QmIHZpZXdGcmFtZUlu
V2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IEludFBvaW50JiBhY2Nlc3NpYmlsaXR5Vmlld0Nvb3Jk
aW5hdGVzKQogewogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBw
cm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OldpbmRvd0FuZFZpZXdGcmFtZXNDaGFu
Z2VkKHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgdmlld0ZyYW1lSW5XaW5kb3dDb29y
ZGluYXRlcyksIG1fcGFnZUlEKTsKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OldpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGlu
YXRlcywgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcywgYWNjZXNzaWJpbGl0eVZpZXdDb29y
ZGluYXRlcyksIG1fcGFnZUlEKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmdldE1hcmtlZFJh
bmdlKHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCkKQEAgLTExOTcsNiArMTE5
NywxMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUnVuSW5zZWN1cmVDb250ZW50CiAgICAgbV9s
b2FkZXJDbGllbnQuZGlkUnVuSW5zZWN1cmVDb250ZW50Rm9yRnJhbWUodGhpcywgZnJhbWUsIHVz
ZXJEYXRhLmdldCgpKTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVBY2Nlc3Np
YmlsaXR5UGFnZVRva2VuKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEpCit7Cisg
ICAgbV9wYWdlQ2xpZW50LT5hY2Nlc3NpYmlsaXR5Q2hpbGRUb2tlblJlY2VpdmVkKGRhdGEpOwor
fQorICAgIAogdm9pZCBXZWJQYWdlUHJveHk6OmZyYW1lRGlkQmVjb21lRnJhbWVTZXQodWludDY0
X3QgZnJhbWVJRCwgYm9vbCB2YWx1ZSkKIHsKICAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHBy
b2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CkBAIC0xODU0LDYgKzE4NTksMTQgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnN0cmluZ0NhbGxiYWNrKGNvbnN0IAogICAgIGNhbGxiYWNrLT5wZXJmb3Jt
Q2FsbGJhY2tXaXRoUmV0dXJuVmFsdWUocmVzdWx0U3RyaW5nLmltcGwoKSk7CiB9CiAKK3ZvaWQg
V2ViUGFnZVByb3h5OjpzZW5kQWNjZXNzaWJpbGl0eVByZXNlbnRlclRva2VuKGNvbnN0IENvcmVJ
UEM6OkRhdGFSZWZlcmVuY2UmIHRva2VuKQoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbmRB
Y2Nlc3NpYmlsaXR5UHJlc2VudGVyVG9rZW4odG9rZW4pLCBtX3BhZ2VJRCk7Cit9CisgICAgCiB2
b2lkIFdlYlBhZ2VQcm94eTo6Zm9jdXNlZEZyYW1lQ2hhbmdlZCh1aW50NjRfdCBmcmFtZUlEKQog
ewogICAgIGlmICghZnJhbWVJRCkgewpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJl
dmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShNQUMp
CiAgICAgdm9pZCB1cGRhdGVXaW5kb3dJc1Zpc2libGUoYm9vbCB3aW5kb3dJc1Zpc2libGUpOwot
ICAgIHZvaWQgd2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKTsKKyAgICB2b2lkIHdpbmRvd0FuZFZpZXdG
cmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5D
b29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29y
ZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGFjY2Vzc2liaWxpdHlWaWV3Q29vcmRp
bmF0ZXMpOwogICAgIHZvaWQgZ2V0TWFya2VkUmFuZ2UodWludDY0X3QmIGxvY2F0aW9uLCB1aW50
NjRfdCYgbGVuZ3RoKTsKICAgICB1aW50NjRfdCBjaGFyYWN0ZXJJbmRleEZvclBvaW50KGNvbnN0
IFdlYkNvcmU6OkludFBvaW50KTsKICAgICBXZWJDb3JlOjpJbnRSZWN0IGZpcnN0UmVjdEZvckNo
YXJhY3RlclJhbmdlKHVpbnQ2NF90LCB1aW50NjRfdCk7CkBAIC0yMzAsNyArMjMwLDggQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzY2FsZVdlYlZpZXcoZG91YmxlIHNjYWxlLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgb3JpZ2luKTsKICAgICBkb3VibGUgdmlld1NjYWxlRmFjdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV92aWV3U2NhbGVGYWN0b3I7IH0KLQorICAgIHZvaWQgc2VuZEFjY2Vzc2liaWxp
dHlQcmVzZW50ZXJUb2tlbihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJik7CisgICAgCiAg
ICAgLy8gRmluZC4KICAgICB2b2lkIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlv
bnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpOwogICAgIHZvaWQgaGlkZUZpbmRVSSgpOwpAQCAt
MzMzLDYgKzMzNCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRTdGFydFByb2dyZXNzKCk7CiAg
ICAgdm9pZCBkaWRDaGFuZ2VQcm9ncmVzcyhkb3VibGUpOwogICAgIHZvaWQgZGlkRmluaXNoUHJv
Z3Jlc3MoKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVBY2Nlc3NpYmlsaXR5UGFnZVRva2VuKGNvbnN0
IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKTsKICAgICAKICAgICB2b2lkIGRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24odWludDY0X3QgZnJhbWVJRCwgdWludDMyX3QgbmF2aWdhdGlvblR5
cGUsIHVpbnQzMl90IG1vZGlmaWVycywgaW50MzJfdCBtb3VzZUJ1dHRvbiwgY29uc3QgU3RyaW5n
JiB1cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQpOwogICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmV3
V2luZG93QWN0aW9uKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQzMl90IG5hdmlnYXRpb25UeXBlLCB1
aW50MzJfdCBtb2RpZmllcnMsIGludDMyX3QgbW91c2VCdXR0b24sIGNvbnN0IFN0cmluZyYgdXJs
LCB1aW50NjRfdCBsaXN0ZW5lcklEKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDgg
QEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBEYXRhQ2FsbGJhY2soQ29yZUlQQzo6
RGF0YVJlZmVyZW5jZSByZXN1bHREYXRhLCB1aW50NjRfdCBjYWxsYmFja0lEKQogICAgIFN0cmlu
Z0NhbGxiYWNrKFdURjo6U3RyaW5nIHJlc3VsdFN0cmluZywgdWludDY0X3QgY2FsbGJhY2tJRCkK
IAorICAgIERpZFJlY2VpdmVBY2Nlc3NpYmlsaXR5UGFnZVRva2VuKENvcmVJUEM6OkRhdGFSZWZl
cmVuY2UgZGF0YSkKKwogI2lmIFBMQVRGT1JNKE1BQykKICAgICAjIEtleWJvYXJkIHN1cHBvcnQg
bWVzc2FnZXMuCiAgICAgSW50ZXJwcmV0S2V5RXZlbnQodWludDMyX3QgdHlwZSkgLT4gKFZlY3Rv
cjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+IGNvbW1hbmROYW1lLCB1aW50MzJfdCBzZWxlY3Rp
b25TdGFydCwgdWludDMyX3Qgc2VsZWN0aW9uRW5kLCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRp
b25VbmRlcmxpbmU+IHVuZGVybGluZXMpCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1BhZ2VDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsNyBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkTGVhdmVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCk7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NpYmlsaXR5Q2hpbGRU
b2tlblJlY2VpdmVkKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKTsgICAgCiAgICAgdmly
dHVhbCB2b2lkIHNldENvbXBsZXhUZXh0SW5wdXRFbmFibGVkKHVpbnQ2NF90IHBsdWdpbkNvbXBs
ZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBib29sIGNvbXBsZXhUZXh0SW5wdXRFbmFibGVkKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNlQ3VzdG9t
UmVwcmVzZW50YXRpb24pOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xp
ZW50SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VD
bGllbnRJbXBsLm1tCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvUGFnZUNsaWVudEltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbXBvcnQgIlBhZ2VDbGllbnRJbXBs
LmgiCiAKKyNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKICNpbXBvcnQgIkZpbmRJbmRpY2F0b3Iu
aCIKICNpbXBvcnQgIldLQVBJQ2FzdC5oIgogI2ltcG9ydCAiV0tTdHJpbmdDRi5oIgpAQCAtMjU3
LDYgKzI1OCwxMiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRGaW5kSW5kaWNhdG9yKFBhCiAg
ICAgW21fd2tWaWV3IF9zZXRGaW5kSW5kaWNhdG9yOmZpbmRJbmRpY2F0b3IgZmFkZU91dDpmYWRl
T3V0XTsKIH0KIAordm9pZCBQYWdlQ2xpZW50SW1wbDo6YWNjZXNzaWJpbGl0eUNoaWxkVG9rZW5S
ZWNlaXZlZChjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQoreworICAgIE5TRGF0
YSogcmVtb3RlVG9rZW4gPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5kYXRhKCkgbGVuZ3Ro
OmRhdGEuc2l6ZSgpXTsKKyAgICBbbV93a1ZpZXcgX3NldEFjY2Vzc2liaWxpdHlDaGlsZFRva2Vu
OnJlbW90ZVRva2VuXTsKK30KKyAgICAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpwYWdlRGlkRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCkKIHsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCShyZXZpc2lvbiA3NDk3
MykKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjaW1wb3J0ICJXS1ZpZXcuaCIKIAogI2ltcG9ydCAiQ2h1bmtl
ZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuaCIKKyNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKICNp
bXBvcnQgIkZpbmRJbmRpY2F0b3IuaCIKICNpbXBvcnQgIkZpbmRJbmRpY2F0b3JXaW5kb3cuaCIK
ICNpbXBvcnQgIkxheWVyQmFja2VkRHJhd2luZ0FyZWFQcm94eS5oIgpAQCAtNTEsNiArNTIsNyBA
QAogI2ltcG9ydCA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0tleWJvYXJk
RXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KKyNpbXBvcnQgPFdl
YktpdFN5c3RlbUludGVyZmFjZS5oPgogI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgogCkBAIC05NCw2ICs5Niw4IEBAIEBpbnRlcmZhY2UgV0tWaWV3RGF0
YSA6IE5TT2JqZWN0IHsKICAgICBOU1ZpZXcgKl9sYXllckhvc3RpbmdWaWV3OwogI2VuZGlmCiAK
KyAgICBSZXRhaW5QdHI8aWQ+IF9yZW1vdGVBY2Nlc3NpYmlsaXR5Q2hpbGQ7CisgICAgCiAgICAg
Ly8gRm9yIGFzeW5jaHJvbm91cyB2YWxpZGF0aW9uLgogICAgIFZhbGlkYXRpb25NYXAgX3ZhbGlk
YXRpb25NYXA7CiAKQEAgLTE2Miw2ICsxNjYsMTIgQEAgLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNS
ZWN0KWZyYW1lIGNvbnRleAogCiAgICAgV2ViQ29udGV4dDo6c3RhdGlzdGljcygpLndrVmlld0Nv
dW50Kys7CiAKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgTlNE
YXRhICpyZW1vdGVUb2tlbiA9IChOU0RhdGEgKilXS0FYUmVtb3RlVG9rZW5Gb3JFbGVtZW50KHNl
bGYpOworICAgIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVRva2VuID0gQ29yZUlQQzo6RGF0
YVJlZmVyZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihbcmVtb3RlVG9rZW4g
Ynl0ZXNdKSwgW3JlbW90ZVRva2VuIGxlbmd0aF0pOworICAgIF9kYXRhLT5fcGFnZS0+c2VuZEFj
Y2Vzc2liaWxpdHlQcmVzZW50ZXJUb2tlbihkYXRhVG9rZW4pOworI2VuZGlmCisgICAgCiAgICAg
cmV0dXJuIHNlbGY7CiB9CiAKQEAgLTI0Myw4ICsyNTMsOSBAQCAtICh2b2lkKV91cGRhdGVXaW5k
b3dBbmRWaWV3RnJhbWVzCiAgICAgCiAgICAgTlNSZWN0IHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29y
ZGluYXRlcyA9IFt3aW5kb3cgZnJhbWVdOwogICAgIE5TUmVjdCB2aWV3RnJhbWVJbldpbmRvd0Nv
b3JkaW5hdGVzID0gW3NlbGYgY29udmVydFJlY3Q6W3NlbGYgZnJhbWVdIHRvVmlldzpuaWxdOwor
ICAgIE5TUG9pbnQgYWNjZXNzaWJpbGl0eVBvc2l0aW9uID0gW1tzZWxmIGFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlQb3NpdGlvbkF0dHJpYnV0ZV0gcG9pbnRWYWx1
ZV07CiAgICAgCi0gICAgX2RhdGEtPl9wYWdlLT53aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChl
bmNsb3NpbmdJbnRSZWN0KHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcyksIGVuY2xvc2lu
Z0ludFJlY3Qodmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykpOworICAgIF9kYXRhLT5fcGFn
ZS0+d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoZW5jbG9zaW5nSW50UmVjdCh3aW5kb3dGcmFt
ZUluU2NyZWVuQ29vcmRpbmF0ZXMpLCBlbmNsb3NpbmdJbnRSZWN0KHZpZXdGcmFtZUluV2luZG93
Q29vcmRpbmF0ZXMpLCBJbnRQb2ludChhY2Nlc3NpYmlsaXR5UG9zaXRpb24pKTsKIH0KIAogLSAo
dm9pZClyZW5ld0dTdGF0ZQpAQCAtOTEwLDYgKzkyMSw0MyBAQCAtICh2b2lkKXZpZXdEaWRVbmhp
ZGUKICAgICBbc2VsZiBfdXBkYXRlVmlzaWJpbGl0eV07CiB9CiAKKy0gKHZvaWQpX3NldEFjY2Vz
c2liaWxpdHlDaGlsZFRva2VuOihOU0RhdGEgKilkYXRhCit7CisjaWYgIWRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKQorICAgIF9kYXRhLT5fcmVtb3RlQWNjZXNzaWJpbGl0eUNoaWxk
ID0gV0tBWFJlbW90ZUVsZW1lbnRGb3JUb2tlbigoQ0ZEYXRhUmVmKWRhdGEpOworICAgIFdLQVhJ
bml0aWFsaXplUmVtb3RlRWxlbWVudFdpdGhXaW5kb3coX2RhdGEtPl9yZW1vdGVBY2Nlc3NpYmls
aXR5Q2hpbGQuZ2V0KCksIFtzZWxmIHdpbmRvd10pOworI2VuZGlmCit9CisKKy0gKEJPT0wpYWNj
ZXNzaWJpbGl0eUlzSWdub3JlZAoreworICAgIHJldHVybiBOTzsKK30KKworLSAoaWQpYWNjZXNz
aWJpbGl0eUhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQKK3sKKyAgICByZXR1cm4gX2RhdGEtPl9yZW1v
dGVBY2Nlc3NpYmlsaXR5Q2hpbGQuZ2V0KCk7Cit9CisKKy0gKGlkKWFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVWYWx1ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZQoreworICAgIGlmIChbYXR0cmlidXRlIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV0pIHsKKyAgICAg
ICAgaWYgKCFfZGF0YS0+X3JlbW90ZUFjY2Vzc2liaWxpdHlDaGlsZCkKKyAgICAgICAgICAgIHJl
dHVybiBuaWw7CisgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6X2RhdGEt
Pl9yZW1vdGVBY2Nlc3NpYmlsaXR5Q2hpbGQuZ2V0KCldOworICAgIH0KKyAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZV0pCisgICAg
ICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGU7CisgICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZV0p
CisgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb24oTlNBY2Nlc3Np
YmlsaXR5R3JvdXBSb2xlLCBuaWwpOworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlQYXJlbnRBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gTlNBY2Nl
c3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoW3NlbGYgc3VwZXJ2aWV3XSk7CisgICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGVd
KQorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU107CisgICAgCisg
ICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6YXR0cmlidXRlXTsK
K30KKwogLSAoTlNWaWV3ICopaGl0VGVzdDooTlNQb2ludClwb2ludAogewogICAgIE5TVmlldyAq
aGl0VmlldyA9IFtzdXBlciBoaXRUZXN0OnBvaW50XTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2
ICs1Miw3IEBAIEBpbnRlcmZhY2UgV0tWaWV3IChJbnRlcm5hbCkKIC0gKHZvaWQpX3BhZ2VEaWRM
ZWF2ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmc7CiAjZW5kaWYKIAorLSAodm9pZClfc2V0QWNjZXNz
aWJpbGl0eUNoaWxkVG9rZW46KE5TRGF0YSAqKWRhdGE7CiAtICh2b2lkKV9zZXRDb21wbGV4VGV4
dElucHV0RW5hYmxlZDooQk9PTCljb21wbGV4VGV4dElucHV0RW5hYmxlZCBwbHVnaW5Db21wbGV4
VGV4dElucHV0SWRlbnRpZmllcjoodWludDY0X3QpcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50
aWZpZXI7CiAKIC0gKHZvaWQpX3NldFBhZ2VIYXNDdXN0b21SZXByZXNlbnRhdGlvbjooQk9PTClw
YWdlSGFzQ3VzdG9tUmVwcmVzZW50YXRpb247CkluZGV4OiBXZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIwOSw4
IEBACiAJCTFDQThCOTQ1MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQ0E4Qjk0MzEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwICovOyB9OwogCQkxQ0E4Qjk0NjEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5z
cGVjdG9yUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUNBOEI5NDQxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5
TWVzc2FnZXMuaCAqLzsgfTsKIAkJMUNBOEI5NTQxMjdDODkxNTAwNTc2QzJCIC8qIFdlYkluc3Bl
Y3Rvck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFDOEUyREFEMTI3OEM1QjIwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JNYWMubW0gKi87IH07CisJ
CTI5Q0Q1NUFBMTI4RTI5NEYwMDEzM0M4NSAvKiBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlDRDU1QTgx
MjhFMjk0RjAwMTMzQzg1IC8qIEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0LmggKi87IH07CisJ
CTI5Q0Q1NUFCMTI4RTI5NEYwMDEzM0M4NSAvKiBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5Q0Q1NUE5
MTI4RTI5NEYwMDEzM0M4NSAvKiBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5tbSAqLzsgfTsK
IAkJMzdGNjIzQjgxMkE1N0I2MjAwRTNGREY2IC8qIFdLRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RjYyM0I3MTJBNTdCNjIwMEUz
RkRGNiAvKiBXS0ZpbmRPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVi
bGljLCApOyB9OyB9OwogCQk1MTAyMUU5QzEyQjE2Nzg4MDA1QzAzM0MgLyogV2ViQ29udGV4dE1l
bnVDbGllbnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTAyMUU5QjEyQjE2Nzg4MDA1QzAzM0MgLyogV2ViQ29udGV4dE1lbnVDbGllbnRNYWMu
bW0gKi87IH07CiAJCTUxMEZCQjlBMTI4OEM5NUUwMEFGRkRGNCAvKiBXZWJDb250ZXh0TWVudUl0
ZW1EYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxMEZCQjk4MTI4OEM5NUUwMEFGRkRGNCAvKiBXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcCAq
LzsgfTsKQEAgLTg4MSw2ICs4ODMsOCBAQAogCQkxQ0E4QjkzNTEyN0M3NzRFMDA1NzZDMkIgLyog
V2ViSW5zcGVjdG9yUHJveHlNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXZWJJbnNwZWN0b3JQcm94eU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUNBOEI5NDMxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYklu
c3BlY3RvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUNBOEI5NDQxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWVzc2Fn
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSW5zcGVjdG9yUHJveHlN
ZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyOUNENTVBODEyOEUyOTRG
MDAxMzNDODUgLyogQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjlDRDU1QTkxMjhFMjk0RjAwMTMzQzg1IC8qIEFjY2Vzc2li
aWxpdHlXZWJQYWdlT2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTMyREJDRjVFMDM3MEFERUUwMEM5MTc4MyAvKiBXZWJLaXQyUHJlZml4LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdDJQcmVmaXguaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGNjIzQjcxMkE1N0I2MjAwRTNGREY2IC8qIFdLRmluZE9w
dGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tGaW5kT3B0aW9ucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAyMUU5QjEyQjE2Nzg4MDA1QzAzM0Mg
LyogV2ViQ29udGV4dE1lbnVDbGllbnRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJDb250ZXh0TWVudUNsaWVudE1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIzMjYsNiArMjMzMCw4IEBACiAJCUJDOTYzRDZDMTEzREQxOTUwMDU3
NEJFMiAvKiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCTI5Q0Q1NUE5MTI4RTI5NEYwMDEzM0M4NSAvKiBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVj
dC5tbSAqLywKKwkJCQkyOUNENTVBODEyOEUyOTRGMDAxMzNDODUgLyogQWNjZXNzaWJpbGl0eVdl
YlBhZ2VPYmplY3QuaCAqLywKIAkJCQlCQzVGN0JCODExODIzNzk5MDA1MkMwMkMgLyogQ2h1bmtl
ZFVwZGF0ZURyYXdpbmdBcmVhTWFjLmNwcCAqLywKIAkJCQkwRjUyNjVCNTExREQzNzcwMDAwNkQz
M0MgLyogTGF5ZXJCYWNrZWREcmF3aW5nQXJlYU1hYy5tbSAqLywKIAkJCQkxQzhFMkRBRDEyNzhD
NUIyMDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yTWFjLm1tICovLApAQCAtMjc3Myw2ICsyNzc5LDcg
QEAKIAkJCQlCQ0VFN0RDNTEyOEI2NDVEMDA5ODI3REEgLyogSW5qZWN0ZWRCdW5kbGVDbGllbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUVEODJBN0YyMTI4QzZGQUYwMDQ0NzdCMyAvKiBXS0J1bmRs
ZVBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0E4Qjk0NjEyN0M4ODJBMDA1NzZD
MkIgLyogV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjlD
RDU1QUExMjhFMjk0RjAwMTMzQzg1IC8qIEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTUzNTY5RDEyOTFCMUQyMDAwNzQ5REMgLyogV2ViUGFnZUNvbnRl
eHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUFCNEE4RDEyOTZGMEEyMDAyMzk1
MkYgLyogU2FuZGJveEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3QjYyMDYxMjlB
MEE2NzAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjA0LDYg
KzMyMTEsNyBAQAogCQkJCTFDQThCOTQ1MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQ0E4Qjk1NDEyN0M4
OTE1MDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRURD
QTcxQjcxMjhEREE4QzAwMjAxQjI2IC8qIFdLQnVuZGxlUGFnZU92ZXJsYXkuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMjlDRDU1QUIxMjhFMjk0RjAwMTMzQzg1IC8qIEFjY2Vzc2liaWxpdHlXZWJQ
YWdlT2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1MzU2OUMxMjkxQjFEMjAwMDc0OURD
IC8qIFdlYlBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUFC
NEFBQTEyOTZGMTU0MDAyMzk1MkYgLyogU2FuZGJveEV4dGVuc2lvbk1hYy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDN0I2MjA3MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXAuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiA3
NDk3MykKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc3LDYgKzE3Nyw4IEBAIHZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nl
c3MoY28KICAgICAgICAgY2xlYXJSZXNvdXJjZUNhY2hlcygpOwogICAgIGlmIChwYXJhbWV0ZXJz
LmNsZWFyQXBwbGljYXRpb25DYWNoZSkKICAgICAgICAgY2xlYXJBcHBsaWNhdGlvbkNhY2hlKCk7
CisgICAgCisgICAgbV9wcmVzZW50ZXJBcHBsaWNhdGlvblBpZCA9IHBhcmFtZXRlcnMucHJlc2Vu
dGVyQXBwbGljYXRpb25QaWQ7CiAKICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRBbHdheXNVc2VD
b21wbGV4VGV4dENvZGVQYXRoKQogICAgICAgICBzZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2Rl
UGF0aCh0cnVlKTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAkocmV2aXNpb24gNzQ5NzMp
CisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05
MSw3ICs5MSwxMCBAQCBwdWJsaWM6CiAgICAgV2ViUGFnZUdyb3VwUHJveHkqIHdlYlBhZ2VHcm91
cCh1aW50NjRfdCBwYWdlR3JvdXBJRCk7CiAgICAgV2ViUGFnZUdyb3VwUHJveHkqIHdlYlBhZ2VH
cm91cChjb25zdCBXZWJQYWdlR3JvdXBEYXRhJik7CiAgICAgc3RhdGljIFdlYkNvcmU6OlBhZ2VH
cm91cCogc2hhcmVkUGFnZUdyb3VwKCk7Ci0KKyNpZiBQTEFURk9STShNQUMpCisgICAgcGlkX3Qg
cHJlc2VudGVyQXBwbGljYXRpb25QaWQoKSBjb25zdCB7IHJldHVybiBtX3ByZXNlbnRlckFwcGxp
Y2F0aW9uUGlkOyB9CisjZW5kaWYgCisgICAgCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgUU5ldHdv
cmtBY2Nlc3NNYW5hZ2VyKiBuZXR3b3JrQWNjZXNzTWFuYWdlcigpIHsgcmV0dXJuIG1fbmV0d29y
a0FjY2Vzc01hbmFnZXI7IH0KICNlbmRpZgpAQCAtMTU5LDYgKzE2Miw5IEBAIHByaXZhdGU6CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBQTEFURk9STShNQUMpCiAgICAgbWFj
aF9wb3J0X3QgbV9jb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQ7CiAjZW5kaWYKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgcGlkX3QgbV9wcmVzZW50ZXJBcHBsaWNhdGlvblBpZDsKKyNlbmRpZgog
CiAjaWYgUExBVEZPUk0oUVQpCiAgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBtX25ldHdvcmtB
Y2Nlc3NNYW5hZ2VyOwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiA3NDk3MykK
KysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNTcsNiArMTI1NywxMiBAQCB2b2lkIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpyZWdpc3RlckZvckljCiB9CiAKICNpZiBQTEFURk9STShNQUMpCisgICAg
CitSZW1vdGVBWE9iamVjdFJlZiBXZWJGcmFtZUxvYWRlckNsaWVudDo6YWNjZXNzaWJpbGl0eVJl
bW90ZU9iamVjdCgpIAoreworICAgIHJldHVybiBtX2ZyYW1lLT5wYWdlKCktPmFjY2Vzc2liaWxp
dHlSZW1vdGVPYmplY3QoKTsKK30KKyAgICAKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQog
am9iamVjdCBXZWJGcmFtZUxvYWRlckNsaWVudDo6amF2YUFwcGxldChOU1ZpZXcqKSB7IHJldHVy
biAwOyB9CiAjZW5kaWYKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiA3NDk3MykKKysr
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNiArMjAxLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgcmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wgbGlzdGVuID0gdHJ1ZSk7CiAg
ICAgCiAjaWYgUExBVEZPUk0oTUFDKQorICAgIHZpcnR1YWwgUmVtb3RlQVhPYmplY3RSZWYgYWNj
ZXNzaWJpbGl0eVJlbW90ZU9iamVjdCgpOworICAgIAogI2lmIEVOQUJMRShNQUNfSkFWQV9CUklE
R0UpCiAgICAgdmlydHVhbCBqb2JqZWN0IGphdmFBcHBsZXQoTlNWaWV3Kik7CiAjZW5kaWYKSW5k
ZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiA3NDk3MykK
KysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzEyLDExICsxMzEyLDEyIEBAIHZvaWQgV2ViUGFnZTo6c2V0V2luZG93SXNWaXNpYmxl
KGJvb2wgd2kKICAgICAgICAgKCppdCktPnNldFdpbmRvd0lzVmlzaWJsZSh3aW5kb3dJc1Zpc2li
bGUpOwogfQogCi12b2lkIFdlYlBhZ2U6OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykKK3ZvaWQgV2Vi
UGFnZTo6d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
d2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2
aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgYWNj
ZXNzaWJpbGl0eVZpZXdDb29yZGluYXRlcykKIHsKICAgICBtX3dpbmRvd0ZyYW1lSW5TY3JlZW5D
b29yZGluYXRlcyA9IHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlczsKICAgICBtX3ZpZXdG
cmFtZUluV2luZG93Q29vcmRpbmF0ZXMgPSB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzOwot
CisgICAgbV9hY2Nlc3NpYmlsaXR5UG9zaXRpb24gPSBhY2Nlc3NpYmlsaXR5Vmlld0Nvb3JkaW5h
dGVzOworICAgIAogICAgIC8vIFRlbGwgYWxsIG91ciBwbHVnLWluIHZpZXdzIHRoYXQgdGhlIHdp
bmRvdyBhbmQgdmlldyBmcmFtZXMgaGF2ZSBjaGFuZ2VkLgogICAgIGZvciAoSGFzaFNldDxQbHVn
aW5WaWV3Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5WaWV3cy5iZWdpbigpLCBlbmQg
PSBtX3BsdWdpblZpZXdzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICgqaXQpLT53
aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZCh3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMs
IHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpOwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDE1IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybVRvdWNoRXZlbnQuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0o
TUFDKQorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpZmRlZiBfX09CSkNfXworQGNsYXNz
IEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0OworI2Vsc2UKK2NsYXNzIEFjY2Vzc2liaWxpdHlX
ZWJQYWdlT2JqZWN0OworI2VuZGlmCisjZW5kaWYKKwogbmFtZXNwYWNlIENvcmVJUEMgewogICAg
IGNsYXNzIEFyZ3VtZW50RGVjb2RlcjsKICAgICBjbGFzcyBDb25uZWN0aW9uOwpAQCAtMjUzLDYg
KzI2MiwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZ2V0TG9jYXRpb25BbmRMZW5ndGhG
cm9tUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqLCB1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBs
ZW5ndGgpOwogCiAjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgc2VuZEFjY2Vzc2liaWxpdHlQ
cmVzZW50ZXJUb2tlbihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJik7CisgICAgQWNjZXNz
aWJpbGl0eVdlYlBhZ2VPYmplY3QqIGFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKTsKKyAgICBX
ZWJDb3JlOjpJbnRQb2ludCBhY2Nlc3NpYmlsaXR5UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2FjY2Vzc2liaWxpdHlQb3NpdGlvbjsgfSAgICAKKyAgICAKICAgICB2b2lkIHNlbmRDb21wbGV4
VGV4dElucHV0VG9QbHVnaW4odWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYgdGV4dElucHV0KTsKIAogICAgIHZvaWQgZ2V0TWFya2VkUmFuZ2Uo
dWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKTsKQEAgLTM0MCw3ICszNTMsNyBA
QCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgc2V0V2luZG93SXNWaXNp
YmxlKGJvb2wgd2luZG93SXNWaXNpYmxlKTsKLSAgICB2b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXND
aGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGlu
YXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRl
cyk7CisgICAgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBhY2Nlc3NpYmlsaXR5Vmlld0Nvb3JkaW5hdGVzKTsKICNlbmRpZgogCiAgICAgdm9pZCB1
bmFwcGx5RWRpdENvbW1hbmQodWludDY0X3QgY29tbWFuZElEKTsKQEAgLTM5Nyw4ICs0MTAsMTMg
QEAgcHJpdmF0ZToKICAgICAvLyBUaGUgZnJhbWUgb2YgdGhlIHZpZXcgaW4gd2luZG93IGNvb3Jk
aW5hdGVzLgogICAgIFdlYkNvcmU6OkludFJlY3QgbV92aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5h
dGVzOwogCisgICAgLy8gVGhlIGFjY2Vzc2liaWxpdHkgcG9zaXRpb24gb2YgdGhlIHZpZXcuCisg
ICAgV2ViQ29yZTo6SW50UG9pbnQgbV9hY2Nlc3NpYmlsaXR5UG9zaXRpb247CisgICAgCiAgICAg
Ly8gQWxsIHBsdWctaW4gdmlld3Mgb24gdGhpcyB3ZWIgcGFnZS4KICAgICBIYXNoU2V0PFBsdWdp
blZpZXcqPiBtX3BsdWdpblZpZXdzOworICAgIAorICAgIFJldGFpblB0cjxBY2Nlc3NpYmlsaXR5
V2ViUGFnZU9iamVjdD4gbV9tb2NrQWNjZXNzaWJpbGl0eUVsZW1lbnQ7CiAjZWxpZiBQTEFURk9S
TShXSU4pCiAgICAgLy8gT3VyIHZpZXcncyB3aW5kb3cgKGluIHRoZSBVSSBwcm9jZXNzKS4KICAg
ICBIV05EIG1fbmF0aXZlV2luZG93OwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEx
NSwxMCArMTE1LDExIEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogICAgIFNlbmRDb21wbGV4VGV4
dElucHV0VG9QbHVnaW4odWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIs
IFN0cmluZyB0ZXh0SW5wdXQpCiAKICAgICBTZXRXaW5kb3dJc1Zpc2libGUoYm9vbCB3aW5kb3dJ
c1Zpc2libGUpCi0gICAgV2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoV2ViQ29yZTo6SW50UmVj
dCB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIFdlYkNvcmU6OkludFJlY3Qgdmlld0Zy
YW1lSW5XaW5kb3dDb29yZGluYXRlcykKKyAgICBXaW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChX
ZWJDb3JlOjpJbnRSZWN0IHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgV2ViQ29yZTo6
SW50UmVjdCB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzLCBXZWJDb3JlOjpJbnRQb2ludCBh
Y2Nlc3NpYmlsaXR5Vmlld0Nvb3JkaW5hdGVzKQogICAgIEdldE1hcmtlZFJhbmdlKCkgLT4gKHVp
bnQ2NF90IGxvY2F0aW9uLCB1aW50NjRfdCBsZW5ndGgpCiAgICAgQ2hhcmFjdGVySW5kZXhGb3JQ
b2ludChXZWJDb3JlOjpJbnRQb2ludCBwb2ludCkgLT4gKHVpbnQ2NF90IHJlc3VsdCkKICAgICBG
aXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVu
Z3RoKSAtPiAoV2ViQ29yZTo6SW50UmVjdCByZXN1bHRSZWN0KQorICAgIFNlbmRBY2Nlc3NpYmls
aXR5UHJlc2VudGVyVG9rZW4oQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSB0b2tlbikKICNlbmRpZgog
I2lmIFBMQVRGT1JNKFdJTikKICAgICBDb25maXJtQ29tcG9zaXRpb24oV1RGOjpTdHJpbmcgY29t
cG9zaXRpb25TdHJpbmcpCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbQkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUsMTEgKzI1LDE1IEBA
CiAKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5V2ViUGFn
ZU9iamVjdC5oIgorI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJQbHVnaW5W
aWV3LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2Vi
RXZlbnQuaCIKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1l
c3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQVhP
YmplY3RDYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CkBA
IC00MCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxWaWV3Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd3NLZXli
b2FyZENvZGVzLmg+CisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00OCw2ICs1MywyMSBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKIHsKICAgICBtX3BhZ2UtPmFk
ZFNjaGVkdWxlUGFpcihTY2hlZHVsZVBhaXI6OmNyZWF0ZShbTlNSdW5Mb29wIGN1cnJlbnRSdW5M
b29wXSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKSk7CisKKyNpZiAhZGVmaW5lZChCVUlMRElOR19P
Tl9TTk9XX0xFT1BBUkQpCisgICAgQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QqIG1vY2tBY2Nl
c3NpYmlsaXR5RWxlbWVudCA9IFtbW0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0IGFsbG9jXSBp
bml0XSBhdXRvcmVsZWFzZV07CisKKyAgICAvLyBHZXQgdGhlIHBpZCBmb3IgdGhlIHN0YXJ0aW5n
IHByb2Nlc3MuCisgICAgcGlkX3QgcGlkID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkucHJlc2VudGVy
QXBwbGljYXRpb25QaWQoKTsgICAgCisgICAgV0tBWEluaXRpYWxpemVFbGVtZW50V2l0aFByZXNl
bnRlclBpZChtb2NrQWNjZXNzaWJpbGl0eUVsZW1lbnQsIHBpZCk7CisgICAgW21vY2tBY2Nlc3Np
YmlsaXR5RWxlbWVudCBzZXRXZWJQYWdlOnRoaXNdOworICAgIAorICAgIC8vIHNlbmQgZGF0YSBi
YWNrIG92ZXIKKyAgICBOU0RhdGEqIHJlbW90ZVRva2VuID0gKE5TRGF0YSAqKVdLQVhSZW1vdGVU
b2tlbkZvckVsZW1lbnQobW9ja0FjY2Vzc2liaWxpdHlFbGVtZW50KTsgCisgICAgQ29yZUlQQzo6
RGF0YVJlZmVyZW5jZSBkYXRhVG9rZW4gPSBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KFtyZW1vdGVUb2tlbiBieXRlc10pLCBbcmVtb3RlVG9r
ZW4gbGVuZ3RoXSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRSZWNlaXZl
QWNjZXNzaWJpbGl0eVBhZ2VUb2tlbihkYXRhVG9rZW4pKTsKKyAgICBtX21vY2tBY2Nlc3NpYmls
aXR5RWxlbWVudCA9IG1vY2tBY2Nlc3NpYmlsaXR5RWxlbWVudDsKKyNlbmRpZgogfQogCiB2b2lk
IFdlYlBhZ2U6OnBsYXRmb3JtUHJlZmVyZW5jZXNEaWRDaGFuZ2UoY29uc3QgV2ViUHJlZmVyZW5j
ZXNTdG9yZSYpCkBAIC0zMTQsNiArMzM0LDE5IEBAIGJvb2wgV2ViUGFnZTo6cGVyZm9ybURlZmF1
bHRCZWhhdmlvckZvcksKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBXZWJQYWdlOjpzZW5k
QWNjZXNzaWJpbGl0eVByZXNlbnRlclRva2VuKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2Um
IGRhdGEpCit7CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIE5T
RGF0YSogdG9rZW5EYXRhID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGEuZGF0YSgpIGxlbmd0
aDpkYXRhLnNpemUoKV07CisgICAgW21fbW9ja0FjY2Vzc2liaWxpdHlFbGVtZW50LmdldCgpIHNl
dFJlbW90ZVBhcmVudDpXS0FYUmVtb3RlRWxlbWVudEZvclRva2VuKChDRkRhdGFSZWYpdG9rZW5E
YXRhKV07CisjZW5kaWYKK30KKworQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QqIFdlYlBhZ2U6
OmFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKQoreworICAgIHJldHVybiBtX21vY2tBY2Nlc3Np
YmlsaXR5RWxlbWVudC5nZXQoKTsKK30KKyAgICAgICAgIAogYm9vbCBXZWJQYWdlOjpwbGF0Zm9y
bUhhc0xvY2FsRGF0YUZvclVSTChjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwpCiB7CiAgICAgTlNN
dXRhYmxlVVJMUmVxdWVzdCogcmVxdWVzdCA9IFtbTlNNdXRhYmxlVVJMUmVxdWVzdCBhbGxvY10g
aW5pdFdpdGhVUkw6dXJsXTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vz
c01haW5NYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9j
ZXNzTWFpbk1hYy5tbQkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvbWFj
L1dlYlByb2Nlc3NNYWluTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNiArMTMzLDEwIEBA
IGludCBXZWJQcm9jZXNzTWFpbihjb25zdCBDb21tYW5kTGluZSYgY28KICAgICAgLy8gSW5pdGlh
bGl6ZSBBcHBLaXQuCiAgICAgW05TQXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dOwogCisj
aWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIFdLQVhSZWdpc3RlclJl
bW90ZUFwcCgpOworI2VuZGlmCisgICAgCiAgICAgUnVuTG9vcDo6cnVuKCk7CiAKICAgICAvLyBG
SVhNRTogRG8gbW9yZSBjbGVhbnVwIGhlcmUuCkluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gNzQ5NzMpCisrKyBX
ZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEw
LTAxLTA0ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0syOiBTdXBwb3J0IEFjY2Vz
c2liaWxpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUxODU5CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGsuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnZXRGb2N1c2VkQWNj
ZXNzaWJsZUVsZW1lbnQpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAg
ICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfYWNjZXNzaWJsZSk6CisKIDIwMTEtMDEtMDMgIEd1
c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpJbmRleDogV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAko
cmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNSwxMSArNDI1LDcgQEAgQXRr
T2JqZWN0KiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdldAogICAgIGlmICghcHJpdi0+Y29y
ZUZyYW1lIHx8ICFwcml2LT5jb3JlRnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgUmVuZGVyVmlldyogcm9vdCA9IHRvUmVuZGVyVmlldyhwcml2LT5jb3JlRnJhbWUt
PmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOwotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBBdGtPYmplY3QqIHdyYXBwZXIgPSAgcHJpdi0+Y29yZUZyYW1lLT5kb2N1bWVu
dCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJvb3QpLT53cmFwcGVyKCk7CisgICAg
QXRrT2JqZWN0KiB3cmFwcGVyID0gIHByaXYtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+YXhPYmpl
Y3RDYWNoZSgpLT5yb290T2JqZWN0KCktPndyYXBwZXIoKTsKICAgICBpZiAoIXdyYXBwZXIpCiAg
ICAgICAgIHJldHVybiAwOwogCkluZGV4OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAko
cmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ1Miw3ICsxNDUyLDcgQEAgc3RhdGljIEF0a09iamVjdCogd2Vi
a2l0X3dlYl92aWV3X2dldF9hYwogICAgIGlmICghZG9jKQogICAgICAgICByZXR1cm4gTlVMTDsK
IAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVBY2Nlc3NpYmxlID0gZG9jLT5heE9iamVj
dENhY2hlKCktPmdldE9yQ3JlYXRlKGRvYy0+cmVuZGVyZXIoKSk7CisgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZUFjY2Vzc2libGUgPSBkb2MtPmF4T2JqZWN0Q2FjaGUoKS0+cm9vdE9iamVj
dCgpOwogICAgIGlmICghY29yZUFjY2Vzc2libGUgfHwgIWNvcmVBY2Nlc3NpYmxlLT53cmFwcGVy
KCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNzQ5NzMpCisrKyBX
ZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDEx
LTAxLTA0ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0syOiBTdXBwb3J0IEFjY2Vz
c2liaWxpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUxODU5CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5o
OgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmFjY2Vzc2liaWxpdHlSZW1vdGVPYmpl
Y3QpOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1l
IHNldEFjY2Vzc2libGVOYW1lOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBhY2Nlc3NpYmlsaXR5
Um9vdF0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oOgorICAgICAgICAq
IFdlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmg6CisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmll
dy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVu
dF0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpdKToKKyAg
ICAgICAgKC1bV2ViSFRNTFZpZXcgX2FjY2Vzc2liaWxpdHlQYXJlbnRGb3JTdWJ2aWV3Ol0pOgor
CiAyMDExLTAxLTAyICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAg
UnViYmVyLXN0YW1wZWQgYnkgU2ltb24gRnJhc2VyLgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gNzQ5NzMpCisr
KyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyNyw2ICsyMjcsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGpvYmpl
Y3QgamF2YUFwcGxldChOU1ZpZXcqKTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oTUFDKQorICAg
IHZpcnR1YWwgUmVtb3RlQVhPYmplY3RSZWYgYWNjZXNzaWJpbGl0eVJlbW90ZU9iamVjdCgpIHsg
cmV0dXJuIDA7IH0KKyNlbmRpZgorICAgIAogICAgIHZvaWQgc2V0T3JpZ2luYWxVUkxGb3JEb3du
bG9hZChXZWJEb3dubG9hZCAqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25z
dDsKIAogICAgIFJldGFpblB0cjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyPiBzZXRVcFBvbGljeUxp
c3RlbmVyKFdlYkNvcmU6OkZyYW1lUG9saWN5RnVuY3Rpb24pOwpJbmRleDogV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTY4OSwyNiArNjg5LDYgQEAgLSAoQk9PTClfbmVlZHNMYXlv
dXQKICAgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+dmlldygpID8gX3ByaXZhdGUtPmNv
cmVGcmFtZS0+dmlldygpLT5uZWVkc0xheW91dCgpIDogZmFsc2U7CiB9CiAKLS0gKGlkKV9hY2Nl
c3NpYmlsaXR5VHJlZQotewotI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkKLSAgICBpZiAoIUFYT2Jq
ZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKLSAgICAgICAgQVhPYmplY3RDYWNo
ZTo6ZW5hYmxlQWNjZXNzaWJpbGl0eSgpOwotICAgICAgICBpZiAoW1tOU0FwcCBhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlQXR0
cmlidXRlXSBib29sVmFsdWVdKQotICAgICAgICAgICAgQVhPYmplY3RDYWNoZTo6ZW5hYmxlRW5o
YW5jZWRVc2VySW50ZXJmYWNlQWNjZXNzaWJpbGl0eSgpOwotICAgIH0KLQotICAgIGlmICghX3By
aXZhdGUtPmNvcmVGcmFtZSB8fCAhX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICBSZW5kZXJWaWV3KiByb290ID0gdG9SZW5kZXJWaWV3KF9w
cml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOwotICAgIGlmICghcm9v
dCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+
ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyb290KS0+d3JhcHBlcigp
OwotI2Vsc2UKLSAgICByZXR1cm4gbmlsOwotI2VuZGlmCi19Ci0KIC0gKERPTVJhbmdlICopX3Jh
bmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVBbHRl
cmF0aW9uKWFsdGVyYXRpb24gZGlyZWN0aW9uOihTZWxlY3Rpb25EaXJlY3Rpb24pZGlyZWN0aW9u
IGdyYW51bGFyaXR5OihUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkKIHsKICAgICBpZiAoX3By
aXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpKQpAQCAtMTMzOSwxMyArMTMx
OSwxNCBAQCAtICh2b2lkKXNldEFjY2Vzc2libGVOYW1lOihOU1N0cmluZyAqKW5hCiAgICAgaWYg
KCFBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgUmVuZGVyVmlldyogcm9vdCA9IHRvUmVuZGVyVmlldyhfcHJpdmF0ZS0+Y29y
ZUZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKLSAgICBpZiAoIXJvb3QpCisgICAgaWYg
KCFfcHJpdmF0ZS0+Y29yZUZyYW1lIHx8ICFfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgp
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcm9vdE9i
amVjdCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+
Z2V0T3JDcmVhdGUocm9vdCk7Ci0gICAgU3RyaW5nIHN0ck5hbWUobmFtZSk7Ci0gICAgcm9vdE9i
amVjdC0+c2V0QWNjZXNzaWJsZU5hbWUoc3RyTmFtZSk7CisgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogcm9vdE9iamVjdCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPmF4T2JqZWN0
Q2FjaGUoKS0+cm9vdE9iamVjdCgpOworICAgIGlmIChyb290T2JqZWN0KSB7CisgICAgICAgIFN0
cmluZyBzdHJOYW1lKG5hbWUpOworICAgICAgICByb290T2JqZWN0LT5zZXRBY2Nlc3NpYmxlTmFt
ZShzdHJOYW1lKTsKKyAgICB9CiAjZW5kaWYKIH0KIApAQCAtMTM2Niw2ICsxMzQ3LDI3IEBAIC0g
KEJPT0wpaGFzU3BlbGxpbmdNYXJrZXI6KGludClmcm9tIGxlbmcKICAgICByZXR1cm4gY29yZUZy
YW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uU3RhcnRIYXNTcGVsbGluZ01hcmtlckZvcihmcm9tLCBs
ZW5ndGgpOwogfQogCistIChpZClhY2Nlc3NpYmlsaXR5Um9vdAoreworI2lmIEhBVkUoQUNDRVNT
SUJJTElUWSkKKyAgICBpZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkp
IHsKKyAgICAgICAgQVhPYmplY3RDYWNoZTo6ZW5hYmxlQWNjZXNzaWJpbGl0eSgpOworICAgICAg
ICBpZiAoW1tOU0FwcCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5
RW5oYW5jZWRVc2VySW50ZXJmYWNlQXR0cmlidXRlXSBib29sVmFsdWVdKQorICAgICAgICAgICAg
QVhPYmplY3RDYWNoZTo6ZW5hYmxlRW5oYW5jZWRVc2VySW50ZXJmYWNlQWNjZXNzaWJpbGl0eSgp
OworICAgIH0KKyAgICAKKyAgICBpZiAoIV9wcml2YXRlLT5jb3JlRnJhbWUgfHwgIV9wcml2YXRl
LT5jb3JlRnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogcm9vdE9iamVjdCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRv
Y3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+cm9vdE9iamVjdCgpOworICAgIGlmIChyb290T2Jq
ZWN0KQorICAgICAgICByZXR1cm4gcm9vdE9iamVjdC0+d3JhcHBlcigpOworICAgIHJldHVybiBu
aWw7CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYKK30KKwogQGVuZAogCiBAaW1wbGVt
ZW50YXRpb24gV2ViRnJhbWUKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVy
bmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwu
aAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5h
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsOCArMTM4LDYgQEAgQGludGVyZmFjZSBXZWJGcmFt
ZSAoV2ViSW50ZXJuYWwpCiAtIChOU1JlY3QpX2ZpcnN0UmVjdEZvckRPTVJhbmdlOihET01SYW5n
ZSAqKXJhbmdlOwogLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICop
cmFuZ2U7CiAKLS0gKGlkKV9hY2Nlc3NpYmlsaXR5VHJlZTsKLQogLSAoRE9NUmFuZ2UgKilfcmFu
Z2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjooV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxl
cjo6RUFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFdlYkNvcmU6OlNlbGVjdGlvbkRp
cmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSln
cmFudWxhcml0eTsKIC0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFdlYkNvcmU6OlJhbmdl
KilyYW5nZTsKIC0gKERPTVJhbmdlICopX2NvbnZlcnROU1JhbmdlVG9ET01SYW5nZTooTlNSYW5n
ZSlyYW5nZTsKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmgJKHJldmlzaW9u
IDc0OTczKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lUHJpdmF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDIsNCArMTQyLDcgQEAgQGludGVyZmFjZSBXZWJGcmFtZSAoV2ViUHJpdmF0
ZSkKIC8vIFJldHVybnMgd2hldGhlciB0aGVyZSBpcyBhIHNwZWxsaW5nIG1hcmtlciBpbiB0aGUg
c3BlY2lmaWVkIHJhbmdlIG9mIHRoZSBmb2N1c2VkIG5vZGUuCiAtIChCT09MKWhhc1NwZWxsaW5n
TWFya2VyOihpbnQpbG9jYXRpb24gbGVuZ3RoOihpbnQpbGVuZ3RoOwogCisvLyBUaGUgdG9wIG9m
IHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUuCistIChpZClhY2Nlc3NpYmlsaXR5Um9vdDsKKwogQGVu
ZApJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gNzQ5NzMpCisrKyBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyNzQs
NyArNDI3NCw3IEBAIC0gKHZvaWQpZmxhZ3NDaGFuZ2VkOihOU0V2ZW50ICopZXZlbnQKIC0gKGlk
KWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWUKIHsK
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlD
aGlsZHJlbkF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVd
IF9hY2Nlc3NpYmlsaXR5VHJlZV07CisgICAgICAgIGlkIGFjY1RyZWUgPSBbW3NlbGYgX2ZyYW1l
XSBhY2Nlc3NpYmlsaXR5Um9vdF07CiAgICAgICAgIGlmIChhY2NUcmVlKQogICAgICAgICAgICAg
cmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDphY2NUcmVlXTsKICAgICAgICAgcmV0dXJu
IG5pbDsKQEAgLTQyODQsNyArNDI4NCw3IEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZTooTlNTdHIKIAogLSAoaWQpYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQKIHsKLSAg
ICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0gX2FjY2Vzc2liaWxpdHlUcmVlXTsKKyAgICBp
ZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0gYWNjZXNzaWJpbGl0eVJvb3RdOwogICAgIGlmIChh
Y2NUcmVlKQogICAgICAgICByZXR1cm4gW2FjY1RyZWUgYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVs
ZW1lbnRdOwogICAgIHJldHVybiBzZWxmOwpAQCAtNDI5Miw3ICs0MjkyLDcgQEAgLSAoaWQpYWNj
ZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQKIAogLSAoaWQpYWNjZXNzaWJpbGl0eUhpdFRlc3Q6
KE5TUG9pbnQpcG9pbnQKIHsKLSAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0gX2FjY2Vz
c2liaWxpdHlUcmVlXTsKKyAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0gYWNjZXNzaWJp
bGl0eVJvb3RdOwogICAgIGlmIChhY2NUcmVlKSB7CiAgICAgICAgIE5TUG9pbnQgd2luZG93Q29v
cmQgPSBbW3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOnBvaW50XTsKICAgICAgICAg
cmV0dXJuIFthY2NUcmVlIGFjY2Vzc2liaWxpdHlIaXRUZXN0OltzZWxmIGNvbnZlcnRQb2ludDp3
aW5kb3dDb29yZCBmcm9tVmlldzpuaWxdXTsKQEAgLTQzMDIsNyArNDMwMiw3IEBAIC0gKGlkKWFj
Y2Vzc2liaWxpdHlIaXRUZXN0OihOU1BvaW50KXBvaW4KIAogLSAoaWQpX2FjY2Vzc2liaWxpdHlQ
YXJlbnRGb3JTdWJ2aWV3OihOU1ZpZXcgKilzdWJ2aWV3CiB7Ci0gICAgaWQgYWNjVHJlZSA9IFtb
c2VsZiBfZnJhbWVdIF9hY2Nlc3NpYmlsaXR5VHJlZV07CisgICAgaWQgYWNjVHJlZSA9IFtbc2Vs
ZiBfZnJhbWVdIGFjY2Vzc2liaWxpdHlSb290XTsKICAgICBpZiAoIWFjY1RyZWUpCiAgICAgICAg
IHJldHVybiBzZWxmOwogICAgIGlkIHBhcmVudCA9IFthY2NUcmVlIF9hY2Nlc3NpYmlsaXR5UGFy
ZW50Rm9yU3VidmlldzpzdWJ2aWV3XTsKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktp
dC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDEt
MDQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXSzI6IFN1cHBvcnQgQWNjZXNzaWJp
bGl0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4
NTkKKworICAgICAgICAqIEFjY2Vzc2libGVEb2N1bWVudC5jcHA6CisgICAgICAgIChBY2Nlc3Np
YmxlRG9jdW1lbnQ6OkFjY2Vzc2libGVEb2N1bWVudCk6CisKIDIwMTEtMDEtMDEgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRl
bC4KSW5kZXg6IFdlYktpdC93aW4vQWNjZXNzaWJsZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvd2luL0FjY2Vzc2libGVEb2N1bWVudC5jcHAJKHJldmlzaW9uIDc0OTczKQorKysg
V2ViS2l0L3dpbi9BY2Nlc3NpYmxlRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAvLyBBY2Nlc3NpYmxlRG9jdW1l
bnQKIEFjY2Vzc2libGVEb2N1bWVudDo6QWNjZXNzaWJsZURvY3VtZW50KERvY3VtZW50KiBkb2Mp
Ci0gICAgOiBBY2Nlc3NpYmxlQmFzZShkb2MtPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUo
ZG9jLT5yZW5kZXJlcigpKSkKKyAgICA6IEFjY2Vzc2libGVCYXNlKGRvYy0+YXhPYmplY3RDYWNo
ZSgpLT5yb290T2JqZWN0KCkpCiB7CiB9CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0OTczKQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MTEtMDEtMDQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXSzI6IFN1cHBvcnQgQWNj
ZXNzaWJpbGl0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTE4NTkKKworICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3dlYmtpdC1z
Y3JvbGxhcmVhLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Fj
Y2Vzc2liaWxpdHkvd2Via2l0LXNjcm9sbGFyZWEuaHRtbDogQWRkZWQuCisKIDIwMTEtMDEtMDQg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFuIEJlcm5zdGVpbi4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmls
aXR5L3dlYmtpdC1zY3JvbGxhcmVhLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS93ZWJraXQtc2Nyb2xsYXJlYS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJp
bGl0eS93ZWJraXQtc2Nyb2xsYXJlYS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTUgQEAKK3RleHQKKwordGV4dAorVGhpcyB0ZXN0cyB0aGF0IHRoZSBXZWJLaXQgZ2VuZXJh
dGVkIHNjcm9sbCBhcmVhcyBhcmUgY29ycmVjdC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1MgYm9keS5yb2xlIGlzICdBWFJvbGU6IEFYV2ViQXJlYScKK1BBU1MgYm9keS5w
YXJlbnRFbGVtZW50KCkucm9sZSBpcyAnQVhSb2xlOiBBWFNjcm9sbEFyZWEnCitQQVNTIGJvZHku
cGFyZW50RWxlbWVudCgpLmNoaWxkcmVuQ291bnQgaXMgMQorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9hY2Nlc3NpYmlsaXR5L3dlYmtpdC1zY3JvbGxhcmVhLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvd2Via2l0LXNjcm9sbGFyZWEu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmls
aXR5L3dlYmtpdC1zY3JvbGxhcmVhLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAK
KzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgor
PGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gZmFsc2U7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9k
eSI+CisKK3RleHQ8YnI+Cis8aW1nIHNyYz0ncmVzb3VyY2VzL2Nha2UucG5nJyB3aWR0aD01MDAw
IGhlaWdodD01MDAwPgorPGJyPgordGV4dAorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorCisgICAgZGVzY3JpcHRpb24oIlRo
aXMgdGVzdHMgdGhhdCB0aGUgV2ViS2l0IGdlbmVyYXRlZCBzY3JvbGwgYXJlYXMgYXJlIGNvcnJl
Y3QuIik7CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisKKyAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvZHkiKS5mb2N1cygpOworICAgICAgICB2
YXIgYm9keSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworICAgICAg
ICBzaG91bGRCZSgiYm9keS5yb2xlIiwgIidBWFJvbGU6IEFYV2ViQXJlYSciKTsKKyAgICAgICAg
c2hvdWxkQmUoImJvZHkucGFyZW50RWxlbWVudCgpLnJvbGUiLCAiJ0FYUm9sZTogQVhTY3JvbGxB
cmVhJyIpOworICAgICAgICBzaG91bGRCZSgiYm9keS5wYXJlbnRFbGVtZW50KCkuY2hpbGRyZW5D
b3VudCIsICIxIik7CisgICAgfQorCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwv
c2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77907</attachid>
            <date>2011-01-04 10:52:31 -0800</date>
            <delta_ts>2011-01-04 12:16:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51859-20110104105226.patch</filename>
            <type>text/plain</type>
            <size>114721</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDc0OTczKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTEtMDEtMDQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXSzI6
IFN1cHBvcnQgQWNjZXNzaWJpbGl0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTE4NTkKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpmb2N1c2VkRWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cm9vdEVsZW1lbnQpOgorCiAyMDExLTAxLTAzICBZaSBTaGVuICA8eWkuNC5zaGVuQG5va2lhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQko
cmV2aXNpb24gNzQ5NzMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDEwIEBACiAjaW1w
b3J0ICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgogCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmgiCisjaW1wb3J0IDxBcHBLaXQvTlNDb2xvci5oPgogI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XZWJGcmFtZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlldy5o
PgogCiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQpA
QCAtNDksMTQgKzUxLDE0IEBAIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNv
bnQKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3Vz
ZWRFbGVtZW50KCkKIHsKICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZSBjYWNoaW5nIGhl
cmUuCi0gICAgaWQgYWNjZXNzaWJpbGl0eU9iamVjdCA9IFtbW21haW5GcmFtZSBmcmFtZVZpZXdd
IGRvY3VtZW50Vmlld10gYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRdOworICAgIGlkIGFj
Y2Vzc2liaWxpdHlPYmplY3QgPSBbW21haW5GcmFtZSBhY2Nlc3NpYmlsaXR5Um9vdF0gYWNjZXNz
aWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRdOwogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50KGFjY2Vzc2liaWxpdHlPYmplY3QpOwogfQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgpCiB7CiAgICAgLy8gRklYTUU6IHdl
IGNvdWxkIGRvIHNvbWUgY2FjaGluZyBoZXJlLgotICAgIGlkIGFjY2Vzc2liaWxpdHlPYmplY3Qg
PSBbW21haW5GcmFtZSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgaWQgYWNjZXNzaWJp
bGl0eU9iamVjdCA9IFttYWluRnJhbWUgYWNjZXNzaWJpbGl0eVJvb3RdOwogICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KGFjY2Vzc2liaWxpdHlPYmplY3QpOwogfQogCkluZGV4OiBX
ZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gNzQ5NzMpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDEwMiBAQAorMjAxMS0wMS0wNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdLMjog
U3VwcG9ydCBBY2Nlc3NpYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MTg1OQorCisgICAgICAgIFN1cHBvcnQgV2ViS2l0MiBhY2Nlc3NpYmls
aXR5LiBUbyBkbyBzbywgaXQgd2FzIG5lY2Vzc2FyeSB0byBoYXZlCisgICAgICAgIGFuIEFjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3IGNsYXNzIHRoYXQgY291bGQgbWltaWMgd2hhdCB0aGUgcGxhdGZv
cm0gcHJvdmlkZWQgYmVmb3JlCisgICAgICAgIHdpdGggc2Nyb2xsIHZpZXdzLgorCisgICAgICAg
IFRlc3Q6IHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3dlYmtpdC1zY3JvbGxhcmVhLmh0bWwK
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgor
ICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJvb3RPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZSk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpo
YW5kbGVTY3JvbGxiYXJVcGRhdGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUltYWdlTWFwTGluay5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5SW1hZ2VNYXBMaW5rLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveE9wdGlvbi5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveE9wdGlvbi5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp1cGRhdGVD
aGlsZHJlbklmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmVsZW1lbnRBY2Nlc3NpYmlsaXR5SGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpheE9iamVjdENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OmZvY3VzZWRVSUVsZW1lbnQpOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0Ojppc1Njcm9sbFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6Y2FuU2V0TnVtZXJpY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnNjcm9sbEJhcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OnNldFZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6cGFyZW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2hpbGRyZW4pOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjplbGVtZW50UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpkb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpvcmllbnRhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjppc0VuYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6dmFsdWVGb3JSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpzZXRWYWx1ZSk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpzZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6Y2FuU2V0VmFsdWVBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6Y2FuU2V0TnVtZXJpY1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmlzQWNjZXNzaWJpbGl0eVNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpwYXJl
bnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6cm9s
ZVZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJp
bGl0eUlnbm9yZUF0dGFjaG1lbnQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyLm1tOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdKToKKyAgICAgICAgKC1bQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdF0pOgor
ICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBwb3NpdGlvbl0pOgorICAgICAg
ICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBzY3JvbGxWaWV3UGFyZW50XSk6CisgICAg
ICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZTpdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJp
bGl0eUhpdFRlc3Q6XSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFj
Y2Vzc2liaWxpdHlTZXRWYWx1ZTpmb3JBdHRyaWJ1dGU6XSk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpheE9iamVjdENhY2hlKToKKyAg
ICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZy
YW1lTG9hZGVyQ2xpZW50OjphY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KToKKyAgICAgICAgKiBs
b2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6On5GcmFtZVZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3OjpheE9iamVjdENhY2hlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmll
dy5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3OjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgICogcGxh
dGZvcm0vU2Nyb2xsYmFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6flNjcm9s
bGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXI6OmF4T2JqZWN0Q2FjaGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cm9sbGJhci5oOgorICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5oOgorICAgICAgICAoV2ViQ29y
ZTo6V2lkZ2V0OjpheE9iamVjdENhY2hlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3Lmg6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwOiBBZGRlZC4KKwogMjAxMS0wMS0wNCAgVG9ueSBHZW50
aWxjb3JlICA8dG9ueWdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQg
Zml4LgpJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTU3NSw2ICs1NzUsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAogICAgIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCisgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
U2Nyb2xsVmlldy5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3Bw
CiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCiAgICAgYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA3NDk3
MykKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTY2Miw2ICs2
NjIsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmggXAogCVdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyLmNwcCBcCiAJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlTY3JvbGxiYXIuaCBcCisJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3LmNwcCBcCisJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3LmggXAogCVdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcCBc
CiAJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuaCBcCiAJV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwIFwKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgko
cmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkp
CkBAIC0yODksNyArMjg5LDcgQEAgX19aTjdXZWJDb3JlMTJjcmVhdGVNYXJrdXBFUEtOU180Tm9k
ZUVOUwogX19aTjdXZWJDb3JlMTJjcmVhdGVNYXJrdXBFUEtOU181UmFuZ2VFUE4zV1RGNlZlY3Rv
cklQTlNfNE5vZGVFTG0wRUVFTlNfMjNFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZUViTlNfMTNFQWJz
b2x1dGVVUkxzRQogX19aTjdXZWJDb3JlMTJnY0NvbnRyb2xsZXJFdgogX19aTjdXZWJDb3JlMTJp
Y29uRGF0YWJhc2VFdgotX19aTjdXZWJDb3JlMTNBWE9iamVjdENhY2hlMTFnZXRPckNyZWF0ZUVQ
TlNfMTJSZW5kZXJPYmplY3RFCitfX1pON1dlYkNvcmUxM0FYT2JqZWN0Q2FjaGUxMHJvb3RPYmpl
Y3RFdgogX19aTjdXZWJDb3JlMTNBWE9iamVjdENhY2hlMjFnQWNjZXNzaWJpbGl0eUVuYWJsZWRF
CiBfX1pON1dlYkNvcmUxM0FYT2JqZWN0Q2FjaGU0MmdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2Vy
SW50ZXJmYWNlRW5hYmxlZEUKIF9fWk43V2ViQ29yZTEzSFRUUEhlYWRlck1hcEMxRXYKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBp
CShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkp
CkBAIC01MTgsNiArNTE4LDggQEAKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyLmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyLmgnLAorICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNjcm9sbFZpZXcuY3BwJywKKyAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlTY3JvbGxWaWV3LmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNsaWRlci5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVNsaWRlci5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZS5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUucHJvCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTMyMSw2ICszMjEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAgXCAgICAKICAgICBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIFwgICAgCiAgICAgYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmNwcCBcCisgICAgYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAgXAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNsaWRlci5jcHAgXCAgICAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklB
R3JpZC5jcHAgXCAgICAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENl
bGwuY3BwIFwgICAgCkBAIC0xMzk4LDYgKzEzOTksNyBAQCBIRUFERVJTICs9IFwKICAgICBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5oIFwKICAgICBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCBcCiAgICAgYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmggXAorICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVNjcm9sbFZpZXcuaCBcCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmgg
XAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5oIFwKICAgICBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5oIFwKSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzc1NCw2ICsyMzc1
NCw2MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxhY2Nlc3NpYmlsaXR5XEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcCIKKwkJCQk+CisJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMy
IgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIi
CisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfTFRDR3xXaW4z
MiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxhY2Nlc3Np
YmlsaXR5XEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGFjY2Vzc2liaWxpdHlcQWNjZXNzaWJpbGl0eVNs
aWRlci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc0OTczKQorKysgV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTY5Myw2ICs2OTMsOCBAQAogCQkyNEY1NEVBRDEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRp
b25DYWNoZUhvc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTI1NDJGNERBMTE2NkMyNUEw
MEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyRjREODExNjZDMjVBMDBFODlBODYgLyogVXNl
ckdlc3R1cmVJbmRpY2F0b3IuY3BwICovOyB9OwogCQkyNTQyRjREQjExNjZDMjVBMDBFODlBODYg
LyogVXNlckdlc3R1cmVJbmRpY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI1NDJGNEQ5MTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUlu
ZGljYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTI5NDg5RkM3MTJDMDBGMDMwMEQ4M0YwRiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjk0ODlGQzUx
MkMwMEYwMzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggKi87IH07CisJCTI5
NDg5RkM4MTJDMDBGMDMwMEQ4M0YwRiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTQ4OUZDNjEyQzAw
RjAzMDBEODNGMEYgLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwICovOyB9OwogCQkyOUE4
MTIyNjBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUE4MTIwODBGQkI5
QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgKi87IH07CiAJCTI5
QTgxMjI3MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBODEyMDkwRkJCOUMxRDAw
NTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlUYWJsZS5jcHAgKi87IH07CiAJCTI5QTgxMjI4MEZCQjlD
MUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBODEyMEEwRkJCOUMxRDAwNTEwMjkzIC8q
IEFjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAgKi87IH07CkBAIC02OTk2LDYgKzY5OTgsOCBAQAog
CQkyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZUhvc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjU0MkY0RDgxMTY2QzI1QTAwRTg5QTg2IC8qIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMjU0MkY0RDkxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5NDg5RkM1MTJDMDBGMDMwMEQ4M0YwRiAvKiBB
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyOTQ4OUZDNjEyQzAwRjAzMDBEODNGMEYgLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNjcm9s
bFZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUE4MTIwODBGQkI5QzFE
MDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlBODEyMDkwRkJCOUMxRDAwNTEwMjkzIC8qIEFj
Y2Vzc2liaWxpdHlUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
OUE4MTIwQTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlBUklBR3JpZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjkzOCw2ICsxMjk0Miw4IEBACiAJ
CQkJQTQwOUM5ODMxMTZEMERERDAwNzE5N0JEIC8qIEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGlj
YXRvci5oICovLAogCQkJCTI5QTgxMjA4MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcCAqLywKIAkJCQkyOUE4MTIxQjBGQkI5QzFEMDA1MTAyOTMgLyogQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oICovLAorCQkJCTI5NDg5RkM2MTJDMDBGMDMwMEQ4M0Yw
RiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAgKi8sCisJCQkJMjk0ODlGQzUxMkMwMEYw
MzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggKi8sCiAJCQkJOTNDNEY2RTgx
MTA4RjlBNTAwOTlEMERCIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwICovLAogCQkJCTkz
QzRGNkU5MTEwOEY5QTUwMDk5RDBEQiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmggKi8sCiAJ
CQkJMDcwOUZDNEIxMDI1REVEODAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuY3BwICov
LApAQCAtMjIyNjUsNiArMjIyNzEsNyBAQAogCQkJCTkzRjE5OUVEMDgyNDVFNTkwMDFFOUFCQyAv
KiBYU0xUUHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAy
RUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0RENEQ4NzBG
REY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjk0ODlG
QzcxMkMwMEYwMzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3RUU2ODQ2MDEyRDI2RTM4MDBFNzk0MTUgLyogQXV0aGVudGljYXRpb25DRi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0VFNjg0NjExMkQyNkUzODAwRTc5NDE1IC8qIEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUU2ODQ2NDEyRDI2RTM4MDBF
Nzk0MTUgLyogQ29va2llU3RvcmFnZUNGTmV0LmggaW4gSGVhZGVycyAqLywKQEAgLTI0OTQzLDYg
KzI0OTUwLDcgQEAKIAkJCQk5M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nv
ckxpYnhzbHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5
IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0RENEQ4NjBGREY0
RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyOTQ4OUZD
ODEyQzAwRjAzMDBEODNGMEYgLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0VFNjg0NUYxMkQyNkUzODAwRTc5NDE1IC8qIEF1dGhlbnRpY2F0aW9uQ0Yu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0NjIxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tp
ZUphckNGTmV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFRTY4NDYzMTJEMjZFMzgwMEU3OTQx
NSAvKiBDb29raWVTdG9yYWdlQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NiArNDIsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmgiCiAjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3
LmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5oIgogI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlTbGlkZXIuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKQEAgLTQ5
LDYgKzUwLDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaCIKICNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuaCIKICNpbmNsdWRlICJBY2Nl
c3NpYmlsaXR5VGFibGVSb3cuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZv
Y3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEFyZWFF
bGVtZW50LmgiCkBAIC02Nyw2ICs2OSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIK
ICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5j
bHVkZSAiU2Nyb2xsVmlldy5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIApAQCAt
NzcsOSArODAsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIGJvb2wgQVhPYmplY3RD
YWNoZTo6Z0FjY2Vzc2liaWxpdHlFbmFibGVkID0gZmFsc2U7CiBib29sIEFYT2JqZWN0Q2FjaGU6
OmdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZCA9IGZhbHNlOwogCi1B
WE9iamVjdENhY2hlOjpBWE9iamVjdENhY2hlKCkKK0FYT2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2Fj
aGUoY29uc3QgRG9jdW1lbnQqIGRvYykKICAgICA6IG1fbm90aWZpY2F0aW9uUG9zdFRpbWVyKHRo
aXMsICZBWE9iamVjdENhY2hlOjpub3RpZmljYXRpb25Qb3N0VGltZXJGaXJlZCkKIHsKKyAgICBt
X2RvY3VtZW50ID0gY29uc3RfY2FzdDxEb2N1bWVudCo+KGRvYyk7CiB9CiAKIEFYT2JqZWN0Q2Fj
aGU6On5BWE9iamVjdENhY2hlKCkKQEAgLTE1MSwxOSArMTU1LDMwIEBAIEFjY2Vzc2liaWxpdHlP
YmplY3QqIEFYT2JqZWN0Q2FjaGU6OmZvY3UKICAgICByZXR1cm4gb2JqOwogfQogCitBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAg
aWYgKCF3aWRnZXQpCisgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICBBWElEIGF4SUQg
PSBtX3dpZGdldE9iamVjdE1hcHBpbmcuZ2V0KHdpZGdldCk7CisgICAgQVNTRVJUKCFIYXNoVHJh
aXRzPEFYSUQ+Ojppc0RlbGV0ZWRWYWx1ZShheElEKSk7CisgICAgaWYgKCFheElEKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gbV9vYmplY3RzLmdldChheElEKS5nZXQoKTsg
ICAgCit9CisgICAgCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1
cm4gMDsKICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSAwOwogICAgIEFYSUQg
YXhJRCA9IG1fcmVuZGVyT2JqZWN0TWFwcGluZy5nZXQocmVuZGVyZXIpOwogICAgIEFTU0VSVCgh
SGFzaFRyYWl0czxBWElEPjo6aXNEZWxldGVkVmFsdWUoYXhJRCkpOwotCi0gICAgaWYgKGF4SUQp
Ci0gICAgICAgIG9iaiA9IG1fb2JqZWN0cy5nZXQoYXhJRCkuZ2V0KCk7CisgICAgaWYgKCFheElE
KQorICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4gb2JqOworICAgIHJldHVybiBt
X29iamVjdHMuZ2V0KGF4SUQpLmdldCgpOyAgICAKIH0KIAogLy8gRklYTUU6IFRoaXMgcHJvYmFi
bHkgYmVsb25ncyBvbiBOb2RlLgpAQCAtMjMwLDYgKzI0NSwyOCBAQCBzdGF0aWMgUGFzc1JlZlB0
cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBjCiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmNyZWF0ZShyZW5kZXJlcik7CiB9CiAKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2Jq
ZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKFdpZGdldCogd2lkZ2V0KQoreworICAgIGlmICghd2lkZ2V0
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmog
PSBnZXQod2lkZ2V0KSkKKyAgICAgICAgcmV0dXJuIG9iajsKKyAgICAKKyAgICBSZWZQdHI8QWNj
ZXNzaWJpbGl0eU9iamVjdD4gbmV3T2JqID0gMDsKKyAgICBpZiAod2lkZ2V0LT5pc0ZyYW1lVmll
dygpKQorICAgICAgICBuZXdPYmogPSBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6Y3JlYXRlKHN0
YXRpY19jYXN0PFNjcm9sbFZpZXcqPih3aWRnZXQpKTsKKyAgICBlbHNlIGlmICh3aWRnZXQtPmlz
U2Nyb2xsYmFyKCkpCisgICAgICAgIG5ld09iaiA9IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmNy
ZWF0ZShzdGF0aWNfY2FzdDxTY3JvbGxiYXIqPih3aWRnZXQpKTsKKyAgICAgICAgCisgICAgZ2V0
QVhJRChuZXdPYmouZ2V0KCkpOworICAgIAorICAgIG1fd2lkZ2V0T2JqZWN0TWFwcGluZy5zZXQo
d2lkZ2V0LCBuZXdPYmotPmF4T2JqZWN0SUQoKSk7CisgICAgbV9vYmplY3RzLnNldChuZXdPYmot
PmF4T2JqZWN0SUQoKSwgbmV3T2JqKTsgICAgCisgICAgYXR0YWNoV3JhcHBlcihuZXdPYmouZ2V0
KCkpOworICAgIHJldHVybiBuZXdPYmouZ2V0KCk7Cit9CisgICAgCiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQog
ewogICAgIGlmICghcmVuZGVyZXIpCkBAIC0yNDcsNiArMjg0LDExIEBAIEFjY2Vzc2liaWxpdHlP
YmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE8KICAgICBhdHRhY2hXcmFwcGVyKG5ld09iai5nZXQo
KSk7CiAgICAgcmV0dXJuIG5ld09iai5nZXQoKTsKIH0KKyAgICAKK0FjY2Vzc2liaWxpdHlPYmpl
Y3QqIEFYT2JqZWN0Q2FjaGU6OnJvb3RPYmplY3QoKQoreworICAgIHJldHVybiBnZXRPckNyZWF0
ZShtX2RvY3VtZW50LT52aWV3KCkpOworfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVj
dENhY2hlOjpnZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSByb2xlKQogewpAQCAtMjc1LDkg
KzMxNyw2IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE8KICAgICBj
YXNlIE1lbnVMaXN0T3B0aW9uUm9sZToKICAgICAgICAgb2JqID0gQWNjZXNzaWJpbGl0eU1lbnVM
aXN0T3B0aW9uOjpjcmVhdGUoKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTY3JvbGxCYXJS
b2xlOgotICAgICAgICBvYmogPSBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpjcmVhdGUoKTsKLSAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgb2JqID0gMDsKICAgICB9CkBAIC0z
MjMsNiArMzYyLDE3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cmVtb3ZlKFJlbmRlck9iamVjdCoK
ICAgICBtX3JlbmRlck9iamVjdE1hcHBpbmcucmVtb3ZlKHJlbmRlcmVyKTsKIH0KIAordm9pZCBB
WE9iamVjdENhY2hlOjpyZW1vdmUoV2lkZ2V0KiB2aWV3KQoreworICAgIGlmICghdmlldykKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBBWElEIGF4SUQgPSBtX3dpZGdldE9iamVjdE1h
cHBpbmcuZ2V0KHZpZXcpOworICAgIHJlbW92ZShheElEKTsKKyAgICBtX3dpZGdldE9iamVjdE1h
cHBpbmcucmVtb3ZlKHZpZXcpOworfQorICAgIAorICAgIAogI2lmICFQTEFURk9STShXSU4pIHx8
IE9TKFdJTkNFKQogQVhJRCBBWE9iamVjdENhY2hlOjpwbGF0Zm9ybUdlbmVyYXRlQVhJRCgpIGNv
bnN0CiB7CkBAIC00NzgsNiArNTI4LDE4IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6bm9kZVRleHRD
aGFuZ2VOb3RpZmkKICNlbmRpZgogCiAjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQorCit2b2lkIEFY
T2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KiB2aWV3KQorewor
ICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gY3JlYXRlIGEgc2Nyb2xsIHZpZXcgZnJvbSB0aGlzIG1ldGhvZCwgb25seSB1cGRhdGUg
YW4gZXhpc3Rpbmcgb25lLgorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbFZpZXdPYmpl
Y3QgPSBnZXQodmlldyk7CisgICAgaWYgKHNjcm9sbFZpZXdPYmplY3QpCisgICAgICAgIHNjcm9s
bFZpZXdPYmplY3QtPnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKK30KKyAgICAKIHZvaWQg
QVhPYmplY3RDYWNoZTo6aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlKFJlbmRlck9iamVjdCAqcmVu
ZGVyZXIpCiB7CiAgICAgaWYgKCFyZW5kZXJlcikKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsMTQgQEAgY2xhc3Mg
V2ViQ29yZVRleHRNYXJrZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRG9jdW1l
bnQ7CiBjbGFzcyBIVE1MQXJlYUVsZW1lbnQ7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKIGNs
YXNzIFJlbmRlck9iamVjdDsKK2NsYXNzIFNjcm9sbFZpZXc7CiBjbGFzcyBWaXNpYmxlUG9zaXRp
b247CitjbGFzcyBXaWRnZXQ7CiAKIHN0cnVjdCBUZXh0TWFya2VyRGF0YSB7CiAgICAgQVhJRCBh
eElEOwpAQCAtNTksMTQgKzYyLDE3IEBAIGVudW0gUG9zdFR5cGUgeyBQb3N0U3luY2hyb25vdXNs
eSwgUG9zdEEKIAogY2xhc3MgQVhPYmplY3RDYWNoZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBw
dWJsaWM6Ci0gICAgQVhPYmplY3RDYWNoZSgpOworICAgIEFYT2JqZWN0Q2FjaGUoY29uc3QgRG9j
dW1lbnQqKTsKICAgICB+QVhPYmplY3RDYWNoZSgpOwogCiAgICAgc3RhdGljIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGZvY3VzZWRVSUVsZW1lbnRGb3JQYWdlKGNvbnN0IFBhZ2UqKTsKIAotICAgIC8v
IHRvIGJlIHVzZWQgd2l0aCByZW5kZXIgb2JqZWN0cwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGdldE9yQ3JlYXRlKFJlbmRlck9iamVjdCopOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJv
b3RPYmplY3QoKTsKICAgICAKKyAgICAvLyBGb3IgQVggb2JqZWN0cyB3aXRoIGVsZW1lbnRzIHRo
YXQgYmFjayB0aGVtLgorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKFJlbmRl
ck9iamVjdCopOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKFdpZGdldCop
OworCiAgICAgLy8gdXNlZCBmb3Igb2JqZWN0cyB3aXRob3V0IGJhY2tpbmcgZWxlbWVudHMKICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSk7CiAg
ICAgCkBAIC03NCw2ICs4MCw3IEBAIHB1YmxpYzoKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBn
ZXQoUmVuZGVyT2JqZWN0Kik7CiAgICAgCiAgICAgdm9pZCByZW1vdmUoUmVuZGVyT2JqZWN0Kik7
CisgICAgdm9pZCByZW1vdmUoV2lkZ2V0Kik7CiAgICAgdm9pZCByZW1vdmUoQVhJRCk7CiAKICAg
ICB2b2lkIGRldGFjaFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdCopOwpAQCAtODgsNiArOTUs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZChSZW5k
ZXJPYmplY3QqIG9sZEZvY3VzZWRSZW5kZXJlciwgUmVuZGVyT2JqZWN0KiBuZXdGb2N1c2VkUmVu
ZGVyZXIpOwogICAgIHZvaWQgaGFuZGxlU2Nyb2xsZWRUb0FuY2hvcihjb25zdCBOb2RlKiBhbmNo
b3JOb2RlKTsKICAgICB2b2lkIGhhbmRsZUFyaWFFeHBhbmRlZENoYW5nZShSZW5kZXJPYmplY3Qq
KTsKKyAgICB2b2lkIGhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3Kik7CiAgICAgCiAg
ICAgc3RhdGljIHZvaWQgZW5hYmxlQWNjZXNzaWJpbGl0eSgpIHsgZ0FjY2Vzc2liaWxpdHlFbmFi
bGVkID0gdHJ1ZTsgfQogICAgIHN0YXRpYyB2b2lkIGVuYWJsZUVuaGFuY2VkVXNlckludGVyZmFj
ZUFjY2Vzc2liaWxpdHkoKSB7IGdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5h
YmxlZCA9IHRydWU7IH0KQEAgLTE0NSw4ICsxNTMsMTAgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQg
bm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0Kiwg
QVhUZXh0Q2hhbmdlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KTsKIAogcHJpdmF0
ZToKKyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5T2JqZWN0PiA+IG1fb2JqZWN0czsKICAgICBIYXNoTWFwPFJlbmRlck9iamVj
dCosIEFYSUQ+IG1fcmVuZGVyT2JqZWN0TWFwcGluZzsKKyAgICBIYXNoTWFwPFdpZGdldCosIEFY
SUQ+IG1fd2lkZ2V0T2JqZWN0TWFwcGluZzsKICAgICBIYXNoU2V0PE5vZGUqPiBtX3RleHRNYXJr
ZXJOb2RlczsKICAgICBzdGF0aWMgYm9vbCBnQWNjZXNzaWJpbGl0eUVuYWJsZWQ7CiAgICAgc3Rh
dGljIGJvb2wgZ0FjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkOwpAQCAt
MTYwLDYgKzE3MCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGZvY3VzZWRJbWFnZU1hcFVJRWxlbWVudChIVE1MQXJlYUVsZW1lbnQqKTsKICAgICAKICAgICBB
WElEIGdldEFYSUQoQWNjZXNzaWJpbGl0eU9iamVjdCopOworICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGdldChXaWRnZXQqKTsKIH07CiAKIGJvb2wgbm9kZUhhc1JvbGUoTm9kZSosIGNvbnN0IFN0
cmluZyYgcm9sZSk7CkBAIC0xNzksNiArMTkwLDcgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNo
ZTo6aGFuZGxlRm9jdXNlZAogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlU2Nyb2xs
ZWRUb0FuY2hvcihjb25zdCBOb2RlKikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpj
b250ZW50Q2hhbmdlZChSZW5kZXJPYmplY3QqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2Fj
aGU6OmhhbmRsZUFyaWFFeHBhbmRlZENoYW5nZShSZW5kZXJPYmplY3QqKSB7IH0KK2lubGluZSB2
b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KikgeyB9
CiAjZW5kaWYKIAogfQpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJ
bWFnZU1hcExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNiwxMSArMTM2LDYgQEAgSW50UmVjdCBBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rOjpl
bGVtZQogICAgIHJldHVybiBtX2FyZWFFbGVtZW50LT5nZXRSZWN0KHJlbmRlcmVyKTsKIH0KICAg
ICAKLUludFNpemUgQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluazo6c2l6ZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGVsZW1lbnRSZWN0KCkuc2l6ZSgpOwotfQotCiBTdHJpbmcgQWNjZXNzaWJpbGl0
eUltYWdlTWFwTGluazo6c3RyaW5nVmFsdWVGb3JNU0FBKCkgY29uc3QKIHsKICAgICByZXR1cm4g
dXJsKCk7CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFw
TGluay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
SW1hZ2VNYXBMaW5rLmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgs
NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nVmFsdWVGb3JNU0FBKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgbmFtZUZvck1TQUEoKSBjb25zdDsKIAotICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRSZWN0IGVsZW1lbnRSZWN0
KCkgY29uc3Q7CiAKIHByaXZhdGU6ICAgIApJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCShyZXZpc2lvbiA3NDk3MykK
KysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1MiwxMSArMTUyLDYgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlM
aXN0Qm94T3B0aW9uOjpzdHJpbgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotSW50U2l6ZSBB
Y2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGVs
ZW1lbnRSZWN0KCkuc2l6ZSgpOwotfQotCiBFbGVtZW50KiBBY2Nlc3NpYmlsaXR5TGlzdEJveE9w
dGlvbjo6YWN0aW9uRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fb3B0aW9uRWxlbWVu
dDsKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlz
dEJveE9wdGlvbi5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUoKSBj
b25zdDsKIAogICAgIHZpcnR1YWwgSW50UmVjdCBlbGVtZW50UmVjdCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBwYXJlbnRPYmplY3QoKSBjb25zdDsKICAgICBib29sIGlzTGlzdEJveE9wdGlvbigpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MzAsNiArNzMwLDEyIEBAIEZyYW1lVmlldyogQWNjZXNzaWJpbGl0eU9iamVjdDo6ZG9jdW1lbnQK
IAogICAgIHJldHVybiBvYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CiB9CisgICAgCit2b2lk
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKQoreworICAg
IGlmICghaGFzQ2hpbGRyZW4oKSkKKyAgICAgICAgYWRkQ2hpbGRyZW4oKTsgICAgCit9CiAKIHZv
aWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2xlYXJDaGlsZHJlbigpCiB7CkBAIC0xMDAxLDYgKzEw
MDcsMzkgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdXBwb3J0c0FSSUFMaQogICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgbGl2ZVJlZ2lvbiA9IGFyaWFMaXZlUmVnaW9uU3RhdHVzKCk7CiAg
ICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGxpdmVSZWdpb24sICJwb2xpdGUiKSB8fCBlcXVh
bElnbm9yaW5nQ2FzZShsaXZlUmVnaW9uLCAiYXNzZXJ0aXZlIik7CiB9CisKK0FjY2Vzc2liaWxp
dHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmVsZW1lbnRBY2Nlc3NpYmlsaXR5SGl0VGVz
dChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7IAorICAgIC8vIFNlbmQgdGhlIGhpdCB0
ZXN0IGJhY2sgaW50byB0aGUgc3ViLWZyYW1lIGlmIG5lY2Vzc2FyeS4KKyAgICBpZiAoaXNBdHRh
Y2htZW50KCkpIHsKKyAgICAgICAgV2lkZ2V0KiB3aWRnZXQgPSB3aWRnZXRGb3JBdHRhY2htZW50
VmlldygpOworICAgICAgICBpZiAod2lkZ2V0ICYmIHdpZGdldC0+aXNGcmFtZVZpZXcoKSkKKyAg
ICAgICAgICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHN0YXRpY19jYXN0
PFNjcm9sbFZpZXcqPih3aWRnZXQpKS0+YWNjZXNzaWJpbGl0eUhpdFRlc3QocG9pbnQpOworICAg
IH0KKworICAgIHJldHVybiBjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3QqPih0aGlzKTsg
Cit9CisgICAgCitBWE9iamVjdENhY2hlKiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpheE9iamVjdENh
Y2hlKCkgY29uc3QKK3sKKyAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKKyAgICBpZiAo
ZG9jKQorICAgICAgICByZXR1cm4gZG9jLT5heE9iamVjdENhY2hlKCk7CisgICAgcmV0dXJuIDA7
Cit9CisgICAgCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpmb2N1
c2VkVUlFbGVtZW50KCkgY29uc3QKK3sKKyAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsK
KyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgUGFnZSogcGFnZSA9
IGRvYy0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgcmV0dXJuIEFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVsZW1lbnRGb3JQYWdlKHBhZ2UpOwor
fQogICAgIAogQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNo
ZWNrYm94T3JSYWRpb1ZhbHVlKCkgY29uc3QKIHsKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAs
NiArMjYwLDggQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNBbmNob3IoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0F0dGFjaG1lbnQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0hlYWRpbmcoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQpAQCAtMzA5LDYgKzMxMSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQnV0dG9uKCkg
Y29uc3QgeyByZXR1cm4gcm9sZVZhbHVlKCkgPT0gQnV0dG9uUm9sZTsgfQogICAgIGJvb2wgaXNM
aXN0SXRlbSgpIGNvbnN0IHsgcmV0dXJuIHJvbGVWYWx1ZSgpID09IExpc3RJdGVtUm9sZTsgfQog
ICAgIGJvb2wgaXNDaGVja2JveE9yUmFkaW8oKSBjb25zdCB7IHJldHVybiBpc0NoZWNrYm94KCkg
fHwgaXNSYWRpb0J1dHRvbigpOyB9CisgICAgYm9vbCBpc1Njcm9sbFZpZXcoKSBjb25zdCB7IHJl
dHVybiByb2xlVmFsdWUoKSA9PSBTY3JvbGxBcmVhUm9sZTsgfQogICAgIAogICAgIHZpcnR1YWwg
Ym9vbCBpc0NoZWNrZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMzMyLDYgKzMzNSw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRUZXh0UmFuZ2VBdHRyaWJ1
dGVzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0VmFs
dWVBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBj
YW5TZXROdW1lcmljVmFsdWUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBjYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGNhblNldFNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGUoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRFeHBhbmRlZEF0dHJpYnV0
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0zNzMsOSArMzc3LDkgQEAgcHVibGljOgog
ICAgIC8vIENhbGxlZCBvbiB0aGUgcm9vdCBBWCBvYmplY3QgdG8gcmV0dXJuIHRoZSBkZWVwZXN0
IGF2YWlsYWJsZSBlbGVtZW50LgogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNj
ZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmKSBjb25zdCB7IHJldHVybiAwOyB9CiAg
ICAgLy8gQ2FsbGVkIG9uIHRoZSBBWCBvYmplY3QgYWZ0ZXIgdGhlIHJlbmRlciB0cmVlIGRldGVy
bWluZXMgd2hpY2ggaXMgdGhlIHJpZ2h0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuCi0gICAg
dmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBlbGVtZW50QWNjZXNzaWJpbGl0eUhpdFRlc3Qo
Y29uc3QgSW50UG9pbnQmKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlP
YmplY3QqPih0aGlzKTsgfQorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogZWxlbWVu
dEFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAKLSAgICB2aXJ0
dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZvY3VzZWRVSUVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBmb2N1c2VkVUlFbGVtZW50
KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZpcnN0Q2hpbGQo
KSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBs
YXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiAwOyB9CkBAIC0zOTEsNyArMzk1LDggQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogdGl0bGVVSUVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBib29sIGV4cG9zZXNUaXRsZVVJRWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNvcnJlc3BvbmRpbmdDb250cm9sRm9yTGFiZWxFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gMDsg
fQotCisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzY3JvbGxCYXIoQWNjZXNzaWJp
bGl0eU9yaWVudGF0aW9uKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgCiAgICAgdmlydHVhbCBB
Y2Nlc3NpYmlsaXR5Um9sZSBhcmlhUm9sZUF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIFVua25v
d25Sb2xlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUHJlc2VudGF0aW9uYWxDaGlsZE9mQXJpYVJv
bGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBhcmlhUm9sZUhh
c1ByZXNlbnRhdGlvbmFsQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtNDAy
LDcgKzQwNyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBhcmlhRGVzY3JpYmVkQnlB
dHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgU3RyaW5n
IGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CiAK
LSAgICB2aXJ0dWFsIEFYT2JqZWN0Q2FjaGUqIGF4T2JqZWN0Q2FjaGUoKSBjb25zdCB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCBBWE9iamVjdENhY2hlKiBheE9iamVjdENhY2hlKCkgY29uc3Q7
CiAgICAgQVhJRCBheE9iamVjdElEKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQogICAgIHZvaWQg
c2V0QVhPYmplY3RJRChBWElEIGF4T2JqZWN0SUQpIHsgbV9pZCA9IGF4T2JqZWN0SUQ7IH0KICAg
ICAKQEAgLTQxMSw3ICs0MTYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBFbGVtZW50KiBhY3Rp
b25FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgSW50UmVjdCBib3Vu
ZGluZ0JveFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KCk7IH0KICAgICB2aXJ0dWFsIElu
dFJlY3QgZWxlbWVudFJlY3QoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBJbnRTaXplIHNpemUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBl
bGVtZW50UmVjdCgpLnNpemUoKTsgfQogICAgIHZpcnR1YWwgSW50UG9pbnQgY2xpY2tQb2ludCgp
IGNvbnN0OwogCiAgICAgdmlydHVhbCBQbGFpblRleHRSYW5nZSBzZWxlY3RlZFRleHRSYW5nZSgp
IGNvbnN0IHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0KQEAgLTQ0Miw2ICs0NDcsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkVGV4dChjb25zdCBTdHJpbmcmKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRUZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0
UmFuZ2UmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJikgeyB9
CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGZsb2F0KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
c2V0U2VsZWN0ZWQoYm9vbCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkUm93cyhB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSB7IH0KICAgICAKQEAgLTQ1OSw3ICs0NjUsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkcmVuKCkgeyB9CiAgICAgdmlydHVh
bCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0
dWFsIGJvb2wgaGFzQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2hhdmVDaGlsZHJlbjsgfQot
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2VsZWN0ZWRDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgdmlzaWJsZUNoaWxkcmVuKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCB0YWJDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3ImKSB7IH0KSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MzQsNyArNDM0LDE1IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5k
ZXIKICAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7CiAgICAgfQogICAgIAotICAgIHJldHVybiBh
eE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlclBhcmVudE9iamVjdCgpKTsKKyAgICBS
ZW5kZXJPYmplY3QqIHBhcmVudE9iaiA9IHJlbmRlclBhcmVudE9iamVjdCgpOworICAgIGlmIChw
YXJlbnRPYmopCisgICAgICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHBh
cmVudE9iaik7CisgICAgCisgICAgLy8gV2ViQXJlYSdzIHBhcmVudCBzaG91bGQgYmUgdGhlIHNj
cm9sbCB2aWV3IGNvbnRhaW5pbmcgaXQuCisgICAgaWYgKGlzV2ViQXJlYSgpKQorICAgICAgICBy
ZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShtX3JlbmRlcmVyLT5mcmFtZSgpLT52
aWV3KCkpOworICAgIAorICAgIHJldHVybiAwOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmlzV2ViQXJlYSgpIGNvbnN0CkBAIC0yMzE2LDEyICsyMzI0LDYgQEAgV2lkZ2V0
KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp3aWRnZQogICAgIHJldHVybiB0b1JlbmRlcldp
ZGdldChtX3JlbmRlcmVyKS0+d2lkZ2V0KCk7CiB9CiAKLUFYT2JqZWN0Q2FjaGUqIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmF4T2JqZWN0Q2FjaGUoKSBjb25zdAotewotICAgIEFTU0VSVCht
X3JlbmRlcmVyKTsKLSAgICByZXR1cm4gbV9yZW5kZXJlci0+ZG9jdW1lbnQoKS0+YXhPYmplY3RD
YWNoZSgpOwotfQotCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjphY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1hZ2VNYXAoSFRNTE1hcEVsZW1lbnQqIG1hcCkg
Y29uc3QKIHsKICAgICAvLyBmaW5kIGFuIGltYWdlIHRoYXQgaXMgdXNpbmcgdGhpcyBtYXAKQEAg
LTI3MzksOCArMjc0MSw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5k
ZXIKICAgICAKICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckJveChtX3JlbmRlcmVy
KS0+bGF5ZXIoKTsKICAgICAgCi0gICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVx
dWVzdDo6UmVhZE9ubHkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0VGVzdFJlcXVl
c3Q6OkFjdGl2ZSk7CisgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6
UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlKTsKICAgICBIaXRUZXN0UmVzdWx0IGhp
dFRlc3RSZXN1bHQgPSBIaXRUZXN0UmVzdWx0KHBvaW50KTsKICAgICBsYXllci0+aGl0VGVzdChy
ZXF1ZXN0LCBoaXRUZXN0UmVzdWx0KTsKICAgICBpZiAoIWhpdFRlc3RSZXN1bHQuaW5uZXJOb2Rl
KCkpCkBAIC0yNzc1LDE1ICsyNzc2LDYgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJp
bGl0eVJlbmRlcgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUFjY2Vzc2liaWxpdHlPYmplY3Qq
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmZvY3VzZWRVSUVsZW1lbnQoKSBjb25zdAotewot
ICAgIFBhZ2UqIHBhZ2UgPSBtX3JlbmRlcmVyLT5kb2N1bWVudCgpLT5wYWdlKCk7Ci0gICAgaWYg
KCFwYWdlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBBWE9iamVjdENhY2hlOjpm
b2N1c2VkVUlFbGVtZW50Rm9yUGFnZShwYWdlKTsKLX0KLQogYm9vbCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpzaG91bGRGb2N1c0FjdGl2ZURlc2NlbmRhbnQoKSBjb25zdAogewogICAgIHN3
aXRjaCAoYXJpYVJvbGVBdHRyaWJ1dGUoKSkgewpAQCAtMzMxNSw4ICszMzA3LDcgQEAgdm9pZCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp1cGRhdGVDaAogICAgIGlmIChuZWVkc1RvVXBkYXRl
Q2hpbGRyZW4oKSkKICAgICAgICAgY2xlYXJDaGlsZHJlbigpOyAgICAgICAgCiAgICAgCi0gICAg
aWYgKCFoYXNDaGlsZHJlbigpKQotICAgICAgICBhZGRDaGlsZHJlbigpOyAgICAKKyAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojp1cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCk7CiB9CiAgICAgCiBj
b25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNoaWxkcmVuKCkKQEAgLTMzNTUsNiArMzM0NiwxMyBA
QCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZENoaWxkCiAgICAgICAgIH0KICAg
ICB9CiAgICAgCisgICAgLy8gRnJhbWVWaWV3J3MgbmVlZCB0byBiZSBpbnNlcnRlZCBpbnRvIHRo
ZSBBWCBoaWVyYXJjaHkgd2hlbiBlbmNvdW50ZXJlZC4KKyAgICBpZiAoaXNBdHRhY2htZW50KCkp
IHsKKyAgICAgICAgV2lkZ2V0KiB3aWRnZXQgPSB3aWRnZXRGb3JBdHRhY2htZW50VmlldygpOwor
ICAgICAgICBpZiAod2lkZ2V0ICYmIHdpZGdldC0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgICAg
IG1fY2hpbGRyZW4uYXBwZW5kKGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUod2lkZ2V0KSk7
CisgICAgfQorICAgIAogICAgIC8vIGZvciBhIFJlbmRlckltYWdlLCBhZGQgdGhlIDxhcmVhPiBl
bGVtZW50cyBhcyBpbmRpdmlkdWFsIGFjY2Vzc2liaWxpdHkgb2JqZWN0cwogICAgIFJlbmRlckJv
eE1vZGVsT2JqZWN0KiBjc3NCb3ggPSByZW5kZXJCb3hNb2RlbE9iamVjdCgpOwogICAgIGlmIChj
c3NCb3ggJiYgY3NzQm94LT5pc1JlbmRlckltYWdlKCkpIHsKSW5kZXg6IFdlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkocmV2aXNpb24gNzQ5
NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
aW50IGxheW91dENvdW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgZXN0aW1hdGVkTG9h
ZGluZ1Byb2dyZXNzKCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBmb2N1c2VkVUlFbGVtZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3Q7CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBsYXN0Q2hpbGQoKSBjb25zdDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IHByZXZpb3VzU2libGluZygpIGNvbnN0OwpAQCAtMTQ3LDggKzE0Niw2IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgYXJpYVJvbGVIYXNQcmVzZW50YXRpb25hbENoaWxkcmVuKCkgY29uc3Q7
CiAgICAgdm9pZCB1cGRhdGVBY2Nlc3NpYmlsaXR5Um9sZSgpOwogICAgIAotICAgIHZpcnR1YWwg
QVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSgpIGNvbnN0OwotCiAgICAgLy8gU2hvdWxkIGJl
IGNhbGxlZCBvbiB0aGUgcm9vdCBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0byBraWNrIG9mZiBhIGhp
dCB0ZXN0LgogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eUhp
dFRlc3QoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oIgorCisjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgor
I2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVP
d25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJSZW5kZXJQ
YXJ0LmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgCitBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoU2Ny
b2xsVmlldyogdmlldykKKyAgICA6IG1fc2Nyb2xsVmlldyh2aWV3KQoreworfQorCitQYXNzUmVm
UHRyPEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3PiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6Y3Jl
YXRlKFNjcm9sbFZpZXcqIHZpZXcpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3Np
YmlsaXR5U2Nyb2xsVmlldyh2aWV3KSk7Cit9CisgICAgCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6c2Nyb2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlv
biBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7CisgICAg
Y2FzZSBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25WZXJ0aWNhbDoKKyAgICAgICAgcmV0dXJuIG1f
dmVydGljYWxTY3JvbGxiYXIgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpIDogMDsKKyAgICBj
YXNlIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkhvcml6b250YWw6CisgICAgICAgIHJldHVybiBt
X2hvcml6b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCkgOiAwOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gMDsKK30KKworY29uc3QgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6
Y2hpbGRyZW4oKQoreworICAgIGlmICghbV9oYXZlQ2hpbGRyZW4pCisgICAgICAgIGFkZENoaWxk
cmVuKCk7CisgICAgcmV0dXJuIG1fY2hpbGRyZW47Cit9CisgICAgCit2b2lkIEFjY2Vzc2liaWxp
dHlTY3JvbGxWaWV3Ojp1cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAobV9z
Y3JvbGxWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIW1faG9yaXpvbnRhbFNjcm9sbGJh
cikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gYWRkQ2hpbGRTY3JvbGxiYXIobV9z
Y3JvbGxWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgIGVsc2UgaWYgKCFtX3Njcm9s
bFZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKSAmJiBtX2hvcml6b250YWxTY3JvbGxiYXIpIHsK
KyAgICAgICAgcmVtb3ZlQ2hpbGRTY3JvbGxiYXIobV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgp
KTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gMDsKKyAgICB9CisKKyAgICBpZiAo
bV9zY3JvbGxWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFy
KQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gYWRkQ2hpbGRTY3JvbGxiYXIobV9zY3Jv
bGxWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICBlbHNlIGlmICghbV9zY3JvbGxWaWV3
LT52ZXJ0aWNhbFNjcm9sbGJhcigpICYmIG1fdmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAg
cmVtb3ZlQ2hpbGRTY3JvbGxiYXIobV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQoKSk7CisgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXIgPSAwOworICAgIH0KK30KKyAgICAKK3ZvaWQgQWNjZXNzaWJp
bGl0eVNjcm9sbFZpZXc6OnJlbW92ZUNoaWxkU2Nyb2xsYmFyKEFjY2Vzc2liaWxpdHlPYmplY3Qq
IHNjcm9sbGJhcikKK3sKKyAgICBzaXplX3QgcG9zID0gbV9jaGlsZHJlbi5maW5kKHNjcm9sbGJh
cik7CisgICAgaWYgKHBvcyAhPSBXVEY6Om5vdEZvdW5kKQorICAgICAgICBtX2NoaWxkcmVuLnJl
bW92ZShwb3MpOworfQorICAgIAorQWNjZXNzaWJpbGl0eVNjcm9sbGJhciogQWNjZXNzaWJpbGl0
eVNjcm9sbFZpZXc6OmFkZENoaWxkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQorewor
ICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBBY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyKiBzY3JvbGxCYXJPYmplY3QgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmls
aXR5U2Nyb2xsYmFyKj4oYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShzY3JvbGxiYXIpKTsK
KyAgICBzY3JvbGxCYXJPYmplY3QtPnNldFBhcmVudCh0aGlzKTsKKyAgICBtX2NoaWxkcmVuLmFw
cGVuZChzY3JvbGxCYXJPYmplY3QpOworICAgIHJldHVybiBzY3JvbGxCYXJPYmplY3Q7Cit9Cisg
ICAgICAgIAordm9pZCBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6YWRkQ2hpbGRyZW4oKQorewor
ICAgIEFTU0VSVCghbV9oYXZlQ2hpbGRyZW4pOworICAgIG1faGF2ZUNoaWxkcmVuID0gdHJ1ZTsK
KyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB3ZWJBcmVhID0gd2ViQXJlYU9iamVjdCgp
OworICAgIGlmICh3ZWJBcmVhKQorICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZCh3ZWJBcmVhKTsK
KyAgICAKKyAgICB1cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCk7Cit9CisKK0FjY2Vzc2liaWxp
dHlPYmplY3QqIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Ojp3ZWJBcmVhT2JqZWN0KCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fc2Nyb2xsVmlldy0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgCisgICAgRG9jdW1lbnQqIGRvYyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KG1f
c2Nyb2xsVmlldy5nZXQoKSktPmZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2MgfHwg
IWRvYy0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYXhPYmpl
Y3RDYWNoZSgpLT5nZXRPckNyZWF0ZShkb2MtPnJlbmRlcmVyKCkpOworfQorCisgICAgCitBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6YWNjZXNzaWJpbGl0eUhp
dFRlc3QoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIHdlYkFyZWEgPSB3ZWJBcmVhT2JqZWN0KCk7CisgICAgaWYgKCF3ZWJBcmVhKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmIG1f
aG9yaXpvbnRhbFNjcm9sbGJhci0+ZWxlbWVudFJlY3QoKS5jb250YWlucyhwb2ludCkpCisgICAg
ICAgIHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCk7CisgICAgaWYgKG1fdmVydGlj
YWxTY3JvbGxiYXIgJiYgbV92ZXJ0aWNhbFNjcm9sbGJhci0+ZWxlbWVudFJlY3QoKS5jb250YWlu
cyhwb2ludCkpCisgICAgICAgIHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOworICAg
IAorICAgIHJldHVybiB3ZWJBcmVhLT5hY2Nlc3NpYmlsaXR5SGl0VGVzdChwb2ludCk7Cit9Cisg
ICAgCitEb2N1bWVudCogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6OmRvY3VtZW50KCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fc2Nyb2xsVmlldy0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KG1fc2Nyb2xsVmll
dy5nZXQoKSktPmZyYW1lKCktPmRvY3VtZW50KCk7Cit9CisKK0ludFJlY3QgQWNjZXNzaWJpbGl0
eVNjcm9sbFZpZXc6OmVsZW1lbnRSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxW
aWV3LT5mcmFtZVJlY3QoKTsKK30KKworQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0
eVNjcm9sbFZpZXc6OnBhcmVudE9iamVjdCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Njcm9sbFZp
ZXctPmlzRnJhbWVWaWV3KCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIEhUTUxGcmFt
ZU93bmVyRWxlbWVudCogb3duZXIgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihtX3Njcm9sbFZp
ZXcuZ2V0KCkpLT5mcmFtZSgpLT5vd25lckVsZW1lbnQoKTsKKyAgICBpZiAob3duZXIgJiYgb3du
ZXItPnJlbmRlclBhcnQoKSkKKyAgICAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JD
cmVhdGUob3duZXItPnJlbmRlclBhcnQoKS0+cGFyZW50KCkpOworICAgIAorICAgIHJldHVybiAw
OworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAgICAKSW5kZXg6IFdlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXdf
aAorI2RlZmluZSBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlld19oCisKKyNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5T2JqZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIEFjY2Vz
c2liaWxpdHlTY3JvbGxiYXI7CitjbGFzcyBTY3JvbGxiYXI7CitjbGFzcyBTY3JvbGxWaWV3Owor
ICAgIAorY2xhc3MgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcgOiBwdWJsaWMgQWNjZXNzaWJpbGl0
eU9iamVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVNj
cm9sbFZpZXc+IGNyZWF0ZShTY3JvbGxWaWV3Kik7ICAgIAorICAgIHZpcnR1YWwgQWNjZXNzaWJp
bGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gU2Nyb2xsQXJlYVJvbGU7IH0KKyAg
ICBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxWaWV3Lmdl
dCgpOyB9CisgICAgCitwcml2YXRlOgorICAgIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KFNjcm9s
bFZpZXcqKTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0
eVNjcm9sbFZpZXcoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBzY3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRyZW4oKTsKKyAgICB2aXJ0dWFsIERvY3VtZW50KiBk
b2N1bWVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNz
aWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0
IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4oKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOworICAgIAorICAgIHZpcnR1YWwgSW50UmVj
dCBlbGVtZW50UmVjdCgpIGNvbnN0OworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCog
cGFyZW50T2JqZWN0KCkgY29uc3Q7CisgICAgCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogd2Vi
QXJlYU9iamVjdCgpIGNvbnN0OworICAgIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIqIGFkZENoaWxk
U2Nyb2xsYmFyKFNjcm9sbGJhciopOworICAgIHZvaWQgcmVtb3ZlQ2hpbGRTY3JvbGxiYXIoQWNj
ZXNzaWJpbGl0eU9iamVjdCopOworICAgIAorICAgIFJlZlB0cjxTY3JvbGxWaWV3PiBtX3Njcm9s
bFZpZXc7CisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG1faG9yaXpvbnRhbFNjcm9s
bGJhcjsKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gbV92ZXJ0aWNhbFNjcm9sbGJh
cjsKK307CisKK2lubGluZSBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyogdG9BY2Nlc3NpYmlsaXR5
U2Nyb2xsVmlldyhBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFv
YmplY3QgfHwgb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpOworICAgIGlmICgh
b2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyo+KG9i
amVjdCk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBY2Nl
c3NpYmlsaXR5U2Nyb2xsVmlld19oCisKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5U2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5jcHAJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSwyNSArMjksNzcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBY2Nl
c3NpYmlsaXR5U2Nyb2xsYmFyLmgiCiAKKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgogI2luY2x1ZGUgIlNj
cm9sbGJhci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUFjY2Vzc2liaWxpdHlTY3JvbGxi
YXI6OkFjY2Vzc2liaWxpdHlTY3JvbGxiYXIoKQotICAgIDogbV9zY3JvbGxiYXIoMCkKK0FjY2Vz
c2liaWxpdHlTY3JvbGxiYXI6OkFjY2Vzc2liaWxpdHlTY3JvbGxiYXIoU2Nyb2xsYmFyICpzY3Jv
bGxiYXIpCisgICAgOiBtX3Njcm9sbGJhcihzY3JvbGxiYXIpCisgICAgLCBtX3BhcmVudCgwKQog
eworICAgIEFTU0VSVChzY3JvbGxiYXIpOwogfQogCi1QYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlT
Y3JvbGxiYXI+IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmNyZWF0ZSgpCitQYXNzUmVmUHRyPEFj
Y2Vzc2liaWxpdHlTY3JvbGxiYXI+IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmNyZWF0ZShTY3Jv
bGxiYXIgKnNjcm9sbGJhcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxp
dHlTY3JvbGxiYXIpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eVNjcm9s
bGJhcihzY3JvbGxiYXIpKTsKIH0KKyAgICAKK0ludFJlY3QgQWNjZXNzaWJpbGl0eVNjcm9sbGJh
cjo6ZWxlbWVudFJlY3QoKSBjb25zdAoreworICAgIGlmICghbV9zY3JvbGxiYXIpCisgICAgICAg
IHJldHVybiBJbnRSZWN0KCk7CisgICAgCisgICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5mcmFtZVJl
Y3QoKTsKK30KKyAgICAKK0RvY3VtZW50KiBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpkb2N1bWVu
dCgpIGNvbnN0Cit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gcGFyZW50T2Jq
ZWN0KCk7CisgICAgaWYgKCFwYXJlbnQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBw
YXJlbnQtPmRvY3VtZW50KCk7Cit9CisKK0FjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBBY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyOjpvcmllbnRhdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Njcm9s
bGJhcikKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkhvcml6b250YWw7
CisKKyAgICBpZiAobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9s
bGJhcikKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkhvcml6b250YWw7
CisgICAgaWYgKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFy
KQorICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uVmVydGljYWw7CiAKKyAg
ICByZXR1cm4gQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uSG9yaXpvbnRhbDsKK30KKworYm9vbCBB
Y2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjppc0VuYWJsZWQoKSBjb25zdAoreworICAgIGlmICghbV9z
Y3JvbGxiYXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9zY3JvbGxiYXIt
PmVuYWJsZWQoKTsKK30KKyAgICAKIGZsb2F0IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OnZhbHVl
Rm9yUmFuZ2UoKSBjb25zdAogewogICAgIGlmICghbV9zY3JvbGxiYXIpCiAgICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBtX3Njcm9sbGJhci0+Y3VycmVudFBvcygpOworCisgICAgcmV0dXJu
IG1fc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgLyBtX3Njcm9sbGJhci0+bWF4aW11bSgpOwogfQog
Cit2b2lkIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OnNldFZhbHVlKGZsb2F0IHZhbHVlKQorewor
ICAgIGlmICghbV9zY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmbG9hdCBu
ZXdWYWx1ZSA9IHZhbHVlICogbV9zY3JvbGxiYXItPm1heGltdW0oKTsKKyAgICAKKyAgICBtX3Nj
cm9sbGJhci0+c2V0VmFsdWUobmV3VmFsdWUsIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1h
dG9yKTsgICAgCit9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmgJKHJldmlzaW9uIDc0
OTczKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsMzAgKzM3LDM0IEBAIGNsYXNzIFNjcm9sbGJhcjsKIAogY2xh
c3MgQWNjZXNzaWJpbGl0eVNjcm9sbGJhciA6IHB1YmxpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyPiBj
cmVhdGUoKTsKLQotICAgIHZvaWQgc2V0U2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7
IG1fc2Nyb2xsYmFyID0gc2Nyb2xsYmFyOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QWNjZXNz
aWJpbGl0eVNjcm9sbGJhcj4gY3JlYXRlKFNjcm9sbGJhciopOwogCiAgICAgU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGJhci5nZXQoKTsgfQotCi0gICAgdmly
dHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KLQotICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gU2Nyb2xsQmFyUm9sZTsgfQotCi0gICAgdmlydHVhbCBmbG9hdCB2YWx1ZUZvclJhbmdl
KCkgY29uc3Q7Ci0KKyAgICB2b2lkIHNldFBhcmVudChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJl
bnQpIHsgbV9wYXJlbnQgPSBwYXJlbnQ7IH0KKyAgICAKIHByaXZhdGU6Ci0gICAgQWNjZXNzaWJp
bGl0eVNjcm9sbGJhcigpOworICAgIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIoU2Nyb2xsYmFyKik7
CiAKICAgICB2aXJ0dWFsIGJvb2wgYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGNhblNldFZhbHVlQXR0cmlidXRlKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBjYW5TZXROdW1lcmljVmFsdWUo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICAvLyBUaGVzZSBzaG91bGQgbmV2ZXIgYmUg
cmVhY2hlZCBzaW5jZSB0aGUgQWNjZXNzaWJpbGl0eVNjcm9sbGJhciBpcyBub3QgcGFydCBvZgot
ICAgIC8vIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUuCi0gICAgdmlydHVhbCBJbnRTaXplIHNpemUo
KSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gSW50U2l6ZSgpOyB9Ci0gICAg
dmlydHVhbCBJbnRSZWN0IGVsZW1lbnRSZWN0KCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgcmV0dXJuIEludFJlY3QoKTsgfQotICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCog
cGFyZW50T2JqZWN0KCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KKyAgICB2aXJ0dWFsIEludFJlY3QgZWxlbWVu
dFJlY3QoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGVW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIFNjcm9sbEJhclJvbGU7IH0KKyAgICB2aXJ0dWFsIEFjY2Vz
c2liaWxpdHlPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgRG9j
dW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzRW5hYmxlZCgpIGNv
bnN0OworICAgIAorICAgIC8vIEFzc3VtZXMgZmxvYXQgWzAuLjFdCisgICAgdmlydHVhbCB2b2lk
IHNldFZhbHVlKGZsb2F0KTsKKyAgICB2aXJ0dWFsIGZsb2F0IHZhbHVlRm9yUmFuZ2UoKSBjb25z
dDsKIAogICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fc2Nyb2xsYmFyOworICAgIEFjY2Vzc2liaWxp
dHlPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG1f
cGFyZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdE1hYy5tbQkocmV2aXNp
b24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmpl
Y3RNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDE2ICsyOSwyMyBAQAogI2lmIEhBVkUoQUND
RVNTSUJJTElUWSkKIAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIuaCIKKyNp
bXBvcnQgIldpZGdldC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgQWNjZXNzaWJp
bGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eUlnbm9yZUF0dGFjaG1lbnQoKSBjb25zdAogewotICAg
IE5TVmlldyogYXR0YWNobWVudCA9IFt3cmFwcGVyKCkgYXR0YWNobWVudFZpZXddOwotICAgIGlm
ICghYXR0YWNobWVudCkKKyAgICAvLyBGcmFtZVZpZXcgYXR0YWNobWVudHMgYXJlIG5vdyBoYW5k
bGVkIGJ5IEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LCAKKyAgICAvLyBzbyBpZiB0aGlzIGlzIHRo
ZSBhdHRhY2htZW50LCBpdCBzaG91bGQgYmUgaWdub3JlZC4KKyAgICBXaWRnZXQqIHdpZGdldCA9
IDA7CisgICAgaWYgKGlzQXR0YWNobWVudCgpICYmICh3aWRnZXQgPSB3aWRnZXRGb3JBdHRhY2ht
ZW50VmlldygpKSAmJiB3aWRnZXQtPmlzRnJhbWVWaWV3KCkpCiAgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKFt3cmFwcGVyKCkgYXR0YWNobWVudFZpZXddKQorICAgICAgICByZXR1cm4g
W1t3cmFwcGVyKCkgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRdOwogICAg
IAotICAgIHJldHVybiBbYXR0YWNobWVudCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkXTsKKyAgICAv
LyBBdHRhY2htZW50cyBhcmUgaWdub3JlZCBieSBkZWZhdWx0ICh1bmxlc3Mgd2UgZGV0ZXJtaW5l
IHRoYXQgd2Ugc2hvdWxkIGV4cG9zZSB0aGVtKS4KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogQWNj
ZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmls
aXR5UGxhdGZvcm1JbmNsdWRlc09iamVjdCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0JKHJl
dmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsNyBA
QAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUxpc3RCb3guaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxp
dHlMaXN0LmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgiCisjaW1wb3J0
ICJBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVRhYmxl
LmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmgiCiAjaW1wb3J0ICJBY2Nlc3Np
YmlsaXR5VGFibGVSb3cuaCIKQEAgLTQzLDYgKzQ0LDcgQEAKICNpbXBvcnQgIkNvbG9yTWFjLmgi
CiAjaW1wb3J0ICJFZGl0b3JDbGllbnQuaCIKICNpbXBvcnQgIkZyYW1lLmgiCisjaW1wb3J0ICJG
cmFtZUxvYWRlckNsaWVudC5oIgogI2ltcG9ydCAiSFRNTEFuY2hvckVsZW1lbnQuaCIKICNpbXBv
cnQgIkhUTUxBcmVhRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTEZyYW1lT3duZXJFbGVtZW50Lmgi
CkBAIC01Myw2ICs1NSw3IEBACiAjaW1wb3J0ICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2ltcG9y
dCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVuZGVyV2lkZ2V0LmgiCisjaW1wb3J0ICJTY3Jv
bGxWaWV3LmgiCiAjaW1wb3J0ICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW1wb3J0ICJTaW1w
bGVGb250RGF0YS5oIgogI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCkBAIC03MDQsNiArNzA3LDcg
QEAgLSAoTlNBcnJheSopYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzCiAgICAgc3RhdGljIE5T
QXJyYXkqIG91dGxpbmVBdHRycyA9IG5pbDsKICAgICBzdGF0aWMgTlNBcnJheSogb3V0bGluZVJv
d0F0dHJzID0gbmlsOwogICAgIHN0YXRpYyBOU0FycmF5KiBidXR0b25BdHRycyA9IG5pbDsKKyAg
ICBzdGF0aWMgTlNBcnJheSogc2Nyb2xsVmlld0F0dHJzID0gbmlsOwogICAgIE5TTXV0YWJsZUFy
cmF5KiB0ZW1wQXJyYXk7CiAgICAgaWYgKGF0dHJpYnV0ZXMgPT0gbmlsKSB7CiAgICAgICAgIGF0
dHJpYnV0ZXMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czogTlNBY2Nlc3NpYmls
aXR5Um9sZUF0dHJpYnV0ZSwKQEAgLTk0NCw2ICs5NDgsMTQgQEAgLSAoTlNBcnJheSopYWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZU5hbWVzCiAgICAgICAgIG91dGxpbmVSb3dBdHRycyA9IFtbTlNBcnJh
eSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOwogICAgICAgICBbdGVtcEFycmF5IHJl
bGVhc2VdOwogICAgIH0KKyAgICBpZiAoc2Nyb2xsVmlld0F0dHJzID09IG5pbCkgeworICAgICAg
ICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJp
YnV0ZXNdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlDb250
ZW50c0F0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJp
bGl0eUhvcml6b250YWxTY3JvbGxCYXJBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFk
ZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbFNjcm9sbEJhckF0dHJpYnV0ZV07CisgICAg
ICAgIHNjcm9sbFZpZXdBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1w
QXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KICAgICAKICAgICBO
U0FycmF5ICpvYmplY3RBdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKICAgICAKQEAgLTEwMTEsNiAr
MTAyMyw5IEBAIC0gKE5TQXJyYXkqKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcwogICAgIGVs
c2UgaWYgKG1fb2JqZWN0LT5pc01lbnVJdGVtKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMg
PSBtZW51SXRlbUF0dHJzOwogCisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzU2Nyb2xsVmlldygp
KQorICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gc2Nyb2xsVmlld0F0dHJzOworICAgIAogICAg
IE5TQXJyYXkgKmFkZGl0aW9uYWxBdHRyaWJ1dGVzID0gW3NlbGYgYWRkaXRpb25hbEFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVOYW1lc107CiAgICAgaWYgKFthZGRpdGlvbmFsQXR0cmlidXRlcyBjb3Vu
dF0pCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBbb2JqZWN0QXR0cmlidXRlcyBhcnJheUJ5
QWRkaW5nT2JqZWN0c0Zyb21BcnJheTphZGRpdGlvbmFsQXR0cmlidXRlc107CkBAIC0xMDM0LDYg
KzEwNDksMTQgQEAgLSAoTlNBcnJheSopcmVuZGVyV2lkZ2V0Q2hpbGRyZW4KICAgICByZXR1cm4g
Wyh3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTog
TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdOwogfQogCistIChpZClyZW1vdGVBY2Nl
c3NpYmlsaXR5UGFyZW50T2JqZWN0Cit7CisgICAgaWYgKCFtX29iamVjdCB8fCAhbV9vYmplY3Qt
PmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgcmV0dXJuIG1fb2Jq
ZWN0LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmFjY2Vzc2liaWxp
dHlSZW1vdGVPYmplY3QoKTsKK30KKwogc3RhdGljIHZvaWQgY29udmVydFRvVmVjdG9yKE5TQXJy
YXkqIGFycmF5LCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3ImIHZlY3RvcikKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBbYXJyYXkgY291bnRdOwpAQCAt
MTA3NSwxNiArMTA5OCw0MSBAQCAtIChXZWJDb3JlVGV4dE1hcmtlclJhbmdlKil0ZXh0TWFya2Vy
UmFuCiAtIChOU1ZhbHVlKilwb3NpdGlvbgogewogICAgIEludFJlY3QgcmVjdCA9IG1fb2JqZWN0
LT5lbGVtZW50UmVjdCgpOworICAgIE5TUG9pbnQgcG9pbnQ7CiAgICAgCi0gICAgLy8gVGhlIENv
Y29hIGFjY2Vzc2liaWxpdHkgQVBJIHdhbnRzIHRoZSBsb3dlci1sZWZ0IGNvcm5lci4KLSAgICBO
U1BvaW50IHBvaW50ID0gTlNNYWtlUG9pbnQocmVjdC54KCksIHJlY3QuYm90dG9tKCkpOwogICAg
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9vYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7Ci0g
ICAgaWYgKGZyYW1lVmlldykgewotICAgICAgICBOU1ZpZXcqIHZpZXcgPSBmcmFtZVZpZXctPmRv
Y3VtZW50VmlldygpOwotICAgICAgICBwb2ludCA9IFtbdmlldyB3aW5kb3ddIGNvbnZlcnRCYXNl
VG9TY3JlZW46IFt2aWV3IGNvbnZlcnRQb2ludDogcG9pbnQgdG9WaWV3Om5pbF1dOworICAgIGlk
IHJlbW90ZVBhcmVudCA9IFtzZWxmIHJlbW90ZUFjY2Vzc2liaWxpdHlQYXJlbnRPYmplY3RdOwor
ICAgIGlmIChyZW1vdGVQYXJlbnQpIHsKKyAgICAgICAgcG9pbnQgPSBOU01ha2VQb2ludChyZWN0
LngoKSwgcmVjdC55KCkpOworICAgICAgICAKKyAgICAgICAgTlNQb2ludCByZW1vdGVQb3NpdGlv
biA9IFtbcmVtb3RlUGFyZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2li
aWxpdHlQb3NpdGlvbkF0dHJpYnV0ZV0gcG9pbnRWYWx1ZV07CisgICAgICAgIE5TU2l6ZSByZW1v
dGVTaXplID0gW1tyZW1vdGVQYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNj
ZXNzaWJpbGl0eVNpemVBdHRyaWJ1dGVdIHNpemVWYWx1ZV07CisKKyAgICAgICAgLy8gR2V0IHRo
ZSB5IHBvc2l0aW9uIG9mIHRoZSBXS1ZpZXcgKHdlIGhhdmUgdG8gc2NyZWVuLWZsaXAgYW5kIGdv
IGZyb20gYm90dG9tIGxlZnQgdG8gdG9wIGxlZnQpLgorICAgICAgICBDR0Zsb2F0IHNjcmVlbkhl
aWdodCA9IFtbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0SW5kZXg6MF0gZnJhbWVdLnNpemUu
aGVpZ2h0OworICAgICAgICByZW1vdGVQb3NpdGlvbi55ID0gKHNjcmVlbkhlaWdodCAtIHJlbW90
ZVBvc2l0aW9uLnkpIC0gcmVtb3RlU2l6ZS5oZWlnaHQ7CisgICAgICAgIAorICAgICAgICBOU1Bv
aW50IHNjcm9sbFBvc2l0aW9uID0gTlNNYWtlUG9pbnQoMCwgMCk7CisgICAgICAgIGlmIChmcmFt
ZVZpZXcgJiYgIW1fb2JqZWN0LT5pc1Njcm9sbGJhcigpICYmICFtX29iamVjdC0+aXNTY3JvbGxW
aWV3KCkpIHsKKyAgICAgICAgICAgIEludFBvaW50IGZyYW1lU2Nyb2xsUG9zID0gZnJhbWVWaWV3
LT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSBOU01ha2VQ
b2ludChmcmFtZVNjcm9sbFBvcy54KCksIGZyYW1lU2Nyb2xsUG9zLnkoKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHBvaW50LnggKz0gcmVtb3RlUG9zaXRpb24ueCAtIHNjcm9sbFBv
c2l0aW9uLng7CisgICAgICAgIC8vIFNldCB0aGUgbmV3IHBvc2l0aW9uLCB3aGljaCBtZWFucyBn
ZXR0aW5nIGJvdHRvbSB5LCBhbmQgdGhlbiBmbGlwcGluZyB0byBzY3JlZW4gY29vcmRpbmF0ZXMu
CisgICAgICAgIHBvaW50LnkgPSBzY3JlZW5IZWlnaHQgLSAocG9pbnQueSArIHJlbW90ZVBvc2l0
aW9uLnkgKyByZWN0LmhlaWdodCgpIC0gc2Nyb2xsUG9zaXRpb24ueSk7CisgICAgfQorICAgIGVs
c2UgeworICAgICAgICAvLyBUaGUgQ29jb2EgYWNjZXNzaWJpbGl0eSBBUEkgd2FudHMgdGhlIGxv
d2VyLWxlZnQgY29ybmVyLgorICAgICAgICBwb2ludCA9IE5TTWFrZVBvaW50KHJlY3QueCgpLCBy
ZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChmcmFtZVZpZXcpIHsKKyAgICAg
ICAgICAgIE5TVmlldyogdmlldyA9IGZyYW1lVmlldy0+ZG9jdW1lbnRWaWV3KCk7CisgICAgICAg
ICAgICBwb2ludCA9IFtbdmlldyB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46IFt2aWV3IGNv
bnZlcnRQb2ludDogcG9pbnQgdG9WaWV3Om5pbF1dOworICAgICAgICB9CiAgICAgfQogCi0gICAg
cmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFBvaW50OiBwb2ludF07CisgICAgcmV0dXJuIFtOU1Zh
bHVlIHZhbHVlV2l0aFBvaW50OnBvaW50XTsKIH0KIAogdHlwZWRlZiBIYXNoTWFwPGludCwgTlNT
dHJpbmcqPiBBY2Nlc3NpYmlsaXR5Um9sZU1hcDsKQEAgLTEzOTAsNiArMTQzOCwyNyBAQCAtIChO
U1N0cmluZyopcm9sZURlc2NyaXB0aW9uCiAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVJvbGVE
ZXNjcmlwdGlvbihOU0FjY2Vzc2liaWxpdHlVbmtub3duUm9sZSwgbmlsKTsKIH0KIAorLSAoaWQp
c2Nyb2xsVmlld1BhcmVudAoreworICAgIGlmICghbV9vYmplY3QgfHwgIW1fb2JqZWN0LT5pc0Fj
Y2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAg
Ly8gSWYgdGhpcyBzY3JvbGwgdmlldyBwcm92aWRlcyBpdCdzIHBhcmVudCBvYmplY3QgKGJlY2F1
c2UgaXQncyBhIHN1Yi1mcmFtZSksIHRoZW4KKyAgICAvLyB3ZSBzaG91bGQgbm90IGZpbmQgdGhl
IHJlbW90ZUFjY2Vzc2liaWxpdHlQYXJlbnQuCisgICAgaWYgKG1fb2JqZWN0LT5wYXJlbnRPYmpl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5U2Nyb2xs
Vmlldyogc2Nyb2xsVmlldyA9IHRvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcobV9vYmplY3QpOwor
ICAgIFNjcm9sbFZpZXcqIHNjcm9sbCA9IHNjcm9sbFZpZXctPnNjcm9sbFZpZXcoKTsKKyAgICBp
ZiAoIXNjcm9sbCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBpZiAoc2Nyb2xsLT5w
bGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm4gc2Nyb2xsLT5wbGF0Zm9ybVdpZGdldCgp
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFtzZWxmIHJlbW90ZUFjY2Vzc2liaWxpdHlQYXJl
bnRPYmplY3RdOworfQorCiAvLyBGSVhNRTogc3BsaXQgdXAgdGhpcyBmdW5jdGlvbiBpbiBhIGJl
dHRlciB3YXkuICAKIC8vIHN1Z2dlc3Rpb25zOiBVc2UgYSBoYXNoIHRhYmxlIHRoYXQgbWFwcyBh
dHRyaWJ1dGUgbmFtZXMgdG8gZnVuY3Rpb24gY2FsbHMsCiAvLyBvciBtYXliZSBwb2ludGVycyB0
byBtZW1iZXIgZnVuY3Rpb25zCkBAIC0xNDA4LDExICsxNDc3LDExIEBAIC0gKGlkKWFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICAgICAgcmV0dXJuIFtzZWxmIHJvbGVEZXNj
cmlwdGlvbl07CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0Fj
Y2Vzc2liaWxpdHlQYXJlbnRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIEZyYW1lVmlldyogZnYg
PSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Kj4obV9vYmplY3QpLT5mcmFt
ZVZpZXdJZlJlbmRlclZpZXcoKTsKLSAgICAgICAgICAgIGlmIChmdikKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZnYtPnBsYXRmb3JtV2lkZ2V0KCk7Ci0gICAgICAgIH0KKworICAgICAgICAvLyBU
aGlzIHdpbGwgcmV0dXJuIHRoZSBwYXJlbnQgb2YgdGhlIEFYV2ViQXJlYSwgaWYgdGhpcyBpcyBh
IHdlYiBhcmVhLgorICAgICAgICBpZCBzY3JvbGxWaWV3UGFyZW50ID0gW3NlbGYgc2Nyb2xsVmll
d1BhcmVudF07CisgICAgICAgIGlmIChzY3JvbGxWaWV3UGFyZW50KQorICAgICAgICAgICAgcmV0
dXJuIHNjcm9sbFZpZXdQYXJlbnQ7CiAgICAgICAgIAogICAgICAgICAvLyBUcmVlIGl0ZW0gKGNo
YW5nZWQgdG8gQVhSb3dzKSBjYW4gb25seSByZXBvcnQgdGhlIHRyZWUgKEFYT3V0bGluZSkgYXMg
aXRzIHBhcmVudC4KICAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsKQEAgLTE0
MjQsNyArMTQ5MywxMCBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3Ry
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJldHVybiBtX29i
amVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCktPndyYXBwZXIoKTsKKyAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgp
OworICAgICAgICBpZiAocGFyZW50KQorICAgICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBl
cigpOworICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSkgewpA
QCAtMTYxMyw2ICsxNjg1LDExIEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZToo
TlNTdHIKIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNz
aWJpbGl0eVdpbmRvd0F0dHJpYnV0ZV0gfHwKICAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxlbWVudEF0dHJpYnV0ZV0pIHsK
KyAgICAgICAgCisgICAgICAgIGlkIHJlbW90ZVBhcmVudCA9IFtzZWxmIHJlbW90ZUFjY2Vzc2li
aWxpdHlQYXJlbnRPYmplY3RdOworICAgICAgICBpZiAocmVtb3RlUGFyZW50KQorICAgICAgICAg
ICAgcmV0dXJuIFtyZW1vdGVQYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmF0dHJp
YnV0ZU5hbWVdOworICAgICAgICAKICAgICAgICAgRnJhbWVWaWV3KiBmdiA9IG1fb2JqZWN0LT5k
b2N1bWVudEZyYW1lVmlldygpOwogICAgICAgICBpZiAoZnYpCiAgICAgICAgICAgICByZXR1cm4g
W2Z2LT5wbGF0Zm9ybVdpZGdldCgpIHdpbmRvd107CkBAIC0xNjQ5LDYgKzE3MjYsMTggQEAgLSAo
aWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29udGVudHMpOwogICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkgeworICAgICAgICAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVu
ID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEEg
c2Nyb2xsVmlldydzIGNvbnRlbnRzIGFyZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgc2Nyb2xsIGJh
cnMuCisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3IgY29udGVudHM7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGlsZHJlblNpemUgPSBj
aGlsZHJlbi5zaXplKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY2hp
bGRyZW5TaXplOyArK2spIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuW2tdLT5pc1Nj
cm9sbGJhcigpKQorICAgICAgICAgICAgICAgICAgICBjb250ZW50cy5hcHBlbmQoY2hpbGRyZW5b
a10pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXko
Y29udGVudHMpOyAgICAgICAgICAgIAorICAgICAgICB9CiAgICAgfSAgICAKICAgICAKICAgICBp
ZiAobV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpIHsKQEAgLTE4NzQsNiArMTk2Mywx
OSBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgICAgIHJl
dHVybiBuaWw7CiAgICAgfQogICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5SG9yaXpvbnRhbFNjcm9sbEJhckF0dHJpYnV0ZV0pIHsKKyAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogc2Nyb2xsQmFyID0gbV9vYmplY3QtPnNjcm9sbEJh
cihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25Ib3Jpem9udGFsKTsKKyAgICAgICAgaWYgKHNjcm9s
bEJhcikKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxCYXItPndyYXBwZXIoKTsKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICB9CisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbFNjcm9sbEJhckF0dHJpYnV0ZV0pIHsKKyAgICAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogc2Nyb2xsQmFyID0gbV9vYmplY3QtPnNjcm9sbEJhcihBY2Nl
c3NpYmlsaXR5T3JpZW50YXRpb25WZXJ0aWNhbCk7CisgICAgICAgIGlmIChzY3JvbGxCYXIpCisg
ICAgICAgICAgICByZXR1cm4gc2Nyb2xsQmFyLT53cmFwcGVyKCk7CisgICAgICAgIHJldHVybiBu
aWw7CisgICAgfQorICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5TGFuZ3VhZ2VBdHRyaWJ1dGVdKSAKICAgICAgICAgcmV0dXJuIG1fb2Jq
ZWN0LT5sYW5ndWFnZSgpOwogICAgIApAQCAtMTk2Nyw2ICsyMDY5LDcgQEAgLSAoaWQpYWNjZXNz
aWJpbGl0eUhpdFRlc3Q6KE5TUG9pbnQpcG9pbgogICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0
QmFja2luZ1N0b3JlXSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAorICAgIG1fb2JqZWN0LT51cGRh
dGVDaGlsZHJlbklmTmVjZXNzYXJ5KCk7CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+
IGF4T2JqZWN0ID0gbV9vYmplY3QtPmFjY2Vzc2liaWxpdHlIaXRUZXN0KEludFBvaW50KHBvaW50
KSk7CiAgICAgaWYgKGF4T2JqZWN0KQogICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VW5p
Z25vcmVkQW5jZXN0b3IoYXhPYmplY3QtPndyYXBwZXIoKSk7CkBAIC0yMjM5LDkgKzIzNDIsMTAg
QEAgLSAodm9pZClhY2Nlc3NpYmlsaXR5U2V0VmFsdWU6KGlkKXZhbHVlIAogICAgICAgICBBU1NF
UlQobnVtYmVyKTsKICAgICAgICAgbV9vYmplY3QtPnNldEZvY3VzZWQoW251bWJlciBpbnRWYWx1
ZV0gIT0gMCk7CiAgICAgfSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
IE5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXSkgewotICAgICAgICBpZiAoIXN0cmluZykK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9vYmplY3QtPnNldFZhbHVlKHN0cmluZyk7
CisgICAgICAgIGlmIChudW1iZXIgJiYgbV9vYmplY3QtPmNhblNldE51bWVyaWNWYWx1ZSgpKQor
ICAgICAgICAgICAgbV9vYmplY3QtPnNldFZhbHVlKFtudW1iZXIgZmxvYXRWYWx1ZV0pOworICAg
ICAgICBlbHNlIGlmIChzdHJpbmcpCisgICAgICAgICAgICBtX29iamVjdC0+c2V0VmFsdWUoc3Ry
aW5nKTsKICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNB
Y2Nlc3NpYmlsaXR5U2VsZWN0ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgIGlmICghbnVtYmVyKQog
ICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MTUsNyArMTkxNSw3
IEBAIEFYT2JqZWN0Q2FjaGUqIERvY3VtZW50OjpheE9iamVjdENhY2hlKCkKICAgICAgICAgcmV0
dXJuIGRvYy0+YXhPYmplY3RDYWNoZSgpOwogICAgIAogICAgIC8vIHRoaXMgaXMgdGhlIHRvcC1s
ZXZlbCBkb2N1bWVudCwgc28gaW5zdGFsbCBhIG5ldyBjYWNoZQotICAgIG1fYXhPYmplY3RDYWNo
ZSA9IG5ldyBBWE9iamVjdENhY2hlOworICAgIG1fYXhPYmplY3RDYWNoZSA9IG5ldyBBWE9iamVj
dENhY2hlKHRoaXMpOwogICAgIHJldHVybiBtX2F4T2JqZWN0Q2FjaGU7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvbG9hZGVyL0VtcHR5
Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzcsNiArMzc3LDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAKICNpZiBQTEFURk9STShNQUMpCisgICAgdmlydHVhbCBSZW1vdGVBWE9iamVjdFJlZiBh
Y2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCkgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgTlND
YWNoZWRVUkxSZXNwb25zZSogd2lsbENhY2hlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNp
Z25lZCBsb25nLCBOU0NhY2hlZFVSTFJlc3BvbnNlKiByZXNwb25zZSkgY29uc3QgeyByZXR1cm4g
cmVzcG9uc2U7IH0KICNlbmRpZgogI2lmIFVTRShDRk5FVFdPUkspCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsMTUgQEAKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lmIFBMQVRG
T1JNKE1BQykKKyNpZmRlZiBfX09CSkNfXyAKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgordHlwZWRlZiBpZCBSZW1vdGVBWE9iamVjdFJlZjsKKyNlbHNlCit0eXBlZGVmIHZvaWQq
IFJlbW90ZUFYT2JqZWN0UmVmOworI2VuZGlmCisjZW5kaWYKKwogdHlwZWRlZiBjbGFzcyBfam9i
amVjdCogam9iamVjdDsKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoX19PQkpDX18p
CkBAIC0yNjUsNiArMjc0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IHZvaWQgcmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wgbGlzdGVuID0gdHJ1ZSkgPSAw
OwogICAgICAgICAKICNpZiBQTEFURk9STShNQUMpCisgICAgICAgIC8vIEFsbG93IGFuIGFjY2Vz
c2liaWxpdHkgb2JqZWN0IHRvIHJldHJpZXZlIGEgRnJhbWUgcGFyZW50IGlmIHRoZXJlJ3Mgbm8g
UGxhdGZvcm1XaWRnZXQuCisgICAgICAgIHZpcnR1YWwgUmVtb3RlQVhPYmplY3RSZWYgYWNjZXNz
aWJpbGl0eVJlbW90ZU9iamVjdCgpID0gMDsKICNpZiBFTkFCTEUoSkFWQV9CUklER0UpCiAgICAg
ICAgIHZpcnR1YWwgam9iamVjdCBqYXZhQXBwbGV0KE5TVmlldyopIHsgcmV0dXJuIDA7IH0KICNl
bmRpZgpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsMTAgQEAgRnJhbWVW
aWV3Ojp+RnJhbWVWaWV3KCkKICAgICAgICAgbV9zY2hlZHVsZWRFdmVudHMuY2xlYXIoKTsKICAg
ICAgICAgbV9lbnF1ZXVlRXZlbnRzID0gMDsKICAgICB9Ci0KKyAgICAKKyAgICBpZiAoQVhPYmpl
Y3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSAmJiBheE9iamVjdENhY2hlKCkpCisgICAg
ICAgIGF4T2JqZWN0Q2FjaGUoKS0+cmVtb3ZlKHRoaXMpOworICAgIAogICAgIHJlc2V0U2Nyb2xs
YmFycygpOwogCiAgICAgLy8gQ3VzdG9tIHNjcm9sbGJhcnMgc2hvdWxkIGFscmVhZHkgYmUgZGVz
dHJveWVkIGF0IHRoaXMgcG9pbnQKQEAgLTI0ODIsNCArMjQ4NSw5IEBAIHZvaWQgRnJhbWVWaWV3
Ojpub3RpZnlXaWRnZXRzSW5BbGxGcmFtZXMKICAgICB9CiB9CiAgICAgCitBWE9iamVjdENhY2hl
KiBGcmFtZVZpZXc6OmF4T2JqZWN0Q2FjaGUoKSBjb25zdAoreworICAgIHJldHVybiBmcmFtZSgp
LT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlRXhpc3RzKCkgPyBmcmFtZSgpLT5kb2N1bWVudCgp
LT5heE9iamVjdENhY2hlKCkgOiAwOworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVTY3JvbGxDb3JuZXIoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3Jv
bGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCk7CiAK
KyAgICB2aXJ0dWFsIEFYT2JqZWN0Q2FjaGUqIGF4T2JqZWN0Q2FjaGUoKSBjb25zdDsKICAgICB2
b2lkIG5vdGlmeVdpZGdldHNJbkFsbEZyYW1lcyhXaWRnZXROb3RpZmljYXRpb24pOwogICAgIAog
ICAgIHN0YXRpYyBkb3VibGUgc0N1cnJlbnRQYWludFRpbWVTdGFtcDsgLy8gdXNlZCBmb3IgZGV0
ZWN0aW5nIGRlY29kZWQgcmVzb3VyY2UgdGhyYXNoIGluIHRoZSBjYWNoZQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbFZpZXcuY3BwCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAKKyNpbmNsdWRlICJBWE9iamVjdENh
Y2hlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRv
dy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgpAQCAtOTYsNiArOTcsOSBAQCB2
b2lkIFNjcm9sbFZpZXc6OnNldEhhc0hvcml6b250YWxTY3JvbGxiCiAgICAgICAgIHJlbW92ZUNo
aWxkKG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKSk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbGJhciA9IDA7CiAgICAgfQorICAgIAorICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3Np
YmlsaXR5RW5hYmxlZCgpICYmIGF4T2JqZWN0Q2FjaGUoKSkKKyAgICAgICAgYXhPYmplY3RDYWNo
ZSgpLT5oYW5kbGVTY3JvbGxiYXJVcGRhdGUodGhpcyk7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6
c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpCkBAIC0xMTEsNiArMTE1LDkgQEAg
dm9pZCBTY3JvbGxWaWV3OjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcgogICAgICAgICByZW1vdmVD
aGlsZChtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhciA9IDA7CiAgICAgfQorICAgIAorICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmls
aXR5RW5hYmxlZCgpICYmIGF4T2JqZWN0Q2FjaGUoKSkKKyAgICAgICAgYXhPYmplY3RDYWNoZSgp
LT5oYW5kbGVTY3JvbGxiYXJVcGRhdGUodGhpcyk7CiB9CiAKICNpZiAhUExBVEZPUk0oR1RLKQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDkgQEAgU2Ny
b2xsYmFyOjpTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbAogCiBTY3JvbGxiYXI6On5TY3Jv
bGxiYXIoKQogeworICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgp
ICYmIGF4T2JqZWN0Q2FjaGUoKSkKKyAgICAgICAgYXhPYmplY3RDYWNoZSgpLT5yZW1vdmUodGhp
cyk7CisgICAgCiAgICAgc3RvcFRpbWVySWZOZWVkZWQoKTsKICAgICAKICAgICBtX3RoZW1lLT51
bnJlZ2lzdGVyU2Nyb2xsYmFyKHRoaXMpOwpAQCAtMTMxLDE1ICsxMzQsOCBAQCB2b2lkIFNjcm9s
bGJhcjo6c2V0U3RlcHMoaW50IGxpbmVTdGVwLCBpCiBib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNj
cm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBm
bG9hdCBtdWx0aXBsaWVyKQogewogI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkKLSAgICBpZiAoQVhP
YmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBpZiAocGFyZW50
KCkgJiYgcGFyZW50KCktPmlzRnJhbWVWaWV3KCkpIHsKLSAgICAgICAgICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+ZnJhbWUoKS0+ZG9j
dW1lbnQoKTsKLSAgICAgICAgICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQtPmF4
T2JqZWN0Q2FjaGUoKTsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIqIGF4T2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVNjcm9sbGJhcio+KGNhY2hlLT5nZXRPckNy
ZWF0ZShTY3JvbGxCYXJSb2xlKSk7Ci0gICAgICAgICAgICBheE9iamVjdC0+c2V0U2Nyb2xsYmFy
KHRoaXMpOwotICAgICAgICAgICAgY2FjaGUtPnBvc3ROb3RpZmljYXRpb24oYXhPYmplY3QsIGRv
Y3VtZW50LCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hhbmdlZCwgdHJ1ZSk7Ci0gICAgICAgIH0K
LSAgICB9CisgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYg
YXhPYmplY3RDYWNoZSgpKQorICAgICAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRp
b24oYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSh0aGlzKSwgMCwgQVhPYmplY3RDYWNoZTo6
QVhWYWx1ZUNoYW5nZWQsIHRydWUpOwogI2VuZGlmCiAKICAgICAvLyBJZ25vcmUgcGVycGVuZGlj
dWxhciBzY3JvbGxzLgpAQCAtNDc1LDcgKzQ3MSwxNiBAQCBib29sIFNjcm9sbGJhcjo6aXNXaW5k
b3dBY3RpdmUoKSBjb25zdAogewogICAgIHJldHVybiBtX2NsaWVudCAmJiBtX2NsaWVudC0+aXNB
Y3RpdmUoKTsKIH0KLSAKKyAgICAKK0FYT2JqZWN0Q2FjaGUqIFNjcm9sbGJhcjo6YXhPYmplY3RD
YWNoZSgpIGNvbnN0Cit7CisgICAgaWYgKCFwYXJlbnQoKSB8fCAhcGFyZW50KCktPmlzRnJhbWVW
aWV3KCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsK
KyAgICByZXR1cm4gZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUoKTsKK30KKwogdm9pZCBTY3JvbGxi
YXI6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHN1cHBy
ZXNzSW52YWxpZGF0aW9uKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJKHJldmlzaW9uIDc0OTcz
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTcx
LDYgKzE3MSw3IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNT
Y3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBBWE9iamVjdENh
Y2hlKiBheE9iamVjdENhY2hlKCkgY29uc3Q7CiAKICAgICBib29sIHNldEN1cnJlbnRQb3MoZmxv
YXQgcG9zLCBTY3JvbGxTb3VyY2Ugc291cmNlKTsKIH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L1dpZGdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgJKHJldmlz
aW9uIDc0OTczKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTAzLDYgKzEwMyw3IEBAIHR5cGVkZWYgUGxhdGZvcm1XaWRnZXQgUGxhdGZvcm1QYWdlQ2xp
ZW4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBWE9iamVjdENhY2hlOwogY2xhc3Mg
Q3Vyc29yOwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBGb250OwpAQCAtMjQ2LDYgKzI0Nyw5IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0
IEludFBvaW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAKKyAgICAvLyBBIG1lYW5zIHRvIGFj
Y2VzcyB0aGUgQVggY2FjaGUgd2hlbiB0aGlzIG9iamVjdCBjYW4gZ2V0IGEgcG9pbnRlciB0byBp
dC4KKyAgICB2aXJ0dWFsIEFYT2JqZWN0Q2FjaGUqIGF4T2JqZWN0Q2FjaGUoKSBjb25zdCB7IHJl
dHVybiAwOyB9CisgICAgCiBwcml2YXRlOgogICAgIHZvaWQgaW5pdChQbGF0Zm9ybVdpZGdldCk7
IC8vIE11c3QgYmUgY2FsbGVkIGJ5IGFsbCBXaWRnZXQgY29uc3RydWN0b3JzIHRvIGluaXRpYWxp
emUgY3Jvc3MtcGxhdGZvcm0gZGF0YS4KIApJbmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1NCBAQAorMjAxMS0wMS0wNCAgQ2hy
aXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdLMjogU3VwcG9ydCBBY2Nlc3NpYmlsaXR5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg1OQorCisg
ICAgICAgICogU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAg
ICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L21hYy9QYWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmFjY2Vzc2liaWxpdHlDaGlsZFRva2VuUmVjZWl2ZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3IGluaXRXaXRoRnJhbWU6Y29udGV4
dFJlZjpwYWdlR3JvdXBSZWY6XSk6CisgICAgICAgICgtW1dLVmlldyBfdXBkYXRlV2luZG93QW5k
Vmlld0ZyYW1lc10pOgorICAgICAgICAoLVtXS1ZpZXcgX3NldEFjY2Vzc2liaWxpdHlDaGlsZFRv
a2VuOl0pOgorICAgICAgICAoLVtXS1ZpZXcgYWNjZXNzaWJpbGl0eUlzSWdub3JlZF0pOgorICAg
ICAgICAoLVtXS1ZpZXcgYWNjZXNzaWJpbGl0eUhpdFRlc3Q6XSk6CisgICAgICAgICgtW1dLVmll
dyBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9tYWMvV0tWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29udGV4dDo6ZW5zdXJlV2ViUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6d2luZG93QW5kVmll
d0ZyYW1lc0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFJlY2Vp
dmVBY2Nlc3NpYmlsaXR5UGFnZVRva2VuKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpzZW5kQWNjZXNzaWJpbGl0eVByZXNlbnRlclRva2VuKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjphY2Nlc3NpYmlsaXR5UmVt
b3RlT2JqZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZCk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6YWNjZXNzaWJpbGl0eVBvc2l0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBsYXRmb3Jt
SW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNlbmRBY2Nlc3NpYmlsaXR5
UHJlc2VudGVyVG9rZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphY2Nlc3NpYmlsaXR5
UmVtb3RlT2JqZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6
OnByZXNlbnRlckFwcGxpY2F0aW9uUGlkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL21hYy9XZWJQ
cm9jZXNzTWFpbk1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc01haW4pOgorCiAy
MDExLTAxLTA0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1dlYlBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIv
U2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NSw2ICs1NSw3IEBAIHZvaWQgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2QK
ICAgICBlbmNvZGVyLT5lbmNvZGUoc2hvdWxkQWx3YXlzVXNlQ29tcGxleFRleHRDb2RlUGF0aCk7
CiAgICAgZW5jb2Rlci0+ZW5jb2RlKGxhbmd1YWdlQ29kZSk7CiAjaWYgUExBVEZPUk0oTUFDKQor
ICAgIGVuY29kZXItPmVuY29kZShwcmVzZW50ZXJBcHBsaWNhdGlvblBpZCk7CiAgICAgZW5jb2Rl
ci0+ZW5jb2RlKG5zVVJMQ2FjaGVQYXRoKTsKICAgICBlbmNvZGVyLT5lbmNvZGUobnNVUkxDYWNo
ZU1lbW9yeUNhcGFjaXR5KTsKICAgICBlbmNvZGVyLT5lbmNvZGUobnNVUkxDYWNoZURpc2tDYXBh
Y2l0eSk7CkBAIC04OSw2ICs5MCw4IEBAIGJvb2wgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
czo6ZGVjb2QKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJzLmxhbmd1YWdlQ29k
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUocGFyYW1ldGVycy5wcmVzZW50ZXJBcHBsaWNhdGlvblBpZCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJzLm5z
VVJMQ2FjaGVQYXRoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKHBhcmFtZXRlcnMubnNVUkxDYWNoZU1lbW9yeUNhcGFjaXR5KSkKSW5kZXg6IFdlYktp
dDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDc0
OTczKQorKysgV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBAIHN0cnVjdCBXZWJQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzIHsKICAgICBTdHJpbmcgbGFuZ3VhZ2VDb2RlOwogCiAjaWYgUExBVEZPUk0oTUFD
KQorICAgIHBpZF90IHByZXNlbnRlckFwcGxpY2F0aW9uUGlkOwogICAgIFN0cmluZyBuc1VSTENh
Y2hlUGF0aDsKICAgICB1aW50NjRfdCBuc1VSTENhY2hlTWVtb3J5Q2FwYWNpdHk7CiAgICAgdWlu
dDY0X3QgbnNVUkxDYWNoZURpc2tDYXBhY2l0eTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1Bh
Z2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJ
KHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJBbGxFZGl0Q29tbWFuZHMoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldEVkaXRDb21tYW5k
U3RhdGUoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludCBzdGF0
ZSkgPSAwOwogI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzaWJpbGl0
eUNoaWxkVG9rZW5SZWNlaXZlZChjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBpbnRlcmNlcHRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50JiwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mLCB1aW50MzJfdCwgdWlu
dDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4mKSA9IDA7CiAjZW5k
aWYKICNpZiBQTEFURk9STShXSU4pCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkocmV2
aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTYyLDYgKzE2Miw3IEBAIHZvaWQgV2ViQ29udGV4dDo6ZW5zdXJlV2ViUHJv
Y2VzcygpCiAgICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gbV9jYWNoZU1vZGVsOwogICAgIHBh
cmFtZXRlcnMubGFuZ3VhZ2VDb2RlID0gZGVmYXVsdExhbmd1YWdlKCk7CiAgICAgcGFyYW1ldGVy
cy5hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5ID0gYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgp
OworICAgIHBhcmFtZXRlcnMucHJlc2VudGVyQXBwbGljYXRpb25QaWQgPSBnZXRwaWQoKTsKICAg
ICBwYXJhbWV0ZXJzLmNsZWFyUmVzb3VyY2VDYWNoZXMgPSBtX2NsZWFyUmVzb3VyY2VDYWNoZXNG
b3JOZXdXZWJQcm9jZXNzOwogICAgIHBhcmFtZXRlcnMuY2xlYXJBcHBsaWNhdGlvbkNhY2hlID0g
bV9jbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JOZXdXZWJQcm9jZXNzOwogICAgIApJbmRleDogV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NCwxMiArNDk0LDEy
IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVXaW5kb3dJc1Zpc2libGUKICAgICBwcm9jZXNz
KCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFdpbmRvd0lzVmlzaWJsZSh3aW5kb3dJc1Zp
c2libGUpLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojp3aW5kb3dBbmRWaWV3
RnJhbWVzQ2hhbmdlZChjb25zdCBJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0
ZXMsIGNvbnN0IEludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpCit2b2lkIFdl
YlBhZ2VQcm94eTo6d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgSW50UmVjdCYgd2lu
ZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBJbnRSZWN0JiB2aWV3RnJhbWVJbldp
bmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBJbnRQb2ludCYgYWNjZXNzaWJpbGl0eVZpZXdDb29yZGlu
YXRlcykKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJv
Y2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpXaW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdl
ZCh3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIHZpZXdGcmFtZUluV2luZG93Q29vcmRp
bmF0ZXMpLCBtX3BhZ2VJRCk7CisgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpXaW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZCh3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0
ZXMsIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMsIGFjY2Vzc2liaWxpdHlWaWV3Q29vcmRp
bmF0ZXMpLCBtX3BhZ2VJRCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRNYXJrZWRSYW5n
ZSh1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpCkBAIC0xMTk3LDYgKzExOTcs
MTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJ1bkluc2VjdXJlQ29udGVudAogICAgIG1fbG9h
ZGVyQ2xpZW50LmRpZFJ1bkluc2VjdXJlQ29udGVudEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2Vy
RGF0YS5nZXQoKSk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlQWNjZXNzaWJp
bGl0eVBhZ2VUb2tlbihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQoreworICAg
IG1fcGFnZUNsaWVudC0+YWNjZXNzaWJpbGl0eUNoaWxkVG9rZW5SZWNlaXZlZChkYXRhKTsKK30K
KyAgICAKIHZvaWQgV2ViUGFnZVByb3h5OjpmcmFtZURpZEJlY29tZUZyYW1lU2V0KHVpbnQ2NF90
IGZyYW1lSUQsIGJvb2wgdmFsdWUpCiB7CiAgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9j
ZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOwpAQCAtMTg1NCw2ICsxODU5LDE0IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpzdHJpbmdDYWxsYmFjayhjb25zdCAKICAgICBjYWxsYmFjay0+cGVyZm9ybUNh
bGxiYWNrV2l0aFJldHVyblZhbHVlKHJlc3VsdFN0cmluZy5pbXBsKCkpOwogfQogCit2b2lkIFdl
YlBhZ2VQcm94eTo6c2VuZEFjY2Vzc2liaWxpdHlQcmVzZW50ZXJUb2tlbihjb25zdCBDb3JlSVBD
OjpEYXRhUmVmZXJlbmNlJiB0b2tlbikKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kQWNj
ZXNzaWJpbGl0eVByZXNlbnRlclRva2VuKHRva2VuKSwgbV9wYWdlSUQpOworfQorICAgIAogdm9p
ZCBXZWJQYWdlUHJveHk6OmZvY3VzZWRGcmFtZUNoYW5nZWQodWludDY0X3QgZnJhbWVJRCkKIHsK
ICAgICBpZiAoIWZyYW1lSUQpIHsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZp
c2lvbiA3NDk3MykKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIHZvaWQgdXBkYXRlV2luZG93SXNWaXNpYmxlKGJvb2wgd2luZG93SXNWaXNpYmxlKTsKLSAg
ICB2b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
dmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcyk7CisgICAgdm9pZCB3aW5kb3dBbmRWaWV3RnJh
bWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29v
cmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRp
bmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBhY2Nlc3NpYmlsaXR5Vmlld0Nvb3JkaW5h
dGVzKTsKICAgICB2b2lkIGdldE1hcmtlZFJhbmdlKHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0
X3QmIGxlbmd0aCk7CiAgICAgdWludDY0X3QgY2hhcmFjdGVySW5kZXhGb3JQb2ludChjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCk7CiAgICAgV2ViQ29yZTo6SW50UmVjdCBmaXJzdFJlY3RGb3JDaGFy
YWN0ZXJSYW5nZSh1aW50NjRfdCwgdWludDY0X3QpOwpAQCAtMjMwLDcgKzIzMCw4IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc2NhbGVXZWJWaWV3KGRvdWJsZSBzY2FsZSwgY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIG9yaWdpbik7CiAgICAgZG91YmxlIHZpZXdTY2FsZUZhY3RvcigpIGNvbnN0IHsg
cmV0dXJuIG1fdmlld1NjYWxlRmFjdG9yOyB9Ci0KKyAgICB2b2lkIHNlbmRBY2Nlc3NpYmlsaXR5
UHJlc2VudGVyVG9rZW4oY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYpOworICAgIAogICAg
IC8vIEZpbmQuCiAgICAgdm9pZCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25z
LCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKICAgICB2b2lkIGhpZGVGaW5kVUkoKTsKQEAgLTMz
Myw2ICszMzQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkU3RhcnRQcm9ncmVzcygpOwogICAg
IHZvaWQgZGlkQ2hhbmdlUHJvZ3Jlc3MoZG91YmxlKTsKICAgICB2b2lkIGRpZEZpbmlzaFByb2dy
ZXNzKCk7CisgICAgdm9pZCBkaWRSZWNlaXZlQWNjZXNzaWJpbGl0eVBhZ2VUb2tlbihjb25zdCBD
b3JlSVBDOjpEYXRhUmVmZXJlbmNlJik7CiAgICAgCiAgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQzMl90IG5hdmlnYXRpb25UeXBl
LCB1aW50MzJfdCBtb2RpZmllcnMsIGludDMyX3QgbW91c2VCdXR0b24sIGNvbnN0IFN0cmluZyYg
dXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKTsKICAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5ld1dp
bmRvd0FjdGlvbih1aW50NjRfdCBmcmFtZUlELCB1aW50MzJfdCBuYXZpZ2F0aW9uVHlwZSwgdWlu
dDMyX3QgbW9kaWZpZXJzLCBpbnQzMl90IG1vdXNlQnV0dG9uLCBjb25zdCBTdHJpbmcmIHVybCwg
dWludDY0X3QgbGlzdGVuZXJJRCk7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMyw4IEBA
IG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgRGF0YUNhbGxiYWNrKENvcmVJUEM6OkRh
dGFSZWZlcmVuY2UgcmVzdWx0RGF0YSwgdWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBTdHJpbmdD
YWxsYmFjayhXVEY6OlN0cmluZyByZXN1bHRTdHJpbmcsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAK
KyAgICBEaWRSZWNlaXZlQWNjZXNzaWJpbGl0eVBhZ2VUb2tlbihDb3JlSVBDOjpEYXRhUmVmZXJl
bmNlIGRhdGEpCisKICNpZiBQTEFURk9STShNQUMpCiAgICAgIyBLZXlib2FyZCBzdXBwb3J0IG1l
c3NhZ2VzLgogICAgIEludGVycHJldEtleUV2ZW50KHVpbnQzMl90IHR5cGUpIC0+IChWZWN0b3I8
V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiBjb21tYW5kTmFtZSwgdWludDMyX3Qgc2VsZWN0aW9u
U3RhcnQsIHVpbnQzMl90IHNlbGVjdGlvbkVuZCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9u
VW5kZXJsaW5lPiB1bmRlcmxpbmVzKQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9Q
YWdlQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
UGFnZUNsaWVudEltcGwuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDcgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZExlYXZlQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpOwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzaWJpbGl0eUNoaWxkVG9r
ZW5SZWNlaXZlZChjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJik7ICAgIAogICAgIHZpcnR1
YWwgdm9pZCBzZXRDb21wbGV4VGV4dElucHV0RW5hYmxlZCh1aW50NjRfdCBwbHVnaW5Db21wbGV4
VGV4dElucHV0SWRlbnRpZmllciwgYm9vbCBjb21wbGV4VGV4dElucHV0RW5hYmxlZCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShib29sIHVzZUN1c3RvbVJl
cHJlc2VudGF0aW9uKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVu
dEltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xp
ZW50SW1wbC5tbQkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1BhZ2VDbGllbnRJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW1w
b3J0ICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbC5o
IgogCisjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCiAjaW1wb3J0ICJGaW5kSW5kaWNhdG9yLmgi
CiAjaW1wb3J0ICJXS0FQSUNhc3QuaCIKICNpbXBvcnQgIldLU3RyaW5nQ0YuaCIKQEAgLTI1Nyw2
ICsyNTgsMTIgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0RmluZEluZGljYXRvcihQYQogICAg
IFttX3drVmlldyBfc2V0RmluZEluZGljYXRvcjpmaW5kSW5kaWNhdG9yIGZhZGVPdXQ6ZmFkZU91
dF07CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmFjY2Vzc2liaWxpdHlDaGlsZFRva2VuUmVj
ZWl2ZWQoY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKK3sKKyAgICBOU0RhdGEq
IHJlbW90ZVRva2VuID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGEuZGF0YSgpIGxlbmd0aDpk
YXRhLnNpemUoKV07CisgICAgW21fd2tWaWV3IF9zZXRBY2Nlc3NpYmlsaXR5Q2hpbGRUb2tlbjpy
ZW1vdGVUb2tlbl07Cit9CisgICAgCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
dm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFnZURpZEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZygp
CiB7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24gNzQ5NzMp
CisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI2ltcG9ydCAiV0tWaWV3LmgiCiAKICNpbXBvcnQgIkNodW5rZWRV
cGRhdGVEcmF3aW5nQXJlYVByb3h5LmgiCisjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCiAjaW1w
b3J0ICJGaW5kSW5kaWNhdG9yLmgiCiAjaW1wb3J0ICJGaW5kSW5kaWNhdG9yV2luZG93LmgiCiAj
aW1wb3J0ICJMYXllckJhY2tlZERyYXdpbmdBcmVhUHJveHkuaCIKQEAgLTUxLDYgKzUyLDcgQEAK
ICNpbXBvcnQgPFdlYkNvcmUvSW50UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2
ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+CisjaW1wb3J0IDxXZWJL
aXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KIApAQCAtOTQsNiArOTYsOCBAQCBAaW50ZXJmYWNlIFdLVmlld0RhdGEg
OiBOU09iamVjdCB7CiAgICAgTlNWaWV3ICpfbGF5ZXJIb3N0aW5nVmlldzsKICNlbmRpZgogCisg
ICAgUmV0YWluUHRyPGlkPiBfcmVtb3RlQWNjZXNzaWJpbGl0eUNoaWxkOworICAgIAogICAgIC8v
IEZvciBhc3luY2hyb25vdXMgdmFsaWRhdGlvbi4KICAgICBWYWxpZGF0aW9uTWFwIF92YWxpZGF0
aW9uTWFwOwogCkBAIC0xNjIsNiArMTY2LDEyIEBAIC0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVj
dClmcmFtZSBjb250ZXgKIAogICAgIFdlYkNvbnRleHQ6OnN0YXRpc3RpY3MoKS53a1ZpZXdDb3Vu
dCsrOwogCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIE5TRGF0
YSAqcmVtb3RlVG9rZW4gPSAoTlNEYXRhICopV0tBWFJlbW90ZVRva2VuRm9yRWxlbWVudChzZWxm
KTsKKyAgICBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFUb2tlbiA9IENvcmVJUEM6OkRhdGFS
ZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oW3JlbW90ZVRva2VuIGJ5
dGVzXSksIFtyZW1vdGVUb2tlbiBsZW5ndGhdKTsKKyAgICBfZGF0YS0+X3BhZ2UtPnNlbmRBY2Nl
c3NpYmlsaXR5UHJlc2VudGVyVG9rZW4oZGF0YVRva2VuKTsKKyNlbmRpZgorICAgIAogICAgIHJl
dHVybiBzZWxmOwogfQogCkBAIC0yNDMsOCArMjUzLDkgQEAgLSAodm9pZClfdXBkYXRlV2luZG93
QW5kVmlld0ZyYW1lcwogICAgIAogICAgIE5TUmVjdCB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRp
bmF0ZXMgPSBbd2luZG93IGZyYW1lXTsKICAgICBOU1JlY3Qgdmlld0ZyYW1lSW5XaW5kb3dDb29y
ZGluYXRlcyA9IFtzZWxmIGNvbnZlcnRSZWN0OltzZWxmIGZyYW1lXSB0b1ZpZXc6bmlsXTsKKyAg
ICBOU1BvaW50IGFjY2Vzc2liaWxpdHlQb3NpdGlvbiA9IFtbc2VsZiBhY2Nlc3NpYmlsaXR5QXR0
cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdIHBvaW50VmFsdWVd
OwogICAgIAotICAgIF9kYXRhLT5fcGFnZS0+d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoZW5j
bG9zaW5nSW50UmVjdCh3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMpLCBlbmNsb3NpbmdJ
bnRSZWN0KHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpKTsKKyAgICBfZGF0YS0+X3BhZ2Ut
PndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGVuY2xvc2luZ0ludFJlY3Qod2luZG93RnJhbWVJ
blNjcmVlbkNvb3JkaW5hdGVzKSwgZW5jbG9zaW5nSW50UmVjdCh2aWV3RnJhbWVJbldpbmRvd0Nv
b3JkaW5hdGVzKSwgSW50UG9pbnQoYWNjZXNzaWJpbGl0eVBvc2l0aW9uKSk7CiB9CiAKIC0gKHZv
aWQpcmVuZXdHU3RhdGUKQEAgLTkxMCw2ICs5MjEsNDMgQEAgLSAodm9pZCl2aWV3RGlkVW5oaWRl
CiAgICAgW3NlbGYgX3VwZGF0ZVZpc2liaWxpdHldOwogfQogCistICh2b2lkKV9zZXRBY2Nlc3Np
YmlsaXR5Q2hpbGRUb2tlbjooTlNEYXRhICopZGF0YQoreworI2lmICFkZWZpbmVkKEJVSUxESU5H
X09OX1NOT1dfTEVPUEFSRCkKKyAgICBfZGF0YS0+X3JlbW90ZUFjY2Vzc2liaWxpdHlDaGlsZCA9
IFdLQVhSZW1vdGVFbGVtZW50Rm9yVG9rZW4oKENGRGF0YVJlZilkYXRhKTsKKyAgICBXS0FYSW5p
dGlhbGl6ZVJlbW90ZUVsZW1lbnRXaXRoV2luZG93KF9kYXRhLT5fcmVtb3RlQWNjZXNzaWJpbGl0
eUNoaWxkLmdldCgpLCBbc2VsZiB3aW5kb3ddKTsKKyNlbmRpZgorfQorCistIChCT09MKWFjY2Vz
c2liaWxpdHlJc0lnbm9yZWQKK3sKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKGlkKWFjY2Vzc2li
aWxpdHlIaXRUZXN0OihOU1BvaW50KXBvaW50Cit7CisgICAgcmV0dXJuIF9kYXRhLT5fcmVtb3Rl
QWNjZXNzaWJpbGl0eUNoaWxkLmdldCgpOworfQorCistIChpZClhY2Nlc3NpYmlsaXR5QXR0cmli
dXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1dGUKK3sKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdKSB7CisgICAgICAg
IGlmICghX2RhdGEtPl9yZW1vdGVBY2Nlc3NpYmlsaXR5Q2hpbGQpCisgICAgICAgICAgICByZXR1
cm4gbmlsOworICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0Ol9kYXRhLT5f
cmVtb3RlQWNjZXNzaWJpbGl0eUNoaWxkLmdldCgpXTsKKyAgICB9CisgICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvbGVBdHRyaWJ1dGVdKQorICAgICAg
ICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlOworICAgIGlmIChbYXR0cmlidXRlIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb25BdHRyaWJ1dGVdKQor
ICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uKE5TQWNjZXNzaWJp
bGl0eUdyb3VwUm9sZSwgbmlsKTsKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5UGFyZW50QXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIE5TQWNjZXNz
aWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKFtzZWxmIHN1cGVydmlld10pOworICAgIGlmIChbYXR0
cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlXSkK
KyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdOworICAgIAorICAg
IHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZV07Cit9
CisKIC0gKE5TVmlldyAqKWhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQKIHsKICAgICBOU1ZpZXcgKmhp
dFZpZXcgPSBbc3VwZXIgaGl0VGVzdDpwb2ludF07CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiAr
NTIsNyBAQCBAaW50ZXJmYWNlIFdLVmlldyAoSW50ZXJuYWwpCiAtICh2b2lkKV9wYWdlRGlkTGVh
dmVBY2NlbGVyYXRlZENvbXBvc2l0aW5nOwogI2VuZGlmCiAKKy0gKHZvaWQpX3NldEFjY2Vzc2li
aWxpdHlDaGlsZFRva2VuOihOU0RhdGEgKilkYXRhOwogLSAodm9pZClfc2V0Q29tcGxleFRleHRJ
bnB1dEVuYWJsZWQ6KEJPT0wpY29tcGxleFRleHRJbnB1dEVuYWJsZWQgcGx1Z2luQ29tcGxleFRl
eHRJbnB1dElkZW50aWZpZXI6KHVpbnQ2NF90KXBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlm
aWVyOwogCiAtICh2b2lkKV9zZXRQYWdlSGFzQ3VzdG9tUmVwcmVzZW50YXRpb246KEJPT0wpcGFn
ZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uOwpJbmRleDogV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw2ICsyMDksOCBA
QAogCQkxQ0E4Qjk0NTEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUNBOEI5NDMxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLzsgfTsKIAkJMUNBOEI5NDYxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3Bl
Y3RvclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFDQThCOTQ0MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQcm94eU1l
c3NhZ2VzLmggKi87IH07CiAJCTFDQThCOTU0MTI3Qzg5MTUwMDU3NkMyQiAvKiBXZWJJbnNwZWN0
b3JNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QzhFMkRBRDEyNzhDNUIyMDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yTWFjLm1tICovOyB9OworCQky
OUNENTVBQTEyOEUyOTRGMDAxMzNDODUgLyogQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5Q0Q1NUE4MTI4
RTI5NEYwMDEzM0M4NSAvKiBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5oICovOyB9OworCQky
OUNENTVBQjEyOEUyOTRGMDAxMzNDODUgLyogQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUNENTVBOTEy
OEUyOTRGMDAxMzNDODUgLyogQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QubW0gKi87IH07CiAJ
CTM3RjYyM0I4MTJBNTdCNjIwMEUzRkRGNiAvKiBXS0ZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y2MjNCNzEyQTU3QjYyMDBFM0ZE
RjYgLyogV0tGaW5kT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1Ymxp
YywgKTsgfTsgfTsKIAkJNTEwMjFFOUMxMkIxNjc4ODAwNUMwMzNDIC8qIFdlYkNvbnRleHRNZW51
Q2xpZW50TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTEwMjFFOUIxMkIxNjc4ODAwNUMwMzNDIC8qIFdlYkNvbnRleHRNZW51Q2xpZW50TWFjLm1t
ICovOyB9OwogCQk1MTBGQkI5QTEyODhDOTVFMDBBRkZERjQgLyogV2ViQ29udGV4dE1lbnVJdGVt
RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTBGQkI5ODEyODhDOTVFMDBBRkZERjQgLyogV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHAgKi87
IH07CkBAIC04ODEsNiArODgzLDggQEAKIAkJMUNBOEI5MzUxMjdDNzc0RTAwNTc2QzJCIC8qIFdl
Ykluc3BlY3RvclByb3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViSW5zcGVjdG9yUHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFDQThCOTQzMTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJJbnNw
ZWN0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFDQThCOTQ0MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2Vz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkluc3BlY3RvclByb3h5TWVz
c2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjlDRDU1QTgxMjhFMjk0RjAw
MTMzQzg1IC8qIEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTI5Q0Q1NUE5MTI4RTI5NEYwMDEzM0M4NSAvKiBBY2Nlc3NpYmls
aXR5V2ViUGFnZU9iamVjdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzMkRCQ0Y1RTAzNzBBREVFMDBDOTE3ODMgLyogV2ViS2l0MlByZWZpeC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXQyUHJlZml4Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTM3RjYyM0I3MTJBNTdCNjIwMEUzRkRGNiAvKiBXS0ZpbmRPcHRp
b25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLRmluZE9wdGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMjFFOUIxMkIxNjc4ODAwNUMwMzNDIC8q
IFdlYkNvbnRleHRNZW51Q2xpZW50TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViQ29udGV4dE1lbnVDbGllbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yMzI2LDYgKzIzMzAsOCBAQAogCQlCQzk2M0Q2QzExM0REMTk1MDA1NzRC
RTIgLyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJ
CQkyOUNENTVBOTEyOEUyOTRGMDAxMzNDODUgLyogQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3Qu
bW0gKi8sCisJCQkJMjlDRDU1QTgxMjhFMjk0RjAwMTMzQzg1IC8qIEFjY2Vzc2liaWxpdHlXZWJQ
YWdlT2JqZWN0LmggKi8sCiAJCQkJQkM1RjdCQjgxMTgyMzc5OTAwNTJDMDJDIC8qIENodW5rZWRV
cGRhdGVEcmF3aW5nQXJlYU1hYy5jcHAgKi8sCiAJCQkJMEY1MjY1QjUxMUREMzc3MDAwMDZEMzND
IC8qIExheWVyQmFja2VkRHJhd2luZ0FyZWFNYWMubW0gKi8sCiAJCQkJMUM4RTJEQUQxMjc4QzVC
MjAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvck1hYy5tbSAqLywKQEAgLTI3NzMsNiArMjc3OSw3IEBA
CiAJCQkJQkNFRTdEQzUxMjhCNjQ1RDAwOTgyN0RBIC8qIEluamVjdGVkQnVuZGxlQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFRDgyQTdGMjEyOEM2RkFGMDA0NDc3QjMgLyogV0tCdW5kbGVQ
YWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBOEI5NDYxMjdDODgyQTAwNTc2QzJC
IC8qIFdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTI5Q0Q1
NUFBMTI4RTI5NEYwMDEzM0M4NSAvKiBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTE1MzU2OUQxMjkxQjFEMjAwMDc0OURDIC8qIFdlYlBhZ2VDb250ZXh0
TWVudUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBQjRBOEQxMjk2RjBBMjAwMjM5NTJG
IC8qIFNhbmRib3hFeHRlbnNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0I2MjA2MTI5QTBB
NjcwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzIwNCw2ICsz
MjExLDcgQEAKIAkJCQkxQ0E4Qjk0NTEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNBOEI5NTQxMjdDODkx
NTAwNTc2QzJCIC8qIFdlYkluc3BlY3Rvck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUVEQ0E3
MUI3MTI4RERBOEMwMDIwMUIyNiAvKiBXS0J1bmRsZVBhZ2VPdmVybGF5LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTI5Q0Q1NUFCMTI4RTI5NEYwMDEzM0M4NSAvKiBBY2Nlc3NpYmlsaXR5V2ViUGFn
ZU9iamVjdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxNTM1NjlDMTI5MUIxRDIwMDA3NDlEQyAv
KiBXZWJQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBQjRB
QUExMjk2RjE1NDAwMjM5NTJGIC8qIFNhbmRib3hFeHRlbnNpb25NYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQlCQzdCNjIwNzEyOUEwQTY3MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gNzQ5
NzMpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3Nyw2ICsxNzcsOCBAQCB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNz
KGNvCiAgICAgICAgIGNsZWFyUmVzb3VyY2VDYWNoZXMoKTsKICAgICBpZiAocGFyYW1ldGVycy5j
bGVhckFwcGxpY2F0aW9uQ2FjaGUpCiAgICAgICAgIGNsZWFyQXBwbGljYXRpb25DYWNoZSgpOwor
ICAgIAorICAgIG1fcHJlc2VudGVyQXBwbGljYXRpb25QaWQgPSBwYXJhbWV0ZXJzLnByZXNlbnRl
ckFwcGxpY2F0aW9uUGlkOwogCiAgICAgaWYgKHBhcmFtZXRlcnMuc2hvdWxkQWx3YXlzVXNlQ29t
cGxleFRleHRDb2RlUGF0aCkKICAgICAgICAgc2V0QWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBh
dGgodHJ1ZSk7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHJldmlzaW9uIDc0OTczKQor
KysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTEs
NyArOTEsMTAgQEAgcHVibGljOgogICAgIFdlYlBhZ2VHcm91cFByb3h5KiB3ZWJQYWdlR3JvdXAo
dWludDY0X3QgcGFnZUdyb3VwSUQpOwogICAgIFdlYlBhZ2VHcm91cFByb3h5KiB3ZWJQYWdlR3Jv
dXAoY29uc3QgV2ViUGFnZUdyb3VwRGF0YSYpOwogICAgIHN0YXRpYyBXZWJDb3JlOjpQYWdlR3Jv
dXAqIHNoYXJlZFBhZ2VHcm91cCgpOwotCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHBpZF90IHBy
ZXNlbnRlckFwcGxpY2F0aW9uUGlkKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZW50ZXJBcHBsaWNh
dGlvblBpZDsgfQorI2VuZGlmIAorICAgIAogI2lmIFBMQVRGT1JNKFFUKQogICAgIFFOZXR3b3Jr
QWNjZXNzTWFuYWdlciogbmV0d29ya0FjY2Vzc01hbmFnZXIoKSB7IHJldHVybiBtX25ldHdvcmtB
Y2Nlc3NNYW5hZ2VyOyB9CiAjZW5kaWYKQEAgLTE1OSw2ICsxNjIsOSBAQCBwcml2YXRlOgogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgUExBVEZPUk0oTUFDKQogICAgIG1hY2hf
cG9ydF90IG1fY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0OwogI2VuZGlmCisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIHBpZF90IG1fcHJlc2VudGVyQXBwbGljYXRpb25QaWQ7CisjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKFFUKQogICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbV9uZXR3b3JrQWNj
ZXNzTWFuYWdlcjsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gNzQ5NzMpCisr
KyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjU3LDYgKzEyNTcsMTIgQEAgdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJYwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQorICAgIAor
UmVtb3RlQVhPYmplY3RSZWYgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmFjY2Vzc2liaWxpdHlSZW1v
dGVPYmplY3QoKSAKK3sKKyAgICByZXR1cm4gbV9mcmFtZS0+cGFnZSgpLT5hY2Nlc3NpYmlsaXR5
UmVtb3RlT2JqZWN0KCk7Cit9CisgICAgCiAjaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKIGpv
YmplY3QgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmphdmFBcHBsZXQoTlNWaWV3KikgeyByZXR1cm4g
MDsgfQogI2VuZGlmCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjAxLDYgKzIwMSw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIHJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sIGxpc3RlbiA9IHRydWUpOwogICAg
IAogI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIFJlbW90ZUFYT2JqZWN0UmVmIGFjY2Vz
c2liaWxpdHlSZW1vdGVPYmplY3QoKTsKKyAgICAKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdF
KQogICAgIHZpcnR1YWwgam9iamVjdCBqYXZhQXBwbGV0KE5TVmlldyopOwogI2VuZGlmCkluZGV4
OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gNzQ5NzMpCisr
KyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMxMiwxMSArMTMxMiwxMiBAQCB2b2lkIFdlYlBhZ2U6OnNldFdpbmRvd0lzVmlzaWJsZShi
b29sIHdpCiAgICAgICAgICgqaXQpLT5zZXRXaW5kb3dJc1Zpc2libGUod2luZG93SXNWaXNpYmxl
KTsKIH0KIAotdm9pZCBXZWJQYWdlOjp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpCit2b2lkIFdlYlBh
Z2U6OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdp
bmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmll
d0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGFjY2Vz
c2liaWxpdHlWaWV3Q29vcmRpbmF0ZXMpCiB7CiAgICAgbV93aW5kb3dGcmFtZUluU2NyZWVuQ29v
cmRpbmF0ZXMgPSB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXM7CiAgICAgbV92aWV3RnJh
bWVJbldpbmRvd0Nvb3JkaW5hdGVzID0gdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlczsKLQor
ICAgIG1fYWNjZXNzaWJpbGl0eVBvc2l0aW9uID0gYWNjZXNzaWJpbGl0eVZpZXdDb29yZGluYXRl
czsKKyAgICAKICAgICAvLyBUZWxsIGFsbCBvdXIgcGx1Zy1pbiB2aWV3cyB0aGF0IHRoZSB3aW5k
b3cgYW5kIHZpZXcgZnJhbWVzIGhhdmUgY2hhbmdlZC4KICAgICBmb3IgKEhhc2hTZXQ8UGx1Z2lu
Vmlldyo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2luVmlld3MuYmVnaW4oKSwgZW5kID0g
bV9wbHVnaW5WaWV3cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAoKml0KS0+d2lu
ZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQod2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCB2
aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1MiwxNSBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvUGxhdGZvcm1Ub3VjaEV2ZW50Lmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1B
QykKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaWZkZWYgX19PQkpDX18KK0BjbGFzcyBB
Y2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdDsKKyNlbHNlCitjbGFzcyBBY2Nlc3NpYmlsaXR5V2Vi
UGFnZU9iamVjdDsKKyNlbmRpZgorI2VuZGlmCisKIG5hbWVzcGFjZSBDb3JlSVBDIHsKICAgICBj
bGFzcyBBcmd1bWVudERlY29kZXI7CiAgICAgY2xhc3MgQ29ubmVjdGlvbjsKQEAgLTI1Myw2ICsy
NjIsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGdldExvY2F0aW9uQW5kTGVuZ3RoRnJv
bVJhbmdlKFdlYkNvcmU6OlJhbmdlKiwgdWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVu
Z3RoKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIHNlbmRBY2Nlc3NpYmlsaXR5UHJl
c2VudGVyVG9rZW4oY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYpOworICAgIEFjY2Vzc2li
aWxpdHlXZWJQYWdlT2JqZWN0KiBhY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCk7CisgICAgV2Vi
Q29yZTo6SW50UG9pbnQgYWNjZXNzaWJpbGl0eVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9h
Y2Nlc3NpYmlsaXR5UG9zaXRpb247IH0gICAgCisgICAgCiAgICAgdm9pZCBzZW5kQ29tcGxleFRl
eHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIHRleHRJbnB1dCk7CiAKICAgICB2b2lkIGdldE1hcmtlZFJhbmdlKHVp
bnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCk7CkBAIC0zNDAsNyArMzUzLDcgQEAg
cHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHNldFdpbmRvd0lzVmlzaWJs
ZShib29sIHdpbmRvd0lzVmlzaWJsZSk7Ci0gICAgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hh
bmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0
ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMp
OworICAgIHZvaWQgd2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgYWNjZXNzaWJpbGl0eVZpZXdDb29yZGluYXRlcyk7CiAjZW5kaWYKIAogICAgIHZvaWQgdW5h
cHBseUVkaXRDb21tYW5kKHVpbnQ2NF90IGNvbW1hbmRJRCk7CkBAIC0zOTcsOCArNDEwLDEzIEBA
IHByaXZhdGU6CiAgICAgLy8gVGhlIGZyYW1lIG9mIHRoZSB2aWV3IGluIHdpbmRvdyBjb29yZGlu
YXRlcy4KICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRl
czsKIAorICAgIC8vIFRoZSBhY2Nlc3NpYmlsaXR5IHBvc2l0aW9uIG9mIHRoZSB2aWV3LgorICAg
IFdlYkNvcmU6OkludFBvaW50IG1fYWNjZXNzaWJpbGl0eVBvc2l0aW9uOworICAgIAogICAgIC8v
IEFsbCBwbHVnLWluIHZpZXdzIG9uIHRoaXMgd2ViIHBhZ2UuCiAgICAgSGFzaFNldDxQbHVnaW5W
aWV3Kj4gbV9wbHVnaW5WaWV3czsKKyAgICAKKyAgICBSZXRhaW5QdHI8QWNjZXNzaWJpbGl0eVdl
YlBhZ2VPYmplY3Q+IG1fbW9ja0FjY2Vzc2liaWxpdHlFbGVtZW50OwogI2VsaWYgUExBVEZPUk0o
V0lOKQogICAgIC8vIE91ciB2aWV3J3Mgd2luZG93IChpbiB0aGUgVUkgcHJvY2VzcykuCiAgICAg
SFdORCBtX25hdGl2ZVdpbmRvdzsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUs
MTAgKzExNSwxMSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBTZW5kQ29tcGxleFRleHRJ
bnB1dFRvUGx1Z2luKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBT
dHJpbmcgdGV4dElucHV0KQogCiAgICAgU2V0V2luZG93SXNWaXNpYmxlKGJvb2wgd2luZG93SXNW
aXNpYmxlKQotICAgIFdpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKFdlYkNvcmU6OkludFJlY3Qg
d2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBXZWJDb3JlOjpJbnRSZWN0IHZpZXdGcmFt
ZUluV2luZG93Q29vcmRpbmF0ZXMpCisgICAgV2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoV2Vi
Q29yZTo6SW50UmVjdCB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIFdlYkNvcmU6Oklu
dFJlY3Qgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcywgV2ViQ29yZTo6SW50UG9pbnQgYWNj
ZXNzaWJpbGl0eVZpZXdDb29yZGluYXRlcykKICAgICBHZXRNYXJrZWRSYW5nZSgpIC0+ICh1aW50
NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoKQogICAgIENoYXJhY3RlckluZGV4Rm9yUG9p
bnQoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpIC0+ICh1aW50NjRfdCByZXN1bHQpCiAgICAgRmly
c3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0
aCkgLT4gKFdlYkNvcmU6OkludFJlY3QgcmVzdWx0UmVjdCkKKyAgICBTZW5kQWNjZXNzaWJpbGl0
eVByZXNlbnRlclRva2VuKENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgdG9rZW4pCiAjZW5kaWYKICNp
ZiBQTEFURk9STShXSU4pCiAgICAgQ29uZmlybUNvbXBvc2l0aW9uKFdURjo6U3RyaW5nIGNvbXBv
c2l0aW9uU3RyaW5nKQpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0JKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI1LDExICsyNSwxNSBAQAog
CiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVdlYlBhZ2VP
YmplY3QuaCIKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiUGx1Z2luVmll
dy5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkV2
ZW50LmgiCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNz
YWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0FYT2Jq
ZWN0Q2FjaGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgpAQCAt
NDAsNiArNDQsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsVmlldy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dzS2V5Ym9h
cmRDb2Rlcy5oPgorI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDgsNiArNTMsMjEgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiB2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7CiAgICAgbV9wYWdlLT5hZGRT
Y2hlZHVsZVBhaXIoU2NoZWR1bGVQYWlyOjpjcmVhdGUoW05TUnVuTG9vcCBjdXJyZW50UnVuTG9v
cF0sIGtDRlJ1bkxvb3BDb21tb25Nb2RlcykpOworCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05f
U05PV19MRU9QQVJEKQorICAgIEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0KiBtb2NrQWNjZXNz
aWJpbGl0eUVsZW1lbnQgPSBbW1tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdCBhbGxvY10gaW5p
dF0gYXV0b3JlbGVhc2VdOworCisgICAgLy8gR2V0IHRoZSBwaWQgZm9yIHRoZSBzdGFydGluZyBw
cm9jZXNzLgorICAgIHBpZF90IHBpZCA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnByZXNlbnRlckFw
cGxpY2F0aW9uUGlkKCk7ICAgIAorICAgIFdLQVhJbml0aWFsaXplRWxlbWVudFdpdGhQcmVzZW50
ZXJQaWQobW9ja0FjY2Vzc2liaWxpdHlFbGVtZW50LCBwaWQpOworICAgIFttb2NrQWNjZXNzaWJp
bGl0eUVsZW1lbnQgc2V0V2ViUGFnZTp0aGlzXTsKKyAgICAKKyAgICAvLyBzZW5kIGRhdGEgYmFj
ayBvdmVyCisgICAgTlNEYXRhKiByZW1vdGVUb2tlbiA9IChOU0RhdGEgKilXS0FYUmVtb3RlVG9r
ZW5Gb3JFbGVtZW50KG1vY2tBY2Nlc3NpYmlsaXR5RWxlbWVudCk7IAorICAgIENvcmVJUEM6OkRh
dGFSZWZlcmVuY2UgZGF0YVRva2VuID0gQ29yZUlQQzo6RGF0YVJlZmVyZW5jZShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihbcmVtb3RlVG9rZW4gYnl0ZXNdKSwgW3JlbW90ZVRva2Vu
IGxlbmd0aF0pOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2ZUFj
Y2Vzc2liaWxpdHlQYWdlVG9rZW4oZGF0YVRva2VuKSk7CisgICAgbV9tb2NrQWNjZXNzaWJpbGl0
eUVsZW1lbnQgPSBtb2NrQWNjZXNzaWJpbGl0eUVsZW1lbnQ7CisjZW5kaWYKIH0KIAogdm9pZCBX
ZWJQYWdlOjpwbGF0Zm9ybVByZWZlcmVuY2VzRGlkQ2hhbmdlKGNvbnN0IFdlYlByZWZlcmVuY2Vz
U3RvcmUmKQpAQCAtMzE0LDYgKzMzNCwxOSBAQCBib29sIFdlYlBhZ2U6OnBlcmZvcm1EZWZhdWx0
QmVoYXZpb3JGb3JLCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6c2VuZEFj
Y2Vzc2liaWxpdHlQcmVzZW50ZXJUb2tlbihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiBk
YXRhKQoreworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICBOU0Rh
dGEqIHRva2VuRGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczpkYXRhLmRhdGEoKSBsZW5ndGg6
ZGF0YS5zaXplKCldOworICAgIFttX21vY2tBY2Nlc3NpYmlsaXR5RWxlbWVudC5nZXQoKSBzZXRS
ZW1vdGVQYXJlbnQ6V0tBWFJlbW90ZUVsZW1lbnRGb3JUb2tlbigoQ0ZEYXRhUmVmKXRva2VuRGF0
YSldOworI2VuZGlmCit9CisKK0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0KiBXZWJQYWdlOjph
Y2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCkKK3sKKyAgICByZXR1cm4gbV9tb2NrQWNjZXNzaWJp
bGl0eUVsZW1lbnQuZ2V0KCk7Cit9CisgICAgICAgICAKIGJvb2wgV2ViUGFnZTo6cGxhdGZvcm1I
YXNMb2NhbERhdGFGb3JVUkwoY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsKQogewogICAgIE5TTXV0
YWJsZVVSTFJlcXVlc3QqIHJlcXVlc3QgPSBbW05TTXV0YWJsZVVSTFJlcXVlc3QgYWxsb2NdIGlu
aXRXaXRoVVJMOnVybF07CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NN
YWluTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vz
c01haW5NYWMubW0JKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9X
ZWJQcm9jZXNzTWFpbk1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMzLDYgKzEzMywxMCBAQCBp
bnQgV2ViUHJvY2Vzc01haW4oY29uc3QgQ29tbWFuZExpbmUmIGNvCiAgICAgIC8vIEluaXRpYWxp
emUgQXBwS2l0LgogICAgIFtOU0FwcGxpY2F0aW9uIHNoYXJlZEFwcGxpY2F0aW9uXTsKIAorI2lm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICBXS0FYUmVnaXN0ZXJSZW1v
dGVBcHAoKTsKKyNlbmRpZgorICAgIAogICAgIFJ1bkxvb3A6OnJ1bigpOwogCiAgICAgLy8gRklY
TUU6IERvIG1vcmUgY2xlYW51cCBoZXJlLgpJbmRleDogV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0OTczKQorKysgV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0w
MS0wNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdLMjogU3VwcG9ydCBBY2Nlc3Np
YmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MTg1OQorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
LmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2V0Rm9jdXNlZEFjY2Vz
c2libGVFbGVtZW50KToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAg
ICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2FjY2Vzc2libGUpOgorCiAyMDExLTAxLTAzICBHdXN0
YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KSW5kZXg6IFdlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAJKHJl
dmlzaW9uIDc0OTczKQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjUsMTEgKzQyNSw3IEBAIEF0a09i
amVjdCogRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnZXQKICAgICBpZiAoIXByaXYtPmNvcmVG
cmFtZSB8fCAhcHJpdi0+Y29yZUZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIFJlbmRlclZpZXcqIHJvb3QgPSB0b1JlbmRlclZpZXcocHJpdi0+Y29yZUZyYW1lLT5k
b2N1bWVudCgpLT5yZW5kZXJlcigpKTsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgQXRrT2JqZWN0KiB3cmFwcGVyID0gIHByaXYtPmNvcmVGcmFtZS0+ZG9jdW1lbnQo
KS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyb290KS0+d3JhcHBlcigpOworICAgIEF0
a09iamVjdCogd3JhcHBlciA9ICBwcml2LT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPmF4T2JqZWN0
Q2FjaGUoKS0+cm9vdE9iamVjdCgpLT53cmFwcGVyKCk7CiAgICAgaWYgKCF3cmFwcGVyKQogICAg
ICAgICByZXR1cm4gMDsKIApJbmRleDogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHJl
dmlzaW9uIDc0OTczKQorKysgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0NTIsNyArMTQ1Miw3IEBAIHN0YXRpYyBBdGtPYmplY3QqIHdlYmtp
dF93ZWJfdmlld19nZXRfYWMKICAgICBpZiAoIWRvYykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAK
LSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlQWNjZXNzaWJsZSA9IGRvYy0+YXhPYmplY3RD
YWNoZSgpLT5nZXRPckNyZWF0ZShkb2MtPnJlbmRlcmVyKCkpOworICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmVBY2Nlc3NpYmxlID0gZG9jLT5heE9iamVjdENhY2hlKCktPnJvb3RPYmplY3Qo
KTsKICAgICBpZiAoIWNvcmVBY2Nlc3NpYmxlIHx8ICFjb3JlQWNjZXNzaWJsZS0+d3JhcHBlcigp
KQogICAgICAgICByZXR1cm4gTlVMTDsKIApJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0OTczKQorKysgV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxMS0w
MS0wNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdLMjogU3VwcG9ydCBBY2Nlc3Np
YmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MTg1OQorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaDoK
KyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjphY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0
KToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBz
ZXRBY2Nlc3NpYmxlTmFtZTpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgYWNjZXNzaWJpbGl0eVJv
b3RdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaDoKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkZyYW1lUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcu
bW06CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpd
KToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRd
KToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgYWNjZXNzaWJpbGl0eUhpdFRlc3Q6XSk6CisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IF9hY2Nlc3NpYmlsaXR5UGFyZW50Rm9yU3VidmlldzpdKToKKwog
MjAxMS0wMS0wMiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1
YmJlci1zdGFtcGVkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDc0OTczKQorKysg
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjcsNiArMjI3LDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBqb2JqZWN0
IGphdmFBcHBsZXQoTlNWaWV3Kik7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2
aXJ0dWFsIFJlbW90ZUFYT2JqZWN0UmVmIGFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKSB7IHJl
dHVybiAwOyB9CisjZW5kaWYKKyAgICAKICAgICB2b2lkIHNldE9yaWdpbmFsVVJMRm9yRG93bmxv
YWQoV2ViRG93bmxvYWQgKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikgY29uc3Q7
CiAKICAgICBSZXRhaW5QdHI8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lcj4gc2V0VXBQb2xpY3lMaXN0
ZW5lcihXZWJDb3JlOjpGcmFtZVBvbGljeUZ1bmN0aW9uKTsKSW5kZXg6IFdlYktpdC9tYWMvV2Vi
Vmlldy9XZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0JKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC02ODksMjYgKzY4OSw2IEBAIC0gKEJPT0wpX25lZWRzTGF5b3V0
CiAgICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUtPnZpZXcoKSA/IF9wcml2YXRlLT5jb3Jl
RnJhbWUtPnZpZXcoKS0+bmVlZHNMYXlvdXQoKSA6IGZhbHNlOwogfQogCi0tIChpZClfYWNjZXNz
aWJpbGl0eVRyZWUKLXsKLSNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCi0gICAgaWYgKCFBWE9iamVj
dENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7Ci0gICAgICAgIEFYT2JqZWN0Q2FjaGU6
OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKLSAgICAgICAgaWYgKFtbTlNBcHAgYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eUVuaGFuY2VkVXNlckludGVyZmFjZUF0dHJp
YnV0ZV0gYm9vbFZhbHVlXSkKLSAgICAgICAgICAgIEFYT2JqZWN0Q2FjaGU6OmVuYWJsZUVuaGFu
Y2VkVXNlckludGVyZmFjZUFjY2Vzc2liaWxpdHkoKTsKLSAgICB9Ci0KLSAgICBpZiAoIV9wcml2
YXRlLT5jb3JlRnJhbWUgfHwgIV9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCkpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgUmVuZGVyVmlldyogcm9vdCA9IHRvUmVuZGVyVmlldyhfcHJp
dmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKLSAgICBpZiAoIXJvb3Qp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUtPmRv
Y3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocm9vdCktPndyYXBwZXIoKTsK
LSNlbHNlCi0gICAgcmV0dXJuIG5pbDsKLSNlbmRpZgotfQotCiAtIChET01SYW5nZSAqKV9yYW5n
ZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihTZWxlY3Rpb25Db250cm9sbGVyOjpFQWx0ZXJh
dGlvbilhbHRlcmF0aW9uIGRpcmVjdGlvbjooU2VsZWN0aW9uRGlyZWN0aW9uKWRpcmVjdGlvbiBn
cmFudWxhcml0eTooVGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5CiB7CiAgICAgaWYgKF9wcml2
YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc05vbmUoKSkKQEAgLTEzMzksMTMgKzEzMTks
MTQgQEAgLSAodm9pZClzZXRBY2Nlc3NpYmxlTmFtZTooTlNTdHJpbmcgKiluYQogICAgIGlmICgh
QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIFJlbmRlclZpZXcqIHJvb3QgPSB0b1JlbmRlclZpZXcoX3ByaXZhdGUtPmNvcmVG
cmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKCFyb290KQorICAgIGlmICgh
X3ByaXZhdGUtPmNvcmVGcmFtZSB8fCAhX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvb3RPYmpl
Y3QgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdl
dE9yQ3JlYXRlKHJvb3QpOwotICAgIFN0cmluZyBzdHJOYW1lKG5hbWUpOwotICAgIHJvb3RPYmpl
Y3QtPnNldEFjY2Vzc2libGVOYW1lKHN0ck5hbWUpOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IHJvb3RPYmplY3QgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5heE9iamVjdENh
Y2hlKCktPnJvb3RPYmplY3QoKTsKKyAgICBpZiAocm9vdE9iamVjdCkgeworICAgICAgICBTdHJp
bmcgc3RyTmFtZShuYW1lKTsKKyAgICAgICAgcm9vdE9iamVjdC0+c2V0QWNjZXNzaWJsZU5hbWUo
c3RyTmFtZSk7CisgICAgfQogI2VuZGlmCiB9CiAKQEAgLTEzNjYsNiArMTM0NywyNyBAQCAtIChC
T09MKWhhc1NwZWxsaW5nTWFya2VyOihpbnQpZnJvbSBsZW5nCiAgICAgcmV0dXJuIGNvcmVGcmFt
ZS0+ZWRpdG9yKCktPnNlbGVjdGlvblN0YXJ0SGFzU3BlbGxpbmdNYXJrZXJGb3IoZnJvbSwgbGVu
Z3RoKTsKIH0KIAorLSAoaWQpYWNjZXNzaWJpbGl0eVJvb3QKK3sKKyNpZiBIQVZFKEFDQ0VTU0lC
SUxJVFkpCisgICAgaWYgKCFBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7
CisgICAgICAgIEFYT2JqZWN0Q2FjaGU6OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKKyAgICAgICAg
aWYgKFtbTlNBcHAgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eUVu
aGFuY2VkVXNlckludGVyZmFjZUF0dHJpYnV0ZV0gYm9vbFZhbHVlXSkKKyAgICAgICAgICAgIEFY
T2JqZWN0Q2FjaGU6OmVuYWJsZUVuaGFuY2VkVXNlckludGVyZmFjZUFjY2Vzc2liaWxpdHkoKTsK
KyAgICB9CisgICAgCisgICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZyYW1lIHx8ICFfcHJpdmF0ZS0+
Y29yZUZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIHJvb3RPYmplY3QgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1
bWVudCgpLT5heE9iamVjdENhY2hlKCktPnJvb3RPYmplY3QoKTsKKyAgICBpZiAocm9vdE9iamVj
dCkKKyAgICAgICAgcmV0dXJuIHJvb3RPYmplY3QtPndyYXBwZXIoKTsKKyAgICByZXR1cm4gbmls
OworI2Vsc2UKKyAgICByZXR1cm4gbmlsOworI2VuZGlmCit9CisKIEBlbmQKIAogQGltcGxlbWVu
dGF0aW9uIFdlYkZyYW1lCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5h
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgJ
KHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDggKzEzOCw2IEBAIEBpbnRlcmZhY2UgV2ViRnJhbWUg
KFdlYkludGVybmFsKQogLSAoTlNSZWN0KV9maXJzdFJlY3RGb3JET01SYW5nZTooRE9NUmFuZ2Ug
KilyYW5nZTsKIC0gKHZvaWQpX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOihET01SYW5nZSAqKXJh
bmdlOwogCi0tIChpZClfYWNjZXNzaWJpbGl0eVRyZWU7Ci0KIC0gKERPTVJhbmdlICopX3Jhbmdl
QnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246KFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6
OkVBbHRlcmF0aW9uKWFsdGVyYXRpb24gZGlyZWN0aW9uOihXZWJDb3JlOjpTZWxlY3Rpb25EaXJl
Y3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkpZ3Jh
bnVsYXJpdHk7CiAtIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihXZWJDb3JlOjpSYW5nZSop
cmFuZ2U7CiAtIChET01SYW5nZSAqKV9jb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6KE5TUmFuZ2Up
cmFuZ2U7CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lUHJpdmF0ZS5oCShyZXZpc2lvbiA3
NDk3MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQyLDQgKzE0Miw3IEBAIEBpbnRlcmZhY2UgV2ViRnJhbWUgKFdlYlByaXZhdGUp
CiAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlcmUgaXMgYSBzcGVsbGluZyBtYXJrZXIgaW4gdGhlIHNw
ZWNpZmllZCByYW5nZSBvZiB0aGUgZm9jdXNlZCBub2RlLgogLSAoQk9PTCloYXNTcGVsbGluZ01h
cmtlcjooaW50KWxvY2F0aW9uIGxlbmd0aDooaW50KWxlbmd0aDsKIAorLy8gVGhlIHRvcCBvZiB0
aGUgYWNjZXNzaWJpbGl0eSB0cmVlLgorLSAoaWQpYWNjZXNzaWJpbGl0eVJvb3Q7CisKIEBlbmQK
SW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDc0OTczKQorKysgV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Mjc0LDcg
KzQyNzQsNyBAQCAtICh2b2lkKWZsYWdzQ2hhbmdlZDooTlNFdmVudCAqKWV2ZW50CiAtIChpZClh
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lCiB7CiAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5BdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlkIGFjY1RyZWUgPSBbW3NlbGYgX2ZyYW1lXSBf
YWNjZXNzaWJpbGl0eVRyZWVdOworICAgICAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0g
YWNjZXNzaWJpbGl0eVJvb3RdOwogICAgICAgICBpZiAoYWNjVHJlZSkKICAgICAgICAgICAgIHJl
dHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6YWNjVHJlZV07CiAgICAgICAgIHJldHVybiBu
aWw7CkBAIC00Mjg0LDcgKzQyODQsNyBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFs
dWU6KE5TU3RyCiAKIC0gKGlkKWFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50CiB7Ci0gICAg
aWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIF9hY2Nlc3NpYmlsaXR5VHJlZV07CisgICAgaWQg
YWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIGFjY2Vzc2liaWxpdHlSb290XTsKICAgICBpZiAoYWNj
VHJlZSkKICAgICAgICAgcmV0dXJuIFthY2NUcmVlIGFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVt
ZW50XTsKICAgICByZXR1cm4gc2VsZjsKQEAgLTQyOTIsNyArNDI5Miw3IEBAIC0gKGlkKWFjY2Vz
c2liaWxpdHlGb2N1c2VkVUlFbGVtZW50CiAKIC0gKGlkKWFjY2Vzc2liaWxpdHlIaXRUZXN0OihO
U1BvaW50KXBvaW50CiB7Ci0gICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIF9hY2Nlc3Np
YmlsaXR5VHJlZV07CisgICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIGFjY2Vzc2liaWxp
dHlSb290XTsKICAgICBpZiAoYWNjVHJlZSkgewogICAgICAgICBOU1BvaW50IHdpbmRvd0Nvb3Jk
ID0gW1tzZWxmIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpwb2ludF07CiAgICAgICAgIHJl
dHVybiBbYWNjVHJlZSBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpbc2VsZiBjb252ZXJ0UG9pbnQ6d2lu
ZG93Q29vcmQgZnJvbVZpZXc6bmlsXV07CkBAIC00MzAyLDcgKzQzMDIsNyBAQCAtIChpZClhY2Nl
c3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2luCiAKIC0gKGlkKV9hY2Nlc3NpYmlsaXR5UGFy
ZW50Rm9yU3VidmlldzooTlNWaWV3ICopc3VidmlldwogewotICAgIGlkIGFjY1RyZWUgPSBbW3Nl
bGYgX2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOworICAgIGlkIGFjY1RyZWUgPSBbW3NlbGYg
X2ZyYW1lXSBhY2Nlc3NpYmlsaXR5Um9vdF07CiAgICAgaWYgKCFhY2NUcmVlKQogICAgICAgICBy
ZXR1cm4gc2VsZjsKICAgICBpZCBwYXJlbnQgPSBbYWNjVHJlZSBfYWNjZXNzaWJpbGl0eVBhcmVu
dEZvclN1YnZpZXc6c3Vidmlld107CkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQv
d2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTAxLTA0
ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0syOiBTdXBwb3J0IEFjY2Vzc2liaWxp
dHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxODU5
CisKKyAgICAgICAgKiBBY2Nlc3NpYmxlRG9jdW1lbnQuY3BwOgorICAgICAgICAoQWNjZXNzaWJs
ZURvY3VtZW50OjpBY2Nlc3NpYmxlRG9jdW1lbnQpOgorCiAyMDExLTAxLTAxICBBZGFtIEJhcnRo
ICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwu
CkluZGV4OiBXZWJLaXQvd2luL0FjY2Vzc2libGVEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L3dpbi9BY2Nlc3NpYmxlRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA3NDk3MykKKysrIFdl
YktpdC93aW4vQWNjZXNzaWJsZURvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyAr
MzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogLy8gQWNjZXNzaWJsZURvY3VtZW50
CiBBY2Nlc3NpYmxlRG9jdW1lbnQ6OkFjY2Vzc2libGVEb2N1bWVudChEb2N1bWVudCogZG9jKQot
ICAgIDogQWNjZXNzaWJsZUJhc2UoZG9jLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGRv
Yy0+cmVuZGVyZXIoKSkpCisgICAgOiBBY2Nlc3NpYmxlQmFzZShkb2MtPmF4T2JqZWN0Q2FjaGUo
KS0+cm9vdE9iamVjdCgpKQogewogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NDk3MykKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEx
LTAxLTA0ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0syOiBTdXBwb3J0IEFjY2Vz
c2liaWxpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUxODU5CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS93ZWJraXQtc2Ny
b2xsYXJlYS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nl
c3NpYmlsaXR5L3dlYmtpdC1zY3JvbGxhcmVhLmh0bWw6IEFkZGVkLgorCiAyMDExLTAxLTA0ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
biBCZXJuc3RlaW4uCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0
eS93ZWJraXQtc2Nyb2xsYXJlYS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvd2Via2l0LXNjcm9sbGFyZWEtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxp
dHkvd2Via2l0LXNjcm9sbGFyZWEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE1IEBACit0ZXh0CisKK3RleHQKK1RoaXMgdGVzdHMgdGhhdCB0aGUgV2ViS2l0IGdlbmVyYXRl
ZCBzY3JvbGwgYXJlYXMgYXJlIGNvcnJlY3QuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIGJvZHkucm9sZSBpcyAnQVhSb2xlOiBBWFdlYkFyZWEnCitQQVNTIGJvZHkucGFy
ZW50RWxlbWVudCgpLnJvbGUgaXMgJ0FYUm9sZTogQVhTY3JvbGxBcmVhJworUEFTUyBib2R5LnBh
cmVudEVsZW1lbnQoKS5jaGlsZHJlbkNvdW50IGlzIDEKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS93ZWJraXQtc2Nyb2xsYXJlYS5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3dlYmtpdC1zY3JvbGxhcmVhLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0
eS93ZWJraXQtc2Nyb2xsYXJlYS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0PgordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IGZhbHNlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgaWQ9ImJvZHki
PgorCit0ZXh0PGJyPgorPGltZyBzcmM9J3Jlc291cmNlcy9jYWtlLnBuZycgd2lkdGg9NTAwMCBo
ZWlnaHQ9NTAwMD4KKzxicj4KK3RleHQKKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KKworICAgIGRlc2NyaXB0aW9uKCJUaGlz
IHRlc3RzIHRoYXQgdGhlIFdlYktpdCBnZW5lcmF0ZWQgc2Nyb2xsIGFyZWFzIGFyZSBjb3JyZWN0
LiIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworCisgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib2R5IikuZm9jdXMoKTsKKyAgICAgICAgdmFy
IGJvZHkgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKyAgICAgICAg
c2hvdWxkQmUoImJvZHkucm9sZSIsICInQVhSb2xlOiBBWFdlYkFyZWEnIik7CisgICAgICAgIHNo
b3VsZEJlKCJib2R5LnBhcmVudEVsZW1lbnQoKS5yb2xlIiwgIidBWFJvbGU6IEFYU2Nyb2xsQXJl
YSciKTsKKyAgICAgICAgc2hvdWxkQmUoImJvZHkucGFyZW50RWxlbWVudCgpLmNoaWxkcmVuQ291
bnQiLCAiMSIpOworICAgIH0KKworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3Nj
cmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77914</attachid>
            <date>2011-01-04 12:17:33 -0800</date>
            <delta_ts>2011-01-04 12:58:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51859-20110104121725.patch</filename>
            <type>text/plain</type>
            <size>123389</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDc0OTczKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTEtMDEtMDQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXSzI6
IFN1cHBvcnQgQWNjZXNzaWJpbGl0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTE4NTkKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpmb2N1c2VkRWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cm9vdEVsZW1lbnQpOgorCiAyMDExLTAxLTAzICBZaSBTaGVuICA8eWkuNC5zaGVuQG5va2lhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQko
cmV2aXNpb24gNzQ5NzMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDEwIEBACiAjaW1w
b3J0ICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgogCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmgiCisjaW1wb3J0IDxBcHBLaXQvTlNDb2xvci5oPgogI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XZWJGcmFtZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlldy5o
PgogCiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQpA
QCAtNDksMTQgKzUxLDE0IEBAIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNv
bnQKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3Vz
ZWRFbGVtZW50KCkKIHsKICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZSBjYWNoaW5nIGhl
cmUuCi0gICAgaWQgYWNjZXNzaWJpbGl0eU9iamVjdCA9IFtbW21haW5GcmFtZSBmcmFtZVZpZXdd
IGRvY3VtZW50Vmlld10gYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRdOworICAgIGlkIGFj
Y2Vzc2liaWxpdHlPYmplY3QgPSBbW21haW5GcmFtZSBhY2Nlc3NpYmlsaXR5Um9vdF0gYWNjZXNz
aWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRdOwogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50KGFjY2Vzc2liaWxpdHlPYmplY3QpOwogfQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgpCiB7CiAgICAgLy8gRklYTUU6IHdl
IGNvdWxkIGRvIHNvbWUgY2FjaGluZyBoZXJlLgotICAgIGlkIGFjY2Vzc2liaWxpdHlPYmplY3Qg
PSBbW21haW5GcmFtZSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgaWQgYWNjZXNzaWJp
bGl0eU9iamVjdCA9IFttYWluRnJhbWUgYWNjZXNzaWJpbGl0eVJvb3RdOwogICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KGFjY2Vzc2liaWxpdHlPYmplY3QpOwogfQogCkluZGV4OiBX
ZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gNzQ5NzMpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDEwMiBAQAorMjAxMS0wMS0wNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdLMjog
U3VwcG9ydCBBY2Nlc3NpYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MTg1OQorCisgICAgICAgIFN1cHBvcnQgV2ViS2l0MiBhY2Nlc3NpYmls
aXR5LiBUbyBkbyBzbywgaXQgd2FzIG5lY2Vzc2FyeSB0byBoYXZlCisgICAgICAgIGFuIEFjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3IGNsYXNzIHRoYXQgY291bGQgbWltaWMgd2hhdCB0aGUgcGxhdGZv
cm0gcHJvdmlkZWQgYmVmb3JlCisgICAgICAgIHdpdGggc2Nyb2xsIHZpZXdzLgorCisgICAgICAg
IFRlc3Q6IHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3dlYmtpdC1zY3JvbGxhcmVhLmh0bWwK
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgor
ICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJvb3RPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZSk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpo
YW5kbGVTY3JvbGxiYXJVcGRhdGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUltYWdlTWFwTGluay5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5SW1hZ2VNYXBMaW5rLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveE9wdGlvbi5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveE9wdGlvbi5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp1cGRhdGVD
aGlsZHJlbklmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmVsZW1lbnRBY2Nlc3NpYmlsaXR5SGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpheE9iamVjdENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OmZvY3VzZWRVSUVsZW1lbnQpOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0Ojppc1Njcm9sbFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6Y2FuU2V0TnVtZXJpY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnNjcm9sbEJhcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OnNldFZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6cGFyZW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2hpbGRyZW4pOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjplbGVtZW50UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpkb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpvcmllbnRhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjppc0VuYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6dmFsdWVGb3JSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpzZXRWYWx1ZSk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpzZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6Y2FuU2V0VmFsdWVBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6Y2FuU2V0TnVtZXJpY1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmlzQWNjZXNzaWJpbGl0eVNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpwYXJl
bnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6cm9s
ZVZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJp
bGl0eUlnbm9yZUF0dGFjaG1lbnQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyLm1tOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdKToKKyAgICAgICAgKC1bQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdF0pOgor
ICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBwb3NpdGlvbl0pOgorICAgICAg
ICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBzY3JvbGxWaWV3UGFyZW50XSk6CisgICAg
ICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZTpdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJp
bGl0eUhpdFRlc3Q6XSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFj
Y2Vzc2liaWxpdHlTZXRWYWx1ZTpmb3JBdHRyaWJ1dGU6XSk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpheE9iamVjdENhY2hlKToKKyAg
ICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZy
YW1lTG9hZGVyQ2xpZW50OjphY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KToKKyAgICAgICAgKiBs
b2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6On5GcmFtZVZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3OjpheE9iamVjdENhY2hlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmll
dy5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3OjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgICogcGxh
dGZvcm0vU2Nyb2xsYmFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6flNjcm9s
bGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXI6OmF4T2JqZWN0Q2FjaGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cm9sbGJhci5oOgorICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5oOgorICAgICAgICAoV2ViQ29y
ZTo6V2lkZ2V0OjpheE9iamVjdENhY2hlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3Lmg6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwOiBBZGRlZC4KKwogMjAxMS0wMS0wNCAgVG9ueSBHZW50
aWxjb3JlICA8dG9ueWdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQg
Zml4LgpJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTU3NSw2ICs1NzUsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAogICAgIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCisgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
U2Nyb2xsVmlldy5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3Bw
CiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCiAgICAgYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA3NDk3
MykKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTY2Miw2ICs2
NjIsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmggXAogCVdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyLmNwcCBcCiAJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlTY3JvbGxiYXIuaCBcCisJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3LmNwcCBcCisJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3LmggXAogCVdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcCBc
CiAJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuaCBcCiAJV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwIFwKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgko
cmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkp
CkBAIC0yODksNyArMjg5LDcgQEAgX19aTjdXZWJDb3JlMTJjcmVhdGVNYXJrdXBFUEtOU180Tm9k
ZUVOUwogX19aTjdXZWJDb3JlMTJjcmVhdGVNYXJrdXBFUEtOU181UmFuZ2VFUE4zV1RGNlZlY3Rv
cklQTlNfNE5vZGVFTG0wRUVFTlNfMjNFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZUViTlNfMTNFQWJz
b2x1dGVVUkxzRQogX19aTjdXZWJDb3JlMTJnY0NvbnRyb2xsZXJFdgogX19aTjdXZWJDb3JlMTJp
Y29uRGF0YWJhc2VFdgotX19aTjdXZWJDb3JlMTNBWE9iamVjdENhY2hlMTFnZXRPckNyZWF0ZUVQ
TlNfMTJSZW5kZXJPYmplY3RFCitfX1pON1dlYkNvcmUxM0FYT2JqZWN0Q2FjaGUxMHJvb3RPYmpl
Y3RFdgogX19aTjdXZWJDb3JlMTNBWE9iamVjdENhY2hlMjFnQWNjZXNzaWJpbGl0eUVuYWJsZWRF
CiBfX1pON1dlYkNvcmUxM0FYT2JqZWN0Q2FjaGU0MmdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2Vy
SW50ZXJmYWNlRW5hYmxlZEUKIF9fWk43V2ViQ29yZTEzSFRUUEhlYWRlck1hcEMxRXYKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBp
CShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkp
CkBAIC01MTgsNiArNTE4LDggQEAKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyLmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyLmgnLAorICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNjcm9sbFZpZXcuY3BwJywKKyAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlTY3JvbGxWaWV3LmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNsaWRlci5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVNsaWRlci5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZS5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUucHJvCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTMyMSw2ICszMjEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAgXCAgICAKICAgICBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIFwgICAgCiAgICAgYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmNwcCBcCisgICAgYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAgXAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNsaWRlci5jcHAgXCAgICAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklB
R3JpZC5jcHAgXCAgICAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENl
bGwuY3BwIFwgICAgCkBAIC0xMzk4LDYgKzEzOTksNyBAQCBIRUFERVJTICs9IFwKICAgICBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5oIFwKICAgICBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCBcCiAgICAgYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmggXAorICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVNjcm9sbFZpZXcuaCBcCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmgg
XAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5oIFwKICAgICBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5oIFwKSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzc1NCw2ICsyMzc1
NCw2MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxhY2Nlc3NpYmlsaXR5XEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcCIKKwkJCQk+CisJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMy
IgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIi
CisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfTFRDR3xXaW4z
MiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxhY2Nlc3Np
YmlsaXR5XEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGFjY2Vzc2liaWxpdHlcQWNjZXNzaWJpbGl0eVNs
aWRlci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc0OTczKQorKysgV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTY5Myw2ICs2OTMsOCBAQAogCQkyNEY1NEVBRDEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRp
b25DYWNoZUhvc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTI1NDJGNERBMTE2NkMyNUEw
MEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyRjREODExNjZDMjVBMDBFODlBODYgLyogVXNl
ckdlc3R1cmVJbmRpY2F0b3IuY3BwICovOyB9OwogCQkyNTQyRjREQjExNjZDMjVBMDBFODlBODYg
LyogVXNlckdlc3R1cmVJbmRpY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI1NDJGNEQ5MTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUlu
ZGljYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTI5NDg5RkM3MTJDMDBGMDMwMEQ4M0YwRiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjk0ODlGQzUx
MkMwMEYwMzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggKi87IH07CisJCTI5
NDg5RkM4MTJDMDBGMDMwMEQ4M0YwRiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTQ4OUZDNjEyQzAw
RjAzMDBEODNGMEYgLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwICovOyB9OwogCQkyOUE4
MTIyNjBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUE4MTIwODBGQkI5
QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgKi87IH07CiAJCTI5
QTgxMjI3MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBODEyMDkwRkJCOUMxRDAw
NTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlUYWJsZS5jcHAgKi87IH07CiAJCTI5QTgxMjI4MEZCQjlD
MUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBODEyMEEwRkJCOUMxRDAwNTEwMjkzIC8q
IEFjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAgKi87IH07CkBAIC02OTk2LDYgKzY5OTgsOCBAQAog
CQkyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZUhvc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjU0MkY0RDgxMTY2QzI1QTAwRTg5QTg2IC8qIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMjU0MkY0RDkxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5NDg5RkM1MTJDMDBGMDMwMEQ4M0YwRiAvKiBB
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyOTQ4OUZDNjEyQzAwRjAzMDBEODNGMEYgLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNjcm9s
bFZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUE4MTIwODBGQkI5QzFE
MDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlBODEyMDkwRkJCOUMxRDAwNTEwMjkzIC8qIEFj
Y2Vzc2liaWxpdHlUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
OUE4MTIwQTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlBUklBR3JpZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjkzOCw2ICsxMjk0Miw4IEBACiAJ
CQkJQTQwOUM5ODMxMTZEMERERDAwNzE5N0JEIC8qIEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGlj
YXRvci5oICovLAogCQkJCTI5QTgxMjA4MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcCAqLywKIAkJCQkyOUE4MTIxQjBGQkI5QzFEMDA1MTAyOTMgLyogQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oICovLAorCQkJCTI5NDg5RkM2MTJDMDBGMDMwMEQ4M0Yw
RiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAgKi8sCisJCQkJMjk0ODlGQzUxMkMwMEYw
MzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggKi8sCiAJCQkJOTNDNEY2RTgx
MTA4RjlBNTAwOTlEMERCIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwICovLAogCQkJCTkz
QzRGNkU5MTEwOEY5QTUwMDk5RDBEQiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmggKi8sCiAJ
CQkJMDcwOUZDNEIxMDI1REVEODAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuY3BwICov
LApAQCAtMjIyNjUsNiArMjIyNzEsNyBAQAogCQkJCTkzRjE5OUVEMDgyNDVFNTkwMDFFOUFCQyAv
KiBYU0xUUHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAy
RUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0RENEQ4NzBG
REY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjk0ODlG
QzcxMkMwMEYwMzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3RUU2ODQ2MDEyRDI2RTM4MDBFNzk0MTUgLyogQXV0aGVudGljYXRpb25DRi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0VFNjg0NjExMkQyNkUzODAwRTc5NDE1IC8qIEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUU2ODQ2NDEyRDI2RTM4MDBF
Nzk0MTUgLyogQ29va2llU3RvcmFnZUNGTmV0LmggaW4gSGVhZGVycyAqLywKQEAgLTI0OTQzLDYg
KzI0OTUwLDcgQEAKIAkJCQk5M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nv
ckxpYnhzbHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5
IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0RENEQ4NjBGREY0
RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyOTQ4OUZD
ODEyQzAwRjAzMDBEODNGMEYgLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0VFNjg0NUYxMkQyNkUzODAwRTc5NDE1IC8qIEF1dGhlbnRpY2F0aW9uQ0Yu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0NjIxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tp
ZUphckNGTmV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFRTY4NDYzMTJEMjZFMzgwMEU3OTQx
NSAvKiBDb29raWVTdG9yYWdlQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NiArNDIsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmgiCiAjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3
LmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5oIgogI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlTbGlkZXIuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKQEAgLTQ5
LDYgKzUwLDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaCIKICNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuaCIKICNpbmNsdWRlICJBY2Nl
c3NpYmlsaXR5VGFibGVSb3cuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZv
Y3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEFyZWFF
bGVtZW50LmgiCkBAIC02MSwxMiArNjMsMTMgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCisjaW5jbHVk
ZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJUYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUg
IlJlbmRlclRhYmxlUm93LmgiCi0jaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKLSNpbmNsdWRl
ICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2Ny
b2xsVmlldy5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIApAQCAtNzcsOSArODAs
MTAgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIGJvb2wgQVhPYmplY3RDYWNoZTo6Z0Fj
Y2Vzc2liaWxpdHlFbmFibGVkID0gZmFsc2U7CiBib29sIEFYT2JqZWN0Q2FjaGU6OmdBY2Nlc3Np
YmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZCA9IGZhbHNlOwogCi1BWE9iamVjdENh
Y2hlOjpBWE9iamVjdENhY2hlKCkKK0FYT2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2FjaGUoY29uc3Qg
RG9jdW1lbnQqIGRvYykKICAgICA6IG1fbm90aWZpY2F0aW9uUG9zdFRpbWVyKHRoaXMsICZBWE9i
amVjdENhY2hlOjpub3RpZmljYXRpb25Qb3N0VGltZXJGaXJlZCkKIHsKKyAgICBtX2RvY3VtZW50
ID0gY29uc3RfY2FzdDxEb2N1bWVudCo+KGRvYyk7CiB9CiAKIEFYT2JqZWN0Q2FjaGU6On5BWE9i
amVjdENhY2hlKCkKQEAgLTE1MSwxOSArMTU1LDMwIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFY
T2JqZWN0Q2FjaGU6OmZvY3UKICAgICByZXR1cm4gb2JqOwogfQogCitBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCF3aWRn
ZXQpCisgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICBBWElEIGF4SUQgPSBtX3dpZGdl
dE9iamVjdE1hcHBpbmcuZ2V0KHdpZGdldCk7CisgICAgQVNTRVJUKCFIYXNoVHJhaXRzPEFYSUQ+
Ojppc0RlbGV0ZWRWYWx1ZShheElEKSk7CisgICAgaWYgKCFheElEKQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICByZXR1cm4gbV9vYmplY3RzLmdldChheElEKS5nZXQoKTsgICAgCit9Cisg
ICAgCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKIHsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gMDsKICAg
ICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSAwOwogICAgIEFYSUQgYXhJRCA9IG1f
cmVuZGVyT2JqZWN0TWFwcGluZy5nZXQocmVuZGVyZXIpOwogICAgIEFTU0VSVCghSGFzaFRyYWl0
czxBWElEPjo6aXNEZWxldGVkVmFsdWUoYXhJRCkpOwotCi0gICAgaWYgKGF4SUQpCi0gICAgICAg
IG9iaiA9IG1fb2JqZWN0cy5nZXQoYXhJRCkuZ2V0KCk7CisgICAgaWYgKCFheElEKQorICAgICAg
ICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4gb2JqOworICAgIHJldHVybiBtX29iamVjdHMu
Z2V0KGF4SUQpLmdldCgpOyAgICAKIH0KIAogLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgYmVsb25n
cyBvbiBOb2RlLgpAQCAtMjMwLDYgKzI0NSwyOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3Np
YmlsaXR5T2JqZWN0PiBjCiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNy
ZWF0ZShyZW5kZXJlcik7CiB9CiAKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6
OmdldE9yQ3JlYXRlKFdpZGdldCogd2lkZ2V0KQoreworICAgIGlmICghd2lkZ2V0KQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBnZXQod2lk
Z2V0KSkKKyAgICAgICAgcmV0dXJuIG9iajsKKyAgICAKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0
eU9iamVjdD4gbmV3T2JqID0gMDsKKyAgICBpZiAod2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAg
ICAgICBuZXdPYmogPSBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6Y3JlYXRlKHN0YXRpY19jYXN0
PFNjcm9sbFZpZXcqPih3aWRnZXQpKTsKKyAgICBlbHNlIGlmICh3aWRnZXQtPmlzU2Nyb2xsYmFy
KCkpCisgICAgICAgIG5ld09iaiA9IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmNyZWF0ZShzdGF0
aWNfY2FzdDxTY3JvbGxiYXIqPih3aWRnZXQpKTsKKyAgICAgICAgCisgICAgZ2V0QVhJRChuZXdP
YmouZ2V0KCkpOworICAgIAorICAgIG1fd2lkZ2V0T2JqZWN0TWFwcGluZy5zZXQod2lkZ2V0LCBu
ZXdPYmotPmF4T2JqZWN0SUQoKSk7CisgICAgbV9vYmplY3RzLnNldChuZXdPYmotPmF4T2JqZWN0
SUQoKSwgbmV3T2JqKTsgICAgCisgICAgYXR0YWNoV3JhcHBlcihuZXdPYmouZ2V0KCkpOworICAg
IHJldHVybiBuZXdPYmouZ2V0KCk7Cit9CisgICAgCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9i
amVjdENhY2hlOjpnZXRPckNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAgIGlm
ICghcmVuZGVyZXIpCkBAIC0yNDcsNiArMjg0LDExIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFY
T2JqZWN0Q2FjaGU6OmdldE8KICAgICBhdHRhY2hXcmFwcGVyKG5ld09iai5nZXQoKSk7CiAgICAg
cmV0dXJuIG5ld09iai5nZXQoKTsKIH0KKyAgICAKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2Jq
ZWN0Q2FjaGU6OnJvb3RPYmplY3QoKQoreworICAgIHJldHVybiBnZXRPckNyZWF0ZShtX2RvY3Vt
ZW50LT52aWV3KCkpOworfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpn
ZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSByb2xlKQogewpAQCAtMjc1LDkgKzMxNyw2IEBA
IEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE8KICAgICBjYXNlIE1lbnVM
aXN0T3B0aW9uUm9sZToKICAgICAgICAgb2JqID0gQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9u
OjpjcmVhdGUoKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTY3JvbGxCYXJSb2xlOgotICAg
ICAgICBvYmogPSBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpjcmVhdGUoKTsKLSAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgb2JqID0gMDsKICAgICB9CkBAIC0zMjMsNiArMzYy
LDE3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cmVtb3ZlKFJlbmRlck9iamVjdCoKICAgICBtX3Jl
bmRlck9iamVjdE1hcHBpbmcucmVtb3ZlKHJlbmRlcmVyKTsKIH0KIAordm9pZCBBWE9iamVjdENh
Y2hlOjpyZW1vdmUoV2lkZ2V0KiB2aWV3KQoreworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBBWElEIGF4SUQgPSBtX3dpZGdldE9iamVjdE1hcHBpbmcuZ2V0
KHZpZXcpOworICAgIHJlbW92ZShheElEKTsKKyAgICBtX3dpZGdldE9iamVjdE1hcHBpbmcucmVt
b3ZlKHZpZXcpOworfQorICAgIAorICAgIAogI2lmICFQTEFURk9STShXSU4pIHx8IE9TKFdJTkNF
KQogQVhJRCBBWE9iamVjdENhY2hlOjpwbGF0Zm9ybUdlbmVyYXRlQVhJRCgpIGNvbnN0CiB7CkBA
IC00NzgsNiArNTI4LDE4IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6bm9kZVRleHRDaGFuZ2VOb3Rp
ZmkKICNlbmRpZgogCiAjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQorCit2b2lkIEFYT2JqZWN0Q2Fj
aGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KiB2aWV3KQoreworICAgIGlmICgh
dmlldykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY3Jl
YXRlIGEgc2Nyb2xsIHZpZXcgZnJvbSB0aGlzIG1ldGhvZCwgb25seSB1cGRhdGUgYW4gZXhpc3Rp
bmcgb25lLgorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbFZpZXdPYmplY3QgPSBnZXQo
dmlldyk7CisgICAgaWYgKHNjcm9sbFZpZXdPYmplY3QpCisgICAgICAgIHNjcm9sbFZpZXdPYmpl
Y3QtPnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKK30KKyAgICAKIHZvaWQgQVhPYmplY3RD
YWNoZTo6aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlKFJlbmRlck9iamVjdCAqcmVuZGVyZXIpCiB7
CiAgICAgaWYgKCFyZW5kZXJlcikKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsMTQgQEAgY2xhc3MgV2ViQ29yZVRl
eHRNYXJrZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRG9jdW1lbnQ7CiBjbGFz
cyBIVE1MQXJlYUVsZW1lbnQ7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKIGNsYXNzIFJlbmRl
ck9iamVjdDsKK2NsYXNzIFNjcm9sbFZpZXc7CiBjbGFzcyBWaXNpYmxlUG9zaXRpb247CitjbGFz
cyBXaWRnZXQ7CiAKIHN0cnVjdCBUZXh0TWFya2VyRGF0YSB7CiAgICAgQVhJRCBheElEOwpAQCAt
NTksMTQgKzYyLDE3IEBAIGVudW0gUG9zdFR5cGUgeyBQb3N0U3luY2hyb25vdXNseSwgUG9zdEEK
IAogY2xhc3MgQVhPYmplY3RDYWNoZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0g
ICAgQVhPYmplY3RDYWNoZSgpOworICAgIEFYT2JqZWN0Q2FjaGUoY29uc3QgRG9jdW1lbnQqKTsK
ICAgICB+QVhPYmplY3RDYWNoZSgpOwogCiAgICAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGZvY3VzZWRVSUVsZW1lbnRGb3JQYWdlKGNvbnN0IFBhZ2UqKTsKIAotICAgIC8vIHRvIGJlIHVz
ZWQgd2l0aCByZW5kZXIgb2JqZWN0cwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3Jl
YXRlKFJlbmRlck9iamVjdCopOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvb3RPYmplY3Qo
KTsKICAgICAKKyAgICAvLyBGb3IgQVggb2JqZWN0cyB3aXRoIGVsZW1lbnRzIHRoYXQgYmFjayB0
aGVtLgorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKFJlbmRlck9iamVjdCop
OworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKFdpZGdldCopOworCiAgICAg
Ly8gdXNlZCBmb3Igb2JqZWN0cyB3aXRob3V0IGJhY2tpbmcgZWxlbWVudHMKICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBnZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSk7CiAgICAgCkBAIC03
NCw2ICs4MCw3IEBAIHB1YmxpYzoKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXQoUmVuZGVy
T2JqZWN0Kik7CiAgICAgCiAgICAgdm9pZCByZW1vdmUoUmVuZGVyT2JqZWN0Kik7CisgICAgdm9p
ZCByZW1vdmUoV2lkZ2V0Kik7CiAgICAgdm9pZCByZW1vdmUoQVhJRCk7CiAKICAgICB2b2lkIGRl
dGFjaFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdCopOwpAQCAtODgsNiArOTUsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBoYW5kbGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZChSZW5kZXJPYmplY3Qq
IG9sZEZvY3VzZWRSZW5kZXJlciwgUmVuZGVyT2JqZWN0KiBuZXdGb2N1c2VkUmVuZGVyZXIpOwog
ICAgIHZvaWQgaGFuZGxlU2Nyb2xsZWRUb0FuY2hvcihjb25zdCBOb2RlKiBhbmNob3JOb2RlKTsK
ICAgICB2b2lkIGhhbmRsZUFyaWFFeHBhbmRlZENoYW5nZShSZW5kZXJPYmplY3QqKTsKKyAgICB2
b2lkIGhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3Kik7CiAgICAgCiAgICAgc3RhdGlj
IHZvaWQgZW5hYmxlQWNjZXNzaWJpbGl0eSgpIHsgZ0FjY2Vzc2liaWxpdHlFbmFibGVkID0gdHJ1
ZTsgfQogICAgIHN0YXRpYyB2b2lkIGVuYWJsZUVuaGFuY2VkVXNlckludGVyZmFjZUFjY2Vzc2li
aWxpdHkoKSB7IGdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZCA9IHRy
dWU7IH0KQEAgLTE0NSw4ICsxNTMsMTAgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgbm9kZVRleHRD
aGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhUZXh0Q2hh
bmdlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KTsKIAogcHJpdmF0ZToKKyAgICBE
b2N1bWVudCogbV9kb2N1bWVudDsKICAgICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmls
aXR5T2JqZWN0PiA+IG1fb2JqZWN0czsKICAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIEFYSUQ+
IG1fcmVuZGVyT2JqZWN0TWFwcGluZzsKKyAgICBIYXNoTWFwPFdpZGdldCosIEFYSUQ+IG1fd2lk
Z2V0T2JqZWN0TWFwcGluZzsKICAgICBIYXNoU2V0PE5vZGUqPiBtX3RleHRNYXJrZXJOb2RlczsK
ICAgICBzdGF0aWMgYm9vbCBnQWNjZXNzaWJpbGl0eUVuYWJsZWQ7CiAgICAgc3RhdGljIGJvb2wg
Z0FjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkOwpAQCAtMTYwLDYgKzE3
MCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZvY3VzZWRJ
bWFnZU1hcFVJRWxlbWVudChIVE1MQXJlYUVsZW1lbnQqKTsKICAgICAKICAgICBBWElEIGdldEFY
SUQoQWNjZXNzaWJpbGl0eU9iamVjdCopOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldChX
aWRnZXQqKTsKIH07CiAKIGJvb2wgbm9kZUhhc1JvbGUoTm9kZSosIGNvbnN0IFN0cmluZyYgcm9s
ZSk7CkBAIC0xNzksNiArMTkwLDcgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxl
Rm9jdXNlZAogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlU2Nyb2xsZWRUb0FuY2hv
cihjb25zdCBOb2RlKikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpjb250ZW50Q2hh
bmdlZChSZW5kZXJPYmplY3QqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRs
ZUFyaWFFeHBhbmRlZENoYW5nZShSZW5kZXJPYmplY3QqKSB7IH0KK2lubGluZSB2b2lkIEFYT2Jq
ZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KikgeyB9CiAjZW5kaWYK
IAogfQpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdy
aWQuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUFSSUFHcmlkLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHJpdmF0ZToK
ICAgICAvLyBBUklBIHRyZWVncmlkcyBhbmQgZ3JpZHMgc3VwcG9ydCBzZWxlY3RlZCByb3dzLgog
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NlbGVjdGVkUm93cygpIHsgcmV0dXJuIHRydWU7IH0g
ICAgCiAKLSAgICB2b2lkIGFkZENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwgSGFz
aFNldDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVt
bkNvdW50KTsKKyAgICB2b2lkIGFkZENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBIYXNoU2V0
PEFjY2Vzc2liaWxpdHlPYmplY3QqPiYgYXBwZW5kZWRSb3dzLCB1bnNpZ25lZCYgY29sdW1uQ291
bnQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKSW5kZXg6IFdlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5jcHAJKHJldmlzaW9u
IDc0OTczKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExp
bmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsMTEgKzEzNiw2IEBAIEludFJlY3QgQWNjZXNz
aWJpbGl0eUltYWdlTWFwTGluazo6ZWxlbWUKICAgICByZXR1cm4gbV9hcmVhRWxlbWVudC0+Z2V0
UmVjdChyZW5kZXJlcik7CiB9CiAgICAgCi1JbnRTaXplIEFjY2Vzc2liaWxpdHlJbWFnZU1hcExp
bms6OnNpemUoKSBjb25zdAotewotICAgIHJldHVybiBlbGVtZW50UmVjdCgpLnNpemUoKTsKLX0K
LQogU3RyaW5nIEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbms6OnN0cmluZ1ZhbHVlRm9yTVNBQSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIHVybCgpOwpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5oCShyZXZpc2lvbiA3NDk3MykKKysr
IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY4LDcgKzY4LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIHN0
cmluZ1ZhbHVlRm9yTVNBQSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIG5hbWVGb3JNU0FB
KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgSW50UmVjdCBlbGVtZW50UmVjdCgpIGNvbnN0OwogCiBwcml2YXRlOiAgICAKSW5kZXg6IFdl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9u
LmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUxpc3RCb3hPcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsMTEgKzE1Miw2IEBA
IFN0cmluZyBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6c3RyaW4KICAgICByZXR1cm4gU3Ry
aW5nKCk7CiB9CiAKLUludFNpemUgQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OnNpemUoKSBj
b25zdAotewotICAgIHJldHVybiBlbGVtZW50UmVjdCgpLnNpemUoKTsKLX0KLQogRWxlbWVudCog
QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OmFjdGlvbkVsZW1lbnQoKSBjb25zdAogewogICAg
IHJldHVybiBtX29wdGlvbkVsZW1lbnQ7CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uaAkocmV2aXNpb24gNzQ5NzMpCisrKyBX
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsNyArNjEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNhblNl
dFNlbGVjdGVkQXR0cmlidXRlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIEludFJlY3QgZWxlbWVu
dFJlY3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0KCkgY29uc3Q7CiAgICAgYm9v
bCBpc0xpc3RCb3hPcHRpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgCkBAIC03Miw3
ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIGxpc3RCb3hPcHRpb25Q
YXJlbnROb2RlKCkgY29uc3Q7CiAgICAgaW50IGxpc3RCb3hPcHRpb25JbmRleCgpIGNvbnN0Owog
ICAgIEludFJlY3QgbGlzdEJveE9wdGlvblJlY3QoKSBjb25zdDsKLSAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBsaXN0Qm94T3B0aW9uQWNjZXNzaWJpbGl0eU9iamVjdChIVE1MRWxlbWVudCogZWxl
bWVudCkgY29uc3Q7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdEJveE9wdGlvbkFjY2Vz
c2liaWxpdHlPYmplY3QoSFRNTEVsZW1lbnQqKSBjb25zdDsKIH07CiAgICAgCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlIApJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczMCw2ICs3MzAsMTIg
QEAgRnJhbWVWaWV3KiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpkb2N1bWVudAogCiAgICAgcmV0dXJu
IG9iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKIH0KKyAgICAKK3ZvaWQgQWNjZXNzaWJpbGl0
eU9iamVjdDo6dXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKCFoYXNDaGls
ZHJlbigpKQorICAgICAgICBhZGRDaGlsZHJlbigpOyAgICAKK30KIAogdm9pZCBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpjbGVhckNoaWxkcmVuKCkKIHsKQEAgLTEwMDEsNiArMTAwNywzOSBAQCBib29s
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN1cHBvcnRzQVJJQUxpCiAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBsaXZlUmVnaW9uID0gYXJpYUxpdmVSZWdpb25TdGF0dXMoKTsKICAgICByZXR1cm4gZXF1
YWxJZ25vcmluZ0Nhc2UobGl2ZVJlZ2lvbiwgInBvbGl0ZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNl
KGxpdmVSZWdpb24sICJhc3NlcnRpdmUiKTsKIH0KKworQWNjZXNzaWJpbGl0eU9iamVjdCogQWNj
ZXNzaWJpbGl0eU9iamVjdDo6ZWxlbWVudEFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBv
aW50JiBwb2ludCkgY29uc3QKK3sgCisgICAgLy8gU2VuZCB0aGUgaGl0IHRlc3QgYmFjayBpbnRv
IHRoZSBzdWItZnJhbWUgaWYgbmVjZXNzYXJ5LgorICAgIGlmIChpc0F0dGFjaG1lbnQoKSkgewor
ICAgICAgICBXaWRnZXQqIHdpZGdldCA9IHdpZGdldEZvckF0dGFjaG1lbnRWaWV3KCk7CisgICAg
ICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICAgICAgcmV0
dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoc3RhdGljX2Nhc3Q8U2Nyb2xsVmlldyo+
KHdpZGdldCkpLT5hY2Nlc3NpYmlsaXR5SGl0VGVzdChwb2ludCk7CisgICAgfQorCisgICAgcmV0
dXJuIGNvbnN0X2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdCo+KHRoaXMpOyAKK30KKyAgICAKK0FY
T2JqZWN0Q2FjaGUqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmF4T2JqZWN0Q2FjaGUoKSBjb25zdAor
eworICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOworICAgIGlmIChkb2MpCisgICAgICAg
IHJldHVybiBkb2MtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICByZXR1cm4gMDsKK30KKyAgICAKK0Fj
Y2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZvY3VzZWRVSUVsZW1lbnQo
KSBjb25zdAoreworICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOworICAgIGlmICghZG9j
KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBQYWdlKiBwYWdlID0gZG9jLT5wYWdlKCk7
CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gQVhP
YmplY3RDYWNoZTo6Zm9jdXNlZFVJRWxlbWVudEZvclBhZ2UocGFnZSk7Cit9CiAgICAgCiBBY2Nl
c3NpYmlsaXR5QnV0dG9uU3RhdGUgQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2hlY2tib3hPclJhZGlv
VmFsdWUoKSBjb25zdAogewpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw2ICsyNjAsOCBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJp
bGl0eVNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29s
IGlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IAogICAgIHZpcnR1YWwgYm9vbCBpc0FuY2hvcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzQXR0YWNobWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzSGVhZGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0z
MDksNiArMzExLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNCdXR0b24oKSBjb25zdCB7IHJldHVy
biByb2xlVmFsdWUoKSA9PSBCdXR0b25Sb2xlOyB9CiAgICAgYm9vbCBpc0xpc3RJdGVtKCkgY29u
c3QgeyByZXR1cm4gcm9sZVZhbHVlKCkgPT0gTGlzdEl0ZW1Sb2xlOyB9CiAgICAgYm9vbCBpc0No
ZWNrYm94T3JSYWRpbygpIGNvbnN0IHsgcmV0dXJuIGlzQ2hlY2tib3goKSB8fCBpc1JhZGlvQnV0
dG9uKCk7IH0KKyAgICBib29sIGlzU2Nyb2xsVmlldygpIGNvbnN0IHsgcmV0dXJuIHJvbGVWYWx1
ZSgpID09IFNjcm9sbEFyZWFSb2xlOyB9CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzQ2hlY2tl
ZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRW5hYmxlZCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0zMzIsNiArMzM1LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBjYW5TZXRGb2N1c0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGNhblNldFRleHRSYW5nZUF0dHJpYnV0ZXMoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRWYWx1ZUF0dHJpYnV0ZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGNhblNldE51bWVyaWNW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGNhblNldFNl
bGVjdGVkQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgY2FuU2V0U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGNhblNldEV4cGFuZGVkQXR0cmlidXRlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KQEAgLTM3Myw5ICszNzcsOSBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVk
IG9uIHRoZSByb290IEFYIG9iamVjdCB0byByZXR1cm4gdGhlIGRlZXBlc3QgYXZhaWxhYmxlIGVs
ZW1lbnQuCiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5SGl0
VGVzdChjb25zdCBJbnRQb2ludCYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICAvLyBDYWxsZWQg
b24gdGhlIEFYIG9iamVjdCBhZnRlciB0aGUgcmVuZGVyIHRyZWUgZGV0ZXJtaW5lcyB3aGljaCBp
cyB0aGUgcmlnaHQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC4KLSAgICB2aXJ0dWFsIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGVsZW1lbnRBY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2lu
dCYpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdCo+KHRoaXMp
OyB9CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBlbGVtZW50QWNjZXNzaWJpbGl0
eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgQWNjZXNzaWJp
bGl0eU9iamVjdCogZm9jdXNlZFVJRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2
aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZvY3VzZWRVSUVsZW1lbnQoKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxhc3RDaGlsZCgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KQEAgLTM5MSw3ICszOTUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB0aXRsZVVJRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KICAgICB2aXJ0dWFsIGJvb2wgZXhwb3Nlc1RpdGxlVUlFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogY29ycmVzcG9uZGlu
Z0NvbnRyb2xGb3JMYWJlbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KKyAgICB2aXJ0
dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRp
b24pIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICAKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlS
b2xlIGFyaWFSb2xlQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gVW5rbm93blJvbGU7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNQcmVzZW50YXRpb25hbENoaWxkT2ZBcmlhUm9sZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGFyaWFSb2xlSGFzUHJlc2VudGF0aW9u
YWxDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC00MDIsNyArNDA3LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGFyaWFEZXNjcmliZWRCeUF0dHJpYnV0ZSgpIGNv
bnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CiAgICAgdmlydHVhbCBTdHJpbmcgYWNjZXNzaWJpbGl0
eURlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KIAotICAgIHZpcnR1YWwg
QVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2
aXJ0dWFsIEFYT2JqZWN0Q2FjaGUqIGF4T2JqZWN0Q2FjaGUoKSBjb25zdDsKICAgICBBWElEIGF4
T2JqZWN0SUQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAgICAgdm9pZCBzZXRBWE9iamVjdElE
KEFYSUQgYXhPYmplY3RJRCkgeyBtX2lkID0gYXhPYmplY3RJRDsgfQogICAgIApAQCAtNDExLDcg
KzQxNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEVsZW1lbnQqIGFjdGlvbkVsZW1lbnQoKSBj
b25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBJbnRSZWN0IGJvdW5kaW5nQm94UmVjdCgp
IGNvbnN0IHsgcmV0dXJuIEludFJlY3QoKTsgfQogICAgIHZpcnR1YWwgSW50UmVjdCBlbGVtZW50
UmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGVsZW1lbnRSZWN0KCku
c2l6ZSgpOyB9CiAgICAgdmlydHVhbCBJbnRQb2ludCBjbGlja1BvaW50KCkgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIFBsYWluVGV4dFJhbmdlIHNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3QgeyByZXR1
cm4gUGxhaW5UZXh0UmFuZ2UoKTsgfQpAQCAtNDQyLDYgKzQ0Nyw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRUZXh0KGNvbnN0IFN0cmluZyYpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBzZXRTZWxlY3RlZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0VmFsdWUoZmxvYXQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3RlZChi
b29sKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRSb3dzKEFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciYpIHsgfQogICAgIApAQCAtNDU5LDcgKzQ2NSw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRyZW4oKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2
ZUNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBoYXND
aGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1faGF2ZUNoaWxkcmVuOyB9Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RlZENoaWxk
cmVuKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB2
aXNpYmxlQ2hpbGRyZW4oQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgeyB9CiAgICAgdmly
dHVhbCB2b2lkIHRhYkNoaWxkcmVuKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIHsgfQpJ
bmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw3ICs0MzQs
MTUgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlcgogICAgICAgICAg
ICAgcmV0dXJuIHBhcmVudDsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUo
KS0+Z2V0T3JDcmVhdGUocmVuZGVyUGFyZW50T2JqZWN0KCkpOworICAgIFJlbmRlck9iamVjdCog
cGFyZW50T2JqID0gcmVuZGVyUGFyZW50T2JqZWN0KCk7CisgICAgaWYgKHBhcmVudE9iaikKKyAg
ICAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocGFyZW50T2JqKTsKKyAg
ICAKKyAgICAvLyBXZWJBcmVhJ3MgcGFyZW50IHNob3VsZCBiZSB0aGUgc2Nyb2xsIHZpZXcgY29u
dGFpbmluZyBpdC4KKyAgICBpZiAoaXNXZWJBcmVhKCkpCisgICAgICAgIHJldHVybiBheE9iamVj
dENhY2hlKCktPmdldE9yQ3JlYXRlKG1fcmVuZGVyZXItPmZyYW1lKCktPnZpZXcoKSk7CisgICAg
CisgICAgcmV0dXJuIDA7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNX
ZWJBcmVhKCkgY29uc3QKQEAgLTIzMTYsMTIgKzIzMjQsNiBAQCBXaWRnZXQqIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OndpZGdlCiAgICAgcmV0dXJuIHRvUmVuZGVyV2lkZ2V0KG1fcmVuZGVy
ZXIpLT53aWRnZXQoKTsKIH0KIAotQVhPYmplY3RDYWNoZSogQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YXhPYmplY3RDYWNoZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcmVuZGVyZXIpOwot
ICAgIHJldHVybiBtX3JlbmRlcmVyLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCk7Ci19Ci0K
IEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2li
aWxpdHlQYXJlbnRGb3JJbWFnZU1hcChIVE1MTWFwRWxlbWVudCogbWFwKSBjb25zdAogewogICAg
IC8vIGZpbmQgYW4gaW1hZ2UgdGhhdCBpcyB1c2luZyB0aGlzIG1hcApAQCAtMjczOSw4ICsyNzQx
LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlcgogICAgIAogICAg
IFJlbmRlckxheWVyKiBsYXllciA9IHRvUmVuZGVyQm94KG1fcmVuZGVyZXIpLT5sYXllcigpOwog
ICAgICAKLSAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25s
eSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlKTsK
KyAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhp
dFRlc3RSZXF1ZXN0OjpBY3RpdmUpOwogICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdCA9
IEhpdFRlc3RSZXN1bHQocG9pbnQpOwogICAgIGxheWVyLT5oaXRUZXN0KHJlcXVlc3QsIGhpdFRl
c3RSZXN1bHQpOwogICAgIGlmICghaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKSkKQEAgLTI3NzUs
MTUgKzI3NzYsNiBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6Zm9jdXNlZFVJRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgUGFnZSogcGFn
ZSA9IG1fcmVuZGVyZXItPmRvY3VtZW50KCktPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIEFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVsZW1l
bnRGb3JQYWdlKHBhZ2UpOwotfQotCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNo
b3VsZEZvY3VzQWN0aXZlRGVzY2VuZGFudCgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhcmlhUm9s
ZUF0dHJpYnV0ZSgpKSB7CkBAIC0zMzE1LDggKzMzMDcsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnVwZGF0ZUNoCiAgICAgaWYgKG5lZWRzVG9VcGRhdGVDaGlsZHJlbigpKQog
ICAgICAgICBjbGVhckNoaWxkcmVuKCk7ICAgICAgICAKICAgICAKLSAgICBpZiAoIWhhc0NoaWxk
cmVuKCkpCi0gICAgICAgIGFkZENoaWxkcmVuKCk7ICAgIAorICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKIH0KICAgICAKIGNvbnN0IEFjY2Vzc2li
aWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6Y2hpbGRyZW4oKQpAQCAtMzM1NSw2ICszMzQ2LDEzIEBAIHZvaWQgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2hpbGQKICAgICAgICAgfQogICAgIH0KICAgICAKKyAg
ICAvLyBGcmFtZVZpZXcncyBuZWVkIHRvIGJlIGluc2VydGVkIGludG8gdGhlIEFYIGhpZXJhcmNo
eSB3aGVuIGVuY291bnRlcmVkLgorICAgIGlmIChpc0F0dGFjaG1lbnQoKSkgeworICAgICAgICBX
aWRnZXQqIHdpZGdldCA9IHdpZGdldEZvckF0dGFjaG1lbnRWaWV3KCk7CisgICAgICAgIGlmICh3
aWRnZXQgJiYgd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICAgICAgbV9jaGlsZHJlbi5h
cHBlbmQoYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSh3aWRnZXQpKTsKKyAgICB9CisgICAg
CiAgICAgLy8gZm9yIGEgUmVuZGVySW1hZ2UsIGFkZCB0aGUgPGFyZWE+IGVsZW1lbnRzIGFzIGlu
ZGl2aWR1YWwgYWNjZXNzaWJpbGl0eSBvYmplY3RzCiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IGNzc0JveCA9IHJlbmRlckJveE1vZGVsT2JqZWN0KCk7CiAgICAgaWYgKGNzc0JveCAmJiBjc3NC
b3gtPmlzUmVuZGVySW1hZ2UoKSkgewpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNiw3ICsxMjYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgbGF5b3V0Q291
bnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBlc3RpbWF0ZWRMb2FkaW5nUHJvZ3Jlc3Mo
KSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZvY3VzZWRV
SUVsZW1lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZpcnN0
Q2hpbGQoKSBjb25zdDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxhc3RDaGls
ZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcHJldmlvdXNTaWJs
aW5nKCkgY29uc3Q7CkBAIC0xNDcsOCArMTQ2LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBhcmlhUm9sZUhhc1ByZXNlbnRhdGlvbmFsQ2hpbGRyZW4oKSBjb25zdDsKICAgICB2b2lkIHVw
ZGF0ZUFjY2Vzc2liaWxpdHlSb2xlKCk7CiAgICAgCi0gICAgdmlydHVhbCBBWE9iamVjdENhY2hl
KiBheE9iamVjdENhY2hlKCkgY29uc3Q7Ci0KICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIG9uIHRo
ZSByb290IGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRvIGtpY2sgb2ZmIGEgaGl0IHRlc3QuCiAgICAg
dmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJ
bnRQb2ludCYpIGNvbnN0OwogCkBAIC0yOTAsNyArMjg3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGFkZFJhZGlvQnV0dG9uR3JvdXBNZW1iZXJzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYg
bGlua2VkVUlFbGVtZW50cykgY29uc3Q7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogaW50ZXJu
YWxMaW5rRWxlbWVudCgpIGNvbnN0OwogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vzc2li
aWxpdHlJbWFnZU1hcEhpdFRlc3QoSFRNTEFyZWFFbGVtZW50KiwgY29uc3QgSW50UG9pbnQmKSBj
b25zdDsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1h
Z2VNYXAoSFRNTE1hcEVsZW1lbnQqIG1hcCkgY29uc3Q7CisgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogYWNjZXNzaWJpbGl0eVBhcmVudEZvckltYWdlTWFwKEhUTUxNYXBFbGVtZW50KikgY29uc3Q7
CiAgICAgYm9vbCByZW5kZXJPYmplY3RJc09ic2VydmFibGUoUmVuZGVyT2JqZWN0KikgY29uc3Q7
CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJQYXJlbnRPYmplY3QoKSBjb25zdDsKICAgICAKQEAg
LTMwMCw3ICsyOTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0RWxlbWVudEF0dHJpYnV0ZVZh
bHVlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBib29sKTsKICAgICAKICAgICBTdHJpbmcgYWNjZXNz
aWJpbGl0eURlc2NyaXB0aW9uRm9yRWxlbWVudHMoVmVjdG9yPEVsZW1lbnQqPiAmZWxlbWVudHMp
IGNvbnN0OwotICAgIHZvaWQgZWxlbWVudHNGcm9tQXR0cmlidXRlKFZlY3RvcjxFbGVtZW50Kj4m
IGVsZW1lbnRzLCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdDsKKyAgICB2b2lkIGVs
ZW1lbnRzRnJvbUF0dHJpYnV0ZShWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW50cywgY29uc3QgUXVh
bGlmaWVkTmFtZSYpIGNvbnN0OwogICAgIFN0cmluZyBhcmlhQWNjZXNzaWJpbGl0eURlc2NyaXB0
aW9uKCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBFU3BlYWsgc3BlYWtQcm9wZXJ0eSgpIGNv
bnN0OwpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNj
cm9sbFZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oIgor
CisjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlTY3Jv
bGxiYXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVPd25l
ckVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJQYXJ0LmgiCisjaW5jbHVkZSAiU2Nyb2xsVmll
dy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitBY2Nlc3NpYmlsaXR5U2Nyb2xsVmll
dzo6QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoU2Nyb2xsVmlldyogdmlldykKKyAgICA6IG1fc2Ny
b2xsVmlldyh2aWV3KQoreworfQorCitQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3
PiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6Y3JlYXRlKFNjcm9sbFZpZXcqIHZpZXcpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyh2aWV3KSk7Cit9
CisgICAgCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6c2Ny
b2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5T3JpZW50YXRp
b25WZXJ0aWNhbDoKKyAgICAgICAgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIgPyBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLmdldCgpIDogMDsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlv
bkhvcml6b250YWw6CisgICAgICAgIHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIgPyBtX2hv
cml6b250YWxTY3JvbGxiYXIuZ2V0KCkgOiAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gMDsK
K30KKworY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yJiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6Y2hpbGRyZW4oKQoreworICAgIGlmICghbV9o
YXZlQ2hpbGRyZW4pCisgICAgICAgIGFkZENoaWxkcmVuKCk7CisgICAgcmV0dXJuIG1fY2hpbGRy
ZW47Cit9CisgICAgCit2b2lkIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Ojp1cGRhdGVDaGlsZHJl
bklmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAobV9zY3JvbGxWaWV3LT5ob3Jpem9udGFsU2Nyb2xs
YmFyKCkgJiYgIW1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyID0gYWRkQ2hpbGRTY3JvbGxiYXIobV9zY3JvbGxWaWV3LT5ob3Jpem9udGFsU2Nyb2xs
YmFyKCkpOworICAgIGVsc2UgaWYgKCFtX3Njcm9sbFZpZXctPmhvcml6b250YWxTY3JvbGxiYXIo
KSAmJiBtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgcmVtb3ZlQ2hpbGRTY3JvbGxi
YXIobV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpKTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxWaWV3LT52ZXJ0aWNhbFNjcm9s
bGJhcigpICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyID0gYWRkQ2hpbGRTY3JvbGxiYXIobV9zY3JvbGxWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigp
KTsKKyAgICBlbHNlIGlmICghbV9zY3JvbGxWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigpICYmIG1f
dmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgcmVtb3ZlQ2hpbGRTY3JvbGxiYXIobV92ZXJ0
aWNhbFNjcm9sbGJhci5nZXQoKSk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSAwOwor
ICAgIH0KK30KKyAgICAKK3ZvaWQgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6OnJlbW92ZUNoaWxk
U2Nyb2xsYmFyKEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbGJhcikKK3sKKyAgICBzaXplX3Qg
cG9zID0gbV9jaGlsZHJlbi5maW5kKHNjcm9sbGJhcik7CisgICAgaWYgKHBvcyAhPSBXVEY6Om5v
dEZvdW5kKQorICAgICAgICBtX2NoaWxkcmVuLnJlbW92ZShwb3MpOworfQorICAgIAorQWNjZXNz
aWJpbGl0eVNjcm9sbGJhciogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6OmFkZENoaWxkU2Nyb2xs
YmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKiBzY3JvbGxCYXJP
YmplY3QgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKj4oYXhPYmplY3RDYWNo
ZSgpLT5nZXRPckNyZWF0ZShzY3JvbGxiYXIpKTsKKyAgICBzY3JvbGxCYXJPYmplY3QtPnNldFBh
cmVudCh0aGlzKTsKKyAgICBtX2NoaWxkcmVuLmFwcGVuZChzY3JvbGxCYXJPYmplY3QpOworICAg
IHJldHVybiBzY3JvbGxCYXJPYmplY3Q7Cit9CisgICAgICAgIAordm9pZCBBY2Nlc3NpYmlsaXR5
U2Nyb2xsVmlldzo6YWRkQ2hpbGRyZW4oKQoreworICAgIEFTU0VSVCghbV9oYXZlQ2hpbGRyZW4p
OworICAgIG1faGF2ZUNoaWxkcmVuID0gdHJ1ZTsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiB3ZWJBcmVhID0gd2ViQXJlYU9iamVjdCgpOworICAgIGlmICh3ZWJBcmVhKQorICAgICAg
ICBtX2NoaWxkcmVuLmFwcGVuZCh3ZWJBcmVhKTsKKyAgICAKKyAgICB1cGRhdGVDaGlsZHJlbklm
TmVjZXNzYXJ5KCk7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3Ojp3ZWJBcmVhT2JqZWN0KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2Nyb2xsVmlldy0+
aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgRG9jdW1lbnQqIGRv
YyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KG1fc2Nyb2xsVmlldy5nZXQoKSktPmZyYW1lKCkt
PmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2MgfHwgIWRvYy0+cmVuZGVyZXIoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShkb2Mt
PnJlbmRlcmVyKCkpOworfQorCisgICAgCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmls
aXR5U2Nyb2xsVmlldzo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmIHBvaW50
KSBjb25zdAoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHdlYkFyZWEgPSB3ZWJBcmVhT2Jq
ZWN0KCk7CisgICAgaWYgKCF3ZWJBcmVhKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBp
ZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZWxlbWVu
dFJlY3QoKS5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBtX2hvcml6b250YWxTY3Jv
bGxiYXIuZ2V0KCk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIgJiYgbV92ZXJ0aWNhbFNj
cm9sbGJhci0+ZWxlbWVudFJlY3QoKS5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOworICAgIAorICAgIHJldHVybiB3ZWJBcmVhLT5hY2Nl
c3NpYmlsaXR5SGl0VGVzdChwb2ludCk7Cit9CisgICAgCitEb2N1bWVudCogQWNjZXNzaWJpbGl0
eVNjcm9sbFZpZXc6OmRvY3VtZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2Nyb2xsVmlldy0+
aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KG1fc2Nyb2xsVmlldy5nZXQoKSktPmZyYW1lKCktPmRvY3VtZW50
KCk7Cit9CisKK0ludFJlY3QgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6OmVsZW1lbnRSZWN0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxWaWV3LT5mcmFtZVJlY3QoKTsKK30KKworQWNj
ZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6OnBhcmVudE9iamVjdCgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX3Njcm9sbFZpZXctPmlzRnJhbWVWaWV3KCkpCisgICAgICAg
IHJldHVybiAwOworICAgIAorICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBzdGF0
aWNfY2FzdDxGcmFtZVZpZXcqPihtX3Njcm9sbFZpZXcuZ2V0KCkpLT5mcmFtZSgpLT5vd25lckVs
ZW1lbnQoKTsKKyAgICBpZiAob3duZXIgJiYgb3duZXItPnJlbmRlclBhcnQoKSkKKyAgICAgICAg
cmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUob3duZXItPnJlbmRlclBhcnQoKS0+
cGFyZW50KCkpOworICAgIAorICAgIHJldHVybiAwOworfQorICAgIAorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZSAgICAKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Ny
b2xsVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5U2Nyb2xsVmlldy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlTY3JvbGxWaWV3LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXdfaAorI2RlZmluZSBBY2Nlc3NpYmlsaXR5U2Ny
b2xsVmlld19oCisKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI7CitjbGFzcyBT
Y3JvbGxiYXI7CitjbGFzcyBTY3JvbGxWaWV3OworICAgIAorY2xhc3MgQWNjZXNzaWJpbGl0eVNj
cm9sbFZpZXcgOiBwdWJsaWMgQWNjZXNzaWJpbGl0eU9iamVjdCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+IGNyZWF0ZShTY3JvbGxWaWV3
Kik7ICAgIAorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gU2Nyb2xsQXJlYVJvbGU7IH0KKyAgICBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3KCkg
Y29uc3QgeyByZXR1cm4gbV9zY3JvbGxWaWV3LmdldCgpOyB9CisgICAgCitwcml2YXRlOgorICAg
IEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KFNjcm9sbFZpZXcqKTsKKyAgICAKKyAgICB2aXJ0dWFs
IGJvb2wgYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzY3JvbGxCYXIoQWNj
ZXNzaWJpbGl0eU9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRy
ZW4oKTsKKyAgICB2aXJ0dWFsIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OworICAgIHZpcnR1
YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9p
bnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciYgY2hpbGRyZW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2Fy
eSgpOworICAgIAorICAgIHZpcnR1YWwgSW50UmVjdCBlbGVtZW50UmVjdCgpIGNvbnN0OworICAg
IHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0KCkgY29uc3Q7CisgICAg
CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogd2ViQXJlYU9iamVjdCgpIGNvbnN0OworICAgIEFj
Y2Vzc2liaWxpdHlTY3JvbGxiYXIqIGFkZENoaWxkU2Nyb2xsYmFyKFNjcm9sbGJhciopOworICAg
IHZvaWQgcmVtb3ZlQ2hpbGRTY3JvbGxiYXIoQWNjZXNzaWJpbGl0eU9iamVjdCopOworICAgIAor
ICAgIFJlZlB0cjxTY3JvbGxWaWV3PiBtX3Njcm9sbFZpZXc7CisgICAgUmVmUHRyPEFjY2Vzc2li
aWxpdHlPYmplY3Q+IG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICBSZWZQdHI8QWNjZXNzaWJp
bGl0eU9iamVjdD4gbV92ZXJ0aWNhbFNjcm9sbGJhcjsKK307CisKK2lubGluZSBBY2Nlc3NpYmls
aXR5U2Nyb2xsVmlldyogdG9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc0FjY2Vzc2li
aWxpdHlTY3JvbGxWaWV3KCkpOworICAgIGlmICghb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3KCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyo+KG9iamVjdCk7Cit9CisgICAgCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlld19oCisKSW5k
ZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5j
cHAJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlTY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyNSArMjksNzcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmgiCiAKKyNp
bmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVk
ZSAiU2Nyb2xsVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OkFjY2Vzc2liaWxpdHlTY3JvbGxiYXIo
KQotICAgIDogbV9zY3JvbGxiYXIoMCkKK0FjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OkFjY2Vzc2li
aWxpdHlTY3JvbGxiYXIoU2Nyb2xsYmFyICpzY3JvbGxiYXIpCisgICAgOiBtX3Njcm9sbGJhcihz
Y3JvbGxiYXIpCisgICAgLCBtX3BhcmVudCgwKQogeworICAgIEFTU0VSVChzY3JvbGxiYXIpOwog
fQogCi1QYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI+IEFjY2Vzc2liaWxpdHlTY3Jv
bGxiYXI6OmNyZWF0ZSgpCitQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI+IEFjY2Vz
c2liaWxpdHlTY3JvbGxiYXI6OmNyZWF0ZShTY3JvbGxiYXIgKnNjcm9sbGJhcikKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIpOworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eVNjcm9sbGJhcihzY3JvbGxiYXIpKTsKIH0KKyAgICAK
K0ludFJlY3QgQWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6ZWxlbWVudFJlY3QoKSBjb25zdAorewor
ICAgIGlmICghbV9zY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgCisg
ICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKK30KKyAgICAKK0RvY3VtZW50KiBB
Y2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpkb2N1bWVudCgpIGNvbnN0Cit7CisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogcGFyZW50ID0gcGFyZW50T2JqZWN0KCk7CisgICAgaWYgKCFwYXJlbnQpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBwYXJlbnQtPmRvY3VtZW50KCk7Cit9CisKK0Fj
Y2Vzc2liaWxpdHlPcmllbnRhdGlvbiBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpvcmllbnRhdGlv
bigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHlPcmllbnRhdGlvbkhvcml6b250YWw7CisKKyAgICBpZiAobV9zY3JvbGxiYXItPm9y
aWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHlPcmllbnRhdGlvbkhvcml6b250YWw7CisgICAgaWYgKG1fc2Nyb2xsYmFyLT5vcmll
bnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eU9yaWVudGF0aW9uVmVydGljYWw7CiAKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9yaWVu
dGF0aW9uSG9yaXpvbnRhbDsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjppc0Vu
YWJsZWQoKSBjb25zdAoreworICAgIGlmICghbV9zY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gbV9zY3JvbGxiYXItPmVuYWJsZWQoKTsKK30KKyAgICAKIGZsb2F0
IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OnZhbHVlRm9yUmFuZ2UoKSBjb25zdAogewogICAgIGlm
ICghbV9zY3JvbGxiYXIpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX3Njcm9sbGJh
ci0+Y3VycmVudFBvcygpOworCisgICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkg
LyBtX3Njcm9sbGJhci0+bWF4aW11bSgpOwogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlTY3JvbGxi
YXI6OnNldFZhbHVlKGZsb2F0IHZhbHVlKQoreworICAgIGlmICghbV9zY3JvbGxiYXIpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBmbG9hdCBuZXdWYWx1ZSA9IHZhbHVlICogbV9zY3JvbGxi
YXItPm1heGltdW0oKTsKKyAgICAKKyAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUobmV3VmFsdWUs
IFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsgICAgCit9CisgICAgCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVNjcm9sbGJhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyLmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMzAgKzM3
LDM0IEBAIGNsYXNzIFNjcm9sbGJhcjsKIAogY2xhc3MgQWNjZXNzaWJpbGl0eVNjcm9sbGJhciA6
IHB1YmxpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyPiBjcmVhdGUoKTsKLQotICAgIHZvaWQgc2V0U2Ny
b2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7IG1fc2Nyb2xsYmFyID0gc2Nyb2xsYmFyOyB9
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVNjcm9sbGJhcj4gY3JlYXRlKFNj
cm9sbGJhciopOwogCiAgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBt
X3Njcm9sbGJhci5nZXQoKTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVNj
cm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgQWNjZXNzaWJp
bGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gU2Nyb2xsQmFyUm9sZTsgfQotCi0g
ICAgdmlydHVhbCBmbG9hdCB2YWx1ZUZvclJhbmdlKCkgY29uc3Q7Ci0KKyAgICB2b2lkIHNldFBh
cmVudChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQpIHsgbV9wYXJlbnQgPSBwYXJlbnQ7IH0K
KyAgICAKIHByaXZhdGU6Ci0gICAgQWNjZXNzaWJpbGl0eVNjcm9sbGJhcigpOworICAgIEFjY2Vz
c2liaWxpdHlTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CiAKICAgICB2aXJ0dWFsIGJvb2wgYWNjZXNz
aWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIGNhblNldFZhbHVlQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBjYW5TZXROdW1lcmljVmFsdWUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAK
LSAgICAvLyBUaGVzZSBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZCBzaW5jZSB0aGUgQWNjZXNzaWJp
bGl0eVNjcm9sbGJhciBpcyBub3QgcGFydCBvZgotICAgIC8vIHRoZSBhY2Nlc3NpYmlsaXR5IHRy
ZWUuCi0gICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyByZXR1cm4gSW50U2l6ZSgpOyB9Ci0gICAgdmlydHVhbCBJbnRSZWN0IGVsZW1lbnRSZWN0
KCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIEludFJlY3QoKTsgfQotICAg
IHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0KCkgY29uc3QgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgQWNj
ZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7
IH0KKyAgICB2aXJ0dWFsIEludFJlY3QgZWxlbWVudFJlY3QoKSBjb25zdDsKKyAgICAKKyAgICB2
aXJ0dWFsIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIFNjcm9s
bEJhclJvbGU7IH0KKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBvcmllbnRh
dGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIGlzRW5hYmxlZCgpIGNvbnN0OworICAgIAorICAgIC8vIEFzc3VtZXMg
ZmxvYXQgWzAuLjFdCisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGZsb2F0KTsKKyAgICB2aXJ0
dWFsIGZsb2F0IHZhbHVlRm9yUmFuZ2UoKSBjb25zdDsKIAogICAgIFJlZlB0cjxTY3JvbGxiYXI+
IG1fc2Nyb2xsYmFyOworICAgIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBtX29yaWVudGF0aW9u
OworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG1fcGFyZW50OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5
T2JqZWN0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNj
ZXNzaWJpbGl0eU9iamVjdE1hYy5tbQkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI5LDE2ICsyOSwyMyBAQAogI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkKIAogI2ltcG9ydCAiQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIuaCIKKyNpbXBvcnQgIldpZGdldC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eUln
bm9yZUF0dGFjaG1lbnQoKSBjb25zdAogewotICAgIE5TVmlldyogYXR0YWNobWVudCA9IFt3cmFw
cGVyKCkgYXR0YWNobWVudFZpZXddOwotICAgIGlmICghYXR0YWNobWVudCkKKyAgICAvLyBGcmFt
ZVZpZXcgYXR0YWNobWVudHMgYXJlIG5vdyBoYW5kbGVkIGJ5IEFjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3LCAKKyAgICAvLyBzbyBpZiB0aGlzIGlzIHRoZSBhdHRhY2htZW50LCBpdCBzaG91bGQgYmUg
aWdub3JlZC4KKyAgICBXaWRnZXQqIHdpZGdldCA9IDA7CisgICAgaWYgKGlzQXR0YWNobWVudCgp
ICYmICh3aWRnZXQgPSB3aWRnZXRGb3JBdHRhY2htZW50VmlldygpKSAmJiB3aWRnZXQtPmlzRnJh
bWVWaWV3KCkpCiAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKFt3cmFwcGVyKCkgYXR0
YWNobWVudFZpZXddKQorICAgICAgICByZXR1cm4gW1t3cmFwcGVyKCkgYXR0YWNobWVudFZpZXdd
IGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRdOwogICAgIAotICAgIHJldHVybiBbYXR0YWNobWVudCBh
Y2Nlc3NpYmlsaXR5SXNJZ25vcmVkXTsKKyAgICAvLyBBdHRhY2htZW50cyBhcmUgaWdub3JlZCBi
eSBkZWZhdWx0ICh1bmxlc3Mgd2UgZGV0ZXJtaW5lIHRoYXQgd2Ugc2hvdWxkIGV4cG9zZSB0aGVt
KS4KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5UGxhdGZvcm1JbmNsdWRlc09iamVjdCgp
IGNvbnN0CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0JKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsNyBAQAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUxp
c3RCb3guaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlMaXN0LmgiCiAjaW1wb3J0ICJBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmgiCisjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5o
IgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVRhYmxlLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
VGFibGVDZWxsLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VGFibGVSb3cuaCIKQEAgLTQzLDYg
KzQ0LDcgQEAKICNpbXBvcnQgIkNvbG9yTWFjLmgiCiAjaW1wb3J0ICJFZGl0b3JDbGllbnQuaCIK
ICNpbXBvcnQgIkZyYW1lLmgiCisjaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2ltcG9y
dCAiSFRNTEFuY2hvckVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxBcmVhRWxlbWVudC5oIgogI2lt
cG9ydCAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCkBAIC01Myw2ICs1NSw3IEBACiAjaW1wb3J0
ICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAi
UmVuZGVyV2lkZ2V0LmgiCisjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCiAjaW1wb3J0ICJTZWxlY3Rp
b25Db250cm9sbGVyLmgiCiAjaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiVGV4
dEl0ZXJhdG9yLmgiCkBAIC03MDQsNiArNzA3LDcgQEAgLSAoTlNBcnJheSopYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZU5hbWVzCiAgICAgc3RhdGljIE5TQXJyYXkqIG91dGxpbmVBdHRycyA9IG5pbDsK
ICAgICBzdGF0aWMgTlNBcnJheSogb3V0bGluZVJvd0F0dHJzID0gbmlsOwogICAgIHN0YXRpYyBO
U0FycmF5KiBidXR0b25BdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogc2Nyb2xsVmll
d0F0dHJzID0gbmlsOwogICAgIE5TTXV0YWJsZUFycmF5KiB0ZW1wQXJyYXk7CiAgICAgaWYgKGF0
dHJpYnV0ZXMgPT0gbmlsKSB7CiAgICAgICAgIGF0dHJpYnV0ZXMgPSBbW05TQXJyYXkgYWxsb2Nd
IGluaXRXaXRoT2JqZWN0czogTlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZSwKQEAgLTk0NCw2
ICs5NDgsMTQgQEAgLSAoTlNBcnJheSopYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzCiAgICAg
ICAgIG91dGxpbmVSb3dBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1w
QXJyYXldOwogICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwogICAgIH0KKyAgICBpZiAoc2Ny
b2xsVmlld0F0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOworICAgICAgICBbdGVtcEFycmF5
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlDb250ZW50c0F0dHJpYnV0ZV07CisgICAgICAgIFt0
ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUhvcml6b250YWxTY3JvbGxCYXJBdHRy
aWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWZXJ0
aWNhbFNjcm9sbEJhckF0dHJpYnV0ZV07CisgICAgICAgIHNjcm9sbFZpZXdBdHRycyA9IFtbTlNB
cnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5
IHJlbGVhc2VdOworICAgIH0KICAgICAKICAgICBOU0FycmF5ICpvYmplY3RBdHRyaWJ1dGVzID0g
YXR0cmlidXRlczsKICAgICAKQEAgLTEwMTEsNiArMTAyMyw5IEBAIC0gKE5TQXJyYXkqKWFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVOYW1lcwogICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc01lbnVJdGVt
KCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBtZW51SXRlbUF0dHJzOwogCisgICAgZWxz
ZSBpZiAobV9vYmplY3QtPmlzU2Nyb2xsVmlldygpKQorICAgICAgICBvYmplY3RBdHRyaWJ1dGVz
ID0gc2Nyb2xsVmlld0F0dHJzOworICAgIAogICAgIE5TQXJyYXkgKmFkZGl0aW9uYWxBdHRyaWJ1
dGVzID0gW3NlbGYgYWRkaXRpb25hbEFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc107CiAgICAg
aWYgKFthZGRpdGlvbmFsQXR0cmlidXRlcyBjb3VudF0pCiAgICAgICAgIG9iamVjdEF0dHJpYnV0
ZXMgPSBbb2JqZWN0QXR0cmlidXRlcyBhcnJheUJ5QWRkaW5nT2JqZWN0c0Zyb21BcnJheTphZGRp
dGlvbmFsQXR0cmlidXRlc107CkBAIC0xMDM0LDYgKzEwNDksMTQgQEAgLSAoTlNBcnJheSopcmVu
ZGVyV2lkZ2V0Q2hpbGRyZW4KICAgICByZXR1cm4gWyh3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkp
IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTogTlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRy
aWJ1dGVdOwogfQogCistIChpZClyZW1vdGVBY2Nlc3NpYmlsaXR5UGFyZW50T2JqZWN0Cit7Cisg
ICAgaWYgKCFtX29iamVjdCB8fCAhbV9vYmplY3QtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgCisgICAgcmV0dXJuIG1fb2JqZWN0LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5s
b2FkZXIoKS0+Y2xpZW50KCktPmFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKTsKK30KKwogc3Rh
dGljIHZvaWQgY29udmVydFRvVmVjdG9yKE5TQXJyYXkqIGFycmF5LCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHZlY3RvcikKIHsKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBbYXJyYXkgY291bnRdOwpAQCAtMTA3NSwxNiArMTA5OCw0MSBAQCAtIChXZWJD
b3JlVGV4dE1hcmtlclJhbmdlKil0ZXh0TWFya2VyUmFuCiAtIChOU1ZhbHVlKilwb3NpdGlvbgog
ewogICAgIEludFJlY3QgcmVjdCA9IG1fb2JqZWN0LT5lbGVtZW50UmVjdCgpOworICAgIE5TUG9p
bnQgcG9pbnQ7CiAgICAgCi0gICAgLy8gVGhlIENvY29hIGFjY2Vzc2liaWxpdHkgQVBJIHdhbnRz
IHRoZSBsb3dlci1sZWZ0IGNvcm5lci4KLSAgICBOU1BvaW50IHBvaW50ID0gTlNNYWtlUG9pbnQo
cmVjdC54KCksIHJlY3QuYm90dG9tKCkpOwogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9v
YmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7Ci0gICAgaWYgKGZyYW1lVmlldykgewotICAgICAg
ICBOU1ZpZXcqIHZpZXcgPSBmcmFtZVZpZXctPmRvY3VtZW50VmlldygpOwotICAgICAgICBwb2lu
dCA9IFtbdmlldyB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46IFt2aWV3IGNvbnZlcnRQb2lu
dDogcG9pbnQgdG9WaWV3Om5pbF1dOworICAgIGlkIHJlbW90ZVBhcmVudCA9IFtzZWxmIHJlbW90
ZUFjY2Vzc2liaWxpdHlQYXJlbnRPYmplY3RdOworICAgIGlmIChyZW1vdGVQYXJlbnQpIHsKKyAg
ICAgICAgcG9pbnQgPSBOU01ha2VQb2ludChyZWN0LngoKSwgcmVjdC55KCkpOworICAgICAgICAK
KyAgICAgICAgTlNQb2ludCByZW1vdGVQb3NpdGlvbiA9IFtbcmVtb3RlUGFyZW50IGFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlQb3NpdGlvbkF0dHJpYnV0ZV0gcG9p
bnRWYWx1ZV07CisgICAgICAgIE5TU2l6ZSByZW1vdGVTaXplID0gW1tyZW1vdGVQYXJlbnQgYWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVNpemVBdHRyaWJ1dGVdIHNp
emVWYWx1ZV07CisKKyAgICAgICAgLy8gR2V0IHRoZSB5IHBvc2l0aW9uIG9mIHRoZSBXS1ZpZXcg
KHdlIGhhdmUgdG8gc2NyZWVuLWZsaXAgYW5kIGdvIGZyb20gYm90dG9tIGxlZnQgdG8gdG9wIGxl
ZnQpLgorICAgICAgICBDR0Zsb2F0IHNjcmVlbkhlaWdodCA9IFtbW05TU2NyZWVuIHNjcmVlbnNd
IG9iamVjdEF0SW5kZXg6MF0gZnJhbWVdLnNpemUuaGVpZ2h0OworICAgICAgICByZW1vdGVQb3Np
dGlvbi55ID0gKHNjcmVlbkhlaWdodCAtIHJlbW90ZVBvc2l0aW9uLnkpIC0gcmVtb3RlU2l6ZS5o
ZWlnaHQ7CisgICAgICAgIAorICAgICAgICBOU1BvaW50IHNjcm9sbFBvc2l0aW9uID0gTlNNYWtl
UG9pbnQoMCwgMCk7CisgICAgICAgIGlmIChmcmFtZVZpZXcgJiYgIW1fb2JqZWN0LT5pc1Njcm9s
bGJhcigpICYmICFtX29iamVjdC0+aXNTY3JvbGxWaWV3KCkpIHsKKyAgICAgICAgICAgIEludFBv
aW50IGZyYW1lU2Nyb2xsUG9zID0gZnJhbWVWaWV3LT5zY3JvbGxQb3NpdGlvbigpOworICAgICAg
ICAgICAgc2Nyb2xsUG9zaXRpb24gPSBOU01ha2VQb2ludChmcmFtZVNjcm9sbFBvcy54KCksIGZy
YW1lU2Nyb2xsUG9zLnkoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHBvaW50Lngg
Kz0gcmVtb3RlUG9zaXRpb24ueCAtIHNjcm9sbFBvc2l0aW9uLng7CisgICAgICAgIC8vIFNldCB0
aGUgbmV3IHBvc2l0aW9uLCB3aGljaCBtZWFucyBnZXR0aW5nIGJvdHRvbSB5LCBhbmQgdGhlbiBm
bGlwcGluZyB0byBzY3JlZW4gY29vcmRpbmF0ZXMuCisgICAgICAgIHBvaW50LnkgPSBzY3JlZW5I
ZWlnaHQgLSAocG9pbnQueSArIHJlbW90ZVBvc2l0aW9uLnkgKyByZWN0LmhlaWdodCgpIC0gc2Ny
b2xsUG9zaXRpb24ueSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvLyBUaGUgQ29jb2Eg
YWNjZXNzaWJpbGl0eSBBUEkgd2FudHMgdGhlIGxvd2VyLWxlZnQgY29ybmVyLgorICAgICAgICBw
b2ludCA9IE5TTWFrZVBvaW50KHJlY3QueCgpLCByZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChmcmFtZVZpZXcpIHsKKyAgICAgICAgICAgIE5TVmlldyogdmlldyA9IGZyYW1l
Vmlldy0+ZG9jdW1lbnRWaWV3KCk7CisgICAgICAgICAgICBwb2ludCA9IFtbdmlldyB3aW5kb3dd
IGNvbnZlcnRCYXNlVG9TY3JlZW46IFt2aWV3IGNvbnZlcnRQb2ludDogcG9pbnQgdG9WaWV3Om5p
bF1dOworICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFBv
aW50OiBwb2ludF07CisgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFBvaW50OnBvaW50XTsK
IH0KIAogdHlwZWRlZiBIYXNoTWFwPGludCwgTlNTdHJpbmcqPiBBY2Nlc3NpYmlsaXR5Um9sZU1h
cDsKQEAgLTEzOTAsNiArMTQzOCwyNyBAQCAtIChOU1N0cmluZyopcm9sZURlc2NyaXB0aW9uCiAg
ICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbihOU0FjY2Vzc2liaWxpdHlV
bmtub3duUm9sZSwgbmlsKTsKIH0KIAorLSAoaWQpc2Nyb2xsVmlld1BhcmVudAoreworICAgIGlm
ICghbV9vYmplY3QgfHwgIW1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgLy8gSWYgdGhpcyBzY3JvbGwgdmlldyBwcm92
aWRlcyBpdCdzIHBhcmVudCBvYmplY3QgKGJlY2F1c2UgaXQncyBhIHN1Yi1mcmFtZSksIHRoZW4K
KyAgICAvLyB3ZSBzaG91bGQgbm90IGZpbmQgdGhlIHJlbW90ZUFjY2Vzc2liaWxpdHlQYXJlbnQu
CisgICAgaWYgKG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyogc2Nyb2xsVmlldyA9IHRvQWNjZXNz
aWJpbGl0eVNjcm9sbFZpZXcobV9vYmplY3QpOworICAgIFNjcm9sbFZpZXcqIHNjcm9sbCA9IHNj
cm9sbFZpZXctPnNjcm9sbFZpZXcoKTsKKyAgICBpZiAoIXNjcm9sbCkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAKKyAgICBpZiAoc2Nyb2xsLT5wbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICBy
ZXR1cm4gc2Nyb2xsLT5wbGF0Zm9ybVdpZGdldCgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJu
IFtzZWxmIHJlbW90ZUFjY2Vzc2liaWxpdHlQYXJlbnRPYmplY3RdOworfQorCiAvLyBGSVhNRTog
c3BsaXQgdXAgdGhpcyBmdW5jdGlvbiBpbiBhIGJldHRlciB3YXkuICAKIC8vIHN1Z2dlc3Rpb25z
OiBVc2UgYSBoYXNoIHRhYmxlIHRoYXQgbWFwcyBhdHRyaWJ1dGUgbmFtZXMgdG8gZnVuY3Rpb24g
Y2FsbHMsCiAvLyBvciBtYXliZSBwb2ludGVycyB0byBtZW1iZXIgZnVuY3Rpb25zCkBAIC0xNDA4
LDExICsxNDc3LDExIEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIK
ICAgICAgICAgcmV0dXJuIFtzZWxmIHJvbGVEZXNjcmlwdGlvbl07CiAKICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlQYXJlbnRBdHRyaWJ1dGVd
KSB7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkp
IHsKLSAgICAgICAgICAgIEZyYW1lVmlldyogZnYgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Kj4obV9vYmplY3QpLT5mcmFtZVZpZXdJZlJlbmRlclZpZXcoKTsKLSAgICAg
ICAgICAgIGlmIChmdikKLSAgICAgICAgICAgICAgICByZXR1cm4gZnYtPnBsYXRmb3JtV2lkZ2V0
KCk7Ci0gICAgICAgIH0KKworICAgICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIHRoZSBwYXJlbnQg
b2YgdGhlIEFYV2ViQXJlYSwgaWYgdGhpcyBpcyBhIHdlYiBhcmVhLgorICAgICAgICBpZCBzY3Jv
bGxWaWV3UGFyZW50ID0gW3NlbGYgc2Nyb2xsVmlld1BhcmVudF07CisgICAgICAgIGlmIChzY3Jv
bGxWaWV3UGFyZW50KQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbFZpZXdQYXJlbnQ7CiAgICAg
ICAgIAogICAgICAgICAvLyBUcmVlIGl0ZW0gKGNoYW5nZWQgdG8gQVhSb3dzKSBjYW4gb25seSBy
ZXBvcnQgdGhlIHRyZWUgKEFYT3V0bGluZSkgYXMgaXRzIHBhcmVudC4KICAgICAgICAgaWYgKG1f
b2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsKQEAgLTE0MjQsNyArMTQ5MywxMCBAQCAtIChpZClhY2Nl
c3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVk
KCktPndyYXBwZXIoKTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9v
YmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAgICAgICBpZiAocGFyZW50KQorICAg
ICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOworICAgICAgICByZXR1cm4gbmlsOwog
ICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNz
aWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSkgewpAQCAtMTYxMyw2ICsxNjg1LDExIEBAIC0gKGlk
KWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKIAogICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVdpbmRvd0F0dHJpYnV0ZV0gfHwK
ICAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlU
b3BMZXZlbFVJRWxlbWVudEF0dHJpYnV0ZV0pIHsKKyAgICAgICAgCisgICAgICAgIGlkIHJlbW90
ZVBhcmVudCA9IFtzZWxmIHJlbW90ZUFjY2Vzc2liaWxpdHlQYXJlbnRPYmplY3RdOworICAgICAg
ICBpZiAocmVtb3RlUGFyZW50KQorICAgICAgICAgICAgcmV0dXJuIFtyZW1vdGVQYXJlbnQgYWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZU5hbWVdOworICAgICAgICAKICAgICAg
ICAgRnJhbWVWaWV3KiBmdiA9IG1fb2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOwogICAgICAg
ICBpZiAoZnYpCiAgICAgICAgICAgICByZXR1cm4gW2Z2LT5wbGF0Zm9ybVdpZGdldCgpIHdpbmRv
d107CkBAIC0xNjQ5LDYgKzE3MjYsMTggQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZh
bHVlOihOU1N0cgogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05T
QXJyYXkoY29udGVudHMpOwogICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5p
c1Njcm9sbFZpZXcoKSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEEgc2Nyb2xsVmlldydzIGNvbnRlbnRzIGFyZSBl
dmVyeXRoaW5nIGV4Y2VwdCB0aGUgc2Nyb2xsIGJhcnMuCisgICAgICAgICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29udGVudHM7CisgICAgICAg
ICAgICB1bnNpZ25lZCBjaGlsZHJlblNpemUgPSBjaGlsZHJlbi5zaXplKCk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY2hpbGRyZW5TaXplOyArK2spIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIWNoaWxkcmVuW2tdLT5pc1Njcm9sbGJhcigpKQorICAgICAgICAgICAgICAg
ICAgICBjb250ZW50cy5hcHBlbmQoY2hpbGRyZW5ba10pOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29udGVudHMpOyAgICAgICAgICAgIAorICAg
ICAgICB9CiAgICAgfSAgICAKICAgICAKICAgICBpZiAobV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0
eVRhYmxlKCkpIHsKQEAgLTE4NzQsNiArMTk2MywxOSBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0
cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQogICAgIAorICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SG9yaXpv
bnRhbFNjcm9sbEJhckF0dHJpYnV0ZV0pIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
c2Nyb2xsQmFyID0gbV9vYmplY3QtPnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25I
b3Jpem9udGFsKTsKKyAgICAgICAgaWYgKHNjcm9sbEJhcikKKyAgICAgICAgICAgIHJldHVybiBz
Y3JvbGxCYXItPndyYXBwZXIoKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbFNj
cm9sbEJhckF0dHJpYnV0ZV0pIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogc2Nyb2xs
QmFyID0gbV9vYmplY3QtPnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25WZXJ0aWNh
bCk7CisgICAgICAgIGlmIChzY3JvbGxCYXIpCisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsQmFy
LT53cmFwcGVyKCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIAogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TGFuZ3VhZ2VBdHRy
aWJ1dGVdKSAKICAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5sYW5ndWFnZSgpOwogICAgIApAQCAt
MTk2Nyw2ICsyMDY5LDcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUhpdFRlc3Q6KE5TUG9pbnQpcG9p
bgogICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKICAgICAgICAgcmV0
dXJuIG5pbDsKIAorICAgIG1fb2JqZWN0LT51cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCk7CiAg
ICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGF4T2JqZWN0ID0gbV9vYmplY3QtPmFjY2Vz
c2liaWxpdHlIaXRUZXN0KEludFBvaW50KHBvaW50KSk7CiAgICAgaWYgKGF4T2JqZWN0KQogICAg
ICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoYXhPYmplY3QtPndy
YXBwZXIoKSk7CkBAIC0yMjM5LDkgKzIzNDIsMTAgQEAgLSAodm9pZClhY2Nlc3NpYmlsaXR5U2V0
VmFsdWU6KGlkKXZhbHVlIAogICAgICAgICBBU1NFUlQobnVtYmVyKTsKICAgICAgICAgbV9vYmpl
Y3QtPnNldEZvY3VzZWQoW251bWJlciBpbnRWYWx1ZV0gIT0gMCk7CiAgICAgfSBlbHNlIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmli
dXRlXSkgewotICAgICAgICBpZiAoIXN0cmluZykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgbV9vYmplY3QtPnNldFZhbHVlKHN0cmluZyk7CisgICAgICAgIGlmIChudW1iZXIgJiYgbV9v
YmplY3QtPmNhblNldE51bWVyaWNWYWx1ZSgpKQorICAgICAgICAgICAgbV9vYmplY3QtPnNldFZh
bHVlKFtudW1iZXIgZmxvYXRWYWx1ZV0pOworICAgICAgICBlbHNlIGlmIChzdHJpbmcpCisgICAg
ICAgICAgICBtX29iamVjdC0+c2V0VmFsdWUoc3RyaW5nKTsKICAgICB9IGVsc2UgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRBdHRyaWJ1
dGVdKSB7CiAgICAgICAgIGlmICghbnVtYmVyKQogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDog
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5MTUsNyArMTkxNSw3IEBAIEFYT2JqZWN0Q2FjaGUqIERvY3VtZW50
OjpheE9iamVjdENhY2hlKCkKICAgICAgICAgcmV0dXJuIGRvYy0+YXhPYmplY3RDYWNoZSgpOwog
ICAgIAogICAgIC8vIHRoaXMgaXMgdGhlIHRvcC1sZXZlbCBkb2N1bWVudCwgc28gaW5zdGFsbCBh
IG5ldyBjYWNoZQotICAgIG1fYXhPYmplY3RDYWNoZSA9IG5ldyBBWE9iamVjdENhY2hlOworICAg
IG1fYXhPYmplY3RDYWNoZSA9IG5ldyBBWE9iamVjdENhY2hlKHRoaXMpOwogICAgIHJldHVybiBt
X2F4T2JqZWN0Q2FjaGU7CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiA3
NDk3MykKKysrIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzcsNiArMzc3LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCisg
ICAgdmlydHVhbCBSZW1vdGVBWE9iamVjdFJlZiBhY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCkg
eyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgTlNDYWNoZWRVUkxSZXNwb25zZSogd2lsbENhY2hl
UmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBOU0NhY2hlZFVSTFJlc3Bv
bnNlKiByZXNwb25zZSkgY29uc3QgeyByZXR1cm4gcmVzcG9uc2U7IH0KICNlbmRpZgogI2lmIFVT
RShDRk5FVFdPUkspCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9u
IDc0OTczKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNiArMzQsMTUgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lmIFBMQVRGT1JNKE1BQykKKyNpZmRlZiBfX09CSkNfXyAK
KyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgordHlwZWRlZiBpZCBSZW1vdGVBWE9i
amVjdFJlZjsKKyNlbHNlCit0eXBlZGVmIHZvaWQqIFJlbW90ZUFYT2JqZWN0UmVmOworI2VuZGlm
CisjZW5kaWYKKwogdHlwZWRlZiBjbGFzcyBfam9iamVjdCogam9iamVjdDsKIAogI2lmIFBMQVRG
T1JNKE1BQykgJiYgIWRlZmluZWQoX19PQkpDX18pCkBAIC0yNjUsNiArMjc0LDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJY29uTm90aWZp
Y2F0aW9uKGJvb2wgbGlzdGVuID0gdHJ1ZSkgPSAwOwogICAgICAgICAKICNpZiBQTEFURk9STShN
QUMpCisgICAgICAgIC8vIEFsbG93IGFuIGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRvIHJldHJpZXZl
IGEgRnJhbWUgcGFyZW50IGlmIHRoZXJlJ3Mgbm8gUGxhdGZvcm1XaWRnZXQuCisgICAgICAgIHZp
cnR1YWwgUmVtb3RlQVhPYmplY3RSZWYgYWNjZXNzaWJpbGl0eVJlbW90ZU9iamVjdCgpID0gMDsK
ICNpZiBFTkFCTEUoSkFWQV9CUklER0UpCiAgICAgICAgIHZpcnR1YWwgam9iamVjdCBqYXZhQXBw
bGV0KE5TVmlldyopIHsgcmV0dXJuIDA7IH0KICNlbmRpZgpJbmRleDogV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJl
dmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2MSw3ICsxNjEsMTAgQEAgRnJhbWVWaWV3Ojp+RnJhbWVWaWV3KCkKICAgICAgICAg
bV9zY2hlZHVsZWRFdmVudHMuY2xlYXIoKTsKICAgICAgICAgbV9lbnF1ZXVlRXZlbnRzID0gMDsK
ICAgICB9Ci0KKyAgICAKKyAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJs
ZWQoKSAmJiBheE9iamVjdENhY2hlKCkpCisgICAgICAgIGF4T2JqZWN0Q2FjaGUoKS0+cmVtb3Zl
KHRoaXMpOworICAgIAogICAgIHJlc2V0U2Nyb2xsYmFycygpOwogCiAgICAgLy8gQ3VzdG9tIHNj
cm9sbGJhcnMgc2hvdWxkIGFscmVhZHkgYmUgZGVzdHJveWVkIGF0IHRoaXMgcG9pbnQKQEAgLTI0
ODIsNCArMjQ4NSw5IEBAIHZvaWQgRnJhbWVWaWV3Ojpub3RpZnlXaWRnZXRzSW5BbGxGcmFtZXMK
ICAgICB9CiB9CiAgICAgCitBWE9iamVjdENhY2hlKiBGcmFtZVZpZXc6OmF4T2JqZWN0Q2FjaGUo
KSBjb25zdAoreworICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hl
RXhpc3RzKCkgPyBmcmFtZSgpLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCkgOiAwOworfQor
ICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gNzQ5
NzMpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2
ICszMDgsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTY3JvbGxDb3JuZXIo
KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCk7CiAKKyAgICB2aXJ0dWFsIEFYT2JqZWN0Q2FjaGUq
IGF4T2JqZWN0Q2FjaGUoKSBjb25zdDsKICAgICB2b2lkIG5vdGlmeVdpZGdldHNJbkFsbEZyYW1l
cyhXaWRnZXROb3RpZmljYXRpb24pOwogICAgIAogICAgIHN0YXRpYyBkb3VibGUgc0N1cnJlbnRQ
YWludFRpbWVTdGFtcDsgLy8gdXNlZCBmb3IgZGV0ZWN0aW5nIGRlY29kZWQgcmVzb3VyY2UgdGhy
YXNoIGluIHRoZSBjYWNoZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZpc2lvbiA3
NDk3MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxW
aWV3LmgiCiAKKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91
c2VFdmVudC5oIgpAQCAtOTYsNiArOTcsOSBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldEhhc0hvcml6
b250YWxTY3JvbGxiCiAgICAgICAgIHJlbW92ZUNoaWxkKG1faG9yaXpvbnRhbFNjcm9sbGJhci5n
ZXQoKSk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IDA7CiAgICAgfQorICAgIAor
ICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIGF4T2JqZWN0
Q2FjaGUoKSkKKyAgICAgICAgYXhPYmplY3RDYWNoZSgpLT5oYW5kbGVTY3JvbGxiYXJVcGRhdGUo
dGhpcyk7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9v
bCBoYXNCYXIpCkBAIC0xMTEsNiArMTE1LDkgQEAgdm9pZCBTY3JvbGxWaWV3OjpzZXRIYXNWZXJ0
aWNhbFNjcm9sbGJhcgogICAgICAgICByZW1vdmVDaGlsZChtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdl
dCgpKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IDA7CiAgICAgfQorICAgIAorICAg
IGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIGF4T2JqZWN0Q2Fj
aGUoKSkKKyAgICAgICAgYXhPYmplY3RDYWNoZSgpLT5oYW5kbGVTY3JvbGxiYXJVcGRhdGUodGhp
cyk7CiB9CiAKICNpZiAhUExBVEZPUk0oR1RLKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAko
cmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk2LDYgKzk2LDkgQEAgU2Nyb2xsYmFyOjpTY3JvbGxiYXIoU2Nyb2xsYmFy
Q2xpZW50KiBjbAogCiBTY3JvbGxiYXI6On5TY3JvbGxiYXIoKQogeworICAgIGlmIChBWE9iamVj
dENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIGF4T2JqZWN0Q2FjaGUoKSkKKyAgICAg
ICAgYXhPYmplY3RDYWNoZSgpLT5yZW1vdmUodGhpcyk7CisgICAgCiAgICAgc3RvcFRpbWVySWZO
ZWVkZWQoKTsKICAgICAKICAgICBtX3RoZW1lLT51bnJlZ2lzdGVyU2Nyb2xsYmFyKHRoaXMpOwpA
QCAtMTMxLDE1ICsxMzQsOCBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0U3RlcHMoaW50IGxpbmVTdGVw
LCBpCiBib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQogewogI2lmIEhB
VkUoQUNDRVNTSUJJTElUWSkKLSAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVu
YWJsZWQoKSkgewotICAgICAgICBpZiAocGFyZW50KCkgJiYgcGFyZW50KCktPmlzRnJhbWVWaWV3
KCkpIHsKLSAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PEZyYW1l
Vmlldyo+KHBhcmVudCgpKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKLSAgICAgICAgICAgIEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUoKTsKLSAgICAgICAgICAg
IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIqIGF4T2JqZWN0ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJp
bGl0eVNjcm9sbGJhcio+KGNhY2hlLT5nZXRPckNyZWF0ZShTY3JvbGxCYXJSb2xlKSk7Ci0gICAg
ICAgICAgICBheE9iamVjdC0+c2V0U2Nyb2xsYmFyKHRoaXMpOwotICAgICAgICAgICAgY2FjaGUt
PnBvc3ROb3RpZmljYXRpb24oYXhPYmplY3QsIGRvY3VtZW50LCBBWE9iamVjdENhY2hlOjpBWFZh
bHVlQ2hhbmdlZCwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKEFYT2JqZWN0Q2Fj
aGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgYXhPYmplY3RDYWNoZSgpKQorICAgICAgICBh
eE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24oYXhPYmplY3RDYWNoZSgpLT5nZXRPckNy
ZWF0ZSh0aGlzKSwgMCwgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQsIHRydWUpOwogI2Vu
ZGlmCiAKICAgICAvLyBJZ25vcmUgcGVycGVuZGljdWxhciBzY3JvbGxzLgpAQCAtNDc1LDcgKzQ3
MSwxNiBAQCBib29sIFNjcm9sbGJhcjo6aXNXaW5kb3dBY3RpdmUoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2NsaWVudCAmJiBtX2NsaWVudC0+aXNBY3RpdmUoKTsKIH0KLSAKKyAgICAKK0FYT2Jq
ZWN0Q2FjaGUqIFNjcm9sbGJhcjo6YXhPYmplY3RDYWNoZSgpIGNvbnN0Cit7CisgICAgaWYgKCFw
YXJlbnQoKSB8fCAhcGFyZW50KCktPmlzRnJhbWVWaWV3KCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIAorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBh
cmVudCgpKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICByZXR1cm4gZG9jdW1lbnQtPmF4T2Jq
ZWN0Q2FjaGUoKTsKK30KKwogdm9pZCBTY3JvbGxiYXI6OmludmFsaWRhdGVSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHN1cHByZXNzSW52YWxpZGF0aW9uKCkpCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyLmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxiYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDYgKzE3MSw3IEBAIHByb3RlY3RlZDoKIAog
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CisgICAgdmlydHVhbCBBWE9iamVjdENhY2hlKiBheE9iamVjdENhY2hlKCkgY29uc3Q7
CiAKICAgICBib29sIHNldEN1cnJlbnRQb3MoZmxvYXQgcG9zLCBTY3JvbGxTb3VyY2Ugc291cmNl
KTsKIH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9XaWRnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw3IEBAIHR5cGVkZWYg
UGxhdGZvcm1XaWRnZXQgUGxhdGZvcm1QYWdlQ2xpZW4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBBWE9iamVjdENhY2hlOwogY2xhc3MgQ3Vyc29yOwogY2xhc3MgRXZlbnQ7CiBjbGFz
cyBGb250OwpAQCAtMjQ2LDYgKzI0Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFBvaW50
IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAgICAgdmly
dHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50Jikg
Y29uc3Q7CiAKKyAgICAvLyBBIG1lYW5zIHRvIGFjY2VzcyB0aGUgQVggY2FjaGUgd2hlbiB0aGlz
IG9iamVjdCBjYW4gZ2V0IGEgcG9pbnRlciB0byBpdC4KKyAgICB2aXJ0dWFsIEFYT2JqZWN0Q2Fj
aGUqIGF4T2JqZWN0Q2FjaGUoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgCiBwcml2YXRlOgog
ICAgIHZvaWQgaW5pdChQbGF0Zm9ybVdpZGdldCk7IC8vIE11c3QgYmUgY2FsbGVkIGJ5IGFsbCBX
aWRnZXQgY29uc3RydWN0b3JzIHRvIGluaXRpYWxpemUgY3Jvc3MtcGxhdGZvcm0gZGF0YS4KIApJ
bmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSw1NCBAQAorMjAxMS0wMS0wNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdLMjogU3VwcG9ydCBBY2Nlc3NpYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MTg1OQorCisgICAgICAgICogU2hhcmVkL1dlYlByb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudElt
cGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmFjY2Vzc2liaWxpdHlDaGlsZFRva2VuUmVj
ZWl2ZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAg
KC1bV0tWaWV3IGluaXRXaXRoRnJhbWU6Y29udGV4dFJlZjpwYWdlR3JvdXBSZWY6XSk6CisgICAg
ICAgICgtW1dLVmlldyBfdXBkYXRlV2luZG93QW5kVmlld0ZyYW1lc10pOgorICAgICAgICAoLVtX
S1ZpZXcgX3NldEFjY2Vzc2liaWxpdHlDaGlsZFRva2VuOl0pOgorICAgICAgICAoLVtXS1ZpZXcg
YWNjZXNzaWJpbGl0eUlzSWdub3JlZF0pOgorICAgICAgICAoLVtXS1ZpZXcgYWNjZXNzaWJpbGl0
eUhpdFRlc3Q6XSk6CisgICAgICAgICgtW1dLVmlldyBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFs
dWU6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6ZW5zdXJlV2ViUHJvY2Vz
cyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVBY2Nlc3NpYmlsaXR5UGFnZVRva2VuKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZW5kQWNjZXNzaWJpbGl0eVByZXNlbnRl
clRva2VuKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
TG9hZGVyQ2xpZW50OjphY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
Ojp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YWNjZXNzaWJpbGl0eVBv
c2l0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnNlbmRBY2Nlc3NpYmlsaXR5UHJlc2VudGVyVG9rZW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjphY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpp
bml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmg6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnByZXNlbnRlckFwcGxpY2F0aW9uUGlkKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFpbk1hYy5tbToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc01haW4pOgorCiAyMDExLTAxLTA0ICBCcmFkeSBFaWRzb24gIDxi
ZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5k
ZXg6IFdlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3Bw
CShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBAIHZvaWQgV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2QKICAgICBlbmNvZGVyLT5lbmNvZGUoc2hvdWxk
QWx3YXlzVXNlQ29tcGxleFRleHRDb2RlUGF0aCk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKGxhbmd1
YWdlQ29kZSk7CiAjaWYgUExBVEZPUk0oTUFDKQorICAgIGVuY29kZXItPmVuY29kZShwcmVzZW50
ZXJBcHBsaWNhdGlvblBpZCk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKG5zVVJMQ2FjaGVQYXRoKTsK
ICAgICBlbmNvZGVyLT5lbmNvZGUobnNVUkxDYWNoZU1lbW9yeUNhcGFjaXR5KTsKICAgICBlbmNv
ZGVyLT5lbmNvZGUobnNVUkxDYWNoZURpc2tDYXBhY2l0eSk7CkBAIC04OSw2ICs5MCw4IEBAIGJv
b2wgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2QKICAgICBpZiAoIWRlY29kZXIt
PmRlY29kZShwYXJhbWV0ZXJzLmxhbmd1YWdlQ29kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocGFyYW1ldGVycy5w
cmVzZW50ZXJBcHBsaWNhdGlvblBpZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
IWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJzLm5zVVJMQ2FjaGVQYXRoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMubnNVUkxDYWNo
ZU1lbW9yeUNhcGFjaXR5KSkKSW5kZXg6IFdlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9TaGFyZWQvV2Vi
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3
IEBAIHN0cnVjdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBTdHJpbmcgbGFu
Z3VhZ2VDb2RlOwogCiAjaWYgUExBVEZPUk0oTUFDKQorICAgIHBpZF90IHByZXNlbnRlckFwcGxp
Y2F0aW9uUGlkOwogICAgIFN0cmluZyBuc1VSTENhY2hlUGF0aDsKICAgICB1aW50NjRfdCBuc1VS
TENhY2hlTWVtb3J5Q2FwYWNpdHk7CiAgICAgdWludDY0X3QgbnNVUkxDYWNoZURpc2tDYXBhY2l0
eTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0
Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHNldEVkaXRDb21tYW5kU3RhdGUoY29uc3QgU3RyaW5nJiBjb21tYW5k
TmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludCBzdGF0ZSkgPSAwOwogI2lmIFBMQVRGT1JNKE1BQykK
KyAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzaWJpbGl0eUNoaWxkVG9rZW5SZWNlaXZlZChjb25zdCBD
b3JlSVBDOjpEYXRhUmVmZXJlbmNlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBpbnRlcmNlcHRL
ZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgVmVjdG9yPFdlYkNvcmU6Oktl
eXByZXNzQ29tbWFuZD4mLCB1aW50MzJfdCwgdWludDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpDb21w
b3NpdGlvblVuZGVybGluZT4mKSA9IDA7CiAjZW5kaWYKICNpZiBQTEFURk9STShXSU4pCkluZGV4
OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDcgKzE2NCwxMCBA
QCB2b2lkIFdlYkNvbnRleHQ6OmVuc3VyZVdlYlByb2Nlc3MoKQogICAgIHBhcmFtZXRlcnMuYXBw
bGljYXRpb25DYWNoZURpcmVjdG9yeSA9IGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoKTsKICAg
ICBwYXJhbWV0ZXJzLmNsZWFyUmVzb3VyY2VDYWNoZXMgPSBtX2NsZWFyUmVzb3VyY2VDYWNoZXNG
b3JOZXdXZWJQcm9jZXNzOwogICAgIHBhcmFtZXRlcnMuY2xlYXJBcHBsaWNhdGlvbkNhY2hlID0g
bV9jbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JOZXdXZWJQcm9jZXNzOwotICAgIAorI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBwYXJhbWV0ZXJzLnByZXNlbnRlckFwcGxpY2F0aW9uUGlkID0gZ2V0cGlk
KCk7CisjZW5kaWYKKwogICAgIG1fY2xlYXJSZXNvdXJjZUNhY2hlc0Zvck5ld1dlYlByb2Nlc3Mg
PSBmYWxzZTsKICAgICBtX2NsZWFyQXBwbGljYXRpb25DYWNoZUZvck5ld1dlYlByb2Nlc3MgPSBm
YWxzZTsKICAgICAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24g
NzQ5NzMpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OTQsMTIgKzQ5NCwxMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlV2luZG93
SXNWaXNpYmxlCiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRXaW5k
b3dJc1Zpc2libGUod2luZG93SXNWaXNpYmxlKSwgbV9wYWdlSUQpOwogfQogCi12b2lkIFdlYlBh
Z2VQcm94eTo6d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgSW50UmVjdCYgd2luZG93
RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRv
d0Nvb3JkaW5hdGVzKQordm9pZCBXZWJQYWdlUHJveHk6OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFu
Z2VkKGNvbnN0IEludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3Qg
SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgSW50UG9pbnQmIGFj
Y2Vzc2liaWxpdHlWaWV3Q29vcmRpbmF0ZXMpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6V2lu
ZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQod2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCB2
aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKSwgbV9wYWdlSUQpOworICAgIHByb2Nlc3MoKS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6V2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQod2luZG93
RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzLCBh
Y2Nlc3NpYmlsaXR5Vmlld0Nvb3JkaW5hdGVzKSwgbV9wYWdlSUQpOwogfQogCiB2b2lkIFdlYlBh
Z2VQcm94eTo6Z2V0TWFya2VkUmFuZ2UodWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVu
Z3RoKQpAQCAtMTE5Nyw2ICsxMTk3LDEzIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSdW5JbnNl
Y3VyZUNvbnRlbnQKICAgICBtX2xvYWRlckNsaWVudC5kaWRSdW5JbnNlY3VyZUNvbnRlbnRGb3JG
cmFtZSh0aGlzLCBmcmFtZSwgdXNlckRhdGEuZ2V0KCkpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94
eTo6ZGlkUmVjZWl2ZUFjY2Vzc2liaWxpdHlQYWdlVG9rZW4oY29uc3QgQ29yZUlQQzo6RGF0YVJl
ZmVyZW5jZSYgZGF0YSkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgbV9wYWdlQ2xpZW50LT5h
Y2Nlc3NpYmlsaXR5Q2hpbGRUb2tlblJlY2VpdmVkKGRhdGEpOworI2VuZGlmCit9CisgICAgCiB2
b2lkIFdlYlBhZ2VQcm94eTo6ZnJhbWVEaWRCZWNvbWVGcmFtZVNldCh1aW50NjRfdCBmcmFtZUlE
LCBib29sIHZhbHVlKQogewogICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53
ZWJGcmFtZShmcmFtZUlEKTsKQEAgLTE4NTQsNiArMTg2MSwxNiBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6c3RyaW5nQ2FsbGJhY2soY29uc3QgCiAgICAgY2FsbGJhY2stPnBlcmZvcm1DYWxsYmFja1dp
dGhSZXR1cm5WYWx1ZShyZXN1bHRTdHJpbmcuaW1wbCgpKTsKIH0KIAorI2lmIFBMQVRGT1JNKE1B
QykKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZW5kQWNjZXNzaWJpbGl0eVByZXNlbnRlclRva2VuKGNv
bnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmIHRva2VuKQoreworICAgIGlmICghaXNWYWxpZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNlbmRBY2Nlc3NpYmlsaXR5UHJlc2VudGVyVG9rZW4odG9rZW4pLCBtX3BhZ2VJRCk7Cit9
CisjZW5kaWYKKwogdm9pZCBXZWJQYWdlUHJveHk6OmZvY3VzZWRGcmFtZUNoYW5nZWQodWludDY0
X3QgZnJhbWVJRCkKIHsKICAgICBpZiAoIWZyYW1lSUQpIHsKSW5kZXg6IFdlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAgcHVibGljOgogCiAjaWYg
UExBVEZPUk0oTUFDKQogICAgIHZvaWQgdXBkYXRlV2luZG93SXNWaXNpYmxlKGJvb2wgd2luZG93
SXNWaXNpYmxlKTsKLSAgICB2b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcyk7CisgICAgdm9pZCB3
aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dG
cmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFt
ZUluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBhY2Nlc3NpYmls
aXR5Vmlld0Nvb3JkaW5hdGVzKTsKICAgICB2b2lkIGdldE1hcmtlZFJhbmdlKHVpbnQ2NF90JiBs
b2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCk7CiAgICAgdWludDY0X3QgY2hhcmFjdGVySW5kZXhG
b3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCk7CiAgICAgV2ViQ29yZTo6SW50UmVjdCBm
aXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh1aW50NjRfdCwgdWludDY0X3QpOwpAQCAtMjMwLDYg
KzIzMCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2NhbGVXZWJWaWV3KGRvdWJsZSBzY2FsZSwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG9yaWdpbik7CiAgICAgZG91YmxlIHZpZXdTY2FsZUZh
Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlld1NjYWxlRmFjdG9yOyB9CisjaWYgUExBVEZPUk0o
TUFDKQorICAgIHZvaWQgc2VuZEFjY2Vzc2liaWxpdHlQcmVzZW50ZXJUb2tlbihjb25zdCBDb3Jl
SVBDOjpEYXRhUmVmZXJlbmNlJik7CisjZW5kaWYKIAogICAgIC8vIEZpbmQuCiAgICAgdm9pZCBm
aW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENv
dW50KTsKQEAgLTMzMyw2ICszMzYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkU3RhcnRQcm9n
cmVzcygpOwogICAgIHZvaWQgZGlkQ2hhbmdlUHJvZ3Jlc3MoZG91YmxlKTsKICAgICB2b2lkIGRp
ZEZpbmlzaFByb2dyZXNzKCk7CisgICAgdm9pZCBkaWRSZWNlaXZlQWNjZXNzaWJpbGl0eVBhZ2VU
b2tlbihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJik7CiAgICAgCiAgICAgdm9pZCBkZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQzMl90IG5h
dmlnYXRpb25UeXBlLCB1aW50MzJfdCBtb2RpZmllcnMsIGludDMyX3QgbW91c2VCdXR0b24sIGNv
bnN0IFN0cmluZyYgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKTsKICAgICB2b2lkIGRlY2lkZVBv
bGljeUZvck5ld1dpbmRvd0FjdGlvbih1aW50NjRfdCBmcmFtZUlELCB1aW50MzJfdCBuYXZpZ2F0
aW9uVHlwZSwgdWludDMyX3QgbW9kaWZpZXJzLCBpbnQzMl90IG1vdXNlQnV0dG9uLCBjb25zdCBT
dHJpbmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCk7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMTEz
LDYgKzExMyw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgRGF0YUNhbGxiYWNr
KENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgcmVzdWx0RGF0YSwgdWludDY0X3QgY2FsbGJhY2tJRCkK
ICAgICBTdHJpbmdDYWxsYmFjayhXVEY6OlN0cmluZyByZXN1bHRTdHJpbmcsIHVpbnQ2NF90IGNh
bGxiYWNrSUQpCiAKKyAgICBEaWRSZWNlaXZlQWNjZXNzaWJpbGl0eVBhZ2VUb2tlbihDb3JlSVBD
OjpEYXRhUmVmZXJlbmNlIGRhdGEpCisKICNpZiBQTEFURk9STShNQUMpCiAgICAgIyBLZXlib2Fy
ZCBzdXBwb3J0IG1lc3NhZ2VzLgogICAgIEludGVycHJldEtleUV2ZW50KHVpbnQzMl90IHR5cGUp
IC0+IChWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiBjb21tYW5kTmFtZSwgdWludDMy
X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQzMl90IHNlbGVjdGlvbkVuZCwgVmVjdG9yPFdlYkNvcmU6
OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzKQpJbmRleDogV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9j
ZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1
LDYgKzc1LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZExlYXZlQWNjZWxl
cmF0ZWRDb21wb3NpdGluZygpOwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzaWJp
bGl0eUNoaWxkVG9rZW5SZWNlaXZlZChjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJik7ICAg
IAogICAgIHZpcnR1YWwgdm9pZCBzZXRDb21wbGV4VGV4dElucHV0RW5hYmxlZCh1aW50NjRfdCBw
bHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgYm9vbCBjb21wbGV4VGV4dElucHV0RW5h
YmxlZCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShib29s
IHVzZUN1c3RvbVJlcHJlc2VudGF0aW9uKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvUGFnZUNsaWVudEltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9QYWdlQ2xpZW50SW1wbC5tbQkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW1wb3J0ICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW1wb3J0ICJQYWdl
Q2xpZW50SW1wbC5oIgogCisjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCiAjaW1wb3J0ICJGaW5k
SW5kaWNhdG9yLmgiCiAjaW1wb3J0ICJXS0FQSUNhc3QuaCIKICNpbXBvcnQgIldLU3RyaW5nQ0Yu
aCIKQEAgLTI1Nyw2ICsyNTgsMTIgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0RmluZEluZGlj
YXRvcihQYQogICAgIFttX3drVmlldyBfc2V0RmluZEluZGljYXRvcjpmaW5kSW5kaWNhdG9yIGZh
ZGVPdXQ6ZmFkZU91dF07CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmFjY2Vzc2liaWxpdHlD
aGlsZFRva2VuUmVjZWl2ZWQoY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKK3sK
KyAgICBOU0RhdGEqIHJlbW90ZVRva2VuID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGEuZGF0
YSgpIGxlbmd0aDpkYXRhLnNpemUoKV07CisgICAgW21fd2tWaWV3IF9zZXRBY2Nlc3NpYmlsaXR5
Q2hpbGRUb2tlbjpyZW1vdGVUb2tlbl07Cit9CisgICAgCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFnZURpZEVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpCiB7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2
aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2ltcG9ydCAiV0tWaWV3LmgiCiAKICNpbXBv
cnQgIkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmgiCisjaW1wb3J0ICJEYXRhUmVmZXJl
bmNlLmgiCiAjaW1wb3J0ICJGaW5kSW5kaWNhdG9yLmgiCiAjaW1wb3J0ICJGaW5kSW5kaWNhdG9y
V2luZG93LmgiCiAjaW1wb3J0ICJMYXllckJhY2tlZERyYXdpbmdBcmVhUHJveHkuaCIKQEAgLTUx
LDYgKzUyLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSW50UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+Cisj
aW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4K
ICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtOTQsNiArOTYsOCBAQCBAaW50ZXJmYWNl
IFdLVmlld0RhdGEgOiBOU09iamVjdCB7CiAgICAgTlNWaWV3ICpfbGF5ZXJIb3N0aW5nVmlldzsK
ICNlbmRpZgogCisgICAgUmV0YWluUHRyPGlkPiBfcmVtb3RlQWNjZXNzaWJpbGl0eUNoaWxkOwor
ICAgIAogICAgIC8vIEZvciBhc3luY2hyb25vdXMgdmFsaWRhdGlvbi4KICAgICBWYWxpZGF0aW9u
TWFwIF92YWxpZGF0aW9uTWFwOwogCkBAIC0xNjIsNiArMTY2LDEyIEBAIC0gKGlkKWluaXRXaXRo
RnJhbWU6KE5TUmVjdClmcmFtZSBjb250ZXgKIAogICAgIFdlYkNvbnRleHQ6OnN0YXRpc3RpY3Mo
KS53a1ZpZXdDb3VudCsrOwogCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJE
KQorICAgIE5TRGF0YSAqcmVtb3RlVG9rZW4gPSAoTlNEYXRhICopV0tBWFJlbW90ZVRva2VuRm9y
RWxlbWVudChzZWxmKTsKKyAgICBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFUb2tlbiA9IENv
cmVJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oW3Jl
bW90ZVRva2VuIGJ5dGVzXSksIFtyZW1vdGVUb2tlbiBsZW5ndGhdKTsKKyAgICBfZGF0YS0+X3Bh
Z2UtPnNlbmRBY2Nlc3NpYmlsaXR5UHJlc2VudGVyVG9rZW4oZGF0YVRva2VuKTsKKyNlbmRpZgor
ICAgIAogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC0yNDMsOCArMjUzLDkgQEAgLSAodm9pZClf
dXBkYXRlV2luZG93QW5kVmlld0ZyYW1lcwogICAgIAogICAgIE5TUmVjdCB3aW5kb3dGcmFtZUlu
U2NyZWVuQ29vcmRpbmF0ZXMgPSBbd2luZG93IGZyYW1lXTsKICAgICBOU1JlY3Qgdmlld0ZyYW1l
SW5XaW5kb3dDb29yZGluYXRlcyA9IFtzZWxmIGNvbnZlcnRSZWN0OltzZWxmIGZyYW1lXSB0b1Zp
ZXc6bmlsXTsKKyAgICBOU1BvaW50IGFjY2Vzc2liaWxpdHlQb3NpdGlvbiA9IFtbc2VsZiBhY2Nl
c3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVd
IHBvaW50VmFsdWVdOwogICAgIAotICAgIF9kYXRhLT5fcGFnZS0+d2luZG93QW5kVmlld0ZyYW1l
c0NoYW5nZWQoZW5jbG9zaW5nSW50UmVjdCh3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMp
LCBlbmNsb3NpbmdJbnRSZWN0KHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpKTsKKyAgICBf
ZGF0YS0+X3BhZ2UtPndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGVuY2xvc2luZ0ludFJlY3Qo
d2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzKSwgZW5jbG9zaW5nSW50UmVjdCh2aWV3RnJh
bWVJbldpbmRvd0Nvb3JkaW5hdGVzKSwgSW50UG9pbnQoYWNjZXNzaWJpbGl0eVBvc2l0aW9uKSk7
CiB9CiAKIC0gKHZvaWQpcmVuZXdHU3RhdGUKQEAgLTkxMCw2ICs5MjEsNDMgQEAgLSAodm9pZCl2
aWV3RGlkVW5oaWRlCiAgICAgW3NlbGYgX3VwZGF0ZVZpc2liaWxpdHldOwogfQogCistICh2b2lk
KV9zZXRBY2Nlc3NpYmlsaXR5Q2hpbGRUb2tlbjooTlNEYXRhICopZGF0YQoreworI2lmICFkZWZp
bmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICBfZGF0YS0+X3JlbW90ZUFjY2Vzc2li
aWxpdHlDaGlsZCA9IFdLQVhSZW1vdGVFbGVtZW50Rm9yVG9rZW4oKENGRGF0YVJlZilkYXRhKTsK
KyAgICBXS0FYSW5pdGlhbGl6ZVJlbW90ZUVsZW1lbnRXaXRoV2luZG93KF9kYXRhLT5fcmVtb3Rl
QWNjZXNzaWJpbGl0eUNoaWxkLmdldCgpLCBbc2VsZiB3aW5kb3ddKTsKKyNlbmRpZgorfQorCist
IChCT09MKWFjY2Vzc2liaWxpdHlJc0lnbm9yZWQKK3sKKyAgICByZXR1cm4gTk87Cit9CisKKy0g
KGlkKWFjY2Vzc2liaWxpdHlIaXRUZXN0OihOU1BvaW50KXBvaW50Cit7CisgICAgcmV0dXJuIF9k
YXRhLT5fcmVtb3RlQWNjZXNzaWJpbGl0eUNoaWxkLmdldCgpOworfQorCistIChpZClhY2Nlc3Np
YmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1dGUKK3sKKyAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVd
KSB7CisgICAgICAgIGlmICghX2RhdGEtPl9yZW1vdGVBY2Nlc3NpYmlsaXR5Q2hpbGQpCisgICAg
ICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2Jq
ZWN0Ol9kYXRhLT5fcmVtb3RlQWNjZXNzaWJpbGl0eUNoaWxkLmdldCgpXTsKKyAgICB9CisgICAg
aWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvbGVBdHRyaWJ1
dGVdKQorICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlOworICAgIGlmIChb
YXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb25B
dHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9u
KE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSwgbmlsKTsKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UGFyZW50QXR0cmlidXRlXSkKKyAgICAgICAgcmV0
dXJuIE5TQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKFtzZWxmIHN1cGVydmlld10pOwor
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlFbmFibGVk
QXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNd
OworICAgIAorICAgIHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmF0
dHJpYnV0ZV07Cit9CisKIC0gKE5TVmlldyAqKWhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQKIHsKICAg
ICBOU1ZpZXcgKmhpdFZpZXcgPSBbc3VwZXIgaGl0VGVzdDpwb2ludF07CkluZGV4OiBXZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiA3NDk3MykKKysr
IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtNTIsNiArNTIsNyBAQCBAaW50ZXJmYWNlIFdLVmlldyAoSW50ZXJuYWwpCiAtICh2b2lk
KV9wYWdlRGlkTGVhdmVBY2NlbGVyYXRlZENvbXBvc2l0aW5nOwogI2VuZGlmCiAKKy0gKHZvaWQp
X3NldEFjY2Vzc2liaWxpdHlDaGlsZFRva2VuOihOU0RhdGEgKilkYXRhOwogLSAodm9pZClfc2V0
Q29tcGxleFRleHRJbnB1dEVuYWJsZWQ6KEJPT0wpY29tcGxleFRleHRJbnB1dEVuYWJsZWQgcGx1
Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXI6KHVpbnQ2NF90KXBsdWdpbkNvbXBsZXhUZXh0
SW5wdXRJZGVudGlmaWVyOwogCiAtICh2b2lkKV9zZXRQYWdlSGFzQ3VzdG9tUmVwcmVzZW50YXRp
b246KEJPT0wpcGFnZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uOwpJbmRleDogV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIw
OSw2ICsyMDksOCBAQAogCQkxQ0E4Qjk0NTEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9y
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUNBOEI5NDMxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJMUNBOEI5NDYxMjdDODgyQTAwNTc2QzJC
IC8qIFdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQThCOTQ0MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNw
ZWN0b3JQcm94eU1lc3NhZ2VzLmggKi87IH07CiAJCTFDQThCOTU0MTI3Qzg5MTUwMDU3NkMyQiAv
KiBXZWJJbnNwZWN0b3JNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQzhFMkRBRDEyNzhDNUIyMDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yTWFjLm1t
ICovOyB9OworCQkyOUNENTVBQTEyOEUyOTRGMDAxMzNDODUgLyogQWNjZXNzaWJpbGl0eVdlYlBh
Z2VPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI5Q0Q1NUE4MTI4RTI5NEYwMDEzM0M4NSAvKiBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5o
ICovOyB9OworCQkyOUNENTVBQjEyOEUyOTRGMDAxMzNDODUgLyogQWNjZXNzaWJpbGl0eVdlYlBh
Z2VPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyOUNENTVBOTEyOEUyOTRGMDAxMzNDODUgLyogQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3Qu
bW0gKi87IH07CiAJCTM3RjYyM0I4MTJBNTdCNjIwMEUzRkRGNiAvKiBXS0ZpbmRPcHRpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y2MjNCNzEy
QTU3QjYyMDBFM0ZERjYgLyogV0tGaW5kT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJNTEwMjFFOUMxMkIxNjc4ODAwNUMwMzNDIC8qIFdl
YkNvbnRleHRNZW51Q2xpZW50TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEwMjFFOUIxMkIxNjc4ODAwNUMwMzNDIC8qIFdlYkNvbnRleHRNZW51
Q2xpZW50TWFjLm1tICovOyB9OwogCQk1MTBGQkI5QTEyODhDOTVFMDBBRkZERjQgLyogV2ViQ29u
dGV4dE1lbnVJdGVtRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTBGQkI5ODEyODhDOTVFMDBBRkZERjQgLyogV2ViQ29udGV4dE1lbnVJdGVt
RGF0YS5jcHAgKi87IH07CkBAIC04ODEsNiArODgzLDggQEAKIAkJMUNBOEI5MzUxMjdDNzc0RTAw
NTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViSW5zcGVjdG9yUHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFDQThCOTQzMTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFDQThCOTQ0MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQ
cm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkluc3Bl
Y3RvclByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjlDRDU1
QTgxMjhFMjk0RjAwMTMzQzg1IC8qIEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5Q0Q1NUE5MTI4RTI5NEYwMDEzM0M4NSAv
KiBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzMkRCQ0Y1RTAzNzBBREVFMDBDOTE3ODMgLyogV2ViS2l0MlBy
ZWZpeC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXQyUHJlZml4Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RjYyM0I3MTJBNTdCNjIwMEUzRkRGNiAv
KiBXS0ZpbmRPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLRmlu
ZE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMjFFOUIxMkIxNjc4
ODAwNUMwMzNDIC8qIFdlYkNvbnRleHRNZW51Q2xpZW50TWFjLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29udGV4dE1lbnVDbGllbnRNYWMubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzI2LDYgKzIzMzAsOCBAQAogCQlCQzk2M0Q2QzEx
M0REMTk1MDA1NzRCRTIgLyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQkyOUNENTVBOTEyOEUyOTRGMDAxMzNDODUgLyogQWNjZXNzaWJpbGl0eVdl
YlBhZ2VPYmplY3QubW0gKi8sCisJCQkJMjlDRDU1QTgxMjhFMjk0RjAwMTMzQzg1IC8qIEFjY2Vz
c2liaWxpdHlXZWJQYWdlT2JqZWN0LmggKi8sCiAJCQkJQkM1RjdCQjgxMTgyMzc5OTAwNTJDMDJD
IC8qIENodW5rZWRVcGRhdGVEcmF3aW5nQXJlYU1hYy5jcHAgKi8sCiAJCQkJMEY1MjY1QjUxMURE
Mzc3MDAwMDZEMzNDIC8qIExheWVyQmFja2VkRHJhd2luZ0FyZWFNYWMubW0gKi8sCiAJCQkJMUM4
RTJEQUQxMjc4QzVCMjAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvck1hYy5tbSAqLywKQEAgLTI3NzMs
NiArMjc3OSw3IEBACiAJCQkJQkNFRTdEQzUxMjhCNjQ1RDAwOTgyN0RBIC8qIEluamVjdGVkQnVu
ZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFRDgyQTdGMjEyOEM2RkFGMDA0NDc3QjMg
LyogV0tCdW5kbGVQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBOEI5NDYxMjdD
ODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTI5Q0Q1NUFBMTI4RTI5NEYwMDEzM0M4NSAvKiBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9i
amVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1MzU2OUQxMjkxQjFEMjAwMDc0OURDIC8qIFdl
YlBhZ2VDb250ZXh0TWVudUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBQjRBOEQxMjk2
RjBBMjAwMjM5NTJGIC8qIFNhbmRib3hFeHRlbnNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
N0I2MjA2MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLApA
QCAtMzIwNCw2ICszMjExLDcgQEAKIAkJCQkxQ0E4Qjk0NTEyN0M4ODJBMDA1NzZDMkIgLyogV2Vi
SW5zcGVjdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNB
OEI5NTQxMjdDODkxNTAwNTc2QzJCIC8qIFdlYkluc3BlY3Rvck1hYy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUVEQ0E3MUI3MTI4RERBOEMwMDIwMUIyNiAvKiBXS0J1bmRsZVBhZ2VPdmVybGF5LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTI5Q0Q1NUFCMTI4RTI5NEYwMDEzM0M4NSAvKiBBY2Nlc3Np
YmlsaXR5V2ViUGFnZU9iamVjdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxNTM1NjlDMTI5MUIx
RDIwMDA3NDlEQyAvKiBXZWJQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFBQjRBQUExMjk2RjE1NDAwMjM5NTJGIC8qIFNhbmRib3hFeHRlbnNpb25NYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQlCQzdCNjIwNzEyOUEwQTY3MDBEMTc0QTQgLyogV2ViUGFnZUdy
b3VwLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAko
cmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcsOCBAQCB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxp
emVXZWJQcm9jZXNzKGNvCiAgICAgICAgIGNsZWFyUmVzb3VyY2VDYWNoZXMoKTsKICAgICBpZiAo
cGFyYW1ldGVycy5jbGVhckFwcGxpY2F0aW9uQ2FjaGUpCiAgICAgICAgIGNsZWFyQXBwbGljYXRp
b25DYWNoZSgpOworICAgIAorICAgIG1fcHJlc2VudGVyQXBwbGljYXRpb25QaWQgPSBwYXJhbWV0
ZXJzLnByZXNlbnRlckFwcGxpY2F0aW9uUGlkOwogCiAgICAgaWYgKHBhcmFtZXRlcnMuc2hvdWxk
QWx3YXlzVXNlQ29tcGxleFRleHRDb2RlUGF0aCkKICAgICAgICAgc2V0QWx3YXlzVXNlc0NvbXBs
ZXhUZXh0Q29kZVBhdGgodHJ1ZSk7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHJldmlz
aW9uIDc0OTczKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAkod29ya2luZyBj
b3B5KQpAQCAtOTEsNyArOTEsMTAgQEAgcHVibGljOgogICAgIFdlYlBhZ2VHcm91cFByb3h5KiB3
ZWJQYWdlR3JvdXAodWludDY0X3QgcGFnZUdyb3VwSUQpOwogICAgIFdlYlBhZ2VHcm91cFByb3h5
KiB3ZWJQYWdlR3JvdXAoY29uc3QgV2ViUGFnZUdyb3VwRGF0YSYpOwogICAgIHN0YXRpYyBXZWJD
b3JlOjpQYWdlR3JvdXAqIHNoYXJlZFBhZ2VHcm91cCgpOwotCisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIHBpZF90IHByZXNlbnRlckFwcGxpY2F0aW9uUGlkKCkgY29uc3QgeyByZXR1cm4gbV9wcmVz
ZW50ZXJBcHBsaWNhdGlvblBpZDsgfQorI2VuZGlmIAorICAgIAogI2lmIFBMQVRGT1JNKFFUKQog
ICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbmV0d29ya0FjY2Vzc01hbmFnZXIoKSB7IHJldHVy
biBtX25ldHdvcmtBY2Nlc3NNYW5hZ2VyOyB9CiAjZW5kaWYKQEAgLTE1OSw2ICsxNjIsOSBAQCBw
cml2YXRlOgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgUExBVEZPUk0oTUFD
KQogICAgIG1hY2hfcG9ydF90IG1fY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0OwogI2VuZGlm
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHBpZF90IG1fcHJlc2VudGVyQXBwbGljYXRpb25QaWQ7
CisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciog
bV9uZXR3b3JrQWNjZXNzTWFuYWdlcjsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNp
b24gNzQ5NzMpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVM
b2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjU3LDYgKzEyNTcsMTIgQEAgdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJYwogfQogCiAjaWYgUExBVEZPUk0o
TUFDKQorICAgIAorUmVtb3RlQVhPYmplY3RSZWYgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmFjY2Vz
c2liaWxpdHlSZW1vdGVPYmplY3QoKSAKK3sKKyAgICByZXR1cm4gbV9mcmFtZS0+cGFnZSgpLT5h
Y2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCk7Cit9CisgICAgCiAjaWYgRU5BQkxFKE1BQ19KQVZB
X0JSSURHRSkKIGpvYmplY3QgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmphdmFBcHBsZXQoTlNWaWV3
KikgeyByZXR1cm4gMDsgfQogI2VuZGlmCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNpb24g
NzQ5NzMpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDYgKzIwMSw4IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sIGxpc3RlbiA9
IHRydWUpOwogICAgIAogI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIFJlbW90ZUFYT2Jq
ZWN0UmVmIGFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKTsKKyAgICAKICNpZiBFTkFCTEUoTUFD
X0pBVkFfQlJJREdFKQogICAgIHZpcnR1YWwgam9iamVjdCBqYXZhQXBwbGV0KE5TVmlldyopOwog
I2VuZGlmCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNp
b24gNzQ5NzMpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMxMiwxMSArMTMxMiwxMiBAQCB2b2lkIFdlYlBhZ2U6OnNldFdpbmRv
d0lzVmlzaWJsZShib29sIHdpCiAgICAgICAgICgqaXQpLT5zZXRXaW5kb3dJc1Zpc2libGUod2lu
ZG93SXNWaXNpYmxlKTsKIH0KIAotdm9pZCBXZWJQYWdlOjp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hh
bmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0
ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMp
Cit2b2lkIFdlYlBhZ2U6OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIGFjY2Vzc2liaWxpdHlWaWV3Q29vcmRpbmF0ZXMpCiB7CiAgICAgbV93aW5kb3dGcmFt
ZUluU2NyZWVuQ29vcmRpbmF0ZXMgPSB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXM7CiAg
ICAgbV92aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzID0gdmlld0ZyYW1lSW5XaW5kb3dDb29y
ZGluYXRlczsKLQorICAgIG1fYWNjZXNzaWJpbGl0eVBvc2l0aW9uID0gYWNjZXNzaWJpbGl0eVZp
ZXdDb29yZGluYXRlczsKKyAgICAKICAgICAvLyBUZWxsIGFsbCBvdXIgcGx1Zy1pbiB2aWV3cyB0
aGF0IHRoZSB3aW5kb3cgYW5kIHZpZXcgZnJhbWVzIGhhdmUgY2hhbmdlZC4KICAgICBmb3IgKEhh
c2hTZXQ8UGx1Z2luVmlldyo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2luVmlld3MuYmVn
aW4oKSwgZW5kID0gbV9wbHVnaW5WaWV3cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAg
ICAoKml0KS0+d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQod2luZG93RnJhbWVJblNjcmVlbkNv
b3JkaW5hdGVzLCB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKTsKSW5kZXg6IFdlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1MiwxNSBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Ub3VjaEV2ZW50Lmg+CiAjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaWZkZWYgX19PQkpD
X18KK0BjbGFzcyBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdDsKKyNlbHNlCitjbGFzcyBBY2Nl
c3NpYmlsaXR5V2ViUGFnZU9iamVjdDsKKyNlbmRpZgorI2VuZGlmCisKIG5hbWVzcGFjZSBDb3Jl
SVBDIHsKICAgICBjbGFzcyBBcmd1bWVudERlY29kZXI7CiAgICAgY2xhc3MgQ29ubmVjdGlvbjsK
QEAgLTI1Myw2ICsyNjIsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGdldExvY2F0aW9u
QW5kTGVuZ3RoRnJvbVJhbmdlKFdlYkNvcmU6OlJhbmdlKiwgdWludDY0X3QmIGxvY2F0aW9uLCB1
aW50NjRfdCYgbGVuZ3RoKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIHNlbmRBY2Nl
c3NpYmlsaXR5UHJlc2VudGVyVG9rZW4oY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYpOwor
ICAgIEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0KiBhY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0
KCk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYWNjZXNzaWJpbGl0eVBvc2l0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9hY2Nlc3NpYmlsaXR5UG9zaXRpb247IH0gICAgCisgICAgCiAgICAgdm9pZCBz
ZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5w
dXRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHRleHRJbnB1dCk7CiAKICAgICB2b2lkIGdldE1h
cmtlZFJhbmdlKHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCk7CkBAIC0zNDAs
NyArMzUzLDcgQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHNldFdp
bmRvd0lzVmlzaWJsZShib29sIHdpbmRvd0lzVmlzaWJsZSk7Ci0gICAgdm9pZCB3aW5kb3dBbmRW
aWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2Ny
ZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93
Q29vcmRpbmF0ZXMpOworICAgIHZvaWQgd2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgYWNjZXNzaWJpbGl0eVZpZXdDb29yZGluYXRlcyk7CiAjZW5kaWYKIAog
ICAgIHZvaWQgdW5hcHBseUVkaXRDb21tYW5kKHVpbnQ2NF90IGNvbW1hbmRJRCk7CkBAIC0zOTcs
OCArNDEwLDEzIEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIGZyYW1lIG9mIHRoZSB2aWV3IGluIHdp
bmRvdyBjb29yZGluYXRlcy4KICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fdmlld0ZyYW1lSW5XaW5k
b3dDb29yZGluYXRlczsKIAorICAgIC8vIFRoZSBhY2Nlc3NpYmlsaXR5IHBvc2l0aW9uIG9mIHRo
ZSB2aWV3LgorICAgIFdlYkNvcmU6OkludFBvaW50IG1fYWNjZXNzaWJpbGl0eVBvc2l0aW9uOwor
ICAgIAogICAgIC8vIEFsbCBwbHVnLWluIHZpZXdzIG9uIHRoaXMgd2ViIHBhZ2UuCiAgICAgSGFz
aFNldDxQbHVnaW5WaWV3Kj4gbV9wbHVnaW5WaWV3czsKKyAgICAKKyAgICBSZXRhaW5QdHI8QWNj
ZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3Q+IG1fbW9ja0FjY2Vzc2liaWxpdHlFbGVtZW50OwogI2Vs
aWYgUExBVEZPUk0oV0lOKQogICAgIC8vIE91ciB2aWV3J3Mgd2luZG93IChpbiB0aGUgVUkgcHJv
Y2VzcykuCiAgICAgSFdORCBtX25hdGl2ZVdpbmRvdzsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gNzQ5NzMpCisrKyBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTUsMTAgKzExNSwxMSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBTZW5k
Q29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJ
ZGVudGlmaWVyLCBTdHJpbmcgdGV4dElucHV0KQogCiAgICAgU2V0V2luZG93SXNWaXNpYmxlKGJv
b2wgd2luZG93SXNWaXNpYmxlKQotICAgIFdpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKFdlYkNv
cmU6OkludFJlY3Qgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBXZWJDb3JlOjpJbnRS
ZWN0IHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpCisgICAgV2luZG93QW5kVmlld0ZyYW1l
c0NoYW5nZWQoV2ViQ29yZTo6SW50UmVjdCB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMs
IFdlYkNvcmU6OkludFJlY3Qgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcywgV2ViQ29yZTo6
SW50UG9pbnQgYWNjZXNzaWJpbGl0eVZpZXdDb29yZGluYXRlcykKICAgICBHZXRNYXJrZWRSYW5n
ZSgpIC0+ICh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoKQogICAgIENoYXJhY3Rl
ckluZGV4Rm9yUG9pbnQoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpIC0+ICh1aW50NjRfdCByZXN1
bHQpCiAgICAgRmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodWludDY0X3QgbG9jYXRpb24sIHVp
bnQ2NF90IGxlbmd0aCkgLT4gKFdlYkNvcmU6OkludFJlY3QgcmVzdWx0UmVjdCkKKyAgICBTZW5k
QWNjZXNzaWJpbGl0eVByZXNlbnRlclRva2VuKENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgdG9rZW4p
CiAjZW5kaWYKICNpZiBQTEFURk9STShXSU4pCiAgICAgQ29uZmlybUNvbXBvc2l0aW9uKFdURjo6
U3RyaW5nIGNvbXBvc2l0aW9uU3RyaW5nKQpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0LmgJKHJl
dmlzaW9uIDApCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvQWNjZXNzaWJpbGl0
eVdlYlBhZ2VPYmplY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNyBAQAorLy8KKy8vICBB
Y2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5oCisvLyAgV2ViS2l0MgorLy8KKy8vICBDcmVhdGVk
IGJ5IENocmlzIEZsZWl6YWNoIG9uIDExLzEyLzEwLgorLy8gIENvcHlyaWdodCAyMDEwIEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworCituYW1lc3BhY2UgV2ViS2l0IHsKKyAg
ICBjbGFzcyBXZWJQYWdlOworfQorCitAaW50ZXJmYWNlIEFjY2Vzc2liaWxpdHlXZWJQYWdlT2Jq
ZWN0IDogTlNPYmplY3QgCit7CisgICAgV2ViS2l0OjpXZWJQYWdlKiBtX3BhZ2U7CisgICAgCisg
ICAgaWQgbV9wYXJlbnQ7CisgICAgTlNBcnJheSogbV9hdHRyaWJ1dGVOYW1lczsKKyAgICBOU011
dGFibGVBcnJheSogbV9hY2Nlc3NpYmlsaXR5Q2hpbGRyZW47Cit9CisKKy0gKHZvaWQpc2V0V2Vi
UGFnZTooV2ViS2l0OjpXZWJQYWdlKilwYWdlOworCistICh2b2lkKXNldFJlbW90ZVBhcmVudDoo
aWQpcGFyZW50OworCitAZW5kCisKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9BY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QubW0JKHJldmlz
aW9uIDApCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvQWNjZXNzaWJpbGl0eVdl
YlBhZ2VPYmplY3QubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc0IEBACisvLworLy8gIEFj
Y2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0Lm0KKy8vICBXZWJLaXQyCisvLworLy8gIENyZWF0ZWQg
YnkgQ2hyaXMgRmxlaXphY2ggb24gMTEvMTIvMTAuCisvLyAgQ29weXJpZ2h0IDIwMTAgQXBwbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlX
ZWJQYWdlT2JqZWN0LmgiCisKKyNpbXBvcnQgIldlYkZyYW1lLmgiCisjaW1wb3J0ICJXZWJQYWdl
LmgiCisjaW1wb3J0IDxBcHBLaXQvTlNBY2Nlc3NpYmlsaXR5UmVtb3RlVUlFbGVtZW50Lmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWUu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9s
bFZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworQGltcGxlbWVudGF0aW9uIEFj
Y2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0CisKKy0gKGlkKWFjY2Vzc2liaWxpdHlSb290T2JqZWN0
V3JhcHBlcgoreworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBtX3BhZ2UtPmNvcmVQYWdlKCk7
CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIFdlYkNvcmU6
OkZyYW1lKiBjb3JlID0gcGFnZS0+bWFpbkZyYW1lKCk7CisgICAgaWYgKCFjb3JlIHx8ICFjb3Jl
LT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIHJvb3QgPSBjb3JlLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPnJvb3RP
YmplY3QoKTsKKyAgICBpZiAoIXJvb3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAg
cmV0dXJuIHJvb3QtPndyYXBwZXIoKTsKK30KKworLSAodm9pZClzZXRXZWJQYWdlOihXZWJQYWdl
KilwYWdlCit7CisgICAgbV9wYWdlID0gcGFnZTsKK30KKworLSAodm9pZClzZXRSZW1vdGVQYXJl
bnQ6KGlkKXBhcmVudAoreworICAgIGlmIChwYXJlbnQgIT0gbV9wYXJlbnQpIHsKKyAgICAgICAg
W21fcGFyZW50IHJlbGVhc2VdOworICAgICAgICBtX3BhcmVudCA9IFtwYXJlbnQgcmV0YWluXTsK
KyAgICB9Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFttX2FjY2Vzc2liaWxpdHlDaGls
ZHJlbiByZWxlYXNlXTsKKyAgICBbbV9hdHRyaWJ1dGVOYW1lcyByZWxlYXNlXTsKKyAgICBbbV9w
YXJlbnQgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChCT09MKWFjY2Vz
c2liaWxpdHlJc0lnbm9yZWQKK3sKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKE5TQXJyYXkgKilh
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMKK3sKKyAgICBpZiAoIW1fYXR0cmlidXRlTmFtZXMp
CisgICAgICAgIG1fYXR0cmlidXRlTmFtZXMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2Jq
ZWN0czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVJvbGVBdHRy
aWJ1dGUsIE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZSwgTlNBY2Nlc3Np
YmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TQWNj
ZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZSwgTlNBY2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRl
LCBOU0FjY2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxlbWVudEF0dHJpYnV0ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVBvc2l0aW9uQXR0cmlidXRlLCBOU0FjY2Vz
c2liaWxpdHlTaXplQXR0cmlidXRlLCBOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZSwg
bmlsXTsKKworICAgIHJldHVybiBtX2F0dHJpYnV0ZU5hbWVzOworfQorCistIChCT09MKWFjY2Vz
c2liaWxpdHlJc0F0dHJpYnV0ZVNldHRhYmxlOihOU1N0cmluZyAqKWF0dHJpYnV0ZQoreworICAg
IHJldHVybiBOTzsKK30KKworLSAodm9pZClhY2Nlc3NpYmlsaXR5U2V0VmFsdWU6KGlkKXZhbHVl
IGZvckF0dHJpYnV0ZTooTlNTdHJpbmcgKilhdHRyaWJ1dGUgCit7CisgICAgcmV0dXJuOworfQor
CistIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUFjdGlvbk5hbWVzCit7CisgICAgcmV0dXJuIFtO
U0FycmF5IGFycmF5XTsKK30KKworLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlDaGlsZHJlbgor
eworICAgIGlkIHdyYXBwZXIgPSBbc2VsZiBhY2Nlc3NpYmlsaXR5Um9vdE9iamVjdFdyYXBwZXJd
OworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5XTsKKyAg
ICAKKyAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OndyYXBwZXJdOworfQorCist
IChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nICopYXR0cmlidXRlCit7
CisgICAgaWYgKCFXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgp
KQorICAgICAgICBXZWJDb3JlOjpBWE9iamVjdENhY2hlOjplbmFibGVBY2Nlc3NpYmlsaXR5KCk7
CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eVBhcmVudEF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBtX3BhcmVudDsKKyAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRlXSkK
KyAgICAgICAgcmV0dXJuIFttX3BhcmVudCB3aW5kb3dVSUVsZW1lbnRdOworICAgIGlmIChbYXR0
cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxlbWVudEF0
dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbbV9wYXJlbnQgdG9wTGV2ZWxVSUVsZW1lbnRdOwor
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb2xlQXR0
cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZTsKKyAgICBp
ZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0
aW9uQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlw
dGlvbihOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUsIG5pbCk7CisgICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1dGVdKQorICAgICAg
ICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXTsKKworICAgIGlmICghbV9wYWdl
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eVBvc2l0aW9uQXR0cmlidXRlXSkgeworICAgICAgICBXZWJDb3Jl
OjpJbnRQb2ludCBwb2ludCA9IG1fcGFnZS0+YWNjZXNzaWJpbGl0eVBvc2l0aW9uKCk7CisgICAg
ICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhQb2ludDpOU01ha2VQb2ludChwb2ludC54KCks
IHBvaW50LnkoKSldOworICAgIH0KKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZV0pIHsKKyAgICAgICAgY29uc3QgSW50U2l6ZSYg
cyA9IG1fcGFnZS0+c2l6ZSgpOworICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoU2l6
ZTpOU01ha2VTaXplKHMud2lkdGgoKSwgcy5oZWlnaHQoKSldOworICAgIH0KKyAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVd
KQorICAgICAgICByZXR1cm4gW3NlbGYgYWNjZXNzaWJpbGl0eUNoaWxkcmVuXTsKKworICAgIHJl
dHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZV07Cit9CisK
Ky0gKEJPT0wpYWNjZXNzaWJpbGl0eVNob3VsZFVzZVVuaXF1ZUlkCit7CisgICAgcmV0dXJuIFlF
UzsKK30KKworLSAoaWQpYWNjZXNzaWJpbGl0eUhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQgCit7Cisg
ICAgLy8gSGl0LXRlc3QgcG9pbnQgY29tZXMgaW4gYXMgYm90dG9tLXNjcmVlbiBjb29yZGluYXRl
cy4gTmVlZHMgdG8gYmUgbm9ybWFsaXplZCB0byB0aGUgZnJhbWUgb2YgdGhlIHdlYiBwYWdlLgor
ICAgIE5TUG9pbnQgcmVtb3RlUG9zaXRpb24gPSBbW3NlbGYgYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVBvc2l0aW9uQXR0cmlidXRlXSBwb2ludFZhbHVlXTsKKyAg
ICBOU1NpemUgcmVtb3RlU2l6ZSA9IFtbc2VsZiBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
TlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZV0gc2l6ZVZhbHVlXTsKKyAgICAKKyAgICAvLyBH
ZXQgdGhlIHkgcG9zaXRpb24gb2YgdGhlIFdLVmlldyAod2UgaGF2ZSB0byBzY3JlZW4tZmxpcCBh
bmQgZ28gZnJvbSBib3R0b20gbGVmdCB0byB0b3AgbGVmdCkuCisgICAgQ0dGbG9hdCBzY3JlZW5I
ZWlnaHQgPSBbW1tOU1NjcmVlbiBzY3JlZW5zXSBvYmplY3RBdEluZGV4OjBdIGZyYW1lXS5zaXpl
LmhlaWdodDsKKyAgICByZW1vdGVQb3NpdGlvbi55ID0gKHNjcmVlbkhlaWdodCAtIHJlbW90ZVBv
c2l0aW9uLnkpIC0gcmVtb3RlU2l6ZS5oZWlnaHQ7CisgICAgCisgICAgcG9pbnQueSA9IHNjcmVl
bkhlaWdodCAtIHBvaW50Lnk7CisKKyAgICAvLyBSZS1jZW50ZXIgcG9pbnQgaW50byB0aGUgd2Vi
IHBhZ2UncyBmcmFtZS4KKyAgICBwb2ludC55IC09IHJlbW90ZVBvc2l0aW9uLnk7CisgICAgcG9p
bnQueCAtPSByZW1vdGVQb3NpdGlvbi54OworICAgIAorICAgIFdlYkNvcmU6OkZyYW1lVmlldyog
ZnYgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT5jb3JlRnJhbWUoKS0+dmlldygpOworICAgIGlmIChm
dikgeworICAgICAgICBwb2ludC55ICs9IGZ2LT5zY3JvbGxQb3NpdGlvbigpLnkoKTsKKyAgICAg
ICAgcG9pbnQueCArPSBmdi0+c2Nyb2xsUG9zaXRpb24oKS54KCk7CisgICAgfQorICAgIAorICAg
IHJldHVybiBbW3NlbGYgYWNjZXNzaWJpbGl0eVJvb3RPYmplY3RXcmFwcGVyXSBhY2Nlc3NpYmls
aXR5SGl0VGVzdDpwb2ludF07Cit9CisKKy0gKGlkKWFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVt
ZW50IAoreworICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlVbmlnbm9yZWREZXNjZW5kYW50KHNl
bGYpOworfQorCisKK0BlbmQKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9X
ZWJQYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTUg
QEAKIAogI2luY2x1ZGUgIldlYlBhZ2UuaCIKIAorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlXZWJQ
YWdlT2JqZWN0LmgiCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlBsdWdp
blZpZXcuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJX
ZWJFdmVudC5oIgorI2luY2x1ZGUgIldlYkZyYW1lLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9B
WE9iamVjdENhY2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4K
QEAgLTQwLDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbFZpZXcuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1RleHRJdGVyYXRvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93c0tl
eWJvYXJkQ29kZXMuaD4KKyNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ4LDYgKzUzLDIxIEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogewogICAgIG1fcGFnZS0+
YWRkU2NoZWR1bGVQYWlyKFNjaGVkdWxlUGFpcjo6Y3JlYXRlKFtOU1J1bkxvb3AgY3VycmVudFJ1
bkxvb3BdLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpKTsKKworI2lmICFkZWZpbmVkKEJVSUxESU5H
X09OX1NOT1dfTEVPUEFSRCkKKyAgICBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdCogbW9ja0Fj
Y2Vzc2liaWxpdHlFbGVtZW50ID0gW1tbQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QgYWxsb2Nd
IGluaXRdIGF1dG9yZWxlYXNlXTsKKworICAgIC8vIEdldCB0aGUgcGlkIGZvciB0aGUgc3RhcnRp
bmcgcHJvY2Vzcy4KKyAgICBwaWRfdCBwaWQgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wcmVzZW50
ZXJBcHBsaWNhdGlvblBpZCgpOyAgICAKKyAgICBXS0FYSW5pdGlhbGl6ZUVsZW1lbnRXaXRoUHJl
c2VudGVyUGlkKG1vY2tBY2Nlc3NpYmlsaXR5RWxlbWVudCwgcGlkKTsKKyAgICBbbW9ja0FjY2Vz
c2liaWxpdHlFbGVtZW50IHNldFdlYlBhZ2U6dGhpc107CisgICAgCisgICAgLy8gc2VuZCBkYXRh
IGJhY2sgb3ZlcgorICAgIE5TRGF0YSogcmVtb3RlVG9rZW4gPSAoTlNEYXRhICopV0tBWFJlbW90
ZVRva2VuRm9yRWxlbWVudChtb2NrQWNjZXNzaWJpbGl0eUVsZW1lbnQpOyAKKyAgICBDb3JlSVBD
OjpEYXRhUmVmZXJlbmNlIGRhdGFUb2tlbiA9IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oW3JlbW90ZVRva2VuIGJ5dGVzXSksIFtyZW1vdGVU
b2tlbiBsZW5ndGhdKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJlY2Vp
dmVBY2Nlc3NpYmlsaXR5UGFnZVRva2VuKGRhdGFUb2tlbikpOworICAgIG1fbW9ja0FjY2Vzc2li
aWxpdHlFbGVtZW50ID0gbW9ja0FjY2Vzc2liaWxpdHlFbGVtZW50OworI2VuZGlmCiB9CiAKIHZv
aWQgV2ViUGFnZTo6cGxhdGZvcm1QcmVmZXJlbmNlc0RpZENoYW5nZShjb25zdCBXZWJQcmVmZXJl
bmNlc1N0b3JlJikKQEAgLTMxNCw2ICszMzQsMTkgQEAgYm9vbCBXZWJQYWdlOjpwZXJmb3JtRGVm
YXVsdEJlaGF2aW9yRm9ySwogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIFdlYlBhZ2U6OnNl
bmRBY2Nlc3NpYmlsaXR5UHJlc2VudGVyVG9rZW4oY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5j
ZSYgZGF0YSkKK3sKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAg
TlNEYXRhKiB0b2tlbkRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5kYXRhKCkgbGVu
Z3RoOmRhdGEuc2l6ZSgpXTsKKyAgICBbbV9tb2NrQWNjZXNzaWJpbGl0eUVsZW1lbnQuZ2V0KCkg
c2V0UmVtb3RlUGFyZW50OldLQVhSZW1vdGVFbGVtZW50Rm9yVG9rZW4oKENGRGF0YVJlZil0b2tl
bkRhdGEpXTsKKyNlbmRpZgorfQorCitBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdCogV2ViUGFn
ZTo6YWNjZXNzaWJpbGl0eVJlbW90ZU9iamVjdCgpCit7CisgICAgcmV0dXJuIG1fbW9ja0FjY2Vz
c2liaWxpdHlFbGVtZW50LmdldCgpOworfQorICAgICAgICAgCiBib29sIFdlYlBhZ2U6OnBsYXRm
b3JtSGFzTG9jYWxEYXRhRm9yVVJMKGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCkKIHsKICAgICBO
U011dGFibGVVUkxSZXF1ZXN0KiByZXF1ZXN0ID0gW1tOU011dGFibGVVUkxSZXF1ZXN0IGFsbG9j
XSBpbml0V2l0aFVSTDp1cmxdOwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9j
ZXNzTWFpbk1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvbWFjL1dlYlBy
b2Nlc3NNYWluTWFjLm1tCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9t
YWMvV2ViUHJvY2Vzc01haW5NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzMyw2ICsxMzMsMTAg
QEAgaW50IFdlYlByb2Nlc3NNYWluKGNvbnN0IENvbW1hbmRMaW5lJiBjbwogICAgICAvLyBJbml0
aWFsaXplIEFwcEtpdC4KICAgICBbTlNBcHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNhdGlvbl07CiAK
KyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgV0tBWFJlZ2lzdGVy
UmVtb3RlQXBwKCk7CisjZW5kaWYKKyAgICAKICAgICBSdW5Mb29wOjpydW4oKTsKIAogICAgIC8v
IEZJWE1FOiBEbyBtb3JlIGNsZWFudXAgaGVyZS4KSW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NDk3MykKKysr
IFdlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MDktMDEtMDQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXSzI6IFN1cHBvcnQgQWNj
ZXNzaWJpbGl0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTE4NTkKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0ay5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdldEZvY3VzZWRB
Y2Nlc3NpYmxlRWxlbWVudCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgor
ICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF9hY2Nlc3NpYmxlKToKKwogMjAxMS0wMS0wMyAg
R3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51az4K
IAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCkluZGV4OiBXZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3Bw
CShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI1LDExICs0MjUsNyBAQCBB
dGtPYmplY3QqIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2V0CiAgICAgaWYgKCFwcml2LT5j
b3JlRnJhbWUgfHwgIXByaXYtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBSZW5kZXJWaWV3KiByb290ID0gdG9SZW5kZXJWaWV3KHByaXYtPmNvcmVGcmFt
ZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKCFyb290KQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIEF0a09iamVjdCogd3JhcHBlciA9ICBwcml2LT5jb3JlRnJhbWUtPmRvY3Vt
ZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocm9vdCktPndyYXBwZXIoKTsKKyAg
ICBBdGtPYmplY3QqIHdyYXBwZXIgPSAgcHJpdi0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5heE9i
amVjdENhY2hlKCktPnJvb3RPYmplY3QoKS0+d3JhcHBlcigpOwogICAgIGlmICghd3JhcHBlcikK
ICAgICAgICAgcmV0dXJuIDA7CiAKSW5kZXg6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
CShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDUyLDcgKzE0NTIsNyBAQCBzdGF0aWMgQXRrT2JqZWN0KiB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2FjCiAgICAgaWYgKCFkb2MpCiAgICAgICAgIHJldHVybiBOVUxM
OwogCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZUFjY2Vzc2libGUgPSBkb2MtPmF4T2Jq
ZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoZG9jLT5yZW5kZXJlcigpKTsKKyAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBjb3JlQWNjZXNzaWJsZSA9IGRvYy0+YXhPYmplY3RDYWNoZSgpLT5yb290T2Jq
ZWN0KCk7CiAgICAgaWYgKCFjb3JlQWNjZXNzaWJsZSB8fCAhY29yZUFjY2Vzc2libGUtPndyYXBw
ZXIoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NDk3MykKKysr
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIw
MTEtMDEtMDQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXSzI6IFN1cHBvcnQgQWNj
ZXNzaWJpbGl0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTE4NTkKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
Lmg6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6YWNjZXNzaWJpbGl0eVJlbW90ZU9i
amVjdCk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJh
bWUgc2V0QWNjZXNzaWJsZU5hbWU6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIGFjY2Vzc2liaWxp
dHlSb290XSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmg6CisgICAgICAg
ICogV2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFs
dWU6XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVt
ZW50XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGFjY2Vzc2liaWxpdHlIaXRUZXN0Ol0pOgor
ICAgICAgICAoLVtXZWJIVE1MVmlldyBfYWNjZXNzaWJpbGl0eVBhcmVudEZvclN1YnZpZXc6XSk6
CisKIDIwMTEtMDEtMDIgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSdWJiZXItc3RhbXBlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiA3NDk3MykK
KysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjI3LDYgKzIyNywxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgam9i
amVjdCBqYXZhQXBwbGV0KE5TVmlldyopOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgdmlydHVhbCBSZW1vdGVBWE9iamVjdFJlZiBhY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCkg
eyByZXR1cm4gMDsgfQorI2VuZGlmCisgICAgCiAgICAgdm9pZCBzZXRPcmlnaW5hbFVSTEZvckRv
d25sb2FkKFdlYkRvd25sb2FkICosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNv
bnN0OwogCiAgICAgUmV0YWluUHRyPFdlYkZyYW1lUG9saWN5TGlzdGVuZXI+IHNldFVwUG9saWN5
TGlzdGVuZXIoV2ViQ29yZTo6RnJhbWVQb2xpY3lGdW5jdGlvbik7CkluZGV4OiBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjg5LDI2ICs2ODksNiBAQCAtIChCT09MKV9uZWVkc0xh
eW91dAogICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT52aWV3KCkgPyBfcHJpdmF0ZS0+
Y29yZUZyYW1lLT52aWV3KCktPm5lZWRzTGF5b3V0KCkgOiBmYWxzZTsKIH0KIAotLSAoaWQpX2Fj
Y2Vzc2liaWxpdHlUcmVlCi17Ci0jaWYgSEFWRShBQ0NFU1NJQklMSVRZKQotICAgIGlmICghQVhP
YmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBBWE9iamVjdENh
Y2hlOjplbmFibGVBY2Nlc3NpYmlsaXR5KCk7Ci0gICAgICAgIGlmIChbW05TQXBwIGFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VB
dHRyaWJ1dGVdIGJvb2xWYWx1ZV0pCi0gICAgICAgICAgICBBWE9iamVjdENhY2hlOjplbmFibGVF
bmhhbmNlZFVzZXJJbnRlcmZhY2VBY2Nlc3NpYmlsaXR5KCk7Ci0gICAgfQotCi0gICAgaWYgKCFf
cHJpdmF0ZS0+Y29yZUZyYW1lIHx8ICFfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIFJlbmRlclZpZXcqIHJvb3QgPSB0b1JlbmRlclZpZXco
X3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKCFy
b290KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJvb3QpLT53cmFwcGVy
KCk7Ci0jZWxzZQotICAgIHJldHVybiBuaWw7Ci0jZW5kaWYKLX0KLQogLSAoRE9NUmFuZ2UgKilf
cmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjooU2VsZWN0aW9uQ29udHJvbGxlcjo6RUFs
dGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rp
b24gZ3JhbnVsYXJpdHk6KFRleHRHcmFudWxhcml0eSlncmFudWxhcml0eQogewogICAgIGlmIChf
cHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNOb25lKCkpCkBAIC0xMzM5LDEzICsx
MzE5LDE0IEBAIC0gKHZvaWQpc2V0QWNjZXNzaWJsZU5hbWU6KE5TU3RyaW5nICopbmEKICAgICBp
ZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBSZW5kZXJWaWV3KiByb290ID0gdG9SZW5kZXJWaWV3KF9wcml2YXRlLT5j
b3JlRnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOwotICAgIGlmICghcm9vdCkKKyAgICBp
ZiAoIV9wcml2YXRlLT5jb3JlRnJhbWUgfHwgIV9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiByb290
T2JqZWN0ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgp
LT5nZXRPckNyZWF0ZShyb290KTsKLSAgICBTdHJpbmcgc3RyTmFtZShuYW1lKTsKLSAgICByb290
T2JqZWN0LT5zZXRBY2Nlc3NpYmxlTmFtZShzdHJOYW1lKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiByb290T2JqZWN0ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+YXhPYmpl
Y3RDYWNoZSgpLT5yb290T2JqZWN0KCk7CisgICAgaWYgKHJvb3RPYmplY3QpIHsKKyAgICAgICAg
U3RyaW5nIHN0ck5hbWUobmFtZSk7CisgICAgICAgIHJvb3RPYmplY3QtPnNldEFjY2Vzc2libGVO
YW1lKHN0ck5hbWUpOworICAgIH0KICNlbmRpZgogfQogCkBAIC0xMzY2LDYgKzEzNDcsMjcgQEAg
LSAoQk9PTCloYXNTcGVsbGluZ01hcmtlcjooaW50KWZyb20gbGVuZwogICAgIHJldHVybiBjb3Jl
RnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25TdGFydEhhc1NwZWxsaW5nTWFya2VyRm9yKGZyb20s
IGxlbmd0aCk7CiB9CiAKKy0gKGlkKWFjY2Vzc2liaWxpdHlSb290Cit7CisjaWYgSEFWRShBQ0NF
U1NJQklMSVRZKQorICAgIGlmICghQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQo
KSkgeworICAgICAgICBBWE9iamVjdENhY2hlOjplbmFibGVBY2Nlc3NpYmlsaXR5KCk7CisgICAg
ICAgIGlmIChbW05TQXBwIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxp
dHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VBdHRyaWJ1dGVdIGJvb2xWYWx1ZV0pCisgICAgICAgICAg
ICBBWE9iamVjdENhY2hlOjplbmFibGVFbmhhbmNlZFVzZXJJbnRlcmZhY2VBY2Nlc3NpYmlsaXR5
KCk7CisgICAgfQorICAgIAorICAgIGlmICghX3ByaXZhdGUtPmNvcmVGcmFtZSB8fCAhX3ByaXZh
dGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiByb290T2JqZWN0ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+
ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5yb290T2JqZWN0KCk7CisgICAgaWYgKHJvb3RP
YmplY3QpCisgICAgICAgIHJldHVybiByb290T2JqZWN0LT53cmFwcGVyKCk7CisgICAgcmV0dXJu
IG5pbDsKKyNlbHNlCisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZgorfQorCiBAZW5kCiAKIEBpbXBs
ZW1lbnRhdGlvbiBXZWJGcmFtZQpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50
ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5h
bC5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVy
bmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw4ICsxMzgsNiBAQCBAaW50ZXJmYWNlIFdlYkZy
YW1lIChXZWJJbnRlcm5hbCkKIC0gKE5TUmVjdClfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJh
bmdlICopcmFuZ2U7CiAtICh2b2lkKV9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTooRE9NUmFuZ2Ug
KilyYW5nZTsKIAotLSAoaWQpX2FjY2Vzc2liaWxpdHlUcmVlOwotCiAtIChET01SYW5nZSAqKV9y
YW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9s
bGVyOjpFQWx0ZXJhdGlvbilhbHRlcmF0aW9uIGRpcmVjdGlvbjooV2ViQ29yZTo6U2VsZWN0aW9u
RGlyZWN0aW9uKWRpcmVjdGlvbiBncmFudWxhcml0eTooV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5
KWdyYW51bGFyaXR5OwogLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooV2ViQ29yZTo6UmFu
Z2UqKXJhbmdlOwogLSAoRE9NUmFuZ2UgKilfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOihOU1Jh
bmdlKXJhbmdlOwpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lUHJpdmF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaAkocmV2aXNp
b24gNzQ5NzMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0Miw0ICsxNDIsNyBAQCBAaW50ZXJmYWNlIFdlYkZyYW1lIChXZWJQcml2
YXRlKQogLy8gUmV0dXJucyB3aGV0aGVyIHRoZXJlIGlzIGEgc3BlbGxpbmcgbWFya2VyIGluIHRo
ZSBzcGVjaWZpZWQgcmFuZ2Ugb2YgdGhlIGZvY3VzZWQgbm9kZS4KIC0gKEJPT0wpaGFzU3BlbGxp
bmdNYXJrZXI6KGludClsb2NhdGlvbiBsZW5ndGg6KGludClsZW5ndGg7CiAKKy8vIFRoZSB0b3Ag
b2YgdGhlIGFjY2Vzc2liaWxpdHkgdHJlZS4KKy0gKGlkKWFjY2Vzc2liaWxpdHlSb290OworCiBA
ZW5kCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiA3NDk3MykKKysr
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDI3
NCw3ICs0Mjc0LDcgQEAgLSAodm9pZClmbGFnc0NoYW5nZWQ6KE5TRXZlbnQgKilldmVudAogLSAo
aWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyopYXR0cmlidXRlTmFtZQog
ewogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0
eUNoaWxkcmVuQXR0cmlidXRlXSkgewotICAgICAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFt
ZV0gX2FjY2Vzc2liaWxpdHlUcmVlXTsKKyAgICAgICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJh
bWVdIGFjY2Vzc2liaWxpdHlSb290XTsKICAgICAgICAgaWYgKGFjY1RyZWUpCiAgICAgICAgICAg
ICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OmFjY1RyZWVdOwogICAgICAgICByZXR1
cm4gbmlsOwpAQCAtNDI4NCw3ICs0Mjg0LDcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOihOU1N0cgogCiAtIChpZClhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudAogewot
ICAgIGlkIGFjY1RyZWUgPSBbW3NlbGYgX2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOworICAg
IGlkIGFjY1RyZWUgPSBbW3NlbGYgX2ZyYW1lXSBhY2Nlc3NpYmlsaXR5Um9vdF07CiAgICAgaWYg
KGFjY1RyZWUpCiAgICAgICAgIHJldHVybiBbYWNjVHJlZSBhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJ
RWxlbWVudF07CiAgICAgcmV0dXJuIHNlbGY7CkBAIC00MjkyLDcgKzQyOTIsNyBAQCAtIChpZClh
Y2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudAogCiAtIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVz
dDooTlNQb2ludClwb2ludAogewotICAgIGlkIGFjY1RyZWUgPSBbW3NlbGYgX2ZyYW1lXSBfYWNj
ZXNzaWJpbGl0eVRyZWVdOworICAgIGlkIGFjY1RyZWUgPSBbW3NlbGYgX2ZyYW1lXSBhY2Nlc3Np
YmlsaXR5Um9vdF07CiAgICAgaWYgKGFjY1RyZWUpIHsKICAgICAgICAgTlNQb2ludCB3aW5kb3dD
b29yZCA9IFtbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6cG9pbnRdOwogICAgICAg
ICByZXR1cm4gW2FjY1RyZWUgYWNjZXNzaWJpbGl0eUhpdFRlc3Q6W3NlbGYgY29udmVydFBvaW50
OndpbmRvd0Nvb3JkIGZyb21WaWV3Om5pbF1dOwpAQCAtNDMwMiw3ICs0MzAyLDcgQEAgLSAoaWQp
YWNjZXNzaWJpbGl0eUhpdFRlc3Q6KE5TUG9pbnQpcG9pbgogCiAtIChpZClfYWNjZXNzaWJpbGl0
eVBhcmVudEZvclN1YnZpZXc6KE5TVmlldyAqKXN1YnZpZXcKIHsKLSAgICBpZCBhY2NUcmVlID0g
W1tzZWxmIF9mcmFtZV0gX2FjY2Vzc2liaWxpdHlUcmVlXTsKKyAgICBpZCBhY2NUcmVlID0gW1tz
ZWxmIF9mcmFtZV0gYWNjZXNzaWJpbGl0eVJvb3RdOwogICAgIGlmICghYWNjVHJlZSkKICAgICAg
ICAgcmV0dXJuIHNlbGY7CiAgICAgaWQgcGFyZW50ID0gW2FjY1RyZWUgX2FjY2Vzc2liaWxpdHlQ
YXJlbnRGb3JTdWJ2aWV3OnN1YnZpZXddOwpJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0OTczKQorKysgV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0w
MS0wNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdLMjogU3VwcG9ydCBBY2Nlc3Np
YmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MTg1OQorCisgICAgICAgICogQWNjZXNzaWJsZURvY3VtZW50LmNwcDoKKyAgICAgICAgKEFjY2Vz
c2libGVEb2N1bWVudDo6QWNjZXNzaWJsZURvY3VtZW50KToKKwogMjAxMS0wMS0wMSAgQWRhbSBC
YXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2Vp
ZGVsLgpJbmRleDogV2ViS2l0L3dpbi9BY2Nlc3NpYmxlRG9jdW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC93aW4vQWNjZXNzaWJsZURvY3VtZW50LmNwcAkocmV2aXNpb24gNzQ5NzMpCisr
KyBXZWJLaXQvd2luL0FjY2Vzc2libGVEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIC8vIEFjY2Vzc2libGVEb2N1
bWVudAogQWNjZXNzaWJsZURvY3VtZW50OjpBY2Nlc3NpYmxlRG9jdW1lbnQoRG9jdW1lbnQqIGRv
YykKLSAgICA6IEFjY2Vzc2libGVCYXNlKGRvYy0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0
ZShkb2MtPnJlbmRlcmVyKCkpKQorICAgIDogQWNjZXNzaWJsZUJhc2UoZG9jLT5heE9iamVjdENh
Y2hlKCktPnJvb3RPYmplY3QoKSkKIHsKIH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzQ5NzMpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAor
MjAxMS0wMS0wNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdLMjogU3VwcG9ydCBB
Y2Nlc3NpYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MTg1OQorCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvd2Via2l0
LXNjcm9sbGFyZWEtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
YWNjZXNzaWJpbGl0eS93ZWJraXQtc2Nyb2xsYXJlYS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMS0w
NCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYW4gQmVybnN0ZWluLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvd2Via2l0LXNjcm9sbGFyZWEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3dlYmtpdC1zY3JvbGxhcmVhLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3Np
YmlsaXR5L3dlYmtpdC1zY3JvbGxhcmVhLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNSBAQAordGV4dAorCit0ZXh0CitUaGlzIHRlc3RzIHRoYXQgdGhlIFdlYktpdCBnZW5l
cmF0ZWQgc2Nyb2xsIGFyZWFzIGFyZSBjb3JyZWN0LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBib2R5LnJvbGUgaXMgJ0FYUm9sZTogQVhXZWJBcmVhJworUEFTUyBib2R5
LnBhcmVudEVsZW1lbnQoKS5yb2xlIGlzICdBWFJvbGU6IEFYU2Nyb2xsQXJlYScKK1BBU1MgYm9k
eS5wYXJlbnRFbGVtZW50KCkuY2hpbGRyZW5Db3VudCBpcyAxCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2FjY2Vzc2liaWxpdHkvd2Via2l0LXNjcm9sbGFyZWEuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS93ZWJraXQtc2Nyb2xsYXJl
YS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvd2Via2l0LXNjcm9sbGFyZWEuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdD4KK3ZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSBmYWxzZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlkPSJi
b2R5Ij4KKwordGV4dDxicj4KKzxpbWcgc3JjPSdyZXNvdXJjZXMvY2FrZS5wbmcnIHdpZHRoPTUw
MDAgaGVpZ2h0PTUwMDA+Cis8YnI+Cit0ZXh0CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBkZXNjcmlwdGlvbigi
VGhpcyB0ZXN0cyB0aGF0IHRoZSBXZWJLaXQgZ2VuZXJhdGVkIHNjcm9sbCBhcmVhcyBhcmUgY29y
cmVjdC4iKTsKKworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKwor
ICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9keSIpLmZvY3VzKCk7CisgICAgICAg
IHZhciBib2R5ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAg
ICAgIHNob3VsZEJlKCJib2R5LnJvbGUiLCAiJ0FYUm9sZTogQVhXZWJBcmVhJyIpOworICAgICAg
ICBzaG91bGRCZSgiYm9keS5wYXJlbnRFbGVtZW50KCkucm9sZSIsICInQVhSb2xlOiBBWFNjcm9s
bEFyZWEnIik7CisgICAgICAgIHNob3VsZEJlKCJib2R5LnBhcmVudEVsZW1lbnQoKS5jaGlsZHJl
bkNvdW50IiwgIjEiKTsKKyAgICB9CisKKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
PC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77921</attachid>
            <date>2011-01-04 12:59:05 -0800</date>
            <delta_ts>2011-01-04 14:13:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51859-20110104125856.patch</filename>
            <type>text/plain</type>
            <size>125873</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDc0OTczKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTEtMDEtMDQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXSzI6
IFN1cHBvcnQgQWNjZXNzaWJpbGl0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTE4NTkKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpmb2N1c2VkRWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cm9vdEVsZW1lbnQpOgorCiAyMDExLTAxLTAzICBZaSBTaGVuICA8eWkuNC5zaGVuQG5va2lhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQko
cmV2aXNpb24gNzQ5NzMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDEwIEBACiAjaW1w
b3J0ICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgogCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmgiCisjaW1wb3J0IDxBcHBLaXQvTlNDb2xvci5oPgogI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XZWJGcmFtZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlldy5o
PgogCiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQpA
QCAtNDksMTQgKzUxLDE0IEBAIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNv
bnQKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3Vz
ZWRFbGVtZW50KCkKIHsKICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZSBjYWNoaW5nIGhl
cmUuCi0gICAgaWQgYWNjZXNzaWJpbGl0eU9iamVjdCA9IFtbW21haW5GcmFtZSBmcmFtZVZpZXdd
IGRvY3VtZW50Vmlld10gYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRdOworICAgIGlkIGFj
Y2Vzc2liaWxpdHlPYmplY3QgPSBbW21haW5GcmFtZSBhY2Nlc3NpYmlsaXR5Um9vdF0gYWNjZXNz
aWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRdOwogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50KGFjY2Vzc2liaWxpdHlPYmplY3QpOwogfQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgpCiB7CiAgICAgLy8gRklYTUU6IHdl
IGNvdWxkIGRvIHNvbWUgY2FjaGluZyBoZXJlLgotICAgIGlkIGFjY2Vzc2liaWxpdHlPYmplY3Qg
PSBbW21haW5GcmFtZSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgaWQgYWNjZXNzaWJp
bGl0eU9iamVjdCA9IFttYWluRnJhbWUgYWNjZXNzaWJpbGl0eVJvb3RdOwogICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KGFjY2Vzc2liaWxpdHlPYmplY3QpOwogfQogCkluZGV4OiBX
ZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gNzQ5NzMpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDEwMiBAQAorMjAxMS0wMS0wNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdLMjog
U3VwcG9ydCBBY2Nlc3NpYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MTg1OQorCisgICAgICAgIFN1cHBvcnQgV2ViS2l0MiBhY2Nlc3NpYmls
aXR5LiBUbyBkbyBzbywgaXQgd2FzIG5lY2Vzc2FyeSB0byBoYXZlCisgICAgICAgIGFuIEFjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3IGNsYXNzIHRoYXQgY291bGQgbWltaWMgd2hhdCB0aGUgcGxhdGZv
cm0gcHJvdmlkZWQgYmVmb3JlCisgICAgICAgIHdpdGggc2Nyb2xsIHZpZXdzLgorCisgICAgICAg
IFRlc3Q6IHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3dlYmtpdC1zY3JvbGxhcmVhLmh0bWwK
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgor
ICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJvb3RPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZSk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpo
YW5kbGVTY3JvbGxiYXJVcGRhdGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUltYWdlTWFwTGluay5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5SW1hZ2VNYXBMaW5rLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveE9wdGlvbi5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveE9wdGlvbi5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp1cGRhdGVD
aGlsZHJlbklmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmVsZW1lbnRBY2Nlc3NpYmlsaXR5SGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpheE9iamVjdENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OmZvY3VzZWRVSUVsZW1lbnQpOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0Ojppc1Njcm9sbFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6Y2FuU2V0TnVtZXJpY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnNjcm9sbEJhcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OnNldFZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6cGFyZW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2hpbGRyZW4pOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjplbGVtZW50UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpkb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpvcmllbnRhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjppc0VuYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6dmFsdWVGb3JSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpzZXRWYWx1ZSk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpzZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6Y2FuU2V0VmFsdWVBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6Y2FuU2V0TnVtZXJpY1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmlzQWNjZXNzaWJpbGl0eVNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpwYXJl
bnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6cm9s
ZVZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJp
bGl0eUlnbm9yZUF0dGFjaG1lbnQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyLm1tOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdKToKKyAgICAgICAgKC1bQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdF0pOgor
ICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBwb3NpdGlvbl0pOgorICAgICAg
ICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBzY3JvbGxWaWV3UGFyZW50XSk6CisgICAg
ICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZTpdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJp
bGl0eUhpdFRlc3Q6XSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFj
Y2Vzc2liaWxpdHlTZXRWYWx1ZTpmb3JBdHRyaWJ1dGU6XSk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpheE9iamVjdENhY2hlKToKKyAg
ICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZy
YW1lTG9hZGVyQ2xpZW50OjphY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KToKKyAgICAgICAgKiBs
b2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6On5GcmFtZVZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3OjpheE9iamVjdENhY2hlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmll
dy5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3OjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgICogcGxh
dGZvcm0vU2Nyb2xsYmFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6flNjcm9s
bGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXI6OmF4T2JqZWN0Q2FjaGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cm9sbGJhci5oOgorICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5oOgorICAgICAgICAoV2ViQ29y
ZTo6V2lkZ2V0OjpheE9iamVjdENhY2hlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3Lmg6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwOiBBZGRlZC4KKwogMjAxMS0wMS0wNCAgVG9ueSBHZW50
aWxjb3JlICA8dG9ueWdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQg
Zml4LgpJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTU3NSw2ICs1NzUsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAogICAgIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCisgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
U2Nyb2xsVmlldy5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3Bw
CiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCiAgICAgYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA3NDk3
MykKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTY2Miw2ICs2
NjIsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmggXAogCVdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyLmNwcCBcCiAJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlTY3JvbGxiYXIuaCBcCisJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3LmNwcCBcCisJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3LmggXAogCVdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcCBc
CiAJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuaCBcCiAJV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwIFwKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgko
cmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkp
CkBAIC0yODksNyArMjg5LDcgQEAgX19aTjdXZWJDb3JlMTJjcmVhdGVNYXJrdXBFUEtOU180Tm9k
ZUVOUwogX19aTjdXZWJDb3JlMTJjcmVhdGVNYXJrdXBFUEtOU181UmFuZ2VFUE4zV1RGNlZlY3Rv
cklQTlNfNE5vZGVFTG0wRUVFTlNfMjNFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZUViTlNfMTNFQWJz
b2x1dGVVUkxzRQogX19aTjdXZWJDb3JlMTJnY0NvbnRyb2xsZXJFdgogX19aTjdXZWJDb3JlMTJp
Y29uRGF0YWJhc2VFdgotX19aTjdXZWJDb3JlMTNBWE9iamVjdENhY2hlMTFnZXRPckNyZWF0ZUVQ
TlNfMTJSZW5kZXJPYmplY3RFCitfX1pON1dlYkNvcmUxM0FYT2JqZWN0Q2FjaGUxMHJvb3RPYmpl
Y3RFdgogX19aTjdXZWJDb3JlMTNBWE9iamVjdENhY2hlMjFnQWNjZXNzaWJpbGl0eUVuYWJsZWRF
CiBfX1pON1dlYkNvcmUxM0FYT2JqZWN0Q2FjaGU0MmdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2Vy
SW50ZXJmYWNlRW5hYmxlZEUKIF9fWk43V2ViQ29yZTEzSFRUUEhlYWRlck1hcEMxRXYKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBp
CShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkp
CkBAIC01MTgsNiArNTE4LDggQEAKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyLmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyLmgnLAorICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNjcm9sbFZpZXcuY3BwJywKKyAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlTY3JvbGxWaWV3LmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNsaWRlci5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVNsaWRlci5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZS5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUucHJvCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTMyMSw2ICszMjEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAgXCAgICAKICAgICBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIFwgICAgCiAgICAgYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmNwcCBcCisgICAgYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAgXAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNsaWRlci5jcHAgXCAgICAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklB
R3JpZC5jcHAgXCAgICAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENl
bGwuY3BwIFwgICAgCkBAIC0xMzk4LDYgKzEzOTksNyBAQCBIRUFERVJTICs9IFwKICAgICBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5oIFwKICAgICBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCBcCiAgICAgYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmggXAorICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVNjcm9sbFZpZXcuaCBcCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmgg
XAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5oIFwKICAgICBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5oIFwKSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzc1NCw2ICsyMzc1
NCw2MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxhY2Nlc3NpYmlsaXR5XEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcCIKKwkJCQk+CisJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMy
IgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIi
CisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfTFRDR3xXaW4z
MiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxhY2Nlc3Np
YmlsaXR5XEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGFjY2Vzc2liaWxpdHlcQWNjZXNzaWJpbGl0eVNs
aWRlci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc0OTczKQorKysgV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTY5Myw2ICs2OTMsOCBAQAogCQkyNEY1NEVBRDEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRp
b25DYWNoZUhvc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTI1NDJGNERBMTE2NkMyNUEw
MEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyRjREODExNjZDMjVBMDBFODlBODYgLyogVXNl
ckdlc3R1cmVJbmRpY2F0b3IuY3BwICovOyB9OwogCQkyNTQyRjREQjExNjZDMjVBMDBFODlBODYg
LyogVXNlckdlc3R1cmVJbmRpY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI1NDJGNEQ5MTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUlu
ZGljYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTI5NDg5RkM3MTJDMDBGMDMwMEQ4M0YwRiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjk0ODlGQzUx
MkMwMEYwMzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggKi87IH07CisJCTI5
NDg5RkM4MTJDMDBGMDMwMEQ4M0YwRiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTQ4OUZDNjEyQzAw
RjAzMDBEODNGMEYgLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwICovOyB9OwogCQkyOUE4
MTIyNjBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUE4MTIwODBGQkI5
QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgKi87IH07CiAJCTI5
QTgxMjI3MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBODEyMDkwRkJCOUMxRDAw
NTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlUYWJsZS5jcHAgKi87IH07CiAJCTI5QTgxMjI4MEZCQjlD
MUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBODEyMEEwRkJCOUMxRDAwNTEwMjkzIC8q
IEFjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAgKi87IH07CkBAIC02OTk2LDYgKzY5OTgsOCBAQAog
CQkyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZUhvc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjU0MkY0RDgxMTY2QzI1QTAwRTg5QTg2IC8qIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMjU0MkY0RDkxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5NDg5RkM1MTJDMDBGMDMwMEQ4M0YwRiAvKiBB
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyOTQ4OUZDNjEyQzAwRjAzMDBEODNGMEYgLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNjcm9s
bFZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUE4MTIwODBGQkI5QzFE
MDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlBODEyMDkwRkJCOUMxRDAwNTEwMjkzIC8qIEFj
Y2Vzc2liaWxpdHlUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
OUE4MTIwQTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlBUklBR3JpZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjkzOCw2ICsxMjk0Miw4IEBACiAJ
CQkJQTQwOUM5ODMxMTZEMERERDAwNzE5N0JEIC8qIEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGlj
YXRvci5oICovLAogCQkJCTI5QTgxMjA4MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcCAqLywKIAkJCQkyOUE4MTIxQjBGQkI5QzFEMDA1MTAyOTMgLyogQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oICovLAorCQkJCTI5NDg5RkM2MTJDMDBGMDMwMEQ4M0Yw
RiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAgKi8sCisJCQkJMjk0ODlGQzUxMkMwMEYw
MzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggKi8sCiAJCQkJOTNDNEY2RTgx
MTA4RjlBNTAwOTlEMERCIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwICovLAogCQkJCTkz
QzRGNkU5MTEwOEY5QTUwMDk5RDBEQiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmggKi8sCiAJ
CQkJMDcwOUZDNEIxMDI1REVEODAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuY3BwICov
LApAQCAtMjIyNjUsNiArMjIyNzEsNyBAQAogCQkJCTkzRjE5OUVEMDgyNDVFNTkwMDFFOUFCQyAv
KiBYU0xUUHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAy
RUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0RENEQ4NzBG
REY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjk0ODlG
QzcxMkMwMEYwMzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3RUU2ODQ2MDEyRDI2RTM4MDBFNzk0MTUgLyogQXV0aGVudGljYXRpb25DRi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0VFNjg0NjExMkQyNkUzODAwRTc5NDE1IC8qIEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUU2ODQ2NDEyRDI2RTM4MDBF
Nzk0MTUgLyogQ29va2llU3RvcmFnZUNGTmV0LmggaW4gSGVhZGVycyAqLywKQEAgLTI0OTQzLDYg
KzI0OTUwLDcgQEAKIAkJCQk5M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nv
ckxpYnhzbHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5
IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0RENEQ4NjBGREY0
RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyOTQ4OUZD
ODEyQzAwRjAzMDBEODNGMEYgLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0VFNjg0NUYxMkQyNkUzODAwRTc5NDE1IC8qIEF1dGhlbnRpY2F0aW9uQ0Yu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0NjIxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tp
ZUphckNGTmV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFRTY4NDYzMTJEMjZFMzgwMEU3OTQx
NSAvKiBDb29raWVTdG9yYWdlQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NiArNDIsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmgiCiAjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3
LmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5oIgogI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlTbGlkZXIuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKQEAgLTQ5
LDYgKzUwLDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaCIKICNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuaCIKICNpbmNsdWRlICJBY2Nl
c3NpYmlsaXR5VGFibGVSb3cuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZv
Y3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEFyZWFF
bGVtZW50LmgiCkBAIC02MSwxMiArNjMsMTMgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCisjaW5jbHVk
ZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJUYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUg
IlJlbmRlclRhYmxlUm93LmgiCi0jaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKLSNpbmNsdWRl
ICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2Ny
b2xsVmlldy5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIApAQCAtNzcsOSArODAs
MTAgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIGJvb2wgQVhPYmplY3RDYWNoZTo6Z0Fj
Y2Vzc2liaWxpdHlFbmFibGVkID0gZmFsc2U7CiBib29sIEFYT2JqZWN0Q2FjaGU6OmdBY2Nlc3Np
YmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZCA9IGZhbHNlOwogCi1BWE9iamVjdENh
Y2hlOjpBWE9iamVjdENhY2hlKCkKK0FYT2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2FjaGUoY29uc3Qg
RG9jdW1lbnQqIGRvYykKICAgICA6IG1fbm90aWZpY2F0aW9uUG9zdFRpbWVyKHRoaXMsICZBWE9i
amVjdENhY2hlOjpub3RpZmljYXRpb25Qb3N0VGltZXJGaXJlZCkKIHsKKyAgICBtX2RvY3VtZW50
ID0gY29uc3RfY2FzdDxEb2N1bWVudCo+KGRvYyk7CiB9CiAKIEFYT2JqZWN0Q2FjaGU6On5BWE9i
amVjdENhY2hlKCkKQEAgLTE1MSwxOSArMTU1LDMwIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFY
T2JqZWN0Q2FjaGU6OmZvY3UKICAgICByZXR1cm4gb2JqOwogfQogCitBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCF3aWRn
ZXQpCisgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICBBWElEIGF4SUQgPSBtX3dpZGdl
dE9iamVjdE1hcHBpbmcuZ2V0KHdpZGdldCk7CisgICAgQVNTRVJUKCFIYXNoVHJhaXRzPEFYSUQ+
Ojppc0RlbGV0ZWRWYWx1ZShheElEKSk7CisgICAgaWYgKCFheElEKQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICByZXR1cm4gbV9vYmplY3RzLmdldChheElEKS5nZXQoKTsgICAgCit9Cisg
ICAgCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKIHsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gMDsKICAg
ICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSAwOwogICAgIEFYSUQgYXhJRCA9IG1f
cmVuZGVyT2JqZWN0TWFwcGluZy5nZXQocmVuZGVyZXIpOwogICAgIEFTU0VSVCghSGFzaFRyYWl0
czxBWElEPjo6aXNEZWxldGVkVmFsdWUoYXhJRCkpOwotCi0gICAgaWYgKGF4SUQpCi0gICAgICAg
IG9iaiA9IG1fb2JqZWN0cy5nZXQoYXhJRCkuZ2V0KCk7CisgICAgaWYgKCFheElEKQorICAgICAg
ICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4gb2JqOworICAgIHJldHVybiBtX29iamVjdHMu
Z2V0KGF4SUQpLmdldCgpOyAgICAKIH0KIAogLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgYmVsb25n
cyBvbiBOb2RlLgpAQCAtMjMwLDYgKzI0NSwyOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3Np
YmlsaXR5T2JqZWN0PiBjCiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNy
ZWF0ZShyZW5kZXJlcik7CiB9CiAKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6
OmdldE9yQ3JlYXRlKFdpZGdldCogd2lkZ2V0KQoreworICAgIGlmICghd2lkZ2V0KQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBnZXQod2lk
Z2V0KSkKKyAgICAgICAgcmV0dXJuIG9iajsKKyAgICAKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0
eU9iamVjdD4gbmV3T2JqID0gMDsKKyAgICBpZiAod2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAg
ICAgICBuZXdPYmogPSBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6Y3JlYXRlKHN0YXRpY19jYXN0
PFNjcm9sbFZpZXcqPih3aWRnZXQpKTsKKyAgICBlbHNlIGlmICh3aWRnZXQtPmlzU2Nyb2xsYmFy
KCkpCisgICAgICAgIG5ld09iaiA9IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmNyZWF0ZShzdGF0
aWNfY2FzdDxTY3JvbGxiYXIqPih3aWRnZXQpKTsKKyAgICAgICAgCisgICAgZ2V0QVhJRChuZXdP
YmouZ2V0KCkpOworICAgIAorICAgIG1fd2lkZ2V0T2JqZWN0TWFwcGluZy5zZXQod2lkZ2V0LCBu
ZXdPYmotPmF4T2JqZWN0SUQoKSk7CisgICAgbV9vYmplY3RzLnNldChuZXdPYmotPmF4T2JqZWN0
SUQoKSwgbmV3T2JqKTsgICAgCisgICAgYXR0YWNoV3JhcHBlcihuZXdPYmouZ2V0KCkpOworICAg
IHJldHVybiBuZXdPYmouZ2V0KCk7Cit9CisgICAgCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9i
amVjdENhY2hlOjpnZXRPckNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAgIGlm
ICghcmVuZGVyZXIpCkBAIC0yNDcsNiArMjg0LDExIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFY
T2JqZWN0Q2FjaGU6OmdldE8KICAgICBhdHRhY2hXcmFwcGVyKG5ld09iai5nZXQoKSk7CiAgICAg
cmV0dXJuIG5ld09iai5nZXQoKTsKIH0KKyAgICAKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2Jq
ZWN0Q2FjaGU6OnJvb3RPYmplY3QoKQoreworICAgIHJldHVybiBnZXRPckNyZWF0ZShtX2RvY3Vt
ZW50LT52aWV3KCkpOworfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpn
ZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSByb2xlKQogewpAQCAtMjc1LDkgKzMxNyw2IEBA
IEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE8KICAgICBjYXNlIE1lbnVM
aXN0T3B0aW9uUm9sZToKICAgICAgICAgb2JqID0gQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9u
OjpjcmVhdGUoKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTY3JvbGxCYXJSb2xlOgotICAg
ICAgICBvYmogPSBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpjcmVhdGUoKTsKLSAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgb2JqID0gMDsKICAgICB9CkBAIC0zMjMsNiArMzYy
LDE3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cmVtb3ZlKFJlbmRlck9iamVjdCoKICAgICBtX3Jl
bmRlck9iamVjdE1hcHBpbmcucmVtb3ZlKHJlbmRlcmVyKTsKIH0KIAordm9pZCBBWE9iamVjdENh
Y2hlOjpyZW1vdmUoV2lkZ2V0KiB2aWV3KQoreworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBBWElEIGF4SUQgPSBtX3dpZGdldE9iamVjdE1hcHBpbmcuZ2V0
KHZpZXcpOworICAgIHJlbW92ZShheElEKTsKKyAgICBtX3dpZGdldE9iamVjdE1hcHBpbmcucmVt
b3ZlKHZpZXcpOworfQorICAgIAorICAgIAogI2lmICFQTEFURk9STShXSU4pIHx8IE9TKFdJTkNF
KQogQVhJRCBBWE9iamVjdENhY2hlOjpwbGF0Zm9ybUdlbmVyYXRlQVhJRCgpIGNvbnN0CiB7CkBA
IC00NzgsNiArNTI4LDE4IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6bm9kZVRleHRDaGFuZ2VOb3Rp
ZmkKICNlbmRpZgogCiAjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQorCit2b2lkIEFYT2JqZWN0Q2Fj
aGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KiB2aWV3KQoreworICAgIGlmICgh
dmlldykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY3Jl
YXRlIGEgc2Nyb2xsIHZpZXcgZnJvbSB0aGlzIG1ldGhvZCwgb25seSB1cGRhdGUgYW4gZXhpc3Rp
bmcgb25lLgorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbFZpZXdPYmplY3QgPSBnZXQo
dmlldyk7CisgICAgaWYgKHNjcm9sbFZpZXdPYmplY3QpCisgICAgICAgIHNjcm9sbFZpZXdPYmpl
Y3QtPnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKK30KKyAgICAKIHZvaWQgQVhPYmplY3RD
YWNoZTo6aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlKFJlbmRlck9iamVjdCAqcmVuZGVyZXIpCiB7
CiAgICAgaWYgKCFyZW5kZXJlcikKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwxMSArNDIsMTQgQEAgY2xhc3MgV2ViQ29yZVRl
eHRNYXJrZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRG9jdW1lbnQ7CiBjbGFz
cyBIVE1MQXJlYUVsZW1lbnQ7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKIGNsYXNzIFJlbmRl
ck9iamVjdDsKK2NsYXNzIFNjcm9sbFZpZXc7CiBjbGFzcyBWaXNpYmxlUG9zaXRpb247CitjbGFz
cyBXaWRnZXQ7CiAKIHN0cnVjdCBUZXh0TWFya2VyRGF0YSB7CiAgICAgQVhJRCBheElEOwpAQCAt
NTksMTQgKzYyLDE3IEBAIGVudW0gUG9zdFR5cGUgeyBQb3N0U3luY2hyb25vdXNseSwgUG9zdEEK
IAogY2xhc3MgQVhPYmplY3RDYWNoZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0g
ICAgQVhPYmplY3RDYWNoZSgpOworICAgIEFYT2JqZWN0Q2FjaGUoY29uc3QgRG9jdW1lbnQqKTsK
ICAgICB+QVhPYmplY3RDYWNoZSgpOwogCiAgICAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGZvY3VzZWRVSUVsZW1lbnRGb3JQYWdlKGNvbnN0IFBhZ2UqKTsKIAotICAgIC8vIHRvIGJlIHVz
ZWQgd2l0aCByZW5kZXIgb2JqZWN0cwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3Jl
YXRlKFJlbmRlck9iamVjdCopOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvb3RPYmplY3Qo
KTsKICAgICAKKyAgICAvLyBGb3IgQVggb2JqZWN0cyB3aXRoIGVsZW1lbnRzIHRoYXQgYmFjayB0
aGVtLgorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKFJlbmRlck9iamVjdCop
OworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKFdpZGdldCopOworCiAgICAg
Ly8gdXNlZCBmb3Igb2JqZWN0cyB3aXRob3V0IGJhY2tpbmcgZWxlbWVudHMKICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBnZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSk7CiAgICAgCkBAIC03
NCw2ICs4MCw3IEBAIHB1YmxpYzoKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXQoUmVuZGVy
T2JqZWN0Kik7CiAgICAgCiAgICAgdm9pZCByZW1vdmUoUmVuZGVyT2JqZWN0Kik7CisgICAgdm9p
ZCByZW1vdmUoV2lkZ2V0Kik7CiAgICAgdm9pZCByZW1vdmUoQVhJRCk7CiAKICAgICB2b2lkIGRl
dGFjaFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdCopOwpAQCAtODgsNiArOTUsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBoYW5kbGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZChSZW5kZXJPYmplY3Qq
IG9sZEZvY3VzZWRSZW5kZXJlciwgUmVuZGVyT2JqZWN0KiBuZXdGb2N1c2VkUmVuZGVyZXIpOwog
ICAgIHZvaWQgaGFuZGxlU2Nyb2xsZWRUb0FuY2hvcihjb25zdCBOb2RlKiBhbmNob3JOb2RlKTsK
ICAgICB2b2lkIGhhbmRsZUFyaWFFeHBhbmRlZENoYW5nZShSZW5kZXJPYmplY3QqKTsKKyAgICB2
b2lkIGhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3Kik7CiAgICAgCiAgICAgc3RhdGlj
IHZvaWQgZW5hYmxlQWNjZXNzaWJpbGl0eSgpIHsgZ0FjY2Vzc2liaWxpdHlFbmFibGVkID0gdHJ1
ZTsgfQogICAgIHN0YXRpYyB2b2lkIGVuYWJsZUVuaGFuY2VkVXNlckludGVyZmFjZUFjY2Vzc2li
aWxpdHkoKSB7IGdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZCA9IHRy
dWU7IH0KQEAgLTE0NSw4ICsxNTMsMTAgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgbm9kZVRleHRD
aGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhUZXh0Q2hh
bmdlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KTsKIAogcHJpdmF0ZToKKyAgICBE
b2N1bWVudCogbV9kb2N1bWVudDsKICAgICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmls
aXR5T2JqZWN0PiA+IG1fb2JqZWN0czsKICAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIEFYSUQ+
IG1fcmVuZGVyT2JqZWN0TWFwcGluZzsKKyAgICBIYXNoTWFwPFdpZGdldCosIEFYSUQ+IG1fd2lk
Z2V0T2JqZWN0TWFwcGluZzsKICAgICBIYXNoU2V0PE5vZGUqPiBtX3RleHRNYXJrZXJOb2RlczsK
ICAgICBzdGF0aWMgYm9vbCBnQWNjZXNzaWJpbGl0eUVuYWJsZWQ7CiAgICAgc3RhdGljIGJvb2wg
Z0FjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkOwpAQCAtMTYwLDYgKzE3
MCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZvY3VzZWRJ
bWFnZU1hcFVJRWxlbWVudChIVE1MQXJlYUVsZW1lbnQqKTsKICAgICAKICAgICBBWElEIGdldEFY
SUQoQWNjZXNzaWJpbGl0eU9iamVjdCopOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldChX
aWRnZXQqKTsKIH07CiAKIGJvb2wgbm9kZUhhc1JvbGUoTm9kZSosIGNvbnN0IFN0cmluZyYgcm9s
ZSk7CkBAIC0xNzksNiArMTkwLDcgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxl
Rm9jdXNlZAogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlU2Nyb2xsZWRUb0FuY2hv
cihjb25zdCBOb2RlKikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpjb250ZW50Q2hh
bmdlZChSZW5kZXJPYmplY3QqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRs
ZUFyaWFFeHBhbmRlZENoYW5nZShSZW5kZXJPYmplY3QqKSB7IH0KK2lubGluZSB2b2lkIEFYT2Jq
ZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KikgeyB9CiAjZW5kaWYK
IAogfQpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdy
aWQuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUFSSUFHcmlkLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHJpdmF0ZToK
ICAgICAvLyBBUklBIHRyZWVncmlkcyBhbmQgZ3JpZHMgc3VwcG9ydCBzZWxlY3RlZCByb3dzLgog
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NlbGVjdGVkUm93cygpIHsgcmV0dXJuIHRydWU7IH0g
ICAgCiAKLSAgICB2b2lkIGFkZENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwgSGFz
aFNldDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVt
bkNvdW50KTsKKyAgICB2b2lkIGFkZENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBIYXNoU2V0
PEFjY2Vzc2liaWxpdHlPYmplY3QqPiYgYXBwZW5kZWRSb3dzLCB1bnNpZ25lZCYgY29sdW1uQ291
bnQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKSW5kZXg6IFdlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5jcHAJKHJldmlzaW9u
IDc0OTczKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExp
bmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsMTEgKzEzNiw2IEBAIEludFJlY3QgQWNjZXNz
aWJpbGl0eUltYWdlTWFwTGluazo6ZWxlbWUKICAgICByZXR1cm4gbV9hcmVhRWxlbWVudC0+Z2V0
UmVjdChyZW5kZXJlcik7CiB9CiAgICAgCi1JbnRTaXplIEFjY2Vzc2liaWxpdHlJbWFnZU1hcExp
bms6OnNpemUoKSBjb25zdAotewotICAgIHJldHVybiBlbGVtZW50UmVjdCgpLnNpemUoKTsKLX0K
LQogU3RyaW5nIEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbms6OnN0cmluZ1ZhbHVlRm9yTVNBQSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIHVybCgpOwpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5oCShyZXZpc2lvbiA3NDk3MykKKysr
IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY4LDcgKzY4LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIHN0
cmluZ1ZhbHVlRm9yTVNBQSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIG5hbWVGb3JNU0FB
KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgSW50UmVjdCBlbGVtZW50UmVjdCgpIGNvbnN0OwogCiBwcml2YXRlOiAgICAKSW5kZXg6IFdl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9u
LmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUxpc3RCb3hPcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsMTEgKzE1Miw2IEBA
IFN0cmluZyBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6c3RyaW4KICAgICByZXR1cm4gU3Ry
aW5nKCk7CiB9CiAKLUludFNpemUgQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OnNpemUoKSBj
b25zdAotewotICAgIHJldHVybiBlbGVtZW50UmVjdCgpLnNpemUoKTsKLX0KLQogRWxlbWVudCog
QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OmFjdGlvbkVsZW1lbnQoKSBjb25zdAogewogICAg
IHJldHVybiBtX29wdGlvbkVsZW1lbnQ7CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uaAkocmV2aXNpb24gNzQ5NzMpCisrKyBX
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsNyArNjEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNhblNl
dFNlbGVjdGVkQXR0cmlidXRlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIEludFJlY3QgZWxlbWVu
dFJlY3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0KCkgY29uc3Q7CiAgICAgYm9v
bCBpc0xpc3RCb3hPcHRpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgCkBAIC03Miw3
ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIGxpc3RCb3hPcHRpb25Q
YXJlbnROb2RlKCkgY29uc3Q7CiAgICAgaW50IGxpc3RCb3hPcHRpb25JbmRleCgpIGNvbnN0Owog
ICAgIEludFJlY3QgbGlzdEJveE9wdGlvblJlY3QoKSBjb25zdDsKLSAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBsaXN0Qm94T3B0aW9uQWNjZXNzaWJpbGl0eU9iamVjdChIVE1MRWxlbWVudCogZWxl
bWVudCkgY29uc3Q7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdEJveE9wdGlvbkFjY2Vz
c2liaWxpdHlPYmplY3QoSFRNTEVsZW1lbnQqKSBjb25zdDsKIH07CiAgICAgCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlIApJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczMCw2ICs3MzAsMTIg
QEAgRnJhbWVWaWV3KiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpkb2N1bWVudAogCiAgICAgcmV0dXJu
IG9iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKIH0KKyAgICAKK3ZvaWQgQWNjZXNzaWJpbGl0
eU9iamVjdDo6dXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKCFoYXNDaGls
ZHJlbigpKQorICAgICAgICBhZGRDaGlsZHJlbigpOyAgICAKK30KIAogdm9pZCBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpjbGVhckNoaWxkcmVuKCkKIHsKQEAgLTEwMDEsNiArMTAwNywzOSBAQCBib29s
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN1cHBvcnRzQVJJQUxpCiAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBsaXZlUmVnaW9uID0gYXJpYUxpdmVSZWdpb25TdGF0dXMoKTsKICAgICByZXR1cm4gZXF1
YWxJZ25vcmluZ0Nhc2UobGl2ZVJlZ2lvbiwgInBvbGl0ZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNl
KGxpdmVSZWdpb24sICJhc3NlcnRpdmUiKTsKIH0KKworQWNjZXNzaWJpbGl0eU9iamVjdCogQWNj
ZXNzaWJpbGl0eU9iamVjdDo6ZWxlbWVudEFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBv
aW50JiBwb2ludCkgY29uc3QKK3sgCisgICAgLy8gU2VuZCB0aGUgaGl0IHRlc3QgYmFjayBpbnRv
IHRoZSBzdWItZnJhbWUgaWYgbmVjZXNzYXJ5LgorICAgIGlmIChpc0F0dGFjaG1lbnQoKSkgewor
ICAgICAgICBXaWRnZXQqIHdpZGdldCA9IHdpZGdldEZvckF0dGFjaG1lbnRWaWV3KCk7CisgICAg
ICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICAgICAgcmV0
dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoc3RhdGljX2Nhc3Q8U2Nyb2xsVmlldyo+
KHdpZGdldCkpLT5hY2Nlc3NpYmlsaXR5SGl0VGVzdChwb2ludCk7CisgICAgfQorCisgICAgcmV0
dXJuIGNvbnN0X2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdCo+KHRoaXMpOyAKK30KKyAgICAKK0FY
T2JqZWN0Q2FjaGUqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmF4T2JqZWN0Q2FjaGUoKSBjb25zdAor
eworICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOworICAgIGlmIChkb2MpCisgICAgICAg
IHJldHVybiBkb2MtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICByZXR1cm4gMDsKK30KKyAgICAKK0Fj
Y2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZvY3VzZWRVSUVsZW1lbnQo
KSBjb25zdAoreworICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOworICAgIGlmICghZG9j
KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBQYWdlKiBwYWdlID0gZG9jLT5wYWdlKCk7
CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gQVhP
YmplY3RDYWNoZTo6Zm9jdXNlZFVJRWxlbWVudEZvclBhZ2UocGFnZSk7Cit9CiAgICAgCiBBY2Nl
c3NpYmlsaXR5QnV0dG9uU3RhdGUgQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2hlY2tib3hPclJhZGlv
VmFsdWUoKSBjb25zdAogewpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw2ICsyNjAsOCBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJp
bGl0eVNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29s
IGlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IAogICAgIHZpcnR1YWwgYm9vbCBpc0FuY2hvcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzQXR0YWNobWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzSGVhZGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0z
MDksNiArMzExLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNCdXR0b24oKSBjb25zdCB7IHJldHVy
biByb2xlVmFsdWUoKSA9PSBCdXR0b25Sb2xlOyB9CiAgICAgYm9vbCBpc0xpc3RJdGVtKCkgY29u
c3QgeyByZXR1cm4gcm9sZVZhbHVlKCkgPT0gTGlzdEl0ZW1Sb2xlOyB9CiAgICAgYm9vbCBpc0No
ZWNrYm94T3JSYWRpbygpIGNvbnN0IHsgcmV0dXJuIGlzQ2hlY2tib3goKSB8fCBpc1JhZGlvQnV0
dG9uKCk7IH0KKyAgICBib29sIGlzU2Nyb2xsVmlldygpIGNvbnN0IHsgcmV0dXJuIHJvbGVWYWx1
ZSgpID09IFNjcm9sbEFyZWFSb2xlOyB9CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzQ2hlY2tl
ZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRW5hYmxlZCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0zMzIsNiArMzM1LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBjYW5TZXRGb2N1c0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGNhblNldFRleHRSYW5nZUF0dHJpYnV0ZXMoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRWYWx1ZUF0dHJpYnV0ZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGNhblNldE51bWVyaWNW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGNhblNldFNl
bGVjdGVkQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgY2FuU2V0U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGNhblNldEV4cGFuZGVkQXR0cmlidXRlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KQEAgLTM3Myw5ICszNzcsOSBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVk
IG9uIHRoZSByb290IEFYIG9iamVjdCB0byByZXR1cm4gdGhlIGRlZXBlc3QgYXZhaWxhYmxlIGVs
ZW1lbnQuCiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5SGl0
VGVzdChjb25zdCBJbnRQb2ludCYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICAvLyBDYWxsZWQg
b24gdGhlIEFYIG9iamVjdCBhZnRlciB0aGUgcmVuZGVyIHRyZWUgZGV0ZXJtaW5lcyB3aGljaCBp
cyB0aGUgcmlnaHQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC4KLSAgICB2aXJ0dWFsIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGVsZW1lbnRBY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2lu
dCYpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdCo+KHRoaXMp
OyB9CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBlbGVtZW50QWNjZXNzaWJpbGl0
eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgQWNjZXNzaWJp
bGl0eU9iamVjdCogZm9jdXNlZFVJRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2
aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZvY3VzZWRVSUVsZW1lbnQoKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxhc3RDaGlsZCgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KQEAgLTM5MSw3ICszOTUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB0aXRsZVVJRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KICAgICB2aXJ0dWFsIGJvb2wgZXhwb3Nlc1RpdGxlVUlFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogY29ycmVzcG9uZGlu
Z0NvbnRyb2xGb3JMYWJlbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KKyAgICB2aXJ0
dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRp
b24pIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICAKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlS
b2xlIGFyaWFSb2xlQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gVW5rbm93blJvbGU7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNQcmVzZW50YXRpb25hbENoaWxkT2ZBcmlhUm9sZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGFyaWFSb2xlSGFzUHJlc2VudGF0aW9u
YWxDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC00MDIsNyArNDA3LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGFyaWFEZXNjcmliZWRCeUF0dHJpYnV0ZSgpIGNv
bnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CiAgICAgdmlydHVhbCBTdHJpbmcgYWNjZXNzaWJpbGl0
eURlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KIAotICAgIHZpcnR1YWwg
QVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2
aXJ0dWFsIEFYT2JqZWN0Q2FjaGUqIGF4T2JqZWN0Q2FjaGUoKSBjb25zdDsKICAgICBBWElEIGF4
T2JqZWN0SUQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAgICAgdm9pZCBzZXRBWE9iamVjdElE
KEFYSUQgYXhPYmplY3RJRCkgeyBtX2lkID0gYXhPYmplY3RJRDsgfQogICAgIApAQCAtNDExLDcg
KzQxNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEVsZW1lbnQqIGFjdGlvbkVsZW1lbnQoKSBj
b25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBJbnRSZWN0IGJvdW5kaW5nQm94UmVjdCgp
IGNvbnN0IHsgcmV0dXJuIEludFJlY3QoKTsgfQogICAgIHZpcnR1YWwgSW50UmVjdCBlbGVtZW50
UmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGVsZW1lbnRSZWN0KCku
c2l6ZSgpOyB9CiAgICAgdmlydHVhbCBJbnRQb2ludCBjbGlja1BvaW50KCkgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIFBsYWluVGV4dFJhbmdlIHNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3QgeyByZXR1
cm4gUGxhaW5UZXh0UmFuZ2UoKTsgfQpAQCAtNDQyLDYgKzQ0Nyw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRUZXh0KGNvbnN0IFN0cmluZyYpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBzZXRTZWxlY3RlZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0VmFsdWUoZmxvYXQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3RlZChi
b29sKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRSb3dzKEFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciYpIHsgfQogICAgIApAQCAtNDU5LDcgKzQ2NSw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRyZW4oKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2
ZUNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBoYXND
aGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1faGF2ZUNoaWxkcmVuOyB9Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RlZENoaWxk
cmVuKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB2
aXNpYmxlQ2hpbGRyZW4oQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgeyB9CiAgICAgdmly
dHVhbCB2b2lkIHRhYkNoaWxkcmVuKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIHsgfQpJ
bmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw3ICs0MzQs
MTUgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlcgogICAgICAgICAg
ICAgcmV0dXJuIHBhcmVudDsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUo
KS0+Z2V0T3JDcmVhdGUocmVuZGVyUGFyZW50T2JqZWN0KCkpOworICAgIFJlbmRlck9iamVjdCog
cGFyZW50T2JqID0gcmVuZGVyUGFyZW50T2JqZWN0KCk7CisgICAgaWYgKHBhcmVudE9iaikKKyAg
ICAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocGFyZW50T2JqKTsKKyAg
ICAKKyAgICAvLyBXZWJBcmVhJ3MgcGFyZW50IHNob3VsZCBiZSB0aGUgc2Nyb2xsIHZpZXcgY29u
dGFpbmluZyBpdC4KKyAgICBpZiAoaXNXZWJBcmVhKCkpCisgICAgICAgIHJldHVybiBheE9iamVj
dENhY2hlKCktPmdldE9yQ3JlYXRlKG1fcmVuZGVyZXItPmZyYW1lKCktPnZpZXcoKSk7CisgICAg
CisgICAgcmV0dXJuIDA7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNX
ZWJBcmVhKCkgY29uc3QKQEAgLTIzMTYsMTIgKzIzMjQsNiBAQCBXaWRnZXQqIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OndpZGdlCiAgICAgcmV0dXJuIHRvUmVuZGVyV2lkZ2V0KG1fcmVuZGVy
ZXIpLT53aWRnZXQoKTsKIH0KIAotQVhPYmplY3RDYWNoZSogQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YXhPYmplY3RDYWNoZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcmVuZGVyZXIpOwot
ICAgIHJldHVybiBtX3JlbmRlcmVyLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCk7Ci19Ci0K
IEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2li
aWxpdHlQYXJlbnRGb3JJbWFnZU1hcChIVE1MTWFwRWxlbWVudCogbWFwKSBjb25zdAogewogICAg
IC8vIGZpbmQgYW4gaW1hZ2UgdGhhdCBpcyB1c2luZyB0aGlzIG1hcApAQCAtMjczOSw4ICsyNzQx
LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlcgogICAgIAogICAg
IFJlbmRlckxheWVyKiBsYXllciA9IHRvUmVuZGVyQm94KG1fcmVuZGVyZXIpLT5sYXllcigpOwog
ICAgICAKLSAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25s
eSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlKTsK
KyAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhp
dFRlc3RSZXF1ZXN0OjpBY3RpdmUpOwogICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdCA9
IEhpdFRlc3RSZXN1bHQocG9pbnQpOwogICAgIGxheWVyLT5oaXRUZXN0KHJlcXVlc3QsIGhpdFRl
c3RSZXN1bHQpOwogICAgIGlmICghaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKSkKQEAgLTI3NzUs
MTUgKzI3NzYsNiBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6Zm9jdXNlZFVJRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgUGFnZSogcGFn
ZSA9IG1fcmVuZGVyZXItPmRvY3VtZW50KCktPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIEFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVsZW1l
bnRGb3JQYWdlKHBhZ2UpOwotfQotCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNo
b3VsZEZvY3VzQWN0aXZlRGVzY2VuZGFudCgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhcmlhUm9s
ZUF0dHJpYnV0ZSgpKSB7CkBAIC0zMzE1LDggKzMzMDcsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnVwZGF0ZUNoCiAgICAgaWYgKG5lZWRzVG9VcGRhdGVDaGlsZHJlbigpKQog
ICAgICAgICBjbGVhckNoaWxkcmVuKCk7ICAgICAgICAKICAgICAKLSAgICBpZiAoIWhhc0NoaWxk
cmVuKCkpCi0gICAgICAgIGFkZENoaWxkcmVuKCk7ICAgIAorICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKIH0KICAgICAKIGNvbnN0IEFjY2Vzc2li
aWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6Y2hpbGRyZW4oKQpAQCAtMzM1NSw2ICszMzQ2LDEzIEBAIHZvaWQgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2hpbGQKICAgICAgICAgfQogICAgIH0KICAgICAKKyAg
ICAvLyBGcmFtZVZpZXcncyBuZWVkIHRvIGJlIGluc2VydGVkIGludG8gdGhlIEFYIGhpZXJhcmNo
eSB3aGVuIGVuY291bnRlcmVkLgorICAgIGlmIChpc0F0dGFjaG1lbnQoKSkgeworICAgICAgICBX
aWRnZXQqIHdpZGdldCA9IHdpZGdldEZvckF0dGFjaG1lbnRWaWV3KCk7CisgICAgICAgIGlmICh3
aWRnZXQgJiYgd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICAgICAgbV9jaGlsZHJlbi5h
cHBlbmQoYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSh3aWRnZXQpKTsKKyAgICB9CisgICAg
CiAgICAgLy8gZm9yIGEgUmVuZGVySW1hZ2UsIGFkZCB0aGUgPGFyZWE+IGVsZW1lbnRzIGFzIGlu
ZGl2aWR1YWwgYWNjZXNzaWJpbGl0eSBvYmplY3RzCiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IGNzc0JveCA9IHJlbmRlckJveE1vZGVsT2JqZWN0KCk7CiAgICAgaWYgKGNzc0JveCAmJiBjc3NC
b3gtPmlzUmVuZGVySW1hZ2UoKSkgewpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNiw3ICsxMjYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgbGF5b3V0Q291
bnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBlc3RpbWF0ZWRMb2FkaW5nUHJvZ3Jlc3Mo
KSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZvY3VzZWRV
SUVsZW1lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZpcnN0
Q2hpbGQoKSBjb25zdDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxhc3RDaGls
ZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcHJldmlvdXNTaWJs
aW5nKCkgY29uc3Q7CkBAIC0xNDcsOCArMTQ2LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBhcmlhUm9sZUhhc1ByZXNlbnRhdGlvbmFsQ2hpbGRyZW4oKSBjb25zdDsKICAgICB2b2lkIHVw
ZGF0ZUFjY2Vzc2liaWxpdHlSb2xlKCk7CiAgICAgCi0gICAgdmlydHVhbCBBWE9iamVjdENhY2hl
KiBheE9iamVjdENhY2hlKCkgY29uc3Q7Ci0KICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIG9uIHRo
ZSByb290IGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRvIGtpY2sgb2ZmIGEgaGl0IHRlc3QuCiAgICAg
dmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJ
bnRQb2ludCYpIGNvbnN0OwogCkBAIC0yOTAsNyArMjg3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGFkZFJhZGlvQnV0dG9uR3JvdXBNZW1iZXJzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYg
bGlua2VkVUlFbGVtZW50cykgY29uc3Q7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogaW50ZXJu
YWxMaW5rRWxlbWVudCgpIGNvbnN0OwogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vzc2li
aWxpdHlJbWFnZU1hcEhpdFRlc3QoSFRNTEFyZWFFbGVtZW50KiwgY29uc3QgSW50UG9pbnQmKSBj
b25zdDsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1h
Z2VNYXAoSFRNTE1hcEVsZW1lbnQqIG1hcCkgY29uc3Q7CisgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogYWNjZXNzaWJpbGl0eVBhcmVudEZvckltYWdlTWFwKEhUTUxNYXBFbGVtZW50KikgY29uc3Q7
CiAgICAgYm9vbCByZW5kZXJPYmplY3RJc09ic2VydmFibGUoUmVuZGVyT2JqZWN0KikgY29uc3Q7
CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJQYXJlbnRPYmplY3QoKSBjb25zdDsKICAgICAKQEAg
LTMwMCw3ICsyOTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0RWxlbWVudEF0dHJpYnV0ZVZh
bHVlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBib29sKTsKICAgICAKICAgICBTdHJpbmcgYWNjZXNz
aWJpbGl0eURlc2NyaXB0aW9uRm9yRWxlbWVudHMoVmVjdG9yPEVsZW1lbnQqPiAmZWxlbWVudHMp
IGNvbnN0OwotICAgIHZvaWQgZWxlbWVudHNGcm9tQXR0cmlidXRlKFZlY3RvcjxFbGVtZW50Kj4m
IGVsZW1lbnRzLCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdDsKKyAgICB2b2lkIGVs
ZW1lbnRzRnJvbUF0dHJpYnV0ZShWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW50cywgY29uc3QgUXVh
bGlmaWVkTmFtZSYpIGNvbnN0OwogICAgIFN0cmluZyBhcmlhQWNjZXNzaWJpbGl0eURlc2NyaXB0
aW9uKCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBFU3BlYWsgc3BlYWtQcm9wZXJ0eSgpIGNv
bnN0OwpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNj
cm9sbFZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5U2Nyb2xsVmll
dy5oIgorCisjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxp
dHlTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJQYXJ0LmgiCisjaW5jbHVkZSAiU2Ny
b2xsVmlldy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitBY2Nlc3NpYmlsaXR5U2Ny
b2xsVmlldzo6QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoU2Nyb2xsVmlldyogdmlldykKKyAgICA6
IG1fc2Nyb2xsVmlldyh2aWV3KQoreworfQorCitQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3PiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6Y3JlYXRlKFNjcm9sbFZpZXcqIHZpZXcp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyh2aWV3
KSk7Cit9CisgICAgCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmll
dzo6c2Nyb2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QK
K3sKKyAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5T3Jp
ZW50YXRpb25WZXJ0aWNhbDoKKyAgICAgICAgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIgPyBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpIDogMDsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlPcmll
bnRhdGlvbkhvcml6b250YWw6CisgICAgICAgIHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIg
PyBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCkgOiAwOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gMDsKK30KKworY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yJiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6Y2hpbGRyZW4oKQoreworICAgIGlm
ICghbV9oYXZlQ2hpbGRyZW4pCisgICAgICAgIGFkZENoaWxkcmVuKCk7CisgICAgcmV0dXJuIG1f
Y2hpbGRyZW47Cit9CisgICAgCit2b2lkIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Ojp1cGRhdGVD
aGlsZHJlbklmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAobV9zY3JvbGxWaWV3LT5ob3Jpem9udGFs
U2Nyb2xsYmFyKCkgJiYgIW1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyID0gYWRkQ2hpbGRTY3JvbGxiYXIobV9zY3JvbGxWaWV3LT5ob3Jpem9udGFs
U2Nyb2xsYmFyKCkpOworICAgIGVsc2UgaWYgKCFtX3Njcm9sbFZpZXctPmhvcml6b250YWxTY3Jv
bGxiYXIoKSAmJiBtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgcmVtb3ZlQ2hpbGRT
Y3JvbGxiYXIobV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpKTsKKyAgICAgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxWaWV3LT52ZXJ0aWNh
bFNjcm9sbGJhcigpICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyID0gYWRkQ2hpbGRTY3JvbGxiYXIobV9zY3JvbGxWaWV3LT52ZXJ0aWNhbFNjcm9s
bGJhcigpKTsKKyAgICBlbHNlIGlmICghbV9zY3JvbGxWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigp
ICYmIG1fdmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgcmVtb3ZlQ2hpbGRTY3JvbGxiYXIo
bV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQoKSk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIg
PSAwOworICAgIH0KK30KKyAgICAKK3ZvaWQgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6OnJlbW92
ZUNoaWxkU2Nyb2xsYmFyKEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbGJhcikKK3sKKyAgICBz
aXplX3QgcG9zID0gbV9jaGlsZHJlbi5maW5kKHNjcm9sbGJhcik7CisgICAgaWYgKHBvcyAhPSBX
VEY6Om5vdEZvdW5kKQorICAgICAgICBtX2NoaWxkcmVuLnJlbW92ZShwb3MpOworfQorICAgIAor
QWNjZXNzaWJpbGl0eVNjcm9sbGJhciogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6OmFkZENoaWxk
U2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIGlmICghc2Nyb2xsYmFyKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKiBzY3Jv
bGxCYXJPYmplY3QgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKj4oYXhPYmpl
Y3RDYWNoZSgpLT5nZXRPckNyZWF0ZShzY3JvbGxiYXIpKTsKKyAgICBzY3JvbGxCYXJPYmplY3Qt
PnNldFBhcmVudCh0aGlzKTsKKyAgICBtX2NoaWxkcmVuLmFwcGVuZChzY3JvbGxCYXJPYmplY3Qp
OworICAgIHJldHVybiBzY3JvbGxCYXJPYmplY3Q7Cit9CisgICAgICAgIAordm9pZCBBY2Nlc3Np
YmlsaXR5U2Nyb2xsVmlldzo6YWRkQ2hpbGRyZW4oKQoreworICAgIEFTU0VSVCghbV9oYXZlQ2hp
bGRyZW4pOworICAgIG1faGF2ZUNoaWxkcmVuID0gdHJ1ZTsKKyAgICAKKyAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiB3ZWJBcmVhID0gd2ViQXJlYU9iamVjdCgpOworICAgIGlmICh3ZWJBcmVhKQor
ICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZCh3ZWJBcmVhKTsKKyAgICAKKyAgICB1cGRhdGVDaGls
ZHJlbklmTmVjZXNzYXJ5KCk7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxp
dHlTY3JvbGxWaWV3Ojp3ZWJBcmVhT2JqZWN0KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2Nyb2xs
Vmlldy0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgRG9jdW1l
bnQqIGRvYyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KG1fc2Nyb2xsVmlldy5nZXQoKSktPmZy
YW1lKCktPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2MgfHwgIWRvYy0+cmVuZGVyZXIoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0
ZShkb2MtPnJlbmRlcmVyKCkpOworfQorCisgICAgCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nl
c3NpYmlsaXR5U2Nyb2xsVmlldzo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQm
IHBvaW50KSBjb25zdAoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHdlYkFyZWEgPSB3ZWJB
cmVhT2JqZWN0KCk7CisgICAgaWYgKCF3ZWJBcmVhKQorICAgICAgICByZXR1cm4gMDsKKyAgICAK
KyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
ZWxlbWVudFJlY3QoKS5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBtX2hvcml6b250
YWxTY3JvbGxiYXIuZ2V0KCk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIgJiYgbV92ZXJ0
aWNhbFNjcm9sbGJhci0+ZWxlbWVudFJlY3QoKS5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJl
dHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOworICAgIAorICAgIHJldHVybiB3ZWJBcmVh
LT5hY2Nlc3NpYmlsaXR5SGl0VGVzdChwb2ludCk7Cit9CisgICAgCitEb2N1bWVudCogQWNjZXNz
aWJpbGl0eVNjcm9sbFZpZXc6OmRvY3VtZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2Nyb2xs
Vmlldy0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KG1fc2Nyb2xsVmlldy5nZXQoKSktPmZyYW1lKCktPmRv
Y3VtZW50KCk7Cit9CisKK0ludFJlY3QgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6OmVsZW1lbnRS
ZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxWaWV3LT5mcmFtZVJlY3QoKTsKK30K
KworQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6OnBhcmVudE9i
amVjdCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Njcm9sbFZpZXctPmlzRnJhbWVWaWV3KCkpCisg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIg
PSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihtX3Njcm9sbFZpZXcuZ2V0KCkpLT5mcmFtZSgpLT5v
d25lckVsZW1lbnQoKTsKKyAgICBpZiAob3duZXIgJiYgb3duZXItPnJlbmRlclBhcnQoKSkKKyAg
ICAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUob3duZXItPnJlbmRlclBh
cnQoKS0+cGFyZW50KCkpOworICAgIAorICAgIHJldHVybiAwOworfQorICAgIAorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZSAgICAKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5U2Nyb2xsVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5U2Nyb2xsVmlldy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXdfaAorI2RlZmluZSBBY2Nl
c3NpYmlsaXR5U2Nyb2xsVmlld19oCisKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIEFjY2Vzc2liaWxpdHlTY3JvbGxi
YXI7CitjbGFzcyBTY3JvbGxiYXI7CitjbGFzcyBTY3JvbGxWaWV3OworICAgIAorY2xhc3MgQWNj
ZXNzaWJpbGl0eVNjcm9sbFZpZXcgOiBwdWJsaWMgQWNjZXNzaWJpbGl0eU9iamVjdCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+IGNyZWF0
ZShTY3JvbGxWaWV3Kik7ICAgIAorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZh
bHVlKCkgY29uc3QgeyByZXR1cm4gU2Nyb2xsQXJlYVJvbGU7IH0KKyAgICBTY3JvbGxWaWV3KiBz
Y3JvbGxWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxWaWV3LmdldCgpOyB9CisgICAgCitw
cml2YXRlOgorICAgIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KFNjcm9sbFZpZXcqKTsKKyAgICAK
KyAgICB2aXJ0dWFsIGJvb2wgYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBz
Y3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRkQ2hpbGRyZW4oKTsKKyAgICB2aXJ0dWFsIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0
OworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eUhpdFRlc3Qo
Y29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IEFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciYgY2hpbGRyZW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2hpbGRy
ZW5JZk5lY2Vzc2FyeSgpOworICAgIAorICAgIHZpcnR1YWwgSW50UmVjdCBlbGVtZW50UmVjdCgp
IGNvbnN0OworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0KCkg
Y29uc3Q7CisgICAgCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogd2ViQXJlYU9iamVjdCgpIGNv
bnN0OworICAgIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIqIGFkZENoaWxkU2Nyb2xsYmFyKFNjcm9s
bGJhciopOworICAgIHZvaWQgcmVtb3ZlQ2hpbGRTY3JvbGxiYXIoQWNjZXNzaWJpbGl0eU9iamVj
dCopOworICAgIAorICAgIFJlZlB0cjxTY3JvbGxWaWV3PiBtX3Njcm9sbFZpZXc7CisgICAgUmVm
UHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICBSZWZQ
dHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gbV92ZXJ0aWNhbFNjcm9sbGJhcjsKK307CisKK2lubGlu
ZSBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyogdG9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0
LT5pc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpOworICAgIGlmICghb2JqZWN0LT5pc0FjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3KCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVy
biBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyo+KG9iamVjdCk7Cit9CisgICAg
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5U2Nyb2xs
Vmlld19oCisKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xs
YmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVNjcm9sbGJhci5jcHAJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyNSArMjks
NzcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5U2Nyb2xs
YmFyLmgiCiAKKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OkFjY2Vzc2liaWxp
dHlTY3JvbGxiYXIoKQotICAgIDogbV9zY3JvbGxiYXIoMCkKK0FjY2Vzc2liaWxpdHlTY3JvbGxi
YXI6OkFjY2Vzc2liaWxpdHlTY3JvbGxiYXIoU2Nyb2xsYmFyICpzY3JvbGxiYXIpCisgICAgOiBt
X3Njcm9sbGJhcihzY3JvbGxiYXIpCisgICAgLCBtX3BhcmVudCgwKQogeworICAgIEFTU0VSVChz
Y3JvbGxiYXIpOwogfQogCi1QYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI+IEFjY2Vz
c2liaWxpdHlTY3JvbGxiYXI6OmNyZWF0ZSgpCitQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlTY3Jv
bGxiYXI+IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmNyZWF0ZShTY3JvbGxiYXIgKnNjcm9sbGJh
cikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eVNjcm9sbGJhcihzY3JvbGxiYXIp
KTsKIH0KKyAgICAKK0ludFJlY3QgQWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6ZWxlbWVudFJlY3Qo
KSBjb25zdAoreworICAgIGlmICghbV9zY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7CisgICAgCisgICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKK30KKyAgICAK
K0RvY3VtZW50KiBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpkb2N1bWVudCgpIGNvbnN0Cit7Cisg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gcGFyZW50T2JqZWN0KCk7CisgICAgaWYg
KCFwYXJlbnQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBwYXJlbnQtPmRvY3VtZW50
KCk7Cit9CisKK0FjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFy
OjpvcmllbnRhdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Njcm9sbGJhcikKKyAgICAgICAg
cmV0dXJuIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkhvcml6b250YWw7CisKKyAgICBpZiAobV9z
Y3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAg
cmV0dXJuIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkhvcml6b250YWw7CisgICAgaWYgKG1fc2Ny
b2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICByZXR1
cm4gQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uVmVydGljYWw7CiAKKyAgICByZXR1cm4gQWNjZXNz
aWJpbGl0eU9yaWVudGF0aW9uSG9yaXpvbnRhbDsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5U2Ny
b2xsYmFyOjppc0VuYWJsZWQoKSBjb25zdAoreworICAgIGlmICghbV9zY3JvbGxiYXIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9zY3JvbGxiYXItPmVuYWJsZWQoKTsKK30K
KyAgICAKIGZsb2F0IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OnZhbHVlRm9yUmFuZ2UoKSBjb25z
dAogewogICAgIGlmICghbV9zY3JvbGxiYXIpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBtX3Njcm9sbGJhci0+Y3VycmVudFBvcygpOworCisgICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5j
dXJyZW50UG9zKCkgLyBtX3Njcm9sbGJhci0+bWF4aW11bSgpOwogfQogCit2b2lkIEFjY2Vzc2li
aWxpdHlTY3JvbGxiYXI6OnNldFZhbHVlKGZsb2F0IHZhbHVlKQoreworICAgIGlmICghbV9zY3Jv
bGxiYXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmbG9hdCBuZXdWYWx1ZSA9IHZhbHVl
ICogbV9zY3JvbGxiYXItPm1heGltdW0oKTsKKyAgICAKKyAgICBtX3Njcm9sbGJhci0+c2V0VmFs
dWUobmV3VmFsdWUsIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsgICAgCit9Cisg
ICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVNjcm9sbGJhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsMzAgKzM3LDM0IEBAIGNsYXNzIFNjcm9sbGJhcjsKIAogY2xhc3MgQWNjZXNzaWJpbGl0
eVNjcm9sbGJhciA6IHB1YmxpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyPiBjcmVhdGUoKTsKLQotICAg
IHZvaWQgc2V0U2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7IG1fc2Nyb2xsYmFyID0g
c2Nyb2xsYmFyOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVNjcm9sbGJh
cj4gY3JlYXRlKFNjcm9sbGJhciopOwogCiAgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIoKSBjb25z
dCB7IHJldHVybiBtX3Njcm9sbGJhci5nZXQoKTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzQWNj
ZXNzaWJpbGl0eVNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1
YWwgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gU2Nyb2xsQmFy
Um9sZTsgfQotCi0gICAgdmlydHVhbCBmbG9hdCB2YWx1ZUZvclJhbmdlKCkgY29uc3Q7Ci0KKyAg
ICB2b2lkIHNldFBhcmVudChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQpIHsgbV9wYXJlbnQg
PSBwYXJlbnQ7IH0KKyAgICAKIHByaXZhdGU6Ci0gICAgQWNjZXNzaWJpbGl0eVNjcm9sbGJhcigp
OworICAgIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CiAKICAgICB2aXJ0dWFs
IGJvb2wgYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGNhblNldFZhbHVlQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBjYW5TZXROdW1lcmljVmFsdWUoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICAvLyBUaGVzZSBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZCBzaW5jZSB0
aGUgQWNjZXNzaWJpbGl0eVNjcm9sbGJhciBpcyBub3QgcGFydCBvZgotICAgIC8vIHRoZSBhY2Nl
c3NpYmlsaXR5IHRyZWUuCi0gICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gSW50U2l6ZSgpOyB9Ci0gICAgdmlydHVhbCBJbnRSZWN0
IGVsZW1lbnRSZWN0KCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIEludFJl
Y3QoKTsgfQotICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0KCkg
Y29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9wYXJlbnQ7IH0KKyAgICB2aXJ0dWFsIEludFJlY3QgZWxlbWVudFJlY3QoKSBjb25zdDsK
KyAgICAKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGVWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIFNjcm9sbEJhclJvbGU7IH0KKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPcmllbnRh
dGlvbiBvcmllbnRhdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgRG9jdW1lbnQqIGRvY3VtZW50
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzRW5hYmxlZCgpIGNvbnN0OworICAgIAorICAg
IC8vIEFzc3VtZXMgZmxvYXQgWzAuLjFdCisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGZsb2F0
KTsKKyAgICB2aXJ0dWFsIGZsb2F0IHZhbHVlRm9yUmFuZ2UoKSBjb25zdDsKIAogICAgIFJlZlB0
cjxTY3JvbGxiYXI+IG1fc2Nyb2xsYmFyOworICAgIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBt
X29yaWVudGF0aW9uOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG1fcGFyZW50OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9B
Y2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdE1hYy5tbQkocmV2aXNpb24gNzQ5NzMpCisrKyBX
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTI5LDE2ICsyOSwyMyBAQAogI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkKIAog
I2ltcG9ydCAiQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIuaCIKKyNpbXBvcnQgIldpZGdldC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6YWNj
ZXNzaWJpbGl0eUlnbm9yZUF0dGFjaG1lbnQoKSBjb25zdAogewotICAgIE5TVmlldyogYXR0YWNo
bWVudCA9IFt3cmFwcGVyKCkgYXR0YWNobWVudFZpZXddOwotICAgIGlmICghYXR0YWNobWVudCkK
KyAgICAvLyBGcmFtZVZpZXcgYXR0YWNobWVudHMgYXJlIG5vdyBoYW5kbGVkIGJ5IEFjY2Vzc2li
aWxpdHlTY3JvbGxWaWV3LCAKKyAgICAvLyBzbyBpZiB0aGlzIGlzIHRoZSBhdHRhY2htZW50LCBp
dCBzaG91bGQgYmUgaWdub3JlZC4KKyAgICBXaWRnZXQqIHdpZGdldCA9IDA7CisgICAgaWYgKGlz
QXR0YWNobWVudCgpICYmICh3aWRnZXQgPSB3aWRnZXRGb3JBdHRhY2htZW50VmlldygpKSAmJiB3
aWRnZXQtPmlzRnJhbWVWaWV3KCkpCiAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKFt3
cmFwcGVyKCkgYXR0YWNobWVudFZpZXddKQorICAgICAgICByZXR1cm4gW1t3cmFwcGVyKCkgYXR0
YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRdOwogICAgIAotICAgIHJldHVybiBb
YXR0YWNobWVudCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkXTsKKyAgICAvLyBBdHRhY2htZW50cyBh
cmUgaWdub3JlZCBieSBkZWZhdWx0ICh1bmxlc3Mgd2UgZGV0ZXJtaW5lIHRoYXQgd2Ugc2hvdWxk
IGV4cG9zZSB0aGVtKS4KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogQWNjZXNzaWJpbGl0eU9iamVj
dEluY2x1c2lvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5UGxhdGZvcm1JbmNs
dWRlc09iamVjdCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0JKHJldmlzaW9uIDc0OTczKQor
KysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5t
bQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsNyBAQAogI2ltcG9ydCAiQWNj
ZXNzaWJpbGl0eUxpc3RCb3guaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlMaXN0LmgiCiAjaW1w
b3J0ICJBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgiCisjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
U2Nyb2xsVmlldy5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVRhYmxlLmgiCiAjaW1wb3J0ICJB
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VGFibGVSb3cu
aCIKQEAgLTQzLDYgKzQ0LDcgQEAKICNpbXBvcnQgIkNvbG9yTWFjLmgiCiAjaW1wb3J0ICJFZGl0
b3JDbGllbnQuaCIKICNpbXBvcnQgIkZyYW1lLmgiCisjaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVu
dC5oIgogI2ltcG9ydCAiSFRNTEFuY2hvckVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxBcmVhRWxl
bWVudC5oIgogI2ltcG9ydCAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCkBAIC01Myw2ICs1NSw3
IEBACiAjaW1wb3J0ICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5o
IgogI2ltcG9ydCAiUmVuZGVyV2lkZ2V0LmgiCisjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCiAjaW1w
b3J0ICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgog
I2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCkBAIC03MDQsNiArNzA3LDcgQEAgLSAoTlNBcnJheSop
YWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzCiAgICAgc3RhdGljIE5TQXJyYXkqIG91dGxpbmVB
dHRycyA9IG5pbDsKICAgICBzdGF0aWMgTlNBcnJheSogb3V0bGluZVJvd0F0dHJzID0gbmlsOwog
ICAgIHN0YXRpYyBOU0FycmF5KiBidXR0b25BdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJh
eSogc2Nyb2xsVmlld0F0dHJzID0gbmlsOwogICAgIE5TTXV0YWJsZUFycmF5KiB0ZW1wQXJyYXk7
CiAgICAgaWYgKGF0dHJpYnV0ZXMgPT0gbmlsKSB7CiAgICAgICAgIGF0dHJpYnV0ZXMgPSBbW05T
QXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czogTlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0
ZSwKQEAgLTk0NCw2ICs5NDgsMTQgQEAgLSAoTlNBcnJheSopYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZU5hbWVzCiAgICAgICAgIG91dGxpbmVSb3dBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdp
dGhBcnJheTp0ZW1wQXJyYXldOwogICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwogICAgIH0K
KyAgICBpZiAoc2Nyb2xsVmlld0F0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOworICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlDb250ZW50c0F0dHJpYnV0ZV07
CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUhvcml6b250YWxT
Y3JvbGxCYXJBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vz
c2liaWxpdHlWZXJ0aWNhbFNjcm9sbEJhckF0dHJpYnV0ZV07CisgICAgICAgIHNjcm9sbFZpZXdB
dHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAg
ICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KICAgICAKICAgICBOU0FycmF5ICpvYmplY3RB
dHRyaWJ1dGVzID0gYXR0cmlidXRlczsKICAgICAKQEAgLTEwMTEsNiArMTAyMyw5IEBAIC0gKE5T
QXJyYXkqKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcwogICAgIGVsc2UgaWYgKG1fb2JqZWN0
LT5pc01lbnVJdGVtKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBtZW51SXRlbUF0dHJz
OwogCisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzU2Nyb2xsVmlldygpKQorICAgICAgICBvYmpl
Y3RBdHRyaWJ1dGVzID0gc2Nyb2xsVmlld0F0dHJzOworICAgIAogICAgIE5TQXJyYXkgKmFkZGl0
aW9uYWxBdHRyaWJ1dGVzID0gW3NlbGYgYWRkaXRpb25hbEFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVO
YW1lc107CiAgICAgaWYgKFthZGRpdGlvbmFsQXR0cmlidXRlcyBjb3VudF0pCiAgICAgICAgIG9i
amVjdEF0dHJpYnV0ZXMgPSBbb2JqZWN0QXR0cmlidXRlcyBhcnJheUJ5QWRkaW5nT2JqZWN0c0Zy
b21BcnJheTphZGRpdGlvbmFsQXR0cmlidXRlc107CkBAIC0xMDM0LDYgKzEwNDksMTQgQEAgLSAo
TlNBcnJheSopcmVuZGVyV2lkZ2V0Q2hpbGRyZW4KICAgICByZXR1cm4gWyh3aWRnZXQtPnBsYXRm
b3JtV2lkZ2V0KCkpIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTogTlNBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5BdHRyaWJ1dGVdOwogfQogCistIChpZClyZW1vdGVBY2Nlc3NpYmlsaXR5UGFyZW50
T2JqZWN0Cit7CisgICAgaWYgKCFtX29iamVjdCB8fCAhbV9vYmplY3QtPmRvY3VtZW50KCkpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgcmV0dXJuIG1fb2JqZWN0LT5kb2N1bWVudCgp
LT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3Qo
KTsKK30KKwogc3RhdGljIHZvaWQgY29udmVydFRvVmVjdG9yKE5TQXJyYXkqIGFycmF5LCBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHZlY3RvcikKIHsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBbYXJyYXkgY291bnRdOwpAQCAtMTA3NSwxNiArMTA5OCw0
MSBAQCAtIChXZWJDb3JlVGV4dE1hcmtlclJhbmdlKil0ZXh0TWFya2VyUmFuCiAtIChOU1ZhbHVl
Kilwb3NpdGlvbgogewogICAgIEludFJlY3QgcmVjdCA9IG1fb2JqZWN0LT5lbGVtZW50UmVjdCgp
OworICAgIE5TUG9pbnQgcG9pbnQ7CiAgICAgCi0gICAgLy8gVGhlIENvY29hIGFjY2Vzc2liaWxp
dHkgQVBJIHdhbnRzIHRoZSBsb3dlci1sZWZ0IGNvcm5lci4KLSAgICBOU1BvaW50IHBvaW50ID0g
TlNNYWtlUG9pbnQocmVjdC54KCksIHJlY3QuYm90dG9tKCkpOwogICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gbV9vYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7Ci0gICAgaWYgKGZyYW1lVmll
dykgewotICAgICAgICBOU1ZpZXcqIHZpZXcgPSBmcmFtZVZpZXctPmRvY3VtZW50VmlldygpOwot
ICAgICAgICBwb2ludCA9IFtbdmlldyB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46IFt2aWV3
IGNvbnZlcnRQb2ludDogcG9pbnQgdG9WaWV3Om5pbF1dOworICAgIGlkIHJlbW90ZVBhcmVudCA9
IFtzZWxmIHJlbW90ZUFjY2Vzc2liaWxpdHlQYXJlbnRPYmplY3RdOworICAgIGlmIChyZW1vdGVQ
YXJlbnQpIHsKKyAgICAgICAgcG9pbnQgPSBOU01ha2VQb2ludChyZWN0LngoKSwgcmVjdC55KCkp
OworICAgICAgICAKKyAgICAgICAgTlNQb2ludCByZW1vdGVQb3NpdGlvbiA9IFtbcmVtb3RlUGFy
ZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlQb3NpdGlvbkF0
dHJpYnV0ZV0gcG9pbnRWYWx1ZV07CisgICAgICAgIE5TU2l6ZSByZW1vdGVTaXplID0gW1tyZW1v
dGVQYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVNpemVB
dHRyaWJ1dGVdIHNpemVWYWx1ZV07CisKKyAgICAgICAgLy8gR2V0IHRoZSB5IHBvc2l0aW9uIG9m
IHRoZSBXS1ZpZXcgKHdlIGhhdmUgdG8gc2NyZWVuLWZsaXAgYW5kIGdvIGZyb20gYm90dG9tIGxl
ZnQgdG8gdG9wIGxlZnQpLgorICAgICAgICBDR0Zsb2F0IHNjcmVlbkhlaWdodCA9IFtbW05TU2Ny
ZWVuIHNjcmVlbnNdIG9iamVjdEF0SW5kZXg6MF0gZnJhbWVdLnNpemUuaGVpZ2h0OworICAgICAg
ICByZW1vdGVQb3NpdGlvbi55ID0gKHNjcmVlbkhlaWdodCAtIHJlbW90ZVBvc2l0aW9uLnkpIC0g
cmVtb3RlU2l6ZS5oZWlnaHQ7CisgICAgICAgIAorICAgICAgICBOU1BvaW50IHNjcm9sbFBvc2l0
aW9uID0gTlNNYWtlUG9pbnQoMCwgMCk7CisgICAgICAgIGlmIChmcmFtZVZpZXcgJiYgIW1fb2Jq
ZWN0LT5pc1Njcm9sbGJhcigpICYmICFtX29iamVjdC0+aXNTY3JvbGxWaWV3KCkpIHsKKyAgICAg
ICAgICAgIEludFBvaW50IGZyYW1lU2Nyb2xsUG9zID0gZnJhbWVWaWV3LT5zY3JvbGxQb3NpdGlv
bigpOworICAgICAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSBOU01ha2VQb2ludChmcmFtZVNjcm9s
bFBvcy54KCksIGZyYW1lU2Nyb2xsUG9zLnkoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHBvaW50LnggKz0gcmVtb3RlUG9zaXRpb24ueCAtIHNjcm9sbFBvc2l0aW9uLng7CisgICAg
ICAgIC8vIFNldCB0aGUgbmV3IHBvc2l0aW9uLCB3aGljaCBtZWFucyBnZXR0aW5nIGJvdHRvbSB5
LCBhbmQgdGhlbiBmbGlwcGluZyB0byBzY3JlZW4gY29vcmRpbmF0ZXMuCisgICAgICAgIHBvaW50
LnkgPSBzY3JlZW5IZWlnaHQgLSAocG9pbnQueSArIHJlbW90ZVBvc2l0aW9uLnkgKyByZWN0Lmhl
aWdodCgpIC0gc2Nyb2xsUG9zaXRpb24ueSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAv
LyBUaGUgQ29jb2EgYWNjZXNzaWJpbGl0eSBBUEkgd2FudHMgdGhlIGxvd2VyLWxlZnQgY29ybmVy
LgorICAgICAgICBwb2ludCA9IE5TTWFrZVBvaW50KHJlY3QueCgpLCByZWN0LmJvdHRvbSgpKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChmcmFtZVZpZXcpIHsKKyAgICAgICAgICAgIE5TVmlldyog
dmlldyA9IGZyYW1lVmlldy0+ZG9jdW1lbnRWaWV3KCk7CisgICAgICAgICAgICBwb2ludCA9IFtb
dmlldyB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46IFt2aWV3IGNvbnZlcnRQb2ludDogcG9p
bnQgdG9WaWV3Om5pbF1dOworICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIFtOU1ZhbHVl
IHZhbHVlV2l0aFBvaW50OiBwb2ludF07CisgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFBv
aW50OnBvaW50XTsKIH0KIAogdHlwZWRlZiBIYXNoTWFwPGludCwgTlNTdHJpbmcqPiBBY2Nlc3Np
YmlsaXR5Um9sZU1hcDsKQEAgLTEzOTAsNiArMTQzOCwyNyBAQCAtIChOU1N0cmluZyopcm9sZURl
c2NyaXB0aW9uCiAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbihOU0Fj
Y2Vzc2liaWxpdHlVbmtub3duUm9sZSwgbmlsKTsKIH0KIAorLSAoaWQpc2Nyb2xsVmlld1BhcmVu
dAoreworICAgIGlmICghbV9vYmplY3QgfHwgIW1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3KCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgLy8gSWYgdGhpcyBzY3Jv
bGwgdmlldyBwcm92aWRlcyBpdCdzIHBhcmVudCBvYmplY3QgKGJlY2F1c2UgaXQncyBhIHN1Yi1m
cmFtZSksIHRoZW4KKyAgICAvLyB3ZSBzaG91bGQgbm90IGZpbmQgdGhlIHJlbW90ZUFjY2Vzc2li
aWxpdHlQYXJlbnQuCisgICAgaWYgKG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyogc2Nyb2xsVmll
dyA9IHRvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcobV9vYmplY3QpOworICAgIFNjcm9sbFZpZXcq
IHNjcm9sbCA9IHNjcm9sbFZpZXctPnNjcm9sbFZpZXcoKTsKKyAgICBpZiAoIXNjcm9sbCkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBpZiAoc2Nyb2xsLT5wbGF0Zm9ybVdpZGdldCgp
KQorICAgICAgICByZXR1cm4gc2Nyb2xsLT5wbGF0Zm9ybVdpZGdldCgpOworICAgIGVsc2UKKyAg
ICAgICAgcmV0dXJuIFtzZWxmIHJlbW90ZUFjY2Vzc2liaWxpdHlQYXJlbnRPYmplY3RdOworfQor
CiAvLyBGSVhNRTogc3BsaXQgdXAgdGhpcyBmdW5jdGlvbiBpbiBhIGJldHRlciB3YXkuICAKIC8v
IHN1Z2dlc3Rpb25zOiBVc2UgYSBoYXNoIHRhYmxlIHRoYXQgbWFwcyBhdHRyaWJ1dGUgbmFtZXMg
dG8gZnVuY3Rpb24gY2FsbHMsCiAvLyBvciBtYXliZSBwb2ludGVycyB0byBtZW1iZXIgZnVuY3Rp
b25zCkBAIC0xNDA4LDExICsxNDc3LDExIEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZTooTlNTdHIKICAgICAgICAgcmV0dXJuIFtzZWxmIHJvbGVEZXNjcmlwdGlvbl07CiAKICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlQYXJl
bnRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIEZyYW1lVmlldyogZnYgPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Kj4obV9vYmplY3QpLT5mcmFtZVZpZXdJZlJlbmRlclZp
ZXcoKTsKLSAgICAgICAgICAgIGlmIChmdikKLSAgICAgICAgICAgICAgICByZXR1cm4gZnYtPnBs
YXRmb3JtV2lkZ2V0KCk7Ci0gICAgICAgIH0KKworICAgICAgICAvLyBUaGlzIHdpbGwgcmV0dXJu
IHRoZSBwYXJlbnQgb2YgdGhlIEFYV2ViQXJlYSwgaWYgdGhpcyBpcyBhIHdlYiBhcmVhLgorICAg
ICAgICBpZCBzY3JvbGxWaWV3UGFyZW50ID0gW3NlbGYgc2Nyb2xsVmlld1BhcmVudF07CisgICAg
ICAgIGlmIChzY3JvbGxWaWV3UGFyZW50KQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbFZpZXdQ
YXJlbnQ7CiAgICAgICAgIAogICAgICAgICAvLyBUcmVlIGl0ZW0gKGNoYW5nZWQgdG8gQVhSb3dz
KSBjYW4gb25seSByZXBvcnQgdGhlIHRyZWUgKEFYT3V0bGluZSkgYXMgaXRzIHBhcmVudC4KICAg
ICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsKQEAgLTE0MjQsNyArMTQ5MywxMCBA
QCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+cGFyZW50T2Jq
ZWN0VW5pZ25vcmVkKCktPndyYXBwZXIoKTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
cGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAgICAgICBpZiAo
cGFyZW50KQorICAgICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOworICAgICAgICBy
ZXR1cm4gbmlsOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6IE5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSkgewpAQCAtMTYxMyw2ICsxNjg1
LDExIEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKIAogICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVdpbmRvd0F0
dHJpYnV0ZV0gfHwKICAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0Fj
Y2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxlbWVudEF0dHJpYnV0ZV0pIHsKKyAgICAgICAgCisgICAg
ICAgIGlkIHJlbW90ZVBhcmVudCA9IFtzZWxmIHJlbW90ZUFjY2Vzc2liaWxpdHlQYXJlbnRPYmpl
Y3RdOworICAgICAgICBpZiAocmVtb3RlUGFyZW50KQorICAgICAgICAgICAgcmV0dXJuIFtyZW1v
dGVQYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZU5hbWVdOworICAg
ICAgICAKICAgICAgICAgRnJhbWVWaWV3KiBmdiA9IG1fb2JqZWN0LT5kb2N1bWVudEZyYW1lVmll
dygpOwogICAgICAgICBpZiAoZnYpCiAgICAgICAgICAgICByZXR1cm4gW2Z2LT5wbGF0Zm9ybVdp
ZGdldCgpIHdpbmRvd107CkBAIC0xNjQ5LDYgKzE3MjYsMTggQEAgLSAoaWQpYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb05TQXJyYXkoY29udGVudHMpOwogICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KG1fb2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gbV9vYmplY3QtPmNo
aWxkcmVuKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEEgc2Nyb2xsVmlldydzIGNv
bnRlbnRzIGFyZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgc2Nyb2xsIGJhcnMuCisgICAgICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29udGVu
dHM7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGlsZHJlblNpemUgPSBjaGlsZHJlbi5zaXplKCk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY2hpbGRyZW5TaXplOyArK2sp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuW2tdLT5pc1Njcm9sbGJhcigpKQorICAg
ICAgICAgICAgICAgICAgICBjb250ZW50cy5hcHBlbmQoY2hpbGRyZW5ba10pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29udGVudHMpOyAgICAg
ICAgICAgIAorICAgICAgICB9CiAgICAgfSAgICAKICAgICAKICAgICBpZiAobV9vYmplY3QtPmlz
QWNjZXNzaWJpbGl0eVRhYmxlKCkpIHsKQEAgLTE4NzQsNiArMTk2MywxOSBAQCAtIChpZClhY2Nl
c3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
fQogICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5SG9yaXpvbnRhbFNjcm9sbEJhckF0dHJpYnV0ZV0pIHsKKyAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogc2Nyb2xsQmFyID0gbV9vYmplY3QtPnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5
T3JpZW50YXRpb25Ib3Jpem9udGFsKTsKKyAgICAgICAgaWYgKHNjcm9sbEJhcikKKyAgICAgICAg
ICAgIHJldHVybiBzY3JvbGxCYXItPndyYXBwZXIoKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICB9CisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlWZXJ0aWNhbFNjcm9sbEJhckF0dHJpYnV0ZV0pIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogc2Nyb2xsQmFyID0gbV9vYmplY3QtPnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50
YXRpb25WZXJ0aWNhbCk7CisgICAgICAgIGlmIChzY3JvbGxCYXIpCisgICAgICAgICAgICByZXR1
cm4gc2Nyb2xsQmFyLT53cmFwcGVyKCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAg
IAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
TGFuZ3VhZ2VBdHRyaWJ1dGVdKSAKICAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5sYW5ndWFnZSgp
OwogICAgIApAQCAtMTk2Nyw2ICsyMDY5LDcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUhpdFRlc3Q6
KE5TUG9pbnQpcG9pbgogICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAorICAgIG1fb2JqZWN0LT51cGRhdGVDaGlsZHJlbklmTmVj
ZXNzYXJ5KCk7CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGF4T2JqZWN0ID0gbV9v
YmplY3QtPmFjY2Vzc2liaWxpdHlIaXRUZXN0KEludFBvaW50KHBvaW50KSk7CiAgICAgaWYgKGF4
T2JqZWN0KQogICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3Io
YXhPYmplY3QtPndyYXBwZXIoKSk7CkBAIC0yMjM5LDkgKzIzNDIsMTAgQEAgLSAodm9pZClhY2Nl
c3NpYmlsaXR5U2V0VmFsdWU6KGlkKXZhbHVlIAogICAgICAgICBBU1NFUlQobnVtYmVyKTsKICAg
ICAgICAgbV9vYmplY3QtPnNldEZvY3VzZWQoW251bWJlciBpbnRWYWx1ZV0gIT0gMCk7CiAgICAg
fSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0
eVZhbHVlQXR0cmlidXRlXSkgewotICAgICAgICBpZiAoIXN0cmluZykKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9vYmplY3QtPnNldFZhbHVlKHN0cmluZyk7CisgICAgICAgIGlmIChu
dW1iZXIgJiYgbV9vYmplY3QtPmNhblNldE51bWVyaWNWYWx1ZSgpKQorICAgICAgICAgICAgbV9v
YmplY3QtPnNldFZhbHVlKFtudW1iZXIgZmxvYXRWYWx1ZV0pOworICAgICAgICBlbHNlIGlmIChz
dHJpbmcpCisgICAgICAgICAgICBtX29iamVjdC0+c2V0VmFsdWUoc3RyaW5nKTsKICAgICB9IGVs
c2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2Vs
ZWN0ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgIGlmICghbnVtYmVyKQogICAgICAgICAgICAgcmV0
dXJuOwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MTUsNyArMTkxNSw3IEBAIEFYT2JqZWN0Q2Fj
aGUqIERvY3VtZW50OjpheE9iamVjdENhY2hlKCkKICAgICAgICAgcmV0dXJuIGRvYy0+YXhPYmpl
Y3RDYWNoZSgpOwogICAgIAogICAgIC8vIHRoaXMgaXMgdGhlIHRvcC1sZXZlbCBkb2N1bWVudCwg
c28gaW5zdGFsbCBhIG5ldyBjYWNoZQotICAgIG1fYXhPYmplY3RDYWNoZSA9IG5ldyBBWE9iamVj
dENhY2hlOworICAgIG1fYXhPYmplY3RDYWNoZSA9IG5ldyBBWE9iamVjdENhY2hlKHRoaXMpOwog
ICAgIHJldHVybiBtX2F4T2JqZWN0Q2FjaGU7CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Vt
cHR5Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5o
CShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNzcsNiArMzc3LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShNQUMpCisgICAgdmlydHVhbCBSZW1vdGVBWE9iamVjdFJlZiBhY2Nlc3NpYmlsaXR5UmVt
b3RlT2JqZWN0KCkgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgTlNDYWNoZWRVUkxSZXNwb25z
ZSogd2lsbENhY2hlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBOU0Nh
Y2hlZFVSTFJlc3BvbnNlKiByZXNwb25zZSkgY29uc3QgeyByZXR1cm4gcmVzcG9uc2U7IH0KICNl
bmRpZgogI2lmIFVTRShDRk5FVFdPUkspCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50
LmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsMTUgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lmIFBMQVRGT1JNKE1BQykKKyNpZmRl
ZiBfX09CSkNfXyAKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgordHlwZWRlZiBp
ZCBSZW1vdGVBWE9iamVjdFJlZjsKKyNlbHNlCit0eXBlZGVmIHZvaWQqIFJlbW90ZUFYT2JqZWN0
UmVmOworI2VuZGlmCisjZW5kaWYKKwogdHlwZWRlZiBjbGFzcyBfam9iamVjdCogam9iamVjdDsK
IAogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoX19PQkpDX18pCkBAIC0yNjUsNiArMjc0
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJG
b3JJY29uTm90aWZpY2F0aW9uKGJvb2wgbGlzdGVuID0gdHJ1ZSkgPSAwOwogICAgICAgICAKICNp
ZiBQTEFURk9STShNQUMpCisgICAgICAgIC8vIEFsbG93IGFuIGFjY2Vzc2liaWxpdHkgb2JqZWN0
IHRvIHJldHJpZXZlIGEgRnJhbWUgcGFyZW50IGlmIHRoZXJlJ3Mgbm8gUGxhdGZvcm1XaWRnZXQu
CisgICAgICAgIHZpcnR1YWwgUmVtb3RlQVhPYmplY3RSZWYgYWNjZXNzaWJpbGl0eVJlbW90ZU9i
amVjdCgpID0gMDsKICNpZiBFTkFCTEUoSkFWQV9CUklER0UpCiAgICAgICAgIHZpcnR1YWwgam9i
amVjdCBqYXZhQXBwbGV0KE5TVmlldyopIHsgcmV0dXJuIDA7IH0KICNlbmRpZgpJbmRleDogV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5jcHAJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsMTAgQEAgRnJhbWVWaWV3Ojp+RnJhbWVWaWV3
KCkKICAgICAgICAgbV9zY2hlZHVsZWRFdmVudHMuY2xlYXIoKTsKICAgICAgICAgbV9lbnF1ZXVl
RXZlbnRzID0gMDsKICAgICB9Ci0KKyAgICAKKyAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNz
aWJpbGl0eUVuYWJsZWQoKSAmJiBheE9iamVjdENhY2hlKCkpCisgICAgICAgIGF4T2JqZWN0Q2Fj
aGUoKS0+cmVtb3ZlKHRoaXMpOworICAgIAogICAgIHJlc2V0U2Nyb2xsYmFycygpOwogCiAgICAg
Ly8gQ3VzdG9tIHNjcm9sbGJhcnMgc2hvdWxkIGFscmVhZHkgYmUgZGVzdHJveWVkIGF0IHRoaXMg
cG9pbnQKQEAgLTI0ODIsNCArMjQ4NSw5IEBAIHZvaWQgRnJhbWVWaWV3Ojpub3RpZnlXaWRnZXRz
SW5BbGxGcmFtZXMKICAgICB9CiB9CiAgICAgCitBWE9iamVjdENhY2hlKiBGcmFtZVZpZXc6OmF4
T2JqZWN0Q2FjaGUoKSBjb25zdAoreworICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT5h
eE9iamVjdENhY2hlRXhpc3RzKCkgPyBmcmFtZSgpLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hl
KCkgOiAwOworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAko
cmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwOCw2ICszMDgsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVT
Y3JvbGxDb3JuZXIoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCk7CiAKKyAgICB2aXJ0dWFsIEFY
T2JqZWN0Q2FjaGUqIGF4T2JqZWN0Q2FjaGUoKSBjb25zdDsKICAgICB2b2lkIG5vdGlmeVdpZGdl
dHNJbkFsbEZyYW1lcyhXaWRnZXROb3RpZmljYXRpb24pOwogICAgIAogICAgIHN0YXRpYyBkb3Vi
bGUgc0N1cnJlbnRQYWludFRpbWVTdGFtcDsgLy8gdXNlZCBmb3IgZGV0ZWN0aW5nIGRlY29kZWQg
cmVzb3VyY2UgdGhyYXNoIGluIHRoZSBjYWNoZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3Bw
CShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTY3JvbGxWaWV3LmgiCiAKKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtTW91c2VFdmVudC5oIgpAQCAtOTYsNiArOTcsOSBAQCB2b2lkIFNjcm9sbFZpZXc6
OnNldEhhc0hvcml6b250YWxTY3JvbGxiCiAgICAgICAgIHJlbW92ZUNoaWxkKG1faG9yaXpvbnRh
bFNjcm9sbGJhci5nZXQoKSk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IDA7CiAg
ICAgfQorICAgIAorICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgp
ICYmIGF4T2JqZWN0Q2FjaGUoKSkKKyAgICAgICAgYXhPYmplY3RDYWNoZSgpLT5oYW5kbGVTY3Jv
bGxiYXJVcGRhdGUodGhpcyk7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6c2V0SGFzVmVydGljYWxT
Y3JvbGxiYXIoYm9vbCBoYXNCYXIpCkBAIC0xMTEsNiArMTE1LDkgQEAgdm9pZCBTY3JvbGxWaWV3
OjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcgogICAgICAgICByZW1vdmVDaGlsZChtX3ZlcnRpY2Fs
U2Nyb2xsYmFyLmdldCgpKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IDA7CiAgICAg
fQorICAgIAorICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYm
IGF4T2JqZWN0Q2FjaGUoKSkKKyAgICAgICAgYXhPYmplY3RDYWNoZSgpLT5oYW5kbGVTY3JvbGxi
YXJVcGRhdGUodGhpcyk7CiB9CiAKICNpZiAhUExBVEZPUk0oR1RLKQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyLmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJh
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDkgQEAgU2Nyb2xsYmFyOjpTY3JvbGxi
YXIoU2Nyb2xsYmFyQ2xpZW50KiBjbAogCiBTY3JvbGxiYXI6On5TY3JvbGxiYXIoKQogeworICAg
IGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIGF4T2JqZWN0Q2Fj
aGUoKSkKKyAgICAgICAgYXhPYmplY3RDYWNoZSgpLT5yZW1vdmUodGhpcyk7CisgICAgCiAgICAg
c3RvcFRpbWVySWZOZWVkZWQoKTsKICAgICAKICAgICBtX3RoZW1lLT51bnJlZ2lzdGVyU2Nyb2xs
YmFyKHRoaXMpOwpAQCAtMTMxLDE1ICsxMzQsOCBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0U3RlcHMo
aW50IGxpbmVTdGVwLCBpCiBib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBk
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
KQogewogI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkKLSAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNj
ZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBpZiAocGFyZW50KCkgJiYgcGFyZW50KCkt
PmlzRnJhbWVWaWV3KCkpIHsKLSAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKLSAgICAg
ICAgICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUoKTsK
LSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIqIGF4T2JqZWN0ID0gc3RhdGljX2Nh
c3Q8QWNjZXNzaWJpbGl0eVNjcm9sbGJhcio+KGNhY2hlLT5nZXRPckNyZWF0ZShTY3JvbGxCYXJS
b2xlKSk7Ci0gICAgICAgICAgICBheE9iamVjdC0+c2V0U2Nyb2xsYmFyKHRoaXMpOwotICAgICAg
ICAgICAgY2FjaGUtPnBvc3ROb3RpZmljYXRpb24oYXhPYmplY3QsIGRvY3VtZW50LCBBWE9iamVj
dENhY2hlOjpBWFZhbHVlQ2hhbmdlZCwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYg
KEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgYXhPYmplY3RDYWNoZSgp
KQorICAgICAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24oYXhPYmplY3RDYWNo
ZSgpLT5nZXRPckNyZWF0ZSh0aGlzKSwgMCwgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQs
IHRydWUpOwogI2VuZGlmCiAKICAgICAvLyBJZ25vcmUgcGVycGVuZGljdWxhciBzY3JvbGxzLgpA
QCAtNDc1LDcgKzQ3MSwxNiBAQCBib29sIFNjcm9sbGJhcjo6aXNXaW5kb3dBY3RpdmUoKSBjb25z
dAogewogICAgIHJldHVybiBtX2NsaWVudCAmJiBtX2NsaWVudC0+aXNBY3RpdmUoKTsKIH0KLSAK
KyAgICAKK0FYT2JqZWN0Q2FjaGUqIFNjcm9sbGJhcjo6YXhPYmplY3RDYWNoZSgpIGNvbnN0Cit7
CisgICAgaWYgKCFwYXJlbnQoKSB8fCAhcGFyZW50KCktPmlzRnJhbWVWaWV3KCkpCisgICAgICAg
IHJldHVybiAwOworICAgIAorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PEZy
YW1lVmlldyo+KHBhcmVudCgpKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICByZXR1cm4gZG9j
dW1lbnQtPmF4T2JqZWN0Q2FjaGUoKTsKK30KKwogdm9pZCBTY3JvbGxiYXI6OmludmFsaWRhdGVS
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHN1cHByZXNzSW52YWxpZGF0aW9u
KCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxiYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDYgKzE3MSw3IEBAIHBy
b3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBBWE9iamVjdENhY2hlKiBheE9iamVjdENh
Y2hlKCkgY29uc3Q7CiAKICAgICBib29sIHNldEN1cnJlbnRQb3MoZmxvYXQgcG9zLCBTY3JvbGxT
b3VyY2Ugc291cmNlKTsKIH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgJKHJldmlzaW9uIDc0OTczKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw3
IEBAIHR5cGVkZWYgUGxhdGZvcm1XaWRnZXQgUGxhdGZvcm1QYWdlQ2xpZW4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBBWE9iamVjdENhY2hlOwogY2xhc3MgQ3Vyc29yOwogY2xhc3Mg
RXZlbnQ7CiBjbGFzcyBGb250OwpAQCAtMjQ2LDYgKzI0Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JikgY29u
c3Q7CiAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0
IEludFBvaW50JikgY29uc3Q7CiAKKyAgICAvLyBBIG1lYW5zIHRvIGFjY2VzcyB0aGUgQVggY2Fj
aGUgd2hlbiB0aGlzIG9iamVjdCBjYW4gZ2V0IGEgcG9pbnRlciB0byBpdC4KKyAgICB2aXJ0dWFs
IEFYT2JqZWN0Q2FjaGUqIGF4T2JqZWN0Q2FjaGUoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAg
CiBwcml2YXRlOgogICAgIHZvaWQgaW5pdChQbGF0Zm9ybVdpZGdldCk7IC8vIE11c3QgYmUgY2Fs
bGVkIGJ5IGFsbCBXaWRnZXQgY29uc3RydWN0b3JzIHRvIGluaXRpYWxpemUgY3Jvc3MtcGxhdGZv
cm0gZGF0YS4KIApJbmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw1NCBAQAorMjAxMS0wMS0wNCAgQ2hyaXMgRmxlaXphY2ggIDxj
ZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdLMjogU3VwcG9ydCBBY2Nlc3NpYmlsaXR5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg1OQorCisgICAgICAgICogU2hhcmVk
L1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMv
UGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50
SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmFjY2Vzc2liaWxpdHlD
aGlsZFRva2VuUmVjZWl2ZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5t
bToKKyAgICAgICAgKC1bV0tWaWV3IGluaXRXaXRoRnJhbWU6Y29udGV4dFJlZjpwYWdlR3JvdXBS
ZWY6XSk6CisgICAgICAgICgtW1dLVmlldyBfdXBkYXRlV2luZG93QW5kVmlld0ZyYW1lc10pOgor
ICAgICAgICAoLVtXS1ZpZXcgX3NldEFjY2Vzc2liaWxpdHlDaGlsZFRva2VuOl0pOgorICAgICAg
ICAoLVtXS1ZpZXcgYWNjZXNzaWJpbGl0eUlzSWdub3JlZF0pOgorICAgICAgICAoLVtXS1ZpZXcg
YWNjZXNzaWJpbGl0eUhpdFRlc3Q6XSk6CisgICAgICAgICgtW1dLVmlldyBhY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWU6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50
ZXJuYWwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6ZW5z
dXJlV2ViUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVBY2Nlc3NpYmlsaXR5
UGFnZVRva2VuKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZW5kQWNjZXNzaWJp
bGl0eVByZXNlbnRlclRva2VuKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAg
KiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjphY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZCk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YWNj
ZXNzaWJpbGl0eVBvc2l0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VN
YWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNlbmRBY2Nlc3NpYmlsaXR5UHJlc2VudGVyVG9rZW4p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnByZXNlbnRlckFwcGxp
Y2F0aW9uUGlkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFpbk1hYy5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc01haW4pOgorCiAyMDExLTAxLTA0ICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KSW5kZXg6IFdlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuY3BwCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIvU2hhcmVkL1dlYlByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBA
IHZvaWQgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2QKICAgICBlbmNvZGVyLT5l
bmNvZGUoc2hvdWxkQWx3YXlzVXNlQ29tcGxleFRleHRDb2RlUGF0aCk7CiAgICAgZW5jb2Rlci0+
ZW5jb2RlKGxhbmd1YWdlQ29kZSk7CiAjaWYgUExBVEZPUk0oTUFDKQorICAgIGVuY29kZXItPmVu
Y29kZShwcmVzZW50ZXJBcHBsaWNhdGlvblBpZCk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKG5zVVJM
Q2FjaGVQYXRoKTsKICAgICBlbmNvZGVyLT5lbmNvZGUobnNVUkxDYWNoZU1lbW9yeUNhcGFjaXR5
KTsKICAgICBlbmNvZGVyLT5lbmNvZGUobnNVUkxDYWNoZURpc2tDYXBhY2l0eSk7CkBAIC04OSw2
ICs5MCw4IEBAIGJvb2wgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2QKICAgICBp
ZiAoIWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJzLmxhbmd1YWdlQ29kZSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
cGFyYW1ldGVycy5wcmVzZW50ZXJBcHBsaWNhdGlvblBpZCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJzLm5zVVJMQ2FjaGVQYXRoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRl
cnMubnNVUkxDYWNoZU1lbW9yeUNhcGFjaXR5KSkKSW5kZXg6IFdlYktpdDIvU2hhcmVkL1dlYlBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9X
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0
Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw2ICs3MCw3IEBAIHN0cnVjdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAg
ICBTdHJpbmcgbGFuZ3VhZ2VDb2RlOwogCiAjaWYgUExBVEZPUk0oTUFDKQorICAgIHBpZF90IHBy
ZXNlbnRlckFwcGxpY2F0aW9uUGlkOwogICAgIFN0cmluZyBuc1VSTENhY2hlUGF0aDsKICAgICB1
aW50NjRfdCBuc1VSTENhY2hlTWVtb3J5Q2FwYWNpdHk7CiAgICAgdWludDY0X3QgbnNVUkxDYWNo
ZURpc2tDYXBhY2l0eTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlzaW9uIDc0OTcz
KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OSw2ICs2OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFu
ZHMoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldEVkaXRDb21tYW5kU3RhdGUoY29uc3QgU3Ry
aW5nJiBjb21tYW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludCBzdGF0ZSkgPSAwOwogI2lmIFBM
QVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzaWJpbGl0eUNoaWxkVG9rZW5SZWNl
aXZlZChjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBpbnRlcmNlcHRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgVmVjdG9y
PFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mLCB1aW50MzJfdCwgdWludDMyX3QsIFZlY3RvcjxX
ZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4mKSA9IDA7CiAjZW5kaWYKICNpZiBQTEFURk9S
TShXSU4pCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkocmV2aXNpb24gNzQ5NzMpCisr
KyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0
LDcgKzE2NCwxMCBAQCB2b2lkIFdlYkNvbnRleHQ6OmVuc3VyZVdlYlByb2Nlc3MoKQogICAgIHBh
cmFtZXRlcnMuYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSA9IGFwcGxpY2F0aW9uQ2FjaGVEaXJl
Y3RvcnkoKTsKICAgICBwYXJhbWV0ZXJzLmNsZWFyUmVzb3VyY2VDYWNoZXMgPSBtX2NsZWFyUmVz
b3VyY2VDYWNoZXNGb3JOZXdXZWJQcm9jZXNzOwogICAgIHBhcmFtZXRlcnMuY2xlYXJBcHBsaWNh
dGlvbkNhY2hlID0gbV9jbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JOZXdXZWJQcm9jZXNzOwotICAg
IAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBwYXJhbWV0ZXJzLnByZXNlbnRlckFwcGxpY2F0aW9u
UGlkID0gZ2V0cGlkKCk7CisjZW5kaWYKKwogICAgIG1fY2xlYXJSZXNvdXJjZUNhY2hlc0Zvck5l
d1dlYlByb2Nlc3MgPSBmYWxzZTsKICAgICBtX2NsZWFyQXBwbGljYXRpb25DYWNoZUZvck5ld1dl
YlByb2Nlc3MgPSBmYWxzZTsKICAgICAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OTQsMTIgKzQ5NCwxMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
dXBkYXRlV2luZG93SXNWaXNpYmxlCiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZXRXaW5kb3dJc1Zpc2libGUod2luZG93SXNWaXNpYmxlKSwgbV9wYWdlSUQpOwogfQog
Ci12b2lkIFdlYlBhZ2VQcm94eTo6d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgSW50
UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBJbnRSZWN0JiB2aWV3
RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKQordm9pZCBXZWJQYWdlUHJveHk6OndpbmRvd0FuZFZp
ZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IEludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGlu
YXRlcywgY29uc3QgSW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcywgY29uc3Qg
SW50UG9pbnQmIGFjY2Vzc2liaWxpdHlWaWV3Q29vcmRpbmF0ZXMpCiB7CiAgICAgaWYgKCFpc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6V2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQod2luZG93RnJhbWVJblNjcmVlbkNv
b3JkaW5hdGVzLCB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKSwgbV9wYWdlSUQpOworICAg
IHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6V2luZG93QW5kVmlld0ZyYW1lc0No
YW5nZWQod2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCB2aWV3RnJhbWVJbldpbmRvd0Nv
b3JkaW5hdGVzLCBhY2Nlc3NpYmlsaXR5Vmlld0Nvb3JkaW5hdGVzKSwgbV9wYWdlSUQpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0TWFya2VkUmFuZ2UodWludDY0X3QmIGxvY2F0aW9uLCB1
aW50NjRfdCYgbGVuZ3RoKQpAQCAtMTE5Nyw2ICsxMTk3LDEzIEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpkaWRSdW5JbnNlY3VyZUNvbnRlbnQKICAgICBtX2xvYWRlckNsaWVudC5kaWRSdW5JbnNlY3Vy
ZUNvbnRlbnRGb3JGcmFtZSh0aGlzLCBmcmFtZSwgdXNlckRhdGEuZ2V0KCkpOwogfQogCit2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZUFjY2Vzc2liaWxpdHlQYWdlVG9rZW4oY29uc3QgQ29y
ZUlQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgbV9w
YWdlQ2xpZW50LT5hY2Nlc3NpYmlsaXR5Q2hpbGRUb2tlblJlY2VpdmVkKGRhdGEpOworI2VuZGlm
Cit9CisgICAgCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZnJhbWVEaWRCZWNvbWVGcmFtZVNldCh1aW50
NjRfdCBmcmFtZUlELCBib29sIHZhbHVlKQogewogICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0g
cHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKTsKQEAgLTE4NTQsNiArMTg2MSwxNiBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c3RyaW5nQ2FsbGJhY2soY29uc3QgCiAgICAgY2FsbGJhY2stPnBlcmZv
cm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1ZShyZXN1bHRTdHJpbmcuaW1wbCgpKTsKIH0KIAorI2lm
IFBMQVRGT1JNKE1BQykKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZW5kQWNjZXNzaWJpbGl0eVByZXNl
bnRlclRva2VuKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmIHRva2VuKQoreworICAgIGlm
ICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlNlbmRBY2Nlc3NpYmlsaXR5UHJlc2VudGVyVG9rZW4odG9rZW4pLCBt
X3BhZ2VJRCk7Cit9CisjZW5kaWYKKwogdm9pZCBXZWJQYWdlUHJveHk6OmZvY3VzZWRGcmFtZUNo
YW5nZWQodWludDY0X3QgZnJhbWVJRCkKIHsKICAgICBpZiAoIWZyYW1lSUQpIHsKSW5kZXg6IFdl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAgcHVi
bGljOgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgdXBkYXRlV2luZG93SXNWaXNpYmxl
KGJvb2wgd2luZG93SXNWaXNpYmxlKTsKLSAgICB2b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXNDaGFu
Z2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRl
cywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcyk7
CisgICAgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBhY2Nlc3NpYmlsaXR5Vmlld0Nvb3JkaW5hdGVzKTsKICAgICB2b2lkIGdldE1hcmtlZFJhbmdl
KHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCk7CiAgICAgdWludDY0X3QgY2hh
cmFjdGVySW5kZXhGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCk7CiAgICAgV2ViQ29y
ZTo6SW50UmVjdCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh1aW50NjRfdCwgdWludDY0X3Qp
OwpAQCAtMjMwLDYgKzIzMCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2NhbGVXZWJWaWV3KGRv
dWJsZSBzY2FsZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG9yaWdpbik7CiAgICAgZG91Ymxl
IHZpZXdTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlld1NjYWxlRmFjdG9yOyB9Cisj
aWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgc2VuZEFjY2Vzc2liaWxpdHlQcmVzZW50ZXJUb2tl
bihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJik7CisjZW5kaWYKIAogICAgIC8vIEZpbmQu
CiAgICAgdm9pZCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25l
ZCBtYXhNYXRjaENvdW50KTsKQEAgLTMzMyw2ICszMzYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
ZGlkU3RhcnRQcm9ncmVzcygpOwogICAgIHZvaWQgZGlkQ2hhbmdlUHJvZ3Jlc3MoZG91YmxlKTsK
ICAgICB2b2lkIGRpZEZpbmlzaFByb2dyZXNzKCk7CisgICAgdm9pZCBkaWRSZWNlaXZlQWNjZXNz
aWJpbGl0eVBhZ2VUb2tlbihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJik7CiAgICAgCiAg
ICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKHVpbnQ2NF90IGZyYW1lSUQs
IHVpbnQzMl90IG5hdmlnYXRpb25UeXBlLCB1aW50MzJfdCBtb2RpZmllcnMsIGludDMyX3QgbW91
c2VCdXR0b24sIGNvbnN0IFN0cmluZyYgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKTsKICAgICB2
b2lkIGRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbih1aW50NjRfdCBmcmFtZUlELCB1aW50
MzJfdCBuYXZpZ2F0aW9uVHlwZSwgdWludDMyX3QgbW9kaWZpZXJzLCBpbnQzMl90IG1vdXNlQnV0
dG9uLCBjb25zdCBTdHJpbmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCk7CkluZGV4OiBXZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiA3NDk3MykK
KysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBj
b3B5KQpAQCAtMTEzLDYgKzExMyw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAg
RGF0YUNhbGxiYWNrKENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgcmVzdWx0RGF0YSwgdWludDY0X3Qg
Y2FsbGJhY2tJRCkKICAgICBTdHJpbmdDYWxsYmFjayhXVEY6OlN0cmluZyByZXN1bHRTdHJpbmcs
IHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAKKyAgICBEaWRSZWNlaXZlQWNjZXNzaWJpbGl0eVBhZ2VU
b2tlbihDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCisKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgIyBLZXlib2FyZCBzdXBwb3J0IG1lc3NhZ2VzLgogICAgIEludGVycHJldEtleUV2ZW50KHVp
bnQzMl90IHR5cGUpIC0+IChWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiBjb21tYW5k
TmFtZSwgdWludDMyX3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQzMl90IHNlbGVjdGlvbkVuZCwgVmVj
dG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzKQpJbmRleDogV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAkocmV2aXNpb24gNzQ5NzMp
CisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc1LDYgKzc1LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFnZURp
ZExlYXZlQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIHZv
aWQgYWNjZXNzaWJpbGl0eUNoaWxkVG9rZW5SZWNlaXZlZChjb25zdCBDb3JlSVBDOjpEYXRhUmVm
ZXJlbmNlJik7ICAgIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDb21wbGV4VGV4dElucHV0RW5hYmxl
ZCh1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgYm9vbCBjb21wbGV4
VGV4dElucHV0RW5hYmxlZCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1h
aW5GcmFtZShib29sIHVzZUN1c3RvbVJlcHJlc2VudGF0aW9uKTsKSW5kZXg6IFdlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkocmV2aXNpb24gNzQ5NzMpCisrKyBX
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjaW1wb3J0ICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAj
aW1wb3J0ICJQYWdlQ2xpZW50SW1wbC5oIgogCisjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCiAj
aW1wb3J0ICJGaW5kSW5kaWNhdG9yLmgiCiAjaW1wb3J0ICJXS0FQSUNhc3QuaCIKICNpbXBvcnQg
IldLU3RyaW5nQ0YuaCIKQEAgLTI1Nyw2ICsyNTgsMTIgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6
c2V0RmluZEluZGljYXRvcihQYQogICAgIFttX3drVmlldyBfc2V0RmluZEluZGljYXRvcjpmaW5k
SW5kaWNhdG9yIGZhZGVPdXQ6ZmFkZU91dF07CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmFj
Y2Vzc2liaWxpdHlDaGlsZFRva2VuUmVjZWl2ZWQoY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5j
ZSYgZGF0YSkKK3sKKyAgICBOU0RhdGEqIHJlbW90ZVRva2VuID0gW05TRGF0YSBkYXRhV2l0aEJ5
dGVzOmRhdGEuZGF0YSgpIGxlbmd0aDpkYXRhLnNpemUoKV07CisgICAgW21fd2tWaWV3IF9zZXRB
Y2Nlc3NpYmlsaXR5Q2hpbGRUb2tlbjpyZW1vdGVUb2tlbl07Cit9CisgICAgCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFnZURpZEVudGVy
QWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCiB7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dL
Vmlldy5tbQkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dL
Vmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2ltcG9ydCAiV0tWaWV3
LmgiCiAKICNpbXBvcnQgIkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmgiCisjaW1wb3J0
ICJEYXRhUmVmZXJlbmNlLmgiCiAjaW1wb3J0ICJGaW5kSW5kaWNhdG9yLmgiCiAjaW1wb3J0ICJG
aW5kSW5kaWNhdG9yV2luZG93LmgiCiAjaW1wb3J0ICJMYXllckJhY2tlZERyYXdpbmdBcmVhUHJv
eHkuaCIKQEAgLTUxLDYgKzUyLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSW50UmVjdC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3Jt
U2NyZWVuLmg+CisjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbXBvcnQgPHd0
Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtOTQsNiArOTYsOCBA
QCBAaW50ZXJmYWNlIFdLVmlld0RhdGEgOiBOU09iamVjdCB7CiAgICAgTlNWaWV3ICpfbGF5ZXJI
b3N0aW5nVmlldzsKICNlbmRpZgogCisgICAgUmV0YWluUHRyPGlkPiBfcmVtb3RlQWNjZXNzaWJp
bGl0eUNoaWxkOworICAgIAogICAgIC8vIEZvciBhc3luY2hyb25vdXMgdmFsaWRhdGlvbi4KICAg
ICBWYWxpZGF0aW9uTWFwIF92YWxpZGF0aW9uTWFwOwogCkBAIC0xNjIsNiArMTY2LDEyIEBAIC0g
KGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBjb250ZXgKIAogICAgIFdlYkNvbnRleHQ6
OnN0YXRpc3RpY3MoKS53a1ZpZXdDb3VudCsrOwogCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05f
U05PV19MRU9QQVJEKQorICAgIE5TRGF0YSAqcmVtb3RlVG9rZW4gPSAoTlNEYXRhICopV0tBWFJl
bW90ZVRva2VuRm9yRWxlbWVudChzZWxmKTsKKyAgICBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIGRh
dGFUb2tlbiA9IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oW3JlbW90ZVRva2VuIGJ5dGVzXSksIFtyZW1vdGVUb2tlbiBsZW5ndGhdKTsKKyAg
ICBfZGF0YS0+X3BhZ2UtPnNlbmRBY2Nlc3NpYmlsaXR5UHJlc2VudGVyVG9rZW4oZGF0YVRva2Vu
KTsKKyNlbmRpZgorICAgIAogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC0yNDMsOCArMjUzLDkg
QEAgLSAodm9pZClfdXBkYXRlV2luZG93QW5kVmlld0ZyYW1lcwogICAgIAogICAgIE5TUmVjdCB3
aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMgPSBbd2luZG93IGZyYW1lXTsKICAgICBOU1Jl
Y3Qgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcyA9IFtzZWxmIGNvbnZlcnRSZWN0OltzZWxm
IGZyYW1lXSB0b1ZpZXc6bmlsXTsKKyAgICBOU1BvaW50IGFjY2Vzc2liaWxpdHlQb3NpdGlvbiA9
IFtbc2VsZiBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5UG9zaXRp
b25BdHRyaWJ1dGVdIHBvaW50VmFsdWVdOwogICAgIAotICAgIF9kYXRhLT5fcGFnZS0+d2luZG93
QW5kVmlld0ZyYW1lc0NoYW5nZWQoZW5jbG9zaW5nSW50UmVjdCh3aW5kb3dGcmFtZUluU2NyZWVu
Q29vcmRpbmF0ZXMpLCBlbmNsb3NpbmdJbnRSZWN0KHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0
ZXMpKTsKKyAgICBfZGF0YS0+X3BhZ2UtPndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGVuY2xv
c2luZ0ludFJlY3Qod2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzKSwgZW5jbG9zaW5nSW50
UmVjdCh2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKSwgSW50UG9pbnQoYWNjZXNzaWJpbGl0
eVBvc2l0aW9uKSk7CiB9CiAKIC0gKHZvaWQpcmVuZXdHU3RhdGUKQEAgLTkxMCw2ICs5MjEsNDMg
QEAgLSAodm9pZCl2aWV3RGlkVW5oaWRlCiAgICAgW3NlbGYgX3VwZGF0ZVZpc2liaWxpdHldOwog
fQogCistICh2b2lkKV9zZXRBY2Nlc3NpYmlsaXR5Q2hpbGRUb2tlbjooTlNEYXRhICopZGF0YQor
eworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICBfZGF0YS0+X3Jl
bW90ZUFjY2Vzc2liaWxpdHlDaGlsZCA9IFdLQVhSZW1vdGVFbGVtZW50Rm9yVG9rZW4oKENGRGF0
YVJlZilkYXRhKTsKKyAgICBXS0FYSW5pdGlhbGl6ZVJlbW90ZUVsZW1lbnRXaXRoV2luZG93KF9k
YXRhLT5fcmVtb3RlQWNjZXNzaWJpbGl0eUNoaWxkLmdldCgpLCBbc2VsZiB3aW5kb3ddKTsKKyNl
bmRpZgorfQorCistIChCT09MKWFjY2Vzc2liaWxpdHlJc0lnbm9yZWQKK3sKKyAgICByZXR1cm4g
Tk87Cit9CisKKy0gKGlkKWFjY2Vzc2liaWxpdHlIaXRUZXN0OihOU1BvaW50KXBvaW50Cit7Cisg
ICAgcmV0dXJuIF9kYXRhLT5fcmVtb3RlQWNjZXNzaWJpbGl0eUNoaWxkLmdldCgpOworfQorCist
IChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1dGUKK3sK
KyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5BdHRyaWJ1dGVdKSB7CisgICAgICAgIGlmICghX2RhdGEtPl9yZW1vdGVBY2Nlc3NpYmlsaXR5
Q2hpbGQpCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gW05TQXJyYXkg
YXJyYXlXaXRoT2JqZWN0Ol9kYXRhLT5fcmVtb3RlQWNjZXNzaWJpbGl0eUNoaWxkLmdldCgpXTsK
KyAgICB9CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eVJvbGVBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xl
OworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb2xl
RGVzY3JpcHRpb25BdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5Um9s
ZURlc2NyaXB0aW9uKE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSwgbmlsKTsKKyAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UGFyZW50QXR0cmlidXRlXSkK
KyAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKFtzZWxmIHN1
cGVydmlld10pOworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlFbmFibGVkQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJX
aXRoQm9vbDpZRVNdOworICAgIAorICAgIHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOmF0dHJpYnV0ZV07Cit9CisKIC0gKE5TVmlldyAqKWhpdFRlc3Q6KE5TUG9pbnQp
cG9pbnQKIHsKICAgICBOU1ZpZXcgKmhpdFZpZXcgPSBbc3VwZXIgaGl0VGVzdDpwb2ludF07Cklu
ZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCShyZXZpc2lv
biA3NDk3MykKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAko
d29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBAaW50ZXJmYWNlIFdLVmlldyAoSW50ZXJu
YWwpCiAtICh2b2lkKV9wYWdlRGlkTGVhdmVBY2NlbGVyYXRlZENvbXBvc2l0aW5nOwogI2VuZGlm
CiAKKy0gKHZvaWQpX3NldEFjY2Vzc2liaWxpdHlDaGlsZFRva2VuOihOU0RhdGEgKilkYXRhOwog
LSAodm9pZClfc2V0Q29tcGxleFRleHRJbnB1dEVuYWJsZWQ6KEJPT0wpY29tcGxleFRleHRJbnB1
dEVuYWJsZWQgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXI6KHVpbnQ2NF90KXBsdWdp
bkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyOwogCiAtICh2b2lkKV9zZXRQYWdlSGFzQ3VzdG9t
UmVwcmVzZW50YXRpb246KEJPT0wpcGFnZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uOwpJbmRleDog
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc0OTcz
KQorKysgV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTIwOSw2ICsyMDksOCBAQAogCQkxQ0E4Qjk0NTEyN0M4ODJBMDA1NzZDMkIgLyog
V2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNBOEI5NDMxMjdDODgyQTAwNTc2QzJCIC8qIFdl
Ykluc3BlY3RvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJMUNBOEI5NDYxMjdD
ODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQThCOTQ0MTI3Qzg4MkEwMDU3NkMy
QiAvKiBXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmggKi87IH07CiAJCTFDQThCOTU0MTI3Qzg5
MTUwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzhFMkRBRDEyNzhDNUIyMDBCQzdCRDAgLyogV2ViSW5z
cGVjdG9yTWFjLm1tICovOyB9OworCQkyOUNENTVBQTEyOEUyOTRGMDAxMzNDODUgLyogQWNjZXNz
aWJpbGl0eVdlYlBhZ2VPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI5Q0Q1NUE4MTI4RTI5NEYwMDEzM0M4NSAvKiBBY2Nlc3NpYmlsaXR5V2Vi
UGFnZU9iamVjdC5oICovOyB9OworCQkyOUNENTVBQjEyOEUyOTRGMDAxMzNDODUgLyogQWNjZXNz
aWJpbGl0eVdlYlBhZ2VPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyOUNENTVBOTEyOEUyOTRGMDAxMzNDODUgLyogQWNjZXNzaWJpbGl0eVdl
YlBhZ2VPYmplY3QubW0gKi87IH07CiAJCTM3RjYyM0I4MTJBNTdCNjIwMEUzRkRGNiAvKiBXS0Zp
bmRPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzN0Y2MjNCNzEyQTU3QjYyMDBFM0ZERjYgLyogV0tGaW5kT3B0aW9ucy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJNTEwMjFFOUMxMkIxNjc4ODAw
NUMwMzNDIC8qIFdlYkNvbnRleHRNZW51Q2xpZW50TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMjFFOUIxMkIxNjc4ODAwNUMwMzNDIC8qIFdl
YkNvbnRleHRNZW51Q2xpZW50TWFjLm1tICovOyB9OwogCQk1MTBGQkI5QTEyODhDOTVFMDBBRkZE
RjQgLyogV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBGQkI5ODEyODhDOTVFMDBBRkZERjQgLyogV2ViQ29u
dGV4dE1lbnVJdGVtRGF0YS5jcHAgKi87IH07CkBAIC04ODEsNiArODgzLDggQEAKIAkJMUNBOEI5
MzUxMjdDNzc0RTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViSW5zcGVjdG9yUHJveHlNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQThCOTQzMTI3Qzg4MkEwMDU3NkMyQiAvKiBX
ZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQThCOTQ0MTI3Qzg4MkEwMDU3NkMyQiAvKiBX
ZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMjlDRDU1QTgxMjhFMjk0RjAwMTMzQzg1IC8qIEFjY2Vzc2liaWxpdHlXZWJQYWdlT2Jq
ZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlXZWJQ
YWdlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5Q0Q1NUE5MTI4RTI5
NEYwMDEzM0M4NSAvKiBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMkRCQ0Y1RTAzNzBBREVFMDBDOTE3ODMg
LyogV2ViS2l0MlByZWZpeC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJL
aXQyUHJlZml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RjYyM0I3MTJBNTdC
NjIwMEUzRkRGNiAvKiBXS0ZpbmRPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdLRmluZE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEw
MjFFOUIxMkIxNjc4ODAwNUMwMzNDIC8qIFdlYkNvbnRleHRNZW51Q2xpZW50TWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29udGV4dE1lbnVDbGllbnRN
YWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzI2LDYgKzIzMzAsOCBAQAog
CQlCQzk2M0Q2QzExM0REMTk1MDA1NzRCRTIgLyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkyOUNENTVBOTEyOEUyOTRGMDAxMzNDODUgLyogQWNj
ZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QubW0gKi8sCisJCQkJMjlDRDU1QTgxMjhFMjk0RjAwMTMz
Qzg1IC8qIEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0LmggKi8sCiAJCQkJQkM1RjdCQjgxMTgy
Mzc5OTAwNTJDMDJDIC8qIENodW5rZWRVcGRhdGVEcmF3aW5nQXJlYU1hYy5jcHAgKi8sCiAJCQkJ
MEY1MjY1QjUxMUREMzc3MDAwMDZEMzNDIC8qIExheWVyQmFja2VkRHJhd2luZ0FyZWFNYWMubW0g
Ki8sCiAJCQkJMUM4RTJEQUQxMjc4QzVCMjAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvck1hYy5tbSAq
LywKQEAgLTI3NzMsNiArMjc3OSw3IEBACiAJCQkJQkNFRTdEQzUxMjhCNjQ1RDAwOTgyN0RBIC8q
IEluamVjdGVkQnVuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFRDgyQTdGMjEyOEM2
RkFGMDA0NDc3QjMgLyogV0tCdW5kbGVQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUNBOEI5NDYxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCBp
biBIZWFkZXJzICovLAorCQkJCTI5Q0Q1NUFBMTI4RTI5NEYwMDEzM0M4NSAvKiBBY2Nlc3NpYmls
aXR5V2ViUGFnZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1MzU2OUQxMjkxQjFEMjAw
MDc0OURDIC8qIFdlYlBhZ2VDb250ZXh0TWVudUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUFBQjRBOEQxMjk2RjBBMjAwMjM5NTJGIC8qIFNhbmRib3hFeHRlbnNpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDN0I2MjA2MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXAuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzIwNCw2ICszMjExLDcgQEAKIAkJCQkxQ0E4Qjk0NTEyN0M4ODJBMDA1
NzZDMkIgLyogV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUNBOEI5NTQxMjdDODkxNTAwNTc2QzJCIC8qIFdlYkluc3BlY3Rvck1hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJCUVEQ0E3MUI3MTI4RERBOEMwMDIwMUIyNiAvKiBXS0J1bmRsZVBh
Z2VPdmVybGF5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI5Q0Q1NUFCMTI4RTI5NEYwMDEzM0M4
NSAvKiBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUx
NTM1NjlDMTI5MUIxRDIwMDA3NDlEQyAvKiBXZWJQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUFBQjRBQUExMjk2RjE1NDAwMjM5NTJGIC8qIFNhbmRib3hFeHRl
bnNpb25NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzdCNjIwNzEyOUEwQTY3MDBEMTc0QTQg
LyogV2ViUGFnZUdyb3VwLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcsMTAgQEAgdm9pZCBXZWJQcm9j
ZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhjbwogICAgICAgICBjbGVhclJlc291cmNlQ2FjaGVz
KCk7CiAgICAgaWYgKHBhcmFtZXRlcnMuY2xlYXJBcHBsaWNhdGlvbkNhY2hlKQogICAgICAgICBj
bGVhckFwcGxpY2F0aW9uQ2FjaGUoKTsKKyAgICAKKyNpZiBQTEFURk9STShNQUMpCisgICAgbV9w
cmVzZW50ZXJBcHBsaWNhdGlvblBpZCA9IHBhcmFtZXRlcnMucHJlc2VudGVyQXBwbGljYXRpb25Q
aWQ7CisjZW5kaWYKIAogICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZEFsd2F5c1VzZUNvbXBsZXhU
ZXh0Q29kZVBhdGgpCiAgICAgICAgIHNldEFsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQYXRoKHRy
dWUpOwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkx
LDEwIEBAIHB1YmxpYzoKICAgICBXZWJQYWdlR3JvdXBQcm94eSogd2ViUGFnZUdyb3VwKHVpbnQ2
NF90IHBhZ2VHcm91cElEKTsKICAgICBXZWJQYWdlR3JvdXBQcm94eSogd2ViUGFnZUdyb3VwKGNv
bnN0IFdlYlBhZ2VHcm91cERhdGEmKTsKICAgICBzdGF0aWMgV2ViQ29yZTo6UGFnZUdyb3VwKiBz
aGFyZWRQYWdlR3JvdXAoKTsKLQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBwaWRfdCBwcmVzZW50
ZXJBcHBsaWNhdGlvblBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlc2VudGVyQXBwbGljYXRpb25Q
aWQ7IH0KKyNlbmRpZiAKKyAgICAKICNpZiBQTEFURk9STShRVCkKICAgICBRTmV0d29ya0FjY2Vz
c01hbmFnZXIqIG5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkgeyByZXR1cm4gbV9uZXR3b3JrQWNjZXNz
TWFuYWdlcjsgfQogI2VuZGlmCkBAIC0xNTksNiArMTYyLDkgQEAgcHJpdmF0ZToKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFBMQVRGT1JNKE1BQykKICAgICBtYWNoX3BvcnRf
dCBtX2NvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydDsKICNlbmRpZgorI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBwaWRfdCBtX3ByZXNlbnRlckFwcGxpY2F0aW9uUGlkOworI2VuZGlmCiAKICNpZiBQ
TEFURk9STShRVCkKICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG1fbmV0d29ya0FjY2Vzc01h
bmFnZXI7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVM
b2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHJldmlzaW9uIDc0OTczKQorKysgV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI1Nyw2ICsxMjU3LDEyIEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OnJlZ2lzdGVyRm9ySWMKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKKyAgICAKK1JlbW90
ZUFYT2JqZWN0UmVmIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjphY2Nlc3NpYmlsaXR5UmVtb3RlT2Jq
ZWN0KCkgCit7CisgICAgcmV0dXJuIG1fZnJhbWUtPnBhZ2UoKS0+YWNjZXNzaWJpbGl0eVJlbW90
ZU9iamVjdCgpOworfQorICAgIAogI2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCiBqb2JqZWN0
IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpqYXZhQXBwbGV0KE5TVmlldyopIHsgcmV0dXJuIDA7IH0K
ICNlbmRpZgpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIwMSw2ICsyMDEsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCBsaXN0ZW4gPSB0cnVlKTsKICAgICAKICNp
ZiBQTEFURk9STShNQUMpCisgICAgdmlydHVhbCBSZW1vdGVBWE9iamVjdFJlZiBhY2Nlc3NpYmls
aXR5UmVtb3RlT2JqZWN0KCk7CisgICAgCiAjaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKICAg
ICB2aXJ0dWFsIGpvYmplY3QgamF2YUFwcGxldChOU1ZpZXcqKTsKICNlbmRpZgpJbmRleDogV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDc0OTczKQorKysgV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MTIsMTEgKzEzMTIsMTIgQEAgdm9pZCBXZWJQYWdlOjpzZXRXaW5kb3dJc1Zpc2libGUoYm9vbCB3
aQogICAgICAgICAoKml0KS0+c2V0V2luZG93SXNWaXNpYmxlKHdpbmRvd0lzVmlzaWJsZSk7CiB9
CiAKLXZvaWQgV2ViUGFnZTo6d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKQordm9pZCBXZWJQYWdlOjp3
aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dG
cmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFt
ZUluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBhY2Nlc3NpYmls
aXR5Vmlld0Nvb3JkaW5hdGVzKQogewogICAgIG1fd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5h
dGVzID0gd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzOwogICAgIG1fdmlld0ZyYW1lSW5X
aW5kb3dDb29yZGluYXRlcyA9IHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXM7Ci0KKyAgICBt
X2FjY2Vzc2liaWxpdHlQb3NpdGlvbiA9IGFjY2Vzc2liaWxpdHlWaWV3Q29vcmRpbmF0ZXM7Cisg
ICAgCiAgICAgLy8gVGVsbCBhbGwgb3VyIHBsdWctaW4gdmlld3MgdGhhdCB0aGUgd2luZG93IGFu
ZCB2aWV3IGZyYW1lcyBoYXZlIGNoYW5nZWQuCiAgICAgZm9yIChIYXNoU2V0PFBsdWdpblZpZXcq
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblZpZXdzLmJlZ2luKCksIGVuZCA9IG1fcGx1
Z2luVmlld3MuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgKCppdCktPndpbmRvd0Fu
ZFZpZXdGcmFtZXNDaGFuZ2VkKHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgdmlld0Zy
YW1lSW5XaW5kb3dDb29yZGluYXRlcyk7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMTUgQEAKICNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtVG91Y2hFdmVudC5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShNQUMpCisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2lmZGVmIF9fT0JKQ19fCitAY2xhc3MgQWNjZXNz
aWJpbGl0eVdlYlBhZ2VPYmplY3Q7CisjZWxzZQorY2xhc3MgQWNjZXNzaWJpbGl0eVdlYlBhZ2VP
YmplY3Q7CisjZW5kaWYKKyNlbmRpZgorCiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAgICAgY2xhc3Mg
QXJndW1lbnREZWNvZGVyOwogICAgIGNsYXNzIENvbm5lY3Rpb247CkBAIC0yNTMsNiArMjYyLDEw
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5n
ZShXZWJDb3JlOjpSYW5nZSosIHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCk7
CiAKICNpZiBQTEFURk9STShNQUMpCisgICAgdm9pZCBzZW5kQWNjZXNzaWJpbGl0eVByZXNlbnRl
clRva2VuKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKTsKKyAgICBBY2Nlc3NpYmlsaXR5
V2ViUGFnZU9iamVjdCogYWNjZXNzaWJpbGl0eVJlbW90ZU9iamVjdCgpOworICAgIFdlYkNvcmU6
OkludFBvaW50IGFjY2Vzc2liaWxpdHlQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXNz
aWJpbGl0eVBvc2l0aW9uOyB9ICAgIAorICAgIAogICAgIHZvaWQgc2VuZENvbXBsZXhUZXh0SW5w
dXRUb1BsdWdpbih1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiB0ZXh0SW5wdXQpOwogCiAgICAgdm9pZCBnZXRNYXJrZWRSYW5nZSh1aW50NjRf
dCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpOwpAQCAtMzQwLDcgKzM1Myw3IEBAIHByaXZh
dGU6CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCBzZXRXaW5kb3dJc1Zpc2libGUoYm9v
bCB3aW5kb3dJc1Zpc2libGUpOwotICAgIHZvaWQgd2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKTsKKyAg
ICB2b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
dmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGFj
Y2Vzc2liaWxpdHlWaWV3Q29vcmRpbmF0ZXMpOwogI2VuZGlmCiAKICAgICB2b2lkIHVuYXBwbHlF
ZGl0Q29tbWFuZCh1aW50NjRfdCBjb21tYW5kSUQpOwpAQCAtMzk3LDggKzQxMCwxMyBAQCBwcml2
YXRlOgogICAgIC8vIFRoZSBmcmFtZSBvZiB0aGUgdmlldyBpbiB3aW5kb3cgY29vcmRpbmF0ZXMu
CiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX3ZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXM7CiAK
KyAgICAvLyBUaGUgYWNjZXNzaWJpbGl0eSBwb3NpdGlvbiBvZiB0aGUgdmlldy4KKyAgICBXZWJD
b3JlOjpJbnRQb2ludCBtX2FjY2Vzc2liaWxpdHlQb3NpdGlvbjsKKyAgICAKICAgICAvLyBBbGwg
cGx1Zy1pbiB2aWV3cyBvbiB0aGlzIHdlYiBwYWdlLgogICAgIEhhc2hTZXQ8UGx1Z2luVmlldyo+
IG1fcGx1Z2luVmlld3M7CisgICAgCisgICAgUmV0YWluUHRyPEFjY2Vzc2liaWxpdHlXZWJQYWdl
T2JqZWN0PiBtX21vY2tBY2Nlc3NpYmlsaXR5RWxlbWVudDsKICNlbGlmIFBMQVRGT1JNKFdJTikK
ICAgICAvLyBPdXIgdmlldydzIHdpbmRvdyAoaW4gdGhlIFVJIHByb2Nlc3MpLgogICAgIEhXTkQg
bV9uYXRpdmVXaW5kb3c7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMTE1LDEwICsx
MTUsMTEgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSB7CiAgICAgU2VuZENvbXBsZXhUZXh0SW5wdXRU
b1BsdWdpbih1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgU3RyaW5n
IHRleHRJbnB1dCkKIAogICAgIFNldFdpbmRvd0lzVmlzaWJsZShib29sIHdpbmRvd0lzVmlzaWJs
ZSkKLSAgICBXaW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChXZWJDb3JlOjpJbnRSZWN0IHdpbmRv
d0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgV2ViQ29yZTo6SW50UmVjdCB2aWV3RnJhbWVJbldp
bmRvd0Nvb3JkaW5hdGVzKQorICAgIFdpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKFdlYkNvcmU6
OkludFJlY3Qgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBXZWJDb3JlOjpJbnRSZWN0
IHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMsIFdlYkNvcmU6OkludFBvaW50IGFjY2Vzc2li
aWxpdHlWaWV3Q29vcmRpbmF0ZXMpCiAgICAgR2V0TWFya2VkUmFuZ2UoKSAtPiAodWludDY0X3Qg
bG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0aCkKICAgICBDaGFyYWN0ZXJJbmRleEZvclBvaW50KFdl
YkNvcmU6OkludFBvaW50IHBvaW50KSAtPiAodWludDY0X3QgcmVzdWx0KQogICAgIEZpcnN0UmVj
dEZvckNoYXJhY3RlclJhbmdlKHVpbnQ2NF90IGxvY2F0aW9uLCB1aW50NjRfdCBsZW5ndGgpIC0+
IChXZWJDb3JlOjpJbnRSZWN0IHJlc3VsdFJlY3QpCisgICAgU2VuZEFjY2Vzc2liaWxpdHlQcmVz
ZW50ZXJUb2tlbihDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIHRva2VuKQogI2VuZGlmCiAjaWYgUExB
VEZPUk0oV0lOKQogICAgIENvbmZpcm1Db21wb3NpdGlvbihXVEY6OlN0cmluZyBjb21wb3NpdGlv
blN0cmluZykKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9BY2Nlc3NpYmls
aXR5V2ViUGFnZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9BY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5oCShyZXZpc2lvbiAwKQorKysgV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0LmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFjY2Vz
c2liaWxpdHlXZWJQYWdlT2JqZWN0X2gKKyNkZWZpbmUgQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmpl
Y3RfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2U7Cit9CisKK0BpbnRlcmZh
Y2UgQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QgOiBOU09iamVjdCB7CisgICAgV2ViS2l0OjpX
ZWJQYWdlKiBtX3BhZ2U7CisgICAgCisgICAgaWQgbV9wYXJlbnQ7CisgICAgTlNBcnJheSogbV9h
dHRyaWJ1dGVOYW1lczsKKyAgICBOU011dGFibGVBcnJheSogbV9hY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW47Cit9CisKKy0gKHZvaWQpc2V0V2ViUGFnZTooV2ViS2l0OjpXZWJQYWdlKilwYWdlOworCist
ICh2b2lkKXNldFJlbW90ZVBhcmVudDooaWQpcGFyZW50OworCitAZW5kCisKKyNlbmRpZiAvLyBB
Y2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdF9oCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0Lm1t
CShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0FjY2Vzc2li
aWxpdHlXZWJQYWdlT2JqZWN0Lm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0LmgiCisKKyNpbXBv
cnQgIldlYkZyYW1lLmgiCisjaW1wb3J0ICJXZWJQYWdlLmgiCisjaW1wb3J0IDxBcHBLaXQvTlNB
Y2Nlc3NpYmlsaXR5UmVtb3RlVUlFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0FYT2JqZWN0
Q2FjaGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJh
bWVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbFZpZXcuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvU2Nyb2xsYmFyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKKworQGltcGxlbWVudGF0aW9uIEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0
CisKKy0gKGlkKWFjY2Vzc2liaWxpdHlSb290T2JqZWN0V3JhcHBlcgoreworICAgIFdlYkNvcmU6
OlBhZ2UqIHBhZ2UgPSBtX3BhZ2UtPmNvcmVQYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIAorICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlID0gcGFnZS0+bWFp
bkZyYW1lKCk7CisgICAgaWYgKCFjb3JlIHx8ICFjb3JlLT5kb2N1bWVudCgpKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIAorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvb3QgPSBjb3JlLT5k
b2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPnJvb3RPYmplY3QoKTsKKyAgICBpZiAoIXJvb3Qp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgcmV0dXJuIHJvb3QtPndyYXBwZXIoKTsK
K30KKworLSAodm9pZClzZXRXZWJQYWdlOihXZWJQYWdlKilwYWdlCit7CisgICAgbV9wYWdlID0g
cGFnZTsKK30KKworLSAodm9pZClzZXRSZW1vdGVQYXJlbnQ6KGlkKXBhcmVudAoreworICAgIGlm
IChwYXJlbnQgIT0gbV9wYXJlbnQpIHsKKyAgICAgICAgW21fcGFyZW50IHJlbGVhc2VdOworICAg
ICAgICBtX3BhcmVudCA9IFtwYXJlbnQgcmV0YWluXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpZGVh
bGxvYworeworICAgIFttX2FjY2Vzc2liaWxpdHlDaGlsZHJlbiByZWxlYXNlXTsKKyAgICBbbV9h
dHRyaWJ1dGVOYW1lcyByZWxlYXNlXTsKKyAgICBbbV9wYXJlbnQgcmVsZWFzZV07CisgICAgW3N1
cGVyIGRlYWxsb2NdOworfQorCistIChCT09MKWFjY2Vzc2liaWxpdHlJc0lnbm9yZWQKK3sKKyAg
ICByZXR1cm4gTk87Cit9CisKKy0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFt
ZXMKK3sKKyAgICBpZiAoIW1fYXR0cmlidXRlTmFtZXMpCisgICAgICAgIG1fYXR0cmlidXRlTmFt
ZXMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVJvbGVBdHRyaWJ1dGUsIE5TQWNjZXNzaWJpbGl0eVJv
bGVEZXNjcmlwdGlvbkF0dHJpYnV0ZSwgTlNBY2Nlc3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0
ZSwgTlNBY2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRlLCBOU0FjY2Vzc2liaWxpdHlUb3BMZXZl
bFVJRWxlbWVudEF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNz
aWJpbGl0eVBvc2l0aW9uQXR0cmlidXRlLCBOU0FjY2Vzc2liaWxpdHlTaXplQXR0cmlidXRlLCBO
U0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZSwgbmlsXTsKKworICAgIHJldHVybiBtX2F0
dHJpYnV0ZU5hbWVzOworfQorCistIChCT09MKWFjY2Vzc2liaWxpdHlJc0F0dHJpYnV0ZVNldHRh
YmxlOihOU1N0cmluZyAqKWF0dHJpYnV0ZQoreworICAgIHJldHVybiBOTzsKK30KKworLSAodm9p
ZClhY2Nlc3NpYmlsaXR5U2V0VmFsdWU6KGlkKXZhbHVlIGZvckF0dHJpYnV0ZTooTlNTdHJpbmcg
KilhdHRyaWJ1dGUgCit7CisgICAgcmV0dXJuOworfQorCistIChOU0FycmF5ICopYWNjZXNzaWJp
bGl0eUFjdGlvbk5hbWVzCit7CisgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5XTsKK30KKworLSAo
TlNBcnJheSAqKWFjY2Vzc2liaWxpdHlDaGlsZHJlbgoreworICAgIGlkIHdyYXBwZXIgPSBbc2Vs
ZiBhY2Nlc3NpYmlsaXR5Um9vdE9iamVjdFdyYXBwZXJdOworICAgIGlmICghd3JhcHBlcikKKyAg
ICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5XTsKKyAgICAKKyAgICByZXR1cm4gW05TQXJyYXkg
YXJyYXlXaXRoT2JqZWN0OndyYXBwZXJdOworfQorCistIChpZClhY2Nlc3NpYmlsaXR5QXR0cmli
dXRlVmFsdWU6KE5TU3RyaW5nICopYXR0cmlidXRlCit7CisgICAgaWYgKCFXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQorICAgICAgICBXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjplbmFibGVBY2Nlc3NpYmlsaXR5KCk7CisgICAgCisgICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZV0pCisgICAg
ICAgIHJldHVybiBtX3BhcmVudDsKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFttX3BhcmVu
dCB3aW5kb3dVSUVsZW1lbnRdOworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxlbWVudEF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVy
biBbbV9wYXJlbnQgdG9wTGV2ZWxVSUVsZW1lbnRdOworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJu
IE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZTsKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0cmlidXRlXSkKKyAgICAgICAg
cmV0dXJuIE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbihOU0FjY2Vzc2liaWxpdHlHcm91
cFJvbGUsIG5pbCk7CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eUZvY3VzZWRBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJl
cldpdGhCb29sOk5PXTsKKworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVBvc2l0
aW9uQXR0cmlidXRlXSkgeworICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCA9IG1fcGFn
ZS0+YWNjZXNzaWJpbGl0eVBvc2l0aW9uKCk7CisgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1
ZVdpdGhQb2ludDpOU01ha2VQb2ludChwb2ludC54KCksIHBvaW50LnkoKSldOworICAgIH0KKyAg
ICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJp
YnV0ZV0pIHsKKyAgICAgICAgY29uc3QgSW50U2l6ZSYgcyA9IG1fcGFnZS0+c2l6ZSgpOworICAg
ICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoU2l6ZTpOU01ha2VTaXplKHMud2lkdGgoKSwg
cy5oZWlnaHQoKSldOworICAgIH0KKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW3NlbGYg
YWNjZXNzaWJpbGl0eUNoaWxkcmVuXTsKKworICAgIHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZV07Cit9CisKKy0gKEJPT0wpYWNjZXNzaWJpbGl0eVNo
b3VsZFVzZVVuaXF1ZUlkCit7CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoaWQpYWNjZXNzaWJp
bGl0eUhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQgCit7CisgICAgLy8gSGl0LXRlc3QgcG9pbnQgY29t
ZXMgaW4gYXMgYm90dG9tLXNjcmVlbiBjb29yZGluYXRlcy4gTmVlZHMgdG8gYmUgbm9ybWFsaXpl
ZCB0byB0aGUgZnJhbWUgb2YgdGhlIHdlYiBwYWdlLgorICAgIE5TUG9pbnQgcmVtb3RlUG9zaXRp
b24gPSBbW3NlbGYgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVBv
c2l0aW9uQXR0cmlidXRlXSBwb2ludFZhbHVlXTsKKyAgICBOU1NpemUgcmVtb3RlU2l6ZSA9IFtb
c2VsZiBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJp
YnV0ZV0gc2l6ZVZhbHVlXTsKKyAgICAKKyAgICAvLyBHZXQgdGhlIHkgcG9zaXRpb24gb2YgdGhl
IFdLVmlldyAod2UgaGF2ZSB0byBzY3JlZW4tZmxpcCBhbmQgZ28gZnJvbSBib3R0b20gbGVmdCB0
byB0b3AgbGVmdCkuCisgICAgQ0dGbG9hdCBzY3JlZW5IZWlnaHQgPSBbW1tOU1NjcmVlbiBzY3Jl
ZW5zXSBvYmplY3RBdEluZGV4OjBdIGZyYW1lXS5zaXplLmhlaWdodDsKKyAgICByZW1vdGVQb3Np
dGlvbi55ID0gKHNjcmVlbkhlaWdodCAtIHJlbW90ZVBvc2l0aW9uLnkpIC0gcmVtb3RlU2l6ZS5o
ZWlnaHQ7CisgICAgCisgICAgcG9pbnQueSA9IHNjcmVlbkhlaWdodCAtIHBvaW50Lnk7CisKKyAg
ICAvLyBSZS1jZW50ZXIgcG9pbnQgaW50byB0aGUgd2ViIHBhZ2UncyBmcmFtZS4KKyAgICBwb2lu
dC55IC09IHJlbW90ZVBvc2l0aW9uLnk7CisgICAgcG9pbnQueCAtPSByZW1vdGVQb3NpdGlvbi54
OworICAgIAorICAgIFdlYkNvcmU6OkZyYW1lVmlldyogZnYgPSBtX3BhZ2UtPm1haW5GcmFtZSgp
LT5jb3JlRnJhbWUoKS0+dmlldygpOworICAgIGlmIChmdikgeworICAgICAgICBwb2ludC55ICs9
IGZ2LT5zY3JvbGxQb3NpdGlvbigpLnkoKTsKKyAgICAgICAgcG9pbnQueCArPSBmdi0+c2Nyb2xs
UG9zaXRpb24oKS54KCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBbW3NlbGYgYWNjZXNzaWJp
bGl0eVJvb3RPYmplY3RXcmFwcGVyXSBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpwb2ludF07Cit9CisK
Ky0gKGlkKWFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50IAoreworICAgIHJldHVybiBOU0Fj
Y2Vzc2liaWxpdHlVbmlnbm9yZWREZXNjZW5kYW50KHNlbGYpOworfQorCisKK0BlbmQKSW5kZXg6
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShyZXZpc2lv
biA3NDk3MykKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTUgQEAKIAogI2luY2x1ZGUgIldlYlBhZ2Uu
aCIKIAorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0LmgiCisjaW5jbHVkZSAi
RGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKICNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgorI2luY2x1ZGUgIldl
YkZyYW1lLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KQEAgLTQwLDYgKzQ0LDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL1Njcm9sbFZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRJdGVyYXRv
ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93c0tleWJvYXJkQ29kZXMuaD4KKyNpbmNsdWRl
IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
QEAgLTQ4LDYgKzUzLDIxIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogdm9pZCBXZWJQYWdlOjpwbGF0
Zm9ybUluaXRpYWxpemUoKQogewogICAgIG1fcGFnZS0+YWRkU2NoZWR1bGVQYWlyKFNjaGVkdWxl
UGFpcjo6Y3JlYXRlKFtOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdLCBrQ0ZSdW5Mb29wQ29tbW9u
TW9kZXMpKTsKKworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICBB
Y2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdCogbW9ja0FjY2Vzc2liaWxpdHlFbGVtZW50ID0gW1tb
QWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKwor
ICAgIC8vIEdldCB0aGUgcGlkIGZvciB0aGUgc3RhcnRpbmcgcHJvY2Vzcy4KKyAgICBwaWRfdCBw
aWQgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wcmVzZW50ZXJBcHBsaWNhdGlvblBpZCgpOyAgICAK
KyAgICBXS0FYSW5pdGlhbGl6ZUVsZW1lbnRXaXRoUHJlc2VudGVyUGlkKG1vY2tBY2Nlc3NpYmls
aXR5RWxlbWVudCwgcGlkKTsKKyAgICBbbW9ja0FjY2Vzc2liaWxpdHlFbGVtZW50IHNldFdlYlBh
Z2U6dGhpc107CisgICAgCisgICAgLy8gc2VuZCBkYXRhIGJhY2sgb3ZlcgorICAgIE5TRGF0YSog
cmVtb3RlVG9rZW4gPSAoTlNEYXRhICopV0tBWFJlbW90ZVRva2VuRm9yRWxlbWVudChtb2NrQWNj
ZXNzaWJpbGl0eUVsZW1lbnQpOyAKKyAgICBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFUb2tl
biA9IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oW3JlbW90ZVRva2VuIGJ5dGVzXSksIFtyZW1vdGVUb2tlbiBsZW5ndGhdKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJlY2VpdmVBY2Nlc3NpYmlsaXR5UGFnZVRva2Vu
KGRhdGFUb2tlbikpOworICAgIG1fbW9ja0FjY2Vzc2liaWxpdHlFbGVtZW50ID0gbW9ja0FjY2Vz
c2liaWxpdHlFbGVtZW50OworI2VuZGlmCiB9CiAKIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1QcmVm
ZXJlbmNlc0RpZENoYW5nZShjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJikKQEAgLTMxNCw2ICsz
MzQsMTkgQEAgYm9vbCBXZWJQYWdlOjpwZXJmb3JtRGVmYXVsdEJlaGF2aW9yRm9ySwogICAgIHJl
dHVybiB0cnVlOwogfQogCit2b2lkIFdlYlBhZ2U6OnNlbmRBY2Nlc3NpYmlsaXR5UHJlc2VudGVy
VG9rZW4oY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKK3sKKyNpZiAhZGVmaW5l
ZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgTlNEYXRhKiB0b2tlbkRhdGEgPSBbTlNE
YXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5kYXRhKCkgbGVuZ3RoOmRhdGEuc2l6ZSgpXTsKKyAgICBb
bV9tb2NrQWNjZXNzaWJpbGl0eUVsZW1lbnQuZ2V0KCkgc2V0UmVtb3RlUGFyZW50OldLQVhSZW1v
dGVFbGVtZW50Rm9yVG9rZW4oKENGRGF0YVJlZil0b2tlbkRhdGEpXTsKKyNlbmRpZgorfQorCitB
Y2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdCogV2ViUGFnZTo6YWNjZXNzaWJpbGl0eVJlbW90ZU9i
amVjdCgpCit7CisgICAgcmV0dXJuIG1fbW9ja0FjY2Vzc2liaWxpdHlFbGVtZW50LmdldCgpOwor
fQorICAgICAgICAgCiBib29sIFdlYlBhZ2U6OnBsYXRmb3JtSGFzTG9jYWxEYXRhRm9yVVJMKGNv
bnN0IFdlYkNvcmU6OktVUkwmIHVybCkKIHsKICAgICBOU011dGFibGVVUkxSZXF1ZXN0KiByZXF1
ZXN0ID0gW1tOU011dGFibGVVUkxSZXF1ZXN0IGFsbG9jXSBpbml0V2l0aFVSTDp1cmxdOwpJbmRl
eDogV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFpbk1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWluTWFjLm1tCShyZXZpc2lv
biA3NDk3MykKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc01haW5NYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEzMyw2ICsxMzMsMTAgQEAgaW50IFdlYlByb2Nlc3NNYWluKGNv
bnN0IENvbW1hbmRMaW5lJiBjbwogICAgICAvLyBJbml0aWFsaXplIEFwcEtpdC4KICAgICBbTlNB
cHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNhdGlvbl07CiAKKyNpZiAhZGVmaW5lZChCVUlMRElOR19P
Tl9TTk9XX0xFT1BBUkQpCisgICAgV0tBWFJlZ2lzdGVyUmVtb3RlQXBwKCk7CisjZW5kaWYKKyAg
ICAKICAgICBSdW5Mb29wOjpydW4oKTsKIAogICAgIC8vIEZJWE1FOiBEbyBtb3JlIGNsZWFudXAg
aGVyZS4KSW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9n
dGsvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdC9ndGsvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMDEtMDQgIENocmlzIEZsZWl6YWNo
ICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXSzI6IFN1cHBvcnQgQWNjZXNzaWJpbGl0eQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4NTkKKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHA6CisgICAgICAgIChEdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdldEZvY3VzZWRBY2Nlc3NpYmxlRWxlbWVudCk6CisgICAg
ICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3
X2dldF9hY2Nlc3NpYmxlKToKKwogMjAxMS0wMS0wMyAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8
Z3VzdGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBSZXZpZXdlZCBieSBN
YXJ0aW4gUm9iaW5zb24uCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCShyZXZpc2lvbiA3NDk3MykKKysrIFdl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDI1LDExICs0MjUsNyBAQCBBdGtPYmplY3QqIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6Z2V0CiAgICAgaWYgKCFwcml2LT5jb3JlRnJhbWUgfHwgIXByaXYtPmNvcmVG
cmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZW5kZXJWaWV3KiBy
b290ID0gdG9SZW5kZXJWaWV3KHByaXYtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIo
KSk7Ci0gICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEF0a09iamVjdCog
d3JhcHBlciA9ICBwcml2LT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+
Z2V0T3JDcmVhdGUocm9vdCktPndyYXBwZXIoKTsKKyAgICBBdGtPYmplY3QqIHdyYXBwZXIgPSAg
cHJpdi0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPnJvb3RPYmplY3Qo
KS0+d3JhcHBlcigpOwogICAgIGlmICghd3JhcHBlcikKICAgICAgICAgcmV0dXJuIDA7CiAKSW5k
ZXg6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiA3NDk3MykKKysrIFdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUy
LDcgKzE0NTIsNyBAQCBzdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2FjCiAg
ICAgaWYgKCFkb2MpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogY29yZUFjY2Vzc2libGUgPSBkb2MtPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUo
ZG9jLT5yZW5kZXJlcigpKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlQWNjZXNzaWJs
ZSA9IGRvYy0+YXhPYmplY3RDYWNoZSgpLT5yb290T2JqZWN0KCk7CiAgICAgaWYgKCFjb3JlQWNj
ZXNzaWJsZSB8fCAhY29yZUFjY2Vzc2libGUtPndyYXBwZXIoKSkKICAgICAgICAgcmV0dXJuIE5V
TEw7CiAKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDEtMDQgIENocmlzIEZsZWl6YWNo
ICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXSzI6IFN1cHBvcnQgQWNjZXNzaWJpbGl0eQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4NTkKKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJGcmFtZUxv
YWRlckNsaWVudDo6YWNjZXNzaWJpbGl0eVJlbW90ZU9iamVjdCk6CisgICAgICAgICogV2ViVmll
dy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2V0QWNjZXNzaWJsZU5hbWU6XSk6
CisgICAgICAgICgtW1dlYkZyYW1lIGFjY2Vzc2liaWxpdHlSb290XSk6CisgICAgICAgICogV2Vi
Vmlldy9XZWJGcmFtZUludGVybmFsLmg6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZVByaXZh
dGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJI
VE1MVmlldyBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6CisgICAgICAgICgtW1dlYkhU
TUxWaWV3IGFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50XSk6CisgICAgICAgICgtW1dlYkhU
TUxWaWV3IGFjY2Vzc2liaWxpdHlIaXRUZXN0Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBf
YWNjZXNzaWJpbGl0eVBhcmVudEZvclN1YnZpZXc6XSk6CisKIDIwMTEtMDEtMDIgIERhbiBCZXJu
c3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBTaW1v
biBGcmFzZXIuCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVy
Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDYgKzIy
NywxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgam9iamVjdCBqYXZhQXBwbGV0KE5TVmlldyop
OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShNQUMpCisgICAgdmlydHVhbCBSZW1vdGVBWE9iamVj
dFJlZiBhY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisg
ICAgCiAgICAgdm9pZCBzZXRPcmlnaW5hbFVSTEZvckRvd25sb2FkKFdlYkRvd25sb2FkICosIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0OwogCiAgICAgUmV0YWluUHRyPFdl
YkZyYW1lUG9saWN5TGlzdGVuZXI+IHNldFVwUG9saWN5TGlzdGVuZXIoV2ViQ29yZTo6RnJhbWVQ
b2xpY3lGdW5jdGlvbik7CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiA3NDk3
MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAt
Njg5LDI2ICs2ODksNiBAQCAtIChCT09MKV9uZWVkc0xheW91dAogICAgIHJldHVybiBfcHJpdmF0
ZS0+Y29yZUZyYW1lLT52aWV3KCkgPyBfcHJpdmF0ZS0+Y29yZUZyYW1lLT52aWV3KCktPm5lZWRz
TGF5b3V0KCkgOiBmYWxzZTsKIH0KIAotLSAoaWQpX2FjY2Vzc2liaWxpdHlUcmVlCi17Ci0jaWYg
SEFWRShBQ0NFU1NJQklMSVRZKQotICAgIGlmICghQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0
eUVuYWJsZWQoKSkgewotICAgICAgICBBWE9iamVjdENhY2hlOjplbmFibGVBY2Nlc3NpYmlsaXR5
KCk7Ci0gICAgICAgIGlmIChbW05TQXBwIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0Fj
Y2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VBdHRyaWJ1dGVdIGJvb2xWYWx1ZV0pCi0g
ICAgICAgICAgICBBWE9iamVjdENhY2hlOjplbmFibGVFbmhhbmNlZFVzZXJJbnRlcmZhY2VBY2Nl
c3NpYmlsaXR5KCk7Ci0gICAgfQotCi0gICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZyYW1lIHx8ICFf
cHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gbmlsOwotICAg
IFJlbmRlclZpZXcqIHJvb3QgPSB0b1JlbmRlclZpZXcoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9j
dW1lbnQoKS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm4gbmls
OwotICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5heE9iamVjdENh
Y2hlKCktPmdldE9yQ3JlYXRlKHJvb3QpLT53cmFwcGVyKCk7Ci0jZWxzZQotICAgIHJldHVybiBu
aWw7Ci0jZW5kaWYKLX0KLQogLSAoRE9NUmFuZ2UgKilfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNl
bGVjdGlvbjooU2VsZWN0aW9uQ29udHJvbGxlcjo6RUFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJl
Y3Rpb246KFNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFRleHRHcmFu
dWxhcml0eSlncmFudWxhcml0eQogewogICAgIGlmIChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxl
Y3Rpb24oKS0+aXNOb25lKCkpCkBAIC0xMzM5LDEzICsxMzE5LDE0IEBAIC0gKHZvaWQpc2V0QWNj
ZXNzaWJsZU5hbWU6KE5TU3RyaW5nICopbmEKICAgICBpZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vz
c2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBSZW5kZXJWaWV3
KiByb290ID0gdG9SZW5kZXJWaWV3KF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPnJl
bmRlcmVyKCkpOwotICAgIGlmICghcm9vdCkKKyAgICBpZiAoIV9wcml2YXRlLT5jb3JlRnJhbWUg
fHwgIV9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiByb290T2JqZWN0ID0gX3ByaXZhdGUtPmNvcmVG
cmFtZS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyb290KTsKLSAg
ICBTdHJpbmcgc3RyTmFtZShuYW1lKTsKLSAgICByb290T2JqZWN0LT5zZXRBY2Nlc3NpYmxlTmFt
ZShzdHJOYW1lKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiByb290T2JqZWN0ID0gX3ByaXZh
dGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5yb290T2JqZWN0KCk7
CisgICAgaWYgKHJvb3RPYmplY3QpIHsKKyAgICAgICAgU3RyaW5nIHN0ck5hbWUobmFtZSk7Cisg
ICAgICAgIHJvb3RPYmplY3QtPnNldEFjY2Vzc2libGVOYW1lKHN0ck5hbWUpOworICAgIH0KICNl
bmRpZgogfQogCkBAIC0xMzY2LDYgKzEzNDcsMjcgQEAgLSAoQk9PTCloYXNTcGVsbGluZ01hcmtl
cjooaW50KWZyb20gbGVuZwogICAgIHJldHVybiBjb3JlRnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rp
b25TdGFydEhhc1NwZWxsaW5nTWFya2VyRm9yKGZyb20sIGxlbmd0aCk7CiB9CiAKKy0gKGlkKWFj
Y2Vzc2liaWxpdHlSb290Cit7CisjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQorICAgIGlmICghQVhP
YmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgeworICAgICAgICBBWE9iamVjdENh
Y2hlOjplbmFibGVBY2Nlc3NpYmlsaXR5KCk7CisgICAgICAgIGlmIChbW05TQXBwIGFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VB
dHRyaWJ1dGVdIGJvb2xWYWx1ZV0pCisgICAgICAgICAgICBBWE9iamVjdENhY2hlOjplbmFibGVF
bmhhbmNlZFVzZXJJbnRlcmZhY2VBY2Nlc3NpYmlsaXR5KCk7CisgICAgfQorICAgIAorICAgIGlm
ICghX3ByaXZhdGUtPmNvcmVGcmFtZSB8fCAhX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBy
b290T2JqZWN0ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNo
ZSgpLT5yb290T2JqZWN0KCk7CisgICAgaWYgKHJvb3RPYmplY3QpCisgICAgICAgIHJldHVybiBy
b290T2JqZWN0LT53cmFwcGVyKCk7CisgICAgcmV0dXJuIG5pbDsKKyNlbHNlCisgICAgcmV0dXJu
IG5pbDsKKyNlbmRpZgorfQorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJGcmFtZQpJbmRl
eDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCShyZXZpc2lvbiA3NDk3MykKKysr
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzOCw4ICsxMzgsNiBAQCBAaW50ZXJmYWNlIFdlYkZyYW1lIChXZWJJbnRlcm5hbCkKIC0gKE5T
UmVjdClfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2U7CiAtICh2b2lkKV9z
Y3JvbGxET01SYW5nZVRvVmlzaWJsZTooRE9NUmFuZ2UgKilyYW5nZTsKIAotLSAoaWQpX2FjY2Vz
c2liaWxpdHlUcmVlOwotCiAtIChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2Vs
ZWN0aW9uOihXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpFQWx0ZXJhdGlvbilhbHRlcmF0
aW9uIGRpcmVjdGlvbjooV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFu
dWxhcml0eTooV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5OwogLSAoTlNSYW5n
ZSlfY29udmVydFRvTlNSYW5nZTooV2ViQ29yZTo6UmFuZ2UqKXJhbmdlOwogLSAoRE9NUmFuZ2Ug
KilfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOihOU1JhbmdlKXJhbmdlOwpJbmRleDogV2ViS2l0
L21hYy9XZWJWaWV3L1dlYkZyYW1lUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw0ICsxNDIs
NyBAQCBAaW50ZXJmYWNlIFdlYkZyYW1lIChXZWJQcml2YXRlKQogLy8gUmV0dXJucyB3aGV0aGVy
IHRoZXJlIGlzIGEgc3BlbGxpbmcgbWFya2VyIGluIHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb2YgdGhl
IGZvY3VzZWQgbm9kZS4KIC0gKEJPT0wpaGFzU3BlbGxpbmdNYXJrZXI6KGludClsb2NhdGlvbiBs
ZW5ndGg6KGludClsZW5ndGg7CiAKKy8vIFRoZSB0b3Agb2YgdGhlIGFjY2Vzc2liaWxpdHkgdHJl
ZS4KKy0gKGlkKWFjY2Vzc2liaWxpdHlSb290OworCiBAZW5kCkluZGV4OiBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkhUTUxWaWV3Lm1tCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJI
VE1MVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDI3NCw3ICs0Mjc0LDcgQEAgLSAodm9pZClm
bGFnc0NoYW5nZWQ6KE5TRXZlbnQgKilldmVudAogLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOihOU1N0cmluZyopYXR0cmlidXRlTmFtZQogewogICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSkgewot
ICAgICAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0gX2FjY2Vzc2liaWxpdHlUcmVlXTsK
KyAgICAgICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIGFjY2Vzc2liaWxpdHlSb290XTsK
ICAgICAgICAgaWYgKGFjY1RyZWUpCiAgICAgICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlX
aXRoT2JqZWN0OmFjY1RyZWVdOwogICAgICAgICByZXR1cm4gbmlsOwpAQCAtNDI4NCw3ICs0Mjg0
LDcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogCiAtIChpZClh
Y2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudAogewotICAgIGlkIGFjY1RyZWUgPSBbW3NlbGYg
X2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOworICAgIGlkIGFjY1RyZWUgPSBbW3NlbGYgX2Zy
YW1lXSBhY2Nlc3NpYmlsaXR5Um9vdF07CiAgICAgaWYgKGFjY1RyZWUpCiAgICAgICAgIHJldHVy
biBbYWNjVHJlZSBhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudF07CiAgICAgcmV0dXJuIHNl
bGY7CkBAIC00MjkyLDcgKzQyOTIsNyBAQCAtIChpZClhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxl
bWVudAogCiAtIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2ludAogewotICAg
IGlkIGFjY1RyZWUgPSBbW3NlbGYgX2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOworICAgIGlk
IGFjY1RyZWUgPSBbW3NlbGYgX2ZyYW1lXSBhY2Nlc3NpYmlsaXR5Um9vdF07CiAgICAgaWYgKGFj
Y1RyZWUpIHsKICAgICAgICAgTlNQb2ludCB3aW5kb3dDb29yZCA9IFtbc2VsZiB3aW5kb3ddIGNv
bnZlcnRTY3JlZW5Ub0Jhc2U6cG9pbnRdOwogICAgICAgICByZXR1cm4gW2FjY1RyZWUgYWNjZXNz
aWJpbGl0eUhpdFRlc3Q6W3NlbGYgY29udmVydFBvaW50OndpbmRvd0Nvb3JkIGZyb21WaWV3Om5p
bF1dOwpAQCAtNDMwMiw3ICs0MzAyLDcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUhpdFRlc3Q6KE5T
UG9pbnQpcG9pbgogCiAtIChpZClfYWNjZXNzaWJpbGl0eVBhcmVudEZvclN1YnZpZXc6KE5TVmll
dyAqKXN1YnZpZXcKIHsKLSAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0gX2FjY2Vzc2li
aWxpdHlUcmVlXTsKKyAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0gYWNjZXNzaWJpbGl0
eVJvb3RdOwogICAgIGlmICghYWNjVHJlZSkKICAgICAgICAgcmV0dXJuIHNlbGY7CiAgICAgaWQg
cGFyZW50ID0gW2FjY1RyZWUgX2FjY2Vzc2liaWxpdHlQYXJlbnRGb3JTdWJ2aWV3OnN1YnZpZXdd
OwpJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wMS0wNCAgQ2hyaXMgRmxlaXphY2ggIDxj
ZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdLMjogU3VwcG9ydCBBY2Nlc3NpYmlsaXR5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg1OQorCisgICAgICAgICogQWNjZXNz
aWJsZURvY3VtZW50LmNwcDoKKyAgICAgICAgKEFjY2Vzc2libGVEb2N1bWVudDo6QWNjZXNzaWJs
ZURvY3VtZW50KToKKwogMjAxMS0wMS0wMSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViS2l0L3dpbi9B
Y2Nlc3NpYmxlRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQWNjZXNzaWJs
ZURvY3VtZW50LmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQvd2luL0FjY2Vzc2libGVE
b2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKIC8vIEFjY2Vzc2libGVEb2N1bWVudAogQWNjZXNzaWJsZURvY3VtZW50
OjpBY2Nlc3NpYmxlRG9jdW1lbnQoRG9jdW1lbnQqIGRvYykKLSAgICA6IEFjY2Vzc2libGVCYXNl
KGRvYy0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShkb2MtPnJlbmRlcmVyKCkpKQorICAg
IDogQWNjZXNzaWJsZUJhc2UoZG9jLT5heE9iamVjdENhY2hlKCktPnJvb3RPYmplY3QoKSkKIHsK
IH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzQ5NzMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wMS0wNCAgQ2hyaXMgRmxlaXph
Y2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdLMjogU3VwcG9ydCBBY2Nlc3NpYmlsaXR5CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg1OQorCisgICAgICAgICog
cGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvd2Via2l0LXNjcm9sbGFyZWEtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS93ZWJraXQtc2Ny
b2xsYXJlYS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMS0wNCAgUnlvc3VrZSBOaXdhICA8cm5pd2FA
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDog
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvd2Via2l0LXNjcm9sbGFyZWEt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nl
c3NpYmlsaXR5L3dlYmtpdC1zY3JvbGxhcmVhLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3dlYmtpdC1zY3JvbGxhcmVh
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAordGV4dAorCit0ZXh0
CitUaGlzIHRlc3RzIHRoYXQgdGhlIFdlYktpdCBnZW5lcmF0ZWQgc2Nyb2xsIGFyZWFzIGFyZSBj
b3JyZWN0LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBib2R5LnJvbGUg
aXMgJ0FYUm9sZTogQVhXZWJBcmVhJworUEFTUyBib2R5LnBhcmVudEVsZW1lbnQoKS5yb2xlIGlz
ICdBWFJvbGU6IEFYU2Nyb2xsQXJlYScKK1BBU1MgYm9keS5wYXJlbnRFbGVtZW50KCkuY2hpbGRy
ZW5Db3VudCBpcyAxCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvd2Vi
a2l0LXNjcm9sbGFyZWEuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS93ZWJraXQtc2Nyb2xsYXJlYS5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvd2Via2l0LXNjcm9sbGFyZWEu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdD4KK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKwordGV4dDxicj4KKzxpbWcg
c3JjPSdyZXNvdXJjZXMvY2FrZS5wbmcnIHdpZHRoPTUwMDAgaGVpZ2h0PTUwMDA+Cis8YnI+Cit0
ZXh0CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
CisKKzxzY3JpcHQ+CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IHRoZSBXZWJL
aXQgZ2VuZXJhdGVkIHNjcm9sbCBhcmVhcyBhcmUgY29ycmVjdC4iKTsKKworICAgIGlmICh3aW5k
b3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKworICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiYm9keSIpLmZvY3VzKCk7CisgICAgICAgIHZhciBib2R5ID0gYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAgICAgIHNob3VsZEJlKCJib2R5LnJvbGUi
LCAiJ0FYUm9sZTogQVhXZWJBcmVhJyIpOworICAgICAgICBzaG91bGRCZSgiYm9keS5wYXJlbnRF
bGVtZW50KCkucm9sZSIsICInQVhSb2xlOiBBWFNjcm9sbEFyZWEnIik7CisgICAgICAgIHNob3Vs
ZEJlKCJib2R5LnBhcmVudEVsZW1lbnQoKS5jaGlsZHJlbkNvdW50IiwgIjEiKTsKKyAgICB9CisK
KyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77929</attachid>
            <date>2011-01-04 14:14:05 -0800</date>
            <delta_ts>2011-01-04 15:49:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51859-20110104141353.patch</filename>
            <type>text/plain</type>
            <size>126421</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDc0OTczKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTEtMDEtMDQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXSzI6
IFN1cHBvcnQgQWNjZXNzaWJpbGl0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTE4NTkKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpmb2N1c2VkRWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cm9vdEVsZW1lbnQpOgorCiAyMDExLTAxLTAzICBZaSBTaGVuICA8eWkuNC5zaGVuQG5va2lhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQko
cmV2aXNpb24gNzQ5NzMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDEwIEBACiAjaW1w
b3J0ICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgogCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmgiCisjaW1wb3J0IDxBcHBLaXQvTlNDb2xvci5oPgogI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XZWJGcmFtZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlldy5o
PgogCiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQpA
QCAtNDksMTQgKzUxLDE0IEBAIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNv
bnQKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3Vz
ZWRFbGVtZW50KCkKIHsKICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZSBjYWNoaW5nIGhl
cmUuCi0gICAgaWQgYWNjZXNzaWJpbGl0eU9iamVjdCA9IFtbW21haW5GcmFtZSBmcmFtZVZpZXdd
IGRvY3VtZW50Vmlld10gYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRdOworICAgIGlkIGFj
Y2Vzc2liaWxpdHlPYmplY3QgPSBbW21haW5GcmFtZSBhY2Nlc3NpYmlsaXR5Um9vdF0gYWNjZXNz
aWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRdOwogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50KGFjY2Vzc2liaWxpdHlPYmplY3QpOwogfQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgpCiB7CiAgICAgLy8gRklYTUU6IHdl
IGNvdWxkIGRvIHNvbWUgY2FjaGluZyBoZXJlLgotICAgIGlkIGFjY2Vzc2liaWxpdHlPYmplY3Qg
PSBbW21haW5GcmFtZSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgaWQgYWNjZXNzaWJp
bGl0eU9iamVjdCA9IFttYWluRnJhbWUgYWNjZXNzaWJpbGl0eVJvb3RdOwogICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KGFjY2Vzc2liaWxpdHlPYmplY3QpOwogfQogCkluZGV4OiBX
ZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gNzQ5NzMpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDEwMiBAQAorMjAxMS0wMS0wNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdLMjog
U3VwcG9ydCBBY2Nlc3NpYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MTg1OQorCisgICAgICAgIFN1cHBvcnQgV2ViS2l0MiBhY2Nlc3NpYmls
aXR5LiBUbyBkbyBzbywgaXQgd2FzIG5lY2Vzc2FyeSB0byBoYXZlCisgICAgICAgIGFuIEFjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3IGNsYXNzIHRoYXQgY291bGQgbWltaWMgd2hhdCB0aGUgcGxhdGZv
cm0gcHJvdmlkZWQgYmVmb3JlCisgICAgICAgIHdpdGggc2Nyb2xsIHZpZXdzLgorCisgICAgICAg
IFRlc3Q6IHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3dlYmtpdC1zY3JvbGxhcmVhLmh0bWwK
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgor
ICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJvb3RPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZSk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpo
YW5kbGVTY3JvbGxiYXJVcGRhdGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUltYWdlTWFwTGluay5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5SW1hZ2VNYXBMaW5rLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveE9wdGlvbi5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveE9wdGlvbi5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp1cGRhdGVD
aGlsZHJlbklmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmVsZW1lbnRBY2Nlc3NpYmlsaXR5SGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpheE9iamVjdENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OmZvY3VzZWRVSUVsZW1lbnQpOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0Ojppc1Njcm9sbFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6Y2FuU2V0TnVtZXJpY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnNjcm9sbEJhcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OnNldFZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6cGFyZW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2hpbGRyZW4pOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjplbGVtZW50UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpkb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpvcmllbnRhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjppc0VuYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6dmFsdWVGb3JSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpzZXRWYWx1ZSk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpzZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6Y2FuU2V0VmFsdWVBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6Y2FuU2V0TnVtZXJpY1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmlzQWNjZXNzaWJpbGl0eVNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpwYXJl
bnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6cm9s
ZVZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJp
bGl0eUlnbm9yZUF0dGFjaG1lbnQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyLm1tOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdKToKKyAgICAgICAgKC1bQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdF0pOgor
ICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBwb3NpdGlvbl0pOgorICAgICAg
ICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBzY3JvbGxWaWV3UGFyZW50XSk6CisgICAg
ICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZTpdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJp
bGl0eUhpdFRlc3Q6XSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFj
Y2Vzc2liaWxpdHlTZXRWYWx1ZTpmb3JBdHRyaWJ1dGU6XSk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpheE9iamVjdENhY2hlKToKKyAg
ICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZy
YW1lTG9hZGVyQ2xpZW50OjphY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KToKKyAgICAgICAgKiBs
b2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6On5GcmFtZVZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3OjpheE9iamVjdENhY2hlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmll
dy5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3OjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgICogcGxh
dGZvcm0vU2Nyb2xsYmFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6flNjcm9s
bGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXI6OmF4T2JqZWN0Q2FjaGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cm9sbGJhci5oOgorICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5oOgorICAgICAgICAoV2ViQ29y
ZTo6V2lkZ2V0OjpheE9iamVjdENhY2hlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3Lmg6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwOiBBZGRlZC4KKwogMjAxMS0wMS0wNCAgVG9ueSBHZW50
aWxjb3JlICA8dG9ueWdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQg
Zml4LgpJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTU3NSw2ICs1NzUsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAogICAgIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCisgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
U2Nyb2xsVmlldy5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3Bw
CiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCiAgICAgYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA3NDk3
MykKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTY2Miw2ICs2
NjIsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmggXAogCVdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyLmNwcCBcCiAJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlTY3JvbGxiYXIuaCBcCisJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3LmNwcCBcCisJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3LmggXAogCVdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcCBc
CiAJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuaCBcCiAJV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwIFwKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgko
cmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkp
CkBAIC0yODksNyArMjg5LDcgQEAgX19aTjdXZWJDb3JlMTJjcmVhdGVNYXJrdXBFUEtOU180Tm9k
ZUVOUwogX19aTjdXZWJDb3JlMTJjcmVhdGVNYXJrdXBFUEtOU181UmFuZ2VFUE4zV1RGNlZlY3Rv
cklQTlNfNE5vZGVFTG0wRUVFTlNfMjNFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZUViTlNfMTNFQWJz
b2x1dGVVUkxzRQogX19aTjdXZWJDb3JlMTJnY0NvbnRyb2xsZXJFdgogX19aTjdXZWJDb3JlMTJp
Y29uRGF0YWJhc2VFdgotX19aTjdXZWJDb3JlMTNBWE9iamVjdENhY2hlMTFnZXRPckNyZWF0ZUVQ
TlNfMTJSZW5kZXJPYmplY3RFCitfX1pON1dlYkNvcmUxM0FYT2JqZWN0Q2FjaGUxMHJvb3RPYmpl
Y3RFdgogX19aTjdXZWJDb3JlMTNBWE9iamVjdENhY2hlMjFnQWNjZXNzaWJpbGl0eUVuYWJsZWRF
CiBfX1pON1dlYkNvcmUxM0FYT2JqZWN0Q2FjaGU0MmdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2Vy
SW50ZXJmYWNlRW5hYmxlZEUKIF9fWk43V2ViQ29yZTEzSFRUUEhlYWRlck1hcEMxRXYKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBp
CShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkp
CkBAIC01MTgsNiArNTE4LDggQEAKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyLmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5U2Nyb2xsYmFyLmgnLAorICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNjcm9sbFZpZXcuY3BwJywKKyAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlTY3JvbGxWaWV3LmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNsaWRlci5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVNsaWRlci5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZS5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUucHJvCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTMyMSw2ICszMjEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAgXCAgICAKICAgICBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIFwgICAgCiAgICAgYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmNwcCBcCisgICAgYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAgXAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNsaWRlci5jcHAgXCAgICAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklB
R3JpZC5jcHAgXCAgICAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENl
bGwuY3BwIFwgICAgCkBAIC0xMzk4LDYgKzEzOTksNyBAQCBIRUFERVJTICs9IFwKICAgICBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5oIFwKICAgICBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCBcCiAgICAgYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmggXAorICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVNjcm9sbFZpZXcuaCBcCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmgg
XAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5oIFwKICAgICBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5oIFwKSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzc1NCw2ICsyMzc1
NCw2MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxhY2Nlc3NpYmlsaXR5XEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcCIKKwkJCQk+CisJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMy
IgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIi
CisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfTFRDR3xXaW4z
MiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxhY2Nlc3Np
YmlsaXR5XEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGFjY2Vzc2liaWxpdHlcQWNjZXNzaWJpbGl0eVNs
aWRlci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc0OTczKQorKysgV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTY5Myw2ICs2OTMsOCBAQAogCQkyNEY1NEVBRDEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRp
b25DYWNoZUhvc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTI1NDJGNERBMTE2NkMyNUEw
MEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyRjREODExNjZDMjVBMDBFODlBODYgLyogVXNl
ckdlc3R1cmVJbmRpY2F0b3IuY3BwICovOyB9OwogCQkyNTQyRjREQjExNjZDMjVBMDBFODlBODYg
LyogVXNlckdlc3R1cmVJbmRpY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI1NDJGNEQ5MTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUlu
ZGljYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTI5NDg5RkM3MTJDMDBGMDMwMEQ4M0YwRiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjk0ODlGQzUx
MkMwMEYwMzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggKi87IH07CisJCTI5
NDg5RkM4MTJDMDBGMDMwMEQ4M0YwRiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTQ4OUZDNjEyQzAw
RjAzMDBEODNGMEYgLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwICovOyB9OwogCQkyOUE4
MTIyNjBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUE4MTIwODBGQkI5
QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgKi87IH07CiAJCTI5
QTgxMjI3MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBODEyMDkwRkJCOUMxRDAw
NTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlUYWJsZS5jcHAgKi87IH07CiAJCTI5QTgxMjI4MEZCQjlD
MUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBODEyMEEwRkJCOUMxRDAwNTEwMjkzIC8q
IEFjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAgKi87IH07CkBAIC02OTk2LDYgKzY5OTgsOCBAQAog
CQkyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZUhvc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjU0MkY0RDgxMTY2QzI1QTAwRTg5QTg2IC8qIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMjU0MkY0RDkxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5NDg5RkM1MTJDMDBGMDMwMEQ4M0YwRiAvKiBB
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyOTQ4OUZDNjEyQzAwRjAzMDBEODNGMEYgLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNjcm9s
bFZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUE4MTIwODBGQkI5QzFE
MDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlBODEyMDkwRkJCOUMxRDAwNTEwMjkzIC8qIEFj
Y2Vzc2liaWxpdHlUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
OUE4MTIwQTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlBUklBR3JpZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjkzOCw2ICsxMjk0Miw4IEBACiAJ
CQkJQTQwOUM5ODMxMTZEMERERDAwNzE5N0JEIC8qIEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGlj
YXRvci5oICovLAogCQkJCTI5QTgxMjA4MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcCAqLywKIAkJCQkyOUE4MTIxQjBGQkI5QzFEMDA1MTAyOTMgLyogQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oICovLAorCQkJCTI5NDg5RkM2MTJDMDBGMDMwMEQ4M0Yw
RiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAgKi8sCisJCQkJMjk0ODlGQzUxMkMwMEYw
MzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggKi8sCiAJCQkJOTNDNEY2RTgx
MTA4RjlBNTAwOTlEMERCIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwICovLAogCQkJCTkz
QzRGNkU5MTEwOEY5QTUwMDk5RDBEQiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmggKi8sCiAJ
CQkJMDcwOUZDNEIxMDI1REVEODAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuY3BwICov
LApAQCAtMjIyNjUsNiArMjIyNzEsNyBAQAogCQkJCTkzRjE5OUVEMDgyNDVFNTkwMDFFOUFCQyAv
KiBYU0xUUHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAy
RUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0RENEQ4NzBG
REY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjk0ODlG
QzcxMkMwMEYwMzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3RUU2ODQ2MDEyRDI2RTM4MDBFNzk0MTUgLyogQXV0aGVudGljYXRpb25DRi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0VFNjg0NjExMkQyNkUzODAwRTc5NDE1IC8qIEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUU2ODQ2NDEyRDI2RTM4MDBF
Nzk0MTUgLyogQ29va2llU3RvcmFnZUNGTmV0LmggaW4gSGVhZGVycyAqLywKQEAgLTI0OTQzLDYg
KzI0OTUwLDcgQEAKIAkJCQk5M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nv
ckxpYnhzbHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5
IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0RENEQ4NjBGREY0
RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyOTQ4OUZD
ODEyQzAwRjAzMDBEODNGMEYgLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0VFNjg0NUYxMkQyNkUzODAwRTc5NDE1IC8qIEF1dGhlbnRpY2F0aW9uQ0Yu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0NjIxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tp
ZUphckNGTmV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFRTY4NDYzMTJEMjZFMzgwMEU3OTQx
NSAvKiBDb29raWVTdG9yYWdlQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NiArNDIsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmgiCiAjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3
LmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5oIgogI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlTbGlkZXIuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKQEAgLTQ5
LDYgKzUwLDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaCIKICNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuaCIKICNpbmNsdWRlICJBY2Nl
c3NpYmlsaXR5VGFibGVSb3cuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZv
Y3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEFyZWFF
bGVtZW50LmgiCkBAIC02MSwxMiArNjMsMTMgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCisjaW5jbHVk
ZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJUYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUg
IlJlbmRlclRhYmxlUm93LmgiCi0jaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKLSNpbmNsdWRl
ICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2Ny
b2xsVmlldy5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIApAQCAtNzcsOSArODAs
MTAgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIGJvb2wgQVhPYmplY3RDYWNoZTo6Z0Fj
Y2Vzc2liaWxpdHlFbmFibGVkID0gZmFsc2U7CiBib29sIEFYT2JqZWN0Q2FjaGU6OmdBY2Nlc3Np
YmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZCA9IGZhbHNlOwogCi1BWE9iamVjdENh
Y2hlOjpBWE9iamVjdENhY2hlKCkKK0FYT2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2FjaGUoY29uc3Qg
RG9jdW1lbnQqIGRvYykKICAgICA6IG1fbm90aWZpY2F0aW9uUG9zdFRpbWVyKHRoaXMsICZBWE9i
amVjdENhY2hlOjpub3RpZmljYXRpb25Qb3N0VGltZXJGaXJlZCkKIHsKKyAgICBtX2RvY3VtZW50
ID0gY29uc3RfY2FzdDxEb2N1bWVudCo+KGRvYyk7CiB9CiAKIEFYT2JqZWN0Q2FjaGU6On5BWE9i
amVjdENhY2hlKCkKQEAgLTE1MSwxOSArMTU1LDMwIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFY
T2JqZWN0Q2FjaGU6OmZvY3UKICAgICByZXR1cm4gb2JqOwogfQogCitBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCF3aWRn
ZXQpCisgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICBBWElEIGF4SUQgPSBtX3dpZGdl
dE9iamVjdE1hcHBpbmcuZ2V0KHdpZGdldCk7CisgICAgQVNTRVJUKCFIYXNoVHJhaXRzPEFYSUQ+
Ojppc0RlbGV0ZWRWYWx1ZShheElEKSk7CisgICAgaWYgKCFheElEKQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICByZXR1cm4gbV9vYmplY3RzLmdldChheElEKS5nZXQoKTsgICAgCit9Cisg
ICAgCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKIHsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gMDsKICAg
ICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSAwOwogICAgIEFYSUQgYXhJRCA9IG1f
cmVuZGVyT2JqZWN0TWFwcGluZy5nZXQocmVuZGVyZXIpOwogICAgIEFTU0VSVCghSGFzaFRyYWl0
czxBWElEPjo6aXNEZWxldGVkVmFsdWUoYXhJRCkpOwotCi0gICAgaWYgKGF4SUQpCi0gICAgICAg
IG9iaiA9IG1fb2JqZWN0cy5nZXQoYXhJRCkuZ2V0KCk7CisgICAgaWYgKCFheElEKQorICAgICAg
ICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4gb2JqOworICAgIHJldHVybiBtX29iamVjdHMu
Z2V0KGF4SUQpLmdldCgpOyAgICAKIH0KIAogLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgYmVsb25n
cyBvbiBOb2RlLgpAQCAtMjMwLDYgKzI0NSwyOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3Np
YmlsaXR5T2JqZWN0PiBjCiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNy
ZWF0ZShyZW5kZXJlcik7CiB9CiAKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6
OmdldE9yQ3JlYXRlKFdpZGdldCogd2lkZ2V0KQoreworICAgIGlmICghd2lkZ2V0KQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBnZXQod2lk
Z2V0KSkKKyAgICAgICAgcmV0dXJuIG9iajsKKyAgICAKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0
eU9iamVjdD4gbmV3T2JqID0gMDsKKyAgICBpZiAod2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAg
ICAgICBuZXdPYmogPSBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6Y3JlYXRlKHN0YXRpY19jYXN0
PFNjcm9sbFZpZXcqPih3aWRnZXQpKTsKKyAgICBlbHNlIGlmICh3aWRnZXQtPmlzU2Nyb2xsYmFy
KCkpCisgICAgICAgIG5ld09iaiA9IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmNyZWF0ZShzdGF0
aWNfY2FzdDxTY3JvbGxiYXIqPih3aWRnZXQpKTsKKyAgICAgICAgCisgICAgZ2V0QVhJRChuZXdP
YmouZ2V0KCkpOworICAgIAorICAgIG1fd2lkZ2V0T2JqZWN0TWFwcGluZy5zZXQod2lkZ2V0LCBu
ZXdPYmotPmF4T2JqZWN0SUQoKSk7CisgICAgbV9vYmplY3RzLnNldChuZXdPYmotPmF4T2JqZWN0
SUQoKSwgbmV3T2JqKTsgICAgCisgICAgYXR0YWNoV3JhcHBlcihuZXdPYmouZ2V0KCkpOworICAg
IHJldHVybiBuZXdPYmouZ2V0KCk7Cit9CisgICAgCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9i
amVjdENhY2hlOjpnZXRPckNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAgIGlm
ICghcmVuZGVyZXIpCkBAIC0yNDcsNiArMjg0LDExIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFY
T2JqZWN0Q2FjaGU6OmdldE8KICAgICBhdHRhY2hXcmFwcGVyKG5ld09iai5nZXQoKSk7CiAgICAg
cmV0dXJuIG5ld09iai5nZXQoKTsKIH0KKyAgICAKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2Jq
ZWN0Q2FjaGU6OnJvb3RPYmplY3QoKQoreworICAgIHJldHVybiBnZXRPckNyZWF0ZShtX2RvY3Vt
ZW50LT52aWV3KCkpOworfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpn
ZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSByb2xlKQogewpAQCAtMjc1LDkgKzMxNyw2IEBA
IEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE8KICAgICBjYXNlIE1lbnVM
aXN0T3B0aW9uUm9sZToKICAgICAgICAgb2JqID0gQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9u
OjpjcmVhdGUoKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTY3JvbGxCYXJSb2xlOgotICAg
ICAgICBvYmogPSBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpjcmVhdGUoKTsKLSAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgb2JqID0gMDsKICAgICB9CkBAIC0zMjMsNiArMzYy
LDE3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cmVtb3ZlKFJlbmRlck9iamVjdCoKICAgICBtX3Jl
bmRlck9iamVjdE1hcHBpbmcucmVtb3ZlKHJlbmRlcmVyKTsKIH0KIAordm9pZCBBWE9iamVjdENh
Y2hlOjpyZW1vdmUoV2lkZ2V0KiB2aWV3KQoreworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBBWElEIGF4SUQgPSBtX3dpZGdldE9iamVjdE1hcHBpbmcuZ2V0
KHZpZXcpOworICAgIHJlbW92ZShheElEKTsKKyAgICBtX3dpZGdldE9iamVjdE1hcHBpbmcucmVt
b3ZlKHZpZXcpOworfQorICAgIAorICAgIAogI2lmICFQTEFURk9STShXSU4pIHx8IE9TKFdJTkNF
KQogQVhJRCBBWE9iamVjdENhY2hlOjpwbGF0Zm9ybUdlbmVyYXRlQVhJRCgpIGNvbnN0CiB7CkBA
IC00NzgsNiArNTI4LDE4IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6bm9kZVRleHRDaGFuZ2VOb3Rp
ZmkKICNlbmRpZgogCiAjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQorCit2b2lkIEFYT2JqZWN0Q2Fj
aGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KiB2aWV3KQoreworICAgIGlmICgh
dmlldykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY3Jl
YXRlIGEgc2Nyb2xsIHZpZXcgZnJvbSB0aGlzIG1ldGhvZCwgb25seSB1cGRhdGUgYW4gZXhpc3Rp
bmcgb25lLgorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbFZpZXdPYmplY3QgPSBnZXQo
dmlldyk7CisgICAgaWYgKHNjcm9sbFZpZXdPYmplY3QpCisgICAgICAgIHNjcm9sbFZpZXdPYmpl
Y3QtPnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKK30KKyAgICAKIHZvaWQgQVhPYmplY3RD
YWNoZTo6aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlKFJlbmRlck9iamVjdCAqcmVuZGVyZXIpCiB7
CiAgICAgaWYgKCFyZW5kZXJlcikKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwxMSArNDIsMTQgQEAgY2xhc3MgV2ViQ29yZVRl
eHRNYXJrZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRG9jdW1lbnQ7CiBjbGFz
cyBIVE1MQXJlYUVsZW1lbnQ7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKIGNsYXNzIFJlbmRl
ck9iamVjdDsKK2NsYXNzIFNjcm9sbFZpZXc7CiBjbGFzcyBWaXNpYmxlUG9zaXRpb247CitjbGFz
cyBXaWRnZXQ7CiAKIHN0cnVjdCBUZXh0TWFya2VyRGF0YSB7CiAgICAgQVhJRCBheElEOwpAQCAt
NTksMTQgKzYyLDE3IEBAIGVudW0gUG9zdFR5cGUgeyBQb3N0U3luY2hyb25vdXNseSwgUG9zdEEK
IAogY2xhc3MgQVhPYmplY3RDYWNoZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0g
ICAgQVhPYmplY3RDYWNoZSgpOworICAgIEFYT2JqZWN0Q2FjaGUoY29uc3QgRG9jdW1lbnQqKTsK
ICAgICB+QVhPYmplY3RDYWNoZSgpOwogCiAgICAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGZvY3VzZWRVSUVsZW1lbnRGb3JQYWdlKGNvbnN0IFBhZ2UqKTsKIAotICAgIC8vIHRvIGJlIHVz
ZWQgd2l0aCByZW5kZXIgb2JqZWN0cwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3Jl
YXRlKFJlbmRlck9iamVjdCopOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvb3RPYmplY3Qo
KTsKICAgICAKKyAgICAvLyBGb3IgQVggb2JqZWN0cyB3aXRoIGVsZW1lbnRzIHRoYXQgYmFjayB0
aGVtLgorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKFJlbmRlck9iamVjdCop
OworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKFdpZGdldCopOworCiAgICAg
Ly8gdXNlZCBmb3Igb2JqZWN0cyB3aXRob3V0IGJhY2tpbmcgZWxlbWVudHMKICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBnZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSk7CiAgICAgCkBAIC03
NCw2ICs4MCw3IEBAIHB1YmxpYzoKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXQoUmVuZGVy
T2JqZWN0Kik7CiAgICAgCiAgICAgdm9pZCByZW1vdmUoUmVuZGVyT2JqZWN0Kik7CisgICAgdm9p
ZCByZW1vdmUoV2lkZ2V0Kik7CiAgICAgdm9pZCByZW1vdmUoQVhJRCk7CiAKICAgICB2b2lkIGRl
dGFjaFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdCopOwpAQCAtODgsNiArOTUsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBoYW5kbGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZChSZW5kZXJPYmplY3Qq
IG9sZEZvY3VzZWRSZW5kZXJlciwgUmVuZGVyT2JqZWN0KiBuZXdGb2N1c2VkUmVuZGVyZXIpOwog
ICAgIHZvaWQgaGFuZGxlU2Nyb2xsZWRUb0FuY2hvcihjb25zdCBOb2RlKiBhbmNob3JOb2RlKTsK
ICAgICB2b2lkIGhhbmRsZUFyaWFFeHBhbmRlZENoYW5nZShSZW5kZXJPYmplY3QqKTsKKyAgICB2
b2lkIGhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3Kik7CiAgICAgCiAgICAgc3RhdGlj
IHZvaWQgZW5hYmxlQWNjZXNzaWJpbGl0eSgpIHsgZ0FjY2Vzc2liaWxpdHlFbmFibGVkID0gdHJ1
ZTsgfQogICAgIHN0YXRpYyB2b2lkIGVuYWJsZUVuaGFuY2VkVXNlckludGVyZmFjZUFjY2Vzc2li
aWxpdHkoKSB7IGdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZCA9IHRy
dWU7IH0KQEAgLTE0NSw4ICsxNTMsMTAgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgbm9kZVRleHRD
aGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhUZXh0Q2hh
bmdlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KTsKIAogcHJpdmF0ZToKKyAgICBE
b2N1bWVudCogbV9kb2N1bWVudDsKICAgICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmls
aXR5T2JqZWN0PiA+IG1fb2JqZWN0czsKICAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIEFYSUQ+
IG1fcmVuZGVyT2JqZWN0TWFwcGluZzsKKyAgICBIYXNoTWFwPFdpZGdldCosIEFYSUQ+IG1fd2lk
Z2V0T2JqZWN0TWFwcGluZzsKICAgICBIYXNoU2V0PE5vZGUqPiBtX3RleHRNYXJrZXJOb2RlczsK
ICAgICBzdGF0aWMgYm9vbCBnQWNjZXNzaWJpbGl0eUVuYWJsZWQ7CiAgICAgc3RhdGljIGJvb2wg
Z0FjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkOwpAQCAtMTYwLDYgKzE3
MCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZvY3VzZWRJ
bWFnZU1hcFVJRWxlbWVudChIVE1MQXJlYUVsZW1lbnQqKTsKICAgICAKICAgICBBWElEIGdldEFY
SUQoQWNjZXNzaWJpbGl0eU9iamVjdCopOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldChX
aWRnZXQqKTsKIH07CiAKIGJvb2wgbm9kZUhhc1JvbGUoTm9kZSosIGNvbnN0IFN0cmluZyYgcm9s
ZSk7CkBAIC0xNzksNiArMTkwLDcgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxl
Rm9jdXNlZAogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlU2Nyb2xsZWRUb0FuY2hv
cihjb25zdCBOb2RlKikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpjb250ZW50Q2hh
bmdlZChSZW5kZXJPYmplY3QqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRs
ZUFyaWFFeHBhbmRlZENoYW5nZShSZW5kZXJPYmplY3QqKSB7IH0KK2lubGluZSB2b2lkIEFYT2Jq
ZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KikgeyB9CiAjZW5kaWYK
IAogfQpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdy
aWQuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUFSSUFHcmlkLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHJpdmF0ZToK
ICAgICAvLyBBUklBIHRyZWVncmlkcyBhbmQgZ3JpZHMgc3VwcG9ydCBzZWxlY3RlZCByb3dzLgog
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NlbGVjdGVkUm93cygpIHsgcmV0dXJuIHRydWU7IH0g
ICAgCiAKLSAgICB2b2lkIGFkZENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwgSGFz
aFNldDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVt
bkNvdW50KTsKKyAgICB2b2lkIGFkZENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBIYXNoU2V0
PEFjY2Vzc2liaWxpdHlPYmplY3QqPiYgYXBwZW5kZWRSb3dzLCB1bnNpZ25lZCYgY29sdW1uQ291
bnQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKSW5kZXg6IFdlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5QWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QWxsSW5PbmUuY3BwCShyZXZpc2lvbiA3NDk3MykK
KysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QWxsSW5PbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8QWNjZXNzaWJpbGl0eU1lZGlh
Q29udHJvbHMuY3BwPgogI2luY2x1ZGUgPEFjY2Vzc2liaWxpdHlPYmplY3QuY3BwPgogI2luY2x1
ZGUgPEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwPgorI2luY2x1ZGUgPEFjY2Vzc2liaWxp
dHlTY3JvbGxWaWV3LmNwcD4KICNpbmNsdWRlIDxBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmNwcD4K
ICNpbmNsdWRlIDxBY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcD4KICNpbmNsdWRlIDxBY2Nlc3NpYmls
aXR5VGFibGUuY3BwPgpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJ
bWFnZU1hcExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNiwxMSArMTM2LDYgQEAgSW50UmVjdCBBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rOjpl
bGVtZQogICAgIHJldHVybiBtX2FyZWFFbGVtZW50LT5nZXRSZWN0KHJlbmRlcmVyKTsKIH0KICAg
ICAKLUludFNpemUgQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluazo6c2l6ZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGVsZW1lbnRSZWN0KCkuc2l6ZSgpOwotfQotCiBTdHJpbmcgQWNjZXNzaWJpbGl0
eUltYWdlTWFwTGluazo6c3RyaW5nVmFsdWVGb3JNU0FBKCkgY29uc3QKIHsKICAgICByZXR1cm4g
dXJsKCk7CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFw
TGluay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
SW1hZ2VNYXBMaW5rLmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgs
NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nVmFsdWVGb3JNU0FBKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgbmFtZUZvck1TQUEoKSBjb25zdDsKIAotICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRSZWN0IGVsZW1lbnRSZWN0
KCkgY29uc3Q7CiAKIHByaXZhdGU6ICAgIApJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCShyZXZpc2lvbiA3NDk3MykK
KysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1MiwxMSArMTUyLDYgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlM
aXN0Qm94T3B0aW9uOjpzdHJpbgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotSW50U2l6ZSBB
Y2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGVs
ZW1lbnRSZWN0KCkuc2l6ZSgpOwotfQotCiBFbGVtZW50KiBBY2Nlc3NpYmlsaXR5TGlzdEJveE9w
dGlvbjo6YWN0aW9uRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fb3B0aW9uRWxlbWVu
dDsKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlz
dEJveE9wdGlvbi5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUoKSBj
b25zdDsKIAogICAgIHZpcnR1YWwgSW50UmVjdCBlbGVtZW50UmVjdCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBwYXJlbnRPYmplY3QoKSBjb25zdDsKICAgICBib29sIGlzTGlzdEJveE9wdGlvbigpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAKQEAgLTcyLDcgKzcxLDcgQEAgcHJpdmF0ZToKICAg
ICBIVE1MU2VsZWN0RWxlbWVudCogbGlzdEJveE9wdGlvblBhcmVudE5vZGUoKSBjb25zdDsKICAg
ICBpbnQgbGlzdEJveE9wdGlvbkluZGV4KCkgY29uc3Q7CiAgICAgSW50UmVjdCBsaXN0Qm94T3B0
aW9uUmVjdCgpIGNvbnN0OwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxpc3RCb3hPcHRpb25B
Y2Nlc3NpYmlsaXR5T2JqZWN0KEhUTUxFbGVtZW50KiBlbGVtZW50KSBjb25zdDsKKyAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBsaXN0Qm94T3B0aW9uQWNjZXNzaWJpbGl0eU9iamVjdChIVE1MRWxl
bWVudCopIGNvbnN0OwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUgCkluZGV4OiBX
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lv
biA3NDk3MykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzMwLDYgKzczMCwxMiBAQCBGcmFtZVZpZXcqIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OmRvY3VtZW50CiAKICAgICByZXR1cm4gb2JqZWN0LT5kb2N1bWVudEZyYW1l
VmlldygpOwogfQorICAgIAordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp1cGRhdGVDaGlsZHJl
bklmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAoIWhhc0NoaWxkcmVuKCkpCisgICAgICAgIGFkZENo
aWxkcmVuKCk7ICAgIAorfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNsZWFyQ2hpbGRy
ZW4oKQogewpAQCAtMTAwMSw2ICsxMDA3LDM5IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6
c3VwcG9ydHNBUklBTGkKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxpdmVSZWdpb24gPSBhcmlh
TGl2ZVJlZ2lvblN0YXR1cygpOwogICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShsaXZlUmVn
aW9uLCAicG9saXRlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobGl2ZVJlZ2lvbiwgImFzc2VydGl2
ZSIpOwogfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjplbGVt
ZW50QWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreyAK
KyAgICAvLyBTZW5kIHRoZSBoaXQgdGVzdCBiYWNrIGludG8gdGhlIHN1Yi1mcmFtZSBpZiBuZWNl
c3NhcnkuCisgICAgaWYgKGlzQXR0YWNobWVudCgpKSB7CisgICAgICAgIFdpZGdldCogd2lkZ2V0
ID0gd2lkZ2V0Rm9yQXR0YWNobWVudFZpZXcoKTsKKyAgICAgICAgaWYgKHdpZGdldCAmJiB3aWRn
ZXQtPmlzRnJhbWVWaWV3KCkpCisgICAgICAgICAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5n
ZXRPckNyZWF0ZShzdGF0aWNfY2FzdDxTY3JvbGxWaWV3Kj4od2lkZ2V0KSktPmFjY2Vzc2liaWxp
dHlIaXRUZXN0KHBvaW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gY29uc3RfY2FzdDxBY2Nlc3Np
YmlsaXR5T2JqZWN0Kj4odGhpcyk7IAorfQorICAgIAorQVhPYmplY3RDYWNoZSogQWNjZXNzaWJp
bGl0eU9iamVjdDo6YXhPYmplY3RDYWNoZSgpIGNvbnN0Cit7CisgICAgRG9jdW1lbnQqIGRvYyA9
IGRvY3VtZW50KCk7CisgICAgaWYgKGRvYykKKyAgICAgICAgcmV0dXJuIGRvYy0+YXhPYmplY3RD
YWNoZSgpOworICAgIHJldHVybiAwOworfQorICAgIAorQWNjZXNzaWJpbGl0eU9iamVjdCogQWNj
ZXNzaWJpbGl0eU9iamVjdDo6Zm9jdXNlZFVJRWxlbWVudCgpIGNvbnN0Cit7CisgICAgRG9jdW1l
bnQqIGRvYyA9IGRvY3VtZW50KCk7CisgICAgaWYgKCFkb2MpCisgICAgICAgIHJldHVybiAwOwor
ICAgIAorICAgIFBhZ2UqIHBhZ2UgPSBkb2MtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAg
ICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBBWE9iamVjdENhY2hlOjpmb2N1c2VkVUlF
bGVtZW50Rm9yUGFnZShwYWdlKTsKK30KICAgICAKIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpjaGVja2JveE9yUmFkaW9WYWx1ZSgpIGNvbnN0CiB7CkluZGV4
OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHJldmlzaW9u
IDc0OTczKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYwLDYgKzI2MCw4IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0
dWFsIGJvb2wgaXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xs
VmlldygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgCiAgICAgdmlydHVhbCBib29sIGlz
QW5jaG9yKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNBdHRh
Y2htZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNIZWFk
aW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTMwOSw2ICszMTEsNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0J1dHRvbigpIGNvbnN0IHsgcmV0dXJuIHJvbGVWYWx1ZSgpID09IEJ1dHRv
blJvbGU7IH0KICAgICBib29sIGlzTGlzdEl0ZW0oKSBjb25zdCB7IHJldHVybiByb2xlVmFsdWUo
KSA9PSBMaXN0SXRlbVJvbGU7IH0KICAgICBib29sIGlzQ2hlY2tib3hPclJhZGlvKCkgY29uc3Qg
eyByZXR1cm4gaXNDaGVja2JveCgpIHx8IGlzUmFkaW9CdXR0b24oKTsgfQorICAgIGJvb2wgaXNT
Y3JvbGxWaWV3KCkgY29uc3QgeyByZXR1cm4gcm9sZVZhbHVlKCkgPT0gU2Nyb2xsQXJlYVJvbGU7
IH0KICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2VkKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KQEAgLTMzMiw2ICszMzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNhblNldEZv
Y3VzQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
Y2FuU2V0VGV4dFJhbmdlQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGNhblNldFZhbHVlQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0TnVtZXJpY1ZhbHVlKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRTZWxlY3RlZENoaWxk
cmVuQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
Y2FuU2V0RXhwYW5kZWRBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMzcz
LDkgKzM3Nyw5IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsZWQgb24gdGhlIHJvb3QgQVggb2JqZWN0
IHRvIHJldHVybiB0aGUgZGVlcGVzdCBhdmFpbGFibGUgZWxlbWVudC4KICAgICB2aXJ0dWFsIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50Jikg
Y29uc3QgeyByZXR1cm4gMDsgfQogICAgIC8vIENhbGxlZCBvbiB0aGUgQVggb2JqZWN0IGFmdGVy
IHRoZSByZW5kZXIgdHJlZSBkZXRlcm1pbmVzIHdoaWNoIGlzIHRoZSByaWdodCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LgotICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogZWxlbWVu
dEFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50JikgY29uc3QgeyByZXR1cm4gY29u
c3RfY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4odGhpcyk7IH0KKyAgICB2aXJ0dWFsIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGVsZW1lbnRBY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2lu
dCYpIGNvbnN0OwogCi0gICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBmb2N1c2VkVUlF
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9i
amVjdCogZm9jdXNlZFVJRWxlbWVudCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwg
QWNjZXNzaWJpbGl0eU9iamVjdCogbGFzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gMDsgfQpAQCAt
MzkxLDcgKzM5NSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IHRpdGxlVUlFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgYm9vbCBl
eHBvc2VzVGl0bGVVSUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVh
bCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JyZXNwb25kaW5nQ29udHJvbEZvckxhYmVsRWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVj
dCogc2Nyb2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbikgY29uc3QgeyByZXR1cm4gMDsg
fQorICAgIAogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUgYXJpYVJvbGVBdHRyaWJ1dGUo
KSBjb25zdCB7IHJldHVybiBVbmtub3duUm9sZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1ByZXNl
bnRhdGlvbmFsQ2hpbGRPZkFyaWFSb2xlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgYXJpYVJvbGVIYXNQcmVzZW50YXRpb25hbENoaWxkcmVuKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KQEAgLTQwMiw3ICs0MDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBT
dHJpbmcgYXJpYURlc2NyaWJlZEJ5QXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7
IH0KICAgICB2aXJ0dWFsIFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdCB7
IHJldHVybiBTdHJpbmcoKTsgfQogCi0gICAgdmlydHVhbCBBWE9iamVjdENhY2hlKiBheE9iamVj
dENhY2hlKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgQVhPYmplY3RDYWNoZSog
YXhPYmplY3RDYWNoZSgpIGNvbnN0OwogICAgIEFYSUQgYXhPYmplY3RJRCgpIGNvbnN0IHsgcmV0
dXJuIG1faWQ7IH0KICAgICB2b2lkIHNldEFYT2JqZWN0SUQoQVhJRCBheE9iamVjdElEKSB7IG1f
aWQgPSBheE9iamVjdElEOyB9CiAgICAgCkBAIC00MTEsNyArNDE2LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgRWxlbWVudCogYWN0aW9uRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAg
ICB2aXJ0dWFsIEludFJlY3QgYm91bmRpbmdCb3hSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVj
dCgpOyB9CiAgICAgdmlydHVhbCBJbnRSZWN0IGVsZW1lbnRSZWN0KCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBz
aXplKCkgY29uc3QgeyByZXR1cm4gZWxlbWVudFJlY3QoKS5zaXplKCk7IH0KICAgICB2aXJ0dWFs
IEludFBvaW50IGNsaWNrUG9pbnQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgUGxhaW5UZXh0UmFu
Z2Ugc2VsZWN0ZWRUZXh0UmFuZ2UoKSBjb25zdCB7IHJldHVybiBQbGFpblRleHRSYW5nZSgpOyB9
CkBAIC00NDIsNiArNDQ3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rl
ZFRleHQoY29uc3QgU3RyaW5nJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkVGV4
dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFZh
bHVlKGNvbnN0IFN0cmluZyYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShmbG9hdCkg
eyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkKGJvb2wpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBzZXRTZWxlY3RlZFJvd3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgeyB9CiAg
ICAgCkBAIC00NTksNyArNDY1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGls
ZHJlbigpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGhhc0NoaWxkcmVuKCkgY29uc3QgeyByZXR1
cm4gbV9oYXZlQ2hpbGRyZW47IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2hpbGRyZW5JZk5l
Y2Vzc2FyeSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5
KCk7CiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdGVkQ2hpbGRyZW4oQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHZpc2libGVDaGlsZHJlbihBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdGFiQ2hpbGRyZW4o
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgeyB9CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA3
NDk3MykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDcgKzQzNCwxNSBAQCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAgICAgICAgICAgICByZXR1cm4gcGFyZW50OwogICAg
IH0KICAgICAKLSAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZW5kZXJQ
YXJlbnRPYmplY3QoKSk7CisgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRPYmogPSByZW5kZXJQYXJl
bnRPYmplY3QoKTsKKyAgICBpZiAocGFyZW50T2JqKQorICAgICAgICByZXR1cm4gYXhPYmplY3RD
YWNoZSgpLT5nZXRPckNyZWF0ZShwYXJlbnRPYmopOworICAgIAorICAgIC8vIFdlYkFyZWEncyBw
YXJlbnQgc2hvdWxkIGJlIHRoZSBzY3JvbGwgdmlldyBjb250YWluaW5nIGl0LgorICAgIGlmIChp
c1dlYkFyZWEoKSkKKyAgICAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUo
bV9yZW5kZXJlci0+ZnJhbWUoKS0+dmlldygpKTsKKyAgICAKKyAgICByZXR1cm4gMDsKIH0KIAog
Ym9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1dlYkFyZWEoKSBjb25zdApAQCAtMjMx
NiwxMiArMjMyNCw2IEBAIFdpZGdldCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6d2lkZ2UK
ICAgICByZXR1cm4gdG9SZW5kZXJXaWRnZXQobV9yZW5kZXJlciktPndpZGdldCgpOwogfQogCi1B
WE9iamVjdENhY2hlKiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpheE9iamVjdENhY2hlKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQobV9yZW5kZXJlcik7Ci0gICAgcmV0dXJuIG1fcmVuZGVyZXIt
PmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKTsKLX0KLQogQWNjZXNzaWJpbGl0eU9iamVjdCog
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eVBhcmVudEZvckltYWdlTWFw
KEhUTUxNYXBFbGVtZW50KiBtYXApIGNvbnN0CiB7CiAgICAgLy8gZmluZCBhbiBpbWFnZSB0aGF0
IGlzIHVzaW5nIHRoaXMgbWFwCkBAIC0yNzM5LDggKzI3NDEsNyBAQCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAgICAgCiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0g
dG9SZW5kZXJCb3gobV9yZW5kZXJlciktPmxheWVyKCk7CiAgICAgIAotICAgIEhpdFRlc3RSZXF1
ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUpOworICAgIEhpdFRlc3RSZXF1ZXN0IHJl
cXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSk7
CiAgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0ID0gSGl0VGVzdFJlc3VsdChwb2ludCk7
CiAgICAgbGF5ZXItPmhpdFRlc3QocmVxdWVzdCwgaGl0VGVzdFJlc3VsdCk7CiAgICAgaWYgKCFo
aXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpKQpAQCAtMjc3NSwxNSArMjc3Niw2IEBAIEFjY2Vzc2li
aWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXIKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1BY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpmb2N1c2Vk
VUlFbGVtZW50KCkgY29uc3QKLXsKLSAgICBQYWdlKiBwYWdlID0gbV9yZW5kZXJlci0+ZG9jdW1l
bnQoKS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBy
ZXR1cm4gQVhPYmplY3RDYWNoZTo6Zm9jdXNlZFVJRWxlbWVudEZvclBhZ2UocGFnZSk7Ci19Ci0K
IGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2hvdWxkRm9jdXNBY3RpdmVEZXNjZW5k
YW50KCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGFyaWFSb2xlQXR0cmlidXRlKCkpIHsKQEAgLTMz
MTUsOCArMzMwNyw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dXBkYXRlQ2gK
ICAgICBpZiAobmVlZHNUb1VwZGF0ZUNoaWxkcmVuKCkpCiAgICAgICAgIGNsZWFyQ2hpbGRyZW4o
KTsgICAgICAgIAogICAgIAotICAgIGlmICghaGFzQ2hpbGRyZW4oKSkKLSAgICAgICAgYWRkQ2hp
bGRyZW4oKTsgICAgCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6dXBkYXRlQ2hpbGRyZW5JZk5l
Y2Vzc2FyeSgpOwogfQogICAgIAogY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yJiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjaGlsZHJlbigp
CkBAIC0zMzU1LDYgKzMzNDYsMTMgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojph
ZGRDaGlsZAogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIC8vIEZyYW1lVmlldydzIG5lZWQg
dG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgQVggaGllcmFyY2h5IHdoZW4gZW5jb3VudGVyZWQuCisg
ICAgaWYgKGlzQXR0YWNobWVudCgpKSB7CisgICAgICAgIFdpZGdldCogd2lkZ2V0ID0gd2lkZ2V0
Rm9yQXR0YWNobWVudFZpZXcoKTsKKyAgICAgICAgaWYgKHdpZGdldCAmJiB3aWRnZXQtPmlzRnJh
bWVWaWV3KCkpCisgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChheE9iamVjdENhY2hlKCkt
PmdldE9yQ3JlYXRlKHdpZGdldCkpOworICAgIH0KKyAgICAKICAgICAvLyBmb3IgYSBSZW5kZXJJ
bWFnZSwgYWRkIHRoZSA8YXJlYT4gZWxlbWVudHMgYXMgaW5kaXZpZHVhbCBhY2Nlc3NpYmlsaXR5
IG9iamVjdHMKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY3NzQm94ID0gcmVuZGVyQm94TW9k
ZWxPYmplY3QoKTsKICAgICBpZiAoY3NzQm94ICYmIGNzc0JveC0+aXNSZW5kZXJJbWFnZSgpKSB7
CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw2IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBsYXlvdXRDb3VudCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgZG91YmxlIGVzdGltYXRlZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0OwogICAgIAotICAgIHZp
cnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogZm9jdXNlZFVJRWxlbWVudCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogbGFzdENoaWxkKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdDsKQEAgLTE0Nyw4
ICsxNDYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGFyaWFSb2xlSGFzUHJlc2VudGF0
aW9uYWxDaGlsZHJlbigpIGNvbnN0OwogICAgIHZvaWQgdXBkYXRlQWNjZXNzaWJpbGl0eVJvbGUo
KTsKICAgICAKLSAgICB2aXJ0dWFsIEFYT2JqZWN0Q2FjaGUqIGF4T2JqZWN0Q2FjaGUoKSBjb25z
dDsKLQogICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgb24gdGhlIHJvb3QgYWNjZXNzaWJpbGl0eSBv
YmplY3QgdG8ga2ljayBvZmYgYSBoaXQgdGVzdC4KICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlP
YmplY3QqIGFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAKQEAg
LTI5MCw3ICsyODcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRkUmFkaW9CdXR0b25Hcm91cE1l
bWJlcnMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBsaW5rZWRVSUVsZW1lbnRzKSBjb25z
dDsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBpbnRlcm5hbExpbmtFbGVtZW50KCkgY29uc3Q7
CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdChI
VE1MQXJlYUVsZW1lbnQqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwotICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGFjY2Vzc2liaWxpdHlQYXJlbnRGb3JJbWFnZU1hcChIVE1MTWFwRWxlbWVudCog
bWFwKSBjb25zdDsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5UGFyZW50
Rm9ySW1hZ2VNYXAoSFRNTE1hcEVsZW1lbnQqKSBjb25zdDsKICAgICBib29sIHJlbmRlck9iamVj
dElzT2JzZXJ2YWJsZShSZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlclBhcmVudE9iamVjdCgpIGNvbnN0OwogICAgIApAQCAtMzAwLDcgKzI5Nyw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzZXRFbGVtZW50QXR0cmlidXRlVmFsdWUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIGJvb2wpOwogICAgIAogICAgIFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25Gb3JF
bGVtZW50cyhWZWN0b3I8RWxlbWVudCo+ICZlbGVtZW50cykgY29uc3Q7Ci0gICAgdm9pZCBlbGVt
ZW50c0Zyb21BdHRyaWJ1dGUoVmVjdG9yPEVsZW1lbnQqPiYgZWxlbWVudHMsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUpIGNvbnN0OworICAgIHZvaWQgZWxlbWVudHNGcm9tQXR0cmlidXRlKFZl
Y3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CiAg
ICAgU3RyaW5nIGFyaWFBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdDsKICAgICAKICAg
ICB2aXJ0dWFsIEVTcGVhayBzcGVha1Byb3BlcnR5KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmgiCisKKyNpbmNsdWRlICJBWE9i
amVjdENhY2hlLmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5oIgorI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlJlbmRlclBhcnQuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICAKK0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3OjpBY2Nlc3NpYmlsaXR5
U2Nyb2xsVmlldyhTY3JvbGxWaWV3KiB2aWV3KQorICAgIDogbV9zY3JvbGxWaWV3KHZpZXcpCit7
Cit9CisKK1Bhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+IEFjY2Vzc2liaWxpdHlT
Y3JvbGxWaWV3OjpjcmVhdGUoU2Nyb2xsVmlldyogdmlldykKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KHZpZXcpKTsKK30KKyAgICAKK0FjY2Vzc2li
aWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3OjpzY3JvbGxCYXIoQWNjZXNzaWJp
bGl0eU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIHN3aXRjaCAob3JpZW50
YXRpb24pIHsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvblZlcnRpY2FsOgorICAg
ICAgICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhciA/IG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0
KCkgOiAwOworICAgIGNhc2UgQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uSG9yaXpvbnRhbDoKKyAg
ICAgICAgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRhbFNjcm9sbGJh
ci5nZXQoKSA6IDA7CisgICAgfQorICAgIAorICAgIHJldHVybiAwOworfQorCitjb25zdCBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIEFjY2Vzc2liaWxp
dHlTY3JvbGxWaWV3OjpjaGlsZHJlbigpCit7CisgICAgaWYgKCFtX2hhdmVDaGlsZHJlbikKKyAg
ICAgICAgYWRkQ2hpbGRyZW4oKTsKKyAgICByZXR1cm4gbV9jaGlsZHJlbjsKK30KKyAgICAKK3Zv
aWQgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6OnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKQor
eworICAgIGlmIChtX3Njcm9sbFZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhbV9ob3Jp
em9udGFsU2Nyb2xsYmFyKQorICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXIgPSBhZGRDaGls
ZFNjcm9sbGJhcihtX3Njcm9sbFZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKSk7CisgICAgZWxz
ZSBpZiAoIW1fc2Nyb2xsVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpICYmIG1faG9yaXpvbnRh
bFNjcm9sbGJhcikgeworICAgICAgICByZW1vdmVDaGlsZFNjcm9sbGJhcihtX2hvcml6b250YWxT
Y3JvbGxiYXIuZ2V0KCkpOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXIgPSAwOworICAg
IH0KKworICAgIGlmIChtX3Njcm9sbFZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIW1fdmVy
dGljYWxTY3JvbGxiYXIpCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBhZGRDaGlsZFNj
cm9sbGJhcihtX3Njcm9sbFZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgIGVsc2UgaWYg
KCFtX3Njcm9sbFZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgbV92ZXJ0aWNhbFNjcm9sbGJh
cikgeworICAgICAgICByZW1vdmVDaGlsZFNjcm9sbGJhcihtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdl
dCgpKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IDA7CisgICAgfQorfQorICAgIAor
dm9pZCBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6cmVtb3ZlQ2hpbGRTY3JvbGxiYXIoQWNjZXNz
aWJpbGl0eU9iamVjdCogc2Nyb2xsYmFyKQoreworICAgIHNpemVfdCBwb3MgPSBtX2NoaWxkcmVu
LmZpbmQoc2Nyb2xsYmFyKTsKKyAgICBpZiAocG9zICE9IFdURjo6bm90Rm91bmQpCisgICAgICAg
IG1fY2hpbGRyZW4ucmVtb3ZlKHBvcyk7Cit9CisgICAgCitBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFy
KiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6YWRkQ2hpbGRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpCit7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybiAwOworICAg
IAorICAgIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIqIHNjcm9sbEJhck9iamVjdCA9IHN0YXRpY19j
YXN0PEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIqPihheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRl
KHNjcm9sbGJhcikpOworICAgIHNjcm9sbEJhck9iamVjdC0+c2V0UGFyZW50KHRoaXMpOworICAg
IG1fY2hpbGRyZW4uYXBwZW5kKHNjcm9sbEJhck9iamVjdCk7CisgICAgcmV0dXJuIHNjcm9sbEJh
ck9iamVjdDsKK30KKyAgICAgICAgCit2b2lkIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3OjphZGRD
aGlsZHJlbigpCit7CisgICAgQVNTRVJUKCFtX2hhdmVDaGlsZHJlbik7CisgICAgbV9oYXZlQ2hp
bGRyZW4gPSB0cnVlOworICAgIAorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHdlYkFyZWEgPSB3
ZWJBcmVhT2JqZWN0KCk7CisgICAgaWYgKHdlYkFyZWEpCisgICAgICAgIG1fY2hpbGRyZW4uYXBw
ZW5kKHdlYkFyZWEpOworICAgIAorICAgIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKK30K
KworQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6OndlYkFyZWFP
YmplY3QoKSBjb25zdAoreworICAgIGlmICghbV9zY3JvbGxWaWV3LT5pc0ZyYW1lVmlldygpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBEb2N1bWVudCogZG9jID0gc3RhdGljX2Nhc3Q8
RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3LmdldCgpKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAg
ICBpZiAoIWRvYyB8fCAhZG9jLT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGRvYy0+cmVuZGVyZXIoKSk7Cit9
CisKKyAgICAKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Ojph
Y2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogd2ViQXJlYSA9IHdlYkFyZWFPYmplY3QoKTsKKyAgICBpZiAo
IXdlYkFyZWEpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlmIChtX2hvcml6b250YWxT
Y3JvbGxiYXIgJiYgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5lbGVtZW50UmVjdCgpLmNvbnRhaW5z
KHBvaW50KSkKKyAgICAgICAgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsKKyAg
ICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5lbGVtZW50
UmVjdCgpLmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxi
YXIuZ2V0KCk7CisgICAgCisgICAgcmV0dXJuIHdlYkFyZWEtPmFjY2Vzc2liaWxpdHlIaXRUZXN0
KHBvaW50KTsKK30KKyAgICAKK0RvY3VtZW50KiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6ZG9j
dW1lbnQoKSBjb25zdAoreworICAgIGlmICghbV9zY3JvbGxWaWV3LT5pc0ZyYW1lVmlldygpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3
Kj4obV9zY3JvbGxWaWV3LmdldCgpKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKK30KKworSW50UmVj
dCBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6ZWxlbWVudFJlY3QoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3Njcm9sbFZpZXctPmZyYW1lUmVjdCgpOworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6cGFyZW50T2JqZWN0KCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fc2Nyb2xsVmlldy0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
CisgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IHN0YXRpY19jYXN0PEZyYW1lVmll
dyo+KG1fc2Nyb2xsVmlldy5nZXQoKSktPmZyYW1lKCktPm93bmVyRWxlbWVudCgpOworICAgIGlm
IChvd25lciAmJiBvd25lci0+cmVuZGVyUGFydCgpKQorICAgICAgICByZXR1cm4gYXhPYmplY3RD
YWNoZSgpLT5nZXRPckNyZWF0ZShvd25lci0+cmVuZGVyUGFydCgpLT5wYXJlbnQoKSk7CisgICAg
CisgICAgcmV0dXJuIDA7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlICAgIApJbmRl
eDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9s
bFZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBY2Nl
c3NpYmlsaXR5U2Nyb2xsVmlld19oCisjZGVmaW5lIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3X2gK
KworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIAorY2xhc3MgQWNjZXNzaWJpbGl0eVNjcm9sbGJhcjsKK2NsYXNzIFNjcm9sbGJhcjsK
K2NsYXNzIFNjcm9sbFZpZXc7CisgICAgCitjbGFzcyBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyA6
IHB1YmxpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4gY3JlYXRlKFNjcm9sbFZpZXcqKTsgICAgCisg
ICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlVmFsdWUoKSBjb25zdCB7IHJldHVybiBT
Y3JvbGxBcmVhUm9sZTsgfQorICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcoKSBjb25zdCB7IHJl
dHVybiBtX3Njcm9sbFZpZXcuZ2V0KCk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgQWNjZXNzaWJp
bGl0eVNjcm9sbFZpZXcoU2Nyb2xsVmlldyopOworICAgIAorICAgIHZpcnR1YWwgYm9vbCBhY2Nl
c3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5
T3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZHJlbigpOworICAg
IHZpcnR1YWwgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2ludCYpIGNvbnN0
OworICAgIHZpcnR1YWwgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJl
bigpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCk7CisgICAg
CisgICAgdmlydHVhbCBJbnRSZWN0IGVsZW1lbnRSZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnRPYmplY3QoKSBjb25zdDsKKyAgICAKKyAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiB3ZWJBcmVhT2JqZWN0KCkgY29uc3Q7CisgICAgQWNjZXNzaWJpbGl0
eVNjcm9sbGJhciogYWRkQ2hpbGRTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CisgICAgdm9pZCByZW1v
dmVDaGlsZFNjcm9sbGJhcihBY2Nlc3NpYmlsaXR5T2JqZWN0Kik7CisgICAgCisgICAgUmVmUHRy
PFNjcm9sbFZpZXc+IG1fc2Nyb2xsVmlldzsKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVj
dD4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOworICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0
PiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworfTsKKworaW5saW5lIEFjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3KiB0b0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzQWNjZXNzaWJpbGl0eVNjcm9s
bFZpZXcoKSk7CisgICAgaWYgKCFvYmplY3QtPmlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2li
aWxpdHlTY3JvbGxWaWV3Kj4ob2JqZWN0KTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3X2gKKwpJbmRleDogV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmNwcAkocmV2aXNp
b24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJh
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDI1ICsyOSw3NyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlTY3JvbGxiYXIuaCIKIAorI2luY2x1ZGUgIkFY
T2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJTY3JvbGxW
aWV3LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcigpCi0gICAgOiBt
X3Njcm9sbGJhcigwKQorQWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6QWNjZXNzaWJpbGl0eVNjcm9s
bGJhcihTY3JvbGxiYXIgKnNjcm9sbGJhcikKKyAgICA6IG1fc2Nyb2xsYmFyKHNjcm9sbGJhcikK
KyAgICAsIG1fcGFyZW50KDApCiB7CisgICAgQVNTRVJUKHNjcm9sbGJhcik7CiB9CiAKLVBhc3NS
ZWZQdHI8QWNjZXNzaWJpbGl0eVNjcm9sbGJhcj4gQWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6Y3Jl
YXRlKCkKK1Bhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVNjcm9sbGJhcj4gQWNjZXNzaWJpbGl0eVNj
cm9sbGJhcjo6Y3JlYXRlKFNjcm9sbGJhciAqc2Nyb2xsYmFyKQogewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQWNjZXNzaWJpbGl0eVNjcm9sbGJhcik7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKHNjcm9sbGJhcikpOwogfQorICAgIAorSW50UmVjdCBB
Y2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjplbGVtZW50UmVjdCgpIGNvbnN0Cit7CisgICAgaWYgKCFt
X3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAKKyAgICByZXR1cm4g
bV9zY3JvbGxiYXItPmZyYW1lUmVjdCgpOworfQorICAgIAorRG9jdW1lbnQqIEFjY2Vzc2liaWxp
dHlTY3JvbGxiYXI6OmRvY3VtZW50KCkgY29uc3QKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBwYXJlbnQgPSBwYXJlbnRPYmplY3QoKTsKKyAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIHBhcmVudC0+ZG9jdW1lbnQoKTsKK30KKworQWNjZXNzaWJpbGl0
eU9yaWVudGF0aW9uIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6Om9yaWVudGF0aW9uKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9y
aWVudGF0aW9uSG9yaXpvbnRhbDsKKworICAgIGlmIChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9y
aWVudGF0aW9uSG9yaXpvbnRhbDsKKyAgICBpZiAobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkg
PT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T3JpZW50
YXRpb25WZXJ0aWNhbDsKIAorICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25Ib3Jp
em9udGFsOworfQorCitib29sIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmlzRW5hYmxlZCgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBtX3Njcm9sbGJhci0+ZW5hYmxlZCgpOworfQorICAgIAogZmxvYXQgQWNjZXNzaWJp
bGl0eVNjcm9sbGJhcjo6dmFsdWVGb3JSYW5nZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3Njcm9s
bGJhcikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5jdXJyZW50
UG9zKCk7CisKKyAgICByZXR1cm4gbV9zY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAvIG1fc2Nyb2xs
YmFyLT5tYXhpbXVtKCk7CiB9CiAKK3ZvaWQgQWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6c2V0VmFs
dWUoZmxvYXQgdmFsdWUpCit7CisgICAgaWYgKCFtX3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIGZsb2F0IG5ld1ZhbHVlID0gdmFsdWUgKiBtX3Njcm9sbGJhci0+bWF4aW11
bSgpOworICAgIAorICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShuZXdWYWx1ZSwgU2Nyb2xsYmFy
OjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOyAgICAKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3Jv
bGxiYXIuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVNjcm9sbGJhci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywzMCArMzcsMzQgQEAgY2xh
c3MgU2Nyb2xsYmFyOwogCiBjbGFzcyBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyIDogcHVibGljIEFj
Y2Vzc2liaWxpdHlPYmplY3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFjY2Vz
c2liaWxpdHlTY3JvbGxiYXI+IGNyZWF0ZSgpOwotCi0gICAgdm9pZCBzZXRTY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpIHsgbV9zY3JvbGxiYXIgPSBzY3JvbGxiYXI7IH0KKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyPiBjcmVhdGUoU2Nyb2xsYmFyKik7
CiAKICAgICBTY3JvbGxiYXIqIHNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYmFy
LmdldCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5Um9sZSBy
b2xlVmFsdWUoKSBjb25zdCB7IHJldHVybiBTY3JvbGxCYXJSb2xlOyB9Ci0KLSAgICB2aXJ0dWFs
IGZsb2F0IHZhbHVlRm9yUmFuZ2UoKSBjb25zdDsKLQorICAgIHZvaWQgc2V0UGFyZW50KEFjY2Vz
c2liaWxpdHlPYmplY3QqIHBhcmVudCkgeyBtX3BhcmVudCA9IHBhcmVudDsgfQorICAgIAogcHJp
dmF0ZToKLSAgICBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKCk7CisgICAgQWNjZXNzaWJpbGl0eVNj
cm9sbGJhcihTY3JvbGxiYXIqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0
VmFsdWVBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29s
IGNhblNldE51bWVyaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIC8vIFRo
ZXNlIHNob3VsZCBuZXZlciBiZSByZWFjaGVkIHNpbmNlIHRoZSBBY2Nlc3NpYmlsaXR5U2Nyb2xs
YmFyIGlzIG5vdCBwYXJ0IG9mCi0gICAgLy8gdGhlIGFjY2Vzc2liaWxpdHkgdHJlZS4KLSAgICB2
aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biBJbnRTaXplKCk7IH0KLSAgICB2aXJ0dWFsIEludFJlY3QgZWxlbWVudFJlY3QoKSBjb25zdCB7
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gSW50UmVjdCgpOyB9Ci0gICAgdmlydHVhbCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnRPYmplY3QoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vzc2liaWxpdHlTY3Jv
bGxiYXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBwYXJlbnRPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQorICAgIHZp
cnR1YWwgSW50UmVjdCBlbGVtZW50UmVjdCgpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgQWNj
ZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gU2Nyb2xsQmFyUm9sZTsg
fQorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29u
c3Q7CisgICAgdmlydHVhbCBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNFbmFibGVkKCkgY29uc3Q7CisgICAgCisgICAgLy8gQXNzdW1lcyBmbG9hdCBbMC4u
MV0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoZmxvYXQpOworICAgIHZpcnR1YWwgZmxvYXQg
dmFsdWVGb3JSYW5nZSgpIGNvbnN0OwogCiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9zY3JvbGxi
YXI7CisgICAgQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CisgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogbV9wYXJlbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5
T2JqZWN0TWFjLm1tCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9t
YWMvQWNjZXNzaWJpbGl0eU9iamVjdE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksMTYgKzI5
LDIzIEBACiAjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQogCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlci5oIgorI2ltcG9ydCAiV2lkZ2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5SWdub3JlQXR0YWNo
bWVudCgpIGNvbnN0CiB7Ci0gICAgTlNWaWV3KiBhdHRhY2htZW50ID0gW3dyYXBwZXIoKSBhdHRh
Y2htZW50Vmlld107Ci0gICAgaWYgKCFhdHRhY2htZW50KQorICAgIC8vIEZyYW1lVmlldyBhdHRh
Y2htZW50cyBhcmUgbm93IGhhbmRsZWQgYnkgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcsIAorICAg
IC8vIHNvIGlmIHRoaXMgaXMgdGhlIGF0dGFjaG1lbnQsIGl0IHNob3VsZCBiZSBpZ25vcmVkLgor
ICAgIFdpZGdldCogd2lkZ2V0ID0gMDsKKyAgICBpZiAoaXNBdHRhY2htZW50KCkgJiYgKHdpZGdl
dCA9IHdpZGdldEZvckF0dGFjaG1lbnRWaWV3KCkpICYmIHdpZGdldC0+aXNGcmFtZVZpZXcoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoW3dyYXBwZXIoKSBhdHRhY2htZW50Vmll
d10pCisgICAgICAgIHJldHVybiBbW3dyYXBwZXIoKSBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJp
bGl0eUlzSWdub3JlZF07CiAgICAgCi0gICAgcmV0dXJuIFthdHRhY2htZW50IGFjY2Vzc2liaWxp
dHlJc0lnbm9yZWRdOworICAgIC8vIEF0dGFjaG1lbnRzIGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQg
KHVubGVzcyB3ZSBkZXRlcm1pbmUgdGhhdCB3ZSBzaG91bGQgZXhwb3NlIHRoZW0pLgorICAgIHJl
dHVybiB0cnVlOwogfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmFjY2Vzc2liaWxpdHlQbGF0Zm9ybUluY2x1ZGVzT2JqZWN0KCkgY29uc3QKSW5k
ZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlci5tbQkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNiw2ICszNiw3IEBACiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5TGlzdEJveC5oIgog
I2ltcG9ydCAiQWNjZXNzaWJpbGl0eUxpc3QuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuaCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmgiCiAjaW1wb3J0
ICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlUYWJsZUNlbGwu
aCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlUYWJsZVJvdy5oIgpAQCAtNDMsNiArNDQsNyBAQAog
I2ltcG9ydCAiQ29sb3JNYWMuaCIKICNpbXBvcnQgIkVkaXRvckNsaWVudC5oIgogI2ltcG9ydCAi
RnJhbWUuaCIKKyNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJIVE1MQW5j
aG9yRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTEFyZWFFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1M
RnJhbWVPd25lckVsZW1lbnQuaCIKQEAgLTUzLDYgKzU1LDcgQEAKICNpbXBvcnQgIlJlbmRlclRl
eHRDb250cm9sLmgiCiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJSZW5kZXJXaWRn
ZXQuaCIKKyNpbXBvcnQgIlNjcm9sbFZpZXcuaCIKICNpbXBvcnQgIlNlbGVjdGlvbkNvbnRyb2xs
ZXIuaCIKICNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW1wb3J0ICJUZXh0SXRlcmF0b3Iu
aCIKQEAgLTcwNCw2ICs3MDcsNyBAQCAtIChOU0FycmF5KilhY2Nlc3NpYmlsaXR5QXR0cmlidXRl
TmFtZXMKICAgICBzdGF0aWMgTlNBcnJheSogb3V0bGluZUF0dHJzID0gbmlsOwogICAgIHN0YXRp
YyBOU0FycmF5KiBvdXRsaW5lUm93QXR0cnMgPSBuaWw7CiAgICAgc3RhdGljIE5TQXJyYXkqIGJ1
dHRvbkF0dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5KiBzY3JvbGxWaWV3QXR0cnMgPSBu
aWw7CiAgICAgTlNNdXRhYmxlQXJyYXkqIHRlbXBBcnJheTsKICAgICBpZiAoYXR0cmlidXRlcyA9
PSBuaWwpIHsKICAgICAgICAgYXR0cmlidXRlcyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhP
YmplY3RzOiBOU0FjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlLApAQCAtOTQ0LDYgKzk0OCwxNCBA
QCAtIChOU0FycmF5KilhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMKICAgICAgICAgb3V0bGlu
ZVJvd0F0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CiAg
ICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07CiAgICAgfQorICAgIGlmIChzY3JvbGxWaWV3QXR0
cnMgPT0gbmlsKSB7CisgICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0
Ok5TQWNjZXNzaWJpbGl0eUNvbnRlbnRzQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SG9yaXpvbnRhbFNjcm9sbEJhckF0dHJpYnV0ZV07Cisg
ICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZlcnRpY2FsU2Nyb2xs
QmFyQXR0cmlidXRlXTsKKyAgICAgICAgc2Nyb2xsVmlld0F0dHJzID0gW1tOU0FycmF5IGFsbG9j
XSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07
CisgICAgfQogICAgIAogICAgIE5TQXJyYXkgKm9iamVjdEF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVz
OwogICAgIApAQCAtMTAxMSw2ICsxMDIzLDkgQEAgLSAoTlNBcnJheSopYWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZU5hbWVzCiAgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTWVudUl0ZW0oKSkKICAgICAg
ICAgb2JqZWN0QXR0cmlidXRlcyA9IG1lbnVJdGVtQXR0cnM7CiAKKyAgICBlbHNlIGlmIChtX29i
amVjdC0+aXNTY3JvbGxWaWV3KCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBzY3JvbGxW
aWV3QXR0cnM7CisgICAgCiAgICAgTlNBcnJheSAqYWRkaXRpb25hbEF0dHJpYnV0ZXMgPSBbc2Vs
ZiBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXTsKICAgICBpZiAoW2FkZGl0
aW9uYWxBdHRyaWJ1dGVzIGNvdW50XSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IFtvYmpl
Y3RBdHRyaWJ1dGVzIGFycmF5QnlBZGRpbmdPYmplY3RzRnJvbUFycmF5OmFkZGl0aW9uYWxBdHRy
aWJ1dGVzXTsKQEAgLTEwMzQsNiArMTA0OSwxNCBAQCAtIChOU0FycmF5KilyZW5kZXJXaWRnZXRD
aGlsZHJlbgogICAgIHJldHVybiBbKHdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSkgYWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVZhbHVlOiBOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV07CiB9
CiAKKy0gKGlkKXJlbW90ZUFjY2Vzc2liaWxpdHlQYXJlbnRPYmplY3QKK3sKKyAgICBpZiAoIW1f
b2JqZWN0IHx8ICFtX29iamVjdC0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICAKKyAgICByZXR1cm4gbV9vYmplY3QtPmRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5j
bGllbnQoKS0+YWNjZXNzaWJpbGl0eVJlbW90ZU9iamVjdCgpOworfQorCiBzdGF0aWMgdm9pZCBj
b252ZXJ0VG9WZWN0b3IoTlNBcnJheSogYXJyYXksIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYgdmVjdG9yKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IFthcnJheSBjb3VudF07CkBAIC0xMDc1LDE2ICsxMDk4LDQxIEBAIC0gKFdlYkNvcmVUZXh0TWFy
a2VyUmFuZ2UqKXRleHRNYXJrZXJSYW4KIC0gKE5TVmFsdWUqKXBvc2l0aW9uCiB7CiAgICAgSW50
UmVjdCByZWN0ID0gbV9vYmplY3QtPmVsZW1lbnRSZWN0KCk7CisgICAgTlNQb2ludCBwb2ludDsK
ICAgICAKLSAgICAvLyBUaGUgQ29jb2EgYWNjZXNzaWJpbGl0eSBBUEkgd2FudHMgdGhlIGxvd2Vy
LWxlZnQgY29ybmVyLgotICAgIE5TUG9pbnQgcG9pbnQgPSBOU01ha2VQb2ludChyZWN0LngoKSwg
cmVjdC5ib3R0b20oKSk7CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX29iamVjdC0+ZG9j
dW1lbnRGcmFtZVZpZXcoKTsKLSAgICBpZiAoZnJhbWVWaWV3KSB7Ci0gICAgICAgIE5TVmlldyog
dmlldyA9IGZyYW1lVmlldy0+ZG9jdW1lbnRWaWV3KCk7Ci0gICAgICAgIHBvaW50ID0gW1t2aWV3
IHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjogW3ZpZXcgY29udmVydFBvaW50OiBwb2ludCB0
b1ZpZXc6bmlsXV07CisgICAgaWQgcmVtb3RlUGFyZW50ID0gW3NlbGYgcmVtb3RlQWNjZXNzaWJp
bGl0eVBhcmVudE9iamVjdF07CisgICAgaWYgKHJlbW90ZVBhcmVudCkgeworICAgICAgICBwb2lu
dCA9IE5TTWFrZVBvaW50KHJlY3QueCgpLCByZWN0LnkoKSk7CisgICAgICAgIAorICAgICAgICBO
U1BvaW50IHJlbW90ZVBvc2l0aW9uID0gW1tyZW1vdGVQYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVBvc2l0aW9uQXR0cmlidXRlXSBwb2ludFZhbHVlXTsK
KyAgICAgICAgTlNTaXplIHJlbW90ZVNpemUgPSBbW3JlbW90ZVBhcmVudCBhY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZV0gc2l6ZVZhbHVlXTsK
KworICAgICAgICAvLyBHZXQgdGhlIHkgcG9zaXRpb24gb2YgdGhlIFdLVmlldyAod2UgaGF2ZSB0
byBzY3JlZW4tZmxpcCBhbmQgZ28gZnJvbSBib3R0b20gbGVmdCB0byB0b3AgbGVmdCkuCisgICAg
ICAgIENHRmxvYXQgc2NyZWVuSGVpZ2h0ID0gW1tbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJ
bmRleDowXSBmcmFtZV0uc2l6ZS5oZWlnaHQ7CisgICAgICAgIHJlbW90ZVBvc2l0aW9uLnkgPSAo
c2NyZWVuSGVpZ2h0IC0gcmVtb3RlUG9zaXRpb24ueSkgLSByZW1vdGVTaXplLmhlaWdodDsKKyAg
ICAgICAgCisgICAgICAgIE5TUG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBOU01ha2VQb2ludCgwLCAw
KTsKKyAgICAgICAgaWYgKGZyYW1lVmlldyAmJiAhbV9vYmplY3QtPmlzU2Nyb2xsYmFyKCkgJiYg
IW1fb2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkgeworICAgICAgICAgICAgSW50UG9pbnQgZnJhbWVT
Y3JvbGxQb3MgPSBmcmFtZVZpZXctPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgICAgICBzY3Jv
bGxQb3NpdGlvbiA9IE5TTWFrZVBvaW50KGZyYW1lU2Nyb2xsUG9zLngoKSwgZnJhbWVTY3JvbGxQ
b3MueSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcG9pbnQueCArPSByZW1vdGVQ
b3NpdGlvbi54IC0gc2Nyb2xsUG9zaXRpb24ueDsKKyAgICAgICAgLy8gU2V0IHRoZSBuZXcgcG9z
aXRpb24sIHdoaWNoIG1lYW5zIGdldHRpbmcgYm90dG9tIHksIGFuZCB0aGVuIGZsaXBwaW5nIHRv
IHNjcmVlbiBjb29yZGluYXRlcy4KKyAgICAgICAgcG9pbnQueSA9IHNjcmVlbkhlaWdodCAtIChw
b2ludC55ICsgcmVtb3RlUG9zaXRpb24ueSArIHJlY3QuaGVpZ2h0KCkgLSBzY3JvbGxQb3NpdGlv
bi55KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8vIFRoZSBDb2NvYSBhY2Nlc3NpYmls
aXR5IEFQSSB3YW50cyB0aGUgbG93ZXItbGVmdCBjb3JuZXIuCisgICAgICAgIHBvaW50ID0gTlNN
YWtlUG9pbnQocmVjdC54KCksIHJlY3QuYm90dG9tKCkpOworICAgICAgICAKKyAgICAgICAgaWYg
KGZyYW1lVmlldykgeworICAgICAgICAgICAgTlNWaWV3KiB2aWV3ID0gZnJhbWVWaWV3LT5kb2N1
bWVudFZpZXcoKTsKKyAgICAgICAgICAgIHBvaW50ID0gW1t2aWV3IHdpbmRvd10gY29udmVydEJh
c2VUb1NjcmVlbjogW3ZpZXcgY29udmVydFBvaW50OiBwb2ludCB0b1ZpZXc6bmlsXV07CisgICAg
ICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6IHBvaW50
XTsKKyAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6cG9pbnRdOwogfQogCiB0eXBl
ZGVmIEhhc2hNYXA8aW50LCBOU1N0cmluZyo+IEFjY2Vzc2liaWxpdHlSb2xlTWFwOwpAQCAtMTM5
MCw2ICsxNDM4LDI3IEBAIC0gKE5TU3RyaW5nKilyb2xlRGVzY3JpcHRpb24KICAgICByZXR1cm4g
TlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uKE5TQWNjZXNzaWJpbGl0eVVua25vd25Sb2xl
LCBuaWwpOwogfQogCistIChpZClzY3JvbGxWaWV3UGFyZW50Cit7CisgICAgaWYgKCFtX29iamVj
dCB8fCAhbV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAKKyAgICAvLyBJZiB0aGlzIHNjcm9sbCB2aWV3IHByb3ZpZGVzIGl0J3Mg
cGFyZW50IG9iamVjdCAoYmVjYXVzZSBpdCdzIGEgc3ViLWZyYW1lKSwgdGhlbgorICAgIC8vIHdl
IHNob3VsZCBub3QgZmluZCB0aGUgcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudC4KKyAgICBpZiAo
bV9vYmplY3QtPnBhcmVudE9iamVjdCgpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAg
IEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KiBzY3JvbGxWaWV3ID0gdG9BY2Nlc3NpYmlsaXR5U2Ny
b2xsVmlldyhtX29iamVjdCk7CisgICAgU2Nyb2xsVmlldyogc2Nyb2xsID0gc2Nyb2xsVmlldy0+
c2Nyb2xsVmlldygpOworICAgIGlmICghc2Nyb2xsKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IAorICAgIGlmIChzY3JvbGwtPnBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHJldHVybiBzY3Jv
bGwtPnBsYXRmb3JtV2lkZ2V0KCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gW3NlbGYgcmVt
b3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdF07Cit9CisKIC8vIEZJWE1FOiBzcGxpdCB1cCB0
aGlzIGZ1bmN0aW9uIGluIGEgYmV0dGVyIHdheS4gIAogLy8gc3VnZ2VzdGlvbnM6IFVzZSBhIGhh
c2ggdGFibGUgdGhhdCBtYXBzIGF0dHJpYnV0ZSBuYW1lcyB0byBmdW5jdGlvbiBjYWxscywKIC8v
IG9yIG1heWJlIHBvaW50ZXJzIHRvIG1lbWJlciBmdW5jdGlvbnMKQEAgLTE0MDgsMTEgKzE0Nzcs
MTEgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgICAgICBy
ZXR1cm4gW3NlbGYgcm9sZURlc2NyaXB0aW9uXTsKIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZV0pIHsKLSAgICAg
ICAgaWYgKG1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgewotICAgICAg
ICAgICAgRnJhbWVWaWV3KiBmdiA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QqPihtX29iamVjdCktPmZyYW1lVmlld0lmUmVuZGVyVmlldygpOwotICAgICAgICAgICAgaWYg
KGZ2KQotICAgICAgICAgICAgICAgIHJldHVybiBmdi0+cGxhdGZvcm1XaWRnZXQoKTsKLSAgICAg
ICAgfQorCisgICAgICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gdGhlIHBhcmVudCBvZiB0aGUgQVhX
ZWJBcmVhLCBpZiB0aGlzIGlzIGEgd2ViIGFyZWEuCisgICAgICAgIGlkIHNjcm9sbFZpZXdQYXJl
bnQgPSBbc2VsZiBzY3JvbGxWaWV3UGFyZW50XTsKKyAgICAgICAgaWYgKHNjcm9sbFZpZXdQYXJl
bnQpCisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsVmlld1BhcmVudDsKICAgICAgICAgCiAgICAg
ICAgIC8vIFRyZWUgaXRlbSAoY2hhbmdlZCB0byBBWFJvd3MpIGNhbiBvbmx5IHJlcG9ydCB0aGUg
dHJlZSAoQVhPdXRsaW5lKSBhcyBpdHMgcGFyZW50LgogICAgICAgICBpZiAobV9vYmplY3QtPmlz
VHJlZUl0ZW0oKSkgewpAQCAtMTQyNCw3ICsxNDkzLDEwIEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKS0+d3JhcHBl
cigpOworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFy
ZW50T2JqZWN0VW5pZ25vcmVkKCk7CisgICAgICAgIGlmIChwYXJlbnQpCisgICAgICAgICAgICBy
ZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CisgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQogCiAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5BdHRyaWJ1dGVdKSB7CkBAIC0xNjEzLDYgKzE2ODUsMTEgQEAgLSAoaWQpYWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRlXSB8fAogICAgICAgICBb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVRvcExldmVsVUlF
bGVtZW50QXR0cmlidXRlXSkgeworICAgICAgICAKKyAgICAgICAgaWQgcmVtb3RlUGFyZW50ID0g
W3NlbGYgcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdF07CisgICAgICAgIGlmIChyZW1v
dGVQYXJlbnQpCisgICAgICAgICAgICByZXR1cm4gW3JlbW90ZVBhcmVudCBhY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWU6YXR0cmlidXRlTmFtZV07CisgICAgICAgIAogICAgICAgICBGcmFtZVZp
ZXcqIGZ2ID0gbV9vYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CiAgICAgICAgIGlmIChmdikK
ICAgICAgICAgICAgIHJldHVybiBbZnYtPnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93XTsKQEAgLTE2
NDksNiArMTcyNiwxOCBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3Ry
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShjb250
ZW50cyk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzU2Nyb2xsVmll
dygpKSB7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gQSBzY3JvbGxWaWV3J3MgY29udGVudHMgYXJlIGV2ZXJ5dGhpbmcg
ZXhjZXB0IHRoZSBzY3JvbGwgYmFycy4KKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb250ZW50czsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGNoaWxkcmVuU2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgayA9IDA7IGsgPCBjaGlsZHJlblNpemU7ICsraykgeworICAgICAgICAgICAgICAgIGlm
ICghY2hpbGRyZW5ba10tPmlzU2Nyb2xsYmFyKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRl
bnRzLmFwcGVuZChjaGlsZHJlbltrXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gY29udmVydFRvTlNBcnJheShjb250ZW50cyk7ICAgICAgICAgICAgCisgICAgICAgIH0KICAg
ICB9ICAgIAogICAgIAogICAgIGlmIChtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSkg
ewpAQCAtMTg3NCw2ICsxOTYzLDE5IEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZTooTlNTdHIKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CiAgICAgCisgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlIb3Jpem9udGFsU2Nyb2xs
QmFyQXR0cmlidXRlXSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzY3JvbGxCYXIg
PSBtX29iamVjdC0+c2Nyb2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkhvcml6b250YWwp
OworICAgICAgICBpZiAoc2Nyb2xsQmFyKQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbEJhci0+
d3JhcHBlcigpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZlcnRpY2FsU2Nyb2xsQmFyQXR0
cmlidXRlXSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzY3JvbGxCYXIgPSBtX29i
amVjdC0+c2Nyb2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvblZlcnRpY2FsKTsKKyAgICAg
ICAgaWYgKHNjcm9sbEJhcikKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxCYXItPndyYXBwZXIo
KTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlMYW5ndWFnZUF0dHJpYnV0ZV0pIAog
ICAgICAgICByZXR1cm4gbV9vYmplY3QtPmxhbmd1YWdlKCk7CiAgICAgCkBAIC0xOTY3LDYgKzIw
NjksNyBAQCAtIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2luCiAgICAgaWYg
KCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQogICAgICAgICByZXR1cm4gbmlsOwog
CisgICAgbV9vYmplY3QtPnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKICAgICBSZWZQdHI8
QWNjZXNzaWJpbGl0eU9iamVjdD4gYXhPYmplY3QgPSBtX29iamVjdC0+YWNjZXNzaWJpbGl0eUhp
dFRlc3QoSW50UG9pbnQocG9pbnQpKTsKICAgICBpZiAoYXhPYmplY3QpCiAgICAgICAgIHJldHVy
biBOU0FjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihheE9iamVjdC0+d3JhcHBlcigpKTsK
QEAgLTIyMzksOSArMjM0MiwxMCBAQCAtICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQp
dmFsdWUgCiAgICAgICAgIEFTU0VSVChudW1iZXIpOwogICAgICAgICBtX29iamVjdC0+c2V0Rm9j
dXNlZChbbnVtYmVyIGludFZhbHVlXSAhPSAwKTsKICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdKSB7Ci0g
ICAgICAgIGlmICghc3RyaW5nKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX29iamVj
dC0+c2V0VmFsdWUoc3RyaW5nKTsKKyAgICAgICAgaWYgKG51bWJlciAmJiBtX29iamVjdC0+Y2Fu
U2V0TnVtZXJpY1ZhbHVlKCkpCisgICAgICAgICAgICBtX29iamVjdC0+c2V0VmFsdWUoW251bWJl
ciBmbG9hdFZhbHVlXSk7CisgICAgICAgIGVsc2UgaWYgKHN0cmluZykKKyAgICAgICAgICAgIG1f
b2JqZWN0LT5zZXRWYWx1ZShzdHJpbmcpOwogICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZEF0dHJpYnV0ZV0pIHsKICAg
ICAgICAgaWYgKCFudW1iZXIpCiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShy
ZXZpc2lvbiA3NDk3MykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTkxNSw3ICsxOTE1LDcgQEAgQVhPYmplY3RDYWNoZSogRG9jdW1lbnQ6OmF4T2JqZWN0
Q2FjaGUoKQogICAgICAgICByZXR1cm4gZG9jLT5heE9iamVjdENhY2hlKCk7CiAgICAgCiAgICAg
Ly8gdGhpcyBpcyB0aGUgdG9wLWxldmVsIGRvY3VtZW50LCBzbyBpbnN0YWxsIGEgbmV3IGNhY2hl
Ci0gICAgbV9heE9iamVjdENhY2hlID0gbmV3IEFYT2JqZWN0Q2FjaGU7CisgICAgbV9heE9iamVj
dENhY2hlID0gbmV3IEFYT2JqZWN0Q2FjaGUodGhpcyk7CiAgICAgcmV0dXJuIG1fYXhPYmplY3RD
YWNoZTsKIH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDc0OTczKQorKysg
V2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3Nyw2ICsz
NzcsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFs
IFJlbW90ZUFYT2JqZWN0UmVmIGFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKSB7IHJldHVybiAw
OyB9CiAgICAgdmlydHVhbCBOU0NhY2hlZFVSTFJlc3BvbnNlKiB3aWxsQ2FjaGVSZXNwb25zZShE
b2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHJlc3Bv
bnNlKSBjb25zdCB7IHJldHVybiByZXNwb25zZTsgfQogI2VuZGlmCiAjaWYgVVNFKENGTkVUV09S
SykKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gNzQ5NzMpCisr
KyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw2ICszNCwxNSBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCisjaWYgUExBVEZPUk0oTUFDKQorI2lmZGVmIF9fT0JKQ19fIAorI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Cit0eXBlZGVmIGlkIFJlbW90ZUFYT2JqZWN0UmVmOwor
I2Vsc2UKK3R5cGVkZWYgdm9pZCogUmVtb3RlQVhPYmplY3RSZWY7CisjZW5kaWYKKyNlbmRpZgor
CiB0eXBlZGVmIGNsYXNzIF9qb2JqZWN0KiBqb2JqZWN0OwogCiAjaWYgUExBVEZPUk0oTUFDKSAm
JiAhZGVmaW5lZChfX09CSkNfXykKQEAgLTI2NSw2ICsyNzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oYm9v
bCBsaXN0ZW4gPSB0cnVlKSA9IDA7CiAgICAgICAgIAogI2lmIFBMQVRGT1JNKE1BQykKKyAgICAg
ICAgLy8gQWxsb3cgYW4gYWNjZXNzaWJpbGl0eSBvYmplY3QgdG8gcmV0cmlldmUgYSBGcmFtZSBw
YXJlbnQgaWYgdGhlcmUncyBubyBQbGF0Zm9ybVdpZGdldC4KKyAgICAgICAgdmlydHVhbCBSZW1v
dGVBWE9iamVjdFJlZiBhY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCkgPSAwOwogI2lmIEVOQUJM
RShKQVZBX0JSSURHRSkKICAgICAgICAgdmlydHVhbCBqb2JqZWN0IGphdmFBcHBsZXQoTlNWaWV3
KikgeyByZXR1cm4gMDsgfQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gNzQ5
NzMpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYx
LDcgKzE2MSwxMCBAQCBGcmFtZVZpZXc6On5GcmFtZVZpZXcoKQogICAgICAgICBtX3NjaGVkdWxl
ZEV2ZW50cy5jbGVhcigpOwogICAgICAgICBtX2VucXVldWVFdmVudHMgPSAwOwogICAgIH0KLQor
ICAgIAorICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIGF4
T2JqZWN0Q2FjaGUoKSkKKyAgICAgICAgYXhPYmplY3RDYWNoZSgpLT5yZW1vdmUodGhpcyk7Cisg
ICAgCiAgICAgcmVzZXRTY3JvbGxiYXJzKCk7CiAKICAgICAvLyBDdXN0b20gc2Nyb2xsYmFycyBz
aG91bGQgYWxyZWFkeSBiZSBkZXN0cm95ZWQgYXQgdGhpcyBwb2ludApAQCAtMjQ4Miw0ICsyNDg1
LDkgQEAgdm9pZCBGcmFtZVZpZXc6Om5vdGlmeVdpZGdldHNJbkFsbEZyYW1lcwogICAgIH0KIH0K
ICAgICAKK0FYT2JqZWN0Q2FjaGUqIEZyYW1lVmlldzo6YXhPYmplY3RDYWNoZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZyYW1lKCktPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGVFeGlzdHMoKSA/
IGZyYW1lKCktPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKSA6IDA7Cit9CisgICAgCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNjcm9sbENvcm5lcigpOwogICAgIHZp
cnR1YWwgdm9pZCBwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0JiBjb3JuZXJSZWN0KTsKIAorICAgIHZpcnR1YWwgQVhPYmplY3RDYWNoZSogYXhPYmplY3RD
YWNoZSgpIGNvbnN0OwogICAgIHZvaWQgbm90aWZ5V2lkZ2V0c0luQWxsRnJhbWVzKFdpZGdldE5v
dGlmaWNhdGlvbik7CiAgICAgCiAgICAgc3RhdGljIGRvdWJsZSBzQ3VycmVudFBhaW50VGltZVN0
YW1wOyAvLyB1c2VkIGZvciBkZXRlY3RpbmcgZGVjb2RlZCByZXNvdXJjZSB0aHJhc2ggaW4gdGhl
IGNhY2hlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDc0OTczKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKIAor
I2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJIb3N0V2luZG93LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50Lmgi
CkBAIC05Niw2ICs5Nyw5IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0SGFzSG9yaXpvbnRhbFNjcm9s
bGIKICAgICAgICAgcmVtb3ZlQ2hpbGQobV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpKTsKICAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gMDsKICAgICB9CisgICAgCisgICAgaWYgKEFY
T2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgYXhPYmplY3RDYWNoZSgpKQor
ICAgICAgICBheE9iamVjdENhY2hlKCktPmhhbmRsZVNjcm9sbGJhclVwZGF0ZSh0aGlzKTsKIH0K
IAogdm9pZCBTY3JvbGxWaWV3OjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc0JhcikK
QEAgLTExMSw2ICsxMTUsOSBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldEhhc1ZlcnRpY2FsU2Nyb2xs
YmFyCiAgICAgICAgIHJlbW92ZUNoaWxkKG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCkpOwogICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gMDsKICAgICB9CisgICAgCisgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgYXhPYmplY3RDYWNoZSgpKQorICAg
ICAgICBheE9iamVjdENhY2hlKCktPmhhbmRsZVNjcm9sbGJhclVwZGF0ZSh0aGlzKTsKIH0KIAog
I2lmICFQTEFURk9STShHVEspCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCShyZXZpc2lvbiA3
NDk3MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTYsNiArOTYsOSBAQCBTY3JvbGxiYXI6OlNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNs
CiAKIFNjcm9sbGJhcjo6flNjcm9sbGJhcigpCiB7CisgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFj
Y2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgYXhPYmplY3RDYWNoZSgpKQorICAgICAgICBheE9iamVj
dENhY2hlKCktPnJlbW92ZSh0aGlzKTsKKyAgICAKICAgICBzdG9wVGltZXJJZk5lZWRlZCgpOwog
ICAgIAogICAgIG1fdGhlbWUtPnVucmVnaXN0ZXJTY3JvbGxiYXIodGhpcyk7CkBAIC0xMzEsMTUg
KzEzNCw4IEBAIHZvaWQgU2Nyb2xsYmFyOjpzZXRTdGVwcyhpbnQgbGluZVN0ZXAsIGkKIGJvb2wg
U2Nyb2xsYmFyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCiB7CiAjaWYgSEFWRShBQ0NFU1NJ
QklMSVRZKQotICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7
Ci0gICAgICAgIGlmIChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSkgewotICAg
ICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFy
ZW50KCkpLT5mcmFtZSgpLT5kb2N1bWVudCgpOwotICAgICAgICAgICAgQVhPYmplY3RDYWNoZSog
Y2FjaGUgPSBkb2N1bWVudC0+YXhPYmplY3RDYWNoZSgpOwotICAgICAgICAgICAgQWNjZXNzaWJp
bGl0eVNjcm9sbGJhciogYXhPYmplY3QgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xs
YmFyKj4oY2FjaGUtPmdldE9yQ3JlYXRlKFNjcm9sbEJhclJvbGUpKTsKLSAgICAgICAgICAgIGF4
T2JqZWN0LT5zZXRTY3JvbGxiYXIodGhpcyk7Ci0gICAgICAgICAgICBjYWNoZS0+cG9zdE5vdGlm
aWNhdGlvbihheE9iamVjdCwgZG9jdW1lbnQsIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2Vk
LCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNz
aWJpbGl0eUVuYWJsZWQoKSAmJiBheE9iamVjdENhY2hlKCkpCisgICAgICAgIGF4T2JqZWN0Q2Fj
aGUoKS0+cG9zdE5vdGlmaWNhdGlvbihheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHRoaXMp
LCAwLCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hhbmdlZCwgdHJ1ZSk7CiAjZW5kaWYKIAogICAg
IC8vIElnbm9yZSBwZXJwZW5kaWN1bGFyIHNjcm9sbHMuCkBAIC00NzUsNyArNDcxLDE2IEBAIGJv
b2wgU2Nyb2xsYmFyOjppc1dpbmRvd0FjdGl2ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY2xp
ZW50ICYmIG1fY2xpZW50LT5pc0FjdGl2ZSgpOwogfQotIAorICAgIAorQVhPYmplY3RDYWNoZSog
U2Nyb2xsYmFyOjpheE9iamVjdENhY2hlKCkgY29uc3QKK3sKKyAgICBpZiAoIXBhcmVudCgpIHx8
ICFwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5m
cmFtZSgpLT5kb2N1bWVudCgpOworICAgIHJldHVybiBkb2N1bWVudC0+YXhPYmplY3RDYWNoZSgp
OworfQorCiB2b2lkIFNjcm9sbGJhcjo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKICAgICBpZiAoc3VwcHJlc3NJbnZhbGlkYXRpb24oKSkKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxi
YXIuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzEsNiArMTcxLDcgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgog
ICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIEFYT2JqZWN0Q2FjaGUqIGF4T2JqZWN0Q2FjaGUoKSBjb25zdDsKIAogICAgIGJv
b2wgc2V0Q3VycmVudFBvcyhmbG9hdCBwb3MsIFNjcm9sbFNvdXJjZSBzb3VyY2UpOwogfTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9XaWRnZXQuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1dpZGdl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDcgQEAgdHlwZWRlZiBQbGF0Zm9ybVdp
ZGdldCBQbGF0Zm9ybVBhZ2VDbGllbgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFY
T2JqZWN0Q2FjaGU7CiBjbGFzcyBDdXJzb3I7CiBjbGFzcyBFdmVudDsKIGNsYXNzIEZvbnQ7CkBA
IC0yNDYsNiArMjQ3LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydFRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIEludFBv
aW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKIAor
ICAgIC8vIEEgbWVhbnMgdG8gYWNjZXNzIHRoZSBBWCBjYWNoZSB3aGVuIHRoaXMgb2JqZWN0IGNh
biBnZXQgYSBwb2ludGVyIHRvIGl0LgorICAgIHZpcnR1YWwgQVhPYmplY3RDYWNoZSogYXhPYmpl
Y3RDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBp
bml0KFBsYXRmb3JtV2lkZ2V0KTsgLy8gTXVzdCBiZSBjYWxsZWQgYnkgYWxsIFdpZGdldCBjb25z
dHJ1Y3RvcnMgdG8gaW5pdGlhbGl6ZSBjcm9zcy1wbGF0Zm9ybSBkYXRhLgogCkluZGV4OiBXZWJL
aXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24g
NzQ5NzMpCisrKyBXZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0
IEBACisyMDExLTAxLTA0ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0syOiBTdXBw
b3J0IEFjY2Vzc2liaWxpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUxODU5CisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6YWNjZXNzaWJpbGl0eUNoaWxkVG9rZW5SZWNlaXZlZCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgorICAgICAgICAoLVtXS1ZpZXcg
aW5pdFdpdGhGcmFtZTpjb250ZXh0UmVmOnBhZ2VHcm91cFJlZjpdKToKKyAgICAgICAgKC1bV0tW
aWV3IF91cGRhdGVXaW5kb3dBbmRWaWV3RnJhbWVzXSk6CisgICAgICAgICgtW1dLVmlldyBfc2V0
QWNjZXNzaWJpbGl0eUNoaWxkVG9rZW46XSk6CisgICAgICAgICgtW1dLVmlldyBhY2Nlc3NpYmls
aXR5SXNJZ25vcmVkXSk6CisgICAgICAgICgtW1dLVmlldyBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpd
KToKKyAgICAgICAgKC1bV0tWaWV3IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjplbnN1cmVXZWJQcm9jZXNzKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5Ojp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZUFjY2Vzc2liaWxpdHlQYWdlVG9rZW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNlbmRBY2Nlc3NpYmlsaXR5UHJlc2VudGVyVG9rZW4pOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OndpbmRvd0Fu
ZFZpZXdGcmFtZXNDaGFuZ2VkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphY2Nlc3NpYmlsaXR5UG9zaXRpb24pOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6c2VuZEFjY2Vzc2liaWxpdHlQcmVzZW50ZXJUb2tlbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OmFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmluaXRpYWxpemVX
ZWJQcm9jZXNzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzczo6cHJlc2VudGVyQXBwbGljYXRpb25QaWQpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWluTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzTWFpbik6CisKIDIwMTEtMDEtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViS2l0
Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9u
IDc0OTczKQorKysgV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcgQEAgdm9pZCBXZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjplbmNvZAogICAgIGVuY29kZXItPmVuY29kZShzaG91bGRBbHdheXNVc2VD
b21wbGV4VGV4dENvZGVQYXRoKTsKICAgICBlbmNvZGVyLT5lbmNvZGUobGFuZ3VhZ2VDb2RlKTsK
ICNpZiBQTEFURk9STShNQUMpCisgICAgZW5jb2Rlci0+ZW5jb2RlKHByZXNlbnRlckFwcGxpY2F0
aW9uUGlkKTsKICAgICBlbmNvZGVyLT5lbmNvZGUobnNVUkxDYWNoZVBhdGgpOwogICAgIGVuY29k
ZXItPmVuY29kZShuc1VSTENhY2hlTWVtb3J5Q2FwYWNpdHkpOwogICAgIGVuY29kZXItPmVuY29k
ZShuc1VSTENhY2hlRGlza0NhcGFjaXR5KTsKQEAgLTg5LDYgKzkwLDggQEAgYm9vbCBXZWJQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZAogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBh
cmFtZXRlcnMubGFuZ3VhZ2VDb2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJzLnByZXNlbnRlckFw
cGxpY2F0aW9uUGlkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKHBhcmFtZXRlcnMubnNVUkxDYWNoZVBhdGgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocGFyYW1ldGVycy5uc1VSTENhY2hlTWVtb3J5Q2Fw
YWNpdHkpKQpJbmRleDogV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDcgQEAgc3RydWN0
IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFN0cmluZyBsYW5ndWFnZUNvZGU7
CiAKICNpZiBQTEFURk9STShNQUMpCisgICAgcGlkX3QgcHJlc2VudGVyQXBwbGljYXRpb25QaWQ7
CiAgICAgU3RyaW5nIG5zVVJMQ2FjaGVQYXRoOwogICAgIHVpbnQ2NF90IG5zVVJMQ2FjaGVNZW1v
cnlDYXBhY2l0eTsKICAgICB1aW50NjRfdCBuc1VSTENhY2hlRGlza0NhcGFjaXR5OwpJbmRleDog
V2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1VJUHJvY2Vz
cy9QYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0RWRpdENvbW1hbmRTdGF0ZShjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBib29s
IGlzRW5hYmxlZCwgaW50IHN0YXRlKSA9IDA7CiAjaWYgUExBVEZPUk0oTUFDKQorICAgIHZpcnR1
YWwgdm9pZCBhY2Nlc3NpYmlsaXR5Q2hpbGRUb2tlblJlY2VpdmVkKGNvbnN0IENvcmVJUEM6OkRh
dGFSZWZlcmVuY2UmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGludGVyY2VwdEtleUV2ZW50KGNv
bnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21t
YW5kPiYsIHVpbnQzMl90LCB1aW50MzJfdCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5k
ZXJsaW5lPiYpID0gMDsKICNlbmRpZgogI2lmIFBMQVRGT1JNKFdJTikKSW5kZXg6IFdlYktpdDIv
VUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNz
L1dlYkNvbnRleHQuY3BwCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dl
YkNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDEwIEBAIHZvaWQgV2Vi
Q29udGV4dDo6ZW5zdXJlV2ViUHJvY2VzcygpCiAgICAgcGFyYW1ldGVycy5hcHBsaWNhdGlvbkNh
Y2hlRGlyZWN0b3J5ID0gYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgpOwogICAgIHBhcmFtZXRl
cnMuY2xlYXJSZXNvdXJjZUNhY2hlcyA9IG1fY2xlYXJSZXNvdXJjZUNhY2hlc0Zvck5ld1dlYlBy
b2Nlc3M7CiAgICAgcGFyYW1ldGVycy5jbGVhckFwcGxpY2F0aW9uQ2FjaGUgPSBtX2NsZWFyQXBw
bGljYXRpb25DYWNoZUZvck5ld1dlYlByb2Nlc3M7Ci0gICAgCisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIHBhcmFtZXRlcnMucHJlc2VudGVyQXBwbGljYXRpb25QaWQgPSBnZXRwaWQoKTsKKyNlbmRp
ZgorCiAgICAgbV9jbGVhclJlc291cmNlQ2FjaGVzRm9yTmV3V2ViUHJvY2VzcyA9IGZhbHNlOwog
ICAgIG1fY2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yTmV3V2ViUHJvY2VzcyA9IGZhbHNlOwogICAg
IApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiA3NDk3MykKKysr
IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
NCwxMiArNDk0LDEyIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVXaW5kb3dJc1Zpc2libGUK
ICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFdpbmRvd0lzVmlzaWJs
ZSh3aW5kb3dJc1Zpc2libGUpLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojp3
aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2Ny
ZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IEludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0
ZXMpCit2b2lkIFdlYlBhZ2VQcm94eTo6d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3Qg
SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBJbnRSZWN0JiB2
aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBJbnRQb2ludCYgYWNjZXNzaWJpbGl0
eVZpZXdDb29yZGluYXRlcykKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpXaW5kb3dBbmRWaWV3
RnJhbWVzQ2hhbmdlZCh3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIHZpZXdGcmFtZUlu
V2luZG93Q29vcmRpbmF0ZXMpLCBtX3BhZ2VJRCk7CisgICAgcHJvY2VzcygpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpXaW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZCh3aW5kb3dGcmFtZUluU2Ny
ZWVuQ29vcmRpbmF0ZXMsIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMsIGFjY2Vzc2liaWxp
dHlWaWV3Q29vcmRpbmF0ZXMpLCBtX3BhZ2VJRCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpn
ZXRNYXJrZWRSYW5nZSh1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpCkBAIC0x
MTk3LDYgKzExOTcsMTMgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJ1bkluc2VjdXJlQ29udGVu
dAogICAgIG1fbG9hZGVyQ2xpZW50LmRpZFJ1bkluc2VjdXJlQ29udGVudEZvckZyYW1lKHRoaXMs
IGZyYW1lLCB1c2VyRGF0YS5nZXQoKSk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNl
aXZlQWNjZXNzaWJpbGl0eVBhZ2VUb2tlbihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiBk
YXRhKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBtX3BhZ2VDbGllbnQtPmFjY2Vzc2liaWxp
dHlDaGlsZFRva2VuUmVjZWl2ZWQoZGF0YSk7CisjZW5kaWYKK30KKyAgICAKIHZvaWQgV2ViUGFn
ZVByb3h5OjpmcmFtZURpZEJlY29tZUZyYW1lU2V0KHVpbnQ2NF90IGZyYW1lSUQsIGJvb2wgdmFs
dWUpCiB7CiAgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZy
YW1lSUQpOwpAQCAtMTg1NCw2ICsxODYxLDE2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzdHJpbmdD
YWxsYmFjayhjb25zdCAKICAgICBjYWxsYmFjay0+cGVyZm9ybUNhbGxiYWNrV2l0aFJldHVyblZh
bHVlKHJlc3VsdFN0cmluZy5pbXBsKCkpOwogfQogCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBX
ZWJQYWdlUHJveHk6OnNlbmRBY2Nlc3NpYmlsaXR5UHJlc2VudGVyVG9rZW4oY29uc3QgQ29yZUlQ
Qzo6RGF0YVJlZmVyZW5jZSYgdG9rZW4pCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2VuZEFj
Y2Vzc2liaWxpdHlQcmVzZW50ZXJUb2tlbih0b2tlbiksIG1fcGFnZUlEKTsKK30KKyNlbmRpZgor
CiB2b2lkIFdlYlBhZ2VQcm94eTo6Zm9jdXNlZEZyYW1lQ2hhbmdlZCh1aW50NjRfdCBmcmFtZUlE
KQogewogICAgIGlmICghZnJhbWVJRCkgewpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJ
KHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShN
QUMpCiAgICAgdm9pZCB1cGRhdGVXaW5kb3dJc1Zpc2libGUoYm9vbCB3aW5kb3dJc1Zpc2libGUp
OwotICAgIHZvaWQgd2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKTsKKyAgICB2b2lkIHdpbmRvd0FuZFZp
ZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3Jl
ZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dD
b29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGFjY2Vzc2liaWxpdHlWaWV3Q29v
cmRpbmF0ZXMpOwogICAgIHZvaWQgZ2V0TWFya2VkUmFuZ2UodWludDY0X3QmIGxvY2F0aW9uLCB1
aW50NjRfdCYgbGVuZ3RoKTsKICAgICB1aW50NjRfdCBjaGFyYWN0ZXJJbmRleEZvclBvaW50KGNv
bnN0IFdlYkNvcmU6OkludFBvaW50KTsKICAgICBXZWJDb3JlOjpJbnRSZWN0IGZpcnN0UmVjdEZv
ckNoYXJhY3RlclJhbmdlKHVpbnQ2NF90LCB1aW50NjRfdCk7CkBAIC0yMzAsNiArMjMwLDkgQEAg
cHVibGljOgogCiAgICAgdm9pZCBzY2FsZVdlYlZpZXcoZG91YmxlIHNjYWxlLCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgb3JpZ2luKTsKICAgICBkb3VibGUgdmlld1NjYWxlRmFjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV92aWV3U2NhbGVGYWN0b3I7IH0KKyNpZiBQTEFURk9STShNQUMpCisgICAg
dm9pZCBzZW5kQWNjZXNzaWJpbGl0eVByZXNlbnRlclRva2VuKGNvbnN0IENvcmVJUEM6OkRhdGFS
ZWZlcmVuY2UmKTsKKyNlbmRpZgogCiAgICAgLy8gRmluZC4KICAgICB2b2lkIGZpbmRTdHJpbmco
Y29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpOwpAQCAt
MzMzLDYgKzMzNiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRTdGFydFByb2dyZXNzKCk7CiAg
ICAgdm9pZCBkaWRDaGFuZ2VQcm9ncmVzcyhkb3VibGUpOwogICAgIHZvaWQgZGlkRmluaXNoUHJv
Z3Jlc3MoKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVBY2Nlc3NpYmlsaXR5UGFnZVRva2VuKGNvbnN0
IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKTsKICAgICAKICAgICB2b2lkIGRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24odWludDY0X3QgZnJhbWVJRCwgdWludDMyX3QgbmF2aWdhdGlvblR5
cGUsIHVpbnQzMl90IG1vZGlmaWVycywgaW50MzJfdCBtb3VzZUJ1dHRvbiwgY29uc3QgU3RyaW5n
JiB1cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQpOwogICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmV3
V2luZG93QWN0aW9uKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQzMl90IG5hdmlnYXRpb25UeXBlLCB1
aW50MzJfdCBtb2RpZmllcnMsIGludDMyX3QgbW91c2VCdXR0b24sIGNvbnN0IFN0cmluZyYgdXJs
LCB1aW50NjRfdCBsaXN0ZW5lcklEKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDgg
QEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBEYXRhQ2FsbGJhY2soQ29yZUlQQzo6
RGF0YVJlZmVyZW5jZSByZXN1bHREYXRhLCB1aW50NjRfdCBjYWxsYmFja0lEKQogICAgIFN0cmlu
Z0NhbGxiYWNrKFdURjo6U3RyaW5nIHJlc3VsdFN0cmluZywgdWludDY0X3QgY2FsbGJhY2tJRCkK
IAorICAgIERpZFJlY2VpdmVBY2Nlc3NpYmlsaXR5UGFnZVRva2VuKENvcmVJUEM6OkRhdGFSZWZl
cmVuY2UgZGF0YSkKKwogI2lmIFBMQVRGT1JNKE1BQykKICAgICAjIEtleWJvYXJkIHN1cHBvcnQg
bWVzc2FnZXMuCiAgICAgSW50ZXJwcmV0S2V5RXZlbnQodWludDMyX3QgdHlwZSkgLT4gKFZlY3Rv
cjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+IGNvbW1hbmROYW1lLCB1aW50MzJfdCBzZWxlY3Rp
b25TdGFydCwgdWludDMyX3Qgc2VsZWN0aW9uRW5kLCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRp
b25VbmRlcmxpbmU+IHVuZGVybGluZXMpCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1BhZ2VDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsNyBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkTGVhdmVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCk7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NpYmlsaXR5Q2hpbGRU
b2tlblJlY2VpdmVkKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKTsgICAgCiAgICAgdmly
dHVhbCB2b2lkIHNldENvbXBsZXhUZXh0SW5wdXRFbmFibGVkKHVpbnQ2NF90IHBsdWdpbkNvbXBs
ZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBib29sIGNvbXBsZXhUZXh0SW5wdXRFbmFibGVkKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNlQ3VzdG9t
UmVwcmVzZW50YXRpb24pOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xp
ZW50SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VD
bGllbnRJbXBsLm1tCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvUGFnZUNsaWVudEltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbXBvcnQgIlBhZ2VDbGllbnRJbXBs
LmgiCiAKKyNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKICNpbXBvcnQgIkZpbmRJbmRpY2F0b3Iu
aCIKICNpbXBvcnQgIldLQVBJQ2FzdC5oIgogI2ltcG9ydCAiV0tTdHJpbmdDRi5oIgpAQCAtMjU3
LDYgKzI1OCwxMiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRGaW5kSW5kaWNhdG9yKFBhCiAg
ICAgW21fd2tWaWV3IF9zZXRGaW5kSW5kaWNhdG9yOmZpbmRJbmRpY2F0b3IgZmFkZU91dDpmYWRl
T3V0XTsKIH0KIAordm9pZCBQYWdlQ2xpZW50SW1wbDo6YWNjZXNzaWJpbGl0eUNoaWxkVG9rZW5S
ZWNlaXZlZChjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQoreworICAgIE5TRGF0
YSogcmVtb3RlVG9rZW4gPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5kYXRhKCkgbGVuZ3Ro
OmRhdGEuc2l6ZSgpXTsKKyAgICBbbV93a1ZpZXcgX3NldEFjY2Vzc2liaWxpdHlDaGlsZFRva2Vu
OnJlbW90ZVRva2VuXTsKK30KKyAgICAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpwYWdlRGlkRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCkKIHsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCShyZXZpc2lvbiA3NDk3
MykKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjaW1wb3J0ICJXS1ZpZXcuaCIKIAogI2ltcG9ydCAiQ2h1bmtl
ZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuaCIKKyNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKICNp
bXBvcnQgIkZpbmRJbmRpY2F0b3IuaCIKICNpbXBvcnQgIkZpbmRJbmRpY2F0b3JXaW5kb3cuaCIK
ICNpbXBvcnQgIkxheWVyQmFja2VkRHJhd2luZ0FyZWFQcm94eS5oIgpAQCAtNTEsNiArNTIsNyBA
QAogI2ltcG9ydCA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0tleWJvYXJk
RXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KKyNpbXBvcnQgPFdl
YktpdFN5c3RlbUludGVyZmFjZS5oPgogI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgogCkBAIC05NCw2ICs5Niw4IEBAIEBpbnRlcmZhY2UgV0tWaWV3RGF0
YSA6IE5TT2JqZWN0IHsKICAgICBOU1ZpZXcgKl9sYXllckhvc3RpbmdWaWV3OwogI2VuZGlmCiAK
KyAgICBSZXRhaW5QdHI8aWQ+IF9yZW1vdGVBY2Nlc3NpYmlsaXR5Q2hpbGQ7CisgICAgCiAgICAg
Ly8gRm9yIGFzeW5jaHJvbm91cyB2YWxpZGF0aW9uLgogICAgIFZhbGlkYXRpb25NYXAgX3ZhbGlk
YXRpb25NYXA7CiAKQEAgLTE2Miw2ICsxNjYsMTIgQEAgLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNS
ZWN0KWZyYW1lIGNvbnRleAogCiAgICAgV2ViQ29udGV4dDo6c3RhdGlzdGljcygpLndrVmlld0Nv
dW50Kys7CiAKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgTlNE
YXRhICpyZW1vdGVUb2tlbiA9IChOU0RhdGEgKilXS0FYUmVtb3RlVG9rZW5Gb3JFbGVtZW50KHNl
bGYpOworICAgIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVRva2VuID0gQ29yZUlQQzo6RGF0
YVJlZmVyZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihbcmVtb3RlVG9rZW4g
Ynl0ZXNdKSwgW3JlbW90ZVRva2VuIGxlbmd0aF0pOworICAgIF9kYXRhLT5fcGFnZS0+c2VuZEFj
Y2Vzc2liaWxpdHlQcmVzZW50ZXJUb2tlbihkYXRhVG9rZW4pOworI2VuZGlmCisgICAgCiAgICAg
cmV0dXJuIHNlbGY7CiB9CiAKQEAgLTI0Myw4ICsyNTMsOSBAQCAtICh2b2lkKV91cGRhdGVXaW5k
b3dBbmRWaWV3RnJhbWVzCiAgICAgCiAgICAgTlNSZWN0IHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29y
ZGluYXRlcyA9IFt3aW5kb3cgZnJhbWVdOwogICAgIE5TUmVjdCB2aWV3RnJhbWVJbldpbmRvd0Nv
b3JkaW5hdGVzID0gW3NlbGYgY29udmVydFJlY3Q6W3NlbGYgZnJhbWVdIHRvVmlldzpuaWxdOwor
ICAgIE5TUG9pbnQgYWNjZXNzaWJpbGl0eVBvc2l0aW9uID0gW1tzZWxmIGFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlQb3NpdGlvbkF0dHJpYnV0ZV0gcG9pbnRWYWx1
ZV07CiAgICAgCi0gICAgX2RhdGEtPl9wYWdlLT53aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChl
bmNsb3NpbmdJbnRSZWN0KHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcyksIGVuY2xvc2lu
Z0ludFJlY3Qodmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykpOworICAgIF9kYXRhLT5fcGFn
ZS0+d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoZW5jbG9zaW5nSW50UmVjdCh3aW5kb3dGcmFt
ZUluU2NyZWVuQ29vcmRpbmF0ZXMpLCBlbmNsb3NpbmdJbnRSZWN0KHZpZXdGcmFtZUluV2luZG93
Q29vcmRpbmF0ZXMpLCBJbnRQb2ludChhY2Nlc3NpYmlsaXR5UG9zaXRpb24pKTsKIH0KIAogLSAo
dm9pZClyZW5ld0dTdGF0ZQpAQCAtOTEwLDYgKzkyMSw0MyBAQCAtICh2b2lkKXZpZXdEaWRVbmhp
ZGUKICAgICBbc2VsZiBfdXBkYXRlVmlzaWJpbGl0eV07CiB9CiAKKy0gKHZvaWQpX3NldEFjY2Vz
c2liaWxpdHlDaGlsZFRva2VuOihOU0RhdGEgKilkYXRhCit7CisjaWYgIWRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKQorICAgIF9kYXRhLT5fcmVtb3RlQWNjZXNzaWJpbGl0eUNoaWxk
ID0gV0tBWFJlbW90ZUVsZW1lbnRGb3JUb2tlbigoQ0ZEYXRhUmVmKWRhdGEpOworICAgIFdLQVhJ
bml0aWFsaXplUmVtb3RlRWxlbWVudFdpdGhXaW5kb3coX2RhdGEtPl9yZW1vdGVBY2Nlc3NpYmls
aXR5Q2hpbGQuZ2V0KCksIFtzZWxmIHdpbmRvd10pOworI2VuZGlmCit9CisKKy0gKEJPT0wpYWNj
ZXNzaWJpbGl0eUlzSWdub3JlZAoreworICAgIHJldHVybiBOTzsKK30KKworLSAoaWQpYWNjZXNz
aWJpbGl0eUhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQKK3sKKyAgICByZXR1cm4gX2RhdGEtPl9yZW1v
dGVBY2Nlc3NpYmlsaXR5Q2hpbGQuZ2V0KCk7Cit9CisKKy0gKGlkKWFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVWYWx1ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZQoreworICAgIGlmIChbYXR0cmlidXRlIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV0pIHsKKyAgICAg
ICAgaWYgKCFfZGF0YS0+X3JlbW90ZUFjY2Vzc2liaWxpdHlDaGlsZCkKKyAgICAgICAgICAgIHJl
dHVybiBuaWw7CisgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6X2RhdGEt
Pl9yZW1vdGVBY2Nlc3NpYmlsaXR5Q2hpbGQuZ2V0KCldOworICAgIH0KKyAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZV0pCisgICAg
ICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGU7CisgICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZV0p
CisgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb24oTlNBY2Nlc3Np
YmlsaXR5R3JvdXBSb2xlLCBuaWwpOworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlQYXJlbnRBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gTlNBY2Nl
c3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoW3NlbGYgc3VwZXJ2aWV3XSk7CisgICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGVd
KQorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU107CisgICAgCisg
ICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6YXR0cmlidXRlXTsK
K30KKwogLSAoTlNWaWV3ICopaGl0VGVzdDooTlNQb2ludClwb2ludAogewogICAgIE5TVmlldyAq
aGl0VmlldyA9IFtzdXBlciBoaXRUZXN0OnBvaW50XTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2
ICs1Miw3IEBAIEBpbnRlcmZhY2UgV0tWaWV3IChJbnRlcm5hbCkKIC0gKHZvaWQpX3BhZ2VEaWRM
ZWF2ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmc7CiAjZW5kaWYKIAorLSAodm9pZClfc2V0QWNjZXNz
aWJpbGl0eUNoaWxkVG9rZW46KE5TRGF0YSAqKWRhdGE7CiAtICh2b2lkKV9zZXRDb21wbGV4VGV4
dElucHV0RW5hYmxlZDooQk9PTCljb21wbGV4VGV4dElucHV0RW5hYmxlZCBwbHVnaW5Db21wbGV4
VGV4dElucHV0SWRlbnRpZmllcjoodWludDY0X3QpcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50
aWZpZXI7CiAKIC0gKHZvaWQpX3NldFBhZ2VIYXNDdXN0b21SZXByZXNlbnRhdGlvbjooQk9PTClw
YWdlSGFzQ3VzdG9tUmVwcmVzZW50YXRpb247CkluZGV4OiBXZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIwOSw4
IEBACiAJCTFDQThCOTQ1MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQ0E4Qjk0MzEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwICovOyB9OwogCQkxQ0E4Qjk0NjEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5z
cGVjdG9yUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUNBOEI5NDQxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5
TWVzc2FnZXMuaCAqLzsgfTsKIAkJMUNBOEI5NTQxMjdDODkxNTAwNTc2QzJCIC8qIFdlYkluc3Bl
Y3Rvck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFDOEUyREFEMTI3OEM1QjIwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JNYWMubW0gKi87IH07CisJ
CTI5Q0Q1NUFBMTI4RTI5NEYwMDEzM0M4NSAvKiBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlDRDU1QTgx
MjhFMjk0RjAwMTMzQzg1IC8qIEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0LmggKi87IH07CisJ
CTI5Q0Q1NUFCMTI4RTI5NEYwMDEzM0M4NSAvKiBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5Q0Q1NUE5
MTI4RTI5NEYwMDEzM0M4NSAvKiBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5tbSAqLzsgfTsK
IAkJMzdGNjIzQjgxMkE1N0I2MjAwRTNGREY2IC8qIFdLRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RjYyM0I3MTJBNTdCNjIwMEUz
RkRGNiAvKiBXS0ZpbmRPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVi
bGljLCApOyB9OyB9OwogCQk1MTAyMUU5QzEyQjE2Nzg4MDA1QzAzM0MgLyogV2ViQ29udGV4dE1l
bnVDbGllbnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTAyMUU5QjEyQjE2Nzg4MDA1QzAzM0MgLyogV2ViQ29udGV4dE1lbnVDbGllbnRNYWMu
bW0gKi87IH07CiAJCTUxMEZCQjlBMTI4OEM5NUUwMEFGRkRGNCAvKiBXZWJDb250ZXh0TWVudUl0
ZW1EYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxMEZCQjk4MTI4OEM5NUUwMEFGRkRGNCAvKiBXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcCAq
LzsgfTsKQEAgLTg4MSw2ICs4ODMsOCBAQAogCQkxQ0E4QjkzNTEyN0M3NzRFMDA1NzZDMkIgLyog
V2ViSW5zcGVjdG9yUHJveHlNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXZWJJbnNwZWN0b3JQcm94eU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUNBOEI5NDMxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYklu
c3BlY3RvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUNBOEI5NDQxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWVzc2Fn
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSW5zcGVjdG9yUHJveHlN
ZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyOUNENTVBODEyOEUyOTRG
MDAxMzNDODUgLyogQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjlDRDU1QTkxMjhFMjk0RjAwMTMzQzg1IC8qIEFjY2Vzc2li
aWxpdHlXZWJQYWdlT2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTMyREJDRjVFMDM3MEFERUUwMEM5MTc4MyAvKiBXZWJLaXQyUHJlZml4LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdDJQcmVmaXguaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGNjIzQjcxMkE1N0I2MjAwRTNGREY2IC8qIFdLRmluZE9w
dGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tGaW5kT3B0aW9ucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAyMUU5QjEyQjE2Nzg4MDA1QzAzM0Mg
LyogV2ViQ29udGV4dE1lbnVDbGllbnRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJDb250ZXh0TWVudUNsaWVudE1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIzMjYsNiArMjMzMCw4IEBACiAJCUJDOTYzRDZDMTEzREQxOTUwMDU3
NEJFMiAvKiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCTI5Q0Q1NUE5MTI4RTI5NEYwMDEzM0M4NSAvKiBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVj
dC5tbSAqLywKKwkJCQkyOUNENTVBODEyOEUyOTRGMDAxMzNDODUgLyogQWNjZXNzaWJpbGl0eVdl
YlBhZ2VPYmplY3QuaCAqLywKIAkJCQlCQzVGN0JCODExODIzNzk5MDA1MkMwMkMgLyogQ2h1bmtl
ZFVwZGF0ZURyYXdpbmdBcmVhTWFjLmNwcCAqLywKIAkJCQkwRjUyNjVCNTExREQzNzcwMDAwNkQz
M0MgLyogTGF5ZXJCYWNrZWREcmF3aW5nQXJlYU1hYy5tbSAqLywKIAkJCQkxQzhFMkRBRDEyNzhD
NUIyMDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yTWFjLm1tICovLApAQCAtMjc3Myw2ICsyNzc5LDcg
QEAKIAkJCQlCQ0VFN0RDNTEyOEI2NDVEMDA5ODI3REEgLyogSW5qZWN0ZWRCdW5kbGVDbGllbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUVEODJBN0YyMTI4QzZGQUYwMDQ0NzdCMyAvKiBXS0J1bmRs
ZVBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0E4Qjk0NjEyN0M4ODJBMDA1NzZD
MkIgLyogV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjlD
RDU1QUExMjhFMjk0RjAwMTMzQzg1IC8qIEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTUzNTY5RDEyOTFCMUQyMDAwNzQ5REMgLyogV2ViUGFnZUNvbnRl
eHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUFCNEE4RDEyOTZGMEEyMDAyMzk1
MkYgLyogU2FuZGJveEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3QjYyMDYxMjlB
MEE2NzAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjA0LDYg
KzMyMTEsNyBAQAogCQkJCTFDQThCOTQ1MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQ0E4Qjk1NDEyN0M4
OTE1MDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRURD
QTcxQjcxMjhEREE4QzAwMjAxQjI2IC8qIFdLQnVuZGxlUGFnZU92ZXJsYXkuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMjlDRDU1QUIxMjhFMjk0RjAwMTMzQzg1IC8qIEFjY2Vzc2liaWxpdHlXZWJQ
YWdlT2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1MzU2OUMxMjkxQjFEMjAwMDc0OURD
IC8qIFdlYlBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUFC
NEFBQTEyOTZGMTU0MDAyMzk1MkYgLyogU2FuZGJveEV4dGVuc2lvbk1hYy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDN0I2MjA3MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXAuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiA3
NDk3MykKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc3LDYgKzE3NywxMCBAQCB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9j
ZXNzKGNvCiAgICAgICAgIGNsZWFyUmVzb3VyY2VDYWNoZXMoKTsKICAgICBpZiAocGFyYW1ldGVy
cy5jbGVhckFwcGxpY2F0aW9uQ2FjaGUpCiAgICAgICAgIGNsZWFyQXBwbGljYXRpb25DYWNoZSgp
OworICAgIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBtX3ByZXNlbnRlckFwcGxpY2F0aW9uUGlk
ID0gcGFyYW1ldGVycy5wcmVzZW50ZXJBcHBsaWNhdGlvblBpZDsKKyNlbmRpZgogCiAgICAgaWYg
KHBhcmFtZXRlcnMuc2hvdWxkQWx3YXlzVXNlQ29tcGxleFRleHRDb2RlUGF0aCkKICAgICAgICAg
c2V0QWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGgodHJ1ZSk7CkluZGV4OiBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsMTAgQEAgcHVibGljOgogICAgIFdl
YlBhZ2VHcm91cFByb3h5KiB3ZWJQYWdlR3JvdXAodWludDY0X3QgcGFnZUdyb3VwSUQpOwogICAg
IFdlYlBhZ2VHcm91cFByb3h5KiB3ZWJQYWdlR3JvdXAoY29uc3QgV2ViUGFnZUdyb3VwRGF0YSYp
OwogICAgIHN0YXRpYyBXZWJDb3JlOjpQYWdlR3JvdXAqIHNoYXJlZFBhZ2VHcm91cCgpOwotCisj
aWYgUExBVEZPUk0oTUFDKQorICAgIHBpZF90IHByZXNlbnRlckFwcGxpY2F0aW9uUGlkKCkgY29u
c3QgeyByZXR1cm4gbV9wcmVzZW50ZXJBcHBsaWNhdGlvblBpZDsgfQorI2VuZGlmIAorICAgIAog
I2lmIFBMQVRGT1JNKFFUKQogICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbmV0d29ya0FjY2Vz
c01hbmFnZXIoKSB7IHJldHVybiBtX25ldHdvcmtBY2Nlc3NNYW5hZ2VyOyB9CiAjZW5kaWYKQEAg
LTE1OSw2ICsxNjIsOSBAQCBwcml2YXRlOgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykgJiYgUExBVEZPUk0oTUFDKQogICAgIG1hY2hfcG9ydF90IG1fY29tcG9zaXRpbmdSZW5kZXJT
ZXJ2ZXJQb3J0OwogI2VuZGlmCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHBpZF90IG1fcHJlc2Vu
dGVyQXBwbGljYXRpb25QaWQ7CisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgIFFOZXR3
b3JrQWNjZXNzTWFuYWdlciogbV9uZXR3b3JrQWNjZXNzTWFuYWdlcjsKSW5kZXg6IFdlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVy
Q2xpZW50LmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjU3
LDYgKzEyNTcsMTIgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJYwog
fQogCiAjaWYgUExBVEZPUk0oTUFDKQorICAgIAorUmVtb3RlQVhPYmplY3RSZWYgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKSAKK3sKKyAgICByZXR1cm4g
bV9mcmFtZS0+cGFnZSgpLT5hY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCk7Cit9CisgICAgCiAj
aWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKIGpvYmplY3QgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmphdmFBcHBsZXQoTlNWaWV3KikgeyByZXR1cm4gMDsgfQogI2VuZGlmCkluZGV4OiBXZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJD
bGllbnQuaAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDYgKzIw
MSw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNh
dGlvbihib29sIGxpc3RlbiA9IHRydWUpOwogICAgIAogI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2
aXJ0dWFsIFJlbW90ZUFYT2JqZWN0UmVmIGFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKTsKKyAg
ICAKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQogICAgIHZpcnR1YWwgam9iamVjdCBqYXZh
QXBwbGV0KE5TVmlldyopOwogI2VuZGlmCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAkocmV2aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxMiwxMSArMTMxMiwxMiBAQCB2b2lk
IFdlYlBhZ2U6OnNldFdpbmRvd0lzVmlzaWJsZShib29sIHdpCiAgICAgICAgICgqaXQpLT5zZXRX
aW5kb3dJc1Zpc2libGUod2luZG93SXNWaXNpYmxlKTsKIH0KIAotdm9pZCBXZWJQYWdlOjp3aW5k
b3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFt
ZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUlu
V2luZG93Q29vcmRpbmF0ZXMpCit2b2lkIFdlYlBhZ2U6OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFu
Z2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRl
cywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcywg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGFjY2Vzc2liaWxpdHlWaWV3Q29vcmRpbmF0ZXMpCiB7
CiAgICAgbV93aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMgPSB3aW5kb3dGcmFtZUluU2Ny
ZWVuQ29vcmRpbmF0ZXM7CiAgICAgbV92aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzID0gdmll
d0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlczsKLQorICAgIG1fYWNjZXNzaWJpbGl0eVBvc2l0aW9u
ID0gYWNjZXNzaWJpbGl0eVZpZXdDb29yZGluYXRlczsKKyAgICAKICAgICAvLyBUZWxsIGFsbCBv
dXIgcGx1Zy1pbiB2aWV3cyB0aGF0IHRoZSB3aW5kb3cgYW5kIHZpZXcgZnJhbWVzIGhhdmUgY2hh
bmdlZC4KICAgICBmb3IgKEhhc2hTZXQ8UGx1Z2luVmlldyo+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcGx1Z2luVmlld3MuYmVnaW4oKSwgZW5kID0gbV9wbHVnaW5WaWV3cy5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KQogICAgICAgICAoKml0KS0+d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQod2lu
ZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVz
KTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDc0OTcz
KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw2ICs1MiwxNSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Ub3VjaEV2ZW50
Lmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CisjaWZkZWYgX19PQkpDX18KK0BjbGFzcyBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdDsK
KyNlbHNlCitjbGFzcyBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdDsKKyNlbmRpZgorI2VuZGlm
CisKIG5hbWVzcGFjZSBDb3JlSVBDIHsKICAgICBjbGFzcyBBcmd1bWVudERlY29kZXI7CiAgICAg
Y2xhc3MgQ29ubmVjdGlvbjsKQEAgLTI1Myw2ICsyNjIsMTAgQEAgcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIGdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKFdlYkNvcmU6OlJhbmdlKiwgdWlu
dDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKTsKIAogI2lmIFBMQVRGT1JNKE1BQykK
KyAgICB2b2lkIHNlbmRBY2Nlc3NpYmlsaXR5UHJlc2VudGVyVG9rZW4oY29uc3QgQ29yZUlQQzo6
RGF0YVJlZmVyZW5jZSYpOworICAgIEFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0KiBhY2Nlc3Np
YmlsaXR5UmVtb3RlT2JqZWN0KCk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgYWNjZXNzaWJpbGl0
eVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hY2Nlc3NpYmlsaXR5UG9zaXRpb247IH0gICAg
CisgICAgCiAgICAgdm9pZCBzZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90IHBs
dWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHRleHRJbnB1dCk7
CiAKICAgICB2b2lkIGdldE1hcmtlZFJhbmdlKHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3Qm
IGxlbmd0aCk7CkBAIC0zNDAsNyArMzUzLDcgQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKE1B
QykKICAgICB2b2lkIHNldFdpbmRvd0lzVmlzaWJsZShib29sIHdpbmRvd0lzVmlzaWJsZSk7Ci0g
ICAgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpOworICAgIHZvaWQgd2luZG93QW5kVmlld0Zy
YW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNv
b3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3Jk
aW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgYWNjZXNzaWJpbGl0eVZpZXdDb29yZGlu
YXRlcyk7CiAjZW5kaWYKIAogICAgIHZvaWQgdW5hcHBseUVkaXRDb21tYW5kKHVpbnQ2NF90IGNv
bW1hbmRJRCk7CkBAIC0zOTcsOCArNDEwLDEzIEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIGZyYW1l
IG9mIHRoZSB2aWV3IGluIHdpbmRvdyBjb29yZGluYXRlcy4KICAgICBXZWJDb3JlOjpJbnRSZWN0
IG1fdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlczsKIAorICAgIC8vIFRoZSBhY2Nlc3NpYmls
aXR5IHBvc2l0aW9uIG9mIHRoZSB2aWV3LgorICAgIFdlYkNvcmU6OkludFBvaW50IG1fYWNjZXNz
aWJpbGl0eVBvc2l0aW9uOworICAgIAogICAgIC8vIEFsbCBwbHVnLWluIHZpZXdzIG9uIHRoaXMg
d2ViIHBhZ2UuCiAgICAgSGFzaFNldDxQbHVnaW5WaWV3Kj4gbV9wbHVnaW5WaWV3czsKKyAgICAK
KyAgICBSZXRhaW5QdHI8QWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3Q+IG1fbW9ja0FjY2Vzc2li
aWxpdHlFbGVtZW50OwogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIC8vIE91ciB2aWV3J3Mgd2lu
ZG93IChpbiB0aGUgVUkgcHJvY2VzcykuCiAgICAgSFdORCBtX25hdGl2ZVdpbmRvdzsKSW5kZXg6
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2
aXNpb24gNzQ5NzMpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3Nh
Z2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTAgKzExNSwxMSBAQCBtZXNzYWdlcyAtPiBX
ZWJQYWdlIHsKICAgICBTZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90IHBsdWdp
bkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBTdHJpbmcgdGV4dElucHV0KQogCiAgICAgU2V0
V2luZG93SXNWaXNpYmxlKGJvb2wgd2luZG93SXNWaXNpYmxlKQotICAgIFdpbmRvd0FuZFZpZXdG
cmFtZXNDaGFuZ2VkKFdlYkNvcmU6OkludFJlY3Qgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5h
dGVzLCBXZWJDb3JlOjpJbnRSZWN0IHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpCisgICAg
V2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoV2ViQ29yZTo6SW50UmVjdCB3aW5kb3dGcmFtZUlu
U2NyZWVuQ29vcmRpbmF0ZXMsIFdlYkNvcmU6OkludFJlY3Qgdmlld0ZyYW1lSW5XaW5kb3dDb29y
ZGluYXRlcywgV2ViQ29yZTo6SW50UG9pbnQgYWNjZXNzaWJpbGl0eVZpZXdDb29yZGluYXRlcykK
ICAgICBHZXRNYXJrZWRSYW5nZSgpIC0+ICh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVu
Z3RoKQogICAgIENoYXJhY3RlckluZGV4Rm9yUG9pbnQoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQp
IC0+ICh1aW50NjRfdCByZXN1bHQpCiAgICAgRmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodWlu
dDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0aCkgLT4gKFdlYkNvcmU6OkludFJlY3QgcmVz
dWx0UmVjdCkKKyAgICBTZW5kQWNjZXNzaWJpbGl0eVByZXNlbnRlclRva2VuKENvcmVJUEM6OkRh
dGFSZWZlcmVuY2UgdG9rZW4pCiAjZW5kaWYKICNpZiBQTEFURk9STShXSU4pCiAgICAgQ29uZmly
bUNvbXBvc2l0aW9uKFdURjo6U3RyaW5nIGNvbXBvc2l0aW9uU3RyaW5nKQpJbmRleDogV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0FjY2Vzc2liaWxpdHlX
ZWJQYWdlT2JqZWN0LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3Rf
aAorI2RlZmluZSBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdF9oCisKK25hbWVzcGFjZSBXZWJL
aXQgeworY2xhc3MgV2ViUGFnZTsKK30KKworQGludGVyZmFjZSBBY2Nlc3NpYmlsaXR5V2ViUGFn
ZU9iamVjdCA6IE5TT2JqZWN0IHsKKyAgICBXZWJLaXQ6OldlYlBhZ2UqIG1fcGFnZTsKKyAgICAK
KyAgICBpZCBtX3BhcmVudDsKKyAgICBOU0FycmF5KiBtX2F0dHJpYnV0ZU5hbWVzOworICAgIE5T
TXV0YWJsZUFycmF5KiBtX2FjY2Vzc2liaWxpdHlDaGlsZHJlbjsKK30KKworLSAodm9pZClzZXRX
ZWJQYWdlOihXZWJLaXQ6OldlYlBhZ2UqKXBhZ2U7CisKKy0gKHZvaWQpc2V0UmVtb3RlUGFyZW50
OihpZClwYXJlbnQ7CisKK0BlbmQKKworI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlXZWJQYWdlT2Jq
ZWN0X2gKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9BY2Nlc3NpYmlsaXR5
V2ViUGFnZU9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QubW0JKHJldmlzaW9uIDApCisrKyBXZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QubW0J
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiQWNj
ZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QuaCIKKworI2ltcG9ydCAiV2ViRnJhbWUuaCIKKyNpbXBv
cnQgIldlYlBhZ2UuaCIKKyNpbXBvcnQgPEFwcEtpdC9OU0FjY2Vzc2liaWxpdHlSZW1vdGVVSUVs
ZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQVhPYmplY3RDYWNoZS5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvU2Nyb2xsVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXIuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitAaW1wbGVt
ZW50YXRpb24gQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QKKworLSAoaWQpYWNjZXNzaWJpbGl0
eVJvb3RPYmplY3RXcmFwcGVyCit7CisgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IG1fcGFnZS0+
Y29yZVBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisg
ICAgV2ViQ29yZTo6RnJhbWUqIGNvcmUgPSBwYWdlLT5tYWluRnJhbWUoKTsKKyAgICBpZiAoIWNv
cmUgfHwgIWNvcmUtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogcm9vdCA9IGNvcmUtPmRvY3VtZW50KCktPmF4T2JqZWN0Q2Fj
aGUoKS0+cm9vdE9iamVjdCgpOworICAgIGlmICghcm9vdCkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICAKKyAgICByZXR1cm4gcm9vdC0+d3JhcHBlcigpOworfQorCistICh2b2lkKXNldFdlYlBh
Z2U6KFdlYlBhZ2UqKXBhZ2UKK3sKKyAgICBtX3BhZ2UgPSBwYWdlOworfQorCistICh2b2lkKXNl
dFJlbW90ZVBhcmVudDooaWQpcGFyZW50Cit7CisgICAgaWYgKHBhcmVudCAhPSBtX3BhcmVudCkg
eworICAgICAgICBbbV9wYXJlbnQgcmVsZWFzZV07CisgICAgICAgIG1fcGFyZW50ID0gW3BhcmVu
dCByZXRhaW5dOworICAgIH0KK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW21fYWNjZXNz
aWJpbGl0eUNoaWxkcmVuIHJlbGVhc2VdOworICAgIFttX2F0dHJpYnV0ZU5hbWVzIHJlbGVhc2Vd
OworICAgIFttX3BhcmVudCByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0g
KEJPT0wpYWNjZXNzaWJpbGl0eUlzSWdub3JlZAoreworICAgIHJldHVybiBOTzsKK30KKworLSAo
TlNBcnJheSAqKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcworeworICAgIGlmICghbV9hdHRy
aWJ1dGVOYW1lcykKKyAgICAgICAgbV9hdHRyaWJ1dGVOYW1lcyA9IFtbTlNBcnJheSBhbGxvY10g
aW5pdFdpdGhPYmplY3RzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmls
aXR5Um9sZUF0dHJpYnV0ZSwgTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0cmlidXRl
LCBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTlNBY2Nlc3NpYmlsaXR5UGFyZW50QXR0cmlidXRlLCBOU0FjY2Vzc2liaWxpdHlXaW5k
b3dBdHRyaWJ1dGUsIE5TQWNjZXNzaWJpbGl0eVRvcExldmVsVUlFbGVtZW50QXR0cmlidXRlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1
dGUsIE5TQWNjZXNzaWJpbGl0eVNpemVBdHRyaWJ1dGUsIE5TQWNjZXNzaWJpbGl0eUNoaWxkcmVu
QXR0cmlidXRlLCBuaWxdOworCisgICAgcmV0dXJuIG1fYXR0cmlidXRlTmFtZXM7Cit9CisKKy0g
KEJPT0wpYWNjZXNzaWJpbGl0eUlzQXR0cmlidXRlU2V0dGFibGU6KE5TU3RyaW5nICopYXR0cmli
dXRlCit7CisgICAgcmV0dXJuIE5POworfQorCistICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRWYWx1
ZTooaWQpdmFsdWUgZm9yQXR0cmlidXRlOihOU1N0cmluZyAqKWF0dHJpYnV0ZSAKK3sKKyAgICBy
ZXR1cm47Cit9CisKKy0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5QWN0aW9uTmFtZXMKK3sKKyAg
ICByZXR1cm4gW05TQXJyYXkgYXJyYXldOworfQorCistIChOU0FycmF5ICopYWNjZXNzaWJpbGl0
eUNoaWxkcmVuCit7CisgICAgaWQgd3JhcHBlciA9IFtzZWxmIGFjY2Vzc2liaWxpdHlSb290T2Jq
ZWN0V3JhcHBlcl07CisgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICByZXR1cm4gW05TQXJyYXkg
YXJyYXldOworICAgIAorICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6d3JhcHBl
cl07Cit9CisKKy0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcgKilh
dHRyaWJ1dGUKK3sKKyAgICBpZiAoIVdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxp
dHlFbmFibGVkKCkpCisgICAgICAgIFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmVuYWJsZUFjY2Vz
c2liaWxpdHkoKTsKKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5UGFyZW50QXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIG1fcGFyZW50Owor
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlXaW5kb3dB
dHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW21fcGFyZW50IHdpbmRvd1VJRWxlbWVudF07Cisg
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRvcExldmVs
VUlFbGVtZW50QXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFttX3BhcmVudCB0b3BMZXZlbFVJ
RWxlbWVudF07CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eVJvbGVBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5R3JvdXBS
b2xlOworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlS
b2xlRGVzY3JpcHRpb25BdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5
Um9sZURlc2NyaXB0aW9uKE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSwgbmlsKTsKKyAgICBpZiAo
W2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0
ZV0pCisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dOworCisgICAg
aWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdKSB7CisgICAg
ICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50ID0gbV9wYWdlLT5hY2Nlc3NpYmlsaXR5UG9zaXRp
b24oKTsKKyAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFBvaW50Ok5TTWFrZVBvaW50
KHBvaW50LngoKSwgcG9pbnQueSgpKV07CisgICAgfQorICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTaXplQXR0cmlidXRlXSkgeworICAgICAgICBjb25z
dCBJbnRTaXplJiBzID0gbV9wYWdlLT5zaXplKCk7CisgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2
YWx1ZVdpdGhTaXplOk5TTWFrZVNpemUocy53aWR0aCgpLCBzLmhlaWdodCgpKV07CisgICAgfQor
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDaGlsZHJl
bkF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbc2VsZiBhY2Nlc3NpYmlsaXR5Q2hpbGRyZW5d
OworCisgICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6YXR0cmli
dXRlXTsKK30KKworLSAoQk9PTClhY2Nlc3NpYmlsaXR5U2hvdWxkVXNlVW5pcXVlSWQKK3sKKyAg
ICByZXR1cm4gWUVTOworfQorCistIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClw
b2ludCAKK3sKKyAgICAvLyBIaXQtdGVzdCBwb2ludCBjb21lcyBpbiBhcyBib3R0b20tc2NyZWVu
IGNvb3JkaW5hdGVzLiBOZWVkcyB0byBiZSBub3JtYWxpemVkIHRvIHRoZSBmcmFtZSBvZiB0aGUg
d2ViIHBhZ2UuCisgICAgTlNQb2ludCByZW1vdGVQb3NpdGlvbiA9IFtbc2VsZiBhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdIHBvaW50
VmFsdWVdOworICAgIE5TU2l6ZSByZW1vdGVTaXplID0gW1tzZWxmIGFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlTaXplQXR0cmlidXRlXSBzaXplVmFsdWVdOworICAg
IAorICAgIC8vIEdldCB0aGUgeSBwb3NpdGlvbiBvZiB0aGUgV0tWaWV3ICh3ZSBoYXZlIHRvIHNj
cmVlbi1mbGlwIGFuZCBnbyBmcm9tIGJvdHRvbSBsZWZ0IHRvIHRvcCBsZWZ0KS4KKyAgICBDR0Zs
b2F0IHNjcmVlbkhlaWdodCA9IFtbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0SW5kZXg6MF0g
ZnJhbWVdLnNpemUuaGVpZ2h0OworICAgIHJlbW90ZVBvc2l0aW9uLnkgPSAoc2NyZWVuSGVpZ2h0
IC0gcmVtb3RlUG9zaXRpb24ueSkgLSByZW1vdGVTaXplLmhlaWdodDsKKyAgICAKKyAgICBwb2lu
dC55ID0gc2NyZWVuSGVpZ2h0IC0gcG9pbnQueTsKKworICAgIC8vIFJlLWNlbnRlciBwb2ludCBp
bnRvIHRoZSB3ZWIgcGFnZSdzIGZyYW1lLgorICAgIHBvaW50LnkgLT0gcmVtb3RlUG9zaXRpb24u
eTsKKyAgICBwb2ludC54IC09IHJlbW90ZVBvc2l0aW9uLng7CisgICAgCisgICAgV2ViQ29yZTo6
RnJhbWVWaWV3KiBmdiA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPmNvcmVGcmFtZSgpLT52aWV3KCk7
CisgICAgaWYgKGZ2KSB7CisgICAgICAgIHBvaW50LnkgKz0gZnYtPnNjcm9sbFBvc2l0aW9uKCku
eSgpOworICAgICAgICBwb2ludC54ICs9IGZ2LT5zY3JvbGxQb3NpdGlvbigpLngoKTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIFtbc2VsZiBhY2Nlc3NpYmlsaXR5Um9vdE9iamVjdFdyYXBwZXJd
IGFjY2Vzc2liaWxpdHlIaXRUZXN0OnBvaW50XTsKK30KKworLSAoaWQpYWNjZXNzaWJpbGl0eUZv
Y3VzZWRVSUVsZW1lbnQgCit7CisgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVVuaWdub3JlZERl
c2NlbmRhbnQoc2VsZik7Cit9CisKKworQGVuZApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI1
LDExICsyNSwxNSBAQAogCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogCisjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eVdlYlBhZ2VPYmplY3QuaCIKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5j
bHVkZSAiUGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgog
I2luY2x1ZGUgIldlYkV2ZW50LmgiCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJX
ZWJQYWdlUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJv
bGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lVmlldy5oPgpAQCAtNDAsNiArNDQsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsVmll
dy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9XaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oPgorI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFj
ZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDgsNiArNTMsMjEgQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiB2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7CiAg
ICAgbV9wYWdlLT5hZGRTY2hlZHVsZVBhaXIoU2NoZWR1bGVQYWlyOjpjcmVhdGUoW05TUnVuTG9v
cCBjdXJyZW50UnVuTG9vcF0sIGtDRlJ1bkxvb3BDb21tb25Nb2RlcykpOworCisjaWYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIEFjY2Vzc2liaWxpdHlXZWJQYWdlT2Jq
ZWN0KiBtb2NrQWNjZXNzaWJpbGl0eUVsZW1lbnQgPSBbW1tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9i
amVjdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworCisgICAgLy8gR2V0IHRoZSBwaWQgZm9y
IHRoZSBzdGFydGluZyBwcm9jZXNzLgorICAgIHBpZF90IHBpZCA9IFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnByZXNlbnRlckFwcGxpY2F0aW9uUGlkKCk7ICAgIAorICAgIFdLQVhJbml0aWFsaXplRWxl
bWVudFdpdGhQcmVzZW50ZXJQaWQobW9ja0FjY2Vzc2liaWxpdHlFbGVtZW50LCBwaWQpOworICAg
IFttb2NrQWNjZXNzaWJpbGl0eUVsZW1lbnQgc2V0V2ViUGFnZTp0aGlzXTsKKyAgICAKKyAgICAv
LyBzZW5kIGRhdGEgYmFjayBvdmVyCisgICAgTlNEYXRhKiByZW1vdGVUb2tlbiA9IChOU0RhdGEg
KilXS0FYUmVtb3RlVG9rZW5Gb3JFbGVtZW50KG1vY2tBY2Nlc3NpYmlsaXR5RWxlbWVudCk7IAor
ICAgIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVRva2VuID0gQ29yZUlQQzo6RGF0YVJlZmVy
ZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihbcmVtb3RlVG9rZW4gYnl0ZXNd
KSwgW3JlbW90ZVRva2VuIGxlbmd0aF0pOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkUmVjZWl2ZUFjY2Vzc2liaWxpdHlQYWdlVG9rZW4oZGF0YVRva2VuKSk7CisgICAgbV9t
b2NrQWNjZXNzaWJpbGl0eUVsZW1lbnQgPSBtb2NrQWNjZXNzaWJpbGl0eUVsZW1lbnQ7CisjZW5k
aWYKIH0KIAogdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybVByZWZlcmVuY2VzRGlkQ2hhbmdlKGNvbnN0
IFdlYlByZWZlcmVuY2VzU3RvcmUmKQpAQCAtMzE0LDYgKzMzNCwxOSBAQCBib29sIFdlYlBhZ2U6
OnBlcmZvcm1EZWZhdWx0QmVoYXZpb3JGb3JLCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQg
V2ViUGFnZTo6c2VuZEFjY2Vzc2liaWxpdHlQcmVzZW50ZXJUb2tlbihjb25zdCBDb3JlSVBDOjpE
YXRhUmVmZXJlbmNlJiBkYXRhKQoreworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVP
UEFSRCkKKyAgICBOU0RhdGEqIHRva2VuRGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczpkYXRh
LmRhdGEoKSBsZW5ndGg6ZGF0YS5zaXplKCldOworICAgIFttX21vY2tBY2Nlc3NpYmlsaXR5RWxl
bWVudC5nZXQoKSBzZXRSZW1vdGVQYXJlbnQ6V0tBWFJlbW90ZUVsZW1lbnRGb3JUb2tlbigoQ0ZE
YXRhUmVmKXRva2VuRGF0YSldOworI2VuZGlmCit9CisKK0FjY2Vzc2liaWxpdHlXZWJQYWdlT2Jq
ZWN0KiBXZWJQYWdlOjphY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCkKK3sKKyAgICByZXR1cm4g
bV9tb2NrQWNjZXNzaWJpbGl0eUVsZW1lbnQuZ2V0KCk7Cit9CisgICAgICAgICAKIGJvb2wgV2Vi
UGFnZTo6cGxhdGZvcm1IYXNMb2NhbERhdGFGb3JVUkwoY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJs
KQogewogICAgIE5TTXV0YWJsZVVSTFJlcXVlc3QqIHJlcXVlc3QgPSBbW05TTXV0YWJsZVVSTFJl
cXVlc3QgYWxsb2NdIGluaXRXaXRoVVJMOnVybF07CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3Mv
bWFjL1dlYlByb2Nlc3NNYWluTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vz
cy9tYWMvV2ViUHJvY2Vzc01haW5NYWMubW0JKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0Mi9X
ZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFpbk1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMz
LDYgKzEzMywxMCBAQCBpbnQgV2ViUHJvY2Vzc01haW4oY29uc3QgQ29tbWFuZExpbmUmIGNvCiAg
ICAgIC8vIEluaXRpYWxpemUgQXBwS2l0LgogICAgIFtOU0FwcGxpY2F0aW9uIHNoYXJlZEFwcGxp
Y2F0aW9uXTsKIAorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICBX
S0FYUmVnaXN0ZXJSZW1vdGVBcHAoKTsKKyNlbmRpZgorICAgIAogICAgIFJ1bkxvb3A6OnJ1bigp
OwogCiAgICAgLy8gRklYTUU6IERvIG1vcmUgY2xlYW51cCBoZXJlLgpJbmRleDogV2ViS2l0L2d0
ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9u
IDc0OTczKQorKysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNSBAQAorMjAwOS0wMS0wNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdLMjog
U3VwcG9ydCBBY2Nlc3NpYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MTg1OQorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrLmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6
Z2V0Rm9jdXNlZEFjY2Vzc2libGVFbGVtZW50KToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vi
dmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2FjY2Vzc2libGUpOgorCiAy
MDExLTAxLTAzICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFi
b3JhLmNvLnVrPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KSW5kZXg6
IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0ay5jcHAJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjUsMTEg
KzQyNSw3IEBAIEF0a09iamVjdCogRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnZXQKICAgICBp
ZiAoIXByaXYtPmNvcmVGcmFtZSB8fCAhcHJpdi0+Y29yZUZyYW1lLT5kb2N1bWVudCgpKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIFJlbmRlclZpZXcqIHJvb3QgPSB0b1JlbmRlclZpZXcocHJp
di0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKLSAgICBpZiAoIXJvb3QpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgQXRrT2JqZWN0KiB3cmFwcGVyID0gIHByaXYtPmNvcmVG
cmFtZS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyb290KS0+d3Jh
cHBlcigpOworICAgIEF0a09iamVjdCogd3JhcHBlciA9ICBwcml2LT5jb3JlRnJhbWUtPmRvY3Vt
ZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+cm9vdE9iamVjdCgpLT53cmFwcGVyKCk7CiAgICAgaWYg
KCF3cmFwcGVyKQogICAgICAgICByZXR1cm4gMDsKIApJbmRleDogV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5jcHAJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTIsNyArMTQ1Miw3IEBAIHN0YXRpYyBB
dGtPYmplY3QqIHdlYmtpdF93ZWJfdmlld19nZXRfYWMKICAgICBpZiAoIWRvYykKICAgICAgICAg
cmV0dXJuIE5VTEw7CiAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlQWNjZXNzaWJsZSA9
IGRvYy0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShkb2MtPnJlbmRlcmVyKCkpOworICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVBY2Nlc3NpYmxlID0gZG9jLT5heE9iamVjdENhY2hl
KCktPnJvb3RPYmplY3QoKTsKICAgICBpZiAoIWNvcmVBY2Nlc3NpYmxlIHx8ICFjb3JlQWNjZXNz
aWJsZS0+d3JhcHBlcigpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApJbmRleDogV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDc0OTczKQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyMyBAQAorMjAxMS0wMS0wNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdLMjog
U3VwcG9ydCBBY2Nlc3NpYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MTg1OQorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVM
b2FkZXJDbGllbnQuaDoKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjphY2Nlc3NpYmls
aXR5UmVtb3RlT2JqZWN0KToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAg
ICAoLVtXZWJGcmFtZSBzZXRBY2Nlc3NpYmxlTmFtZTpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUg
YWNjZXNzaWJpbGl0eVJvb3RdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwu
aDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZp
ZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVWYWx1ZTpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgYWNjZXNzaWJpbGl0eUZv
Y3VzZWRVSUVsZW1lbnRdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgYWNjZXNzaWJpbGl0eUhp
dFRlc3Q6XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9hY2Nlc3NpYmlsaXR5UGFyZW50Rm9y
U3VidmlldzpdKToKKwogMjAxMS0wMS0wMiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29t
PgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlz
aW9uIDc0OTczKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNs
aWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNiArMjI3LDEwIEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBqb2JqZWN0IGphdmFBcHBsZXQoTlNWaWV3Kik7CiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKE1BQykKKyAgICB2aXJ0dWFsIFJlbW90ZUFYT2JqZWN0UmVmIGFjY2Vzc2liaWxpdHlSZW1v
dGVPYmplY3QoKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKyAgICAKICAgICB2b2lkIHNldE9yaWdp
bmFsVVJMRm9yRG93bmxvYWQoV2ViRG93bmxvYWQgKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JikgY29uc3Q7CiAKICAgICBSZXRhaW5QdHI8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lcj4g
c2V0VXBQb2xpY3lMaXN0ZW5lcihXZWJDb3JlOjpGcmFtZVBvbGljeUZ1bmN0aW9uKTsKSW5kZXg6
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02ODksMjYgKzY4OSw2IEBAIC0gKEJP
T0wpX25lZWRzTGF5b3V0CiAgICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUtPnZpZXcoKSA/
IF9wcml2YXRlLT5jb3JlRnJhbWUtPnZpZXcoKS0+bmVlZHNMYXlvdXQoKSA6IGZhbHNlOwogfQog
Ci0tIChpZClfYWNjZXNzaWJpbGl0eVRyZWUKLXsKLSNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCi0g
ICAgaWYgKCFBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7Ci0gICAgICAg
IEFYT2JqZWN0Q2FjaGU6OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKLSAgICAgICAgaWYgKFtbTlNB
cHAgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eUVuaGFuY2VkVXNl
ckludGVyZmFjZUF0dHJpYnV0ZV0gYm9vbFZhbHVlXSkKLSAgICAgICAgICAgIEFYT2JqZWN0Q2Fj
aGU6OmVuYWJsZUVuaGFuY2VkVXNlckludGVyZmFjZUFjY2Vzc2liaWxpdHkoKTsKLSAgICB9Ci0K
LSAgICBpZiAoIV9wcml2YXRlLT5jb3JlRnJhbWUgfHwgIV9wcml2YXRlLT5jb3JlRnJhbWUtPmRv
Y3VtZW50KCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgUmVuZGVyVmlldyogcm9vdCA9IHRv
UmVuZGVyVmlldyhfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsK
LSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIF9wcml2YXRl
LT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocm9v
dCktPndyYXBwZXIoKTsKLSNlbHNlCi0gICAgcmV0dXJuIG5pbDsKLSNlbmRpZgotfQotCiAtIChE
T01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihTZWxlY3Rpb25Db250
cm9sbGVyOjpFQWx0ZXJhdGlvbilhbHRlcmF0aW9uIGRpcmVjdGlvbjooU2VsZWN0aW9uRGlyZWN0
aW9uKWRpcmVjdGlvbiBncmFudWxhcml0eTooVGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5CiB7
CiAgICAgaWYgKF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc05vbmUoKSkKQEAg
LTEzMzksMTMgKzEzMTksMTQgQEAgLSAodm9pZClzZXRBY2Nlc3NpYmxlTmFtZTooTlNTdHJpbmcg
KiluYQogICAgIGlmICghQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIFJlbmRlclZpZXcqIHJvb3QgPSB0b1JlbmRlclZpZXco
X3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKCFy
b290KQorICAgIGlmICghX3ByaXZhdGUtPmNvcmVGcmFtZSB8fCAhX3ByaXZhdGUtPmNvcmVGcmFt
ZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIHJvb3RPYmplY3QgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5heE9i
amVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJvb3QpOwotICAgIFN0cmluZyBzdHJOYW1lKG5hbWUp
OwotICAgIHJvb3RPYmplY3QtPnNldEFjY2Vzc2libGVOYW1lKHN0ck5hbWUpOworICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIHJvb3RPYmplY3QgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVu
dCgpLT5heE9iamVjdENhY2hlKCktPnJvb3RPYmplY3QoKTsKKyAgICBpZiAocm9vdE9iamVjdCkg
eworICAgICAgICBTdHJpbmcgc3RyTmFtZShuYW1lKTsKKyAgICAgICAgcm9vdE9iamVjdC0+c2V0
QWNjZXNzaWJsZU5hbWUoc3RyTmFtZSk7CisgICAgfQogI2VuZGlmCiB9CiAKQEAgLTEzNjYsNiAr
MTM0NywyNyBAQCAtIChCT09MKWhhc1NwZWxsaW5nTWFya2VyOihpbnQpZnJvbSBsZW5nCiAgICAg
cmV0dXJuIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvblN0YXJ0SGFzU3BlbGxpbmdNYXJr
ZXJGb3IoZnJvbSwgbGVuZ3RoKTsKIH0KIAorLSAoaWQpYWNjZXNzaWJpbGl0eVJvb3QKK3sKKyNp
ZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCisgICAgaWYgKCFBWE9iamVjdENhY2hlOjphY2Nlc3NpYmls
aXR5RW5hYmxlZCgpKSB7CisgICAgICAgIEFYT2JqZWN0Q2FjaGU6OmVuYWJsZUFjY2Vzc2liaWxp
dHkoKTsKKyAgICAgICAgaWYgKFtbTlNBcHAgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5T
QWNjZXNzaWJpbGl0eUVuaGFuY2VkVXNlckludGVyZmFjZUF0dHJpYnV0ZV0gYm9vbFZhbHVlXSkK
KyAgICAgICAgICAgIEFYT2JqZWN0Q2FjaGU6OmVuYWJsZUVuaGFuY2VkVXNlckludGVyZmFjZUFj
Y2Vzc2liaWxpdHkoKTsKKyAgICB9CisgICAgCisgICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZyYW1l
IHx8ICFfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gbmls
OworICAgIAorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvb3RPYmplY3QgPSBfcHJpdmF0ZS0+
Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPnJvb3RPYmplY3QoKTsKKyAg
ICBpZiAocm9vdE9iamVjdCkKKyAgICAgICAgcmV0dXJuIHJvb3RPYmplY3QtPndyYXBwZXIoKTsK
KyAgICByZXR1cm4gbmlsOworI2Vsc2UKKyAgICByZXR1cm4gbmlsOworI2VuZGlmCit9CisKIEBl
bmQKIAogQGltcGxlbWVudGF0aW9uIFdlYkZyYW1lCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViRnJhbWVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJG
cmFtZUludGVybmFsLmgJKHJldmlzaW9uIDc0OTczKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDggKzEzOCw2IEBAIEBpbnRl
cmZhY2UgV2ViRnJhbWUgKFdlYkludGVybmFsKQogLSAoTlNSZWN0KV9maXJzdFJlY3RGb3JET01S
YW5nZTooRE9NUmFuZ2UgKilyYW5nZTsKIC0gKHZvaWQpX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxl
OihET01SYW5nZSAqKXJhbmdlOwogCi0tIChpZClfYWNjZXNzaWJpbGl0eVRyZWU7Ci0KIC0gKERP
TVJhbmdlICopX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246KFdlYkNvcmU6OlNlbGVj
dGlvbkNvbnRyb2xsZXI6OkVBbHRlcmF0aW9uKWFsdGVyYXRpb24gZGlyZWN0aW9uOihXZWJDb3Jl
OjpTZWxlY3Rpb25EaXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihXZWJDb3JlOjpUZXh0
R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHk7CiAtIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihX
ZWJDb3JlOjpSYW5nZSopcmFuZ2U7CiAtIChET01SYW5nZSAqKV9jb252ZXJ0TlNSYW5nZVRvRE9N
UmFuZ2U6KE5TUmFuZ2UpcmFuZ2U7CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVQ
cml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lUHJpdmF0
ZS5oCShyZXZpc2lvbiA3NDk3MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVByaXZh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDQgKzE0Miw3IEBAIEBpbnRlcmZhY2UgV2ViRnJh
bWUgKFdlYlByaXZhdGUpCiAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlcmUgaXMgYSBzcGVsbGluZyBt
YXJrZXIgaW4gdGhlIHNwZWNpZmllZCByYW5nZSBvZiB0aGUgZm9jdXNlZCBub2RlLgogLSAoQk9P
TCloYXNTcGVsbGluZ01hcmtlcjooaW50KWxvY2F0aW9uIGxlbmd0aDooaW50KWxlbmd0aDsKIAor
Ly8gVGhlIHRvcCBvZiB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlLgorLSAoaWQpYWNjZXNzaWJpbGl0
eVJvb3Q7CisKIEBlbmQKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9u
IDc0OTczKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC00Mjc0LDcgKzQyNzQsNyBAQCAtICh2b2lkKWZsYWdzQ2hhbmdlZDooTlNFdmVudCAq
KWV2ZW50CiAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRy
aWJ1dGVOYW1lCiB7CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlkIGFjY1RyZWUgPSBb
W3NlbGYgX2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOworICAgICAgICBpZCBhY2NUcmVlID0g
W1tzZWxmIF9mcmFtZV0gYWNjZXNzaWJpbGl0eVJvb3RdOwogICAgICAgICBpZiAoYWNjVHJlZSkK
ICAgICAgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6YWNjVHJlZV07CiAg
ICAgICAgIHJldHVybiBuaWw7CkBAIC00Mjg0LDcgKzQyODQsNyBAQCAtIChpZClhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAKIC0gKGlkKWFjY2Vzc2liaWxpdHlGb2N1c2VkVUlF
bGVtZW50CiB7Ci0gICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIF9hY2Nlc3NpYmlsaXR5
VHJlZV07CisgICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIGFjY2Vzc2liaWxpdHlSb290
XTsKICAgICBpZiAoYWNjVHJlZSkKICAgICAgICAgcmV0dXJuIFthY2NUcmVlIGFjY2Vzc2liaWxp
dHlGb2N1c2VkVUlFbGVtZW50XTsKICAgICByZXR1cm4gc2VsZjsKQEAgLTQyOTIsNyArNDI5Miw3
IEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50CiAKIC0gKGlkKWFjY2Vzc2li
aWxpdHlIaXRUZXN0OihOU1BvaW50KXBvaW50CiB7Ci0gICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBf
ZnJhbWVdIF9hY2Nlc3NpYmlsaXR5VHJlZV07CisgICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJh
bWVdIGFjY2Vzc2liaWxpdHlSb290XTsKICAgICBpZiAoYWNjVHJlZSkgewogICAgICAgICBOU1Bv
aW50IHdpbmRvd0Nvb3JkID0gW1tzZWxmIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpwb2lu
dF07CiAgICAgICAgIHJldHVybiBbYWNjVHJlZSBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpbc2VsZiBj
b252ZXJ0UG9pbnQ6d2luZG93Q29vcmQgZnJvbVZpZXc6bmlsXV07CkBAIC00MzAyLDcgKzQzMDIs
NyBAQCAtIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2luCiAKIC0gKGlkKV9h
Y2Nlc3NpYmlsaXR5UGFyZW50Rm9yU3VidmlldzooTlNWaWV3ICopc3VidmlldwogewotICAgIGlk
IGFjY1RyZWUgPSBbW3NlbGYgX2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOworICAgIGlkIGFj
Y1RyZWUgPSBbW3NlbGYgX2ZyYW1lXSBhY2Nlc3NpYmlsaXR5Um9vdF07CiAgICAgaWYgKCFhY2NU
cmVlKQogICAgICAgICByZXR1cm4gc2VsZjsKICAgICBpZCBwYXJlbnQgPSBbYWNjVHJlZSBfYWNj
ZXNzaWJpbGl0eVBhcmVudEZvclN1YnZpZXc6c3Vidmlld107CkluZGV4OiBXZWJLaXQvd2luL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNzQ5
NzMpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEz
IEBACisyMDExLTAxLTA0ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0syOiBTdXBw
b3J0IEFjY2Vzc2liaWxpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUxODU5CisKKyAgICAgICAgKiBBY2Nlc3NpYmxlRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoQWNjZXNzaWJsZURvY3VtZW50OjpBY2Nlc3NpYmxlRG9jdW1lbnQpOgorCiAyMDExLTAx
LTAxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJLaXQvd2luL0FjY2Vzc2libGVEb2N1bWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9BY2Nlc3NpYmxlRG9jdW1lbnQuY3BwCShyZXZpc2lv
biA3NDk3MykKKysrIFdlYktpdC93aW4vQWNjZXNzaWJsZURvY3VtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogLy8gQWNj
ZXNzaWJsZURvY3VtZW50CiBBY2Nlc3NpYmxlRG9jdW1lbnQ6OkFjY2Vzc2libGVEb2N1bWVudChE
b2N1bWVudCogZG9jKQotICAgIDogQWNjZXNzaWJsZUJhc2UoZG9jLT5heE9iamVjdENhY2hlKCkt
PmdldE9yQ3JlYXRlKGRvYy0+cmVuZGVyZXIoKSkpCisgICAgOiBBY2Nlc3NpYmxlQmFzZShkb2Mt
PmF4T2JqZWN0Q2FjaGUoKS0+cm9vdE9iamVjdCgpKQogewogfQogCkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biA3NDk3MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzIEBACisyMDExLTAxLTA0ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0sy
OiBTdXBwb3J0IEFjY2Vzc2liaWxpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUxODU5CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJp
bGl0eS93ZWJraXQtc2Nyb2xsYXJlYS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3dlYmtpdC1zY3JvbGxhcmVhLmh0bWw6IEFkZGVkLgor
CiAyMDExLTAxLTA0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS93ZWJraXQtc2Nyb2xsYXJlYS1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvd2Via2l0LXNjcm9s
bGFyZWEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2FjY2Vzc2liaWxpdHkvd2Via2l0LXNjcm9sbGFyZWEtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE1IEBACit0ZXh0CisKK3RleHQKK1RoaXMgdGVzdHMgdGhhdCB0aGUg
V2ViS2l0IGdlbmVyYXRlZCBzY3JvbGwgYXJlYXMgYXJlIGNvcnJlY3QuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIGJvZHkucm9sZSBpcyAnQVhSb2xlOiBBWFdlYkFyZWEn
CitQQVNTIGJvZHkucGFyZW50RWxlbWVudCgpLnJvbGUgaXMgJ0FYUm9sZTogQVhTY3JvbGxBcmVh
JworUEFTUyBib2R5LnBhcmVudEVsZW1lbnQoKS5jaGlsZHJlbkNvdW50IGlzIDEKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS93ZWJraXQtc2Nyb2xsYXJlYS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3dlYmtp
dC1zY3JvbGxhcmVhLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS93ZWJraXQtc2Nyb2xsYXJlYS5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9F
TiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0PgordmFyIHN1
Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHkgaWQ9ImJvZHkiPgorCit0ZXh0PGJyPgorPGltZyBzcmM9J3Jlc291cmNlcy9jYWtlLnBu
Zycgd2lkdGg9NTAwMCBoZWlnaHQ9NTAwMD4KKzxicj4KK3RleHQKKworPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KKworICAgIGRl
c2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQgdGhlIFdlYktpdCBnZW5lcmF0ZWQgc2Nyb2xsIGFy
ZWFzIGFyZSBjb3JyZWN0LiIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcikgeworCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib2R5IikuZm9jdXMo
KTsKKyAgICAgICAgdmFyIGJvZHkgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxl
bWVudDsKKyAgICAgICAgc2hvdWxkQmUoImJvZHkucm9sZSIsICInQVhSb2xlOiBBWFdlYkFyZWEn
Iik7CisgICAgICAgIHNob3VsZEJlKCJib2R5LnBhcmVudEVsZW1lbnQoKS5yb2xlIiwgIidBWFJv
bGU6IEFYU2Nyb2xsQXJlYSciKTsKKyAgICAgICAgc2hvdWxkQmUoImJvZHkucGFyZW50RWxlbWVu
dCgpLmNoaWxkcmVuQ291bnQiLCAiMSIpOworICAgIH0KKworICAgIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="69166"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>