<?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>79400</bug_id>
          
          <creation_ts>2012-02-23 14:23:51 -0800</creation_ts>
          <short_desc>[chromium] Visualize accelerated compositor update/draw/damage rects.</short_desc>
          <delta_ts>2012-04-23 16:52:38 -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>Layout and Rendering</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>67499</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Shawn Singh">shawnsingh</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>backer</cc>
    
    <cc>caseq</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>563481</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-02-23 14:23:51 -0800</bug_when>
    <thetext>This patch is probably never going to land, but it might be useful for other people who may want to estimate where performance is being spent.  It has been extremely useful for getting damage tracking implemented properly.

(1) updateRects (red): rects that came from dirty regions of layers.  The updateRect is the region of a layer that was actually updated on the texture resource.  i.e. these portions of layers may have affected the screen.
(2) drawRect (blue):  rects from layers whose properties have changed, i.e. the layer&apos;s old position and new position affect the screen
(3) exposedRects (purple):  currently not visualized on this patch, let me know if you need it.  i.e. the layer&apos;s old position that affects the screen after it disappears or moves.
(4) damageRects (orange/dirty-yellow): the damage rect for each surface.  the root-level rect is the one that would be a scissor.

caveats:
  does not consider tiles / quads / culling.

Note that updateRects, drawRects, and exposed rects are unrelated.  draw rects do NOT include updateRects. -- all three types of rects contribute to the final damage.

I&apos;m not planning to maintain this except when its convenient or urgently needed.  But, if enough people want this to actually land (after addressing a few issues) then let&apos;s discuss it =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563486</commentid>
    <comment_count>1</comment_count>
      <attachid>128557</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-02-23 14:28:41 -0800</bug_when>
    <thetext>Created attachment 128557
Debug visualization, not for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563916</commentid>
    <comment_count>2</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-02-23 21:49:07 -0800</bug_when>
    <thetext>I definitely support landing a simplified version of this patch  (but lets fix the HUD while we&apos;re at it, its not hard).

I do want to ask a probing question though: should we simplify what we display a bit? This is a very developer-friendly and developer-evangelizable feature, but the updateRects are the only real item for the developer can control, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563994</commentid>
    <comment_count>3</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-02-23 23:36:24 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; I definitely support landing a simplified version of this patch  (but lets fix the HUD while we&apos;re at it, its not hard).
&gt; 
&gt; I do want to ask a probing question though: should we simplify what we display a bit? This is a very developer-friendly and developer-evangelizable feature, but the updateRects are the only real item for the developer can control, right?

For developers, draw rects would be just as important. For example if the dev wants to do something clever with CSS (poster circle is a good example).

I think the most developer-friendly thing to do would be to make all rects available, each one under a separate flag (total 4 flags: update/draw/exposed/damage)  Is that approach OK with you?

advantages of this approach:
  - easy to simplify what&apos;s visualized
  - describing all these types of rects serves a small educational value too, to developers who care enough

Are you concerned about this being burdensome to maintain?  I don&apos;t imagine that making 3-4 flags versus only 1 or 2 will be too much harder to maintain; please give me a reality-check if you disagree! =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565772</commentid>
    <comment_count>4</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-02-27 10:14:24 -0800</bug_when>
    <thetext>&gt; For developers, draw rects would be just as important. For example if the dev wants to do something clever with CSS (poster circle is a good example).

I think you&apos;re vastly overestimating the ability of developers to understand the distinction between drawing and painting. As a general rule, people don&apos;t understand the whole compositing architecture, and really shouldn&apos;t have to.

&gt; I think the most developer-friendly thing to do would be to make all rects available, each one under a separate flag (total 4 flags: update/draw/exposed/damage)  Is that approach OK with you?

No, I really think thats far too much to understand to a developer.

&gt; Are you concerned about this being burdensome to maintain? 

No.

I&apos;m concerned about there being a valid and commonplace optimization scenario that is solved by the flags. The vast majority of our developers are just writing CSS and HTML. The most common issue encountered is something that caused painting -- which then turns into a slew of uploads/etc. 

I think we should focus on solving this use case well for our developers. If we can get that solved, and we start seeing new use cases where large numbers of developers are having performance problems that stem from other type of rects, that is the correct time to add more options.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568786</commentid>
    <comment_count>5</comment_count>
      <attachid>129726</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-01 11:30:28 -0800</bug_when>
    <thetext>Created attachment 129726
updated to tip of tree, but not for review yet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602355</commentid>
    <comment_count>6</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-04-13 13:26:22 -0700</bug_when>
    <thetext>Lets meet quickly while @caseq is is here to figure out how to drive this into inspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602483</commentid>
    <comment_count>7</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-13 16:02:27 -0700</bug_when>
    <thetext>I&apos;d like to use this patch as an opportunity to refactor the fps calculation as well... so &quot;history&quot; and &quot;debug info&quot; are logged separately, and the HUD&apos;s purpose is purely to visualize information.  Let me know if that&apos;s OK:

here&apos;s what I had in mind:

class CCFPSDebugHistory
  updateFPSCounter()
  drawFPSCounter() // or something cleaner so that it can draw the HUD sparkle line

class CCRectDebugHistory
  logUpdateRects
  logDrawRects
  logExposedRects // might not be worth doing.
  logDamageRects
  drawUpdateRects
   etc...


These classes will be owned by whoever owns the HUD.  For now, they would only be used by the HUD, but this will make it cleaner for other places (like web inspector, via CCProxy) to access this information, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602488</commentid>
    <comment_count>8</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-04-13 16:06:32 -0700</bug_when>
    <thetext>(In reply to comment #7)

&gt; For now, they would only be used by the HUD, but this will make it cleaner for &gt; other places (like web inspector, via CCProxy) to access this information, too.

Inspector can&apos;t depend on the platform, so to be able to hand over the sets of rects to the inspector you would have to use common WebCore/WTF types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602497</commentid>
    <comment_count>9</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-13 16:24:22 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; 
&gt; &gt; For now, they would only be used by the HUD, but this will make it cleaner for &gt; other places (like web inspector, via CCProxy) to access this information, too.
&gt; 
&gt; Inspector can&apos;t depend on the platform, so to be able to hand over the sets of rects to the inspector you would have to use common WebCore/WTF types.

Good point;  The proposed refactor would still work;  My intention was just to clean up how the compositor partitions this logic internally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602512</commentid>
    <comment_count>10</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-04-13 16:40:34 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I&apos;d like to use this patch as an opportunity to refactor the fps calculation as well... so &quot;history&quot; and &quot;debug info&quot; are logged separately, and the HUD&apos;s purpose is purely to visualize information.  Let me know if that&apos;s OK:
&gt; 
&gt; here&apos;s what I had in mind:
&gt; 
&gt; class CCFPSDebugHistory
&gt;   updateFPSCounter()
&gt;   drawFPSCounter() // or something cleaner so that it can draw the HUD sparkle line
&gt; 
&gt; class CCRectDebugHistory
&gt;   logUpdateRects
&gt;   logDrawRects
&gt;   logExposedRects // might not be worth doing.
&gt;   logDamageRects
&gt;   drawUpdateRects
&gt;    etc...
&gt; 
&gt; 

Yes please, though maybe logRect(rect_type, rect)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602514</commentid>
    <comment_count>11</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-04-13 16:41:39 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; 
&gt; Yes please, though maybe logRect(rect_type, rect)?
And addRect(), CCDebugRects.add, and have CCLayerTreeHost.resetDebugRects(), and pass debug rects into HUD? &lt;insert the discussion you and i had back in the day about resetting the damage tracker&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606295</commentid>
    <comment_count>12</comment_count>
      <attachid>138028</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-19 19:22:01 -0700</bug_when>
    <thetext>Created attachment 138028
Patch

(1) added 3 flags to CCSettings, disabled by default. (2) will plumb --show-paint-rects to ONLY the paintRects in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606349</commentid>
    <comment_count>13</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-19 22:07:12 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=138028) [details]
&gt; Patch
&gt; 
&gt; (1) added 3 flags to CCSettings, disabled by default. (2) will plumb --show-paint-rects to ONLY the paintRects in a separate patch.

Nat,  I might have accidentally ignored your comments in Comment 10 and 11.  I&apos;m really sorry about that!

Can you please take a quick look at CCDebugRectHistory.h on this patch, and see if that satisfies you?  Everything is squished into one public function.  Feel free to scream at me if that doesn&apos;t sit well with you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606409</commentid>
    <comment_count>14</comment_count>
      <attachid>138028</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-04-20 00:00:21 -0700</bug_when>
    <thetext>Comment on attachment 138028
Patch

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

No screaming required! :) This is really slick, awesome Shawn.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDebugRectHistory.cpp:54
&gt; +    // Note: this logging must happen before layer&apos;s property change tracking is reset.

Seems like this should be a note on the .h explaining when it should be used?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDebugRectHistory.h:55
&gt; +    const Vector&lt;FloatRect&gt;&amp; paintRects() { return m_paintRectHistory; }

Might you save yourself some typing/code duplication and do...

struct DebugRect {
  RectType type; 
  FloatRect rect;
}

