<?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>148062</bug_id>
          
          <creation_ts>2015-08-15 16:07:50 -0700</creation_ts>
          <short_desc>Refactor ViewGestureController swipe snapshot removal to be more platform-independent</short_desc>
          <delta_ts>2015-08-16 17:53:48 -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>New Bugs</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mitz</cc>
    
    <cc>mkwst</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1117987</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-08-15 16:07:50 -0700</bug_when>
    <thetext>Refactor ViewGestureController swipe snapshot removal to be more platform-independent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117988</commentid>
    <comment_count>1</comment_count>
      <attachid>259106</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-08-15 16:09:00 -0700</bug_when>
    <thetext>Created attachment 259106
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117989</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-08-15 16:09:33 -0700</bug_when>
    <thetext>Mac is good; still have to test iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117990</commentid>
    <comment_count>3</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-08-15 16:11:46 -0700</bug_when>
    <thetext>Logging looks like this:

Swipe Snapshot Removal (0.00 ms) - start
Swipe Snapshot Removal (0.14 ms) - (re)started watchdog timer for 5 seconds
Swipe Snapshot Removal (828.31 ms) - outstanding event occurred: VisuallyNonEmptyLayout 
Swipe Snapshot Removal (828.45 ms) - deferring removal; had oustanding events: RenderTreeSizeThreshold MainFrameLoad SubresourceLoads 
Swipe Snapshot Removal (828.51 ms) - (re)started watchdog timer for 3 seconds
Swipe Snapshot Removal (844.20 ms) - outstanding event occurred: RenderTreeSizeThreshold 
Swipe Snapshot Removal (844.34 ms) - deferring removal; had oustanding events: MainFrameLoad SubresourceLoads 
Swipe Snapshot Removal (2046.35 ms) - outstanding event occurred: MainFrameLoad 
Swipe Snapshot Removal (2046.46 ms) - deferring removal; had oustanding events: SubresourceLoads 
Swipe Snapshot Removal (2046.52 ms) - outstanding event occurred: SubresourceLoads 
Swipe Snapshot Removal (2046.59 ms) - removed snapshot


Swipe Snapshot Removal (0.00 ms) - start
Swipe Snapshot Removal (0.12 ms) - (re)started watchdog timer for 5 seconds
Swipe Snapshot Removal (86.57 ms) - outstanding event occurred: MainFrameLoad 
Swipe Snapshot Removal (86.68 ms) - deferring removal; had oustanding events: VisuallyNonEmptyLayout RenderTreeSizeThreshold SubresourceLoads 
Swipe Snapshot Removal (86.74 ms) - wait for event cancelled: VisuallyNonEmptyLayout 
Swipe Snapshot Removal (86.80 ms) - deferring removal; had oustanding events: RenderTreeSizeThreshold SubresourceLoads 
Swipe Snapshot Removal (86.86 ms) - outstanding event occurred: SubresourceLoads 
Swipe Snapshot Removal (86.91 ms) - deferring removal; had oustanding events: RenderTreeSizeThreshold 
Swipe Snapshot Removal (270.75 ms) - outstanding event occurred: RenderTreeSizeThreshold 
Swipe Snapshot Removal (270.91 ms) - removed snapshot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117994</commentid>
    <comment_count>4</comment_count>
      <attachid>259108</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-08-15 16:34:22 -0700</bug_when>
    <thetext>Created attachment 259108
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117995</commentid>
    <comment_count>5</comment_count>
      <attachid>259109</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-08-15 16:47:24 -0700</bug_when>
    <thetext>Created attachment 259109
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118063</commentid>
    <comment_count>6</comment_count>
      <attachid>259109</attachid>
    <who name="">mitz</who>
    <bug_when>2015-08-16 16:45:58 -0700</bug_when>
    <thetext>Comment on attachment 259109
Patch

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

&gt; Source/WebKit2/UIProcess/ViewGestureController.cpp:51
&gt; +static HashMap&lt;uint64_t, WebKit::ViewGestureController*&gt;&amp; viewGestureControllersForAllPages()
&gt; +{
&gt; +    // The key in this map is the associated page ID.
&gt; +    static NeverDestroyed&lt;HashMap&lt;uint64_t, WebKit::ViewGestureController*&gt;&gt; viewGestureControllers;
&gt; +    return viewGestureControllers.get();
&gt; +}

Can this go inside the namespace WebKit block?

&gt; Source/WebKit2/UIProcess/ViewGestureController.cpp:151
&gt; +String ViewGestureController::SnapshotRemovalTracker::eventsDescription(ViewGestureController::SnapshotRemovalTracker::Events event)

This can be a static function, perhaps even a file-static function.

&gt; Source/WebKit2/UIProcess/ViewGestureController.cpp:153
&gt; +    String description;

StringBuilder?

&gt; Source/WebKit2/UIProcess/ViewGestureController.cpp:238
&gt; +bool ViewGestureController::SnapshotRemovalTracker::cancelOutstandingEvent(Events event)
&gt; +{
&gt; +    ASSERT(hasOneBitSet(event));
&gt; +
&gt; +    if (!(m_outstandingEvents &amp; event))
&gt; +        return false;
&gt; +
&gt; +    log(&quot;wait for event cancelled: &quot; + eventsDescription(event));
&gt; +
&gt; +    m_outstandingEvents &amp;= ~event;
&gt; +
&gt; +    fireRemovalCallbackIfPossible();
&gt; +    return true;
&gt; +}

Strange to have two functions that differ only in the message they log.

&gt; Source/WebKit2/UIProcess/ViewGestureController.cpp:256
&gt; +        log(&quot;removed snapshot&quot;);

“removing”? “will remove”? log after making the callback?

&gt; Source/WebKit2/UIProcess/mac/ViewGestureController.h:170
&gt; +        void log(String);

const String&amp;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118065</commentid>
    <comment_count>7</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-08-16 17:44:30 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 259109 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=259109&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ViewGestureController.cpp:151
&gt; &gt; +String ViewGestureController::SnapshotRemovalTracker::eventsDescription(ViewGestureController::SnapshotRemovalTracker::Events event)
&gt; 
&gt; This can be a static function, perhaps even a file-static function.

It can&apos;t be file static because SnapshotRemovalTracker is private. But static, yes. And everything else, yes. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118066</commentid>
    <comment_count>8</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-08-16 17:52:45 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 259109 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=259109&amp;action=review
&gt;
&gt; Strange to have two functions that differ only in the message they log.

I really want to keep separate function names for clarity at callsites, but I refactored it so the majority of the code is only in one place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118067</commentid>
    <comment_count>9</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-08-16 17:53:48 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/188521</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259106</attachid>
            <date>2015-08-15 16:09:00 -0700</date>
            <delta_ts>2015-08-15 16:34:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148062-20150815160839.patch</filename>
            <type>text/plain</type>
            <size>46034</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4NTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjEzZjkyNWI4ODAyNTEy
