<?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>130273</bug_id>
          
          <creation_ts>2014-03-14 16:46:25 -0700</creation_ts>
          <short_desc>Implement contentInset for Mac WebKit2</short_desc>
          <delta_ts>2014-03-20 18:17:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>ap</cc>
    
    <cc>bdakin</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jonlee</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>990737</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-03-14 16:46:25 -0700</bug_when>
    <thetext>Implement contentInset for Mac WebKit2

&lt;rdar://problem/16175195&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992658</commentid>
    <comment_count>1</comment_count>
      <attachid>227319</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-03-20 12:31:41 -0700</bug_when>
    <thetext>Created attachment 227319
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992660</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-20 12:33:08 -0700</bug_when>
    <thetext>Attachment 227319 did not pass style-queue:


ERROR: Source/WebCore/testing/Internals.h:257:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ScrollView.cpp:275:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ScrollView.cpp:689:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ScrollView.cpp:691:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ScrollView.cpp:1093:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ScrollView.cpp:1095:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992692</commentid>
    <comment_count>3</comment_count>
      <attachid>227319</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-03-20 13:35:13 -0700</bug_when>
    <thetext>Comment on attachment 227319
Patch

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

&gt; Source/WebCore/page/Page.h:282
&gt; +    void setTopContentInset(float contentInset) { m_topContentInset = contentInset; }

Doesn&apos;t this need to cause layout or other rejiggery?

&gt; Source/WebCore/platform/ScrollView.cpp:280
&gt; +        return visibleCOntentSize;

visibleCOntentSize

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h:84
&gt; +@property (readwrite) CGFloat topContentInset;

Should be on WKWebView.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:3303
&gt; +- (void)setTopContentInset:(CGFloat)contentInset
&gt; +{
&gt; +    _data-&gt;_page-&gt;setTopContentInset(contentInset);
&gt; +}
&gt; +
&gt; +- (CGFloat)topContentInset
&gt; +{
&gt; +    return _data-&gt;_page-&gt;topContentInset();
&gt; +}

We&apos;re not using WKView any more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992741</commentid>
    <comment_count>4</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-03-20 14:46:32 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 227319 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=227319&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/Page.h:282
&gt; &gt; +    void setTopContentInset(float contentInset) { m_topContentInset = contentInset; }
&gt; 
&gt; Doesn&apos;t this need to cause layout or other rejiggery?
&gt; 

Yes, fixing.

&gt; &gt; Source/WebCore/platform/ScrollView.cpp:280
&gt; &gt; +        return visibleCOntentSize;
&gt; 
&gt; visibleCOntentSize
&gt; 

Oops!

