<?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>23140</bug_id>
          
          <creation_ts>2009-01-06 12:00:25 -0800</creation_ts>
          <short_desc>&lt;video&gt; poster should scale like a video frame</short_desc>
          <delta_ts>2010-01-12 13:19:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>104589</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2009-01-06 12:00:25 -0800</bug_when>
    <thetext>The spec says the poster image is &quot;intended to be a representative frame of the video (typically one of the first non-blank frames) that gives the user an idea of what the video is like&quot;, so when the poster size doesn&apos;t match the element size it should be scaled like a frame of video, preserving aspect ratio.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104592</commentid>
    <comment_count>1</comment_count>
      <attachid>26463</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2009-01-06 12:01:55 -0800</bug_when>
    <thetext>Created attachment 26463
test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179246</commentid>
    <comment_count>2</comment_count>
      <attachid>46253</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-01-10 20:46:10 -0800</bug_when>
    <thetext>Created attachment 46253
Revised test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179249</commentid>
    <comment_count>3</comment_count>
      <attachid>46254</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-01-10 20:52:05 -0800</bug_when>
    <thetext>Created attachment 46254
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179251</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-10 20:54:19 -0800</bug_when>
    <thetext>Attachment 46254 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/177516</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179256</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-10 20:59:22 -0800</bug_when>
    <thetext>Attachment 46254 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/177518</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179257</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-10 20:59:37 -0800</bug_when>
    <thetext>Attachment 46254 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/177522</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179259</commentid>
    <comment_count>7</comment_count>
      <attachid>46254</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-01-10 21:03:07 -0800</bug_when>
    <thetext>Comment on attachment 46254
Proposed patch

ack, attached the wrong version of the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179266</commentid>
    <comment_count>8</comment_count>
      <attachid>46254</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-10 21:08:49 -0800</bug_when>
    <thetext>Comment on attachment 46254
Proposed patch

&gt; +    bool updatePoster = false;

Even in a local variable, I find that naming data with a verb is confusing. How about shouldUpdatePoster or shouldUpdatePosterImage?

&gt; +    virtual bool videoFrameAvailable() const { return false; }

Since this is currently called only within the HTMLMediaElement class, I suggest making it private instead of public.

&gt; +        m_posterUrl = document()-&gt;completeURL(attr-&gt;value());

URL should be capitalized as URL, not Url. It&apos;s a little strange that we don&apos;t strip leading and trailing whitespace here the way we do for other attributes we complete. Sadly we usually do it with deprecatedParseURL, a function that does other unwanted things. Also, given the recent discussion in the HTML5 mailing list we may eventually want to special case the empty string here.

&gt; +bool HTMLVideoElement::videoFrameAvailable() const

We normally like to name boolean members so they fit in the sentence &quot;video element &lt;xxx&gt;&quot;, so it would be hasAvailableVideoFrame or hasVideoFrame.

&gt; +    KURL poster() const { return m_posterUrl; }

This could be const KURL&amp; instead of URL to avoid a little copying overhead.

&gt; +    bool shouldDisplayPoster() const { return m_shouldShowPosterImage; }

Seems to me it would be better to have the function and the data member have the same name.

&gt; +    bool m_startedPlaying : 1;
&gt; +    bool m_isStreaming : 1;
&gt; +    bool m_visible : 1;
&gt; +    bool m_hasUnsupportedTracks : 1;
&gt; +    bool m_videoFrameAvailable : 1;

Do these need to be bitfields? I like the idea of making objects smaller if there are a lot of them, but I&apos;m not sure about this case. Don&apos;t bitfields make code bigger and a little slower? I recently convinced Adam Barth to not use bitfields in SecurityOrigin.

&gt; +bool MediaPlayerPrivate::videoFrameAvailable() const
&gt; +{
&gt; +    // When using a QTMovieLayer return true as soon as the movie reaches QTMovieLoadStatePlayable 
&gt; +    // because although we don&apos;t *know* when the first frame has decoded, by the time we get and 
&gt; +    // process the notificaiton a frame should have propagated the VisualContext and been set on
&gt; +    // the layer.
&gt; +    if (currentRenderingMode() == MediaRenderingMovieLayer)
&gt; +        return m_readyState &gt;= MediaPlayer::HaveCurrentData;
&gt; +
&gt; +    // When using the software renderer QuickTime signals that a frame is available so we might as well
&gt; +    // wait until we know that a frame has been drawn.
&gt; +    return m_videoFrameAvailable;
&gt; +}

It&apos;s strange to have a function member and a data member that don&apos;t mean the same thing. I suggest giving the data member a more specific name to make it clear it&apos;s not always the same as the function result.

&gt; +void RenderImage::paint(GraphicsContext* context, const IntRect&amp; rect)
&gt; +{
&gt; +    if ((document()-&gt;printing() &amp;&amp; !view()-&gt;printImages()) || !hasImage() || errorOccurred())
&gt; +        return;
&gt; +
&gt; +    if (hasImage() &amp;&amp; rect.width() &gt; 0 &amp;&amp; rect.height() &gt; 0) {
&gt; +        Image* img = image(rect.width(), rect.height());
&gt; +        if (!img || img-&gt;isNull())
&gt; +            return;
&gt; +
&gt;          HTMLImageElement* imageElt = (node() &amp;&amp; node()-&gt;hasTagName(imgTag)) ? static_cast&lt;HTMLImageElement*&gt;(node()) : 0;
&gt;          CompositeOperator compositeOperator = imageElt ? imageElt-&gt;compositeOperator() : CompositeSourceOver;
&gt; -        context-&gt;drawImage(image(cWidth, cHeight), style()-&gt;colorSpace(), rect, compositeOperator, useLowQualityScaling);
&gt; +        bool useLowQualityScaling = RenderImageScaleObserver::shouldImagePaintAtLowQuality(this, rect.size());
&gt; +        context-&gt;drawImage(image(rect.width(), rect.height()), style()-&gt;colorSpace(), rect, compositeOperator, useLowQualityScaling);
&gt;      }
&gt;  }

Does adding this extra work (function call overhead, redoing various checks) to every image draw have a measurable impact on performance? I&apos;d guess not.
&gt;  
&gt; +    virtual void paint(GraphicsContext* context, const IntRect&amp; rect);

I suggest making this function private, and leaving out the argument names.

&gt; +    virtual bool isRenderImage() const { return false; }

This is not a good idea. The isRenderImage function is suppose to be a checked type cast, mechanical, so if RenderMedia is derived from RenderImage, it should return true.

If there are some call sites where we need to handle media differently, we need a new function with a new name, or additional code. Changing isRenderImage to return false seems like a bad direction.

&gt; - * Copyright (C) 2007 Apple Inc.  All rights reserved.
&gt; + * Copyright (C) 2007, 2010 Apple Inc.  All rights reserved.

I&apos;m guessing we had published changes in 2008 and 2009 and forgot to include them, so you sould.

&gt; +#include &quot;RenderReplaced.h&quot;

I don&apos;t understand why this is needed. Since RenderImage is derived from RenderReplaced, this header should be included already.

&gt; +HTMLVideoElement* RenderVideo::videoElement() const
&gt; +{ 
&gt; +    return static_cast&lt;HTMLVideoElement*&gt;(node()); 
&gt; +}

You should have an assertion here too, checking the tag of the node.

&gt; +    HTMLVideoElement* videoElement() const;

Since this is only used inside the .cpp file you might want to mark the implementation inline. As long as nobody uses it in another translation unit you will be fine and save a function call each time.
&gt;  
&gt; +    virtual void imageChanged(WrappedImagePtr, const IntRect* = 0);

I don&apos;t think you need/want the &quot;= 0&quot; here.

&gt; +    virtual int minimumReplacedHeight() const { return 0; }

I normally suggest not putting bodies into .h files, even if they are small.

Patch looks great, but review- because I think the isRenderImage approach here is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179267</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-10 21:09:00 -0800</bug_when>
    <thetext>Oof, reviewed wrong version of the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179292</commentid>
    <comment_count>10</comment_count>
      <attachid>46260</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-01-10 22:50:23 -0800</bug_when>
    <thetext>Created attachment 46260
updated patch

(In reply to comment #8)

New patch addresses all comments except:

&gt; &gt;  
&gt; &gt; +    virtual void paint(GraphicsContext* context, const IntRect&amp; rect);
&gt; 
&gt; I suggest making this function private, and leaving out the argument names.
&gt; 
Dropped the arguments but it can&apos;t be private because RenderVideo call it.

Sorry for the bogus patch, luckily the one I meant to post had only a few different lines (the ones that made it compile).

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179379</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-01-11 08:45:56 -0800</bug_when>
    <thetext>I&apos;m not sure I like RenderMedia inheriting from RenderImage. This will cause isImage() and isRenderImage() to return true for RenderMedia, possibly giving unwanted behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179391</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-11 09:29:58 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; I&apos;m not sure I like RenderMedia inheriting from RenderImage. This will cause
&gt; isImage() and isRenderImage() to return true for RenderMedia, possibly giving
&gt; unwanted behavior.

Eric&apos;s patch originally changed both isImage and isRenderImage to return false for RenderMedia. See comments above.

We need to get more concrete than that, though, and find specific examples where the wrong thing happens. Otherwise, I think the inheritance may be OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179418</commentid>
    <comment_count>13</comment_count>
      <attachid>46260</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-01-11 10:36:10 -0800</bug_when>
    <thetext>Comment on attachment 46260
updated patch

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 53064)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,85 @@
&gt; +2010-01-10  Eric Carlson  &lt;eric.carlson@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        rdar://5684062

Should use a valid URL as copied from Radar.