NDAxNzQ5N2ZhNjQxMjExYWYzMGJkMTUwYi4uZDcwYTMzZWZmNWUwMWY0Y2FhZDY1NTc5MDcyMThh
YmU1MmUxYWVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDE1LTA4LTE1ICBUaW1v
dGh5IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZhY3Rv
ciBWaWV3R2VzdHVyZUNvbnRyb2xsZXIgc3dpcGUgc25hcHNob3QgcmVtb3ZhbCB0byBiZSBtb3Jl
IHBsYXRmb3JtLWluZGVwZW5kZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDgwNjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgQWRkIGEgVmlld0dl
c3R1cmVzIGxvZ2dpbmcgY2hhbm5lbC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9WaWV3R2VzdHVy
ZUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHZpZXdHZXN0dXJlQ29udHJvbGxlcnNG
b3JBbGxQYWdlcyk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Vmll
d0dlc3R1cmVDb250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9s
bGVyOjp+Vmlld0dlc3R1cmVDb250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1
cmVDb250cm9sbGVyOjpnZXN0dXJlQ29udHJvbGxlckZvclBhZ2UpOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZv
ck1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlk
UmVwYWludEFmdGVyTmF2aWdhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6ZGlkSGl0UmVuZGVyVHJlZVNpemVUaHJlc2hvbGQpOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlkUmVhY2hNYWluRnJhbWVMb2Fk
VGVybWluYWxTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvck1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6
OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Y2hlY2tGb3JBY3RpdmVMb2Fkcyk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U25hcHNob3RSZW1vdmFsVHJhY2tlcjo6ZXZl
bnRzRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXIpOgorICAgICAg
ICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6
OmxvZyk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U25hcHNob3RS
ZW1vdmFsVHJhY2tlcjo6c3RhcnQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRy
b2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6
Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpldmVudE9jY3Vy
cmVkKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJl
bW92YWxUcmFja2VyOjpjYW5jZWxPdXRzdGFuZGluZ0V2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpmaXJlUmVtb3Zh
bENhbGxiYWNrSWZQb3NzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJv
bGxlcjo6U25hcHNob3RSZW1vdmFsVHJhY2tlcjo6ZmlyZVJlbW92YWxDYWxsYmFja0ltbWVkaWF0
ZWx5KToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJl
bW92YWxUcmFja2VyOjp3YXRjaGRvZ1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3
R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OnN0YXJ0V2F0Y2hkb2cp
OgorICAgICAgICBCdWlsZCBhIHBsYXRmb3JtLWluZGVwZW5kZW50IFNuYXBzaG90UmVtb3ZhbFRy
YWNrZXIsIHdoaWNoIGtlZXBzIHRyYWNrIG9mCisgICAgICAgIHZhcmlvdXMgZXZlbnRzIHRoYXQg
d2Ugd2FpdCBmb3IgYmVmb3JlIHJlbW92aW5nIHRoZSBzbmFwc2hvdC4gVGhpcworICAgICAgICBp
cyBjb25zdHJ1Y3RlZCBmcm9tIHRoZSB1bmlvbiBvZiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJ7SU9T
LCBNYWN9J3Mgc25hcHNob3QKKyAgICAgICAgcmVtb3ZhbCBjb2RlLCBhbmQgZWFjaCBwbGF0Zm9y
bSBWaWV3R2VzdHVyZUNvbnRyb2xsZXIgY2FuIHNwZWNpZnkgd2hpY2gKKyAgICAgICAgZXZlbnRz
IHRvIHdhaXQgZm9yIChiZWNhdXNlIHRoaXMgY3VycmVudGx5IGRpZmZlcnMgc2xpZ2h0bHkpLgor
CisgICAgICAgIEFkZCBsb2dnaW5nIHRvIFNuYXBzaG90UmVtb3ZhbFRyYWNrZXIgdG8gbWFrZSBk
ZWJ1Z2dpbmcgc25hcHNob3QgcmVtb3ZhbAorICAgICAgICBpc3N1ZXMgbXVjaCBlYXNpZXIuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5oOgorICAgICAg
ICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJhY2tncm91bmRDb2xvckZvckN1cnJl
bnRTbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlk
RmluaXNoTG9hZEZvck1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6ZGlkRmFpbExvYWRGb3JNYWluRnJhbWUpOgorCisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXZWJLaXQ6OlZpZXdH
ZXN0dXJlQ29udHJvbGxlcjo6cGxhdGZvcm1UZWFyZG93bik6CisgICAgICAgIChXZWJLaXQ6OlZp
ZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUpOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVuZFN3aXBlR2VzdHVyZSk6CisgICAgICAgIChXZWJL
aXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c2V0UmVuZGVyVHJlZVNpemUpOgorICAgICAgICAo
V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OndpbGxDb21taXRQb3N0U3dpcGVUcmFuc2l0
aW9uTGF5ZXJUcmVlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpy
ZW1vdmVTd2lwZVNuYXBzaG90KToKKyAgICAgICAgKHZpZXdHZXN0dXJlQ29udHJvbGxlcnNGb3JB
bGxQYWdlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6Vmlld0dlc3R1cmVDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Vmll
d0dlc3R1cmVDb250cm9sbGVyOjp+Vmlld0dlc3R1cmVDb250cm9sbGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpkaWRSZXN0b3JlU2Nyb2xsUG9z
aXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
Om1haW5GcmFtZUxvYWREaWRSZWFjaFRlcm1pbmFsU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25G
b3JNYWluRnJhbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRy
b2xsZXI6OmFjdGl2ZUxvYWRNb25pdG9yaW5nVGltZXJGaXJlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c3dpcGVTbmFwc2hvdFdhdGNoZG9nVGlt
ZXJGaXJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6cmVtb3ZlU3dpcGVTbmFwc2hvdElmUmVhZHkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpW
aWV3R2VzdHVyZUNvbnRyb2xsZXI6OnBsYXRmb3JtVGVhcmRvd24pOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVuZFN3aXBlR2VzdHVyZSk6CisgICAgICAgIChXZWJL
aXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Zm9yY2VSZXBhaW50SWZOZWVkZWQpOgorICAgICAg
ICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJlbW92ZVN3aXBlU25hcHNob3QpOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlZpZXdHZXN0dXJlQ29udHJv
bGxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
flZpZXdHZXN0dXJlQ29udHJvbGxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdH
ZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZEhpdFJlbmRlclRyZWVTaXplVGhyZXNo
b2xkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpk
aWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JNYWluRnJhbWUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6Om1haW5GcmFtZUxvYWREaWRSZWFj
aFRlcm1pbmFsU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JNYWluRnJhbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmFjdGl2ZUxvYWRNb25p
dG9yaW5nVGltZXJGaXJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJl
Q29udHJvbGxlcjo6c3dpcGVTbmFwc2hvdFdhdGNoZG9nVGltZXJGaXJlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6cmVtb3ZlU3dpcGVTbmFwc2hv
dEFmdGVyUmVwYWludCk6IERlbGV0ZWQuCisgICAgICAgIE1vdmUgc2hhcmVhYmxlIHNuYXBzaG90
IHJlbW92YWwgY29kZSB0byBhIG5ldyBwbGF0Zm9ybS1pbmRlcGVuZGVudCBWaWV3R2VzdHVyZUNv
bnRyb2xsZXIgZmlsZS4KKyAgICAgICAgTW92ZSB0aGUgVmlld0dlc3R1cmVDb250cm9sbGVyIGNv
bnN0cnVjdG9yL2Rlc3RydWN0b3IgdG8gdGhlIHBsYXRmb3JtLWluZGVwZW5kZW50IGZpbGUuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTUt
MDgtMTMgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0g
RG93bmxvYWRzIGRvIG5vdCBzdGFydCBpZiBwb2xpY3kgZGVjaXNpb24gaXMgbWFkZSBhc3luY2hy
b25vdXNseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5oIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5oCmluZGV4IGNlMTMxOTBlZDViNTEzYzMx
N2FiMTAwMjY2ZDNjN2I1YjBjNGViZmUuLjE5OTU5N2VmY2FkZmYyOWFjNTNkNDhlNDc3YzJlMGNj
NDRmNTk5OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmgKQEAgLTU0LDYgKzU0LDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAgICAgTShTZXNzaW9uU3RhdGUpIFwKICAgICBNKFN0b3JhZ2VB
UEkpIFwKICAgICBNKFRleHRJbnB1dCkgXAorICAgIE0oVmlld0dlc3R1cmVzKSBcCiAKICNkZWZp
bmUgREVDTEFSRV9MT0dfQ0hBTk5FTChuYW1lKSBcCiAgICAgZXh0ZXJuIFdURkxvZ0NoYW5uZWwg
Sk9JTl9MT0dfQ0hBTk5FTF9XSVRIX1BSRUZJWChMT0dfQ0hBTk5FTF9QUkVGSVgsIG5hbWUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1ZpZXdHZXN0dXJlQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlld0dlc3R1cmVDb250cm9sbGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yYTlmYTQxODNkMzIwZDg3MGMzNGIzOWNiZmFkNjhmNWUyZjE3MWZmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1ZpZXdHZXN0dXJlQ29u
dHJvbGxlci5jcHAKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiVmlld0dlc3R1cmVDb250cm9sbGVyLmgiCisKKyNpbXBvcnQg
IkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VzLmgiCisj
aW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgorI2lt
cG9ydCA8d3RmL01hdGhFeHRyYXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0
YXRpYyBjb25zdCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBzd2lwZVNuYXBzaG90UmVtb3ZhbFdhdGNo
ZG9nQWZ0ZXJGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXREdXJhdGlvbiA9IDNfczsKK3N0YXRp
YyBjb25zdCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHN3aXBlU25hcHNob3RSZW1vdmFsQWN0
aXZlTG9hZE1vbml0b3JpbmdJbnRlcnZhbCA9IDI1MF9tczsKKworI2lmIFBMQVRGT1JNKE1BQykK
K3N0YXRpYyBjb25zdCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBzd2lwZVNuYXBzaG90UmVtb3ZhbFdh
dGNoZG9nRHVyYXRpb24gPSA1X3M7CisjZWxzZQorc3RhdGljIGNvbnN0IHN0ZDo6Y2hyb25vOjpz
ZWNvbmRzIHN3aXBlU25hcHNob3RSZW1vdmFsV2F0Y2hkb2dEdXJhdGlvbiA9IDNfczsKKyNlbmRp
ZgorCitzdGF0aWMgSGFzaE1hcDx1aW50NjRfdCwgV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xs
ZXIqPiYgdmlld0dlc3R1cmVDb250cm9sbGVyc0ZvckFsbFBhZ2VzKCkKK3sKKyAgICAvLyBUaGUg
a2V5IGluIHRoaXMgbWFwIGlzIHRoZSBhc3NvY2lhdGVkIHBhZ2UgSUQuCisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEhhc2hNYXA8dWludDY0X3QsIFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9s
bGVyKj4+IHZpZXdHZXN0dXJlQ29udHJvbGxlcnM7CisgICAgcmV0dXJuIHZpZXdHZXN0dXJlQ29u
dHJvbGxlcnMuZ2V0KCk7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OlZpZXdHZXN0dXJlQ29udHJvbGxlcihXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94
eSkKKyAgICA6IG1fd2ViUGFnZVByb3h5KHdlYlBhZ2VQcm94eSkKKyAgICAsIG1fc3dpcGVBY3Rp
dmVMb2FkTW9uaXRvcmluZ1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlZpZXdHZXN0dXJl
Q29udHJvbGxlcjo6Y2hlY2tGb3JBY3RpdmVMb2FkcykKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS5w
cm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCksICp0aGlz
KTsKKworICAgIHZpZXdHZXN0dXJlQ29udHJvbGxlcnNGb3JBbGxQYWdlcygpLmFkZCh3ZWJQYWdl
UHJveHkucGFnZUlEKCksIHRoaXMpOworfQorCitWaWV3R2VzdHVyZUNvbnRyb2xsZXI6On5WaWV3
R2VzdHVyZUNvbnRyb2xsZXIoKQoreworICAgIHBsYXRmb3JtVGVhcmRvd24oKTsKKworICAgIHZp
ZXdHZXN0dXJlQ29udHJvbGxlcnNGb3JBbGxQYWdlcygpLnJlbW92ZShtX3dlYlBhZ2VQcm94eS5w
YWdlSUQoKSk7CisKKyAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOworfQorCitWaWV3R2VzdHVyZUNvbnRyb2xs
ZXIqIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Z2VzdHVyZUNvbnRyb2xsZXJGb3JQYWdlKHVpbnQ2
NF90IHBhZ2VJRCkKK3sKKyAgICBhdXRvIGdlc3R1cmVDb250cm9sbGVySXRlciA9IHZpZXdHZXN0
dXJlQ29udHJvbGxlcnNGb3JBbGxQYWdlcygpLmZpbmQocGFnZUlEKTsKKyAgICBpZiAoZ2VzdHVy
ZUNvbnRyb2xsZXJJdGVyID09IHZpZXdHZXN0dXJlQ29udHJvbGxlcnNGb3JBbGxQYWdlcygpLmVu
ZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZ2VzdHVyZUNvbnRyb2xs
ZXJJdGVyLT52YWx1ZTsKK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZEZpcnN0
VmlzdWFsbHlOb25FbXB0eUxheW91dEZvck1haW5GcmFtZSgpCit7CisgICAgaWYgKCFtX3NuYXBz
aG90UmVtb3ZhbFRyYWNrZXIuZXZlbnRPY2N1cnJlZChTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpW
aXN1YWxseU5vbkVtcHR5TGF5b3V0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zbmFwc2hv
dFJlbW92YWxUcmFja2VyLnN0YXJ0V2F0Y2hkb2coc3dpcGVTbmFwc2hvdFJlbW92YWxXYXRjaGRv
Z0FmdGVyRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0RHVyYXRpb24pOworCisgICAgLy8gRklY
TUU6IElkZWFsbHksIHRoaXMgd291bGQgYmUgc3VmZmljaWVudCB0byBjYW5jZWwgd2FpdGluZyBm
b3IgdGhlIG1haW4gZnJhbWUgbG9hZCwKKyAgICAvLyBhbmQgd291bGQgbWFrZSBzbmFwc2hvdCBy
ZW1vdmFsIGZhc3RlciwgYnV0IHdlIG5lZWQgZGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uCisgICAg
Ly8gdG8gYmUgdXNhYmxlL2FjY3VyYXRlIG9uIGFsbCBwbGF0Zm9ybXMgYmVmb3JlIGRvaW5nIHRo
YXQsIG9yIHdlIGdldCBhIGZsYXNoCisgICAgLy8gb2YgdGhlIG5ldyBwYWdlIGluIHRoZSB3cm9u
ZyBwb3NpdGlvbi4KK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZFJlcGFpbnRB
ZnRlck5hdmlnYXRpb24oKQoreworICAgIG1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5ldmVudE9j
Y3VycmVkKFNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OlJlcGFpbnRBZnRlck5hdmlnYXRpb24pOwor
fQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlkSGl0UmVuZGVyVHJlZVNpemVUaHJl
c2hvbGQoKQoreworICAgIG1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5ldmVudE9jY3VycmVkKFNu
YXBzaG90UmVtb3ZhbFRyYWNrZXI6OlJlbmRlclRyZWVTaXplVGhyZXNob2xkKTsKK30KKwordm9p
ZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbigpCit7Cisg
ICAgbV9zbmFwc2hvdFJlbW92YWxUcmFja2VyLmV2ZW50T2NjdXJyZWQoU25hcHNob3RSZW1vdmFs
VHJhY2tlcjo6U2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbik7Cit9CisKK3ZvaWQgVmlld0dlc3R1
cmVDb250cm9sbGVyOjpkaWRSZWFjaE1haW5GcmFtZUxvYWRUZXJtaW5hbFN0YXRlKCkKK3sKKyAg
ICBpZiAoIW1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5ldmVudE9jY3VycmVkKFNuYXBzaG90UmVt
b3ZhbFRyYWNrZXI6Ok1haW5GcmFtZUxvYWQpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBD
b21pbmcgYmFjayBmcm9tIHRoZSBwYWdlIGNhY2hlIHdpbGwgcmVzdWx0IGluIGdldHRpbmcgYSBs
b2FkIGV2ZW50LCBidXQgbm8gZmlyc3QgdmlzdWFsbHkgbm9uLWVtcHR5IGxheW91dC4KKyAgICAv
LyBXZWJDb3JlIGNvbnNpZGVycyBhIGxvYWRlZCBkb2N1bWVudCBlbm91Z2ggdG8gYmUgY29uc2lk
ZXJlZCB2aXN1YWxseSBub24tZW1wdHksIHNvIHRoYXQncyBnb29kCisgICAgLy8gZW5vdWdoIGZv
ciB1cyB0b28uCisgICAgbV9zbmFwc2hvdFJlbW92YWxUcmFja2VyLmNhbmNlbE91dHN0YW5kaW5n
RXZlbnQoU25hcHNob3RSZW1vdmFsVHJhY2tlcjo6VmlzdWFsbHlOb25FbXB0eUxheW91dCk7CisK
KyAgICBjaGVja0ZvckFjdGl2ZUxvYWRzKCk7Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9s
bGVyOjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yTWFpbkZyYW1lKFNhbWVEb2N1bWVudE5h
dmlnYXRpb25UeXBlIHR5cGUpCit7CisgICAgYm9vbCBjYW5jZWxsZWRPdXRzdGFuZGluZ0V2ZW50
ID0gZmFsc2U7CisKKyAgICAvLyBTYW1lLWRvY3VtZW50IG5hdmlnYXRpb25zIGRvbid0IGhhdmUg
YSBtYWluIGZyYW1lIGxvYWQgb3IgZmlyc3QgdmlzdWFsbHkgbm9uLWVtcHR5IGxheW91dC4KKyAg
ICBjYW5jZWxsZWRPdXRzdGFuZGluZ0V2ZW50IHw9IG1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5j
YW5jZWxPdXRzdGFuZGluZ0V2ZW50KFNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6Ok1haW5GcmFtZUxv
YWQpOworICAgIGNhbmNlbGxlZE91dHN0YW5kaW5nRXZlbnQgfD0gbV9zbmFwc2hvdFJlbW92YWxU
cmFja2VyLmNhbmNlbE91dHN0YW5kaW5nRXZlbnQoU25hcHNob3RSZW1vdmFsVHJhY2tlcjo6Vmlz
dWFsbHlOb25FbXB0eUxheW91dCk7CisKKyAgICBpZiAoIWNhbmNlbGxlZE91dHN0YW5kaW5nRXZl
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0eXBlICE9IFNhbWVEb2N1bWVudE5hdmln
YXRpb25TZXNzaW9uU3RhdGVSZXBsYWNlICYmIHR5cGUgIT0gU2FtZURvY3VtZW50TmF2aWdhdGlv
blNlc3Npb25TdGF0ZVBvcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2hlY2tGb3JBY3RpdmVM
b2FkcygpOworfQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Y2hlY2tGb3JBY3RpdmVM
b2FkcygpCit7CisgICAgaWYgKG1fd2ViUGFnZVByb3h5LnBhZ2VMb2FkU3RhdGUoKS5pc0xvYWRp
bmcoKSkgeworICAgICAgICBpZiAoIW1fc3dpcGVBY3RpdmVMb2FkTW9uaXRvcmluZ1RpbWVyLmlz
QWN0aXZlKCkpCisgICAgICAgICAgICBtX3N3aXBlQWN0aXZlTG9hZE1vbml0b3JpbmdUaW1lci5z
dGFydFJlcGVhdGluZyhzd2lwZVNuYXBzaG90UmVtb3ZhbEFjdGl2ZUxvYWRNb25pdG9yaW5nSW50
ZXJ2YWwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zd2lwZUFjdGl2ZUxvYWRN
b25pdG9yaW5nVGltZXIuc3RvcCgpOworICAgIG1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5ldmVu
dE9jY3VycmVkKFNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OlN1YnJlc291cmNlTG9hZHMpOworfQor
CitTdHJpbmcgVmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpl
dmVudHNEZXNjcmlwdGlvbihWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRy
YWNrZXI6OkV2ZW50cyBldmVudCkKK3sKKyAgICBTdHJpbmcgZGVzY3JpcHRpb247CisKKyAgICBp
ZiAoZXZlbnQgJiBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6
OlZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpCisgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZCgiVmlz
dWFsbHlOb25FbXB0eUxheW91dCAiKTsKKworICAgIGlmIChldmVudCAmIFZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6U25hcHNob3RSZW1vdmFsVHJhY2tlcjo6UmVuZGVyVHJlZVNpemVUaHJlc2hvbGQp
CisgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZCgiUmVuZGVyVHJlZVNpemVUaHJlc2hvbGQgIik7
CisKKyAgICBpZiAoZXZlbnQgJiBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3Zh
bFRyYWNrZXI6OlJlcGFpbnRBZnRlck5hdmlnYXRpb24pCisgICAgICAgIGRlc2NyaXB0aW9uLmFw
cGVuZCgiUmVwYWludEFmdGVyTmF2aWdhdGlvbiAiKTsKKworICAgIGlmIChldmVudCAmIFZpZXdH
ZXN0dXJlQ29udHJvbGxlcjo6U25hcHNob3RSZW1vdmFsVHJhY2tlcjo6TWFpbkZyYW1lTG9hZCkK
KyAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kKCJNYWluRnJhbWVMb2FkICIpOworCisgICAgaWYg
KGV2ZW50ICYgVmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpT
dWJyZXNvdXJjZUxvYWRzKQorICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmQoIlN1YnJlc291cmNl
TG9hZHMgIik7CisKKyAgICBpZiAoZXZlbnQgJiBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBz
aG90UmVtb3ZhbFRyYWNrZXI6OlNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24pCisgICAgICAgIGRl
c2NyaXB0aW9uLmFwcGVuZCgiU2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiAiKTsKKyAgICAKKyAg
ICByZXR1cm4gZGVzY3JpcHRpb247Cit9CisKK1ZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U25hcHNo
b3RSZW1vdmFsVHJhY2tlcjo6U25hcHNob3RSZW1vdmFsVHJhY2tlcigpCisgICAgOiBtX3dhdGNo
ZG9nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmU25hcHNob3RSZW1vdmFsVHJhY2tlcjo6
d2F0Y2hkb2dUaW1lckZpcmVkKQoreworfQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
U25hcHNob3RSZW1vdmFsVHJhY2tlcjo6bG9nKFN0cmluZyBsb2cpCit7CisgICAgYXV0byBub3cg
PSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKKyAgICBkb3VibGUgbWlsbGlzZWNv
bmRzU2luY2VTdGFydCA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjpk
dXJhdGlvbjxkb3VibGUsIHN0ZDo6bWlsbGk+Pihub3cgLSBtX3N0YXJ0VGltZSkuY291bnQoKTsK
KworICAgIExPRyhWaWV3R2VzdHVyZXMsICJTd2lwZSBTbmFwc2hvdCBSZW1vdmFsICglMC4yZiBt
cykgLSAlcyIsIG1pbGxpc2Vjb25kc1NpbmNlU3RhcnQsIGxvZy51dGY4KCkuZGF0YSgpKTsKK30K
Kwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OnN0
YXJ0KEV2ZW50cyBkZXNpcmVkRXZlbnRzLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gcmVtb3ZhbENh
bGxiYWNrKQoreworICAgIG1fb3V0c3RhbmRpbmdFdmVudHMgPSBkZXNpcmVkRXZlbnRzOworICAg
IG1fcmVtb3ZhbENhbGxiYWNrID0gV1RGOjptb3ZlKHJlbW92YWxDYWxsYmFjayk7CisgICAgbV9z
dGFydFRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKKworICAgIGxvZygi
c3RhcnQiKTsKKworICAgIHN0YXJ0V2F0Y2hkb2coc3dpcGVTbmFwc2hvdFJlbW92YWxXYXRjaGRv
Z0R1cmF0aW9uKTsKK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVt
b3ZhbFRyYWNrZXI6OnJlc2V0KCkKK3sKKyAgICBpZiAobV9vdXRzdGFuZGluZ0V2ZW50cykKKyAg
ICAgICAgbG9nKCJyZXNldDsgaGFkIG91dHN0YW5kaW5nIGV2ZW50czogIiArIGV2ZW50c0Rlc2Ny
aXB0aW9uKG1fb3V0c3RhbmRpbmdFdmVudHMpKTsKKyAgICBtX291dHN0YW5kaW5nRXZlbnRzID0g
MDsKKyAgICBtX3dhdGNoZG9nVGltZXIuc3RvcCgpOworICAgIG1fcmVtb3ZhbENhbGxiYWNrID0g
bnVsbHB0cjsKK30KKworYm9vbCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3Zh
bFRyYWNrZXI6OmV2ZW50T2NjdXJyZWQoRXZlbnRzIGV2ZW50KQoreworICAgIEFTU0VSVChoYXNP
bmVCaXRTZXQoZXZlbnQpKTsKKworICAgIGlmICghKG1fb3V0c3RhbmRpbmdFdmVudHMgJiBldmVu
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGxvZygib3V0c3RhbmRpbmcgZXZlbnQg
b2NjdXJyZWQ6ICIgKyAgZXZlbnRzRGVzY3JpcHRpb24oZXZlbnQpKTsKKworICAgIG1fb3V0c3Rh
bmRpbmdFdmVudHMgJj0gfmV2ZW50OworCisgICAgZmlyZVJlbW92YWxDYWxsYmFja0lmUG9zc2li
bGUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OmNhbmNlbE91dHN0YW5kaW5nRXZlbnQoRXZlbnRzIGV2
ZW50KQoreworICAgIEFTU0VSVChoYXNPbmVCaXRTZXQoZXZlbnQpKTsKKworICAgIGlmICghKG1f
b3V0c3RhbmRpbmdFdmVudHMgJiBldmVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGxvZygid2FpdCBmb3IgZXZlbnQgY2FuY2VsbGVkOiAiICsgZXZlbnRzRGVzY3JpcHRpb24oZXZl
bnQpKTsKKworICAgIG1fb3V0c3RhbmRpbmdFdmVudHMgJj0gfmV2ZW50OworCisgICAgZmlyZVJl
bW92YWxDYWxsYmFja0lmUG9zc2libGUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBW
aWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OmZpcmVSZW1vdmFs
Q2FsbGJhY2tJZlBvc3NpYmxlKCkKK3sKKyAgICBpZiAobV9vdXRzdGFuZGluZ0V2ZW50cykgewor
ICAgICAgICBsb2coImRlZmVycmluZyByZW1vdmFsOyBoYWQgb3VzdGFuZGluZyBldmVudHM6ICIg
KyBldmVudHNEZXNjcmlwdGlvbihtX291dHN0YW5kaW5nRXZlbnRzKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBmaXJlUmVtb3ZhbENhbGxiYWNrSW1tZWRpYXRlbHkoKTsKK30KKwor
dm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OmZpcmVS
ZW1vdmFsQ2FsbGJhY2tJbW1lZGlhdGVseSgpCit7CisgICAgbV93YXRjaGRvZ1RpbWVyLnN0b3Ao
KTsKKworICAgIGF1dG8gcmVtb3ZhbENhbGxiYWNrID0gV1RGOjptb3ZlKG1fcmVtb3ZhbENhbGxi
YWNrKTsKKyAgICBpZiAocmVtb3ZhbENhbGxiYWNrKSB7CisgICAgICAgIGxvZygicmVtb3ZlZCBz
bmFwc2hvdCIpOworICAgICAgICByZXNldCgpOworICAgICAgICByZW1vdmFsQ2FsbGJhY2soKTsK
KyAgICB9Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxU
cmFja2VyOjp3YXRjaGRvZ1RpbWVyRmlyZWQoKQoreworICAgIGxvZygid2F0Y2hkb2cgdGltZXIg
ZmlyZWQiKTsKKyAgICBmaXJlUmVtb3ZhbENhbGxiYWNrSW1tZWRpYXRlbHkoKTsKK30KKwordm9p
ZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OnN0YXJ0V2F0
Y2hkb2coc3RkOjpjaHJvbm86OnNlY29uZHMgZHVyYXRpb24pCit7CisgICAgbG9nKFN0cmluZzo6
Zm9ybWF0KCIocmUpc3RhcnRlZCB3YXRjaGRvZyB0aW1lciBmb3IgJWxsZCBzZWNvbmRzIiwgZHVy
YXRpb24uY291bnQoKSkpOworICAgIG1fd2F0Y2hkb2dUaW1lci5zdGFydE9uZVNob3QoZHVyYXRp
b24uY291bnQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW0gYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1ZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbQpp
bmRleCA2MTcyNmM4YzczYTYwZDU2MDg2M2M1NDUxZDQxNDI2NmM1MmQ1NTE4Li5iMzlmYmRhNTQw
NDk3MGM3ODdmZWIwYzRkNmE4MzRiZjcwNjA4OWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvaW9zL1ZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1ZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbQpAQCAtNjQs
MTUgKzY0LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB9CiAKIHN0YXRpYyBjb25zdCBm
bG9hdCBzd2lwZVNuYXBzaG90UmVtb3ZhbFJlbmRlclRyZWVTaXplVGFyZ2V0RnJhY3Rpb24gPSAw
LjU7Ci1zdGF0aWMgY29uc3Qgc3RkOjpjaHJvbm86OnNlY29uZHMgc3dpcGVTbmFwc2hvdFJlbW92
YWxXYXRjaGRvZ0R1cmF0aW9uID0gM19zOwotc3RhdGljIGNvbnN0IHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMgc3dpcGVTbmFwc2hvdFJlbW92YWxBY3RpdmVMb2FkTW9uaXRvcmluZ0ludGVydmFs
ID0gMjUwX21zOwotCi0vLyBUaGUga2V5IGluIHRoaXMgbWFwIGlzIHRoZSBhc3NvY2lhdGVkIHBh
Z2UgSUQuCi1zdGF0aWMgSGFzaE1hcDx1aW50NjRfdCwgV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRy
b2xsZXIqPiYgdmlld0dlc3R1cmVDb250cm9sbGVyc0ZvckFsbFBhZ2VzKCkKLXsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDx1aW50NjRfdCwgV2ViS2l0OjpWaWV3R2VzdHVyZUNv
bnRyb2xsZXIqPj4gdmlld0dlc3R1cmVDb250cm9sbGVyczsKLSAgICByZXR1cm4gdmlld0dlc3R1
cmVDb250cm9sbGVycy5nZXQoKTsKLX0KIAogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmlld0dl
c3R1cmVDb250cm9sbGVyOihXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlciopZ2VzdHVyZUNv
bnRyb2xsZXIgZ2VzdHVyZVJlY29nbml6ZXJWaWV3OihVSVZpZXcgKilnZXN0dXJlUmVjb2duaXpl
clZpZXcKIHsKQEAgLTE0NiwyMSArMTM3LDEyIEBAIHN0YXRpYyBIYXNoTWFwPHVpbnQ2NF90LCBX
ZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcio+JiB2aWV3R2VzdHVyZUNvbnRyb2xsZXJzCiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1WaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlZpZXdHZXN0dXJl
Q29udHJvbGxlcihXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKLSAgICA6IG1fd2ViUGFnZVBy
b3h5KHdlYlBhZ2VQcm94eSkKLSAgICAsIG1fc3dpcGVXYXRjaGRvZ1RpbWVyKFJ1bkxvb3A6Om1h
aW4oKSwgdGhpcywgJlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c3dpcGVTbmFwc2hvdFdhdGNoZG9n
VGltZXJGaXJlZCkKLSAgICAsIG1fc3dpcGVBY3RpdmVMb2FkTW9uaXRvcmluZ1RpbWVyKFJ1bkxv
b3A6Om1haW4oKSwgdGhpcywgJlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YWN0aXZlTG9hZE1vbml0
b3JpbmdUaW1lckZpcmVkKQotewotICAgIHZpZXdHZXN0dXJlQ29udHJvbGxlcnNGb3JBbGxQYWdl
cygpLmFkZCh3ZWJQYWdlUHJveHkucGFnZUlEKCksIHRoaXMpOwotfQotCi1WaWV3R2VzdHVyZUNv
bnRyb2xsZXI6On5WaWV3R2VzdHVyZUNvbnRyb2xsZXIoKQordm9pZCBWaWV3R2VzdHVyZUNvbnRy
b2xsZXI6OnBsYXRmb3JtVGVhcmRvd24oKQogewogICAgIFttX3N3aXBlVHJhbnNpdGlvbkNvbnRl
eHQgX3NldFRyYW5zaXRpb25Jc0luRmxpZ2h0Ok5PXTsKICAgICBbbV9zd2lwZVRyYW5zaXRpb25D
b250ZXh0IF9zZXRJbnRlcmFjdG9yOm5pbF07CiAgICAgW21fc3dpcGVUcmFuc2l0aW9uQ29udGV4
dCBfc2V0QW5pbWF0b3I6bmlsXTsKICAgICBbbV9zd2lwZUludGVyYWN0aXZlVHJhbnNpdGlvbkRl
bGVnYXRlIGludmFsaWRhdGVdOwotICAgIHZpZXdHZXN0dXJlQ29udHJvbGxlcnNGb3JBbGxQYWdl
cygpLnJlbW92ZShtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgVmlld0dlc3R1
cmVDb250cm9sbGVyOjpzZXRBbHRlcm5hdGVCYWNrRm9yd2FyZExpc3RTb3VyY2VWaWV3KFdLV2Vi
VmlldyAqdmlldykKQEAgLTI0OSw5ICsyMzEsOCBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6YmVnaW5Td2lwZUdlc3R1cmUoX1VJTmF2aWdhdGlvbkludGVyYWN0aXZlVHJhbnNpdGlvbgog
ICAgIH1dOwogICAgIHVpbnQ2NF90IHBhZ2VJRCA9IG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpOwog
ICAgIFttX3N3aXBlVHJhbnNpdGlvbkNvbnRleHQgX3NldENvbXBsZXRpb25IYW5kbGVyOl4oX1VJ
Vmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29udGV4dCAqY29udGV4dCwgQk9PTCBkaWRDb21wbGV0
ZSkgewotICAgICAgICBhdXRvIGdlc3R1cmVDb250cm9sbGVySXRlciA9IHZpZXdHZXN0dXJlQ29u
dHJvbGxlcnNGb3JBbGxQYWdlcygpLmZpbmQocGFnZUlEKTsKLSAgICAgICAgaWYgKGdlc3R1cmVD
b250cm9sbGVySXRlciAhPSB2aWV3R2VzdHVyZUNvbnRyb2xsZXJzRm9yQWxsUGFnZXMoKS5lbmQo
KSkKLSAgICAgICAgICAgIGdlc3R1cmVDb250cm9sbGVySXRlci0+dmFsdWUtPmVuZFN3aXBlR2Vz
dHVyZSh0YXJnZXRJdGVtLmdldCgpLCBjb250ZXh0LCAhZGlkQ29tcGxldGUpOworICAgICAgICBp
ZiAoYXV0byBnZXN0dXJlQ29udHJvbGxlciA9IGdlc3R1cmVDb250cm9sbGVyRm9yUGFnZShwYWdl
SUQpKQorICAgICAgICAgICAgZ2VzdHVyZUNvbnRyb2xsZXItPmVuZFN3aXBlR2VzdHVyZSh0YXJn
ZXRJdGVtLmdldCgpLCBjb250ZXh0LCAhZGlkQ29tcGxldGUpOwogICAgIH1dOwogICAgIFttX3N3
aXBlVHJhbnNpdGlvbkNvbnRleHQgX3NldEludGVyYWN0aXZlVXBkYXRlSGFuZGxlcjpeKEJPT0ws
IENHRmxvYXQsIEJPT0wsIF9VSVZpZXdDb250cm9sbGVyVHJhbnNpdGlvbkNvbnRleHQgKikgeyB9
XTsKIApAQCAtMzA2LDkgKzI4NywxMCBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZW5k
U3dpcGVHZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0ZW0sCiAgICAgICAg
IHVpbnQ2NF90IHBhZ2VJRCA9IG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpOwogICAgICAgICB1aW50
NjRfdCBnZXN0dXJlUGVuZGluZ1NuYXBzaG90UmVtb3ZhbCA9IG1fZ2VzdHVyZVBlbmRpbmdTbmFw
c2hvdFJlbW92YWw7CiAgICAgICAgIGRyYXdpbmdBcmVhLT5kaXNwYXRjaEFmdGVyRW5zdXJpbmdE
cmF3aW5nKFtwYWdlSUQsIGdlc3R1cmVQZW5kaW5nU25hcHNob3RSZW1vdmFsXSAoQ2FsbGJhY2tC
YXNlOjpFcnJvciBlcnJvcikgewotICAgICAgICAgICAgYXV0byBnZXN0dXJlQ29udHJvbGxlckl0
ZXIgPSB2aWV3R2VzdHVyZUNvbnRyb2xsZXJzRm9yQWxsUGFnZXMoKS5maW5kKHBhZ2VJRCk7Ci0g
ICAgICAgICAgICBpZiAoZ2VzdHVyZUNvbnRyb2xsZXJJdGVyICE9IHZpZXdHZXN0dXJlQ29udHJv
bGxlcnNGb3JBbGxQYWdlcygpLmVuZCgpICYmIGdlc3R1cmVDb250cm9sbGVySXRlci0+dmFsdWUt
Pm1fZ2VzdHVyZVBlbmRpbmdTbmFwc2hvdFJlbW92YWwgPT0gZ2VzdHVyZVBlbmRpbmdTbmFwc2hv
dFJlbW92YWwpCi0gICAgICAgICAgICAgICAgZ2VzdHVyZUNvbnRyb2xsZXJJdGVyLT52YWx1ZS0+
d2lsbENvbW1pdFBvc3RTd2lwZVRyYW5zaXRpb25MYXllclRyZWUoZXJyb3IgPT0gQ2FsbGJhY2tC
YXNlOjpFcnJvcjo6Tm9uZSk7CisgICAgICAgICAgICBpZiAoYXV0byBnZXN0dXJlQ29udHJvbGxl
ciA9IGdlc3R1cmVDb250cm9sbGVyRm9yUGFnZShwYWdlSUQpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGdlc3R1cmVDb250cm9sbGVyLT5tX2dlc3R1cmVQZW5kaW5nU25hcHNob3RSZW1vdmFsID09
IGdlc3R1cmVQZW5kaW5nU25hcHNob3RSZW1vdmFsKQorICAgICAgICAgICAgICAgICAgICBnZXN0
dXJlQ29udHJvbGxlci0+d2lsbENvbW1pdFBvc3RTd2lwZVRyYW5zaXRpb25MYXllclRyZWUoZXJy
b3IgPT0gQ2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0pOwogICAgICAgICBkcmF3aW5nQXJlYS0+aGlkZUNvbnRlbnRVbnRpbFBlbmRpbmdVcGRhdGUo
KTsKICAgICB9IGVsc2UgewpAQCAtMzE2LDEzICsyOTgsMTQgQEAgdm9pZCBWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OmVuZFN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJ
dGVtLAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zd2lwZVdhaXRpbmdGb3JSZW5k
ZXJUcmVlU2l6ZVRocmVzaG9sZCA9IHRydWU7Ci0gICAgbV9zd2lwZVdhaXRpbmdGb3JSZXBhaW50
ID0gdHJ1ZTsKLSAgICBtX3N3aXBlV2FpdGluZ0ZvclRlcm1pbmFsTG9hZGluZ1N0YXRlID0gdHJ1
ZTsKLSAgICBtX3N3aXBlV2FpdGluZ0ZvclN1YnJlc291cmNlTG9hZHMgPSB0cnVlOwotICAgIG1f
c3dpcGVXYWl0aW5nRm9yU2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiA9IHRydWU7Ci0KLSAgICBt
X3N3aXBlV2F0Y2hkb2dUaW1lci5zdGFydE9uZVNob3Qoc3dpcGVTbmFwc2hvdFJlbW92YWxXYXRj
aGRvZ0R1cmF0aW9uLmNvdW50KCkpOworICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ugd2FpdCBmb3Ig
VmlzdWFsbHlOb25FbXB0eUxheW91dCBsaWtlIHdlIGRvIG9uIE1hYz8KKyAgICBtX3NuYXBzaG90
UmVtb3ZhbFRyYWNrZXIuc3RhcnQoU25hcHNob3RSZW1vdmFsVHJhY2tlcjo6UmVuZGVyVHJlZVNp
emVUaHJlc2hvbGQKKyAgICAgICAgfCBTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpSZXBhaW50QWZ0
ZXJOYXZpZ2F0aW9uCisgICAgICAgIHwgU25hcHNob3RSZW1vdmFsVHJhY2tlcjo6TWFpbkZyYW1l
TG9hZAorICAgICAgICB8IFNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OlN1YnJlc291cmNlTG9hZHMK
KyAgICAgICAgfCBTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpTY3JvbGxQb3NpdGlvblJlc3RvcmF0
aW9uLCBbXSB7CisgICAgICAgICAgICByZW1vdmVTd2lwZVNuYXBzaG90KCk7CisgICAgfSk7CiAK
ICAgICBpZiAoVmlld1NuYXBzaG90KiBzbmFwc2hvdCA9IHRhcmdldEl0ZW0tPnNuYXBzaG90KCkp
IHsKICAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3JGb3JDdXJyZW50U25hcHNob3QgPSBzbmFwc2hv
dC0+YmFja2dyb3VuZENvbG9yKCk7CkBAIC0zMzAsMTI2ICszMTMsMzcgQEAgdm9pZCBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI6OmVuZFN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0
YXJnZXRJdGVtLAogICAgIH0KIH0KIAotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OndpbGxD
b21taXRQb3N0U3dpcGVUcmFuc2l0aW9uTGF5ZXJUcmVlKGJvb2wgc3VjY2Vzc2Z1bCkKLXsKLSAg
ICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXN1Y2Nlc3NmdWwpIHsKLSAgICAgICAgcmVtb3ZlU3dp
cGVTbmFwc2hvdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3N3aXBl
V2FpdGluZ0ZvclJlcGFpbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3dpcGVXYWl0aW5n
Rm9yUmVwYWludCA9IGZhbHNlOwotICAgIHJlbW92ZVN3aXBlU25hcHNob3RJZlJlYWR5KCk7Ci19
Ci0KIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpzZXRSZW5kZXJUcmVlU2l6ZSh1aW50NjRf
dCByZW5kZXJUcmVlU2l6ZSkKIHsKICAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3
R2VzdHVyZVR5cGU6OlN3aXBlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fc3dpcGVX
YWl0aW5nRm9yUmVuZGVyVHJlZVNpemVUaHJlc2hvbGQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICghbV9zbmFwc2hvdFJlbW92YWxUYXJnZXRSZW5kZXJUcmVlU2l6ZSB8fCByZW5kZXJUcmVl
U2l6ZSA+IG1fc25hcHNob3RSZW1vdmFsVGFyZ2V0UmVuZGVyVHJlZVNpemUpIHsKLSAgICAgICAg
bV9zd2lwZVdhaXRpbmdGb3JSZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCA9IGZhbHNlOwotICAgICAg
ICByZW1vdmVTd2lwZVNuYXBzaG90SWZSZWFkeSgpOwotICAgIH0KKyAgICBpZiAoIW1fc25hcHNo
b3RSZW1vdmFsVGFyZ2V0UmVuZGVyVHJlZVNpemUgfHwgcmVuZGVyVHJlZVNpemUgPiBtX3NuYXBz
aG90UmVtb3ZhbFRhcmdldFJlbmRlclRyZWVTaXplKQorICAgICAgICBkaWRIaXRSZW5kZXJUcmVl
U2l6ZVRocmVzaG9sZCgpOwogfQogCi12b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlkUmVz
dG9yZVNjcm9sbFBvc2l0aW9uKCkKLXsKLSAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBW
aWV3R2VzdHVyZVR5cGU6OlN3aXBlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fc3dp
cGVXYWl0aW5nRm9yU2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9zd2lwZVdhaXRpbmdGb3JTY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uID0gZmFsc2U7
Ci0gICAgcmVtb3ZlU3dpcGVTbmFwc2hvdElmUmVhZHkoKTsKLX0KLQotdm9pZCBWaWV3R2VzdHVy
ZUNvbnRyb2xsZXI6Om1haW5GcmFtZUxvYWREaWRSZWFjaFRlcm1pbmFsU3RhdGUoKQordm9pZCBW
aWV3R2VzdHVyZUNvbnRyb2xsZXI6OndpbGxDb21taXRQb3N0U3dpcGVUcmFuc2l0aW9uTGF5ZXJU
cmVlKGJvb2wgc3VjY2Vzc2Z1bCkKIHsKICAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBW
aWV3R2VzdHVyZVR5cGU6OlN3aXBlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fc3dp
cGVXYWl0aW5nRm9yVGVybWluYWxMb2FkaW5nU3RhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fc3dpcGVXYWl0aW5nRm9yVGVybWluYWxMb2FkaW5nU3RhdGUgPSBmYWxzZTsKLQotICAgIGlm
IChtX3dlYlBhZ2VQcm94eS5wYWdlTG9hZFN0YXRlKCkuaXNMb2FkaW5nKCkpIHsKLSAgICAgICAg
bV9zd2lwZUFjdGl2ZUxvYWRNb25pdG9yaW5nVGltZXIuc3RhcnRSZXBlYXRpbmcoc3dpcGVTbmFw
c2hvdFJlbW92YWxBY3RpdmVMb2FkTW9uaXRvcmluZ0ludGVydmFsKTsKKyAgICBpZiAoIXN1Y2Nl
c3NmdWwpIHsKKyAgICAgICAgcmVtb3ZlU3dpcGVTbmFwc2hvdCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgbV9zd2lwZVdhaXRpbmdGb3JTdWJyZXNvdXJjZUxvYWRzID0gZmFsc2U7
Ci0gICAgcmVtb3ZlU3dpcGVTbmFwc2hvdElmUmVhZHkoKTsKLX0KLQotdm9pZCBWaWV3R2VzdHVy
ZUNvbnRyb2xsZXI6OmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JNYWluRnJhbWUoU2FtZURv
Y3VtZW50TmF2aWdhdGlvblR5cGUgdHlwZSkKLXsKLSAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlw
ZSAhPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBU
aGlzIGlzIG5lYXJseSBlcXVpdmFsZW50IHRvIGRpZEZpbmlzaExvYWQgaW4gdGhlIHNhbWUgZG9j
dW1lbnQgbmF2aWdhdGlvbiBjYXNlLgotICAgIGlmICghbV9zd2lwZVdhaXRpbmdGb3JUZXJtaW5h
bExvYWRpbmdTdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zd2lwZVdhaXRpbmdGb3JU
ZXJtaW5hbExvYWRpbmdTdGF0ZSA9IGZhbHNlOwotCi0gICAgaWYgKHR5cGUgIT0gU2FtZURvY3Vt
ZW50TmF2aWdhdGlvblNlc3Npb25TdGF0ZVJlcGxhY2UgJiYgdHlwZSAhPSBTYW1lRG9jdW1lbnRO
YXZpZ2F0aW9uU2Vzc2lvblN0YXRlUG9wKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N3aXBl
QWN0aXZlTG9hZE1vbml0b3JpbmdUaW1lci5zdGFydFJlcGVhdGluZyhzd2lwZVNuYXBzaG90UmVt
b3ZhbEFjdGl2ZUxvYWRNb25pdG9yaW5nSW50ZXJ2YWwpOwotfQotCi12b2lkIFZpZXdHZXN0dXJl
Q29udHJvbGxlcjo6YWN0aXZlTG9hZE1vbml0b3JpbmdUaW1lckZpcmVkKCkKLXsKLSAgICBpZiAo
bV93ZWJQYWdlUHJveHkucGFnZUxvYWRTdGF0ZSgpLmlzTG9hZGluZygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIW1fc3dpcGVXYWl0aW5nRm9yU3VicmVzb3VyY2VMb2FkcykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9zd2lwZVdhaXRpbmdGb3JTdWJyZXNvdXJjZUxvYWRzID0gZmFs
c2U7Ci0gICAgcmVtb3ZlU3dpcGVTbmFwc2hvdElmUmVhZHkoKTsKLX0KLQotdm9pZCBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI6OnN3aXBlU25hcHNob3RXYXRjaGRvZ1RpbWVyRmlyZWQoKQotewotICAg
IHJlbW92ZVN3aXBlU25hcHNob3QoKTsKLX0KLQotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
OnJlbW92ZVN3aXBlU25hcHNob3RJZlJlYWR5KCkKLXsKLSAgICBpZiAobV9zd2lwZVdhaXRpbmdG
b3JSZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCB8fCBtX3N3aXBlV2FpdGluZ0ZvclJlcGFpbnQgfHwg
bV9zd2lwZVdhaXRpbmdGb3JUZXJtaW5hbExvYWRpbmdTdGF0ZSB8fCBtX3N3aXBlV2FpdGluZ0Zv
clN1YnJlc291cmNlTG9hZHMgfHwgbV9zd2lwZVdhaXRpbmdGb3JTY3JvbGxQb3NpdGlvblJlc3Rv
cmF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZW1vdmVTd2lwZVNuYXBzaG90KCk7Cisg
ICAgZGlkUmVwYWludEFmdGVyTmF2aWdhdGlvbigpOwogfQogCiB2b2lkIFZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6cmVtb3ZlU3dpcGVTbmFwc2hvdCgpCiB7Ci0gICAgbV9zd2lwZVdhaXRpbmdGb3JS
ZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCA9IGZhbHNlOwotICAgIG1fc3dpcGVXYWl0aW5nRm9yUmVw
YWludCA9IGZhbHNlOwotICAgIG1fc3dpcGVXYWl0aW5nRm9yVGVybWluYWxMb2FkaW5nU3RhdGUg
PSBmYWxzZTsKLSAgICBtX3N3aXBlV2FpdGluZ0ZvclN1YnJlc291cmNlTG9hZHMgPSBmYWxzZTsK
LSAgICBtX3N3aXBlV2FpdGluZ0ZvclNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24gPSBmYWxzZTsK
LQotICAgIG1fc3dpcGVXYXRjaGRvZ1RpbWVyLnN0b3AoKTsKLSAgICBtX3N3aXBlQWN0aXZlTG9h
ZE1vbml0b3JpbmdUaW1lci5zdG9wKCk7CisgICAgbV9zbmFwc2hvdFJlbW92YWxUcmFja2VyLnJl
c2V0KCk7CiAKICAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6
OlN3aXBlKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICArK21fZ2VzdHVyZVBlbmRpbmdT
bmFwc2hvdFJlbW92YWw7Ci0gICAgCisKICAgICBbbV9zbmFwc2hvdFZpZXcgcmVtb3ZlRnJvbVN1
cGVydmlld107CiAgICAgbV9zbmFwc2hvdFZpZXcgPSBudWxscHRyOwogICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyLmgKaW5k
ZXggMmE5MGZjOTFkZmM5ZjkwNWJkMGUzNmFmYzk0MmI4MzM1YjBmMGFmMS4uYzE1OWU0OWE5ZGIy
NTM5MGM3NDMxZjZlMjYyNjUwNTA2MjAyYWY5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5oCkBAIC0zMSw5ICszMSwxMiBA
QAogI2luY2x1ZGUgIldlYWtPYmpDUHRyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8Y2hyb25vPgogI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCisvLyBGSVhN
RTogTW92ZSB0aGlzIGZpbGUgb3V0IG9mIHRoZSBtYWMvIHN1YmRpcmVjdG9yeS4KKwogT0JKQ19D
TEFTUyBDQUxheWVyOwogCiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtNjUsNiArNjgsNyBAQCBjbGFz
cyBWaWV3R2VzdHVyZUNvbnRyb2xsZXIgOiBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsK
IHB1YmxpYzoKICAgICBWaWV3R2VzdHVyZUNvbnRyb2xsZXIoV2ViUGFnZVByb3h5Jik7CiAgICAg
flZpZXdHZXN0dXJlQ29udHJvbGxlcigpOworICAgIHZvaWQgcGxhdGZvcm1UZWFyZG93bigpOwog
ICAgIAogICAgIGVudW0gY2xhc3MgVmlld0dlc3R1cmVUeXBlIHsKICAgICAgICAgTm9uZSwKQEAg
LTEwOSw4ICsxMTMsNiBAQCBwdWJsaWM6CiAKICAgICBib29sIHNob3VsZElnbm9yZVBpbm5lZFN0
YXRlKCkgeyByZXR1cm4gbV9zaG91bGRJZ25vcmVQaW5uZWRTdGF0ZTsgfQogICAgIHZvaWQgc2V0
U2hvdWxkSWdub3JlUGlubmVkU3RhdGUoYm9vbCBpZ25vcmUpIHsgbV9zaG91bGRJZ25vcmVQaW5u
ZWRTdGF0ZSA9IGlnbm9yZTsgfQotCi0gICAgdm9pZCBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlM
YXlvdXRGb3JNYWluRnJhbWUoKTsKICNlbHNlCiAgICAgdm9pZCBpbnN0YWxsU3dpcGVIYW5kbGVy
KFVJVmlldyAqZ2VzdHVyZVJlY29nbml6ZXJWaWV3LCBVSVZpZXcgKnN3aXBpbmdWaWV3KTsKICAg
ICB2b2lkIHNldEFsdGVybmF0ZUJhY2tGb3J3YXJkTGlzdFNvdXJjZVZpZXcoV0tXZWJWaWV3ICop
OwpAQCAtMTE5LDMwICsxMjEsNzAgQEAgcHVibGljOgogICAgIHZvaWQgZW5kU3dpcGVHZXN0dXJl
KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0ZW0sIF9VSVZpZXdDb250cm9sbGVyVHJh
bnNpdGlvbkNvbnRleHQgKiwgYm9vbCBjYW5jZWxsZWQpOwogICAgIHZvaWQgd2lsbENvbW1pdFBv
c3RTd2lwZVRyYW5zaXRpb25MYXllclRyZWUoYm9vbCk7CiAgICAgdm9pZCBzZXRSZW5kZXJUcmVl
U2l6ZSh1aW50NjRfdCk7Ci0gICAgdm9pZCBkaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24oKTsKICNl
bmRpZgogCi0gICAgdm9pZCBkaWRGaW5pc2hMb2FkRm9yTWFpbkZyYW1lKCkgeyBtYWluRnJhbWVM
b2FkRGlkUmVhY2hUZXJtaW5hbFN0YXRlKCk7IH0KLSAgICB2b2lkIGRpZEZhaWxMb2FkRm9yTWFp
bkZyYW1lKCkgeyBtYWluRnJhbWVMb2FkRGlkUmVhY2hUZXJtaW5hbFN0YXRlKCk7IH0KLSAgICB2
b2lkIG1haW5GcmFtZUxvYWREaWRSZWFjaFRlcm1pbmFsU3RhdGUoKTsKLSAgICB2b2lkIHJlbW92
ZVN3aXBlU25hcHNob3QoKTsKKyAgICBXZWJDb3JlOjpDb2xvciBiYWNrZ3JvdW5kQ29sb3JGb3JD
dXJyZW50U25hcHNob3QoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvckZvckN1cnJl
bnRTbmFwc2hvdDsgfQorCisgICAgdm9pZCBkaWRGaW5pc2hMb2FkRm9yTWFpbkZyYW1lKCkgeyBk
aWRSZWFjaE1haW5GcmFtZUxvYWRUZXJtaW5hbFN0YXRlKCk7IH0KKyAgICB2b2lkIGRpZEZhaWxM
b2FkRm9yTWFpbkZyYW1lKCkgeyBkaWRSZWFjaE1haW5GcmFtZUxvYWRUZXJtaW5hbFN0YXRlKCk7
IH0KKyAgICB2b2lkIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvck1haW5GcmFtZSgp
OworICAgIHZvaWQgZGlkUmVwYWludEFmdGVyTmF2aWdhdGlvbigpOworICAgIHZvaWQgZGlkSGl0
UmVuZGVyVHJlZVNpemVUaHJlc2hvbGQoKTsKKyAgICB2b2lkIGRpZFJlc3RvcmVTY3JvbGxQb3Np
dGlvbigpOworICAgIHZvaWQgZGlkUmVhY2hNYWluRnJhbWVMb2FkVGVybWluYWxTdGF0ZSgpOwog
ICAgIHZvaWQgZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvck1haW5GcmFtZShTYW1lRG9jdW1l
bnROYXZpZ2F0aW9uVHlwZSk7CiAKLSAgICBXZWJDb3JlOjpDb2xvciBiYWNrZ3JvdW5kQ29sb3JG
b3JDdXJyZW50U25hcHNob3QoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvckZvckN1
cnJlbnRTbmFwc2hvdDsgfQorICAgIHZvaWQgY2hlY2tGb3JBY3RpdmVMb2FkcygpOworCisgICAg
dm9pZCByZW1vdmVTd2lwZVNuYXBzaG90KCk7CiAKIHByaXZhdGU6CiAgICAgLy8gSVBDOjpNZXNz
YWdlUmVjZWl2ZXIuCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc3dp
cGVTbmFwc2hvdFdhdGNoZG9nVGltZXJGaXJlZCgpOwotICAgIHZvaWQgYWN0aXZlTG9hZE1vbml0
b3JpbmdUaW1lckZpcmVkKCk7CisgICAgc3RhdGljIFZpZXdHZXN0dXJlQ29udHJvbGxlciogZ2Vz
dHVyZUNvbnRyb2xsZXJGb3JQYWdlKHVpbnQ2NF90KTsKKworICAgIGNsYXNzIFNuYXBzaG90UmVt
b3ZhbFRyYWNrZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgZW51bSBFdmVudCA6IHVpbnQ4X3Qg
eworICAgICAgICAgICAgVmlzdWFsbHlOb25FbXB0eUxheW91dCA9IDEgPDwgMCwKKyAgICAgICAg
ICAgIFJlbmRlclRyZWVTaXplVGhyZXNob2xkID0gMSA8PCAxLAorICAgICAgICAgICAgUmVwYWlu
dEFmdGVyTmF2aWdhdGlvbiA9IDEgPDwgMiwKKyAgICAgICAgICAgIE1haW5GcmFtZUxvYWQgPSAx
IDw8IDMsCisgICAgICAgICAgICBTdWJyZXNvdXJjZUxvYWRzID0gMSA8PCA0LAorICAgICAgICAg
ICAgU2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiA9IDEgPDwgNQorICAgICAgICB9OworICAgICAg
ICB0eXBlZGVmIHVpbnQ4X3QgRXZlbnRzOworCisgICAgICAgIFNuYXBzaG90UmVtb3ZhbFRyYWNr
ZXIoKTsKKworICAgICAgICB2b2lkIHN0YXJ0KEV2ZW50cywgc3RkOjpmdW5jdGlvbjx2b2lkKCk+
KTsKKyAgICAgICAgdm9pZCByZXNldCgpOworCisgICAgICAgIGJvb2wgZXZlbnRPY2N1cnJlZChF
dmVudHMpOworICAgICAgICBib29sIGNhbmNlbE91dHN0YW5kaW5nRXZlbnQoRXZlbnRzKTsKKwor
ICAgICAgICB2b2lkIHN0YXJ0V2F0Y2hkb2coc3RkOjpjaHJvbm86OnNlY29uZHMpOworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgdm9pZCBsb2coU3RyaW5nKTsKKyAgICAgICAgU3RyaW5nIGV2ZW50
c0Rlc2NyaXB0aW9uKEV2ZW50cyk7CisKKyAgICAgICAgdm9pZCBmaXJlUmVtb3ZhbENhbGxiYWNr
SW1tZWRpYXRlbHkoKTsKKyAgICAgICAgdm9pZCBmaXJlUmVtb3ZhbENhbGxiYWNrSWZQb3NzaWJs
ZSgpOworICAgICAgICB2b2lkIHdhdGNoZG9nVGltZXJGaXJlZCgpOworCisgICAgICAgIEV2ZW50
cyBtX291dHN0YW5kaW5nRXZlbnRzIHsgMCB9OworICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gbV9yZW1vdmFsQ2FsbGJhY2s7CisgICAgICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6
OnRpbWVfcG9pbnQgbV9zdGFydFRpbWU7CisKKyAgICAgICAgUnVuTG9vcDo6VGltZXI8U25hcHNo
b3RSZW1vdmFsVHJhY2tlcj4gbV93YXRjaGRvZ1RpbWVyOworICAgIH07CiAKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgLy8gTWVzc2FnZSBoYW5kbGVycy4KICAgICB2b2lkIGRpZENvbGxlY3RHZW9t
ZXRyeUZvck1hZ25pZmljYXRpb25HZXN0dXJlKFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29u
dGVudEJvdW5kcywgYm9vbCBmcmFtZUhhbmRsZXNNYWduaWZpY2F0aW9uR2VzdHVyZSk7CiAgICAg
dm9pZCBkaWRDb2xsZWN0R2VvbWV0cnlGb3JTbWFydE1hZ25pZmljYXRpb25HZXN0dXJlKFdlYkNv
cmU6OkZsb2F0UG9pbnQgb3JpZ2luLCBXZWJDb3JlOjpGbG9hdFJlY3QgcmVuZGVyUmVjdCwgV2Vi
Q29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50Qm91bmRzLCBib29sIGlzUmVwbGFjZWRFbGVt
ZW50LCBkb3VibGUgdmlld3BvcnRNaW5pbXVtU2NhbGUsIGRvdWJsZSB2aWV3cG9ydE1heGltdW1T
Y2FsZSk7Ci0gICAgdm9pZCBkaWRIaXRSZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCgpOwotICAgIHZv
aWQgcmVtb3ZlU3dpcGVTbmFwc2hvdEFmdGVyUmVwYWludCgpOwogCiAgICAgV2ViQ29yZTo6Rmxv
YXRQb2ludCBzY2FsZWRNYWduaWZpY2F0aW9uT3JpZ2luKFdlYkNvcmU6OkZsb2F0UG9pbnQgb3Jp
Z2luLCBkb3VibGUgc2NhbGUpOwogCkBAIC0xNTksMTQgKzIwMSwxMyBAQCBwcml2YXRlOgogICAg
IENBTGF5ZXIgKmRldGVybWluZUxheWVyQWRqYWNlbnRUb1NuYXBzaG90Rm9yUGFyZW50KFN3aXBl
RGlyZWN0aW9uLCBDQUxheWVyICpzbmFwc2hvdExheWVyUGFyZW50KSBjb25zdDsKICAgICB2b2lk
IGFwcGx5RGVidWdnaW5nUHJvcGVydGllc1RvU3dpcGVWaWV3cygpOwogICAgIHZvaWQgZGlkTW92
ZVN3aXBlU25hcHNob3RMYXllcigpOwotI2Vsc2UKLSAgICB2b2lkIHJlbW92ZVN3aXBlU25hcHNo
b3RJZlJlYWR5KCk7CisKKyAgICB2b2lkIGZvcmNlUmVwYWludElmTmVlZGVkKCk7CiAjZW5kaWYK
IAogICAgIFdlYlBhZ2VQcm94eSYgbV93ZWJQYWdlUHJveHk7CiAgICAgVmlld0dlc3R1cmVUeXBl
IG1fYWN0aXZlR2VzdHVyZVR5cGUgeyBWaWV3R2VzdHVyZVR5cGU6Ok5vbmUgfTsKIAotICAgIFJ1
bkxvb3A6OlRpbWVyPFZpZXdHZXN0dXJlQ29udHJvbGxlcj4gbV9zd2lwZVdhdGNoZG9nVGltZXI7
CiAgICAgUnVuTG9vcDo6VGltZXI8Vmlld0dlc3R1cmVDb250cm9sbGVyPiBtX3N3aXBlQWN0aXZl
TG9hZE1vbml0b3JpbmdUaW1lcjsKIAogICAgIFdlYkNvcmU6OkNvbG9yIG1fYmFja2dyb3VuZENv
bG9yRm9yQ3VycmVudFNuYXBzaG90OwpAQCAtMTc0LDggKzIxNSw2IEBAIHByaXZhdGU6CiAjaWYg
UExBVEZPUk0oTUFDKQogICAgIFJlZlB0cjxWaWV3U25hcHNob3Q+IG1fY3VycmVudFN3aXBlU25h
cHNob3Q7CiAKLSAgICBSdW5Mb29wOjpUaW1lcjxWaWV3R2VzdHVyZUNvbnRyb2xsZXI+IG1fc3dp
cGVXYXRjaGRvZ0FmdGVyRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0VGltZXI7Ci0KICAgICBk
b3VibGUgbV9tYWduaWZpY2F0aW9uOwogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9tYWduaWZp
Y2F0aW9uT3JpZ2luOwogCkBAIC0yMDgsNyArMjQ3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIChe
bV9kaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrKShDR1JlY3QpIHsgbnVsbHB0ciB9OwogCiAg
ICAgYm9vbCBtX3Nob3VsZElnbm9yZVBpbm5lZFN0YXRlIHsgZmFsc2UgfTsKLSAgICBib29sIG1f
c3dpcGVJblByb2dyZXNzIHsgZmFsc2UgfTsKKworICAgIGJvb2wgbV9oYXNPdXRzdGFuZGluZ1Jl
cGFpbnRSZXF1ZXN0IHsgZmFsc2UgfTsKICNlbHNlICAgIAogICAgIFVJVmlldyAqbV9saXZlU3dp
cGVWaWV3IHsgbnVsbHB0ciB9OwogICAgIFJldGFpblB0cjxVSVZpZXc+IG1fbGl2ZVN3aXBlVmll
d0NsaXBwaW5nVmlldzsKQEAgLTIyMiwxMiArMjYyLDcgQEAgcHJpdmF0ZToKICAgICB1aW50NjRf
dCBtX2dlc3R1cmVQZW5kaW5nU25hcHNob3RSZW1vdmFsIHsgMCB9OwogI2VuZGlmCiAKLSAgICBi
b29sIG1fc3dpcGVXYWl0aW5nRm9yVmlzdWFsbHlOb25FbXB0eUxheW91dCB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX3N3aXBlV2FpdGluZ0ZvclJlbmRlclRyZWVTaXplVGhyZXNob2xkIHsgZmFsc2Ug
fTsKLSAgICBib29sIG1fc3dpcGVXYWl0aW5nRm9yUmVwYWludCB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX3N3aXBlV2FpdGluZ0ZvclRlcm1pbmFsTG9hZGluZ1N0YXRlIHsgZmFsc2UgfTsKLSAgICBi
b29sIG1fc3dpcGVXYWl0aW5nRm9yU3VicmVzb3VyY2VMb2FkcyB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX3N3aXBlV2FpdGluZ0ZvclNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24geyBmYWxzZSB9Owor
ICAgIFNuYXBzaG90UmVtb3ZhbFRyYWNrZXIgbV9zbmFwc2hvdFJlbW92YWxUcmFja2VyOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluCmluZGV4
IDE4YzMyNGMwMmNkODEwNmEwZDdjMDZjN2ViYmViNzViNzhlNGQzNWYuLmY1MWZkMmQ3NmM0OTUw
MmRhYTdiM2ZjZDY1YTdjM2UxNmE2YzI3NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmlu
CkBAIC0yMSw3ICsyMSw3IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIG1lc3NhZ2VzIC0+IFZpZXdHZXN0
dXJlQ29udHJvbGxlciB7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAg
ICAgRGlkQ29sbGVjdEdlb21ldHJ5Rm9yTWFnbmlmaWNhdGlvbkdlc3R1cmUoV2ViQ29yZTo6Rmxv
YXRSZWN0IHZpc2libGVDb250ZW50Qm91bmRzLCBib29sIGZyYW1lSGFuZGxlc01hZ25pZmljYXRp
b25HZXN0dXJlKQogICAgIERpZENvbGxlY3RHZW9tZXRyeUZvclNtYXJ0TWFnbmlmaWNhdGlvbkdl
c3R1cmUoV2ViQ29yZTo6RmxvYXRQb2ludCBvcmlnaW4sIFdlYkNvcmU6OkZsb2F0UmVjdCByZW5k
ZXJSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRCb3VuZHMsIGJvb2wgaXNS
ZXBsYWNlZEVsZW1lbnQsIGRvdWJsZSB2aWV3cG9ydE1pbmltdW1TY2FsZSwgZG91YmxlIHZpZXdw
b3J0TWF4aW11bVNjYWxlKQogICAgIERpZEhpdFJlbmRlclRyZWVTaXplVGhyZXNob2xkKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9s
bGVyTWFjLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRy
b2xsZXJNYWMubW0KaW5kZXggMzhiN2UzNjhjNTk5NWEyNDRjOGE3YWY5Y2Q4MjZhODU0Y2Y3NWE3
Yy4uMDMzODZhYTg0YWExYjExZmUzNDY2ODIwZjI2ZTAyMDlmYzE5N2Y0YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0K
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJN
YWMubW0KQEAgLTQ3LDcgKzQ3LDcgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLSNp
ZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEw
MDAKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxMDAwCiAjZGVmaW5l
IEVOQUJMRV9MRUdBQ1lfU1dJUEVfU0hBRE9XX1NUWUxFIDEKICNlbHNlCiAjZGVmaW5lIEVOQUJM
RV9MRUdBQ1lfU1dJUEVfU0hBRE9XX1NUWUxFIDAKQEAgLTc4LDkgKzc4LDYgQEAgc3RhdGljIGNv
bnN0IENHRmxvYXQgbWluaW11bUhvcml6b250YWxTd2lwZURpc3RhbmNlID0gMTU7CiBzdGF0aWMg
Y29uc3QgZmxvYXQgbWluaW11bVNjcm9sbEV2ZW50UmF0aW9Gb3JTd2lwZSA9IDAuNTsKIAogc3Rh
dGljIGNvbnN0IGZsb2F0IHN3aXBlU25hcHNob3RSZW1vdmFsUmVuZGVyVHJlZVNpemVUYXJnZXRG
cmFjdGlvbiA9IDAuNTsKLXN0YXRpYyBjb25zdCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBzd2lwZVNu
YXBzaG90UmVtb3ZhbFdhdGNoZG9nRHVyYXRpb24gPSA1X3M7Ci1zdGF0aWMgY29uc3Qgc3RkOjpj
aHJvbm86OnNlY29uZHMgc3dpcGVTbmFwc2hvdFJlbW92YWxXYXRjaGRvZ0FmdGVyRmlyc3RWaXN1
YWxseU5vbkVtcHR5TGF5b3V0RHVyYXRpb24gPSAzX3M7Ci1zdGF0aWMgY29uc3Qgc3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kcyBzd2lwZVNuYXBzaG90UmVtb3ZhbEFjdGl2ZUxvYWRNb25pdG9yaW5n
SW50ZXJ2YWwgPSAyNTBfbXM7CiAKIEBpbnRlcmZhY2UgV0tTd2lwZUNhbmNlbGxhdGlvblRyYWNr
ZXIgOiBOU09iamVjdCB7CiBAcHJpdmF0ZQpAQCAtOTcsMTYgKzk0LDcgQEAgc3RhdGljIGNvbnN0
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc3dpcGVTbmFwc2hvdFJlbW92YWxBY3RpdmVMb2Fk
TW9uaXRvcmluZ0kKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6Vmlld0dlc3R1cmVDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQotICAg
IDogbV93ZWJQYWdlUHJveHkod2ViUGFnZVByb3h5KQotICAgICwgbV9zd2lwZVdhdGNoZG9nVGlt
ZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVmlld0dlc3R1cmVDb250cm9sbGVyOjpzd2lwZVNu
YXBzaG90V2F0Y2hkb2dUaW1lckZpcmVkKQotICAgICwgbV9zd2lwZUFjdGl2ZUxvYWRNb25pdG9y
aW5nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVmlld0dlc3R1cmVDb250cm9sbGVyOjph
Y3RpdmVMb2FkTW9uaXRvcmluZ1RpbWVyRmlyZWQpCi0gICAgLCBtX3N3aXBlV2F0Y2hkb2dBZnRl
ckZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dFRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywg
JlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c3dpcGVTbmFwc2hvdFdhdGNoZG9nVGltZXJGaXJlZCkK
LXsKLSAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQ
YWdlUHJveHkucGFnZUlEKCksICp0aGlzKTsKLX0KLQotVmlld0dlc3R1cmVDb250cm9sbGVyOjp+
Vmlld0dlc3R1cmVDb250cm9sbGVyKCkKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpwbGF0
Zm9ybVRlYXJkb3duKCkKIHsKICAgICBpZiAobV9zd2lwZUNhbmNlbGxhdGlvblRyYWNrZXIpCiAg
ICAgICAgIFttX3N3aXBlQ2FuY2VsbGF0aW9uVHJhY2tlciBzZXRJc0NhbmNlbGxlZDpZRVNdOwpA
QCAtMTE4LDggKzEwNiw2IEBAIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6flZpZXdHZXN0dXJlQ29u
dHJvbGxlcigpCiAgICAgICAgIEJsb2NrX3JlbGVhc2UobV9kaWRNb3ZlU3dpcGVTbmFwc2hvdENh
bGxiYWNrKTsKICAgICAgICAgbV9kaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrID0gbnVsbHB0
cjsKICAgICB9Ci0KLSAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOwogfQogCiBzdGF0aWMgZG91YmxlIHJlc2lz
dGFuY2VGb3JEZWx0YShkb3VibGUgZGVsdGFTY2FsZSwgZG91YmxlIGN1cnJlbnRTY2FsZSkKQEAg
LTUzNSw3ICs1MjEsNiBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdl
c3R1cmUoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogdGFyZ2V0SXRlbQogICAgIG1fd2ViUGFnZVBy
b3h5Lm5hdmlnYXRpb25HZXN0dXJlRGlkQmVnaW4oKTsKIAogICAgIG1fYWN0aXZlR2VzdHVyZVR5
cGUgPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBlOwotICAgIG1fc3dpcGVJblByb2dyZXNzID0gdHJ1
ZTsKIAogICAgIENBTGF5ZXIgKnJvb3RDb250ZW50TGF5ZXIgPSBtX3dlYlBhZ2VQcm94eS5hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKCk7CiAKQEAgLTc1Miw4ICs3MzcsNiBAQCB2b2lk
IFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZW5kU3dpcGVHZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlz
dEl0ZW0qIHRhcmdldEl0ZW0sCiAKICAgICBtX3N3aXBlQ2FuY2VsbGF0aW9uVHJhY2tlciA9IG51
bGxwdHI7CiAKLSAgICBtX3N3aXBlSW5Qcm9ncmVzcyA9IGZhbHNlOwotCiAgICAgQ0FMYXllciAq
cm9vdExheWVyID0gbV93ZWJQYWdlUHJveHkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXll
cigpOwogCiAgICAgW3Jvb3RMYXllciBzZXRTaGFkb3dPcGFjaXR5OjBdOwpAQCAtNzcxLDExMCAr
NzU0LDQ3IEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjplbmRTd2lwZUdlc3R1cmUoV2Vi
QmFja0ZvcndhcmRMaXN0SXRlbSogdGFyZ2V0SXRlbSwKIAogICAgIG1fd2ViUGFnZVByb3h5LnBy
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yOjpTZXRS
ZW5kZXJUcmVlU2l6ZU5vdGlmaWNhdGlvblRocmVzaG9sZChyZW5kZXJUcmVlU2l6ZSAqIHN3aXBl
U25hcHNob3RSZW1vdmFsUmVuZGVyVHJlZVNpemVUYXJnZXRGcmFjdGlvbiksIG1fd2ViUGFnZVBy
b3h5LnBhZ2VJRCgpKTsKIAotICAgIG1fc3dpcGVXYWl0aW5nRm9yVmlzdWFsbHlOb25FbXB0eUxh
eW91dCA9IHRydWU7Ci0gICAgbV9zd2lwZVdhaXRpbmdGb3JSZW5kZXJUcmVlU2l6ZVRocmVzaG9s
ZCA9IHRydWU7Ci0KICAgICBtX3dlYlBhZ2VQcm94eS5uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCh0
cnVlLCAqdGFyZ2V0SXRlbSk7CiAgICAgbV93ZWJQYWdlUHJveHkuZ29Ub0JhY2tGb3J3YXJkSXRl
bSh0YXJnZXRJdGVtKTsKIAorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBpbmNs
dWRlIHNjcm9sbCBwb3NpdGlvbiByZXN0b3JhdGlvbiBoZXJlLAorICAgIC8vIGFuZCB0aGVuIGNh
biBhZGRyZXNzIHRoZSBGSVhNRSBpbiBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JN
YWluRnJhbWUuCisgICAgbV9zbmFwc2hvdFJlbW92YWxUcmFja2VyLnN0YXJ0KFNuYXBzaG90UmVt
b3ZhbFRyYWNrZXI6OlZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQKKyAgICAgICAgfCBTbmFwc2hvdFJl
bW92YWxUcmFja2VyOjpSZW5kZXJUcmVlU2l6ZVRocmVzaG9sZAorICAgICAgICB8IFNuYXBzaG90
UmVtb3ZhbFRyYWNrZXI6Ok1haW5GcmFtZUxvYWQKKyAgICAgICAgfCBTbmFwc2hvdFJlbW92YWxU
cmFja2VyOjpTdWJyZXNvdXJjZUxvYWRzLCBbdGhpc10geworICAgICAgICAgICAgdGhpcy0+Zm9y
Y2VSZXBhaW50SWZOZWVkZWQoKTsKKyAgICAgICAgfSk7CisKICAgICAvLyBGSVhNRTogTGlrZSBv
biBpT1MsIHdlIHNob3VsZCBlbnN1cmUgdGhhdCBldmVuIGlmIG9uZSBvZiB0aGUgdGltZW91dHMg
ZmlyZXMsCi0gICAgLy8gd2UgbmV2ZXIgc2hvdyB0aGUgb2xkIHBhZ2UgY29udGVudCwgaW5zdGVh
ZCBzaG93aW5nIHdoaXRlIChvciB0aGUgc25hcHNob3QgYmFja2dyb3VuZCBjb2xvcikuCi0gICAg
bV9zd2lwZVdhdGNoZG9nVGltZXIuc3RhcnRPbmVTaG90KHN3aXBlU25hcHNob3RSZW1vdmFsV2F0
Y2hkb2dEdXJhdGlvbi5jb3VudCgpKTsKKyAgICAvLyB3ZSBuZXZlciBzaG93IHRoZSBvbGQgcGFn
ZSBjb250ZW50LCBpbnN0ZWFkIHNob3dpbmcgdGhlIHNuYXBzaG90IGJhY2tncm91bmQgY29sb3Iu
CiAKICAgICBpZiAoVmlld1NuYXBzaG90KiBzbmFwc2hvdCA9IHRhcmdldEl0ZW0tPnNuYXBzaG90
KCkpCiAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yRm9yQ3VycmVudFNuYXBzaG90ID0gc25hcHNo
b3QtPmJhY2tncm91bmRDb2xvcigpOwogfQogCi12b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
ZGlkSGl0UmVuZGVyVHJlZVNpemVUaHJlc2hvbGQoKQotewotICAgIGlmIChtX2FjdGl2ZUdlc3R1
cmVUeXBlICE9IFZpZXdHZXN0dXJlVHlwZTo6U3dpcGUgfHwgbV9zd2lwZUluUHJvZ3Jlc3MpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fc3dpcGVXYWl0aW5nRm9yUmVuZGVyVHJlZVNpemVUaHJl
c2hvbGQgPSBmYWxzZTsKLQotICAgIGlmICghbV9zd2lwZVdhaXRpbmdGb3JWaXN1YWxseU5vbkVt
cHR5TGF5b3V0KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJZGVhbGx5IHdlIHdvdWxkIGNhbGwgcmVt
b3ZlU3dpcGVTbmFwc2hvdEFmdGVyUmVwYWludCgpIGhlcmUsIGJ1dCBzb21ldGltZXMKLSAgICAg
ICAgLy8gc2Nyb2xsIHBvc2l0aW9uIGlzbid0IGRvbmUgcmVzdG9yaW5nIHVudGlsIGRpZEZpbmlz
aExvYWRGb3JGcmFtZSwgc28gd2UgZmxhc2ggdGhlIHdyb25nIGNvbnRlbnQuCi0gICAgfQotfQot
Ci12b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5
b3V0Rm9yTWFpbkZyYW1lKCkKLXsKLSAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3
R2VzdHVyZVR5cGU6OlN3aXBlIHx8IG1fc3dpcGVJblByb2dyZXNzKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3N3aXBlV2FpdGluZ0ZvclZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQgPSBmYWxzZTsK
LQotICAgIGlmICghbV9zd2lwZVdhaXRpbmdGb3JSZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCkgewot
ICAgICAgICAvLyBGSVhNRTogSWRlYWxseSB3ZSB3b3VsZCBjYWxsIHJlbW92ZVN3aXBlU25hcHNo
b3RBZnRlclJlcGFpbnQoKSBoZXJlLCBidXQgc29tZXRpbWVzCi0gICAgICAgIC8vIHNjcm9sbCBw
b3NpdGlvbiBpc24ndCBkb25lIHJlc3RvcmluZyB1bnRpbCBkaWRGaW5pc2hMb2FkRm9yRnJhbWUs
IHNvIHdlIGZsYXNoIHRoZSB3cm9uZyBjb250ZW50LgotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1f
c3dpcGVXYXRjaGRvZ0FmdGVyRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0VGltZXIuc3RhcnRP
bmVTaG90KHN3aXBlU25hcHNob3RSZW1vdmFsV2F0Y2hkb2dBZnRlckZpcnN0VmlzdWFsbHlOb25F
bXB0eUxheW91dER1cmF0aW9uLmNvdW50KCkpOwotICAgICAgICBtX3N3aXBlV2F0Y2hkb2dUaW1l
ci5zdG9wKCk7Ci0gICAgfQotfQotCi12b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6bWFpbkZy
YW1lTG9hZERpZFJlYWNoVGVybWluYWxTdGF0ZSgpCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6Zm9yY2VSZXBhaW50SWZOZWVkZWQoKQogewotICAgIGlmIChtX2FjdGl2ZUdlc3R1cmVUeXBl
ICE9IFZpZXdHZXN0dXJlVHlwZTo6U3dpcGUgfHwgbV9zd2lwZUluUHJvZ3Jlc3MpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX3dlYlBhZ2VQcm94eS5wYWdlTG9hZFN0YXRlKCkuaXNMb2Fk
aW5nKCkpIHsKLSAgICAgICAgbV9zd2lwZUFjdGl2ZUxvYWRNb25pdG9yaW5nVGltZXIuc3RhcnRS
ZXBlYXRpbmcoc3dpcGVTbmFwc2hvdFJlbW92YWxBY3RpdmVMb2FkTW9uaXRvcmluZ0ludGVydmFs
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlbW92ZVN3aXBlU25hcHNob3RBZnRl
clJlcGFpbnQoKTsKLX0KLQotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZFNhbWVEb2N1
bWVudE5hdmlnYXRpb25Gb3JNYWluRnJhbWUoU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUgdHlw
ZSkKLXsKLSAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6OlN3
aXBlIHx8IG1fc3dpcGVJblByb2dyZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAodHlw
ZSAhPSBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uU2Vzc2lvblN0YXRlUmVwbGFjZSAmJiB0eXBlICE9
IFNhbWVEb2N1bWVudE5hdmlnYXRpb25TZXNzaW9uU3RhdGVQb3ApCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fc3dpcGVBY3RpdmVMb2FkTW9uaXRvcmluZ1RpbWVyLnN0YXJ0UmVwZWF0aW5nKHN3
aXBlU25hcHNob3RSZW1vdmFsQWN0aXZlTG9hZE1vbml0b3JpbmdJbnRlcnZhbCk7Ci19Ci0KLXZv
aWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjphY3RpdmVMb2FkTW9uaXRvcmluZ1RpbWVyRmlyZWQo
KQotewotICAgIGlmIChtX3dlYlBhZ2VQcm94eS5wYWdlTG9hZFN0YXRlKCkuaXNMb2FkaW5nKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHJlbW92ZVN3aXBlU25hcHNob3RBZnRlclJlcGFpbnQo
KTsKLX0KLQotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnN3aXBlU25hcHNob3RXYXRjaGRv
Z1RpbWVyRmlyZWQoKQotewotICAgIHJlbW92ZVN3aXBlU25hcHNob3RBZnRlclJlcGFpbnQoKTsK
LX0KLQotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJlbW92ZVN3aXBlU25hcHNob3RBZnRl
clJlcGFpbnQoKQotewotICAgIG1fc3dpcGVBY3RpdmVMb2FkTW9uaXRvcmluZ1RpbWVyLnN0b3Ao
KTsKLQotICAgIGlmIChtX2FjdGl2ZUdlc3R1cmVUeXBlICE9IFZpZXdHZXN0dXJlVHlwZTo6U3dp
cGUgfHwgbV9zd2lwZUluUHJvZ3Jlc3MpCisgICAgaWYgKG1fYWN0aXZlR2VzdHVyZVR5cGUgIT0g
Vmlld0dlc3R1cmVUeXBlOjpTd2lwZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc3dp
cGVXYWl0aW5nRm9yUmVwYWludCkKKyAgICBpZiAobV9oYXNPdXRzdGFuZGluZ1JlcGFpbnRSZXF1
ZXN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3N3aXBlV2FpdGluZ0ZvclJlcGFpbnQgPSB0
cnVlOworICAgIG1faGFzT3V0c3RhbmRpbmdSZXBhaW50UmVxdWVzdCA9IHRydWU7CiAKLSAgICBX
ZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSA9ICZtX3dlYlBhZ2VQcm94eTsKLSAgICBtX3dlYlBh
Z2VQcm94eS5mb3JjZVJlcGFpbnQoVm9pZENhbGxiYWNrOjpjcmVhdGUoW3dlYlBhZ2VQcm94eV0g
KENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKLSAgICAgICAgd2ViUGFnZVByb3h5LT5yZW1v
dmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KCk7CisgICAgdWludDY0X3QgcGFnZUlEID0gbV93
ZWJQYWdlUHJveHkucGFnZUlEKCk7CisgICAgbV93ZWJQYWdlUHJveHkuZm9yY2VSZXBhaW50KFZv
aWRDYWxsYmFjazo6Y3JlYXRlKFt0aGlzLCBwYWdlSURdIChDYWxsYmFja0Jhc2U6OkVycm9yIGVy
cm9yKSB7CisgICAgICAgIGlmIChhdXRvIGdlc3R1cmVDb250cm9sbGVyID0gZ2VzdHVyZUNvbnRy
b2xsZXJGb3JQYWdlKHBhZ2VJRCkpCisgICAgICAgICAgICBnZXN0dXJlQ29udHJvbGxlci0+cmVt
b3ZlU3dpcGVTbmFwc2hvdCgpOwogICAgIH0pKTsKIH0KIAogdm9pZCBWaWV3R2VzdHVyZUNvbnRy
b2xsZXI6OnJlbW92ZVN3aXBlU25hcHNob3QoKQogewotICAgIG1fc3dpcGVXYWl0aW5nRm9yUmVw
YWludCA9IGZhbHNlOworICAgIG1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5yZXNldCgpOwogCi0g
ICAgbV9zd2lwZVdhdGNoZG9nVGltZXIuc3RvcCgpOwotICAgIG1fc3dpcGVXYXRjaGRvZ0FmdGVy
Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0VGltZXIuc3RvcCgpOworICAgIG1faGFzT3V0c3Rh
bmRpbmdSZXBhaW50UmVxdWVzdCA9IGZhbHNlOwogCiAgICAgaWYgKG1fYWN0aXZlR2VzdHVyZVR5
cGUgIT0gVmlld0dlc3R1cmVUeXBlOjpTd2lwZSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTIxLDQg
Kzg0MSw0IEBAIGRvdWJsZSBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6Om1hZ25pZmljYXRpb24oKSBj
b25zdAogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8vICFQTEFURk9STShJT1Mp
CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDFkNDI5NWZmMjQ4OTU2NjMzNjY2OTg5Njll
MDQxOTlhN2FiNzY1ODQuLjA3MWU4ZGU4MWZmYTk5YzYwMTFjODc5Njk4ODUyZmZhNmVmNGJmMzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTY2MSw2ICs2NjEsNyBAQAogCQkyREFDRTY0RTE4QURCRkYwMDBFNENBNzYgLyogX1dL
VGh1bWJuYWlsVmlld0ludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyREFDRTY0RDE4QURCRkYwMDBFNENBNzYgLyogX1dLVGh1bWJuYWlsVmll
d0ludGVybmFsLmggKi87IH07CiAJCTJEQUYwNkQ2MThCRDFBNDcwMDgxQ0VCMSAvKiBTbWFydE1h
Z25pZmljYXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyREFGMDZENDE4QkQxQTQ3MDA4MUNFQjEgLyogU21hcnRNYWduaWZpY2F0
aW9uQ29udHJvbGxlci5oICovOyB9OwogCQkyREFGMDZENzE4QkQxQTQ3MDA4MUNFQjEgLyogU21h
cnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJEQUYwNkQ1MThCRDFBNDcwMDgxQ0VCMSAvKiBTbWFydE1hZ25p
ZmljYXRpb25Db250cm9sbGVyLm1tICovOyB9OworCQkyREFGNEZGQjFCNjM2MTgxMDA2MDEzRDYg
LyogVmlld0dlc3R1cmVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJEQUY0RkZBMUI2MzYxODEwMDYwMTNENiAvKiBWaWV3R2VzdHVy
ZUNvbnRyb2xsZXIuY3BwICovOyB9OwogCQkyREI5QzRBQzFCMzI1MUJEMDA3MEYyN0YgLyogU2Fm
YXJpU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJEQjlDNEFCMUIzMjUxQkQwMDcwRjI3RiAvKiBTYWZhcmlTZXJ2aWNlc1NQSS5oICov
OyB9OwogCQkyREM2RDlDMzE4QzQ0QTYxMDA0M0JBRDQgLyogV0tXZWJWaWV3Q29udGVudFByb3Zp
ZGVyUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEQzZEOUMxMThDNDRBNjEwMDQzQkFENCAvKiBXS1dlYlZpZXdDb250ZW50UHJvdmlkZXJS
ZWdpc3RyeS5oICovOyB9OwogCQkyREM2RDlDNDE4QzQ0QTYxMDA0M0JBRDQgLyogV0tXZWJWaWV3
Q29udGVudFByb3ZpZGVyUmVnaXN0cnkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyREM2RDlDMjE4QzQ0QTYxMDA0M0JBRDQgLyogV0tXZWJWaWV3Q29u
dGVudFByb3ZpZGVyUmVnaXN0cnkubW0gKi87IH07CkBAIC0yODA2LDYgKzI4MDcsNyBAQAogCQky
REFGMDZENDE4QkQxQTQ3MDA4MUNFQjEgLyogU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTbWFydE1hZ25pZmljYXRpb25Db250
cm9sbGVyLmg7IHBhdGggPSBpb3MvU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyREFGMDZENTE4QkQxQTQ3MDA4MUNFQjEgLyogU21h
cnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIubW07IHBhdGggPSBpb3Mv
U21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMkRBRjA2RDgxOEJEMjNCQTAwODFDRUIxIC8qIFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRy
b2xsZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5tZXNz
YWdlcy5pbjsgcGF0aCA9IGlvcy9TbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyLm1lc3NhZ2Vz
LmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyREFGNEZGQTFCNjM2MTgxMDA2MDEz
RDYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTJEQjlDNEFCMUIzMjUxQkQwMDcwRjI3RiAvKiBTYWZhcmlTZXJ2aWNlc1NQ
SS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYWZhcmlTZXJ2aWNlc1NQSS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyREM2RDlDMTE4QzQ0QTYxMDA0M0JBRDQg
LyogV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRDNkQ5QzIxOEM0NEE2MTAwNDNCQUQ0IC8qIFdLV2Vi
Vmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MTA3LDYgKzYxMDksNyBAQAogCQkJCTRBNDEwRjNB
MTlBRjdCMDQwMDJFQkFCNSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eS5oICovLAogCQkJCTRBNDEwRjNCMTlBRjdCMDQwMDJFQkFCNSAvKiBVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdFByb3h5LmNwcCAqLywKIAkJCQk0QTQxMEYzQzE5QUY3QjA0MDAyRUJBQjUgLyog
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eS5oICovLAorCQkJCTJEQUY0RkZBMUI2MzYx
ODEwMDYwMTNENiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuY3BwICovLAogCQkJCTFBMEYyOUUx
MTIwQjQ0NDIwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1Byb3ZpZGVyLmNwcCAqLywKIAkJCQkxQTBG
MjlFMjEyMEI0NDQyMDA1M0QxQjkgLyogVmlzaXRlZExpbmtQcm92aWRlci5oICovLAogCQkJCTFB
NjAyMjQ5MThDMTZCMDgwMEMzRThDOSAvKiBWaXNpdGVkTGlua1Byb3ZpZGVyLm1lc3NhZ2VzLmlu
ICovLApAQCAtOTQ0Miw2ICs5NDQ1LDcgQEAKIAkJCQkxQTY0MjMwODEyREQwOUVCMDBDQUFFMkMg
LyogRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1REE2RUQwQjE0OTA2MDY5MDBCNDFEMTIgLyogRHluYW1pY0xpbmtlckVudmlyb25tZW50RXh0
cmFjdG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOENGRUNFOTQxNDkwRjE0MDAwMkFBQTMyIC8q
IEVkaXRvclN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJEQUY0RkZCMUI2MzYxODEwMDYw
MTNENiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFC
MTVBODQxMzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBN0M2Q0RBMTM3ODk1MDgwMEI5QzA0RCAvKiBFbnZpcm9ubWVudFZhcmlh
Ymxlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUE1NzVGQTE0OTZCNTI2MDBBNEVFMDYgLyog
RXZlbnREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259108</attachid>
            <date>2015-08-15 16:34:22 -0700</date>
            <delta_ts>2015-08-15 16:47:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148062-20150815163402.patch</filename>
            <type>text/plain</type>
            <size>46059</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4NTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjEzZjkyNWI4ODAyNTEy