&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h:84
&gt; &gt; +@property (readwrite) CGFloat topContentInset;
&gt; 
&gt; Should be on WKWebView.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:3303
&gt; &gt; +- (void)setTopContentInset:(CGFloat)contentInset
&gt; &gt; +{
&gt; &gt; +    _data-&gt;_page-&gt;setTopContentInset(contentInset);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +- (CGFloat)topContentInset
&gt; &gt; +{
&gt; &gt; +    return _data-&gt;_page-&gt;topContentInset();
&gt; &gt; +}
&gt; 
&gt; We&apos;re not using WKView any more

My new patch adds it to both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992743</commentid>
    <comment_count>5</comment_count>
      <attachid>227337</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-03-20 14:46:53 -0700</bug_when>
    <thetext>Created attachment 227337
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992746</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-20 14:49:13 -0700</bug_when>
    <thetext>Attachment 227337 did not pass style-queue:


ERROR: Source/WebCore/page/Page.h:282:  The parameter name &quot;contentInset&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h:97:  Missing spaces around =  [whitespace/operators] [4]
ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h:84:  Missing spaces around =  [whitespace/operators] [4]
ERROR: Source/WebCore/platform/ScrollView.cpp:689:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ScrollView.cpp:691:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ScrollView.cpp:1093:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ScrollView.cpp:1095:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 7 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992749</commentid>
    <comment_count>7</comment_count>
      <attachid>227340</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-03-20 15:02:11 -0700</bug_when>
    <thetext>Created attachment 227340
Patch

Stylebot is just wrong about the WK2 setter things, but here is a patch that will hopefully placate the other complaints.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992755</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-20 15:04:10 -0700</bug_when>
    <thetext>Attachment 227340 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h:97:  Missing spaces around =  [whitespace/operators] [4]
ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h:84:  Missing spaces around =  [whitespace/operators] [4]
ERROR: Source/WebCore/platform/ScrollView.cpp:689:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ScrollView.cpp:1093:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 4 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992763</commentid>
    <comment_count>9</comment_count>
      <attachid>227346</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-03-20 15:27:26 -0700</bug_when>
    <thetext>Created attachment 227346
Patch

Once again for stylebot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992764</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-20 15:29:26 -0700</bug_when>
    <thetext>Attachment 227346 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h:97:  Missing spaces around =  [whitespace/operators] [4]
ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h:84:  Missing spaces around =  [whitespace/operators] [4]
Total errors found: 2 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992789</commentid>
    <comment_count>11</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-03-20 16:20:01 -0700</bug_when>
    <thetext>Thanks, Simon! 

http://trac.webkit.org/changeset/166017</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992819</commentid>
    <comment_count>12</comment_count>
      <attachid>227346</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-20 17:38:45 -0700</bug_when>
    <thetext>Comment on attachment 227346
Patch

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

&gt; Source/WebCore/testing/Internals.cpp:1831
&gt; +void Internals::setTopContentInset(float contentInset)

Is there something resetting the inset between tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992832</commentid>
    <comment_count>13</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-03-20 17:51:55 -0700</bug_when>
    <thetext>This broke tests because
ScrollView::visibleContentRectInternal(...IncludeScollbars) calls unobscuredContentRect() which excludes them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992847</commentid>
    <comment_count>14</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-03-20 18:17:26 -0700</bug_when>
    <thetext>Fixed in http://trac.webkit.org/changeset/166032</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227319</attachid>
            <date>2014-03-20 12:31:41 -0700</date>
            <delta_ts>2014-03-20 14:46:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>34315</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTk4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBACisyMDE0LTAzLTIwICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgY29udGVudEluc2V0
IGZvciBNYWMgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMwMjczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRvcENvbnRlbnRJbnNldCgpLiBJ
ZiBhIHBhZ2UgaGFzIGEgdG9wQ29udGVudEluc2V0KCksIAorICAgICAgICB0aGUgcm9vdCBsYXll
cuKAmXMgcG9zaXRpb24gaXMgYWRqdXN0ZWQgdG8gYWNjb3VudCBmb3IgdGhlIGluc2V0LiBJdCBp
cyBhc3N1bWVkIHRoYXQgCisgICAgICAgIHRoZSBhcmVhIGFjY291bnRlZCBmb3IgYnkgdGhlIGlu
c2V0IGlzIHZpc2libGUgYnV0IG9ic2N1cmVkLCBzbyBzY3JvbGxiYXJzIG5lZWQgdG8gCisgICAg
ICAgIGJlIG1vdmVkIHNvIHRoYXQgdGhleSBvbmx5IGNvdmVyIHRoZSBub24tb2JzY3VyZWQgYXJl
YSwgYW5kIG1vc3QgcGFydHMgb2YgV2ViQ29yZSAKKyAgICAgICAgdGhhdCB3b25kZXIgYWJvdXQg
dmlzaWJsZUNvbnRlbnRTaXplIG9ubHkgY2FyZSBhYm91dCB0aGUgdW5vYnNjdXJlZCBhcmVhLCBz
byB0aGlzIAorICAgICAgICBwYXRjaCBtYWtlcyB0aGF0IHZpc2libGVDb250ZW50UmVjdCByZXR1
cm4gdGhlIHVub2JzY3VyZWRSZWN0LiBGaW5hbGx5IHNpbmNlIHRoaXMgCisgICAgICAgIGlzIGFj
aGlldmVkIGJ5IG1vdmluZyBhIGxheWVy4oCZcyBwb3NpdGlvbiwgdGhlIHRvcENvbnRlbnRJbnNl
dCgpIGFsc28gbmVlZHMgdG8gYmUgCisgICAgICAgIGZhY3RvcmVkIGludG8gdmFyaW91cyBmdW5j
dGlvbnMgdGhhdCBhcmUgdXNlZCB0byBjb252ZXJ0IGJldHdlZW4gY29vcmRpbmF0ZSAKKyAgICAg
ICAgc3BhY2VzLiAKKworICAgICAgICBSZXR1cm4gUGFnZTo6dG9wQ29udGVudEluc2V0KCkgaWYg
dGhpcyBpcyB0aGUgbWFpbiBmcmFtZS4KKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRvcENvbnRlbnRJbnNldCk6CisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuaDoKKworICAgICAgICBDYWNoZSB0aGUgaW5zZXQgb24gUGFnZS4KKyAg
ICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6UGFnZSk6Cisg
ICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp0b3BDb250ZW50
SW5zZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0VG9wQ29udGVudEluc2V0KToKKwor
ICAgICAgICB1bm9ic2N1cmVkQ29udGVudFJlY3QoKSB1c2VkIHRvIHVuY29uZGl0aW9uYWxseSBy
ZXR1cm4gdmlzaWJsZUNvbnRlbnRSZWN0KCkgb24gCisgICAgICAgIG5vbi1pT1MgcGxhdGZvcm1z
LiBOb3cgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3Igc29tZSB0ZWNobmljYWxseSB2aXNpYmxlIGNv
bnRlbnQgdG8gCisgICAgICAgIGJlIG9ic2N1cmVkLCB0aGlzIGNvZGUgbmVlZGVkIHRvIGJlIHJl
LXdvcmtlZCBhIGJpdCB0byBtYWtlIHNvbWUgbW9yZSBzZW5zZS4gCisgICAgICAgIHZpc2libGVD
b250ZW50UmVjdCgpIG5vdyByZXByZXNlbnRzIHRoYXQgdmlzaWJsZSBjb250ZW50IHRoYXQgaXMg
Y29tcGxldGVseSAKKyAgICAgICAgdW5vYnNjdXJlZCwgc28gaXQgc2hvdWxkIGNhbGwgaW50byB1
bm9ic2N1cmVkQ29udGVudFJlY3QoKSByYXRoZXIgdGhhbiB0aGUgb3RoZXIgCisgICAgICAgIHdh
eSBhcm91bmQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3Ojp1bm9ic2N1cmVkQ29udGVudFJlY3QpOgorCisgICAgICAgIHVu
c2NhbGVkVG90YWxWaXNpYmxlQ29udGVudFNpemUoKSBpbmNsdWRlcyB0aGUgc2l6ZSBvZiBhbGwg
Y29udGVudCB0aGF0IG1pZ2h0IGJlIAorICAgICAgICB2aXNpYmxlLiBTb21lIG9mIHRoaXMgY29u
dGVudCBtaWdodCBiZSBvYnNjdXJlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnVu
c2NhbGVkVG90YWxWaXNpYmxlQ29udGVudFNpemUpOgorCisgICAgICAgIE1vc3Qgb2YgdGhlIHRp
bWUsIHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgY29udGVudCB0aGF0IGlzIEZVTExZIHZpc2libGUu
IFRoYXQgaXMgCisgICAgICAgIHdoYXQgeW91IGdldCBmcm9tIHVuc2NhbGVkVW5vYnNjdXJlZFZp
c2libGVDb250ZW50U2l6ZSgpLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dW5zY2Fs
ZWRVbm9ic2N1cmVkVmlzaWJsZUNvbnRlbnRTaXplKToKKworICAgICAgICBVc2UgdGhlIHVub2Jz
Y3VyZWQgc2l6ZSBmb3IgdGhlc2UgY29tcHV0YXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6bGF5b3V0U2l6ZSk6CisKKyAgICAgICAgRmFjdG9yIGluIHRoZSB0b3BDb250
ZW50SW5zZXQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbE9mZnNldFJl
bGF0aXZlVG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxQ
b3NpdGlvblJlbGF0aXZlVG9Eb2N1bWVudCk6CisKKyAgICAgICAgVGhlIHNjcm9sbGJhcnMgc2hv
dWxkIGJlIHBvc2l0aW9uZWQgdG8gY292ZXIgdGhlIG5vbi1vYnNjdXJlZCBjb250ZW50IG9ubHku
IAorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6CisKKyAg
ICAgICAgQWdhaW4sIGZhY3RvciB0aGUgdG9wQ29udGVudEluc2V0KCkgaW50byB0aGVzZSBjb252
ZXJzaW9ucyBzaW5jZSB0aGUgcm9vdCBsYXllcuKAmXMgCisgICAgICAgIHBvc2l0aW9uIGhhcyBi
ZWVuIGFkanVzdGVkIHRvIGFjY291bnQgZm9yIGl0LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Vmlldzo6Y29udGVudHNUb1Jvb3RWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OmNvbnRlbnRzVG9XaW5kb3cpOgorCisgICAgICAgICBKdXN0IGxpa2UgdGhlIHNjcm9sbGJhcnMs
IHRoZSBzY3JvbGwgY29ybmVyIG11c3QgYmUgbW92ZWQgdGhlIGFjY291bnQgZm9yIHRoZSAKKyAg
ICAgICAgaW5zZXQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxDb3JuZXJS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxWaWV3Ojp0b3BDb250ZW50SW5zZXQpOgorCisgICAgICAgIFJlbmRlckxheWVyQ29t
cG9zaXRvciBjYXJlcyBhYm91dCB1bnNjYWxlZFRvdGFsVmlzaWJsZUNvbnRlbnRTaXplKCkuIEl0
IGRvZXMgbm90IAorICAgICAgICBjYXJlIGlmIHNvbWUgb2YgdGhhdCBjb250ZW50IGlzIG9ic2N1
cmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZVZpZXdEaWRDaGFuZ2VT
aXplKToKKworICAgICAgICBNb3ZlIHRoZSByb290IGxheWVy4oCZcyBwb3NpdGlvbiBiYXNlZCBv
biB0aGUgY29udGVudEluc2V0LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVSb290TGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmVuc3VyZVJvb3RMYXllcik6CisKKyAgICAgICAgQWxsb3cgc2V0dGlu
ZyBjb250ZW50SW5zZXQgdmlhIEludGVybmFscyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICAg
ICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6
OnNldFRvcENvbnRlbnRJbnNldCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAg
ICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTQtMDMtMjAgIEJyaWFuIEJ1cmcg
IDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIFJlcGxheTogZml4IHNvbWUgb3ZlcnNp
Z2h0cyBpbiB0aGUgcmVwbGF5IGJhY2tlbmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAJKHJldmlzaW9uIDE2NTk3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTI5LDYgKzkyOSwxNSBAQCB2b2lkIEZyYW1lVmlldzo6c2V0
Rm9vdGVySGVpZ2h0KGludCBmb290CiAgICAgICAgIHJlbmRlclZpZXctPnNldE5lZWRzTGF5b3V0
KCk7CiB9CiAKK2Zsb2F0IEZyYW1lVmlldzo6dG9wQ29udGVudEluc2V0KCkgY29uc3QKK3sKKyAg
ICBpZiAoIWZyYW1lKCkuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgUGFnZSogcGFnZSA9IGZyYW1lKCkucGFnZSgpOworICAgIHJldHVybiBwYWdlID8gcGFnZS0+
dG9wQ29udGVudEluc2V0KCkgOiAwOworfQorICAgIAogYm9vbCBGcmFtZVZpZXc6Omhhc0NvbXBv
c2l0ZWRDb250ZW50KCkgY29uc3QKIHsKICAgICBpZiAoUmVuZGVyVmlldyogcmVuZGVyVmlldyA9
IHRoaXMtPnJlbmRlclZpZXcoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNp
b24gMTY1OTcxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtNDMzLDYgKzQzMyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBmb290ZXJI
ZWlnaHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Zvb3RlckhlaWdodDsgfQogICAgIHZv
aWQgc2V0Rm9vdGVySGVpZ2h0KGludCk7CiAKKyAgICB2aXJ0dWFsIGZsb2F0IHRvcENvbnRlbnRJ
bnNldCgpIGNvbnN0IG92ZXJyaWRlOworCiAgICAgdmlydHVhbCB2b2lkIHdpbGxTdGFydExpdmVS
ZXNpemUoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKSBv
dmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiAxNjU5NzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNiArMTU5
LDcgQEAgUGFnZTo6UGFnZShQYWdlQ2xpZW50cyYgcGFnZUNsaWVudHMpCiAgICAgLCBtX21lZGlh
Vm9sdW1lKDEpCiAgICAgLCBtX3BhZ2VTY2FsZUZhY3RvcigxKQogICAgICwgbV9kZXZpY2VTY2Fs
ZUZhY3RvcigxKQorICAgICwgbV90b3BDb250ZW50SW5zZXQoMCkKICAgICAsIG1fc3VwcHJlc3NT
Y3JvbGxiYXJBbmltYXRpb25zKGZhbHNlKQogICAgICwgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQo
ZmFsc2UpCiAgICAgLCBtX3VzZXJTdHlsZVNoZWV0TW9kaWZpY2F0aW9uVGltZSgwKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmgJKHJldmlzaW9uIDE2NTk3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNiArMjc4LDkgQEAgcHVibGljOgogICAgIGZsb2F0
IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9kZXZpY2VTY2FsZUZhY3Rvcjsg
fQogICAgIHZvaWQgc2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwogCisgICAgZmxvYXQgdG9w
Q29udGVudEluc2V0KCkgY29uc3QgeyByZXR1cm4gbV90b3BDb250ZW50SW5zZXQ7IH0KKyAgICB2
b2lkIHNldFRvcENvbnRlbnRJbnNldChmbG9hdCBjb250ZW50SW5zZXQpIHsgbV90b3BDb250ZW50
SW5zZXQgPSBjb250ZW50SW5zZXQ7IH0KKwogICAgIGJvb2wgc2hvdWxkU3VwcHJlc3NTY3JvbGxi
YXJBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9zdXBwcmVzc1Njcm9sbGJhckFuaW1hdGlv
bnM7IH0KICAgICB2b2lkIHNldFNob3VsZFN1cHByZXNzU2Nyb2xsYmFyQW5pbWF0aW9ucyhib29s
IHN1cHByZXNzQW5pbWF0aW9ucyk7CiAgICAgdm9pZCBsb2NrQWxsT3ZlcmxheVNjcm9sbGJhcnNU
b0hpZGRlbihib29sIGxvY2tPdmVybGF5U2Nyb2xsYmFycyk7CkBAIC00ODksNiArNDkyLDggQEAg
cHJpdmF0ZToKICAgICBmbG9hdCBtX3BhZ2VTY2FsZUZhY3RvcjsKICAgICBmbG9hdCBtX2Rldmlj
ZVNjYWxlRmFjdG9yOwogCisgICAgZmxvYXQgbV90b3BDb250ZW50SW5zZXQ7CisKICAgICBib29s
IG1fc3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25zOwogCiAgICAgUGFnaW5hdGlvbiBtX3BhZ2lu
YXRpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNp
b24gMTY1OTcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzNSw4ICsyMzUsMTcgQEAgdm9pZCBTY3JvbGxWaWV3OjpzZXREZWxl
Z2F0ZXNTY3JvbGxpbmcoYgogICAgIG1fZGVsZWdhdGVzU2Nyb2xsaW5nID0gZGVsZWdhdGVzU2Ny
b2xsaW5nOwogICAgIGRlbGVnYXRlc1Njcm9sbGluZ0RpZENoYW5nZSgpOwogfQotCi1JbnRTaXpl
IFNjcm9sbFZpZXc6OnVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKFZpc2libGVDb250ZW50UmVj
dEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24pIGNvbnN0CisgICAgCisjaWYg
IVBMQVRGT1JNKElPUykKK0ludFJlY3QgU2Nyb2xsVmlldzo6dW5vYnNjdXJlZENvbnRlbnRSZWN0
KFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24p
IGNvbnN0Cit7CisgICAgRmxvYXRTaXplIHZpc2libGVDb250ZW50U2l6ZSA9IHVuc2NhbGVkVW5v
YnNjdXJlZFZpc2libGVDb250ZW50U2l6ZShzY3JvbGxiYXJJbmNsdXNpb24pOworICAgIHZpc2li
bGVDb250ZW50U2l6ZS5zY2FsZSgxIC8gdmlzaWJsZUNvbnRlbnRTY2FsZUZhY3RvcigpKTsKKyAg
ICByZXR1cm4gSW50UmVjdChJbnRQb2ludChtX3Njcm9sbE9mZnNldCksIGV4cGFuZGVkSW50U2l6
ZSh2aXNpYmxlQ29udGVudFNpemUpKTsKK30KKyNlbmRpZgorICAgIAorSW50U2l6ZSBTY3JvbGxW
aWV3Ojp1bnNjYWxlZFRvdGFsVmlzaWJsZUNvbnRlbnRTaXplKFZpc2libGVDb250ZW50UmVjdElu
Y2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24pIGNvbnN0CiB7CiAgICAgaWYgKHBs
YXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVZpc2libGVDb250ZW50U2l6
ZShzY3JvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpOwpAQCAtMjU4LDkgKzI2
NywyNSBAQCBJbnRTaXplIFNjcm9sbFZpZXc6OnVuc2NhbGVkVmlzaWJsZUNvbnRlCiAKICAgICBy
ZXR1cm4gSW50U2l6ZSh3aWR0aCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCwgaGVpZ2h0KCkg
LSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KS5leHBhbmRlZFRvKEludFNpemUoKSk7CiB9Cisg
ICAgCitJbnRTaXplIFNjcm9sbFZpZXc6OnVuc2NhbGVkVW5vYnNjdXJlZFZpc2libGVDb250ZW50
U2l6ZShWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVz
aW9uKSBjb25zdAoreworICAgIEludFNpemUgdmlzaWJsZUNvbnRlbnRTaXplID0gdW5zY2FsZWRU
b3RhbFZpc2libGVDb250ZW50U2l6ZShzY3JvbGxiYXJJbmNsdXNpb24pOworICAgIAorICAgICBp
ZiAocGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIHZpc2libGVDb250ZW50U2l6ZTsK
KworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIGlmICghbV9maXhlZFZpc2libGVD
b250ZW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB2aXNpYmxlQ09udGVudFNpemU7
CisjZW5kaWYKKworICAgIHZpc2libGVDb250ZW50U2l6ZS5zZXRIZWlnaHQodmlzaWJsZUNvbnRl
bnRTaXplLmhlaWdodCgpIC0gdG9wQ29udGVudEluc2V0KCkpOworICAgIHJldHVybiB2aXNpYmxl
Q29udGVudFNpemU7Cit9CiAKICNpZiAhUExBVEZPUk0oR1RLKQotSW50UmVjdCBTY3JvbGxWaWV3
Ojp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Nj
cm9sbGJhcnMgc2NvbGxiYXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yIHZp
c2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAorSW50UmVjdCBTY3JvbGxWaWV3Ojp2aXNp
YmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJh
cnMgc2Nyb2xsYmFySW5jbHVzaW9uLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvciB2aXNpYmxl
Q29udGVudFJlY3RCZWhhdmlvcikgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1MpCiAgICAgaWYg
KHZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yID09IExlZ2FjeUlPU0RvY3VtZW50Vmlld1JlY3Qp
IHsKQEAgLTI3NSwyMiArMzAwLDIwIEBAIEludFJlY3QgU2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRl
bnRSZWN0SW4KICNlbmRpZgogCiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgIHJl
dHVybiBwbGF0Zm9ybVZpc2libGVDb250ZW50UmVjdChzY29sbGJhckluY2x1c2lvbiA9PSBJbmNs
dWRlU2Nyb2xsYmFycyk7CisgICAgICAgIHJldHVybiBwbGF0Zm9ybVZpc2libGVDb250ZW50UmVj
dChzY3JvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpOwogCiAjaWYgVVNFKFRJ
TEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgaWYgKCFtX2ZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1fZml4ZWRWaXNpYmxlQ29udGVudFJlY3Q7CiAjZW5k
aWYKIAotICAgIEZsb2F0U2l6ZSB2aXNpYmxlQ29udGVudFNpemUgPSB1bnNjYWxlZFZpc2libGVD
b250ZW50U2l6ZShzY29sbGJhckluY2x1c2lvbik7Ci0gICAgdmlzaWJsZUNvbnRlbnRTaXplLnNj
YWxlKDEgLyB2aXNpYmxlQ29udGVudFNjYWxlRmFjdG9yKCkpOwotICAgIHJldHVybiBJbnRSZWN0
KEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0KSwgZXhwYW5kZWRJbnRTaXplKHZpc2libGVDb250ZW50
U2l6ZSkpOworICAgIHJldHVybiB1bm9ic2N1cmVkQ29udGVudFJlY3QoKTsKIH0KICNlbmRpZgog
CiBJbnRTaXplIFNjcm9sbFZpZXc6OmxheW91dFNpemUoKSBjb25zdAogewotICAgIHJldHVybiBt
X2ZpeGVkTGF5b3V0U2l6ZS5pc0VtcHR5KCkgfHwgIW1fdXNlRml4ZWRMYXlvdXQgPyB1bnNjYWxl
ZFZpc2libGVDb250ZW50U2l6ZShFeGNsdWRlU2Nyb2xsYmFycykgOiBtX2ZpeGVkTGF5b3V0U2l6
ZTsKKyAgICByZXR1cm4gbV9maXhlZExheW91dFNpemUuaXNFbXB0eSgpIHx8ICFtX3VzZUZpeGVk
TGF5b3V0ID8gdW5zY2FsZWRVbm9ic2N1cmVkVmlzaWJsZUNvbnRlbnRTaXplKEV4Y2x1ZGVTY3Jv
bGxiYXJzKSA6IG1fZml4ZWRMYXlvdXRTaXplOwogfQogCiBJbnRTaXplIFNjcm9sbFZpZXc6OmZp
eGVkTGF5b3V0U2l6ZSgpIGNvbnN0CkBAIC0zNjksMTMgKzM5MiwxMyBAQCBJbnRQb2ludCBTY3Jv
bGxWaWV3OjphZGp1c3RTY3JvbGxQb3NpdGlvCiBJbnRTaXplIFNjcm9sbFZpZXc6OnNjcm9sbE9m
ZnNldFJlbGF0aXZlVG9Eb2N1bWVudCgpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzY3JvbGxPZmZz
ZXQgPSB0aGlzLT5zY3JvbGxPZmZzZXQoKTsKLSAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxPZmZz
ZXQud2lkdGgoKSwgc2Nyb2xsT2Zmc2V0LmhlaWdodCgpIC0gaGVhZGVySGVpZ2h0KCkpOworICAg
IHJldHVybiBJbnRTaXplKHNjcm9sbE9mZnNldC53aWR0aCgpLCBzY3JvbGxPZmZzZXQuaGVpZ2h0
KCkgLSBoZWFkZXJIZWlnaHQoKSAtIHRvcENvbnRlbnRJbnNldCgpKTsKIH0KIAogSW50UG9pbnQg
U2Nyb2xsVmlldzo6c2Nyb2xsUG9zaXRpb25SZWxhdGl2ZVRvRG9jdW1lbnQoKSBjb25zdAogewog
ICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gdGhpcy0+c2Nyb2xsUG9zaXRpb24oKTsKLSAg
ICByZXR1cm4gSW50UG9pbnQoc2Nyb2xsUG9zaXRpb24ueCgpLCBzY3JvbGxQb3NpdGlvbi55KCkg
LSBoZWFkZXJIZWlnaHQoKSk7CisgICAgcmV0dXJuIEludFBvaW50KHNjcm9sbFBvc2l0aW9uLngo
KSwgc2Nyb2xsUG9zaXRpb24ueSgpIC0gaGVhZGVySGVpZ2h0KCkgLSB0b3BDb250ZW50SW5zZXQo
KSk7CiB9CiAKIGludCBTY3JvbGxWaWV3OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKSBjb25zdApAQCAtNjYzLDkgKzY4Niw5IEBAIHZvaWQgU2Nyb2xsVmlldzo6
dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAgaW50IHBhZ2VTdGVwID0gc3RkOjptYXgo
c3RkOjptYXg8aW50PihjbGllbnRIZWlnaHQgKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVw
V2hlblBhZ2luZygpLCBjbGllbnRIZWlnaHQgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVu
UGFnZXMoKSksIDEpOwogICAgICAgICBJbnRSZWN0IG9sZFJlY3QobV92ZXJ0aWNhbFNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCkpOwogICAgICAgICBJbnRSZWN0IHZCYXJSZWN0KHdpZHRoKCkgLSBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIHRvcENvbnRlbnRJbnNldCgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgaGVpZ2h0KCkgLSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6IDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWlnaHQoKSAtIHRvcENvbnRlbnRJbnNldCgpIC0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciA/IG1f
aG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAwKSk7CiAgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXItPnNldEZyYW1lUmVjdCh2QmFyUmVjdCk7CiAgICAgICAgIGlmICghbV9zY3JvbGxi
YXJzU3VwcHJlc3NlZCAmJiBvbGRSZWN0ICE9IG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVj
dCgpKQogICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwpAQCAt
NzkyLDcgKzgxNSw3IEBAIEludFBvaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9Sb290VmlldygK
ICAgICBpZiAoZGVsZWdhdGVzU2Nyb2xsaW5nKCkpCiAgICAgICAgIHJldHVybiBjb252ZXJ0VG9S
b290Vmlldyhjb250ZW50c1BvaW50KTsKIAotICAgIEludFBvaW50IHZpZXdQb2ludCA9IGNvbnRl
bnRzUG9pbnQgKyBJbnRTaXplKDAsIGhlYWRlckhlaWdodCgpKSAtIHNjcm9sbE9mZnNldCgpOwor
ICAgIEludFBvaW50IHZpZXdQb2ludCA9IGNvbnRlbnRzUG9pbnQgKyBJbnRTaXplKDAsIGhlYWRl
ckhlaWdodCgpICsgdG9wQ29udGVudEluc2V0KCkpIC0gc2Nyb2xsT2Zmc2V0KCk7CiAgICAgcmV0
dXJuIGNvbnZlcnRUb1Jvb3RWaWV3KHZpZXdQb2ludCk7ICAKIH0KIApAQCAtODEyLDcgKzgzNSw3
IEBAIEludFJlY3QgU2Nyb2xsVmlldzo6Y29udGVudHNUb1Jvb3RWaWV3KGMKICAgICAgICAgcmV0
dXJuIGNvbnZlcnRUb1Jvb3RWaWV3KGNvbnRlbnRzUmVjdCk7CiAKICAgICBJbnRSZWN0IHZpZXdS
ZWN0ID0gY29udGVudHNSZWN0OwotICAgIHZpZXdSZWN0Lm1vdmUoLXNjcm9sbE9mZnNldCgpICsg
SW50U2l6ZSgwLCBoZWFkZXJIZWlnaHQoKSkpOworICAgIHZpZXdSZWN0Lm1vdmUoLXNjcm9sbE9m
ZnNldCgpICsgSW50U2l6ZSgwLCBoZWFkZXJIZWlnaHQoKSArIHRvcENvbnRlbnRJbnNldCgpKSk7
CiAgICAgcmV0dXJuIGNvbnZlcnRUb1Jvb3RWaWV3KHZpZXdSZWN0KTsKIH0KIApAQCAtODM5LDcg
Kzg2Miw3IEBAIEludFBvaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9XaW5kb3coY28KICAgICBp
ZiAoZGVsZWdhdGVzU2Nyb2xsaW5nKCkpCiAgICAgICAgIHJldHVybiBjb252ZXJ0VG9Db250YWlu
aW5nV2luZG93KGNvbnRlbnRzUG9pbnQpOwogCi0gICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29u
dGVudHNQb2ludCArIEludFNpemUoMCwgaGVhZGVySGVpZ2h0KCkpIC0gc2Nyb2xsT2Zmc2V0KCk7
CisgICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29udGVudHNQb2ludCArIEludFNpemUoMCwgaGVh
ZGVySGVpZ2h0KCkgKyB0b3BDb250ZW50SW5zZXQoKSkgLSBzY3JvbGxPZmZzZXQoKTsKICAgICBy
ZXR1cm4gY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyh2aWV3UG9pbnQpOyAgCiB9CiAKQEAgLTg1
OSw3ICs4ODIsNyBAQCBJbnRSZWN0IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9XaW5kb3coY29uCiAg
ICAgICAgIHJldHVybiBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnRlbnRzUmVjdCk7CiAK
ICAgICBJbnRSZWN0IHZpZXdSZWN0ID0gY29udGVudHNSZWN0OwotICAgIHZpZXdSZWN0Lm1vdmUo
LXNjcm9sbE9mZnNldCgpICsgSW50U2l6ZSgwLCBoZWFkZXJIZWlnaHQoKSkpOworICAgIHZpZXdS
ZWN0Lm1vdmUoLXNjcm9sbE9mZnNldCgpICsgSW50U2l6ZSgwLCBoZWFkZXJIZWlnaHQoKSArIHRv
cENvbnRlbnRJbnNldCgpKSk7CiAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3co
dmlld1JlY3QpOwogfQogCkBAIC0xMDU2LDYgKzEwNzksOCBAQCBJbnRSZWN0IFNjcm9sbFZpZXc6
OnNjcm9sbENvcm5lclJlY3QoKSBjCiAgICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCiAg
ICAgICAgIHJldHVybiBjb3JuZXJSZWN0OwogCisgICAgaW50IGhlaWdodFRyYWNrZWRCeVNjcm9s
bGJhciA9IGhlaWdodCgpIC0gdG9wQ29udGVudEluc2V0KCk7CisKICAgICBpZiAobV9ob3Jpem9u
dGFsU2Nyb2xsYmFyICYmIHdpZHRoKCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPndpZHRoKCkg
PiAwKSB7CiAgICAgICAgIGNvcm5lclJlY3QudW5pdGUoSW50UmVjdChtX2hvcml6b250YWxTY3Jv
bGxiYXItPndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQo
KSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksCkBAIC0xMDYzLDEzICsxMDg4LDEz
IEBAIEludFJlY3QgU2Nyb2xsVmlldzo6c2Nyb2xsQ29ybmVyUmVjdCgpIGMKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpKTsK
ICAgICB9CiAKLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiBoZWlnaHQoKSAtIG1fdmVy
dGljYWxTY3JvbGxiYXItPmhlaWdodCgpID4gMCkgeworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xs
YmFyICYmIGhlaWdodFRyYWNrZWRCeVNjcm9sbGJhciAtIG1fdmVydGljYWxTY3JvbGxiYXItPmhl
aWdodCgpID4gMCkgewogICAgICAgICBjb3JuZXJSZWN0LnVuaXRlKEludFJlY3Qod2lkdGgoKSAt
IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmhlaWdodCgpICsgdG9wQ29udGVu
dEluc2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0
KCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5oZWlnaHQoKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVpZ2h0VHJhY2tlZEJ5U2Nyb2xsYmFyIC0gbV92ZXJ0aWNhbFNjcm9s
bGJhci0+aGVpZ2h0KCkpKTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gY29ybmVyUmVjdDsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkocmV2aXNpb24gMTY1
OTcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTMsOSArMTUzLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENhbkJsaXRPblNj
cm9sbChib29sKTsKICAgICBib29sIGNhbkJsaXRPblNjcm9sbCgpIGNvbnN0OwogCi0gICAgLy8g
VGhlIHZpc2libGUgY29udGVudCByZWN0IGhhcyBhIGxvY2F0aW9uIHRoYXQgaXMgdGhlIHNjcm9s
bGVkIG9mZnNldCBvZiB0aGUgZG9jdW1lbnQuIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSB0aGUg
dmlld3BvcnQgd2lkdGgKLSAgICAvLyBhbmQgaGVpZ2h0LiBCeSBkZWZhdWx0IHRoZSBzY3JvbGxi
YXJzIHRoZW1zZWx2ZXMgYXJlIGV4Y2x1ZGVkIGZyb20gdGhpcyByZWN0YW5nbGUsIGJ1dCBhbiBv
cHRpb25hbCBib29sZWFuIGFyZ3VtZW50IGFsbG93cyB0aGVtIHRvIGJlCi0gICAgLy8gaW5jbHVk
ZWQuCisgICAgdmlydHVhbCBmbG9hdCB0b3BDb250ZW50SW5zZXQoKSBjb25zdCB7IHJldHVybiAw
OyB9CisKKyAgICAvLyBUaGUgdmlzaWJsZSBjb250ZW50IHJlY3QgaGFzIGEgbG9jYXRpb24gdGhh
dCBpcyB0aGUgc2Nyb2xsZWQgb2Zmc2V0IG9mIHRoZSBkb2N1bWVudC4gVGhlIHdpZHRoIGFuZCBo
ZWlnaHQgYXJlIHRoZSB1bm9ic2N1cmVkIHZpZXdwb3J0CisgICAgLy8gd2lkdGggYW5kIGhlaWdo
dC4gQnkgZGVmYXVsdCB0aGUgc2Nyb2xsYmFycyB0aGVtc2VsdmVzIGFyZSBleGNsdWRlZCBmcm9t
IHRoaXMgcmVjdGFuZ2xlLCBidXQgYW4gb3B0aW9uYWwgYm9vbGVhbiBhcmd1bWVudCBhbGxvd3Mg
dGhlbQorICAgIC8vIHRvIGJlIGluY2x1ZGVkLgogICAgIC8vIEluIHRoZSBzaXR1YXRpb24gdGhl
IGNsaWVudCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHNjcm9sbGluZyAoaWUuIHdpdGggYSB0aWxl
ZCBiYWNraW5nIHN0b3JlKSBpdCBpcyBwb3NzaWJsZSB0byB1c2UKICAgICAvLyB0aGUgc2V0Rml4
ZWRWaXNpYmxlQ29udGVudFJlY3QgaW5zdGVhZCBmb3IgdGhlIG1haW5mcmFtZSwgdGhvdWdoIHRo
aXMgbXVzdCBiZSB1cGRhdGVkIG1hbnVhbGx5LCBlLmcganVzdCBiZWZvcmUgcmVzdW1pbmcgdGhl
IHBhZ2UKICAgICAvLyB3aGljaCB1c3VhbGx5IHdpbGwgaGFwcGVuIHdoZW4gcGFubmluZywgcGlu
Y2hpbmcgYW5kIHJvdGF0aW9uIGVuZHMsIG9yIHdoZW4gc2NhbGUgb3IgcG9zaXRpb24gYXJlIGNo
YW5nZWQgbWFudWFsbHkuCkBAIC0xNzMsNyArMTc1LDcgQEAgcHVibGljOgogICAgIEludFJlY3Qg
dW5vYnNjdXJlZENvbnRlbnRSZWN0KCkgY29uc3Q7CiAgICAgSW50UmVjdCB1bm9ic2N1cmVkQ29u
dGVudFJlY3RJbmNsdWRpbmdTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gdW5vYnNjdXJlZENv
bnRlbnRSZWN0KCk7IH0KICNlbHNlCi0gICAgSW50UmVjdCB1bm9ic2N1cmVkQ29udGVudFJlY3Qo
KSBjb25zdCB7IHJldHVybiB2aXNpYmxlQ29udGVudFJlY3QoKTsgfQorICAgIEludFJlY3QgdW5v
YnNjdXJlZENvbnRlbnRSZWN0KFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyA9
IEV4Y2x1ZGVTY3JvbGxiYXJzKSBjb25zdDsKICAgICBJbnRSZWN0IHVub2JzY3VyZWRDb250ZW50
UmVjdEluY2x1ZGluZ1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiB2aXNpYmxlQ29udGVudFJl
Y3RJbmNsdWRpbmdTY3JvbGxiYXJzKCk7IH0KICNlbmRpZgogCkBAIC0xODksMTEgKzE5MSwxMyBA
QCBwdWJsaWM6CiAgICAgVGlsZUNhY2hlKiB0aWxlQ2FjaGUoKTsKICNlbmRpZgogCi0gICAgLy8g
dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpIGlzIGNvbXB1dGVkIGZyb20gdW5zY2FsZWRWaXNp
YmxlQ29udGVudFNpemUoKSBkaXZpZGVkIGJ5IHRoZSB2YWx1ZSBvZiB2aXNpYmxlQ29udGVudFNj
YWxlRmFjdG9yLgorICAgIC8vIHZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKSBpcyBjb21wdXRl
ZCBmcm9tIHVuc2NhbGVkVW5vYnNjdXJlZFZpc2libGVDb250ZW50U2l6ZSgpIGRpdmlkZWQgYnkg
dGhlIHZhbHVlIG9mIHZpc2libGVDb250ZW50U2NhbGVGYWN0b3IuCiAgICAgLy8gdmlzaWJsZUNv
bnRlbnRTY2FsZUZhY3RvciBpcyB1c3VhbGx5IDEsIGV4Y2VwdCB3aGVuIHRoZSBzZXR0aW5nIGRl
bGVnYXRlc1BhZ2VTY2FsaW5nIGlzIHRydWUgYW5kIHRoZQogICAgIC8vIFNjcm9sbFZpZXcgaXMg
dGhlIG1haW4gZnJhbWU7IGluIHRoYXQgY2FzZSwgdmlzaWJsZUNvbnRlbnRTY2FsZUZhY3RvciBp
cyBlcXVhbCB0byB0aGUgcGFnZSdzIHBhZ2VTY2FsZUZhY3Rvci4KLSAgICAvLyBQb3J0cyB0aGF0
IGRvbid0IHVzZSBwYWdlU2NhbGVGYWN0b3IgY2FuIHRyZWF0IHVuc2NhbGVkVmlzaWJsZUNvbnRl
bnRTaXplIGFuZCB2aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCkgYXMgZXF1aXZhbGVudC4KLSAg
ICBJbnRTaXplIHVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKFZpc2libGVDb250ZW50UmVjdElu
Y2x1ZGVzU2Nyb2xsYmFycyA9IEV4Y2x1ZGVTY3JvbGxiYXJzKSBjb25zdDsKKyAgICAvLyBQb3J0
cyB0aGF0IGRvbid0IHVzZSBwYWdlU2NhbGVGYWN0b3IgY2FuIHRyZWF0IHVuc2NhbGVkVW5vYnNj
dXJlZFZpc2libGVDb250ZW50U2l6ZSBhbmQgdmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpIGFz
IGVxdWl2YWxlbnQuCisgICAgLy8gdW5zY2FsZWRUb3RhbFZpc2libGVDb250ZW50U2l6ZSgpIGlu
Y2x1ZGVzIGFyZWFzIGluIHRoZSBjb250ZW50IHRoYXQgbWlnaHQgYmUgb2JzY3VyZWQgYnkgVUkg
ZWxlbWVudHMuCisgICAgSW50U2l6ZSB1bnNjYWxlZFVub2JzY3VyZWRWaXNpYmxlQ29udGVudFNp
emUoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzID0gRXhjbHVkZVNjcm9sbGJh
cnMpIGNvbnN0OworICAgIEludFNpemUgdW5zY2FsZWRUb3RhbFZpc2libGVDb250ZW50U2l6ZShW
aXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgPSBFeGNsdWRlU2Nyb2xsYmFycykg
Y29uc3Q7CiAgICAgdmlydHVhbCBmbG9hdCB2aXNpYmxlQ29udGVudFNjYWxlRmFjdG9yKCkgY29u
c3QgeyByZXR1cm4gMTsgfQogCiAgICAgLy8gRnVuY3Rpb25zIGZvciBnZXR0aW5nL3NldHRpbmcg
dGhlIHNpemUgd2Via2l0IHNob3VsZCB1c2UgdG8gbGF5b3V0IHRoZSBjb250ZW50cy4gQnkgZGVm
YXVsdCB0aGlzIGlzIHRoZSBzYW1lIGFzIHRoZSB2aXNpYmxlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24g
MTY1OTcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NzIsNyArMTQ3Miw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpmcmFtZVZpZXdEaWQKIHsKICAgICBpZiAobV9jbGlwTGF5ZXIpIHsKICAg
ICAgICAgY29uc3QgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3
KCk7Ci0gICAgICAgIG1fY2xpcExheWVyLT5zZXRTaXplKGZyYW1lVmlldy51bnNjYWxlZFZpc2li
bGVDb250ZW50U2l6ZSgpKTsKKyAgICAgICAgbV9jbGlwTGF5ZXItPnNldFNpemUoZnJhbWVWaWV3
LnVuc2NhbGVkVG90YWxWaXNpYmxlQ29udGVudFNpemUoKSk7CiAKICAgICAgICAgZnJhbWVWaWV3
RGlkU2Nyb2xsKCk7CiAgICAgICAgIHVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoKTsKQEAg
LTE4NzUsMTEgKzE4NzUsMTIgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVJv
b3RMYQogewogICAgIGlmIChtX3Jvb3RDb250ZW50TGF5ZXIpIHsKICAgICAgICAgY29uc3QgSW50
UmVjdCYgZG9jdW1lbnRSZWN0ID0gbV9yZW5kZXJWaWV3LmRvY3VtZW50UmVjdCgpOwotICAgICAg
ICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldFNpemUoZG9jdW1lbnRSZWN0LnNpemUoKSk7Ci0gICAg
ICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChkb2N1bWVudFJl
Y3QueCgpLCBkb2N1bWVudFJlY3QueSgpICsgbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmhlYWRl
ckhlaWdodCgpKSk7CisgICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0U2l6ZShkb2N1bWVu
dFJlY3Quc2l6ZSgpKTsgICAgICAgIAorICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldFBv
c2l0aW9uKEZsb2F0UG9pbnQoZG9jdW1lbnRSZWN0LngoKSwgZG9jdW1lbnRSZWN0LnkoKSArIG1f
cmVuZGVyVmlldy5mcmFtZVZpZXcoKS5oZWFkZXJIZWlnaHQoKQorICAgICAgICAgICAgKyBtX3Jl
bmRlclZpZXcuZnJhbWVWaWV3KCkudG9wQ29udGVudEluc2V0KCkpKTsKICAgICB9CiAgICAgaWYg
KG1fY2xpcExheWVyKQotICAgICAgICBtX2NsaXBMYXllci0+c2V0U2l6ZShtX3JlbmRlclZpZXcu
ZnJhbWVWaWV3KCkudW5zY2FsZWRWaXNpYmxlQ29udGVudFNpemUoKSk7CisgICAgICAgIG1fY2xp
cExheWVyLT5zZXRTaXplKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS51bnNjYWxlZFRvdGFsVmlz
aWJsZUNvbnRlbnRTaXplKCkpOwogCiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgIGlm
IChtX2NvbnRlbnRTaGFkb3dMYXllcikgewpAQCAtMzEyMiw3ICszMTIzLDcgQEAgdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OmVuc3VyZVJvb3RMYQogICAgICAgICAgICAgbV9jbGlwTGF5ZXIt
PmFkZENoaWxkKG1fc2Nyb2xsTGF5ZXIuZ2V0KCkpOwogICAgICAgICAgICAgbV9zY3JvbGxMYXll
ci0+YWRkQ2hpbGQobV9yb290Q29udGVudExheWVyLmdldCgpKTsKIAotICAgICAgICAgICAgbV9j
bGlwTGF5ZXItPnNldFNpemUobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnVuc2NhbGVkVmlzaWJs
ZUNvbnRlbnRTaXplKCkpOworICAgICAgICAgICAgbV9jbGlwTGF5ZXItPnNldFNpemUobV9yZW5k
ZXJWaWV3LmZyYW1lVmlldygpLnVuc2NhbGVkVG90YWxWaXNpYmxlQ29udGVudFNpemUoKSk7CiAK
ICAgICAgICAgICAgIHVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODI3LDYg
KzE4MjcsMTYgQEAgdm9pZCBJbnRlcm5hbHM6OnNldEZvb3RlckhlaWdodChmbG9hdCBoZQogICAg
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsKICAgICBmcmFtZVZpZXct
PnNldEZvb3RlckhlaWdodChoZWlnaHQpOwogfQorICAgIAordm9pZCBJbnRlcm5hbHM6OnNldFRv
cENvbnRlbnRJbnNldChmbG9hdCBjb250ZW50SW5zZXQpCit7CisgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gY29udGV4dERvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpOworICAgIHBhZ2Ut
PnNldFRvcENvbnRlbnRJbnNldChjb250ZW50SW5zZXQpOworfQogCiAjaWYgRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKQogdm9pZCBJbnRlcm5hbHM6OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JF
bGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmgJKHJldmlzaW9uIDE2NTk3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw2ICsyNTQsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHNldEhlYWRlckhlaWdodChmbG9hdCk7CiAgICAgdm9pZCBzZXRGb290ZXJIZWlnaHQoZmxvYXQp
OworICAgICAgICAgICAgICAgICAgICAKKyAgICB2b2lkIHNldFRvcENvbnRlbnRJbnNldChmbG9h
dCk7CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgdm9pZCB3ZWJraXRXaWxsRW50
ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaWRsCShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw2ICsyMTQsOCBAQAogICAg
IHZvaWQgc2V0SGVhZGVySGVpZ2h0KGZsb2F0IGhlaWdodCk7CiAgICAgdm9pZCBzZXRGb290ZXJI
ZWlnaHQoZmxvYXQgaGVpZ2h0KTsKIAorICAgIHZvaWQgc2V0VG9wQ29udGVudEluc2V0KGZsb2F0
IGNvbnRlbnRJbnNldCk7CisKICNpZiBkZWZpbmVkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJiYg
RU5BQkxFX0ZVTExTQ1JFRU5fQVBJCiAgICAgdm9pZCB3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVu
Rm9yRWxlbWVudChFbGVtZW50IGVsZW1lbnQpOwogICAgIHZvaWQgd2Via2l0RGlkRW50ZXJGdWxs
U2NyZWVuRm9yRWxlbWVudChFbGVtZW50IGVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNp
b24gMTY1OTgyKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMTQtMDMtMjAgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29t
PgorCisgICAgICAgIEltcGxlbWVudCBjb250ZW50SW5zZXQgZm9yIE1hYyBXZWJLaXQyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAyNzMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFk
ZHMgV0tWaWV3IEFQSSBmb3Igc2V0dGluZyBhIHRvcENvbnRlbnRJbnNldCgpLiBBbGwgb2YgdGhp
cyB3b3JrIGdldHMgCisgICAgICAgIHRoYXQgbnVtYmVyIHBsdW1iZWQgZG93biB0byBXZWJDb3Jl
LgorCisgICAgICAgICogU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAq
IFNoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMv
V0tWaWV3Lm1tOgorICAgICAgICAoLVtXS1ZpZXcgc2V0VG9wQ29udGVudEluc2V0Ol0pOgorICAg
ICAgICAoLVtXS1ZpZXcgdG9wQ29udGVudEluc2V0XSk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6V2ViUGFnZVBy
b3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRUb3BDb250ZW50SW5zZXQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNyZWF0aW9uUGFyYW1ldGVycyk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnRvcENvbnRlbnRJbnNldCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpXZWJQYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0VG9wQ29udGVudEluc2V0KToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluOgorCiAyMDE0LTAzLTE5ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8
YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIFN1cHBvcnQgYXN5bmNocm9ub3VzIE5TVGV4
dElucHV0Q2xpZW50CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFnZUNyZWF0aW9u
UGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDYgKzU1LDcgQEAgdm9pZCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUo
SQogICAgIGVuY29kZXIgPDwgY2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsOwogICAgIGVu
Y29kZXIgPDwgY2FuUnVuTW9kYWw7CiAgICAgZW5jb2RlciA8PCBkZXZpY2VTY2FsZUZhY3RvcjsK
KyAgICBlbmNvZGVyIDw8IHRvcENvbnRlbnRJbnNldDsKICAgICBlbmNvZGVyIDw8IG1lZGlhVm9s
dW1lOwogICAgIGVuY29kZXIgPDwgbWF5U3RhcnRNZWRpYVdoZW5JbldpbmRvdzsKICAgICBlbmNv
ZGVyIDw8IG1pbmltdW1MYXlvdXRTaXplOwpAQCAtMTIwLDYgKzEyMSw4IEBAIGJvb2wgV2ViUGFn
ZUNyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKEkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5kZXZpY2VTY2FsZUZhY3RvcikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMudG9w
Q29udGVudEluc2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocGFyYW1ldGVycy5tZWRpYVZvbHVtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMubWF5U3RhcnRNZWRpYVdoZW5JbldpbmRv
dykpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25Q
YXJhbWV0ZXJzLmgJKHJldmlzaW9uIDE2NTk3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDgg
QEAgc3RydWN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIGJvb2wgY2FuUnVuTW9k
YWw7CiAKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcjsKKworICAgIGZsb2F0IHRvcENvbnRl
bnRJbnNldDsKICAgICAKICAgICBmbG9hdCBtZWRpYVZvbHVtZTsKICAgICBib29sIG1heVN0YXJ0
TWVkaWFXaGVuSW5XaW5kb3c7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw2ICsyNzQsNyBAQCBXZWJQ
YWdlUHJveHk6OldlYlBhZ2VQcm94eShQYWdlQ2xpZW50JiBwCiAgICAgLCBtX3BhZ2VTY2FsZUZh
Y3RvcigxKQogICAgICwgbV9pbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3RvcigxKQogICAgICwgbV9j
dXN0b21EZXZpY2VTY2FsZUZhY3RvcigwKQorICAgICwgbV90b3BDb250ZW50SW5zZXQoMCkKICAg
ICAsIG1fbGF5ZXJIb3N0aW5nTW9kZShMYXllckhvc3RpbmdNb2RlOjpJblByb2Nlc3MpCiAgICAg
LCBtX2RyYXdzQmFja2dyb3VuZCh0cnVlKQogICAgICwgbV9kcmF3c1RyYW5zcGFyZW50QmFja2dy
b3VuZChmYWxzZSkKQEAgLTkyNSw2ICs5MjYsMTcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldERy
YXdzVHJhbnNwYXJlbnRCYQogICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGRyYXdzVHJhbnNwYXJlbnRCYWNrZ3Jv
dW5kKSwgbV9wYWdlSUQpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VG9wQ29udGVudElu
c2V0KGZsb2F0IGNvbnRlbnRJbnNldCkKK3sKKyAgICBpZiAobV90b3BDb250ZW50SW5zZXQgPT0g
Y29udGVudEluc2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RvcENvbnRlbnRJbnNldCA9
IGNvbnRlbnRJbnNldDsKKworICAgIGlmIChpc1ZhbGlkKCkpCisgICAgICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VG9wQ29udGVudEluc2V0KGNvbnRlbnRJbnNldCks
IG1fcGFnZUlEKTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6OnNldFVuZGVybGF5Q29sb3IoY29u
c3QgQ29sb3ImIGNvbG9yKQogewogICAgIGlmIChtX3VuZGVybGF5Q29sb3IgPT0gY29sb3IpCkBA
IC00MDMyLDYgKzQwNDQsNyBAQCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIFdlYlBhZ2VQcm94
eTo6CiAgICAgcGFyYW1ldGVycy5jYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwgPSBtX3Vp
Q2xpZW50LT5jYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKTsKICAgICBwYXJhbWV0ZXJz
LmNhblJ1bk1vZGFsID0gbV9jYW5SdW5Nb2RhbDsKICAgICBwYXJhbWV0ZXJzLmRldmljZVNjYWxl
RmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBwYXJhbWV0ZXJzLnRvcENvbnRlbnRJ
bnNldCA9IG1fdG9wQ29udGVudEluc2V0OwogICAgIHBhcmFtZXRlcnMubWVkaWFWb2x1bWUgPSBt
X21lZGlhVm9sdW1lOwogICAgIHBhcmFtZXRlcnMubWF5U3RhcnRNZWRpYVdoZW5JbldpbmRvdyA9
IG1fbWF5U3RhcnRNZWRpYVdoZW5JbldpbmRvdzsKICAgICBwYXJhbWV0ZXJzLm1pbmltdW1MYXlv
dXRTaXplID0gbV9taW5pbXVtTGF5b3V0U2l6ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDE2NTk3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDI2LDYgKzQyNiw5IEBA
IHB1YmxpYzoKICAgICBib29sIGRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9kcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZDsgfQogICAgIHZvaWQgc2V0RHJhd3NU
cmFuc3BhcmVudEJhY2tncm91bmQoYm9vbCk7CiAKKyAgICBmbG9hdCB0b3BDb250ZW50SW5zZXQo
KSBjb25zdCB7IHJldHVybiBtX3RvcENvbnRlbnRJbnNldDsgfQorICAgIHZvaWQgc2V0VG9wQ29u
dGVudEluc2V0KGZsb2F0KTsKKwogICAgIFdlYkNvcmU6OkNvbG9yIHVuZGVybGF5Q29sb3IoKSBj
b25zdCB7IHJldHVybiBtX3VuZGVybGF5Q29sb3I7IH0KICAgICB2b2lkIHNldFVuZGVybGF5Q29s
b3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKIApAQCAtMTMzOCw2ICsxMzQxLDcgQEAgcHJpdmF0
ZToKICAgICBkb3VibGUgbV9wYWdlU2NhbGVGYWN0b3I7CiAgICAgZmxvYXQgbV9pbnRyaW5zaWNE
ZXZpY2VTY2FsZUZhY3RvcjsKICAgICBmbG9hdCBtX2N1c3RvbURldmljZVNjYWxlRmFjdG9yOwor
ICAgIGZsb2F0IG1fdG9wQ29udGVudEluc2V0OwogCiAgICAgTGF5ZXJIb3N0aW5nTW9kZSBtX2xh
eWVySG9zdGluZ01vZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtODEsNiArODEsNyBAQAogQHByb3BlcnR5IChyZWFkd3JpdGUpIEJPT0wgYWxsb3dzTWFn
bmlmaWNhdGlvbjsKIEBwcm9wZXJ0eSAocmVhZHdyaXRlKSBkb3VibGUgbWFnbmlmaWNhdGlvbjsK
IEBwcm9wZXJ0eSAocmVhZHdyaXRlKSBCT09MIGFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdl
c3R1cmVzOworQHByb3BlcnR5IChyZWFkd3JpdGUpIENHRmxvYXQgdG9wQ29udGVudEluc2V0Owog
CiBAcHJvcGVydHkgKHJlYWRvbmx5KSBOU0NvbG9yICpfcGFnZUV4dGVuZGVkQmFja2dyb3VuZENv
bG9yOwogQHByb3BlcnR5KGNvcHksIG5vbmF0b21pYykgTlNDb2xvciAqdW5kZXJsYXlDb2xvcjsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlz
aW9uIDE2NTk3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzI5Miw2ICszMjkyLDE2IEBAIC0gKEJPT0wpYWxsb3dzQmFj
a0ZvcndhcmROYXZpZ2F0aW9uR2VzdHUKICAgICByZXR1cm4gX2RhdGEtPl9hbGxvd3NCYWNrRm9y
d2FyZE5hdmlnYXRpb25HZXN0dXJlczsKIH0KIAorLSAodm9pZClzZXRUb3BDb250ZW50SW5zZXQ6
KENHRmxvYXQpY29udGVudEluc2V0Cit7CisgICAgX2RhdGEtPl9wYWdlLT5zZXRUb3BDb250ZW50
SW5zZXQoY29udGVudEluc2V0KTsKK30KKworLSAoQ0dGbG9hdCl0b3BDb250ZW50SW5zZXQKK3sK
KyAgICByZXR1cm4gX2RhdGEtPl9wYWdlLT50b3BDb250ZW50SW5zZXQoKTsKK30KKwogLSAoTlND
b2xvciAqKV9wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IKIHsKICAgICBXZWJDb3JlOjpDb2xv
ciBjb2xvciA9IF9kYXRhLT5fcGFnZS0+cGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShy
ZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNCw2ICs0MDQsOCBAQCBXZWJQYWdlOjpXZWJQ
YWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgCiAgICAgc2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9y
KHBhcmFtZXRlcnMuc2Nyb2xsUGlubmluZ0JlaGF2aW9yKTsKICAgICBzZXRCYWNrZ3JvdW5kRXh0
ZW5kc0JleW9uZFBhZ2UocGFyYW1ldGVycy5iYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UpOwog
CisgICAgc2V0VG9wQ29udGVudEluc2V0KHBhcmFtZXRlcnMudG9wQ29udGVudEluc2V0KTsKKwog
ICAgIG1fdXNlckFnZW50ID0gcGFyYW1ldGVycy51c2VyQWdlbnQ7CiAKICAgICBXZWJCYWNrRm9y
d2FyZExpc3RQcm94eTo6c2V0SGlnaGVzdEl0ZW1JREZyb21VSVByb2Nlc3MocGFyYW1ldGVycy5o
aWdoZXN0VXNlZEJhY2tGb3J3YXJkSXRlbUlEKTsKQEAgLTIwMzIsNiArMjAzNCwxMSBAQCB2b2lk
IFdlYlBhZ2U6OnNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvCiAgICAgbV9kcmF3aW5nQXJlYS0+
c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6c2V0VG9wQ29udGVudEluc2V0
KGZsb2F0IGNvbnRlbnRJbnNldCkKK3sKKyAgICBtX3BhZ2UtPnNldFRvcENvbnRlbnRJbnNldChj
b250ZW50SW5zZXQpOworfQorCiB2b2lkIFdlYlBhZ2U6OnZpZXdXaWxsU3RhcnRMaXZlUmVzaXpl
KCkKIHsKICAgICBpZiAoIW1fcGFnZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtODQwLDYgKzg0
MCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXREcmF3c0JhY2tncm91bmQoYm9vbCk7CiAgICAg
dm9pZCBzZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChib29sKTsKIAorICAgIHZvaWQgc2V0
VG9wQ29udGVudEluc2V0KGZsb2F0KTsKKwogICAgIHZvaWQgdmlld1dpbGxTdGFydExpdmVSZXNp
emUoKTsKICAgICB2b2lkIHZpZXdXaWxsRW5kTGl2ZVJlc2l6ZSgpOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bgkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAgbWVz
c2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgU2V0RHJhd3NCYWNrZ3JvdW5k
KGJvb2wgZHJhd3NCYWNrZ3JvdW5kKQogICAgIFNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5k
KGJvb2wgZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQpCiAKKyAgICBTZXRUb3BDb250ZW50SW5z
ZXQoZmxvYXQgY29udGVudEluc2V0KQorCiAgICAgU2V0VW5kZXJsYXlDb2xvcihXZWJDb3JlOjpD
b2xvciBjb2xvcikKIAogICAgIFZpZXdXaWxsU3RhcnRMaXZlUmVzaXplKCkKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE2NTk4MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE3IEBACisyMDE0LTAzLTIwICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNv
bT4KKworICAgICAgICBJbXBsZW1lbnQgY29udGVudEluc2V0IGZvciBNYWMgV2ViS2l0MgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMjczCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHR3byB0ZXN0
cyBmb3IgaGl0LXRlc3Rpbmcgd2l0aCBhIHRvcENvbnRlbnRJbnNldC4KKworICAgICAgICAqIHBs
YXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1kcmF3
aW5nL2NvbnRlbnQtaW5zZXQtaGl0LXRlc3RpbmctaW4tZnJhbWUtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvY29udGVudC1pbnNl
dC1oaXQtdGVzdGluZy1pbi1mcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMtd2syL3RpbGVkLWRyYXdpbmcvY29udGVudC1pbnNldC1oaXQtdGVzdGluZy5odG1sOiBBZGRl
ZC4KKwogMjAxNC0wMy0yMCAgUmFkdSBTdGF2aWxhICA8c3RhdmlsYUBhZG9iZS5jb20+CiAKICAg
ICAgICAgW0NTUyBSZWdpb25zXSBDbGVhbnVwIHNjcm9sbGFibGUgcmVnaW9ucyB0ZXN0cwpJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1kcmF3aW5nL2NvbnRlbnQtaW5z
ZXQtaGl0LXRlc3RpbmctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIv
dGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxIEBACitQYXNzIQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjLXdrMi90aWxlZC1kcmF3aW5nL2NvbnRlbnQtaW5zZXQtaGl0LXRlc3RpbmctaW4tZnJh
bWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13
azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWluLWZyYW1lLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvdGls
ZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWluLWZyYW1lLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIgQEAKKworUGFzcyEKSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0
aW5nLWluLWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
LXdrMi90aWxlZC1kcmF3aW5nL2NvbnRlbnQtaW5zZXQtaGl0LXRlc3RpbmctaW4tZnJhbWUuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJh
d2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWluLWZyYW1lLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisgICAgZnVuY3Rp
b24gcnVuVGVzdCgpIHsKKyAgICAgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICAgICAg
d2luZG93LmludGVybmFscy5zZXRUb3BDb250ZW50SW5zZXQoMTAwKTsKKyAgICAgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisK
KyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oMjAsIDEyMCk7CisgICAgICAgIGV2ZW50
U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAg
fQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CisgICAgPGlm
cmFtZSBzcmM9InJlc291cmNlcy9pZnJhbWUtdG8taGl0LXRlc3QuaHRtbCIgc2Nyb2xsaW5nPSJu
byIgZnJhbWVib3JkZXI9Im5vIiBoZWlnaHQ9IjMwMCIgd2lkdGg9IjYwMCI+PC9pZnJhbWU+Cisg
ICAgPGRpdiBpZD0icmVzdWx0Ij5UaGlzIHRlc3QgbmVlZHMgdG8gYmUgcnVuIHRocm91Z2ggV2Vi
S2l0VGVzdFJ1bm5lci48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5n
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1k
cmF3aW5nL2NvbnRlbnQtaW5zZXQtaGl0LXRlc3RpbmcuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhp
dC10ZXN0aW5nLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorPGh0bWw+Cis8
aGVhZD4KKzxzdHlsZT4KKyAgICAjdGFyZ2V0IHsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjpw
dXJwbGU7CisgICAgICAgIHdpZHRoOjI1cHg7CisgICAgICAgIGhlaWdodDoyNXB4OworICAgIH0K
Kzwvc3R5bGU+Cis8c2NyaXB0PgorICAgIHZhciBudW1iZXJPZkNsaWNrcyA9IDA7CisKKyAgICBm
dW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICBpZiAoIXdpbmRvdy5ldmVudFNlbmRlcikKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAg
ICAgICB3aW5kb3cuaW50ZXJuYWxzLnNldFRvcENvbnRlbnRJbnNldCgxMDApOworICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQo
KTsKKworICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbygxNSwgMTE1KTsKKyAgICAgICAg
ZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsK
KworICAgICAgICB2YXIgcmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIp
OworICAgICAgICBpZiAobnVtYmVyT2ZDbGlja3MgPiAwKQorICAgICAgICAgICAgcmVzdWx0Lmlu
bmVySFRNTCA9ICJQYXNzISI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdC5pbm5l
ckhUTUwgPSAiRmFpbC4iOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBjbGlja2VkKCkgewor
ICAgICAgICBudW1iZXJPZkNsaWNrcyA9IDE7CisgICAgfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBvbmNsaWNrPSJj
bGlja2VkKCkiPjwvZGl2PgorICAgIDxkaXYgaWQ9InJlc3VsdCI+VGhpcyB0ZXN0IG5lZWRzIHRv
IGJlIHJ1biB0aHJvdWdoIFdlYktpdFRlc3RSdW5uZXIuPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+
Cg==
</data>
<flag name="review"
          id="251571"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227337</attachid>
            <date>2014-03-20 14:46:53 -0700</date>
            <delta_ts>2014-03-20 15:02:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>37004</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTk4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBACisyMDE0LTAzLTIwICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgY29udGVudEluc2V0
IGZvciBNYWMgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMwMjczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRvcENvbnRlbnRJbnNldCgpLiBJ
ZiBhIHBhZ2UgaGFzIGEgdG9wQ29udGVudEluc2V0KCksIAorICAgICAgICB0aGUgcm9vdCBsYXll
cuKAmXMgcG9zaXRpb24gaXMgYWRqdXN0ZWQgdG8gYWNjb3VudCBmb3IgdGhlIGluc2V0LiBJdCBp
cyBhc3N1bWVkIHRoYXQgCisgICAgICAgIHRoZSBhcmVhIGFjY291bnRlZCBmb3IgYnkgdGhlIGlu
c2V0IGlzIHZpc2libGUgYnV0IG9ic2N1cmVkLCBzbyBzY3JvbGxiYXJzIG5lZWQgdG8gCisgICAg
ICAgIGJlIG1vdmVkIHNvIHRoYXQgdGhleSBvbmx5IGNvdmVyIHRoZSBub24tb2JzY3VyZWQgYXJl
YSwgYW5kIG1vc3QgcGFydHMgb2YgV2ViQ29yZSAKKyAgICAgICAgdGhhdCB3b25kZXIgYWJvdXQg
dmlzaWJsZUNvbnRlbnRTaXplIG9ubHkgY2FyZSBhYm91dCB0aGUgdW5vYnNjdXJlZCBhcmVhLCBz
byB0aGlzIAorICAgICAgICBwYXRjaCBtYWtlcyB0aGF0IHZpc2libGVDb250ZW50UmVjdCByZXR1
cm4gdGhlIHVub2JzY3VyZWRSZWN0LiBGaW5hbGx5IHNpbmNlIHRoaXMgCisgICAgICAgIGlzIGFj
aGlldmVkIGJ5IG1vdmluZyBhIGxheWVy4oCZcyBwb3NpdGlvbiwgdGhlIHRvcENvbnRlbnRJbnNl
dCgpIGFsc28gbmVlZHMgdG8gYmUgCisgICAgICAgIGZhY3RvcmVkIGludG8gdmFyaW91cyBmdW5j
dGlvbnMgdGhhdCBhcmUgdXNlZCB0byBjb252ZXJ0IGJldHdlZW4gY29vcmRpbmF0ZSAKKyAgICAg
ICAgc3BhY2VzLiAKKworICAgICAgICBSZXR1cm4gUGFnZTo6dG9wQ29udGVudEluc2V0KCkgaWYg
dGhpcyBpcyB0aGUgbWFpbiBmcmFtZS4KKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRvcENvbnRlbnRJbnNldCk6CisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuaDoKKworICAgICAgICBDYWNoZSB0aGUgaW5zZXQgb24gUGFnZS4KKyAg
ICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6UGFnZSk6Cisg
ICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp0b3BDb250ZW50
SW5zZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0VG9wQ29udGVudEluc2V0KToKKwor
ICAgICAgICB1bm9ic2N1cmVkQ29udGVudFJlY3QoKSB1c2VkIHRvIHVuY29uZGl0aW9uYWxseSBy
ZXR1cm4gdmlzaWJsZUNvbnRlbnRSZWN0KCkgb24gCisgICAgICAgIG5vbi1pT1MgcGxhdGZvcm1z
LiBOb3cgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3Igc29tZSB0ZWNobmljYWxseSB2aXNpYmxlIGNv
bnRlbnQgdG8gCisgICAgICAgIGJlIG9ic2N1cmVkLCB0aGlzIGNvZGUgbmVlZGVkIHRvIGJlIHJl
LXdvcmtlZCBhIGJpdCB0byBtYWtlIHNvbWUgbW9yZSBzZW5zZS4gCisgICAgICAgIHZpc2libGVD
b250ZW50UmVjdCgpIG5vdyByZXByZXNlbnRzIHRoYXQgdmlzaWJsZSBjb250ZW50IHRoYXQgaXMg
Y29tcGxldGVseSAKKyAgICAgICAgdW5vYnNjdXJlZCwgc28gaXQgc2hvdWxkIGNhbGwgaW50byB1
bm9ic2N1cmVkQ29udGVudFJlY3QoKSByYXRoZXIgdGhhbiB0aGUgb3RoZXIgCisgICAgICAgIHdh
eSBhcm91bmQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3Ojp1bm9ic2N1cmVkQ29udGVudFJlY3QpOgorCisgICAgICAgIHVu
c2NhbGVkVG90YWxWaXNpYmxlQ29udGVudFNpemUoKSBpbmNsdWRlcyB0aGUgc2l6ZSBvZiBhbGwg
Y29udGVudCB0aGF0IG1pZ2h0IGJlIAorICAgICAgICB2aXNpYmxlLiBTb21lIG9mIHRoaXMgY29u
dGVudCBtaWdodCBiZSBvYnNjdXJlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnVu
c2NhbGVkVG90YWxWaXNpYmxlQ29udGVudFNpemUpOgorCisgICAgICAgIE1vc3Qgb2YgdGhlIHRp
bWUsIHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgY29udGVudCB0aGF0IGlzIEZVTExZIHZpc2libGUu
IFRoYXQgaXMgCisgICAgICAgIHdoYXQgeW91IGdldCBmcm9tIHVuc2NhbGVkVW5vYnNjdXJlZFZp
c2libGVDb250ZW50U2l6ZSgpLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dW5zY2Fs
ZWRVbm9ic2N1cmVkVmlzaWJsZUNvbnRlbnRTaXplKToKKworICAgICAgICBVc2UgdGhlIHVub2Jz
Y3VyZWQgc2l6ZSBmb3IgdGhlc2UgY29tcHV0YXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6bGF5b3V0U2l6ZSk6CisKKyAgICAgICAgRmFjdG9yIGluIHRoZSB0b3BDb250
ZW50SW5zZXQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbE9mZnNldFJl
bGF0aXZlVG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxQ
b3NpdGlvblJlbGF0aXZlVG9Eb2N1bWVudCk6CisKKyAgICAgICAgVGhlIHNjcm9sbGJhcnMgc2hv
dWxkIGJlIHBvc2l0aW9uZWQgdG8gY292ZXIgdGhlIG5vbi1vYnNjdXJlZCBjb250ZW50IG9ubHku
IAorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6CisKKyAg
ICAgICAgQWdhaW4sIGZhY3RvciB0aGUgdG9wQ29udGVudEluc2V0KCkgaW50byB0aGVzZSBjb252
ZXJzaW9ucyBzaW5jZSB0aGUgcm9vdCBsYXllcuKAmXMgCisgICAgICAgIHBvc2l0aW9uIGhhcyBi
ZWVuIGFkanVzdGVkIHRvIGFjY291bnQgZm9yIGl0LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Vmlldzo6Y29udGVudHNUb1Jvb3RWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OmNvbnRlbnRzVG9XaW5kb3cpOgorCisgICAgICAgICBKdXN0IGxpa2UgdGhlIHNjcm9sbGJhcnMs
IHRoZSBzY3JvbGwgY29ybmVyIG11c3QgYmUgbW92ZWQgdGhlIGFjY291bnQgZm9yIHRoZSAKKyAg
ICAgICAgaW5zZXQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxDb3JuZXJS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxWaWV3Ojp0b3BDb250ZW50SW5zZXQpOgorCisgICAgICAgIFJlbmRlckxheWVyQ29t
cG9zaXRvciBjYXJlcyBhYm91dCB1bnNjYWxlZFRvdGFsVmlzaWJsZUNvbnRlbnRTaXplKCkuIEl0
IGRvZXMgbm90IAorICAgICAgICBjYXJlIGlmIHNvbWUgb2YgdGhhdCBjb250ZW50IGlzIG9ic2N1
cmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZVZpZXdEaWRDaGFuZ2VT
aXplKToKKworICAgICAgICBNb3ZlIHRoZSByb290IGxheWVy4oCZcyBwb3NpdGlvbiBiYXNlZCBv
biB0aGUgY29udGVudEluc2V0LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVSb290TGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmVuc3VyZVJvb3RMYXllcik6CisKKyAgICAgICAgQWxsb3cgc2V0dGlu
ZyBjb250ZW50SW5zZXQgdmlhIEludGVybmFscyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICAg
ICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6
OnNldFRvcENvbnRlbnRJbnNldCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAg
ICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTQtMDMtMjAgIEJyaWFuIEJ1cmcg
IDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIFJlcGxheTogZml4IHNvbWUgb3ZlcnNp
Z2h0cyBpbiB0aGUgcmVwbGF5IGJhY2tlbmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZp
c2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBj
b3B5KQpAQCAtMTAzOSw2ICsxMDM5LDcgQEAgX19aTjdXZWJDb3JlNFBhZ2UxNnNldENhblN0YXJ0
TWVkaWFFYgogX19aTjdXZWJDb3JlNFBhZ2UxNnNldERlZmVyc0xvYWRpbmdFYgogX19aTjdXZWJD
b3JlNFBhZ2UxOHJlbW92ZVNjaGVkdWxlUGFpckVOM1dURjEwUGFzc1JlZlB0cklOUzFfMTJTY2hl
ZHVsZVBhaXJFRUUKIF9fWk43V2ViQ29yZTRQYWdlMThzZXRQYWdlU2NhbGVGYWN0b3JFZlJLTlNf
OEludFBvaW50RQorX19aTjdXZWJDb3JlNFBhZ2UxOHNldFRvcENvbnRlbnRJbnNldEVmCiBfX1pO
N1dlYkNvcmU0UGFnZTE5YWRkTGF5b3V0TWlsZXN0b25lc0VqCiBfX1pON1dlYkNvcmU0UGFnZTIw
c2Nyb2xsaW5nQ29vcmRpbmF0b3JFdgogX19aTjdXZWJDb3JlNFBhZ2UyMHNldERldmljZVNjYWxl
RmFjdG9yRWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDE2NTk3
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTI5LDYgKzkyOSwxNSBAQCB2b2lkIEZyYW1lVmlldzo6c2V0Rm9vdGVySGVpZ2h0KGludCBm
b290CiAgICAgICAgIHJlbmRlclZpZXctPnNldE5lZWRzTGF5b3V0KCk7CiB9CiAKK2Zsb2F0IEZy
YW1lVmlldzo6dG9wQ29udGVudEluc2V0KCkgY29uc3QKK3sKKyAgICBpZiAoIWZyYW1lKCkuaXNN
YWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgUGFnZSogcGFnZSA9IGZy
YW1lKCkucGFnZSgpOworICAgIHJldHVybiBwYWdlID8gcGFnZS0+dG9wQ29udGVudEluc2V0KCkg
OiAwOworfQorICAgIAogYm9vbCBGcmFtZVZpZXc6Omhhc0NvbXBvc2l0ZWRDb250ZW50KCkgY29u
c3QKIHsKICAgICBpZiAoUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRoaXMtPnJlbmRlclZpZXco
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMTY1OTcxKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNDMzLDYgKzQz
Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBmb290ZXJIZWlnaHQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2Zvb3RlckhlaWdodDsgfQogICAgIHZvaWQgc2V0Rm9vdGVySGVpZ2h0
KGludCk7CiAKKyAgICB2aXJ0dWFsIGZsb2F0IHRvcENvbnRlbnRJbnNldCgpIGNvbnN0IG92ZXJy
aWRlOworCiAgICAgdmlydHVhbCB2b2lkIHdpbGxTdGFydExpdmVSZXNpemUoKSBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKSBvdmVycmlkZTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDcgQEAgUGFnZTo6UGFnZShQ
YWdlQ2xpZW50cyYgcGFnZUNsaWVudHMpCiAgICAgLCBtX21lZGlhVm9sdW1lKDEpCiAgICAgLCBt
X3BhZ2VTY2FsZUZhY3RvcigxKQogICAgICwgbV9kZXZpY2VTY2FsZUZhY3RvcigxKQorICAgICwg
bV90b3BDb250ZW50SW5zZXQoMCkKICAgICAsIG1fc3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25z
KGZhbHNlKQogICAgICwgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQoZmFsc2UpCiAgICAgLCBtX3Vz
ZXJTdHlsZVNoZWV0TW9kaWZpY2F0aW9uVGltZSgwKQpAQCAtNzQ4LDcgKzc0OSwxNyBAQCB2b2lk
IFBhZ2U6OnNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjCiAgICAgcGFnZUNhY2hlKCktPm1h
cmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyh0aGlzKTsKICAgICBHcmFwaGljc0NvbnRleHQ6OnVw
ZGF0ZURvY3VtZW50TWFya2VyUmVzb3VyY2VzKCk7CiB9Ci0KKyAgICAKK3ZvaWQgUGFnZTo6c2V0
VG9wQ29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJbnNldCkKK3sKKyAgICBpZiAobV90b3BDb250
ZW50SW5zZXQgPT0gY29udGVudEluc2V0KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV90
b3BDb250ZW50SW5zZXQgPSBjb250ZW50SW5zZXQ7CisgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRl
clZpZXcgPSBtYWluRnJhbWUoKS5jb250ZW50UmVuZGVyZXIoKSkKKyAgICAgICAgcmVuZGVyVmll
dy0+c2V0TmVlZHNMYXlvdXQoKTsKK30KKyAgICAKIHZvaWQgUGFnZTo6c2V0U2hvdWxkU3VwcHJl
c3NTY3JvbGxiYXJBbmltYXRpb25zKGJvb2wgc3VwcHJlc3NBbmltYXRpb25zKQogewogICAgIGlm
IChzdXBwcmVzc0FuaW1hdGlvbnMgPT0gbV9zdXBwcmVzc1Njcm9sbGJhckFuaW1hdGlvbnMpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuaAkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3OCw2ICsyNzgsOSBAQCBwdWJsaWM6CiAgICAg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2RldmljZVNjYWxlRmFj
dG9yOyB9CiAgICAgdm9pZCBzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7CiAKKyAgICBmbG9h
dCB0b3BDb250ZW50SW5zZXQoKSBjb25zdCB7IHJldHVybiBtX3RvcENvbnRlbnRJbnNldDsgfQor
ICAgIHZvaWQgc2V0VG9wQ29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJbnNldCk7CisKICAgICBi
b29sIHNob3VsZFN1cHByZXNzU2Nyb2xsYmFyQW5pbWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1f
c3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25zOyB9CiAgICAgdm9pZCBzZXRTaG91bGRTdXBwcmVz
c1Njcm9sbGJhckFuaW1hdGlvbnMoYm9vbCBzdXBwcmVzc0FuaW1hdGlvbnMpOwogICAgIHZvaWQg
bG9ja0FsbE92ZXJsYXlTY3JvbGxiYXJzVG9IaWRkZW4oYm9vbCBsb2NrT3ZlcmxheVNjcm9sbGJh
cnMpOwpAQCAtNDg5LDYgKzQ5Miw4IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9wYWdlU2NhbGVG
YWN0b3I7CiAgICAgZmxvYXQgbV9kZXZpY2VTY2FsZUZhY3RvcjsKIAorICAgIGZsb2F0IG1fdG9w
Q29udGVudEluc2V0OworCiAgICAgYm9vbCBtX3N1cHByZXNzU2Nyb2xsYmFyQW5pbWF0aW9uczsK
IAogICAgIFBhZ2luYXRpb24gbV9wYWdpbmF0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDE2NTk3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsOCArMjM1LDE3IEBA
IHZvaWQgU2Nyb2xsVmlldzo6c2V0RGVsZWdhdGVzU2Nyb2xsaW5nKGIKICAgICBtX2RlbGVnYXRl
c1Njcm9sbGluZyA9IGRlbGVnYXRlc1Njcm9sbGluZzsKICAgICBkZWxlZ2F0ZXNTY3JvbGxpbmdE
aWRDaGFuZ2UoKTsKIH0KLQotSW50U2l6ZSBTY3JvbGxWaWV3Ojp1bnNjYWxlZFZpc2libGVDb250
ZW50U2l6ZShWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5j
bHVzaW9uKSBjb25zdAorICAgIAorI2lmICFQTEFURk9STShJT1MpCitJbnRSZWN0IFNjcm9sbFZp
ZXc6OnVub2JzY3VyZWRDb250ZW50UmVjdChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9s
bGJhcnMgc2Nyb2xsYmFySW5jbHVzaW9uKSBjb25zdAoreworICAgIEZsb2F0U2l6ZSB2aXNpYmxl
Q29udGVudFNpemUgPSB1bnNjYWxlZFVub2JzY3VyZWRWaXNpYmxlQ29udGVudFNpemUoc2Nyb2xs
YmFySW5jbHVzaW9uKTsKKyAgICB2aXNpYmxlQ29udGVudFNpemUuc2NhbGUoMSAvIHZpc2libGVD
b250ZW50U2NhbGVGYWN0b3IoKSk7CisgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQobV9zY3Jv
bGxPZmZzZXQpLCBleHBhbmRlZEludFNpemUodmlzaWJsZUNvbnRlbnRTaXplKSk7Cit9CisjZW5k
aWYKKyAgICAKK0ludFNpemUgU2Nyb2xsVmlldzo6dW5zY2FsZWRUb3RhbFZpc2libGVDb250ZW50
U2l6ZShWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVz
aW9uKSBjb25zdAogewogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQogICAgICAgICByZXR1cm4g
cGxhdGZvcm1WaXNpYmxlQ29udGVudFNpemUoc2Nyb2xsYmFySW5jbHVzaW9uID09IEluY2x1ZGVT
Y3JvbGxiYXJzKTsKQEAgLTI1OCw5ICsyNjcsMjUgQEAgSW50U2l6ZSBTY3JvbGxWaWV3Ojp1bnNj
YWxlZFZpc2libGVDb250ZQogCiAgICAgcmV0dXJuIEludFNpemUod2lkdGgoKSAtIHZlcnRpY2Fs
U2Nyb2xsYmFyV2lkdGgsIGhlaWdodCgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCkuZXhw
YW5kZWRUbyhJbnRTaXplKCkpOwogfQorICAgIAorSW50U2l6ZSBTY3JvbGxWaWV3Ojp1bnNjYWxl
ZFVub2JzY3VyZWRWaXNpYmxlQ29udGVudFNpemUoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNT
Y3JvbGxiYXJzIHNjcm9sbGJhckluY2x1c2lvbikgY29uc3QKK3sKKyAgICBJbnRTaXplIHZpc2li
bGVDb250ZW50U2l6ZSA9IHVuc2NhbGVkVG90YWxWaXNpYmxlQ29udGVudFNpemUoc2Nyb2xsYmFy
SW5jbHVzaW9uKTsKKyAgICAKKyAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0
dXJuIHZpc2libGVDb250ZW50U2l6ZTsKKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQor
ICAgIGlmICghbV9maXhlZFZpc2libGVDb250ZW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiB2aXNpYmxlQ29udGVudFNpemU7CisjZW5kaWYKKworICAgIHZpc2libGVDb250ZW50U2l6
ZS5zZXRIZWlnaHQodmlzaWJsZUNvbnRlbnRTaXplLmhlaWdodCgpIC0gdG9wQ29udGVudEluc2V0
KCkpOworICAgIHJldHVybiB2aXNpYmxlQ29udGVudFNpemU7Cit9CiAKICNpZiAhUExBVEZPUk0o
R1RLKQotSW50UmVjdCBTY3JvbGxWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNp
YmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2NvbGxiYXJJbmNsdXNpb24sIFZpc2li
bGVDb250ZW50UmVjdEJlaGF2aW9yIHZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAor
SW50UmVjdCBTY3JvbGxWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29u
dGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVzaW9uLCBWaXNpYmxlQ29u
dGVudFJlY3RCZWhhdmlvciB2aXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QKIHsKICNp
ZiBQTEFURk9STShJT1MpCiAgICAgaWYgKHZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yID09IExl
Z2FjeUlPU0RvY3VtZW50Vmlld1JlY3QpIHsKQEAgLTI3NSwyMiArMzAwLDIwIEBAIEludFJlY3Qg
U2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0SW4KICNlbmRpZgogCiAgICAgaWYgKHBsYXRm
b3JtV2lkZ2V0KCkpCi0gICAgICAgIHJldHVybiBwbGF0Zm9ybVZpc2libGVDb250ZW50UmVjdChz
Y29sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycyk7CisgICAgICAgIHJldHVybiBw
bGF0Zm9ybVZpc2libGVDb250ZW50UmVjdChzY3JvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNj
cm9sbGJhcnMpOwogCiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgaWYgKCFtX2Zp
eGVkVmlzaWJsZUNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1fZml4ZWRW
aXNpYmxlQ29udGVudFJlY3Q7CiAjZW5kaWYKIAotICAgIEZsb2F0U2l6ZSB2aXNpYmxlQ29udGVu
dFNpemUgPSB1bnNjYWxlZFZpc2libGVDb250ZW50U2l6ZShzY29sbGJhckluY2x1c2lvbik7Ci0g
ICAgdmlzaWJsZUNvbnRlbnRTaXplLnNjYWxlKDEgLyB2aXNpYmxlQ29udGVudFNjYWxlRmFjdG9y
KCkpOwotICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0KSwgZXhwYW5k
ZWRJbnRTaXplKHZpc2libGVDb250ZW50U2l6ZSkpOworICAgIHJldHVybiB1bm9ic2N1cmVkQ29u
dGVudFJlY3QoKTsKIH0KICNlbmRpZgogCiBJbnRTaXplIFNjcm9sbFZpZXc6OmxheW91dFNpemUo
KSBjb25zdAogewotICAgIHJldHVybiBtX2ZpeGVkTGF5b3V0U2l6ZS5pc0VtcHR5KCkgfHwgIW1f
dXNlRml4ZWRMYXlvdXQgPyB1bnNjYWxlZFZpc2libGVDb250ZW50U2l6ZShFeGNsdWRlU2Nyb2xs
YmFycykgOiBtX2ZpeGVkTGF5b3V0U2l6ZTsKKyAgICByZXR1cm4gbV9maXhlZExheW91dFNpemUu
aXNFbXB0eSgpIHx8ICFtX3VzZUZpeGVkTGF5b3V0ID8gdW5zY2FsZWRVbm9ic2N1cmVkVmlzaWJs
ZUNvbnRlbnRTaXplKEV4Y2x1ZGVTY3JvbGxiYXJzKSA6IG1fZml4ZWRMYXlvdXRTaXplOwogfQog
CiBJbnRTaXplIFNjcm9sbFZpZXc6OmZpeGVkTGF5b3V0U2l6ZSgpIGNvbnN0CkBAIC0zNjksMTMg
KzM5MiwxMyBAQCBJbnRQb2ludCBTY3JvbGxWaWV3OjphZGp1c3RTY3JvbGxQb3NpdGlvCiBJbnRT
aXplIFNjcm9sbFZpZXc6OnNjcm9sbE9mZnNldFJlbGF0aXZlVG9Eb2N1bWVudCgpIGNvbnN0CiB7
CiAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXQgPSB0aGlzLT5zY3JvbGxPZmZzZXQoKTsKLSAgICBy
ZXR1cm4gSW50U2l6ZShzY3JvbGxPZmZzZXQud2lkdGgoKSwgc2Nyb2xsT2Zmc2V0LmhlaWdodCgp
IC0gaGVhZGVySGVpZ2h0KCkpOworICAgIHJldHVybiBJbnRTaXplKHNjcm9sbE9mZnNldC53aWR0
aCgpLCBzY3JvbGxPZmZzZXQuaGVpZ2h0KCkgLSBoZWFkZXJIZWlnaHQoKSAtIHRvcENvbnRlbnRJ
bnNldCgpKTsKIH0KIAogSW50UG9pbnQgU2Nyb2xsVmlldzo6c2Nyb2xsUG9zaXRpb25SZWxhdGl2
ZVRvRG9jdW1lbnQoKSBjb25zdAogewogICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gdGhp
cy0+c2Nyb2xsUG9zaXRpb24oKTsKLSAgICByZXR1cm4gSW50UG9pbnQoc2Nyb2xsUG9zaXRpb24u
eCgpLCBzY3JvbGxQb3NpdGlvbi55KCkgLSBoZWFkZXJIZWlnaHQoKSk7CisgICAgcmV0dXJuIElu
dFBvaW50KHNjcm9sbFBvc2l0aW9uLngoKSwgc2Nyb2xsUG9zaXRpb24ueSgpIC0gaGVhZGVySGVp
Z2h0KCkgLSB0b3BDb250ZW50SW5zZXQoKSk7CiB9CiAKIGludCBTY3JvbGxWaWV3OjpzY3JvbGxT
aXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdApAQCAtNjYzLDkgKzY4
Niw5IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAg
aW50IHBhZ2VTdGVwID0gc3RkOjptYXgoc3RkOjptYXg8aW50PihjbGllbnRIZWlnaHQgKiBTY3Jv
bGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBjbGllbnRIZWlnaHQgLSBTY3Jv
bGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEpOwogICAgICAgICBJbnRSZWN0IG9s
ZFJlY3QobV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOwogICAgICAgICBJbnRSZWN0
IHZCYXJSZWN0KHdpZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRvcENvbnRl
bnRJbnNldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIt
PndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSAobV9ob3Jpem9u
dGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6IDApKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIHRvcENvbnRlbnRJbnNldCgpIC0gKG1f
aG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAw
KSk7CiAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdCh2QmFyUmVjdCk7
CiAgICAgICAgIGlmICghbV9zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiBvbGRSZWN0ICE9IG1fdmVy
dGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKQogICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhci0+aW52YWxpZGF0ZSgpOwpAQCAtNzkyLDcgKzgxNSw3IEBAIEludFBvaW50IFNjcm9sbFZp
ZXc6OmNvbnRlbnRzVG9Sb290VmlldygKICAgICBpZiAoZGVsZWdhdGVzU2Nyb2xsaW5nKCkpCiAg
ICAgICAgIHJldHVybiBjb252ZXJ0VG9Sb290Vmlldyhjb250ZW50c1BvaW50KTsKIAotICAgIElu
dFBvaW50IHZpZXdQb2ludCA9IGNvbnRlbnRzUG9pbnQgKyBJbnRTaXplKDAsIGhlYWRlckhlaWdo
dCgpKSAtIHNjcm9sbE9mZnNldCgpOworICAgIEludFBvaW50IHZpZXdQb2ludCA9IGNvbnRlbnRz
UG9pbnQgKyBJbnRTaXplKDAsIGhlYWRlckhlaWdodCgpICsgdG9wQ29udGVudEluc2V0KCkpIC0g
c2Nyb2xsT2Zmc2V0KCk7CiAgICAgcmV0dXJuIGNvbnZlcnRUb1Jvb3RWaWV3KHZpZXdQb2ludCk7
ICAKIH0KIApAQCAtODEyLDcgKzgzNSw3IEBAIEludFJlY3QgU2Nyb2xsVmlldzo6Y29udGVudHNU
b1Jvb3RWaWV3KGMKICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1Jvb3RWaWV3KGNvbnRlbnRzUmVj
dCk7CiAKICAgICBJbnRSZWN0IHZpZXdSZWN0ID0gY29udGVudHNSZWN0OwotICAgIHZpZXdSZWN0
Lm1vdmUoLXNjcm9sbE9mZnNldCgpICsgSW50U2l6ZSgwLCBoZWFkZXJIZWlnaHQoKSkpOworICAg
IHZpZXdSZWN0Lm1vdmUoLXNjcm9sbE9mZnNldCgpICsgSW50U2l6ZSgwLCBoZWFkZXJIZWlnaHQo
KSArIHRvcENvbnRlbnRJbnNldCgpKSk7CiAgICAgcmV0dXJuIGNvbnZlcnRUb1Jvb3RWaWV3KHZp
ZXdSZWN0KTsKIH0KIApAQCAtODM5LDcgKzg2Miw3IEBAIEludFBvaW50IFNjcm9sbFZpZXc6OmNv
bnRlbnRzVG9XaW5kb3coY28KICAgICBpZiAoZGVsZWdhdGVzU2Nyb2xsaW5nKCkpCiAgICAgICAg
IHJldHVybiBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnRlbnRzUG9pbnQpOwogCi0gICAg
SW50UG9pbnQgdmlld1BvaW50ID0gY29udGVudHNQb2ludCArIEludFNpemUoMCwgaGVhZGVySGVp
Z2h0KCkpIC0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29udGVu
dHNQb2ludCArIEludFNpemUoMCwgaGVhZGVySGVpZ2h0KCkgKyB0b3BDb250ZW50SW5zZXQoKSkg
LSBzY3JvbGxPZmZzZXQoKTsKICAgICByZXR1cm4gY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyh2
aWV3UG9pbnQpOyAgCiB9CiAKQEAgLTg1OSw3ICs4ODIsNyBAQCBJbnRSZWN0IFNjcm9sbFZpZXc6
OmNvbnRlbnRzVG9XaW5kb3coY29uCiAgICAgICAgIHJldHVybiBjb252ZXJ0VG9Db250YWluaW5n
V2luZG93KGNvbnRlbnRzUmVjdCk7CiAKICAgICBJbnRSZWN0IHZpZXdSZWN0ID0gY29udGVudHNS
ZWN0OwotICAgIHZpZXdSZWN0Lm1vdmUoLXNjcm9sbE9mZnNldCgpICsgSW50U2l6ZSgwLCBoZWFk
ZXJIZWlnaHQoKSkpOworICAgIHZpZXdSZWN0Lm1vdmUoLXNjcm9sbE9mZnNldCgpICsgSW50U2l6
ZSgwLCBoZWFkZXJIZWlnaHQoKSArIHRvcENvbnRlbnRJbnNldCgpKSk7CiAgICAgcmV0dXJuIGNv
bnZlcnRUb0NvbnRhaW5pbmdXaW5kb3codmlld1JlY3QpOwogfQogCkBAIC0xMDU2LDYgKzEwNzks
OCBAQCBJbnRSZWN0IFNjcm9sbFZpZXc6OnNjcm9sbENvcm5lclJlY3QoKSBjCiAgICAgaWYgKGhh
c092ZXJsYXlTY3JvbGxiYXJzKCkpCiAgICAgICAgIHJldHVybiBjb3JuZXJSZWN0OwogCisgICAg
aW50IGhlaWdodFRyYWNrZWRCeVNjcm9sbGJhciA9IGhlaWdodCgpIC0gdG9wQ29udGVudEluc2V0
KCk7CisKICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmIHdpZHRoKCkgLSBtX2hvcml6
b250YWxTY3JvbGxiYXItPndpZHRoKCkgPiAwKSB7CiAgICAgICAgIGNvcm5lclJlY3QudW5pdGUo
SW50UmVjdChtX2hvcml6b250YWxTY3JvbGxiYXItPndpZHRoKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0
KCksCkBAIC0xMDYzLDEzICsxMDg4LDEzIEBAIEludFJlY3QgU2Nyb2xsVmlldzo6c2Nyb2xsQ29y
bmVyUmVjdCgpIGMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+aGVpZ2h0KCkpKTsKICAgICB9CiAKLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9s
bGJhciAmJiBoZWlnaHQoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPmhlaWdodCgpID4gMCkgewor
ICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmIGhlaWdodFRyYWNrZWRCeVNjcm9sbGJhciAt
IG1fdmVydGljYWxTY3JvbGxiYXItPmhlaWdodCgpID4gMCkgewogICAgICAgICBjb3JuZXJSZWN0
LnVuaXRlKEludFJlY3Qod2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5oZWln
aHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxi
YXItPmhlaWdodCgpICsgdG9wQ29udGVudEluc2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5oZWlnaHQo
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0VHJhY2tlZEJ5U2Ny
b2xsYmFyIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCkpKTsKICAgICB9Ci0gICAgCisK
ICAgICByZXR1cm4gY29ybmVyUmVjdDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuaAkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsOSArMTUzLDExIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldENhbkJsaXRPblNjcm9sbChib29sKTsKICAgICBib29sIGNhbkJsaXRPblNj
cm9sbCgpIGNvbnN0OwogCi0gICAgLy8gVGhlIHZpc2libGUgY29udGVudCByZWN0IGhhcyBhIGxv
Y2F0aW9uIHRoYXQgaXMgdGhlIHNjcm9sbGVkIG9mZnNldCBvZiB0aGUgZG9jdW1lbnQuIFRoZSB3
aWR0aCBhbmQgaGVpZ2h0IGFyZSB0aGUgdmlld3BvcnQgd2lkdGgKLSAgICAvLyBhbmQgaGVpZ2h0
LiBCeSBkZWZhdWx0IHRoZSBzY3JvbGxiYXJzIHRoZW1zZWx2ZXMgYXJlIGV4Y2x1ZGVkIGZyb20g
dGhpcyByZWN0YW5nbGUsIGJ1dCBhbiBvcHRpb25hbCBib29sZWFuIGFyZ3VtZW50IGFsbG93cyB0
aGVtIHRvIGJlCi0gICAgLy8gaW5jbHVkZWQuCisgICAgdmlydHVhbCBmbG9hdCB0b3BDb250ZW50
SW5zZXQoKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICAvLyBUaGUgdmlzaWJsZSBjb250ZW50
IHJlY3QgaGFzIGEgbG9jYXRpb24gdGhhdCBpcyB0aGUgc2Nyb2xsZWQgb2Zmc2V0IG9mIHRoZSBk
b2N1bWVudC4gVGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIHRoZSB1bm9ic2N1cmVkIHZpZXdwb3J0
CisgICAgLy8gd2lkdGggYW5kIGhlaWdodC4gQnkgZGVmYXVsdCB0aGUgc2Nyb2xsYmFycyB0aGVt
c2VsdmVzIGFyZSBleGNsdWRlZCBmcm9tIHRoaXMgcmVjdGFuZ2xlLCBidXQgYW4gb3B0aW9uYWwg
Ym9vbGVhbiBhcmd1bWVudCBhbGxvd3MgdGhlbQorICAgIC8vIHRvIGJlIGluY2x1ZGVkLgogICAg
IC8vIEluIHRoZSBzaXR1YXRpb24gdGhlIGNsaWVudCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHNj
cm9sbGluZyAoaWUuIHdpdGggYSB0aWxlZCBiYWNraW5nIHN0b3JlKSBpdCBpcyBwb3NzaWJsZSB0
byB1c2UKICAgICAvLyB0aGUgc2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QgaW5zdGVhZCBmb3Ig
dGhlIG1haW5mcmFtZSwgdGhvdWdoIHRoaXMgbXVzdCBiZSB1cGRhdGVkIG1hbnVhbGx5LCBlLmcg
anVzdCBiZWZvcmUgcmVzdW1pbmcgdGhlIHBhZ2UKICAgICAvLyB3aGljaCB1c3VhbGx5IHdpbGwg
aGFwcGVuIHdoZW4gcGFubmluZywgcGluY2hpbmcgYW5kIHJvdGF0aW9uIGVuZHMsIG9yIHdoZW4g
c2NhbGUgb3IgcG9zaXRpb24gYXJlIGNoYW5nZWQgbWFudWFsbHkuCkBAIC0xNzMsNyArMTc1LDcg
QEAgcHVibGljOgogICAgIEludFJlY3QgdW5vYnNjdXJlZENvbnRlbnRSZWN0KCkgY29uc3Q7CiAg
ICAgSW50UmVjdCB1bm9ic2N1cmVkQ29udGVudFJlY3RJbmNsdWRpbmdTY3JvbGxiYXJzKCkgY29u
c3QgeyByZXR1cm4gdW5vYnNjdXJlZENvbnRlbnRSZWN0KCk7IH0KICNlbHNlCi0gICAgSW50UmVj
dCB1bm9ic2N1cmVkQ29udGVudFJlY3QoKSBjb25zdCB7IHJldHVybiB2aXNpYmxlQ29udGVudFJl
Y3QoKTsgfQorICAgIEludFJlY3QgdW5vYnNjdXJlZENvbnRlbnRSZWN0KFZpc2libGVDb250ZW50
UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyA9IEV4Y2x1ZGVTY3JvbGxiYXJzKSBjb25zdDsKICAgICBJ
bnRSZWN0IHVub2JzY3VyZWRDb250ZW50UmVjdEluY2x1ZGluZ1Njcm9sbGJhcnMoKSBjb25zdCB7
IHJldHVybiB2aXNpYmxlQ29udGVudFJlY3RJbmNsdWRpbmdTY3JvbGxiYXJzKCk7IH0KICNlbmRp
ZgogCkBAIC0xODksMTEgKzE5MSwxMyBAQCBwdWJsaWM6CiAgICAgVGlsZUNhY2hlKiB0aWxlQ2Fj
aGUoKTsKICNlbmRpZgogCi0gICAgLy8gdmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpIGlzIGNv
bXB1dGVkIGZyb20gdW5zY2FsZWRWaXNpYmxlQ29udGVudFNpemUoKSBkaXZpZGVkIGJ5IHRoZSB2
YWx1ZSBvZiB2aXNpYmxlQ29udGVudFNjYWxlRmFjdG9yLgorICAgIC8vIHZpc2libGVDb250ZW50
UmVjdCgpLnNpemUoKSBpcyBjb21wdXRlZCBmcm9tIHVuc2NhbGVkVW5vYnNjdXJlZFZpc2libGVD
b250ZW50U2l6ZSgpIGRpdmlkZWQgYnkgdGhlIHZhbHVlIG9mIHZpc2libGVDb250ZW50U2NhbGVG
YWN0b3IuCiAgICAgLy8gdmlzaWJsZUNvbnRlbnRTY2FsZUZhY3RvciBpcyB1c3VhbGx5IDEsIGV4
Y2VwdCB3aGVuIHRoZSBzZXR0aW5nIGRlbGVnYXRlc1BhZ2VTY2FsaW5nIGlzIHRydWUgYW5kIHRo
ZQogICAgIC8vIFNjcm9sbFZpZXcgaXMgdGhlIG1haW4gZnJhbWU7IGluIHRoYXQgY2FzZSwgdmlz
aWJsZUNvbnRlbnRTY2FsZUZhY3RvciBpcyBlcXVhbCB0byB0aGUgcGFnZSdzIHBhZ2VTY2FsZUZh
Y3Rvci4KLSAgICAvLyBQb3J0cyB0aGF0IGRvbid0IHVzZSBwYWdlU2NhbGVGYWN0b3IgY2FuIHRy
ZWF0IHVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplIGFuZCB2aXNpYmxlQ29udGVudFJlY3QoKS5z
aXplKCkgYXMgZXF1aXZhbGVudC4KLSAgICBJbnRTaXplIHVuc2NhbGVkVmlzaWJsZUNvbnRlbnRT
aXplKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyA9IEV4Y2x1ZGVTY3JvbGxi
YXJzKSBjb25zdDsKKyAgICAvLyBQb3J0cyB0aGF0IGRvbid0IHVzZSBwYWdlU2NhbGVGYWN0b3Ig
Y2FuIHRyZWF0IHVuc2NhbGVkVW5vYnNjdXJlZFZpc2libGVDb250ZW50U2l6ZSBhbmQgdmlzaWJs
ZUNvbnRlbnRSZWN0KCkuc2l6ZSgpIGFzIGVxdWl2YWxlbnQuCisgICAgLy8gdW5zY2FsZWRUb3Rh
bFZpc2libGVDb250ZW50U2l6ZSgpIGluY2x1ZGVzIGFyZWFzIGluIHRoZSBjb250ZW50IHRoYXQg
bWlnaHQgYmUgb2JzY3VyZWQgYnkgVUkgZWxlbWVudHMuCisgICAgSW50U2l6ZSB1bnNjYWxlZFVu
b2JzY3VyZWRWaXNpYmxlQ29udGVudFNpemUoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3Jv
bGxiYXJzID0gRXhjbHVkZVNjcm9sbGJhcnMpIGNvbnN0OworICAgIEludFNpemUgdW5zY2FsZWRU
b3RhbFZpc2libGVDb250ZW50U2l6ZShWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJh
cnMgPSBFeGNsdWRlU2Nyb2xsYmFycykgY29uc3Q7CiAgICAgdmlydHVhbCBmbG9hdCB2aXNpYmxl
Q29udGVudFNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gMTsgfQogCiAgICAgLy8gRnVuY3Rp
b25zIGZvciBnZXR0aW5nL3NldHRpbmcgdGhlIHNpemUgd2Via2l0IHNob3VsZCB1c2UgdG8gbGF5
b3V0IHRoZSBjb250ZW50cy4gQnkgZGVmYXVsdCB0aGlzIGlzIHRoZSBzYW1lIGFzIHRoZSB2aXNp
YmxlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmNwcAkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NzIsNyAr
MTQ3Miw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZVZpZXdEaWQKIHsKICAg
ICBpZiAobV9jbGlwTGF5ZXIpIHsKICAgICAgICAgY29uc3QgRnJhbWVWaWV3JiBmcmFtZVZpZXcg
PSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCk7Ci0gICAgICAgIG1fY2xpcExheWVyLT5zZXRTaXpl
KGZyYW1lVmlldy51bnNjYWxlZFZpc2libGVDb250ZW50U2l6ZSgpKTsKKyAgICAgICAgbV9jbGlw
TGF5ZXItPnNldFNpemUoZnJhbWVWaWV3LnVuc2NhbGVkVG90YWxWaXNpYmxlQ29udGVudFNpemUo
KSk7CiAKICAgICAgICAgZnJhbWVWaWV3RGlkU2Nyb2xsKCk7CiAgICAgICAgIHVwZGF0ZU92ZXJm
bG93Q29udHJvbHNMYXllcnMoKTsKQEAgLTE4NzUsMTEgKzE4NzUsMTIgQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZVJvb3RMYQogewogICAgIGlmIChtX3Jvb3RDb250ZW50TGF5
ZXIpIHsKICAgICAgICAgY29uc3QgSW50UmVjdCYgZG9jdW1lbnRSZWN0ID0gbV9yZW5kZXJWaWV3
LmRvY3VtZW50UmVjdCgpOwotICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldFNpemUoZG9j
dW1lbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0UG9zaXRp
b24oRmxvYXRQb2ludChkb2N1bWVudFJlY3QueCgpLCBkb2N1bWVudFJlY3QueSgpICsgbV9yZW5k
ZXJWaWV3LmZyYW1lVmlldygpLmhlYWRlckhlaWdodCgpKSk7CisgICAgICAgIG1fcm9vdENvbnRl
bnRMYXllci0+c2V0U2l6ZShkb2N1bWVudFJlY3Quc2l6ZSgpKTsgICAgICAgIAorICAgICAgICBt
X3Jvb3RDb250ZW50TGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoZG9jdW1lbnRSZWN0Lngo
KSwgZG9jdW1lbnRSZWN0LnkoKSArIG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5oZWFkZXJIZWln
aHQoKQorICAgICAgICAgICAgKyBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudG9wQ29udGVudElu
c2V0KCkpKTsKICAgICB9CiAgICAgaWYgKG1fY2xpcExheWVyKQotICAgICAgICBtX2NsaXBMYXll
ci0+c2V0U2l6ZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudW5zY2FsZWRWaXNpYmxlQ29udGVu
dFNpemUoKSk7CisgICAgICAgIG1fY2xpcExheWVyLT5zZXRTaXplKG1fcmVuZGVyVmlldy5mcmFt
ZVZpZXcoKS51bnNjYWxlZFRvdGFsVmlzaWJsZUNvbnRlbnRTaXplKCkpOwogCiAjaWYgRU5BQkxF
KFJVQkJFUl9CQU5ESU5HKQogICAgIGlmIChtX2NvbnRlbnRTaGFkb3dMYXllcikgewpAQCAtMzEy
Miw3ICszMTIzLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmVuc3VyZVJvb3RMYQog
ICAgICAgICAgICAgbV9jbGlwTGF5ZXItPmFkZENoaWxkKG1fc2Nyb2xsTGF5ZXIuZ2V0KCkpOwog
ICAgICAgICAgICAgbV9zY3JvbGxMYXllci0+YWRkQ2hpbGQobV9yb290Q29udGVudExheWVyLmdl
dCgpKTsKIAotICAgICAgICAgICAgbV9jbGlwTGF5ZXItPnNldFNpemUobV9yZW5kZXJWaWV3LmZy
YW1lVmlldygpLnVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKCkpOworICAgICAgICAgICAgbV9j
bGlwTGF5ZXItPnNldFNpemUobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnVuc2NhbGVkVG90YWxW
aXNpYmxlQ29udGVudFNpemUoKSk7CiAKICAgICAgICAgICAgIHVwZGF0ZU92ZXJmbG93Q29udHJv
bHNMYXllcnMoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkocmV2
aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODI3LDYgKzE4MjcsMTYgQEAgdm9pZCBJbnRlcm5hbHM6OnNldEZv
b3RlckhlaWdodChmbG9hdCBoZQogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZG9jdW1lbnQt
PnZpZXcoKTsKICAgICBmcmFtZVZpZXctPnNldEZvb3RlckhlaWdodChoZWlnaHQpOwogfQorICAg
IAordm9pZCBJbnRlcm5hbHM6OnNldFRvcENvbnRlbnRJbnNldChmbG9hdCBjb250ZW50SW5zZXQp
Cit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CisgICAgaWYg
KCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFBhZ2UqIHBhZ2UgPSBkb2N1
bWVudC0+cGFnZSgpOworICAgIHBhZ2UtPnNldFRvcENvbnRlbnRJbnNldChjb250ZW50SW5zZXQp
OworfQogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogdm9pZCBJbnRlcm5hbHM6OndlYmtp
dFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHJldmlzaW9uIDE2NTk3MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw2ICsyNTUs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIZWFkZXJIZWlnaHQoZmxvYXQpOwogICAgIHZvaWQg
c2V0Rm9vdGVySGVpZ2h0KGZsb2F0KTsKIAorICAgIHZvaWQgc2V0VG9wQ29udGVudEluc2V0KGZs
b2F0KTsKKwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICB2b2lkIHdlYmtpdFdpbGxF
bnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIHdlYmtpdERpZEVu
dGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopOwpJbmRleDogU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmlkbAkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNiArMjE0LDggQEAKICAg
ICB2b2lkIHNldEhlYWRlckhlaWdodChmbG9hdCBoZWlnaHQpOwogICAgIHZvaWQgc2V0Rm9vdGVy
SGVpZ2h0KGZsb2F0IGhlaWdodCk7CiAKKyAgICB2b2lkIHNldFRvcENvbnRlbnRJbnNldChmbG9h
dCBjb250ZW50SW5zZXQpOworCiAjaWYgZGVmaW5lZChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICYm
IEVOQUJMRV9GVUxMU0NSRUVOX0FQSQogICAgIHZvaWQgd2Via2l0V2lsbEVudGVyRnVsbFNjcmVl
bkZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50KTsKICAgICB2b2lkIHdlYmtpdERpZEVudGVyRnVs
bFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE2NjAwMykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDM3IEBACisyMDE0LTAzLTIwICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNv
bT4KKworICAgICAgICBJbXBsZW1lbnQgY29udGVudEluc2V0IGZvciBNYWMgV2ViS2l0MgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMjczCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIFdLVmlldyBBUEkgZm9yIHNldHRpbmcgYSB0b3BDb250ZW50SW5zZXQoKS4gQWxsIG9mIHRo
aXMgd29yayBnZXRzIAorICAgICAgICB0aGF0IG51bWJlciBwbHVtYmVkIGRvd24gdG8gV2ViQ29y
ZS4KKworICAgICAgICAqIFNoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAg
KiBTaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFRvcENvbnRlbnRJbnNl
dDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF90b3BDb250ZW50SW5zZXRdKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBfc2V0VG9wQ29udGVu
dEluc2V0Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgX3RvcENvbnRlbnRJbnNldF0pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OldlYlBhZ2VQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0
VG9wQ29udGVudEluc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjcmVhdGlv
blBhcmFtZXRlcnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp0b3BDb250ZW50SW5zZXQpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
V2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldFRvcENvbnRlbnRJbnNldCk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxNC0wMy0yMCAgQWxleGV5
IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgaU9TIGlucHV0
IG1ldGhvZCBjb2RlIHRvIHVzZSBuZXcgY3Jvc3MtcGxhdGZvcm0gYXN5bmMgZnVuY3Rpb25zCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFt
ZXRlcnMuY3BwCShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
UGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcg
QEAgdm9pZCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSQogICAgIGVuY29kZXIg
PDwgY2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsOwogICAgIGVuY29kZXIgPDwgY2FuUnVu
TW9kYWw7CiAgICAgZW5jb2RlciA8PCBkZXZpY2VTY2FsZUZhY3RvcjsKKyAgICBlbmNvZGVyIDw8
IHRvcENvbnRlbnRJbnNldDsKICAgICBlbmNvZGVyIDw8IG1lZGlhVm9sdW1lOwogICAgIGVuY29k
ZXIgPDwgbWF5U3RhcnRNZWRpYVdoZW5JbldpbmRvdzsKICAgICBlbmNvZGVyIDw8IG1pbmltdW1M
YXlvdXRTaXplOwpAQCAtMTIwLDYgKzEyMSw4IEBAIGJvb2wgV2ViUGFnZUNyZWF0aW9uUGFyYW1l
dGVyczo6ZGVjb2RlKEkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocGFyYW1ldGVycy5kZXZpY2VTY2FsZUZhY3RvcikpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMudG9wQ29udGVudEluc2V0KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVy
cy5tZWRpYVZvbHVtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHBhcmFtZXRlcnMubWF5U3RhcnRNZWRpYVdoZW5JbldpbmRvdykpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHJl
dmlzaW9uIDE2NTk3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25Q
YXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDggQEAgc3RydWN0IFdlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIGJvb2wgY2FuUnVuTW9kYWw7CiAKICAgICBmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvcjsKKworICAgIGZsb2F0IHRvcENvbnRlbnRJbnNldDsKICAgICAK
ICAgICBmbG9hdCBtZWRpYVZvbHVtZTsKICAgICBib29sIG1heVN0YXJ0TWVkaWFXaGVuSW5XaW5k
b3c7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2
aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw2ICsyNzQsNyBAQCBXZWJQYWdlUHJveHk6OldlYlBh
Z2VQcm94eShQYWdlQ2xpZW50JiBwCiAgICAgLCBtX3BhZ2VTY2FsZUZhY3RvcigxKQogICAgICwg
bV9pbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3RvcigxKQogICAgICwgbV9jdXN0b21EZXZpY2VTY2Fs
ZUZhY3RvcigwKQorICAgICwgbV90b3BDb250ZW50SW5zZXQoMCkKICAgICAsIG1fbGF5ZXJIb3N0
aW5nTW9kZShMYXllckhvc3RpbmdNb2RlOjpJblByb2Nlc3MpCiAgICAgLCBtX2RyYXdzQmFja2dy
b3VuZCh0cnVlKQogICAgICwgbV9kcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChmYWxzZSkKQEAg
LTkyNSw2ICs5MjYsMTcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldERyYXdzVHJhbnNwYXJlbnRC
YQogICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldERyYXdzVHJh
bnNwYXJlbnRCYWNrZ3JvdW5kKGRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKSwgbV9wYWdlSUQp
OwogfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VG9wQ29udGVudEluc2V0KGZsb2F0IGNvbnRl
bnRJbnNldCkKK3sKKyAgICBpZiAobV90b3BDb250ZW50SW5zZXQgPT0gY29udGVudEluc2V0KQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3RvcENvbnRlbnRJbnNldCA9IGNvbnRlbnRJbnNldDsK
KworICAgIGlmIChpc1ZhbGlkKCkpCisgICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6U2V0VG9wQ29udGVudEluc2V0KGNvbnRlbnRJbnNldCksIG1fcGFnZUlEKTsKK30K
Kwogdm9pZCBXZWJQYWdlUHJveHk6OnNldFVuZGVybGF5Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
KQogewogICAgIGlmIChtX3VuZGVybGF5Q29sb3IgPT0gY29sb3IpCkBAIC00MDMyLDYgKzQwNDQs
NyBAQCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIFdlYlBhZ2VQcm94eTo6CiAgICAgcGFyYW1l
dGVycy5jYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwgPSBtX3VpQ2xpZW50LT5jYW5SdW5C
ZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKTsKICAgICBwYXJhbWV0ZXJzLmNhblJ1bk1vZGFsID0g
bV9jYW5SdW5Nb2RhbDsKICAgICBwYXJhbWV0ZXJzLmRldmljZVNjYWxlRmFjdG9yID0gZGV2aWNl
U2NhbGVGYWN0b3IoKTsKKyAgICBwYXJhbWV0ZXJzLnRvcENvbnRlbnRJbnNldCA9IG1fdG9wQ29u
dGVudEluc2V0OwogICAgIHBhcmFtZXRlcnMubWVkaWFWb2x1bWUgPSBtX21lZGlhVm9sdW1lOwog
ICAgIHBhcmFtZXRlcnMubWF5U3RhcnRNZWRpYVdoZW5JbldpbmRvdyA9IG1fbWF5U3RhcnRNZWRp
YVdoZW5JbldpbmRvdzsKICAgICBwYXJhbWV0ZXJzLm1pbmltdW1MYXlvdXRTaXplID0gbV9taW5p
bXVtTGF5b3V0U2l6ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmgJKHJldmlzaW9uIDE2NTk3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDI2LDYgKzQyNiw5IEBAIHB1YmxpYzoKICAgICBi
b29sIGRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3c1Ry
YW5zcGFyZW50QmFja2dyb3VuZDsgfQogICAgIHZvaWQgc2V0RHJhd3NUcmFuc3BhcmVudEJhY2tn
cm91bmQoYm9vbCk7CiAKKyAgICBmbG9hdCB0b3BDb250ZW50SW5zZXQoKSBjb25zdCB7IHJldHVy
biBtX3RvcENvbnRlbnRJbnNldDsgfQorICAgIHZvaWQgc2V0VG9wQ29udGVudEluc2V0KGZsb2F0
KTsKKwogICAgIFdlYkNvcmU6OkNvbG9yIHVuZGVybGF5Q29sb3IoKSBjb25zdCB7IHJldHVybiBt
X3VuZGVybGF5Q29sb3I7IH0KICAgICB2b2lkIHNldFVuZGVybGF5Q29sb3IoY29uc3QgV2ViQ29y
ZTo6Q29sb3ImKTsKIApAQCAtMTMzOCw2ICsxMzQxLDcgQEAgcHJpdmF0ZToKICAgICBkb3VibGUg
bV9wYWdlU2NhbGVGYWN0b3I7CiAgICAgZmxvYXQgbV9pbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3Rv
cjsKICAgICBmbG9hdCBtX2N1c3RvbURldmljZVNjYWxlRmFjdG9yOworICAgIGZsb2F0IG1fdG9w
Q29udGVudEluc2V0OwogCiAgICAgTGF5ZXJIb3N0aW5nTW9kZSBtX2xheWVySG9zdGluZ01vZGU7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tW
aWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEs
NyBAQAogQHByb3BlcnR5IChyZWFkd3JpdGUpIEJPT0wgYWxsb3dzTWFnbmlmaWNhdGlvbjsKIEBw
cm9wZXJ0eSAocmVhZHdyaXRlKSBkb3VibGUgbWFnbmlmaWNhdGlvbjsKIEBwcm9wZXJ0eSAocmVh
ZHdyaXRlKSBCT09MIGFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzOworQHByb3Bl
cnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0VG9wQ29udGVudEluc2V0OikgQ0dGbG9hdCBfdG9w
Q29udGVudEluc2V0OwogCiBAcHJvcGVydHkgKHJlYWRvbmx5KSBOU0NvbG9yICpfcGFnZUV4dGVu
ZGVkQmFja2dyb3VuZENvbG9yOwogQHByb3BlcnR5KGNvcHksIG5vbmF0b21pYykgTlNDb2xvciAq
dW5kZXJsYXlDb2xvcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE0Nyw2
ICsxMTQ3LDE2IEBAIC0gKHZvaWQpX3NldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOigKICAg
ICBfcGFnZS0+c2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoZHJhd3NUcmFuc3BhcmVudEJh
Y2tncm91bmQpOwogfQogCistICh2b2lkKV9zZXRUb3BDb250ZW50SW5zZXQ6KENHRmxvYXQpY29u
dGVudEluc2V0Cit7CisgICAgX3BhZ2UtPnNldFRvcENvbnRlbnRJbnNldChjb250ZW50SW5zZXQp
OworfQorCistIChDR0Zsb2F0KV90b3BDb250ZW50SW5zZXQKK3sKKyAgICByZXR1cm4gX3BhZ2Ut
PnRvcENvbnRlbnRJbnNldCgpOworfQorCiAjZW5kaWYKIAogQGVuZApJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJ
KHJldmlzaW9uIDE2NTk3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCw3IEBAIHR5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS1BhZ2luYXRpb24KICNlbHNlCiBAcHJvcGVydHkgKHJl
YWRvbmx5KSBOU0NvbG9yICpfcGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yOwogQHByb3BlcnR5
IChub25hdG9taWMsIHNldHRlcj1fc2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQ6KSBCT09M
IF9kcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0
ZXI9X3NldFRvcENvbnRlbnRJbnNldDopIENHRmxvYXQgX3RvcENvbnRlbnRJbnNldDsKICNlbmRp
ZgogCiAtICh2b2lkKV9ydW5KYXZhU2NyaXB0SW5NYWluRnJhbWU6KE5TU3RyaW5nICopc2NyaXB0
U3RyaW5nOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5t
bQkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
V0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMjkyLDYgKzMyOTIsMTYgQEAgLSAoQk9PTClh
bGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dQogICAgIHJldHVybiBfZGF0YS0+X2FsbG93
c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzOwogfQogCistICh2b2lkKV9zZXRUb3BDb250
ZW50SW5zZXQ6KENHRmxvYXQpY29udGVudEluc2V0Cit7CisgICAgX2RhdGEtPl9wYWdlLT5zZXRU
b3BDb250ZW50SW5zZXQoY29udGVudEluc2V0KTsKK30KKworLSAoQ0dGbG9hdClfdG9wQ29udGVu
dEluc2V0Cit7CisgICAgcmV0dXJuIF9kYXRhLT5fcGFnZS0+dG9wQ29udGVudEluc2V0KCk7Cit9
CisKIC0gKE5TQ29sb3IgKilfcGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yCiB7CiAgICAgV2Vi
Q29yZTo6Q29sb3IgY29sb3IgPSBfZGF0YS0+X3BhZ2UtPnBhZ2VFeHRlbmRlZEJhY2tncm91bmRD
b2xvcigpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDQsNiArNDA0LDggQEAgV2Vi
UGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IAogICAgIHNldFNjcm9sbFBpbm5p
bmdCZWhhdmlvcihwYXJhbWV0ZXJzLnNjcm9sbFBpbm5pbmdCZWhhdmlvcik7CiAgICAgc2V0QmFj
a2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlKHBhcmFtZXRlcnMuYmFja2dyb3VuZEV4dGVuZHNCZXlv
bmRQYWdlKTsKIAorICAgIHNldFRvcENvbnRlbnRJbnNldChwYXJhbWV0ZXJzLnRvcENvbnRlbnRJ
bnNldCk7CisKICAgICBtX3VzZXJBZ2VudCA9IHBhcmFtZXRlcnMudXNlckFnZW50OwogCiAgICAg
V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnNldEhpZ2hlc3RJdGVtSURGcm9tVUlQcm9jZXNzKHBh
cmFtZXRlcnMuaGlnaGVzdFVzZWRCYWNrRm9yd2FyZEl0ZW1JRCk7CkBAIC0yMDMyLDYgKzIwMzQs
MTEgQEAgdm9pZCBXZWJQYWdlOjpzZXREcmF3c1RyYW5zcGFyZW50QmFja2dybwogICAgIG1fZHJh
d2luZ0FyZWEtPnNldE5lZWRzRGlzcGxheSgpOwogfQogCit2b2lkIFdlYlBhZ2U6OnNldFRvcENv
bnRlbnRJbnNldChmbG9hdCBjb250ZW50SW5zZXQpCit7CisgICAgbV9wYWdlLT5zZXRUb3BDb250
ZW50SW5zZXQoY29udGVudEluc2V0KTsKK30KKwogdm9pZCBXZWJQYWdlOjp2aWV3V2lsbFN0YXJ0
TGl2ZVJlc2l6ZSgpCiB7CiAgICAgaWYgKCFtX3BhZ2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDE2NTk3MSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg0MCw2ICs4NDAsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJv
b2wpOwogICAgIHZvaWQgc2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoYm9vbCk7CiAKKyAg
ICB2b2lkIHNldFRvcENvbnRlbnRJbnNldChmbG9hdCk7CisKICAgICB2b2lkIHZpZXdXaWxsU3Rh
cnRMaXZlUmVzaXplKCk7CiAgICAgdm9pZCB2aWV3V2lsbEVuZExpdmVSZXNpemUoKTsKIApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW4JKHJldmlzaW9uIDE2NTk3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIFNldERyYXdz
QmFja2dyb3VuZChib29sIGRyYXdzQmFja2dyb3VuZCkKICAgICBTZXREcmF3c1RyYW5zcGFyZW50
QmFja2dyb3VuZChib29sIGRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKQogCisgICAgU2V0VG9w
Q29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJbnNldCkKKwogICAgIFNldFVuZGVybGF5Q29sb3Io
V2ViQ29yZTo6Q29sb3IgY29sb3IpCiAKICAgICBWaWV3V2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpCklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNjU5ODIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNC0wMy0yMCAgQmV0aCBEYWtpbiAgPGJkYWtp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGNvbnRlbnRJbnNldCBmb3IgTWFjIFdl
YktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MDI3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCB0d28gdGVzdHMgZm9yIGhpdC10ZXN0aW5nIHdpdGggYSB0b3BDb250ZW50SW5zZXQuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvY29udGVudC1pbnNldC1oaXQt
dGVzdGluZy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy13azIv
dGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWluLWZyYW1lLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1kcmF3aW5nL2Nv
bnRlbnQtaW5zZXQtaGl0LXRlc3RpbmctaW4tZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vbWFjLXdrMi90aWxlZC1kcmF3aW5nL2NvbnRlbnQtaW5zZXQtaGl0LXRlc3Rpbmcu
aHRtbDogQWRkZWQuCisKIDIwMTQtMDMtMjAgIFJhZHUgU3RhdmlsYSAgPHN0YXZpbGFAYWRvYmUu
Y29tPgogCiAgICAgICAgIFtDU1MgUmVnaW9uc10gQ2xlYW51cCBzY3JvbGxhYmxlIHJlZ2lvbnMg
dGVzdHMKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9j
b250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvY29udGVudC1pbnNldC1oaXQt
dGVzdGluZy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvY29udGVudC1pbnNldC1oaXQtdGVzdGluZy1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAorUGFzcyEKSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0
aW5nLWluLWZyYW1lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvY29udGVudC1pbnNldC1oaXQtdGVzdGluZy1pbi1m
cmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMtd2syL3RpbGVkLWRyYXdpbmcvY29udGVudC1pbnNldC1oaXQtdGVzdGluZy1pbi1mcmFtZS1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyIEBACisKK1Bhc3MhCkluZGV4
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvY29udGVudC1pbnNl
dC1oaXQtdGVzdGluZy1pbi1mcmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWlu
LWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sy
L3RpbGVkLWRyYXdpbmcvY29udGVudC1pbnNldC1oaXQtdGVzdGluZy1pbi1mcmFtZS5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0Pgor
ICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICAgIGlmICghd2luZG93LmV2ZW50U2VuZGVy
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAod2luZG93LmludGVybmFscykKKyAg
ICAgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0VG9wQ29udGVudEluc2V0KDEwMCk7CisgICAg
ICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFz
VGV4dCgpOworCisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDIwLCAxMjApOworICAg
ICAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VV
cCgpOworICAgIH0KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCki
PgorICAgIDxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvaWZyYW1lLXRvLWhpdC10ZXN0Lmh0bWwiIHNj
cm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPSJubyIgaGVpZ2h0PSIzMDAiIHdpZHRoPSI2MDAiPjwv
aWZyYW1lPgorICAgIDxkaXYgaWQ9InJlc3VsdCI+VGhpcyB0ZXN0IG5lZWRzIHRvIGJlIHJ1biB0
aHJvdWdoIFdlYktpdFRlc3RSdW5uZXIuPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvY29udGVudC1pbnNldC1o
aXQtdGVzdGluZy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13
azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvY29udGVu
dC1pbnNldC1oaXQtdGVzdGluZy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAK
KzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgICAgI3RhcmdldCB7CisgICAgICAgIGJhY2tncm91
bmQtY29sb3I6cHVycGxlOworICAgICAgICB3aWR0aDoyNXB4OworICAgICAgICBoZWlnaHQ6MjVw
eDsKKyAgICB9Cis8L3N0eWxlPgorPHNjcmlwdD4KKyAgICB2YXIgbnVtYmVyT2ZDbGlja3MgPSAw
OworCisgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgaWYgKCF3aW5kb3cuZXZlbnRT
ZW5kZXIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxz
KQorICAgICAgICAgICAgd2luZG93LmludGVybmFscy5zZXRUb3BDb250ZW50SW5zZXQoMTAwKTsK
KyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5k
dW1wQXNUZXh0KCk7CisKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oMTUsIDExNSk7
CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5t
b3VzZVVwKCk7CisKKyAgICAgICAgdmFyIHJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJyZXN1bHQiKTsKKyAgICAgICAgaWYgKG51bWJlck9mQ2xpY2tzID4gMCkKKyAgICAgICAgICAg
IHJlc3VsdC5pbm5lckhUTUwgPSAiUGFzcyEiOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZXN1bHQuaW5uZXJIVE1MID0gIkZhaWwuIjsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gY2xp
Y2tlZCgpIHsKKyAgICAgICAgbnVtYmVyT2ZDbGlja3MgPSAxOworICAgIH0KKzwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDxkaXYgaWQ9InRhcmdldCIg
b25jbGljaz0iY2xpY2tlZCgpIj48L2Rpdj4KKyAgICA8ZGl2IGlkPSJyZXN1bHQiPlRoaXMgdGVz
dCBuZWVkcyB0byBiZSBydW4gdGhyb3VnaCBXZWJLaXRUZXN0UnVubmVyLjwvZGl2PgorPC9ib2R5
PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227340</attachid>
            <date>2014-03-20 15:02:11 -0700</date>
            <delta_ts>2014-03-20 15:27:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-3.txt</filename>
            <type>text/plain</type>
            <size>37105</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTk4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBACisyMDE0LTAzLTIwICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgY29udGVudEluc2V0
IGZvciBNYWMgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMwMjczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRvcENvbnRlbnRJbnNldCgpLiBJ
ZiBhIHBhZ2UgaGFzIGEgdG9wQ29udGVudEluc2V0KCksIAorICAgICAgICB0aGUgcm9vdCBsYXll
cuKAmXMgcG9zaXRpb24gaXMgYWRqdXN0ZWQgdG8gYWNjb3VudCBmb3IgdGhlIGluc2V0LiBJdCBp
cyBhc3N1bWVkIHRoYXQgCisgICAgICAgIHRoZSBhcmVhIGFjY291bnRlZCBmb3IgYnkgdGhlIGlu
c2V0IGlzIHZpc2libGUgYnV0IG9ic2N1cmVkLCBzbyBzY3JvbGxiYXJzIG5lZWQgdG8gCisgICAg
ICAgIGJlIG1vdmVkIHNvIHRoYXQgdGhleSBvbmx5IGNvdmVyIHRoZSBub24tb2JzY3VyZWQgYXJl
YSwgYW5kIG1vc3QgcGFydHMgb2YgV2ViQ29yZSAKKyAgICAgICAgdGhhdCB3b25kZXIgYWJvdXQg
dmlzaWJsZUNvbnRlbnRTaXplIG9ubHkgY2FyZSBhYm91dCB0aGUgdW5vYnNjdXJlZCBhcmVhLCBz
byB0aGlzIAorICAgICAgICBwYXRjaCBtYWtlcyB0aGF0IHZpc2libGVDb250ZW50UmVjdCByZXR1
cm4gdGhlIHVub2JzY3VyZWRSZWN0LiBGaW5hbGx5IHNpbmNlIHRoaXMgCisgICAgICAgIGlzIGFj
aGlldmVkIGJ5IG1vdmluZyBhIGxheWVy4oCZcyBwb3NpdGlvbiwgdGhlIHRvcENvbnRlbnRJbnNl
dCgpIGFsc28gbmVlZHMgdG8gYmUgCisgICAgICAgIGZhY3RvcmVkIGludG8gdmFyaW91cyBmdW5j
dGlvbnMgdGhhdCBhcmUgdXNlZCB0byBjb252ZXJ0IGJldHdlZW4gY29vcmRpbmF0ZSAKKyAgICAg
ICAgc3BhY2VzLiAKKworICAgICAgICBSZXR1cm4gUGFnZTo6dG9wQ29udGVudEluc2V0KCkgaWYg
dGhpcyBpcyB0aGUgbWFpbiBmcmFtZS4KKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRvcENvbnRlbnRJbnNldCk6CisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuaDoKKworICAgICAgICBDYWNoZSB0aGUgaW5zZXQgb24gUGFnZS4KKyAg
ICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6UGFnZSk6Cisg
ICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp0b3BDb250ZW50
SW5zZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0VG9wQ29udGVudEluc2V0KToKKwor
ICAgICAgICB1bm9ic2N1cmVkQ29udGVudFJlY3QoKSB1c2VkIHRvIHVuY29uZGl0aW9uYWxseSBy
ZXR1cm4gdmlzaWJsZUNvbnRlbnRSZWN0KCkgb24gCisgICAgICAgIG5vbi1pT1MgcGxhdGZvcm1z
LiBOb3cgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3Igc29tZSB0ZWNobmljYWxseSB2aXNpYmxlIGNv
bnRlbnQgdG8gCisgICAgICAgIGJlIG9ic2N1cmVkLCB0aGlzIGNvZGUgbmVlZGVkIHRvIGJlIHJl
LXdvcmtlZCBhIGJpdCB0byBtYWtlIHNvbWUgbW9yZSBzZW5zZS4gCisgICAgICAgIHZpc2libGVD
b250ZW50UmVjdCgpIG5vdyByZXByZXNlbnRzIHRoYXQgdmlzaWJsZSBjb250ZW50IHRoYXQgaXMg
Y29tcGxldGVseSAKKyAgICAgICAgdW5vYnNjdXJlZCwgc28gaXQgc2hvdWxkIGNhbGwgaW50byB1
bm9ic2N1cmVkQ29udGVudFJlY3QoKSByYXRoZXIgdGhhbiB0aGUgb3RoZXIgCisgICAgICAgIHdh
eSBhcm91bmQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3Ojp1bm9ic2N1cmVkQ29udGVudFJlY3QpOgorCisgICAgICAgIHVu
c2NhbGVkVG90YWxWaXNpYmxlQ29udGVudFNpemUoKSBpbmNsdWRlcyB0aGUgc2l6ZSBvZiBhbGwg
Y29udGVudCB0aGF0IG1pZ2h0IGJlIAorICAgICAgICB2aXNpYmxlLiBTb21lIG9mIHRoaXMgY29u
dGVudCBtaWdodCBiZSBvYnNjdXJlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnVu
c2NhbGVkVG90YWxWaXNpYmxlQ29udGVudFNpemUpOgorCisgICAgICAgIE1vc3Qgb2YgdGhlIHRp
bWUsIHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgY29udGVudCB0aGF0IGlzIEZVTExZIHZpc2libGUu
IFRoYXQgaXMgCisgICAgICAgIHdoYXQgeW91IGdldCBmcm9tIHVuc2NhbGVkVW5vYnNjdXJlZFZp
c2libGVDb250ZW50U2l6ZSgpLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dW5zY2Fs
ZWRVbm9ic2N1cmVkVmlzaWJsZUNvbnRlbnRTaXplKToKKworICAgICAgICBVc2UgdGhlIHVub2Jz
Y3VyZWQgc2l6ZSBmb3IgdGhlc2UgY29tcHV0YXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6bGF5b3V0U2l6ZSk6CisKKyAgICAgICAgRmFjdG9yIGluIHRoZSB0b3BDb250
ZW50SW5zZXQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbE9mZnNldFJl
bGF0aXZlVG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxQ
b3NpdGlvblJlbGF0aXZlVG9Eb2N1bWVudCk6CisKKyAgICAgICAgVGhlIHNjcm9sbGJhcnMgc2hv
dWxkIGJlIHBvc2l0aW9uZWQgdG8gY292ZXIgdGhlIG5vbi1vYnNjdXJlZCBjb250ZW50IG9ubHku
IAorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6CisKKyAg
ICAgICAgQWdhaW4sIGZhY3RvciB0aGUgdG9wQ29udGVudEluc2V0KCkgaW50byB0aGVzZSBjb252
ZXJzaW9ucyBzaW5jZSB0aGUgcm9vdCBsYXllcuKAmXMgCisgICAgICAgIHBvc2l0aW9uIGhhcyBi
ZWVuIGFkanVzdGVkIHRvIGFjY291bnQgZm9yIGl0LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Vmlldzo6Y29udGVudHNUb1Jvb3RWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OmNvbnRlbnRzVG9XaW5kb3cpOgorCisgICAgICAgICBKdXN0IGxpa2UgdGhlIHNjcm9sbGJhcnMs
IHRoZSBzY3JvbGwgY29ybmVyIG11c3QgYmUgbW92ZWQgdGhlIGFjY291bnQgZm9yIHRoZSAKKyAg
ICAgICAgaW5zZXQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxDb3JuZXJS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxWaWV3Ojp0b3BDb250ZW50SW5zZXQpOgorCisgICAgICAgIFJlbmRlckxheWVyQ29t
cG9zaXRvciBjYXJlcyBhYm91dCB1bnNjYWxlZFRvdGFsVmlzaWJsZUNvbnRlbnRTaXplKCkuIEl0
IGRvZXMgbm90IAorICAgICAgICBjYXJlIGlmIHNvbWUgb2YgdGhhdCBjb250ZW50IGlzIG9ic2N1
cmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZVZpZXdEaWRDaGFuZ2VT
aXplKToKKworICAgICAgICBNb3ZlIHRoZSByb290IGxheWVy4oCZcyBwb3NpdGlvbiBiYXNlZCBv
biB0aGUgY29udGVudEluc2V0LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVSb290TGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmVuc3VyZVJvb3RMYXllcik6CisKKyAgICAgICAgQWxsb3cgc2V0dGlu
ZyBjb250ZW50SW5zZXQgdmlhIEludGVybmFscyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICAg
ICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6
OnNldFRvcENvbnRlbnRJbnNldCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAg
ICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTQtMDMtMjAgIEJyaWFuIEJ1cmcg
IDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIFJlcGxheTogZml4IHNvbWUgb3ZlcnNp
Z2h0cyBpbiB0aGUgcmVwbGF5IGJhY2tlbmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZp
c2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBj
b3B5KQpAQCAtMTAzOSw2ICsxMDM5LDcgQEAgX19aTjdXZWJDb3JlNFBhZ2UxNnNldENhblN0YXJ0
TWVkaWFFYgogX19aTjdXZWJDb3JlNFBhZ2UxNnNldERlZmVyc0xvYWRpbmdFYgogX19aTjdXZWJD
b3JlNFBhZ2UxOHJlbW92ZVNjaGVkdWxlUGFpckVOM1dURjEwUGFzc1JlZlB0cklOUzFfMTJTY2hl
ZHVsZVBhaXJFRUUKIF9fWk43V2ViQ29yZTRQYWdlMThzZXRQYWdlU2NhbGVGYWN0b3JFZlJLTlNf
OEludFBvaW50RQorX19aTjdXZWJDb3JlNFBhZ2UxOHNldFRvcENvbnRlbnRJbnNldEVmCiBfX1pO
N1dlYkNvcmU0UGFnZTE5YWRkTGF5b3V0TWlsZXN0b25lc0VqCiBfX1pON1dlYkNvcmU0UGFnZTIw
c2Nyb2xsaW5nQ29vcmRpbmF0b3JFdgogX19aTjdXZWJDb3JlNFBhZ2UyMHNldERldmljZVNjYWxl
RmFjdG9yRWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDE2NTk3
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTI5LDYgKzkyOSwxNSBAQCB2b2lkIEZyYW1lVmlldzo6c2V0Rm9vdGVySGVpZ2h0KGludCBm
b290CiAgICAgICAgIHJlbmRlclZpZXctPnNldE5lZWRzTGF5b3V0KCk7CiB9CiAKK2Zsb2F0IEZy
YW1lVmlldzo6dG9wQ29udGVudEluc2V0KCkgY29uc3QKK3sKKyAgICBpZiAoIWZyYW1lKCkuaXNN
YWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgUGFnZSogcGFnZSA9IGZy
YW1lKCkucGFnZSgpOworICAgIHJldHVybiBwYWdlID8gcGFnZS0+dG9wQ29udGVudEluc2V0KCkg
OiAwOworfQorICAgIAogYm9vbCBGcmFtZVZpZXc6Omhhc0NvbXBvc2l0ZWRDb250ZW50KCkgY29u
c3QKIHsKICAgICBpZiAoUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRoaXMtPnJlbmRlclZpZXco
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMTY1OTcxKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNDMzLDYgKzQz
Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBmb290ZXJIZWlnaHQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2Zvb3RlckhlaWdodDsgfQogICAgIHZvaWQgc2V0Rm9vdGVySGVpZ2h0
KGludCk7CiAKKyAgICB2aXJ0dWFsIGZsb2F0IHRvcENvbnRlbnRJbnNldCgpIGNvbnN0IG92ZXJy
aWRlOworCiAgICAgdmlydHVhbCB2b2lkIHdpbGxTdGFydExpdmVSZXNpemUoKSBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKSBvdmVycmlkZTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDcgQEAgUGFnZTo6UGFnZShQ
YWdlQ2xpZW50cyYgcGFnZUNsaWVudHMpCiAgICAgLCBtX21lZGlhVm9sdW1lKDEpCiAgICAgLCBt
X3BhZ2VTY2FsZUZhY3RvcigxKQogICAgICwgbV9kZXZpY2VTY2FsZUZhY3RvcigxKQorICAgICwg
bV90b3BDb250ZW50SW5zZXQoMCkKICAgICAsIG1fc3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25z
KGZhbHNlKQogICAgICwgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQoZmFsc2UpCiAgICAgLCBtX3Vz
ZXJTdHlsZVNoZWV0TW9kaWZpY2F0aW9uVGltZSgwKQpAQCAtNzQ4LDcgKzc0OSwxNyBAQCB2b2lk
IFBhZ2U6OnNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjCiAgICAgcGFnZUNhY2hlKCktPm1h
cmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyh0aGlzKTsKICAgICBHcmFwaGljc0NvbnRleHQ6OnVw
ZGF0ZURvY3VtZW50TWFya2VyUmVzb3VyY2VzKCk7CiB9Ci0KKyAgICAKK3ZvaWQgUGFnZTo6c2V0
VG9wQ29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJbnNldCkKK3sKKyAgICBpZiAobV90b3BDb250
ZW50SW5zZXQgPT0gY29udGVudEluc2V0KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV90
b3BDb250ZW50SW5zZXQgPSBjb250ZW50SW5zZXQ7CisgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRl
clZpZXcgPSBtYWluRnJhbWUoKS5jb250ZW50UmVuZGVyZXIoKSkKKyAgICAgICAgcmVuZGVyVmll
dy0+c2V0TmVlZHNMYXlvdXQoKTsKK30KKyAgICAKIHZvaWQgUGFnZTo6c2V0U2hvdWxkU3VwcHJl
c3NTY3JvbGxiYXJBbmltYXRpb25zKGJvb2wgc3VwcHJlc3NBbmltYXRpb25zKQogewogICAgIGlm
IChzdXBwcmVzc0FuaW1hdGlvbnMgPT0gbV9zdXBwcmVzc1Njcm9sbGJhckFuaW1hdGlvbnMpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuaAkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3OCw2ICsyNzgsOSBAQCBwdWJsaWM6CiAgICAg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2RldmljZVNjYWxlRmFj
dG9yOyB9CiAgICAgdm9pZCBzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7CiAKKyAgICBmbG9h
dCB0b3BDb250ZW50SW5zZXQoKSBjb25zdCB7IHJldHVybiBtX3RvcENvbnRlbnRJbnNldDsgfQor
ICAgIHZvaWQgc2V0VG9wQ29udGVudEluc2V0KGZsb2F0KTsKKwogICAgIGJvb2wgc2hvdWxkU3Vw
cHJlc3NTY3JvbGxiYXJBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9zdXBwcmVzc1Njcm9s
bGJhckFuaW1hdGlvbnM7IH0KICAgICB2b2lkIHNldFNob3VsZFN1cHByZXNzU2Nyb2xsYmFyQW5p
bWF0aW9ucyhib29sIHN1cHByZXNzQW5pbWF0aW9ucyk7CiAgICAgdm9pZCBsb2NrQWxsT3Zlcmxh
eVNjcm9sbGJhcnNUb0hpZGRlbihib29sIGxvY2tPdmVybGF5U2Nyb2xsYmFycyk7CkBAIC00ODks
NiArNDkyLDggQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX3BhZ2VTY2FsZUZhY3RvcjsKICAgICBm
bG9hdCBtX2RldmljZVNjYWxlRmFjdG9yOwogCisgICAgZmxvYXQgbV90b3BDb250ZW50SW5zZXQ7
CisKICAgICBib29sIG1fc3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25zOwogCiAgICAgUGFnaW5h
dGlvbiBtX3BhZ2luYXRpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxW
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3
LmNwcAkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw4ICsyMzUsMTcgQEAgdm9pZCBTY3JvbGxW
aWV3OjpzZXREZWxlZ2F0ZXNTY3JvbGxpbmcoYgogICAgIG1fZGVsZWdhdGVzU2Nyb2xsaW5nID0g
ZGVsZWdhdGVzU2Nyb2xsaW5nOwogICAgIGRlbGVnYXRlc1Njcm9sbGluZ0RpZENoYW5nZSgpOwog
fQotCi1JbnRTaXplIFNjcm9sbFZpZXc6OnVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKFZpc2li
bGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24pIGNvbnN0
CisgICAgCisjaWYgIVBMQVRGT1JNKElPUykKK0ludFJlY3QgU2Nyb2xsVmlldzo6dW5vYnNjdXJl
ZENvbnRlbnRSZWN0KFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxi
YXJJbmNsdXNpb24pIGNvbnN0Cit7CisgICAgRmxvYXRTaXplIHZpc2libGVDb250ZW50U2l6ZSA9
IHVuc2NhbGVkVW5vYnNjdXJlZFZpc2libGVDb250ZW50U2l6ZShzY3JvbGxiYXJJbmNsdXNpb24p
OworICAgIHZpc2libGVDb250ZW50U2l6ZS5zY2FsZSgxIC8gdmlzaWJsZUNvbnRlbnRTY2FsZUZh
Y3RvcigpKTsKKyAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludChtX3Njcm9sbE9mZnNldCksIGV4
cGFuZGVkSW50U2l6ZSh2aXNpYmxlQ29udGVudFNpemUpKTsKK30KKyNlbmRpZgorICAgIAorSW50
U2l6ZSBTY3JvbGxWaWV3Ojp1bnNjYWxlZFRvdGFsVmlzaWJsZUNvbnRlbnRTaXplKFZpc2libGVD
b250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24pIGNvbnN0CiB7
CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVZpc2li
bGVDb250ZW50U2l6ZShzY3JvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpOwpA
QCAtMjU4LDkgKzI2NywyNSBAQCBJbnRTaXplIFNjcm9sbFZpZXc6OnVuc2NhbGVkVmlzaWJsZUNv
bnRlCiAKICAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0
aCwgaGVpZ2h0KCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KS5leHBhbmRlZFRvKEludFNp
emUoKSk7CiB9CisgICAgCitJbnRTaXplIFNjcm9sbFZpZXc6OnVuc2NhbGVkVW5vYnNjdXJlZFZp
c2libGVDb250ZW50U2l6ZShWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Ny
b2xsYmFySW5jbHVzaW9uKSBjb25zdAoreworICAgIEludFNpemUgdmlzaWJsZUNvbnRlbnRTaXpl
ID0gdW5zY2FsZWRUb3RhbFZpc2libGVDb250ZW50U2l6ZShzY3JvbGxiYXJJbmNsdXNpb24pOwor
ICAgIAorICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm4gdmlzaWJsZUNv
bnRlbnRTaXplOworCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgaWYgKCFtX2Zp
eGVkVmlzaWJsZUNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHZpc2libGVD
b250ZW50U2l6ZTsKKyNlbmRpZgorCisgICAgdmlzaWJsZUNvbnRlbnRTaXplLnNldEhlaWdodCh2
aXNpYmxlQ29udGVudFNpemUuaGVpZ2h0KCkgLSB0b3BDb250ZW50SW5zZXQoKSk7CisgICAgcmV0
dXJuIHZpc2libGVDb250ZW50U2l6ZTsKK30KIAogI2lmICFQTEFURk9STShHVEspCi1JbnRSZWN0
IFNjcm9sbFZpZXc6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVj
dEluY2x1ZGVzU2Nyb2xsYmFycyBzY29sbGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRlbnRSZWN0
QmVoYXZpb3IgdmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0CitJbnRSZWN0IFNjcm9s
bFZpZXc6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1
ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2
aW9yIHZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAogewogI2lmIFBMQVRGT1JNKElP
UykKICAgICBpZiAodmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IgPT0gTGVnYWN5SU9TRG9jdW1l
bnRWaWV3UmVjdCkgewpAQCAtMjc1LDIyICszMDAsMjAgQEAgSW50UmVjdCBTY3JvbGxWaWV3Ojp2
aXNpYmxlQ29udGVudFJlY3RJbgogI2VuZGlmCiAKICAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkK
LSAgICAgICAgcmV0dXJuIHBsYXRmb3JtVmlzaWJsZUNvbnRlbnRSZWN0KHNjb2xsYmFySW5jbHVz
aW9uID09IEluY2x1ZGVTY3JvbGxiYXJzKTsKKyAgICAgICAgcmV0dXJuIHBsYXRmb3JtVmlzaWJs
ZUNvbnRlbnRSZWN0KHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycyk7CiAK
ICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICBpZiAoIW1fZml4ZWRWaXNpYmxlQ29u
dGVudFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9maXhlZFZpc2libGVDb250ZW50
UmVjdDsKICNlbmRpZgogCi0gICAgRmxvYXRTaXplIHZpc2libGVDb250ZW50U2l6ZSA9IHVuc2Nh
bGVkVmlzaWJsZUNvbnRlbnRTaXplKHNjb2xsYmFySW5jbHVzaW9uKTsKLSAgICB2aXNpYmxlQ29u
dGVudFNpemUuc2NhbGUoMSAvIHZpc2libGVDb250ZW50U2NhbGVGYWN0b3IoKSk7Ci0gICAgcmV0
dXJuIEludFJlY3QoSW50UG9pbnQobV9zY3JvbGxPZmZzZXQpLCBleHBhbmRlZEludFNpemUodmlz
aWJsZUNvbnRlbnRTaXplKSk7CisgICAgcmV0dXJuIHVub2JzY3VyZWRDb250ZW50UmVjdCgpOwog
fQogI2VuZGlmCiAKIEludFNpemUgU2Nyb2xsVmlldzo6bGF5b3V0U2l6ZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fZml4ZWRMYXlvdXRTaXplLmlzRW1wdHkoKSB8fCAhbV91c2VGaXhlZExheW91
dCA/IHVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKEV4Y2x1ZGVTY3JvbGxiYXJzKSA6IG1fZml4
ZWRMYXlvdXRTaXplOworICAgIHJldHVybiBtX2ZpeGVkTGF5b3V0U2l6ZS5pc0VtcHR5KCkgfHwg
IW1fdXNlRml4ZWRMYXlvdXQgPyB1bnNjYWxlZFVub2JzY3VyZWRWaXNpYmxlQ29udGVudFNpemUo
RXhjbHVkZVNjcm9sbGJhcnMpIDogbV9maXhlZExheW91dFNpemU7CiB9CiAKIEludFNpemUgU2Ny
b2xsVmlldzo6Zml4ZWRMYXlvdXRTaXplKCkgY29uc3QKQEAgLTM2OSwxMyArMzkyLDEzIEBAIElu
dFBvaW50IFNjcm9sbFZpZXc6OmFkanVzdFNjcm9sbFBvc2l0aW8KIEludFNpemUgU2Nyb2xsVmll
dzo6c2Nyb2xsT2Zmc2V0UmVsYXRpdmVUb0RvY3VtZW50KCkgY29uc3QKIHsKICAgICBJbnRTaXpl
IHNjcm9sbE9mZnNldCA9IHRoaXMtPnNjcm9sbE9mZnNldCgpOwotICAgIHJldHVybiBJbnRTaXpl
KHNjcm9sbE9mZnNldC53aWR0aCgpLCBzY3JvbGxPZmZzZXQuaGVpZ2h0KCkgLSBoZWFkZXJIZWln
aHQoKSk7CisgICAgcmV0dXJuIEludFNpemUoc2Nyb2xsT2Zmc2V0LndpZHRoKCksIHNjcm9sbE9m
ZnNldC5oZWlnaHQoKSAtIGhlYWRlckhlaWdodCgpIC0gdG9wQ29udGVudEluc2V0KCkpOwogfQog
CiBJbnRQb2ludCBTY3JvbGxWaWV3OjpzY3JvbGxQb3NpdGlvblJlbGF0aXZlVG9Eb2N1bWVudCgp
IGNvbnN0CiB7CiAgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSB0aGlzLT5zY3JvbGxQb3Np
dGlvbigpOwotICAgIHJldHVybiBJbnRQb2ludChzY3JvbGxQb3NpdGlvbi54KCksIHNjcm9sbFBv
c2l0aW9uLnkoKSAtIGhlYWRlckhlaWdodCgpKTsKKyAgICByZXR1cm4gSW50UG9pbnQoc2Nyb2xs
UG9zaXRpb24ueCgpLCBzY3JvbGxQb3NpdGlvbi55KCkgLSBoZWFkZXJIZWlnaHQoKSAtIHRvcENv
bnRlbnRJbnNldCgpKTsKIH0KIAogaW50IFNjcm9sbFZpZXc6OnNjcm9sbFNpemUoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0CkBAIC02NjMsOSArNjg2LDkgQEAgdm9pZCBT
Y3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IAogICAgICAgICBpbnQgcGFnZVN0ZXAg
PSBzdGQ6Om1heChzdGQ6Om1heDxpbnQ+KGNsaWVudEhlaWdodCAqIFNjcm9sbGJhcjo6bWluRnJh
Y3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIGNsaWVudEhlaWdodCAtIFNjcm9sbGJhcjo6bWF4T3Zl
cmxhcEJldHdlZW5QYWdlcygpKSwgMSk7CiAgICAgICAgIEludFJlY3Qgb2xkUmVjdChtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7CiAgICAgICAgIEludFJlY3QgdkJhclJlY3Qod2lk
dGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIAotICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+
d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIChtX2hvcml6b250
YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgdG9wQ29udGVudEluc2V0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgaGVpZ2h0KCkgLSB0b3BDb250ZW50SW5zZXQoKSAtIChtX2hvcml6b250YWxTY3JvbGxi
YXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMCkpOwogICAgICAgICBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QodkJhclJlY3QpOwogICAgICAgICBpZiAoIW1f
c2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgb2xkUmVjdCAhPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5m
cmFtZVJlY3QoKSkKICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUo
KTsKQEAgLTc5Miw3ICs4MTUsNyBAQCBJbnRQb2ludCBTY3JvbGxWaWV3Ojpjb250ZW50c1RvUm9v
dFZpZXcoCiAgICAgaWYgKGRlbGVnYXRlc1Njcm9sbGluZygpKQogICAgICAgICByZXR1cm4gY29u
dmVydFRvUm9vdFZpZXcoY29udGVudHNQb2ludCk7CiAKLSAgICBJbnRQb2ludCB2aWV3UG9pbnQg
PSBjb250ZW50c1BvaW50ICsgSW50U2l6ZSgwLCBoZWFkZXJIZWlnaHQoKSkgLSBzY3JvbGxPZmZz
ZXQoKTsKKyAgICBJbnRQb2ludCB2aWV3UG9pbnQgPSBjb250ZW50c1BvaW50ICsgSW50U2l6ZSgw
LCBoZWFkZXJIZWlnaHQoKSArIHRvcENvbnRlbnRJbnNldCgpKSAtIHNjcm9sbE9mZnNldCgpOwog
ICAgIHJldHVybiBjb252ZXJ0VG9Sb290Vmlldyh2aWV3UG9pbnQpOyAgCiB9CiAKQEAgLTgxMiw3
ICs4MzUsNyBAQCBJbnRSZWN0IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9Sb290VmlldyhjCiAgICAg
ICAgIHJldHVybiBjb252ZXJ0VG9Sb290Vmlldyhjb250ZW50c1JlY3QpOwogCiAgICAgSW50UmVj
dCB2aWV3UmVjdCA9IGNvbnRlbnRzUmVjdDsKLSAgICB2aWV3UmVjdC5tb3ZlKC1zY3JvbGxPZmZz
ZXQoKSArIEludFNpemUoMCwgaGVhZGVySGVpZ2h0KCkpKTsKKyAgICB2aWV3UmVjdC5tb3ZlKC1z
Y3JvbGxPZmZzZXQoKSArIEludFNpemUoMCwgaGVhZGVySGVpZ2h0KCkgKyB0b3BDb250ZW50SW5z
ZXQoKSkpOwogICAgIHJldHVybiBjb252ZXJ0VG9Sb290Vmlldyh2aWV3UmVjdCk7CiB9CiAKQEAg
LTgzOSw3ICs4NjIsNyBAQCBJbnRQb2ludCBTY3JvbGxWaWV3Ojpjb250ZW50c1RvV2luZG93KGNv
CiAgICAgaWYgKGRlbGVnYXRlc1Njcm9sbGluZygpKQogICAgICAgICByZXR1cm4gY29udmVydFRv
Q29udGFpbmluZ1dpbmRvdyhjb250ZW50c1BvaW50KTsKIAotICAgIEludFBvaW50IHZpZXdQb2lu
dCA9IGNvbnRlbnRzUG9pbnQgKyBJbnRTaXplKDAsIGhlYWRlckhlaWdodCgpKSAtIHNjcm9sbE9m
ZnNldCgpOworICAgIEludFBvaW50IHZpZXdQb2ludCA9IGNvbnRlbnRzUG9pbnQgKyBJbnRTaXpl
KDAsIGhlYWRlckhlaWdodCgpICsgdG9wQ29udGVudEluc2V0KCkpIC0gc2Nyb2xsT2Zmc2V0KCk7
CiAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3codmlld1BvaW50KTsgIAogfQog
CkBAIC04NTksNyArODgyLDcgQEAgSW50UmVjdCBTY3JvbGxWaWV3Ojpjb250ZW50c1RvV2luZG93
KGNvbgogICAgICAgICByZXR1cm4gY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb250ZW50c1Jl
Y3QpOwogCiAgICAgSW50UmVjdCB2aWV3UmVjdCA9IGNvbnRlbnRzUmVjdDsKLSAgICB2aWV3UmVj
dC5tb3ZlKC1zY3JvbGxPZmZzZXQoKSArIEludFNpemUoMCwgaGVhZGVySGVpZ2h0KCkpKTsKKyAg
ICB2aWV3UmVjdC5tb3ZlKC1zY3JvbGxPZmZzZXQoKSArIEludFNpemUoMCwgaGVhZGVySGVpZ2h0
KCkgKyB0b3BDb250ZW50SW5zZXQoKSkpOwogICAgIHJldHVybiBjb252ZXJ0VG9Db250YWluaW5n
V2luZG93KHZpZXdSZWN0KTsKIH0KIApAQCAtMTA1Niw2ICsxMDc5LDggQEAgSW50UmVjdCBTY3Jv
bGxWaWV3OjpzY3JvbGxDb3JuZXJSZWN0KCkgYwogICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFy
cygpKQogICAgICAgICByZXR1cm4gY29ybmVyUmVjdDsKIAorICAgIGludCBoZWlnaHRUcmFja2Vk
QnlTY3JvbGxiYXIgPSBoZWlnaHQoKSAtIHRvcENvbnRlbnRJbnNldCgpOworCiAgICAgaWYgKG1f
aG9yaXpvbnRhbFNjcm9sbGJhciAmJiB3aWR0aCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT53
aWR0aCgpID4gMCkgewogICAgICAgICBjb3JuZXJSZWN0LnVuaXRlKEludFJlY3QobV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpLApAQCAtMTA2MywxMyAr
MTA4OCwxMyBAQCBJbnRSZWN0IFNjcm9sbFZpZXc6OnNjcm9sbENvcm5lclJlY3QoKSBjCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdo
dCgpKSk7CiAgICAgfQogCi0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIgJiYgaGVpZ2h0KCkg
LSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5oZWlnaHQoKSA+IDApIHsKKyAgICBpZiAobV92ZXJ0aWNh
bFNjcm9sbGJhciAmJiBoZWlnaHRUcmFja2VkQnlTY3JvbGxiYXIgLSBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5oZWlnaHQoKSA+IDApIHsKICAgICAgICAgY29ybmVyUmVjdC51bml0ZShJbnRSZWN0KHdp
ZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5oZWlnaHQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5oZWlnaHQoKSArIHRvcENvbnRlbnRJbnNldCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHRUcmFja2VkQnlTY3JvbGxiYXIgLSBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT5oZWlnaHQoKSkpOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBj
b3JuZXJSZWN0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCShy
ZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1Myw5ICsxNTMsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
Q2FuQmxpdE9uU2Nyb2xsKGJvb2wpOwogICAgIGJvb2wgY2FuQmxpdE9uU2Nyb2xsKCkgY29uc3Q7
CiAKLSAgICAvLyBUaGUgdmlzaWJsZSBjb250ZW50IHJlY3QgaGFzIGEgbG9jYXRpb24gdGhhdCBp
cyB0aGUgc2Nyb2xsZWQgb2Zmc2V0IG9mIHRoZSBkb2N1bWVudC4gVGhlIHdpZHRoIGFuZCBoZWln
aHQgYXJlIHRoZSB2aWV3cG9ydCB3aWR0aAotICAgIC8vIGFuZCBoZWlnaHQuIEJ5IGRlZmF1bHQg
dGhlIHNjcm9sbGJhcnMgdGhlbXNlbHZlcyBhcmUgZXhjbHVkZWQgZnJvbSB0aGlzIHJlY3Rhbmds
ZSwgYnV0IGFuIG9wdGlvbmFsIGJvb2xlYW4gYXJndW1lbnQgYWxsb3dzIHRoZW0gdG8gYmUKLSAg
ICAvLyBpbmNsdWRlZC4KKyAgICB2aXJ0dWFsIGZsb2F0IHRvcENvbnRlbnRJbnNldCgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KKworICAgIC8vIFRoZSB2aXNpYmxlIGNvbnRlbnQgcmVjdCBoYXMgYSBs
b2NhdGlvbiB0aGF0IGlzIHRoZSBzY3JvbGxlZCBvZmZzZXQgb2YgdGhlIGRvY3VtZW50LiBUaGUg
d2lkdGggYW5kIGhlaWdodCBhcmUgdGhlIHVub2JzY3VyZWQgdmlld3BvcnQKKyAgICAvLyB3aWR0
aCBhbmQgaGVpZ2h0LiBCeSBkZWZhdWx0IHRoZSBzY3JvbGxiYXJzIHRoZW1zZWx2ZXMgYXJlIGV4
Y2x1ZGVkIGZyb20gdGhpcyByZWN0YW5nbGUsIGJ1dCBhbiBvcHRpb25hbCBib29sZWFuIGFyZ3Vt
ZW50IGFsbG93cyB0aGVtCisgICAgLy8gdG8gYmUgaW5jbHVkZWQuCiAgICAgLy8gSW4gdGhlIHNp
dHVhdGlvbiB0aGUgY2xpZW50IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgc2Nyb2xsaW5nIChpZS4g
d2l0aCBhIHRpbGVkIGJhY2tpbmcgc3RvcmUpIGl0IGlzIHBvc3NpYmxlIHRvIHVzZQogICAgIC8v
IHRoZSBzZXRGaXhlZFZpc2libGVDb250ZW50UmVjdCBpbnN0ZWFkIGZvciB0aGUgbWFpbmZyYW1l
LCB0aG91Z2ggdGhpcyBtdXN0IGJlIHVwZGF0ZWQgbWFudWFsbHksIGUuZyBqdXN0IGJlZm9yZSBy
ZXN1bWluZyB0aGUgcGFnZQogICAgIC8vIHdoaWNoIHVzdWFsbHkgd2lsbCBoYXBwZW4gd2hlbiBw
YW5uaW5nLCBwaW5jaGluZyBhbmQgcm90YXRpb24gZW5kcywgb3Igd2hlbiBzY2FsZSBvciBwb3Np
dGlvbiBhcmUgY2hhbmdlZCBtYW51YWxseS4KQEAgLTE3Myw3ICsxNzUsNyBAQCBwdWJsaWM6CiAg
ICAgSW50UmVjdCB1bm9ic2N1cmVkQ29udGVudFJlY3QoKSBjb25zdDsKICAgICBJbnRSZWN0IHVu
b2JzY3VyZWRDb250ZW50UmVjdEluY2x1ZGluZ1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiB1
bm9ic2N1cmVkQ29udGVudFJlY3QoKTsgfQogI2Vsc2UKLSAgICBJbnRSZWN0IHVub2JzY3VyZWRD
b250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIHZpc2libGVDb250ZW50UmVjdCgpOyB9CisgICAg
SW50UmVjdCB1bm9ic2N1cmVkQ29udGVudFJlY3QoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNT
Y3JvbGxiYXJzID0gRXhjbHVkZVNjcm9sbGJhcnMpIGNvbnN0OwogICAgIEludFJlY3QgdW5vYnNj
dXJlZENvbnRlbnRSZWN0SW5jbHVkaW5nU2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIHZpc2li
bGVDb250ZW50UmVjdEluY2x1ZGluZ1Njcm9sbGJhcnMoKTsgfQogI2VuZGlmCiAKQEAgLTE4OSwx
MSArMTkxLDEzIEBAIHB1YmxpYzoKICAgICBUaWxlQ2FjaGUqIHRpbGVDYWNoZSgpOwogI2VuZGlm
CiAKLSAgICAvLyB2aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCkgaXMgY29tcHV0ZWQgZnJvbSB1
bnNjYWxlZFZpc2libGVDb250ZW50U2l6ZSgpIGRpdmlkZWQgYnkgdGhlIHZhbHVlIG9mIHZpc2li
bGVDb250ZW50U2NhbGVGYWN0b3IuCisgICAgLy8gdmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgp
IGlzIGNvbXB1dGVkIGZyb20gdW5zY2FsZWRVbm9ic2N1cmVkVmlzaWJsZUNvbnRlbnRTaXplKCkg
ZGl2aWRlZCBieSB0aGUgdmFsdWUgb2YgdmlzaWJsZUNvbnRlbnRTY2FsZUZhY3Rvci4KICAgICAv
LyB2aXNpYmxlQ29udGVudFNjYWxlRmFjdG9yIGlzIHVzdWFsbHkgMSwgZXhjZXB0IHdoZW4gdGhl
IHNldHRpbmcgZGVsZWdhdGVzUGFnZVNjYWxpbmcgaXMgdHJ1ZSBhbmQgdGhlCiAgICAgLy8gU2Ny
b2xsVmlldyBpcyB0aGUgbWFpbiBmcmFtZTsgaW4gdGhhdCBjYXNlLCB2aXNpYmxlQ29udGVudFNj
YWxlRmFjdG9yIGlzIGVxdWFsIHRvIHRoZSBwYWdlJ3MgcGFnZVNjYWxlRmFjdG9yLgotICAgIC8v
IFBvcnRzIHRoYXQgZG9uJ3QgdXNlIHBhZ2VTY2FsZUZhY3RvciBjYW4gdHJlYXQgdW5zY2FsZWRW
aXNpYmxlQ29udGVudFNpemUgYW5kIHZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKSBhcyBlcXVp
dmFsZW50LgotICAgIEludFNpemUgdW5zY2FsZWRWaXNpYmxlQ29udGVudFNpemUoVmlzaWJsZUNv
bnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzID0gRXhjbHVkZVNjcm9sbGJhcnMpIGNvbnN0Owor
ICAgIC8vIFBvcnRzIHRoYXQgZG9uJ3QgdXNlIHBhZ2VTY2FsZUZhY3RvciBjYW4gdHJlYXQgdW5z
Y2FsZWRVbm9ic2N1cmVkVmlzaWJsZUNvbnRlbnRTaXplIGFuZCB2aXNpYmxlQ29udGVudFJlY3Qo
KS5zaXplKCkgYXMgZXF1aXZhbGVudC4KKyAgICAvLyB1bnNjYWxlZFRvdGFsVmlzaWJsZUNvbnRl
bnRTaXplKCkgaW5jbHVkZXMgYXJlYXMgaW4gdGhlIGNvbnRlbnQgdGhhdCBtaWdodCBiZSBvYnNj
dXJlZCBieSBVSSBlbGVtZW50cy4KKyAgICBJbnRTaXplIHVuc2NhbGVkVW5vYnNjdXJlZFZpc2li
bGVDb250ZW50U2l6ZShWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgPSBFeGNs
dWRlU2Nyb2xsYmFycykgY29uc3Q7CisgICAgSW50U2l6ZSB1bnNjYWxlZFRvdGFsVmlzaWJsZUNv
bnRlbnRTaXplKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyA9IEV4Y2x1ZGVT
Y3JvbGxiYXJzKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IHZpc2libGVDb250ZW50U2NhbGVG
YWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9CiAKICAgICAvLyBGdW5jdGlvbnMgZm9yIGdldHRp
bmcvc2V0dGluZyB0aGUgc2l6ZSB3ZWJraXQgc2hvdWxkIHVzZSB0byBsYXlvdXQgdGhlIGNvbnRl
bnRzLiBCeSBkZWZhdWx0IHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIHZpc2libGUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
CShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3Miw3ICsxNDcyLDcgQEAgdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZyYW1lVmlld0RpZAogewogICAgIGlmIChtX2NsaXBM
YXllcikgewogICAgICAgICBjb25zdCBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IG1fcmVuZGVyVmll
dy5mcmFtZVZpZXcoKTsKLSAgICAgICAgbV9jbGlwTGF5ZXItPnNldFNpemUoZnJhbWVWaWV3LnVu
c2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKCkpOworICAgICAgICBtX2NsaXBMYXllci0+c2V0U2l6
ZShmcmFtZVZpZXcudW5zY2FsZWRUb3RhbFZpc2libGVDb250ZW50U2l6ZSgpKTsKIAogICAgICAg
ICBmcmFtZVZpZXdEaWRTY3JvbGwoKTsKICAgICAgICAgdXBkYXRlT3ZlcmZsb3dDb250cm9sc0xh
eWVycygpOwpAQCAtMTg3NSwxMSArMTg3NSwxMiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6dXBkYXRlUm9vdExhCiB7CiAgICAgaWYgKG1fcm9vdENvbnRlbnRMYXllcikgewogICAgICAg
ICBjb25zdCBJbnRSZWN0JiBkb2N1bWVudFJlY3QgPSBtX3JlbmRlclZpZXcuZG9jdW1lbnRSZWN0
KCk7Ci0gICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0U2l6ZShkb2N1bWVudFJlY3Quc2l6
ZSgpKTsKLSAgICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50
KGRvY3VtZW50UmVjdC54KCksIGRvY3VtZW50UmVjdC55KCkgKyBtX3JlbmRlclZpZXcuZnJhbWVW
aWV3KCkuaGVhZGVySGVpZ2h0KCkpKTsKKyAgICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRT
aXplKGRvY3VtZW50UmVjdC5zaXplKCkpOyAgICAgICAgCisgICAgICAgIG1fcm9vdENvbnRlbnRM
YXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChkb2N1bWVudFJlY3QueCgpLCBkb2N1bWVudFJl
Y3QueSgpICsgbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmhlYWRlckhlaWdodCgpCisgICAgICAg
ICAgICArIG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS50b3BDb250ZW50SW5zZXQoKSkpOwogICAg
IH0KICAgICBpZiAobV9jbGlwTGF5ZXIpCi0gICAgICAgIG1fY2xpcExheWVyLT5zZXRTaXplKG1f
cmVuZGVyVmlldy5mcmFtZVZpZXcoKS51bnNjYWxlZFZpc2libGVDb250ZW50U2l6ZSgpKTsKKyAg
ICAgICAgbV9jbGlwTGF5ZXItPnNldFNpemUobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnVuc2Nh
bGVkVG90YWxWaXNpYmxlQ29udGVudFNpemUoKSk7CiAKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJ
TkcpCiAgICAgaWYgKG1fY29udGVudFNoYWRvd0xheWVyKSB7CkBAIC0zMTIyLDcgKzMxMjMsNyBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZW5zdXJlUm9vdExhCiAgICAgICAgICAgICBt
X2NsaXBMYXllci0+YWRkQ2hpbGQobV9zY3JvbGxMYXllci5nZXQoKSk7CiAgICAgICAgICAgICBt
X3Njcm9sbExheWVyLT5hZGRDaGlsZChtX3Jvb3RDb250ZW50TGF5ZXIuZ2V0KCkpOwogCi0gICAg
ICAgICAgICBtX2NsaXBMYXllci0+c2V0U2l6ZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudW5z
Y2FsZWRWaXNpYmxlQ29udGVudFNpemUoKSk7CisgICAgICAgICAgICBtX2NsaXBMYXllci0+c2V0
U2l6ZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudW5zY2FsZWRUb3RhbFZpc2libGVDb250ZW50
U2l6ZSgpKTsKIAogICAgICAgICAgICAgdXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycygpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCShyZXZpc2lvbiAxNjU5NzEp
CisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4MjcsNiArMTgyNywxNiBAQCB2b2lkIEludGVybmFsczo6c2V0Rm9vdGVySGVpZ2h0KGZs
b2F0IGhlCiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBkb2N1bWVudC0+dmlldygpOwogICAg
IGZyYW1lVmlldy0+c2V0Rm9vdGVySGVpZ2h0KGhlaWdodCk7CiB9CisgICAgCit2b2lkIEludGVy
bmFsczo6c2V0VG9wQ29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJbnNldCkKK3sKKyAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7
CisgICAgcGFnZS0+c2V0VG9wQ29udGVudEluc2V0KGNvbnRlbnRJbnNldCk7Cit9CiAKICNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCiB2b2lkIEludGVybmFsczo6d2Via2l0V2lsbEVudGVyRnVs
bFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaAkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjU1LDYgKzI1NSw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEhlYWRlckhlaWdodChmbG9hdCk7CiAgICAgdm9pZCBzZXRGb290ZXJIZWln
aHQoZmxvYXQpOwogCisgICAgdm9pZCBzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQpOworCiAjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIHZvaWQgd2Via2l0V2lsbEVudGVyRnVsbFNjcmVl
bkZvckVsZW1lbnQoRWxlbWVudCopOwogICAgIHZvaWQgd2Via2l0RGlkRW50ZXJGdWxsU2NyZWVu
Rm9yRWxlbWVudChFbGVtZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
aWRsCShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw2ICsyMTQsOCBAQAogICAgIHZvaWQgc2V0SGVh
ZGVySGVpZ2h0KGZsb2F0IGhlaWdodCk7CiAgICAgdm9pZCBzZXRGb290ZXJIZWlnaHQoZmxvYXQg
aGVpZ2h0KTsKIAorICAgIHZvaWQgc2V0VG9wQ29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJbnNl
dCk7CisKICNpZiBkZWZpbmVkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJiYgRU5BQkxFX0ZVTExT
Q1JFRU5fQVBJCiAgICAgdm9pZCB3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChF
bGVtZW50IGVsZW1lbnQpOwogICAgIHZvaWQgd2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxl
bWVudChFbGVtZW50IGVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2MDAzKQor
KysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTQtMDMtMjAgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCBjb250ZW50SW5zZXQgZm9yIE1hYyBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAyNzMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgV0tWaWV3IEFQ
SSBmb3Igc2V0dGluZyBhIHRvcENvbnRlbnRJbnNldCgpLiBBbGwgb2YgdGhpcyB3b3JrIGdldHMg
CisgICAgICAgIHRoYXQgbnVtYmVyIHBsdW1iZWQgZG93biB0byBXZWJDb3JlLgorCisgICAgICAg
ICogU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQ
YWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1ZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcu
bW06CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0VG9wQ29udGVudEluc2V0Ol0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3RvcENvbnRlbnRJbnNldF0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFj
L1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3IF9zZXRUb3BDb250ZW50SW5zZXQ6XSk6Cisg
ICAgICAgICgtW1dLVmlldyBfdG9wQ29udGVudEluc2V0XSk6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6V2ViUGFn
ZVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRUb3BDb250ZW50SW5z
ZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNyZWF0aW9uUGFyYW1ldGVycyk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OnRvcENvbnRlbnRJbnNldCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpXZWJQYWdlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0VG9wQ29udGVudEluc2V0KToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorCiAyMDE0LTAzLTIwICBBbGV4ZXkgUHJvc2t1cnlha292
ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBpT1MgaW5wdXQgbWV0aG9kIGNvZGUg
dG8gdXNlIG5ldyBjcm9zcy1wbGF0Zm9ybSBhc3luYyBmdW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJl
dmlzaW9uIDE2NTk3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25Q
YXJhbWV0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQCB2b2lkIFdlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJCiAgICAgZW5jb2RlciA8PCBjYW5SdW5CZWZv
cmVVbmxvYWRDb25maXJtUGFuZWw7CiAgICAgZW5jb2RlciA8PCBjYW5SdW5Nb2RhbDsKICAgICBl
bmNvZGVyIDw8IGRldmljZVNjYWxlRmFjdG9yOworICAgIGVuY29kZXIgPDwgdG9wQ29udGVudElu
c2V0OwogICAgIGVuY29kZXIgPDwgbWVkaWFWb2x1bWU7CiAgICAgZW5jb2RlciA8PCBtYXlTdGFy
dE1lZGlhV2hlbkluV2luZG93OwogICAgIGVuY29kZXIgPDwgbWluaW11bUxheW91dFNpemU7CkBA
IC0xMjAsNiArMTIxLDggQEAgYm9vbCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUo
SQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0
ZXJzLmRldmljZVNjYWxlRmFjdG9yKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy50b3BDb250ZW50SW5zZXQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLm1lZGlhVm9sdW1l
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1l
dGVycy5tYXlTdGFydE1lZGlhV2hlbkluV2luZG93KSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaAkocmV2aXNpb24gMTY1OTcx
KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsOCBAQCBzdHJ1Y3QgV2ViUGFnZUNyZWF0aW9uUGFy
YW1ldGVycyB7CiAgICAgYm9vbCBjYW5SdW5Nb2RhbDsKIAogICAgIGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yOworCisgICAgZmxvYXQgdG9wQ29udGVudEluc2V0OwogICAgIAogICAgIGZsb2F0IG1l
ZGlhVm9sdW1lOwogICAgIGJvb2wgbWF5U3RhcnRNZWRpYVdoZW5JbldpbmRvdzsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAxNjU5NzEp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjc0LDYgKzI3NCw3IEBAIFdlYlBhZ2VQcm94eTo6V2ViUGFnZVByb3h5KFBhZ2VD
bGllbnQmIHAKICAgICAsIG1fcGFnZVNjYWxlRmFjdG9yKDEpCiAgICAgLCBtX2ludHJpbnNpY0Rl
dmljZVNjYWxlRmFjdG9yKDEpCiAgICAgLCBtX2N1c3RvbURldmljZVNjYWxlRmFjdG9yKDApCisg
ICAgLCBtX3RvcENvbnRlbnRJbnNldCgwKQogICAgICwgbV9sYXllckhvc3RpbmdNb2RlKExheWVy
SG9zdGluZ01vZGU6OkluUHJvY2VzcykKICAgICAsIG1fZHJhd3NCYWNrZ3JvdW5kKHRydWUpCiAg
ICAgLCBtX2RyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGZhbHNlKQpAQCAtOTI1LDYgKzkyNiwx
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0RHJhd3NUcmFuc3BhcmVudEJhCiAgICAgICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0RHJhd3NUcmFuc3BhcmVudEJhY2tn
cm91bmQoZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQpLCBtX3BhZ2VJRCk7CiB9CiAKK3ZvaWQg
V2ViUGFnZVByb3h5OjpzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQgY29udGVudEluc2V0KQorewor
ICAgIGlmIChtX3RvcENvbnRlbnRJbnNldCA9PSBjb250ZW50SW5zZXQpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fdG9wQ29udGVudEluc2V0ID0gY29udGVudEluc2V0OworCisgICAgaWYgKGlz
VmFsaWQoKSkKKyAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRU
b3BDb250ZW50SW5zZXQoY29udGVudEluc2V0KSwgbV9wYWdlSUQpOworfQorCiB2b2lkIFdlYlBh
Z2VQcm94eTo6c2V0VW5kZXJsYXlDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYg
KG1fdW5kZXJsYXlDb2xvciA9PSBjb2xvcikKQEAgLTQwMzIsNiArNDA0NCw3IEBAIFdlYlBhZ2VD
cmVhdGlvblBhcmFtZXRlcnMgV2ViUGFnZVByb3h5OjoKICAgICBwYXJhbWV0ZXJzLmNhblJ1bkJl
Zm9yZVVubG9hZENvbmZpcm1QYW5lbCA9IG1fdWlDbGllbnQtPmNhblJ1bkJlZm9yZVVubG9hZENv
bmZpcm1QYW5lbCgpOwogICAgIHBhcmFtZXRlcnMuY2FuUnVuTW9kYWwgPSBtX2NhblJ1bk1vZGFs
OwogICAgIHBhcmFtZXRlcnMuZGV2aWNlU2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3Rvcigp
OworICAgIHBhcmFtZXRlcnMudG9wQ29udGVudEluc2V0ID0gbV90b3BDb250ZW50SW5zZXQ7CiAg
ICAgcGFyYW1ldGVycy5tZWRpYVZvbHVtZSA9IG1fbWVkaWFWb2x1bWU7CiAgICAgcGFyYW1ldGVy
cy5tYXlTdGFydE1lZGlhV2hlbkluV2luZG93ID0gbV9tYXlTdGFydE1lZGlhV2hlbkluV2luZG93
OwogICAgIHBhcmFtZXRlcnMubWluaW11bUxheW91dFNpemUgPSBtX21pbmltdW1MYXlvdXRTaXpl
OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24g
MTY1OTcxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MjYsNiArNDI2LDkgQEAgcHVibGljOgogICAgIGJvb2wgZHJhd3NUcmFu
c3BhcmVudEJhY2tncm91bmQoKSBjb25zdCB7IHJldHVybiBtX2RyYXdzVHJhbnNwYXJlbnRCYWNr
Z3JvdW5kOyB9CiAgICAgdm9pZCBzZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChib29sKTsK
IAorICAgIGZsb2F0IHRvcENvbnRlbnRJbnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wQ29udGVu
dEluc2V0OyB9CisgICAgdm9pZCBzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQpOworCiAgICAgV2Vi
Q29yZTo6Q29sb3IgdW5kZXJsYXlDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fdW5kZXJsYXlDb2xv
cjsgfQogICAgIHZvaWQgc2V0VW5kZXJsYXlDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpOwog
CkBAIC0xMzM4LDYgKzEzNDEsNyBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBtX3BhZ2VTY2FsZUZh
Y3RvcjsKICAgICBmbG9hdCBtX2ludHJpbnNpY0RldmljZVNjYWxlRmFjdG9yOwogICAgIGZsb2F0
IG1fY3VzdG9tRGV2aWNlU2NhbGVGYWN0b3I7CisgICAgZmxvYXQgbV90b3BDb250ZW50SW5zZXQ7
CiAKICAgICBMYXllckhvc3RpbmdNb2RlIG1fbGF5ZXJIb3N0aW5nTW9kZTsKIApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmgJ
KHJldmlzaW9uIDE2NTk3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw2ICs4MSw3IEBACiBAcHJvcGVy
dHkgKHJlYWR3cml0ZSkgQk9PTCBhbGxvd3NNYWduaWZpY2F0aW9uOwogQHByb3BlcnR5IChyZWFk
d3JpdGUpIGRvdWJsZSBtYWduaWZpY2F0aW9uOwogQHByb3BlcnR5IChyZWFkd3JpdGUpIEJPT0wg
YWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXM7CitAcHJvcGVydHkgKG5vbmF0b21p
Yywgc2V0dGVyPV9zZXRUb3BDb250ZW50SW5zZXQ6KSBDR0Zsb2F0IF90b3BDb250ZW50SW5zZXQ7
CiAKIEBwcm9wZXJ0eSAocmVhZG9ubHkpIE5TQ29sb3IgKl9wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5k
Q29sb3I7CiBAcHJvcGVydHkoY29weSwgbm9uYXRvbWljKSBOU0NvbG9yICp1bmRlcmxheUNvbG9y
OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXcubW0JKHJldmlzaW9uIDE2NTk3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQ3LDYgKzExNDcsMTYgQEAg
LSAodm9pZClfc2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQ6KAogICAgIF9wYWdlLT5zZXRE
cmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChkcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCk7CiB9
CiAKKy0gKHZvaWQpX3NldFRvcENvbnRlbnRJbnNldDooQ0dGbG9hdCljb250ZW50SW5zZXQKK3sK
KyAgICBfcGFnZS0+c2V0VG9wQ29udGVudEluc2V0KGNvbnRlbnRJbnNldCk7Cit9CisKKy0gKENH
RmxvYXQpX3RvcENvbnRlbnRJbnNldAoreworICAgIHJldHVybiBfcGFnZS0+dG9wQ29udGVudElu
c2V0KCk7Cit9CisKICNlbmRpZgogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAkocmV2aXNpb24gMTY1
OTcxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDcgQEAgdHlwZWRlZiBOU19FTlVNKE5T
SW50ZWdlciwgX1dLUGFnaW5hdGlvbgogI2Vsc2UKIEBwcm9wZXJ0eSAocmVhZG9ubHkpIE5TQ29s
b3IgKl9wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3I7CiBAcHJvcGVydHkgKG5vbmF0b21pYywg
c2V0dGVyPV9zZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZDopIEJPT0wgX2RyYXdzVHJhbnNw
YXJlbnRCYWNrZ3JvdW5kOworQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0VG9wQ29u
dGVudEluc2V0OikgQ0dGbG9hdCBfdG9wQ29udGVudEluc2V0OwogI2VuZGlmCiAKIC0gKHZvaWQp
X3J1bkphdmFTY3JpcHRJbk1haW5GcmFtZTooTlNTdHJpbmcgKilzY3JpcHRTdHJpbmc7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCShyZXZpc2lvbiAx
NjU5NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdv
cmtpbmcgY29weSkKQEAgLTMyOTIsNiArMzI5MiwxNiBAQCAtIChCT09MKWFsbG93c0JhY2tGb3J3
YXJkTmF2aWdhdGlvbkdlc3R1CiAgICAgcmV0dXJuIF9kYXRhLT5fYWxsb3dzQmFja0ZvcndhcmRO
YXZpZ2F0aW9uR2VzdHVyZXM7CiB9CiAKKy0gKHZvaWQpX3NldFRvcENvbnRlbnRJbnNldDooQ0dG
bG9hdCljb250ZW50SW5zZXQKK3sKKyAgICBfZGF0YS0+X3BhZ2UtPnNldFRvcENvbnRlbnRJbnNl
dChjb250ZW50SW5zZXQpOworfQorCistIChDR0Zsb2F0KV90b3BDb250ZW50SW5zZXQKK3sKKyAg
ICByZXR1cm4gX2RhdGEtPl9wYWdlLT50b3BDb250ZW50SW5zZXQoKTsKK30KKwogLSAoTlNDb2xv
ciAqKV9wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IKIHsKICAgICBXZWJDb3JlOjpDb2xvciBj
b2xvciA9IF9kYXRhLT5fcGFnZS0+cGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yKCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZp
c2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNCw2ICs0MDQsOCBAQCBXZWJQYWdlOjpXZWJQYWdl
KHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgCiAgICAgc2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9yKHBh
cmFtZXRlcnMuc2Nyb2xsUGlubmluZ0JlaGF2aW9yKTsKICAgICBzZXRCYWNrZ3JvdW5kRXh0ZW5k
c0JleW9uZFBhZ2UocGFyYW1ldGVycy5iYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UpOwogCisg
ICAgc2V0VG9wQ29udGVudEluc2V0KHBhcmFtZXRlcnMudG9wQ29udGVudEluc2V0KTsKKwogICAg
IG1fdXNlckFnZW50ID0gcGFyYW1ldGVycy51c2VyQWdlbnQ7CiAKICAgICBXZWJCYWNrRm9yd2Fy
ZExpc3RQcm94eTo6c2V0SGlnaGVzdEl0ZW1JREZyb21VSVByb2Nlc3MocGFyYW1ldGVycy5oaWdo
ZXN0VXNlZEJhY2tGb3J3YXJkSXRlbUlEKTsKQEAgLTIwMzIsNiArMjAzNCwxMSBAQCB2b2lkIFdl
YlBhZ2U6OnNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvCiAgICAgbV9kcmF3aW5nQXJlYS0+c2V0
TmVlZHNEaXNwbGF5KCk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6c2V0VG9wQ29udGVudEluc2V0KGZs
b2F0IGNvbnRlbnRJbnNldCkKK3sKKyAgICBtX3BhZ2UtPnNldFRvcENvbnRlbnRJbnNldChjb250
ZW50SW5zZXQpOworfQorCiB2b2lkIFdlYlBhZ2U6OnZpZXdXaWxsU3RhcnRMaXZlUmVzaXplKCkK
IHsKICAgICBpZiAoIW1fcGFnZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtODQwLDYgKzg0MCw4
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXREcmF3c0JhY2tncm91bmQoYm9vbCk7CiAgICAgdm9p
ZCBzZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChib29sKTsKIAorICAgIHZvaWQgc2V0VG9w
Q29udGVudEluc2V0KGZsb2F0KTsKKwogICAgIHZvaWQgdmlld1dpbGxTdGFydExpdmVSZXNpemUo
KTsKICAgICB2b2lkIHZpZXdXaWxsRW5kTGl2ZVJlc2l6ZSgpOwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgko
cmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAgbWVzc2Fn
ZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgU2V0RHJhd3NCYWNrZ3JvdW5kKGJv
b2wgZHJhd3NCYWNrZ3JvdW5kKQogICAgIFNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGJv
b2wgZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQpCiAKKyAgICBTZXRUb3BDb250ZW50SW5zZXQo
ZmxvYXQgY29udGVudEluc2V0KQorCiAgICAgU2V0VW5kZXJsYXlDb2xvcihXZWJDb3JlOjpDb2xv
ciBjb2xvcikKIAogICAgIFZpZXdXaWxsU3RhcnRMaXZlUmVzaXplKCkKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE2NTk4MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE3IEBACisyMDE0LTAzLTIwICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4K
KworICAgICAgICBJbXBsZW1lbnQgY29udGVudEluc2V0IGZvciBNYWMgV2ViS2l0MgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMjczCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHR3byB0ZXN0cyBm
b3IgaGl0LXRlc3Rpbmcgd2l0aCBhIHRvcENvbnRlbnRJbnNldC4KKworICAgICAgICAqIHBsYXRm
b3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1kcmF3aW5n
L2NvbnRlbnQtaW5zZXQtaGl0LXRlc3RpbmctaW4tZnJhbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvY29udGVudC1pbnNldC1o
aXQtdGVzdGluZy1pbi1mcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMt
d2syL3RpbGVkLWRyYXdpbmcvY29udGVudC1pbnNldC1oaXQtdGVzdGluZy5odG1sOiBBZGRlZC4K
KwogMjAxNC0wMy0yMCAgUmFkdSBTdGF2aWxhICA8c3RhdmlsYUBhZG9iZS5jb20+CiAKICAgICAg
ICAgW0NTUyBSZWdpb25zXSBDbGVhbnVwIHNjcm9sbGFibGUgcmVnaW9ucyB0ZXN0cwpJbmRleDog
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1kcmF3aW5nL2NvbnRlbnQtaW5zZXQt
aGl0LXRlc3RpbmctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvdGls
ZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxIEBACitQYXNzIQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjLXdrMi90aWxlZC1kcmF3aW5nL2NvbnRlbnQtaW5zZXQtaGl0LXRlc3RpbmctaW4tZnJhbWUt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIv
dGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWluLWZyYW1lLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvdGlsZWQt
ZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWluLWZyYW1lLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIgQEAKKworUGFzcyEKSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5n
LWluLWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdr
Mi90aWxlZC1kcmF3aW5nL2NvbnRlbnQtaW5zZXQtaGl0LXRlc3RpbmctaW4tZnJhbWUuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2lu
Zy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWluLWZyYW1lLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisgICAgZnVuY3Rpb24g
cnVuVGVzdCgpIHsKKyAgICAgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICAgICAgd2lu
ZG93LmludGVybmFscy5zZXRUb3BDb250ZW50SW5zZXQoMTAwKTsKKyAgICAgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKKyAg
ICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oMjAsIDEyMCk7CisgICAgICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgfQor
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CisgICAgPGlmcmFt
ZSBzcmM9InJlc291cmNlcy9pZnJhbWUtdG8taGl0LXRlc3QuaHRtbCIgc2Nyb2xsaW5nPSJubyIg
ZnJhbWVib3JkZXI9Im5vIiBoZWlnaHQ9IjMwMCIgd2lkdGg9IjYwMCI+PC9pZnJhbWU+CisgICAg
PGRpdiBpZD0icmVzdWx0Ij5UaGlzIHRlc3QgbmVlZHMgdG8gYmUgcnVuIHRocm91Z2ggV2ViS2l0
VGVzdFJ1bm5lci48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1kcmF3
aW5nL2NvbnRlbnQtaW5zZXQtaGl0LXRlc3RpbmcuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10
ZXN0aW5nLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorPGh0bWw+Cis8aGVh
ZD4KKzxzdHlsZT4KKyAgICAjdGFyZ2V0IHsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjpwdXJw
bGU7CisgICAgICAgIHdpZHRoOjI1cHg7CisgICAgICAgIGhlaWdodDoyNXB4OworICAgIH0KKzwv
c3R5bGU+Cis8c2NyaXB0PgorICAgIHZhciBudW1iZXJPZkNsaWNrcyA9IDA7CisKKyAgICBmdW5j
dGlvbiBydW5UZXN0KCkgeworICAgICAgICBpZiAoIXdpbmRvdy5ldmVudFNlbmRlcikKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgICAg
ICB3aW5kb3cuaW50ZXJuYWxzLnNldFRvcENvbnRlbnRJbnNldCgxMDApOworICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsK
KworICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbygxNSwgMTE1KTsKKyAgICAgICAgZXZl
bnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKKwor
ICAgICAgICB2YXIgcmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpOwor
ICAgICAgICBpZiAobnVtYmVyT2ZDbGlja3MgPiAwKQorICAgICAgICAgICAgcmVzdWx0LmlubmVy
SFRNTCA9ICJQYXNzISI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdC5pbm5lckhU
TUwgPSAiRmFpbC4iOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBjbGlja2VkKCkgeworICAg
ICAgICBudW1iZXJPZkNsaWNrcyA9IDE7CisgICAgfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eSBvbmxvYWQ9InJ1blRlc3QoKSI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBvbmNsaWNrPSJjbGlj
a2VkKCkiPjwvZGl2PgorICAgIDxkaXYgaWQ9InJlc3VsdCI+VGhpcyB0ZXN0IG5lZWRzIHRvIGJl
IHJ1biB0aHJvdWdoIFdlYktpdFRlc3RSdW5uZXIuPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227346</attachid>
            <date>2014-03-20 15:27:26 -0700</date>
            <delta_ts>2014-03-20 17:38:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-4.txt</filename>
            <type>text/plain</type>
            <size>38092</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTk4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBACisyMDE0LTAzLTIwICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgY29udGVudEluc2V0
IGZvciBNYWMgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMwMjczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRvcENvbnRlbnRJbnNldCgpLiBJ
ZiBhIHBhZ2UgaGFzIGEgdG9wQ29udGVudEluc2V0KCksIAorICAgICAgICB0aGUgcm9vdCBsYXll
cuKAmXMgcG9zaXRpb24gaXMgYWRqdXN0ZWQgdG8gYWNjb3VudCBmb3IgdGhlIGluc2V0LiBJdCBp
cyBhc3N1bWVkIHRoYXQgCisgICAgICAgIHRoZSBhcmVhIGFjY291bnRlZCBmb3IgYnkgdGhlIGlu
c2V0IGlzIHZpc2libGUgYnV0IG9ic2N1cmVkLCBzbyBzY3JvbGxiYXJzIG5lZWQgdG8gCisgICAg
ICAgIGJlIG1vdmVkIHNvIHRoYXQgdGhleSBvbmx5IGNvdmVyIHRoZSBub24tb2JzY3VyZWQgYXJl
YSwgYW5kIG1vc3QgcGFydHMgb2YgV2ViQ29yZSAKKyAgICAgICAgdGhhdCB3b25kZXIgYWJvdXQg
dmlzaWJsZUNvbnRlbnRTaXplIG9ubHkgY2FyZSBhYm91dCB0aGUgdW5vYnNjdXJlZCBhcmVhLCBz
byB0aGlzIAorICAgICAgICBwYXRjaCBtYWtlcyB0aGF0IHZpc2libGVDb250ZW50UmVjdCByZXR1
cm4gdGhlIHVub2JzY3VyZWRSZWN0LiBGaW5hbGx5IHNpbmNlIHRoaXMgCisgICAgICAgIGlzIGFj
aGlldmVkIGJ5IG1vdmluZyBhIGxheWVy4oCZcyBwb3NpdGlvbiwgdGhlIHRvcENvbnRlbnRJbnNl
dCgpIGFsc28gbmVlZHMgdG8gYmUgCisgICAgICAgIGZhY3RvcmVkIGludG8gdmFyaW91cyBmdW5j
dGlvbnMgdGhhdCBhcmUgdXNlZCB0byBjb252ZXJ0IGJldHdlZW4gY29vcmRpbmF0ZSAKKyAgICAg
ICAgc3BhY2VzLiAKKworICAgICAgICBSZXR1cm4gUGFnZTo6dG9wQ29udGVudEluc2V0KCkgaWYg
dGhpcyBpcyB0aGUgbWFpbiBmcmFtZS4KKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRvcENvbnRlbnRJbnNldCk6CisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuaDoKKworICAgICAgICBDYWNoZSB0aGUgaW5zZXQgb24gUGFnZS4KKyAg
ICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6UGFnZSk6Cisg
ICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp0b3BDb250ZW50
SW5zZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0VG9wQ29udGVudEluc2V0KToKKwor
ICAgICAgICB1bm9ic2N1cmVkQ29udGVudFJlY3QoKSB1c2VkIHRvIHVuY29uZGl0aW9uYWxseSBy
ZXR1cm4gdmlzaWJsZUNvbnRlbnRSZWN0KCkgb24gCisgICAgICAgIG5vbi1pT1MgcGxhdGZvcm1z
LiBOb3cgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3Igc29tZSB0ZWNobmljYWxseSB2aXNpYmxlIGNv
bnRlbnQgdG8gCisgICAgICAgIGJlIG9ic2N1cmVkLCB0aGlzIGNvZGUgbmVlZGVkIHRvIGJlIHJl
LXdvcmtlZCBhIGJpdCB0byBtYWtlIHNvbWUgbW9yZSBzZW5zZS4gCisgICAgICAgIHZpc2libGVD
b250ZW50UmVjdCgpIG5vdyByZXByZXNlbnRzIHRoYXQgdmlzaWJsZSBjb250ZW50IHRoYXQgaXMg
Y29tcGxldGVseSAKKyAgICAgICAgdW5vYnNjdXJlZCwgc28gaXQgc2hvdWxkIGNhbGwgaW50byB1
bm9ic2N1cmVkQ29udGVudFJlY3QoKSByYXRoZXIgdGhhbiB0aGUgb3RoZXIgCisgICAgICAgIHdh
eSBhcm91bmQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3Ojp1bm9ic2N1cmVkQ29udGVudFJlY3QpOgorCisgICAgICAgIHVu
c2NhbGVkVG90YWxWaXNpYmxlQ29udGVudFNpemUoKSBpbmNsdWRlcyB0aGUgc2l6ZSBvZiBhbGwg
Y29udGVudCB0aGF0IG1pZ2h0IGJlIAorICAgICAgICB2aXNpYmxlLiBTb21lIG9mIHRoaXMgY29u
dGVudCBtaWdodCBiZSBvYnNjdXJlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnVu
c2NhbGVkVG90YWxWaXNpYmxlQ29udGVudFNpemUpOgorCisgICAgICAgIE1vc3Qgb2YgdGhlIHRp
bWUsIHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgY29udGVudCB0aGF0IGlzIEZVTExZIHZpc2libGUu
IFRoYXQgaXMgCisgICAgICAgIHdoYXQgeW91IGdldCBmcm9tIHVuc2NhbGVkVW5vYnNjdXJlZFZp
c2libGVDb250ZW50U2l6ZSgpLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dW5zY2Fs
ZWRVbm9ic2N1cmVkVmlzaWJsZUNvbnRlbnRTaXplKToKKworICAgICAgICBVc2UgdGhlIHVub2Jz
Y3VyZWQgc2l6ZSBmb3IgdGhlc2UgY29tcHV0YXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6bGF5b3V0U2l6ZSk6CisKKyAgICAgICAgRmFjdG9yIGluIHRoZSB0b3BDb250
ZW50SW5zZXQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbE9mZnNldFJl
bGF0aXZlVG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxQ
b3NpdGlvblJlbGF0aXZlVG9Eb2N1bWVudCk6CisKKyAgICAgICAgVGhlIHNjcm9sbGJhcnMgc2hv
dWxkIGJlIHBvc2l0aW9uZWQgdG8gY292ZXIgdGhlIG5vbi1vYnNjdXJlZCBjb250ZW50IG9ubHku
IAorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6CisKKyAg
ICAgICAgQWdhaW4sIGZhY3RvciB0aGUgdG9wQ29udGVudEluc2V0KCkgaW50byB0aGVzZSBjb252
ZXJzaW9ucyBzaW5jZSB0aGUgcm9vdCBsYXllcuKAmXMgCisgICAgICAgIHBvc2l0aW9uIGhhcyBi
ZWVuIGFkanVzdGVkIHRvIGFjY291bnQgZm9yIGl0LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Vmlldzo6Y29udGVudHNUb1Jvb3RWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OmNvbnRlbnRzVG9XaW5kb3cpOgorCisgICAgICAgICBKdXN0IGxpa2UgdGhlIHNjcm9sbGJhcnMs
IHRoZSBzY3JvbGwgY29ybmVyIG11c3QgYmUgbW92ZWQgdGhlIGFjY291bnQgZm9yIHRoZSAKKyAg
ICAgICAgaW5zZXQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxDb3JuZXJS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxWaWV3Ojp0b3BDb250ZW50SW5zZXQpOgorCisgICAgICAgIFJlbmRlckxheWVyQ29t
cG9zaXRvciBjYXJlcyBhYm91dCB1bnNjYWxlZFRvdGFsVmlzaWJsZUNvbnRlbnRTaXplKCkuIEl0
IGRvZXMgbm90IAorICAgICAgICBjYXJlIGlmIHNvbWUgb2YgdGhhdCBjb250ZW50IGlzIG9ic2N1
cmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZVZpZXdEaWRDaGFuZ2VT
aXplKToKKworICAgICAgICBNb3ZlIHRoZSByb290IGxheWVy4oCZcyBwb3NpdGlvbiBiYXNlZCBv
biB0aGUgY29udGVudEluc2V0LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVSb290TGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmVuc3VyZVJvb3RMYXllcik6CisKKyAgICAgICAgQWxsb3cgc2V0dGlu
ZyBjb250ZW50SW5zZXQgdmlhIEludGVybmFscyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICAg
ICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6
OnNldFRvcENvbnRlbnRJbnNldCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAg
ICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTQtMDMtMjAgIEJyaWFuIEJ1cmcg
IDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIFJlcGxheTogZml4IHNvbWUgb3ZlcnNp
Z2h0cyBpbiB0aGUgcmVwbGF5IGJhY2tlbmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZp
c2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBj
b3B5KQpAQCAtMTAzOSw2ICsxMDM5LDcgQEAgX19aTjdXZWJDb3JlNFBhZ2UxNnNldENhblN0YXJ0
TWVkaWFFYgogX19aTjdXZWJDb3JlNFBhZ2UxNnNldERlZmVyc0xvYWRpbmdFYgogX19aTjdXZWJD
b3JlNFBhZ2UxOHJlbW92ZVNjaGVkdWxlUGFpckVOM1dURjEwUGFzc1JlZlB0cklOUzFfMTJTY2hl
ZHVsZVBhaXJFRUUKIF9fWk43V2ViQ29yZTRQYWdlMThzZXRQYWdlU2NhbGVGYWN0b3JFZlJLTlNf
OEludFBvaW50RQorX19aTjdXZWJDb3JlNFBhZ2UxOHNldFRvcENvbnRlbnRJbnNldEVmCiBfX1pO
N1dlYkNvcmU0UGFnZTE5YWRkTGF5b3V0TWlsZXN0b25lc0VqCiBfX1pON1dlYkNvcmU0UGFnZTIw
c2Nyb2xsaW5nQ29vcmRpbmF0b3JFdgogX19aTjdXZWJDb3JlNFBhZ2UyMHNldERldmljZVNjYWxl
RmFjdG9yRWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDE2NTk3
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTI5LDYgKzkyOSwxNSBAQCB2b2lkIEZyYW1lVmlldzo6c2V0Rm9vdGVySGVpZ2h0KGludCBm
b290CiAgICAgICAgIHJlbmRlclZpZXctPnNldE5lZWRzTGF5b3V0KCk7CiB9CiAKK2Zsb2F0IEZy
YW1lVmlldzo6dG9wQ29udGVudEluc2V0KCkgY29uc3QKK3sKKyAgICBpZiAoIWZyYW1lKCkuaXNN
YWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgUGFnZSogcGFnZSA9IGZy
YW1lKCkucGFnZSgpOworICAgIHJldHVybiBwYWdlID8gcGFnZS0+dG9wQ29udGVudEluc2V0KCkg
OiAwOworfQorICAgIAogYm9vbCBGcmFtZVZpZXc6Omhhc0NvbXBvc2l0ZWRDb250ZW50KCkgY29u
c3QKIHsKICAgICBpZiAoUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRoaXMtPnJlbmRlclZpZXco
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMTY1OTcxKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNDMzLDYgKzQz
Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBmb290ZXJIZWlnaHQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2Zvb3RlckhlaWdodDsgfQogICAgIHZvaWQgc2V0Rm9vdGVySGVpZ2h0
KGludCk7CiAKKyAgICB2aXJ0dWFsIGZsb2F0IHRvcENvbnRlbnRJbnNldCgpIGNvbnN0IG92ZXJy
aWRlOworCiAgICAgdmlydHVhbCB2b2lkIHdpbGxTdGFydExpdmVSZXNpemUoKSBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKSBvdmVycmlkZTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDcgQEAgUGFnZTo6UGFnZShQ
YWdlQ2xpZW50cyYgcGFnZUNsaWVudHMpCiAgICAgLCBtX21lZGlhVm9sdW1lKDEpCiAgICAgLCBt
X3BhZ2VTY2FsZUZhY3RvcigxKQogICAgICwgbV9kZXZpY2VTY2FsZUZhY3RvcigxKQorICAgICwg
bV90b3BDb250ZW50SW5zZXQoMCkKICAgICAsIG1fc3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25z
KGZhbHNlKQogICAgICwgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQoZmFsc2UpCiAgICAgLCBtX3Vz
ZXJTdHlsZVNoZWV0TW9kaWZpY2F0aW9uVGltZSgwKQpAQCAtNzQ4LDcgKzc0OSwxNyBAQCB2b2lk
IFBhZ2U6OnNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjCiAgICAgcGFnZUNhY2hlKCktPm1h
cmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyh0aGlzKTsKICAgICBHcmFwaGljc0NvbnRleHQ6OnVw
ZGF0ZURvY3VtZW50TWFya2VyUmVzb3VyY2VzKCk7CiB9Ci0KKyAgICAKK3ZvaWQgUGFnZTo6c2V0
VG9wQ29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJbnNldCkKK3sKKyAgICBpZiAobV90b3BDb250
ZW50SW5zZXQgPT0gY29udGVudEluc2V0KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV90
b3BDb250ZW50SW5zZXQgPSBjb250ZW50SW5zZXQ7CisgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRl
clZpZXcgPSBtYWluRnJhbWUoKS5jb250ZW50UmVuZGVyZXIoKSkKKyAgICAgICAgcmVuZGVyVmll
dy0+c2V0TmVlZHNMYXlvdXQoKTsKK30KKyAgICAKIHZvaWQgUGFnZTo6c2V0U2hvdWxkU3VwcHJl
c3NTY3JvbGxiYXJBbmltYXRpb25zKGJvb2wgc3VwcHJlc3NBbmltYXRpb25zKQogewogICAgIGlm
IChzdXBwcmVzc0FuaW1hdGlvbnMgPT0gbV9zdXBwcmVzc1Njcm9sbGJhckFuaW1hdGlvbnMpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuaAkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3OCw2ICsyNzgsOSBAQCBwdWJsaWM6CiAgICAg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2RldmljZVNjYWxlRmFj
dG9yOyB9CiAgICAgdm9pZCBzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7CiAKKyAgICBmbG9h
dCB0b3BDb250ZW50SW5zZXQoKSBjb25zdCB7IHJldHVybiBtX3RvcENvbnRlbnRJbnNldDsgfQor
ICAgIHZvaWQgc2V0VG9wQ29udGVudEluc2V0KGZsb2F0KTsKKwogICAgIGJvb2wgc2hvdWxkU3Vw
cHJlc3NTY3JvbGxiYXJBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9zdXBwcmVzc1Njcm9s
bGJhckFuaW1hdGlvbnM7IH0KICAgICB2b2lkIHNldFNob3VsZFN1cHByZXNzU2Nyb2xsYmFyQW5p
bWF0aW9ucyhib29sIHN1cHByZXNzQW5pbWF0aW9ucyk7CiAgICAgdm9pZCBsb2NrQWxsT3Zlcmxh
eVNjcm9sbGJhcnNUb0hpZGRlbihib29sIGxvY2tPdmVybGF5U2Nyb2xsYmFycyk7CkBAIC00ODks
NiArNDkyLDggQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX3BhZ2VTY2FsZUZhY3RvcjsKICAgICBm
bG9hdCBtX2RldmljZVNjYWxlRmFjdG9yOwogCisgICAgZmxvYXQgbV90b3BDb250ZW50SW5zZXQ7
CisKICAgICBib29sIG1fc3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25zOwogCiAgICAgUGFnaW5h
dGlvbiBtX3BhZ2luYXRpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxW
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3
LmNwcAkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw4ICsyMzUsMTcgQEAgdm9pZCBTY3JvbGxW
aWV3OjpzZXREZWxlZ2F0ZXNTY3JvbGxpbmcoYgogICAgIG1fZGVsZWdhdGVzU2Nyb2xsaW5nID0g
ZGVsZWdhdGVzU2Nyb2xsaW5nOwogICAgIGRlbGVnYXRlc1Njcm9sbGluZ0RpZENoYW5nZSgpOwog
fQotCi1JbnRTaXplIFNjcm9sbFZpZXc6OnVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKFZpc2li
bGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24pIGNvbnN0
CisgICAgCisjaWYgIVBMQVRGT1JNKElPUykKK0ludFJlY3QgU2Nyb2xsVmlldzo6dW5vYnNjdXJl
ZENvbnRlbnRSZWN0KFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxi
YXJJbmNsdXNpb24pIGNvbnN0Cit7CisgICAgRmxvYXRTaXplIHZpc2libGVDb250ZW50U2l6ZSA9
IHVuc2NhbGVkVW5vYnNjdXJlZFZpc2libGVDb250ZW50U2l6ZShzY3JvbGxiYXJJbmNsdXNpb24p
OworICAgIHZpc2libGVDb250ZW50U2l6ZS5zY2FsZSgxIC8gdmlzaWJsZUNvbnRlbnRTY2FsZUZh
Y3RvcigpKTsKKyAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludChtX3Njcm9sbE9mZnNldCksIGV4
cGFuZGVkSW50U2l6ZSh2aXNpYmxlQ29udGVudFNpemUpKTsKK30KKyNlbmRpZgorICAgIAorSW50
U2l6ZSBTY3JvbGxWaWV3Ojp1bnNjYWxlZFRvdGFsVmlzaWJsZUNvbnRlbnRTaXplKFZpc2libGVD
b250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24pIGNvbnN0CiB7
CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVZpc2li
bGVDb250ZW50U2l6ZShzY3JvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpOwpA
QCAtMjU4LDkgKzI2NywyNSBAQCBJbnRTaXplIFNjcm9sbFZpZXc6OnVuc2NhbGVkVmlzaWJsZUNv
bnRlCiAKICAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0
aCwgaGVpZ2h0KCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KS5leHBhbmRlZFRvKEludFNp
emUoKSk7CiB9CisgICAgCitJbnRTaXplIFNjcm9sbFZpZXc6OnVuc2NhbGVkVW5vYnNjdXJlZFZp
c2libGVDb250ZW50U2l6ZShWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Ny
b2xsYmFySW5jbHVzaW9uKSBjb25zdAoreworICAgIEludFNpemUgdmlzaWJsZUNvbnRlbnRTaXpl
ID0gdW5zY2FsZWRUb3RhbFZpc2libGVDb250ZW50U2l6ZShzY3JvbGxiYXJJbmNsdXNpb24pOwor
ICAgIAorICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm4gdmlzaWJsZUNv
bnRlbnRTaXplOworCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgaWYgKCFtX2Zp
eGVkVmlzaWJsZUNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHZpc2libGVD
b250ZW50U2l6ZTsKKyNlbmRpZgorCisgICAgdmlzaWJsZUNvbnRlbnRTaXplLnNldEhlaWdodCh2
aXNpYmxlQ29udGVudFNpemUuaGVpZ2h0KCkgLSB0b3BDb250ZW50SW5zZXQoKSk7CisgICAgcmV0
dXJuIHZpc2libGVDb250ZW50U2l6ZTsKK30KIAogI2lmICFQTEFURk9STShHVEspCi1JbnRSZWN0
IFNjcm9sbFZpZXc6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVj
dEluY2x1ZGVzU2Nyb2xsYmFycyBzY29sbGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRlbnRSZWN0
QmVoYXZpb3IgdmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0CitJbnRSZWN0IFNjcm9s
bFZpZXc6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1
ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2
aW9yIHZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAogewogI2lmIFBMQVRGT1JNKElP
UykKICAgICBpZiAodmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IgPT0gTGVnYWN5SU9TRG9jdW1l
bnRWaWV3UmVjdCkgewpAQCAtMjc1LDIyICszMDAsMjAgQEAgSW50UmVjdCBTY3JvbGxWaWV3Ojp2
aXNpYmxlQ29udGVudFJlY3RJbgogI2VuZGlmCiAKICAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkK
LSAgICAgICAgcmV0dXJuIHBsYXRmb3JtVmlzaWJsZUNvbnRlbnRSZWN0KHNjb2xsYmFySW5jbHVz
aW9uID09IEluY2x1ZGVTY3JvbGxiYXJzKTsKKyAgICAgICAgcmV0dXJuIHBsYXRmb3JtVmlzaWJs
ZUNvbnRlbnRSZWN0KHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycyk7CiAK
ICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICBpZiAoIW1fZml4ZWRWaXNpYmxlQ29u
dGVudFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9maXhlZFZpc2libGVDb250ZW50
UmVjdDsKICNlbmRpZgogCi0gICAgRmxvYXRTaXplIHZpc2libGVDb250ZW50U2l6ZSA9IHVuc2Nh
bGVkVmlzaWJsZUNvbnRlbnRTaXplKHNjb2xsYmFySW5jbHVzaW9uKTsKLSAgICB2aXNpYmxlQ29u
dGVudFNpemUuc2NhbGUoMSAvIHZpc2libGVDb250ZW50U2NhbGVGYWN0b3IoKSk7Ci0gICAgcmV0
dXJuIEludFJlY3QoSW50UG9pbnQobV9zY3JvbGxPZmZzZXQpLCBleHBhbmRlZEludFNpemUodmlz
aWJsZUNvbnRlbnRTaXplKSk7CisgICAgcmV0dXJuIHVub2JzY3VyZWRDb250ZW50UmVjdCgpOwog
fQogI2VuZGlmCiAKIEludFNpemUgU2Nyb2xsVmlldzo6bGF5b3V0U2l6ZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fZml4ZWRMYXlvdXRTaXplLmlzRW1wdHkoKSB8fCAhbV91c2VGaXhlZExheW91
dCA/IHVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKEV4Y2x1ZGVTY3JvbGxiYXJzKSA6IG1fZml4
ZWRMYXlvdXRTaXplOworICAgIHJldHVybiBtX2ZpeGVkTGF5b3V0U2l6ZS5pc0VtcHR5KCkgfHwg
IW1fdXNlRml4ZWRMYXlvdXQgPyB1bnNjYWxlZFVub2JzY3VyZWRWaXNpYmxlQ29udGVudFNpemUo
RXhjbHVkZVNjcm9sbGJhcnMpIDogbV9maXhlZExheW91dFNpemU7CiB9CiAKIEludFNpemUgU2Ny
b2xsVmlldzo6Zml4ZWRMYXlvdXRTaXplKCkgY29uc3QKQEAgLTM2OSwxMyArMzkyLDEzIEBAIElu
dFBvaW50IFNjcm9sbFZpZXc6OmFkanVzdFNjcm9sbFBvc2l0aW8KIEludFNpemUgU2Nyb2xsVmll
dzo6c2Nyb2xsT2Zmc2V0UmVsYXRpdmVUb0RvY3VtZW50KCkgY29uc3QKIHsKICAgICBJbnRTaXpl
IHNjcm9sbE9mZnNldCA9IHRoaXMtPnNjcm9sbE9mZnNldCgpOwotICAgIHJldHVybiBJbnRTaXpl
KHNjcm9sbE9mZnNldC53aWR0aCgpLCBzY3JvbGxPZmZzZXQuaGVpZ2h0KCkgLSBoZWFkZXJIZWln
aHQoKSk7CisgICAgcmV0dXJuIEludFNpemUoc2Nyb2xsT2Zmc2V0LndpZHRoKCksIHNjcm9sbE9m
ZnNldC5oZWlnaHQoKSAtIGhlYWRlckhlaWdodCgpIC0gdG9wQ29udGVudEluc2V0KCkpOwogfQog
CiBJbnRQb2ludCBTY3JvbGxWaWV3OjpzY3JvbGxQb3NpdGlvblJlbGF0aXZlVG9Eb2N1bWVudCgp
IGNvbnN0CiB7CiAgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSB0aGlzLT5zY3JvbGxQb3Np
dGlvbigpOwotICAgIHJldHVybiBJbnRQb2ludChzY3JvbGxQb3NpdGlvbi54KCksIHNjcm9sbFBv
c2l0aW9uLnkoKSAtIGhlYWRlckhlaWdodCgpKTsKKyAgICByZXR1cm4gSW50UG9pbnQoc2Nyb2xs
UG9zaXRpb24ueCgpLCBzY3JvbGxQb3NpdGlvbi55KCkgLSBoZWFkZXJIZWlnaHQoKSAtIHRvcENv
bnRlbnRJbnNldCgpKTsKIH0KIAogaW50IFNjcm9sbFZpZXc6OnNjcm9sbFNpemUoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0CkBAIC02NDIsOSArNjY1LDkgQEAgdm9pZCBT
Y3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IAogICAgICAgICBpbnQgcGFnZVN0ZXAg
PSBzdGQ6Om1heChzdGQ6Om1heDxpbnQ+KGNsaWVudFdpZHRoICogU2Nyb2xsYmFyOjptaW5GcmFj
dGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgY2xpZW50V2lkdGggLSBTY3JvbGxiYXI6Om1heE92ZXJs
YXBCZXR3ZWVuUGFnZXMoKSksIDEpOwogICAgICAgICBJbnRSZWN0IG9sZFJlY3QobV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7CiAgICAgICAgIEludFJlY3QgaEJhclJlY3QoMCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCkgLSAobV92ZXJ0aWNh
bFNjcm9sbGJhciA/IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCkgOiAwKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOworICAgICAg
ICAgICAgaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpLAorICAgICAg
ICAgICAgd2lkdGgoKSAtIChtX3ZlcnRpY2FsU2Nyb2xsYmFyID8gbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+d2lkdGgoKSA6IDApLAorICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWln
aHQoKSk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KGhCYXJS
ZWN0KTsKICAgICAgICAgaWYgKCFtX3Njcm9sbGJhcnNTdXBwcmVzc2VkICYmIG9sZFJlY3QgIT0g
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSkKICAgICAgICAgICAgIG1faG9yaXpv
bnRhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwpAQCAtNjYzLDkgKzY4Niw5IEBAIHZvaWQgU2Ny
b2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAgaW50IHBhZ2VTdGVwID0g
c3RkOjptYXgoc3RkOjptYXg8aW50PihjbGllbnRIZWlnaHQgKiBTY3JvbGxiYXI6Om1pbkZyYWN0
aW9uVG9TdGVwV2hlblBhZ2luZygpLCBjbGllbnRIZWlnaHQgLSBTY3JvbGxiYXI6Om1heE92ZXJs
YXBCZXR3ZWVuUGFnZXMoKSksIDEpOwogICAgICAgICBJbnRSZWN0IG9sZFJlY3QobV92ZXJ0aWNh
bFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOwogICAgICAgICBJbnRSZWN0IHZCYXJSZWN0KHdpZHRo
KCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPndp
ZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSAobV9ob3Jpem9udGFs
U2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6IDApKTsKKyAgICAg
ICAgICAgIHRvcENvbnRlbnRJbnNldCgpLAorICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+d2lkdGgoKSwKKyAgICAgICAgICAgIGhlaWdodCgpIC0gdG9wQ29udGVudEluc2V0KCkgLSAo
bV9ob3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6
IDApKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KHZCYXJSZWN0
KTsKICAgICAgICAgaWYgKCFtX3Njcm9sbGJhcnNTdXBwcmVzc2VkICYmIG9sZFJlY3QgIT0gbV92
ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpCiAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT5pbnZhbGlkYXRlKCk7CkBAIC03OTIsNyArODE1LDcgQEAgSW50UG9pbnQgU2Nyb2xs
Vmlldzo6Y29udGVudHNUb1Jvb3RWaWV3KAogICAgIGlmIChkZWxlZ2F0ZXNTY3JvbGxpbmcoKSkK
ICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1Jvb3RWaWV3KGNvbnRlbnRzUG9pbnQpOwogCi0gICAg
SW50UG9pbnQgdmlld1BvaW50ID0gY29udGVudHNQb2ludCArIEludFNpemUoMCwgaGVhZGVySGVp
Z2h0KCkpIC0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29udGVu
dHNQb2ludCArIEludFNpemUoMCwgaGVhZGVySGVpZ2h0KCkgKyB0b3BDb250ZW50SW5zZXQoKSkg
LSBzY3JvbGxPZmZzZXQoKTsKICAgICByZXR1cm4gY29udmVydFRvUm9vdFZpZXcodmlld1BvaW50
KTsgIAogfQogCkBAIC04MTIsNyArODM1LDcgQEAgSW50UmVjdCBTY3JvbGxWaWV3Ojpjb250ZW50
c1RvUm9vdFZpZXcoYwogICAgICAgICByZXR1cm4gY29udmVydFRvUm9vdFZpZXcoY29udGVudHNS
ZWN0KTsKIAogICAgIEludFJlY3Qgdmlld1JlY3QgPSBjb250ZW50c1JlY3Q7Ci0gICAgdmlld1Jl
Y3QubW92ZSgtc2Nyb2xsT2Zmc2V0KCkgKyBJbnRTaXplKDAsIGhlYWRlckhlaWdodCgpKSk7Cisg
ICAgdmlld1JlY3QubW92ZSgtc2Nyb2xsT2Zmc2V0KCkgKyBJbnRTaXplKDAsIGhlYWRlckhlaWdo
dCgpICsgdG9wQ29udGVudEluc2V0KCkpKTsKICAgICByZXR1cm4gY29udmVydFRvUm9vdFZpZXco
dmlld1JlY3QpOwogfQogCkBAIC04MzksNyArODYyLDcgQEAgSW50UG9pbnQgU2Nyb2xsVmlldzo6
Y29udGVudHNUb1dpbmRvdyhjbwogICAgIGlmIChkZWxlZ2F0ZXNTY3JvbGxpbmcoKSkKICAgICAg
ICAgcmV0dXJuIGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29udGVudHNQb2ludCk7CiAKLSAg
ICBJbnRQb2ludCB2aWV3UG9pbnQgPSBjb250ZW50c1BvaW50ICsgSW50U2l6ZSgwLCBoZWFkZXJI
ZWlnaHQoKSkgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICBJbnRQb2ludCB2aWV3UG9pbnQgPSBjb250
ZW50c1BvaW50ICsgSW50U2l6ZSgwLCBoZWFkZXJIZWlnaHQoKSArIHRvcENvbnRlbnRJbnNldCgp
KSAtIHNjcm9sbE9mZnNldCgpOwogICAgIHJldHVybiBjb252ZXJ0VG9Db250YWluaW5nV2luZG93
KHZpZXdQb2ludCk7ICAKIH0KIApAQCAtODU5LDcgKzg4Miw3IEBAIEludFJlY3QgU2Nyb2xsVmll
dzo6Y29udGVudHNUb1dpbmRvdyhjb24KICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbnRhaW5p
bmdXaW5kb3coY29udGVudHNSZWN0KTsKIAogICAgIEludFJlY3Qgdmlld1JlY3QgPSBjb250ZW50
c1JlY3Q7Ci0gICAgdmlld1JlY3QubW92ZSgtc2Nyb2xsT2Zmc2V0KCkgKyBJbnRTaXplKDAsIGhl
YWRlckhlaWdodCgpKSk7CisgICAgdmlld1JlY3QubW92ZSgtc2Nyb2xsT2Zmc2V0KCkgKyBJbnRT
aXplKDAsIGhlYWRlckhlaWdodCgpICsgdG9wQ29udGVudEluc2V0KCkpKTsKICAgICByZXR1cm4g
Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyh2aWV3UmVjdCk7CiB9CiAKQEAgLTEwNTYsMjAgKzEw
NzksMjIgQEAgSW50UmVjdCBTY3JvbGxWaWV3OjpzY3JvbGxDb3JuZXJSZWN0KCkgYwogICAgIGlm
IChoYXNPdmVybGF5U2Nyb2xsYmFycygpKQogICAgICAgICByZXR1cm4gY29ybmVyUmVjdDsKIAor
ICAgIGludCBoZWlnaHRUcmFja2VkQnlTY3JvbGxiYXIgPSBoZWlnaHQoKSAtIHRvcENvbnRlbnRJ
bnNldCgpOworCiAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiB3aWR0aCgpIC0gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT53aWR0aCgpID4gMCkgewogICAgICAgICBjb3JuZXJSZWN0LnVu
aXRlKEludFJlY3QobV9ob3Jpem9udGFsU2Nyb2xsYmFyLT53aWR0aCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhl
aWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKSAtIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGhlaWdo
dCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwKKyAgICAgICAgICAgIHdpZHRo
KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPndpZHRoKCksCisgICAgICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXItPmhlaWdodCgpKSk7CiAgICAgfQogCi0gICAgaWYgKG1fdmVydGljYWxT
Y3JvbGxiYXIgJiYgaGVpZ2h0KCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5oZWlnaHQoKSA+IDAp
IHsKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiBoZWlnaHRUcmFja2VkQnlTY3JvbGxi
YXIgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5oZWlnaHQoKSA+IDApIHsKICAgICAgICAgY29ybmVy
UmVjdC51bml0ZShJbnRSZWN0KHdpZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+
aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0
KCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5oZWlnaHQoKSkpOworICAgICAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCkgKyB0b3BDb250ZW50SW5zZXQoKSwKKyAgICAgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksCisgICAgICAgICAgICBoZWlnaHRUcmFja2Vk
QnlTY3JvbGxiYXIgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5oZWlnaHQoKSkpOwogICAgIH0KLSAg
ICAKKwogICAgIHJldHVybiBjb3JuZXJSZWN0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsVmlldy5oCShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw5ICsxNTMsMTEgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0Q2FuQmxpdE9uU2Nyb2xsKGJvb2wpOwogICAgIGJvb2wgY2FuQmxp
dE9uU2Nyb2xsKCkgY29uc3Q7CiAKLSAgICAvLyBUaGUgdmlzaWJsZSBjb250ZW50IHJlY3QgaGFz
IGEgbG9jYXRpb24gdGhhdCBpcyB0aGUgc2Nyb2xsZWQgb2Zmc2V0IG9mIHRoZSBkb2N1bWVudC4g
VGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIHRoZSB2aWV3cG9ydCB3aWR0aAotICAgIC8vIGFuZCBo
ZWlnaHQuIEJ5IGRlZmF1bHQgdGhlIHNjcm9sbGJhcnMgdGhlbXNlbHZlcyBhcmUgZXhjbHVkZWQg
ZnJvbSB0aGlzIHJlY3RhbmdsZSwgYnV0IGFuIG9wdGlvbmFsIGJvb2xlYW4gYXJndW1lbnQgYWxs
b3dzIHRoZW0gdG8gYmUKLSAgICAvLyBpbmNsdWRlZC4KKyAgICB2aXJ0dWFsIGZsb2F0IHRvcENv
bnRlbnRJbnNldCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIC8vIFRoZSB2aXNpYmxlIGNv
bnRlbnQgcmVjdCBoYXMgYSBsb2NhdGlvbiB0aGF0IGlzIHRoZSBzY3JvbGxlZCBvZmZzZXQgb2Yg
dGhlIGRvY3VtZW50LiBUaGUgd2lkdGggYW5kIGhlaWdodCBhcmUgdGhlIHVub2JzY3VyZWQgdmll
d3BvcnQKKyAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0LiBCeSBkZWZhdWx0IHRoZSBzY3JvbGxiYXJz
IHRoZW1zZWx2ZXMgYXJlIGV4Y2x1ZGVkIGZyb20gdGhpcyByZWN0YW5nbGUsIGJ1dCBhbiBvcHRp
b25hbCBib29sZWFuIGFyZ3VtZW50IGFsbG93cyB0aGVtCisgICAgLy8gdG8gYmUgaW5jbHVkZWQu
CiAgICAgLy8gSW4gdGhlIHNpdHVhdGlvbiB0aGUgY2xpZW50IGlzIHJlc3BvbnNpYmxlIGZvciB0
aGUgc2Nyb2xsaW5nIChpZS4gd2l0aCBhIHRpbGVkIGJhY2tpbmcgc3RvcmUpIGl0IGlzIHBvc3Np
YmxlIHRvIHVzZQogICAgIC8vIHRoZSBzZXRGaXhlZFZpc2libGVDb250ZW50UmVjdCBpbnN0ZWFk
IGZvciB0aGUgbWFpbmZyYW1lLCB0aG91Z2ggdGhpcyBtdXN0IGJlIHVwZGF0ZWQgbWFudWFsbHks
IGUuZyBqdXN0IGJlZm9yZSByZXN1bWluZyB0aGUgcGFnZQogICAgIC8vIHdoaWNoIHVzdWFsbHkg
d2lsbCBoYXBwZW4gd2hlbiBwYW5uaW5nLCBwaW5jaGluZyBhbmQgcm90YXRpb24gZW5kcywgb3Ig
d2hlbiBzY2FsZSBvciBwb3NpdGlvbiBhcmUgY2hhbmdlZCBtYW51YWxseS4KQEAgLTE3Myw3ICsx
NzUsNyBAQCBwdWJsaWM6CiAgICAgSW50UmVjdCB1bm9ic2N1cmVkQ29udGVudFJlY3QoKSBjb25z
dDsKICAgICBJbnRSZWN0IHVub2JzY3VyZWRDb250ZW50UmVjdEluY2x1ZGluZ1Njcm9sbGJhcnMo
KSBjb25zdCB7IHJldHVybiB1bm9ic2N1cmVkQ29udGVudFJlY3QoKTsgfQogI2Vsc2UKLSAgICBJ
bnRSZWN0IHVub2JzY3VyZWRDb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIHZpc2libGVDb250
ZW50UmVjdCgpOyB9CisgICAgSW50UmVjdCB1bm9ic2N1cmVkQ29udGVudFJlY3QoVmlzaWJsZUNv
bnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzID0gRXhjbHVkZVNjcm9sbGJhcnMpIGNvbnN0Owog
ICAgIEludFJlY3QgdW5vYnNjdXJlZENvbnRlbnRSZWN0SW5jbHVkaW5nU2Nyb2xsYmFycygpIGNv
bnN0IHsgcmV0dXJuIHZpc2libGVDb250ZW50UmVjdEluY2x1ZGluZ1Njcm9sbGJhcnMoKTsgfQog
I2VuZGlmCiAKQEAgLTE4OSwxMSArMTkxLDEzIEBAIHB1YmxpYzoKICAgICBUaWxlQ2FjaGUqIHRp
bGVDYWNoZSgpOwogI2VuZGlmCiAKLSAgICAvLyB2aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCkg
aXMgY29tcHV0ZWQgZnJvbSB1bnNjYWxlZFZpc2libGVDb250ZW50U2l6ZSgpIGRpdmlkZWQgYnkg
dGhlIHZhbHVlIG9mIHZpc2libGVDb250ZW50U2NhbGVGYWN0b3IuCisgICAgLy8gdmlzaWJsZUNv
bnRlbnRSZWN0KCkuc2l6ZSgpIGlzIGNvbXB1dGVkIGZyb20gdW5zY2FsZWRVbm9ic2N1cmVkVmlz
aWJsZUNvbnRlbnRTaXplKCkgZGl2aWRlZCBieSB0aGUgdmFsdWUgb2YgdmlzaWJsZUNvbnRlbnRT
Y2FsZUZhY3Rvci4KICAgICAvLyB2aXNpYmxlQ29udGVudFNjYWxlRmFjdG9yIGlzIHVzdWFsbHkg
MSwgZXhjZXB0IHdoZW4gdGhlIHNldHRpbmcgZGVsZWdhdGVzUGFnZVNjYWxpbmcgaXMgdHJ1ZSBh
bmQgdGhlCiAgICAgLy8gU2Nyb2xsVmlldyBpcyB0aGUgbWFpbiBmcmFtZTsgaW4gdGhhdCBjYXNl
LCB2aXNpYmxlQ29udGVudFNjYWxlRmFjdG9yIGlzIGVxdWFsIHRvIHRoZSBwYWdlJ3MgcGFnZVNj
YWxlRmFjdG9yLgotICAgIC8vIFBvcnRzIHRoYXQgZG9uJ3QgdXNlIHBhZ2VTY2FsZUZhY3RvciBj
YW4gdHJlYXQgdW5zY2FsZWRWaXNpYmxlQ29udGVudFNpemUgYW5kIHZpc2libGVDb250ZW50UmVj
dCgpLnNpemUoKSBhcyBlcXVpdmFsZW50LgotICAgIEludFNpemUgdW5zY2FsZWRWaXNpYmxlQ29u
dGVudFNpemUoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzID0gRXhjbHVkZVNj
cm9sbGJhcnMpIGNvbnN0OworICAgIC8vIFBvcnRzIHRoYXQgZG9uJ3QgdXNlIHBhZ2VTY2FsZUZh
Y3RvciBjYW4gdHJlYXQgdW5zY2FsZWRVbm9ic2N1cmVkVmlzaWJsZUNvbnRlbnRTaXplIGFuZCB2
aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCkgYXMgZXF1aXZhbGVudC4KKyAgICAvLyB1bnNjYWxl
ZFRvdGFsVmlzaWJsZUNvbnRlbnRTaXplKCkgaW5jbHVkZXMgYXJlYXMgaW4gdGhlIGNvbnRlbnQg
dGhhdCBtaWdodCBiZSBvYnNjdXJlZCBieSBVSSBlbGVtZW50cy4KKyAgICBJbnRTaXplIHVuc2Nh
bGVkVW5vYnNjdXJlZFZpc2libGVDb250ZW50U2l6ZShWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRl
c1Njcm9sbGJhcnMgPSBFeGNsdWRlU2Nyb2xsYmFycykgY29uc3Q7CisgICAgSW50U2l6ZSB1bnNj
YWxlZFRvdGFsVmlzaWJsZUNvbnRlbnRTaXplKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Ny
b2xsYmFycyA9IEV4Y2x1ZGVTY3JvbGxiYXJzKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IHZp
c2libGVDb250ZW50U2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9CiAKICAgICAvLyBG
dW5jdGlvbnMgZm9yIGdldHRpbmcvc2V0dGluZyB0aGUgc2l6ZSB3ZWJraXQgc2hvdWxkIHVzZSB0
byBsYXlvdXQgdGhlIGNvbnRlbnRzLiBCeSBkZWZhdWx0IHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhl
IHZpc2libGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3
Miw3ICsxNDcyLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZyYW1lVmlld0RpZAog
ewogICAgIGlmIChtX2NsaXBMYXllcikgewogICAgICAgICBjb25zdCBGcmFtZVZpZXcmIGZyYW1l
VmlldyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKLSAgICAgICAgbV9jbGlwTGF5ZXItPnNl
dFNpemUoZnJhbWVWaWV3LnVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKCkpOworICAgICAgICBt
X2NsaXBMYXllci0+c2V0U2l6ZShmcmFtZVZpZXcudW5zY2FsZWRUb3RhbFZpc2libGVDb250ZW50
U2l6ZSgpKTsKIAogICAgICAgICBmcmFtZVZpZXdEaWRTY3JvbGwoKTsKICAgICAgICAgdXBkYXRl
T3ZlcmZsb3dDb250cm9sc0xheWVycygpOwpAQCAtMTg3NSwxMSArMTg3NSwxMiBAQCB2b2lkIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlUm9vdExhCiB7CiAgICAgaWYgKG1fcm9vdENvbnRl
bnRMYXllcikgewogICAgICAgICBjb25zdCBJbnRSZWN0JiBkb2N1bWVudFJlY3QgPSBtX3JlbmRl
clZpZXcuZG9jdW1lbnRSZWN0KCk7Ci0gICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0U2l6
ZShkb2N1bWVudFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRQ
b3NpdGlvbihGbG9hdFBvaW50KGRvY3VtZW50UmVjdC54KCksIGRvY3VtZW50UmVjdC55KCkgKyBt
X3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuaGVhZGVySGVpZ2h0KCkpKTsKKyAgICAgICAgbV9yb290
Q29udGVudExheWVyLT5zZXRTaXplKGRvY3VtZW50UmVjdC5zaXplKCkpOyAgICAgICAgCisgICAg
ICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChkb2N1bWVudFJl
Y3QueCgpLCBkb2N1bWVudFJlY3QueSgpICsgbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmhlYWRl
ckhlaWdodCgpCisgICAgICAgICAgICArIG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS50b3BDb250
ZW50SW5zZXQoKSkpOwogICAgIH0KICAgICBpZiAobV9jbGlwTGF5ZXIpCi0gICAgICAgIG1fY2xp
cExheWVyLT5zZXRTaXplKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS51bnNjYWxlZFZpc2libGVD
b250ZW50U2l6ZSgpKTsKKyAgICAgICAgbV9jbGlwTGF5ZXItPnNldFNpemUobV9yZW5kZXJWaWV3
LmZyYW1lVmlldygpLnVuc2NhbGVkVG90YWxWaXNpYmxlQ29udGVudFNpemUoKSk7CiAKICNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgaWYgKG1fY29udGVudFNoYWRvd0xheWVyKSB7CkBA
IC0zMTIyLDcgKzMxMjMsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZW5zdXJlUm9v
dExhCiAgICAgICAgICAgICBtX2NsaXBMYXllci0+YWRkQ2hpbGQobV9zY3JvbGxMYXllci5nZXQo
KSk7CiAgICAgICAgICAgICBtX3Njcm9sbExheWVyLT5hZGRDaGlsZChtX3Jvb3RDb250ZW50TGF5
ZXIuZ2V0KCkpOwogCi0gICAgICAgICAgICBtX2NsaXBMYXllci0+c2V0U2l6ZShtX3JlbmRlclZp
ZXcuZnJhbWVWaWV3KCkudW5zY2FsZWRWaXNpYmxlQ29udGVudFNpemUoKSk7CisgICAgICAgICAg
ICBtX2NsaXBMYXllci0+c2V0U2l6ZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudW5zY2FsZWRU
b3RhbFZpc2libGVDb250ZW50U2l6ZSgpKTsKIAogICAgICAgICAgICAgdXBkYXRlT3ZlcmZsb3dD
b250cm9sc0xheWVycygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
CShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MjcsNiArMTgyNywxNiBAQCB2b2lkIEludGVybmFsczo6
c2V0Rm9vdGVySGVpZ2h0KGZsb2F0IGhlCiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBkb2N1
bWVudC0+dmlldygpOwogICAgIGZyYW1lVmlldy0+c2V0Rm9vdGVySGVpZ2h0KGhlaWdodCk7CiB9
CisgICAgCit2b2lkIEludGVybmFsczo6c2V0VG9wQ29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJ
bnNldCkKK3sKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKKyAg
ICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUGFnZSogcGFnZSA9
IGRvY3VtZW50LT5wYWdlKCk7CisgICAgcGFnZS0+c2V0VG9wQ29udGVudEluc2V0KGNvbnRlbnRJ
bnNldCk7Cit9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiB2b2lkIEludGVybmFsczo6
d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkocmV2aXNpb24gMTY1OTcxKQorKysgU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjU1LDYg
KzI1NSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhlYWRlckhlaWdodChmbG9hdCk7CiAgICAg
dm9pZCBzZXRGb290ZXJIZWlnaHQoZmxvYXQpOwogCisgICAgdm9pZCBzZXRUb3BDb250ZW50SW5z
ZXQoZmxvYXQpOworCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIHZvaWQgd2Via2l0
V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopOwogICAgIHZvaWQgd2Via2l0
RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaWRsCShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw2ICsyMTQsOCBA
QAogICAgIHZvaWQgc2V0SGVhZGVySGVpZ2h0KGZsb2F0IGhlaWdodCk7CiAgICAgdm9pZCBzZXRG
b290ZXJIZWlnaHQoZmxvYXQgaGVpZ2h0KTsKIAorICAgIHZvaWQgc2V0VG9wQ29udGVudEluc2V0
KGZsb2F0IGNvbnRlbnRJbnNldCk7CisKICNpZiBkZWZpbmVkKEVOQUJMRV9GVUxMU0NSRUVOX0FQ
SSkgJiYgRU5BQkxFX0ZVTExTQ1JFRU5fQVBJCiAgICAgdm9pZCB3ZWJraXRXaWxsRW50ZXJGdWxs
U2NyZWVuRm9yRWxlbWVudChFbGVtZW50IGVsZW1lbnQpOwogICAgIHZvaWQgd2Via2l0RGlkRW50
ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50IGVsZW1lbnQpOwpJbmRleDogU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
cmV2aXNpb24gMTY2MDAzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTQtMDMtMjAgIEJldGggRGFraW4gIDxiZGFraW5AYXBw
bGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjb250ZW50SW5zZXQgZm9yIE1hYyBXZWJLaXQy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAyNzMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgV0tWaWV3IEFQSSBmb3Igc2V0dGluZyBhIHRvcENvbnRlbnRJbnNldCgpLiBBbGwg
b2YgdGhpcyB3b3JrIGdldHMgCisgICAgICAgIHRoYXQgbnVtYmVyIHBsdW1iZWQgZG93biB0byBX
ZWJDb3JlLgorCisgICAgICAgICogU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAg
ICAgICAqIFNoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0VG9wQ29udGVu
dEluc2V0Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3RvcENvbnRlbnRJbnNldF0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3IF9zZXRUb3BD
b250ZW50SW5zZXQ6XSk6CisgICAgICAgICgtW1dLVmlldyBfdG9wQ29udGVudEluc2V0XSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6V2ViUGFnZVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpzZXRUb3BDb250ZW50SW5zZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNy
ZWF0aW9uUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnRvcENvbnRlbnRJbnNldCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0VG9wQ29udGVudElu
c2V0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorCiAyMDE0LTAzLTIwICBB
bGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBpT1Mg
aW5wdXQgbWV0aG9kIGNvZGUgdG8gdXNlIG5ldyBjcm9zcy1wbGF0Zm9ybSBhc3luYyBmdW5jdGlv
bnMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFnZUNyZWF0aW9u
UGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDE2NTk3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiAr
NTUsNyBAQCB2b2lkIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJCiAgICAgZW5j
b2RlciA8PCBjYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWw7CiAgICAgZW5jb2RlciA8PCBj
YW5SdW5Nb2RhbDsKICAgICBlbmNvZGVyIDw8IGRldmljZVNjYWxlRmFjdG9yOworICAgIGVuY29k
ZXIgPDwgdG9wQ29udGVudEluc2V0OwogICAgIGVuY29kZXIgPDwgbWVkaWFWb2x1bWU7CiAgICAg
ZW5jb2RlciA8PCBtYXlTdGFydE1lZGlhV2hlbkluV2luZG93OwogICAgIGVuY29kZXIgPDwgbWlu
aW11bUxheW91dFNpemU7CkBAIC0xMjAsNiArMTIxLDggQEAgYm9vbCBXZWJQYWdlQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUoSQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShwYXJhbWV0ZXJzLmRldmljZVNjYWxlRmFjdG9yKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy50b3BDb250ZW50SW5z
ZXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXJh
bWV0ZXJzLm1lZGlhVm9sdW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocGFyYW1ldGVycy5tYXlTdGFydE1lZGlhV2hlbkluV2luZG93KSkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMu
aAkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlBhZ2VDcmVh
dGlvblBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsOCBAQCBzdHJ1Y3Qg
V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgYm9vbCBjYW5SdW5Nb2RhbDsKIAogICAg
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yOworCisgICAgZmxvYXQgdG9wQ29udGVudEluc2V0Owog
ICAgIAogICAgIGZsb2F0IG1lZGlhVm9sdW1lOwogICAgIGJvb2wgbWF5U3RhcnRNZWRpYVdoZW5J
bldpbmRvdzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCw3IEBAIFdlYlBhZ2VQcm94eTo6
V2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmIHAKICAgICAsIG1fcGFnZVNjYWxlRmFjdG9yKDEpCiAg
ICAgLCBtX2ludHJpbnNpY0RldmljZVNjYWxlRmFjdG9yKDEpCiAgICAgLCBtX2N1c3RvbURldmlj
ZVNjYWxlRmFjdG9yKDApCisgICAgLCBtX3RvcENvbnRlbnRJbnNldCgwKQogICAgICwgbV9sYXll
ckhvc3RpbmdNb2RlKExheWVySG9zdGluZ01vZGU6OkluUHJvY2VzcykKICAgICAsIG1fZHJhd3NC
YWNrZ3JvdW5kKHRydWUpCiAgICAgLCBtX2RyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGZhbHNl
KQpAQCAtOTI1LDYgKzkyNiwxNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0RHJhd3NUcmFuc3Bh
cmVudEJhCiAgICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0RHJh
d3NUcmFuc3BhcmVudEJhY2tncm91bmQoZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQpLCBtX3Bh
Z2VJRCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQg
Y29udGVudEluc2V0KQoreworICAgIGlmIChtX3RvcENvbnRlbnRJbnNldCA9PSBjb250ZW50SW5z
ZXQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdG9wQ29udGVudEluc2V0ID0gY29udGVudElu
c2V0OworCisgICAgaWYgKGlzVmFsaWQoKSkKKyAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpTZXRUb3BDb250ZW50SW5zZXQoY29udGVudEluc2V0KSwgbV9wYWdlSUQp
OworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VW5kZXJsYXlDb2xvcihjb25zdCBDb2xvciYg
Y29sb3IpCiB7CiAgICAgaWYgKG1fdW5kZXJsYXlDb2xvciA9PSBjb2xvcikKQEAgLTQwMzIsNiAr
NDA0NCw3IEBAIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgV2ViUGFnZVByb3h5OjoKICAgICBw
YXJhbWV0ZXJzLmNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCA9IG1fdWlDbGllbnQtPmNh
blJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCgpOwogICAgIHBhcmFtZXRlcnMuY2FuUnVuTW9k
YWwgPSBtX2NhblJ1bk1vZGFsOwogICAgIHBhcmFtZXRlcnMuZGV2aWNlU2NhbGVGYWN0b3IgPSBk
ZXZpY2VTY2FsZUZhY3RvcigpOworICAgIHBhcmFtZXRlcnMudG9wQ29udGVudEluc2V0ID0gbV90
b3BDb250ZW50SW5zZXQ7CiAgICAgcGFyYW1ldGVycy5tZWRpYVZvbHVtZSA9IG1fbWVkaWFWb2x1
bWU7CiAgICAgcGFyYW1ldGVycy5tYXlTdGFydE1lZGlhV2hlbkluV2luZG93ID0gbV9tYXlTdGFy
dE1lZGlhV2hlbkluV2luZG93OwogICAgIHBhcmFtZXRlcnMubWluaW11bUxheW91dFNpemUgPSBt
X21pbmltdW1MYXlvdXRTaXplOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjYsNiArNDI2LDkgQEAgcHVibGljOgog
ICAgIGJvb2wgZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKSBjb25zdCB7IHJldHVybiBtX2Ry
YXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOyB9CiAgICAgdm9pZCBzZXREcmF3c1RyYW5zcGFyZW50
QmFja2dyb3VuZChib29sKTsKIAorICAgIGZsb2F0IHRvcENvbnRlbnRJbnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fdG9wQ29udGVudEluc2V0OyB9CisgICAgdm9pZCBzZXRUb3BDb250ZW50SW5zZXQo
ZmxvYXQpOworCiAgICAgV2ViQ29yZTo6Q29sb3IgdW5kZXJsYXlDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIG1fdW5kZXJsYXlDb2xvcjsgfQogICAgIHZvaWQgc2V0VW5kZXJsYXlDb2xvcihjb25zdCBX
ZWJDb3JlOjpDb2xvciYpOwogCkBAIC0xMzM4LDYgKzEzNDEsNyBAQCBwcml2YXRlOgogICAgIGRv
dWJsZSBtX3BhZ2VTY2FsZUZhY3RvcjsKICAgICBmbG9hdCBtX2ludHJpbnNpY0RldmljZVNjYWxl
RmFjdG9yOwogICAgIGZsb2F0IG1fY3VzdG9tRGV2aWNlU2NhbGVGYWN0b3I7CisgICAgZmxvYXQg
bV90b3BDb250ZW50SW5zZXQ7CiAKICAgICBMYXllckhvc3RpbmdNb2RlIG1fbGF5ZXJIb3N0aW5n
TW9kZTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQ
cml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1ZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDE2NTk3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw2
ICs4MSw3IEBACiBAcHJvcGVydHkgKHJlYWR3cml0ZSkgQk9PTCBhbGxvd3NNYWduaWZpY2F0aW9u
OwogQHByb3BlcnR5IChyZWFkd3JpdGUpIGRvdWJsZSBtYWduaWZpY2F0aW9uOwogQHByb3BlcnR5
IChyZWFkd3JpdGUpIEJPT0wgYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXM7CitA
cHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRUb3BDb250ZW50SW5zZXQ6KSBDR0Zsb2F0
IF90b3BDb250ZW50SW5zZXQ7CiAKIEBwcm9wZXJ0eSAocmVhZG9ubHkpIE5TQ29sb3IgKl9wYWdl
RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3I7CiBAcHJvcGVydHkoY29weSwgbm9uYXRvbWljKSBOU0Nv
bG9yICp1bmRlcmxheUNvbG9yOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHJldmlzaW9uIDE2NTk3MSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTQ3LDYgKzExNDcsMTYgQEAgLSAodm9pZClfc2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQ6
KAogICAgIF9wYWdlLT5zZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChkcmF3c1RyYW5zcGFy
ZW50QmFja2dyb3VuZCk7CiB9CiAKKy0gKHZvaWQpX3NldFRvcENvbnRlbnRJbnNldDooQ0dGbG9h
dCljb250ZW50SW5zZXQKK3sKKyAgICBfcGFnZS0+c2V0VG9wQ29udGVudEluc2V0KGNvbnRlbnRJ
bnNldCk7Cit9CisKKy0gKENHRmxvYXQpX3RvcENvbnRlbnRJbnNldAoreworICAgIHJldHVybiBf
cGFnZS0+dG9wQ29udGVudEluc2V0KCk7Cit9CisKICNlbmRpZgogCiBAZW5kCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZh
dGUuaAkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDcgQEAg
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLUGFnaW5hdGlvbgogI2Vsc2UKIEBwcm9wZXJ0
eSAocmVhZG9ubHkpIE5TQ29sb3IgKl9wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3I7CiBAcHJv
cGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZDop
IEJPT0wgX2RyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOworQHByb3BlcnR5IChub25hdG9taWMs
IHNldHRlcj1fc2V0VG9wQ29udGVudEluc2V0OikgQ0dGbG9hdCBfdG9wQ29udGVudEluc2V0Owog
I2VuZGlmCiAKIC0gKHZvaWQpX3J1bkphdmFTY3JpcHRJbk1haW5GcmFtZTooTlNTdHJpbmcgKilz
Y3JpcHRTdHJpbmc7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Zp
ZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tW
aWV3Lm1tCShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyOTIsNiArMzI5MiwxNiBAQCAtIChC
T09MKWFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1CiAgICAgcmV0dXJuIF9kYXRhLT5f
YWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXM7CiB9CiAKKy0gKHZvaWQpX3NldFRv
cENvbnRlbnRJbnNldDooQ0dGbG9hdCljb250ZW50SW5zZXQKK3sKKyAgICBfZGF0YS0+X3BhZ2Ut
PnNldFRvcENvbnRlbnRJbnNldChjb250ZW50SW5zZXQpOworfQorCistIChDR0Zsb2F0KV90b3BD
b250ZW50SW5zZXQKK3sKKyAgICByZXR1cm4gX2RhdGEtPl9wYWdlLT50b3BDb250ZW50SW5zZXQo
KTsKK30KKwogLSAoTlNDb2xvciAqKV9wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IKIHsKICAg
ICBXZWJDb3JlOjpDb2xvciBjb2xvciA9IF9kYXRhLT5fcGFnZS0+cGFnZUV4dGVuZGVkQmFja2dy
b3VuZENvbG9yKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNCw2ICs0MDQsOCBA
QCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgCiAgICAgc2V0U2Nyb2xs
UGlubmluZ0JlaGF2aW9yKHBhcmFtZXRlcnMuc2Nyb2xsUGlubmluZ0JlaGF2aW9yKTsKICAgICBz
ZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UocGFyYW1ldGVycy5iYWNrZ3JvdW5kRXh0ZW5k
c0JleW9uZFBhZ2UpOwogCisgICAgc2V0VG9wQ29udGVudEluc2V0KHBhcmFtZXRlcnMudG9wQ29u
dGVudEluc2V0KTsKKwogICAgIG1fdXNlckFnZW50ID0gcGFyYW1ldGVycy51c2VyQWdlbnQ7CiAK
ICAgICBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6c2V0SGlnaGVzdEl0ZW1JREZyb21VSVByb2Nl
c3MocGFyYW1ldGVycy5oaWdoZXN0VXNlZEJhY2tGb3J3YXJkSXRlbUlEKTsKQEAgLTIwMzIsNiAr
MjAzNCwxMSBAQCB2b2lkIFdlYlBhZ2U6OnNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvCiAgICAg
bV9kcmF3aW5nQXJlYS0+c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6c2V0
VG9wQ29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJbnNldCkKK3sKKyAgICBtX3BhZ2UtPnNldFRv
cENvbnRlbnRJbnNldChjb250ZW50SW5zZXQpOworfQorCiB2b2lkIFdlYlBhZ2U6OnZpZXdXaWxs
U3RhcnRMaXZlUmVzaXplKCkKIHsKICAgICBpZiAoIW1fcGFnZSkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMTY1OTcxKQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtODQwLDYgKzg0MCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXREcmF3c0JhY2tncm91
bmQoYm9vbCk7CiAgICAgdm9pZCBzZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChib29sKTsK
IAorICAgIHZvaWQgc2V0VG9wQ29udGVudEluc2V0KGZsb2F0KTsKKwogICAgIHZvaWQgdmlld1dp
bGxTdGFydExpdmVSZXNpemUoKTsKICAgICB2b2lkIHZpZXdXaWxsRW5kTGl2ZVJlc2l6ZSgpOwog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTY1OTcxKQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTMw
LDYgKzMwLDggQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgU2V0
RHJhd3NCYWNrZ3JvdW5kKGJvb2wgZHJhd3NCYWNrZ3JvdW5kKQogICAgIFNldERyYXdzVHJhbnNw
YXJlbnRCYWNrZ3JvdW5kKGJvb2wgZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQpCiAKKyAgICBT
ZXRUb3BDb250ZW50SW5zZXQoZmxvYXQgY29udGVudEluc2V0KQorCiAgICAgU2V0VW5kZXJsYXlD
b2xvcihXZWJDb3JlOjpDb2xvciBjb2xvcikKIAogICAgIFZpZXdXaWxsU3RhcnRMaXZlUmVzaXpl
KCkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTk4MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE0LTAzLTIwICBCZXRoIERha2luICA8
YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgY29udGVudEluc2V0IGZvciBN
YWMgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMwMjczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHR3byB0ZXN0cyBmb3IgaGl0LXRlc3Rpbmcgd2l0aCBhIHRvcENvbnRlbnRJbnNldC4K
KworICAgICAgICAqIHBsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0
LWhpdC10ZXN0aW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFj
LXdrMi90aWxlZC1kcmF3aW5nL2NvbnRlbnQtaW5zZXQtaGl0LXRlc3RpbmctaW4tZnJhbWUtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdp
bmcvY29udGVudC1pbnNldC1oaXQtdGVzdGluZy1pbi1mcmFtZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvY29udGVudC1pbnNldC1oaXQtdGVz
dGluZy5odG1sOiBBZGRlZC4KKwogMjAxNC0wMy0yMCAgUmFkdSBTdGF2aWxhICA8c3RhdmlsYUBh
ZG9iZS5jb20+CiAKICAgICAgICAgW0NTUyBSZWdpb25zXSBDbGVhbnVwIHNjcm9sbGFibGUgcmVn
aW9ucyB0ZXN0cwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1kcmF3
aW5nL2NvbnRlbnQtaW5zZXQtaGl0LXRlc3RpbmctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0
LWhpdC10ZXN0aW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACitQYXNzIQpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1kcmF3aW5nL2NvbnRlbnQtaW5zZXQtaGl0
LXRlc3RpbmctaW4tZnJhbWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5n
LWluLWZyYW1lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWluLWZy
YW1lLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIgQEAKKworUGFzcyEK
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50
LWluc2V0LWhpdC10ZXN0aW5nLWluLWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1kcmF3aW5nL2NvbnRlbnQtaW5zZXQtaGl0LXRlc3Rp
bmctaW4tZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWluc2V0LWhpdC10ZXN0aW5nLWluLWZyYW1lLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQ+CisgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgaWYgKCF3aW5kb3cuZXZlbnRT
ZW5kZXIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxz
KQorICAgICAgICAgICAgd2luZG93LmludGVybmFscy5zZXRUb3BDb250ZW50SW5zZXQoMTAwKTsK
KyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5k
dW1wQXNUZXh0KCk7CisKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oMjAsIDEyMCk7
CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5t
b3VzZVVwKCk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRl
c3QoKSI+CisgICAgPGlmcmFtZSBzcmM9InJlc291cmNlcy9pZnJhbWUtdG8taGl0LXRlc3QuaHRt
bCIgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9Im5vIiBoZWlnaHQ9IjMwMCIgd2lkdGg9IjYw
MCI+PC9pZnJhbWU+CisgICAgPGRpdiBpZD0icmVzdWx0Ij5UaGlzIHRlc3QgbmVlZHMgdG8gYmUg
cnVuIHRocm91Z2ggV2ViS2l0VGVzdFJ1bm5lci48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9jb250ZW50LWlu
c2V0LWhpdC10ZXN0aW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjLXdrMi90aWxlZC1kcmF3aW5nL2NvbnRlbnQtaW5zZXQtaGl0LXRlc3RpbmcuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9j
b250ZW50LWluc2V0LWhpdC10ZXN0aW5nLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyAgICAjdGFyZ2V0IHsKKyAgICAgICAgYmFj
a2dyb3VuZC1jb2xvcjpwdXJwbGU7CisgICAgICAgIHdpZHRoOjI1cHg7CisgICAgICAgIGhlaWdo
dDoyNXB4OworICAgIH0KKzwvc3R5bGU+Cis8c2NyaXB0PgorICAgIHZhciBudW1iZXJPZkNsaWNr
cyA9IDA7CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICBpZiAoIXdpbmRvdy5l
dmVudFNlbmRlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHdpbmRvdy5pbnRl
cm5hbHMpCisgICAgICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLnNldFRvcENvbnRlbnRJbnNldCgx
MDApOworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVu
bmVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbygxNSwg
MTE1KTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlVXAoKTsKKworICAgICAgICB2YXIgcmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInJlc3VsdCIpOworICAgICAgICBpZiAobnVtYmVyT2ZDbGlja3MgPiAwKQorICAgICAg
ICAgICAgcmVzdWx0LmlubmVySFRNTCA9ICJQYXNzISI7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJlc3VsdC5pbm5lckhUTUwgPSAiRmFpbC4iOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlv
biBjbGlja2VkKCkgeworICAgICAgICBudW1iZXJPZkNsaWNrcyA9IDE7CisgICAgfQorPC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CisgICAgPGRpdiBpZD0idGFy
Z2V0IiBvbmNsaWNrPSJjbGlja2VkKCkiPjwvZGl2PgorICAgIDxkaXYgaWQ9InJlc3VsdCI+VGhp
cyB0ZXN0IG5lZWRzIHRvIGJlIHJ1biB0aHJvdWdoIFdlYktpdFRlc3RSdW5uZXIuPC9kaXY+Cis8
L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="251598"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>