<?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>143749</bug_id>
          
          <creation_ts>2015-04-14 21:08:53 -0700</creation_ts>
          <short_desc>Force mouse events should go through normal mouse event handling code paths</short_desc>
          <delta_ts>2015-04-17 12:57:36 -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>WebKit2</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>
          <dependson>143881</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eoconnor</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>jonlee</cc>
    
    <cc>kangil.han</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1085402</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-04-14 21:08:53 -0700</bug_when>
    <thetext>Force mouse events should go through normal mouse event handling code paths, and they should definitely not use the cached actionMenuHitTestResult for all of the events.

rdar://problem/20472895</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085405</commentid>
    <comment_count>1</comment_count>
      <attachid>250777</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-04-14 21:23:14 -0700</bug_when>
    <thetext>Created attachment 250777
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085406</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-14 21:24:59 -0700</bug_when>
    <thetext>Attachment 250777 did not pass style-queue:


ERROR: Source/WebKit2/Shared/mac/WebEventFactory.mm:163:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit2/Shared/mac/WebEventFactory.mm:188:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebCore/replay/UserInputBridge.h:81:  The parameter name &quot;source&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/replay/UserInputBridge.h:82:  The parameter name &quot;source&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/replay/UserInputBridge.h:83:  The parameter name &quot;source&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 5 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085494</commentid>
    <comment_count>3</comment_count>
      <attachid>250777</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-15 09:13:34 -0700</bug_when>
    <thetext>Comment on attachment 250777
Patch

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

I would love to see some testing added in this page. I worry that if we don&apos;t add testing now, we&apos;ll never add it.

&gt; Source/WebCore/dom/Element.cpp:257
&gt; +    if (platformEvent.type() == PlatformEvent::MouseForceChanged &amp;&amp; !document().hasListenerType(Document::FORCECHANGED_LISTENER))
&gt; +        return false;
&gt; +    if (platformEvent.type() == PlatformEvent::MouseForceDown &amp;&amp; !document().hasListenerType(Document::FORCEDOWN_LISTENER))
&gt; +        return false;
&gt; +    if (platformEvent.type() == PlatformEvent::MouseForceUp &amp;&amp; !document().hasListenerType(Document::FORCEUP_LISTENER))
&gt; +        return false;

A little helper that maps Document::*_LISTENER to PlatformEvent::Mouse* types would make this cleaner.

&gt; Source/WebCore/page/EventHandler.cpp:2116
&gt; +    if (m_frameSetBeingResized)
&gt; +        return !dispatchMouseEvent(eventNames().webkitmouseforcechangedEvent, m_frameSetBeingResized.get(), false, 0, event, false);

Weird. What&apos;s this about?

&gt; Source/WebCore/page/EventHandler.cpp:2135
&gt; +    if (m_frameSetBeingResized) {
&gt; +        dispatchMouseEvent(eventNames().webkitmouseforcechangedEvent, m_frameSetBeingResized.get(), false, 0, event, false);
&gt; +        return !dispatchMouseEvent(eventNames().webkitmouseforcedownEvent, m_frameSetBeingResized.get(), false, 0, event, false);
&gt; +    }

Same.

&gt; Source/WebCore/page/EventHandler.cpp:2164
&gt; +bool EventHandler::handleMouseForceUpEvent(const PlatformMouseEvent&amp; event)
&gt; +{
&gt; +    RefPtr&lt;FrameView&gt; protector(m_frame.view());
&gt; +
&gt; +    setLastKnownMousePosition(event);
&gt; +
&gt; +    if (m_frameSetBeingResized) {
&gt; +        dispatchMouseEvent(eventNames().webkitmouseforcechangedEvent, m_frameSetBeingResized.get(), false, 0, event, false);
&gt; +        return !dispatchMouseEvent(eventNames().webkitmouseforceupEvent, m_frameSetBeingResized.get(), false, 0, event, false);
&gt; +    }
&gt; +
&gt; +    HitTestRequest::HitTestRequestType hitType = HitTestRequest::DisallowShadowContent | HitTestRequest::Active;
&gt; +
&gt; +    HitTestRequest request(hitType);
&gt; +    MouseEventWithHitTestResults mouseEvent = prepareMouseEvent(request, event);
&gt; +
&gt; +    dispatchMouseEvent(eventNames().webkitmouseforcechangedEvent, mouseEvent.targetNode(), false, 0, event, false);
&gt; +    return !dispatchMouseEvent(eventNames().webkitmouseforceupEvent, mouseEvent.targetNode(), false, 0, event, false);
&gt; +}

Lots of very similar-looking code here. Can it be shared?

&gt; Source/WebCore/page/EventHandler.cpp:2178
&gt; +bool EventHandler::handleMouseForceChangedEvent(const PlatformMouseEvent&amp; )
&gt; +{
&gt; +}
&gt; +
&gt; +bool EventHandler::handleMouseForceDownEvent(const PlatformMouseEvent&amp;)
&gt; +{
&gt; +}
&gt; +
&gt; +bool EventHandler::handleMouseForceUpEvent(const PlatformMouseEvent&amp;)
&gt; +{
&gt; +}

These need to return false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085495</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-15 09:14:04 -0700</bug_when>
    <thetext>&gt; I would love to see some testing added in this page.
^patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085578</commentid>
    <comment_count>5</comment_count>
      <attachid>250777</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-15 10:38:31 -0700</bug_when>
    <thetext>Comment on attachment 250777
Patch

EFL build error:

Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:469:12: error: enumeration value &apos;MouseForceDown&apos; not handled in switch [-Werror=switch]
Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:469:12: error: enumeration value &apos;MouseForceUp&apos; not handled in switch [-Werror=switch]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085619</commentid>
    <comment_count>6</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-04-15 12:05:20 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 250777 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250777&amp;action=review
&gt; 
&gt; I would love to see some testing added in this page. I worry that if we
&gt; don&apos;t add testing now, we&apos;ll never add it.
&gt; 

We will definitely get to this! I&apos;ll start to investigate.

&gt; &gt; Source/WebCore/dom/Element.cpp:257
&gt; &gt; +    if (platformEvent.type() == PlatformEvent::MouseForceChanged &amp;&amp; !document().hasListenerType(Document::FORCECHANGED_LISTENER))
&gt; &gt; +        return false;
&gt; &gt; +    if (platformEvent.type() == PlatformEvent::MouseForceDown &amp;&amp; !document().hasListenerType(Document::FORCEDOWN_LISTENER))
&gt; &gt; +        return false;
&gt; &gt; +    if (platformEvent.type() == PlatformEvent::MouseForceUp &amp;&amp; !document().hasListenerType(Document::FORCEUP_LISTENER))
&gt; &gt; +        return false;
&gt; 
&gt; A little helper that maps Document::*_LISTENER to PlatformEvent::Mouse*
&gt; types would make this cleaner.
&gt; 

I&apos;m not sure I know what you mean. Are you just suggesting moving this to a helper function? A helper function that specifically maps LISTENER to PlatformEvent does not sound helpful to me, but lifting these three ifs into their own helper would be fine. I feel like I&apos;m missing something here.

&gt; &gt; Source/WebCore/page/EventHandler.cpp:2116
&gt; &gt; +    if (m_frameSetBeingResized)
&gt; &gt; +        return !dispatchMouseEvent(eventNames().webkitmouseforcechangedEvent, m_frameSetBeingResized.get(), false, 0, event, false);
&gt; 
&gt; Weird. What&apos;s this about?
&gt;
&gt; &gt; Source/WebCore/page/EventHandler.cpp:2135
&gt; &gt; +    if (m_frameSetBeingResized) {
&gt; &gt; +        dispatchMouseEvent(eventNames().webkitmouseforcechangedEvent, m_frameSetBeingResized.get(), false, 0, event, false);
&gt; &gt; +        return !dispatchMouseEvent(eventNames().webkitmouseforcedownEvent, m_frameSetBeingResized.get(), false, 0, event, false);
&gt; &gt; +    }
&gt; 
&gt; Same.
&gt; 

There are lines one code like this when handling mousemoved and mouseup, which is why I added the code here. Turns out that whatever this concept is of framesets being resized is super ancient, and pre-dates EventHandler even being its own file. I could not find a sufficient explanation for what it does. Given that, and given that it is not consulted for other mouse events, I decided to remove these lines of code from the new force event handling functions.

&gt; &gt; Source/WebCore/page/EventHandler.cpp:2164
&gt; &gt; +bool EventHandler::handleMouseForceUpEvent(const PlatformMouseEvent&amp; event)
&gt; &gt; +{
&gt; &gt; +    RefPtr&lt;FrameView&gt; protector(m_frame.view());
&gt; &gt; +
&gt; &gt; +    setLastKnownMousePosition(event);
&gt; &gt; +
&gt; &gt; +    if (m_frameSetBeingResized) {
&gt; &gt; +        dispatchMouseEvent(eventNames().webkitmouseforcechangedEvent, m_frameSetBeingResized.get(), false, 0, event, false);
&gt; &gt; +        return !dispatchMouseEvent(eventNames().webkitmouseforceupEvent, m_frameSetBeingResized.get(), false, 0, event, false);
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    HitTestRequest::HitTestRequestType hitType = HitTestRequest::DisallowShadowContent | HitTestRequest::Active;
&gt; &gt; +
&gt; &gt; +    HitTestRequest request(hitType);
&gt; &gt; +    MouseEventWithHitTestResults mouseEvent = prepareMouseEvent(request, event);
&gt; &gt; +
&gt; &gt; +    dispatchMouseEvent(eventNames().webkitmouseforcechangedEvent, mouseEvent.targetNode(), false, 0, event, false);
&gt; &gt; +    return !dispatchMouseEvent(eventNames().webkitmouseforceupEvent, mouseEvent.targetNode(), false, 0, event, false);
&gt; &gt; +}
&gt; 
&gt; Lots of very similar-looking code here. Can it be shared?
&gt; 

Yes! Consolidated.

&gt; &gt; Source/WebCore/page/EventHandler.cpp:2178
&gt; &gt; +bool EventHandler::handleMouseForceChangedEvent(const PlatformMouseEvent&amp; )
&gt; &gt; +{
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +bool EventHandler::handleMouseForceDownEvent(const PlatformMouseEvent&amp;)
&gt; &gt; +{
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +bool EventHandler::handleMouseForceUpEvent(const PlatformMouseEvent&amp;)
&gt; &gt; +{
&gt; &gt; +}
&gt; 
&gt; These need to return false.

Good point!

New patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085624</commentid>
    <comment_count>7</comment_count>
      <attachid>250832</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-04-15 12:15:22 -0700</bug_when>
    <thetext>Created attachment 250832
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085661</commentid>
    <comment_count>8</comment_count>
      <attachid>250849</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-04-15 13:39:07 -0700</bug_when>
    <thetext>Created attachment 250849
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085665</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-15 13:42:12 -0700</bug_when>
    <thetext>Attachment 250849 did not pass style-queue:


ERROR: Source/WebCore/dom/Document.cpp:3971:  Missing space before ( in switch(  [whitespace/parens] [5]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085847</commentid>
    <comment_count>10</comment_count>
      <attachid>250904</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-04-15 23:25:13 -0700</bug_when>
    <thetext>Created attachment 250904
Patch with tests

The new tests need to be skipped on most platforms. I&apos;ll deal with that tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085848</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-15 23:26:55 -0700</bug_when>
    <thetext>Attachment 250904 did not pass style-queue:


ERROR: Tools/WebKitTestRunner/mac/EventSenderProxy.mm:65:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Tools/WebKitTestRunner/mac/EventSenderProxy.mm:282:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Tools/WebKitTestRunner/mac/EventSenderProxy.mm:289:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Tools/WebKitTestRunner/mac/EventSenderProxy.mm:315:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Tools/WebKitTestRunner/mac/EventSenderProxy.mm:322:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Tools/WebKitTestRunner/mac/EventSenderProxy.mm:348:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/dom/Document.cpp:3971:  Missing space before ( in switch(  [whitespace/parens] [5]
Total errors found: 7 in 34 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086011</commentid>
    <comment_count>12</comment_count>
      <attachid>250904</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-16 12:20:19 -0700</bug_when>
    <thetext>Comment on attachment 250904
Patch with tests

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

&gt; Tools/WebKitTestRunner/mac/EventSenderProxy.mm:294
&gt; +    EventSenderPressureEvent *firstEvent = [[EventSenderPressureEvent alloc] initAtLocation:NSMakePoint(m_position.x, m_position.y)
&gt; +                                        globalLocation:([m_testController-&gt;mainWebView()-&gt;platformWindow() convertRectToScreen:NSMakeRect(m_position.x, m_position.y, 1, 1)].origin)
&gt; +                                        stage:1
&gt; +                                        pressure:0.9
&gt; +                                        phase:NSEventPhaseChanged
&gt; +                                        time:absoluteTimeForEventTime(currentEventTime())
&gt; +                                        eventNumber:++eventNumber];
&gt; +    EventSenderPressureEvent *secondEvent = [[EventSenderPressureEvent alloc] initAtLocation:NSMakePoint(m_position.x, m_position.y)
&gt; +                                        globalLocation:([m_testController-&gt;mainWebView()-&gt;platformWindow() convertRectToScreen:NSMakeRect(m_position.x, m_position.y, 1, 1)].origin)
&gt; +                                        stage:2
&gt; +                                        pressure:0.1
&gt; +                                        phase:NSEventPhaseChanged
&gt; +                                        time:absoluteTimeForEventTime(currentEventTime())
&gt; +                                        eventNumber:++eventNumber];

Is this file using ARC? If not, these are leaked.

&gt; Tools/WebKitTestRunner/mac/EventSenderProxy.mm:327
&gt; +    EventSenderPressureEvent *firstEvent = [[EventSenderPressureEvent alloc] initAtLocation:NSMakePoint(m_position.x, m_position.y)
&gt; +                                        globalLocation:([m_testController-&gt;mainWebView()-&gt;platformWindow() convertRectToScreen:NSMakeRect(m_position.x, m_position.y, 1, 1)].origin)
&gt; +                                        stage:2
&gt; +                                        pressure:0.1
&gt; +                                        phase:NSEventPhaseChanged
&gt; +                                        time:absoluteTimeForEventTime(currentEventTime())
&gt; +                                        eventNumber:++eventNumber];
&gt; +    EventSenderPressureEvent *secondEvent = [[EventSenderPressureEvent alloc] initAtLocation:NSMakePoint(m_position.x, m_position.y)
&gt; +                                        globalLocation:([m_testController-&gt;mainWebView()-&gt;platformWindow() convertRectToScreen:NSMakeRect(m_position.x, m_position.y, 1, 1)].origin)
&gt; +                                        stage:1
&gt; +                                        pressure:0.9
&gt; +                                        phase:NSEventPhaseChanged
&gt; +                                        time:absoluteTimeForEventTime(currentEventTime())
&gt; +                                        eventNumber:++eventNumber];

Ditto.

&gt; Tools/WebKitTestRunner/mac/EventSenderProxy.mm:353
&gt; +    EventSenderPressureEvent *event = [[EventSenderPressureEvent alloc] initAtLocation:NSMakePoint(m_position.x, m_position.y)
&gt; +                                        globalLocation:([m_testController-&gt;mainWebView()-&gt;platformWindow() convertRectToScreen:NSMakeRect(m_position.x, m_position.y, 1, 1)].origin)
&gt; +                                        stage:force &lt; 1 ? 1 : 2
&gt; +                                        pressure:force
&gt; +                                        phase:NSEventPhaseChanged
&gt; +                                        time:absoluteTimeForEventTime(currentEventTime())
&gt; +                                        eventNumber:++eventNumber];

Ditto.

&gt; LayoutTests/ChangeLog:10
&gt; +        Just a few new tests. More to come.

Would be nice to get testing of at least:
* bubbling
* preventDefault</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086017</commentid>
    <comment_count>13</comment_count>
      <attachid>250904</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-04-16 12:34:01 -0700</bug_when>
    <thetext>Comment on attachment 250904
Patch with tests

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

&gt; Source/WebCore/page/EventHandler.cpp:2124
&gt; +    bool swallowedEvent = !dispatchMouseEvent(eventNames().webkitmouseforcechangedEvent, mouseEvent.targetNode(), false, 0, event, false);
&gt; +    if (event.type() == PlatformEvent::MouseForceDown)
&gt; +        swallowedEvent = !dispatchMouseEvent(eventNames().webkitmouseforcedownEvent, mouseEvent.targetNode(), false, 0, event, false);
&gt; +    if (event.type() == PlatformEvent::MouseForceUp)
&gt; +        swallowedEvent = !dispatchMouseEvent(eventNames().webkitmouseforceupEvent, mouseEvent.targetNode(), false, 0, event, false);

Does this mean we can only swallow the event from forcechanged if down/up also swallow?

Technically I guess you could return from within both conditionals.

&gt; Source/WebCore/replay/UserInputBridge.cpp:163
&gt; +bool UserInputBridge::handleMouseForceChangedEvent(const PlatformMouseEvent&amp; mouseEvent, InputSource)
&gt; +{
&gt; +    return m_page.mainFrame().eventHandler().handleMouseForceEvent(mouseEvent);
&gt; +}
&gt; +
&gt; +bool UserInputBridge::handleMouseForceDownEvent(const PlatformMouseEvent&amp; mouseEvent, InputSource)
&gt; +{
&gt; +    return m_page.mainFrame().eventHandler().handleMouseForceEvent(mouseEvent);
&gt; +}
&gt; +
&gt; +bool UserInputBridge::handleMouseForceUpEvent(const PlatformMouseEvent&amp; mouseEvent, InputSource)
&gt; +{
&gt; +    return m_page.mainFrame().eventHandler().handleMouseForceEvent(mouseEvent);
&gt; +}

I haven&apos;t looked at how these are called, but is there any reason why they can&apos;t all be done in one handleMouseForceEvent? Do we need one for each type of input event name?

&gt; Source/WebKit2/Shared/mac/WebEventFactory.mm:384
&gt; +        if (lastPressureEvent.stage == 1 &amp;&amp; event.stage == 2)
&gt; +            type = WebEvent::MouseForceDown;
&gt; +        else if (lastPressureEvent.stage == 2 &amp;&amp; event.stage == 1)
&gt; +            type = WebEvent::MouseForceUp;
&gt; +        else

This is probably silly, but I wonder if we should have enums for the stage values so they read a bit better. Or are they actually just a count?

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1912
&gt; +        case PlatformEvent::MouseForceChanged:
&gt; +            return page-&gt;corePage()-&gt;userInputBridge().handleMouseForceChangedEvent(platformMouseEvent);
&gt; +        case PlatformEvent::MouseForceDown:
&gt; +            return page-&gt;corePage()-&gt;userInputBridge().handleMouseForceDownEvent(platformMouseEvent);
&gt; +        case PlatformEvent::MouseForceUp:
&gt; +            return page-&gt;corePage()-&gt;userInputBridge().handleMouseForceUpEvent(platformMouseEvent);

Ooooh. Here&apos;s my answer to the other bit. So, considering these all do the same thing on the other end, do you think it makes sense to have a single handle function?

&gt; Tools/WebKitTestRunner/mac/EventSenderProxy.mm:73
&gt; +    self = [super init];
&gt; +
&gt; +    if (self) {
&gt; +        _eventSender_location = location;
&gt; +        _eventSender_locationInWindow = globalLocation; //????????
&gt; +        _eventSender_stage = stage;
&gt; +        _eventSender_pressure = pressure;
&gt; +        _eventSender_phase = phase;
&gt; +        _eventSender_timestamp = time;
&gt; +        _eventSender_eventNumber = eventNumber;
&gt; +    }
&gt; +
&gt; +    return self;

I know this isn&apos;t the general ObjC convention, but I was looking at Safari code yesterday that did this the other way around:

if (!self)
  return nil;

// other setup stuff

I guess we don&apos;t have coding style for that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086057</commentid>
    <comment_count>14</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-04-16 13:46:09 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Comment on attachment 250904 [details]
&gt; Patch with tests
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250904&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/EventHandler.cpp:2124
&gt; &gt; +    bool swallowedEvent = !dispatchMouseEvent(eventNames().webkitmouseforcechangedEvent, mouseEvent.targetNode(), false, 0, event, false);
&gt; &gt; +    if (event.type() == PlatformEvent::MouseForceDown)
&gt; &gt; +        swallowedEvent = !dispatchMouseEvent(eventNames().webkitmouseforcedownEvent, mouseEvent.targetNode(), false, 0, event, false);
&gt; &gt; +    if (event.type() == PlatformEvent::MouseForceUp)
&gt; &gt; +        swallowedEvent = !dispatchMouseEvent(eventNames().webkitmouseforceupEvent, mouseEvent.targetNode(), false, 0, event, false);
&gt; 
&gt; Does this mean we can only swallow the event from forcechanged if down/up
&gt; also swallow?
&gt; 
&gt; Technically I guess you could return from within both conditionals.
&gt; 

I&apos;m still not 100% on the right thing to do here, but I changed it to |=, which I think is right.

&gt; &gt; Source/WebCore/replay/UserInputBridge.cpp:163
&gt; &gt; +bool UserInputBridge::handleMouseForceChangedEvent(const PlatformMouseEvent&amp; mouseEvent, InputSource)
&gt; &gt; +{
&gt; &gt; +    return m_page.mainFrame().eventHandler().handleMouseForceEvent(mouseEvent);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +bool UserInputBridge::handleMouseForceDownEvent(const PlatformMouseEvent&amp; mouseEvent, InputSource)
&gt; &gt; +{
&gt; &gt; +    return m_page.mainFrame().eventHandler().handleMouseForceEvent(mouseEvent);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +bool UserInputBridge::handleMouseForceUpEvent(const PlatformMouseEvent&amp; mouseEvent, InputSource)
&gt; &gt; +{
&gt; &gt; +    return m_page.mainFrame().eventHandler().handleMouseForceEvent(mouseEvent);
&gt; &gt; +}
&gt; 
&gt; I haven&apos;t looked at how these are called, but is there any reason why they
&gt; can&apos;t all be done in one handleMouseForceEvent? Do we need one for each type
&gt; of input event name?
&gt; 

Fixed this!

&gt; &gt; Source/WebKit2/Shared/mac/WebEventFactory.mm:384
&gt; &gt; +        if (lastPressureEvent.stage == 1 &amp;&amp; event.stage == 2)
&gt; &gt; +            type = WebEvent::MouseForceDown;
&gt; &gt; +        else if (lastPressureEvent.stage == 2 &amp;&amp; event.stage == 1)
&gt; &gt; +            type = WebEvent::MouseForceUp;
&gt; &gt; +        else
&gt; 
&gt; This is probably silly, but I wonder if we should have enums for the stage
&gt; values so they read a bit better. Or are they actually just a count?
&gt; 

I don&apos;t think it&apos;s silly at all because it is very confusing! But since the use of stage is limited to this one function at this time, I don&apos;t think it&apos;s super worthwhile. If we end up needing to use the stage in more places or propagate it down to WebCore, we should absolutely use an enum.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1912
&gt; &gt; +        case PlatformEvent::MouseForceChanged:
&gt; &gt; +            return page-&gt;corePage()-&gt;userInputBridge().handleMouseForceChangedEvent(platformMouseEvent);
&gt; &gt; +        case PlatformEvent::MouseForceDown:
&gt; &gt; +            return page-&gt;corePage()-&gt;userInputBridge().handleMouseForceDownEvent(platformMouseEvent);
&gt; &gt; +        case PlatformEvent::MouseForceUp:
&gt; &gt; +            return page-&gt;corePage()-&gt;userInputBridge().handleMouseForceUpEvent(platformMouseEvent);
&gt; 
&gt; Ooooh. Here&apos;s my answer to the other bit. So, considering these all do the
&gt; same thing on the other end, do you think it makes sense to have a single
&gt; handle function?
&gt; 

Yes, good call. Done.

&gt; &gt; Tools/WebKitTestRunner/mac/EventSenderProxy.mm:73
&gt; &gt; +    self = [super init];
&gt; &gt; +
&gt; &gt; +    if (self) {
&gt; &gt; +        _eventSender_location = location;
&gt; &gt; +        _eventSender_locationInWindow = globalLocation; //????????
&gt; &gt; +        _eventSender_stage = stage;
&gt; &gt; +        _eventSender_pressure = pressure;
&gt; &gt; +        _eventSender_phase = phase;
&gt; &gt; +        _eventSender_timestamp = time;
&gt; &gt; +        _eventSender_eventNumber = eventNumber;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    return self;
&gt; 
&gt; I know this isn&apos;t the general ObjC convention, but I was looking at Safari
&gt; code yesterday that did this the other way around:
&gt; 
&gt; if (!self)
&gt;   return nil;
&gt; 
&gt; // other setup stuff
&gt; 
&gt; I guess we don&apos;t have coding style for that?


Sounds nicer to me! I switched to this format.

I also added releases to the NSEvents for smfr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086058</commentid>
    <comment_count>15</comment_count>
      <attachid>250949</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-04-16 13:46:37 -0700</bug_when>
    <thetext>Created attachment 250949
Patch for bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086092</commentid>
    <comment_count>16</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-04-16 15:20:19 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/182912

Thanks Dean!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086342</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-17 10:30:18 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 143881</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086344</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-04-17 10:31:34 -0700</bug_when>
    <thetext>Rolling out for now, details in e-mail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086395</commentid>
    <comment_count>19</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-04-17 12:57:36 -0700</bug_when>
    <thetext>Thanks Alexey. Giving this another go with http://trac.webkit.org/changeset/182963</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250777</attachid>
            <date>2015-04-14 21:23:14 -0700</date>
            <delta_ts>2015-04-15 12:15:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>30856</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE1LTA0LTE0ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBGb3JjZSBtb3VzZSBldmVudHMgc2hv
dWxkIGdvIHRocm91Z2ggbm9ybWFsIG1vdXNlIGV2ZW50IGhhbmRsaW5nIGNvZGUgcGF0aHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Mzc0OQorICAg
ICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIwNDcyODk1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBtb3ZlcyBhbGwgb2YgdGhlIGNvZGUgdG8gZGlzcGF0Y2ggbW91c2Vmb3JjZWRvd24sIG1v
dXNlZm9yY2V1cCwgYW5kIAorICAgICAgICBtb3VzZWZvcmNlY2hhbmdlZCBpbnRvIG5vcm1hbCBt
b3VzZSBldmVudCBkaXNwYXRjaGluZyBjb2RlLiBUaGlzIHBhdGNoIGxlYXZlcyAKKyAgICAgICAg
YmVoaW5kIHRoZSBjYW5jZWwgYW5kIGNsaWNrIGV2ZW50cyBiZWNhdXNlIHdlIHBsYW4gdG8gcmVt
b3ZlIHRob3NlLCBhbmQgaXQgYWxzbyAKKyAgICAgICAgbGVhdmVzIG1vdXNlZm9yY2V3aWxsYmVn
aW4gYmVjYXVzZSB0aGF0IGlzIG5lY2Vzc2FyaWx5IGEgdmVyeSBkaWZmZXJlbnQgZXZlbnQgbW9y
ZSAKKyAgICAgICAgdGllZCB0byB0aGUgTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXpl
ciB0aGFuIHRoZXNlIG90aGVyIGV2ZW50cyB3aGljaCBhcmUgCisgICAgICAgIHRpZWQgdG8gTlNS
ZXNwb25kZXLigJlzIHByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50LgorCisgICAgICAgIE1vdmUgdGhl
IGNvZGUgdG8gZW5zdXJlIHRoZSBmb3JjZSBldmVudHMgaGF2ZSBsaXN0ZW5lcnMgaW4gb3JkZXIg
dG8gZmlyZSB0byAKKyAgICAgICAgZGlzcGF0Y2hNb3VzZUV2ZW50LCBhbmQgZGVsZXRlIHRoZSBv
bGQgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNoTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3JjZURvd24pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZGlzcGF0Y2hNb3VzZUZvcmNlVXApOiBEZWxldGVkLgor
ICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisKKyAgICAgICAgUGVyZm9ybSBhIGhpdCB0ZXN0IGFu
ZCBwaXBlIHRoZSBldmVudHMgdGhyb3VnaCBkaXNwYXRjaE1vdXNlRXZlbnQoKS4gCisgICAgICAg
ICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpoYW5kbGVNb3VzZUZvcmNlQ2hhbmdlZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6aGFuZGxlTW91c2VGb3JjZURvd25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlRm9yY2VVcEV2ZW50KToKKyAgICAgICAgKiBwYWdlL0V2
ZW50SGFuZGxlci5oOgorCisgICAgICAgIE5ldyB0eXBlcyBmb3IgdGhlIG5ldyBldmVudHMuCisg
ICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1FdmVudC5oOgorCisgICAgICAgIEZvcndhcmQgdG8g
RXZlbnRIYW5kbGVyLiAKKyAgICAgICAgKiByZXBsYXkvVXNlcklucHV0QnJpZGdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlVzZXJJbnB1dEJyaWRnZTo6aGFuZGxlTW91c2VGb3JjZUNoYW5nZWRF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpVc2VySW5wdXRCcmlkZ2U6OmhhbmRsZU1vdXNlRm9y
Y2VEb3duRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlcklucHV0QnJpZGdlOjpoYW5kbGVN
b3VzZUZvcmNlVXBFdmVudCk6CisgICAgICAgICogcmVwbGF5L1VzZXJJbnB1dEJyaWRnZS5oOgor
CiAyMDE1LTA0LTE0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
UmVncmVzc2lvbihyMTgwMDIwKTogV2ViIEluc3BlY3RvciBjcmFzaGVzIG9uIHBhZ2VzIHRoYXQg
aGF2ZSBhIHN0eWxlc2hlZXQgd2l0aCBhbiBpbnZhbGlkIE1JTUUgdHlwZQpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAkocmV2aXNpb24gMTgyODA5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNiArMjQ5LDEzIEBAIGJvb2wgRWxlbWVu
dDo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IFAKICAgICBpZiAoaXNEaXNhYmxlZEZvcm1Db250
cm9sKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChwbGF0Zm9ybUV2ZW50LnR5
cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlQ2hhbmdlZCAmJiAhZG9jdW1lbnQoKS5o
YXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkZPUkNFQ0hBTkdFRF9MSVNURU5FUikpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAocGxhdGZvcm1FdmVudC50eXBlKCkgPT0gUGxhdGZvcm1F
dmVudDo6TW91c2VGb3JjZURvd24gJiYgIWRvY3VtZW50KCkuaGFzTGlzdGVuZXJUeXBlKERvY3Vt
ZW50OjpGT1JDRURPV05fTElTVEVORVIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KHBsYXRmb3JtRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VVcCAmJiAh
ZG9jdW1lbnQoKS5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkZPUkNFVVBfTElTVEVORVIpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBSZWZQdHI8TW91c2VFdmVudD4gbW91c2VFdmVu
dCA9IE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGRvY3VtZW50KCkuZGVmYXVsdFZpZXco
KSwgcGxhdGZvcm1FdmVudCwgZGV0YWlsLCByZWxhdGVkVGFyZ2V0KTsKIAogICAgIGlmIChtb3Vz
ZUV2ZW50LT50eXBlKCkuaXNFbXB0eSgpKQpAQCAtMjI1Myw1NCArMjI2MCw2IEBAIGJvb2wgRWxl
bWVudDo6ZGlzcGF0Y2hNb3VzZUZvcmNlV2lsbEJlZ2kKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgRWxlbWVudDo6ZGlzcGF0Y2hNb3VzZUZvcmNlQ2hhbmdlZChmbG9hdCBmb3JjZSkKLXsK
LSAgICBpZiAoIWRvY3VtZW50KCkuaGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpGT1JDRUNIQU5H
RURfTElTVEVORVIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1
bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtTW91c2VFdmVudChmcmFtZS0+ZXZlbnRIYW5kbGVy
KCkubGFzdEtub3duTW91c2VQb3NpdGlvbigpLCBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkubGFzdEtu
b3duTW91c2VHbG9iYWxQb3NpdGlvbigpLCBOb0J1dHRvbiwgUGxhdGZvcm1FdmVudDo6Tm9UeXBl
LCAxLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgV1RGOjpjdXJyZW50VGltZSgpLCBmb3Jj
ZSk7Ci0gICAgUmVmUHRyPE1vdXNlRXZlbnQ+IG1vdXNlRm9yY2VDaGFuZ2VkRXZlbnQgPSAgTW91
c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNlY2hhbmdlZEV2ZW50
LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIHBsYXRmb3JtTW91c2VFdmVudCwgMCwgbnVsbHB0
cik7Ci0KLSAgICBtb3VzZUZvcmNlQ2hhbmdlZEV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAg
ZGlzcGF0Y2hFdmVudChtb3VzZUZvcmNlQ2hhbmdlZEV2ZW50KTsKLX0KLQotdm9pZCBFbGVtZW50
OjpkaXNwYXRjaE1vdXNlRm9yY2VEb3duKCkKLXsKLSAgICBpZiAoIWRvY3VtZW50KCkuaGFzTGlz
dGVuZXJUeXBlKERvY3VtZW50OjpGT1JDRURPV05fTElTVEVORVIpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFt
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtTW91
c2VFdmVudChmcmFtZS0+ZXZlbnRIYW5kbGVyKCkubGFzdEtub3duTW91c2VQb3NpdGlvbigpLCBm
cmFtZS0+ZXZlbnRIYW5kbGVyKCkubGFzdEtub3duTW91c2VHbG9iYWxQb3NpdGlvbigpLCBOb0J1
dHRvbiwgUGxhdGZvcm1FdmVudDo6Tm9UeXBlLCAxLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz
ZSwgV1RGOjpjdXJyZW50VGltZSgpLCBGb3JjZUF0Rm9yY2VDbGljayk7Ci0gICAgUmVmUHRyPE1v
dXNlRXZlbnQ+IG1vdXNlRm9yY2VEb3duRXZlbnQgPSAgTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNlZG93bkV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3
KCksIHBsYXRmb3JtTW91c2VFdmVudCwgMCwgbnVsbHB0cik7Ci0KLSAgICBtb3VzZUZvcmNlRG93
bkV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgZGlzcGF0Y2hFdmVudChtb3VzZUZvcmNlRG93
bkV2ZW50KTsKLX0KLQotdm9pZCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VVcCgpCi17Ci0g
ICAgaWYgKCFkb2N1bWVudCgpLmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6Rk9SQ0VVUF9MSVNU
RU5FUikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCku
ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQbGF0Zm9y
bU1vdXNlRXZlbnQgcGxhdGZvcm1Nb3VzZUV2ZW50KGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0
S25vd25Nb3VzZVBvc2l0aW9uKCksIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3Vz
ZUdsb2JhbFBvc2l0aW9uKCksIE5vQnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpOb1R5cGUsIDEsIGZh
bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBXVEY6OmN1cnJlbnRUaW1lKCksIEZvcmNlQXRGb3Jj
ZUNsaWNrKTsKLSAgICBSZWZQdHI8TW91c2VFdmVudD4gbW91c2VGb3JjZVVwRXZlbnQgPSAgTW91
c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNldXBFdmVudCwgZG9j
dW1lbnQoKS5kZWZhdWx0VmlldygpLCBwbGF0Zm9ybU1vdXNlRXZlbnQsIDAsIG51bGxwdHIpOwot
Ci0gICAgbW91c2VGb3JjZVVwRXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBkaXNwYXRjaEV2
ZW50KG1vdXNlRm9yY2VVcEV2ZW50KTsKLX0KLQogdm9pZCBFbGVtZW50OjpkaXNwYXRjaE1vdXNl
Rm9yY2VDbGljaygpCiB7CiAgICAgaWYgKCFkb2N1bWVudCgpLmhhc0xpc3RlbmVyVHlwZShEb2N1
bWVudDo6Rk9SQ0VDTElDS19MSVNURU5FUikpCkBAIC0yMzQwLDE4ICsyMjk5LDYgQEAgYm9vbCBF
bGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VXaWxsQmVnaQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VDaGFuZ2VkKGZsb2F0KQotewotfQot
Ci12b2lkIEVsZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3JjZURvd24oKQotewotfQotCi12b2lkIEVs
ZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3JjZVVwKCkKLXsKLX0KLQogdm9pZCBFbGVtZW50OjpkaXNw
YXRjaE1vdXNlRm9yY2VDbGljaygpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJldmlz
aW9uIDE4MjgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2OSw5ICs0NjksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
Qmx1ckV2ZW50KFJlZlB0cjxFbGVtZW50PiYmIG5ld0ZvY3VzZWRFbGVtZW50KTsKIAogICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgZGlzcGF0Y2hNb3VzZUZvcmNlV2lsbEJlZ2luKCk7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaE1vdXNlRm9yY2VDaGFuZ2VkKGZsb2F0IGZvcmNlKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoTW91c2VGb3JjZURvd24oKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoTW91c2VGb3JjZVVwKCk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkaXNwYXRjaE1vdXNlRm9yY2VDbGljaygpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZGlzcGF0Y2hNb3VzZUZvcmNlQ2FuY2VsbGVkKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDE4MjgwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwNSw2ICsyMTA1LDc5
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmUKICAgICByZXR1cm4g
c3dhbGxvd01vdXNlVXBFdmVudCB8fCBzd2FsbG93Q2xpY2tFdmVudCB8fCBzd2FsbG93TW91c2VS
ZWxlYXNlRXZlbnQ7CiB9CiAKKyNpZiBFTkFCTEUoTU9VU0VfRk9SQ0VfRVZFTlRTKQorYm9vbCBF
dmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlRm9yY2VDaGFuZ2VkRXZlbnQoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBldmVudCkKK3sKKyAgICBSZWZQdHI8RnJhbWVWaWV3PiBwcm90ZWN0b3IobV9m
cmFtZS52aWV3KCkpOworCisgICAgc2V0TGFzdEtub3duTW91c2VQb3NpdGlvbihldmVudCk7CisK
KyAgICBpZiAobV9mcmFtZVNldEJlaW5nUmVzaXplZCkKKyAgICAgICAgcmV0dXJuICFkaXNwYXRj
aE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2VjaGFuZ2VkRXZlbnQsIG1f
ZnJhbWVTZXRCZWluZ1Jlc2l6ZWQuZ2V0KCksIGZhbHNlLCAwLCBldmVudCwgZmFsc2UpOworCisg
ICAgSGl0VGVzdFJlcXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBlID0gSGl0VGVzdFJl
cXVlc3Q6OkRpc2FsbG93U2hhZG93Q29udGVudCB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmU7CisK
KyAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KGhpdFR5cGUpOworICAgIE1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMgbW91c2VFdmVudCA9IHByZXBhcmVNb3VzZUV2ZW50KHJlcXVlc3QsIGV2
ZW50KTsKKworICAgIHJldHVybiAhZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS53ZWJr
aXRtb3VzZWZvcmNlY2hhbmdlZEV2ZW50LCBtb3VzZUV2ZW50LnRhcmdldE5vZGUoKSwgZmFsc2Us
IDAsIGV2ZW50LCBmYWxzZSk7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZUZv
cmNlRG93bkV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgUmVm
UHRyPEZyYW1lVmlldz4gcHJvdGVjdG9yKG1fZnJhbWUudmlldygpKTsKKworICAgIHNldExhc3RL
bm93bk1vdXNlUG9zaXRpb24oZXZlbnQpOworCisgICAgaWYgKG1fZnJhbWVTZXRCZWluZ1Jlc2l6
ZWQpIHsKKyAgICAgICAgZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS53ZWJraXRtb3Vz
ZWZvcmNlY2hhbmdlZEV2ZW50LCBtX2ZyYW1lU2V0QmVpbmdSZXNpemVkLmdldCgpLCBmYWxzZSwg
MCwgZXZlbnQsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuICFkaXNwYXRjaE1vdXNlRXZlbnQoZXZl
bnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2Vkb3duRXZlbnQsIG1fZnJhbWVTZXRCZWluZ1Jlc2l6
ZWQuZ2V0KCksIGZhbHNlLCAwLCBldmVudCwgZmFsc2UpOworICAgIH0KKworICAgIEhpdFRlc3RS
ZXF1ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpEaXNh
bGxvd1NoYWRvd0NvbnRlbnQgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOworCisgICAgSGl0VGVz
dFJlcXVlc3QgcmVxdWVzdChoaXRUeXBlKTsKKyAgICBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzIG1vdXNlRXZlbnQgPSBwcmVwYXJlTW91c2VFdmVudChyZXF1ZXN0LCBldmVudCk7CisKKyAg
ICBkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2VjaGFuZ2Vk
RXZlbnQsIG1vdXNlRXZlbnQudGFyZ2V0Tm9kZSgpLCBmYWxzZSwgMCwgZXZlbnQsIGZhbHNlKTsK
KyAgICByZXR1cm4gIWRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkud2Via2l0bW91c2Vm
b3JjZWRvd25FdmVudCwgbW91c2VFdmVudC50YXJnZXROb2RlKCksIGZhbHNlLCAwLCBldmVudCwg
ZmFsc2UpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VGb3JjZVVwRXZlbnQo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKK3sKKyAgICBSZWZQdHI8RnJhbWVWaWV3
PiBwcm90ZWN0b3IobV9mcmFtZS52aWV3KCkpOworCisgICAgc2V0TGFzdEtub3duTW91c2VQb3Np
dGlvbihldmVudCk7CisKKyAgICBpZiAobV9mcmFtZVNldEJlaW5nUmVzaXplZCkgeworICAgICAg
ICBkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2VjaGFuZ2Vk
RXZlbnQsIG1fZnJhbWVTZXRCZWluZ1Jlc2l6ZWQuZ2V0KCksIGZhbHNlLCAwLCBldmVudCwgZmFs
c2UpOworICAgICAgICByZXR1cm4gIWRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkud2Vi
a2l0bW91c2Vmb3JjZXVwRXZlbnQsIG1fZnJhbWVTZXRCZWluZ1Jlc2l6ZWQuZ2V0KCksIGZhbHNl
LCAwLCBldmVudCwgZmFsc2UpOworICAgIH0KKworICAgIEhpdFRlc3RSZXF1ZXN0OjpIaXRUZXN0
UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpEaXNhbGxvd1NoYWRvd0NvbnRl
bnQgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOworCisgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVz
dChoaXRUeXBlKTsKKyAgICBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzIG1vdXNlRXZlbnQg
PSBwcmVwYXJlTW91c2VFdmVudChyZXF1ZXN0LCBldmVudCk7CisKKyAgICBkaXNwYXRjaE1vdXNl
RXZlbnQoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2VjaGFuZ2VkRXZlbnQsIG1vdXNlRXZl
bnQudGFyZ2V0Tm9kZSgpLCBmYWxzZSwgMCwgZXZlbnQsIGZhbHNlKTsKKyAgICByZXR1cm4gIWRp
c3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkud2Via2l0bW91c2Vmb3JjZXVwRXZlbnQsIG1v
dXNlRXZlbnQudGFyZ2V0Tm9kZSgpLCBmYWxzZSwgMCwgZXZlbnQsIGZhbHNlKTsKK30KKworI2Vs
c2UgLy8gI2lmIEVOQUJMRShNT1VTRV9GT1JDRV9FVkVOVFMpCisKK2Jvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVNb3VzZUZvcmNlQ2hhbmdlZEV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYg
KQoreworfQorCitib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VGb3JjZURvd25FdmVudChj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKQoreworfQorCitib29sIEV2ZW50SGFuZGxlcjo6aGFu
ZGxlTW91c2VGb3JjZVVwRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikKK3sKK30KKyNl
bmRpZiAvLyAjaWYgRU5BQkxFKE1PVVNFX0ZPUkNFX0VWRU5UUykKKwogYm9vbCBFdmVudEhhbmRs
ZXI6OmhhbmRsZVBhc3RlR2xvYmFsU2VsZWN0aW9uKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYg
cGxhdGZvcm1Nb3VzZUV2ZW50KQogewogICAgIC8vIElmIHRoZSBldmVudCB3YXMgYSBtaWRkbGUg
Y2xpY2ssIGF0dGVtcHQgdG8gY29weSBnbG9iYWwgc2VsZWN0aW9uIGluIGFmdGVyCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHJldmlzaW9uIDE4MjgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw2ICsyMDIs
OSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYW5kbGVNb3VzZVByZXNzRXZl
bnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAgICAgYm9vbCBoYW5kbGVNb3VzZU1vdmVF
dmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBIaXRUZXN0UmVzdWx0KiBob3ZlcmVkTm9k
ZSA9IDAsIGJvb2wgb25seVVwZGF0ZVNjcm9sbGJhcnMgPSBmYWxzZSk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgYm9vbCBoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmKTsKKyAgICBib29sIGhhbmRsZU1vdXNlRm9yY2VDaGFuZ2VkRXZlbnQoY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50Jik7CisgICAgYm9vbCBoYW5kbGVNb3VzZUZvcmNlRG93bkV2ZW50KGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIGJvb2wgaGFuZGxlTW91c2VGb3JjZVVwRXZlbnQo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYW5k
bGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwogICAgIHZvaWQgZGVmYXVs
dFdoZWVsRXZlbnRIYW5kbGVyKE5vZGUqLCBXaGVlbEV2ZW50Kik7CiAgICAgYm9vbCBoYW5kbGVQ
YXN0ZUdsb2JhbFNlbGVjdGlvbihjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUV2ZW50LmgJKHJldmlzaW9uIDE4MjgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXZlbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNiArNDMsOSBAQCBwdWJsaWM6CiAgICAgICAgIE1vdXNlTW92ZWQsCiAgICAgICAgIE1v
dXNlUHJlc3NlZCwKICAgICAgICAgTW91c2VSZWxlYXNlZCwKKyAgICAgICAgTW91c2VGb3JjZUNo
YW5nZWQsCisgICAgICAgIE1vdXNlRm9yY2VEb3duLAorICAgICAgICBNb3VzZUZvcmNlVXAsCiAg
ICAgICAgIE1vdXNlU2Nyb2xsLAogCiAgICAgICAgIC8vIFBsYXRmb3JtV2hlZWxFdmVudApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVwbGF5L1VzZXJJbnB1dEJyaWRnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVwbGF5L1VzZXJJbnB1dEJyaWRnZS5jcHAJKHJldmlzaW9uIDE4
MjgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlcGxheS9Vc2VySW5wdXRCcmlkZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDIxIEBAIGJvb2wgVXNlcklucHV0QnJpZGdlOjpoYW5k
bGVNb3VzZU1vdmVPblMKICAgICByZXR1cm4gbV9wYWdlLm1haW5GcmFtZSgpLmV2ZW50SGFuZGxl
cigpLnBhc3NNb3VzZU1vdmVkRXZlbnRUb1Njcm9sbGJhcnMobW91c2VFdmVudCk7CiB9CiAKK2Jv
b2wgVXNlcklucHV0QnJpZGdlOjpoYW5kbGVNb3VzZUZvcmNlQ2hhbmdlZEV2ZW50KGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCwgSW5wdXRTb3VyY2UpCit7CisgICAgcmV0dXJu
IG1fcGFnZS5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oYW5kbGVNb3VzZUZvcmNlQ2hhbmdl
ZEV2ZW50KG1vdXNlRXZlbnQpOworfQorCitib29sIFVzZXJJbnB1dEJyaWRnZTo6aGFuZGxlTW91
c2VGb3JjZURvd25FdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQsIElu
cHV0U291cmNlKQoreworICAgIHJldHVybiBtX3BhZ2UubWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVy
KCkuaGFuZGxlTW91c2VGb3JjZURvd25FdmVudChtb3VzZUV2ZW50KTsKK30KKworYm9vbCBVc2Vy
SW5wdXRCcmlkZ2U6OmhhbmRsZU1vdXNlRm9yY2VVcEV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgbW91c2VFdmVudCwgSW5wdXRTb3VyY2UpCit7CisgICAgcmV0dXJuIG1fcGFnZS5tYWlu
RnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oYW5kbGVNb3VzZUZvcmNlVXBFdmVudChtb3VzZUV2ZW50
KTsKK30KKwogYm9vbCBVc2VySW5wdXRCcmlkZ2U6OmhhbmRsZUtleUV2ZW50KGNvbnN0IFBsYXRm
b3JtS2V5Ym9hcmRFdmVudCYga2V5RXZlbnQsIElucHV0U291cmNlIGlucHV0U291cmNlKQogewog
I2lmIEVOQUJMRShXRUJfUkVQTEFZKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVwbGF5L1VzZXJJ
bnB1dEJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlcGxheS9Vc2VySW5w
dXRCcmlkZ2UuaAkocmV2aXNpb24gMTgyODA5KQorKysgU291cmNlL1dlYkNvcmUvcmVwbGF5L1Vz
ZXJJbnB1dEJyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw5IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYsIElucHV0U291cmNlIHNvdXJjZSA9IElucHV0U291cmNlOjpVc2Vy
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYsIElucHV0U291cmNlIHNvdXJjZSA9IElucHV0U291cmNlOjpVc2Vy
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhbmRsZU1vdXNlTW92ZU9uU2Nyb2xsYmFyRXZl
bnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgSW5wdXRTb3VyY2Ugc291cmNlID0gSW5wdXRT
b3VyY2U6OlVzZXIpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFuZGxlTW91c2VGb3JjZUNo
YW5nZWRFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBJbnB1dFNvdXJjZSBzb3VyY2Ug
PSBJbnB1dFNvdXJjZTo6VXNlcik7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYW5kbGVNb3Vz
ZUZvcmNlRG93bkV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIElucHV0U291cmNlIHNv
dXJjZSA9IElucHV0U291cmNlOjpVc2VyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhbmRs
ZU1vdXNlRm9yY2VVcEV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIElucHV0U291cmNl
IHNvdXJjZSA9IElucHV0U291cmNlOjpVc2VyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhh
bmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgSW5wdXRTb3VyY2Ugc291
cmNlID0gSW5wdXRTb3VyY2U6OlVzZXIpOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFuZGxl
S2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiwgSW5wdXRTb3VyY2Ugc291cmNl
ID0gSW5wdXRTb3VyY2U6OlVzZXIpOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFuZGxlQWNj
ZXNzS2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiwgSW5wdXRTb3VyY2Ugc291
cmNlID0gSW5wdXRTb3VyY2U6OlVzZXIpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyODM0
KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NTkgQEAKKzIwMTUtMDQtMTQgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEZvcmNlIG1vdXNlIGV2ZW50cyBzaG91bGQgZ28gdGhyb3VnaCBub3JtYWwgbW91c2UgZXZl
bnQgaGFuZGxpbmcgY29kZSBwYXRocworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQzNzQ5CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAg
ICAgcmRhcjovL3Byb2JsZW0vMjA0NzI4OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIHByZXNzdXJlQ2hhbmdlV2l0aEV2
ZW50IGNyZWF0ZSBOYXRpdmVXZWJNb3VzZUV2ZW50cyB3aXRoIHRoZSAKKyAgICAgICAgTlNFdmVu
dFR5cGVQcmVzc3VyZXMgdGhhdCBpcyBnZXRzIGFuZCBzZW5kcyB0aG9zZSBkb3duIHRvIHRoZSB3
ZWIgcHJvY2Vzcy4KKworICAgICAgICBSZS1uYW1lIHByZXNzdXJlRXZlbnQgdG8gbGFzdFByZXNz
dXJlRXZlbnQuIE5vdyB0aGF0IGV2ZW50IGNhbiBzb21ldGltZXMgYmUgYW4gCisgICAgICAgIE5T
RXZlbnRUeXBlUHJlc3N1cmUsIHRoZSBuZXcgbmFtZSBtYWtlcyBpdCBjbGVhciBob3cgdGhlIHNl
Y29uZCBwYXJhbWV0ZXIgZGlmZmVycyAKKyAgICAgICAgZnJvbSB0aGUgZmlyc3QuCisgICAgICAg
ICogU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaDoKKworICAgICAgICBOZXcgZXZlbnQgdHlw
ZXMgZm9yIHRoZSBuZXcgdHlwZXMgb2YgZXZlbnRzLgorICAgICAgICAqIFNoYXJlZC9XZWJFdmVu
dC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJFdmVudENvbnZlcnNpb24uY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJLaXQyUGxhdGZvcm1Nb3VzZUV2ZW50OjpXZWJLaXQyUGxhdGZvcm1Nb3VzZUV2
ZW50KToKKyAgICAgICAgKiBTaGFyZWQvbWFjL05hdGl2ZVdlYk1vdXNlRXZlbnRNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6Ok5hdGl2ZVdlYk1vdXNlRXZlbnQ6Ok5hdGl2ZVdlYk1vdXNlRXZlbnQp
OgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lmg6CisKKyAgICAgICAgQWxs
IG9mIHRoZSBzcXVhcmUtcGVnLCByb3VuZC1ob2xlIHByb2JsZW1zIG9mIG1hc3NhZ2luZyB0aGUg
TlNFdmVudFR5cGVQcmVzc3VyZXMgCisgICAgICAgIGV2ZW50cyBpbnRvIFdlYk1vdXNlRXZlbnRz
IGlzIHRha2VuIGNhcmUgb2YgaGVyZS4KKyAgICAgICAgKiBTaGFyZWQvbWFjL1dlYkV2ZW50RmFj
dG9yeS5tbToKKyAgICAgICAgKFdlYktpdDo6bW91c2VCdXR0b25Gb3JFdmVudCk6CisgICAgICAg
IChXZWJLaXQ6Omdsb2JhbFBvaW50Rm9yRXZlbnQpOgorICAgICAgICAoV2ViS2l0Ojpwb2ludEZv
ckV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3Vz
ZUV2ZW50KToKKworICAgICAgICBJbnN0ZWFkIG9mIGNhbGxpbmcgdGhlIG9sZCBpbnB1dERldmlj
ZUZvcmNlRGlkQ2hhbmdlLCBjcmVhdGUgYSBOYXRpdmVXZWJNb3VzZUV2ZW50IAorICAgICAgICBh
bmQgaGFuZGxlIGl0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAg
ICAgICAgKC1bV0tWaWV3IHByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50Ol0pOgorCisgICAgICAgIEhh
bmRsZSB0aGUgbmV3IHR5cGVzLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVFdmVudCk6CisKKyAg
ICAgICAgQ2FuIGRlbGV0ZSBpbnB1dERldmljZUZvcmNlRGlkQ2hhbmdlIHNpbmNlIGl04oCZcyBu
byBsb25nZXIgdXNlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjppbnB1dERldmlj
ZUZvcmNlRGlkQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lmg6CisKKyAgICAgICAgSGFuZGxlIHRoZSBuZXcgdHlwZXMgb2YgbW91c2UgZXZlbnRzIHBy
b3Blcmx5LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6aGFuZGxlTW91c2VFdmVudCk6CisKKyAgICAgICAgRGVsZXRlIGlucHV0RGV2
aWNlRm9yY2VEaWRDaGFuZ2UoKSBhbmQgbV9sYXN0Rm9yY2VTdGFnZS4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aW5wdXREZXZpY2VGb3JjZURp
ZENoYW5nZSk6IERlbGV0ZWQuCisKIDIwMTUtMDQtMTQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hv
cnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIGdlc3R1cmUgc3dpcGUgc2hhZG93IHN0
eWxlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViTW91c2VFdmVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmgJ
KHJldmlzaW9uIDE4MjgwOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJNb3Vz
ZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiBjbGFzcyBOYXRpdmVXZWJNb3VzZUV2ZW50IDogcHVibGljIFdlYk1vdXNlRXZlbnQgewog
cHVibGljOgogI2lmIFVTRShBUFBLSVQpCi0gICAgTmF0aXZlV2ViTW91c2VFdmVudChOU0V2ZW50
ICosIE5TRXZlbnQgKnByZXNzdXJlRXZlbnQsIE5TVmlldyAqKTsKKyAgICBOYXRpdmVXZWJNb3Vz
ZUV2ZW50KE5TRXZlbnQgKiwgTlNFdmVudCAqbGFzdFByZXNzdXJlRXZlbnQsIE5TVmlldyAqKTsK
ICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBOYXRpdmVXZWJNb3VzZUV2ZW50KGNvbnN0IE5hdGl2
ZVdlYk1vdXNlRXZlbnQmKTsKICAgICBOYXRpdmVXZWJNb3VzZUV2ZW50KEdka0V2ZW50KiwgaW50
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5oCShyZXZpc2lvbiAxODI4MDkpCisrKyBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiAr
NTgsOSBAQCBwdWJsaWM6CiAgICAgICAgIE1vdXNlRG93biwKICAgICAgICAgTW91c2VVcCwKICAg
ICAgICAgTW91c2VNb3ZlLAorICAgICAgICBNb3VzZUZvcmNlQ2hhbmdlZCwKKyAgICAgICAgTW91
c2VGb3JjZURvd24sCisgICAgICAgIE1vdXNlRm9yY2VVcCwKIAogICAgICAgICAvLyBXZWJXaGVl
bEV2ZW50CiAgICAgICAgIFdoZWVsLApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2
ZW50Q29udmVyc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkV2ZW50Q29udmVyc2lvbi5jcHAJKHJldmlzaW9uIDE4MjgwOSkKKysrIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJFdmVudENvbnZlcnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0
OCwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3R5cGUgPSBXZWJDb3JlOjpQbGF0Zm9ybUV2
ZW50OjpNb3VzZU1vdmVkOwogICAgICAgICAgICAgbV9mb3JjZSA9IHdlYkV2ZW50LmZvcmNlKCk7
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJFdmVudDo6TW91c2VGb3JjZUNo
YW5nZWQ6CisgICAgICAgICAgICBtX3R5cGUgPSBXZWJDb3JlOjpQbGF0Zm9ybUV2ZW50OjpNb3Vz
ZUZvcmNlQ2hhbmdlZDsKKyAgICAgICAgICAgIG1fZm9yY2UgPSB3ZWJFdmVudC5mb3JjZSgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRm9yY2VEb3du
OgorICAgICAgICAgICAgbV90eXBlID0gV2ViQ29yZTo6UGxhdGZvcm1FdmVudDo6TW91c2VGb3Jj
ZURvd247CisgICAgICAgICAgICBtX2ZvcmNlID0gV2ViQ29yZTo6Rm9yY2VBdEZvcmNlQ2xpY2s7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJFdmVudDo6TW91c2VGb3JjZVVw
OgorICAgICAgICAgICAgbV90eXBlID0gV2ViQ29yZTo6UGxhdGZvcm1FdmVudDo6TW91c2VGb3Jj
ZVVwOworICAgICAgICAgICAgbV9mb3JjZSA9IFdlYkNvcmU6OkZvcmNlQXRGb3JjZUNsaWNrOwor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21h
Yy9OYXRpdmVXZWJNb3VzZUV2ZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9tYWMvTmF0aXZlV2ViTW91c2VFdmVudE1hYy5tbQkocmV2aXNpb24gMTgyODA5KQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9OYXRpdmVXZWJNb3VzZUV2ZW50TWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1O
YXRpdmVXZWJNb3VzZUV2ZW50OjpOYXRpdmVXZWJNb3VzZUV2ZW50KE5TRXZlbnQgKmV2ZW50LCBO
U0V2ZW50ICpwcmVzc3VyZUV2ZW50LCBOU1ZpZXcgKnZpZXcpCi0gICAgOiBXZWJNb3VzZUV2ZW50
KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudChldmVudCwgcHJlc3N1cmVFdmVu
dCwgdmlldykpCitOYXRpdmVXZWJNb3VzZUV2ZW50OjpOYXRpdmVXZWJNb3VzZUV2ZW50KE5TRXZl
bnQgKmV2ZW50LCBOU0V2ZW50ICpsYXN0UHJlc3N1cmVFdmVudCwgTlNWaWV3ICp2aWV3KQorICAg
IDogV2ViTW91c2VFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoZXZl
bnQsIGxhc3RQcmVzc3VyZUV2ZW50LCB2aWV3KSkKICAgICAsIG1fbmF0aXZlRXZlbnQoZXZlbnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5
LmgJKHJldmlzaW9uIDE4MjgwOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZl
bnRGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiBjbGFzcyBXZWJFdmVudEZhY3RvcnkgewogcHVibGljOgogI2lmIFVTRShBUFBLSVQp
Ci0gICAgc3RhdGljIFdlYk1vdXNlRXZlbnQgY3JlYXRlV2ViTW91c2VFdmVudChOU0V2ZW50ICos
IE5TRXZlbnQgKnByZXNzdXJlRXZlbnQsIE5TVmlldyAqd2luZG93Vmlldyk7CisgICAgc3RhdGlj
IFdlYk1vdXNlRXZlbnQgY3JlYXRlV2ViTW91c2VFdmVudChOU0V2ZW50ICosIE5TRXZlbnQgKmxh
c3RQcmVzc3VyZUV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpOwogICAgIHN0YXRpYyBXZWJXaGVl
bEV2ZW50IGNyZWF0ZVdlYldoZWVsRXZlbnQoTlNFdmVudCAqLCBOU1ZpZXcgKndpbmRvd1ZpZXcp
OwogICAgIHN0YXRpYyBXZWJLZXlib2FyZEV2ZW50IGNyZWF0ZVdlYktleWJvYXJkRXZlbnQoTlNF
dmVudCAqLCBib29sIGhhbmRsZWRCeUlucHV0TWV0aG9kLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6
S2V5cHJlc3NDb21tYW5kPiYpOwogICAgIHN0YXRpYyBib29sIHNob3VsZEJlSGFuZGxlZEFzQ29u
dGV4dENsaWNrKGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpOwpJbmRleDogU291
cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkubW0JKHJldmlzaW9uIDE4
MjgwOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw5IEBAIHN0YXRpYyBXZWJNb3VzZUV2ZW50OjpCdXR0
b24gbW91c2VCdXR0b24KICAgICAgICAgY2FzZSBOU090aGVyTW91c2VVcDoKICAgICAgICAgY2Fz
ZSBOU090aGVyTW91c2VEcmFnZ2VkOgogICAgICAgICAgICAgcmV0dXJuIFdlYk1vdXNlRXZlbnQ6
Ok1pZGRsZUJ1dHRvbjsKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTAx
MDAzCisgICAgICAgIGNhc2UgTlNFdmVudFR5cGVQcmVzc3VyZToKKyNlbmRpZgogICAgICAgICBj
YXNlIE5TTW91c2VFbnRlcmVkOgogICAgICAgICBjYXNlIE5TTW91c2VFeGl0ZWQ6CiAgICAgICAg
ICAgICByZXR1cm4gY3VycmVudE1vdXNlQnV0dG9uKCk7CkBAIC0xNTYsNiArMTU5LDkgQEAgc3Rh
dGljIE5TUG9pbnQgZ2xvYmFsUG9pbnQoY29uc3QgTlNQb2ludAogc3RhdGljIE5TUG9pbnQgZ2xv
YmFsUG9pbnRGb3JFdmVudChOU0V2ZW50ICpldmVudCkKIHsKICAgICBzd2l0Y2ggKFtldmVudCB0
eXBlXSkgeworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEwMDMKKyAg
ICAgICAgY2FzZSBOU0V2ZW50VHlwZVByZXNzdXJlOgorI2VuZGlmCiAgICAgICAgIGNhc2UgTlNM
ZWZ0TW91c2VEb3duOgogICAgICAgICBjYXNlIE5TTGVmdE1vdXNlRHJhZ2dlZDoKICAgICAgICAg
Y2FzZSBOU0xlZnRNb3VzZVVwOgpAQCAtMTc4LDYgKzE4NCw5IEBAIHN0YXRpYyBOU1BvaW50IGds
b2JhbFBvaW50Rm9yRXZlbnQoTlNFdmUKIHN0YXRpYyBOU1BvaW50IHBvaW50Rm9yRXZlbnQoTlNF
dmVudCAqZXZlbnQsIE5TVmlldyAqd2luZG93VmlldykKIHsKICAgICBzd2l0Y2ggKFtldmVudCB0
eXBlXSkgeworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEwMDMKKyAg
ICAgICAgY2FzZSBOU0V2ZW50VHlwZVByZXNzdXJlOgorI2VuZGlmCiAgICAgICAgIGNhc2UgTlNM
ZWZ0TW91c2VEb3duOgogICAgICAgICBjYXNlIE5TTGVmdE1vdXNlRHJhZ2dlZDoKICAgICAgICAg
Y2FzZSBOU0xlZnRNb3VzZVVwOgpAQCAtMzU4LDI1ICszNjcsMzggQEAgYm9vbCBXZWJFdmVudEZh
Y3Rvcnk6OnNob3VsZEJlSGFuZGxlZEFzQwogICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8TlNNZW51
VHlwZT4oZXZlbnQubWVudVR5cGVGb3JFdmVudCgpKSA9PSBOU01lbnVUeXBlQ29udGV4dE1lbnUp
OwogfQogCi1XZWJNb3VzZUV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVu
dChOU0V2ZW50ICpldmVudCwgTlNFdmVudCAqcHJlc3N1cmVFdmVudCwgTlNWaWV3ICp3aW5kb3dW
aWV3KQorV2ViTW91c2VFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQo
TlNFdmVudCAqZXZlbnQsIE5TRXZlbnQgKmxhc3RQcmVzc3VyZUV2ZW50LCBOU1ZpZXcgKndpbmRv
d1ZpZXcpCiB7CiAgICAgTlNQb2ludCBwb3NpdGlvbiA9IHBvaW50Rm9yRXZlbnQoZXZlbnQsIHdp
bmRvd1ZpZXcpOwogICAgIE5TUG9pbnQgZ2xvYmFsUG9zaXRpb24gPSBnbG9iYWxQb2ludEZvckV2
ZW50KGV2ZW50KTsKIAotICAgIFdlYkV2ZW50OjpUeXBlIHR5cGUgICAgICAgICAgICAgICAgICAg
ICA9IG1vdXNlRXZlbnRUeXBlRm9yRXZlbnQoZXZlbnQpOwotICAgIFdlYk1vdXNlRXZlbnQ6OkJ1
dHRvbiBidXR0b24gICAgICAgICAgICA9IG1vdXNlQnV0dG9uRm9yRXZlbnQoZXZlbnQpOwotICAg
IGZsb2F0IGRlbHRhWCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFtldmVudCBkZWx0YVhd
OwotICAgIGZsb2F0IGRlbHRhWSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFtldmVudCBk
ZWx0YVldOwotICAgIGZsb2F0IGRlbHRhWiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFtl
dmVudCBkZWx0YVpdOwotICAgIGludCBjbGlja0NvdW50ICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IGNsaWNrQ291bnRGb3JFdmVudChldmVudCk7Ci0gICAgV2ViRXZlbnQ6Ok1vZGlmaWVycyBt
b2RpZmllcnMgICAgICAgICAgID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOwotICAgIGRvdWJs
ZSB0aW1lc3RhbXAgICAgICAgICAgICAgICAgICAgICAgICA9IGV2ZW50VGltZVN0YW1wU2luY2Ux
OTcwKGV2ZW50KTsKLSAgICBpbnQgZXZlbnROdW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAg
PSBbZXZlbnQgZXZlbnROdW1iZXJdOwotICAgIGludCBtZW51VHlwZUZvckV2ZW50ICAgICAgICAg
ICAgICAgICAgICA9IHR5cGVGb3JFdmVudChldmVudCk7CisgICAgV2ViRXZlbnQ6OlR5cGUgdHlw
ZSA9IG1vdXNlRXZlbnRUeXBlRm9yRXZlbnQoZXZlbnQpOworI2lmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NQVhfQUxMT1dFRCA+PSAxMDEwMDMKKyAgICBpZiAoW2V2ZW50IHR5cGVdID09IE5TRXZlbnRU
eXBlUHJlc3N1cmUpIHsKKyAgICAgICAgLy8gU2luY2UgQXBwS2l0IGRvZXNuJ3Qgc2VuZCBtb3Vz
ZSBldmVudHMgZm9yIGZvcmNlIGRvd24gb3IgZm9yY2UgdXAsIHdlIGhhdmUgdG8gdXNlIHRoZSBj
dXJyZW50IHByZXNzdXJlCisgICAgICAgIC8vIGV2ZW50IGFuZCBsYXN0UHJlc3N1cmVFdmVudCB0
byBkZXRlY3QgaWYgdGhpcyBpcyBNb3VzZUZvcmNlRG93biwgTW91c2VGb3JjZVVwLCBvciBqdXN0
IE1vdXNlRm9yY2VDaGFuZ2VkLgorICAgICAgICBpZiAobGFzdFByZXNzdXJlRXZlbnQuc3RhZ2Ug
PT0gMSAmJiBldmVudC5zdGFnZSA9PSAyKQorICAgICAgICAgICAgdHlwZSA9IFdlYkV2ZW50OjpN
b3VzZUZvcmNlRG93bjsKKyAgICAgICAgZWxzZSBpZiAobGFzdFByZXNzdXJlRXZlbnQuc3RhZ2Ug
PT0gMiAmJiBldmVudC5zdGFnZSA9PSAxKQorICAgICAgICAgICAgdHlwZSA9IFdlYkV2ZW50OjpN
b3VzZUZvcmNlVXA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHR5cGUgPSBXZWJFdmVudDo6
TW91c2VGb3JjZUNoYW5nZWQ7CisgICAgfQorI2VuZGlmCisKKyAgICBXZWJNb3VzZUV2ZW50OjpC
dXR0b24gYnV0dG9uID0gbW91c2VCdXR0b25Gb3JFdmVudChldmVudCk7CisgICAgZmxvYXQgZGVs
dGFYID0gW2V2ZW50IGRlbHRhWF07CisgICAgZmxvYXQgZGVsdGFZID0gW2V2ZW50IGRlbHRhWV07
CisgICAgZmxvYXQgZGVsdGFaID0gW2V2ZW50IGRlbHRhWl07CisgICAgaW50IGNsaWNrQ291bnQg
PSBjbGlja0NvdW50Rm9yRXZlbnQoZXZlbnQpOworICAgIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9k
aWZpZXJzID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOworICAgIGRvdWJsZSB0aW1lc3RhbXAg
PSBldmVudFRpbWVTdGFtcFNpbmNlMTk3MChldmVudCk7CisgICAgaW50IGV2ZW50TnVtYmVyID0g
W2V2ZW50IGV2ZW50TnVtYmVyXTsKKyAgICBpbnQgbWVudVR5cGVGb3JFdmVudCA9IHR5cGVGb3JF
dmVudChldmVudCk7CiAKICAgICBkb3VibGUgZm9yY2UgPSAwOwogI2lmIF9fTUFDX09TX1hfVkVS
U0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEwMDMKLSAgICBmb3JjZSA9IHByZXNzdXJlRXZlbnQuc3Rh
Z2UgPCAxID8gcHJlc3N1cmVFdmVudC5wcmVzc3VyZSA6IHByZXNzdXJlRXZlbnQucHJlc3N1cmUg
KyBwcmVzc3VyZUV2ZW50LnN0YWdlIC0gMTsKKyAgICBmb3JjZSA9IGxhc3RQcmVzc3VyZUV2ZW50
LnN0YWdlIDwgMSA/IGxhc3RQcmVzc3VyZUV2ZW50LnByZXNzdXJlIDogbGFzdFByZXNzdXJlRXZl
bnQucHJlc3N1cmUgKyBsYXN0UHJlc3N1cmVFdmVudC5zdGFnZSAtIDE7CiAjZW5kaWYKIAogICAg
IHJldHVybiBXZWJNb3VzZUV2ZW50KHR5cGUsIGJ1dHRvbiwgSW50UG9pbnQocG9zaXRpb24pLCBJ
bnRQb2ludChnbG9iYWxQb3NpdGlvbiksIGRlbHRhWCwgZGVsdGFZLCBkZWx0YVosIGNsaWNrQ291
bnQsIG1vZGlmaWVycywgdGltZXN0YW1wLCBmb3JjZSwgZXZlbnROdW1iZXIsIG1lbnVUeXBlRm9y
RXZlbnQpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJ
KHJldmlzaW9uIDE4MjgwOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Mzk3LDYgKzQzOTcsOSBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGlkUmVjZWl2ZUV2ZW50KHVpbnQzCiAKICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZURv
d246CiAgICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDoKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3Vz
ZUZvcmNlQ2hhbmdlZDoKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZUZvcmNlRG93bjoKKyAgICBj
YXNlIFdlYkV2ZW50OjpNb3VzZUZvcmNlVXA6CiAgICAgY2FzZSBXZWJFdmVudDo6V2hlZWw6CiAg
ICAgY2FzZSBXZWJFdmVudDo6S2V5RG93bjoKICAgICBjYXNlIFdlYkV2ZW50OjpLZXlVcDoKQEAg
LTQ0MjcsNiArNDQzMCwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZUV2ZW50KHVp
bnQzCiAgICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDoKICAgICAgICAgbV9jdXJyZW50bHlQcm9j
ZXNzZWRNb3VzZURvd25FdmVudCA9IG51bGxwdHI7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
V2ViRXZlbnQ6Ok1vdXNlRm9yY2VDaGFuZ2VkOgorICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRm9y
Y2VEb3duOgorICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRm9yY2VVcDoKKyAgICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIFdlYkV2ZW50OjpXaGVlbDogewogICAgICAgICBNRVNTQUdFX0NIRUNLKCFt
X2N1cnJlbnRseVByb2Nlc3NlZFdoZWVsRXZlbnRzLmlzRW1wdHkoKSk7CkBAIC01NjcwLDExICs1
Njc3LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmZvY3VzQW5kU2VsZWN0TGFzdEFjdAogICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Rm9jdXNBbmRTZWxlY3RMYXN0QWN0aW9u
TWVudUhpdFRlc3RSZXN1bHQoKSwgbV9wYWdlSUQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6
aW5wdXREZXZpY2VGb3JjZURpZENoYW5nZShmbG9hdCBmb3JjZSwgaW50IHN0YWdlKQotewotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SW5wdXREZXZpY2VGb3JjZURpZENo
YW5nZShmb3JjZSwgc3RhZ2UpLCBtX3BhZ2VJRCk7Ci19Ci0KIHZvaWQgV2ViUGFnZVByb3h5Ojpp
bW1lZGlhdGVBY3Rpb25EaWRVcGRhdGUoKQogewogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6SW1tZWRpYXRlQWN0aW9uRGlkVXBkYXRlKCksIG1fcGFnZUlEKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDE4MjgwOSkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5
KQpAQCAtOTkzLDcgKzk5Myw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbGVjdExhc3RBY3Rpb25N
ZW51UmFuZ2UoKTsKICAgICB2b2lkIGZvY3VzQW5kU2VsZWN0TGFzdEFjdGlvbk1lbnVIaXRUZXN0
UmVzdWx0KCk7CiAKLSAgICB2b2lkIGlucHV0RGV2aWNlRm9yY2VEaWRDaGFuZ2UoZmxvYXQgZm9y
Y2UsIGludCBzdGFnZSk7CiAgICAgdm9pZCBpbW1lZGlhdGVBY3Rpb25EaWRVcGRhdGUoKTsKICAg
ICB2b2lkIGltbWVkaWF0ZUFjdGlvbkRpZENhbmNlbCgpOwogICAgIHZvaWQgaW1tZWRpYXRlQWN0
aW9uRGlkQ29tcGxldGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9XS1ZpZXcubW0JKHJldmlzaW9uIDE4MjgwOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQzMSwxMyArMTQzMSwxNyBA
QCAtICh2b2lkKXByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50OihOU0V2ZW50CiAgICAgaWYgKGV2ZW50
ID09IF9kYXRhLT5fcHJlc3N1cmVFdmVudCkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKF9k
YXRhLT5faWdub3Jlc05vbldoZWVsRXZlbnRzKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAo
ZXZlbnQucGhhc2UgIT0gTlNFdmVudFBoYXNlQ2hhbmdlZCAmJiBldmVudC5waGFzZSAhPSBOU0V2
ZW50UGhhc2VCZWdhbiAmJiBldmVudC5waGFzZSAhPSBOU0V2ZW50UGhhc2VFbmRlZCkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgTmF0aXZlV2ViTW91c2VFdmVudCB3ZWJFdmVudChldmVudCwgX2Rh
dGEtPl9wcmVzc3VyZUV2ZW50LCBzZWxmKTsKKyAgICBfZGF0YS0+X3BhZ2UtPmhhbmRsZU1vdXNl
RXZlbnQod2ViRXZlbnQpOworCiAgICAgW19kYXRhLT5fcHJlc3N1cmVFdmVudCByZWxlYXNlXTsK
ICAgICBfZGF0YS0+X3ByZXNzdXJlRXZlbnQgPSBbZXZlbnQgcmV0YWluXTsKLQotICAgIF9kYXRh
LT5fcGFnZS0+aW5wdXREZXZpY2VGb3JjZURpZENoYW5nZShldmVudC5wcmVzc3VyZSwgZXZlbnQu
c3RhZ2UpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDE4MjgwOSkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwMyw2
ICsxOTAzLDE0IEBAIHN0YXRpYyBib29sIGhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW8KICAg
ICAgICAgICAgIGlmIChvbmx5VXBkYXRlU2Nyb2xsYmFycykKICAgICAgICAgICAgICAgICByZXR1
cm4gcGFnZS0+Y29yZVBhZ2UoKS0+dXNlcklucHV0QnJpZGdlKCkuaGFuZGxlTW91c2VNb3ZlT25T
Y3JvbGxiYXJFdmVudChwbGF0Zm9ybU1vdXNlRXZlbnQpOwogICAgICAgICAgICAgcmV0dXJuIHBh
Z2UtPmNvcmVQYWdlKCktPnVzZXJJbnB1dEJyaWRnZSgpLmhhbmRsZU1vdXNlTW92ZUV2ZW50KHBs
YXRmb3JtTW91c2VFdmVudCk7CisKKyAgICAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpNb3VzZUZv
cmNlQ2hhbmdlZDoKKyAgICAgICAgICAgIHJldHVybiBwYWdlLT5jb3JlUGFnZSgpLT51c2VySW5w
dXRCcmlkZ2UoKS5oYW5kbGVNb3VzZUZvcmNlQ2hhbmdlZEV2ZW50KHBsYXRmb3JtTW91c2VFdmVu
dCk7CisgICAgICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6TW91c2VGb3JjZURvd246CisgICAgICAg
ICAgICByZXR1cm4gcGFnZS0+Y29yZVBhZ2UoKS0+dXNlcklucHV0QnJpZGdlKCkuaGFuZGxlTW91
c2VGb3JjZURvd25FdmVudChwbGF0Zm9ybU1vdXNlRXZlbnQpOworICAgICAgICBjYXNlIFBsYXRm
b3JtRXZlbnQ6Ok1vdXNlRm9yY2VVcDoKKyAgICAgICAgICAgIHJldHVybiBwYWdlLT5jb3JlUGFn
ZSgpLT51c2VySW5wdXRCcmlkZ2UoKS5oYW5kbGVNb3VzZUZvcmNlVXBFdmVudChwbGF0Zm9ybU1v
dXNlRXZlbnQpOworCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMTgyODA5KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMTA5NCw3ICsxMDk0LDYgQEAgcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlJh
bmdlPiBsb29rdXBUZXh0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50LCBOU0RpY3Rpb25h
cnkgKipvcHRpb25zKTsKICAgICB2b2lkIHNlbGVjdExhc3RBY3Rpb25NZW51UmFuZ2UoKTsKICAg
ICB2b2lkIGZvY3VzQW5kU2VsZWN0TGFzdEFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0KCk7Ci0gICAg
dm9pZCBpbnB1dERldmljZUZvcmNlRGlkQ2hhbmdlKGZsb2F0IGZvcmNlLCBpbnQgc3RhZ2UpOwog
ICAgIHZvaWQgaW1tZWRpYXRlQWN0aW9uRGlkVXBkYXRlKCk7CiAgICAgdm9pZCBpbW1lZGlhdGVB
Y3Rpb25EaWRDYW5jZWwoKTsKICAgICB2b2lkIGltbWVkaWF0ZUFjdGlvbkRpZENvbXBsZXRlKCk7
CkBAIC0xMzU1LDcgKzEzNTQsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5n
ZT4gbV9sYXN0QWN0aW9uTWVudVJhbmdlRm9yU2VsZWN0aW9uOwogICAgIFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQgbV9sYXN0QWN0aW9uTWVudUhpdFRlc3RSZXN1bHQ7CiAgICAgUmVmUHRyPFdlYlBh
Z2VPdmVybGF5PiBtX2xhc3RBY3Rpb25NZW51SGl0UGFnZU92ZXJsYXk7Ci0gICAgaW50IG1fbGFz
dEZvcmNlU3RhZ2UgeyAwIH07CiAjZW5kaWYKIAogICAgIGJvb2wgbV9tYWluRnJhbWVQcm9ncmVz
c0NvbXBsZXRlZDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxODI4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBj
b3B5KQpAQCAtNDA3LDcgKzQwNyw2IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2
ZXIgewogICAgIFBlcmZvcm1BY3Rpb25NZW51SGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6Rmxv
YXRQb2ludCBsb2NhdGlvbiwgYm9vbCBmb3JJbW1lZGlhdGVBY3Rpb24pCiAgICAgU2VsZWN0TGFz
dEFjdGlvbk1lbnVSYW5nZSgpCiAgICAgRm9jdXNBbmRTZWxlY3RMYXN0QWN0aW9uTWVudUhpdFRl
c3RSZXN1bHQoKQotICAgIElucHV0RGV2aWNlRm9yY2VEaWRDaGFuZ2UoZmxvYXQgZm9yY2UsIGlu
dCBzdGFnZSkKICAgICBJbW1lZGlhdGVBY3Rpb25EaWRVcGRhdGUoKQogICAgIEltbWVkaWF0ZUFj
dGlvbkRpZENhbmNlbCgpCiAgICAgSW1tZWRpYXRlQWN0aW9uRGlkQ29tcGxldGUoKQpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbQkocmV2aXNpb24gMTgyODA5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9XZWJQYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQxLDI1ICsxMTQxLDYg
QEAgdm9pZCBXZWJQYWdlOjpmb2N1c0FuZFNlbGVjdExhc3RBY3Rpb25NZQogICAgIGZyYW1lLT5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24ocG9zaXRpb24pOwogfQogCi12b2lkIFdlYlBhZ2U6Omlu
cHV0RGV2aWNlRm9yY2VEaWRDaGFuZ2UoZmxvYXQgZm9yY2UsIGludCBzdGFnZSkKLXsKLSAgICBF
bGVtZW50KiBlbGVtZW50ID0gbV9sYXN0QWN0aW9uTWVudUhpdFRlc3RSZXN1bHQuaW5uZXJFbGVt
ZW50KCk7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCBv
dmVyYWxsRm9yY2UgPSBzdGFnZSA8IDEgPyBmb3JjZSA6IGZvcmNlICsgc3RhZ2UgLSAxOwotICAg
IGVsZW1lbnQtPmRpc3BhdGNoTW91c2VGb3JjZUNoYW5nZWQob3ZlcmFsbEZvcmNlKTsKLQotICAg
IGlmIChtX2xhc3RGb3JjZVN0YWdlID09IDEgJiYgc3RhZ2UgPT0gMikKLSAgICAgICAgZWxlbWVu
dC0+ZGlzcGF0Y2hNb3VzZUZvcmNlRG93bigpOwotICAgIGVsc2UgaWYgKG1fbGFzdEZvcmNlU3Rh
Z2UgPT0gMiAmJiBzdGFnZSA9PSAxKSB7Ci0gICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoTW91c2VG
b3JjZVVwKCk7Ci0gICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoTW91c2VGb3JjZUNsaWNrKCk7Ci0g
ICAgfQotCi0gICAgbV9sYXN0Rm9yY2VTdGFnZSA9IHN0YWdlOwotfQotCiB2b2lkIFdlYlBhZ2U6
OmltbWVkaWF0ZUFjdGlvbkRpZFVwZGF0ZSgpCiB7CiAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS5l
dmVudEhhbmRsZXIoKS5zZXRJbW1lZGlhdGVBY3Rpb25TdGFnZShJbW1lZGlhdGVBY3Rpb25TdGFn
ZTo6QWN0aW9uVXBkYXRlZCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250832</attachid>
            <date>2015-04-15 12:15:22 -0700</date>
            <delta_ts>2015-04-15 13:39:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>31952</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mjg0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE1LTA0LTE1ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBGb3JjZSBtb3VzZSBldmVudHMgc2hv
dWxkIGdvIHRocm91Z2ggbm9ybWFsIG1vdXNlIGV2ZW50IGhhbmRsaW5nIGNvZGUgcGF0aHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Mzc0OQorICAg
ICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIwNDcyODk1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBtb3ZlcyBhbGwgb2YgdGhlIGNvZGUgdG8gZGlzcGF0Y2ggbW91c2Vmb3JjZWRvd24sIG1v
dXNlZm9yY2V1cCwgYW5kIAorICAgICAgICBtb3VzZWZvcmNlY2hhbmdlZCBpbnRvIG5vcm1hbCBt
b3VzZSBldmVudCBkaXNwYXRjaGluZyBjb2RlLiBUaGlzIHBhdGNoIGxlYXZlcyAKKyAgICAgICAg
YmVoaW5kIHRoZSBjYW5jZWwgYW5kIGNsaWNrIGV2ZW50cyBiZWNhdXNlIHdlIHBsYW4gdG8gcmVt
b3ZlIHRob3NlLCBhbmQgaXQgYWxzbyAKKyAgICAgICAgbGVhdmVzIG1vdXNlZm9yY2V3aWxsYmVn
aW4gYmVjYXVzZSB0aGF0IGlzIG5lY2Vzc2FyaWx5IGEgdmVyeSBkaWZmZXJlbnQgZXZlbnQgbW9y
ZSAKKyAgICAgICAgdGllZCB0byB0aGUgTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXpl
ciB0aGFuIHRoZXNlIG90aGVyIGV2ZW50cyB3aGljaCBhcmUgCisgICAgICAgIHRpZWQgdG8gTlNS
ZXNwb25kZXLigJlzIHByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50LgorCisgICAgICAgIE1vdmUgdGhl
IGNvZGUgdG8gZW5zdXJlIHRoZSBmb3JjZSBldmVudHMgaGF2ZSBsaXN0ZW5lcnMgaW4gb3JkZXIg
dG8gZmlyZSB0byAKKyAgICAgICAgZGlzcGF0Y2hNb3VzZUV2ZW50LCBhbmQgZGVsZXRlIHRoZSBv
bGQgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNoTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3JjZURvd24pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZGlzcGF0Y2hNb3VzZUZvcmNlVXApOiBEZWxldGVkLgor
ICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisKKyAgICAgICAgUGVyZm9ybSBhIGhpdCB0ZXN0IGFu
ZCBwaXBlIHRoZSBldmVudHMgdGhyb3VnaCBkaXNwYXRjaE1vdXNlRXZlbnQoKS4gCisgICAgICAg
ICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpoYW5kbGVNb3VzZUZvcmNlRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6
CisKKyAgICAgICAgTmV3IHR5cGVzIGZvciB0aGUgbmV3IGV2ZW50cy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9QbGF0Zm9ybUV2ZW50Lmg6CisKKyAgICAgICAgRm9yd2FyZCB0byBFdmVudEhhbmRsZXIu
IAorICAgICAgICAqIHJlcGxheS9Vc2VySW5wdXRCcmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VXNlcklucHV0QnJpZGdlOjpoYW5kbGVNb3VzZUZvcmNlQ2hhbmdlZEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlVzZXJJbnB1dEJyaWRnZTo6aGFuZGxlTW91c2VGb3JjZURvd25FdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpVc2VySW5wdXRCcmlkZ2U6OmhhbmRsZU1vdXNlRm9yY2VVcEV2
ZW50KToKKyAgICAgICAgKiByZXBsYXkvVXNlcklucHV0QnJpZGdlLmg6CisKIDIwMTUtMDQtMTQg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGNy
ZWF0aW5nIHNlbmQgcmlnaHRzIGZyb20gc2hhcmVkIG1lbW9yeSBtb3JlIHJvYnVzdApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNiArMjQ5LDEzIEBAIGJvb2wg
RWxlbWVudDo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IFAKICAgICBpZiAoaXNEaXNhYmxlZEZv
cm1Db250cm9sKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChwbGF0Zm9ybUV2
ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlQ2hhbmdlZCAmJiAhZG9jdW1l
bnQoKS5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkZPUkNFQ0hBTkdFRF9MSVNURU5FUikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAocGxhdGZvcm1FdmVudC50eXBlKCkgPT0gUGxh
dGZvcm1FdmVudDo6TW91c2VGb3JjZURvd24gJiYgIWRvY3VtZW50KCkuaGFzTGlzdGVuZXJUeXBl
KERvY3VtZW50OjpGT1JDRURPV05fTElTVEVORVIpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKHBsYXRmb3JtRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VV
cCAmJiAhZG9jdW1lbnQoKS5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkZPUkNFVVBfTElTVEVO
RVIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBSZWZQdHI8TW91c2VFdmVudD4gbW91
c2VFdmVudCA9IE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGRvY3VtZW50KCkuZGVmYXVs
dFZpZXcoKSwgcGxhdGZvcm1FdmVudCwgZGV0YWlsLCByZWxhdGVkVGFyZ2V0KTsKIAogICAgIGlm
IChtb3VzZUV2ZW50LT50eXBlKCkuaXNFbXB0eSgpKQpAQCAtMjI1Myw1NCArMjI2MCw2IEBAIGJv
b2wgRWxlbWVudDo6ZGlzcGF0Y2hNb3VzZUZvcmNlV2lsbEJlZ2kKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgRWxlbWVudDo6ZGlzcGF0Y2hNb3VzZUZvcmNlQ2hhbmdlZChmbG9hdCBmb3Jj
ZSkKLXsKLSAgICBpZiAoIWRvY3VtZW50KCkuaGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpGT1JD
RUNIQU5HRURfTElTVEVORVIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZSogZnJhbWUg
PSBkb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtTW91c2VFdmVudChmcmFtZS0+ZXZlbnRI
YW5kbGVyKCkubGFzdEtub3duTW91c2VQb3NpdGlvbigpLCBmcmFtZS0+ZXZlbnRIYW5kbGVyKCku
bGFzdEtub3duTW91c2VHbG9iYWxQb3NpdGlvbigpLCBOb0J1dHRvbiwgUGxhdGZvcm1FdmVudDo6
Tm9UeXBlLCAxLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgV1RGOjpjdXJyZW50VGltZSgp
LCBmb3JjZSk7Ci0gICAgUmVmUHRyPE1vdXNlRXZlbnQ+IG1vdXNlRm9yY2VDaGFuZ2VkRXZlbnQg
PSAgTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNlY2hhbmdl
ZEV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIHBsYXRmb3JtTW91c2VFdmVudCwgMCwg
bnVsbHB0cik7Ci0KLSAgICBtb3VzZUZvcmNlQ2hhbmdlZEV2ZW50LT5zZXRUYXJnZXQodGhpcyk7
Ci0gICAgZGlzcGF0Y2hFdmVudChtb3VzZUZvcmNlQ2hhbmdlZEV2ZW50KTsKLX0KLQotdm9pZCBF
bGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VEb3duKCkKLXsKLSAgICBpZiAoIWRvY3VtZW50KCku
aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpGT1JDRURPV05fTElTVEVORVIpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRm
b3JtTW91c2VFdmVudChmcmFtZS0+ZXZlbnRIYW5kbGVyKCkubGFzdEtub3duTW91c2VQb3NpdGlv
bigpLCBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkubGFzdEtub3duTW91c2VHbG9iYWxQb3NpdGlvbigp
LCBOb0J1dHRvbiwgUGxhdGZvcm1FdmVudDo6Tm9UeXBlLCAxLCBmYWxzZSwgZmFsc2UsIGZhbHNl
LCBmYWxzZSwgV1RGOjpjdXJyZW50VGltZSgpLCBGb3JjZUF0Rm9yY2VDbGljayk7Ci0gICAgUmVm
UHRyPE1vdXNlRXZlbnQ+IG1vdXNlRm9yY2VEb3duRXZlbnQgPSAgTW91c2VFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNlZG93bkV2ZW50LCBkb2N1bWVudCgpLmRlZmF1
bHRWaWV3KCksIHBsYXRmb3JtTW91c2VFdmVudCwgMCwgbnVsbHB0cik7Ci0KLSAgICBtb3VzZUZv
cmNlRG93bkV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgZGlzcGF0Y2hFdmVudChtb3VzZUZv
cmNlRG93bkV2ZW50KTsKLX0KLQotdm9pZCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VVcCgp
Ci17Ci0gICAgaWYgKCFkb2N1bWVudCgpLmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6Rk9SQ0VV
UF9MSVNURU5FUikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3Vt
ZW50KCkuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQ
bGF0Zm9ybU1vdXNlRXZlbnQgcGxhdGZvcm1Nb3VzZUV2ZW50KGZyYW1lLT5ldmVudEhhbmRsZXIo
KS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCksIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0S25v
d25Nb3VzZUdsb2JhbFBvc2l0aW9uKCksIE5vQnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpOb1R5cGUs
IDEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBXVEY6OmN1cnJlbnRUaW1lKCksIEZvcmNl
QXRGb3JjZUNsaWNrKTsKLSAgICBSZWZQdHI8TW91c2VFdmVudD4gbW91c2VGb3JjZVVwRXZlbnQg
PSAgTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNldXBFdmVu
dCwgZG9jdW1lbnQoKS5kZWZhdWx0VmlldygpLCBwbGF0Zm9ybU1vdXNlRXZlbnQsIDAsIG51bGxw
dHIpOwotCi0gICAgbW91c2VGb3JjZVVwRXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBkaXNw
YXRjaEV2ZW50KG1vdXNlRm9yY2VVcEV2ZW50KTsKLX0KLQogdm9pZCBFbGVtZW50OjpkaXNwYXRj
aE1vdXNlRm9yY2VDbGljaygpCiB7CiAgICAgaWYgKCFkb2N1bWVudCgpLmhhc0xpc3RlbmVyVHlw
ZShEb2N1bWVudDo6Rk9SQ0VDTElDS19MSVNURU5FUikpCkBAIC0yMzQwLDE4ICsyMjk5LDYgQEAg
Ym9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VXaWxsQmVnaQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VDaGFuZ2VkKGZsb2F0KQot
ewotfQotCi12b2lkIEVsZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3JjZURvd24oKQotewotfQotCi12
b2lkIEVsZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3JjZVVwKCkKLXsKLX0KLQogdm9pZCBFbGVtZW50
OjpkaXNwYXRjaE1vdXNlRm9yY2VDbGljaygpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJ
KHJldmlzaW9uIDE4Mjg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2OSw5ICs0NjksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoQmx1ckV2ZW50KFJlZlB0cjxFbGVtZW50PiYmIG5ld0ZvY3VzZWRFbGVtZW50KTsKIAog
ICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZGlzcGF0Y2hNb3VzZUZvcmNlV2lsbEJlZ2luKCk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaE1vdXNlRm9yY2VDaGFuZ2VkKGZsb2F0IGZv
cmNlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoTW91c2VGb3JjZURvd24oKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoTW91c2VGb3JjZVVwKCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaE1vdXNlRm9yY2VDbGljaygpOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZGlzcGF0Y2hNb3VzZUZvcmNlQ2FuY2VsbGVkKCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDE4Mjg0OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwNSw2ICsy
MTA1LDMzIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmUKICAgICBy
ZXR1cm4gc3dhbGxvd01vdXNlVXBFdmVudCB8fCBzd2FsbG93Q2xpY2tFdmVudCB8fCBzd2FsbG93
TW91c2VSZWxlYXNlRXZlbnQ7CiB9CiAKKyNpZiBFTkFCTEUoTU9VU0VfRk9SQ0VfRVZFTlRTKQor
Ym9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlRm9yY2VFdmVudChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIGV2ZW50KQoreworICAgIFJlZlB0cjxGcmFtZVZpZXc+IHByb3RlY3RvcihtX2Zy
YW1lLnZpZXcoKSk7CisKKyAgICBzZXRMYXN0S25vd25Nb3VzZVBvc2l0aW9uKGV2ZW50KTsKKwor
ICAgIEhpdFRlc3RSZXF1ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RS
ZXF1ZXN0OjpEaXNhbGxvd1NoYWRvd0NvbnRlbnQgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOwor
CisgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChoaXRUeXBlKTsKKyAgICBNb3VzZUV2ZW50V2l0
aEhpdFRlc3RSZXN1bHRzIG1vdXNlRXZlbnQgPSBwcmVwYXJlTW91c2VFdmVudChyZXF1ZXN0LCBl
dmVudCk7CisKKyAgICBib29sIHN3YWxsb3dlZEV2ZW50ID0gIWRpc3BhdGNoTW91c2VFdmVudChl
dmVudE5hbWVzKCkud2Via2l0bW91c2Vmb3JjZWNoYW5nZWRFdmVudCwgbW91c2VFdmVudC50YXJn
ZXROb2RlKCksIGZhbHNlLCAwLCBldmVudCwgZmFsc2UpOworICAgIGlmIChldmVudC50eXBlKCkg
PT0gUGxhdGZvcm1FdmVudDo6TW91c2VGb3JjZURvd24pCisgICAgICAgIHN3YWxsb3dlZEV2ZW50
ID0gIWRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkud2Via2l0bW91c2Vmb3JjZWRvd25F
dmVudCwgbW91c2VFdmVudC50YXJnZXROb2RlKCksIGZhbHNlLCAwLCBldmVudCwgZmFsc2UpOwor
ICAgIGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VGb3JjZVVwKQorICAg
ICAgICBzd2FsbG93ZWRFdmVudCA9ICFkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLndl
YmtpdG1vdXNlZm9yY2V1cEV2ZW50LCBtb3VzZUV2ZW50LnRhcmdldE5vZGUoKSwgZmFsc2UsIDAs
IGV2ZW50LCBmYWxzZSk7CisKKyAgICByZXR1cm4gc3dhbGxvd2VkRXZlbnQ7Cit9CisjZWxzZQor
Ym9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlRm9yY2VFdmVudChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmICkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYgLy8gI2lmIEVOQUJM
RShNT1VTRV9GT1JDRV9FVkVOVFMpCisKIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVQYXN0ZUds
b2JhbFNlbGVjdGlvbihjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRmb3JtTW91c2VFdmVu
dCkKIHsKICAgICAvLyBJZiB0aGUgZXZlbnQgd2FzIGEgbWlkZGxlIGNsaWNrLCBhdHRlbXB0IHRv
IGNvcHkgZ2xvYmFsIHNlbGVjdGlvbiBpbiBhZnRlcgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5oCShyZXZpc2lvbiAxODI4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNiArMjAyLDcgQEAgcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYpOwogICAgIGJvb2wgaGFuZGxlTW91c2VNb3ZlRXZlbnQoY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiwgSGl0VGVzdFJlc3VsdCogaG92ZXJlZE5vZGUgPSAwLCBib29sIG9ubHlV
cGRhdGVTY3JvbGxiYXJzID0gZmFsc2UpOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFuZGxl
TW91c2VSZWxlYXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgYm9vbCBo
YW5kbGVNb3VzZUZvcmNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVu
dCYpOwogICAgIHZvaWQgZGVmYXVsdFdoZWVsRXZlbnRIYW5kbGVyKE5vZGUqLCBXaGVlbEV2ZW50
Kik7CiAgICAgYm9vbCBoYW5kbGVQYXN0ZUdsb2JhbFNlbGVjdGlvbihjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXZlbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUV2ZW50LmgJ
KHJldmlzaW9uIDE4Mjg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXZl
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOSBAQCBwdWJsaWM6CiAgICAgICAgIE1v
dXNlTW92ZWQsCiAgICAgICAgIE1vdXNlUHJlc3NlZCwKICAgICAgICAgTW91c2VSZWxlYXNlZCwK
KyAgICAgICAgTW91c2VGb3JjZUNoYW5nZWQsCisgICAgICAgIE1vdXNlRm9yY2VEb3duLAorICAg
ICAgICBNb3VzZUZvcmNlVXAsCiAgICAgICAgIE1vdXNlU2Nyb2xsLAogCiAgICAgICAgIC8vIFBs
YXRmb3JtV2hlZWxFdmVudApJbmRleDogU291cmNlL1dlYkNvcmUvcmVwbGF5L1VzZXJJbnB1dEJy
aWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVwbGF5L1VzZXJJbnB1dEJy
aWRnZS5jcHAJKHJldmlzaW9uIDE4Mjg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlcGxheS9Vc2Vy
SW5wdXRCcmlkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDIxIEBAIGJvb2wg
VXNlcklucHV0QnJpZGdlOjpoYW5kbGVNb3VzZU1vdmVPblMKICAgICByZXR1cm4gbV9wYWdlLm1h
aW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLnBhc3NNb3VzZU1vdmVkRXZlbnRUb1Njcm9sbGJhcnMo
bW91c2VFdmVudCk7CiB9CiAKK2Jvb2wgVXNlcklucHV0QnJpZGdlOjpoYW5kbGVNb3VzZUZvcmNl
Q2hhbmdlZEV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCwgSW5wdXRT
b3VyY2UpCit7CisgICAgcmV0dXJuIG1fcGFnZS5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5o
YW5kbGVNb3VzZUZvcmNlQ2hhbmdlZEV2ZW50KG1vdXNlRXZlbnQpOworfQorCitib29sIFVzZXJJ
bnB1dEJyaWRnZTo6aGFuZGxlTW91c2VGb3JjZURvd25FdmVudChjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmIG1vdXNlRXZlbnQsIElucHV0U291cmNlKQoreworICAgIHJldHVybiBtX3BhZ2UubWFp
bkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGFuZGxlTW91c2VGb3JjZURvd25FdmVudChtb3VzZUV2
ZW50KTsKK30KKworYm9vbCBVc2VySW5wdXRCcmlkZ2U6OmhhbmRsZU1vdXNlRm9yY2VVcEV2ZW50
KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCwgSW5wdXRTb3VyY2UpCit7Cisg
ICAgcmV0dXJuIG1fcGFnZS5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oYW5kbGVNb3VzZUZv
cmNlVXBFdmVudChtb3VzZUV2ZW50KTsKK30KKwogYm9vbCBVc2VySW5wdXRCcmlkZ2U6OmhhbmRs
ZUtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYga2V5RXZlbnQsIElucHV0U291
cmNlIGlucHV0U291cmNlKQogewogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVwbGF5L1VzZXJJbnB1dEJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlcGxheS9Vc2VySW5wdXRCcmlkZ2UuaAkocmV2aXNpb24gMTgyODQ4KQorKysgU291
cmNlL1dlYkNvcmUvcmVwbGF5L1VzZXJJbnB1dEJyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
OCw2ICs3OCw5IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhbmRsZU1vdXNl
UmVsZWFzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIElucHV0U291cmNlIHNvdXJj
ZSA9IElucHV0U291cmNlOjpVc2VyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhbmRsZU1v
dXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIElucHV0U291cmNlIHNvdXJj
ZSA9IElucHV0U291cmNlOjpVc2VyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhbmRsZU1v
dXNlTW92ZU9uU2Nyb2xsYmFyRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgSW5wdXRT
b3VyY2Ugc291cmNlID0gSW5wdXRTb3VyY2U6OlVzZXIpOworICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgaGFuZGxlTW91c2VGb3JjZUNoYW5nZWRFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
LCBJbnB1dFNvdXJjZSA9IElucHV0U291cmNlOjpVc2VyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIGhhbmRsZU1vdXNlRm9yY2VEb3duRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jiwg
SW5wdXRTb3VyY2UgPSBJbnB1dFNvdXJjZTo6VXNlcik7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBoYW5kbGVNb3VzZUZvcmNlVXBFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBJbnB1
dFNvdXJjZSA9IElucHV0U291cmNlOjpVc2VyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhh
bmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgSW5wdXRTb3VyY2Ugc291
cmNlID0gSW5wdXRTb3VyY2U6OlVzZXIpOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFuZGxl
S2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiwgSW5wdXRTb3VyY2Ugc291cmNl
ID0gSW5wdXRTb3VyY2U6OlVzZXIpOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFuZGxlQWNj
ZXNzS2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiwgSW5wdXRTb3VyY2Ugc291
cmNlID0gSW5wdXRTb3VyY2U6OlVzZXIpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyODQ5
KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NjIgQEAKKzIwMTUtMDQtMTUgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEZvcmNlIG1vdXNlIGV2ZW50cyBzaG91bGQgZ28gdGhyb3VnaCBub3JtYWwgbW91c2UgZXZl
bnQgaGFuZGxpbmcgY29kZSBwYXRocworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQzNzQ5CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAg
ICAgcmRhcjovL3Byb2JsZW0vMjA0NzI4OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIHByZXNzdXJlQ2hhbmdlV2l0aEV2
ZW50IGNyZWF0ZSBOYXRpdmVXZWJNb3VzZUV2ZW50cyB3aXRoIHRoZSAKKyAgICAgICAgTlNFdmVu
dFR5cGVQcmVzc3VyZXMgdGhhdCBpcyBnZXRzIGFuZCBzZW5kcyB0aG9zZSBkb3duIHRvIHRoZSB3
ZWIgcHJvY2Vzcy4KKworICAgICAgICBSZS1uYW1lIHByZXNzdXJlRXZlbnQgdG8gbGFzdFByZXNz
dXJlRXZlbnQuIE5vdyB0aGF0IGV2ZW50IGNhbiBzb21ldGltZXMgYmUgYW4gCisgICAgICAgIE5T
RXZlbnRUeXBlUHJlc3N1cmUsIHRoZSBuZXcgbmFtZSBtYWtlcyBpdCBjbGVhciBob3cgdGhlIHNl
Y29uZCBwYXJhbWV0ZXIgZGlmZmVycyAKKyAgICAgICAgZnJvbSB0aGUgZmlyc3QuCisgICAgICAg
ICogU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaDoKKworICAgICAgICBOZXcgZXZlbnQgdHlw
ZXMgZm9yIHRoZSBuZXcgdHlwZXMgb2YgZXZlbnRzLgorICAgICAgICAqIFNoYXJlZC9XZWJFdmVu
dC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJFdmVudENvbnZlcnNpb24uY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJLaXQyUGxhdGZvcm1Nb3VzZUV2ZW50OjpXZWJLaXQyUGxhdGZvcm1Nb3VzZUV2
ZW50KToKKyAgICAgICAgKiBTaGFyZWQvbWFjL05hdGl2ZVdlYk1vdXNlRXZlbnRNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6Ok5hdGl2ZVdlYk1vdXNlRXZlbnQ6Ok5hdGl2ZVdlYk1vdXNlRXZlbnQp
OgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lmg6CisKKyAgICAgICAgQWxs
IG9mIHRoZSBzcXVhcmUtcGVnLCByb3VuZC1ob2xlIHByb2JsZW1zIG9mIG1hc3NhZ2luZyB0aGUg
TlNFdmVudFR5cGVQcmVzc3VyZXMgCisgICAgICAgIGV2ZW50cyBpbnRvIFdlYk1vdXNlRXZlbnRz
IGlzIHRha2VuIGNhcmUgb2YgaGVyZS4KKyAgICAgICAgKiBTaGFyZWQvbWFjL1dlYkV2ZW50RmFj
dG9yeS5tbToKKyAgICAgICAgKFdlYktpdDo6bW91c2VCdXR0b25Gb3JFdmVudCk6CisgICAgICAg
IChXZWJLaXQ6Omdsb2JhbFBvaW50Rm9yRXZlbnQpOgorICAgICAgICAoV2ViS2l0Ojpwb2ludEZv
ckV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3Vz
ZUV2ZW50KToKKworICAgICAgICBJbnN0ZWFkIG9mIGNhbGxpbmcgdGhlIG9sZCBpbnB1dERldmlj
ZUZvcmNlRGlkQ2hhbmdlLCBjcmVhdGUgYSBOYXRpdmVXZWJNb3VzZUV2ZW50IAorICAgICAgICBh
bmQgaGFuZGxlIGl0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAg
ICAgICAgKC1bV0tWaWV3IHByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50Ol0pOgorCisgICAgICAgIEhh
bmRsZSB0aGUgbmV3IHR5cGVzLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVFdmVudCk6CisKKyAg
ICAgICAgQ2FuIGRlbGV0ZSBpbnB1dERldmljZUZvcmNlRGlkQ2hhbmdlIHNpbmNlIGl04oCZcyBu
byBsb25nZXIgdXNlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjppbnB1dERldmlj
ZUZvcmNlRGlkQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lmg6CisKKyAgICAgICAgSGFuZGxlIHRoZSBuZXcgdHlwZXMgb2YgbW91c2UgZXZlbnRzIHBy
b3Blcmx5LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6aGFuZGxlTW91c2VFdmVudCk6CisKKyAgICAgICAgRGVsZXRlIGlucHV0RGV2
aWNlRm9yY2VEaWRDaGFuZ2UoKSBhbmQgbV9sYXN0Rm9yY2VTdGFnZS4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aW5wdXREZXZpY2VGb3JjZURp
ZENoYW5nZSk6IERlbGV0ZWQuCisKKyAgICAgICAgSGFuZGxlIG5ldyBXZWJFdmVudCB0eXBlcy4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2lu
WDExLmNwcDoKKwogMjAxNS0wNC0xNSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgog
CiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yMDU0OTI5OD4gTm8gbWF0Y2hpbmcgX19OU2lfIGRl
ZmluaXRpb24gZm9yIHBvc3Rwcm9jZXNzZWQgdmFsdWUgb2YgV0tfe01BQyxJT1N9X1RCQQpJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViTW91c2VFdmVudC5oCShyZXZpc2lv
biAxODI4NDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViTW91c2VFdmVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xh
c3MgTmF0aXZlV2ViTW91c2VFdmVudCA6IHB1YmxpYyBXZWJNb3VzZUV2ZW50IHsKIHB1YmxpYzoK
ICNpZiBVU0UoQVBQS0lUKQotICAgIE5hdGl2ZVdlYk1vdXNlRXZlbnQoTlNFdmVudCAqLCBOU0V2
ZW50ICpwcmVzc3VyZUV2ZW50LCBOU1ZpZXcgKik7CisgICAgTmF0aXZlV2ViTW91c2VFdmVudChO
U0V2ZW50ICosIE5TRXZlbnQgKmxhc3RQcmVzc3VyZUV2ZW50LCBOU1ZpZXcgKik7CiAjZWxpZiBQ
TEFURk9STShHVEspCiAgICAgTmF0aXZlV2ViTW91c2VFdmVudChjb25zdCBOYXRpdmVXZWJNb3Vz
ZUV2ZW50Jik7CiAgICAgTmF0aXZlV2ViTW91c2VFdmVudChHZGtFdmVudCosIGludCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAkocmV2aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDkgQEAg
cHVibGljOgogICAgICAgICBNb3VzZURvd24sCiAgICAgICAgIE1vdXNlVXAsCiAgICAgICAgIE1v
dXNlTW92ZSwKKyAgICAgICAgTW91c2VGb3JjZUNoYW5nZWQsCisgICAgICAgIE1vdXNlRm9yY2VE
b3duLAorICAgICAgICBNb3VzZUZvcmNlVXAsCiAKICAgICAgICAgLy8gV2ViV2hlZWxFdmVudAog
ICAgICAgICBXaGVlbCwKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudENvbnZl
cnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudENv
bnZlcnNpb24uY3BwCShyZXZpc2lvbiAxODI4NDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViRXZlbnRDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsMTggQEAg
cHVibGljOgogICAgICAgICAgICAgbV90eXBlID0gV2ViQ29yZTo6UGxhdGZvcm1FdmVudDo6TW91
c2VNb3ZlZDsKICAgICAgICAgICAgIG1fZm9yY2UgPSB3ZWJFdmVudC5mb3JjZSgpOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRm9yY2VDaGFuZ2VkOgor
ICAgICAgICAgICAgbV90eXBlID0gV2ViQ29yZTo6UGxhdGZvcm1FdmVudDo6TW91c2VGb3JjZUNo
YW5nZWQ7CisgICAgICAgICAgICBtX2ZvcmNlID0gd2ViRXZlbnQuZm9yY2UoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZUZvcmNlRG93bjoKKyAgICAg
ICAgICAgIG1fdHlwZSA9IFdlYkNvcmU6OlBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VEb3duOwor
ICAgICAgICAgICAgbV9mb3JjZSA9IFdlYkNvcmU6OkZvcmNlQXRGb3JjZUNsaWNrOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRm9yY2VVcDoKKyAgICAg
ICAgICAgIG1fdHlwZSA9IFdlYkNvcmU6OlBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VVcDsKKyAg
ICAgICAgICAgIG1fZm9yY2UgPSBXZWJDb3JlOjpGb3JjZUF0Rm9yY2VDbGljazsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvTmF0aXZl
V2ViTW91c2VFdmVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL05hdGl2ZVdlYk1vdXNlRXZlbnRNYWMubW0JKHJldmlzaW9uIDE4Mjg0OCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9tYWMvTmF0aXZlV2ViTW91c2VFdmVudE1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzIsOCArMzIsOCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotTmF0aXZlV2Vi
TW91c2VFdmVudDo6TmF0aXZlV2ViTW91c2VFdmVudChOU0V2ZW50ICpldmVudCwgTlNFdmVudCAq
cHJlc3N1cmVFdmVudCwgTlNWaWV3ICp2aWV3KQotICAgIDogV2ViTW91c2VFdmVudChXZWJFdmVu
dEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoZXZlbnQsIHByZXNzdXJlRXZlbnQsIHZpZXcp
KQorTmF0aXZlV2ViTW91c2VFdmVudDo6TmF0aXZlV2ViTW91c2VFdmVudChOU0V2ZW50ICpldmVu
dCwgTlNFdmVudCAqbGFzdFByZXNzdXJlRXZlbnQsIE5TVmlldyAqdmlldykKKyAgICA6IFdlYk1v
dXNlRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KGV2ZW50LCBsYXN0
UHJlc3N1cmVFdmVudCwgdmlldykpCiAgICAgLCBtX25hdGl2ZUV2ZW50KGV2ZW50KQogewogfQpJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5oCShyZXZp
c2lvbiAxODI4NDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkV2ZW50RmFjdG9y
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
Y2xhc3MgV2ViRXZlbnRGYWN0b3J5IHsKIHB1YmxpYzoKICNpZiBVU0UoQVBQS0lUKQotICAgIHN0
YXRpYyBXZWJNb3VzZUV2ZW50IGNyZWF0ZVdlYk1vdXNlRXZlbnQoTlNFdmVudCAqLCBOU0V2ZW50
ICpwcmVzc3VyZUV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpOworICAgIHN0YXRpYyBXZWJNb3Vz
ZUV2ZW50IGNyZWF0ZVdlYk1vdXNlRXZlbnQoTlNFdmVudCAqLCBOU0V2ZW50ICpsYXN0UHJlc3N1
cmVFdmVudCwgTlNWaWV3ICp3aW5kb3dWaWV3KTsKICAgICBzdGF0aWMgV2ViV2hlZWxFdmVudCBj
cmVhdGVXZWJXaGVlbEV2ZW50KE5TRXZlbnQgKiwgTlNWaWV3ICp3aW5kb3dWaWV3KTsKICAgICBz
dGF0aWMgV2ViS2V5Ym9hcmRFdmVudCBjcmVhdGVXZWJLZXlib2FyZEV2ZW50KE5TRXZlbnQgKiwg
Ym9vbCBoYW5kbGVkQnlJbnB1dE1ldGhvZCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNz
Q29tbWFuZD4mKTsKICAgICBzdGF0aWMgYm9vbCBzaG91bGRCZUhhbmRsZWRBc0NvbnRleHRDbGlj
ayhjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lm1tCShyZXZpc2lvbiAxODI4NDgpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5tbQkod29ya2luZyBj
b3B5KQpAQCAtNzYsNiArNzYsOSBAQCBzdGF0aWMgV2ViTW91c2VFdmVudDo6QnV0dG9uIG1vdXNl
QnV0dG9uCiAgICAgICAgIGNhc2UgTlNPdGhlck1vdXNlVXA6CiAgICAgICAgIGNhc2UgTlNPdGhl
ck1vdXNlRHJhZ2dlZDoKICAgICAgICAgICAgIHJldHVybiBXZWJNb3VzZUV2ZW50OjpNaWRkbGVC
dXR0b247CisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAwMworICAg
ICAgICBjYXNlIE5TRXZlbnRUeXBlUHJlc3N1cmU6CisjZW5kaWYKICAgICAgICAgY2FzZSBOU01v
dXNlRW50ZXJlZDoKICAgICAgICAgY2FzZSBOU01vdXNlRXhpdGVkOgogICAgICAgICAgICAgcmV0
dXJuIGN1cnJlbnRNb3VzZUJ1dHRvbigpOwpAQCAtMTU2LDUwICsxNTksNTYgQEAgc3RhdGljIE5T
UG9pbnQgZ2xvYmFsUG9pbnQoY29uc3QgTlNQb2ludAogc3RhdGljIE5TUG9pbnQgZ2xvYmFsUG9p
bnRGb3JFdmVudChOU0V2ZW50ICpldmVudCkKIHsKICAgICBzd2l0Y2ggKFtldmVudCB0eXBlXSkg
ewotICAgICAgICBjYXNlIE5TTGVmdE1vdXNlRG93bjoKLSAgICAgICAgY2FzZSBOU0xlZnRNb3Vz
ZURyYWdnZWQ6Ci0gICAgICAgIGNhc2UgTlNMZWZ0TW91c2VVcDoKLSAgICAgICAgY2FzZSBOU01v
dXNlRW50ZXJlZDoKLSAgICAgICAgY2FzZSBOU01vdXNlRXhpdGVkOgotICAgICAgICBjYXNlIE5T
TW91c2VNb3ZlZDoKLSAgICAgICAgY2FzZSBOU090aGVyTW91c2VEb3duOgotICAgICAgICBjYXNl
IE5TT3RoZXJNb3VzZURyYWdnZWQ6Ci0gICAgICAgIGNhc2UgTlNPdGhlck1vdXNlVXA6Ci0gICAg
ICAgIGNhc2UgTlNSaWdodE1vdXNlRG93bjoKLSAgICAgICAgY2FzZSBOU1JpZ2h0TW91c2VEcmFn
Z2VkOgotICAgICAgICBjYXNlIE5TUmlnaHRNb3VzZVVwOgotICAgICAgICBjYXNlIE5TU2Nyb2xs
V2hlZWw6Ci0gICAgICAgICAgICByZXR1cm4gZ2xvYmFsUG9pbnQoW2V2ZW50IGxvY2F0aW9uSW5X
aW5kb3ddLCBbZXZlbnQgd2luZG93XSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gTlNaZXJvUG9pbnQ7CisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49
IDEwMTAwMworICAgIGNhc2UgTlNFdmVudFR5cGVQcmVzc3VyZToKKyNlbmRpZgorICAgIGNhc2Ug
TlNMZWZ0TW91c2VEb3duOgorICAgIGNhc2UgTlNMZWZ0TW91c2VEcmFnZ2VkOgorICAgIGNhc2Ug
TlNMZWZ0TW91c2VVcDoKKyAgICBjYXNlIE5TTW91c2VFbnRlcmVkOgorICAgIGNhc2UgTlNNb3Vz
ZUV4aXRlZDoKKyAgICBjYXNlIE5TTW91c2VNb3ZlZDoKKyAgICBjYXNlIE5TT3RoZXJNb3VzZURv
d246CisgICAgY2FzZSBOU090aGVyTW91c2VEcmFnZ2VkOgorICAgIGNhc2UgTlNPdGhlck1vdXNl
VXA6CisgICAgY2FzZSBOU1JpZ2h0TW91c2VEb3duOgorICAgIGNhc2UgTlNSaWdodE1vdXNlRHJh
Z2dlZDoKKyAgICBjYXNlIE5TUmlnaHRNb3VzZVVwOgorICAgIGNhc2UgTlNTY3JvbGxXaGVlbDoK
KyAgICAgICAgcmV0dXJuIGdsb2JhbFBvaW50KFtldmVudCBsb2NhdGlvbkluV2luZG93XSwgW2V2
ZW50IHdpbmRvd10pOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBOU1plcm9Qb2ludDsK
ICAgICB9CiB9CiAKIHN0YXRpYyBOU1BvaW50IHBvaW50Rm9yRXZlbnQoTlNFdmVudCAqZXZlbnQs
IE5TVmlldyAqd2luZG93VmlldykKIHsKICAgICBzd2l0Y2ggKFtldmVudCB0eXBlXSkgewotICAg
ICAgICBjYXNlIE5TTGVmdE1vdXNlRG93bjoKLSAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURyYWdn
ZWQ6Ci0gICAgICAgIGNhc2UgTlNMZWZ0TW91c2VVcDoKLSAgICAgICAgY2FzZSBOU01vdXNlRW50
ZXJlZDoKLSAgICAgICAgY2FzZSBOU01vdXNlRXhpdGVkOgotICAgICAgICBjYXNlIE5TTW91c2VN
b3ZlZDoKLSAgICAgICAgY2FzZSBOU090aGVyTW91c2VEb3duOgotICAgICAgICBjYXNlIE5TT3Ro
ZXJNb3VzZURyYWdnZWQ6Ci0gICAgICAgIGNhc2UgTlNPdGhlck1vdXNlVXA6Ci0gICAgICAgIGNh
c2UgTlNSaWdodE1vdXNlRG93bjoKLSAgICAgICAgY2FzZSBOU1JpZ2h0TW91c2VEcmFnZ2VkOgot
ICAgICAgICBjYXNlIE5TUmlnaHRNb3VzZVVwOgotICAgICAgICBjYXNlIE5TU2Nyb2xsV2hlZWw6
IHsKLSAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgd2lsbCBoYXZlIGl0cyBvcmlnaW4gYXQgdGhl
IGJvdHRvbSBsZWZ0IG9mIHRoZSB3aW5kb3cgdW5sZXNzIHdpbmRvd1ZpZXcgaXMgZmxpcHBlZC4K
LSAgICAgICAgICAgIC8vIEluIHRob3NlIGNhc2VzLCB0aGUgWSBjb29yZGluYXRlIGdldHMgZmxp
cHBlZCBieSBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdy4KLSAgICAgICAgICAg
IE5TUG9pbnQgbG9jYXRpb24gPSBbZXZlbnQgbG9jYXRpb25JbldpbmRvd107Ci0gICAgICAgICAg
ICBpZiAod2luZG93VmlldykKLSAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IFt3aW5kb3dWaWV3
IGNvbnZlcnRQb2ludDpsb2NhdGlvbiBmcm9tVmlldzpuaWxdOwotICAgICAgICAgICAgcmV0dXJu
IGxvY2F0aW9uOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gTlNaZXJvUG9pbnQ7CisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEw
MTAwMworICAgIGNhc2UgTlNFdmVudFR5cGVQcmVzc3VyZToKKyNlbmRpZgorICAgIGNhc2UgTlNM
ZWZ0TW91c2VEb3duOgorICAgIGNhc2UgTlNMZWZ0TW91c2VEcmFnZ2VkOgorICAgIGNhc2UgTlNM
ZWZ0TW91c2VVcDoKKyAgICBjYXNlIE5TTW91c2VFbnRlcmVkOgorICAgIGNhc2UgTlNNb3VzZUV4
aXRlZDoKKyAgICBjYXNlIE5TTW91c2VNb3ZlZDoKKyAgICBjYXNlIE5TT3RoZXJNb3VzZURvd246
CisgICAgY2FzZSBOU090aGVyTW91c2VEcmFnZ2VkOgorICAgIGNhc2UgTlNPdGhlck1vdXNlVXA6
CisgICAgY2FzZSBOU1JpZ2h0TW91c2VEb3duOgorICAgIGNhc2UgTlNSaWdodE1vdXNlRHJhZ2dl
ZDoKKyAgICBjYXNlIE5TUmlnaHRNb3VzZVVwOgorICAgIGNhc2UgTlNTY3JvbGxXaGVlbDogewor
ICAgICAgICAvLyBOb3RlOiBUaGlzIHdpbGwgaGF2ZSBpdHMgb3JpZ2luIGF0IHRoZSBib3R0b20g
bGVmdCBvZiB0aGUgd2luZG93IHVubGVzcyB3aW5kb3dWaWV3IGlzIGZsaXBwZWQuCisgICAgICAg
IC8vIEluIHRob3NlIGNhc2VzLCB0aGUgWSBjb29yZGluYXRlIGdldHMgZmxpcHBlZCBieSBXaWRn
ZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdy4KKyAgICAgICAgTlNQb2ludCBsb2NhdGlv
biA9IFtldmVudCBsb2NhdGlvbkluV2luZG93XTsKKyAgICAgICAgaWYgKHdpbmRvd1ZpZXcpCisg
ICAgICAgICAgICBsb2NhdGlvbiA9IFt3aW5kb3dWaWV3IGNvbnZlcnRQb2ludDpsb2NhdGlvbiBm
cm9tVmlldzpuaWxdOworICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgfQorICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBOU1plcm9Qb2ludDsKICAgICB9CiB9CiAKQEAgLTM1OCwyNSAr
MzY3LDM4IEBAIGJvb2wgV2ViRXZlbnRGYWN0b3J5OjpzaG91bGRCZUhhbmRsZWRBc0MKICAgICBy
ZXR1cm4gKHN0YXRpY19jYXN0PE5TTWVudVR5cGU+KGV2ZW50Lm1lbnVUeXBlRm9yRXZlbnQoKSkg
PT0gTlNNZW51VHlwZUNvbnRleHRNZW51KTsKIH0KIAotV2ViTW91c2VFdmVudCBXZWJFdmVudEZh
Y3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoTlNFdmVudCAqZXZlbnQsIE5TRXZlbnQgKnByZXNz
dXJlRXZlbnQsIE5TVmlldyAqd2luZG93VmlldykKK1dlYk1vdXNlRXZlbnQgV2ViRXZlbnRGYWN0
b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU0V2ZW50ICpsYXN0UHJl
c3N1cmVFdmVudCwgTlNWaWV3ICp3aW5kb3dWaWV3KQogewogICAgIE5TUG9pbnQgcG9zaXRpb24g
PSBwb2ludEZvckV2ZW50KGV2ZW50LCB3aW5kb3dWaWV3KTsKICAgICBOU1BvaW50IGdsb2JhbFBv
c2l0aW9uID0gZ2xvYmFsUG9pbnRGb3JFdmVudChldmVudCk7CiAKLSAgICBXZWJFdmVudDo6VHlw
ZSB0eXBlICAgICAgICAgICAgICAgICAgICAgPSBtb3VzZUV2ZW50VHlwZUZvckV2ZW50KGV2ZW50
KTsKLSAgICBXZWJNb3VzZUV2ZW50OjpCdXR0b24gYnV0dG9uICAgICAgICAgICAgPSBtb3VzZUJ1
dHRvbkZvckV2ZW50KGV2ZW50KTsKLSAgICBmbG9hdCBkZWx0YVggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSBbZXZlbnQgZGVsdGFYXTsKLSAgICBmbG9hdCBkZWx0YVkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPSBbZXZlbnQgZGVsdGFZXTsKLSAgICBmbG9hdCBkZWx0YVogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPSBbZXZlbnQgZGVsdGFaXTsKLSAgICBpbnQgY2xpY2tDb3Vu
dCAgICAgICAgICAgICAgICAgICAgICAgICAgPSBjbGlja0NvdW50Rm9yRXZlbnQoZXZlbnQpOwot
ICAgIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzICAgICAgICAgICA9IG1vZGlmaWVyc0Zv
ckV2ZW50KGV2ZW50KTsKLSAgICBkb3VibGUgdGltZXN0YW1wICAgICAgICAgICAgICAgICAgICAg
ICAgPSBldmVudFRpbWVTdGFtcFNpbmNlMTk3MChldmVudCk7Ci0gICAgaW50IGV2ZW50TnVtYmVy
ICAgICAgICAgICAgICAgICAgICAgICAgID0gW2V2ZW50IGV2ZW50TnVtYmVyXTsKLSAgICBpbnQg
bWVudVR5cGVGb3JFdmVudCAgICAgICAgICAgICAgICAgICAgPSB0eXBlRm9yRXZlbnQoZXZlbnQp
OworICAgIFdlYkV2ZW50OjpUeXBlIHR5cGUgPSBtb3VzZUV2ZW50VHlwZUZvckV2ZW50KGV2ZW50
KTsKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTAxMDAzCisgICAgaWYg
KFtldmVudCB0eXBlXSA9PSBOU0V2ZW50VHlwZVByZXNzdXJlKSB7CisgICAgICAgIC8vIFNpbmNl
IEFwcEtpdCBkb2Vzbid0IHNlbmQgbW91c2UgZXZlbnRzIGZvciBmb3JjZSBkb3duIG9yIGZvcmNl
IHVwLCB3ZSBoYXZlIHRvIHVzZSB0aGUgY3VycmVudCBwcmVzc3VyZQorICAgICAgICAvLyBldmVu
dCBhbmQgbGFzdFByZXNzdXJlRXZlbnQgdG8gZGV0ZWN0IGlmIHRoaXMgaXMgTW91c2VGb3JjZURv
d24sIE1vdXNlRm9yY2VVcCwgb3IganVzdCBNb3VzZUZvcmNlQ2hhbmdlZC4KKyAgICAgICAgaWYg
KGxhc3RQcmVzc3VyZUV2ZW50LnN0YWdlID09IDEgJiYgZXZlbnQuc3RhZ2UgPT0gMikKKyAgICAg
ICAgICAgIHR5cGUgPSBXZWJFdmVudDo6TW91c2VGb3JjZURvd247CisgICAgICAgIGVsc2UgaWYg
KGxhc3RQcmVzc3VyZUV2ZW50LnN0YWdlID09IDIgJiYgZXZlbnQuc3RhZ2UgPT0gMSkKKyAgICAg
ICAgICAgIHR5cGUgPSBXZWJFdmVudDo6TW91c2VGb3JjZVVwOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNlRm9yY2VDaGFuZ2VkOworICAgIH0KKyNlbmRp
ZgorCisgICAgV2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1dHRvbiA9IG1vdXNlQnV0dG9uRm9yRXZl
bnQoZXZlbnQpOworICAgIGZsb2F0IGRlbHRhWCA9IFtldmVudCBkZWx0YVhdOworICAgIGZsb2F0
IGRlbHRhWSA9IFtldmVudCBkZWx0YVldOworICAgIGZsb2F0IGRlbHRhWiA9IFtldmVudCBkZWx0
YVpdOworICAgIGludCBjbGlja0NvdW50ID0gY2xpY2tDb3VudEZvckV2ZW50KGV2ZW50KTsKKyAg
ICBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycyA9IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50
KTsKKyAgICBkb3VibGUgdGltZXN0YW1wID0gZXZlbnRUaW1lU3RhbXBTaW5jZTE5NzAoZXZlbnQp
OworICAgIGludCBldmVudE51bWJlciA9IFtldmVudCBldmVudE51bWJlcl07CisgICAgaW50IG1l
bnVUeXBlRm9yRXZlbnQgPSB0eXBlRm9yRXZlbnQoZXZlbnQpOwogCiAgICAgZG91YmxlIGZvcmNl
ID0gMDsKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTAxMDAzCi0gICAg
Zm9yY2UgPSBwcmVzc3VyZUV2ZW50LnN0YWdlIDwgMSA/IHByZXNzdXJlRXZlbnQucHJlc3N1cmUg
OiBwcmVzc3VyZUV2ZW50LnByZXNzdXJlICsgcHJlc3N1cmVFdmVudC5zdGFnZSAtIDE7CisgICAg
Zm9yY2UgPSBsYXN0UHJlc3N1cmVFdmVudC5zdGFnZSA8IDEgPyBsYXN0UHJlc3N1cmVFdmVudC5w
cmVzc3VyZSA6IGxhc3RQcmVzc3VyZUV2ZW50LnByZXNzdXJlICsgbGFzdFByZXNzdXJlRXZlbnQu
c3RhZ2UgLSAxOwogI2VuZGlmCiAKICAgICByZXR1cm4gV2ViTW91c2VFdmVudCh0eXBlLCBidXR0
b24sIEludFBvaW50KHBvc2l0aW9uKSwgSW50UG9pbnQoZ2xvYmFsUG9zaXRpb24pLCBkZWx0YVgs
IGRlbHRhWSwgZGVsdGFaLCBjbGlja0NvdW50LCBtb2RpZmllcnMsIHRpbWVzdGFtcCwgZm9yY2Us
IGV2ZW50TnVtYmVyLCBtZW51VHlwZUZvckV2ZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAxODI4NDgpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM5Nyw2
ICs0Mzk3LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVFdmVudCh1aW50MwogCiAg
ICAgY2FzZSBXZWJFdmVudDo6TW91c2VEb3duOgogICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlVXA6
CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VGb3JjZUNoYW5nZWQ6CisgICAgY2FzZSBXZWJFdmVu
dDo6TW91c2VGb3JjZURvd246CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VGb3JjZVVwOgogICAg
IGNhc2UgV2ViRXZlbnQ6OldoZWVsOgogICAgIGNhc2UgV2ViRXZlbnQ6OktleURvd246CiAgICAg
Y2FzZSBXZWJFdmVudDo6S2V5VXA6CkBAIC00NDI3LDYgKzQ0MzAsMTAgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmRpZFJlY2VpdmVFdmVudCh1aW50MwogICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlVXA6
CiAgICAgICAgIG1fY3VycmVudGx5UHJvY2Vzc2VkTW91c2VEb3duRXZlbnQgPSBudWxscHRyOwog
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZUZvcmNlQ2hhbmdlZDoKKyAg
ICBjYXNlIFdlYkV2ZW50OjpNb3VzZUZvcmNlRG93bjoKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3Vz
ZUZvcmNlVXA6CisgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBXZWJFdmVudDo6V2hlZWw6IHsK
ICAgICAgICAgTUVTU0FHRV9DSEVDSyghbV9jdXJyZW50bHlQcm9jZXNzZWRXaGVlbEV2ZW50cy5p
c0VtcHR5KCkpOwpAQCAtNTY3MSwxMSArNTY3OCw2IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpmb2N1
c0FuZFNlbGVjdExhc3RBY3QKICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkZvY3VzQW5kU2VsZWN0TGFzdEFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0KCksIG1fcGFnZUlEKTsK
IH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmlucHV0RGV2aWNlRm9yY2VEaWRDaGFuZ2UoZmxvYXQg
Zm9yY2UsIGludCBzdGFnZSkKLXsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OklucHV0RGV2aWNlRm9yY2VEaWRDaGFuZ2UoZm9yY2UsIHN0YWdlKSwgbV9wYWdlSUQpOwot
fQotCiB2b2lkIFdlYlBhZ2VQcm94eTo6aW1tZWRpYXRlQWN0aW9uRGlkVXBkYXRlKCkKIHsKICAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkltbWVkaWF0ZUFjdGlvbkRpZFVw
ZGF0ZSgpLCBtX3BhZ2VJRCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCShyZXZpc2lvbiAxODI4NDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5NCw3ICs5OTQsNiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZWxlY3RMYXN0QWN0aW9uTWVudVJhbmdlKCk7CiAgICAgdm9pZCBmb2N1c0FuZFNl
bGVjdExhc3RBY3Rpb25NZW51SGl0VGVzdFJlc3VsdCgpOwogCi0gICAgdm9pZCBpbnB1dERldmlj
ZUZvcmNlRGlkQ2hhbmdlKGZsb2F0IGZvcmNlLCBpbnQgc3RhZ2UpOwogICAgIHZvaWQgaW1tZWRp
YXRlQWN0aW9uRGlkVXBkYXRlKCk7CiAgICAgdm9pZCBpbW1lZGlhdGVBY3Rpb25EaWRDYW5jZWwo
KTsKICAgICB2b2lkIGltbWVkaWF0ZUFjdGlvbkRpZENvbXBsZXRlKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCShyZXZpc2lvbiAxODI4NDgpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE0MzEsMTMgKzE0MzEsMTcgQEAgLSAodm9pZClwcmVzc3VyZUNoYW5nZVdpdGhFdmVu
dDooTlNFdmVudAogICAgIGlmIChldmVudCA9PSBfZGF0YS0+X3ByZXNzdXJlRXZlbnQpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIGlmIChfZGF0YS0+X2lnbm9yZXNOb25XaGVlbEV2ZW50cykKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgaWYgKGV2ZW50LnBoYXNlICE9IE5TRXZlbnRQaGFzZUNoYW5n
ZWQgJiYgZXZlbnQucGhhc2UgIT0gTlNFdmVudFBoYXNlQmVnYW4gJiYgZXZlbnQucGhhc2UgIT0g
TlNFdmVudFBoYXNlRW5kZWQpCiAgICAgICAgIHJldHVybjsKIAorICAgIE5hdGl2ZVdlYk1vdXNl
RXZlbnQgd2ViRXZlbnQoZXZlbnQsIF9kYXRhLT5fcHJlc3N1cmVFdmVudCwgc2VsZik7CisgICAg
X2RhdGEtPl9wYWdlLT5oYW5kbGVNb3VzZUV2ZW50KHdlYkV2ZW50KTsKKwogICAgIFtfZGF0YS0+
X3ByZXNzdXJlRXZlbnQgcmVsZWFzZV07CiAgICAgX2RhdGEtPl9wcmVzc3VyZUV2ZW50ID0gW2V2
ZW50IHJldGFpbl07Ci0KLSAgICBfZGF0YS0+X3BhZ2UtPmlucHV0RGV2aWNlRm9yY2VEaWRDaGFu
Z2UoZXZlbnQucHJlc3N1cmUsIGV2ZW50LnN0YWdlKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2lu
WDExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDExLmNwcAkocmV2aXNpb24gMTgyODQ4KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBs
dWdpblgxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NCw2ICs0NzQsOSBAQCBib29sIE5ldHNj
YXBlUGx1Z2luOjpwbGF0Zm9ybUhhbmRsZU1vdXNlCiAgICAgY2FzZSBXZWJFdmVudDo6TW91c2VN
b3ZlOgogICAgICAgICBzZXRYTW90aW9uRXZlbnRGaWVsZHMoeEV2ZW50LCBldmVudCwgY29udmVy
dFRvUm9vdFZpZXcoSW50UG9pbnQoKSkpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE1vdXNl
Rm9yY2VDaGFuZ2VkOgorICAgIGNhc2UgTW91c2VGb3JjZURvd246CisgICAgY2FzZSBNb3VzZUZv
cmNlVXA6CiAgICAgY2FzZSBXZWJFdmVudDo6Tm9UeXBlOgogICAgIGNhc2UgV2ViRXZlbnQ6Oldo
ZWVsOgogICAgIGNhc2UgV2ViRXZlbnQ6OktleURvd246CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxODI4NDgpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5MDMsNiArMTkwMywxNCBAQCBzdGF0aWMgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNv
bnN0IFdlYk1vCiAgICAgICAgICAgICBpZiAob25seVVwZGF0ZVNjcm9sbGJhcnMpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHBhZ2UtPmNvcmVQYWdlKCktPnVzZXJJbnB1dEJyaWRnZSgpLmhhbmRs
ZU1vdXNlTW92ZU9uU2Nyb2xsYmFyRXZlbnQocGxhdGZvcm1Nb3VzZUV2ZW50KTsKICAgICAgICAg
ICAgIHJldHVybiBwYWdlLT5jb3JlUGFnZSgpLT51c2VySW5wdXRCcmlkZ2UoKS5oYW5kbGVNb3Vz
ZU1vdmVFdmVudChwbGF0Zm9ybU1vdXNlRXZlbnQpOworCisgICAgICAgIGNhc2UgUGxhdGZvcm1F
dmVudDo6TW91c2VGb3JjZUNoYW5nZWQ6CisgICAgICAgICAgICByZXR1cm4gcGFnZS0+Y29yZVBh
Z2UoKS0+dXNlcklucHV0QnJpZGdlKCkuaGFuZGxlTW91c2VGb3JjZUNoYW5nZWRFdmVudChwbGF0
Zm9ybU1vdXNlRXZlbnQpOworICAgICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VE
b3duOgorICAgICAgICAgICAgcmV0dXJuIHBhZ2UtPmNvcmVQYWdlKCktPnVzZXJJbnB1dEJyaWRn
ZSgpLmhhbmRsZU1vdXNlRm9yY2VEb3duRXZlbnQocGxhdGZvcm1Nb3VzZUV2ZW50KTsKKyAgICAg
ICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlVXA6CisgICAgICAgICAgICByZXR1cm4g
cGFnZS0+Y29yZVBhZ2UoKS0+dXNlcklucHV0QnJpZGdlKCkuaGFuZGxlTW91c2VGb3JjZVVwRXZl
bnQocGxhdGZvcm1Nb3VzZUV2ZW50KTsKKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDE4
Mjg0OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwOTQsNyArMTA5NCw2IEBAIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0
cjxXZWJDb3JlOjpSYW5nZT4gbG9va3VwVGV4dEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2lu
dCwgTlNEaWN0aW9uYXJ5ICoqb3B0aW9ucyk7CiAgICAgdm9pZCBzZWxlY3RMYXN0QWN0aW9uTWVu
dVJhbmdlKCk7CiAgICAgdm9pZCBmb2N1c0FuZFNlbGVjdExhc3RBY3Rpb25NZW51SGl0VGVzdFJl
c3VsdCgpOwotICAgIHZvaWQgaW5wdXREZXZpY2VGb3JjZURpZENoYW5nZShmbG9hdCBmb3JjZSwg
aW50IHN0YWdlKTsKICAgICB2b2lkIGltbWVkaWF0ZUFjdGlvbkRpZFVwZGF0ZSgpOwogICAgIHZv
aWQgaW1tZWRpYXRlQWN0aW9uRGlkQ2FuY2VsKCk7CiAgICAgdm9pZCBpbW1lZGlhdGVBY3Rpb25E
aWRDb21wbGV0ZSgpOwpAQCAtMTM1NSw3ICsxMzU0LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8
V2ViQ29yZTo6UmFuZ2U+IG1fbGFzdEFjdGlvbk1lbnVSYW5nZUZvclNlbGVjdGlvbjsKICAgICBX
ZWJDb3JlOjpIaXRUZXN0UmVzdWx0IG1fbGFzdEFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0OwogICAg
IFJlZlB0cjxXZWJQYWdlT3ZlcmxheT4gbV9sYXN0QWN0aW9uTWVudUhpdFBhZ2VPdmVybGF5Owot
ICAgIGludCBtX2xhc3RGb3JjZVN0YWdlIHsgMCB9OwogI2VuZGlmCiAKICAgICBib29sIG1fbWFp
bkZyYW1lUHJvZ3Jlc3NDb21wbGV0ZWQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTgyODQ4
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW4JKHdvcmtpbmcgY29weSkKQEAgLTQwNyw3ICs0MDcsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdl
IExlZ2FjeVJlY2VpdmVyIHsKICAgICBQZXJmb3JtQWN0aW9uTWVudUhpdFRlc3RBdExvY2F0aW9u
KFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpb24sIGJvb2wgZm9ySW1tZWRpYXRlQWN0aW9uKQog
ICAgIFNlbGVjdExhc3RBY3Rpb25NZW51UmFuZ2UoKQogICAgIEZvY3VzQW5kU2VsZWN0TGFzdEFj
dGlvbk1lbnVIaXRUZXN0UmVzdWx0KCkKLSAgICBJbnB1dERldmljZUZvcmNlRGlkQ2hhbmdlKGZs
b2F0IGZvcmNlLCBpbnQgc3RhZ2UpCiAgICAgSW1tZWRpYXRlQWN0aW9uRGlkVXBkYXRlKCkKICAg
ICBJbW1lZGlhdGVBY3Rpb25EaWRDYW5jZWwoKQogICAgIEltbWVkaWF0ZUFjdGlvbkRpZENvbXBs
ZXRlKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW0JKHJldmlzaW9uIDE4Mjg0OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE0
MSwyNSArMTE0MSw2IEBAIHZvaWQgV2ViUGFnZTo6Zm9jdXNBbmRTZWxlY3RMYXN0QWN0aW9uTWUK
ICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHBvc2l0aW9uKTsKIH0KIAotdm9p
ZCBXZWJQYWdlOjppbnB1dERldmljZUZvcmNlRGlkQ2hhbmdlKGZsb2F0IGZvcmNlLCBpbnQgc3Rh
Z2UpCi17Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IG1fbGFzdEFjdGlvbk1lbnVIaXRUZXN0UmVz
dWx0LmlubmVyRWxlbWVudCgpOwotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZmxvYXQgb3ZlcmFsbEZvcmNlID0gc3RhZ2UgPCAxID8gZm9yY2UgOiBmb3JjZSArIHN0
YWdlIC0gMTsKLSAgICBlbGVtZW50LT5kaXNwYXRjaE1vdXNlRm9yY2VDaGFuZ2VkKG92ZXJhbGxG
b3JjZSk7Ci0KLSAgICBpZiAobV9sYXN0Rm9yY2VTdGFnZSA9PSAxICYmIHN0YWdlID09IDIpCi0g
ICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoTW91c2VGb3JjZURvd24oKTsKLSAgICBlbHNlIGlmICht
X2xhc3RGb3JjZVN0YWdlID09IDIgJiYgc3RhZ2UgPT0gMSkgewotICAgICAgICBlbGVtZW50LT5k
aXNwYXRjaE1vdXNlRm9yY2VVcCgpOwotICAgICAgICBlbGVtZW50LT5kaXNwYXRjaE1vdXNlRm9y
Y2VDbGljaygpOwotICAgIH0KLQotICAgIG1fbGFzdEZvcmNlU3RhZ2UgPSBzdGFnZTsKLX0KLQog
dm9pZCBXZWJQYWdlOjppbW1lZGlhdGVBY3Rpb25EaWRVcGRhdGUoKQogewogICAgIG1fcGFnZS0+
bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuc2V0SW1tZWRpYXRlQWN0aW9uU3RhZ2UoSW1tZWRp
YXRlQWN0aW9uU3RhZ2U6OkFjdGlvblVwZGF0ZWQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250849</attachid>
            <date>2015-04-15 13:39:07 -0700</date>
            <delta_ts>2015-04-15 23:25:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-3.txt</filename>
            <type>text/plain</type>
            <size>33930</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mjg0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE1LTA0LTE1ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBGb3JjZSBtb3VzZSBldmVudHMgc2hv
dWxkIGdvIHRocm91Z2ggbm9ybWFsIG1vdXNlIGV2ZW50IGhhbmRsaW5nIGNvZGUgcGF0aHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Mzc0OQorICAg
ICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIwNDcyODk1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBtb3ZlcyBhbGwgb2YgdGhlIGNvZGUgdG8gZGlzcGF0Y2ggbW91c2Vmb3JjZWRvd24sIG1v
dXNlZm9yY2V1cCwgYW5kIAorICAgICAgICBtb3VzZWZvcmNlY2hhbmdlZCBpbnRvIG5vcm1hbCBt
b3VzZSBldmVudCBkaXNwYXRjaGluZyBjb2RlLiBUaGlzIHBhdGNoIGxlYXZlcyAKKyAgICAgICAg
YmVoaW5kIHRoZSBjYW5jZWwgYW5kIGNsaWNrIGV2ZW50cyBiZWNhdXNlIHdlIHBsYW4gdG8gcmVt
b3ZlIHRob3NlLCBhbmQgaXQgYWxzbyAKKyAgICAgICAgbGVhdmVzIG1vdXNlZm9yY2V3aWxsYmVn
aW4gYmVjYXVzZSB0aGF0IGlzIG5lY2Vzc2FyaWx5IGEgdmVyeSBkaWZmZXJlbnQgZXZlbnQgbW9y
ZSAKKyAgICAgICAgdGllZCB0byB0aGUgTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXpl
ciB0aGFuIHRoZXNlIG90aGVyIGV2ZW50cyB3aGljaCBhcmUgCisgICAgICAgIHRpZWQgdG8gTlNS
ZXNwb25kZXLigJlzIHByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50LgorCisgICAgICAgIE1vdmUgdGhl
IGNvZGUgdG8gZW5zdXJlIHRoZSBmb3JjZSBldmVudHMgaGF2ZSBsaXN0ZW5lcnMgaW4gb3JkZXIg
dG8gZmlyZSB0byAKKyAgICAgICAgZGlzcGF0Y2hNb3VzZUV2ZW50LCBhbmQgZGVsZXRlIHRoZSBv
bGQgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNoTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3JjZURvd24pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZGlzcGF0Y2hNb3VzZUZvcmNlVXApOiBEZWxldGVkLgor
ICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisKKyAgICAgICAgUGVyZm9ybSBhIGhpdCB0ZXN0IGFu
ZCBwaXBlIHRoZSBldmVudHMgdGhyb3VnaCBkaXNwYXRjaE1vdXNlRXZlbnQoKS4gCisgICAgICAg
ICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpoYW5kbGVNb3VzZUZvcmNlRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6
CisKKyAgICAgICAgTmV3IHR5cGVzIGZvciB0aGUgbmV3IGV2ZW50cy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9QbGF0Zm9ybUV2ZW50Lmg6CisKKyAgICAgICAgRm9yd2FyZCB0byBFdmVudEhhbmRsZXIu
IAorICAgICAgICAqIHJlcGxheS9Vc2VySW5wdXRCcmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VXNlcklucHV0QnJpZGdlOjpoYW5kbGVNb3VzZUZvcmNlQ2hhbmdlZEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlVzZXJJbnB1dEJyaWRnZTo6aGFuZGxlTW91c2VGb3JjZURvd25FdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpVc2VySW5wdXRCcmlkZ2U6OmhhbmRsZU1vdXNlRm9yY2VVcEV2
ZW50KToKKyAgICAgICAgKiByZXBsYXkvVXNlcklucHV0QnJpZGdlLmg6CisKIDIwMTUtMDQtMTQg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGNy
ZWF0aW5nIHNlbmQgcmlnaHRzIGZyb20gc2hhcmVkIG1lbW9yeSBtb3JlIHJvYnVzdApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxODI4NDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTY2LDYgKzM5NjYsMjIgQEAg
UmVmUHRyPEV2ZW50PiBEb2N1bWVudDo6Y3JlYXRlRXZlbnQoY29ucwogICAgIHJldHVybiBudWxs
cHRyOwogfQogCitib29sIERvY3VtZW50OjpoYXNMaXN0ZW5lclR5cGVGb3JFdmVudFR5cGUoUGxh
dGZvcm1FdmVudDo6VHlwZSBldmVudFR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNoKGV2ZW50VHlw
ZSkgeworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6TW91c2VGb3JjZUNoYW5nZWQ6CisgICAgICAg
IHJldHVybiBtX2xpc3RlbmVyVHlwZXMgJiBEb2N1bWVudDo6Rk9SQ0VDSEFOR0VEX0xJU1RFTkVS
OworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6TW91c2VGb3JjZURvd246CisgICAgICAgIHJldHVy
biBtX2xpc3RlbmVyVHlwZXMgJiBEb2N1bWVudDo6Rk9SQ0VET1dOX0xJU1RFTkVSOworICAgIGNh
c2UgUGxhdGZvcm1FdmVudDo6TW91c2VGb3JjZVVwOgorICAgICAgICByZXR1cm4gbV9saXN0ZW5l
clR5cGVzICYgRG9jdW1lbnQ6OkZPUkNFVVBfTElTVEVORVI7CisgICAgY2FzZSBQbGF0Zm9ybUV2
ZW50OjpNb3VzZVNjcm9sbDoKKyAgICAgICAgcmV0dXJuIG1fbGlzdGVuZXJUeXBlcyAmIERvY3Vt
ZW50OjpTQ1JPTExfTElTVEVORVI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwogdm9pZCBEb2N1bWVudDo6YWRkTGlzdGVuZXJUeXBlSWZOZWVkZWQoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCiB7CiAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVu
dE5hbWVzKCkuRE9NU3VidHJlZU1vZGlmaWVkRXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAkocmV2aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUGFnZVZpc2liaWxpdHlT
dGF0ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtRXZlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNj
cmVlbi5oIgogI2luY2x1ZGUgIlJlZmVycmVyUG9saWN5LmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgi
CkBAIC03ODAsNiArNzgxLDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICBib29sIGhhc0xpc3Rl
bmVyVHlwZShMaXN0ZW5lclR5cGUgbGlzdGVuZXJUeXBlKSBjb25zdCB7IHJldHVybiAobV9saXN0
ZW5lclR5cGVzICYgbGlzdGVuZXJUeXBlKTsgfQorICAgIGJvb2wgaGFzTGlzdGVuZXJUeXBlRm9y
RXZlbnRUeXBlKFBsYXRmb3JtRXZlbnQ6OlR5cGUpIGNvbnN0OwogICAgIHZvaWQgYWRkTGlzdGVu
ZXJUeXBlSWZOZWVkZWQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpOwogCiAgICAgYm9v
bCBoYXNNdXRhdGlvbk9ic2VydmVyc09mVHlwZShNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlvblR5
cGUgdHlwZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDE4Mjg0
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQ0LDExICsyNDQsMTkgQEAgYm9vbCBFbGVtZW50OjpzaG91bGRVc2VJbnB1dE1ldGhvZCgpCiAg
ICAgcmV0dXJuIGNvbXB1dGVFZGl0YWJpbGl0eShVc2VyU2VsZWN0QWxsSXNBbHdheXNOb25FZGl0
YWJsZSwgU2hvdWxkVXBkYXRlU3R5bGU6OlVwZGF0ZSkgIT0gRWRpdGFiaWxpdHk6OlJlYWRPbmx5
OwogfQogCitzdGF0aWMgYm9vbCBpc0ZvcmNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBwbGF0Zm9ybUV2ZW50KQoreworICAgIHJldHVybiBwbGF0Zm9ybUV2ZW50LnR5cGUoKSA9PSBQ
bGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlQ2hhbmdlZCB8fCBwbGF0Zm9ybUV2ZW50LnR5cGUoKSA9
PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlRG93biB8fCBwbGF0Zm9ybUV2ZW50LnR5cGUoKSA9
PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlVXA7Cit9CisKIGJvb2wgRWxlbWVudDo6ZGlzcGF0
Y2hNb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgcGxhdGZvcm1FdmVudCwgY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGludCBkZXRhaWwsIEVsZW1lbnQqIHJlbGF0ZWRU
YXJnZXQpCiB7CiAgICAgaWYgKGlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyAgICBpZiAoaXNGb3JjZUV2ZW50KHBsYXRmb3JtRXZlbnQpICYmICFkb2N1
bWVudCgpLmhhc0xpc3RlbmVyVHlwZUZvckV2ZW50VHlwZShwbGF0Zm9ybUV2ZW50LnR5cGUoKSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIFJlZlB0cjxNb3VzZUV2ZW50PiBtb3VzZUV2
ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgZG9jdW1lbnQoKS5kZWZhdWx0Vmll
dygpLCBwbGF0Zm9ybUV2ZW50LCBkZXRhaWwsIHJlbGF0ZWRUYXJnZXQpOwogCiAgICAgaWYgKG1v
dXNlRXZlbnQtPnR5cGUoKS5pc0VtcHR5KCkpCkBAIC0yMjUzLDU0ICsyMjYxLDYgQEAgYm9vbCBF
bGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VXaWxsQmVnaQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VDaGFuZ2VkKGZsb2F0IGZvcmNlKQot
ewotICAgIGlmICghZG9jdW1lbnQoKS5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkZPUkNFQ0hB
TkdFRF9MSVNURU5FUikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50KCkuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBQbGF0Zm9ybU1vdXNlRXZlbnQgcGxhdGZvcm1Nb3VzZUV2ZW50KGZyYW1lLT5ldmVudEhhbmRs
ZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCksIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0
S25vd25Nb3VzZUdsb2JhbFBvc2l0aW9uKCksIE5vQnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpOb1R5
cGUsIDEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBXVEY6OmN1cnJlbnRUaW1lKCksIGZv
cmNlKTsKLSAgICBSZWZQdHI8TW91c2VFdmVudD4gbW91c2VGb3JjZUNoYW5nZWRFdmVudCA9ICBN
b3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2VjaGFuZ2VkRXZl
bnQsIGRvY3VtZW50KCkuZGVmYXVsdFZpZXcoKSwgcGxhdGZvcm1Nb3VzZUV2ZW50LCAwLCBudWxs
cHRyKTsKLQotICAgIG1vdXNlRm9yY2VDaGFuZ2VkRXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAg
ICBkaXNwYXRjaEV2ZW50KG1vdXNlRm9yY2VDaGFuZ2VkRXZlbnQpOwotfQotCi12b2lkIEVsZW1l
bnQ6OmRpc3BhdGNoTW91c2VGb3JjZURvd24oKQotewotICAgIGlmICghZG9jdW1lbnQoKS5oYXNM
aXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkZPUkNFRE9XTl9MSVNURU5FUikpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICBpZiAoIWZy
YW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgcGxhdGZvcm1N
b3VzZUV2ZW50KGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCks
IGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZUdsb2JhbFBvc2l0aW9uKCksIE5v
QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpOb1R5cGUsIDEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh
bHNlLCBXVEY6OmN1cnJlbnRUaW1lKCksIEZvcmNlQXRGb3JjZUNsaWNrKTsKLSAgICBSZWZQdHI8
TW91c2VFdmVudD4gbW91c2VGb3JjZURvd25FdmVudCA9ICBNb3VzZUV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2Vkb3duRXZlbnQsIGRvY3VtZW50KCkuZGVmYXVsdFZp
ZXcoKSwgcGxhdGZvcm1Nb3VzZUV2ZW50LCAwLCBudWxscHRyKTsKLQotICAgIG1vdXNlRm9yY2VE
b3duRXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBkaXNwYXRjaEV2ZW50KG1vdXNlRm9yY2VE
b3duRXZlbnQpOwotfQotCi12b2lkIEVsZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3JjZVVwKCkKLXsK
LSAgICBpZiAoIWRvY3VtZW50KCkuaGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpGT1JDRVVQX0xJ
U1RFTkVSKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQo
KS5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBsYXRm
b3JtTW91c2VFdmVudCBwbGF0Zm9ybU1vdXNlRXZlbnQoZnJhbWUtPmV2ZW50SGFuZGxlcigpLmxh
c3RLbm93bk1vdXNlUG9zaXRpb24oKSwgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmxhc3RLbm93bk1v
dXNlR2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok5vVHlwZSwgMSwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIFdURjo6Y3VycmVudFRpbWUoKSwgRm9yY2VBdEZv
cmNlQ2xpY2spOwotICAgIFJlZlB0cjxNb3VzZUV2ZW50PiBtb3VzZUZvcmNlVXBFdmVudCA9ICBN
b3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2V1cEV2ZW50LCBk
b2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIHBsYXRmb3JtTW91c2VFdmVudCwgMCwgbnVsbHB0cik7
Ci0KLSAgICBtb3VzZUZvcmNlVXBFdmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIGRpc3BhdGNo
RXZlbnQobW91c2VGb3JjZVVwRXZlbnQpOwotfQotCiB2b2lkIEVsZW1lbnQ6OmRpc3BhdGNoTW91
c2VGb3JjZUNsaWNrKCkKIHsKICAgICBpZiAoIWRvY3VtZW50KCkuaGFzTGlzdGVuZXJUeXBlKERv
Y3VtZW50OjpGT1JDRUNMSUNLX0xJU1RFTkVSKSkKQEAgLTIzNDAsMTggKzIzMDAsNiBAQCBib29s
IEVsZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3JjZVdpbGxCZWdpCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIEVsZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3JjZUNoYW5nZWQoZmxvYXQpCi17Ci19
Ci0KLXZvaWQgRWxlbWVudDo6ZGlzcGF0Y2hNb3VzZUZvcmNlRG93bigpCi17Ci19Ci0KLXZvaWQg
RWxlbWVudDo6ZGlzcGF0Y2hNb3VzZUZvcmNlVXAoKQotewotfQotCiB2b2lkIEVsZW1lbnQ6OmRp
c3BhdGNoTW91c2VGb3JjZUNsaWNrKCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAkocmV2
aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDY5LDkgKzQ2OSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hCbHVyRXZlbnQoUmVmUHRyPEVsZW1lbnQ+JiYgbmV3Rm9jdXNlZEVsZW1lbnQpOwogCiAgICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBkaXNwYXRjaE1vdXNlRm9yY2VXaWxsQmVnaW4oKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoTW91c2VGb3JjZUNoYW5nZWQoZmxvYXQgZm9yY2Up
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hNb3VzZUZvcmNlRG93bigpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hNb3VzZUZvcmNlVXAoKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRpc3BhdGNoTW91c2VGb3JjZUNsaWNrKCk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBkaXNwYXRjaE1vdXNlRm9yY2VDYW5jZWxsZWQoKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA1LDYgKzIxMDUs
MzMgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFzZUV2ZQogICAgIHJldHVy
biBzd2FsbG93TW91c2VVcEV2ZW50IHx8IHN3YWxsb3dDbGlja0V2ZW50IHx8IHN3YWxsb3dNb3Vz
ZVJlbGVhc2VFdmVudDsKIH0KIAorI2lmIEVOQUJMRShNT1VTRV9GT1JDRV9FVkVOVFMpCitib29s
IEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VGb3JjZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgZXZlbnQpCit7CisgICAgUmVmUHRyPEZyYW1lVmlldz4gcHJvdGVjdG9yKG1fZnJhbWUu
dmlldygpKTsKKworICAgIHNldExhc3RLbm93bk1vdXNlUG9zaXRpb24oZXZlbnQpOworCisgICAg
SGl0VGVzdFJlcXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBlID0gSGl0VGVzdFJlcXVl
c3Q6OkRpc2FsbG93U2hhZG93Q29udGVudCB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmU7CisKKyAg
ICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KGhpdFR5cGUpOworICAgIE1vdXNlRXZlbnRXaXRoSGl0
VGVzdFJlc3VsdHMgbW91c2VFdmVudCA9IHByZXBhcmVNb3VzZUV2ZW50KHJlcXVlc3QsIGV2ZW50
KTsKKworICAgIGJvb2wgc3dhbGxvd2VkRXZlbnQgPSAhZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50
TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNlY2hhbmdlZEV2ZW50LCBtb3VzZUV2ZW50LnRhcmdldE5v
ZGUoKSwgZmFsc2UsIDAsIGV2ZW50LCBmYWxzZSk7CisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBQ
bGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlRG93bikKKyAgICAgICAgc3dhbGxvd2VkRXZlbnQgPSAh
ZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNlZG93bkV2ZW50
LCBtb3VzZUV2ZW50LnRhcmdldE5vZGUoKSwgZmFsc2UsIDAsIGV2ZW50LCBmYWxzZSk7CisgICAg
aWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlVXApCisgICAgICAg
IHN3YWxsb3dlZEV2ZW50ID0gIWRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkud2Via2l0
bW91c2Vmb3JjZXVwRXZlbnQsIG1vdXNlRXZlbnQudGFyZ2V0Tm9kZSgpLCBmYWxzZSwgMCwgZXZl
bnQsIGZhbHNlKTsKKworICAgIHJldHVybiBzd2FsbG93ZWRFdmVudDsKK30KKyNlbHNlCitib29s
IEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VGb3JjZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAvLyAjaWYgRU5BQkxFKE1P
VVNFX0ZPUkNFX0VWRU5UUykKKwogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVBhc3RlR2xvYmFs
U2VsZWN0aW9uKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgcGxhdGZvcm1Nb3VzZUV2ZW50KQog
ewogICAgIC8vIElmIHRoZSBldmVudCB3YXMgYSBtaWRkbGUgY2xpY2ssIGF0dGVtcHQgdG8gY29w
eSBnbG9iYWwgc2VsZWN0aW9uIGluIGFmdGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmgJKHJldmlzaW9uIDE4Mjg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw2ICsyMDIsNyBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50Jik7CiAgICAgYm9vbCBoYW5kbGVNb3VzZU1vdmVFdmVudChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmLCBIaXRUZXN0UmVzdWx0KiBob3ZlcmVkTm9kZSA9IDAsIGJvb2wgb25seVVwZGF0
ZVNjcm9sbGJhcnMgPSBmYWxzZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYW5kbGVNb3Vz
ZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICBib29sIGhhbmRs
ZU1vdXNlRm9yY2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7
CiAgICAgdm9pZCBkZWZhdWx0V2hlZWxFdmVudEhhbmRsZXIoTm9kZSosIFdoZWVsRXZlbnQqKTsK
ICAgICBib29sIGhhbmRsZVBhc3RlR2xvYmFsU2VsZWN0aW9uKGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1FdmVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXZlbnQuaAkocmV2
aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1FdmVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw5IEBAIHB1YmxpYzoKICAgICAgICAgTW91c2VN
b3ZlZCwKICAgICAgICAgTW91c2VQcmVzc2VkLAogICAgICAgICBNb3VzZVJlbGVhc2VkLAorICAg
ICAgICBNb3VzZUZvcmNlQ2hhbmdlZCwKKyAgICAgICAgTW91c2VGb3JjZURvd24sCisgICAgICAg
IE1vdXNlRm9yY2VVcCwKICAgICAgICAgTW91c2VTY3JvbGwsCiAKICAgICAgICAgLy8gUGxhdGZv
cm1XaGVlbEV2ZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZXBsYXkvVXNlcklucHV0QnJpZGdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZXBsYXkvVXNlcklucHV0QnJpZGdl
LmNwcAkocmV2aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYkNvcmUvcmVwbGF5L1VzZXJJbnB1
dEJyaWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsMjEgQEAgYm9vbCBVc2Vy
SW5wdXRCcmlkZ2U6OmhhbmRsZU1vdXNlTW92ZU9uUwogICAgIHJldHVybiBtX3BhZ2UubWFpbkZy
YW1lKCkuZXZlbnRIYW5kbGVyKCkucGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyhtb3Vz
ZUV2ZW50KTsKIH0KIAorYm9vbCBVc2VySW5wdXRCcmlkZ2U6OmhhbmRsZU1vdXNlRm9yY2VDaGFu
Z2VkRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBJbnB1dFNvdXJj
ZSkKK3sKKyAgICByZXR1cm4gbV9wYWdlLm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhhbmRs
ZU1vdXNlRm9yY2VFdmVudChtb3VzZUV2ZW50KTsKK30KKworYm9vbCBVc2VySW5wdXRCcmlkZ2U6
OmhhbmRsZU1vdXNlRm9yY2VEb3duRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3Vz
ZUV2ZW50LCBJbnB1dFNvdXJjZSkKK3sKKyAgICByZXR1cm4gbV9wYWdlLm1haW5GcmFtZSgpLmV2
ZW50SGFuZGxlcigpLmhhbmRsZU1vdXNlRm9yY2VFdmVudChtb3VzZUV2ZW50KTsKK30KKworYm9v
bCBVc2VySW5wdXRCcmlkZ2U6OmhhbmRsZU1vdXNlRm9yY2VVcEV2ZW50KGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYgbW91c2VFdmVudCwgSW5wdXRTb3VyY2UpCit7CisgICAgcmV0dXJuIG1fcGFn
ZS5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oYW5kbGVNb3VzZUZvcmNlRXZlbnQobW91c2VF
dmVudCk7Cit9CisKIGJvb2wgVXNlcklucHV0QnJpZGdlOjpoYW5kbGVLZXlFdmVudChjb25zdCBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQmIGtleUV2ZW50LCBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSkK
IHsKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlcGxheS9V
c2VySW5wdXRCcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZXBsYXkvVXNl
cklucHV0QnJpZGdlLmgJKHJldmlzaW9uIDE4Mjg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlcGxh
eS9Vc2VySW5wdXRCcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsOSBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBJbnB1dFNvdXJjZSBzb3VyY2UgPSBJbnB1dFNvdXJjZTo6
VXNlcik7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYW5kbGVNb3VzZU1vdmVFdmVudChjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBJbnB1dFNvdXJjZSBzb3VyY2UgPSBJbnB1dFNvdXJjZTo6
VXNlcik7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYW5kbGVNb3VzZU1vdmVPblNjcm9sbGJh
ckV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIElucHV0U291cmNlIHNvdXJjZSA9IElu
cHV0U291cmNlOjpVc2VyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhbmRsZU1vdXNlRm9y
Y2VDaGFuZ2VkRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgSW5wdXRTb3VyY2UgPSBJ
bnB1dFNvdXJjZTo6VXNlcik7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYW5kbGVNb3VzZUZv
cmNlRG93bkV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIElucHV0U291cmNlID0gSW5w
dXRTb3VyY2U6OlVzZXIpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFuZGxlTW91c2VGb3Jj
ZVVwRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgSW5wdXRTb3VyY2UgPSBJbnB1dFNv
dXJjZTo6VXNlcik7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIElucHV0U291cmNlIHNvdXJjZSA9IElucHV0U291cmNl
OjpVc2VyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhbmRsZUtleUV2ZW50KGNvbnN0IFBs
YXRmb3JtS2V5Ym9hcmRFdmVudCYsIElucHV0U291cmNlIHNvdXJjZSA9IElucHV0U291cmNlOjpV
c2VyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhbmRsZUFjY2Vzc0tleUV2ZW50KGNvbnN0
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYsIElucHV0U291cmNlIHNvdXJjZSA9IElucHV0U291cmNl
OjpVc2VyKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mjg0OSkKKysrIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE1LTA0LTE1
ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBGb3JjZSBtb3VzZSBl
dmVudHMgc2hvdWxkIGdvIHRocm91Z2ggbm9ybWFsIG1vdXNlIGV2ZW50IGhhbmRsaW5nIGNvZGUg
cGF0aHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
Mzc0OQorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9ibGVt
LzIwNDcyODk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBtYWtlcyBwcmVzc3VyZUNoYW5nZVdpdGhFdmVudCBjcmVhdGUgTmF0aXZl
V2ViTW91c2VFdmVudHMgd2l0aCB0aGUgCisgICAgICAgIE5TRXZlbnRUeXBlUHJlc3N1cmVzIHRo
YXQgaXMgZ2V0cyBhbmQgc2VuZHMgdGhvc2UgZG93biB0byB0aGUgd2ViIHByb2Nlc3MuCisKKyAg
ICAgICAgUmUtbmFtZSBwcmVzc3VyZUV2ZW50IHRvIGxhc3RQcmVzc3VyZUV2ZW50LiBOb3cgdGhh
dCBldmVudCBjYW4gc29tZXRpbWVzIGJlIGFuIAorICAgICAgICBOU0V2ZW50VHlwZVByZXNzdXJl
LCB0aGUgbmV3IG5hbWUgbWFrZXMgaXQgY2xlYXIgaG93IHRoZSBzZWNvbmQgcGFyYW1ldGVyIGRp
ZmZlcnMgCisgICAgICAgIGZyb20gdGhlIGZpcnN0LgorICAgICAgICAqIFNoYXJlZC9OYXRpdmVX
ZWJNb3VzZUV2ZW50Lmg6CisKKyAgICAgICAgTmV3IGV2ZW50IHR5cGVzIGZvciB0aGUgbmV3IHR5
cGVzIG9mIGV2ZW50cy4KKyAgICAgICAgKiBTaGFyZWQvV2ViRXZlbnQuaDoKKyAgICAgICAgKiBT
aGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0MlBs
YXRmb3JtTW91c2VFdmVudDo6V2ViS2l0MlBsYXRmb3JtTW91c2VFdmVudCk6CisgICAgICAgICog
U2hhcmVkL21hYy9OYXRpdmVXZWJNb3VzZUV2ZW50TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpO
YXRpdmVXZWJNb3VzZUV2ZW50OjpOYXRpdmVXZWJNb3VzZUV2ZW50KToKKyAgICAgICAgKiBTaGFy
ZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5oOgorCisgICAgICAgIEFsbCBvZiB0aGUgc3F1YXJlLXBl
Zywgcm91bmQtaG9sZSBwcm9ibGVtcyBvZiBtYXNzYWdpbmcgdGhlIE5TRXZlbnRUeXBlUHJlc3N1
cmVzIAorICAgICAgICBldmVudHMgaW50byBXZWJNb3VzZUV2ZW50cyBpcyB0YWtlbiBjYXJlIG9m
IGhlcmUuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkubW06CisgICAgICAg
IChXZWJLaXQ6Om1vdXNlQnV0dG9uRm9yRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpnbG9iYWxQ
b2ludEZvckV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6cG9pbnRGb3JFdmVudCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudCk6CisKKyAgICAg
ICAgSW5zdGVhZCBvZiBjYWxsaW5nIHRoZSBvbGQgaW5wdXREZXZpY2VGb3JjZURpZENoYW5nZSwg
Y3JlYXRlIGEgTmF0aXZlV2ViTW91c2VFdmVudCAKKyAgICAgICAgYW5kIGhhbmRsZSBpdC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBw
cmVzc3VyZUNoYW5nZVdpdGhFdmVudDpdKToKKworICAgICAgICBIYW5kbGUgdGhlIG5ldyB0eXBl
cy4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlRXZlbnQpOgorCisgICAgICAgIENhbiBkZWxldGUg
aW5wdXREZXZpY2VGb3JjZURpZENoYW5nZSBzaW5jZSBpdOKAmXMgbm8gbG9uZ2VyIHVzZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5wdXREZXZpY2VGb3JjZURpZENoYW5nZSk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorCisgICAgICAg
IEhhbmRsZSB0aGUgbmV3IHR5cGVzIG9mIG1vdXNlIGV2ZW50cyBwcm9wZXJseS4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OmhhbmRs
ZU1vdXNlRXZlbnQpOgorCisgICAgICAgIERlbGV0ZSBpbnB1dERldmljZUZvcmNlRGlkQ2hhbmdl
KCkgYW5kIG1fbGFzdEZvcmNlU3RhZ2UuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OmlucHV0RGV2aWNlRm9yY2VEaWRDaGFuZ2UpOiBEZWxldGVk
LgorCisgICAgICAgIEhhbmRsZSBuZXcgV2ViRXZlbnQgdHlwZXMuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpblgxMS5jcHA6CisKIDIwMTUt
MDQtMTUgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMjA1NDkyOTg+IE5vIG1hdGNoaW5nIF9fTlNpXyBkZWZpbml0aW9uIGZvciBwb3N0
cHJvY2Vzc2VkIHZhbHVlIG9mIFdLX3tNQUMsSU9TfV9UQkEKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaAkocmV2aXNpb24gMTgyODQ4KQorKysgU291
cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIE5hdGl2ZVdlYk1vdXNl
RXZlbnQgOiBwdWJsaWMgV2ViTW91c2VFdmVudCB7CiBwdWJsaWM6CiAjaWYgVVNFKEFQUEtJVCkK
LSAgICBOYXRpdmVXZWJNb3VzZUV2ZW50KE5TRXZlbnQgKiwgTlNFdmVudCAqcHJlc3N1cmVFdmVu
dCwgTlNWaWV3ICopOworICAgIE5hdGl2ZVdlYk1vdXNlRXZlbnQoTlNFdmVudCAqLCBOU0V2ZW50
ICpsYXN0UHJlc3N1cmVFdmVudCwgTlNWaWV3ICopOwogI2VsaWYgUExBVEZPUk0oR1RLKQogICAg
IE5hdGl2ZVdlYk1vdXNlRXZlbnQoY29uc3QgTmF0aXZlV2ViTW91c2VFdmVudCYpOwogICAgIE5h
dGl2ZVdlYk1vdXNlRXZlbnQoR2RrRXZlbnQqLCBpbnQpOwpJbmRleDogU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkV2ZW50LmgJKHJldmlzaW9uIDE4Mjg0OCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJF
dmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw5IEBAIHB1YmxpYzoKICAgICAgICAg
TW91c2VEb3duLAogICAgICAgICBNb3VzZVVwLAogICAgICAgICBNb3VzZU1vdmUsCisgICAgICAg
IE1vdXNlRm9yY2VDaGFuZ2VkLAorICAgICAgICBNb3VzZUZvcmNlRG93biwKKyAgICAgICAgTW91
c2VGb3JjZVVwLAogCiAgICAgICAgIC8vIFdlYldoZWVsRXZlbnQKICAgICAgICAgV2hlZWwsCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcAkocmV2
aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDE4IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIG1fdHlwZSA9IFdlYkNvcmU6OlBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQ7CiAgICAgICAg
ICAgICBtX2ZvcmNlID0gd2ViRXZlbnQuZm9yY2UoKTsKICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZUZvcmNlQ2hhbmdlZDoKKyAgICAgICAgICAgIG1fdHlw
ZSA9IFdlYkNvcmU6OlBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VDaGFuZ2VkOworICAgICAgICAg
ICAgbV9mb3JjZSA9IHdlYkV2ZW50LmZvcmNlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBXZWJFdmVudDo6TW91c2VGb3JjZURvd246CisgICAgICAgICAgICBtX3R5cGUgPSBX
ZWJDb3JlOjpQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlRG93bjsKKyAgICAgICAgICAgIG1fZm9y
Y2UgPSBXZWJDb3JlOjpGb3JjZUF0Rm9yY2VDbGljazsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZUZvcmNlVXA6CisgICAgICAgICAgICBtX3R5cGUgPSBX
ZWJDb3JlOjpQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlVXA7CisgICAgICAgICAgICBtX2ZvcmNl
ID0gV2ViQ29yZTo6Rm9yY2VBdEZvcmNlQ2xpY2s7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL05hdGl2ZVdlYk1vdXNlRXZlbnRNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9OYXRpdmVXZWJNb3Vz
ZUV2ZW50TWFjLm1tCShyZXZpc2lvbiAxODI4NDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL05hdGl2ZVdlYk1vdXNlRXZlbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMy
LDggQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLU5hdGl2ZVdlYk1vdXNlRXZlbnQ6Ok5hdGl2
ZVdlYk1vdXNlRXZlbnQoTlNFdmVudCAqZXZlbnQsIE5TRXZlbnQgKnByZXNzdXJlRXZlbnQsIE5T
VmlldyAqdmlldykKLSAgICA6IFdlYk1vdXNlRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVX
ZWJNb3VzZUV2ZW50KGV2ZW50LCBwcmVzc3VyZUV2ZW50LCB2aWV3KSkKK05hdGl2ZVdlYk1vdXNl
RXZlbnQ6Ok5hdGl2ZVdlYk1vdXNlRXZlbnQoTlNFdmVudCAqZXZlbnQsIE5TRXZlbnQgKmxhc3RQ
cmVzc3VyZUV2ZW50LCBOU1ZpZXcgKnZpZXcpCisgICAgOiBXZWJNb3VzZUV2ZW50KFdlYkV2ZW50
RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudChldmVudCwgbGFzdFByZXNzdXJlRXZlbnQsIHZp
ZXcpKQogICAgICwgbV9uYXRpdmVFdmVudChldmVudCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkuaAkocmV2aXNpb24gMTgyODQ4KQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkuaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYkV2ZW50RmFj
dG9yeSB7CiBwdWJsaWM6CiAjaWYgVVNFKEFQUEtJVCkKLSAgICBzdGF0aWMgV2ViTW91c2VFdmVu
dCBjcmVhdGVXZWJNb3VzZUV2ZW50KE5TRXZlbnQgKiwgTlNFdmVudCAqcHJlc3N1cmVFdmVudCwg
TlNWaWV3ICp3aW5kb3dWaWV3KTsKKyAgICBzdGF0aWMgV2ViTW91c2VFdmVudCBjcmVhdGVXZWJN
b3VzZUV2ZW50KE5TRXZlbnQgKiwgTlNFdmVudCAqbGFzdFByZXNzdXJlRXZlbnQsIE5TVmlldyAq
d2luZG93Vmlldyk7CiAgICAgc3RhdGljIFdlYldoZWVsRXZlbnQgY3JlYXRlV2ViV2hlZWxFdmVu
dChOU0V2ZW50ICosIE5TVmlldyAqd2luZG93Vmlldyk7CiAgICAgc3RhdGljIFdlYktleWJvYXJk
RXZlbnQgY3JlYXRlV2ViS2V5Ym9hcmRFdmVudChOU0V2ZW50ICosIGJvb2wgaGFuZGxlZEJ5SW5w
dXRNZXRob2QsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jik7CiAgICAg
c3RhdGljIGJvb2wgc2hvdWxkQmVIYW5kbGVkQXNDb250ZXh0Q2xpY2soY29uc3QgV2ViQ29yZTo6
UGxhdGZvcm1Nb3VzZUV2ZW50Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dl
YkV2ZW50RmFjdG9yeS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1dlYkV2ZW50RmFjdG9yeS5tbQkocmV2aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkubW0JKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2
LDkgQEAgc3RhdGljIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBtb3VzZUJ1dHRvbgogICAgICAgICBj
YXNlIE5TT3RoZXJNb3VzZVVwOgogICAgICAgICBjYXNlIE5TT3RoZXJNb3VzZURyYWdnZWQ6CiAg
ICAgICAgICAgICByZXR1cm4gV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOworI2lmIF9fTUFD
X09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEwMDMKKyAgICAgICAgY2FzZSBOU0V2ZW50
VHlwZVByZXNzdXJlOgorI2VuZGlmCiAgICAgICAgIGNhc2UgTlNNb3VzZUVudGVyZWQ6CiAgICAg
ICAgIGNhc2UgTlNNb3VzZUV4aXRlZDoKICAgICAgICAgICAgIHJldHVybiBjdXJyZW50TW91c2VC
dXR0b24oKTsKQEAgLTE1Niw1MCArMTU5LDU2IEBAIHN0YXRpYyBOU1BvaW50IGdsb2JhbFBvaW50
KGNvbnN0IE5TUG9pbnQKIHN0YXRpYyBOU1BvaW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoTlNFdmVu
dCAqZXZlbnQpCiB7CiAgICAgc3dpdGNoIChbZXZlbnQgdHlwZV0pIHsKLSAgICAgICAgY2FzZSBO
U0xlZnRNb3VzZURvd246Ci0gICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEcmFnZ2VkOgotICAgICAg
ICBjYXNlIE5TTGVmdE1vdXNlVXA6Ci0gICAgICAgIGNhc2UgTlNNb3VzZUVudGVyZWQ6Ci0gICAg
ICAgIGNhc2UgTlNNb3VzZUV4aXRlZDoKLSAgICAgICAgY2FzZSBOU01vdXNlTW92ZWQ6Ci0gICAg
ICAgIGNhc2UgTlNPdGhlck1vdXNlRG93bjoKLSAgICAgICAgY2FzZSBOU090aGVyTW91c2VEcmFn
Z2VkOgotICAgICAgICBjYXNlIE5TT3RoZXJNb3VzZVVwOgotICAgICAgICBjYXNlIE5TUmlnaHRN
b3VzZURvd246Ci0gICAgICAgIGNhc2UgTlNSaWdodE1vdXNlRHJhZ2dlZDoKLSAgICAgICAgY2Fz
ZSBOU1JpZ2h0TW91c2VVcDoKLSAgICAgICAgY2FzZSBOU1Njcm9sbFdoZWVsOgotICAgICAgICAg
ICAgcmV0dXJuIGdsb2JhbFBvaW50KFtldmVudCBsb2NhdGlvbkluV2luZG93XSwgW2V2ZW50IHdp
bmRvd10pOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50
OworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEwMDMKKyAgICBjYXNl
IE5TRXZlbnRUeXBlUHJlc3N1cmU6CisjZW5kaWYKKyAgICBjYXNlIE5TTGVmdE1vdXNlRG93bjoK
KyAgICBjYXNlIE5TTGVmdE1vdXNlRHJhZ2dlZDoKKyAgICBjYXNlIE5TTGVmdE1vdXNlVXA6Cisg
ICAgY2FzZSBOU01vdXNlRW50ZXJlZDoKKyAgICBjYXNlIE5TTW91c2VFeGl0ZWQ6CisgICAgY2Fz
ZSBOU01vdXNlTW92ZWQ6CisgICAgY2FzZSBOU090aGVyTW91c2VEb3duOgorICAgIGNhc2UgTlNP
dGhlck1vdXNlRHJhZ2dlZDoKKyAgICBjYXNlIE5TT3RoZXJNb3VzZVVwOgorICAgIGNhc2UgTlNS
aWdodE1vdXNlRG93bjoKKyAgICBjYXNlIE5TUmlnaHRNb3VzZURyYWdnZWQ6CisgICAgY2FzZSBO
U1JpZ2h0TW91c2VVcDoKKyAgICBjYXNlIE5TU2Nyb2xsV2hlZWw6CisgICAgICAgIHJldHVybiBn
bG9iYWxQb2ludChbZXZlbnQgbG9jYXRpb25JbldpbmRvd10sIFtldmVudCB3aW5kb3ddKTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7CiAgICAgfQogfQogCiBzdGF0
aWMgTlNQb2ludCBwb2ludEZvckV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKndpbmRvd1Zp
ZXcpCiB7CiAgICAgc3dpdGNoIChbZXZlbnQgdHlwZV0pIHsKLSAgICAgICAgY2FzZSBOU0xlZnRN
b3VzZURvd246Ci0gICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEcmFnZ2VkOgotICAgICAgICBjYXNl
IE5TTGVmdE1vdXNlVXA6Ci0gICAgICAgIGNhc2UgTlNNb3VzZUVudGVyZWQ6Ci0gICAgICAgIGNh
c2UgTlNNb3VzZUV4aXRlZDoKLSAgICAgICAgY2FzZSBOU01vdXNlTW92ZWQ6Ci0gICAgICAgIGNh
c2UgTlNPdGhlck1vdXNlRG93bjoKLSAgICAgICAgY2FzZSBOU090aGVyTW91c2VEcmFnZ2VkOgot
ICAgICAgICBjYXNlIE5TT3RoZXJNb3VzZVVwOgotICAgICAgICBjYXNlIE5TUmlnaHRNb3VzZURv
d246Ci0gICAgICAgIGNhc2UgTlNSaWdodE1vdXNlRHJhZ2dlZDoKLSAgICAgICAgY2FzZSBOU1Jp
Z2h0TW91c2VVcDoKLSAgICAgICAgY2FzZSBOU1Njcm9sbFdoZWVsOiB7Ci0gICAgICAgICAgICAv
LyBOb3RlOiBUaGlzIHdpbGwgaGF2ZSBpdHMgb3JpZ2luIGF0IHRoZSBib3R0b20gbGVmdCBvZiB0
aGUgd2luZG93IHVubGVzcyB3aW5kb3dWaWV3IGlzIGZsaXBwZWQuCi0gICAgICAgICAgICAvLyBJ
biB0aG9zZSBjYXNlcywgdGhlIFkgY29vcmRpbmF0ZSBnZXRzIGZsaXBwZWQgYnkgV2lkZ2V0Ojpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cuCi0gICAgICAgICAgICBOU1BvaW50IGxvY2F0aW9u
ID0gW2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddOwotICAgICAgICAgICAgaWYgKHdpbmRvd1ZpZXcp
Ci0gICAgICAgICAgICAgICAgbG9jYXRpb24gPSBbd2luZG93VmlldyBjb252ZXJ0UG9pbnQ6bG9j
YXRpb24gZnJvbVZpZXc6bmlsXTsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAg
ICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50Owor
I2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEwMDMKKyAgICBjYXNlIE5T
RXZlbnRUeXBlUHJlc3N1cmU6CisjZW5kaWYKKyAgICBjYXNlIE5TTGVmdE1vdXNlRG93bjoKKyAg
ICBjYXNlIE5TTGVmdE1vdXNlRHJhZ2dlZDoKKyAgICBjYXNlIE5TTGVmdE1vdXNlVXA6CisgICAg
Y2FzZSBOU01vdXNlRW50ZXJlZDoKKyAgICBjYXNlIE5TTW91c2VFeGl0ZWQ6CisgICAgY2FzZSBO
U01vdXNlTW92ZWQ6CisgICAgY2FzZSBOU090aGVyTW91c2VEb3duOgorICAgIGNhc2UgTlNPdGhl
ck1vdXNlRHJhZ2dlZDoKKyAgICBjYXNlIE5TT3RoZXJNb3VzZVVwOgorICAgIGNhc2UgTlNSaWdo
dE1vdXNlRG93bjoKKyAgICBjYXNlIE5TUmlnaHRNb3VzZURyYWdnZWQ6CisgICAgY2FzZSBOU1Jp
Z2h0TW91c2VVcDoKKyAgICBjYXNlIE5TU2Nyb2xsV2hlZWw6IHsKKyAgICAgICAgLy8gTm90ZTog
VGhpcyB3aWxsIGhhdmUgaXRzIG9yaWdpbiBhdCB0aGUgYm90dG9tIGxlZnQgb2YgdGhlIHdpbmRv
dyB1bmxlc3Mgd2luZG93VmlldyBpcyBmbGlwcGVkLgorICAgICAgICAvLyBJbiB0aG9zZSBjYXNl
cywgdGhlIFkgY29vcmRpbmF0ZSBnZXRzIGZsaXBwZWQgYnkgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNv
bnRhaW5pbmdXaW5kb3cuCisgICAgICAgIE5TUG9pbnQgbG9jYXRpb24gPSBbZXZlbnQgbG9jYXRp
b25JbldpbmRvd107CisgICAgICAgIGlmICh3aW5kb3dWaWV3KQorICAgICAgICAgICAgbG9jYXRp
b24gPSBbd2luZG93VmlldyBjb252ZXJ0UG9pbnQ6bG9jYXRpb24gZnJvbVZpZXc6bmlsXTsKKyAg
ICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gTlNaZXJvUG9pbnQ7CiAgICAgfQogfQogCkBAIC0zNTgsMjUgKzM2NywzOCBAQCBib29sIFdl
YkV2ZW50RmFjdG9yeTo6c2hvdWxkQmVIYW5kbGVkQXNDCiAgICAgcmV0dXJuIChzdGF0aWNfY2Fz
dDxOU01lbnVUeXBlPihldmVudC5tZW51VHlwZUZvckV2ZW50KCkpID09IE5TTWVudVR5cGVDb250
ZXh0TWVudSk7CiB9CiAKLVdlYk1vdXNlRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJN
b3VzZUV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU0V2ZW50ICpwcmVzc3VyZUV2ZW50LCBOU1ZpZXcg
KndpbmRvd1ZpZXcpCitXZWJNb3VzZUV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91
c2VFdmVudChOU0V2ZW50ICpldmVudCwgTlNFdmVudCAqbGFzdFByZXNzdXJlRXZlbnQsIE5TVmll
dyAqd2luZG93VmlldykKIHsKICAgICBOU1BvaW50IHBvc2l0aW9uID0gcG9pbnRGb3JFdmVudChl
dmVudCwgd2luZG93Vmlldyk7CiAgICAgTlNQb2ludCBnbG9iYWxQb3NpdGlvbiA9IGdsb2JhbFBv
aW50Rm9yRXZlbnQoZXZlbnQpOwogCi0gICAgV2ViRXZlbnQ6OlR5cGUgdHlwZSAgICAgICAgICAg
ICAgICAgICAgID0gbW91c2VFdmVudFR5cGVGb3JFdmVudChldmVudCk7Ci0gICAgV2ViTW91c2VF
dmVudDo6QnV0dG9uIGJ1dHRvbiAgICAgICAgICAgID0gbW91c2VCdXR0b25Gb3JFdmVudChldmVu
dCk7Ci0gICAgZmxvYXQgZGVsdGFYICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gW2V2ZW50
IGRlbHRhWF07Ci0gICAgZmxvYXQgZGVsdGFZICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
W2V2ZW50IGRlbHRhWV07Ci0gICAgZmxvYXQgZGVsdGFaICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gW2V2ZW50IGRlbHRhWl07Ci0gICAgaW50IGNsaWNrQ291bnQgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gY2xpY2tDb3VudEZvckV2ZW50KGV2ZW50KTsKLSAgICBXZWJFdmVudDo6TW9k
aWZpZXJzIG1vZGlmaWVycyAgICAgICAgICAgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7Ci0g
ICAgZG91YmxlIHRpbWVzdGFtcCAgICAgICAgICAgICAgICAgICAgICAgID0gZXZlbnRUaW1lU3Rh
bXBTaW5jZTE5NzAoZXZlbnQpOwotICAgIGludCBldmVudE51bWJlciAgICAgICAgICAgICAgICAg
ICAgICAgICA9IFtldmVudCBldmVudE51bWJlcl07Ci0gICAgaW50IG1lbnVUeXBlRm9yRXZlbnQg
ICAgICAgICAgICAgICAgICAgID0gdHlwZUZvckV2ZW50KGV2ZW50KTsKKyAgICBXZWJFdmVudDo6
VHlwZSB0eXBlID0gbW91c2VFdmVudFR5cGVGb3JFdmVudChldmVudCk7CisjaWYgX19NQUNfT1Nf
WF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAwMworICAgIGlmIChbZXZlbnQgdHlwZV0gPT0g
TlNFdmVudFR5cGVQcmVzc3VyZSkgeworICAgICAgICAvLyBTaW5jZSBBcHBLaXQgZG9lc24ndCBz
ZW5kIG1vdXNlIGV2ZW50cyBmb3IgZm9yY2UgZG93biBvciBmb3JjZSB1cCwgd2UgaGF2ZSB0byB1
c2UgdGhlIGN1cnJlbnQgcHJlc3N1cmUKKyAgICAgICAgLy8gZXZlbnQgYW5kIGxhc3RQcmVzc3Vy
ZUV2ZW50IHRvIGRldGVjdCBpZiB0aGlzIGlzIE1vdXNlRm9yY2VEb3duLCBNb3VzZUZvcmNlVXAs
IG9yIGp1c3QgTW91c2VGb3JjZUNoYW5nZWQuCisgICAgICAgIGlmIChsYXN0UHJlc3N1cmVFdmVu
dC5zdGFnZSA9PSAxICYmIGV2ZW50LnN0YWdlID09IDIpCisgICAgICAgICAgICB0eXBlID0gV2Vi
RXZlbnQ6Ok1vdXNlRm9yY2VEb3duOworICAgICAgICBlbHNlIGlmIChsYXN0UHJlc3N1cmVFdmVu
dC5zdGFnZSA9PSAyICYmIGV2ZW50LnN0YWdlID09IDEpCisgICAgICAgICAgICB0eXBlID0gV2Vi
RXZlbnQ6Ok1vdXNlRm9yY2VVcDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHlwZSA9IFdl
YkV2ZW50OjpNb3VzZUZvcmNlQ2hhbmdlZDsKKyAgICB9CisjZW5kaWYKKworICAgIFdlYk1vdXNl
RXZlbnQ6OkJ1dHRvbiBidXR0b24gPSBtb3VzZUJ1dHRvbkZvckV2ZW50KGV2ZW50KTsKKyAgICBm
bG9hdCBkZWx0YVggPSBbZXZlbnQgZGVsdGFYXTsKKyAgICBmbG9hdCBkZWx0YVkgPSBbZXZlbnQg
ZGVsdGFZXTsKKyAgICBmbG9hdCBkZWx0YVogPSBbZXZlbnQgZGVsdGFaXTsKKyAgICBpbnQgY2xp
Y2tDb3VudCA9IGNsaWNrQ291bnRGb3JFdmVudChldmVudCk7CisgICAgV2ViRXZlbnQ6Ok1vZGlm
aWVycyBtb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7CisgICAgZG91YmxlIHRp
bWVzdGFtcCA9IGV2ZW50VGltZVN0YW1wU2luY2UxOTcwKGV2ZW50KTsKKyAgICBpbnQgZXZlbnRO
dW1iZXIgPSBbZXZlbnQgZXZlbnROdW1iZXJdOworICAgIGludCBtZW51VHlwZUZvckV2ZW50ID0g
dHlwZUZvckV2ZW50KGV2ZW50KTsKIAogICAgIGRvdWJsZSBmb3JjZSA9IDA7CiAjaWYgX19NQUNf
T1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAwMwotICAgIGZvcmNlID0gcHJlc3N1cmVF
dmVudC5zdGFnZSA8IDEgPyBwcmVzc3VyZUV2ZW50LnByZXNzdXJlIDogcHJlc3N1cmVFdmVudC5w
cmVzc3VyZSArIHByZXNzdXJlRXZlbnQuc3RhZ2UgLSAxOworICAgIGZvcmNlID0gbGFzdFByZXNz
dXJlRXZlbnQuc3RhZ2UgPCAxID8gbGFzdFByZXNzdXJlRXZlbnQucHJlc3N1cmUgOiBsYXN0UHJl
c3N1cmVFdmVudC5wcmVzc3VyZSArIGxhc3RQcmVzc3VyZUV2ZW50LnN0YWdlIC0gMTsKICNlbmRp
ZgogCiAgICAgcmV0dXJuIFdlYk1vdXNlRXZlbnQodHlwZSwgYnV0dG9uLCBJbnRQb2ludChwb3Np
dGlvbiksIEludFBvaW50KGdsb2JhbFBvc2l0aW9uKSwgZGVsdGFYLCBkZWx0YVksIGRlbHRhWiwg
Y2xpY2tDb3VudCwgbW9kaWZpZXJzLCB0aW1lc3RhbXAsIGZvcmNlLCBldmVudE51bWJlciwgbWVu
dVR5cGVGb3JFdmVudCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAkocmV2aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOTcsNiArNDM5Nyw5IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlRXZlbnQodWludDMKIAogICAgIGNhc2UgV2ViRXZlbnQ6
Ok1vdXNlRG93bjoKICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOgorICAgIGNhc2UgV2ViRXZl
bnQ6Ok1vdXNlRm9yY2VDaGFuZ2VkOgorICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRm9yY2VEb3du
OgorICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRm9yY2VVcDoKICAgICBjYXNlIFdlYkV2ZW50OjpX
aGVlbDoKICAgICBjYXNlIFdlYkV2ZW50OjpLZXlEb3duOgogICAgIGNhc2UgV2ViRXZlbnQ6Oktl
eVVwOgpAQCAtNDQyNyw2ICs0NDMwLDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZl
RXZlbnQodWludDMKICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOgogICAgICAgICBtX2N1cnJl
bnRseVByb2Nlc3NlZE1vdXNlRG93bkV2ZW50ID0gbnVsbHB0cjsKICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBXZWJFdmVudDo6TW91c2VGb3JjZUNoYW5nZWQ6CisgICAgY2FzZSBXZWJFdmVudDo6
TW91c2VGb3JjZURvd246CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VGb3JjZVVwOgorICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgV2ViRXZlbnQ6OldoZWVsOiB7CiAgICAgICAgIE1FU1NBR0Vf
Q0hFQ0soIW1fY3VycmVudGx5UHJvY2Vzc2VkV2hlZWxFdmVudHMuaXNFbXB0eSgpKTsKQEAgLTU2
NzEsMTEgKzU2NzgsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Zm9jdXNBbmRTZWxlY3RMYXN0QWN0
CiAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpGb2N1c0FuZFNlbGVjdExh
c3RBY3Rpb25NZW51SGl0VGVzdFJlc3VsdCgpLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFn
ZVByb3h5OjppbnB1dERldmljZUZvcmNlRGlkQ2hhbmdlKGZsb2F0IGZvcmNlLCBpbnQgc3RhZ2Up
Ci17Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbnB1dERldmljZUZv
cmNlRGlkQ2hhbmdlKGZvcmNlLCBzdGFnZSksIG1fcGFnZUlEKTsKLX0KLQogdm9pZCBXZWJQYWdl
UHJveHk6OmltbWVkaWF0ZUFjdGlvbkRpZFVwZGF0ZSgpCiB7CiAgICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpJbW1lZGlhdGVBY3Rpb25EaWRVcGRhdGUoKSwgbV9wYWdlSUQp
OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24g
MTgyODQ4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OTQsNyArOTk0LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2VsZWN0TGFz
dEFjdGlvbk1lbnVSYW5nZSgpOwogICAgIHZvaWQgZm9jdXNBbmRTZWxlY3RMYXN0QWN0aW9uTWVu
dUhpdFRlc3RSZXN1bHQoKTsKIAotICAgIHZvaWQgaW5wdXREZXZpY2VGb3JjZURpZENoYW5nZShm
bG9hdCBmb3JjZSwgaW50IHN0YWdlKTsKICAgICB2b2lkIGltbWVkaWF0ZUFjdGlvbkRpZFVwZGF0
ZSgpOwogICAgIHZvaWQgaW1tZWRpYXRlQWN0aW9uRGlkQ2FuY2VsKCk7CiAgICAgdm9pZCBpbW1l
ZGlhdGVBY3Rpb25EaWRDb21wbGV0ZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMxLDEzICsx
NDMxLDE3IEBAIC0gKHZvaWQpcHJlc3N1cmVDaGFuZ2VXaXRoRXZlbnQ6KE5TRXZlbnQKICAgICBp
ZiAoZXZlbnQgPT0gX2RhdGEtPl9wcmVzc3VyZUV2ZW50KQogICAgICAgICByZXR1cm47CiAKKyAg
ICBpZiAoX2RhdGEtPl9pZ25vcmVzTm9uV2hlZWxFdmVudHMpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGlmIChldmVudC5waGFzZSAhPSBOU0V2ZW50UGhhc2VDaGFuZ2VkICYmIGV2ZW50LnBoYXNl
ICE9IE5TRXZlbnRQaGFzZUJlZ2FuICYmIGV2ZW50LnBoYXNlICE9IE5TRXZlbnRQaGFzZUVuZGVk
KQogICAgICAgICByZXR1cm47CiAKKyAgICBOYXRpdmVXZWJNb3VzZUV2ZW50IHdlYkV2ZW50KGV2
ZW50LCBfZGF0YS0+X3ByZXNzdXJlRXZlbnQsIHNlbGYpOworICAgIF9kYXRhLT5fcGFnZS0+aGFu
ZGxlTW91c2VFdmVudCh3ZWJFdmVudCk7CisKICAgICBbX2RhdGEtPl9wcmVzc3VyZUV2ZW50IHJl
bGVhc2VdOwogICAgIF9kYXRhLT5fcHJlc3N1cmVFdmVudCA9IFtldmVudCByZXRhaW5dOwotCi0g
ICAgX2RhdGEtPl9wYWdlLT5pbnB1dERldmljZUZvcmNlRGlkQ2hhbmdlKGV2ZW50LnByZXNzdXJl
LCBldmVudC5zdGFnZSk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpblgxMS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRz
Y2FwZVBsdWdpblgxMS5jcHAJKHJldmlzaW9uIDE4Mjg0OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5YMTEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NzQsNiArNDc0LDkgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbjo6cGxhdGZv
cm1IYW5kbGVNb3VzZQogICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToKICAgICAgICAgc2V0
WE1vdGlvbkV2ZW50RmllbGRzKHhFdmVudCwgZXZlbnQsIGNvbnZlcnRUb1Jvb3RWaWV3KEludFBv
aW50KCkpKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNb3VzZUZvcmNlQ2hhbmdlZDoKKyAg
ICBjYXNlIE1vdXNlRm9yY2VEb3duOgorICAgIGNhc2UgTW91c2VGb3JjZVVwOgogICAgIGNhc2Ug
V2ViRXZlbnQ6Ok5vVHlwZToKICAgICBjYXNlIFdlYkV2ZW50OjpXaGVlbDoKICAgICBjYXNlIFdl
YkV2ZW50OjpLZXlEb3duOgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAzLDYgKzE5
MDMsMTQgQEAgc3RhdGljIGJvb2wgaGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNbwogICAgICAg
ICAgICAgaWYgKG9ubHlVcGRhdGVTY3JvbGxiYXJzKQogICAgICAgICAgICAgICAgIHJldHVybiBw
YWdlLT5jb3JlUGFnZSgpLT51c2VySW5wdXRCcmlkZ2UoKS5oYW5kbGVNb3VzZU1vdmVPblNjcm9s
bGJhckV2ZW50KHBsYXRmb3JtTW91c2VFdmVudCk7CiAgICAgICAgICAgICByZXR1cm4gcGFnZS0+
Y29yZVBhZ2UoKS0+dXNlcklucHV0QnJpZGdlKCkuaGFuZGxlTW91c2VNb3ZlRXZlbnQocGxhdGZv
cm1Nb3VzZUV2ZW50KTsKKworICAgICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VD
aGFuZ2VkOgorICAgICAgICAgICAgcmV0dXJuIHBhZ2UtPmNvcmVQYWdlKCktPnVzZXJJbnB1dEJy
aWRnZSgpLmhhbmRsZU1vdXNlRm9yY2VDaGFuZ2VkRXZlbnQocGxhdGZvcm1Nb3VzZUV2ZW50KTsK
KyAgICAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlRG93bjoKKyAgICAgICAgICAg
IHJldHVybiBwYWdlLT5jb3JlUGFnZSgpLT51c2VySW5wdXRCcmlkZ2UoKS5oYW5kbGVNb3VzZUZv
cmNlRG93bkV2ZW50KHBsYXRmb3JtTW91c2VFdmVudCk7CisgICAgICAgIGNhc2UgUGxhdGZvcm1F
dmVudDo6TW91c2VGb3JjZVVwOgorICAgICAgICAgICAgcmV0dXJuIHBhZ2UtPmNvcmVQYWdlKCkt
PnVzZXJJbnB1dEJyaWRnZSgpLmhhbmRsZU1vdXNlRm9yY2VVcEV2ZW50KHBsYXRmb3JtTW91c2VF
dmVudCk7CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiAxODI4NDgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDk0LDcgKzEwOTQsNiBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+
IGxvb2t1cFRleHRBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQsIE5TRGljdGlvbmFyeSAq
Km9wdGlvbnMpOwogICAgIHZvaWQgc2VsZWN0TGFzdEFjdGlvbk1lbnVSYW5nZSgpOwogICAgIHZv
aWQgZm9jdXNBbmRTZWxlY3RMYXN0QWN0aW9uTWVudUhpdFRlc3RSZXN1bHQoKTsKLSAgICB2b2lk
IGlucHV0RGV2aWNlRm9yY2VEaWRDaGFuZ2UoZmxvYXQgZm9yY2UsIGludCBzdGFnZSk7CiAgICAg
dm9pZCBpbW1lZGlhdGVBY3Rpb25EaWRVcGRhdGUoKTsKICAgICB2b2lkIGltbWVkaWF0ZUFjdGlv
bkRpZENhbmNlbCgpOwogICAgIHZvaWQgaW1tZWRpYXRlQWN0aW9uRGlkQ29tcGxldGUoKTsKQEAg
LTEzNTUsNyArMTM1NCw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBt
X2xhc3RBY3Rpb25NZW51UmFuZ2VGb3JTZWxlY3Rpb247CiAgICAgV2ViQ29yZTo6SGl0VGVzdFJl
c3VsdCBtX2xhc3RBY3Rpb25NZW51SGl0VGVzdFJlc3VsdDsKICAgICBSZWZQdHI8V2ViUGFnZU92
ZXJsYXk+IG1fbGFzdEFjdGlvbk1lbnVIaXRQYWdlT3ZlcmxheTsKLSAgICBpbnQgbV9sYXN0Rm9y
Y2VTdGFnZSB7IDAgfTsKICNlbmRpZgogCiAgICAgYm9vbCBtX21haW5GcmFtZVByb2dyZXNzQ29t
cGxldGVkOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE4Mjg0OCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkp
CkBAIC00MDcsNyArNDA3LDYgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7
CiAgICAgUGVyZm9ybUFjdGlvbk1lbnVIaXRUZXN0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBv
aW50IGxvY2F0aW9uLCBib29sIGZvckltbWVkaWF0ZUFjdGlvbikKICAgICBTZWxlY3RMYXN0QWN0
aW9uTWVudVJhbmdlKCkKICAgICBGb2N1c0FuZFNlbGVjdExhc3RBY3Rpb25NZW51SGl0VGVzdFJl
c3VsdCgpCi0gICAgSW5wdXREZXZpY2VGb3JjZURpZENoYW5nZShmbG9hdCBmb3JjZSwgaW50IHN0
YWdlKQogICAgIEltbWVkaWF0ZUFjdGlvbkRpZFVwZGF0ZSgpCiAgICAgSW1tZWRpYXRlQWN0aW9u
RGlkQ2FuY2VsKCkKICAgICBJbW1lZGlhdGVBY3Rpb25EaWRDb21wbGV0ZSgpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
CShyZXZpc2lvbiAxODI4NDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTExNDEsMjUgKzExNDEsNiBAQCB2
b2lkIFdlYlBhZ2U6OmZvY3VzQW5kU2VsZWN0TGFzdEFjdGlvbk1lCiAgICAgZnJhbWUtPnNlbGVj
dGlvbigpLnNldFNlbGVjdGlvbihwb3NpdGlvbik7CiB9CiAKLXZvaWQgV2ViUGFnZTo6aW5wdXRE
ZXZpY2VGb3JjZURpZENoYW5nZShmbG9hdCBmb3JjZSwgaW50IHN0YWdlKQotewotICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSBtX2xhc3RBY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5pbm5lckVsZW1lbnQo
KTsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IG92ZXJh
bGxGb3JjZSA9IHN0YWdlIDwgMSA/IGZvcmNlIDogZm9yY2UgKyBzdGFnZSAtIDE7Ci0gICAgZWxl
bWVudC0+ZGlzcGF0Y2hNb3VzZUZvcmNlQ2hhbmdlZChvdmVyYWxsRm9yY2UpOwotCi0gICAgaWYg
KG1fbGFzdEZvcmNlU3RhZ2UgPT0gMSAmJiBzdGFnZSA9PSAyKQotICAgICAgICBlbGVtZW50LT5k
aXNwYXRjaE1vdXNlRm9yY2VEb3duKCk7Ci0gICAgZWxzZSBpZiAobV9sYXN0Rm9yY2VTdGFnZSA9
PSAyICYmIHN0YWdlID09IDEpIHsKLSAgICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hNb3VzZUZvcmNl
VXAoKTsKLSAgICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hNb3VzZUZvcmNlQ2xpY2soKTsKLSAgICB9
Ci0KLSAgICBtX2xhc3RGb3JjZVN0YWdlID0gc3RhZ2U7Ci19Ci0KIHZvaWQgV2ViUGFnZTo6aW1t
ZWRpYXRlQWN0aW9uRGlkVXBkYXRlKCkKIHsKICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50
SGFuZGxlcigpLnNldEltbWVkaWF0ZUFjdGlvblN0YWdlKEltbWVkaWF0ZUFjdGlvblN0YWdlOjpB
Y3Rpb25VcGRhdGVkKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250904</attachid>
            <date>2015-04-15 23:25:13 -0700</date>
            <delta_ts>2015-04-16 12:34:01 -0700</delta_ts>
            <desc>Patch with tests</desc>
            <filename>for-review-4.txt</filename>
            <type>text/plain</type>
            <size>56984</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mjg0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE1LTA0LTE1ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBGb3JjZSBtb3VzZSBldmVudHMgc2hv
dWxkIGdvIHRocm91Z2ggbm9ybWFsIG1vdXNlIGV2ZW50IGhhbmRsaW5nIGNvZGUgcGF0aHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Mzc0OQorICAg
ICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIwNDcyODk1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBtb3ZlcyBhbGwgb2YgdGhlIGNvZGUgdG8gZGlzcGF0Y2ggbW91c2Vmb3JjZWRvd24sIG1v
dXNlZm9yY2V1cCwgYW5kIAorICAgICAgICBtb3VzZWZvcmNlY2hhbmdlZCBpbnRvIG5vcm1hbCBt
b3VzZSBldmVudCBkaXNwYXRjaGluZyBjb2RlLiBUaGlzIHBhdGNoIGxlYXZlcyAKKyAgICAgICAg
YmVoaW5kIHRoZSBjYW5jZWwgYW5kIGNsaWNrIGV2ZW50cyBiZWNhdXNlIHdlIHBsYW4gdG8gcmVt
b3ZlIHRob3NlLCBhbmQgaXQgYWxzbyAKKyAgICAgICAgbGVhdmVzIG1vdXNlZm9yY2V3aWxsYmVn
aW4gYmVjYXVzZSB0aGF0IGlzIG5lY2Vzc2FyaWx5IGEgdmVyeSBkaWZmZXJlbnQgZXZlbnQgbW9y
ZSAKKyAgICAgICAgdGllZCB0byB0aGUgTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXpl
ciB0aGFuIHRoZXNlIG90aGVyIGV2ZW50cyB3aGljaCBhcmUgCisgICAgICAgIHRpZWQgdG8gTlNS
ZXNwb25kZXLigJlzIHByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50LgorCisgICAgICAgIE1vdmUgdGhl
IGNvZGUgdG8gZW5zdXJlIHRoZSBmb3JjZSBldmVudHMgaGF2ZSBsaXN0ZW5lcnMgaW4gb3JkZXIg
dG8gZmlyZSB0byAKKyAgICAgICAgZGlzcGF0Y2hNb3VzZUV2ZW50LCBhbmQgZGVsZXRlIHRoZSBv
bGQgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNoTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3JjZURvd24pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZGlzcGF0Y2hNb3VzZUZvcmNlVXApOiBEZWxldGVkLgor
ICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisKKyAgICAgICAgUGVyZm9ybSBhIGhpdCB0ZXN0IGFu
ZCBwaXBlIHRoZSBldmVudHMgdGhyb3VnaCBkaXNwYXRjaE1vdXNlRXZlbnQoKS4gCisgICAgICAg
ICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpoYW5kbGVNb3VzZUZvcmNlRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6
CisKKyAgICAgICAgTmV3IHR5cGVzIGZvciB0aGUgbmV3IGV2ZW50cy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9QbGF0Zm9ybUV2ZW50Lmg6CisKKyAgICAgICAgRm9yd2FyZCB0byBFdmVudEhhbmRsZXIu
IAorICAgICAgICAqIHJlcGxheS9Vc2VySW5wdXRCcmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VXNlcklucHV0QnJpZGdlOjpoYW5kbGVNb3VzZUZvcmNlQ2hhbmdlZEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlVzZXJJbnB1dEJyaWRnZTo6aGFuZGxlTW91c2VGb3JjZURvd25FdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpVc2VySW5wdXRCcmlkZ2U6OmhhbmRsZU1vdXNlRm9yY2VVcEV2
ZW50KToKKyAgICAgICAgKiByZXBsYXkvVXNlcklucHV0QnJpZGdlLmg6CisKIDIwMTUtMDQtMTQg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGNy
ZWF0aW5nIHNlbmQgcmlnaHRzIGZyb20gc2hhcmVkIG1lbW9yeSBtb3JlIHJvYnVzdApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxODI4NDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTY2LDYgKzM5NjYsMjIgQEAg
UmVmUHRyPEV2ZW50PiBEb2N1bWVudDo6Y3JlYXRlRXZlbnQoY29ucwogICAgIHJldHVybiBudWxs
cHRyOwogfQogCitib29sIERvY3VtZW50OjpoYXNMaXN0ZW5lclR5cGVGb3JFdmVudFR5cGUoUGxh
dGZvcm1FdmVudDo6VHlwZSBldmVudFR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNoKGV2ZW50VHlw
ZSkgeworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6TW91c2VGb3JjZUNoYW5nZWQ6CisgICAgICAg
IHJldHVybiBtX2xpc3RlbmVyVHlwZXMgJiBEb2N1bWVudDo6Rk9SQ0VDSEFOR0VEX0xJU1RFTkVS
OworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6TW91c2VGb3JjZURvd246CisgICAgICAgIHJldHVy
biBtX2xpc3RlbmVyVHlwZXMgJiBEb2N1bWVudDo6Rk9SQ0VET1dOX0xJU1RFTkVSOworICAgIGNh
c2UgUGxhdGZvcm1FdmVudDo6TW91c2VGb3JjZVVwOgorICAgICAgICByZXR1cm4gbV9saXN0ZW5l
clR5cGVzICYgRG9jdW1lbnQ6OkZPUkNFVVBfTElTVEVORVI7CisgICAgY2FzZSBQbGF0Zm9ybUV2
ZW50OjpNb3VzZVNjcm9sbDoKKyAgICAgICAgcmV0dXJuIG1fbGlzdGVuZXJUeXBlcyAmIERvY3Vt
ZW50OjpTQ1JPTExfTElTVEVORVI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwogdm9pZCBEb2N1bWVudDo6YWRkTGlzdGVuZXJUeXBlSWZOZWVkZWQoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCiB7CiAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVu
dE5hbWVzKCkuRE9NU3VidHJlZU1vZGlmaWVkRXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAkocmV2aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUGFnZVZpc2liaWxpdHlT
dGF0ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtRXZlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNj
cmVlbi5oIgogI2luY2x1ZGUgIlJlZmVycmVyUG9saWN5LmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgi
CkBAIC03ODAsNiArNzgxLDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICBib29sIGhhc0xpc3Rl
bmVyVHlwZShMaXN0ZW5lclR5cGUgbGlzdGVuZXJUeXBlKSBjb25zdCB7IHJldHVybiAobV9saXN0
ZW5lclR5cGVzICYgbGlzdGVuZXJUeXBlKTsgfQorICAgIGJvb2wgaGFzTGlzdGVuZXJUeXBlRm9y
RXZlbnRUeXBlKFBsYXRmb3JtRXZlbnQ6OlR5cGUpIGNvbnN0OwogICAgIHZvaWQgYWRkTGlzdGVu
ZXJUeXBlSWZOZWVkZWQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpOwogCiAgICAgYm9v
bCBoYXNNdXRhdGlvbk9ic2VydmVyc09mVHlwZShNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlvblR5
cGUgdHlwZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDE4Mjg0
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQ0LDExICsyNDQsMTkgQEAgYm9vbCBFbGVtZW50OjpzaG91bGRVc2VJbnB1dE1ldGhvZCgpCiAg
ICAgcmV0dXJuIGNvbXB1dGVFZGl0YWJpbGl0eShVc2VyU2VsZWN0QWxsSXNBbHdheXNOb25FZGl0
YWJsZSwgU2hvdWxkVXBkYXRlU3R5bGU6OlVwZGF0ZSkgIT0gRWRpdGFiaWxpdHk6OlJlYWRPbmx5
OwogfQogCitzdGF0aWMgYm9vbCBpc0ZvcmNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBwbGF0Zm9ybUV2ZW50KQoreworICAgIHJldHVybiBwbGF0Zm9ybUV2ZW50LnR5cGUoKSA9PSBQ
bGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlQ2hhbmdlZCB8fCBwbGF0Zm9ybUV2ZW50LnR5cGUoKSA9
PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlRG93biB8fCBwbGF0Zm9ybUV2ZW50LnR5cGUoKSA9
PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlVXA7Cit9CisKIGJvb2wgRWxlbWVudDo6ZGlzcGF0
Y2hNb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgcGxhdGZvcm1FdmVudCwgY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGludCBkZXRhaWwsIEVsZW1lbnQqIHJlbGF0ZWRU
YXJnZXQpCiB7CiAgICAgaWYgKGlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyAgICBpZiAoaXNGb3JjZUV2ZW50KHBsYXRmb3JtRXZlbnQpICYmICFkb2N1
bWVudCgpLmhhc0xpc3RlbmVyVHlwZUZvckV2ZW50VHlwZShwbGF0Zm9ybUV2ZW50LnR5cGUoKSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIFJlZlB0cjxNb3VzZUV2ZW50PiBtb3VzZUV2
ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgZG9jdW1lbnQoKS5kZWZhdWx0Vmll
dygpLCBwbGF0Zm9ybUV2ZW50LCBkZXRhaWwsIHJlbGF0ZWRUYXJnZXQpOwogCiAgICAgaWYgKG1v
dXNlRXZlbnQtPnR5cGUoKS5pc0VtcHR5KCkpCkBAIC0yMjUzLDU0ICsyMjYxLDYgQEAgYm9vbCBF
bGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VXaWxsQmVnaQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VDaGFuZ2VkKGZsb2F0IGZvcmNlKQot
ewotICAgIGlmICghZG9jdW1lbnQoKS5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkZPUkNFQ0hB
TkdFRF9MSVNURU5FUikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50KCkuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBQbGF0Zm9ybU1vdXNlRXZlbnQgcGxhdGZvcm1Nb3VzZUV2ZW50KGZyYW1lLT5ldmVudEhhbmRs
ZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCksIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0
S25vd25Nb3VzZUdsb2JhbFBvc2l0aW9uKCksIE5vQnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpOb1R5
cGUsIDEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBXVEY6OmN1cnJlbnRUaW1lKCksIGZv
cmNlKTsKLSAgICBSZWZQdHI8TW91c2VFdmVudD4gbW91c2VGb3JjZUNoYW5nZWRFdmVudCA9ICBN
b3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2VjaGFuZ2VkRXZl
bnQsIGRvY3VtZW50KCkuZGVmYXVsdFZpZXcoKSwgcGxhdGZvcm1Nb3VzZUV2ZW50LCAwLCBudWxs
cHRyKTsKLQotICAgIG1vdXNlRm9yY2VDaGFuZ2VkRXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAg
ICBkaXNwYXRjaEV2ZW50KG1vdXNlRm9yY2VDaGFuZ2VkRXZlbnQpOwotfQotCi12b2lkIEVsZW1l
bnQ6OmRpc3BhdGNoTW91c2VGb3JjZURvd24oKQotewotICAgIGlmICghZG9jdW1lbnQoKS5oYXNM
aXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkZPUkNFRE9XTl9MSVNURU5FUikpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICBpZiAoIWZy
YW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgcGxhdGZvcm1N
b3VzZUV2ZW50KGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCks
IGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZUdsb2JhbFBvc2l0aW9uKCksIE5v
QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpOb1R5cGUsIDEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh
bHNlLCBXVEY6OmN1cnJlbnRUaW1lKCksIEZvcmNlQXRGb3JjZUNsaWNrKTsKLSAgICBSZWZQdHI8
TW91c2VFdmVudD4gbW91c2VGb3JjZURvd25FdmVudCA9ICBNb3VzZUV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2Vkb3duRXZlbnQsIGRvY3VtZW50KCkuZGVmYXVsdFZp
ZXcoKSwgcGxhdGZvcm1Nb3VzZUV2ZW50LCAwLCBudWxscHRyKTsKLQotICAgIG1vdXNlRm9yY2VE
b3duRXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBkaXNwYXRjaEV2ZW50KG1vdXNlRm9yY2VE
b3duRXZlbnQpOwotfQotCi12b2lkIEVsZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3JjZVVwKCkKLXsK
LSAgICBpZiAoIWRvY3VtZW50KCkuaGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpGT1JDRVVQX0xJ
U1RFTkVSKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQo
KS5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBsYXRm
b3JtTW91c2VFdmVudCBwbGF0Zm9ybU1vdXNlRXZlbnQoZnJhbWUtPmV2ZW50SGFuZGxlcigpLmxh
c3RLbm93bk1vdXNlUG9zaXRpb24oKSwgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmxhc3RLbm93bk1v
dXNlR2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok5vVHlwZSwgMSwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIFdURjo6Y3VycmVudFRpbWUoKSwgRm9yY2VBdEZv
cmNlQ2xpY2spOwotICAgIFJlZlB0cjxNb3VzZUV2ZW50PiBtb3VzZUZvcmNlVXBFdmVudCA9ICBN
b3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2V1cEV2ZW50LCBk
b2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIHBsYXRmb3JtTW91c2VFdmVudCwgMCwgbnVsbHB0cik7
Ci0KLSAgICBtb3VzZUZvcmNlVXBFdmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIGRpc3BhdGNo
RXZlbnQobW91c2VGb3JjZVVwRXZlbnQpOwotfQotCiB2b2lkIEVsZW1lbnQ6OmRpc3BhdGNoTW91
c2VGb3JjZUNsaWNrKCkKIHsKICAgICBpZiAoIWRvY3VtZW50KCkuaGFzTGlzdGVuZXJUeXBlKERv
Y3VtZW50OjpGT1JDRUNMSUNLX0xJU1RFTkVSKSkKQEAgLTIzNDAsMTggKzIzMDAsNiBAQCBib29s
IEVsZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3JjZVdpbGxCZWdpCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIEVsZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3JjZUNoYW5nZWQoZmxvYXQpCi17Ci19
Ci0KLXZvaWQgRWxlbWVudDo6ZGlzcGF0Y2hNb3VzZUZvcmNlRG93bigpCi17Ci19Ci0KLXZvaWQg
RWxlbWVudDo6ZGlzcGF0Y2hNb3VzZUZvcmNlVXAoKQotewotfQotCiB2b2lkIEVsZW1lbnQ6OmRp
c3BhdGNoTW91c2VGb3JjZUNsaWNrKCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAkocmV2
aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDY5LDkgKzQ2OSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hCbHVyRXZlbnQoUmVmUHRyPEVsZW1lbnQ+JiYgbmV3Rm9jdXNlZEVsZW1lbnQpOwogCiAgICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBkaXNwYXRjaE1vdXNlRm9yY2VXaWxsQmVnaW4oKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoTW91c2VGb3JjZUNoYW5nZWQoZmxvYXQgZm9yY2Up
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hNb3VzZUZvcmNlRG93bigpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hNb3VzZUZvcmNlVXAoKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRpc3BhdGNoTW91c2VGb3JjZUNsaWNrKCk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBkaXNwYXRjaE1vdXNlRm9yY2VDYW5jZWxsZWQoKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA1LDYgKzIxMDUs
MzMgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFzZUV2ZQogICAgIHJldHVy
biBzd2FsbG93TW91c2VVcEV2ZW50IHx8IHN3YWxsb3dDbGlja0V2ZW50IHx8IHN3YWxsb3dNb3Vz
ZVJlbGVhc2VFdmVudDsKIH0KIAorI2lmIEVOQUJMRShNT1VTRV9GT1JDRV9FVkVOVFMpCitib29s
IEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VGb3JjZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgZXZlbnQpCit7CisgICAgUmVmUHRyPEZyYW1lVmlldz4gcHJvdGVjdG9yKG1fZnJhbWUu
dmlldygpKTsKKworICAgIHNldExhc3RLbm93bk1vdXNlUG9zaXRpb24oZXZlbnQpOworCisgICAg
SGl0VGVzdFJlcXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBlID0gSGl0VGVzdFJlcXVl
c3Q6OkRpc2FsbG93U2hhZG93Q29udGVudCB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmU7CisKKyAg
ICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KGhpdFR5cGUpOworICAgIE1vdXNlRXZlbnRXaXRoSGl0
VGVzdFJlc3VsdHMgbW91c2VFdmVudCA9IHByZXBhcmVNb3VzZUV2ZW50KHJlcXVlc3QsIGV2ZW50
KTsKKworICAgIGJvb2wgc3dhbGxvd2VkRXZlbnQgPSAhZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50
TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNlY2hhbmdlZEV2ZW50LCBtb3VzZUV2ZW50LnRhcmdldE5v
ZGUoKSwgZmFsc2UsIDAsIGV2ZW50LCBmYWxzZSk7CisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBQ
bGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlRG93bikKKyAgICAgICAgc3dhbGxvd2VkRXZlbnQgPSAh
ZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNlZG93bkV2ZW50
LCBtb3VzZUV2ZW50LnRhcmdldE5vZGUoKSwgZmFsc2UsIDAsIGV2ZW50LCBmYWxzZSk7CisgICAg
aWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlVXApCisgICAgICAg
IHN3YWxsb3dlZEV2ZW50ID0gIWRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkud2Via2l0
bW91c2Vmb3JjZXVwRXZlbnQsIG1vdXNlRXZlbnQudGFyZ2V0Tm9kZSgpLCBmYWxzZSwgMCwgZXZl
bnQsIGZhbHNlKTsKKworICAgIHJldHVybiBzd2FsbG93ZWRFdmVudDsKK30KKyNlbHNlCitib29s
IEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VGb3JjZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAvLyAjaWYgRU5BQkxFKE1P
VVNFX0ZPUkNFX0VWRU5UUykKKwogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVBhc3RlR2xvYmFs
U2VsZWN0aW9uKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgcGxhdGZvcm1Nb3VzZUV2ZW50KQog
ewogICAgIC8vIElmIHRoZSBldmVudCB3YXMgYSBtaWRkbGUgY2xpY2ssIGF0dGVtcHQgdG8gY29w
eSBnbG9iYWwgc2VsZWN0aW9uIGluIGFmdGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmgJKHJldmlzaW9uIDE4Mjg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw2ICsyMDIsNyBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50Jik7CiAgICAgYm9vbCBoYW5kbGVNb3VzZU1vdmVFdmVudChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmLCBIaXRUZXN0UmVzdWx0KiBob3ZlcmVkTm9kZSA9IDAsIGJvb2wgb25seVVwZGF0
ZVNjcm9sbGJhcnMgPSBmYWxzZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYW5kbGVNb3Vz
ZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICBib29sIGhhbmRs
ZU1vdXNlRm9yY2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7
CiAgICAgdm9pZCBkZWZhdWx0V2hlZWxFdmVudEhhbmRsZXIoTm9kZSosIFdoZWVsRXZlbnQqKTsK
ICAgICBib29sIGhhbmRsZVBhc3RlR2xvYmFsU2VsZWN0aW9uKGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1FdmVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXZlbnQuaAkocmV2
aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1FdmVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw5IEBAIHB1YmxpYzoKICAgICAgICAgTW91c2VN
b3ZlZCwKICAgICAgICAgTW91c2VQcmVzc2VkLAogICAgICAgICBNb3VzZVJlbGVhc2VkLAorICAg
ICAgICBNb3VzZUZvcmNlQ2hhbmdlZCwKKyAgICAgICAgTW91c2VGb3JjZURvd24sCisgICAgICAg
IE1vdXNlRm9yY2VVcCwKICAgICAgICAgTW91c2VTY3JvbGwsCiAKICAgICAgICAgLy8gUGxhdGZv
cm1XaGVlbEV2ZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZXBsYXkvVXNlcklucHV0QnJpZGdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZXBsYXkvVXNlcklucHV0QnJpZGdl
LmNwcAkocmV2aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYkNvcmUvcmVwbGF5L1VzZXJJbnB1
dEJyaWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsMjEgQEAgYm9vbCBVc2Vy
SW5wdXRCcmlkZ2U6OmhhbmRsZU1vdXNlTW92ZU9uUwogICAgIHJldHVybiBtX3BhZ2UubWFpbkZy
YW1lKCkuZXZlbnRIYW5kbGVyKCkucGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyhtb3Vz
ZUV2ZW50KTsKIH0KIAorYm9vbCBVc2VySW5wdXRCcmlkZ2U6OmhhbmRsZU1vdXNlRm9yY2VDaGFu
Z2VkRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBJbnB1dFNvdXJj
ZSkKK3sKKyAgICByZXR1cm4gbV9wYWdlLm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhhbmRs
ZU1vdXNlRm9yY2VFdmVudChtb3VzZUV2ZW50KTsKK30KKworYm9vbCBVc2VySW5wdXRCcmlkZ2U6
OmhhbmRsZU1vdXNlRm9yY2VEb3duRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3Vz
ZUV2ZW50LCBJbnB1dFNvdXJjZSkKK3sKKyAgICByZXR1cm4gbV9wYWdlLm1haW5GcmFtZSgpLmV2
ZW50SGFuZGxlcigpLmhhbmRsZU1vdXNlRm9yY2VFdmVudChtb3VzZUV2ZW50KTsKK30KKworYm9v
bCBVc2VySW5wdXRCcmlkZ2U6OmhhbmRsZU1vdXNlRm9yY2VVcEV2ZW50KGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYgbW91c2VFdmVudCwgSW5wdXRTb3VyY2UpCit7CisgICAgcmV0dXJuIG1fcGFn
ZS5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oYW5kbGVNb3VzZUZvcmNlRXZlbnQobW91c2VF
dmVudCk7Cit9CisKIGJvb2wgVXNlcklucHV0QnJpZGdlOjpoYW5kbGVLZXlFdmVudChjb25zdCBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQmIGtleUV2ZW50LCBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSkK
IHsKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlcGxheS9V
c2VySW5wdXRCcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZXBsYXkvVXNl
cklucHV0QnJpZGdlLmgJKHJldmlzaW9uIDE4Mjg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlcGxh
eS9Vc2VySW5wdXRCcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsOSBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBJbnB1dFNvdXJjZSBzb3VyY2UgPSBJbnB1dFNvdXJjZTo6
VXNlcik7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYW5kbGVNb3VzZU1vdmVFdmVudChjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBJbnB1dFNvdXJjZSBzb3VyY2UgPSBJbnB1dFNvdXJjZTo6
VXNlcik7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYW5kbGVNb3VzZU1vdmVPblNjcm9sbGJh
ckV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIElucHV0U291cmNlIHNvdXJjZSA9IElu
cHV0U291cmNlOjpVc2VyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhbmRsZU1vdXNlRm9y
Y2VDaGFuZ2VkRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgSW5wdXRTb3VyY2UgPSBJ
bnB1dFNvdXJjZTo6VXNlcik7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYW5kbGVNb3VzZUZv
cmNlRG93bkV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIElucHV0U291cmNlID0gSW5w
dXRTb3VyY2U6OlVzZXIpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFuZGxlTW91c2VGb3Jj
ZVVwRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgSW5wdXRTb3VyY2UgPSBJbnB1dFNv
dXJjZTo6VXNlcik7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIElucHV0U291cmNlIHNvdXJjZSA9IElucHV0U291cmNl
OjpVc2VyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhbmRsZUtleUV2ZW50KGNvbnN0IFBs
YXRmb3JtS2V5Ym9hcmRFdmVudCYsIElucHV0U291cmNlIHNvdXJjZSA9IElucHV0U291cmNlOjpV
c2VyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhbmRsZUFjY2Vzc0tleUV2ZW50KGNvbnN0
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYsIElucHV0U291cmNlIHNvdXJjZSA9IElucHV0U291cmNl
OjpVc2VyKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mjg0OSkKKysrIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE1LTA0LTE1
ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBGb3JjZSBtb3VzZSBl
dmVudHMgc2hvdWxkIGdvIHRocm91Z2ggbm9ybWFsIG1vdXNlIGV2ZW50IGhhbmRsaW5nIGNvZGUg
cGF0aHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
Mzc0OQorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9ibGVt
LzIwNDcyODk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBtYWtlcyBwcmVzc3VyZUNoYW5nZVdpdGhFdmVudCBjcmVhdGUgTmF0aXZl
V2ViTW91c2VFdmVudHMgd2l0aCB0aGUgCisgICAgICAgIE5TRXZlbnRUeXBlUHJlc3N1cmVzIHRo
YXQgaXMgZ2V0cyBhbmQgc2VuZHMgdGhvc2UgZG93biB0byB0aGUgd2ViIHByb2Nlc3MuCisKKyAg
ICAgICAgUmUtbmFtZSBwcmVzc3VyZUV2ZW50IHRvIGxhc3RQcmVzc3VyZUV2ZW50LiBOb3cgdGhh
dCBldmVudCBjYW4gc29tZXRpbWVzIGJlIGFuIAorICAgICAgICBOU0V2ZW50VHlwZVByZXNzdXJl
LCB0aGUgbmV3IG5hbWUgbWFrZXMgaXQgY2xlYXIgaG93IHRoZSBzZWNvbmQgcGFyYW1ldGVyIGRp
ZmZlcnMgCisgICAgICAgIGZyb20gdGhlIGZpcnN0LgorICAgICAgICAqIFNoYXJlZC9OYXRpdmVX
ZWJNb3VzZUV2ZW50Lmg6CisKKyAgICAgICAgTmV3IGV2ZW50IHR5cGVzIGZvciB0aGUgbmV3IHR5
cGVzIG9mIGV2ZW50cy4KKyAgICAgICAgKiBTaGFyZWQvV2ViRXZlbnQuaDoKKyAgICAgICAgKiBT
aGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0MlBs
YXRmb3JtTW91c2VFdmVudDo6V2ViS2l0MlBsYXRmb3JtTW91c2VFdmVudCk6CisgICAgICAgICog
U2hhcmVkL21hYy9OYXRpdmVXZWJNb3VzZUV2ZW50TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpO
YXRpdmVXZWJNb3VzZUV2ZW50OjpOYXRpdmVXZWJNb3VzZUV2ZW50KToKKyAgICAgICAgKiBTaGFy
ZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5oOgorCisgICAgICAgIEFsbCBvZiB0aGUgc3F1YXJlLXBl
Zywgcm91bmQtaG9sZSBwcm9ibGVtcyBvZiBtYXNzYWdpbmcgdGhlIE5TRXZlbnRUeXBlUHJlc3N1
cmVzIAorICAgICAgICBldmVudHMgaW50byBXZWJNb3VzZUV2ZW50cyBpcyB0YWtlbiBjYXJlIG9m
IGhlcmUuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkubW06CisgICAgICAg
IChXZWJLaXQ6Om1vdXNlQnV0dG9uRm9yRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpnbG9iYWxQ
b2ludEZvckV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6cG9pbnRGb3JFdmVudCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudCk6CisKKyAgICAg
ICAgSW5zdGVhZCBvZiBjYWxsaW5nIHRoZSBvbGQgaW5wdXREZXZpY2VGb3JjZURpZENoYW5nZSwg
Y3JlYXRlIGEgTmF0aXZlV2ViTW91c2VFdmVudCAKKyAgICAgICAgYW5kIGhhbmRsZSBpdC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBw
cmVzc3VyZUNoYW5nZVdpdGhFdmVudDpdKToKKworICAgICAgICBIYW5kbGUgdGhlIG5ldyB0eXBl
cy4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlRXZlbnQpOgorCisgICAgICAgIENhbiBkZWxldGUg
aW5wdXREZXZpY2VGb3JjZURpZENoYW5nZSBzaW5jZSBpdOKAmXMgbm8gbG9uZ2VyIHVzZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5wdXREZXZpY2VGb3JjZURpZENoYW5nZSk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorCisgICAgICAg
IEhhbmRsZSB0aGUgbmV3IHR5cGVzIG9mIG1vdXNlIGV2ZW50cyBwcm9wZXJseS4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OmhhbmRs
ZU1vdXNlRXZlbnQpOgorCisgICAgICAgIERlbGV0ZSBpbnB1dERldmljZUZvcmNlRGlkQ2hhbmdl
KCkgYW5kIG1fbGFzdEZvcmNlU3RhZ2UuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OmlucHV0RGV2aWNlRm9yY2VEaWRDaGFuZ2UpOiBEZWxldGVk
LgorCisgICAgICAgIEhhbmRsZSBuZXcgV2ViRXZlbnQgdHlwZXMuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpblgxMS5jcHA6CisKIDIwMTUt
MDQtMTUgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMjA1NDkyOTg+IE5vIG1hdGNoaW5nIF9fTlNpXyBkZWZpbml0aW9uIGZvciBwb3N0
cHJvY2Vzc2VkIHZhbHVlIG9mIFdLX3tNQUMsSU9TfV9UQkEKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaAkocmV2aXNpb24gMTgyODQ4KQorKysgU291
cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIE5hdGl2ZVdlYk1vdXNl
RXZlbnQgOiBwdWJsaWMgV2ViTW91c2VFdmVudCB7CiBwdWJsaWM6CiAjaWYgVVNFKEFQUEtJVCkK
LSAgICBOYXRpdmVXZWJNb3VzZUV2ZW50KE5TRXZlbnQgKiwgTlNFdmVudCAqcHJlc3N1cmVFdmVu
dCwgTlNWaWV3ICopOworICAgIE5hdGl2ZVdlYk1vdXNlRXZlbnQoTlNFdmVudCAqLCBOU0V2ZW50
ICpsYXN0UHJlc3N1cmVFdmVudCwgTlNWaWV3ICopOwogI2VsaWYgUExBVEZPUk0oR1RLKQogICAg
IE5hdGl2ZVdlYk1vdXNlRXZlbnQoY29uc3QgTmF0aXZlV2ViTW91c2VFdmVudCYpOwogICAgIE5h
dGl2ZVdlYk1vdXNlRXZlbnQoR2RrRXZlbnQqLCBpbnQpOwpJbmRleDogU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkV2ZW50LmgJKHJldmlzaW9uIDE4Mjg0OCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJF
dmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw5IEBAIHB1YmxpYzoKICAgICAgICAg
TW91c2VEb3duLAogICAgICAgICBNb3VzZVVwLAogICAgICAgICBNb3VzZU1vdmUsCisgICAgICAg
IE1vdXNlRm9yY2VDaGFuZ2VkLAorICAgICAgICBNb3VzZUZvcmNlRG93biwKKyAgICAgICAgTW91
c2VGb3JjZVVwLAogCiAgICAgICAgIC8vIFdlYldoZWVsRXZlbnQKICAgICAgICAgV2hlZWwsCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcAkocmV2
aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDE4IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIG1fdHlwZSA9IFdlYkNvcmU6OlBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQ7CiAgICAgICAg
ICAgICBtX2ZvcmNlID0gd2ViRXZlbnQuZm9yY2UoKTsKICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZUZvcmNlQ2hhbmdlZDoKKyAgICAgICAgICAgIG1fdHlw
ZSA9IFdlYkNvcmU6OlBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VDaGFuZ2VkOworICAgICAgICAg
ICAgbV9mb3JjZSA9IHdlYkV2ZW50LmZvcmNlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBXZWJFdmVudDo6TW91c2VGb3JjZURvd246CisgICAgICAgICAgICBtX3R5cGUgPSBX
ZWJDb3JlOjpQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlRG93bjsKKyAgICAgICAgICAgIG1fZm9y
Y2UgPSBXZWJDb3JlOjpGb3JjZUF0Rm9yY2VDbGljazsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZUZvcmNlVXA6CisgICAgICAgICAgICBtX3R5cGUgPSBX
ZWJDb3JlOjpQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlVXA7CisgICAgICAgICAgICBtX2ZvcmNl
ID0gV2ViQ29yZTo6Rm9yY2VBdEZvcmNlQ2xpY2s7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL05hdGl2ZVdlYk1vdXNlRXZlbnRNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9OYXRpdmVXZWJNb3Vz
ZUV2ZW50TWFjLm1tCShyZXZpc2lvbiAxODI4NDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL05hdGl2ZVdlYk1vdXNlRXZlbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMy
LDggQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLU5hdGl2ZVdlYk1vdXNlRXZlbnQ6Ok5hdGl2
ZVdlYk1vdXNlRXZlbnQoTlNFdmVudCAqZXZlbnQsIE5TRXZlbnQgKnByZXNzdXJlRXZlbnQsIE5T
VmlldyAqdmlldykKLSAgICA6IFdlYk1vdXNlRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVX
ZWJNb3VzZUV2ZW50KGV2ZW50LCBwcmVzc3VyZUV2ZW50LCB2aWV3KSkKK05hdGl2ZVdlYk1vdXNl
RXZlbnQ6Ok5hdGl2ZVdlYk1vdXNlRXZlbnQoTlNFdmVudCAqZXZlbnQsIE5TRXZlbnQgKmxhc3RQ
cmVzc3VyZUV2ZW50LCBOU1ZpZXcgKnZpZXcpCisgICAgOiBXZWJNb3VzZUV2ZW50KFdlYkV2ZW50
RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudChldmVudCwgbGFzdFByZXNzdXJlRXZlbnQsIHZp
ZXcpKQogICAgICwgbV9uYXRpdmVFdmVudChldmVudCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkuaAkocmV2aXNpb24gMTgyODQ4KQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkuaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYkV2ZW50RmFj
dG9yeSB7CiBwdWJsaWM6CiAjaWYgVVNFKEFQUEtJVCkKLSAgICBzdGF0aWMgV2ViTW91c2VFdmVu
dCBjcmVhdGVXZWJNb3VzZUV2ZW50KE5TRXZlbnQgKiwgTlNFdmVudCAqcHJlc3N1cmVFdmVudCwg
TlNWaWV3ICp3aW5kb3dWaWV3KTsKKyAgICBzdGF0aWMgV2ViTW91c2VFdmVudCBjcmVhdGVXZWJN
b3VzZUV2ZW50KE5TRXZlbnQgKiwgTlNFdmVudCAqbGFzdFByZXNzdXJlRXZlbnQsIE5TVmlldyAq
d2luZG93Vmlldyk7CiAgICAgc3RhdGljIFdlYldoZWVsRXZlbnQgY3JlYXRlV2ViV2hlZWxFdmVu
dChOU0V2ZW50ICosIE5TVmlldyAqd2luZG93Vmlldyk7CiAgICAgc3RhdGljIFdlYktleWJvYXJk
RXZlbnQgY3JlYXRlV2ViS2V5Ym9hcmRFdmVudChOU0V2ZW50ICosIGJvb2wgaGFuZGxlZEJ5SW5w
dXRNZXRob2QsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jik7CiAgICAg
c3RhdGljIGJvb2wgc2hvdWxkQmVIYW5kbGVkQXNDb250ZXh0Q2xpY2soY29uc3QgV2ViQ29yZTo6
UGxhdGZvcm1Nb3VzZUV2ZW50Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dl
YkV2ZW50RmFjdG9yeS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1dlYkV2ZW50RmFjdG9yeS5tbQkocmV2aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkubW0JKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2
LDkgQEAgc3RhdGljIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBtb3VzZUJ1dHRvbgogICAgICAgICBj
YXNlIE5TT3RoZXJNb3VzZVVwOgogICAgICAgICBjYXNlIE5TT3RoZXJNb3VzZURyYWdnZWQ6CiAg
ICAgICAgICAgICByZXR1cm4gV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOworI2lmIF9fTUFD
X09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEwMDMKKyAgICAgICAgY2FzZSBOU0V2ZW50
VHlwZVByZXNzdXJlOgorI2VuZGlmCiAgICAgICAgIGNhc2UgTlNNb3VzZUVudGVyZWQ6CiAgICAg
ICAgIGNhc2UgTlNNb3VzZUV4aXRlZDoKICAgICAgICAgICAgIHJldHVybiBjdXJyZW50TW91c2VC
dXR0b24oKTsKQEAgLTE1Niw1MCArMTU5LDU2IEBAIHN0YXRpYyBOU1BvaW50IGdsb2JhbFBvaW50
KGNvbnN0IE5TUG9pbnQKIHN0YXRpYyBOU1BvaW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoTlNFdmVu
dCAqZXZlbnQpCiB7CiAgICAgc3dpdGNoIChbZXZlbnQgdHlwZV0pIHsKLSAgICAgICAgY2FzZSBO
U0xlZnRNb3VzZURvd246Ci0gICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEcmFnZ2VkOgotICAgICAg
ICBjYXNlIE5TTGVmdE1vdXNlVXA6Ci0gICAgICAgIGNhc2UgTlNNb3VzZUVudGVyZWQ6Ci0gICAg
ICAgIGNhc2UgTlNNb3VzZUV4aXRlZDoKLSAgICAgICAgY2FzZSBOU01vdXNlTW92ZWQ6Ci0gICAg
ICAgIGNhc2UgTlNPdGhlck1vdXNlRG93bjoKLSAgICAgICAgY2FzZSBOU090aGVyTW91c2VEcmFn
Z2VkOgotICAgICAgICBjYXNlIE5TT3RoZXJNb3VzZVVwOgotICAgICAgICBjYXNlIE5TUmlnaHRN
b3VzZURvd246Ci0gICAgICAgIGNhc2UgTlNSaWdodE1vdXNlRHJhZ2dlZDoKLSAgICAgICAgY2Fz
ZSBOU1JpZ2h0TW91c2VVcDoKLSAgICAgICAgY2FzZSBOU1Njcm9sbFdoZWVsOgotICAgICAgICAg
ICAgcmV0dXJuIGdsb2JhbFBvaW50KFtldmVudCBsb2NhdGlvbkluV2luZG93XSwgW2V2ZW50IHdp
bmRvd10pOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50
OworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEwMDMKKyAgICBjYXNl
IE5TRXZlbnRUeXBlUHJlc3N1cmU6CisjZW5kaWYKKyAgICBjYXNlIE5TTGVmdE1vdXNlRG93bjoK
KyAgICBjYXNlIE5TTGVmdE1vdXNlRHJhZ2dlZDoKKyAgICBjYXNlIE5TTGVmdE1vdXNlVXA6Cisg
ICAgY2FzZSBOU01vdXNlRW50ZXJlZDoKKyAgICBjYXNlIE5TTW91c2VFeGl0ZWQ6CisgICAgY2Fz
ZSBOU01vdXNlTW92ZWQ6CisgICAgY2FzZSBOU090aGVyTW91c2VEb3duOgorICAgIGNhc2UgTlNP
dGhlck1vdXNlRHJhZ2dlZDoKKyAgICBjYXNlIE5TT3RoZXJNb3VzZVVwOgorICAgIGNhc2UgTlNS
aWdodE1vdXNlRG93bjoKKyAgICBjYXNlIE5TUmlnaHRNb3VzZURyYWdnZWQ6CisgICAgY2FzZSBO
U1JpZ2h0TW91c2VVcDoKKyAgICBjYXNlIE5TU2Nyb2xsV2hlZWw6CisgICAgICAgIHJldHVybiBn
bG9iYWxQb2ludChbZXZlbnQgbG9jYXRpb25JbldpbmRvd10sIFtldmVudCB3aW5kb3ddKTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7CiAgICAgfQogfQogCiBzdGF0
aWMgTlNQb2ludCBwb2ludEZvckV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKndpbmRvd1Zp
ZXcpCiB7CiAgICAgc3dpdGNoIChbZXZlbnQgdHlwZV0pIHsKLSAgICAgICAgY2FzZSBOU0xlZnRN
b3VzZURvd246Ci0gICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEcmFnZ2VkOgotICAgICAgICBjYXNl
IE5TTGVmdE1vdXNlVXA6Ci0gICAgICAgIGNhc2UgTlNNb3VzZUVudGVyZWQ6Ci0gICAgICAgIGNh
c2UgTlNNb3VzZUV4aXRlZDoKLSAgICAgICAgY2FzZSBOU01vdXNlTW92ZWQ6Ci0gICAgICAgIGNh
c2UgTlNPdGhlck1vdXNlRG93bjoKLSAgICAgICAgY2FzZSBOU090aGVyTW91c2VEcmFnZ2VkOgot
ICAgICAgICBjYXNlIE5TT3RoZXJNb3VzZVVwOgotICAgICAgICBjYXNlIE5TUmlnaHRNb3VzZURv
d246Ci0gICAgICAgIGNhc2UgTlNSaWdodE1vdXNlRHJhZ2dlZDoKLSAgICAgICAgY2FzZSBOU1Jp
Z2h0TW91c2VVcDoKLSAgICAgICAgY2FzZSBOU1Njcm9sbFdoZWVsOiB7Ci0gICAgICAgICAgICAv
LyBOb3RlOiBUaGlzIHdpbGwgaGF2ZSBpdHMgb3JpZ2luIGF0IHRoZSBib3R0b20gbGVmdCBvZiB0
aGUgd2luZG93IHVubGVzcyB3aW5kb3dWaWV3IGlzIGZsaXBwZWQuCi0gICAgICAgICAgICAvLyBJ
biB0aG9zZSBjYXNlcywgdGhlIFkgY29vcmRpbmF0ZSBnZXRzIGZsaXBwZWQgYnkgV2lkZ2V0Ojpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cuCi0gICAgICAgICAgICBOU1BvaW50IGxvY2F0aW9u
ID0gW2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddOwotICAgICAgICAgICAgaWYgKHdpbmRvd1ZpZXcp
Ci0gICAgICAgICAgICAgICAgbG9jYXRpb24gPSBbd2luZG93VmlldyBjb252ZXJ0UG9pbnQ6bG9j
YXRpb24gZnJvbVZpZXc6bmlsXTsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAg
ICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50Owor
I2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEwMDMKKyAgICBjYXNlIE5T
RXZlbnRUeXBlUHJlc3N1cmU6CisjZW5kaWYKKyAgICBjYXNlIE5TTGVmdE1vdXNlRG93bjoKKyAg
ICBjYXNlIE5TTGVmdE1vdXNlRHJhZ2dlZDoKKyAgICBjYXNlIE5TTGVmdE1vdXNlVXA6CisgICAg
Y2FzZSBOU01vdXNlRW50ZXJlZDoKKyAgICBjYXNlIE5TTW91c2VFeGl0ZWQ6CisgICAgY2FzZSBO
U01vdXNlTW92ZWQ6CisgICAgY2FzZSBOU090aGVyTW91c2VEb3duOgorICAgIGNhc2UgTlNPdGhl
ck1vdXNlRHJhZ2dlZDoKKyAgICBjYXNlIE5TT3RoZXJNb3VzZVVwOgorICAgIGNhc2UgTlNSaWdo
dE1vdXNlRG93bjoKKyAgICBjYXNlIE5TUmlnaHRNb3VzZURyYWdnZWQ6CisgICAgY2FzZSBOU1Jp
Z2h0TW91c2VVcDoKKyAgICBjYXNlIE5TU2Nyb2xsV2hlZWw6IHsKKyAgICAgICAgLy8gTm90ZTog
VGhpcyB3aWxsIGhhdmUgaXRzIG9yaWdpbiBhdCB0aGUgYm90dG9tIGxlZnQgb2YgdGhlIHdpbmRv
dyB1bmxlc3Mgd2luZG93VmlldyBpcyBmbGlwcGVkLgorICAgICAgICAvLyBJbiB0aG9zZSBjYXNl
cywgdGhlIFkgY29vcmRpbmF0ZSBnZXRzIGZsaXBwZWQgYnkgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNv
bnRhaW5pbmdXaW5kb3cuCisgICAgICAgIE5TUG9pbnQgbG9jYXRpb24gPSBbZXZlbnQgbG9jYXRp
b25JbldpbmRvd107CisgICAgICAgIGlmICh3aW5kb3dWaWV3KQorICAgICAgICAgICAgbG9jYXRp
b24gPSBbd2luZG93VmlldyBjb252ZXJ0UG9pbnQ6bG9jYXRpb24gZnJvbVZpZXc6bmlsXTsKKyAg
ICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gTlNaZXJvUG9pbnQ7CiAgICAgfQogfQogCkBAIC0zNTgsMjUgKzM2NywzOCBAQCBib29sIFdl
YkV2ZW50RmFjdG9yeTo6c2hvdWxkQmVIYW5kbGVkQXNDCiAgICAgcmV0dXJuIChzdGF0aWNfY2Fz
dDxOU01lbnVUeXBlPihldmVudC5tZW51VHlwZUZvckV2ZW50KCkpID09IE5TTWVudVR5cGVDb250
ZXh0TWVudSk7CiB9CiAKLVdlYk1vdXNlRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJN
b3VzZUV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU0V2ZW50ICpwcmVzc3VyZUV2ZW50LCBOU1ZpZXcg
KndpbmRvd1ZpZXcpCitXZWJNb3VzZUV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91
c2VFdmVudChOU0V2ZW50ICpldmVudCwgTlNFdmVudCAqbGFzdFByZXNzdXJlRXZlbnQsIE5TVmll
dyAqd2luZG93VmlldykKIHsKICAgICBOU1BvaW50IHBvc2l0aW9uID0gcG9pbnRGb3JFdmVudChl
dmVudCwgd2luZG93Vmlldyk7CiAgICAgTlNQb2ludCBnbG9iYWxQb3NpdGlvbiA9IGdsb2JhbFBv
aW50Rm9yRXZlbnQoZXZlbnQpOwogCi0gICAgV2ViRXZlbnQ6OlR5cGUgdHlwZSAgICAgICAgICAg
ICAgICAgICAgID0gbW91c2VFdmVudFR5cGVGb3JFdmVudChldmVudCk7Ci0gICAgV2ViTW91c2VF
dmVudDo6QnV0dG9uIGJ1dHRvbiAgICAgICAgICAgID0gbW91c2VCdXR0b25Gb3JFdmVudChldmVu
dCk7Ci0gICAgZmxvYXQgZGVsdGFYICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gW2V2ZW50
IGRlbHRhWF07Ci0gICAgZmxvYXQgZGVsdGFZICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
W2V2ZW50IGRlbHRhWV07Ci0gICAgZmxvYXQgZGVsdGFaICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gW2V2ZW50IGRlbHRhWl07Ci0gICAgaW50IGNsaWNrQ291bnQgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gY2xpY2tDb3VudEZvckV2ZW50KGV2ZW50KTsKLSAgICBXZWJFdmVudDo6TW9k
aWZpZXJzIG1vZGlmaWVycyAgICAgICAgICAgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7Ci0g
ICAgZG91YmxlIHRpbWVzdGFtcCAgICAgICAgICAgICAgICAgICAgICAgID0gZXZlbnRUaW1lU3Rh
bXBTaW5jZTE5NzAoZXZlbnQpOwotICAgIGludCBldmVudE51bWJlciAgICAgICAgICAgICAgICAg
ICAgICAgICA9IFtldmVudCBldmVudE51bWJlcl07Ci0gICAgaW50IG1lbnVUeXBlRm9yRXZlbnQg
ICAgICAgICAgICAgICAgICAgID0gdHlwZUZvckV2ZW50KGV2ZW50KTsKKyAgICBXZWJFdmVudDo6
VHlwZSB0eXBlID0gbW91c2VFdmVudFR5cGVGb3JFdmVudChldmVudCk7CisjaWYgX19NQUNfT1Nf
WF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAwMworICAgIGlmIChbZXZlbnQgdHlwZV0gPT0g
TlNFdmVudFR5cGVQcmVzc3VyZSkgeworICAgICAgICAvLyBTaW5jZSBBcHBLaXQgZG9lc24ndCBz
ZW5kIG1vdXNlIGV2ZW50cyBmb3IgZm9yY2UgZG93biBvciBmb3JjZSB1cCwgd2UgaGF2ZSB0byB1
c2UgdGhlIGN1cnJlbnQgcHJlc3N1cmUKKyAgICAgICAgLy8gZXZlbnQgYW5kIGxhc3RQcmVzc3Vy
ZUV2ZW50IHRvIGRldGVjdCBpZiB0aGlzIGlzIE1vdXNlRm9yY2VEb3duLCBNb3VzZUZvcmNlVXAs
IG9yIGp1c3QgTW91c2VGb3JjZUNoYW5nZWQuCisgICAgICAgIGlmIChsYXN0UHJlc3N1cmVFdmVu
dC5zdGFnZSA9PSAxICYmIGV2ZW50LnN0YWdlID09IDIpCisgICAgICAgICAgICB0eXBlID0gV2Vi
RXZlbnQ6Ok1vdXNlRm9yY2VEb3duOworICAgICAgICBlbHNlIGlmIChsYXN0UHJlc3N1cmVFdmVu
dC5zdGFnZSA9PSAyICYmIGV2ZW50LnN0YWdlID09IDEpCisgICAgICAgICAgICB0eXBlID0gV2Vi
RXZlbnQ6Ok1vdXNlRm9yY2VVcDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHlwZSA9IFdl
YkV2ZW50OjpNb3VzZUZvcmNlQ2hhbmdlZDsKKyAgICB9CisjZW5kaWYKKworICAgIFdlYk1vdXNl
RXZlbnQ6OkJ1dHRvbiBidXR0b24gPSBtb3VzZUJ1dHRvbkZvckV2ZW50KGV2ZW50KTsKKyAgICBm
bG9hdCBkZWx0YVggPSBbZXZlbnQgZGVsdGFYXTsKKyAgICBmbG9hdCBkZWx0YVkgPSBbZXZlbnQg
ZGVsdGFZXTsKKyAgICBmbG9hdCBkZWx0YVogPSBbZXZlbnQgZGVsdGFaXTsKKyAgICBpbnQgY2xp
Y2tDb3VudCA9IGNsaWNrQ291bnRGb3JFdmVudChldmVudCk7CisgICAgV2ViRXZlbnQ6Ok1vZGlm
aWVycyBtb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7CisgICAgZG91YmxlIHRp
bWVzdGFtcCA9IGV2ZW50VGltZVN0YW1wU2luY2UxOTcwKGV2ZW50KTsKKyAgICBpbnQgZXZlbnRO
dW1iZXIgPSBbZXZlbnQgZXZlbnROdW1iZXJdOworICAgIGludCBtZW51VHlwZUZvckV2ZW50ID0g
dHlwZUZvckV2ZW50KGV2ZW50KTsKIAogICAgIGRvdWJsZSBmb3JjZSA9IDA7CiAjaWYgX19NQUNf
T1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAwMwotICAgIGZvcmNlID0gcHJlc3N1cmVF
dmVudC5zdGFnZSA8IDEgPyBwcmVzc3VyZUV2ZW50LnByZXNzdXJlIDogcHJlc3N1cmVFdmVudC5w
cmVzc3VyZSArIHByZXNzdXJlRXZlbnQuc3RhZ2UgLSAxOworICAgIGZvcmNlID0gbGFzdFByZXNz
dXJlRXZlbnQuc3RhZ2UgPCAxID8gbGFzdFByZXNzdXJlRXZlbnQucHJlc3N1cmUgOiBsYXN0UHJl
c3N1cmVFdmVudC5wcmVzc3VyZSArIGxhc3RQcmVzc3VyZUV2ZW50LnN0YWdlIC0gMTsKICNlbmRp
ZgogCiAgICAgcmV0dXJuIFdlYk1vdXNlRXZlbnQodHlwZSwgYnV0dG9uLCBJbnRQb2ludChwb3Np
dGlvbiksIEludFBvaW50KGdsb2JhbFBvc2l0aW9uKSwgZGVsdGFYLCBkZWx0YVksIGRlbHRhWiwg
Y2xpY2tDb3VudCwgbW9kaWZpZXJzLCB0aW1lc3RhbXAsIGZvcmNlLCBldmVudE51bWJlciwgbWVu
dVR5cGVGb3JFdmVudCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAkocmV2aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOTcsNiArNDM5Nyw5IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlRXZlbnQodWludDMKIAogICAgIGNhc2UgV2ViRXZlbnQ6
Ok1vdXNlRG93bjoKICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOgorICAgIGNhc2UgV2ViRXZl
bnQ6Ok1vdXNlRm9yY2VDaGFuZ2VkOgorICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRm9yY2VEb3du
OgorICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRm9yY2VVcDoKICAgICBjYXNlIFdlYkV2ZW50OjpX
aGVlbDoKICAgICBjYXNlIFdlYkV2ZW50OjpLZXlEb3duOgogICAgIGNhc2UgV2ViRXZlbnQ6Oktl
eVVwOgpAQCAtNDQyNyw2ICs0NDMwLDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZl
RXZlbnQodWludDMKICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOgogICAgICAgICBtX2N1cnJl
bnRseVByb2Nlc3NlZE1vdXNlRG93bkV2ZW50ID0gbnVsbHB0cjsKICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBXZWJFdmVudDo6TW91c2VGb3JjZUNoYW5nZWQ6CisgICAgY2FzZSBXZWJFdmVudDo6
TW91c2VGb3JjZURvd246CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VGb3JjZVVwOgorICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgV2ViRXZlbnQ6OldoZWVsOiB7CiAgICAgICAgIE1FU1NBR0Vf
Q0hFQ0soIW1fY3VycmVudGx5UHJvY2Vzc2VkV2hlZWxFdmVudHMuaXNFbXB0eSgpKTsKQEAgLTU2
NzEsMTEgKzU2NzgsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Zm9jdXNBbmRTZWxlY3RMYXN0QWN0
CiAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpGb2N1c0FuZFNlbGVjdExh
c3RBY3Rpb25NZW51SGl0VGVzdFJlc3VsdCgpLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFn
ZVByb3h5OjppbnB1dERldmljZUZvcmNlRGlkQ2hhbmdlKGZsb2F0IGZvcmNlLCBpbnQgc3RhZ2Up
Ci17Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbnB1dERldmljZUZv
cmNlRGlkQ2hhbmdlKGZvcmNlLCBzdGFnZSksIG1fcGFnZUlEKTsKLX0KLQogdm9pZCBXZWJQYWdl
UHJveHk6OmltbWVkaWF0ZUFjdGlvbkRpZFVwZGF0ZSgpCiB7CiAgICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpJbW1lZGlhdGVBY3Rpb25EaWRVcGRhdGUoKSwgbV9wYWdlSUQp
OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24g
MTgyODQ4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OTQsNyArOTk0LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2VsZWN0TGFz
dEFjdGlvbk1lbnVSYW5nZSgpOwogICAgIHZvaWQgZm9jdXNBbmRTZWxlY3RMYXN0QWN0aW9uTWVu
dUhpdFRlc3RSZXN1bHQoKTsKIAotICAgIHZvaWQgaW5wdXREZXZpY2VGb3JjZURpZENoYW5nZShm
bG9hdCBmb3JjZSwgaW50IHN0YWdlKTsKICAgICB2b2lkIGltbWVkaWF0ZUFjdGlvbkRpZFVwZGF0
ZSgpOwogICAgIHZvaWQgaW1tZWRpYXRlQWN0aW9uRGlkQ2FuY2VsKCk7CiAgICAgdm9pZCBpbW1l
ZGlhdGVBY3Rpb25EaWRDb21wbGV0ZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24gMTgyODQ4KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMxLDEzICsx
NDMxLDE3IEBAIC0gKHZvaWQpcHJlc3N1cmVDaGFuZ2VXaXRoRXZlbnQ6KE5TRXZlbnQKICAgICBp
ZiAoZXZlbnQgPT0gX2RhdGEtPl9wcmVzc3VyZUV2ZW50KQogICAgICAgICByZXR1cm47CiAKKyAg
ICBpZiAoX2RhdGEtPl9pZ25vcmVzTm9uV2hlZWxFdmVudHMpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGlmIChldmVudC5waGFzZSAhPSBOU0V2ZW50UGhhc2VDaGFuZ2VkICYmIGV2ZW50LnBoYXNl
ICE9IE5TRXZlbnRQaGFzZUJlZ2FuICYmIGV2ZW50LnBoYXNlICE9IE5TRXZlbnRQaGFzZUVuZGVk
KQogICAgICAgICByZXR1cm47CiAKKyAgICBOYXRpdmVXZWJNb3VzZUV2ZW50IHdlYkV2ZW50KGV2
ZW50LCBfZGF0YS0+X3ByZXNzdXJlRXZlbnQsIHNlbGYpOworICAgIF9kYXRhLT5fcGFnZS0+aGFu
ZGxlTW91c2VFdmVudCh3ZWJFdmVudCk7CisKICAgICBbX2RhdGEtPl9wcmVzc3VyZUV2ZW50IHJl
bGVhc2VdOwogICAgIF9kYXRhLT5fcHJlc3N1cmVFdmVudCA9IFtldmVudCByZXRhaW5dOwotCi0g
ICAgX2RhdGEtPl9wYWdlLT5pbnB1dERldmljZUZvcmNlRGlkQ2hhbmdlKGV2ZW50LnByZXNzdXJl
LCBldmVudC5zdGFnZSk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpblgxMS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRz
Y2FwZVBsdWdpblgxMS5jcHAJKHJldmlzaW9uIDE4Mjg0OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5YMTEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NzQsNiArNDc0LDkgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbjo6cGxhdGZv
cm1IYW5kbGVNb3VzZQogICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToKICAgICAgICAgc2V0
WE1vdGlvbkV2ZW50RmllbGRzKHhFdmVudCwgZXZlbnQsIGNvbnZlcnRUb1Jvb3RWaWV3KEludFBv
aW50KCkpKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VGb3JjZUNo
YW5nZWQ6CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VGb3JjZURvd246CisgICAgY2FzZSBXZWJF
dmVudDo6TW91c2VGb3JjZVVwOgogICAgIGNhc2UgV2ViRXZlbnQ6Ok5vVHlwZToKICAgICBjYXNl
IFdlYkV2ZW50OjpXaGVlbDoKICAgICBjYXNlIFdlYkV2ZW50OjpLZXlEb3duOgpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24g
MTgyODQ4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTAzLDYgKzE5MDMsMTQgQEAgc3RhdGljIGJvb2wgaGFuZGxl
TW91c2VFdmVudChjb25zdCBXZWJNbwogICAgICAgICAgICAgaWYgKG9ubHlVcGRhdGVTY3JvbGxi
YXJzKQogICAgICAgICAgICAgICAgIHJldHVybiBwYWdlLT5jb3JlUGFnZSgpLT51c2VySW5wdXRC
cmlkZ2UoKS5oYW5kbGVNb3VzZU1vdmVPblNjcm9sbGJhckV2ZW50KHBsYXRmb3JtTW91c2VFdmVu
dCk7CiAgICAgICAgICAgICByZXR1cm4gcGFnZS0+Y29yZVBhZ2UoKS0+dXNlcklucHV0QnJpZGdl
KCkuaGFuZGxlTW91c2VNb3ZlRXZlbnQocGxhdGZvcm1Nb3VzZUV2ZW50KTsKKworICAgICAgICBj
YXNlIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VDaGFuZ2VkOgorICAgICAgICAgICAgcmV0dXJu
IHBhZ2UtPmNvcmVQYWdlKCktPnVzZXJJbnB1dEJyaWRnZSgpLmhhbmRsZU1vdXNlRm9yY2VDaGFu
Z2VkRXZlbnQocGxhdGZvcm1Nb3VzZUV2ZW50KTsKKyAgICAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50
OjpNb3VzZUZvcmNlRG93bjoKKyAgICAgICAgICAgIHJldHVybiBwYWdlLT5jb3JlUGFnZSgpLT51
c2VySW5wdXRCcmlkZ2UoKS5oYW5kbGVNb3VzZUZvcmNlRG93bkV2ZW50KHBsYXRmb3JtTW91c2VF
dmVudCk7CisgICAgICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6TW91c2VGb3JjZVVwOgorICAgICAg
ICAgICAgcmV0dXJuIHBhZ2UtPmNvcmVQYWdlKCktPnVzZXJJbnB1dEJyaWRnZSgpLmhhbmRsZU1v
dXNlRm9yY2VVcEV2ZW50KHBsYXRmb3JtTW91c2VFdmVudCk7CisKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CShyZXZpc2lvbiAxODI4NDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDk0LDcgKzEwOTQsNiBAQCBwcml2YXRlOgog
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGxvb2t1cFRleHRBdExvY2F0aW9uKFdlYkNv
cmU6OkZsb2F0UG9pbnQsIE5TRGljdGlvbmFyeSAqKm9wdGlvbnMpOwogICAgIHZvaWQgc2VsZWN0
TGFzdEFjdGlvbk1lbnVSYW5nZSgpOwogICAgIHZvaWQgZm9jdXNBbmRTZWxlY3RMYXN0QWN0aW9u
TWVudUhpdFRlc3RSZXN1bHQoKTsKLSAgICB2b2lkIGlucHV0RGV2aWNlRm9yY2VEaWRDaGFuZ2Uo
ZmxvYXQgZm9yY2UsIGludCBzdGFnZSk7CiAgICAgdm9pZCBpbW1lZGlhdGVBY3Rpb25EaWRVcGRh
dGUoKTsKICAgICB2b2lkIGltbWVkaWF0ZUFjdGlvbkRpZENhbmNlbCgpOwogICAgIHZvaWQgaW1t
ZWRpYXRlQWN0aW9uRGlkQ29tcGxldGUoKTsKQEAgLTEzNTUsNyArMTM1NCw2IEBAIHByaXZhdGU6
CiAgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBtX2xhc3RBY3Rpb25NZW51UmFuZ2VGb3JTZWxl
Y3Rpb247CiAgICAgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCBtX2xhc3RBY3Rpb25NZW51SGl0VGVz
dFJlc3VsdDsKICAgICBSZWZQdHI8V2ViUGFnZU92ZXJsYXk+IG1fbGFzdEFjdGlvbk1lbnVIaXRQ
YWdlT3ZlcmxheTsKLSAgICBpbnQgbV9sYXN0Rm9yY2VTdGFnZSB7IDAgfTsKICNlbmRpZgogCiAg
ICAgYm9vbCBtX21haW5GcmFtZVByb2dyZXNzQ29tcGxldGVkOwpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJl
dmlzaW9uIDE4Mjg0OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNyArNDA3LDYgQEAgbWVzc2Fn
ZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgUGVyZm9ybUFjdGlvbk1lbnVIaXRU
ZXN0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aW9uLCBib29sIGZvckltbWVk
aWF0ZUFjdGlvbikKICAgICBTZWxlY3RMYXN0QWN0aW9uTWVudVJhbmdlKCkKICAgICBGb2N1c0Fu
ZFNlbGVjdExhc3RBY3Rpb25NZW51SGl0VGVzdFJlc3VsdCgpCi0gICAgSW5wdXREZXZpY2VGb3Jj
ZURpZENoYW5nZShmbG9hdCBmb3JjZSwgaW50IHN0YWdlKQogICAgIEltbWVkaWF0ZUFjdGlvbkRp
ZFVwZGF0ZSgpCiAgICAgSW1tZWRpYXRlQWN0aW9uRGlkQ2FuY2VsKCkKICAgICBJbW1lZGlhdGVB
Y3Rpb25EaWRDb21wbGV0ZSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShyZXZpc2lvbiAxODI4NDgpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTExNDEsMjUgKzExNDEsNiBAQCB2b2lkIFdlYlBhZ2U6OmZvY3VzQW5kU2VsZWN0
TGFzdEFjdGlvbk1lCiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihwb3NpdGlv
bik7CiB9CiAKLXZvaWQgV2ViUGFnZTo6aW5wdXREZXZpY2VGb3JjZURpZENoYW5nZShmbG9hdCBm
b3JjZSwgaW50IHN0YWdlKQotewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBtX2xhc3RBY3Rpb25N
ZW51SGl0VGVzdFJlc3VsdC5pbm5lckVsZW1lbnQoKTsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGZsb2F0IG92ZXJhbGxGb3JjZSA9IHN0YWdlIDwgMSA/IGZvcmNl
IDogZm9yY2UgKyBzdGFnZSAtIDE7Ci0gICAgZWxlbWVudC0+ZGlzcGF0Y2hNb3VzZUZvcmNlQ2hh
bmdlZChvdmVyYWxsRm9yY2UpOwotCi0gICAgaWYgKG1fbGFzdEZvcmNlU3RhZ2UgPT0gMSAmJiBz
dGFnZSA9PSAyKQotICAgICAgICBlbGVtZW50LT5kaXNwYXRjaE1vdXNlRm9yY2VEb3duKCk7Ci0g
ICAgZWxzZSBpZiAobV9sYXN0Rm9yY2VTdGFnZSA9PSAyICYmIHN0YWdlID09IDEpIHsKLSAgICAg
ICAgZWxlbWVudC0+ZGlzcGF0Y2hNb3VzZUZvcmNlVXAoKTsKLSAgICAgICAgZWxlbWVudC0+ZGlz
cGF0Y2hNb3VzZUZvcmNlQ2xpY2soKTsKLSAgICB9Ci0KLSAgICBtX2xhc3RGb3JjZVN0YWdlID0g
c3RhZ2U7Ci19Ci0KIHZvaWQgV2ViUGFnZTo6aW1tZWRpYXRlQWN0aW9uRGlkVXBkYXRlKCkKIHsK
ICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLnNldEltbWVkaWF0ZUFjdGlv
blN0YWdlKEltbWVkaWF0ZUFjdGlvblN0YWdlOjpBY3Rpb25VcGRhdGVkKTsKSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mjg4
MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisy
MDE1LTA0LTE1ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBGb3Jj
ZSBtb3VzZSBldmVudHMgc2hvdWxkIGdvIHRocm91Z2ggbm9ybWFsIG1vdXNlIGV2ZW50IGhhbmRs
aW5nIGNvZGUgcGF0aHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0Mzc0OQorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6
Ly9wcm9ibGVtLzIwNDcyODk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIG1vdXNlRm9yY2VEb3duL21vdXNlRm9yY2VVcC9tb3VzZUZvcmNlQ2hh
bmdlZCBzdXBwb3J0IHRvIFdlYktpdFRlc3RSdW5uZXIuIAorICAgICAgICBTaW5jZSB0aGVyZSBp
cyBub3QgYSB3YXkgdG8gY3JlYXRlIGFuIE5TRXZlbnRUeXBlUHJlc3N1cmUgZnJvbSBzY3JhdGNo
LCB3ZSAKKyAgICAgICAgc3ViY2xhc3MgTlNFdmVudCBhbmQgb3ZlcnJpZGUgYWxsIG9mIHRoZSBj
cml0aWNhbCBtZXRob2RzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRl
clByb3h5Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5k
aW5ncy9FdmVudFNlbmRpbmdDb250cm9sbGVyLmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlRG93bik6CisgICAgICAgIChX
VFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9yY2VVcCk6CisgICAgICAgIChXVFI6
OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9yY2VDaGFuZ2VkKToKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaDoK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5q
ZWN0ZWRCdW5kbGUpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFjL0V2ZW50U2VuZGVy
UHJveHkubW06CisgICAgICAgICgtW0V2ZW50U2VuZGVyUHJlc3N1cmVFdmVudCBpbml0QXRMb2Nh
dGlvbjpnbG9iYWxMb2NhdGlvbjpzdGFnZTpwcmVzc3VyZTpwaGFzZTp0aW1lOmV2ZW50TnVtYmVy
Ol0pOgorICAgICAgICAoLVtFdmVudFNlbmRlclByZXNzdXJlRXZlbnQgdGltZXN0YW1wXSk6Cisg
ICAgICAgICgtW0V2ZW50U2VuZGVyUHJlc3N1cmVFdmVudCB0eXBlXSk6CisgICAgICAgICgtW0V2
ZW50U2VuZGVyUHJlc3N1cmVFdmVudCBsb2NhdGlvbkluV2luZG93XSk6CisgICAgICAgICgtW0V2
ZW50U2VuZGVyUHJlc3N1cmVFdmVudCBsb2NhdGlvbl0pOgorICAgICAgICAoLVtFdmVudFNlbmRl
clByZXNzdXJlRXZlbnQgc3RhZ2VdKToKKyAgICAgICAgKC1bRXZlbnRTZW5kZXJQcmVzc3VyZUV2
ZW50IHByZXNzdXJlXSk6CisgICAgICAgICgtW0V2ZW50U2VuZGVyUHJlc3N1cmVFdmVudCBwaGFz
ZV0pOgorICAgICAgICAoLVtFdmVudFNlbmRlclByZXNzdXJlRXZlbnQgZXZlbnROdW1iZXJdKToK
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZURvd24pOgorICAgICAg
ICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZUZvcmNlVXApOgorICAgICAgICAoV1RSOjpF
dmVudFNlbmRlclByb3h5Ojptb3VzZUZvcmNlQ2hhbmdlZCk6CisKIDIwMTUtMDQtMTUgIEd5dXlv
dW5nIEtpbSAgPGd5dXlvdW5nLmtpbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtFRkxdIEFkZCBn
bnV0bHMgdG8gamhidWlsZC5tb2R1bGUKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZl
bnRTZW5kZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZl
bnRTZW5kZXJQcm94eS5oCShyZXZpc2lvbiAxODI4NDgpCisrKyBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0V2ZW50U2VuZGVyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOSBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIG1vdXNlRG93bih1bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2Rp
ZmllcnMpOwogICAgIHZvaWQgbW91c2VVcCh1bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2RpZmll
cnMpOworICAgIHZvaWQgbW91c2VGb3JjZURvd24oKTsKKyAgICB2b2lkIG1vdXNlRm9yY2VVcCgp
OworICAgIHZvaWQgbW91c2VGb3JjZUNoYW5nZWQoZmxvYXQpOwogICAgIHZvaWQgbW91c2VNb3Zl
VG8oZG91YmxlIHgsIGRvdWJsZSB5KTsKICAgICB2b2lkIG1vdXNlU2Nyb2xsQnkoaW50IHgsIGlu
dCB5KTsKICAgICB2b2lkIG1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyhp
bnQgeCwgaW50IHksIGludCBwaGFzZSwgaW50IG1vbWVudHVtKTsKSW5kZXg6IFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxODI4NDgpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTEwMiw2ICsxMTAyLDMwIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdENvbnRyb2xsZXI6
OmQKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZUZvcmNlRG93biIp
KSB7CisgICAgICAgICAgICBXS1BhZ2VTZXRTaG91bGRTZW5kRXZlbnRzU3luY2hyb25vdXNseSht
YWluV2ViVmlldygpLT5wYWdlKCksIHRydWUpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclBy
b3h5LT5tb3VzZUZvcmNlRG93bigpOworICAgICAgICAgICAgV0tQYWdlU2V0U2hvdWxkU2VuZEV2
ZW50c1N5bmNocm9ub3VzbHkobWFpbldlYlZpZXcoKS0+cGFnZSgpLCBmYWxzZSk7CisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VGb3JjZVVwIikpIHsKKyAgICAgICAg
ICAgIFdLUGFnZVNldFNob3VsZFNlbmRFdmVudHNTeW5jaHJvbm91c2x5KG1haW5XZWJWaWV3KCkt
PnBhZ2UoKSwgdHJ1ZSk7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRm9y
Y2VVcCgpOworICAgICAgICAgICAgV0tQYWdlU2V0U2hvdWxkU2VuZEV2ZW50c1N5bmNocm9ub3Vz
bHkobWFpbldlYlZpZXcoKS0+cGFnZSgpLCBmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1
Yk1lc3NhZ2VOYW1lLCAiTW91c2VGb3JjZUNoYW5nZWQiKSkgeworICAgICAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGZvcmNlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiRm9yY2UiKSk7CisgICAgICAgICAgICBkb3VibGUgZm9yY2UgPSBXS0RvdWJs
ZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZm9yY2VLZXkuZ2V0KCkpKSk7CisKKyAgICAgICAg
ICAgIFdLUGFnZVNldFNob3VsZFNlbmRFdmVudHNTeW5jaHJvbm91c2x5KG1haW5XZWJWaWV3KCkt
PnBhZ2UoKSwgdHJ1ZSk7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRm9y
Y2VDaGFuZ2VkKGZvcmNlKTsKKyAgICAgICAgICAgIFdLUGFnZVNldFNob3VsZFNlbmRFdmVudHNT
eW5jaHJvbm91c2x5KG1haW5XZWJWaWV3KCktPnBhZ2UoKSwgZmFsc2UpOworICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlU2Nyb2xsQnkiKSkgewogICAgICAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJYIikpOwogICAgICAgICAgICAgZG91YmxlIHggPSBXS0RvdWJsZUdldFZh
bHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRp
bmdDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTgyODQ4KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUzLDYgKzI1Myw0NiBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1v
dXNlTW92ZVRvCiAgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5h
bWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwogfQogCit2b2lkIEV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9yY2VEb3duKCkKK3sKKyAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tN
dXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keShBZG9wdFdLLCBXS011
dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHN1Yk1lc3NhZ2VLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1
Yk1lc3NhZ2UiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1l
KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlRG93biIp
KTsKKyAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKKworICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKK30KKwordm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVy
Ojptb3VzZUZvcmNlVXAoKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNl
bmRlck1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJF
dmVudFNlbmRlciIpKTsKKyAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBF
dmVudFNlbmRlck1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7CisKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleShBZG9wdFdL
LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKKyAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIk1vdXNlRm9yY2VVcCIpKTsKKyAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1
Yk1lc3NhZ2VOYW1lLmdldCgpKTsKKworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNl
bmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsK
K30KKwordm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlQ2hhbmdlZChkb3Vi
bGUgZm9yY2UpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2Vu
ZGVyIikpOworICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkoQWRvcHRXSywgV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKwor
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5KEFkb3B0V0ssIFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOworICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiTW91c2VGb3JjZUNoYW5nZWQiKSk7CisgICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJN
ZXNzYWdlTmFtZS5nZXQoKSk7CisKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZm9yY2VL
ZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZvcmNlIikpOworICAg
IFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBmb3JjZVJlZihBZG9wdFdLLCBXS0RvdWJsZUNyZWF0
ZShmb3JjZSkpOworICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgZm9yY2VLZXkuZ2V0KCksIGZvcmNlUmVmLmdldCgpKTsKKworICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKK30KKwogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjps
ZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRzKQogewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxl
ci5oCShyZXZpc2lvbiAxODI4NDgpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiAr
NDYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBtb3VzZURvd24oaW50IGJ1dHRvbiwgSlNWYWx1ZVJl
ZiBtb2RpZmllckFycmF5KTsKICAgICB2b2lkIG1vdXNlVXAoaW50IGJ1dHRvbiwgSlNWYWx1ZVJl
ZiBtb2RpZmllckFycmF5KTsKICAgICB2b2lkIG1vdXNlTW92ZVRvKGludCB4LCBpbnQgeSk7Cisg
ICAgdm9pZCBtb3VzZUZvcmNlRG93bigpOworICAgIHZvaWQgbW91c2VGb3JjZVVwKCk7CisgICAg
dm9pZCBtb3VzZUZvcmNlQ2hhbmdlZChkb3VibGUgZm9yY2UpOwogICAgIHZvaWQgbW91c2VTY3Jv
bGxCeShpbnQgeCwgaW50IHkpOwogICAgIHZvaWQgbW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1v
bWVudHVtUGhhc2VzKGludCB4LCBpbnQgeSwgSlNTdHJpbmdSZWYgcGhhc2UsIEpTU3RyaW5nUmVm
IG1vbWVudHVtLCBib29sIGFzeW5jU2Nyb2xsaW5nKTsKICAgICB2b2lkIGNvbnRpbnVvdXNNb3Vz
ZVNjcm9sbEJ5KGludCB4LCBpbnQgeSwgYm9vbCBwYWdlZCk7CkluZGV4OiBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QmluZGluZ3MvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5pZGwJKHJldmlzaW9uIDE4Mjg0OCkKKysr
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvRXZlbnRTZW5k
aW5nQ29udHJvbGxlci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDkgQEAgaW50ZXJm
YWNlIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIgewogICAgIHZvaWQgbW91c2VEb3duKGxvbmcgYnV0
dG9uTnVtYmVyLCBvYmplY3QgbW9kaWZpZXJBcnJheSk7CiAgICAgdm9pZCBtb3VzZVVwKGxvbmcg
YnV0dG9uTnVtYmVyLCBvYmplY3QgbW9kaWZpZXJBcnJheSk7CiAgICAgdm9pZCBtb3VzZU1vdmVU
byhsb25nIHgsIGxvbmcgeSk7CisgICAgdm9pZCBtb3VzZUZvcmNlRG93bigpOworICAgIHZvaWQg
bW91c2VGb3JjZVVwKCk7CisgICAgdm9pZCBtb3VzZUZvcmNlQ2hhbmdlZChkb3VibGUgZm9yY2Up
OwogICAgIHZvaWQgbW91c2VTY3JvbGxCeShsb25nIHgsIGxvbmcgeSk7CiAgICAgdm9pZCBtb3Vz
ZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMobG9uZyB4LCBsb25nIHksIERPTVN0
cmluZyBwaGFzZSwgRE9NU3RyaW5nIG1vbWVudHVtLCBvcHRpb25hbCBib29sZWFuIGFzeW5jU2Ny
b2xsaW5nKTsKICAgICB2b2lkIGNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5KGxvbmcgeCwgbG9uZyB5
LCBvcHRpb25hbCBib29sZWFuIHBhZ2VkKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
bWFjL0V2ZW50U2VuZGVyUHJveHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94eS5tbQkocmV2aXNpb24gMTgyODQ4KQorKysgVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94eS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzksNiArMzksODIgQEAgQGludGVyZmFjZSBOU0FwcGxpY2F0aW9uIChEZXRhaWxzKQogLSAo
dm9pZClfc2V0Q3VycmVudEV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CiBAZW5kCiAKK0BpbnRlcmZh
Y2UgRXZlbnRTZW5kZXJQcmVzc3VyZUV2ZW50IDogTlNFdmVudCB7CitAcHVibGljCisgICAgTlNQ
b2ludCBfZXZlbnRTZW5kZXJfbG9jYXRpb25JbldpbmRvdzsKKyAgICBOU1BvaW50IF9ldmVudFNl
bmRlcl9sb2NhdGlvbjsKKyAgICBOU0ludGVnZXIgX2V2ZW50U2VuZGVyX3N0YWdlOworICAgIGZs
b2F0IF9ldmVudFNlbmRlcl9wcmVzc3VyZTsKKyAgICBOU0V2ZW50UGhhc2UgX2V2ZW50U2VuZGVy
X3BoYXNlOworICAgIE5TVGltZUludGVydmFsIF9ldmVudFNlbmRlcl90aW1lc3RhbXA7CisgICAg
TlNJbnRlZ2VyIF9ldmVudFNlbmRlcl9ldmVudE51bWJlcjsKK30KKworLSAoaWQpaW5pdEF0TG9j
YXRpb246KE5TUG9pbnQpbG9jYXRpb24gZ2xvYmFsTG9jYXRpb246KE5TUG9pbnQpZ2xvYmFsTG9j
YXRpb24gc3RhZ2U6KE5TSW50ZWdlcilzdGFnZSBwcmVzc3VyZTooZmxvYXQpcHJlc3N1cmUgcGhh
c2U6KE5TRXZlbnRQaGFzZSlwaGFzZSB0aW1lOihOU1RpbWVJbnRlcnZhbCl0aW1lIGV2ZW50TnVt
YmVyOihOU0ludGVnZXIpZXZlbnROdW1iZXI7CistIChOU1RpbWVJbnRlcnZhbCl0aW1lc3RhbXA7
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBFdmVudFNlbmRlclByZXNzdXJlRXZlbnQKKworLSAo
aWQpaW5pdEF0TG9jYXRpb246KE5TUG9pbnQpbG9jYXRpb24gZ2xvYmFsTG9jYXRpb246KE5TUG9p
bnQpZ2xvYmFsTG9jYXRpb24gc3RhZ2U6KE5TSW50ZWdlcilzdGFnZSBwcmVzc3VyZTooZmxvYXQp
cHJlc3N1cmUgcGhhc2U6KE5TRXZlbnRQaGFzZSlwaGFzZSB0aW1lOihOU1RpbWVJbnRlcnZhbCl0
aW1lIGV2ZW50TnVtYmVyOihOU0ludGVnZXIpZXZlbnROdW1iZXIKK3sKKyAgICBzZWxmID0gW3N1
cGVyIGluaXRdOworCisgICAgaWYgKHNlbGYpIHsKKyAgICAgICAgX2V2ZW50U2VuZGVyX2xvY2F0
aW9uID0gbG9jYXRpb247CisgICAgICAgIF9ldmVudFNlbmRlcl9sb2NhdGlvbkluV2luZG93ID0g
Z2xvYmFsTG9jYXRpb247IC8vPz8/Pz8/Pz8KKyAgICAgICAgX2V2ZW50U2VuZGVyX3N0YWdlID0g
c3RhZ2U7CisgICAgICAgIF9ldmVudFNlbmRlcl9wcmVzc3VyZSA9IHByZXNzdXJlOworICAgICAg
ICBfZXZlbnRTZW5kZXJfcGhhc2UgPSBwaGFzZTsKKyAgICAgICAgX2V2ZW50U2VuZGVyX3RpbWVz
dGFtcCA9IHRpbWU7CisgICAgICAgIF9ldmVudFNlbmRlcl9ldmVudE51bWJlciA9IGV2ZW50TnVt
YmVyOworICAgIH0KKworICAgIHJldHVybiBzZWxmOworfQorCistIChOU1RpbWVJbnRlcnZhbCl0
aW1lc3RhbXAKK3sKKyAgICByZXR1cm4gX2V2ZW50U2VuZGVyX3RpbWVzdGFtcDsKK30KKworLSAo
TlNFdmVudFR5cGUpdHlwZQoreworICAgIHJldHVybiBOU0V2ZW50VHlwZVByZXNzdXJlOworfQor
CistIChOU1BvaW50KWxvY2F0aW9uSW5XaW5kb3cKK3sKKyAgICByZXR1cm4gc2VsZi0+X2V2ZW50
U2VuZGVyX2xvY2F0aW9uOworfQorCistIChOU1BvaW50KWxvY2F0aW9uCit7CisgICAgcmV0dXJu
IHNlbGYtPl9ldmVudFNlbmRlcl9sb2NhdGlvbkluV2luZG93OworfQorCistIChOU0ludGVnZXIp
c3RhZ2UKK3sKKyAgICByZXR1cm4gX2V2ZW50U2VuZGVyX3N0YWdlOworfQorCistIChmbG9hdClw
cmVzc3VyZQoreworICAgIHJldHVybiBfZXZlbnRTZW5kZXJfcHJlc3N1cmU7Cit9CisKKy0gKE5T
RXZlbnRQaGFzZSlwaGFzZQoreworICAgIHJldHVybiBfZXZlbnRTZW5kZXJfcGhhc2U7Cit9CisK
Ky0gKE5TSW50ZWdlcilldmVudE51bWJlcgoreworICAgIHJldHVybiBfZXZlbnRTZW5kZXJfZXZl
bnROdW1iZXI7Cit9CisKK0BlbmQKKwogbmFtZXNwYWNlIFdUUiB7CiAKIGVudW0gTW91c2VBY3Rp
b24gewpAQCAtMjAwLDYgKzI3Niw5MyBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlVXAo
dW5zaWduZWQgCiAgICAgbV9jbGlja1Bvc2l0aW9uID0gbV9wb3NpdGlvbjsKIH0KIAordm9pZCBF
dmVudFNlbmRlclByb3h5Ojptb3VzZUZvcmNlRG93bigpCit7CisgICAgRXZlbnRTZW5kZXJQcmVz
c3VyZUV2ZW50ICpmaXJzdEV2ZW50ID0gW1tFdmVudFNlbmRlclByZXNzdXJlRXZlbnQgYWxsb2Nd
IGluaXRBdExvY2F0aW9uOk5TTWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbExvY2F0aW9uOihb
bV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSBjb252ZXJ0
UmVjdFRvU2NyZWVuOk5TTWFrZVJlY3QobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnksIDEsIDEp
XS5vcmlnaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhZ2U6
MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNzdXJlOjAuOQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlOk5TRXZlbnRQaGFz
ZUNoYW5nZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOmFi
c29sdXRlVGltZUZvckV2ZW50VGltZShjdXJyZW50RXZlbnRUaW1lKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnROdW1iZXI6KytldmVudE51bWJlcl07Cisg
ICAgRXZlbnRTZW5kZXJQcmVzc3VyZUV2ZW50ICpzZWNvbmRFdmVudCA9IFtbRXZlbnRTZW5kZXJQ
cmVzc3VyZUV2ZW50IGFsbG9jXSBpbml0QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9u
LngsIG1fcG9zaXRpb24ueSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbG9iYWxMb2NhdGlvbjooW21fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRm
b3JtV2luZG93KCkgY29udmVydFJlY3RUb1NjcmVlbjpOU01ha2VSZWN0KG1fcG9zaXRpb24ueCwg
bV9wb3NpdGlvbi55LCAxLCAxKV0ub3JpZ2luKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YWdlOjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcmVzc3VyZTowLjEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwaGFzZTpOU0V2ZW50UGhhc2VDaGFuZ2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGltZTphYnNvbHV0ZVRpbWVGb3JFdmVudFRpbWUoY3VycmVudEV2ZW50VGlt
ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TnVtYmVy
OisrZXZlbnROdW1iZXJdOworCisgICAgTlNWaWV3ICp0YXJnZXRWaWV3ID0gW21fdGVzdENvbnRy
b2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpIGhpdFRlc3Q6W2ZpcnN0RXZlbnQg
bG9jYXRpb25JbldpbmRvd11dOworICAgIHRhcmdldFZpZXcgPSB0YXJnZXRWaWV3ID8gdGFyZ2V0
VmlldyA6IG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpOwor
ICAgIEFTU0VSVCh0YXJnZXRWaWV3KTsKKworICAgIC8vIFNpbmNlIEFwcEtpdCBkb2VzIG5vdCBp
bXBsZW1lbnQgZm9yY2V1cC9kb3duIGFzIG1vdXNlIGV2ZW50cywgd2UgbmVlZCB0byBzZW5kIHR3
byBwcmVzc3VyZSBldmVudHMgdG8gZGV0ZWN0CisgICAgLy8gdGhlIGNoYW5nZSBpbiBzdGFnZSB0
aGF0IG1hcmtzIHRob3NlIG1vbWVudHMuCisgICAgW05TQXBwIF9zZXRDdXJyZW50RXZlbnQ6Zmly
c3RFdmVudF07CisgICAgW3RhcmdldFZpZXcgcHJlc3N1cmVDaGFuZ2VXaXRoRXZlbnQ6Zmlyc3RF
dmVudF07CisgICAgW05TQXBwIF9zZXRDdXJyZW50RXZlbnQ6c2Vjb25kRXZlbnRdOworICAgIFt0
YXJnZXRWaWV3IHByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50OnNlY29uZEV2ZW50XTsKKworICAgIFtO
U0FwcCBfc2V0Q3VycmVudEV2ZW50Om5pbF07CisgICAgLy8gV0tWaWV3IGNhY2hlcyB0aGUgbW9z
dCByZWNlbnQgcHJlc3N1cmUgZXZlbnQsIHNvIHNlbmQgaXQgYSBuaWwgZXZlbnQgdG8gY2xlYXIg
dGhlIGNhY2hlLgorICAgIFt0YXJnZXRWaWV3IHByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50Om5pbF07
Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZVVwKCkKK3sKKyAgICBFdmVu
dFNlbmRlclByZXNzdXJlRXZlbnQgKmZpcnN0RXZlbnQgPSBbW0V2ZW50U2VuZGVyUHJlc3N1cmVF
dmVudCBhbGxvY10gaW5pdEF0TG9jYXRpb246TlNNYWtlUG9pbnQobV9wb3NpdGlvbi54LCBtX3Bv
c2l0aW9uLnkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFs
TG9jYXRpb246KFttX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRv
dygpIGNvbnZlcnRSZWN0VG9TY3JlZW46TlNNYWtlUmVjdChtX3Bvc2l0aW9uLngsIG1fcG9zaXRp
b24ueSwgMSwgMSldLm9yaWdpbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGFnZToyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJl
c3N1cmU6MC4xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2U6
TlNFdmVudFBoYXNlQ2hhbmdlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWU6YWJzb2x1dGVUaW1lRm9yRXZlbnRUaW1lKGN1cnJlbnRFdmVudFRpbWUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE51bWJlcjorK2V2ZW50
TnVtYmVyXTsKKyAgICBFdmVudFNlbmRlclByZXNzdXJlRXZlbnQgKnNlY29uZEV2ZW50ID0gW1tF
dmVudFNlbmRlclByZXNzdXJlRXZlbnQgYWxsb2NdIGluaXRBdExvY2F0aW9uOk5TTWFrZVBvaW50
KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsb2JhbExvY2F0aW9uOihbbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZp
ZXcoKS0+cGxhdGZvcm1XaW5kb3coKSBjb252ZXJ0UmVjdFRvU2NyZWVuOk5TTWFrZVJlY3QobV9w
b3NpdGlvbi54LCBtX3Bvc2l0aW9uLnksIDEsIDEpXS5vcmlnaW4pCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhZ2U6MQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByZXNzdXJlOjAuOQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBoYXNlOk5TRXZlbnRQaGFzZUNoYW5nZWQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lOmFic29sdXRlVGltZUZvckV2ZW50VGltZShjdXJy
ZW50RXZlbnRUaW1lKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXZlbnROdW1iZXI6KytldmVudE51bWJlcl07CisKKyAgICBOU1ZpZXcgKnRhcmdldFZpZXcgPSBb
bV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkgaGl0VGVzdDpb
Zmlyc3RFdmVudCBsb2NhdGlvbkluV2luZG93XV07CisgICAgdGFyZ2V0VmlldyA9IHRhcmdldFZp
ZXcgPyB0YXJnZXRWaWV3IDogbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZv
cm1WaWV3KCk7CisgICAgQVNTRVJUKHRhcmdldFZpZXcpOworCisgICAgLy8gU2luY2UgQXBwS2l0
IGRvZXMgbm90IGltcGxlbWVudCBmb3JjZXVwL2Rvd24gYXMgbW91c2UgZXZlbnRzLCB3ZSBuZWVk
IHRvIHNlbmQgdHdvIHByZXNzdXJlIGV2ZW50cyB0byBkZXRlY3QKKyAgICAvLyB0aGUgY2hhbmdl
IGluIHN0YWdlIHRoYXQgbWFya3MgdGhvc2UgbW9tZW50cy4KKyAgICBbTlNBcHAgX3NldEN1cnJl
bnRFdmVudDpmaXJzdEV2ZW50XTsKKyAgICBbdGFyZ2V0VmlldyBwcmVzc3VyZUNoYW5nZVdpdGhF
dmVudDpmaXJzdEV2ZW50XTsKKyAgICBbTlNBcHAgX3NldEN1cnJlbnRFdmVudDpzZWNvbmRFdmVu
dF07CisgICAgW3RhcmdldFZpZXcgcHJlc3N1cmVDaGFuZ2VXaXRoRXZlbnQ6c2Vjb25kRXZlbnRd
OworCisgICAgW05TQXBwIF9zZXRDdXJyZW50RXZlbnQ6bmlsXTsKKyAgICAvLyBXS1ZpZXcgY2Fj
aGVzIHRoZSBtb3N0IHJlY2VudCBwcmVzc3VyZSBldmVudCwgc28gc2VuZCBpdCBhIG5pbCBldmVu
dCB0byBjbGVhciB0aGUgY2FjaGUuCisgICAgW3RhcmdldFZpZXcgcHJlc3N1cmVDaGFuZ2VXaXRo
RXZlbnQ6bmlsXTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZUZvcmNlQ2hhbmdl
ZChmbG9hdCBmb3JjZSkKK3sKKyAgICBFdmVudFNlbmRlclByZXNzdXJlRXZlbnQgKmV2ZW50ID0g
W1tFdmVudFNlbmRlclByZXNzdXJlRXZlbnQgYWxsb2NdIGluaXRBdExvY2F0aW9uOk5TTWFrZVBv
aW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsb2JhbExvY2F0aW9uOihbbV90ZXN0Q29udHJvbGxlci0+bWFpbldl
YlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSBjb252ZXJ0UmVjdFRvU2NyZWVuOk5TTWFrZVJlY3Qo
bV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnksIDEsIDEpXS5vcmlnaW4pCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhZ2U6Zm9yY2UgPCAxID8gMSA6IDIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzc3VyZTpmb3JjZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlOk5TRXZlbnRQaGFzZUNoYW5n
ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOmFic29sdXRl
VGltZUZvckV2ZW50VGltZShjdXJyZW50RXZlbnRUaW1lKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXZlbnROdW1iZXI6KytldmVudE51bWJlcl07CisKKyAgICBO
U1ZpZXcgKnRhcmdldFZpZXcgPSBbbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxh
dGZvcm1WaWV3KCkgaGl0VGVzdDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd11dOworICAgIHRhcmdl
dFZpZXcgPSB0YXJnZXRWaWV3ID8gdGFyZ2V0VmlldyA6IG1fdGVzdENvbnRyb2xsZXItPm1haW5X
ZWJWaWV3KCktPnBsYXRmb3JtVmlldygpOworICAgIEFTU0VSVCh0YXJnZXRWaWV3KTsKKyAgICBb
TlNBcHAgX3NldEN1cnJlbnRFdmVudDpldmVudF07CisgICAgW3RhcmdldFZpZXcgcHJlc3N1cmVD
aGFuZ2VXaXRoRXZlbnQ6ZXZlbnRdOworICAgIFtOU0FwcCBfc2V0Q3VycmVudEV2ZW50Om5pbF07
CisKKyAgICAvLyBXS1ZpZXcgY2FjaGVzIHRoZSBtb3N0IHJlY2VudCBwcmVzc3VyZSBldmVudCwg
c28gc2VuZCBpdCBhIG5pbCBldmVudCB0byBjbGVhciB0aGUgY2FjaGUuCisgICAgW3RhcmdldFZp
ZXcgcHJlc3N1cmVDaGFuZ2VXaXRoRXZlbnQ6bmlsXTsKK30KKwogdm9pZCBFdmVudFNlbmRlclBy
b3h5Ojptb3VzZU1vdmVUbyhkb3VibGUgeCwgZG91YmxlIHkpCiB7CiAgICAgTlNWaWV3ICp2aWV3
ID0gbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7CkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxODI4ODApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxNS0wNC0xNSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgRm9yY2UgbW91c2UgZXZlbnRzIHNob3VsZCBnbyB0aHJvdWdo
IG5vcm1hbCBtb3VzZSBldmVudCBoYW5kbGluZyBjb2RlIHBhdGhzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM3NDkKKyAgICAgICAgLWFuZCBjb3Jy
ZXNwb25kaW5nLQorICAgICAgICByZGFyOi8vcHJvYmxlbS8yMDQ3Mjg5NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEp1c3QgYSBmZXcgbmV3IHRlc3Rz
LiBNb3JlIHRvIGNvbWUuCisgICAgICAgICogZmFzdC9ldmVudHMvbW91c2UtZm9yY2UtY2hhbmdl
ZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWZvcmNl
LWNoYW5nZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbW91c2UtZm9yY2Ut
ZG93bi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWZv
cmNlLWRvd24uaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbW91c2UtZm9yY2Ut
dXAtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1mb3Jj
ZS11cC5odG1sOiBBZGRlZC4KKwogMjAxNS0wNC0xNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIEFkZCBhIGNvbnNvbGUgbWVzc2FnZSB3aGVuIGEgc3R5bGVzaGVl
dCBpcyBub3QgcGFyc2VkIGR1ZSB0byBpbnZhbGlkIE1JTUUgdHlwZQpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvbW91c2UtZm9yY2UtY2hhbmdlZC1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtZm9yY2UtY2hhbmdlZC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1mb3Jj
ZS1jaGFuZ2VkLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACitTdWNj
ZXNzISBUaGUgbW91c2Vmb3JjZWNoYW5nZWQgZXZlbnQgd2FzIGRpc3BhdGNoZWQuCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1mb3JjZS1jaGFuZ2VkLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtZm9yY2UtY2hhbmdlZC5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtZm9yY2UtY2hhbmdl
ZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKzxodG1sPgorPGhlYWQ+Cis8
c3R5bGU+CisjZm9yY2VTZW5zb3IgeworICAgIHdpZHRoOiAyMDBweDsKKyAgICBoZWlnaHQ6IDIw
MHB4OworICAgIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOworfQorPC9zdHlsZT4KKzxzY3JpcHQ+
CisKK2Z1bmN0aW9uIGZvcmNlQ2hhbmdlZCgpCit7CisgICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpOworICAgIGNvbnNvbGUuaW5uZXJIVE1MID0gIlN1
Y2Nlc3MhIFRoZSBtb3VzZWZvcmNlY2hhbmdlZCBldmVudCB3YXMgZGlzcGF0Y2hlZC4iOworICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBzdGFydFRlc3QoKQorewor
ICAgIHZhciBmb3JjZVNlbnNvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb3JjZVNlbnNv
ciIpOworICAgIGZvcmNlU2Vuc29yLmFkZEV2ZW50TGlzdGVuZXIoIndlYmtpdG1vdXNlZm9yY2Vj
aGFuZ2VkIiwgZm9yY2VDaGFuZ2VkLCBmYWxzZSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5u
ZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgIHRlc3RSdW5u
ZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIp
IHsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oMTAwLCAxMDApOworICAgICAgICBl
dmVudFNlbmRlci5tb3VzZUZvcmNlQ2hhbmdlZCgxLjUpOworICAgIH0KK30KKzwvc2NyaXB0Pgor
PC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InN0YXJ0VGVzdCgpIj4KKworPGRpdiBpZD0iZm9yY2VT
ZW5zb3IiPjwvZGl2PgorPHByZSBpZD0iY29uc29sZSI+RmFpbGVkLiBUaGlzIHRlc3QgbXVzdCBi
ZSBydW4gaW4gdGhlIHRlc3QgaGFybmVzcy48L3ByZT4KKworPC9ib2R5PgorPC9odG1sPgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21v
dXNlLWZvcmNlLWRvd24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21vdXNlLWZvcmNlLWRvd24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtZm9yY2UtZG93bi1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAorU3VjY2VzcyEgVGhlIG1vdXNlZm9yY2Vkb3duIGV2
ZW50IHdhcyBkaXNwYXRjaGVkLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2Ut
Zm9yY2UtZG93bi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21v
dXNlLWZvcmNlLWRvd24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL21vdXNlLWZvcmNlLWRvd24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBA
Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorI2ZvcmNlU2Vuc29yIHsKKyAgICB3aWR0aDogMjAw
cHg7CisgICAgaGVpZ2h0OiAyMDBweDsKKyAgICBib3JkZXI6IDJweCBzb2xpZCBibGFjazsKK30K
Kzwvc3R5bGU+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBmb3JjZURvd24oKQoreworICAgIHZhciBj
b25zb2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKTsKKyAgICBjb25zb2xl
LmlubmVySFRNTCA9ICJTdWNjZXNzISBUaGUgbW91c2Vmb3JjZWRvd24gZXZlbnQgd2FzIGRpc3Bh
dGNoZWQuIjsKKyAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gc3Rh
cnRUZXN0KCkKK3sKKyAgICB2YXIgZm9yY2VTZW5zb3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiZm9yY2VTZW5zb3IiKTsKKyAgICBmb3JjZVNlbnNvci5hZGRFdmVudExpc3RlbmVyKCJ3ZWJr
aXRtb3VzZWZvcmNlZG93biIsIGZvcmNlRG93biwgZmFsc2UpOworCisgICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgICAgICB0
ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LmV2ZW50
U2VuZGVyKSB7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDEwMCwgMTAwKTsKKyAg
ICAgICAgZXZlbnRTZW5kZXIubW91c2VGb3JjZURvd24oKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4K
KzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJzdGFydFRlc3QoKSI+CisKKzxkaXYgaWQ9ImZvcmNl
U2Vuc29yIj48L2Rpdj4KKzxwcmUgaWQ9ImNvbnNvbGUiPkZhaWxlZC4gVGhpcyB0ZXN0IG11c3Qg
YmUgcnVuIGluIHRoZSB0ZXN0IGhhcm5lc3MuPC9wcmU+CisKKzwvYm9keT4KKzwvaHRtbD4KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9t
b3VzZS1mb3JjZS11cC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvbW91c2UtZm9yY2UtdXAtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtZm9yY2UtdXAtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEgQEAKK1N1Y2Nlc3MhIFRoZSBtb3VzZWZvcmNldXAgZXZlbnQgd2Fz
IGRpc3BhdGNoZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1mb3JjZS11
cC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWZvcmNl
LXVwLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1m
b3JjZS11cC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKzxodG1sPgorPGhl
YWQ+Cis8c3R5bGU+CisjZm9yY2VTZW5zb3IgeworICAgIHdpZHRoOiAyMDBweDsKKyAgICBoZWln
aHQ6IDIwMHB4OworICAgIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOworfQorPC9zdHlsZT4KKzxz
Y3JpcHQ+CisKK2Z1bmN0aW9uIGZvcmNlVXAoKQoreworICAgIHZhciBjb25zb2xlID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKTsKKyAgICBjb25zb2xlLmlubmVySFRNTCA9ICJT
dWNjZXNzISBUaGUgbW91c2Vmb3JjZXVwIGV2ZW50IHdhcyBkaXNwYXRjaGVkLiI7CisgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0VGVzdCgpCit7CisgICAg
dmFyIGZvcmNlU2Vuc29yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvcmNlU2Vuc29yIik7
CisgICAgZm9yY2VTZW5zb3IuYWRkRXZlbnRMaXN0ZW5lcigid2Via2l0bW91c2Vmb3JjZXVwIiwg
Zm9yY2VVcCwgZmFsc2UpOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAg
IHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERv
bmUoKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGV2
ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDEwMCwgMTAwKTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91
c2VGb3JjZURvd24oKTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VGb3JjZVVwKCk7CisgICAg
fQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0ic3RhcnRUZXN0KCkiPgor
Cis8ZGl2IGlkPSJmb3JjZVNlbnNvciI+PC9kaXY+Cis8cHJlIGlkPSJjb25zb2xlIj5GYWlsZWQu
IFRoaXMgdGVzdCBtdXN0IGJlIHJ1biBpbiB0aGUgdGVzdCBoYXJuZXNzLjwvcHJlPgorCis8L2Jv
ZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>
<flag name="review"
          id="275702"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250949</attachid>
            <date>2015-04-16 13:46:37 -0700</date>
            <delta_ts>2015-04-16 13:46:37 -0700</delta_ts>
            <desc>Patch for bots</desc>
            <filename>for-review-6.txt</filename>
            <type>text/plain</type>
            <size>59610</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjkwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDE1LTA0LTE2ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBGb3JjZSBtb3VzZSBldmVudHMgc2hv
dWxkIGdvIHRocm91Z2ggbm9ybWFsIG1vdXNlIGV2ZW50IGhhbmRsaW5nIGNvZGUgcGF0aHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Mzc0OQorICAg
ICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIwNDcyODk1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggbW92ZXMgYWxsIG9mIHRoZSBjb2RlIHRvIGRpc3BhdGNoIG1vdXNlZm9yY2Vkb3duLCBtb3Vz
ZWZvcmNldXAsIGFuZCAKKyAgICAgICAgbW91c2Vmb3JjZWNoYW5nZWQgaW50byBub3JtYWwgbW91
c2UgZXZlbnQgZGlzcGF0Y2hpbmcgY29kZS4gVGhpcyBwYXRjaCBsZWF2ZXMgCisgICAgICAgIGJl
aGluZCB0aGUgY2FuY2VsIGFuZCBjbGljayBldmVudHMgYmVjYXVzZSB3ZSBwbGFuIHRvIHJlbW92
ZSB0aG9zZSwgYW5kIGl0IGFsc28gCisgICAgICAgIGxlYXZlcyBtb3VzZWZvcmNld2lsbGJlZ2lu
IGJlY2F1c2UgdGhhdCBpcyBuZWNlc3NhcmlseSBhIHZlcnkgZGlmZmVyZW50IGV2ZW50IG1vcmUg
CisgICAgICAgIHRpZWQgdG8gdGhlIE5TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIg
dGhhbiB0aGVzZSBvdGhlciBldmVudHMgd2hpY2ggYXJlIAorICAgICAgICB0aWVkIHRvIE5TUmVz
cG9uZGVy4oCZcyBwcmVzc3VyZUNoYW5nZVdpdGhFdmVudC4KKworICAgICAgICBOZXcgaGVscGVy
IGZ1bmN0aW9ucy4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6Omhhc0xpc3RlbmVyVHlwZUZvckV2ZW50VHlwZSk6CisgICAgICAgICogZG9t
L0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6aXNGb3JjZUV2ZW50KToKKworICAgICAgICBNb3ZlIHRoZSBjb2RlIHRvIGVuc3VyZSB0aGUg
Zm9yY2UgZXZlbnRzIGhhdmUgbGlzdGVuZXJzIGluIG9yZGVyIHRvIGZpcmUgdG8gCisgICAgICAg
IGRpc3BhdGNoTW91c2VFdmVudCwgYW5kIGRlbGV0ZSB0aGUgb2xkIGltcGxlbWVudGF0aW9ucy4K
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNoTW91c2VFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VDaGFuZ2VkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3JjZURvd24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZGlzcGF0Y2hNb3VzZUZvcmNlVXApOiBE
ZWxldGVkLgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisKKyAgICAgICAgUGVyZm9ybSBhIGhp
dCB0ZXN0IGFuZCBwaXBlIHRoZSBldmVudHMgdGhyb3VnaCBkaXNwYXRjaE1vdXNlRXZlbnQoKS4g
CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpoYW5kbGVNb3VzZUZvcmNlRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmg6CisKKyAgICAgICAgTmV3IHR5cGVzIGZvciB0aGUgbmV3IGV2ZW50cy4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybUV2ZW50Lmg6CisKKyAgICAgICAgRm9yd2FyZCB0byBFdmVu
dEhhbmRsZXIuIAorICAgICAgICAqIHJlcGxheS9Vc2VySW5wdXRCcmlkZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VXNlcklucHV0QnJpZGdlOjpoYW5kbGVNb3VzZUZvcmNlRXZlbnQpOgorICAg
ICAgICAqIHJlcGxheS9Vc2VySW5wdXRCcmlkZ2UuaDoKKwogMjAxNS0wNC0xNiAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZ3Jlc3Npb24ocjE4MjUxNyk6IFdl
YlNvY2tldDo6c3VzcGVuZCgpIGNhdXNlcyBlcnJvciBldmVudCB0byBiZSBmaXJlZApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxODI5MDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTY2LDYgKzM5NjYsMjIgQEAg
UmVmUHRyPEV2ZW50PiBEb2N1bWVudDo6Y3JlYXRlRXZlbnQoY29ucwogICAgIHJldHVybiBudWxs
cHRyOwogfQogCitib29sIERvY3VtZW50OjpoYXNMaXN0ZW5lclR5cGVGb3JFdmVudFR5cGUoUGxh
dGZvcm1FdmVudDo6VHlwZSBldmVudFR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNoIChldmVudFR5
cGUpIHsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VDaGFuZ2VkOgorICAgICAg
ICByZXR1cm4gbV9saXN0ZW5lclR5cGVzICYgRG9jdW1lbnQ6OkZPUkNFQ0hBTkdFRF9MSVNURU5F
UjsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VEb3duOgorICAgICAgICByZXR1
cm4gbV9saXN0ZW5lclR5cGVzICYgRG9jdW1lbnQ6OkZPUkNFRE9XTl9MSVNURU5FUjsKKyAgICBj
YXNlIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VVcDoKKyAgICAgICAgcmV0dXJuIG1fbGlzdGVu
ZXJUeXBlcyAmIERvY3VtZW50OjpGT1JDRVVQX0xJU1RFTkVSOworICAgIGNhc2UgUGxhdGZvcm1F
dmVudDo6TW91c2VTY3JvbGw6CisgICAgICAgIHJldHVybiBtX2xpc3RlbmVyVHlwZXMgJiBEb2N1
bWVudDo6U0NST0xMX0xJU1RFTkVSOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKIHZvaWQgRG9jdW1lbnQ6OmFkZExpc3RlbmVyVHlwZUlmTmVlZGVkKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQogewogICAgIGlmIChldmVudFR5cGUgPT0gZXZl
bnROYW1lcygpLkRPTVN1YnRyZWVNb2RpZmllZEV2ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgJKHJldmlzaW9uIDE4MjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgi
CiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgIlBhZ2VWaXNpYmlsaXR5
U3RhdGUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1T
Y3JlZW4uaCIKICNpbmNsdWRlICJSZWZlcnJlclBvbGljeS5oIgogI2luY2x1ZGUgIlJlZ2lvbi5o
IgpAQCAtNzgwLDYgKzc4MSw3IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgYm9vbCBoYXNMaXN0
ZW5lclR5cGUoTGlzdGVuZXJUeXBlIGxpc3RlbmVyVHlwZSkgY29uc3QgeyByZXR1cm4gKG1fbGlz
dGVuZXJUeXBlcyAmIGxpc3RlbmVyVHlwZSk7IH0KKyAgICBib29sIGhhc0xpc3RlbmVyVHlwZUZv
ckV2ZW50VHlwZShQbGF0Zm9ybUV2ZW50OjpUeXBlKSBjb25zdDsKICAgICB2b2lkIGFkZExpc3Rl
bmVyVHlwZUlmTmVlZGVkKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKIAogICAgIGJv
b2wgaGFzTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUoTXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25U
eXBlIHR5cGUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxODI5
MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0NCwxMSArMjQ0LDE5IEBAIGJvb2wgRWxlbWVudDo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKQog
ICAgIHJldHVybiBjb21wdXRlRWRpdGFiaWxpdHkoVXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRp
dGFibGUsIFNob3VsZFVwZGF0ZVN0eWxlOjpVcGRhdGUpICE9IEVkaXRhYmlsaXR5OjpSZWFkT25s
eTsKIH0KIAorc3RhdGljIGJvb2wgaXNGb3JjZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgcGxhdGZvcm1FdmVudCkKK3sKKyAgICByZXR1cm4gcGxhdGZvcm1FdmVudC50eXBlKCkgPT0g
UGxhdGZvcm1FdmVudDo6TW91c2VGb3JjZUNoYW5nZWQgfHwgcGxhdGZvcm1FdmVudC50eXBlKCkg
PT0gUGxhdGZvcm1FdmVudDo6TW91c2VGb3JjZURvd24gfHwgcGxhdGZvcm1FdmVudC50eXBlKCkg
PT0gUGxhdGZvcm1FdmVudDo6TW91c2VGb3JjZVVwOworfQorCiBib29sIEVsZW1lbnQ6OmRpc3Bh
dGNoTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRmb3JtRXZlbnQsIGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBpbnQgZGV0YWlsLCBFbGVtZW50KiByZWxhdGVk
VGFyZ2V0KQogewogICAgIGlmIChpc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCisgICAgaWYgKGlzRm9yY2VFdmVudChwbGF0Zm9ybUV2ZW50KSAmJiAhZG9j
dW1lbnQoKS5oYXNMaXN0ZW5lclR5cGVGb3JFdmVudFR5cGUocGxhdGZvcm1FdmVudC50eXBlKCkp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBSZWZQdHI8TW91c2VFdmVudD4gbW91c2VF
dmVudCA9IE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGRvY3VtZW50KCkuZGVmYXVsdFZp
ZXcoKSwgcGxhdGZvcm1FdmVudCwgZGV0YWlsLCByZWxhdGVkVGFyZ2V0KTsKIAogICAgIGlmICht
b3VzZUV2ZW50LT50eXBlKCkuaXNFbXB0eSgpKQpAQCAtMjI1Myw1NCArMjI2MSw2IEBAIGJvb2wg
RWxlbWVudDo6ZGlzcGF0Y2hNb3VzZUZvcmNlV2lsbEJlZ2kKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgRWxlbWVudDo6ZGlzcGF0Y2hNb3VzZUZvcmNlQ2hhbmdlZChmbG9hdCBmb3JjZSkK
LXsKLSAgICBpZiAoIWRvY3VtZW50KCkuaGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpGT1JDRUNI
QU5HRURfTElTVEVORVIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBk
b2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtTW91c2VFdmVudChmcmFtZS0+ZXZlbnRIYW5k
bGVyKCkubGFzdEtub3duTW91c2VQb3NpdGlvbigpLCBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkubGFz
dEtub3duTW91c2VHbG9iYWxQb3NpdGlvbigpLCBOb0J1dHRvbiwgUGxhdGZvcm1FdmVudDo6Tm9U
eXBlLCAxLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgV1RGOjpjdXJyZW50VGltZSgpLCBm
b3JjZSk7Ci0gICAgUmVmUHRyPE1vdXNlRXZlbnQ+IG1vdXNlRm9yY2VDaGFuZ2VkRXZlbnQgPSAg
TW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNlY2hhbmdlZEV2
ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIHBsYXRmb3JtTW91c2VFdmVudCwgMCwgbnVs
bHB0cik7Ci0KLSAgICBtb3VzZUZvcmNlQ2hhbmdlZEV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0g
ICAgZGlzcGF0Y2hFdmVudChtb3VzZUZvcmNlQ2hhbmdlZEV2ZW50KTsKLX0KLQotdm9pZCBFbGVt
ZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VEb3duKCkKLXsKLSAgICBpZiAoIWRvY3VtZW50KCkuaGFz
TGlzdGVuZXJUeXBlKERvY3VtZW50OjpGT1JDRURPV05fTElTVEVORVIpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3Jt
TW91c2VFdmVudChmcmFtZS0+ZXZlbnRIYW5kbGVyKCkubGFzdEtub3duTW91c2VQb3NpdGlvbigp
LCBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkubGFzdEtub3duTW91c2VHbG9iYWxQb3NpdGlvbigpLCBO
b0J1dHRvbiwgUGxhdGZvcm1FdmVudDo6Tm9UeXBlLCAxLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm
YWxzZSwgV1RGOjpjdXJyZW50VGltZSgpLCBGb3JjZUF0Rm9yY2VDbGljayk7Ci0gICAgUmVmUHRy
PE1vdXNlRXZlbnQ+IG1vdXNlRm9yY2VEb3duRXZlbnQgPSAgTW91c2VFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNlZG93bkV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRW
aWV3KCksIHBsYXRmb3JtTW91c2VFdmVudCwgMCwgbnVsbHB0cik7Ci0KLSAgICBtb3VzZUZvcmNl
RG93bkV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgZGlzcGF0Y2hFdmVudChtb3VzZUZvcmNl
RG93bkV2ZW50KTsKLX0KLQotdm9pZCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VVcCgpCi17
Ci0gICAgaWYgKCFkb2N1bWVudCgpLmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6Rk9SQ0VVUF9M
SVNURU5FUikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
KCkuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQbGF0
Zm9ybU1vdXNlRXZlbnQgcGxhdGZvcm1Nb3VzZUV2ZW50KGZyYW1lLT5ldmVudEhhbmRsZXIoKS5s
YXN0S25vd25Nb3VzZVBvc2l0aW9uKCksIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25N
b3VzZUdsb2JhbFBvc2l0aW9uKCksIE5vQnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpOb1R5cGUsIDEs
IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBXVEY6OmN1cnJlbnRUaW1lKCksIEZvcmNlQXRG
b3JjZUNsaWNrKTsKLSAgICBSZWZQdHI8TW91c2VFdmVudD4gbW91c2VGb3JjZVVwRXZlbnQgPSAg
TW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNldXBFdmVudCwg
ZG9jdW1lbnQoKS5kZWZhdWx0VmlldygpLCBwbGF0Zm9ybU1vdXNlRXZlbnQsIDAsIG51bGxwdHIp
OwotCi0gICAgbW91c2VGb3JjZVVwRXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBkaXNwYXRj
aEV2ZW50KG1vdXNlRm9yY2VVcEV2ZW50KTsKLX0KLQogdm9pZCBFbGVtZW50OjpkaXNwYXRjaE1v
dXNlRm9yY2VDbGljaygpCiB7CiAgICAgaWYgKCFkb2N1bWVudCgpLmhhc0xpc3RlbmVyVHlwZShE
b2N1bWVudDo6Rk9SQ0VDTElDS19MSVNURU5FUikpCkBAIC0yMzQwLDE4ICsyMzAwLDYgQEAgYm9v
bCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VXaWxsQmVnaQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VDaGFuZ2VkKGZsb2F0KQotewot
fQotCi12b2lkIEVsZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3JjZURvd24oKQotewotfQotCi12b2lk
IEVsZW1lbnQ6OmRpc3BhdGNoTW91c2VGb3JjZVVwKCkKLXsKLX0KLQogdm9pZCBFbGVtZW50Ojpk
aXNwYXRjaE1vdXNlRm9yY2VDbGljaygpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJl
dmlzaW9uIDE4MjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2OSw5ICs0NjksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoQmx1ckV2ZW50KFJlZlB0cjxFbGVtZW50PiYmIG5ld0ZvY3VzZWRFbGVtZW50KTsKIAogICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgZGlzcGF0Y2hNb3VzZUZvcmNlV2lsbEJlZ2luKCk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaE1vdXNlRm9yY2VDaGFuZ2VkKGZsb2F0IGZvcmNl
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoTW91c2VGb3JjZURvd24oKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoTW91c2VGb3JjZVVwKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkaXNwYXRjaE1vdXNlRm9yY2VDbGljaygpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZGlzcGF0Y2hNb3VzZUZvcmNlQ2FuY2VsbGVkKCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDE4MjkwMykKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwNCw2ICsyMTA0
LDMzIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmUKICAgICByZXR1
cm4gc3dhbGxvd01vdXNlVXBFdmVudCB8fCBzd2FsbG93Q2xpY2tFdmVudCB8fCBzd2FsbG93TW91
c2VSZWxlYXNlRXZlbnQ7CiB9CiAKKyNpZiBFTkFCTEUoTU9VU0VfRk9SQ0VfRVZFTlRTKQorYm9v
bCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlRm9yY2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmIGV2ZW50KQoreworICAgIFJlZlB0cjxGcmFtZVZpZXc+IHByb3RlY3RvcihtX2ZyYW1l
LnZpZXcoKSk7CisKKyAgICBzZXRMYXN0S25vd25Nb3VzZVBvc2l0aW9uKGV2ZW50KTsKKworICAg
IEhpdFRlc3RSZXF1ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1
ZXN0OjpEaXNhbGxvd1NoYWRvd0NvbnRlbnQgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOworCisg
ICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChoaXRUeXBlKTsKKyAgICBNb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzIG1vdXNlRXZlbnQgPSBwcmVwYXJlTW91c2VFdmVudChyZXF1ZXN0LCBldmVu
dCk7CisKKyAgICBib29sIHN3YWxsb3dlZEV2ZW50ID0gIWRpc3BhdGNoTW91c2VFdmVudChldmVu
dE5hbWVzKCkud2Via2l0bW91c2Vmb3JjZWNoYW5nZWRFdmVudCwgbW91c2VFdmVudC50YXJnZXRO
b2RlKCksIGZhbHNlLCAwLCBldmVudCwgZmFsc2UpOworICAgIGlmIChldmVudC50eXBlKCkgPT0g
UGxhdGZvcm1FdmVudDo6TW91c2VGb3JjZURvd24pCisgICAgICAgIHN3YWxsb3dlZEV2ZW50IHw9
ICFkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2Vkb3duRXZl
bnQsIG1vdXNlRXZlbnQudGFyZ2V0Tm9kZSgpLCBmYWxzZSwgMCwgZXZlbnQsIGZhbHNlKTsKKyAg
ICBpZiAoZXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VVcCkKKyAgICAg
ICAgc3dhbGxvd2VkRXZlbnQgfD0gIWRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkud2Vi
a2l0bW91c2Vmb3JjZXVwRXZlbnQsIG1vdXNlRXZlbnQudGFyZ2V0Tm9kZSgpLCBmYWxzZSwgMCwg
ZXZlbnQsIGZhbHNlKTsKKworICAgIHJldHVybiBzd2FsbG93ZWRFdmVudDsKK30KKyNlbHNlCiti
b29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VGb3JjZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAvLyAjaWYgRU5BQkxF
KE1PVVNFX0ZPUkNFX0VWRU5UUykKKwogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVBhc3RlR2xv
YmFsU2VsZWN0aW9uKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgcGxhdGZvcm1Nb3VzZUV2ZW50
KQogewogICAgIC8vIElmIHRoZSBldmVudCB3YXMgYSBtaWRkbGUgY2xpY2ssIGF0dGVtcHQgdG8g
Y29weSBnbG9iYWwgc2VsZWN0aW9uIGluIGFmdGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmgJKHJldmlzaW9uIDE4MjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw2ICsyMDIsNyBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50Jik7CiAgICAgYm9vbCBoYW5kbGVNb3VzZU1vdmVFdmVudChjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmLCBIaXRUZXN0UmVzdWx0KiBob3ZlcmVkTm9kZSA9IDAsIGJvb2wgb25seVVw
ZGF0ZVNjcm9sbGJhcnMgPSBmYWxzZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYW5kbGVN
b3VzZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICBib29sIGhh
bmRsZU1vdXNlRm9yY2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
Jik7CiAgICAgdm9pZCBkZWZhdWx0V2hlZWxFdmVudEhhbmRsZXIoTm9kZSosIFdoZWVsRXZlbnQq
KTsKICAgICBib29sIGhhbmRsZVBhc3RlR2xvYmFsU2VsZWN0aW9uKGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1FdmVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXZlbnQuaAko
cmV2aXNpb24gMTgyOTAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1FdmVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw5IEBAIHB1YmxpYzoKICAgICAgICAgTW91
c2VNb3ZlZCwKICAgICAgICAgTW91c2VQcmVzc2VkLAogICAgICAgICBNb3VzZVJlbGVhc2VkLAor
ICAgICAgICBNb3VzZUZvcmNlQ2hhbmdlZCwKKyAgICAgICAgTW91c2VGb3JjZURvd24sCisgICAg
ICAgIE1vdXNlRm9yY2VVcCwKICAgICAgICAgTW91c2VTY3JvbGwsCiAKICAgICAgICAgLy8gUGxh
dGZvcm1XaGVlbEV2ZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZXBsYXkvVXNlcklucHV0QnJp
ZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZXBsYXkvVXNlcklucHV0QnJp
ZGdlLmNwcAkocmV2aXNpb24gMTgyOTAzKQorKysgU291cmNlL1dlYkNvcmUvcmVwbGF5L1VzZXJJ
bnB1dEJyaWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsMTEgQEAgYm9vbCBV
c2VySW5wdXRCcmlkZ2U6OmhhbmRsZU1vdXNlTW92ZU9uUwogICAgIHJldHVybiBtX3BhZ2UubWFp
bkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkucGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyht
b3VzZUV2ZW50KTsKIH0KIAorYm9vbCBVc2VySW5wdXRCcmlkZ2U6OmhhbmRsZU1vdXNlRm9yY2VF
dmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQsIElucHV0U291cmNlKQor
eworICAgIHJldHVybiBtX3BhZ2UubWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGFuZGxlTW91
c2VGb3JjZUV2ZW50KG1vdXNlRXZlbnQpOworfQorCiBib29sIFVzZXJJbnB1dEJyaWRnZTo6aGFu
ZGxlS2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBrZXlFdmVudCwgSW5wdXRT
b3VyY2UgaW5wdXRTb3VyY2UpCiB7CiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZXBsYXkvVXNlcklucHV0QnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVwbGF5L1VzZXJJbnB1dEJyaWRnZS5oCShyZXZpc2lvbiAxODI5MDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZXBsYXkvVXNlcklucHV0QnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc4LDYgKzc4LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFuZGxlTW91
c2VSZWxlYXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgSW5wdXRTb3VyY2Ugc291
cmNlID0gSW5wdXRTb3VyY2U6OlVzZXIpOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFuZGxl
TW91c2VNb3ZlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgSW5wdXRTb3VyY2Ugc291
cmNlID0gSW5wdXRTb3VyY2U6OlVzZXIpOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFuZGxl
TW91c2VNb3ZlT25TY3JvbGxiYXJFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBJbnB1
dFNvdXJjZSBzb3VyY2UgPSBJbnB1dFNvdXJjZTo6VXNlcik7CisgICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBoYW5kbGVNb3VzZUZvcmNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgSW5w
dXRTb3VyY2UgPSBJbnB1dFNvdXJjZTo6VXNlcik7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBo
YW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIElucHV0U291cmNlIHNv
dXJjZSA9IElucHV0U291cmNlOjpVc2VyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhbmRs
ZUtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYsIElucHV0U291cmNlIHNvdXJj
ZSA9IElucHV0U291cmNlOjpVc2VyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhbmRsZUFj
Y2Vzc0tleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYsIElucHV0U291cmNlIHNv
dXJjZSA9IElucHV0U291cmNlOjpVc2VyKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mjkw
NSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDYyIEBACisyMDE1LTA0LTE2ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAg
ICAgICBGb3JjZSBtb3VzZSBldmVudHMgc2hvdWxkIGdvIHRocm91Z2ggbm9ybWFsIG1vdXNlIGV2
ZW50IGhhbmRsaW5nIGNvZGUgcGF0aHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0Mzc0OQorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzIwNDcyODk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBK
YWNrc29uLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgcHJlc3N1cmVDaGFuZ2VXaXRoRXZl
bnQgY3JlYXRlIE5hdGl2ZVdlYk1vdXNlRXZlbnRzIHdpdGggdGhlIAorICAgICAgICBOU0V2ZW50
VHlwZVByZXNzdXJlcyB0aGF0IGlzIGdldHMgYW5kIHNlbmRzIHRob3NlIGRvd24gdG8gdGhlIHdl
YiBwcm9jZXNzLgorCisgICAgICAgIFJlLW5hbWUgcHJlc3N1cmVFdmVudCB0byBsYXN0UHJlc3N1
cmVFdmVudC4gTm93IHRoYXQgZXZlbnQgY2FuIHNvbWV0aW1lcyBiZSBhbiAKKyAgICAgICAgTlNF
dmVudFR5cGVQcmVzc3VyZSwgdGhlIG5ldyBuYW1lIG1ha2VzIGl0IGNsZWFyIGhvdyB0aGUgc2Vj
b25kIHBhcmFtZXRlciBkaWZmZXJzIAorICAgICAgICBmcm9tIHRoZSBmaXJzdC4KKyAgICAgICAg
KiBTaGFyZWQvTmF0aXZlV2ViTW91c2VFdmVudC5oOgorCisgICAgICAgIE5ldyBldmVudCB0eXBl
cyBmb3IgdGhlIG5ldyB0eXBlcyBvZiBldmVudHMuCisgICAgICAgICogU2hhcmVkL1dlYkV2ZW50
Lmg6CisgICAgICAgICogU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYktpdDJQbGF0Zm9ybU1vdXNlRXZlbnQ6OldlYktpdDJQbGF0Zm9ybU1vdXNlRXZl
bnQpOgorICAgICAgICAqIFNoYXJlZC9tYWMvTmF0aXZlV2ViTW91c2VFdmVudE1hYy5tbToKKyAg
ICAgICAgKFdlYktpdDo6TmF0aXZlV2ViTW91c2VFdmVudDo6TmF0aXZlV2ViTW91c2VFdmVudCk6
CisgICAgICAgICogU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkuaDoKKworICAgICAgICBBbGwg
b2YgdGhlIHNxdWFyZS1wZWcsIHJvdW5kLWhvbGUgcHJvYmxlbXMgb2YgbWFzc2FnaW5nIHRoZSBO
U0V2ZW50VHlwZVByZXNzdXJlcyAKKyAgICAgICAgZXZlbnRzIGludG8gV2ViTW91c2VFdmVudHMg
aXMgdGFrZW4gY2FyZSBvZiBoZXJlLgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViRXZlbnRGYWN0
b3J5Lm1tOgorICAgICAgICAoV2ViS2l0Ojptb3VzZUJ1dHRvbkZvckV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6Z2xvYmFsUG9pbnRGb3JFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OnBvaW50Rm9y
RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNl
RXZlbnQpOgorCisgICAgICAgIEluc3RlYWQgb2YgY2FsbGluZyB0aGUgb2xkIGlucHV0RGV2aWNl
Rm9yY2VEaWRDaGFuZ2UsIGNyZWF0ZSBhIE5hdGl2ZVdlYk1vdXNlRXZlbnQgCisgICAgICAgIGFu
ZCBoYW5kbGUgaXQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgorICAg
ICAgICAoLVtXS1ZpZXcgcHJlc3N1cmVDaGFuZ2VXaXRoRXZlbnQ6XSk6CisKKyAgICAgICAgSGFu
ZGxlIHRoZSBuZXcgdHlwZXMuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZUV2ZW50KToKKworICAg
ICAgICBDYW4gZGVsZXRlIGlucHV0RGV2aWNlRm9yY2VEaWRDaGFuZ2Ugc2luY2UgaXTigJlzIG5v
IGxvbmdlciB1c2VkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmlucHV0RGV2aWNl
Rm9yY2VEaWRDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaDoKKworICAgICAgICBIYW5kbGUgdGhlIG5ldyB0eXBlcyBvZiBtb3VzZSBldmVudHMgcHJv
cGVybHkuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpoYW5kbGVNb3VzZUV2ZW50KToKKworICAgICAgICBEZWxldGUgaW5wdXREZXZp
Y2VGb3JjZURpZENoYW5nZSgpIGFuZCBtX2xhc3RGb3JjZVN0YWdlLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjppbnB1dERldmljZUZvcmNlRGlk
Q2hhbmdlKTogRGVsZXRlZC4KKworICAgICAgICBIYW5kbGUgbmV3IFdlYkV2ZW50IHR5cGVzLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5Y
MTEuY3BwOgorCiAyMDE1LTA0LTE2ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAK
ICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIwNTc1NzQ0PiBBbHNvIGluY2x1ZGUgYSBkZWZpbml0
aW9uIG9mIF9fTlNkX3tjdXJyZW50IGRlcGxveW1lbnQgdGFyZ2V0fSBpbiBXS0ZvdW5kYXRpb24u
aC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaAko
cmV2aXNpb24gMTgyOTAzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYk1vdXNl
RXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIGNsYXNzIE5hdGl2ZVdlYk1vdXNlRXZlbnQgOiBwdWJsaWMgV2ViTW91c2VFdmVudCB7CiBw
dWJsaWM6CiAjaWYgVVNFKEFQUEtJVCkKLSAgICBOYXRpdmVXZWJNb3VzZUV2ZW50KE5TRXZlbnQg
KiwgTlNFdmVudCAqcHJlc3N1cmVFdmVudCwgTlNWaWV3ICopOworICAgIE5hdGl2ZVdlYk1vdXNl
RXZlbnQoTlNFdmVudCAqLCBOU0V2ZW50ICpsYXN0UHJlc3N1cmVFdmVudCwgTlNWaWV3ICopOwog
I2VsaWYgUExBVEZPUk0oR1RLKQogICAgIE5hdGl2ZVdlYk1vdXNlRXZlbnQoY29uc3QgTmF0aXZl
V2ViTW91c2VFdmVudCYpOwogICAgIE5hdGl2ZVdlYk1vdXNlRXZlbnQoR2RrRXZlbnQqLCBpbnQp
OwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50LmgJKHJldmlzaW9uIDE4MjkwMykKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1
OCw5IEBAIHB1YmxpYzoKICAgICAgICAgTW91c2VEb3duLAogICAgICAgICBNb3VzZVVwLAogICAg
ICAgICBNb3VzZU1vdmUsCisgICAgICAgIE1vdXNlRm9yY2VDaGFuZ2VkLAorICAgICAgICBNb3Vz
ZUZvcmNlRG93biwKKyAgICAgICAgTW91c2VGb3JjZVVwLAogCiAgICAgICAgIC8vIFdlYldoZWVs
RXZlbnQKICAgICAgICAgV2hlZWwsCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZl
bnRDb252ZXJzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
RXZlbnRDb252ZXJzaW9uLmNwcAkocmV2aXNpb24gMTgyOTAzKQorKysgU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4
LDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fdHlwZSA9IFdlYkNvcmU6OlBsYXRmb3JtRXZl
bnQ6Ok1vdXNlTW92ZWQ7CiAgICAgICAgICAgICBtX2ZvcmNlID0gd2ViRXZlbnQuZm9yY2UoKTsK
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZUZvcmNlQ2hh
bmdlZDoKKyAgICAgICAgICAgIG1fdHlwZSA9IFdlYkNvcmU6OlBsYXRmb3JtRXZlbnQ6Ok1vdXNl
Rm9yY2VDaGFuZ2VkOworICAgICAgICAgICAgbV9mb3JjZSA9IHdlYkV2ZW50LmZvcmNlKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJFdmVudDo6TW91c2VGb3JjZURvd246
CisgICAgICAgICAgICBtX3R5cGUgPSBXZWJDb3JlOjpQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNl
RG93bjsKKyAgICAgICAgICAgIG1fZm9yY2UgPSBXZWJDb3JlOjpGb3JjZUF0Rm9yY2VDbGljazsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZUZvcmNlVXA6
CisgICAgICAgICAgICBtX3R5cGUgPSBXZWJDb3JlOjpQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNl
VXA7CisgICAgICAgICAgICBtX2ZvcmNlID0gV2ViQ29yZTo6Rm9yY2VBdEZvcmNlQ2xpY2s7Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L05hdGl2ZVdlYk1vdXNlRXZlbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9OYXRpdmVXZWJNb3VzZUV2ZW50TWFjLm1tCShyZXZpc2lvbiAxODI5MDMpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL05hdGl2ZVdlYk1vdXNlRXZlbnRNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLU5h
dGl2ZVdlYk1vdXNlRXZlbnQ6Ok5hdGl2ZVdlYk1vdXNlRXZlbnQoTlNFdmVudCAqZXZlbnQsIE5T
RXZlbnQgKnByZXNzdXJlRXZlbnQsIE5TVmlldyAqdmlldykKLSAgICA6IFdlYk1vdXNlRXZlbnQo
V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KGV2ZW50LCBwcmVzc3VyZUV2ZW50
LCB2aWV3KSkKK05hdGl2ZVdlYk1vdXNlRXZlbnQ6Ok5hdGl2ZVdlYk1vdXNlRXZlbnQoTlNFdmVu
dCAqZXZlbnQsIE5TRXZlbnQgKmxhc3RQcmVzc3VyZUV2ZW50LCBOU1ZpZXcgKnZpZXcpCisgICAg
OiBXZWJNb3VzZUV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudChldmVu
dCwgbGFzdFByZXNzdXJlRXZlbnQsIHZpZXcpKQogICAgICwgbV9uYXRpdmVFdmVudChldmVudCkK
IHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJFdmVudEZhY3Rvcnku
aAkocmV2aXNpb24gMTgyOTAzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJFdmVu
dEZhY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIGNsYXNzIFdlYkV2ZW50RmFjdG9yeSB7CiBwdWJsaWM6CiAjaWYgVVNFKEFQUEtJVCkK
LSAgICBzdGF0aWMgV2ViTW91c2VFdmVudCBjcmVhdGVXZWJNb3VzZUV2ZW50KE5TRXZlbnQgKiwg
TlNFdmVudCAqcHJlc3N1cmVFdmVudCwgTlNWaWV3ICp3aW5kb3dWaWV3KTsKKyAgICBzdGF0aWMg
V2ViTW91c2VFdmVudCBjcmVhdGVXZWJNb3VzZUV2ZW50KE5TRXZlbnQgKiwgTlNFdmVudCAqbGFz
dFByZXNzdXJlRXZlbnQsIE5TVmlldyAqd2luZG93Vmlldyk7CiAgICAgc3RhdGljIFdlYldoZWVs
RXZlbnQgY3JlYXRlV2ViV2hlZWxFdmVudChOU0V2ZW50ICosIE5TVmlldyAqd2luZG93Vmlldyk7
CiAgICAgc3RhdGljIFdlYktleWJvYXJkRXZlbnQgY3JlYXRlV2ViS2V5Ym9hcmRFdmVudChOU0V2
ZW50ICosIGJvb2wgaGFuZGxlZEJ5SW5wdXRNZXRob2QsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpL
ZXlwcmVzc0NvbW1hbmQ+Jik7CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQmVIYW5kbGVkQXNDb250
ZXh0Q2xpY2soY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jik7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5tbQkocmV2aXNpb24gMTgy
OTAzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkubW0JKHdv
cmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDkgQEAgc3RhdGljIFdlYk1vdXNlRXZlbnQ6OkJ1dHRv
biBtb3VzZUJ1dHRvbgogICAgICAgICBjYXNlIE5TT3RoZXJNb3VzZVVwOgogICAgICAgICBjYXNl
IE5TT3RoZXJNb3VzZURyYWdnZWQ6CiAgICAgICAgICAgICByZXR1cm4gV2ViTW91c2VFdmVudDo6
TWlkZGxlQnV0dG9uOworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEw
MDMKKyAgICAgICAgY2FzZSBOU0V2ZW50VHlwZVByZXNzdXJlOgorI2VuZGlmCiAgICAgICAgIGNh
c2UgTlNNb3VzZUVudGVyZWQ6CiAgICAgICAgIGNhc2UgTlNNb3VzZUV4aXRlZDoKICAgICAgICAg
ICAgIHJldHVybiBjdXJyZW50TW91c2VCdXR0b24oKTsKQEAgLTE1Niw1MCArMTU5LDU2IEBAIHN0
YXRpYyBOU1BvaW50IGdsb2JhbFBvaW50KGNvbnN0IE5TUG9pbnQKIHN0YXRpYyBOU1BvaW50IGds
b2JhbFBvaW50Rm9yRXZlbnQoTlNFdmVudCAqZXZlbnQpCiB7CiAgICAgc3dpdGNoIChbZXZlbnQg
dHlwZV0pIHsKLSAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURvd246Ci0gICAgICAgIGNhc2UgTlNM
ZWZ0TW91c2VEcmFnZ2VkOgotICAgICAgICBjYXNlIE5TTGVmdE1vdXNlVXA6Ci0gICAgICAgIGNh
c2UgTlNNb3VzZUVudGVyZWQ6Ci0gICAgICAgIGNhc2UgTlNNb3VzZUV4aXRlZDoKLSAgICAgICAg
Y2FzZSBOU01vdXNlTW92ZWQ6Ci0gICAgICAgIGNhc2UgTlNPdGhlck1vdXNlRG93bjoKLSAgICAg
ICAgY2FzZSBOU090aGVyTW91c2VEcmFnZ2VkOgotICAgICAgICBjYXNlIE5TT3RoZXJNb3VzZVVw
OgotICAgICAgICBjYXNlIE5TUmlnaHRNb3VzZURvd246Ci0gICAgICAgIGNhc2UgTlNSaWdodE1v
dXNlRHJhZ2dlZDoKLSAgICAgICAgY2FzZSBOU1JpZ2h0TW91c2VVcDoKLSAgICAgICAgY2FzZSBO
U1Njcm9sbFdoZWVsOgotICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFBvaW50KFtldmVudCBsb2Nh
dGlvbkluV2luZG93XSwgW2V2ZW50IHdpbmRvd10pOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxM
T1dFRCA+PSAxMDEwMDMKKyAgICBjYXNlIE5TRXZlbnRUeXBlUHJlc3N1cmU6CisjZW5kaWYKKyAg
ICBjYXNlIE5TTGVmdE1vdXNlRG93bjoKKyAgICBjYXNlIE5TTGVmdE1vdXNlRHJhZ2dlZDoKKyAg
ICBjYXNlIE5TTGVmdE1vdXNlVXA6CisgICAgY2FzZSBOU01vdXNlRW50ZXJlZDoKKyAgICBjYXNl
IE5TTW91c2VFeGl0ZWQ6CisgICAgY2FzZSBOU01vdXNlTW92ZWQ6CisgICAgY2FzZSBOU090aGVy
TW91c2VEb3duOgorICAgIGNhc2UgTlNPdGhlck1vdXNlRHJhZ2dlZDoKKyAgICBjYXNlIE5TT3Ro
ZXJNb3VzZVVwOgorICAgIGNhc2UgTlNSaWdodE1vdXNlRG93bjoKKyAgICBjYXNlIE5TUmlnaHRN
b3VzZURyYWdnZWQ6CisgICAgY2FzZSBOU1JpZ2h0TW91c2VVcDoKKyAgICBjYXNlIE5TU2Nyb2xs
V2hlZWw6CisgICAgICAgIHJldHVybiBnbG9iYWxQb2ludChbZXZlbnQgbG9jYXRpb25JbldpbmRv
d10sIFtldmVudCB3aW5kb3ddKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gTlNaZXJv
UG9pbnQ7CiAgICAgfQogfQogCiBzdGF0aWMgTlNQb2ludCBwb2ludEZvckV2ZW50KE5TRXZlbnQg
KmV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCiB7CiAgICAgc3dpdGNoIChbZXZlbnQgdHlwZV0p
IHsKLSAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURvd246Ci0gICAgICAgIGNhc2UgTlNMZWZ0TW91
c2VEcmFnZ2VkOgotICAgICAgICBjYXNlIE5TTGVmdE1vdXNlVXA6Ci0gICAgICAgIGNhc2UgTlNN
b3VzZUVudGVyZWQ6Ci0gICAgICAgIGNhc2UgTlNNb3VzZUV4aXRlZDoKLSAgICAgICAgY2FzZSBO
U01vdXNlTW92ZWQ6Ci0gICAgICAgIGNhc2UgTlNPdGhlck1vdXNlRG93bjoKLSAgICAgICAgY2Fz
ZSBOU090aGVyTW91c2VEcmFnZ2VkOgotICAgICAgICBjYXNlIE5TT3RoZXJNb3VzZVVwOgotICAg
ICAgICBjYXNlIE5TUmlnaHRNb3VzZURvd246Ci0gICAgICAgIGNhc2UgTlNSaWdodE1vdXNlRHJh
Z2dlZDoKLSAgICAgICAgY2FzZSBOU1JpZ2h0TW91c2VVcDoKLSAgICAgICAgY2FzZSBOU1Njcm9s
bFdoZWVsOiB7Ci0gICAgICAgICAgICAvLyBOb3RlOiBUaGlzIHdpbGwgaGF2ZSBpdHMgb3JpZ2lu
IGF0IHRoZSBib3R0b20gbGVmdCBvZiB0aGUgd2luZG93IHVubGVzcyB3aW5kb3dWaWV3IGlzIGZs
aXBwZWQuCi0gICAgICAgICAgICAvLyBJbiB0aG9zZSBjYXNlcywgdGhlIFkgY29vcmRpbmF0ZSBn
ZXRzIGZsaXBwZWQgYnkgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cuCi0gICAg
ICAgICAgICBOU1BvaW50IGxvY2F0aW9uID0gW2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddOwotICAg
ICAgICAgICAgaWYgKHdpbmRvd1ZpZXcpCi0gICAgICAgICAgICAgICAgbG9jYXRpb24gPSBbd2lu
ZG93VmlldyBjb252ZXJ0UG9pbnQ6bG9jYXRpb24gZnJvbVZpZXc6bmlsXTsKLSAgICAgICAgICAg
IHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIE5TWmVyb1BvaW50OworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dF
RCA+PSAxMDEwMDMKKyAgICBjYXNlIE5TRXZlbnRUeXBlUHJlc3N1cmU6CisjZW5kaWYKKyAgICBj
YXNlIE5TTGVmdE1vdXNlRG93bjoKKyAgICBjYXNlIE5TTGVmdE1vdXNlRHJhZ2dlZDoKKyAgICBj
YXNlIE5TTGVmdE1vdXNlVXA6CisgICAgY2FzZSBOU01vdXNlRW50ZXJlZDoKKyAgICBjYXNlIE5T
TW91c2VFeGl0ZWQ6CisgICAgY2FzZSBOU01vdXNlTW92ZWQ6CisgICAgY2FzZSBOU090aGVyTW91
c2VEb3duOgorICAgIGNhc2UgTlNPdGhlck1vdXNlRHJhZ2dlZDoKKyAgICBjYXNlIE5TT3RoZXJN
b3VzZVVwOgorICAgIGNhc2UgTlNSaWdodE1vdXNlRG93bjoKKyAgICBjYXNlIE5TUmlnaHRNb3Vz
ZURyYWdnZWQ6CisgICAgY2FzZSBOU1JpZ2h0TW91c2VVcDoKKyAgICBjYXNlIE5TU2Nyb2xsV2hl
ZWw6IHsKKyAgICAgICAgLy8gTm90ZTogVGhpcyB3aWxsIGhhdmUgaXRzIG9yaWdpbiBhdCB0aGUg
Ym90dG9tIGxlZnQgb2YgdGhlIHdpbmRvdyB1bmxlc3Mgd2luZG93VmlldyBpcyBmbGlwcGVkLgor
ICAgICAgICAvLyBJbiB0aG9zZSBjYXNlcywgdGhlIFkgY29vcmRpbmF0ZSBnZXRzIGZsaXBwZWQg
YnkgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cuCisgICAgICAgIE5TUG9pbnQg
bG9jYXRpb24gPSBbZXZlbnQgbG9jYXRpb25JbldpbmRvd107CisgICAgICAgIGlmICh3aW5kb3dW
aWV3KQorICAgICAgICAgICAgbG9jYXRpb24gPSBbd2luZG93VmlldyBjb252ZXJ0UG9pbnQ6bG9j
YXRpb24gZnJvbVZpZXc6bmlsXTsKKyAgICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgIH0KKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7CiAgICAgfQogfQogCkBAIC0z
NTgsMjUgKzM2NywzOCBAQCBib29sIFdlYkV2ZW50RmFjdG9yeTo6c2hvdWxkQmVIYW5kbGVkQXND
CiAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDxOU01lbnVUeXBlPihldmVudC5tZW51VHlwZUZvckV2
ZW50KCkpID09IE5TTWVudVR5cGVDb250ZXh0TWVudSk7CiB9CiAKLVdlYk1vdXNlRXZlbnQgV2Vi
RXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU0V2ZW50
ICpwcmVzc3VyZUV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCitXZWJNb3VzZUV2ZW50IFdlYkV2
ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudChOU0V2ZW50ICpldmVudCwgTlNFdmVudCAq
bGFzdFByZXNzdXJlRXZlbnQsIE5TVmlldyAqd2luZG93VmlldykKIHsKICAgICBOU1BvaW50IHBv
c2l0aW9uID0gcG9pbnRGb3JFdmVudChldmVudCwgd2luZG93Vmlldyk7CiAgICAgTlNQb2ludCBn
bG9iYWxQb3NpdGlvbiA9IGdsb2JhbFBvaW50Rm9yRXZlbnQoZXZlbnQpOwogCi0gICAgV2ViRXZl
bnQ6OlR5cGUgdHlwZSAgICAgICAgICAgICAgICAgICAgID0gbW91c2VFdmVudFR5cGVGb3JFdmVu
dChldmVudCk7Ci0gICAgV2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1dHRvbiAgICAgICAgICAgID0g
bW91c2VCdXR0b25Gb3JFdmVudChldmVudCk7Ci0gICAgZmxvYXQgZGVsdGFYICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gW2V2ZW50IGRlbHRhWF07Ci0gICAgZmxvYXQgZGVsdGFZICAgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gW2V2ZW50IGRlbHRhWV07Ci0gICAgZmxvYXQgZGVsdGFa
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gW2V2ZW50IGRlbHRhWl07Ci0gICAgaW50IGNs
aWNrQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgID0gY2xpY2tDb3VudEZvckV2ZW50KGV2
ZW50KTsKLSAgICBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycyAgICAgICAgICAgPSBtb2Rp
ZmllcnNGb3JFdmVudChldmVudCk7Ci0gICAgZG91YmxlIHRpbWVzdGFtcCAgICAgICAgICAgICAg
ICAgICAgICAgID0gZXZlbnRUaW1lU3RhbXBTaW5jZTE5NzAoZXZlbnQpOwotICAgIGludCBldmVu
dE51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICA9IFtldmVudCBldmVudE51bWJlcl07Ci0g
ICAgaW50IG1lbnVUeXBlRm9yRXZlbnQgICAgICAgICAgICAgICAgICAgID0gdHlwZUZvckV2ZW50
KGV2ZW50KTsKKyAgICBXZWJFdmVudDo6VHlwZSB0eXBlID0gbW91c2VFdmVudFR5cGVGb3JFdmVu
dChldmVudCk7CisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAwMwor
ICAgIGlmIChbZXZlbnQgdHlwZV0gPT0gTlNFdmVudFR5cGVQcmVzc3VyZSkgeworICAgICAgICAv
LyBTaW5jZSBBcHBLaXQgZG9lc24ndCBzZW5kIG1vdXNlIGV2ZW50cyBmb3IgZm9yY2UgZG93biBv
ciBmb3JjZSB1cCwgd2UgaGF2ZSB0byB1c2UgdGhlIGN1cnJlbnQgcHJlc3N1cmUKKyAgICAgICAg
Ly8gZXZlbnQgYW5kIGxhc3RQcmVzc3VyZUV2ZW50IHRvIGRldGVjdCBpZiB0aGlzIGlzIE1vdXNl
Rm9yY2VEb3duLCBNb3VzZUZvcmNlVXAsIG9yIGp1c3QgTW91c2VGb3JjZUNoYW5nZWQuCisgICAg
ICAgIGlmIChsYXN0UHJlc3N1cmVFdmVudC5zdGFnZSA9PSAxICYmIGV2ZW50LnN0YWdlID09IDIp
CisgICAgICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNlRm9yY2VEb3duOworICAgICAgICBl
bHNlIGlmIChsYXN0UHJlc3N1cmVFdmVudC5zdGFnZSA9PSAyICYmIGV2ZW50LnN0YWdlID09IDEp
CisgICAgICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNlRm9yY2VVcDsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgdHlwZSA9IFdlYkV2ZW50OjpNb3VzZUZvcmNlQ2hhbmdlZDsKKyAgICB9
CisjZW5kaWYKKworICAgIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBidXR0b24gPSBtb3VzZUJ1dHRv
bkZvckV2ZW50KGV2ZW50KTsKKyAgICBmbG9hdCBkZWx0YVggPSBbZXZlbnQgZGVsdGFYXTsKKyAg
ICBmbG9hdCBkZWx0YVkgPSBbZXZlbnQgZGVsdGFZXTsKKyAgICBmbG9hdCBkZWx0YVogPSBbZXZl
bnQgZGVsdGFaXTsKKyAgICBpbnQgY2xpY2tDb3VudCA9IGNsaWNrQ291bnRGb3JFdmVudChldmVu
dCk7CisgICAgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVu
dChldmVudCk7CisgICAgZG91YmxlIHRpbWVzdGFtcCA9IGV2ZW50VGltZVN0YW1wU2luY2UxOTcw
KGV2ZW50KTsKKyAgICBpbnQgZXZlbnROdW1iZXIgPSBbZXZlbnQgZXZlbnROdW1iZXJdOworICAg
IGludCBtZW51VHlwZUZvckV2ZW50ID0gdHlwZUZvckV2ZW50KGV2ZW50KTsKIAogICAgIGRvdWJs
ZSBmb3JjZSA9IDA7CiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAw
MwotICAgIGZvcmNlID0gcHJlc3N1cmVFdmVudC5zdGFnZSA8IDEgPyBwcmVzc3VyZUV2ZW50LnBy
ZXNzdXJlIDogcHJlc3N1cmVFdmVudC5wcmVzc3VyZSArIHByZXNzdXJlRXZlbnQuc3RhZ2UgLSAx
OworICAgIGZvcmNlID0gbGFzdFByZXNzdXJlRXZlbnQuc3RhZ2UgPCAxID8gbGFzdFByZXNzdXJl
RXZlbnQucHJlc3N1cmUgOiBsYXN0UHJlc3N1cmVFdmVudC5wcmVzc3VyZSArIGxhc3RQcmVzc3Vy
ZUV2ZW50LnN0YWdlIC0gMTsKICNlbmRpZgogCiAgICAgcmV0dXJuIFdlYk1vdXNlRXZlbnQodHlw
ZSwgYnV0dG9uLCBJbnRQb2ludChwb3NpdGlvbiksIEludFBvaW50KGdsb2JhbFBvc2l0aW9uKSwg
ZGVsdGFYLCBkZWx0YVksIGRlbHRhWiwgY2xpY2tDb3VudCwgbW9kaWZpZXJzLCB0aW1lc3RhbXAs
IGZvcmNlLCBldmVudE51bWJlciwgbWVudVR5cGVGb3JFdmVudCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMTgyOTAzKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzOTcsNiArNDM5Nyw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlRXZlbnQodWlu
dDMKIAogICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjoKICAgICBjYXNlIFdlYkV2ZW50OjpN
b3VzZVVwOgorICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRm9yY2VDaGFuZ2VkOgorICAgIGNhc2Ug
V2ViRXZlbnQ6Ok1vdXNlRm9yY2VEb3duOgorICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRm9yY2VV
cDoKICAgICBjYXNlIFdlYkV2ZW50OjpXaGVlbDoKICAgICBjYXNlIFdlYkV2ZW50OjpLZXlEb3du
OgogICAgIGNhc2UgV2ViRXZlbnQ6OktleVVwOgpAQCAtNDQyNyw2ICs0NDMwLDEwIEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlRXZlbnQodWludDMKICAgICBjYXNlIFdlYkV2ZW50OjpN
b3VzZVVwOgogICAgICAgICBtX2N1cnJlbnRseVByb2Nlc3NlZE1vdXNlRG93bkV2ZW50ID0gbnVs
bHB0cjsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VGb3JjZUNoYW5n
ZWQ6CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VGb3JjZURvd246CisgICAgY2FzZSBXZWJFdmVu
dDo6TW91c2VGb3JjZVVwOgorICAgICAgICBicmVhazsKIAogICAgIGNhc2UgV2ViRXZlbnQ6Oldo
ZWVsOiB7CiAgICAgICAgIE1FU1NBR0VfQ0hFQ0soIW1fY3VycmVudGx5UHJvY2Vzc2VkV2hlZWxF
dmVudHMuaXNFbXB0eSgpKTsKQEAgLTU2NzQsMTEgKzU2ODEsNiBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6Zm9jdXNBbmRTZWxlY3RMYXN0QWN0CiAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpGb2N1c0FuZFNlbGVjdExhc3RBY3Rpb25NZW51SGl0VGVzdFJlc3VsdCgpLCBtX3Bh
Z2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjppbnB1dERldmljZUZvcmNlRGlkQ2hhbmdl
KGZsb2F0IGZvcmNlLCBpbnQgc3RhZ2UpCi17Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpJbnB1dERldmljZUZvcmNlRGlkQ2hhbmdlKGZvcmNlLCBzdGFnZSksIG1fcGFn
ZUlEKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6OmltbWVkaWF0ZUFjdGlvbkRpZFVwZGF0ZSgp
CiB7CiAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbW1lZGlhdGVBY3Rp
b25EaWRVcGRhdGUoKSwgbV9wYWdlSUQpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMTgyOTAzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC05OTQsNyArOTk0LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgc2VsZWN0TGFzdEFjdGlvbk1lbnVSYW5nZSgpOwogICAgIHZvaWQgZm9j
dXNBbmRTZWxlY3RMYXN0QWN0aW9uTWVudUhpdFRlc3RSZXN1bHQoKTsKIAotICAgIHZvaWQgaW5w
dXREZXZpY2VGb3JjZURpZENoYW5nZShmbG9hdCBmb3JjZSwgaW50IHN0YWdlKTsKICAgICB2b2lk
IGltbWVkaWF0ZUFjdGlvbkRpZFVwZGF0ZSgpOwogICAgIHZvaWQgaW1tZWRpYXRlQWN0aW9uRGlk
Q2FuY2VsKCk7CiAgICAgdm9pZCBpbW1lZGlhdGVBY3Rpb25EaWRDb21wbGV0ZSgpOwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24gMTgy
OTAzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDMxLDEzICsxNDMxLDE3IEBAIC0gKHZvaWQpcHJlc3N1cmVDaGFuZ2VX
aXRoRXZlbnQ6KE5TRXZlbnQKICAgICBpZiAoZXZlbnQgPT0gX2RhdGEtPl9wcmVzc3VyZUV2ZW50
KQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoX2RhdGEtPl9pZ25vcmVzTm9uV2hlZWxFdmVu
dHMpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChldmVudC5waGFzZSAhPSBOU0V2ZW50UGhh
c2VDaGFuZ2VkICYmIGV2ZW50LnBoYXNlICE9IE5TRXZlbnRQaGFzZUJlZ2FuICYmIGV2ZW50LnBo
YXNlICE9IE5TRXZlbnRQaGFzZUVuZGVkKQogICAgICAgICByZXR1cm47CiAKKyAgICBOYXRpdmVX
ZWJNb3VzZUV2ZW50IHdlYkV2ZW50KGV2ZW50LCBfZGF0YS0+X3ByZXNzdXJlRXZlbnQsIHNlbGYp
OworICAgIF9kYXRhLT5fcGFnZS0+aGFuZGxlTW91c2VFdmVudCh3ZWJFdmVudCk7CisKICAgICBb
X2RhdGEtPl9wcmVzc3VyZUV2ZW50IHJlbGVhc2VdOwogICAgIF9kYXRhLT5fcHJlc3N1cmVFdmVu
dCA9IFtldmVudCByZXRhaW5dOwotCi0gICAgX2RhdGEtPl9wYWdlLT5pbnB1dERldmljZUZvcmNl
RGlkQ2hhbmdlKGV2ZW50LnByZXNzdXJlLCBldmVudC5zdGFnZSk7CiAjZW5kaWYKIH0KIApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2Fw
ZVBsdWdpblgxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpblgxMS5jcHAJKHJldmlzaW9uIDE4Mjkw
MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0
c2NhcGVQbHVnaW5YMTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzQsNiArNDc0LDkgQEAgYm9v
bCBOZXRzY2FwZVBsdWdpbjo6cGxhdGZvcm1IYW5kbGVNb3VzZQogICAgIGNhc2UgV2ViRXZlbnQ6
Ok1vdXNlTW92ZToKICAgICAgICAgc2V0WE1vdGlvbkV2ZW50RmllbGRzKHhFdmVudCwgZXZlbnQs
IGNvbnZlcnRUb1Jvb3RWaWV3KEludFBvaW50KCkpKTsKICAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBXZWJFdmVudDo6TW91c2VGb3JjZUNoYW5nZWQ6CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VG
b3JjZURvd246CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VGb3JjZVVwOgogICAgIGNhc2UgV2Vi
RXZlbnQ6Ok5vVHlwZToKICAgICBjYXNlIFdlYkV2ZW50OjpXaGVlbDoKICAgICBjYXNlIFdlYkV2
ZW50OjpLZXlEb3duOgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTgyOTAzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAzLDYgKzE5MDMs
MTIgQEAgc3RhdGljIGJvb2wgaGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNbwogICAgICAgICAg
ICAgaWYgKG9ubHlVcGRhdGVTY3JvbGxiYXJzKQogICAgICAgICAgICAgICAgIHJldHVybiBwYWdl
LT5jb3JlUGFnZSgpLT51c2VySW5wdXRCcmlkZ2UoKS5oYW5kbGVNb3VzZU1vdmVPblNjcm9sbGJh
ckV2ZW50KHBsYXRmb3JtTW91c2VFdmVudCk7CiAgICAgICAgICAgICByZXR1cm4gcGFnZS0+Y29y
ZVBhZ2UoKS0+dXNlcklucHV0QnJpZGdlKCkuaGFuZGxlTW91c2VNb3ZlRXZlbnQocGxhdGZvcm1N
b3VzZUV2ZW50KTsKKworICAgICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VDaGFu
Z2VkOgorICAgICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VEb3duOgorICAgICAg
ICBjYXNlIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VVcDoKKyAgICAgICAgICAgIHJldHVybiBw
YWdlLT5jb3JlUGFnZSgpLT51c2VySW5wdXRCcmlkZ2UoKS5oYW5kbGVNb3VzZUZvcmNlRXZlbnQo
cGxhdGZvcm1Nb3VzZUV2ZW50KTsKKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDE4Mjkw
MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwOTQsNyArMTA5NCw2IEBAIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpSYW5nZT4gbG9va3VwVGV4dEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCwg
TlNEaWN0aW9uYXJ5ICoqb3B0aW9ucyk7CiAgICAgdm9pZCBzZWxlY3RMYXN0QWN0aW9uTWVudVJh
bmdlKCk7CiAgICAgdm9pZCBmb2N1c0FuZFNlbGVjdExhc3RBY3Rpb25NZW51SGl0VGVzdFJlc3Vs
dCgpOwotICAgIHZvaWQgaW5wdXREZXZpY2VGb3JjZURpZENoYW5nZShmbG9hdCBmb3JjZSwgaW50
IHN0YWdlKTsKICAgICB2b2lkIGltbWVkaWF0ZUFjdGlvbkRpZFVwZGF0ZSgpOwogICAgIHZvaWQg
aW1tZWRpYXRlQWN0aW9uRGlkQ2FuY2VsKCk7CiAgICAgdm9pZCBpbW1lZGlhdGVBY3Rpb25EaWRD
b21wbGV0ZSgpOwpAQCAtMTM1NSw3ICsxMzU0LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2Vi
Q29yZTo6UmFuZ2U+IG1fbGFzdEFjdGlvbk1lbnVSYW5nZUZvclNlbGVjdGlvbjsKICAgICBXZWJD
b3JlOjpIaXRUZXN0UmVzdWx0IG1fbGFzdEFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0OwogICAgIFJl
ZlB0cjxXZWJQYWdlT3ZlcmxheT4gbV9sYXN0QWN0aW9uTWVudUhpdFBhZ2VPdmVybGF5OwotICAg
IGludCBtX2xhc3RGb3JjZVN0YWdlIHsgMCB9OwogI2VuZGlmCiAKICAgICBib29sIG1fbWFpbkZy
YW1lUHJvZ3Jlc3NDb21wbGV0ZWQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTgyOTAzKQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTQwNyw3ICs0MDcsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExl
Z2FjeVJlY2VpdmVyIHsKICAgICBQZXJmb3JtQWN0aW9uTWVudUhpdFRlc3RBdExvY2F0aW9uKFdl
YkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpb24sIGJvb2wgZm9ySW1tZWRpYXRlQWN0aW9uKQogICAg
IFNlbGVjdExhc3RBY3Rpb25NZW51UmFuZ2UoKQogICAgIEZvY3VzQW5kU2VsZWN0TGFzdEFjdGlv
bk1lbnVIaXRUZXN0UmVzdWx0KCkKLSAgICBJbnB1dERldmljZUZvcmNlRGlkQ2hhbmdlKGZsb2F0
IGZvcmNlLCBpbnQgc3RhZ2UpCiAgICAgSW1tZWRpYXRlQWN0aW9uRGlkVXBkYXRlKCkKICAgICBJ
bW1lZGlhdGVBY3Rpb25EaWRDYW5jZWwoKQogICAgIEltbWVkaWF0ZUFjdGlvbkRpZENvbXBsZXRl
KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0JKHJldmlzaW9uIDE4MjkwMykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE0MSwy
NSArMTE0MSw2IEBAIHZvaWQgV2ViUGFnZTo6Zm9jdXNBbmRTZWxlY3RMYXN0QWN0aW9uTWUKICAg
ICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHBvc2l0aW9uKTsKIH0KIAotdm9pZCBX
ZWJQYWdlOjppbnB1dERldmljZUZvcmNlRGlkQ2hhbmdlKGZsb2F0IGZvcmNlLCBpbnQgc3RhZ2Up
Ci17Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IG1fbGFzdEFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0
LmlubmVyRWxlbWVudCgpOwotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZmxvYXQgb3ZlcmFsbEZvcmNlID0gc3RhZ2UgPCAxID8gZm9yY2UgOiBmb3JjZSArIHN0YWdl
IC0gMTsKLSAgICBlbGVtZW50LT5kaXNwYXRjaE1vdXNlRm9yY2VDaGFuZ2VkKG92ZXJhbGxGb3Jj
ZSk7Ci0KLSAgICBpZiAobV9sYXN0Rm9yY2VTdGFnZSA9PSAxICYmIHN0YWdlID09IDIpCi0gICAg
ICAgIGVsZW1lbnQtPmRpc3BhdGNoTW91c2VGb3JjZURvd24oKTsKLSAgICBlbHNlIGlmIChtX2xh
c3RGb3JjZVN0YWdlID09IDIgJiYgc3RhZ2UgPT0gMSkgewotICAgICAgICBlbGVtZW50LT5kaXNw
YXRjaE1vdXNlRm9yY2VVcCgpOwotICAgICAgICBlbGVtZW50LT5kaXNwYXRjaE1vdXNlRm9yY2VD
bGljaygpOwotICAgIH0KLQotICAgIG1fbGFzdEZvcmNlU3RhZ2UgPSBzdGFnZTsKLX0KLQogdm9p
ZCBXZWJQYWdlOjppbW1lZGlhdGVBY3Rpb25EaWRVcGRhdGUoKQogewogICAgIG1fcGFnZS0+bWFp
bkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuc2V0SW1tZWRpYXRlQWN0aW9uU3RhZ2UoSW1tZWRpYXRl
QWN0aW9uU3RhZ2U6OkFjdGlvblVwZGF0ZWQpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyOTA1KQorKysgVG9vbHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTUtMDQtMTYgIEJldGgg
RGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIEZvcmNlIG1vdXNlIGV2ZW50cyBz
aG91bGQgZ28gdGhyb3VnaCBub3JtYWwgbW91c2UgZXZlbnQgaGFuZGxpbmcgY29kZSBwYXRocwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzNzQ5Cisg
ICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjA0NzI4
OTUKKworICAgICAgICBSZXZpZXdlZCBieSBEZWFuIEphY2tzb24uCisKKyAgICAgICAgQWRkIG1v
dXNlRm9yY2VEb3duL21vdXNlRm9yY2VVcC9tb3VzZUZvcmNlQ2hhbmdlZCBzdXBwb3J0IHRvIFdl
YktpdFRlc3RSdW5uZXIuIAorICAgICAgICBTaW5jZSB0aGVyZSBpcyBub3QgYSB3YXkgdG8gY3Jl
YXRlIGFuIE5TRXZlbnRUeXBlUHJlc3N1cmUgZnJvbSBzY3JhdGNoLCB3ZSAKKyAgICAgICAgc3Vi
Y2xhc3MgTlNFdmVudCBhbmQgb3ZlcnJpZGUgYWxsIG9mIHRoZSBjcml0aWNhbCBtZXRob2RzLgor
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5Lmg6CisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9FdmVudFNlbmRpbmdD
b250cm9sbGVyLmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdD
b250cm9sbGVyOjptb3VzZUZvcmNlRG93bik6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6Om1vdXNlRm9yY2VVcCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6Om1vdXNlRm9yY2VDaGFuZ2VkKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFjL0V2ZW50U2VuZGVyUHJveHkubW06CisgICAgICAg
ICgtW0V2ZW50U2VuZGVyUHJlc3N1cmVFdmVudCBpbml0QXRMb2NhdGlvbjpnbG9iYWxMb2NhdGlv
bjpzdGFnZTpwcmVzc3VyZTpwaGFzZTp0aW1lOmV2ZW50TnVtYmVyOl0pOgorICAgICAgICAoLVtF
dmVudFNlbmRlclByZXNzdXJlRXZlbnQgdGltZXN0YW1wXSk6CisgICAgICAgICgtW0V2ZW50U2Vu
ZGVyUHJlc3N1cmVFdmVudCB0eXBlXSk6CisgICAgICAgICgtW0V2ZW50U2VuZGVyUHJlc3N1cmVF
dmVudCBsb2NhdGlvbkluV2luZG93XSk6CisgICAgICAgICgtW0V2ZW50U2VuZGVyUHJlc3N1cmVF
dmVudCBsb2NhdGlvbl0pOgorICAgICAgICAoLVtFdmVudFNlbmRlclByZXNzdXJlRXZlbnQgc3Rh
Z2VdKToKKyAgICAgICAgKC1bRXZlbnRTZW5kZXJQcmVzc3VyZUV2ZW50IHByZXNzdXJlXSk6Cisg
ICAgICAgICgtW0V2ZW50U2VuZGVyUHJlc3N1cmVFdmVudCBwaGFzZV0pOgorICAgICAgICAoLVtF
dmVudFNlbmRlclByZXNzdXJlRXZlbnQgZXZlbnROdW1iZXJdKToKKyAgICAgICAgKFdUUjo6RXZl
bnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZURvd24pOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRl
clByb3h5Ojptb3VzZUZvcmNlVXApOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojpt
b3VzZUZvcmNlQ2hhbmdlZCk6CisKIDIwMTUtMDQtMTYgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9z
c3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBbRUZMXSBCdW1wIExMVk0gdG8gdmVyc2lvbiAzLjYu
MCBvbiBYODZfNjQKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94
eS5oCShyZXZpc2lvbiAxODI5MDMpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2Vu
ZGVyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOSBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIG1vdXNlRG93bih1bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMpOwogICAg
IHZvaWQgbW91c2VVcCh1bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMpOworICAgIHZv
aWQgbW91c2VGb3JjZURvd24oKTsKKyAgICB2b2lkIG1vdXNlRm9yY2VVcCgpOworICAgIHZvaWQg
bW91c2VGb3JjZUNoYW5nZWQoZmxvYXQpOwogICAgIHZvaWQgbW91c2VNb3ZlVG8oZG91YmxlIHgs
IGRvdWJsZSB5KTsKICAgICB2b2lkIG1vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5KTsKICAgICB2
b2lkIG1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyhpbnQgeCwgaW50IHks
IGludCBwaGFzZSwgaW50IG1vbWVudHVtKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxODI5MDMpCisrKyBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwMiw2ICsxMTAy
LDMyIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdENvbnRyb2xsZXI6OmQKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9CiAKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VGb3Jj
ZURvd24iKSkgeworICAgICAgICAgICAgV0tQYWdlU2V0U2hvdWxkU2VuZEV2ZW50c1N5bmNocm9u
b3VzbHkobWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0cnVlKTsKKyAgICAgICAgICAgIG1fZXZlbnRT
ZW5kZXJQcm94eS0+bW91c2VGb3JjZURvd24oKTsKKyAgICAgICAgICAgIFdLUGFnZVNldFNob3Vs
ZFNlbmRFdmVudHNTeW5jaHJvbm91c2x5KG1haW5XZWJWaWV3KCktPnBhZ2UoKSwgZmFsc2UpOwor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRm9yY2VVcCIpKSB7Cisg
ICAgICAgICAgICBXS1BhZ2VTZXRTaG91bGRTZW5kRXZlbnRzU3luY2hyb25vdXNseShtYWluV2Vi
VmlldygpLT5wYWdlKCksIHRydWUpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5t
b3VzZUZvcmNlVXAoKTsKKyAgICAgICAgICAgIFdLUGFnZVNldFNob3VsZFNlbmRFdmVudHNTeW5j
aHJvbm91c2x5KG1haW5XZWJWaWV3KCktPnBhZ2UoKSwgZmFsc2UpOworICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRm9yY2VDaGFuZ2VkIikpIHsKKyAgICAgICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmb3JjZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkZvcmNlIikpOworICAgICAgICAgICAgZG91YmxlIGZvcmNlID0g
V0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZvcmNlS2V5LmdldCgpKSkpOworCisg
ICAgICAgICAgICBXS1BhZ2VTZXRTaG91bGRTZW5kRXZlbnRzU3luY2hyb25vdXNseShtYWluV2Vi
VmlldygpLT5wYWdlKCksIHRydWUpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5t
b3VzZUZvcmNlQ2hhbmdlZChmb3JjZSk7CisgICAgICAgICAgICBXS1BhZ2VTZXRTaG91bGRTZW5k
RXZlbnRzU3luY2hyb25vdXNseShtYWluV2ViVmlldygpLT5wYWdlKCksIGZhbHNlKTsKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCiAg
ICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAi
TW91c2VTY3JvbGxCeSIpKSB7CiAgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
eEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7CiAgICAg
ICAgICAgICBkb3VibGUgeCA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB4S2V5
LmdldCgpKSkpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9F
dmVudFNlbmRpbmdDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAxODI5MDMpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50
U2VuZGluZ0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUzLDQ2IEBA
IHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VNb3ZlVG8KICAgICBXS0J1bmRsZVBh
Z2VQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNz
YWdlQm9keS5nZXQoKSwgMCk7CiB9CiAKK3ZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91
c2VGb3JjZURvd24oKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVu
dFNlbmRlciIpKTsKKyAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
CisKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleShBZG9wdFdLLCBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKKyAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIk1vdXNlRm9yY2VEb3duIikpOworICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3Vi
TWVzc2FnZU5hbWUuZ2V0KCkpOworCisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2Vu
ZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwor
fQorCit2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9yY2VVcCgpCit7CisgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUoQWRvcHRXSywg
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOworICAgIFdLUmV0
YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkoQWRv
cHRXSywgV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKworICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTdWJNZXNzYWdlIikpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJN
ZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VG
b3JjZVVwIikpOworICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOworCisg
ICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworfQorCit2b2lkIEV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6Om1vdXNlRm9yY2VDaGFuZ2VkKGRvdWJsZSBmb3JjZSkKK3sKKyAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7CisgICAgV0tSZXRhaW5QdHI8
V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keShBZG9wdFdLLCBX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHN1Yk1lc3NhZ2VLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlN1Yk1lc3NhZ2UiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VO
YW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlQ2hh
bmdlZCIpKTsKKyAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKKworICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmb3JjZUtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiRm9yY2UiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+
IGZvcmNlUmVmKEFkb3B0V0ssIFdLRG91YmxlQ3JlYXRlKGZvcmNlKSk7CisgICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBmb3JjZUtleS5nZXQoKSwg
Zm9yY2VSZWYuZ2V0KCkpOworCisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworfQor
CiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29u
ZHMpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5h
bWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikp
OwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRp
bmdDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmgJKHJldmlzaW9uIDE4MjkwMykKKysr
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IG1vdXNlRG93bihpbnQgYnV0dG9uLCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXkpOwogICAgIHZv
aWQgbW91c2VVcChpbnQgYnV0dG9uLCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXkpOwogICAgIHZv
aWQgbW91c2VNb3ZlVG8oaW50IHgsIGludCB5KTsKKyAgICB2b2lkIG1vdXNlRm9yY2VEb3duKCk7
CisgICAgdm9pZCBtb3VzZUZvcmNlVXAoKTsKKyAgICB2b2lkIG1vdXNlRm9yY2VDaGFuZ2VkKGRv
dWJsZSBmb3JjZSk7CiAgICAgdm9pZCBtb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSk7CiAgICAg
dm9pZCBtb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoaW50IHgsIGludCB5
LCBKU1N0cmluZ1JlZiBwaGFzZSwgSlNTdHJpbmdSZWYgbW9tZW50dW0sIGJvb2wgYXN5bmNTY3Jv
bGxpbmcpOwogICAgIHZvaWQgY29udGludW91c01vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5LCBi
b29sIHBhZ2VkKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QmluZGluZ3MvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9FdmVudFNlbmRpbmdDb250
cm9sbGVyLmlkbAkocmV2aXNpb24gMTgyOTAzKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9FdmVudFNlbmRpbmdDb250cm9sbGVyLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsOSBAQCBpbnRlcmZhY2UgRXZlbnRTZW5kaW5nQ29udHJvbGxl
ciB7CiAgICAgdm9pZCBtb3VzZURvd24obG9uZyBidXR0b25OdW1iZXIsIG9iamVjdCBtb2RpZmll
ckFycmF5KTsKICAgICB2b2lkIG1vdXNlVXAobG9uZyBidXR0b25OdW1iZXIsIG9iamVjdCBtb2Rp
ZmllckFycmF5KTsKICAgICB2b2lkIG1vdXNlTW92ZVRvKGxvbmcgeCwgbG9uZyB5KTsKKyAgICB2
b2lkIG1vdXNlRm9yY2VEb3duKCk7CisgICAgdm9pZCBtb3VzZUZvcmNlVXAoKTsKKyAgICB2b2lk
IG1vdXNlRm9yY2VDaGFuZ2VkKGRvdWJsZSBmb3JjZSk7CiAgICAgdm9pZCBtb3VzZVNjcm9sbEJ5
KGxvbmcgeCwgbG9uZyB5KTsKICAgICB2b2lkIG1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21l
bnR1bVBoYXNlcyhsb25nIHgsIGxvbmcgeSwgRE9NU3RyaW5nIHBoYXNlLCBET01TdHJpbmcgbW9t
ZW50dW0sIG9wdGlvbmFsIGJvb2xlYW4gYXN5bmNTY3JvbGxpbmcpOwogICAgIHZvaWQgY29udGlu
dW91c01vdXNlU2Nyb2xsQnkobG9uZyB4LCBsb25nIHksIG9wdGlvbmFsIGJvb2xlYW4gcGFnZWQp
OwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94eS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9FdmVudFNlbmRlclByb3h5
Lm1tCShyZXZpc2lvbiAxODI5MDMpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9FdmVu
dFNlbmRlclByb3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4NSBAQCBAaW50ZXJm
YWNlIE5TQXBwbGljYXRpb24gKERldGFpbHMpCiAtICh2b2lkKV9zZXRDdXJyZW50RXZlbnQ6KE5T
RXZlbnQgKilldmVudDsKIEBlbmQKIAorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dF
RCA+PSAxMDEwMDMKK0BpbnRlcmZhY2UgRXZlbnRTZW5kZXJQcmVzc3VyZUV2ZW50IDogTlNFdmVu
dCB7CitAcHVibGljCisgICAgTlNQb2ludCBfZXZlbnRTZW5kZXJfbG9jYXRpb25JbldpbmRvdzsK
KyAgICBOU1BvaW50IF9ldmVudFNlbmRlcl9sb2NhdGlvbjsKKyAgICBOU0ludGVnZXIgX2V2ZW50
U2VuZGVyX3N0YWdlOworICAgIGZsb2F0IF9ldmVudFNlbmRlcl9wcmVzc3VyZTsKKyAgICBOU0V2
ZW50UGhhc2UgX2V2ZW50U2VuZGVyX3BoYXNlOworICAgIE5TVGltZUludGVydmFsIF9ldmVudFNl
bmRlcl90aW1lc3RhbXA7CisgICAgTlNJbnRlZ2VyIF9ldmVudFNlbmRlcl9ldmVudE51bWJlcjsK
K30KKworLSAoaWQpaW5pdEF0TG9jYXRpb246KE5TUG9pbnQpbG9jYXRpb24gZ2xvYmFsTG9jYXRp
b246KE5TUG9pbnQpZ2xvYmFsTG9jYXRpb24gc3RhZ2U6KE5TSW50ZWdlcilzdGFnZSBwcmVzc3Vy
ZTooZmxvYXQpcHJlc3N1cmUgcGhhc2U6KE5TRXZlbnRQaGFzZSlwaGFzZSB0aW1lOihOU1RpbWVJ
bnRlcnZhbCl0aW1lIGV2ZW50TnVtYmVyOihOU0ludGVnZXIpZXZlbnROdW1iZXI7CistIChOU1Rp
bWVJbnRlcnZhbCl0aW1lc3RhbXA7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBFdmVudFNlbmRl
clByZXNzdXJlRXZlbnQKKworLSAoaWQpaW5pdEF0TG9jYXRpb246KE5TUG9pbnQpbG9jYXRpb24g
Z2xvYmFsTG9jYXRpb246KE5TUG9pbnQpZ2xvYmFsTG9jYXRpb24gc3RhZ2U6KE5TSW50ZWdlcilz
dGFnZSBwcmVzc3VyZTooZmxvYXQpcHJlc3N1cmUgcGhhc2U6KE5TRXZlbnRQaGFzZSlwaGFzZSB0
aW1lOihOU1RpbWVJbnRlcnZhbCl0aW1lIGV2ZW50TnVtYmVyOihOU0ludGVnZXIpZXZlbnROdW1i
ZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworCisgICAgaWYgKCFzZWxmKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgX2V2ZW50U2VuZGVyX2xvY2F0aW9uID0gbG9jYXRpb247Cisg
ICAgX2V2ZW50U2VuZGVyX2xvY2F0aW9uSW5XaW5kb3cgPSBnbG9iYWxMb2NhdGlvbjsKKyAgICBf
ZXZlbnRTZW5kZXJfc3RhZ2UgPSBzdGFnZTsKKyAgICBfZXZlbnRTZW5kZXJfcHJlc3N1cmUgPSBw
cmVzc3VyZTsKKyAgICBfZXZlbnRTZW5kZXJfcGhhc2UgPSBwaGFzZTsKKyAgICBfZXZlbnRTZW5k
ZXJfdGltZXN0YW1wID0gdGltZTsKKyAgICBfZXZlbnRTZW5kZXJfZXZlbnROdW1iZXIgPSBldmVu
dE51bWJlcjsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChOU1RpbWVJbnRlcnZhbCl0aW1l
c3RhbXAKK3sKKyAgICByZXR1cm4gX2V2ZW50U2VuZGVyX3RpbWVzdGFtcDsKK30KKworLSAoTlNF
dmVudFR5cGUpdHlwZQoreworICAgIHJldHVybiBOU0V2ZW50VHlwZVByZXNzdXJlOworfQorCist
IChOU1BvaW50KWxvY2F0aW9uSW5XaW5kb3cKK3sKKyAgICByZXR1cm4gc2VsZi0+X2V2ZW50U2Vu
ZGVyX2xvY2F0aW9uOworfQorCistIChOU1BvaW50KWxvY2F0aW9uCit7CisgICAgcmV0dXJuIHNl
bGYtPl9ldmVudFNlbmRlcl9sb2NhdGlvbkluV2luZG93OworfQorCistIChOU0ludGVnZXIpc3Rh
Z2UKK3sKKyAgICByZXR1cm4gX2V2ZW50U2VuZGVyX3N0YWdlOworfQorCistIChmbG9hdClwcmVz
c3VyZQoreworICAgIHJldHVybiBfZXZlbnRTZW5kZXJfcHJlc3N1cmU7Cit9CisKKy0gKE5TRXZl
bnRQaGFzZSlwaGFzZQoreworICAgIHJldHVybiBfZXZlbnRTZW5kZXJfcGhhc2U7Cit9CisKKy0g
KE5TSW50ZWdlcilldmVudE51bWJlcgoreworICAgIHJldHVybiBfZXZlbnRTZW5kZXJfZXZlbnRO
dW1iZXI7Cit9CisKK0BlbmQKKyNlbmRpZiAvLyBfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9X
RUQgPj0gMTAxMDAzCisKIG5hbWVzcGFjZSBXVFIgewogCiBlbnVtIE1vdXNlQWN0aW9uIHsKQEAg
LTIwMCw2ICsyNzksMTE1IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VVcCh1bnNpZ25l
ZCAKICAgICBtX2NsaWNrUG9zaXRpb24gPSBtX3Bvc2l0aW9uOwogfQogCisjaWYgX19NQUNfT1Nf
WF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAwMwordm9pZCBFdmVudFNlbmRlclByb3h5Ojpt
b3VzZUZvcmNlRG93bigpCit7CisgICAgRXZlbnRTZW5kZXJQcmVzc3VyZUV2ZW50ICpmaXJzdEV2
ZW50ID0gW1tFdmVudFNlbmRlclByZXNzdXJlRXZlbnQgYWxsb2NdIGluaXRBdExvY2F0aW9uOk5T
TWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQorICAgICAgICBnbG9iYWxMb2Nh
dGlvbjooW21fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkg
Y29udmVydFJlY3RUb1NjcmVlbjpOU01ha2VSZWN0KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55
LCAxLCAxKV0ub3JpZ2luKQorICAgICAgICBzdGFnZToxCisgICAgICAgIHByZXNzdXJlOjAuOQor
ICAgICAgICBwaGFzZTpOU0V2ZW50UGhhc2VDaGFuZ2VkCisgICAgICAgIHRpbWU6YWJzb2x1dGVU
aW1lRm9yRXZlbnRUaW1lKGN1cnJlbnRFdmVudFRpbWUoKSkKKyAgICAgICAgZXZlbnROdW1iZXI6
KytldmVudE51bWJlcl07CisgICAgRXZlbnRTZW5kZXJQcmVzc3VyZUV2ZW50ICpzZWNvbmRFdmVu
dCA9IFtbRXZlbnRTZW5kZXJQcmVzc3VyZUV2ZW50IGFsbG9jXSBpbml0QXRMb2NhdGlvbjpOU01h
a2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKKyAgICAgICAgZ2xvYmFsTG9jYXRp
b246KFttX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpIGNv
bnZlcnRSZWN0VG9TY3JlZW46TlNNYWtlUmVjdChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSwg
MSwgMSldLm9yaWdpbikKKyAgICAgICAgc3RhZ2U6MgorICAgICAgICBwcmVzc3VyZTowLjEKKyAg
ICAgICAgcGhhc2U6TlNFdmVudFBoYXNlQ2hhbmdlZAorICAgICAgICB0aW1lOmFic29sdXRlVGlt
ZUZvckV2ZW50VGltZShjdXJyZW50RXZlbnRUaW1lKCkpCisgICAgICAgIGV2ZW50TnVtYmVyOisr
ZXZlbnROdW1iZXJdOworCisgICAgTlNWaWV3ICp0YXJnZXRWaWV3ID0gW21fdGVzdENvbnRyb2xs
ZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpIGhpdFRlc3Q6W2ZpcnN0RXZlbnQgbG9j
YXRpb25JbldpbmRvd11dOworICAgIHRhcmdldFZpZXcgPSB0YXJnZXRWaWV3ID8gdGFyZ2V0Vmll
dyA6IG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpOworICAg
IEFTU0VSVCh0YXJnZXRWaWV3KTsKKworICAgIC8vIFNpbmNlIEFwcEtpdCBkb2VzIG5vdCBpbXBs
ZW1lbnQgZm9yY2V1cC9kb3duIGFzIG1vdXNlIGV2ZW50cywgd2UgbmVlZCB0byBzZW5kIHR3byBw
cmVzc3VyZSBldmVudHMgdG8gZGV0ZWN0CisgICAgLy8gdGhlIGNoYW5nZSBpbiBzdGFnZSB0aGF0
IG1hcmtzIHRob3NlIG1vbWVudHMuCisgICAgW05TQXBwIF9zZXRDdXJyZW50RXZlbnQ6Zmlyc3RF
dmVudF07CisgICAgW3RhcmdldFZpZXcgcHJlc3N1cmVDaGFuZ2VXaXRoRXZlbnQ6Zmlyc3RFdmVu
dF07CisgICAgW05TQXBwIF9zZXRDdXJyZW50RXZlbnQ6c2Vjb25kRXZlbnRdOworICAgIFt0YXJn
ZXRWaWV3IHByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50OnNlY29uZEV2ZW50XTsKKworICAgIFtOU0Fw
cCBfc2V0Q3VycmVudEV2ZW50Om5pbF07CisgICAgLy8gV0tWaWV3IGNhY2hlcyB0aGUgbW9zdCBy
ZWNlbnQgcHJlc3N1cmUgZXZlbnQsIHNvIHNlbmQgaXQgYSBuaWwgZXZlbnQgdG8gY2xlYXIgdGhl
IGNhY2hlLgorICAgIFt0YXJnZXRWaWV3IHByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50Om5pbF07CisK
KyAgICBbZmlyc3RFdmVudCByZWxlYXNlXTsKKyAgICBbc2Vjb25kRXZlbnQgcmVsZWFzZV07Cit9
CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZVVwKCkKK3sKKyAgICBFdmVudFNl
bmRlclByZXNzdXJlRXZlbnQgKmZpcnN0RXZlbnQgPSBbW0V2ZW50U2VuZGVyUHJlc3N1cmVFdmVu
dCBhbGxvY10gaW5pdEF0TG9jYXRpb246TlNNYWtlUG9pbnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0
aW9uLnkpCisgICAgICAgIGdsb2JhbExvY2F0aW9uOihbbV90ZXN0Q29udHJvbGxlci0+bWFpbldl
YlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSBjb252ZXJ0UmVjdFRvU2NyZWVuOk5TTWFrZVJlY3Qo
bV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnksIDEsIDEpXS5vcmlnaW4pCisgICAgICAgIHN0YWdl
OjIKKyAgICAgICAgcHJlc3N1cmU6MC4xCisgICAgICAgIHBoYXNlOk5TRXZlbnRQaGFzZUNoYW5n
ZWQKKyAgICAgICAgdGltZTphYnNvbHV0ZVRpbWVGb3JFdmVudFRpbWUoY3VycmVudEV2ZW50VGlt
ZSgpKQorICAgICAgICBldmVudE51bWJlcjorK2V2ZW50TnVtYmVyXTsKKyAgICBFdmVudFNlbmRl
clByZXNzdXJlRXZlbnQgKnNlY29uZEV2ZW50ID0gW1tFdmVudFNlbmRlclByZXNzdXJlRXZlbnQg
YWxsb2NdIGluaXRBdExvY2F0aW9uOk5TTWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlv
bi55KQorICAgICAgICBnbG9iYWxMb2NhdGlvbjooW21fdGVzdENvbnRyb2xsZXItPm1haW5XZWJW
aWV3KCktPnBsYXRmb3JtV2luZG93KCkgY29udmVydFJlY3RUb1NjcmVlbjpOU01ha2VSZWN0KG1f
cG9zaXRpb24ueCwgbV9wb3NpdGlvbi55LCAxLCAxKV0ub3JpZ2luKQorICAgICAgICBzdGFnZTox
CisgICAgICAgIHByZXNzdXJlOjAuOQorICAgICAgICBwaGFzZTpOU0V2ZW50UGhhc2VDaGFuZ2Vk
CisgICAgICAgIHRpbWU6YWJzb2x1dGVUaW1lRm9yRXZlbnRUaW1lKGN1cnJlbnRFdmVudFRpbWUo
KSkKKyAgICAgICAgZXZlbnROdW1iZXI6KytldmVudE51bWJlcl07CisKKyAgICBOU1ZpZXcgKnRh
cmdldFZpZXcgPSBbbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3
KCkgaGl0VGVzdDpbZmlyc3RFdmVudCBsb2NhdGlvbkluV2luZG93XV07CisgICAgdGFyZ2V0Vmll
dyA9IHRhcmdldFZpZXcgPyB0YXJnZXRWaWV3IDogbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZp
ZXcoKS0+cGxhdGZvcm1WaWV3KCk7CisgICAgQVNTRVJUKHRhcmdldFZpZXcpOworCisgICAgLy8g
U2luY2UgQXBwS2l0IGRvZXMgbm90IGltcGxlbWVudCBmb3JjZXVwL2Rvd24gYXMgbW91c2UgZXZl
bnRzLCB3ZSBuZWVkIHRvIHNlbmQgdHdvIHByZXNzdXJlIGV2ZW50cyB0byBkZXRlY3QKKyAgICAv
LyB0aGUgY2hhbmdlIGluIHN0YWdlIHRoYXQgbWFya3MgdGhvc2UgbW9tZW50cy4KKyAgICBbTlNB
cHAgX3NldEN1cnJlbnRFdmVudDpmaXJzdEV2ZW50XTsKKyAgICBbdGFyZ2V0VmlldyBwcmVzc3Vy
ZUNoYW5nZVdpdGhFdmVudDpmaXJzdEV2ZW50XTsKKyAgICBbTlNBcHAgX3NldEN1cnJlbnRFdmVu
dDpzZWNvbmRFdmVudF07CisgICAgW3RhcmdldFZpZXcgcHJlc3N1cmVDaGFuZ2VXaXRoRXZlbnQ6
c2Vjb25kRXZlbnRdOworCisgICAgW05TQXBwIF9zZXRDdXJyZW50RXZlbnQ6bmlsXTsKKyAgICAv
LyBXS1ZpZXcgY2FjaGVzIHRoZSBtb3N0IHJlY2VudCBwcmVzc3VyZSBldmVudCwgc28gc2VuZCBp
dCBhIG5pbCBldmVudCB0byBjbGVhciB0aGUgY2FjaGUuCisgICAgW3RhcmdldFZpZXcgcHJlc3N1
cmVDaGFuZ2VXaXRoRXZlbnQ6bmlsXTsKKworICAgIFtmaXJzdEV2ZW50IHJlbGVhc2VdOworICAg
IFtzZWNvbmRFdmVudCByZWxlYXNlXTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3Vz
ZUZvcmNlQ2hhbmdlZChmbG9hdCBmb3JjZSkKK3sKKyAgICBFdmVudFNlbmRlclByZXNzdXJlRXZl
bnQgKmV2ZW50ID0gW1tFdmVudFNlbmRlclByZXNzdXJlRXZlbnQgYWxsb2NdIGluaXRBdExvY2F0
aW9uOk5TTWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQorICAgICAgICBnbG9i
YWxMb2NhdGlvbjooW21fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2lu
ZG93KCkgY29udmVydFJlY3RUb1NjcmVlbjpOU01ha2VSZWN0KG1fcG9zaXRpb24ueCwgbV9wb3Np
dGlvbi55LCAxLCAxKV0ub3JpZ2luKQorICAgICAgICBzdGFnZTpmb3JjZSA8IDEgPyAxIDogMgor
ICAgICAgICBwcmVzc3VyZTpmb3JjZQorICAgICAgICBwaGFzZTpOU0V2ZW50UGhhc2VDaGFuZ2Vk
CisgICAgICAgIHRpbWU6YWJzb2x1dGVUaW1lRm9yRXZlbnRUaW1lKGN1cnJlbnRFdmVudFRpbWUo
KSkKKyAgICAgICAgZXZlbnROdW1iZXI6KytldmVudE51bWJlcl07CisKKyAgICBOU1ZpZXcgKnRh
cmdldFZpZXcgPSBbbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3
KCkgaGl0VGVzdDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd11dOworICAgIHRhcmdldFZpZXcgPSB0
YXJnZXRWaWV3ID8gdGFyZ2V0VmlldyA6IG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCkt
PnBsYXRmb3JtVmlldygpOworICAgIEFTU0VSVCh0YXJnZXRWaWV3KTsKKyAgICBbTlNBcHAgX3Nl
dEN1cnJlbnRFdmVudDpldmVudF07CisgICAgW3RhcmdldFZpZXcgcHJlc3N1cmVDaGFuZ2VXaXRo
RXZlbnQ6ZXZlbnRdOworICAgIFtOU0FwcCBfc2V0Q3VycmVudEV2ZW50Om5pbF07CisKKyAgICAv
LyBXS1ZpZXcgY2FjaGVzIHRoZSBtb3N0IHJlY2VudCBwcmVzc3VyZSBldmVudCwgc28gc2VuZCBp
dCBhIG5pbCBldmVudCB0byBjbGVhciB0aGUgY2FjaGUuCisgICAgW3RhcmdldFZpZXcgcHJlc3N1
cmVDaGFuZ2VXaXRoRXZlbnQ6bmlsXTsKKworICAgIFtldmVudCByZWxlYXNlXTsKK30KKyNlbHNl
Cit2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRm9yY2VEb3duKCkKK3sKK30KKwordm9pZCBF
dmVudFNlbmRlclByb3h5Ojptb3VzZUZvcmNlVXAoKQoreworfQorCit2b2lkIEV2ZW50U2VuZGVy
UHJveHk6Om1vdXNlRm9yY2VDaGFuZ2VkKGZsb2F0KQoreworfQorI2VuZGlmIC8vIF9fTUFDX09T
X1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEwMDMKKwogdm9pZCBFdmVudFNlbmRlclByb3h5
Ojptb3VzZU1vdmVUbyhkb3VibGUgeCwgZG91YmxlIHkpCiB7CiAgICAgTlNWaWV3ICp2aWV3ID0g
bV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7CkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODI5MDMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyNyBAQAorMjAxNS0wNC0xNiAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgRm9yY2UgbW91c2UgZXZlbnRzIHNob3VsZCBnbyB0aHJvdWdoIG5v
cm1hbCBtb3VzZSBldmVudCBoYW5kbGluZyBjb2RlIHBhdGhzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM3NDkKKyAgICAgICAgLWFuZCBjb3JyZXNw
b25kaW5nLQorICAgICAgICByZGFyOi8vcHJvYmxlbS8yMDQ3Mjg5NQorCisgICAgICAgIFJldmll
d2VkIGJ5IERlYW4gSmFja3Nvbi4KKworICAgICAgICBKdXN0IGEgZmV3IG5ldyB0ZXN0cy4gTW9y
ZSB0byBjb21lLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWZvcmNlLWNoYW5nZWQtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1mb3JjZS1jaGFu
Z2VkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWZvcmNlLWRvd24t
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1mb3JjZS1k
b3duLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWZvcmNlLXVwLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbW91c2UtZm9yY2UtdXAu
aHRtbDogQWRkZWQuCisKKyAgICAgICAgUmlnaHQgbm93IHRoZSBuZXcgdGVzdHMgd2lsbCBvbmx5
IHdvcmsgb24gTWFjIDEwLjEwLjMgYW5kIGJleW9uZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwv
VGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9u
czoKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yL1Rlc3RFeHBlY3RhdGlvbnM6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjLW1hdmVyaWNrcy9UZXN0RXhwZWN0YXRpb25zOgorICAgICAg
ICAqIHBsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDE1LTA0LTE2ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVncmVzc2lvbihyMTgyNTE3KTog
V2ViU29ja2V0OjpzdXNwZW5kKCkgY2F1c2VzIGVycm9yIGV2ZW50IHRvIGJlIGZpcmVkCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1mb3JjZS1jaGFuZ2VkLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1mb3JjZS1jaGFu
Z2VkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L21vdXNlLWZvcmNlLWNoYW5nZWQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEgQEAKK1N1Y2Nlc3MhIFRoZSBtb3VzZWZvcmNlY2hhbmdlZCBldmVudCB3YXMgZGlzcGF0Y2hl
ZC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWZvcmNlLWNoYW5nZWQuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1mb3JjZS1jaGFu
Z2VkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1m
b3JjZS1jaGFuZ2VkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorPGh0bWw+
Cis8aGVhZD4KKzxzdHlsZT4KKyNmb3JjZVNlbnNvciB7CisgICAgd2lkdGg6IDIwMHB4OworICAg
IGhlaWdodDogMjAwcHg7CisgICAgYm9yZGVyOiAycHggc29saWQgYmxhY2s7Cit9Cis8L3N0eWxl
PgorPHNjcmlwdD4KKworZnVuY3Rpb24gZm9yY2VDaGFuZ2VkKCkKK3sKKyAgICB2YXIgY29uc29s
ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIik7CisgICAgY29uc29sZS5pbm5l
ckhUTUwgPSAiU3VjY2VzcyEgVGhlIG1vdXNlZm9yY2VjaGFuZ2VkIGV2ZW50IHdhcyBkaXNwYXRj
aGVkLiI7CisgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0
VGVzdCgpCit7CisgICAgdmFyIGZvcmNlU2Vuc29yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImZvcmNlU2Vuc29yIik7CisgICAgZm9yY2VTZW5zb3IuYWRkRXZlbnRMaXN0ZW5lcigid2Via2l0
bW91c2Vmb3JjZWNoYW5nZWQiLCBmb3JjZUNoYW5nZWQsIGZhbHNlKTsKKworICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAg
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5l
dmVudFNlbmRlcikgeworICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbygxMDAsIDEwMCk7
CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRm9yY2VDaGFuZ2VkKDEuNSk7CisgICAgfQorfQor
PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0ic3RhcnRUZXN0KCkiPgorCis8ZGl2
IGlkPSJmb3JjZVNlbnNvciI+PC9kaXY+Cis8cHJlIGlkPSJjb25zb2xlIj5GYWlsZWQuIFRoaXMg
dGVzdCBtdXN0IGJlIHJ1biBpbiB0aGUgdGVzdCBoYXJuZXNzLjwvcHJlPgorCis8L2JvZHk+Cis8
L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvbW91c2UtZm9yY2UtZG93bi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtZm9yY2UtZG93bi1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1mb3JjZS1kb3duLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACitTdWNjZXNzISBUaGUgbW91c2Vm
b3JjZWRvd24gZXZlbnQgd2FzIGRpc3BhdGNoZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9tb3VzZS1mb3JjZS1kb3duLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvbW91c2UtZm9yY2UtZG93bi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvbW91c2UtZm9yY2UtZG93bi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDMgQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjZm9yY2VTZW5zb3IgeworICAg
IHdpZHRoOiAyMDBweDsKKyAgICBoZWlnaHQ6IDIwMHB4OworICAgIGJvcmRlcjogMnB4IHNvbGlk
IGJsYWNrOworfQorPC9zdHlsZT4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGZvcmNlRG93bigpCit7
CisgICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpOwor
ICAgIGNvbnNvbGUuaW5uZXJIVE1MID0gIlN1Y2Nlc3MhIFRoZSBtb3VzZWZvcmNlZG93biBldmVu
dCB3YXMgZGlzcGF0Y2hlZC4iOworICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQorCitm
dW5jdGlvbiBzdGFydFRlc3QoKQoreworICAgIHZhciBmb3JjZVNlbnNvciA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJmb3JjZVNlbnNvciIpOworICAgIGZvcmNlU2Vuc29yLmFkZEV2ZW50TGlz
dGVuZXIoIndlYmtpdG1vdXNlZm9yY2Vkb3duIiwgZm9yY2VEb3duLCBmYWxzZSk7CisKKyAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7
CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIGlmICh3
aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oMTAw
LCAxMDApOworICAgICAgICBldmVudFNlbmRlci5tb3VzZUZvcmNlRG93bigpOworICAgIH0KK30K
Kzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InN0YXJ0VGVzdCgpIj4KKworPGRp
diBpZD0iZm9yY2VTZW5zb3IiPjwvZGl2PgorPHByZSBpZD0iY29uc29sZSI+RmFpbGVkLiBUaGlz
IHRlc3QgbXVzdCBiZSBydW4gaW4gdGhlIHRlc3QgaGFybmVzcy48L3ByZT4KKworPC9ib2R5Pgor
PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21vdXNlLWZvcmNlLXVwLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1mb3JjZS11cC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1mb3JjZS11cC1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAorU3VjY2VzcyEgVGhlIG1vdXNlZm9yY2V1
cCBldmVudCB3YXMgZGlzcGF0Y2hlZC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21v
dXNlLWZvcmNlLXVwLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
bW91c2UtZm9yY2UtdXAuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL21vdXNlLWZvcmNlLXVwLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAor
PGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyNmb3JjZVNlbnNvciB7CisgICAgd2lkdGg6IDIwMHB4
OworICAgIGhlaWdodDogMjAwcHg7CisgICAgYm9yZGVyOiAycHggc29saWQgYmxhY2s7Cit9Cis8
L3N0eWxlPgorPHNjcmlwdD4KKworZnVuY3Rpb24gZm9yY2VVcCgpCit7CisgICAgdmFyIGNvbnNv
bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpOworICAgIGNvbnNvbGUuaW5u
ZXJIVE1MID0gIlN1Y2Nlc3MhIFRoZSBtb3VzZWZvcmNldXAgZXZlbnQgd2FzIGRpc3BhdGNoZWQu
IjsKKyAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gc3RhcnRUZXN0
KCkKK3sKKyAgICB2YXIgZm9yY2VTZW5zb3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9y
Y2VTZW5zb3IiKTsKKyAgICBmb3JjZVNlbnNvci5hZGRFdmVudExpc3RlbmVyKCJ3ZWJraXRtb3Vz
ZWZvcmNldXAiLCBmb3JjZVVwLCBmYWxzZSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
IHsKKyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsK
KyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oMTAwLCAxMDApOworICAgICAgICBldmVu
dFNlbmRlci5tb3VzZUZvcmNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZUZvcmNl
VXAoKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJzdGFy
dFRlc3QoKSI+CisKKzxkaXYgaWQ9ImZvcmNlU2Vuc29yIj48L2Rpdj4KKzxwcmUgaWQ9ImNvbnNv
bGUiPkZhaWxlZC4gVGhpcyB0ZXN0IG11c3QgYmUgcnVuIGluIHRoZSB0ZXN0IGhhcm5lc3MuPC9w
cmU+CisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMTgy
OTAzKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtp
bmcgY29weSkKQEAgLTY4LDYgKzY4LDExIEBAIGFuaW1hdGlvbnMvdHJpZ2dlci1wYXJzaW5nLmh0
bWwgWyBTa2lwIF0KIGFuaW1hdGlvbnMvdHJpZ2dlci1jb250YWluZXItc2Nyb2xsLXNpbXBsZS5o
dG1sIFsgU2tpcCBdCiBhbmltYXRpb25zL3RyaWdnZXItY29udGFpbmVyLXNjcm9sbC1ib3VuZGFy
aWVzLmh0bWwgWyBTa2lwIF0KIAorIyBObyBzdXBwb3J0IGZvciBmb3JjZSBldmVudHMKK2Zhc3Qv
ZXZlbnRzL21vdXNlLWZvcmNlLWNoYW5nZWQuaHRtbCBbIFNraXAgXQorZmFzdC9ldmVudHMvbW91
c2UtZm9yY2UtZG93bi5odG1sIFsgU2tpcCBdCitmYXN0L2V2ZW50cy9tb3VzZS1mb3JjZS11cC5o
dG1sIFsgU2tpcCBdCisKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogIyBUZXN0cyB3aGljaCBhbHNvIGZhaWwgaW4gb3RoZXIgcGxhdGZvcm1zCiAjIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAxODI5MDMpCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtNjM4LDYg
KzYzOCwxMSBAQCBodHRwL3Rlc3RzL2NvbnRlbnRmaWx0ZXJpbmcgWyBTa2lwIF0KIAogd2Via2l0
Lm9yZy9iLzE0MzcwMyBmYXN0L2Zvcm1zL2xpc3Rib3gtdmlzaWJsZS1zaXplLmh0bWwgWyBGYWls
dXJlIF0KIAorIyBObyBzdXBwb3J0IGZvciBmb3JjZSBldmVudHMKK2Zhc3QvZXZlbnRzL21vdXNl
LWZvcmNlLWNoYW5nZWQuaHRtbCBbIFNraXAgXQorZmFzdC9ldmVudHMvbW91c2UtZm9yY2UtZG93
bi5odG1sIFsgU2tpcCBdCitmYXN0L2V2ZW50cy9tb3VzZS1mb3JjZS11cC5odG1sIFsgU2tpcCBd
CisKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjIEVuZCBvZiBFeHBlY3RlZCBm
YWlsdXJlcwogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3IvVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yL1Rlc3RFeHBlY3RhdGlvbnMJKHJl
dmlzaW9uIDE4MjkwMykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3IvVGVz
dEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCwxMSBAQCBlZGl0aW5n
L3Bhc3RlYm9hcmQvZGF0YVRyYW5zZmVyLXNldERhdGEtCiBodHRwL3Rlc3RzL2xvY2FsL2ZpbGVh
cGkvc2VuZC1kcmFnZ2VkLWZpbGUuaHRtbAogaHR0cC90ZXN0cy9sb2NhbC9maWxlYXBpL3NlbmQt
c2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sCiAKKyMgTm8gc3VwcG9ydCBmb3IgZm9yY2UgZXZlbnRz
CitmYXN0L2V2ZW50cy9tb3VzZS1mb3JjZS1jaGFuZ2VkLmh0bWwgWyBTa2lwIF0KK2Zhc3QvZXZl
bnRzL21vdXNlLWZvcmNlLWRvd24uaHRtbCBbIFNraXAgXQorZmFzdC9ldmVudHMvbW91c2UtZm9y
Y2UtdXAuaHRtbCBbIFNraXAgXQorCiAjIyMKICMgS25vd24gZmFpbHVyZXMKICMjCkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtbWF2ZXJpY2tzL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLW1hdmVyaWNrcy9UZXN0RXhwZWN0YXRp
b25zCShyZXZpc2lvbiAxODI5MDMpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtbWF2ZXJp
Y2tzL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTEsMiArMSw3IEBACiAjIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMyNTgKIGh0dHAvdGVzdHMv
Y2FjaGUvZGlzay1jYWNoZS9kaXNrLWNhY2hlLXZhbGlkYXRpb24tYmFjay1uYXZpZ2F0aW9uLXBv
bGljeS5odG1sCisKKyMgTm8gc3VwcG9ydCBmb3IgZm9yY2UgZXZlbnRzCitmYXN0L2V2ZW50cy9t
b3VzZS1mb3JjZS1jaGFuZ2VkLmh0bWwgWyBTa2lwIF0KK2Zhc3QvZXZlbnRzL21vdXNlLWZvcmNl
LWRvd24uaHRtbCBbIFNraXAgXQorZmFzdC9ldmVudHMvbW91c2UtZm9yY2UtdXAuaHRtbCBbIFNr
aXAgXQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMJKHJl
dmlzaW9uIDE4MjkwMykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRp
b25zCSh3b3JraW5nIGNvcHkpCkBAIC02MDMsNiArNjAzLDExIEBAIGFuaW1hdGlvbnMvdHJpZ2dl
ci1wYXJzaW5nLmh0bWwgWyBTa2lwIF0KIGFuaW1hdGlvbnMvdHJpZ2dlci1jb250YWluZXItc2Ny
b2xsLXNpbXBsZS5odG1sIFsgU2tpcCBdCiBhbmltYXRpb25zL3RyaWdnZXItY29udGFpbmVyLXNj
cm9sbC1ib3VuZGFyaWVzLmh0bWwgWyBTa2lwIF0KIAorIyBObyBzdXBwb3J0IGZvciBmb3JjZSBl
dmVudHMKK2Zhc3QvZXZlbnRzL21vdXNlLWZvcmNlLWNoYW5nZWQuaHRtbCBbIFNraXAgXQorZmFz
dC9ldmVudHMvbW91c2UtZm9yY2UtZG93bi5odG1sIFsgU2tpcCBdCitmYXN0L2V2ZW50cy9tb3Vz
ZS1mb3JjZS11cC5odG1sIFsgU2tpcCBdCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMj
IyMjIyMjIyAgICBFbmQgTWlzc2luZyBGdW5jdGlvbmFsaXR5IFByZXZlbnRzIFRlc3RpbmcgICAg
ICAgICAjIyMjIyMjIyMjIyMjIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK
</data>

          </attachment>
      

    </bug>

</bugzilla>