NDAxNzQ5N2ZhNjQxMjExYWYzMGJkMTUwYi4uZDcwYTMzZWZmNWUwMWY0Y2FhZDY1NTc5MDcyMThh
YmU1MmUxYWVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDE1LTA4LTE1ICBUaW1v
dGh5IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZhY3Rv
ciBWaWV3R2VzdHVyZUNvbnRyb2xsZXIgc3dpcGUgc25hcHNob3QgcmVtb3ZhbCB0byBiZSBtb3Jl
IHBsYXRmb3JtLWluZGVwZW5kZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDgwNjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgQWRkIGEgVmlld0dl
c3R1cmVzIGxvZ2dpbmcgY2hhbm5lbC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9WaWV3R2VzdHVy
ZUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHZpZXdHZXN0dXJlQ29udHJvbGxlcnNG
b3JBbGxQYWdlcyk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Vmll
d0dlc3R1cmVDb250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9s
bGVyOjp+Vmlld0dlc3R1cmVDb250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1
cmVDb250cm9sbGVyOjpnZXN0dXJlQ29udHJvbGxlckZvclBhZ2UpOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZv
ck1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlk
UmVwYWludEFmdGVyTmF2aWdhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6ZGlkSGl0UmVuZGVyVHJlZVNpemVUaHJlc2hvbGQpOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlkUmVhY2hNYWluRnJhbWVMb2Fk
VGVybWluYWxTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvck1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6
OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Y2hlY2tGb3JBY3RpdmVMb2Fkcyk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U25hcHNob3RSZW1vdmFsVHJhY2tlcjo6ZXZl
bnRzRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXIpOgorICAgICAg
ICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6
OmxvZyk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U25hcHNob3RS
ZW1vdmFsVHJhY2tlcjo6c3RhcnQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRy
b2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6
Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpldmVudE9jY3Vy
cmVkKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJl
bW92YWxUcmFja2VyOjpjYW5jZWxPdXRzdGFuZGluZ0V2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpmaXJlUmVtb3Zh
bENhbGxiYWNrSWZQb3NzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJv
bGxlcjo6U25hcHNob3RSZW1vdmFsVHJhY2tlcjo6ZmlyZVJlbW92YWxDYWxsYmFja0ltbWVkaWF0
ZWx5KToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJl
bW92YWxUcmFja2VyOjp3YXRjaGRvZ1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3
R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OnN0YXJ0V2F0Y2hkb2cp
OgorICAgICAgICBCdWlsZCBhIHBsYXRmb3JtLWluZGVwZW5kZW50IFNuYXBzaG90UmVtb3ZhbFRy
YWNrZXIsIHdoaWNoIGtlZXBzIHRyYWNrIG9mCisgICAgICAgIHZhcmlvdXMgZXZlbnRzIHRoYXQg
d2Ugd2FpdCBmb3IgYmVmb3JlIHJlbW92aW5nIHRoZSBzbmFwc2hvdC4gVGhpcworICAgICAgICBp
cyBjb25zdHJ1Y3RlZCBmcm9tIHRoZSB1bmlvbiBvZiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJ7SU9T
LCBNYWN9J3Mgc25hcHNob3QKKyAgICAgICAgcmVtb3ZhbCBjb2RlLCBhbmQgZWFjaCBwbGF0Zm9y
bSBWaWV3R2VzdHVyZUNvbnRyb2xsZXIgY2FuIHNwZWNpZnkgd2hpY2gKKyAgICAgICAgZXZlbnRz
IHRvIHdhaXQgZm9yIChiZWNhdXNlIHRoaXMgY3VycmVudGx5IGRpZmZlcnMgc2xpZ2h0bHkpLgor
CisgICAgICAgIEFkZCBsb2dnaW5nIHRvIFNuYXBzaG90UmVtb3ZhbFRyYWNrZXIgdG8gbWFrZSBk
ZWJ1Z2dpbmcgc25hcHNob3QgcmVtb3ZhbAorICAgICAgICBpc3N1ZXMgbXVjaCBlYXNpZXIuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5oOgorICAgICAg
ICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJhY2tncm91bmRDb2xvckZvckN1cnJl
bnRTbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlk
RmluaXNoTG9hZEZvck1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6ZGlkRmFpbExvYWRGb3JNYWluRnJhbWUpOgorCisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXZWJLaXQ6OlZpZXdH
ZXN0dXJlQ29udHJvbGxlcjo6cGxhdGZvcm1UZWFyZG93bik6CisgICAgICAgIChXZWJLaXQ6OlZp
ZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUpOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVuZFN3aXBlR2VzdHVyZSk6CisgICAgICAgIChXZWJL
aXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c2V0UmVuZGVyVHJlZVNpemUpOgorICAgICAgICAo
V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OndpbGxDb21taXRQb3N0U3dpcGVUcmFuc2l0
aW9uTGF5ZXJUcmVlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpy
ZW1vdmVTd2lwZVNuYXBzaG90KToKKyAgICAgICAgKHZpZXdHZXN0dXJlQ29udHJvbGxlcnNGb3JB
bGxQYWdlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6Vmlld0dlc3R1cmVDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Vmll
d0dlc3R1cmVDb250cm9sbGVyOjp+Vmlld0dlc3R1cmVDb250cm9sbGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpkaWRSZXN0b3JlU2Nyb2xsUG9z
aXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
Om1haW5GcmFtZUxvYWREaWRSZWFjaFRlcm1pbmFsU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25G
b3JNYWluRnJhbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRy
b2xsZXI6OmFjdGl2ZUxvYWRNb25pdG9yaW5nVGltZXJGaXJlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c3dpcGVTbmFwc2hvdFdhdGNoZG9nVGlt
ZXJGaXJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6cmVtb3ZlU3dpcGVTbmFwc2hvdElmUmVhZHkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpW
aWV3R2VzdHVyZUNvbnRyb2xsZXI6OnBsYXRmb3JtVGVhcmRvd24pOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVuZFN3aXBlR2VzdHVyZSk6CisgICAgICAgIChXZWJL
aXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Zm9yY2VSZXBhaW50SWZOZWVkZWQpOgorICAgICAg
ICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJlbW92ZVN3aXBlU25hcHNob3QpOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlZpZXdHZXN0dXJlQ29udHJv
bGxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
flZpZXdHZXN0dXJlQ29udHJvbGxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdH
ZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZEhpdFJlbmRlclRyZWVTaXplVGhyZXNo
b2xkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpk
aWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JNYWluRnJhbWUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6Om1haW5GcmFtZUxvYWREaWRSZWFj
aFRlcm1pbmFsU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JNYWluRnJhbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmFjdGl2ZUxvYWRNb25p
dG9yaW5nVGltZXJGaXJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJl
Q29udHJvbGxlcjo6c3dpcGVTbmFwc2hvdFdhdGNoZG9nVGltZXJGaXJlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6cmVtb3ZlU3dpcGVTbmFwc2hv
dEFmdGVyUmVwYWludCk6IERlbGV0ZWQuCisgICAgICAgIE1vdmUgc2hhcmVhYmxlIHNuYXBzaG90
IHJlbW92YWwgY29kZSB0byBhIG5ldyBwbGF0Zm9ybS1pbmRlcGVuZGVudCBWaWV3R2VzdHVyZUNv
bnRyb2xsZXIgZmlsZS4KKyAgICAgICAgTW92ZSB0aGUgVmlld0dlc3R1cmVDb250cm9sbGVyIGNv
bnN0cnVjdG9yL2Rlc3RydWN0b3IgdG8gdGhlIHBsYXRmb3JtLWluZGVwZW5kZW50IGZpbGUuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTUt
MDgtMTMgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0g
RG93bmxvYWRzIGRvIG5vdCBzdGFydCBpZiBwb2xpY3kgZGVjaXNpb24gaXMgbWFkZSBhc3luY2hy
b25vdXNseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5oIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5oCmluZGV4IGNlMTMxOTBlZDViNTEzYzMx
N2FiMTAwMjY2ZDNjN2I1YjBjNGViZmUuLjE5OTU5N2VmY2FkZmYyOWFjNTNkNDhlNDc3YzJlMGNj
NDRmNTk5OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmgKQEAgLTU0LDYgKzU0LDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAgICAgTShTZXNzaW9uU3RhdGUpIFwKICAgICBNKFN0b3JhZ2VB
UEkpIFwKICAgICBNKFRleHRJbnB1dCkgXAorICAgIE0oVmlld0dlc3R1cmVzKSBcCiAKICNkZWZp
bmUgREVDTEFSRV9MT0dfQ0hBTk5FTChuYW1lKSBcCiAgICAgZXh0ZXJuIFdURkxvZ0NoYW5uZWwg
Sk9JTl9MT0dfQ0hBTk5FTF9XSVRIX1BSRUZJWChMT0dfQ0hBTk5FTF9QUkVGSVgsIG5hbWUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1ZpZXdHZXN0dXJlQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlld0dlc3R1cmVDb250cm9sbGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hNzc3MzY0YzAyOWYyMTA4YWI2MWM4NTkxMzljMGFlYjMzYTQwMjJjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1ZpZXdHZXN0dXJlQ29u
dHJvbGxlci5jcHAKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiVmlld0dlc3R1cmVDb250cm9sbGVyLmgiCisKKyNpbXBvcnQg
IkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VzLmgiCisj
aW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgorI2lt
cG9ydCA8d3RmL01hdGhFeHRyYXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0
YXRpYyBjb25zdCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBzd2lwZVNuYXBzaG90UmVtb3ZhbFdhdGNo
ZG9nQWZ0ZXJGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXREdXJhdGlvbiA9IDNfczsKK3N0YXRp
YyBjb25zdCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHN3aXBlU25hcHNob3RSZW1vdmFsQWN0
aXZlTG9hZE1vbml0b3JpbmdJbnRlcnZhbCA9IDI1MF9tczsKKworI2lmIFBMQVRGT1JNKE1BQykK
K3N0YXRpYyBjb25zdCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBzd2lwZVNuYXBzaG90UmVtb3ZhbFdh
dGNoZG9nRHVyYXRpb24gPSA1X3M7CisjZWxzZQorc3RhdGljIGNvbnN0IHN0ZDo6Y2hyb25vOjpz
ZWNvbmRzIHN3aXBlU25hcHNob3RSZW1vdmFsV2F0Y2hkb2dEdXJhdGlvbiA9IDNfczsKKyNlbmRp
ZgorCitzdGF0aWMgSGFzaE1hcDx1aW50NjRfdCwgV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xs
ZXIqPiYgdmlld0dlc3R1cmVDb250cm9sbGVyc0ZvckFsbFBhZ2VzKCkKK3sKKyAgICAvLyBUaGUg
a2V5IGluIHRoaXMgbWFwIGlzIHRoZSBhc3NvY2lhdGVkIHBhZ2UgSUQuCisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEhhc2hNYXA8dWludDY0X3QsIFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9s
bGVyKj4+IHZpZXdHZXN0dXJlQ29udHJvbGxlcnM7CisgICAgcmV0dXJuIHZpZXdHZXN0dXJlQ29u
dHJvbGxlcnMuZ2V0KCk7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OlZpZXdHZXN0dXJlQ29udHJvbGxlcihXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94
eSkKKyAgICA6IG1fd2ViUGFnZVByb3h5KHdlYlBhZ2VQcm94eSkKKyAgICAsIG1fc3dpcGVBY3Rp
dmVMb2FkTW9uaXRvcmluZ1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlZpZXdHZXN0dXJl
Q29udHJvbGxlcjo6Y2hlY2tGb3JBY3RpdmVMb2FkcykKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS5w
cm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCksICp0aGlz
KTsKKworICAgIHZpZXdHZXN0dXJlQ29udHJvbGxlcnNGb3JBbGxQYWdlcygpLmFkZCh3ZWJQYWdl
UHJveHkucGFnZUlEKCksIHRoaXMpOworfQorCitWaWV3R2VzdHVyZUNvbnRyb2xsZXI6On5WaWV3
R2VzdHVyZUNvbnRyb2xsZXIoKQoreworICAgIHBsYXRmb3JtVGVhcmRvd24oKTsKKworICAgIHZp
ZXdHZXN0dXJlQ29udHJvbGxlcnNGb3JBbGxQYWdlcygpLnJlbW92ZShtX3dlYlBhZ2VQcm94eS5w
YWdlSUQoKSk7CisKKyAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOworfQorCitWaWV3R2VzdHVyZUNvbnRyb2xs
ZXIqIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Z2VzdHVyZUNvbnRyb2xsZXJGb3JQYWdlKHVpbnQ2
NF90IHBhZ2VJRCkKK3sKKyAgICBhdXRvIGdlc3R1cmVDb250cm9sbGVySXRlciA9IHZpZXdHZXN0
dXJlQ29udHJvbGxlcnNGb3JBbGxQYWdlcygpLmZpbmQocGFnZUlEKTsKKyAgICBpZiAoZ2VzdHVy
ZUNvbnRyb2xsZXJJdGVyID09IHZpZXdHZXN0dXJlQ29udHJvbGxlcnNGb3JBbGxQYWdlcygpLmVu
ZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZ2VzdHVyZUNvbnRyb2xs
ZXJJdGVyLT52YWx1ZTsKK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZEZpcnN0
VmlzdWFsbHlOb25FbXB0eUxheW91dEZvck1haW5GcmFtZSgpCit7CisgICAgaWYgKCFtX3NuYXBz
aG90UmVtb3ZhbFRyYWNrZXIuZXZlbnRPY2N1cnJlZChTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpW
aXN1YWxseU5vbkVtcHR5TGF5b3V0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zbmFwc2hv
dFJlbW92YWxUcmFja2VyLnN0YXJ0V2F0Y2hkb2coc3dpcGVTbmFwc2hvdFJlbW92YWxXYXRjaGRv
Z0FmdGVyRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0RHVyYXRpb24pOworCisgICAgLy8gRklY
TUU6IElkZWFsbHksIHRoaXMgd291bGQgYmUgc3VmZmljaWVudCB0byBjYW5jZWwgd2FpdGluZyBm
b3IgdGhlIG1haW4gZnJhbWUgbG9hZCwKKyAgICAvLyBhbmQgd291bGQgbWFrZSBzbmFwc2hvdCBy
ZW1vdmFsIGZhc3RlciwgYnV0IHdlIG5lZWQgZGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uCisgICAg
Ly8gdG8gYmUgdXNhYmxlL2FjY3VyYXRlIG9uIGFsbCBwbGF0Zm9ybXMgYmVmb3JlIGRvaW5nIHRo
YXQsIG9yIHdlIGdldCBhIGZsYXNoCisgICAgLy8gb2YgdGhlIG5ldyBwYWdlIGluIHRoZSB3cm9u
ZyBwb3NpdGlvbi4KK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZFJlcGFpbnRB
ZnRlck5hdmlnYXRpb24oKQoreworICAgIG1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5ldmVudE9j
Y3VycmVkKFNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OlJlcGFpbnRBZnRlck5hdmlnYXRpb24pOwor
fQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlkSGl0UmVuZGVyVHJlZVNpemVUaHJl
c2hvbGQoKQoreworICAgIG1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5ldmVudE9jY3VycmVkKFNu
YXBzaG90UmVtb3ZhbFRyYWNrZXI6OlJlbmRlclRyZWVTaXplVGhyZXNob2xkKTsKK30KKwordm9p
ZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbigpCit7Cisg
ICAgbV9zbmFwc2hvdFJlbW92YWxUcmFja2VyLmV2ZW50T2NjdXJyZWQoU25hcHNob3RSZW1vdmFs
VHJhY2tlcjo6U2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbik7Cit9CisKK3ZvaWQgVmlld0dlc3R1
cmVDb250cm9sbGVyOjpkaWRSZWFjaE1haW5GcmFtZUxvYWRUZXJtaW5hbFN0YXRlKCkKK3sKKyAg
ICBpZiAoIW1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5ldmVudE9jY3VycmVkKFNuYXBzaG90UmVt
b3ZhbFRyYWNrZXI6Ok1haW5GcmFtZUxvYWQpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBD
b21pbmcgYmFjayBmcm9tIHRoZSBwYWdlIGNhY2hlIHdpbGwgcmVzdWx0IGluIGdldHRpbmcgYSBs
b2FkIGV2ZW50LCBidXQgbm8gZmlyc3QgdmlzdWFsbHkgbm9uLWVtcHR5IGxheW91dC4KKyAgICAv
LyBXZWJDb3JlIGNvbnNpZGVycyBhIGxvYWRlZCBkb2N1bWVudCBlbm91Z2ggdG8gYmUgY29uc2lk
ZXJlZCB2aXN1YWxseSBub24tZW1wdHksIHNvIHRoYXQncyBnb29kCisgICAgLy8gZW5vdWdoIGZv
ciB1cyB0b28uCisgICAgbV9zbmFwc2hvdFJlbW92YWxUcmFja2VyLmNhbmNlbE91dHN0YW5kaW5n
RXZlbnQoU25hcHNob3RSZW1vdmFsVHJhY2tlcjo6VmlzdWFsbHlOb25FbXB0eUxheW91dCk7CisK
KyAgICBjaGVja0ZvckFjdGl2ZUxvYWRzKCk7Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9s
bGVyOjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yTWFpbkZyYW1lKFNhbWVEb2N1bWVudE5h
dmlnYXRpb25UeXBlIHR5cGUpCit7CisgICAgYm9vbCBjYW5jZWxsZWRPdXRzdGFuZGluZ0V2ZW50
ID0gZmFsc2U7CisKKyAgICAvLyBTYW1lLWRvY3VtZW50IG5hdmlnYXRpb25zIGRvbid0IGhhdmUg
YSBtYWluIGZyYW1lIGxvYWQgb3IgZmlyc3QgdmlzdWFsbHkgbm9uLWVtcHR5IGxheW91dC4KKyAg
ICBjYW5jZWxsZWRPdXRzdGFuZGluZ0V2ZW50IHw9IG1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5j
YW5jZWxPdXRzdGFuZGluZ0V2ZW50KFNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6Ok1haW5GcmFtZUxv
YWQpOworICAgIGNhbmNlbGxlZE91dHN0YW5kaW5nRXZlbnQgfD0gbV9zbmFwc2hvdFJlbW92YWxU
cmFja2VyLmNhbmNlbE91dHN0YW5kaW5nRXZlbnQoU25hcHNob3RSZW1vdmFsVHJhY2tlcjo6Vmlz
dWFsbHlOb25FbXB0eUxheW91dCk7CisKKyAgICBpZiAoIWNhbmNlbGxlZE91dHN0YW5kaW5nRXZl
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0eXBlICE9IFNhbWVEb2N1bWVudE5hdmln
YXRpb25TZXNzaW9uU3RhdGVSZXBsYWNlICYmIHR5cGUgIT0gU2FtZURvY3VtZW50TmF2aWdhdGlv
blNlc3Npb25TdGF0ZVBvcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2hlY2tGb3JBY3RpdmVM
b2FkcygpOworfQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Y2hlY2tGb3JBY3RpdmVM
b2FkcygpCit7CisgICAgaWYgKG1fd2ViUGFnZVByb3h5LnBhZ2VMb2FkU3RhdGUoKS5pc0xvYWRp
bmcoKSkgeworICAgICAgICBpZiAoIW1fc3dpcGVBY3RpdmVMb2FkTW9uaXRvcmluZ1RpbWVyLmlz
QWN0aXZlKCkpCisgICAgICAgICAgICBtX3N3aXBlQWN0aXZlTG9hZE1vbml0b3JpbmdUaW1lci5z
dGFydFJlcGVhdGluZyhzd2lwZVNuYXBzaG90UmVtb3ZhbEFjdGl2ZUxvYWRNb25pdG9yaW5nSW50
ZXJ2YWwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zd2lwZUFjdGl2ZUxvYWRN
b25pdG9yaW5nVGltZXIuc3RvcCgpOworICAgIG1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5ldmVu
dE9jY3VycmVkKFNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OlN1YnJlc291cmNlTG9hZHMpOworfQor
CitTdHJpbmcgVmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpl
dmVudHNEZXNjcmlwdGlvbihWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRy
YWNrZXI6OkV2ZW50cyBldmVudCkKK3sKKyAgICBTdHJpbmcgZGVzY3JpcHRpb247CisKKyAgICBp
ZiAoZXZlbnQgJiBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6
OlZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpCisgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZCgiVmlz
dWFsbHlOb25FbXB0eUxheW91dCAiKTsKKworICAgIGlmIChldmVudCAmIFZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6U25hcHNob3RSZW1vdmFsVHJhY2tlcjo6UmVuZGVyVHJlZVNpemVUaHJlc2hvbGQp
CisgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZCgiUmVuZGVyVHJlZVNpemVUaHJlc2hvbGQgIik7
CisKKyAgICBpZiAoZXZlbnQgJiBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3Zh
bFRyYWNrZXI6OlJlcGFpbnRBZnRlck5hdmlnYXRpb24pCisgICAgICAgIGRlc2NyaXB0aW9uLmFw
cGVuZCgiUmVwYWludEFmdGVyTmF2aWdhdGlvbiAiKTsKKworICAgIGlmIChldmVudCAmIFZpZXdH
ZXN0dXJlQ29udHJvbGxlcjo6U25hcHNob3RSZW1vdmFsVHJhY2tlcjo6TWFpbkZyYW1lTG9hZCkK
KyAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kKCJNYWluRnJhbWVMb2FkICIpOworCisgICAgaWYg
KGV2ZW50ICYgVmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpT
dWJyZXNvdXJjZUxvYWRzKQorICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmQoIlN1YnJlc291cmNl
TG9hZHMgIik7CisKKyAgICBpZiAoZXZlbnQgJiBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBz
aG90UmVtb3ZhbFRyYWNrZXI6OlNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24pCisgICAgICAgIGRl
c2NyaXB0aW9uLmFwcGVuZCgiU2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiAiKTsKKyAgICAKKyAg
ICByZXR1cm4gZGVzY3JpcHRpb247Cit9CisKK1ZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U25hcHNo
b3RSZW1vdmFsVHJhY2tlcjo6U25hcHNob3RSZW1vdmFsVHJhY2tlcigpCisgICAgOiBtX3dhdGNo
ZG9nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmU25hcHNob3RSZW1vdmFsVHJhY2tlcjo6
d2F0Y2hkb2dUaW1lckZpcmVkKQoreworfQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
U25hcHNob3RSZW1vdmFsVHJhY2tlcjo6bG9nKFN0cmluZyBsb2cpCit7CisjaWYgIUxPR19ESVNB
QkxFRAorICAgIGF1dG8gbm93ID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7Cisg
ICAgZG91YmxlIG1pbGxpc2Vjb25kc1NpbmNlU3RhcnQgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25f
Y2FzdDxzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlLCBzdGQ6Om1pbGxpPj4obm93IC0gbV9z
dGFydFRpbWUpLmNvdW50KCk7CisjZW5kaWYKKyAgICBMT0coVmlld0dlc3R1cmVzLCAiU3dpcGUg
U25hcHNob3QgUmVtb3ZhbCAoJTAuMmYgbXMpIC0gJXMiLCBtaWxsaXNlY29uZHNTaW5jZVN0YXJ0
LCBsb2cudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpT
bmFwc2hvdFJlbW92YWxUcmFja2VyOjpzdGFydChFdmVudHMgZGVzaXJlZEV2ZW50cywgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+IHJlbW92YWxDYWxsYmFjaykKK3sKKyAgICBtX291dHN0YW5kaW5nRXZl
bnRzID0gZGVzaXJlZEV2ZW50czsKKyAgICBtX3JlbW92YWxDYWxsYmFjayA9IFdURjo6bW92ZShy
ZW1vdmFsQ2FsbGJhY2spOworICAgIG1fc3RhcnRUaW1lID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9j
bG9jazo6bm93KCk7CisKKyAgICBsb2coInN0YXJ0Iik7CisKKyAgICBzdGFydFdhdGNoZG9nKHN3
aXBlU25hcHNob3RSZW1vdmFsV2F0Y2hkb2dEdXJhdGlvbik7Cit9CisKK3ZvaWQgVmlld0dlc3R1
cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpyZXNldCgpCit7CisgICAgaWYg
KG1fb3V0c3RhbmRpbmdFdmVudHMpCisgICAgICAgIGxvZygicmVzZXQ7IGhhZCBvdXRzdGFuZGlu
ZyBldmVudHM6ICIgKyBldmVudHNEZXNjcmlwdGlvbihtX291dHN0YW5kaW5nRXZlbnRzKSk7Cisg
ICAgbV9vdXRzdGFuZGluZ0V2ZW50cyA9IDA7CisgICAgbV93YXRjaGRvZ1RpbWVyLnN0b3AoKTsK
KyAgICBtX3JlbW92YWxDYWxsYmFjayA9IG51bGxwdHI7Cit9CisKK2Jvb2wgVmlld0dlc3R1cmVD
b250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpldmVudE9jY3VycmVkKEV2ZW50cyBl
dmVudCkKK3sKKyAgICBBU1NFUlQoaGFzT25lQml0U2V0KGV2ZW50KSk7CisKKyAgICBpZiAoISht
X291dHN0YW5kaW5nRXZlbnRzICYgZXZlbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBsb2coIm91dHN0YW5kaW5nIGV2ZW50IG9jY3VycmVkOiAiICsgIGV2ZW50c0Rlc2NyaXB0aW9u
KGV2ZW50KSk7CisKKyAgICBtX291dHN0YW5kaW5nRXZlbnRzICY9IH5ldmVudDsKKworICAgIGZp
cmVSZW1vdmFsQ2FsbGJhY2tJZlBvc3NpYmxlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgVmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpjYW5jZWxP
dXRzdGFuZGluZ0V2ZW50KEV2ZW50cyBldmVudCkKK3sKKyAgICBBU1NFUlQoaGFzT25lQml0U2V0
KGV2ZW50KSk7CisKKyAgICBpZiAoIShtX291dHN0YW5kaW5nRXZlbnRzICYgZXZlbnQpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBsb2coIndhaXQgZm9yIGV2ZW50IGNhbmNlbGxlZDog
IiArIGV2ZW50c0Rlc2NyaXB0aW9uKGV2ZW50KSk7CisKKyAgICBtX291dHN0YW5kaW5nRXZlbnRz
ICY9IH5ldmVudDsKKworICAgIGZpcmVSZW1vdmFsQ2FsbGJhY2tJZlBvc3NpYmxlKCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJl
bW92YWxUcmFja2VyOjpmaXJlUmVtb3ZhbENhbGxiYWNrSWZQb3NzaWJsZSgpCit7CisgICAgaWYg
KG1fb3V0c3RhbmRpbmdFdmVudHMpIHsKKyAgICAgICAgbG9nKCJkZWZlcnJpbmcgcmVtb3ZhbDsg
aGFkIG91c3RhbmRpbmcgZXZlbnRzOiAiICsgZXZlbnRzRGVzY3JpcHRpb24obV9vdXRzdGFuZGlu
Z0V2ZW50cykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZmlyZVJlbW92YWxDYWxs
YmFja0ltbWVkaWF0ZWx5KCk7Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFw
c2hvdFJlbW92YWxUcmFja2VyOjpmaXJlUmVtb3ZhbENhbGxiYWNrSW1tZWRpYXRlbHkoKQorewor
ICAgIG1fd2F0Y2hkb2dUaW1lci5zdG9wKCk7CisKKyAgICBhdXRvIHJlbW92YWxDYWxsYmFjayA9
IFdURjo6bW92ZShtX3JlbW92YWxDYWxsYmFjayk7CisgICAgaWYgKHJlbW92YWxDYWxsYmFjaykg
eworICAgICAgICBsb2coInJlbW92ZWQgc25hcHNob3QiKTsKKyAgICAgICAgcmVzZXQoKTsKKyAg
ICAgICAgcmVtb3ZhbENhbGxiYWNrKCk7CisgICAgfQorfQorCit2b2lkIFZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6U25hcHNob3RSZW1vdmFsVHJhY2tlcjo6d2F0Y2hkb2dUaW1lckZpcmVkKCkKK3sK
KyAgICBsb2coIndhdGNoZG9nIHRpbWVyIGZpcmVkIik7CisgICAgZmlyZVJlbW92YWxDYWxsYmFj
a0ltbWVkaWF0ZWx5KCk7Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hv
dFJlbW92YWxUcmFja2VyOjpzdGFydFdhdGNoZG9nKHN0ZDo6Y2hyb25vOjpzZWNvbmRzIGR1cmF0
aW9uKQoreworICAgIGxvZyhTdHJpbmc6OmZvcm1hdCgiKHJlKXN0YXJ0ZWQgd2F0Y2hkb2cgdGlt
ZXIgZm9yICVsbGQgc2Vjb25kcyIsIGR1cmF0aW9uLmNvdW50KCkpKTsKKyAgICBtX3dhdGNoZG9n
VGltZXIuc3RhcnRPbmVTaG90KGR1cmF0aW9uLmNvdW50KCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvVmlld0dl
c3R1cmVDb250cm9sbGVySU9TLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9WaWV3
R2VzdHVyZUNvbnRyb2xsZXJJT1MubW0KaW5kZXggNjE3MjZjOGM3M2E2MGQ1NjA4NjNjNTQ1MWQ0
MTQyNjZjNTJkNTUxOC4uYjM5ZmJkYTU0MDQ5NzBjNzg3ZmViMGM0ZDZhODM0YmY3MDYwODlmMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9WaWV3R2VzdHVyZUNvbnRy
b2xsZXJJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9WaWV3R2VzdHVy
ZUNvbnRyb2xsZXJJT1MubW0KQEAgLTY0LDE1ICs2NCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogfQogCiBzdGF0aWMgY29uc3QgZmxvYXQgc3dpcGVTbmFwc2hvdFJlbW92YWxSZW5kZXJU
cmVlU2l6ZVRhcmdldEZyYWN0aW9uID0gMC41Owotc3RhdGljIGNvbnN0IHN0ZDo6Y2hyb25vOjpz
ZWNvbmRzIHN3aXBlU25hcHNob3RSZW1vdmFsV2F0Y2hkb2dEdXJhdGlvbiA9IDNfczsKLXN0YXRp
YyBjb25zdCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHN3aXBlU25hcHNob3RSZW1vdmFsQWN0
aXZlTG9hZE1vbml0b3JpbmdJbnRlcnZhbCA9IDI1MF9tczsKLQotLy8gVGhlIGtleSBpbiB0aGlz
IG1hcCBpcyB0aGUgYXNzb2NpYXRlZCBwYWdlIElELgotc3RhdGljIEhhc2hNYXA8dWludDY0X3Qs
IFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyKj4mIHZpZXdHZXN0dXJlQ29udHJvbGxlcnNG
b3JBbGxQYWdlcygpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8dWludDY0
X3QsIFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyKj4+IHZpZXdHZXN0dXJlQ29udHJvbGxl
cnM7Ci0gICAgcmV0dXJuIHZpZXdHZXN0dXJlQ29udHJvbGxlcnMuZ2V0KCk7Ci19CiAKIC0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFZpZXdHZXN0dXJlQ29udHJvbGxlcjooV2ViS2l0OjpWaWV3R2Vz
dHVyZUNvbnRyb2xsZXIqKWdlc3R1cmVDb250cm9sbGVyIGdlc3R1cmVSZWNvZ25pemVyVmlldzoo
VUlWaWV3ICopZ2VzdHVyZVJlY29nbml6ZXJWaWV3CiB7CkBAIC0xNDYsMjEgKzEzNywxMiBAQCBz
dGF0aWMgSGFzaE1hcDx1aW50NjRfdCwgV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXIqPiYg
dmlld0dlc3R1cmVDb250cm9sbGVycwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotVmlld0dlc3R1
cmVDb250cm9sbGVyOjpWaWV3R2VzdHVyZUNvbnRyb2xsZXIoV2ViUGFnZVByb3h5JiB3ZWJQYWdl
UHJveHkpCi0gICAgOiBtX3dlYlBhZ2VQcm94eSh3ZWJQYWdlUHJveHkpCi0gICAgLCBtX3N3aXBl
V2F0Y2hkb2dUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI6OnN3aXBlU25hcHNob3RXYXRjaGRvZ1RpbWVyRmlyZWQpCi0gICAgLCBtX3N3aXBlQWN0aXZl
TG9hZE1vbml0b3JpbmdUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OmFjdGl2ZUxvYWRNb25pdG9yaW5nVGltZXJGaXJlZCkKLXsKLSAgICB2aWV3R2Vz
dHVyZUNvbnRyb2xsZXJzRm9yQWxsUGFnZXMoKS5hZGQod2ViUGFnZVByb3h5LnBhZ2VJRCgpLCB0
aGlzKTsKLX0KLQotVmlld0dlc3R1cmVDb250cm9sbGVyOjp+Vmlld0dlc3R1cmVDb250cm9sbGVy
KCkKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpwbGF0Zm9ybVRlYXJkb3duKCkKIHsKICAg
ICBbbV9zd2lwZVRyYW5zaXRpb25Db250ZXh0IF9zZXRUcmFuc2l0aW9uSXNJbkZsaWdodDpOT107
CiAgICAgW21fc3dpcGVUcmFuc2l0aW9uQ29udGV4dCBfc2V0SW50ZXJhY3RvcjpuaWxdOwogICAg
IFttX3N3aXBlVHJhbnNpdGlvbkNvbnRleHQgX3NldEFuaW1hdG9yOm5pbF07CiAgICAgW21fc3dp
cGVJbnRlcmFjdGl2ZVRyYW5zaXRpb25EZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKLSAgICB2aWV3R2Vz
dHVyZUNvbnRyb2xsZXJzRm9yQWxsUGFnZXMoKS5yZW1vdmUobV93ZWJQYWdlUHJveHkucGFnZUlE
KCkpOwogfQogCiB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c2V0QWx0ZXJuYXRlQmFja0Zv
cndhcmRMaXN0U291cmNlVmlldyhXS1dlYlZpZXcgKnZpZXcpCkBAIC0yNDksOSArMjMxLDggQEAg
dm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJlKF9VSU5hdmlnYXRp
b25JbnRlcmFjdGl2ZVRyYW5zaXRpb24KICAgICB9XTsKICAgICB1aW50NjRfdCBwYWdlSUQgPSBt
X3dlYlBhZ2VQcm94eS5wYWdlSUQoKTsKICAgICBbbV9zd2lwZVRyYW5zaXRpb25Db250ZXh0IF9z
ZXRDb21wbGV0aW9uSGFuZGxlcjpeKF9VSVZpZXdDb250cm9sbGVyVHJhbnNpdGlvbkNvbnRleHQg
KmNvbnRleHQsIEJPT0wgZGlkQ29tcGxldGUpIHsKLSAgICAgICAgYXV0byBnZXN0dXJlQ29udHJv
bGxlckl0ZXIgPSB2aWV3R2VzdHVyZUNvbnRyb2xsZXJzRm9yQWxsUGFnZXMoKS5maW5kKHBhZ2VJ
RCk7Ci0gICAgICAgIGlmIChnZXN0dXJlQ29udHJvbGxlckl0ZXIgIT0gdmlld0dlc3R1cmVDb250
cm9sbGVyc0ZvckFsbFBhZ2VzKCkuZW5kKCkpCi0gICAgICAgICAgICBnZXN0dXJlQ29udHJvbGxl
ckl0ZXItPnZhbHVlLT5lbmRTd2lwZUdlc3R1cmUodGFyZ2V0SXRlbS5nZXQoKSwgY29udGV4dCwg
IWRpZENvbXBsZXRlKTsKKyAgICAgICAgaWYgKGF1dG8gZ2VzdHVyZUNvbnRyb2xsZXIgPSBnZXN0
dXJlQ29udHJvbGxlckZvclBhZ2UocGFnZUlEKSkKKyAgICAgICAgICAgIGdlc3R1cmVDb250cm9s
bGVyLT5lbmRTd2lwZUdlc3R1cmUodGFyZ2V0SXRlbS5nZXQoKSwgY29udGV4dCwgIWRpZENvbXBs
ZXRlKTsKICAgICB9XTsKICAgICBbbV9zd2lwZVRyYW5zaXRpb25Db250ZXh0IF9zZXRJbnRlcmFj
dGl2ZVVwZGF0ZUhhbmRsZXI6XihCT09MLCBDR0Zsb2F0LCBCT09MLCBfVUlWaWV3Q29udHJvbGxl
clRyYW5zaXRpb25Db250ZXh0ICopIHsgfV07CiAKQEAgLTMwNiw5ICsyODcsMTAgQEAgdm9pZCBW
aWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVuZFN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtKiB0YXJnZXRJdGVtLAogICAgICAgICB1aW50NjRfdCBwYWdlSUQgPSBtX3dlYlBhZ2VQcm94
eS5wYWdlSUQoKTsKICAgICAgICAgdWludDY0X3QgZ2VzdHVyZVBlbmRpbmdTbmFwc2hvdFJlbW92
YWwgPSBtX2dlc3R1cmVQZW5kaW5nU25hcHNob3RSZW1vdmFsOwogICAgICAgICBkcmF3aW5nQXJl
YS0+ZGlzcGF0Y2hBZnRlckVuc3VyaW5nRHJhd2luZyhbcGFnZUlELCBnZXN0dXJlUGVuZGluZ1Nu
YXBzaG90UmVtb3ZhbF0gKENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKLSAgICAgICAgICAg
IGF1dG8gZ2VzdHVyZUNvbnRyb2xsZXJJdGVyID0gdmlld0dlc3R1cmVDb250cm9sbGVyc0ZvckFs
bFBhZ2VzKCkuZmluZChwYWdlSUQpOwotICAgICAgICAgICAgaWYgKGdlc3R1cmVDb250cm9sbGVy
SXRlciAhPSB2aWV3R2VzdHVyZUNvbnRyb2xsZXJzRm9yQWxsUGFnZXMoKS5lbmQoKSAmJiBnZXN0
dXJlQ29udHJvbGxlckl0ZXItPnZhbHVlLT5tX2dlc3R1cmVQZW5kaW5nU25hcHNob3RSZW1vdmFs
ID09IGdlc3R1cmVQZW5kaW5nU25hcHNob3RSZW1vdmFsKQotICAgICAgICAgICAgICAgIGdlc3R1
cmVDb250cm9sbGVySXRlci0+dmFsdWUtPndpbGxDb21taXRQb3N0U3dpcGVUcmFuc2l0aW9uTGF5
ZXJUcmVlKGVycm9yID09IENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpOworICAgICAgICAgICAg
aWYgKGF1dG8gZ2VzdHVyZUNvbnRyb2xsZXIgPSBnZXN0dXJlQ29udHJvbGxlckZvclBhZ2UocGFn
ZUlEKSkgeworICAgICAgICAgICAgICAgIGlmIChnZXN0dXJlQ29udHJvbGxlci0+bV9nZXN0dXJl
UGVuZGluZ1NuYXBzaG90UmVtb3ZhbCA9PSBnZXN0dXJlUGVuZGluZ1NuYXBzaG90UmVtb3ZhbCkK
KyAgICAgICAgICAgICAgICAgICAgZ2VzdHVyZUNvbnRyb2xsZXItPndpbGxDb21taXRQb3N0U3dp
cGVUcmFuc2l0aW9uTGF5ZXJUcmVlKGVycm9yID09IENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUp
OworICAgICAgICAgICAgfQogICAgICAgICB9KTsKICAgICAgICAgZHJhd2luZ0FyZWEtPmhpZGVD
b250ZW50VW50aWxQZW5kaW5nVXBkYXRlKCk7CiAgICAgfSBlbHNlIHsKQEAgLTMxNiwxMyArMjk4
LDE0IEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjplbmRTd2lwZUdlc3R1cmUoV2ViQmFj
a0ZvcndhcmRMaXN0SXRlbSogdGFyZ2V0SXRlbSwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIG1fc3dpcGVXYWl0aW5nRm9yUmVuZGVyVHJlZVNpemVUaHJlc2hvbGQgPSB0cnVlOwotICAg
IG1fc3dpcGVXYWl0aW5nRm9yUmVwYWludCA9IHRydWU7Ci0gICAgbV9zd2lwZVdhaXRpbmdGb3JU
ZXJtaW5hbExvYWRpbmdTdGF0ZSA9IHRydWU7Ci0gICAgbV9zd2lwZVdhaXRpbmdGb3JTdWJyZXNv
dXJjZUxvYWRzID0gdHJ1ZTsKLSAgICBtX3N3aXBlV2FpdGluZ0ZvclNjcm9sbFBvc2l0aW9uUmVz
dG9yYXRpb24gPSB0cnVlOwotCi0gICAgbV9zd2lwZVdhdGNoZG9nVGltZXIuc3RhcnRPbmVTaG90
KHN3aXBlU25hcHNob3RSZW1vdmFsV2F0Y2hkb2dEdXJhdGlvbi5jb3VudCgpKTsKKyAgICAvLyBG
SVhNRTogU2hvdWxkIHdlIHdhaXQgZm9yIFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQgbGlrZSB3ZSBk
byBvbiBNYWM/CisgICAgbV9zbmFwc2hvdFJlbW92YWxUcmFja2VyLnN0YXJ0KFNuYXBzaG90UmVt
b3ZhbFRyYWNrZXI6OlJlbmRlclRyZWVTaXplVGhyZXNob2xkCisgICAgICAgIHwgU25hcHNob3RS
ZW1vdmFsVHJhY2tlcjo6UmVwYWludEFmdGVyTmF2aWdhdGlvbgorICAgICAgICB8IFNuYXBzaG90
UmVtb3ZhbFRyYWNrZXI6Ok1haW5GcmFtZUxvYWQKKyAgICAgICAgfCBTbmFwc2hvdFJlbW92YWxU
cmFja2VyOjpTdWJyZXNvdXJjZUxvYWRzCisgICAgICAgIHwgU25hcHNob3RSZW1vdmFsVHJhY2tl
cjo6U2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiwgW10geworICAgICAgICAgICAgcmVtb3ZlU3dp
cGVTbmFwc2hvdCgpOworICAgIH0pOwogCiAgICAgaWYgKFZpZXdTbmFwc2hvdCogc25hcHNob3Qg
PSB0YXJnZXRJdGVtLT5zbmFwc2hvdCgpKSB7CiAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yRm9y
Q3VycmVudFNuYXBzaG90ID0gc25hcHNob3QtPmJhY2tncm91bmRDb2xvcigpOwpAQCAtMzMwLDEy
NiArMzEzLDM3IEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjplbmRTd2lwZUdlc3R1cmUo
V2ViQmFja0ZvcndhcmRMaXN0SXRlbSogdGFyZ2V0SXRlbSwKICAgICB9CiB9CiAKLXZvaWQgVmll
d0dlc3R1cmVDb250cm9sbGVyOjp3aWxsQ29tbWl0UG9zdFN3aXBlVHJhbnNpdGlvbkxheWVyVHJl
ZShib29sIHN1Y2Nlc3NmdWwpCi17Ci0gICAgaWYgKG1fYWN0aXZlR2VzdHVyZVR5cGUgIT0gVmll
d0dlc3R1cmVUeXBlOjpTd2lwZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFzdWNjZXNz
ZnVsKSB7Ci0gICAgICAgIHJlbW92ZVN3aXBlU25hcHNob3QoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICghbV9zd2lwZVdhaXRpbmdGb3JSZXBhaW50KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3N3aXBlV2FpdGluZ0ZvclJlcGFpbnQgPSBmYWxzZTsKLSAgICByZW1vdmVT
d2lwZVNuYXBzaG90SWZSZWFkeSgpOwotfQotCiB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
c2V0UmVuZGVyVHJlZVNpemUodWludDY0X3QgcmVuZGVyVHJlZVNpemUpCiB7CiAgICAgaWYgKG1f
YWN0aXZlR2VzdHVyZVR5cGUgIT0gVmlld0dlc3R1cmVUeXBlOjpTd2lwZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFtX3N3aXBlV2FpdGluZ0ZvclJlbmRlclRyZWVTaXplVGhyZXNob2xk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fc25hcHNob3RSZW1vdmFsVGFyZ2V0UmVu
ZGVyVHJlZVNpemUgfHwgcmVuZGVyVHJlZVNpemUgPiBtX3NuYXBzaG90UmVtb3ZhbFRhcmdldFJl
bmRlclRyZWVTaXplKSB7Ci0gICAgICAgIG1fc3dpcGVXYWl0aW5nRm9yUmVuZGVyVHJlZVNpemVU
aHJlc2hvbGQgPSBmYWxzZTsKLSAgICAgICAgcmVtb3ZlU3dpcGVTbmFwc2hvdElmUmVhZHkoKTsK
LSAgICB9CisgICAgaWYgKCFtX3NuYXBzaG90UmVtb3ZhbFRhcmdldFJlbmRlclRyZWVTaXplIHx8
IHJlbmRlclRyZWVTaXplID4gbV9zbmFwc2hvdFJlbW92YWxUYXJnZXRSZW5kZXJUcmVlU2l6ZSkK
KyAgICAgICAgZGlkSGl0UmVuZGVyVHJlZVNpemVUaHJlc2hvbGQoKTsKIH0KIAotdm9pZCBWaWV3
R2VzdHVyZUNvbnRyb2xsZXI6OmRpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbigpCi17Ci0gICAgaWYg
KG1fYWN0aXZlR2VzdHVyZVR5cGUgIT0gVmlld0dlc3R1cmVUeXBlOjpTd2lwZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKCFtX3N3aXBlV2FpdGluZ0ZvclNjcm9sbFBvc2l0aW9uUmVzdG9y
YXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3dpcGVXYWl0aW5nRm9yU2Nyb2xsUG9z
aXRpb25SZXN0b3JhdGlvbiA9IGZhbHNlOwotICAgIHJlbW92ZVN3aXBlU25hcHNob3RJZlJlYWR5
KCk7Ci19Ci0KLXZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjptYWluRnJhbWVMb2FkRGlkUmVh
Y2hUZXJtaW5hbFN0YXRlKCkKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjp3aWxsQ29tbWl0
UG9zdFN3aXBlVHJhbnNpdGlvbkxheWVyVHJlZShib29sIHN1Y2Nlc3NmdWwpCiB7CiAgICAgaWYg
KG1fYWN0aXZlR2VzdHVyZVR5cGUgIT0gVmlld0dlc3R1cmVUeXBlOjpTd2lwZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKCFtX3N3aXBlV2FpdGluZ0ZvclRlcm1pbmFsTG9hZGluZ1N0YXRl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N3aXBlV2FpdGluZ0ZvclRlcm1pbmFsTG9hZGlu
Z1N0YXRlID0gZmFsc2U7Ci0KLSAgICBpZiAobV93ZWJQYWdlUHJveHkucGFnZUxvYWRTdGF0ZSgp
LmlzTG9hZGluZygpKSB7Ci0gICAgICAgIG1fc3dpcGVBY3RpdmVMb2FkTW9uaXRvcmluZ1RpbWVy
LnN0YXJ0UmVwZWF0aW5nKHN3aXBlU25hcHNob3RSZW1vdmFsQWN0aXZlTG9hZE1vbml0b3JpbmdJ
bnRlcnZhbCk7CisgICAgaWYgKCFzdWNjZXNzZnVsKSB7CisgICAgICAgIHJlbW92ZVN3aXBlU25h
cHNob3QoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fc3dpcGVXYWl0aW5nRm9y
U3VicmVzb3VyY2VMb2FkcyA9IGZhbHNlOwotICAgIHJlbW92ZVN3aXBlU25hcHNob3RJZlJlYWR5
KCk7Ci19Ci0KLXZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpkaWRTYW1lRG9jdW1lbnROYXZp
Z2F0aW9uRm9yTWFpbkZyYW1lKFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlIHR5cGUpCi17Ci0g
ICAgaWYgKG1fYWN0aXZlR2VzdHVyZVR5cGUgIT0gVmlld0dlc3R1cmVUeXBlOjpTd2lwZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhpcyBpcyBuZWFybHkgZXF1aXZhbGVudCB0byBkaWRG
aW5pc2hMb2FkIGluIHRoZSBzYW1lIGRvY3VtZW50IG5hdmlnYXRpb24gY2FzZS4KLSAgICBpZiAo
IW1fc3dpcGVXYWl0aW5nRm9yVGVybWluYWxMb2FkaW5nU3RhdGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fc3dpcGVXYWl0aW5nRm9yVGVybWluYWxMb2FkaW5nU3RhdGUgPSBmYWxzZTsKLQot
ICAgIGlmICh0eXBlICE9IFNhbWVEb2N1bWVudE5hdmlnYXRpb25TZXNzaW9uU3RhdGVSZXBsYWNl
ICYmIHR5cGUgIT0gU2FtZURvY3VtZW50TmF2aWdhdGlvblNlc3Npb25TdGF0ZVBvcCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9zd2lwZUFjdGl2ZUxvYWRNb25pdG9yaW5nVGltZXIuc3RhcnRS
ZXBlYXRpbmcoc3dpcGVTbmFwc2hvdFJlbW92YWxBY3RpdmVMb2FkTW9uaXRvcmluZ0ludGVydmFs
KTsKLX0KLQotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmFjdGl2ZUxvYWRNb25pdG9yaW5n
VGltZXJGaXJlZCgpCi17Ci0gICAgaWYgKG1fd2ViUGFnZVByb3h5LnBhZ2VMb2FkU3RhdGUoKS5p
c0xvYWRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3N3aXBlV2FpdGluZ0Zv
clN1YnJlc291cmNlTG9hZHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3dpcGVXYWl0aW5n
Rm9yU3VicmVzb3VyY2VMb2FkcyA9IGZhbHNlOwotICAgIHJlbW92ZVN3aXBlU25hcHNob3RJZlJl
YWR5KCk7Ci19Ci0KLXZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpzd2lwZVNuYXBzaG90V2F0
Y2hkb2dUaW1lckZpcmVkKCkKLXsKLSAgICByZW1vdmVTd2lwZVNuYXBzaG90KCk7Ci19Ci0KLXZv
aWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpyZW1vdmVTd2lwZVNuYXBzaG90SWZSZWFkeSgpCi17
Ci0gICAgaWYgKG1fc3dpcGVXYWl0aW5nRm9yUmVuZGVyVHJlZVNpemVUaHJlc2hvbGQgfHwgbV9z
d2lwZVdhaXRpbmdGb3JSZXBhaW50IHx8IG1fc3dpcGVXYWl0aW5nRm9yVGVybWluYWxMb2FkaW5n
U3RhdGUgfHwgbV9zd2lwZVdhaXRpbmdGb3JTdWJyZXNvdXJjZUxvYWRzIHx8IG1fc3dpcGVXYWl0
aW5nRm9yU2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
cmVtb3ZlU3dpcGVTbmFwc2hvdCgpOworICAgIGRpZFJlcGFpbnRBZnRlck5hdmlnYXRpb24oKTsK
IH0KIAogdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJlbW92ZVN3aXBlU25hcHNob3QoKQog
ewotICAgIG1fc3dpcGVXYWl0aW5nRm9yUmVuZGVyVHJlZVNpemVUaHJlc2hvbGQgPSBmYWxzZTsK
LSAgICBtX3N3aXBlV2FpdGluZ0ZvclJlcGFpbnQgPSBmYWxzZTsKLSAgICBtX3N3aXBlV2FpdGlu
Z0ZvclRlcm1pbmFsTG9hZGluZ1N0YXRlID0gZmFsc2U7Ci0gICAgbV9zd2lwZVdhaXRpbmdGb3JT
dWJyZXNvdXJjZUxvYWRzID0gZmFsc2U7Ci0gICAgbV9zd2lwZVdhaXRpbmdGb3JTY3JvbGxQb3Np
dGlvblJlc3RvcmF0aW9uID0gZmFsc2U7Ci0KLSAgICBtX3N3aXBlV2F0Y2hkb2dUaW1lci5zdG9w
KCk7Ci0gICAgbV9zd2lwZUFjdGl2ZUxvYWRNb25pdG9yaW5nVGltZXIuc3RvcCgpOworICAgIG1f
c25hcHNob3RSZW1vdmFsVHJhY2tlci5yZXNldCgpOwogCiAgICAgaWYgKG1fYWN0aXZlR2VzdHVy
ZVR5cGUgIT0gVmlld0dlc3R1cmVUeXBlOjpTd2lwZSkKICAgICAgICAgcmV0dXJuOwotICAgIAor
CiAgICAgKyttX2dlc3R1cmVQZW5kaW5nU25hcHNob3RSZW1vdmFsOwotICAgIAorCiAgICAgW21f
c25hcHNob3RWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwogICAgIG1fc25hcHNob3RWaWV3ID0g
bnVsbHB0cjsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
Vmlld0dlc3R1cmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Zp
ZXdHZXN0dXJlQ29udHJvbGxlci5oCmluZGV4IDJhOTBmYzkxZGZjOWY5MDViZDBlMzZhZmM5NDJi
ODMzNWIwZjBhZjEuLmMxNTllNDlhOWRiMjUzOTBjNzQzMWY2ZTI2MjY1MDUwNjIwMmFmOTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRy
b2xsZXIuaApAQCAtMzEsOSArMzEsMTIgQEAKICNpbmNsdWRlICJXZWFrT2JqQ1B0ci5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgor
I2luY2x1ZGUgPGNocm9ubz4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1J1bkxvb3AuaD4KIAorLy8gRklYTUU6IE1vdmUgdGhpcyBmaWxlIG91dCBvZiB0aGUgbWFj
LyBzdWJkaXJlY3RvcnkuCisKIE9CSkNfQ0xBU1MgQ0FMYXllcjsKIAogI2lmIFBMQVRGT1JNKElP
UykKQEAgLTY1LDYgKzY4LDcgQEAgY2xhc3MgVmlld0dlc3R1cmVDb250cm9sbGVyIDogcHJpdmF0
ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6CiAgICAgVmlld0dlc3R1cmVDb250cm9s
bGVyKFdlYlBhZ2VQcm94eSYpOwogICAgIH5WaWV3R2VzdHVyZUNvbnRyb2xsZXIoKTsKKyAgICB2
b2lkIHBsYXRmb3JtVGVhcmRvd24oKTsKICAgICAKICAgICBlbnVtIGNsYXNzIFZpZXdHZXN0dXJl
VHlwZSB7CiAgICAgICAgIE5vbmUsCkBAIC0xMDksOCArMTEzLDYgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBzaG91bGRJZ25vcmVQaW5uZWRTdGF0ZSgpIHsgcmV0dXJuIG1fc2hvdWxkSWdub3JlUGlu
bmVkU3RhdGU7IH0KICAgICB2b2lkIHNldFNob3VsZElnbm9yZVBpbm5lZFN0YXRlKGJvb2wgaWdu
b3JlKSB7IG1fc2hvdWxkSWdub3JlUGlubmVkU3RhdGUgPSBpZ25vcmU7IH0KLQotICAgIHZvaWQg
ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yTWFpbkZyYW1lKCk7CiAjZWxzZQogICAg
IHZvaWQgaW5zdGFsbFN3aXBlSGFuZGxlcihVSVZpZXcgKmdlc3R1cmVSZWNvZ25pemVyVmlldywg
VUlWaWV3ICpzd2lwaW5nVmlldyk7CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVCYWNrRm9yd2FyZExp
c3RTb3VyY2VWaWV3KFdLV2ViVmlldyAqKTsKQEAgLTExOSwzMCArMTIxLDcwIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGVuZFN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJ
dGVtLCBfVUlWaWV3Q29udHJvbGxlclRyYW5zaXRpb25Db250ZXh0ICosIGJvb2wgY2FuY2VsbGVk
KTsKICAgICB2b2lkIHdpbGxDb21taXRQb3N0U3dpcGVUcmFuc2l0aW9uTGF5ZXJUcmVlKGJvb2wp
OwogICAgIHZvaWQgc2V0UmVuZGVyVHJlZVNpemUodWludDY0X3QpOwotICAgIHZvaWQgZGlkUmVz
dG9yZVNjcm9sbFBvc2l0aW9uKCk7CiAjZW5kaWYKIAotICAgIHZvaWQgZGlkRmluaXNoTG9hZEZv
ck1haW5GcmFtZSgpIHsgbWFpbkZyYW1lTG9hZERpZFJlYWNoVGVybWluYWxTdGF0ZSgpOyB9Ci0g
ICAgdm9pZCBkaWRGYWlsTG9hZEZvck1haW5GcmFtZSgpIHsgbWFpbkZyYW1lTG9hZERpZFJlYWNo
VGVybWluYWxTdGF0ZSgpOyB9Ci0gICAgdm9pZCBtYWluRnJhbWVMb2FkRGlkUmVhY2hUZXJtaW5h
bFN0YXRlKCk7Ci0gICAgdm9pZCByZW1vdmVTd2lwZVNuYXBzaG90KCk7CisgICAgV2ViQ29yZTo6
Q29sb3IgYmFja2dyb3VuZENvbG9yRm9yQ3VycmVudFNuYXBzaG90KCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZ3JvdW5kQ29sb3JGb3JDdXJyZW50U25hcHNob3Q7IH0KKworICAgIHZvaWQgZGlkRmlu
aXNoTG9hZEZvck1haW5GcmFtZSgpIHsgZGlkUmVhY2hNYWluRnJhbWVMb2FkVGVybWluYWxTdGF0
ZSgpOyB9CisgICAgdm9pZCBkaWRGYWlsTG9hZEZvck1haW5GcmFtZSgpIHsgZGlkUmVhY2hNYWlu
RnJhbWVMb2FkVGVybWluYWxTdGF0ZSgpOyB9CisgICAgdm9pZCBkaWRGaXJzdFZpc3VhbGx5Tm9u
RW1wdHlMYXlvdXRGb3JNYWluRnJhbWUoKTsKKyAgICB2b2lkIGRpZFJlcGFpbnRBZnRlck5hdmln
YXRpb24oKTsKKyAgICB2b2lkIGRpZEhpdFJlbmRlclRyZWVTaXplVGhyZXNob2xkKCk7CisgICAg
dm9pZCBkaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24oKTsKKyAgICB2b2lkIGRpZFJlYWNoTWFpbkZy
YW1lTG9hZFRlcm1pbmFsU3RhdGUoKTsKICAgICB2b2lkIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRp
b25Gb3JNYWluRnJhbWUoU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUpOwogCi0gICAgV2ViQ29y
ZTo6Q29sb3IgYmFja2dyb3VuZENvbG9yRm9yQ3VycmVudFNuYXBzaG90KCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZ3JvdW5kQ29sb3JGb3JDdXJyZW50U25hcHNob3Q7IH0KKyAgICB2b2lkIGNoZWNr
Rm9yQWN0aXZlTG9hZHMoKTsKKworICAgIHZvaWQgcmVtb3ZlU3dpcGVTbmFwc2hvdCgpOwogCiBw
cml2YXRlOgogICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyLgogICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIHN3aXBlU25hcHNob3RXYXRjaGRvZ1RpbWVyRmlyZWQoKTsK
LSAgICB2b2lkIGFjdGl2ZUxvYWRNb25pdG9yaW5nVGltZXJGaXJlZCgpOworICAgIHN0YXRpYyBW
aWV3R2VzdHVyZUNvbnRyb2xsZXIqIGdlc3R1cmVDb250cm9sbGVyRm9yUGFnZSh1aW50NjRfdCk7
CisKKyAgICBjbGFzcyBTbmFwc2hvdFJlbW92YWxUcmFja2VyIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIGVudW0gRXZlbnQgOiB1aW50OF90IHsKKyAgICAgICAgICAgIFZpc3VhbGx5Tm9uRW1wdHlM
YXlvdXQgPSAxIDw8IDAsCisgICAgICAgICAgICBSZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCA9IDEg
PDwgMSwKKyAgICAgICAgICAgIFJlcGFpbnRBZnRlck5hdmlnYXRpb24gPSAxIDw8IDIsCisgICAg
ICAgICAgICBNYWluRnJhbWVMb2FkID0gMSA8PCAzLAorICAgICAgICAgICAgU3VicmVzb3VyY2VM
b2FkcyA9IDEgPDwgNCwKKyAgICAgICAgICAgIFNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24gPSAx
IDw8IDUKKyAgICAgICAgfTsKKyAgICAgICAgdHlwZWRlZiB1aW50OF90IEV2ZW50czsKKworICAg
ICAgICBTbmFwc2hvdFJlbW92YWxUcmFja2VyKCk7CisKKyAgICAgICAgdm9pZCBzdGFydChFdmVu
dHMsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPik7CisgICAgICAgIHZvaWQgcmVzZXQoKTsKKworICAg
ICAgICBib29sIGV2ZW50T2NjdXJyZWQoRXZlbnRzKTsKKyAgICAgICAgYm9vbCBjYW5jZWxPdXRz
dGFuZGluZ0V2ZW50KEV2ZW50cyk7CisKKyAgICAgICAgdm9pZCBzdGFydFdhdGNoZG9nKHN0ZDo6
Y2hyb25vOjpzZWNvbmRzKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgbG9nKFN0cmlu
Zyk7CisgICAgICAgIFN0cmluZyBldmVudHNEZXNjcmlwdGlvbihFdmVudHMpOworCisgICAgICAg
IHZvaWQgZmlyZVJlbW92YWxDYWxsYmFja0ltbWVkaWF0ZWx5KCk7CisgICAgICAgIHZvaWQgZmly
ZVJlbW92YWxDYWxsYmFja0lmUG9zc2libGUoKTsKKyAgICAgICAgdm9pZCB3YXRjaGRvZ1RpbWVy
RmlyZWQoKTsKKworICAgICAgICBFdmVudHMgbV9vdXRzdGFuZGluZ0V2ZW50cyB7IDAgfTsKKyAg
ICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IG1fcmVtb3ZhbENhbGxiYWNrOworICAgICAgICBz
dGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IG1fc3RhcnRUaW1lOworCisgICAg
ICAgIFJ1bkxvb3A6OlRpbWVyPFNuYXBzaG90UmVtb3ZhbFRyYWNrZXI+IG1fd2F0Y2hkb2dUaW1l
cjsKKyAgICB9OwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMu
CiAgICAgdm9pZCBkaWRDb2xsZWN0R2VvbWV0cnlGb3JNYWduaWZpY2F0aW9uR2VzdHVyZShXZWJD
b3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRCb3VuZHMsIGJvb2wgZnJhbWVIYW5kbGVzTWFn
bmlmaWNhdGlvbkdlc3R1cmUpOwogICAgIHZvaWQgZGlkQ29sbGVjdEdlb21ldHJ5Rm9yU21hcnRN
YWduaWZpY2F0aW9uR2VzdHVyZShXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdpbiwgV2ViQ29yZTo6
RmxvYXRSZWN0IHJlbmRlclJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudEJv
dW5kcywgYm9vbCBpc1JlcGxhY2VkRWxlbWVudCwgZG91YmxlIHZpZXdwb3J0TWluaW11bVNjYWxl
LCBkb3VibGUgdmlld3BvcnRNYXhpbXVtU2NhbGUpOwotICAgIHZvaWQgZGlkSGl0UmVuZGVyVHJl
ZVNpemVUaHJlc2hvbGQoKTsKLSAgICB2b2lkIHJlbW92ZVN3aXBlU25hcHNob3RBZnRlclJlcGFp
bnQoKTsKIAogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgc2NhbGVkTWFnbmlmaWNhdGlvbk9yaWdp
bihXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdpbiwgZG91YmxlIHNjYWxlKTsKIApAQCAtMTU5LDE0
ICsyMDEsMTMgQEAgcHJpdmF0ZToKICAgICBDQUxheWVyICpkZXRlcm1pbmVMYXllckFkamFjZW50
VG9TbmFwc2hvdEZvclBhcmVudChTd2lwZURpcmVjdGlvbiwgQ0FMYXllciAqc25hcHNob3RMYXll
clBhcmVudCkgY29uc3Q7CiAgICAgdm9pZCBhcHBseURlYnVnZ2luZ1Byb3BlcnRpZXNUb1N3aXBl
Vmlld3MoKTsKICAgICB2b2lkIGRpZE1vdmVTd2lwZVNuYXBzaG90TGF5ZXIoKTsKLSNlbHNlCi0g
ICAgdm9pZCByZW1vdmVTd2lwZVNuYXBzaG90SWZSZWFkeSgpOworCisgICAgdm9pZCBmb3JjZVJl
cGFpbnRJZk5lZWRlZCgpOwogI2VuZGlmCiAKICAgICBXZWJQYWdlUHJveHkmIG1fd2ViUGFnZVBy
b3h5OwogICAgIFZpZXdHZXN0dXJlVHlwZSBtX2FjdGl2ZUdlc3R1cmVUeXBlIHsgVmlld0dlc3R1
cmVUeXBlOjpOb25lIH07CiAKLSAgICBSdW5Mb29wOjpUaW1lcjxWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI+IG1fc3dpcGVXYXRjaGRvZ1RpbWVyOwogICAgIFJ1bkxvb3A6OlRpbWVyPFZpZXdHZXN0dXJl
Q29udHJvbGxlcj4gbV9zd2lwZUFjdGl2ZUxvYWRNb25pdG9yaW5nVGltZXI7CiAKICAgICBXZWJD
b3JlOjpDb2xvciBtX2JhY2tncm91bmRDb2xvckZvckN1cnJlbnRTbmFwc2hvdDsKQEAgLTE3NCw4
ICsyMTUsNiBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBSZWZQdHI8Vmlld1Nu
YXBzaG90PiBtX2N1cnJlbnRTd2lwZVNuYXBzaG90OwogCi0gICAgUnVuTG9vcDo6VGltZXI8Vmll
d0dlc3R1cmVDb250cm9sbGVyPiBtX3N3aXBlV2F0Y2hkb2dBZnRlckZpcnN0VmlzdWFsbHlOb25F
bXB0eUxheW91dFRpbWVyOwotCiAgICAgZG91YmxlIG1fbWFnbmlmaWNhdGlvbjsKICAgICBXZWJD
b3JlOjpGbG9hdFBvaW50IG1fbWFnbmlmaWNhdGlvbk9yaWdpbjsKIApAQCAtMjA4LDcgKzI0Nyw4
IEBAIHByaXZhdGU6CiAgICAgdm9pZCAoXm1fZGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFjayko
Q0dSZWN0KSB7IG51bGxwdHIgfTsKIAogICAgIGJvb2wgbV9zaG91bGRJZ25vcmVQaW5uZWRTdGF0
ZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3N3aXBlSW5Qcm9ncmVzcyB7IGZhbHNlIH07CisKKyAg
ICBib29sIG1faGFzT3V0c3RhbmRpbmdSZXBhaW50UmVxdWVzdCB7IGZhbHNlIH07CiAjZWxzZSAg
ICAKICAgICBVSVZpZXcgKm1fbGl2ZVN3aXBlVmlldyB7IG51bGxwdHIgfTsKICAgICBSZXRhaW5Q
dHI8VUlWaWV3PiBtX2xpdmVTd2lwZVZpZXdDbGlwcGluZ1ZpZXc7CkBAIC0yMjIsMTIgKzI2Miw3
IEBAIHByaXZhdGU6CiAgICAgdWludDY0X3QgbV9nZXN0dXJlUGVuZGluZ1NuYXBzaG90UmVtb3Zh
bCB7IDAgfTsKICNlbmRpZgogCi0gICAgYm9vbCBtX3N3aXBlV2FpdGluZ0ZvclZpc3VhbGx5Tm9u
RW1wdHlMYXlvdXQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9zd2lwZVdhaXRpbmdGb3JSZW5kZXJU
cmVlU2l6ZVRocmVzaG9sZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3N3aXBlV2FpdGluZ0ZvclJl
cGFpbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9zd2lwZVdhaXRpbmdGb3JUZXJtaW5hbExvYWRp
bmdTdGF0ZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3N3aXBlV2FpdGluZ0ZvclN1YnJlc291cmNl
TG9hZHMgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9zd2lwZVdhaXRpbmdGb3JTY3JvbGxQb3NpdGlv
blJlc3RvcmF0aW9uIHsgZmFsc2UgfTsKKyAgICBTbmFwc2hvdFJlbW92YWxUcmFja2VyIG1fc25h
cHNob3RSZW1vdmFsVHJhY2tlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIu
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29u
dHJvbGxlci5tZXNzYWdlcy5pbgppbmRleCAxOGMzMjRjMDJjZDgxMDZhMGQ3YzA2YzdlYmJlYjc1
Yjc4ZTRkMzVmLi5mNTFmZDJkNzZjNDk1MDJkYWE3YjNmY2Q2NWE3YzNlMTZhNmMyNzcyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxl
ci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0
dXJlQ29udHJvbGxlci5tZXNzYWdlcy5pbgpAQCAtMjEsNyArMjEsNyBAQAogIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogCiBtZXNzYWdlcyAtPiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIgewotI2lmICFQTEFURk9STShJ
T1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIERpZENvbGxlY3RHZW9tZXRyeUZvck1hZ25pZmlj
YXRpb25HZXN0dXJlKFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudEJvdW5kcywgYm9v
bCBmcmFtZUhhbmRsZXNNYWduaWZpY2F0aW9uR2VzdHVyZSkKICAgICBEaWRDb2xsZWN0R2VvbWV0
cnlGb3JTbWFydE1hZ25pZmljYXRpb25HZXN0dXJlKFdlYkNvcmU6OkZsb2F0UG9pbnQgb3JpZ2lu
LCBXZWJDb3JlOjpGbG9hdFJlY3QgcmVuZGVyUmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2li
bGVDb250ZW50Qm91bmRzLCBib29sIGlzUmVwbGFjZWRFbGVtZW50LCBkb3VibGUgdmlld3BvcnRN
aW5pbXVtU2NhbGUsIGRvdWJsZSB2aWV3cG9ydE1heGltdW1TY2FsZSkKICAgICBEaWRIaXRSZW5k
ZXJUcmVlU2l6ZVRocmVzaG9sZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tCmluZGV4IDM4YjdlMzY4YzU5OTVh
MjQ0YzhhN2FmOWNkODI2YTg1NGNmNzVhN2MuLjAzMzg2YWE4NGFhMWIxMWZlMzQ2NjgyMGYyNmUw
MjA5ZmMxOTdmNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmll
d0dlc3R1cmVDb250cm9sbGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tCkBAIC00Nyw3ICs0Nyw3IEBACiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxMDAwCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA8IDEwMTAwMAogI2RlZmluZSBFTkFCTEVfTEVHQUNZX1NXSVBFX1NIQURPV19TVFlM
RSAxCiAjZWxzZQogI2RlZmluZSBFTkFCTEVfTEVHQUNZX1NXSVBFX1NIQURPV19TVFlMRSAwCkBA
IC03OCw5ICs3OCw2IEBAIHN0YXRpYyBjb25zdCBDR0Zsb2F0IG1pbmltdW1Ib3Jpem9udGFsU3dp
cGVEaXN0YW5jZSA9IDE1Owogc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1TY3JvbGxFdmVudFJh
dGlvRm9yU3dpcGUgPSAwLjU7CiAKIHN0YXRpYyBjb25zdCBmbG9hdCBzd2lwZVNuYXBzaG90UmVt
b3ZhbFJlbmRlclRyZWVTaXplVGFyZ2V0RnJhY3Rpb24gPSAwLjU7Ci1zdGF0aWMgY29uc3Qgc3Rk
OjpjaHJvbm86OnNlY29uZHMgc3dpcGVTbmFwc2hvdFJlbW92YWxXYXRjaGRvZ0R1cmF0aW9uID0g
NV9zOwotc3RhdGljIGNvbnN0IHN0ZDo6Y2hyb25vOjpzZWNvbmRzIHN3aXBlU25hcHNob3RSZW1v
dmFsV2F0Y2hkb2dBZnRlckZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dER1cmF0aW9uID0gM19z
Owotc3RhdGljIGNvbnN0IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc3dpcGVTbmFwc2hvdFJl
bW92YWxBY3RpdmVMb2FkTW9uaXRvcmluZ0ludGVydmFsID0gMjUwX21zOwogCiBAaW50ZXJmYWNl
IFdLU3dpcGVDYW5jZWxsYXRpb25UcmFja2VyIDogTlNPYmplY3QgewogQHByaXZhdGUKQEAgLTk3
LDE2ICs5NCw3IEBAIHN0YXRpYyBjb25zdCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHN3aXBl
U25hcHNob3RSZW1vdmFsQWN0aXZlTG9hZE1vbml0b3JpbmdJCiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCi1WaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlZpZXdHZXN0dXJlQ29udHJvbGxlcihXZWJQYWdl
UHJveHkmIHdlYlBhZ2VQcm94eSkKLSAgICA6IG1fd2ViUGFnZVByb3h5KHdlYlBhZ2VQcm94eSkK
LSAgICAsIG1fc3dpcGVXYXRjaGRvZ1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlZpZXdH
ZXN0dXJlQ29udHJvbGxlcjo6c3dpcGVTbmFwc2hvdFdhdGNoZG9nVGltZXJGaXJlZCkKLSAgICAs
IG1fc3dpcGVBY3RpdmVMb2FkTW9uaXRvcmluZ1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywg
JlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YWN0aXZlTG9hZE1vbml0b3JpbmdUaW1lckZpcmVkKQot
ICAgICwgbV9zd2lwZVdhdGNoZG9nQWZ0ZXJGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRUaW1l
cihSdW5Mb29wOjptYWluKCksIHRoaXMsICZWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnN3aXBlU25h
cHNob3RXYXRjaGRvZ1RpbWVyRmlyZWQpCi17Ci0gICAgbV93ZWJQYWdlUHJveHkucHJvY2Vzcygp
LmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpLCAqdGhpcyk7Ci19Ci0K
LVZpZXdHZXN0dXJlQ29udHJvbGxlcjo6flZpZXdHZXN0dXJlQ29udHJvbGxlcigpCit2b2lkIFZp
ZXdHZXN0dXJlQ29udHJvbGxlcjo6cGxhdGZvcm1UZWFyZG93bigpCiB7CiAgICAgaWYgKG1fc3dp
cGVDYW5jZWxsYXRpb25UcmFja2VyKQogICAgICAgICBbbV9zd2lwZUNhbmNlbGxhdGlvblRyYWNr
ZXIgc2V0SXNDYW5jZWxsZWQ6WUVTXTsKQEAgLTExOCw4ICsxMDYsNiBAQCBWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6On5WaWV3R2VzdHVyZUNvbnRyb2xsZXIoKQogICAgICAgICBCbG9ja19yZWxlYXNl
KG1fZGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFjayk7CiAgICAgICAgIG1fZGlkTW92ZVN3aXBl
U25hcHNob3RDYWxsYmFjayA9IG51bGxwdHI7CiAgICAgfQotCi0gICAgbV93ZWJQYWdlUHJveHku
cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6Vmlld0dlc3R1cmVDb250
cm9sbGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsK
IH0KIAogc3RhdGljIGRvdWJsZSByZXNpc3RhbmNlRm9yRGVsdGEoZG91YmxlIGRlbHRhU2NhbGUs
IGRvdWJsZSBjdXJyZW50U2NhbGUpCkBAIC01MzUsNyArNTIxLDYgQEAgdm9pZCBWaWV3R2VzdHVy
ZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRh
cmdldEl0ZW0KICAgICBtX3dlYlBhZ2VQcm94eS5uYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKCk7
CiAKICAgICBtX2FjdGl2ZUdlc3R1cmVUeXBlID0gVmlld0dlc3R1cmVUeXBlOjpTd2lwZTsKLSAg
ICBtX3N3aXBlSW5Qcm9ncmVzcyA9IHRydWU7CiAKICAgICBDQUxheWVyICpyb290Q29udGVudExh
eWVyID0gbV93ZWJQYWdlUHJveHkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcigpOwog
CkBAIC03NTIsOCArNzM3LDYgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVuZFN3aXBl
R2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJdGVtLAogCiAgICAgbV9zd2lw
ZUNhbmNlbGxhdGlvblRyYWNrZXIgPSBudWxscHRyOwogCi0gICAgbV9zd2lwZUluUHJvZ3Jlc3Mg
PSBmYWxzZTsKLQogICAgIENBTGF5ZXIgKnJvb3RMYXllciA9IG1fd2ViUGFnZVByb3h5LmFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoKTsKIAogICAgIFtyb290TGF5ZXIgc2V0U2hhZG93
T3BhY2l0eTowXTsKQEAgLTc3MSwxMTAgKzc1NCw0NyBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJv
bGxlcjo6ZW5kU3dpcGVHZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0ZW0s
CiAKICAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6Vmlld0dlc3R1
cmVHZW9tZXRyeUNvbGxlY3Rvcjo6U2V0UmVuZGVyVHJlZVNpemVOb3RpZmljYXRpb25UaHJlc2hv
bGQocmVuZGVyVHJlZVNpemUgKiBzd2lwZVNuYXBzaG90UmVtb3ZhbFJlbmRlclRyZWVTaXplVGFy
Z2V0RnJhY3Rpb24pLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7CiAKLSAgICBtX3N3aXBlV2Fp
dGluZ0ZvclZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQgPSB0cnVlOwotICAgIG1fc3dpcGVXYWl0aW5n
Rm9yUmVuZGVyVHJlZVNpemVUaHJlc2hvbGQgPSB0cnVlOwotCiAgICAgbV93ZWJQYWdlUHJveHku
bmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQodHJ1ZSwgKnRhcmdldEl0ZW0pOwogICAgIG1fd2ViUGFn
ZVByb3h5LmdvVG9CYWNrRm9yd2FyZEl0ZW0odGFyZ2V0SXRlbSk7CiAKKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGJlIGFibGUgdG8gaW5jbHVkZSBzY3JvbGwgcG9zaXRpb24gcmVzdG9yYXRpb24g
aGVyZSwKKyAgICAvLyBhbmQgdGhlbiBjYW4gYWRkcmVzcyB0aGUgRklYTUUgaW4gZGlkRmlyc3RW
aXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yTWFpbkZyYW1lLgorICAgIG1fc25hcHNob3RSZW1vdmFs
VHJhY2tlci5zdGFydChTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpWaXN1YWxseU5vbkVtcHR5TGF5
b3V0CisgICAgICAgIHwgU25hcHNob3RSZW1vdmFsVHJhY2tlcjo6UmVuZGVyVHJlZVNpemVUaHJl
c2hvbGQKKyAgICAgICAgfCBTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpNYWluRnJhbWVMb2FkCisg
ICAgICAgIHwgU25hcHNob3RSZW1vdmFsVHJhY2tlcjo6U3VicmVzb3VyY2VMb2FkcywgW3RoaXNd
IHsKKyAgICAgICAgICAgIHRoaXMtPmZvcmNlUmVwYWludElmTmVlZGVkKCk7CisgICAgICAgIH0p
OworCiAgICAgLy8gRklYTUU6IExpa2Ugb24gaU9TLCB3ZSBzaG91bGQgZW5zdXJlIHRoYXQgZXZl
biBpZiBvbmUgb2YgdGhlIHRpbWVvdXRzIGZpcmVzLAotICAgIC8vIHdlIG5ldmVyIHNob3cgdGhl
IG9sZCBwYWdlIGNvbnRlbnQsIGluc3RlYWQgc2hvd2luZyB3aGl0ZSAob3IgdGhlIHNuYXBzaG90
IGJhY2tncm91bmQgY29sb3IpLgotICAgIG1fc3dpcGVXYXRjaGRvZ1RpbWVyLnN0YXJ0T25lU2hv
dChzd2lwZVNuYXBzaG90UmVtb3ZhbFdhdGNoZG9nRHVyYXRpb24uY291bnQoKSk7CisgICAgLy8g
d2UgbmV2ZXIgc2hvdyB0aGUgb2xkIHBhZ2UgY29udGVudCwgaW5zdGVhZCBzaG93aW5nIHRoZSBz
bmFwc2hvdCBiYWNrZ3JvdW5kIGNvbG9yLgogCiAgICAgaWYgKFZpZXdTbmFwc2hvdCogc25hcHNo
b3QgPSB0YXJnZXRJdGVtLT5zbmFwc2hvdCgpKQogICAgICAgICBtX2JhY2tncm91bmRDb2xvckZv
ckN1cnJlbnRTbmFwc2hvdCA9IHNuYXBzaG90LT5iYWNrZ3JvdW5kQ29sb3IoKTsKIH0KIAotdm9p
ZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZEhpdFJlbmRlclRyZWVTaXplVGhyZXNob2xkKCkK
LXsKLSAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBl
IHx8IG1fc3dpcGVJblByb2dyZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N3aXBlV2Fp
dGluZ0ZvclJlbmRlclRyZWVTaXplVGhyZXNob2xkID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1fc3dp
cGVXYWl0aW5nRm9yVmlzdWFsbHlOb25FbXB0eUxheW91dCkgewotICAgICAgICAvLyBGSVhNRTog
SWRlYWxseSB3ZSB3b3VsZCBjYWxsIHJlbW92ZVN3aXBlU25hcHNob3RBZnRlclJlcGFpbnQoKSBo
ZXJlLCBidXQgc29tZXRpbWVzCi0gICAgICAgIC8vIHNjcm9sbCBwb3NpdGlvbiBpc24ndCBkb25l
IHJlc3RvcmluZyB1bnRpbCBkaWRGaW5pc2hMb2FkRm9yRnJhbWUsIHNvIHdlIGZsYXNoIHRoZSB3
cm9uZyBjb250ZW50LgotICAgIH0KLX0KLQotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRp
ZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvck1haW5GcmFtZSgpCi17Ci0gICAgaWYgKG1f
YWN0aXZlR2VzdHVyZVR5cGUgIT0gVmlld0dlc3R1cmVUeXBlOjpTd2lwZSB8fCBtX3N3aXBlSW5Q
cm9ncmVzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zd2lwZVdhaXRpbmdGb3JWaXN1YWxs
eU5vbkVtcHR5TGF5b3V0ID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1fc3dpcGVXYWl0aW5nRm9yUmVu
ZGVyVHJlZVNpemVUaHJlc2hvbGQpIHsKLSAgICAgICAgLy8gRklYTUU6IElkZWFsbHkgd2Ugd291
bGQgY2FsbCByZW1vdmVTd2lwZVNuYXBzaG90QWZ0ZXJSZXBhaW50KCkgaGVyZSwgYnV0IHNvbWV0
aW1lcwotICAgICAgICAvLyBzY3JvbGwgcG9zaXRpb24gaXNuJ3QgZG9uZSByZXN0b3JpbmcgdW50
aWwgZGlkRmluaXNoTG9hZEZvckZyYW1lLCBzbyB3ZSBmbGFzaCB0aGUgd3JvbmcgY29udGVudC4K
LSAgICB9IGVsc2UgewotICAgICAgICBtX3N3aXBlV2F0Y2hkb2dBZnRlckZpcnN0VmlzdWFsbHlO
b25FbXB0eUxheW91dFRpbWVyLnN0YXJ0T25lU2hvdChzd2lwZVNuYXBzaG90UmVtb3ZhbFdhdGNo
ZG9nQWZ0ZXJGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXREdXJhdGlvbi5jb3VudCgpKTsKLSAg
ICAgICAgbV9zd2lwZVdhdGNoZG9nVGltZXIuc3RvcCgpOwotICAgIH0KLX0KLQotdm9pZCBWaWV3
R2VzdHVyZUNvbnRyb2xsZXI6Om1haW5GcmFtZUxvYWREaWRSZWFjaFRlcm1pbmFsU3RhdGUoKQor
dm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmZvcmNlUmVwYWludElmTmVlZGVkKCkKIHsKLSAg
ICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBlIHx8IG1f
c3dpcGVJblByb2dyZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV93ZWJQYWdlUHJv
eHkucGFnZUxvYWRTdGF0ZSgpLmlzTG9hZGluZygpKSB7Ci0gICAgICAgIG1fc3dpcGVBY3RpdmVM
b2FkTW9uaXRvcmluZ1RpbWVyLnN0YXJ0UmVwZWF0aW5nKHN3aXBlU25hcHNob3RSZW1vdmFsQWN0
aXZlTG9hZE1vbml0b3JpbmdJbnRlcnZhbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICByZW1vdmVTd2lwZVNuYXBzaG90QWZ0ZXJSZXBhaW50KCk7Ci19Ci0KLXZvaWQgVmlld0dlc3R1
cmVDb250cm9sbGVyOjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yTWFpbkZyYW1lKFNhbWVE
b2N1bWVudE5hdmlnYXRpb25UeXBlIHR5cGUpCi17Ci0gICAgaWYgKG1fYWN0aXZlR2VzdHVyZVR5
cGUgIT0gVmlld0dlc3R1cmVUeXBlOjpTd2lwZSB8fCBtX3N3aXBlSW5Qcm9ncmVzcykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKHR5cGUgIT0gU2FtZURvY3VtZW50TmF2aWdhdGlvblNlc3Np
b25TdGF0ZVJlcGxhY2UgJiYgdHlwZSAhPSBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uU2Vzc2lvblN0
YXRlUG9wKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N3aXBlQWN0aXZlTG9hZE1vbml0b3Jp
bmdUaW1lci5zdGFydFJlcGVhdGluZyhzd2lwZVNuYXBzaG90UmVtb3ZhbEFjdGl2ZUxvYWRNb25p
dG9yaW5nSW50ZXJ2YWwpOwotfQotCi12b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YWN0aXZl
TG9hZE1vbml0b3JpbmdUaW1lckZpcmVkKCkKLXsKLSAgICBpZiAobV93ZWJQYWdlUHJveHkucGFn
ZUxvYWRTdGF0ZSgpLmlzTG9hZGluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZW1vdmVT
d2lwZVNuYXBzaG90QWZ0ZXJSZXBhaW50KCk7Ci19Ci0KLXZvaWQgVmlld0dlc3R1cmVDb250cm9s
bGVyOjpzd2lwZVNuYXBzaG90V2F0Y2hkb2dUaW1lckZpcmVkKCkKLXsKLSAgICByZW1vdmVTd2lw
ZVNuYXBzaG90QWZ0ZXJSZXBhaW50KCk7Ci19Ci0KLXZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVy
OjpyZW1vdmVTd2lwZVNuYXBzaG90QWZ0ZXJSZXBhaW50KCkKLXsKLSAgICBtX3N3aXBlQWN0aXZl
TG9hZE1vbml0b3JpbmdUaW1lci5zdG9wKCk7Ci0KLSAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlw
ZSAhPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBlIHx8IG1fc3dpcGVJblByb2dyZXNzKQorICAgIGlm
IChtX2FjdGl2ZUdlc3R1cmVUeXBlICE9IFZpZXdHZXN0dXJlVHlwZTo6U3dpcGUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChtX3N3aXBlV2FpdGluZ0ZvclJlcGFpbnQpCisgICAgaWYgKG1f
aGFzT3V0c3RhbmRpbmdSZXBhaW50UmVxdWVzdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9z
d2lwZVdhaXRpbmdGb3JSZXBhaW50ID0gdHJ1ZTsKKyAgICBtX2hhc091dHN0YW5kaW5nUmVwYWlu
dFJlcXVlc3QgPSB0cnVlOwogCi0gICAgV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHkgPSAmbV93
ZWJQYWdlUHJveHk7Ci0gICAgbV93ZWJQYWdlUHJveHkuZm9yY2VSZXBhaW50KFZvaWRDYWxsYmFj
azo6Y3JlYXRlKFt3ZWJQYWdlUHJveHldIChDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7Ci0g
ICAgICAgIHdlYlBhZ2VQcm94eS0+cmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpOwor
ICAgIHVpbnQ2NF90IHBhZ2VJRCA9IG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpOworICAgIG1fd2Vi
UGFnZVByb3h5LmZvcmNlUmVwYWludChWb2lkQ2FsbGJhY2s6OmNyZWF0ZShbdGhpcywgcGFnZUlE
XSAoQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgICAgICBpZiAoYXV0byBnZXN0dXJl
Q29udHJvbGxlciA9IGdlc3R1cmVDb250cm9sbGVyRm9yUGFnZShwYWdlSUQpKQorICAgICAgICAg
ICAgZ2VzdHVyZUNvbnRyb2xsZXItPnJlbW92ZVN3aXBlU25hcHNob3QoKTsKICAgICB9KSk7CiB9
CiAKIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpyZW1vdmVTd2lwZVNuYXBzaG90KCkKIHsK
LSAgICBtX3N3aXBlV2FpdGluZ0ZvclJlcGFpbnQgPSBmYWxzZTsKKyAgICBtX3NuYXBzaG90UmVt
b3ZhbFRyYWNrZXIucmVzZXQoKTsKIAotICAgIG1fc3dpcGVXYXRjaGRvZ1RpbWVyLnN0b3AoKTsK
LSAgICBtX3N3aXBlV2F0Y2hkb2dBZnRlckZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dFRpbWVy
LnN0b3AoKTsKKyAgICBtX2hhc091dHN0YW5kaW5nUmVwYWludFJlcXVlc3QgPSBmYWxzZTsKIAog
ICAgIGlmIChtX2FjdGl2ZUdlc3R1cmVUeXBlICE9IFZpZXdHZXN0dXJlVHlwZTo6U3dpcGUpCiAg
ICAgICAgIHJldHVybjsKQEAgLTkyMSw0ICs4NDEsNCBAQCBkb3VibGUgVmlld0dlc3R1cmVDb250
cm9sbGVyOjptYWduaWZpY2F0aW9uKCkgY29uc3QKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAK
LSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAx
ZDQyOTVmZjI0ODk1NjYzMzY2Njk4OTY5ZTA0MTk5YTdhYjc2NTg0Li4wNzFlOGRlODFmZmE5OWM2
MDExYzg3OTY5ODg1MmZmYTZlZjRiZjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NjEsNiArNjYxLDcgQEAKIAkJMkRBQ0U2
NEUxOEFEQkZGMDAwRTRDQTc2IC8qIF9XS1RodW1ibmFpbFZpZXdJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBQ0U2NEQxOEFEQkZGMDAw
RTRDQTc2IC8qIF9XS1RodW1ibmFpbFZpZXdJbnRlcm5hbC5oICovOyB9OwogCQkyREFGMDZENjE4
QkQxQTQ3MDA4MUNFQjEgLyogU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBRjA2RDQxOEJEMUE0NzAw
ODFDRUIxIC8qIFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMkRBRjA2
RDcxOEJEMUE0NzAwODFDRUIxIC8qIFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREFGMDZENTE4QkQx
QTQ3MDA4MUNFQjEgLyogU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5tbSAqLzsgfTsKKwkJ
MkRBRjRGRkIxQjYzNjE4MTAwNjAxM0Q2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREFGNEZGQTFCNjM2
MTgxMDA2MDEzRDYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJMkRCOUM0
QUMxQjMyNTFCRDAwNzBGMjdGIC8qIFNhZmFyaVNlcnZpY2VzU1BJLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREI5QzRBQjFCMzI1MUJEMDA3MEYyN0Yg
LyogU2FmYXJpU2VydmljZXNTUEkuaCAqLzsgfTsKIAkJMkRDNkQ5QzMxOEM0NEE2MTAwNDNCQUQ0
IC8qIFdLV2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREM2RDlDMTE4QzQ0QTYxMDA0M0JBRDQgLyog
V0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaCAqLzsgfTsKIAkJMkRDNkQ5QzQxOEM0
NEE2MTAwNDNCQUQ0IC8qIFdLV2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRDNkQ5QzIxOEM0NEE2
MTAwNDNCQUQ0IC8qIFdLV2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5Lm1tICovOyB9OwpA
QCAtMjgwNiw2ICsyODA3LDcgQEAKIAkJMkRBRjA2RDQxOEJEMUE0NzAwODFDRUIxIC8qIFNtYXJ0
TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5oOyBwYXRoID0gaW9zL1NtYXJ0TWFnbmlm
aWNhdGlvbkNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRBRjA2
RDUxOEJEMUE0NzAwODFDRUIxIC8qIFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBTbWFydE1hZ25pZmljYXRpb25D
b250cm9sbGVyLm1tOyBwYXRoID0gaW9zL1NtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQUYwNkQ4MThCRDIzQkEwMDgxQ0VCMSAv
KiBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFNtYXJ0TWFn
bmlmaWNhdGlvbkNvbnRyb2xsZXIubWVzc2FnZXMuaW47IHBhdGggPSBpb3MvU21hcnRNYWduaWZp
Y2F0aW9uQ29udHJvbGxlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMkRBRjRGRkExQjYzNjE4MTAwNjAxM0Q2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyREI5QzRBQjFCMzI1MUJEMDA3
MEYyN0YgLyogU2FmYXJpU2VydmljZXNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2FmYXJpU2VydmljZXNTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MkRDNkQ5QzExOEM0NEE2MTAwNDNCQUQ0IC8qIFdLV2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lz
dHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2ViVmlld0NvbnRlbnRQ
cm92aWRlclJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQzZEOUMy
MThDNDRBNjEwMDQzQkFENCAvKiBXS1dlYlZpZXdDb250ZW50UHJvdmlkZXJSZWdpc3RyeS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViVmlld0NvbnRlbnRQ
cm92aWRlclJlZ2lzdHJ5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjEwNyw2
ICs2MTA5LDcgQEAKIAkJCQk0QTQxMEYzQTE5QUY3QjA0MDAyRUJBQjUgLyogVXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCAqLywKIAkJCQk0QTQxMEYzQjE5QUY3QjA0MDAy
RUJBQjUgLyogVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eS5jcHAgKi8sCiAJCQkJNEE0
MTBGM0MxOUFGN0IwNDAwMkVCQUI1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHku
aCAqLywKKwkJCQkyREFGNEZGQTFCNjM2MTgxMDA2MDEzRDYgLyogVmlld0dlc3R1cmVDb250cm9s
bGVyLmNwcCAqLywKIAkJCQkxQTBGMjlFMTEyMEI0NDQyMDA1M0QxQjkgLyogVmlzaXRlZExpbmtQ
cm92aWRlci5jcHAgKi8sCiAJCQkJMUEwRjI5RTIxMjBCNDQ0MjAwNTNEMUI5IC8qIFZpc2l0ZWRM
aW5rUHJvdmlkZXIuaCAqLywKIAkJCQkxQTYwMjI0OTE4QzE2QjA4MDBDM0U4QzkgLyogVmlzaXRl
ZExpbmtQcm92aWRlci5tZXNzYWdlcy5pbiAqLywKQEAgLTk0NDIsNiArOTQ0NSw3IEBACiAJCQkJ
MUE2NDIzMDgxMkREMDlFQjAwQ0FBRTJDIC8qIERyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNURBNkVEMEIxNDkwNjA2OTAwQjQxRDEyIC8qIER5
bmFtaWNMaW5rZXJFbnZpcm9ubWVudEV4dHJhY3Rvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCThD
RkVDRTk0MTQ5MEYxNDAwMDJBQUEzMiAvKiBFZGl0b3JTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkyREFGNEZGQjFCNjM2MTgxMDA2MDEzRDYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxQjE1QTg0MTM4NDNBMzkwMDMyMUFEOCAvKiBFbnZpcm9u
bWVudFV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTdDNkNEQTEzNzg5NTA4MDBC
OUMwNEQgLyogRW52aXJvbm1lbnRWYXJpYWJsZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFB
NTc1RkExNDk2QjUyNjAwQTRFRTA2IC8qIEV2ZW50RGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAq
LywK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259109</attachid>
            <date>2015-08-15 16:47:24 -0700</date>
            <delta_ts>2015-08-16 16:45:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148062-20150815164704.patch</filename>
            <type>text/plain</type>
            <size>46070</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4NTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjEzZjkyNWI4ODAyNTEy
