<?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>54969</bug_id>
          
          <creation_ts>2011-02-22 09:29:36 -0800</creation_ts>
          <short_desc>[Chromium] Implement WebKit methods to assist with Cocoa NSTextInput implementation</short_desc>
          <delta_ts>2011-04-26 16:45:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://code.google.com/p/chromium/issues/detail?id=17951</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>59558</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Robert Sesek">rsesek</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enrica</cc>
    
    <cc>fishd</cc>
    
    <cc>playmobil</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>suzhe</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>355342</commentid>
    <comment_count>0</comment_count>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-02-22 09:29:36 -0800</bug_when>
    <thetext>In order to enable the Mac OS X system dictionary popup, Chromium&apos;s WebKit API needs to support retrieving the necessary information used to implement the NSTextInput protocol (firstRectForRange, characterIndexForPoint, substringInRange). I have a patch to make these changes to the API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357988</commentid>
    <comment_count>1</comment_count>
      <attachid>83828</attachid>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-02-25 09:58:41 -0800</bug_when>
    <thetext>Created attachment 83828
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357989</commentid>
    <comment_count>2</comment_count>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-02-25 10:00:53 -0800</bug_when>
    <thetext>Darin, do you have time to review these changes to the Chromium WebKit API? If not, can you suggest a reviewer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357991</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-25 10:05:06 -0800</bug_when>
    <thetext>Attachment 83828 did not build on chromium:
Build output: http://queues.webkit.org/results/8043342</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359394</commentid>
    <comment_count>4</comment_count>
      <attachid>83828</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-02-28 15:07:20 -0800</bug_when>
    <thetext>Comment on attachment 83828
Patch

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

Pls fix EWS breakage and help to unduplicate.

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:2298
&gt; +// This function is copied from /WebKit2/WebPage/mac/WebPageMac.mm.

Sounds like this should just live in WebCore. There&apos;s nothing WebKitty here. Can you move and unduplicate?

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:2325
&gt; +bool WebFrameImpl::getLocationAndLengthFromRange(Range* range, unsigned&amp; location, unsigned&amp; length) const

Ditto.

&gt; Source/WebKit/chromium/src/mac/WebTextHelper.mm:74
&gt; +// This function is copied from /WebKit/mac/Misc/WebNSAttributedStringExtras.mm.

Can we just compile WebNSAttributedStringExtras.mm?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359915</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-01 08:49:08 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 83828 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=83828&amp;action=review
&gt; 
&gt; Pls fix EWS breakage and help to unduplicate.
&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:2298
&gt; &gt; +// This function is copied from /WebKit2/WebPage/mac/WebPageMac.mm.
&gt; 
&gt; Sounds like this should just live in WebCore. There&apos;s nothing WebKitty here. Can you move and unduplicate?

These could probably go to Source/WebCore/platform/text/mac?

Sam, Enrica do you guys have any opinions?

&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:2325
&gt; &gt; +bool WebFrameImpl::getLocationAndLengthFromRange(Range* range, unsigned&amp; location, unsigned&amp; length) const
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/chromium/src/mac/WebTextHelper.mm:74
&gt; &gt; +// This function is copied from /WebKit/mac/Misc/WebNSAttributedStringExtras.mm.
&gt; 
&gt; Can we just compile WebNSAttributedStringExtras.mm?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360103</commentid>
    <comment_count>6</comment_count>
      <attachid>83828</attachid>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-03-01 12:16:21 -0800</bug_when>
    <thetext>Comment on attachment 83828
Patch

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

&gt;&gt;&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:2298
&gt;&gt;&gt; +// This function is copied from /WebKit2/WebPage/mac/WebPageMac.mm.
&gt;&gt; 
&gt;&gt; Sounds like this should just live in WebCore. There&apos;s nothing WebKitty here. Can you move and unduplicate?
&gt; 
&gt; These could probably go to Source/WebCore/platform/text/mac?
&gt; 
&gt; Sam, Enrica do you guys have any opinions?

I&apos;ve moved this function to be Frame::rangeForPoint(), which fits well with documentAtPoint() and visiblePositionForPoint(). Other platforms may need this for their text input systems.

&gt;&gt;&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:2325

&gt;&gt; 
&gt;&gt; Ditto.
&gt; 
&gt; 

Moved this to Range::getLocationAndLength().

&gt;&gt; Source/WebKit/chromium/src/mac/WebTextHelper.mm:74
&gt;&gt; +// This function is copied from /WebKit/mac/Misc/WebNSAttributedStringExtras.mm.
&gt; 
&gt; Can we just compile WebNSAttributedStringExtras.mm?

We can&apos;t use it directly because WebKit/mac uses &lt;WebCore/x.h&gt; for #include and WebKit/chromium uses &quot;x.h&quot;. Could I move WebNSAttributedStringExtras.{h,mm} wholesale into WebCore/platform/text/mac?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371411</commentid>
    <comment_count>7</comment_count>
      <attachid>86464</attachid>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-03-22 09:19:53 -0700</bug_when>
    <thetext>Created attachment 86464
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371417</commentid>
    <comment_count>8</comment_count>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-03-22 09:23:43 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; We can&apos;t use it directly because WebKit/mac uses &lt;WebCore/x.h&gt; for #include and WebKit/chromium uses &quot;x.h&quot;. Could I move WebNSAttributedStringExtras.{h,mm} wholesale into WebCore/platform/text/mac?

It turns out this isn&apos;t that easy, either. The version of this function in WebKit/mac encodes images as &quot;attachments&quot; on the attributed string, but doing so relies on WebKit/mac&apos;s resource loading and cache implementation. In WebKit/chromium, we (1) don&apos;t need these attachments and (2) have a different resource loader. This function may have to remain forked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371422</commentid>
    <comment_count>9</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-03-22 09:32:01 -0700</bug_when>
    <thetext>Attachment 86464 did not build on qt:
Build output: http://queues.webkit.org/results/8221385</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371447</commentid>
    <comment_count>10</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-22 10:16:18 -0700</bug_when>
    <thetext>Attachment 86464 did not build on win:
Build output: http://queues.webkit.org/results/8224304</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371537</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-03-22 12:01:15 -0700</bug_when>
    <thetext>It seems very strange that implementing something that already exists in another port requires adding code to WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371545</commentid>
    <comment_count>12</comment_count>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-03-22 12:12:57 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; It seems very strange that implementing something that already exists in another port requires adding code to WebCore.

Dimitri suggested that I should push the shared code up into WebCore. It seems more strange to introduce hard dependencies between ports. Is there a specific method or function to which you are referring?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371562</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-03-22 12:36:44 -0700</bug_when>
    <thetext>I see that there was a little code removed from WebKit2, but nothing from WebKit/mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371666</commentid>
    <comment_count>14</comment_count>
      <attachid>86512</attachid>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-03-22 14:46:14 -0700</bug_when>
    <thetext>Created attachment 86512
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371669</commentid>
    <comment_count>15</comment_count>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-03-22 14:47:03 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I see that there was a little code removed from WebKit2, but nothing from WebKit/mac.

Thanks, I found some more code to de-dupe in WebKit/mac. The only remaining duplicated bits are from WebNSAttributedStringExtras.mm function, which I addressed in comment #8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372988</commentid>
    <comment_count>16</comment_count>
      <attachid>86512</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-24 12:25:06 -0700</bug_when>
    <thetext>Comment on attachment 86512
Patch

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

The gist looks great to me. You&apos;ve done well whittling down redudancies! I&apos;d like two peeps to take a look at this before landing: rniwa (ranges/editing stuff) and weinig (webkit2 stuff). r- to nit.

&gt; Source/WebCore/ChangeLog:16
&gt; +        * WebCore.exp.in:
&gt; +        * dom/Range.cpp:
&gt; +        (WebCore::Range::getLocationAndLength):
&gt; +        * dom/Range.h:
&gt; +        * page/Frame.cpp:
&gt; +        (WebCore::Frame::rangeForPoint):
&gt; +        * page/Frame.h:

This is sad and lonely. I&apos;d like it to be full of life and meaning.

&gt; Source/WebKit/chromium/ChangeLog:28
&gt; +        * WebKit.gyp:
&gt; +        * public/WebFrame.h:
&gt; +        * public/WebWidget.h:
&gt; +        * public/mac/WebTextHelper.h: Added.
&gt; +        * src/WebFrameImpl.cpp:
&gt; +        (WebKit::WebFrameImpl::firstRectForCharacterRange):
&gt; +        (WebKit::WebFrameImpl::characterIndexForPoint):
&gt; +        * src/WebFrameImpl.h:
&gt; +        * src/WebPopupMenuImpl.cpp:
&gt; +        (WebKit::WebPopupMenuImpl::compositionRange):
&gt; +        (WebKit::WebPopupMenuImpl::caretOrSelectionRange):
&gt; +        * src/WebPopupMenuImpl.h:
&gt; +        * src/WebViewImpl.cpp:
&gt; +        (WebKit::WebViewImpl::compositionRange):
&gt; +        (WebKit::WebViewImpl::caretOrSelectionRange):
&gt; +        * src/WebViewImpl.h:
&gt; +        * src/mac/WebTextHelper.mm: Added.
&gt; +        (WebKit::getWebFrameImpl):
&gt; +        (WebKit::rangeScope):
&gt; +        (WebKit::WebTextHelper::WebTextHelper):
&gt; +        (WebKit::WebTextHelper::substringInRange):

Ditto. At least explain what you&apos;re doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373097</commentid>
    <comment_count>17</comment_count>
      <attachid>86837</attachid>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-03-24 14:27:57 -0700</bug_when>
    <thetext>Created attachment 86837
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373119</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-03-24 14:53:42 -0700</bug_when>
    <thetext>Moving code down to WebCore is a good idea. It might be better to split chromium parts into a separate patch.

It seems strange to have code that knows about event handling in Range. For example, why Range::getLocationAndLength() knows anything about mouse events and TSM?! Also, this function asks TextIterator about length, but TextIterator works largely with render tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373694</commentid>
    <comment_count>19</comment_count>
      <attachid>86977</attachid>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-03-25 13:11:57 -0700</bug_when>
    <thetext>Created attachment 86977
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373696</commentid>
    <comment_count>20</comment_count>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-03-25 13:21:29 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Moving code down to WebCore is a good idea. It might be better to split chromium parts into a separate patch.

Ok. I&apos;ll split out the Chromium part when this review gets closer to completion. For now, while things are up in the air, it&apos;s easier for me to keep it in one patch/on a single git branch.

&gt; It seems strange to have code that knows about event handling in Range. For example, why Range::getLocationAndLength() knows anything about mouse events and TSM?! Also, this function asks TextIterator about length, but TextIterator works largely with render tree.

Since what the clients of this function really want is the location/length from TextIterator, I decided to move Range::getLocationAndLength() to be a static function TextIterator::locationAndLengthFromRange(), which complements TextIterator::rangeFromLocationAndLength().

The comment about TSM was from the WebKit2 implementation. What that bit of code is really doing is protecting against spanning across the DOMs from text fields/textareas and the actual document. I&apos;ve updated the comment to reflect that. Is this appropriate? If not, I would appreciate any advice on other potential solutions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377411</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-03-31 13:46:08 -0700</bug_when>
    <thetext>Sorry that reviewing this patch takes so long, I&apos;ll try to get to it soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378404</commentid>
    <comment_count>22</comment_count>
      <attachid>86977</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-02 11:23:32 -0700</bug_when>
    <thetext>Comment on attachment 86977
Patch

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

&gt; Source/WebKit/chromium/src/mac/WebTextHelper.mm:74
&gt; +// This function is copied from /WebKit/mac/Misc/WebNSAttributedStringExtras.mm.

It seems like we need to copy the copyright information from that file as well then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379309</commentid>
    <comment_count>23</comment_count>
      <attachid>86977</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-04-04 21:25:55 -0700</bug_when>
    <thetext>Comment on attachment 86977
Patch

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

&gt; Source/WebKit/chromium/public/mac/WebTextHelper.h:44
&gt; +class WebTextHelper {

nit: a more specific class name would be nice.

&gt; Source/WebKit/chromium/public/mac/WebTextHelper.h:46
&gt; +    explicit WebTextHelper(WebFrame*);

why bother instantiating this class?  why not just make substringInRange be
a static method that takes a WebFrame pointer?

&gt; Source/WebKit/chromium/public/mac/WebTextHelper.h:50
&gt; +    WebString substringInRange(size_t location, size_t length);

please remember to annotate entry points with WEBKIT_API.  even though it is
probably not strictly necessary for the OSX build, it is still nice to be
consistent with WEBKIT_API usage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379788</commentid>
    <comment_count>24</comment_count>
      <attachid>86977</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-05 12:03:42 -0700</bug_when>
    <thetext>Comment on attachment 86977
Patch

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

This will break Mac build, because the new functions need to be added to WebCore.base.exp.

Looks like a good improvement in cross platform code. r- for build breakage, and for many comments from the reviewers.

&gt; Source/WebKit/chromium/src/mac/WebTextHelper.mm:129
&gt; +    NSData* archivedData([NSArchiver archivedDataWithRootObject:string]);

I&apos;m not sure if using NSArchiver is a good idea. Are you archiving in renderer process, and unarchiving in main one? If the renderer is compromised, it could send anything (like an NSWindow) in the serialized data.

&gt; Source/WebKit/mac/WebView/WebFrame.mm:676
&gt; +    if (range &amp;&amp; TextIterator::locationAndLengthFromRange(range, location, length))
&gt; +        return NSMakeRange(location, length);
&gt; +    return NSMakeRange(NSNotFound, 0);

We generally prefer early return on error. It&apos;s more readable when the main code path is linear.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:164
&gt; +    size_t loc, len;

Please don&apos;t abbreviate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379789</commentid>
    <comment_count>25</comment_count>
      <attachid>86977</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-05 12:04:51 -0700</bug_when>
    <thetext>Comment on attachment 86977
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests. (OOPS!)

This need to be replaced with an explanation of why there are no tests. A re-commit hook won&apos;t let a patch with OOPS be landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379790</commentid>
    <comment_count>26</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-05 12:05:07 -0700</bug_when>
    <thetext>*pre-commit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380421</commentid>
    <comment_count>27</comment_count>
      <attachid>88434</attachid>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-04-06 08:53:52 -0700</bug_when>
    <thetext>Created attachment 88434
Patch v6 WebCore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380438</commentid>
    <comment_count>28</comment_count>
      <attachid>88438</attachid>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-04-06 09:02:13 -0700</bug_when>
    <thetext>Created attachment 88438
Patch v6 Chromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380442</commentid>
    <comment_count>29</comment_count>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-04-06 09:05:47 -0700</bug_when>
    <thetext>I&apos;ve now split up the WebCore/Webkit parts and the Chromium part into two separate patches (v6).

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

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        No new tests. (OOPS!)
&gt; 
&gt; This need to be replaced with an explanation of why there are no tests. A re-commit hook won&apos;t let a patch with OOPS be landed.

Done.

&gt;&gt; Source/WebKit/chromium/public/mac/WebTextHelper.h:44
&gt;&gt; +class WebTextHelper {
&gt; 
&gt; nit: a more specific class name would be nice.

Renamed to WebSubstringUtil.

&gt;&gt; Source/WebKit/chromium/public/mac/WebTextHelper.h:46
&gt;&gt; +    explicit WebTextHelper(WebFrame*);
&gt; 
&gt; why bother instantiating this class?  why not just make substringInRange be
&gt; a static method that takes a WebFrame pointer?

Done. This class has slowly been whittled down as stuff moved to WebCore.

&gt;&gt; Source/WebKit/chromium/public/mac/WebTextHelper.h:50
&gt;&gt; +    WebString substringInRange(size_t location, size_t length);
&gt; 
&gt; please remember to annotate entry points with WEBKIT_API.  even though it is
&gt; probably not strictly necessary for the OSX build, it is still nice to be
&gt; consistent with WEBKIT_API usage.

Didn&apos;t know to do that. Done.

&gt;&gt; Source/WebKit/chromium/src/mac/WebTextHelper.mm:74
&gt;&gt; +// This function is copied from /WebKit/mac/Misc/WebNSAttributedStringExtras.mm.
&gt; 
&gt; It seems like we need to copy the copyright information from that file as well then.

I copied the copyright line from that file. I also left in the Google line though. Is this correct, or should it just be the Apple one?

&gt;&gt; Source/WebKit/chromium/src/mac/WebTextHelper.mm:129
&gt;&gt; +    NSData* archivedData([NSArchiver archivedDataWithRootObject:string]);
&gt; 
&gt; I&apos;m not sure if using NSArchiver is a good idea. Are you archiving in renderer process, and unarchiving in main one? If the renderer is compromised, it could send anything (like an NSWindow) in the serialized data.

Thanks for bringing this up. I am indeed archiving in the renderer and unarchiving in the browser. While it can&apos;t send an NSWindow (not NSCoding compliant), it&apos;s stil something to worry about. Did you have any speciific solutions in mind? I talked with others on our Mac team and I came up with the following potential solutions:

* Create a custom NSKeyedUnarchiver that overrides |-classForClassName:| and reject any archive where the root object isn&apos;t an NSAttributedString.
* In the IPC request for the substring, include a one-time secret key which can be used to store the NSAttributedString in a keyed archive. The browser will only decode an object with that secret key one time.
* Just send the HTML fragment instead and construct the NSAttributedString in the browser. I&apos;m not sure this is any less dangerous and it also has the issue of spinning a nested runloop to parse that HTML.

&gt;&gt; Source/WebKit/mac/WebView/WebFrame.mm:676
&gt;&gt; +    return NSMakeRange(NSNotFound, 0);
&gt; 
&gt; We generally prefer early return on error. It&apos;s more readable when the main code path is linear.

Done. I did this here simply because locationAndLengthFromRange() returns a bool indicating its success.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:164
&gt;&gt; +    size_t loc, len;
&gt; 
&gt; Please don&apos;t abbreviate.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380478</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-06 09:28:44 -0700</bug_when>
    <thetext>Attachment 88438 did not build on chromium:
Build output: http://queues.webkit.org/results/8342230</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380494</commentid>
    <comment_count>31</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-06 09:40:53 -0700</bug_when>
    <thetext>&gt; While it can&apos;t send an NSWindow (not NSCoding compliant), it&apos;s stil something to worry about. Did you have any speciific solutions in mind?

I&apos;m going to implement that for WebKit2 over the next few days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380499</commentid>
    <comment_count>32</comment_count>
      <attachid>88434</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-06 09:43:46 -0700</bug_when>
    <thetext>Comment on attachment 88434
Patch v6 WebCore

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

Great!

&gt; Source/WebKit/mac/WebView/WebFrame.mm:676
&gt; +    size_t location, length;

I don&apos;t know why I didn&apos;t mention that before, but we don&apos;t declare two variables on one line.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:281
&gt; +    size_t locationSize, lengthSize;

Ditto.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:296
&gt; +    size_t locationSize, lengthSize;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380528</commentid>
    <comment_count>33</comment_count>
      <attachid>88458</attachid>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-04-06 10:09:25 -0700</bug_when>
    <thetext>Created attachment 88458
Patch v7 WebCore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380529</commentid>
    <comment_count>34</comment_count>
      <attachid>88434</attachid>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-04-06 10:10:37 -0700</bug_when>
    <thetext>Comment on attachment 88434
Patch v6 WebCore

I&apos;ve fixed all the instances of declaring two variables on a single line. Patch v7 is r? and cq? now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380605</commentid>
    <comment_count>35</comment_count>
      <attachid>88434</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-06 10:46:01 -0700</bug_when>
    <thetext>Comment on attachment 88434
Patch v6 WebCore

Cleared Alexey Proskuryakov&apos;s review+ from obsolete attachment 88434 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380719</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-06 12:22:18 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 88458:

http/tests/xmlviewer/dumpAsText/frames.html bug 57970 (author: pfeldman@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380721</commentid>
    <comment_count>37</comment_count>
      <attachid>88458</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-06 12:24:35 -0700</bug_when>
    <thetext>Comment on attachment 88458
Patch v7 WebCore

Clearing flags on attachment: 88458

Committed r83081: &lt;http://trac.webkit.org/changeset/83081&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381724</commentid>
    <comment_count>38</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-07 14:42:04 -0700</bug_when>
    <thetext>&gt; I&apos;m going to implement that for WebKit2 over the next few days.

Done that in bug 58066. The code is CoreIPC specific, but you should be able to do the same for Chromium easily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383500</commentid>
    <comment_count>39</comment_count>
      <attachid>89084</attachid>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-04-11 14:09:36 -0700</bug_when>
    <thetext>Created attachment 89084
Patch v7 Chromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383508</commentid>
    <comment_count>40</comment_count>
      <attachid>88438</attachid>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-04-11 14:15:07 -0700</bug_when>
    <thetext>Comment on attachment 88438
Patch v6 Chromium

The Chromium side v7 is ready for another round of review.

(In reply to comment #29)
&gt; Thanks for bringing this up. I am indeed archiving in the renderer and unarchiving in the browser. While it can&apos;t send an NSWindow (not NSCoding compliant), it&apos;s stil something to worry about. Did you have any speciific solutions in mind? I talked with others on our Mac team and I came up with the following potential solutions:
&gt; 
&gt; * Create a custom NSKeyedUnarchiver that overrides |-classForClassName:| and reject any archive where the root object isn&apos;t an NSAttributedString.
&gt; * In the IPC request for the substring, include a one-time secret key which can be used to store the NSAttributedString in a keyed archive. The browser will only decode an object with that secret key one time.
&gt; * Just send the HTML fragment instead and construct the NSAttributedString in the browser. I&apos;m not sure this is any less dangerous and it also has the issue of spinning a nested runloop to parse that HTML.

I went with a solution that I didn&apos;t list here, which is to manually encode the NSAttributedString, and only the font information. Now WebSubstringUtil::attributedSubstringInRange() returns an NSAttributedString and lets the client take care of serialization.

In case you&apos;re interested, this is the Chromium class that will encode and send the object over our IPC system: http://codereview.chromium.org/6289009/diff/101001/chrome/common/attributed_string_coder.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392496</commentid>
    <comment_count>41</comment_count>
      <attachid>91115</attachid>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-04-26 09:06:08 -0700</bug_when>
    <thetext>Created attachment 91115
Patch v7.1 Chromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392497</commentid>
    <comment_count>42</comment_count>
      <attachid>89084</attachid>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2011-04-26 09:07:07 -0700</bug_when>
    <thetext>Comment on attachment 89084
Patch v7 Chromium

Rebased changes. Darin and Dimitri: please take a look at Chromium v7.1 patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392681</commentid>
    <comment_count>43</comment_count>
      <attachid>91115</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-26 14:06:20 -0700</bug_when>
    <thetext>Comment on attachment 91115
Patch v7.1 Chromium

Clearing flags on attachment: 91115

Committed r84951: &lt;http://trac.webkit.org/changeset/84951&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392682</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-26 14:06:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83828</attachid>
            <date>2011-02-25 09:58:41 -0800</date>
            <delta_ts>2011-03-22 09:19:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54969-20110225125839.patch</filename>
            <type>text/plain</type>
            <size>23769</size>
            <attacher name="Robert Sesek">rsesek</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk2NjUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
MDZmZmFiZDJlMTkwYzJiYjlmMmZhMjdhMTg4NzM1MGMxYmQ2ZGI2Zi4uOTQyY2ExNDI5NGE5Y2Rm
MzdmOTM4MGVjZThlZGRkMGNjYzM3NjM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzOCBAQAorMjAxMS0wMi0yNSAgUm9iZXJ0IFNlc2VrICA8cnNlc2VrQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Q2hyb21pdW1dIEltcGxlbWVudCBXZWJLaXQgbWV0aG9kcyB0byBhc3Npc3Qgd2l0aCBDb2NvYSBO
U1RleHRJbnB1dAorICAgICAgICBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NjkKKworICAgICAgICBUaGlzIGFkZHMgZnVu
Y3Rpb25hbGl0eSB0byBXZWJGcmFtZSBhbmQgV2ViV2lkZ2V0IHRoYXQgY2FuIGFsc28gYmUgdXNl
ZAorICAgICAgICBieSB0ZXh0IGlucHV0IHN5c3RlbXMgb24gb3RoZXIgcGxhdGZvcm1zLgorCisg
ICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViRnJhbWUuaDoKKyAgICAg
ICAgKiBwdWJsaWMvV2ViV2lkZ2V0Lmg6CisgICAgICAgICogcHVibGljL21hYy9XZWJUZXh0SGVs
cGVyLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJGcmFtZUltcGw6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpjaGFyYWN0ZXJJbmRleEZvclBvaW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpjaGFyYWN0ZXJSYW5nZUF0UG9pbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKToK
KyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlBvcHVwTWVu
dUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpjb21wb3NpdGlv
blJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6Y2FyZXRPclNlbGVj
dGlvblJhbmdlKToKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51SW1wbC5oOgorICAgICAgICAq
IHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21w
b3NpdGlvblJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNhcmV0T3JTZWxl
Y3Rpb25SYW5nZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICogc3Jj
L21hYy9XZWJUZXh0SGVscGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6Z2V0V2ViRnJh
bWVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6cmFuZ2VTY29wZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlRleHRIZWxwZXI6OldlYlRleHRIZWxwZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJUZXh0
SGVscGVyOjpzdWJzdHJpbmdJblJhbmdlKToKKwogMjAxMS0wMi0yNCAgSmFtZXMgUm9iaW5zb24g
IDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hl
ci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCBlZjNlN2NmM2MzYTEzNzNiZDQyMDYy
Nzc0MTAxNDBiYWI5MzRlZWE0Li5hMTViNjE1YzE0ZDcyZTUyMmQ3OTQ2NzQ4OWM3OTQxMGFjYzBh
OWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0xMDEsNiArMTAxLDcgQEAKICAg
ICAgICAgICAgICAgICAncHVibGljL21hYy9XZWJJbnB1dEV2ZW50RmFjdG9yeS5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL21hYy9XZWJTYW5kYm94U3VwcG9ydC5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL21hYy9XZWJTY3JlZW5JbmZvRmFjdG9yeS5oJywKKyAgICAgICAgICAgICAg
ICAncHVibGljL21hYy9XZWJUZXh0SGVscGVyLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
bWFjL1dlYlRoZW1lRW5naW5lLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQWNjZXNz
aWJpbGl0eUNhY2hlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQWNjZXNzaWJpbGl0
eU5vdGlmaWNhdGlvbi5oJywKQEAgLTM4Myw2ICszODQsNyBAQAogICAgICAgICAgICAgICAgICdz
cmMveDExL1dlYlNjcmVlbkluZm9GYWN0b3J5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9t
YWMvV2ViSW5wdXRFdmVudEZhY3RvcnkubW0nLAogICAgICAgICAgICAgICAgICdzcmMvbWFjL1dl
YlNjcmVlbkluZm9GYWN0b3J5Lm1tJywKKyAgICAgICAgICAgICAgICAnc3JjL21hYy9XZWJUZXh0
SGVscGVyLm1tJywKICAgICAgICAgICAgICAgICAnc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVt
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9Mb2NhbGl6ZWRTdHJpbmdzLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKaW5kZXggODZmZGVjMmUzYjQyNjQ5MGQy
OTFmZDk1MWUxMDcxYmUzMjFhYjExYi4uNTc2NDdhZmFlNzE3ZGQzNmExMTJjNzg5MzM5NmI2OWUz
OWE1MmRmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJh
bWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCkBAIC02
Nyw2ICs2Nyw3IEBAIGNsYXNzIFdlYlVSTFJlcXVlc3Q7CiBjbGFzcyBXZWJWaWV3Owogc3RydWN0
IFdlYkNvbnNvbGVNZXNzYWdlOwogc3RydWN0IFdlYkZpbmRPcHRpb25zOworc3RydWN0IFdlYlBv
aW50Owogc3RydWN0IFdlYlJlY3Q7CiBzdHJ1Y3QgV2ViU2NyaXB0U291cmNlOwogc3RydWN0IFdl
YlNpemU7CkBAIC0zNzAsOCArMzcxLDE1IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgV2ViUmFu
Z2UgbWFya2VkUmFuZ2UoKSBjb25zdCA9IDA7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBmcmFtZSBy
ZWN0YW5nbGUgaW4gd2luZG93IGNvb3JkaW5hdGUgc3BhY2Ugb2YgdGhlIGdpdmVuIHRleHQKKyAg
ICAvLyByYW5nZS4KICAgICB2aXJ0dWFsIGJvb2wgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2Uo
dW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgV2ViUmVjdCYpIGNvbnN0ID0gMDsK
IAorICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIGEgY2hhcmFjdGVyIGluIHRoZSBGcmFtZSdz
IHRleHQgc3RyZWFtIGF0IHRoZSBnaXZlbgorICAgIC8vIHBvaW50LiBUaGUgcG9pbnQgaXMgaW4g
dGhlIHdpbmRvdyBjb29yZGluYXRlIHNwYWNlLiBXaWxsIHJldHVybgorICAgIC8vIFdURjo6bm90
Rm91bmQgaWYgdGhlIHBvaW50IGlzIGludmFsaWQuCisgICAgdmlydHVhbCB1bnNpZ25lZCBjaGFy
YWN0ZXJJbmRleEZvclBvaW50KGNvbnN0IFdlYlBvaW50JikgY29uc3QgPSAwOworCiAgICAgLy8g
U3VwcG9ydHMgY29tbWFuZHMgbGlrZSBVbmRvLCBSZWRvLCBDdXQsIENvcHksIFBhc3RlLCBTZWxl
Y3RBbGwsCiAgICAgLy8gVW5zZWxlY3QsIGV0Yy4gU2VlIEVkaXRvckNvbW1hbmQuY3BwIGZvciB0
aGUgZnVsbCBsaXN0IG9mIHN1cHBvcnRlZAogICAgIC8vIGNvbW1hbmRzLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAppbmRleCAzNmZiZjMxM2FkMTc0NjRjNDFkOGQ5
MjdjYjIxMzJhZGFiNmFlODgxLi4xMzRjYzNiYWYxOWFhNmVhMzZlODU4YWU5MmZkOWU3YmU4YzM3
YWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaApAQCAtNDAs
NiArNDAsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYklucHV0RXZlbnQ7Citj
bGFzcyBXZWJSYW5nZTsKIGNsYXNzIFdlYlN0cmluZzsKIHN0cnVjdCBXZWJSZWN0Owogc3RydWN0
IFdlYlNpemU7CkBAIC0xMTksNiArMTIwLDEwIEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlcmUgaXMgYW4gb25nb2luZyBjb21wb3NpdGlvbiBvciB0aGUgdGV4dCBpcyBpbnNl
cnRlZC4KICAgICB2aXJ0dWFsIGJvb2wgY29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFdlYlN0cmlu
ZyYgdGV4dCkgPSAwOwogCisgICAgLy8gUmV0dXJucyB0aGUgY2hhcmFjdGVyIHJhbmdlIG9mIHRo
ZSBjdXJyZW50IGNvbXBvc2l0aW9uLiBUaGlzIGlzIGFsc28KKyAgICAvLyByZWZlcnJlZCB0byBh
cyB0aGUgbWFya2VkIHJhbmdlLgorICAgIHZpcnR1YWwgV2ViUmFuZ2UgY29tcG9zaXRpb25SYW5n
ZSgpID0gMDsKKwogICAgIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgdGV4dCBpbnB1dCB0eXBlIG9m
IHRoaXMgV2ViV2lkZ2V0LgogICAgIHZpcnR1YWwgV2ViVGV4dElucHV0VHlwZSB0ZXh0SW5wdXRU
eXBlKCkgPSAwOwogCkBAIC0xMjYsNiArMTMxLDExIEBAIHB1YmxpYzoKICAgICAvLyB3aWxsIGJl
IHJldHVybmVkIGlmIGEgc2VsZWN0aW9uIHJhbmdlIGlzIGF2YWlsYWJsZS4KICAgICB2aXJ0dWFs
IFdlYlJlY3QgY2FyZXRPclNlbGVjdGlvbkJvdW5kcygpID0gMDsKIAorICAgIC8vIFJldHVybnMg
dGhlIGN1cnJlbnQgc2VsZWN0aW9uIHJhbmdlIG9mIHRoaXMgV2ViV2lkZ2V0LiBJZiB0aGVyZSBp
cyBubworICAgIC8vIHNlbGVjdGlvbiwgaXQgd2lsbCByZXR1cm4gYSAwLWxlbmd0aCByYW5nZSB3
aXRoIHRoZSBsb2NhdGlvbiBhdCB0aGUKKyAgICAvLyBjYXJldC4KKyAgICB2aXJ0dWFsIFdlYlJh
bmdlIGNhcmV0T3JTZWxlY3Rpb25SYW5nZSgpID0gMDsKKwogICAgIC8vIENoYW5nZXMgdGhlIHRl
eHQgZGlyZWN0aW9uIG9mIHRoZSBzZWxlY3RlZCBpbnB1dCBub2RlLgogICAgIHZpcnR1YWwgdm9p
ZCBzZXRUZXh0RGlyZWN0aW9uKFdlYlRleHREaXJlY3Rpb24pID0gMDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvbWFjL1dlYlRleHRIZWxwZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL21hYy9XZWJUZXh0SGVscGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDFjNDcyNTg0NzE5ZWU3M2QxNDM3ZDcxMGQ0MDVmYzY3MDc0NTRlYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL21hYy9XZWJUZXh0SGVscGVyLmgKQEAg
LTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2ViVGV4dEhlbHBlcl9oCisjZGVmaW5lIFdlYlRleHRIZWxw
ZXJfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViU3Ry
aW5nOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVGhpcyBjbGFzcyBpcyBhIGhlbHBl
ciBmb3IgaW1wbGVtZW50aW5nIHBhcnQgb2YgdGhlIE5TVGV4dElucHV0IHByb3RvY29sIG9uCisv
LyB0aGUgcmVuZGVyZXIgc2lkZS4gSW4gdGhlIGZ1dHVyZSBpdCBzaG91bGQgYmUgZ2VuZXJhbGl6
ZWQgdG8gc3VwcG9ydCBpbnB1dAorLy8gbWV0aG9kIGNvbXBvc2l0aW9uIGFjcm9zcyBhbGwgcGxh
dGZvcm1zLgorY2xhc3MgV2ViVGV4dEhlbHBlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV2Vi
VGV4dEhlbHBlcihXZWJGcmFtZSopOworCisgICAgLy8gUmV0dXJucyBhIHNlcmlhbGl6ZWQgTlNB
dHRyaWJ1dGVkU3RyaW5nICh2aWEgTlNEYXRhKSB0aGF0IGlzIGEgc3Vic3RyaW5nCisgICAgLy8g
b2YgdGhlIEZyYW1lIGF0IHRoZSBnaXZlbiByYW5nZS4KKyAgICBXZWJTdHJpbmcgc3Vic3RyaW5n
SW5SYW5nZSh1aW50IGxvY2F0aW9uLCB1aW50IGxlbmd0aCk7CisKK3Byb3RlY3RlZDoKKyAgICBX
ZWJGcmFtZSogbV9mcmFtZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCmluZGV4IDg0OWI1
NWNkNTdiZDk1MDhhMzZlODM4MTU3YTQwMWRiZjkzYmE5MTEuLjM2ZjE3ZjBjOWQ4MjE0ZTI3NDVl
NmQxNTI3NTZiMDU1N2FjM2U3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkZyYW1lSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RnJhbWVJbXBsLmNwcApAQCAtODUsNiArODUsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxl
ci5oIgorI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZvcm1TdGF0ZS5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgpAQCAtOTgsNiArOTksNyBAQAogI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCisjaW5jbHVkZSAiSGl0
VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAicGFpbnRpbmcvR3JhcGhpY3NDb250ZXh0QnVpbGRlci5oIgpA
QCAtMTExMiwxMCArMTExNCwyOSBAQCBib29sIFdlYkZyYW1lSW1wbDo6Zmlyc3RSZWN0Rm9yQ2hh
cmFjdGVyUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgSW50UmVjdCBpbnRSZWN0ID0gZnJhbWUoKS0+ZWRpdG9yKCktPmZp
cnN0UmVjdEZvclJhbmdlKHJhbmdlLmdldCgpKTsKICAgICByZWN0ID0gV2ViUmVjdChpbnRSZWN0
LngoKSwgaW50UmVjdC55KCksIGludFJlY3Qud2lkdGgoKSwgaW50UmVjdC5oZWlnaHQoKSk7Cisg
ICAgLy8gV2hlbiBpbnNpZGUgYW4gdGV4dCBjb250cm9sLCBkb24ndCBhZGp1c3QgdGhlIHJhbmdl
LgorICAgIGlmICghc2VsZWN0aW9uUm9vdCkKKyAgICAgICAgcmVjdCA9IGZyYW1lKCktPnZpZXco
KS0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCit1bnNp
Z25lZCBXZWJGcmFtZUltcGw6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnQoY29uc3QgV2ViUG9pbnQm
IHdlYlBvaW50KSBjb25zdAoreworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIG5v
dEZvdW5kOworCisgICAgSW50UG9pbnQgcG9pbnQgPSBmcmFtZSgpLT52aWV3KCktPndpbmRvd1Rv
Q29udGVudHMod2ViUG9pbnQpOworICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gZnJhbWUoKS0+
ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50LCBmYWxzZSk7CisgICAg
UmFuZ2UqIHJhbmdlID0gY2hhcmFjdGVyUmFuZ2VBdFBvaW50KHJlc3VsdC5wb2ludCgpKTsKKyAg
ICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisKKyAgICB1bnNpZ25lZCBs
b2NhdGlvbiwgbGVuZ3RoOworICAgIGdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKHJhbmdl
LCBsb2NhdGlvbiwgbGVuZ3RoKTsKKyAgICByZXR1cm4gbG9jYXRpb247Cit9CisKIGJvb2wgV2Vi
RnJhbWVJbXBsOjpleGVjdXRlQ29tbWFuZChjb25zdCBXZWJTdHJpbmcmIG5hbWUpCiB7CiAgICAg
QVNTRVJUKGZyYW1lKCkpOwpAQCAtMjI3NCw0ICsyMjk1LDYxIEBAIHZvaWQgV2ViRnJhbWVJbXBs
Ojpsb2FkSmF2YVNjcmlwdFVSTChjb25zdCBLVVJMJiB1cmwpCiAgICAgICAgIG1fZnJhbWUtPmRv
Y3VtZW50KCktPmxvYWRlcigpLT53cml0ZXIoKS0+cmVwbGFjZURvY3VtZW50KHNjcmlwdFJlc3Vs
dCk7CiB9CiAKKy8vIFRoaXMgZnVuY3Rpb24gaXMgY29waWVkIGZyb20gL1dlYktpdDIvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbS4KK1JhbmdlKiBXZWJGcmFtZUltcGw6OmNoYXJhY3RlclJhbmdl
QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgVmlzaWJsZVBvc2l0
aW9uIHBvc2l0aW9uID0gZnJhbWUoKS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQocG9pbnQpOwor
ICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBWaXNp
YmxlUG9zaXRpb24gcHJldmlvdXMgPSBwb3NpdGlvbi5wcmV2aW91cygpOworICAgIGlmIChwcmV2
aW91cy5pc05vdE51bGwoKSkgeworICAgICAgICBSYW5nZSogcHJldmlvdXNDaGFyYWN0ZXJSYW5n
ZSA9IG1ha2VSYW5nZShwcmV2aW91cywgcG9zaXRpb24pLmdldCgpOworICAgICAgICBJbnRSZWN0
IHJlY3QgPSBmcmFtZSgpLT5lZGl0b3IoKS0+Zmlyc3RSZWN0Rm9yUmFuZ2UocHJldmlvdXNDaGFy
YWN0ZXJSYW5nZSk7CisgICAgICAgIGlmIChyZWN0LmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAg
ICAgIHJldHVybiBwcmV2aW91c0NoYXJhY3RlclJhbmdlOworICAgIH0KKworICAgIFZpc2libGVQ
b3NpdGlvbiBuZXh0ID0gcG9zaXRpb24ubmV4dCgpOworICAgIGlmIChuZXh0LmlzTm90TnVsbCgp
KSB7CisgICAgICAgIFJhbmdlKiBuZXh0Q2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocG9zaXRp
b24sIG5leHQpLmdldCgpOworICAgICAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZSgpLT5lZGl0b3Io
KS0+Zmlyc3RSZWN0Rm9yUmFuZ2UobmV4dENoYXJhY3RlclJhbmdlKTsKKyAgICAgICAgaWYgKHJl
Y3QuY29udGFpbnMocG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIG5leHRDaGFyYWN0ZXJSYW5n
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBpcyBjb3Bp
ZWQgZnJvbSAvV2ViS2l0Mi9XZWJQYWdlL1dlYlBhZ2UuY3BwLgorYm9vbCBXZWJGcmFtZUltcGw6
OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKFJhbmdlKiByYW5nZSwgdW5zaWduZWQmIGxv
Y2F0aW9uLCB1bnNpZ25lZCYgbGVuZ3RoKSBjb25zdAoreworICAgIGxvY2F0aW9uID0gbm90Rm91
bmQ7CisgICAgbGVuZ3RoID0gMDsKKworICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5zdGFydENv
bnRhaW5lcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFbGVtZW50KiBzZWxlY3Rp
b25Sb290ID0gcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnJv
b3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3Qg
PyBzZWxlY3Rpb25Sb290IDogcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCk7CisKKyAgICAvLyBNb3VzZSBldmVudHMgbWF5IGNhdXNlIFRTTSB0byBhdHRlbXB0IHRvIGNy
ZWF0ZSBhbiBOU1JhbmdlIGZvciBhIHBvcnRpb24gb2YgdGhlIHZpZXcKKyAgICAvLyB0aGF0IGlz
IG5vdCBpbnNpZGUgdGhlIGN1cnJlbnQgZWRpdGFibGUgcmVnaW9uLiAgVGhlc2UgY2hlY2tzIGVu
c3VyZSB3ZSBkb24ndCBwcm9kdWNlCisgICAgLy8gcG90ZW50aWFsbHkgaW52YWxpZCBkYXRhIHdo
ZW4gcmVzcG9uZGluZyB0byBzdWNoIHJlcXVlc3RzLgorICAgIGlmIChyYW5nZS0+c3RhcnRDb250
YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmlzRGVzY2VuZGFu
dE9mKHNjb3BlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChyYW5nZS0+ZW5kQ29u
dGFpbmVyKCkgIT0gc2NvcGUgJiYgIXJhbmdlLT5lbmRDb250YWluZXIoKS0+aXNEZXNjZW5kYW50
T2Yoc2NvcGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8UmFuZ2U+IHRl
c3RSYW5nZSA9IFJhbmdlOjpjcmVhdGUoc2NvcGUtPmRvY3VtZW50KCksIHNjb3BlLCAwLCByYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgIEFTU0VSVCh0
ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOworICAgIGxvY2F0aW9uID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkpOworICAgIAorICAgIEV4Y2Vw
dGlvbkNvZGUgZWM7CisgICAgdGVzdFJhbmdlLT5zZXRFbmQocmFuZ2UtPmVuZENvbnRhaW5lcigp
LCByYW5nZS0+ZW5kT2Zmc2V0KCksIGVjKTsKKyAgICBBU1NFUlQodGVzdFJhbmdlLT5zdGFydENv
bnRhaW5lcigpID09IHNjb3BlKTsKKyAgICBsZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKHRlc3RSYW5nZS5nZXQoKSkgLSBsb2NhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1l
SW1wbC5oCmluZGV4IDU1YTlmNTRjN2VlYjdkZGYzZmQ0MTYyNzE2Y2MzMDZmZjRkMDI0MWQuLmNi
ODNmNmM4YTg4YzkwZTk2OGJlMTkyZWE5YmJjZjI3M2RlMTZhOGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCkBAIC0xNDEsNiArMTQxLDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBoYXNNYXJrZWRUZXh0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJS
YW5nZSBtYXJrZWRSYW5nZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBmaXJzdFJlY3RGb3JD
aGFyYWN0ZXJSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBXZWJSZWN0
JikgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyYWN0ZXJJbmRleEZvclBvaW50KGNv
bnN0IFdlYlBvaW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGV4ZWN1dGVDb21tYW5kKGNv
bnN0IFdlYlN0cmluZyYpOwogICAgIHZpcnR1YWwgYm9vbCBleGVjdXRlQ29tbWFuZChjb25zdCBX
ZWJTdHJpbmcmLCBjb25zdCBXZWJTdHJpbmcmIHZhbHVlKTsKICAgICB2aXJ0dWFsIGJvb2wgaXND
b21tYW5kRW5hYmxlZChjb25zdCBXZWJTdHJpbmcmKSBjb25zdDsKQEAgLTMyMCw2ICszMjEsMTMg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgbG9hZEphdmFTY3JpcHRVUkwoY29uc3QgV2ViQ29yZTo6
S1VSTCYpOwogCisgICAgLy8gR2l2ZW4gYSBwb2ludCBpbiBjb250ZW50IGNvb3JkaW5hdGUgc3Bh
Y2UsIHRoaXMgd2lsbCByZXR1cm4gYSBSYW5nZSB0aGF0CisgICAgLy8gY29udGFpbnMgdGhhdCBw
b2ludC4KKyAgICBXZWJDb3JlOjpSYW5nZSogY2hhcmFjdGVyUmFuZ2VBdFBvaW50KGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JikgY29uc3Q7CisKKyAgICAvLyBUYWtlcyBpbiBhIFJhbmdlIGFuZCBl
eHRyYWN0cyBhIGxvY2F0aW9uIGFuZCBsZW5ndGggb2YgdGhhdCByYW5nZS4KKyAgICBib29sIGdl
dExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKFdlYkNvcmU6OlJhbmdlKiwgdW5zaWduZWQmIGxv
Y2F0aW9uLCB1bnNpZ25lZCYgbGVuZ3RoKSBjb25zdDsKKwogICAgIEZyYW1lTG9hZGVyQ2xpZW50
SW1wbCBtX2ZyYW1lTG9hZGVyQ2xpZW50OwogCiAgICAgV2ViRnJhbWVDbGllbnQqIG1fY2xpZW50
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcApp
bmRleCBiNGQ0MjQ2YzNmNjAxMGJjYWY1MDIxZDRjZDk2ODFhYmZjMzkzZGI1Li5hNTE3NzZjNDI1
ZjFiYjI5ZGVjZjc5YTI0ZDk0NTA2MmNmNzlkNmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcApAQCAtNDMsNiArNDMsNyBAQAogCiAjaW5j
bHVkZSAiV2ViSW5wdXRFdmVudC5oIgogI2luY2x1ZGUgIldlYklucHV0RXZlbnRDb252ZXJzaW9u
LmgiCisjaW5jbHVkZSAiV2ViUmFuZ2UuaCIKICNpbmNsdWRlICJXZWJSZWN0LmgiCiAjaW5jbHVk
ZSAiV2ViV2lkZ2V0Q2xpZW50LmgiCiAKQEAgLTI1Miw2ICsyNTMsMTEgQEAgYm9vbCBXZWJQb3B1
cE1lbnVJbXBsOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJiB0ZXh0KQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAorV2ViUmFuZ2UgV2ViUG9wdXBNZW51SW1wbDo6Y29tcG9zaXRp
b25SYW5nZSgpCit7CisgICAgcmV0dXJuIFdlYlJhbmdlKCk7Cit9CisKIFdlYlRleHRJbnB1dFR5
cGUgV2ViUG9wdXBNZW51SW1wbDo6dGV4dElucHV0VHlwZSgpCiB7CiAgICAgcmV0dXJuIFdlYlRl
eHRJbnB1dFR5cGVOb25lOwpAQCAtMjYyLDYgKzI2OCwxMSBAQCBXZWJSZWN0IFdlYlBvcHVwTWVu
dUltcGw6OmNhcmV0T3JTZWxlY3Rpb25Cb3VuZHMoKQogICAgIHJldHVybiBXZWJSZWN0KCk7CiB9
CiAKK1dlYlJhbmdlIFdlYlBvcHVwTWVudUltcGw6OmNhcmV0T3JTZWxlY3Rpb25SYW5nZSgpCit7
CisgICAgcmV0dXJuIFdlYlJhbmdlKCk7Cit9CisKIHZvaWQgV2ViUG9wdXBNZW51SW1wbDo6c2V0
VGV4dERpcmVjdGlvbihXZWJUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaAppbmRleCA3YmI5ZjdlNWEy
MDUyY2JmOGM3MmRmMGNlMGM0NzVlZmMxYTdiNWU5Li4wMDNjZTA4MmNkNWZhMzVmMGNlODY3YzY1
ZDkxNzYyNmE2YmFjY2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJQb3B1cE1lbnVJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9w
dXBNZW51SW1wbC5oCkBAIC01MSw2ICs1MSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3Mg
V2ViS2V5Ym9hcmRFdmVudDsKIGNsYXNzIFdlYk1vdXNlRXZlbnQ7CiBjbGFzcyBXZWJNb3VzZVdo
ZWVsRXZlbnQ7CitjbGFzcyBXZWJSYW5nZTsKIHN0cnVjdCBXZWJSZWN0OwogCiBjbGFzcyBXZWJQ
b3B1cE1lbnVJbXBsIDogcHVibGljIFdlYlBvcHVwTWVudSwKQEAgLTc2LDggKzc3LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgaW50IHNlbGVjdGlvblN0YXJ0LCBpbnQgc2VsZWN0aW9uRW5kKTsKICAg
ICB2aXJ0dWFsIGJvb2wgY29uZmlybUNvbXBvc2l0aW9uKCk7CiAgICAgdmlydHVhbCBib29sIGNv
bmZpcm1Db21wb3NpdGlvbihjb25zdCBXZWJTdHJpbmcmIHRleHQpOworICAgIHZpcnR1YWwgV2Vi
UmFuZ2UgY29tcG9zaXRpb25SYW5nZSgpOwogICAgIHZpcnR1YWwgV2ViVGV4dElucHV0VHlwZSB0
ZXh0SW5wdXRUeXBlKCk7CiAgICAgdmlydHVhbCBXZWJSZWN0IGNhcmV0T3JTZWxlY3Rpb25Cb3Vu
ZHMoKTsKKyAgICB2aXJ0dWFsIFdlYlJhbmdlIGNhcmV0T3JTZWxlY3Rpb25SYW5nZSgpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRUZXh0RGlyZWN0aW9uKFdlYlRleHREaXJlY3Rpb24gZGlyZWN0aW9u
KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCmluZGV4IGNjY2QxOGZmYjgyYjM2MmEzYzNiNDA5MGQ4NGEzM2MzMzQwZjlkZTQu
LmQyZjFmZGRmNTU4MDYxYTU2MTM0YzIwMDIxMjhkNzY1ZWFmYzVkMmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTExNCw2ICsxMTQsNyBAQAogI2lu
Y2x1ZGUgIldlYlBsdWdpbkNvbnRhaW5lckltcGwuaCIKICNpbmNsdWRlICJXZWJQb2ludC5oIgog
I2luY2x1ZGUgIldlYlBvcHVwTWVudUltcGwuaCIKKyNpbmNsdWRlICJXZWJSYW5nZS5oIgogI2lu
Y2x1ZGUgIldlYlJlY3QuaCIKICNpbmNsdWRlICJXZWJSdW50aW1lRmVhdHVyZXMuaCIKICNpbmNs
dWRlICJXZWJTZXR0aW5nc0ltcGwuaCIKQEAgLTEzNTAsNiArMTM1MSwxNyBAQCBib29sIFdlYlZp
ZXdJbXBsOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJiB0ZXh0KQogICAgIHJl
dHVybiB0cnVlOwogfQogCitXZWJSYW5nZSBXZWJWaWV3SW1wbDo6Y29tcG9zaXRpb25SYW5nZSgp
Cit7CisgICAgRnJhbWUqIGZvY3VzZWQgPSBmb2N1c2VkV2ViQ29yZUZyYW1lKCk7CisgICAgaWYg
KCFmb2N1c2VkIHx8ICFtX2ltZUFjY2VwdEV2ZW50cykKKyAgICAgICAgcmV0dXJuIFdlYlJhbmdl
KCk7CisgICAgRWRpdG9yKiBlZGl0b3IgPSBmb2N1c2VkLT5lZGl0b3IoKTsKKyAgICBpZiAoIWVk
aXRvciB8fCAhZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKQorICAgICAgICByZXR1cm4gV2ViUmFu
Z2UoKTsKKyAgICByZXR1cm4gZWRpdG9yLT5jb21wb3NpdGlvblJhbmdlKCk7Cit9CisKIFdlYlRl
eHRJbnB1dFR5cGUgV2ViVmlld0ltcGw6OnRleHRJbnB1dFR5cGUoKQogewogICAgIFdlYlRleHRJ
bnB1dFR5cGUgdHlwZSA9IFdlYlRleHRJbnB1dFR5cGVOb25lOwpAQCAtMTQxMCw2ICsxNDIyLDIw
IEBAIFdlYlJlY3QgV2ViVmlld0ltcGw6OmNhcmV0T3JTZWxlY3Rpb25Cb3VuZHMoKQogICAgIHJl
dHVybiByZWN0OwogfQogCitXZWJSYW5nZSBXZWJWaWV3SW1wbDo6Y2FyZXRPclNlbGVjdGlvblJh
bmdlKCkKK3sKKyAgICBXZWJSYW5nZSByYW5nZTsKKyAgICBjb25zdCBGcmFtZSogZm9jdXNlZCA9
IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKKyAgICBpZiAoIWZvY3VzZWQpCisgICAgICAgIHJldHVy
biByYW5nZTsKKworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBmb2N1c2Vk
LT5zZWxlY3Rpb24oKTsKKyAgICBpZiAoIWNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiByYW5n
ZTsKKworICAgIHJldHVybiBjb250cm9sbGVyLT50b05vcm1hbGl6ZWRSYW5nZSgpOworfQorCiB2
b2lkIFdlYlZpZXdJbXBsOjpzZXRUZXh0RGlyZWN0aW9uKFdlYlRleHREaXJlY3Rpb24gZGlyZWN0
aW9uKQogewogICAgIC8vIFRoZSBFZGl0b3I6OnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKCkgZnVu
Y3Rpb24gY2hlY2tzIGlmIHdlIGNhbiBjaGFuZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5oCmluZGV4IDc2NDBjZWJhNDhlYzI5YTk3ZjE4Y2NlMGJiNzJkZWU0ZTc3NTQy
OWIuLmRlZjI4NTA0ODM2YTA2MzlmZWQ0MmRhNTAwNWFkNjA0M2MwMWNlNzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMTA3LDggKzEwNywxMCBAQCBwdWJs
aWM6CiAgICAgICAgIGludCBzZWxlY3Rpb25FbmQpOwogICAgIHZpcnR1YWwgYm9vbCBjb25maXJt
Q29tcG9zaXRpb24oKTsKICAgICB2aXJ0dWFsIGJvb2wgY29uZmlybUNvbXBvc2l0aW9uKGNvbnN0
IFdlYlN0cmluZyYgdGV4dCk7CisgICAgdmlydHVhbCBXZWJSYW5nZSBjb21wb3NpdGlvblJhbmdl
KCk7CiAgICAgdmlydHVhbCBXZWJUZXh0SW5wdXRUeXBlIHRleHRJbnB1dFR5cGUoKTsKICAgICB2
aXJ0dWFsIFdlYlJlY3QgY2FyZXRPclNlbGVjdGlvbkJvdW5kcygpOworICAgIHZpcnR1YWwgV2Vi
UmFuZ2UgY2FyZXRPclNlbGVjdGlvblJhbmdlKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFRleHRE
aXJlY3Rpb24oV2ViVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pOwogICAgIHZpcnR1YWwgYm9vbCBp
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvbWFjL1dlYlRleHRIZWxwZXIubW0gYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9tYWMvV2ViVGV4dEhlbHBlci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MmYwMmZi
Y2Y0MTc0YjYwYmMwNmEyODlkN2ZkNTM5ZmVkZGQ1M2JhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvbWFjL1dlYlRleHRIZWxwZXIubW0KQEAgLTAsMCArMSwx
MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisj
aW5jbHVkZSAiV2ViVGV4dEhlbHBlci5oIgorCisjaW5jbHVkZSAiQ29sb3JNYWMuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5j
bHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9y
LmgiCisjaW5jbHVkZSAiV2ViUmVjdC5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCisjaW1w
b3J0IDxDb2NvYS9Db2NvYS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKKy8vIEhlbHBlciBmdW5jdGlvbnMuCisKK1dlYkZyYW1lSW1wbCogZ2V0
V2ViRnJhbWVJbXBsKFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
V2ViRnJhbWVJbXBsKj4oZnJhbWUpOworfQorCitFbGVtZW50KiByYW5nZVNjb3BlKFdlYkZyYW1l
KiB3ZWJGcmFtZSkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBnZXRXZWJGcmFtZUltcGwod2ViRnJh
bWUpLT5mcmFtZSgpOworICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBmcmFtZS0+c2VsZWN0
aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/
IHNlbGVjdGlvblJvb3QgOiBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7Cit9
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1dlYlRleHRIZWxwZXI6OldlYlRleHRIZWxw
ZXIoV2ViRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKK3sKK30KKworLy8gVGhp
cyBmdW5jdGlvbiBpcyBjb3BpZWQgZnJvbSAvV2ViS2l0L21hYy9NaXNjL1dlYk5TQXR0cmlidXRl
ZFN0cmluZ0V4dHJhcy5tbS4KK1dlYktpdDo6V2ViU3RyaW5nIFdlYlRleHRIZWxwZXI6OnN1YnN0
cmluZ0luUmFuZ2UodWludCBsb2NhdGlvbiwgdWludCBsZW5ndGgpCit7CisgICAgRnJhbWUqIGZy
YW1lID0gZ2V0V2ViRnJhbWVJbXBsKG1fZnJhbWUpLT5mcmFtZSgpOworICAgIGlmIChmcmFtZS0+
dmlldygpLT5uZWVkc0xheW91dCgpKQorICAgICAgICBmcmFtZS0+dmlldygpLT5sYXlvdXQoKTsK
KworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlv
bkFuZExlbmd0aChyYW5nZVNjb3BlKG1fZnJhbWUpLCBsb2NhdGlvbiwgbGVuZ3RoKSk7CisgICAg
aWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIFdlYktpdDo6V2ViU3RyaW5nKCk7CisKKyAgICBO
U011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBzdHJpbmcgPSBbW05TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRdOworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIGF0dHJzID0gW05T
TXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV07CisKKyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9
IDA7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQocmFuZ2UuZ2V0KCkpOyAhaXQuYXRFbmQoKSAm
JiBbc3RyaW5nIGxlbmd0aF0gPCBsZW5ndGg7IGl0LmFkdmFuY2UoKSkgeworICAgICAgICB1bnNp
Z25lZCBudW1DaGFyYWN0ZXJzID0gaXQubGVuZ3RoKCk7CisgICAgICAgIGlmICghbnVtQ2hhcmFj
dGVycykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZXhj
ZXB0aW9uID0gMDsKKyAgICAgICAgTm9kZSogY29udGFpbmVyID0gaXQucmFuZ2UoKS0+c3RhcnRD
b250YWluZXIoZXhjZXB0aW9uKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNv
bnRhaW5lci0+cmVuZGVyZXIoKTsKKyAgICAgICAgQVNTRVJUKHJlbmRlcmVyKTsKKyAgICAgICAg
aWYgKCFyZW5kZXJlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgICAgICBOU0ZvbnQqIGZvbnQgPSBz
dHlsZS0+Zm9udCgpLnByaW1hcnlGb250KCktPmdldE5TRm9udCgpOworICAgICAgICAvLyBJZiB0
aGUgcGxhdGZvcm0gZm9udCBjYW4ndCBiZSBsb2FkZWQsIGl0J3MgbGlrZWx5IHRoYXQgdGhlIHNp
dGUgaXMKKyAgICAgICAgLy8gdXNpbmcgYSB3ZWIgZm9udC4gRm9yIG5vdywganVzdCB1c2UgdGhl
IGRlZmF1bHQgZm9udCBpbnN0ZWFkLgorICAgICAgICAvLyBUT0RPKHJzZXNlayk6IENoYW5nZSB0
aGUgZm9udCBhY3RpdmF0aW9uIGZsYWdzIHRvIGFsbG93IG90aGVyIHByb2Nlc3NlcworICAgICAg
ICAvLyB0byB1c2UgdGhlIGZvbnQuCisgICAgICAgIGlmICghZm9udCkKKyAgICAgICAgICBmb250
ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOnN0eWxlLT5mb250KCkuc2l6ZSgpXTsKKyAgICAg
ICAgW2F0dHJzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKwor
ICAgICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9y
KS5hbHBoYSgpKQorICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpIGZvcktleTpOU0ZvcmVncm91
bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBbYXR0cnMg
cmVtb3ZlT2JqZWN0Rm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAg
ICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKS5hbHBoYSgpKQorICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpuc0NvbG9yKHN0
eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKSBm
b3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgW2F0dHJzIHJlbW92ZU9iamVjdEZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJp
YnV0ZU5hbWVdOworCisgICAgICAgIE5TU3RyaW5nKiBzdWJzdHJpbmcgPQorICAgICAgICAgICAg
W1tbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyc05vQ29weTpjb25zdF9jYXN0PFVD
aGFyKj4oaXQuY2hhcmFjdGVycygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxlbmd0aDppdC5sZW5ndGgoKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZyZWVXaGVuRG9uZTpOT10gYXV0b3JlbGVhc2VdOworICAg
ICAgICBbc3RyaW5nIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZShwb3NpdGlv
biwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhTdHJpbmc6c3Vic3RyaW5n
XTsKKyAgICAgICAgW3N0cmluZyBzZXRBdHRyaWJ1dGVzOmF0dHJzIHJhbmdlOk5TTWFrZVJhbmdl
KHBvc2l0aW9uLCBudW1DaGFyYWN0ZXJzKV07CisgICAgICAgIHBvc2l0aW9uICs9IG51bUNoYXJh
Y3RlcnM7CisgICAgfQorICAgIE5TRGF0YSogYXJjaGl2ZWREYXRhKFtOU0FyY2hpdmVyIGFyY2hp
dmVkRGF0YVdpdGhSb290T2JqZWN0OnN0cmluZ10pOworICAgIGlmICghYXJjaGl2ZWREYXRhKQor
ICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisgICAgcmV0dXJuIFdlYktpdDo6V2ViU3RyaW5n
KHN0YXRpY19jYXN0PGNvbnN0IFdlYlVDaGFyKj4oW2FyY2hpdmVkRGF0YSBieXRlc10pLAorICAg
ICAgICBbYXJjaGl2ZWREYXRhIGxlbmd0aF0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86464</attachid>
            <date>2011-03-22 09:19:53 -0700</date>
            <delta_ts>2011-03-22 14:46:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54969-20110322121951.patch</filename>
            <type>text/plain</type>
            <size>33963</size>
            <attacher name="Robert Sesek">rsesek</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE2NDgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyOGM0NzlhYWIwYWRkODQ1
NzI5ZjNlYmViYmE3NTQ4Njk1NTViODUwLi45MjU2Y2JiMDMwOTFjMTUzODAzNTFlNWQyZWVmZThj
ZTI1YjNmNTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDMtMjIgIFJvYmVy
dCBTZXNlayAgPHJzZXNla0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW0Nocm9taXVtXSBJbXBsZW1lbnQgV2ViS2l0IG1ldGhv
ZHMgdG8gYXNzaXN0IHdpdGggQ29jb2EgTlNUZXh0SW5wdXQgaW1wbGVtZW50YXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0OTY5CisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OmdldExvY2F0aW9uQW5kTGVuZ3RoKToKKyAgICAgICAgKiBk
b20vUmFuZ2UuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lOjpyYW5nZUZvclBvaW50KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisKIDIwMTEt
MDMtMjEgIEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDQyM2Q0M2YyNjEx
M2M2MDFlNTI3Yjc1MjFlY2YyOTI3ZmI2ZTA5NWYuLmY0ZjUwZmFjMzkwYmFmMzM3NzY3MGU5NmU0
ODdhMDYzZDlkMDJmM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtMTUzNCw2ICsxNTM0LDM2IEBA
IGJvb2wgUmFuZ2U6OmNvbnRhaW5lZEJ5UmVhZE9ubHkoKSBjb25zdAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAorYm9vbCBSYW5nZTo6Z2V0TG9jYXRpb25BbmRMZW5ndGgoc2l6ZV90JiBsb2NhdGlv
biwgc2l6ZV90JiBsZW5ndGgpCit7CisgICAgbG9jYXRpb24gPSBub3RGb3VuZDsKKyAgICBsZW5n
dGggPSAwOworCisgICAgaWYgKCFzdGFydENvbnRhaW5lcigpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gb3duZXJEb2N1bWVudCgpLT5mcmFt
ZSgpLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIEVsZW1lbnQqIHNj
b3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBvd25lckRvY3VtZW50KCktPmRv
Y3VtZW50RWxlbWVudCgpOworCisgICAgLy8gTW91c2UgZXZlbnRzIG1heSBjYXVzZSBUU00gdG8g
YXR0ZW1wdCB0byBjcmVhdGUgYW4gTlNSYW5nZSBmb3IgYSBwb3J0aW9uIG9mIHRoZSB2aWV3Cisg
ICAgLy8gdGhhdCBpcyBub3QgaW5zaWRlIHRoZSBjdXJyZW50IGVkaXRhYmxlIHJlZ2lvbi4gVGhl
c2UgY2hlY2tzIGVuc3VyZSB3ZSBkb24ndCBwcm9kdWNlCisgICAgLy8gcG90ZW50aWFsbHkgaW52
YWxpZCBkYXRhIHdoZW4gcmVzcG9uZGluZyB0byBzdWNoIHJlcXVlc3RzLgorICAgIGlmIChzdGFy
dENvbnRhaW5lcigpICE9IHNjb3BlICYmICFzdGFydENvbnRhaW5lcigpLT5pc0Rlc2NlbmRhbnRP
ZihzY29wZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZW5kQ29udGFpbmVyKCkg
IT0gc2NvcGUgJiYgIWVuZENvbnRhaW5lcigpLT5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxSYW5nZT4gdGVzdFJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShzY29wZS0+ZG9jdW1lbnQoKSwgc2NvcGUsIDAsIHN0YXJ0Q29udGFpbmVyKCksIHN0
YXJ0T2Zmc2V0KCkpOworICAgIEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0g
c2NvcGUpOworICAgIGxvY2F0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFu
Z2UuZ2V0KCkpOworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgdGVzdFJhbmdlLT5z
ZXRFbmQoZW5kQ29udGFpbmVyKCksIGVuZE9mZnNldCgpLCBlYyk7CisgICAgQVNTRVJUKHRlc3RS
YW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7CisgICAgbGVuZ3RoID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkpIC0gbG9jYXRpb247CisgICAgcmV0dXJu
IHRydWU7Cit9CisKIE5vZGUqIFJhbmdlOjpmaXJzdE5vZGUoKSBjb25zdAogewogICAgIGlmICgh
bV9zdGFydC5jb250YWluZXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXggNTYzN2I3N2FiMTdmNGQ2Nzc4
ODU2N2U1MWM3MTQxYTA3MGM5MzVkYi4uMTMwMDA3ODYwOTg0NmEwM2MzMGZhYjMwN2E4OWMzMDQz
NzNiNGY5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKQEAgLTk4LDYgKzk4LDggQEAgcHVibGljOgogICAgIGNv
bnN0IFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0LnRvUG9z
aXRpb24oKTsgfQogICAgIGNvbnN0IFBvc2l0aW9uIGVuZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9lbmQudG9Qb3NpdGlvbigpOyB9CiAKKyAgICBib29sIGdldExvY2F0aW9uQW5kTGVuZ3Ro
KHNpemVfdCYgbG9jYXRpb24sIHNpemVfdCYgbGVuZ3RoKTsKKwogICAgIE5vZGUqIGZpcnN0Tm9k
ZSgpIGNvbnN0OwogICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSgpIGNvbnN0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCmluZGV4IDE5MWNlMjljZGI2MWI4MzkyNmRjNTI2YzRiYjI4OWY3MDQ1OGMzZTUuLjM5
ZGRiNmI0MjMwYTNiZmJjMmYxMGNlNGU2ODYyZDJiOGFkZDU0MmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCkBAIC04MDQsNiArODA0LDMxIEBAIERvY3VtZW50KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50
KGNvbnN0IEludFBvaW50JiBwb2ludCkKICAgICByZXR1cm4gcmVzdWx0LmlubmVyTm9kZSgpID8g
cmVzdWx0LmlubmVyTm9kZSgpLT5kb2N1bWVudCgpIDogMDsKIH0KIAorUGFzc1JlZlB0cjxSYW5n
ZT4gRnJhbWU6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpCit7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJh
bWVQb2ludCk7CisgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHBvc2l0aW9uLnByZXZpb3VzKCk7Cisg
ICAgaWYgKHByZXZpb3VzLmlzTm90TnVsbCgpKSB7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gcHJl
dmlvdXNDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwcmV2aW91cywgcG9zaXRpb24pOworICAg
ICAgICBJbnRSZWN0IHJlY3QgPSBlZGl0b3IoKS0+Zmlyc3RSZWN0Rm9yUmFuZ2UocHJldmlvdXND
aGFyYWN0ZXJSYW5nZS5nZXQoKSk7CisgICAgICAgIGlmIChyZWN0LmNvbnRhaW5zKGZyYW1lUG9p
bnQpKQorICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UucmVsZWFzZSgp
OworICAgIH0KKworICAgIFZpc2libGVQb3NpdGlvbiBuZXh0ID0gcG9zaXRpb24ubmV4dCgpOwor
ICAgIGlmIChuZXh0LmlzTm90TnVsbCgpKSB7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gbmV4dENo
YXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBvc2l0aW9uLCBuZXh0KTsKKyAgICAgICAgSW50UmVj
dCByZWN0ID0gZWRpdG9yKCktPmZpcnN0UmVjdEZvclJhbmdlKG5leHRDaGFyYWN0ZXJSYW5nZS5n
ZXQoKSk7CisgICAgICAgIGlmIChyZWN0LmNvbnRhaW5zKGZyYW1lUG9pbnQpKQorICAgICAgICAg
ICAgcmV0dXJuIG5leHRDaGFyYWN0ZXJSYW5nZS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgcmV0
dXJuIDA7Cit9CisKIHZvaWQgRnJhbWU6OmNyZWF0ZVZpZXcoY29uc3QgSW50U2l6ZSYgdmlld3Bv
cnRTaXplLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb2xvciYgYmFja2dyb3VuZENv
bG9yLCBib29sIHRyYW5zcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRT
aXplJiBmaXhlZExheW91dFNpemUsIGJvb2wgdXNlRml4ZWRMYXlvdXQsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgK
aW5kZXggZjIyZmNiODYxZmE4MzU2ZmI4YTRhMWQ0NjhhMmUxOTgwNWM4MGNjNC4uMDU4MDVjZjFl
MmU0OGRkNDNiZWY2ZjAyYWEzYTQ2ZDJmNjkzNDBmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaApAQCAtMTg0
LDYgKzE4NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpOwog
ICAgICAgICBEb2N1bWVudCogZG9jdW1lbnRBdFBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQ
b2ludCk7CisgICAgICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yUG9pbnQoY29uc3QgSW50
UG9pbnQmIGZyYW1lUG9pbnQpOwogCiAgICAgICAgIFN0cmluZyBzZWFyY2hGb3JMYWJlbHNBYm92
ZUNlbGwoUmVndWxhckV4cHJlc3Npb24qLCBIVE1MVGFibGVDZWxsRWxlbWVudCosIHNpemVfdCog
cmVzdWx0RGlzdGFuY2VGcm9tU3RhcnRPZkNlbGwpOwogICAgICAgICBTdHJpbmcgc2VhcmNoRm9y
TGFiZWxzQmVmb3JlRWxlbWVudChjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFiZWxzLCBFbGVtZW50
Kiwgc2l6ZV90KiByZXN1bHREaXN0YW5jZSwgYm9vbCogcmVzdWx0SXNJbkNlbGxBYm92ZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDFkNThhZjRmNTAzZDE0ZmVkZDczMjU2NjE4YzY5
ODU5MTVjOWIzN2QuLjhkMTIxNjljZjEwYTZjNGVmMzdhYWU4MmQyZWExZjlhZDE0Nzg4MmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMDMtMjIgIFJv
YmVydCBTZXNlayAgPHJzZXNla0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0Nocm9taXVtXSBJbXBsZW1lbnQgV2ViS2l0IG1l
dGhvZHMgdG8gYXNzaXN0IHdpdGggQ29jb2EgTlNUZXh0SW5wdXQgaW1wbGVtZW50YXRpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0OTY5CisKKyAg
ICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5oOgorICAgICAg
ICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAgICAgKiBwdWJsaWMvbWFjL1dlYlRleHRIZWxw
ZXIuaDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZyYW1lSW1wbDo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnQpOgorICAgICAg
ICAqIHNyYy9XZWJGcmFtZUltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51SW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6OmNvbXBvc2l0aW9uUmFuZ2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpjYXJldE9yU2VsZWN0aW9uUmFu
Z2UpOgorICAgICAgICAqIHNyYy9XZWJQb3B1cE1lbnVJbXBsLmg6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXBvc2l0aW9u
UmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y2FyZXRPclNlbGVjdGlvblJh
bmdlKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKiBzcmMvbWFjL1dl
YlRleHRIZWxwZXIubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpnZXRXZWJGcmFtZUltcGwp
OgorICAgICAgICAoV2ViS2l0OjpyYW5nZVNjb3BlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVGV4
dEhlbHBlcjo6V2ViVGV4dEhlbHBlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlRleHRIZWxwZXI6
OnN1YnN0cmluZ0luUmFuZ2UpOgorCiAyMDExLTAzLTIxICBBZGFtIEtsZWluICA8YWRhbWtAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCmluZGV4IDQ1MzhmMzEzNTY4MDJiNWMwMWEwZjJkNmEyZjI5OTQ2ZWY0
MThhZDYuLmQwZGY5OThjOTY2ZmVkM2IzMDk4YWE4Mjc2MmNiZWE4ZWVhMDlkNTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTk2LDYgKzk2LDcgQEAKICAgICAgICAgICAgICAgICAn
cHVibGljL21hYy9XZWJJbnB1dEV2ZW50RmFjdG9yeS5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL21hYy9XZWJTYW5kYm94U3VwcG9ydC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL21h
Yy9XZWJTY3JlZW5JbmZvRmFjdG9yeS5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL21hYy9X
ZWJUZXh0SGVscGVyLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvbWFjL1dlYlRoZW1lRW5n
aW5lLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQWNjZXNzaWJpbGl0eUNhY2hlLmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbi5o
JywKQEAgLTM4MSw2ICszODIsNyBAQAogICAgICAgICAgICAgICAgICdzcmMveDExL1dlYlNjcmVl
bkluZm9GYWN0b3J5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9tYWMvV2ViSW5wdXRFdmVu
dEZhY3RvcnkubW0nLAogICAgICAgICAgICAgICAgICdzcmMvbWFjL1dlYlNjcmVlbkluZm9GYWN0
b3J5Lm1tJywKKyAgICAgICAgICAgICAgICAnc3JjL21hYy9XZWJUZXh0SGVscGVyLm1tJywKICAg
ICAgICAgICAgICAgICAnc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9Mb2NhbGl6ZWRTdHJpbmdzLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkZyYW1lLmgKaW5kZXggNTcxZDk1ODIzODQzMjYwNTYxMTU1ZmFjMzYwOWVjMGRm
NTBjZjZhZi4uOTQ2MDQ3NzYzOGIyYzk4Y2RiN2Q0MTE5ODJjYzk5M2FhZWQyNDYxNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCkBAIC02Nyw2ICs2Nyw3IEBAIGNs
YXNzIFdlYlVSTFJlcXVlc3Q7CiBjbGFzcyBXZWJWaWV3Owogc3RydWN0IFdlYkNvbnNvbGVNZXNz
YWdlOwogc3RydWN0IFdlYkZpbmRPcHRpb25zOworc3RydWN0IFdlYlBvaW50Owogc3RydWN0IFdl
YlJlY3Q7CiBzdHJ1Y3QgV2ViU2NyaXB0U291cmNlOwogc3RydWN0IFdlYlNpemU7CkBAIC0zNzks
OCArMzgwLDE1IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgV2ViUmFuZ2UgbWFya2VkUmFuZ2Uo
KSBjb25zdCA9IDA7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBmcmFtZSByZWN0YW5nbGUgaW4gd2lu
ZG93IGNvb3JkaW5hdGUgc3BhY2Ugb2YgdGhlIGdpdmVuIHRleHQKKyAgICAvLyByYW5nZS4KICAg
ICB2aXJ0dWFsIGJvb2wgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodW5zaWduZWQgbG9jYXRp
b24sIHVuc2lnbmVkIGxlbmd0aCwgV2ViUmVjdCYpIGNvbnN0ID0gMDsKIAorICAgIC8vIFJldHVy
bnMgdGhlIGluZGV4IG9mIGEgY2hhcmFjdGVyIGluIHRoZSBGcmFtZSdzIHRleHQgc3RyZWFtIGF0
IHRoZSBnaXZlbgorICAgIC8vIHBvaW50LiBUaGUgcG9pbnQgaXMgaW4gdGhlIHdpbmRvdyBjb29y
ZGluYXRlIHNwYWNlLiBXaWxsIHJldHVybgorICAgIC8vIFdURjo6bm90Rm91bmQgaWYgdGhlIHBv
aW50IGlzIGludmFsaWQuCisgICAgdmlydHVhbCBzaXplX3QgY2hhcmFjdGVySW5kZXhGb3JQb2lu
dChjb25zdCBXZWJQb2ludCYpIGNvbnN0ID0gMDsKKwogICAgIC8vIFN1cHBvcnRzIGNvbW1hbmRz
IGxpa2UgVW5kbywgUmVkbywgQ3V0LCBDb3B5LCBQYXN0ZSwgU2VsZWN0QWxsLAogICAgIC8vIFVu
c2VsZWN0LCBldGMuIFNlZSBFZGl0b3JDb21tYW5kLmNwcCBmb3IgdGhlIGZ1bGwgbGlzdCBvZiBz
dXBwb3J0ZWQKICAgICAvLyBjb21tYW5kcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYldpZGdldC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViV2lkZ2V0LmgKaW5kZXggMzZmYmYzMTNhZDE3NDY0YzQxZDhkOTI3Y2IyMTMyYWRhYjZhZTg4
MS4uZWEyZjlkNTg5YWJhMTc3MTc5Mjg4YmQ3NDZhOTE1MDM3Yjg4OWQwNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKQEAgLTQwLDYgKzQwLDcgQEAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJJbnB1dEV2ZW50OworY2xhc3MgV2ViUmFuZ2U7CiBj
bGFzcyBXZWJTdHJpbmc7CiBzdHJ1Y3QgV2ViUmVjdDsKIHN0cnVjdCBXZWJTaXplOwpAQCAtMTE5
LDYgKzEyMCwxMCBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFu
IG9uZ29pbmcgY29tcG9zaXRpb24gb3IgdGhlIHRleHQgaXMgaW5zZXJ0ZWQuCiAgICAgdmlydHVh
bCBib29sIGNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBXZWJTdHJpbmcmIHRleHQpID0gMDsKIAor
ICAgIC8vIFJldHVybnMgdGhlIGNoYXJhY3RlciByYW5nZSBvZiB0aGUgY3VycmVudCBjb21wb3Np
dGlvbi4gVGhpcyBpcyBhbHNvCisgICAgLy8gcmVmZXJyZWQgdG8gYXMgdGhlIG1hcmtlZCByYW5n
ZS4KKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRpb25SYW5nZShzaXplX3QqIGxvY2F0aW9uLCBz
aXplX3QqIGxlbmd0aCkgPSAwOworCiAgICAgLy8gUmV0dXJucyB0aGUgY3VycmVudCB0ZXh0IGlu
cHV0IHR5cGUgb2YgdGhpcyBXZWJXaWRnZXQuCiAgICAgdmlydHVhbCBXZWJUZXh0SW5wdXRUeXBl
IHRleHRJbnB1dFR5cGUoKSA9IDA7CiAKQEAgLTEyNiw2ICsxMzEsMTEgQEAgcHVibGljOgogICAg
IC8vIHdpbGwgYmUgcmV0dXJuZWQgaWYgYSBzZWxlY3Rpb24gcmFuZ2UgaXMgYXZhaWxhYmxlLgog
ICAgIHZpcnR1YWwgV2ViUmVjdCBjYXJldE9yU2VsZWN0aW9uQm91bmRzKCkgPSAwOwogCisgICAg
Ly8gUmV0dXJucyB0aGUgY3VycmVudCBzZWxlY3Rpb24gcmFuZ2Ugb2YgdGhpcyBXZWJXaWRnZXQu
IElmIHRoZXJlIGlzIG5vCisgICAgLy8gc2VsZWN0aW9uLCBpdCB3aWxsIHJldHVybiBhIDAtbGVu
Z3RoIHJhbmdlIHdpdGggdGhlIGxvY2F0aW9uIGF0IHRoZQorICAgIC8vIGNhcmV0LgorICAgIHZp
cnR1YWwgYm9vbCBjYXJldE9yU2VsZWN0aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90
KiBsZW5ndGgpID0gMDsKKwogICAgIC8vIENoYW5nZXMgdGhlIHRleHQgZGlyZWN0aW9uIG9mIHRo
ZSBzZWxlY3RlZCBpbnB1dCBub2RlLgogICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0RGlyZWN0aW9u
KFdlYlRleHREaXJlY3Rpb24pID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvbWFjL1dlYlRleHRIZWxwZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL21hYy9XZWJUZXh0SGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjk0ZDE3MTJmNjA5Mzc4ZjMx
MGQyZGFiY2U3YmNkYjJlYzdhMTcyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL21hYy9XZWJUZXh0SGVscGVyLmgKQEAgLTAsMCArMSw1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViVGV4dEhlbHBlcl9oCisjZGVmaW5lIFdlYlRleHRIZWxwZXJfaAorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViU3RyaW5nOworfQorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworLy8gVGhpcyBjbGFzcyBpcyBhIGhlbHBlciBmb3IgaW1wbGVtZW50aW5n
IHBhcnQgb2YgdGhlIE5TVGV4dElucHV0IHByb3RvY29sIG9uCisvLyB0aGUgcmVuZGVyZXIgc2lk
ZS4gSW4gdGhlIGZ1dHVyZSBpdCBzaG91bGQgYmUgZ2VuZXJhbGl6ZWQgdG8gc3VwcG9ydCBpbnB1
dAorLy8gbWV0aG9kIGNvbXBvc2l0aW9uIGFjcm9zcyBhbGwgcGxhdGZvcm1zLgorY2xhc3MgV2Vi
VGV4dEhlbHBlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV2ViVGV4dEhlbHBlcihXZWJGcmFt
ZSopOworCisgICAgLy8gUmV0dXJucyBhIHNlcmlhbGl6ZWQgTlNBdHRyaWJ1dGVkU3RyaW5nICh2
aWEgTlNEYXRhKSB0aGF0IGlzIGEgc3Vic3RyaW5nCisgICAgLy8gb2YgdGhlIEZyYW1lIGF0IHRo
ZSBnaXZlbiByYW5nZS4KKyAgICBXZWJTdHJpbmcgc3Vic3RyaW5nSW5SYW5nZShzaXplX3QgbG9j
YXRpb24sIHNpemVfdCBsZW5ndGgpOworCitwcm90ZWN0ZWQ6CisgICAgV2ViRnJhbWUqIG1fZnJh
bWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAppbmRleCA2ODhlNjc3MTVhMjViNGQyZGVj
MjhlNmRiNzI3ZjQzNzUwMWI0NTg0Li4xNDE2Yzk4Mjk1ZTdjOTNhNTJhNGE1ZTBiYTU3YmU1Nzgz
ZjhjOWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUlt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAK
QEAgLTg1LDYgKzg1LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRl
ICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGb3JtU3RhdGUuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKQEAgLTk4LDYgKzk5
LDcgQEAKICNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgInBhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCIKQEAgLTExMzAsMTEgKzEx
MzIsMzAgQEAgYm9vbCBXZWJGcmFtZUltcGw6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKHVu
c2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgKICAgICBpZiAoIXJhbmdlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgSW50UmVjdCBpbnRSZWN0ID0gZnJhbWUoKS0+ZWRpdG9yKCkt
PmZpcnN0UmVjdEZvclJhbmdlKHJhbmdlLmdldCgpKTsKLSAgICByZWN0ID0gV2ViUmVjdChpbnRS
ZWN0LngoKSwgaW50UmVjdC55KCksIGludFJlY3Qud2lkdGgoKSwgaW50UmVjdC5oZWlnaHQoKSk7
CisgICAgcmVjdCA9IFdlYlJlY3QoaW50UmVjdCk7CisgICAgLy8gV2hlbiBpbnNpZGUgYW4gdGV4
dCBjb250cm9sLCBkb24ndCBhZGp1c3QgdGhlIHJhbmdlLgorICAgIGlmICghc2VsZWN0aW9uUm9v
dCkKKyAgICAgICAgcmVjdCA9IGZyYW1lKCktPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0
KTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCitzaXplX3QgV2ViRnJhbWVJbXBsOjpjaGFyYWN0
ZXJJbmRleEZvclBvaW50KGNvbnN0IFdlYlBvaW50JiB3ZWJQb2ludCkgY29uc3QKK3sKKyAgICBp
ZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiBub3RGb3VuZDsKKworICAgIEludFBvaW50IHBv
aW50ID0gZnJhbWUoKS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHdlYlBvaW50KTsKKyAgICBI
aXRUZXN0UmVzdWx0IHJlc3VsdCA9IGZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVz
dWx0QXRQb2ludChwb2ludCwgZmFsc2UpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFt
ZSgpLT5yYW5nZUZvclBvaW50KHJlc3VsdC5wb2ludCgpKTsKKyAgICBpZiAoIXJhbmdlLmdldCgp
KQorICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisKKyAgICBzaXplX3QgbG9jYXRpb24sIGxlbmd0
aDsKKyAgICByYW5nZS0+Z2V0TG9jYXRpb25BbmRMZW5ndGgobG9jYXRpb24sIGxlbmd0aCk7Cisg
ICAgcmV0dXJuIGxvY2F0aW9uOworfQorCiBib29sIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZUNvbW1h
bmQoY29uc3QgV2ViU3RyaW5nJiBuYW1lKQogewogICAgIEFTU0VSVChmcmFtZSgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKaW5kZXggMTllYjZkM2VhNDUyYWQ3
YTAwYTE5MWZhOWI4OTk1ZGU3MjljYzhhMy4uMmVkYTQxY2I4NjlhYmUxMzdlNTU5OTk0MjQzY2Ey
ZjQ1Yjk1YWI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJh
bWVJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgK
QEAgLTE0NSw2ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc01hcmtlZFRl
eHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYlJhbmdlIG1hcmtlZFJhbmdlKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKHVuc2lnbmVkIGxvY2F0
aW9uLCB1bnNpZ25lZCBsZW5ndGgsIFdlYlJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHNpemVf
dCBjaGFyYWN0ZXJJbmRleEZvclBvaW50KGNvbnN0IFdlYlBvaW50JikgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGV4ZWN1dGVDb21tYW5kKGNvbnN0IFdlYlN0cmluZyYpOwogICAgIHZpcnR1YWwg
Ym9vbCBleGVjdXRlQ29tbWFuZChjb25zdCBXZWJTdHJpbmcmLCBjb25zdCBXZWJTdHJpbmcmIHZh
bHVlKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb21tYW5kRW5hYmxlZChjb25zdCBXZWJTdHJpbmcm
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVw
TWVudUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1w
bC5jcHAKaW5kZXggYjRkNDI0NmMzZjYwMTBiY2FmNTAyMWQ0Y2Q5NjgxYWJmYzM5M2RiNS4uNmE2
NDFhOTE0MmIyOGQ2MjJmMTlhZmM3OTQ2ZGU0ZGI0OWRmNGFlMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKQEAgLTQzLDYgKzQzLDcgQEAK
IAogI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIKICNpbmNsdWRlICJXZWJJbnB1dEV2ZW50Q29u
dmVyc2lvbi5oIgorI2luY2x1ZGUgIldlYlJhbmdlLmgiCiAjaW5jbHVkZSAiV2ViUmVjdC5oIgog
I2luY2x1ZGUgIldlYldpZGdldENsaWVudC5oIgogCkBAIC0yNTIsNiArMjUzLDEzIEBAIGJvb2wg
V2ViUG9wdXBNZW51SW1wbDo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFdlYlN0cmluZyYgdGV4
dCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgV2ViUG9wdXBNZW51SW1wbDo6Y29tcG9z
aXRpb25SYW5nZShzaXplX3QqIGxvY2F0aW9uLCBzaXplX3QqIGxlbmd0aCkKK3sKKyAgICAqbG9j
YXRpb24gPSAwOworICAgICpsZW5ndGggPSAwOworICAgIHJldHVybiBmYWxzZTsKK30KKwogV2Vi
VGV4dElucHV0VHlwZSBXZWJQb3B1cE1lbnVJbXBsOjp0ZXh0SW5wdXRUeXBlKCkKIHsKICAgICBy
ZXR1cm4gV2ViVGV4dElucHV0VHlwZU5vbmU7CkBAIC0yNjIsNiArMjcwLDEzIEBAIFdlYlJlY3Qg
V2ViUG9wdXBNZW51SW1wbDo6Y2FyZXRPclNlbGVjdGlvbkJvdW5kcygpCiAgICAgcmV0dXJuIFdl
YlJlY3QoKTsKIH0KIAorYm9vbCBXZWJQb3B1cE1lbnVJbXBsOjpjYXJldE9yU2VsZWN0aW9uUmFu
Z2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90KiBsZW5ndGgpCit7CisgICAgKmxvY2F0aW9uID0g
MDsKKyAgICAqbGVuZ3RoID0gMDsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgV2ViUG9w
dXBNZW51SW1wbDo6c2V0VGV4dERpcmVjdGlvbihXZWJUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikK
IHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVu
dUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaApp
bmRleCA3YmI5ZjdlNWEyMDUyY2JmOGM3MmRmMGNlMGM0NzVlZmMxYTdiNWU5Li4wMmQ2OThiYmIz
MWE4NWZiMmY5OTNjYTExZjhkN2MzNjVhMjlmMjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCkBAIC01MSw2ICs1MSw3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogY2xhc3MgV2ViS2V5Ym9hcmRFdmVudDsKIGNsYXNzIFdlYk1vdXNlRXZlbnQ7CiBj
bGFzcyBXZWJNb3VzZVdoZWVsRXZlbnQ7CitjbGFzcyBXZWJSYW5nZTsKIHN0cnVjdCBXZWJSZWN0
OwogCiBjbGFzcyBXZWJQb3B1cE1lbnVJbXBsIDogcHVibGljIFdlYlBvcHVwTWVudSwKQEAgLTc2
LDggKzc3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgaW50IHNlbGVjdGlvblN0YXJ0LCBpbnQgc2Vs
ZWN0aW9uRW5kKTsKICAgICB2aXJ0dWFsIGJvb2wgY29uZmlybUNvbXBvc2l0aW9uKCk7CiAgICAg
dmlydHVhbCBib29sIGNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBXZWJTdHJpbmcmIHRleHQpOwor
ICAgIHZpcnR1YWwgYm9vbCBjb21wb3NpdGlvblJhbmdlKHNpemVfdCogbG9jYXRpb24sIHNpemVf
dCogbGVuZ3RoKTsKICAgICB2aXJ0dWFsIFdlYlRleHRJbnB1dFR5cGUgdGV4dElucHV0VHlwZSgp
OwogICAgIHZpcnR1YWwgV2ViUmVjdCBjYXJldE9yU2VsZWN0aW9uQm91bmRzKCk7CisgICAgdmly
dHVhbCBib29sIGNhcmV0T3JTZWxlY3Rpb25SYW5nZShzaXplX3QqIGxvY2F0aW9uLCBzaXplX3Qq
IGxlbmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFRleHREaXJlY3Rpb24oV2ViVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24pOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggMTAyNTk2YjczMTk4Yzg2ODFhYTdlMWRmOGRh
ZWY1ZTY2YmFmY2QwMS4uZDY1ZTc5N2MzNjk5ZjFjMjRiZjZlMmI1YmQ1ZDUyMDUzOTAzOGI4MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMTE0LDYg
KzExNCw3IEBACiAjaW5jbHVkZSAiV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oIgogI2luY2x1ZGUg
IldlYlBvaW50LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51SW1wbC5oIgorI2luY2x1ZGUgIldl
YlJhbmdlLmgiCiAjaW5jbHVkZSAiV2ViUmVjdC5oIgogI2luY2x1ZGUgIldlYlJ1bnRpbWVGZWF0
dXJlcy5oIgogI2luY2x1ZGUgIldlYlNldHRpbmdzSW1wbC5oIgpAQCAtMTM4NCw2ICsxMzg1LDI0
IEBAIGJvb2wgV2ViVmlld0ltcGw6OmNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBXZWJTdHJpbmcm
IHRleHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgV2ViVmlld0ltcGw6OmNvbXBvc2l0
aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90KiBsZW5ndGgpCit7CisgICAgRnJhbWUq
IGZvY3VzZWQgPSBmb2N1c2VkV2ViQ29yZUZyYW1lKCk7CisgICAgaWYgKCFmb2N1c2VkIHx8ICFt
X2ltZUFjY2VwdEV2ZW50cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEVkaXRvciogZWRp
dG9yID0gZm9jdXNlZC0+ZWRpdG9yKCk7CisgICAgaWYgKCFlZGl0b3IgfHwgIWVkaXRvci0+aGFz
Q29tcG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IGVkaXRvci0+Y29tcG9zaXRpb25SYW5nZSgpOworICAgIGlmICghcmFuZ2UuZ2V0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChyYW5nZS0+Z2V0TG9jYXRpb25B
bmRMZW5ndGgoKmxvY2F0aW9uLCAqbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCiBXZWJUZXh0SW5wdXRUeXBlIFdlYlZpZXdJbXBsOjp0ZXh0SW5w
dXRUeXBlKCkKIHsKICAgICBXZWJUZXh0SW5wdXRUeXBlIHR5cGUgPSBXZWJUZXh0SW5wdXRUeXBl
Tm9uZTsKQEAgLTE0NDQsNiArMTQ2MywyNSBAQCBXZWJSZWN0IFdlYlZpZXdJbXBsOjpjYXJldE9y
U2VsZWN0aW9uQm91bmRzKCkKICAgICByZXR1cm4gcmVjdDsKIH0KIAorYm9vbCBXZWJWaWV3SW1w
bDo6Y2FyZXRPclNlbGVjdGlvblJhbmdlKHNpemVfdCogbG9jYXRpb24sIHNpemVfdCogbGVuZ3Ro
KQoreworICAgIGNvbnN0IEZyYW1lKiBmb2N1c2VkID0gZm9jdXNlZFdlYkNvcmVGcmFtZSgpOwor
ICAgIGlmICghZm9jdXNlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2VsZWN0aW9u
Q29udHJvbGxlciogY29udHJvbGxlciA9IGZvY3VzZWQtPnNlbGVjdGlvbigpOworICAgIGlmICgh
Y29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IGNvbnRyb2xsZXItPnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBpZiAoIXJh
bmdlLmdldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAocmFuZ2UtPmdldExv
Y2F0aW9uQW5kTGVuZ3RoKCpsb2NhdGlvbiwgKmxlbmd0aCkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBXZWJWaWV3SW1wbDo6c2V0VGV4dERpcmVj
dGlvbihXZWJUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICAvLyBUaGUgRWRpdG9yOjpz
ZXRCYXNlV3JpdGluZ0RpcmVjdGlvbigpIGZ1bmN0aW9uIGNoZWNrcyBpZiB3ZSBjYW4gY2hhbmdl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCAwOGYwM2M0OTkw
ZWRhYzc0MjcwNGJkMmE2MWM2MGMxNWFhMWE4NjJlLi43N2FlOTNiMzZhZjcyODU3OWE1N2FjMDFh
ZWY2NmZjNTdlZmYxOTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmgKQEAgLTEwNyw4ICsxMDcsMTAgQEAgcHVibGljOgogICAgICAgICBpbnQgc2VsZWN0aW9uRW5k
KTsKICAgICB2aXJ0dWFsIGJvb2wgY29uZmlybUNvbXBvc2l0aW9uKCk7CiAgICAgdmlydHVhbCBi
b29sIGNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBXZWJTdHJpbmcmIHRleHQpOworICAgIHZpcnR1
YWwgYm9vbCBjb21wb3NpdGlvblJhbmdlKHNpemVfdCogbG9jYXRpb24sIHNpemVfdCogbGVuZ3Ro
KTsKICAgICB2aXJ0dWFsIFdlYlRleHRJbnB1dFR5cGUgdGV4dElucHV0VHlwZSgpOwogICAgIHZp
cnR1YWwgV2ViUmVjdCBjYXJldE9yU2VsZWN0aW9uQm91bmRzKCk7CisgICAgdmlydHVhbCBib29s
IGNhcmV0T3JTZWxlY3Rpb25SYW5nZShzaXplX3QqIGxvY2F0aW9uLCBzaXplX3QqIGxlbmd0aCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldFRleHREaXJlY3Rpb24oV2ViVGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24pOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUo
KSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvbWFjL1dl
YlRleHRIZWxwZXIubW0gYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9tYWMvV2ViVGV4dEhl
bHBlci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zNmM4ODA4NGY4YmY2MGI4YzYzOTdiMGM3ZWEzNGUyMzJjYzk0
NTcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvbWFjL1dl
YlRleHRIZWxwZXIubW0KQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViVGV4dEhlbHBlci5oIgorCisj
aW5jbHVkZSAiQ29sb3JNYWMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2lu
Y2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlJhbmdl
LmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiV2ViUmVjdC5oIgorI2lu
Y2x1ZGUgIldlYlN0cmluZy5oIgorCisjaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIEhlbHBlciBmdW5j
dGlvbnMuCisKK1dlYkZyYW1lSW1wbCogZ2V0V2ViRnJhbWVJbXBsKFdlYkZyYW1lKiBmcmFtZSkK
K3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViRnJhbWVJbXBsKj4oZnJhbWUpOworfQorCitF
bGVtZW50KiByYW5nZVNjb3BlKFdlYkZyYW1lKiB3ZWJGcmFtZSkKK3sKKyAgICBGcmFtZSogZnJh
bWUgPSBnZXRXZWJGcmFtZUltcGwod2ViRnJhbWUpLT5mcmFtZSgpOworICAgIEVsZW1lbnQqIHNl
bGVjdGlvblJvb3QgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsK
KyAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBmcmFtZS0+ZG9jdW1l
bnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisK
K1dlYlRleHRIZWxwZXI6OldlYlRleHRIZWxwZXIoV2ViRnJhbWUqIGZyYW1lKQorICAgIDogbV9m
cmFtZShmcmFtZSkKK3sKK30KKworLy8gVGhpcyBmdW5jdGlvbiBpcyBjb3BpZWQgZnJvbSAvV2Vi
S2l0L21hYy9NaXNjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5tbS4KK1dlYktpdDo6V2Vi
U3RyaW5nIFdlYlRleHRIZWxwZXI6OnN1YnN0cmluZ0luUmFuZ2Uoc2l6ZV90IGxvY2F0aW9uLCBz
aXplX3QgbGVuZ3RoKQoreworICAgIEZyYW1lKiBmcmFtZSA9IGdldFdlYkZyYW1lSW1wbChtX2Zy
YW1lKS0+ZnJhbWUoKTsKKyAgICBpZiAoZnJhbWUtPnZpZXcoKS0+bmVlZHNMYXlvdXQoKSkKKyAg
ICAgICAgZnJhbWUtPnZpZXcoKS0+bGF5b3V0KCk7CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
KFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgocmFuZ2VTY29wZShtX2Zy
YW1lKSwgbG9jYXRpb24sIGxlbmd0aCkpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVy
biBXZWJLaXQ6OldlYlN0cmluZygpOworCisgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyog
c3RyaW5nID0gW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XTsKKyAgICBO
U011dGFibGVEaWN0aW9uYXJ5KiBhdHRycyA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25h
cnldOworCisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOworICAgIGZvciAoVGV4dEl0ZXJhdG9y
IGl0KHJhbmdlLmdldCgpKTsgIWl0LmF0RW5kKCkgJiYgW3N0cmluZyBsZW5ndGhdIDwgbGVuZ3Ro
OyBpdC5hZHZhbmNlKCkpIHsKKyAgICAgICAgdW5zaWduZWQgbnVtQ2hhcmFjdGVycyA9IGl0Lmxl
bmd0aCgpOworICAgICAgICBpZiAoIW51bUNoYXJhY3RlcnMpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbiA9IDA7CisgICAgICAgIE5vZGUq
IGNvbnRhaW5lciA9IGl0LnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbik7CisgICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb250YWluZXItPnJlbmRlcmVyKCk7CisgICAg
ICAgIEFTU0VSVChyZW5kZXJlcik7CisgICAgICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5
bGUoKTsKKyAgICAgICAgTlNGb250KiBmb250ID0gc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgp
LT5nZXROU0ZvbnQoKTsKKyAgICAgICAgLy8gSWYgdGhlIHBsYXRmb3JtIGZvbnQgY2FuJ3QgYmUg
bG9hZGVkLCBpdCdzIGxpa2VseSB0aGF0IHRoZSBzaXRlIGlzCisgICAgICAgIC8vIHVzaW5nIGEg
d2ViIGZvbnQuIEZvciBub3csIGp1c3QgdXNlIHRoZSBkZWZhdWx0IGZvbnQgaW5zdGVhZC4KKyAg
ICAgICAgLy8gVE9ETyhyc2VzZWspOiBDaGFuZ2UgdGhlIGZvbnQgYWN0aXZhdGlvbiBmbGFncyB0
byBhbGxvdyBvdGhlciBwcm9jZXNzZXMKKyAgICAgICAgLy8gdG8gdXNlIHRoZSBmb250LgorICAg
ICAgICBpZiAoIWZvbnQpCisgICAgICAgICAgZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6
ZTpzdHlsZS0+Zm9udCgpLnNpemUoKV07CisgICAgICAgIFthdHRycyBzZXRPYmplY3Q6Zm9udCBm
b3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisKKyAgICAgICAgaWYgKHN0eWxlLT52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikuYWxwaGEoKSkKKyAgICAgICAgICAgIFth
dHRycyBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5Q29sb3IpKSBmb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgW2F0dHJzIHJlbW92ZU9iamVjdEZvcktleTpOU0ZvcmVn
cm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuYWxwaGEoKSkKKyAgICAgICAg
ICAgIFthdHRycyBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0
cmlidXRlTmFtZV07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFthdHRycyByZW1vdmVPYmpl
Y3RGb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKworICAgICAgICBOU1N0
cmluZyogc3Vic3RyaW5nID0KKyAgICAgICAgICAgIFtbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0
aENoYXJhY3RlcnNOb0NvcHk6Y29uc3RfY2FzdDxVQ2hhcio+KGl0LmNoYXJhY3RlcnMoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6aXQu
bGVuZ3RoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVl
V2hlbkRvbmU6Tk9dIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgW3N0cmluZyByZXBsYWNlQ2hhcmFj
dGVyc0luUmFuZ2U6TlNNYWtlUmFuZ2UocG9zaXRpb24sIDApCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aXRoU3RyaW5nOnN1YnN0cmluZ107CisgICAgICAgIFtzdHJpbmcgc2V0QXR0
cmlidXRlczphdHRycyByYW5nZTpOU01ha2VSYW5nZShwb3NpdGlvbiwgbnVtQ2hhcmFjdGVycyld
OworICAgICAgICBwb3NpdGlvbiArPSBudW1DaGFyYWN0ZXJzOworICAgIH0KKyAgICBOU0RhdGEq
IGFyY2hpdmVkRGF0YShbTlNBcmNoaXZlciBhcmNoaXZlZERhdGFXaXRoUm9vdE9iamVjdDpzdHJp
bmddKTsKKyAgICBpZiAoIWFyY2hpdmVkRGF0YSkKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygp
OworICAgIHJldHVybiBXZWJLaXQ6OldlYlN0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBXZWJVQ2hh
cio+KFthcmNoaXZlZERhdGEgYnl0ZXNdKSwKKyAgICAgICAgW2FyY2hpdmVkRGF0YSBsZW5ndGhd
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNWEzYmMzNGJhNTIw
OTNmNmJlOTZmZmY0NjI4ZTc1NDQ0ZjUwODQ1My4uMjdmMjhiMWNiYzY5N2NhOWI3ZTA4MDQxMWJm
ZGU5MDdkNzIyMjIwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDExLTAzLTIyICBS
b2JlcnQgU2VzZWsgIDxyc2VzZWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gSW1wbGVtZW50IFdlYktpdCBt
ZXRob2RzIHRvIGFzc2lzdCB3aXRoIENvY29hIE5TVGV4dElucHV0IGltcGxlbWVudGF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDk2OQorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rp
b24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0TWFy
a2VkUmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjaGFyYWN0ZXJJbmRleEZvclBv
aW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBB
dExvY2F0aW9uKToKKwogMjAxMS0wMy0yMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IE1hYyByZWxlYXNlIGJ1aWxkcyBhZnRlciBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY3ODMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcApp
bmRleCBiOTU0MjgzNTkxMzM3ODBiNGNlZDYwYmY2M2Q5NWEzNmI5ZGUxNTBjLi5mYzJiM2YyMzUw
YzllOTc3MWY4MTViZGY5MjM5MjZhYjQzZjY4OTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3Bw
CkBAIC0xOTYsNyArMTk2LDkgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24oKQogICAgIHNlbGVjdGlvblN0YXRlLmlzSW5QYXNzd29yZEZpZWxkID0gZnJh
bWUtPnNlbGVjdGlvbigpLT5pc0luUGFzc3dvcmRGaWVsZCgpOwogICAgIHNlbGVjdGlvblN0YXRl
Lmhhc0NvbXBvc2l0aW9uID0gZnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpOwogCi0g
ICAgV2ViUGFnZTo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoZnJhbWUtPnNlbGVjdGlv
bigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBzZWxlY3Rpb25TdGF0ZS5zZWxlY3RlZFJh
bmdlU3RhcnQsIHNlbGVjdGlvblN0YXRlLnNlbGVjdGVkUmFuZ2VMZW5ndGgpOworICAgIFJhbmdl
KiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKTsK
KyAgICBpZiAocmFuZ2UpCisgICAgICAgIHJhbmdlLT5nZXRMb2NhdGlvbkFuZExlbmd0aChzZWxl
Y3Rpb25TdGF0ZS5zZWxlY3RlZFJhbmdlU3RhcnQsIHNlbGVjdGlvblN0YXRlLnNlbGVjdGVkUmFu
Z2VMZW5ndGgpOwogCiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNl
bGVjdGlvblN0YXRlQ2hhbmdlZChzZWxlY3Rpb25TdGF0ZSkpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggZGE3N2IwYjQ5OThjNjVhYzZm
YWRmM2E5ZWRiNjZmYTA2ZTk4OTA4OC4uZDY3NGQxY2NjNDlhNzVmM2JlMjIwNWJlYTE5ZjUxZGRk
YzJmMWE0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcApAQCAtODAzLDM1ICs4MDMsNiBAQCBXZWJDb250ZXh0TWVudSogV2ViUGFnZTo6Y29udGV4
dE1lbnUoKQogICAgIHJldHVybiBtX2NvbnRleHRNZW51LmdldCgpOwogfQogCi12b2lkIFdlYlBh
Z2U6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKFJhbmdlKiByYW5nZSwgdWludDY0X3Qm
IGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKQotewotICAgIGxvY2F0aW9uID0gbm90Rm91bmQ7
Ci0gICAgbGVuZ3RoID0gMDsKLQotICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5zdGFydENvbnRh
aW5lcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0g
cmFuZ2UtPm93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKLSAgICBFbGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rp
b25Sb290IDogcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAg
Ci0gICAgLy8gTW91c2UgZXZlbnRzIG1heSBjYXVzZSBUU00gdG8gYXR0ZW1wdCB0byBjcmVhdGUg
YW4gTlNSYW5nZSBmb3IgYSBwb3J0aW9uIG9mIHRoZSB2aWV3Ci0gICAgLy8gdGhhdCBpcyBub3Qg
aW5zaWRlIHRoZSBjdXJyZW50IGVkaXRhYmxlIHJlZ2lvbi4gIFRoZXNlIGNoZWNrcyBlbnN1cmUg
d2UgZG9uJ3QgcHJvZHVjZQotICAgIC8vIHBvdGVudGlhbGx5IGludmFsaWQgZGF0YSB3aGVuIHJl
c3BvbmRpbmcgdG8gc3VjaCByZXF1ZXN0cy4KLSAgICBpZiAocmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCkgIT0gc2NvcGUgJiYgIXJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5pc0Rlc2NlbmRhbnRPZihz
Y29wZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAocmFuZ2UtPmVuZENvbnRhaW5lcigpICE9
IHNjb3BlICYmICFyYW5nZS0+ZW5kQ29udGFpbmVyKCktPmlzRGVzY2VuZGFudE9mKHNjb3BlKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPFJhbmdlPiB0ZXN0UmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKHNjb3BlLT5kb2N1bWVudCgpLCBzY29wZSwgMCwgcmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKLSAgICBBU1NFUlQodGVzdFJhbmdlLT5zdGFydENv
bnRhaW5lcigpID09IHNjb3BlKTsKLSAgICBsb2NhdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgodGVzdFJhbmdlLmdldCgpKTsKLSAgICAKLSAgICBFeGNlcHRpb25Db2RlIGVjOwotICAg
IHRlc3RSYW5nZS0+c2V0RW5kKHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVuZE9mZnNl
dCgpLCBlYyk7Ci0gICAgQVNTRVJUKHRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29w
ZSk7Ci0gICAgbGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0
KCkpIC0gbG9jYXRpb247Ci19Ci0KIC8vIEV2ZW50cyAKIAogc3RhdGljIGNvbnN0IFdlYkV2ZW50
KiBnX2N1cnJlbnRFdmVudCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaAppbmRleCBhNTczZGUyMzI0MjJiOWFkNDU2YzVmMmFiYTI1YzY1OWZiMTE4ODBj
Li4wNjMxOWM1ZjFjYTIxZjQ4NDgwODM3Yzk2M2EzZTE4MzMzNzJlMjk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTI5MSw4ICsyOTEsNiBAQCBw
dWJsaWM6CiAKICAgICBTYW5kYm94RXh0ZW5zaW9uVHJhY2tlciYgc2FuZGJveEV4dGVuc2lvblRy
YWNrZXIoKSB7IHJldHVybiBtX3NhbmRib3hFeHRlbnNpb25UcmFja2VyOyB9CiAKLSAgICBzdGF0
aWMgdm9pZCBnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShXZWJDb3JlOjpSYW5nZSosIHVp
bnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCk7Ci0KICNpZiBQTEFURk9STShNQUMp
CiAgICAgdm9pZCByZWdpc3RlclVJUHJvY2Vzc0FjY2Vzc2liaWxpdHlUb2tlbnMoY29uc3QgQ29y
ZUlQQzo6RGF0YVJlZmVyZW5jZSYgZWxlbWVuVG9rZW4sIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZl
cmVuY2UmIHdpbmRvd1Rva2VuKTsKICAgICBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdCogYWNj
ZXNzaWJpbGl0eVJlbW90ZU9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IGJkMWIxMDliNmE1MDc0NDViOGRi
MmE1NzdkNTM3ZGRiMTM5ODkzYmEuLmYyZjE2MDJkZGY1MzVjM2M3ODM3OGY3OTAxYWVkN2JhODEw
ZjUzN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0KQEAgLTE2MCwzMyArMTYwLDEwIEBAIHZvaWQgV2ViUGFnZTo6Z2V0TWFy
a2VkUmFuZ2UodWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKQogICAgIEZyYW1l
KiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgp
OwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBnZXRMb2NhdGlv
bkFuZExlbmd0aEZyb21SYW5nZShmcmFtZS0+ZWRpdG9yKCktPmNvbXBvc2l0aW9uUmFuZ2UoKS5n
ZXQoKSwgbG9jYXRpb24sIGxlbmd0aCk7Ci19CiAKLXN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBj
aGFyYWN0ZXJSYW5nZUF0UG9pbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBJbnRQb2ludCYgcG9pbnQp
Ci17Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gZnJhbWUtPnZpc2libGVQb3NpdGlv
bkZvclBvaW50KHBvaW50KTsKLSAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHBvc2l0aW9uLnBy
ZXZpb3VzKCk7Ci0gICAgaWYgKHByZXZpb3VzLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIFJlZlB0
cjxSYW5nZT4gcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwcmV2aW91cywgcG9z
aXRpb24pOwotICAgICAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZS0+ZWRpdG9yKCktPmZpcnN0UmVj
dEZvclJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgICAgICBpZiAocmVj
dC5jb250YWlucyhwb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gcHJldmlvdXNDaGFyYWN0ZXJS
YW5nZS5yZWxlYXNlKCk7Ci0gICAgfQotICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBuZXh0ID0g
cG9zaXRpb24ubmV4dCgpOwotICAgIGlmIChuZXh0LmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIFJl
ZlB0cjxSYW5nZT4gbmV4dENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBvc2l0aW9uLCBuZXh0
KTsKLSAgICAgICAgSW50UmVjdCByZWN0ID0gZnJhbWUtPmVkaXRvcigpLT5maXJzdFJlY3RGb3JS
YW5nZShuZXh0Q2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgICAgICBpZiAocmVjdC5jb250YWlu
cyhwb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gbmV4dENoYXJhY3RlclJhbmdlLnJlbGVhc2Uo
KTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIDA7CisgICAgUmFuZ2UqIHJhbmdlID0gZnJhbWUt
PmVkaXRvcigpLT5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCk7CisgICAgaWYgKHJhbmdlKQorICAg
ICAgICByYW5nZS0+Z2V0TG9jYXRpb25BbmRMZW5ndGgobG9jYXRpb24sIGxlbmd0aCk7CiB9CiAg
ICAgCiB2b2lkIFdlYlBhZ2U6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnQoSW50UG9pbnQgcG9pbnQs
IHVpbnQ2NF90JiBpbmRleCkKQEAgLTE5OSwxMiArMTc2LDEyIEBAIHZvaWQgV2ViUGFnZTo6Y2hh
cmFjdGVySW5kZXhGb3JQb2ludChJbnRQb2ludCBwb2ludCwgdWludDY0X3QmIGluZGV4KQogICAg
IEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVz
dWx0QXRQb2ludChwb2ludCwgZmFsc2UpOwogICAgIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hh
cmVkTm9kZSgpID8gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFt
ZSgpIDogbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAg
ICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNoYXJhY3RlclJhbmdlQXRQb2ludChmcmFt
ZSwgcmVzdWx0LnBvaW50KCkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZS0+cmFu
Z2VGb3JQb2ludChmcmFtZSwgcmVzdWx0LnBvaW50KCkpOwogICAgIGlmICghcmFuZ2UpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIHVpbnQ2NF90IGxlbmd0aDsKLSAgICBnZXRMb2NhdGlvbkFuZExl
bmd0aEZyb21SYW5nZShyYW5nZS5nZXQoKSwgaW5kZXgsIGxlbmd0aCk7CisgICAgcmFuZ2UtPmdl
dExvY2F0aW9uQW5kTGVuZ3RoKGluZGV4LCBsZW5ndGgpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0
cjxSYW5nZT4gY29udmVydFRvUmFuZ2UoRnJhbWUqIGZyYW1lLCBOU1JhbmdlIG5zcmFuZ2UpCkBA
IC0yNTUsNyArMjMyLDcgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0
TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgZmxvYXRQb2ludCkKICAgICBmcmFtZSA9IHJlc3Vs
dC5pbm5lck5vblNoYXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9j
dW1lbnQoKS0+ZnJhbWUoKSA6IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1h
aW5GcmFtZSgpOwogCiAgICAgLy8gRmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IGNoYXJhY3Rl
cnMgdW5kZXIgdGhlIHBvaW50LgotICAgIFJlZlB0cjxSYW5nZT4gY2hhcmFjdGVyUmFuZ2UgPSBj
aGFyYWN0ZXJSYW5nZUF0UG9pbnQoZnJhbWUsIGZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVu
dHMocG9pbnQpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IGNoYXJhY3RlclJhbmdlID0gZnJhbWUtPnJh
bmdlRm9yUG9pbnQoZnJhbWUsIGZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMocG9pbnQp
KTsKICAgICBpZiAoIWNoYXJhY3RlclJhbmdlKQogICAgICAgICByZXR1cm47CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86512</attachid>
            <date>2011-03-22 14:46:14 -0700</date>
            <delta_ts>2011-03-24 14:27:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54969-20110322174612.patch</filename>
            <type>text/plain</type>
            <size>39255</size>
            <attacher name="Robert Sesek">rsesek</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE2NDgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyOGM0NzlhYWIwYWRkODQ1
NzI5ZjNlYmViYmE3NTQ4Njk1NTViODUwLi43ZTQ4NzEzN2I4MDAzNmY1MzMzMDJjODA4Nzc1MWQ3
ZmY3ZWI4MWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDMtMjIgIFJvYmVy
dCBTZXNlayAgPHJzZXNla0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW0Nocm9taXVtXSBJbXBsZW1lbnQgV2ViS2l0IG1ldGhv
ZHMgdG8gYXNzaXN0IHdpdGggQ29jb2EgTlNUZXh0SW5wdXQgaW1wbGVtZW50YXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0OTY5CisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAg
ICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmdldExvY2F0
aW9uQW5kTGVuZ3RoKToKKyAgICAgICAgKiBkb20vUmFuZ2UuaDoKKyAgICAgICAgKiBwYWdlL0Zy
YW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpyYW5nZUZvclBvaW50KToKKyAgICAg
ICAgKiBwYWdlL0ZyYW1lLmg6CisKIDIwMTEtMDMtMjEgIEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5v
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KaW5kZXggM2U2OGI1NGJlNjhlOThiYzUzM2Q5ZjQ4ZDg1MjdiODA5NmVmNGNh
Mi4uYTE5ZDY2MzQyNzc2NjU3MTc2MDM5ZmFjZGY3MjM2YzBhYWU2NjYzNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4KQEAgLTcwMyw2ICs3MDMsNyBAQCBfX1pON1dlYkNvcmU1RnJhbWU2Y3JlYXRlRVBO
U180UGFnZUVQTlNfMjFIVE1MRnJhbWVPd25lckVsZW1lbnRFUE5TXzE3RnJhbWVMb2FkZQogX19a
TjdXZWJDb3JlNUZyYW1lN3NldFZpZXdFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOUZyYW1lVmlld0VF
RQogX19aTjdXZWJDb3JlNUZyYW1lOW5vZGVJbWFnZUVQTlNfNE5vZGVFCiBfX1pON1dlYkNvcmU1
RnJhbWU5c2NhbGVQYWdlRWZSS05TXzhJbnRQb2ludEUKK19fWk43V2ViQ29yZTVGcmFtZTEzcmFu
Z2VGb3JQb2ludEVSS05TXzhJbnRQb2ludEUKIF9fWk43V2ViQ29yZTVGcmFtZUQxRXYKIF9fWk43
V2ViQ29yZTVJbWFnZTEyc3VwcG9ydHNUeXBlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3Jl
NUltYWdlMjBsb2FkUGxhdGZvcm1SZXNvdXJjZUVQS2MKQEAgLTcxMSw2ICs3MTIsNyBAQCBfX1pO
N1dlYkNvcmU1UmFuZ2UxNGlzUG9pbnRJblJhbmdlRVBOU180Tm9kZUVpUmkKIF9fWk43V2ViQ29y
ZTVSYW5nZTZjcmVhdGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOERvY3VtZW50RUVFTlMyX0lOU180
Tm9kZUVFRWlTNl9pCiBfX1pON1dlYkNvcmU1UmFuZ2U2c2V0RW5kRU4zV1RGMTBQYXNzUmVmUHRy
SU5TXzROb2RlRUVFaVJpCiBfX1pON1dlYkNvcmU1UmFuZ2U4c2V0U3RhcnRFTjNXVEYxMFBhc3NS
ZWZQdHJJTlNfNE5vZGVFRUVpUmkKK19fWk43V2ViQ29yZTVSYW5nZTIwZ2V0TG9jYXRpb25BbmRM
ZW5ndGhFUm1TMV8KIF9fWk43V2ViQ29yZTVSYW5nZTl0ZXh0UXVhZHNFUk4zV1RGNlZlY3RvcklO
U185RmxvYXRRdWFkRUxtMEVFRWIKIF9fWk43V2ViQ29yZTVSYW5nZTl0ZXh0UmVjdHNFUk4zV1RG
NlZlY3RvcklOU183SW50UmVjdEVMbTBFRUViCiBfX1pON1dlYkNvcmU1UmFuZ2VEMUV2CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L1JhbmdlLmNwcAppbmRleCA0MjNkNDNmMjYxMTNjNjAxZTUyN2I3NTIxZWNmMjkyN2ZiNmUwOTVm
Li5mNGY1MGZhYzM5MGJhZjMzNzc2NzBlOTZlNDg3YTA2M2Q5ZDAyZjNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5jcHAKQEAgLTE1MzQsNiArMTUzNCwzNiBAQCBib29sIFJhbmdlOjpjb250YWluZWRCeVJlYWRP
bmx5KCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgUmFuZ2U6OmdldExvY2F0
aW9uQW5kTGVuZ3RoKHNpemVfdCYgbG9jYXRpb24sIHNpemVfdCYgbGVuZ3RoKQoreworICAgIGxv
Y2F0aW9uID0gbm90Rm91bmQ7CisgICAgbGVuZ3RoID0gMDsKKworICAgIGlmICghc3RhcnRDb250
YWluZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRWxlbWVudCogc2VsZWN0aW9u
Um9vdCA9IG93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rp
b25Sb290IDogb3duZXJEb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKKworICAgIC8vIE1v
dXNlIGV2ZW50cyBtYXkgY2F1c2UgVFNNIHRvIGF0dGVtcHQgdG8gY3JlYXRlIGFuIE5TUmFuZ2Ug
Zm9yIGEgcG9ydGlvbiBvZiB0aGUgdmlldworICAgIC8vIHRoYXQgaXMgbm90IGluc2lkZSB0aGUg
Y3VycmVudCBlZGl0YWJsZSByZWdpb24uIFRoZXNlIGNoZWNrcyBlbnN1cmUgd2UgZG9uJ3QgcHJv
ZHVjZQorICAgIC8vIHBvdGVudGlhbGx5IGludmFsaWQgZGF0YSB3aGVuIHJlc3BvbmRpbmcgdG8g
c3VjaCByZXF1ZXN0cy4KKyAgICBpZiAoc3RhcnRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhc3Rh
cnRDb250YWluZXIoKS0+aXNEZXNjZW5kYW50T2Yoc2NvcGUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKGVuZENvbnRhaW5lcigpICE9IHNjb3BlICYmICFlbmRDb250YWluZXIoKS0+
aXNEZXNjZW5kYW50T2Yoc2NvcGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQ
dHI8UmFuZ2U+IHRlc3RSYW5nZSA9IFJhbmdlOjpjcmVhdGUoc2NvcGUtPmRvY3VtZW50KCksIHNj
b3BlLCAwLCBzdGFydENvbnRhaW5lcigpLCBzdGFydE9mZnNldCgpKTsKKyAgICBBU1NFUlQodGVz
dFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKKyAgICBsb2NhdGlvbiA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLmdldCgpKTsKKyAgICAKKyAgICBFeGNlcHRp
b25Db2RlIGVjOworICAgIHRlc3RSYW5nZS0+c2V0RW5kKGVuZENvbnRhaW5lcigpLCBlbmRPZmZz
ZXQoKSwgZWMpOworICAgIEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2Nv
cGUpOworICAgIGxlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLmdl
dCgpKSAtIGxvY2F0aW9uOworICAgIHJldHVybiB0cnVlOworfQorCiBOb2RlKiBSYW5nZTo6Zmly
c3ROb2RlKCkgY29uc3QKIHsKICAgICBpZiAoIW1fc3RhcnQuY29udGFpbmVyKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5oCmluZGV4IDU2MzdiNzdhYjE3ZjRkNjc3ODg1NjdlNTFjNzE0MWEwNzBjOTM1ZGIuLjEzMDAw
Nzg2MDk4NDZhMDNjMzBmYWIzMDdhODljMzA0MzczYjRmOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC05
OCw2ICs5OCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBQb3NpdGlvbiBzdGFydFBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGFydC50b1Bvc2l0aW9uKCk7IH0KICAgICBjb25zdCBQb3NpdGlv
biBlbmRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kLnRvUG9zaXRpb24oKTsgfQogCisg
ICAgYm9vbCBnZXRMb2NhdGlvbkFuZExlbmd0aChzaXplX3QmIGxvY2F0aW9uLCBzaXplX3QmIGxl
bmd0aCk7CisKICAgICBOb2RlKiBmaXJzdE5vZGUoKSBjb25zdDsKICAgICBOb2RlKiBwYXN0TGFz
dE5vZGUoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCAxOTFjZTI5Y2RiNjFiODM5
MjZkYzUyNmM0YmIyODlmNzA0NThjM2U1Li4zOWRkYjZiNDIzMGEzYmZiYzJmMTBjZTRlNjg2MmQy
YjhhZGQ1NDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtODA0LDYgKzgwNCwzMSBAQCBEb2N1
bWVudCogRnJhbWU6OmRvY3VtZW50QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiAgICAg
cmV0dXJuIHJlc3VsdC5pbm5lck5vZGUoKSA/IHJlc3VsdC5pbm5lck5vZGUoKS0+ZG9jdW1lbnQo
KSA6IDA7CiB9CiAKK1Bhc3NSZWZQdHI8UmFuZ2U+IEZyYW1lOjpyYW5nZUZvclBvaW50KGNvbnN0
IEludFBvaW50JiBmcmFtZVBvaW50KQoreworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9
IHZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOworICAgIGlmIChwb3NpdGlvbi5p
c051bGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlv
dXMgPSBwb3NpdGlvbi5wcmV2aW91cygpOworICAgIGlmIChwcmV2aW91cy5pc05vdE51bGwoKSkg
eworICAgICAgICBSZWZQdHI8UmFuZ2U+IHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFu
Z2UocHJldmlvdXMsIHBvc2l0aW9uKTsKKyAgICAgICAgSW50UmVjdCByZWN0ID0gZWRpdG9yKCkt
PmZpcnN0UmVjdEZvclJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgICAg
ICBpZiAocmVjdC5jb250YWlucyhmcmFtZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBwcmV2
aW91c0NoYXJhY3RlclJhbmdlLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBWaXNpYmxlUG9zaXRp
b24gbmV4dCA9IHBvc2l0aW9uLm5leHQoKTsKKyAgICBpZiAobmV4dC5pc05vdE51bGwoKSkgewor
ICAgICAgICBSZWZQdHI8UmFuZ2U+IG5leHRDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwb3Np
dGlvbiwgbmV4dCk7CisgICAgICAgIEludFJlY3QgcmVjdCA9IGVkaXRvcigpLT5maXJzdFJlY3RG
b3JSYW5nZShuZXh0Q2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgICAgICBpZiAocmVjdC5jb250
YWlucyhmcmFtZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBuZXh0Q2hhcmFjdGVyUmFuZ2Uu
cmVsZWFzZSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCiB2b2lkIEZyYW1lOjpjcmVh
dGVWaWV3KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvciwgYm9vbCB0cmFuc3BhcmVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgZml4ZWRMYXlvdXRTaXplLCBib29sIHVz
ZUZpeGVkTGF5b3V0LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4IGYyMmZjYjg2MWZhODM1NmZiOGE0YTFk
NDY4YTJlMTk4MDVjODBjYzQuLjA1ODA1Y2YxZTJlNDhkZDQzYmVmNmYwMmFhM2E0NmQyZjY5MzQw
ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lLmgKQEAgLTE4NCw2ICsxODQsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclBvaW50KGNv
bnN0IEludFBvaW50JiBmcmFtZVBvaW50KTsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50QXRQ
b2ludChjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpOworICAgICAgICBQYXNzUmVmUHRyPFJh
bmdlPiByYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBvaW50KTsKIAogICAgICAg
ICBTdHJpbmcgc2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKFJlZ3VsYXJFeHByZXNzaW9uKiwgSFRN
TFRhYmxlQ2VsbEVsZW1lbnQqLCBzaXplX3QqIHJlc3VsdERpc3RhbmNlRnJvbVN0YXJ0T2ZDZWxs
KTsKICAgICAgICAgU3RyaW5nIHNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnQoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGxhYmVscywgRWxlbWVudCosIHNpemVfdCogcmVzdWx0RGlzdGFuY2UsIGJv
b2wqIHJlc3VsdElzSW5DZWxsQWJvdmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAx
ZDU4YWY0ZjUwM2QxNGZlZGQ3MzI1NjYxOGM2OTg1OTE1YzliMzdkLi44ZDEyMTY5Y2YxMGE2YzRl
ZjM3YWFlODJkMmVhMWY5YWQxNDc4ODJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDMyIEBACisyMDExLTAzLTIyICBSb2JlcnQgU2VzZWsgIDxyc2VzZWtAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtD
aHJvbWl1bV0gSW1wbGVtZW50IFdlYktpdCBtZXRob2RzIHRvIGFzc2lzdCB3aXRoIENvY29hIE5T
VGV4dElucHV0IGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01NDk2OQorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAg
KiBwdWJsaWMvV2ViRnJhbWUuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViV2lkZ2V0Lmg6CisgICAg
ICAgICogcHVibGljL21hYy9XZWJUZXh0SGVscGVyLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9X
ZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmZpcnN0UmVj
dEZvckNoYXJhY3RlclJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpjaGFy
YWN0ZXJJbmRleEZvclBvaW50KToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmg6CisgICAg
ICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1
cE1lbnVJbXBsOjpjb21wb3NpdGlvblJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBN
ZW51SW1wbDo6Y2FyZXRPclNlbGVjdGlvblJhbmdlKToKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBN
ZW51SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpjb21wb3NpdGlvblJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OmNhcmV0T3JTZWxlY3Rpb25SYW5nZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdJ
bXBsLmg6CisgICAgICAgICogc3JjL21hYy9XZWJUZXh0SGVscGVyLm1tOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6Z2V0V2ViRnJhbWVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6cmFuZ2VTY29w
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRleHRIZWxwZXI6OldlYlRleHRIZWxwZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJUZXh0SGVscGVyOjpzdWJzdHJpbmdJblJhbmdlKToKKwogMjAxMS0w
My0yMSAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXZpZCBMZXZpbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCA0NTM4ZjMx
MzU2ODAyYjVjMDFhMGYyZDZhMmYyOTk0NmVmNDE4YWQ2Li5kMGRmOTk4Yzk2NmZlZDNiMzA5OGFh
ODI3NjJjYmVhOGVlYTA5ZDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC05Niw2
ICs5Niw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9tYWMvV2ViSW5wdXRFdmVudEZhY3Rv
cnkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9tYWMvV2ViU2FuZGJveFN1cHBvcnQuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9tYWMvV2ViU2NyZWVuSW5mb0ZhY3RvcnkuaCcsCisg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9tYWMvV2ViVGV4dEhlbHBlci5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL21hYy9XZWJUaGVtZUVuZ2luZS5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYkFjY2Vzc2liaWxpdHlDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24uaCcsCkBAIC0zODEsNiArMzgyLDcgQEAKICAgICAg
ICAgICAgICAgICAnc3JjL3gxMS9XZWJTY3JlZW5JbmZvRmFjdG9yeS5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvbWFjL1dlYklucHV0RXZlbnRGYWN0b3J5Lm1tJywKICAgICAgICAgICAgICAg
ICAnc3JjL21hYy9XZWJTY3JlZW5JbmZvRmFjdG9yeS5tbScsCisgICAgICAgICAgICAgICAgJ3Ny
Yy9tYWMvV2ViVGV4dEhlbHBlci5tbScsCiAgICAgICAgICAgICAgICAgJ3NyYy9Mb2NhbEZpbGVT
eXN0ZW1DaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvTG9jYWxpemVkU3RyaW5n
cy5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0u
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1l
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCmluZGV4IDU3MWQ5
NTgyMzg0MzI2MDU2MTE1NWZhYzM2MDllYzBkZjUwY2Y2YWYuLjk0NjA0Nzc2MzhiMmM5OGNkYjdk
NDExOTgyY2M5OTNhYWVkMjQ2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkZyYW1lLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
RnJhbWUuaApAQCAtNjcsNiArNjcsNyBAQCBjbGFzcyBXZWJVUkxSZXF1ZXN0OwogY2xhc3MgV2Vi
VmlldzsKIHN0cnVjdCBXZWJDb25zb2xlTWVzc2FnZTsKIHN0cnVjdCBXZWJGaW5kT3B0aW9uczsK
K3N0cnVjdCBXZWJQb2ludDsKIHN0cnVjdCBXZWJSZWN0Owogc3RydWN0IFdlYlNjcmlwdFNvdXJj
ZTsKIHN0cnVjdCBXZWJTaXplOwpAQCAtMzc5LDggKzM4MCwxNSBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIFdlYlJhbmdlIG1hcmtlZFJhbmdlKCkgY29uc3QgPSAwOwogCisgICAgLy8gUmV0dXJu
cyB0aGUgZnJhbWUgcmVjdGFuZ2xlIGluIHdpbmRvdyBjb29yZGluYXRlIHNwYWNlIG9mIHRoZSBn
aXZlbiB0ZXh0CisgICAgLy8gcmFuZ2UuCiAgICAgdmlydHVhbCBib29sIGZpcnN0UmVjdEZvckNo
YXJhY3RlclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIFdlYlJlY3Qm
KSBjb25zdCA9IDA7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiBhIGNoYXJhY3RlciBp
biB0aGUgRnJhbWUncyB0ZXh0IHN0cmVhbSBhdCB0aGUgZ2l2ZW4KKyAgICAvLyBwb2ludC4gVGhl
IHBvaW50IGlzIGluIHRoZSB3aW5kb3cgY29vcmRpbmF0ZSBzcGFjZS4gV2lsbCByZXR1cm4KKyAg
ICAvLyBXVEY6Om5vdEZvdW5kIGlmIHRoZSBwb2ludCBpcyBpbnZhbGlkLgorICAgIHZpcnR1YWwg
c2l6ZV90IGNoYXJhY3RlckluZGV4Rm9yUG9pbnQoY29uc3QgV2ViUG9pbnQmKSBjb25zdCA9IDA7
CisKICAgICAvLyBTdXBwb3J0cyBjb21tYW5kcyBsaWtlIFVuZG8sIFJlZG8sIEN1dCwgQ29weSwg
UGFzdGUsIFNlbGVjdEFsbCwKICAgICAvLyBVbnNlbGVjdCwgZXRjLiBTZWUgRWRpdG9yQ29tbWFu
ZC5jcHAgZm9yIHRoZSBmdWxsIGxpc3Qgb2Ygc3VwcG9ydGVkCiAgICAgLy8gY29tbWFuZHMuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCmluZGV4IDM2ZmJmMzEzYWQx
NzQ2NGM0MWQ4ZDkyN2NiMjEzMmFkYWI2YWU4ODEuLmVhMmY5ZDU4OWFiYTE3NzE3OTI4OGJkNzQ2
YTkxNTAzN2I4ODlkMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYldpZGdldC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdl
dC5oCkBAIC00MCw2ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViSW5w
dXRFdmVudDsKK2NsYXNzIFdlYlJhbmdlOwogY2xhc3MgV2ViU3RyaW5nOwogc3RydWN0IFdlYlJl
Y3Q7CiBzdHJ1Y3QgV2ViU2l6ZTsKQEAgLTExOSw2ICsxMjAsMTAgQEAgcHVibGljOgogICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBvbmdvaW5nIGNvbXBvc2l0aW9uIG9yIHRoZSB0
ZXh0IGlzIGluc2VydGVkLgogICAgIHZpcnR1YWwgYm9vbCBjb25maXJtQ29tcG9zaXRpb24oY29u
c3QgV2ViU3RyaW5nJiB0ZXh0KSA9IDA7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBjaGFyYWN0ZXIg
cmFuZ2Ugb2YgdGhlIGN1cnJlbnQgY29tcG9zaXRpb24uIFRoaXMgaXMgYWxzbworICAgIC8vIHJl
ZmVycmVkIHRvIGFzIHRoZSBtYXJrZWQgcmFuZ2UuCisgICAgdmlydHVhbCBib29sIGNvbXBvc2l0
aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90KiBsZW5ndGgpID0gMDsKKwogICAgIC8v
IFJldHVybnMgdGhlIGN1cnJlbnQgdGV4dCBpbnB1dCB0eXBlIG9mIHRoaXMgV2ViV2lkZ2V0Lgog
ICAgIHZpcnR1YWwgV2ViVGV4dElucHV0VHlwZSB0ZXh0SW5wdXRUeXBlKCkgPSAwOwogCkBAIC0x
MjYsNiArMTMxLDExIEBAIHB1YmxpYzoKICAgICAvLyB3aWxsIGJlIHJldHVybmVkIGlmIGEgc2Vs
ZWN0aW9uIHJhbmdlIGlzIGF2YWlsYWJsZS4KICAgICB2aXJ0dWFsIFdlYlJlY3QgY2FyZXRPclNl
bGVjdGlvbkJvdW5kcygpID0gMDsKIAorICAgIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgc2VsZWN0
aW9uIHJhbmdlIG9mIHRoaXMgV2ViV2lkZ2V0LiBJZiB0aGVyZSBpcyBubworICAgIC8vIHNlbGVj
dGlvbiwgaXQgd2lsbCByZXR1cm4gYSAwLWxlbmd0aCByYW5nZSB3aXRoIHRoZSBsb2NhdGlvbiBh
dCB0aGUKKyAgICAvLyBjYXJldC4KKyAgICB2aXJ0dWFsIGJvb2wgY2FyZXRPclNlbGVjdGlvblJh
bmdlKHNpemVfdCogbG9jYXRpb24sIHNpemVfdCogbGVuZ3RoKSA9IDA7CisKICAgICAvLyBDaGFu
Z2VzIHRoZSB0ZXh0IGRpcmVjdGlvbiBvZiB0aGUgc2VsZWN0ZWQgaW5wdXQgbm9kZS4KICAgICB2
aXJ0dWFsIHZvaWQgc2V0VGV4dERpcmVjdGlvbihXZWJUZXh0RGlyZWN0aW9uKSA9IDA7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL21hYy9XZWJUZXh0SGVscGVy
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9tYWMvV2ViVGV4dEhlbHBlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmY5NGQxNzEyZjYwOTM3OGYzMTBkMmRhYmNlN2JjZGIyZWM3YTE3MjUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9tYWMvV2ViVGV4dEhl
bHBlci5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRleHRIZWxwZXJfaAorI2RlZmluZSBX
ZWJUZXh0SGVscGVyX2gKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJGcmFtZTsKK2Ns
YXNzIFdlYlN0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFRoaXMgY2xhc3Mg
aXMgYSBoZWxwZXIgZm9yIGltcGxlbWVudGluZyBwYXJ0IG9mIHRoZSBOU1RleHRJbnB1dCBwcm90
b2NvbCBvbgorLy8gdGhlIHJlbmRlcmVyIHNpZGUuIEluIHRoZSBmdXR1cmUgaXQgc2hvdWxkIGJl
IGdlbmVyYWxpemVkIHRvIHN1cHBvcnQgaW5wdXQKKy8vIG1ldGhvZCBjb21wb3NpdGlvbiBhY3Jv
c3MgYWxsIHBsYXRmb3Jtcy4KK2NsYXNzIFdlYlRleHRIZWxwZXIgeworcHVibGljOgorICAgIGV4
cGxpY2l0IFdlYlRleHRIZWxwZXIoV2ViRnJhbWUqKTsKKworICAgIC8vIFJldHVybnMgYSBzZXJp
YWxpemVkIE5TQXR0cmlidXRlZFN0cmluZyAodmlhIE5TRGF0YSkgdGhhdCBpcyBhIHN1YnN0cmlu
ZworICAgIC8vIG9mIHRoZSBGcmFtZSBhdCB0aGUgZ2l2ZW4gcmFuZ2UuCisgICAgV2ViU3RyaW5n
IHN1YnN0cmluZ0luUmFuZ2Uoc2l6ZV90IGxvY2F0aW9uLCBzaXplX3QgbGVuZ3RoKTsKKworcHJv
dGVjdGVkOgorICAgIFdlYkZyYW1lKiBtX2ZyYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RnJhbWVJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5j
cHAKaW5kZXggNjg4ZTY3NzE1YTI1YjRkMmRlYzI4ZTZkYjcyN2Y0Mzc1MDFiNDU4NC4uMTQxNmM5
ODI5NWU3YzkzYTUyYTRhNWUwYmE1N2JlNTc4M2Y4YzllMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCkBAIC04NSw2ICs4NSw3IEBACiAjaW5jbHVkZSAi
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVk
ZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiRm9ybVN0YXRlLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCkBAIC05OCw2ICs5OSw3IEBACiAjaW5jbHVkZSAiSFRNTExpbmtFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIK
KyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJwYWludGluZy9HcmFwaGljc0NvbnRl
eHRCdWlsZGVyLmgiCkBAIC0xMTMwLDExICsxMTMyLDMwIEBAIGJvb2wgV2ViRnJhbWVJbXBsOjpm
aXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVu
Z3RoCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEludFJlY3Qg
aW50UmVjdCA9IGZyYW1lKCktPmVkaXRvcigpLT5maXJzdFJlY3RGb3JSYW5nZShyYW5nZS5nZXQo
KSk7Ci0gICAgcmVjdCA9IFdlYlJlY3QoaW50UmVjdC54KCksIGludFJlY3QueSgpLCBpbnRSZWN0
LndpZHRoKCksIGludFJlY3QuaGVpZ2h0KCkpOworICAgIHJlY3QgPSBXZWJSZWN0KGludFJlY3Qp
OworICAgIC8vIFdoZW4gaW5zaWRlIGFuIHRleHQgY29udHJvbCwgZG9uJ3QgYWRqdXN0IHRoZSBy
YW5nZS4KKyAgICBpZiAoIXNlbGVjdGlvblJvb3QpCisgICAgICAgIHJlY3QgPSBmcmFtZSgpLT52
aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
c2l6ZV90IFdlYkZyYW1lSW1wbDo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludChjb25zdCBXZWJQb2lu
dCYgd2ViUG9pbnQpIGNvbnN0Cit7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm4g
bm90Rm91bmQ7CisKKyAgICBJbnRQb2ludCBwb2ludCA9IGZyYW1lKCktPnZpZXcoKS0+d2luZG93
VG9Db250ZW50cyh3ZWJQb2ludCk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBmcmFtZSgp
LT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsIGZhbHNlKTsKKyAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUoKS0+cmFuZ2VGb3JQb2ludChyZXN1bHQucG9p
bnQoKSk7CisgICAgaWYgKCFyYW5nZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwor
CisgICAgc2l6ZV90IGxvY2F0aW9uLCBsZW5ndGg7CisgICAgcmFuZ2UtPmdldExvY2F0aW9uQW5k
TGVuZ3RoKGxvY2F0aW9uLCBsZW5ndGgpOworICAgIHJldHVybiBsb2NhdGlvbjsKK30KKwogYm9v
bCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVDb21tYW5kKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkKIHsK
ICAgICBBU1NFUlQoZnJhbWUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1l
SW1wbC5oCmluZGV4IDE5ZWI2ZDNlYTQ1MmFkN2EwMGExOTFmYTliODk5NWRlNzI5Y2M4YTMuLjJl
ZGE0MWNiODY5YWJlMTM3ZTU1OTk5NDI0M2NhMmY0NWI5NWFiOGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCkBAIC0xNDUsNiArMTQ1LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBoYXNNYXJrZWRUZXh0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJS
YW5nZSBtYXJrZWRSYW5nZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBmaXJzdFJlY3RGb3JD
aGFyYWN0ZXJSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBXZWJSZWN0
JikgY29uc3Q7CisgICAgdmlydHVhbCBzaXplX3QgY2hhcmFjdGVySW5kZXhGb3JQb2ludChjb25z
dCBXZWJQb2ludCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBleGVjdXRlQ29tbWFuZChjb25z
dCBXZWJTdHJpbmcmKTsKICAgICB2aXJ0dWFsIGJvb2wgZXhlY3V0ZUNvbW1hbmQoY29uc3QgV2Vi
U3RyaW5nJiwgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSk7CiAgICAgdmlydHVhbCBib29sIGlzQ29t
bWFuZEVuYWJsZWQoY29uc3QgV2ViU3RyaW5nJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCmluZGV4IGI0ZDQyNDZjM2Y2MDEwYmNh
ZjUwMjFkNGNkOTY4MWFiZmMzOTNkYjUuLjZhNjQxYTkxNDJiMjhkNjIyZjE5YWZjNzk0NmRlNGRi
NDlkZjRhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVw
TWVudUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVu
dUltcGwuY3BwCkBAIC00Myw2ICs0Myw3IEBACiAKICNpbmNsdWRlICJXZWJJbnB1dEV2ZW50Lmgi
CiAjaW5jbHVkZSAiV2ViSW5wdXRFdmVudENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJXZWJSYW5n
ZS5oIgogI2luY2x1ZGUgIldlYlJlY3QuaCIKICNpbmNsdWRlICJXZWJXaWRnZXRDbGllbnQuaCIK
IApAQCAtMjUyLDYgKzI1MywxMyBAQCBib29sIFdlYlBvcHVwTWVudUltcGw6OmNvbmZpcm1Db21w
b3NpdGlvbihjb25zdCBXZWJTdHJpbmcmIHRleHQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiti
b29sIFdlYlBvcHVwTWVudUltcGw6OmNvbXBvc2l0aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlvbiwg
c2l6ZV90KiBsZW5ndGgpCit7CisgICAgKmxvY2F0aW9uID0gMDsKKyAgICAqbGVuZ3RoID0gMDsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKIFdlYlRleHRJbnB1dFR5cGUgV2ViUG9wdXBNZW51SW1w
bDo6dGV4dElucHV0VHlwZSgpCiB7CiAgICAgcmV0dXJuIFdlYlRleHRJbnB1dFR5cGVOb25lOwpA
QCAtMjYyLDYgKzI3MCwxMyBAQCBXZWJSZWN0IFdlYlBvcHVwTWVudUltcGw6OmNhcmV0T3JTZWxl
Y3Rpb25Cb3VuZHMoKQogICAgIHJldHVybiBXZWJSZWN0KCk7CiB9CiAKK2Jvb2wgV2ViUG9wdXBN
ZW51SW1wbDo6Y2FyZXRPclNlbGVjdGlvblJhbmdlKHNpemVfdCogbG9jYXRpb24sIHNpemVfdCog
bGVuZ3RoKQoreworICAgICpsb2NhdGlvbiA9IDA7CisgICAgKmxlbmd0aCA9IDA7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCiB2b2lkIFdlYlBvcHVwTWVudUltcGw6OnNldFRleHREaXJlY3Rpb24o
V2ViVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKaW5kZXggN2JiOWY3ZTVhMjA1MmNiZjhjNzJkZjBj
ZTBjNDc1ZWZjMWE3YjVlOS4uMDJkNjk4YmJiMzFhODVmYjJmOTkzY2ExMWY4ZDdjMzY1YTI5ZjI3
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaApA
QCAtNTEsNiArNTEsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYktleWJvYXJkRXZl
bnQ7CiBjbGFzcyBXZWJNb3VzZUV2ZW50OwogY2xhc3MgV2ViTW91c2VXaGVlbEV2ZW50OworY2xh
c3MgV2ViUmFuZ2U7CiBzdHJ1Y3QgV2ViUmVjdDsKIAogY2xhc3MgV2ViUG9wdXBNZW51SW1wbCA6
IHB1YmxpYyBXZWJQb3B1cE1lbnUsCkBAIC03Niw4ICs3NywxMCBAQCBwdWJsaWM6CiAgICAgICAg
IGludCBzZWxlY3Rpb25TdGFydCwgaW50IHNlbGVjdGlvbkVuZCk7CiAgICAgdmlydHVhbCBib29s
IGNvbmZpcm1Db21wb3NpdGlvbigpOwogICAgIHZpcnR1YWwgYm9vbCBjb25maXJtQ29tcG9zaXRp
b24oY29uc3QgV2ViU3RyaW5nJiB0ZXh0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRpb25S
YW5nZShzaXplX3QqIGxvY2F0aW9uLCBzaXplX3QqIGxlbmd0aCk7CiAgICAgdmlydHVhbCBXZWJU
ZXh0SW5wdXRUeXBlIHRleHRJbnB1dFR5cGUoKTsKICAgICB2aXJ0dWFsIFdlYlJlY3QgY2FyZXRP
clNlbGVjdGlvbkJvdW5kcygpOworICAgIHZpcnR1YWwgYm9vbCBjYXJldE9yU2VsZWN0aW9uUmFu
Z2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90KiBsZW5ndGgpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRUZXh0RGlyZWN0aW9uKFdlYlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKTsKICAgICB2aXJ0dWFs
IGJvb2wgaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4
IDEwMjU5NmI3MzE5OGM4NjgxYWE3ZTFkZjhkYWVmNWU2NmJhZmNkMDEuLmQ2NWU3OTdjMzY5OWYx
YzI0YmY2ZTJiNWJkNWQ1MjA1MzkwMzhiODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKQEAgLTExNCw2ICsxMTQsNyBAQAogI2luY2x1ZGUgIldlYlBsdWdp
bkNvbnRhaW5lckltcGwuaCIKICNpbmNsdWRlICJXZWJQb2ludC5oIgogI2luY2x1ZGUgIldlYlBv
cHVwTWVudUltcGwuaCIKKyNpbmNsdWRlICJXZWJSYW5nZS5oIgogI2luY2x1ZGUgIldlYlJlY3Qu
aCIKICNpbmNsdWRlICJXZWJSdW50aW1lRmVhdHVyZXMuaCIKICNpbmNsdWRlICJXZWJTZXR0aW5n
c0ltcGwuaCIKQEAgLTEzODQsNiArMTM4NSwyNCBAQCBib29sIFdlYlZpZXdJbXBsOjpjb25maXJt
Q29tcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJiB0ZXh0KQogICAgIHJldHVybiB0cnVlOwogfQog
Citib29sIFdlYlZpZXdJbXBsOjpjb21wb3NpdGlvblJhbmdlKHNpemVfdCogbG9jYXRpb24sIHNp
emVfdCogbGVuZ3RoKQoreworICAgIEZyYW1lKiBmb2N1c2VkID0gZm9jdXNlZFdlYkNvcmVGcmFt
ZSgpOworICAgIGlmICghZm9jdXNlZCB8fCAhbV9pbWVBY2NlcHRFdmVudHMpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBFZGl0b3IqIGVkaXRvciA9IGZvY3VzZWQtPmVkaXRvcigpOworICAg
IGlmICghZWRpdG9yIHx8ICFlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlZGl0b3ItPmNvbXBvc2l0aW9u
UmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlLmdldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAocmFuZ2UtPmdldExvY2F0aW9uQW5kTGVuZ3RoKCpsb2NhdGlvbiwgKmxlbmd0aCkp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwogV2ViVGV4dElu
cHV0VHlwZSBXZWJWaWV3SW1wbDo6dGV4dElucHV0VHlwZSgpCiB7CiAgICAgV2ViVGV4dElucHV0
VHlwZSB0eXBlID0gV2ViVGV4dElucHV0VHlwZU5vbmU7CkBAIC0xNDQ0LDYgKzE0NjMsMjUgQEAg
V2ViUmVjdCBXZWJWaWV3SW1wbDo6Y2FyZXRPclNlbGVjdGlvbkJvdW5kcygpCiAgICAgcmV0dXJu
IHJlY3Q7CiB9CiAKK2Jvb2wgV2ViVmlld0ltcGw6OmNhcmV0T3JTZWxlY3Rpb25SYW5nZShzaXpl
X3QqIGxvY2F0aW9uLCBzaXplX3QqIGxlbmd0aCkKK3sKKyAgICBjb25zdCBGcmFtZSogZm9jdXNl
ZCA9IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKKyAgICBpZiAoIWZvY3VzZWQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBmb2N1
c2VkLT5zZWxlY3Rpb24oKTsKKyAgICBpZiAoIWNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjb250cm9sbGVyLT5zZWxlY3Rpb24o
KS5maXJzdFJhbmdlKCk7CisgICAgaWYgKCFyYW5nZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKHJhbmdlLT5nZXRMb2NhdGlvbkFuZExlbmd0aCgqbG9jYXRpb24sICps
ZW5ndGgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZv
aWQgV2ViVmlld0ltcGw6OnNldFRleHREaXJlY3Rpb24oV2ViVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24pCiB7CiAgICAgLy8gVGhlIEVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oKSBmdW5j
dGlvbiBjaGVja3MgaWYgd2UgY2FuIGNoYW5nZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmgKaW5kZXggMDhmMDNjNDk5MGVkYWM3NDI3MDRiZDJhNjFjNjBjMTVhYTFhODYy
ZS4uNzdhZTkzYjM2YWY3Mjg1NzlhNTdhYzAxYWVmNjZmYzU3ZWZmMTk2YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC0xMDcsOCArMTA3LDEwIEBAIHB1Ymxp
YzoKICAgICAgICAgaW50IHNlbGVjdGlvbkVuZCk7CiAgICAgdmlydHVhbCBib29sIGNvbmZpcm1D
b21wb3NpdGlvbigpOwogICAgIHZpcnR1YWwgYm9vbCBjb25maXJtQ29tcG9zaXRpb24oY29uc3Qg
V2ViU3RyaW5nJiB0ZXh0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRpb25SYW5nZShzaXpl
X3QqIGxvY2F0aW9uLCBzaXplX3QqIGxlbmd0aCk7CiAgICAgdmlydHVhbCBXZWJUZXh0SW5wdXRU
eXBlIHRleHRJbnB1dFR5cGUoKTsKICAgICB2aXJ0dWFsIFdlYlJlY3QgY2FyZXRPclNlbGVjdGlv
bkJvdW5kcygpOworICAgIHZpcnR1YWwgYm9vbCBjYXJldE9yU2VsZWN0aW9uUmFuZ2Uoc2l6ZV90
KiBsb2NhdGlvbiwgc2l6ZV90KiBsZW5ndGgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0RGly
ZWN0aW9uKFdlYlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL21hYy9XZWJUZXh0SGVscGVyLm1tIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvbWFjL1dlYlRleHRIZWxwZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzZjODgwODRm
OGJmNjBiOGM2Mzk3YjBjN2VhMzRlMjMyY2M5NDU3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL21hYy9XZWJUZXh0SGVscGVyLm1tCkBAIC0wLDAgKzEsMTM2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICog
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgorI2lu
Y2x1ZGUgIldlYlRleHRIZWxwZXIuaCIKKworI2luY2x1ZGUgIkNvbG9yTWFjLmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1
ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5o
IgorI2luY2x1ZGUgIldlYlJlY3QuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKworI2ltcG9y
dCA8Q29jb2EvQ29jb2EuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCisvLyBIZWxwZXIgZnVuY3Rpb25zLgorCitXZWJGcmFtZUltcGwqIGdldFdl
YkZyYW1lSW1wbChXZWJGcmFtZSogZnJhbWUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdl
YkZyYW1lSW1wbCo+KGZyYW1lKTsKK30KKworRWxlbWVudCogcmFuZ2VTY29wZShXZWJGcmFtZSog
d2ViRnJhbWUpCit7CisgICAgRnJhbWUqIGZyYW1lID0gZ2V0V2ViRnJhbWVJbXBsKHdlYkZyYW1l
KS0+ZnJhbWUoKTsKKyAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZnJhbWUtPnNlbGVjdGlv
bigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgcmV0dXJuIHNlbGVjdGlvblJvb3QgPyBz
ZWxlY3Rpb25Sb290IDogZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOworfQor
CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitXZWJUZXh0SGVscGVyOjpXZWJUZXh0SGVscGVy
KFdlYkZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCit7Cit9CisKKy8vIFRoaXMg
ZnVuY3Rpb24gaXMgY29waWVkIGZyb20gL1dlYktpdC9tYWMvTWlzYy9XZWJOU0F0dHJpYnV0ZWRT
dHJpbmdFeHRyYXMubW0uCitXZWJLaXQ6OldlYlN0cmluZyBXZWJUZXh0SGVscGVyOjpzdWJzdHJp
bmdJblJhbmdlKHNpemVfdCBsb2NhdGlvbiwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBGcmFtZSog
ZnJhbWUgPSBnZXRXZWJGcmFtZUltcGwobV9mcmFtZSktPmZyYW1lKCk7CisgICAgaWYgKGZyYW1l
LT52aWV3KCktPm5lZWRzTGF5b3V0KCkpCisgICAgICAgIGZyYW1lLT52aWV3KCktPmxheW91dCgp
OworCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZShUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0
aW9uQW5kTGVuZ3RoKHJhbmdlU2NvcGUobV9mcmFtZSksIGxvY2F0aW9uLCBsZW5ndGgpKTsKKyAg
ICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gV2ViS2l0OjpXZWJTdHJpbmcoKTsKKworICAg
IE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIHN0cmluZyA9IFtbTlNNdXRhYmxlQXR0cmlidXRl
ZFN0cmluZyBhbGxvY10gaW5pdF07CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSogYXR0cnMgPSBb
TlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKKworICAgIHVuc2lnbmVkIHBvc2l0aW9u
ID0gMDsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdChyYW5nZS5nZXQoKSk7ICFpdC5hdEVuZCgp
ICYmIFtzdHJpbmcgbGVuZ3RoXSA8IGxlbmd0aDsgaXQuYWR2YW5jZSgpKSB7CisgICAgICAgIHVu
c2lnbmVkIG51bUNoYXJhY3RlcnMgPSBpdC5sZW5ndGgoKTsKKyAgICAgICAgaWYgKCFudW1DaGFy
YWN0ZXJzKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBl
eGNlcHRpb24gPSAwOworICAgICAgICBOb2RlKiBjb250YWluZXIgPSBpdC5yYW5nZSgpLT5zdGFy
dENvbnRhaW5lcihleGNlcHRpb24pOworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
Y29udGFpbmVyLT5yZW5kZXJlcigpOworICAgICAgICBBU1NFUlQocmVuZGVyZXIpOworICAgICAg
ICBpZiAoIXJlbmRlcmVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgICAgIE5TRm9udCogZm9udCA9
IHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCk7CisgICAgICAgIC8vIElm
IHRoZSBwbGF0Zm9ybSBmb250IGNhbid0IGJlIGxvYWRlZCwgaXQncyBsaWtlbHkgdGhhdCB0aGUg
c2l0ZSBpcworICAgICAgICAvLyB1c2luZyBhIHdlYiBmb250LiBGb3Igbm93LCBqdXN0IHVzZSB0
aGUgZGVmYXVsdCBmb250IGluc3RlYWQuCisgICAgICAgIC8vIFRPRE8ocnNlc2VrKTogQ2hhbmdl
IHRoZSBmb250IGFjdGl2YXRpb24gZmxhZ3MgdG8gYWxsb3cgb3RoZXIgcHJvY2Vzc2VzCisgICAg
ICAgIC8vIHRvIHVzZSB0aGUgZm9udC4KKyAgICAgICAgaWYgKCFmb250KQorICAgICAgICAgIGZv
bnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6c3R5bGUtPmZvbnQoKS5zaXplKCldOworICAg
ICAgICBbYXR0cnMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwor
CisgICAgICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29s
b3IpLmFscGhhKCkpCisgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdy
b3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFthdHRy
cyByZW1vdmVPYmplY3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAg
ICAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IpLmFscGhhKCkpCisgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0Om5zQ29sb3Io
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikp
IGZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBbYXR0cnMgcmVtb3ZlT2JqZWN0Rm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0
cmlidXRlTmFtZV07CisKKyAgICAgICAgTlNTdHJpbmcqIHN1YnN0cmluZyA9CisgICAgICAgICAg
ICBbW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5OmNvbnN0X2Nhc3Q8
VUNoYXIqPihpdC5jaGFyYWN0ZXJzKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGVuZ3RoOml0Lmxlbmd0aCgpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnJlZVdoZW5Eb25lOk5PXSBhdXRvcmVsZWFzZV07Cisg
ICAgICAgIFtzdHJpbmcgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKHBvc2l0
aW9uLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aFN0cmluZzpzdWJzdHJp
bmddOworICAgICAgICBbc3RyaW5nIHNldEF0dHJpYnV0ZXM6YXR0cnMgcmFuZ2U6TlNNYWtlUmFu
Z2UocG9zaXRpb24sIG51bUNoYXJhY3RlcnMpXTsKKyAgICAgICAgcG9zaXRpb24gKz0gbnVtQ2hh
cmFjdGVyczsKKyAgICB9CisgICAgTlNEYXRhKiBhcmNoaXZlZERhdGEoW05TQXJjaGl2ZXIgYXJj
aGl2ZWREYXRhV2l0aFJvb3RPYmplY3Q6c3RyaW5nXSk7CisgICAgaWYgKCFhcmNoaXZlZERhdGEp
CisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICByZXR1cm4gV2ViS2l0OjpXZWJTdHJp
bmcoc3RhdGljX2Nhc3Q8Y29uc3QgV2ViVUNoYXIqPihbYXJjaGl2ZWREYXRhIGJ5dGVzXSksCisg
ICAgICAgIFthcmNoaXZlZERhdGEgbGVuZ3RoXSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCmluZGV4IDViYjgyY2RkZDQ0MTkwOTBkYjc5YzZmNzhlZGJiNTcxYWU5
ZTU2MzUuLjg5YzgzYjljMjdiYmIwYjcwNmU0ZTQ0NGIxOWQyMzFjN2U3YmQxMDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0wMy0yMiAgUm9iZXJ0IFNlc2VrICA8cnNl
c2VrQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBbQ2hyb21pdW1dIEltcGxlbWVudCBXZWJLaXQgbWV0aG9kcyB0byBhc3Npc3Qg
d2l0aCBDb2NvYSBOU1RleHRJbnB1dCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NjkKKworICAgICAgICAqIFdlYlZpZXcv
V2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9jb252ZXJ0VG9OU1JhbmdlOl0pOgor
ICAgICAgICAoLVtXZWJGcmFtZSBfY2hhcmFjdGVyUmFuZ2VBdFBvaW50Ol0pOgorCiAyMDExLTAz
LTIxICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQnJhZHkgRWlkc29uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5k
ZXggOWU3OThkMjFmYTAxNTQ0MmE0OGQ1NDUzNTA2YTQ0MTE0ZGI0YzU2OC4uMTA4OTY5NTQ2MDM5
OWZjMzFhMDA5MDE4Y2JhNjdhZTZkM2IzYTJmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCkBAIC02NzAsMzAgKzY3MCwxMCBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3Vy
Y2UgKmRhdGFTb3VyY2UoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIAogLSAoTlNSYW5nZSlfY29u
dmVydFRvTlNSYW5nZTooUmFuZ2UgKilyYW5nZQogewotICAgIGlmICghcmFuZ2UgfHwgIXJhbmdl
LT5zdGFydENvbnRhaW5lcigpKQotICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3Vu
ZCwgMCk7Ci0KLSAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gX3ByaXZhdGUtPmNvcmVGcmFt
ZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBFbGVtZW50KiBzY29w
ZSA9IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogX3ByaXZhdGUtPmNvcmVGcmFtZS0+
ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgCi0gICAgLy8gTW91c2UgZXZlbnRz
IG1heSBjYXVzZSBUU00gdG8gYXR0ZW1wdCB0byBjcmVhdGUgYW4gTlNSYW5nZSBmb3IgYSBwb3J0
aW9uIG9mIHRoZSB2aWV3Ci0gICAgLy8gdGhhdCBpcyBub3QgaW5zaWRlIHRoZSBjdXJyZW50IGVk
aXRhYmxlIHJlZ2lvbi4gIFRoZXNlIGNoZWNrcyBlbnN1cmUgd2UgZG9uJ3QgcHJvZHVjZQotICAg
IC8vIHBvdGVudGlhbGx5IGludmFsaWQgZGF0YSB3aGVuIHJlc3BvbmRpbmcgdG8gc3VjaCByZXF1
ZXN0cy4KLSAgICBpZiAocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gc2NvcGUgJiYgIXJhbmdl
LT5zdGFydENvbnRhaW5lcigpLT5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCi0gICAgICAgIHJldHVy
biBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLSAgICBpZiAocmFuZ2UtPmVuZENvbnRhaW5l
cigpICE9IHNjb3BlICYmICFyYW5nZS0+ZW5kQ29udGFpbmVyKCktPmlzRGVzY2VuZGFudE9mKHNj
b3BlKSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAgIAot
ICAgIFJlZlB0cjxSYW5nZT4gdGVzdFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzY29wZS0+ZG9jdW1l
bnQoKSwgc2NvcGUsIDAsIHJhbmdlLT5zdGFydENvbnRhaW5lcigpLCByYW5nZS0+c3RhcnRPZmZz
ZXQoKSk7Ci0gICAgQVNTRVJUKHRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7
Ci0gICAgaW50IHN0YXJ0UG9zaXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RS
YW5nZS5nZXQoKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIHRlc3RSYW5nZS0+c2V0
RW5kKHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVuZE9mZnNldCgpLCBlYyk7Ci0gICAg
QVNTRVJUKHRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7Ci0gICAgaW50IGVu
ZFBvc2l0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkpOwot
Ci0gICAgcmV0dXJuIE5TTWFrZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uIC0gc3Rh
cnRQb3NpdGlvbik7CisgICAgc2l6ZV90IGxvY2F0aW9uLCBsZW5ndGg7CisgICAgaWYgKHJhbmdl
ICYmIHJhbmdlLT5nZXRMb2NhdGlvbkFuZExlbmd0aChsb2NhdGlvbiwgbGVuZ3RoKSkKKyAgICAg
ICAgcmV0dXJuIE5TTWFrZVJhbmdlKGxvY2F0aW9uLCBsZW5ndGgpOworICAgIHJldHVybiBOU01h
a2VSYW5nZShOU05vdEZvdW5kLCAwKTsKIH0KIAogLSAoUGFzc1JlZlB0cjxSYW5nZT4pX2NvbnZl
cnRUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UKQEAgLTgyMCwyNyArODAwLDcgQEAgc3RhdGlj
IGlubGluZSBXZWJEYXRhU291cmNlICpkYXRhU291cmNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIp
CiAKIC0gKERPTVJhbmdlICopX2NoYXJhY3RlclJhbmdlQXRQb2ludDooTlNQb2ludClwb2ludAog
ewotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25G
b3JQb2ludDpwb2ludF07Ci0gICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHBvc2l0aW9uLnBy
ZXZpb3VzKCk7Ci0gICAgaWYgKHByZXZpb3VzLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIERPTVJh
bmdlICpwcmV2aW91c0NoYXJhY3RlclJhbmdlID0ga2l0KG1ha2VSYW5nZShwcmV2aW91cywgcG9z
aXRpb24pLmdldCgpKTsKLSAgICAgICAgTlNSZWN0IHJlY3QgPSBbc2VsZiBfZmlyc3RSZWN0Rm9y
RE9NUmFuZ2U6cHJldmlvdXNDaGFyYWN0ZXJSYW5nZV07Ci0gICAgICAgIGlmIChOU1BvaW50SW5S
ZWN0KHBvaW50LCByZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBwcmV2aW91c0NoYXJhY3RlclJh
bmdlOwotICAgIH0KLQotICAgIFZpc2libGVQb3NpdGlvbiBuZXh0ID0gcG9zaXRpb24ubmV4dCgp
OwotICAgIGlmIChuZXh0LmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIERPTVJhbmdlICpuZXh0Q2hh
cmFjdGVyUmFuZ2UgPSBraXQobWFrZVJhbmdlKHBvc2l0aW9uLCBuZXh0KS5nZXQoKSk7Ci0gICAg
ICAgIE5TUmVjdCByZWN0ID0gW3NlbGYgX2ZpcnN0UmVjdEZvckRPTVJhbmdlOm5leHRDaGFyYWN0
ZXJSYW5nZV07Ci0gICAgICAgIGlmIChOU1BvaW50SW5SZWN0KHBvaW50LCByZWN0KSkKLSAgICAg
ICAgICAgIHJldHVybiBuZXh0Q2hhcmFjdGVyUmFuZ2U7Ci0gICAgfQotICAgIAotICAgIHJldHVy
biBuaWw7CisgICAgcmV0dXJuIGtpdChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5yYW5nZUZvclBvaW50
KEludFBvaW50KHBvaW50KSkuZ2V0KCkpOwogfQogCiAtIChET01DU1NTdHlsZURlY2xhcmF0aW9u
ICopX3R5cGluZ1N0eWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNWEzYmMzNGJhNTIwOTNmNmJlOTZmZmY0NjI4
ZTc1NDQ0ZjUwODQ1My4uMjdmMjhiMWNiYzY5N2NhOWI3ZTA4MDQxMWJmZGU5MDdkNzIyMjIwZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDExLTAzLTIyICBSb2JlcnQgU2VzZWsgIDxy
c2VzZWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFtDaHJvbWl1bV0gSW1wbGVtZW50IFdlYktpdCBtZXRob2RzIHRvIGFzc2lz
dCB3aXRoIENvY29hIE5TVGV4dElucHV0IGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDk2OQorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0TWFya2VkUmFuZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjaGFyYWN0ZXJJbmRleEZvclBvaW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKToKKwog
MjAxMS0wMy0yMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
Rml4IE1hYyByZWxlYXNlIGJ1aWxkcyBhZnRlciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTY3ODMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCBiOTU0MjgzNTkx
MzM3ODBiNGNlZDYwYmY2M2Q5NWEzNmI5ZGUxNTBjLi5mYTYzNTI2YmJjMmQ2YjMwOTc2YzdjZjk2
Mzk2ZGM0YmFmNDM1ZWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC0xOTYsNyArMTk2
LDE0IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCkK
ICAgICBzZWxlY3Rpb25TdGF0ZS5pc0luUGFzc3dvcmRGaWVsZCA9IGZyYW1lLT5zZWxlY3Rpb24o
KS0+aXNJblBhc3N3b3JkRmllbGQoKTsKICAgICBzZWxlY3Rpb25TdGF0ZS5oYXNDb21wb3NpdGlv
biA9IGZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKTsKIAotICAgIFdlYlBhZ2U6Omdl
dExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSwgc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZVN0YXJ0LCBzZWxl
Y3Rpb25TdGF0ZS5zZWxlY3RlZFJhbmdlTGVuZ3RoKTsKKyAgICBSYW5nZSogcmFuZ2UgPSBmcmFt
ZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCk7CisgICAgaWYgKHJhbmdl
KSB7CisgICAgICAgIHNpemVfdCBsb2NhdGlvbiwgbGVuZ3RoOworICAgICAgICBpZiAoIXJhbmdl
LT5nZXRMb2NhdGlvbkFuZExlbmd0aChsb2NhdGlvbiwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZVN0YXJ0ID0gc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGxvY2F0aW9uKTsKKyAgICAgICAgc2VsZWN0aW9uU3RhdGUuc2VsZWN0
ZWRSYW5nZUxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGgpOworICAgIH0KIAog
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWxlY3Rpb25TdGF0ZUNo
YW5nZWQoc2VsZWN0aW9uU3RhdGUpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGRhNzdiMGI0OTk4YzY1YWM2ZmFkZjNhOWVkYjY2ZmEw
NmU5ODkwODguLmQ2NzRkMWNjYzQ5YTc1ZjNiZTIyMDViZWExOWY1MWRkZGMyZjFhNDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTgwMywz
NSArODAzLDYgQEAgV2ViQ29udGV4dE1lbnUqIFdlYlBhZ2U6OmNvbnRleHRNZW51KCkKICAgICBy
ZXR1cm4gbV9jb250ZXh0TWVudS5nZXQoKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpnZXRMb2NhdGlv
bkFuZExlbmd0aEZyb21SYW5nZShSYW5nZSogcmFuZ2UsIHVpbnQ2NF90JiBsb2NhdGlvbiwgdWlu
dDY0X3QmIGxlbmd0aCkKLXsKLSAgICBsb2NhdGlvbiA9IG5vdEZvdW5kOwotICAgIGxlbmd0aCA9
IDA7Ci0KLSAgICBpZiAoIXJhbmdlIHx8ICFyYW5nZS0+c3RhcnRDb250YWluZXIoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IHJhbmdlLT5vd25lckRv
Y3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0g
ICAgRWxlbWVudCogc2NvcGUgPSBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IHJhbmdl
LT5vd25lckRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwotICAgIAotICAgIC8vIE1vdXNl
IGV2ZW50cyBtYXkgY2F1c2UgVFNNIHRvIGF0dGVtcHQgdG8gY3JlYXRlIGFuIE5TUmFuZ2UgZm9y
IGEgcG9ydGlvbiBvZiB0aGUgdmlldwotICAgIC8vIHRoYXQgaXMgbm90IGluc2lkZSB0aGUgY3Vy
cmVudCBlZGl0YWJsZSByZWdpb24uICBUaGVzZSBjaGVja3MgZW5zdXJlIHdlIGRvbid0IHByb2R1
Y2UKLSAgICAvLyBwb3RlbnRpYWxseSBpbnZhbGlkIGRhdGEgd2hlbiByZXNwb25kaW5nIHRvIHN1
Y2ggcmVxdWVzdHMuCi0gICAgaWYgKHJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IHNjb3BlICYm
ICFyYW5nZS0+c3RhcnRDb250YWluZXIoKS0+aXNEZXNjZW5kYW50T2Yoc2NvcGUpKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKHJhbmdlLT5lbmRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFu
Z2UtPmVuZENvbnRhaW5lcigpLT5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFJlZlB0cjxSYW5nZT4gdGVzdFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzY29wZS0+
ZG9jdW1lbnQoKSwgc2NvcGUsIDAsIHJhbmdlLT5zdGFydENvbnRhaW5lcigpLCByYW5nZS0+c3Rh
cnRPZmZzZXQoKSk7Ci0gICAgQVNTRVJUKHRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBz
Y29wZSk7Ci0gICAgbG9jYXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5n
ZS5nZXQoKSk7Ci0gICAgCi0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICB0ZXN0UmFuZ2UtPnNl
dEVuZChyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSwgZWMpOwotICAg
IEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOwotICAgIGxlbmd0
aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLmdldCgpKSAtIGxvY2F0aW9u
OwotfQotCiAvLyBFdmVudHMgCiAKIHN0YXRpYyBjb25zdCBXZWJFdmVudCogZ19jdXJyZW50RXZl
bnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5k
ZXggYTU3M2RlMjMyNDIyYjlhZDQ1NmM1ZjJhYmEyNWM2NTlmYjExODgwYy4uMDYzMTljNWYxY2Ey
MWY0ODQ4MDgzN2M5NjNhM2UxODMzMzcyZTI5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0yOTEsOCArMjkxLDYgQEAgcHVibGljOgogCiAgICAg
U2FuZGJveEV4dGVuc2lvblRyYWNrZXImIHNhbmRib3hFeHRlbnNpb25UcmFja2VyKCkgeyByZXR1
cm4gbV9zYW5kYm94RXh0ZW5zaW9uVHJhY2tlcjsgfQogCi0gICAgc3RhdGljIHZvaWQgZ2V0TG9j
YXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqLCB1aW50NjRfdCYgbG9jYXRp
b24sIHVpbnQ2NF90JiBsZW5ndGgpOwotCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgcmVn
aXN0ZXJVSVByb2Nlc3NBY2Nlc3NpYmlsaXR5VG9rZW5zKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZl
cmVuY2UmIGVsZW1lblRva2VuLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiB3aW5kb3dU
b2tlbik7CiAgICAgQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QqIGFjY2Vzc2liaWxpdHlSZW1v
dGVPYmplY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbQppbmRleCBiZDFiMTA5YjZhNTA3NDQ1YjhkYjJhNTc3ZDUzN2RkYjEz
OTg5M2JhLi44NjZhMWYyMDI4OTU0YjlhOWI4MzM4ODNhNmMzMGFjNzczNjQ4NGQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0K
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
CkBAIC0xNjAsMzMgKzE2MCwxMyBAQCB2b2lkIFdlYlBhZ2U6OmdldE1hcmtlZFJhbmdlKHVpbnQ2
NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCkKICAgICBGcmFtZSogZnJhbWUgPSBtX3Bh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBpZiAoIWZy
YW1lKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZ2V0TG9jYXRpb25BbmRMZW5ndGhGcm9t
UmFuZ2UoZnJhbWUtPmVkaXRvcigpLT5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCksIGxvY2F0aW9u
LCBsZW5ndGgpOwotfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gY2hhcmFjdGVyUmFuZ2VB
dFBvaW50KEZyYW1lKiBmcmFtZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQotewotICAgIFZpc2li
bGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2lu
dCk7Ci0gICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAK
LSAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMgPSBwb3NpdGlvbi5wcmV2aW91cygpOwotICAg
IGlmIChwcmV2aW91cy5pc05vdE51bGwoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHByZXZp
b3VzQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocHJldmlvdXMsIHBvc2l0aW9uKTsKLSAgICAg
ICAgSW50UmVjdCByZWN0ID0gZnJhbWUtPmVkaXRvcigpLT5maXJzdFJlY3RGb3JSYW5nZShwcmV2
aW91c0NoYXJhY3RlclJhbmdlLmdldCgpKTsKLSAgICAgICAgaWYgKHJlY3QuY29udGFpbnMocG9p
bnQpKQotICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UucmVsZWFzZSgp
OwotICAgIH0KLSAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IHBvc2l0aW9uLm5leHQo
KTsKLSAgICBpZiAobmV4dC5pc05vdE51bGwoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IG5l
eHRDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwb3NpdGlvbiwgbmV4dCk7Ci0gICAgICAgIElu
dFJlY3QgcmVjdCA9IGZyYW1lLT5lZGl0b3IoKS0+Zmlyc3RSZWN0Rm9yUmFuZ2UobmV4dENoYXJh
Y3RlclJhbmdlLmdldCgpKTsKLSAgICAgICAgaWYgKHJlY3QuY29udGFpbnMocG9pbnQpKQotICAg
ICAgICAgICAgcmV0dXJuIG5leHRDaGFyYWN0ZXJSYW5nZS5yZWxlYXNlKCk7CisgICAgUmFuZ2Uq
IHJhbmdlID0gZnJhbWUtPmVkaXRvcigpLT5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCk7CisgICAg
c2l6ZV90IGxvYywgbGVuOworICAgIGlmIChyYW5nZSAmJiByYW5nZS0+Z2V0TG9jYXRpb25BbmRM
ZW5ndGgobG9jLCBsZW4pKSB7CisgICAgICAgIGxvY2F0aW9uID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGxvYyk7CisgICAgICAgIGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW4pOwog
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gMDsKIH0KICAgICAKIHZvaWQgV2ViUGFnZTo6Y2hhcmFj
dGVySW5kZXhGb3JQb2ludChJbnRQb2ludCBwb2ludCwgdWludDY0X3QmIGluZGV4KQpAQCAtMTk5
LDEyICsxNzksMTMgQEAgdm9pZCBXZWJQYWdlOjpjaGFyYWN0ZXJJbmRleEZvclBvaW50KEludFBv
aW50IHBvaW50LCB1aW50NjRfdCYgaW5kZXgpCiAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBm
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50LCBmYWxzZSk7
CiAgICAgZnJhbWUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJO
b25TaGFyZWROb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkgOiBtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gY2hhcmFjdGVyUmFuZ2VBdFBvaW50KGZyYW1lLCByZXN1bHQucG9pbnQoKSk7CisgICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lLT5yYW5nZUZvclBvaW50KHJlc3VsdC5wb2ludCgp
KTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICB1aW50NjRfdCBsZW5n
dGg7Ci0gICAgZ2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UocmFuZ2UuZ2V0KCksIGluZGV4
LCBsZW5ndGgpOworICAgIHNpemVfdCBsb2NhdGlvbiwgbGVuZ3RoOworICAgIGlmIChyYW5nZS0+
Z2V0TG9jYXRpb25BbmRMZW5ndGgobG9jYXRpb24sIGxlbmd0aCkpCisgICAgICAgIGluZGV4ID0g
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxvY2F0aW9uKTsKIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8
UmFuZ2U+IGNvbnZlcnRUb1JhbmdlKEZyYW1lKiBmcmFtZSwgTlNSYW5nZSBuc3JhbmdlKQpAQCAt
MjU1LDcgKzIzNiw3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExv
Y2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGZsb2F0UG9pbnQpCiAgICAgZnJhbWUgPSByZXN1bHQu
aW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3Vt
ZW50KCktPmZyYW1lKCkgOiBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWlu
RnJhbWUoKTsKIAogICAgIC8vIEZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBjaGFyYWN0ZXJz
IHVuZGVyIHRoZSBwb2ludC4KLSAgICBSZWZQdHI8UmFuZ2U+IGNoYXJhY3RlclJhbmdlID0gY2hh
cmFjdGVyUmFuZ2VBdFBvaW50KGZyYW1lLCBmcmFtZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRz
KHBvaW50KSk7CisgICAgUmVmUHRyPFJhbmdlPiBjaGFyYWN0ZXJSYW5nZSA9IGZyYW1lLT5yYW5n
ZUZvclBvaW50KGZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMocG9pbnQpKTsKICAgICBp
ZiAoIWNoYXJhY3RlclJhbmdlKQogICAgICAgICByZXR1cm47CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86837</attachid>
            <date>2011-03-24 14:27:57 -0700</date>
            <delta_ts>2011-03-25 13:11:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54969-20110324172755.patch</filename>
            <type>text/plain</type>
            <size>39702</size>
            <attacher name="Robert Sesek">rsesek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ODQ5YjNjYjk3YjZlMjg1NDU0NDkyMmJiNjI1MDU3NjZiMGMxMjNjLi43
YWIyY2Q2NTVkMGUwYWFkOTZkOTNjZGU1NjNkMTZmZTkxMjdiOTUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjAgQEAKKzIwMTEtMDMtMjQgIFJvYmVydCBTZXNlayAgPHJzZXNla0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0No
cm9taXVtXSBJbXBsZW1lbnQgV2ViS2l0IG1ldGhvZHMgdG8gYXNzaXN0IHdpdGggQ29jb2EgTlNU
ZXh0SW5wdXQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU0OTY5CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisK
KyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OmdldExvY2F0aW9uQW5kTGVuZ3RoKTogTmV3IG1ldGhvZCBm
cm9tIGR1cGxpY2F0ZSBjb2RlIGluIFdlYktpdHMKKyAgICAgICAgKiBkb20vUmFuZ2UuaDoKKyAg
ICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpyYW5nZUZv
clBvaW50KTogTmV3IG1ldGhvZCBmcm9tIGR1cGxpY2F0ZWQgY29kZSBpbiBXZWJLaXRzCisgICAg
ICAgICogcGFnZS9GcmFtZS5oOgorCiAyMDExLTAzLTI0ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xh
emtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCmluZGV4IGQ2NzI1NmFkYWQ2ZWUxY2NhM2Q1MTY3MWQyNDlkZmY0MTI1
M2JjNDguLjc3MmRjNTNmZmE3NTMyZWY1MDcyNWQwODBlYzdlOTE0OTgzZDAwZjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCkBAIC03MDQsNiArNzA0LDcgQEAgX19aTjdXZWJDb3JlNUZyYW1lNmNyZWF0
ZUVQTlNfNFBhZ2VFUE5TXzIxSFRNTEZyYW1lT3duZXJFbGVtZW50RVBOU18xN0ZyYW1lTG9hZGUK
IF9fWk43V2ViQ29yZTVGcmFtZTdzZXRWaWV3RU4zV1RGMTBQYXNzUmVmUHRySU5TXzlGcmFtZVZp
ZXdFRUUKIF9fWk43V2ViQ29yZTVGcmFtZTlub2RlSW1hZ2VFUE5TXzROb2RlRQogX19aTjdXZWJD
b3JlNUZyYW1lOXNjYWxlUGFnZUVmUktOU184SW50UG9pbnRFCitfX1pON1dlYkNvcmU1RnJhbWUx
M3JhbmdlRm9yUG9pbnRFUktOU184SW50UG9pbnRFCiBfX1pON1dlYkNvcmU1RnJhbWVEMUV2CiBf
X1pON1dlYkNvcmU1SW1hZ2UxMnN1cHBvcnRzVHlwZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2Vi
Q29yZTVJbWFnZTIwbG9hZFBsYXRmb3JtUmVzb3VyY2VFUEtjCkBAIC03MTIsNiArNzEzLDcgQEAg
X19aTjdXZWJDb3JlNVJhbmdlMTRpc1BvaW50SW5SYW5nZUVQTlNfNE5vZGVFaVJpCiBfX1pON1dl
YkNvcmU1UmFuZ2U2Y3JlYXRlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzhEb2N1bWVudEVFRU5TMl9J
TlNfNE5vZGVFRUVpUzZfaQogX19aTjdXZWJDb3JlNVJhbmdlNnNldEVuZEVOM1dURjEwUGFzc1Jl
ZlB0cklOU180Tm9kZUVFRWlSaQogX19aTjdXZWJDb3JlNVJhbmdlOHNldFN0YXJ0RU4zV1RGMTBQ
YXNzUmVmUHRySU5TXzROb2RlRUVFaVJpCitfX1pON1dlYkNvcmU1UmFuZ2UyMGdldExvY2F0aW9u
QW5kTGVuZ3RoRVJtUzFfCiBfX1pON1dlYkNvcmU1UmFuZ2U5dGV4dFF1YWRzRVJOM1dURjZWZWN0
b3JJTlNfOUZsb2F0UXVhZEVMbTBFRUViCiBfX1pON1dlYkNvcmU1UmFuZ2U5dGV4dFJlY3RzRVJO
M1dURjZWZWN0b3JJTlNfN0ludFJlY3RFTG0wRUVFYgogX19aTjdXZWJDb3JlNVJhbmdlRDFFdgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9SYW5nZS5jcHAKaW5kZXggNDIzZDQzZjI2MTEzYzYwMWU1MjdiNzUyMWVjZjI5MjdmYjZl
MDk1Zi4uZjRmNTBmYWMzOTBiYWYzMzc3NjcwZTk2ZTQ4N2EwNjNkOWQwMmYzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFuZ2UuY3BwCkBAIC0xNTM0LDYgKzE1MzQsMzYgQEAgYm9vbCBSYW5nZTo6Y29udGFpbmVkQnlS
ZWFkT25seSgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIFJhbmdlOjpnZXRM
b2NhdGlvbkFuZExlbmd0aChzaXplX3QmIGxvY2F0aW9uLCBzaXplX3QmIGxlbmd0aCkKK3sKKyAg
ICBsb2NhdGlvbiA9IG5vdEZvdW5kOworICAgIGxlbmd0aCA9IDA7CisKKyAgICBpZiAoIXN0YXJ0
Q29udGFpbmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEVsZW1lbnQqIHNlbGVj
dGlvblJvb3QgPSBvd25lckRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5yb290RWRp
dGFibGVFbGVtZW50KCk7CisgICAgRWxlbWVudCogc2NvcGUgPSBzZWxlY3Rpb25Sb290ID8gc2Vs
ZWN0aW9uUm9vdCA6IG93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CisKKyAgICAv
LyBNb3VzZSBldmVudHMgbWF5IGNhdXNlIFRTTSB0byBhdHRlbXB0IHRvIGNyZWF0ZSBhbiBOU1Jh
bmdlIGZvciBhIHBvcnRpb24gb2YgdGhlIHZpZXcKKyAgICAvLyB0aGF0IGlzIG5vdCBpbnNpZGUg
dGhlIGN1cnJlbnQgZWRpdGFibGUgcmVnaW9uLiBUaGVzZSBjaGVja3MgZW5zdXJlIHdlIGRvbid0
IHByb2R1Y2UKKyAgICAvLyBwb3RlbnRpYWxseSBpbnZhbGlkIGRhdGEgd2hlbiByZXNwb25kaW5n
IHRvIHN1Y2ggcmVxdWVzdHMuCisgICAgaWYgKHN0YXJ0Q29udGFpbmVyKCkgIT0gc2NvcGUgJiYg
IXN0YXJ0Q29udGFpbmVyKCktPmlzRGVzY2VuZGFudE9mKHNjb3BlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChlbmRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhZW5kQ29udGFpbmVy
KCktPmlzRGVzY2VuZGFudE9mKHNjb3BlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
UmVmUHRyPFJhbmdlPiB0ZXN0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHNjb3BlLT5kb2N1bWVudCgp
LCBzY29wZSwgMCwgc3RhcnRDb250YWluZXIoKSwgc3RhcnRPZmZzZXQoKSk7CisgICAgQVNTRVJU
KHRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7CisgICAgbG9jYXRpb24gPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5nZXQoKSk7CisgICAgCisgICAgRXhj
ZXB0aW9uQ29kZSBlYzsKKyAgICB0ZXN0UmFuZ2UtPnNldEVuZChlbmRDb250YWluZXIoKSwgZW5k
T2Zmc2V0KCksIGVjKTsKKyAgICBBU1NFUlQodGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09
IHNjb3BlKTsKKyAgICBsZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5n
ZS5nZXQoKSkgLSBsb2NhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogTm9kZSogUmFuZ2U6
OmZpcnN0Tm9kZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcigpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFuZ2UuaAppbmRleCA1NjM3Yjc3YWIxN2Y0ZDY3Nzg4NTY3ZTUxYzcxNDFhMDcwYzkzNWRiLi4x
MzAwMDc4NjA5ODQ2YTAzYzMwZmFiMzA3YTg5YzMwNDM3M2I0ZjkwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaApA
QCAtOTgsNiArOTgsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgUG9zaXRpb24gc3RhcnRQb3NpdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQudG9Qb3NpdGlvbigpOyB9CiAgICAgY29uc3QgUG9z
aXRpb24gZW5kUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2VuZC50b1Bvc2l0aW9uKCk7IH0K
IAorICAgIGJvb2wgZ2V0TG9jYXRpb25BbmRMZW5ndGgoc2l6ZV90JiBsb2NhdGlvbiwgc2l6ZV90
JiBsZW5ndGgpOworCiAgICAgTm9kZSogZmlyc3ROb2RlKCkgY29uc3Q7CiAgICAgTm9kZSogcGFz
dExhc3ROb2RlKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggMTkxY2UyOWNkYjYx
YjgzOTI2ZGM1MjZjNGJiMjg5ZjcwNDU4YzNlNS4uMzlkZGI2YjQyMzBhM2JmYmMyZjEwY2U0ZTY4
NjJkMmI4YWRkNTQyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTgwNCw2ICs4MDQsMzEgQEAg
RG9jdW1lbnQqIEZyYW1lOjpkb2N1bWVudEF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQog
ICAgIHJldHVybiByZXN1bHQuaW5uZXJOb2RlKCkgPyByZXN1bHQuaW5uZXJOb2RlKCktPmRvY3Vt
ZW50KCkgOiAwOwogfQogCitQYXNzUmVmUHRyPFJhbmdlPiBGcmFtZTo6cmFuZ2VGb3JQb2ludChj
b25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCkKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKKyAgICBpZiAocG9zaXRp
b24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgVmlzaWJsZVBvc2l0aW9uIHBy
ZXZpb3VzID0gcG9zaXRpb24ucHJldmlvdXMoKTsKKyAgICBpZiAocHJldmlvdXMuaXNOb3ROdWxs
KCkpIHsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBwcmV2aW91c0NoYXJhY3RlclJhbmdlID0gbWFr
ZVJhbmdlKHByZXZpb3VzLCBwb3NpdGlvbik7CisgICAgICAgIEludFJlY3QgcmVjdCA9IGVkaXRv
cigpLT5maXJzdFJlY3RGb3JSYW5nZShwcmV2aW91c0NoYXJhY3RlclJhbmdlLmdldCgpKTsKKyAg
ICAgICAgaWYgKHJlY3QuY29udGFpbnMoZnJhbWVQb2ludCkpCisgICAgICAgICAgICByZXR1cm4g
cHJldmlvdXNDaGFyYWN0ZXJSYW5nZS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgVmlzaWJsZVBv
c2l0aW9uIG5leHQgPSBwb3NpdGlvbi5uZXh0KCk7CisgICAgaWYgKG5leHQuaXNOb3ROdWxsKCkp
IHsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBuZXh0Q2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2Uo
cG9zaXRpb24sIG5leHQpOworICAgICAgICBJbnRSZWN0IHJlY3QgPSBlZGl0b3IoKS0+Zmlyc3RS
ZWN0Rm9yUmFuZ2UobmV4dENoYXJhY3RlclJhbmdlLmdldCgpKTsKKyAgICAgICAgaWYgKHJlY3Qu
Y29udGFpbnMoZnJhbWVQb2ludCkpCisgICAgICAgICAgICByZXR1cm4gbmV4dENoYXJhY3RlclJh
bmdlLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBGcmFtZTo6
Y3JlYXRlVmlldyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUsCiAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IsIGJvb2wgdHJhbnNwYXJlbnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIGZpeGVkTGF5b3V0U2l6ZSwgYm9v
bCB1c2VGaXhlZExheW91dCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCBmMjJmY2I4NjFmYTgzNTZmYjhh
NGExZDQ2OGEyZTE5ODA1YzgwY2M0Li4wNTgwNWNmMWUyZTQ4ZGQ0M2JlZjZmMDJhYTNhNDZkMmY2
OTM0MGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCkBAIC0xODQsNiArMTg0LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JQb2lu
dChjb25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCk7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVu
dEF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KTsKKyAgICAgICAgUGFzc1JlZlB0
cjxSYW5nZT4gcmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCk7CiAKICAg
ICAgICAgU3RyaW5nIHNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbChSZWd1bGFyRXhwcmVzc2lvbios
IEhUTUxUYWJsZUNlbGxFbGVtZW50Kiwgc2l6ZV90KiByZXN1bHREaXN0YW5jZUZyb21TdGFydE9m
Q2VsbCk7CiAgICAgICAgIFN0cmluZyBzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBsYWJlbHMsIEVsZW1lbnQqLCBzaXplX3QqIHJlc3VsdERpc3RhbmNl
LCBib29sKiByZXN1bHRJc0luQ2VsbEFib3ZlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggOGM3Y2Y5N2RjOWFiNDhiMDI2ODAyNTgwNTk1NDI2ZDQ0NzRkMjQ3NC4uMjU5MjE4M2YwNjgz
ZWM5MTUzMjJiMDBiMjI0ZTIyMzJjMzc1MmMzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzMCBAQAorMjAxMS0wMy0yNCAgUm9iZXJ0IFNlc2VrICA8cnNlc2VrQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbQ2hyb21pdW1dIEltcGxlbWVudCBXZWJLaXQgbWV0aG9kcyB0byBhc3Npc3Qgd2l0aCBDb2Nv
YSBOU1RleHRJbnB1dCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NjkKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAg
ICAgICogcHVibGljL1dlYkZyYW1lLmg6CisgICAgICAgICogcHVibGljL1dlYldpZGdldC5oOgor
ICAgICAgICAqIHB1YmxpYy9tYWMvV2ViVGV4dEhlbHBlci5oOiBBZGRlZC4KKyAgICAgICAgKiBz
cmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpmaXJz
dFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSk6IFJldHVybiB0aGUgcmVzdWx0IHJlY3QgdG8gd2luZG93
IGNvb3JkaW5hdGVzCisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Y2hhcmFjdGVySW5k
ZXhGb3JQb2ludCk6ICBOZXcgbWV0aG9kIG9uIFdlYkZyYW1lCisgICAgICAgICogc3JjL1dlYkZy
YW1lSW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6Y29tcG9zaXRpb25SYW5nZSk6IE5ldyBtZXRob2Qg
b24gV2ViV2lkZ2V0OyBlbXB0eSBpbXBsCisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudUlt
cGw6OmNhcmV0T3JTZWxlY3Rpb25SYW5nZSk6IE5ldyBtZXRob2Qgb24gV2ViV2lkZ2V0OyBlbXB0
eSBpbXBsCisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuaDoKKyAgICAgICAgKiBzcmMv
V2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcG9zaXRp
b25SYW5nZSk6IE5ldyBtZXRob2Qgb24gV2ViV2lkZ2V0CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpjYXJldE9yU2VsZWN0aW9uUmFuZ2UpOiBOZXcgbWV0aG9kIG9uIFdlYldpZGdldAor
ICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAqIHNyYy9tYWMvV2ViVGV4dEhl
bHBlci5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlRleHRIZWxwZXI6OldlYlRleHRI
ZWxwZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJUZXh0SGVscGVyOjpzdWJzdHJpbmdJblJhbmdl
KToKKwogMjAxMS0wMy0yNCAgRG9taW5pYyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAKaW5kZXggZDQ3MjQ4ZTRmNTI5ZDQwODM0M2VhZTE0MDhkZDdiNmQ2Y2MxMjc1NC4u
MTY3Yjc1Yjc5YjI0NzVlNjRiY2RiZjc3OGI1MTY1ZjAyZDVlZjg4MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cApAQCAtOTYsNiArOTYsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMv
bWFjL1dlYklucHV0RXZlbnRGYWN0b3J5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvbWFj
L1dlYlNhbmRib3hTdXBwb3J0LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvbWFjL1dlYlNj
cmVlbkluZm9GYWN0b3J5LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvbWFjL1dlYlRleHRI
ZWxwZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9tYWMvV2ViVGhlbWVFbmdpbmUuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJBY2Nlc3NpYmlsaXR5Q2FjaGUuaCcsCiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uLmgnLApAQCAt
MzgxLDYgKzM4Miw3IEBACiAgICAgICAgICAgICAgICAgJ3NyYy94MTEvV2ViU2NyZWVuSW5mb0Zh
Y3RvcnkuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL21hYy9XZWJJbnB1dEV2ZW50RmFjdG9y
eS5tbScsCiAgICAgICAgICAgICAgICAgJ3NyYy9tYWMvV2ViU2NyZWVuSW5mb0ZhY3RvcnkubW0n
LAorICAgICAgICAgICAgICAgICdzcmMvbWFjL1dlYlRleHRIZWxwZXIubW0nLAogICAgICAgICAg
ICAgICAgICdzcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL0xvY2FsaXplZFN0cmluZ3MuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL01lZGlh
UGxheWVyUHJpdmF0ZUNocm9taXVtLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRnJhbWUuaAppbmRleCA1NzFkOTU4MjM4NDMyNjA1NjExNTVmYWMzNjA5ZWMwZGY1MGNmNmFm
Li45NDYwNDc3NjM4YjJjOThjZGI3ZDQxMTk4MmNjOTkzYWFlZDI0NjE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKQEAgLTY3LDYgKzY3LDcgQEAgY2xhc3MgV2Vi
VVJMUmVxdWVzdDsKIGNsYXNzIFdlYlZpZXc7CiBzdHJ1Y3QgV2ViQ29uc29sZU1lc3NhZ2U7CiBz
dHJ1Y3QgV2ViRmluZE9wdGlvbnM7CitzdHJ1Y3QgV2ViUG9pbnQ7CiBzdHJ1Y3QgV2ViUmVjdDsK
IHN0cnVjdCBXZWJTY3JpcHRTb3VyY2U7CiBzdHJ1Y3QgV2ViU2l6ZTsKQEAgLTM3OSw4ICszODAs
MTUgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBXZWJSYW5nZSBtYXJrZWRSYW5nZSgpIGNvbnN0
ID0gMDsKIAorICAgIC8vIFJldHVybnMgdGhlIGZyYW1lIHJlY3RhbmdsZSBpbiB3aW5kb3cgY29v
cmRpbmF0ZSBzcGFjZSBvZiB0aGUgZ2l2ZW4gdGV4dAorICAgIC8vIHJhbmdlLgogICAgIHZpcnR1
YWwgYm9vbCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5z
aWduZWQgbGVuZ3RoLCBXZWJSZWN0JikgY29uc3QgPSAwOwogCisgICAgLy8gUmV0dXJucyB0aGUg
aW5kZXggb2YgYSBjaGFyYWN0ZXIgaW4gdGhlIEZyYW1lJ3MgdGV4dCBzdHJlYW0gYXQgdGhlIGdp
dmVuCisgICAgLy8gcG9pbnQuIFRoZSBwb2ludCBpcyBpbiB0aGUgd2luZG93IGNvb3JkaW5hdGUg
c3BhY2UuIFdpbGwgcmV0dXJuCisgICAgLy8gV1RGOjpub3RGb3VuZCBpZiB0aGUgcG9pbnQgaXMg
aW52YWxpZC4KKyAgICB2aXJ0dWFsIHNpemVfdCBjaGFyYWN0ZXJJbmRleEZvclBvaW50KGNvbnN0
IFdlYlBvaW50JikgY29uc3QgPSAwOworCiAgICAgLy8gU3VwcG9ydHMgY29tbWFuZHMgbGlrZSBV
bmRvLCBSZWRvLCBDdXQsIENvcHksIFBhc3RlLCBTZWxlY3RBbGwsCiAgICAgLy8gVW5zZWxlY3Qs
IGV0Yy4gU2VlIEVkaXRvckNvbW1hbmQuY3BwIGZvciB0aGUgZnVsbCBsaXN0IG9mIHN1cHBvcnRl
ZAogICAgIC8vIGNvbW1hbmRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViV2lkZ2V0LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRn
ZXQuaAppbmRleCAzNmZiZjMxM2FkMTc0NjRjNDFkOGQ5MjdjYjIxMzJhZGFiNmFlODgxLi42Nzg4
ODJjNzczOGNmZTE5Y2QxZmVjMDI1ZjlkMWE3NjM5YTQ2MDE2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaApAQCAtNDAsNiArNDAsNyBAQAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIFdlYklucHV0RXZlbnQ7CitjbGFzcyBXZWJSYW5nZTsKIGNsYXNzIFdl
YlN0cmluZzsKIHN0cnVjdCBXZWJSZWN0Owogc3RydWN0IFdlYlNpemU7CkBAIC0xMTksNiArMTIw
LDExIEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gb25nb2lu
ZyBjb21wb3NpdGlvbiBvciB0aGUgdGV4dCBpcyBpbnNlcnRlZC4KICAgICB2aXJ0dWFsIGJvb2wg
Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFdlYlN0cmluZyYgdGV4dCkgPSAwOwogCisgICAgLy8g
RmV0Y2hlcyB0aGUgY2hhcmFjdGVyIHJhbmdlIG9mIHRoZSBjdXJyZW50IGNvbXBvc2l0aW9uLCBh
bHNvIGNhbGxlZCB0aGUKKyAgICAvLyAibWFya2VkIHJhbmdlLiIgUmV0dXJucyB0cnVlIGFuZCBm
aWxscyB0aGUgb3V0LXBhcmFtdGVycyBvbiBzdWNjZXNzOworICAgIC8vIHJldHVybnMgZmFsc2Ug
b24gZmFpbHVyZS4KKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRpb25SYW5nZShzaXplX3QqIGxv
Y2F0aW9uLCBzaXplX3QqIGxlbmd0aCkgPSAwOworCiAgICAgLy8gUmV0dXJucyB0aGUgY3VycmVu
dCB0ZXh0IGlucHV0IHR5cGUgb2YgdGhpcyBXZWJXaWRnZXQuCiAgICAgdmlydHVhbCBXZWJUZXh0
SW5wdXRUeXBlIHRleHRJbnB1dFR5cGUoKSA9IDA7CiAKQEAgLTEyNiw2ICsxMzIsMTIgQEAgcHVi
bGljOgogICAgIC8vIHdpbGwgYmUgcmV0dXJuZWQgaWYgYSBzZWxlY3Rpb24gcmFuZ2UgaXMgYXZh
aWxhYmxlLgogICAgIHZpcnR1YWwgV2ViUmVjdCBjYXJldE9yU2VsZWN0aW9uQm91bmRzKCkgPSAw
OwogCisgICAgLy8gRmV0Y2ggdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHJhbmdlIG9mIHRoaXMgV2Vi
V2lkZ2V0LiBJZiB0aGVyZSBpcyBubworICAgIC8vIHNlbGVjdGlvbiwgaXQgd2lsbCBvdXRwdXQg
YSAwLWxlbmd0aCByYW5nZSB3aXRoIHRoZSBsb2NhdGlvbiBhdCB0aGUKKyAgICAvLyBjYXJldC4g
UmV0dXJucyB0cnVlIGFuZCBmaWxscyB0aGUgb3V0LXBhcmFtdGVycyBvbiBzdWNjZXNzOyByZXR1
cm5zIGZhbHNlCisgICAgLy8gb24gZmFpbHVyZS4KKyAgICB2aXJ0dWFsIGJvb2wgY2FyZXRPclNl
bGVjdGlvblJhbmdlKHNpemVfdCogbG9jYXRpb24sIHNpemVfdCogbGVuZ3RoKSA9IDA7CisKICAg
ICAvLyBDaGFuZ2VzIHRoZSB0ZXh0IGRpcmVjdGlvbiBvZiB0aGUgc2VsZWN0ZWQgaW5wdXQgbm9k
ZS4KICAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dERpcmVjdGlvbihXZWJUZXh0RGlyZWN0aW9uKSA9
IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL21hYy9XZWJU
ZXh0SGVscGVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9tYWMvV2ViVGV4dEhl
bHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmY5NGQxNzEyZjYwOTM3OGYzMTBkMmRhYmNlN2JjZGIyZWM3YTE3
MjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9tYWMv
V2ViVGV4dEhlbHBlci5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRleHRIZWxwZXJfaAor
I2RlZmluZSBXZWJUZXh0SGVscGVyX2gKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJG
cmFtZTsKK2NsYXNzIFdlYlN0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFRo
aXMgY2xhc3MgaXMgYSBoZWxwZXIgZm9yIGltcGxlbWVudGluZyBwYXJ0IG9mIHRoZSBOU1RleHRJ
bnB1dCBwcm90b2NvbCBvbgorLy8gdGhlIHJlbmRlcmVyIHNpZGUuIEluIHRoZSBmdXR1cmUgaXQg
c2hvdWxkIGJlIGdlbmVyYWxpemVkIHRvIHN1cHBvcnQgaW5wdXQKKy8vIG1ldGhvZCBjb21wb3Np
dGlvbiBhY3Jvc3MgYWxsIHBsYXRmb3Jtcy4KK2NsYXNzIFdlYlRleHRIZWxwZXIgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IFdlYlRleHRIZWxwZXIoV2ViRnJhbWUqKTsKKworICAgIC8vIFJldHVy
bnMgYSBzZXJpYWxpemVkIE5TQXR0cmlidXRlZFN0cmluZyAodmlhIE5TRGF0YSkgdGhhdCBpcyBh
IHN1YnN0cmluZworICAgIC8vIG9mIHRoZSBGcmFtZSBhdCB0aGUgZ2l2ZW4gcmFuZ2UuCisgICAg
V2ViU3RyaW5nIHN1YnN0cmluZ0luUmFuZ2Uoc2l6ZV90IGxvY2F0aW9uLCBzaXplX3QgbGVuZ3Ro
KTsKKworcHJvdGVjdGVkOgorICAgIFdlYkZyYW1lKiBtX2ZyYW1lOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRnJhbWVJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZy
YW1lSW1wbC5jcHAKaW5kZXggNjg4ZTY3NzE1YTI1YjRkMmRlYzI4ZTZkYjcyN2Y0Mzc1MDFiNDU4
NC4uMTQxNmM5ODI5NWU3YzkzYTUyYTRhNWUwYmE1N2JlNTc4M2Y4YzllMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCkBAIC04NSw2ICs4NSw3IEBACiAj
aW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgi
CiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiRm9ybVN0YXRlLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCkBAIC05OCw2ICs5OSw3IEBACiAjaW5jbHVkZSAiSFRN
TExpbmtFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGlzdG9y
eUl0ZW0uaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJwYWludGluZy9HcmFw
aGljc0NvbnRleHRCdWlsZGVyLmgiCkBAIC0xMTMwLDExICsxMTMyLDMwIEBAIGJvb2wgV2ViRnJh
bWVJbXBsOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5z
aWduZWQgbGVuZ3RoCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IEludFJlY3QgaW50UmVjdCA9IGZyYW1lKCktPmVkaXRvcigpLT5maXJzdFJlY3RGb3JSYW5nZShy
YW5nZS5nZXQoKSk7Ci0gICAgcmVjdCA9IFdlYlJlY3QoaW50UmVjdC54KCksIGludFJlY3QueSgp
LCBpbnRSZWN0LndpZHRoKCksIGludFJlY3QuaGVpZ2h0KCkpOworICAgIHJlY3QgPSBXZWJSZWN0
KGludFJlY3QpOworICAgIC8vIFdoZW4gaW5zaWRlIGFuIHRleHQgY29udHJvbCwgZG9uJ3QgYWRq
dXN0IHRoZSByYW5nZS4KKyAgICBpZiAoIXNlbGVjdGlvblJvb3QpCisgICAgICAgIHJlY3QgPSBm
cmFtZSgpLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAorc2l6ZV90IFdlYkZyYW1lSW1wbDo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludChjb25z
dCBXZWJQb2ludCYgd2ViUG9pbnQpIGNvbnN0Cit7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAg
ICByZXR1cm4gbm90Rm91bmQ7CisKKyAgICBJbnRQb2ludCBwb2ludCA9IGZyYW1lKCktPnZpZXco
KS0+d2luZG93VG9Db250ZW50cyh3ZWJQb2ludCk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQg
PSBmcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsIGZh
bHNlKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUoKS0+cmFuZ2VGb3JQb2ludChy
ZXN1bHQucG9pbnQoKSk7CisgICAgaWYgKCFyYW5nZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG5v
dEZvdW5kOworCisgICAgc2l6ZV90IGxvY2F0aW9uLCBsZW5ndGg7CisgICAgcmFuZ2UtPmdldExv
Y2F0aW9uQW5kTGVuZ3RoKGxvY2F0aW9uLCBsZW5ndGgpOworICAgIHJldHVybiBsb2NhdGlvbjsK
K30KKwogYm9vbCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVDb21tYW5kKGNvbnN0IFdlYlN0cmluZyYg
bmFtZSkKIHsKICAgICBBU1NFUlQoZnJhbWUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZyYW1lSW1wbC5oCmluZGV4IDE5ZWI2ZDNlYTQ1MmFkN2EwMGExOTFmYTliODk5NWRlNzI5
Y2M4YTMuLjJlZGE0MWNiODY5YWJlMTM3ZTU1OTk5NDI0M2NhMmY0NWI5NWFiOGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCkBAIC0xNDUsNiArMTQ1LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNNYXJrZWRUZXh0KCkgY29uc3Q7CiAgICAgdmly
dHVhbCBXZWJSYW5nZSBtYXJrZWRSYW5nZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBmaXJz
dFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3Ro
LCBXZWJSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBzaXplX3QgY2hhcmFjdGVySW5kZXhGb3JQ
b2ludChjb25zdCBXZWJQb2ludCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBleGVjdXRlQ29t
bWFuZChjb25zdCBXZWJTdHJpbmcmKTsKICAgICB2aXJ0dWFsIGJvb2wgZXhlY3V0ZUNvbW1hbmQo
Y29uc3QgV2ViU3RyaW5nJiwgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSk7CiAgICAgdmlydHVhbCBi
b29sIGlzQ29tbWFuZEVuYWJsZWQoY29uc3QgV2ViU3RyaW5nJikgY29uc3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCmluZGV4IGI0ZDQyNDZj
M2Y2MDEwYmNhZjUwMjFkNGNkOTY4MWFiZmMzOTNkYjUuLjZhNjQxYTkxNDJiMjhkNjIyZjE5YWZj
Nzk0NmRlNGRiNDlkZjRhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBvcHVwTWVudUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBvcHVwTWVudUltcGwuY3BwCkBAIC00Myw2ICs0Myw3IEBACiAKICNpbmNsdWRlICJXZWJJbnB1
dEV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViSW5wdXRFdmVudENvbnZlcnNpb24uaCIKKyNpbmNsdWRl
ICJXZWJSYW5nZS5oIgogI2luY2x1ZGUgIldlYlJlY3QuaCIKICNpbmNsdWRlICJXZWJXaWRnZXRD
bGllbnQuaCIKIApAQCAtMjUyLDYgKzI1MywxMyBAQCBib29sIFdlYlBvcHVwTWVudUltcGw6OmNv
bmZpcm1Db21wb3NpdGlvbihjb25zdCBXZWJTdHJpbmcmIHRleHQpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCitib29sIFdlYlBvcHVwTWVudUltcGw6OmNvbXBvc2l0aW9uUmFuZ2Uoc2l6ZV90KiBs
b2NhdGlvbiwgc2l6ZV90KiBsZW5ndGgpCit7CisgICAgKmxvY2F0aW9uID0gMDsKKyAgICAqbGVu
Z3RoID0gMDsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIFdlYlRleHRJbnB1dFR5cGUgV2ViUG9w
dXBNZW51SW1wbDo6dGV4dElucHV0VHlwZSgpCiB7CiAgICAgcmV0dXJuIFdlYlRleHRJbnB1dFR5
cGVOb25lOwpAQCAtMjYyLDYgKzI3MCwxMyBAQCBXZWJSZWN0IFdlYlBvcHVwTWVudUltcGw6OmNh
cmV0T3JTZWxlY3Rpb25Cb3VuZHMoKQogICAgIHJldHVybiBXZWJSZWN0KCk7CiB9CiAKK2Jvb2wg
V2ViUG9wdXBNZW51SW1wbDo6Y2FyZXRPclNlbGVjdGlvblJhbmdlKHNpemVfdCogbG9jYXRpb24s
IHNpemVfdCogbGVuZ3RoKQoreworICAgICpsb2NhdGlvbiA9IDA7CisgICAgKmxlbmd0aCA9IDA7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIFdlYlBvcHVwTWVudUltcGw6OnNldFRleHRE
aXJlY3Rpb24oV2ViVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKaW5kZXggN2JiOWY3ZTVhMjA1MmNi
ZjhjNzJkZjBjZTBjNDc1ZWZjMWE3YjVlOS4uMDJkNjk4YmJiMzFhODVmYjJmOTkzY2ExMWY4ZDdj
MzY1YTI5ZjI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9w
dXBNZW51SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVu
dUltcGwuaApAQCAtNTEsNiArNTEsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYktl
eWJvYXJkRXZlbnQ7CiBjbGFzcyBXZWJNb3VzZUV2ZW50OwogY2xhc3MgV2ViTW91c2VXaGVlbEV2
ZW50OworY2xhc3MgV2ViUmFuZ2U7CiBzdHJ1Y3QgV2ViUmVjdDsKIAogY2xhc3MgV2ViUG9wdXBN
ZW51SW1wbCA6IHB1YmxpYyBXZWJQb3B1cE1lbnUsCkBAIC03Niw4ICs3NywxMCBAQCBwdWJsaWM6
CiAgICAgICAgIGludCBzZWxlY3Rpb25TdGFydCwgaW50IHNlbGVjdGlvbkVuZCk7CiAgICAgdmly
dHVhbCBib29sIGNvbmZpcm1Db21wb3NpdGlvbigpOwogICAgIHZpcnR1YWwgYm9vbCBjb25maXJt
Q29tcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJiB0ZXh0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29t
cG9zaXRpb25SYW5nZShzaXplX3QqIGxvY2F0aW9uLCBzaXplX3QqIGxlbmd0aCk7CiAgICAgdmly
dHVhbCBXZWJUZXh0SW5wdXRUeXBlIHRleHRJbnB1dFR5cGUoKTsKICAgICB2aXJ0dWFsIFdlYlJl
Y3QgY2FyZXRPclNlbGVjdGlvbkJvdW5kcygpOworICAgIHZpcnR1YWwgYm9vbCBjYXJldE9yU2Vs
ZWN0aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90KiBsZW5ndGgpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRUZXh0RGlyZWN0aW9uKFdlYlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKTsKICAg
ICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCmluZGV4IDE1ZDVhZTA1MTlmMGE4YTQ5MjFlM2FlZGQyMjM0NjE2OWQyMWE4ZGMuLjJhZjEw
ODljNWQwYjc1NWRhZDA0YmEyMDRiMjdlNWQ4N2U3NTU0N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTExNCw2ICsxMTQsNyBAQAogI2luY2x1ZGUg
IldlYlBsdWdpbkNvbnRhaW5lckltcGwuaCIKICNpbmNsdWRlICJXZWJQb2ludC5oIgogI2luY2x1
ZGUgIldlYlBvcHVwTWVudUltcGwuaCIKKyNpbmNsdWRlICJXZWJSYW5nZS5oIgogI2luY2x1ZGUg
IldlYlJlY3QuaCIKICNpbmNsdWRlICJXZWJSdW50aW1lRmVhdHVyZXMuaCIKICNpbmNsdWRlICJX
ZWJTZXR0aW5nc0ltcGwuaCIKQEAgLTEzODEsNiArMTM4MiwyNCBAQCBib29sIFdlYlZpZXdJbXBs
Ojpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJiB0ZXh0KQogICAgIHJldHVybiB0
cnVlOwogfQogCitib29sIFdlYlZpZXdJbXBsOjpjb21wb3NpdGlvblJhbmdlKHNpemVfdCogbG9j
YXRpb24sIHNpemVfdCogbGVuZ3RoKQoreworICAgIEZyYW1lKiBmb2N1c2VkID0gZm9jdXNlZFdl
YkNvcmVGcmFtZSgpOworICAgIGlmICghZm9jdXNlZCB8fCAhbV9pbWVBY2NlcHRFdmVudHMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBFZGl0b3IqIGVkaXRvciA9IGZvY3VzZWQtPmVkaXRv
cigpOworICAgIGlmICghZWRpdG9yIHx8ICFlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlZGl0b3ItPmNv
bXBvc2l0aW9uUmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlLmdldCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAocmFuZ2UtPmdldExvY2F0aW9uQW5kTGVuZ3RoKCpsb2NhdGlvbiwg
Kmxlbmd0aCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwog
V2ViVGV4dElucHV0VHlwZSBXZWJWaWV3SW1wbDo6dGV4dElucHV0VHlwZSgpCiB7CiAgICAgV2Vi
VGV4dElucHV0VHlwZSB0eXBlID0gV2ViVGV4dElucHV0VHlwZU5vbmU7CkBAIC0xNDQxLDYgKzE0
NjAsMjUgQEAgV2ViUmVjdCBXZWJWaWV3SW1wbDo6Y2FyZXRPclNlbGVjdGlvbkJvdW5kcygpCiAg
ICAgcmV0dXJuIHJlY3Q7CiB9CiAKK2Jvb2wgV2ViVmlld0ltcGw6OmNhcmV0T3JTZWxlY3Rpb25S
YW5nZShzaXplX3QqIGxvY2F0aW9uLCBzaXplX3QqIGxlbmd0aCkKK3sKKyAgICBjb25zdCBGcmFt
ZSogZm9jdXNlZCA9IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKKyAgICBpZiAoIWZvY3VzZWQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBmb2N1c2VkLT5zZWxlY3Rpb24oKTsKKyAgICBpZiAoIWNvbnRyb2xsZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjb250cm9sbGVyLT5z
ZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgaWYgKCFyYW5nZS5nZXQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKHJhbmdlLT5nZXRMb2NhdGlvbkFuZExlbmd0aCgqbG9j
YXRpb24sICpsZW5ndGgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIHZvaWQgV2ViVmlld0ltcGw6OnNldFRleHREaXJlY3Rpb24oV2ViVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24pCiB7CiAgICAgLy8gVGhlIEVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rp
b24oKSBmdW5jdGlvbiBjaGVja3MgaWYgd2UgY2FuIGNoYW5nZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggNWRkYTRlNzYwMWU3MzhmMjdhNjYxOWM4YmM0NGEw
MjNiOWZhZTYxZS4uODllNWJiZGVlYjE0OTViZmY2YzYxMTI4YzEyMmQxMTU0YjNmZjJhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC0xMDcsOCArMTA3LDEw
IEBAIHB1YmxpYzoKICAgICAgICAgaW50IHNlbGVjdGlvbkVuZCk7CiAgICAgdmlydHVhbCBib29s
IGNvbmZpcm1Db21wb3NpdGlvbigpOwogICAgIHZpcnR1YWwgYm9vbCBjb25maXJtQ29tcG9zaXRp
b24oY29uc3QgV2ViU3RyaW5nJiB0ZXh0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRpb25S
YW5nZShzaXplX3QqIGxvY2F0aW9uLCBzaXplX3QqIGxlbmd0aCk7CiAgICAgdmlydHVhbCBXZWJU
ZXh0SW5wdXRUeXBlIHRleHRJbnB1dFR5cGUoKTsKICAgICB2aXJ0dWFsIFdlYlJlY3QgY2FyZXRP
clNlbGVjdGlvbkJvdW5kcygpOworICAgIHZpcnR1YWwgYm9vbCBjYXJldE9yU2VsZWN0aW9uUmFu
Z2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90KiBsZW5ndGgpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRUZXh0RGlyZWN0aW9uKFdlYlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKTsKICAgICB2aXJ0dWFs
IGJvb2wgaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkgY29uc3Q7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL21hYy9XZWJUZXh0SGVscGVyLm1tIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvbWFjL1dlYlRleHRIZWxwZXIubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzZjODgwODRmOGJmNjBiOGM2Mzk3YjBjN2VhMzRlMjMyY2M5NDU3MgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL21hYy9XZWJUZXh0SGVscGVyLm1tCkBAIC0w
LDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1w
bC5oIgorI2luY2x1ZGUgIldlYlRleHRIZWxwZXIuaCIKKworI2luY2x1ZGUgIkNvbG9yTWFjLmgi
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5o
IgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlRleHRJ
dGVyYXRvci5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIK
KworI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBIZWxwZXIgZnVuY3Rpb25zLgorCitXZWJGcmFtZUlt
cGwqIGdldFdlYkZyYW1lSW1wbChXZWJGcmFtZSogZnJhbWUpCit7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdlYkZyYW1lSW1wbCo+KGZyYW1lKTsKK30KKworRWxlbWVudCogcmFuZ2VTY29wZShX
ZWJGcmFtZSogd2ViRnJhbWUpCit7CisgICAgRnJhbWUqIGZyYW1lID0gZ2V0V2ViRnJhbWVJbXBs
KHdlYkZyYW1lKS0+ZnJhbWUoKTsKKyAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZnJhbWUt
PnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgcmV0dXJuIHNlbGVjdGlv
blJvb3QgPyBzZWxlY3Rpb25Sb290IDogZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVu
dCgpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitXZWJUZXh0SGVscGVyOjpXZWJU
ZXh0SGVscGVyKFdlYkZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCit7Cit9CisK
Ky8vIFRoaXMgZnVuY3Rpb24gaXMgY29waWVkIGZyb20gL1dlYktpdC9tYWMvTWlzYy9XZWJOU0F0
dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0uCitXZWJLaXQ6OldlYlN0cmluZyBXZWJUZXh0SGVscGVy
OjpzdWJzdHJpbmdJblJhbmdlKHNpemVfdCBsb2NhdGlvbiwgc2l6ZV90IGxlbmd0aCkKK3sKKyAg
ICBGcmFtZSogZnJhbWUgPSBnZXRXZWJGcmFtZUltcGwobV9mcmFtZSktPmZyYW1lKCk7CisgICAg
aWYgKGZyYW1lLT52aWV3KCktPm5lZWRzTGF5b3V0KCkpCisgICAgICAgIGZyYW1lLT52aWV3KCkt
PmxheW91dCgpOworCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZShUZXh0SXRlcmF0b3I6OnJhbmdl
RnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHJhbmdlU2NvcGUobV9mcmFtZSksIGxvY2F0aW9uLCBsZW5n
dGgpKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gV2ViS2l0OjpXZWJTdHJpbmco
KTsKKworICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIHN0cmluZyA9IFtbTlNNdXRhYmxl
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSog
YXR0cnMgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKKworICAgIHVuc2lnbmVk
IHBvc2l0aW9uID0gMDsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdChyYW5nZS5nZXQoKSk7ICFp
dC5hdEVuZCgpICYmIFtzdHJpbmcgbGVuZ3RoXSA8IGxlbmd0aDsgaXQuYWR2YW5jZSgpKSB7Cisg
ICAgICAgIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMgPSBpdC5sZW5ndGgoKTsKKyAgICAgICAgaWYg
KCFudW1DaGFyYWN0ZXJzKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgRXhjZXB0
aW9uQ29kZSBleGNlcHRpb24gPSAwOworICAgICAgICBOb2RlKiBjb250YWluZXIgPSBpdC5yYW5n
ZSgpLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pOworICAgICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gY29udGFpbmVyLT5yZW5kZXJlcigpOworICAgICAgICBBU1NFUlQocmVuZGVyZXIp
OworICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgICAgIE5TRm9u
dCogZm9udCA9IHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCk7CisgICAg
ICAgIC8vIElmIHRoZSBwbGF0Zm9ybSBmb250IGNhbid0IGJlIGxvYWRlZCwgaXQncyBsaWtlbHkg
dGhhdCB0aGUgc2l0ZSBpcworICAgICAgICAvLyB1c2luZyBhIHdlYiBmb250LiBGb3Igbm93LCBq
dXN0IHVzZSB0aGUgZGVmYXVsdCBmb250IGluc3RlYWQuCisgICAgICAgIC8vIFRPRE8ocnNlc2Vr
KTogQ2hhbmdlIHRoZSBmb250IGFjdGl2YXRpb24gZmxhZ3MgdG8gYWxsb3cgb3RoZXIgcHJvY2Vz
c2VzCisgICAgICAgIC8vIHRvIHVzZSB0aGUgZm9udC4KKyAgICAgICAgaWYgKCFmb250KQorICAg
ICAgICAgIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6c3R5bGUtPmZvbnQoKS5zaXpl
KCldOworICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0
ZU5hbWVdOworCisgICAgICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5Q29sb3IpLmFscGhhKCkpCisgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0Om5zQ29s
b3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5
Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIFthdHRycyByZW1vdmVPYmplY3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVO
YW1lXTsKKyAgICAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkpCisgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0
Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcikpIGZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBbYXR0cnMgcmVtb3ZlT2JqZWN0Rm9yS2V5Ok5TQmFja2dyb3Vu
ZENvbG9yQXR0cmlidXRlTmFtZV07CisKKyAgICAgICAgTlNTdHJpbmcqIHN1YnN0cmluZyA9Cisg
ICAgICAgICAgICBbW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5OmNv
bnN0X2Nhc3Q8VUNoYXIqPihpdC5jaGFyYWN0ZXJzKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOml0Lmxlbmd0aCgpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZVdoZW5Eb25lOk5PXSBhdXRvcmVs
ZWFzZV07CisgICAgICAgIFtzdHJpbmcgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJh
bmdlKHBvc2l0aW9uLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aFN0cmlu
ZzpzdWJzdHJpbmddOworICAgICAgICBbc3RyaW5nIHNldEF0dHJpYnV0ZXM6YXR0cnMgcmFuZ2U6
TlNNYWtlUmFuZ2UocG9zaXRpb24sIG51bUNoYXJhY3RlcnMpXTsKKyAgICAgICAgcG9zaXRpb24g
Kz0gbnVtQ2hhcmFjdGVyczsKKyAgICB9CisgICAgTlNEYXRhKiBhcmNoaXZlZERhdGEoW05TQXJj
aGl2ZXIgYXJjaGl2ZWREYXRhV2l0aFJvb3RPYmplY3Q6c3RyaW5nXSk7CisgICAgaWYgKCFhcmNo
aXZlZERhdGEpCisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpXZWJTdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgV2ViVUNoYXIqPihbYXJjaGl2ZWREYXRhIGJ5
dGVzXSksCisgICAgICAgIFthcmNoaXZlZERhdGEgbGVuZ3RoXSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDkzOThkZWNkNjkxNDRhZDVlNjFlOTBkNjhm
Y2NhY2M3NmIzMmY4YjEuLjliZGEzYmQwMmY5ZGVmYjNjN2NhZTRhNjRlODJlM2ZmNWUwZjVjMjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0wMy0yNCAgUm9iZXJ0IFNl
c2VrICA8cnNlc2VrQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbQ2hyb21pdW1dIEltcGxlbWVudCBXZWJLaXQgbWV0aG9kcyB0
byBhc3Npc3Qgd2l0aCBDb2NvYSBOU1RleHRJbnB1dCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NjkKKworICAgICAgICAq
IFdlYlZpZXcvV2ViRnJhbWUubW06IAorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydFRvTlNS
YW5nZTpdKTogTW92ZWQgZHVwbGljYXRlZCBjb2RlIHRvIFdlYkNvcmUKKyAgICAgICAgKC1bV2Vi
RnJhbWUgX2NoYXJhY3RlclJhbmdlQXRQb2ludDpdKTogTW92ZWQgZHVwbGljYXRlZCBjb2RlIHRv
IFdlYkNvcmUKKwogMjAxMS0wMy0yMyAgSmlhIFB1ICA8anB1QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tCmluZGV4IDllNzk4ZDIxZmEwMTU0NDJhNDhkNTQ1MzUwNmE0NDExNGRiNGM1NjguLjEwODk2
OTU0NjAzOTlmYzMxYTAwOTAxOGNiYTY3YWU2ZDNiM2EyZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJGcmFtZS5tbQpAQCAtNjcwLDMwICs2NzAsMTAgQEAgc3RhdGljIGlubGluZSBXZWJE
YXRhU291cmNlICpkYXRhU291cmNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAKIC0gKE5TUmFu
Z2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJhbmdlICopcmFuZ2UKIHsKLSAgICBpZiAoIXJhbmdlIHx8
ICFyYW5nZS0+c3RhcnRDb250YWluZXIoKSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5T
Tm90Rm91bmQsIDApOwotCi0gICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IF9wcml2YXRlLT5j
b3JlRnJhbWUtPnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgRWxlbWVu
dCogc2NvcGUgPSBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IF9wcml2YXRlLT5jb3Jl
RnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwotICAgIAotICAgIC8vIE1vdXNl
IGV2ZW50cyBtYXkgY2F1c2UgVFNNIHRvIGF0dGVtcHQgdG8gY3JlYXRlIGFuIE5TUmFuZ2UgZm9y
IGEgcG9ydGlvbiBvZiB0aGUgdmlldwotICAgIC8vIHRoYXQgaXMgbm90IGluc2lkZSB0aGUgY3Vy
cmVudCBlZGl0YWJsZSByZWdpb24uICBUaGVzZSBjaGVja3MgZW5zdXJlIHdlIGRvbid0IHByb2R1
Y2UKLSAgICAvLyBwb3RlbnRpYWxseSBpbnZhbGlkIGRhdGEgd2hlbiByZXNwb25kaW5nIHRvIHN1
Y2ggcmVxdWVzdHMuCi0gICAgaWYgKHJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IHNjb3BlICYm
ICFyYW5nZS0+c3RhcnRDb250YWluZXIoKS0+aXNEZXNjZW5kYW50T2Yoc2NvcGUpKQotICAgICAg
ICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgaWYgKHJhbmdlLT5lbmRD
b250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPmVuZENvbnRhaW5lcigpLT5pc0Rlc2NlbmRh
bnRPZihzY29wZSkpCi0gICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsK
LSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHRlc3RSYW5nZSA9IFJhbmdlOjpjcmVhdGUoc2NvcGUt
PmRvY3VtZW50KCksIHNjb3BlLCAwLCByYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0
YXJ0T2Zmc2V0KCkpOwotICAgIEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0g
c2NvcGUpOwotICAgIGludCBzdGFydFBvc2l0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aCh0ZXN0UmFuZ2UuZ2V0KCkpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICB0ZXN0UmFu
Z2UtPnNldEVuZChyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSwgZWMp
OwotICAgIEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOwotICAg
IGludCBlbmRQb3NpdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLmdl
dCgpKTsKLQotICAgIHJldHVybiBOU01ha2VSYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlv
biAtIHN0YXJ0UG9zaXRpb24pOworICAgIHNpemVfdCBsb2NhdGlvbiwgbGVuZ3RoOworICAgIGlm
IChyYW5nZSAmJiByYW5nZS0+Z2V0TG9jYXRpb25BbmRMZW5ndGgobG9jYXRpb24sIGxlbmd0aCkp
CisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShsb2NhdGlvbiwgbGVuZ3RoKTsKKyAgICByZXR1
cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiB9CiAKIC0gKFBhc3NSZWZQdHI8UmFuZ2U+
KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlCkBAIC04MjAsMjcgKzgwMCw3IEBA
IHN0YXRpYyBpbmxpbmUgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZShEb2N1bWVudExvYWRlciog
bG9hZGVyKQogCiAtIChET01SYW5nZSAqKV9jaGFyYWN0ZXJSYW5nZUF0UG9pbnQ6KE5TUG9pbnQp
cG9pbnQKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSBbc2VsZiBfdmlzaWJsZVBv
c2l0aW9uRm9yUG9pbnQ6cG9pbnRdOwotICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMgPSBwb3Np
dGlvbi5wcmV2aW91cygpOwotICAgIGlmIChwcmV2aW91cy5pc05vdE51bGwoKSkgewotICAgICAg
ICBET01SYW5nZSAqcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSA9IGtpdChtYWtlUmFuZ2UocHJldmlv
dXMsIHBvc2l0aW9uKS5nZXQoKSk7Ci0gICAgICAgIE5TUmVjdCByZWN0ID0gW3NlbGYgX2ZpcnN0
UmVjdEZvckRPTVJhbmdlOnByZXZpb3VzQ2hhcmFjdGVyUmFuZ2VdOwotICAgICAgICBpZiAoTlNQ
b2ludEluUmVjdChwb2ludCwgcmVjdCkpCi0gICAgICAgICAgICByZXR1cm4gcHJldmlvdXNDaGFy
YWN0ZXJSYW5nZTsKLSAgICB9Ci0KLSAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IHBvc2l0aW9u
Lm5leHQoKTsKLSAgICBpZiAobmV4dC5pc05vdE51bGwoKSkgewotICAgICAgICBET01SYW5nZSAq
bmV4dENoYXJhY3RlclJhbmdlID0ga2l0KG1ha2VSYW5nZShwb3NpdGlvbiwgbmV4dCkuZ2V0KCkp
OwotICAgICAgICBOU1JlY3QgcmVjdCA9IFtzZWxmIF9maXJzdFJlY3RGb3JET01SYW5nZTpuZXh0
Q2hhcmFjdGVyUmFuZ2VdOwotICAgICAgICBpZiAoTlNQb2ludEluUmVjdChwb2ludCwgcmVjdCkp
Ci0gICAgICAgICAgICByZXR1cm4gbmV4dENoYXJhY3RlclJhbmdlOwotICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gbmlsOworICAgIHJldHVybiBraXQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+cmFuZ2VG
b3JQb2ludChJbnRQb2ludChwb2ludCkpLmdldCgpKTsKIH0KIAogLSAoRE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbiAqKV90eXBpbmdTdHlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGM2YWY2NTNhZjk2OTZkNmU1MDdh
YTVkZTQyNjI3Njg3YTgyNzgzYjEuLjE3MTYxMGU5NGNlNmRiZTNlYzJkZGUzM2Q4N2MyMWFjNWQ4
NmYxNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMS0wMy0yNCAgUm9iZXJ0IFNl
c2VrICA8cnNlc2VrQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbQ2hyb21pdW1dIEltcGxlbWVudCBXZWJLaXQgbWV0aG9kcyB0
byBhc3Npc3Qgd2l0aCBDb2NvYSBOU1RleHRJbnB1dCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NjkKKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKTogTW92
ZWQgZHVwbGljYXRlZCBjb2RlIHRvIFdlYkNvcmUKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06IE1vdmVkIGR1
cGxpY2F0ZWQgY29kZSB0byBXZWJDb3JlCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldE1h
cmtlZFJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y2hhcmFjdGVySW5kZXhGb3JQ
b2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
QXRMb2NhdGlvbik6CisKIDIwMTEtMDMtMjQgIEplZmYgTWlsbGVyICA8amVmZm1AYXBwbGUuY29t
PgogCiAgICAgICAgIEZpeCB0eXBvIC0gVVNFKENGX05FVFdPUkspIHNob3VsZCBiZSBVU0UoQ0ZO
RVRXT1JLKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCBiOTU0MjgzNTkxMzM3ODBiNGNl
ZDYwYmY2M2Q5NWEzNmI5ZGUxNTBjLi5mYTYzNTI2YmJjMmQ2YjMwOTc2YzdjZjk2Mzk2ZGM0YmFm
NDM1ZWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC0xOTYsNyArMTk2LDE0IEBAIHZv
aWQgV2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCkKICAgICBzZWxl
Y3Rpb25TdGF0ZS5pc0luUGFzc3dvcmRGaWVsZCA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNJblBh
c3N3b3JkRmllbGQoKTsKICAgICBzZWxlY3Rpb25TdGF0ZS5oYXNDb21wb3NpdGlvbiA9IGZyYW1l
LT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKTsKIAotICAgIFdlYlBhZ2U6OmdldExvY2F0aW9u
QW5kTGVuZ3RoRnJvbVJhbmdlKGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSwgc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZVN0YXJ0LCBzZWxlY3Rpb25TdGF0
ZS5zZWxlY3RlZFJhbmdlTGVuZ3RoKTsKKyAgICBSYW5nZSogcmFuZ2UgPSBmcmFtZS0+c2VsZWN0
aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCk7CisgICAgaWYgKHJhbmdlKSB7CisgICAg
ICAgIHNpemVfdCBsb2NhdGlvbiwgbGVuZ3RoOworICAgICAgICBpZiAoIXJhbmdlLT5nZXRMb2Nh
dGlvbkFuZExlbmd0aChsb2NhdGlvbiwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZVN0YXJ0ID0gc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGxvY2F0aW9uKTsKKyAgICAgICAgc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZUxl
bmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGgpOworICAgIH0KIAogICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWxlY3Rpb25TdGF0ZUNoYW5nZWQoc2Vs
ZWN0aW9uU3RhdGUpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCmluZGV4IDZmMTY0NTY3ZjExMGZmZGM5ZTY5NmMzMTQxYTdkMTMwNjE5M2M4ZTAu
LjIwNmZkZjlmN2ViOTk1YzBlZDVkMDMyZjRlZjFlYjEzMDUzMzkwNGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTgwMywzNSArODAzLDYg
QEAgV2ViQ29udGV4dE1lbnUqIFdlYlBhZ2U6OmNvbnRleHRNZW51KCkKICAgICByZXR1cm4gbV9j
b250ZXh0TWVudS5nZXQoKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpnZXRMb2NhdGlvbkFuZExlbmd0
aEZyb21SYW5nZShSYW5nZSogcmFuZ2UsIHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxl
bmd0aCkKLXsKLSAgICBsb2NhdGlvbiA9IG5vdEZvdW5kOwotICAgIGxlbmd0aCA9IDA7Ci0KLSAg
ICBpZiAoIXJhbmdlIHx8ICFyYW5nZS0+c3RhcnRDb250YWluZXIoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IHJhbmdlLT5vd25lckRvY3VtZW50KCkt
PmZyYW1lKCktPnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgRWxlbWVu
dCogc2NvcGUgPSBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IHJhbmdlLT5vd25lckRv
Y3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwotICAgIAotICAgIC8vIE1vdXNlIGV2ZW50cyBt
YXkgY2F1c2UgVFNNIHRvIGF0dGVtcHQgdG8gY3JlYXRlIGFuIE5TUmFuZ2UgZm9yIGEgcG9ydGlv
biBvZiB0aGUgdmlldwotICAgIC8vIHRoYXQgaXMgbm90IGluc2lkZSB0aGUgY3VycmVudCBlZGl0
YWJsZSByZWdpb24uICBUaGVzZSBjaGVja3MgZW5zdXJlIHdlIGRvbid0IHByb2R1Y2UKLSAgICAv
LyBwb3RlbnRpYWxseSBpbnZhbGlkIGRhdGEgd2hlbiByZXNwb25kaW5nIHRvIHN1Y2ggcmVxdWVz
dHMuCi0gICAgaWYgKHJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IHNjb3BlICYmICFyYW5nZS0+
c3RhcnRDb250YWluZXIoKS0+aXNEZXNjZW5kYW50T2Yoc2NvcGUpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKHJhbmdlLT5lbmRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPmVuZENv
bnRhaW5lcigpLT5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFJlZlB0cjxSYW5nZT4gdGVzdFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzY29wZS0+ZG9jdW1lbnQo
KSwgc2NvcGUsIDAsIHJhbmdlLT5zdGFydENvbnRhaW5lcigpLCByYW5nZS0+c3RhcnRPZmZzZXQo
KSk7Ci0gICAgQVNTRVJUKHRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7Ci0g
ICAgbG9jYXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5nZXQoKSk7
Ci0gICAgCi0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICB0ZXN0UmFuZ2UtPnNldEVuZChyYW5n
ZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSwgZWMpOwotICAgIEFTU0VSVCh0
ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOwotICAgIGxlbmd0aCA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLmdldCgpKSAtIGxvY2F0aW9uOwotfQotCiAv
LyBFdmVudHMgCiAKIHN0YXRpYyBjb25zdCBXZWJFdmVudCogZ19jdXJyZW50RXZlbnQgPSAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggZjdiOTlk
MjU4YjJkZWI4NzJkZGJlYzU5YzEzN2Y0NWE3YjBmY2VhMi4uNWQyNGYwY2I0ZWIzNmM4NGY5YWYw
MmE4OWQzNGMzMjczMzBiNDBmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oCkBAIC0yOTEsOCArMjkxLDYgQEAgcHVibGljOgogCiAgICAgU2FuZGJveEV4
dGVuc2lvblRyYWNrZXImIHNhbmRib3hFeHRlbnNpb25UcmFja2VyKCkgeyByZXR1cm4gbV9zYW5k
Ym94RXh0ZW5zaW9uVHJhY2tlcjsgfQogCi0gICAgc3RhdGljIHZvaWQgZ2V0TG9jYXRpb25BbmRM
ZW5ndGhGcm9tUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqLCB1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2
NF90JiBsZW5ndGgpOwotCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgcmVnaXN0ZXJVSVBy
b2Nlc3NBY2Nlc3NpYmlsaXR5VG9rZW5zKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmIGVs
ZW1lblRva2VuLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiB3aW5kb3dUb2tlbik7CiAg
ICAgQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QqIGFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3Qo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbQppbmRleCBiZDFiMTA5YjZhNTA3NDQ1YjhkYjJhNTc3ZDUzN2RkYjEzOTg5M2JhLi44
NjZhMWYyMDI4OTU0YjlhOWI4MzM4ODNhNmMzMGFjNzczNjQ4NGQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0xNjAs
MzMgKzE2MCwxMyBAQCB2b2lkIFdlYlBhZ2U6OmdldE1hcmtlZFJhbmdlKHVpbnQ2NF90JiBsb2Nh
dGlvbiwgdWludDY0X3QmIGxlbmd0aCkKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgZ2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoZnJh
bWUtPmVkaXRvcigpLT5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCksIGxvY2F0aW9uLCBsZW5ndGgp
OwotfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gY2hhcmFjdGVyUmFuZ2VBdFBvaW50KEZy
YW1lKiBmcmFtZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQotewotICAgIFZpc2libGVQb3NpdGlv
biBwb3NpdGlvbiA9IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludCk7Ci0gICAg
aWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBWaXNp
YmxlUG9zaXRpb24gcHJldmlvdXMgPSBwb3NpdGlvbi5wcmV2aW91cygpOwotICAgIGlmIChwcmV2
aW91cy5pc05vdE51bGwoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHByZXZpb3VzQ2hhcmFj
dGVyUmFuZ2UgPSBtYWtlUmFuZ2UocHJldmlvdXMsIHBvc2l0aW9uKTsKLSAgICAgICAgSW50UmVj
dCByZWN0ID0gZnJhbWUtPmVkaXRvcigpLT5maXJzdFJlY3RGb3JSYW5nZShwcmV2aW91c0NoYXJh
Y3RlclJhbmdlLmdldCgpKTsKLSAgICAgICAgaWYgKHJlY3QuY29udGFpbnMocG9pbnQpKQotICAg
ICAgICAgICAgcmV0dXJuIHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UucmVsZWFzZSgpOwotICAgIH0K
LSAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IHBvc2l0aW9uLm5leHQoKTsKLSAgICBp
ZiAobmV4dC5pc05vdE51bGwoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IG5leHRDaGFyYWN0
ZXJSYW5nZSA9IG1ha2VSYW5nZShwb3NpdGlvbiwgbmV4dCk7Ci0gICAgICAgIEludFJlY3QgcmVj
dCA9IGZyYW1lLT5lZGl0b3IoKS0+Zmlyc3RSZWN0Rm9yUmFuZ2UobmV4dENoYXJhY3RlclJhbmdl
LmdldCgpKTsKLSAgICAgICAgaWYgKHJlY3QuY29udGFpbnMocG9pbnQpKQotICAgICAgICAgICAg
cmV0dXJuIG5leHRDaGFyYWN0ZXJSYW5nZS5yZWxlYXNlKCk7CisgICAgUmFuZ2UqIHJhbmdlID0g
ZnJhbWUtPmVkaXRvcigpLT5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCk7CisgICAgc2l6ZV90IGxv
YywgbGVuOworICAgIGlmIChyYW5nZSAmJiByYW5nZS0+Z2V0TG9jYXRpb25BbmRMZW5ndGgobG9j
LCBsZW4pKSB7CisgICAgICAgIGxvY2F0aW9uID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxvYyk7
CisgICAgICAgIGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW4pOwogICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gMDsKIH0KICAgICAKIHZvaWQgV2ViUGFnZTo6Y2hhcmFjdGVySW5kZXhG
b3JQb2ludChJbnRQb2ludCBwb2ludCwgdWludDY0X3QmIGluZGV4KQpAQCAtMTk5LDEyICsxNzks
MTMgQEAgdm9pZCBXZWJQYWdlOjpjaGFyYWN0ZXJJbmRleEZvclBvaW50KEludFBvaW50IHBvaW50
LCB1aW50NjRfdCYgaW5kZXgpCiAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBmcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50LCBmYWxzZSk7CiAgICAgZnJh
bWUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWRO
b2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkgOiBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5m
b2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY2hh
cmFjdGVyUmFuZ2VBdFBvaW50KGZyYW1lLCByZXN1bHQucG9pbnQoKSk7CisgICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IGZyYW1lLT5yYW5nZUZvclBvaW50KHJlc3VsdC5wb2ludCgpKTsKICAgICBp
ZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICB1aW50NjRfdCBsZW5ndGg7Ci0gICAg
Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UocmFuZ2UuZ2V0KCksIGluZGV4LCBsZW5ndGgp
OworICAgIHNpemVfdCBsb2NhdGlvbiwgbGVuZ3RoOworICAgIGlmIChyYW5nZS0+Z2V0TG9jYXRp
b25BbmRMZW5ndGgobG9jYXRpb24sIGxlbmd0aCkpCisgICAgICAgIGluZGV4ID0gc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KGxvY2F0aW9uKTsKIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IGNv
bnZlcnRUb1JhbmdlKEZyYW1lKiBmcmFtZSwgTlNSYW5nZSBuc3JhbmdlKQpAQCAtMjU1LDcgKzIz
Niw3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmIGZsb2F0UG9pbnQpCiAgICAgZnJhbWUgPSByZXN1bHQuaW5uZXJOb25T
aGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCktPmZy
YW1lKCkgOiBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
IAogICAgIC8vIEZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBjaGFyYWN0ZXJzIHVuZGVyIHRo
ZSBwb2ludC4KLSAgICBSZWZQdHI8UmFuZ2U+IGNoYXJhY3RlclJhbmdlID0gY2hhcmFjdGVyUmFu
Z2VBdFBvaW50KGZyYW1lLCBmcmFtZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHBvaW50KSk7
CisgICAgUmVmUHRyPFJhbmdlPiBjaGFyYWN0ZXJSYW5nZSA9IGZyYW1lLT5yYW5nZUZvclBvaW50
KGZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMocG9pbnQpKTsKICAgICBpZiAoIWNoYXJh
Y3RlclJhbmdlKQogICAgICAgICByZXR1cm47CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86977</attachid>
            <date>2011-03-25 13:11:57 -0700</date>
            <delta_ts>2011-04-06 08:53:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54969-20110325161155.patch</filename>
            <type>text/plain</type>
            <size>41665</size>
            <attacher name="Robert Sesek">rsesek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1MzAzMThiNGY2Zjg5MjQ3ODIwYWJmMzY4NTZlYjliZTRlNTY2NzNjLi4w
YzlmMWJlOTU1ZTg2NjJhMWRhZDRkMWE4YWY0YTk3ODIwMmU2MGExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTkgQEAKKzIwMTEtMDMtMjUgIFJvYmVydCBTZXNlayAgPHJzZXNla0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0No
cm9taXVtXSBJbXBsZW1lbnQgV2ViS2l0IG1ldGhvZHMgdG8gYXNzaXN0IHdpdGggQ29jb2EgTlNU
ZXh0SW5wdXQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU0OTY5CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisK
KyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0SXRlcmF0b3I6OmxvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKTogTmV3IG1ldGhvZCBmcm9t
IGR1cGxpY2F0ZWQgY29kZSBpbiBXZWJLaXRzCisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0
b3IuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
OjpyYW5nZUZvclBvaW50KTogTmV3IG1ldGhvZCBmcm9tIGR1cGxpY2F0ZWQgY29kZSBpbiBXZWJL
aXRzCisgICAgICAgICogcGFnZS9GcmFtZS5oOgorCiAyMDExLTAzLTI1ICBEYXZlIEh5YXR0ICA8
aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkZWxlIFBldGVyc29uLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgppbmRleCBkMTllNGU0YzQ3ZGY3NTc1ODUzNGEyOTZlNGUwYzNkYzJi
MDI1ZGMzLi40YTdkNTQzYmI2ZmQxOGNlMWQyMzRkZWFlYmNlNWRmN2M1YzA4N2RiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgpAQCAtMjk2LDYgKzI5Niw3IEBAIF9fWk43V2ViQ29yZTEyU3BlbGxDaGVj
a2VyOGRpZENoZWNrRWlSS04zV1RGNlZlY3RvcklOU18xOVNwZWxsQ2hlY2tpbmdSZXN1bHRFTG0w
CiBfX1pON1dlYkNvcmUxMlRleHRFbmNvZGluZ0MxRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJD
b3JlMTJUZXh0SXRlcmF0b3IxMXJhbmdlTGVuZ3RoRVBLTlNfNVJhbmdlRWIKIF9fWk43V2ViQ29y
ZTEyVGV4dEl0ZXJhdG9yMjZyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aEVQTlNfN0VsZW1lbnRF
aWliCitfX1pON1dlYkNvcmUxMlRleHRJdGVyYXRvcjI2bG9jYXRpb25BbmRMZW5ndGhGcm9tUmFu
Z2VFUEtOU181UmFuZ2VFUm1TNF8KIF9fWk43V2ViQ29yZTEyVGV4dEl0ZXJhdG9yN2FkdmFuY2VF
dgogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3I4c3VicmFuZ2VFUE5TXzVSYW5nZUVpaQogX19a
TjdXZWJDb3JlMTJUZXh0SXRlcmF0b3JDMUVQS05TXzVSYW5nZUVOU18yMFRleHRJdGVyYXRvckJl
aGF2aW9yRQpAQCAtNzEyLDYgKzcxMyw3IEBAIF9fWk43V2ViQ29yZTVGcmFtZTZjcmVhdGVFUE5T
XzRQYWdlRVBOU18yMUhUTUxGcmFtZU93bmVyRWxlbWVudEVQTlNfMTdGcmFtZUxvYWRlCiBfX1pO
N1dlYkNvcmU1RnJhbWU3c2V0Vmlld0VOM1dURjEwUGFzc1JlZlB0cklOU185RnJhbWVWaWV3RUVF
CiBfX1pON1dlYkNvcmU1RnJhbWU5bm9kZUltYWdlRVBOU180Tm9kZUUKIF9fWk43V2ViQ29yZTVG
cmFtZTlzY2FsZVBhZ2VFZlJLTlNfOEludFBvaW50RQorX19aTjdXZWJDb3JlNUZyYW1lMTNyYW5n
ZUZvclBvaW50RVJLTlNfOEludFBvaW50RQogX19aTjdXZWJDb3JlNUZyYW1lRDFFdgogX19aTjdX
ZWJDb3JlNUltYWdlMTJzdXBwb3J0c1R5cGVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU1
SW1hZ2UyMGxvYWRQbGF0Zm9ybVJlc291cmNlRVBLYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
SXRlcmF0b3IuY3BwCmluZGV4IDFiMjVjODc3MWI4MjVhYmU4ODQ4MjY4ZmU1OWYwYjBhNmVhMWYw
OGEuLjZhMjRkMjczNmZjZGQ0NTM3ZGFmM2M5ZGVjMTRjM2EzZmVjNTc0ZGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRl
ICJUZXh0SXRlcmF0b3IuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCkBAIC0yMzY5LDYgKzIzNzAsMzggQEAgUGFzc1JlZlB0
cjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChFbGVtZW50
KiBzY29wZSwgaW50IHIKICAgICByZXR1cm4gcmVzdWx0UmFuZ2UucmVsZWFzZSgpOwogfQogCiti
b29sIFRleHRJdGVyYXRvcjo6bG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoY29uc3QgUmFuZ2Uq
IHJhbmdlLCBzaXplX3QmIGxvY2F0aW9uLCBzaXplX3QmIGxlbmd0aCkKK3sKKyAgICBsb2NhdGlv
biA9IG5vdEZvdW5kOworICAgIGxlbmd0aCA9IDA7CisKKyAgICBpZiAoIXJhbmdlLT5zdGFydENv
bnRhaW5lcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFbGVtZW50KiBzZWxlY3Rp
b25Sb290ID0gcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnJv
b3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3Qg
PyBzZWxlY3Rpb25Sb290IDogcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCk7CisKKyAgICAvLyBUaGUgY3JpdGljYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgb25seSBn
ZXRzIGNhbGxlZCB3aXRoIHJhbmdlcyB0aGF0CisgICAgLy8gY29uY2VudHJhdGUgb24gYSBnaXZl
biBhcmVhIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiByb290LiBUaGlzIGlzIGRvbmUKKyAgICAv
LyBiZWNhdXNlIG9mIHRleHQgZmllbGRzIGFuZCB0ZXh0YXJlYXMuIFRoZSBET00gZm9yIHRob3Nl
IGlzIG5vdAorICAgIC8vIGRpcmVjdGx5IGluIHRoZSBkb2N1bWVudCBET00sIHNvIGVuc3VyZSB0
aGF0IHRoZSByYW5nZSBkb2VzIG5vdCBjcm9zcyBhCisgICAgLy8gYm91bmRhcnkgb2Ygb25lIG9m
IHRob3NlLgorICAgIGlmIChyYW5nZS0+c3RhcnRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCktPmlzRGVzY2VuZGFudE9mKHNjb3BlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gc2NvcGUgJiYgIXJh
bmdlLT5lbmRDb250YWluZXIoKS0+aXNEZXNjZW5kYW50T2Yoc2NvcGUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8UmFuZ2U+IHRlc3RSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
c2NvcGUtPmRvY3VtZW50KCksIHNjb3BlLCAwLCByYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFu
Z2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgIEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCkgPT0gc2NvcGUpOworICAgIGxvY2F0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0
ZXN0UmFuZ2UuZ2V0KCkpOworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgdGVzdFJh
bmdlLT5zZXRFbmQocmFuZ2UtPmVuZENvbnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCksIGVj
KTsKKyAgICBBU1NFUlQodGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKKyAg
ICBsZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5nZXQoKSkgLSBs
b2NhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogLy8gLS0tLS0tLS0KICAgICAKIFVDaGFy
KiBwbGFpblRleHRUb01hbGxvY0FsbG9jYXRlZEJ1ZmZlcihjb25zdCBSYW5nZSogciwgdW5zaWdu
ZWQmIGJ1ZmZlckxlbmd0aCwgYm9vbCBpc0Rpc3BsYXlTdHJpbmcsIFRleHRJdGVyYXRvckJlaGF2
aW9yIGRlZmF1bHRCZWhhdmlvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCmlu
ZGV4IDBmMWE2ZmQwM2IxN2Y3YTViZTljNDkwMjUxM2ExNTA3ODkzOTBiM2UuLmM3MWYzNDY2NTdl
ZTU0MTNiNTgyNWI1Y2UzMGRjMzIwYTI4YTE5NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
SXRlcmF0b3IuaApAQCAtOTgsNiArOTgsNyBAQCBwdWJsaWM6CiAgICAgIAogICAgIHN0YXRpYyBp
bnQgcmFuZ2VMZW5ndGgoY29uc3QgUmFuZ2UqLCBib29sIHNwYWNlc0ZvclJlcGxhY2VkRWxlbWVu
dHMgPSBmYWxzZSk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlRnJvbUxvY2F0
aW9uQW5kTGVuZ3RoKEVsZW1lbnQqIHNjb3BlLCBpbnQgcmFuZ2VMb2NhdGlvbiwgaW50IHJhbmdl
TGVuZ3RoLCBib29sIHNwYWNlc0ZvclJlcGxhY2VkRWxlbWVudHMgPSBmYWxzZSk7CisgICAgc3Rh
dGljIGJvb2wgbG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoY29uc3QgUmFuZ2UqLCBzaXplX3Qm
IGxvY2F0aW9uLCBzaXplX3QmIGxlbmd0aCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+
IHN1YnJhbmdlKFJhbmdlKiBlbnRpcmVSYW5nZSwgaW50IGNoYXJhY3Rlck9mZnNldCwgaW50IGNo
YXJhY3RlckNvdW50KTsKICAgICAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDE5
MWNlMjljZGI2MWI4MzkyNmRjNTI2YzRiYjI4OWY3MDQ1OGMzZTUuLjM5ZGRiNmI0MjMwYTNiZmJj
MmYxMGNlNGU2ODYyZDJiOGFkZDU0MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC04MDQsNiAr
ODA0LDMxIEBAIERvY3VtZW50KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50KGNvbnN0IEludFBvaW50
JiBwb2ludCkKICAgICByZXR1cm4gcmVzdWx0LmlubmVyTm9kZSgpID8gcmVzdWx0LmlubmVyTm9k
ZSgpLT5kb2N1bWVudCgpIDogMDsKIH0KIAorUGFzc1JlZlB0cjxSYW5nZT4gRnJhbWU6OnJhbmdl
Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpCit7CisgICAgVmlzaWJsZVBvc2l0
aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7CisgICAg
aWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFZpc2libGVQ
b3NpdGlvbiBwcmV2aW91cyA9IHBvc2l0aW9uLnByZXZpb3VzKCk7CisgICAgaWYgKHByZXZpb3Vz
LmlzTm90TnVsbCgpKSB7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gcHJldmlvdXNDaGFyYWN0ZXJS
YW5nZSA9IG1ha2VSYW5nZShwcmV2aW91cywgcG9zaXRpb24pOworICAgICAgICBJbnRSZWN0IHJl
Y3QgPSBlZGl0b3IoKS0+Zmlyc3RSZWN0Rm9yUmFuZ2UocHJldmlvdXNDaGFyYWN0ZXJSYW5nZS5n
ZXQoKSk7CisgICAgICAgIGlmIChyZWN0LmNvbnRhaW5zKGZyYW1lUG9pbnQpKQorICAgICAgICAg
ICAgcmV0dXJuIHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UucmVsZWFzZSgpOworICAgIH0KKworICAg
IFZpc2libGVQb3NpdGlvbiBuZXh0ID0gcG9zaXRpb24ubmV4dCgpOworICAgIGlmIChuZXh0Lmlz
Tm90TnVsbCgpKSB7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gbmV4dENoYXJhY3RlclJhbmdlID0g
bWFrZVJhbmdlKHBvc2l0aW9uLCBuZXh0KTsKKyAgICAgICAgSW50UmVjdCByZWN0ID0gZWRpdG9y
KCktPmZpcnN0UmVjdEZvclJhbmdlKG5leHRDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CisgICAgICAg
IGlmIChyZWN0LmNvbnRhaW5zKGZyYW1lUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIG5leHRD
aGFyYWN0ZXJSYW5nZS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIHZv
aWQgRnJhbWU6OmNyZWF0ZVZpZXcoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBib29sIHRyYW5z
cGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBmaXhlZExheW91
dFNpemUsIGJvb2wgdXNlRml4ZWRMYXlvdXQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKaW5kZXggZjIyZmNiODYx
ZmE4MzU2ZmI4YTRhMWQ0NjhhMmUxOTgwNWM4MGNjNC4uMDU4MDVjZjFlMmU0OGRkNDNiZWY2ZjAy
YWEzYTQ2ZDJmNjkzNDBmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaApAQCAtMTg0LDYgKzE4NCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0
aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpOwogICAgICAgICBEb2N1bWVu
dCogZG9jdW1lbnRBdFBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7CisgICAgICAg
IFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9p
bnQpOwogCiAgICAgICAgIFN0cmluZyBzZWFyY2hGb3JMYWJlbHNBYm92ZUNlbGwoUmVndWxhckV4
cHJlc3Npb24qLCBIVE1MVGFibGVDZWxsRWxlbWVudCosIHNpemVfdCogcmVzdWx0RGlzdGFuY2VG
cm9tU3RhcnRPZkNlbGwpOwogICAgICAgICBTdHJpbmcgc2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxl
bWVudChjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFiZWxzLCBFbGVtZW50Kiwgc2l6ZV90KiByZXN1
bHREaXN0YW5jZSwgYm9vbCogcmVzdWx0SXNJbkNlbGxBYm92ZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IGI0NTdhMDMwZGRiN2JlOGNlMzU4NTkxMGQ2MWRhMTI0NDY5NzM1OGUuLjhk
OTcxMzdiOTRmMzAzM2UwZDBmY2UwMmY1YWRjYjBlYjRiYTkxOGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDMtMjUgIFJvYmVydCBTZXNlayAgPHJz
ZXNla0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW0Nocm9taXVtXSBJbXBsZW1lbnQgV2ViS2l0IG1ldGhvZHMgdG8gYXNzaXN0
IHdpdGggQ29jb2EgTlNUZXh0SW5wdXQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0OTY5CisKKyAgICAgICAgKiBXZWJLaXQu
Z3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5oOgorICAgICAgICAqIHB1YmxpYy9XZWJX
aWRnZXQuaDoKKyAgICAgICAgKiBwdWJsaWMvbWFjL1dlYlRleHRIZWxwZXIuaDogQWRkZWQuCisg
ICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
SW1wbDo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UpOiBSZXR1cm4gdGhlIHJlc3VsdCByZWN0
IHRvIHdpbmRvdyBjb29yZGluYXRlcworICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmNo
YXJhY3RlckluZGV4Rm9yUG9pbnQpOiBOZXcgbWV0aG9kIG9uIFdlYkZyYW1lCisgICAgICAgICog
c3JjL1dlYkZyYW1lSW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6Y29tcG9zaXRpb25SYW5nZSk6IE5l
dyBtZXRob2Qgb24gV2ViV2lkZ2V0OyBlbXB0eSBpbXBsCisgICAgICAgIChXZWJLaXQ6OldlYlBv
cHVwTWVudUltcGw6OmNhcmV0T3JTZWxlY3Rpb25SYW5nZSk6IE5ldyBtZXRob2Qgb24gV2ViV2lk
Z2V0OyBlbXB0eSBpbXBsCisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuaDoKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
Y29tcG9zaXRpb25SYW5nZSk6IE5ldyBtZXRob2Qgb24gV2ViV2lkZ2V0CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpjYXJldE9yU2VsZWN0aW9uUmFuZ2UpOiBOZXcgbWV0aG9kIG9uIFdl
YldpZGdldAorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAqIHNyYy9tYWMv
V2ViVGV4dEhlbHBlci5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlRleHRIZWxwZXI6
OldlYlRleHRIZWxwZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJUZXh0SGVscGVyOjpzdWJzdHJp
bmdJblJhbmdlKToKKwogMjAxMS0wMy0yNSAgQ2hhbmcgU2h1ICA8Y3NodUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAppbmRleCBkNDcyNDhlNGY1MjlkNDA4MzQzZWFlMTQwOGRkN2I2ZDZjYzEyNzU0Li4xNjdi
NzViNzliMjQ3NWU2NGJjZGJmNzc4YjUxNjVmMDJkNWVmODgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCkBAIC05Niw2ICs5Niw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9tYWMv
V2ViSW5wdXRFdmVudEZhY3RvcnkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9tYWMvV2Vi
U2FuZGJveFN1cHBvcnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9tYWMvV2ViU2NyZWVu
SW5mb0ZhY3RvcnkuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9tYWMvV2ViVGV4dEhlbHBl
ci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL21hYy9XZWJUaGVtZUVuZ2luZS5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYkFjY2Vzc2liaWxpdHlDYWNoZS5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24uaCcsCkBAIC0zODEs
NiArMzgyLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL3gxMS9XZWJTY3JlZW5JbmZvRmFjdG9y
eS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvbWFjL1dlYklucHV0RXZlbnRGYWN0b3J5Lm1t
JywKICAgICAgICAgICAgICAgICAnc3JjL21hYy9XZWJTY3JlZW5JbmZvRmFjdG9yeS5tbScsCisg
ICAgICAgICAgICAgICAgJ3NyYy9tYWMvV2ViVGV4dEhlbHBlci5tbScsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvTG9jYWxpemVkU3RyaW5ncy5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvTWVkaWFQbGF5
ZXJQcml2YXRlQ2hyb21pdW0uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkZyYW1lLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJG
cmFtZS5oCmluZGV4IDMxMmJiNzBmYWFhODQ5MmU5YzdiNmNlMzU1ZTVkMjAzOTM3YWNlYTcuLjRk
ZmU2ZGJjNDIxZTEyYTYwOWZkNzc4Y2JlMGY0ZWUxMzljMTQ5MGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaApAQCAtNjcsNiArNjcsNyBAQCBjbGFzcyBXZWJVUkxS
ZXF1ZXN0OwogY2xhc3MgV2ViVmlldzsKIHN0cnVjdCBXZWJDb25zb2xlTWVzc2FnZTsKIHN0cnVj
dCBXZWJGaW5kT3B0aW9uczsKK3N0cnVjdCBXZWJQb2ludDsKIHN0cnVjdCBXZWJSZWN0Owogc3Ry
dWN0IFdlYlNjcmlwdFNvdXJjZTsKIHN0cnVjdCBXZWJTaXplOwpAQCAtMzgzLDggKzM4NCwxNSBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFdlYlJhbmdlIG1hcmtlZFJhbmdlKCkgY29uc3QgPSAw
OwogCisgICAgLy8gUmV0dXJucyB0aGUgZnJhbWUgcmVjdGFuZ2xlIGluIHdpbmRvdyBjb29yZGlu
YXRlIHNwYWNlIG9mIHRoZSBnaXZlbiB0ZXh0CisgICAgLy8gcmFuZ2UuCiAgICAgdmlydHVhbCBi
b29sIGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25l
ZCBsZW5ndGgsIFdlYlJlY3QmKSBjb25zdCA9IDA7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBpbmRl
eCBvZiBhIGNoYXJhY3RlciBpbiB0aGUgRnJhbWUncyB0ZXh0IHN0cmVhbSBhdCB0aGUgZ2l2ZW4K
KyAgICAvLyBwb2ludC4gVGhlIHBvaW50IGlzIGluIHRoZSB3aW5kb3cgY29vcmRpbmF0ZSBzcGFj
ZS4gV2lsbCByZXR1cm4KKyAgICAvLyBXVEY6Om5vdEZvdW5kIGlmIHRoZSBwb2ludCBpcyBpbnZh
bGlkLgorICAgIHZpcnR1YWwgc2l6ZV90IGNoYXJhY3RlckluZGV4Rm9yUG9pbnQoY29uc3QgV2Vi
UG9pbnQmKSBjb25zdCA9IDA7CisKICAgICAvLyBTdXBwb3J0cyBjb21tYW5kcyBsaWtlIFVuZG8s
IFJlZG8sIEN1dCwgQ29weSwgUGFzdGUsIFNlbGVjdEFsbCwKICAgICAvLyBVbnNlbGVjdCwgZXRj
LiBTZWUgRWRpdG9yQ29tbWFuZC5jcHAgZm9yIHRoZSBmdWxsIGxpc3Qgb2Ygc3VwcG9ydGVkCiAg
ICAgLy8gY29tbWFuZHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJXaWRnZXQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5o
CmluZGV4IDM2ZmJmMzEzYWQxNzQ2NGM0MWQ4ZDkyN2NiMjEzMmFkYWI2YWU4ODEuLjY3ODg4MmM3
NzM4Y2ZlMTljZDFmZWMwMjVmOWQxYTc2MzlhNDYwMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYldpZGdldC5oCkBAIC00MCw2ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogY2xhc3MgV2ViSW5wdXRFdmVudDsKK2NsYXNzIFdlYlJhbmdlOwogY2xhc3MgV2ViU3Ry
aW5nOwogc3RydWN0IFdlYlJlY3Q7CiBzdHJ1Y3QgV2ViU2l6ZTsKQEAgLTExOSw2ICsxMjAsMTEg
QEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBvbmdvaW5nIGNv
bXBvc2l0aW9uIG9yIHRoZSB0ZXh0IGlzIGluc2VydGVkLgogICAgIHZpcnR1YWwgYm9vbCBjb25m
aXJtQ29tcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJiB0ZXh0KSA9IDA7CiAKKyAgICAvLyBGZXRj
aGVzIHRoZSBjaGFyYWN0ZXIgcmFuZ2Ugb2YgdGhlIGN1cnJlbnQgY29tcG9zaXRpb24sIGFsc28g
Y2FsbGVkIHRoZQorICAgIC8vICJtYXJrZWQgcmFuZ2UuIiBSZXR1cm5zIHRydWUgYW5kIGZpbGxz
IHRoZSBvdXQtcGFyYW10ZXJzIG9uIHN1Y2Nlc3M7CisgICAgLy8gcmV0dXJucyBmYWxzZSBvbiBm
YWlsdXJlLgorICAgIHZpcnR1YWwgYm9vbCBjb21wb3NpdGlvblJhbmdlKHNpemVfdCogbG9jYXRp
b24sIHNpemVfdCogbGVuZ3RoKSA9IDA7CisKICAgICAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHRl
eHQgaW5wdXQgdHlwZSBvZiB0aGlzIFdlYldpZGdldC4KICAgICB2aXJ0dWFsIFdlYlRleHRJbnB1
dFR5cGUgdGV4dElucHV0VHlwZSgpID0gMDsKIApAQCAtMTI2LDYgKzEzMiwxMiBAQCBwdWJsaWM6
CiAgICAgLy8gd2lsbCBiZSByZXR1cm5lZCBpZiBhIHNlbGVjdGlvbiByYW5nZSBpcyBhdmFpbGFi
bGUuCiAgICAgdmlydHVhbCBXZWJSZWN0IGNhcmV0T3JTZWxlY3Rpb25Cb3VuZHMoKSA9IDA7CiAK
KyAgICAvLyBGZXRjaCB0aGUgY3VycmVudCBzZWxlY3Rpb24gcmFuZ2Ugb2YgdGhpcyBXZWJXaWRn
ZXQuIElmIHRoZXJlIGlzIG5vCisgICAgLy8gc2VsZWN0aW9uLCBpdCB3aWxsIG91dHB1dCBhIDAt
bGVuZ3RoIHJhbmdlIHdpdGggdGhlIGxvY2F0aW9uIGF0IHRoZQorICAgIC8vIGNhcmV0LiBSZXR1
cm5zIHRydWUgYW5kIGZpbGxzIHRoZSBvdXQtcGFyYW10ZXJzIG9uIHN1Y2Nlc3M7IHJldHVybnMg
ZmFsc2UKKyAgICAvLyBvbiBmYWlsdXJlLgorICAgIHZpcnR1YWwgYm9vbCBjYXJldE9yU2VsZWN0
aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90KiBsZW5ndGgpID0gMDsKKwogICAgIC8v
IENoYW5nZXMgdGhlIHRleHQgZGlyZWN0aW9uIG9mIHRoZSBzZWxlY3RlZCBpbnB1dCBub2RlLgog
ICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0RGlyZWN0aW9uKFdlYlRleHREaXJlY3Rpb24pID0gMDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvbWFjL1dlYlRleHRI
ZWxwZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL21hYy9XZWJUZXh0SGVscGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjk0ZDE3MTJmNjA5Mzc4ZjMxMGQyZGFiY2U3YmNkYjJlYzdhMTcyNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL21hYy9XZWJU
ZXh0SGVscGVyLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVGV4dEhlbHBlcl9oCisjZGVm
aW5lIFdlYlRleHRIZWxwZXJfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkZyYW1l
OworY2xhc3MgV2ViU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVGhpcyBj
bGFzcyBpcyBhIGhlbHBlciBmb3IgaW1wbGVtZW50aW5nIHBhcnQgb2YgdGhlIE5TVGV4dElucHV0
IHByb3RvY29sIG9uCisvLyB0aGUgcmVuZGVyZXIgc2lkZS4gSW4gdGhlIGZ1dHVyZSBpdCBzaG91
bGQgYmUgZ2VuZXJhbGl6ZWQgdG8gc3VwcG9ydCBpbnB1dAorLy8gbWV0aG9kIGNvbXBvc2l0aW9u
IGFjcm9zcyBhbGwgcGxhdGZvcm1zLgorY2xhc3MgV2ViVGV4dEhlbHBlciB7CitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgV2ViVGV4dEhlbHBlcihXZWJGcmFtZSopOworCisgICAgLy8gUmV0dXJucyBh
IHNlcmlhbGl6ZWQgTlNBdHRyaWJ1dGVkU3RyaW5nICh2aWEgTlNEYXRhKSB0aGF0IGlzIGEgc3Vi
c3RyaW5nCisgICAgLy8gb2YgdGhlIEZyYW1lIGF0IHRoZSBnaXZlbiByYW5nZS4KKyAgICBXZWJT
dHJpbmcgc3Vic3RyaW5nSW5SYW5nZShzaXplX3QgbG9jYXRpb24sIHNpemVfdCBsZW5ndGgpOwor
Citwcm90ZWN0ZWQ6CisgICAgV2ViRnJhbWUqIG1fZnJhbWU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJGcmFtZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJ
bXBsLmNwcAppbmRleCAxMTBiMDFiNWM5N2E5ZjFhODZhODU2YzMwMzgyZjJhNWVmZTMyNjJhLi5k
NWE0YjMzZDM2NzY2YWUzZTY3NDRjMjhkZTZiY2NlOGJkM2IxZDM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAgLTg1LDYgKzg1LDcgQEAKICNpbmNs
dWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKICNp
bmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJGb3JtU3RhdGUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKQEAgLTk4LDYgKzk5LDcgQEAKICNpbmNsdWRlICJIVE1MTGlu
a0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXN0b3J5SXRl
bS5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgInBhaW50aW5nL0dyYXBoaWNz
Q29udGV4dEJ1aWxkZXIuaCIKQEAgLTExMzYsMTEgKzExMzgsMzAgQEAgYm9vbCBXZWJGcmFtZUlt
cGw6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25l
ZCBsZW5ndGgKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSW50
UmVjdCBpbnRSZWN0ID0gZnJhbWUoKS0+ZWRpdG9yKCktPmZpcnN0UmVjdEZvclJhbmdlKHJhbmdl
LmdldCgpKTsKLSAgICByZWN0ID0gV2ViUmVjdChpbnRSZWN0LngoKSwgaW50UmVjdC55KCksIGlu
dFJlY3Qud2lkdGgoKSwgaW50UmVjdC5oZWlnaHQoKSk7CisgICAgcmVjdCA9IFdlYlJlY3QoaW50
UmVjdCk7CisgICAgLy8gV2hlbiBpbnNpZGUgYW4gdGV4dCBjb250cm9sLCBkb24ndCBhZGp1c3Qg
dGhlIHJhbmdlLgorICAgIGlmICghc2VsZWN0aW9uUm9vdCkKKyAgICAgICAgcmVjdCA9IGZyYW1l
KCktPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKIAogICAgIHJldHVybiB0cnVlOwog
fQogCitzaXplX3QgV2ViRnJhbWVJbXBsOjpjaGFyYWN0ZXJJbmRleEZvclBvaW50KGNvbnN0IFdl
YlBvaW50JiB3ZWJQb2ludCkgY29uc3QKK3sKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJl
dHVybiBub3RGb3VuZDsKKworICAgIEludFBvaW50IHBvaW50ID0gZnJhbWUoKS0+dmlldygpLT53
aW5kb3dUb0NvbnRlbnRzKHdlYlBvaW50KTsKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGZy
YW1lKCktPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChwb2ludCwgZmFsc2Up
OworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZSgpLT5yYW5nZUZvclBvaW50KHJlc3Vs
dC5wb2ludCgpKTsKKyAgICBpZiAoIXJhbmdlLmdldCgpKQorICAgICAgICByZXR1cm4gbm90Rm91
bmQ7CisKKyAgICBzaXplX3QgbG9jYXRpb24sIGxlbmd0aDsKKyAgICBUZXh0SXRlcmF0b3I6Omxv
Y2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKHJhbmdlLmdldCgpLCBsb2NhdGlvbiwgbGVuZ3RoKTsK
KyAgICByZXR1cm4gbG9jYXRpb247Cit9CisKIGJvb2wgV2ViRnJhbWVJbXBsOjpleGVjdXRlQ29t
bWFuZChjb25zdCBXZWJTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKGZyYW1lKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaAppbmRleCA2MTI5ZGUxYTFlZGQ3
ZjU3MTEzZTU3M2JmMTU1MTRiNTc4Y2QzYmIyLi5hMDNjMDE4YTFkYWVkNTRhZTEwN2NmNTI0YTI0
ZTE5YTY5OWRmYmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJG
cmFtZUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwu
aApAQCAtMTQ3LDYgKzE0Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzTWFya2Vk
VGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViUmFuZ2UgbWFya2VkUmFuZ2UoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodW5zaWduZWQgbG9j
YXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgV2ViUmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgc2l6
ZV90IGNoYXJhY3RlckluZGV4Rm9yUG9pbnQoY29uc3QgV2ViUG9pbnQmKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgZXhlY3V0ZUNvbW1hbmQoY29uc3QgV2ViU3RyaW5nJik7CiAgICAgdmlydHVh
bCBib29sIGV4ZWN1dGVDb21tYW5kKGNvbnN0IFdlYlN0cmluZyYsIGNvbnN0IFdlYlN0cmluZyYg
dmFsdWUpOwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbW1hbmRFbmFibGVkKGNvbnN0IFdlYlN0cmlu
ZyYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9w
dXBNZW51SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJ
bXBsLmNwcAppbmRleCBiNGQ0MjQ2YzNmNjAxMGJjYWY1MDIxZDRjZDk2ODFhYmZjMzkzZGI1Li42
YTY0MWE5MTQyYjI4ZDYyMmYxOWFmYzc5NDZkZTRkYjQ5ZGY0YWUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcApAQCAtNDMsNiArNDMsNyBA
QAogCiAjaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgogI2luY2x1ZGUgIldlYklucHV0RXZlbnRD
b252ZXJzaW9uLmgiCisjaW5jbHVkZSAiV2ViUmFuZ2UuaCIKICNpbmNsdWRlICJXZWJSZWN0Lmgi
CiAjaW5jbHVkZSAiV2ViV2lkZ2V0Q2xpZW50LmgiCiAKQEAgLTI1Miw2ICsyNTMsMTMgQEAgYm9v
bCBXZWJQb3B1cE1lbnVJbXBsOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJiB0
ZXh0KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBXZWJQb3B1cE1lbnVJbXBsOjpjb21w
b3NpdGlvblJhbmdlKHNpemVfdCogbG9jYXRpb24sIHNpemVfdCogbGVuZ3RoKQoreworICAgICps
b2NhdGlvbiA9IDA7CisgICAgKmxlbmd0aCA9IDA7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBX
ZWJUZXh0SW5wdXRUeXBlIFdlYlBvcHVwTWVudUltcGw6OnRleHRJbnB1dFR5cGUoKQogewogICAg
IHJldHVybiBXZWJUZXh0SW5wdXRUeXBlTm9uZTsKQEAgLTI2Miw2ICsyNzAsMTMgQEAgV2ViUmVj
dCBXZWJQb3B1cE1lbnVJbXBsOjpjYXJldE9yU2VsZWN0aW9uQm91bmRzKCkKICAgICByZXR1cm4g
V2ViUmVjdCgpOwogfQogCitib29sIFdlYlBvcHVwTWVudUltcGw6OmNhcmV0T3JTZWxlY3Rpb25S
YW5nZShzaXplX3QqIGxvY2F0aW9uLCBzaXplX3QqIGxlbmd0aCkKK3sKKyAgICAqbG9jYXRpb24g
PSAwOworICAgICpsZW5ndGggPSAwOworICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBXZWJQ
b3B1cE1lbnVJbXBsOjpzZXRUZXh0RGlyZWN0aW9uKFdlYlRleHREaXJlY3Rpb24gZGlyZWN0aW9u
KQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBN
ZW51SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5o
CmluZGV4IDdiYjlmN2U1YTIwNTJjYmY4YzcyZGYwY2UwYzQ3NWVmYzFhN2I1ZTkuLjAyZDY5OGJi
YjMxYTg1ZmIyZjk5M2NhMTFmOGQ3YzM2NWEyOWYyN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKQEAgLTUxLDYgKzUxLDcgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiBjbGFzcyBXZWJLZXlib2FyZEV2ZW50OwogY2xhc3MgV2ViTW91c2VFdmVudDsK
IGNsYXNzIFdlYk1vdXNlV2hlZWxFdmVudDsKK2NsYXNzIFdlYlJhbmdlOwogc3RydWN0IFdlYlJl
Y3Q7CiAKIGNsYXNzIFdlYlBvcHVwTWVudUltcGwgOiBwdWJsaWMgV2ViUG9wdXBNZW51LApAQCAt
NzYsOCArNzcsMTAgQEAgcHVibGljOgogICAgICAgICBpbnQgc2VsZWN0aW9uU3RhcnQsIGludCBz
ZWxlY3Rpb25FbmQpOwogICAgIHZpcnR1YWwgYm9vbCBjb25maXJtQ29tcG9zaXRpb24oKTsKICAg
ICB2aXJ0dWFsIGJvb2wgY29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFdlYlN0cmluZyYgdGV4dCk7
CisgICAgdmlydHVhbCBib29sIGNvbXBvc2l0aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6
ZV90KiBsZW5ndGgpOwogICAgIHZpcnR1YWwgV2ViVGV4dElucHV0VHlwZSB0ZXh0SW5wdXRUeXBl
KCk7CiAgICAgdmlydHVhbCBXZWJSZWN0IGNhcmV0T3JTZWxlY3Rpb25Cb3VuZHMoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgY2FyZXRPclNlbGVjdGlvblJhbmdlKHNpemVfdCogbG9jYXRpb24sIHNpemVf
dCogbGVuZ3RoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dERpcmVjdGlvbihXZWJUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbik7CiAgICAgdmlydHVhbCBib29sIGlzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCAyNWFiYjhjOTdkOGNhMTcxNmI2NWFkYTM4
ZWM2ODZiNjc3MDhjNTExLi5hZDYxMDE4MjJhNTdlMWEyMGNlMWFkYTZlMTc4YTM3MzFmYTAzN2My
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC05MSw2
ICs5MSw3IEBACiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiU3BlZWNoSW5wdXRDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAi
VGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50
LmgiCiAjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgpAQCAtMTE0LDYgKzExNSw3IEBACiAjaW5j
bHVkZSAiV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oIgogI2luY2x1ZGUgIldlYlBvaW50LmgiCiAj
aW5jbHVkZSAiV2ViUG9wdXBNZW51SW1wbC5oIgorI2luY2x1ZGUgIldlYlJhbmdlLmgiCiAjaW5j
bHVkZSAiV2ViUmVjdC5oIgogI2luY2x1ZGUgIldlYlJ1bnRpbWVGZWF0dXJlcy5oIgogI2luY2x1
ZGUgIldlYlNldHRpbmdzSW1wbC5oIgpAQCAtMTM4Miw2ICsxMzg0LDI0IEBAIGJvb2wgV2ViVmll
d0ltcGw6OmNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBXZWJTdHJpbmcmIHRleHQpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK2Jvb2wgV2ViVmlld0ltcGw6OmNvbXBvc2l0aW9uUmFuZ2Uoc2l6ZV90
KiBsb2NhdGlvbiwgc2l6ZV90KiBsZW5ndGgpCit7CisgICAgRnJhbWUqIGZvY3VzZWQgPSBmb2N1
c2VkV2ViQ29yZUZyYW1lKCk7CisgICAgaWYgKCFmb2N1c2VkIHx8ICFtX2ltZUFjY2VwdEV2ZW50
cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEVkaXRvciogZWRpdG9yID0gZm9jdXNlZC0+
ZWRpdG9yKCk7CisgICAgaWYgKCFlZGl0b3IgfHwgIWVkaXRvci0+aGFzQ29tcG9zaXRpb24oKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVkaXRv
ci0+Y29tcG9zaXRpb25SYW5nZSgpOworICAgIGlmICghcmFuZ2UuZ2V0KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChUZXh0SXRlcmF0b3I6OmxvY2F0aW9uQW5kTGVuZ3RoRnJv
bVJhbmdlKHJhbmdlLmdldCgpLCAqbG9jYXRpb24sICpsZW5ndGgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIFdlYlRleHRJbnB1dFR5cGUgV2ViVmlld0lt
cGw6OnRleHRJbnB1dFR5cGUoKQogewogICAgIFdlYlRleHRJbnB1dFR5cGUgdHlwZSA9IFdlYlRl
eHRJbnB1dFR5cGVOb25lOwpAQCAtMTQ0Miw2ICsxNDYyLDI1IEBAIFdlYlJlY3QgV2ViVmlld0lt
cGw6OmNhcmV0T3JTZWxlY3Rpb25Cb3VuZHMoKQogICAgIHJldHVybiByZWN0OwogfQogCitib29s
IFdlYlZpZXdJbXBsOjpjYXJldE9yU2VsZWN0aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6
ZV90KiBsZW5ndGgpCit7CisgICAgY29uc3QgRnJhbWUqIGZvY3VzZWQgPSBmb2N1c2VkV2ViQ29y
ZUZyYW1lKCk7CisgICAgaWYgKCFmb2N1c2VkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBTZWxlY3Rpb25Db250cm9sbGVyKiBjb250cm9sbGVyID0gZm9jdXNlZC0+c2VsZWN0aW9uKCk7
CisgICAgaWYgKCFjb250cm9sbGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gY29udHJvbGxlci0+c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwor
ICAgIGlmICghcmFuZ2UuZ2V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChU
ZXh0SXRlcmF0b3I6OmxvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKHJhbmdlLmdldCgpLCAqbG9j
YXRpb24sICpsZW5ndGgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIHZvaWQgV2ViVmlld0ltcGw6OnNldFRleHREaXJlY3Rpb24oV2ViVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24pCiB7CiAgICAgLy8gVGhlIEVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rp
b24oKSBmdW5jdGlvbiBjaGVja3MgaWYgd2UgY2FuIGNoYW5nZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggNWRkYTRlNzYwMWU3MzhmMjdhNjYxOWM4YmM0NGEw
MjNiOWZhZTYxZS4uODllNWJiZGVlYjE0OTViZmY2YzYxMTI4YzEyMmQxMTU0YjNmZjJhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC0xMDcsOCArMTA3LDEw
IEBAIHB1YmxpYzoKICAgICAgICAgaW50IHNlbGVjdGlvbkVuZCk7CiAgICAgdmlydHVhbCBib29s
IGNvbmZpcm1Db21wb3NpdGlvbigpOwogICAgIHZpcnR1YWwgYm9vbCBjb25maXJtQ29tcG9zaXRp
b24oY29uc3QgV2ViU3RyaW5nJiB0ZXh0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRpb25S
YW5nZShzaXplX3QqIGxvY2F0aW9uLCBzaXplX3QqIGxlbmd0aCk7CiAgICAgdmlydHVhbCBXZWJU
ZXh0SW5wdXRUeXBlIHRleHRJbnB1dFR5cGUoKTsKICAgICB2aXJ0dWFsIFdlYlJlY3QgY2FyZXRP
clNlbGVjdGlvbkJvdW5kcygpOworICAgIHZpcnR1YWwgYm9vbCBjYXJldE9yU2VsZWN0aW9uUmFu
Z2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90KiBsZW5ndGgpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRUZXh0RGlyZWN0aW9uKFdlYlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKTsKICAgICB2aXJ0dWFs
IGJvb2wgaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkgY29uc3Q7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL21hYy9XZWJUZXh0SGVscGVyLm1tIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvbWFjL1dlYlRleHRIZWxwZXIubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzZjODgwODRmOGJmNjBiOGM2Mzk3YjBjN2VhMzRlMjMyY2M5NDU3MgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL21hYy9XZWJUZXh0SGVscGVyLm1tCkBAIC0w
LDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1w
bC5oIgorI2luY2x1ZGUgIldlYlRleHRIZWxwZXIuaCIKKworI2luY2x1ZGUgIkNvbG9yTWFjLmgi
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5o
IgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlRleHRJ
dGVyYXRvci5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIK
KworI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBIZWxwZXIgZnVuY3Rpb25zLgorCitXZWJGcmFtZUlt
cGwqIGdldFdlYkZyYW1lSW1wbChXZWJGcmFtZSogZnJhbWUpCit7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdlYkZyYW1lSW1wbCo+KGZyYW1lKTsKK30KKworRWxlbWVudCogcmFuZ2VTY29wZShX
ZWJGcmFtZSogd2ViRnJhbWUpCit7CisgICAgRnJhbWUqIGZyYW1lID0gZ2V0V2ViRnJhbWVJbXBs
KHdlYkZyYW1lKS0+ZnJhbWUoKTsKKyAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZnJhbWUt
PnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgcmV0dXJuIHNlbGVjdGlv
blJvb3QgPyBzZWxlY3Rpb25Sb290IDogZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVu
dCgpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitXZWJUZXh0SGVscGVyOjpXZWJU
ZXh0SGVscGVyKFdlYkZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCit7Cit9CisK
Ky8vIFRoaXMgZnVuY3Rpb24gaXMgY29waWVkIGZyb20gL1dlYktpdC9tYWMvTWlzYy9XZWJOU0F0
dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0uCitXZWJLaXQ6OldlYlN0cmluZyBXZWJUZXh0SGVscGVy
OjpzdWJzdHJpbmdJblJhbmdlKHNpemVfdCBsb2NhdGlvbiwgc2l6ZV90IGxlbmd0aCkKK3sKKyAg
ICBGcmFtZSogZnJhbWUgPSBnZXRXZWJGcmFtZUltcGwobV9mcmFtZSktPmZyYW1lKCk7CisgICAg
aWYgKGZyYW1lLT52aWV3KCktPm5lZWRzTGF5b3V0KCkpCisgICAgICAgIGZyYW1lLT52aWV3KCkt
PmxheW91dCgpOworCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZShUZXh0SXRlcmF0b3I6OnJhbmdl
RnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHJhbmdlU2NvcGUobV9mcmFtZSksIGxvY2F0aW9uLCBsZW5n
dGgpKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gV2ViS2l0OjpXZWJTdHJpbmco
KTsKKworICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIHN0cmluZyA9IFtbTlNNdXRhYmxl
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSog
YXR0cnMgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKKworICAgIHVuc2lnbmVk
IHBvc2l0aW9uID0gMDsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdChyYW5nZS5nZXQoKSk7ICFp
dC5hdEVuZCgpICYmIFtzdHJpbmcgbGVuZ3RoXSA8IGxlbmd0aDsgaXQuYWR2YW5jZSgpKSB7Cisg
ICAgICAgIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMgPSBpdC5sZW5ndGgoKTsKKyAgICAgICAgaWYg
KCFudW1DaGFyYWN0ZXJzKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgRXhjZXB0
aW9uQ29kZSBleGNlcHRpb24gPSAwOworICAgICAgICBOb2RlKiBjb250YWluZXIgPSBpdC5yYW5n
ZSgpLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pOworICAgICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gY29udGFpbmVyLT5yZW5kZXJlcigpOworICAgICAgICBBU1NFUlQocmVuZGVyZXIp
OworICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgICAgIE5TRm9u
dCogZm9udCA9IHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCk7CisgICAg
ICAgIC8vIElmIHRoZSBwbGF0Zm9ybSBmb250IGNhbid0IGJlIGxvYWRlZCwgaXQncyBsaWtlbHkg
dGhhdCB0aGUgc2l0ZSBpcworICAgICAgICAvLyB1c2luZyBhIHdlYiBmb250LiBGb3Igbm93LCBq
dXN0IHVzZSB0aGUgZGVmYXVsdCBmb250IGluc3RlYWQuCisgICAgICAgIC8vIFRPRE8ocnNlc2Vr
KTogQ2hhbmdlIHRoZSBmb250IGFjdGl2YXRpb24gZmxhZ3MgdG8gYWxsb3cgb3RoZXIgcHJvY2Vz
c2VzCisgICAgICAgIC8vIHRvIHVzZSB0aGUgZm9udC4KKyAgICAgICAgaWYgKCFmb250KQorICAg
ICAgICAgIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6c3R5bGUtPmZvbnQoKS5zaXpl
KCldOworICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0
ZU5hbWVdOworCisgICAgICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5Q29sb3IpLmFscGhhKCkpCisgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0Om5zQ29s
b3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5
Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIFthdHRycyByZW1vdmVPYmplY3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVO
YW1lXTsKKyAgICAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkpCisgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0
Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcikpIGZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBbYXR0cnMgcmVtb3ZlT2JqZWN0Rm9yS2V5Ok5TQmFja2dyb3Vu
ZENvbG9yQXR0cmlidXRlTmFtZV07CisKKyAgICAgICAgTlNTdHJpbmcqIHN1YnN0cmluZyA9Cisg
ICAgICAgICAgICBbW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5OmNv
bnN0X2Nhc3Q8VUNoYXIqPihpdC5jaGFyYWN0ZXJzKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOml0Lmxlbmd0aCgpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZVdoZW5Eb25lOk5PXSBhdXRvcmVs
ZWFzZV07CisgICAgICAgIFtzdHJpbmcgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJh
bmdlKHBvc2l0aW9uLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aFN0cmlu
ZzpzdWJzdHJpbmddOworICAgICAgICBbc3RyaW5nIHNldEF0dHJpYnV0ZXM6YXR0cnMgcmFuZ2U6
TlNNYWtlUmFuZ2UocG9zaXRpb24sIG51bUNoYXJhY3RlcnMpXTsKKyAgICAgICAgcG9zaXRpb24g
Kz0gbnVtQ2hhcmFjdGVyczsKKyAgICB9CisgICAgTlNEYXRhKiBhcmNoaXZlZERhdGEoW05TQXJj
aGl2ZXIgYXJjaGl2ZWREYXRhV2l0aFJvb3RPYmplY3Q6c3RyaW5nXSk7CisgICAgaWYgKCFhcmNo
aXZlZERhdGEpCisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpXZWJTdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgV2ViVUNoYXIqPihbYXJjaGl2ZWREYXRhIGJ5
dGVzXSksCisgICAgICAgIFthcmNoaXZlZERhdGEgbGVuZ3RoXSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGQxNGJjNTE3OTQ4ZmU3MjdjYTM4MTM0NjYy
OGFjOTJjZjE2YjI4MmIuLjhiNDQxY2VjZmMwNDExYTcyZWEzY2JmY2E2ZWM2NGFlY2FmZWJkYjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0wMy0yNSAgUm9iZXJ0IFNl
c2VrICA8cnNlc2VrQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbQ2hyb21pdW1dIEltcGxlbWVudCBXZWJLaXQgbWV0aG9kcyB0
byBhc3Npc3Qgd2l0aCBDb2NvYSBOU1RleHRJbnB1dCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NjkKKworICAgICAgICAq
IFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9jb252ZXJ0VG9OU1Jh
bmdlOl0pOiBNb3ZlZCBkdXBsaWNhdGVkIGNvZGUgdG8gV2ViQ29yZQorICAgICAgICAoLVtXZWJG
cmFtZSBfY2hhcmFjdGVyUmFuZ2VBdFBvaW50Ol0pOiBNb3ZlZCBkdXBsaWNhdGVkIGNvZGUgdG8g
V2ViQ29yZQorCiAyMDExLTAzLTI0ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByODE5MzkuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCA5ZTc5OGQyMWZhMDE1NDQyYTQ4ZDU0
NTM1MDZhNDQxMTRkYjRjNTY4Li5lYjgxYzhjN2M1ZDdlZjI1OGU0NmMyYzIzZTFkMTcwNjIyMmQz
MmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTY3MCwzMCArNjcw
LDEwIEBAIHN0YXRpYyBpbmxpbmUgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZShEb2N1bWVudExv
YWRlciogbG9hZGVyKQogCiAtIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihSYW5nZSAqKXJh
bmdlCiB7Ci0gICAgaWYgKCFyYW5nZSB8fCAhcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkpCi0gICAg
ICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLQotICAgIEVsZW1lbnQqIHNl
bGVjdGlvblJvb3QgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRh
YmxlRWxlbWVudCgpOwotICAgIEVsZW1lbnQqIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVj
dGlvblJvb3QgOiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1l
bnQoKTsKLSAgICAKLSAgICAvLyBNb3VzZSBldmVudHMgbWF5IGNhdXNlIFRTTSB0byBhdHRlbXB0
IHRvIGNyZWF0ZSBhbiBOU1JhbmdlIGZvciBhIHBvcnRpb24gb2YgdGhlIHZpZXcKLSAgICAvLyB0
aGF0IGlzIG5vdCBpbnNpZGUgdGhlIGN1cnJlbnQgZWRpdGFibGUgcmVnaW9uLiAgVGhlc2UgY2hl
Y2tzIGVuc3VyZSB3ZSBkb24ndCBwcm9kdWNlCi0gICAgLy8gcG90ZW50aWFsbHkgaW52YWxpZCBk
YXRhIHdoZW4gcmVzcG9uZGluZyB0byBzdWNoIHJlcXVlc3RzLgotICAgIGlmIChyYW5nZS0+c3Rh
cnRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmlzRGVz
Y2VuZGFudE9mKHNjb3BlKSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQs
IDApOwotICAgIGlmIChyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gc2NvcGUgJiYgIXJhbmdlLT5l
bmRDb250YWluZXIoKS0+aXNEZXNjZW5kYW50T2Yoc2NvcGUpKQotICAgICAgICByZXR1cm4gTlNN
YWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgCi0gICAgUmVmUHRyPFJhbmdlPiB0ZXN0UmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKHNjb3BlLT5kb2N1bWVudCgpLCBzY29wZSwgMCwgcmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKLSAgICBBU1NFUlQodGVzdFJh
bmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLmdldCgpKTsKLQotICAgIEV4Y2Vw
dGlvbkNvZGUgZWM7Ci0gICAgdGVzdFJhbmdlLT5zZXRFbmQocmFuZ2UtPmVuZENvbnRhaW5lcigp
LCByYW5nZS0+ZW5kT2Zmc2V0KCksIGVjKTsKLSAgICBBU1NFUlQodGVzdFJhbmdlLT5zdGFydENv
bnRhaW5lcigpID09IHNjb3BlKTsKLSAgICBpbnQgZW5kUG9zaXRpb24gPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gTlNNYWtlUmFuZ2Uo
c3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKTsKKyAgICBzaXplX3Qg
bG9jYXRpb24sIGxlbmd0aDsKKyAgICBpZiAocmFuZ2UgJiYgVGV4dEl0ZXJhdG9yOjpsb2NhdGlv
bkFuZExlbmd0aEZyb21SYW5nZShyYW5nZSwgbG9jYXRpb24sIGxlbmd0aCkpCisgICAgICAgIHJl
dHVybiBOU01ha2VSYW5nZShsb2NhdGlvbiwgbGVuZ3RoKTsKKyAgICByZXR1cm4gTlNNYWtlUmFu
Z2UoTlNOb3RGb3VuZCwgMCk7CiB9CiAKIC0gKFBhc3NSZWZQdHI8UmFuZ2U+KV9jb252ZXJ0VG9E
T01SYW5nZTooTlNSYW5nZSluc3JhbmdlCkBAIC04MjAsMjcgKzgwMCw3IEBAIHN0YXRpYyBpbmxp
bmUgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZShEb2N1bWVudExvYWRlciogbG9hZGVyKQogCiAt
IChET01SYW5nZSAqKV9jaGFyYWN0ZXJSYW5nZUF0UG9pbnQ6KE5TUG9pbnQpcG9pbnQKIHsKLSAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9p
bnQ6cG9pbnRdOwotICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMgPSBwb3NpdGlvbi5wcmV2aW91
cygpOwotICAgIGlmIChwcmV2aW91cy5pc05vdE51bGwoKSkgewotICAgICAgICBET01SYW5nZSAq
cHJldmlvdXNDaGFyYWN0ZXJSYW5nZSA9IGtpdChtYWtlUmFuZ2UocHJldmlvdXMsIHBvc2l0aW9u
KS5nZXQoKSk7Ci0gICAgICAgIE5TUmVjdCByZWN0ID0gW3NlbGYgX2ZpcnN0UmVjdEZvckRPTVJh
bmdlOnByZXZpb3VzQ2hhcmFjdGVyUmFuZ2VdOwotICAgICAgICBpZiAoTlNQb2ludEluUmVjdChw
b2ludCwgcmVjdCkpCi0gICAgICAgICAgICByZXR1cm4gcHJldmlvdXNDaGFyYWN0ZXJSYW5nZTsK
LSAgICB9Ci0KLSAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IHBvc2l0aW9uLm5leHQoKTsKLSAg
ICBpZiAobmV4dC5pc05vdE51bGwoKSkgewotICAgICAgICBET01SYW5nZSAqbmV4dENoYXJhY3Rl
clJhbmdlID0ga2l0KG1ha2VSYW5nZShwb3NpdGlvbiwgbmV4dCkuZ2V0KCkpOwotICAgICAgICBO
U1JlY3QgcmVjdCA9IFtzZWxmIF9maXJzdFJlY3RGb3JET01SYW5nZTpuZXh0Q2hhcmFjdGVyUmFu
Z2VdOwotICAgICAgICBpZiAoTlNQb2ludEluUmVjdChwb2ludCwgcmVjdCkpCi0gICAgICAgICAg
ICByZXR1cm4gbmV4dENoYXJhY3RlclJhbmdlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmls
OworICAgIHJldHVybiBraXQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+cmFuZ2VGb3JQb2ludChJbnRQ
b2ludChwb2ludCkpLmdldCgpKTsKIH0KIAogLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV90
eXBpbmdTdHlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDdiYzk1OGQ4MDZlYzdiM2U1OGEzMThmZWQyYjZhNGUy
MTc2MjBkMzYuLjQ4NDZmMmQ5NGZjYjU4ZTNmY2QzNjBlM2IzN2U3NDAzMWY1N2M1NmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMS0wMy0yNSAgUm9iZXJ0IFNlc2VrICA8cnNlc2Vr
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbQ2hyb21pdW1dIEltcGxlbWVudCBXZWJLaXQgbWV0aG9kcyB0byBhc3Npc3Qgd2l0
aCBDb2NvYSBOU1RleHRJbnB1dCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NjkKKworICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
RWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKTogTW92ZWQgZHVwbGljYXRl
ZCBjb2RlIHRvIFdlYkNvcmUKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06IE1vdmVkIGR1cGxpY2F0ZWQgY29k
ZSB0byBXZWJDb3JlCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldE1hcmtlZFJhbmdlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6
CisKIDIwMTEtMDMtMjUgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lh
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQuY3BwCmluZGV4IGI5NTQyODM1OTEzMzc4MGI0Y2VkNjBiZjYzZDk1YTM2YjlkZTE1MGMu
LjViNjFhYTI3ZTA4MzAzYWUwYmM5MWU3M2ZlODM5MmMxZmQyYWIwMGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJk
RXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1VzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwpAQCAtMTk2LDcgKzE5NywxNCBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpCiAgICAgc2VsZWN0aW9uU3RhdGUuaXNJblBhc3N3
b3JkRmllbGQgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmlzSW5QYXNzd29yZEZpZWxkKCk7CiAgICAg
c2VsZWN0aW9uU3RhdGUuaGFzQ29tcG9zaXRpb24gPSBmcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBv
c2l0aW9uKCk7CiAKLSAgICBXZWJQYWdlOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShm
cmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHNlbGVjdGlvblN0
YXRlLnNlbGVjdGVkUmFuZ2VTdGFydCwgc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZUxlbmd0
aCk7CisgICAgUmFuZ2UqIHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpOworICAgIGlmIChyYW5nZSkgeworICAgICAgICBzaXplX3QgbG9jYXRpb24s
IGxlbmd0aDsKKyAgICAgICAgaWYgKCFUZXh0SXRlcmF0b3I6OmxvY2F0aW9uQW5kTGVuZ3RoRnJv
bVJhbmdlKHJhbmdlLCBsb2NhdGlvbiwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZVN0YXJ0ID0gc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGxvY2F0aW9uKTsKKyAgICAgICAgc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZUxl
bmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGgpOworICAgIH0KIAogICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWxlY3Rpb25TdGF0ZUNoYW5nZWQoc2Vs
ZWN0aW9uU3RhdGUpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCmluZGV4IDkwZmRmYTcyYTQ1YzgyNzlmYTE1NDIxMzkyMmFlNDJlNmE2OWI1NTku
LmYwMjc3ZDE0NTczNmI4MjE2YmUyYjc4ZjU4MmJhZjMyNGMyNDJjZjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTgwMywzNSArODAzLDYg
QEAgV2ViQ29udGV4dE1lbnUqIFdlYlBhZ2U6OmNvbnRleHRNZW51KCkKICAgICByZXR1cm4gbV9j
b250ZXh0TWVudS5nZXQoKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpnZXRMb2NhdGlvbkFuZExlbmd0
aEZyb21SYW5nZShSYW5nZSogcmFuZ2UsIHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxl
bmd0aCkKLXsKLSAgICBsb2NhdGlvbiA9IG5vdEZvdW5kOwotICAgIGxlbmd0aCA9IDA7Ci0KLSAg
ICBpZiAoIXJhbmdlIHx8ICFyYW5nZS0+c3RhcnRDb250YWluZXIoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IHJhbmdlLT5vd25lckRvY3VtZW50KCkt
PmZyYW1lKCktPnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgRWxlbWVu
dCogc2NvcGUgPSBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IHJhbmdlLT5vd25lckRv
Y3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwotICAgIAotICAgIC8vIE1vdXNlIGV2ZW50cyBt
YXkgY2F1c2UgVFNNIHRvIGF0dGVtcHQgdG8gY3JlYXRlIGFuIE5TUmFuZ2UgZm9yIGEgcG9ydGlv
biBvZiB0aGUgdmlldwotICAgIC8vIHRoYXQgaXMgbm90IGluc2lkZSB0aGUgY3VycmVudCBlZGl0
YWJsZSByZWdpb24uICBUaGVzZSBjaGVja3MgZW5zdXJlIHdlIGRvbid0IHByb2R1Y2UKLSAgICAv
LyBwb3RlbnRpYWxseSBpbnZhbGlkIGRhdGEgd2hlbiByZXNwb25kaW5nIHRvIHN1Y2ggcmVxdWVz
dHMuCi0gICAgaWYgKHJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IHNjb3BlICYmICFyYW5nZS0+
c3RhcnRDb250YWluZXIoKS0+aXNEZXNjZW5kYW50T2Yoc2NvcGUpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKHJhbmdlLT5lbmRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPmVuZENv
bnRhaW5lcigpLT5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFJlZlB0cjxSYW5nZT4gdGVzdFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzY29wZS0+ZG9jdW1lbnQo
KSwgc2NvcGUsIDAsIHJhbmdlLT5zdGFydENvbnRhaW5lcigpLCByYW5nZS0+c3RhcnRPZmZzZXQo
KSk7Ci0gICAgQVNTRVJUKHRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7Ci0g
ICAgbG9jYXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5nZXQoKSk7
Ci0gICAgCi0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICB0ZXN0UmFuZ2UtPnNldEVuZChyYW5n
ZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSwgZWMpOwotICAgIEFTU0VSVCh0
ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOwotICAgIGxlbmd0aCA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLmdldCgpKSAtIGxvY2F0aW9uOwotfQotCiAv
LyBFdmVudHMgCiAKIHN0YXRpYyBjb25zdCBXZWJFdmVudCogZ19jdXJyZW50RXZlbnQgPSAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggNGViYzhl
Njg5NmIzNGIyZGY5ZmM0MzM4MDQzODZiNjllMWFkYTZhNi4uYjQ3ZTY3MmQwMWVkMTFkNjU3MjZk
MzM3MTVkN2U2ZTM5ODU1NzY3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oCkBAIC0yOTYsOCArMjk2LDYgQEAgcHVibGljOgogCiAgICAgU2FuZGJveEV4
dGVuc2lvblRyYWNrZXImIHNhbmRib3hFeHRlbnNpb25UcmFja2VyKCkgeyByZXR1cm4gbV9zYW5k
Ym94RXh0ZW5zaW9uVHJhY2tlcjsgfQogCi0gICAgc3RhdGljIHZvaWQgZ2V0TG9jYXRpb25BbmRM
ZW5ndGhGcm9tUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqLCB1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2
NF90JiBsZW5ndGgpOwotCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgcmVnaXN0ZXJVSVBy
b2Nlc3NBY2Nlc3NpYmlsaXR5VG9rZW5zKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmIGVs
ZW1lblRva2VuLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiB3aW5kb3dUb2tlbik7CiAg
ICAgQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QqIGFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3Qo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbQppbmRleCA4ZDgxODg5N2YzYjMzMDg0YzJjNTRjMzZmZThhOGZmNzUzZTBkYTc1Li5k
YWFmNzRlMzQzMjc4MDU4YWFlZDEyYzdhN2FiNzEwZDhjZjU1MjZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0xNTks
MzggKzE1OSwxMyBAQCB2b2lkIFdlYlBhZ2U6OmdldE1hcmtlZFJhbmdlKHVpbnQ2NF90JiBsb2Nh
dGlvbiwgdWludDY0X3QmIGxlbmd0aCkKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgZ2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoZnJh
bWUtPmVkaXRvcigpLT5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCksIGxvY2F0aW9uLCBsZW5ndGgp
OwotfQogCi0KLXN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBjaGFyYWN0ZXJSYW5nZUF0UG9zaXRp
b25Gb3JQb2ludChGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24s
IGNvbnN0IEludFBvaW50JiBwb2ludCkKLXsKLSAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzID0gcG9zaXRp
b24ucHJldmlvdXMoKTsKLSAgICBpZiAocHJldmlvdXMuaXNOb3ROdWxsKCkpIHsKLSAgICAgICAg
UmVmUHRyPFJhbmdlPiBwcmV2aW91c0NoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHByZXZpb3Vz
LCBwb3NpdGlvbik7Ci0gICAgICAgIEludFJlY3QgcmVjdCA9IGZyYW1lLT5lZGl0b3IoKS0+Zmly
c3RSZWN0Rm9yUmFuZ2UocHJldmlvdXNDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7Ci0gICAgICAgIGlm
IChyZWN0LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBwcmV2aW91c0NoYXJh
Y3RlclJhbmdlLnJlbGVhc2UoKTsKLSAgICB9Ci0gICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIG5l
eHQgPSBwb3NpdGlvbi5uZXh0KCk7Ci0gICAgaWYgKG5leHQuaXNOb3ROdWxsKCkpIHsKLSAgICAg
ICAgUmVmUHRyPFJhbmdlPiBuZXh0Q2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocG9zaXRpb24s
IG5leHQpOwotICAgICAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZS0+ZWRpdG9yKCktPmZpcnN0UmVj
dEZvclJhbmdlKG5leHRDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7Ci0gICAgICAgIGlmIChyZWN0LmNv
bnRhaW5zKHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBuZXh0Q2hhcmFjdGVyUmFuZ2UucmVs
ZWFzZSgpOworICAgIFJhbmdlKiByYW5nZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tcG9zaXRpb25S
YW5nZSgpLmdldCgpOworICAgIHNpemVfdCBsb2MsIGxlbjsKKyAgICBpZiAocmFuZ2UgJiYgVGV4
dEl0ZXJhdG9yOjpsb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShyYW5nZSwgbG9jLCBsZW4pKSB7
CisgICAgICAgIGxvY2F0aW9uID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxvYyk7CisgICAgICAg
IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW4pOwogICAgIH0KLSAgICAKLSAgICBy
ZXR1cm4gMDsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IGNoYXJhY3RlclJhbmdlQXRQ
b2ludChGcmFtZSogZnJhbWUsIGNvbnN0IEludFBvaW50JiBwb2ludCkKLXsKLSAgICByZXR1cm4g
Y2hhcmFjdGVyUmFuZ2VBdFBvc2l0aW9uRm9yUG9pbnQoZnJhbWUsIGZyYW1lLT52aXNpYmxlUG9z
aXRpb25Gb3JQb2ludChwb2ludCksIHBvaW50KTsKIH0KIAogdm9pZCBXZWJQYWdlOjpjaGFyYWN0
ZXJJbmRleEZvclBvaW50KEludFBvaW50IHBvaW50LCB1aW50NjRfdCYgaW5kZXgpCkBAIC0yMDMs
MTIgKzE3OCwxMyBAQCB2b2lkIFdlYlBhZ2U6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnQoSW50UG9p
bnQgcG9pbnQsIHVpbnQ2NF90JiBpbmRleCkKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsIGZhbHNlKTsK
ICAgICBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5v
blNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSA6IG1fcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBjaGFyYWN0ZXJSYW5nZUF0UG9pbnQoZnJhbWUsIHJlc3VsdC5wb2ludCgpKTsKKyAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUtPnJhbmdlRm9yUG9pbnQocmVzdWx0LnBvaW50KCkp
OwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVpbnQ2NF90IGxlbmd0
aDsKLSAgICBnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShyYW5nZS5nZXQoKSwgaW5kZXgs
IGxlbmd0aCk7CisgICAgc2l6ZV90IGxvY2F0aW9uLCBsZW5ndGg7CisgICAgaWYgKFRleHRJdGVy
YXRvcjo6bG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UocmFuZ2UuZ2V0KCksIGxvY2F0aW9uLCBs
ZW5ndGgpKQorICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihsb2NhdGlvbik7
CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBjb252ZXJ0VG9SYW5nZShGcmFtZSogZnJh
bWUsIE5TUmFuZ2UgbnNyYW5nZSkKQEAgLTI4NCwxMiArMjYwLDEyIEBAIHZvaWQgV2ViUGFnZTo6
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGZsb2F0
UG9pbnQpCiAgICAgZnJhbWUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQu
aW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkgOiBtX3BhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIAogICAgIEludFBvaW50IHRyYW5z
bGF0ZWRQb2ludCA9IGZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMocG9pbnQpOwotICAg
IFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2lu
dCh0cmFuc2xhdGVkUG9pbnQpOwogCiAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUg
aXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KLSAgICBpZiAoIWNoYXJhY3RlclJhbmdlQXRQ
b3NpdGlvbkZvclBvaW50KGZyYW1lLCBwb3NpdGlvbiwgdHJhbnNsYXRlZFBvaW50KSkKKyAgICBp
ZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KHRyYW5zbGF0ZWRQb2ludCkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLT52aXNpYmxlUG9zaXRp
b25Gb3JQb2ludCh0cmFuc2xhdGVkUG9pbnQpOwogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2hvdWxkVXNlU2VsZWN0aW9uKHBvc2l0
aW9uLCBzZWxlY3Rpb24pKSB7CiAgICAgICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2Vs
ZWN0aW9uKERpY3Rpb25hcnlQb3B1cEluZm86OkhvdEtleSwgZnJhbWUsIHNlbGVjdGlvbik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88434</attachid>
            <date>2011-04-06 08:53:52 -0700</date>
            <delta_ts>2011-04-06 10:46:01 -0700</delta_ts>
            <desc>Patch v6 WebCore</desc>
            <filename>bug-54969-20110406115350.patch</filename>
            <type>text/plain</type>
            <size>20710</size>
            <attacher name="Robert Sesek">rsesek</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMwMzAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1ZWYwODdmMjcwOTk2ZDZm
MWE5YzAwM2Q0NTgyYWI1M2U3MmI3ZWJjLi4zYzc1YjViYmE2MjEwMWE5ODQzYjcwMzJjYmI2NGM0
NmQ0YTQxZTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDQtMDYgIFJvYmVy
dCBTZXNlayAgPHJzZXNla0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBjb2RlIGR1cGxpY2F0ZWQgYmV0d2VlbiB0aGUg
V2ViS2l0L21hYyBhbmQgV2ViS2l0MiBkb3duIHRvIFdlYkNvcmUgYmVjYXVzZSBDaHJvbWl1bSB3
aWxsIG5lZWQgaXQgdG9vCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01NDk2OQorCisgICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlvcjsgbm8gbmV3IHRl
c3RzLgorCisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEl0ZXJhdG9yOjpsb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZSk6IE5ldyBtZXRo
b2QgZnJvbSBkdXBsaWNhdGVkIGNvZGUgaW4gV2ViS2l0cworICAgICAgICAqIGVkaXRpbmcvVGV4
dEl0ZXJhdG9yLmg6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6cmFuZ2VGb3JQb2ludCk6IE5ldyBtZXRob2QgZnJvbSBkdXBsaWNhdGVkIGNvZGUg
aW4gV2ViS2l0cworCiAyMDExLTA0LTA2ICBBbmRlcnMgQmFra2VuICA8YWdiYWtrZW5AZ21haWwu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgppbmRleCA0OWI0MzA4Yzk5NjA5Njc5NTAyNDJhZjZmNmM5MTAxNGU2NzQxZjM5Li44NzlkYTI1
ZGU2ZjBkZjFmMWMzNTNjYjc5M2FhMmFmNDczMDdkNmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpA
QCAtMjk4LDYgKzI5OCw3IEBAIF9fWk43V2ViQ29yZTEyU3BlbGxDaGVja2VyOGRpZENoZWNrRWlS
S04zV1RGNlZlY3RvcklOU18xOFRleHRDaGVja2luZ1Jlc3VsdEVMbTBFCiBfX1pON1dlYkNvcmUx
MlRleHRFbmNvZGluZ0MxRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0
b3IxMXJhbmdlTGVuZ3RoRVBLTlNfNVJhbmdlRWIKIF9fWk43V2ViQ29yZTEyVGV4dEl0ZXJhdG9y
MjZyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aEVQTlNfN0VsZW1lbnRFaWliCitfX1pON1dlYkNv
cmUxMlRleHRJdGVyYXRvcjI2bG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2VFUEtOU181UmFuZ2VF
Um1TNF8KIF9fWk43V2ViQ29yZTEyVGV4dEl0ZXJhdG9yN2FkdmFuY2VFdgogX19aTjdXZWJDb3Jl
MTJUZXh0SXRlcmF0b3I4c3VicmFuZ2VFUE5TXzVSYW5nZUVpaQogX19aTjdXZWJDb3JlMTJUZXh0
SXRlcmF0b3JDMUVQS05TXzVSYW5nZUVOU18yMFRleHRJdGVyYXRvckJlaGF2aW9yRQpAQCAtNzIw
LDYgKzcyMSw3IEBAIF9fWk43V2ViQ29yZTVGcmFtZTZjcmVhdGVFUE5TXzRQYWdlRVBOU18yMUhU
TUxGcmFtZU93bmVyRWxlbWVudEVQTlNfMTdGcmFtZUxvYWRlCiBfX1pON1dlYkNvcmU1RnJhbWU3
c2V0Vmlld0VOM1dURjEwUGFzc1JlZlB0cklOU185RnJhbWVWaWV3RUVFCiBfX1pON1dlYkNvcmU1
RnJhbWU5bm9kZUltYWdlRVBOU180Tm9kZUUKIF9fWk43V2ViQ29yZTVGcmFtZTlzY2FsZVBhZ2VF
ZlJLTlNfOEludFBvaW50RQorX19aTjdXZWJDb3JlNUZyYW1lMTNyYW5nZUZvclBvaW50RVJLTlNf
OEludFBvaW50RQogX19aTjdXZWJDb3JlNUZyYW1lRDFFdgogX19aTjdXZWJDb3JlNUltYWdlMTJz
dXBwb3J0c1R5cGVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU1SW1hZ2UyMGxvYWRQbGF0
Zm9ybVJlc291cmNlRVBLYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmlu
ZGV4IDFiMjVjODc3MWI4MjVhYmU4ODQ4MjY4ZmU1OWYwYjBhNmVhMWYwOGEuLjZhMjRkMjczNmZj
ZGQ0NTM3ZGFmM2M5ZGVjMTRjM2EzZmVjNTc0ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJUZXh0SXRlcmF0b3Iu
aCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgImh0bWxl
ZGl0aW5nLmgiCkBAIC0yMzY5LDYgKzIzNzAsMzggQEAgUGFzc1JlZlB0cjxSYW5nZT4gVGV4dEl0
ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChFbGVtZW50KiBzY29wZSwgaW50IHIK
ICAgICByZXR1cm4gcmVzdWx0UmFuZ2UucmVsZWFzZSgpOwogfQogCitib29sIFRleHRJdGVyYXRv
cjo6bG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlLCBzaXplX3Qm
IGxvY2F0aW9uLCBzaXplX3QmIGxlbmd0aCkKK3sKKyAgICBsb2NhdGlvbiA9IG5vdEZvdW5kOwor
ICAgIGxlbmd0aCA9IDA7CisKKyAgICBpZiAoIXJhbmdlLT5zdGFydENvbnRhaW5lcigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gcmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1l
bnQoKTsKKyAgICBFbGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290
IDogcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CisKKyAgICAvLyBU
aGUgY3JpdGljYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgb25seSBnZXRzIGNhbGxlZCB3aXRo
IHJhbmdlcyB0aGF0CisgICAgLy8gY29uY2VudHJhdGUgb24gYSBnaXZlbiBhcmVhIGNvbnRhaW5p
bmcgdGhlIHNlbGVjdGlvbiByb290LiBUaGlzIGlzIGRvbmUKKyAgICAvLyBiZWNhdXNlIG9mIHRl
eHQgZmllbGRzIGFuZCB0ZXh0YXJlYXMuIFRoZSBET00gZm9yIHRob3NlIGlzIG5vdAorICAgIC8v
IGRpcmVjdGx5IGluIHRoZSBkb2N1bWVudCBET00sIHNvIGVuc3VyZSB0aGF0IHRoZSByYW5nZSBk
b2VzIG5vdCBjcm9zcyBhCisgICAgLy8gYm91bmRhcnkgb2Ygb25lIG9mIHRob3NlLgorICAgIGlm
IChyYW5nZS0+c3RhcnRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCktPmlzRGVzY2VuZGFudE9mKHNjb3BlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gc2NvcGUgJiYgIXJhbmdlLT5lbmRDb250YWlu
ZXIoKS0+aXNEZXNjZW5kYW50T2Yoc2NvcGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBSZWZQdHI8UmFuZ2U+IHRlc3RSYW5nZSA9IFJhbmdlOjpjcmVhdGUoc2NvcGUtPmRvY3VtZW50
KCksIHNjb3BlLCAwLCByYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0
KCkpOworICAgIEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOwor
ICAgIGxvY2F0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkp
OworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgdGVzdFJhbmdlLT5zZXRFbmQocmFu
Z2UtPmVuZENvbnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCksIGVjKTsKKyAgICBBU1NFUlQo
dGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKKyAgICBsZW5ndGggPSBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5nZXQoKSkgLSBsb2NhdGlvbjsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogLy8gLS0tLS0tLS0KICAgICAKIFVDaGFyKiBwbGFpblRleHRUb01h
bGxvY0FsbG9jYXRlZEJ1ZmZlcihjb25zdCBSYW5nZSogciwgdW5zaWduZWQmIGJ1ZmZlckxlbmd0
aCwgYm9vbCBpc0Rpc3BsYXlTdHJpbmcsIFRleHRJdGVyYXRvckJlaGF2aW9yIGRlZmF1bHRCZWhh
dmlvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCmluZGV4IDBmMWE2ZmQwM2Ix
N2Y3YTViZTljNDkwMjUxM2ExNTA3ODkzOTBiM2UuLmM3MWYzNDY2NTdlZTU0MTNiNTgyNWI1Y2Uz
MGRjMzIwYTI4YTE5NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaApAQCAt
OTgsNiArOTgsNyBAQCBwdWJsaWM6CiAgICAgIAogICAgIHN0YXRpYyBpbnQgcmFuZ2VMZW5ndGgo
Y29uc3QgUmFuZ2UqLCBib29sIHNwYWNlc0ZvclJlcGxhY2VkRWxlbWVudHMgPSBmYWxzZSk7CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKEVs
ZW1lbnQqIHNjb3BlLCBpbnQgcmFuZ2VMb2NhdGlvbiwgaW50IHJhbmdlTGVuZ3RoLCBib29sIHNw
YWNlc0ZvclJlcGxhY2VkRWxlbWVudHMgPSBmYWxzZSk7CisgICAgc3RhdGljIGJvb2wgbG9jYXRp
b25BbmRMZW5ndGhGcm9tUmFuZ2UoY29uc3QgUmFuZ2UqLCBzaXplX3QmIGxvY2F0aW9uLCBzaXpl
X3QmIGxlbmd0aCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IHN1YnJhbmdlKFJhbmdl
KiBlbnRpcmVSYW5nZSwgaW50IGNoYXJhY3Rlck9mZnNldCwgaW50IGNoYXJhY3RlckNvdW50KTsK
ICAgICAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDQyOWMwMzU1NjgxZWQ4YWUy
YzExYzg1OGRjOGFiNDQwYWMxYTRiOWQuLmNhOTdiOWI0NDYyNzMxOTVjZDYyNjlmNmVhY2NjZjIy
YTQwN2JmMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC04MDQsNiArODA0LDMxIEBAIERvY3Vt
ZW50KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKICAgICBy
ZXR1cm4gcmVzdWx0LmlubmVyTm9kZSgpID8gcmVzdWx0LmlubmVyTm9kZSgpLT5kb2N1bWVudCgp
IDogMDsKIH0KIAorUGFzc1JlZlB0cjxSYW5nZT4gRnJhbWU6OnJhbmdlRm9yUG9pbnQoY29uc3Qg
SW50UG9pbnQmIGZyYW1lUG9pbnQpCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0g
dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7CisgICAgaWYgKHBvc2l0aW9uLmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91
cyA9IHBvc2l0aW9uLnByZXZpb3VzKCk7CisgICAgaWYgKHByZXZpb3VzLmlzTm90TnVsbCgpKSB7
CisgICAgICAgIFJlZlB0cjxSYW5nZT4gcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5n
ZShwcmV2aW91cywgcG9zaXRpb24pOworICAgICAgICBJbnRSZWN0IHJlY3QgPSBlZGl0b3IoKS0+
Zmlyc3RSZWN0Rm9yUmFuZ2UocHJldmlvdXNDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CisgICAgICAg
IGlmIChyZWN0LmNvbnRhaW5zKGZyYW1lUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIHByZXZp
b3VzQ2hhcmFjdGVyUmFuZ2UucmVsZWFzZSgpOworICAgIH0KKworICAgIFZpc2libGVQb3NpdGlv
biBuZXh0ID0gcG9zaXRpb24ubmV4dCgpOworICAgIGlmIChuZXh0LmlzTm90TnVsbCgpKSB7Cisg
ICAgICAgIFJlZlB0cjxSYW5nZT4gbmV4dENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBvc2l0
aW9uLCBuZXh0KTsKKyAgICAgICAgSW50UmVjdCByZWN0ID0gZWRpdG9yKCktPmZpcnN0UmVjdEZv
clJhbmdlKG5leHRDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CisgICAgICAgIGlmIChyZWN0LmNvbnRh
aW5zKGZyYW1lUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIG5leHRDaGFyYWN0ZXJSYW5nZS5y
ZWxlYXNlKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgRnJhbWU6OmNyZWF0
ZVZpZXcoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBib29sIHRyYW5zcGFyZW50LAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBmaXhlZExheW91dFNpemUsIGJvb2wgdXNl
Rml4ZWRMYXlvdXQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKaW5kZXggZjIyZmNiODYxZmE4MzU2ZmI4YTRhMWQ0
NjhhMmUxOTgwNWM4MGNjNC4uMDU4MDVjZjFlMmU0OGRkNDNiZWY2ZjAyYWEzYTQ2ZDJmNjkzNDBm
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuaApAQCAtMTg0LDYgKzE4NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoY29u
c3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpOwogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnRBdFBv
aW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7CisgICAgICAgIFBhc3NSZWZQdHI8UmFu
Z2U+IHJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpOwogCiAgICAgICAg
IFN0cmluZyBzZWFyY2hGb3JMYWJlbHNBYm92ZUNlbGwoUmVndWxhckV4cHJlc3Npb24qLCBIVE1M
VGFibGVDZWxsRWxlbWVudCosIHNpemVfdCogcmVzdWx0RGlzdGFuY2VGcm9tU3RhcnRPZkNlbGwp
OwogICAgICAgICBTdHJpbmcgc2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudChjb25zdCBWZWN0
b3I8U3RyaW5nPiYgbGFiZWxzLCBFbGVtZW50Kiwgc2l6ZV90KiByZXN1bHREaXN0YW5jZSwgYm9v
bCogcmVzdWx0SXNJbkNlbGxBYm92ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggNTA5NTllMjIxNzgw
ZWJiZThiMDkyZTYxYTdiOTk3ZmZjOTg1Yjk5My4uYjAxZGY3MjE5ZWZiY2FjODUzMTFmMGYyZTg2
MDgwZmM5OGU4NjViZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTA0
LTA2ICBSb2JlcnQgU2VzZWsgIDxyc2VzZWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgY29kZSBkdXBsaWNhdGVkIGJl
dHdlZW4gdGhlIFdlYktpdC9tYWMgYW5kIFdlYktpdDIgZG93biB0byBXZWJDb3JlIGJlY2F1c2Ug
Q2hyb21pdW0gd2lsbCBuZWVkIGl0IHRvbworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NjkKKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06
CisgICAgICAgICgtW1dlYkZyYW1lIF9jb252ZXJ0VG9OU1JhbmdlOl0pOiBNb3ZlZCBkdXBsaWNh
dGVkIGNvZGUgdG8gV2ViQ29yZQorICAgICAgICAoLVtXZWJGcmFtZSBfY2hhcmFjdGVyUmFuZ2VB
dFBvaW50Ol0pOiBNb3ZlZCBkdXBsaWNhdGVkIGNvZGUgdG8gV2ViQ29yZQorCiAyMDExLTA0LTA1
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXgg
NTg0YjA5ZWQ2MzZhNzhjNWZiMGQ3ZjQ3N2FkMjk3YzFjOTEzYzVhYy4uOWU3MWMxYjZkMTMzNTI1
MDg2NThjOTBlZWMxZjg4OTk3ZDQxYjNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCkBAIC02NzAsMzAgKzY3MCwxNCBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2Ug
KmRhdGFTb3VyY2UoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIAogLSAoTlNSYW5nZSlfY29udmVy
dFRvTlNSYW5nZTooUmFuZ2UgKilyYW5nZQogewotICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5z
dGFydENvbnRhaW5lcigpKQorICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBOU01ha2VS
YW5nZShOU05vdEZvdW5kLCAwKTsKIAotICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBfcHJp
dmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAg
IEVsZW1lbnQqIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICAKLSAgICAv
LyBNb3VzZSBldmVudHMgbWF5IGNhdXNlIFRTTSB0byBhdHRlbXB0IHRvIGNyZWF0ZSBhbiBOU1Jh
bmdlIGZvciBhIHBvcnRpb24gb2YgdGhlIHZpZXcKLSAgICAvLyB0aGF0IGlzIG5vdCBpbnNpZGUg
dGhlIGN1cnJlbnQgZWRpdGFibGUgcmVnaW9uLiAgVGhlc2UgY2hlY2tzIGVuc3VyZSB3ZSBkb24n
dCBwcm9kdWNlCi0gICAgLy8gcG90ZW50aWFsbHkgaW52YWxpZCBkYXRhIHdoZW4gcmVzcG9uZGlu
ZyB0byBzdWNoIHJlcXVlc3RzLgotICAgIGlmIChyYW5nZS0+c3RhcnRDb250YWluZXIoKSAhPSBz
Y29wZSAmJiAhcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmlzRGVzY2VuZGFudE9mKHNjb3BlKSkK
LSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAgIGlmIChyYW5n
ZS0+ZW5kQ29udGFpbmVyKCkgIT0gc2NvcGUgJiYgIXJhbmdlLT5lbmRDb250YWluZXIoKS0+aXNE
ZXNjZW5kYW50T2Yoc2NvcGUpKQorICAgIHNpemVfdCBsb2NhdGlvbiwgbGVuZ3RoOworICAgIGlm
ICghVGV4dEl0ZXJhdG9yOjpsb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShyYW5nZSwgbG9jYXRp
b24sIGxlbmd0aCkpCiAgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsK
LSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHRlc3RSYW5nZSA9IFJhbmdlOjpjcmVhdGUoc2NvcGUt
PmRvY3VtZW50KCksIHNjb3BlLCAwLCByYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0
YXJ0T2Zmc2V0KCkpOwotICAgIEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0g
c2NvcGUpOwotICAgIGludCBzdGFydFBvc2l0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aCh0ZXN0UmFuZ2UuZ2V0KCkpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICB0ZXN0UmFu
Z2UtPnNldEVuZChyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSwgZWMp
OwotICAgIEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOwotICAg
IGludCBlbmRQb3NpdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLmdl
dCgpKTsKIAotICAgIHJldHVybiBOU01ha2VSYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlv
biAtIHN0YXJ0UG9zaXRpb24pOworICAgIHJldHVybiBOU01ha2VSYW5nZShsb2NhdGlvbiwgbGVu
Z3RoKTsKIH0KIAogLSAoUGFzc1JlZlB0cjxSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1Jh
bmdlKW5zcmFuZ2UKQEAgLTgyMCwyNyArODA0LDcgQEAgc3RhdGljIGlubGluZSBXZWJEYXRhU291
cmNlICpkYXRhU291cmNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAKIC0gKERPTVJhbmdlICop
X2NoYXJhY3RlclJhbmdlQXRQb2ludDooTlNQb2ludClwb2ludAogewotICAgIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbiA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpwb2ludF07Ci0g
ICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAg
IFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHBvc2l0aW9uLnByZXZpb3VzKCk7Ci0gICAgaWYg
KHByZXZpb3VzLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIERPTVJhbmdlICpwcmV2aW91c0NoYXJh
Y3RlclJhbmdlID0ga2l0KG1ha2VSYW5nZShwcmV2aW91cywgcG9zaXRpb24pLmdldCgpKTsKLSAg
ICAgICAgTlNSZWN0IHJlY3QgPSBbc2VsZiBfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6cHJldmlvdXND
aGFyYWN0ZXJSYW5nZV07Ci0gICAgICAgIGlmIChOU1BvaW50SW5SZWN0KHBvaW50LCByZWN0KSkK
LSAgICAgICAgICAgIHJldHVybiBwcmV2aW91c0NoYXJhY3RlclJhbmdlOwotICAgIH0KLQotICAg
IFZpc2libGVQb3NpdGlvbiBuZXh0ID0gcG9zaXRpb24ubmV4dCgpOwotICAgIGlmIChuZXh0Lmlz
Tm90TnVsbCgpKSB7Ci0gICAgICAgIERPTVJhbmdlICpuZXh0Q2hhcmFjdGVyUmFuZ2UgPSBraXQo
bWFrZVJhbmdlKHBvc2l0aW9uLCBuZXh0KS5nZXQoKSk7Ci0gICAgICAgIE5TUmVjdCByZWN0ID0g
W3NlbGYgX2ZpcnN0UmVjdEZvckRPTVJhbmdlOm5leHRDaGFyYWN0ZXJSYW5nZV07Ci0gICAgICAg
IGlmIChOU1BvaW50SW5SZWN0KHBvaW50LCByZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBuZXh0
Q2hhcmFjdGVyUmFuZ2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJu
IGtpdChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5yYW5nZUZvclBvaW50KEludFBvaW50KHBvaW50KSku
Z2V0KCkpOwogfQogCiAtIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX3R5cGluZ1N0eWxlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKaW5kZXggZjcwYjIxNTVjNjhkN2YwOGY1NzcxNDE1MGM3MmZmY2ZkMWNlZGRlOS4uNDcz
N2Q5YjQzZGYyZDdkOWJkZjNmZmZkNjUwMzlmYTA5Y2Y0MWE2NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE4IEBACisyMDExLTA0LTA2ICBSb2JlcnQgU2VzZWsgIDxyc2VzZWtAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
Y29kZSBkdXBsaWNhdGVkIGJldHdlZW4gdGhlIFdlYktpdC9tYWMgYW5kIFdlYktpdDIgZG93biB0
byBXZWJDb3JlIGJlY2F1c2UgQ2hyb21pdW0gd2lsbCBuZWVkIGl0IHRvbworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NjkKKworICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKTogTW92ZWQg
ZHVwbGljYXRlZCBjb2RlIHRvIFdlYkNvcmUKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW06IE1vdmVkIGR1cGxpY2F0ZWQgY29kZSB0byBXZWJDb3JlCisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldE1hcmtlZFJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6Z2V0U2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNo
YXJhY3RlckluZGV4Rm9yUG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOgorCiAyMDExLTA0LTA1ICBDaGFuZyBTaHUgIDxj
c2h1QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHAKaW5kZXggZmZmNzY3ZjFlMWY5NWM5ODMwNmVjOWVlNzYzY2FjMWE3
ODc0MzA3My4uNzY3YzAyYTcyYjcxNTUzMjJiNDQwMWY3ODY1NDEwNzQwNjdhM2Q2NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50LmNwcApAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
S2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRJdGVyYXRvci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0b3IuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0xOTYsNyArMTk3LDE0IEBAIHZvaWQgV2ViRWRpdG9y
Q2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCkKICAgICBzZWxlY3Rpb25TdGF0ZS5p
c0luUGFzc3dvcmRGaWVsZCA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNJblBhc3N3b3JkRmllbGQo
KTsKICAgICBzZWxlY3Rpb25TdGF0ZS5oYXNDb21wb3NpdGlvbiA9IGZyYW1lLT5lZGl0b3IoKS0+
aGFzQ29tcG9zaXRpb24oKTsKIAotICAgIFdlYlBhZ2U6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJv
bVJhbmdlKGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgc2Vs
ZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZVN0YXJ0LCBzZWxlY3Rpb25TdGF0ZS5zZWxlY3RlZFJh
bmdlTGVuZ3RoKTsKKyAgICBSYW5nZSogcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCk7CisgICAgaWYgKHJhbmdlKSB7CisgICAgICAgIHNpemVfdCBs
b2NhdGlvbiwgbGVuZ3RoOworICAgICAgICBpZiAoIVRleHRJdGVyYXRvcjo6bG9jYXRpb25BbmRM
ZW5ndGhGcm9tUmFuZ2UocmFuZ2UsIGxvY2F0aW9uLCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBzZWxlY3Rpb25TdGF0ZS5zZWxlY3RlZFJhbmdlU3RhcnQgPSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4obG9jYXRpb24pOworICAgICAgICBzZWxlY3Rpb25TdGF0ZS5zZWxlY3Rl
ZFJhbmdlTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aCk7CisgICAgfQogCiAg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbGVjdGlvblN0YXRlQ2hh
bmdlZChzZWxlY3Rpb25TdGF0ZSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggZTAyZTcxNWMwMmRlNWE2NTA2MDQwYmRkOWZiMmM0MWEx
MGIzMTAxMi4uOWUzYTg1NDZhMDhhM2Y5Njc1Y2Q5NThiMTEzMDhlZjQxMWE1YzRjNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtODI0LDM1
ICs4MjQsNiBAQCBXZWJDb250ZXh0TWVudSogV2ViUGFnZTo6Y29udGV4dE1lbnUoKQogICAgIHJl
dHVybiBtX2NvbnRleHRNZW51LmdldCgpOwogfQogCi12b2lkIFdlYlBhZ2U6OmdldExvY2F0aW9u
QW5kTGVuZ3RoRnJvbVJhbmdlKFJhbmdlKiByYW5nZSwgdWludDY0X3QmIGxvY2F0aW9uLCB1aW50
NjRfdCYgbGVuZ3RoKQotewotICAgIGxvY2F0aW9uID0gbm90Rm91bmQ7Ci0gICAgbGVuZ3RoID0g
MDsKLQotICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5zdGFydENvbnRhaW5lcigpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gcmFuZ2UtPm93bmVyRG9j
dW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAg
ICBFbGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogcmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgCi0gICAgLy8gTW91c2Ug
ZXZlbnRzIG1heSBjYXVzZSBUU00gdG8gYXR0ZW1wdCB0byBjcmVhdGUgYW4gTlNSYW5nZSBmb3Ig
YSBwb3J0aW9uIG9mIHRoZSB2aWV3Ci0gICAgLy8gdGhhdCBpcyBub3QgaW5zaWRlIHRoZSBjdXJy
ZW50IGVkaXRhYmxlIHJlZ2lvbi4gIFRoZXNlIGNoZWNrcyBlbnN1cmUgd2UgZG9uJ3QgcHJvZHVj
ZQotICAgIC8vIHBvdGVudGlhbGx5IGludmFsaWQgZGF0YSB3aGVuIHJlc3BvbmRpbmcgdG8gc3Vj
aCByZXF1ZXN0cy4KLSAgICBpZiAocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gc2NvcGUgJiYg
IXJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAocmFuZ2UtPmVuZENvbnRhaW5lcigpICE9IHNjb3BlICYmICFyYW5n
ZS0+ZW5kQ29udGFpbmVyKCktPmlzRGVzY2VuZGFudE9mKHNjb3BlKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUmVmUHRyPFJhbmdlPiB0ZXN0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHNjb3BlLT5k
b2N1bWVudCgpLCBzY29wZSwgMCwgcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFy
dE9mZnNldCgpKTsKLSAgICBBU1NFUlQodGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNj
b3BlKTsKLSAgICBsb2NhdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdl
LmdldCgpKTsKLSAgICAKLSAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIHRlc3RSYW5nZS0+c2V0
RW5kKHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVuZE9mZnNldCgpLCBlYyk7Ci0gICAg
QVNTRVJUKHRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7Ci0gICAgbGVuZ3Ro
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkpIC0gbG9jYXRpb247
Ci19Ci0KIC8vIEV2ZW50cyAKIAogc3RhdGljIGNvbnN0IFdlYkV2ZW50KiBnX2N1cnJlbnRFdmVu
dCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRl
eCBiYWNmNzFmOTkyODVlOWU0YjRiMDUxYzU3NzY3MTFlMzNlYmJmOGMzLi5hZWIxOGM2ZTg3N2Zm
OTllMGNhZWUzNTY0YmFkYWQzMDk4YmZhMjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTMwMCw4ICszMDAsNiBAQCBwdWJsaWM6CiAKICAgICBT
YW5kYm94RXh0ZW5zaW9uVHJhY2tlciYgc2FuZGJveEV4dGVuc2lvblRyYWNrZXIoKSB7IHJldHVy
biBtX3NhbmRib3hFeHRlbnNpb25UcmFja2VyOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRMb2Nh
dGlvbkFuZExlbmd0aEZyb21SYW5nZShXZWJDb3JlOjpSYW5nZSosIHVpbnQ2NF90JiBsb2NhdGlv
biwgdWludDY0X3QmIGxlbmd0aCk7Ci0KICNpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCByZWdp
c3RlclVJUHJvY2Vzc0FjY2Vzc2liaWxpdHlUb2tlbnMoY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVy
ZW5jZSYgZWxlbWVuVG9rZW4sIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmIHdpbmRvd1Rv
a2VuKTsKICAgICBBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdCogYWNjZXNzaWJpbGl0eVJlbW90
ZU9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tCmluZGV4IDkwMmEwMWE2YjA3MTY4MTdjZWY4YTI5YjQxMmUzNjJhZTQ0
ODQ3OGUuLmE3OGVkYzVhZWE3OTI3OTViOGE5YTI5YTY3MTE2YzBmM2IzYThhZjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0K
QEAgLTI3Niw4ICsyNzYsMTMgQEAgdm9pZCBXZWJQYWdlOjpnZXRNYXJrZWRSYW5nZSh1aW50NjRf
dCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpCiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJh
bmdlKGZyYW1lLT5lZGl0b3IoKS0+Y29tcG9zaXRpb25SYW5nZSgpLmdldCgpLCBsb2NhdGlvbiwg
bGVuZ3RoKTsKKworICAgIFJhbmdlKiByYW5nZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tcG9zaXRp
b25SYW5nZSgpLmdldCgpOworICAgIHNpemVfdCBsb2NhdGlvblNpemUsIGxlbmd0aFNpemU7Cisg
ICAgaWYgKHJhbmdlICYmIFRleHRJdGVyYXRvcjo6bG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2Uo
cmFuZ2UsIGxvY2F0aW9uU2l6ZSwgbGVuZ3RoU2l6ZSkpIHsKKyAgICAgICAgbG9jYXRpb24gPSBz
dGF0aWNfY2FzdDx1aW50NjRfdD4obG9jYXRpb25TaXplKTsKKyAgICAgICAgbGVuZ3RoID0gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aFNpemUpOworICAgIH0KIH0KIAogdm9pZCBXZWJQYWdl
OjpnZXRTZWxlY3RlZFJhbmdlKHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCkK
QEAgLTI4NywzNyArMjkyLDEyIEBAIHZvaWQgV2ViUGFnZTo6Z2V0U2VsZWN0ZWRSYW5nZSh1aW50
NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpCiAgICAgRnJhbWUqIGZyYW1lID0gbV9w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgaWYgKCFm
cmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGdldExvY2F0aW9uQW5kTGVuZ3RoRnJv
bVJhbmdlKGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgbG9j
YXRpb24sIGxlbmd0aCk7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBjaGFyYWN0ZXJS
YW5nZUF0UG9zaXRpb25Gb3JQb2ludChGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVQb3NpdGlv
biYgcG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBwb2ludCkKLXsKLSAgICBpZiAocG9zaXRpb24u
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiAwOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHByZXZp
b3VzID0gcG9zaXRpb24ucHJldmlvdXMoKTsKLSAgICBpZiAocHJldmlvdXMuaXNOb3ROdWxsKCkp
IHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBwcmV2aW91c0NoYXJhY3RlclJhbmdlID0gbWFrZVJh
bmdlKHByZXZpb3VzLCBwb3NpdGlvbik7Ci0gICAgICAgIEludFJlY3QgcmVjdCA9IGZyYW1lLT5l
ZGl0b3IoKS0+Zmlyc3RSZWN0Rm9yUmFuZ2UocHJldmlvdXNDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7
Ci0gICAgICAgIGlmIChyZWN0LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBw
cmV2aW91c0NoYXJhY3RlclJhbmdlLnJlbGVhc2UoKTsKKyAgICBzaXplX3QgbG9jYXRpb25TaXpl
LCBsZW5ndGhTaXplOworICAgIGlmIChUZXh0SXRlcmF0b3I6OmxvY2F0aW9uQW5kTGVuZ3RoRnJv
bVJhbmdlKGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgbG9j
YXRpb25TaXplLCBsZW5ndGhTaXplKSkgeworICAgICAgICBsb2NhdGlvbiA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90Pihsb2NhdGlvblNpemUpOworICAgICAgICBsZW5ndGggPSBzdGF0aWNfY2FzdDx1
aW50NjRfdD4obGVuZ3RoU2l6ZSk7CiAgICAgfQotICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBu
ZXh0ID0gcG9zaXRpb24ubmV4dCgpOwotICAgIGlmIChuZXh0LmlzTm90TnVsbCgpKSB7Ci0gICAg
ICAgIFJlZlB0cjxSYW5nZT4gbmV4dENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBvc2l0aW9u
LCBuZXh0KTsKLSAgICAgICAgSW50UmVjdCByZWN0ID0gZnJhbWUtPmVkaXRvcigpLT5maXJzdFJl
Y3RGb3JSYW5nZShuZXh0Q2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgICAgICBpZiAocmVjdC5j
b250YWlucyhwb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gbmV4dENoYXJhY3RlclJhbmdlLnJl
bGVhc2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBQYXNzUmVm
UHRyPFJhbmdlPiBjaGFyYWN0ZXJSYW5nZUF0UG9pbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBJbnRQ
b2ludCYgcG9pbnQpCi17Ci0gICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlQXRQb3NpdGlvbkZvclBv
aW50KGZyYW1lLCBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQocG9pbnQpLCBwb2ludCk7
CiB9CiAKIHZvaWQgV2ViUGFnZTo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludChJbnRQb2ludCBwb2lu
dCwgdWludDY0X3QmIGluZGV4KQpAQCAtMzMwLDEyICszMTAsMTMgQEAgdm9pZCBXZWJQYWdlOjpj
aGFyYWN0ZXJJbmRleEZvclBvaW50KEludFBvaW50IHBvaW50LCB1aW50NjRfdCYgaW5kZXgpCiAg
ICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RS
ZXN1bHRBdFBvaW50KHBvaW50LCBmYWxzZSk7CiAgICAgZnJhbWUgPSByZXN1bHQuaW5uZXJOb25T
aGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCktPmZy
YW1lKCkgOiBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
ICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY2hhcmFjdGVyUmFuZ2VBdFBvaW50KGZy
YW1lLCByZXN1bHQucG9pbnQoKSk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lLT5y
YW5nZUZvclBvaW50KHJlc3VsdC5wb2ludCgpKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICB1aW50NjRfdCBsZW5ndGg7Ci0gICAgZ2V0TG9jYXRpb25BbmRMZW5ndGhG
cm9tUmFuZ2UocmFuZ2UuZ2V0KCksIGluZGV4LCBsZW5ndGgpOworICAgIHNpemVfdCBsb2NhdGlv
biwgbGVuZ3RoOworICAgIGlmIChUZXh0SXRlcmF0b3I6OmxvY2F0aW9uQW5kTGVuZ3RoRnJvbVJh
bmdlKHJhbmdlLmdldCgpLCBsb2NhdGlvbiwgbGVuZ3RoKSkKKyAgICAgICAgaW5kZXggPSBzdGF0
aWNfY2FzdDx1aW50NjRfdD4obG9jYXRpb24pOwogfQogCiBQYXNzUmVmUHRyPFJhbmdlPiBjb252
ZXJ0VG9SYW5nZShGcmFtZSogZnJhbWUsIE5TUmFuZ2UgbnNyYW5nZSkKQEAgLTQyMCwxMiArNDAx
LDEyIEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmIGZsb2F0UG9pbnQpCiAgICAgZnJhbWUgPSByZXN1bHQuaW5uZXJOb25T
aGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCktPmZy
YW1lKCkgOiBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
IAogICAgIEludFBvaW50IHRyYW5zbGF0ZWRQb2ludCA9IGZyYW1lLT52aWV3KCktPndpbmRvd1Rv
Q29udGVudHMocG9pbnQpOwotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLT52
aXNpYmxlUG9zaXRpb25Gb3JQb2ludCh0cmFuc2xhdGVkUG9pbnQpOwogCiAgICAgLy8gRG9uJ3Qg
ZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KLSAgICBp
ZiAoIWNoYXJhY3RlclJhbmdlQXRQb3NpdGlvbkZvclBvaW50KGZyYW1lLCBwb3NpdGlvbiwgdHJh
bnNsYXRlZFBvaW50KSkKKyAgICBpZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KHRyYW5zbGF0ZWRQ
b2ludCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9
IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludCh0cmFuc2xhdGVkUG9pbnQpOwogICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9j
dXNlZE9yTWFpbkZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2hv
dWxkVXNlU2VsZWN0aW9uKHBvc2l0aW9uLCBzZWxlY3Rpb24pKSB7CiAgICAgICAgIHBlcmZvcm1E
aWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKERpY3Rpb25hcnlQb3B1cEluZm86OkhvdEtleSwg
ZnJhbWUsIHNlbGVjdGlvbik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88438</attachid>
            <date>2011-04-06 09:02:13 -0700</date>
            <delta_ts>2011-04-11 14:15:07 -0700</delta_ts>
            <desc>Patch v6 Chromium</desc>
            <filename>bug-54969-20110406120211.patch</filename>
            <type>text/plain</type>
            <size>21275</size>
            <attacher name="Robert Sesek">rsesek</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMwMzAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
NjQyMTU2ZDVkNDI5NjQzNGVlNTIzYmVhMWRjNjU5OWEwMWM3ZGE1My4uMmQzYmY3NGRlZjRiMmVm
MThjMTUwMDNkY2YxNjQ3OGYyZmI0MzcyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyOSBAQAorMjAxMS0wNC0wNiAgUm9iZXJ0IFNlc2VrICA8cnNlc2VrQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Q2hyb21pdW1dIEltcGxlbWVudCBXZWJLaXQgbWV0aG9kcyB0byBhc3Npc3Qgd2l0aCBDb2NvYSBO
U1RleHRJbnB1dCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NjkKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAg
ICogcHVibGljL1dlYkZyYW1lLmg6CisgICAgICAgICogcHVibGljL1dlYldpZGdldC5oOgorICAg
ICAgICAqIHB1YmxpYy9tYWMvV2ViU3Vic3RyaW5nVXRpbC5oOiBBZGRlZC4KKyAgICAgICAgKiBz
cmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpmaXJz
dFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSk6IFJldHVybiB0aGUgcmVzdWx0IHJlY3QgaW4gd2luZG93
IGNvb3JkaW5hdGVzCisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Y2hhcmFjdGVySW5k
ZXhGb3JQb2ludCk6IE5ldyBtZXRob2Qgb24gV2ViRnJhbWUKKyAgICAgICAgKiBzcmMvV2ViRnJh
bWVJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpjb21wb3NpdGlvblJhbmdlKTogTmV3IG1ldGhvZCBv
biBXZWJXaWRnZXQ7IGVtcHR5IGltcGwKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1w
bDo6Y2FyZXRPclNlbGVjdGlvblJhbmdlKTogTmV3IG1ldGhvZCBvbiBXZWJXaWRnZXQ7IGVtcHR5
IGltcGwKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51SW1wbC5oOgorICAgICAgICAqIHNyYy9X
ZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wb3NpdGlv
blJhbmdlKTogTmV3IG1ldGhvZCBvbiBXZWJXaWRnZXQKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OmNhcmV0T3JTZWxlY3Rpb25SYW5nZSk6IE5ldyBtZXRob2Qgb24gV2ViV2lkZ2V0Cisg
ICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICogc3JjL21hYy9XZWJTdWJzdHJp
bmdVdGlsLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViU3Vic3RyaW5nVXRpbDo6YXR0
cmlidXRlZFN1YnN0cmluZ0luUmFuZ2UpOgorCiAyMDExLTA0LTA1ICBaZWxpZHJhZyBIb3JudW5n
ICA8emVsaWRyYWdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExl
dmluLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IDI2M2I0OWU1NDgyNzVkMTFhNmI0
Y2MwMjRlZjFiZjVjZmQwOTY0YzcuLmJlMGFmZDA3MWI0ZGJkNjJiZTAwNjBjYTI1Zjk2YmVjMDYz
Y2Q4NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTk2LDYgKzk2LDcgQEAKICAg
ICAgICAgICAgICAgICAncHVibGljL21hYy9XZWJJbnB1dEV2ZW50RmFjdG9yeS5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL21hYy9XZWJTYW5kYm94U3VwcG9ydC5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL21hYy9XZWJTY3JlZW5JbmZvRmFjdG9yeS5oJywKKyAgICAgICAgICAgICAg
ICAncHVibGljL21hYy9XZWJTdWJzdHJpbmdVdGlsLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvbWFjL1dlYlRoZW1lRW5naW5lLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQWNj
ZXNzaWJpbGl0eUNhY2hlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQWNjZXNzaWJp
bGl0eU5vdGlmaWNhdGlvbi5oJywKQEAgLTM4MSw2ICszODIsNyBAQAogICAgICAgICAgICAgICAg
ICdzcmMveDExL1dlYlNjcmVlbkluZm9GYWN0b3J5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9tYWMvV2ViSW5wdXRFdmVudEZhY3RvcnkubW0nLAogICAgICAgICAgICAgICAgICdzcmMvbWFj
L1dlYlNjcmVlbkluZm9GYWN0b3J5Lm1tJywKKyAgICAgICAgICAgICAgICAnc3JjL21hYy9XZWJT
dWJzdHJpbmdVdGlsLm1tJywKICAgICAgICAgICAgICAgICAnc3JjL0xvY2FsRmlsZVN5c3RlbUNo
cm9taXVtLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9Mb2NhbGl6ZWRTdHJpbmdzLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5jcHAnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKaW5kZXggZDVkMmZmNGQyNWYz
MmY3ZTQ2N2QxNjQxYTI0MzhlNTNiYmVkMTc0OS4uMTlhODE2MzA5ZmViNzQxNmQ5MmY5NWU3NzAy
NTExZGNkYzAyOTRiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5o
CkBAIC02Nyw2ICs2Nyw3IEBAIGNsYXNzIFdlYlVSTFJlcXVlc3Q7CiBjbGFzcyBXZWJWaWV3Owog
c3RydWN0IFdlYkNvbnNvbGVNZXNzYWdlOwogc3RydWN0IFdlYkZpbmRPcHRpb25zOworc3RydWN0
IFdlYlBvaW50Owogc3RydWN0IFdlYlJlY3Q7CiBzdHJ1Y3QgV2ViU2NyaXB0U291cmNlOwogc3Ry
dWN0IFdlYlNpemU7CkBAIC0zODAsOCArMzgxLDE1IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
V2ViUmFuZ2UgbWFya2VkUmFuZ2UoKSBjb25zdCA9IDA7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBm
cmFtZSByZWN0YW5nbGUgaW4gd2luZG93IGNvb3JkaW5hdGUgc3BhY2Ugb2YgdGhlIGdpdmVuIHRl
eHQKKyAgICAvLyByYW5nZS4KICAgICB2aXJ0dWFsIGJvb2wgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVy
UmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgV2ViUmVjdCYpIGNvbnN0
ID0gMDsKIAorICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIGEgY2hhcmFjdGVyIGluIHRoZSBG
cmFtZSdzIHRleHQgc3RyZWFtIGF0IHRoZSBnaXZlbgorICAgIC8vIHBvaW50LiBUaGUgcG9pbnQg
aXMgaW4gdGhlIHdpbmRvdyBjb29yZGluYXRlIHNwYWNlLiBXaWxsIHJldHVybgorICAgIC8vIFdU
Rjo6bm90Rm91bmQgaWYgdGhlIHBvaW50IGlzIGludmFsaWQuCisgICAgdmlydHVhbCBzaXplX3Qg
Y2hhcmFjdGVySW5kZXhGb3JQb2ludChjb25zdCBXZWJQb2ludCYpIGNvbnN0ID0gMDsKKwogICAg
IC8vIFN1cHBvcnRzIGNvbW1hbmRzIGxpa2UgVW5kbywgUmVkbywgQ3V0LCBDb3B5LCBQYXN0ZSwg
U2VsZWN0QWxsLAogICAgIC8vIFVuc2VsZWN0LCBldGMuIFNlZSBFZGl0b3JDb21tYW5kLmNwcCBm
b3IgdGhlIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWQKICAgICAvLyBjb21tYW5kcy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKaW5kZXggMzZmYmYzMTNhZDE3NDY0YzQx
ZDhkOTI3Y2IyMTMyYWRhYjZhZTg4MS4uNjc4ODgyYzc3MzhjZmUxOWNkMWZlYzAyNWY5ZDFhNzYz
OWE0NjAxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lk
Z2V0LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKQEAg
LTQwLDYgKzQwLDcgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJJbnB1dEV2ZW50
OworY2xhc3MgV2ViUmFuZ2U7CiBjbGFzcyBXZWJTdHJpbmc7CiBzdHJ1Y3QgV2ViUmVjdDsKIHN0
cnVjdCBXZWJTaXplOwpAQCAtMTE5LDYgKzEyMCwxMSBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZXJlIGlzIGFuIG9uZ29pbmcgY29tcG9zaXRpb24gb3IgdGhlIHRleHQgaXMg
aW5zZXJ0ZWQuCiAgICAgdmlydHVhbCBib29sIGNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBXZWJT
dHJpbmcmIHRleHQpID0gMDsKIAorICAgIC8vIEZldGNoZXMgdGhlIGNoYXJhY3RlciByYW5nZSBv
ZiB0aGUgY3VycmVudCBjb21wb3NpdGlvbiwgYWxzbyBjYWxsZWQgdGhlCisgICAgLy8gIm1hcmtl
ZCByYW5nZS4iIFJldHVybnMgdHJ1ZSBhbmQgZmlsbHMgdGhlIG91dC1wYXJhbXRlcnMgb24gc3Vj
Y2VzczsKKyAgICAvLyByZXR1cm5zIGZhbHNlIG9uIGZhaWx1cmUuCisgICAgdmlydHVhbCBib29s
IGNvbXBvc2l0aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90KiBsZW5ndGgpID0gMDsK
KwogICAgIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgdGV4dCBpbnB1dCB0eXBlIG9mIHRoaXMgV2Vi
V2lkZ2V0LgogICAgIHZpcnR1YWwgV2ViVGV4dElucHV0VHlwZSB0ZXh0SW5wdXRUeXBlKCkgPSAw
OwogCkBAIC0xMjYsNiArMTMyLDEyIEBAIHB1YmxpYzoKICAgICAvLyB3aWxsIGJlIHJldHVybmVk
IGlmIGEgc2VsZWN0aW9uIHJhbmdlIGlzIGF2YWlsYWJsZS4KICAgICB2aXJ0dWFsIFdlYlJlY3Qg
Y2FyZXRPclNlbGVjdGlvbkJvdW5kcygpID0gMDsKIAorICAgIC8vIEZldGNoIHRoZSBjdXJyZW50
IHNlbGVjdGlvbiByYW5nZSBvZiB0aGlzIFdlYldpZGdldC4gSWYgdGhlcmUgaXMgbm8KKyAgICAv
LyBzZWxlY3Rpb24sIGl0IHdpbGwgb3V0cHV0IGEgMC1sZW5ndGggcmFuZ2Ugd2l0aCB0aGUgbG9j
YXRpb24gYXQgdGhlCisgICAgLy8gY2FyZXQuIFJldHVybnMgdHJ1ZSBhbmQgZmlsbHMgdGhlIG91
dC1wYXJhbXRlcnMgb24gc3VjY2VzczsgcmV0dXJucyBmYWxzZQorICAgIC8vIG9uIGZhaWx1cmUu
CisgICAgdmlydHVhbCBib29sIGNhcmV0T3JTZWxlY3Rpb25SYW5nZShzaXplX3QqIGxvY2F0aW9u
LCBzaXplX3QqIGxlbmd0aCkgPSAwOworCiAgICAgLy8gQ2hhbmdlcyB0aGUgdGV4dCBkaXJlY3Rp
b24gb2YgdGhlIHNlbGVjdGVkIGlucHV0IG5vZGUuCiAgICAgdmlydHVhbCB2b2lkIHNldFRleHRE
aXJlY3Rpb24oV2ViVGV4dERpcmVjdGlvbikgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9tYWMvV2ViU3Vic3RyaW5nVXRpbC5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvbWFjL1dlYlN1YnN0cmluZ1V0aWwuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzZm
YjI3MmRiMjhlMDRjODk0NDUxYTFmYWI0MDAxNGEzZDE1ZmRiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvbWFjL1dlYlN1YnN0cmluZ1V0aWwuaApAQCAt
MCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBXZWJTdWJzdHJpbmdVdGlsX2gKKyNkZWZpbmUgV2ViU3Vic3Ry
aW5nVXRpbF9oCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRnJhbWU7CitjbGFzcyBX
ZWJTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTdWJzdHJpbmdV
dGlsIHsKK3B1YmxpYzoKKyAgICAvLyBSZXR1cm5zIGEgc2VyaWFsaXplZCBOU0F0dHJpYnV0ZWRT
dHJpbmcgKHZpYSBOU0RhdGEpIHRoYXQgaXMgYSBzdWJzdHJpbmcKKyAgICAvLyBvZiB0aGUgRnJh
bWUgYXQgdGhlIGdpdmVuIHJhbmdlLgorICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBh
dHRyaWJ1dGVkU3Vic3RyaW5nSW5SYW5nZShXZWJGcmFtZSosCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsb2NhdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IGxlbmd0aCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAppbmRleCA5YzVl
MDVmNWMwZDZlODM0OGU5MDBhN2E5M2Q1MWQ0MTM3OTdmYmVjLi42MWZjNzc3N2FmZWFmMzRiOTA0
NmMzOWFlOWRjMTkyMTkyNWJmMTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkZyYW1lSW1wbC5jcHAKQEAgLTg1LDYgKzg1LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFdmVudEhhbmRs
ZXIuaCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGb3JtU3RhdGUu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKQEAgLTk4LDYgKzk5LDcgQEAKICNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgorI2luY2x1ZGUgIkhp
dFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgInBhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCIK
QEAgLTExMzYsMTEgKzExMzgsMzAgQEAgYm9vbCBXZWJGcmFtZUltcGw6OmZpcnN0UmVjdEZvckNo
YXJhY3RlclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgKICAgICBpZiAo
IXJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSW50UmVjdCBpbnRSZWN0ID0gZnJh
bWUoKS0+ZWRpdG9yKCktPmZpcnN0UmVjdEZvclJhbmdlKHJhbmdlLmdldCgpKTsKLSAgICByZWN0
ID0gV2ViUmVjdChpbnRSZWN0LngoKSwgaW50UmVjdC55KCksIGludFJlY3Qud2lkdGgoKSwgaW50
UmVjdC5oZWlnaHQoKSk7CisgICAgcmVjdCA9IFdlYlJlY3QoaW50UmVjdCk7CisgICAgLy8gV2hl
biBpbnNpZGUgYW4gdGV4dCBjb250cm9sLCBkb24ndCBhZGp1c3QgdGhlIHJhbmdlLgorICAgIGlm
ICghc2VsZWN0aW9uUm9vdCkKKyAgICAgICAgcmVjdCA9IGZyYW1lKCktPnZpZXcoKS0+Y29udGVu
dHNUb1dpbmRvdyhyZWN0KTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCitzaXplX3QgV2ViRnJh
bWVJbXBsOjpjaGFyYWN0ZXJJbmRleEZvclBvaW50KGNvbnN0IFdlYlBvaW50JiB3ZWJQb2ludCkg
Y29uc3QKK3sKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiBub3RGb3VuZDsKKwor
ICAgIEludFBvaW50IHBvaW50ID0gZnJhbWUoKS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHdl
YlBvaW50KTsKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGZyYW1lKCktPmV2ZW50SGFuZGxl
cigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChwb2ludCwgZmFsc2UpOworICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBmcmFtZSgpLT5yYW5nZUZvclBvaW50KHJlc3VsdC5wb2ludCgpKTsKKyAgICBp
ZiAoIXJhbmdlLmdldCgpKQorICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisKKyAgICBzaXplX3Qg
bG9jYXRpb24sIGxlbmd0aDsKKyAgICBUZXh0SXRlcmF0b3I6OmxvY2F0aW9uQW5kTGVuZ3RoRnJv
bVJhbmdlKHJhbmdlLmdldCgpLCBsb2NhdGlvbiwgbGVuZ3RoKTsKKyAgICByZXR1cm4gbG9jYXRp
b247Cit9CisKIGJvb2wgV2ViRnJhbWVJbXBsOjpleGVjdXRlQ29tbWFuZChjb25zdCBXZWJTdHJp
bmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKGZyYW1lKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuaAppbmRleCA2MTI5ZGUxYTFlZGQ3ZjU3MTEzZTU3M2JmMTU1MTRi
NTc4Y2QzYmIyLi5hMDNjMDE4YTFkYWVkNTRhZTEwN2NmNTI0YTI0ZTE5YTY5OWRmYmQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaApAQCAtMTQ3LDYgKzE0Nyw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzTWFya2VkVGV4dCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgV2ViUmFuZ2UgbWFya2VkUmFuZ2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxl
bmd0aCwgV2ViUmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgc2l6ZV90IGNoYXJhY3RlckluZGV4
Rm9yUG9pbnQoY29uc3QgV2ViUG9pbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZXhlY3V0
ZUNvbW1hbmQoY29uc3QgV2ViU3RyaW5nJik7CiAgICAgdmlydHVhbCBib29sIGV4ZWN1dGVDb21t
YW5kKGNvbnN0IFdlYlN0cmluZyYsIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpOwogICAgIHZpcnR1
YWwgYm9vbCBpc0NvbW1hbmRFbmFibGVkKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAppbmRleCBiNGQ0
MjQ2YzNmNjAxMGJjYWY1MDIxZDRjZDk2ODFhYmZjMzkzZGI1Li42YTY0MWE5MTQyYjI4ZDYyMmYx
OWFmYzc5NDZkZTRkYjQ5ZGY0YWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJQb3B1cE1lbnVJbXBsLmNwcApAQCAtNDMsNiArNDMsNyBAQAogCiAjaW5jbHVkZSAiV2Vi
SW5wdXRFdmVudC5oIgogI2luY2x1ZGUgIldlYklucHV0RXZlbnRDb252ZXJzaW9uLmgiCisjaW5j
bHVkZSAiV2ViUmFuZ2UuaCIKICNpbmNsdWRlICJXZWJSZWN0LmgiCiAjaW5jbHVkZSAiV2ViV2lk
Z2V0Q2xpZW50LmgiCiAKQEAgLTI1Miw2ICsyNTMsMTMgQEAgYm9vbCBXZWJQb3B1cE1lbnVJbXBs
Ojpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJiB0ZXh0KQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAorYm9vbCBXZWJQb3B1cE1lbnVJbXBsOjpjb21wb3NpdGlvblJhbmdlKHNpemVf
dCogbG9jYXRpb24sIHNpemVfdCogbGVuZ3RoKQoreworICAgICpsb2NhdGlvbiA9IDA7CisgICAg
Kmxlbmd0aCA9IDA7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBXZWJUZXh0SW5wdXRUeXBlIFdl
YlBvcHVwTWVudUltcGw6OnRleHRJbnB1dFR5cGUoKQogewogICAgIHJldHVybiBXZWJUZXh0SW5w
dXRUeXBlTm9uZTsKQEAgLTI2Miw2ICsyNzAsMTMgQEAgV2ViUmVjdCBXZWJQb3B1cE1lbnVJbXBs
OjpjYXJldE9yU2VsZWN0aW9uQm91bmRzKCkKICAgICByZXR1cm4gV2ViUmVjdCgpOwogfQogCiti
b29sIFdlYlBvcHVwTWVudUltcGw6OmNhcmV0T3JTZWxlY3Rpb25SYW5nZShzaXplX3QqIGxvY2F0
aW9uLCBzaXplX3QqIGxlbmd0aCkKK3sKKyAgICAqbG9jYXRpb24gPSAwOworICAgICpsZW5ndGgg
PSAwOworICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpzZXRU
ZXh0RGlyZWN0aW9uKFdlYlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQogewogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCmluZGV4IDdiYjlmN2U1YTIw
NTJjYmY4YzcyZGYwY2UwYzQ3NWVmYzFhN2I1ZTkuLjAyZDY5OGJiYjMxYTg1ZmIyZjk5M2NhMTFm
OGQ3YzM2NWEyOWYyN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBvcHVwTWVudUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1
cE1lbnVJbXBsLmgKQEAgLTUxLDYgKzUxLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBX
ZWJLZXlib2FyZEV2ZW50OwogY2xhc3MgV2ViTW91c2VFdmVudDsKIGNsYXNzIFdlYk1vdXNlV2hl
ZWxFdmVudDsKK2NsYXNzIFdlYlJhbmdlOwogc3RydWN0IFdlYlJlY3Q7CiAKIGNsYXNzIFdlYlBv
cHVwTWVudUltcGwgOiBwdWJsaWMgV2ViUG9wdXBNZW51LApAQCAtNzYsOCArNzcsMTAgQEAgcHVi
bGljOgogICAgICAgICBpbnQgc2VsZWN0aW9uU3RhcnQsIGludCBzZWxlY3Rpb25FbmQpOwogICAg
IHZpcnR1YWwgYm9vbCBjb25maXJtQ29tcG9zaXRpb24oKTsKICAgICB2aXJ0dWFsIGJvb2wgY29u
ZmlybUNvbXBvc2l0aW9uKGNvbnN0IFdlYlN0cmluZyYgdGV4dCk7CisgICAgdmlydHVhbCBib29s
IGNvbXBvc2l0aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90KiBsZW5ndGgpOwogICAg
IHZpcnR1YWwgV2ViVGV4dElucHV0VHlwZSB0ZXh0SW5wdXRUeXBlKCk7CiAgICAgdmlydHVhbCBX
ZWJSZWN0IGNhcmV0T3JTZWxlY3Rpb25Cb3VuZHMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FyZXRP
clNlbGVjdGlvblJhbmdlKHNpemVfdCogbG9jYXRpb24sIHNpemVfdCogbGVuZ3RoKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0VGV4dERpcmVjdGlvbihXZWJUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbik7
CiAgICAgdmlydHVhbCBib29sIGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcAppbmRleCA2NjllZmFmODI2MTE2ZmY3MGEyMmUyNjYzMzUzM2JiNTMzYWIwM2U4Li4y
OGRhOWQzMjhiMWM3OWRmNzEwODA5NWRmNzE0NmI4MjAwNGQ3N2I2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC05MSw2ICs5MSw3IEBACiAjaW5jbHVk
ZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVk
ZSAiU3BlZWNoSW5wdXRDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHlw
aW5nQ29tbWFuZC5oIgpAQCAtMTE0LDYgKzExNSw3IEBACiAjaW5jbHVkZSAiV2ViUGx1Z2luQ29u
dGFpbmVySW1wbC5oIgogI2luY2x1ZGUgIldlYlBvaW50LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBN
ZW51SW1wbC5oIgorI2luY2x1ZGUgIldlYlJhbmdlLmgiCiAjaW5jbHVkZSAiV2ViUmVjdC5oIgog
I2luY2x1ZGUgIldlYlJ1bnRpbWVGZWF0dXJlcy5oIgogI2luY2x1ZGUgIldlYlNldHRpbmdzSW1w
bC5oIgpAQCAtMTM5NCw2ICsxMzk2LDI0IEBAIGJvb2wgV2ViVmlld0ltcGw6OmNvbmZpcm1Db21w
b3NpdGlvbihjb25zdCBXZWJTdHJpbmcmIHRleHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jv
b2wgV2ViVmlld0ltcGw6OmNvbXBvc2l0aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90
KiBsZW5ndGgpCit7CisgICAgRnJhbWUqIGZvY3VzZWQgPSBmb2N1c2VkV2ViQ29yZUZyYW1lKCk7
CisgICAgaWYgKCFmb2N1c2VkIHx8ICFtX2ltZUFjY2VwdEV2ZW50cykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIEVkaXRvciogZWRpdG9yID0gZm9jdXNlZC0+ZWRpdG9yKCk7CisgICAgaWYg
KCFlZGl0b3IgfHwgIWVkaXRvci0+aGFzQ29tcG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVkaXRvci0+Y29tcG9zaXRpb25SYW5n
ZSgpOworICAgIGlmICghcmFuZ2UuZ2V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChUZXh0SXRlcmF0b3I6OmxvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKHJhbmdlLmdldCgp
LCAqbG9jYXRpb24sICpsZW5ndGgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKIFdlYlRleHRJbnB1dFR5cGUgV2ViVmlld0ltcGw6OnRleHRJbnB1dFR5cGUo
KQogewogICAgIFdlYlRleHRJbnB1dFR5cGUgdHlwZSA9IFdlYlRleHRJbnB1dFR5cGVOb25lOwpA
QCAtMTQ1NCw2ICsxNDc0LDI1IEBAIFdlYlJlY3QgV2ViVmlld0ltcGw6OmNhcmV0T3JTZWxlY3Rp
b25Cb3VuZHMoKQogICAgIHJldHVybiByZWN0OwogfQogCitib29sIFdlYlZpZXdJbXBsOjpjYXJl
dE9yU2VsZWN0aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90KiBsZW5ndGgpCit7Cisg
ICAgY29uc3QgRnJhbWUqIGZvY3VzZWQgPSBmb2N1c2VkV2ViQ29yZUZyYW1lKCk7CisgICAgaWYg
KCFmb2N1c2VkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTZWxlY3Rpb25Db250cm9s
bGVyKiBjb250cm9sbGVyID0gZm9jdXNlZC0+c2VsZWN0aW9uKCk7CisgICAgaWYgKCFjb250cm9s
bGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
Y29udHJvbGxlci0+c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGlmICghcmFuZ2UuZ2V0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChUZXh0SXRlcmF0b3I6OmxvY2F0
aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKHJhbmdlLmdldCgpLCAqbG9jYXRpb24sICpsZW5ndGgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgV2ViVmll
d0ltcGw6OnNldFRleHREaXJlY3Rpb24oV2ViVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAg
ICAgLy8gVGhlIEVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oKSBmdW5jdGlvbiBjaGVj
a3MgaWYgd2UgY2FuIGNoYW5nZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmgKaW5kZXggNjZiMjkwODFiYzQwNzZmZTcyNTBiMWVjNmJkZTYzM2ZjNTY3N2QyMi4uZmEzOThk
YmQxOGM5OWI3NTc2YTk0ZTExMWU5YTgwMDM4NGVjNTQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC0xMDcsOCArMTA3LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgaW50IHNlbGVjdGlvbkVuZCk7CiAgICAgdmlydHVhbCBib29sIGNvbmZpcm1Db21wb3NpdGlv
bigpOwogICAgIHZpcnR1YWwgYm9vbCBjb25maXJtQ29tcG9zaXRpb24oY29uc3QgV2ViU3RyaW5n
JiB0ZXh0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRpb25SYW5nZShzaXplX3QqIGxvY2F0
aW9uLCBzaXplX3QqIGxlbmd0aCk7CiAgICAgdmlydHVhbCBXZWJUZXh0SW5wdXRUeXBlIHRleHRJ
bnB1dFR5cGUoKTsKICAgICB2aXJ0dWFsIFdlYlJlY3QgY2FyZXRPclNlbGVjdGlvbkJvdW5kcygp
OworICAgIHZpcnR1YWwgYm9vbCBjYXJldE9yU2VsZWN0aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlv
biwgc2l6ZV90KiBsZW5ndGgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0RGlyZWN0aW9uKFdl
YlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL21hYy9XZWJTdWJzdHJpbmdVdGlsLm1tIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvbWFjL1dlYlN1YnN0cmluZ1V0aWwubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzkyNTE4NGY5NTA3
MWRmZDMwMmQwYTUyNWY5NzEzYTE3NjA0YjU5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL21hYy9XZWJTdWJzdHJpbmdVdGlsLm1tCkBAIC0wLDAgKzEsMTE5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUlt
cGwuaCIKKyNpbmNsdWRlICJXZWJTdWJzdHJpbmdVdGlsLmgiCisKKyNpbmNsdWRlICJDb2xvck1h
Yy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJU
ZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJXZWJSZWN0LmgiCisjaW5jbHVkZSAiV2ViU3RyaW5n
LmgiCisKKyNpbXBvcnQgPENvY29hL0NvY29hLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVGhpcyBmdW5jdGlvbiBpcyBjb3BpZWQgZnJv
bSAvV2ViS2l0L21hYy9NaXNjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5tbS4KK1dlYktp
dDo6V2ViU3RyaW5nIFdlYlN1YnN0cmluZ1V0aWw6OmF0dHJpYnV0ZWRTdWJzdHJpbmdJblJhbmdl
KFdlYkZyYW1lKiB3ZWJGcmFtZSwgc2l6ZV90IGxvY2F0aW9uLCBzaXplX3QgbGVuZ3RoKQorewor
ICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+KHdlYkZyYW1lKS0+
ZnJhbWUoKTsKKyAgICBpZiAoZnJhbWUtPnZpZXcoKS0+bmVlZHNMYXlvdXQoKSkKKyAgICAgICAg
ZnJhbWUtPnZpZXcoKS0+bGF5b3V0KCk7CisKKyAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0g
ZnJhbWUtPnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgc2VsZWN0aW9u
Um9vdCA9IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogZnJhbWUtPmRvY3VtZW50KCkt
PmRvY3VtZW50RWxlbWVudCgpOworCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZShUZXh0SXRlcmF0
b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHNlbGVjdGlvblJvb3QsIGxvY2F0aW9uLCBs
ZW5ndGgpKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gV2ViS2l0OjpXZWJTdHJp
bmcoKTsKKworICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIHN0cmluZyA9IFtbTlNNdXRh
YmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07CisgICAgTlNNdXRhYmxlRGljdGlvbmFy
eSogYXR0cnMgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKKworICAgIHVuc2ln
bmVkIHBvc2l0aW9uID0gMDsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdChyYW5nZS5nZXQoKSk7
ICFpdC5hdEVuZCgpICYmIFtzdHJpbmcgbGVuZ3RoXSA8IGxlbmd0aDsgaXQuYWR2YW5jZSgpKSB7
CisgICAgICAgIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMgPSBpdC5sZW5ndGgoKTsKKyAgICAgICAg
aWYgKCFudW1DaGFyYWN0ZXJzKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgRXhj
ZXB0aW9uQ29kZSBleGNlcHRpb24gPSAwOworICAgICAgICBOb2RlKiBjb250YWluZXIgPSBpdC5y
YW5nZSgpLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pOworICAgICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gY29udGFpbmVyLT5yZW5kZXJlcigpOworICAgICAgICBBU1NFUlQocmVuZGVy
ZXIpOworICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgICAgIE5T
Rm9udCogZm9udCA9IHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCk7Cisg
ICAgICAgIC8vIElmIHRoZSBwbGF0Zm9ybSBmb250IGNhbid0IGJlIGxvYWRlZCwgaXQncyBsaWtl
bHkgdGhhdCB0aGUgc2l0ZSBpcworICAgICAgICAvLyB1c2luZyBhIHdlYiBmb250LiBGb3Igbm93
LCBqdXN0IHVzZSB0aGUgZGVmYXVsdCBmb250IGluc3RlYWQuCisgICAgICAgIC8vIFRPRE8ocnNl
c2VrKTogQ2hhbmdlIHRoZSBmb250IGFjdGl2YXRpb24gZmxhZ3MgdG8gYWxsb3cgb3RoZXIgcHJv
Y2Vzc2VzCisgICAgICAgIC8vIHRvIHVzZSB0aGUgZm9udC4KKyAgICAgICAgaWYgKCFmb250KQor
ICAgICAgICAgIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6c3R5bGUtPmZvbnQoKS5z
aXplKCldOworICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJp
YnV0ZU5hbWVdOworCisgICAgICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpLmFscGhhKCkpCisgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0Om5z
Q29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9y
S2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIFthdHRycyByZW1vdmVPYmplY3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1
dGVOYW1lXTsKKyAgICAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkpCisgICAgICAgICAgICBbYXR0cnMgc2V0T2Jq
ZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDb2xvcikpIGZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBbYXR0cnMgcmVtb3ZlT2JqZWN0Rm9yS2V5Ok5TQmFja2dy
b3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisKKyAgICAgICAgTlNTdHJpbmcqIHN1YnN0cmluZyA9
CisgICAgICAgICAgICBbW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5
OmNvbnN0X2Nhc3Q8VUNoYXIqPihpdC5jaGFyYWN0ZXJzKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOml0Lmxlbmd0aCgpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZVdoZW5Eb25lOk5PXSBhdXRv
cmVsZWFzZV07CisgICAgICAgIFtzdHJpbmcgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFr
ZVJhbmdlKHBvc2l0aW9uLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aFN0
cmluZzpzdWJzdHJpbmddOworICAgICAgICBbc3RyaW5nIHNldEF0dHJpYnV0ZXM6YXR0cnMgcmFu
Z2U6TlNNYWtlUmFuZ2UocG9zaXRpb24sIG51bUNoYXJhY3RlcnMpXTsKKyAgICAgICAgcG9zaXRp
b24gKz0gbnVtQ2hhcmFjdGVyczsKKyAgICB9CisgICAgTlNEYXRhKiBhcmNoaXZlZERhdGEoW05T
QXJjaGl2ZXIgYXJjaGl2ZWREYXRhV2l0aFJvb3RPYmplY3Q6c3RyaW5nXSk7CisgICAgaWYgKCFh
cmNoaXZlZERhdGEpCisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpXZWJTdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgV2ViVUNoYXIqPihbYXJjaGl2ZWREYXRh
IGJ5dGVzXSksCisgICAgICAgIFthcmNoaXZlZERhdGEgbGVuZ3RoXSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88458</attachid>
            <date>2011-04-06 10:09:25 -0700</date>
            <delta_ts>2011-04-06 12:24:35 -0700</delta_ts>
            <desc>Patch v7 WebCore</desc>
            <filename>bug-54969-20110406130923.patch</filename>
            <type>text/plain</type>
            <size>20774</size>
            <attacher name="Robert Sesek">rsesek</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMwMzAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1ZWYwODdmMjcwOTk2ZDZm
MWE5YzAwM2Q0NTgyYWI1M2U3MmI3ZWJjLi4zYzc1YjViYmE2MjEwMWE5ODQzYjcwMzJjYmI2NGM0
NmQ0YTQxZTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDQtMDYgIFJvYmVy
dCBTZXNlayAgPHJzZXNla0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBjb2RlIGR1cGxpY2F0ZWQgYmV0d2VlbiB0aGUg
V2ViS2l0L21hYyBhbmQgV2ViS2l0MiBkb3duIHRvIFdlYkNvcmUgYmVjYXVzZSBDaHJvbWl1bSB3
aWxsIG5lZWQgaXQgdG9vCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01NDk2OQorCisgICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlvcjsgbm8gbmV3IHRl
c3RzLgorCisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEl0ZXJhdG9yOjpsb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZSk6IE5ldyBtZXRo
b2QgZnJvbSBkdXBsaWNhdGVkIGNvZGUgaW4gV2ViS2l0cworICAgICAgICAqIGVkaXRpbmcvVGV4
dEl0ZXJhdG9yLmg6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6cmFuZ2VGb3JQb2ludCk6IE5ldyBtZXRob2QgZnJvbSBkdXBsaWNhdGVkIGNvZGUg
aW4gV2ViS2l0cworCiAyMDExLTA0LTA2ICBBbmRlcnMgQmFra2VuICA8YWdiYWtrZW5AZ21haWwu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgppbmRleCA0OWI0MzA4Yzk5NjA5Njc5NTAyNDJhZjZmNmM5MTAxNGU2NzQxZjM5Li44NzlkYTI1
ZGU2ZjBkZjFmMWMzNTNjYjc5M2FhMmFmNDczMDdkNmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpA
QCAtMjk4LDYgKzI5OCw3IEBAIF9fWk43V2ViQ29yZTEyU3BlbGxDaGVja2VyOGRpZENoZWNrRWlS
S04zV1RGNlZlY3RvcklOU18xOFRleHRDaGVja2luZ1Jlc3VsdEVMbTBFCiBfX1pON1dlYkNvcmUx
MlRleHRFbmNvZGluZ0MxRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0
b3IxMXJhbmdlTGVuZ3RoRVBLTlNfNVJhbmdlRWIKIF9fWk43V2ViQ29yZTEyVGV4dEl0ZXJhdG9y
MjZyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aEVQTlNfN0VsZW1lbnRFaWliCitfX1pON1dlYkNv
cmUxMlRleHRJdGVyYXRvcjI2bG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2VFUEtOU181UmFuZ2VF
Um1TNF8KIF9fWk43V2ViQ29yZTEyVGV4dEl0ZXJhdG9yN2FkdmFuY2VFdgogX19aTjdXZWJDb3Jl
MTJUZXh0SXRlcmF0b3I4c3VicmFuZ2VFUE5TXzVSYW5nZUVpaQogX19aTjdXZWJDb3JlMTJUZXh0
SXRlcmF0b3JDMUVQS05TXzVSYW5nZUVOU18yMFRleHRJdGVyYXRvckJlaGF2aW9yRQpAQCAtNzIw
LDYgKzcyMSw3IEBAIF9fWk43V2ViQ29yZTVGcmFtZTZjcmVhdGVFUE5TXzRQYWdlRVBOU18yMUhU
TUxGcmFtZU93bmVyRWxlbWVudEVQTlNfMTdGcmFtZUxvYWRlCiBfX1pON1dlYkNvcmU1RnJhbWU3
c2V0Vmlld0VOM1dURjEwUGFzc1JlZlB0cklOU185RnJhbWVWaWV3RUVFCiBfX1pON1dlYkNvcmU1
RnJhbWU5bm9kZUltYWdlRVBOU180Tm9kZUUKIF9fWk43V2ViQ29yZTVGcmFtZTlzY2FsZVBhZ2VF
ZlJLTlNfOEludFBvaW50RQorX19aTjdXZWJDb3JlNUZyYW1lMTNyYW5nZUZvclBvaW50RVJLTlNf
OEludFBvaW50RQogX19aTjdXZWJDb3JlNUZyYW1lRDFFdgogX19aTjdXZWJDb3JlNUltYWdlMTJz
dXBwb3J0c1R5cGVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU1SW1hZ2UyMGxvYWRQbGF0
Zm9ybVJlc291cmNlRVBLYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmlu
ZGV4IDFiMjVjODc3MWI4MjVhYmU4ODQ4MjY4ZmU1OWYwYjBhNmVhMWYwOGEuLjZhMjRkMjczNmZj
ZGQ0NTM3ZGFmM2M5ZGVjMTRjM2EzZmVjNTc0ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJUZXh0SXRlcmF0b3Iu
aCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgImh0bWxl
ZGl0aW5nLmgiCkBAIC0yMzY5LDYgKzIzNzAsMzggQEAgUGFzc1JlZlB0cjxSYW5nZT4gVGV4dEl0
ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChFbGVtZW50KiBzY29wZSwgaW50IHIK
ICAgICByZXR1cm4gcmVzdWx0UmFuZ2UucmVsZWFzZSgpOwogfQogCitib29sIFRleHRJdGVyYXRv
cjo6bG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlLCBzaXplX3Qm
IGxvY2F0aW9uLCBzaXplX3QmIGxlbmd0aCkKK3sKKyAgICBsb2NhdGlvbiA9IG5vdEZvdW5kOwor
ICAgIGxlbmd0aCA9IDA7CisKKyAgICBpZiAoIXJhbmdlLT5zdGFydENvbnRhaW5lcigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gcmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1l
bnQoKTsKKyAgICBFbGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290
IDogcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CisKKyAgICAvLyBU
aGUgY3JpdGljYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgb25seSBnZXRzIGNhbGxlZCB3aXRo
IHJhbmdlcyB0aGF0CisgICAgLy8gY29uY2VudHJhdGUgb24gYSBnaXZlbiBhcmVhIGNvbnRhaW5p
bmcgdGhlIHNlbGVjdGlvbiByb290LiBUaGlzIGlzIGRvbmUKKyAgICAvLyBiZWNhdXNlIG9mIHRl
eHQgZmllbGRzIGFuZCB0ZXh0YXJlYXMuIFRoZSBET00gZm9yIHRob3NlIGlzIG5vdAorICAgIC8v
IGRpcmVjdGx5IGluIHRoZSBkb2N1bWVudCBET00sIHNvIGVuc3VyZSB0aGF0IHRoZSByYW5nZSBk
b2VzIG5vdCBjcm9zcyBhCisgICAgLy8gYm91bmRhcnkgb2Ygb25lIG9mIHRob3NlLgorICAgIGlm
IChyYW5nZS0+c3RhcnRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCktPmlzRGVzY2VuZGFudE9mKHNjb3BlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gc2NvcGUgJiYgIXJhbmdlLT5lbmRDb250YWlu
ZXIoKS0+aXNEZXNjZW5kYW50T2Yoc2NvcGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBSZWZQdHI8UmFuZ2U+IHRlc3RSYW5nZSA9IFJhbmdlOjpjcmVhdGUoc2NvcGUtPmRvY3VtZW50
KCksIHNjb3BlLCAwLCByYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0
KCkpOworICAgIEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOwor
ICAgIGxvY2F0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkp
OworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgdGVzdFJhbmdlLT5zZXRFbmQocmFu
Z2UtPmVuZENvbnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCksIGVjKTsKKyAgICBBU1NFUlQo
dGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKKyAgICBsZW5ndGggPSBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5nZXQoKSkgLSBsb2NhdGlvbjsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogLy8gLS0tLS0tLS0KICAgICAKIFVDaGFyKiBwbGFpblRleHRUb01h
bGxvY0FsbG9jYXRlZEJ1ZmZlcihjb25zdCBSYW5nZSogciwgdW5zaWduZWQmIGJ1ZmZlckxlbmd0
aCwgYm9vbCBpc0Rpc3BsYXlTdHJpbmcsIFRleHRJdGVyYXRvckJlaGF2aW9yIGRlZmF1bHRCZWhh
dmlvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCmluZGV4IDBmMWE2ZmQwM2Ix
N2Y3YTViZTljNDkwMjUxM2ExNTA3ODkzOTBiM2UuLmM3MWYzNDY2NTdlZTU0MTNiNTgyNWI1Y2Uz
MGRjMzIwYTI4YTE5NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaApAQCAt
OTgsNiArOTgsNyBAQCBwdWJsaWM6CiAgICAgIAogICAgIHN0YXRpYyBpbnQgcmFuZ2VMZW5ndGgo
Y29uc3QgUmFuZ2UqLCBib29sIHNwYWNlc0ZvclJlcGxhY2VkRWxlbWVudHMgPSBmYWxzZSk7CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKEVs
ZW1lbnQqIHNjb3BlLCBpbnQgcmFuZ2VMb2NhdGlvbiwgaW50IHJhbmdlTGVuZ3RoLCBib29sIHNw
YWNlc0ZvclJlcGxhY2VkRWxlbWVudHMgPSBmYWxzZSk7CisgICAgc3RhdGljIGJvb2wgbG9jYXRp
b25BbmRMZW5ndGhGcm9tUmFuZ2UoY29uc3QgUmFuZ2UqLCBzaXplX3QmIGxvY2F0aW9uLCBzaXpl
X3QmIGxlbmd0aCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IHN1YnJhbmdlKFJhbmdl
KiBlbnRpcmVSYW5nZSwgaW50IGNoYXJhY3Rlck9mZnNldCwgaW50IGNoYXJhY3RlckNvdW50KTsK
ICAgICAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDQyOWMwMzU1NjgxZWQ4YWUy
YzExYzg1OGRjOGFiNDQwYWMxYTRiOWQuLmNhOTdiOWI0NDYyNzMxOTVjZDYyNjlmNmVhY2NjZjIy
YTQwN2JmMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC04MDQsNiArODA0LDMxIEBAIERvY3Vt
ZW50KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKICAgICBy
ZXR1cm4gcmVzdWx0LmlubmVyTm9kZSgpID8gcmVzdWx0LmlubmVyTm9kZSgpLT5kb2N1bWVudCgp
IDogMDsKIH0KIAorUGFzc1JlZlB0cjxSYW5nZT4gRnJhbWU6OnJhbmdlRm9yUG9pbnQoY29uc3Qg
SW50UG9pbnQmIGZyYW1lUG9pbnQpCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0g
dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7CisgICAgaWYgKHBvc2l0aW9uLmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91
cyA9IHBvc2l0aW9uLnByZXZpb3VzKCk7CisgICAgaWYgKHByZXZpb3VzLmlzTm90TnVsbCgpKSB7
CisgICAgICAgIFJlZlB0cjxSYW5nZT4gcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5n
ZShwcmV2aW91cywgcG9zaXRpb24pOworICAgICAgICBJbnRSZWN0IHJlY3QgPSBlZGl0b3IoKS0+
Zmlyc3RSZWN0Rm9yUmFuZ2UocHJldmlvdXNDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CisgICAgICAg
IGlmIChyZWN0LmNvbnRhaW5zKGZyYW1lUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIHByZXZp
b3VzQ2hhcmFjdGVyUmFuZ2UucmVsZWFzZSgpOworICAgIH0KKworICAgIFZpc2libGVQb3NpdGlv
biBuZXh0ID0gcG9zaXRpb24ubmV4dCgpOworICAgIGlmIChuZXh0LmlzTm90TnVsbCgpKSB7Cisg
ICAgICAgIFJlZlB0cjxSYW5nZT4gbmV4dENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBvc2l0
aW9uLCBuZXh0KTsKKyAgICAgICAgSW50UmVjdCByZWN0ID0gZWRpdG9yKCktPmZpcnN0UmVjdEZv
clJhbmdlKG5leHRDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CisgICAgICAgIGlmIChyZWN0LmNvbnRh
aW5zKGZyYW1lUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIG5leHRDaGFyYWN0ZXJSYW5nZS5y
ZWxlYXNlKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgRnJhbWU6OmNyZWF0
ZVZpZXcoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBib29sIHRyYW5zcGFyZW50LAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBmaXhlZExheW91dFNpemUsIGJvb2wgdXNl
Rml4ZWRMYXlvdXQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKaW5kZXggZjIyZmNiODYxZmE4MzU2ZmI4YTRhMWQ0
NjhhMmUxOTgwNWM4MGNjNC4uMDU4MDVjZjFlMmU0OGRkNDNiZWY2ZjAyYWEzYTQ2ZDJmNjkzNDBm
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuaApAQCAtMTg0LDYgKzE4NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoY29u
c3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpOwogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnRBdFBv
aW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7CisgICAgICAgIFBhc3NSZWZQdHI8UmFu
Z2U+IHJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpOwogCiAgICAgICAg
IFN0cmluZyBzZWFyY2hGb3JMYWJlbHNBYm92ZUNlbGwoUmVndWxhckV4cHJlc3Npb24qLCBIVE1M
VGFibGVDZWxsRWxlbWVudCosIHNpemVfdCogcmVzdWx0RGlzdGFuY2VGcm9tU3RhcnRPZkNlbGwp
OwogICAgICAgICBTdHJpbmcgc2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudChjb25zdCBWZWN0
b3I8U3RyaW5nPiYgbGFiZWxzLCBFbGVtZW50Kiwgc2l6ZV90KiByZXN1bHREaXN0YW5jZSwgYm9v
bCogcmVzdWx0SXNJbkNlbGxBYm92ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggNTA5NTllMjIxNzgw
ZWJiZThiMDkyZTYxYTdiOTk3ZmZjOTg1Yjk5My4uYjAxZGY3MjE5ZWZiY2FjODUzMTFmMGYyZTg2
MDgwZmM5OGU4NjViZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTA0
LTA2ICBSb2JlcnQgU2VzZWsgIDxyc2VzZWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgY29kZSBkdXBsaWNhdGVkIGJl
dHdlZW4gdGhlIFdlYktpdC9tYWMgYW5kIFdlYktpdDIgZG93biB0byBXZWJDb3JlIGJlY2F1c2Ug
Q2hyb21pdW0gd2lsbCBuZWVkIGl0IHRvbworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NjkKKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06
CisgICAgICAgICgtW1dlYkZyYW1lIF9jb252ZXJ0VG9OU1JhbmdlOl0pOiBNb3ZlZCBkdXBsaWNh
dGVkIGNvZGUgdG8gV2ViQ29yZQorICAgICAgICAoLVtXZWJGcmFtZSBfY2hhcmFjdGVyUmFuZ2VB
dFBvaW50Ol0pOiBNb3ZlZCBkdXBsaWNhdGVkIGNvZGUgdG8gV2ViQ29yZQorCiAyMDExLTA0LTA1
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXgg
NTg0YjA5ZWQ2MzZhNzhjNWZiMGQ3ZjQ3N2FkMjk3YzFjOTEzYzVhYy4uYWI4YzM0ZGI3Yjc3NDhj
Nzg5NzZkOGQ2NzQxNjAxZTQ2ZjZjNmQ3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCkBAIC02NzAsMzAgKzY3MCwxNSBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2Ug
KmRhdGFTb3VyY2UoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIAogLSAoTlNSYW5nZSlfY29udmVy
dFRvTlNSYW5nZTooUmFuZ2UgKilyYW5nZQogewotICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5z
dGFydENvbnRhaW5lcigpKQorICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBOU01ha2VS
YW5nZShOU05vdEZvdW5kLCAwKTsKIAotICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBfcHJp
dmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAg
IEVsZW1lbnQqIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICAKLSAgICAv
LyBNb3VzZSBldmVudHMgbWF5IGNhdXNlIFRTTSB0byBhdHRlbXB0IHRvIGNyZWF0ZSBhbiBOU1Jh
bmdlIGZvciBhIHBvcnRpb24gb2YgdGhlIHZpZXcKLSAgICAvLyB0aGF0IGlzIG5vdCBpbnNpZGUg
dGhlIGN1cnJlbnQgZWRpdGFibGUgcmVnaW9uLiAgVGhlc2UgY2hlY2tzIGVuc3VyZSB3ZSBkb24n
dCBwcm9kdWNlCi0gICAgLy8gcG90ZW50aWFsbHkgaW52YWxpZCBkYXRhIHdoZW4gcmVzcG9uZGlu
ZyB0byBzdWNoIHJlcXVlc3RzLgotICAgIGlmIChyYW5nZS0+c3RhcnRDb250YWluZXIoKSAhPSBz
Y29wZSAmJiAhcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmlzRGVzY2VuZGFudE9mKHNjb3BlKSkK
LSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAgIGlmIChyYW5n
ZS0+ZW5kQ29udGFpbmVyKCkgIT0gc2NvcGUgJiYgIXJhbmdlLT5lbmRDb250YWluZXIoKS0+aXNE
ZXNjZW5kYW50T2Yoc2NvcGUpKQorICAgIHNpemVfdCBsb2NhdGlvbjsKKyAgICBzaXplX3QgbGVu
Z3RoOworICAgIGlmICghVGV4dEl0ZXJhdG9yOjpsb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShy
YW5nZSwgbG9jYXRpb24sIGxlbmd0aCkpCiAgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05v
dEZvdW5kLCAwKTsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHRlc3RSYW5nZSA9IFJhbmdlOjpj
cmVhdGUoc2NvcGUtPmRvY3VtZW50KCksIHNjb3BlLCAwLCByYW5nZS0+c3RhcnRDb250YWluZXIo
KSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwotICAgIEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCkgPT0gc2NvcGUpOwotICAgIGludCBzdGFydFBvc2l0aW9uID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYzsK
LSAgICB0ZXN0UmFuZ2UtPnNldEVuZChyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRP
ZmZzZXQoKSwgZWMpOwotICAgIEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0g
c2NvcGUpOwotICAgIGludCBlbmRQb3NpdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
dGVzdFJhbmdlLmdldCgpKTsKIAotICAgIHJldHVybiBOU01ha2VSYW5nZShzdGFydFBvc2l0aW9u
LCBlbmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24pOworICAgIHJldHVybiBOU01ha2VSYW5nZShs
b2NhdGlvbiwgbGVuZ3RoKTsKIH0KIAogLSAoUGFzc1JlZlB0cjxSYW5nZT4pX2NvbnZlcnRUb0RP
TVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UKQEAgLTgyMCwyNyArODA1LDcgQEAgc3RhdGljIGlubGlu
ZSBXZWJEYXRhU291cmNlICpkYXRhU291cmNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAKIC0g
KERPTVJhbmdlICopX2NoYXJhY3RlclJhbmdlQXRQb2ludDooTlNQb2ludClwb2ludAogewotICAg
IFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2lu
dDpwb2ludF07Ci0gICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHBvc2l0aW9uLnByZXZpb3Vz
KCk7Ci0gICAgaWYgKHByZXZpb3VzLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIERPTVJhbmdlICpw
cmV2aW91c0NoYXJhY3RlclJhbmdlID0ga2l0KG1ha2VSYW5nZShwcmV2aW91cywgcG9zaXRpb24p
LmdldCgpKTsKLSAgICAgICAgTlNSZWN0IHJlY3QgPSBbc2VsZiBfZmlyc3RSZWN0Rm9yRE9NUmFu
Z2U6cHJldmlvdXNDaGFyYWN0ZXJSYW5nZV07Ci0gICAgICAgIGlmIChOU1BvaW50SW5SZWN0KHBv
aW50LCByZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBwcmV2aW91c0NoYXJhY3RlclJhbmdlOwot
ICAgIH0KLQotICAgIFZpc2libGVQb3NpdGlvbiBuZXh0ID0gcG9zaXRpb24ubmV4dCgpOwotICAg
IGlmIChuZXh0LmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIERPTVJhbmdlICpuZXh0Q2hhcmFjdGVy
UmFuZ2UgPSBraXQobWFrZVJhbmdlKHBvc2l0aW9uLCBuZXh0KS5nZXQoKSk7Ci0gICAgICAgIE5T
UmVjdCByZWN0ID0gW3NlbGYgX2ZpcnN0UmVjdEZvckRPTVJhbmdlOm5leHRDaGFyYWN0ZXJSYW5n
ZV07Ci0gICAgICAgIGlmIChOU1BvaW50SW5SZWN0KHBvaW50LCByZWN0KSkKLSAgICAgICAgICAg
IHJldHVybiBuZXh0Q2hhcmFjdGVyUmFuZ2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuaWw7
CisgICAgcmV0dXJuIGtpdChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5yYW5nZUZvclBvaW50KEludFBv
aW50KHBvaW50KSkuZ2V0KCkpOwogfQogCiAtIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX3R5
cGluZ1N0eWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZjcwYjIxNTVjNjhkN2YwOGY1NzcxNDE1MGM3MmZmY2Zk
MWNlZGRlOS4uNDczN2Q5YjQzZGYyZDdkOWJkZjNmZmZkNjUwMzlmYTA5Y2Y0MWE2NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTA0LTA2ICBSb2JlcnQgU2VzZWsgIDxyc2VzZWtA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE1vdmUgY29kZSBkdXBsaWNhdGVkIGJldHdlZW4gdGhlIFdlYktpdC9tYWMgYW5kIFdl
YktpdDIgZG93biB0byBXZWJDb3JlIGJlY2F1c2UgQ2hyb21pdW0gd2lsbCBuZWVkIGl0IHRvbwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NjkKKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0
aW9uKTogTW92ZWQgZHVwbGljYXRlZCBjb2RlIHRvIFdlYkNvcmUKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06IE1vdmVkIGR1cGxpY2F0ZWQgY29kZSB0byBX
ZWJDb3JlCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldE1hcmtlZFJhbmdlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0U2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOgorCiAyMDExLTA0LTA1ICBD
aGFuZyBTaHUgIDxjc2h1QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKaW5kZXggZmZmNzY3ZjFlMWY5NWM5ODMwNmVj
OWVlNzYzY2FjMWE3ODc0MzA3My4uMWI4NjQwOTNlZTdmNjBkNTlmYzcxNjc1MjZhNzVhN2FhY2M0
OTM1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcApAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Rl
eHRJdGVyYXRvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0
b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0xOTYsNyArMTk3LDE1IEBAIHZv
aWQgV2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCkKICAgICBzZWxl
Y3Rpb25TdGF0ZS5pc0luUGFzc3dvcmRGaWVsZCA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNJblBh
c3N3b3JkRmllbGQoKTsKICAgICBzZWxlY3Rpb25TdGF0ZS5oYXNDb21wb3NpdGlvbiA9IGZyYW1l
LT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKTsKIAotICAgIFdlYlBhZ2U6OmdldExvY2F0aW9u
QW5kTGVuZ3RoRnJvbVJhbmdlKGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSwgc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZVN0YXJ0LCBzZWxlY3Rpb25TdGF0
ZS5zZWxlY3RlZFJhbmdlTGVuZ3RoKTsKKyAgICBSYW5nZSogcmFuZ2UgPSBmcmFtZS0+c2VsZWN0
aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCk7CisgICAgaWYgKHJhbmdlKSB7CisgICAg
ICAgIHNpemVfdCBsb2NhdGlvbjsKKyAgICAgICAgc2l6ZV90IGxlbmd0aDsKKyAgICAgICAgaWYg
KCFUZXh0SXRlcmF0b3I6OmxvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKHJhbmdlLCBsb2NhdGlv
biwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc2VsZWN0aW9uU3RhdGUu
c2VsZWN0ZWRSYW5nZVN0YXJ0ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxvY2F0aW9uKTsKKyAg
ICAgICAgc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZUxlbmd0aCA9IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihsZW5ndGgpOworICAgIH0KIAogICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpTZWxlY3Rpb25TdGF0ZUNoYW5nZWQoc2VsZWN0aW9uU3RhdGUpKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGUwMmU3
MTVjMDJkZTVhNjUwNjA0MGJkZDlmYjJjNDFhMTBiMzEwMTIuLjllM2E4NTQ2YTA4YTNmOTY3NWNk
OTU4YjExMzA4ZWY0MTFhNWM0YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTgyNCwzNSArODI0LDYgQEAgV2ViQ29udGV4dE1lbnUqIFdl
YlBhZ2U6OmNvbnRleHRNZW51KCkKICAgICByZXR1cm4gbV9jb250ZXh0TWVudS5nZXQoKTsKIH0K
IAotdm9pZCBXZWJQYWdlOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShSYW5nZSogcmFu
Z2UsIHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCkKLXsKLSAgICBsb2NhdGlv
biA9IG5vdEZvdW5kOwotICAgIGxlbmd0aCA9IDA7Ci0KLSAgICBpZiAoIXJhbmdlIHx8ICFyYW5n
ZS0+c3RhcnRDb250YWluZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRWxlbWVudCogc2Vs
ZWN0aW9uUm9vdCA9IHJhbmdlLT5vd25lckRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigp
LT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgRWxlbWVudCogc2NvcGUgPSBzZWxlY3Rpb25S
b290ID8gc2VsZWN0aW9uUm9vdCA6IHJhbmdlLT5vd25lckRvY3VtZW50KCktPmRvY3VtZW50RWxl
bWVudCgpOwotICAgIAotICAgIC8vIE1vdXNlIGV2ZW50cyBtYXkgY2F1c2UgVFNNIHRvIGF0dGVt
cHQgdG8gY3JlYXRlIGFuIE5TUmFuZ2UgZm9yIGEgcG9ydGlvbiBvZiB0aGUgdmlldwotICAgIC8v
IHRoYXQgaXMgbm90IGluc2lkZSB0aGUgY3VycmVudCBlZGl0YWJsZSByZWdpb24uICBUaGVzZSBj
aGVja3MgZW5zdXJlIHdlIGRvbid0IHByb2R1Y2UKLSAgICAvLyBwb3RlbnRpYWxseSBpbnZhbGlk
IGRhdGEgd2hlbiByZXNwb25kaW5nIHRvIHN1Y2ggcmVxdWVzdHMuCi0gICAgaWYgKHJhbmdlLT5z
dGFydENvbnRhaW5lcigpICE9IHNjb3BlICYmICFyYW5nZS0+c3RhcnRDb250YWluZXIoKS0+aXNE
ZXNjZW5kYW50T2Yoc2NvcGUpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHJhbmdlLT5lbmRD
b250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPmVuZENvbnRhaW5lcigpLT5pc0Rlc2NlbmRh
bnRPZihzY29wZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxSYW5nZT4gdGVzdFJh
bmdlID0gUmFuZ2U6OmNyZWF0ZShzY29wZS0+ZG9jdW1lbnQoKSwgc2NvcGUsIDAsIHJhbmdlLT5z
dGFydENvbnRhaW5lcigpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSk7Ci0gICAgQVNTRVJUKHRlc3RS
YW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7Ci0gICAgbG9jYXRpb24gPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5nZXQoKSk7Ci0gICAgCi0gICAgRXhjZXB0aW9u
Q29kZSBlYzsKLSAgICB0ZXN0UmFuZ2UtPnNldEVuZChyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJh
bmdlLT5lbmRPZmZzZXQoKSwgZWMpOwotICAgIEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkgPT0gc2NvcGUpOwotICAgIGxlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
dGVzdFJhbmdlLmdldCgpKSAtIGxvY2F0aW9uOwotfQotCiAvLyBFdmVudHMgCiAKIHN0YXRpYyBj
b25zdCBXZWJFdmVudCogZ19jdXJyZW50RXZlbnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggYmFjZjcxZjk5Mjg1ZTllNGI0YjA1MWM1Nzc2
NzExZTMzZWJiZjhjMy4uYWViMThjNmU4NzdmZjk5ZTBjYWVlMzU2NGJhZGFkMzA5OGJmYTIyYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0zMDAs
OCArMzAwLDYgQEAgcHVibGljOgogCiAgICAgU2FuZGJveEV4dGVuc2lvblRyYWNrZXImIHNhbmRi
b3hFeHRlbnNpb25UcmFja2VyKCkgeyByZXR1cm4gbV9zYW5kYm94RXh0ZW5zaW9uVHJhY2tlcjsg
fQogCi0gICAgc3RhdGljIHZvaWQgZ2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoV2ViQ29y
ZTo6UmFuZ2UqLCB1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpOwotCiAjaWYg
UExBVEZPUk0oTUFDKQogICAgIHZvaWQgcmVnaXN0ZXJVSVByb2Nlc3NBY2Nlc3NpYmlsaXR5VG9r
ZW5zKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmIGVsZW1lblRva2VuLCBjb25zdCBDb3Jl
SVBDOjpEYXRhUmVmZXJlbmNlJiB3aW5kb3dUb2tlbik7CiAgICAgQWNjZXNzaWJpbGl0eVdlYlBh
Z2VPYmplY3QqIGFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCA5MDJhMDFh
NmIwNzE2ODE3Y2VmOGEyOWI0MTJlMzYyYWU0NDg0NzhlLi4zMmY0MWEyMzg4YmUxMTcxZjFiNzYw
MGE2NTM1NGM0OThkMTRjNTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0yNzYsOCArMjc2LDE0IEBAIHZvaWQgV2Vi
UGFnZTo6Z2V0TWFya2VkUmFuZ2UodWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3Ro
KQogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRP
ck1haW5GcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShmcmFtZS0+ZWRpdG9yKCktPmNvbXBvc2l0
aW9uUmFuZ2UoKS5nZXQoKSwgbG9jYXRpb24sIGxlbmd0aCk7CisKKyAgICBSYW5nZSogcmFuZ2Ug
PSBmcmFtZS0+ZWRpdG9yKCktPmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKTsKKyAgICBzaXplX3Qg
bG9jYXRpb25TaXplOworICAgIHNpemVfdCBsZW5ndGhTaXplOworICAgIGlmIChyYW5nZSAmJiBU
ZXh0SXRlcmF0b3I6OmxvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKHJhbmdlLCBsb2NhdGlvblNp
emUsIGxlbmd0aFNpemUpKSB7CisgICAgICAgIGxvY2F0aW9uID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihsZW5ndGhTaXplKTsKKyAgICB9CiB9CiAKIHZvaWQgV2ViUGFnZTo6Z2V0U2VsZWN0ZWRSYW5n
ZSh1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpCkBAIC0yODcsMzcgKzI5Mywx
MyBAQCB2b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGVkUmFuZ2UodWludDY0X3QmIGxvY2F0aW9uLCB1
aW50NjRfdCYgbGVuZ3RoKQogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShmcmFtZS0+c2Vs
ZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGxvY2F0aW9uLCBsZW5ndGgpOwot
fQotCi1zdGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gY2hhcmFjdGVyUmFuZ2VBdFBvc2l0aW9uRm9y
UG9pbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBjb25z
dCBJbnRQb2ludCYgcG9pbnQpCi17Ci0gICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAg
ICByZXR1cm4gMDsKIAotICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHBvc2l0aW9uLnBy
ZXZpb3VzKCk7Ci0gICAgaWYgKHByZXZpb3VzLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIFJlZlB0
cjxSYW5nZT4gcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwcmV2aW91cywgcG9z
aXRpb24pOwotICAgICAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZS0+ZWRpdG9yKCktPmZpcnN0UmVj
dEZvclJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgICAgICBpZiAocmVj
dC5jb250YWlucyhwb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gcHJldmlvdXNDaGFyYWN0ZXJS
YW5nZS5yZWxlYXNlKCk7CisgICAgc2l6ZV90IGxvY2F0aW9uU2l6ZTsKKyAgICBzaXplX3QgbGVu
Z3RoU2l6ZTsKKyAgICBpZiAoVGV4dEl0ZXJhdG9yOjpsb2NhdGlvbkFuZExlbmd0aEZyb21SYW5n
ZShmcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGxvY2F0aW9u
U2l6ZSwgbGVuZ3RoU2l6ZSkpIHsKKyAgICAgICAgbG9jYXRpb24gPSBzdGF0aWNfY2FzdDx1aW50
NjRfdD4obG9jYXRpb25TaXplKTsKKyAgICAgICAgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGxlbmd0aFNpemUpOwogICAgIH0KLSAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9
IHBvc2l0aW9uLm5leHQoKTsKLSAgICBpZiAobmV4dC5pc05vdE51bGwoKSkgewotICAgICAgICBS
ZWZQdHI8UmFuZ2U+IG5leHRDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwb3NpdGlvbiwgbmV4
dCk7Ci0gICAgICAgIEludFJlY3QgcmVjdCA9IGZyYW1lLT5lZGl0b3IoKS0+Zmlyc3RSZWN0Rm9y
UmFuZ2UobmV4dENoYXJhY3RlclJhbmdlLmdldCgpKTsKLSAgICAgICAgaWYgKHJlY3QuY29udGFp
bnMocG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIG5leHRDaGFyYWN0ZXJSYW5nZS5yZWxlYXNl
KCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0cjxS
YW5nZT4gY2hhcmFjdGVyUmFuZ2VBdFBvaW50KEZyYW1lKiBmcmFtZSwgY29uc3QgSW50UG9pbnQm
IHBvaW50KQotewotICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZUF0UG9zaXRpb25Gb3JQb2ludChm
cmFtZSwgZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KHBvaW50KSwgcG9pbnQpOwogfQog
CiB2b2lkIFdlYlBhZ2U6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnQoSW50UG9pbnQgcG9pbnQsIHVp
bnQ2NF90JiBpbmRleCkKQEAgLTMzMCwxMiArMzEyLDE0IEBAIHZvaWQgV2ViUGFnZTo6Y2hhcmFj
dGVySW5kZXhGb3JQb2ludChJbnRQb2ludCBwb2ludCwgdWludDY0X3QmIGluZGV4KQogICAgIEhp
dFRlc3RSZXN1bHQgcmVzdWx0ID0gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0
QXRQb2ludChwb2ludCwgZmFsc2UpOwogICAgIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVk
Tm9kZSgpID8gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgp
IDogbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAg
Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNoYXJhY3RlclJhbmdlQXRQb2ludChmcmFtZSwg
cmVzdWx0LnBvaW50KCkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZS0+cmFuZ2VG
b3JQb2ludChyZXN1bHQucG9pbnQoKSk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgdWludDY0X3QgbGVuZ3RoOwotICAgIGdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJh
bmdlKHJhbmdlLmdldCgpLCBpbmRleCwgbGVuZ3RoKTsKKyAgICBzaXplX3QgbG9jYXRpb247Cisg
ICAgc2l6ZV90IGxlbmd0aDsKKyAgICBpZiAoVGV4dEl0ZXJhdG9yOjpsb2NhdGlvbkFuZExlbmd0
aEZyb21SYW5nZShyYW5nZS5nZXQoKSwgbG9jYXRpb24sIGxlbmd0aCkpCisgICAgICAgIGluZGV4
ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxvY2F0aW9uKTsKIH0KIAogUGFzc1JlZlB0cjxSYW5n
ZT4gY29udmVydFRvUmFuZ2UoRnJhbWUqIGZyYW1lLCBOU1JhbmdlIG5zcmFuZ2UpCkBAIC00MjAs
MTIgKzQwNCwxMiBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2Nh
dGlvbihjb25zdCBGbG9hdFBvaW50JiBmbG9hdFBvaW50KQogICAgIGZyYW1lID0gcmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpID8gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVu
dCgpLT5mcmFtZSgpIDogbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZy
YW1lKCk7CiAKICAgICBJbnRQb2ludCB0cmFuc2xhdGVkUG9pbnQgPSBmcmFtZS0+dmlldygpLT53
aW5kb3dUb0NvbnRlbnRzKHBvaW50KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSBm
cmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQodHJhbnNsYXRlZFBvaW50KTsKIAogICAgIC8v
IERvbid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQu
Ci0gICAgaWYgKCFjaGFyYWN0ZXJSYW5nZUF0UG9zaXRpb25Gb3JQb2ludChmcmFtZSwgcG9zaXRp
b24sIHRyYW5zbGF0ZWRQb2ludCkpCisgICAgaWYgKCFmcmFtZS0+cmFuZ2VGb3JQb2ludCh0cmFu
c2xhdGVkUG9pbnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9z
aXRpb24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQodHJhbnNsYXRlZFBvaW50KTsK
ICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVy
KCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CiAgICAg
aWYgKHNob3VsZFVzZVNlbGVjdGlvbihwb3NpdGlvbiwgc2VsZWN0aW9uKSkgewogICAgICAgICBw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihEaWN0aW9uYXJ5UG9wdXBJbmZvOjpI
b3RLZXksIGZyYW1lLCBzZWxlY3Rpb24pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89084</attachid>
            <date>2011-04-11 14:09:36 -0700</date>
            <delta_ts>2011-04-26 09:07:07 -0700</delta_ts>
            <desc>Patch v7 Chromium</desc>
            <filename>bug-54969-20110411170934.patch</filename>
            <type>text/plain</type>
            <size>21132</size>
            <attacher name="Robert Sesek">rsesek</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODM0MzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
MjFjZjM5MjQwNzZkNDg1MTY3NTM4NmU2ODRiZWJjN2I3YjZmMjJmYS4uMWQ4M2IxNGY2Yjc0MGM3
YTI4MTQ2NGFlOTYzNWQxNWY3YTBjMzc1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyOSBAQAorMjAxMS0wNC0xMSAgUm9iZXJ0IFNlc2VrICA8cnNlc2VrQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Q2hyb21pdW1dIEltcGxlbWVudCBXZWJLaXQgbWV0aG9kcyB0byBhc3Npc3Qgd2l0aCBDb2NvYSBO
U1RleHRJbnB1dCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NjkKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAg
ICogcHVibGljL1dlYkZyYW1lLmg6CisgICAgICAgICogcHVibGljL1dlYldpZGdldC5oOgorICAg
ICAgICAqIHB1YmxpYy9tYWMvV2ViU3Vic3RyaW5nVXRpbC5oOiBBZGRlZC4KKyAgICAgICAgKiBz
cmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpmaXJz
dFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSk6IFJldHVybiB0aGUgcmVzdWx0IHJlY3QgaW4gd2luZG93
IGNvb3JkaW5hdGVzCisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Y2hhcmFjdGVySW5k
ZXhGb3JQb2ludCk6IE5ldyBtZXRob2Qgb24gV2ViRnJhbWUKKyAgICAgICAgKiBzcmMvV2ViRnJh
bWVJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpjb21wb3NpdGlvblJhbmdlKTogTmV3IG1ldGhvZCBv
biBXZWJXaWRnZXQ7IGVtcHR5IGltcGwKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1w
bDo6Y2FyZXRPclNlbGVjdGlvblJhbmdlKTogTmV3IG1ldGhvZCBvbiBXZWJXaWRnZXQ7IGVtcHR5
IGltcGwKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51SW1wbC5oOgorICAgICAgICAqIHNyYy9X
ZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wb3NpdGlv
blJhbmdlKTogTmV3IG1ldGhvZCBvbiBXZWJXaWRnZXQKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OmNhcmV0T3JTZWxlY3Rpb25SYW5nZSk6IE5ldyBtZXRob2Qgb24gV2ViV2lkZ2V0Cisg
ICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICogc3JjL21hYy9XZWJTdWJzdHJp
bmdVdGlsLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViU3Vic3RyaW5nVXRpbDo6YXR0
cmlidXRlZFN1YnN0cmluZ0luUmFuZ2UpOgorCiAyMDExLTA0LTEwICBLZW50IFRhbXVyYSAgPHRr
ZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIEZpeCBidWlsZCBlcnJvcnMg
b24gIldpbiBTaGFyZWQgQnVpbGRlciAoZGJnKSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApp
bmRleCA5NGUxYjQ5OGVmZmJkMjk4NDExY2NhNzRjOTk5YWQyNmZiZDU3NWIwLi42NjE4MjU5ZGUz
OTgyNWRlYmJlMTE5YjU4YzllYTE4YjUxMTI2OWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCkBAIC05Niw2ICs5Niw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9tYWMvV2ViSW5w
dXRFdmVudEZhY3RvcnkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9tYWMvV2ViU2FuZGJv
eFN1cHBvcnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9tYWMvV2ViU2NyZWVuSW5mb0Zh
Y3RvcnkuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9tYWMvV2ViU3Vic3RyaW5nVXRpbC5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL21hYy9XZWJUaGVtZUVuZ2luZS5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL1dlYkFjY2Vzc2liaWxpdHlDYWNoZS5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24uaCcsCkBAIC0zODMsNiAr
Mzg0LDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL3gxMS9XZWJTY3JlZW5JbmZvRmFjdG9yeS5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvbWFjL1dlYklucHV0RXZlbnRGYWN0b3J5Lm1tJywK
ICAgICAgICAgICAgICAgICAnc3JjL21hYy9XZWJTY3JlZW5JbmZvRmFjdG9yeS5tbScsCisgICAg
ICAgICAgICAgICAgJ3NyYy9tYWMvV2ViU3Vic3RyaW5nVXRpbC5tbScsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvTG9jYWxpemVkU3RyaW5ncy5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvTWVkaWFQbGF5
ZXJQcml2YXRlQ2hyb21pdW0uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkZyYW1lLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJG
cmFtZS5oCmluZGV4IDFkNGI2YTI4ODkyMjFkZjJmNDUwNjBlZThiZjNlMzc4MmI2NzU2MzIuLjYy
NzdjNTU2ODNkNGRiNTkzZDFkMjY5YmQyYzU1NDYzOGNlMjAzOWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaApAQCAtMzg4LDggKzM4OCwxNSBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIFdlYlJhbmdlIG1hcmtlZFJhbmdlKCkgY29uc3QgPSAwOwogCisgICAgLy8g
UmV0dXJucyB0aGUgZnJhbWUgcmVjdGFuZ2xlIGluIHdpbmRvdyBjb29yZGluYXRlIHNwYWNlIG9m
IHRoZSBnaXZlbiB0ZXh0CisgICAgLy8gcmFuZ2UuCiAgICAgdmlydHVhbCBib29sIGZpcnN0UmVj
dEZvckNoYXJhY3RlclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIFdl
YlJlY3QmKSBjb25zdCA9IDA7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiBhIGNoYXJh
Y3RlciBpbiB0aGUgRnJhbWUncyB0ZXh0IHN0cmVhbSBhdCB0aGUgZ2l2ZW4KKyAgICAvLyBwb2lu
dC4gVGhlIHBvaW50IGlzIGluIHRoZSB3aW5kb3cgY29vcmRpbmF0ZSBzcGFjZS4gV2lsbCByZXR1
cm4KKyAgICAvLyBXVEY6Om5vdEZvdW5kIGlmIHRoZSBwb2ludCBpcyBpbnZhbGlkLgorICAgIHZp
cnR1YWwgc2l6ZV90IGNoYXJhY3RlckluZGV4Rm9yUG9pbnQoY29uc3QgV2ViUG9pbnQmKSBjb25z
dCA9IDA7CisKICAgICAvLyBTdXBwb3J0cyBjb21tYW5kcyBsaWtlIFVuZG8sIFJlZG8sIEN1dCwg
Q29weSwgUGFzdGUsIFNlbGVjdEFsbCwKICAgICAvLyBVbnNlbGVjdCwgZXRjLiBTZWUgRWRpdG9y
Q29tbWFuZC5jcHAgZm9yIHRoZSBmdWxsIGxpc3Qgb2Ygc3VwcG9ydGVkCiAgICAgLy8gY29tbWFu
ZHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCmluZGV4IGM2Nzc2
MmZhZDI5NjhkNGI1MzNjNGI0NGMyM2Q4NjU5MjhhMzBhOGMuLmJkOTViMjcwMDRiM2Y0NDZkZTIz
OGY1ZTI4ZmM5MGVkNTZhMGUwZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYldpZGdldC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YldpZGdldC5oCkBAIC00MCw2ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3Mg
V2ViSW5wdXRFdmVudDsKK2NsYXNzIFdlYlJhbmdlOwogY2xhc3MgV2ViU3RyaW5nOwogc3RydWN0
IFdlYlBvaW50Owogc3RydWN0IFdlYlJlY3Q7CkBAIC0xMjAsNiArMTIxLDExIEBAIHB1YmxpYzoK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gb25nb2luZyBjb21wb3NpdGlvbiBv
ciB0aGUgdGV4dCBpcyBpbnNlcnRlZC4KICAgICB2aXJ0dWFsIGJvb2wgY29uZmlybUNvbXBvc2l0
aW9uKGNvbnN0IFdlYlN0cmluZyYgdGV4dCkgPSAwOwogCisgICAgLy8gRmV0Y2hlcyB0aGUgY2hh
cmFjdGVyIHJhbmdlIG9mIHRoZSBjdXJyZW50IGNvbXBvc2l0aW9uLCBhbHNvIGNhbGxlZCB0aGUK
KyAgICAvLyAibWFya2VkIHJhbmdlLiIgUmV0dXJucyB0cnVlIGFuZCBmaWxscyB0aGUgb3V0LXBh
cmFtdGVycyBvbiBzdWNjZXNzOworICAgIC8vIHJldHVybnMgZmFsc2Ugb24gZmFpbHVyZS4KKyAg
ICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRpb25SYW5nZShzaXplX3QqIGxvY2F0aW9uLCBzaXplX3Qq
IGxlbmd0aCkgPSAwOworCiAgICAgLy8gUmV0dXJucyB0aGUgY3VycmVudCB0ZXh0IGlucHV0IHR5
cGUgb2YgdGhpcyBXZWJXaWRnZXQuCiAgICAgdmlydHVhbCBXZWJUZXh0SW5wdXRUeXBlIHRleHRJ
bnB1dFR5cGUoKSA9IDA7CiAKQEAgLTEzNiw2ICsxNDIsMTIgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgLy8gRmV0Y2ggdGhlIGN1cnJlbnQgc2VsZWN0aW9u
IHJhbmdlIG9mIHRoaXMgV2ViV2lkZ2V0LiBJZiB0aGVyZSBpcyBubworICAgIC8vIHNlbGVjdGlv
biwgaXQgd2lsbCBvdXRwdXQgYSAwLWxlbmd0aCByYW5nZSB3aXRoIHRoZSBsb2NhdGlvbiBhdCB0
aGUKKyAgICAvLyBjYXJldC4gUmV0dXJucyB0cnVlIGFuZCBmaWxscyB0aGUgb3V0LXBhcmFtdGVy
cyBvbiBzdWNjZXNzOyByZXR1cm5zIGZhbHNlCisgICAgLy8gb24gZmFpbHVyZS4KKyAgICB2aXJ0
dWFsIGJvb2wgY2FyZXRPclNlbGVjdGlvblJhbmdlKHNpemVfdCogbG9jYXRpb24sIHNpemVfdCog
bGVuZ3RoKSA9IDA7CisKICAgICAvLyBDaGFuZ2VzIHRoZSB0ZXh0IGRpcmVjdGlvbiBvZiB0aGUg
c2VsZWN0ZWQgaW5wdXQgbm9kZS4KICAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dERpcmVjdGlvbihX
ZWJUZXh0RGlyZWN0aW9uKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL21hYy9XZWJTdWJzdHJpbmdVdGlsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9tYWMvV2ViU3Vic3RyaW5nVXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFkMTQ2MTBkNDBhNjVk
ZTljMmQ5ZDcxZjJjYTRhMjkxOTFlZjViMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9tYWMvV2ViU3Vic3RyaW5nVXRpbC5oCkBAIC0wLDAgKzEsNTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYlN1YnN0cmluZ1V0aWxfaAorI2RlZmluZSBXZWJTdWJzdHJpbmdVdGlsX2gK
KworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJGcmFtZTsKK30KKworI2lmIF9fT0JKQ19f
CitAY2xhc3MgTlNBdHRyaWJ1dGVkU3RyaW5nOworI2Vsc2UKK2NsYXNzIE5TQXR0cmlidXRlZFN0
cmluZzsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU3Vic3RyaW5n
VXRpbCB7CitwdWJsaWM6CisgICAgLy8gUmV0dXJucyBhbiBhdXRvcmVsZWFzZWQgTlNBdHRyaWJ1
dGVkU3RyaW5nIHRoYXQgaXMgYSBzdWJzdHJpbmcgb2YgdGhlCisgICAgLy8gRnJhbWUgYXQgdGhl
IGdpdmVuIHJhbmdlLCBvciBuaWwgb24gZXJyb3IuCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgTlNB
dHRyaWJ1dGVkU3RyaW5nKiBhdHRyaWJ1dGVkU3Vic3RyaW5nSW5SYW5nZShXZWJGcmFtZSosCisg
ICAgICAgIHNpemVfdCBsb2NhdGlvbiwKKyAgICAgICAgc2l6ZV90IGxlbmd0aCk7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRnJhbWVJbXBsLmNwcAppbmRleCBlOTA3NTAzZGY4MWM0MWYyYTNhOWQ2ZTNmNzZhMTgx
NTkzOTg1YWYzLi5iNmVjNWNmMGIxNzM0NjhhM2M3NmQ1ZDdhNzM0MWE5N2E1ZjdkNWNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAgLTg1LDEyICs4
NSwxMiBAQAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
IkVkaXRvci5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkZvY3VzQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkZvcm1TdGF0ZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJl
cXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNp
bmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgpAQCAtOTksNiArOTksNyBAQAogI2lu
Y2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIkhpc3RvcnlJdGVtLmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAicGFp
bnRpbmcvR3JhcGhpY3NDb250ZXh0QnVpbGRlci5oIgpAQCAtMTE0NiwxMSArMTE0NywzMCBAQCBi
b29sIFdlYkZyYW1lSW1wbDo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodW5zaWduZWQgbG9j
YXRpb24sIHVuc2lnbmVkIGxlbmd0aAogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBJbnRSZWN0IGludFJlY3QgPSBmcmFtZSgpLT5lZGl0b3IoKS0+Zmlyc3RSZWN0
Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpOwotICAgIHJlY3QgPSBXZWJSZWN0KGludFJlY3QueCgpLCBp
bnRSZWN0LnkoKSwgaW50UmVjdC53aWR0aCgpLCBpbnRSZWN0LmhlaWdodCgpKTsKKyAgICByZWN0
ID0gV2ViUmVjdChpbnRSZWN0KTsKKyAgICAvLyBXaGVuIGluc2lkZSBhbiB0ZXh0IGNvbnRyb2ws
IGRvbid0IGFkanVzdCB0aGUgcmFuZ2UuCisgICAgaWYgKCFzZWxlY3Rpb25Sb290KQorICAgICAg
ICByZWN0ID0gZnJhbWUoKS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJlY3QpOwogCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK3NpemVfdCBXZWJGcmFtZUltcGw6OmNoYXJhY3RlckluZGV4Rm9y
UG9pbnQoY29uc3QgV2ViUG9pbnQmIHdlYlBvaW50KSBjb25zdAoreworICAgIGlmICghZnJhbWUo
KSkKKyAgICAgICAgcmV0dXJuIG5vdEZvdW5kOworCisgICAgSW50UG9pbnQgcG9pbnQgPSBmcmFt
ZSgpLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMod2ViUG9pbnQpOworICAgIEhpdFRlc3RSZXN1
bHQgcmVzdWx0ID0gZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50
KHBvaW50LCBmYWxzZSk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lKCktPnJhbmdl
Rm9yUG9pbnQocmVzdWx0LnBvaW50KCkpOworICAgIGlmICghcmFuZ2UuZ2V0KCkpCisgICAgICAg
IHJldHVybiBub3RGb3VuZDsKKworICAgIHNpemVfdCBsb2NhdGlvbiwgbGVuZ3RoOworICAgIFRl
eHRJdGVyYXRvcjo6bG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UocmFuZ2UuZ2V0KCksIGxvY2F0
aW9uLCBsZW5ndGgpOworICAgIHJldHVybiBsb2NhdGlvbjsKK30KKwogYm9vbCBXZWJGcmFtZUlt
cGw6OmV4ZWN1dGVDb21tYW5kKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkKIHsKICAgICBBU1NFUlQo
ZnJhbWUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFt
ZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCmluZGV4
IGE1MmIwZjc2ZGViOTM3NzY5NTM5MzRmYTNmMDc2OTljNGY0ZmI5OTEuLjA2MTYwZGZkZDZjNTY4
ZTg1MjA3ZjhiMGY3ODEwMjBjNGQzZDY1OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZyYW1lSW1wbC5oCkBAIC0xNDcsNiArMTQ3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBoYXNNYXJrZWRUZXh0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJSYW5nZSBtYXJrZWRS
YW5nZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5n
ZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBXZWJSZWN0JikgY29uc3Q7Cisg
ICAgdmlydHVhbCBzaXplX3QgY2hhcmFjdGVySW5kZXhGb3JQb2ludChjb25zdCBXZWJQb2ludCYp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBleGVjdXRlQ29tbWFuZChjb25zdCBXZWJTdHJpbmcm
KTsKICAgICB2aXJ0dWFsIGJvb2wgZXhlY3V0ZUNvbW1hbmQoY29uc3QgV2ViU3RyaW5nJiwgY29u
c3QgV2ViU3RyaW5nJiB2YWx1ZSk7CiAgICAgdmlydHVhbCBib29sIGlzQ29tbWFuZEVuYWJsZWQo
Y29uc3QgV2ViU3RyaW5nJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBvcHVwTWVudUltcGwuY3BwCmluZGV4IGI0ZDQyNDZjM2Y2MDEwYmNhZjUwMjFkNGNkOTY4
MWFiZmMzOTNkYjUuLjZhNjQxYTkxNDJiMjhkNjIyZjE5YWZjNzk0NmRlNGRiNDlkZjRhZTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCkBA
IC00Myw2ICs0Myw3IEBACiAKICNpbmNsdWRlICJXZWJJbnB1dEV2ZW50LmgiCiAjaW5jbHVkZSAi
V2ViSW5wdXRFdmVudENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJXZWJSYW5nZS5oIgogI2luY2x1
ZGUgIldlYlJlY3QuaCIKICNpbmNsdWRlICJXZWJXaWRnZXRDbGllbnQuaCIKIApAQCAtMjUyLDYg
KzI1MywxMyBAQCBib29sIFdlYlBvcHVwTWVudUltcGw6OmNvbmZpcm1Db21wb3NpdGlvbihjb25z
dCBXZWJTdHJpbmcmIHRleHQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIFdlYlBvcHVw
TWVudUltcGw6OmNvbXBvc2l0aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90KiBsZW5n
dGgpCit7CisgICAgKmxvY2F0aW9uID0gMDsKKyAgICAqbGVuZ3RoID0gMDsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKIFdlYlRleHRJbnB1dFR5cGUgV2ViUG9wdXBNZW51SW1wbDo6dGV4dElucHV0
VHlwZSgpCiB7CiAgICAgcmV0dXJuIFdlYlRleHRJbnB1dFR5cGVOb25lOwpAQCAtMjYyLDYgKzI3
MCwxMyBAQCBXZWJSZWN0IFdlYlBvcHVwTWVudUltcGw6OmNhcmV0T3JTZWxlY3Rpb25Cb3VuZHMo
KQogICAgIHJldHVybiBXZWJSZWN0KCk7CiB9CiAKK2Jvb2wgV2ViUG9wdXBNZW51SW1wbDo6Y2Fy
ZXRPclNlbGVjdGlvblJhbmdlKHNpemVfdCogbG9jYXRpb24sIHNpemVfdCogbGVuZ3RoKQorewor
ICAgICpsb2NhdGlvbiA9IDA7CisgICAgKmxlbmd0aCA9IDA7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiB2b2lkIFdlYlBvcHVwTWVudUltcGw6OnNldFRleHREaXJlY3Rpb24oV2ViVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24pCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQb3B1cE1lbnVJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQ
b3B1cE1lbnVJbXBsLmgKaW5kZXggNThhODgzZjU2OGY3ZWYzMGY5ZjJlMDAzNGExNzhlMWVhYmMw
YTgwNi4uNWFlMWI0OGRiZTE0Mzg3MTllYTdhMjVkMDQ0M2ZjZDA1MWY0NzIxNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaApAQCAtNTEsNiArNTEs
NyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYktleWJvYXJkRXZlbnQ7CiBjbGFzcyBX
ZWJNb3VzZUV2ZW50OwogY2xhc3MgV2ViTW91c2VXaGVlbEV2ZW50OworY2xhc3MgV2ViUmFuZ2U7
CiBzdHJ1Y3QgV2ViUmVjdDsKIAogY2xhc3MgV2ViUG9wdXBNZW51SW1wbCA6IHB1YmxpYyBXZWJQ
b3B1cE1lbnUsCkBAIC03Niw5ICs3NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIGludCBzZWxlY3Rp
b25TdGFydCwgaW50IHNlbGVjdGlvbkVuZCk7CiAgICAgdmlydHVhbCBib29sIGNvbmZpcm1Db21w
b3NpdGlvbigpOwogICAgIHZpcnR1YWwgYm9vbCBjb25maXJtQ29tcG9zaXRpb24oY29uc3QgV2Vi
U3RyaW5nJiB0ZXh0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRpb25SYW5nZShzaXplX3Qq
IGxvY2F0aW9uLCBzaXplX3QqIGxlbmd0aCk7CiAgICAgdmlydHVhbCBXZWJUZXh0SW5wdXRUeXBl
IHRleHRJbnB1dFR5cGUoKTsKICAgICB2aXJ0dWFsIFdlYlJlY3QgY2FyZXRPclNlbGVjdGlvbkJv
dW5kcygpOwogICAgIHZpcnR1YWwgYm9vbCBzZWxlY3Rpb25SYW5nZShXZWJQb2ludCYgc3RhcnQs
IFdlYlBvaW50JiBlbmQpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29s
IGNhcmV0T3JTZWxlY3Rpb25SYW5nZShzaXplX3QqIGxvY2F0aW9uLCBzaXplX3QqIGxlbmd0aCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldFRleHREaXJlY3Rpb24oV2ViVGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24pOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAKaW5kZXggNDA3YThkYzE1MGM4MDI5MDk2NzBlNTBhZjRkZDQ0OWJjNzk4
NGI3NS4uZTBmYmE3YmE0NzAyN2EzODI3NDhmOTJkOTZhYTVmZWEwZWFkYTIzOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtOTEsNiArOTEsNyBAQAog
I2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgog
I2luY2x1ZGUgIlNwZWVjaElucHV0Q2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRv
ci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1
ZGUgIlR5cGluZ0NvbW1hbmQuaCIKQEAgLTExNCw2ICsxMTUsNyBAQAogI2luY2x1ZGUgIldlYlBs
dWdpbkNvbnRhaW5lckltcGwuaCIKICNpbmNsdWRlICJXZWJQb2ludC5oIgogI2luY2x1ZGUgIldl
YlBvcHVwTWVudUltcGwuaCIKKyNpbmNsdWRlICJXZWJSYW5nZS5oIgogI2luY2x1ZGUgIldlYlJl
Y3QuaCIKICNpbmNsdWRlICJXZWJSdW50aW1lRmVhdHVyZXMuaCIKICNpbmNsdWRlICJXZWJTZXR0
aW5nc0ltcGwuaCIKQEAgLTEzOTQsNiArMTM5NiwyNCBAQCBib29sIFdlYlZpZXdJbXBsOjpjb25m
aXJtQ29tcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJiB0ZXh0KQogICAgIHJldHVybiB0cnVlOwog
fQogCitib29sIFdlYlZpZXdJbXBsOjpjb21wb3NpdGlvblJhbmdlKHNpemVfdCogbG9jYXRpb24s
IHNpemVfdCogbGVuZ3RoKQoreworICAgIEZyYW1lKiBmb2N1c2VkID0gZm9jdXNlZFdlYkNvcmVG
cmFtZSgpOworICAgIGlmICghZm9jdXNlZCB8fCAhbV9pbWVBY2NlcHRFdmVudHMpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBFZGl0b3IqIGVkaXRvciA9IGZvY3VzZWQtPmVkaXRvcigpOwor
ICAgIGlmICghZWRpdG9yIHx8ICFlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlZGl0b3ItPmNvbXBvc2l0
aW9uUmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlLmdldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoVGV4dEl0ZXJhdG9yOjpsb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShyYW5n
ZS5nZXQoKSwgKmxvY2F0aW9uLCAqbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCiBXZWJUZXh0SW5wdXRUeXBlIFdlYlZpZXdJbXBsOjp0ZXh0SW5w
dXRUeXBlKCkKIHsKICAgICBXZWJUZXh0SW5wdXRUeXBlIHR5cGUgPSBXZWJUZXh0SW5wdXRUeXBl
Tm9uZTsKQEAgLTE0ODUsNiArMTUwNSwyNSBAQCBib29sIFdlYlZpZXdJbXBsOjpzZWxlY3Rpb25S
YW5nZShXZWJQb2ludCYgc3RhcnQsIFdlYlBvaW50JiBlbmQpIGNvbnN0CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK2Jvb2wgV2ViVmlld0ltcGw6OmNhcmV0T3JTZWxlY3Rpb25SYW5nZShzaXplX3Qq
IGxvY2F0aW9uLCBzaXplX3QqIGxlbmd0aCkKK3sKKyAgICBjb25zdCBGcmFtZSogZm9jdXNlZCA9
IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKKyAgICBpZiAoIWZvY3VzZWQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBmb2N1c2Vk
LT5zZWxlY3Rpb24oKTsKKyAgICBpZiAoIWNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjb250cm9sbGVyLT5zZWxlY3Rpb24oKS5m
aXJzdFJhbmdlKCk7CisgICAgaWYgKCFyYW5nZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKFRleHRJdGVyYXRvcjo6bG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UocmFu
Z2UuZ2V0KCksICpsb2NhdGlvbiwgKmxlbmd0aCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBXZWJWaWV3SW1wbDo6c2V0VGV4dERpcmVjdGlvbihX
ZWJUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICAvLyBUaGUgRWRpdG9yOjpzZXRCYXNl
V3JpdGluZ0RpcmVjdGlvbigpIGZ1bmN0aW9uIGNoZWNrcyBpZiB3ZSBjYW4gY2hhbmdlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCAwNjAyN2VhYWM0M2QxNDAz
MmUzMDAwYzhmYjU4MmY2MmQxZGZkODEyLi44NGYxNTA3MWVjNTFlZDc0NGU1ZmQ2M2Y3YTQzZDA3
MWYxMzJmZTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAg
LTEwNyw5ICsxMDcsMTEgQEAgcHVibGljOgogICAgICAgICBpbnQgc2VsZWN0aW9uRW5kKTsKICAg
ICB2aXJ0dWFsIGJvb2wgY29uZmlybUNvbXBvc2l0aW9uKCk7CiAgICAgdmlydHVhbCBib29sIGNv
bmZpcm1Db21wb3NpdGlvbihjb25zdCBXZWJTdHJpbmcmIHRleHQpOworICAgIHZpcnR1YWwgYm9v
bCBjb21wb3NpdGlvblJhbmdlKHNpemVfdCogbG9jYXRpb24sIHNpemVfdCogbGVuZ3RoKTsKICAg
ICB2aXJ0dWFsIFdlYlRleHRJbnB1dFR5cGUgdGV4dElucHV0VHlwZSgpOwogICAgIHZpcnR1YWwg
V2ViUmVjdCBjYXJldE9yU2VsZWN0aW9uQm91bmRzKCk7CiAgICAgdmlydHVhbCBib29sIHNlbGVj
dGlvblJhbmdlKFdlYlBvaW50JiBzdGFydCwgV2ViUG9pbnQmIGVuZCkgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIGNhcmV0T3JTZWxlY3Rpb25SYW5nZShzaXplX3QqIGxvY2F0aW9uLCBzaXplX3Qq
IGxlbmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFRleHREaXJlY3Rpb24oV2ViVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24pOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvbWFjL1dlYlN1YnN0cmluZ1V0aWwubW0gYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9t
YWMvV2ViU3Vic3RyaW5nVXRpbC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYmFhMTRmMjZlY2E0OTI2ZWU1N2Yy
M2E0MzY5YjE5YmVlNjQ0OTFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvbWFjL1dlYlN1YnN0cmluZ1V0aWwubW0KQEAgLTAsMCArMSwxMTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICog
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgorI2lu
Y2x1ZGUgIldlYlN1YnN0cmluZ1V0aWwuaCIKKworI2luY2x1ZGUgIkNvbG9yTWFjLmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRv
ci5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIKKworI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBUaGlz
IGZ1bmN0aW9uIGlzIGNvcGllZCBmcm9tIC9XZWJLaXQvbWFjL01pc2MvV2ViTlNBdHRyaWJ1dGVk
U3RyaW5nRXh0cmFzLm1tLgorTlNBdHRyaWJ1dGVkU3RyaW5nKiBXZWJTdWJzdHJpbmdVdGlsOjph
dHRyaWJ1dGVkU3Vic3RyaW5nSW5SYW5nZShXZWJGcmFtZSogd2ViRnJhbWUsIHNpemVfdCBsb2Nh
dGlvbiwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBzdGF0aWNfY2FzdDxX
ZWJGcmFtZUltcGwqPih3ZWJGcmFtZSktPmZyYW1lKCk7CisgICAgaWYgKGZyYW1lLT52aWV3KCkt
Pm5lZWRzTGF5b3V0KCkpCisgICAgICAgIGZyYW1lLT52aWV3KCktPmxheW91dCgpOworCisgICAg
RWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxl
RWxlbWVudCgpOworICAgIHNlbGVjdGlvblJvb3QgPSBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9u
Um9vdCA6IGZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKKworICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChz
ZWxlY3Rpb25Sb290LCBsb2NhdGlvbiwgbGVuZ3RoKSk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIHN0cmluZyA9
IFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07CisgICAgTlNNdXRhYmxl
RGljdGlvbmFyeSogYXR0cnMgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKKwor
ICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdChyYW5n
ZS5nZXQoKSk7ICFpdC5hdEVuZCgpICYmIFtzdHJpbmcgbGVuZ3RoXSA8IGxlbmd0aDsgaXQuYWR2
YW5jZSgpKSB7CisgICAgICAgIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMgPSBpdC5sZW5ndGgoKTsK
KyAgICAgICAgaWYgKCFudW1DaGFyYWN0ZXJzKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24gPSAwOworICAgICAgICBOb2RlKiBjb250YWlu
ZXIgPSBpdC5yYW5nZSgpLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pOworICAgICAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gY29udGFpbmVyLT5yZW5kZXJlcigpOworICAgICAgICBBU1NF
UlQocmVuZGVyZXIpOworICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Cisg
ICAgICAgIE5TRm9udCogZm9udCA9IHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNG
b250KCk7CisgICAgICAgIC8vIElmIHRoZSBwbGF0Zm9ybSBmb250IGNhbid0IGJlIGxvYWRlZCwg
aXQncyBsaWtlbHkgdGhhdCB0aGUgc2l0ZSBpcworICAgICAgICAvLyB1c2luZyBhIHdlYiBmb250
LiBGb3Igbm93LCBqdXN0IHVzZSB0aGUgZGVmYXVsdCBmb250IGluc3RlYWQuCisgICAgICAgIC8v
IFRPRE8ocnNlc2VrKTogQ2hhbmdlIHRoZSBmb250IGFjdGl2YXRpb24gZmxhZ3MgdG8gYWxsb3cg
b3RoZXIgcHJvY2Vzc2VzCisgICAgICAgIC8vIHRvIHVzZSB0aGUgZm9udC4KKyAgICAgICAgaWYg
KCFmb250KQorICAgICAgICAgIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6c3R5bGUt
PmZvbnQoKS5zaXplKCldOworICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5T
Rm9udEF0dHJpYnV0ZU5hbWVdOworCisgICAgICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmFscGhhKCkpCisgICAgICAgICAgICBbYXR0cnMgc2V0
T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNv
bG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIFthdHRycyByZW1vdmVPYmplY3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29s
b3JBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkpCisgICAgICAgICAgICBbYXR0
cnMgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvcikpIGZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5h
bWVdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBbYXR0cnMgcmVtb3ZlT2JqZWN0Rm9yS2V5
Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisKKyAgICAgICAgTlNTdHJpbmcqIHN1
YnN0cmluZyA9CisgICAgICAgICAgICBbW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0
ZXJzTm9Db3B5OmNvbnN0X2Nhc3Q8VUNoYXIqPihpdC5jaGFyYWN0ZXJzKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOml0Lmxlbmd0aCgp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZVdoZW5Eb25l
Ok5PXSBhdXRvcmVsZWFzZV07CisgICAgICAgIFtzdHJpbmcgcmVwbGFjZUNoYXJhY3RlcnNJblJh
bmdlOk5TTWFrZVJhbmdlKHBvc2l0aW9uLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2l0aFN0cmluZzpzdWJzdHJpbmddOworICAgICAgICBbc3RyaW5nIHNldEF0dHJpYnV0ZXM6
YXR0cnMgcmFuZ2U6TlNNYWtlUmFuZ2UocG9zaXRpb24sIG51bUNoYXJhY3RlcnMpXTsKKyAgICAg
ICAgcG9zaXRpb24gKz0gbnVtQ2hhcmFjdGVyczsKKyAgICB9CisgICAgcmV0dXJuIFtzdHJpbmcg
YXV0b3JlbGVhc2VdOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91115</attachid>
            <date>2011-04-26 09:06:08 -0700</date>
            <delta_ts>2011-04-26 14:06:20 -0700</delta_ts>
            <desc>Patch v7.1 Chromium</desc>
            <filename>bug-54969-20110426120607.patch</filename>
            <type>text/plain</type>
            <size>21182</size>
            <attacher name="Robert Sesek">rsesek</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQ4NTgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
YmNhMjU3NWYxMTE0ODVjNGExNzQzNDg0YjIzMDU3MTJlNTE0N2FlOC4uMjAwNDY3YmZkNTY4NDNj
MmI1YjEwZTdmMjEzODM2NDQ2ODU5MThjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyOSBAQAorMjAxMS0wNC0yNiAgUm9iZXJ0IFNlc2VrICA8cnNlc2VrQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Q2hyb21pdW1dIEltcGxlbWVudCBXZWJLaXQgbWV0aG9kcyB0byBhc3Npc3Qgd2l0aCBDb2NvYSBO
U1RleHRJbnB1dCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NjkKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAg
ICogcHVibGljL1dlYkZyYW1lLmg6CisgICAgICAgICogcHVibGljL1dlYldpZGdldC5oOgorICAg
ICAgICAqIHB1YmxpYy9tYWMvV2ViU3Vic3RyaW5nVXRpbC5oOiBBZGRlZC4KKyAgICAgICAgKiBz
cmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpmaXJz
dFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSk6IFJldHVybiB0aGUgcmVzdWx0IHJlY3QgaW4gd2luZG93
IGNvb3JkaW5hdGVzCisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Y2hhcmFjdGVySW5k
ZXhGb3JQb2ludCk6IE5ldyBtZXRob2Qgb24gV2ViRnJhbWUKKyAgICAgICAgKiBzcmMvV2ViRnJh
bWVJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpjb21wb3NpdGlvblJhbmdlKTogTmV3IG1ldGhvZCBv
biBXZWJXaWRnZXQ7IGVtcHR5IGltcGwKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1w
bDo6Y2FyZXRPclNlbGVjdGlvblJhbmdlKTogTmV3IG1ldGhvZCBvbiBXZWJXaWRnZXQ7IGVtcHR5
IGltcGwKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51SW1wbC5oOgorICAgICAgICAqIHNyYy9X
ZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wb3NpdGlv
blJhbmdlKTogTmV3IG1ldGhvZCBvbiBXZWJXaWRnZXQKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OmNhcmV0T3JTZWxlY3Rpb25SYW5nZSk6IE5ldyBtZXRob2Qgb24gV2ViV2lkZ2V0Cisg
ICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICogc3JjL21hYy9XZWJTdWJzdHJp
bmdVdGlsLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViU3Vic3RyaW5nVXRpbDo6YXR0
cmlidXRlZFN1YnN0cmluZ0luUmFuZ2UpOgorCiAyMDExLTA0LTI1ICBEaXJrIFByYW5rZSAgPGRw
cmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAyYTIwMzQ5Y2QxNjg1Y2MzYmNjYjc3M2YzMDg5
MTAwNTA2NzEwYTIwLi43NDExMzFhYjkwNDU3ODUxYTM0MWMzZmZiYzU0ZDU4NGMwNGYwNTkwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC05Niw2ICs5Niw3IEBACiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9tYWMvV2ViSW5wdXRFdmVudEZhY3RvcnkuaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9tYWMvV2ViU2FuZGJveFN1cHBvcnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9tYWMvV2ViU2NyZWVuSW5mb0ZhY3RvcnkuaCcsCisgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9tYWMvV2ViU3Vic3RyaW5nVXRpbC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL21hYy9X
ZWJUaGVtZUVuZ2luZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkFjY2Vzc2liaWxp
dHlDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkFjY2Vzc2liaWxpdHlOb3Rp
ZmljYXRpb24uaCcsCkBAIC0zODQsNiArMzg1LDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL3gx
MS9XZWJTY3JlZW5JbmZvRmFjdG9yeS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvbWFjL1dl
YklucHV0RXZlbnRGYWN0b3J5Lm1tJywKICAgICAgICAgICAgICAgICAnc3JjL21hYy9XZWJTY3Jl
ZW5JbmZvRmFjdG9yeS5tbScsCisgICAgICAgICAgICAgICAgJ3NyYy9tYWMvV2ViU3Vic3RyaW5n
VXRpbC5tbScsCiAgICAgICAgICAgICAgICAgJ3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvTG9jYWxpemVkU3RyaW5ncy5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uY3BwJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCmluZGV4IDcwMTkzNmZiZmVmYTg2ZDZhOGNk
NjcwNzQ4ZDgzNjRmOTk5ZjMzZGYuLjQ2Mzc1NzBjNWYwODE3ZGJhNDI4NWI1MDk3MWVmNmU1ZTRh
NWE3ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1l
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaApAQCAtMzk2
LDggKzM5NiwxNSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFdlYlJhbmdlIG1hcmtlZFJhbmdl
KCkgY29uc3QgPSAwOwogCisgICAgLy8gUmV0dXJucyB0aGUgZnJhbWUgcmVjdGFuZ2xlIGluIHdp
bmRvdyBjb29yZGluYXRlIHNwYWNlIG9mIHRoZSBnaXZlbiB0ZXh0CisgICAgLy8gcmFuZ2UuCiAg
ICAgdmlydHVhbCBib29sIGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKHVuc2lnbmVkIGxvY2F0
aW9uLCB1bnNpZ25lZCBsZW5ndGgsIFdlYlJlY3QmKSBjb25zdCA9IDA7CiAKKyAgICAvLyBSZXR1
cm5zIHRoZSBpbmRleCBvZiBhIGNoYXJhY3RlciBpbiB0aGUgRnJhbWUncyB0ZXh0IHN0cmVhbSBh
dCB0aGUgZ2l2ZW4KKyAgICAvLyBwb2ludC4gVGhlIHBvaW50IGlzIGluIHRoZSB3aW5kb3cgY29v
cmRpbmF0ZSBzcGFjZS4gV2lsbCByZXR1cm4KKyAgICAvLyBXVEY6Om5vdEZvdW5kIGlmIHRoZSBw
b2ludCBpcyBpbnZhbGlkLgorICAgIHZpcnR1YWwgc2l6ZV90IGNoYXJhY3RlckluZGV4Rm9yUG9p
bnQoY29uc3QgV2ViUG9pbnQmKSBjb25zdCA9IDA7CisKICAgICAvLyBTdXBwb3J0cyBjb21tYW5k
cyBsaWtlIFVuZG8sIFJlZG8sIEN1dCwgQ29weSwgUGFzdGUsIFNlbGVjdEFsbCwKICAgICAvLyBV
bnNlbGVjdCwgZXRjLiBTZWUgRWRpdG9yQ29tbWFuZC5jcHAgZm9yIHRoZSBmdWxsIGxpc3Qgb2Yg
c3VwcG9ydGVkCiAgICAgLy8gY29tbWFuZHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYldpZGdldC5oCmluZGV4IDEyOTBhZDgxNjJiNjYyM2JjMzU5YTBmY2ZjNTYzMTQ0ZjZmY2Y3
NGIuLjEwMTQzZTEyOWU3ZmQwZTEyYjIzZjJiNzIwNTI3NTcxNjEyYzgyYzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCkBAIC00MCw2ICs0MCw3IEBACiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViSW5wdXRFdmVudDsKK2NsYXNzIFdlYlJhbmdlOwog
Y2xhc3MgV2ViU3RyaW5nOwogc3RydWN0IFdlYlBvaW50Owogc3RydWN0IFdlYlJlY3Q7CkBAIC0x
MjAsNiArMTIxLDExIEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMg
YW4gb25nb2luZyBjb21wb3NpdGlvbiBvciB0aGUgdGV4dCBpcyBpbnNlcnRlZC4KICAgICB2aXJ0
dWFsIGJvb2wgY29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFdlYlN0cmluZyYgdGV4dCkgPSAwOwog
CisgICAgLy8gRmV0Y2hlcyB0aGUgY2hhcmFjdGVyIHJhbmdlIG9mIHRoZSBjdXJyZW50IGNvbXBv
c2l0aW9uLCBhbHNvIGNhbGxlZCB0aGUKKyAgICAvLyAibWFya2VkIHJhbmdlLiIgUmV0dXJucyB0
cnVlIGFuZCBmaWxscyB0aGUgb3V0LXBhcmFtdGVycyBvbiBzdWNjZXNzOworICAgIC8vIHJldHVy
bnMgZmFsc2Ugb24gZmFpbHVyZS4KKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRpb25SYW5nZShz
aXplX3QqIGxvY2F0aW9uLCBzaXplX3QqIGxlbmd0aCkgPSAwOworCiAgICAgLy8gUmV0dXJucyB0
aGUgY3VycmVudCB0ZXh0IGlucHV0IHR5cGUgb2YgdGhpcyBXZWJXaWRnZXQuCiAgICAgdmlydHVh
bCBXZWJUZXh0SW5wdXRUeXBlIHRleHRJbnB1dFR5cGUoKSA9IDA7CiAKQEAgLTEzMSw2ICsxMzcs
MTIgQEAgcHVibGljOgogICAgIC8vIGJvdHRvbSBvZiB0aGUgc2VsZWN0ZWQgbGluZS4KICAgICB2
aXJ0dWFsIGJvb2wgc2VsZWN0aW9uUmFuZ2UoV2ViUG9pbnQmIHN0YXJ0LCBXZWJQb2ludCYgZW5k
KSBjb25zdCA9IDA7CiAKKyAgICAvLyBGZXRjaCB0aGUgY3VycmVudCBzZWxlY3Rpb24gcmFuZ2Ug
b2YgdGhpcyBXZWJXaWRnZXQuIElmIHRoZXJlIGlzIG5vCisgICAgLy8gc2VsZWN0aW9uLCBpdCB3
aWxsIG91dHB1dCBhIDAtbGVuZ3RoIHJhbmdlIHdpdGggdGhlIGxvY2F0aW9uIGF0IHRoZQorICAg
IC8vIGNhcmV0LiBSZXR1cm5zIHRydWUgYW5kIGZpbGxzIHRoZSBvdXQtcGFyYW10ZXJzIG9uIHN1
Y2Nlc3M7IHJldHVybnMgZmFsc2UKKyAgICAvLyBvbiBmYWlsdXJlLgorICAgIHZpcnR1YWwgYm9v
bCBjYXJldE9yU2VsZWN0aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90KiBsZW5ndGgp
ID0gMDsKKwogICAgIC8vIENoYW5nZXMgdGhlIHRleHQgZGlyZWN0aW9uIG9mIHRoZSBzZWxlY3Rl
ZCBpbnB1dCBub2RlLgogICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0RGlyZWN0aW9uKFdlYlRleHRE
aXJlY3Rpb24pID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvbWFjL1dlYlN1YnN0cmluZ1V0aWwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L21hYy9XZWJTdWJzdHJpbmdVdGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWQxNDYxMGQ0MGE2NWRlOWMyZDlk
NzFmMmNhNGEyOTE5MWVmNWIyNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL21hYy9XZWJTdWJzdHJpbmdVdGlsLmgKQEAgLTAsMCArMSw1NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViU3Vic3RyaW5nVXRpbF9oCisjZGVmaW5lIFdlYlN1YnN0cmluZ1V0aWxfaAorCituYW1l
c3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkZyYW1lOworfQorCisjaWYgX19PQkpDX18KK0BjbGFz
cyBOU0F0dHJpYnV0ZWRTdHJpbmc7CisjZWxzZQorY2xhc3MgTlNBdHRyaWJ1dGVkU3RyaW5nOwor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTdWJzdHJpbmdVdGlsIHsK
K3B1YmxpYzoKKyAgICAvLyBSZXR1cm5zIGFuIGF1dG9yZWxlYXNlZCBOU0F0dHJpYnV0ZWRTdHJp
bmcgdGhhdCBpcyBhIHN1YnN0cmluZyBvZiB0aGUKKyAgICAvLyBGcmFtZSBhdCB0aGUgZ2l2ZW4g
cmFuZ2UsIG9yIG5pbCBvbiBlcnJvci4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBOU0F0dHJpYnV0
ZWRTdHJpbmcqIGF0dHJpYnV0ZWRTdWJzdHJpbmdJblJhbmdlKFdlYkZyYW1lKiwKKyAgICAgICAg
c2l6ZV90IGxvY2F0aW9uLAorICAgICAgICBzaXplX3QgbGVuZ3RoKTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJG
cmFtZUltcGwuY3BwCmluZGV4IGMwNjA4N2RiYTI0ZjEwNTIxYjQ1MzhjYmEzZGMzNzY4MTJiOGE3
NTkuLjlhM2VlNmI1ODQ5ZWFhNmM1YTMyODRhOTRlNDgxZWUxYzFiYTBiZmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApAQCAtODUsMTIgKzg1LDEyIEBA
CiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRpdG9y
LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiRm9ybVN0YXRlLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUg
IkhUTUxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCkBAIC05OSw2ICs5OSw3IEBACiAjaW5jbHVkZSAi
SFRNTExpbmtFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGlz
dG9yeUl0ZW0uaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJwYWludGluZy9H
cmFwaGljc0NvbnRleHRCdWlsZGVyLmgiCkBAIC0xMTYzLDExICsxMTY0LDMwIEBAIGJvb2wgV2Vi
RnJhbWVJbXBsOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwg
dW5zaWduZWQgbGVuZ3RoCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIEludFJlY3QgaW50UmVjdCA9IGZyYW1lKCktPmVkaXRvcigpLT5maXJzdFJlY3RGb3JSYW5n
ZShyYW5nZS5nZXQoKSk7Ci0gICAgcmVjdCA9IFdlYlJlY3QoaW50UmVjdC54KCksIGludFJlY3Qu
eSgpLCBpbnRSZWN0LndpZHRoKCksIGludFJlY3QuaGVpZ2h0KCkpOworICAgIHJlY3QgPSBXZWJS
ZWN0KGludFJlY3QpOworICAgIC8vIFdoZW4gaW5zaWRlIGFuIHRleHQgY29udHJvbCwgZG9uJ3Qg
YWRqdXN0IHRoZSByYW5nZS4KKyAgICBpZiAoIXNlbGVjdGlvblJvb3QpCisgICAgICAgIHJlY3Qg
PSBmcmFtZSgpLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorc2l6ZV90IFdlYkZyYW1lSW1wbDo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludChj
b25zdCBXZWJQb2ludCYgd2ViUG9pbnQpIGNvbnN0Cit7CisgICAgaWYgKCFmcmFtZSgpKQorICAg
ICAgICByZXR1cm4gbm90Rm91bmQ7CisKKyAgICBJbnRQb2ludCBwb2ludCA9IGZyYW1lKCktPnZp
ZXcoKS0+d2luZG93VG9Db250ZW50cyh3ZWJQb2ludCk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1
bHQgPSBmcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQs
IGZhbHNlKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUoKS0+cmFuZ2VGb3JQb2lu
dChyZXN1bHQucG9pbnQoKSk7CisgICAgaWYgKCFyYW5nZS5nZXQoKSkKKyAgICAgICAgcmV0dXJu
IG5vdEZvdW5kOworCisgICAgc2l6ZV90IGxvY2F0aW9uLCBsZW5ndGg7CisgICAgVGV4dEl0ZXJh
dG9yOjpsb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShyYW5nZS5nZXQoKSwgbG9jYXRpb24sIGxl
bmd0aCk7CisgICAgcmV0dXJuIGxvY2F0aW9uOworfQorCiBib29sIFdlYkZyYW1lSW1wbDo6ZXhl
Y3V0ZUNvbW1hbmQoY29uc3QgV2ViU3RyaW5nJiBuYW1lKQogewogICAgIEFTU0VSVChmcmFtZSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKaW5kZXggNTcyNDA4
YTEzZjhlYjA3MWIyNDg5YWRhNTk1ZGFjYmE2YmYwNzY4Yi4uZjUyOWYyOWU5ZGYwYTRkNzgwZTA1
NmE1ZTM2YzE4NzZiOGZiZTAxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRnJhbWVJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJh
bWVJbXBsLmgKQEAgLTE1Miw2ICsxNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhh
c01hcmtlZFRleHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYlJhbmdlIG1hcmtlZFJhbmdlKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKHVuc2ln
bmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIFdlYlJlY3QmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHNpemVfdCBjaGFyYWN0ZXJJbmRleEZvclBvaW50KGNvbnN0IFdlYlBvaW50JikgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIGV4ZWN1dGVDb21tYW5kKGNvbnN0IFdlYlN0cmluZyYpOwogICAg
IHZpcnR1YWwgYm9vbCBleGVjdXRlQ29tbWFuZChjb25zdCBXZWJTdHJpbmcmLCBjb25zdCBXZWJT
dHJpbmcmIHZhbHVlKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb21tYW5kRW5hYmxlZChjb25zdCBX
ZWJTdHJpbmcmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBvcHVwTWVudUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9w
dXBNZW51SW1wbC5jcHAKaW5kZXggYjRkNDI0NmMzZjYwMTBiY2FmNTAyMWQ0Y2Q5NjgxYWJmYzM5
M2RiNS4uNmE2NDFhOTE0MmIyOGQ2MjJmMTlhZmM3OTQ2ZGU0ZGI0OWRmNGFlMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKQEAgLTQzLDYg
KzQzLDcgQEAKIAogI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIKICNpbmNsdWRlICJXZWJJbnB1
dEV2ZW50Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIldlYlJhbmdlLmgiCiAjaW5jbHVkZSAiV2Vi
UmVjdC5oIgogI2luY2x1ZGUgIldlYldpZGdldENsaWVudC5oIgogCkBAIC0yNTIsNiArMjUzLDEz
IEBAIGJvb2wgV2ViUG9wdXBNZW51SW1wbDo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFdlYlN0
cmluZyYgdGV4dCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgV2ViUG9wdXBNZW51SW1w
bDo6Y29tcG9zaXRpb25SYW5nZShzaXplX3QqIGxvY2F0aW9uLCBzaXplX3QqIGxlbmd0aCkKK3sK
KyAgICAqbG9jYXRpb24gPSAwOworICAgICpsZW5ndGggPSAwOworICAgIHJldHVybiBmYWxzZTsK
K30KKwogV2ViVGV4dElucHV0VHlwZSBXZWJQb3B1cE1lbnVJbXBsOjp0ZXh0SW5wdXRUeXBlKCkK
IHsKICAgICByZXR1cm4gV2ViVGV4dElucHV0VHlwZU5vbmU7CkBAIC0yNjIsNiArMjcwLDEzIEBA
IFdlYlJlY3QgV2ViUG9wdXBNZW51SW1wbDo6Y2FyZXRPclNlbGVjdGlvbkJvdW5kcygpCiAgICAg
cmV0dXJuIFdlYlJlY3QoKTsKIH0KIAorYm9vbCBXZWJQb3B1cE1lbnVJbXBsOjpjYXJldE9yU2Vs
ZWN0aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90KiBsZW5ndGgpCit7CisgICAgKmxv
Y2F0aW9uID0gMDsKKyAgICAqbGVuZ3RoID0gMDsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZv
aWQgV2ViUG9wdXBNZW51SW1wbDo6c2V0VGV4dERpcmVjdGlvbihXZWJUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBvcHVwTWVudUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVu
dUltcGwuaAppbmRleCA1OGE4ODNmNTY4ZjdlZjMwZjlmMmUwMDM0YTE3OGUxZWFiYzBhODA2Li41
YWUxYjQ4ZGJlMTQzODcxOWVhN2EyNWQwNDQzZmNkMDUxZjQ3MjE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCkBAIC01MSw2ICs1MSw3IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2ViS2V5Ym9hcmRFdmVudDsKIGNsYXNzIFdlYk1vdXNl
RXZlbnQ7CiBjbGFzcyBXZWJNb3VzZVdoZWVsRXZlbnQ7CitjbGFzcyBXZWJSYW5nZTsKIHN0cnVj
dCBXZWJSZWN0OwogCiBjbGFzcyBXZWJQb3B1cE1lbnVJbXBsIDogcHVibGljIFdlYlBvcHVwTWVu
dSwKQEAgLTc2LDkgKzc3LDExIEBAIHB1YmxpYzoKICAgICAgICAgaW50IHNlbGVjdGlvblN0YXJ0
LCBpbnQgc2VsZWN0aW9uRW5kKTsKICAgICB2aXJ0dWFsIGJvb2wgY29uZmlybUNvbXBvc2l0aW9u
KCk7CiAgICAgdmlydHVhbCBib29sIGNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBXZWJTdHJpbmcm
IHRleHQpOworICAgIHZpcnR1YWwgYm9vbCBjb21wb3NpdGlvblJhbmdlKHNpemVfdCogbG9jYXRp
b24sIHNpemVfdCogbGVuZ3RoKTsKICAgICB2aXJ0dWFsIFdlYlRleHRJbnB1dFR5cGUgdGV4dElu
cHV0VHlwZSgpOwogICAgIHZpcnR1YWwgV2ViUmVjdCBjYXJldE9yU2VsZWN0aW9uQm91bmRzKCk7
CiAgICAgdmlydHVhbCBib29sIHNlbGVjdGlvblJhbmdlKFdlYlBvaW50JiBzdGFydCwgV2ViUG9p
bnQmIGVuZCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2FyZXRP
clNlbGVjdGlvblJhbmdlKHNpemVfdCogbG9jYXRpb24sIHNpemVfdCogbGVuZ3RoKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0VGV4dERpcmVjdGlvbihXZWJUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbik7
CiAgICAgdmlydHVhbCBib29sIGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcAppbmRleCAyNDM4YTk0ODFkMDE3MGM1NmIzNjMyYTBmYjAxZDZjM2QwMTg3YjhkLi43
Y2IwMDg4MDNhN2I5OWUwMWExMGQ2YjI1Yzg0MzIxYmU5MWZlMjlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC05MSw2ICs5MSw3IEBACiAjaW5jbHVk
ZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVk
ZSAiU3BlZWNoSW5wdXRDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHlw
aW5nQ29tbWFuZC5oIgpAQCAtMTE1LDYgKzExNiw3IEBACiAjaW5jbHVkZSAiV2ViUGx1Z2luQ29u
dGFpbmVySW1wbC5oIgogI2luY2x1ZGUgIldlYlBvaW50LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBN
ZW51SW1wbC5oIgorI2luY2x1ZGUgIldlYlJhbmdlLmgiCiAjaW5jbHVkZSAiV2ViUmVjdC5oIgog
I2luY2x1ZGUgIldlYlJ1bnRpbWVGZWF0dXJlcy5oIgogI2luY2x1ZGUgIldlYlNldHRpbmdzSW1w
bC5oIgpAQCAtMTM5NSw2ICsxMzk3LDI0IEBAIGJvb2wgV2ViVmlld0ltcGw6OmNvbmZpcm1Db21w
b3NpdGlvbihjb25zdCBXZWJTdHJpbmcmIHRleHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jv
b2wgV2ViVmlld0ltcGw6OmNvbXBvc2l0aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90
KiBsZW5ndGgpCit7CisgICAgRnJhbWUqIGZvY3VzZWQgPSBmb2N1c2VkV2ViQ29yZUZyYW1lKCk7
CisgICAgaWYgKCFmb2N1c2VkIHx8ICFtX2ltZUFjY2VwdEV2ZW50cykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIEVkaXRvciogZWRpdG9yID0gZm9jdXNlZC0+ZWRpdG9yKCk7CisgICAgaWYg
KCFlZGl0b3IgfHwgIWVkaXRvci0+aGFzQ29tcG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVkaXRvci0+Y29tcG9zaXRpb25SYW5n
ZSgpOworICAgIGlmICghcmFuZ2UuZ2V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChUZXh0SXRlcmF0b3I6OmxvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKHJhbmdlLmdldCgp
LCAqbG9jYXRpb24sICpsZW5ndGgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKIFdlYlRleHRJbnB1dFR5cGUgV2ViVmlld0ltcGw6OnRleHRJbnB1dFR5cGUo
KQogewogICAgIFdlYlRleHRJbnB1dFR5cGUgdHlwZSA9IFdlYlRleHRJbnB1dFR5cGVOb25lOwpA
QCAtMTQ4Niw2ICsxNTA2LDI1IEBAIGJvb2wgV2ViVmlld0ltcGw6OnNlbGVjdGlvblJhbmdlKFdl
YlBvaW50JiBzdGFydCwgV2ViUG9pbnQmIGVuZCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorYm9vbCBXZWJWaWV3SW1wbDo6Y2FyZXRPclNlbGVjdGlvblJhbmdlKHNpemVfdCogbG9jYXRp
b24sIHNpemVfdCogbGVuZ3RoKQoreworICAgIGNvbnN0IEZyYW1lKiBmb2N1c2VkID0gZm9jdXNl
ZFdlYkNvcmVGcmFtZSgpOworICAgIGlmICghZm9jdXNlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgU2VsZWN0aW9uQ29udHJvbGxlciogY29udHJvbGxlciA9IGZvY3VzZWQtPnNlbGVj
dGlvbigpOworICAgIGlmICghY29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNvbnRyb2xsZXItPnNlbGVjdGlvbigpLmZpcnN0UmFu
Z2UoKTsKKyAgICBpZiAoIXJhbmdlLmdldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoVGV4dEl0ZXJhdG9yOjpsb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShyYW5nZS5nZXQo
KSwgKmxvY2F0aW9uLCAqbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRUZXh0RGlyZWN0aW9uKFdlYlRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIC8vIFRoZSBFZGl0b3I6OnNldEJhc2VXcml0aW5n
RGlyZWN0aW9uKCkgZnVuY3Rpb24gY2hlY2tzIGlmIHdlIGNhbiBjaGFuZ2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGYxMDIwMmY3NmRhNmNkZTMyNjU5MDli
NGZlNjVmNzBhYWRiOGJmOTMuLjU3NWNhYjE2NWM2Zjg3ZDAxYWU2Mzc5YjRlZWQ3YWJmMTI4M2Rm
MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMTA3LDkg
KzEwNywxMSBAQCBwdWJsaWM6CiAgICAgICAgIGludCBzZWxlY3Rpb25FbmQpOwogICAgIHZpcnR1
YWwgYm9vbCBjb25maXJtQ29tcG9zaXRpb24oKTsKICAgICB2aXJ0dWFsIGJvb2wgY29uZmlybUNv
bXBvc2l0aW9uKGNvbnN0IFdlYlN0cmluZyYgdGV4dCk7CisgICAgdmlydHVhbCBib29sIGNvbXBv
c2l0aW9uUmFuZ2Uoc2l6ZV90KiBsb2NhdGlvbiwgc2l6ZV90KiBsZW5ndGgpOwogICAgIHZpcnR1
YWwgV2ViVGV4dElucHV0VHlwZSB0ZXh0SW5wdXRUeXBlKCk7CiAgICAgdmlydHVhbCBXZWJSZWN0
IGNhcmV0T3JTZWxlY3Rpb25Cb3VuZHMoKTsKICAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0aW9uUmFu
Z2UoV2ViUG9pbnQmIHN0YXJ0LCBXZWJQb2ludCYgZW5kKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgY2FyZXRPclNlbGVjdGlvblJhbmdlKHNpemVfdCogbG9jYXRpb24sIHNpemVfdCogbGVuZ3Ro
KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dERpcmVjdGlvbihXZWJUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbik7CiAgICAgdmlydHVhbCBib29sIGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9tYWMv
V2ViU3Vic3RyaW5nVXRpbC5tbSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL21hYy9XZWJT
dWJzdHJpbmdVdGlsLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiYWExNGYyNmVjYTQ5MjZlZTU3ZjIzYTQzNjli
MTliZWU2NDQ5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9tYWMvV2ViU3Vic3RyaW5nVXRpbC5tbQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNSwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAi
V2ViU3Vic3RyaW5nVXRpbC5oIgorCisjaW5jbHVkZSAiQ29sb3JNYWMuaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAi
Tm9kZS5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisj
aW5jbHVkZSAiV2ViUmVjdC5oIgorCisjaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFRoaXMgZnVuY3Rp
b24gaXMgY29waWVkIGZyb20gL1dlYktpdC9tYWMvTWlzYy9XZWJOU0F0dHJpYnV0ZWRTdHJpbmdF
eHRyYXMubW0uCitOU0F0dHJpYnV0ZWRTdHJpbmcqIFdlYlN1YnN0cmluZ1V0aWw6OmF0dHJpYnV0
ZWRTdWJzdHJpbmdJblJhbmdlKFdlYkZyYW1lKiB3ZWJGcmFtZSwgc2l6ZV90IGxvY2F0aW9uLCBz
aXplX3QgbGVuZ3RoKQoreworICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PFdlYkZyYW1l
SW1wbCo+KHdlYkZyYW1lKS0+ZnJhbWUoKTsKKyAgICBpZiAoZnJhbWUtPnZpZXcoKS0+bmVlZHNM
YXlvdXQoKSkKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+bGF5b3V0KCk7CisKKyAgICBFbGVtZW50
KiBzZWxlY3Rpb25Sb290ID0gZnJhbWUtPnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50
KCk7CisgICAgc2VsZWN0aW9uUm9vdCA9IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDog
ZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOworCisgICAgUmVmUHRyPFJhbmdl
PiByYW5nZShUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHNlbGVjdGlv
blJvb3QsIGxvY2F0aW9uLCBsZW5ndGgpKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogc3RyaW5nID0gW1tOU011
dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XTsKKyAgICBOU011dGFibGVEaWN0aW9u
YXJ5KiBhdHRycyA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOworCisgICAgdW5z
aWduZWQgcG9zaXRpb24gPSAwOworICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHJhbmdlLmdldCgp
KTsgIWl0LmF0RW5kKCkgJiYgW3N0cmluZyBsZW5ndGhdIDwgbGVuZ3RoOyBpdC5hZHZhbmNlKCkp
IHsKKyAgICAgICAgdW5zaWduZWQgbnVtQ2hhcmFjdGVycyA9IGl0Lmxlbmd0aCgpOworICAgICAg
ICBpZiAoIW51bUNoYXJhY3RlcnMpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBF
eGNlcHRpb25Db2RlIGV4Y2VwdGlvbiA9IDA7CisgICAgICAgIE5vZGUqIGNvbnRhaW5lciA9IGl0
LnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbik7CisgICAgICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBjb250YWluZXItPnJlbmRlcmVyKCk7CisgICAgICAgIEFTU0VSVChyZW5k
ZXJlcik7CisgICAgICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICAgICAg
TlNGb250KiBmb250ID0gc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKTsK
KyAgICAgICAgLy8gSWYgdGhlIHBsYXRmb3JtIGZvbnQgY2FuJ3QgYmUgbG9hZGVkLCBpdCdzIGxp
a2VseSB0aGF0IHRoZSBzaXRlIGlzCisgICAgICAgIC8vIHVzaW5nIGEgd2ViIGZvbnQuIEZvciBu
b3csIGp1c3QgdXNlIHRoZSBkZWZhdWx0IGZvbnQgaW5zdGVhZC4KKyAgICAgICAgLy8gVE9ETyhy
c2VzZWspOiBDaGFuZ2UgdGhlIGZvbnQgYWN0aXZhdGlvbiBmbGFncyB0byBhbGxvdyBvdGhlciBw
cm9jZXNzZXMKKyAgICAgICAgLy8gdG8gdXNlIHRoZSBmb250LgorICAgICAgICBpZiAoIWZvbnQp
CisgICAgICAgICAgZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpzdHlsZS0+Zm9udCgp
LnNpemUoKV07CisgICAgICAgIFthdHRycyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0
cmlidXRlTmFtZV07CisKKyAgICAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlDb2xvcikuYWxwaGEoKSkKKyAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6
bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSBm
b3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgW2F0dHJzIHJlbW92ZU9iamVjdEZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJp
YnV0ZU5hbWVdOworICAgICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvcikuYWxwaGEoKSkKKyAgICAgICAgICAgIFthdHRycyBzZXRP
YmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIFthdHRycyByZW1vdmVPYmplY3RGb3JLZXk6TlNCYWNr
Z3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKworICAgICAgICBOU1N0cmluZyogc3Vic3RyaW5n
ID0KKyAgICAgICAgICAgIFtbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENoYXJhY3RlcnNOb0Nv
cHk6Y29uc3RfY2FzdDxVQ2hhcio+KGl0LmNoYXJhY3RlcnMoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6aXQubGVuZ3RoKCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlV2hlbkRvbmU6Tk9dIGF1
dG9yZWxlYXNlXTsKKyAgICAgICAgW3N0cmluZyByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6TlNN
YWtlUmFuZ2UocG9zaXRpb24sIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRo
U3RyaW5nOnN1YnN0cmluZ107CisgICAgICAgIFtzdHJpbmcgc2V0QXR0cmlidXRlczphdHRycyBy
YW5nZTpOU01ha2VSYW5nZShwb3NpdGlvbiwgbnVtQ2hhcmFjdGVycyldOworICAgICAgICBwb3Np
dGlvbiArPSBudW1DaGFyYWN0ZXJzOworICAgIH0KKyAgICByZXR1cm4gW3N0cmluZyBhdXRvcmVs
ZWFzZV07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>