Where rectType is an enum?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCFpsCounter.h:1
&gt; +/*

CCFpsCounter -&gt; CCFrameRateCounter?

Quick git trick that might help this go faster:
git diff &lt;upstream&gt; &gt; /tmp/patch
&lt;edit /tmp/patch in whatever editor you like and replace CCFpsCounter everywhere&gt;
git reset --hard upstream
patch -p1 &lt;/tmp/patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606862</commentid>
    <comment_count>15</comment_count>
      <attachid>138152</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-20 13:45:39 -0700</bug_when>
    <thetext>Created attachment 138152
Addressed reviewer comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606880</commentid>
    <comment_count>16</comment_count>
      <attachid>138152</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-04-20 14:04:40 -0700</bug_when>
    <thetext>Comment on attachment 138152
Addressed reviewer comments

Awesome, Shawn. LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607291</commentid>
    <comment_count>17</comment_count>
      <attachid>138152</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-21 16:57:03 -0700</bug_when>
    <thetext>Comment on attachment 138152
Addressed reviewer comments

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

&gt; Source/WebCore/ChangeLog:23
&gt; +        In addition to adding support for visualizing this, the
&gt; +        CCHeadsUpDisplay was significantly refactored, separating the FPS
&gt; +        Counter functionality into a different class, so that the heads-up
&gt; +        display is all about visualizing annotations, and those
&gt; +        annotations (frame rate, debug rects) are logged separately.

Next time, can you separate refactoring of existing classes out into a different change so it can be reviewed more easily on its own?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDebugRectHistory.cpp:70
&gt; +        m_debugRects.append(CCDebugRect(PaintRectType, CCMathUtil::mapClippedRect(layer-&gt;screenSpaceTransform(), layer-&gt;updateRect())));

Am I reading this right in that everything gets mapped to an axis-aligned rect in screen space? Is it possible to draw solid color quads with that transform so that you can visualize the actual rects when there&apos;s some skew or perspective involved?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607297</commentid>
    <comment_count>18</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-04-21 17:38:29 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 138152 [details])
&gt; Am I reading this right in that everything gets mapped to an axis-aligned rect in screen space? Is it possible to draw solid color quads with that transform so that you can visualize the actual rects when there&apos;s some skew or perspective involved?

Oh, damn, thats a good point. Hey shawn, we should make these FloatRects in screenspace so that when we try to embed this into inspector, we don&apos;t bake the assumption of screen-aligned squares downstream from the HUD.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607370</commentid>
    <comment_count>19</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-22 12:47:22 -0700</bug_when>
    <thetext>Ack! very confused now.  I think there may be problems with what you guys are asking for.  Details below, just let me know what you guys want =)


(0) Yeah, I should have separated the refactoring and this. Sorry about that.


(1) FloatRects vs FloatQuads:  I agree it would be nice to visualize quads instead of axis-aligned rects.  However, transforming FloatQuads with a perspective transform will require outputting a general polygon (because if it is clipped by w&lt;0, it could then have 5-8 edges).  If everyone is willing to deal with the complexity associated with that, I can do it... but it will no longer be a basic WebCore data type as Andrey was requesting.

// In general this can be a clipped quad with up to 8 vertices.
// The vertices are stored in screen-space.
struct CCDebugQuad {
  FloatPoint vertices[8];
  int numVertices;
}


(2) Screen-Space vs ???:  Nat, I&apos;m already converting everything to screen space when storing the information in the DebugRectHistory.  is that what you want?  or are you asking me to remove that so that we are &quot;not baking the assumption upstream in the CCDebugRectHistory before giving it to the HUD/inspector&quot;?

Doing this would essentially punt the clipped w&lt;0 complexity to outside code, and we probably should not do that.  It would potentially create a dependency on CCMathUtil which is currently not part of WebCore.

// The rect is stored in local space, along with the transform that would convert it to screen-space.
// WARNING: when you apply the screen space transform, you will need to use CCMathUtil functions to
//          properly compute clipped transformed quads, or else you may get incorrect results for
//          some perspective transforms.
struct CCDebugQuad {
  FloatQuad (or FloatRect) localSpaceBounds;
  TransformationMatrix screenSpaceTransform;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607705</commentid>
    <comment_count>20</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-23 08:39:19 -0700</bug_when>
    <thetext>I was suggesting that you let the GPU handle the transformation and clipping.  

What are the inspector dependencies here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607711</commentid>
    <comment_count>21</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-23 08:44:01 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; I was suggesting that you let the GPU handle the transformation and clipping.  
&gt; 
&gt; What are the inspector dependencies here?

Oh, I see now.  Inspector wants to draw these rects itself and so you can&apos;t rely on RLC infrastructure. Sorry for the noise.

Maybe in the future if inspector gets smart enough to draw transformed rects, we can modify this code to pass transforms and rects on through.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607750</commentid>
    <comment_count>22</comment_count>
      <attachid>138152</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-23 09:22:30 -0700</bug_when>
    <thetext>Comment on attachment 138152
Addressed reviewer comments

This seems reasonable as a first pass.  This will overestimate 3d transformed layers, but is still useful for everything else.  R=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607788</commentid>
    <comment_count>23</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-04-23 10:18:09 -0700</bug_when>
    <thetext>Screenspace was the intent.

I dont think you need to store an 8gon. You can store a float quad and a clip quad if needed, both in screenspace. The overlay can simply set the clip before drawing the poly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607812</commentid>
    <comment_count>24</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-23 10:33:48 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Screenspace was the intent.

OK thanks.  I&apos;ll land this after re-basing code.


&gt; 
&gt; I dont think you need to store an 8gon. You can store a float quad and a clip quad if needed, both in screenspace. The overlay can simply set the clip before drawing the poly.

FYI this particular issue of clipping here is not usual &quot;clipping&quot; in 2D or 3D - it needs to happen in homogeneous coordinates on w &lt; 0 ... we simply can&apos;t compute a transformed quad in screenspace until we clip in homogeneous space before divide-by-w, or else it may be invalid. (see https://bugs.webkit.org/show_bug.cgi?id=80806 for more details, if you&apos;re interested)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607841</commentid>
    <comment_count>25</comment_count>
      <attachid>138385</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-23 10:56:53 -0700</bug_when>
    <thetext>Created attachment 138385
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608191</commentid>
    <comment_count>26</comment_count>
      <attachid>138385</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-23 16:52:21 -0700</bug_when>
    <thetext>Comment on attachment 138385
Patch for landing

Clearing flags on attachment: 138385

Committed r114963: &lt;http://trac.webkit.org/changeset/114963&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608192</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-23 16:52:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128557</attachid>
            <date>2012-02-23 14:28:41 -0800</date>
            <delta_ts>2012-03-01 11:30:26 -0800</delta_ts>
            <desc>Debug visualization, not for review</desc>
            <filename>bug-79400-20120223142840.patch</filename>
            <type>text/plain</type>
            <size>13452</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NjM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcAppbmRleCAxMjU5ZDFiNWM0YzU0MjU2MjVmYzYzMDJlMjdlMjcxNDM5OTA3YWVkLi4z
OGM3ZTlkODVhY2QxNzExZWM4MGVhMzZlZTY2MTU2NDNiOGNhNjg4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTE0NzQsNiArMTQ3NCwyMyBAQCBib29sIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6aXNDb250ZXh0TG9zdCgpCiAgICAgcmV0dXJuIChtX2NvbnRleHQu
Z2V0KCktPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUik7CiB9CiAKKworCit2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Z2l2ZURlYnVnUmVjdEluZm9Ub0hVRChDQ0xheWVySW1wbCogcm9vdExheWVyLCBj
b25zdCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KQoreworICAgIC8vIE5vdGUsIHRoaXMgbG9nZ2luZyBtdXN0IGhhcHBlbiBiZWZvcmUgbGF5ZXIn
cyBwcm9wZXJ0eSBjaGFuZ2UgdHJhY2tpbmcgaXMgcmVzZXQuCisgICAgCisgICAgaWYgKHNldHRp
bmdzKCkuc2hvd1VwZGF0ZVJlY3RzKQorICAgICAgICBtX2hlYWRzVXBEaXNwbGF5LT5sb2dVcGRh
dGVSZWN0c1RvSFVEKHJvb3RMYXllcik7CisgICAgICAgIAorICAgIGlmIChzZXR0aW5ncygpLnNo
b3dEcmF3UmVjdHMpCisgICAgICAgIG1faGVhZHNVcERpc3BsYXktPmxvZ0RyYXdSZWN0c1RvSFVE
KHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworCisgICAgaWYgKHNldHRpbmdzKCkuc2hvd0RhbWFn
ZVJlY3RzKQorICAgICAgICBtX2hlYWRzVXBEaXNwbGF5LT5sb2dEYW1hZ2VSZWN0c1RvSFVEKHJl
bmRlclN1cmZhY2VMYXllckxpc3QpOworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgKaW5kZXggOGM0YjZlOWZlOTJhNmZmOGFhZTg1OTVkNDM5MDNiOTg5MDVi
ZTQ5My4uMzQ1MTI4ODZiNzI1ODZkMGRjZDUxMzQwOGE1YjQyMTFjMWI2ZGVkOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTE1NCw2ICsxNTQsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0
IG9wYWNpdHksIGNvbnN0IEZsb2F0UXVhZCYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBtYXRyaXhMb2NhdGlvbiwgaW50IGFscGhhTG9jYXRpb24sIGludCBxdWFkTG9jYXRpb24pOwog
CisgICAgdm9pZCBnaXZlRGVidWdSZWN0SW5mb1RvSFVEKENDTGF5ZXJJbXBsKiByb290TGF5ZXIs
IGNvbnN0IFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOworCiBwcml2YXRlOgogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhv
c3RJbXBsKiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOwogICAgIGJvb2wgaW5pdGlh
bGl6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAppbmRleCAzZGRjMTIzYzBm
NTk4M2JkMjQ1ODg5NTE0MjdlNDQ5MTE5MDM4YWVhLi5lMTA3YmYzMjdkY2ZkYzI1NmQ1OTlkOGZi
ZDQ3MDhhOWI0ZmY5ZjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcApAQCAt
MjcsNiArMjcsOSBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRl
ICJDQ0hlYWRzVXBEaXNwbGF5LmgiCiAKKyNpbmNsdWRlICJDQ0RhbWFnZVRyYWNrZXIuaCIKKyNp
bmNsdWRlICJDQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgIkNDUmVuZGVyU3VyZmFjZS5oIgogI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1
ZGUgIkZvbnRDYWNoZS5oIgpAQCAtMTA0LDcgKzEwNyw3IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxh
eTo6ZHJhdygpCiAKICAgICAvLyBVc2UgYSBmdWxsc2NyZWVuIHRleHR1cmUgb25seSBpZiB3ZSBu
ZWVkIHRvLi4uCiAgICAgSW50U2l6ZSBodWRTaXplOwotICAgIGlmIChzZXR0aW5ncygpLnNob3dQ
bGF0Zm9ybUxheWVyVHJlZSkgeworICAgIGlmIChzZXR0aW5ncygpLnNob3dQbGF0Zm9ybUxheWVy
VHJlZSB8fCBzZXR0aW5ncygpLnNob3dVcGRhdGVSZWN0cyB8fCBzZXR0aW5ncygpLnNob3dEcmF3
UmVjdHMgfHwgc2V0dGluZ3MoKS5zaG93RGFtYWdlUmVjdHMpIHsKICAgICAgICAgaHVkU2l6ZS5z
ZXRXaWR0aChtaW4oMjA0OCwgbV9sYXllclJlbmRlcmVyLT52aWV3cG9ydFdpZHRoKCkpKTsKICAg
ICAgICAgaHVkU2l6ZS5zZXRIZWlnaHQobWluKDIwNDgsIG1fbGF5ZXJSZW5kZXJlci0+dmlld3Bv
cnRIZWlnaHQoKSkpOwogICAgIH0gZWxzZSB7CkBAIC0xODQsNiArMTg3LDggQEAgdm9pZCBDQ0hl
YWRzVXBEaXNwbGF5OjpkcmF3SHVkQ29udGVudHMoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0
IEludFNpemUmIGh1ZFMKIAogICAgIGlmIChzZXR0aW5ncygpLnNob3dQbGF0Zm9ybUxheWVyVHJl
ZSkKICAgICAgICAgZHJhd1BsYXRmb3JtTGF5ZXJUcmVlKGN0eCwgcGxhdGZvcm1MYXllclRyZWVU
b3ApOworCisgICAgZHJhd0NvbXBvc2l0b3JSZWN0cyhjdHgpOwogfQogCiB2b2lkIENDSGVhZHNV
cERpc3BsYXk6OmRyYXdGUFNDb3VudGVyKEdyYXBoaWNzQ29udGV4dCogY3R4LCBpbnQgdG9wLCBp
bnQgaGVpZ2h0KQpAQCAtMjYwLDYgKzI2NSwxMTcgQEAgY29uc3QgQ0NTZXR0aW5ncyYgQ0NIZWFk
c1VwRGlzcGxheTo6c2V0dGluZ3MoKSBjb25zdAogICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXIt
PnNldHRpbmdzKCk7CiB9CiAKK3ZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0NvbXBvc2l0b3JS
ZWN0cyhHcmFwaGljc0NvbnRleHQqIGN0eCkKK3sKKyAgICAvLyB1cGRhdGUgcmVjdHMgaW4gcmVk
CisgICAgY3R4LT5zZXRTdHJva2VDb2xvcihDb2xvcigyNTUsIDAsIDAsIDI1NSksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91cGRhdGVSZWN0c1Ro
aXNVcGRhdGUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY3R4LT5maWxsUmVjdChtX3VwZGF0ZVJl
Y3RzVGhpc1VwZGF0ZVtpXSwgQ29sb3IoMjU1LCAwLCAwLCAzMCksIENvbG9yU3BhY2VEZXZpY2VS
R0IpOworICAgICAgICBjdHgtPnN0cm9rZVJlY3QobV91cGRhdGVSZWN0c1RoaXNVcGRhdGVbaV0s
IDIuMCk7CisgICAgfQorCisgICAgLy8gZHJhdyByZWN0cyBpbiBibHVlCisgICAgY3R4LT5zZXRT
dHJva2VDb2xvcihDb2xvcigwLCAwLCAyNTUsIDI1NSksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kcmF3UmVjdHNUaGlzVXBkYXRlLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGN0eC0+ZmlsbFJlY3QobV9kcmF3UmVjdHNUaGlzVXBkYXRlW2ldLCBD
b2xvcigwLCAwLCAyNTUsIDMwKSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGN0eC0+
c3Ryb2tlUmVjdChtX2RyYXdSZWN0c1RoaXNVcGRhdGVbaV0sIDIuMCk7CisgICAgfQorCisgICAg
Ly8gZXhwb3NlZCByZWN0cyBpbiBwdXJwbGUKKyAgICBjdHgtPnNldFN0cm9rZUNvbG9yKENvbG9y
KDE1MCwgMCwgMjIwLCAyNTUpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fZXhwb3NlZFJlY3RzVGhpc1VwZGF0ZS5zaXplKCk7ICsraSkgeworICAg
ICAgICBjdHgtPmZpbGxSZWN0KG1fZXhwb3NlZFJlY3RzVGhpc1VwZGF0ZVtpXSwgQ29sb3IoMTUw
LCAwLCAyMjAsIDMwKSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGN0eC0+c3Ryb2tl
UmVjdChtX2V4cG9zZWRSZWN0c1RoaXNVcGRhdGVbaV0sIDIuMCk7CisgICAgfQorCisgICAgLy8g
ZGFtYWdlIHJlY3RzIGluIHllbGxvdworICAgIGN0eC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMjAw
LCAxMDAsIDAsIDI1NSksIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9kYW1hZ2VSZWN0c1RoaXNVcGRhdGUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
Y3R4LT5maWxsUmVjdChtX2RhbWFnZVJlY3RzVGhpc1VwZGF0ZVtpXSwgQ29sb3IoMjAwLCAxMDAs
IDAsIDMwKSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGN0eC0+c3Ryb2tlUmVjdCht
X2RhbWFnZVJlY3RzVGhpc1VwZGF0ZVtpXSwgMi4wKTsKKyAgICB9CisKKyAgICBtX3VwZGF0ZVJl
Y3RzVGhpc1VwZGF0ZS5jbGVhcigpOworICAgIG1fZHJhd1JlY3RzVGhpc1VwZGF0ZS5jbGVhcigp
OworICAgIG1fZXhwb3NlZFJlY3RzVGhpc1VwZGF0ZS5jbGVhcigpOworICAgIG1fZGFtYWdlUmVj
dHNUaGlzVXBkYXRlLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6YWRkVXBk
YXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHNjcmVlblNwYWNlVXBkYXRlUmVjdCkKK3sKKyAgICBt
X3VwZGF0ZVJlY3RzVGhpc1VwZGF0ZS5hcHBlbmQoc2NyZWVuU3BhY2VVcGRhdGVSZWN0KTsKK30K
Kwordm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjphZGREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHNj
cmVlblNwYWNlRHJhd1JlY3QpCit7CisgICAgbV9kcmF3UmVjdHNUaGlzVXBkYXRlLmFwcGVuZChz
Y3JlZW5TcGFjZURyYXdSZWN0KTsKK30KKwordm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjphZGRFeHBv
c2VkUmVjdChjb25zdCBGbG9hdFJlY3QmIHNjcmVlblNwYWNlRXhwb3NlZFJlY3QpCit7CisgICAg
bV9leHBvc2VkUmVjdHNUaGlzVXBkYXRlLmFwcGVuZChzY3JlZW5TcGFjZUV4cG9zZWRSZWN0KTsK
K30KKwordm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjphZGREYW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgc2NyZWVuU3BhY2VEYW1hZ2VSZWN0KQoreworICAgIG1fZGFtYWdlUmVjdHNUaGlzVXBkYXRl
LmFwcGVuZChzY3JlZW5TcGFjZURhbWFnZVJlY3QpOworfQorCit2b2lkIENDSGVhZHNVcERpc3Bs
YXk6OmxvZ1VwZGF0ZVJlY3RzVG9IVUQoQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIC8vIFdl
IHdvdWxkIGxpa2UgdG8gdmlzdWFsaXplIHdoZXJlIGFueSBsYXllcidzIHVkcGF0ZSByZWN0IGhh
cyBjaGFuZ2VkLAorICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIGxheWVyIGlzIHNr
aXBwZWQgZm9yIGFjdHVhbCBkcmF3aW5nIG9yIG5vdC4KKyAgICAvLyBUaGVyZWZvcmUgd2UgdHJh
dmVyc2UgcmVjdXJzaXZlbHkgb3ZlciBhbGwgbGF5ZXJzLCBub3QganVzdCB0aGUKKyAgICAvLyBy
ZW5kZXIgc3VyZmFjZSBsaXN0LgorCisgICAgaWYgKCFsYXllci0+dXBkYXRlUmVjdCgpLmlzRW1w
dHkoKSAmJiBsYXllci0+ZHJhd3NDb250ZW50KCkpCisgICAgICAgIGFkZFVwZGF0ZVJlY3QobGF5
ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubWFwUmVjdChsYXllci0+dXBkYXRlUmVjdCgpKSk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgp
OyArK2kpCisgICAgICAgIGxvZ1VwZGF0ZVJlY3RzVG9IVUQobGF5ZXItPmNoaWxkcmVuKClbaV0u
Z2V0KCkpOworfQorCit2b2lkIENDSGVhZHNVcERpc3BsYXk6OmxvZ0RyYXdSZWN0c1RvSFVEKGNv
bnN0IFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
Cit7CisgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5z
aXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CisgICAgICAg
IENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
W3N1cmZhY2VJbmRleF0uZ2V0KCk7CisgICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3Vy
ZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBBU1NF
UlQocmVuZGVyU3VyZmFjZSk7CisKKyAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDQ0xheWVy
SW1wbD4gPiYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6
ZSgpOyArK2xheWVySW5kZXgpIHsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBsYXllciA9IGxh
eWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKKworICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5k
ZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSBsYXllci0+dGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAv
LyBOb3RlLCB0aGUgd2F5IHRoaXMgaXMgZGVmaW5lZCwgdXBkYXRlIHJlY3RzICh3aGljaCBhbHNv
IHJlcXVpcmUgb2ZmaWNpYWxseSBiZWluZyBkcmF3bikgYXJlIG5vdCBsb2dnZWQgYXMgImRyYXcg
cmVjdHMiLgorICAgICAgICAgICAgLy8gc28gaWYgdGhlIHB1cnBvc2Ugb2YgdmlzdWFsaXppbmcg
dGhpcyBpcyB0byBzZWUgd2hhdCBzdHVmZiBpcyBkcmF3biwgd2UgaGF2ZSB0byBhbHNvIGxvb2sg
YXQgdGhlIHVwZGF0ZSByZWN0cy4KKyAgICAgICAgICAgIGlmIChsYXllci0+bGF5ZXJQcm9wZXJ0
eUNoYW5nZWQoKSkKKyAgICAgICAgICAgICAgICBhZGREcmF3UmVjdChsYXllci0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKS5tYXBSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxheWVy
LT5ib3VuZHMoKSkpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDQ0hlYWRzVXBEaXNw
bGF5Ojpsb2dEYW1hZ2VSZWN0c1RvSFVEKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+
ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit7CisgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4
ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7
IC0tc3VyZmFjZUluZGV4KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5
ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7CisgICAgICAg
IENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVu
ZGVyU3VyZmFjZSgpOworICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7CisKKyAgICAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVuU3BhY2VTdXJmYWNlVHJhbnNmb3JtID0gcmVuZGVy
U3VyZmFjZS0+b3JpZ2luVHJhbnNmb3JtKCk7CisgICAgICAgIENDTGF5ZXJJbXBsKiBjdXJyZW50
TGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnBhcmVudCgpOworICAgICAgICB3aGlsZSAoY3Vy
cmVudExheWVyKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudExheWVyLT5yZW5kZXJTdXJmYWNl
KCkpCisgICAgICAgICAgICAgICAgc2NyZWVuU3BhY2VTdXJmYWNlVHJhbnNmb3JtLm11bHRpcGx5
KGN1cnJlbnRMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7CisgICAg
ICAgICAgICBjdXJyZW50TGF5ZXIgPSBjdXJyZW50TGF5ZXItPnBhcmVudCgpOworICAgICAgICB9
CisgICAgICAgIGFkZERhbWFnZVJlY3Qoc2NyZWVuU3BhY2VTdXJmYWNlVHJhbnNmb3JtLm1hcFJl
Y3QocmVuZGVyU3VyZmFjZS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpKSk7
CisgICAgfQorfQorCisKIH0KIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSGVhZHNVcERpc3BsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaAppbmRleCAwNWNiMjBkNTI2OTc5ODU5MjY4
ZTQxNzc0ZmNhYTRhNGNlMWJhMmE0Li4yMmQ3YzhiYjI3YmZhNGI3NjBkYTFkOThkYzU3NTA3MTNl
MDQwZjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCkBAIC0zNCw2ICszNCw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBDQ1NldHRpbmdzOworY2xhc3MgQ0NMYXll
ckltcGw7CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsK
IGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKQEAgLTU4LDYgKzU5LDE0IEBAIHB1YmxpYzoK
ICAgICBib29sIGVuYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIGRyYXcoKTsKIAorICAgIHZvaWQg
YWRkVXBkYXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHNjcmVlblNwYWNlVXBkYXRlUmVjdCk7Cisg
ICAgdm9pZCBhZGREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHNjcmVlblNwYWNlRHJhd1JlY3Qp
OworICAgIHZvaWQgYWRkRXhwb3NlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiBzY3JlZW5TcGFjZUV4
cG9zZWRSZWN0KTsKKyAgICB2b2lkIGFkZERhbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzY3Jl
ZW5TcGFjZURhbWFnZVJlY3QpOworICAgIHZvaWQgbG9nVXBkYXRlUmVjdHNUb0hVRChDQ0xheWVy
SW1wbCopOworICAgIHZvaWQgbG9nRHJhd1JlY3RzVG9IVUQoY29uc3QgVmVjdG9yPFJlZlB0cjxD
Q0xheWVySW1wbD4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgdm9pZCBsb2dEYW1h
Z2VSZWN0c1RvSFVEKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOworCiAgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFk
ZXJQb3NUZXgsIEZyYWdtZW50U2hhZGVyUkdCQVRleFN3aXp6bGVBbHBoYT4gUHJvZ3JhbTsKIAog
cHJpdmF0ZToKQEAgLTY1LDYgKzc0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRyYXdIdWRDb250
ZW50cyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRTaXplJiBodWRTaXplKTsKICAgICB2b2lk
IGRyYXdGUFNDb3VudGVyKEdyYXBoaWNzQ29udGV4dCosIGludCB0b3AsIGludCBoZWlnaHQpOwog
ICAgIHZvaWQgZHJhd1BsYXRmb3JtTGF5ZXJUcmVlKEdyYXBoaWNzQ29udGV4dCosIGludCB0b3Ap
OworICAgIHZvaWQgZHJhd0NvbXBvc2l0b3JSZWN0cyhHcmFwaGljc0NvbnRleHQqIGN0eCk7CiAg
ICAgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdDsKIAogICAgIGludCBtX2N1cnJl
bnRGcmFtZU51bWJlcjsKQEAgLTgyLDYgKzkyLDExIEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEZv
bnQ+IG1fbWVkaXVtRm9udDsKIAogICAgIGJvb2wgbV91c2VNYXBTdWJGb3JVcGxvYWRzOworCisg
ICAgVmVjdG9yPEZsb2F0UmVjdD4gbV91cGRhdGVSZWN0c1RoaXNVcGRhdGU7CisgICAgVmVjdG9y
PEZsb2F0UmVjdD4gbV9kcmF3UmVjdHNUaGlzVXBkYXRlOworICAgIFZlY3RvcjxGbG9hdFJlY3Q+
IG1fZXhwb3NlZFJlY3RzVGhpc1VwZGF0ZTsKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiBtX2RhbWFn
ZVJlY3RzVGhpc1VwZGF0ZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5k
ZXggNGVkOGRhOTYzNDg2OTIwN2ZkYWRlOWY4OTFhOWQzOTIzNDNkNTg4NS4uYWEwNzIwZjdjYTRj
N2NhZjI3N2E1NjAwOTQ0YWVmYzNjNzQzNGY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmgKQEAgLTczLDYgKzczLDEyIEBAIHN0cnVjdCBDQ1NldHRpbmdzIHsKICAgICAgICAgICAgICwg
Y29tcG9zaXRlT2Zmc2NyZWVuKGZhbHNlKQogICAgICAgICAgICAgLCBzaG93RlBTQ291bnRlcihm
YWxzZSkKICAgICAgICAgICAgICwgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGZhbHNlKQorICAgICAg
ICAgICAgLy8gRE9OJ1QgQ09NTUlUIFRISVMsIEpVU1QgRk9SIERFQlVHIFZJU1VBTElaQVRJT04u
CisgICAgICAgICAgICAvLyAgLSAiYXBwcm94aW1hdGUiIGJlY2F1c2UgaXQgb25seSB2aXN1YWxp
emVzIGxheWVycywgbm90IHRpbGVzL3F1YWRzLiBBbmQgaXQgZG9lcyBub3QgdGFrZSBpbnRvIGFj
Y291bnQgY3VsbGluZy4KKyAgICAgICAgICAgIC8vICAtIHVwZGF0ZVJlY3RzIGFuZCBkcmF3UmVj
dHMgYXJlIGRpc2pvaW50LiBCb3RoIHJlY3RzIGNvbWJpbmVkIHdpbGwgcmVmbGVjdCB3aGF0IG5l
ZWRzIHRvIGJlIHJlZHJhd24gdG90YWxseS4KKyAgICAgICAgICAgICwgc2hvd1VwZGF0ZVJlY3Rz
KHRydWUpIC8vIFNldCB0byB0cnVlIGZvciB2aXN1YWxpemluZyB1cGRhdGUgcmVjdHMgKGFwcHJv
eGltYXRlIHdoYXQgd2FzIHBhaW50ZWQgYW5kIGxvYWRlZCB0byB0ZXh0dXJlLCB3aGljaCBuZWVk
cyB0byBiZSByZWRyYXduKQorICAgICAgICAgICAgLCBzaG93RHJhd1JlY3RzKHRydWUpIC8vIFNl
dCB0byB0cnVlIGZvciB2aXN1YWxpemluZyBkcmF3IHJlY3RzICh3aGF0IGxheWVycyBoYWQgcHJv
cGVydHkgY2hhbmdlcyB0aGF0IG5lZWQgYSBmdWxsIHJlZHJhdykKKyAgICAgICAgICAgICwgc2hv
d0RhbWFnZVJlY3RzKHRydWUpIC8vIFNldCB0byB0cnVlIGZvciB2aXN1YWxpemluZyBkYW1hZ2Ug
cmVjdHMsIG9uZSBmb3IgZWFjaCByZW5kZXIgc3VyZmFjZS4KICAgICAgICAgICAgICwgcmVmcmVz
aFJhdGUoMCkKICAgICAgICAgICAgICwgcGVyVGlsZVBhaW50aW5nKGZhbHNlKQogICAgICAgICAg
ICAgLCBwYXJ0aWFsU3dhcEVuYWJsZWQoZmFsc2UpCkBAIC04Myw2ICs4OSw5IEBAIHN0cnVjdCBD
Q1NldHRpbmdzIHsKICAgICBib29sIGNvbXBvc2l0ZU9mZnNjcmVlbjsKICAgICBib29sIHNob3dG
UFNDb3VudGVyOwogICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlOworICAgIGJvb2wgc2hv
d1VwZGF0ZVJlY3RzOworICAgIGJvb2wgc2hvd0RyYXdSZWN0czsKKyAgICBib29sIHNob3dEYW1h
Z2VSZWN0czsKICAgICBkb3VibGUgcmVmcmVzaFJhdGU7CiAgICAgYm9vbCBwZXJUaWxlUGFpbnRp
bmc7CiAgICAgYm9vbCBwYXJ0aWFsU3dhcEVuYWJsZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwCmluZGV4IGNlMzE5NTFhNzMxOWUxNWM2YzM2NWQ0ZjA0NWM3ZmNlZjA0
NjZmMDkuLjBjZDljMGU4MDkzMDI1MWE4OGI0ODgwZDg2NDIzY2VlZWI1MjAxZDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0xOTQsNyArMTk0LDcgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNz
TGlzdCYgcGFzc2VzLCBDQ0xheWUKICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyKCksIHJvb3RMYXllcigp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IHJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLCAmbV9sYXllclNvcnRl
ciwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKICAgICB9CiAK
LSAgICBpZiAobGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXApCisg
ICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwIHx8IG1f
c2V0dGluZ3Muc2hvd0RhbWFnZVJlY3RzKQogICAgICAgICB0cmFja0RhbWFnZUZvckFsbFN1cmZh
Y2VzKHJvb3RMYXllcigpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBtX3Jvb3REYW1h
Z2VSZWN0ID0gcm9vdExheWVyKCktPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5j
dXJyZW50RGFtYWdlUmVjdCgpOwogCkBAIC0zMDAsNiArMzAwLDggQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKCkKICAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYo
KSAmJiAhaXQtPnZpc2libGVMYXllclJlY3QoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBpdC0+
ZGlkRHJhdygpOwogICAgIH0KKworICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2l2ZURlYnVnUmVjdElu
Zm9Ub0hVRChyb290TGF5ZXIoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgbV9sYXll
clJlbmRlcmVyLT5maW5pc2hEcmF3aW5nRnJhbWUoKTsKIAogICAgICsrbV9mcmFtZU51bWJlcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129726</attachid>
            <date>2012-03-01 11:30:28 -0800</date>
            <delta_ts>2012-04-19 19:21:57 -0700</delta_ts>
            <desc>updated to tip of tree, but not for review yet</desc>
            <filename>bug-79400-20120301113027.patch</filename>
            <type>text/plain</type>
            <size>13245</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcAppbmRleCA3YTI2ZGIyOGEwY2U3MzQzZDVlNDQ1OWU4YzdmNzFkYzc1OTg3N2Y0Li4y
NWY4YWFjOGJmMjJkM2Y1ZDM0NTlhZmFjMzIxOWJiNjVkNDYyYjgyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTE1NjEsNiArMTU2MSwyMCBAQCBib29sIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6aXNDb250ZXh0TG9zdCgpCiAgICAgcmV0dXJuIChtX2NvbnRleHQu
Z2V0KCktPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUik7CiB9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpnaXZlRGVidWdSZWN0SW5mb1RvSFVEKENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0
IFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQoreworICAgIC8v
IE5vdGU6IHRoaXMgbG9nZ2luZyBtdXN0IGhhcHBlbiBiZWZvcmUgbGF5ZXIncyBwcm9wZXJ0eSBj
aGFuZ2UgdHJhY2tpbmcgaXMgcmVzZXQuCisKKyAgICBpZiAoc2V0dGluZ3MoKS5zaG93VXBkYXRl
UmVjdHMpCisgICAgICAgIG1faGVhZHNVcERpc3BsYXktPmxvZ1VwZGF0ZVJlY3RzVG9IVUQocm9v
dExheWVyKTsKKworICAgIGlmIChzZXR0aW5ncygpLnNob3dEcmF3UmVjdHMpCisgICAgICAgIG1f
aGVhZHNVcERpc3BsYXktPmxvZ0RyYXdSZWN0c1RvSFVEKHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OworCisgICAgaWYgKHNldHRpbmdzKCkuc2hvd0RhbWFnZVJlY3RzKQorICAgICAgICBtX2hlYWRz
VXBEaXNwbGF5LT5sb2dEYW1hZ2VSZWN0c1RvSFVEKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IGVlOTg5
NWFlMWQ0Yzk0Y2RhNjMxMGRjN2IzZmIwNDNkMjk1Y2I3ZGMuLjhjNzg3YWUzZTQ2NGIyODg5YWJj
NDJhMDYxNmEzYWY4MTFhYzFhNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
CkBAIC0xNTUsNiArMTU1LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFF1YWQm
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF0cml4TG9jYXRpb24sIGludCBhbHBo
YUxvY2F0aW9uLCBpbnQgcXVhZExvY2F0aW9uKTsKIAorICAgIHZvaWQgZ2l2ZURlYnVnUmVjdElu
Zm9Ub0hVRChDQ0xheWVySW1wbCogcm9vdExheWVyLCBjb25zdCBWZWN0b3I8Q0NMYXllckltcGwq
PiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisKIHByaXZhdGU6CiAgICAgTGF5ZXJSZW5kZXJl
ckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPik7CiAgICAgYm9vbCBpbml0aWFsaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3Bs
YXkuY3BwCmluZGV4IDNkZGMxMjNjMGY1OTgzYmQyNDU4ODk1MTQyN2U0NDkxMTkwMzhhZWEuLjg4
NGQwMDFhZjc5N2I4YjBmOGVmYmZkYjlkODIyZGZkOGYyYWJiYmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuY3BwCkBAIC0yNyw2ICsyNyw5IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkNDSGVhZHNVcERpc3BsYXkuaCIKIAorI2luY2x1ZGUg
IkNDRGFtYWdlVHJhY2tlci5oIgorI2luY2x1ZGUgIkNDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAi
Q0NSZW5kZXJTdXJmYWNlLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCkBAIC0xMDQsNyArMTA3LDcg
QEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KCkKIAogICAgIC8vIFVzZSBhIGZ1bGxzY3Jl
ZW4gdGV4dHVyZSBvbmx5IGlmIHdlIG5lZWQgdG8uLi4KICAgICBJbnRTaXplIGh1ZFNpemU7Ci0g
ICAgaWYgKHNldHRpbmdzKCkuc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKSB7CisgICAgaWYgKHNldHRp
bmdzKCkuc2hvd1BsYXRmb3JtTGF5ZXJUcmVlIHx8IHNldHRpbmdzKCkuc2hvd1VwZGF0ZVJlY3Rz
IHx8IHNldHRpbmdzKCkuc2hvd0RyYXdSZWN0cyB8fCBzZXR0aW5ncygpLnNob3dEYW1hZ2VSZWN0
cykgewogICAgICAgICBodWRTaXplLnNldFdpZHRoKG1pbigyMDQ4LCBtX2xheWVyUmVuZGVyZXIt
PnZpZXdwb3J0V2lkdGgoKSkpOwogICAgICAgICBodWRTaXplLnNldEhlaWdodChtaW4oMjA0OCwg
bV9sYXllclJlbmRlcmVyLT52aWV3cG9ydEhlaWdodCgpKSk7CiAgICAgfSBlbHNlIHsKQEAgLTE4
NCw2ICsxODcsOCBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6OmRyYXdIdWRDb250ZW50cyhHcmFw
aGljc0NvbnRleHQqIGN0eCwgY29uc3QgSW50U2l6ZSYgaHVkUwogCiAgICAgaWYgKHNldHRpbmdz
KCkuc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKQogICAgICAgICBkcmF3UGxhdGZvcm1MYXllclRyZWUo
Y3R4LCBwbGF0Zm9ybUxheWVyVHJlZVRvcCk7CisKKyAgICBkcmF3Q29tcG9zaXRvclJlY3RzKGN0
eCk7CiB9CiAKIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0ZQU0NvdW50ZXIoR3JhcGhpY3ND
b250ZXh0KiBjdHgsIGludCB0b3AsIGludCBoZWlnaHQpCkBAIC0yNjAsNiArMjY1LDExMiBAQCBj
b25zdCBDQ1NldHRpbmdzJiBDQ0hlYWRzVXBEaXNwbGF5OjpzZXR0aW5ncygpIGNvbnN0CiAgICAg
cmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+c2V0dGluZ3MoKTsKIH0KIAordm9pZCBDQ0hlYWRzVXBE
aXNwbGF5OjpkcmF3Q29tcG9zaXRvclJlY3RzKEdyYXBoaWNzQ29udGV4dCogY3R4KQoreworICAg
IC8vIHVwZGF0ZSByZWN0cyBpbiByZWQKKyAgICBjdHgtPnNldFN0cm9rZUNvbG9yKENvbG9yKDI1
NSwgMCwgMCwgMjU1KSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3VwZGF0ZVJlY3RzVGhpc1VwZGF0ZS5zaXplKCk7ICsraSkgeworICAgICAgICBj
dHgtPmZpbGxSZWN0KG1fdXBkYXRlUmVjdHNUaGlzVXBkYXRlW2ldLCBDb2xvcigyNTUsIDAsIDAs
IDMwKSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGN0eC0+c3Ryb2tlUmVjdChtX3Vw
ZGF0ZVJlY3RzVGhpc1VwZGF0ZVtpXSwgMi4wKTsKKyAgICB9CisKKyAgICAvLyBkcmF3IHJlY3Rz
IGluIGJsdWUKKyAgICBjdHgtPnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDAsIDI1NSwgMjU1KSwg
Q29sb3JTcGFjZURldmljZVJHQik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2RyYXdS
ZWN0c1RoaXNVcGRhdGUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY3R4LT5maWxsUmVjdChtX2Ry
YXdSZWN0c1RoaXNVcGRhdGVbaV0sIENvbG9yKDAsIDAsIDI1NSwgMzApLCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKKyAgICAgICAgY3R4LT5zdHJva2VSZWN0KG1fZHJhd1JlY3RzVGhpc1VwZGF0ZVtp
XSwgMi4wKTsKKyAgICB9CisKKyAgICAvLyBleHBvc2VkIHJlY3RzIGluIHB1cnBsZQorICAgIGN0
eC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMTUwLCAwLCAyMjAsIDI1NSksIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9leHBvc2VkUmVjdHNUaGlzVXBk
YXRlLnNpemUoKTsgKytpKSB7CisgICAgICAgIGN0eC0+ZmlsbFJlY3QobV9leHBvc2VkUmVjdHNU
aGlzVXBkYXRlW2ldLCBDb2xvcigxNTAsIDAsIDIyMCwgMzApLCBDb2xvclNwYWNlRGV2aWNlUkdC
KTsKKyAgICAgICAgY3R4LT5zdHJva2VSZWN0KG1fZXhwb3NlZFJlY3RzVGhpc1VwZGF0ZVtpXSwg
Mi4wKTsKKyAgICB9CisKKyAgICAvLyBkYW1hZ2UgcmVjdHMgaW4geWVsbG93CisgICAgY3R4LT5z
ZXRTdHJva2VDb2xvcihDb2xvcigyMDAsIDEwMCwgMCwgMjU1KSwgQ29sb3JTcGFjZURldmljZVJH
Qik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2RhbWFnZVJlY3RzVGhpc1VwZGF0ZS5z
aXplKCk7ICsraSkgeworICAgICAgICBjdHgtPmZpbGxSZWN0KG1fZGFtYWdlUmVjdHNUaGlzVXBk
YXRlW2ldLCBDb2xvcigyMDAsIDEwMCwgMCwgMzApLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAg
ICAgICAgY3R4LT5zdHJva2VSZWN0KG1fZGFtYWdlUmVjdHNUaGlzVXBkYXRlW2ldLCAyLjApOwor
ICAgIH0KKworICAgIG1fdXBkYXRlUmVjdHNUaGlzVXBkYXRlLmNsZWFyKCk7CisgICAgbV9kcmF3
UmVjdHNUaGlzVXBkYXRlLmNsZWFyKCk7CisgICAgbV9leHBvc2VkUmVjdHNUaGlzVXBkYXRlLmNs
ZWFyKCk7CisgICAgbV9kYW1hZ2VSZWN0c1RoaXNVcGRhdGUuY2xlYXIoKTsKK30KKwordm9pZCBD
Q0hlYWRzVXBEaXNwbGF5OjphZGRVcGRhdGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc2NyZWVuU3Bh
Y2VVcGRhdGVSZWN0KQoreworICAgIG1fdXBkYXRlUmVjdHNUaGlzVXBkYXRlLmFwcGVuZChzY3Jl
ZW5TcGFjZVVwZGF0ZVJlY3QpOworfQorCit2b2lkIENDSGVhZHNVcERpc3BsYXk6OmFkZERyYXdS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgc2NyZWVuU3BhY2VEcmF3UmVjdCkKK3sKKyAgICBtX2RyYXdS
ZWN0c1RoaXNVcGRhdGUuYXBwZW5kKHNjcmVlblNwYWNlRHJhd1JlY3QpOworfQorCit2b2lkIEND
SGVhZHNVcERpc3BsYXk6OmFkZERhbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzY3JlZW5TcGFj
ZURhbWFnZVJlY3QpCit7CisgICAgbV9kYW1hZ2VSZWN0c1RoaXNVcGRhdGUuYXBwZW5kKHNjcmVl
blNwYWNlRGFtYWdlUmVjdCk7Cit9CisKK3ZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6bG9nVXBkYXRl
UmVjdHNUb0hVRChDQ0xheWVySW1wbCogbGF5ZXIpCit7CisgICAgLy8gV2Ugd291bGQgbGlrZSB0
byB2aXN1YWxpemUgd2hlcmUgYW55IGxheWVyJ3MgdXBkYXRlIHJlY3QgaGFzIGNoYW5nZWQsCisg
ICAgLy8gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoaXMgbGF5ZXIgaXMgc2tpcHBlZCBmb3IgYWN0
dWFsIGRyYXdpbmcgb3Igbm90LgorICAgIC8vIFRoZXJlZm9yZSB3ZSB0cmF2ZXJzZSByZWN1cnNp
dmVseSBvdmVyIGFsbCBsYXllcnMsIG5vdCBqdXN0IHRoZQorICAgIC8vIHJlbmRlciBzdXJmYWNl
IGxpc3QuCisKKyAgICBpZiAoIWxheWVyLT51cGRhdGVSZWN0KCkuaXNFbXB0eSgpICYmIGxheWVy
LT5kcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgYWRkVXBkYXRlUmVjdChsYXllci0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKS5tYXBSZWN0KGxheWVyLT51cGRhdGVSZWN0KCkpKTsKKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAg
ICAgbG9nVXBkYXRlUmVjdHNUb0hVRChsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7Cit9CisK
K3ZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6bG9nRHJhd1JlY3RzVG9IVUQoY29uc3QgVmVjdG9yPEND
TGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit7CisgICAgZm9yIChpbnQgc3Vy
ZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5k
ZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJT
dXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF07CisgICAg
ICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+
cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7CisKKyAgICAg
ICAgY29uc3QgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2Ut
PmxheWVyTGlzdCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXll
ckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CisgICAgICAgICAgICBD
Q0xheWVySW1wbCogbGF5ZXIgPSBsYXllckxpc3RbbGF5ZXJJbmRleF07CisKKyAgICAgICAgICAg
IGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0g
bGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgLy8gTm90ZSwgdGhlIHdheSB0aGlzIGlzIGRlZmluZWQsIHVwZGF0ZSBy
ZWN0cyAod2hpY2ggYWxzbyByZXF1aXJlIG9mZmljaWFsbHkgYmVpbmcgZHJhd24pIGFyZSBub3Qg
bG9nZ2VkIGFzICJkcmF3IHJlY3RzIi4KKyAgICAgICAgICAgIC8vIHNvIGlmIHRoZSBwdXJwb3Nl
IG9mIHZpc3VhbGl6aW5nIHRoaXMgaXMgdG8gc2VlIHdoYXQgc3R1ZmYgaXMgZHJhd24sIHdlIGhh
dmUgdG8gYWxzbyBsb29rIGF0IHRoZSB1cGRhdGUgcmVjdHMuCisgICAgICAgICAgICBpZiAobGF5
ZXItPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpCisgICAgICAgICAgICAgICAgYWRkRHJhd1JlY3Qo
bGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubWFwUmVjdChGbG9hdFJlY3QoRmxvYXRQb2lu
dDo6emVybygpLCBsYXllci0+Ym91bmRzKCkpKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgQ0NIZWFkc1VwRGlzcGxheTo6bG9nRGFtYWdlUmVjdHNUb0hVRChjb25zdCBWZWN0b3I8Q0NM
YXllckltcGwqID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit7CisgICAgZm9yIChpbnQgc3Vy
ZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5k
ZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJT
dXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF07CisgICAg
ICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+
cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7CisKKyAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVuU3BhY2VTdXJmYWNlVHJhbnNmb3JtID0gcmVu
ZGVyU3VyZmFjZS0+b3JpZ2luVHJhbnNmb3JtKCk7CisgICAgICAgIENDTGF5ZXJJbXBsKiBjdXJy
ZW50TGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnBhcmVudCgpOworICAgICAgICB3aGlsZSAo
Y3VycmVudExheWVyKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudExheWVyLT5yZW5kZXJTdXJm
YWNlKCkpCisgICAgICAgICAgICAgICAgc2NyZWVuU3BhY2VTdXJmYWNlVHJhbnNmb3JtLm11bHRp
cGx5KGN1cnJlbnRMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7Cisg
ICAgICAgICAgICBjdXJyZW50TGF5ZXIgPSBjdXJyZW50TGF5ZXItPnBhcmVudCgpOworICAgICAg
ICB9CisgICAgICAgIGFkZERhbWFnZVJlY3Qoc2NyZWVuU3BhY2VTdXJmYWNlVHJhbnNmb3JtLm1h
cFJlY3QocmVuZGVyU3VyZmFjZS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgp
KSk7CisgICAgfQorfQorCisKIH0KIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaAppbmRleCAwNWNiMjBkNTI2OTc5ODU5
MjY4ZTQxNzc0ZmNhYTRhNGNlMWJhMmE0Li5lZTBlOGM4MGIwNTlkNDhjYWQ0ZjJkNjlkZGVhNDNi
MTdiZWJlZjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCkBAIC0zNCw2ICszNCw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBDQ1NldHRpbmdzOworY2xhc3MgQ0NM
YXllckltcGw7CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQz
RDsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKQEAgLTU4LDYgKzU5LDEwIEBAIHB1Ymxp
YzoKICAgICBib29sIGVuYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIGRyYXcoKTsKIAorICAgIHZv
aWQgbG9nVXBkYXRlUmVjdHNUb0hVRChDQ0xheWVySW1wbCopOworICAgIHZvaWQgbG9nRHJhd1Jl
Y3RzVG9IVUQoY29uc3QgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOworICAgIHZvaWQgbG9nRGFtYWdlUmVjdHNUb0hVRChjb25zdCBWZWN0b3I8Q0NMYXllcklt
cGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisKICAgICB0eXBlZGVmIFByb2dyYW1CaW5k
aW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4U3dpenpsZUFscGhh
PiBQcm9ncmFtOwogCiBwcml2YXRlOgpAQCAtNjUsOCArNzAsMTQgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGRyYXdIdWRDb250ZW50cyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRTaXplJiBodWRT
aXplKTsKICAgICB2b2lkIGRyYXdGUFNDb3VudGVyKEdyYXBoaWNzQ29udGV4dCosIGludCB0b3As
IGludCBoZWlnaHQpOwogICAgIHZvaWQgZHJhd1BsYXRmb3JtTGF5ZXJUcmVlKEdyYXBoaWNzQ29u
dGV4dCosIGludCB0b3ApOworICAgIHZvaWQgZHJhd0NvbXBvc2l0b3JSZWN0cyhHcmFwaGljc0Nv
bnRleHQqIGN0eCk7CiAgICAgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdDsKIAor
ICAgIC8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGxvZ2dpbmcgdXBkYXRlL2RyYXcvZGFtYWdlIHJl
Y3RzLgorICAgIHZvaWQgYWRkVXBkYXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHNjcmVlblNwYWNl
VXBkYXRlUmVjdCk7CisgICAgdm9pZCBhZGREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHNjcmVl
blNwYWNlRHJhd1JlY3QpOworICAgIHZvaWQgYWRkRGFtYWdlUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHNjcmVlblNwYWNlRGFtYWdlUmVjdCk7CisKICAgICBpbnQgbV9jdXJyZW50RnJhbWVOdW1iZXI7
CiAKICAgICBkb3VibGUgbV9maWx0ZXJlZEZyYW1lVGltZTsKQEAgLTgyLDYgKzkzLDExIEBAIHBy
aXZhdGU6CiAgICAgT3duUHRyPEZvbnQ+IG1fbWVkaXVtRm9udDsKIAogICAgIGJvb2wgbV91c2VN
YXBTdWJGb3JVcGxvYWRzOworCisgICAgVmVjdG9yPEZsb2F0UmVjdD4gbV91cGRhdGVSZWN0c1Ro
aXNVcGRhdGU7CisgICAgVmVjdG9yPEZsb2F0UmVjdD4gbV9kcmF3UmVjdHNUaGlzVXBkYXRlOwor
ICAgIFZlY3RvcjxGbG9hdFJlY3Q+IG1fZXhwb3NlZFJlY3RzVGhpc1VwZGF0ZTsKKyAgICBWZWN0
b3I8RmxvYXRSZWN0PiBtX2RhbWFnZVJlY3RzVGhpc1VwZGF0ZTsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgKaW5kZXggODlhZGU1NThiYjk2YzExYjY5NTJjN2E4YjFkZDRkNGVm
NjRmZjAyNC4uM2U3OTQ4MjZjNTZkZWNkYmEzN2JlMzhkZWE3MzhlNDg4ZTFlODgwMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTczLDYgKzczLDEyIEBAIHN0cnVjdCBDQ1NldHRp
bmdzIHsKICAgICAgICAgICAgICwgY29tcG9zaXRlT2Zmc2NyZWVuKGZhbHNlKQogICAgICAgICAg
ICAgLCBzaG93RlBTQ291bnRlcihmYWxzZSkKICAgICAgICAgICAgICwgc2hvd1BsYXRmb3JtTGF5
ZXJUcmVlKGZhbHNlKQorICAgICAgICAgICAgLy8gRE9OJ1QgQ09NTUlUIFRISVMsIEpVU1QgRk9S
IERFQlVHIFZJU1VBTElaQVRJT04uCisgICAgICAgICAgICAvLyAgLSAiYXBwcm94aW1hdGUiIGJl
Y2F1c2UgaXQgb25seSB2aXN1YWxpemVzIGxheWVycywgbm90IHRpbGVzL3F1YWRzLiBBbmQgaXQg
ZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgY3VsbGluZy4KKyAgICAgICAgICAgIC8vICAtIHVw
ZGF0ZVJlY3RzIGFuZCBkcmF3UmVjdHMgYXJlIGRpc2pvaW50LiBCb3RoIHJlY3RzIGNvbWJpbmVk
IHdpbGwgcmVmbGVjdCB3aGF0IG5lZWRzIHRvIGJlIHJlZHJhd24gdG90YWxseS4KKyAgICAgICAg
ICAgICwgc2hvd1VwZGF0ZVJlY3RzKHRydWUpIC8vIFNldCB0byB0cnVlIGZvciB2aXN1YWxpemlu
ZyB1cGRhdGUgcmVjdHMgKGFwcHJveGltYXRlIHdoYXQgd2FzIHBhaW50ZWQgYW5kIGxvYWRlZCB0
byB0ZXh0dXJlLCB3aGljaCBuZWVkcyB0byBiZSByZWRyYXduKQorICAgICAgICAgICAgLCBzaG93
RHJhd1JlY3RzKHRydWUpIC8vIFNldCB0byB0cnVlIGZvciB2aXN1YWxpemluZyBkcmF3IHJlY3Rz
ICh3aGF0IGxheWVycyBoYWQgcHJvcGVydHkgY2hhbmdlcyB0aGF0IG5lZWQgYSBmdWxsIHJlZHJh
dykKKyAgICAgICAgICAgICwgc2hvd0RhbWFnZVJlY3RzKHRydWUpIC8vIFNldCB0byB0cnVlIGZv
ciB2aXN1YWxpemluZyBkYW1hZ2UgcmVjdHMsIG9uZSBmb3IgZWFjaCByZW5kZXIgc3VyZmFjZS4K
ICAgICAgICAgICAgICwgcmVmcmVzaFJhdGUoMCkKICAgICAgICAgICAgICwgcGVyVGlsZVBhaW50
aW5nKGZhbHNlKQogICAgICAgICAgICAgLCBwYXJ0aWFsU3dhcEVuYWJsZWQoZmFsc2UpCkBAIC04
Myw2ICs4OSw5IEBAIHN0cnVjdCBDQ1NldHRpbmdzIHsKICAgICBib29sIGNvbXBvc2l0ZU9mZnNj
cmVlbjsKICAgICBib29sIHNob3dGUFNDb3VudGVyOwogICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5
ZXJUcmVlOworICAgIGJvb2wgc2hvd1VwZGF0ZVJlY3RzOworICAgIGJvb2wgc2hvd0RyYXdSZWN0
czsKKyAgICBib29sIHNob3dEYW1hZ2VSZWN0czsKICAgICBkb3VibGUgcmVmcmVzaFJhdGU7CiAg
ICAgYm9vbCBwZXJUaWxlUGFpbnRpbmc7CiAgICAgYm9vbCBwYXJ0aWFsU3dhcEVuYWJsZWQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDgwZTQ3MzhjYzEzYWQ0
ZjljMDhkNWZkNzVkYjEzY2ZmNTg2ZGM5NTUuLmQwY2Q3M2U4NjJmYjViMzY4MTYyNjU4NzViOTVh
ZDA0MjY0NWNjZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBA
IC0xOTQsNyArMTk0LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5k
ZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzLCBDQ0xheWUKICAgICAgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9v
dExheWVyKCksIHJvb3RMYXllcigpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNlKCktPmxheWVy
TGlzdCgpLCAmbV9sYXllclNvcnRlciwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRl
eHR1cmVTaXplKTsKICAgICB9CiAKLSAgICBpZiAobGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygp
LnVzaW5nUGFydGlhbFN3YXApCisgICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51
c2luZ1BhcnRpYWxTd2FwIHx8IG1fc2V0dGluZ3Muc2hvd0RhbWFnZVJlY3RzKQogICAgICAgICB0
cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3RMYXllcigpLCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKICAgICBtX3Jvb3REYW1hZ2VSZWN0ID0gcm9vdExheWVyKCktPnJlbmRlclN1cmZhY2Uo
KS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwogCkBAIC0zMDIsNiArMzAy
LDggQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKCkKICAgICAgICAgaWYg
KGl0LnJlcHJlc2VudHNJdHNlbGYoKSAmJiAhaXQtPnZpc2libGVMYXllclJlY3QoKS5pc0VtcHR5
KCkpCiAgICAgICAgICAgICBpdC0+ZGlkRHJhdygpOwogICAgIH0KKworICAgIG1fbGF5ZXJSZW5k
ZXJlci0+Z2l2ZURlYnVnUmVjdEluZm9Ub0hVRChyb290TGF5ZXIoKSwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7CiAgICAgbV9sYXllclJlbmRlcmVyLT5maW5pc2hEcmF3aW5nRnJhbWUoKTsKIAog
ICAgICsrbV9mcmFtZU51bWJlcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138028</attachid>
            <date>2012-04-19 19:22:01 -0700</date>
            <delta_ts>2012-04-20 13:45:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79400-20120419192200.patch</filename>
            <type>text/plain</type>
            <size>42587</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGUwNTI0MTFkMjQ1NDQ0
ZWVjOTViZjYyYzJlMzliMzAwMWMyNTRjZS4uMjFiOTc5NDc3N2ZjMzhkOTFkYTY5ZmNjN2VhYzcz
ODBhZTE3YjljZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDEyLTA0LTE5ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
VmlzdWFsaXplIGFjY2VsZXJhdGVkIGNvbXBvc2l0b3IgcmVjdHMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTQwMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIHRlc3RzLCBhbGwgdGhlIGNvZGUgYWRk
ZWQgaXMgb25seSBkZWJ1Z2dpbmcgY29kZS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc3Vw
cG9ydCBmb3IgdmlzdWFsaXppbmcgdGhyZWUgZGlmZmVyZW50IHR5cGVzIG9mCisgICAgICAgIHJl
Y3RzIG9uIHRoZSBjaHJvbWl1bSBoZWFkcy11cCBkaXNwbGF5OgorICAgICAgICAxLiB1cGRhdGVS
ZWN0cyB0aGF0IGluZGljYXRlIHdoYXQgd2FzIHBhaW50ZWQvdXBsb2FkZWQgdG8gYSByZXNvdXJj
ZQorICAgICAgICAyLiBwcm9wZXJ0eUNoYW5nZWRSZWN0cyB0aGF0IGluZGljYXRlIGxheWVycyB0
aGF0IGhhcyBwcm9wZXJ0eSBjaGFuZ2VzCisgICAgICAgIDMuIHN1cmZhY2VEYW1hZ2VSZWN0cyB0
aGF0IGFyZSB0aGUgYWNjdW11bGF0aW9uIG9mIHVwZGF0ZVJlY3RzIGFuZAorICAgICAgICAgICBw
cm9wZXJ0eUNoYW5nZWRSZWN0cywgaW5kaWNhdGluZyB3aGF0IHBpeGVscyBvbiB0aGUgc2NyZWVu
IGhhdmUKKyAgICAgICAgICAgYWN0dWFsbHkgY2hhbmdlZC4gIChTdXJmYWNlIGRhbWFnZSBhbHNv
IGFjY291bnRzIGZvciBuZXdseSBleHBvc2VkCisgICAgICAgICAgIGFyZWFzIGJ1dCB0aGF0IGlz
IG5vdCBleHBsaWNpdGx5IHZpc3VhbGl6ZWQuKQorCisgICAgICAgIEluIGFkZGl0aW9uIHRvIGFk
ZGluZyBzdXBwb3J0IGZvciB2aXN1YWxpemluZyB0aGlzLCB0aGUKKyAgICAgICAgQ0NIZWFkc1Vw
RGlzcGxheSB3YXMgc2lnbmlmaWNhbnRseSByZWZhY3RvcmVkLCBzZXBhcmF0aW5nIHRoZSBGUFMK
KyAgICAgICAgQ291bnRlciBmdW5jdGlvbmFsaXR5IGludG8gYSBkaWZmZXJlbnQgY2xhc3MsIHNv
IHRoYXQgdGhlIGhlYWRzLXVwCisgICAgICAgIGRpc3BsYXkgaXMgYWxsIGFib3V0IHZpc3VhbGl6
aW5nIGFubm90YXRpb25zLCBhbmQgdGhvc2UKKyAgICAgICAgYW5ub3RhdGlvbnMgKGZwcyBjb3Vu
dGVyLCBkZWJ1ZyByZWN0cykgYXJlIGxvZ2dlZCBzZXBhcmF0ZWx5LgorCisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVi
dWdSZWN0SGlzdG9yeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RlYnVnUmVjdEhpc3Rvcnk6OkNDRGVidWdSZWN0SGlzdG9yeSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0RlYnVnUmVjdEhpc3Rvcnk6OmVuYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NEZWJ1Z1JlY3RIaXN0b3J5OjpzYXZlRGVidWdSZWN0c0ZvckN1cnJlbnRGcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0RlYnVnUmVjdEhpc3Rvcnk6OnNhdmVQYWludFJlY3RzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDRGVidWdSZWN0SGlzdG9yeTo6c2F2ZVByb3BlcnR5Q2hhbmdlZFJl
Y3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGVidWdSZWN0SGlzdG9yeTo6c2F2ZVN1cmZhY2VE
YW1hZ2VSZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NE
ZWJ1Z1JlY3RIaXN0b3J5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChD
Q0RlYnVnUmVjdEhpc3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEZWJ1Z1JlY3RIaXN0b3J5
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEZWJ1Z1JlY3RIaXN0b3J5OjpwYWludFJl
Y3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGVidWdSZWN0SGlzdG9yeTo6cHJvcGVydHlDaGFu
Z2VkUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEZWJ1Z1JlY3RIaXN0b3J5OjpzdXJmYWNl
RGFtYWdlUmVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
RnBzQ291bnRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpzYWZlTW9kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnBzQ291bnRlcjo6ZnJhbWVJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zwc0NvdW50ZXI6OkNDRnBzQ291bnRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0Zwc0NvdW50ZXI6Om1hcmtCZWdpbm5pbmdPZkZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRnBzQ291bnRlcjo6bWFya0VuZE9mRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NGcHNDb3VudGVyOjppc0JhZEZyYW1lSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NGcHNDb3VudGVyOjppc0JhZEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnBzQ291
bnRlcjo6Z2V0QXZlcmFnZUZQU0FuZFN0YW5kYXJkRGV2aWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDRnBzQ291bnRlcjo6dGltZVN0YW1wT2ZSZWNlbnRGcmFtZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcHNDb3VudGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0Zwc0NvdW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NGcHNDb3VudGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGcHNDb3VudGVyOjpj
dXJyZW50RnJhbWVOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGcHNDb3VudGVyOjp0aW1l
U3RhbXBIaXN0b3J5U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NIZWFkc1VwRGlzcGxheS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NI
ZWFkc1VwRGlzcGxheTo6c2hvd0RlYnVnUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NIZWFk
c1VwRGlzcGxheTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5Ojpk
cmF3SHVkQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6ZHJh
d0ZQU0NvdW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6ZHJhd0ZQ
U0NvdW50ZXJUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmRyYXdE
ZWJ1Z1JlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hl
YWRzVXBEaXNwbGF5Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDSGVhZHNVcERp
c3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6Q0NIZWFkc1VwRGlz
cGxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1NldHRpbmdzOjpDQ1NldHRpbmdzKToKKyAg
ICAgICAgKENDU2V0dGluZ3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzd2FwQnVmZmVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpmcHNDb3VudGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRlYnVnUmVjdEhpc3Rvcnkp
OgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbCk6CisKIDIwMTItMDQtMTkgIFNhbWkgS3lv
c3RpbGEgIDxza3lvc3RpbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBBbGxv
dyBzY3JvbGxpbmcgbm9uLXJvb3QgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IGNmZjY0MTYyNmViZDQ0ZTg4YzNkODExMDkyYzRjYWE5YzU3OGFiZTcu
LjQyYjVhM2E5ZDc0M2NjMjUyM2JhYmFkZDEyNTA1YzEyY2RkZDU0MTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTM2MDksMTIgKzM2MDksMTYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFk
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdS
ZWN0SGlzdG9yeS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDRGVidWdSZWN0SGlzdG9yeS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWxheUJhc2VkVGltZVNvdXJjZS5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVh
ZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZvbnRB
dGxhcy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
Rm9udEF0bGFzLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRnBzQ291bnRlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDRnBzQ291bnRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJlQ3VydmUuaCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0RlYnVnUmVjdEhpc3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z1JlY3RIaXN0b3J5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNTdjZDI1
MGQwNWM0OTU1ZjA5OWVhOGI5NGE5ZmI0ZmZmZmFiYzg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z1JlY3RIaXN0
b3J5LmNwcApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgIkNDRGVi
dWdSZWN0SGlzdG9yeS5oIgorCisjaW5jbHVkZSAiQ0NEYW1hZ2VUcmFja2VyLmgiCisjaW5jbHVk
ZSAiQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJDQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRl
ICJDQ01hdGhVdGlsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NEZWJ1Z1JlY3RIaXN0
b3J5OjpDQ0RlYnVnUmVjdEhpc3RvcnkoKQoreworfQorCitib29sIENDRGVidWdSZWN0SGlzdG9y
eTo6ZW5hYmxlZChjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykKK3sKKyAgICByZXR1cm4gc2V0
dGluZ3Muc2hvd1BhaW50UmVjdHMgfHwgc2V0dGluZ3Muc2hvd1Byb3BlcnR5Q2hhbmdlZFJlY3Rz
IHx8IHNldHRpbmdzLnNob3dTdXJmYWNlRGFtYWdlUmVjdHM7Cit9CisKK3ZvaWQgQ0NEZWJ1Z1Jl
Y3RIaXN0b3J5OjpzYXZlRGVidWdSZWN0c0ZvckN1cnJlbnRGcmFtZShDQ0xheWVySW1wbCogcm9v
dExheWVyLCBjb25zdCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCit7CisgICAgLy8gRm9yIG5vdywgY2xlYXIg
YWxsIHJlY3RzIGZyb20gcHJldmlvdXMgZnJhbWVzLiBJbiB0aGUgZnV0dXJlIHdlIG1heSB3YW50
IHRvIHN0b3JlCisgICAgLy8gYWxsIGRlYnVnIHJlY3RzIGZvciBhIGhpc3Rvcnkgb2YgbWFueSBm
cmFtZXMuCisgICAgbV9wYWludFJlY3RIaXN0b3J5LmNsZWFyKCk7CisgICAgbV9wcm9wZXJ0eUNo
YW5nZWRSZWN0SGlzdG9yeS5jbGVhcigpOworICAgIG1fc3VyZmFjZURhbWFnZVJlY3RIaXN0b3J5
LmNsZWFyKCk7CisKKyAgICAvLyBOb3RlOiB0aGlzIGxvZ2dpbmcgbXVzdCBoYXBwZW4gYmVmb3Jl
IGxheWVyJ3MgcHJvcGVydHkgY2hhbmdlIHRyYWNraW5nIGlzIHJlc2V0LgorCisgICAgaWYgKHNl
dHRpbmdzLnNob3dQYWludFJlY3RzKQorICAgICAgICBzYXZlUGFpbnRSZWN0cyhyb290TGF5ZXIp
OworCisgICAgaWYgKHNldHRpbmdzLnNob3dQcm9wZXJ0eUNoYW5nZWRSZWN0cykKKyAgICAgICAg
c2F2ZVByb3BlcnR5Q2hhbmdlZFJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworCisgICAg
aWYgKHNldHRpbmdzLnNob3dTdXJmYWNlRGFtYWdlUmVjdHMpCisgICAgICAgIHNhdmVTdXJmYWNl
RGFtYWdlUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Cit9CisKKwordm9pZCBDQ0RlYnVn
UmVjdEhpc3Rvcnk6OnNhdmVQYWludFJlY3RzKENDTGF5ZXJJbXBsKiBsYXllcikKK3sKKyAgICAv
LyBXZSB3b3VsZCBsaWtlIHRvIHZpc3VhbGl6ZSB3aGVyZSBhbnkgbGF5ZXIncyB1cGRhdGVSZWN0
IChwYWludFJlY3QpIGhhcyBjaGFuZ2VkLAorICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0
aGlzIGxheWVyIGlzIHNraXBwZWQgZm9yIGFjdHVhbCBkcmF3aW5nIG9yIG5vdC4gVGhlcmVmb3Jl
CisgICAgLy8gd2UgdHJhdmVyc2UgcmVjdXJzaXZlbHkgb3ZlciBhbGwgbGF5ZXJzLCBub3QganVz
dCB0aGUgcmVuZGVyIHN1cmZhY2UgbGlzdC4KKworICAgIGlmICghbGF5ZXItPnVwZGF0ZVJlY3Qo
KS5pc0VtcHR5KCkgJiYgbGF5ZXItPmRyYXdzQ29udGVudCgpKQorICAgICAgICBtX3BhaW50UmVj
dEhpc3RvcnkuYXBwZW5kKENDTWF0aFV0aWw6Om1hcENsaXBwZWRSZWN0KGxheWVyLT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpLCBsYXllci0+dXBkYXRlUmVjdCgpKSk7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIHNh
dmVQYWludFJlY3RzKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKK30KKwordm9pZCBDQ0Rl
YnVnUmVjdEhpc3Rvcnk6OnNhdmVQcm9wZXJ0eUNoYW5nZWRSZWN0cyhjb25zdCBWZWN0b3I8Q0NM
YXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICBmb3IgKGludCBzdXJm
YWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRl
eCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1
cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XTsKKyAgICAg
ICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5y
ZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKKworICAgICAg
ICBjb25zdCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+
bGF5ZXJMaXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVy
SW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKKyAgICAgICAgICAgIEND
TGF5ZXJJbXBsKiBsYXllciA9IGxheWVyTGlzdFtsYXllckluZGV4XTsKKworICAgICAgICAgICAg
aWYgKENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJn
ZXQ8Q0NMYXllckltcGw+KGxheWVyLCByZW5kZXJTdXJmYWNlTGF5ZXItPmlkKCkpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAobGF5ZXItPmxheWVyUHJvcGVy
dHlDaGFuZ2VkKCkpCisgICAgICAgICAgICAgICAgbV9wcm9wZXJ0eUNoYW5nZWRSZWN0SGlzdG9y
eS5hcHBlbmQoQ0NNYXRoVXRpbDo6bWFwQ2xpcHBlZFJlY3QobGF5ZXItPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxheWVyLT5ib3VuZHMoKSkp
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDQ0RlYnVnUmVjdEhpc3Rvcnk6OnNhdmVT
dXJmYWNlRGFtYWdlUmVjdHMoY29uc3QgVmVjdG9yPENDTGF5ZXJJbXBsKiA+JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KQoreworICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRl
eCkgeworICAgICAgICBDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdOworICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJl
bmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICAg
ICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOworCisgICAgICAgIG1fc3VyZmFjZURhbWFnZVJlY3RI
aXN0b3J5LmFwcGVuZChDQ01hdGhVdGlsOjptYXBDbGlwcGVkUmVjdChyZW5kZXJTdXJmYWNlLT5z
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpLCByZW5kZXJTdXJmYWNlLT5kYW1hZ2VUcmFja2VyKCktPmN1
cnJlbnREYW1hZ2VSZWN0KCkpKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdSZWN0SGlz
dG9yeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NE
ZWJ1Z1JlY3RIaXN0b3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGVhN2FhYTFiMDIxZGZkMjU0YTRhYTQ1Mjg0
YjUxMjZiMmFiMTE5OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdSZWN0SGlzdG9yeS5oCkBAIC0wLDAgKzEsNzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NEZWJ1Z1JlY3RIaXN0b3J5X2gKKyNkZWZpbmUg
Q0NEZWJ1Z1JlY3RIaXN0b3J5X2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJJbXBsOworc3RydWN0IENDU2V0dGlu
Z3M7CisKKy8vIFRoaXMgY2xhc3MgbWFpbnRhaW5zIGEgaGlzdG9yeSBvZiByZWN0cyBvZiB2YXJp
b3VzIHR5cGVzIHRoYXQgY2FuIGJlIHVzZWQKKy8vIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIFRo
ZSBvdmVyaGVhZCBvZiBjb2xsZWN0aW5nIHJlY3RzIGlzIHBlcmZvcm1lZCBvbmx5IGlmCisvLyB0
aGUgYXBwcm9wcmlhdGUgQ0NTZXR0aW5ncyBhcmUgZW5hYmxlZC4KK2NsYXNzIENDRGVidWdSZWN0
SGlzdG9yeSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NEZWJ1Z1JlY3RIaXN0b3J5KTsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0RlYnVnUmVjdEhpc3Rvcnk+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDRGVidWdSZWN0SGlzdG9y
eSgpKTsKKyAgICB9CisKKyAgICBib29sIGVuYWJsZWQoY29uc3QgQ0NTZXR0aW5ncyYpOworCisg
ICAgdm9pZCBzYXZlRGVidWdSZWN0c0ZvckN1cnJlbnRGcmFtZShDQ0xheWVySW1wbCogcm9vdExh
eWVyLCBjb25zdCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
Y29uc3QgQ0NTZXR0aW5ncyYpOworCisgICAgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHBhaW50
UmVjdHMoKSB7IHJldHVybiBtX3BhaW50UmVjdEhpc3Rvcnk7IH0KKyAgICBjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYgcHJvcGVydHlDaGFuZ2VkUmVjdHMoKSB7IHJldHVybiBtX3Byb3BlcnR5Q2hh
bmdlZFJlY3RIaXN0b3J5OyB9CisgICAgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHN1cmZhY2VE
YW1hZ2VSZWN0cygpIHsgcmV0dXJuIG1fc3VyZmFjZURhbWFnZVJlY3RIaXN0b3J5OyB9CisKK3By
aXZhdGU6CisgICAgQ0NEZWJ1Z1JlY3RIaXN0b3J5KCk7CisKKyAgICB2b2lkIHNhdmVQYWludFJl
Y3RzKENDTGF5ZXJJbXBsKik7CisgICAgdm9pZCBzYXZlUHJvcGVydHlDaGFuZ2VkUmVjdHMoY29u
c3QgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIHZv
aWQgc2F2ZVN1cmZhY2VEYW1hZ2VSZWN0cyhjb25zdCBWZWN0b3I8Q0NMYXllckltcGwqID4mIHJl
bmRlclN1cmZhY2VMYXllckxpc3QpOworCisgICAgVmVjdG9yPEZsb2F0UmVjdD4gbV9wYWludFJl
Y3RIaXN0b3J5OworICAgIFZlY3RvcjxGbG9hdFJlY3Q+IG1fcHJvcGVydHlDaGFuZ2VkUmVjdEhp
c3Rvcnk7CisgICAgVmVjdG9yPEZsb2F0UmVjdD4gbV9zdXJmYWNlRGFtYWdlUmVjdEhpc3Rvcnk7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcHNDb3VudGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnBzQ291bnRlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNGQ2Mzc3M2EyYzkyMmQ3OTYyZDlhNmU5NGQ3MWU5YjM1YjZlMmMyOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
RnBzQ291bnRlci5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRl
ICJDQ0Zwc0NvdW50ZXIuaCIKKworI2luY2x1ZGUgIkNDUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBkb3VibGUgQ0NG
cHNDb3VudGVyOjprRnJhbWVUb29GYXN0ID0gMS4wIC8gNzAuMDsgLy8gbWVhc3VyZWQgaW4gc2Vj
b25kcworY29uc3QgZG91YmxlIENDRnBzQ291bnRlcjo6a0ZyYW1lVG9vU2xvdyA9IDEuMCAvIDEy
LjA7CisKKy8vIHNhZmVNb2Qgd29ya3Mgb24gLTEsIHJldHVybmluZyBtLTEgaW4gdGhhdCBjYXNl
Lgorc3RhdGljIGlubGluZSBpbnQgc2FmZU1vZChpbnQgbnVtYmVyLCBpbnQgbW9kdWx1cykKK3sK
KyAgICByZXR1cm4gKG51bWJlciArIG1vZHVsdXMpICUgbW9kdWx1czsKK30KKworaW5saW5lIGlu
dCBDQ0Zwc0NvdW50ZXI6OmZyYW1lSW5kZXgoaW50IGZyYW1lKSBjb25zdAoreworICAgIHJldHVy
biBzYWZlTW9kKGZyYW1lLCBrVGltZVN0YW1wSGlzdG9yeVNpemUpOworfQorCitDQ0Zwc0NvdW50
ZXI6OkNDRnBzQ291bnRlcigpCisgICAgOiBtX2N1cnJlbnRGcmFtZU51bWJlcigxKQoreworICAg
IG1fdGltZVN0YW1wSGlzdG9yeVswXSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV90aW1lU3RhbXBI
aXN0b3J5WzFdID0gbV90aW1lU3RhbXBIaXN0b3J5WzBdOworICAgIGZvciAoaW50IGkgPSAyOyBp
IDwga1RpbWVTdGFtcEhpc3RvcnlTaXplOyBpKyspCisgICAgICAgIG1fdGltZVN0YW1wSGlzdG9y
eVtpXSA9IDA7Cit9CisKK3ZvaWQgQ0NGcHNDb3VudGVyOjptYXJrQmVnaW5uaW5nT2ZGcmFtZShk
b3VibGUgdGltZXN0YW1wKQoreworICAgIG1fdGltZVN0YW1wSGlzdG9yeVtmcmFtZUluZGV4KG1f
Y3VycmVudEZyYW1lTnVtYmVyKV0gPSB0aW1lc3RhbXA7Cit9CisKK3ZvaWQgQ0NGcHNDb3VudGVy
OjptYXJrRW5kT2ZGcmFtZSgpCit7CisgICAgbV9jdXJyZW50RnJhbWVOdW1iZXIgKz0gMTsKK30K
KworYm9vbCBDQ0Zwc0NvdW50ZXI6OmlzQmFkRnJhbWVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWxC
ZXR3ZWVuQ29uc2VjdXRpdmVGcmFtZXMpIGNvbnN0Cit7CisgICAgYm9vbCBzY2hlZHVsZXJBbGxv
d3NEb3VibGVGcmFtZXMgPSAhQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpOworICAgIGJvb2wgaW50
ZXJ2YWxUb29GYXN0ID0gc2NoZWR1bGVyQWxsb3dzRG91YmxlRnJhbWVzICYmIGludGVydmFsQmV0
d2VlbkNvbnNlY3V0aXZlRnJhbWVzIDwga0ZyYW1lVG9vRmFzdDsKKyAgICBib29sIGludGVydmFs
VG9vU2xvdyA9IGludGVydmFsQmV0d2VlbkNvbnNlY3V0aXZlRnJhbWVzID4ga0ZyYW1lVG9vU2xv
dzsKKyAgICByZXR1cm4gaW50ZXJ2YWxUb29GYXN0IHx8IGludGVydmFsVG9vU2xvdzsKK30KKwor
Ym9vbCBDQ0Zwc0NvdW50ZXI6OmlzQmFkRnJhbWUoaW50IGZyYW1lTnVtYmVyKSBjb25zdAorewor
ICAgIGRvdWJsZSBkZWx0YSA9IG1fdGltZVN0YW1wSGlzdG9yeVtmcmFtZUluZGV4KGZyYW1lTnVt
YmVyKV0gLQorICAgICAgICAgICAgbV90aW1lU3RhbXBIaXN0b3J5W2ZyYW1lSW5kZXgoZnJhbWVO
dW1iZXIgLSAxKV07CisgICAgcmV0dXJuIGlzQmFkRnJhbWVJbnRlcnZhbChkZWx0YSk7Cit9CisK
K3ZvaWQgQ0NGcHNDb3VudGVyOjpnZXRBdmVyYWdlRlBTQW5kU3RhbmRhcmREZXZpYXRpb24oZG91
YmxlJiBhdmVyYWdlRlBTLCBkb3VibGUmIHN0YW5kYXJkRGV2aWF0aW9uKSBjb25zdAoreworICAg
IGludCBmcmFtZSA9IG1fY3VycmVudEZyYW1lTnVtYmVyIC0gMTsKKyAgICBhdmVyYWdlRlBTID0g
MDsKKyAgICBpbnQgYXZlcmFnZUZQU0NvdW50ID0gMDsKKyAgICBkb3VibGUgZnBzVmFyaWFuY2VO
dW1lcmF0b3IgPSAwOworCisgICAgLy8gV2FsayBiYWNrd2FyZHMgdGhyb3VnaCB0aGUgc2FtcGxl
cyBsb29raW5nIGZvciBhIHJ1biBvZiBnb29kIGZyYW1lCisgICAgLy8gdGltaW5ncyBmcm9tIHdo
aWNoIHRvIGNvbXB1dGUgdGhlIG1lYW4gYW5kIHN0YW5kYXJkIGRldmlhdGlvbi4KKyAgICAvLwor
ICAgIC8vIFNsb3cgZnJhbWVzIG9jY3VyIGp1c3QgYmVjYXVzZSB0aGUgdXNlciBpcyBpbmFjdGl2
ZSwgYW5kIHNob3VsZCBiZQorICAgIC8vIGlnbm9yZWQuIEZhc3QgZnJhbWVzIGFyZSBpZ25vcmVk
IGlmIHRoZSBzY2hlZHVsZXIgaXMgaW4gc2luZ2xlLXRocmVhZAorICAgIC8vIG1vZGUgaW4gb3Jk
ZXIgdG8gcmVwcmVzZW50IHRoZSB0cnVlIGZyYW1lIHJhdGUgaW4gc3BpdGUgb2YgdGhlIGZhY3Qg
dGhhdAorICAgIC8vIHRoZSBmaXJzdCBmZXcgc3dhcGJ1ZmZlcnMgaGFwcGVuIGluc3RhbnRseSB3
aGljaCBza2V3cyB0aGUgc3RhdGlzdGljcworICAgIC8vIHRvbyBtdWNoIGZvciBzaG9ydCBsaXZl
ZCBhbmltYXRpb25zLgorICAgIC8vCisgICAgLy8gaXNCYWRGcmFtZSBlbmNhcHN1bGF0ZXMgdGhl
IGZyYW1lIHRvbyBzbG93L2ZyYW1lIHRvbyBmYXN0IGxvZ2ljLgorICAgIHdoaWxlICgxKSB7Cisg
ICAgICAgIGlmICghaXNCYWRGcmFtZShmcmFtZSkpIHsKKyAgICAgICAgICAgIGF2ZXJhZ2VGUFND
b3VudCsrOworICAgICAgICAgICAgZG91YmxlIHNlY0Zvckxhc3RGcmFtZSA9IG1fdGltZVN0YW1w
SGlzdG9yeVtmcmFtZUluZGV4KGZyYW1lKV0gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdGltZVN0YW1wSGlzdG9yeVtmcmFtZUluZGV4KGZyYW1lIC0gMSldOworICAg
ICAgICAgICAgZG91YmxlIHggPSAxLjAgLyBzZWNGb3JMYXN0RnJhbWU7CisgICAgICAgICAgICBk
b3VibGUgZGVsdGFGcm9tQXZlcmFnZSA9IHggLSBhdmVyYWdlRlBTOworICAgICAgICAgICAgLy8g
Q2hhbmdlIHdpdGggY2F1dGlvbiAtIG51bWVyaWNzLiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93
aWtpL1N0YW5kYXJkX2RldmlhdGlvbgorICAgICAgICAgICAgYXZlcmFnZUZQUyA9IGF2ZXJhZ2VG
UFMgKyBkZWx0YUZyb21BdmVyYWdlIC8gYXZlcmFnZUZQU0NvdW50OworICAgICAgICAgICAgZnBz
VmFyaWFuY2VOdW1lcmF0b3IgPSBmcHNWYXJpYW5jZU51bWVyYXRvciArIGRlbHRhRnJvbUF2ZXJh
Z2UgKiAoeCAtIGF2ZXJhZ2VGUFMpOworICAgICAgICB9CisgICAgICAgIGlmIChhdmVyYWdlRlBT
Q291bnQgJiYgaXNCYWRGcmFtZShmcmFtZSkpIHsKKyAgICAgICAgICAgIC8vIFdlJ3ZlIGdhdGhl
cmVkIGEgcnVuIG9mIGdvb2Qgc2FtcGxlcywgc28gc3RvcC4KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIC0tZnJhbWU7CisgICAgICAgIGlmIChmcmFtZUluZGV4KGZyYW1l
KSA9PSBmcmFtZUluZGV4KG1fY3VycmVudEZyYW1lTnVtYmVyKSB8fCBmcmFtZSA8IDApIHsKKyAg
ICAgICAgICAgIC8vIFdlJ3ZlIGdvbmUgdGhyb3VnaCBhbGwgYXZhaWxhYmxlIGhpc3RvcmljYWwg
ZGF0YSwgc28gc3RvcC4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgc3RhbmRhcmREZXZpYXRpb24gPSBzcXJ0KGZwc1ZhcmlhbmNlTnVtZXJhdG9yIC8gYXZlcmFn
ZUZQU0NvdW50KTsKK30KKworZG91YmxlIENDRnBzQ291bnRlcjo6dGltZVN0YW1wT2ZSZWNlbnRG
cmFtZShpbnQgbikKK3sKKyAgICBBU1NFUlQobiA+PSAwICYmIG4gPCBrVGltZVN0YW1wSGlzdG9y
eVNpemUpOworICAgIGludCBkZXNpcmVkSW5kZXggPSAoZnJhbWVJbmRleChtX2N1cnJlbnRGcmFt
ZU51bWJlcikgKyBuKSAlIGtUaW1lU3RhbXBIaXN0b3J5U2l6ZTsKKyAgICByZXR1cm4gbV90aW1l
U3RhbXBIaXN0b3J5W2Rlc2lyZWRJbmRleF07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnBzQ291bnRlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcHNDb3Vu
dGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjZjOTI1Y2ZiNTMxYjcxZmJhZmQ5MjAzZGUxMTExYjM0YjRlNzhk
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDRnBzQ291bnRlci5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQ0NGcHNDb3VudGVyX2gKKyNkZWZpbmUgQ0NGcHNDb3VudGVyX2gKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ly8gVGhpcyBjbGFzcyBtYWludGFpbnMgYSBoaXN0b3J5IG9mIHRpbWVzdGFtcHMsIGFuZCBwcm92
aWRlcyBmdW5jdGlvbmFsaXR5IHRvCisvLyBpbnRlbGxpZ2VudGx5IGNvbXB1dGUgYXZlcmFnZSBm
cmFtZXMgcGVyIHNlY29uZCAoYW5kIHN0YW5kYXJkIGRldmlhdGlvbikuCitjbGFzcyBDQ0Zwc0Nv
dW50ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDRnBzQ291bnRlcik7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NGcHNDb3VudGVyPiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0Zwc0NvdW50ZXIoKSk7CisgICAgfQorCisgICAg
dm9pZCBtYXJrQmVnaW5uaW5nT2ZGcmFtZShkb3VibGUgdGltZXN0YW1wKTsKKyAgICB2b2lkIG1h
cmtFbmRPZkZyYW1lKCk7CisgICAgaW50IGN1cnJlbnRGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0
dXJuIG1fY3VycmVudEZyYW1lTnVtYmVyOyB9CisgICAgdm9pZCBnZXRBdmVyYWdlRlBTQW5kU3Rh
bmRhcmREZXZpYXRpb24oZG91YmxlJiBhdmVyYWdlRlBTLCBkb3VibGUmIHN0YW5kYXJkRGV2aWF0
aW9uKSBjb25zdDsKKyAgICBpbnQgdGltZVN0YW1wSGlzdG9yeVNpemUoKSBjb25zdCB7IHJldHVy
biBrVGltZVN0YW1wSGlzdG9yeVNpemU7IH0KKworICAgIC8vIG4gPSAwIHJldHVybnMgdGhlIG9s
ZGVzdCBmcmFtZSByZXRhaW5lZCBpbiB0aGUgaGlzdG9yeSwKKyAgICAvLyB3aGlsZSBuID0gdGlt
ZVN0YW1wSGlzdG9yeVNpemUoKSAtIDEgcmV0dXJucyB0aGUgdGltZXN0YW1wIG1vc3QgcmVjZW50
IChjdXJyZW50KSBmcmFtZS4KKyAgICBkb3VibGUgdGltZVN0YW1wT2ZSZWNlbnRGcmFtZShpbnQg
LyogbiAqLyk7CisKKyAgICAvLyBUaGlzIGlzIGEgaGV1cmlzdGljIHRoYXQgY2FuIGJlIHVzZWQg
dG8gaWdub3JlIGZyYW1lcyBpbiBhIHJlYXNvbmFibGUgd2F5LiBSZXR1cm5zCisgICAgLy8gdHJ1
ZSBpZiB0aGUgZ2l2ZW4gZnJhbWUgaW50ZXJ2YWwgaXMgdG9vIGZhc3Qgb3IgdG9vIHNsb3csIGJh
c2VkIG9uIGNvbnN0YW50IHRocmVzaG9sZHMuCisgICAgYm9vbCBpc0JhZEZyYW1lSW50ZXJ2YWwo
ZG91YmxlIGludGVydmFsQmV0d2VlbkNvbnNlY3V0aXZlRnJhbWVzKSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBDQ0Zwc0NvdW50ZXIoKTsKKworICAgIGludCBmcmFtZUluZGV4KGludCBmcmFtZU51
bWJlcikgY29uc3Q7CisgICAgYm9vbCBpc0JhZEZyYW1lKGludCBmcmFtZU51bWJlcikgY29uc3Q7
CisKKyAgICAvLyBUd28gdGhyZXNob2xkcyAobWVhc3VyZWQgaW4gc2Vjb25kcykgdGhhdCBkZXNj
cmliZSB3aGF0IGlzIGNvbnNpZGVyZWQgdG8gYmUgYSAibm8tb3AgZnJhbWUiIHRoYXQgc2hvdWxk
IG5vdCBiZSBjb3VudGVkLgorICAgIC8vIC0gaWYgdGhlIGZyYW1lIGlzIHRvbyBmYXN0LCB0aGVu
IGdpdmVuIG91ciBjb21wb3NpdG9yIGltcGxlbWVudGF0aW9uLCB0aGUgZnJhbWUgcHJvYmFibHkg
d2FzIGEgbm8tb3AgYW5kIGRpZCBub3QgZHJhdy4KKyAgICAvLyAtIGlmIHRoZSBmcmFtZSBpcyB0
b28gc2xvdywgdGhlbiB0aGVyZSBpcyBwcm9iYWJseSBub3QgYW5pbWF0aW5nIGNvbnRlbnQsIHNv
IHdlIHNob3VsZCBub3QgcG9sbHV0ZSB0aGUgYXZlcmFnZS4KKyAgICBzdGF0aWMgY29uc3QgZG91
YmxlIGtGcmFtZVRvb0Zhc3Q7CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBrRnJhbWVUb29TbG93
OworCisgICAgc3RhdGljIGNvbnN0IGludCBrVGltZVN0YW1wSGlzdG9yeVNpemUgPSAxMjA7CisK
KyAgICBpbnQgbV9jdXJyZW50RnJhbWVOdW1iZXI7CisgICAgZG91YmxlIG1fdGltZVN0YW1wSGlz
dG9yeVtrVGltZVN0YW1wSGlzdG9yeVNpemVdOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKaW5kZXggYTZhOGJkMWNiZGZhNThkMDgzZjg0
OWU3ZmE1YTM1ZGViMzhjNDYyZC4uNDE4Y2I4MGNlMWE5MTE3M2Q1ZmUzYjIzMjRlNWYwY2QxZDUz
NGFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKQEAgLTMzLDI0ICszMywx
NiBAQAogI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DYW52
YXMuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgorI2luY2x1ZGUgImNjL0NDRGVidWdS
ZWN0SGlzdG9yeS5oIgogI2luY2x1ZGUgImNjL0NDRm9udEF0bGFzLmgiCisjaW5jbHVkZSAiY2Mv
Q0NGcHNDb3VudGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgotI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLUNDSGVh
ZHNVcERpc3BsYXk6OkNDSGVhZHNVcERpc3BsYXkoKQotICAgIDogbV9jdXJyZW50RnJhbWVOdW1i
ZXIoMSkKLXsKLSAgICBtX2JlZ2luVGltZUhpc3RvcnlJblNlY1swXSA9IGN1cnJlbnRUaW1lKCk7
Ci0gICAgbV9iZWdpblRpbWVIaXN0b3J5SW5TZWNbMV0gPSBtX2JlZ2luVGltZUhpc3RvcnlJblNl
Y1swXTsKLSAgICBmb3IgKGludCBpID0gMjsgaSA8IGtCZWdpbkZyYW1lSGlzdG9yeVNpemU7IGkr
KykKLSAgICAgICAgbV9iZWdpblRpbWVIaXN0b3J5SW5TZWNbaV0gPSAwOwotfQotCiBDQ0hlYWRz
VXBEaXNwbGF5Ojp+Q0NIZWFkc1VwRGlzcGxheSgpCiB7CiB9CkBAIC02MCwzMyArNTIsOSBAQCB2
b2lkIENDSGVhZHNVcERpc3BsYXk6OnNldEZvbnRBdGxhcyhQYXNzT3duUHRyPENDRm9udEF0bGFz
PiBmb250QXRsYXMpCiAgICAgbV9mb250QXRsYXMgPSBmb250QXRsYXM7CiB9CiAKLWNvbnN0IGRv
dWJsZSBDQ0hlYWRzVXBEaXNwbGF5OjprSWRsZVNlY29uZHNUcmlnZ2Vyc1Jlc2V0ID0gMC41Owot
Y29uc3QgZG91YmxlIENDSGVhZHNVcERpc3BsYXk6OmtGcmFtZVRvb0Zhc3QgPSAxLjAgLyA3MDsK
LQotLy8gc2FmZU1vZCB3b3JrcyBvbiAtMSwgcmV0dXJuaW5nIG0tMSBpbiB0aGF0IGNhc2UuCi1z
dGF0aWMgaW5saW5lIGludCBzYWZlTW9kKGludCBudW1iZXIsIGludCBtb2R1bHVzKQotewotICAg
IHJldHVybiAobnVtYmVyICsgbW9kdWx1cykgJSBtb2R1bHVzOwotfQotCi1pbmxpbmUgaW50IEND
SGVhZHNVcERpc3BsYXk6OmZyYW1lSW5kZXgoaW50IGZyYW1lKSBjb25zdAotewotICAgIHJldHVy
biBzYWZlTW9kKGZyYW1lLCBrQmVnaW5GcmFtZUhpc3RvcnlTaXplKTsKLX0KLQotdm9pZCBDQ0hl
YWRzVXBEaXNwbGF5OjpvbkZyYW1lQmVnaW4oZG91YmxlIHRpbWVzdGFtcCkKLXsKLSAgICBtX2Jl
Z2luVGltZUhpc3RvcnlJblNlY1tmcmFtZUluZGV4KG1fY3VycmVudEZyYW1lTnVtYmVyKV0gPSB0
aW1lc3RhbXA7Ci19Ci0KLXZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6b25Td2FwQnVmZmVycygpCi17
Ci0gICAgbV9jdXJyZW50RnJhbWVOdW1iZXIgKz0gMTsKLX0KLQogYm9vbCBDQ0hlYWRzVXBEaXNw
bGF5OjplbmFibGVkKGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKSBjb25zdAogewotICAgIHJl
dHVybiBzaG93UGxhdGZvcm1MYXllclRyZWUoc2V0dGluZ3MpIHx8IHNldHRpbmdzLnNob3dGUFND
b3VudGVyOworICAgIHJldHVybiBzaG93UGxhdGZvcm1MYXllclRyZWUoc2V0dGluZ3MpIHx8IHNl
dHRpbmdzLnNob3dGUFNDb3VudGVyIHx8IHNob3dEZWJ1Z1JlY3RzKHNldHRpbmdzKTsKIH0KIAog
Ym9vbCBDQ0hlYWRzVXBEaXNwbGF5OjpzaG93UGxhdGZvcm1MYXllclRyZWUoY29uc3QgQ0NTZXR0
aW5ncyYgc2V0dGluZ3MpIGNvbnN0CkBAIC05NCw2ICs2MiwxMSBAQCBib29sIENDSGVhZHNVcERp
c3BsYXk6OnNob3dQbGF0Zm9ybUxheWVyVHJlZShjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykg
Y29uc3QKICAgICByZXR1cm4gc2V0dGluZ3Muc2hvd1BsYXRmb3JtTGF5ZXJUcmVlOwogfQogCiti
b29sIENDSGVhZHNVcERpc3BsYXk6OnNob3dEZWJ1Z1JlY3RzKGNvbnN0IENDU2V0dGluZ3MmIHNl
dHRpbmdzKSBjb25zdAoreworICAgIHJldHVybiBzZXR0aW5ncy5zaG93UGFpbnRSZWN0cyB8fCBz
ZXR0aW5ncy5zaG93UHJvcGVydHlDaGFuZ2VkUmVjdHMgfHwgc2V0dGluZ3Muc2hvd1N1cmZhY2VE
YW1hZ2VSZWN0czsKK30KKwogdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KENDTGF5ZXJUcmVl
SG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQogewogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1
bSogbGF5ZXJSZW5kZXJlciA9IGxheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCk7CkBA
IC0xMDQsNyArNzcsNyBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6OmRyYXcoQ0NMYXllclRyZWVI
b3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpCiAgICAgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGlu
Z3MgPSBsYXllclRyZWVIb3N0SW1wbC0+c2V0dGluZ3MoKTsKICAgICAvLyBVc2UgYSBmdWxsc2Ny
ZWVuIHRleHR1cmUgb25seSBpZiB3ZSBuZWVkIHRvLi4uCiAgICAgSW50U2l6ZSBodWRTaXplOwot
ICAgIGlmIChzaG93UGxhdGZvcm1MYXllclRyZWUoc2V0dGluZ3MpKSB7CisgICAgaWYgKHNob3dQ
bGF0Zm9ybUxheWVyVHJlZShzZXR0aW5ncykgfHwgc2hvd0RlYnVnUmVjdHMoc2V0dGluZ3MpKSB7
CiAgICAgICAgIGh1ZFNpemUuc2V0V2lkdGgobWluKDIwNDgsIGxheWVyVHJlZUhvc3RJbXBsLT52
aWV3cG9ydFNpemUoKS53aWR0aCgpKSk7CiAgICAgICAgIGh1ZFNpemUuc2V0SGVpZ2h0KG1pbigy
MDQ4LCBsYXllclRyZWVIb3N0SW1wbC0+dmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpKTsKICAgICB9
IGVsc2UgewpAQCAtMTUxLDE1ICsxMjQsNiBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6OmRyYXco
Q0NMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpCiAgICAgbV9odWRUZXh0dXJl
LT51bnJlc2VydmUoKTsKIH0KIAotYm9vbCBDQ0hlYWRzVXBEaXNwbGF5Ojppc0JhZEZyYW1lKGlu
dCBmcmFtZU51bWJlcikgY29uc3QKLXsKLSAgICBkb3VibGUgZGVsdGEgPSBtX2JlZ2luVGltZUhp
c3RvcnlJblNlY1tmcmFtZUluZGV4KGZyYW1lTnVtYmVyKV0gLQotICAgICAgICAgICAgICAgICAg
IG1fYmVnaW5UaW1lSGlzdG9yeUluU2VjW2ZyYW1lSW5kZXgoZnJhbWVOdW1iZXIgLSAxKV07Ci0g
ICAgYm9vbCB0b29TbG93ID0gZGVsdGEgPiAoa051bU1pc3NlZEZyYW1lc0ZvclJlc2V0IC8gNjAu
MCk7Ci0gICAgYm9vbCBzY2hlZHVsZXJBbGxvd3NEb3VibGVGcmFtZXMgPSAhQ0NQcm94eTo6aGFz
SW1wbFRocmVhZCgpOwotICAgIHJldHVybiAoc2NoZWR1bGVyQWxsb3dzRG91YmxlRnJhbWVzICYm
IGRlbHRhIDwga0ZyYW1lVG9vRmFzdCkgfHwgdG9vU2xvdzsKLX0KLQogdm9pZCBDQ0hlYWRzVXBE
aXNwbGF5OjpkcmF3SHVkQ29udGVudHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBDQ0xheWVy
VHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGlu
Z3MsIGNvbnN0IEludFNpemUmIGh1ZFNpemUpCiB7CiAgICAgaWYgKHNob3dQbGF0Zm9ybUxheWVy
VHJlZShzZXR0aW5ncykpIHsKQEAgLTE3Nyw2NSArMTQxLDI0IEBAIHZvaWQgQ0NIZWFkc1VwRGlz
cGxheTo6ZHJhd0h1ZENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ0NMYXllclRy
ZWVIb3N0CiAgICAgICAgIHBsYXRmb3JtTGF5ZXJUcmVlVG9wID0gMDsKIAogICAgIGlmIChzZXR0
aW5ncy5zaG93RlBTQ291bnRlcikKLSAgICAgICAgZHJhd0ZQU0NvdW50ZXIoY29udGV4dCwgZnBz
Q291bnRlclRvcCwgZnBzQ291bnRlckhlaWdodCk7CisgICAgICAgIGRyYXdGUFNDb3VudGVyKGNv
bnRleHQsIGxheWVyVHJlZUhvc3RJbXBsLT5mcHNDb3VudGVyKCksIGZwc0NvdW50ZXJUb3AsIGZw
c0NvdW50ZXJIZWlnaHQpOwogCiAgICAgaWYgKHNob3dQbGF0Zm9ybUxheWVyVHJlZShzZXR0aW5n
cykgJiYgbV9mb250QXRsYXMpIHsKICAgICAgICAgU3RyaW5nIGxheWVyVHJlZSA9IGxheWVyVHJl
ZUhvc3RJbXBsLT5sYXllclRyZWVBc1RleHQoKTsKICAgICAgICAgbV9mb250QXRsYXMtPmRyYXdU
ZXh0KGNvbnRleHQsIGxheWVyVHJlZSwgSW50UG9pbnQoMiwgcGxhdGZvcm1MYXllclRyZWVUb3Ap
LCBodWRTaXplKTsKICAgICB9Ci19CiAKLXZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6Z2V0QXZlcmFn
ZUZQU0FuZFN0YW5kYXJkRGV2aWF0aW9uKGRvdWJsZSAqYXZlcmFnZSwgZG91YmxlICpzdGFuZGFy
ZERldmlhdGlvbikgY29uc3QKLXsKLSAgICBkb3VibGUmIGF2ZXJhZ2VGUFMgPSAqYXZlcmFnZTsK
LQotICAgIGludCBmcmFtZSA9IG1fY3VycmVudEZyYW1lTnVtYmVyIC0gMTsgCi0gICAgYXZlcmFn
ZUZQUyA9IDA7Ci0gICAgaW50IGF2ZXJhZ2VGUFNDb3VudCA9IDA7Ci0gICAgZG91YmxlIGZwc1Zh
cmlhbmNlTnVtZXJhdG9yID0gMDsKLQotICAgIC8vIFdhbGsgYmFja3dhcmRzIHRocm91Z2ggdGhl
IHNhbXBsZXMgbG9va2luZyBmb3IgYSBydW4gb2YgZ29vZCBmcmFtZQotICAgIC8vIHRpbWluZ3Mg
ZnJvbSB3aGljaCB0byBjb21wdXRlIHRoZSBtZWFuIGFuZCBzdGFuZGFyZCBkZXZpYXRpb24uCi0g
ICAgLy8KLSAgICAvLyBTbG93IGZyYW1lcyBvY2N1ciBqdXN0IGJlY2F1c2UgdGhlIHVzZXIgaXMg
aW5hY3RpdmUsIGFuZCBzaG91bGQgYmUKLSAgICAvLyBpZ25vcmVkLiBGYXN0IGZyYW1lcyBhcmUg
aWdub3JlZCBpZiB0aGUgc2NoZWR1bGVyIGlzIGluIHNpbmdsZS10aHJlYWQKLSAgICAvLyBtb2Rl
IGluIG9yZGVyIHRvIHJlcHJlc2VudCB0aGUgdHJ1ZSBmcmFtZSByYXRlIGluIHNwaXRlIG9mIHRo
ZSBmYWN0IHRoYXQKLSAgICAvLyB0aGUgZmlyc3QgZmV3IHN3YXBidWZmZXJzIGhhcHBlbiBpbnN0
YW50bHkgd2hpY2ggc2tld3MgdGhlIHN0YXRpc3RpY3MKLSAgICAvLyB0b28gbXVjaCBmb3Igc2hv
cnQgbGl2ZWQgYW5pbWF0aW9ucy4KLSAgICAvLwotICAgIC8vIGlzQmFkRnJhbWUgZW5jYXBzdWxh
dGVzIHRoZSBmcmFtZSB0b28gc2xvdy9mcmFtZSB0b28gZmFzdCBsb2dpYy4KLSAgICB3aGlsZSAo
MSkgewotICAgICAgICBpZiAoIWlzQmFkRnJhbWUoZnJhbWUpKSB7Ci0gICAgICAgICAgICBhdmVy
YWdlRlBTQ291bnQrKzsKLSAgICAgICAgICAgIGRvdWJsZSBzZWNGb3JMYXN0RnJhbWUgPSBtX2Jl
Z2luVGltZUhpc3RvcnlJblNlY1tmcmFtZUluZGV4KGZyYW1lKV0gLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fYmVnaW5UaW1lSGlzdG9yeUluU2VjW2ZyYW1lSW5kZXgo
ZnJhbWUgLSAxKV07Ci0gICAgICAgICAgICBkb3VibGUgeCA9IDEuMCAvIHNlY0Zvckxhc3RGcmFt
ZTsKLSAgICAgICAgICAgIGRvdWJsZSBkZWx0YUZyb21BdmVyYWdlID0geCAtIGF2ZXJhZ2VGUFM7
Ci0gICAgICAgICAgICAvLyBDaGFuZ2Ugd2l0aCBjYXV0aW9uIC0gbnVtZXJpY3MuIGh0dHA6Ly9l
bi53aWtpcGVkaWEub3JnL3dpa2kvU3RhbmRhcmRfZGV2aWF0aW9uCi0gICAgICAgICAgICBhdmVy
YWdlRlBTID0gYXZlcmFnZUZQUyArIGRlbHRhRnJvbUF2ZXJhZ2UgLyBhdmVyYWdlRlBTQ291bnQ7
Ci0gICAgICAgICAgICBmcHNWYXJpYW5jZU51bWVyYXRvciA9IGZwc1ZhcmlhbmNlTnVtZXJhdG9y
ICsgZGVsdGFGcm9tQXZlcmFnZSAqICh4IC0gYXZlcmFnZUZQUyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGF2ZXJhZ2VGUFNDb3VudCAmJiBpc0JhZEZyYW1lKGZyYW1lKSkgewotICAgICAgICAg
ICAgLy8gV2UndmUgZ2F0aGVyZWQgYSBydW4gb2YgZ29vZCBzYW1wbGVzLCBzbyBzdG9wLgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgLS1mcmFtZTsKLSAgICAgICAgaWYg
KGZyYW1lSW5kZXgoZnJhbWUpID09IGZyYW1lSW5kZXgobV9jdXJyZW50RnJhbWVOdW1iZXIpIHx8
IGZyYW1lIDwgMCkgewotICAgICAgICAgICAgLy8gV2UndmUgZ29uZSB0aHJvdWdoIGFsbCBhdmFp
bGFibGUgaGlzdG9yaWNhbCBkYXRhLCBzbyBzdG9wLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAqc3RhbmRhcmREZXZpYXRpb24gPSBzcXJ0KGZwc1ZhcmlhbmNl
TnVtZXJhdG9yIC8gYXZlcmFnZUZQU0NvdW50KTsKKyAgICBpZiAoc2hvd0RlYnVnUmVjdHMoc2V0
dGluZ3MpKQorICAgICAgICBkcmF3RGVidWdSZWN0cyhjb250ZXh0LCBsYXllclRyZWVIb3N0SW1w
bC0+ZGVidWdSZWN0SGlzdG9yeSgpLCBzZXR0aW5ncyk7CiB9CiAKLXZvaWQgQ0NIZWFkc1VwRGlz
cGxheTo6ZHJhd0ZQU0NvdW50ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgdG9wLCBp
bnQgaGVpZ2h0KQordm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3RlBTQ291bnRlcihHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIENDRnBzQ291bnRlciogZnBzQ291bnRlciwgaW50IHRvcCwgaW50
IGhlaWdodCkKIHsKICAgICBmbG9hdCB0ZXh0V2lkdGggPSAxNzA7IC8vIHNvIHRleHQgZml0cyBv
biBsaW51eC4KLSAgICBmbG9hdCBncmFwaFdpZHRoID0ga0JlZ2luRnJhbWVIaXN0b3J5U2l6ZTsK
KyAgICBmbG9hdCBncmFwaFdpZHRoID0gZnBzQ291bnRlci0+dGltZVN0YW1wSGlzdG9yeVNpemUo
KTsKIAogICAgIC8vIERyYXcgdGhlIEZQUyB0ZXh0LgotICAgIGRyYXdGUFNDb3VudGVyVGV4dChj
b250ZXh0LCB0b3AsIHRleHRXaWR0aCwgaGVpZ2h0KTsKKyAgICBkcmF3RlBTQ291bnRlclRleHQo
Y29udGV4dCwgZnBzQ291bnRlciwgdG9wLCB0ZXh0V2lkdGgsIGhlaWdodCk7CiAKICAgICAvLyBE
cmF3IEZQUyBncmFwaC4KICAgICBjb25zdCBkb3VibGUgbG9GUFMgPSAwOwpAQCAtMjUyLDE4ICsx
NzUsMjYgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3RlBTQ291bnRlcihHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGludCB0b3AsIGludCBoZWkKICAgICBJbnRQb2ludCBwcmV2KC0xLCAw
KTsKICAgICBpbnQgeCA9IDA7CiAgICAgZG91YmxlIGggPSBzdGF0aWNfY2FzdDxkb3VibGU+KGhl
aWdodCAtIDIpOwotICAgIGZvciAoaW50IGkgPSBtX2N1cnJlbnRGcmFtZU51bWJlciAlIGtCZWdp
bkZyYW1lSGlzdG9yeVNpemU7IGkgIT0gKG1fY3VycmVudEZyYW1lTnVtYmVyIC0gMSkgJSBrQmVn
aW5GcmFtZUhpc3RvcnlTaXplOyBpID0gKGkgKyAxKSAlIGtCZWdpbkZyYW1lSGlzdG9yeVNpemUp
IHsKLSAgICAgICAgaW50IGogPSAoaSArIDEpICUga0JlZ2luRnJhbWVIaXN0b3J5U2l6ZTsKLSAg
ICAgICAgZG91YmxlIGZwcyA9IDEuMCAvIChtX2JlZ2luVGltZUhpc3RvcnlJblNlY1tqXSAtIG1f
YmVnaW5UaW1lSGlzdG9yeUluU2VjW2ldKTsKLSAgICAgICAgaWYgKGlzQmFkRnJhbWUoaikpIHsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZwc0NvdW50ZXItPnRpbWVTdGFtcEhpc3RvcnlTaXpl
KCkgLSAxOyArK2kpIHsKKyAgICAgICAgaW50IGogPSBpICsgMTsKKyAgICAgICAgZG91YmxlIGRl
bHRhID0gZnBzQ291bnRlci0+dGltZVN0YW1wT2ZSZWNlbnRGcmFtZShqKSAtIGZwc0NvdW50ZXIt
PnRpbWVTdGFtcE9mUmVjZW50RnJhbWUoaSk7CisKKyAgICAgICAgLy8gU2tpcCBwbG90dGluZyB0
aGlzIHBhcnRpY3VsYXIgaW5zdGFudGFuZW91cyBmcmFtZSByYXRlIGlmIGl0IGlzIG5vdCBsaWtl
bHkgdG8gaGF2ZSBiZWVuIHZhbGlkLgorICAgICAgICBpZiAoZnBzQ291bnRlci0+aXNCYWRGcmFt
ZUludGVydmFsKGRlbHRhKSkgewogICAgICAgICAgICAgeCArPSAxOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KKworICAgICAgICBkb3VibGUgZnBzID0gMS4wIC8gZGVsdGE7CisK
KyAgICAgICAgLy8gQ2xhbXAgdGhlIEZQUyB0byB0aGUgcmFuZ2Ugd2Ugd2FudCB0byBwbG90IHZp
c3VhbGx5LgogICAgICAgICBkb3VibGUgcCA9IDEgLSAoKGZwcyAtIGxvRlBTKSAvIChoaUZQUyAt
IGxvRlBTKSk7CiAgICAgICAgIGlmIChwIDwgMCkKICAgICAgICAgICAgIHAgPSAwOwogICAgICAg
ICBpZiAocCA+IDEpCiAgICAgICAgICAgICBwID0gMTsKKworICAgICAgICAvLyBQbG90IHRoaXMg
ZGF0YSBwb2ludC4KICAgICAgICAgSW50UG9pbnQgY3VyKGdyYXBoTGVmdCArIHgsIDEgKyB0b3Ag
KyBwKmgpOwogICAgICAgICBpZiAocHJldi54KCkgIT0gLTEpCiAgICAgICAgICAgICBjb250ZXh0
LT5kcmF3TGluZShwcmV2LCBjdXIpOwpAQCAtMjcyLDEwICsyMDMsMTAgQEAgdm9pZCBDQ0hlYWRz
VXBEaXNwbGF5OjpkcmF3RlBTQ291bnRlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0
b3AsIGludCBoZWkKICAgICB9CiB9CiAKLXZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0ZQU0Nv
dW50ZXJUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgaW50IHRvcCwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQordm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3RlBTQ291bnRlclRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBDQ0Zwc0NvdW50ZXIqIGZwc0NvdW50ZXIsIGludCB0b3As
IGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKICAgICBkb3VibGUgYXZlcmFnZUZQUywgc3RkRGV2
aWF0aW9uOwotICAgIGdldEF2ZXJhZ2VGUFNBbmRTdGFuZGFyZERldmlhdGlvbigmYXZlcmFnZUZQ
UywgJnN0ZERldmlhdGlvbik7CisgICAgZnBzQ291bnRlci0+Z2V0QXZlcmFnZUZQU0FuZFN0YW5k
YXJkRGV2aWF0aW9uKGF2ZXJhZ2VGUFMsIHN0ZERldmlhdGlvbik7CiAKICAgICAvLyBEcmF3IGJh
Y2tncm91bmQuCiAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yKDAsIDAsIDAsIDI1NSks
IENvbG9yU3BhY2VEZXZpY2VSR0IpOwpAQCAtMjg2LDYgKzIxNywzOSBAQCB2b2lkIENDSGVhZHNV
cERpc3BsYXk6OmRyYXdGUFNDb3VudGVyVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGlu
dCB0b3AsIGludAogICAgICAgICBtX2ZvbnRBdGxhcy0+ZHJhd1RleHQoY29udGV4dCwgU3RyaW5n
Ojpmb3JtYXQoIkZQUzogJTQuMWYgKy8tICUzLjFmIiwgYXZlcmFnZUZQUywgc3RkRGV2aWF0aW9u
KSwgSW50UG9pbnQoMTAsIGhlaWdodCAvIDMpLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKIH0K
IAordm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3RGVidWdSZWN0cyhHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIENDRGVidWdSZWN0SGlzdG9yeSogZGVidWdSZWN0SGlzdG9yeSwgY29uc3QgQ0NT
ZXR0aW5ncyYgc2V0dGluZ3MpCit7CisgICAgaWYgKHNldHRpbmdzLnNob3dQYWludFJlY3RzKSB7
CisgICAgICAgIC8vIHBhaW50IHJlY3RzIGluIHJlZAorICAgICAgICBjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYgcGFpbnRSZWN0cyA9IGRlYnVnUmVjdEhpc3RvcnktPnBhaW50UmVjdHMoKTsKKyAg
ICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMjU1LCAwLCAwLCAyNTUpLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYWludFJl
Y3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdChwYWludFJl
Y3RzW2ldLCBDb2xvcigyNTUsIDAsIDAsIDMwKSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAg
ICAgICAgICBjb250ZXh0LT5zdHJva2VSZWN0KHBhaW50UmVjdHNbaV0sIDIuMCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoc2V0dGluZ3Muc2hvd1Byb3BlcnR5Q2hhbmdlZFJlY3RzKSB7
CisgICAgICAgIC8vIGRyYXcgcmVjdHMgaW4gYmx1ZQorICAgICAgICBjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYgcHJvcGVydHlDaGFuZ2VkUmVjdHMgPSBkZWJ1Z1JlY3RIaXN0b3J5LT5wcm9wZXJ0
eUNoYW5nZWRSZWN0cygpOworICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcigw
LCAwLCAyNTUsIDI1NSksIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHByb3BlcnR5Q2hhbmdlZFJlY3RzLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5maWxsUmVjdChwcm9wZXJ0eUNoYW5nZWRSZWN0c1tpXSwgQ29sb3IoMCwg
MCwgMjU1LCAzMCksIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICAgICAgY29udGV4dC0+
c3Ryb2tlUmVjdChwcm9wZXJ0eUNoYW5nZWRSZWN0c1tpXSwgMi4wKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChzZXR0aW5ncy5zaG93U3VyZmFjZURhbWFnZVJlY3RzKSB7CisgICAgICAg
IC8vIGRhbWFnZSByZWN0cyBpbiB5ZWxsb3cKKyAgICAgICAgY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mIHN1cmZhY2VEYW1hZ2VSZWN0cyA9IGRlYnVnUmVjdEhpc3RvcnktPnN1cmZhY2VEYW1hZ2VS
ZWN0cygpOworICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcigyMDAsIDEwMCwg
MCwgMjU1KSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc3VyZmFjZURhbWFnZVJlY3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb250
ZXh0LT5maWxsUmVjdChzdXJmYWNlRGFtYWdlUmVjdHNbaV0sIENvbG9yKDIwMCwgMTAwLCAwLCAz
MCksIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUmVj
dChzdXJmYWNlRGFtYWdlUmVjdHNbaV0sIDIuMCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIH0K
IAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3Bs
YXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVh
ZHNVcERpc3BsYXkuaAppbmRleCA3ZWMwNWIwMTY3ZTY2NWZjOTMxYTFiZGIwNDUxNTg3MWZhZGEx
NjE1Li5mYzViZDliNTk2MDIwNGM4ODMwZjY2ZThlNjhkOGI4N2FiOWY2OWNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBE
aXNwbGF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NIZWFkc1VwRGlzcGxheS5oCkBAIC0zMyw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgQ0NEZWJ1Z1JlY3RIaXN0b3J5OworY2xhc3MgQ0NGcHNDb3VudGVyOwog
Y2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNz
IE1hbmFnZWRUZXh0dXJlOwpAQCAtNTEsNDAgKzUzLDIzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
c2V0Rm9udEF0bGFzKFBhc3NPd25QdHI8Q0NGb250QXRsYXM+KTsKIAotICAgIGludCBjdXJyZW50
RnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRGcmFtZU51bWJlcjsgfQotCi0g
ICAgdm9pZCBvbkZyYW1lQmVnaW4oZG91YmxlIHRpbWVzdGFtcCk7Ci0gICAgdm9pZCBvblN3YXBC
dWZmZXJzKCk7Ci0KICAgICBib29sIGVuYWJsZWQoY29uc3QgQ0NTZXR0aW5ncyYpIGNvbnN0Owog
ICAgIHZvaWQgZHJhdyhDQ0xheWVyVHJlZUhvc3RJbXBsKik7CiAKICAgICB0eXBlZGVmIFByb2dy
YW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4U3dpenps
ZUFscGhhPiBQcm9ncmFtOwogCiBwcml2YXRlOgotICAgIENDSGVhZHNVcERpc3BsYXkoKTsKKyAg
ICBDQ0hlYWRzVXBEaXNwbGF5KCkgeyB9OwogCiAgICAgdm9pZCBkcmF3SHVkQ29udGVudHMoR3Jh
cGhpY3NDb250ZXh0KiwgQ0NMYXllclRyZWVIb3N0SW1wbCosIGNvbnN0IENDU2V0dGluZ3MmLCBj
b25zdCBJbnRTaXplJiBodWRTaXplKTsKLSAgICB2b2lkIGRyYXdGUFNDb3VudGVyKEdyYXBoaWNz
Q29udGV4dCosIGludCB0b3AsIGludCBoZWlnaHQpOwotICAgIHZvaWQgZHJhd0ZQU0NvdW50ZXJU
ZXh0KEdyYXBoaWNzQ29udGV4dCosIGludCB0b3AsIGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0g
ICAgYm9vbCBpc0JhZEZyYW1lKGludCBmcmFtZU51bWJlcikgY29uc3Q7Ci0gICAgaW50IGZyYW1l
SW5kZXgoaW50IGZyYW1lTnVtYmVyKSBjb25zdDsKLSAgICB2b2lkIGdldEF2ZXJhZ2VGUFNBbmRT
dGFuZGFyZERldmlhdGlvbihkb3VibGUgKmF2ZXJhZ2UsIGRvdWJsZSAqc3RhbmRhcmREZXZpYXRp
b24pIGNvbnN0OworICAgIHZvaWQgZHJhd0ZQU0NvdW50ZXIoR3JhcGhpY3NDb250ZXh0KiwgQ0NG
cHNDb3VudGVyKiwgaW50IHRvcCwgaW50IGhlaWdodCk7CisgICAgdm9pZCBkcmF3RlBTQ291bnRl
clRleHQoR3JhcGhpY3NDb250ZXh0KiwgQ0NGcHNDb3VudGVyKiwgaW50IHRvcCwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KTsKKyAgICB2b2lkIGRyYXdEZWJ1Z1JlY3RzKEdyYXBoaWNzQ29udGV4dCos
IENDRGVidWdSZWN0SGlzdG9yeSosIGNvbnN0IENDU2V0dGluZ3MmKTsKIAogICAgIGJvb2wgc2hv
d1BsYXRmb3JtTGF5ZXJUcmVlKGNvbnN0IENDU2V0dGluZ3MmKSBjb25zdDsKLQotICAgIGludCBt
X2N1cnJlbnRGcmFtZU51bWJlcjsKKyAgICBib29sIHNob3dEZWJ1Z1JlY3RzKGNvbnN0IENDU2V0
dGluZ3MmKSBjb25zdDsKIAogICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV9odWRUZXh0dXJl
OwotCi0gICAgc3RhdGljIGNvbnN0IGludCBrQmVnaW5GcmFtZUhpc3RvcnlTaXplID0gMTIwOwot
ICAgIC8vIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBvZiBubyBmcmFtZXMgbWFrZXMgdXMgZGVjaWRl
IHRoYXQgdGhlIHByZXZpb3VzCi0gICAgLy8gYW5pbWF0aW9uIGlzIG92ZXIuCi0gICAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBrSWRsZVNlY29uZHNUcmlnZ2Vyc1Jlc2V0OwotICAgIGRvdWJsZSBtX2Jl
Z2luVGltZUhpc3RvcnlJblNlY1trQmVnaW5GcmFtZUhpc3RvcnlTaXplXTsKLSAgICBzdGF0aWMg
Y29uc3QgZG91YmxlIGtGcmFtZVRvb0Zhc3Q7Ci0gICAgc3RhdGljIGNvbnN0IGludCBrTnVtTWlz
c2VkRnJhbWVzRm9yUmVzZXQgPSA1OwotCiAgICAgT3duUHRyPENDRm9udEF0bGFzPiBtX2ZvbnRB
dGxhczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggMjAyODgwNDgzOTAy
MTQyZWIyYWY0Y2I0YWI1NTNkM2VjMjJjYTY2Mi4uZDM3YTJiZTk2NzY4OGM0YWY1YzY3YmI0NWU4
NWQ1OGVlNTkyMTJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTc2LDYgKzc2
LDkgQEAgc3RydWN0IENDU2V0dGluZ3MgewogICAgICAgICAgICAgOiBhY2NlbGVyYXRlUGFpbnRp
bmcoZmFsc2UpCiAgICAgICAgICAgICAsIHNob3dGUFNDb3VudGVyKGZhbHNlKQogICAgICAgICAg
ICAgLCBzaG93UGxhdGZvcm1MYXllclRyZWUoZmFsc2UpCisgICAgICAgICAgICAsIHNob3dQYWlu
dFJlY3RzKGZhbHNlKQorICAgICAgICAgICAgLCBzaG93UHJvcGVydHlDaGFuZ2VkUmVjdHMoZmFs
c2UpCisgICAgICAgICAgICAsIHNob3dTdXJmYWNlRGFtYWdlUmVjdHMoZmFsc2UpCiAgICAgICAg
ICAgICAsIHJlZnJlc2hSYXRlKDApCiAgICAgICAgICAgICAsIHBlclRpbGVQYWludGluZyhmYWxz
ZSkKICAgICAgICAgICAgICwgcGFydGlhbFN3YXBFbmFibGVkKGZhbHNlKQpAQCAtODUsNiArODgs
OSBAQCBzdHJ1Y3QgQ0NTZXR0aW5ncyB7CiAgICAgYm9vbCBhY2NlbGVyYXRlUGFpbnRpbmc7CiAg
ICAgYm9vbCBzaG93RlBTQ291bnRlcjsKICAgICBib29sIHNob3dQbGF0Zm9ybUxheWVyVHJlZTsK
KyAgICBib29sIHNob3dQYWludFJlY3RzOworICAgIGJvb2wgc2hvd1Byb3BlcnR5Q2hhbmdlZFJl
Y3RzOworICAgIGJvb2wgc2hvd1N1cmZhY2VEYW1hZ2VSZWN0czsKICAgICBkb3VibGUgcmVmcmVz
aFJhdGU7CiAgICAgYm9vbCBwZXJUaWxlUGFpbnRpbmc7CiAgICAgYm9vbCBwYXJ0aWFsU3dhcEVu
YWJsZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGZhNTM1
NjMwOTA0YWUyYTJhNDlhZGQ3NmU5OTNiZDRlODczYmRkYjguLmM3ZGNhYTEwNmMzYzRjNTczMGQ0
NjFiOTViMDZhYWQyM2IwNWVlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwCkBAIC0zMiw3ICszMiw5IEBACiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1
ZGUgImNjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDRGFtYWdl
VHJhY2tlci5oIgorI2luY2x1ZGUgImNjL0NDRGVidWdSZWN0SGlzdG9yeS5oIgogI2luY2x1ZGUg
ImNjL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2UuaCIKKyNpbmNsdWRlICJjYy9DQ0Zwc0NvdW50ZXIu
aCIKICNpbmNsdWRlICJjYy9DQ0dlc3R1cmVDdXJ2ZS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJ
dGVyYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgpAQCAtMTE3LDYgKzEx
OSw4IEBAIENDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NT
ZXR0aW5ncyYgc2V0dGluZ3MsIENDTGF5ZXJUcmVlCiAgICAgLCBtX25lZWRzQW5pbWF0ZUxheWVy
cyhmYWxzZSkKICAgICAsIG1fcGluY2hHZXN0dXJlQWN0aXZlKGZhbHNlKQogICAgICwgbV90aW1l
U291cmNlQ2xpZW50QWRhcHRlcihDQ0xheWVyVHJlZUhvc3RJbXBsVGltZVNvdXJjZUFkYXB0ZXI6
OmNyZWF0ZSh0aGlzLCBDQ0RlbGF5QmFzZWRUaW1lU291cmNlOjpjcmVhdGUobG93RnJlcXVlbmN5
QW5pbWF0aW9uSW50ZXJ2YWwgKiAxMDAwLjAsIENDUHJveHk6OmN1cnJlbnRUaHJlYWQoKSkpKQor
ICAgICwgbV9mcHNDb3VudGVyKENDRnBzQ291bnRlcjo6Y3JlYXRlKCkpCisgICAgLCBtX2RlYnVn
UmVjdEhpc3RvcnkoQ0NEZWJ1Z1JlY3RIaXN0b3J5OjpjcmVhdGUoKSkKIHsKICAgICBBU1NFUlQo
Q0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIGRpZFZpc2liaWxpdHlDaGFuZ2UodGhpcywg
bV92aXNpYmxlKTsKQEAgLTI1Nyw3ICsyNjEsNyBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6
OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDTGF5ZQog
CiAgICAgVFJBQ0VfRVZFTlQxKCJ3ZWJraXQiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3Vs
YXRlUmVuZGVyUGFzc2VzIiwgInJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIiwgc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nIHVuc2lnbmVkPihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSkp
OwogCi0gICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2Fw
KQorICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCB8
fCBzZXR0aW5ncygpLnNob3dTdXJmYWNlRGFtYWdlUmVjdHMpCiAgICAgICAgIHRyYWNrRGFtYWdl
Rm9yQWxsU3VyZmFjZXMobV9yb290TGF5ZXJJbXBsLmdldCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKICAgICBtX3Jvb3REYW1hZ2VSZWN0ID0gbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJm
YWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKIApAQCAtMzk0LDgg
KzM5OCw4IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyhjb25zdCBGcmFt
ZURhdGEmIGZyYW1lKQogICAgIC8vIEZJWE1FOiB1c2UgdGhlIGZyYW1lIGJlZ2luIHRpbWUgZnJv
bSB0aGUgb3ZlcmFsbCBjb21wb3NpdG9yIHNjaGVkdWxlci4KICAgICAvLyBUaGlzIHZhbHVlIGlz
IGN1cnJlbnRseSBpbmFjY2Vzc2libGUgYmVjYXVzZSBpdCBpcyB1cCBpbiBDaHJvbWl1bSdzCiAg
ICAgLy8gUmVuZGVyV2lkZ2V0LgotICAgIG1faGVhZHNVcERpc3BsYXktPm9uRnJhbWVCZWdpbihj
dXJyZW50VGltZSgpKTsKIAorICAgIG1fZnBzQ291bnRlci0+bWFya0JlZ2lubmluZ09mRnJhbWUo
Y3VycmVudFRpbWUoKSk7CiAgICAgbV9sYXllclJlbmRlcmVyLT5iZWdpbkRyYXdpbmdGcmFtZSht
X3Jvb3RMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZyYW1lLnJlbmRlclBhc3Nlcy5zaXplKCk7ICsraSkKQEAgLTQwOCw2ICs0MTIsMTAg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKGNvbnN0IEZyYW1lRGF0YSYg
ZnJhbWUpCiAgICAgICAgIGlmIChpdC5yZXByZXNlbnRzSXRzZWxmKCkgJiYgIWl0LT52aXNpYmxl
TGF5ZXJSZWN0KCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgaXQtPmRpZERyYXcoKTsKICAgICB9
CisKKyAgICBpZiAobV9kZWJ1Z1JlY3RIaXN0b3J5LT5lbmFibGVkKHNldHRpbmdzKCkpKQorICAg
ICAgICBtX2RlYnVnUmVjdEhpc3RvcnktPnNhdmVEZWJ1Z1JlY3RzRm9yQ3VycmVudEZyYW1lKG1f
cm9vdExheWVySW1wbC5nZXQoKSwgZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgc2V0dGlu
Z3MoKSk7CisKICAgICBpZiAobV9oZWFkc1VwRGlzcGxheS0+ZW5hYmxlZChzZXR0aW5ncygpKSkK
ICAgICAgICAgbV9oZWFkc1VwRGlzcGxheS0+ZHJhdyh0aGlzKTsKIApAQCAtNDQzLDcgKzQ1MSw4
IEBAIFRleHR1cmVBbGxvY2F0b3IqIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRlbnRzVGV4dHVy
ZUFsbG9jYXRvcigpIGNvbnN0CiBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN3YXBCdWZmZXJz
KCkKIHsKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKLSAgICBtX2hlYWRzVXBEaXNwbGF5
LT5vblN3YXBCdWZmZXJzKCk7CisKKyAgICBtX2Zwc0NvdW50ZXItPm1hcmtFbmRPZkZyYW1lKCk7
CiAgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+c3dhcEJ1ZmZlcnMoZW5jbG9zaW5nSW50UmVj
dChtX3Jvb3REYW1hZ2VSZWN0KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaAppbmRleCA0NWFiMWYwNTIwYWNjODUxNmZhMzZhNzUxMjA1ZTMyNjg2ZGQ4NmJjLi4wY2U1
NDUzYTIyOWRhNDU3Y2JlOTFkMTdjOTllYTA0NzM1OGYxZjZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCkBAIC00MCw3ICs0MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOwogY2xhc3MgQ0NDb21wbGV0aW9uRXZl
bnQ7CitjbGFzcyBDQ0RlYnVnUmVjdEhpc3Rvcnk7CiBjbGFzcyBDQ0ZvbnRBdGxhczsKK2NsYXNz
IENDRnBzQ291bnRlcjsKIGNsYXNzIENDUGFnZVNjYWxlQW5pbWF0aW9uOwogY2xhc3MgQ0NMYXll
ckltcGw7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsVGltZVNvdXJjZUFkYXB0ZXI7CkBAIC0x
NTAsNiArMTUyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOwogCisg
ICAgQ0NGcHNDb3VudGVyKiBmcHNDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9mcHNDb3VudGVy
LmdldCgpOyB9CisgICAgQ0NEZWJ1Z1JlY3RIaXN0b3J5KiBkZWJ1Z1JlY3RIaXN0b3J5KCkgY29u
c3QgeyByZXR1cm4gbV9kZWJ1Z1JlY3RIaXN0b3J5LmdldCgpOyB9CisKIHByb3RlY3RlZDoKICAg
ICBDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmLCBDQ0xheWVyVHJlZUhvc3RJ
bXBsQ2xpZW50Kik7CiAKQEAgLTIxNSw2ICsyMjAsOSBAQCBwcml2YXRlOgogICAgIENDTGF5ZXJM
aXN0IG1fbW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAKICAgICBGbG9hdFJlY3Qg
bV9yb290RGFtYWdlUmVjdDsKKworICAgIE93blB0cjxDQ0Zwc0NvdW50ZXI+IG1fZnBzQ291bnRl
cjsKKyAgICBPd25QdHI8Q0NEZWJ1Z1JlY3RIaXN0b3J5PiBtX2RlYnVnUmVjdEhpc3Rvcnk7CiB9
OwogCiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138152</attachid>
            <date>2012-04-20 13:45:39 -0700</date>
            <delta_ts>2012-04-23 10:56:48 -0700</delta_ts>
            <desc>Addressed reviewer comments</desc>
            <filename>bug-79400-20120420134538.patch</filename>
            <type>text/plain</type>
            <size>43262</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0Nzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWFmZGYyY2MzNjQ5YmEw
ZDA1MGUwZGIwOTFmZjVkMmI3MDE4M2ZiNy4uNTllMDFlYTJmNjBmOGU5OTZjZDY5NjRhYmE1YmNk
NmQzYWRkOTQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDEyLTA0LTIwICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
VmlzdWFsaXplIGFjY2VsZXJhdGVkIGNvbXBvc2l0b3IgcmVjdHMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTQwMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIHRlc3RzLCBhbGwgdGhlIGNvZGUgYWRk
ZWQgaXMgb25seSBkZWJ1Z2dpbmcgY29kZS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc3Vw
cG9ydCBmb3IgdmlzdWFsaXppbmcgdGhyZWUgZGlmZmVyZW50IHR5cGVzIG9mCisgICAgICAgIHJl
Y3RzIG9uIHRoZSBjaHJvbWl1bSBoZWFkcy11cCBkaXNwbGF5OgorICAgICAgICAxLiB1cGRhdGVS
ZWN0cyB0aGF0IGluZGljYXRlIHdoYXQgd2FzIHBhaW50ZWQvdXBsb2FkZWQgdG8gYSByZXNvdXJj
ZQorICAgICAgICAyLiBwcm9wZXJ0eUNoYW5nZWRSZWN0cyB0aGF0IGluZGljYXRlIGxheWVycyB0
aGF0IGhhcyBwcm9wZXJ0eSBjaGFuZ2VzCisgICAgICAgIDMuIHN1cmZhY2VEYW1hZ2VSZWN0cyB0
aGF0IGFyZSB0aGUgYWNjdW11bGF0aW9uIG9mIHVwZGF0ZVJlY3RzIGFuZAorICAgICAgICAgICBw
cm9wZXJ0eUNoYW5nZWRSZWN0cywgaW5kaWNhdGluZyB3aGF0IHBpeGVscyBvbiB0aGUgc2NyZWVu
IGhhdmUKKyAgICAgICAgICAgYWN0dWFsbHkgY2hhbmdlZC4gIChTdXJmYWNlIGRhbWFnZSBhbHNv
IGFjY291bnRzIGZvciBuZXdseSBleHBvc2VkCisgICAgICAgICAgIGFyZWFzIGJ1dCB0aGF0IGlz
IG5vdCBleHBsaWNpdGx5IHZpc3VhbGl6ZWQuKQorCisgICAgICAgIEluIGFkZGl0aW9uIHRvIGFk
ZGluZyBzdXBwb3J0IGZvciB2aXN1YWxpemluZyB0aGlzLCB0aGUKKyAgICAgICAgQ0NIZWFkc1Vw
RGlzcGxheSB3YXMgc2lnbmlmaWNhbnRseSByZWZhY3RvcmVkLCBzZXBhcmF0aW5nIHRoZSBGUFMK
KyAgICAgICAgQ291bnRlciBmdW5jdGlvbmFsaXR5IGludG8gYSBkaWZmZXJlbnQgY2xhc3MsIHNv
IHRoYXQgdGhlIGhlYWRzLXVwCisgICAgICAgIGRpc3BsYXkgaXMgYWxsIGFib3V0IHZpc3VhbGl6
aW5nIGFubm90YXRpb25zLCBhbmQgdGhvc2UKKyAgICAgICAgYW5ub3RhdGlvbnMgKGZyYW1lIHJh
dGUsIGRlYnVnIHJlY3RzKSBhcmUgbG9nZ2VkIHNlcGFyYXRlbHkuCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1
Z1JlY3RIaXN0b3J5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDRGVidWdSZWN0SGlzdG9yeTo6Q0NEZWJ1Z1JlY3RIaXN0b3J5KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRGVidWdSZWN0SGlzdG9yeTo6ZW5hYmxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0RlYnVnUmVjdEhpc3Rvcnk6OnNhdmVEZWJ1Z1JlY3RzRm9yQ3VycmVudEZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDRGVidWdSZWN0SGlzdG9yeTo6c2F2ZVBhaW50UmVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NEZWJ1Z1JlY3RIaXN0b3J5OjpzYXZlUHJvcGVydHlDaGFuZ2VkUmVj
dHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEZWJ1Z1JlY3RIaXN0b3J5OjpzYXZlU3VyZmFjZURh
bWFnZVJlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Rl
YnVnUmVjdEhpc3RvcnkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDRGVidWdSZWN0OjpDQ0RlYnVnUmVjdCk6CisgICAgICAgIChDQ0RlYnVnUmVjdCk6
CisgICAgICAgIChDQ0RlYnVnUmVjdEhpc3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEZWJ1
Z1JlY3RIaXN0b3J5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEZWJ1Z1JlY3RIaXN0
b3J5OjpkZWJ1Z1JlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0ZyYW1lUmF0ZUNvdW50ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6c2FmZU1vZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNv
dW50ZXI6OmZyYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb3VudGVy
OjpDQ0ZyYW1lUmF0ZUNvdW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb3Vu
dGVyOjptYXJrQmVnaW5uaW5nT2ZGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0
ZUNvdW50ZXI6Om1hcmtFbmRPZkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRl
Q291bnRlcjo6aXNCYWRGcmFtZUludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVS
YXRlQ291bnRlcjo6aXNCYWRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNv
dW50ZXI6OmdldEF2ZXJhZ2VGUFNBbmRTdGFuZGFyZERldmlhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDQ0ZyYW1lUmF0ZUNvdW50ZXI6OnRpbWVTdGFtcE9mUmVjZW50RnJhbWUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ291bnRlci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NGcmFtZVJhdGVDb3VudGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ291bnRlcjo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRnJhbWVSYXRlQ291bnRlcjo6Y3VycmVudEZyYW1lTnVtYmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ291bnRlcjo6dGltZVN0YW1wSGlzdG9yeVNpemUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXku
Y3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNw
bGF5OjplbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OnNob3dE
ZWJ1Z1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6ZHJhd0h1ZENvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmRyYXdGUFNDb3VudGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmRyYXdGUFNDb3VudGVyVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3RGVidWdSZWN0cyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0hlYWRzVXBEaXNwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OkNDSGVhZHNVcERpc3BsYXkpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTZXR0aW5nczo6Q0NTZXR0aW5ncyk6CisgICAgICAgIChDQ1NldHRpbmdzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJU
cmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2Fs
Y3VsYXRlUmVuZGVyUGFzc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdElt
cGw6OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6
c3dhcEJ1ZmZlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZnBzQ291bnRlcik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpkZWJ1Z1JlY3RIaXN0b3J5KToKKyAgICAgICAgKENDTGF5ZXJU
cmVlSG9zdEltcGwpOgorCiAyMDEyLTA0LTE3ICBBbnRvbmlvIEdvbWVzICA8YWdvbWVzQHJpbS5j
b20+CiAKICAgICAgICAgUmVsYXggU2Nyb2xsVmlldzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25XaXRo
aW5SYW5nZSBpbiBjYXNlIGNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlIGlzIGZhbHNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggNDVlZDk2ZTA1ODIwM2E2YTkzNTNiYTI4YmRkNGQwZjQ5OGUx
MTVlNC4uYzYwYzNlMDc5MTU0YmMwOGFlMTA5MDhmOGM2Nzg0NjI2MmY0NTJlNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQpAQCAtMzYwOSwxMiArMzYwOSwxNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJh
d1F1YWQuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NE
ZWJ1Z1JlY3RIaXN0b3J5LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NEZWJ1Z1JlY3RIaXN0b3J5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2UuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNl
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1
YWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Ry
YXdRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
Rm9udEF0bGFzLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NGb250QXRsYXMuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NGcmFtZVJhdGVDb3VudGVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb3VudGVyLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29u
dHJvbGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0dlc3R1cmVDdXJ2ZS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdSZWN0SGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnUmVjdEhpc3RvcnkuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjNjODhkY2M0MDAzYTY2OTE4OTNmNzViNTQ1ZmYwZDY0OTVkODg4MTEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0RlYnVnUmVjdEhpc3RvcnkuY3BwCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisjaW5jbHVkZSAiQ0NEZWJ1Z1JlY3RIaXN0b3J5LmgiCisKKyNpbmNsdWRlICJDQ0RhbWFnZVRy
YWNrZXIuaCIKKyNpbmNsdWRlICJDQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgIkNDTGF5ZXJUcmVl
SG9zdC5oIgorI2luY2x1ZGUgIkNDTWF0aFV0aWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitDQ0RlYnVnUmVjdEhpc3Rvcnk6OkNDRGVidWdSZWN0SGlzdG9yeSgpCit7Cit9CisKK2Jvb2wg
Q0NEZWJ1Z1JlY3RIaXN0b3J5OjplbmFibGVkKGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQor
eworICAgIHJldHVybiBzZXR0aW5ncy5zaG93UGFpbnRSZWN0cyB8fCBzZXR0aW5ncy5zaG93UHJv
cGVydHlDaGFuZ2VkUmVjdHMgfHwgc2V0dGluZ3Muc2hvd1N1cmZhY2VEYW1hZ2VSZWN0czsKK30K
Kwordm9pZCBDQ0RlYnVnUmVjdEhpc3Rvcnk6OnNhdmVEZWJ1Z1JlY3RzRm9yQ3VycmVudEZyYW1l
KENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0IFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykKK3sKKyAgICAv
LyBGb3Igbm93LCBjbGVhciBhbGwgcmVjdHMgZnJvbSBwcmV2aW91cyBmcmFtZXMuIEluIHRoZSBm
dXR1cmUgd2UgbWF5IHdhbnQgdG8gc3RvcmUKKyAgICAvLyBhbGwgZGVidWcgcmVjdHMgZm9yIGEg
aGlzdG9yeSBvZiBtYW55IGZyYW1lcy4KKyAgICBtX2RlYnVnUmVjdHMuY2xlYXIoKTsKKworICAg
IGlmIChzZXR0aW5ncy5zaG93UGFpbnRSZWN0cykKKyAgICAgICAgc2F2ZVBhaW50UmVjdHMocm9v
dExheWVyKTsKKworICAgIGlmIChzZXR0aW5ncy5zaG93UHJvcGVydHlDaGFuZ2VkUmVjdHMpCisg
ICAgICAgIHNhdmVQcm9wZXJ0eUNoYW5nZWRSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsK
KworICAgIGlmIChzZXR0aW5ncy5zaG93U3VyZmFjZURhbWFnZVJlY3RzKQorICAgICAgICBzYXZl
U3VyZmFjZURhbWFnZVJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworfQorCisKK3ZvaWQg
Q0NEZWJ1Z1JlY3RIaXN0b3J5OjpzYXZlUGFpbnRSZWN0cyhDQ0xheWVySW1wbCogbGF5ZXIpCit7
CisgICAgLy8gV2Ugd291bGQgbGlrZSB0byB2aXN1YWxpemUgd2hlcmUgYW55IGxheWVyJ3MgcGFp
bnQgcmVjdCAodXBkYXRlIHJlY3QpIGhhcyBjaGFuZ2VkLAorICAgIC8vIHJlZ2FyZGxlc3Mgb2Yg
d2hldGhlciB0aGlzIGxheWVyIGlzIHNraXBwZWQgZm9yIGFjdHVhbCBkcmF3aW5nIG9yIG5vdC4g
VGhlcmVmb3JlCisgICAgLy8gd2UgdHJhdmVyc2UgcmVjdXJzaXZlbHkgb3ZlciBhbGwgbGF5ZXJz
LCBub3QganVzdCB0aGUgcmVuZGVyIHN1cmZhY2UgbGlzdC4KKworICAgIGlmICghbGF5ZXItPnVw
ZGF0ZVJlY3QoKS5pc0VtcHR5KCkgJiYgbGF5ZXItPmRyYXdzQ29udGVudCgpKQorICAgICAgICBt
X2RlYnVnUmVjdHMuYXBwZW5kKENDRGVidWdSZWN0KFBhaW50UmVjdFR5cGUsIENDTWF0aFV0aWw6
Om1hcENsaXBwZWRSZWN0KGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLCBsYXllci0+dXBk
YXRlUmVjdCgpKSkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxheWVyLT5jaGls
ZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBzYXZlUGFpbnRSZWN0cyhsYXllci0+Y2hpbGRy
ZW4oKVtpXS5nZXQoKSk7Cit9CisKK3ZvaWQgQ0NEZWJ1Z1JlY3RIaXN0b3J5OjpzYXZlUHJvcGVy
dHlDaGFuZ2VkUmVjdHMoY29uc3QgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpCit7CisgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7
CisgICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0W3N1cmZhY2VJbmRleF07CisgICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVy
U3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBB
U1NFUlQocmVuZGVyU3VyZmFjZSk7CisKKyAgICAgICAgY29uc3QgVmVjdG9yPENDTGF5ZXJJbXBs
Kj4mIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsg
KytsYXllckluZGV4KSB7CisgICAgICAgICAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBsYXllckxp
c3RbbGF5ZXJJbmRleF07CisKKyAgICAgICAgICAgIGlmIChDQ0xheWVyVHJlZUhvc3RDb21tb246
OnJlbmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0PENDTGF5ZXJJbXBsPihsYXllciwgcmVu
ZGVyU3VyZmFjZUxheWVyLT5pZCgpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgaWYgKGxheWVyLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKQorICAgICAgICAgICAg
ICAgIG1fZGVidWdSZWN0cy5hcHBlbmQoQ0NEZWJ1Z1JlY3QoUHJvcGVydHlDaGFuZ2VkUmVjdFR5
cGUsIENDTWF0aFV0aWw6Om1hcENsaXBwZWRSZWN0KGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsYXllci0+Ym91bmRzKCkpKSkpOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENDRGVidWdSZWN0SGlzdG9yeTo6c2F2ZVN1cmZh
Y2VEYW1hZ2VSZWN0cyhjb25zdCBWZWN0b3I8Q0NMYXllckltcGwqID4mIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpCit7CisgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7
CisgICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0W3N1cmZhY2VJbmRleF07CisgICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVy
U3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBB
U1NFUlQocmVuZGVyU3VyZmFjZSk7CisKKyAgICAgICAgbV9kZWJ1Z1JlY3RzLmFwcGVuZChDQ0Rl
YnVnUmVjdChTdXJmYWNlRGFtYWdlUmVjdFR5cGUsIENDTWF0aFV0aWw6Om1hcENsaXBwZWRSZWN0
KHJlbmRlclN1cmZhY2UtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCksIHJlbmRlclN1cmZhY2UtPmRh
bWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKSkpKTsKKyAgICB9Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDRGVidWdSZWN0SGlzdG9yeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z1JlY3RIaXN0b3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTNkYTEwN2Fk
ZTRmYjc3NDlhYjJkNWNlNzQ3NWEyMjZjYmIwZTE0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdSZWN0SGlzdG9y
eS5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NEZWJ1Z1JlY3RI
aXN0b3J5X2gKKyNkZWZpbmUgQ0NEZWJ1Z1JlY3RIaXN0b3J5X2gKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJJbXBs
Oworc3RydWN0IENDU2V0dGluZ3M7CisKKy8vIFRoZXJlIGFyZSBjdXJyZW50bHkgdGhyZWUgdHlw
ZXMgb2YgZGVidWcgcmVjdHM6CisvLworLy8gLSBQYWludCByZWN0cyAodXBkYXRlIHJlY3RzKTog
cmVnaW9ucyBvZiBhIGxheWVyIHRoYXQgbmVlZGVkIHRvIGJlIHJlLXVwbG9hZGVkIHRvIHRoZQor
Ly8gICB0ZXh0dXJlIHJlc291cmNlOyBpbiBtb3N0IGNhc2VzIGltcGx5aW5nIHRoYXQgV2ViQ29y
ZSBoYWQgdG8gcmVwYWludCB0aGVtLCB0b28uCisvLworLy8gLSBQcm9wZXJ0eS1jaGFuZ2VkIHJl
Y3RzOiBlbmNsb3NpbmcgYm91bmRzIG9mIGxheWVycyB0aGF0IGNhdXNlIGNoYW5nZXMgdG8gdGhl
IHNjcmVlbgorLy8gICBldmVuIGlmIHRoZSBsYXllciBkaWQgbm90IGNoYW5nZSBpbnRlcm5hbGx5
LiAoRm9yIGV4YW1wbGUsIGlmIHRoZSBsYXllcidzIG9wYWNpdHkgb3IKKy8vICAgcG9zaXRpb24g
Y2hhbmdlcy4pCisvLworLy8gLSBTdXJmYWNlIGRhbWFnZSByZWN0czogdGhlIGFnZ3JlZ2F0ZSBk
YW1hZ2Ugb24gYSB0YXJnZXQgc3VyZmFjZSB0aGF0IGlzIGNhdXNlZCBieSBhbGwKKy8vICAgbGF5
ZXJzIGFuZCBzdXJmYWNlcyB0aGF0IGNvbnRyaWJ1dGUgdG8gaXQuIFRoaXMgaW5jbHVkZXMgKDEp
IHBhaW50IHJlY3RzLCAoMikgcHJvcGVydHktCisvLyAgIGNoYW5nZWQgcmVjdHMsIGFuZCAoMykg
bmV3bHkgZXhwb3NlZCBhcmVhcy4KKy8vCitlbnVtIERlYnVnUmVjdFR5cGUgeyBQYWludFJlY3RU
eXBlLCBQcm9wZXJ0eUNoYW5nZWRSZWN0VHlwZSwgU3VyZmFjZURhbWFnZVJlY3RUeXBlIH07CisK
K3N0cnVjdCBDQ0RlYnVnUmVjdCB7CisgICAgQ0NEZWJ1Z1JlY3QoRGVidWdSZWN0VHlwZSBuZXdU
eXBlLCBGbG9hdFJlY3QgbmV3UmVjdCkKKyAgICAgICAgICAgIDogdHlwZShuZXdUeXBlKQorICAg
ICAgICAgICAgLCByZWN0KG5ld1JlY3QpIHsgfQorCisgICAgRGVidWdSZWN0VHlwZSB0eXBlOwor
ICAgIEZsb2F0UmVjdCByZWN0OworfTsKKworLy8gVGhpcyBjbGFzcyBtYWludGFpbnMgYSBoaXN0
b3J5IG9mIHJlY3RzIG9mIHZhcmlvdXMgdHlwZXMgdGhhdCBjYW4gYmUgdXNlZAorLy8gZm9yIGRl
YnVnZ2luZyBwdXJwb3Nlcy4gVGhlIG92ZXJoZWFkIG9mIGNvbGxlY3RpbmcgcmVjdHMgaXMgcGVy
Zm9ybWVkIG9ubHkgaWYKKy8vIHRoZSBhcHByb3ByaWF0ZSBDQ1NldHRpbmdzIGFyZSBlbmFibGVk
LgorY2xhc3MgQ0NEZWJ1Z1JlY3RIaXN0b3J5IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
Q0RlYnVnUmVjdEhpc3RvcnkpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDRGVi
dWdSZWN0SGlzdG9yeT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ0NEZWJ1Z1JlY3RIaXN0b3J5KCkpOworICAgIH0KKworICAgIGJvb2wgZW5hYmxlZChjb25z
dCBDQ1NldHRpbmdzJik7CisKKyAgICAvLyBOb3RlOiBTYXZpbmcgZGVidWcgcmVjdHMgbXVzdCBo
YXBwZW4gYmVmb3JlIGxheWVycycgY2hhbmdlIHRyYWNraW5nIGlzIHJlc2V0LgorICAgIHZvaWQg
c2F2ZURlYnVnUmVjdHNGb3JDdXJyZW50RnJhbWUoQ0NMYXllckltcGwqIHJvb3RMYXllciwgY29u
c3QgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNvbnN0IEND
U2V0dGluZ3MmKTsKKworICAgIGNvbnN0IFZlY3RvcjxDQ0RlYnVnUmVjdD4mIGRlYnVnUmVjdHMo
KSB7IHJldHVybiBtX2RlYnVnUmVjdHM7IH0KKworcHJpdmF0ZToKKyAgICBDQ0RlYnVnUmVjdEhp
c3RvcnkoKTsKKworICAgIHZvaWQgc2F2ZVBhaW50UmVjdHMoQ0NMYXllckltcGwqKTsKKyAgICB2
b2lkIHNhdmVQcm9wZXJ0eUNoYW5nZWRSZWN0cyhjb25zdCBWZWN0b3I8Q0NMYXllckltcGwqPiYg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgdm9pZCBzYXZlU3VyZmFjZURhbWFnZVJlY3Rz
KGNvbnN0IFZlY3RvcjxDQ0xheWVySW1wbCogPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisK
KyAgICBWZWN0b3I8Q0NEZWJ1Z1JlY3Q+IG1fZGVidWdSZWN0czsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvdW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb3VudGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
NmRmZjA2YWIwY2IxODUwNzQ0MjE3NDJhMTFlODQ2NTA2ZTIzZWU5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJh
dGVDb3VudGVyLmNwcApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUg
IkNDRnJhbWVSYXRlQ291bnRlci5oIgorCisjaW5jbHVkZSAiQ0NQcm94eS5oIgorI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGRvdWJs
ZSBDQ0ZyYW1lUmF0ZUNvdW50ZXI6OmtGcmFtZVRvb0Zhc3QgPSAxLjAgLyA3MC4wOyAvLyBtZWFz
dXJlZCBpbiBzZWNvbmRzCitjb25zdCBkb3VibGUgQ0NGcmFtZVJhdGVDb3VudGVyOjprRnJhbWVU
b29TbG93ID0gMS4wIC8gMTIuMDsKKworLy8gc2FmZU1vZCB3b3JrcyBvbiAtMSwgcmV0dXJuaW5n
IG0tMSBpbiB0aGF0IGNhc2UuCitzdGF0aWMgaW5saW5lIGludCBzYWZlTW9kKGludCBudW1iZXIs
IGludCBtb2R1bHVzKQoreworICAgIHJldHVybiAobnVtYmVyICsgbW9kdWx1cykgJSBtb2R1bHVz
OworfQorCitpbmxpbmUgaW50IENDRnJhbWVSYXRlQ291bnRlcjo6ZnJhbWVJbmRleChpbnQgZnJh
bWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNhZmVNb2QoZnJhbWUsIGtUaW1lU3RhbXBIaXN0b3J5
U2l6ZSk7Cit9CisKK0NDRnJhbWVSYXRlQ291bnRlcjo6Q0NGcmFtZVJhdGVDb3VudGVyKCkKKyAg
ICA6IG1fY3VycmVudEZyYW1lTnVtYmVyKDEpCit7CisgICAgbV90aW1lU3RhbXBIaXN0b3J5WzBd
ID0gY3VycmVudFRpbWUoKTsKKyAgICBtX3RpbWVTdGFtcEhpc3RvcnlbMV0gPSBtX3RpbWVTdGFt
cEhpc3RvcnlbMF07CisgICAgZm9yIChpbnQgaSA9IDI7IGkgPCBrVGltZVN0YW1wSGlzdG9yeVNp
emU7IGkrKykKKyAgICAgICAgbV90aW1lU3RhbXBIaXN0b3J5W2ldID0gMDsKK30KKwordm9pZCBD
Q0ZyYW1lUmF0ZUNvdW50ZXI6Om1hcmtCZWdpbm5pbmdPZkZyYW1lKGRvdWJsZSB0aW1lc3RhbXAp
Cit7CisgICAgbV90aW1lU3RhbXBIaXN0b3J5W2ZyYW1lSW5kZXgobV9jdXJyZW50RnJhbWVOdW1i
ZXIpXSA9IHRpbWVzdGFtcDsKK30KKwordm9pZCBDQ0ZyYW1lUmF0ZUNvdW50ZXI6Om1hcmtFbmRP
ZkZyYW1lKCkKK3sKKyAgICBtX2N1cnJlbnRGcmFtZU51bWJlciArPSAxOworfQorCitib29sIEND
RnJhbWVSYXRlQ291bnRlcjo6aXNCYWRGcmFtZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbEJldHdl
ZW5Db25zZWN1dGl2ZUZyYW1lcykgY29uc3QKK3sKKyAgICBib29sIHNjaGVkdWxlckFsbG93c0Rv
dWJsZUZyYW1lcyA9ICFDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCk7CisgICAgYm9vbCBpbnRlcnZh
bFRvb0Zhc3QgPSBzY2hlZHVsZXJBbGxvd3NEb3VibGVGcmFtZXMgJiYgaW50ZXJ2YWxCZXR3ZWVu
Q29uc2VjdXRpdmVGcmFtZXMgPCBrRnJhbWVUb29GYXN0OworICAgIGJvb2wgaW50ZXJ2YWxUb29T
bG93ID0gaW50ZXJ2YWxCZXR3ZWVuQ29uc2VjdXRpdmVGcmFtZXMgPiBrRnJhbWVUb29TbG93Owor
ICAgIHJldHVybiBpbnRlcnZhbFRvb0Zhc3QgfHwgaW50ZXJ2YWxUb29TbG93OworfQorCitib29s
IENDRnJhbWVSYXRlQ291bnRlcjo6aXNCYWRGcmFtZShpbnQgZnJhbWVOdW1iZXIpIGNvbnN0Cit7
CisgICAgZG91YmxlIGRlbHRhID0gbV90aW1lU3RhbXBIaXN0b3J5W2ZyYW1lSW5kZXgoZnJhbWVO
dW1iZXIpXSAtCisgICAgICAgICAgICBtX3RpbWVTdGFtcEhpc3RvcnlbZnJhbWVJbmRleChmcmFt
ZU51bWJlciAtIDEpXTsKKyAgICByZXR1cm4gaXNCYWRGcmFtZUludGVydmFsKGRlbHRhKTsKK30K
Kwordm9pZCBDQ0ZyYW1lUmF0ZUNvdW50ZXI6OmdldEF2ZXJhZ2VGUFNBbmRTdGFuZGFyZERldmlh
dGlvbihkb3VibGUmIGF2ZXJhZ2VGUFMsIGRvdWJsZSYgc3RhbmRhcmREZXZpYXRpb24pIGNvbnN0
Cit7CisgICAgaW50IGZyYW1lID0gbV9jdXJyZW50RnJhbWVOdW1iZXIgLSAxOworICAgIGF2ZXJh
Z2VGUFMgPSAwOworICAgIGludCBhdmVyYWdlRlBTQ291bnQgPSAwOworICAgIGRvdWJsZSBmcHNW
YXJpYW5jZU51bWVyYXRvciA9IDA7CisKKyAgICAvLyBXYWxrIGJhY2t3YXJkcyB0aHJvdWdoIHRo
ZSBzYW1wbGVzIGxvb2tpbmcgZm9yIGEgcnVuIG9mIGdvb2QgZnJhbWUKKyAgICAvLyB0aW1pbmdz
IGZyb20gd2hpY2ggdG8gY29tcHV0ZSB0aGUgbWVhbiBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uLgor
ICAgIC8vCisgICAgLy8gU2xvdyBmcmFtZXMgb2NjdXIganVzdCBiZWNhdXNlIHRoZSB1c2VyIGlz
IGluYWN0aXZlLCBhbmQgc2hvdWxkIGJlCisgICAgLy8gaWdub3JlZC4gRmFzdCBmcmFtZXMgYXJl
IGlnbm9yZWQgaWYgdGhlIHNjaGVkdWxlciBpcyBpbiBzaW5nbGUtdGhyZWFkCisgICAgLy8gbW9k
ZSBpbiBvcmRlciB0byByZXByZXNlbnQgdGhlIHRydWUgZnJhbWUgcmF0ZSBpbiBzcGl0ZSBvZiB0
aGUgZmFjdCB0aGF0CisgICAgLy8gdGhlIGZpcnN0IGZldyBzd2FwYnVmZmVycyBoYXBwZW4gaW5z
dGFudGx5IHdoaWNoIHNrZXdzIHRoZSBzdGF0aXN0aWNzCisgICAgLy8gdG9vIG11Y2ggZm9yIHNo
b3J0IGxpdmVkIGFuaW1hdGlvbnMuCisgICAgLy8KKyAgICAvLyBpc0JhZEZyYW1lIGVuY2Fwc3Vs
YXRlcyB0aGUgZnJhbWUgdG9vIHNsb3cvZnJhbWUgdG9vIGZhc3QgbG9naWMuCisgICAgd2hpbGUg
KDEpIHsKKyAgICAgICAgaWYgKCFpc0JhZEZyYW1lKGZyYW1lKSkgeworICAgICAgICAgICAgYXZl
cmFnZUZQU0NvdW50Kys7CisgICAgICAgICAgICBkb3VibGUgc2VjRm9yTGFzdEZyYW1lID0gbV90
aW1lU3RhbXBIaXN0b3J5W2ZyYW1lSW5kZXgoZnJhbWUpXSAtCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV90aW1lU3RhbXBIaXN0b3J5W2ZyYW1lSW5kZXgoZnJhbWUgLSAx
KV07CisgICAgICAgICAgICBkb3VibGUgeCA9IDEuMCAvIHNlY0Zvckxhc3RGcmFtZTsKKyAgICAg
ICAgICAgIGRvdWJsZSBkZWx0YUZyb21BdmVyYWdlID0geCAtIGF2ZXJhZ2VGUFM7CisgICAgICAg
ICAgICAvLyBDaGFuZ2Ugd2l0aCBjYXV0aW9uIC0gbnVtZXJpY3MuIGh0dHA6Ly9lbi53aWtpcGVk
aWEub3JnL3dpa2kvU3RhbmRhcmRfZGV2aWF0aW9uCisgICAgICAgICAgICBhdmVyYWdlRlBTID0g
YXZlcmFnZUZQUyArIGRlbHRhRnJvbUF2ZXJhZ2UgLyBhdmVyYWdlRlBTQ291bnQ7CisgICAgICAg
ICAgICBmcHNWYXJpYW5jZU51bWVyYXRvciA9IGZwc1ZhcmlhbmNlTnVtZXJhdG9yICsgZGVsdGFG
cm9tQXZlcmFnZSAqICh4IC0gYXZlcmFnZUZQUyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGF2
ZXJhZ2VGUFNDb3VudCAmJiBpc0JhZEZyYW1lKGZyYW1lKSkgeworICAgICAgICAgICAgLy8gV2Un
dmUgZ2F0aGVyZWQgYSBydW4gb2YgZ29vZCBzYW1wbGVzLCBzbyBzdG9wLgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLS1mcmFtZTsKKyAgICAgICAgaWYgKGZyYW1lSW5k
ZXgoZnJhbWUpID09IGZyYW1lSW5kZXgobV9jdXJyZW50RnJhbWVOdW1iZXIpIHx8IGZyYW1lIDwg
MCkgeworICAgICAgICAgICAgLy8gV2UndmUgZ29uZSB0aHJvdWdoIGFsbCBhdmFpbGFibGUgaGlz
dG9yaWNhbCBkYXRhLCBzbyBzdG9wLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzdGFuZGFyZERldmlhdGlvbiA9IHNxcnQoZnBzVmFyaWFuY2VOdW1lcmF0b3Ig
LyBhdmVyYWdlRlBTQ291bnQpOworfQorCitkb3VibGUgQ0NGcmFtZVJhdGVDb3VudGVyOjp0aW1l
U3RhbXBPZlJlY2VudEZyYW1lKGludCBuKQoreworICAgIEFTU0VSVChuID49IDAgJiYgbiA8IGtU
aW1lU3RhbXBIaXN0b3J5U2l6ZSk7CisgICAgaW50IGRlc2lyZWRJbmRleCA9IChmcmFtZUluZGV4
KG1fY3VycmVudEZyYW1lTnVtYmVyKSArIG4pICUga1RpbWVTdGFtcEhpc3RvcnlTaXplOworICAg
IHJldHVybiBtX3RpbWVTdGFtcEhpc3RvcnlbZGVzaXJlZEluZGV4XTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NGcmFtZVJhdGVDb3VudGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvdW50ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDlmMTdjMjNhMTE3
NzQ5ODZlNGEzODU1NWFkNmMxMjdlZjU5OGQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb3VudGVyLmgK
QEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0ZyYW1lUmF0ZUNvdW50
ZXJfaAorI2RlZmluZSBDQ0ZyYW1lUmF0ZUNvdW50ZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGlzIGNsYXNz
IG1haW50YWlucyBhIGhpc3Rvcnkgb2YgdGltZXN0YW1wcywgYW5kIHByb3ZpZGVzIGZ1bmN0aW9u
YWxpdHkgdG8KKy8vIGludGVsbGlnZW50bHkgY29tcHV0ZSBhdmVyYWdlIGZyYW1lcyBwZXIgc2Vj
b25kIChhbmQgc3RhbmRhcmQgZGV2aWF0aW9uKS4KK2NsYXNzIENDRnJhbWVSYXRlQ291bnRlciB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NGcmFtZVJhdGVDb3VudGVyKTsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0ZyYW1lUmF0ZUNvdW50ZXI+IGNyZWF0ZSgpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDRnJhbWVSYXRlQ291bnRlcigpKTsKKyAg
ICB9CisKKyAgICB2b2lkIG1hcmtCZWdpbm5pbmdPZkZyYW1lKGRvdWJsZSB0aW1lc3RhbXApOwor
ICAgIHZvaWQgbWFya0VuZE9mRnJhbWUoKTsKKyAgICBpbnQgY3VycmVudEZyYW1lTnVtYmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9jdXJyZW50RnJhbWVOdW1iZXI7IH0KKyAgICB2b2lkIGdldEF2ZXJh
Z2VGUFNBbmRTdGFuZGFyZERldmlhdGlvbihkb3VibGUmIGF2ZXJhZ2VGUFMsIGRvdWJsZSYgc3Rh
bmRhcmREZXZpYXRpb24pIGNvbnN0OworICAgIGludCB0aW1lU3RhbXBIaXN0b3J5U2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIGtUaW1lU3RhbXBIaXN0b3J5U2l6ZTsgfQorCisgICAgLy8gbiA9IDAgcmV0
dXJucyB0aGUgb2xkZXN0IGZyYW1lIHJldGFpbmVkIGluIHRoZSBoaXN0b3J5LAorICAgIC8vIHdo
aWxlIG4gPSB0aW1lU3RhbXBIaXN0b3J5U2l6ZSgpIC0gMSByZXR1cm5zIHRoZSB0aW1lc3RhbXAg
bW9zdCByZWNlbnQgZnJhbWUuCisgICAgZG91YmxlIHRpbWVTdGFtcE9mUmVjZW50RnJhbWUoaW50
IC8qIG4gKi8pOworCisgICAgLy8gVGhpcyBpcyBhIGhldXJpc3RpYyB0aGF0IGNhbiBiZSB1c2Vk
IHRvIGlnbm9yZSBmcmFtZXMgaW4gYSByZWFzb25hYmxlIHdheS4gUmV0dXJucworICAgIC8vIHRy
dWUgaWYgdGhlIGdpdmVuIGZyYW1lIGludGVydmFsIGlzIHRvbyBmYXN0IG9yIHRvbyBzbG93LCBi
YXNlZCBvbiBjb25zdGFudCB0aHJlc2hvbGRzLgorICAgIGJvb2wgaXNCYWRGcmFtZUludGVydmFs
KGRvdWJsZSBpbnRlcnZhbEJldHdlZW5Db25zZWN1dGl2ZUZyYW1lcykgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgQ0NGcmFtZVJhdGVDb3VudGVyKCk7CisKKyAgICBpbnQgZnJhbWVJbmRleChpbnQg
ZnJhbWVOdW1iZXIpIGNvbnN0OworICAgIGJvb2wgaXNCYWRGcmFtZShpbnQgZnJhbWVOdW1iZXIp
IGNvbnN0OworCisgICAgLy8gVHdvIHRocmVzaG9sZHMgKG1lYXN1cmVkIGluIHNlY29uZHMpIHRo
YXQgZGVzY3JpYmUgd2hhdCBpcyBjb25zaWRlcmVkIHRvIGJlIGEgIm5vLW9wIGZyYW1lIiB0aGF0
IHNob3VsZCBub3QgYmUgY291bnRlZC4KKyAgICAvLyAtIGlmIHRoZSBmcmFtZSBpcyB0b28gZmFz
dCwgdGhlbiBnaXZlbiBvdXIgY29tcG9zaXRvciBpbXBsZW1lbnRhdGlvbiwgdGhlIGZyYW1lIHBy
b2JhYmx5IHdhcyBhIG5vLW9wIGFuZCBkaWQgbm90IGRyYXcuCisgICAgLy8gLSBpZiB0aGUgZnJh
bWUgaXMgdG9vIHNsb3csIHRoZW4gdGhlcmUgaXMgcHJvYmFibHkgbm90IGFuaW1hdGluZyBjb250
ZW50LCBzbyB3ZSBzaG91bGQgbm90IHBvbGx1dGUgdGhlIGF2ZXJhZ2UuCisgICAgc3RhdGljIGNv
bnN0IGRvdWJsZSBrRnJhbWVUb29GYXN0OworICAgIHN0YXRpYyBjb25zdCBkb3VibGUga0ZyYW1l
VG9vU2xvdzsKKworICAgIHN0YXRpYyBjb25zdCBpbnQga1RpbWVTdGFtcEhpc3RvcnlTaXplID0g
MTIwOworCisgICAgaW50IG1fY3VycmVudEZyYW1lTnVtYmVyOworICAgIGRvdWJsZSBtX3RpbWVT
dGFtcEhpc3Rvcnlba1RpbWVTdGFtcEhpc3RvcnlTaXplXTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCmluZGV4IGE2YThiZDFjYmRmYTU4
ZDA4M2Y4NDllN2ZhNWEzNWRlYjM4YzQ2MmQuLjdkNDlmNzk4ZDFhYzdkNDhiZjc3NDM0N2JiYmM5
N2ZiYTA4ZjNhMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCkBAIC0zMywy
NCArMzMsMTYgQEAKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtQ2FudmFzLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJjYy9D
Q0RlYnVnUmVjdEhpc3RvcnkuaCIKICNpbmNsdWRlICJjYy9DQ0ZvbnRBdGxhcy5oIgorI2luY2x1
ZGUgImNjL0NDRnJhbWVSYXRlQ291bnRlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaCIKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCi1DQ0hlYWRzVXBEaXNwbGF5OjpDQ0hlYWRzVXBEaXNwbGF5KCkKLSAgICA6IG1fY3Vy
cmVudEZyYW1lTnVtYmVyKDEpCi17Ci0gICAgbV9iZWdpblRpbWVIaXN0b3J5SW5TZWNbMF0gPSBj
dXJyZW50VGltZSgpOwotICAgIG1fYmVnaW5UaW1lSGlzdG9yeUluU2VjWzFdID0gbV9iZWdpblRp
bWVIaXN0b3J5SW5TZWNbMF07Ci0gICAgZm9yIChpbnQgaSA9IDI7IGkgPCBrQmVnaW5GcmFtZUhp
c3RvcnlTaXplOyBpKyspCi0gICAgICAgIG1fYmVnaW5UaW1lSGlzdG9yeUluU2VjW2ldID0gMDsK
LX0KLQogQ0NIZWFkc1VwRGlzcGxheTo6fkNDSGVhZHNVcERpc3BsYXkoKQogewogfQpAQCAtNjAs
MzMgKzUyLDkgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpzZXRGb250QXRsYXMoUGFzc093blB0
cjxDQ0ZvbnRBdGxhcz4gZm9udEF0bGFzKQogICAgIG1fZm9udEF0bGFzID0gZm9udEF0bGFzOwog
fQogCi1jb25zdCBkb3VibGUgQ0NIZWFkc1VwRGlzcGxheTo6a0lkbGVTZWNvbmRzVHJpZ2dlcnNS
ZXNldCA9IDAuNTsKLWNvbnN0IGRvdWJsZSBDQ0hlYWRzVXBEaXNwbGF5OjprRnJhbWVUb29GYXN0
ID0gMS4wIC8gNzA7Ci0KLS8vIHNhZmVNb2Qgd29ya3Mgb24gLTEsIHJldHVybmluZyBtLTEgaW4g
dGhhdCBjYXNlLgotc3RhdGljIGlubGluZSBpbnQgc2FmZU1vZChpbnQgbnVtYmVyLCBpbnQgbW9k
dWx1cykKLXsKLSAgICByZXR1cm4gKG51bWJlciArIG1vZHVsdXMpICUgbW9kdWx1czsKLX0KLQot
aW5saW5lIGludCBDQ0hlYWRzVXBEaXNwbGF5OjpmcmFtZUluZGV4KGludCBmcmFtZSkgY29uc3QK
LXsKLSAgICByZXR1cm4gc2FmZU1vZChmcmFtZSwga0JlZ2luRnJhbWVIaXN0b3J5U2l6ZSk7Ci19
Ci0KLXZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6b25GcmFtZUJlZ2luKGRvdWJsZSB0aW1lc3RhbXAp
Ci17Ci0gICAgbV9iZWdpblRpbWVIaXN0b3J5SW5TZWNbZnJhbWVJbmRleChtX2N1cnJlbnRGcmFt
ZU51bWJlcildID0gdGltZXN0YW1wOwotfQotCi12b2lkIENDSGVhZHNVcERpc3BsYXk6Om9uU3dh
cEJ1ZmZlcnMoKQotewotICAgIG1fY3VycmVudEZyYW1lTnVtYmVyICs9IDE7Ci19Ci0KIGJvb2wg
Q0NIZWFkc1VwRGlzcGxheTo6ZW5hYmxlZChjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykgY29u
c3QKIHsKLSAgICByZXR1cm4gc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKHNldHRpbmdzKSB8fCBzZXR0
aW5ncy5zaG93RlBTQ291bnRlcjsKKyAgICByZXR1cm4gc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKHNl
dHRpbmdzKSB8fCBzZXR0aW5ncy5zaG93RlBTQ291bnRlciB8fCBzaG93RGVidWdSZWN0cyhzZXR0
aW5ncyk7CiB9CiAKIGJvb2wgQ0NIZWFkc1VwRGlzcGxheTo6c2hvd1BsYXRmb3JtTGF5ZXJUcmVl
KGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKSBjb25zdApAQCAtOTQsNiArNjIsMTEgQEAgYm9v
bCBDQ0hlYWRzVXBEaXNwbGF5OjpzaG93UGxhdGZvcm1MYXllclRyZWUoY29uc3QgQ0NTZXR0aW5n
cyYgc2V0dGluZ3MpIGNvbnN0CiAgICAgcmV0dXJuIHNldHRpbmdzLnNob3dQbGF0Zm9ybUxheWVy
VHJlZTsKIH0KIAorYm9vbCBDQ0hlYWRzVXBEaXNwbGF5OjpzaG93RGVidWdSZWN0cyhjb25zdCBD
Q1NldHRpbmdzJiBzZXR0aW5ncykgY29uc3QKK3sKKyAgICByZXR1cm4gc2V0dGluZ3Muc2hvd1Bh
aW50UmVjdHMgfHwgc2V0dGluZ3Muc2hvd1Byb3BlcnR5Q2hhbmdlZFJlY3RzIHx8IHNldHRpbmdz
LnNob3dTdXJmYWNlRGFtYWdlUmVjdHM7Cit9CisKIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJh
dyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkKIHsKICAgICBMYXllclJl
bmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIgPSBsYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJS
ZW5kZXJlcigpOwpAQCAtMTA0LDcgKzc3LDcgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3
KENDTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQogICAgIGNvbnN0IENDU2V0
dGluZ3MmIHNldHRpbmdzID0gbGF5ZXJUcmVlSG9zdEltcGwtPnNldHRpbmdzKCk7CiAgICAgLy8g
VXNlIGEgZnVsbHNjcmVlbiB0ZXh0dXJlIG9ubHkgaWYgd2UgbmVlZCB0by4uLgogICAgIEludFNp
emUgaHVkU2l6ZTsKLSAgICBpZiAoc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKHNldHRpbmdzKSkgewor
ICAgIGlmIChzaG93UGxhdGZvcm1MYXllclRyZWUoc2V0dGluZ3MpIHx8IHNob3dEZWJ1Z1JlY3Rz
KHNldHRpbmdzKSkgewogICAgICAgICBodWRTaXplLnNldFdpZHRoKG1pbigyMDQ4LCBsYXllclRy
ZWVIb3N0SW1wbC0+dmlld3BvcnRTaXplKCkud2lkdGgoKSkpOwogICAgICAgICBodWRTaXplLnNl
dEhlaWdodChtaW4oMjA0OCwgbGF5ZXJUcmVlSG9zdEltcGwtPnZpZXdwb3J0U2l6ZSgpLmhlaWdo
dCgpKSk7CiAgICAgfSBlbHNlIHsKQEAgLTE1MSwxNSArMTI0LDYgQEAgdm9pZCBDQ0hlYWRzVXBE
aXNwbGF5OjpkcmF3KENDTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQogICAg
IG1faHVkVGV4dHVyZS0+dW5yZXNlcnZlKCk7CiB9CiAKLWJvb2wgQ0NIZWFkc1VwRGlzcGxheTo6
aXNCYWRGcmFtZShpbnQgZnJhbWVOdW1iZXIpIGNvbnN0Ci17Ci0gICAgZG91YmxlIGRlbHRhID0g
bV9iZWdpblRpbWVIaXN0b3J5SW5TZWNbZnJhbWVJbmRleChmcmFtZU51bWJlcildIC0KLSAgICAg
ICAgICAgICAgICAgICBtX2JlZ2luVGltZUhpc3RvcnlJblNlY1tmcmFtZUluZGV4KGZyYW1lTnVt
YmVyIC0gMSldOwotICAgIGJvb2wgdG9vU2xvdyA9IGRlbHRhID4gKGtOdW1NaXNzZWRGcmFtZXNG
b3JSZXNldCAvIDYwLjApOwotICAgIGJvb2wgc2NoZWR1bGVyQWxsb3dzRG91YmxlRnJhbWVzID0g
IUNDUHJveHk6Omhhc0ltcGxUaHJlYWQoKTsKLSAgICByZXR1cm4gKHNjaGVkdWxlckFsbG93c0Rv
dWJsZUZyYW1lcyAmJiBkZWx0YSA8IGtGcmFtZVRvb0Zhc3QpIHx8IHRvb1Nsb3c7Ci19Ci0KIHZv
aWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0h1ZENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgQ0NMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwsIGNvbnN0IENDU2V0
dGluZ3MmIHNldHRpbmdzLCBjb25zdCBJbnRTaXplJiBodWRTaXplKQogewogICAgIGlmIChzaG93
UGxhdGZvcm1MYXllclRyZWUoc2V0dGluZ3MpKSB7CkBAIC0xNzcsNjUgKzE0MSwyNCBAQCB2b2lk
IENDSGVhZHNVcERpc3BsYXk6OmRyYXdIdWRDb250ZW50cyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIENDTGF5ZXJUcmVlSG9zdAogICAgICAgICBwbGF0Zm9ybUxheWVyVHJlZVRvcCA9IDA7CiAK
ICAgICBpZiAoc2V0dGluZ3Muc2hvd0ZQU0NvdW50ZXIpCi0gICAgICAgIGRyYXdGUFNDb3VudGVy
KGNvbnRleHQsIGZwc0NvdW50ZXJUb3AsIGZwc0NvdW50ZXJIZWlnaHQpOworICAgICAgICBkcmF3
RlBTQ291bnRlcihjb250ZXh0LCBsYXllclRyZWVIb3N0SW1wbC0+ZnBzQ291bnRlcigpLCBmcHND
b3VudGVyVG9wLCBmcHNDb3VudGVySGVpZ2h0KTsKIAogICAgIGlmIChzaG93UGxhdGZvcm1MYXll
clRyZWUoc2V0dGluZ3MpICYmIG1fZm9udEF0bGFzKSB7CiAgICAgICAgIFN0cmluZyBsYXllclRy
ZWUgPSBsYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJUcmVlQXNUZXh0KCk7CiAgICAgICAgIG1fZm9u
dEF0bGFzLT5kcmF3VGV4dChjb250ZXh0LCBsYXllclRyZWUsIEludFBvaW50KDIsIHBsYXRmb3Jt
TGF5ZXJUcmVlVG9wKSwgaHVkU2l6ZSk7CiAgICAgfQotfQogCi12b2lkIENDSGVhZHNVcERpc3Bs
YXk6OmdldEF2ZXJhZ2VGUFNBbmRTdGFuZGFyZERldmlhdGlvbihkb3VibGUgKmF2ZXJhZ2UsIGRv
dWJsZSAqc3RhbmRhcmREZXZpYXRpb24pIGNvbnN0Ci17Ci0gICAgZG91YmxlJiBhdmVyYWdlRlBT
ID0gKmF2ZXJhZ2U7Ci0KLSAgICBpbnQgZnJhbWUgPSBtX2N1cnJlbnRGcmFtZU51bWJlciAtIDE7
IAotICAgIGF2ZXJhZ2VGUFMgPSAwOwotICAgIGludCBhdmVyYWdlRlBTQ291bnQgPSAwOwotICAg
IGRvdWJsZSBmcHNWYXJpYW5jZU51bWVyYXRvciA9IDA7Ci0KLSAgICAvLyBXYWxrIGJhY2t3YXJk
cyB0aHJvdWdoIHRoZSBzYW1wbGVzIGxvb2tpbmcgZm9yIGEgcnVuIG9mIGdvb2QgZnJhbWUKLSAg
ICAvLyB0aW1pbmdzIGZyb20gd2hpY2ggdG8gY29tcHV0ZSB0aGUgbWVhbiBhbmQgc3RhbmRhcmQg
ZGV2aWF0aW9uLgotICAgIC8vCi0gICAgLy8gU2xvdyBmcmFtZXMgb2NjdXIganVzdCBiZWNhdXNl
IHRoZSB1c2VyIGlzIGluYWN0aXZlLCBhbmQgc2hvdWxkIGJlCi0gICAgLy8gaWdub3JlZC4gRmFz
dCBmcmFtZXMgYXJlIGlnbm9yZWQgaWYgdGhlIHNjaGVkdWxlciBpcyBpbiBzaW5nbGUtdGhyZWFk
Ci0gICAgLy8gbW9kZSBpbiBvcmRlciB0byByZXByZXNlbnQgdGhlIHRydWUgZnJhbWUgcmF0ZSBp
biBzcGl0ZSBvZiB0aGUgZmFjdCB0aGF0Ci0gICAgLy8gdGhlIGZpcnN0IGZldyBzd2FwYnVmZmVy
cyBoYXBwZW4gaW5zdGFudGx5IHdoaWNoIHNrZXdzIHRoZSBzdGF0aXN0aWNzCi0gICAgLy8gdG9v
IG11Y2ggZm9yIHNob3J0IGxpdmVkIGFuaW1hdGlvbnMuCi0gICAgLy8KLSAgICAvLyBpc0JhZEZy
YW1lIGVuY2Fwc3VsYXRlcyB0aGUgZnJhbWUgdG9vIHNsb3cvZnJhbWUgdG9vIGZhc3QgbG9naWMu
Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgaWYgKCFpc0JhZEZyYW1lKGZyYW1lKSkgewotICAg
ICAgICAgICAgYXZlcmFnZUZQU0NvdW50Kys7Ci0gICAgICAgICAgICBkb3VibGUgc2VjRm9yTGFz
dEZyYW1lID0gbV9iZWdpblRpbWVIaXN0b3J5SW5TZWNbZnJhbWVJbmRleChmcmFtZSldIC0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2JlZ2luVGltZUhpc3RvcnlJblNl
Y1tmcmFtZUluZGV4KGZyYW1lIC0gMSldOwotICAgICAgICAgICAgZG91YmxlIHggPSAxLjAgLyBz
ZWNGb3JMYXN0RnJhbWU7Ci0gICAgICAgICAgICBkb3VibGUgZGVsdGFGcm9tQXZlcmFnZSA9IHgg
LSBhdmVyYWdlRlBTOwotICAgICAgICAgICAgLy8gQ2hhbmdlIHdpdGggY2F1dGlvbiAtIG51bWVy
aWNzLiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N0YW5kYXJkX2RldmlhdGlvbgotICAg
ICAgICAgICAgYXZlcmFnZUZQUyA9IGF2ZXJhZ2VGUFMgKyBkZWx0YUZyb21BdmVyYWdlIC8gYXZl
cmFnZUZQU0NvdW50OwotICAgICAgICAgICAgZnBzVmFyaWFuY2VOdW1lcmF0b3IgPSBmcHNWYXJp
YW5jZU51bWVyYXRvciArIGRlbHRhRnJvbUF2ZXJhZ2UgKiAoeCAtIGF2ZXJhZ2VGUFMpOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChhdmVyYWdlRlBTQ291bnQgJiYgaXNCYWRGcmFtZShmcmFtZSkp
IHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIGdhdGhlcmVkIGEgcnVuIG9mIGdvb2Qgc2FtcGxlcywg
c28gc3RvcC4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIC0tZnJhbWU7
Ci0gICAgICAgIGlmIChmcmFtZUluZGV4KGZyYW1lKSA9PSBmcmFtZUluZGV4KG1fY3VycmVudEZy
YW1lTnVtYmVyKSB8fCBmcmFtZSA8IDApIHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIGdvbmUgdGhy
b3VnaCBhbGwgYXZhaWxhYmxlIGhpc3RvcmljYWwgZGF0YSwgc28gc3RvcC4KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgKnN0YW5kYXJkRGV2aWF0aW9uID0gc3Fy
dChmcHNWYXJpYW5jZU51bWVyYXRvciAvIGF2ZXJhZ2VGUFNDb3VudCk7CisgICAgaWYgKHNob3dE
ZWJ1Z1JlY3RzKHNldHRpbmdzKSkKKyAgICAgICAgZHJhd0RlYnVnUmVjdHMoY29udGV4dCwgbGF5
ZXJUcmVlSG9zdEltcGwtPmRlYnVnUmVjdEhpc3RvcnkoKSwgc2V0dGluZ3MpOwogfQogCi12b2lk
IENDSGVhZHNVcERpc3BsYXk6OmRyYXdGUFNDb3VudGVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgaW50IHRvcCwgaW50IGhlaWdodCkKK3ZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0ZQU0Nv
dW50ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBDQ0ZyYW1lUmF0ZUNvdW50ZXIqIGZwc0Nv
dW50ZXIsIGludCB0b3AsIGludCBoZWlnaHQpCiB7CiAgICAgZmxvYXQgdGV4dFdpZHRoID0gMTcw
OyAvLyBzbyB0ZXh0IGZpdHMgb24gbGludXguCi0gICAgZmxvYXQgZ3JhcGhXaWR0aCA9IGtCZWdp
bkZyYW1lSGlzdG9yeVNpemU7CisgICAgZmxvYXQgZ3JhcGhXaWR0aCA9IGZwc0NvdW50ZXItPnRp
bWVTdGFtcEhpc3RvcnlTaXplKCk7CiAKICAgICAvLyBEcmF3IHRoZSBGUFMgdGV4dC4KLSAgICBk
cmF3RlBTQ291bnRlclRleHQoY29udGV4dCwgdG9wLCB0ZXh0V2lkdGgsIGhlaWdodCk7CisgICAg
ZHJhd0ZQU0NvdW50ZXJUZXh0KGNvbnRleHQsIGZwc0NvdW50ZXIsIHRvcCwgdGV4dFdpZHRoLCBo
ZWlnaHQpOwogCiAgICAgLy8gRHJhdyBGUFMgZ3JhcGguCiAgICAgY29uc3QgZG91YmxlIGxvRlBT
ID0gMDsKQEAgLTI1MiwxOCArMTc1LDI2IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0ZQ
U0NvdW50ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgdG9wLCBpbnQgaGVpCiAgICAg
SW50UG9pbnQgcHJldigtMSwgMCk7CiAgICAgaW50IHggPSAwOwogICAgIGRvdWJsZSBoID0gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihoZWlnaHQgLSAyKTsKLSAgICBmb3IgKGludCBpID0gbV9jdXJyZW50
RnJhbWVOdW1iZXIgJSBrQmVnaW5GcmFtZUhpc3RvcnlTaXplOyBpICE9IChtX2N1cnJlbnRGcmFt
ZU51bWJlciAtIDEpICUga0JlZ2luRnJhbWVIaXN0b3J5U2l6ZTsgaSA9IChpICsgMSkgJSBrQmVn
aW5GcmFtZUhpc3RvcnlTaXplKSB7Ci0gICAgICAgIGludCBqID0gKGkgKyAxKSAlIGtCZWdpbkZy
YW1lSGlzdG9yeVNpemU7Ci0gICAgICAgIGRvdWJsZSBmcHMgPSAxLjAgLyAobV9iZWdpblRpbWVI
aXN0b3J5SW5TZWNbal0gLSBtX2JlZ2luVGltZUhpc3RvcnlJblNlY1tpXSk7Ci0gICAgICAgIGlm
IChpc0JhZEZyYW1lKGopKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcHNDb3VudGVyLT50
aW1lU3RhbXBIaXN0b3J5U2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgIGludCBqID0gaSArIDE7
CisgICAgICAgIGRvdWJsZSBkZWx0YSA9IGZwc0NvdW50ZXItPnRpbWVTdGFtcE9mUmVjZW50RnJh
bWUoaikgLSBmcHNDb3VudGVyLT50aW1lU3RhbXBPZlJlY2VudEZyYW1lKGkpOworCisgICAgICAg
IC8vIFNraXAgcGxvdHRpbmcgdGhpcyBwYXJ0aWN1bGFyIGluc3RhbnRhbmVvdXMgZnJhbWUgcmF0
ZSBpZiBpdCBpcyBub3QgbGlrZWx5IHRvIGhhdmUgYmVlbiB2YWxpZC4KKyAgICAgICAgaWYgKGZw
c0NvdW50ZXItPmlzQmFkRnJhbWVJbnRlcnZhbChkZWx0YSkpIHsKICAgICAgICAgICAgIHggKz0g
MTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CisKKyAgICAgICAgZG91YmxlIGZw
cyA9IDEuMCAvIGRlbHRhOworCisgICAgICAgIC8vIENsYW1wIHRoZSBGUFMgdG8gdGhlIHJhbmdl
IHdlIHdhbnQgdG8gcGxvdCB2aXN1YWxseS4KICAgICAgICAgZG91YmxlIHAgPSAxIC0gKChmcHMg
LSBsb0ZQUykgLyAoaGlGUFMgLSBsb0ZQUykpOwogICAgICAgICBpZiAocCA8IDApCiAgICAgICAg
ICAgICBwID0gMDsKICAgICAgICAgaWYgKHAgPiAxKQogICAgICAgICAgICAgcCA9IDE7CisKKyAg
ICAgICAgLy8gUGxvdCB0aGlzIGRhdGEgcG9pbnQuCiAgICAgICAgIEludFBvaW50IGN1cihncmFw
aExlZnQgKyB4LCAxICsgdG9wICsgcCpoKTsKICAgICAgICAgaWYgKHByZXYueCgpICE9IC0xKQog
ICAgICAgICAgICAgY29udGV4dC0+ZHJhd0xpbmUocHJldiwgY3VyKTsKQEAgLTI3MiwxMCArMjAz
LDEwIEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0ZQU0NvdW50ZXIoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBpbnQgdG9wLCBpbnQgaGVpCiAgICAgfQogfQogCi12b2lkIENDSGVhZHNV
cERpc3BsYXk6OmRyYXdGUFNDb3VudGVyVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGlu
dCB0b3AsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJh
d0ZQU0NvdW50ZXJUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ0NGcmFtZVJhdGVDb3Vu
dGVyKiBmcHNDb3VudGVyLCBpbnQgdG9wLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAg
ZG91YmxlIGF2ZXJhZ2VGUFMsIHN0ZERldmlhdGlvbjsKLSAgICBnZXRBdmVyYWdlRlBTQW5kU3Rh
bmRhcmREZXZpYXRpb24oJmF2ZXJhZ2VGUFMsICZzdGREZXZpYXRpb24pOworICAgIGZwc0NvdW50
ZXItPmdldEF2ZXJhZ2VGUFNBbmRTdGFuZGFyZERldmlhdGlvbihhdmVyYWdlRlBTLCBzdGREZXZp
YXRpb24pOwogCiAgICAgLy8gRHJhdyBiYWNrZ3JvdW5kLgogICAgIGNvbnRleHQtPnNldEZpbGxD
b2xvcihDb2xvcigwLCAwLCAwLCAyNTUpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKQEAgLTI4Niw2
ICsyMTcsMzQgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3RlBTQ291bnRlclRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgdG9wLCBpbnQKICAgICAgICAgbV9mb250QXRsYXMt
PmRyYXdUZXh0KGNvbnRleHQsIFN0cmluZzo6Zm9ybWF0KCJGUFM6ICU0LjFmICsvLSAlMy4xZiIs
IGF2ZXJhZ2VGUFMsIHN0ZERldmlhdGlvbiksIEludFBvaW50KDEwLCBoZWlnaHQgLyAzKSwgSW50
U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CiB9CiAKK3ZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0Rl
YnVnUmVjdHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBDQ0RlYnVnUmVjdEhpc3RvcnkqIGRl
YnVnUmVjdEhpc3RvcnksIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQoreworICAgIGNvbnN0
IFZlY3RvcjxDQ0RlYnVnUmVjdD4mIGRlYnVnUmVjdHMgPSBkZWJ1Z1JlY3RIaXN0b3J5LT5kZWJ1
Z1JlY3RzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZWJ1Z1JlY3RzLnNpemUoKTsg
KytpKSB7CisKKyAgICAgICAgaWYgKGRlYnVnUmVjdHNbaV0udHlwZSA9PSBQYWludFJlY3RUeXBl
KSB7CisgICAgICAgICAgICAvLyBQYWludCByZWN0cyBpbiByZWQKKyAgICAgICAgICAgIGNvbnRl
eHQtPnNldFN0cm9rZUNvbG9yKENvbG9yKDI1NSwgMCwgMCwgMjU1KSwgQ29sb3JTcGFjZURldmlj
ZVJHQik7CisgICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdChkZWJ1Z1JlY3RzW2ldLnJlY3Qs
IENvbG9yKDI1NSwgMCwgMCwgMzApLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPnN0cm9rZVJlY3QoZGVidWdSZWN0c1tpXS5yZWN0LCAyLjApOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGRlYnVnUmVjdHNbaV0udHlwZSA9PSBQcm9wZXJ0eUNoYW5nZWRSZWN0
VHlwZSkgeworICAgICAgICAgICAgLy8gUHJvcGVydHktY2hhbmdlZCByZWN0cyBpbiBibHVlCisg
ICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAwLCAyNTUsIDI1NSks
IENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoZGVi
dWdSZWN0c1tpXS5yZWN0LCBDb2xvcigwLCAwLCAyNTUsIDMwKSwgQ29sb3JTcGFjZURldmljZVJH
Qik7CisgICAgICAgICAgICBjb250ZXh0LT5zdHJva2VSZWN0KGRlYnVnUmVjdHNbaV0ucmVjdCwg
Mi4wKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkZWJ1Z1JlY3RzW2ldLnR5cGUgPT0gU3Vy
ZmFjZURhbWFnZVJlY3RUeXBlKSB7CisgICAgICAgICAgICAvLyBTdXJmYWNlIGRhbWFnZSByZWN0
cyBpbiB5ZWxsb3ctb3JhbmdlCisgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihD
b2xvcigyMDAsIDEwMCwgMCwgMjU1KSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgICAg
ICBjb250ZXh0LT5maWxsUmVjdChkZWJ1Z1JlY3RzW2ldLnJlY3QsIENvbG9yKDIwMCwgMTAwLCAw
LCAzMCksIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tl
UmVjdChkZWJ1Z1JlY3RzW2ldLnJlY3QsIDIuMCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIH0K
IAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3Bs
YXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVh
ZHNVcERpc3BsYXkuaAppbmRleCA3ZWMwNWIwMTY3ZTY2NWZjOTMxYTFiZGIwNDUxNTg3MWZhZGEx
NjE1Li5jMjJkZmMyMjlhNWQ4YzA1MWMzNGYyNTFjNDkxYjY2OGRhYTY2ZjBmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBE
aXNwbGF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NIZWFkc1VwRGlzcGxheS5oCkBAIC0zMyw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgQ0NEZWJ1Z1JlY3RIaXN0b3J5OworY2xhc3MgQ0NGcmFtZVJhdGVDb3Vu
dGVyOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsK
IGNsYXNzIE1hbmFnZWRUZXh0dXJlOwpAQCAtNTEsNDAgKzUzLDIzIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgc2V0Rm9udEF0bGFzKFBhc3NPd25QdHI8Q0NGb250QXRsYXM+KTsKIAotICAgIGludCBj
dXJyZW50RnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRGcmFtZU51bWJlcjsg
fQotCi0gICAgdm9pZCBvbkZyYW1lQmVnaW4oZG91YmxlIHRpbWVzdGFtcCk7Ci0gICAgdm9pZCBv
blN3YXBCdWZmZXJzKCk7Ci0KICAgICBib29sIGVuYWJsZWQoY29uc3QgQ0NTZXR0aW5ncyYpIGNv
bnN0OwogICAgIHZvaWQgZHJhdyhDQ0xheWVyVHJlZUhvc3RJbXBsKik7CiAKICAgICB0eXBlZGVm
IFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4
U3dpenpsZUFscGhhPiBQcm9ncmFtOwogCiBwcml2YXRlOgotICAgIENDSGVhZHNVcERpc3BsYXko
KTsKKyAgICBDQ0hlYWRzVXBEaXNwbGF5KCkgeyB9OwogCiAgICAgdm9pZCBkcmF3SHVkQ29udGVu
dHMoR3JhcGhpY3NDb250ZXh0KiwgQ0NMYXllclRyZWVIb3N0SW1wbCosIGNvbnN0IENDU2V0dGlu
Z3MmLCBjb25zdCBJbnRTaXplJiBodWRTaXplKTsKLSAgICB2b2lkIGRyYXdGUFNDb3VudGVyKEdy
YXBoaWNzQ29udGV4dCosIGludCB0b3AsIGludCBoZWlnaHQpOwotICAgIHZvaWQgZHJhd0ZQU0Nv
dW50ZXJUZXh0KEdyYXBoaWNzQ29udGV4dCosIGludCB0b3AsIGludCB3aWR0aCwgaW50IGhlaWdo
dCk7Ci0gICAgYm9vbCBpc0JhZEZyYW1lKGludCBmcmFtZU51bWJlcikgY29uc3Q7Ci0gICAgaW50
IGZyYW1lSW5kZXgoaW50IGZyYW1lTnVtYmVyKSBjb25zdDsKLSAgICB2b2lkIGdldEF2ZXJhZ2VG
UFNBbmRTdGFuZGFyZERldmlhdGlvbihkb3VibGUgKmF2ZXJhZ2UsIGRvdWJsZSAqc3RhbmRhcmRE
ZXZpYXRpb24pIGNvbnN0OworICAgIHZvaWQgZHJhd0ZQU0NvdW50ZXIoR3JhcGhpY3NDb250ZXh0
KiwgQ0NGcmFtZVJhdGVDb3VudGVyKiwgaW50IHRvcCwgaW50IGhlaWdodCk7CisgICAgdm9pZCBk
cmF3RlBTQ291bnRlclRleHQoR3JhcGhpY3NDb250ZXh0KiwgQ0NGcmFtZVJhdGVDb3VudGVyKiwg
aW50IHRvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICB2b2lkIGRyYXdEZWJ1Z1JlY3Rz
KEdyYXBoaWNzQ29udGV4dCosIENDRGVidWdSZWN0SGlzdG9yeSosIGNvbnN0IENDU2V0dGluZ3Mm
KTsKIAogICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGNvbnN0IENDU2V0dGluZ3MmKSBj
b25zdDsKLQotICAgIGludCBtX2N1cnJlbnRGcmFtZU51bWJlcjsKKyAgICBib29sIHNob3dEZWJ1
Z1JlY3RzKGNvbnN0IENDU2V0dGluZ3MmKSBjb25zdDsKIAogICAgIE93blB0cjxNYW5hZ2VkVGV4
dHVyZT4gbV9odWRUZXh0dXJlOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBrQmVnaW5GcmFtZUhp
c3RvcnlTaXplID0gMTIwOwotICAgIC8vIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBvZiBubyBmcmFt
ZXMgbWFrZXMgdXMgZGVjaWRlIHRoYXQgdGhlIHByZXZpb3VzCi0gICAgLy8gYW5pbWF0aW9uIGlz
IG92ZXIuCi0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBrSWRsZVNlY29uZHNUcmlnZ2Vyc1Jlc2V0
OwotICAgIGRvdWJsZSBtX2JlZ2luVGltZUhpc3RvcnlJblNlY1trQmVnaW5GcmFtZUhpc3RvcnlT
aXplXTsKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIGtGcmFtZVRvb0Zhc3Q7Ci0gICAgc3RhdGlj
IGNvbnN0IGludCBrTnVtTWlzc2VkRnJhbWVzRm9yUmVzZXQgPSA1OwotCiAgICAgT3duUHRyPEND
Rm9udEF0bGFzPiBtX2ZvbnRBdGxhczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgK
aW5kZXggMjAyODgwNDgzOTAyMTQyZWIyYWY0Y2I0YWI1NTNkM2VjMjJjYTY2Mi4uZDM3YTJiZTk2
NzY4OGM0YWY1YzY3YmI0NWU4NWQ1OGVlNTkyMTJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmgKQEAgLTc2LDYgKzc2LDkgQEAgc3RydWN0IENDU2V0dGluZ3MgewogICAgICAgICAgICAg
OiBhY2NlbGVyYXRlUGFpbnRpbmcoZmFsc2UpCiAgICAgICAgICAgICAsIHNob3dGUFNDb3VudGVy
KGZhbHNlKQogICAgICAgICAgICAgLCBzaG93UGxhdGZvcm1MYXllclRyZWUoZmFsc2UpCisgICAg
ICAgICAgICAsIHNob3dQYWludFJlY3RzKGZhbHNlKQorICAgICAgICAgICAgLCBzaG93UHJvcGVy
dHlDaGFuZ2VkUmVjdHMoZmFsc2UpCisgICAgICAgICAgICAsIHNob3dTdXJmYWNlRGFtYWdlUmVj
dHMoZmFsc2UpCiAgICAgICAgICAgICAsIHJlZnJlc2hSYXRlKDApCiAgICAgICAgICAgICAsIHBl
clRpbGVQYWludGluZyhmYWxzZSkKICAgICAgICAgICAgICwgcGFydGlhbFN3YXBFbmFibGVkKGZh
bHNlKQpAQCAtODUsNiArODgsOSBAQCBzdHJ1Y3QgQ0NTZXR0aW5ncyB7CiAgICAgYm9vbCBhY2Nl
bGVyYXRlUGFpbnRpbmc7CiAgICAgYm9vbCBzaG93RlBTQ291bnRlcjsKICAgICBib29sIHNob3dQ
bGF0Zm9ybUxheWVyVHJlZTsKKyAgICBib29sIHNob3dQYWludFJlY3RzOworICAgIGJvb2wgc2hv
d1Byb3BlcnR5Q2hhbmdlZFJlY3RzOworICAgIGJvb2wgc2hvd1N1cmZhY2VEYW1hZ2VSZWN0czsK
ICAgICBkb3VibGUgcmVmcmVzaFJhdGU7CiAgICAgYm9vbCBwZXJUaWxlUGFpbnRpbmc7CiAgICAg
Ym9vbCBwYXJ0aWFsU3dhcEVuYWJsZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwCmluZGV4IGJkMTQ5YmUwOTBhN2UzYmVhMTA4MzZlZDU3ODE0ZjkyZWEwMzNjODAuLjAx
MmVlZmMxMjM2NTQyMzg5OWMzNzMzNGMzYjg0ZTJjZWNlNDJhMGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0zMiw3ICszMiw5IEBACiAjaW5jbHVkZSAiVHJh
Y2VFdmVudC5oIgogI2luY2x1ZGUgImNjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oIgogI2lu
Y2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5oIgorI2luY2x1ZGUgImNjL0NDRGVidWdSZWN0SGlz
dG9yeS5oIgogI2luY2x1ZGUgImNjL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2UuaCIKKyNpbmNsdWRl
ICJjYy9DQ0ZyYW1lUmF0ZUNvdW50ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0dlc3R1cmVDdXJ2ZS5o
IgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdC5oIgpAQCAtMTE3LDYgKzExOSw4IEBAIENDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5
ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MsIENDTGF5ZXJUcmVlCiAg
ICAgLCBtX25lZWRzQW5pbWF0ZUxheWVycyhmYWxzZSkKICAgICAsIG1fcGluY2hHZXN0dXJlQWN0
aXZlKGZhbHNlKQogICAgICwgbV90aW1lU291cmNlQ2xpZW50QWRhcHRlcihDQ0xheWVyVHJlZUhv
c3RJbXBsVGltZVNvdXJjZUFkYXB0ZXI6OmNyZWF0ZSh0aGlzLCBDQ0RlbGF5QmFzZWRUaW1lU291
cmNlOjpjcmVhdGUobG93RnJlcXVlbmN5QW5pbWF0aW9uSW50ZXJ2YWwgKiAxMDAwLjAsIENDUHJv
eHk6OmN1cnJlbnRUaHJlYWQoKSkpKQorICAgICwgbV9mcHNDb3VudGVyKENDRnJhbWVSYXRlQ291
bnRlcjo6Y3JlYXRlKCkpCisgICAgLCBtX2RlYnVnUmVjdEhpc3RvcnkoQ0NEZWJ1Z1JlY3RIaXN0
b3J5OjpjcmVhdGUoKSkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwog
ICAgIGRpZFZpc2liaWxpdHlDaGFuZ2UodGhpcywgbV92aXNpYmxlKTsKQEAgLTI1OCw3ICsyNjIs
NyBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1Jl
bmRlclBhc3NMaXN0JiBwYXNzZXMsIENDTGF5ZQogCiAgICAgVFJBQ0VfRVZFTlQxKCJ3ZWJraXQi
LCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzIiwgInJlbmRlclN1
cmZhY2VMYXllckxpc3Quc2l6ZSgpIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nIHVuc2lnbmVkPihy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSkpOwogCi0gICAgaWYgKGxheWVyUmVuZGVyZXJD
YXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwKQorICAgIGlmIChsYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCB8fCBzZXR0aW5ncygpLnNob3dTdXJmYWNlRGFt
YWdlUmVjdHMpCiAgICAgICAgIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMobV9yb290TGF5ZXJJ
bXBsLmdldCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBtX3Jvb3REYW1hZ2VSZWN0
ID0gbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3Vy
cmVudERhbWFnZVJlY3QoKTsKIApAQCAtMzk1LDggKzM5OSw4IEBAIHZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6ZHJhd0xheWVycyhjb25zdCBGcmFtZURhdGEmIGZyYW1lKQogICAgIC8vIEZJWE1F
OiB1c2UgdGhlIGZyYW1lIGJlZ2luIHRpbWUgZnJvbSB0aGUgb3ZlcmFsbCBjb21wb3NpdG9yIHNj
aGVkdWxlci4KICAgICAvLyBUaGlzIHZhbHVlIGlzIGN1cnJlbnRseSBpbmFjY2Vzc2libGUgYmVj
YXVzZSBpdCBpcyB1cCBpbiBDaHJvbWl1bSdzCiAgICAgLy8gUmVuZGVyV2lkZ2V0LgotICAgIG1f
aGVhZHNVcERpc3BsYXktPm9uRnJhbWVCZWdpbihjdXJyZW50VGltZSgpKTsKIAorICAgIG1fZnBz
Q291bnRlci0+bWFya0JlZ2lubmluZ09mRnJhbWUoY3VycmVudFRpbWUoKSk7CiAgICAgbV9sYXll
clJlbmRlcmVyLT5iZWdpbkRyYXdpbmdGcmFtZShtX3Jvb3RMYXllckltcGwtPnJlbmRlclN1cmZh
Y2UoKSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lLnJlbmRlclBhc3Nlcy5z
aXplKCk7ICsraSkKQEAgLTQwOSw2ICs0MTMsMTAgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpkcmF3TGF5ZXJzKGNvbnN0IEZyYW1lRGF0YSYgZnJhbWUpCiAgICAgICAgIGlmIChpdC5yZXBy
ZXNlbnRzSXRzZWxmKCkgJiYgIWl0LT52aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgaXQtPmRpZERyYXcoKTsKICAgICB9CisKKyAgICBpZiAobV9kZWJ1Z1JlY3RIaXN0
b3J5LT5lbmFibGVkKHNldHRpbmdzKCkpKQorICAgICAgICBtX2RlYnVnUmVjdEhpc3RvcnktPnNh
dmVEZWJ1Z1JlY3RzRm9yQ3VycmVudEZyYW1lKG1fcm9vdExheWVySW1wbC5nZXQoKSwgZnJhbWUu
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgc2V0dGluZ3MoKSk7CisKICAgICBpZiAobV9oZWFkc1Vw
RGlzcGxheS0+ZW5hYmxlZChzZXR0aW5ncygpKSkKICAgICAgICAgbV9oZWFkc1VwRGlzcGxheS0+
ZHJhdyh0aGlzKTsKIApAQCAtNDQ0LDcgKzQ1Miw4IEBAIFRleHR1cmVBbGxvY2F0b3IqIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpIGNvbnN0CiBib29sIEND
TGF5ZXJUcmVlSG9zdEltcGw6OnN3YXBCdWZmZXJzKCkKIHsKICAgICBBU1NFUlQobV9sYXllclJl
bmRlcmVyKTsKLSAgICBtX2hlYWRzVXBEaXNwbGF5LT5vblN3YXBCdWZmZXJzKCk7CisKKyAgICBt
X2Zwc0NvdW50ZXItPm1hcmtFbmRPZkZyYW1lKCk7CiAgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJl
ci0+c3dhcEJ1ZmZlcnMoZW5jbG9zaW5nSW50UmVjdChtX3Jvb3REYW1hZ2VSZWN0KSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCA0NWFiMWYwNTIwYWNjODUx
NmZhMzZhNzUxMjA1ZTMyNjg2ZGQ4NmJjLi43YmVhNmQ4NzY1ZWE1MmNlMDUyNWJhMTYyNjk5NjY5
MWI4NzNiNDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC00MCw3
ICs0MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NBY3RpdmVHZXN0dXJlQW5p
bWF0aW9uOwogY2xhc3MgQ0NDb21wbGV0aW9uRXZlbnQ7CitjbGFzcyBDQ0RlYnVnUmVjdEhpc3Rv
cnk7CiBjbGFzcyBDQ0ZvbnRBdGxhczsKK2NsYXNzIENDRnJhbWVSYXRlQ291bnRlcjsKIGNsYXNz
IENDUGFnZVNjYWxlQW5pbWF0aW9uOwogY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBDQ0xheWVy
VHJlZUhvc3RJbXBsVGltZVNvdXJjZUFkYXB0ZXI7CkBAIC0xNTAsNiArMTUyLDkgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOwogCisgICAgQ0NGcmFtZVJhdGVDb3VudGVy
KiBmcHNDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9mcHNDb3VudGVyLmdldCgpOyB9CisgICAg
Q0NEZWJ1Z1JlY3RIaXN0b3J5KiBkZWJ1Z1JlY3RIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9k
ZWJ1Z1JlY3RIaXN0b3J5LmdldCgpOyB9CisKIHByb3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhv
c3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmLCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CiAK
QEAgLTIxNSw2ICsyMjAsOSBAQCBwcml2YXRlOgogICAgIENDTGF5ZXJMaXN0IG1fbW9zdFJlY2Vu
dFJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAKICAgICBGbG9hdFJlY3QgbV9yb290RGFtYWdlUmVj
dDsKKworICAgIE93blB0cjxDQ0ZyYW1lUmF0ZUNvdW50ZXI+IG1fZnBzQ291bnRlcjsKKyAgICBP
d25QdHI8Q0NEZWJ1Z1JlY3RIaXN0b3J5PiBtX2RlYnVnUmVjdEhpc3Rvcnk7CiB9OwogCiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138385</attachid>
            <date>2012-04-23 10:56:53 -0700</date>
            <delta_ts>2012-04-23 16:52:20 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-79400-20120423105652.patch</filename>
            <type>text/plain</type>
            <size>43228</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0OTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDgxOWI1Nzk0YjI3OTMy
N2JmMmU1OGRlYTRhNGQwYjZjOWQwZWRiMS4uNjUwNTQxZDM4ODg2MmExOGEyODQxMTk5NTJjYWI4
ZjdkOWUyMmMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDEyLTA0LTIwICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
VmlzdWFsaXplIGFjY2VsZXJhdGVkIGNvbXBvc2l0b3IgcmVjdHMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTQwMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IEFkcmllbm5lIFdhbGtlci4KKworICAgICAgICBObyB0ZXN0cywgYWxsIHRoZSBjb2RlIGFk
ZGVkIGlzIG9ubHkgZGVidWdnaW5nIGNvZGUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHN1
cHBvcnQgZm9yIHZpc3VhbGl6aW5nIHRocmVlIGRpZmZlcmVudCB0eXBlcyBvZgorICAgICAgICBy
ZWN0cyBvbiB0aGUgY2hyb21pdW0gaGVhZHMtdXAgZGlzcGxheToKKyAgICAgICAgMS4gdXBkYXRl
UmVjdHMgdGhhdCBpbmRpY2F0ZSB3aGF0IHdhcyBwYWludGVkL3VwbG9hZGVkIHRvIGEgcmVzb3Vy
Y2UKKyAgICAgICAgMi4gcHJvcGVydHlDaGFuZ2VkUmVjdHMgdGhhdCBpbmRpY2F0ZSBsYXllcnMg
dGhhdCBoYXMgcHJvcGVydHkgY2hhbmdlcworICAgICAgICAzLiBzdXJmYWNlRGFtYWdlUmVjdHMg
dGhhdCBhcmUgdGhlIGFjY3VtdWxhdGlvbiBvZiB1cGRhdGVSZWN0cyBhbmQKKyAgICAgICAgICAg
cHJvcGVydHlDaGFuZ2VkUmVjdHMsIGluZGljYXRpbmcgd2hhdCBwaXhlbHMgb24gdGhlIHNjcmVl
biBoYXZlCisgICAgICAgICAgIGFjdHVhbGx5IGNoYW5nZWQuICAoU3VyZmFjZSBkYW1hZ2UgYWxz
byBhY2NvdW50cyBmb3IgbmV3bHkgZXhwb3NlZAorICAgICAgICAgICBhcmVhcyBidXQgdGhhdCBp
cyBub3QgZXhwbGljaXRseSB2aXN1YWxpemVkLikKKworICAgICAgICBJbiBhZGRpdGlvbiB0byBh
ZGRpbmcgc3VwcG9ydCBmb3IgdmlzdWFsaXppbmcgdGhpcywgdGhlCisgICAgICAgIENDSGVhZHNV
cERpc3BsYXkgd2FzIHNpZ25pZmljYW50bHkgcmVmYWN0b3JlZCwgc2VwYXJhdGluZyB0aGUgRlBT
CisgICAgICAgIENvdW50ZXIgZnVuY3Rpb25hbGl0eSBpbnRvIGEgZGlmZmVyZW50IGNsYXNzLCBz
byB0aGF0IHRoZSBoZWFkcy11cAorICAgICAgICBkaXNwbGF5IGlzIGFsbCBhYm91dCB2aXN1YWxp
emluZyBhbm5vdGF0aW9ucywgYW5kIHRob3NlCisgICAgICAgIGFubm90YXRpb25zIChmcmFtZSBy
YXRlLCBkZWJ1ZyByZWN0cykgYXJlIGxvZ2dlZCBzZXBhcmF0ZWx5LgorCisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVi
dWdSZWN0SGlzdG9yeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RlYnVnUmVjdEhpc3Rvcnk6OkNDRGVidWdSZWN0SGlzdG9yeSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0RlYnVnUmVjdEhpc3Rvcnk6OmVuYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NEZWJ1Z1JlY3RIaXN0b3J5OjpzYXZlRGVidWdSZWN0c0ZvckN1cnJlbnRGcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0RlYnVnUmVjdEhpc3Rvcnk6OnNhdmVQYWludFJlY3RzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDRGVidWdSZWN0SGlzdG9yeTo6c2F2ZVByb3BlcnR5Q2hhbmdlZFJl
Y3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGVidWdSZWN0SGlzdG9yeTo6c2F2ZVN1cmZhY2VE
YW1hZ2VSZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NE
ZWJ1Z1JlY3RIaXN0b3J5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RlYnVnUmVjdDo6Q0NEZWJ1Z1JlY3QpOgorICAgICAgICAoQ0NEZWJ1Z1JlY3Qp
OgorICAgICAgICAoQ0NEZWJ1Z1JlY3RIaXN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGVi
dWdSZWN0SGlzdG9yeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGVidWdSZWN0SGlz
dG9yeTo6ZGVidWdSZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NGcmFtZVJhdGVDb3VudGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNhZmVNb2QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVD
b3VudGVyOjpmcmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ291bnRl
cjo6Q0NGcmFtZVJhdGVDb3VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ291
bnRlcjo6bWFya0JlZ2lubmluZ09mRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGcmFtZVJh
dGVDb3VudGVyOjptYXJrRW5kT2ZGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0
ZUNvdW50ZXI6OmlzQmFkRnJhbWVJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1l
UmF0ZUNvdW50ZXI6OmlzQmFkRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVD
b3VudGVyOjpnZXRBdmVyYWdlRlBTQW5kU3RhbmRhcmREZXZpYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NGcmFtZVJhdGVDb3VudGVyOjp0aW1lU3RhbXBPZlJlY2VudEZyYW1lKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvdW50ZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDRnJhbWVSYXRlQ291bnRlcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvdW50ZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvdW50ZXI6OmN1cnJlbnRGcmFtZU51bWJlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvdW50ZXI6OnRpbWVTdGFtcEhpc3RvcnlTaXplKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlz
cGxheTo6ZW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5OjpzaG93
RGVidWdSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmRyYXdIdWRDb250ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3RlBTQ291bnRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3RlBTQ291bnRlclRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6ZHJhd0RlYnVnUmVjdHMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NIZWFkc1VwRGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5OjpDQ0hlYWRzVXBEaXNwbGF5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDU2V0dGluZ3M6OkNDU2V0dGluZ3MpOgorICAgICAgICAoQ0NTZXR0aW5ncyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVy
VHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNh
bGN1bGF0ZVJlbmRlclBhc3Nlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6
OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmZwc0NvdW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6ZGVidWdSZWN0SGlzdG9yeSk6CisgICAgICAgIChDQ0xheWVy
VHJlZUhvc3RJbXBsKToKKwogMjAxMi0wNC0yMyAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFByb3Blcmx5IGlnbm9yZSB1bnN1cHBvcnRl
ZCBhbmltYXRpb24gZGlyZWN0aW9ucy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBjMzNhY2FlOTMwYTQw
MWI2NmYzNjY0ZmMxZWVkNmMwNzQ2MDFiYmQyLi5jMDY4MmY3NDJhYWY0ZDAzMGNjYjFmYmJmNzIy
NTNmMzdjMWJhYWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNjEzLDEyICszNjEzLDE2IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2Vy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdC
b3JkZXJEcmF3UXVhZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnUmVjdEhpc3RvcnkuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnUmVjdEhpc3RvcnkuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWxheUJhc2VkVGlt
ZVNvdXJjZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRGVsYXlCYXNlZFRpbWVTb3VyY2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGb250QXRsYXMuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZvbnRBdGxhcy5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvdW50ZXIuY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvdW50
ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFt
ZVJhdGVDb250cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDR2VzdHVyZUN1cnZlLmgnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z1JlY3RIaXN0
b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
RGVidWdSZWN0SGlzdG9yeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2M4OGRjYzQwMDNhNjY5MTg5M2Y3NWI1
NDVmZjBkNjQ5NWQ4ODgxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdSZWN0SGlzdG9yeS5jcHAKQEAgLTAsMCAr
MSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJDQ0RlYnVnUmVjdEhpc3RvcnkuaCIK
KworI2luY2x1ZGUgIkNDRGFtYWdlVHJhY2tlci5oIgorI2luY2x1ZGUgIkNDTGF5ZXJJbXBsLmgi
CisjaW5jbHVkZSAiQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiQ0NNYXRoVXRpbC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDRGVidWdSZWN0SGlzdG9yeTo6Q0NEZWJ1Z1JlY3RI
aXN0b3J5KCkKK3sKK30KKworYm9vbCBDQ0RlYnVnUmVjdEhpc3Rvcnk6OmVuYWJsZWQoY29uc3Qg
Q0NTZXR0aW5ncyYgc2V0dGluZ3MpCit7CisgICAgcmV0dXJuIHNldHRpbmdzLnNob3dQYWludFJl
Y3RzIHx8IHNldHRpbmdzLnNob3dQcm9wZXJ0eUNoYW5nZWRSZWN0cyB8fCBzZXR0aW5ncy5zaG93
U3VyZmFjZURhbWFnZVJlY3RzOworfQorCit2b2lkIENDRGVidWdSZWN0SGlzdG9yeTo6c2F2ZURl
YnVnUmVjdHNGb3JDdXJyZW50RnJhbWUoQ0NMYXllckltcGwqIHJvb3RMYXllciwgY29uc3QgVmVj
dG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNvbnN0IENDU2V0dGlu
Z3MmIHNldHRpbmdzKQoreworICAgIC8vIEZvciBub3csIGNsZWFyIGFsbCByZWN0cyBmcm9tIHBy
ZXZpb3VzIGZyYW1lcy4gSW4gdGhlIGZ1dHVyZSB3ZSBtYXkgd2FudCB0byBzdG9yZQorICAgIC8v
IGFsbCBkZWJ1ZyByZWN0cyBmb3IgYSBoaXN0b3J5IG9mIG1hbnkgZnJhbWVzLgorICAgIG1fZGVi
dWdSZWN0cy5jbGVhcigpOworCisgICAgaWYgKHNldHRpbmdzLnNob3dQYWludFJlY3RzKQorICAg
ICAgICBzYXZlUGFpbnRSZWN0cyhyb290TGF5ZXIpOworCisgICAgaWYgKHNldHRpbmdzLnNob3dQ
cm9wZXJ0eUNoYW5nZWRSZWN0cykKKyAgICAgICAgc2F2ZVByb3BlcnR5Q2hhbmdlZFJlY3RzKHJl
bmRlclN1cmZhY2VMYXllckxpc3QpOworCisgICAgaWYgKHNldHRpbmdzLnNob3dTdXJmYWNlRGFt
YWdlUmVjdHMpCisgICAgICAgIHNhdmVTdXJmYWNlRGFtYWdlUmVjdHMocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7Cit9CisKKwordm9pZCBDQ0RlYnVnUmVjdEhpc3Rvcnk6OnNhdmVQYWludFJlY3Rz
KENDTGF5ZXJJbXBsKiBsYXllcikKK3sKKyAgICAvLyBXZSB3b3VsZCBsaWtlIHRvIHZpc3VhbGl6
ZSB3aGVyZSBhbnkgbGF5ZXIncyBwYWludCByZWN0ICh1cGRhdGUgcmVjdCkgaGFzIGNoYW5nZWQs
CisgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoaXMgbGF5ZXIgaXMgc2tpcHBlZCBmb3Ig
YWN0dWFsIGRyYXdpbmcgb3Igbm90LiBUaGVyZWZvcmUKKyAgICAvLyB3ZSB0cmF2ZXJzZSByZWN1
cnNpdmVseSBvdmVyIGFsbCBsYXllcnMsIG5vdCBqdXN0IHRoZSByZW5kZXIgc3VyZmFjZSBsaXN0
LgorCisgICAgaWYgKCFsYXllci0+dXBkYXRlUmVjdCgpLmlzRW1wdHkoKSAmJiBsYXllci0+ZHJh
d3NDb250ZW50KCkpCisgICAgICAgIG1fZGVidWdSZWN0cy5hcHBlbmQoQ0NEZWJ1Z1JlY3QoUGFp
bnRSZWN0VHlwZSwgQ0NNYXRoVXRpbDo6bWFwQ2xpcHBlZFJlY3QobGF5ZXItPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCksIGxheWVyLT51cGRhdGVSZWN0KCkpKSk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIHNhdmVQ
YWludFJlY3RzKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKK30KKwordm9pZCBDQ0RlYnVn
UmVjdEhpc3Rvcnk6OnNhdmVQcm9wZXJ0eUNoYW5nZWRSZWN0cyhjb25zdCBWZWN0b3I8Q0NMYXll
ckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICBmb3IgKGludCBzdXJmYWNl
SW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+
PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZh
Y2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XTsKKyAgICAgICAg
Q0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5k
ZXJTdXJmYWNlKCk7CisgICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKKworICAgICAgICBj
b25zdCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5
ZXJMaXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5k
ZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKKyAgICAgICAgICAgIENDTGF5
ZXJJbXBsKiBsYXllciA9IGxheWVyTGlzdFtsYXllckluZGV4XTsKKworICAgICAgICAgICAgaWYg
KENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8
Q0NMYXllckltcGw+KGxheWVyLCByZW5kZXJTdXJmYWNlTGF5ZXItPmlkKCkpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAobGF5ZXItPmxheWVyUHJvcGVydHlD
aGFuZ2VkKCkpCisgICAgICAgICAgICAgICAgbV9kZWJ1Z1JlY3RzLmFwcGVuZChDQ0RlYnVnUmVj
dChQcm9wZXJ0eUNoYW5nZWRSZWN0VHlwZSwgQ0NNYXRoVXRpbDo6bWFwQ2xpcHBlZFJlY3QobGF5
ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCks
IGxheWVyLT5ib3VuZHMoKSkpKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ0NEZWJ1
Z1JlY3RIaXN0b3J5OjpzYXZlU3VyZmFjZURhbWFnZVJlY3RzKGNvbnN0IFZlY3RvcjxDQ0xheWVy
SW1wbCogPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICBmb3IgKGludCBzdXJmYWNl
SW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+
PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZh
Y2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XTsKKyAgICAgICAg
Q0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5k
ZXJTdXJmYWNlKCk7CisgICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKKworICAgICAgICBt
X2RlYnVnUmVjdHMuYXBwZW5kKENDRGVidWdSZWN0KFN1cmZhY2VEYW1hZ2VSZWN0VHlwZSwgQ0NN
YXRoVXRpbDo6bWFwQ2xpcHBlZFJlY3QocmVuZGVyU3VyZmFjZS0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKSwgcmVuZGVyU3VyZmFjZS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgp
KSkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z1JlY3RIaXN0b3J5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnUmVjdEhpc3Rvcnku
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45M2RhMTA3YWRlNGZiNzc0OWFiMmQ1Y2U3NDc1YTIyNmNiYjBlMTQ0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEZWJ1Z1JlY3RIaXN0b3J5LmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBDQ0RlYnVnUmVjdEhpc3RvcnlfaAorI2RlZmluZSBDQ0RlYnVnUmVjdEhpc3Rv
cnlfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ0NMYXllckltcGw7CitzdHJ1Y3QgQ0NTZXR0aW5nczsKKworLy8gVGhlcmUg
YXJlIGN1cnJlbnRseSB0aHJlZSB0eXBlcyBvZiBkZWJ1ZyByZWN0czoKKy8vCisvLyAtIFBhaW50
IHJlY3RzICh1cGRhdGUgcmVjdHMpOiByZWdpb25zIG9mIGEgbGF5ZXIgdGhhdCBuZWVkZWQgdG8g
YmUgcmUtdXBsb2FkZWQgdG8gdGhlCisvLyAgIHRleHR1cmUgcmVzb3VyY2U7IGluIG1vc3QgY2Fz
ZXMgaW1wbHlpbmcgdGhhdCBXZWJDb3JlIGhhZCB0byByZXBhaW50IHRoZW0sIHRvby4KKy8vCisv
LyAtIFByb3BlcnR5LWNoYW5nZWQgcmVjdHM6IGVuY2xvc2luZyBib3VuZHMgb2YgbGF5ZXJzIHRo
YXQgY2F1c2UgY2hhbmdlcyB0byB0aGUgc2NyZWVuCisvLyAgIGV2ZW4gaWYgdGhlIGxheWVyIGRp
ZCBub3QgY2hhbmdlIGludGVybmFsbHkuIChGb3IgZXhhbXBsZSwgaWYgdGhlIGxheWVyJ3Mgb3Bh
Y2l0eSBvcgorLy8gICBwb3NpdGlvbiBjaGFuZ2VzLikKKy8vCisvLyAtIFN1cmZhY2UgZGFtYWdl
IHJlY3RzOiB0aGUgYWdncmVnYXRlIGRhbWFnZSBvbiBhIHRhcmdldCBzdXJmYWNlIHRoYXQgaXMg
Y2F1c2VkIGJ5IGFsbAorLy8gICBsYXllcnMgYW5kIHN1cmZhY2VzIHRoYXQgY29udHJpYnV0ZSB0
byBpdC4gVGhpcyBpbmNsdWRlcyAoMSkgcGFpbnQgcmVjdHMsICgyKSBwcm9wZXJ0eS0KKy8vICAg
Y2hhbmdlZCByZWN0cywgYW5kICgzKSBuZXdseSBleHBvc2VkIGFyZWFzLgorLy8KK2VudW0gRGVi
dWdSZWN0VHlwZSB7IFBhaW50UmVjdFR5cGUsIFByb3BlcnR5Q2hhbmdlZFJlY3RUeXBlLCBTdXJm
YWNlRGFtYWdlUmVjdFR5cGUgfTsKKworc3RydWN0IENDRGVidWdSZWN0IHsKKyAgICBDQ0RlYnVn
UmVjdChEZWJ1Z1JlY3RUeXBlIG5ld1R5cGUsIEZsb2F0UmVjdCBuZXdSZWN0KQorICAgICAgICAg
ICAgOiB0eXBlKG5ld1R5cGUpCisgICAgICAgICAgICAsIHJlY3QobmV3UmVjdCkgeyB9CisKKyAg
ICBEZWJ1Z1JlY3RUeXBlIHR5cGU7CisgICAgRmxvYXRSZWN0IHJlY3Q7Cit9OworCisvLyBUaGlz
IGNsYXNzIG1haW50YWlucyBhIGhpc3Rvcnkgb2YgcmVjdHMgb2YgdmFyaW91cyB0eXBlcyB0aGF0
IGNhbiBiZSB1c2VkCisvLyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBUaGUgb3ZlcmhlYWQgb2Yg
Y29sbGVjdGluZyByZWN0cyBpcyBwZXJmb3JtZWQgb25seSBpZgorLy8gdGhlIGFwcHJvcHJpYXRl
IENDU2V0dGluZ3MgYXJlIGVuYWJsZWQuCitjbGFzcyBDQ0RlYnVnUmVjdEhpc3RvcnkgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENDRGVidWdSZWN0SGlzdG9yeSk7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8Q0NEZWJ1Z1JlY3RIaXN0b3J5PiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0RlYnVnUmVjdEhpc3RvcnkoKSk7CisgICAgfQor
CisgICAgYm9vbCBlbmFibGVkKGNvbnN0IENDU2V0dGluZ3MmKTsKKworICAgIC8vIE5vdGU6IFNh
dmluZyBkZWJ1ZyByZWN0cyBtdXN0IGhhcHBlbiBiZWZvcmUgbGF5ZXJzJyBjaGFuZ2UgdHJhY2tp
bmcgaXMgcmVzZXQuCisgICAgdm9pZCBzYXZlRGVidWdSZWN0c0ZvckN1cnJlbnRGcmFtZShDQ0xh
eWVySW1wbCogcm9vdExheWVyLCBjb25zdCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgY29uc3QgQ0NTZXR0aW5ncyYpOworCisgICAgY29uc3QgVmVjdG9yPEND
RGVidWdSZWN0PiYgZGVidWdSZWN0cygpIHsgcmV0dXJuIG1fZGVidWdSZWN0czsgfQorCitwcml2
YXRlOgorICAgIENDRGVidWdSZWN0SGlzdG9yeSgpOworCisgICAgdm9pZCBzYXZlUGFpbnRSZWN0
cyhDQ0xheWVySW1wbCopOworICAgIHZvaWQgc2F2ZVByb3BlcnR5Q2hhbmdlZFJlY3RzKGNvbnN0
IFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICB2b2lk
IHNhdmVTdXJmYWNlRGFtYWdlUmVjdHMoY29uc3QgVmVjdG9yPENDTGF5ZXJJbXBsKiA+JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKworICAgIFZlY3RvcjxDQ0RlYnVnUmVjdD4gbV9kZWJ1Z1Jl
Y3RzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ291bnRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNv
dW50ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2ZGZmMDZhYjBjYjE4NTA3NDQyMTc0MmExMWU4NDY1MDZl
MjNlZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvdW50ZXIuY3BwCkBAIC0wLDAgKzEsMTM0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisjaW5jbHVkZSAiQ0NGcmFtZVJhdGVDb3VudGVyLmgiCisKKyNpbmNsdWRl
ICJDQ1Byb3h5LmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY29uc3QgZG91YmxlIENDRnJhbWVSYXRlQ291bnRlcjo6a0ZyYW1lVG9vRmFz
dCA9IDEuMCAvIDcwLjA7IC8vIG1lYXN1cmVkIGluIHNlY29uZHMKK2NvbnN0IGRvdWJsZSBDQ0Zy
YW1lUmF0ZUNvdW50ZXI6OmtGcmFtZVRvb1Nsb3cgPSAxLjAgLyAxMi4wOworCisvLyBzYWZlTW9k
IHdvcmtzIG9uIC0xLCByZXR1cm5pbmcgbS0xIGluIHRoYXQgY2FzZS4KK3N0YXRpYyBpbmxpbmUg
aW50IHNhZmVNb2QoaW50IG51bWJlciwgaW50IG1vZHVsdXMpCit7CisgICAgcmV0dXJuIChudW1i
ZXIgKyBtb2R1bHVzKSAlIG1vZHVsdXM7Cit9CisKK2lubGluZSBpbnQgQ0NGcmFtZVJhdGVDb3Vu
dGVyOjpmcmFtZUluZGV4KGludCBmcmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gc2FmZU1vZChm
cmFtZSwga1RpbWVTdGFtcEhpc3RvcnlTaXplKTsKK30KKworQ0NGcmFtZVJhdGVDb3VudGVyOjpD
Q0ZyYW1lUmF0ZUNvdW50ZXIoKQorICAgIDogbV9jdXJyZW50RnJhbWVOdW1iZXIoMSkKK3sKKyAg
ICBtX3RpbWVTdGFtcEhpc3RvcnlbMF0gPSBjdXJyZW50VGltZSgpOworICAgIG1fdGltZVN0YW1w
SGlzdG9yeVsxXSA9IG1fdGltZVN0YW1wSGlzdG9yeVswXTsKKyAgICBmb3IgKGludCBpID0gMjsg
aSA8IGtUaW1lU3RhbXBIaXN0b3J5U2l6ZTsgaSsrKQorICAgICAgICBtX3RpbWVTdGFtcEhpc3Rv
cnlbaV0gPSAwOworfQorCit2b2lkIENDRnJhbWVSYXRlQ291bnRlcjo6bWFya0JlZ2lubmluZ09m
RnJhbWUoZG91YmxlIHRpbWVzdGFtcCkKK3sKKyAgICBtX3RpbWVTdGFtcEhpc3RvcnlbZnJhbWVJ
bmRleChtX2N1cnJlbnRGcmFtZU51bWJlcildID0gdGltZXN0YW1wOworfQorCit2b2lkIENDRnJh
bWVSYXRlQ291bnRlcjo6bWFya0VuZE9mRnJhbWUoKQoreworICAgIG1fY3VycmVudEZyYW1lTnVt
YmVyICs9IDE7Cit9CisKK2Jvb2wgQ0NGcmFtZVJhdGVDb3VudGVyOjppc0JhZEZyYW1lSW50ZXJ2
YWwoZG91YmxlIGludGVydmFsQmV0d2VlbkNvbnNlY3V0aXZlRnJhbWVzKSBjb25zdAoreworICAg
IGJvb2wgc2NoZWR1bGVyQWxsb3dzRG91YmxlRnJhbWVzID0gIUNDUHJveHk6Omhhc0ltcGxUaHJl
YWQoKTsKKyAgICBib29sIGludGVydmFsVG9vRmFzdCA9IHNjaGVkdWxlckFsbG93c0RvdWJsZUZy
YW1lcyAmJiBpbnRlcnZhbEJldHdlZW5Db25zZWN1dGl2ZUZyYW1lcyA8IGtGcmFtZVRvb0Zhc3Q7
CisgICAgYm9vbCBpbnRlcnZhbFRvb1Nsb3cgPSBpbnRlcnZhbEJldHdlZW5Db25zZWN1dGl2ZUZy
YW1lcyA+IGtGcmFtZVRvb1Nsb3c7CisgICAgcmV0dXJuIGludGVydmFsVG9vRmFzdCB8fCBpbnRl
cnZhbFRvb1Nsb3c7Cit9CisKK2Jvb2wgQ0NGcmFtZVJhdGVDb3VudGVyOjppc0JhZEZyYW1lKGlu
dCBmcmFtZU51bWJlcikgY29uc3QKK3sKKyAgICBkb3VibGUgZGVsdGEgPSBtX3RpbWVTdGFtcEhp
c3RvcnlbZnJhbWVJbmRleChmcmFtZU51bWJlcildIC0KKyAgICAgICAgICAgIG1fdGltZVN0YW1w
SGlzdG9yeVtmcmFtZUluZGV4KGZyYW1lTnVtYmVyIC0gMSldOworICAgIHJldHVybiBpc0JhZEZy
YW1lSW50ZXJ2YWwoZGVsdGEpOworfQorCit2b2lkIENDRnJhbWVSYXRlQ291bnRlcjo6Z2V0QXZl
cmFnZUZQU0FuZFN0YW5kYXJkRGV2aWF0aW9uKGRvdWJsZSYgYXZlcmFnZUZQUywgZG91YmxlJiBz
dGFuZGFyZERldmlhdGlvbikgY29uc3QKK3sKKyAgICBpbnQgZnJhbWUgPSBtX2N1cnJlbnRGcmFt
ZU51bWJlciAtIDE7CisgICAgYXZlcmFnZUZQUyA9IDA7CisgICAgaW50IGF2ZXJhZ2VGUFNDb3Vu
dCA9IDA7CisgICAgZG91YmxlIGZwc1ZhcmlhbmNlTnVtZXJhdG9yID0gMDsKKworICAgIC8vIFdh
bGsgYmFja3dhcmRzIHRocm91Z2ggdGhlIHNhbXBsZXMgbG9va2luZyBmb3IgYSBydW4gb2YgZ29v
ZCBmcmFtZQorICAgIC8vIHRpbWluZ3MgZnJvbSB3aGljaCB0byBjb21wdXRlIHRoZSBtZWFuIGFu
ZCBzdGFuZGFyZCBkZXZpYXRpb24uCisgICAgLy8KKyAgICAvLyBTbG93IGZyYW1lcyBvY2N1ciBq
dXN0IGJlY2F1c2UgdGhlIHVzZXIgaXMgaW5hY3RpdmUsIGFuZCBzaG91bGQgYmUKKyAgICAvLyBp
Z25vcmVkLiBGYXN0IGZyYW1lcyBhcmUgaWdub3JlZCBpZiB0aGUgc2NoZWR1bGVyIGlzIGluIHNp
bmdsZS10aHJlYWQKKyAgICAvLyBtb2RlIGluIG9yZGVyIHRvIHJlcHJlc2VudCB0aGUgdHJ1ZSBm
cmFtZSByYXRlIGluIHNwaXRlIG9mIHRoZSBmYWN0IHRoYXQKKyAgICAvLyB0aGUgZmlyc3QgZmV3
IHN3YXBidWZmZXJzIGhhcHBlbiBpbnN0YW50bHkgd2hpY2ggc2tld3MgdGhlIHN0YXRpc3RpY3MK
KyAgICAvLyB0b28gbXVjaCBmb3Igc2hvcnQgbGl2ZWQgYW5pbWF0aW9ucy4KKyAgICAvLworICAg
IC8vIGlzQmFkRnJhbWUgZW5jYXBzdWxhdGVzIHRoZSBmcmFtZSB0b28gc2xvdy9mcmFtZSB0b28g
ZmFzdCBsb2dpYy4KKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoIWlzQmFkRnJhbWUoZnJh
bWUpKSB7CisgICAgICAgICAgICBhdmVyYWdlRlBTQ291bnQrKzsKKyAgICAgICAgICAgIGRvdWJs
ZSBzZWNGb3JMYXN0RnJhbWUgPSBtX3RpbWVTdGFtcEhpc3RvcnlbZnJhbWVJbmRleChmcmFtZSld
IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RpbWVTdGFtcEhpc3Rv
cnlbZnJhbWVJbmRleChmcmFtZSAtIDEpXTsKKyAgICAgICAgICAgIGRvdWJsZSB4ID0gMS4wIC8g
c2VjRm9yTGFzdEZyYW1lOworICAgICAgICAgICAgZG91YmxlIGRlbHRhRnJvbUF2ZXJhZ2UgPSB4
IC0gYXZlcmFnZUZQUzsKKyAgICAgICAgICAgIC8vIENoYW5nZSB3aXRoIGNhdXRpb24gLSBudW1l
cmljcy4gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TdGFuZGFyZF9kZXZpYXRpb24KKyAg
ICAgICAgICAgIGF2ZXJhZ2VGUFMgPSBhdmVyYWdlRlBTICsgZGVsdGFGcm9tQXZlcmFnZSAvIGF2
ZXJhZ2VGUFNDb3VudDsKKyAgICAgICAgICAgIGZwc1ZhcmlhbmNlTnVtZXJhdG9yID0gZnBzVmFy
aWFuY2VOdW1lcmF0b3IgKyBkZWx0YUZyb21BdmVyYWdlICogKHggLSBhdmVyYWdlRlBTKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoYXZlcmFnZUZQU0NvdW50ICYmIGlzQmFkRnJhbWUoZnJhbWUp
KSB7CisgICAgICAgICAgICAvLyBXZSd2ZSBnYXRoZXJlZCBhIHJ1biBvZiBnb29kIHNhbXBsZXMs
IHNvIHN0b3AuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAtLWZyYW1l
OworICAgICAgICBpZiAoZnJhbWVJbmRleChmcmFtZSkgPT0gZnJhbWVJbmRleChtX2N1cnJlbnRG
cmFtZU51bWJlcikgfHwgZnJhbWUgPCAwKSB7CisgICAgICAgICAgICAvLyBXZSd2ZSBnb25lIHRo
cm91Z2ggYWxsIGF2YWlsYWJsZSBoaXN0b3JpY2FsIGRhdGEsIHNvIHN0b3AuCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YW5kYXJkRGV2aWF0aW9uID0gc3Fy
dChmcHNWYXJpYW5jZU51bWVyYXRvciAvIGF2ZXJhZ2VGUFNDb3VudCk7Cit9CisKK2RvdWJsZSBD
Q0ZyYW1lUmF0ZUNvdW50ZXI6OnRpbWVTdGFtcE9mUmVjZW50RnJhbWUoaW50IG4pCit7CisgICAg
QVNTRVJUKG4gPj0gMCAmJiBuIDwga1RpbWVTdGFtcEhpc3RvcnlTaXplKTsKKyAgICBpbnQgZGVz
aXJlZEluZGV4ID0gKGZyYW1lSW5kZXgobV9jdXJyZW50RnJhbWVOdW1iZXIpICsgbikgJSBrVGlt
ZVN0YW1wSGlzdG9yeVNpemU7CisgICAgcmV0dXJuIG1fdGltZVN0YW1wSGlzdG9yeVtkZXNpcmVk
SW5kZXhdOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvdW50ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ291bnRlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmM0OWYxN2MyM2ExMTc3NDk4NmU0YTM4NTU1YWQ2YzEyN2VmNTk4ZDAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0ZyYW1lUmF0ZUNvdW50ZXIuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIENDRnJhbWVSYXRlQ291bnRlcl9oCisjZGVmaW5lIENDRnJhbWVSYXRlQ291bnRlcl9o
CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKy8vIFRoaXMgY2xhc3MgbWFpbnRhaW5zIGEgaGlzdG9yeSBvZiB0aW1lc3RhbXBz
LCBhbmQgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSB0bworLy8gaW50ZWxsaWdlbnRseSBjb21wdXRl
IGF2ZXJhZ2UgZnJhbWVzIHBlciBzZWNvbmQgKGFuZCBzdGFuZGFyZCBkZXZpYXRpb24pLgorY2xh
c3MgQ0NGcmFtZVJhdGVDb3VudGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0ZyYW1l
UmF0ZUNvdW50ZXIpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDRnJhbWVSYXRl
Q291bnRlcj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NG
cmFtZVJhdGVDb3VudGVyKCkpOworICAgIH0KKworICAgIHZvaWQgbWFya0JlZ2lubmluZ09mRnJh
bWUoZG91YmxlIHRpbWVzdGFtcCk7CisgICAgdm9pZCBtYXJrRW5kT2ZGcmFtZSgpOworICAgIGlu
dCBjdXJyZW50RnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRGcmFtZU51bWJl
cjsgfQorICAgIHZvaWQgZ2V0QXZlcmFnZUZQU0FuZFN0YW5kYXJkRGV2aWF0aW9uKGRvdWJsZSYg
YXZlcmFnZUZQUywgZG91YmxlJiBzdGFuZGFyZERldmlhdGlvbikgY29uc3Q7CisgICAgaW50IHRp
bWVTdGFtcEhpc3RvcnlTaXplKCkgY29uc3QgeyByZXR1cm4ga1RpbWVTdGFtcEhpc3RvcnlTaXpl
OyB9CisKKyAgICAvLyBuID0gMCByZXR1cm5zIHRoZSBvbGRlc3QgZnJhbWUgcmV0YWluZWQgaW4g
dGhlIGhpc3RvcnksCisgICAgLy8gd2hpbGUgbiA9IHRpbWVTdGFtcEhpc3RvcnlTaXplKCkgLSAx
IHJldHVybnMgdGhlIHRpbWVzdGFtcCBtb3N0IHJlY2VudCBmcmFtZS4KKyAgICBkb3VibGUgdGlt
ZVN0YW1wT2ZSZWNlbnRGcmFtZShpbnQgLyogbiAqLyk7CisKKyAgICAvLyBUaGlzIGlzIGEgaGV1
cmlzdGljIHRoYXQgY2FuIGJlIHVzZWQgdG8gaWdub3JlIGZyYW1lcyBpbiBhIHJlYXNvbmFibGUg
d2F5LiBSZXR1cm5zCisgICAgLy8gdHJ1ZSBpZiB0aGUgZ2l2ZW4gZnJhbWUgaW50ZXJ2YWwgaXMg
dG9vIGZhc3Qgb3IgdG9vIHNsb3csIGJhc2VkIG9uIGNvbnN0YW50IHRocmVzaG9sZHMuCisgICAg
Ym9vbCBpc0JhZEZyYW1lSW50ZXJ2YWwoZG91YmxlIGludGVydmFsQmV0d2VlbkNvbnNlY3V0aXZl
RnJhbWVzKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBDQ0ZyYW1lUmF0ZUNvdW50ZXIoKTsKKwor
ICAgIGludCBmcmFtZUluZGV4KGludCBmcmFtZU51bWJlcikgY29uc3Q7CisgICAgYm9vbCBpc0Jh
ZEZyYW1lKGludCBmcmFtZU51bWJlcikgY29uc3Q7CisKKyAgICAvLyBUd28gdGhyZXNob2xkcyAo
bWVhc3VyZWQgaW4gc2Vjb25kcykgdGhhdCBkZXNjcmliZSB3aGF0IGlzIGNvbnNpZGVyZWQgdG8g
YmUgYSAibm8tb3AgZnJhbWUiIHRoYXQgc2hvdWxkIG5vdCBiZSBjb3VudGVkLgorICAgIC8vIC0g
aWYgdGhlIGZyYW1lIGlzIHRvbyBmYXN0LCB0aGVuIGdpdmVuIG91ciBjb21wb3NpdG9yIGltcGxl
bWVudGF0aW9uLCB0aGUgZnJhbWUgcHJvYmFibHkgd2FzIGEgbm8tb3AgYW5kIGRpZCBub3QgZHJh
dy4KKyAgICAvLyAtIGlmIHRoZSBmcmFtZSBpcyB0b28gc2xvdywgdGhlbiB0aGVyZSBpcyBwcm9i
YWJseSBub3QgYW5pbWF0aW5nIGNvbnRlbnQsIHNvIHdlIHNob3VsZCBub3QgcG9sbHV0ZSB0aGUg
YXZlcmFnZS4KKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGtGcmFtZVRvb0Zhc3Q7CisgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBrRnJhbWVUb29TbG93OworCisgICAgc3RhdGljIGNvbnN0IGludCBr
VGltZVN0YW1wSGlzdG9yeVNpemUgPSAxMjA7CisKKyAgICBpbnQgbV9jdXJyZW50RnJhbWVOdW1i
ZXI7CisgICAgZG91YmxlIG1fdGltZVN0YW1wSGlzdG9yeVtrVGltZVN0YW1wSGlzdG9yeVNpemVd
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5j
cHAKaW5kZXggYTZhOGJkMWNiZGZhNThkMDgzZjg0OWU3ZmE1YTM1ZGViMzhjNDYyZC4uN2Q0OWY3
OThkMWFjN2Q0OGJmNzc0MzQ3YmJiYzk3ZmJhMDhmM2ExNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFk
c1VwRGlzcGxheS5jcHAKQEAgLTMzLDI0ICszMywxNiBAQAogI2luY2x1ZGUgIk1hbmFnZWRUZXh0
dXJlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DYW52YXMuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFu
YWdlci5oIgorI2luY2x1ZGUgImNjL0NDRGVidWdSZWN0SGlzdG9yeS5oIgogI2luY2x1ZGUgImNj
L0NDRm9udEF0bGFzLmgiCisjaW5jbHVkZSAiY2MvQ0NGcmFtZVJhdGVDb3VudGVyLmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLUNDSGVhZHNVcERpc3BsYXk6OkNDSGVhZHNV
cERpc3BsYXkoKQotICAgIDogbV9jdXJyZW50RnJhbWVOdW1iZXIoMSkKLXsKLSAgICBtX2JlZ2lu
VGltZUhpc3RvcnlJblNlY1swXSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgbV9iZWdpblRpbWVIaXN0
b3J5SW5TZWNbMV0gPSBtX2JlZ2luVGltZUhpc3RvcnlJblNlY1swXTsKLSAgICBmb3IgKGludCBp
ID0gMjsgaSA8IGtCZWdpbkZyYW1lSGlzdG9yeVNpemU7IGkrKykKLSAgICAgICAgbV9iZWdpblRp
bWVIaXN0b3J5SW5TZWNbaV0gPSAwOwotfQotCiBDQ0hlYWRzVXBEaXNwbGF5Ojp+Q0NIZWFkc1Vw
RGlzcGxheSgpCiB7CiB9CkBAIC02MCwzMyArNTIsOSBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6
OnNldEZvbnRBdGxhcyhQYXNzT3duUHRyPENDRm9udEF0bGFzPiBmb250QXRsYXMpCiAgICAgbV9m
b250QXRsYXMgPSBmb250QXRsYXM7CiB9CiAKLWNvbnN0IGRvdWJsZSBDQ0hlYWRzVXBEaXNwbGF5
OjprSWRsZVNlY29uZHNUcmlnZ2Vyc1Jlc2V0ID0gMC41OwotY29uc3QgZG91YmxlIENDSGVhZHNV
cERpc3BsYXk6OmtGcmFtZVRvb0Zhc3QgPSAxLjAgLyA3MDsKLQotLy8gc2FmZU1vZCB3b3JrcyBv
biAtMSwgcmV0dXJuaW5nIG0tMSBpbiB0aGF0IGNhc2UuCi1zdGF0aWMgaW5saW5lIGludCBzYWZl
TW9kKGludCBudW1iZXIsIGludCBtb2R1bHVzKQotewotICAgIHJldHVybiAobnVtYmVyICsgbW9k
dWx1cykgJSBtb2R1bHVzOwotfQotCi1pbmxpbmUgaW50IENDSGVhZHNVcERpc3BsYXk6OmZyYW1l
SW5kZXgoaW50IGZyYW1lKSBjb25zdAotewotICAgIHJldHVybiBzYWZlTW9kKGZyYW1lLCBrQmVn
aW5GcmFtZUhpc3RvcnlTaXplKTsKLX0KLQotdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpvbkZyYW1l
QmVnaW4oZG91YmxlIHRpbWVzdGFtcCkKLXsKLSAgICBtX2JlZ2luVGltZUhpc3RvcnlJblNlY1tm
cmFtZUluZGV4KG1fY3VycmVudEZyYW1lTnVtYmVyKV0gPSB0aW1lc3RhbXA7Ci19Ci0KLXZvaWQg
Q0NIZWFkc1VwRGlzcGxheTo6b25Td2FwQnVmZmVycygpCi17Ci0gICAgbV9jdXJyZW50RnJhbWVO
dW1iZXIgKz0gMTsKLX0KLQogYm9vbCBDQ0hlYWRzVXBEaXNwbGF5OjplbmFibGVkKGNvbnN0IEND
U2V0dGluZ3MmIHNldHRpbmdzKSBjb25zdAogewotICAgIHJldHVybiBzaG93UGxhdGZvcm1MYXll
clRyZWUoc2V0dGluZ3MpIHx8IHNldHRpbmdzLnNob3dGUFNDb3VudGVyOworICAgIHJldHVybiBz
aG93UGxhdGZvcm1MYXllclRyZWUoc2V0dGluZ3MpIHx8IHNldHRpbmdzLnNob3dGUFNDb3VudGVy
IHx8IHNob3dEZWJ1Z1JlY3RzKHNldHRpbmdzKTsKIH0KIAogYm9vbCBDQ0hlYWRzVXBEaXNwbGF5
OjpzaG93UGxhdGZvcm1MYXllclRyZWUoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpIGNvbnN0
CkBAIC05NCw2ICs2MiwxMSBAQCBib29sIENDSGVhZHNVcERpc3BsYXk6OnNob3dQbGF0Zm9ybUxh
eWVyVHJlZShjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykgY29uc3QKICAgICByZXR1cm4gc2V0
dGluZ3Muc2hvd1BsYXRmb3JtTGF5ZXJUcmVlOwogfQogCitib29sIENDSGVhZHNVcERpc3BsYXk6
OnNob3dEZWJ1Z1JlY3RzKGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKSBjb25zdAoreworICAg
IHJldHVybiBzZXR0aW5ncy5zaG93UGFpbnRSZWN0cyB8fCBzZXR0aW5ncy5zaG93UHJvcGVydHlD
aGFuZ2VkUmVjdHMgfHwgc2V0dGluZ3Muc2hvd1N1cmZhY2VEYW1hZ2VSZWN0czsKK30KKwogdm9p
ZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KENDTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhv
c3RJbXBsKQogewogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciA9IGxh
eWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCk7CkBAIC0xMDQsNyArNzcsNyBAQCB2b2lk
IENDSGVhZHNVcERpc3BsYXk6OmRyYXcoQ0NMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9z
dEltcGwpCiAgICAgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MgPSBsYXllclRyZWVIb3N0SW1w
bC0+c2V0dGluZ3MoKTsKICAgICAvLyBVc2UgYSBmdWxsc2NyZWVuIHRleHR1cmUgb25seSBpZiB3
ZSBuZWVkIHRvLi4uCiAgICAgSW50U2l6ZSBodWRTaXplOwotICAgIGlmIChzaG93UGxhdGZvcm1M
YXllclRyZWUoc2V0dGluZ3MpKSB7CisgICAgaWYgKHNob3dQbGF0Zm9ybUxheWVyVHJlZShzZXR0
aW5ncykgfHwgc2hvd0RlYnVnUmVjdHMoc2V0dGluZ3MpKSB7CiAgICAgICAgIGh1ZFNpemUuc2V0
V2lkdGgobWluKDIwNDgsIGxheWVyVHJlZUhvc3RJbXBsLT52aWV3cG9ydFNpemUoKS53aWR0aCgp
KSk7CiAgICAgICAgIGh1ZFNpemUuc2V0SGVpZ2h0KG1pbigyMDQ4LCBsYXllclRyZWVIb3N0SW1w
bC0+dmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpKTsKICAgICB9IGVsc2UgewpAQCAtMTUxLDE1ICsx
MjQsNiBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6OmRyYXcoQ0NMYXllclRyZWVIb3N0SW1wbCog
bGF5ZXJUcmVlSG9zdEltcGwpCiAgICAgbV9odWRUZXh0dXJlLT51bnJlc2VydmUoKTsKIH0KIAot
Ym9vbCBDQ0hlYWRzVXBEaXNwbGF5Ojppc0JhZEZyYW1lKGludCBmcmFtZU51bWJlcikgY29uc3QK
LXsKLSAgICBkb3VibGUgZGVsdGEgPSBtX2JlZ2luVGltZUhpc3RvcnlJblNlY1tmcmFtZUluZGV4
KGZyYW1lTnVtYmVyKV0gLQotICAgICAgICAgICAgICAgICAgIG1fYmVnaW5UaW1lSGlzdG9yeUlu
U2VjW2ZyYW1lSW5kZXgoZnJhbWVOdW1iZXIgLSAxKV07Ci0gICAgYm9vbCB0b29TbG93ID0gZGVs
dGEgPiAoa051bU1pc3NlZEZyYW1lc0ZvclJlc2V0IC8gNjAuMCk7Ci0gICAgYm9vbCBzY2hlZHVs
ZXJBbGxvd3NEb3VibGVGcmFtZXMgPSAhQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpOwotICAgIHJl
dHVybiAoc2NoZWR1bGVyQWxsb3dzRG91YmxlRnJhbWVzICYmIGRlbHRhIDwga0ZyYW1lVG9vRmFz
dCkgfHwgdG9vU2xvdzsKLX0KLQogdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3SHVkQ29udGVu
dHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBDQ0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRy
ZWVIb3N0SW1wbCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MsIGNvbnN0IEludFNpemUmIGh1
ZFNpemUpCiB7CiAgICAgaWYgKHNob3dQbGF0Zm9ybUxheWVyVHJlZShzZXR0aW5ncykpIHsKQEAg
LTE3Nyw2NSArMTQxLDI0IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0h1ZENvbnRlbnRz
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ0NMYXllclRyZWVIb3N0CiAgICAgICAgIHBsYXRm
b3JtTGF5ZXJUcmVlVG9wID0gMDsKIAogICAgIGlmIChzZXR0aW5ncy5zaG93RlBTQ291bnRlcikK
LSAgICAgICAgZHJhd0ZQU0NvdW50ZXIoY29udGV4dCwgZnBzQ291bnRlclRvcCwgZnBzQ291bnRl
ckhlaWdodCk7CisgICAgICAgIGRyYXdGUFNDb3VudGVyKGNvbnRleHQsIGxheWVyVHJlZUhvc3RJ
bXBsLT5mcHNDb3VudGVyKCksIGZwc0NvdW50ZXJUb3AsIGZwc0NvdW50ZXJIZWlnaHQpOwogCiAg
ICAgaWYgKHNob3dQbGF0Zm9ybUxheWVyVHJlZShzZXR0aW5ncykgJiYgbV9mb250QXRsYXMpIHsK
ICAgICAgICAgU3RyaW5nIGxheWVyVHJlZSA9IGxheWVyVHJlZUhvc3RJbXBsLT5sYXllclRyZWVB
c1RleHQoKTsKICAgICAgICAgbV9mb250QXRsYXMtPmRyYXdUZXh0KGNvbnRleHQsIGxheWVyVHJl
ZSwgSW50UG9pbnQoMiwgcGxhdGZvcm1MYXllclRyZWVUb3ApLCBodWRTaXplKTsKICAgICB9Ci19
CiAKLXZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6Z2V0QXZlcmFnZUZQU0FuZFN0YW5kYXJkRGV2aWF0
aW9uKGRvdWJsZSAqYXZlcmFnZSwgZG91YmxlICpzdGFuZGFyZERldmlhdGlvbikgY29uc3QKLXsK
LSAgICBkb3VibGUmIGF2ZXJhZ2VGUFMgPSAqYXZlcmFnZTsKLQotICAgIGludCBmcmFtZSA9IG1f
Y3VycmVudEZyYW1lTnVtYmVyIC0gMTsgCi0gICAgYXZlcmFnZUZQUyA9IDA7Ci0gICAgaW50IGF2
ZXJhZ2VGUFNDb3VudCA9IDA7Ci0gICAgZG91YmxlIGZwc1ZhcmlhbmNlTnVtZXJhdG9yID0gMDsK
LQotICAgIC8vIFdhbGsgYmFja3dhcmRzIHRocm91Z2ggdGhlIHNhbXBsZXMgbG9va2luZyBmb3Ig
YSBydW4gb2YgZ29vZCBmcmFtZQotICAgIC8vIHRpbWluZ3MgZnJvbSB3aGljaCB0byBjb21wdXRl
IHRoZSBtZWFuIGFuZCBzdGFuZGFyZCBkZXZpYXRpb24uCi0gICAgLy8KLSAgICAvLyBTbG93IGZy
YW1lcyBvY2N1ciBqdXN0IGJlY2F1c2UgdGhlIHVzZXIgaXMgaW5hY3RpdmUsIGFuZCBzaG91bGQg
YmUKLSAgICAvLyBpZ25vcmVkLiBGYXN0IGZyYW1lcyBhcmUgaWdub3JlZCBpZiB0aGUgc2NoZWR1
bGVyIGlzIGluIHNpbmdsZS10aHJlYWQKLSAgICAvLyBtb2RlIGluIG9yZGVyIHRvIHJlcHJlc2Vu
dCB0aGUgdHJ1ZSBmcmFtZSByYXRlIGluIHNwaXRlIG9mIHRoZSBmYWN0IHRoYXQKLSAgICAvLyB0
aGUgZmlyc3QgZmV3IHN3YXBidWZmZXJzIGhhcHBlbiBpbnN0YW50bHkgd2hpY2ggc2tld3MgdGhl
IHN0YXRpc3RpY3MKLSAgICAvLyB0b28gbXVjaCBmb3Igc2hvcnQgbGl2ZWQgYW5pbWF0aW9ucy4K
LSAgICAvLwotICAgIC8vIGlzQmFkRnJhbWUgZW5jYXBzdWxhdGVzIHRoZSBmcmFtZSB0b28gc2xv
dy9mcmFtZSB0b28gZmFzdCBsb2dpYy4KLSAgICB3aGlsZSAoMSkgewotICAgICAgICBpZiAoIWlz
QmFkRnJhbWUoZnJhbWUpKSB7Ci0gICAgICAgICAgICBhdmVyYWdlRlBTQ291bnQrKzsKLSAgICAg
ICAgICAgIGRvdWJsZSBzZWNGb3JMYXN0RnJhbWUgPSBtX2JlZ2luVGltZUhpc3RvcnlJblNlY1tm
cmFtZUluZGV4KGZyYW1lKV0gLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fYmVnaW5UaW1lSGlzdG9yeUluU2VjW2ZyYW1lSW5kZXgoZnJhbWUgLSAxKV07Ci0gICAgICAg
ICAgICBkb3VibGUgeCA9IDEuMCAvIHNlY0Zvckxhc3RGcmFtZTsKLSAgICAgICAgICAgIGRvdWJs
ZSBkZWx0YUZyb21BdmVyYWdlID0geCAtIGF2ZXJhZ2VGUFM7Ci0gICAgICAgICAgICAvLyBDaGFu
Z2Ugd2l0aCBjYXV0aW9uIC0gbnVtZXJpY3MuIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kv
U3RhbmRhcmRfZGV2aWF0aW9uCi0gICAgICAgICAgICBhdmVyYWdlRlBTID0gYXZlcmFnZUZQUyAr
IGRlbHRhRnJvbUF2ZXJhZ2UgLyBhdmVyYWdlRlBTQ291bnQ7Ci0gICAgICAgICAgICBmcHNWYXJp
YW5jZU51bWVyYXRvciA9IGZwc1ZhcmlhbmNlTnVtZXJhdG9yICsgZGVsdGFGcm9tQXZlcmFnZSAq
ICh4IC0gYXZlcmFnZUZQUyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGF2ZXJhZ2VGUFNDb3Vu
dCAmJiBpc0JhZEZyYW1lKGZyYW1lKSkgewotICAgICAgICAgICAgLy8gV2UndmUgZ2F0aGVyZWQg
YSBydW4gb2YgZ29vZCBzYW1wbGVzLCBzbyBzdG9wLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgLS1mcmFtZTsKLSAgICAgICAgaWYgKGZyYW1lSW5kZXgoZnJhbWUpID09
IGZyYW1lSW5kZXgobV9jdXJyZW50RnJhbWVOdW1iZXIpIHx8IGZyYW1lIDwgMCkgewotICAgICAg
ICAgICAgLy8gV2UndmUgZ29uZSB0aHJvdWdoIGFsbCBhdmFpbGFibGUgaGlzdG9yaWNhbCBkYXRh
LCBzbyBzdG9wLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAq
c3RhbmRhcmREZXZpYXRpb24gPSBzcXJ0KGZwc1ZhcmlhbmNlTnVtZXJhdG9yIC8gYXZlcmFnZUZQ
U0NvdW50KTsKKyAgICBpZiAoc2hvd0RlYnVnUmVjdHMoc2V0dGluZ3MpKQorICAgICAgICBkcmF3
RGVidWdSZWN0cyhjb250ZXh0LCBsYXllclRyZWVIb3N0SW1wbC0+ZGVidWdSZWN0SGlzdG9yeSgp
LCBzZXR0aW5ncyk7CiB9CiAKLXZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0ZQU0NvdW50ZXIo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgdG9wLCBpbnQgaGVpZ2h0KQordm9pZCBDQ0hl
YWRzVXBEaXNwbGF5OjpkcmF3RlBTQ291bnRlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEND
RnJhbWVSYXRlQ291bnRlciogZnBzQ291bnRlciwgaW50IHRvcCwgaW50IGhlaWdodCkKIHsKICAg
ICBmbG9hdCB0ZXh0V2lkdGggPSAxNzA7IC8vIHNvIHRleHQgZml0cyBvbiBsaW51eC4KLSAgICBm
bG9hdCBncmFwaFdpZHRoID0ga0JlZ2luRnJhbWVIaXN0b3J5U2l6ZTsKKyAgICBmbG9hdCBncmFw
aFdpZHRoID0gZnBzQ291bnRlci0+dGltZVN0YW1wSGlzdG9yeVNpemUoKTsKIAogICAgIC8vIERy
YXcgdGhlIEZQUyB0ZXh0LgotICAgIGRyYXdGUFNDb3VudGVyVGV4dChjb250ZXh0LCB0b3AsIHRl
eHRXaWR0aCwgaGVpZ2h0KTsKKyAgICBkcmF3RlBTQ291bnRlclRleHQoY29udGV4dCwgZnBzQ291
bnRlciwgdG9wLCB0ZXh0V2lkdGgsIGhlaWdodCk7CiAKICAgICAvLyBEcmF3IEZQUyBncmFwaC4K
ICAgICBjb25zdCBkb3VibGUgbG9GUFMgPSAwOwpAQCAtMjUyLDE4ICsxNzUsMjYgQEAgdm9pZCBD
Q0hlYWRzVXBEaXNwbGF5OjpkcmF3RlBTQ291bnRlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGludCB0b3AsIGludCBoZWkKICAgICBJbnRQb2ludCBwcmV2KC0xLCAwKTsKICAgICBpbnQgeCA9
IDA7CiAgICAgZG91YmxlIGggPSBzdGF0aWNfY2FzdDxkb3VibGU+KGhlaWdodCAtIDIpOwotICAg
IGZvciAoaW50IGkgPSBtX2N1cnJlbnRGcmFtZU51bWJlciAlIGtCZWdpbkZyYW1lSGlzdG9yeVNp
emU7IGkgIT0gKG1fY3VycmVudEZyYW1lTnVtYmVyIC0gMSkgJSBrQmVnaW5GcmFtZUhpc3RvcnlT
aXplOyBpID0gKGkgKyAxKSAlIGtCZWdpbkZyYW1lSGlzdG9yeVNpemUpIHsKLSAgICAgICAgaW50
IGogPSAoaSArIDEpICUga0JlZ2luRnJhbWVIaXN0b3J5U2l6ZTsKLSAgICAgICAgZG91YmxlIGZw
cyA9IDEuMCAvIChtX2JlZ2luVGltZUhpc3RvcnlJblNlY1tqXSAtIG1fYmVnaW5UaW1lSGlzdG9y
eUluU2VjW2ldKTsKLSAgICAgICAgaWYgKGlzQmFkRnJhbWUoaikpIHsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGZwc0NvdW50ZXItPnRpbWVTdGFtcEhpc3RvcnlTaXplKCkgLSAxOyArK2kpIHsK
KyAgICAgICAgaW50IGogPSBpICsgMTsKKyAgICAgICAgZG91YmxlIGRlbHRhID0gZnBzQ291bnRl
ci0+dGltZVN0YW1wT2ZSZWNlbnRGcmFtZShqKSAtIGZwc0NvdW50ZXItPnRpbWVTdGFtcE9mUmVj
ZW50RnJhbWUoaSk7CisKKyAgICAgICAgLy8gU2tpcCBwbG90dGluZyB0aGlzIHBhcnRpY3VsYXIg
aW5zdGFudGFuZW91cyBmcmFtZSByYXRlIGlmIGl0IGlzIG5vdCBsaWtlbHkgdG8gaGF2ZSBiZWVu
IHZhbGlkLgorICAgICAgICBpZiAoZnBzQ291bnRlci0+aXNCYWRGcmFtZUludGVydmFsKGRlbHRh
KSkgewogICAgICAgICAgICAgeCArPSAxOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KKworICAgICAgICBkb3VibGUgZnBzID0gMS4wIC8gZGVsdGE7CisKKyAgICAgICAgLy8gQ2xh
bXAgdGhlIEZQUyB0byB0aGUgcmFuZ2Ugd2Ugd2FudCB0byBwbG90IHZpc3VhbGx5LgogICAgICAg
ICBkb3VibGUgcCA9IDEgLSAoKGZwcyAtIGxvRlBTKSAvIChoaUZQUyAtIGxvRlBTKSk7CiAgICAg
ICAgIGlmIChwIDwgMCkKICAgICAgICAgICAgIHAgPSAwOwogICAgICAgICBpZiAocCA+IDEpCiAg
ICAgICAgICAgICBwID0gMTsKKworICAgICAgICAvLyBQbG90IHRoaXMgZGF0YSBwb2ludC4KICAg
ICAgICAgSW50UG9pbnQgY3VyKGdyYXBoTGVmdCArIHgsIDEgKyB0b3AgKyBwKmgpOwogICAgICAg
ICBpZiAocHJldi54KCkgIT0gLTEpCiAgICAgICAgICAgICBjb250ZXh0LT5kcmF3TGluZShwcmV2
LCBjdXIpOwpAQCAtMjcyLDEwICsyMDMsMTAgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3
RlBTQ291bnRlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0b3AsIGludCBoZWkKICAg
ICB9CiB9CiAKLXZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0ZQU0NvdW50ZXJUZXh0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgaW50IHRvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQordm9p
ZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3RlBTQ291bnRlclRleHQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBDQ0ZyYW1lUmF0ZUNvdW50ZXIqIGZwc0NvdW50ZXIsIGludCB0b3AsIGludCB3aWR0
aCwgaW50IGhlaWdodCkKIHsKICAgICBkb3VibGUgYXZlcmFnZUZQUywgc3RkRGV2aWF0aW9uOwot
ICAgIGdldEF2ZXJhZ2VGUFNBbmRTdGFuZGFyZERldmlhdGlvbigmYXZlcmFnZUZQUywgJnN0ZERl
dmlhdGlvbik7CisgICAgZnBzQ291bnRlci0+Z2V0QXZlcmFnZUZQU0FuZFN0YW5kYXJkRGV2aWF0
aW9uKGF2ZXJhZ2VGUFMsIHN0ZERldmlhdGlvbik7CiAKICAgICAvLyBEcmF3IGJhY2tncm91bmQu
CiAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yKDAsIDAsIDAsIDI1NSksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOwpAQCAtMjg2LDYgKzIxNywzNCBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6
OmRyYXdGUFNDb3VudGVyVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0b3AsIGlu
dAogICAgICAgICBtX2ZvbnRBdGxhcy0+ZHJhd1RleHQoY29udGV4dCwgU3RyaW5nOjpmb3JtYXQo
IkZQUzogJTQuMWYgKy8tICUzLjFmIiwgYXZlcmFnZUZQUywgc3RkRGV2aWF0aW9uKSwgSW50UG9p
bnQoMTAsIGhlaWdodCAvIDMpLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKIH0KIAordm9pZCBD
Q0hlYWRzVXBEaXNwbGF5OjpkcmF3RGVidWdSZWN0cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IENDRGVidWdSZWN0SGlzdG9yeSogZGVidWdSZWN0SGlzdG9yeSwgY29uc3QgQ0NTZXR0aW5ncyYg
c2V0dGluZ3MpCit7CisgICAgY29uc3QgVmVjdG9yPENDRGVidWdSZWN0PiYgZGVidWdSZWN0cyA9
IGRlYnVnUmVjdEhpc3RvcnktPmRlYnVnUmVjdHMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGRlYnVnUmVjdHMuc2l6ZSgpOyArK2kpIHsKKworICAgICAgICBpZiAoZGVidWdSZWN0c1tp
XS50eXBlID09IFBhaW50UmVjdFR5cGUpIHsKKyAgICAgICAgICAgIC8vIFBhaW50IHJlY3RzIGlu
IHJlZAorICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMjU1LCAwLCAw
LCAyNTUpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmZpbGxS
ZWN0KGRlYnVnUmVjdHNbaV0ucmVjdCwgQ29sb3IoMjU1LCAwLCAwLCAzMCksIENvbG9yU3BhY2VE
ZXZpY2VSR0IpOworICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUmVjdChkZWJ1Z1JlY3RzW2ld
LnJlY3QsIDIuMCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGVidWdSZWN0c1tpXS50eXBl
ID09IFByb3BlcnR5Q2hhbmdlZFJlY3RUeXBlKSB7CisgICAgICAgICAgICAvLyBQcm9wZXJ0eS1j
aGFuZ2VkIHJlY3RzIGluIGJsdWUKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9y
KENvbG9yKDAsIDAsIDI1NSwgMjU1KSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgICAg
ICBjb250ZXh0LT5maWxsUmVjdChkZWJ1Z1JlY3RzW2ldLnJlY3QsIENvbG9yKDAsIDAsIDI1NSwg
MzApLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVJl
Y3QoZGVidWdSZWN0c1tpXS5yZWN0LCAyLjApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRl
YnVnUmVjdHNbaV0udHlwZSA9PSBTdXJmYWNlRGFtYWdlUmVjdFR5cGUpIHsKKyAgICAgICAgICAg
IC8vIFN1cmZhY2UgZGFtYWdlIHJlY3RzIGluIHllbGxvdy1vcmFuZ2UKKyAgICAgICAgICAgIGNv
bnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yKDIwMCwgMTAwLCAwLCAyNTUpLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KGRlYnVnUmVjdHNbaV0u
cmVjdCwgQ29sb3IoMjAwLCAxMDAsIDAsIDMwKSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAg
ICAgICAgICBjb250ZXh0LT5zdHJva2VSZWN0KGRlYnVnUmVjdHNbaV0ucmVjdCwgMi4wKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCmluZGV4IDdlYzA1YjAxNjdlNjY1
ZmM5MzFhMWJkYjA0NTE1ODcxZmFkYTE2MTUuLmMyMmRmYzIyOWE1ZDhjMDUxYzM0ZjI1MWM0OTFi
NjY4ZGFhNjZmMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKQEAgLTMzLDYgKzMz
LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0RlYnVnUmVjdEhpc3Rvcnk7
CitjbGFzcyBDQ0ZyYW1lUmF0ZUNvdW50ZXI7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwog
Y2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgTWFuYWdlZFRleHR1cmU7CkBAIC01MSw0MCAr
NTMsMjMgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRGb250QXRsYXMoUGFzc093blB0cjxDQ0Zv
bnRBdGxhcz4pOwogCi0gICAgaW50IGN1cnJlbnRGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJu
IG1fY3VycmVudEZyYW1lTnVtYmVyOyB9Ci0KLSAgICB2b2lkIG9uRnJhbWVCZWdpbihkb3VibGUg
dGltZXN0YW1wKTsKLSAgICB2b2lkIG9uU3dhcEJ1ZmZlcnMoKTsKLQogICAgIGJvb2wgZW5hYmxl
ZChjb25zdCBDQ1NldHRpbmdzJikgY29uc3Q7CiAgICAgdm9pZCBkcmF3KENDTGF5ZXJUcmVlSG9z
dEltcGwqKTsKIAogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4
LCBGcmFnbWVudFNoYWRlclJHQkFUZXhTd2l6emxlQWxwaGE+IFByb2dyYW07CiAKIHByaXZhdGU6
Ci0gICAgQ0NIZWFkc1VwRGlzcGxheSgpOworICAgIENDSGVhZHNVcERpc3BsYXkoKSB7IH07CiAK
ICAgICB2b2lkIGRyYXdIdWRDb250ZW50cyhHcmFwaGljc0NvbnRleHQqLCBDQ0xheWVyVHJlZUhv
c3RJbXBsKiwgY29uc3QgQ0NTZXR0aW5ncyYsIGNvbnN0IEludFNpemUmIGh1ZFNpemUpOwotICAg
IHZvaWQgZHJhd0ZQU0NvdW50ZXIoR3JhcGhpY3NDb250ZXh0KiwgaW50IHRvcCwgaW50IGhlaWdo
dCk7Ci0gICAgdm9pZCBkcmF3RlBTQ291bnRlclRleHQoR3JhcGhpY3NDb250ZXh0KiwgaW50IHRv
cCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLSAgICBib29sIGlzQmFkRnJhbWUoaW50IGZyYW1l
TnVtYmVyKSBjb25zdDsKLSAgICBpbnQgZnJhbWVJbmRleChpbnQgZnJhbWVOdW1iZXIpIGNvbnN0
OwotICAgIHZvaWQgZ2V0QXZlcmFnZUZQU0FuZFN0YW5kYXJkRGV2aWF0aW9uKGRvdWJsZSAqYXZl
cmFnZSwgZG91YmxlICpzdGFuZGFyZERldmlhdGlvbikgY29uc3Q7CisgICAgdm9pZCBkcmF3RlBT
Q291bnRlcihHcmFwaGljc0NvbnRleHQqLCBDQ0ZyYW1lUmF0ZUNvdW50ZXIqLCBpbnQgdG9wLCBp
bnQgaGVpZ2h0KTsKKyAgICB2b2lkIGRyYXdGUFNDb3VudGVyVGV4dChHcmFwaGljc0NvbnRleHQq
LCBDQ0ZyYW1lUmF0ZUNvdW50ZXIqLCBpbnQgdG9wLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwor
ICAgIHZvaWQgZHJhd0RlYnVnUmVjdHMoR3JhcGhpY3NDb250ZXh0KiwgQ0NEZWJ1Z1JlY3RIaXN0
b3J5KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogCiAgICAgYm9vbCBzaG93UGxhdGZvcm1MYXllclRy
ZWUoY29uc3QgQ0NTZXR0aW5ncyYpIGNvbnN0OwotCi0gICAgaW50IG1fY3VycmVudEZyYW1lTnVt
YmVyOworICAgIGJvb2wgc2hvd0RlYnVnUmVjdHMoY29uc3QgQ0NTZXR0aW5ncyYpIGNvbnN0Owog
CiAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX2h1ZFRleHR1cmU7Ci0KLSAgICBzdGF0aWMg
Y29uc3QgaW50IGtCZWdpbkZyYW1lSGlzdG9yeVNpemUgPSAxMjA7Ci0gICAgLy8gVGhlIG51bWJl
ciBvZiBzZWNvbmRzIG9mIG5vIGZyYW1lcyBtYWtlcyB1cyBkZWNpZGUgdGhhdCB0aGUgcHJldmlv
dXMKLSAgICAvLyBhbmltYXRpb24gaXMgb3Zlci4KLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIGtJ
ZGxlU2Vjb25kc1RyaWdnZXJzUmVzZXQ7Ci0gICAgZG91YmxlIG1fYmVnaW5UaW1lSGlzdG9yeUlu
U2VjW2tCZWdpbkZyYW1lSGlzdG9yeVNpemVdOwotICAgIHN0YXRpYyBjb25zdCBkb3VibGUga0Zy
YW1lVG9vRmFzdDsKLSAgICBzdGF0aWMgY29uc3QgaW50IGtOdW1NaXNzZWRGcmFtZXNGb3JSZXNl
dCA9IDU7Ci0KICAgICBPd25QdHI8Q0NGb250QXRsYXM+IG1fZm9udEF0bGFzOwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCBjYmQwZTg3YzFiYTRhOTVkNzgzYWE4ZTEyMzA0
MDdmMmQ4OTEyZjA3Li4wNDMwMjViYjE3MGZlODljZmRmZWM4ODEyOTc0NzExNjliOTFmMzRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtNzYsNiArNzYsOSBAQCBzdHJ1Y3QgQ0NT
ZXR0aW5ncyB7CiAgICAgICAgICAgICA6IGFjY2VsZXJhdGVQYWludGluZyhmYWxzZSkKICAgICAg
ICAgICAgICwgc2hvd0ZQU0NvdW50ZXIoZmFsc2UpCiAgICAgICAgICAgICAsIHNob3dQbGF0Zm9y
bUxheWVyVHJlZShmYWxzZSkKKyAgICAgICAgICAgICwgc2hvd1BhaW50UmVjdHMoZmFsc2UpCisg
ICAgICAgICAgICAsIHNob3dQcm9wZXJ0eUNoYW5nZWRSZWN0cyhmYWxzZSkKKyAgICAgICAgICAg
ICwgc2hvd1N1cmZhY2VEYW1hZ2VSZWN0cyhmYWxzZSkKICAgICAgICAgICAgICwgcmVmcmVzaFJh
dGUoMCkKICAgICAgICAgICAgICwgcGVyVGlsZVBhaW50aW5nKGZhbHNlKQogICAgICAgICAgICAg
LCBwYXJ0aWFsU3dhcEVuYWJsZWQoZmFsc2UpCkBAIC04NSw2ICs4OCw5IEBAIHN0cnVjdCBDQ1Nl
dHRpbmdzIHsKICAgICBib29sIGFjY2VsZXJhdGVQYWludGluZzsKICAgICBib29sIHNob3dGUFND
b3VudGVyOwogICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlOworICAgIGJvb2wgc2hvd1Bh
aW50UmVjdHM7CisgICAgYm9vbCBzaG93UHJvcGVydHlDaGFuZ2VkUmVjdHM7CisgICAgYm9vbCBz
aG93U3VyZmFjZURhbWFnZVJlY3RzOwogICAgIGRvdWJsZSByZWZyZXNoUmF0ZTsKICAgICBib29s
IHBlclRpbGVQYWludGluZzsKICAgICBib29sIHBhcnRpYWxTd2FwRW5hYmxlZDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggMDM1NTNlMzczYWYxMTZiYzU2ZjZk
ZGY3ZDBhZTYyMzBmN2RhOGQzNi4uNDhkNmQwNDQ1N2FhN2M4ZmUxZDhlNWJkMGJhMWMwOGU0NTRi
MmI3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTMyLDcg
KzMyLDkgQEAKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiY2MvQ0NBY3RpdmVH
ZXN0dXJlQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NEYW1hZ2VUcmFja2VyLmgiCisjaW5j
bHVkZSAiY2MvQ0NEZWJ1Z1JlY3RIaXN0b3J5LmgiCiAjaW5jbHVkZSAiY2MvQ0NEZWxheUJhc2Vk
VGltZVNvdXJjZS5oIgorI2luY2x1ZGUgImNjL0NDRnJhbWVSYXRlQ291bnRlci5oIgogI2luY2x1
ZGUgImNjL0NDR2VzdHVyZUN1cnZlLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCkBAIC0xMTcsNiArMTE5LDggQEAgQ0NM
YXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdzJiBz
ZXR0aW5ncywgQ0NMYXllclRyZWUKICAgICAsIG1fbmVlZHNBbmltYXRlTGF5ZXJzKGZhbHNlKQog
ICAgICwgbV9waW5jaEdlc3R1cmVBY3RpdmUoZmFsc2UpCiAgICAgLCBtX3RpbWVTb3VyY2VDbGll
bnRBZGFwdGVyKENDTGF5ZXJUcmVlSG9zdEltcGxUaW1lU291cmNlQWRhcHRlcjo6Y3JlYXRlKHRo
aXMsIENDRGVsYXlCYXNlZFRpbWVTb3VyY2U6OmNyZWF0ZShsb3dGcmVxdWVuY3lBbmltYXRpb25J
bnRlcnZhbCAqIDEwMDAuMCwgQ0NQcm94eTo6Y3VycmVudFRocmVhZCgpKSkpCisgICAgLCBtX2Zw
c0NvdW50ZXIoQ0NGcmFtZVJhdGVDb3VudGVyOjpjcmVhdGUoKSkKKyAgICAsIG1fZGVidWdSZWN0
SGlzdG9yeShDQ0RlYnVnUmVjdEhpc3Rvcnk6OmNyZWF0ZSgpKQogewogICAgIEFTU0VSVChDQ1By
b3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgZGlkVmlzaWJpbGl0eUNoYW5nZSh0aGlzLCBtX3Zp
c2libGUpOwpAQCAtMjU4LDcgKzI2Miw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2Fs
Y3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAKICAg
ICBUUkFDRV9FVkVOVDEoIndlYmtpdCIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVS
ZW5kZXJQYXNzZXMiLCAicmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkiLCBzdGF0aWNfY2Fz
dDxsb25nIGxvbmcgdW5zaWduZWQ+KHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKSk7CiAK
LSAgICBpZiAobGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXApCisg
ICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwIHx8IHNl
dHRpbmdzKCkuc2hvd1N1cmZhY2VEYW1hZ2VSZWN0cykKICAgICAgICAgdHJhY2tEYW1hZ2VGb3JB
bGxTdXJmYWNlcyhtX3Jvb3RMYXllckltcGwuZ2V0KCksIHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OwogICAgIG1fcm9vdERhbWFnZVJlY3QgPSBtX3Jvb3RMYXllckltcGwtPnJlbmRlclN1cmZhY2Uo
KS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwogCkBAIC0zOTgsOCArNDAy
LDggQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKGNvbnN0IEZyYW1lRGF0
YSYgZnJhbWUpCiAgICAgLy8gRklYTUU6IHVzZSB0aGUgZnJhbWUgYmVnaW4gdGltZSBmcm9tIHRo
ZSBvdmVyYWxsIGNvbXBvc2l0b3Igc2NoZWR1bGVyLgogICAgIC8vIFRoaXMgdmFsdWUgaXMgY3Vy
cmVudGx5IGluYWNjZXNzaWJsZSBiZWNhdXNlIGl0IGlzIHVwIGluIENocm9taXVtJ3MKICAgICAv
LyBSZW5kZXJXaWRnZXQuCi0gICAgbV9oZWFkc1VwRGlzcGxheS0+b25GcmFtZUJlZ2luKGN1cnJl
bnRUaW1lKCkpOwogCisgICAgbV9mcHNDb3VudGVyLT5tYXJrQmVnaW5uaW5nT2ZGcmFtZShjdXJy
ZW50VGltZSgpKTsKICAgICBtX2xheWVyUmVuZGVyZXItPmJlZ2luRHJhd2luZ0ZyYW1lKG1fcm9v
dExheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZnJhbWUucmVuZGVyUGFzc2VzLnNpemUoKTsgKytpKQpAQCAtNDEyLDYgKzQxNiwxMCBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoY29uc3QgRnJhbWVEYXRhJiBmcmFt
ZSkKICAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSAmJiAhaXQtPnZpc2libGVMYXll
clJlY3QoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBpdC0+ZGlkRHJhdygpOwogICAgIH0KKwor
ICAgIGlmIChtX2RlYnVnUmVjdEhpc3RvcnktPmVuYWJsZWQoc2V0dGluZ3MoKSkpCisgICAgICAg
IG1fZGVidWdSZWN0SGlzdG9yeS0+c2F2ZURlYnVnUmVjdHNGb3JDdXJyZW50RnJhbWUobV9yb290
TGF5ZXJJbXBsLmdldCgpLCBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBzZXR0aW5ncygp
KTsKKwogICAgIGlmIChtX2hlYWRzVXBEaXNwbGF5LT5lbmFibGVkKHNldHRpbmdzKCkpKQogICAg
ICAgICBtX2hlYWRzVXBEaXNwbGF5LT5kcmF3KHRoaXMpOwogCkBAIC00NDcsNyArNDU1LDggQEAg
VGV4dHVyZUFsbG9jYXRvciogQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGVudHNUZXh0dXJlQWxs
b2NhdG9yKCkgY29uc3QKIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6c3dhcEJ1ZmZlcnMoKQog
ewogICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOwotICAgIG1faGVhZHNVcERpc3BsYXktPm9u
U3dhcEJ1ZmZlcnMoKTsKKworICAgIG1fZnBzQ291bnRlci0+bWFya0VuZE9mRnJhbWUoKTsKICAg
ICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5zd2FwQnVmZmVycyhlbmNsb3NpbmdJbnRSZWN0KG1f
cm9vdERhbWFnZVJlY3QpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
CmluZGV4IDQ1YWIxZjA1MjBhY2M4NTE2ZmEzNmE3NTEyMDVlMzI2ODZkZDg2YmMuLjdiZWE2ZDg3
NjVlYTUyY2UwNTI1YmExNjI2OTk2NjkxYjg3M2I0MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmgKQEAgLTQwLDcgKzQwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb247CiBjbGFzcyBDQ0NvbXBsZXRpb25FdmVudDsK
K2NsYXNzIENDRGVidWdSZWN0SGlzdG9yeTsKIGNsYXNzIENDRm9udEF0bGFzOworY2xhc3MgQ0NG
cmFtZVJhdGVDb3VudGVyOwogY2xhc3MgQ0NQYWdlU2NhbGVBbmltYXRpb247CiBjbGFzcyBDQ0xh
eWVySW1wbDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxUaW1lU291cmNlQWRhcHRlcjsKQEAg
LTE1MCw2ICsxNTIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAK
KyAgICBDQ0ZyYW1lUmF0ZUNvdW50ZXIqIGZwc0NvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX2Zw
c0NvdW50ZXIuZ2V0KCk7IH0KKyAgICBDQ0RlYnVnUmVjdEhpc3RvcnkqIGRlYnVnUmVjdEhpc3Rv
cnkoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnUmVjdEhpc3RvcnkuZ2V0KCk7IH0KKwogcHJvdGVj
dGVkOgogICAgIENDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYsIENDTGF5ZXJU
cmVlSG9zdEltcGxDbGllbnQqKTsKIApAQCAtMjE1LDYgKzIyMCw5IEBAIHByaXZhdGU6CiAgICAg
Q0NMYXllckxpc3QgbV9tb3N0UmVjZW50UmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKIAogICAgIEZs
b2F0UmVjdCBtX3Jvb3REYW1hZ2VSZWN0OworCisgICAgT3duUHRyPENDRnJhbWVSYXRlQ291bnRl
cj4gbV9mcHNDb3VudGVyOworICAgIE93blB0cjxDQ0RlYnVnUmVjdEhpc3Rvcnk+IG1fZGVidWdS
ZWN0SGlzdG9yeTsKIH07CiAKIH07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>