&gt; Index: WebCore/html/HTMLMediaElement.h
&gt; ===================================================================
&gt; --- WebCore/html/HTMLMediaElement.h	(revision 53038)
&gt; +++ WebCore/html/HTMLMediaElement.h	(working copy)
&gt; @@ -1,5 +1,5 @@
&gt;  /*
&gt; - * Copyright (C) 2007, 2008, 2009 Apple Inc. All rights reserved.
&gt; + * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
&gt;   *
&gt;   * Redistribution and use in source and binary forms, with or without
&gt;   * modification, are permitted provided that the following conditions
&gt; @@ -86,7 +86,7 @@ public:
&gt;      MediaPlayer::MovieLoadType movieLoadType() const;
&gt;      
&gt;      bool inActiveDocument() const { return m_inActiveDocument; }
&gt; -    
&gt; +
&gt;  // DOM API
&gt;  // error state
&gt;      PassRefPtr&lt;MediaError&gt; error() const;

Only whitespace and the copyright changed in this file.

&gt; Index: WebCore/html/HTMLVideoElement.cpp
&gt; ===================================================================

&gt; +        if (m_shouldDisplayPoster) {

I have a minor preference for calling this m_shouldDisplayPosterImage

&gt; Index: WebCore/html/HTMLVideoElement.h
&gt; ===================================================================

&gt; +    const KURL&amp; poster() const { return m_posterURL; }
&gt;      void setPoster(const String&amp;);

Odd that the getter and setter use different types. I&apos;d also prefer them to be named posterURL() and setPosterURL().

&gt; Index: WebCore/loader/ImageLoader.cpp
&gt; ===================================================================

&gt; -        if (!renderer-&gt;isImage())
&gt; +        if (!renderer-&gt;isImage() &amp;&amp; !renderer-&gt;isVideo())
&gt;              return;
&gt;          RenderImage* imageRenderer = toRenderImage(renderer);

Maybe this should be calling toRenderImage()?

&gt; Index: WebCore/rendering/RenderImage.h
&gt; ===================================================================
&gt; +    virtual void paint(GraphicsContext*, const IntRect&amp;);

I&apos;d prefer this be called paintIntoRect().

&gt;  inline RenderImage* toRenderImage(RenderObject* object)
&gt;  { 
&gt; -    ASSERT(!object || object-&gt;isRenderImage());
&gt; +    ASSERT(!object || object-&gt;isRenderImage() || object-&gt;isVideo());

Shouldn&apos;t need this change.

&gt; Index: LayoutTests/ChangeLog
&gt; ===================================================================
&gt; --- LayoutTests/ChangeLog	(revision 53064)
&gt; +++ LayoutTests/ChangeLog	(working copy)
&gt; @@ -1,3 +1,17 @@
&gt; +2010-01-10  Eric Carlson  &lt;eric.carlson@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        rdar://5684062
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=23094
&gt; +        Flash of white when switching from poster image to video playback
&gt; +        
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=23140
&gt; +        &lt;video&gt; poster should scale like a video frame
&gt; +
&gt; +        * media/video-poster-expected.txt: Remove blank line at beginning of test result present
&gt; +        as a side effect of the media element using RenderImage to display the poster.
&gt; +
&gt;  2010-01-10  Daniel Bates  &lt;dbates@webkit.org&gt;
&gt;  
&gt;          Rubber-stamped by Eric Seidel.
&gt; Index: LayoutTests/media/video-poster-expected.txt
&gt; ===================================================================
&gt; --- LayoutTests/media/video-poster-expected.txt	(revision 53038)
&gt; +++ LayoutTests/media/video-poster-expected.txt	(working copy)
&gt; @@ -1,4 +1,3 @@
&gt; -
&gt;  EXPECTED (video.getAttribute(&apos;poster&apos;) == &apos;content/greenbox.png&apos;) OK
&gt;  EXPECTED (relativeURL(video.poster) == &apos;content/greenbox.png&apos;) OK
&gt;  EXPECTED (video.getAttribute(&apos;poster&apos;) == &apos;content/abe.png&apos;) OK

I&apos;d like to see a new testcase that tests various configurations of poster image size (width- and height-constrained aspect ratio sizing of poster image).

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179420</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-11 10:39:52 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; +    const KURL&amp; poster() const { return m_posterURL; }
&gt; &gt;      void setPoster(const String&amp;);
&gt; 
&gt; Odd that the getter and setter use different types. I&apos;d also prefer them to be
&gt; named posterURL() and setPosterURL().

I believe both aspects of this, the type and the name, are standard for URL-type HTML attributes like the &lt;video&gt; element poster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179960</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-01-12 13:19:58 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/53146</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>26463</attachid>
            <date>2009-01-06 12:01:55 -0800</date>
            <delta_ts>2010-01-10 20:46:10 -0800</delta_ts>
            <desc>test case</desc>
            <filename>poster_scale.html</filename>
            <type>text/html</type>
            <size>719</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgogICAgPHNjcmlwdD4KICAgICAgICBmdW5jdGlvbiBzZXR1cmwoZWxlbSkK
ICAgICAgICB7CiAgICAgICAgICAgIGVsZW0uc3JjID0gImh0dHA6Ly9tb3ZpZXMuYXBwbGUuY29t
L21vdmllcy91cy9hcHBsZS9pcGhvbmUvMjAwOC9hZHMvc2hhemFtL2FwcGxlX2lwaG9uZTNnX2Fk
X3NoYXphbV8yMDA4MTEwN180ODB4MjcyLm1vdiI7CiAgICAgICAgfQogICAgPC9zY3JpcHQ+CiAg
ICA8c3R5bGU+IAogICAgICAgIGltZywgdmlkZW8gCiAgICAgICAgeyAKICAgICAgICAgICAgcGFk
ZGluZzogODsgCiAgICAgICAgICAgIGJvcmRlcjogM3B4IHNvbGlkIHJlZDsgCiAgICAgICAgICAg
IGJhY2tncm91bmQtY29sb3I6ICNlZTAwZWU7CiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogYXV0
bzsgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgICAgfSAKICAgIDwvc3R5bGU+Cgo8L2hlYWQ+Cjxi
b2R5PgogICA8dmlkZW8gCiAgICAgICAgcG9zdGVyPSJodHRwOi8vaW1hZ2VzLmFwcGxlLmNvbS9p
cG9kdG91Y2gvaW1hZ2VzL3doYXRzbmV3LXN0ZWVsMjAwODA5MDkuanBnIiAKICAgICAgICBhdXRv
cGxheQogICAgICAgIHdpZHRoPTQ4MAogICAgICAgIGhlaWdodD0yNzIKICAgICAgICBvbmNsaWNr
PSJzZXR1cmwodGhpcykiCiAgICAgICAgY29udHJvbHM+CiAgICA8L3ZpZGVvPgogICAgPHA+CiAg
ICBDbGljayB0byBwbGF5Li4uCjwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>46253</attachid>
            <date>2010-01-10 20:46:10 -0800</date>
            <delta_ts>2010-01-10 20:46:10 -0800</delta_ts>
            <desc>Revised test case</desc>
            <filename>poster_test.html</filename>
            <type>text/html</type>
            <size>844</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUw1PgoKPGh0bWw+CjxoZWFkPgoJPHRpdGxlPidwb3N0ZXInIGFzcGVjdCBy
YXRpbyB0ZXN0PC90aXRsZT4KICAgIDxzdHlsZT4gCiAgICAgICAgaW1nLCB2aWRlbyAKICAgICAg
ICB7IAogICAgICAgICAgICBwYWRkaW5nOiA4OyAKICAgICAgICAgICAgYm9yZGVyOiAzcHggc29s
aWQgcmVkOyAKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlMDBlZTsKICAgICAgICAg
ICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICB9IAogICAg
PC9zdHlsZT4KICAgIDxzY3JpcHQ+CiAgICAgICAgZnVuY3Rpb24gc2V0dXJsKGVsZW0pCiAgICAg
ICAgewoJCQl2YXIgdmlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpZCcpOwogICAgICAg
ICAgICB2aWQuc3JjID0gImh0dHA6Ly9tb3ZpZXMuYXBwbGUuY29tL21vdmllcy91cy9hcHBsZS9p
cGhvbmUvMjAwOC9hZHMvc2hhemFtL2FwcGxlX2lwaG9uZTNnX2FkX3NoYXphbV8yMDA4MTEwN180
ODB4MjcyLm1vdiI7CiAgICAgICAgfQogICAgPC9zY3JpcHQ+CjwvaGVhZD4KPGJvZHk+CiAgIDx2
aWRlbyAKICAgICAgICBpZD12aWQKICAgICAgICBwb3N0ZXI9Imh0dHA6Ly93d3cuYXBwbGUuY29t
L21vYmlsZW1lL25ld3Mvc2VhcmNoLWVtYWlsLTIwMDkwNjE3LnBuZyIgCiAgICAgICAgYXV0b3Bs
YXkKICAgICAgICB3aWR0aD00ODAKICAgICAgICBoZWlnaHQ9MjcyCiAgICAgICAgY29udHJvbHM+
CiAgICA8L3ZpZGVvPgogICAgPHA+CiAgICA8aW5wdXQgdHlwZT1idXR0b24gb25jbGljaz0ic2V0
dXJsKCkiIHZhbHVlPSJMb2FkIG1vdmllLi4uIj4KPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46254</attachid>
            <date>2010-01-10 20:52:05 -0800</date>
            <delta_ts>2010-01-10 22:50:23 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch_6.txt</filename>
            <type>text/plain</type>
            <size>39773</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzA1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODYgQEAKKzIwMTAtMDEtMTAgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgcmRhcjovLzU2ODQwNjIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMDk0CisgICAgICAgIEZsYXNoIG9mIHdoaXRlIHdoZW4gc3dpdGNoaW5nIGZy
b20gcG9zdGVyIGltYWdlIHRvIHZpZGVvIHBsYXliYWNrCisgICAgICAgIAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxNDAKKyAgICAgICAgPHZpZGVv
PiBwb3N0ZXIgc2hvdWxkIHNjYWxlIGxpa2UgYSB2aWRlbyBmcmFtZQorCisgICAgICAgICogaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6OnNldFJlYWR5U3RhdGUpOiBPbmx5IGNhbGwgdXBkYXRlUG9zdGVySW1hZ2UgZnJvbSBvbmUg
cGxhY2UKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaDogRGVmYXVsdCBpbXBsZW1l
bnRhdGlvbnMgZm9yIHZpZGVvRnJhbWVBdmFpbGFibGUgYW5kIHNob3VsZERpc3BsYXlQb3N0ZXIu
CisKKyAgICAgICAgKiBodG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFZpZGVvRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIpOiBBbHdheXMgY3JlYXRlIGEgUmVu
ZGVyVmlkZW8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50OjphdHRhY2gpOiBD
YWxsIHVwZGF0ZVBvc3RlckltYWdlIGJlZm9yZSBjaGVja2luZyB0byBzZWUgaWYgd2UKKyAgICAg
ICAgICAgIHNob3VsZCBkaXNwbGF5IHRoZSBwb3N0ZXIgaW1hZ2UuIHJlbmRlcmVyKCkgaXMgbmV2
ZXIgYSBSZW5kZXJJbWFnZSwgZG9uJ3QgbmVlZCB0byBjaGVjay4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxWaWRlb0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogQ2FjaGUgcG9zdGVyIGF0
dHJpYnV0ZSB3aGVuIGl0IGlzIHNldCBzaW5jZQorICAgICAgICAgICAgaXQgaXMgY2hlY2tlZCBm
cmVxdWVudGx5LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudDo6dXBkYXRlUG9z
dGVySW1hZ2UpOiBEb24ndCBib3RoZXIgbG9va2luZyBhdCB0aGUgbmV0d29yayBzdGF0ZSwgCisg
ICAgICAgICAgICBkaXNwbGF5IHRoZSBwb3N0ZXIgYXMgbG9uZyBhcyB0aGUgYXR0cmlidXRlIGlz
IHZhbGlkIGFuZCB0aGUgbWVkaWEgZW5naW5lIHNheXMgaXQgaGFzbid0CisgICAgICAgICAgICBy
ZW5kZXJlZCBhIHZpZGVvIGZyYW1lLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVu
dDo6dmlkZW9GcmFtZUF2YWlsYWJsZSk6IE5ldywgYXNrIHRoZSBtZWRpYSBlbmdpbmUgaWYgYSB2
aWRlbyBmcmFtZQorICAgICAgICAgICAgaXMgYXZhaWxhYmxlIHRvIHJlbmRlci4KKyAgICAgICAg
KiBodG1sL0hUTUxWaWRlb0VsZW1lbnQuaDogCisgICAgICAgIChXZWJDb3JlOjpIVE1MVmlkZW9F
bGVtZW50Ojpwb3N0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudDo6c2hv
dWxkRGlzcGxheVBvc3Rlcik6CisKKyAgICAgICAgKiBsb2FkZXIvSW1hZ2VMb2FkZXIuY3BwOiAK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlTG9hZGVyOjp1cGRhdGVSZW5kZXJlcik6IENhbGwgc2V0
Q2FjaGVkSW1hZ2UgZm9yIHJlbmRlciB2aWRlbyB0b28uCisKKyAgICAgICAgKiBtYW51YWwtdGVz
dHMvdmlkZW8tcGxheWVyLmh0bWw6IFJlbW92ZSBiaXQtcm90IGZyb20gbWFudWFsIHRlc3Qgc28g
aXQgd29ya3MgYWdhaW4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6dmlkZW9GcmFtZUF2YWlsYWJs
ZSk6IE5ldywgYXNrIHRoZSBtZWRpYSBlbmdpbmUgaWYgYSB2aWRlbyBmcmFtZQorICAgICAgICAg
ICAgaXMgYXZhaWxhYmxlIHRvIHJlbmRlci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyLmg6IFByb3RvdHlwZSBmb3IgdmlkZW9GcmFtZUF2YWlsYWJsZS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaDogRGl0dG8uCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaDog
RGVjbGFyZSBtX3ZpZGVvRnJhbWVBdmFpbGFibGUsIGRlY2xhcmUKKyAgICAgICAgICAgIGFsbCBi
b29sIHZhcmlhYmxlcyB0byBhaWQgcGFja2luZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKTogSW5pdGlhbGl6ZSBtX3ZpZGVv
RnJhbWVBdmFpbGFibGUuIENsZWFudXAKKyAgICAgICAgICAgIGZsb2F0aW5nIHBvaW50IGluaXRp
YWxpemVycyB0byBtYXRjaCBjb2RpbmcgZ3VpZGVsaW5lcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZTo6bG9hZCk6IEluaXRpYWxpemUgbV92aWRlb0ZyYW1lQXZhaWxhYmxl
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp2aWRlb0ZyYW1lQXZhaWxh
YmxlKTogTmV3LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpyZXBhaW50
KTogU2V0IG1fdmlkZW9GcmFtZUF2YWlsYWJsZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNl
ZCk6IFNwbGl0IHBhcnQgb3V0IGludG8gcGFpbnQgbWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVySW1hZ2U6OnBhaW50KTogTmV3LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFn
ZS5oOiBEZWNsYXJlIHBhaW50LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpSZW5kZXJNZWRpYSk6IEluaGVyaXQg
ZnJvbSBSZW5kZXJJbWFnZSwgbm90IFJlbmRlclJlcGxhY2VkCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNZWRpYTo6ZGVzdHJveSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVk
aWE6OnN0eWxlRGlkQ2hhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZWRp
YTo6bGF5b3V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZWRpYTo6bG93ZXN0
UG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpyaWdodG1v
c3RQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWE6OmxlZnRt
b3N0UG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWEuaDog
RGVjbGFyZSBpc0ltYWdlIGFuZCBpc1JlbmRlckltYWdlLgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclZpZGVvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZGVvOjppbnRyaW5z
aWNTaXplQ2hhbmdlZCk6IE5ldywgY2FsbCBSZW5kZXJWaWRlbzo6aW50cmluc2ljU2l6ZUNoYW5n
ZWQKKyAgICAgICAgICAgIHdoZW4gZGlzcGxheWluZyBhIHBvc3RlciBzbyBpdCBpcyBzaXplZCBj
b3JyZWN0bHkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWRlbzo6aW1hZ2VDaGFuZ2VkKTog
T3ZlcnJpZGUgc28gd2UgY2FuIGNhY2hlIHRoZSBpbWFnZSdzIGludHJpc2ljIHNpemUgYW5kCisg
ICAgICAgIHVzZSBpdCB3aGVuIHdlIGFsc28ga25vdyB0aGUgbW92aWUncyBpbnRyaW5zaWMgc2l6
ZSBidXQgc3RpbGwgbmVlZCB0byBkcmF3IHRoZSBwb3N0ZXIuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJWaWRlbzo6dmlkZW9Cb3gpOiBVc2UgdGhlIHBvc3RlcidzIGludHJpbnNpYyBzaXplIHdo
ZW4gZHJhd2luZyB0aGUgcG9zdGVyLAorICAgICAgICB1c2UgdGhlIG1vdmllJ3MgaW50cmluc2lj
IHNpemUgd2hlbiBkcmF3aW5nIGZyYW1lcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZGVv
OjpwYWludFJlcGxhY2VkKTogQ2FsbCBSZW5kZXJJbWFnZTo6cGFpbnQgd2hlbiBkcmF3aW5nIHRo
ZSBwb3N0ZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWRlbzo6dmlkZW9FbGVtZW50KTog
TmV3LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlkZW86OnVwZGF0ZVBsYXllcik6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclZpZGVvLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWRlbzo6bWluaW11bVJlcGxhY2VkSGVpZ2h0KTogQWRkZWQuCisgICAgdmlydHVhbCB2b2lkIGNh
bGNQcmVmV2lkdGhzKCk7CisgICAgYm9vbCBpc1dpZHRoU3BlY2lmaWVkKCkgY29uc3Q7CisgICAg
Ym9vbCBpc0hlaWdodFNwZWNpZmllZCgpIGNvbnN0OworCiAyMDEwLTAxLTEwICBQYXZlbCBGZWxk
bWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbW90
aHkgSGF0Y2hlci4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDUz
MDM4KQorKysgV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MDYsNiArODA2LDggQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpzZXRSZWFkeVN0YXRlKE1lZAogICAgICAgICBtX3BsYXllci0+c2VlaygwKTsKICAg
ICB9CiAKKyAgICBib29sIHVwZGF0ZVBvc3RlciA9IGZhbHNlOworCiAgICAgLy8gNC44LjEwLjcg
c2F5cyBsb2FkZWRkYXRhIGlzIHNlbnQgb25seSB3aGVuIHRoZSBuZXcgc3RhdGUgKmlzKiBIQVZF
X0NVUlJFTlRfREFUQTogIklmIHRoZQogICAgIC8vIHByZXZpb3VzIHJlYWR5IHN0YXRlIHdhcyBI
QVZFX01FVEFEQVRBIGFuZCB0aGUgbmV3IHJlYWR5IHN0YXRlIGlzIEhBVkVfQ1VSUkVOVF9EQVRB
IiwgCiAgICAgLy8gYnV0IHRoZSBldmVudCB0YWJsZSBhdCB0aGUgZW5kIG9mIHRoZSBzcGVjIHNh
eXMgaXQgaXMgc2VudCB3aGVuOiAicmVhZHlTdGF0ZSBuZXdseSAKQEAgLTgxMyw2ICs4MTUsNyBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkCiAgICAgLy8gV2UgZ28g
d2l0aCB0aGUgbGF0ZXIgYmVjYXVzZSBpdCBzZWVtcyB1c2VmdWwgdG8gY291bnQgb24gZ2V0dGlu
ZyB0aGlzIGV2ZW50CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA+PSBIQVZFX0NVUlJFTlRfREFUQSAm
JiBvbGRTdGF0ZSA8IEhBVkVfQ1VSUkVOVF9EQVRBICYmICFtX2hhdmVGaXJlZExvYWRlZERhdGEp
IHsKICAgICAgICAgbV9oYXZlRmlyZWRMb2FkZWREYXRhID0gdHJ1ZTsKKyAgICAgICAgdXBkYXRl
UG9zdGVyID0gdHJ1ZTsKICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkubG9hZGVk
ZGF0YUV2ZW50KTsKICAgICB9CiAKQEAgLTgyMSw5ICs4MjQsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkCiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1l
cygpLmNhbnBsYXlFdmVudCk7CiAgICAgICAgIGlmIChpc1BvdGVudGlhbGx5UGxheWluZykKICAg
ICAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnBsYXlpbmdFdmVudCk7Ci0KLSAg
ICAgICAgaWYgKGlzVmlkZW8oKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxWaWRlb0Vs
ZW1lbnQqPih0aGlzKS0+dXBkYXRlUG9zdGVySW1hZ2UoKTsKKyAgICAgICAgdXBkYXRlUG9zdGVy
ID0gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAobV9yZWFkeVN0YXRlID09IEhBVkVfRU5PVUdIX0RB
VEEgJiYgb2xkU3RhdGUgPCBIQVZFX0VOT1VHSF9EQVRBKSB7CkBAIC04NDEsMTAgKzg0MiwxMiBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkCiAgICAgICAgICAgICBz
Y2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5wbGF5aW5nRXZlbnQpOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKGlzVmlkZW8oKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxWaWRlb0Vs
ZW1lbnQqPih0aGlzKS0+dXBkYXRlUG9zdGVySW1hZ2UoKTsKKyAgICAgICAgdXBkYXRlUG9zdGVy
ID0gdHJ1ZTsKICAgICB9CiAKKyAgICBpZiAodXBkYXRlUG9zdGVyICYmIGlzVmlkZW8oKSkKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8SFRNTFZpZGVvRWxlbWVudCo+KHRoaXMpLT51cGRhdGVQb3N0ZXJJ
bWFnZSgpOworCiAgICAgdXBkYXRlUGxheVN0YXRlKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuaAkocmV2aXNpb24gNTMwMzgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Niw3ICs4Niw5
IEBAIHB1YmxpYzoKICAgICBNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBtb3ZpZUxvYWRUeXBl
KCkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBpbkFjdGl2ZURvY3VtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9pbkFjdGl2ZURvY3VtZW50OyB9Ci0gICAgCisKKyAgICB2aXJ0dWFsIGJvb2wgdmlkZW9G
cmFtZUF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKIC8vIERPTSBBUEkKIC8v
IGVycm9yIHN0YXRlCiAgICAgUGFzc1JlZlB0cjxNZWRpYUVycm9yPiBlcnJvcigpIGNvbnN0OwpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAkocmV2aXNpb24gNTMwMzgpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUwLDcgKzUwLDcgQEAgSFRNTFZpZGVvRWxlbWVudDo6SFRNTFZpZGVvRWxl
bWVudChjb25zdAogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKHZpZGVvVGFnKSk7CiB9Ci0gICAg
CisKIGJvb2wgSFRNTFZpZGVvRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSog
c3R5bGUpIAogewogICAgIHJldHVybiBIVE1MRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHls
ZSk7IApAQCAtNTksOCArNTksNiBAQCBib29sIEhUTUxWaWRlb0VsZW1lbnQ6OnJlbmRlcmVySXNO
ZWVkZWQoCiAjaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogUmVuZGVyT2JqZWN0
KiBIVE1MVmlkZW9FbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJl
bmRlclN0eWxlKikKIHsKLSAgICBpZiAobV9zaG91bGRTaG93UG9zdGVySW1hZ2UpCi0gICAgICAg
IHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJJbWFnZSh0aGlzKTsKICAgICByZXR1cm4gbmV3IChh
cmVuYSkgUmVuZGVyVmlkZW8odGhpcyk7CiB9CiAjZW5kaWYKQEAgLTcwLDExICs2OCwxMiBAQCB2
b2lkIEhUTUxWaWRlb0VsZW1lbnQ6OmF0dGFjaCgpCiAgICAgSFRNTE1lZGlhRWxlbWVudDo6YXR0
YWNoKCk7CiAKICNpZiAhRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisgICAgdXBkYXRl
UG9zdGVySW1hZ2UoKTsKICAgICBpZiAobV9zaG91bGRTaG93UG9zdGVySW1hZ2UpIHsKICAgICAg
ICAgaWYgKCFtX2ltYWdlTG9hZGVyKQogICAgICAgICAgICAgbV9pbWFnZUxvYWRlci5zZXQobmV3
IEhUTUxJbWFnZUxvYWRlcih0aGlzKSk7CiAgICAgICAgIG1faW1hZ2VMb2FkZXItPnVwZGF0ZUZy
b21FbGVtZW50KCk7Ci0gICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzSW1h
Z2UoKSkgeworICAgICAgICBpZiAocmVuZGVyZXIoKSkgewogICAgICAgICAgICAgUmVuZGVySW1h
Z2UqIGltYWdlUmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKHJlbmRlcmVyKCkpOwogICAgICAgICAg
ICAgaW1hZ2VSZW5kZXJlci0+c2V0Q2FjaGVkSW1hZ2UobV9pbWFnZUxvYWRlci0+aW1hZ2UoKSk7
IAogICAgICAgICB9CkBAIC05Niw2ICs5NSw3IEBAIHZvaWQgSFRNTFZpZGVvRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWIKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0dHIt
Pm5hbWUoKTsKIAogICAgIGlmIChhdHRyTmFtZSA9PSBwb3N0ZXJBdHRyKSB7CisgICAgICAgIG1f
cG9zdGVyVXJsID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoYXR0ci0+dmFsdWUoKSk7CiAgICAg
ICAgIHVwZGF0ZVBvc3RlckltYWdlKCk7CiAgICAgICAgIGlmIChtX3Nob3VsZFNob3dQb3N0ZXJJ
bWFnZSkgewogI2lmICFFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKQEAgLTE2NiwxMSAr
MTY2LDYgQEAgdm9pZCBIVE1MVmlkZW9FbGVtZW50OjpzZXRIZWlnaHQodW5zaWduZQogICAgIHNl
dEF0dHJpYnV0ZShoZWlnaHRBdHRyLCBTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQogCi1LVVJM
IEhUTUxWaWRlb0VsZW1lbnQ6OnBvc3RlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShwb3N0ZXJBdHRyKSk7Ci19Ci0KIHZvaWQgSFRN
TFZpZGVvRWxlbWVudDo6c2V0UG9zdGVyKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0
QXR0cmlidXRlKHBvc3RlckF0dHIsIHZhbHVlKTsKQEAgLTE5MiwxMyArMTg3LDExIEBAIHZvaWQg
SFRNTFZpZGVvRWxlbWVudDo6dXBkYXRlUG9zdGVySW1hZ2UKICAgICBib29sIG9sZFNob3VsZFNo
b3dQb3N0ZXJJbWFnZSA9IG1fc2hvdWxkU2hvd1Bvc3RlckltYWdlOwogI2VuZGlmCiAKLSAgICBt
X3Nob3VsZFNob3dQb3N0ZXJJbWFnZSA9ICFwb3N0ZXIoKS5pc0VtcHR5KCkgJiYgcmVhZHlTdGF0
ZSgpIDwgSEFWRV9DVVJSRU5UX0RBVEE7CisgICAgbV9zaG91bGRTaG93UG9zdGVySW1hZ2UgPSAh
cG9zdGVyKCkuaXNFbXB0eSgpICYmICF2aWRlb0ZyYW1lQXZhaWxhYmxlKCk7CiAKICNpZiAhRU5B
QkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCi0gICAgaWYgKGF0dGFjaGVkKCkgJiYgb2xkU2hv
dWxkU2hvd1Bvc3RlckltYWdlICE9IG1fc2hvdWxkU2hvd1Bvc3RlckltYWdlKSB7Ci0gICAgICAg
IGRldGFjaCgpOwotICAgICAgICBhdHRhY2goKTsKLSAgICB9CisgICAgaWYgKHJlbmRlcmVyKCkg
JiYgb2xkU2hvdWxkU2hvd1Bvc3RlckltYWdlICE9IG1fc2hvdWxkU2hvd1Bvc3RlckltYWdlKQor
ICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwogI2VuZGlmCiB9CiAKQEAg
LTIyNiw1ICsyMTksMTMgQEAgdm9pZCBIVE1MVmlkZW9FbGVtZW50OjpwYWludEN1cnJlbnRGcmFt
ZQogICAgIHBsYXllci0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoY29udGV4dCwgZGVzdFJl
Y3QpOwogfQogCitib29sIEhUTUxWaWRlb0VsZW1lbnQ6OnZpZGVvRnJhbWVBdmFpbGFibGUoKSBj
b25zdAoreworICAgIGlmICghbV9wbGF5ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gbV9wbGF5ZXItPnZpZGVvRnJhbWVBdmFpbGFibGUoKTsKK30KKwogfQogI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmgJKHJldmlzaW9uIDUzMDM4KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBIVE1MSW1hZ2VMb2FkZXI7CiBjbGFzcyBI
VE1MVmlkZW9FbGVtZW50IDogcHVibGljIEhUTUxNZWRpYUVsZW1lbnQgewogcHVibGljOgogICAg
IEhUTUxWaWRlb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Ci0gICAg
CisKICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwogI2lmICFFTkFC
TEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKQEAgLTYxLDEwICs2MSwxMyBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgdmlkZW9XaWR0aCgpIGNvbnN0OwogICAgIHVuc2lnbmVkIHZpZGVvSGVpZ2h0
KCkgY29uc3Q7CiAgICAgCi0gICAgS1VSTCBwb3N0ZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgdmlkZW9GcmFtZUF2YWlsYWJsZSgpIGNvbnN0OworCisgICAgS1VSTCBwb3N0ZXIoKSBjb25z
dCB7IHJldHVybiBtX3Bvc3RlclVybDsgfQogICAgIHZvaWQgc2V0UG9zdGVyKGNvbnN0IFN0cmlu
ZyYpOwogCiAgICAgdm9pZCB1cGRhdGVQb3N0ZXJJbWFnZSgpOworICAgIGJvb2wgc2hvdWxkRGlz
cGxheVBvc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU2hvd1Bvc3RlckltYWdlOyB9CiAK
ICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKICAgICAv
LyBVc2VkIGJ5IGNhbnZhcyB0byBnYWluIHJhdyBwaXhlbCBhY2Nlc3MKQEAgLTcyLDYgKzc1LDcg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIE93blB0cjxIVE1MSW1hZ2VMb2FkZXI+IG1faW1h
Z2VMb2FkZXI7CisgICAgS1VSTCBtX3Bvc3RlclVybDsKICAgICBib29sIG1fc2hvdWxkU2hvd1Bv
c3RlckltYWdlOwogfTsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAkocmV2aXNpb24gNTMw
MzgpCisrKyBXZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgSW1hZ2VMb2Fk
ZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFIKIHZvaWQgSW1hZ2VMb2FkZXI6OnVwZGF0ZVJlbmRl
cmVyKCkKIHsKICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1fZWxlbWVudC0+cmVu
ZGVyZXIoKSkgewotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc0ltYWdlKCkpCisgICAgICAgIGlm
ICghcmVuZGVyZXItPmlzSW1hZ2UoKSAmJiAhcmVuZGVyZXItPmlzVmlkZW8oKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgUmVuZGVySW1hZ2UqIGltYWdlUmVuZGVyZXIgPSB0b1JlbmRl
ckltYWdlKHJlbmRlcmVyKTsKICAgICAgICAgCkluZGV4OiBXZWJDb3JlL21hbnVhbC10ZXN0cy92
aWRlby1wbGF5ZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL21hbnVhbC10ZXN0cy92aWRl
by1wbGF5ZXIuaHRtbAkocmV2aXNpb24gNTMwMzgpCisrKyBXZWJDb3JlL21hbnVhbC10ZXN0cy92
aWRlby1wbGF5ZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDcgQEAgZnVuY3Rp
b24gc3RvcHBlZFBsYXlpbmcoKSB7CiBmdW5jdGlvbiB1cGRhdGVQcm9ncmVzcyhldikgewogICAg
IGlmICghc2hvd1Byb2dyZXNzKQogICAgICAgIHJldHVybjsKLSAgICBpZiAoZXYudG90YWwpCi0g
ICAgICAgIHBsYXlCdXR0b24uaW5uZXJIVE1MID0gIkxvYWRpbmcgIiArICgxMDAqZXYubG9hZGVk
L2V2LnRvdGFsKS50b0ZpeGVkKDApICsgIiUiOwotICAgIGVsc2UKLSAgICAgICAgcGxheUJ1dHRv
bi5pbm5lckhUTUwgPSAiTG9hZGluZy4uLiI7CisgICAgcGxheUJ1dHRvbi5pbm5lckhUTUwgPSAi
TG9hZGluZy4uLiI7CiAgICAgcGxheUJ1dHRvbi5jbGFzc05hbWUgPSAidmlkZW9idXR0b24gdmlk
ZW9sb2FkaW5nIjsKIH0KIGZ1bmN0aW9uIGluaXRWaWRlbygpIHsKQEAgLTkwLDEyICs4Nyw4IEBA
IGZ1bmN0aW9uIGluaXRWaWRlbygpIHsKICAgICBwbGF5QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgZnVuY3Rpb24gKCkgewogICAgICAgICBpZiAodmlkZW9FbGVtLnBhdXNlZCkgewog
ICAgICAgICAgICAgaWYgKCF2aWRlb0VsZW0uc3JjKQotICAgICAgICAgICAgICAgIC8vdmlkZW9F
bGVtLnNyYyA9ICJzYW1wbGUubW92IjsKICAgICAgICAgICAgICAgICB2aWRlb0VsZW0uc3JjID0g
Imh0dHA6Ly9tb3ZpZXMuYXBwbGUuY29tL21vdmllcy91cy9hcHBsZS9pcG9kaXR1bmVzLzIwMDcv
dG91Y2gvYWRzL2FwcGxlX2lwb2R0b3VjaF90b3VjaF9yNjQwLTljaWUubW92IjsKLSAgICAgICAg
ICAgIGlmICh2aWRlb0VsZW0ucmVhZHlTdGF0ZSA9PSBIVE1MTWVkaWFFbGVtZW50LkRBVEFfVU5B
VkFJTEFCTEUpCi0gICAgICAgICAgICAgICAgdmlkZW9FbGVtLmxvYWQoKTsKLSAgICAgICAgICAg
IGlmICh2aWRlb0VsZW0ucmVhZHlTdGF0ZSA9PSBIVE1MTWVkaWFFbGVtZW50LkNBTl9QTEFZX1RI
Uk9VR0gpCi0gICAgICAgICAgICAgICAgdmlkZW9FbGVtLnBsYXkoKTsKKyAgICAgICAgICAgIHZp
ZGVvRWxlbS5wbGF5KCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgdmlkZW9FbGVtLnBh
dXNlKCk7CiAgICAgfSApOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllci5jcHAJKHJldmlzaW9uIDUzMDM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1
OSw2ICsyNTksMTEgQEAgdm9pZCBNZWRpYVBsYXllcjo6bG9hZChjb25zdCBTdHJpbmcmIHVybAog
ICAgICAgICBtX3ByaXZhdGUuc2V0KGNyZWF0ZU51bGxNZWRpYVBsYXllcih0aGlzKSk7CiB9ICAg
IAogCitib29sIE1lZGlhUGxheWVyOjp2aWRlb0ZyYW1lQXZhaWxhYmxlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT52aWRlb0ZyYW1lQXZhaWxhYmxlKCk7Cit9CisgICAgCiBib29s
IE1lZGlhUGxheWVyOjpjYW5Mb2FkUG9zdGVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wcml2
YXRlLT5jYW5Mb2FkUG9zdGVyKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhUGxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5oCShyZXZpc2lvbiA1MzAzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjEz
LDYgKzIxMyw4IEBAIHB1YmxpYzoKIAogICAgIE1lZGlhUGxheWVyQ2xpZW50KiBtZWRpYVBsYXll
ckNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFQbGF5ZXJDbGllbnQ7IH0KIAorICAgIGJv
b2wgdmlkZW9GcmFtZUF2YWlsYWJsZSgpIGNvbnN0OworCiAgICAgYm9vbCBjYW5Mb2FkUG9zdGVy
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRQb3N0ZXIoY29uc3QgU3RyaW5nJik7CiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAkocmV2aXNp
b24gNTMwMzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC05OSw2ICs5OSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBzZXRBdXRvYnVmZmVyKGJvb2wpIHsgfTsKIAorICAgIHZpcnR1YWwgYm9vbCB2aWRlb0Zy
YW1lQXZhaWxhYmxlKCkgY29uc3QgeyByZXR1cm4gcmVhZHlTdGF0ZSgpID49IE1lZGlhUGxheWVy
OjpIYXZlQ3VycmVudERhdGE7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBjYW5Mb2FkUG9zdGVyKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zdGVyKGNvbnN0
IFN0cmluZyYpIHsgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRp
YVBsYXllclByaXZhdGVRVEtpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgJKHJldmlzaW9uIDUzMDM4KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIwLDYgKzEyMCw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwogICAgIHZvaWQgc2V0U2l6ZShjb25z
dCBJbnRTaXplJik7CiAgICAgCisgICAgdmlydHVhbCBib29sIHZpZGVvRnJhbWVBdmFpbGFibGUo
KSBjb25zdDsKKwogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVj
dCYpOwogICAgIHZvaWQgcGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYpOwogCkBAIC0xNzYsMTggKzE3OCwxOSBAQCBwcml2YXRlOgogICAg
IFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4gbV9zZWVrVGltZXI7CiAgICAgTWVkaWFQbGF5ZXI6
Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSBtX3JlYWR5U3RhdGU7Ci0gICAgYm9vbCBtX3N0YXJ0ZWRQbGF5aW5nOwotICAgIGJvb2wgbV9p
c1N0cmVhbWluZzsKLSAgICBib29sIG1fdmlzaWJsZTsKICAgICBJbnRSZWN0IG1fcmVjdDsKICAg
ICBGbG9hdFNpemUgbV9zY2FsZUZhY3RvcjsKICAgICB1bnNpZ25lZCBtX2VuYWJsZWRUcmFja0Nv
dW50OwogICAgIHVuc2lnbmVkIG1fdG90YWxUcmFja0NvdW50OwotICAgIGJvb2wgbV9oYXNVbnN1
cHBvcnRlZFRyYWNrczsKICAgICBmbG9hdCBtX3JlcG9ydGVkRHVyYXRpb247CiAgICAgZmxvYXQg
bV9jYWNoZWREdXJhdGlvbjsKICAgICBmbG9hdCBtX3RpbWVUb1Jlc3RvcmU7CiAgICAgUmV0YWlu
UHRyPFFUTW92aWVMYXllcj4gbV9xdFZpZGVvTGF5ZXI7CisgICAgYm9vbCBtX3N0YXJ0ZWRQbGF5
aW5nIDogMTsKKyAgICBib29sIG1faXNTdHJlYW1pbmcgOiAxOworICAgIGJvb2wgbV92aXNpYmxl
IDogMTsKKyAgICBib29sIG1faGFzVW5zdXBwb3J0ZWRUcmFja3MgOiAxOworICAgIGJvb2wgbV92
aWRlb0ZyYW1lQXZhaWxhYmxlIDogMTsKICNpZiBEUkFXX0ZSQU1FX1JBVEUKICAgICBpbnQgIG1f
ZnJhbWVDb3VudFdoaWxlUGxheWluZzsKICAgICBkb3VibGUgbV90aW1lU3RhcnRlZFBsYXlpbmc7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVR
VEtpdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRp
YVBsYXllclByaXZhdGVRVEtpdC5tbQkocmV2aXNpb24gNTMwMzgpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjA0LDE3ICsyMDQsMTggQEAgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUoTQogICAgICwgbV9zZWVrVGltZXIodGhpcywgJk1l
ZGlhUGxheWVyUHJpdmF0ZTo6c2Vla1RpbWVyRmlyZWQpCiAgICAgLCBtX25ldHdvcmtTdGF0ZShN
ZWRpYVBsYXllcjo6RW1wdHkpCiAgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVO
b3RoaW5nKQotICAgICwgbV9zdGFydGVkUGxheWluZyhmYWxzZSkKLSAgICAsIG1faXNTdHJlYW1p
bmcoZmFsc2UpCi0gICAgLCBtX3Zpc2libGUoZmFsc2UpCiAgICAgLCBtX3JlY3QoKQogICAgICwg
bV9zY2FsZUZhY3RvcigxLCAxKQogICAgICwgbV9lbmFibGVkVHJhY2tDb3VudCgwKQogICAgICwg
bV90b3RhbFRyYWNrQ291bnQoMCkKKyAgICAsIG1fcmVwb3J0ZWREdXJhdGlvbigtMSkKKyAgICAs
IG1fY2FjaGVkRHVyYXRpb24oLTEpCisgICAgLCBtX3RpbWVUb1Jlc3RvcmUoLTEpCisgICAgLCBt
X3N0YXJ0ZWRQbGF5aW5nKGZhbHNlKQorICAgICwgbV9pc1N0cmVhbWluZyhmYWxzZSkKKyAgICAs
IG1fdmlzaWJsZShmYWxzZSkKICAgICAsIG1faGFzVW5zdXBwb3J0ZWRUcmFja3MoZmFsc2UpCi0g
ICAgLCBtX3JlcG9ydGVkRHVyYXRpb24oLTEuMGYpCi0gICAgLCBtX2NhY2hlZER1cmF0aW9uKC0x
LjBmKQotICAgICwgbV90aW1lVG9SZXN0b3JlKC0xLjBmKQorICAgICwgbV92aWRlb0ZyYW1lQXZh
aWxhYmxlKGZhbHNlKQogI2lmIERSQVdfRlJBTUVfUkFURQogICAgICwgbV9mcmFtZUNvdW50V2hp
bGVQbGF5aW5nKDApCiAgICAgLCBtX3RpbWVTdGFydGVkUGxheWluZygwKQpAQCAtNTU2LDYgKzU1
Nyw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0cmkKICAgICAgICAg
bV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CiAgICAgfQogICAgIGNhbmNlbFNlZWsoKTsK
KyAgICBtX3ZpZGVvRnJhbWVBdmFpbGFibGUgPSBmYWxzZTsKICAgICAKICAgICBbbV9vYmpjT2Jz
ZXJ2ZXIuZ2V0KCkgc2V0RGVsYXlDYWxsYmFja3M6WUVTXTsKIApAQCAtMTA4Niw2ICsxMDg4LDIw
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWaXNpYmxlKGJvb2wKICAgICB9CiB9CiAK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjp2aWRlb0ZyYW1lQXZhaWxhYmxlKCkgY29uc3QKK3sK
KyAgICAvLyBXaGVuIHVzaW5nIGEgUVRNb3ZpZUxheWVyIHJldHVybiB0cnVlIGFzIHNvb24gYXMg
dGhlIG1vdmllIHJlYWNoZXMgUVRNb3ZpZUxvYWRTdGF0ZVBsYXlhYmxlIAorICAgIC8vIGJlY2F1
c2UgYWx0aG91Z2ggd2UgZG9uJ3QgKmtub3cqIHdoZW4gdGhlIGZpcnN0IGZyYW1lIGhhcyBkZWNv
ZGVkLCBieSB0aGUgdGltZSB3ZSBnZXQgYW5kIAorICAgIC8vIHByb2Nlc3MgdGhlIG5vdGlmaWNh
aXRvbiBhIGZyYW1lIHNob3VsZCBoYXZlIHByb3BhZ2F0ZWQgdGhlIFZpc3VhbENvbnRleHQgYW5k
IGJlZW4gc2V0IG9uCisgICAgLy8gdGhlIGxheWVyLgorICAgIGlmIChjdXJyZW50UmVuZGVyaW5n
TW9kZSgpID09IE1lZGlhUmVuZGVyaW5nTW92aWVMYXllcikKKyAgICAgICAgcmV0dXJuIG1fcmVh
ZHlTdGF0ZSA+PSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOworCisgICAgLy8gV2hlbiB1
c2luZyB0aGUgc29mdHdhcmUgcmVuZGVyZXIgUXVpY2tUaW1lIHNpZ25hbHMgdGhhdCBhIGZyYW1l
IGlzIGF2YWlsYWJsZSBzbyB3ZSBtaWdodCBhcyB3ZWxsCisgICAgLy8gd2FpdCB1bnRpbCB3ZSBr
bm93IHRoYXQgYSBmcmFtZSBoYXMgYmVlbiBkcmF3bi4KKyAgICByZXR1cm4gbV92aWRlb0ZyYW1l
QXZhaWxhYmxlOworfQorCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVwYWludCgpCiB7CiAg
ICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCkBAIC0xMTAwLDYgKzExMTYsNyBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVwYWludCgpCiAgICAgICAgICAgICBtX3RpbWVTdGFydGVk
UGxheWluZyA9IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKICAgICB9
CiAjZW5kaWYKKyAgICBtX3ZpZGVvRnJhbWVBdmFpbGFibGUgPSB0cnVlOwogICAgIG1fcGxheWVy
LT5yZXBhaW50KCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlz
aW9uIDUzMDM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00LDcgKzQsNyBAQAogICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxl
ciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA2IEFsbGFuIFNhbmRmZWxk
IEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKICAqICAgICAgICAgICAoQykgMjAwNiBTYW11ZWwg
V2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00MjAsMTEgKzQy
MCwyNSBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAjZW5kaWYK
IAogICAgICAgICBJbnRTaXplIGNvbnRlbnRTaXplKGNXaWR0aCwgY0hlaWdodCk7Ci0gICAgICAg
IGJvb2wgdXNlTG93UXVhbGl0eVNjYWxpbmcgPSBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OnNo
b3VsZEltYWdlUGFpbnRBdExvd1F1YWxpdHkodGhpcywgY29udGVudFNpemUpOwogICAgICAgICBJ
bnRSZWN0IHJlY3QoSW50UG9pbnQodHggKyBsZWZ0Qm9yZGVyICsgbGVmdFBhZCwgdHkgKyB0b3BC
b3JkZXIgKyB0b3BQYWQpLCBjb250ZW50U2l6ZSk7CisgICAgICAgIHBhaW50KGNvbnRleHQsIHJl
Y3QpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICgoZG9jdW1lbnQoKS0+
cHJpbnRpbmcoKSAmJiAhdmlldygpLT5wcmludEltYWdlcygpKSB8fCAhaGFzSW1hZ2UoKSB8fCBl
cnJvck9jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChoYXNJbWFnZSgpICYm
IHJlY3Qud2lkdGgoKSA+IDAgJiYgcmVjdC5oZWlnaHQoKSA+IDApIHsKKyAgICAgICAgSW1hZ2Uq
IGltZyA9IGltYWdlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmICgh
aW1nIHx8IGltZy0+aXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgSFRN
TEltYWdlRWxlbWVudCogaW1hZ2VFbHQgPSAobm9kZSgpICYmIG5vZGUoKS0+aGFzVGFnTmFtZShp
bWdUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihub2RlKCkpIDogMDsKICAg
ICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IgPSBpbWFnZUVsdCA/IGlt
YWdlRWx0LT5jb21wb3NpdGVPcGVyYXRvcigpIDogQ29tcG9zaXRlU291cmNlT3ZlcjsKLSAgICAg
ICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlKGNXaWR0aCwgY0hlaWdodCksIHN0eWxlKCktPmNv
bG9yU3BhY2UoKSwgcmVjdCwgY29tcG9zaXRlT3BlcmF0b3IsIHVzZUxvd1F1YWxpdHlTY2FsaW5n
KTsKKyAgICAgICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGluZyA9IFJlbmRlckltYWdlU2NhbGVP
YnNlcnZlcjo6c2hvdWxkSW1hZ2VQYWludEF0TG93UXVhbGl0eSh0aGlzLCByZWN0LnNpemUoKSk7
CisgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZShyZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIHJlY3QsIGNvbXBvc2l0ZU9wZXJhdG9yLCB1
c2VMb3dRdWFsaXR5U2NhbGluZyk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklt
YWdlLmgJKHJldmlzaW9uIDUzMDM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBB
bGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pIAogICogICAgICAgICAgIChD
KSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTU3LDYgKzU3LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hh
bmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCk7CiAKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0
KTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25z
dCB7IHJldHVybiAiUmVuZGVySW1hZ2UiOyB9CiAKQEAgLTEwNSw3ICsxMDcsNyBAQCBwcml2YXRl
OgogCiBpbmxpbmUgUmVuZGVySW1hZ2UqIHRvUmVuZGVySW1hZ2UoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QpCiB7IAotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNSZW5kZXJJbWFnZSgpKTsK
KyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzUmVuZGVySW1hZ2UoKSB8fCBvYmplY3Qt
PmlzVmlkZW8oKSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4ob2JqZWN0
KTsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcAkocmV2aXNpb24gNTMwMzgp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDcgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBj
T3BhY2l0eUFuaW1hdGlvbkR1cgogc3RhdGljIGNvbnN0IGRvdWJsZSBjT3BhY2l0eUFuaW1hdGlv
bkR1cmF0aW9uRmFkZU91dCA9IDAuMzsKIAogUmVuZGVyTWVkaWE6OlJlbmRlck1lZGlhKEhUTUxN
ZWRpYUVsZW1lbnQqIHZpZGVvKQotICAgIDogUmVuZGVyUmVwbGFjZWQodmlkZW8pCisgICAgOiBS
ZW5kZXJJbWFnZSh2aWRlbykKICAgICAsIG1fdGltZVVwZGF0ZVRpbWVyKHRoaXMsICZSZW5kZXJN
ZWRpYTo6dGltZVVwZGF0ZVRpbWVyRmlyZWQpCiAgICAgLCBtX29wYWNpdHlBbmltYXRpb25UaW1l
cih0aGlzLCAmUmVuZGVyTWVkaWE6Om9wYWNpdHlBbmltYXRpb25UaW1lckZpcmVkKQogICAgICwg
bV9tb3VzZU92ZXIoZmFsc2UpCkBAIC02Miw3ICs2Miw3IEBAIFJlbmRlck1lZGlhOjpSZW5kZXJN
ZWRpYShIVE1MTWVkaWFFbGVtZW4KIH0KIAogUmVuZGVyTWVkaWE6OlJlbmRlck1lZGlhKEhUTUxN
ZWRpYUVsZW1lbnQqIHZpZGVvLCBjb25zdCBJbnRTaXplJiBpbnRyaW5zaWNTaXplKQotICAgIDog
UmVuZGVyUmVwbGFjZWQodmlkZW8sIGludHJpbnNpY1NpemUpCisgICAgOiBSZW5kZXJJbWFnZSh2
aWRlbykKICAgICAsIG1fdGltZVVwZGF0ZVRpbWVyKHRoaXMsICZSZW5kZXJNZWRpYTo6dGltZVVw
ZGF0ZVRpbWVyRmlyZWQpCiAgICAgLCBtX29wYWNpdHlBbmltYXRpb25UaW1lcih0aGlzLCAmUmVu
ZGVyTWVkaWE6Om9wYWNpdHlBbmltYXRpb25UaW1lckZpcmVkKQogICAgICwgbV9tb3VzZU92ZXIo
ZmFsc2UpCkBAIC03MSw2ICs3MSw3IEBAIFJlbmRlck1lZGlhOjpSZW5kZXJNZWRpYShIVE1MTWVk
aWFFbGVtZW4KICAgICAsIG1fb3BhY2l0eUFuaW1hdGlvbkZyb20oMCkKICAgICAsIG1fb3BhY2l0
eUFuaW1hdGlvblRvKDEuMGYpCiB7CisgICAgc2V0SW50cmluc2ljU2l6ZShpbnRyaW5zaWNTaXpl
KTsKIH0KIAogUmVuZGVyTWVkaWE6On5SZW5kZXJNZWRpYSgpCkBAIC04OSw3ICs5MCw3IEBAIHZv
aWQgUmVuZGVyTWVkaWE6OmRlc3Ryb3koKQogICAgICAgICBtX2NvbnRyb2xzU2hhZG93Um9vdC0+
ZGV0YWNoKCk7CiAgICAgICAgIG1fY29udHJvbHNTaGFkb3dSb290ID0gMDsKICAgICB9Ci0gICAg
UmVuZGVyUmVwbGFjZWQ6OmRlc3Ryb3koKTsKKyAgICBSZW5kZXJJbWFnZTo6ZGVzdHJveSgpOwog
fQogCiBIVE1MTWVkaWFFbGVtZW50KiBSZW5kZXJNZWRpYTo6bWVkaWFFbGVtZW50KCkgY29uc3QK
QEAgLTEwNCw3ICsxMDUsNyBAQCBNZWRpYVBsYXllciogUmVuZGVyTWVkaWE6OnBsYXllcigpIGNv
bnN0CiAKIHZvaWQgUmVuZGVyTWVkaWE6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBk
aWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7Ci0gICAgUmVuZGVyUmVwbGFjZWQ6
OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKKyAgICBSZW5kZXJJbWFnZTo6c3R5bGVE
aWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwogCiAgICAgaWYgKG1fY29udHJvbHNTaGFkb3dSb290
KSB7CiAgICAgICAgIGlmIChtX3BhbmVsKQpAQCAtMTQ2LDcgKzE0Nyw3IEBAIHZvaWQgUmVuZGVy
TWVkaWE6OmxheW91dCgpCiB7CiAgICAgSW50U2l6ZSBvbGRTaXplID0gY29udGVudEJveFJlY3Qo
KS5zaXplKCk7CiAKLSAgICBSZW5kZXJSZXBsYWNlZDo6bGF5b3V0KCk7CisgICAgUmVuZGVySW1h
Z2U6OmxheW91dCgpOwogCiAgICAgUmVuZGVyQm94KiBjb250cm9sc1JlbmRlcmVyID0gbV9jb250
cm9sc1NoYWRvd1Jvb3QgPyBtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyQm94KCkgOiAwOwog
ICAgIGlmICghY29udHJvbHNSZW5kZXJlcikKQEAgLTU3Myw3ICs1NzQsNyBAQCB2b2lkIFJlbmRl
ck1lZGlhOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2CiAKIGludCBSZW5kZXJNZWRpYTo6bG93ZXN0
UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgYm9vbCBpbmNsdWRlU2VsZikg
Y29uc3QKIHsKLSAgICBpbnQgYm90dG9tID0gUmVuZGVyUmVwbGFjZWQ6Omxvd2VzdFBvc2l0aW9u
KGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBpbmNsdWRlU2VsZik7CisgICAgaW50IGJvdHRvbSA9
IFJlbmRlckltYWdlOjpsb3dlc3RQb3NpdGlvbihpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgaW5j
bHVkZVNlbGYpOwogICAgIGlmICghbV9jb250cm9sc1NoYWRvd1Jvb3QgfHwgIW1fY29udHJvbHNT
aGFkb3dSb290LT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gYm90dG9tOwogICAgIApAQCAt
NTgyLDcgKzU4Myw3IEBAIGludCBSZW5kZXJNZWRpYTo6bG93ZXN0UG9zaXRpb24oYm9vbCBpbmMK
IAogaW50IFJlbmRlck1lZGlhOjpyaWdodG1vc3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxv
d0ludGVyaW9yLCBib29sIGluY2x1ZGVTZWxmKSBjb25zdAogewotICAgIGludCByaWdodCA9IFJl
bmRlclJlcGxhY2VkOjpyaWdodG1vc3RQb3NpdGlvbihpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwg
aW5jbHVkZVNlbGYpOworICAgIGludCByaWdodCA9IFJlbmRlckltYWdlOjpyaWdodG1vc3RQb3Np
dGlvbihpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgaW5jbHVkZVNlbGYpOwogICAgIGlmICghbV9j
b250cm9sc1NoYWRvd1Jvb3QgfHwgIW1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJlcigpKQog
ICAgICAgICByZXR1cm4gcmlnaHQ7CiAgICAgCkBAIC01OTEsNyArNTkyLDcgQEAgaW50IFJlbmRl
ck1lZGlhOjpyaWdodG1vc3RQb3NpdGlvbihib29sIAogCiBpbnQgUmVuZGVyTWVkaWE6OmxlZnRt
b3N0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgYm9vbCBpbmNsdWRlU2Vs
ZikgY29uc3QKIHsKLSAgICBpbnQgbGVmdCA9IFJlbmRlclJlcGxhY2VkOjpsZWZ0bW9zdFBvc2l0
aW9uKGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBpbmNsdWRlU2VsZik7CisgICAgaW50IGxlZnQg
PSBSZW5kZXJJbWFnZTo6bGVmdG1vc3RQb3NpdGlvbihpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwg
aW5jbHVkZVNlbGYpOwogICAgIGlmICghbV9jb250cm9sc1NoYWRvd1Jvb3QgfHwgIW1fY29udHJv
bHNTaGFkb3dSb290LT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gbGVmdDsKICAgICAKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuaAkocmV2aXNpb24gNTMwMzgpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNZWRpYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoVklERU8pCiAKLSNpbmNsdWRlICJSZW5k
ZXJSZXBsYWNlZC5oIgorI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiVGltZXIu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTEsMTIgKzUxLDEyIEBAIGNsYXNzIE1lZGlh
Q29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckUKIGNsYXNzIE1lZGlhQ29udHJvbEVsZW1lbnQ7
CiBjbGFzcyBNZWRpYVBsYXllcjsKIAotY2xhc3MgUmVuZGVyTWVkaWEgOiBwdWJsaWMgUmVuZGVy
UmVwbGFjZWQgeworY2xhc3MgUmVuZGVyTWVkaWEgOiBwdWJsaWMgUmVuZGVySW1hZ2UgewogcHVi
bGljOgogICAgIFJlbmRlck1lZGlhKEhUTUxNZWRpYUVsZW1lbnQqKTsKICAgICBSZW5kZXJNZWRp
YShIVE1MTWVkaWFFbGVtZW50KiwgY29uc3QgSW50U2l6ZSYgaW50cmluc2ljU2l6ZSk7CiAgICAg
dmlydHVhbCB+UmVuZGVyTWVkaWEoKTsKLSAgICAKKwogICAgIGNvbnN0IFJlbmRlck9iamVjdENo
aWxkTGlzdCogY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQogICAgIFJl
bmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQog
CkBAIC04Myw2ICs4Myw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlck1lZGlhIjsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc01lZGlhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNS
ZW5kZXJJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIGludCBs
b3dlc3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yID0gdHJ1ZSwgYm9vbCBp
bmNsdWRlU2VsZiA9IHRydWUpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHJpZ2h0bW9zdFBvc2l0
aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IgPSB0cnVlLCBib29sIGluY2x1ZGVTZWxm
ID0gdHJ1ZSkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCShyZXZpc2lv
biA1MzAzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
SFRNTFZpZGVvRWxlbWVudC5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAi
UmVuZGVyUmVwbGFjZWQuaCIKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgpAQCAtNzMsNyArNzQsMTUgQEAgUmVuZGVyVmlkZW86On5S
ZW5kZXJWaWRlbygpCiAgICAgICAgIHAtPnNldEZyYW1lVmlldygwKTsKICAgICB9CiB9Ci0gICAg
CisKK3ZvaWQgUmVuZGVyVmlkZW86OmludHJpbnNpY1NpemVDaGFuZ2VkKCkKK3sKKyAgICBpZiAo
dmlkZW9FbGVtZW50KCktPnNob3VsZERpc3BsYXlQb3N0ZXIoKSkKKyAgICAgICAgUmVuZGVyVmlk
ZW86OmludHJpbnNpY1NpemVDaGFuZ2VkKCk7CisgICAgdmlkZW9TaXplQ2hhbmdlZCgpOyAKK30K
KworCiB2b2lkIFJlbmRlclZpZGVvOjp2aWRlb1NpemVDaGFuZ2VkKCkKIHsKICAgICBpZiAoIXBs
YXllcigpKQpAQCAtODYsNDEgKzk1LDY5IEBAIHZvaWQgUmVuZGVyVmlkZW86OnZpZGVvU2l6ZUNo
YW5nZWQoKQogICAgIH0KIH0KIAotSW50UmVjdCBSZW5kZXJWaWRlbzo6dmlkZW9Cb3goKSBjb25z
dCAKK3ZvaWQgUmVuZGVyVmlkZW86OmltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIgbmV3SW1h
Z2UsIGNvbnN0IEludFJlY3QqIHJlY3QpCiB7CisgICAgUmVuZGVySW1hZ2U6OmltYWdlQ2hhbmdl
ZChuZXdJbWFnZSwgcmVjdCk7CisKKyAgICAvLyBDYWNoZSB0aGUgaW1hZ2UgaW50cmluc2ljIHNp
emUgc28gd2UgY2FuIGNvbnRpbnVlIHRvIHVzZSBpdCB0byBkcmF3IHRoZSBpbWFnZSBjb3JyZWN0
bHkKKyAgICAvLyBldmVuIGFmdGVyIHdlIGtub3cgdGhlIHZpZGVvIGludHJpc2ljIHNpemUgYnV0
IGFyZW4ndCBhYmxlIHRvIGRyYXcgdmlkZW8gZnJhbWVzIHlldAorICAgIC8vICh3ZSBkb24ndCB3
YW50IHRvIHNjYWxlIHRoZSBwb3N0ZXIgdG8gdGhlIHZpZGVvIHNpemUpLgorICAgIGlmICh2aWRl
b0VsZW1lbnQoKS0+c2hvdWxkRGlzcGxheVBvc3RlcigpKQorICAgICAgICBtX2NhY2hlZEltYWdl
U2l6ZSA9IGludHJpbnNpY1NpemUoKTsKK30KKworSW50UmVjdCBSZW5kZXJWaWRlbzo6dmlkZW9C
b3goKSBjb25zdAoreworICAgIGlmIChtX2NhY2hlZEltYWdlU2l6ZS5pc0VtcHR5KCkgJiYgdmlk
ZW9FbGVtZW50KCktPnNob3VsZERpc3BsYXlQb3N0ZXIoKSkKKyAgICAgICAgcmV0dXJuIEludFJl
Y3QoKTsKKworICAgIEludFNpemUgZWxlbWVudFNpemU7CisgICAgaWYgKHZpZGVvRWxlbWVudCgp
LT5zaG91bGREaXNwbGF5UG9zdGVyKCkpCisgICAgICAgIGVsZW1lbnRTaXplID0gbV9jYWNoZWRJ
bWFnZVNpemU7CisgICAgZWxzZQorICAgICAgICBlbGVtZW50U2l6ZSA9IGludHJpbnNpY1NpemUo
KTsKKwogICAgIEludFJlY3QgY29udGVudFJlY3QgPSBjb250ZW50Qm94UmVjdCgpOwotICAgIAot
ICAgIGlmIChpbnRyaW5zaWNTaXplKCkuaXNFbXB0eSgpIHx8IGNvbnRlbnRSZWN0LmlzRW1wdHko
KSkKKyAgICBpZiAoZWxlbWVudFNpemUuaXNFbXB0eSgpIHx8IGNvbnRlbnRSZWN0LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIEludFJlY3QgcmVzdWx0UmVjdCA9
IGNvbnRlbnRSZWN0OwotICAgIGludCByYXRpbyA9IGNvbnRlbnRSZWN0LndpZHRoKCkgKiBpbnRy
aW5zaWNTaXplKCkuaGVpZ2h0KCkgLSBjb250ZW50UmVjdC5oZWlnaHQoKSAqIGludHJpbnNpY1Np
emUoKS53aWR0aCgpOworICAgIEludFJlY3QgcmVuZGVyQm94ID0gY29udGVudFJlY3Q7CisgICAg
aW50IHJhdGlvID0gcmVuZGVyQm94LndpZHRoKCkgKiBlbGVtZW50U2l6ZS5oZWlnaHQoKSAtIHJl
bmRlckJveC5oZWlnaHQoKSAqIGVsZW1lbnRTaXplLndpZHRoKCk7CiAgICAgaWYgKHJhdGlvID4g
MCkgewotICAgICAgICBpbnQgbmV3V2lkdGggPSBjb250ZW50UmVjdC5oZWlnaHQoKSAqIGludHJp
bnNpY1NpemUoKS53aWR0aCgpIC8gaW50cmluc2ljU2l6ZSgpLmhlaWdodCgpOworICAgICAgICBp
bnQgbmV3V2lkdGggPSByZW5kZXJCb3guaGVpZ2h0KCkgKiBlbGVtZW50U2l6ZS53aWR0aCgpIC8g
ZWxlbWVudFNpemUuaGVpZ2h0KCk7CiAgICAgICAgIC8vIEp1c3QgZmlsbCB0aGUgd2hvbGUgYXJl
YSBpZiB0aGUgZGlmZmVyZW5jZSBpcyBvbmUgcGl4ZWwgb3IgbGVzcyAoaW4gYm90aCBzaWRlcykK
LSAgICAgICAgaWYgKHJlc3VsdFJlY3Qud2lkdGgoKSAtIG5ld1dpZHRoID4gMikKLSAgICAgICAg
ICAgIHJlc3VsdFJlY3Quc2V0V2lkdGgobmV3V2lkdGgpOwotICAgICAgICByZXN1bHRSZWN0Lm1v
dmUoKGNvbnRlbnRSZWN0LndpZHRoKCkgLSByZXN1bHRSZWN0LndpZHRoKCkpIC8gMiwgMCk7Cisg
ICAgICAgIGlmIChyZW5kZXJCb3gud2lkdGgoKSAtIG5ld1dpZHRoID4gMikKKyAgICAgICAgICAg
IHJlbmRlckJveC5zZXRXaWR0aChuZXdXaWR0aCk7CisgICAgICAgIHJlbmRlckJveC5tb3ZlKChj
b250ZW50UmVjdC53aWR0aCgpIC0gcmVuZGVyQm94LndpZHRoKCkpIC8gMiwgMCk7CiAgICAgfSBl
bHNlIGlmIChyYXRpbyA8IDApIHsKLSAgICAgICAgaW50IG5ld0hlaWdodCA9IGNvbnRlbnRSZWN0
LndpZHRoKCkgKiBpbnRyaW5zaWNTaXplKCkuaGVpZ2h0KCkgLyBpbnRyaW5zaWNTaXplKCkud2lk
dGgoKTsKLSAgICAgICAgaWYgKHJlc3VsdFJlY3QuaGVpZ2h0KCkgLSBuZXdIZWlnaHQgPiAyKQot
ICAgICAgICAgICAgcmVzdWx0UmVjdC5zZXRIZWlnaHQobmV3SGVpZ2h0KTsKLSAgICAgICAgcmVz
dWx0UmVjdC5tb3ZlKDAsIChjb250ZW50UmVjdC5oZWlnaHQoKSAtIHJlc3VsdFJlY3QuaGVpZ2h0
KCkpIC8gMik7CisgICAgICAgIGludCBuZXdIZWlnaHQgPSByZW5kZXJCb3gud2lkdGgoKSAqIGVs
ZW1lbnRTaXplLmhlaWdodCgpIC8gZWxlbWVudFNpemUud2lkdGgoKTsKKyAgICAgICAgaWYgKHJl
bmRlckJveC5oZWlnaHQoKSAtIG5ld0hlaWdodCA+IDIpCisgICAgICAgICAgICByZW5kZXJCb3gu
c2V0SGVpZ2h0KG5ld0hlaWdodCk7CisgICAgICAgIHJlbmRlckJveC5tb3ZlKDAsIChjb250ZW50
UmVjdC5oZWlnaHQoKSAtIHJlbmRlckJveC5oZWlnaHQoKSkgLyAyKTsKICAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdFJlY3Q7CisKKyAgICByZXR1cm4gcmVuZGVyQm94OwogfQogICAgIAogdm9pZCBS
ZW5kZXJWaWRlbzo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBp
bnQgdHkpCiB7CiAgICAgTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyID0gcGxheWVyKCk7Ci0gICAg
aWYgKCFtZWRpYVBsYXllcikKLSAgICAgICAgcmV0dXJuOwotICAgIHVwZGF0ZVBsYXllcigpOwor
ICAgIGJvb2wgZGlzcGxheWluZ1Bvc3RlciA9IHZpZGVvRWxlbWVudCgpLT5zaG91bGREaXNwbGF5
UG9zdGVyKCk7CisKKyAgICBpZiAoIWRpc3BsYXlpbmdQb3N0ZXIpIHsKKyAgICAgICAgaWYgKCFt
ZWRpYVBsYXllcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdXBkYXRlUGxheWVyKCk7
CisgICAgfQorCiAgICAgSW50UmVjdCByZWN0ID0gdmlkZW9Cb3goKTsKICAgICBpZiAocmVjdC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICByZWN0Lm1vdmUodHgsIHR5KTsKLSAgICBt
ZWRpYVBsYXllci0+cGFpbnQocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QpOworICAgIGlmIChkaXNw
bGF5aW5nUG9zdGVyKQorICAgICAgICBwYWludChwYWludEluZm8uY29udGV4dCwgcmVjdCk7Cisg
ICAgZWxzZQorICAgICAgICBtZWRpYVBsYXllci0+cGFpbnQocGFpbnRJbmZvLmNvbnRleHQsIHJl
Y3QpOwogfQogCiB2b2lkIFJlbmRlclZpZGVvOjpsYXlvdXQoKQpAQCAtMTI5LDYgKzE2NiwxMSBA
QCB2b2lkIFJlbmRlclZpZGVvOjpsYXlvdXQoKQogICAgIHVwZGF0ZVBsYXllcigpOwogfQogICAg
IAorSFRNTFZpZGVvRWxlbWVudCogUmVuZGVyVmlkZW86OnZpZGVvRWxlbWVudCgpIGNvbnN0Cit7
IAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MVmlkZW9FbGVtZW50Kj4obm9kZSgpKTsgCit9
CisKIHZvaWQgUmVuZGVyVmlkZW86OnVwZGF0ZUZyb21FbGVtZW50KCkKIHsKICAgICBSZW5kZXJN
ZWRpYTo6dXBkYXRlRnJvbUVsZW1lbnQoKTsKQEAgLTE0MCw3ICsxODIsNyBAQCB2b2lkIFJlbmRl
clZpZGVvOjp1cGRhdGVQbGF5ZXIoKQogICAgIE1lZGlhUGxheWVyKiBtZWRpYVBsYXllciA9IHBs
YXllcigpOwogICAgIGlmICghbWVkaWFQbGF5ZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAo
IW1lZGlhRWxlbWVudCgpLT5pbkFjdGl2ZURvY3VtZW50KCkpIHsKKyAgICBpZiAoIXZpZGVvRWxl
bWVudCgpLT5pbkFjdGl2ZURvY3VtZW50KCkpIHsKICAgICAgICAgbWVkaWFQbGF5ZXItPnNldFZp
c2libGUoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTU1LDQwICsxOTcsNiBA
QCB2b2lkIFJlbmRlclZpZGVvOjp1cGRhdGVQbGF5ZXIoKQogICAgIG1lZGlhUGxheWVyLT5zZXRW
aXNpYmxlKHRydWUpOwogfQogCi1ib29sIFJlbmRlclZpZGVvOjppc1dpZHRoU3BlY2lmaWVkKCkg
Y29uc3QKLXsKLSAgICBzd2l0Y2ggKHN0eWxlKCktPndpZHRoKCkudHlwZSgpKSB7Ci0gICAgICAg
IGNhc2UgRml4ZWQ6Ci0gICAgICAgIGNhc2UgUGVyY2VudDoKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBjYXNlIEF1dG86Ci0gICAgICAgIGNhc2UgUmVsYXRpdmU6IC8vIEZJWE1F
OiBTaG91bGRuJ3QgdGhpcyBjYXNlIHJldHVybiB0cnVlPyBJdCBkb2Vzbid0IGZvciBpbWFnZXMu
Ci0gICAgICAgIGNhc2UgU3RhdGljOgotICAgICAgICBjYXNlIEludHJpbnNpYzoKLSAgICAgICAg
Y2FzZSBNaW5JbnRyaW5zaWM6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IEFTU0VSVChmYWxzZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlclZpZGVv
Ojppc0hlaWdodFNwZWNpZmllZCgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChzdHlsZSgpLT5oZWln
aHQoKS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBGaXhlZDoKLSAgICAgICAgY2FzZSBQZXJjZW50
OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgQXV0bzoKLSAgICAgICAg
Y2FzZSBSZWxhdGl2ZTogLy8gRklYTUU6IFNob3VsZG4ndCB0aGlzIGNhc2UgcmV0dXJuIHRydWU/
IEl0IGRvZXNuJ3QgZm9yIGltYWdlcy4KLSAgICAgICAgY2FzZSBTdGF0aWM6Ci0gICAgICAgIGNh
c2UgSW50cmluc2ljOgotICAgICAgICBjYXNlIE1pbkludHJpbnNpYzoKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgQVNTRVJUKGZhbHNlKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KIGludCBSZW5kZXJWaWRlbzo6Y2FsY1JlcGxhY2VkV2lkdGgoYm9vbCBpbmNsdWRlTWF4
V2lkdGgpIGNvbnN0CiB7CiAgICAgaW50IHdpZHRoOwpAQCAtMjM1LDI2ICsyNDMsNiBAQCBpbnQg
UmVuZGVyVmlkZW86OmNhbGNBc3BlY3RSYXRpb0hlaWdodCgpCiAgICAgcmV0dXJuIFJlbmRlckJv
eDo6Y2FsY1JlcGxhY2VkV2lkdGgoKSAqIGludHJpbnNpY0hlaWdodCAvIGludHJpbnNpY1dpZHRo
OwogfQogCi12b2lkIFJlbmRlclZpZGVvOjpjYWxjUHJlZldpZHRocygpCi17Ci0gICAgQVNTRVJU
KHByZWZXaWR0aHNEaXJ0eSgpKTsKLQotICAgIGludCBwYWRkaW5nQW5kQm9yZGVycyA9IHBhZGRp
bmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCk7
Ci0gICAgbV9tYXhQcmVmV2lkdGggPSBjYWxjUmVwbGFjZWRXaWR0aChmYWxzZSkgKyBwYWRkaW5n
QW5kQm9yZGVyczsKLQotICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBz
dHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKQotICAgICAgICBt
X21heFByZWZXaWR0aCA9IG1pbihtX21heFByZWZXaWR0aCwgc3R5bGUoKS0+bWF4V2lkdGgoKS52
YWx1ZSgpICsgKHN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8gcGFkZGluZ0Fu
ZEJvcmRlcnMgOiAwKSk7Ci0KLSAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc1BlcmNlbnQoKSB8
fCBzdHlsZSgpLT5oZWlnaHQoKS5pc1BlcmNlbnQoKSB8fCAKLSAgICAgICAgc3R5bGUoKS0+bWF4
V2lkdGgoKS5pc1BlcmNlbnQoKSB8fCBzdHlsZSgpLT5tYXhIZWlnaHQoKS5pc1BlcmNlbnQoKSB8
fAotICAgICAgICBzdHlsZSgpLT5taW5XaWR0aCgpLmlzUGVyY2VudCgpIHx8IHN0eWxlKCktPm1p
bkhlaWdodCgpLmlzUGVyY2VudCgpKQotICAgICAgICBtX21pblByZWZXaWR0aCA9IDA7Ci0gICAg
ZWxzZQotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoOwotCi0gICAgc2V0
UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKLX0KLQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKIGJvb2wgUmVuZGVyVmlkZW86OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBj
b25zdAogewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5oCShyZXZpc2lvbiA1MzAzOCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSwgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMzLDYgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIGNsYXNzIEhUTUxN
ZWRpYUVsZW1lbnQ7CitjbGFzcyBIVE1MVmlkZW9FbGVtZW50OwogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiAjZW5kaWYKQEAgLTUzLDggKzU0
LDEwIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVs
ZW1lbnQoKTsKKyAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQoKSBjb25zdDsKIAot
ICAgIHZpcnR1YWwgdm9pZCBpbnRyaW5zaWNTaXplQ2hhbmdlZCgpIHsgdmlkZW9TaXplQ2hhbmdl
ZCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGludHJpbnNpY1NpemVDaGFuZ2VkKCk7CisgICAgdmly
dHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0g
MCk7CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVy
biAiUmVuZGVyVmlkZW8iOyB9CiAKQEAgLTY3LDE2ICs3MCwxNSBAQCBwcml2YXRlOgogCiAgICAg
dmlydHVhbCBpbnQgY2FsY1JlcGxhY2VkV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVl
KSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjYWxjUmVwbGFjZWRIZWlnaHQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGludCBtaW5pbXVtUmVwbGFjZWRIZWlnaHQoKSBjb25zdCB7IHJldHVybiAwOyB9
CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKICAgICAKICAgICBpbnQgY2Fs
Y0FzcGVjdFJhdGlvV2lkdGgoKSBjb25zdDsKICAgICBpbnQgY2FsY0FzcGVjdFJhdGlvSGVpZ2h0
KCkgY29uc3Q7CiAKLSAgICBib29sIGlzV2lkdGhTcGVjaWZpZWQoKSBjb25zdDsKLSAgICBib29s
IGlzSGVpZ2h0U3BlY2lmaWVkKCkgY29uc3Q7Ci0gICAgCiAgICAgdm9pZCB1cGRhdGVQbGF5ZXIo
KTsKKworICAgIEludFNpemUgbV9jYWNoZWRJbWFnZVNpemU7CiB9OwogCiBpbmxpbmUgUmVuZGVy
VmlkZW8qIHRvUmVuZGVyVmlkZW8oUmVuZGVyT2JqZWN0KiBvYmplY3QpCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA1MzA1NCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE3IEBACisyMDEwLTAxLTEwICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IHJkYXI6Ly81Njg0MDYyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzA5NAorICAgICAgICBGbGFzaCBvZiB3aGl0ZSB3aGVuIHN3aXRjaGluZyBmcm9t
IHBvc3RlciBpbWFnZSB0byB2aWRlbyBwbGF5YmFjaworICAgICAgICAKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTQwCisgICAgICAgIDx2aWRlbz4g
cG9zdGVyIHNob3VsZCBzY2FsZSBsaWtlIGEgdmlkZW8gZnJhbWUKKworICAgICAgICAqIG1lZGlh
L3ZpZGVvLXBvc3Rlci1leHBlY3RlZC50eHQ6IFJlbW92ZSBibGFuayBsaW5lIGF0IGJlZ2lubmlu
ZyBvZiB0ZXN0IHJlc3VsdCBwcmVzZW50CisgICAgICAgIGFzIGEgc2lkZSBlZmZlY3Qgb2YgdGhl
IG1lZGlhIGVsZW1lbnQgdXNpbmcgUmVuZGVySW1hZ2UgdG8gZGlzcGxheSB0aGUgcG9zdGVyLgor
CiAyMDEwLTAxLTA5ICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBObyByZXZpZXcsIHJvbGxpbmcgb3V0IHI1MzA0NC4KSW5kZXg6IExheW91dFRlc3RzL21lZGlh
L3ZpZGVvLXBvc3Rlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVk
aWEvdmlkZW8tcG9zdGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTMwMzgpCisrKyBMYXlvdXRU
ZXN0cy9tZWRpYS92aWRlby1wb3N0ZXItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
LDQgKzEsMyBAQAotCiBFWFBFQ1RFRCAodmlkZW8uZ2V0QXR0cmlidXRlKCdwb3N0ZXInKSA9PSAn
Y29udGVudC9ncmVlbmJveC5wbmcnKSBPSwogRVhQRUNURUQgKHJlbGF0aXZlVVJMKHZpZGVvLnBv
c3RlcikgPT0gJ2NvbnRlbnQvZ3JlZW5ib3gucG5nJykgT0sKIEVYUEVDVEVEICh2aWRlby5nZXRB
dHRyaWJ1dGUoJ3Bvc3RlcicpID09ICdjb250ZW50L2FiZS5wbmcnKSBPSwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46260</attachid>
            <date>2010-01-10 22:50:23 -0800</date>
            <delta_ts>2010-01-11 10:36:10 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>patch_8.txt</filename>
            <type>text/plain</type>
            <size>41076</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzA2NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODUgQEAKKzIwMTAtMDEtMTAgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgcmRhcjovLzU2ODQwNjIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMDk0CisgICAgICAgIEZsYXNoIG9mIHdoaXRlIHdoZW4gc3dpdGNoaW5nIGZy
b20gcG9zdGVyIGltYWdlIHRvIHZpZGVvIHBsYXliYWNrCisgICAgICAgIAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxNDAKKyAgICAgICAgPHZpZGVv
PiBwb3N0ZXIgc2hvdWxkIHNjYWxlIGxpa2UgYSB2aWRlbyBmcmFtZQorCisgICAgICAgICogaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6OnNldFJlYWR5U3RhdGUpOiBPbmx5IGNhbGwgdXBkYXRlUG9zdGVySW1hZ2UgZnJvbSBvbmUg
cGxhY2UKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaDogRGVmYXVsdCBpbXBsZW1l
bnRhdGlvbnMgZm9yIHZpZGVvRnJhbWVBdmFpbGFibGUgYW5kIHNob3VsZERpc3BsYXlQb3N0ZXIu
CisKKyAgICAgICAgKiBodG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFZpZGVvRWxlbWVudDo6SFRNTFZpZGVvRWxlbWVudCk6IG1fc2hvdWxkU2hvd1Bvc3Rl
ckltYWdlIC0+IG1fc2hvdWxkRGlzcGxheVBvc3Rlci4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxW
aWRlb0VsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKTogQWx3YXlzIGNyZWF0ZSBhIFJlbmRlclZpZGVv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudDo6YXR0YWNoKTogQ2FsbCB1cGRh
dGVQb3N0ZXJJbWFnZSBiZWZvcmUgY2hlY2tpbmcgdG8gc2VlIGlmIHdlCisgICAgICAgICAgICBz
aG91bGQgZGlzcGxheSB0aGUgcG9zdGVyIGltYWdlLiByZW5kZXJlcigpIGlzIG5ldmVyIGEgUmVu
ZGVySW1hZ2UsIGRvbid0IG5lZWQgdG8gY2hlY2suCisgICAgICAgICAgICBtX3Nob3VsZFNob3dQ
b3N0ZXJJbWFnZSAtPiBtX3Nob3VsZERpc3BsYXlQb3N0ZXIuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MVmlkZW9FbGVtZW50OjpkZXRhY2gpOiBtX3Nob3VsZFNob3dQb3N0ZXJJbWFnZSAtPiBtX3No
b3VsZERpc3BsYXlQb3N0ZXIuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZSk6IENhY2hlIHBvc3RlciBhdHRyaWJ1dGUgd2hlbiBpdCBpcyBz
ZXQgc2luY2UKKyAgICAgICAgICAgIGl0IGlzIGNoZWNrZWQgZnJlcXVlbnRseS4gbV9zaG91bGRT
aG93UG9zdGVySW1hZ2UgLT4gbV9zaG91bGREaXNwbGF5UG9zdGVyLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFZpZGVvRWxlbWVudDo6dXBkYXRlUG9zdGVySW1hZ2UpOiBEb24ndCBib3RoZXIgbG9v
a2luZyBhdCB0aGUgbmV0d29yayBzdGF0ZSwgCisgICAgICAgICAgICBkaXNwbGF5IHRoZSBwb3N0
ZXIgYXMgbG9uZyBhcyB0aGUgYXR0cmlidXRlIGlzIHZhbGlkIGFuZCB0aGUgbWVkaWEgZW5naW5l
IHNheXMgaXQgaGFzbid0CisgICAgICAgICAgICByZW5kZXJlZCBhIHZpZGVvIGZyYW1lLiBtX3No
b3VsZFNob3dQb3N0ZXJJbWFnZSAtPiBtX3Nob3VsZERpc3BsYXlQb3N0ZXIuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50OjpoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKTogTmV3LCBh
c2sgdGhlIG1lZGlhIGVuZ2luZSBpZiBhIHZpZGVvIGZyYW1lCisgICAgICAgICAgICBpcyBhdmFp
bGFibGUgdG8gcmVuZGVyLgorICAgICAgICAqIGh0bWwvSFRNTFZpZGVvRWxlbWVudC5oOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudDo6cG9zdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxWaWRlb0VsZW1lbnQ6OnNob3VsZERpc3BsYXlQb3N0ZXIpOgorCisgICAgICAgICog
bG9hZGVyL0ltYWdlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTG9hZGVyOjp1
cGRhdGVSZW5kZXJlcik6IENhbGwgc2V0Q2FjaGVkSW1hZ2UgZm9yIHJlbmRlciB2aWRlbyB0b28u
CisKKyAgICAgICAgKiBtYW51YWwtdGVzdHMvdmlkZW8tcGxheWVyLmh0bWw6IFJlbW92ZSBiaXQt
cm90IGZyb20gbWFudWFsIHRlc3Qgc28gaXQgd29ya3MgYWdhaW4uCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllcjo6aGFzQXZhaWxhYmxlVmlkZW9GcmFtZSk6IE5ldywgYXNrIHRoZSBtZWRpYSBlbmdpbmUg
aWYgYSB2aWRlbyBmcmFtZQorICAgICAgICAgICAgaXMgYXZhaWxhYmxlIHRvIHJlbmRlci4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmg6IFByb3RvdHlwZSBmb3Ig
aGFzQXZhaWxhYmxlVmlkZW9GcmFtZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllclByaXZhdGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaDogRGVjbGFyZSBoYXNBdmFpbGFibGVWaWRlb0Zy
YW1lLCBkZWNsYXJlCisgICAgICAgICAgICBhbGwgYm9vbCB2YXJpYWJsZXMgdG8gYWlkIHBhY2tp
bmcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0Lm1tOiAKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5
ZXJQcml2YXRlKTogSW5pdGlhbGl6ZSBtX3ZpZGVvRnJhbWVIYXNEcmF3bi4gQ2xlYW51cAorICAg
ICAgICAgICAgZmxvYXRpbmcgcG9pbnQgaW5pdGlhbGl6ZXJzIHRvIG1hdGNoIGNvZGluZyBndWlk
ZWxpbmVzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKTogSW5p
dGlhbGl6ZSBtX3ZpZGVvRnJhbWVIYXNEcmF3bi4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6aGFzQXZhaWxhYmxlVmlkZW9GcmFtZSk6IE5ldy4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cmVwYWludCk6IFNldCBtX3ZpZGVvRnJhbWVIYXNEcmF3
bi4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQpOiBTcGxp
dCBwYXJ0IG91dCBpbnRvIHBhaW50IG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklt
YWdlOjpwYWludCk6IE5ldy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuaDogRGVj
bGFyZSBwYWludC4gTWFrZSBpc1dpZHRoU3BlY2lmaWVkIGFuZCBpc0hlaWdodFNwZWNpZmllZCBw
cm90ZWN0ZWQKKyAgICAgICAgICAgIGluc3RlYWQgb2YgcHJpdmF0ZSBzbyBSZW5kZXJWaWRlbyBj
YW4gdXNlIHRoZW0uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWE6OlJlbmRlck1lZGlhKTogSW5oZXJpdCBmcm9tIFJl
bmRlckltYWdlLCBub3QgUmVuZGVyUmVwbGFjZWQKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1l
ZGlhOjpkZXN0cm95KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZWRpYTo6c3R5
bGVEaWRDaGFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpsYXlv
dXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpsb3dlc3RQb3NpdGlv
bik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWE6OnJpZ2h0bW9zdFBvc2l0
aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZWRpYTo6bGVmdG1vc3RQb3Np
dGlvbik6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5oOiBEZWNsYXJl
IGlzSW1hZ2UgYW5kIGlzUmVuZGVySW1hZ2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VmlkZW8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlkZW86OmludHJpbnNpY1NpemVD
aGFuZ2VkKTogTmV3LCBjYWxsIFJlbmRlclZpZGVvOjppbnRyaW5zaWNTaXplQ2hhbmdlZAorICAg
ICAgICAgICAgd2hlbiBkaXNwbGF5aW5nIGEgcG9zdGVyIHNvIGl0IGlzIHNpemVkIGNvcnJlY3Rs
eS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZGVvOjppbWFnZUNoYW5nZWQpOiBPdmVycmlk
ZSBzbyB3ZSBjYW4gY2FjaGUgdGhlIGltYWdlJ3MgaW50cmlzaWMgc2l6ZSBhbmQKKyAgICAgICAg
dXNlIGl0IHdoZW4gd2UgYWxzbyBrbm93IHRoZSBtb3ZpZSdzIGludHJpbnNpYyBzaXplIGJ1dCBz
dGlsbCBuZWVkIHRvIGRyYXcgdGhlIHBvc3Rlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZp
ZGVvOjp2aWRlb0JveCk6IFVzZSB0aGUgcG9zdGVyJ3MgaW50cmluc2ljIHNpemUgd2hlbiBkcmF3
aW5nIHRoZSBwb3N0ZXIsCisgICAgICAgIHVzZSB0aGUgbW92aWUncyBpbnRyaW5zaWMgc2l6ZSB3
aGVuIGRyYXdpbmcgZnJhbWVzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlkZW86OnBhaW50
UmVwbGFjZWQpOiBDYWxsIFJlbmRlckltYWdlOjpwYWludCB3aGVuIGRyYXdpbmcgdGhlIHBvc3Rl
ci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZGVvOjp2aWRlb0VsZW1lbnQpOiBOZXcuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWRlbzo6dXBkYXRlUGxheWVyKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVmlkZW8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZGVvOjpt
aW5pbXVtUmVwbGFjZWRIZWlnaHQpOiBBZGRlZC4KKwogMjAxMC0wMS0xMCAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDUzMDM4KQor
KysgV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC04MDYsNiArODA2LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpzZXRSZWFkeVN0YXRlKE1lZAogICAgICAgICBtX3BsYXllci0+c2VlaygwKTsKICAgICB9CiAK
KyAgICBib29sIHNob3VsZFVwZGF0ZVBvc3RlckltYWdlID0gZmFsc2U7CisKICAgICAvLyA0Ljgu
MTAuNyBzYXlzIGxvYWRlZGRhdGEgaXMgc2VudCBvbmx5IHdoZW4gdGhlIG5ldyBzdGF0ZSAqaXMq
IEhBVkVfQ1VSUkVOVF9EQVRBOiAiSWYgdGhlCiAgICAgLy8gcHJldmlvdXMgcmVhZHkgc3RhdGUg
d2FzIEhBVkVfTUVUQURBVEEgYW5kIHRoZSBuZXcgcmVhZHkgc3RhdGUgaXMgSEFWRV9DVVJSRU5U
X0RBVEEiLCAKICAgICAvLyBidXQgdGhlIGV2ZW50IHRhYmxlIGF0IHRoZSBlbmQgb2YgdGhlIHNw
ZWMgc2F5cyBpdCBpcyBzZW50IHdoZW46ICJyZWFkeVN0YXRlIG5ld2x5IApAQCAtODEzLDYgKzgx
NSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWQKICAgICAvLyBX
ZSBnbyB3aXRoIHRoZSBsYXRlciBiZWNhdXNlIGl0IHNlZW1zIHVzZWZ1bCB0byBjb3VudCBvbiBn
ZXR0aW5nIHRoaXMgZXZlbnQKICAgICBpZiAobV9yZWFkeVN0YXRlID49IEhBVkVfQ1VSUkVOVF9E
QVRBICYmIG9sZFN0YXRlIDwgSEFWRV9DVVJSRU5UX0RBVEEgJiYgIW1faGF2ZUZpcmVkTG9hZGVk
RGF0YSkgewogICAgICAgICBtX2hhdmVGaXJlZExvYWRlZERhdGEgPSB0cnVlOworICAgICAgICBz
aG91bGRVcGRhdGVQb3N0ZXJJbWFnZSA9IHRydWU7CiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZl
bnROYW1lcygpLmxvYWRlZGRhdGFFdmVudCk7CiAgICAgfQogCkBAIC04MjEsOSArODI0LDcgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRSZWFkeVN0YXRlKE1lZAogICAgICAgICBzY2hlZHVs
ZUV2ZW50KGV2ZW50TmFtZXMoKS5jYW5wbGF5RXZlbnQpOwogICAgICAgICBpZiAoaXNQb3RlbnRp
YWxseVBsYXlpbmcpCiAgICAgICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5wbGF5
aW5nRXZlbnQpOwotCi0gICAgICAgIGlmIChpc1ZpZGVvKCkpCi0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxIVE1MVmlkZW9FbGVtZW50Kj4odGhpcyktPnVwZGF0ZVBvc3RlckltYWdlKCk7CisgICAg
ICAgIHNob3VsZFVwZGF0ZVBvc3RlckltYWdlID0gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAobV9y
ZWFkeVN0YXRlID09IEhBVkVfRU5PVUdIX0RBVEEgJiYgb2xkU3RhdGUgPCBIQVZFX0VOT1VHSF9E
QVRBKSB7CkBAIC04NDEsMTAgKzg0MiwxMiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFJl
YWR5U3RhdGUoTWVkCiAgICAgICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5wbGF5
aW5nRXZlbnQpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGlzVmlkZW8oKSkKLSAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEhUTUxWaWRlb0VsZW1lbnQqPih0aGlzKS0+dXBkYXRlUG9zdGVySW1h
Z2UoKTsKKyAgICAgICAgc2hvdWxkVXBkYXRlUG9zdGVySW1hZ2UgPSB0cnVlOwogICAgIH0KIAor
ICAgIGlmIChzaG91bGRVcGRhdGVQb3N0ZXJJbWFnZSAmJiBpc1ZpZGVvKCkpCisgICAgICAgIHN0
YXRpY19jYXN0PEhUTUxWaWRlb0VsZW1lbnQqPih0aGlzKS0+dXBkYXRlUG9zdGVySW1hZ2UoKTsK
KwogICAgIHVwZGF0ZVBsYXlTdGF0ZSgpOwogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmgJKHJldmlzaW9uIDUzMDM4KQorKysgV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsNyArODYsNyBAQCBwdWJs
aWM6CiAgICAgTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUgbW92aWVMb2FkVHlwZSgpIGNvbnN0
OwogICAgIAogICAgIGJvb2wgaW5BY3RpdmVEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5B
Y3RpdmVEb2N1bWVudDsgfQotICAgIAorCiAvLyBET00gQVBJCiAvLyBlcnJvciBzdGF0ZQogICAg
IFBhc3NSZWZQdHI8TWVkaWFFcnJvcj4gZXJyb3IoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MVmlkZW9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFZp
ZGVvRWxlbWVudC5jcHAJKHJldmlzaW9uIDUzMDM4KQorKysgV2ViQ29yZS9odG1sL0hUTUxWaWRl
b0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niwx
MSArNDYsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogSFRNTFZpZGVvRWxlbWVu
dDo6SFRNTFZpZGVvRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jKQogICAgIDogSFRNTE1lZGlhRWxlbWVudCh0YWdOYW1lLCBkb2MpCi0gICAgLCBtX3No
b3VsZFNob3dQb3N0ZXJJbWFnZShmYWxzZSkKKyAgICAsIG1fc2hvdWxkRGlzcGxheVBvc3Rlcihm
YWxzZSkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZSh2aWRlb1RhZykpOwogfQotICAgIAorCiBi
b29sIEhUTUxWaWRlb0VsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxl
KSAKIHsKICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyAK
QEAgLTU5LDggKzU5LDYgQEAgYm9vbCBIVE1MVmlkZW9FbGVtZW50OjpyZW5kZXJlcklzTmVlZGVk
KAogI2lmICFFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKIFJlbmRlck9iamVjdCogSFRN
TFZpZGVvRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJT
dHlsZSopCiB7Ci0gICAgaWYgKG1fc2hvdWxkU2hvd1Bvc3RlckltYWdlKQotICAgICAgICByZXR1
cm4gbmV3IChhcmVuYSkgUmVuZGVySW1hZ2UodGhpcyk7CiAgICAgcmV0dXJuIG5ldyAoYXJlbmEp
IFJlbmRlclZpZGVvKHRoaXMpOwogfQogI2VuZGlmCkBAIC03MCwxMSArNjgsMTIgQEAgdm9pZCBI
VE1MVmlkZW9FbGVtZW50OjphdHRhY2goKQogICAgIEhUTUxNZWRpYUVsZW1lbnQ6OmF0dGFjaCgp
OwogCiAjaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotICAgIGlmIChtX3Nob3Vs
ZFNob3dQb3N0ZXJJbWFnZSkgeworICAgIHVwZGF0ZVBvc3RlckltYWdlKCk7CisgICAgaWYgKG1f
c2hvdWxkRGlzcGxheVBvc3RlcikgewogICAgICAgICBpZiAoIW1faW1hZ2VMb2FkZXIpCiAgICAg
ICAgICAgICBtX2ltYWdlTG9hZGVyLnNldChuZXcgSFRNTEltYWdlTG9hZGVyKHRoaXMpKTsKICAg
ICAgICAgbV9pbWFnZUxvYWRlci0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICAgICAgaWYgKHJl
bmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNJbWFnZSgpKSB7CisgICAgICAgIGlmIChyZW5kZXJl
cigpKSB7CiAgICAgICAgICAgICBSZW5kZXJJbWFnZSogaW1hZ2VSZW5kZXJlciA9IHRvUmVuZGVy
SW1hZ2UocmVuZGVyZXIoKSk7CiAgICAgICAgICAgICBpbWFnZVJlbmRlcmVyLT5zZXRDYWNoZWRJ
bWFnZShtX2ltYWdlTG9hZGVyLT5pbWFnZSgpKTsgCiAgICAgICAgIH0KQEAgLTg2LDcgKzg1LDcg
QEAgdm9pZCBIVE1MVmlkZW9FbGVtZW50OjpkZXRhY2goKQogewogICAgIEhUTUxNZWRpYUVsZW1l
bnQ6OmRldGFjaCgpOwogICAgIAotICAgIGlmICghbV9zaG91bGRTaG93UG9zdGVySW1hZ2UpCisg
ICAgaWYgKCFtX3Nob3VsZERpc3BsYXlQb3N0ZXIpCiAgICAgICAgIGlmIChtX2ltYWdlTG9hZGVy
KQogICAgICAgICAgICAgbV9pbWFnZUxvYWRlci5jbGVhcigpOwogfQpAQCAtOTYsOCArOTUsOSBA
QCB2b2lkIEhUTUxWaWRlb0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCk7CiAKICAgICBpZiAoYXR0ck5hbWUg
PT0gcG9zdGVyQXR0cikgeworICAgICAgICBtX3Bvc3RlclVSTCA9IGRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKGF0dHItPnZhbHVlKCkpOwogICAgICAgICB1cGRhdGVQb3N0ZXJJbWFnZSgpOwotICAg
ICAgICBpZiAobV9zaG91bGRTaG93UG9zdGVySW1hZ2UpIHsKKyAgICAgICAgaWYgKG1fc2hvdWxk
RGlzcGxheVBvc3RlcikgewogI2lmICFFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKICAg
ICAgICAgICAgIGlmICghbV9pbWFnZUxvYWRlcikKICAgICAgICAgICAgICAgICBtX2ltYWdlTG9h
ZGVyLnNldChuZXcgSFRNTEltYWdlTG9hZGVyKHRoaXMpKTsKQEAgLTE2NiwxMSArMTY2LDYgQEAg
dm9pZCBIVE1MVmlkZW9FbGVtZW50OjpzZXRIZWlnaHQodW5zaWduZQogICAgIHNldEF0dHJpYnV0
ZShoZWlnaHRBdHRyLCBTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQogCi1LVVJMIEhUTUxWaWRl
b0VsZW1lbnQ6OnBvc3RlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKGdldEF0dHJpYnV0ZShwb3N0ZXJBdHRyKSk7Ci19Ci0KIHZvaWQgSFRNTFZpZGVvRWxl
bWVudDo6c2V0UG9zdGVyKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRl
KHBvc3RlckF0dHIsIHZhbHVlKTsKQEAgLTE4OSwxNiArMTg0LDE0IEBAIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIEhUTUxWaWRlb0VsZW1lbnQ6OmkKIHZvaWQgSFRNTFZpZGVvRWxlbWVudDo6dXBkYXRl
UG9zdGVySW1hZ2UoKQogewogI2lmICFFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKLSAg
ICBib29sIG9sZFNob3VsZFNob3dQb3N0ZXJJbWFnZSA9IG1fc2hvdWxkU2hvd1Bvc3RlckltYWdl
OworICAgIGJvb2wgb2xkU2hvdWxkU2hvd1Bvc3RlckltYWdlID0gbV9zaG91bGREaXNwbGF5UG9z
dGVyOwogI2VuZGlmCiAKLSAgICBtX3Nob3VsZFNob3dQb3N0ZXJJbWFnZSA9ICFwb3N0ZXIoKS5p
c0VtcHR5KCkgJiYgcmVhZHlTdGF0ZSgpIDwgSEFWRV9DVVJSRU5UX0RBVEE7CisgICAgbV9zaG91
bGREaXNwbGF5UG9zdGVyID0gIXBvc3RlcigpLmlzRW1wdHkoKSAmJiAhaGFzQXZhaWxhYmxlVmlk
ZW9GcmFtZSgpOwogCiAjaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotICAgIGlm
IChhdHRhY2hlZCgpICYmIG9sZFNob3VsZFNob3dQb3N0ZXJJbWFnZSAhPSBtX3Nob3VsZFNob3dQ
b3N0ZXJJbWFnZSkgewotICAgICAgICBkZXRhY2goKTsKLSAgICAgICAgYXR0YWNoKCk7Ci0gICAg
fQorICAgIGlmIChyZW5kZXJlcigpICYmIG9sZFNob3VsZFNob3dQb3N0ZXJJbWFnZSAhPSBtX3No
b3VsZERpc3BsYXlQb3N0ZXIpCisgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50
KCk7CiAjZW5kaWYKIH0KIApAQCAtMjI2LDUgKzIxOSwxMyBAQCB2b2lkIEhUTUxWaWRlb0VsZW1l
bnQ6OnBhaW50Q3VycmVudEZyYW1lCiAgICAgcGxheWVyLT5wYWludEN1cnJlbnRGcmFtZUluQ29u
dGV4dChjb250ZXh0LCBkZXN0UmVjdCk7CiB9CiAKK2Jvb2wgSFRNTFZpZGVvRWxlbWVudDo6aGFz
QXZhaWxhYmxlVmlkZW9GcmFtZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BsYXllcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBtX3BsYXllci0+aGFzQXZhaWxhYmxl
VmlkZW9GcmFtZSgpOworfQorCiB9CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVmlk
ZW9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQu
aAkocmV2aXNpb24gNTMwMzgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNz
IEhUTUxJbWFnZUxvYWRlcjsKIGNsYXNzIEhUTUxWaWRlb0VsZW1lbnQgOiBwdWJsaWMgSFRNTE1l
ZGlhRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgSFRNTFZpZGVvRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKLSAgICAKKwogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5
KCkgY29uc3QgeyByZXR1cm4gNTsgfQogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVk
KFJlbmRlclN0eWxlKik7CiAjaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQpAQCAt
NjEsMTggKzYxLDIyIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCB2aWRlb1dpZHRoKCkgY29uc3Q7
CiAgICAgdW5zaWduZWQgdmlkZW9IZWlnaHQoKSBjb25zdDsKICAgICAKLSAgICBLVVJMIHBvc3Rl
cigpIGNvbnN0OworICAgIGNvbnN0IEtVUkwmIHBvc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fcG9z
dGVyVVJMOyB9CiAgICAgdm9pZCBzZXRQb3N0ZXIoY29uc3QgU3RyaW5nJik7CiAKICAgICB2b2lk
IHVwZGF0ZVBvc3RlckltYWdlKCk7CisgICAgYm9vbCBzaG91bGREaXNwbGF5UG9zdGVyKCkgY29u
c3QgeyByZXR1cm4gbV9zaG91bGREaXNwbGF5UG9zdGVyOyB9CiAKICAgICB2b2lkIHBhaW50KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKICAgICAvLyBVc2VkIGJ5IGNhbnZhcyB0
byBnYWluIHJhdyBwaXhlbCBhY2Nlc3MKICAgICB2b2lkIHBhaW50Q3VycmVudEZyYW1lSW5Db250
ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKIAogcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIGJvb2wgaGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpIGNvbnN0OworCiAgICAgT3duUHRy
PEhUTUxJbWFnZUxvYWRlcj4gbV9pbWFnZUxvYWRlcjsKLSAgICBib29sIG1fc2hvdWxkU2hvd1Bv
c3RlckltYWdlOworICAgIEtVUkwgbV9wb3N0ZXJVUkw7CisgICAgYm9vbCBtX3Nob3VsZERpc3Bs
YXlQb3N0ZXI7CiB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9JbWFn
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3Bw
CShyZXZpc2lvbiA1MzAzOCkKKysrIFdlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xODYsNyArMTg2LDcgQEAg
dm9pZCBJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUgogdm9pZCBJbWFnZUxvYWRl
cjo6dXBkYXRlUmVuZGVyZXIoKQogewogICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
bV9lbGVtZW50LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIGlmICghcmVuZGVyZXItPmlzSW1hZ2Uo
KSkKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNJbWFnZSgpICYmICFyZW5kZXJlci0+aXNWaWRl
bygpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBSZW5kZXJJbWFnZSogaW1hZ2VSZW5k
ZXJlciA9IHRvUmVuZGVySW1hZ2UocmVuZGVyZXIpOwogICAgICAgICAKSW5kZXg6IFdlYkNvcmUv
bWFudWFsLXRlc3RzL3ZpZGVvLXBsYXllci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbWFu
dWFsLXRlc3RzL3ZpZGVvLXBsYXllci5odG1sCShyZXZpc2lvbiA1MzAzOCkKKysrIFdlYkNvcmUv
bWFudWFsLXRlc3RzL3ZpZGVvLXBsYXllci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCAr
MzcsNyBAQCBmdW5jdGlvbiBzdG9wcGVkUGxheWluZygpIHsKIGZ1bmN0aW9uIHVwZGF0ZVByb2dy
ZXNzKGV2KSB7CiAgICAgaWYgKCFzaG93UHJvZ3Jlc3MpCiAgICAgICAgcmV0dXJuOwotICAgIGlm
IChldi50b3RhbCkKLSAgICAgICAgcGxheUJ1dHRvbi5pbm5lckhUTUwgPSAiTG9hZGluZyAiICsg
KDEwMCpldi5sb2FkZWQvZXYudG90YWwpLnRvRml4ZWQoMCkgKyAiJSI7Ci0gICAgZWxzZQotICAg
ICAgICBwbGF5QnV0dG9uLmlubmVySFRNTCA9ICJMb2FkaW5nLi4uIjsKKyAgICBwbGF5QnV0dG9u
LmlubmVySFRNTCA9ICJMb2FkaW5nLi4uIjsKICAgICBwbGF5QnV0dG9uLmNsYXNzTmFtZSA9ICJ2
aWRlb2J1dHRvbiB2aWRlb2xvYWRpbmciOwogfQogZnVuY3Rpb24gaW5pdFZpZGVvKCkgewpAQCAt
OTAsMTIgKzg3LDggQEAgZnVuY3Rpb24gaW5pdFZpZGVvKCkgewogICAgIHBsYXlCdXR0b24uYWRk
RXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgIGlmICh2aWRlb0Vs
ZW0ucGF1c2VkKSB7CiAgICAgICAgICAgICBpZiAoIXZpZGVvRWxlbS5zcmMpCi0gICAgICAgICAg
ICAgICAgLy92aWRlb0VsZW0uc3JjID0gInNhbXBsZS5tb3YiOwogICAgICAgICAgICAgICAgIHZp
ZGVvRWxlbS5zcmMgPSAiaHR0cDovL21vdmllcy5hcHBsZS5jb20vbW92aWVzL3VzL2FwcGxlL2lw
b2RpdHVuZXMvMjAwNy90b3VjaC9hZHMvYXBwbGVfaXBvZHRvdWNoX3RvdWNoX3I2NDAtOWNpZS5t
b3YiOwotICAgICAgICAgICAgaWYgKHZpZGVvRWxlbS5yZWFkeVN0YXRlID09IEhUTUxNZWRpYUVs
ZW1lbnQuREFUQV9VTkFWQUlMQUJMRSkKLSAgICAgICAgICAgICAgICB2aWRlb0VsZW0ubG9hZCgp
OwotICAgICAgICAgICAgaWYgKHZpZGVvRWxlbS5yZWFkeVN0YXRlID09IEhUTUxNZWRpYUVsZW1l
bnQuQ0FOX1BMQVlfVEhST1VHSCkKLSAgICAgICAgICAgICAgICB2aWRlb0VsZW0ucGxheSgpOwor
ICAgICAgICAgICAgdmlkZW9FbGVtLnBsYXkoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICB2aWRlb0VsZW0ucGF1c2UoKTsKICAgICB9ICk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyLmNwcAkocmV2aXNpb24gNTMwMzgpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjU5LDYgKzI1OSwxMSBAQCB2b2lkIE1lZGlhUGxheWVyOjpsb2FkKGNvbnN0
IFN0cmluZyYgdXJsCiAgICAgICAgIG1fcHJpdmF0ZS5zZXQoY3JlYXRlTnVsbE1lZGlhUGxheWVy
KHRoaXMpKTsKIH0gICAgCiAKK2Jvb2wgTWVkaWFQbGF5ZXI6Omhhc0F2YWlsYWJsZVZpZGVvRnJh
bWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmhhc0F2YWlsYWJsZVZpZGVvRnJh
bWUoKTsKK30KKyAgICAKIGJvb2wgTWVkaWFQbGF5ZXI6OmNhbkxvYWRQb3N0ZXIoKSBjb25zdAog
ewogICAgIHJldHVybiBtX3ByaXZhdGUtPmNhbkxvYWRQb3N0ZXIoKTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHJldmlzaW9uIDUzMDM4KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yMTMsNiArMjEzLDggQEAgcHVibGljOgogCiAgICAgTWVkaWFQbGF5
ZXJDbGllbnQqIG1lZGlhUGxheWVyQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVBsYXll
ckNsaWVudDsgfQogCisgICAgYm9vbCBoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkgY29uc3Q7CisK
ICAgICBib29sIGNhbkxvYWRQb3N0ZXIoKSBjb25zdDsKICAgICB2b2lkIHNldFBvc3Rlcihjb25z
dCBTdHJpbmcmKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
clByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyUHJpdmF0ZS5oCShyZXZpc2lvbiA1MzAzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk5LDYgKzk5LDggQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldEF1dG9idWZmZXIoYm9vbCkgeyB9OwogCisg
ICAgdmlydHVhbCBib29sIGhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoKSBjb25zdCB7IHJldHVybiBy
ZWFkeVN0YXRlKCkgPj0gTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YTsgfQorCiAgICAgdmly
dHVhbCBib29sIGNhbkxvYWRQb3N0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgdm9pZCBzZXRQb3N0ZXIoY29uc3QgU3RyaW5nJikgeyB9CiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQuaAkocmV2aXNpb24gNTMwMzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9N
ZWRpYVBsYXllclByaXZhdGVRVEtpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMjAsNiArMTIwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFZpc2libGUoYm9v
bCk7CiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKTsKICAgICAKKyAgICB2aXJ0dWFs
IGJvb2wgaGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpIGNvbnN0OworCiAgICAgdm9pZCBwYWludChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdm9pZCBwYWludEN1cnJlbnRG
cmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CiAKQEAgLTE3
NiwxOCArMTc4LDE5IEBAIHByaXZhdGU6CiAgICAgVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiBt
X3NlZWtUaW1lcjsKICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRl
OwogICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKLSAgICBib29sIG1f
c3RhcnRlZFBsYXlpbmc7Ci0gICAgYm9vbCBtX2lzU3RyZWFtaW5nOwotICAgIGJvb2wgbV92aXNp
YmxlOwogICAgIEludFJlY3QgbV9yZWN0OwogICAgIEZsb2F0U2l6ZSBtX3NjYWxlRmFjdG9yOwog
ICAgIHVuc2lnbmVkIG1fZW5hYmxlZFRyYWNrQ291bnQ7CiAgICAgdW5zaWduZWQgbV90b3RhbFRy
YWNrQ291bnQ7Ci0gICAgYm9vbCBtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzOwogICAgIGZsb2F0IG1f
cmVwb3J0ZWREdXJhdGlvbjsKICAgICBmbG9hdCBtX2NhY2hlZER1cmF0aW9uOwogICAgIGZsb2F0
IG1fdGltZVRvUmVzdG9yZTsKICAgICBSZXRhaW5QdHI8UVRNb3ZpZUxheWVyPiBtX3F0VmlkZW9M
YXllcjsKKyAgICBib29sIG1fc3RhcnRlZFBsYXlpbmc7CisgICAgYm9vbCBtX2lzU3RyZWFtaW5n
OworICAgIGJvb2wgbV92aXNpYmxlOworICAgIGJvb2wgbV9oYXNVbnN1cHBvcnRlZFRyYWNrczsK
KyAgICBib29sIG1fdmlkZW9GcmFtZUhhc0RyYXduOwogI2lmIERSQVdfRlJBTUVfUkFURQogICAg
IGludCAgbV9mcmFtZUNvdW50V2hpbGVQbGF5aW5nOwogICAgIGRvdWJsZSBtX3RpbWVTdGFydGVk
UGxheWluZzsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCShyZXZpc2lvbiA1MzAzOCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDQsMTcgKzIwNCwxOCBAQCBNZWRp
YVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShNCiAgICAgLCBtX3NlZWtUaW1lcih0
aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVrVGltZXJGaXJlZCkKICAgICAsIG1fbmV0d29y
a1N0YXRlKE1lZGlhUGxheWVyOjpFbXB0eSkKICAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXll
cjo6SGF2ZU5vdGhpbmcpCi0gICAgLCBtX3N0YXJ0ZWRQbGF5aW5nKGZhbHNlKQotICAgICwgbV9p
c1N0cmVhbWluZyhmYWxzZSkKLSAgICAsIG1fdmlzaWJsZShmYWxzZSkKICAgICAsIG1fcmVjdCgp
CiAgICAgLCBtX3NjYWxlRmFjdG9yKDEsIDEpCiAgICAgLCBtX2VuYWJsZWRUcmFja0NvdW50KDAp
CiAgICAgLCBtX3RvdGFsVHJhY2tDb3VudCgwKQorICAgICwgbV9yZXBvcnRlZER1cmF0aW9uKC0x
KQorICAgICwgbV9jYWNoZWREdXJhdGlvbigtMSkKKyAgICAsIG1fdGltZVRvUmVzdG9yZSgtMSkK
KyAgICAsIG1fc3RhcnRlZFBsYXlpbmcoZmFsc2UpCisgICAgLCBtX2lzU3RyZWFtaW5nKGZhbHNl
KQorICAgICwgbV92aXNpYmxlKGZhbHNlKQogICAgICwgbV9oYXNVbnN1cHBvcnRlZFRyYWNrcyhm
YWxzZSkKLSAgICAsIG1fcmVwb3J0ZWREdXJhdGlvbigtMS4wZikKLSAgICAsIG1fY2FjaGVkRHVy
YXRpb24oLTEuMGYpCi0gICAgLCBtX3RpbWVUb1Jlc3RvcmUoLTEuMGYpCisgICAgLCBtX3ZpZGVv
RnJhbWVIYXNEcmF3bihmYWxzZSkKICNpZiBEUkFXX0ZSQU1FX1JBVEUKICAgICAsIG1fZnJhbWVD
b3VudFdoaWxlUGxheWluZygwKQogICAgICwgbV90aW1lU3RhcnRlZFBsYXlpbmcoMCkKQEAgLTU1
Niw2ICs1NTcsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChjb25zdCBTdHJpCiAg
ICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwogICAgIH0KICAgICBjYW5jZWxT
ZWVrKCk7CisgICAgbV92aWRlb0ZyYW1lSGFzRHJhd24gPSBmYWxzZTsKICAgICAKICAgICBbbV9v
YmpjT2JzZXJ2ZXIuZ2V0KCkgc2V0RGVsYXlDYWxsYmFja3M6WUVTXTsKIApAQCAtMTA4Niw2ICsx
MDg4LDIwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWaXNpYmxlKGJvb2wKICAgICB9
CiB9CiAKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkg
Y29uc3QKK3sKKyAgICAvLyBXaGVuIHVzaW5nIGEgUVRNb3ZpZUxheWVyIHJldHVybiB0cnVlIGFz
IHNvb24gYXMgdGhlIG1vdmllIHJlYWNoZXMgUVRNb3ZpZUxvYWRTdGF0ZVBsYXlhYmxlIAorICAg
IC8vIGJlY2F1c2UgYWx0aG91Z2ggd2UgZG9uJ3QgKmtub3cqIHdoZW4gdGhlIGZpcnN0IGZyYW1l
IGhhcyBkZWNvZGVkLCBieSB0aGUgdGltZSB3ZSBnZXQgYW5kIAorICAgIC8vIHByb2Nlc3MgdGhl
IG5vdGlmaWNhaXRvbiBhIGZyYW1lIHNob3VsZCBoYXZlIHByb3BhZ2F0ZWQgdGhlIFZpc3VhbENv
bnRleHQgYW5kIGJlZW4gc2V0IG9uCisgICAgLy8gdGhlIGxheWVyLgorICAgIGlmIChjdXJyZW50
UmVuZGVyaW5nTW9kZSgpID09IE1lZGlhUmVuZGVyaW5nTW92aWVMYXllcikKKyAgICAgICAgcmV0
dXJuIG1fcmVhZHlTdGF0ZSA+PSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOworCisgICAg
Ly8gV2hlbiB1c2luZyB0aGUgc29mdHdhcmUgcmVuZGVyZXIgUXVpY2tUaW1lIHNpZ25hbHMgdGhh
dCBhIGZyYW1lIGlzIGF2YWlsYWJsZSBzbyB3ZSBtaWdodCBhcyB3ZWxsCisgICAgLy8gd2FpdCB1
bnRpbCB3ZSBrbm93IHRoYXQgYSBmcmFtZSBoYXMgYmVlbiBkcmF3bi4KKyAgICByZXR1cm4gbV92
aWRlb0ZyYW1lSGFzRHJhd247Cit9CisKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZXBhaW50
KCkKIHsKICAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKQEAgLTExMDAsNiArMTExNiw3
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZXBhaW50KCkKICAgICAgICAgICAgIG1fdGlt
ZVN0YXJ0ZWRQbGF5aW5nID0gW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVd
OwogICAgIH0KICNlbmRpZgorICAgIG1fdmlkZW9GcmFtZUhhc0RyYXduID0gdHJ1ZTsKICAgICBt
X3BsYXllci0+cmVwYWludCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
CShyZXZpc2lvbiA1MzAzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJr
IE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGxhbiBT
YW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDYg
U2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5LCAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtNDIwLDExICs0MjAsMjUgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWlu
dEluZgogI2VuZGlmCiAKICAgICAgICAgSW50U2l6ZSBjb250ZW50U2l6ZShjV2lkdGgsIGNIZWln
aHQpOwotICAgICAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsaW5nID0gUmVuZGVySW1hZ2VTY2Fs
ZU9ic2VydmVyOjpzaG91bGRJbWFnZVBhaW50QXRMb3dRdWFsaXR5KHRoaXMsIGNvbnRlbnRTaXpl
KTsKICAgICAgICAgSW50UmVjdCByZWN0KEludFBvaW50KHR4ICsgbGVmdEJvcmRlciArIGxlZnRQ
YWQsIHR5ICsgdG9wQm9yZGVyICsgdG9wUGFkKSwgY29udGVudFNpemUpOworICAgICAgICBwYWlu
dChjb250ZXh0LCByZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVySW1hZ2U6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAo
KGRvY3VtZW50KCktPnByaW50aW5nKCkgJiYgIXZpZXcoKS0+cHJpbnRJbWFnZXMoKSkgfHwgIWhh
c0ltYWdlKCkgfHwgZXJyb3JPY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
aGFzSW1hZ2UoKSAmJiByZWN0LndpZHRoKCkgPiAwICYmIHJlY3QuaGVpZ2h0KCkgPiAwKSB7Cisg
ICAgICAgIEltYWdlKiBpbWcgPSBpbWFnZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwor
ICAgICAgICBpZiAoIWltZyB8fCBpbWctPmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuOwor
CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWx0ID0gKG5vZGUoKSAmJiBub2RlKCkt
Pmhhc1RhZ05hbWUoaW1nVGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4obm9k
ZSgpKSA6IDA7CiAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yID0g
aW1hZ2VFbHQgPyBpbWFnZUVsdC0+Y29tcG9zaXRlT3BlcmF0b3IoKSA6IENvbXBvc2l0ZVNvdXJj
ZU92ZXI7Ci0gICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZShjV2lkdGgsIGNIZWlnaHQp
LCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIHJlY3QsIGNvbXBvc2l0ZU9wZXJhdG9yLCB1c2VMb3dR
dWFsaXR5U2NhbGluZyk7CisgICAgICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxpbmcgPSBSZW5k
ZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OnNob3VsZEltYWdlUGFpbnRBdExvd1F1YWxpdHkodGhpcywg
cmVjdC5zaXplKCkpOworICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UocmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCByZWN0LCBjb21wb3Np
dGVPcGVyYXRvciwgdXNlTG93UXVhbGl0eVNjYWxpbmcpOwogICAgIH0KIH0KIApJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5oCShyZXZpc2lvbiA1MzAzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDIwMDYgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKSAKICAq
ICAgICAgICAgICAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC01Nyw2ICs1NywxMSBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFs
IHZvaWQgaW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCogPSAwKTsK
IAorICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0
Jik7CisKKyAgICBib29sIGlzV2lkdGhTcGVjaWZpZWQoKSBjb25zdDsKKyAgICBib29sIGlzSGVp
Z2h0U3BlY2lmaWVkKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckltYWdlIjsgfQogCkBAIC04Nyw5
ICs5Miw2IEBAIHByaXZhdGU6CiAgICAgaW50IGNhbGNBc3BlY3RSYXRpb1dpZHRoKCkgY29uc3Q7
CiAgICAgaW50IGNhbGNBc3BlY3RSYXRpb0hlaWdodCgpIGNvbnN0OwogCi0gICAgYm9vbCBpc1dp
ZHRoU3BlY2lmaWVkKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0hlaWdodFNwZWNpZmllZCgpIGNvbnN0
OwotCiBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhlIGltYWdlIHdlIGFyZSByZW5kZXJpbmcuCiAgICAg
Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkSW1hZ2U+IG1fY2FjaGVkSW1hZ2U7CkBAIC0xMDUs
NyArMTA3LDcgQEAgcHJpdmF0ZToKIAogaW5saW5lIFJlbmRlckltYWdlKiB0b1JlbmRlckltYWdl
KFJlbmRlck9iamVjdCogb2JqZWN0KQogeyAKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3Qt
PmlzUmVuZGVySW1hZ2UoKSk7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1JlbmRl
ckltYWdlKCkgfHwgb2JqZWN0LT5pc1ZpZGVvKCkpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxS
ZW5kZXJJbWFnZSo+KG9iamVjdCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lZGlhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5j
cHAJKHJldmlzaW9uIDUzMDM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw3IEBAIHN0
YXRpYyBjb25zdCBkb3VibGUgY09wYWNpdHlBbmltYXRpb25EdXIKIHN0YXRpYyBjb25zdCBkb3Vi
bGUgY09wYWNpdHlBbmltYXRpb25EdXJhdGlvbkZhZGVPdXQgPSAwLjM7CiAKIFJlbmRlck1lZGlh
OjpSZW5kZXJNZWRpYShIVE1MTWVkaWFFbGVtZW50KiB2aWRlbykKLSAgICA6IFJlbmRlclJlcGxh
Y2VkKHZpZGVvKQorICAgIDogUmVuZGVySW1hZ2UodmlkZW8pCiAgICAgLCBtX3RpbWVVcGRhdGVU
aW1lcih0aGlzLCAmUmVuZGVyTWVkaWE6OnRpbWVVcGRhdGVUaW1lckZpcmVkKQogICAgICwgbV9v
cGFjaXR5QW5pbWF0aW9uVGltZXIodGhpcywgJlJlbmRlck1lZGlhOjpvcGFjaXR5QW5pbWF0aW9u
VGltZXJGaXJlZCkKICAgICAsIG1fbW91c2VPdmVyKGZhbHNlKQpAQCAtNjIsNyArNjIsNyBAQCBS
ZW5kZXJNZWRpYTo6UmVuZGVyTWVkaWEoSFRNTE1lZGlhRWxlbWVuCiB9CiAKIFJlbmRlck1lZGlh
OjpSZW5kZXJNZWRpYShIVE1MTWVkaWFFbGVtZW50KiB2aWRlbywgY29uc3QgSW50U2l6ZSYgaW50
cmluc2ljU2l6ZSkKLSAgICA6IFJlbmRlclJlcGxhY2VkKHZpZGVvLCBpbnRyaW5zaWNTaXplKQor
ICAgIDogUmVuZGVySW1hZ2UodmlkZW8pCiAgICAgLCBtX3RpbWVVcGRhdGVUaW1lcih0aGlzLCAm
UmVuZGVyTWVkaWE6OnRpbWVVcGRhdGVUaW1lckZpcmVkKQogICAgICwgbV9vcGFjaXR5QW5pbWF0
aW9uVGltZXIodGhpcywgJlJlbmRlck1lZGlhOjpvcGFjaXR5QW5pbWF0aW9uVGltZXJGaXJlZCkK
ICAgICAsIG1fbW91c2VPdmVyKGZhbHNlKQpAQCAtNzEsNiArNzEsNyBAQCBSZW5kZXJNZWRpYTo6
UmVuZGVyTWVkaWEoSFRNTE1lZGlhRWxlbWVuCiAgICAgLCBtX29wYWNpdHlBbmltYXRpb25Gcm9t
KDApCiAgICAgLCBtX29wYWNpdHlBbmltYXRpb25UbygxLjBmKQogeworICAgIHNldEludHJpbnNp
Y1NpemUoaW50cmluc2ljU2l6ZSk7CiB9CiAKIFJlbmRlck1lZGlhOjp+UmVuZGVyTWVkaWEoKQpA
QCAtODksNyArOTAsNyBAQCB2b2lkIFJlbmRlck1lZGlhOjpkZXN0cm95KCkKICAgICAgICAgbV9j
b250cm9sc1NoYWRvd1Jvb3QtPmRldGFjaCgpOwogICAgICAgICBtX2NvbnRyb2xzU2hhZG93Um9v
dCA9IDA7CiAgICAgfQotICAgIFJlbmRlclJlcGxhY2VkOjpkZXN0cm95KCk7CisgICAgUmVuZGVy
SW1hZ2U6OmRlc3Ryb3koKTsKIH0KIAogSFRNTE1lZGlhRWxlbWVudCogUmVuZGVyTWVkaWE6Om1l
ZGlhRWxlbWVudCgpIGNvbnN0CkBAIC0xMDQsNyArMTA1LDcgQEAgTWVkaWFQbGF5ZXIqIFJlbmRl
ck1lZGlhOjpwbGF5ZXIoKSBjb25zdAogCiB2b2lkIFJlbmRlck1lZGlhOjpzdHlsZURpZENoYW5n
ZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewot
ICAgIFJlbmRlclJlcGxhY2VkOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CisgICAg
UmVuZGVySW1hZ2U6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKIAogICAgIGlmICht
X2NvbnRyb2xzU2hhZG93Um9vdCkgewogICAgICAgICBpZiAobV9wYW5lbCkKQEAgLTE0Niw3ICsx
NDcsNyBAQCB2b2lkIFJlbmRlck1lZGlhOjpsYXlvdXQoKQogewogICAgIEludFNpemUgb2xkU2l6
ZSA9IGNvbnRlbnRCb3hSZWN0KCkuc2l6ZSgpOwogCi0gICAgUmVuZGVyUmVwbGFjZWQ6OmxheW91
dCgpOworICAgIFJlbmRlckltYWdlOjpsYXlvdXQoKTsKIAogICAgIFJlbmRlckJveCogY29udHJv
bHNSZW5kZXJlciA9IG1fY29udHJvbHNTaGFkb3dSb290ID8gbV9jb250cm9sc1NoYWRvd1Jvb3Qt
PnJlbmRlckJveCgpIDogMDsKICAgICBpZiAoIWNvbnRyb2xzUmVuZGVyZXIpCkBAIC01NzMsNyAr
NTc0LDcgQEAgdm9pZCBSZW5kZXJNZWRpYTo6Zm9yd2FyZEV2ZW50KEV2ZW50KiBldgogCiBpbnQg
UmVuZGVyTWVkaWE6Omxvd2VzdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3Is
IGJvb2wgaW5jbHVkZVNlbGYpIGNvbnN0CiB7Ci0gICAgaW50IGJvdHRvbSA9IFJlbmRlclJlcGxh
Y2VkOjpsb3dlc3RQb3NpdGlvbihpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgaW5jbHVkZVNlbGYp
OworICAgIGludCBib3R0b20gPSBSZW5kZXJJbWFnZTo6bG93ZXN0UG9zaXRpb24oaW5jbHVkZU92
ZXJmbG93SW50ZXJpb3IsIGluY2x1ZGVTZWxmKTsKICAgICBpZiAoIW1fY29udHJvbHNTaGFkb3dS
b290IHx8ICFtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJu
IGJvdHRvbTsKICAgICAKQEAgLTU4Miw3ICs1ODMsNyBAQCBpbnQgUmVuZGVyTWVkaWE6Omxvd2Vz
dFBvc2l0aW9uKGJvb2wgaW5jCiAKIGludCBSZW5kZXJNZWRpYTo6cmlnaHRtb3N0UG9zaXRpb24o
Ym9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgYm9vbCBpbmNsdWRlU2VsZikgY29uc3QKIHsK
LSAgICBpbnQgcmlnaHQgPSBSZW5kZXJSZXBsYWNlZDo6cmlnaHRtb3N0UG9zaXRpb24oaW5jbHVk
ZU92ZXJmbG93SW50ZXJpb3IsIGluY2x1ZGVTZWxmKTsKKyAgICBpbnQgcmlnaHQgPSBSZW5kZXJJ
bWFnZTo6cmlnaHRtb3N0UG9zaXRpb24oaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IsIGluY2x1ZGVT
ZWxmKTsKICAgICBpZiAoIW1fY29udHJvbHNTaGFkb3dSb290IHx8ICFtX2NvbnRyb2xzU2hhZG93
Um9vdC0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIHJpZ2h0OwogICAgIApAQCAtNTkxLDcg
KzU5Miw3IEBAIGludCBSZW5kZXJNZWRpYTo6cmlnaHRtb3N0UG9zaXRpb24oYm9vbCAKIAogaW50
IFJlbmRlck1lZGlhOjpsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJp
b3IsIGJvb2wgaW5jbHVkZVNlbGYpIGNvbnN0CiB7Ci0gICAgaW50IGxlZnQgPSBSZW5kZXJSZXBs
YWNlZDo6bGVmdG1vc3RQb3NpdGlvbihpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgaW5jbHVkZVNl
bGYpOworICAgIGludCBsZWZ0ID0gUmVuZGVySW1hZ2U6OmxlZnRtb3N0UG9zaXRpb24oaW5jbHVk
ZU92ZXJmbG93SW50ZXJpb3IsIGluY2x1ZGVTZWxmKTsKICAgICBpZiAoIW1fY29udHJvbHNTaGFk
b3dSb290IHx8ICFtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0
dXJuIGxlZnQ7CiAgICAgCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmgJKHJldmlzaW9uIDUz
MDM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFZJREVP
KQogCi0jaW5jbHVkZSAiUmVuZGVyUmVwbGFjZWQuaCIKKyNpbmNsdWRlICJSZW5kZXJJbWFnZS5o
IgogI2luY2x1ZGUgIlRpbWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUxLDEyICs1
MSwxMiBAQCBjbGFzcyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFCiBjbGFzcyBN
ZWRpYUNvbnRyb2xFbGVtZW50OwogY2xhc3MgTWVkaWFQbGF5ZXI7CiAKLWNsYXNzIFJlbmRlck1l
ZGlhIDogcHVibGljIFJlbmRlclJlcGxhY2VkIHsKK2NsYXNzIFJlbmRlck1lZGlhIDogcHVibGlj
IFJlbmRlckltYWdlIHsKIHB1YmxpYzoKICAgICBSZW5kZXJNZWRpYShIVE1MTWVkaWFFbGVtZW50
Kik7CiAgICAgUmVuZGVyTWVkaWEoSFRNTE1lZGlhRWxlbWVudCosIGNvbnN0IEludFNpemUmIGlu
dHJpbnNpY1NpemUpOwogICAgIHZpcnR1YWwgflJlbmRlck1lZGlhKCk7Ci0gICAgCisKICAgICBj
b25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gJm1f
Y2hpbGRyZW47IH0KICAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgeyByZXR1
cm4gJm1fY2hpbGRyZW47IH0KIApAQCAtODMsNiArODMsNyBAQCBwcml2YXRlOgogICAgIAogICAg
IHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJN
ZWRpYSI7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAK
ICAgICB2aXJ0dWFsIGludCBsb3dlc3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVy
aW9yID0gdHJ1ZSwgYm9vbCBpbmNsdWRlU2VsZiA9IHRydWUpIGNvbnN0OwogICAgIHZpcnR1YWwg
aW50IHJpZ2h0bW9zdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IgPSB0cnVl
LCBib29sIGluY2x1ZGVTZWxmID0gdHJ1ZSkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWRlby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VmlkZW8uY3BwCShyZXZpc2lvbiA1MzAzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZGVvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Myw3ICs3MywxNSBAQCBSZW5k
ZXJWaWRlbzo6flJlbmRlclZpZGVvKCkKICAgICAgICAgcC0+c2V0RnJhbWVWaWV3KDApOwogICAg
IH0KIH0KLSAgICAKKwordm9pZCBSZW5kZXJWaWRlbzo6aW50cmluc2ljU2l6ZUNoYW5nZWQoKQor
eworICAgIGlmICh2aWRlb0VsZW1lbnQoKS0+c2hvdWxkRGlzcGxheVBvc3RlcigpKQorICAgICAg
ICBSZW5kZXJWaWRlbzo6aW50cmluc2ljU2l6ZUNoYW5nZWQoKTsKKyAgICB2aWRlb1NpemVDaGFu
Z2VkKCk7IAorfQorCisKIHZvaWQgUmVuZGVyVmlkZW86OnZpZGVvU2l6ZUNoYW5nZWQoKQogewog
ICAgIGlmICghcGxheWVyKCkpCkBAIC04Niw0MSArOTQsNjkgQEAgdm9pZCBSZW5kZXJWaWRlbzo6
dmlkZW9TaXplQ2hhbmdlZCgpCiAgICAgfQogfQogCi1JbnRSZWN0IFJlbmRlclZpZGVvOjp2aWRl
b0JveCgpIGNvbnN0IAordm9pZCBSZW5kZXJWaWRlbzo6aW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFn
ZVB0ciBuZXdJbWFnZSwgY29uc3QgSW50UmVjdCogcmVjdCkKIHsKKyAgICBSZW5kZXJJbWFnZTo6
aW1hZ2VDaGFuZ2VkKG5ld0ltYWdlLCByZWN0KTsKKworICAgIC8vIENhY2hlIHRoZSBpbWFnZSBp
bnRyaW5zaWMgc2l6ZSBzbyB3ZSBjYW4gY29udGludWUgdG8gdXNlIGl0IHRvIGRyYXcgdGhlIGlt
YWdlIGNvcnJlY3RseQorICAgIC8vIGV2ZW4gYWZ0ZXIgd2Uga25vdyB0aGUgdmlkZW8gaW50cmlz
aWMgc2l6ZSBidXQgYXJlbid0IGFibGUgdG8gZHJhdyB2aWRlbyBmcmFtZXMgeWV0CisgICAgLy8g
KHdlIGRvbid0IHdhbnQgdG8gc2NhbGUgdGhlIHBvc3RlciB0byB0aGUgdmlkZW8gc2l6ZSkuCisg
ICAgaWYgKHZpZGVvRWxlbWVudCgpLT5zaG91bGREaXNwbGF5UG9zdGVyKCkpCisgICAgICAgIG1f
Y2FjaGVkSW1hZ2VTaXplID0gaW50cmluc2ljU2l6ZSgpOworfQorCitJbnRSZWN0IFJlbmRlclZp
ZGVvOjp2aWRlb0JveCgpIGNvbnN0Cit7CisgICAgaWYgKG1fY2FjaGVkSW1hZ2VTaXplLmlzRW1w
dHkoKSAmJiB2aWRlb0VsZW1lbnQoKS0+c2hvdWxkRGlzcGxheVBvc3RlcigpKQorICAgICAgICBy
ZXR1cm4gSW50UmVjdCgpOworCisgICAgSW50U2l6ZSBlbGVtZW50U2l6ZTsKKyAgICBpZiAodmlk
ZW9FbGVtZW50KCktPnNob3VsZERpc3BsYXlQb3N0ZXIoKSkKKyAgICAgICAgZWxlbWVudFNpemUg
PSBtX2NhY2hlZEltYWdlU2l6ZTsKKyAgICBlbHNlCisgICAgICAgIGVsZW1lbnRTaXplID0gaW50
cmluc2ljU2l6ZSgpOworCiAgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IGNvbnRlbnRCb3hSZWN0
KCk7Ci0gICAgCi0gICAgaWYgKGludHJpbnNpY1NpemUoKS5pc0VtcHR5KCkgfHwgY29udGVudFJl
Y3QuaXNFbXB0eSgpKQorICAgIGlmIChlbGVtZW50U2l6ZS5pc0VtcHR5KCkgfHwgY29udGVudFJl
Y3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgSW50UmVjdCBy
ZXN1bHRSZWN0ID0gY29udGVudFJlY3Q7Ci0gICAgaW50IHJhdGlvID0gY29udGVudFJlY3Qud2lk
dGgoKSAqIGludHJpbnNpY1NpemUoKS5oZWlnaHQoKSAtIGNvbnRlbnRSZWN0LmhlaWdodCgpICog
aW50cmluc2ljU2l6ZSgpLndpZHRoKCk7CisgICAgSW50UmVjdCByZW5kZXJCb3ggPSBjb250ZW50
UmVjdDsKKyAgICBpbnQgcmF0aW8gPSByZW5kZXJCb3gud2lkdGgoKSAqIGVsZW1lbnRTaXplLmhl
aWdodCgpIC0gcmVuZGVyQm94LmhlaWdodCgpICogZWxlbWVudFNpemUud2lkdGgoKTsKICAgICBp
ZiAocmF0aW8gPiAwKSB7Ci0gICAgICAgIGludCBuZXdXaWR0aCA9IGNvbnRlbnRSZWN0LmhlaWdo
dCgpICogaW50cmluc2ljU2l6ZSgpLndpZHRoKCkgLyBpbnRyaW5zaWNTaXplKCkuaGVpZ2h0KCk7
CisgICAgICAgIGludCBuZXdXaWR0aCA9IHJlbmRlckJveC5oZWlnaHQoKSAqIGVsZW1lbnRTaXpl
LndpZHRoKCkgLyBlbGVtZW50U2l6ZS5oZWlnaHQoKTsKICAgICAgICAgLy8gSnVzdCBmaWxsIHRo
ZSB3aG9sZSBhcmVhIGlmIHRoZSBkaWZmZXJlbmNlIGlzIG9uZSBwaXhlbCBvciBsZXNzIChpbiBi
b3RoIHNpZGVzKQotICAgICAgICBpZiAocmVzdWx0UmVjdC53aWR0aCgpIC0gbmV3V2lkdGggPiAy
KQotICAgICAgICAgICAgcmVzdWx0UmVjdC5zZXRXaWR0aChuZXdXaWR0aCk7Ci0gICAgICAgIHJl
c3VsdFJlY3QubW92ZSgoY29udGVudFJlY3Qud2lkdGgoKSAtIHJlc3VsdFJlY3Qud2lkdGgoKSkg
LyAyLCAwKTsKKyAgICAgICAgaWYgKHJlbmRlckJveC53aWR0aCgpIC0gbmV3V2lkdGggPiAyKQor
ICAgICAgICAgICAgcmVuZGVyQm94LnNldFdpZHRoKG5ld1dpZHRoKTsKKyAgICAgICAgcmVuZGVy
Qm94Lm1vdmUoKGNvbnRlbnRSZWN0LndpZHRoKCkgLSByZW5kZXJCb3gud2lkdGgoKSkgLyAyLCAw
KTsKICAgICB9IGVsc2UgaWYgKHJhdGlvIDwgMCkgewotICAgICAgICBpbnQgbmV3SGVpZ2h0ID0g
Y29udGVudFJlY3Qud2lkdGgoKSAqIGludHJpbnNpY1NpemUoKS5oZWlnaHQoKSAvIGludHJpbnNp
Y1NpemUoKS53aWR0aCgpOwotICAgICAgICBpZiAocmVzdWx0UmVjdC5oZWlnaHQoKSAtIG5ld0hl
aWdodCA+IDIpCi0gICAgICAgICAgICByZXN1bHRSZWN0LnNldEhlaWdodChuZXdIZWlnaHQpOwot
ICAgICAgICByZXN1bHRSZWN0Lm1vdmUoMCwgKGNvbnRlbnRSZWN0LmhlaWdodCgpIC0gcmVzdWx0
UmVjdC5oZWlnaHQoKSkgLyAyKTsKKyAgICAgICAgaW50IG5ld0hlaWdodCA9IHJlbmRlckJveC53
aWR0aCgpICogZWxlbWVudFNpemUuaGVpZ2h0KCkgLyBlbGVtZW50U2l6ZS53aWR0aCgpOworICAg
ICAgICBpZiAocmVuZGVyQm94LmhlaWdodCgpIC0gbmV3SGVpZ2h0ID4gMikKKyAgICAgICAgICAg
IHJlbmRlckJveC5zZXRIZWlnaHQobmV3SGVpZ2h0KTsKKyAgICAgICAgcmVuZGVyQm94Lm1vdmUo
MCwgKGNvbnRlbnRSZWN0LmhlaWdodCgpIC0gcmVuZGVyQm94LmhlaWdodCgpKSAvIDIpOwogICAg
IH0KLSAgICByZXR1cm4gcmVzdWx0UmVjdDsKKworICAgIHJldHVybiByZW5kZXJCb3g7CiB9CiAg
ICAgCiB2b2lkIFJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBpbnQgdHgsIGludCB0eSkKIHsKICAgICBNZWRpYVBsYXllciogbWVkaWFQbGF5ZXIgPSBwbGF5
ZXIoKTsKLSAgICBpZiAoIW1lZGlhUGxheWVyKQotICAgICAgICByZXR1cm47Ci0gICAgdXBkYXRl
UGxheWVyKCk7CisgICAgYm9vbCBkaXNwbGF5aW5nUG9zdGVyID0gdmlkZW9FbGVtZW50KCktPnNo
b3VsZERpc3BsYXlQb3N0ZXIoKTsKKworICAgIGlmICghZGlzcGxheWluZ1Bvc3RlcikgeworICAg
ICAgICBpZiAoIW1lZGlhUGxheWVyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB1cGRh
dGVQbGF5ZXIoKTsKKyAgICB9CisKICAgICBJbnRSZWN0IHJlY3QgPSB2aWRlb0JveCgpOwogICAg
IGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHJlY3QubW92ZSh0eCwg
dHkpOwotICAgIG1lZGlhUGxheWVyLT5wYWludChwYWludEluZm8uY29udGV4dCwgcmVjdCk7Cisg
ICAgaWYgKGRpc3BsYXlpbmdQb3N0ZXIpCisgICAgICAgIHBhaW50KHBhaW50SW5mby5jb250ZXh0
LCByZWN0KTsKKyAgICBlbHNlCisgICAgICAgIG1lZGlhUGxheWVyLT5wYWludChwYWludEluZm8u
Y29udGV4dCwgcmVjdCk7CiB9CiAKIHZvaWQgUmVuZGVyVmlkZW86OmxheW91dCgpCkBAIC0xMjks
NiArMTY1LDEyIEBAIHZvaWQgUmVuZGVyVmlkZW86OmxheW91dCgpCiAgICAgdXBkYXRlUGxheWVy
KCk7CiB9CiAgICAgCitIVE1MVmlkZW9FbGVtZW50KiBSZW5kZXJWaWRlbzo6dmlkZW9FbGVtZW50
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobm9kZSgpLT5oYXNUYWdOYW1lKHZpZGVvVGFnKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxWaWRlb0VsZW1lbnQqPihub2RlKCkpOyAKK30KKwog
dm9pZCBSZW5kZXJWaWRlbzo6dXBkYXRlRnJvbUVsZW1lbnQoKQogewogICAgIFJlbmRlck1lZGlh
Ojp1cGRhdGVGcm9tRWxlbWVudCgpOwpAQCAtMTQwLDcgKzE4Miw3IEBAIHZvaWQgUmVuZGVyVmlk
ZW86OnVwZGF0ZVBsYXllcigpCiAgICAgTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyID0gcGxheWVy
KCk7CiAgICAgaWYgKCFtZWRpYVBsYXllcikKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghbWVk
aWFFbGVtZW50KCktPmluQWN0aXZlRG9jdW1lbnQoKSkgeworICAgIGlmICghdmlkZW9FbGVtZW50
KCktPmluQWN0aXZlRG9jdW1lbnQoKSkgewogICAgICAgICBtZWRpYVBsYXllci0+c2V0VmlzaWJs
ZShmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNTUsNDAgKzE5Nyw2IEBAIHZv
aWQgUmVuZGVyVmlkZW86OnVwZGF0ZVBsYXllcigpCiAgICAgbWVkaWFQbGF5ZXItPnNldFZpc2li
bGUodHJ1ZSk7CiB9CiAKLWJvb2wgUmVuZGVyVmlkZW86OmlzV2lkdGhTcGVjaWZpZWQoKSBjb25z
dAotewotICAgIHN3aXRjaCAoc3R5bGUoKS0+d2lkdGgoKS50eXBlKCkpIHsKLSAgICAgICAgY2Fz
ZSBGaXhlZDoKLSAgICAgICAgY2FzZSBQZXJjZW50OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGNhc2UgQXV0bzoKLSAgICAgICAgY2FzZSBSZWxhdGl2ZTogLy8gRklYTUU6IFNo
b3VsZG4ndCB0aGlzIGNhc2UgcmV0dXJuIHRydWU/IEl0IGRvZXNuJ3QgZm9yIGltYWdlcy4KLSAg
ICAgICAgY2FzZSBTdGF0aWM6Ci0gICAgICAgIGNhc2UgSW50cmluc2ljOgotICAgICAgICBjYXNl
IE1pbkludHJpbnNpYzoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgQVNT
RVJUKGZhbHNlKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVmlkZW86Omlz
SGVpZ2h0U3BlY2lmaWVkKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHN0eWxlKCktPmhlaWdodCgp
LnR5cGUoKSkgewotICAgICAgICBjYXNlIEZpeGVkOgotICAgICAgICBjYXNlIFBlcmNlbnQ6Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBBdXRvOgotICAgICAgICBjYXNl
IFJlbGF0aXZlOiAvLyBGSVhNRTogU2hvdWxkbid0IHRoaXMgY2FzZSByZXR1cm4gdHJ1ZT8gSXQg
ZG9lc24ndCBmb3IgaW1hZ2VzLgotICAgICAgICBjYXNlIFN0YXRpYzoKLSAgICAgICAgY2FzZSBJ
bnRyaW5zaWM6Ci0gICAgICAgIGNhc2UgTWluSW50cmluc2ljOgotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBBU1NFUlQoZmFsc2UpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQogaW50IFJlbmRlclZpZGVvOjpjYWxjUmVwbGFjZWRXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0
aCkgY29uc3QKIHsKICAgICBpbnQgd2lkdGg7CkBAIC0yMzUsMjQgKzI0Myw5IEBAIGludCBSZW5k
ZXJWaWRlbzo6Y2FsY0FzcGVjdFJhdGlvSGVpZ2h0KCkKICAgICByZXR1cm4gUmVuZGVyQm94Ojpj
YWxjUmVwbGFjZWRXaWR0aCgpICogaW50cmluc2ljSGVpZ2h0IC8gaW50cmluc2ljV2lkdGg7CiB9
CiAKLXZvaWQgUmVuZGVyVmlkZW86OmNhbGNQcmVmV2lkdGhzKCkKK2ludCBSZW5kZXJWaWRlbzo6
bWluaW11bVJlcGxhY2VkSGVpZ2h0KCkgY29uc3QgCiB7Ci0gICAgQVNTRVJUKHByZWZXaWR0aHNE
aXJ0eSgpKTsKLQotICAgIGludCBwYWRkaW5nQW5kQm9yZGVycyA9IHBhZGRpbmdMZWZ0KCkgKyBw
YWRkaW5nUmlnaHQoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCk7Ci0gICAgbV9tYXhQ
cmVmV2lkdGggPSBjYWxjUmVwbGFjZWRXaWR0aChmYWxzZSkgKyBwYWRkaW5nQW5kQm9yZGVyczsK
LQotICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5tYXhX
aWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKQotICAgICAgICBtX21heFByZWZXaWR0
aCA9IG1pbihtX21heFByZWZXaWR0aCwgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICsgKHN0
eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8gcGFkZGluZ0FuZEJvcmRlcnMgOiAw
KSk7Ci0KLSAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc1BlcmNlbnQoKSB8fCBzdHlsZSgpLT5o
ZWlnaHQoKS5pc1BlcmNlbnQoKSB8fCAKLSAgICAgICAgc3R5bGUoKS0+bWF4V2lkdGgoKS5pc1Bl
cmNlbnQoKSB8fCBzdHlsZSgpLT5tYXhIZWlnaHQoKS5pc1BlcmNlbnQoKSB8fAotICAgICAgICBz
dHlsZSgpLT5taW5XaWR0aCgpLmlzUGVyY2VudCgpIHx8IHN0eWxlKCktPm1pbkhlaWdodCgpLmlz
UGVyY2VudCgpKQotICAgICAgICBtX21pblByZWZXaWR0aCA9IDA7Ci0gICAgZWxzZQotICAgICAg
ICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoOwotCi0gICAgc2V0UHJlZldpZHRoc0Rp
cnR5KGZhbHNlKTsKKyAgICByZXR1cm4gMDsgCiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmgJKHJldmlzaW9uIDUzMDM4KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LCAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzMsNiArMzMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3MgSFRN
TE1lZGlhRWxlbWVudDsKK2NsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogY2xhc3MgR3JhcGhpY3NMYXllcjsKICNlbmRpZgpAQCAtNTMsOCAr
NTQsMTAgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9t
RWxlbWVudCgpOworICAgIGlubGluZSBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQoKSBj
b25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBpbnRyaW5zaWNTaXplQ2hhbmdlZCgpIHsgdmlkZW9T
aXplQ2hhbmdlZCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGludHJpbnNpY1NpemVDaGFuZ2VkKCk7
CisgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IElu
dFJlY3QqKTsKIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsg
cmV0dXJuICJSZW5kZXJWaWRlbyI7IH0KIApAQCAtNjcsMTYgKzcwLDE0IEBAIHByaXZhdGU6CiAK
ICAgICB2aXJ0dWFsIGludCBjYWxjUmVwbGFjZWRXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCA9
IHRydWUpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGNhbGNSZXBsYWNlZEhlaWdodCgpIGNvbnN0
OwotCi0gICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CisgICAgdmlydHVhbCBpbnQg
bWluaW11bVJlcGxhY2VkSGVpZ2h0KCkgY29uc3Q7CiAgICAgCiAgICAgaW50IGNhbGNBc3BlY3RS
YXRpb1dpZHRoKCkgY29uc3Q7CiAgICAgaW50IGNhbGNBc3BlY3RSYXRpb0hlaWdodCgpIGNvbnN0
OwogCi0gICAgYm9vbCBpc1dpZHRoU3BlY2lmaWVkKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0hlaWdo
dFNwZWNpZmllZCgpIGNvbnN0OwotICAgIAogICAgIHZvaWQgdXBkYXRlUGxheWVyKCk7CisKKyAg
ICBJbnRTaXplIG1fY2FjaGVkSW1hZ2VTaXplOwogfTsKIAogaW5saW5lIFJlbmRlclZpZGVvKiB0
b1JlbmRlclZpZGVvKFJlbmRlck9iamVjdCogb2JqZWN0KQpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTMw
NjQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NyBAQAorMjAxMC0wMS0xMCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICByZGFyOi8v
NTY4NDA2MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjMwOTQKKyAgICAgICAgRmxhc2ggb2Ygd2hpdGUgd2hlbiBzd2l0Y2hpbmcgZnJvbSBwb3N0ZXIg
aW1hZ2UgdG8gdmlkZW8gcGxheWJhY2sKKyAgICAgICAgCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzE0MAorICAgICAgICA8dmlkZW8+IHBvc3RlciBz
aG91bGQgc2NhbGUgbGlrZSBhIHZpZGVvIGZyYW1lCisKKyAgICAgICAgKiBtZWRpYS92aWRlby1w
b3N0ZXItZXhwZWN0ZWQudHh0OiBSZW1vdmUgYmxhbmsgbGluZSBhdCBiZWdpbm5pbmcgb2YgdGVz
dCByZXN1bHQgcHJlc2VudAorICAgICAgICBhcyBhIHNpZGUgZWZmZWN0IG9mIHRoZSBtZWRpYSBl
bGVtZW50IHVzaW5nIFJlbmRlckltYWdlIHRvIGRpc3BsYXkgdGhlIHBvc3Rlci4KKwogMjAxMC0w
MS0xMCAgRGFuaWVsIEJhdGVzICA8ZGJhdGVzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUnViYmVy
LXN0YW1wZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1w
b3N0ZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlhL3ZpZGVv
LXBvc3Rlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUzMDM4KQorKysgTGF5b3V0VGVzdHMvbWVk
aWEvdmlkZW8tcG9zdGVyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDMg
QEAKLQogRVhQRUNURUQgKHZpZGVvLmdldEF0dHJpYnV0ZSgncG9zdGVyJykgPT0gJ2NvbnRlbnQv
Z3JlZW5ib3gucG5nJykgT0sKIEVYUEVDVEVEIChyZWxhdGl2ZVVSTCh2aWRlby5wb3N0ZXIpID09
ICdjb250ZW50L2dyZWVuYm94LnBuZycpIE9LCiBFWFBFQ1RFRCAodmlkZW8uZ2V0QXR0cmlidXRl
KCdwb3N0ZXInKSA9PSAnY29udGVudC9hYmUucG5nJykgT0sK
</data>
<flag name="review"
          id="28496"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>