NDAxNzQ5N2ZhNjQxMjExYWYzMGJkMTUwYi4uZDcwYTMzZWZmNWUwMWY0Y2FhZDY1NTc5MDcyMThh
YmU1MmUxYWVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDE1LTA4LTE1ICBUaW1v
dGh5IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZhY3Rv
ciBWaWV3R2VzdHVyZUNvbnRyb2xsZXIgc3dpcGUgc25hcHNob3QgcmVtb3ZhbCB0byBiZSBtb3Jl
IHBsYXRmb3JtLWluZGVwZW5kZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDgwNjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgQWRkIGEgVmlld0dl
c3R1cmVzIGxvZ2dpbmcgY2hhbm5lbC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9WaWV3R2VzdHVy
ZUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHZpZXdHZXN0dXJlQ29udHJvbGxlcnNG
b3JBbGxQYWdlcyk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Vmll
d0dlc3R1cmVDb250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9s
bGVyOjp+Vmlld0dlc3R1cmVDb250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1
cmVDb250cm9sbGVyOjpnZXN0dXJlQ29udHJvbGxlckZvclBhZ2UpOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZv
ck1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlk
UmVwYWludEFmdGVyTmF2aWdhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6ZGlkSGl0UmVuZGVyVHJlZVNpemVUaHJlc2hvbGQpOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlkUmVhY2hNYWluRnJhbWVMb2Fk
VGVybWluYWxTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvck1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6
OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Y2hlY2tGb3JBY3RpdmVMb2Fkcyk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U25hcHNob3RSZW1vdmFsVHJhY2tlcjo6ZXZl
bnRzRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXIpOgorICAgICAg
ICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6
OmxvZyk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U25hcHNob3RS
ZW1vdmFsVHJhY2tlcjo6c3RhcnQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRy
b2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6
Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpldmVudE9jY3Vy
cmVkKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJl
bW92YWxUcmFja2VyOjpjYW5jZWxPdXRzdGFuZGluZ0V2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpmaXJlUmVtb3Zh
bENhbGxiYWNrSWZQb3NzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJv
bGxlcjo6U25hcHNob3RSZW1vdmFsVHJhY2tlcjo6ZmlyZVJlbW92YWxDYWxsYmFja0ltbWVkaWF0
ZWx5KToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJl
bW92YWxUcmFja2VyOjp3YXRjaGRvZ1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3
R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OnN0YXJ0V2F0Y2hkb2cp
OgorICAgICAgICBCdWlsZCBhIHBsYXRmb3JtLWluZGVwZW5kZW50IFNuYXBzaG90UmVtb3ZhbFRy
YWNrZXIsIHdoaWNoIGtlZXBzIHRyYWNrIG9mCisgICAgICAgIHZhcmlvdXMgZXZlbnRzIHRoYXQg
d2Ugd2FpdCBmb3IgYmVmb3JlIHJlbW92aW5nIHRoZSBzbmFwc2hvdC4gVGhpcworICAgICAgICBp
cyBjb25zdHJ1Y3RlZCBmcm9tIHRoZSB1bmlvbiBvZiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJ7SU9T
LCBNYWN9J3Mgc25hcHNob3QKKyAgICAgICAgcmVtb3ZhbCBjb2RlLCBhbmQgZWFjaCBwbGF0Zm9y
bSBWaWV3R2VzdHVyZUNvbnRyb2xsZXIgY2FuIHNwZWNpZnkgd2hpY2gKKyAgICAgICAgZXZlbnRz
IHRvIHdhaXQgZm9yIChiZWNhdXNlIHRoaXMgY3VycmVudGx5IGRpZmZlcnMgc2xpZ2h0bHkpLgor
CisgICAgICAgIEFkZCBsb2dnaW5nIHRvIFNuYXBzaG90UmVtb3ZhbFRyYWNrZXIgdG8gbWFrZSBk
ZWJ1Z2dpbmcgc25hcHNob3QgcmVtb3ZhbAorICAgICAgICBpc3N1ZXMgbXVjaCBlYXNpZXIuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5oOgorICAgICAg
ICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJhY2tncm91bmRDb2xvckZvckN1cnJl
bnRTbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlk
RmluaXNoTG9hZEZvck1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6ZGlkRmFpbExvYWRGb3JNYWluRnJhbWUpOgorCisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXZWJLaXQ6OlZpZXdH
ZXN0dXJlQ29udHJvbGxlcjo6cGxhdGZvcm1UZWFyZG93bik6CisgICAgICAgIChXZWJLaXQ6OlZp
ZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUpOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVuZFN3aXBlR2VzdHVyZSk6CisgICAgICAgIChXZWJL
aXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c2V0UmVuZGVyVHJlZVNpemUpOgorICAgICAgICAo
V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OndpbGxDb21taXRQb3N0U3dpcGVUcmFuc2l0
aW9uTGF5ZXJUcmVlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpy
ZW1vdmVTd2lwZVNuYXBzaG90KToKKyAgICAgICAgKHZpZXdHZXN0dXJlQ29udHJvbGxlcnNGb3JB
bGxQYWdlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6Vmlld0dlc3R1cmVDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Vmll
d0dlc3R1cmVDb250cm9sbGVyOjp+Vmlld0dlc3R1cmVDb250cm9sbGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpkaWRSZXN0b3JlU2Nyb2xsUG9z
aXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
Om1haW5GcmFtZUxvYWREaWRSZWFjaFRlcm1pbmFsU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25G
b3JNYWluRnJhbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRy
b2xsZXI6OmFjdGl2ZUxvYWRNb25pdG9yaW5nVGltZXJGaXJlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c3dpcGVTbmFwc2hvdFdhdGNoZG9nVGlt
ZXJGaXJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6cmVtb3ZlU3dpcGVTbmFwc2hvdElmUmVhZHkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpW
aWV3R2VzdHVyZUNvbnRyb2xsZXI6OnBsYXRmb3JtVGVhcmRvd24pOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVuZFN3aXBlR2VzdHVyZSk6CisgICAgICAgIChXZWJL
aXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Zm9yY2VSZXBhaW50SWZOZWVkZWQpOgorICAgICAg
ICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJlbW92ZVN3aXBlU25hcHNob3QpOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlZpZXdHZXN0dXJlQ29udHJv
bGxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
flZpZXdHZXN0dXJlQ29udHJvbGxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdH
ZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZEhpdFJlbmRlclRyZWVTaXplVGhyZXNo
b2xkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpk
aWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JNYWluRnJhbWUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6Om1haW5GcmFtZUxvYWREaWRSZWFj
aFRlcm1pbmFsU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JNYWluRnJhbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmFjdGl2ZUxvYWRNb25p
dG9yaW5nVGltZXJGaXJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJl
Q29udHJvbGxlcjo6c3dpcGVTbmFwc2hvdFdhdGNoZG9nVGltZXJGaXJlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6cmVtb3ZlU3dpcGVTbmFwc2hv
dEFmdGVyUmVwYWludCk6IERlbGV0ZWQuCisgICAgICAgIE1vdmUgc2hhcmVhYmxlIHNuYXBzaG90
IHJlbW92YWwgY29kZSB0byBhIG5ldyBwbGF0Zm9ybS1pbmRlcGVuZGVudCBWaWV3R2VzdHVyZUNv
bnRyb2xsZXIgZmlsZS4KKyAgICAgICAgTW92ZSB0aGUgVmlld0dlc3R1cmVDb250cm9sbGVyIGNv
bnN0cnVjdG9yL2Rlc3RydWN0b3IgdG8gdGhlIHBsYXRmb3JtLWluZGVwZW5kZW50IGZpbGUuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTUt
MDgtMTMgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0g
RG93bmxvYWRzIGRvIG5vdCBzdGFydCBpZiBwb2xpY3kgZGVjaXNpb24gaXMgbWFkZSBhc3luY2hy
b25vdXNseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5oIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5oCmluZGV4IGNlMTMxOTBlZDViNTEzYzMx
N2FiMTAwMjY2ZDNjN2I1YjBjNGViZmUuLjE5OTU5N2VmY2FkZmYyOWFjNTNkNDhlNDc3YzJlMGNj
NDRmNTk5OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmgKQEAgLTU0LDYgKzU0LDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAgICAgTShTZXNzaW9uU3RhdGUpIFwKICAgICBNKFN0b3JhZ2VB
UEkpIFwKICAgICBNKFRleHRJbnB1dCkgXAorICAgIE0oVmlld0dlc3R1cmVzKSBcCiAKICNkZWZp
bmUgREVDTEFSRV9MT0dfQ0hBTk5FTChuYW1lKSBcCiAgICAgZXh0ZXJuIFdURkxvZ0NoYW5uZWwg
Sk9JTl9MT0dfQ0hBTk5FTF9XSVRIX1BSRUZJWChMT0dfQ0hBTk5FTF9QUkVGSVgsIG5hbWUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1ZpZXdHZXN0dXJlQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlld0dlc3R1cmVDb250cm9sbGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zMWE1Y2MwMWZjNTA4ZjllYWM4ZDg4ODgyOWY4OThmZTRhNmFmNGRmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1ZpZXdHZXN0dXJlQ29u
dHJvbGxlci5jcHAKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiVmlld0dlc3R1cmVDb250cm9sbGVyLmgiCisKKyNpbXBvcnQg
IkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VzLmgiCisj
aW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgorI2lt
cG9ydCA8d3RmL01hdGhFeHRyYXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0
YXRpYyBjb25zdCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBzd2lwZVNuYXBzaG90UmVtb3ZhbFdhdGNo
ZG9nQWZ0ZXJGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXREdXJhdGlvbiA9IDNfczsKK3N0YXRp
YyBjb25zdCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHN3aXBlU25hcHNob3RSZW1vdmFsQWN0
aXZlTG9hZE1vbml0b3JpbmdJbnRlcnZhbCA9IDI1MF9tczsKKworI2lmIFBMQVRGT1JNKE1BQykK
K3N0YXRpYyBjb25zdCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBzd2lwZVNuYXBzaG90UmVtb3ZhbFdh
dGNoZG9nRHVyYXRpb24gPSA1X3M7CisjZWxzZQorc3RhdGljIGNvbnN0IHN0ZDo6Y2hyb25vOjpz
ZWNvbmRzIHN3aXBlU25hcHNob3RSZW1vdmFsV2F0Y2hkb2dEdXJhdGlvbiA9IDNfczsKKyNlbmRp
ZgorCitzdGF0aWMgSGFzaE1hcDx1aW50NjRfdCwgV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xs
ZXIqPiYgdmlld0dlc3R1cmVDb250cm9sbGVyc0ZvckFsbFBhZ2VzKCkKK3sKKyAgICAvLyBUaGUg
a2V5IGluIHRoaXMgbWFwIGlzIHRoZSBhc3NvY2lhdGVkIHBhZ2UgSUQuCisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEhhc2hNYXA8dWludDY0X3QsIFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9s
bGVyKj4+IHZpZXdHZXN0dXJlQ29udHJvbGxlcnM7CisgICAgcmV0dXJuIHZpZXdHZXN0dXJlQ29u
dHJvbGxlcnMuZ2V0KCk7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OlZpZXdHZXN0dXJlQ29udHJvbGxlcihXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94
eSkKKyAgICA6IG1fd2ViUGFnZVByb3h5KHdlYlBhZ2VQcm94eSkKKyAgICAsIG1fc3dpcGVBY3Rp
dmVMb2FkTW9uaXRvcmluZ1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlZpZXdHZXN0dXJl
Q29udHJvbGxlcjo6Y2hlY2tGb3JBY3RpdmVMb2FkcykKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS5w
cm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCksICp0aGlz
KTsKKworICAgIHZpZXdHZXN0dXJlQ29udHJvbGxlcnNGb3JBbGxQYWdlcygpLmFkZCh3ZWJQYWdl
UHJveHkucGFnZUlEKCksIHRoaXMpOworfQorCitWaWV3R2VzdHVyZUNvbnRyb2xsZXI6On5WaWV3
R2VzdHVyZUNvbnRyb2xsZXIoKQoreworICAgIHBsYXRmb3JtVGVhcmRvd24oKTsKKworICAgIHZp
ZXdHZXN0dXJlQ29udHJvbGxlcnNGb3JBbGxQYWdlcygpLnJlbW92ZShtX3dlYlBhZ2VQcm94eS5w
YWdlSUQoKSk7CisKKyAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOworfQorCitWaWV3R2VzdHVyZUNvbnRyb2xs
ZXIqIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Z2VzdHVyZUNvbnRyb2xsZXJGb3JQYWdlKHVpbnQ2
NF90IHBhZ2VJRCkKK3sKKyAgICBhdXRvIGdlc3R1cmVDb250cm9sbGVySXRlciA9IHZpZXdHZXN0
dXJlQ29udHJvbGxlcnNGb3JBbGxQYWdlcygpLmZpbmQocGFnZUlEKTsKKyAgICBpZiAoZ2VzdHVy
ZUNvbnRyb2xsZXJJdGVyID09IHZpZXdHZXN0dXJlQ29udHJvbGxlcnNGb3JBbGxQYWdlcygpLmVu
ZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZ2VzdHVyZUNvbnRyb2xs
ZXJJdGVyLT52YWx1ZTsKK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZEZpcnN0
VmlzdWFsbHlOb25FbXB0eUxheW91dEZvck1haW5GcmFtZSgpCit7CisgICAgaWYgKCFtX3NuYXBz
aG90UmVtb3ZhbFRyYWNrZXIuZXZlbnRPY2N1cnJlZChTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpW
aXN1YWxseU5vbkVtcHR5TGF5b3V0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zbmFwc2hv
dFJlbW92YWxUcmFja2VyLnN0YXJ0V2F0Y2hkb2coc3dpcGVTbmFwc2hvdFJlbW92YWxXYXRjaGRv
Z0FmdGVyRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0RHVyYXRpb24pOworCisgICAgLy8gRklY
TUU6IElkZWFsbHksIHRoaXMgd291bGQgYmUgc3VmZmljaWVudCB0byBjYW5jZWwgd2FpdGluZyBm
b3IgdGhlIG1haW4gZnJhbWUgbG9hZCwKKyAgICAvLyBhbmQgd291bGQgbWFrZSBzbmFwc2hvdCBy
ZW1vdmFsIGZhc3RlciwgYnV0IHdlIG5lZWQgZGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uCisgICAg
Ly8gdG8gYmUgdXNhYmxlL2FjY3VyYXRlIG9uIGFsbCBwbGF0Zm9ybXMgYmVmb3JlIGRvaW5nIHRo
YXQsIG9yIHdlIGdldCBhIGZsYXNoCisgICAgLy8gb2YgdGhlIG5ldyBwYWdlIGluIHRoZSB3cm9u
ZyBwb3NpdGlvbi4KK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZFJlcGFpbnRB
ZnRlck5hdmlnYXRpb24oKQoreworICAgIG1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5ldmVudE9j
Y3VycmVkKFNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OlJlcGFpbnRBZnRlck5hdmlnYXRpb24pOwor
fQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlkSGl0UmVuZGVyVHJlZVNpemVUaHJl
c2hvbGQoKQoreworICAgIG1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5ldmVudE9jY3VycmVkKFNu
YXBzaG90UmVtb3ZhbFRyYWNrZXI6OlJlbmRlclRyZWVTaXplVGhyZXNob2xkKTsKK30KKwordm9p
ZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbigpCit7Cisg
ICAgbV9zbmFwc2hvdFJlbW92YWxUcmFja2VyLmV2ZW50T2NjdXJyZWQoU25hcHNob3RSZW1vdmFs
VHJhY2tlcjo6U2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbik7Cit9CisKK3ZvaWQgVmlld0dlc3R1
cmVDb250cm9sbGVyOjpkaWRSZWFjaE1haW5GcmFtZUxvYWRUZXJtaW5hbFN0YXRlKCkKK3sKKyAg
ICBpZiAoIW1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5ldmVudE9jY3VycmVkKFNuYXBzaG90UmVt
b3ZhbFRyYWNrZXI6Ok1haW5GcmFtZUxvYWQpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBD
b21pbmcgYmFjayBmcm9tIHRoZSBwYWdlIGNhY2hlIHdpbGwgcmVzdWx0IGluIGdldHRpbmcgYSBs
b2FkIGV2ZW50LCBidXQgbm8gZmlyc3QgdmlzdWFsbHkgbm9uLWVtcHR5IGxheW91dC4KKyAgICAv
LyBXZWJDb3JlIGNvbnNpZGVycyBhIGxvYWRlZCBkb2N1bWVudCBlbm91Z2ggdG8gYmUgY29uc2lk
ZXJlZCB2aXN1YWxseSBub24tZW1wdHksIHNvIHRoYXQncyBnb29kCisgICAgLy8gZW5vdWdoIGZv
ciB1cyB0b28uCisgICAgbV9zbmFwc2hvdFJlbW92YWxUcmFja2VyLmNhbmNlbE91dHN0YW5kaW5n
RXZlbnQoU25hcHNob3RSZW1vdmFsVHJhY2tlcjo6VmlzdWFsbHlOb25FbXB0eUxheW91dCk7CisK
KyAgICBjaGVja0ZvckFjdGl2ZUxvYWRzKCk7Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9s
bGVyOjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yTWFpbkZyYW1lKFNhbWVEb2N1bWVudE5h
dmlnYXRpb25UeXBlIHR5cGUpCit7CisgICAgYm9vbCBjYW5jZWxsZWRPdXRzdGFuZGluZ0V2ZW50
ID0gZmFsc2U7CisKKyAgICAvLyBTYW1lLWRvY3VtZW50IG5hdmlnYXRpb25zIGRvbid0IGhhdmUg
YSBtYWluIGZyYW1lIGxvYWQgb3IgZmlyc3QgdmlzdWFsbHkgbm9uLWVtcHR5IGxheW91dC4KKyAg
ICBjYW5jZWxsZWRPdXRzdGFuZGluZ0V2ZW50IHw9IG1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5j
YW5jZWxPdXRzdGFuZGluZ0V2ZW50KFNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6Ok1haW5GcmFtZUxv
YWQpOworICAgIGNhbmNlbGxlZE91dHN0YW5kaW5nRXZlbnQgfD0gbV9zbmFwc2hvdFJlbW92YWxU
cmFja2VyLmNhbmNlbE91dHN0YW5kaW5nRXZlbnQoU25hcHNob3RSZW1vdmFsVHJhY2tlcjo6Vmlz
dWFsbHlOb25FbXB0eUxheW91dCk7CisKKyAgICBpZiAoIWNhbmNlbGxlZE91dHN0YW5kaW5nRXZl
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0eXBlICE9IFNhbWVEb2N1bWVudE5hdmln
YXRpb25TZXNzaW9uU3RhdGVSZXBsYWNlICYmIHR5cGUgIT0gU2FtZURvY3VtZW50TmF2aWdhdGlv
blNlc3Npb25TdGF0ZVBvcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2hlY2tGb3JBY3RpdmVM
b2FkcygpOworfQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Y2hlY2tGb3JBY3RpdmVM
b2FkcygpCit7CisgICAgaWYgKG1fd2ViUGFnZVByb3h5LnBhZ2VMb2FkU3RhdGUoKS5pc0xvYWRp
bmcoKSkgeworICAgICAgICBpZiAoIW1fc3dpcGVBY3RpdmVMb2FkTW9uaXRvcmluZ1RpbWVyLmlz
QWN0aXZlKCkpCisgICAgICAgICAgICBtX3N3aXBlQWN0aXZlTG9hZE1vbml0b3JpbmdUaW1lci5z
dGFydFJlcGVhdGluZyhzd2lwZVNuYXBzaG90UmVtb3ZhbEFjdGl2ZUxvYWRNb25pdG9yaW5nSW50
ZXJ2YWwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zd2lwZUFjdGl2ZUxvYWRN
b25pdG9yaW5nVGltZXIuc3RvcCgpOworICAgIG1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5ldmVu
dE9jY3VycmVkKFNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OlN1YnJlc291cmNlTG9hZHMpOworfQor
CitTdHJpbmcgVmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpl
dmVudHNEZXNjcmlwdGlvbihWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRy
YWNrZXI6OkV2ZW50cyBldmVudCkKK3sKKyAgICBTdHJpbmcgZGVzY3JpcHRpb247CisKKyAgICBp
ZiAoZXZlbnQgJiBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6
OlZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpCisgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZCgiVmlz
dWFsbHlOb25FbXB0eUxheW91dCAiKTsKKworICAgIGlmIChldmVudCAmIFZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6U25hcHNob3RSZW1vdmFsVHJhY2tlcjo6UmVuZGVyVHJlZVNpemVUaHJlc2hvbGQp
CisgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZCgiUmVuZGVyVHJlZVNpemVUaHJlc2hvbGQgIik7
CisKKyAgICBpZiAoZXZlbnQgJiBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3Zh
bFRyYWNrZXI6OlJlcGFpbnRBZnRlck5hdmlnYXRpb24pCisgICAgICAgIGRlc2NyaXB0aW9uLmFw
cGVuZCgiUmVwYWludEFmdGVyTmF2aWdhdGlvbiAiKTsKKworICAgIGlmIChldmVudCAmIFZpZXdH
ZXN0dXJlQ29udHJvbGxlcjo6U25hcHNob3RSZW1vdmFsVHJhY2tlcjo6TWFpbkZyYW1lTG9hZCkK
KyAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kKCJNYWluRnJhbWVMb2FkICIpOworCisgICAgaWYg
KGV2ZW50ICYgVmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpT
dWJyZXNvdXJjZUxvYWRzKQorICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmQoIlN1YnJlc291cmNl
TG9hZHMgIik7CisKKyAgICBpZiAoZXZlbnQgJiBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBz
aG90UmVtb3ZhbFRyYWNrZXI6OlNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24pCisgICAgICAgIGRl
c2NyaXB0aW9uLmFwcGVuZCgiU2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiAiKTsKKyAgICAKKyAg
ICByZXR1cm4gZGVzY3JpcHRpb247Cit9CisKK1ZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U25hcHNo
b3RSZW1vdmFsVHJhY2tlcjo6U25hcHNob3RSZW1vdmFsVHJhY2tlcigpCisgICAgOiBtX3dhdGNo
ZG9nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmU25hcHNob3RSZW1vdmFsVHJhY2tlcjo6
d2F0Y2hkb2dUaW1lckZpcmVkKQoreworfQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
U25hcHNob3RSZW1vdmFsVHJhY2tlcjo6bG9nKFN0cmluZyBsb2cpCit7CisjaWYgIUxPR19ESVNB
QkxFRAorICAgIGF1dG8gbm93ID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7Cisg
ICAgZG91YmxlIG1pbGxpc2Vjb25kc1NpbmNlU3RhcnQgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25f
Y2FzdDxzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlLCBzdGQ6Om1pbGxpPj4obm93IC0gbV9z
dGFydFRpbWUpLmNvdW50KCk7CisjZW5kaWYKKyAgICBMT0coVmlld0dlc3R1cmVzLCAiU3dpcGUg
U25hcHNob3QgUmVtb3ZhbCAoJTAuMmYgbXMpIC0gJXMiLCBtaWxsaXNlY29uZHNTaW5jZVN0YXJ0
LCBsb2cudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpT
bmFwc2hvdFJlbW92YWxUcmFja2VyOjpzdGFydChFdmVudHMgZGVzaXJlZEV2ZW50cywgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+IHJlbW92YWxDYWxsYmFjaykKK3sKKyAgICBtX291dHN0YW5kaW5nRXZl
bnRzID0gZGVzaXJlZEV2ZW50czsKKyAgICBtX3JlbW92YWxDYWxsYmFjayA9IFdURjo6bW92ZShy
ZW1vdmFsQ2FsbGJhY2spOworICAgIG1fc3RhcnRUaW1lID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9j
bG9jazo6bm93KCk7CisKKyAgICBsb2coInN0YXJ0Iik7CisKKyAgICBzdGFydFdhdGNoZG9nKHN3
aXBlU25hcHNob3RSZW1vdmFsV2F0Y2hkb2dEdXJhdGlvbik7Cit9CisKK3ZvaWQgVmlld0dlc3R1
cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpyZXNldCgpCit7CisgICAgaWYg
KG1fb3V0c3RhbmRpbmdFdmVudHMpCisgICAgICAgIGxvZygicmVzZXQ7IGhhZCBvdXRzdGFuZGlu
ZyBldmVudHM6ICIgKyBldmVudHNEZXNjcmlwdGlvbihtX291dHN0YW5kaW5nRXZlbnRzKSk7Cisg
ICAgbV9vdXRzdGFuZGluZ0V2ZW50cyA9IDA7CisgICAgbV93YXRjaGRvZ1RpbWVyLnN0b3AoKTsK
KyAgICBtX3JlbW92YWxDYWxsYmFjayA9IG51bGxwdHI7Cit9CisKK2Jvb2wgVmlld0dlc3R1cmVD
b250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpldmVudE9jY3VycmVkKEV2ZW50cyBl
dmVudCkKK3sKKyAgICBBU1NFUlQoaGFzT25lQml0U2V0KGV2ZW50KSk7CisKKyAgICBpZiAoISht
X291dHN0YW5kaW5nRXZlbnRzICYgZXZlbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBsb2coIm91dHN0YW5kaW5nIGV2ZW50IG9jY3VycmVkOiAiICsgIGV2ZW50c0Rlc2NyaXB0aW9u
KGV2ZW50KSk7CisKKyAgICBtX291dHN0YW5kaW5nRXZlbnRzICY9IH5ldmVudDsKKworICAgIGZp
cmVSZW1vdmFsQ2FsbGJhY2tJZlBvc3NpYmxlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgVmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpjYW5jZWxP
dXRzdGFuZGluZ0V2ZW50KEV2ZW50cyBldmVudCkKK3sKKyAgICBBU1NFUlQoaGFzT25lQml0U2V0
KGV2ZW50KSk7CisKKyAgICBpZiAoIShtX291dHN0YW5kaW5nRXZlbnRzICYgZXZlbnQpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBsb2coIndhaXQgZm9yIGV2ZW50IGNhbmNlbGxlZDog
IiArIGV2ZW50c0Rlc2NyaXB0aW9uKGV2ZW50KSk7CisKKyAgICBtX291dHN0YW5kaW5nRXZlbnRz
ICY9IH5ldmVudDsKKworICAgIGZpcmVSZW1vdmFsQ2FsbGJhY2tJZlBvc3NpYmxlKCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJl
bW92YWxUcmFja2VyOjpmaXJlUmVtb3ZhbENhbGxiYWNrSWZQb3NzaWJsZSgpCit7CisgICAgaWYg
KG1fb3V0c3RhbmRpbmdFdmVudHMpIHsKKyAgICAgICAgbG9nKCJkZWZlcnJpbmcgcmVtb3ZhbDsg
aGFkIG91dHN0YW5kaW5nIGV2ZW50czogIiArIGV2ZW50c0Rlc2NyaXB0aW9uKG1fb3V0c3RhbmRp
bmdFdmVudHMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZpcmVSZW1vdmFsQ2Fs
bGJhY2tJbW1lZGlhdGVseSgpOworfQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U25h
cHNob3RSZW1vdmFsVHJhY2tlcjo6ZmlyZVJlbW92YWxDYWxsYmFja0ltbWVkaWF0ZWx5KCkKK3sK
KyAgICBtX3dhdGNoZG9nVGltZXIuc3RvcCgpOworCisgICAgYXV0byByZW1vdmFsQ2FsbGJhY2sg
PSBXVEY6Om1vdmUobV9yZW1vdmFsQ2FsbGJhY2spOworICAgIGlmIChyZW1vdmFsQ2FsbGJhY2sp
IHsKKyAgICAgICAgbG9nKCJyZW1vdmVkIHNuYXBzaG90Iik7CisgICAgICAgIHJlc2V0KCk7Cisg
ICAgICAgIHJlbW92YWxDYWxsYmFjaygpOworICAgIH0KK30KKwordm9pZCBWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OndhdGNoZG9nVGltZXJGaXJlZCgpCit7
CisgICAgbG9nKCJ3YXRjaGRvZyB0aW1lciBmaXJlZCIpOworICAgIGZpcmVSZW1vdmFsQ2FsbGJh
Y2tJbW1lZGlhdGVseSgpOworfQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U25hcHNo
b3RSZW1vdmFsVHJhY2tlcjo6c3RhcnRXYXRjaGRvZyhzdGQ6OmNocm9ubzo6c2Vjb25kcyBkdXJh
dGlvbikKK3sKKyAgICBsb2coU3RyaW5nOjpmb3JtYXQoIihyZSlzdGFydGVkIHdhdGNoZG9nIHRp
bWVyIGZvciAlbGxkIHNlY29uZHMiLCBkdXJhdGlvbi5jb3VudCgpKSk7CisgICAgbV93YXRjaGRv
Z1RpbWVyLnN0YXJ0T25lU2hvdChkdXJhdGlvbi5jb3VudCgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1ZpZXdH
ZXN0dXJlQ29udHJvbGxlcklPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvVmll
d0dlc3R1cmVDb250cm9sbGVySU9TLm1tCmluZGV4IDYxNzI2YzhjNzNhNjBkNTYwODYzYzU0NTFk
NDE0MjY2YzUyZDU1MTguLjFmZGEwYjE5ZjM2YWI2MDRjMTFlODIyNTg2ZDY3NTJiYWZiOThjNGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvVmlld0dlc3R1cmVDb250
cm9sbGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvVmlld0dlc3R1
cmVDb250cm9sbGVySU9TLm1tCkBAIC02NCwxNSArNjQsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIH0KIAogc3RhdGljIGNvbnN0IGZsb2F0IHN3aXBlU25hcHNob3RSZW1vdmFsUmVuZGVy
VHJlZVNpemVUYXJnZXRGcmFjdGlvbiA9IDAuNTsKLXN0YXRpYyBjb25zdCBzdGQ6OmNocm9ubzo6
c2Vjb25kcyBzd2lwZVNuYXBzaG90UmVtb3ZhbFdhdGNoZG9nRHVyYXRpb24gPSAzX3M7Ci1zdGF0
aWMgY29uc3Qgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBzd2lwZVNuYXBzaG90UmVtb3ZhbEFj
dGl2ZUxvYWRNb25pdG9yaW5nSW50ZXJ2YWwgPSAyNTBfbXM7Ci0KLS8vIFRoZSBrZXkgaW4gdGhp
cyBtYXAgaXMgdGhlIGFzc29jaWF0ZWQgcGFnZSBJRC4KLXN0YXRpYyBIYXNoTWFwPHVpbnQ2NF90
LCBXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcio+JiB2aWV3R2VzdHVyZUNvbnRyb2xsZXJz
Rm9yQWxsUGFnZXMoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPHVpbnQ2
NF90LCBXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcio+PiB2aWV3R2VzdHVyZUNvbnRyb2xs
ZXJzOwotICAgIHJldHVybiB2aWV3R2VzdHVyZUNvbnRyb2xsZXJzLmdldCgpOwotfQogCiAtIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhWaWV3R2VzdHVyZUNvbnRyb2xsZXI6KFdlYktpdDo6Vmlld0dl
c3R1cmVDb250cm9sbGVyKilnZXN0dXJlQ29udHJvbGxlciBnZXN0dXJlUmVjb2duaXplclZpZXc6
KFVJVmlldyAqKWdlc3R1cmVSZWNvZ25pemVyVmlldwogewpAQCAtMTQ2LDIxICsxMzcsMTIgQEAg
c3RhdGljIEhhc2hNYXA8dWludDY0X3QsIFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyKj4m
IHZpZXdHZXN0dXJlQ29udHJvbGxlcnMKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVZpZXdHZXN0
dXJlQ29udHJvbGxlcjo6Vmlld0dlc3R1cmVDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYgd2ViUGFn
ZVByb3h5KQotICAgIDogbV93ZWJQYWdlUHJveHkod2ViUGFnZVByb3h5KQotICAgICwgbV9zd2lw
ZVdhdGNoZG9nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVmlld0dlc3R1cmVDb250cm9s
bGVyOjpzd2lwZVNuYXBzaG90V2F0Y2hkb2dUaW1lckZpcmVkKQotICAgICwgbV9zd2lwZUFjdGl2
ZUxvYWRNb25pdG9yaW5nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVmlld0dlc3R1cmVD
b250cm9sbGVyOjphY3RpdmVMb2FkTW9uaXRvcmluZ1RpbWVyRmlyZWQpCi17Ci0gICAgdmlld0dl
c3R1cmVDb250cm9sbGVyc0ZvckFsbFBhZ2VzKCkuYWRkKHdlYlBhZ2VQcm94eS5wYWdlSUQoKSwg
dGhpcyk7Ci19Ci0KLVZpZXdHZXN0dXJlQ29udHJvbGxlcjo6flZpZXdHZXN0dXJlQ29udHJvbGxl
cigpCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6cGxhdGZvcm1UZWFyZG93bigpCiB7CiAg
ICAgW21fc3dpcGVUcmFuc2l0aW9uQ29udGV4dCBfc2V0VHJhbnNpdGlvbklzSW5GbGlnaHQ6Tk9d
OwogICAgIFttX3N3aXBlVHJhbnNpdGlvbkNvbnRleHQgX3NldEludGVyYWN0b3I6bmlsXTsKICAg
ICBbbV9zd2lwZVRyYW5zaXRpb25Db250ZXh0IF9zZXRBbmltYXRvcjpuaWxdOwogICAgIFttX3N3
aXBlSW50ZXJhY3RpdmVUcmFuc2l0aW9uRGVsZWdhdGUgaW52YWxpZGF0ZV07Ci0gICAgdmlld0dl
c3R1cmVDb250cm9sbGVyc0ZvckFsbFBhZ2VzKCkucmVtb3ZlKG1fd2ViUGFnZVByb3h5LnBhZ2VJ
RCgpKTsKIH0KIAogdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnNldEFsdGVybmF0ZUJhY2tG
b3J3YXJkTGlzdFNvdXJjZVZpZXcoV0tXZWJWaWV3ICp2aWV3KQpAQCAtMjQ5LDkgKzIzMSw4IEBA
IHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBlR2VzdHVyZShfVUlOYXZpZ2F0
aW9uSW50ZXJhY3RpdmVUcmFuc2l0aW9uCiAgICAgfV07CiAgICAgdWludDY0X3QgcGFnZUlEID0g
bV93ZWJQYWdlUHJveHkucGFnZUlEKCk7CiAgICAgW21fc3dpcGVUcmFuc2l0aW9uQ29udGV4dCBf
c2V0Q29tcGxldGlvbkhhbmRsZXI6XihfVUlWaWV3Q29udHJvbGxlclRyYW5zaXRpb25Db250ZXh0
ICpjb250ZXh0LCBCT09MIGRpZENvbXBsZXRlKSB7Ci0gICAgICAgIGF1dG8gZ2VzdHVyZUNvbnRy
b2xsZXJJdGVyID0gdmlld0dlc3R1cmVDb250cm9sbGVyc0ZvckFsbFBhZ2VzKCkuZmluZChwYWdl
SUQpOwotICAgICAgICBpZiAoZ2VzdHVyZUNvbnRyb2xsZXJJdGVyICE9IHZpZXdHZXN0dXJlQ29u
dHJvbGxlcnNGb3JBbGxQYWdlcygpLmVuZCgpKQotICAgICAgICAgICAgZ2VzdHVyZUNvbnRyb2xs
ZXJJdGVyLT52YWx1ZS0+ZW5kU3dpcGVHZXN0dXJlKHRhcmdldEl0ZW0uZ2V0KCksIGNvbnRleHQs
ICFkaWRDb21wbGV0ZSk7CisgICAgICAgIGlmIChhdXRvIGdlc3R1cmVDb250cm9sbGVyID0gZ2Vz
dHVyZUNvbnRyb2xsZXJGb3JQYWdlKHBhZ2VJRCkpCisgICAgICAgICAgICBnZXN0dXJlQ29udHJv
bGxlci0+ZW5kU3dpcGVHZXN0dXJlKHRhcmdldEl0ZW0uZ2V0KCksIGNvbnRleHQsICFkaWRDb21w
bGV0ZSk7CiAgICAgfV07CiAgICAgW21fc3dpcGVUcmFuc2l0aW9uQ29udGV4dCBfc2V0SW50ZXJh
Y3RpdmVVcGRhdGVIYW5kbGVyOl4oQk9PTCwgQ0dGbG9hdCwgQk9PTCwgX1VJVmlld0NvbnRyb2xs
ZXJUcmFuc2l0aW9uQ29udGV4dCAqKSB7IH1dOwogCkBAIC0zMDYsOSArMjg3LDEwIEBAIHZvaWQg
Vmlld0dlc3R1cmVDb250cm9sbGVyOjplbmRTd2lwZUdlc3R1cmUoV2ViQmFja0ZvcndhcmRMaXN0
SXRlbSogdGFyZ2V0SXRlbSwKICAgICAgICAgdWludDY0X3QgcGFnZUlEID0gbV93ZWJQYWdlUHJv
eHkucGFnZUlEKCk7CiAgICAgICAgIHVpbnQ2NF90IGdlc3R1cmVQZW5kaW5nU25hcHNob3RSZW1v
dmFsID0gbV9nZXN0dXJlUGVuZGluZ1NuYXBzaG90UmVtb3ZhbDsKICAgICAgICAgZHJhd2luZ0Fy
ZWEtPmRpc3BhdGNoQWZ0ZXJFbnN1cmluZ0RyYXdpbmcoW3BhZ2VJRCwgZ2VzdHVyZVBlbmRpbmdT
bmFwc2hvdFJlbW92YWxdIChDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7Ci0gICAgICAgICAg
ICBhdXRvIGdlc3R1cmVDb250cm9sbGVySXRlciA9IHZpZXdHZXN0dXJlQ29udHJvbGxlcnNGb3JB
bGxQYWdlcygpLmZpbmQocGFnZUlEKTsKLSAgICAgICAgICAgIGlmIChnZXN0dXJlQ29udHJvbGxl
ckl0ZXIgIT0gdmlld0dlc3R1cmVDb250cm9sbGVyc0ZvckFsbFBhZ2VzKCkuZW5kKCkgJiYgZ2Vz
dHVyZUNvbnRyb2xsZXJJdGVyLT52YWx1ZS0+bV9nZXN0dXJlUGVuZGluZ1NuYXBzaG90UmVtb3Zh
bCA9PSBnZXN0dXJlUGVuZGluZ1NuYXBzaG90UmVtb3ZhbCkKLSAgICAgICAgICAgICAgICBnZXN0
dXJlQ29udHJvbGxlckl0ZXItPnZhbHVlLT53aWxsQ29tbWl0UG9zdFN3aXBlVHJhbnNpdGlvbkxh
eWVyVHJlZShlcnJvciA9PSBDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKTsKKyAgICAgICAgICAg
IGlmIChhdXRvIGdlc3R1cmVDb250cm9sbGVyID0gZ2VzdHVyZUNvbnRyb2xsZXJGb3JQYWdlKHBh
Z2VJRCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ2VzdHVyZUNvbnRyb2xsZXItPm1fZ2VzdHVy
ZVBlbmRpbmdTbmFwc2hvdFJlbW92YWwgPT0gZ2VzdHVyZVBlbmRpbmdTbmFwc2hvdFJlbW92YWwp
CisgICAgICAgICAgICAgICAgICAgIGdlc3R1cmVDb250cm9sbGVyLT53aWxsQ29tbWl0UG9zdFN3
aXBlVHJhbnNpdGlvbkxheWVyVHJlZShlcnJvciA9PSBDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25l
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAgICAgICAgIGRyYXdpbmdBcmVhLT5oaWRl
Q29udGVudFVudGlsUGVuZGluZ1VwZGF0ZSgpOwogICAgIH0gZWxzZSB7CkBAIC0zMTYsMTMgKzI5
OCwxNCBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZW5kU3dpcGVHZXN0dXJlKFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0ZW0sCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBtX3N3aXBlV2FpdGluZ0ZvclJlbmRlclRyZWVTaXplVGhyZXNob2xkID0gdHJ1ZTsKLSAg
ICBtX3N3aXBlV2FpdGluZ0ZvclJlcGFpbnQgPSB0cnVlOwotICAgIG1fc3dpcGVXYWl0aW5nRm9y
VGVybWluYWxMb2FkaW5nU3RhdGUgPSB0cnVlOwotICAgIG1fc3dpcGVXYWl0aW5nRm9yU3VicmVz
b3VyY2VMb2FkcyA9IHRydWU7Ci0gICAgbV9zd2lwZVdhaXRpbmdGb3JTY3JvbGxQb3NpdGlvblJl
c3RvcmF0aW9uID0gdHJ1ZTsKLQotICAgIG1fc3dpcGVXYXRjaGRvZ1RpbWVyLnN0YXJ0T25lU2hv
dChzd2lwZVNuYXBzaG90UmVtb3ZhbFdhdGNoZG9nRHVyYXRpb24uY291bnQoKSk7CisgICAgLy8g
RklYTUU6IFNob3VsZCB3ZSB3YWl0IGZvciBWaXN1YWxseU5vbkVtcHR5TGF5b3V0IGxpa2Ugd2Ug
ZG8gb24gTWFjPworICAgIG1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5zdGFydChTbmFwc2hvdFJl
bW92YWxUcmFja2VyOjpSZW5kZXJUcmVlU2l6ZVRocmVzaG9sZAorICAgICAgICB8IFNuYXBzaG90
UmVtb3ZhbFRyYWNrZXI6OlJlcGFpbnRBZnRlck5hdmlnYXRpb24KKyAgICAgICAgfCBTbmFwc2hv
dFJlbW92YWxUcmFja2VyOjpNYWluRnJhbWVMb2FkCisgICAgICAgIHwgU25hcHNob3RSZW1vdmFs
VHJhY2tlcjo6U3VicmVzb3VyY2VMb2FkcworICAgICAgICB8IFNuYXBzaG90UmVtb3ZhbFRyYWNr
ZXI6OlNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24sIFt0aGlzXSB7CisgICAgICAgICAgICB0aGlz
LT5yZW1vdmVTd2lwZVNuYXBzaG90KCk7CisgICAgfSk7CiAKICAgICBpZiAoVmlld1NuYXBzaG90
KiBzbmFwc2hvdCA9IHRhcmdldEl0ZW0tPnNuYXBzaG90KCkpIHsKICAgICAgICAgbV9iYWNrZ3Jv
dW5kQ29sb3JGb3JDdXJyZW50U25hcHNob3QgPSBzbmFwc2hvdC0+YmFja2dyb3VuZENvbG9yKCk7
CkBAIC0zMzAsMTI2ICszMTMsMzcgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVuZFN3
aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJdGVtLAogICAgIH0KIH0K
IAotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OndpbGxDb21taXRQb3N0U3dpcGVUcmFuc2l0
aW9uTGF5ZXJUcmVlKGJvb2wgc3VjY2Vzc2Z1bCkKLXsKLSAgICBpZiAobV9hY3RpdmVHZXN0dXJl
VHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIXN1Y2Nlc3NmdWwpIHsKLSAgICAgICAgcmVtb3ZlU3dpcGVTbmFwc2hvdCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3N3aXBlV2FpdGluZ0ZvclJlcGFpbnQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fc3dpcGVXYWl0aW5nRm9yUmVwYWludCA9IGZhbHNlOwot
ICAgIHJlbW92ZVN3aXBlU25hcHNob3RJZlJlYWR5KCk7Ci19Ci0KIHZvaWQgVmlld0dlc3R1cmVD
b250cm9sbGVyOjpzZXRSZW5kZXJUcmVlU2l6ZSh1aW50NjRfdCByZW5kZXJUcmVlU2l6ZSkKIHsK
ICAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fc3dpcGVXYWl0aW5nRm9yUmVuZGVyVHJlZVNp
emVUaHJlc2hvbGQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9zbmFwc2hvdFJlbW92
YWxUYXJnZXRSZW5kZXJUcmVlU2l6ZSB8fCByZW5kZXJUcmVlU2l6ZSA+IG1fc25hcHNob3RSZW1v
dmFsVGFyZ2V0UmVuZGVyVHJlZVNpemUpIHsKLSAgICAgICAgbV9zd2lwZVdhaXRpbmdGb3JSZW5k
ZXJUcmVlU2l6ZVRocmVzaG9sZCA9IGZhbHNlOwotICAgICAgICByZW1vdmVTd2lwZVNuYXBzaG90
SWZSZWFkeSgpOwotICAgIH0KKyAgICBpZiAoIW1fc25hcHNob3RSZW1vdmFsVGFyZ2V0UmVuZGVy
VHJlZVNpemUgfHwgcmVuZGVyVHJlZVNpemUgPiBtX3NuYXBzaG90UmVtb3ZhbFRhcmdldFJlbmRl
clRyZWVTaXplKQorICAgICAgICBkaWRIaXRSZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCgpOwogfQog
Ci12b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uKCkK
LXsKLSAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fc3dpcGVXYWl0aW5nRm9yU2Nyb2xsUG9z
aXRpb25SZXN0b3JhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zd2lwZVdhaXRpbmdG
b3JTY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uID0gZmFsc2U7Ci0gICAgcmVtb3ZlU3dpcGVTbmFw
c2hvdElmUmVhZHkoKTsKLX0KLQotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6Om1haW5GcmFt
ZUxvYWREaWRSZWFjaFRlcm1pbmFsU3RhdGUoKQordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
OndpbGxDb21taXRQb3N0U3dpcGVUcmFuc2l0aW9uTGF5ZXJUcmVlKGJvb2wgc3VjY2Vzc2Z1bCkK
IHsKICAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fc3dpcGVXYWl0aW5nRm9yVGVybWluYWxM
b2FkaW5nU3RhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3dpcGVXYWl0aW5nRm9yVGVy
bWluYWxMb2FkaW5nU3RhdGUgPSBmYWxzZTsKLQotICAgIGlmIChtX3dlYlBhZ2VQcm94eS5wYWdl
TG9hZFN0YXRlKCkuaXNMb2FkaW5nKCkpIHsKLSAgICAgICAgbV9zd2lwZUFjdGl2ZUxvYWRNb25p
dG9yaW5nVGltZXIuc3RhcnRSZXBlYXRpbmcoc3dpcGVTbmFwc2hvdFJlbW92YWxBY3RpdmVMb2Fk
TW9uaXRvcmluZ0ludGVydmFsKTsKKyAgICBpZiAoIXN1Y2Nlc3NmdWwpIHsKKyAgICAgICAgcmVt
b3ZlU3dpcGVTbmFwc2hvdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zd2lw
ZVdhaXRpbmdGb3JTdWJyZXNvdXJjZUxvYWRzID0gZmFsc2U7Ci0gICAgcmVtb3ZlU3dpcGVTbmFw
c2hvdElmUmVhZHkoKTsKLX0KLQotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZFNhbWVE
b2N1bWVudE5hdmlnYXRpb25Gb3JNYWluRnJhbWUoU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUg
dHlwZSkKLXsKLSAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6
OlN3aXBlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGlzIGlzIG5lYXJseSBlcXVpdmFs
ZW50IHRvIGRpZEZpbmlzaExvYWQgaW4gdGhlIHNhbWUgZG9jdW1lbnQgbmF2aWdhdGlvbiBjYXNl
LgotICAgIGlmICghbV9zd2lwZVdhaXRpbmdGb3JUZXJtaW5hbExvYWRpbmdTdGF0ZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9zd2lwZVdhaXRpbmdGb3JUZXJtaW5hbExvYWRpbmdTdGF0ZSA9
IGZhbHNlOwotCi0gICAgaWYgKHR5cGUgIT0gU2FtZURvY3VtZW50TmF2aWdhdGlvblNlc3Npb25T
dGF0ZVJlcGxhY2UgJiYgdHlwZSAhPSBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uU2Vzc2lvblN0YXRl
UG9wKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N3aXBlQWN0aXZlTG9hZE1vbml0b3JpbmdU
aW1lci5zdGFydFJlcGVhdGluZyhzd2lwZVNuYXBzaG90UmVtb3ZhbEFjdGl2ZUxvYWRNb25pdG9y
aW5nSW50ZXJ2YWwpOwotfQotCi12b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YWN0aXZlTG9h
ZE1vbml0b3JpbmdUaW1lckZpcmVkKCkKLXsKLSAgICBpZiAobV93ZWJQYWdlUHJveHkucGFnZUxv
YWRTdGF0ZSgpLmlzTG9hZGluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fc3dp
cGVXYWl0aW5nRm9yU3VicmVzb3VyY2VMb2FkcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9z
d2lwZVdhaXRpbmdGb3JTdWJyZXNvdXJjZUxvYWRzID0gZmFsc2U7Ci0gICAgcmVtb3ZlU3dpcGVT
bmFwc2hvdElmUmVhZHkoKTsKLX0KLQotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnN3aXBl
U25hcHNob3RXYXRjaGRvZ1RpbWVyRmlyZWQoKQotewotICAgIHJlbW92ZVN3aXBlU25hcHNob3Qo
KTsKLX0KLQotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJlbW92ZVN3aXBlU25hcHNob3RJ
ZlJlYWR5KCkKLXsKLSAgICBpZiAobV9zd2lwZVdhaXRpbmdGb3JSZW5kZXJUcmVlU2l6ZVRocmVz
aG9sZCB8fCBtX3N3aXBlV2FpdGluZ0ZvclJlcGFpbnQgfHwgbV9zd2lwZVdhaXRpbmdGb3JUZXJt
aW5hbExvYWRpbmdTdGF0ZSB8fCBtX3N3aXBlV2FpdGluZ0ZvclN1YnJlc291cmNlTG9hZHMgfHwg
bV9zd2lwZVdhaXRpbmdGb3JTY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uKQotICAgICAgICByZXR1
cm47Ci0KLSAgICByZW1vdmVTd2lwZVNuYXBzaG90KCk7CisgICAgZGlkUmVwYWludEFmdGVyTmF2
aWdhdGlvbigpOwogfQogCiB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6cmVtb3ZlU3dpcGVT
bmFwc2hvdCgpCiB7Ci0gICAgbV9zd2lwZVdhaXRpbmdGb3JSZW5kZXJUcmVlU2l6ZVRocmVzaG9s
ZCA9IGZhbHNlOwotICAgIG1fc3dpcGVXYWl0aW5nRm9yUmVwYWludCA9IGZhbHNlOwotICAgIG1f
c3dpcGVXYWl0aW5nRm9yVGVybWluYWxMb2FkaW5nU3RhdGUgPSBmYWxzZTsKLSAgICBtX3N3aXBl
V2FpdGluZ0ZvclN1YnJlc291cmNlTG9hZHMgPSBmYWxzZTsKLSAgICBtX3N3aXBlV2FpdGluZ0Zv
clNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24gPSBmYWxzZTsKLQotICAgIG1fc3dpcGVXYXRjaGRv
Z1RpbWVyLnN0b3AoKTsKLSAgICBtX3N3aXBlQWN0aXZlTG9hZE1vbml0b3JpbmdUaW1lci5zdG9w
KCk7CisgICAgbV9zbmFwc2hvdFJlbW92YWxUcmFja2VyLnJlc2V0KCk7CiAKICAgICBpZiAobV9h
Y3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBlKQogICAgICAgICByZXR1
cm47Ci0gICAgCisKICAgICArK21fZ2VzdHVyZVBlbmRpbmdTbmFwc2hvdFJlbW92YWw7Ci0gICAg
CisKICAgICBbbV9zbmFwc2hvdFZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CiAgICAgbV9zbmFw
c2hvdFZpZXcgPSBudWxscHRyOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyLmgKaW5kZXggMmE5MGZjOTFkZmM5ZjkwNWJk
MGUzNmFmYzk0MmI4MzM1YjBmMGFmMS4uYzE1OWU0OWE5ZGIyNTM5MGM3NDMxZjZlMjYyNjUwNTA2
MjAyYWY5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2Vz
dHVyZUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdH
ZXN0dXJlQ29udHJvbGxlci5oCkBAIC0zMSw5ICszMSwxMiBAQAogI2luY2x1ZGUgIldlYWtPYmpD
UHRyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxv
YXRSZWN0Lmg+CisjaW5jbHVkZSA8Y2hyb25vPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCisvLyBGSVhNRTogTW92ZSB0aGlzIGZpbGUgb3V0
IG9mIHRoZSBtYWMvIHN1YmRpcmVjdG9yeS4KKwogT0JKQ19DTEFTUyBDQUxheWVyOwogCiAjaWYg
UExBVEZPUk0oSU9TKQpAQCAtNjUsNiArNjgsNyBAQCBjbGFzcyBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXIgOiBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKICAgICBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXIoV2ViUGFnZVByb3h5Jik7CiAgICAgflZpZXdHZXN0dXJlQ29udHJvbGxl
cigpOworICAgIHZvaWQgcGxhdGZvcm1UZWFyZG93bigpOwogICAgIAogICAgIGVudW0gY2xhc3Mg
Vmlld0dlc3R1cmVUeXBlIHsKICAgICAgICAgTm9uZSwKQEAgLTEwOSw4ICsxMTMsNiBAQCBwdWJs
aWM6CiAKICAgICBib29sIHNob3VsZElnbm9yZVBpbm5lZFN0YXRlKCkgeyByZXR1cm4gbV9zaG91
bGRJZ25vcmVQaW5uZWRTdGF0ZTsgfQogICAgIHZvaWQgc2V0U2hvdWxkSWdub3JlUGlubmVkU3Rh
dGUoYm9vbCBpZ25vcmUpIHsgbV9zaG91bGRJZ25vcmVQaW5uZWRTdGF0ZSA9IGlnbm9yZTsgfQot
Ci0gICAgdm9pZCBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JNYWluRnJhbWUoKTsK
ICNlbHNlCiAgICAgdm9pZCBpbnN0YWxsU3dpcGVIYW5kbGVyKFVJVmlldyAqZ2VzdHVyZVJlY29n
bml6ZXJWaWV3LCBVSVZpZXcgKnN3aXBpbmdWaWV3KTsKICAgICB2b2lkIHNldEFsdGVybmF0ZUJh
Y2tGb3J3YXJkTGlzdFNvdXJjZVZpZXcoV0tXZWJWaWV3ICopOwpAQCAtMTE5LDMwICsxMjEsNzAg
QEAgcHVibGljOgogICAgIHZvaWQgZW5kU3dpcGVHZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlzdEl0
ZW0qIHRhcmdldEl0ZW0sIF9VSVZpZXdDb250cm9sbGVyVHJhbnNpdGlvbkNvbnRleHQgKiwgYm9v
bCBjYW5jZWxsZWQpOwogICAgIHZvaWQgd2lsbENvbW1pdFBvc3RTd2lwZVRyYW5zaXRpb25MYXll
clRyZWUoYm9vbCk7CiAgICAgdm9pZCBzZXRSZW5kZXJUcmVlU2l6ZSh1aW50NjRfdCk7Ci0gICAg
dm9pZCBkaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24oKTsKICNlbmRpZgogCi0gICAgdm9pZCBkaWRG
aW5pc2hMb2FkRm9yTWFpbkZyYW1lKCkgeyBtYWluRnJhbWVMb2FkRGlkUmVhY2hUZXJtaW5hbFN0
YXRlKCk7IH0KLSAgICB2b2lkIGRpZEZhaWxMb2FkRm9yTWFpbkZyYW1lKCkgeyBtYWluRnJhbWVM
b2FkRGlkUmVhY2hUZXJtaW5hbFN0YXRlKCk7IH0KLSAgICB2b2lkIG1haW5GcmFtZUxvYWREaWRS
ZWFjaFRlcm1pbmFsU3RhdGUoKTsKLSAgICB2b2lkIHJlbW92ZVN3aXBlU25hcHNob3QoKTsKKyAg
ICBXZWJDb3JlOjpDb2xvciBiYWNrZ3JvdW5kQ29sb3JGb3JDdXJyZW50U25hcHNob3QoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvckZvckN1cnJlbnRTbmFwc2hvdDsgfQorCisgICAg
dm9pZCBkaWRGaW5pc2hMb2FkRm9yTWFpbkZyYW1lKCkgeyBkaWRSZWFjaE1haW5GcmFtZUxvYWRU
ZXJtaW5hbFN0YXRlKCk7IH0KKyAgICB2b2lkIGRpZEZhaWxMb2FkRm9yTWFpbkZyYW1lKCkgeyBk
aWRSZWFjaE1haW5GcmFtZUxvYWRUZXJtaW5hbFN0YXRlKCk7IH0KKyAgICB2b2lkIGRpZEZpcnN0
VmlzdWFsbHlOb25FbXB0eUxheW91dEZvck1haW5GcmFtZSgpOworICAgIHZvaWQgZGlkUmVwYWlu
dEFmdGVyTmF2aWdhdGlvbigpOworICAgIHZvaWQgZGlkSGl0UmVuZGVyVHJlZVNpemVUaHJlc2hv
bGQoKTsKKyAgICB2b2lkIGRpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbigpOworICAgIHZvaWQgZGlk
UmVhY2hNYWluRnJhbWVMb2FkVGVybWluYWxTdGF0ZSgpOwogICAgIHZvaWQgZGlkU2FtZURvY3Vt
ZW50TmF2aWdhdGlvbkZvck1haW5GcmFtZShTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZSk7CiAK
LSAgICBXZWJDb3JlOjpDb2xvciBiYWNrZ3JvdW5kQ29sb3JGb3JDdXJyZW50U25hcHNob3QoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvckZvckN1cnJlbnRTbmFwc2hvdDsgfQorICAg
IHZvaWQgY2hlY2tGb3JBY3RpdmVMb2FkcygpOworCisgICAgdm9pZCByZW1vdmVTd2lwZVNuYXBz
aG90KCk7CiAKIHByaXZhdGU6CiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIuCiAgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2Fn
ZURlY29kZXImKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc3dpcGVTbmFwc2hvdFdhdGNoZG9nVGlt
ZXJGaXJlZCgpOwotICAgIHZvaWQgYWN0aXZlTG9hZE1vbml0b3JpbmdUaW1lckZpcmVkKCk7Cisg
ICAgc3RhdGljIFZpZXdHZXN0dXJlQ29udHJvbGxlciogZ2VzdHVyZUNvbnRyb2xsZXJGb3JQYWdl
KHVpbnQ2NF90KTsKKworICAgIGNsYXNzIFNuYXBzaG90UmVtb3ZhbFRyYWNrZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgZW51bSBFdmVudCA6IHVpbnQ4X3QgeworICAgICAgICAgICAgVmlzdWFs
bHlOb25FbXB0eUxheW91dCA9IDEgPDwgMCwKKyAgICAgICAgICAgIFJlbmRlclRyZWVTaXplVGhy
ZXNob2xkID0gMSA8PCAxLAorICAgICAgICAgICAgUmVwYWludEFmdGVyTmF2aWdhdGlvbiA9IDEg
PDwgMiwKKyAgICAgICAgICAgIE1haW5GcmFtZUxvYWQgPSAxIDw8IDMsCisgICAgICAgICAgICBT
dWJyZXNvdXJjZUxvYWRzID0gMSA8PCA0LAorICAgICAgICAgICAgU2Nyb2xsUG9zaXRpb25SZXN0
b3JhdGlvbiA9IDEgPDwgNQorICAgICAgICB9OworICAgICAgICB0eXBlZGVmIHVpbnQ4X3QgRXZl
bnRzOworCisgICAgICAgIFNuYXBzaG90UmVtb3ZhbFRyYWNrZXIoKTsKKworICAgICAgICB2b2lk
IHN0YXJ0KEV2ZW50cywgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KTsKKyAgICAgICAgdm9pZCByZXNl
dCgpOworCisgICAgICAgIGJvb2wgZXZlbnRPY2N1cnJlZChFdmVudHMpOworICAgICAgICBib29s
IGNhbmNlbE91dHN0YW5kaW5nRXZlbnQoRXZlbnRzKTsKKworICAgICAgICB2b2lkIHN0YXJ0V2F0
Y2hkb2coc3RkOjpjaHJvbm86OnNlY29uZHMpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9p
ZCBsb2coU3RyaW5nKTsKKyAgICAgICAgU3RyaW5nIGV2ZW50c0Rlc2NyaXB0aW9uKEV2ZW50cyk7
CisKKyAgICAgICAgdm9pZCBmaXJlUmVtb3ZhbENhbGxiYWNrSW1tZWRpYXRlbHkoKTsKKyAgICAg
ICAgdm9pZCBmaXJlUmVtb3ZhbENhbGxiYWNrSWZQb3NzaWJsZSgpOworICAgICAgICB2b2lkIHdh
dGNoZG9nVGltZXJGaXJlZCgpOworCisgICAgICAgIEV2ZW50cyBtX291dHN0YW5kaW5nRXZlbnRz
IHsgMCB9OworICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbV9yZW1vdmFsQ2FsbGJhY2s7
CisgICAgICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbV9zdGFydFRp
bWU7CisKKyAgICAgICAgUnVuTG9vcDo6VGltZXI8U25hcHNob3RSZW1vdmFsVHJhY2tlcj4gbV93
YXRjaGRvZ1RpbWVyOworICAgIH07CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gTWVzc2Fn
ZSBoYW5kbGVycy4KICAgICB2b2lkIGRpZENvbGxlY3RHZW9tZXRyeUZvck1hZ25pZmljYXRpb25H
ZXN0dXJlKFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudEJvdW5kcywgYm9vbCBmcmFt
ZUhhbmRsZXNNYWduaWZpY2F0aW9uR2VzdHVyZSk7CiAgICAgdm9pZCBkaWRDb2xsZWN0R2VvbWV0
cnlGb3JTbWFydE1hZ25pZmljYXRpb25HZXN0dXJlKFdlYkNvcmU6OkZsb2F0UG9pbnQgb3JpZ2lu
LCBXZWJDb3JlOjpGbG9hdFJlY3QgcmVuZGVyUmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2li
bGVDb250ZW50Qm91bmRzLCBib29sIGlzUmVwbGFjZWRFbGVtZW50LCBkb3VibGUgdmlld3BvcnRN
aW5pbXVtU2NhbGUsIGRvdWJsZSB2aWV3cG9ydE1heGltdW1TY2FsZSk7Ci0gICAgdm9pZCBkaWRI
aXRSZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCgpOwotICAgIHZvaWQgcmVtb3ZlU3dpcGVTbmFwc2hv
dEFmdGVyUmVwYWludCgpOwogCiAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBzY2FsZWRNYWduaWZp
Y2F0aW9uT3JpZ2luKFdlYkNvcmU6OkZsb2F0UG9pbnQgb3JpZ2luLCBkb3VibGUgc2NhbGUpOwog
CkBAIC0xNTksMTQgKzIwMSwxMyBAQCBwcml2YXRlOgogICAgIENBTGF5ZXIgKmRldGVybWluZUxh
eWVyQWRqYWNlbnRUb1NuYXBzaG90Rm9yUGFyZW50KFN3aXBlRGlyZWN0aW9uLCBDQUxheWVyICpz
bmFwc2hvdExheWVyUGFyZW50KSBjb25zdDsKICAgICB2b2lkIGFwcGx5RGVidWdnaW5nUHJvcGVy
dGllc1RvU3dpcGVWaWV3cygpOwogICAgIHZvaWQgZGlkTW92ZVN3aXBlU25hcHNob3RMYXllcigp
OwotI2Vsc2UKLSAgICB2b2lkIHJlbW92ZVN3aXBlU25hcHNob3RJZlJlYWR5KCk7CisKKyAgICB2
b2lkIGZvcmNlUmVwYWludElmTmVlZGVkKCk7CiAjZW5kaWYKIAogICAgIFdlYlBhZ2VQcm94eSYg
bV93ZWJQYWdlUHJveHk7CiAgICAgVmlld0dlc3R1cmVUeXBlIG1fYWN0aXZlR2VzdHVyZVR5cGUg
eyBWaWV3R2VzdHVyZVR5cGU6Ok5vbmUgfTsKIAotICAgIFJ1bkxvb3A6OlRpbWVyPFZpZXdHZXN0
dXJlQ29udHJvbGxlcj4gbV9zd2lwZVdhdGNoZG9nVGltZXI7CiAgICAgUnVuTG9vcDo6VGltZXI8
Vmlld0dlc3R1cmVDb250cm9sbGVyPiBtX3N3aXBlQWN0aXZlTG9hZE1vbml0b3JpbmdUaW1lcjsK
IAogICAgIFdlYkNvcmU6OkNvbG9yIG1fYmFja2dyb3VuZENvbG9yRm9yQ3VycmVudFNuYXBzaG90
OwpAQCAtMTc0LDggKzIxNSw2IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFJl
ZlB0cjxWaWV3U25hcHNob3Q+IG1fY3VycmVudFN3aXBlU25hcHNob3Q7CiAKLSAgICBSdW5Mb29w
OjpUaW1lcjxWaWV3R2VzdHVyZUNvbnRyb2xsZXI+IG1fc3dpcGVXYXRjaGRvZ0FmdGVyRmlyc3RW
aXN1YWxseU5vbkVtcHR5TGF5b3V0VGltZXI7Ci0KICAgICBkb3VibGUgbV9tYWduaWZpY2F0aW9u
OwogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9tYWduaWZpY2F0aW9uT3JpZ2luOwogCkBAIC0y
MDgsNyArMjQ3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIChebV9kaWRNb3ZlU3dpcGVTbmFwc2hv
dENhbGxiYWNrKShDR1JlY3QpIHsgbnVsbHB0ciB9OwogCiAgICAgYm9vbCBtX3Nob3VsZElnbm9y
ZVBpbm5lZFN0YXRlIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc3dpcGVJblByb2dyZXNzIHsgZmFs
c2UgfTsKKworICAgIGJvb2wgbV9oYXNPdXRzdGFuZGluZ1JlcGFpbnRSZXF1ZXN0IHsgZmFsc2Ug
fTsKICNlbHNlICAgIAogICAgIFVJVmlldyAqbV9saXZlU3dpcGVWaWV3IHsgbnVsbHB0ciB9Owog
ICAgIFJldGFpblB0cjxVSVZpZXc+IG1fbGl2ZVN3aXBlVmlld0NsaXBwaW5nVmlldzsKQEAgLTIy
MiwxMiArMjYyLDcgQEAgcHJpdmF0ZToKICAgICB1aW50NjRfdCBtX2dlc3R1cmVQZW5kaW5nU25h
cHNob3RSZW1vdmFsIHsgMCB9OwogI2VuZGlmCiAKLSAgICBib29sIG1fc3dpcGVXYWl0aW5nRm9y
VmlzdWFsbHlOb25FbXB0eUxheW91dCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3N3aXBlV2FpdGlu
Z0ZvclJlbmRlclRyZWVTaXplVGhyZXNob2xkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc3dpcGVX
YWl0aW5nRm9yUmVwYWludCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3N3aXBlV2FpdGluZ0ZvclRl
cm1pbmFsTG9hZGluZ1N0YXRlIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc3dpcGVXYWl0aW5nRm9y
U3VicmVzb3VyY2VMb2FkcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3N3aXBlV2FpdGluZ0ZvclNj
cm9sbFBvc2l0aW9uUmVzdG9yYXRpb24geyBmYWxzZSB9OworICAgIFNuYXBzaG90UmVtb3ZhbFRy
YWNrZXIgbV9zbmFwc2hvdFJlbW92YWxUcmFja2VyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJl
Q29udHJvbGxlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmll
d0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluCmluZGV4IDE4YzMyNGMwMmNkODEwNmEwZDdj
MDZjN2ViYmViNzViNzhlNGQzNWYuLmY1MWZkMmQ3NmM0OTUwMmRhYTdiM2ZjZDY1YTdjM2UxNmE2
YzI3NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1
cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluCkBAIC0yMSw3ICsyMSw3IEBACiAj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAKIG1lc3NhZ2VzIC0+IFZpZXdHZXN0dXJlQ29udHJvbGxlciB7Ci0jaWYg
IVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgRGlkQ29sbGVjdEdlb21ldHJ5
Rm9yTWFnbmlmaWNhdGlvbkdlc3R1cmUoV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50
Qm91bmRzLCBib29sIGZyYW1lSGFuZGxlc01hZ25pZmljYXRpb25HZXN0dXJlKQogICAgIERpZENv
bGxlY3RHZW9tZXRyeUZvclNtYXJ0TWFnbmlmaWNhdGlvbkdlc3R1cmUoV2ViQ29yZTo6RmxvYXRQ
b2ludCBvcmlnaW4sIFdlYkNvcmU6OkZsb2F0UmVjdCByZW5kZXJSZWN0LCBXZWJDb3JlOjpGbG9h
dFJlY3QgdmlzaWJsZUNvbnRlbnRCb3VuZHMsIGJvb2wgaXNSZXBsYWNlZEVsZW1lbnQsIGRvdWJs
ZSB2aWV3cG9ydE1pbmltdW1TY2FsZSwgZG91YmxlIHZpZXdwb3J0TWF4aW11bVNjYWxlKQogICAg
IERpZEhpdFJlbmRlclRyZWVTaXplVGhyZXNob2xkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0KaW5kZXggMzhi
N2UzNjhjNTk5NWEyNDRjOGE3YWY5Y2Q4MjZhODU0Y2Y3NWE3Yy4uMDMzODZhYTg0YWExYjExZmUz
NDY2ODIwZjI2ZTAyMDlmYzE5N2Y0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0KQEAgLTQ3LDcgKzQ3LDcg
QEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLSNpZiBQTEFURk9STShNQUMpICYmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEwMDAKKyNpZiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxMDAwCiAjZGVmaW5lIEVOQUJMRV9MRUdBQ1lfU1dJUEVf
U0hBRE9XX1NUWUxFIDEKICNlbHNlCiAjZGVmaW5lIEVOQUJMRV9MRUdBQ1lfU1dJUEVfU0hBRE9X
X1NUWUxFIDAKQEAgLTc4LDkgKzc4LDYgQEAgc3RhdGljIGNvbnN0IENHRmxvYXQgbWluaW11bUhv
cml6b250YWxTd2lwZURpc3RhbmNlID0gMTU7CiBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bVNj
cm9sbEV2ZW50UmF0aW9Gb3JTd2lwZSA9IDAuNTsKIAogc3RhdGljIGNvbnN0IGZsb2F0IHN3aXBl
U25hcHNob3RSZW1vdmFsUmVuZGVyVHJlZVNpemVUYXJnZXRGcmFjdGlvbiA9IDAuNTsKLXN0YXRp
YyBjb25zdCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBzd2lwZVNuYXBzaG90UmVtb3ZhbFdhdGNoZG9n
RHVyYXRpb24gPSA1X3M7Ci1zdGF0aWMgY29uc3Qgc3RkOjpjaHJvbm86OnNlY29uZHMgc3dpcGVT
bmFwc2hvdFJlbW92YWxXYXRjaGRvZ0FmdGVyRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0RHVy
YXRpb24gPSAzX3M7Ci1zdGF0aWMgY29uc3Qgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBzd2lw
ZVNuYXBzaG90UmVtb3ZhbEFjdGl2ZUxvYWRNb25pdG9yaW5nSW50ZXJ2YWwgPSAyNTBfbXM7CiAK
IEBpbnRlcmZhY2UgV0tTd2lwZUNhbmNlbGxhdGlvblRyYWNrZXIgOiBOU09iamVjdCB7CiBAcHJp
dmF0ZQpAQCAtOTcsMTYgKzk0LDcgQEAgc3RhdGljIGNvbnN0IHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMgc3dpcGVTbmFwc2hvdFJlbW92YWxBY3RpdmVMb2FkTW9uaXRvcmluZ0kKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLVZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Vmlld0dlc3R1cmVDb250cm9s
bGVyKFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQotICAgIDogbV93ZWJQYWdlUHJveHkod2Vi
UGFnZVByb3h5KQotICAgICwgbV9zd2lwZVdhdGNoZG9nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0
aGlzLCAmVmlld0dlc3R1cmVDb250cm9sbGVyOjpzd2lwZVNuYXBzaG90V2F0Y2hkb2dUaW1lckZp
cmVkKQotICAgICwgbV9zd2lwZUFjdGl2ZUxvYWRNb25pdG9yaW5nVGltZXIoUnVuTG9vcDo6bWFp
bigpLCB0aGlzLCAmVmlld0dlc3R1cmVDb250cm9sbGVyOjphY3RpdmVMb2FkTW9uaXRvcmluZ1Rp
bWVyRmlyZWQpCi0gICAgLCBtX3N3aXBlV2F0Y2hkb2dBZnRlckZpcnN0VmlzdWFsbHlOb25FbXB0
eUxheW91dFRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6c3dpcGVTbmFwc2hvdFdhdGNoZG9nVGltZXJGaXJlZCkKLXsKLSAgICBtX3dlYlBhZ2VQcm94
eS5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUNvbnRy
b2xsZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCksICp0
aGlzKTsKLX0KLQotVmlld0dlc3R1cmVDb250cm9sbGVyOjp+Vmlld0dlc3R1cmVDb250cm9sbGVy
KCkKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpwbGF0Zm9ybVRlYXJkb3duKCkKIHsKICAg
ICBpZiAobV9zd2lwZUNhbmNlbGxhdGlvblRyYWNrZXIpCiAgICAgICAgIFttX3N3aXBlQ2FuY2Vs
bGF0aW9uVHJhY2tlciBzZXRJc0NhbmNlbGxlZDpZRVNdOwpAQCAtMTE4LDggKzEwNiw2IEBAIFZp
ZXdHZXN0dXJlQ29udHJvbGxlcjo6flZpZXdHZXN0dXJlQ29udHJvbGxlcigpCiAgICAgICAgIEJs
b2NrX3JlbGVhc2UobV9kaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrKTsKICAgICAgICAgbV9k
aWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrID0gbnVsbHB0cjsKICAgICB9Ci0KLSAgICBtX3dl
YlBhZ2VQcm94eS5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWV3
R2VzdHVyZUNvbnRyb2xsZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHku
cGFnZUlEKCkpOwogfQogCiBzdGF0aWMgZG91YmxlIHJlc2lzdGFuY2VGb3JEZWx0YShkb3VibGUg
ZGVsdGFTY2FsZSwgZG91YmxlIGN1cnJlbnRTY2FsZSkKQEAgLTUzNSw3ICs1MjEsNiBAQCB2b2lk
IFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUoV2ViQmFja0ZvcndhcmRM
aXN0SXRlbSogdGFyZ2V0SXRlbQogICAgIG1fd2ViUGFnZVByb3h5Lm5hdmlnYXRpb25HZXN0dXJl
RGlkQmVnaW4oKTsKIAogICAgIG1fYWN0aXZlR2VzdHVyZVR5cGUgPSBWaWV3R2VzdHVyZVR5cGU6
OlN3aXBlOwotICAgIG1fc3dpcGVJblByb2dyZXNzID0gdHJ1ZTsKIAogICAgIENBTGF5ZXIgKnJv
b3RDb250ZW50TGF5ZXIgPSBtX3dlYlBhZ2VQcm94eS5hY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9v
dExheWVyKCk7CiAKQEAgLTc1Miw4ICs3MzcsNiBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6ZW5kU3dpcGVHZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0ZW0sCiAK
ICAgICBtX3N3aXBlQ2FuY2VsbGF0aW9uVHJhY2tlciA9IG51bGxwdHI7CiAKLSAgICBtX3N3aXBl
SW5Qcm9ncmVzcyA9IGZhbHNlOwotCiAgICAgQ0FMYXllciAqcm9vdExheWVyID0gbV93ZWJQYWdl
UHJveHkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcigpOwogCiAgICAgW3Jvb3RMYXll
ciBzZXRTaGFkb3dPcGFjaXR5OjBdOwpAQCAtNzcxLDExMCArNzU0LDQ3IEBAIHZvaWQgVmlld0dl
c3R1cmVDb250cm9sbGVyOjplbmRTd2lwZUdlc3R1cmUoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSog
dGFyZ2V0SXRlbSwKIAogICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yOjpTZXRSZW5kZXJUcmVlU2l6ZU5vdGlmaWNh
dGlvblRocmVzaG9sZChyZW5kZXJUcmVlU2l6ZSAqIHN3aXBlU25hcHNob3RSZW1vdmFsUmVuZGVy
VHJlZVNpemVUYXJnZXRGcmFjdGlvbiksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKIAotICAg
IG1fc3dpcGVXYWl0aW5nRm9yVmlzdWFsbHlOb25FbXB0eUxheW91dCA9IHRydWU7Ci0gICAgbV9z
d2lwZVdhaXRpbmdGb3JSZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCA9IHRydWU7Ci0KICAgICBtX3dl
YlBhZ2VQcm94eS5uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCh0cnVlLCAqdGFyZ2V0SXRlbSk7CiAg
ICAgbV93ZWJQYWdlUHJveHkuZ29Ub0JhY2tGb3J3YXJkSXRlbSh0YXJnZXRJdGVtKTsKIAorICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBpbmNsdWRlIHNjcm9sbCBwb3NpdGlvbiBy
ZXN0b3JhdGlvbiBoZXJlLAorICAgIC8vIGFuZCB0aGVuIGNhbiBhZGRyZXNzIHRoZSBGSVhNRSBp
biBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JNYWluRnJhbWUuCisgICAgbV9zbmFw
c2hvdFJlbW92YWxUcmFja2VyLnN0YXJ0KFNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OlZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXQKKyAgICAgICAgfCBTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpSZW5kZXJU
cmVlU2l6ZVRocmVzaG9sZAorICAgICAgICB8IFNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6Ok1haW5G
cmFtZUxvYWQKKyAgICAgICAgfCBTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpTdWJyZXNvdXJjZUxv
YWRzLCBbdGhpc10geworICAgICAgICAgICAgdGhpcy0+Zm9yY2VSZXBhaW50SWZOZWVkZWQoKTsK
KyAgICAgICAgfSk7CisKICAgICAvLyBGSVhNRTogTGlrZSBvbiBpT1MsIHdlIHNob3VsZCBlbnN1
cmUgdGhhdCBldmVuIGlmIG9uZSBvZiB0aGUgdGltZW91dHMgZmlyZXMsCi0gICAgLy8gd2UgbmV2
ZXIgc2hvdyB0aGUgb2xkIHBhZ2UgY29udGVudCwgaW5zdGVhZCBzaG93aW5nIHdoaXRlIChvciB0
aGUgc25hcHNob3QgYmFja2dyb3VuZCBjb2xvcikuCi0gICAgbV9zd2lwZVdhdGNoZG9nVGltZXIu
c3RhcnRPbmVTaG90KHN3aXBlU25hcHNob3RSZW1vdmFsV2F0Y2hkb2dEdXJhdGlvbi5jb3VudCgp
KTsKKyAgICAvLyB3ZSBuZXZlciBzaG93IHRoZSBvbGQgcGFnZSBjb250ZW50LCBpbnN0ZWFkIHNo
b3dpbmcgdGhlIHNuYXBzaG90IGJhY2tncm91bmQgY29sb3IuCiAKICAgICBpZiAoVmlld1NuYXBz
aG90KiBzbmFwc2hvdCA9IHRhcmdldEl0ZW0tPnNuYXBzaG90KCkpCiAgICAgICAgIG1fYmFja2dy
b3VuZENvbG9yRm9yQ3VycmVudFNuYXBzaG90ID0gc25hcHNob3QtPmJhY2tncm91bmRDb2xvcigp
OwogfQogCi12b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlkSGl0UmVuZGVyVHJlZVNpemVU
aHJlc2hvbGQoKQotewotICAgIGlmIChtX2FjdGl2ZUdlc3R1cmVUeXBlICE9IFZpZXdHZXN0dXJl
VHlwZTo6U3dpcGUgfHwgbV9zd2lwZUluUHJvZ3Jlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fc3dpcGVXYWl0aW5nRm9yUmVuZGVyVHJlZVNpemVUaHJlc2hvbGQgPSBmYWxzZTsKLQotICAg
IGlmICghbV9zd2lwZVdhaXRpbmdGb3JWaXN1YWxseU5vbkVtcHR5TGF5b3V0KSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBJZGVhbGx5IHdlIHdvdWxkIGNhbGwgcmVtb3ZlU3dpcGVTbmFwc2hvdEFmdGVy
UmVwYWludCgpIGhlcmUsIGJ1dCBzb21ldGltZXMKLSAgICAgICAgLy8gc2Nyb2xsIHBvc2l0aW9u
IGlzbid0IGRvbmUgcmVzdG9yaW5nIHVudGlsIGRpZEZpbmlzaExvYWRGb3JGcmFtZSwgc28gd2Ug
Zmxhc2ggdGhlIHdyb25nIGNvbnRlbnQuCi0gICAgfQotfQotCi12b2lkIFZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yTWFpbkZyYW1lKCkKLXsK
LSAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBlIHx8
IG1fc3dpcGVJblByb2dyZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N3aXBlV2FpdGlu
Z0ZvclZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQgPSBmYWxzZTsKLQotICAgIGlmICghbV9zd2lwZVdh
aXRpbmdGb3JSZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCkgewotICAgICAgICAvLyBGSVhNRTogSWRl
YWxseSB3ZSB3b3VsZCBjYWxsIHJlbW92ZVN3aXBlU25hcHNob3RBZnRlclJlcGFpbnQoKSBoZXJl
LCBidXQgc29tZXRpbWVzCi0gICAgICAgIC8vIHNjcm9sbCBwb3NpdGlvbiBpc24ndCBkb25lIHJl
c3RvcmluZyB1bnRpbCBkaWRGaW5pc2hMb2FkRm9yRnJhbWUsIHNvIHdlIGZsYXNoIHRoZSB3cm9u
ZyBjb250ZW50LgotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fc3dpcGVXYXRjaGRvZ0FmdGVyRmly
c3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0VGltZXIuc3RhcnRPbmVTaG90KHN3aXBlU25hcHNob3RS
ZW1vdmFsV2F0Y2hkb2dBZnRlckZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dER1cmF0aW9uLmNv
dW50KCkpOwotICAgICAgICBtX3N3aXBlV2F0Y2hkb2dUaW1lci5zdG9wKCk7Ci0gICAgfQotfQot
Ci12b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6bWFpbkZyYW1lTG9hZERpZFJlYWNoVGVybWlu
YWxTdGF0ZSgpCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Zm9yY2VSZXBhaW50SWZOZWVk
ZWQoKQogewotICAgIGlmIChtX2FjdGl2ZUdlc3R1cmVUeXBlICE9IFZpZXdHZXN0dXJlVHlwZTo6
U3dpcGUgfHwgbV9zd2lwZUluUHJvZ3Jlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X3dlYlBhZ2VQcm94eS5wYWdlTG9hZFN0YXRlKCkuaXNMb2FkaW5nKCkpIHsKLSAgICAgICAgbV9z
d2lwZUFjdGl2ZUxvYWRNb25pdG9yaW5nVGltZXIuc3RhcnRSZXBlYXRpbmcoc3dpcGVTbmFwc2hv
dFJlbW92YWxBY3RpdmVMb2FkTW9uaXRvcmluZ0ludGVydmFsKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHJlbW92ZVN3aXBlU25hcHNob3RBZnRlclJlcGFpbnQoKTsKLX0KLQotdm9p
ZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JNYWlu
RnJhbWUoU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUgdHlwZSkKLXsKLSAgICBpZiAobV9hY3Rp
dmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBlIHx8IG1fc3dpcGVJblByb2dy
ZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAodHlwZSAhPSBTYW1lRG9jdW1lbnROYXZp
Z2F0aW9uU2Vzc2lvblN0YXRlUmVwbGFjZSAmJiB0eXBlICE9IFNhbWVEb2N1bWVudE5hdmlnYXRp
b25TZXNzaW9uU3RhdGVQb3ApCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3dpcGVBY3RpdmVM
b2FkTW9uaXRvcmluZ1RpbWVyLnN0YXJ0UmVwZWF0aW5nKHN3aXBlU25hcHNob3RSZW1vdmFsQWN0
aXZlTG9hZE1vbml0b3JpbmdJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgVmlld0dlc3R1cmVDb250cm9s
bGVyOjphY3RpdmVMb2FkTW9uaXRvcmluZ1RpbWVyRmlyZWQoKQotewotICAgIGlmIChtX3dlYlBh
Z2VQcm94eS5wYWdlTG9hZFN0YXRlKCkuaXNMb2FkaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHJlbW92ZVN3aXBlU25hcHNob3RBZnRlclJlcGFpbnQoKTsKLX0KLQotdm9pZCBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI6OnN3aXBlU25hcHNob3RXYXRjaGRvZ1RpbWVyRmlyZWQoKQotewotICAg
IHJlbW92ZVN3aXBlU25hcHNob3RBZnRlclJlcGFpbnQoKTsKLX0KLQotdm9pZCBWaWV3R2VzdHVy
ZUNvbnRyb2xsZXI6OnJlbW92ZVN3aXBlU25hcHNob3RBZnRlclJlcGFpbnQoKQotewotICAgIG1f
c3dpcGVBY3RpdmVMb2FkTW9uaXRvcmluZ1RpbWVyLnN0b3AoKTsKLQotICAgIGlmIChtX2FjdGl2
ZUdlc3R1cmVUeXBlICE9IFZpZXdHZXN0dXJlVHlwZTo6U3dpcGUgfHwgbV9zd2lwZUluUHJvZ3Jl
c3MpCisgICAgaWYgKG1fYWN0aXZlR2VzdHVyZVR5cGUgIT0gVmlld0dlc3R1cmVUeXBlOjpTd2lw
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc3dpcGVXYWl0aW5nRm9yUmVwYWludCkK
KyAgICBpZiAobV9oYXNPdXRzdGFuZGluZ1JlcGFpbnRSZXF1ZXN0KQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX3N3aXBlV2FpdGluZ0ZvclJlcGFpbnQgPSB0cnVlOworICAgIG1faGFzT3V0c3Rh
bmRpbmdSZXBhaW50UmVxdWVzdCA9IHRydWU7CiAKLSAgICBXZWJQYWdlUHJveHkqIHdlYlBhZ2VQ
cm94eSA9ICZtX3dlYlBhZ2VQcm94eTsKLSAgICBtX3dlYlBhZ2VQcm94eS5mb3JjZVJlcGFpbnQo
Vm9pZENhbGxiYWNrOjpjcmVhdGUoW3dlYlBhZ2VQcm94eV0gKENhbGxiYWNrQmFzZTo6RXJyb3Ig
ZXJyb3IpIHsKLSAgICAgICAgd2ViUGFnZVByb3h5LT5yZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNu
YXBzaG90KCk7CisgICAgdWludDY0X3QgcGFnZUlEID0gbV93ZWJQYWdlUHJveHkucGFnZUlEKCk7
CisgICAgbV93ZWJQYWdlUHJveHkuZm9yY2VSZXBhaW50KFZvaWRDYWxsYmFjazo6Y3JlYXRlKFt0
aGlzLCBwYWdlSURdIChDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgICAgIGlmIChh
dXRvIGdlc3R1cmVDb250cm9sbGVyID0gZ2VzdHVyZUNvbnRyb2xsZXJGb3JQYWdlKHBhZ2VJRCkp
CisgICAgICAgICAgICBnZXN0dXJlQ29udHJvbGxlci0+cmVtb3ZlU3dpcGVTbmFwc2hvdCgpOwog
ICAgIH0pKTsKIH0KIAogdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJlbW92ZVN3aXBlU25h
cHNob3QoKQogewotICAgIG1fc3dpcGVXYWl0aW5nRm9yUmVwYWludCA9IGZhbHNlOworICAgIG1f
c25hcHNob3RSZW1vdmFsVHJhY2tlci5yZXNldCgpOwogCi0gICAgbV9zd2lwZVdhdGNoZG9nVGlt
ZXIuc3RvcCgpOwotICAgIG1fc3dpcGVXYXRjaGRvZ0FmdGVyRmlyc3RWaXN1YWxseU5vbkVtcHR5
TGF5b3V0VGltZXIuc3RvcCgpOworICAgIG1faGFzT3V0c3RhbmRpbmdSZXBhaW50UmVxdWVzdCA9
IGZhbHNlOwogCiAgICAgaWYgKG1fYWN0aXZlR2VzdHVyZVR5cGUgIT0gVmlld0dlc3R1cmVUeXBl
OjpTd2lwZSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTIxLDQgKzg0MSw0IEBAIGRvdWJsZSBWaWV3
R2VzdHVyZUNvbnRyb2xsZXI6Om1hZ25pZmljYXRpb24oKSBjb25zdAogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIAotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDFkNDI5NWZmMjQ4OTU2NjMzNjY2OTg5NjllMDQxOTlhN2FiNzY1ODQuLjA3MWU4
ZGU4MWZmYTk5YzYwMTFjODc5Njk4ODUyZmZhNmVmNGJmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY2MSw2ICs2NjEsNyBA
QAogCQkyREFDRTY0RTE4QURCRkYwMDBFNENBNzYgLyogX1dLVGh1bWJuYWlsVmlld0ludGVybmFs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREFDRTY0
RDE4QURCRkYwMDBFNENBNzYgLyogX1dLVGh1bWJuYWlsVmlld0ludGVybmFsLmggKi87IH07CiAJ
CTJEQUYwNkQ2MThCRDFBNDcwMDgxQ0VCMSAvKiBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREFGMDZE
NDE4QkQxQTQ3MDA4MUNFQjEgLyogU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5oICovOyB9
OwogCQkyREFGMDZENzE4QkQxQTQ3MDA4MUNFQjEgLyogU21hcnRNYWduaWZpY2F0aW9uQ29udHJv
bGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJE
QUYwNkQ1MThCRDFBNDcwMDgxQ0VCMSAvKiBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyLm1t
ICovOyB9OworCQkyREFGNEZGQjFCNjM2MTgxMDA2MDEzRDYgLyogVmlld0dlc3R1cmVDb250cm9s
bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJE
QUY0RkZBMUI2MzYxODEwMDYwMTNENiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuY3BwICovOyB9
OwogCQkyREI5QzRBQzFCMzI1MUJEMDA3MEYyN0YgLyogU2FmYXJpU2VydmljZXNTUEkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQjlDNEFCMUIzMjUx
QkQwMDcwRjI3RiAvKiBTYWZhcmlTZXJ2aWNlc1NQSS5oICovOyB9OwogCQkyREM2RDlDMzE4QzQ0
QTYxMDA0M0JBRDQgLyogV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQzZEOUMxMThDNDRBNjEw
MDQzQkFENCAvKiBXS1dlYlZpZXdDb250ZW50UHJvdmlkZXJSZWdpc3RyeS5oICovOyB9OwogCQky
REM2RDlDNDE4QzQ0QTYxMDA0M0JBRDQgLyogV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0
cnkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREM2
RDlDMjE4QzQ0QTYxMDA0M0JBRDQgLyogV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnku
bW0gKi87IH07CkBAIC0yODA2LDYgKzI4MDcsNyBAQAogCQkyREFGMDZENDE4QkQxQTQ3MDA4MUNF
QjEgLyogU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyLmg7IHBhdGggPSBpb3Mv
U21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyREFGMDZENTE4QkQxQTQ3MDA4MUNFQjEgLyogU21hcnRNYWduaWZpY2F0aW9uQ29udHJv
bGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFNtYXJ0TWFn
bmlmaWNhdGlvbkNvbnRyb2xsZXIubW07IHBhdGggPSBpb3MvU21hcnRNYWduaWZpY2F0aW9uQ29u
dHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRBRjA2RDgxOEJEMjNC
QTAwODFDRUIxIC8qIFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIubWVzc2FnZXMuaW4gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1l
ID0gU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5tZXNzYWdlcy5pbjsgcGF0aCA9IGlvcy9T
bWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkyREFGNEZGQTFCNjM2MTgxMDA2MDEzRDYgLyogVmlld0dlc3R1cmVDb250
cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpZXdHZXN0
dXJlQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQjlDNEFC
MUIzMjUxQkQwMDcwRjI3RiAvKiBTYWZhcmlTZXJ2aWNlc1NQSS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTYWZhcmlTZXJ2aWNlc1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyREM2RDlDMTE4QzQ0QTYxMDA0M0JBRDQgLyogV0tXZWJWaWV3Q29udGVudFBy
b3ZpZGVyUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJW
aWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkRDNkQ5QzIxOEM0NEE2MTAwNDNCQUQ0IC8qIFdLV2ViVmlld0NvbnRlbnRQcm92aWRlclJl
Z2lzdHJ5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJW
aWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC02MTA3LDYgKzYxMDksNyBAQAogCQkJCTRBNDEwRjNBMTlBRjdCMDQwMDJFQkFCNSAvKiBV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oICovLAogCQkJCTRBNDEwRjNC
MTlBRjdCMDQwMDJFQkFCNSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5LmNwcCAq
LywKIAkJCQk0QTQxMEYzQzE5QUY3QjA0MDAyRUJBQjUgLyogVXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3RQcm94eS5oICovLAorCQkJCTJEQUY0RkZBMUI2MzYxODEwMDYwMTNENiAvKiBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXIuY3BwICovLAogCQkJCTFBMEYyOUUxMTIwQjQ0NDIwMDUzRDFCOSAvKiBW
aXNpdGVkTGlua1Byb3ZpZGVyLmNwcCAqLywKIAkJCQkxQTBGMjlFMjEyMEI0NDQyMDA1M0QxQjkg
LyogVmlzaXRlZExpbmtQcm92aWRlci5oICovLAogCQkJCTFBNjAyMjQ5MThDMTZCMDgwMEMzRThD
OSAvKiBWaXNpdGVkTGlua1Byb3ZpZGVyLm1lc3NhZ2VzLmluICovLApAQCAtOTQ0Miw2ICs5NDQ1
LDcgQEAKIAkJCQkxQTY0MjMwODEyREQwOUVCMDBDQUFFMkMgLyogRHJhd2luZ0FyZWFQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1REE2RUQwQjE0OTA2MDY5MDBC
NDFEMTIgLyogRHluYW1pY0xpbmtlckVudmlyb25tZW50RXh0cmFjdG9yLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOENGRUNFOTQxNDkwRjE0MDAwMkFBQTMyIC8qIEVkaXRvclN0YXRlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTJEQUY0RkZCMUI2MzYxODEwMDYwMTNENiAvKiBWaWV3R2VzdHVyZUNv
bnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFCMTVBODQxMzg0M0EzOTAwMzIxQUQ4
IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBN0M2Q0RB
MTM3ODk1MDgwMEI5QzA0RCAvKiBFbnZpcm9ubWVudFZhcmlhYmxlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQUE1NzVGQTE0OTZCNTI2MDBBNEVFMDYgLyogRXZlbnREaXNwYXRjaGVyLmNwcCBp
biBTb3VyY2VzICovLAo=
</data>
<flag name="review"
          id="284295"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>