<?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>53715</bug_id>
          
          <creation_ts>2011-02-03 14:07:42 -0800</creation_ts>
          <short_desc>[chromium] Import PaintAggregator</short_desc>
          <delta_ts>2012-01-31 14:57:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Fisher (:fishd, Google)">fishd</reporter>
          <assigned_to name="Darin Fisher (:fishd, Google)">fishd</assigned_to>
          <cc>brettw</cc>
    
    <cc>dglazkov</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>344988</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-02-03 14:07:42 -0800</bug_when>
    <thetext>[chromium] Import PaintAggregator and introduce WebPaintSurface API

This bug is about importing the Chromium code that collects invalidation
and scrolling commands and generates updates to the software backingstore.

It makes sense to move this code into WebKit so that we can more easily
exercise it with layout tests.  We may also want to make use of the paint
aggregator to reduce updates to composited layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345002</commentid>
    <comment_count>1</comment_count>
      <attachid>81114</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-02-03 14:16:02 -0800</bug_when>
    <thetext>Created attachment 81114
v1 patch

The corresponding changes to TestShell are here:
http://codereview.chromium.org/6283019

(Those are not yet ready for review, but they give you an idea of how WebPaintSurface may be implemented.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345004</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-02-03 14:18:31 -0800</bug_when>
    <thetext>@brettw, it&apos;d be great to get your input on the plugin related changes.  This is my attempt to bring your plugin painting optimization into WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345013</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-03 14:23:01 -0800</bug_when>
    <thetext>Attachment 81114 did not build on chromium:
Build output: http://queues.webkit.org/results/7689755</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345033</commentid>
    <comment_count>4</comment_count>
      <attachid>81117</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-02-03 15:07:15 -0800</bug_when>
    <thetext>Created attachment 81117
v2 patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345148</commentid>
    <comment_count>5</comment_count>
      <attachid>81117</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-03 16:45:11 -0800</bug_when>
    <thetext>Comment on attachment 81117
v2 patch

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

Seems pretty sane to me.  We&apos;re supposed to use 2-clause BSD these days

&gt; Source/WebKit/chromium/src/painting/PaintController.cpp:201
&gt; +    context.setStrokeColor(colors[colorSelector++ &amp; 3], ColorSpaceDeviceRGB);

% 3, &amp; 3 will allow the value &apos;3&apos; which will index out of bounds here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345281</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-03 20:14:28 -0800</bug_when>
    <thetext>Attachment 81114 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Sourc...&quot; exit_code: 1

Source/WebKit/chromium/src/WebPopupMenuImpl.h:131:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit/chromium/src/WebPopupMenuImpl.h:132:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit/chromium/src/painting/PaintController.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/chromium/src/painting/PaintController.cpp:207:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit/chromium/src/WebViewImpl.h:209:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit/chromium/src/WebViewImpl.h:210:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit/chromium/src/painting/PaintAggregator.cpp:205:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit/chromium/src/painting/PaintAggregator.cpp:248:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebKit/chromium/tests/PaintAggregatorTest.cpp:282:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit/chromium/tests/PaintAggregatorTest.cpp:299:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit/chromium/src/painting/PaintAggregator.h:83:  The parameter name &quot;rect&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 11 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345283</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-03 20:15:57 -0800</bug_when>
    <thetext>Attachment 81117 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/chromium/WebKit.gyp&apos;, u&apos;Sour...&quot; exit_code: 1

Source/WebKit/chromium/src/WebPopupMenuImpl.h:131:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit/chromium/src/WebPopupMenuImpl.h:132:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit/chromium/src/painting/PaintController.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/chromium/src/painting/PaintController.cpp:207:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit/chromium/src/WebViewImpl.h:209:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit/chromium/src/WebViewImpl.h:210:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit/chromium/src/painting/PaintAggregator.cpp:205:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit/chromium/src/painting/PaintAggregator.cpp:248:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebKit/chromium/tests/PaintAggregatorTest.cpp:282:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit/chromium/tests/PaintAggregatorTest.cpp:299:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit/chromium/src/painting/PaintAggregator.h:83:  The parameter name &quot;rect&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 11 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345564</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-02-04 09:56:27 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 81117 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81117&amp;action=review
&gt; 
&gt; Seems pretty sane to me.  We&apos;re supposed to use 2-clause BSD these days

ah, right.  thanks!

&gt; 
&gt; &gt; Source/WebKit/chromium/src/painting/PaintController.cpp:201
&gt; &gt; +    context.setStrokeColor(colors[colorSelector++ &amp; 3], ColorSpaceDeviceRGB);
&gt; 
&gt; % 3, &amp; 3 will allow the value &apos;3&apos; which will index out of bounds here

whoops... yeah, that&apos;s a typo in my translation of the chromium code :-/  thanks for catching it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346981</commentid>
    <comment_count>9</comment_count>
      <attachid>81114</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-02-07 17:44:04 -0800</bug_when>
    <thetext>Comment on attachment 81114
v1 patch

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

&gt; Source/WebKit/chromium/public/WebPaintSurface.h:61
&gt; +    // and the buffer may be deleted once flush() returns.

May be deleted? What happens if I don&apos;t delete a WebPaintBuffer? Can i efficiently paint with it next frame?

&gt; Source/WebKit/chromium/public/WebPlugin.h:78
&gt; +    virtual WebPaintBuffer* cloneBackingBuffer() { return 0; }

The name of this sort of confused me at first...

I&apos;m probably missing some critical detail, but can we reverse the impedence of this and say paintIntoSurface(WebPaintSurface*)?

&gt; Source/WebKit/chromium/src/WebViewImpl.h:360
&gt; +    void scheduleInvalidation(const WebCore::IntRect&amp;);

Can we remove WebViewImpl::invalidateRootLayerRect/scrollRootLayerRect completely and put their implementation behind scheduleInvalidation/etc? This might allow ChromeClient to be agnostic about compositing.

&gt; Source/WebKit/chromium/src/painting/PaintController.h:54
&gt; +class PaintController : public WebPaintSurfaceClient {

Hmm... isn&apos;t paintController ~= LayerChromium, plus an update loop?

If we leave the updateTimer on WebView, we could fuse scheduleComposite with this update. That might then pave the way to another step which is fusing PaintController with LayerChromium.

I&apos;m trying to figure out the step after this where PaintController and LayerChromium fuse together a bit.

&gt; Source/WebKit/chromium/src/painting/Painter.h:49
&gt; +public:

If you hoist animate and layout of these (which are sort of global rather than RenderLayer-specific iirw) then you have something nearly identical to TilePaintInterface, which is Enne&apos;s abstraction for painting... maybe we can fuse those together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347621</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-02-08 13:06:47 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 81114 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81114&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebPaintSurface.h:61
&gt; &gt; +    // and the buffer may be deleted once flush() returns.
&gt; 
&gt; May be deleted? What happens if I don&apos;t delete a WebPaintBuffer? Can i efficiently paint with it next frame?

We have a choice.  There is nothing that technically precludes it.  We
probably just want to strongly encourage people to not modify the
WebPaintBuffer while it is being flushed :-)


&gt; &gt; Source/WebKit/chromium/public/WebPlugin.h:78
&gt; &gt; +    virtual WebPaintBuffer* cloneBackingBuffer() { return 0; }
&gt; 
&gt; The name of this sort of confused me at first...

Yeah, I had a hard time coming up with a good name.  &quot;clone&quot; seemed
better than &quot;create&quot; (sounds like it would return something that is
new and uninitialized) or &quot;get&quot; (sounds like it would not be something
the caller should need to free later).  &quot;clone&quot; on the other hand
sounds like it is a copy, which should be freed later.

I used the term &quot;backing buffer&quot; to mimic the term already used to
get the backing texture.


&gt; I&apos;m probably missing some critical detail, but can we reverse the impedence of this and say paintIntoSurface(WebPaintSurface*)?

Maybe.  The problem with doing this is that we need to keep the buffer
alive until flush is called.  I could fix that by making it so that
WebPaintBuffer is reference counted such that WebPaintSurface::paint
would just take an owning reference.

Yeah, this might be a lot nicer.  It helps avoid the nasty problem of
exposing the canvas of the underlying WebPaintBuffer of the plugin.

I&apos;ll noodle on this some more...


&gt; &gt; Source/WebKit/chromium/src/WebViewImpl.h:360
&gt; &gt; +    void scheduleInvalidation(const WebCore::IntRect&amp;);
&gt; 
&gt; Can we remove WebViewImpl::invalidateRootLayerRect/scrollRootLayerRect completely and put their implementation behind scheduleInvalidation/etc? This might allow ChromeClient to be agnostic about compositing.

Yes, we probably can.  I&apos;ll give that a try.


&gt; &gt; Source/WebKit/chromium/src/painting/PaintController.h:54
&gt; &gt; +class PaintController : public WebPaintSurfaceClient {
&gt; 
&gt; Hmm... isn&apos;t paintController ~= LayerChromium, plus an update loop?

Good question.  I need to learn more about LayerChromium.


&gt; If we leave the updateTimer on WebView, we could fuse scheduleComposite with this update. That might then pave the way to another step which is fusing PaintController with LayerChromium.

I definitely want to avoid adding complexity to WebView though...
I had the idea of writing a PaintController unit test :)


&gt; I&apos;m trying to figure out the step after this where PaintController and LayerChromium fuse together a bit.

Yeah... this is something I haven&apos;t thought enough about yet.


&gt; &gt; Source/WebKit/chromium/src/painting/Painter.h:49
&gt; &gt; +public:
&gt; 
&gt; If you hoist animate and layout of these (which are sort of global rather than RenderLayer-specific iirw) then you have something nearly identical to TilePaintInterface, which is Enne&apos;s abstraction for painting... maybe we can fuse those together.

Interesting.  I&apos;ll take a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347633</commentid>
    <comment_count>11</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-02-08 13:20:30 -0800</bug_when>
    <thetext>&gt; I definitely want to avoid adding complexity to WebView though...
&gt; I had the idea of writing a PaintController unit test :)
&gt; 
Hmm! Like that bit, lots...

Thinking out loud...

WebViewPainter { -&gt; recieves damage, knows how to paint webview onto websurface
  invalidate/scroll/needsAnimate;
  PaintController*; // forward invalidations here
  paint aggregator;
  WebView*;
  WebSurface*;
}

PaintController { -&gt; schedules updates (&quot;update controller&quot;), now for just sw path, soon for hw rendering case too
  anim/layout/paint scheduling
}

WebView {
  PaintController;
}

ChromeClient {
  SoftwarePainter*; // forward invalidations directly here? idk...
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348015</commentid>
    <comment_count>12</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2011-02-08 23:45:09 -0800</bug_when>
    <thetext>The API looks good overall. I&apos;m also a bit confused about the &quot;clone&quot; part. So the caller needs to free the buffer? How can we avoid copying the backing store pixels in this case?

Sorry if I missed something obvious, I&apos;m a bit rushed at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348477</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-02-09 12:48:54 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; The API looks good overall. I&apos;m also a bit confused about the &quot;clone&quot; part. So the caller needs to free the buffer? How can we avoid copying the backing store pixels in this case?

Not exactly.  The caller deletes the handle--the WebPaintBuffer.  The implementation of WebPaintBuffer will most likely be reference counted.

I used the term &quot;clone&quot; to indicate that the returned pointer should be freed, but that doesn&apos;t mean it has to be deep-copied :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398600</commentid>
    <comment_count>14</comment_count>
      <attachid>81117</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-05 01:10:18 -0700</bug_when>
    <thetext>Comment on attachment 81117
v2 patch

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

I&apos;m not sure whether you&apos;re still interested in this patch, but there are a number of style nits reported by the bot.  I&apos;m going to mark this R- for now because we&apos;ll at least need to clean up the style problems.  If you&apos;re still interested in the patch, please feel encouraged to upload a new version for review.

&gt; Source/WebKit/chromium/src/WebPopupMenuImpl.cpp:320
&gt; +#if WEBKIT_USING_PAINTSURFACE

This doesn&apos;t seem like the right style of define.  Wouldn&apos;t USE(PAINTSURFACE) or ENABLE(PAINTSURFACE) be more appropriate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535214</commentid>
    <comment_count>15</comment_count>
      <attachid>122319</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-01-12 15:15:36 -0800</bug_when>
    <thetext>Created attachment 122319
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535217</commentid>
    <comment_count>16</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-01-12 15:16:29 -0800</bug_when>
    <thetext>Will pull the surface stuff to a new patch. This imported the paint aggregator in a nice way. Lets get that landed.

@fishd: r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539874</commentid>
    <comment_count>17</comment_count>
      <attachid>122319</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-01-20 16:01:44 -0800</bug_when>
    <thetext>Comment on attachment 122319
Patch

OK... did you confirm that all/any downstream paint_aggregator.cc changes that may have occurred since the original patch were incorporated into this copy?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539935</commentid>
    <comment_count>18</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-01-20 16:53:28 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 122319 [details])

Yeah, I was amazed to find it hasn&apos;t been touched since January 2011 except for moves relating to content refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546202</commentid>
    <comment_count>19</comment_count>
      <attachid>124768</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-01-31 10:21:42 -0800</bug_when>
    <thetext>Created attachment 124768
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546529</commentid>
    <comment_count>20</comment_count>
      <attachid>124768</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 14:57:34 -0800</bug_when>
    <thetext>Comment on attachment 124768
Patch for landing

Clearing flags on attachment: 124768

Committed r106399: &lt;http://trac.webkit.org/changeset/106399&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546530</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 14:57:40 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81114</attachid>
            <date>2011-02-03 14:16:02 -0800</date>
            <delta_ts>2011-02-07 17:44:04 -0800</delta_ts>
            <desc>v1 patch</desc>
            <filename>paint_controller_1.txt</filename>
            <type>text/plain</type>
            <size>86016</size>
            <attacher name="Darin Fisher (:fishd, Google)">fishd</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3NTMyKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3
MyBAQAorMjAxMS0wMi0wMyAgRGFyaW4gRmlzaGVyICA8ZGFyaW5AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wb3J0IFBhaW50QWdncmVnYXRvciBhbmQgaW50cm9kdWNlIFdlYlBhaW50U3VyZmFjZSBBUEkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNzE1CisK
KyAgICAgICAgTm90ZSwgdGhpcyBjb2RlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgKGZvciBub3cp
LCBhbmQgY2FuIGJlIGVuYWJsZWQKKyAgICAgICAgdmlhIHRoZSBXRUJLSVRfVVNJTkdfUEFJTlRT
VVJGQUNFIG1hY3JvIGRlY2xhcmVkIGluIFdlYkNvbW1vbi5oLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggZG9lcyBub3QgaW5jbHVkZSBjaGFuZ2VzIHJlcXVpcmVkIGZvciBEUlQuCisKKyAgICAgICAg
KiBXZWJLaXQuZ3lwOgorICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHB1YmxpYy9X
ZWJDb21tb24uaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViUGFpbnRCdWZmZXIuaDogQWRkZWQuCisg
ICAgICAgICogcHVibGljL1dlYlBhaW50U3VyZmFjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJs
aWMvV2ViUGFpbnRTdXJmYWNlQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJQ
bHVnaW4uaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luOjpjbG9uZUJhY2tpbmdCdWZmZXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW46OmlzT3BhcXVlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGx1Z2luOjppc1RvcE1vc3QpOgorICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoK
KyAgICAgICAgKiBwdWJsaWMvV2ViV2lkZ2V0Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6Oldl
YldpZGdldENsaWVudDo6cGFpbnRTdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViV2lkZ2V0
Q2xpZW50OjpzY2hlZHVsZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYldpZGdldENs
aWVudDo6ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKiBzcmMv
Q2hyb21lQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6
OmludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNs
aWVudEltcGw6OnNjaGVkdWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xp
ZW50SW1wbDo6c2Nyb2xsKToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6aGlkZUhpZ2hsaWdodCk6
CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lSW1wbDo6cGFpbnRXaXRoQ29udGV4dCk6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5o
OgorICAgICAgICAqIHNyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6On5XZWJQbHVnaW5Db250YWlu
ZXJJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6OnJlc2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBv
cHVwTWVudUltcGw6OmludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBvcHVwTWVudUltcGw6OnNjcm9sbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVw
TWVudUltcGw6OnBhaW50KToKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51SW1wbC5oOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpjbG9uZVBhaW50QnVmZmVyRm9yQXJlYSk6
CisgICAgICAgICogc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJ
bXBsOjpzY3JvbGxTaXplKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVzaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNsb25lUGFpbnRC
dWZmZXJGb3JBcmVhKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RHcmFw
aGljc0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5l
ZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY2hlZHVsZUludmFs
aWRhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY2hlZHVsZVNjcm9sbCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY2hlZHVsZUFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphZGRQbHVnaW5Db250YWluZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVtb3ZlUGx1Z2luQ29udGFpbmVyKToKKyAgICAgICAgKiBz
cmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViV2lkZ2V0LmNwcDogQWRkZWQuCisg
ICAgICAgICogc3JjL3BhaW50aW5nL1BhaW50QWdncmVnYXRvci5jcHA6IEFkZGVkLgorICAgICAg
ICAqIHNyYy9wYWludGluZy9QYWludEFnZ3JlZ2F0b3IuaDogQWRkZWQuCisgICAgICAgICogc3Jj
L3BhaW50aW5nL1BhaW50Q29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAqIHNyYy9wYWlu
dGluZy9QYWludENvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgICogc3JjL3BhaW50aW5nL1Bh
aW50ZXIuaDogQWRkZWQuCisgICAgICAgICogdGVzdHMvUGFpbnRBZ2dyZWdhdG9yVGVzdC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpURVNUKToKKwogMjAxMS0wMi0wMSAgUGF2ZWwgUG9k
aXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQ
YXZlbCBGZWxkbWFuLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lv
biA3NzUzMikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2luZyBj
b3B5KQpAQCAtMzg1LDYgKzM4NSwxMSBAQAogICAgICAgICAgICAgICAgICdzcmMvTm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL05vdGlmaWNhdGlvblBy
ZXNlbnRlckltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL3BhaW50aW5nL0dyYXBoaWNz
Q29udGV4dEJ1aWxkZXIuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9wYWludGluZy9QYWludEFn
Z3JlZ2F0b3IuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL3BhaW50aW5nL1BhaW50QWdncmVn
YXRvci5oJywKKyAgICAgICAgICAgICAgICAnc3JjL3BhaW50aW5nL1BhaW50Q29udHJvbGxlci5j
cHAnLAorICAgICAgICAgICAgICAgICdzcmMvcGFpbnRpbmcvUGFpbnRDb250cm9sbGVyLmgnLAor
ICAgICAgICAgICAgICAgICdzcmMvcGFpbnRpbmcvUGFpbnRlci5oJywKICAgICAgICAgICAgICAg
ICAnc3JjL1BsYXRmb3JtQnJpZGdlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9QbGF0Zm9y
bU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvUGxhdGZvcm1N
ZXNzYWdlUG9ydENoYW5uZWwuaCcsCkBAIC01NTcsNiArNTYyLDcgQEAKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYlVSTEVycm9yLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJWaWV3SW1w
bC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVmlld0ltcGwuaCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJXaWRnZXQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYldvcmtl
ckJhc2UuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYldvcmtlckJhc2UuaCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcCcsCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQkocmV2aXNpb24gNzc1MzIpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBACiAg
ICAgICAgICAgICAndGVzdHMvSURCS2V5UGF0aFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9LZXlib2FyZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAor
ICAgICAgICAgICAgJ3Rlc3RzL1BhaW50QWdncmVnYXRvclRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9QT0RBcmVuYVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9QT0RJbnRlcnZh
bFRyZWVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUE9EUmVkQmxhY2tUcmVlVGVzdC5j
cHAnLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tbW9uLmgNCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21tb24uaAko
cmV2aXNpb24gNzc1MzIpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21t
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsMTAgQEAKICAgICAjZGVmaW5lIFdFQktJ
VF9VU0lOR19KU0MgMAogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChXRUJLSVRfVVNJTkdfUEFJTlRT
VVJGQUNFKQorICAgICNkZWZpbmUgV0VCS0lUX1VTSU5HX1BBSU5UU1VSRkFDRSAwCisjZW5kaWYK
KwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEV4cG9ydGVkIHN5bWJvbHMgbmVlZCB0byBi
ZSBhbm5vdGF0ZWQgd2l0aCBXRUJLSVRfQVBJCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlBhaW50QnVmZmVyLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJQYWludEJ1ZmZlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFpbnRCdWZmZXIuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
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
QUdFLgorICovCisKKyNpZm5kZWYgV2ViUGFpbnRCdWZmZXJfaAorI2RlZmluZSBXZWJQYWludEJ1
ZmZlcl9oCisKKyNpbmNsdWRlICJXZWJDYW52YXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
Ky8vIEEgYnVmZmVyIHVzZWQgdG8gcmVjZWl2ZSBzb2Z0d2FyZSByZW5kZXJlZCBvdXRwdXQgKHZp
YSBXZWJDYW52YXMpIHRoYXQgbWF5CisvLyBiZSBwYWludGVkIG9udG8gYSBXZWJQYWludFN1cmZh
Y2UuCitjbGFzcyBXZWJQYWludEJ1ZmZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViUGFp
bnRCdWZmZXIoKSB7fQorCisgICAgLy8gUmV0dXJucyBhIGNhbnZhcyB0aGF0IG1heSBiZSB1c2Vk
IHRvIG1vZGlmeSB0aGUgdW5kZXJseWluZyBwaXhlbHMgb2YKKyAgICAvLyB0aGlzIGJ1ZmZlci4K
KyAgICB2aXJ0dWFsIFdlYkNhbnZhcyogY2FudmFzKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViUGFpbnRTdXJmYWNlLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJQYWludFN1cmZhY2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlBhaW50U3VyZmFjZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJQYWludFN1cmZhY2VfaAorI2RlZmluZSBXZWJQYWludFN1cmZhY2Vf
aAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBXZWJQYWludEJ1ZmZlcjsKK2NsYXNzIFdlYlBhaW50U3VyZmFjZUNsaWVudDsKK3N0cnVjdCBX
ZWJQb2ludDsKK3N0cnVjdCBXZWJSZWN0Oworc3RydWN0IFdlYlNpemU7CisKK2NsYXNzIFdlYlBh
aW50U3VyZmFjZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHNldENsaWVudChXZWJQYWlu
dFN1cmZhY2VDbGllbnQqKSA9IDA7CisKKyAgICB2aXJ0dWFsIFdlYlBhaW50QnVmZmVyKiBjcmVh
dGVCdWZmZXIoY29uc3QgV2ViU2l6ZSYpID0gMDsKKworICAgIC8vIEVucXVldWVzIGEgcGFpbnQg
b2YgdGhlIHJlZ2lvbiBvZiB0aGUgYnVmZmVyIGdpdmVuIGJ5IHxzb3VyY2VSZWN0fCBpbnRvCisg
ICAgLy8gdGhlIHN1cmZhY2UgYXQgdGhlIHBvc2l0aW9uIGdpdmVuIGJ5IHxkZXN0aW5hdGlvblBv
aW50fC4KKyAgICAvLworICAgIC8vIFRoZSB8c291cmNlUmVjdHwgcGFyYW1ldGVyIGlzIHNwZWNp
ZmllZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlCisgICAgLy8gYnVmZmVyIGJlaW5n
IGNvcGllZC4gIFRoZSB8ZGVzdGluYXRpb25Qb2ludHwgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBp
bgorICAgIC8vIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgc3VyZmFjZSBiZWluZyBtb2Rp
ZmllZC4KKyAgICAvLworICAgIC8vIFRoaXMgbW9kaWZpY2F0aW9uIHRvIHRoZSBzdXJmYWNlIGRv
ZXMgbm90IHRha2UgZWZmZWN0IHVudGlsIGZsdXNoIGlzCisgICAgLy8gY2FsbGVkLgorICAgIC8v
CisgICAgLy8gTk9URTogVGhlIGdpdmVuIHBhaW50IGJ1ZmZlciBtdXN0IHJlbWFpbiB2YWxpZCB1
bnRpbCBmbHVzaCgpIGlzIGNhbGxlZCwKKyAgICAvLyBhbmQgdGhlIGJ1ZmZlciBtYXkgYmUgZGVs
ZXRlZCBvbmNlIGZsdXNoKCkgcmV0dXJucy4KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViUGFp
bnRCdWZmZXIqLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJQb2ludCYgZGVzdGlu
YXRpb25Qb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViUmVjdCYgc291cmNl
UmVjdCkgPSAwOworCisgICAgLy8gRW5xdWV1ZXMgYSBzY3JvbGwgb2YgdGhlIHJlZ2lvbiBvZiB0
aGUgc3VyZmFjZSBnaXZlbiBieSB8Y2xpcFJlY3R8IGJ5CisgICAgLy8gdGhlIGFtb3VudCBnaXZl
biBieSB8ZGVsdGF8LgorICAgIC8vIAorICAgIC8vIFRoaXMgbW9kaWZpY2F0aW9uIHRvIHRoZSBz
dXJmYWNlIGRvZXMgbm90IHRha2UgZWZmZWN0IHVudGlsIGZsdXNoIGlzCisgICAgLy8gY2FsbGVk
LgorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgV2ViUmVjdCYgY2xpcFJlY3QsIGNvbnN0
IFdlYlBvaW50JiBkZWx0YSkgPSAwOworCisgICAgLy8gRmx1c2hlcyBhbnkgZW5xdWV1ZWQgcGFp
bnQgYW5kIHNjcm9sbCBjb21tYW5kcy4KKyAgICAvLworICAgIC8vIFJldHVybnMgdHJ1ZSB0byBp
bmRpY2F0ZSB0aGF0IGEgZmx1c2ggd2FzIHNjaGVkdWxlZCwgYW5kIGlmIHRoZSBmbHVzaCBpcwor
ICAgIC8vIHN1Y2Nlc3NmdWwgdGhlbiwgV2ViUGFpbnRTdXJmYWNlQ2xpZW50OjpkaWRGbHVzaCB3
aWxsIGJlIGNhbGxlZC4gIEVsc2UsCisgICAgLy8gV2ViUGFpbnRTdXJmYWNlQ2xpZW50OjpkaWRS
ZXNldCB3aWxsIGJlIGNhbGxlZCwgaW5kaWNhdGluZyB0aGF0IHRoZQorICAgIC8vIGZsdXNoIGZh
aWxlZCBhbmQgbW9yZW92ZXIgdGhhdCB0aGUgc3VyZmFjZSBtdXN0IGJlIHJlcGFpbnRlZC4KKyAg
ICAvLworICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdW5hYmxlIHRvIGZsdXNoIGF0IHRoaXMgdGlt
ZSAoZS5nLiwgYmVjYXVzZSBhIHByaW9yCisgICAgLy8gZmx1c2ggaXMgc3RpbGwgaW4gcHJvZ3Jl
c3MpLgorICAgIHZpcnR1YWwgYm9vbCBmbHVzaCgpID0gMDsKKworcHJvdGVjdGVkOgorICAgIH5X
ZWJQYWludFN1cmZhY2UoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhaW50U3VyZmFjZUNs
aWVudC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
UGFpbnRTdXJmYWNlQ2xpZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJQYWludFN1cmZhY2VDbGllbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2ViUGFpbnRTdXJmYWNlQ2xpZW50X2gKKyNkZWZpbmUgV2ViUGFpbnRT
dXJmYWNlQ2xpZW50X2gKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhaW50U3Vy
ZmFjZTsKKworY2xhc3MgV2ViUGFpbnRTdXJmYWNlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBO
b3RpZmllcyB0aGUgY2xpZW50IHRvIGRyb3AgYW55IHJlZmVyZW5jZXMgaXQgbWF5IGhhdmUgdG8g
dGhlIHN1cmZhY2UKKyAgICAvLyBhcyB0aGUgc3VyZmFjZSBpcyBhYm91dCB0byBiZSBkZXN0cm95
ZWQuCisgICAgdmlydHVhbCB2b2lkIHdpbGxEZXN0cm95KCkgPSAwOworCisgICAgLy8gSW5kaWNh
dGVzIHRoYXQgYSBmbHVzaCBjb21tYW5kIGlzc3VlZCBvbiB0aGUgV2ViUGFpbnRTdXJmYWNlIGNv
bXBsZXRlZAorICAgIC8vIHN1Y2Nlc3NmdWxseS4gIEl0IGlzIG5vdyBPSyB0byBpc3N1ZSBhbm90
aGVyIGZsdXNoIGNvbW1hbmQuCisgICAgdmlydHVhbCB2b2lkIGRpZEZsdXNoKCkgPSAwOworCisg
ICAgLy8gSW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgZm9yIHRoZSBzdXJmYWNlIGhhcyBiZWVuIGxv
c3QgKGUuZy4sIGFzIGEgcmVzdWx0CisgICAgLy8gb2YgcmVzaXppbmcgdGhlIHN1cmZhY2UpLiAg
SWYgdGhpcyBpcyByZWNlaXZlZCB3aGlsZSBhIGZsdXNoIGlzIHBlbmRpbmcsCisgICAgLy8gdGhl
biBpdCBpbXBsaWVzIHRoYXQgdGhlIGZsdXNoIGZhaWxlZCB0byBjb21wbGV0ZS4gIEl0IGlzIG5v
dyBPSyB0bworICAgIC8vIGlzc3VlIGEgZmx1c2ggY29tbWFuZCwgYW5kIGl0IGlzIG5lY2Vzc2Fy
eSB0byByZXBhaW50IHRoZSBlbnRpcmUKKyAgICAvLyBzdXJmYWNlLgorICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZXNldCgpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpbi5oDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luLmgJKHJldmlz
aW9uIDc3NTMyKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFz
cyBXZWJEYXRhU291cmNlOwogY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJJbnB1dEV2ZW50Owor
Y2xhc3MgV2ViUGFpbnRCdWZmZXI7CiBjbGFzcyBXZWJQbHVnaW5Db250YWluZXI7CiBjbGFzcyBX
ZWJVUkxSZXNwb25zZTsKIHN0cnVjdCBXZWJDdXJzb3JJbmZvOwpAQCAtNjUsMTAgKzY2LDIwIEBA
IHB1YmxpYzoKICAgICAgICAgY29uc3QgV2ViUmVjdCYgZnJhbWVSZWN0LCBjb25zdCBXZWJSZWN0
JiBjbGlwUmVjdCwKICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlJlY3Q+JiBjdXRPdXRzUmVj
dHMsIGJvb2wgaXNWaXNpYmxlKSA9IDA7CiAgICAgCi0gICAgLy8gSWYgdGhlIHBsdWdpbiBpbnN0
YW5jZSBpcyBiYWNrZWQgYnkgYW4gT3BlbkdMIHRleHR1cmUsIHJldHVybiBpdHMgSUQgaW4gdGhl
Ci0gICAgLy8gY29tcG9zaXRvcnMgbmFtZXNwYWNlLiBPdGhlcndpc2UgcmV0dXJuIDAuIFJldHVy
bnMgMCBieSBkZWZhdWx0LgorICAgIC8vIElmIHRoZSBwbHVnaW4gaW5zdGFuY2UgaXMgYmFja2Vk
IGJ5IGFuIE9wZW5HTCB0ZXh0dXJlLCByZXR1cm4gaXRzIElEIGluCisgICAgLy8gdGhlIGNvbXBv
c2l0b3JzIG5hbWVzcGFjZS4gIE90aGVyd2lzZSByZXR1cm4gMC4KICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGdldEJhY2tpbmdUZXh0dXJlSWQoKSB7IHJldHVybiAwOyB9CiAKKyAgICAvLyBJZiB0aGUg
cGx1Z2luIGluc3RhbmNlIGlzIGJhY2tlZCBieSBhIHBhaW50IGJ1ZmZlciwgdGhlbiByZXR1cm4g
aXQuCisgICAgLy8gVGhpcyBtYXkgYmUgcGFzc2VkIHRvIFdlYlBhaW50U3VyZmFjZTo6cGFpbnQo
KSB0byBtaW5pbWl6ZSBidWZmZXIgY29waWVzCisgICAgLy8gd2hlbiByZW5kZXJpbmcgYSBwbHVn
aW4uICBTdWNoIGFuIG9wdGltaXphdGlvbiBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gdGhlCisgICAg
Ly8gcGx1Z2luIGlzIGtub3duIHRvIGJlIG9wYXF1ZSBhbmQgdG9wLW1vc3QuICBUaGUgY2FsbGVy
IGlzIHJlc3BvbnNpYmxlIGZvcgorICAgIC8vIGZyZWVpbmcgdGhlIHJldHVybmVkIHBhaW50IGJ1
ZmZlciB3aGVuIHRoZXkgYXJlIGRvbmUgd2l0aCBpdC4KKyAgICB2aXJ0dWFsIFdlYlBhaW50QnVm
ZmVyKiBjbG9uZUJhY2tpbmdCdWZmZXIoKSB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
c1RvcE1vc3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUZvY3VzKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlzaWJpbGl0eShi
b29sKSA9IDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdl
dC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lk
Z2V0LmgJKHJldmlzaW9uIDc3NTMyKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViV2lkZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw2ICsxMzMsMTAgQEAgcHVibGljOgog
ICAgIC8vIHRvIHJlbmRlciBpdHMgY29udGVudHMuCiAgICAgdmlydHVhbCBib29sIGlzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpIGNvbnN0ID0gMDsKIAorICAgIC8vIE9wdGlvbmFsbHkg
ZW5hYmxlIHRoZSBkcmF3aW5nIG9mIHBhaW50IGJvcmRlcnMgdG8gYXNzaXN0IGluIHZpc3VhbAor
ICAgIC8vIGRlYnVnZ2luZyBvZiB0aGUgcmVuZGVyZWQgd2lkZ2V0LgorICAgIFdFQktJVF9BUEkg
c3RhdGljIHZvaWQgc2hvd0RlYnVnUGFpbnRSZWN0cyhib29sKTsKKwogcHJvdGVjdGVkOgogICAg
IH5XZWJXaWRnZXQoKSB7IH0KIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJXaWRnZXRDbGllbnQuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCShyZXZpc2lvbiA3NzUzMikKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCwxMSArMzgsMTggQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFdlYlBhaW50
U3VyZmFjZTsKIGNsYXNzIFdlYldpZGdldDsKIHN0cnVjdCBXZWJDdXJzb3JJbmZvOwogCiBjbGFz
cyBXZWJXaWRnZXRDbGllbnQgewogcHVibGljOgorI2lmIFdFQktJVF9VU0lOR19QQUlOVFNVUkZB
Q0UKKyAgICAvLyBSZXR1cm5zIHRoZSBzdXJmYWNlIHRvIHBhaW50IHRoZSBXZWJXaWRnZXQgaW50
by4gIFRoZSBlbWJlZGRlciBzdXBwbGllcworICAgIC8vIHRoaXMgc3VyZmFjZSBhbmQgaXMgcmVz
cG9uc2libGUgZm9yIG1hbmFnaW5nIGl0cyBsaWZldGltZS4gIFRoZSBzdXJmYWNlCisgICAgLy8g
aXMgYXNzdW1lZCB0byBzdGFydCBvdXQgaW4gdGhlIHVuaW5pdGlhbGl6ZWQgc3RhdGUuCisgICAg
dmlydHVhbCBXZWJQYWludFN1cmZhY2UqIHBhaW50U3VyZmFjZSgpIHsgcmV0dXJuIDA7IH0KKyNl
bHNlCiAgICAgLy8gQ2FsbGVkIHdoZW4gYSByZWdpb24gb2YgdGhlIFdlYldpZGdldCBuZWVkcyB0
byBiZSByZS1wYWludGVkLgogICAgIHZpcnR1YWwgdm9pZCBkaWRJbnZhbGlkYXRlUmVjdChjb25z
dCBXZWJSZWN0JikgeyB9CiAKQEAgLTUwLDE0ICs1NywxNSBAQCBwdWJsaWM6CiAgICAgLy8gc2Ny
b2xsZWQgYnkgdGhlIHNwZWNpZmllZCBkeCBhbmQgZHkgYW1vdW50cy4KICAgICB2aXJ0dWFsIHZv
aWQgZGlkU2Nyb2xsUmVjdChpbnQgZHgsIGludCBkeSwgY29uc3QgV2ViUmVjdCYgY2xpcFJlY3Qp
IHsgfQogCi0gICAgLy8gQ2FsbGVkIHdoZW4gdGhlIGNvbXBvc2l0b3IgZW5hYmxlcyBvciBkaXNh
Ymxlcy4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KGJvb2wgYWN0aXZlKSB7IH0KKyAgICAvLyBDYWxsZWQgd2hlbiBhIGNhbGwgdG8gV2ViV2lkZ2V0
OjphbmltYXRlIGlzIHJlcXVpcmVkCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9u
KCkgeyB9CisjZW5kaWYKIAogICAgIC8vIENhbGxlZCB3aGVuIGEgY2FsbCB0byBXZWJXaWRnZXQ6
OmNvbXBvc2l0ZSBpcyByZXF1aXJlZAogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0
ZSgpIHsgfQogCi0gICAgLy8gQ2FsbGVkIHdoZW4gYSBjYWxsIHRvIFdlYldpZGdldDo6YW5pbWF0
ZSBpcyByZXF1aXJlZAotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIHsgfQor
ICAgIC8vIENhbGxlZCB3aGVuIHRoZSBjb21wb3NpdG9yIGVuYWJsZXMgb3IgZGlzYWJsZXMuCisg
ICAgdmlydHVhbCB2b2lkIGRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhib29sIGFj
dGl2ZSkgeyB9CiAKICAgICAvLyBDYWxsZWQgd2hlbiB0aGUgd2lkZ2V0IGFjcXVpcmVzIG9yIGxv
c2VzIGZvY3VzLCByZXNwZWN0aXZlbHkuCiAgICAgdmlydHVhbCB2b2lkIGRpZEZvY3VzKCkgeyB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcA0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudElt
cGwuY3BwCShyZXZpc2lvbiA3NzUzMikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0No
cm9tZUNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTEsMTUgKzUxMSwxMyBAQCB2
b2lkIENocm9tZUNsaWVudEltcGw6OmludmFsaWRhdGVDb250ZW50CiB7CiAgICAgaWYgKHVwZGF0
ZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CisKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0gICAgaWYgKCFtX3dlYlZpZXctPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZSgpKSB7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCi0g
ICAgICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRJbnZhbGlkYXRlUmVjdCh1cGRhdGVS
ZWN0KTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgfSBlbHNlCisgICAg
aWYgKG1fd2ViVmlldy0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpCiAgICAgICAg
IG1fd2ViVmlldy0+aW52YWxpZGF0ZVJvb3RMYXllclJlY3QodXBkYXRlUmVjdCk7CisgICAgZWxz
ZQogI2VuZGlmCisgICAgICAgIG1fd2ViVmlldy0+c2NoZWR1bGVJbnZhbGlkYXRpb24odXBkYXRl
UmVjdCk7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6aW52YWxpZGF0ZUNvbnRlbnRzRm9y
U2xvd1Njcm9sbChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIGltbWVkaWF0ZSkKQEAg
LTUzMSw3ICs1MjksNyBAQCB2b2lkIENocm9tZUNsaWVudEltcGw6OmludmFsaWRhdGVDb250ZW50
CiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogdm9pZCBDaHJvbWVDbGllbnRJ
bXBsOjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7Ci0gICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+c2No
ZWR1bGVBbmltYXRpb24oKTsKKyAgICBtX3dlYlZpZXctPnNjaGVkdWxlQW5pbWF0aW9uKCk7CiB9
CiAjZW5kaWYKIApAQCAtNTQwLDE4ICs1MzgsMTYgQEAgdm9pZCBDaHJvbWVDbGllbnRJbXBsOjpz
Y3JvbGwoCiAgICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgbV93ZWJWaWV3LT5o
aWRlUG9wdXBzKCk7CisKKyAgICBpbnQgZHggPSBzY3JvbGxEZWx0YS53aWR0aCgpOworICAgIGlu
dCBkeSA9IHNjcm9sbERlbHRhLmhlaWdodCgpOworCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQotICAgIGlmICghbV93ZWJWaWV3LT5pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3Rp
dmUoKSkgewotI2VuZGlmCi0gICAgICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKSB7Ci0gICAg
ICAgICAgICBpbnQgZHggPSBzY3JvbGxEZWx0YS53aWR0aCgpOwotICAgICAgICAgICAgaW50IGR5
ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7Ci0gICAgICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgp
LT5kaWRTY3JvbGxSZWN0KGR4LCBkeSwgY2xpcFJlY3QpOwotICAgICAgICB9Ci0jaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIH0gZWxzZQorICAgIGlmIChtX3dlYlZpZXctPmlz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKQogICAgICAgICBtX3dlYlZpZXctPnNjcm9s
bFJvb3RMYXllclJlY3Qoc2Nyb2xsRGVsdGEsIGNsaXBSZWN0KTsKKyAgICBlbHNlCiAjZW5kaWYK
KyAgICAgICAgbV93ZWJWaWV3LT5zY2hlZHVsZVNjcm9sbChkeCwgZHksIGNsaXBSZWN0KTsKIH0K
IAogSW50UG9pbnQgQ2hyb21lQ2xpZW50SW1wbDo6c2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9p
bnQmKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNB
Z2VudEltcGwuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCShyZXZpc2lvbiA3NzUzMikKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50UmVj
dC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtMzI2LDEwICszMjgsNyBAQCB2b2lkIFdlYkRldlRvb2xz
QWdlbnRJbXBsOjpoaWRlSGlnaGxpZ2h0CiAgICAgLy8gRklYTUU6IElzIGl0IGltcG9ydGFudCB0
byBqdXN0IGludmFsaWRhdGUgdGhlIHJlY3Qgb2YgdGhlIG5vZGUgcmVnaW9uCiAgICAgLy8gZ2l2
ZW4gdGhhdCB0aGlzIGlzIG5vdCBvbiBhIGNyaXRpY2FsIGNvZGVwYXRoPyAgSW4gb3JkZXIgdG8g
ZG8gc28sIHdlJ2QKICAgICAvLyBoYXZlIHRvIHRha2Ugc2Nyb2xsaW5nIGludG8gYWNjb3VudC4K
LSAgICBjb25zdCBXZWJTaXplJiBzaXplID0gbV93ZWJWaWV3SW1wbC0+c2l6ZSgpOwotICAgIFdl
YlJlY3QgZGFtYWdlZFJlY3QoMCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOwotICAgIGlm
IChtX3dlYlZpZXdJbXBsLT5jbGllbnQoKSkKLSAgICAgICAgbV93ZWJWaWV3SW1wbC0+Y2xpZW50
KCktPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKKyAgICBtX3dlYlZpZXdJbXBsLT5z
Y2hlZHVsZUludmFsaWRhdGlvbihJbnRSZWN0KEludFBvaW50KCksIG1fd2ViVmlld0ltcGwtPnNp
emUoKSkpOwogfQogCiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpwb3B1bGF0ZVNldHRpbmco
Y29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyogdmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24gNzc1MzIpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05OSw2ICs5OSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGlzdG9y
eUl0ZW0uaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAicGFp
bnRpbmcvR3JhcGhpY3NDb250ZXh0QnVpbGRlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJwYWludGluZy9HcmFwaGljc0NvbnRleHRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUGVyZm9y
bWFuY2UuaCIKQEAgLTE5MDQsOSArMTkwNSw4IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpsYXlvdXQo
KQogICAgICAgICB2aWV3LT51cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7
CiB9CiAKLXZvaWQgV2ViRnJhbWVJbXBsOjpwYWludFdpdGhDb250ZXh0KEdyYXBoaWNzQ29udGV4
dCYgZ2MsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCit2b2lkIFdlYkZyYW1lSW1wbDo6cGFpbnRXaXRo
Q29udGV4dChHcmFwaGljc0NvbnRleHQmIGdjLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7
Ci0gICAgSW50UmVjdCBkaXJ0eVJlY3QocmVjdCk7CiAgICAgZ2Muc2F2ZSgpOwogICAgIGlmICht
X2ZyYW1lLT5kb2N1bWVudCgpICYmIGZyYW1lVmlldygpKSB7CiAgICAgICAgIGdjLmNsaXAoZGly
dHlSZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5o
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBs
LmgJKHJldmlzaW9uIDc3NTMyKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJh
bWVJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGxheW91dCgpOwogICAgIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVj
dCYpOwotICAgIHZvaWQgcGFpbnRXaXRoQ29udGV4dChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBXZWJSZWN0Jik7CisgICAgdm9pZCBwYWludFdpdGhDb250ZXh0KFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2b2lkIGNyZWF0
ZUZyYW1lVmlldygpOwogCiAgICAgc3RhdGljIFdlYkZyYW1lSW1wbCogZnJvbUZyYW1lKFdlYkNv
cmU6OkZyYW1lKiBmcmFtZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQ
bHVnaW5Db250YWluZXJJbXBsLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCShyZXZpc2lvbiA3NzUzMikKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NTAsMTAgKzQ1MCwxNyBAQCBXZWJQbHVnaW5Db250YWluZXJJbXBs
OjpXZWJQbHVnaW5Db250YWluCiAgICAgLCBtX3BsYXRmb3JtTGF5ZXIoUGx1Z2luTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKDApKQogI2VuZGlmCiB7CisgICAgV2ViVmlld0ltcGwqIHZpZXcgPSBXZWJW
aWV3SW1wbDo6ZnJvbVBhZ2UobV9lbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5wYWdlKCkp
OworICAgIGlmICh2aWV3KQorICAgICAgICB2aWV3LT5hZGRQbHVnaW5Db250YWluZXIodGhpcyk7
CiB9CiAKIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6On5XZWJQbHVnaW5Db250YWluZXJJbXBsKCkK
IHsKKyAgICBXZWJWaWV3SW1wbCogdmlldyA9IFdlYlZpZXdJbXBsOjpmcm9tUGFnZShtX2VsZW1l
bnQtPmRvY3VtZW50KCktPmZyYW1lKCktPnBhZ2UoKSk7CisgICAgaWYgKHZpZXcpCisgICAgICAg
IHZpZXctPnJlbW92ZVBsdWdpbkNvbnRhaW5lcih0aGlzKTsKKwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9wbHVnaW5Mb2FkT2JzZXJ2ZXJzLnNpemUoKTsgKytpKQogICAgICAgICBtX3Bs
dWdpbkxvYWRPYnNlcnZlcnNbaV0tPmNsZWFyUGx1Z2luQ29udGFpbmVyKCk7CiAgICAgbV93ZWJQ
bHVnaW4tPmRlc3Ryb3koKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBv
cHVwTWVudUltcGwuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViUG9wdXBNZW51SW1wbC5jcHAJKHJldmlzaW9uIDc3NTMyKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
NSwxMCArMTQ1LDE4IEBAIHZvaWQgV2ViUG9wdXBNZW51SW1wbDo6cmVzaXplKGNvbnN0IFdlYlMK
ICAgICAgICAgbV93aWRnZXQtPnNldEZyYW1lUmVjdChuZXdHZW9tZXRyeSk7CiAgICAgfQogCisj
aWYgV0VCS0lUX1VTSU5HX1BBSU5UU1VSRkFDRQorICAgIG1fcGFpbnRDb250cm9sbGVyLmNsZWFy
KCk7CisgICAgaWYgKG1fY2xpZW50KSB7CisgICAgICAgIG1fcGFpbnRDb250cm9sbGVyID0gUGFp
bnRDb250cm9sbGVyOjpjcmVhdGUodGhpcywgbV9jbGllbnQtPnBhaW50U3VyZmFjZSgpLCBtX3Np
emUpOworICAgICAgICBtX3BhaW50Q29udHJvbGxlci0+c2NoZWR1bGVJbnZhbGlkYXRpb24obV93
aWRnZXQtPmZyYW1lUmVjdCgpKTsKKyAgICB9CisjZWxzZQogICAgIGlmIChtX2NsaWVudCkgewog
ICAgICAgICBXZWJSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhl
aWdodCk7CiAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7
CiAgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgV2ViUG9wdXBNZW51SW1wbDo6YW5pbWF0ZSgpCkBA
IC0yODQsOCArMjkyLDEzIEBAIHZvaWQgV2ViUG9wdXBNZW51SW1wbDo6aW52YWxpZGF0ZUNvbnRl
bnQKIHsKICAgICBpZiAocGFpbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOworI2lm
IFdFQktJVF9VU0lOR19QQUlOVFNVUkZBQ0UKKyAgICBpZiAobV9wYWludENvbnRyb2xsZXIpCisg
ICAgICAgIG1fcGFpbnRDb250cm9sbGVyLT5zY2hlZHVsZUludmFsaWRhdGlvbihwYWludFJlY3Qp
OworI2Vsc2UKICAgICBpZiAobV9jbGllbnQpCiAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlk
YXRlUmVjdChwYWludFJlY3QpOworI2VuZGlmCiB9CiAKIHZvaWQgV2ViUG9wdXBNZW51SW1wbDo6
aW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0
LCBib29sIGltbWVkaWF0ZSkKQEAgLTMwMSwxMSArMzE0LDE3IEBAIHZvaWQgV2ViUG9wdXBNZW51
SW1wbDo6c2Nyb2xsKGNvbnN0IEludFMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEludFJlY3QmIHNjcm9sbFJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKKyAgICBpbnQgZHggPSBzY3JvbGxEZWx0YS53aWR0
aCgpOworICAgIGludCBkeSA9IHNjcm9sbERlbHRhLmhlaWdodCgpOworCisjaWYgV0VCS0lUX1VT
SU5HX1BBSU5UU1VSRkFDRQorICAgIGlmIChtX3BhaW50Q29udHJvbGxlcikKKyAgICAgICAgbV9w
YWludENvbnRyb2xsZXItPnNjaGVkdWxlU2Nyb2xsKGR4LCBkeSwgY2xpcFJlY3QpOworI2Vsc2UK
ICAgICBpZiAobV9jbGllbnQpIHsKLSAgICAgICAgaW50IGR4ID0gc2Nyb2xsRGVsdGEud2lkdGgo
KTsKLSAgICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7CiAgICAgICAgIG1fY2xp
ZW50LT5kaWRTY3JvbGxSZWN0KGR4LCBkeSwgY2xpcFJlY3QpOwogICAgIH0KKyNlbmRpZgogfQog
CiBJbnRQb2ludCBXZWJQb3B1cE1lbnVJbXBsOjpzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2lu
dCYgcG9pbnQpIGNvbnN0CkBAIC0zNDgsNCArMzY3LDE2IEBAIHZvaWQgV2ViUG9wdXBNZW51SW1w
bDo6cG9wdXBDbG9zZWQoRnJhbWUKICAgICBtX2NsaWVudC0+Y2xvc2VXaWRnZXRTb29uKCk7CiB9
CiAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFBhaW50ZXIKKworI2lmIFdFQktJVF9VU0lO
R19QQUlOVFNVUkZBQ0UKK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChyZWN0LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fd2lkZ2V0LT5wYWludCgmY29udGV4dCwgcmVj
dCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgNCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgJKHJldmlzaW9uIDc3NTMy
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAjZGVmaW5lIFdlYlBvcHVwTWVudUltcGxfaAog
CiAjaW5jbHVkZSAiRnJhbWVsZXNzU2Nyb2xsVmlld0NsaWVudC5oIgorI2luY2x1ZGUgInBhaW50
aW5nL1BhaW50Q29udHJvbGxlci5oIgorI2luY2x1ZGUgInBhaW50aW5nL1BhaW50ZXIuaCIKICNp
bmNsdWRlICJXZWJQb2ludC5oIgogI2luY2x1ZGUgIldlYlBvcHVwTWVudS5oIgogI2luY2x1ZGUg
IldlYlNpemUuaCIKQEAgLTU1LDYgKzU3LDkgQEAgc3RydWN0IFdlYlJlY3Q7CiAKIGNsYXNzIFdl
YlBvcHVwTWVudUltcGwgOiBwdWJsaWMgV2ViUG9wdXBNZW51LAogICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1YmxpYyBXZWJDb3JlOjpGcmFtZWxlc3NTY3JvbGxWaWV3Q2xpZW50LAorI2lmIFdF
QktJVF9VU0lOR19QQUlOVFNVUkZBQ0UKKyAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
UGFpbnRlciwKKyNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBSZWZDb3Vu
dGVkPFdlYlBvcHVwTWVudUltcGw+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKQEAgLTEyMSw2ICsxMjYsMTUgQEAgcHVibGljOgogICAgIC8vIFdlYkNvcmU6OkZyYW1l
bGVzc1Njcm9sbFZpZXdDbGllbnQgbWV0aG9kczoKICAgICB2aXJ0dWFsIHZvaWQgcG9wdXBDbG9z
ZWQoV2ViQ29yZTo6RnJhbWVsZXNzU2Nyb2xsVmlldyopOwogCisjaWYgV0VCS0lUX1VTSU5HX1BB
SU5UU1VSRkFDRQorICAgIC8vIFBhaW50ZXIgbWV0aG9kczoKKyAgICAvL3ZpcnR1YWwgdm9pZCBh
bmltYXRlKCkgeyB9CisgICAgLy92aXJ0dWFsIHZvaWQgbGF5b3V0KCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViUGFpbnRCdWZmZXI+IGNsb25lUGFp
bnRCdWZmZXJGb3JBcmVhKAorICAgICAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgV2ViQ29y
ZTo6SW50UG9pbnQqKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKwogICAgIFdlYldpZGdldENsaWVu
dCogbV9jbGllbnQ7CiAgICAgV2ViU2l6ZSBtX3NpemU7CiAKQEAgLTEyOSw2ICsxNDMsMTAgQEAg
cHVibGljOgogICAgIC8vIFRoaXMgaXMgYSBub24tb3duaW5nIHJlZi4gIFRoZSBwb3B1cCB3aWxs
IG5vdGlmeSB1cyB2aWEgcG9wdXBDbG9zZWQoKQogICAgIC8vIGJlZm9yZSBpdCBpcyBkZXN0cm95
ZWQuCiAgICAgV2ViQ29yZTo6RnJhbWVsZXNzU2Nyb2xsVmlldyogbV93aWRnZXQ7CisKKyNpZiBX
RUJLSVRfVVNJTkdfUEFJTlRTVVJGQUNFCisgICAgT3duUHRyPFBhaW50Q29udHJvbGxlcj4gbV9w
YWludENvbnRyb2xsZXI7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHANCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNw
cAkocmV2aXNpb24gNzc1MzIpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3Jv
bGxiYXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDExICsxMTAsMTEgQEAgdm9pZCBX
ZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGwoU2Nyb2xsRGlyZQogICAgIFdlYkNvcmU6OlNjcm9sbERp
cmVjdGlvbiBkaXI7CiAgICAgYm9vbCBob3Jpem9udGFsID0gbV9zY3JvbGxiYXItPm9yaWVudGF0
aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcjsKICAgICBpZiAoZGlyZWN0aW9uID09IFNjcm9s
bEZvcndhcmQpCi0gICAgICAgIGRpciA9IGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9s
bERvd247CisgICAgICAgIGRpciA9IGhvcml6b250YWwgPyBXZWJDb3JlOjpTY3JvbGxSaWdodCA6
IFdlYkNvcmU6OlNjcm9sbERvd247CiAgICAgZWxzZQotICAgICAgICBkaXIgPSBob3Jpem9udGFs
ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwOworICAgICAgICBkaXIgPSBob3Jpem9udGFsID8gV2Vi
Q29yZTo6U2Nyb2xsTGVmdCA6IFdlYkNvcmU6OlNjcm9sbFVwOwogCi0gICAgV2ViQ29yZTo6U2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbChkaXIsIHN0YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9sbEdyYW51
bGFyaXR5PihncmFudWxhcml0eSksIG11bHRpcGxpZXIpOworICAgIFNjcm9sbGFibGVBcmVhOjpz
Y3JvbGwoZGlyLCBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eT4oZ3JhbnVs
YXJpdHkpLCBtdWx0aXBsaWVyKTsKIH0KIAogdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpwYWludChX
ZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKQEAgLTI1Myw3ICsyNTMsNyBA
QCBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uS2V5RG93bihjb25zdCBXCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1pbnQgV2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK2ludCBXZWJTY3JvbGxiYXJJbXBs
OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAogewog
ICAgIHJldHVybiAob3JpZW50YXRpb24gPT0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkpID8g
KG1fc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6
IDA7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5j
cHAJKHJldmlzaW9uIDc3NTMyKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NTUsMjIgKzk1NSwyMiBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjpyZXNpemUoY29uc3QgV2ViU2l6ZSYgCiAgICAgICAgIG1haW5GcmFtZUltcGwoKS0+
ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRSZXNpemVFdmVudCgpOwogICAgIH0KIAotICAg
IGlmIChtX2NsaWVudCkgewotICAgICAgICBXZWJSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIG1fc2l6
ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7Ci0gICAgICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdBY3RpdmUoKSkgeworICAgIFdlYlJlY3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndp
ZHRoLCBtX3NpemUuaGVpZ2h0KTsKKyAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0
aXZlKCkpIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgICAgICBp
bnZhbGlkYXRlUm9vdExheWVyUmVjdChkYW1hZ2VkUmVjdCk7CisgICAgICAgIGludmFsaWRhdGVS
b290TGF5ZXJSZWN0KGRhbWFnZWRSZWN0KTsKKyAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikK
KyAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cmVzaXplT25zY3JlZW5Db250ZW50KEludFNp
emUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdo
dCkpKTsKICNlbmRpZgotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRJ
bnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7Ci0gICAgfQotCi0jaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotICAgIGlmIChtX2xheWVyUmVuZGVyZXIgJiYgaXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQWN0aXZlKCkpIHsKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yZXNpemVPbnNj
cmVlbkNvbnRlbnQoSW50U2l6ZShzdGQ6Om1heCgxLCBtX3NpemUud2lkdGgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KDEs
IG1fc2l6ZS5oZWlnaHQpKSk7Ci0gICAgfQorICAgIH0gZWxzZSB7CisjaWYgV0VCS0lUX1VTSU5H
X1BBSU5UU1VSRkFDRQorICAgICAgICBtX3BhaW50Q29udHJvbGxlci5jbGVhcigpOworICAgICAg
ICBpZiAobV9jbGllbnQpCisgICAgICAgICAgICBtX3BhaW50Q29udHJvbGxlciA9IFBhaW50Q29u
dHJvbGxlcjo6Y3JlYXRlKHRoaXMsIG1fY2xpZW50LT5wYWludFN1cmZhY2UoKSwgbV9zaXplKTsK
ICNlbmRpZgorICAgICAgICBzY2hlZHVsZUludmFsaWRhdGlvbihkYW1hZ2VkUmVjdCk7CisgICAg
fQogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlKCkKQEAgLTIwMDcsNyArMjAwNywzOCBA
QCB2b2lkIFdlYlZpZXdJbXBsOjpwZXJmb3JtQ3VzdG9tQ29udGV4dE1lCiAgICAgbV9wYWdlLT5j
b250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y2xlYXJDb250ZXh0TWVudSgpOwogfQogCi0vLyBXZWJW
aWV3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBQYWludGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgV2ViVmlld0lt
cGw6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBBU1NFUlQoIWlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKTsKKworICAg
IFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CisgICAgaWYgKHdlYmZy
YW1lKQorICAgICAgICB3ZWJmcmFtZS0+cGFpbnRXaXRoQ29udGV4dChjb250ZXh0LCByZWN0KTsK
K30KKworUGFzc093blB0cjxXZWJQYWludEJ1ZmZlcj4gV2ViVmlld0ltcGw6OmNsb25lUGFpbnRC
dWZmZXJGb3JBcmVhKGNvbnN0IEludFJlY3QmIGFyZWEsIEludFBvaW50KiBidWZmZXJPcmlnaW4p
Cit7CisgICAgLy8gUHJlc2VudGx5LCBvbmx5IHBsdWdpbnMgc3VwcG9ydCB0aGlzIG9wdGltaXph
dGlvbi4KKyAgICBmb3IgKFBsdWdpbkNvbnRhaW5lclNldDo6aXRlcmF0b3IgaXQgPSBtX3BsdWdp
bkNvbnRhaW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9wbHVnaW5Db250YWluZXJzLmVuZCgpOyArK2l0
KSB7CisgICAgICAgIFdlYlBsdWdpbkNvbnRhaW5lckltcGwqIGNvbnRhaW5lciA9ICppdDsKKwor
ICAgICAgICBXZWJQbHVnaW4qIHBsdWdpbiA9IGNvbnRhaW5lci0+cGx1Z2luKCk7CisgICAgICAg
IGlmICghcGx1Z2luLT5pc09wYXF1ZSgpIHx8ICFwbHVnaW4tPmlzVG9wTW9zdCgpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgSW50UmVjdCBwbHVnaW5SZWN0ID0gY29udGFpbmVy
LT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnRhaW5lci0+ZnJhbWVSZWN0KCkpOworICAg
ICAgICBpZiAoIXBsdWdpblJlY3QuY29udGFpbnMoYXJlYSkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAqYnVmZmVyT3JpZ2luID0gcGx1Z2luUmVjdC5sb2NhdGlvbigpOworICAg
ICAgICByZXR1cm4gcGx1Z2luLT5jbG9uZUJhY2tpbmdCdWZmZXIoKTsKKyAgICB9CisgICAgcmV0
dXJuIDA7Cit9CisKKy8vIFdlYlZpZXdJbXBsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogYm9vbCBXZWJWaWV3SW1wbDo6
c2V0RHJvcEVmZmVjdChib29sIGFjY2VwdCkKIHsKQEAgLTIyNjcsMTIgKzIyOTgsMTMgQEAgdm9p
ZCBXZWJWaWV3SW1wbDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoVwogICAgIGlmIChtX2lzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSkKICAgICAgICAgaW52YWxpZGF0ZVJvb3RMYXllclJlY3Qo
ZGFtYWdlZFJlY3QpOwogICAgIGVsc2UKLSAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVS
ZWN0KGRhbWFnZWRSZWN0KTsKKyAgICAgICAgc2NoZWR1bGVJbnZhbGlkYXRpb24oZGFtYWdlZFJl
Y3QpOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKQog
ewotICAgIG1fY2xpZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworICAgIGlmIChtX2NsaWVudCkK
KyAgICAgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CiB9CiAKIApAQCAtMjQzOSw0
ICsyNDcxLDQ3IEBAIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBXZWJWaWV3SW1wbDo6Z3JhcGgKICAg
ICByZXR1cm4gMDsKIH0KIAordm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVJbnZhbGlkYXRpb24o
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyNpZiBXRUJLSVRfVVNJTkdfUEFJTlRTVVJGQUNFCisg
ICAgaWYgKG1fcGFpbnRDb250cm9sbGVyKQorICAgICAgICBtX3BhaW50Q29udHJvbGxlci0+c2No
ZWR1bGVJbnZhbGlkYXRpb24ocmVjdCk7CisjZWxzZQorICAgIGlmIChtX2NsaWVudCkKKyAgICAg
ICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KHJlY3QpOworI2VuZGlmCit9CisKK3ZvaWQg
V2ViVmlld0ltcGw6OnNjaGVkdWxlU2Nyb2xsKGludCBkeCwgaW50IGR5LCBjb25zdCBJbnRSZWN0
JiBjbGlwUmVjdCkKK3sKKyNpZiBXRUJLSVRfVVNJTkdfUEFJTlRTVVJGQUNFCisgICAgaWYgKG1f
cGFpbnRDb250cm9sbGVyKQorICAgICAgICBtX3BhaW50Q29udHJvbGxlci0+c2NoZWR1bGVTY3Jv
bGwoZHgsIGR5LCBjbGlwUmVjdCk7CisjZWxzZQorICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAg
bV9jbGllbnQtPmRpZFNjcm9sbFJlY3QoZHgsIGR5LCBjbGlwUmVjdCk7CisjZW5kaWYKK30KKwor
dm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVBbmltYXRpb24oKQoreworI2lmIFdFQktJVF9VU0lO
R19QQUlOVFNVUkZBQ0UKKyAgICBpZiAobV9wYWludENvbnRyb2xsZXIpCisgICAgICAgIG1fcGFp
bnRDb250cm9sbGVyLT5zY2hlZHVsZUFuaW1hdGlvbigpOworI2Vsc2UKKyAgICBpZiAobV9jbGll
bnQpCisgICAgICAgIG1fY2xpZW50LT5zY2hlZHVsZUFuaW1hdGlvbigpOworI2VuZGlmCit9CisK
K3ZvaWQgV2ViVmlld0ltcGw6OmFkZFBsdWdpbkNvbnRhaW5lcihXZWJQbHVnaW5Db250YWluZXJJ
bXBsKiBjb250YWluZXIpCit7CisgICAgbV9wbHVnaW5Db250YWluZXJzLmFkZChjb250YWluZXIp
OworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpyZW1vdmVQbHVnaW5Db250YWluZXIoV2ViUGx1Z2lu
Q29udGFpbmVySW1wbCogY29udGFpbmVyKQoreworICAgIG1fcGx1Z2luQ29udGFpbmVycy5yZW1v
dmUoY29udGFpbmVyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAkocmV2aXNpb24gNzc1MzIpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw2ICs0OCw4IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaCIK
KyNpbmNsdWRlICJwYWludGluZy9QYWludENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJwYWludGlu
Zy9QYWludGVyLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAKQEAgLTgyLDEwICs4NCwxNSBAQCBjbGFzcyBXZWJJbWFnZTsKIGNsYXNzIFdl
YktleWJvYXJkRXZlbnQ7CiBjbGFzcyBXZWJNb3VzZUV2ZW50OwogY2xhc3MgV2ViTW91c2VXaGVl
bEV2ZW50OworY2xhc3MgV2ViUGx1Z2luQ29udGFpbmVySW1wbDsKIGNsYXNzIFdlYlNldHRpbmdz
SW1wbDsKIGNsYXNzIFdlYlRvdWNoRXZlbnQ7CiAKLWNsYXNzIFdlYlZpZXdJbXBsIDogcHVibGlj
IFdlYlZpZXcsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZXdJbXBsPiB7CitjbGFzcyBXZWJWaWV3
SW1wbCA6IHB1YmxpYyBXZWJWaWV3LAorI2lmIFdFQktJVF9VU0lOR19QQUlOVFNVUkZBQ0UKKyAg
ICAgICAgICAgICAgICAgICAgcHVibGljIFBhaW50ZXIsCisjZW5kaWYKKyAgICAgICAgICAgICAg
ICAgICAgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKIHB1YmxpYzoKICAgICAvLyBX
ZWJXaWRnZXQgbWV0aG9kczoKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKQEAgLTE5OCw2ICsy
MDUsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW5hY3RpdmVGb3JlZ3JvdW5kQ29sb3IpOwogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
Q3VzdG9tQ29udGV4dE1lbnVBY3Rpb24odW5zaWduZWQgYWN0aW9uKTsKIAorICAgIC8vIFBhaW50
ZXIgbWV0aG9kczoKKyAgICAvL3ZpcnR1YWwgdm9pZCBhbmltYXRlKCk7CisgICAgLy92aXJ0dWFs
IHZvaWQgbGF5b3V0KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25Q
dHI8V2ViUGFpbnRCdWZmZXI+IGNsb25lUGFpbnRCdWZmZXJGb3JBcmVhKAorICAgICAgICBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiwgV2ViQ29yZTo6SW50UG9pbnQqKTsKKwogICAgIC8vIFdlYlZp
ZXdJbXBsCiAKICAgICB2b2lkIHNldElnbm9yZUlucHV0RXZlbnRzKGJvb2wgbmV3VmFsdWUpOwpA
QCAtMzQzLDYgKzM1NywxMyBAQCBwdWJsaWM6CiAgICAgLy8gV2ViR0wuIFJldHVybnMgMCBpZiBj
b21wb3NpdGluZyBzdXBwb3J0IGlzIG5vdCBjb21waWxlZCBpbi4KICAgICB2aXJ0dWFsIFdlYkdy
YXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCgpOwogCisgICAgdm9pZCBzY2hlZHVs
ZUludmFsaWRhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBzY2hlZHVs
ZVNjcm9sbChpbnQgZHgsIGludCBkeSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3Qp
OworICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKTsKKworICAgIHZvaWQgYWRkUGx1Z2luQ29u
dGFpbmVyKFdlYlBsdWdpbkNvbnRhaW5lckltcGwqKTsKKyAgICB2b2lkIHJlbW92ZVBsdWdpbkNv
bnRhaW5lcihXZWJQbHVnaW5Db250YWluZXJJbXBsKik7CisKICAgICBXZWJDb3JlOjpQb3B1cENv
bnRhaW5lciogc2VsZWN0UG9wdXAoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdFBvcHVwLmdldCgp
OyB9CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV2ZW50IGxlYWRzIHRvIHNjcm9sbGlu
Zy4KQEAgLTU0Nyw2ICs1NjgsMTMgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q+IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRDsKICAg
ICBPd25QdHI8RGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eT4gbV9kZXZpY2VPcmllbnRhdGlv
bkNsaWVudFByb3h5OwogICAgIE93blB0cjxHZW9sb2NhdGlvbkNsaWVudFByb3h5PiBtX2dlb2xv
Y2F0aW9uQ2xpZW50UHJveHk7CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8V2ViUGx1Z2luQ29udGFp
bmVySW1wbCo+IFBsdWdpbkNvbnRhaW5lclNldDsKKyAgICBQbHVnaW5Db250YWluZXJTZXQgbV9w
bHVnaW5Db250YWluZXJzOworCisjaWYgV0VCS0lUX1VTSU5HX1BBSU5UU1VSRkFDRQorICAgIE93
blB0cjxQYWludENvbnRyb2xsZXI+IG1fcGFpbnRDb250cm9sbGVyOworI2VuZGlmCiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YldpZGdldC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJXaWRnZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViV2lkZ2V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJXaWRnZXQuaCIKKworI2luY2x1ZGUgInBhaW50aW5nL1BhaW50
Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJXaWRnZXQ6OnNo
b3dEZWJ1Z1BhaW50UmVjdHMoYm9vbCBzaG93KQoreworICAgIFBhaW50Q29udHJvbGxlcjo6c2hv
d0RlYnVnUGFpbnRSZWN0cyhzaG93KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9wYWludGluZy9QYWludEFnZ3JlZ2F0b3IuY3Bw
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvcGFpbnRpbmcvUGFp
bnRBZ2dyZWdhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL3BhaW50aW5nL1BhaW50QWdncmVnYXRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
Mzc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhaW50QWdncmVnYXRvci5oIgor
CisjaW5jbHVkZSAiV2ViS2l0LmgiCisjaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gQUxHT1JJVEhNIE5PVEVTCisvLworLy8gV2UgYXR0ZW1wdCB0byBtYWlu
dGFpbiBhIHNjcm9sbCByZWN0IGluIHRoZSBwcmVzZW5jZSBvZiBpbnZhbGlkYXRpb25zIHRoYXQK
Ky8vIGFyZSBjb250YWluZWQgd2l0aGluIHRoZSBzY3JvbGwgcmVjdC4gIElmIGFuIGludmFsaWRh
dGlvbiBjcm9zc2VzIGEgc2Nyb2xsCisvLyByZWN0LCB0aGVuIHdlIGp1c3QgdHJlYXQgdGhlIHNj
cm9sbCByZWN0IGFzIGFuIGludmFsaWRhdGlvbiByZWN0LgorLy8KKy8vIEZvciBpbnZhbGlkYXRp
b25zIHBlcmZvcm1lZCBwcmlvciB0byBzY3JvbGxpbmcgYW5kIGNvbnRhaW5lZCB3aXRoaW4gdGhl
CisvLyBzY3JvbGwgcmVjdCwgd2Ugb2Zmc2V0IHRoZSBpbnZhbGlkYXRpb24gcmVjdHMgdG8gYWNj
b3VudCBmb3IgdGhlIGZhY3QgdGhhdAorLy8gdGhlIGNvbnN1bWVyIHdpbGwgcGVyZm9ybSBzY3Jv
bGxpbmcgYmVmb3JlIHBhaW50aW5nLgorLy8KKy8vIFdlIG9ubHkgc3VwcG9ydCBzY3JvbGxpbmcg
YWxvbmcgb25lIGF4aXMgYXQgYSB0aW1lLiAgQSBkaWFnb25hbCBzY3JvbGwgd2lsbAorLy8gdGhl
cmVmb3JlIGJlIHRyZWF0ZWQgYXMgYW4gaW52YWxpZGF0aW9uLgorLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCisvLyBJZiB0aGUgY29tYmluZWQgYXJlYSBvZiBwYWludCByZWN0cyBjb250YWluZWQg
d2l0aGluIHRoZSBzY3JvbGwgcmVjdCBncm93cworLy8gdG9vIGxhcmdlLCB0aGVuIHdlIG1pZ2h0
IGFzIHdlbGwganVzdCB0cmVhdCB0aGUgc2Nyb2xsIHJlY3QgYXMgYSBwYWludCByZWN0LgorLy8g
VGhpcyBjb25zdGFudCBzZXRzIHRoZSBtYXggcmF0aW8gb2YgcGFpbnQgcmVjdCBhcmVhIHRvIHNj
cm9sbCByZWN0IGFyZWEgdGhhdAorLy8gd2Ugd2lsbCB0b2xlcmF0ZSBiZWZvcmUgZG9ncmFkaW5n
IHRoZSBzY3JvbGwgaW50byBhIHJlcGFpbnQuCitzdGF0aWMgY29uc3QgZmxvYXQgbWF4UmVkdW5k
YW50UGFpbnRUb1Njcm9sbEFyZWEgPSAwLjhmOworCisvLyBUaGUgbWF4aW11bSBudW1iZXIgb2Yg
cGFpbnQgcmVjdHMuICBJZiB3ZSBleGNlZWQgdGhpcyBsaW1pdCwgdGhlbiB3ZSdsbAorLy8gc3Rh
cnQgY29tYmluaW5nIHBhaW50IHJlY3RzIChzZWUgQ29tYmluZVBhaW50UmVjdHMpLiAgVGhpcyBs
aW1pdGluZyBpcworLy8gaW1wb3J0YW50IHNpbmNlIHRoZSBXZWJLaXQgY29kZSBhc3NvY2lhdGVk
IHdpdGggZGVjaWRpbmcgd2hhdCB0byBwYWludCBnaXZlbgorLy8gYSBwYWludCByZWN0IGNhbiBi
ZSBzaWduaWZpY2FudC4KK3N0YXRpYyBjb25zdCBzaXplX3QgbWF4UGFpbnRSZWN0cyA9IDU7CisK
Ky8vIElmIHRoZSBjb21iaW5lZCBhcmVhIG9mIHBhaW50IHJlY3RzIGRpdmlkZWQgYnkgdGhlIGFy
ZWEgb2YgdGhlIHVuaW9uIG9mIGFsbAorLy8gcGFpbnQgcmVjdHMgZXhjZWVkcyB0aGlzIHRocmVz
aG9sZCwgdGhlbiB3ZSB3aWxsIGNvbWJpbmUgdGhlIHBhaW50IHJlY3RzLgorc3RhdGljIGNvbnN0
IGZsb2F0IG1heFBhaW50UmVjdHNBcmVhUmF0aW8gPSAwLjdmOworCitzdGF0aWMgaW50IGNhbGN1
bGF0ZUFyZWEoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcmVjdC5zaXplKCku
d2lkdGgoKSAqIHJlY3Quc2l6ZSgpLmhlaWdodCgpOworfQorCisvLyBTdWJ0cmFjdHMgb3V0IHRo
ZSBpbnRlcnNlY3Rpb24gb2YgfGF8IGFuZCB8YnwgZnJvbSB8YXwsIGFzc3VtaW5nIHxifCBmdWxs
eQorLy8gb3ZlcmxhcHMgd2l0aCB8YXwgaW4gZWl0aGVyIHRoZSB4LSBvciB5LWRpcmVjdGlvbi4g
IElmIHRoZXJlIGlzIG5vIGZ1bGwKKy8vIG92ZXJsYXAsIHRoZW4gfGF8IGlzIHJldHVybmVkLgor
c3RhdGljIEludFJlY3Qgc3VidHJhY3RJbnRlcnNlY3Rpb24oY29uc3QgSW50UmVjdCYgYSwgY29u
c3QgSW50UmVjdCYgYikKK3sKKyAgICAvLyBib3VuZGFyeSBjYXNlczoKKyAgICBpZiAoIWEuaW50
ZXJzZWN0cyhiKSkKKyAgICAgICAgcmV0dXJuIGE7CisgICAgaWYgKGIuY29udGFpbnMoYSkpCisg
ICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBpbnQgcnggPSBhLngoKTsKKyAgICBpbnQg
cnkgPSBhLnkoKTsKKyAgICBpbnQgcnIgPSBhLnJpZ2h0KCk7CisgICAgaW50IHJiID0gYS5ib3R0
b20oKTsKKworICAgIGlmIChiLnkoKSA8PSBhLnkoKSAmJiBiLmJvdHRvbSgpID49IGEuYm90dG9t
KCkpIHsKKyAgICAgICAgLy8gY29tcGxldGUgaW50ZXJzZWN0aW9uIGluIHRoZSB5LWRpcmVjdGlv
bgorICAgICAgICBpZiAoYi54KCkgPD0gYS54KCkpCisgICAgICAgICAgICByeCA9IGIucmlnaHQo
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcnIgPSBiLngoKTsKKyAgICB9IGVsc2UgaWYg
KGIueCgpIDw9IGEueCgpICYmIGIucmlnaHQoKSA+PSBhLnJpZ2h0KCkpIHsKKyAgICAgICAgLy8g
Y29tcGxldGUgaW50ZXJzZWN0aW9uIGluIHRoZSB4LWRpcmVjdGlvbgorICAgICAgICBpZiAoYi55
KCkgPD0gYS55KCkpCisgICAgICAgICAgICByeSA9IGIuYm90dG9tKCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJiID0gYi55KCk7CisgICAgfQorICAgIHJldHVybiBJbnRSZWN0KHJ4LCBy
eSwgcnIgLSByeCwgcmIgLSByeSk7Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB8YXwgYW5kIHxi
fCBzaGFyZSBhbiBlbnRpcmUgZWRnZSAoaS5lLiwgc2FtZSB3aWR0aCBvciBzYW1lCisvLyBoZWln
aHQpLCBhbmQgdGhlIHJlY3RhbmdsZXMgZG8gbm90IG92ZXJsYXAuCitzdGF0aWMgYm9vbCBzaGFy
ZXNFZGdlKGNvbnN0IEludFJlY3QmIGEsIGNvbnN0IEludFJlY3QmIGIpCit7CisgICAgcmV0dXJu
IChhLnkoKSA9PSBiLnkoKSAmJiBhLmhlaWdodCgpID09IGIuaGVpZ2h0KCkgJiYgKGEueCgpID09
IGIucmlnaHQoKSB8fCBhLnJpZ2h0KCkgPT0gYi54KCkpKQorICAgICAgICB8fCAoYS54KCkgPT0g
Yi54KCkgJiYgYS53aWR0aCgpID09IGIud2lkdGgoKSAmJiAoYS55KCkgPT0gYi5ib3R0b20oKSB8
fCBhLmJvdHRvbSgpID09IGIueSgpKSk7Cit9CisKK1BhaW50QWdncmVnYXRvcjo6UGVuZGluZ1Vw
ZGF0ZTo6UGVuZGluZ1VwZGF0ZSgpCit7Cit9CisKK1BhaW50QWdncmVnYXRvcjo6UGVuZGluZ1Vw
ZGF0ZTo6flBlbmRpbmdVcGRhdGUoKQoreworfQorCitJbnRSZWN0IFBhaW50QWdncmVnYXRvcjo6
UGVuZGluZ1VwZGF0ZTo6Y2FsY3VsYXRlU2Nyb2xsRGFtYWdlKCkgY29uc3QKK3sKKyAgICAvLyBT
aG91bGQgb25seSBiZSBzY3JvbGxpbmcgaW4gb25lIGRpcmVjdGlvbiBhdCBhIHRpbWUuCisgICAg
QVNTRVJUKCEoc2Nyb2xsRGVsdGEueCgpICYmIHNjcm9sbERlbHRhLnkoKSkpOworCisgICAgSW50
UmVjdCBkYW1hZ2VkUmVjdDsKKworICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lvbiB3ZSB3aWxsIGV4
cG9zZSBieSBzY3JvbGxpbmcsIGFuZCBwYWludCB0aGF0IGludG8gYQorICAgIC8vIHNoYXJlZCBt
ZW1vcnkgc2VjdGlvbi4KKyAgICBpZiAoc2Nyb2xsRGVsdGEueCgpKSB7CisgICAgICAgIGludCBk
eCA9IHNjcm9sbERlbHRhLngoKTsKKyAgICAgICAgZGFtYWdlZFJlY3Quc2V0WShzY3JvbGxSZWN0
LnkoKSk7CisgICAgICAgIGRhbWFnZWRSZWN0LnNldEhlaWdodChzY3JvbGxSZWN0LmhlaWdodCgp
KTsKKyAgICAgICAgaWYgKGR4ID4gMCkgeworICAgICAgICAgICAgZGFtYWdlZFJlY3Quc2V0WChz
Y3JvbGxSZWN0LngoKSk7CisgICAgICAgICAgICBkYW1hZ2VkUmVjdC5zZXRXaWR0aChkeCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkYW1hZ2VkUmVjdC5zZXRYKHNjcm9sbFJlY3Qu
cmlnaHQoKSArIGR4KTsKKyAgICAgICAgICAgIGRhbWFnZWRSZWN0LnNldFdpZHRoKC1keCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgZHkgPSBzY3JvbGxEZWx0YS55KCk7
CisgICAgICAgIGRhbWFnZWRSZWN0LnNldFgoc2Nyb2xsUmVjdC54KCkpOworICAgICAgICBkYW1h
Z2VkUmVjdC5zZXRXaWR0aChzY3JvbGxSZWN0LndpZHRoKCkpOworICAgICAgICBpZiAoZHkgPiAw
KSB7CisgICAgICAgICAgICBkYW1hZ2VkUmVjdC5zZXRZKHNjcm9sbFJlY3QueSgpKTsKKyAgICAg
ICAgICAgIGRhbWFnZWRSZWN0LnNldEhlaWdodChkeSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBkYW1hZ2VkUmVjdC5zZXRZKHNjcm9sbFJlY3QuYm90dG9tKCkgKyBkeSk7CisgICAg
ICAgICAgICBkYW1hZ2VkUmVjdC5zZXRIZWlnaHQoLWR5KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIEluIGNhc2UgdGhlIHNjcm9sbCBvZmZzZXQgZXhjZWVkcyB0aGUgd2lkdGgvaGVpZ2h0
IG9mIHRoZSBzY3JvbGwgcmVjdAorICAgIHJldHVybiBpbnRlcnNlY3Rpb24oc2Nyb2xsUmVjdCwg
ZGFtYWdlZFJlY3QpOworfQorCitJbnRSZWN0IFBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0
ZTo6Y2FsY3VsYXRlUGFpbnRCb3VuZHMoKSBjb25zdAoreworICAgIEludFJlY3QgYm91bmRzOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFpbnRSZWN0cy5zaXplKCk7ICsraSkKKyAgICAg
ICAgYm91bmRzLnVuaXRlKHBhaW50UmVjdHNbaV0pOworICAgIHJldHVybiBib3VuZHM7Cit9CisK
K2Jvb2wgUGFpbnRBZ2dyZWdhdG9yOjpoYXNQZW5kaW5nVXBkYXRlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gIW1fdXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpIHx8ICFtX3VwZGF0ZS5wYWludFJl
Y3RzLmlzRW1wdHkoKTsKK30KKwordm9pZCBQYWludEFnZ3JlZ2F0b3I6OmNsZWFyUGVuZGluZ1Vw
ZGF0ZSgpCit7CisgICAgbV91cGRhdGUgPSBQZW5kaW5nVXBkYXRlKCk7Cit9CisKK3ZvaWQgUGFp
bnRBZ2dyZWdhdG9yOjpwb3BQZW5kaW5nVXBkYXRlKFBlbmRpbmdVcGRhdGUqIHVwZGF0ZSkKK3sK
KyAgICAvLyBDb21iaW5lIHBhaW50IHJlY3RzIGlmIHRoZWlyIGNvbWJpbmVkIGFyZWEgaXMgbm90
IHN1ZmZpY2llbnRseSBsZXNzIHRoYW4KKyAgICAvLyB0aGUgYXJlYSBvZiB0aGUgdW5pb24gb2Yg
YWxsIHBhaW50IHJlY3RzLiAgV2Ugc2tpcCB0aGlzIGlmIHRoZXJlIGlzIGEKKyAgICAvLyBzY3Jv
bGwgcmVjdCBzaW5jZSBzY3JvbGxpbmcgYmVuZWZpdHMgZnJvbSBzbWFsbGVyIHBhaW50IHJlY3Rz
LgorICAgIGlmIChtX3VwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHkoKSAmJiBtX3VwZGF0ZS5wYWlu
dFJlY3RzLnNpemUoKSA+IDEpIHsKKyAgICAgICAgaW50IHBhaW50QXJlYSA9IDA7CisgICAgICAg
IEludFJlY3QgdW5pb25SZWN0OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdXBk
YXRlLnBhaW50UmVjdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIHBhaW50QXJlYSArPSBj
YWxjdWxhdGVBcmVhKG1fdXBkYXRlLnBhaW50UmVjdHNbaV0pOworICAgICAgICAgICAgdW5pb25S
ZWN0LnVuaXRlKG1fdXBkYXRlLnBhaW50UmVjdHNbaV0pOworICAgICAgICB9CisgICAgICAgIGlu
dCB1bmlvbkFyZWEgPSBjYWxjdWxhdGVBcmVhKHVuaW9uUmVjdCk7CisgICAgICAgIGlmIChmbG9h
dChwYWludEFyZWEpIC8gZmxvYXQodW5pb25BcmVhKSA+IG1heFBhaW50UmVjdHNBcmVhUmF0aW8p
CisgICAgICAgICAgICBjb21iaW5lUGFpbnRSZWN0cygpOworICAgIH0KKyAgICAqdXBkYXRlID0g
bV91cGRhdGU7CisgICAgY2xlYXJQZW5kaW5nVXBkYXRlKCk7Cit9CisKK3ZvaWQgUGFpbnRBZ2dy
ZWdhdG9yOjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIENv
bWJpbmUgb3ZlcmxhcHBpbmcgcGFpbnRzIHVzaW5nIHNtYWxsZXN0IGJvdW5kaW5nIGJveC4KKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgY29uc3QgSW50UmVjdCYgZXhpc3RpbmdSZWN0ID0gbV91cGRhdGUucGFpbnRS
ZWN0c1tpXTsKKyAgICAgICAgaWYgKGV4aXN0aW5nUmVjdC5jb250YWlucyhyZWN0KSkgIC8vIE9w
dGltaXplIG91dCByZWR1bmRhbmN5LgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAo
cmVjdC5pbnRlcnNlY3RzKGV4aXN0aW5nUmVjdCkgfHwgc2hhcmVzRWRnZShyZWN0LCBleGlzdGlu
Z1JlY3QpKSB7CisgICAgICAgICAgICAvLyBSZS1pbnZhbGlkYXRlIGluIGNhc2UgdGhlIHVuaW9u
IGludGVyc2VjdHMgb3RoZXIgcGFpbnQgcmVjdHMuCisgICAgICAgICAgICBJbnRSZWN0IGNvbWJp
bmVkUmVjdCA9IHVuaW9uUmVjdChleGlzdGluZ1JlY3QsIHJlY3QpOworICAgICAgICAgICAgbV91
cGRhdGUucGFpbnRSZWN0cy5yZW1vdmUoaSk7CisgICAgICAgICAgICBpbnZhbGlkYXRlUmVjdChj
b21iaW5lZFJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gQWRkIGEgbm9uLW92ZXJsYXBwaW5nIHBhaW50LgorICAgIG1fdXBkYXRlLnBhaW50UmVj
dHMuYXBwZW5kKHJlY3QpOworCisgICAgLy8gSWYgdGhlIG5ldyBwYWludCBvdmVybGFwcyB3aXRo
IGEgc2Nyb2xsLCB0aGVuIGl0IGZvcmNlcyBhbiBpbnZhbGlkYXRpb24gb2YKKyAgICAvLyB0aGUg
c2Nyb2xsLiAgSWYgdGhlIG5ldyBwYWludCBpcyBjb250YWluZWQgYnkgYSBzY3JvbGwsIHRoZW4g
dHJpbSBvZmYgdGhlCisgICAgLy8gc2Nyb2xsIGRhbWFnZSB0byBhdm9pZCByZWR1bmRhbnQgcGFp
bnRpbmcuCisgICAgaWYgKCFtX3VwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHkoKSkgeworICAgICAg
ICBpZiAoc2hvdWxkSW52YWxpZGF0ZVNjcm9sbFJlY3QocmVjdCkpCisgICAgICAgICAgICBpbnZh
bGlkYXRlU2Nyb2xsUmVjdCgpOworICAgICAgICBlbHNlIGlmIChtX3VwZGF0ZS5zY3JvbGxSZWN0
LmNvbnRhaW5zKHJlY3QpKSB7CisgICAgICAgICAgICBtX3VwZGF0ZS5wYWludFJlY3RzW21fdXBk
YXRlLnBhaW50UmVjdHMuc2l6ZSgpIC0gMV0gPQorICAgICAgICAgICAgICAgIHN1YnRyYWN0SW50
ZXJzZWN0aW9uKHJlY3QsIG1fdXBkYXRlLmNhbGN1bGF0ZVNjcm9sbERhbWFnZSgpKTsKKyAgICAg
ICAgICAgIGlmIChtX3VwZGF0ZS5wYWludFJlY3RzW21fdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgp
IC0gMV0uaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1fdXBkYXRlLnBhaW50UmVjdHMucmVt
b3ZlKG1fdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpIC0gMSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAobV91cGRhdGUucGFpbnRSZWN0cy5zaXplKCkgPiBtYXhQYWludFJlY3RzKQorICAg
ICAgICBjb21iaW5lUGFpbnRSZWN0cygpOworCisgICAgLy8gVHJhY2sgaG93IGxhcmdlIHRoZSBw
YWludFJlY3RzIHZlY3RvciBncm93cyBkdXJpbmcgYW4gaW52YWxpZGF0aW9uCisgICAgLy8gc2Vx
dWVuY2UuICBOb3RlOiBBIHN1YnNlcXVlbnQgaW52YWxpZGF0aW9uIG1heSBlbmQgdXAgYmVpbmcg
Y29tYmluZWQKKyAgICAvLyB3aXRoIGFsbCBleGlzdGluZyBwYWludHMsIHdoaWNoIG1lYW5zIHRo
YXQgdHJhY2tpbmcgdGhlIHNpemUgb2YKKyAgICAvLyBwYWludFJlY3RzIGF0IHRoZSB0aW1lIHdo
ZW4gcG9wUGVuZGluZ1VwZGF0ZSgpIGlzIGNhbGxlZCBtYXkgbWFzaworICAgIC8vIGNlcnRhaW4g
cGVyZm9ybWFuY2UgcHJvYmxlbXMuCisgICAgd2ViS2l0Q2xpZW50KCktPmhpc3RvZ3JhbUN1c3Rv
bUNvdW50cygiTVBBcmNoLlJXX0ludGVybWVkaWF0ZVBhaW50UmVjdENvdW50IiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXBkYXRlLnBhaW50UmVjdHMuc2l6
ZSgpLCAxLCAxMDAsIDUwKTsKK30KKwordm9pZCBQYWludEFnZ3JlZ2F0b3I6OnNjcm9sbFJlY3Qo
aW50IGR4LCBpbnQgZHksIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQoreworICAgIC8vIFdlIG9u
bHkgc3VwcG9ydCBzY3JvbGxpbmcgYWxvbmcgb25lIGF4aXMgYXQgYSB0aW1lLgorICAgIGlmIChk
eCAhPSAwICYmIGR5ICE9IDApIHsKKyAgICAgICAgaW52YWxpZGF0ZVJlY3QoY2xpcFJlY3QpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgY2FuIG9ubHkgc2Nyb2xsIG9uZSBy
ZWN0IGF0IGEgdGltZS4KKyAgICBpZiAoIW1fdXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpICYm
IG1fdXBkYXRlLnNjcm9sbFJlY3QgIT0gY2xpcFJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZVJl
Y3QoY2xpcFJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQWdhaW4sIHdl
IG9ubHkgc3VwcG9ydCBzY3JvbGxpbmcgYWxvbmcgb25lIGF4aXMgYXQgYSB0aW1lLiAgTWFrZSBz
dXJlIHRoaXMKKyAgICAvLyB1cGRhdGUgZG9lc24ndCBzY3JvbGwgb24gYSBkaWZmZXJlbnQgYXhp
cyB0aGFuIGFueSBleGlzdGluZyBvbmUuCisgICAgaWYgKChkeCAmJiBtX3VwZGF0ZS5zY3JvbGxE
ZWx0YS55KCkpIHx8IChkeSAmJiBtX3VwZGF0ZS5zY3JvbGxEZWx0YS54KCkpKSB7CisgICAgICAg
IGludmFsaWRhdGVSZWN0KGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIFRoZSBzY3JvbGwgcmVjdCBpcyBuZXcgb3IgaXNuJ3QgY2hhbmdpbmcgKHRob3VnaCB0aGUg
c2Nyb2xsIGFtb3VudCBtYXkKKyAgICAvLyBiZSBjaGFuZ2luZykuCisgICAgbV91cGRhdGUuc2Ny
b2xsUmVjdCA9IGNsaXBSZWN0OworICAgIG1fdXBkYXRlLnNjcm9sbERlbHRhLm1vdmUoZHgsIGR5
KTsKKworICAgIC8vIFdlIG1pZ2h0IGhhdmUganVzdCB3aXBlZCBvdXQgYSBwcmUtZXhpc3Rpbmcg
c2Nyb2xsLgorICAgIGlmIChtX3VwZGF0ZS5zY3JvbGxEZWx0YSA9PSBJbnRQb2ludCgpKSB7Cisg
ICAgICAgIG1fdXBkYXRlLnNjcm9sbFJlY3QgPSBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBBZGp1c3QgYW55IGNvbnRhaW5lZCBwYWludCByZWN0cyBhbmQgY2hl
Y2sgZm9yIGFueSBvdmVybGFwcGluZyBwYWludHMuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3VwZGF0ZS5wYWludFJlY3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX3VwZGF0
ZS5zY3JvbGxSZWN0LmNvbnRhaW5zKG1fdXBkYXRlLnBhaW50UmVjdHNbaV0pKSB7CisgICAgICAg
ICAgICBtX3VwZGF0ZS5wYWludFJlY3RzW2ldID0gc2Nyb2xsUGFpbnRSZWN0KG1fdXBkYXRlLnBh
aW50UmVjdHNbaV0sIGR4LCBkeSk7CisgICAgICAgICAgICAvLyBUaGUgcmVjdCBtYXkgaGF2ZSBi
ZWVuIHNjcm9sbGVkIG91dCBvZiB2aWV3LgorICAgICAgICAgICAgaWYgKG1fdXBkYXRlLnBhaW50
UmVjdHNbaV0uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbV91cGRhdGUucGFpbnRSZWN0
cy5yZW1vdmUoaSk7CisgICAgICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKG1fdXBkYXRlLnNjcm9sbFJlY3QuaW50ZXJzZWN0cyhtX3VwZGF0ZS5wYWlu
dFJlY3RzW2ldKSkgeworICAgICAgICAgICAgaW52YWxpZGF0ZVNjcm9sbFJlY3QoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHRoZSBuZXcgc2Ny
b2xsIG92ZXJsYXBzIHRvbyBtdWNoIHdpdGggY29udGFpbmVkIHBhaW50IHJlY3RzLCB0aGVuIGZv
cmNlCisgICAgLy8gYW4gaW52YWxpZGF0aW9uIG9mIHRoZSBzY3JvbGwuCisgICAgaWYgKHNob3Vs
ZEludmFsaWRhdGVTY3JvbGxSZWN0KEludFJlY3QoKSkpCisgICAgICAgIGludmFsaWRhdGVTY3Jv
bGxSZWN0KCk7Cit9CisKK0ludFJlY3QgUGFpbnRBZ2dyZWdhdG9yOjpzY3JvbGxQYWludFJlY3Qo
Y29uc3QgSW50UmVjdCYgcGFpbnRSZWN0LCBpbnQgZHgsIGludCBkeSkgY29uc3QKK3sKKyAgICBJ
bnRSZWN0IHJlc3VsdCA9IHBhaW50UmVjdDsKKworICAgIHJlc3VsdC5tb3ZlKGR4LCBkeSk7Cisg
ICAgcmVzdWx0ID0gaW50ZXJzZWN0aW9uKG1fdXBkYXRlLnNjcm9sbFJlY3QsIHJlc3VsdCk7CisK
KyAgICAvLyBTdWJ0cmFjdCBvdXQgdGhlIHNjcm9sbCBkYW1hZ2UgcmVjdCB0byBhdm9pZCByZWR1
bmRhbnQgcGFpbnRpbmcuCisgICAgcmV0dXJuIHN1YnRyYWN0SW50ZXJzZWN0aW9uKHJlc3VsdCwg
bV91cGRhdGUuY2FsY3VsYXRlU2Nyb2xsRGFtYWdlKCkpOworfQorCitib29sIFBhaW50QWdncmVn
YXRvcjo6c2hvdWxkSW52YWxpZGF0ZVNjcm9sbFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgY29u
c3QKK3sKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghbV91cGRhdGUu
c2Nyb2xsUmVjdC5pbnRlcnNlY3RzKHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGlmICghbV91cGRhdGUuc2Nyb2xsUmVjdC5jb250YWlucyhyZWN0KSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIENoZWNrIGlmIHRoZSBjb21iaW5l
ZCBhcmVhIG9mIGFsbCBjb250YWluZWQgcGFpbnQgcmVjdHMgcGx1cyB0aGlzIG5ldworICAgIC8v
IHJlY3QgY29tZXMgdG9vIGNsb3NlIHRvIHRoZSBhcmVhIG9mIHRoZSBzY3JvbGxSZWN0LiAgSWYg
c28sIHRoZW4gd2UKKyAgICAvLyBtaWdodCBhcyB3ZWxsIGludmFsaWRhdGUgdGhlIHNjcm9sbCBy
ZWN0LgorCisgICAgaW50IHBhaW50QXJlYSA9IGNhbGN1bGF0ZUFyZWEocmVjdCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3VwZGF0ZS5wYWludFJlY3RzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IEludFJlY3QmIGV4aXN0aW5nUmVjdCA9IG1fdXBkYXRlLnBhaW50UmVjdHNb
aV07CisgICAgICAgIGlmIChtX3VwZGF0ZS5zY3JvbGxSZWN0LmNvbnRhaW5zKGV4aXN0aW5nUmVj
dCkpCisgICAgICAgICAgICBwYWludEFyZWEgKz0gY2FsY3VsYXRlQXJlYShleGlzdGluZ1JlY3Qp
OworICAgIH0KKyAgICBpbnQgc2Nyb2xsQXJlYSA9IGNhbGN1bGF0ZUFyZWEobV91cGRhdGUuc2Ny
b2xsUmVjdCk7CisgICAgaWYgKGZsb2F0KHBhaW50QXJlYSkgLyBmbG9hdChzY3JvbGxBcmVhKSA+
IG1heFJlZHVuZGFudFBhaW50VG9TY3JvbGxBcmVhKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQYWludEFnZ3JlZ2F0b3I6OmludmFsaWRhdGVT
Y3JvbGxSZWN0KCkKK3sKKyAgICBJbnRSZWN0IHNjcm9sbFJlY3QgPSBtX3VwZGF0ZS5zY3JvbGxS
ZWN0OworICAgIG1fdXBkYXRlLnNjcm9sbFJlY3QgPSBJbnRSZWN0KCk7CisgICAgbV91cGRhdGUu
c2Nyb2xsRGVsdGEgPSBJbnRQb2ludCgpOworICAgIGludmFsaWRhdGVSZWN0KHNjcm9sbFJlY3Qp
OworfQorCit2b2lkIFBhaW50QWdncmVnYXRvcjo6Y29tYmluZVBhaW50UmVjdHMoKQoreworICAg
IC8vIENvbWJpbmUgcGFpbnQgcmVjdHMgZG8gdG8gYXQgbW9zdCB0d28gcmVjdHM6IG9uZSBpbnNp
ZGUgdGhlIHNjcm9sbFJlY3QKKyAgICAvLyBhbmQgb25lIG91dHNpZGUgdGhlIHNjcm9sbFJlY3Qu
ICBJZiB0aGVyZSBpcyBubyBzY3JvbGxSZWN0LCB0aGVuIGp1c3QKKyAgICAvLyB1c2UgdGhlIHNt
YWxsZXN0IGJvdW5kaW5nIGJveCBmb3IgYWxsIHBhaW50IHJlY3RzLgorICAgIC8vCisgICAgLy8g
Tk9URTogVGhpcyBpcyBhIGZhaXJseSBzaW1wbGUgYWxnb3JpdGhtLiAgV2UgY291bGQgZ2V0IGZh
bmNpZXIgYnkgb25seQorICAgIC8vIGNvbWJpbmluZyB0d28gcmVjdHMgdG8gZ2V0IHVzIHVuZGVy
IHRoZSBtYXhQYWludFJlY3RzIGxpbWl0LCBidXQgaWYgd2UKKyAgICAvLyByZWFjaCB0aGlzIG1l
dGhvZCB0aGVuIGl0IG1lYW5zIHdlJ3JlIGhpdHRpbmcgYSByYXJlIGNhc2UsIHNvIHRoZXJlJ3Mg
bm8KKyAgICAvLyBuZWVkIHRvIG92ZXItb3B0aW1pemUgaXQuCisgICAgLy8KKyAgICBpZiAobV91
cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgSW50UmVjdCBib3VuZHMgPSBt
X3VwZGF0ZS5jYWxjdWxhdGVQYWludEJvdW5kcygpOworICAgICAgICBtX3VwZGF0ZS5wYWludFJl
Y3RzLmNsZWFyKCk7CisgICAgICAgIG1fdXBkYXRlLnBhaW50UmVjdHMuYXBwZW5kKGJvdW5kcyk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgSW50UmVjdCBpbm5lciwgb3V0ZXI7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91cGRhdGUucGFpbnRSZWN0cy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgZXhpc3RpbmdSZWN0ID0gbV91cGRhdGUucGFpbnRS
ZWN0c1tpXTsKKyAgICAgICAgICAgIGlmIChtX3VwZGF0ZS5zY3JvbGxSZWN0LmNvbnRhaW5zKGV4
aXN0aW5nUmVjdCkpCisgICAgICAgICAgICAgICAgaW5uZXIudW5pdGUoZXhpc3RpbmdSZWN0KTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXRlci51bml0ZShleGlzdGluZ1Jl
Y3QpOworICAgICAgICB9CisgICAgICAgIG1fdXBkYXRlLnBhaW50UmVjdHMuY2xlYXIoKTsKKyAg
ICAgICAgbV91cGRhdGUucGFpbnRSZWN0cy5hcHBlbmQoaW5uZXIpOworICAgICAgICBtX3VwZGF0
ZS5wYWludFJlY3RzLmFwcGVuZChvdXRlcik7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL3BhaW50aW5nL1BhaW50QWdn
cmVnYXRvci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvcGFp
bnRpbmcvUGFpbnRBZ2dyZWdhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9wYWludGluZy9QYWludEFnZ3JlZ2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgUGFpbnRBZ2dyZWdhdG9yX2gKKyNkZWZpbmUgUGFpbnRBZ2dyZWdh
dG9yX2gKKworI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFRoaXMgY2xh
c3MgaXMgcmVzcG9uc2libGUgZm9yIGFnZ3JlZ2F0aW5nIG11bHRpcGxlIGludmFsaWRhdGlvbiBh
bmQgc2Nyb2xsCisvLyBjb21tYW5kcyB0byBwcm9kdWNlIGEgc2Nyb2xsIGFuZCByZXBhaW50IHNl
cXVlbmNlLgorY2xhc3MgUGFpbnRBZ2dyZWdhdG9yIHsKK3B1YmxpYzoKKyAgICAvLyBUaGlzIHN0
cnVjdHVyZSBkZXNjcmliZXMgYW4gYWdncmVnYXRpb24gb2YgaW52YWxpZGF0ZVJlY3QgYW5kIHNj
cm9sbFJlY3QKKyAgICAvLyBjYWxscy4gIElmIHxzY3JvbGxSZWN0fCBpcyBub24tZW1wdHksIHRo
ZW4gdGhhdCByZWN0IHNob3VsZCBiZSBzY3JvbGxlZAorICAgIC8vIGJ5IHRoZSBhbW91bnQgc3Bl
Y2lmaWVkIGJ5IHxzY3JvbGxEZWx0YXwuICBJZiB8cGFpbnRSZWN0c3wgaXMgbm9uLWVtcHR5LAor
ICAgIC8vIHRoZW4gdGhvc2UgcmVjdHMgc2hvdWxkIGJlIHJlcGFpbnRlZC4gIElmIHxzY3JvbGxS
ZWN0fCBhbmQgfHBhaW50UmVjdHN8CisgICAgLy8gYXJlIG5vbi1lbXB0eSwgdGhlbiBzY3JvbGxp
bmcgc2hvdWxkIGJlIHBlcmZvcm1lZCBiZWZvcmUgcmVwYWludGluZy4KKyAgICAvLyB8c2Nyb2xs
RGVsdGF8IGNhbiBvbmx5IHNwZWNpZnkgc2Nyb2xsaW5nIGluIG9uZSBkaXJlY3Rpb24gKGkuZS4s
IHRoZSB4CisgICAgLy8gYW5kIHkgbWVtYmVycyBjYW5ub3QgYm90aCBiZSBub24temVybykuCisg
ICAgc3RydWN0IFBlbmRpbmdVcGRhdGUgeworICAgICAgICBQZW5kaW5nVXBkYXRlKCk7CisgICAg
ICAgIH5QZW5kaW5nVXBkYXRlKCk7CisKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgcmVjdCBkYW1h
Z2VkIGJ5IHNjcm9sbGluZyB3aXRoaW4gfHNjcm9sbFJlY3R8IGJ5CisgICAgICAgIC8vIHxzY3Jv
bGxEZWx0YXwuICBUaGlzIHJlY3QgbXVzdCBiZSByZXBhaW50ZWQuCisgICAgICAgIFdlYkNvcmU6
OkludFJlY3QgY2FsY3VsYXRlU2Nyb2xsRGFtYWdlKCkgY29uc3Q7CisKKyAgICAgICAgLy8gUmV0
dXJucyB0aGUgc21hbGxlc3QgcmVjdCBjb250YWluaW5nIGFsbCBwYWludCByZWN0cy4KKyAgICAg
ICAgV2ViQ29yZTo6SW50UmVjdCBjYWxjdWxhdGVQYWludEJvdW5kcygpIGNvbnN0OworCisgICAg
ICAgIFdlYkNvcmU6OkludFBvaW50IHNjcm9sbERlbHRhOworICAgICAgICBXZWJDb3JlOjpJbnRS
ZWN0IHNjcm9sbFJlY3Q7CisgICAgICAgIFdURjo6VmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IHBh
aW50UmVjdHM7CisgICAgfTsKKworICAgIC8vIFRoZXJlIGlzIGEgUGVuZGluZ1VwZGF0ZSBpZiBp
bnZhbGlkYXRlUmVjdCBvciBzY3JvbGxSZWN0IHdlcmUgY2FsbGVkIGFuZAorICAgIC8vIENsZWFy
UGVuZGluZ1VwZGF0ZSB3YXMgbm90IGNhbGxlZC4KKyAgICBib29sIGhhc1BlbmRpbmdVcGRhdGUo
KSBjb25zdDsKKyAgICB2b2lkIGNsZWFyUGVuZGluZ1VwZGF0ZSgpOworCisgICAgLy8gRmlsbHMg
fHVwZGF0ZXwgYW5kIGNsZWFycyB0aGUgcGVuZGluZyB1cGRhdGUuCisgICAgdm9pZCBwb3BQZW5k
aW5nVXBkYXRlKFBlbmRpbmdVcGRhdGUqKTsKKworICAgIC8vIFRoZSBnaXZlbiByZWN0IHNob3Vs
ZCBiZSByZXBhaW50ZWQuCisgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jik7CisKKyAgICAvLyBUaGUgZ2l2ZW4gcmVjdCBzaG91bGQgYmUgc2Nyb2xsZWQgYnkg
dGhlIGdpdmVuIGFtb3VudHMuCisgICAgdm9pZCBzY3JvbGxSZWN0KGludCBkeCwgaW50IGR5LCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CisKK3ByaXZhdGU6CisgICAgV2ViQ29y
ZTo6SW50UmVjdCBzY3JvbGxQYWludFJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcGFpbnRS
ZWN0LCBpbnQgZHgsIGludCBkeSkgY29uc3Q7CisgICAgYm9vbCBzaG91bGRJbnZhbGlkYXRlU2Ny
b2xsUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KSBjb25zdDsKKyAgICB2b2lkIGlu
dmFsaWRhdGVTY3JvbGxSZWN0KCk7CisgICAgdm9pZCBjb21iaW5lUGFpbnRSZWN0cygpOworCisg
ICAgUGVuZGluZ1VwZGF0ZSBtX3VwZGF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL3BhaW50aW5nL1BhaW50
Q29udHJvbGxlci5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9wYWludGluZy9QYWludENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvcGFpbnRpbmcvUGFpbnRDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFpbnRD
b250cm9sbGVyLmgiCisKKyNpbmNsdWRlIDxza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaD4KKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCIKKyNpbmNsdWRlICJQYWludGVyLmgi
CisjaW5jbHVkZSAiV2ViUGFpbnRCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJQYWludFN1cmZhY2Uu
aCIKKyNpbmNsdWRlICJXZWJQb2ludC5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIKKyNpbmNsdWRl
ICJXZWJTaXplLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViS2l0IHsK
Kworc3RhdGljIGJvb2wgc19zaG93RGVidWdQYWludFJlY3RzID0gZmFsc2U7CisKK3ZvaWQgUGFp
bnRDb250cm9sbGVyOjpzaG93RGVidWdQYWludFJlY3RzKGJvb2wgc2hvdykKK3sKKyAgICBzX3No
b3dEZWJ1Z1BhaW50UmVjdHMgPSBzaG93OworfQorCitQYXNzT3duUHRyPFBhaW50Q29udHJvbGxl
cj4gUGFpbnRDb250cm9sbGVyOjpjcmVhdGUoUGFpbnRlciogcGFpbnRlciwgV2ViUGFpbnRTdXJm
YWNlKiBzdXJmYWNlLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQoreworICAgIHJldHVy
biBhZG9wdFB0cihuZXcgUGFpbnRDb250cm9sbGVyKHBhaW50ZXIsIHN1cmZhY2UsIHNpemUpKTsK
K30KKworUGFpbnRDb250cm9sbGVyOjp+UGFpbnRDb250cm9sbGVyKCkKK3sKKyAgICBpZiAobV9z
dXJmYWNlKQorICAgICAgICBtX3N1cmZhY2UtPnNldENsaWVudCgwKTsKK30KKwordm9pZCBQYWlu
dENvbnRyb2xsZXI6OnNjaGVkdWxlQW5pbWF0aW9uKCkKK3sKKyAgICBzY2hlZHVsZVVwZGF0ZSgp
OworfQorCit2b2lkIFBhaW50Q29udHJvbGxlcjo6c2NoZWR1bGVJbnZhbGlkYXRpb24oY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX2FnZ3JlZ2F0b3IuaW52YWxpZGF0ZVJlY3QocmVjdCk7
CisgICAgc2NoZWR1bGVVcGRhdGUoKTsKK30KKwordm9pZCBQYWludENvbnRyb2xsZXI6OnNjaGVk
dWxlU2Nyb2xsKGludCBkeCwgaW50IGR5LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAg
ICBtX2FnZ3JlZ2F0b3Iuc2Nyb2xsUmVjdChkeCwgZHksIGNsaXBSZWN0KTsKKyAgICBzY2hlZHVs
ZVVwZGF0ZSgpOworfQorCit2b2lkIFBhaW50Q29udHJvbGxlcjo6c2NoZWR1bGVVcGRhdGUoKQor
eworICAgIGlmIChtX3VwZGF0ZVRpbWVyLmlzQWN0aXZlKCkgfHwgbV9mbHVzaGluZykKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fdXBkYXRlVGltZXIuc3RhcnRPbmVTaG90KDAuMCk7Cit9CisKK1Bh
aW50Q29udHJvbGxlcjo6UGFpbnRDb250cm9sbGVyKFBhaW50ZXIqIHBhaW50ZXIsIFdlYlBhaW50
U3VyZmFjZSogc3VyZmFjZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fdXBkYXRlVGlt
ZXIodGhpcywgJlBhaW50Q29udHJvbGxlcjo6dXBkYXRlKQorICAgICwgbV9zaXplKHNpemUpCisg
ICAgLCBtX3BhaW50ZXIocGFpbnRlcikKKyAgICAsIG1fc3VyZmFjZShzdXJmYWNlKQorICAgICwg
bV9mbHVzaGluZyhmYWxzZSkKK3sKKyAgICBtX3N1cmZhY2UtPnNldENsaWVudCh0aGlzKTsKK30K
Kwordm9pZCBQYWludENvbnRyb2xsZXI6OnVwZGF0ZShUaW1lcjxQYWludENvbnRyb2xsZXI+KikK
K3sKKyAgICBpZiAobV9mbHVzaGluZyB8fCAhbV9zdXJmYWNlKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3BhaW50ZXItPmFuaW1hdGUoKTsKKyAgICBtX3BhaW50ZXItPmxheW91dCgpOworCisg
ICAgLy8gT0ssIHNhdmUgdGhlIHBlbmRpbmcgdXBkYXRlIHRvIGEgbG9jYWwgc2luY2UgcGFpbnRp
bmcgbWF5IGNhdXNlIG1vcmUKKyAgICAvLyBpbnZhbGlkYXRpb24uICBTb21lIFdlYkNvcmUgcmVu
ZGVyaW5nIG9iamVjdHMgb25seSBsYXlvdXQgd2hlbiBwYWludGVkLgorICAgIFBhaW50QWdncmVn
YXRvcjo6UGVuZGluZ1VwZGF0ZSB1cGRhdGU7CisgICAgbV9hZ2dyZWdhdG9yLnBvcFBlbmRpbmdV
cGRhdGUoJnVwZGF0ZSk7CisgICAgCisgICAgaWYgKHVwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHko
KSAmJiB1cGRhdGUucGFpbnRSZWN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEludFJlY3Qgc2Nyb2xsRGFtYWdlID0gdXBkYXRlLmNhbGN1bGF0ZVNjcm9sbERhbWFnZSgpOwor
ICAgIEludFJlY3QgYm91bmRzID0gdW5pb25SZWN0KHVwZGF0ZS5jYWxjdWxhdGVQYWludEJvdW5k
cygpLCBzY3JvbGxEYW1hZ2UpOworCisgICAgaWYgKCF1cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5
KCkpCisgICAgICAgIG1fc3VyZmFjZS0+c2Nyb2xsKHVwZGF0ZS5zY3JvbGxSZWN0LCB1cGRhdGUu
c2Nyb2xsRGVsdGEpOworCisgICAgLy8gVGhlIHNjcm9sbCBkYW1hZ2UgaXMganVzdCBhbm90aGVy
IHJlY3RhbmdsZSB0byBwYWludC4KKyAgICBWZWN0b3I8SW50UmVjdD4gY29weVJlY3RzOworICAg
IGNvcHlSZWN0cy5zd2FwKHVwZGF0ZS5wYWludFJlY3RzKTsKKyAgICBpZiAoIXNjcm9sbERhbWFn
ZS5pc0VtcHR5KCkpCisgICAgICAgIGNvcHlSZWN0cy5hcHBlbmQoc2Nyb2xsRGFtYWdlKTsKKwor
ICAgIE93blB0cjxXZWJQYWludEJ1ZmZlcj4gYm91bmRpbmdCdWZmZXI7CisgICAgVmVjdG9yPFdl
YlBhaW50QnVmZmVyKj4gY2xvbmVkQnVmZmVyczsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY29weVJlY3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYlBhaW50QnVmZmVyKiBidWZm
ZXIgPSAwOworICAgICAgICBJbnRQb2ludCBidWZmZXJPcmlnaW47CisKKyAgICAgICAgaWYgKHVw
ZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgT3duUHRyPFdlYlBhaW50
QnVmZmVyPiBjbG9uZSA9CisgICAgICAgICAgICAgICAgbV9wYWludGVyLT5jbG9uZVBhaW50QnVm
ZmVyRm9yQXJlYShjb3B5UmVjdHNbaV0sICZidWZmZXJPcmlnaW4pOworICAgICAgICAgICAgaWYg
KGNsb25lKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyID0gY2xvbmUuZ2V0KCk7CisgICAgICAg
ICAgICAgICAgY2xvbmVkQnVmZmVycy5hcHBlbmQoY2xvbmUubGVha1B0cigpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICBp
ZiAoIWJvdW5kaW5nQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG1heSBi
ZSBhYmxlIHRvIGdldCBieSB3aXRoIGEgc21hbGxlciBidWZmZXIgaGVyZSBpbgorICAgICAgICAg
ICAgICAgIC8vIHRoZSBjYXNlIHRoYXQgb3VyIGJvdW5kcyBpcyBwYXJ0aWFsbHkgZGVmaW5lZCBi
eSBwbHVnaW5zLCB3aGljaAorICAgICAgICAgICAgICAgIC8vIHZlbmRlZCB0aGVpciBvd24gcGFp
bnQgYnVmZmVyLgorICAgICAgICAgICAgICAgIGJvdW5kaW5nQnVmZmVyID0gYWRvcHRQdHIobV9z
dXJmYWNlLT5jcmVhdGVCdWZmZXIoYm91bmRzLnNpemUoKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcGFpbnRSZWN0KGJvdW5kaW5nQnVmZmVyLT5jYW52YXMoKSwgYm91bmRzLmxvY2F0
aW9uKCksIGNvcHlSZWN0c1tpXSk7CisgICAgICAgICAgICBidWZmZXJPcmlnaW4gPSBib3VuZHMu
bG9jYXRpb24oKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IGJvdW5kaW5nQnVmZmVyLmdldCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KGNvcHlSZWN0c1tpXS5sb2Nh
dGlvbigpLngoKSAtIGJ1ZmZlck9yaWdpbi54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb3B5UmVjdHNbaV0ubG9jYXRpb24oKS55KCkgLSBidWZmZXJPcmlnaW4ueSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29weVJlY3RzW2ldLndpZHRoKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb3B5UmVjdHNbaV0uaGVpZ2h0KCkpOworICAgICAgICBtX3N1cmZhY2Ut
PnBhaW50KGJ1ZmZlciwgY29weVJlY3RzW2ldLmxvY2F0aW9uKCksIHNvdXJjZVJlY3QpOworICAg
IH0KKworICAgIGlmIChtX3N1cmZhY2UtPmZsdXNoKCkpCisgICAgICAgIG1fZmx1c2hpbmcgPSB0
cnVlOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBkZWxl
dGVBbGxWYWx1ZXMoY2xvbmVkQnVmZmVycyk7Cit9CisKK3ZvaWQgUGFpbnRDb250cm9sbGVyOjpw
YWludFJlY3QoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IEludFBvaW50JiBjYW52YXNPcmlnaW4s
IGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgR3JhcGhpY3NDb250ZXh0QnVpbGRlciBidWls
ZGVyKGNhbnZhcyk7CisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0gYnVpbGRlci5jb250
ZXh0KCk7CisKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LnRyYW5zbGF0ZShzdGF0
aWNfY2FzdDxmbG9hdD4oLWNhbnZhc09yaWdpbi54KCkpLAorICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PGZsb2F0PigtY2FudmFzT3JpZ2luLnkoKSkpOworCisgICAgbV9wYWludGVy
LT5wYWludChjb250ZXh0LCByZWN0KTsKKworICAgIGlmIChzX3Nob3dEZWJ1Z1BhaW50UmVjdHMp
CisgICAgICAgIHBhaW50RGVidWdCb3JkZXIoY29udGV4dCwgcmVjdCk7CisKKyAgICBjb250ZXh0
LnJlc3RvcmUoKTsKK30KKwordm9pZCBQYWludENvbnRyb2xsZXI6OnBhaW50RGVidWdCb3JkZXIo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8v
IEN5Y2xlIHRocm91Z2ggdGhlc2UgY29sb3JzIHRvIGhlbHAgZGlzdGluZ3Vpc2ggbmV3IHBhaW50
IHJlY3RzLgorICAgIGNvbnN0IFJHQkEzMiBjb2xvcnNbXSA9IHsKKyAgICAgICAgbWFrZVJHQkEo
MHhGRiwgMCwgMCwgMHgzRiksCisgICAgICAgIG1ha2VSR0JBKDB4RkYsIDAsIDB4RkYsIDB4M0Yp
LAorICAgICAgICBtYWtlUkdCQSgwLCAwLCAweEZGLCAweDNGKQorICAgIH07CisgICAgc3RhdGlj
IGludCBjb2xvclNlbGVjdG9yID0gMDsKKworICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoU29s
aWRTdHJva2UpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoY29sb3JzW2NvbG9yU2VsZWN0
b3IrKyAmIDNdLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LnN0cm9rZVJlY3Qo
cmVjdCwgMS4wZik7Cit9CisKK3ZvaWQgUGFpbnRDb250cm9sbGVyOjp3aWxsRGVzdHJveSgpCit7
CisgICAgQVNTRVJUKCFtX2ZsdXNoaW5nKTsgIC8vIEluIHRoZSBmYXN0IHNodXRkb3duIGNhc2Us
IHdlIHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgZGlkRmx1c2guCisKKyAgICBpZiAobV9zdXJmYWNl
KSB7CisgICAgICAgIG1fc3VyZmFjZS0+c2V0Q2xpZW50KDApOworICAgICAgICBtX3N1cmZhY2Ug
PSAwOworICAgIH0KK30KKwordm9pZCBQYWludENvbnRyb2xsZXI6OmRpZEZsdXNoKCkKK3sKKyAg
ICBtX2ZsdXNoaW5nID0gZmFsc2U7CisgICAgdXBkYXRlKCZtX3VwZGF0ZVRpbWVyKTsKK30KKwor
dm9pZCBQYWludENvbnRyb2xsZXI6OmRpZFJlc2V0KCkKK3sKKyAgICBtX2ZsdXNoaW5nID0gZmFs
c2U7CisgICAgc2NoZWR1bGVJbnZhbGlkYXRpb24oSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9wYWludGluZy9QYWludENvbnRyb2xsZXIuaA0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL3BhaW50aW5nL1BhaW50Q29udHJvbGxlci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvcGFpbnRpbmcvUGFpbnRDb250cm9s
bGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhaW50Q29udHJvbGxl
cl9oCisjZGVmaW5lIFBhaW50Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJJbnRTaXplLmgiCisj
aW5jbHVkZSAiUGFpbnRBZ2dyZWdhdG9yLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRl
ICJXZWJDYW52YXMuaCIKKyNpbmNsdWRlICJXZWJQYWludFN1cmZhY2VDbGllbnQuaCIKKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFw
aGljc0NvbnRleHQ7CitjbGFzcyBJbnRSZWN0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgUGFpbnRlcjsKK2NsYXNzIFdlYlBhaW50U3VyZmFjZTsKKworLy8gVGhlIFBhaW50Q29u
dHJvbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcmVjZWl2aW5nIGRhbWFnZSBldmVudHMgYW5kCisv
LyBhc3luY2hyb25vdXNseSB1cGRhdGluZyBhIFdlYlBhaW50U3VyZmFjZSBiYXNlZCBvbiB0aGUg
cmVjZWl2ZWQgZGFtYWdlLgorLy8gUGFpbnRpbmcgaGFwcGVucyBieSByZXF1ZXN0aW5nIHRoYXQg
YSBQYWludGVyIHJlbmRlciBpbnRvIGEgV2ViQ2FudmFzLgorY2xhc3MgUGFpbnRDb250cm9sbGVy
IDogcHVibGljIFdlYlBhaW50U3VyZmFjZUNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIHZv
aWQgc2hvd0RlYnVnUGFpbnRSZWN0cyhib29sIHNob3cpOworCisgICAgc3RhdGljIFBhc3NPd25Q
dHI8UGFpbnRDb250cm9sbGVyPiBjcmVhdGUoUGFpbnRlciosIFdlYlBhaW50U3VyZmFjZSosIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB+UGFpbnRDb250cm9sbGVyKCk7CisKKyAgICB2
b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCk7CisgICAgdm9pZCBzY2hlZHVsZUludmFsaWRhdGlvbihj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBzY2hlZHVsZVNjcm9sbChpbnQgZHgs
IGludCBkeSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOworCitwcml2YXRlOgor
ICAgIFBhaW50Q29udHJvbGxlcihQYWludGVyKiwgV2ViUGFpbnRTdXJmYWNlKiwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYpOworICAgIHZvaWQgc2NoZWR1bGVVcGRhdGUoKTsKKyAgICB2b2lkIHVw
ZGF0ZShXZWJDb3JlOjpUaW1lcjxQYWludENvbnRyb2xsZXI+Kik7CisgICAgdm9pZCBwYWludFJl
Y3QoV2ViQ2FudmFzKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNhbnZhc09yaWdpbiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgcGFpbnREZWJ1Z0JvcmRlcihXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisKKyAgICAvLyBX
ZWJQYWludFN1cmZhY2VDbGllbnQgbWV0aG9kczoKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbERlc3Ry
b3koKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmx1c2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVzZXQoKTsKKworICAgIFdlYkNvcmU6OlRpbWVyPFBhaW50Q29udHJvbGxlcj4gbV91cGRhdGVU
aW1lcjsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKKyAgICBQYWludEFnZ3JlZ2F0b3Ig
bV9hZ2dyZWdhdG9yOworICAgIFBhaW50ZXIqIG1fcGFpbnRlcjsKKyAgICBXZWJQYWludFN1cmZh
Y2UqIG1fc3VyZmFjZTsKKyAgICBib29sIG1fZmx1c2hpbmc7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9wYWlu
dGluZy9QYWludGVyLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9wYWludGluZy9QYWludGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9wYWludGluZy9QYWludGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFBhaW50ZXJfaAorI2RlZmluZSBQYWludGVyX2gKKworI2luY2x1ZGUgIldlYkNhbnZh
cy5oIgorI2luY2x1ZGUgIldlYlBhaW50QnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xh
c3MgSW50UG9pbnQ7CitjbGFzcyBJbnRSZWN0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
c3RydWN0IFdlYlJlY3Q7CisKK2NsYXNzIFBhaW50ZXIgeworcHVibGljOgorICAgIC8vIFBhaW50
aW5nIG1heSBpbnZvbHZlIG11bHRpcGxlIGNhbGxzIHRvIHBhaW50KCkgaW4gb3JkZXIgdG8gY2Fw
dHVyZQorICAgIC8vIHBpeGVscyBmb3IgZGlmZmVyZW50IHN1Yi1yZWN0YW5nbGVzIHRoYXQgaGF2
ZSBkYW1hZ2UuICBBIHNlcXVlbmNlIG9mCisgICAgLy8gcGFpbnQgY2FsbHMgaXMgcHJlZml4ZWQg
YnkgYSBjYWxsIHRvIGFuaW1hdGUoKSBhbmQgbGF5b3V0KCkuCisgICAgLy8KKyAgICAvLyBJdCBp
cyBleHBlY3RlZCB0aGF0IGFuaW1hdGUoKSBhbmQgbGF5b3V0KCkgbWF5IGhhdmUgdGhlIHNpZGUt
ZWZmZWN0IG9mCisgICAgLy8gZ2VuZXJhdGluZyBkYW1hZ2UgKHNjaGVkdWxlSW52YWxpZGF0ZSgp
IGFuZCBzY2hlZHVsZVNjcm9sbCgpIGNhbGxzKS4KKworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRl
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KSA9IDA7CisKKyAgICAvLyBUbyBvcHRpbWl6ZSBwYWludGluZywgaXQgaXMgcG9zc2libGUgZm9y
IHRoZSBQYWludGVyIHRvIHN1cHBseSBhIHBhaW50CisgICAgLy8gYnVmZmVyIGZvciB0aGUgZ2l2
ZW4gcGFpbnRSZWN0LiAgVGhlIG9yaWdpbiBvZiB0aGUgYnVmZmVyIGlzIHJldHVybmVkCisgICAg
Ly8gc2luY2UgdGhlIGJ1ZmZlciBtYXkgY29ycmVzcG9uZCB0byBhIHBsdWdpbiB3aG9zZSBvcmln
aW4gbWF5IGRpZmZlciBmcm9tCisgICAgLy8gdGhhdCBvZiB0aGUgcGFpbnRSZWN0LgorICAgIHZp
cnR1YWwgUGFzc093blB0cjxXZWJQYWludEJ1ZmZlcj4gY2xvbmVQYWludEJ1ZmZlckZvckFyZWEo
CisgICAgICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHBhaW50UmVjdCwKKyAgICAgICAgV2Vi
Q29yZTo6SW50UG9pbnQqIGJ1ZmZlck9yaWdpbikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QYWlu
dEFnZ3JlZ2F0b3JUZXN0LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvUGFpbnRBZ2dyZWdhdG9yVGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BhaW50QWdncmVnYXRvclRlc3QuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwYWludGlu
Zy9QYWludEFnZ3JlZ2F0b3IuaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNl
IHsKKworVEVTVChQYWludEFnZ3JlZ2F0b3IsIEluaXRpYWxTdGF0ZSkKK3sKKyAgICBQYWludEFn
Z3JlZ2F0b3IgZ3JlZzsKKyAgICBFWFBFQ1RfRkFMU0UoZ3JlZy5oYXNQZW5kaW5nVXBkYXRlKCkp
OworfQorCitURVNUKFBhaW50QWdncmVnYXRvciwgU2luZ2xlSW52YWxpZGF0aW9uKQoreworICAg
IFBhaW50QWdncmVnYXRvciBncmVnOworCisgICAgSW50UmVjdCByZWN0KDIsIDQsIDEwLCAxNik7
CisgICAgZ3JlZy5pbnZhbGlkYXRlUmVjdChyZWN0KTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcu
aGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUg
dXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIEVYUEVD
VF9UUlVFKHVwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUX0VRKDFVLCB1
cGRhdGUucGFpbnRSZWN0cy5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKHJlY3QsIHVwZGF0ZS5w
YWludFJlY3RzWzBdKTsKK30KKworVEVTVChQYWludEFnZ3JlZ2F0b3IsIERvdWJsZURpc2pvaW50
SW52YWxpZGF0aW9uKQoreworICAgIFBhaW50QWdncmVnYXRvciBncmVnOworCisgICAgSW50UmVj
dCByMSgyLCA0LCAyLCA0MCk7CisgICAgSW50UmVjdCByMig0LCAyLCA0MCwgMik7CisKKyAgICBn
cmVnLmludmFsaWRhdGVSZWN0KHIxKTsKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHIyKTsKKwor
ICAgIEludFJlY3QgZXhwZWN0ZWRCb3VuZHMgPSB1bmlvblJlY3QocjEsIHIyKTsKKworICAgIEVY
UEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6
OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRl
KTsKKworICAgIEVYUEVDVF9UUlVFKHVwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHkoKSk7CisgICAg
RVhQRUNUX0VRKDJVLCB1cGRhdGUucGFpbnRSZWN0cy5zaXplKCkpOworCisgICAgRVhQRUNUX0VR
KGV4cGVjdGVkQm91bmRzLCB1cGRhdGUuY2FsY3VsYXRlUGFpbnRCb3VuZHMoKSk7Cit9CisKK1RF
U1QoUGFpbnRBZ2dyZWdhdG9yLCBEaXNqb2ludEludmFsaWRhdGlvbnNDb21iaW5lZCkKK3sKKyAg
ICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIC8vIE1ha2UgdGhlIHJlY3RhbmdsZXMgc3Vj
aCB0aGF0IHRoZXkgZG9uJ3Qgb3ZlcmxhcCBidXQgY292ZXIgYSB2ZXJ5IGxhcmdlCisgICAgLy8g
cGVyY2VudGFnZSBvZiB0aGUgYXJlYSBvZiBjb3ZlcmVkIGJ5IHRoZWlyIHVuaW9uLiBUaGlzIGlz
IHNvIHdlJ3JlIG5vdAorICAgIC8vIHZlcnkgc2Vuc2l0aXZlIHRvIHRoZSBjb21iaW5pbmcgaGV1
cmlzdGljIGluIHRoZSBwYWludCBhZ2dyZWdhdG9yLgorICAgIEludFJlY3QgcjEoMiwgNCwgMiwg
MTAwMCk7CisgICAgSW50UmVjdCByMig1LCAyLCAyLCAxMDAwKTsKKworICAgIGdyZWcuaW52YWxp
ZGF0ZVJlY3QocjEpOworICAgIGdyZWcuaW52YWxpZGF0ZVJlY3QocjIpOworCisgICAgSW50UmVj
dCBleHBlY3RlZEJvdW5kcyA9IHVuaW9uUmVjdChyMSwgcjIpOworCisgICAgRVhQRUNUX1RSVUUo
Z3JlZy5oYXNQZW5kaW5nVXBkYXRlKCkpOworICAgIFBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1Vw
ZGF0ZSB1cGRhdGU7CisgICAgZ3JlZy5wb3BQZW5kaW5nVXBkYXRlKCZ1cGRhdGUpOworCisgICAg
RVhQRUNUX1RSVUUodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlRfRVEo
MVUsIHVwZGF0ZS5wYWludFJlY3RzLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRC
b3VuZHMsIHVwZGF0ZS5wYWludFJlY3RzWzBdKTsKK30KKworVEVTVChQYWludEFnZ3JlZ2F0b3Is
IFNpbmdsZVNjcm9sbCkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJl
Y3QgcmVjdCgxLCAyLCAzLCA0KTsKKyAgICBJbnRQb2ludCBkZWx0YSgxLCAwKTsKKyAgICBncmVn
LnNjcm9sbFJlY3QoZGVsdGEueCgpLCBkZWx0YS55KCksIHJlY3QpOworCisgICAgRVhQRUNUX1RS
VUUoZ3JlZy5oYXNQZW5kaW5nVXBkYXRlKCkpOworICAgIFBhaW50QWdncmVnYXRvcjo6UGVuZGlu
Z1VwZGF0ZSB1cGRhdGU7CisgICAgZ3JlZy5wb3BQZW5kaW5nVXBkYXRlKCZ1cGRhdGUpOworCisg
ICAgRVhQRUNUX1RSVUUodXBkYXRlLnBhaW50UmVjdHMuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9FUShyZWN0
LCB1cGRhdGUuc2Nyb2xsUmVjdCk7CisKKyAgICBFWFBFQ1RfRVEoZGVsdGEueCgpLCB1cGRhdGUu
c2Nyb2xsRGVsdGEueCgpKTsKKyAgICBFWFBFQ1RfRVEoZGVsdGEueSgpLCB1cGRhdGUuc2Nyb2xs
RGVsdGEueSgpKTsKKworICAgIEludFJlY3QgcmVzdWx0aW5nRGFtYWdlID0gdXBkYXRlLmNhbGN1
bGF0ZVNjcm9sbERhbWFnZSgpOworICAgIEludFJlY3QgZXhwZWN0ZWREYW1hZ2UoMSwgMiwgMSwg
NCk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkRGFtYWdlLCByZXN1bHRpbmdEYW1hZ2UpOworfQor
CitURVNUKFBhaW50QWdncmVnYXRvciwgRG91YmxlT3ZlcmxhcHBpbmdTY3JvbGwpCit7CisgICAg
UGFpbnRBZ2dyZWdhdG9yIGdyZWc7CisKKyAgICBJbnRSZWN0IHJlY3QoMSwgMiwgMywgNCk7Cisg
ICAgSW50UG9pbnQgZGVsdGExKDEsIDApOworICAgIEludFBvaW50IGRlbHRhMigxLCAwKTsKKyAg
ICBncmVnLnNjcm9sbFJlY3QoZGVsdGExLngoKSwgZGVsdGExLnkoKSwgcmVjdCk7CisgICAgZ3Jl
Zy5zY3JvbGxSZWN0KGRlbHRhMi54KCksIGRlbHRhMi55KCksIHJlY3QpOworCisgICAgRVhQRUNU
X1RSVUUoZ3JlZy5oYXNQZW5kaW5nVXBkYXRlKCkpOworICAgIFBhaW50QWdncmVnYXRvcjo6UGVu
ZGluZ1VwZGF0ZSB1cGRhdGU7CisgICAgZ3JlZy5wb3BQZW5kaW5nVXBkYXRlKCZ1cGRhdGUpOwor
CisgICAgRVhQRUNUX1RSVUUodXBkYXRlLnBhaW50UmVjdHMuaXNFbXB0eSgpKTsKKyAgICBFWFBF
Q1RfRkFMU0UodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9FUShy
ZWN0LCB1cGRhdGUuc2Nyb2xsUmVjdCk7CisKKyAgICBJbnRQb2ludCBleHBlY3RlZERlbHRhKGRl
bHRhMS54KCkgKyBkZWx0YTIueCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGEx
LnkoKSArIGRlbHRhMi55KCkpOworICAgIEVYUEVDVF9FUShleHBlY3RlZERlbHRhLngoKSwgdXBk
YXRlLnNjcm9sbERlbHRhLngoKSk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkRGVsdGEueSgpLCB1
cGRhdGUuc2Nyb2xsRGVsdGEueSgpKTsKKworICAgIEludFJlY3QgcmVzdWx0aW5nRGFtYWdlID0g
dXBkYXRlLmNhbGN1bGF0ZVNjcm9sbERhbWFnZSgpOworICAgIEludFJlY3QgZXhwZWN0ZWREYW1h
Z2UoMSwgMiwgMiwgNCk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkRGFtYWdlLCByZXN1bHRpbmdE
YW1hZ2UpOworfQorCitURVNUKFBhaW50QWdncmVnYXRvciwgTmVnYXRpbmdTY3JvbGwpCit7Cisg
ICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7CisKKyAgICAvLyBTY3JvbGwgdHdpY2UgaW4gb3Bwb3Np
dGUgZGlyZWN0aW9ucyBieSBlcXVhbCBhbW91bnRzLiAgVGhlIHJlc3VsdAorICAgIC8vIHNob3Vs
ZCBiZSBubyBzY3JvbGxpbmcuCisKKyAgICBJbnRSZWN0IHJlY3QoMSwgMiwgMywgNCk7CisgICAg
SW50UG9pbnQgZGVsdGExKDEsIDApOworICAgIEludFBvaW50IGRlbHRhMigtMSwgMCk7CisgICAg
Z3JlZy5zY3JvbGxSZWN0KGRlbHRhMS54KCksIGRlbHRhMS55KCksIHJlY3QpOworICAgIGdyZWcu
c2Nyb2xsUmVjdChkZWx0YTIueCgpLCBkZWx0YTIueSgpLCByZWN0KTsKKworICAgIEVYUEVDVF9G
QUxTRShncmVnLmhhc1BlbmRpbmdVcGRhdGUoKSk7Cit9CisKK1RFU1QoUGFpbnRBZ2dyZWdhdG9y
LCBEaWFnb25hbFNjcm9sbCkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIC8v
IFdlIGRvbid0IHN1cHBvcnQgb3B0aW1pemVkIGRpYWdvbmFsIHNjcm9sbGluZywgc28gdGhpcyBz
aG91bGQgcmVzdWx0IGluCisgICAgLy8gcmVwYWludGluZy4KKworICAgIEludFJlY3QgcmVjdCgx
LCAyLCAzLCA0KTsKKyAgICBJbnRQb2ludCBkZWx0YSgxLCAxKTsKKyAgICBncmVnLnNjcm9sbFJl
Y3QoZGVsdGEueCgpLCBkZWx0YS55KCksIHJlY3QpOworCisgICAgRVhQRUNUX1RSVUUoZ3JlZy5o
YXNQZW5kaW5nVXBkYXRlKCkpOworICAgIFBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0ZSB1
cGRhdGU7CisgICAgZ3JlZy5wb3BQZW5kaW5nVXBkYXRlKCZ1cGRhdGUpOworCisgICAgRVhQRUNU
X1RSVUUodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlRfRVEoMVUsIHVw
ZGF0ZS5wYWludFJlY3RzLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEocmVjdCwgdXBkYXRlLnBh
aW50UmVjdHNbMF0pOworfQorCitURVNUKFBhaW50QWdncmVnYXRvciwgQ29udGFpbmVkUGFpbnRB
ZnRlclNjcm9sbCkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJlY3Qg
c2Nyb2xsUmVjdCgwLCAwLCAxMCwgMTApOworICAgIGdyZWcuc2Nyb2xsUmVjdCgyLCAwLCBzY3Jv
bGxSZWN0KTsKKworICAgIEludFJlY3QgcGFpbnRSZWN0KDQsIDQsIDIsIDIpOworICAgIGdyZWcu
aW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVu
ZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRl
OworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIC8vIGV4cGVjdGlu
ZyBhIHBhaW50IHJlY3QgaW5zaWRlIHRoZSBzY3JvbGwgcmVjdAorICAgIEVYUEVDVF9GQUxTRSh1
cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUSgxVSwgdXBkYXRlLnBh
aW50UmVjdHMuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUShzY3JvbGxSZWN0LCB1cGRhdGUuc2Ny
b2xsUmVjdCk7CisgICAgRVhQRUNUX0VRKHBhaW50UmVjdCwgdXBkYXRlLnBhaW50UmVjdHNbMF0p
OworfQorCitURVNUKFBhaW50QWdncmVnYXRvciwgQ29udGFpbmVkUGFpbnRCZWZvcmVTY3JvbGwp
Cit7CisgICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7CisKKyAgICBJbnRSZWN0IHBhaW50UmVjdCg0
LCA0LCAyLCAyKTsKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7CisKKyAgICBJ
bnRSZWN0IHNjcm9sbFJlY3QoMCwgMCwgMTAsIDEwKTsKKyAgICBncmVnLnNjcm9sbFJlY3QoMiwg
MCwgc2Nyb2xsUmVjdCk7CisKKyAgICBFWFBFQ1RfVFJVRShncmVnLmhhc1BlbmRpbmdVcGRhdGUo
KSk7CisgICAgUGFpbnRBZ2dyZWdhdG9yOjpQZW5kaW5nVXBkYXRlIHVwZGF0ZTsKKyAgICBncmVn
LnBvcFBlbmRpbmdVcGRhdGUoJnVwZGF0ZSk7CisKKyAgICAvLyBFeHBlY3RpbmcgYSBwYWludCBy
ZWN0IGluc2lkZSB0aGUgc2Nyb2xsIHJlY3QKKyAgICBFWFBFQ1RfRkFMU0UodXBkYXRlLnNjcm9s
bFJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEoMVUsIHVwZGF0ZS5wYWludFJlY3RzLnNp
emUoKSk7CisKKyAgICBwYWludFJlY3QubW92ZSgyLCAwKTsKKworICAgIEVYUEVDVF9FUShzY3Jv
bGxSZWN0LCB1cGRhdGUuc2Nyb2xsUmVjdCk7CisgICAgRVhQRUNUX0VRKHBhaW50UmVjdCwgdXBk
YXRlLnBhaW50UmVjdHNbMF0pOworfQorCitURVNUKFBhaW50QWdncmVnYXRvciwgQ29udGFpbmVk
UGFpbnRzQmVmb3JlQW5kQWZ0ZXJTY3JvbGwpCit7CisgICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7
CisKKyAgICBJbnRSZWN0IHBhaW50UmVjdDEoNCwgNCwgMiwgMik7CisgICAgZ3JlZy5pbnZhbGlk
YXRlUmVjdChwYWludFJlY3QxKTsKKworICAgIEludFJlY3Qgc2Nyb2xsUmVjdCgwLCAwLCAxMCwg
MTApOworICAgIGdyZWcuc2Nyb2xsUmVjdCgyLCAwLCBzY3JvbGxSZWN0KTsKKworICAgIEludFJl
Y3QgcGFpbnRSZWN0Mig2LCA0LCAyLCAyKTsKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHBhaW50
UmVjdDIpOworCisgICAgSW50UmVjdCBleHBlY3RlZFBhaW50UmVjdCA9IHBhaW50UmVjdDI7CisK
KyAgICBFWFBFQ1RfVFJVRShncmVnLmhhc1BlbmRpbmdVcGRhdGUoKSk7CisgICAgUGFpbnRBZ2dy
ZWdhdG9yOjpQZW5kaW5nVXBkYXRlIHVwZGF0ZTsKKyAgICBncmVnLnBvcFBlbmRpbmdVcGRhdGUo
JnVwZGF0ZSk7CisKKyAgICAvLyBFeHBlY3RpbmcgYSBwYWludCByZWN0IGluc2lkZSB0aGUgc2Ny
b2xsIHJlY3QKKyAgICBFWFBFQ1RfRkFMU0UodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsK
KyAgICBFWFBFQ1RfRVEoMVUsIHVwZGF0ZS5wYWludFJlY3RzLnNpemUoKSk7CisKKyAgICBFWFBF
Q1RfRVEoc2Nyb2xsUmVjdCwgdXBkYXRlLnNjcm9sbFJlY3QpOworICAgIEVYUEVDVF9FUShleHBl
Y3RlZFBhaW50UmVjdCwgdXBkYXRlLnBhaW50UmVjdHNbMF0pOworfQorCitURVNUKFBhaW50QWdn
cmVnYXRvciwgTGFyZ2VDb250YWluZWRQYWludEFmdGVyU2Nyb2xsKQoreworICAgIFBhaW50QWdn
cmVnYXRvciBncmVnOworCisgICAgSW50UmVjdCBzY3JvbGxSZWN0KDAsIDAsIDEwLCAxMCk7Cisg
ICAgZ3JlZy5zY3JvbGxSZWN0KDAsIDEsIHNjcm9sbFJlY3QpOworCisgICAgSW50UmVjdCBwYWlu
dFJlY3QoMCwgMCwgMTAsIDkpOyAgLy8gUmVwYWludCA5MCUKKyAgICBncmVnLmludmFsaWRhdGVS
ZWN0KHBhaW50UmVjdCk7CisKKyAgICBFWFBFQ1RfVFJVRShncmVnLmhhc1BlbmRpbmdVcGRhdGUo
KSk7CisgICAgUGFpbnRBZ2dyZWdhdG9yOjpQZW5kaW5nVXBkYXRlIHVwZGF0ZTsKKyAgICBncmVn
LnBvcFBlbmRpbmdVcGRhdGUoJnVwZGF0ZSk7CisKKyAgICBFWFBFQ1RfVFJVRSh1cGRhdGUuc2Ny
b2xsUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUSgxVSwgdXBkYXRlLnBhaW50UmVjdHMu
c2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUShzY3JvbGxSZWN0LCB1cGRhdGUucGFpbnRSZWN0c1sw
XSk7Cit9CisKK1RFU1QoUGFpbnRBZ2dyZWdhdG9yLCBMYXJnZUNvbnRhaW5lZFBhaW50QmVmb3Jl
U2Nyb2xsKQoreworICAgIFBhaW50QWdncmVnYXRvciBncmVnOworCisgICAgSW50UmVjdCBwYWlu
dFJlY3QoMCwgMCwgMTAsIDkpOyAgLy8gUmVwYWludCA5MCUKKyAgICBncmVnLmludmFsaWRhdGVS
ZWN0KHBhaW50UmVjdCk7CisKKyAgICBJbnRSZWN0IHNjcm9sbFJlY3QoMCwgMCwgMTAsIDEwKTsK
KyAgICBncmVnLnNjcm9sbFJlY3QoMCwgMSwgc2Nyb2xsUmVjdCk7CisKKyAgICBFWFBFQ1RfVFJV
RShncmVnLmhhc1BlbmRpbmdVcGRhdGUoKSk7CisgICAgUGFpbnRBZ2dyZWdhdG9yOjpQZW5kaW5n
VXBkYXRlIHVwZGF0ZTsKKyAgICBncmVnLnBvcFBlbmRpbmdVcGRhdGUoJnVwZGF0ZSk7CisKKyAg
ICBFWFBFQ1RfVFJVRSh1cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9F
USgxVSwgdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUShzY3JvbGxS
ZWN0LCB1cGRhdGUucGFpbnRSZWN0c1swXSk7Cit9CisKK1RFU1QoUGFpbnRBZ2dyZWdhdG9yLCBP
dmVybGFwcGluZ1BhaW50QmVmb3JlU2Nyb2xsKQoreworICAgIFBhaW50QWdncmVnYXRvciBncmVn
OworCisgICAgSW50UmVjdCBwYWludFJlY3QoNCwgNCwgMTAsIDIpOworICAgIGdyZWcuaW52YWxp
ZGF0ZVJlY3QocGFpbnRSZWN0KTsKKworICAgIEludFJlY3Qgc2Nyb2xsUmVjdCgwLCAwLCAxMCwg
MTApOworICAgIGdyZWcuc2Nyb2xsUmVjdCgyLCAwLCBzY3JvbGxSZWN0KTsKKworICAgIEludFJl
Y3QgZXhwZWN0ZWRQYWludFJlY3QgPSB1bmlvblJlY3Qoc2Nyb2xsUmVjdCwgcGFpbnRSZWN0KTsK
KworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFn
Z3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0
ZSgmdXBkYXRlKTsKKworICAgIEVYUEVDVF9UUlVFKHVwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHko
KSk7CisgICAgRVhQRUNUX0VRKDFVLCB1cGRhdGUucGFpbnRSZWN0cy5zaXplKCkpOworCisgICAg
RVhQRUNUX0VRKGV4cGVjdGVkUGFpbnRSZWN0LCB1cGRhdGUucGFpbnRSZWN0c1swXSk7Cit9CisK
K1RFU1QoUGFpbnRBZ2dyZWdhdG9yLCBPdmVybGFwcGluZ1BhaW50QWZ0ZXJTY3JvbGwpCit7Cisg
ICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7CisKKyAgICBJbnRSZWN0IHNjcm9sbFJlY3QoMCwgMCwg
MTAsIDEwKTsKKyAgICBncmVnLnNjcm9sbFJlY3QoMiwgMCwgc2Nyb2xsUmVjdCk7CisKKyAgICBJ
bnRSZWN0IHBhaW50UmVjdCg0LCA0LCAxMCwgMik7CisgICAgZ3JlZy5pbnZhbGlkYXRlUmVjdChw
YWludFJlY3QpOworCisgICAgSW50UmVjdCBleHBlY3RlZFBhaW50UmVjdCA9IHVuaW9uUmVjdChz
Y3JvbGxSZWN0LCBwYWludFJlY3QpOworCisgICAgRVhQRUNUX1RSVUUoZ3JlZy5oYXNQZW5kaW5n
VXBkYXRlKCkpOworICAgIFBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0ZSB1cGRhdGU7Cisg
ICAgZ3JlZy5wb3BQZW5kaW5nVXBkYXRlKCZ1cGRhdGUpOworCisgICAgRVhQRUNUX1RSVUUodXBk
YXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEoMVUsIHVwZGF0ZS5wYWlu
dFJlY3RzLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRQYWludFJlY3QsIHVwZGF0
ZS5wYWludFJlY3RzWzBdKTsKK30KKworVEVTVChQYWludEFnZ3JlZ2F0b3IsIERpc2pvaW50UGFp
bnRCZWZvcmVTY3JvbGwpCit7CisgICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7CisKKyAgICBJbnRS
ZWN0IHBhaW50UmVjdCg0LCA0LCAxMCwgMik7CisgICAgZ3JlZy5pbnZhbGlkYXRlUmVjdChwYWlu
dFJlY3QpOworCisgICAgSW50UmVjdCBzY3JvbGxSZWN0KDAsIDAsIDIsIDEwKTsKKyAgICBncmVn
LnNjcm9sbFJlY3QoMiwgMCwgc2Nyb2xsUmVjdCk7CisKKyAgICBFWFBFQ1RfVFJVRShncmVnLmhh
c1BlbmRpbmdVcGRhdGUoKSk7CisgICAgUGFpbnRBZ2dyZWdhdG9yOjpQZW5kaW5nVXBkYXRlIHVw
ZGF0ZTsKKyAgICBncmVnLnBvcFBlbmRpbmdVcGRhdGUoJnVwZGF0ZSk7CisKKyAgICBFWFBFQ1Rf
RkFMU0UodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEoMVUsIHVw
ZGF0ZS5wYWludFJlY3RzLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEocGFpbnRSZWN0LCB1cGRh
dGUucGFpbnRSZWN0c1swXSk7CisgICAgRVhQRUNUX0VRKHNjcm9sbFJlY3QsIHVwZGF0ZS5zY3Jv
bGxSZWN0KTsKK30KKworVEVTVChQYWludEFnZ3JlZ2F0b3IsIERpc2pvaW50UGFpbnRBZnRlclNj
cm9sbCkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJlY3Qgc2Nyb2xs
UmVjdCgwLCAwLCAyLCAxMCk7CisgICAgZ3JlZy5zY3JvbGxSZWN0KDIsIDAsIHNjcm9sbFJlY3Qp
OworCisgICAgSW50UmVjdCBwYWludFJlY3QoNCwgNCwgMTAsIDIpOworICAgIGdyZWcuaW52YWxp
ZGF0ZVJlY3QocGFpbnRSZWN0KTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1Vw
ZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAg
IGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIEVYUEVDVF9GQUxTRSh1cGRh
dGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUSgxVSwgdXBkYXRlLnBhaW50
UmVjdHMuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUShwYWludFJlY3QsIHVwZGF0ZS5wYWludFJl
Y3RzWzBdKTsKKyAgICBFWFBFQ1RfRVEoc2Nyb2xsUmVjdCwgdXBkYXRlLnNjcm9sbFJlY3QpOwor
fQorCitURVNUKFBhaW50QWdncmVnYXRvciwgQ29udGFpbmVkUGFpbnRUcmltbWVkQnlTY3JvbGwp
Cit7CisgICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7CisKKyAgICBJbnRSZWN0IHBhaW50UmVjdCg0
LCA0LCA2LCA2KTsKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7CisKKyAgICBJ
bnRSZWN0IHNjcm9sbFJlY3QoMCwgMCwgMTAsIDEwKTsKKyAgICBncmVnLnNjcm9sbFJlY3QoMiwg
MCwgc2Nyb2xsUmVjdCk7CisKKyAgICAvLyBUaGUgcGFpbnQgcmVjdCBzaG91bGQgaGF2ZSBiZWNv
bWUgbmFycm93ZXIuCisgICAgSW50UmVjdCBleHBlY3RlZFBhaW50UmVjdCg2LCA0LCA0LCA2KTsK
KworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFn
Z3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0
ZSgmdXBkYXRlKTsKKworICAgIEVYUEVDVF9GQUxTRSh1cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5
KCkpOworICAgIEVYUEVDVF9FUSgxVSwgdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpKTsKKworICAg
IEVYUEVDVF9FUShleHBlY3RlZFBhaW50UmVjdCwgdXBkYXRlLnBhaW50UmVjdHNbMF0pOworICAg
IEVYUEVDVF9FUShzY3JvbGxSZWN0LCB1cGRhdGUuc2Nyb2xsUmVjdCk7Cit9CisKK1RFU1QoUGFp
bnRBZ2dyZWdhdG9yLCBDb250YWluZWRQYWludEVsaW1pbmF0ZWRCeVNjcm9sbCkKK3sKKyAgICBQ
YWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJlY3QgcGFpbnRSZWN0KDQsIDQsIDYsIDYp
OworICAgIGdyZWcuaW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsKKworICAgIEludFJlY3Qgc2Ny
b2xsUmVjdCgwLCAwLCAxMCwgMTApOworICAgIGdyZWcuc2Nyb2xsUmVjdCg2LCAwLCBzY3JvbGxS
ZWN0KTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQ
YWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGlu
Z1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIEVYUEVDVF9GQUxTRSh1cGRhdGUuc2Nyb2xsUmVjdC5p
c0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKHVwZGF0ZS5wYWludFJlY3RzLmlzRW1wdHkoKSk7
CisKKyAgICBFWFBFQ1RfRVEoc2Nyb2xsUmVjdCwgdXBkYXRlLnNjcm9sbFJlY3QpOworfQorCitU
RVNUKFBhaW50QWdncmVnYXRvciwgQ29udGFpbmVkUGFpbnRBZnRlclNjcm9sbFRyaW1tZWRCeVNj
cm9sbERhbWFnZSkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJlY3Qg
c2Nyb2xsUmVjdCgwLCAwLCAxMCwgMTApOworICAgIGdyZWcuc2Nyb2xsUmVjdCg0LCAwLCBzY3Jv
bGxSZWN0KTsKKworICAgIEludFJlY3QgcGFpbnRSZWN0KDIsIDAsIDQsIDEwKTsKKyAgICBncmVn
LmludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7CisKKyAgICBJbnRSZWN0IGV4cGVjdGVkU2Nyb2xs
RGFtYWdlKDAsIDAsIDQsIDEwKTsKKyAgICBJbnRSZWN0IGV4cGVjdGVkUGFpbnRSZWN0KDQsIDAs
IDIsIDEwKTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAg
ICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVu
ZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIEVYUEVDVF9GQUxTRSh1cGRhdGUuc2Nyb2xsUmVj
dC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUSgxVSwgdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgp
KTsKKworICAgIEVYUEVDVF9FUShzY3JvbGxSZWN0LCB1cGRhdGUuc2Nyb2xsUmVjdCk7CisgICAg
RVhQRUNUX0VRKGV4cGVjdGVkU2Nyb2xsRGFtYWdlLCB1cGRhdGUuY2FsY3VsYXRlU2Nyb2xsRGFt
YWdlKCkpOworICAgIEVYUEVDVF9FUShleHBlY3RlZFBhaW50UmVjdCwgdXBkYXRlLnBhaW50UmVj
dHNbMF0pOworfQorCitURVNUKFBhaW50QWdncmVnYXRvciwgQ29udGFpbmVkUGFpbnRBZnRlclNj
cm9sbEVsaW1pbmF0ZWRCeVNjcm9sbERhbWFnZSkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3Jl
ZzsKKworICAgIEludFJlY3Qgc2Nyb2xsUmVjdCgwLCAwLCAxMCwgMTApOworICAgIGdyZWcuc2Ny
b2xsUmVjdCg0LCAwLCBzY3JvbGxSZWN0KTsKKworICAgIEludFJlY3QgcGFpbnRSZWN0KDIsIDAs
IDIsIDEwKTsKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7CisKKyAgICBJbnRS
ZWN0IGV4cGVjdGVkU2Nyb2xsRGFtYWdlKDAsIDAsIDQsIDEwKTsKKworICAgIEVYUEVDVF9UUlVF
KGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdV
cGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAg
IEVYUEVDVF9GQUxTRSh1cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9U
UlVFKHVwZGF0ZS5wYWludFJlY3RzLmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoc2Nyb2xs
UmVjdCwgdXBkYXRlLnNjcm9sbFJlY3QpOworICAgIEVYUEVDVF9FUShleHBlY3RlZFNjcm9sbERh
bWFnZSwgdXBkYXRlLmNhbGN1bGF0ZVNjcm9sbERhbWFnZSgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81117</attachid>
            <date>2011-02-03 15:07:15 -0800</date>
            <delta_ts>2012-01-12 15:15:32 -0800</delta_ts>
            <desc>v2 patch</desc>
            <filename>paint_controller_2.txt</filename>
            <type>text/plain</type>
            <size>82618</size>
            <attacher name="Darin Fisher (:fishd, Google)">fishd</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gNzc0ODQpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTM4NSw2
ICszODUsMTEgQEAKICAgICAgICAgICAgICAgICAnc3JjL05vdGlmaWNhdGlvblByZXNlbnRlcklt
cGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9wYWludGluZy9HcmFwaGljc0NvbnRleHRCdWlsZGVy
LmgnLAorICAgICAgICAgICAgICAgICdzcmMvcGFpbnRpbmcvUGFpbnRBZ2dyZWdhdG9yLmNwcCcs
CisgICAgICAgICAgICAgICAgJ3NyYy9wYWludGluZy9QYWludEFnZ3JlZ2F0b3IuaCcsCisgICAg
ICAgICAgICAgICAgJ3NyYy9wYWludGluZy9QYWludENvbnRyb2xsZXIuY3BwJywKKyAgICAgICAg
ICAgICAgICAnc3JjL3BhaW50aW5nL1BhaW50Q29udHJvbGxlci5oJywKKyAgICAgICAgICAgICAg
ICAnc3JjL3BhaW50aW5nL1BhaW50ZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9QbGF0Zm9y
bUJyaWRnZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENo
YW5uZWwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFu
bmVsLmgnLApAQCAtNTU3LDYgKzU2Miw3IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJVUkxF
cnJvci5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVmlld0ltcGwuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYlZpZXdJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvV2Vi
V2lkZ2V0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJXb3JrZXJCYXNlLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJXb3JrZXJCYXNlLmgnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViV29ya2VyQ2xpZW50SW1wbC5jcHAnLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkJKHJldmlzaW9uIDc3NDg0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAogICAgICAgICAgICAgJ3Rl
c3RzL0lEQktleVBhdGhUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvS2V5Ym9hcmRUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvS1VSTFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0
ZXN0cy9QYWludEFnZ3JlZ2F0b3JUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUE9EQXJl
bmFUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUE9ESW50ZXJ2YWxUcmVlVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL1BPRFJlZEJsYWNrVHJlZVRlc3QuY3BwJywKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbi5oDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tbW9uLmgJKHJldmlzaW9uIDc3NDg0
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tbW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDEwIEBACiAgICAgI2RlZmluZSBXRUJLSVRfVVNJTkdfSlNDIDAK
ICNlbmRpZgogCisjaWYgIWRlZmluZWQoV0VCS0lUX1VTSU5HX1BBSU5UU1VSRkFDRSkKKyAgICAj
ZGVmaW5lIFdFQktJVF9VU0lOR19QQUlOVFNVUkZBQ0UgMQorI2VuZGlmCisKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAvLyBFeHBvcnRlZCBzeW1ib2xzIG5lZWQgdG8gYmUgYW5ub3RhdGVkIHdp
dGggV0VCS0lUX0FQSQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQ
YWludEJ1ZmZlci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViUGFpbnRCdWZmZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlBhaW50QnVmZmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYlBhaW50QnVmZmVyX2gKKyNkZWZpbmUgV2ViUGFpbnRCdWZmZXJfaAorCisjaW5j
bHVkZSAiV2ViQ2FudmFzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBBIGJ1ZmZlciB1
c2VkIHRvIHJlY2VpdmUgc29mdHdhcmUgcmVuZGVyZWQgb3V0cHV0ICh2aWEgV2ViQ2FudmFzKSB0
aGF0IG1heQorLy8gYmUgcGFpbnRlZCBvbnRvIGEgV2ViUGFpbnRTdXJmYWNlLgorY2xhc3MgV2Vi
UGFpbnRCdWZmZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYlBhaW50QnVmZmVyKCkge30K
KworICAgIC8vIFJldHVybnMgYSBjYW52YXMgdGhhdCBtYXkgYmUgdXNlZCB0byBtb2RpZnkgdGhl
IHVuZGVybHlpbmcgcGl4ZWxzIG9mCisgICAgLy8gdGhpcyBidWZmZXIuCisgICAgdmlydHVhbCBX
ZWJDYW52YXMqIGNhbnZhcygpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhaW50U3VyZmFj
ZS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFp
bnRTdXJmYWNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJQYWludFN1cmZhY2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2ViUGFpbnRTdXJmYWNlX2gKKyNkZWZpbmUgV2ViUGFpbnRTdXJmYWNlX2gKKworI2luY2x1ZGUg
IldlYkNvbW1vbi5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFpbnRCdWZm
ZXI7CitjbGFzcyBXZWJQYWludFN1cmZhY2VDbGllbnQ7CitzdHJ1Y3QgV2ViUG9pbnQ7CitzdHJ1
Y3QgV2ViUmVjdDsKK3N0cnVjdCBXZWJTaXplOworCitjbGFzcyBXZWJQYWludFN1cmZhY2Ugewor
cHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBzZXRDbGllbnQoV2ViUGFpbnRTdXJmYWNlQ2xpZW50
KikgPSAwOworCisgICAgdmlydHVhbCBXZWJQYWludEJ1ZmZlciogY3JlYXRlQnVmZmVyKGNvbnN0
IFdlYlNpemUmKSA9IDA7CisKKyAgICAvLyBFbnF1ZXVlcyBhIHBhaW50IG9mIHRoZSByZWdpb24g
b2YgdGhlIGJ1ZmZlciBnaXZlbiBieSB8c291cmNlUmVjdHwgaW50bworICAgIC8vIHRoZSBzdXJm
YWNlIGF0IHRoZSBwb3NpdGlvbiBnaXZlbiBieSB8ZGVzdGluYXRpb25Qb2ludHwuCisgICAgLy8K
KyAgICAvLyBUaGUgfHNvdXJjZVJlY3R8IHBhcmFtZXRlciBpcyBzcGVjaWZpZWQgaW4gdGhlIGNv
b3JkaW5hdGUgc3lzdGVtIG9mIHRoZQorICAgIC8vIGJ1ZmZlciBiZWluZyBjb3BpZWQuICBUaGUg
fGRlc3RpbmF0aW9uUG9pbnR8IHBhcmFtZXRlciBpcyBzcGVjaWZpZWQgaW4KKyAgICAvLyB0aGUg
Y29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHN1cmZhY2UgYmVpbmcgbW9kaWZpZWQuCisgICAgLy8K
KyAgICAvLyBUaGlzIG1vZGlmaWNhdGlvbiB0byB0aGUgc3VyZmFjZSBkb2VzIG5vdCB0YWtlIGVm
ZmVjdCB1bnRpbCBmbHVzaCBpcworICAgIC8vIGNhbGxlZC4KKyAgICAvLworICAgIC8vIE5PVEU6
IFRoZSBnaXZlbiBwYWludCBidWZmZXIgbXVzdCByZW1haW4gdmFsaWQgdW50aWwgZmx1c2goKSBp
cyBjYWxsZWQsCisgICAgLy8gYW5kIHRoZSBidWZmZXIgbWF5IGJlIGRlbGV0ZWQgb25jZSBmbHVz
aCgpIHJldHVybnMuCisgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYlBhaW50QnVmZmVyKiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViUG9pbnQmIGRlc3RpbmF0aW9uUG9pbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlJlY3QmIHNvdXJjZVJlY3QpID0gMDsKKwor
ICAgIC8vIEVucXVldWVzIGEgc2Nyb2xsIG9mIHRoZSByZWdpb24gb2YgdGhlIHN1cmZhY2UgZ2l2
ZW4gYnkgfGNsaXBSZWN0fCBieQorICAgIC8vIHRoZSBhbW91bnQgZ2l2ZW4gYnkgfGRlbHRhfC4K
KyAgICAvLyAKKyAgICAvLyBUaGlzIG1vZGlmaWNhdGlvbiB0byB0aGUgc3VyZmFjZSBkb2VzIG5v
dCB0YWtlIGVmZmVjdCB1bnRpbCBmbHVzaCBpcworICAgIC8vIGNhbGxlZC4KKyAgICB2aXJ0dWFs
IHZvaWQgc2Nyb2xsKGNvbnN0IFdlYlJlY3QmIGNsaXBSZWN0LCBjb25zdCBXZWJQb2ludCYgZGVs
dGEpID0gMDsKKworICAgIC8vIEZsdXNoZXMgYW55IGVucXVldWVkIHBhaW50IGFuZCBzY3JvbGwg
Y29tbWFuZHMuCisgICAgLy8KKyAgICAvLyBSZXR1cm5zIHRydWUgdG8gaW5kaWNhdGUgdGhhdCBh
IGZsdXNoIHdhcyBzY2hlZHVsZWQsIGFuZCBpZiB0aGUgZmx1c2ggaXMKKyAgICAvLyBzdWNjZXNz
ZnVsIHRoZW4sIFdlYlBhaW50U3VyZmFjZUNsaWVudDo6ZGlkRmx1c2ggd2lsbCBiZSBjYWxsZWQu
ICBFbHNlLAorICAgIC8vIFdlYlBhaW50U3VyZmFjZUNsaWVudDo6ZGlkUmVzZXQgd2lsbCBiZSBj
YWxsZWQsIGluZGljYXRpbmcgdGhhdCB0aGUKKyAgICAvLyBmbHVzaCBmYWlsZWQgYW5kIG1vcmVv
dmVyIHRoYXQgdGhlIHN1cmZhY2UgbXVzdCBiZSByZXBhaW50ZWQuCisgICAgLy8KKyAgICAvLyBS
ZXR1cm5zIGZhbHNlIGlmIHVuYWJsZSB0byBmbHVzaCBhdCB0aGlzIHRpbWUgKGUuZy4sIGJlY2F1
c2UgYSBwcmlvcgorICAgIC8vIGZsdXNoIGlzIHN0aWxsIGluIHByb2dyZXNzKS4KKyAgICB2aXJ0
dWFsIGJvb2wgZmx1c2goKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB+V2ViUGFpbnRTdXJmYWNl
KCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWludFN1cmZhY2VDbGllbnQuaA0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhaW50U3VyZmFjZUNs
aWVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
UGFpbnRTdXJmYWNlQ2xpZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYlBhaW50U3VyZmFjZUNsaWVudF9oCisjZGVmaW5lIFdlYlBhaW50U3VyZmFjZUNsaWVudF9o
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWludFN1cmZhY2U7CisKK2NsYXNz
IFdlYlBhaW50U3VyZmFjZUNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gTm90aWZpZXMgdGhlIGNs
aWVudCB0byBkcm9wIGFueSByZWZlcmVuY2VzIGl0IG1heSBoYXZlIHRvIHRoZSBzdXJmYWNlCisg
ICAgLy8gYXMgdGhlIHN1cmZhY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLgorICAgIHZpcnR1
YWwgdm9pZCB3aWxsRGVzdHJveSgpID0gMDsKKworICAgIC8vIEluZGljYXRlcyB0aGF0IGEgZmx1
c2ggY29tbWFuZCBpc3N1ZWQgb24gdGhlIFdlYlBhaW50U3VyZmFjZSBjb21wbGV0ZWQKKyAgICAv
LyBzdWNjZXNzZnVsbHkuICBJdCBpcyBub3cgT0sgdG8gaXNzdWUgYW5vdGhlciBmbHVzaCBjb21t
YW5kLgorICAgIHZpcnR1YWwgdm9pZCBkaWRGbHVzaCgpID0gMDsKKworICAgIC8vIEluZGljYXRl
cyB0aGF0IHRoZSBkYXRhIGZvciB0aGUgc3VyZmFjZSBoYXMgYmVlbiBsb3N0IChlLmcuLCBhcyBh
IHJlc3VsdAorICAgIC8vIG9mIHJlc2l6aW5nIHRoZSBzdXJmYWNlKS4gIElmIHRoaXMgaXMgcmVj
ZWl2ZWQgd2hpbGUgYSBmbHVzaCBpcyBwZW5kaW5nLAorICAgIC8vIHRoZW4gaXQgaW1wbGllcyB0
aGF0IHRoZSBmbHVzaCBmYWlsZWQgdG8gY29tcGxldGUuICBJdCBpcyBub3cgT0sgdG8KKyAgICAv
LyBpc3N1ZSBhIGZsdXNoIGNvbW1hbmQsIGFuZCBpdCBpcyBuZWNlc3NhcnkgdG8gcmVwYWludCB0
aGUgZW50aXJlCisgICAgLy8gc3VyZmFjZS4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVzZXQoKSA9
IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVnaW4uaA0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpbi5oCShyZXZpc2lvbiA3NzQ4NCkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2ViRGF0YVNvdXJj
ZTsKIGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViSW5wdXRFdmVudDsKK2NsYXNzIFdlYlBhaW50
QnVmZmVyOwogY2xhc3MgV2ViUGx1Z2luQ29udGFpbmVyOwogY2xhc3MgV2ViVVJMUmVzcG9uc2U7
CiBzdHJ1Y3QgV2ViQ3Vyc29ySW5mbzsKQEAgLTY1LDEwICs2NiwyMCBAQCBwdWJsaWM6CiAgICAg
ICAgIGNvbnN0IFdlYlJlY3QmIGZyYW1lUmVjdCwgY29uc3QgV2ViUmVjdCYgY2xpcFJlY3QsCiAg
ICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJSZWN0PiYgY3V0T3V0c1JlY3RzLCBib29sIGlzVmlz
aWJsZSkgPSAwOwogICAgIAotICAgIC8vIElmIHRoZSBwbHVnaW4gaW5zdGFuY2UgaXMgYmFja2Vk
IGJ5IGFuIE9wZW5HTCB0ZXh0dXJlLCByZXR1cm4gaXRzIElEIGluIHRoZQotICAgIC8vIGNvbXBv
c2l0b3JzIG5hbWVzcGFjZS4gT3RoZXJ3aXNlIHJldHVybiAwLiBSZXR1cm5zIDAgYnkgZGVmYXVs
dC4KKyAgICAvLyBJZiB0aGUgcGx1Z2luIGluc3RhbmNlIGlzIGJhY2tlZCBieSBhbiBPcGVuR0wg
dGV4dHVyZSwgcmV0dXJuIGl0cyBJRCBpbgorICAgIC8vIHRoZSBjb21wb3NpdG9ycyBuYW1lc3Bh
Y2UuICBPdGhlcndpc2UgcmV0dXJuIDAuCiAgICAgdmlydHVhbCB1bnNpZ25lZCBnZXRCYWNraW5n
VGV4dHVyZUlkKCkgeyByZXR1cm4gMDsgfQogCisgICAgLy8gSWYgdGhlIHBsdWdpbiBpbnN0YW5j
ZSBpcyBiYWNrZWQgYnkgYSBwYWludCBidWZmZXIsIHRoZW4gcmV0dXJuIGl0LgorICAgIC8vIFRo
aXMgbWF5IGJlIHBhc3NlZCB0byBXZWJQYWludFN1cmZhY2U6OnBhaW50KCkgdG8gbWluaW1pemUg
YnVmZmVyIGNvcGllcworICAgIC8vIHdoZW4gcmVuZGVyaW5nIGEgcGx1Z2luLiAgU3VjaCBhbiBv
cHRpbWl6YXRpb24gaXMgb25seSBwb3NzaWJsZSB3aGVuIHRoZQorICAgIC8vIHBsdWdpbiBpcyBr
bm93biB0byBiZSBvcGFxdWUgYW5kIHRvcC1tb3N0LiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJs
ZSBmb3IKKyAgICAvLyBmcmVlaW5nIHRoZSByZXR1cm5lZCBwYWludCBidWZmZXIgd2hlbiB0aGV5
IGFyZSBkb25lIHdpdGggaXQuCisgICAgdmlydHVhbCBXZWJQYWludEJ1ZmZlciogY2xvbmVCYWNr
aW5nQnVmZmVyKCkgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBib29sIGlzT3BhcXVlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUb3BNb3N0KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGb2N1cyhib29s
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpc2liaWxpdHkoYm9vbCkgPSAwOwogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaA0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCShyZXZpc2lv
biA3NzQ4NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzMsNiArMTMzLDEwIEBAIHB1YmxpYzoKICAgICAvLyB0byByZW5k
ZXIgaXRzIGNvbnRlbnRzLgogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUoKSBjb25zdCA9IDA7CiAKKyAgICAvLyBPcHRpb25hbGx5IGVuYWJsZSB0aGUgZHJh
d2luZyBvZiBwYWludCBib3JkZXJzIHRvIGFzc2lzdCBpbiB2aXN1YWwKKyAgICAvLyBkZWJ1Z2dp
bmcgb2YgdGhlIHJlbmRlcmVkIHdpZGdldC4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyB2b2lkIHNo
b3dEZWJ1Z1BhaW50UmVjdHMoYm9vbCk7CisKIHByb3RlY3RlZDoKICAgICB+V2ViV2lkZ2V0KCkg
eyB9CiB9OwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0Q2xp
ZW50LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJX
aWRnZXRDbGllbnQuaAkocmV2aXNpb24gNzc0ODQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJXaWRnZXRDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDE4
IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBXZWJQYWludFN1cmZhY2U7CiBjbGFz
cyBXZWJXaWRnZXQ7CiBzdHJ1Y3QgV2ViQ3Vyc29ySW5mbzsKIAogY2xhc3MgV2ViV2lkZ2V0Q2xp
ZW50IHsKIHB1YmxpYzoKKyNpZiBXRUJLSVRfVVNJTkdfUEFJTlRTVVJGQUNFCisgICAgLy8gUmV0
dXJucyB0aGUgc3VyZmFjZSB0byBwYWludCB0aGUgV2ViV2lkZ2V0IGludG8uICBUaGUgZW1iZWRk
ZXIgc3VwcGxpZXMKKyAgICAvLyB0aGlzIHN1cmZhY2UgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBt
YW5hZ2luZyBpdHMgbGlmZXRpbWUuICBUaGUgc3VyZmFjZQorICAgIC8vIGlzIGFzc3VtZWQgdG8g
c3RhcnQgb3V0IGluIHRoZSB1bmluaXRpYWxpemVkIHN0YXRlLgorICAgIHZpcnR1YWwgV2ViUGFp
bnRTdXJmYWNlKiBwYWludFN1cmZhY2UoKSB7IHJldHVybiAwOyB9CisjZWxzZQogICAgIC8vIENh
bGxlZCB3aGVuIGEgcmVnaW9uIG9mIHRoZSBXZWJXaWRnZXQgbmVlZHMgdG8gYmUgcmUtcGFpbnRl
ZC4KICAgICB2aXJ0dWFsIHZvaWQgZGlkSW52YWxpZGF0ZVJlY3QoY29uc3QgV2ViUmVjdCYpIHsg
fQogCkBAIC01MCwxNCArNTcsMTUgQEAgcHVibGljOgogICAgIC8vIHNjcm9sbGVkIGJ5IHRoZSBz
cGVjaWZpZWQgZHggYW5kIGR5IGFtb3VudHMuCiAgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbFJl
Y3QoaW50IGR4LCBpbnQgZHksIGNvbnN0IFdlYlJlY3QmIGNsaXBSZWN0KSB7IH0KIAotICAgIC8v
IENhbGxlZCB3aGVuIHRoZSBjb21wb3NpdG9yIGVuYWJsZXMgb3IgZGlzYWJsZXMuCi0gICAgdmly
dHVhbCB2b2lkIGRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhib29sIGFjdGl2ZSkg
eyB9CisgICAgLy8gQ2FsbGVkIHdoZW4gYSBjYWxsIHRvIFdlYldpZGdldDo6YW5pbWF0ZSBpcyBy
ZXF1aXJlZAorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIHsgfQorI2VuZGlm
CiAKICAgICAvLyBDYWxsZWQgd2hlbiBhIGNhbGwgdG8gV2ViV2lkZ2V0Ojpjb21wb3NpdGUgaXMg
cmVxdWlyZWQKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KIAotICAg
IC8vIENhbGxlZCB3aGVuIGEgY2FsbCB0byBXZWJXaWRnZXQ6OmFuaW1hdGUgaXMgcmVxdWlyZWQK
LSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSB7IH0KKyAgICAvLyBDYWxsZWQg
d2hlbiB0aGUgY29tcG9zaXRvciBlbmFibGVzIG9yIGRpc2FibGVzLgorICAgIHZpcnR1YWwgdm9p
ZCBkaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoYm9vbCBhY3RpdmUpIHsgfQogCiAg
ICAgLy8gQ2FsbGVkIHdoZW4gdGhlIHdpZGdldCBhY3F1aXJlcyBvciBsb3NlcyBmb2N1cywgcmVz
cGVjdGl2ZWx5LgogICAgIHZpcnR1YWwgdm9pZCBkaWRGb2N1cygpIHsgfQpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHANCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAkocmV2aXNp
b24gNzc0ODQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTExLDE1ICs1MTEsMTMgQEAgdm9pZCBDaHJvbWVDbGll
bnRJbXBsOjppbnZhbGlkYXRlQ29udGVudAogewogICAgIGlmICh1cGRhdGVSZWN0LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOworCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
ICAgIGlmICghbV93ZWJWaWV3LT5pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgewot
I2VuZGlmCi0gICAgICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKQotICAgICAgICAgICAgbV93
ZWJWaWV3LT5jbGllbnQoKS0+ZGlkSW52YWxpZGF0ZVJlY3QodXBkYXRlUmVjdCk7Ci0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIH0gZWxzZQorICAgIGlmIChtX3dlYlZpZXct
PmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKQogICAgICAgICBtX3dlYlZpZXctPmlu
dmFsaWRhdGVSb290TGF5ZXJSZWN0KHVwZGF0ZVJlY3QpOworICAgIGVsc2UKICNlbmRpZgorICAg
ICAgICBtX3dlYlZpZXctPnNjaGVkdWxlSW52YWxpZGF0aW9uKHVwZGF0ZVJlY3QpOwogfQogCiB2
b2lkIENocm9tZUNsaWVudEltcGw6OmludmFsaWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwoY29u
c3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlhdGUpCkBAIC01MzEsNyArNTI5LDcg
QEAgdm9pZCBDaHJvbWVDbGllbnRJbXBsOjppbnZhbGlkYXRlQ29udGVudAogI2lmIEVOQUJMRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6c2NoZWR1bGVB
bmltYXRpb24oKQogewotICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPnNjaGVkdWxlQW5pbWF0aW9u
KCk7CisgICAgbV93ZWJWaWV3LT5zY2hlZHVsZUFuaW1hdGlvbigpOwogfQogI2VuZGlmCiAKQEAg
LTU0MCwxOCArNTM4LDE2IEBAIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6c2Nyb2xsKAogICAgIGNv
bnN0IEludFJlY3QmIGNsaXBSZWN0KQogewogICAgIG1fd2ViVmlldy0+aGlkZVBvcHVwcygpOwor
CisgICAgaW50IGR4ID0gc2Nyb2xsRGVsdGEud2lkdGgoKTsKKyAgICBpbnQgZHkgPSBzY3JvbGxE
ZWx0YS5oZWlnaHQoKTsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBp
ZiAoIW1fd2ViVmlldy0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKLSNlbmRp
ZgotICAgICAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkgewotICAgICAgICAgICAgaW50IGR4
ID0gc2Nyb2xsRGVsdGEud2lkdGgoKTsKLSAgICAgICAgICAgIGludCBkeSA9IHNjcm9sbERlbHRh
LmhlaWdodCgpOwotICAgICAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkU2Nyb2xsUmVj
dChkeCwgZHksIGNsaXBSZWN0KTsKLSAgICAgICAgfQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLSAgICB9IGVsc2UKKyAgICBpZiAobV93ZWJWaWV3LT5pc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdBY3RpdmUoKSkKICAgICAgICAgbV93ZWJWaWV3LT5zY3JvbGxSb290TGF5ZXJSZWN0
KHNjcm9sbERlbHRhLCBjbGlwUmVjdCk7CisgICAgZWxzZQogI2VuZGlmCisgICAgICAgIG1fd2Vi
Vmlldy0+c2NoZWR1bGVTY3JvbGwoZHgsIGR5LCBjbGlwUmVjdCk7CiB9CiAKIEludFBvaW50IENo
cm9tZUNsaWVudEltcGw6OnNjcmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JikgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcA0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdl
bnRJbXBsLmNwcAkocmV2aXNpb24gNzc0ODQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDgg
QEAKICNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgogI2luY2x1ZGUgIklu
c3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKQEAgLTMyNiwxMCArMzI4LDcgQEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6aGlk
ZUhpZ2hsaWdodAogICAgIC8vIEZJWE1FOiBJcyBpdCBpbXBvcnRhbnQgdG8ganVzdCBpbnZhbGlk
YXRlIHRoZSByZWN0IG9mIHRoZSBub2RlIHJlZ2lvbgogICAgIC8vIGdpdmVuIHRoYXQgdGhpcyBp
cyBub3Qgb24gYSBjcml0aWNhbCBjb2RlcGF0aD8gIEluIG9yZGVyIHRvIGRvIHNvLCB3ZSdkCiAg
ICAgLy8gaGF2ZSB0byB0YWtlIHNjcm9sbGluZyBpbnRvIGFjY291bnQuCi0gICAgY29uc3QgV2Vi
U2l6ZSYgc2l6ZSA9IG1fd2ViVmlld0ltcGwtPnNpemUoKTsKLSAgICBXZWJSZWN0IGRhbWFnZWRS
ZWN0KDAsIDAsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTsKLSAgICBpZiAobV93ZWJWaWV3SW1w
bC0+Y2xpZW50KCkpCi0gICAgICAgIG1fd2ViVmlld0ltcGwtPmNsaWVudCgpLT5kaWRJbnZhbGlk
YXRlUmVjdChkYW1hZ2VkUmVjdCk7CisgICAgbV93ZWJWaWV3SW1wbC0+c2NoZWR1bGVJbnZhbGlk
YXRpb24oSW50UmVjdChJbnRQb2ludCgpLCBtX3dlYlZpZXdJbXBsLT5zaXplKCkpKTsKIH0KIAog
dm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6cG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYg
a2V5LCBTdHJpbmcqIHZhbHVlKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RnJhbWVJbXBsLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9uIDc3NDg0KQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksNyBA
QAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgInBhaW50aW5nL0dyYXBoaWNz
Q29udGV4dEJ1aWxkZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAicGFpbnRpbmcv
R3JhcGhpY3NDb250ZXh0QnVpbGRlci5oIgogI2luY2x1ZGUgIlBlcmZvcm1hbmNlLmgiCkBAIC0x
OTA0LDkgKzE5MDUsOCBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6bGF5b3V0KCkKICAgICAgICAgdmll
dy0+dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSgpOwogfQogCi12b2lkIFdl
YkZyYW1lSW1wbDo6cGFpbnRXaXRoQ29udGV4dChHcmFwaGljc0NvbnRleHQmIGdjLCBjb25zdCBX
ZWJSZWN0JiByZWN0KQordm9pZCBXZWJGcmFtZUltcGw6OnBhaW50V2l0aENvbnRleHQoR3JhcGhp
Y3NDb250ZXh0JiBnYywgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewotICAgIEludFJlY3Qg
ZGlydHlSZWN0KHJlY3QpOwogICAgIGdjLnNhdmUoKTsKICAgICBpZiAobV9mcmFtZS0+ZG9jdW1l
bnQoKSAmJiBmcmFtZVZpZXcoKSkgewogICAgICAgICBnYy5jbGlwKGRpcnR5UmVjdCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCShyZXZpc2lvbiA3
NzQ4NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBsYXlvdXQo
KTsKICAgICB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKTsKLSAgICB2b2lk
IHBhaW50V2l0aENvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViUmVj
dCYpOworICAgIHZvaWQgcGFpbnRXaXRoQ29udGV4dChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdm9pZCBjcmVhdGVGcmFtZVZpZXcoKTsK
IAogICAgIHN0YXRpYyBXZWJGcmFtZUltcGwqIGZyb21GcmFtZShXZWJDb3JlOjpGcmFtZSogZnJh
bWUpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVy
SW1wbC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQ
bHVnaW5Db250YWluZXJJbXBsLmNwcAkocmV2aXNpb24gNzc0ODQpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDUwLDEwICs0NTAsMTcgQEAgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6V2ViUGx1Z2luQ29u
dGFpbgogICAgICwgbV9wbGF0Zm9ybUxheWVyKFBsdWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZSgw
KSkKICNlbmRpZgogeworICAgIFdlYlZpZXdJbXBsKiB2aWV3ID0gV2ViVmlld0ltcGw6OmZyb21Q
YWdlKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFnZSgpKTsKKyAgICBpZiAodmll
dykKKyAgICAgICAgdmlldy0+YWRkUGx1Z2luQ29udGFpbmVyKHRoaXMpOwogfQogCiBXZWJQbHVn
aW5Db250YWluZXJJbXBsOjp+V2ViUGx1Z2luQ29udGFpbmVySW1wbCgpCiB7CisgICAgV2ViVmll
d0ltcGwqIHZpZXcgPSBXZWJWaWV3SW1wbDo6ZnJvbVBhZ2UobV9lbGVtZW50LT5kb2N1bWVudCgp
LT5mcmFtZSgpLT5wYWdlKCkpOworICAgIGlmICh2aWV3KQorICAgICAgICB2aWV3LT5yZW1vdmVQ
bHVnaW5Db250YWluZXIodGhpcyk7CisKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGx1
Z2luTG9hZE9ic2VydmVycy5zaXplKCk7ICsraSkKICAgICAgICAgbV9wbHVnaW5Mb2FkT2JzZXJ2
ZXJzW2ldLT5jbGVhclBsdWdpbkNvbnRhaW5lcigpOwogICAgIG1fd2ViUGx1Z2luLT5kZXN0cm95
KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNw
cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVu
dUltcGwuY3BwCShyZXZpc2lvbiA3NzQ4NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBvcHVwTWVudUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTAgKzE0NSwxOCBA
QCB2b2lkIFdlYlBvcHVwTWVudUltcGw6OnJlc2l6ZShjb25zdCBXZWJTCiAgICAgICAgIG1fd2lk
Z2V0LT5zZXRGcmFtZVJlY3QobmV3R2VvbWV0cnkpOwogICAgIH0KIAorI2lmIFdFQktJVF9VU0lO
R19QQUlOVFNVUkZBQ0UKKyAgICBtX3BhaW50Q29udHJvbGxlci5jbGVhcigpOworICAgIGlmICht
X2NsaWVudCkgeworICAgICAgICBtX3BhaW50Q29udHJvbGxlciA9IFBhaW50Q29udHJvbGxlcjo6
Y3JlYXRlKHRoaXMsIG1fY2xpZW50LT5wYWludFN1cmZhY2UoKSwgbV9zaXplKTsKKyAgICAgICAg
bV9wYWludENvbnRyb2xsZXItPnNjaGVkdWxlSW52YWxpZGF0aW9uKG1fd2lkZ2V0LT5mcmFtZVJl
Y3QoKSk7CisgICAgfQorI2Vsc2UKICAgICBpZiAobV9jbGllbnQpIHsKICAgICAgICAgV2ViUmVj
dCBkYW1hZ2VkUmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOwogICAgICAg
ICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogICAgIH0KKyNlbmRp
ZgogfQogCiB2b2lkIFdlYlBvcHVwTWVudUltcGw6OmFuaW1hdGUoKQpAQCAtMjg0LDggKzI5Miwx
MyBAQCB2b2lkIFdlYlBvcHVwTWVudUltcGw6OmludmFsaWRhdGVDb250ZW50CiB7CiAgICAgaWYg
KHBhaW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKKyNpZiBXRUJLSVRfVVNJTkdf
UEFJTlRTVVJGQUNFCisgICAgaWYgKG1fcGFpbnRDb250cm9sbGVyKQorICAgICAgICBtX3BhaW50
Q29udHJvbGxlci0+c2NoZWR1bGVJbnZhbGlkYXRpb24ocGFpbnRSZWN0KTsKKyNlbHNlCiAgICAg
aWYgKG1fY2xpZW50KQogICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QocGFpbnRS
ZWN0KTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYlBvcHVwTWVudUltcGw6OmludmFsaWRhdGVDb250
ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlh
dGUpCkBAIC0zMDEsMTEgKzMxNCwxNyBAQCB2b2lkIFdlYlBvcHVwTWVudUltcGw6OnNjcm9sbChj
b25zdCBJbnRTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBz
Y3JvbGxSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYg
Y2xpcFJlY3QpCiB7CisgICAgaW50IGR4ID0gc2Nyb2xsRGVsdGEud2lkdGgoKTsKKyAgICBpbnQg
ZHkgPSBzY3JvbGxEZWx0YS5oZWlnaHQoKTsKKworI2lmIFdFQktJVF9VU0lOR19QQUlOVFNVUkZB
Q0UKKyAgICBpZiAobV9wYWludENvbnRyb2xsZXIpCisgICAgICAgIG1fcGFpbnRDb250cm9sbGVy
LT5zY2hlZHVsZVNjcm9sbChkeCwgZHksIGNsaXBSZWN0KTsKKyNlbHNlCiAgICAgaWYgKG1fY2xp
ZW50KSB7Ci0gICAgICAgIGludCBkeCA9IHNjcm9sbERlbHRhLndpZHRoKCk7Ci0gICAgICAgIGlu
dCBkeSA9IHNjcm9sbERlbHRhLmhlaWdodCgpOwogICAgICAgICBtX2NsaWVudC0+ZGlkU2Nyb2xs
UmVjdChkeCwgZHksIGNsaXBSZWN0KTsKICAgICB9CisjZW5kaWYKIH0KIAogSW50UG9pbnQgV2Vi
UG9wdXBNZW51SW1wbDo6c2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25z
dApAQCAtMzQ4LDQgKzM2NywxNiBAQCB2b2lkIFdlYlBvcHVwTWVudUltcGw6OnBvcHVwQ2xvc2Vk
KEZyYW1lCiAgICAgbV9jbGllbnQtPmNsb3NlV2lkZ2V0U29vbigpOwogfQogCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyBQYWludGVyCisKKyNpZiBXRUJLSVRfVVNJTkdfUEFJTlRTVVJGQUNF
Cit2b2lkIFdlYlBvcHVwTWVudUltcGw6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX3dpZGdldC0+cGFpbnQoJmNvbnRleHQsIHJlY3QpOworfQorI2VuZGlm
CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViUG9wdXBNZW51SW1wbC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCShyZXZpc2lvbiA3NzQ4NCkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNiArMzIsOCBAQAogI2RlZmluZSBXZWJQb3B1cE1lbnVJbXBsX2gKIAogI2luY2x1ZGUgIkZy
YW1lbGVzc1Njcm9sbFZpZXdDbGllbnQuaCIKKyNpbmNsdWRlICJwYWludGluZy9QYWludENvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJwYWludGluZy9QYWludGVyLmgiCiAjaW5jbHVkZSAiV2ViUG9p
bnQuaCIKICNpbmNsdWRlICJXZWJQb3B1cE1lbnUuaCIKICNpbmNsdWRlICJXZWJTaXplLmgiCkBA
IC01NSw2ICs1Nyw5IEBAIHN0cnVjdCBXZWJSZWN0OwogCiBjbGFzcyBXZWJQb3B1cE1lbnVJbXBs
IDogcHVibGljIFdlYlBvcHVwTWVudSwKICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
V2ViQ29yZTo6RnJhbWVsZXNzU2Nyb2xsVmlld0NsaWVudCwKKyNpZiBXRUJLSVRfVVNJTkdfUEFJ
TlRTVVJGQUNFCisgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFBhaW50ZXIsCisjZW5k
aWYKICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgUmVmQ291bnRlZDxXZWJQb3B1cE1l
bnVJbXBsPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0xMjEs
NiArMTI2LDE1IEBAIHB1YmxpYzoKICAgICAvLyBXZWJDb3JlOjpGcmFtZWxlc3NTY3JvbGxWaWV3
Q2xpZW50IG1ldGhvZHM6CiAgICAgdmlydHVhbCB2b2lkIHBvcHVwQ2xvc2VkKFdlYkNvcmU6OkZy
YW1lbGVzc1Njcm9sbFZpZXcqKTsKIAorI2lmIFdFQktJVF9VU0lOR19QQUlOVFNVUkZBQ0UKKyAg
ICAvLyBQYWludGVyIG1ldGhvZHM6CisgICAgLy92aXJ0dWFsIHZvaWQgYW5pbWF0ZSgpIHsgfQor
ICAgIC8vdmlydHVhbCB2b2lkIGxheW91dCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBQYXNzT3duUHRyPFdlYlBhaW50QnVmZmVyPiBjbG9uZVBhaW50QnVmZmVyRm9yQXJl
YSgKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFdlYkNvcmU6OkludFBvaW50Kikg
eyByZXR1cm4gMDsgfQorI2VuZGlmCisKICAgICBXZWJXaWRnZXRDbGllbnQqIG1fY2xpZW50Owog
ICAgIFdlYlNpemUgbV9zaXplOwogCkBAIC0xMjksNiArMTQzLDEwIEBAIHB1YmxpYzoKICAgICAv
LyBUaGlzIGlzIGEgbm9uLW93bmluZyByZWYuICBUaGUgcG9wdXAgd2lsbCBub3RpZnkgdXMgdmlh
IHBvcHVwQ2xvc2VkKCkKICAgICAvLyBiZWZvcmUgaXQgaXMgZGVzdHJveWVkLgogICAgIFdlYkNv
cmU6OkZyYW1lbGVzc1Njcm9sbFZpZXcqIG1fd2lkZ2V0OworCisjaWYgV0VCS0lUX1VTSU5HX1BB
SU5UU1VSRkFDRQorICAgIE93blB0cjxQYWludENvbnRyb2xsZXI+IG1fcGFpbnRDb250cm9sbGVy
OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAJKHJldmlzaW9uIDc3
NDg0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMCwxMSArMTEwLDExIEBAIHZvaWQgV2ViU2Nyb2xsYmFySW1w
bDo6c2Nyb2xsKFNjcm9sbERpcmUKICAgICBXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24gZGlyOwog
ICAgIGJvb2wgaG9yaXpvbnRhbCA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6
b250YWxTY3JvbGxiYXI7CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxGb3J3YXJkKQotICAg
ICAgICBkaXIgPSBob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duOworICAgICAg
ICBkaXIgPSBob3Jpem9udGFsID8gV2ViQ29yZTo6U2Nyb2xsUmlnaHQgOiBXZWJDb3JlOjpTY3Jv
bGxEb3duOwogICAgIGVsc2UKLSAgICAgICAgZGlyID0gaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQg
OiBTY3JvbGxVcDsKKyAgICAgICAgZGlyID0gaG9yaXpvbnRhbCA/IFdlYkNvcmU6OlNjcm9sbExl
ZnQgOiBXZWJDb3JlOjpTY3JvbGxVcDsKIAotICAgIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpz
Y3JvbGwoZGlyLCBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eT4oZ3JhbnVs
YXJpdHkpLCBtdWx0aXBsaWVyKTsKKyAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKGRpciwgc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSwgbXVsdGlw
bGllcik7CiB9CiAKIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52
YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCkBAIC0yNTMsNyArMjUzLDcgQEAgYm9vbCBXZWJTY3Jv
bGxiYXJJbXBsOjpvbktleURvd24oY29uc3QgVwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW50
IFdlYlNjcm9sbGJhckltcGw6OnNjcm9sbFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24pIGNvbnN0CitpbnQgV2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsU2l6ZShT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4gKG9y
aWVudGF0aW9uID09IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpKSA/IChtX3Njcm9sbGJhci0+
dG90YWxTaXplKCkgLSBtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwogfQpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA3
NzQ4NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTU1LDIyICs5NTUsMjIgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVzaXpl
KGNvbnN0IFdlYlNpemUmIAogICAgICAgICBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCktPmV2ZW50
SGFuZGxlcigpLT5zZW5kUmVzaXplRXZlbnQoKTsKICAgICB9CiAKLSAgICBpZiAobV9jbGllbnQp
IHsKLSAgICAgICAgV2ViUmVjdCBkYW1hZ2VkUmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6
ZS5oZWlnaHQpOwotICAgICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkp
IHsKKyAgICBXZWJSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhl
aWdodCk7CisgICAgaWYgKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICAgICAgICAgaW52YWxpZGF0ZVJvb3RM
YXllclJlY3QoZGFtYWdlZFJlY3QpOworICAgICAgICBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChk
YW1hZ2VkUmVjdCk7CisgICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCisgICAgICAgICAgICBt
X2xheWVyUmVuZGVyZXItPnJlc2l6ZU9uc2NyZWVuQ29udGVudChJbnRTaXplKHN0ZDo6bWF4KDEs
IG1fc2l6ZS53aWR0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKSk7CiAjZW5kaWYK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3Qo
ZGFtYWdlZFJlY3QpOwotICAgIH0KLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICBpZiAobV9sYXllclJlbmRlcmVyICYmIGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSgpKSB7Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cmVzaXplT25zY3JlZW5Db250ZW50KElu
dFNpemUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heCgxLCBtX3NpemUuaGVpZ2h0
KSkpOwotICAgIH0KKyAgICB9IGVsc2UgeworI2lmIFdFQktJVF9VU0lOR19QQUlOVFNVUkZBQ0UK
KyAgICAgICAgbV9wYWludENvbnRyb2xsZXIuY2xlYXIoKTsKKyAgICAgICAgaWYgKG1fY2xpZW50
KQorICAgICAgICAgICAgbV9wYWludENvbnRyb2xsZXIgPSBQYWludENvbnRyb2xsZXI6OmNyZWF0
ZSh0aGlzLCBtX2NsaWVudC0+cGFpbnRTdXJmYWNlKCksIG1fc2l6ZSk7CiAjZW5kaWYKKyAgICAg
ICAgc2NoZWR1bGVJbnZhbGlkYXRpb24oZGFtYWdlZFJlY3QpOworICAgIH0KIH0KIAogdm9pZCBX
ZWJWaWV3SW1wbDo6YW5pbWF0ZSgpCkBAIC0yMDA3LDcgKzIwMDcsMzggQEAgdm9pZCBXZWJWaWV3
SW1wbDo6cGVyZm9ybUN1c3RvbUNvbnRleHRNZQogICAgIG1fcGFnZS0+Y29udGV4dE1lbnVDb250
cm9sbGVyKCktPmNsZWFyQ29udGV4dE1lbnUoKTsKIH0KIAotLy8gV2ViVmlldyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gUGFpbnRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIFdlYlZpZXdJbXBsOjpwYWludChHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJU
KCFpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSk7CisKKyAgICBXZWJGcmFtZUltcGwq
IHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOworICAgIGlmICh3ZWJmcmFtZSkKKyAgICAgICAg
d2ViZnJhbWUtPnBhaW50V2l0aENvbnRleHQoY29udGV4dCwgcmVjdCk7Cit9CisKK1Bhc3NPd25Q
dHI8V2ViUGFpbnRCdWZmZXI+IFdlYlZpZXdJbXBsOjpjbG9uZVBhaW50QnVmZmVyRm9yQXJlYShj
b25zdCBJbnRSZWN0JiBhcmVhLCBJbnRQb2ludCogYnVmZmVyT3JpZ2luKQoreworICAgIC8vIFBy
ZXNlbnRseSwgb25seSBwbHVnaW5zIHN1cHBvcnQgdGhpcyBvcHRpbWl6YXRpb24uCisgICAgZm9y
IChQbHVnaW5Db250YWluZXJTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9wbHVnaW5Db250YWluZXJzLmJl
Z2luKCk7IGl0ICE9IG1fcGx1Z2luQ29udGFpbmVycy5lbmQoKTsgKytpdCkgeworICAgICAgICBX
ZWJQbHVnaW5Db250YWluZXJJbXBsKiBjb250YWluZXIgPSAqaXQ7CisKKyAgICAgICAgV2ViUGx1
Z2luKiBwbHVnaW4gPSBjb250YWluZXItPnBsdWdpbigpOworICAgICAgICBpZiAoIXBsdWdpbi0+
aXNPcGFxdWUoKSB8fCAhcGx1Z2luLT5pc1RvcE1vc3QoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIEludFJlY3QgcGx1Z2luUmVjdCA9IGNvbnRhaW5lci0+Y29udmVydFRvQ29u
dGFpbmluZ1dpbmRvdyhjb250YWluZXItPmZyYW1lUmVjdCgpKTsKKyAgICAgICAgaWYgKCFwbHVn
aW5SZWN0LmNvbnRhaW5zKGFyZWEpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
KmJ1ZmZlck9yaWdpbiA9IHBsdWdpblJlY3QubG9jYXRpb24oKTsKKyAgICAgICAgcmV0dXJuIHBs
dWdpbi0+Y2xvbmVCYWNraW5nQnVmZmVyKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisv
LyBXZWJWaWV3SW1wbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGJvb2wgV2ViVmlld0ltcGw6OnNldERyb3BFZmZlY3Qo
Ym9vbCBhY2NlcHQpCiB7CkBAIC0yMjY3LDEyICsyMjk4LDEzIEBAIHZvaWQgV2ViVmlld0ltcGw6
OnNldFJvb3RHcmFwaGljc0xheWVyKFcKICAgICBpZiAobV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUpCiAgICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRhbWFnZWRSZWN0KTsK
ICAgICBlbHNlCi0gICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVj
dCk7CisgICAgICAgIHNjaGVkdWxlSW52YWxpZGF0aW9uKGRhbWFnZWRSZWN0KTsKIH0KIAogdm9p
ZCBXZWJWaWV3SW1wbDo6c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCkKIHsKLSAgICBtX2NsaWVu
dC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xp
ZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOwogfQogCiAKQEAgLTI0MzksNCArMjQ3MSw0NyBAQCBX
ZWJHcmFwaGljc0NvbnRleHQzRCogV2ViVmlld0ltcGw6OmdyYXBoCiAgICAgcmV0dXJuIDA7CiB9
CiAKK3ZvaWQgV2ViVmlld0ltcGw6OnNjaGVkdWxlSW52YWxpZGF0aW9uKGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisjaWYgV0VCS0lUX1VTSU5HX1BBSU5UU1VSRkFDRQorICAgIGlmIChtX3BhaW50
Q29udHJvbGxlcikKKyAgICAgICAgbV9wYWludENvbnRyb2xsZXItPnNjaGVkdWxlSW52YWxpZGF0
aW9uKHJlY3QpOworI2Vsc2UKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5k
aWRJbnZhbGlkYXRlUmVjdChyZWN0KTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlZpZXdJbXBsOjpz
Y2hlZHVsZVNjcm9sbChpbnQgZHgsIGludCBkeSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCit7
CisjaWYgV0VCS0lUX1VTSU5HX1BBSU5UU1VSRkFDRQorICAgIGlmIChtX3BhaW50Q29udHJvbGxl
cikKKyAgICAgICAgbV9wYWludENvbnRyb2xsZXItPnNjaGVkdWxlU2Nyb2xsKGR4LCBkeSwgY2xp
cFJlY3QpOworI2Vsc2UKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRT
Y3JvbGxSZWN0KGR4LCBkeSwgY2xpcFJlY3QpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViVmlld0lt
cGw6OnNjaGVkdWxlQW5pbWF0aW9uKCkKK3sKKyNpZiBXRUJLSVRfVVNJTkdfUEFJTlRTVVJGQUNF
CisgICAgaWYgKG1fcGFpbnRDb250cm9sbGVyKQorICAgICAgICBtX3BhaW50Q29udHJvbGxlci0+
c2NoZWR1bGVBbmltYXRpb24oKTsKKyNlbHNlCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBt
X2NsaWVudC0+c2NoZWR1bGVBbmltYXRpb24oKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlZpZXdJ
bXBsOjphZGRQbHVnaW5Db250YWluZXIoV2ViUGx1Z2luQ29udGFpbmVySW1wbCogY29udGFpbmVy
KQoreworICAgIG1fcGx1Z2luQ29udGFpbmVycy5hZGQoY29udGFpbmVyKTsKK30KKwordm9pZCBX
ZWJWaWV3SW1wbDo6cmVtb3ZlUGx1Z2luQ29udGFpbmVyKFdlYlBsdWdpbkNvbnRhaW5lckltcGwq
IGNvbnRhaW5lcikKK3sKKyAgICBtX3BsdWdpbkNvbnRhaW5lcnMucmVtb3ZlKGNvbnRhaW5lcik7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmgJKHJldmlzaW9uIDc3NDg0KQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBA
QAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgiCisjaW5jbHVkZSAicGFp
bnRpbmcvUGFpbnRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAicGFpbnRpbmcvUGFpbnRlci5oIgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBA
IC04MiwxMCArODQsMTUgQEAgY2xhc3MgV2ViSW1hZ2U7CiBjbGFzcyBXZWJLZXlib2FyZEV2ZW50
OwogY2xhc3MgV2ViTW91c2VFdmVudDsKIGNsYXNzIFdlYk1vdXNlV2hlZWxFdmVudDsKK2NsYXNz
IFdlYlBsdWdpbkNvbnRhaW5lckltcGw7CiBjbGFzcyBXZWJTZXR0aW5nc0ltcGw7CiBjbGFzcyBX
ZWJUb3VjaEV2ZW50OwogCi1jbGFzcyBXZWJWaWV3SW1wbCA6IHB1YmxpYyBXZWJWaWV3LCBwdWJs
aWMgUmVmQ291bnRlZDxXZWJWaWV3SW1wbD4geworY2xhc3MgV2ViVmlld0ltcGwgOiBwdWJsaWMg
V2ViVmlldywKKyNpZiBXRUJLSVRfVVNJTkdfUEFJTlRTVVJGQUNFCisgICAgICAgICAgICAgICAg
ICAgIHB1YmxpYyBQYWludGVyLAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBS
ZWZDb3VudGVkPFdlYlZpZXdJbXBsPiB7CiBwdWJsaWM6CiAgICAgLy8gV2ViV2lkZ2V0IG1ldGhv
ZHM6CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CkBAIC0xOTgsNiArMjA1LDEzIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluYWN0aXZl
Rm9yZWdyb3VuZENvbG9yKTsKICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybUN1c3RvbUNvbnRleHRN
ZW51QWN0aW9uKHVuc2lnbmVkIGFjdGlvbik7CiAKKyAgICAvLyBQYWludGVyIG1ldGhvZHM6Cisg
ICAgLy92aXJ0dWFsIHZvaWQgYW5pbWF0ZSgpOworICAgIC8vdmlydHVhbCB2b2lkIGxheW91dCgp
OworICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYlBhaW50QnVm
ZmVyPiBjbG9uZVBhaW50QnVmZmVyRm9yQXJlYSgKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYsIFdlYkNvcmU6OkludFBvaW50Kik7CisKICAgICAvLyBXZWJWaWV3SW1wbAogCiAgICAg
dm9pZCBzZXRJZ25vcmVJbnB1dEV2ZW50cyhib29sIG5ld1ZhbHVlKTsKQEAgLTM0Myw2ICszNTcs
MTMgQEAgcHVibGljOgogICAgIC8vIFdlYkdMLiBSZXR1cm5zIDAgaWYgY29tcG9zaXRpbmcgc3Vw
cG9ydCBpcyBub3QgY29tcGlsZWQgaW4uCiAgICAgdmlydHVhbCBXZWJHcmFwaGljc0NvbnRleHQz
RCogZ3JhcGhpY3NDb250ZXh0M0QoKTsKIAorICAgIHZvaWQgc2NoZWR1bGVJbnZhbGlkYXRpb24o
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgc2NoZWR1bGVTY3JvbGwoaW50IGR4
LCBpbnQgZHksIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKKyAgICB2b2lkIHNj
aGVkdWxlQW5pbWF0aW9uKCk7CisKKyAgICB2b2lkIGFkZFBsdWdpbkNvbnRhaW5lcihXZWJQbHVn
aW5Db250YWluZXJJbXBsKik7CisgICAgdm9pZCByZW1vdmVQbHVnaW5Db250YWluZXIoV2ViUGx1
Z2luQ29udGFpbmVySW1wbCopOworCiAgICAgV2ViQ29yZTo6UG9wdXBDb250YWluZXIqIHNlbGVj
dFBvcHVwKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RQb3B1cC5nZXQoKTsgfQogCiAgICAgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSBldmVudCBsZWFkcyB0byBzY3JvbGxpbmcuCkBAIC01NDcsNiAr
NTY4LDEzIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
PiBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgT3duUHRyPERldmlj
ZU9yaWVudGF0aW9uQ2xpZW50UHJveHk+IG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eTsK
ICAgICBPd25QdHI8R2VvbG9jYXRpb25DbGllbnRQcm94eT4gbV9nZW9sb2NhdGlvbkNsaWVudFBy
b3h5OworCisgICAgdHlwZWRlZiBIYXNoU2V0PFdlYlBsdWdpbkNvbnRhaW5lckltcGwqPiBQbHVn
aW5Db250YWluZXJTZXQ7CisgICAgUGx1Z2luQ29udGFpbmVyU2V0IG1fcGx1Z2luQ29udGFpbmVy
czsKKworI2lmIFdFQktJVF9VU0lOR19QQUlOVFNVUkZBQ0UKKyAgICBPd25QdHI8UGFpbnRDb250
cm9sbGVyPiBtX3BhaW50Q29udHJvbGxlcjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXaWRnZXQuY3BwDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV2lkZ2V0LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldpZGdldC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViV2lkZ2V0LmgiCisKKyNpbmNsdWRlICJwYWludGluZy9QYWludENvbnRyb2xsZXIuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViV2lkZ2V0OjpzaG93RGVidWdQYWludFJl
Y3RzKGJvb2wgc2hvdykKK3sKKyAgICBQYWludENvbnRyb2xsZXI6OnNob3dEZWJ1Z1BhaW50UmVj
dHMoc2hvdyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvcGFpbnRpbmcvUGFpbnRBZ2dyZWdhdG9yLmNwcA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL3BhaW50aW5nL1BhaW50QWdncmVnYXRvci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9wYWludGluZy9Q
YWludEFnZ3JlZ2F0b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWludEFnZ3JlZ2F0b3IuaCIKKworI2luY2x1ZGUgIldl
YktpdC5oIgorI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IEFMR09SSVRITSBOT1RFUworLy8KKy8vIFdlIGF0dGVtcHQgdG8gbWFpbnRhaW4gYSBzY3JvbGwg
cmVjdCBpbiB0aGUgcHJlc2VuY2Ugb2YgaW52YWxpZGF0aW9ucyB0aGF0CisvLyBhcmUgY29udGFp
bmVkIHdpdGhpbiB0aGUgc2Nyb2xsIHJlY3QuICBJZiBhbiBpbnZhbGlkYXRpb24gY3Jvc3NlcyBh
IHNjcm9sbAorLy8gcmVjdCwgdGhlbiB3ZSBqdXN0IHRyZWF0IHRoZSBzY3JvbGwgcmVjdCBhcyBh
biBpbnZhbGlkYXRpb24gcmVjdC4KKy8vCisvLyBGb3IgaW52YWxpZGF0aW9ucyBwZXJmb3JtZWQg
cHJpb3IgdG8gc2Nyb2xsaW5nIGFuZCBjb250YWluZWQgd2l0aGluIHRoZQorLy8gc2Nyb2xsIHJl
Y3QsIHdlIG9mZnNldCB0aGUgaW52YWxpZGF0aW9uIHJlY3RzIHRvIGFjY291bnQgZm9yIHRoZSBm
YWN0IHRoYXQKKy8vIHRoZSBjb25zdW1lciB3aWxsIHBlcmZvcm0gc2Nyb2xsaW5nIGJlZm9yZSBw
YWludGluZy4KKy8vCisvLyBXZSBvbmx5IHN1cHBvcnQgc2Nyb2xsaW5nIGFsb25nIG9uZSBheGlz
IGF0IGEgdGltZS4gIEEgZGlhZ29uYWwgc2Nyb2xsIHdpbGwKKy8vIHRoZXJlZm9yZSBiZSB0cmVh
dGVkIGFzIGFuIGludmFsaWRhdGlvbi4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gSWYg
dGhlIGNvbWJpbmVkIGFyZWEgb2YgcGFpbnQgcmVjdHMgY29udGFpbmVkIHdpdGhpbiB0aGUgc2Ny
b2xsIHJlY3QgZ3Jvd3MKKy8vIHRvbyBsYXJnZSwgdGhlbiB3ZSBtaWdodCBhcyB3ZWxsIGp1c3Qg
dHJlYXQgdGhlIHNjcm9sbCByZWN0IGFzIGEgcGFpbnQgcmVjdC4KKy8vIFRoaXMgY29uc3RhbnQg
c2V0cyB0aGUgbWF4IHJhdGlvIG9mIHBhaW50IHJlY3QgYXJlYSB0byBzY3JvbGwgcmVjdCBhcmVh
IHRoYXQKKy8vIHdlIHdpbGwgdG9sZXJhdGUgYmVmb3JlIGRvZ3JhZGluZyB0aGUgc2Nyb2xsIGlu
dG8gYSByZXBhaW50Lgorc3RhdGljIGNvbnN0IGZsb2F0IG1heFJlZHVuZGFudFBhaW50VG9TY3Jv
bGxBcmVhID0gMC44ZjsKKworLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhaW50IHJlY3RzLiAg
SWYgd2UgZXhjZWVkIHRoaXMgbGltaXQsIHRoZW4gd2UnbGwKKy8vIHN0YXJ0IGNvbWJpbmluZyBw
YWludCByZWN0cyAoc2VlIENvbWJpbmVQYWludFJlY3RzKS4gIFRoaXMgbGltaXRpbmcgaXMKKy8v
IGltcG9ydGFudCBzaW5jZSB0aGUgV2ViS2l0IGNvZGUgYXNzb2NpYXRlZCB3aXRoIGRlY2lkaW5n
IHdoYXQgdG8gcGFpbnQgZ2l2ZW4KKy8vIGEgcGFpbnQgcmVjdCBjYW4gYmUgc2lnbmlmaWNhbnQu
CitzdGF0aWMgY29uc3Qgc2l6ZV90IG1heFBhaW50UmVjdHMgPSA1OworCisvLyBJZiB0aGUgY29t
YmluZWQgYXJlYSBvZiBwYWludCByZWN0cyBkaXZpZGVkIGJ5IHRoZSBhcmVhIG9mIHRoZSB1bmlv
biBvZiBhbGwKKy8vIHBhaW50IHJlY3RzIGV4Y2VlZHMgdGhpcyB0aHJlc2hvbGQsIHRoZW4gd2Ug
d2lsbCBjb21iaW5lIHRoZSBwYWludCByZWN0cy4KK3N0YXRpYyBjb25zdCBmbG9hdCBtYXhQYWlu
dFJlY3RzQXJlYVJhdGlvID0gMC43ZjsKKworc3RhdGljIGludCBjYWxjdWxhdGVBcmVhKGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHJlY3Quc2l6ZSgpLndpZHRoKCkgKiByZWN0
LnNpemUoKS5oZWlnaHQoKTsKK30KKworLy8gU3VidHJhY3RzIG91dCB0aGUgaW50ZXJzZWN0aW9u
IG9mIHxhfCBhbmQgfGJ8IGZyb20gfGF8LCBhc3N1bWluZyB8YnwgZnVsbHkKKy8vIG92ZXJsYXBz
IHdpdGggfGF8IGluIGVpdGhlciB0aGUgeC0gb3IgeS1kaXJlY3Rpb24uICBJZiB0aGVyZSBpcyBu
byBmdWxsCisvLyBvdmVybGFwLCB0aGVuIHxhfCBpcyByZXR1cm5lZC4KK3N0YXRpYyBJbnRSZWN0
IHN1YnRyYWN0SW50ZXJzZWN0aW9uKGNvbnN0IEludFJlY3QmIGEsIGNvbnN0IEludFJlY3QmIGIp
Cit7CisgICAgLy8gYm91bmRhcnkgY2FzZXM6CisgICAgaWYgKCFhLmludGVyc2VjdHMoYikpCisg
ICAgICAgIHJldHVybiBhOworICAgIGlmIChiLmNvbnRhaW5zKGEpKQorICAgICAgICByZXR1cm4g
SW50UmVjdCgpOworCisgICAgaW50IHJ4ID0gYS54KCk7CisgICAgaW50IHJ5ID0gYS55KCk7Cisg
ICAgaW50IHJyID0gYS5tYXhYKCk7CisgICAgaW50IHJiID0gYS5tYXhZKCk7CisKKyAgICBpZiAo
Yi55KCkgPD0gYS55KCkgJiYgYi5tYXhZKCkgPj0gYS5tYXhZKCkpIHsKKyAgICAgICAgLy8gY29t
cGxldGUgaW50ZXJzZWN0aW9uIGluIHRoZSB5LWRpcmVjdGlvbgorICAgICAgICBpZiAoYi54KCkg
PD0gYS54KCkpCisgICAgICAgICAgICByeCA9IGIubWF4WCgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICByciA9IGIueCgpOworICAgIH0gZWxzZSBpZiAoYi54KCkgPD0gYS54KCkgJiYgYi5t
YXhYKCkgPj0gYS5tYXhYKCkpIHsKKyAgICAgICAgLy8gY29tcGxldGUgaW50ZXJzZWN0aW9uIGlu
IHRoZSB4LWRpcmVjdGlvbgorICAgICAgICBpZiAoYi55KCkgPD0gYS55KCkpCisgICAgICAgICAg
ICByeSA9IGIubWF4WSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByYiA9IGIueSgpOwor
ICAgIH0KKyAgICByZXR1cm4gSW50UmVjdChyeCwgcnksIHJyIC0gcngsIHJiIC0gcnkpOworfQor
CisvLyBSZXR1cm5zIHRydWUgaWYgfGF8IGFuZCB8Ynwgc2hhcmUgYW4gZW50aXJlIGVkZ2UgKGku
ZS4sIHNhbWUgd2lkdGggb3Igc2FtZQorLy8gaGVpZ2h0KSwgYW5kIHRoZSByZWN0YW5nbGVzIGRv
IG5vdCBvdmVybGFwLgorc3RhdGljIGJvb2wgc2hhcmVzRWRnZShjb25zdCBJbnRSZWN0JiBhLCBj
b25zdCBJbnRSZWN0JiBiKQoreworICAgIHJldHVybiAoYS55KCkgPT0gYi55KCkgJiYgYS5oZWln
aHQoKSA9PSBiLmhlaWdodCgpICYmIChhLngoKSA9PSBiLm1heFgoKSB8fCBhLm1heFgoKSA9PSBi
LngoKSkpCisgICAgICAgIHx8IChhLngoKSA9PSBiLngoKSAmJiBhLndpZHRoKCkgPT0gYi53aWR0
aCgpICYmIChhLnkoKSA9PSBiLm1heFkoKSB8fCBhLm1heFkoKSA9PSBiLnkoKSkpOworfQorCitQ
YWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGU6OlBlbmRpbmdVcGRhdGUoKQoreworfQorCitQ
YWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGU6On5QZW5kaW5nVXBkYXRlKCkKK3sKK30KKwor
SW50UmVjdCBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGU6OmNhbGN1bGF0ZVNjcm9sbERh
bWFnZSgpIGNvbnN0Cit7CisgICAgLy8gU2hvdWxkIG9ubHkgYmUgc2Nyb2xsaW5nIGluIG9uZSBk
aXJlY3Rpb24gYXQgYSB0aW1lLgorICAgIEFTU0VSVCghKHNjcm9sbERlbHRhLngoKSAmJiBzY3Jv
bGxEZWx0YS55KCkpKTsKKworICAgIEludFJlY3QgZGFtYWdlZFJlY3Q7CisKKyAgICAvLyBDb21w
dXRlIHRoZSByZWdpb24gd2Ugd2lsbCBleHBvc2UgYnkgc2Nyb2xsaW5nLCBhbmQgcGFpbnQgdGhh
dCBpbnRvIGEKKyAgICAvLyBzaGFyZWQgbWVtb3J5IHNlY3Rpb24uCisgICAgaWYgKHNjcm9sbERl
bHRhLngoKSkgeworICAgICAgICBpbnQgZHggPSBzY3JvbGxEZWx0YS54KCk7CisgICAgICAgIGRh
bWFnZWRSZWN0LnNldFkoc2Nyb2xsUmVjdC55KCkpOworICAgICAgICBkYW1hZ2VkUmVjdC5zZXRI
ZWlnaHQoc2Nyb2xsUmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmIChkeCA+IDApIHsKKyAgICAg
ICAgICAgIGRhbWFnZWRSZWN0LnNldFgoc2Nyb2xsUmVjdC54KCkpOworICAgICAgICAgICAgZGFt
YWdlZFJlY3Quc2V0V2lkdGgoZHgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGFt
YWdlZFJlY3Quc2V0WChzY3JvbGxSZWN0Lm1heFgoKSArIGR4KTsKKyAgICAgICAgICAgIGRhbWFn
ZWRSZWN0LnNldFdpZHRoKC1keCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBp
bnQgZHkgPSBzY3JvbGxEZWx0YS55KCk7CisgICAgICAgIGRhbWFnZWRSZWN0LnNldFgoc2Nyb2xs
UmVjdC54KCkpOworICAgICAgICBkYW1hZ2VkUmVjdC5zZXRXaWR0aChzY3JvbGxSZWN0LndpZHRo
KCkpOworICAgICAgICBpZiAoZHkgPiAwKSB7CisgICAgICAgICAgICBkYW1hZ2VkUmVjdC5zZXRZ
KHNjcm9sbFJlY3QueSgpKTsKKyAgICAgICAgICAgIGRhbWFnZWRSZWN0LnNldEhlaWdodChkeSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkYW1hZ2VkUmVjdC5zZXRZKHNjcm9sbFJl
Y3QubWF4WSgpICsgZHkpOworICAgICAgICAgICAgZGFtYWdlZFJlY3Quc2V0SGVpZ2h0KC1keSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJbiBjYXNlIHRoZSBzY3JvbGwgb2Zmc2V0IGV4
Y2VlZHMgdGhlIHdpZHRoL2hlaWdodCBvZiB0aGUgc2Nyb2xsIHJlY3QKKyAgICByZXR1cm4gaW50
ZXJzZWN0aW9uKHNjcm9sbFJlY3QsIGRhbWFnZWRSZWN0KTsKK30KKworSW50UmVjdCBQYWludEFn
Z3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGU6OmNhbGN1bGF0ZVBhaW50Qm91bmRzKCkgY29uc3QKK3sK
KyAgICBJbnRSZWN0IGJvdW5kczsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhaW50UmVj
dHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGJvdW5kcy51bml0ZShwYWludFJlY3RzW2ldKTsKKyAg
ICByZXR1cm4gYm91bmRzOworfQorCitib29sIFBhaW50QWdncmVnYXRvcjo6aGFzUGVuZGluZ1Vw
ZGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3VwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHko
KSB8fCAhbV91cGRhdGUucGFpbnRSZWN0cy5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgUGFpbnRBZ2dy
ZWdhdG9yOjpjbGVhclBlbmRpbmdVcGRhdGUoKQoreworICAgIG1fdXBkYXRlID0gUGVuZGluZ1Vw
ZGF0ZSgpOworfQorCit2b2lkIFBhaW50QWdncmVnYXRvcjo6cG9wUGVuZGluZ1VwZGF0ZShQZW5k
aW5nVXBkYXRlKiB1cGRhdGUpCit7CisgICAgLy8gQ29tYmluZSBwYWludCByZWN0cyBpZiB0aGVp
ciBjb21iaW5lZCBhcmVhIGlzIG5vdCBzdWZmaWNpZW50bHkgbGVzcyB0aGFuCisgICAgLy8gdGhl
IGFyZWEgb2YgdGhlIHVuaW9uIG9mIGFsbCBwYWludCByZWN0cy4gIFdlIHNraXAgdGhpcyBpZiB0
aGVyZSBpcyBhCisgICAgLy8gc2Nyb2xsIHJlY3Qgc2luY2Ugc2Nyb2xsaW5nIGJlbmVmaXRzIGZy
b20gc21hbGxlciBwYWludCByZWN0cy4KKyAgICBpZiAobV91cGRhdGUuc2Nyb2xsUmVjdC5pc0Vt
cHR5KCkgJiYgbV91cGRhdGUucGFpbnRSZWN0cy5zaXplKCkgPiAxKSB7CisgICAgICAgIGludCBw
YWludEFyZWEgPSAwOworICAgICAgICBJbnRSZWN0IHVuaW9uUmVjdDsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3VwZGF0ZS5wYWludFJlY3RzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICBwYWludEFyZWEgKz0gY2FsY3VsYXRlQXJlYShtX3VwZGF0ZS5wYWludFJlY3RzW2ld
KTsKKyAgICAgICAgICAgIHVuaW9uUmVjdC51bml0ZShtX3VwZGF0ZS5wYWludFJlY3RzW2ldKTsK
KyAgICAgICAgfQorICAgICAgICBpbnQgdW5pb25BcmVhID0gY2FsY3VsYXRlQXJlYSh1bmlvblJl
Y3QpOworICAgICAgICBpZiAoZmxvYXQocGFpbnRBcmVhKSAvIGZsb2F0KHVuaW9uQXJlYSkgPiBt
YXhQYWludFJlY3RzQXJlYVJhdGlvKQorICAgICAgICAgICAgY29tYmluZVBhaW50UmVjdHMoKTsK
KyAgICB9CisgICAgKnVwZGF0ZSA9IG1fdXBkYXRlOworICAgIGNsZWFyUGVuZGluZ1VwZGF0ZSgp
OworfQorCit2b2lkIFBhaW50QWdncmVnYXRvcjo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkKK3sKKyAgICAvLyBDb21iaW5lIG92ZXJsYXBwaW5nIHBhaW50cyB1c2luZyBzbWFs
bGVzdCBib3VuZGluZyBib3guCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3VwZGF0ZS5w
YWludFJlY3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEludFJlY3QmIGV4aXN0aW5n
UmVjdCA9IG1fdXBkYXRlLnBhaW50UmVjdHNbaV07CisgICAgICAgIGlmIChleGlzdGluZ1JlY3Qu
Y29udGFpbnMocmVjdCkpICAvLyBPcHRpbWl6ZSBvdXQgcmVkdW5kYW5jeS4KKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgaWYgKHJlY3QuaW50ZXJzZWN0cyhleGlzdGluZ1JlY3QpIHx8IHNo
YXJlc0VkZ2UocmVjdCwgZXhpc3RpbmdSZWN0KSkgeworICAgICAgICAgICAgLy8gUmUtaW52YWxp
ZGF0ZSBpbiBjYXNlIHRoZSB1bmlvbiBpbnRlcnNlY3RzIG90aGVyIHBhaW50IHJlY3RzLgorICAg
ICAgICAgICAgSW50UmVjdCBjb21iaW5lZFJlY3QgPSB1bmlvblJlY3QoZXhpc3RpbmdSZWN0LCBy
ZWN0KTsKKyAgICAgICAgICAgIG1fdXBkYXRlLnBhaW50UmVjdHMucmVtb3ZlKGkpOworICAgICAg
ICAgICAgaW52YWxpZGF0ZVJlY3QoY29tYmluZWRSZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEFkZCBhIG5vbi1vdmVybGFwcGluZyBwYWludC4K
KyAgICBtX3VwZGF0ZS5wYWludFJlY3RzLmFwcGVuZChyZWN0KTsKKworICAgIC8vIElmIHRoZSBu
ZXcgcGFpbnQgb3ZlcmxhcHMgd2l0aCBhIHNjcm9sbCwgdGhlbiBpdCBmb3JjZXMgYW4gaW52YWxp
ZGF0aW9uIG9mCisgICAgLy8gdGhlIHNjcm9sbC4gIElmIHRoZSBuZXcgcGFpbnQgaXMgY29udGFp
bmVkIGJ5IGEgc2Nyb2xsLCB0aGVuIHRyaW0gb2ZmIHRoZQorICAgIC8vIHNjcm9sbCBkYW1hZ2Ug
dG8gYXZvaWQgcmVkdW5kYW50IHBhaW50aW5nLgorICAgIGlmICghbV91cGRhdGUuc2Nyb2xsUmVj
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKHNob3VsZEludmFsaWRhdGVTY3JvbGxSZWN0KHJl
Y3QpKQorICAgICAgICAgICAgaW52YWxpZGF0ZVNjcm9sbFJlY3QoKTsKKyAgICAgICAgZWxzZSBp
ZiAobV91cGRhdGUuc2Nyb2xsUmVjdC5jb250YWlucyhyZWN0KSkgeworICAgICAgICAgICAgbV91
cGRhdGUucGFpbnRSZWN0c1ttX3VwZGF0ZS5wYWludFJlY3RzLnNpemUoKSAtIDFdID0KKyAgICAg
ICAgICAgICAgICBzdWJ0cmFjdEludGVyc2VjdGlvbihyZWN0LCBtX3VwZGF0ZS5jYWxjdWxhdGVT
Y3JvbGxEYW1hZ2UoKSk7CisgICAgICAgICAgICBpZiAobV91cGRhdGUucGFpbnRSZWN0c1ttX3Vw
ZGF0ZS5wYWludFJlY3RzLnNpemUoKSAtIDFdLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBt
X3VwZGF0ZS5wYWludFJlY3RzLnJlbW92ZShtX3VwZGF0ZS5wYWludFJlY3RzLnNpemUoKSAtIDEp
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgp
ID4gbWF4UGFpbnRSZWN0cykKKyAgICAgICAgY29tYmluZVBhaW50UmVjdHMoKTsKKworICAgIC8v
IFRyYWNrIGhvdyBsYXJnZSB0aGUgcGFpbnRSZWN0cyB2ZWN0b3IgZ3Jvd3MgZHVyaW5nIGFuIGlu
dmFsaWRhdGlvbgorICAgIC8vIHNlcXVlbmNlLiAgTm90ZTogQSBzdWJzZXF1ZW50IGludmFsaWRh
dGlvbiBtYXkgZW5kIHVwIGJlaW5nIGNvbWJpbmVkCisgICAgLy8gd2l0aCBhbGwgZXhpc3Rpbmcg
cGFpbnRzLCB3aGljaCBtZWFucyB0aGF0IHRyYWNraW5nIHRoZSBzaXplIG9mCisgICAgLy8gcGFp
bnRSZWN0cyBhdCB0aGUgdGltZSB3aGVuIHBvcFBlbmRpbmdVcGRhdGUoKSBpcyBjYWxsZWQgbWF5
IG1hc2sKKyAgICAvLyBjZXJ0YWluIHBlcmZvcm1hbmNlIHByb2JsZW1zLgorICAgIHdlYktpdENs
aWVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMoIk1QQXJjaC5SV19JbnRlcm1lZGlhdGVQYWlu
dFJlY3RDb3VudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X3VwZGF0ZS5wYWludFJlY3RzLnNpemUoKSwgMSwgMTAwLCA1MCk7Cit9CisKK3ZvaWQgUGFpbnRB
Z2dyZWdhdG9yOjpzY3JvbGxSZWN0KGludCBkeCwgaW50IGR5LCBjb25zdCBJbnRSZWN0JiBjbGlw
UmVjdCkKK3sKKyAgICAvLyBXZSBvbmx5IHN1cHBvcnQgc2Nyb2xsaW5nIGFsb25nIG9uZSBheGlz
IGF0IGEgdGltZS4KKyAgICBpZiAoZHggIT0gMCAmJiBkeSAhPSAwKSB7CisgICAgICAgIGludmFs
aWRhdGVSZWN0KGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdl
IGNhbiBvbmx5IHNjcm9sbCBvbmUgcmVjdCBhdCBhIHRpbWUuCisgICAgaWYgKCFtX3VwZGF0ZS5z
Y3JvbGxSZWN0LmlzRW1wdHkoKSAmJiBtX3VwZGF0ZS5zY3JvbGxSZWN0ICE9IGNsaXBSZWN0KSB7
CisgICAgICAgIGludmFsaWRhdGVSZWN0KGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIEFnYWluLCB3ZSBvbmx5IHN1cHBvcnQgc2Nyb2xsaW5nIGFsb25nIG9uZSBh
eGlzIGF0IGEgdGltZS4gIE1ha2Ugc3VyZSB0aGlzCisgICAgLy8gdXBkYXRlIGRvZXNuJ3Qgc2Ny
b2xsIG9uIGEgZGlmZmVyZW50IGF4aXMgdGhhbiBhbnkgZXhpc3Rpbmcgb25lLgorICAgIGlmICgo
ZHggJiYgbV91cGRhdGUuc2Nyb2xsRGVsdGEueSgpKSB8fCAoZHkgJiYgbV91cGRhdGUuc2Nyb2xs
RGVsdGEueCgpKSkgeworICAgICAgICBpbnZhbGlkYXRlUmVjdChjbGlwUmVjdCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGUgc2Nyb2xsIHJlY3QgaXMgbmV3IG9yIGlzbid0
IGNoYW5naW5nICh0aG91Z2ggdGhlIHNjcm9sbCBhbW91bnQgbWF5CisgICAgLy8gYmUgY2hhbmdp
bmcpLgorICAgIG1fdXBkYXRlLnNjcm9sbFJlY3QgPSBjbGlwUmVjdDsKKyAgICBtX3VwZGF0ZS5z
Y3JvbGxEZWx0YS5tb3ZlKGR4LCBkeSk7CisKKyAgICAvLyBXZSBtaWdodCBoYXZlIGp1c3Qgd2lw
ZWQgb3V0IGEgcHJlLWV4aXN0aW5nIHNjcm9sbC4KKyAgICBpZiAobV91cGRhdGUuc2Nyb2xsRGVs
dGEgPT0gSW50UG9pbnQoKSkgeworICAgICAgICBtX3VwZGF0ZS5zY3JvbGxSZWN0ID0gSW50UmVj
dCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQWRqdXN0IGFueSBjb250YWlu
ZWQgcGFpbnQgcmVjdHMgYW5kIGNoZWNrIGZvciBhbnkgb3ZlcmxhcHBpbmcgcGFpbnRzLgorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91cGRhdGUucGFpbnRSZWN0cy5zaXplKCk7ICsraSkg
eworICAgICAgICBpZiAobV91cGRhdGUuc2Nyb2xsUmVjdC5jb250YWlucyhtX3VwZGF0ZS5wYWlu
dFJlY3RzW2ldKSkgeworICAgICAgICAgICAgbV91cGRhdGUucGFpbnRSZWN0c1tpXSA9IHNjcm9s
bFBhaW50UmVjdChtX3VwZGF0ZS5wYWludFJlY3RzW2ldLCBkeCwgZHkpOworICAgICAgICAgICAg
Ly8gVGhlIHJlY3QgbWF5IGhhdmUgYmVlbiBzY3JvbGxlZCBvdXQgb2Ygdmlldy4KKyAgICAgICAg
ICAgIGlmIChtX3VwZGF0ZS5wYWludFJlY3RzW2ldLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgIG1fdXBkYXRlLnBhaW50UmVjdHMucmVtb3ZlKGkpOworICAgICAgICAgICAgICAgIGktLTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChtX3VwZGF0ZS5zY3JvbGxSZWN0Lmlu
dGVyc2VjdHMobV91cGRhdGUucGFpbnRSZWN0c1tpXSkpIHsKKyAgICAgICAgICAgIGludmFsaWRh
dGVTY3JvbGxSZWN0KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBJZiB0aGUgbmV3IHNjcm9sbCBvdmVybGFwcyB0b28gbXVjaCB3aXRoIGNvbnRhaW5l
ZCBwYWludCByZWN0cywgdGhlbiBmb3JjZQorICAgIC8vIGFuIGludmFsaWRhdGlvbiBvZiB0aGUg
c2Nyb2xsLgorICAgIGlmIChzaG91bGRJbnZhbGlkYXRlU2Nyb2xsUmVjdChJbnRSZWN0KCkpKQor
ICAgICAgICBpbnZhbGlkYXRlU2Nyb2xsUmVjdCgpOworfQorCitJbnRSZWN0IFBhaW50QWdncmVn
YXRvcjo6c2Nyb2xsUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCwgaW50IGR4LCBp
bnQgZHkpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZXN1bHQgPSBwYWludFJlY3Q7CisKKyAgICBy
ZXN1bHQubW92ZShkeCwgZHkpOworICAgIHJlc3VsdCA9IGludGVyc2VjdGlvbihtX3VwZGF0ZS5z
Y3JvbGxSZWN0LCByZXN1bHQpOworCisgICAgLy8gU3VidHJhY3Qgb3V0IHRoZSBzY3JvbGwgZGFt
YWdlIHJlY3QgdG8gYXZvaWQgcmVkdW5kYW50IHBhaW50aW5nLgorICAgIHJldHVybiBzdWJ0cmFj
dEludGVyc2VjdGlvbihyZXN1bHQsIG1fdXBkYXRlLmNhbGN1bGF0ZVNjcm9sbERhbWFnZSgpKTsK
K30KKworYm9vbCBQYWludEFnZ3JlZ2F0b3I6OnNob3VsZEludmFsaWRhdGVTY3JvbGxSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkgewor
ICAgICAgICBpZiAoIW1fdXBkYXRlLnNjcm9sbFJlY3QuaW50ZXJzZWN0cyhyZWN0KSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIW1fdXBkYXRlLnNjcm9sbFJlY3Qu
Y29udGFpbnMocmVjdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAv
LyBDaGVjayBpZiB0aGUgY29tYmluZWQgYXJlYSBvZiBhbGwgY29udGFpbmVkIHBhaW50IHJlY3Rz
IHBsdXMgdGhpcyBuZXcKKyAgICAvLyByZWN0IGNvbWVzIHRvbyBjbG9zZSB0byB0aGUgYXJlYSBv
ZiB0aGUgc2Nyb2xsUmVjdC4gIElmIHNvLCB0aGVuIHdlCisgICAgLy8gbWlnaHQgYXMgd2VsbCBp
bnZhbGlkYXRlIHRoZSBzY3JvbGwgcmVjdC4KKworICAgIGludCBwYWludEFyZWEgPSBjYWxjdWxh
dGVBcmVhKHJlY3QpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91cGRhdGUucGFpbnRS
ZWN0cy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBJbnRSZWN0JiBleGlzdGluZ1JlY3Qg
PSBtX3VwZGF0ZS5wYWludFJlY3RzW2ldOworICAgICAgICBpZiAobV91cGRhdGUuc2Nyb2xsUmVj
dC5jb250YWlucyhleGlzdGluZ1JlY3QpKQorICAgICAgICAgICAgcGFpbnRBcmVhICs9IGNhbGN1
bGF0ZUFyZWEoZXhpc3RpbmdSZWN0KTsKKyAgICB9CisgICAgaW50IHNjcm9sbEFyZWEgPSBjYWxj
dWxhdGVBcmVhKG1fdXBkYXRlLnNjcm9sbFJlY3QpOworICAgIGlmIChmbG9hdChwYWludEFyZWEp
IC8gZmxvYXQoc2Nyb2xsQXJlYSkgPiBtYXhSZWR1bmRhbnRQYWludFRvU2Nyb2xsQXJlYSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGFpbnRB
Z2dyZWdhdG9yOjppbnZhbGlkYXRlU2Nyb2xsUmVjdCgpCit7CisgICAgSW50UmVjdCBzY3JvbGxS
ZWN0ID0gbV91cGRhdGUuc2Nyb2xsUmVjdDsKKyAgICBtX3VwZGF0ZS5zY3JvbGxSZWN0ID0gSW50
UmVjdCgpOworICAgIG1fdXBkYXRlLnNjcm9sbERlbHRhID0gSW50UG9pbnQoKTsKKyAgICBpbnZh
bGlkYXRlUmVjdChzY3JvbGxSZWN0KTsKK30KKwordm9pZCBQYWludEFnZ3JlZ2F0b3I6OmNvbWJp
bmVQYWludFJlY3RzKCkKK3sKKyAgICAvLyBDb21iaW5lIHBhaW50IHJlY3RzIGRvIHRvIGF0IG1v
c3QgdHdvIHJlY3RzOiBvbmUgaW5zaWRlIHRoZSBzY3JvbGxSZWN0CisgICAgLy8gYW5kIG9uZSBv
dXRzaWRlIHRoZSBzY3JvbGxSZWN0LiAgSWYgdGhlcmUgaXMgbm8gc2Nyb2xsUmVjdCwgdGhlbiBq
dXN0CisgICAgLy8gdXNlIHRoZSBzbWFsbGVzdCBib3VuZGluZyBib3ggZm9yIGFsbCBwYWludCBy
ZWN0cy4KKyAgICAvLworICAgIC8vIE5PVEU6IFRoaXMgaXMgYSBmYWlybHkgc2ltcGxlIGFsZ29y
aXRobS4gIFdlIGNvdWxkIGdldCBmYW5jaWVyIGJ5IG9ubHkKKyAgICAvLyBjb21iaW5pbmcgdHdv
IHJlY3RzIHRvIGdldCB1cyB1bmRlciB0aGUgbWF4UGFpbnRSZWN0cyBsaW1pdCwgYnV0IGlmIHdl
CisgICAgLy8gcmVhY2ggdGhpcyBtZXRob2QgdGhlbiBpdCBtZWFucyB3ZSdyZSBoaXR0aW5nIGEg
cmFyZSBjYXNlLCBzbyB0aGVyZSdzIG5vCisgICAgLy8gbmVlZCB0byBvdmVyLW9wdGltaXplIGl0
LgorICAgIC8vCisgICAgaWYgKG1fdXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgIEludFJlY3QgYm91bmRzID0gbV91cGRhdGUuY2FsY3VsYXRlUGFpbnRCb3VuZHMoKTsKKyAg
ICAgICAgbV91cGRhdGUucGFpbnRSZWN0cy5jbGVhcigpOworICAgICAgICBtX3VwZGF0ZS5wYWlu
dFJlY3RzLmFwcGVuZChib3VuZHMpOworICAgIH0gZWxzZSB7CisgICAgICAgIEludFJlY3QgaW5u
ZXIsIG91dGVyOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdXBkYXRlLnBhaW50
UmVjdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIGV4aXN0aW5n
UmVjdCA9IG1fdXBkYXRlLnBhaW50UmVjdHNbaV07CisgICAgICAgICAgICBpZiAobV91cGRhdGUu
c2Nyb2xsUmVjdC5jb250YWlucyhleGlzdGluZ1JlY3QpKQorICAgICAgICAgICAgICAgIGlubmVy
LnVuaXRlKGV4aXN0aW5nUmVjdCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
b3V0ZXIudW5pdGUoZXhpc3RpbmdSZWN0KTsKKyAgICAgICAgfQorICAgICAgICBtX3VwZGF0ZS5w
YWludFJlY3RzLmNsZWFyKCk7CisgICAgICAgIG1fdXBkYXRlLnBhaW50UmVjdHMuYXBwZW5kKGlu
bmVyKTsKKyAgICAgICAgbV91cGRhdGUucGFpbnRSZWN0cy5hcHBlbmQob3V0ZXIpOworICAgIH0K
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9wYWludGluZy9QYWludEFnZ3JlZ2F0b3IuaA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL3BhaW50aW5nL1BhaW50QWdncmVnYXRvci5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvcGFpbnRpbmcvUGFpbnRBZ2dyZWdhdG9y
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
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
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhaW50QWdncmVnYXRvcl9o
CisjZGVmaW5lIFBhaW50QWdncmVnYXRvcl9oCisKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2lu
Y2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCisvLyBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBhZ2dyZWdhdGluZyBt
dWx0aXBsZSBpbnZhbGlkYXRpb24gYW5kIHNjcm9sbAorLy8gY29tbWFuZHMgdG8gcHJvZHVjZSBh
IHNjcm9sbCBhbmQgcmVwYWludCBzZXF1ZW5jZS4KK2NsYXNzIFBhaW50QWdncmVnYXRvciB7Citw
dWJsaWM6CisgICAgLy8gVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGFuIGFnZ3JlZ2F0aW9uIG9m
IGludmFsaWRhdGVSZWN0IGFuZCBzY3JvbGxSZWN0CisgICAgLy8gY2FsbHMuICBJZiB8c2Nyb2xs
UmVjdHwgaXMgbm9uLWVtcHR5LCB0aGVuIHRoYXQgcmVjdCBzaG91bGQgYmUgc2Nyb2xsZWQKKyAg
ICAvLyBieSB0aGUgYW1vdW50IHNwZWNpZmllZCBieSB8c2Nyb2xsRGVsdGF8LiAgSWYgfHBhaW50
UmVjdHN8IGlzIG5vbi1lbXB0eSwKKyAgICAvLyB0aGVuIHRob3NlIHJlY3RzIHNob3VsZCBiZSBy
ZXBhaW50ZWQuICBJZiB8c2Nyb2xsUmVjdHwgYW5kIHxwYWludFJlY3RzfAorICAgIC8vIGFyZSBu
b24tZW1wdHksIHRoZW4gc2Nyb2xsaW5nIHNob3VsZCBiZSBwZXJmb3JtZWQgYmVmb3JlIHJlcGFp
bnRpbmcuCisgICAgLy8gfHNjcm9sbERlbHRhfCBjYW4gb25seSBzcGVjaWZ5IHNjcm9sbGluZyBp
biBvbmUgZGlyZWN0aW9uIChpLmUuLCB0aGUgeAorICAgIC8vIGFuZCB5IG1lbWJlcnMgY2Fubm90
IGJvdGggYmUgbm9uLXplcm8pLgorICAgIHN0cnVjdCBQZW5kaW5nVXBkYXRlIHsKKyAgICAgICAg
UGVuZGluZ1VwZGF0ZSgpOworICAgICAgICB+UGVuZGluZ1VwZGF0ZSgpOworCisgICAgICAgIC8v
IFJldHVybnMgdGhlIHJlY3QgZGFtYWdlZCBieSBzY3JvbGxpbmcgd2l0aGluIHxzY3JvbGxSZWN0
fCBieQorICAgICAgICAvLyB8c2Nyb2xsRGVsdGF8LiAgVGhpcyByZWN0IG11c3QgYmUgcmVwYWlu
dGVkLgorICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IGNhbGN1bGF0ZVNjcm9sbERhbWFnZSgpIGNv
bnN0OworCisgICAgICAgIC8vIFJldHVybnMgdGhlIHNtYWxsZXN0IHJlY3QgY29udGFpbmluZyBh
bGwgcGFpbnQgcmVjdHMuCisgICAgICAgIFdlYkNvcmU6OkludFJlY3QgY2FsY3VsYXRlUGFpbnRC
b3VuZHMoKSBjb25zdDsKKworICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBzY3JvbGxEZWx0YTsK
KyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBzY3JvbGxSZWN0OworICAgICAgICBXVEY6OlZlY3Rv
cjxXZWJDb3JlOjpJbnRSZWN0PiBwYWludFJlY3RzOworICAgIH07CisKKyAgICAvLyBUaGVyZSBp
cyBhIFBlbmRpbmdVcGRhdGUgaWYgaW52YWxpZGF0ZVJlY3Qgb3Igc2Nyb2xsUmVjdCB3ZXJlIGNh
bGxlZCBhbmQKKyAgICAvLyBDbGVhclBlbmRpbmdVcGRhdGUgd2FzIG5vdCBjYWxsZWQuCisgICAg
Ym9vbCBoYXNQZW5kaW5nVXBkYXRlKCkgY29uc3Q7CisgICAgdm9pZCBjbGVhclBlbmRpbmdVcGRh
dGUoKTsKKworICAgIC8vIEZpbGxzIHx1cGRhdGV8IGFuZCBjbGVhcnMgdGhlIHBlbmRpbmcgdXBk
YXRlLgorICAgIHZvaWQgcG9wUGVuZGluZ1VwZGF0ZShQZW5kaW5nVXBkYXRlKik7CisKKyAgICAv
LyBUaGUgZ2l2ZW4gcmVjdCBzaG91bGQgYmUgcmVwYWludGVkLgorICAgIHZvaWQgaW52YWxpZGF0
ZVJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworCisgICAgLy8gVGhlIGdpdmVuIHJlY3Qg
c2hvdWxkIGJlIHNjcm9sbGVkIGJ5IHRoZSBnaXZlbiBhbW91bnRzLgorICAgIHZvaWQgc2Nyb2xs
UmVjdChpbnQgZHgsIGludCBkeSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwor
Citwcml2YXRlOgorICAgIFdlYkNvcmU6OkludFJlY3Qgc2Nyb2xsUGFpbnRSZWN0KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHBhaW50UmVjdCwgaW50IGR4LCBpbnQgZHkpIGNvbnN0OworICAgIGJv
b2wgc2hvdWxkSW52YWxpZGF0ZVNjcm9sbFJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVj
dCkgY29uc3Q7CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsUmVjdCgpOworICAgIHZvaWQgY29t
YmluZVBhaW50UmVjdHMoKTsKKworICAgIFBlbmRpbmdVcGRhdGUgbV91cGRhdGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9wYWludGluZy9QYWludENvbnRyb2xsZXIuY3BwDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvcGFpbnRpbmcvUGFpbnRDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL3BhaW50aW5nL1BhaW50Q29u
dHJvbGxlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjI3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBhaW50Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSA8c2tpYS9leHQv
cGxhdGZvcm1fY2FudmFzLmg+CisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRCdWlsZGVyLmgi
CisjaW5jbHVkZSAiUGFpbnRlci5oIgorI2luY2x1ZGUgIldlYlBhaW50QnVmZmVyLmgiCisjaW5j
bHVkZSAiV2ViUGFpbnRTdXJmYWNlLmgiCisjaW5jbHVkZSAiV2ViUG9pbnQuaCIKKyNpbmNsdWRl
ICJXZWJSZWN0LmgiCisjaW5jbHVkZSAiV2ViU2l6ZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdURjsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBib29sIHNfc2hvd0RlYnVnUGFpbnRSZWN0
cyA9IGZhbHNlOworCit2b2lkIFBhaW50Q29udHJvbGxlcjo6c2hvd0RlYnVnUGFpbnRSZWN0cyhi
b29sIHNob3cpCit7CisgICAgc19zaG93RGVidWdQYWludFJlY3RzID0gc2hvdzsKK30KKworUGFz
c093blB0cjxQYWludENvbnRyb2xsZXI+IFBhaW50Q29udHJvbGxlcjo6Y3JlYXRlKFBhaW50ZXIq
IHBhaW50ZXIsIFdlYlBhaW50U3VyZmFjZSogc3VyZmFjZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhaW50Q29udHJvbGxlcihwYWlu
dGVyLCBzdXJmYWNlLCBzaXplKSk7Cit9CisKK1BhaW50Q29udHJvbGxlcjo6flBhaW50Q29udHJv
bGxlcigpCit7CisgICAgaWYgKG1fc3VyZmFjZSkKKyAgICAgICAgbV9zdXJmYWNlLT5zZXRDbGll
bnQoMCk7Cit9CisKK3ZvaWQgUGFpbnRDb250cm9sbGVyOjpzY2hlZHVsZUFuaW1hdGlvbigpCit7
CisgICAgc2NoZWR1bGVVcGRhdGUoKTsKK30KKwordm9pZCBQYWludENvbnRyb2xsZXI6OnNjaGVk
dWxlSW52YWxpZGF0aW9uKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgbV9hZ2dyZWdhdG9y
LmludmFsaWRhdGVSZWN0KHJlY3QpOworICAgIHNjaGVkdWxlVXBkYXRlKCk7Cit9CisKK3ZvaWQg
UGFpbnRDb250cm9sbGVyOjpzY2hlZHVsZVNjcm9sbChpbnQgZHgsIGludCBkeSwgY29uc3QgSW50
UmVjdCYgY2xpcFJlY3QpCit7CisgICAgbV9hZ2dyZWdhdG9yLnNjcm9sbFJlY3QoZHgsIGR5LCBj
bGlwUmVjdCk7CisgICAgc2NoZWR1bGVVcGRhdGUoKTsKK30KKwordm9pZCBQYWludENvbnRyb2xs
ZXI6OnNjaGVkdWxlVXBkYXRlKCkKK3sKKyAgICBpZiAobV91cGRhdGVUaW1lci5pc0FjdGl2ZSgp
IHx8IG1fZmx1c2hpbmcpCisgICAgICAgIHJldHVybjsKKyAgICBtX3VwZGF0ZVRpbWVyLnN0YXJ0
T25lU2hvdCgwLjApOworfQorCitQYWludENvbnRyb2xsZXI6OlBhaW50Q29udHJvbGxlcihQYWlu
dGVyKiBwYWludGVyLCBXZWJQYWludFN1cmZhY2UqIHN1cmZhY2UsIGNvbnN0IEludFNpemUmIHNp
emUpCisgICAgOiBtX3VwZGF0ZVRpbWVyKHRoaXMsICZQYWludENvbnRyb2xsZXI6OnVwZGF0ZSkK
KyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9wYWludGVyKHBhaW50ZXIpCisgICAgLCBtX3N1
cmZhY2Uoc3VyZmFjZSkKKyAgICAsIG1fZmx1c2hpbmcoZmFsc2UpCit7CisgICAgbV9zdXJmYWNl
LT5zZXRDbGllbnQodGhpcyk7Cit9CisKK3ZvaWQgUGFpbnRDb250cm9sbGVyOjp1cGRhdGUoVGlt
ZXI8UGFpbnRDb250cm9sbGVyPiopCit7CisgICAgaWYgKG1fZmx1c2hpbmcgfHwgIW1fc3VyZmFj
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWludGVyLT5hbmltYXRlKCk7CisgICAgbV9w
YWludGVyLT5sYXlvdXQoKTsKKworICAgIC8vIE9LLCBzYXZlIHRoZSBwZW5kaW5nIHVwZGF0ZSB0
byBhIGxvY2FsIHNpbmNlIHBhaW50aW5nIG1heSBjYXVzZSBtb3JlCisgICAgLy8gaW52YWxpZGF0
aW9uLiAgU29tZSBXZWJDb3JlIHJlbmRlcmluZyBvYmplY3RzIG9ubHkgbGF5b3V0IHdoZW4gcGFp
bnRlZC4KKyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIG1f
YWdncmVnYXRvci5wb3BQZW5kaW5nVXBkYXRlKCZ1cGRhdGUpOworICAgIAorICAgIGlmICh1cGRh
dGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkgJiYgdXBkYXRlLnBhaW50UmVjdHMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IHNjcm9sbERhbWFnZSA9IHVwZGF0ZS5jYWxj
dWxhdGVTY3JvbGxEYW1hZ2UoKTsKKyAgICBJbnRSZWN0IGJvdW5kcyA9IHVuaW9uUmVjdCh1cGRh
dGUuY2FsY3VsYXRlUGFpbnRCb3VuZHMoKSwgc2Nyb2xsRGFtYWdlKTsKKworICAgIGlmICghdXBk
YXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKQorICAgICAgICBtX3N1cmZhY2UtPnNjcm9sbCh1cGRh
dGUuc2Nyb2xsUmVjdCwgdXBkYXRlLnNjcm9sbERlbHRhKTsKKworICAgIC8vIFRoZSBzY3JvbGwg
ZGFtYWdlIGlzIGp1c3QgYW5vdGhlciByZWN0YW5nbGUgdG8gcGFpbnQuCisgICAgVmVjdG9yPElu
dFJlY3Q+IGNvcHlSZWN0czsKKyAgICBjb3B5UmVjdHMuc3dhcCh1cGRhdGUucGFpbnRSZWN0cyk7
CisgICAgaWYgKCFzY3JvbGxEYW1hZ2UuaXNFbXB0eSgpKQorICAgICAgICBjb3B5UmVjdHMuYXBw
ZW5kKHNjcm9sbERhbWFnZSk7CisKKyAgICBPd25QdHI8V2ViUGFpbnRCdWZmZXI+IGJvdW5kaW5n
QnVmZmVyOworICAgIFZlY3RvcjxXZWJQYWludEJ1ZmZlcio+IGNsb25lZEJ1ZmZlcnM7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvcHlSZWN0cy5zaXplKCk7ICsraSkgeworICAgICAg
ICBXZWJQYWludEJ1ZmZlciogYnVmZmVyID0gMDsKKyAgICAgICAgSW50UG9pbnQgYnVmZmVyT3Jp
Z2luOworCisgICAgICAgIGlmICh1cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIE93blB0cjxXZWJQYWludEJ1ZmZlcj4gY2xvbmUgPQorICAgICAgICAgICAgICAgIG1f
cGFpbnRlci0+Y2xvbmVQYWludEJ1ZmZlckZvckFyZWEoY29weVJlY3RzW2ldLCAmYnVmZmVyT3Jp
Z2luKTsKKyAgICAgICAgICAgIGlmIChjbG9uZSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlciA9
IGNsb25lLmdldCgpOworICAgICAgICAgICAgICAgIGNsb25lZEJ1ZmZlcnMuYXBwZW5kKGNsb25l
LmxlYWtQdHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWJ1
ZmZlcikgeworICAgICAgICAgICAgaWYgKCFib3VuZGluZ0J1ZmZlcikgeworICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBtYXkgYmUgYWJsZSB0byBnZXQgYnkgd2l0aCBhIHNtYWxsZXIgYnVm
ZmVyIGhlcmUgaW4KKyAgICAgICAgICAgICAgICAvLyB0aGUgY2FzZSB0aGF0IG91ciBib3VuZHMg
aXMgcGFydGlhbGx5IGRlZmluZWQgYnkgcGx1Z2lucywgd2hpY2gKKyAgICAgICAgICAgICAgICAv
LyB2ZW5kZWQgdGhlaXIgb3duIHBhaW50IGJ1ZmZlci4KKyAgICAgICAgICAgICAgICBib3VuZGlu
Z0J1ZmZlciA9IGFkb3B0UHRyKG1fc3VyZmFjZS0+Y3JlYXRlQnVmZmVyKGJvdW5kcy5zaXplKCkp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhaW50UmVjdChib3VuZGluZ0J1ZmZlci0+
Y2FudmFzKCksIGJvdW5kcy5sb2NhdGlvbigpLCBjb3B5UmVjdHNbaV0pOworICAgICAgICAgICAg
YnVmZmVyT3JpZ2luID0gYm91bmRzLmxvY2F0aW9uKCk7CisgICAgICAgICAgICBidWZmZXIgPSBi
b3VuZGluZ0J1ZmZlci5nZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIEludFJlY3Qgc291cmNl
UmVjdChjb3B5UmVjdHNbaV0ubG9jYXRpb24oKS54KCkgLSBidWZmZXJPcmlnaW4ueCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29weVJlY3RzW2ldLmxvY2F0aW9uKCkueSgpIC0gYnVm
ZmVyT3JpZ2luLnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlSZWN0c1tpXS53
aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weVJlY3RzW2ldLmhlaWdodCgp
KTsKKyAgICAgICAgbV9zdXJmYWNlLT5wYWludChidWZmZXIsIGNvcHlSZWN0c1tpXS5sb2NhdGlv
bigpLCBzb3VyY2VSZWN0KTsKKyAgICB9CisKKyAgICBpZiAobV9zdXJmYWNlLT5mbHVzaCgpKQor
ICAgICAgICBtX2ZsdXNoaW5nID0gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworCisgICAgZGVsZXRlQWxsVmFsdWVzKGNsb25lZEJ1ZmZlcnMpOworfQorCit2
b2lkIFBhaW50Q29udHJvbGxlcjo6cGFpbnRSZWN0KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBJ
bnRQb2ludCYgY2FudmFzT3JpZ2luLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEdyYXBo
aWNzQ29udGV4dEJ1aWxkZXIgYnVpbGRlcihjYW52YXMpOworICAgIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCA9IGJ1aWxkZXIuY29udGV4dCgpOworCisgICAgY29udGV4dC5zYXZlKCk7CisgICAg
Y29udGV4dC50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KC1jYW52YXNPcmlnaW4ueCgpKSwK
KyAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oLWNhbnZhc09yaWdpbi55
KCkpKTsKKworICAgIG1fcGFpbnRlci0+cGFpbnQoY29udGV4dCwgcmVjdCk7CisKKyAgICBpZiAo
c19zaG93RGVidWdQYWludFJlY3RzKQorICAgICAgICBwYWludERlYnVnQm9yZGVyKGNvbnRleHQs
IHJlY3QpOworCisgICAgY29udGV4dC5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgUGFpbnRDb250cm9s
bGVyOjpwYWludERlYnVnQm9yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBDeWNsZSB0aHJvdWdoIHRoZXNlIGNvbG9ycyB0byBoZWxw
IGRpc3Rpbmd1aXNoIG5ldyBwYWludCByZWN0cy4KKyAgICBjb25zdCBSR0JBMzIgY29sb3JzW10g
PSB7CisgICAgICAgIG1ha2VSR0JBKDB4RkYsIDAsIDAsIDB4M0YpLAorICAgICAgICBtYWtlUkdC
QSgweEZGLCAwLCAweEZGLCAweDNGKSwKKyAgICAgICAgbWFrZVJHQkEoMCwgMCwgMHhGRiwgMHgz
RikKKyAgICB9OworICAgIHN0YXRpYyBpbnQgY29sb3JTZWxlY3RvciA9IDA7CisKKyAgICBjb250
ZXh0LnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNv
bG9yKGNvbG9yc1tjb2xvclNlbGVjdG9yKysgJiAzXSwgQ29sb3JTcGFjZURldmljZVJHQik7Cisg
ICAgY29udGV4dC5zdHJva2VSZWN0KHJlY3QsIDEuMGYpOworfQorCit2b2lkIFBhaW50Q29udHJv
bGxlcjo6d2lsbERlc3Ryb3koKQoreworICAgIEFTU0VSVCghbV9mbHVzaGluZyk7ICAvLyBJbiB0
aGUgZmFzdCBzaHV0ZG93biBjYXNlLCB3ZSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGRpZEZsdXNo
LgorCisgICAgaWYgKG1fc3VyZmFjZSkgeworICAgICAgICBtX3N1cmZhY2UtPnNldENsaWVudCgw
KTsKKyAgICAgICAgbV9zdXJmYWNlID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgUGFpbnRDb250cm9s
bGVyOjpkaWRGbHVzaCgpCit7CisgICAgbV9mbHVzaGluZyA9IGZhbHNlOworICAgIHVwZGF0ZSgm
bV91cGRhdGVUaW1lcik7Cit9CisKK3ZvaWQgUGFpbnRDb250cm9sbGVyOjpkaWRSZXNldCgpCit7
CisgICAgbV9mbHVzaGluZyA9IGZhbHNlOworICAgIHNjaGVkdWxlSW52YWxpZGF0aW9uKEludFJl
Y3QoSW50UG9pbnQoKSwgbV9zaXplKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvcGFpbnRpbmcvUGFpbnRDb250cm9sbGVyLmgN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9wYWludGluZy9QYWlu
dENvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L3BhaW50aW5nL1BhaW50Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBQYWludENvbnRyb2xsZXJfaAorI2RlZmluZSBQYWludENvbnRyb2xsZXJfaAorCisj
aW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlBhaW50QWdncmVnYXRvci5oIgorI2luY2x1
ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiV2ViQ2FudmFzLmgiCisjaW5jbHVkZSAiV2ViUGFpbnRT
dXJmYWNlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW50UmVjdDsKK30KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFBhaW50ZXI7CitjbGFzcyBXZWJQYWludFN1cmZh
Y2U7CisKKy8vIFRoZSBQYWludENvbnRyb2xsZXIgaXMgcmVzcG9uc2libGUgZm9yIHJlY2Vpdmlu
ZyBkYW1hZ2UgZXZlbnRzIGFuZAorLy8gYXN5bmNocm9ub3VzbHkgdXBkYXRpbmcgYSBXZWJQYWlu
dFN1cmZhY2UgYmFzZWQgb24gdGhlIHJlY2VpdmVkIGRhbWFnZS4KKy8vIFBhaW50aW5nIGhhcHBl
bnMgYnkgcmVxdWVzdGluZyB0aGF0IGEgUGFpbnRlciByZW5kZXIgaW50byBhIFdlYkNhbnZhcy4K
K2NsYXNzIFBhaW50Q29udHJvbGxlciA6IHB1YmxpYyBXZWJQYWludFN1cmZhY2VDbGllbnQgewor
cHVibGljOgorICAgIHN0YXRpYyB2b2lkIHNob3dEZWJ1Z1BhaW50UmVjdHMoYm9vbCBzaG93KTsK
KworICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhaW50Q29udHJvbGxlcj4gY3JlYXRlKFBhaW50ZXIq
LCBXZWJQYWludFN1cmZhY2UqLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAgflBhaW50
Q29udHJvbGxlcigpOworCisgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpOworICAgIHZvaWQg
c2NoZWR1bGVJbnZhbGlkYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQg
c2NoZWR1bGVTY3JvbGwoaW50IGR4LCBpbnQgZHksIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNs
aXBSZWN0KTsKKworcHJpdmF0ZToKKyAgICBQYWludENvbnRyb2xsZXIoUGFpbnRlciosIFdlYlBh
aW50U3VyZmFjZSosIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB2b2lkIHNjaGVkdWxl
VXBkYXRlKCk7CisgICAgdm9pZCB1cGRhdGUoV2ViQ29yZTo6VGltZXI8UGFpbnRDb250cm9sbGVy
PiopOworICAgIHZvaWQgcGFpbnRSZWN0KFdlYkNhbnZhcyosIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBjYW52YXNPcmlnaW4sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHBh
aW50RGVidWdCb3JkZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOworCisgICAgLy8gV2ViUGFpbnRTdXJmYWNlQ2xpZW50IG1ldGhvZHM6CisgICAg
dmlydHVhbCB2b2lkIHdpbGxEZXN0cm95KCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZsdXNoKCk7
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlc2V0KCk7CisKKyAgICBXZWJDb3JlOjpUaW1lcjxQYWlu
dENvbnRyb2xsZXI+IG1fdXBkYXRlVGltZXI7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7
CisgICAgUGFpbnRBZ2dyZWdhdG9yIG1fYWdncmVnYXRvcjsKKyAgICBQYWludGVyKiBtX3BhaW50
ZXI7CisgICAgV2ViUGFpbnRTdXJmYWNlKiBtX3N1cmZhY2U7CisgICAgYm9vbCBtX2ZsdXNoaW5n
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvcGFpbnRpbmcvUGFpbnRlci5oDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvcGFpbnRpbmcvUGFpbnRlci5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvcGFpbnRpbmcvUGFpbnRlci5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYWludGVyX2gKKyNkZWZpbmUgUGFpbnRlcl9o
CisKKyNpbmNsdWRlICJXZWJDYW52YXMuaCIKKyNpbmNsdWRlICJXZWJQYWludEJ1ZmZlci5oIgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEludFBvaW50OworY2xhc3MgSW50UmVjdDsKK30KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBXZWJSZWN0OworCitjbGFzcyBQYWludGVyIHsK
K3B1YmxpYzoKKyAgICAvLyBQYWludGluZyBtYXkgaW52b2x2ZSBtdWx0aXBsZSBjYWxscyB0byBw
YWludCgpIGluIG9yZGVyIHRvIGNhcHR1cmUKKyAgICAvLyBwaXhlbHMgZm9yIGRpZmZlcmVudCBz
dWItcmVjdGFuZ2xlcyB0aGF0IGhhdmUgZGFtYWdlLiAgQSBzZXF1ZW5jZSBvZgorICAgIC8vIHBh
aW50IGNhbGxzIGlzIHByZWZpeGVkIGJ5IGEgY2FsbCB0byBhbmltYXRlKCkgYW5kIGxheW91dCgp
LgorICAgIC8vCisgICAgLy8gSXQgaXMgZXhwZWN0ZWQgdGhhdCBhbmltYXRlKCkgYW5kIGxheW91
dCgpIG1heSBoYXZlIHRoZSBzaWRlLWVmZmVjdCBvZgorICAgIC8vIGdlbmVyYXRpbmcgZGFtYWdl
IChzY2hlZHVsZUludmFsaWRhdGUoKSBhbmQgc2NoZWR1bGVTY3JvbGwoKSBjYWxscykuCisKKyAg
ICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOworCisgICAgLy8gVG8gb3B0aW1pemUgcGFpbnRp
bmcsIGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgUGFpbnRlciB0byBzdXBwbHkgYSBwYWludAorICAg
IC8vIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIHBhaW50UmVjdC4gIFRoZSBvcmlnaW4gb2YgdGhlIGJ1
ZmZlciBpcyByZXR1cm5lZAorICAgIC8vIHNpbmNlIHRoZSBidWZmZXIgbWF5IGNvcnJlc3BvbmQg
dG8gYSBwbHVnaW4gd2hvc2Ugb3JpZ2luIG1heSBkaWZmZXIgZnJvbQorICAgIC8vIHRoYXQgb2Yg
dGhlIHBhaW50UmVjdC4KKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViUGFpbnRCdWZmZXI+IGNs
b25lUGFpbnRCdWZmZXJGb3JBcmVhKAorICAgICAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBw
YWludFJlY3QsCisgICAgICAgIFdlYkNvcmU6OkludFBvaW50KiBidWZmZXJPcmlnaW4pID0gMDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvUGFpbnRBZ2dyZWdhdG9yVGVzdC5jcHANCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BhaW50QWdncmVnYXRvclRlc3QuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QYWludEFnZ3JlZ2F0
b3JUZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OTMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAicGFpbnRpbmcvUGFpbnRBZ2dyZWdhdG9yLmgiCisKKyNpbmNsdWRlIDxn
dGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CisKK25hbWVzcGFjZSB7CisKK1RFU1QoUGFpbnRBZ2dyZWdhdG9yLCBJbml0aWFs
U3RhdGUpCit7CisgICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7CisgICAgRVhQRUNUX0ZBTFNFKGdy
ZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKK30KKworVEVTVChQYWludEFnZ3JlZ2F0b3IsIFNpbmds
ZUludmFsaWRhdGlvbikKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJl
Y3QgcmVjdCgyLCA0LCAxMCwgMTYpOworICAgIGdyZWcuaW52YWxpZGF0ZVJlY3QocmVjdCk7CisK
KyAgICBFWFBFQ1RfVFJVRShncmVnLmhhc1BlbmRpbmdVcGRhdGUoKSk7CisgICAgUGFpbnRBZ2dy
ZWdhdG9yOjpQZW5kaW5nVXBkYXRlIHVwZGF0ZTsKKyAgICBncmVnLnBvcFBlbmRpbmdVcGRhdGUo
JnVwZGF0ZSk7CisKKyAgICBFWFBFQ1RfVFJVRSh1cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkp
OworICAgIEFTU0VSVF9FUSgxVSwgdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpKTsKKworICAgIEVY
UEVDVF9FUShyZWN0LCB1cGRhdGUucGFpbnRSZWN0c1swXSk7Cit9CisKK1RFU1QoUGFpbnRBZ2dy
ZWdhdG9yLCBEb3VibGVEaXNqb2ludEludmFsaWRhdGlvbikKK3sKKyAgICBQYWludEFnZ3JlZ2F0
b3IgZ3JlZzsKKworICAgIEludFJlY3QgcjEoMiwgNCwgMiwgNDApOworICAgIEludFJlY3QgcjIo
NCwgMiwgNDAsIDIpOworCisgICAgZ3JlZy5pbnZhbGlkYXRlUmVjdChyMSk7CisgICAgZ3JlZy5p
bnZhbGlkYXRlUmVjdChyMik7CisKKyAgICBJbnRSZWN0IGV4cGVjdGVkQm91bmRzID0gdW5pb25S
ZWN0KHIxLCByMik7CisKKyAgICBFWFBFQ1RfVFJVRShncmVnLmhhc1BlbmRpbmdVcGRhdGUoKSk7
CisgICAgUGFpbnRBZ2dyZWdhdG9yOjpQZW5kaW5nVXBkYXRlIHVwZGF0ZTsKKyAgICBncmVnLnBv
cFBlbmRpbmdVcGRhdGUoJnVwZGF0ZSk7CisKKyAgICBFWFBFQ1RfVFJVRSh1cGRhdGUuc2Nyb2xs
UmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUSgyVSwgdXBkYXRlLnBhaW50UmVjdHMuc2l6
ZSgpKTsKKworICAgIEVYUEVDVF9FUShleHBlY3RlZEJvdW5kcywgdXBkYXRlLmNhbGN1bGF0ZVBh
aW50Qm91bmRzKCkpOworfQorCitURVNUKFBhaW50QWdncmVnYXRvciwgRGlzam9pbnRJbnZhbGlk
YXRpb25zQ29tYmluZWQpCit7CisgICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7CisKKyAgICAvLyBN
YWtlIHRoZSByZWN0YW5nbGVzIHN1Y2ggdGhhdCB0aGV5IGRvbid0IG92ZXJsYXAgYnV0IGNvdmVy
IGEgdmVyeSBsYXJnZQorICAgIC8vIHBlcmNlbnRhZ2Ugb2YgdGhlIGFyZWEgb2YgY292ZXJlZCBi
eSB0aGVpciB1bmlvbi4gVGhpcyBpcyBzbyB3ZSdyZSBub3QKKyAgICAvLyB2ZXJ5IHNlbnNpdGl2
ZSB0byB0aGUgY29tYmluaW5nIGhldXJpc3RpYyBpbiB0aGUgcGFpbnQgYWdncmVnYXRvci4KKyAg
ICBJbnRSZWN0IHIxKDIsIDQsIDIsIDEwMDApOworICAgIEludFJlY3QgcjIoNSwgMiwgMiwgMTAw
MCk7CisKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHIxKTsKKyAgICBncmVnLmludmFsaWRhdGVS
ZWN0KHIyKTsKKworICAgIEludFJlY3QgZXhwZWN0ZWRCb3VuZHMgPSB1bmlvblJlY3QocjEsIHIy
KTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWlu
dEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1Vw
ZGF0ZSgmdXBkYXRlKTsKKworICAgIEVYUEVDVF9UUlVFKHVwZGF0ZS5zY3JvbGxSZWN0LmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUX0VRKDFVLCB1cGRhdGUucGFpbnRSZWN0cy5zaXplKCkpOworCisg
ICAgRVhQRUNUX0VRKGV4cGVjdGVkQm91bmRzLCB1cGRhdGUucGFpbnRSZWN0c1swXSk7Cit9CisK
K1RFU1QoUGFpbnRBZ2dyZWdhdG9yLCBTaW5nbGVTY3JvbGwpCit7CisgICAgUGFpbnRBZ2dyZWdh
dG9yIGdyZWc7CisKKyAgICBJbnRSZWN0IHJlY3QoMSwgMiwgMywgNCk7CisgICAgSW50UG9pbnQg
ZGVsdGEoMSwgMCk7CisgICAgZ3JlZy5zY3JvbGxSZWN0KGRlbHRhLngoKSwgZGVsdGEueSgpLCBy
ZWN0KTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQ
YWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGlu
Z1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIEVYUEVDVF9UUlVFKHVwZGF0ZS5wYWludFJlY3RzLmlz
RW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHVwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHkoKSk7
CisKKyAgICBFWFBFQ1RfRVEocmVjdCwgdXBkYXRlLnNjcm9sbFJlY3QpOworCisgICAgRVhQRUNU
X0VRKGRlbHRhLngoKSwgdXBkYXRlLnNjcm9sbERlbHRhLngoKSk7CisgICAgRVhQRUNUX0VRKGRl
bHRhLnkoKSwgdXBkYXRlLnNjcm9sbERlbHRhLnkoKSk7CisKKyAgICBJbnRSZWN0IHJlc3VsdGlu
Z0RhbWFnZSA9IHVwZGF0ZS5jYWxjdWxhdGVTY3JvbGxEYW1hZ2UoKTsKKyAgICBJbnRSZWN0IGV4
cGVjdGVkRGFtYWdlKDEsIDIsIDEsIDQpOworICAgIEVYUEVDVF9FUShleHBlY3RlZERhbWFnZSwg
cmVzdWx0aW5nRGFtYWdlKTsKK30KKworVEVTVChQYWludEFnZ3JlZ2F0b3IsIERvdWJsZU92ZXJs
YXBwaW5nU2Nyb2xsKQoreworICAgIFBhaW50QWdncmVnYXRvciBncmVnOworCisgICAgSW50UmVj
dCByZWN0KDEsIDIsIDMsIDQpOworICAgIEludFBvaW50IGRlbHRhMSgxLCAwKTsKKyAgICBJbnRQ
b2ludCBkZWx0YTIoMSwgMCk7CisgICAgZ3JlZy5zY3JvbGxSZWN0KGRlbHRhMS54KCksIGRlbHRh
MS55KCksIHJlY3QpOworICAgIGdyZWcuc2Nyb2xsUmVjdChkZWx0YTIueCgpLCBkZWx0YTIueSgp
LCByZWN0KTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAg
ICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVu
ZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIEVYUEVDVF9UUlVFKHVwZGF0ZS5wYWludFJlY3Rz
LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHVwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHko
KSk7CisKKyAgICBFWFBFQ1RfRVEocmVjdCwgdXBkYXRlLnNjcm9sbFJlY3QpOworCisgICAgSW50
UG9pbnQgZXhwZWN0ZWREZWx0YShkZWx0YTEueCgpICsgZGVsdGEyLngoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlbHRhMS55KCkgKyBkZWx0YTIueSgpKTsKKyAgICBFWFBFQ1RfRVEo
ZXhwZWN0ZWREZWx0YS54KCksIHVwZGF0ZS5zY3JvbGxEZWx0YS54KCkpOworICAgIEVYUEVDVF9F
UShleHBlY3RlZERlbHRhLnkoKSwgdXBkYXRlLnNjcm9sbERlbHRhLnkoKSk7CisKKyAgICBJbnRS
ZWN0IHJlc3VsdGluZ0RhbWFnZSA9IHVwZGF0ZS5jYWxjdWxhdGVTY3JvbGxEYW1hZ2UoKTsKKyAg
ICBJbnRSZWN0IGV4cGVjdGVkRGFtYWdlKDEsIDIsIDIsIDQpOworICAgIEVYUEVDVF9FUShleHBl
Y3RlZERhbWFnZSwgcmVzdWx0aW5nRGFtYWdlKTsKK30KKworVEVTVChQYWludEFnZ3JlZ2F0b3Is
IE5lZ2F0aW5nU2Nyb2xsKQoreworICAgIFBhaW50QWdncmVnYXRvciBncmVnOworCisgICAgLy8g
U2Nyb2xsIHR3aWNlIGluIG9wcG9zaXRlIGRpcmVjdGlvbnMgYnkgZXF1YWwgYW1vdW50cy4gIFRo
ZSByZXN1bHQKKyAgICAvLyBzaG91bGQgYmUgbm8gc2Nyb2xsaW5nLgorCisgICAgSW50UmVjdCBy
ZWN0KDEsIDIsIDMsIDQpOworICAgIEludFBvaW50IGRlbHRhMSgxLCAwKTsKKyAgICBJbnRQb2lu
dCBkZWx0YTIoLTEsIDApOworICAgIGdyZWcuc2Nyb2xsUmVjdChkZWx0YTEueCgpLCBkZWx0YTEu
eSgpLCByZWN0KTsKKyAgICBncmVnLnNjcm9sbFJlY3QoZGVsdGEyLngoKSwgZGVsdGEyLnkoKSwg
cmVjdCk7CisKKyAgICBFWFBFQ1RfRkFMU0UoZ3JlZy5oYXNQZW5kaW5nVXBkYXRlKCkpOworfQor
CitURVNUKFBhaW50QWdncmVnYXRvciwgRGlhZ29uYWxTY3JvbGwpCit7CisgICAgUGFpbnRBZ2dy
ZWdhdG9yIGdyZWc7CisKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IG9wdGltaXplZCBkaWFnb25h
bCBzY3JvbGxpbmcsIHNvIHRoaXMgc2hvdWxkIHJlc3VsdCBpbgorICAgIC8vIHJlcGFpbnRpbmcu
CisKKyAgICBJbnRSZWN0IHJlY3QoMSwgMiwgMywgNCk7CisgICAgSW50UG9pbnQgZGVsdGEoMSwg
MSk7CisgICAgZ3JlZy5zY3JvbGxSZWN0KGRlbHRhLngoKSwgZGVsdGEueSgpLCByZWN0KTsKKwor
ICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFnZ3Jl
Z2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgm
dXBkYXRlKTsKKworICAgIEVYUEVDVF9UUlVFKHVwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHkoKSk7
CisgICAgQVNTRVJUX0VRKDFVLCB1cGRhdGUucGFpbnRSZWN0cy5zaXplKCkpOworCisgICAgRVhQ
RUNUX0VRKHJlY3QsIHVwZGF0ZS5wYWludFJlY3RzWzBdKTsKK30KKworVEVTVChQYWludEFnZ3Jl
Z2F0b3IsIENvbnRhaW5lZFBhaW50QWZ0ZXJTY3JvbGwpCit7CisgICAgUGFpbnRBZ2dyZWdhdG9y
IGdyZWc7CisKKyAgICBJbnRSZWN0IHNjcm9sbFJlY3QoMCwgMCwgMTAsIDEwKTsKKyAgICBncmVn
LnNjcm9sbFJlY3QoMiwgMCwgc2Nyb2xsUmVjdCk7CisKKyAgICBJbnRSZWN0IHBhaW50UmVjdCg0
LCA0LCAyLCAyKTsKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7CisKKyAgICBF
WFBFQ1RfVFJVRShncmVnLmhhc1BlbmRpbmdVcGRhdGUoKSk7CisgICAgUGFpbnRBZ2dyZWdhdG9y
OjpQZW5kaW5nVXBkYXRlIHVwZGF0ZTsKKyAgICBncmVnLnBvcFBlbmRpbmdVcGRhdGUoJnVwZGF0
ZSk7CisKKyAgICAvLyBleHBlY3RpbmcgYSBwYWludCByZWN0IGluc2lkZSB0aGUgc2Nyb2xsIHJl
Y3QKKyAgICBFWFBFQ1RfRkFMU0UodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKyAgICBF
WFBFQ1RfRVEoMVUsIHVwZGF0ZS5wYWludFJlY3RzLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEo
c2Nyb2xsUmVjdCwgdXBkYXRlLnNjcm9sbFJlY3QpOworICAgIEVYUEVDVF9FUShwYWludFJlY3Qs
IHVwZGF0ZS5wYWludFJlY3RzWzBdKTsKK30KKworVEVTVChQYWludEFnZ3JlZ2F0b3IsIENvbnRh
aW5lZFBhaW50QmVmb3JlU2Nyb2xsKQoreworICAgIFBhaW50QWdncmVnYXRvciBncmVnOworCisg
ICAgSW50UmVjdCBwYWludFJlY3QoNCwgNCwgMiwgMik7CisgICAgZ3JlZy5pbnZhbGlkYXRlUmVj
dChwYWludFJlY3QpOworCisgICAgSW50UmVjdCBzY3JvbGxSZWN0KDAsIDAsIDEwLCAxMCk7Cisg
ICAgZ3JlZy5zY3JvbGxSZWN0KDIsIDAsIHNjcm9sbFJlY3QpOworCisgICAgRVhQRUNUX1RSVUUo
Z3JlZy5oYXNQZW5kaW5nVXBkYXRlKCkpOworICAgIFBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1Vw
ZGF0ZSB1cGRhdGU7CisgICAgZ3JlZy5wb3BQZW5kaW5nVXBkYXRlKCZ1cGRhdGUpOworCisgICAg
Ly8gRXhwZWN0aW5nIGEgcGFpbnQgcmVjdCBpbnNpZGUgdGhlIHNjcm9sbCByZWN0CisgICAgRVhQ
RUNUX0ZBTFNFKHVwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0VRKDFV
LCB1cGRhdGUucGFpbnRSZWN0cy5zaXplKCkpOworCisgICAgcGFpbnRSZWN0Lm1vdmUoMiwgMCk7
CisKKyAgICBFWFBFQ1RfRVEoc2Nyb2xsUmVjdCwgdXBkYXRlLnNjcm9sbFJlY3QpOworICAgIEVY
UEVDVF9FUShwYWludFJlY3QsIHVwZGF0ZS5wYWludFJlY3RzWzBdKTsKK30KKworVEVTVChQYWlu
dEFnZ3JlZ2F0b3IsIENvbnRhaW5lZFBhaW50c0JlZm9yZUFuZEFmdGVyU2Nyb2xsKQoreworICAg
IFBhaW50QWdncmVnYXRvciBncmVnOworCisgICAgSW50UmVjdCBwYWludFJlY3QxKDQsIDQsIDIs
IDIpOworICAgIGdyZWcuaW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0MSk7CisKKyAgICBJbnRSZWN0
IHNjcm9sbFJlY3QoMCwgMCwgMTAsIDEwKTsKKyAgICBncmVnLnNjcm9sbFJlY3QoMiwgMCwgc2Ny
b2xsUmVjdCk7CisKKyAgICBJbnRSZWN0IHBhaW50UmVjdDIoNiwgNCwgMiwgMik7CisgICAgZ3Jl
Zy5pbnZhbGlkYXRlUmVjdChwYWludFJlY3QyKTsKKworICAgIEludFJlY3QgZXhwZWN0ZWRQYWlu
dFJlY3QgPSBwYWludFJlY3QyOworCisgICAgRVhQRUNUX1RSVUUoZ3JlZy5oYXNQZW5kaW5nVXBk
YXRlKCkpOworICAgIFBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0ZSB1cGRhdGU7CisgICAg
Z3JlZy5wb3BQZW5kaW5nVXBkYXRlKCZ1cGRhdGUpOworCisgICAgLy8gRXhwZWN0aW5nIGEgcGFp
bnQgcmVjdCBpbnNpZGUgdGhlIHNjcm9sbCByZWN0CisgICAgRVhQRUNUX0ZBTFNFKHVwZGF0ZS5z
Y3JvbGxSZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0VRKDFVLCB1cGRhdGUucGFpbnRSZWN0
cy5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKHNjcm9sbFJlY3QsIHVwZGF0ZS5zY3JvbGxSZWN0
KTsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRQYWludFJlY3QsIHVwZGF0ZS5wYWludFJlY3RzWzBd
KTsKK30KKworVEVTVChQYWludEFnZ3JlZ2F0b3IsIExhcmdlQ29udGFpbmVkUGFpbnRBZnRlclNj
cm9sbCkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJlY3Qgc2Nyb2xs
UmVjdCgwLCAwLCAxMCwgMTApOworICAgIGdyZWcuc2Nyb2xsUmVjdCgwLCAxLCBzY3JvbGxSZWN0
KTsKKworICAgIEludFJlY3QgcGFpbnRSZWN0KDAsIDAsIDEwLCA5KTsgIC8vIFJlcGFpbnQgOTAl
CisgICAgZ3JlZy5pbnZhbGlkYXRlUmVjdChwYWludFJlY3QpOworCisgICAgRVhQRUNUX1RSVUUo
Z3JlZy5oYXNQZW5kaW5nVXBkYXRlKCkpOworICAgIFBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1Vw
ZGF0ZSB1cGRhdGU7CisgICAgZ3JlZy5wb3BQZW5kaW5nVXBkYXRlKCZ1cGRhdGUpOworCisgICAg
RVhQRUNUX1RSVUUodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEo
MVUsIHVwZGF0ZS5wYWludFJlY3RzLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEoc2Nyb2xsUmVj
dCwgdXBkYXRlLnBhaW50UmVjdHNbMF0pOworfQorCitURVNUKFBhaW50QWdncmVnYXRvciwgTGFy
Z2VDb250YWluZWRQYWludEJlZm9yZVNjcm9sbCkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3Jl
ZzsKKworICAgIEludFJlY3QgcGFpbnRSZWN0KDAsIDAsIDEwLCA5KTsgIC8vIFJlcGFpbnQgOTAl
CisgICAgZ3JlZy5pbnZhbGlkYXRlUmVjdChwYWludFJlY3QpOworCisgICAgSW50UmVjdCBzY3Jv
bGxSZWN0KDAsIDAsIDEwLCAxMCk7CisgICAgZ3JlZy5zY3JvbGxSZWN0KDAsIDEsIHNjcm9sbFJl
Y3QpOworCisgICAgRVhQRUNUX1RSVUUoZ3JlZy5oYXNQZW5kaW5nVXBkYXRlKCkpOworICAgIFBh
aW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0ZSB1cGRhdGU7CisgICAgZ3JlZy5wb3BQZW5kaW5n
VXBkYXRlKCZ1cGRhdGUpOworCisgICAgRVhQRUNUX1RSVUUodXBkYXRlLnNjcm9sbFJlY3QuaXNF
bXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEoMVUsIHVwZGF0ZS5wYWludFJlY3RzLnNpemUoKSk7CisK
KyAgICBFWFBFQ1RfRVEoc2Nyb2xsUmVjdCwgdXBkYXRlLnBhaW50UmVjdHNbMF0pOworfQorCitU
RVNUKFBhaW50QWdncmVnYXRvciwgT3ZlcmxhcHBpbmdQYWludEJlZm9yZVNjcm9sbCkKK3sKKyAg
ICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJlY3QgcGFpbnRSZWN0KDQsIDQsIDEw
LCAyKTsKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7CisKKyAgICBJbnRSZWN0
IHNjcm9sbFJlY3QoMCwgMCwgMTAsIDEwKTsKKyAgICBncmVnLnNjcm9sbFJlY3QoMiwgMCwgc2Ny
b2xsUmVjdCk7CisKKyAgICBJbnRSZWN0IGV4cGVjdGVkUGFpbnRSZWN0ID0gdW5pb25SZWN0KHNj
cm9sbFJlY3QsIHBhaW50UmVjdCk7CisKKyAgICBFWFBFQ1RfVFJVRShncmVnLmhhc1BlbmRpbmdV
cGRhdGUoKSk7CisgICAgUGFpbnRBZ2dyZWdhdG9yOjpQZW5kaW5nVXBkYXRlIHVwZGF0ZTsKKyAg
ICBncmVnLnBvcFBlbmRpbmdVcGRhdGUoJnVwZGF0ZSk7CisKKyAgICBFWFBFQ1RfVFJVRSh1cGRh
dGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUSgxVSwgdXBkYXRlLnBhaW50
UmVjdHMuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUShleHBlY3RlZFBhaW50UmVjdCwgdXBkYXRl
LnBhaW50UmVjdHNbMF0pOworfQorCitURVNUKFBhaW50QWdncmVnYXRvciwgT3ZlcmxhcHBpbmdQ
YWludEFmdGVyU2Nyb2xsKQoreworICAgIFBhaW50QWdncmVnYXRvciBncmVnOworCisgICAgSW50
UmVjdCBzY3JvbGxSZWN0KDAsIDAsIDEwLCAxMCk7CisgICAgZ3JlZy5zY3JvbGxSZWN0KDIsIDAs
IHNjcm9sbFJlY3QpOworCisgICAgSW50UmVjdCBwYWludFJlY3QoNCwgNCwgMTAsIDIpOworICAg
IGdyZWcuaW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsKKworICAgIEludFJlY3QgZXhwZWN0ZWRQ
YWludFJlY3QgPSB1bmlvblJlY3Qoc2Nyb2xsUmVjdCwgcGFpbnRSZWN0KTsKKworICAgIEVYUEVD
VF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6OlBl
bmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsK
KworICAgIEVYUEVDVF9UUlVFKHVwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQ
RUNUX0VRKDFVLCB1cGRhdGUucGFpbnRSZWN0cy5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKGV4
cGVjdGVkUGFpbnRSZWN0LCB1cGRhdGUucGFpbnRSZWN0c1swXSk7Cit9CisKK1RFU1QoUGFpbnRB
Z2dyZWdhdG9yLCBEaXNqb2ludFBhaW50QmVmb3JlU2Nyb2xsKQoreworICAgIFBhaW50QWdncmVn
YXRvciBncmVnOworCisgICAgSW50UmVjdCBwYWludFJlY3QoNCwgNCwgMTAsIDIpOworICAgIGdy
ZWcuaW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsKKworICAgIEludFJlY3Qgc2Nyb2xsUmVjdCgw
LCAwLCAyLCAxMCk7CisgICAgZ3JlZy5zY3JvbGxSZWN0KDIsIDAsIHNjcm9sbFJlY3QpOworCisg
ICAgRVhQRUNUX1RSVUUoZ3JlZy5oYXNQZW5kaW5nVXBkYXRlKCkpOworICAgIFBhaW50QWdncmVn
YXRvcjo6UGVuZGluZ1VwZGF0ZSB1cGRhdGU7CisgICAgZ3JlZy5wb3BQZW5kaW5nVXBkYXRlKCZ1
cGRhdGUpOworCisgICAgRVhQRUNUX0ZBTFNFKHVwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHkoKSk7
CisgICAgRVhQRUNUX0VRKDFVLCB1cGRhdGUucGFpbnRSZWN0cy5zaXplKCkpOworCisgICAgRVhQ
RUNUX0VRKHBhaW50UmVjdCwgdXBkYXRlLnBhaW50UmVjdHNbMF0pOworICAgIEVYUEVDVF9FUShz
Y3JvbGxSZWN0LCB1cGRhdGUuc2Nyb2xsUmVjdCk7Cit9CisKK1RFU1QoUGFpbnRBZ2dyZWdhdG9y
LCBEaXNqb2ludFBhaW50QWZ0ZXJTY3JvbGwpCit7CisgICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7
CisKKyAgICBJbnRSZWN0IHNjcm9sbFJlY3QoMCwgMCwgMiwgMTApOworICAgIGdyZWcuc2Nyb2xs
UmVjdCgyLCAwLCBzY3JvbGxSZWN0KTsKKworICAgIEludFJlY3QgcGFpbnRSZWN0KDQsIDQsIDEw
LCAyKTsKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7CisKKyAgICBFWFBFQ1Rf
VFJVRShncmVnLmhhc1BlbmRpbmdVcGRhdGUoKSk7CisgICAgUGFpbnRBZ2dyZWdhdG9yOjpQZW5k
aW5nVXBkYXRlIHVwZGF0ZTsKKyAgICBncmVnLnBvcFBlbmRpbmdVcGRhdGUoJnVwZGF0ZSk7CisK
KyAgICBFWFBFQ1RfRkFMU0UodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBF
Q1RfRVEoMVUsIHVwZGF0ZS5wYWludFJlY3RzLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEocGFp
bnRSZWN0LCB1cGRhdGUucGFpbnRSZWN0c1swXSk7CisgICAgRVhQRUNUX0VRKHNjcm9sbFJlY3Qs
IHVwZGF0ZS5zY3JvbGxSZWN0KTsKK30KKworVEVTVChQYWludEFnZ3JlZ2F0b3IsIENvbnRhaW5l
ZFBhaW50VHJpbW1lZEJ5U2Nyb2xsKQoreworICAgIFBhaW50QWdncmVnYXRvciBncmVnOworCisg
ICAgSW50UmVjdCBwYWludFJlY3QoNCwgNCwgNiwgNik7CisgICAgZ3JlZy5pbnZhbGlkYXRlUmVj
dChwYWludFJlY3QpOworCisgICAgSW50UmVjdCBzY3JvbGxSZWN0KDAsIDAsIDEwLCAxMCk7Cisg
ICAgZ3JlZy5zY3JvbGxSZWN0KDIsIDAsIHNjcm9sbFJlY3QpOworCisgICAgLy8gVGhlIHBhaW50
IHJlY3Qgc2hvdWxkIGhhdmUgYmVjb21lIG5hcnJvd2VyLgorICAgIEludFJlY3QgZXhwZWN0ZWRQ
YWludFJlY3QoNiwgNCwgNCwgNik7CisKKyAgICBFWFBFQ1RfVFJVRShncmVnLmhhc1BlbmRpbmdV
cGRhdGUoKSk7CisgICAgUGFpbnRBZ2dyZWdhdG9yOjpQZW5kaW5nVXBkYXRlIHVwZGF0ZTsKKyAg
ICBncmVnLnBvcFBlbmRpbmdVcGRhdGUoJnVwZGF0ZSk7CisKKyAgICBFWFBFQ1RfRkFMU0UodXBk
YXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEoMVUsIHVwZGF0ZS5wYWlu
dFJlY3RzLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRQYWludFJlY3QsIHVwZGF0
ZS5wYWludFJlY3RzWzBdKTsKKyAgICBFWFBFQ1RfRVEoc2Nyb2xsUmVjdCwgdXBkYXRlLnNjcm9s
bFJlY3QpOworfQorCitURVNUKFBhaW50QWdncmVnYXRvciwgQ29udGFpbmVkUGFpbnRFbGltaW5h
dGVkQnlTY3JvbGwpCit7CisgICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7CisKKyAgICBJbnRSZWN0
IHBhaW50UmVjdCg0LCA0LCA2LCA2KTsKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHBhaW50UmVj
dCk7CisKKyAgICBJbnRSZWN0IHNjcm9sbFJlY3QoMCwgMCwgMTAsIDEwKTsKKyAgICBncmVnLnNj
cm9sbFJlY3QoNiwgMCwgc2Nyb2xsUmVjdCk7CisKKyAgICBFWFBFQ1RfVFJVRShncmVnLmhhc1Bl
bmRpbmdVcGRhdGUoKSk7CisgICAgUGFpbnRBZ2dyZWdhdG9yOjpQZW5kaW5nVXBkYXRlIHVwZGF0
ZTsKKyAgICBncmVnLnBvcFBlbmRpbmdVcGRhdGUoJnVwZGF0ZSk7CisKKyAgICBFWFBFQ1RfRkFM
U0UodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh1cGRhdGUu
cGFpbnRSZWN0cy5pc0VtcHR5KCkpOworCisgICAgRVhQRUNUX0VRKHNjcm9sbFJlY3QsIHVwZGF0
ZS5zY3JvbGxSZWN0KTsKK30KKworVEVTVChQYWludEFnZ3JlZ2F0b3IsIENvbnRhaW5lZFBhaW50
QWZ0ZXJTY3JvbGxUcmltbWVkQnlTY3JvbGxEYW1hZ2UpCit7CisgICAgUGFpbnRBZ2dyZWdhdG9y
IGdyZWc7CisKKyAgICBJbnRSZWN0IHNjcm9sbFJlY3QoMCwgMCwgMTAsIDEwKTsKKyAgICBncmVn
LnNjcm9sbFJlY3QoNCwgMCwgc2Nyb2xsUmVjdCk7CisKKyAgICBJbnRSZWN0IHBhaW50UmVjdCgy
LCAwLCA0LCAxMCk7CisgICAgZ3JlZy5pbnZhbGlkYXRlUmVjdChwYWludFJlY3QpOworCisgICAg
SW50UmVjdCBleHBlY3RlZFNjcm9sbERhbWFnZSgwLCAwLCA0LCAxMCk7CisgICAgSW50UmVjdCBl
eHBlY3RlZFBhaW50UmVjdCg0LCAwLCAyLCAxMCk7CisKKyAgICBFWFBFQ1RfVFJVRShncmVnLmhh
c1BlbmRpbmdVcGRhdGUoKSk7CisgICAgUGFpbnRBZ2dyZWdhdG9yOjpQZW5kaW5nVXBkYXRlIHVw
ZGF0ZTsKKyAgICBncmVnLnBvcFBlbmRpbmdVcGRhdGUoJnVwZGF0ZSk7CisKKyAgICBFWFBFQ1Rf
RkFMU0UodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEoMVUsIHVw
ZGF0ZS5wYWludFJlY3RzLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEoc2Nyb2xsUmVjdCwgdXBk
YXRlLnNjcm9sbFJlY3QpOworICAgIEVYUEVDVF9FUShleHBlY3RlZFNjcm9sbERhbWFnZSwgdXBk
YXRlLmNhbGN1bGF0ZVNjcm9sbERhbWFnZSgpKTsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRQYWlu
dFJlY3QsIHVwZGF0ZS5wYWludFJlY3RzWzBdKTsKK30KKworVEVTVChQYWludEFnZ3JlZ2F0b3Is
IENvbnRhaW5lZFBhaW50QWZ0ZXJTY3JvbGxFbGltaW5hdGVkQnlTY3JvbGxEYW1hZ2UpCit7Cisg
ICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7CisKKyAgICBJbnRSZWN0IHNjcm9sbFJlY3QoMCwgMCwg
MTAsIDEwKTsKKyAgICBncmVnLnNjcm9sbFJlY3QoNCwgMCwgc2Nyb2xsUmVjdCk7CisKKyAgICBJ
bnRSZWN0IHBhaW50UmVjdCgyLCAwLCAyLCAxMCk7CisgICAgZ3JlZy5pbnZhbGlkYXRlUmVjdChw
YWludFJlY3QpOworCisgICAgSW50UmVjdCBleHBlY3RlZFNjcm9sbERhbWFnZSgwLCAwLCA0LCAx
MCk7CisKKyAgICBFWFBFQ1RfVFJVRShncmVnLmhhc1BlbmRpbmdVcGRhdGUoKSk7CisgICAgUGFp
bnRBZ2dyZWdhdG9yOjpQZW5kaW5nVXBkYXRlIHVwZGF0ZTsKKyAgICBncmVnLnBvcFBlbmRpbmdV
cGRhdGUoJnVwZGF0ZSk7CisKKyAgICBFWFBFQ1RfRkFMU0UodXBkYXRlLnNjcm9sbFJlY3QuaXNF
bXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh1cGRhdGUucGFpbnRSZWN0cy5pc0VtcHR5KCkpOwor
CisgICAgRVhQRUNUX0VRKHNjcm9sbFJlY3QsIHVwZGF0ZS5zY3JvbGxSZWN0KTsKKyAgICBFWFBF
Q1RfRVEoZXhwZWN0ZWRTY3JvbGxEYW1hZ2UsIHVwZGF0ZS5jYWxjdWxhdGVTY3JvbGxEYW1hZ2Uo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122319</attachid>
            <date>2012-01-12 15:15:36 -0800</date>
            <delta_ts>2012-01-31 10:21:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53715-20120112151535.patch</filename>
            <type>text/plain</type>
            <size>36324</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0ODUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDJmMmNkOTg0M2NiYzM1MzJmZmE0Zjk1NjE5MmI4MmYwNDU4MDBiMDMuLmVlY2M1MGNmNWY4ZmNj
ODQwMmUxYzE5NGVkMjJjYjVmZmE0NmQzYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDUgKzEsMzUgQEAKIDIwMTItMDEtMTIgIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3Jn
PgogCisgICAgICAgIFtjaHJvbWl1bV0gSW1wb3J0IFBhaW50QWdncmVnYXRvcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM3MTUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAg
ICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogc3JjL3BhaW50aW5nL1BhaW50QWdncmVnYXRv
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpjYWxjdWxhdGVBcmVhKToKKyAgICAgICAg
KFdlYktpdDo6c3VidHJhY3RJbnRlcnNlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpzaGFyZXNF
ZGdlKToKKyAgICAgICAgKFdlYktpdDo6UGFpbnRBZ2dyZWdhdG9yOjpQZW5kaW5nVXBkYXRlOjpQ
ZW5kaW5nVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UGFpbnRBZ2dyZWdhdG9yOjpQZW5kaW5n
VXBkYXRlOjp+UGVuZGluZ1VwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhaW50QWdncmVnYXRv
cjo6UGVuZGluZ1VwZGF0ZTo6Y2FsY3VsYXRlU2Nyb2xsRGFtYWdlKToKKyAgICAgICAgKFdlYktp
dDo6UGFpbnRBZ2dyZWdhdG9yOjpQZW5kaW5nVXBkYXRlOjpjYWxjdWxhdGVQYWludEJvdW5kcyk6
CisgICAgICAgIChXZWJLaXQ6OlBhaW50QWdncmVnYXRvcjo6aGFzUGVuZGluZ1VwZGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhaW50QWdncmVnYXRvcjo6Y2xlYXJQZW5kaW5nVXBkYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6UGFpbnRBZ2dyZWdhdG9yOjpwb3BQZW5kaW5nVXBkYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6UGFpbnRBZ2dyZWdhdG9yOjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OlBhaW50QWdncmVnYXRvcjo6c2Nyb2xsUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlBh
aW50QWdncmVnYXRvcjo6c2Nyb2xsUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UGFpbnRB
Z2dyZWdhdG9yOjpzaG91bGRJbnZhbGlkYXRlU2Nyb2xsUmVjdCk6CisgICAgICAgIChXZWJLaXQ6
OlBhaW50QWdncmVnYXRvcjo6aW52YWxpZGF0ZVNjcm9sbFJlY3QpOgorICAgICAgICAoV2ViS2l0
OjpQYWludEFnZ3JlZ2F0b3I6OmNvbWJpbmVQYWludFJlY3RzKToKKyAgICAgICAgKiBzcmMvcGFp
bnRpbmcvUGFpbnRBZ2dyZWdhdG9yLmg6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL1BhaW50QWdn
cmVnYXRvclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6VEVTVCk6CisKKzIwMTIt
MDEtMTIgIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtjaHJvbWl1
bV0gVHVybiBvZmYgRnJhbWVSYXRlQ29udHJvbGxlciB0aW1lc291cmNlIHdoZW4gaXQgaXMgbm90
IG5lZWRlZAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzYxNDkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IDJlNTlmOGMxZjY2MTc1MmRh
YjkyNWQxZDY1ZjYzMGE0Y2ZlNDJlODMuLjFlMDM5ZTIyMzcxMDJlMzBmYjkxOWFkMjJlYjkwYTQz
ODhjYTgyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTQ0Myw2ICs0NDMsOCBA
QAogICAgICAgICAgICAgICAgICdzcmMvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oJywKICAg
ICAgICAgICAgICAgICAnc3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL3BhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCcsCisgICAg
ICAgICAgICAgICAgJ3NyYy9wYWludGluZy9QYWludEFnZ3JlZ2F0b3IuaCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9wYWludGluZy9QYWludEFnZ3JlZ2F0b3IuY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL1BhZ2VPdmVybGF5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9QYWdlT3Zlcmxh
eS5oJywKICAgICAgICAgICAgICAgICAnc3JjL1BhZ2VPdmVybGF5TGlzdC5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggY2E4ZmIzOWQyNGQ5ZmQxYzJhNmQ4NmJkNzNlNzQ1
MTM4NTFhYjFmOS4uNGZjZmFlYTMxMTQ4NmIxMjkwMzE2NzQ4NmFjMTRkZTU3NDdhZWI2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC05Myw2ICs5Myw3IEBACiAgICAgICAgICAg
ICAndGVzdHMvS2V5Ym9hcmRUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvS1VSTFRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAnLAorICAgICAg
ICAgICAgJ3Rlc3RzL1BhaW50QWdncmVnYXRvclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9QT0RBcmVuYVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9QT0RJbnRlcnZhbFRyZWVU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUE9EUmVkQmxhY2tUcmVlVGVzdC5jcHAnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvcGFpbnRpbmcvUGFpbnRBZ2dy
ZWdhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL3BhaW50aW5nL1BhaW50QWdn
cmVnYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmY3ZTRjNzNjNGY2ZGJkMjQ4YWYxZjU4NThlMmJjYzgz
YmFhZDI0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL3Bh
aW50aW5nL1BhaW50QWdncmVnYXRvci5jcHAKQEAgLTAsMCArMSwzNzQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUGFpbnRBZ2dyZWdhdG9yLmgiCisKKyNpbmNsdWRlICJXZWJLaXQu
aCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisvLyBBTEdPUklUSE0gTk9URVMKKy8vCisvLyBXZSBhdHRlbXB0IHRvIG1haW50
YWluIGEgc2Nyb2xsIHJlY3QgaW4gdGhlIHByZXNlbmNlIG9mIGludmFsaWRhdGlvbnMgdGhhdAor
Ly8gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHNjcm9sbCByZWN0LiBJZiBhbiBpbnZhbGlkYXRp
b24gY3Jvc3NlcyBhIHNjcm9sbAorLy8gcmVjdCwgdGhlbiB3ZSBqdXN0IHRyZWF0IHRoZSBzY3Jv
bGwgcmVjdCBhcyBhbiBpbnZhbGlkYXRpb24gcmVjdC4KKy8vCisvLyBGb3IgaW52YWxpZGF0aW9u
cyBwZXJmb3JtZWQgcHJpb3IgdG8gc2Nyb2xsaW5nIGFuZCBjb250YWluZWQgd2l0aGluIHRoZQor
Ly8gc2Nyb2xsIHJlY3QsIHdlIG9mZnNldCB0aGUgaW52YWxpZGF0aW9uIHJlY3RzIHRvIGFjY291
bnQgZm9yIHRoZSBmYWN0IHRoYXQKKy8vIHRoZSBjb25zdW1lciB3aWxsIHBlcmZvcm0gc2Nyb2xs
aW5nIGJlZm9yZSBwYWludGluZy4KKy8vCisvLyBXZSBvbmx5IHN1cHBvcnQgc2Nyb2xsaW5nIGFs
b25nIG9uZSBheGlzIGF0IGEgdGltZS4gQSBkaWFnb25hbCBzY3JvbGwgd2lsbAorLy8gdGhlcmVm
b3JlIGJlIHRyZWF0ZWQgYXMgYW4gaW52YWxpZGF0aW9uLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCisvLyBJZiB0aGUgY29tYmluZWQgYXJlYSBvZiBwYWludCByZWN0cyBjb250YWluZWQgd2l0
aGluIHRoZSBzY3JvbGwgcmVjdCBncm93cworLy8gdG9vIGxhcmdlLCB0aGVuIHdlIG1pZ2h0IGFz
IHdlbGwganVzdCB0cmVhdCB0aGUgc2Nyb2xsIHJlY3QgYXMgYSBwYWludCByZWN0LgorLy8gVGhp
cyBjb25zdGFudCBzZXRzIHRoZSBtYXggcmF0aW8gb2YgcGFpbnQgcmVjdCBhcmVhIHRvIHNjcm9s
bCByZWN0IGFyZWEgdGhhdAorLy8gd2Ugd2lsbCB0b2xlcmF0ZSBiZWZvcmUgZG9ncmFkaW5nIHRo
ZSBzY3JvbGwgaW50byBhIHJlcGFpbnQuCitzdGF0aWMgY29uc3QgZmxvYXQgbWF4UmVkdW5kYW50
UGFpbnRUb1Njcm9sbEFyZWEgPSAwLjhmOworCisvLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFp
bnQgcmVjdHMuIElmIHdlIGV4Y2VlZCB0aGlzIGxpbWl0LCB0aGVuIHdlJ2xsCisvLyBzdGFydCBj
b21iaW5pbmcgcGFpbnQgcmVjdHMgKHNlZSBDb21iaW5lUGFpbnRSZWN0cykuIFRoaXMgbGltaXRp
bmcgaXMKKy8vIGltcG9ydGFudCBzaW5jZSB0aGUgV2ViS2l0IGNvZGUgYXNzb2NpYXRlZCB3aXRo
IGRlY2lkaW5nIHdoYXQgdG8gcGFpbnQgZ2l2ZW4KKy8vIGEgcGFpbnQgcmVjdCBjYW4gYmUgc2ln
bmlmaWNhbnQuCitzdGF0aWMgY29uc3Qgc2l6ZV90IG1heFBhaW50UmVjdHMgPSA1OworCisvLyBJ
ZiB0aGUgY29tYmluZWQgYXJlYSBvZiBwYWludCByZWN0cyBkaXZpZGVkIGJ5IHRoZSBhcmVhIG9m
IHRoZSB1bmlvbiBvZiBhbGwKKy8vIHBhaW50IHJlY3RzIGV4Y2VlZHMgdGhpcyB0aHJlc2hvbGQs
IHRoZW4gd2Ugd2lsbCBjb21iaW5lIHRoZSBwYWludCByZWN0cy4KK3N0YXRpYyBjb25zdCBmbG9h
dCBtYXhQYWludFJlY3RzQXJlYVJhdGlvID0gMC43ZjsKKworc3RhdGljIGludCBjYWxjdWxhdGVB
cmVhKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHJlY3Quc2l6ZSgpLndpZHRo
KCkgKiByZWN0LnNpemUoKS5oZWlnaHQoKTsKK30KKworLy8gU3VidHJhY3RzIG91dCB0aGUgaW50
ZXJzZWN0aW9uIG9mIHxhfCBhbmQgfGJ8IGZyb20gfGF8LCBhc3N1bWluZyB8YnwgZnVsbHkKKy8v
IG92ZXJsYXBzIHdpdGggfGF8IGluIGVpdGhlciB0aGUgeC0gb3IgeS1kaXJlY3Rpb24uIElmIHRo
ZXJlIGlzIG5vIGZ1bGwKKy8vIG92ZXJsYXAsIHRoZW4gfGF8IGlzIHJldHVybmVkLgorc3RhdGlj
IEludFJlY3Qgc3VidHJhY3RJbnRlcnNlY3Rpb24oY29uc3QgSW50UmVjdCYgYSwgY29uc3QgSW50
UmVjdCYgYikKK3sKKyAgICAvLyBib3VuZGFyeSBjYXNlczoKKyAgICBpZiAoIWEuaW50ZXJzZWN0
cyhiKSkKKyAgICAgICAgcmV0dXJuIGE7CisgICAgaWYgKGIuY29udGFpbnMoYSkpCisgICAgICAg
IHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBpbnQgcnggPSBhLngoKTsKKyAgICBpbnQgcnkgPSBh
LnkoKTsKKyAgICBpbnQgcnIgPSBhLm1heFgoKTsKKyAgICBpbnQgcmIgPSBhLm1heFkoKTsKKwor
ICAgIGlmIChiLnkoKSA8PSBhLnkoKSAmJiBiLm1heFkoKSA+PSBhLm1heFkoKSkgeworICAgICAg
ICAvLyBjb21wbGV0ZSBpbnRlcnNlY3Rpb24gaW4gdGhlIHktZGlyZWN0aW9uCisgICAgICAgIGlm
IChiLngoKSA8PSBhLngoKSkKKyAgICAgICAgICAgIHJ4ID0gYi5tYXhYKCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJyID0gYi54KCk7CisgICAgfSBlbHNlIGlmIChiLngoKSA8PSBhLngo
KSAmJiBiLm1heFgoKSA+PSBhLm1heFgoKSkgeworICAgICAgICAvLyBjb21wbGV0ZSBpbnRlcnNl
Y3Rpb24gaW4gdGhlIHgtZGlyZWN0aW9uCisgICAgICAgIGlmIChiLnkoKSA8PSBhLnkoKSkKKyAg
ICAgICAgICAgIHJ5ID0gYi5tYXhZKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJiID0g
Yi55KCk7CisgICAgfQorICAgIHJldHVybiBJbnRSZWN0KHJ4LCByeSwgcnIgLSByeCwgcmIgLSBy
eSk7Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB8YXwgYW5kIHxifCBzaGFyZSBhbiBlbnRpcmUg
ZWRnZSAoaS5lLiwgc2FtZSB3aWR0aCBvciBzYW1lCisvLyBoZWlnaHQpLCBhbmQgdGhlIHJlY3Rh
bmdsZXMgZG8gbm90IG92ZXJsYXAuCitzdGF0aWMgYm9vbCBzaGFyZXNFZGdlKGNvbnN0IEludFJl
Y3QmIGEsIGNvbnN0IEludFJlY3QmIGIpCit7CisgICAgcmV0dXJuIChhLnkoKSA9PSBiLnkoKSAm
JiBhLmhlaWdodCgpID09IGIuaGVpZ2h0KCkgJiYgKGEueCgpID09IGIubWF4WCgpIHx8IGEubWF4
WCgpID09IGIueCgpKSkKKyAgICAgICAgfHwgKGEueCgpID09IGIueCgpICYmIGEud2lkdGgoKSA9
PSBiLndpZHRoKCkgJiYgKGEueSgpID09IGIubWF4WSgpIHx8IGEubWF4WSgpID09IGIueSgpKSk7
Cit9CisKK1BhaW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0ZTo6UGVuZGluZ1VwZGF0ZSgpCit7
Cit9CisKK1BhaW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0ZTo6flBlbmRpbmdVcGRhdGUoKQor
eworfQorCitJbnRSZWN0IFBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0ZTo6Y2FsY3VsYXRl
U2Nyb2xsRGFtYWdlKCkgY29uc3QKK3sKKyAgICAvLyBTaG91bGQgb25seSBiZSBzY3JvbGxpbmcg
aW4gb25lIGRpcmVjdGlvbiBhdCBhIHRpbWUuCisgICAgQVNTRVJUKCEoc2Nyb2xsRGVsdGEueCgp
ICYmIHNjcm9sbERlbHRhLnkoKSkpOworCisgICAgSW50UmVjdCBkYW1hZ2VkUmVjdDsKKworICAg
IC8vIENvbXB1dGUgdGhlIHJlZ2lvbiB3ZSB3aWxsIGV4cG9zZSBieSBzY3JvbGxpbmcsIGFuZCBw
YWludCB0aGF0IGludG8gYQorICAgIC8vIHNoYXJlZCBtZW1vcnkgc2VjdGlvbi4KKyAgICBpZiAo
c2Nyb2xsRGVsdGEueCgpKSB7CisgICAgICAgIGludCBkeCA9IHNjcm9sbERlbHRhLngoKTsKKyAg
ICAgICAgZGFtYWdlZFJlY3Quc2V0WShzY3JvbGxSZWN0LnkoKSk7CisgICAgICAgIGRhbWFnZWRS
ZWN0LnNldEhlaWdodChzY3JvbGxSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgaWYgKGR4ID4gMCkg
eworICAgICAgICAgICAgZGFtYWdlZFJlY3Quc2V0WChzY3JvbGxSZWN0LngoKSk7CisgICAgICAg
ICAgICBkYW1hZ2VkUmVjdC5zZXRXaWR0aChkeCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBkYW1hZ2VkUmVjdC5zZXRYKHNjcm9sbFJlY3QubWF4WCgpICsgZHgpOworICAgICAgICAg
ICAgZGFtYWdlZFJlY3Quc2V0V2lkdGgoLWR4KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGludCBkeSA9IHNjcm9sbERlbHRhLnkoKTsKKyAgICAgICAgZGFtYWdlZFJlY3Quc2V0
WChzY3JvbGxSZWN0LngoKSk7CisgICAgICAgIGRhbWFnZWRSZWN0LnNldFdpZHRoKHNjcm9sbFJl
Y3Qud2lkdGgoKSk7CisgICAgICAgIGlmIChkeSA+IDApIHsKKyAgICAgICAgICAgIGRhbWFnZWRS
ZWN0LnNldFkoc2Nyb2xsUmVjdC55KCkpOworICAgICAgICAgICAgZGFtYWdlZFJlY3Quc2V0SGVp
Z2h0KGR5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRhbWFnZWRSZWN0LnNldFko
c2Nyb2xsUmVjdC5tYXhZKCkgKyBkeSk7CisgICAgICAgICAgICBkYW1hZ2VkUmVjdC5zZXRIZWln
aHQoLWR5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEluIGNhc2UgdGhlIHNjcm9sbCBv
ZmZzZXQgZXhjZWVkcyB0aGUgd2lkdGgvaGVpZ2h0IG9mIHRoZSBzY3JvbGwgcmVjdAorICAgIHJl
dHVybiBpbnRlcnNlY3Rpb24oc2Nyb2xsUmVjdCwgZGFtYWdlZFJlY3QpOworfQorCitJbnRSZWN0
IFBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0ZTo6Y2FsY3VsYXRlUGFpbnRCb3VuZHMoKSBj
b25zdAoreworICAgIEludFJlY3QgYm91bmRzOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cGFpbnRSZWN0cy5zaXplKCk7ICsraSkKKyAgICAgICAgYm91bmRzLnVuaXRlKHBhaW50UmVjdHNb
aV0pOworICAgIHJldHVybiBib3VuZHM7Cit9CisKK2Jvb2wgUGFpbnRBZ2dyZWdhdG9yOjpoYXNQ
ZW5kaW5nVXBkYXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fdXBkYXRlLnNjcm9sbFJlY3Qu
aXNFbXB0eSgpIHx8ICFtX3VwZGF0ZS5wYWludFJlY3RzLmlzRW1wdHkoKTsKK30KKwordm9pZCBQ
YWludEFnZ3JlZ2F0b3I6OmNsZWFyUGVuZGluZ1VwZGF0ZSgpCit7CisgICAgbV91cGRhdGUgPSBQ
ZW5kaW5nVXBkYXRlKCk7Cit9CisKK3ZvaWQgUGFpbnRBZ2dyZWdhdG9yOjpwb3BQZW5kaW5nVXBk
YXRlKFBlbmRpbmdVcGRhdGUqIHVwZGF0ZSkKK3sKKyAgICAvLyBDb21iaW5lIHBhaW50IHJlY3Rz
IGlmIHRoZWlyIGNvbWJpbmVkIGFyZWEgaXMgbm90IHN1ZmZpY2llbnRseSBsZXNzIHRoYW4KKyAg
ICAvLyB0aGUgYXJlYSBvZiB0aGUgdW5pb24gb2YgYWxsIHBhaW50IHJlY3RzLiBXZSBza2lwIHRo
aXMgaWYgdGhlcmUgaXMgYQorICAgIC8vIHNjcm9sbCByZWN0IHNpbmNlIHNjcm9sbGluZyBiZW5l
Zml0cyBmcm9tIHNtYWxsZXIgcGFpbnQgcmVjdHMuCisgICAgaWYgKG1fdXBkYXRlLnNjcm9sbFJl
Y3QuaXNFbXB0eSgpICYmIG1fdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpID4gMSkgeworICAgICAg
ICBpbnQgcGFpbnRBcmVhID0gMDsKKyAgICAgICAgSW50UmVjdCB1bmlvblJlY3Q7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91cGRhdGUucGFpbnRSZWN0cy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgcGFpbnRBcmVhICs9IGNhbGN1bGF0ZUFyZWEobV91cGRhdGUucGFpbnRS
ZWN0c1tpXSk7CisgICAgICAgICAgICB1bmlvblJlY3QudW5pdGUobV91cGRhdGUucGFpbnRSZWN0
c1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgaW50IHVuaW9uQXJlYSA9IGNhbGN1bGF0ZUFyZWEo
dW5pb25SZWN0KTsKKyAgICAgICAgaWYgKGZsb2F0KHBhaW50QXJlYSkgLyBmbG9hdCh1bmlvbkFy
ZWEpID4gbWF4UGFpbnRSZWN0c0FyZWFSYXRpbykKKyAgICAgICAgICAgIGNvbWJpbmVQYWludFJl
Y3RzKCk7CisgICAgfQorICAgICp1cGRhdGUgPSBtX3VwZGF0ZTsKKyAgICBjbGVhclBlbmRpbmdV
cGRhdGUoKTsKK30KKwordm9pZCBQYWludEFnZ3JlZ2F0b3I6OmludmFsaWRhdGVSZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8gQ29tYmluZSBvdmVybGFwcGluZyBwYWludHMgdXNp
bmcgc21hbGxlc3QgYm91bmRpbmcgYm94LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91
cGRhdGUucGFpbnRSZWN0cy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBJbnRSZWN0JiBl
eGlzdGluZ1JlY3QgPSBtX3VwZGF0ZS5wYWludFJlY3RzW2ldOworICAgICAgICBpZiAoZXhpc3Rp
bmdSZWN0LmNvbnRhaW5zKHJlY3QpKSAvLyBPcHRpbWl6ZSBvdXQgcmVkdW5kYW5jeS4KKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHJlY3QuaW50ZXJzZWN0cyhleGlzdGluZ1JlY3Qp
IHx8IHNoYXJlc0VkZ2UocmVjdCwgZXhpc3RpbmdSZWN0KSkgeworICAgICAgICAgICAgLy8gUmUt
aW52YWxpZGF0ZSBpbiBjYXNlIHRoZSB1bmlvbiBpbnRlcnNlY3RzIG90aGVyIHBhaW50IHJlY3Rz
LgorICAgICAgICAgICAgSW50UmVjdCBjb21iaW5lZFJlY3QgPSB1bmlvblJlY3QoZXhpc3RpbmdS
ZWN0LCByZWN0KTsKKyAgICAgICAgICAgIG1fdXBkYXRlLnBhaW50UmVjdHMucmVtb3ZlKGkpOwor
ICAgICAgICAgICAgaW52YWxpZGF0ZVJlY3QoY29tYmluZWRSZWN0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEFkZCBhIG5vbi1vdmVybGFwcGluZyBw
YWludC4KKyAgICBtX3VwZGF0ZS5wYWludFJlY3RzLmFwcGVuZChyZWN0KTsKKworICAgIC8vIElm
IHRoZSBuZXcgcGFpbnQgb3ZlcmxhcHMgd2l0aCBhIHNjcm9sbCwgdGhlbiBpdCBmb3JjZXMgYW4g
aW52YWxpZGF0aW9uIG9mCisgICAgLy8gdGhlIHNjcm9sbC4gSWYgdGhlIG5ldyBwYWludCBpcyBj
b250YWluZWQgYnkgYSBzY3JvbGwsIHRoZW4gdHJpbSBvZmYgdGhlCisgICAgLy8gc2Nyb2xsIGRh
bWFnZSB0byBhdm9pZCByZWR1bmRhbnQgcGFpbnRpbmcuCisgICAgaWYgKCFtX3VwZGF0ZS5zY3Jv
bGxSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoc2hvdWxkSW52YWxpZGF0ZVNjcm9sbFJl
Y3QocmVjdCkpCisgICAgICAgICAgICBpbnZhbGlkYXRlU2Nyb2xsUmVjdCgpOworICAgICAgICBl
bHNlIGlmIChtX3VwZGF0ZS5zY3JvbGxSZWN0LmNvbnRhaW5zKHJlY3QpKSB7CisgICAgICAgICAg
ICBtX3VwZGF0ZS5wYWludFJlY3RzW21fdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpIC0gMV0gPQor
ICAgICAgICAgICAgICAgIHN1YnRyYWN0SW50ZXJzZWN0aW9uKHJlY3QsIG1fdXBkYXRlLmNhbGN1
bGF0ZVNjcm9sbERhbWFnZSgpKTsKKyAgICAgICAgICAgIGlmIChtX3VwZGF0ZS5wYWludFJlY3Rz
W21fdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpIC0gMV0uaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgIG1fdXBkYXRlLnBhaW50UmVjdHMucmVtb3ZlKG1fdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgp
IC0gMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV91cGRhdGUucGFpbnRSZWN0cy5z
aXplKCkgPiBtYXhQYWludFJlY3RzKQorICAgICAgICBjb21iaW5lUGFpbnRSZWN0cygpOworCisg
ICAgLy8gVHJhY2sgaG93IGxhcmdlIHRoZSBwYWludFJlY3RzIHZlY3RvciBncm93cyBkdXJpbmcg
YW4gaW52YWxpZGF0aW9uCisgICAgLy8gc2VxdWVuY2UuIE5vdGU6IEEgc3Vic2VxdWVudCBpbnZh
bGlkYXRpb24gbWF5IGVuZCB1cCBiZWluZyBjb21iaW5lZAorICAgIC8vIHdpdGggYWxsIGV4aXN0
aW5nIHBhaW50cywgd2hpY2ggbWVhbnMgdGhhdCB0cmFja2luZyB0aGUgc2l6ZSBvZgorICAgIC8v
IHBhaW50UmVjdHMgYXQgdGhlIHRpbWUgd2hlbiBwb3BQZW5kaW5nVXBkYXRlKCkgaXMgY2FsbGVk
IG1heSBtYXNrCisgICAgLy8gY2VydGFpbiBwZXJmb3JtYW5jZSBwcm9ibGVtcy4KKyAgICB3ZWJL
aXRQbGF0Zm9ybVN1cHBvcnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJNUEFyY2guUldfSW50
ZXJtZWRpYXRlUGFpbnRSZWN0Q291bnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV91cGRhdGUucGFpbnRSZWN0cy5zaXplKCksIDEsIDEwMCwgNTApOworfQor
Cit2b2lkIFBhaW50QWdncmVnYXRvcjo6c2Nyb2xsUmVjdChpbnQgZHgsIGludCBkeSwgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgLy8gV2Ugb25seSBzdXBwb3J0IHNjcm9sbGluZyBh
bG9uZyBvbmUgYXhpcyBhdCBhIHRpbWUuCisgICAgaWYgKGR4ICYmIGR5KSB7CisgICAgICAgIGlu
dmFsaWRhdGVSZWN0KGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IFdlIGNhbiBvbmx5IHNjcm9sbCBvbmUgcmVjdCBhdCBhIHRpbWUuCisgICAgaWYgKCFtX3VwZGF0
ZS5zY3JvbGxSZWN0LmlzRW1wdHkoKSAmJiBtX3VwZGF0ZS5zY3JvbGxSZWN0ICE9IGNsaXBSZWN0
KSB7CisgICAgICAgIGludmFsaWRhdGVSZWN0KGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIEFnYWluLCB3ZSBvbmx5IHN1cHBvcnQgc2Nyb2xsaW5nIGFsb25nIG9u
ZSBheGlzIGF0IGEgdGltZS4gTWFrZSBzdXJlIHRoaXMKKyAgICAvLyB1cGRhdGUgZG9lc24ndCBz
Y3JvbGwgb24gYSBkaWZmZXJlbnQgYXhpcyB0aGFuIGFueSBleGlzdGluZyBvbmUuCisgICAgaWYg
KChkeCAmJiBtX3VwZGF0ZS5zY3JvbGxEZWx0YS55KCkpIHx8IChkeSAmJiBtX3VwZGF0ZS5zY3Jv
bGxEZWx0YS54KCkpKSB7CisgICAgICAgIGludmFsaWRhdGVSZWN0KGNsaXBSZWN0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoZSBzY3JvbGwgcmVjdCBpcyBuZXcgb3IgaXNu
J3QgY2hhbmdpbmcgKHRob3VnaCB0aGUgc2Nyb2xsIGFtb3VudCBtYXkKKyAgICAvLyBiZSBjaGFu
Z2luZykuCisgICAgbV91cGRhdGUuc2Nyb2xsUmVjdCA9IGNsaXBSZWN0OworICAgIG1fdXBkYXRl
LnNjcm9sbERlbHRhLm1vdmUoZHgsIGR5KTsKKworICAgIC8vIFdlIG1pZ2h0IGhhdmUganVzdCB3
aXBlZCBvdXQgYSBwcmUtZXhpc3Rpbmcgc2Nyb2xsLgorICAgIGlmIChtX3VwZGF0ZS5zY3JvbGxE
ZWx0YSA9PSBJbnRQb2ludCgpKSB7CisgICAgICAgIG1fdXBkYXRlLnNjcm9sbFJlY3QgPSBJbnRS
ZWN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBZGp1c3QgYW55IGNvbnRh
aW5lZCBwYWludCByZWN0cyBhbmQgY2hlY2sgZm9yIGFueSBvdmVybGFwcGluZyBwYWludHMuCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3VwZGF0ZS5wYWludFJlY3RzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmIChtX3VwZGF0ZS5zY3JvbGxSZWN0LmNvbnRhaW5zKG1fdXBkYXRlLnBh
aW50UmVjdHNbaV0pKSB7CisgICAgICAgICAgICBtX3VwZGF0ZS5wYWludFJlY3RzW2ldID0gc2Ny
b2xsUGFpbnRSZWN0KG1fdXBkYXRlLnBhaW50UmVjdHNbaV0sIGR4LCBkeSk7CisgICAgICAgICAg
ICAvLyBUaGUgcmVjdCBtYXkgaGF2ZSBiZWVuIHNjcm9sbGVkIG91dCBvZiB2aWV3LgorICAgICAg
ICAgICAgaWYgKG1fdXBkYXRlLnBhaW50UmVjdHNbaV0uaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgbV91cGRhdGUucGFpbnRSZWN0cy5yZW1vdmUoaSk7CisgICAgICAgICAgICAgICAgaS0t
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1fdXBkYXRlLnNjcm9sbFJlY3Qu
aW50ZXJzZWN0cyhtX3VwZGF0ZS5wYWludFJlY3RzW2ldKSkgeworICAgICAgICAgICAgaW52YWxp
ZGF0ZVNjcm9sbFJlY3QoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIElmIHRoZSBuZXcgc2Nyb2xsIG92ZXJsYXBzIHRvbyBtdWNoIHdpdGggY29udGFp
bmVkIHBhaW50IHJlY3RzLCB0aGVuIGZvcmNlCisgICAgLy8gYW4gaW52YWxpZGF0aW9uIG9mIHRo
ZSBzY3JvbGwuCisgICAgaWYgKHNob3VsZEludmFsaWRhdGVTY3JvbGxSZWN0KEludFJlY3QoKSkp
CisgICAgICAgIGludmFsaWRhdGVTY3JvbGxSZWN0KCk7Cit9CisKK0ludFJlY3QgUGFpbnRBZ2dy
ZWdhdG9yOjpzY3JvbGxQYWludFJlY3QoY29uc3QgSW50UmVjdCYgcGFpbnRSZWN0LCBpbnQgZHgs
IGludCBkeSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlc3VsdCA9IHBhaW50UmVjdDsKKworICAg
IHJlc3VsdC5tb3ZlKGR4LCBkeSk7CisgICAgcmVzdWx0ID0gaW50ZXJzZWN0aW9uKG1fdXBkYXRl
LnNjcm9sbFJlY3QsIHJlc3VsdCk7CisKKyAgICAvLyBTdWJ0cmFjdCBvdXQgdGhlIHNjcm9sbCBk
YW1hZ2UgcmVjdCB0byBhdm9pZCByZWR1bmRhbnQgcGFpbnRpbmcuCisgICAgcmV0dXJuIHN1YnRy
YWN0SW50ZXJzZWN0aW9uKHJlc3VsdCwgbV91cGRhdGUuY2FsY3VsYXRlU2Nyb2xsRGFtYWdlKCkp
OworfQorCitib29sIFBhaW50QWdncmVnYXRvcjo6c2hvdWxkSW52YWxpZGF0ZVNjcm9sbFJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKSB7
CisgICAgICAgIGlmICghbV91cGRhdGUuc2Nyb2xsUmVjdC5pbnRlcnNlY3RzKHJlY3QpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghbV91cGRhdGUuc2Nyb2xsUmVj
dC5jb250YWlucyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IC8vIENoZWNrIGlmIHRoZSBjb21iaW5lZCBhcmVhIG9mIGFsbCBjb250YWluZWQgcGFpbnQgcmVj
dHMgcGx1cyB0aGlzIG5ldworICAgIC8vIHJlY3QgY29tZXMgdG9vIGNsb3NlIHRvIHRoZSBhcmVh
IG9mIHRoZSBzY3JvbGxSZWN0LiBJZiBzbywgdGhlbiB3ZQorICAgIC8vIG1pZ2h0IGFzIHdlbGwg
aW52YWxpZGF0ZSB0aGUgc2Nyb2xsIHJlY3QuCisKKyAgICBpbnQgcGFpbnRBcmVhID0gY2FsY3Vs
YXRlQXJlYShyZWN0KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdXBkYXRlLnBhaW50
UmVjdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgSW50UmVjdCYgZXhpc3RpbmdSZWN0
ID0gbV91cGRhdGUucGFpbnRSZWN0c1tpXTsKKyAgICAgICAgaWYgKG1fdXBkYXRlLnNjcm9sbFJl
Y3QuY29udGFpbnMoZXhpc3RpbmdSZWN0KSkKKyAgICAgICAgICAgIHBhaW50QXJlYSArPSBjYWxj
dWxhdGVBcmVhKGV4aXN0aW5nUmVjdCk7CisgICAgfQorICAgIGludCBzY3JvbGxBcmVhID0gY2Fs
Y3VsYXRlQXJlYShtX3VwZGF0ZS5zY3JvbGxSZWN0KTsKKyAgICBpZiAoZmxvYXQocGFpbnRBcmVh
KSAvIGZsb2F0KHNjcm9sbEFyZWEpID4gbWF4UmVkdW5kYW50UGFpbnRUb1Njcm9sbEFyZWEpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBhaW50
QWdncmVnYXRvcjo6aW52YWxpZGF0ZVNjcm9sbFJlY3QoKQoreworICAgIEludFJlY3Qgc2Nyb2xs
UmVjdCA9IG1fdXBkYXRlLnNjcm9sbFJlY3Q7CisgICAgbV91cGRhdGUuc2Nyb2xsUmVjdCA9IElu
dFJlY3QoKTsKKyAgICBtX3VwZGF0ZS5zY3JvbGxEZWx0YSA9IEludFBvaW50KCk7CisgICAgaW52
YWxpZGF0ZVJlY3Qoc2Nyb2xsUmVjdCk7Cit9CisKK3ZvaWQgUGFpbnRBZ2dyZWdhdG9yOjpjb21i
aW5lUGFpbnRSZWN0cygpCit7CisgICAgLy8gQ29tYmluZSBwYWludCByZWN0cyBkbyB0byBhdCBt
b3N0IHR3byByZWN0czogb25lIGluc2lkZSB0aGUgc2Nyb2xsUmVjdAorICAgIC8vIGFuZCBvbmUg
b3V0c2lkZSB0aGUgc2Nyb2xsUmVjdC4gSWYgdGhlcmUgaXMgbm8gc2Nyb2xsUmVjdCwgdGhlbiBq
dXN0CisgICAgLy8gdXNlIHRoZSBzbWFsbGVzdCBib3VuZGluZyBib3ggZm9yIGFsbCBwYWludCBy
ZWN0cy4KKyAgICAvLworICAgIC8vIE5PVEU6IFRoaXMgaXMgYSBmYWlybHkgc2ltcGxlIGFsZ29y
aXRobS4gV2UgY291bGQgZ2V0IGZhbmNpZXIgYnkgb25seQorICAgIC8vIGNvbWJpbmluZyB0d28g
cmVjdHMgdG8gZ2V0IHVzIHVuZGVyIHRoZSBtYXhQYWludFJlY3RzIGxpbWl0LCBidXQgaWYgd2UK
KyAgICAvLyByZWFjaCB0aGlzIG1ldGhvZCB0aGVuIGl0IG1lYW5zIHdlJ3JlIGhpdHRpbmcgYSBy
YXJlIGNhc2UsIHNvIHRoZXJlJ3Mgbm8KKyAgICAvLyBuZWVkIHRvIG92ZXItb3B0aW1pemUgaXQu
CisgICAgLy8KKyAgICBpZiAobV91cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgSW50UmVjdCBib3VuZHMgPSBtX3VwZGF0ZS5jYWxjdWxhdGVQYWludEJvdW5kcygpOworICAg
ICAgICBtX3VwZGF0ZS5wYWludFJlY3RzLmNsZWFyKCk7CisgICAgICAgIG1fdXBkYXRlLnBhaW50
UmVjdHMuYXBwZW5kKGJvdW5kcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSW50UmVjdCBpbm5l
ciwgb3V0ZXI7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91cGRhdGUucGFpbnRS
ZWN0cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgZXhpc3RpbmdS
ZWN0ID0gbV91cGRhdGUucGFpbnRSZWN0c1tpXTsKKyAgICAgICAgICAgIGlmIChtX3VwZGF0ZS5z
Y3JvbGxSZWN0LmNvbnRhaW5zKGV4aXN0aW5nUmVjdCkpCisgICAgICAgICAgICAgICAgaW5uZXIu
dW5pdGUoZXhpc3RpbmdSZWN0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBv
dXRlci51bml0ZShleGlzdGluZ1JlY3QpOworICAgICAgICB9CisgICAgICAgIG1fdXBkYXRlLnBh
aW50UmVjdHMuY2xlYXIoKTsKKyAgICAgICAgbV91cGRhdGUucGFpbnRSZWN0cy5hcHBlbmQoaW5u
ZXIpOworICAgICAgICBtX3VwZGF0ZS5wYWludFJlY3RzLmFwcGVuZChvdXRlcik7CisgICAgfQor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL3BhaW50aW5nL1BhaW50QWdncmVnYXRvci5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvcGFpbnRpbmcvUGFpbnRBZ2dyZWdhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjA4M2U0MDE3
NWE5MWFlMDg2MzVhY2IwMGMzYTI1ZmQ5NzMzMzJiNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL3BhaW50aW5nL1BhaW50QWdncmVnYXRvci5oCkBAIC0wLDAg
KzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFBhaW50QWdncmVnYXRvcl9oCisjZGVmaW5lIFBhaW50QWdncmVnYXRv
cl9oCisKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBUaGlzIGNsYXNz
IGlzIHJlc3BvbnNpYmxlIGZvciBhZ2dyZWdhdGluZyBtdWx0aXBsZSBpbnZhbGlkYXRpb24gYW5k
IHNjcm9sbAorLy8gY29tbWFuZHMgdG8gcHJvZHVjZSBhIHNjcm9sbCBhbmQgcmVwYWludCBzZXF1
ZW5jZS4KK2NsYXNzIFBhaW50QWdncmVnYXRvciB7CitwdWJsaWM6CisgICAgLy8gVGhpcyBzdHJ1
Y3R1cmUgZGVzY3JpYmVzIGFuIGFnZ3JlZ2F0aW9uIG9mIGludmFsaWRhdGVSZWN0IGFuZCBzY3Jv
bGxSZWN0CisgICAgLy8gY2FsbHMuIElmIHxzY3JvbGxSZWN0fCBpcyBub24tZW1wdHksIHRoZW4g
dGhhdCByZWN0IHNob3VsZCBiZSBzY3JvbGxlZAorICAgIC8vIGJ5IHRoZSBhbW91bnQgc3BlY2lm
aWVkIGJ5IHxzY3JvbGxEZWx0YXwuIElmIHxwYWludFJlY3RzfCBpcyBub24tZW1wdHksCisgICAg
Ly8gdGhlbiB0aG9zZSByZWN0cyBzaG91bGQgYmUgcmVwYWludGVkLiBJZiB8c2Nyb2xsUmVjdHwg
YW5kIHxwYWludFJlY3RzfAorICAgIC8vIGFyZSBub24tZW1wdHksIHRoZW4gc2Nyb2xsaW5nIHNo
b3VsZCBiZSBwZXJmb3JtZWQgYmVmb3JlIHJlcGFpbnRpbmcuCisgICAgLy8gfHNjcm9sbERlbHRh
fCBjYW4gb25seSBzcGVjaWZ5IHNjcm9sbGluZyBpbiBvbmUgZGlyZWN0aW9uIChpLmUuLCB0aGUg
eAorICAgIC8vIGFuZCB5IG1lbWJlcnMgY2Fubm90IGJvdGggYmUgbm9uLXplcm8pLgorICAgIHN0
cnVjdCBQZW5kaW5nVXBkYXRlIHsKKyAgICAgICAgUGVuZGluZ1VwZGF0ZSgpOworICAgICAgICB+
UGVuZGluZ1VwZGF0ZSgpOworCisgICAgICAgIC8vIFJldHVybnMgdGhlIHJlY3QgZGFtYWdlZCBi
eSBzY3JvbGxpbmcgd2l0aGluIHxzY3JvbGxSZWN0fCBieQorICAgICAgICAvLyB8c2Nyb2xsRGVs
dGF8LiBUaGlzIHJlY3QgbXVzdCBiZSByZXBhaW50ZWQuCisgICAgICAgIFdlYkNvcmU6OkludFJl
Y3QgY2FsY3VsYXRlU2Nyb2xsRGFtYWdlKCkgY29uc3Q7CisKKyAgICAgICAgLy8gUmV0dXJucyB0
aGUgc21hbGxlc3QgcmVjdCBjb250YWluaW5nIGFsbCBwYWludCByZWN0cy4KKyAgICAgICAgV2Vi
Q29yZTo6SW50UmVjdCBjYWxjdWxhdGVQYWludEJvdW5kcygpIGNvbnN0OworCisgICAgICAgIFdl
YkNvcmU6OkludFBvaW50IHNjcm9sbERlbHRhOworICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHNj
cm9sbFJlY3Q7CisgICAgICAgIFdURjo6VmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IHBhaW50UmVj
dHM7CisgICAgfTsKKworICAgIC8vIFRoZXJlIGlzIGEgUGVuZGluZ1VwZGF0ZSBpZiBpbnZhbGlk
YXRlUmVjdCBvciBzY3JvbGxSZWN0IHdlcmUgY2FsbGVkIGFuZAorICAgIC8vIENsZWFyUGVuZGlu
Z1VwZGF0ZSB3YXMgbm90IGNhbGxlZC4KKyAgICBib29sIGhhc1BlbmRpbmdVcGRhdGUoKSBjb25z
dDsKKyAgICB2b2lkIGNsZWFyUGVuZGluZ1VwZGF0ZSgpOworCisgICAgLy8gRmlsbHMgfHVwZGF0
ZXwgYW5kIGNsZWFycyB0aGUgcGVuZGluZyB1cGRhdGUuCisgICAgdm9pZCBwb3BQZW5kaW5nVXBk
YXRlKFBlbmRpbmdVcGRhdGUqKTsKKworICAgIC8vIFRoZSBnaXZlbiByZWN0IHNob3VsZCBiZSBy
ZXBhaW50ZWQuCisgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7CisKKyAgICAvLyBUaGUgZ2l2ZW4gcmVjdCBzaG91bGQgYmUgc2Nyb2xsZWQgYnkgdGhlIGdp
dmVuIGFtb3VudHMuCisgICAgdm9pZCBzY3JvbGxSZWN0KGludCBkeCwgaW50IGR5LCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CisKK3ByaXZhdGU6CisgICAgV2ViQ29yZTo6SW50
UmVjdCBzY3JvbGxQYWludFJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcGFpbnRSZWN0LCBp
bnQgZHgsIGludCBkeSkgY29uc3Q7CisgICAgYm9vbCBzaG91bGRJbnZhbGlkYXRlU2Nyb2xsUmVj
dChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7CisgICAgdm9pZCBpbnZhbGlkYXRlU2Ny
b2xsUmVjdCgpOworICAgIHZvaWQgY29tYmluZVBhaW50UmVjdHMoKTsKKworICAgIFBlbmRpbmdV
cGRhdGUgbV91cGRhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BhaW50QWdncmVnYXRvclRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QYWludEFnZ3JlZ2F0b3JUZXN0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mY2YzNzRiNDc2MDMzOGYzYjY0N2VlMmY5NmFiZDFjZDFjMDRlMzJh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QYWludEFn
Z3JlZ2F0b3JUZXN0LmNwcApAQCAtMCwwICsxLDQ5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJwYWludGluZy9QYWludEFnZ3JlZ2F0b3IuaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0
ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKKworbmFtZXNwYWNlIHsKKworVEVTVChQYWludEFnZ3JlZ2F0b3IsIEluaXRpYWxTdGF0ZSkK
K3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKyAgICBFWFBFQ1RfRkFMU0UoZ3JlZy5oYXNQ
ZW5kaW5nVXBkYXRlKCkpOworfQorCitURVNUKFBhaW50QWdncmVnYXRvciwgU2luZ2xlSW52YWxp
ZGF0aW9uKQoreworICAgIFBhaW50QWdncmVnYXRvciBncmVnOworCisgICAgSW50UmVjdCByZWN0
KDIsIDQsIDEwLCAxNik7CisgICAgZ3JlZy5pbnZhbGlkYXRlUmVjdChyZWN0KTsKKworICAgIEVY
UEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6
OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRl
KTsKKworICAgIEVYUEVDVF9UUlVFKHVwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHkoKSk7CisgICAg
QVNTRVJUX0VRKDFVLCB1cGRhdGUucGFpbnRSZWN0cy5zaXplKCkpOworCisgICAgRVhQRUNUX0VR
KHJlY3QsIHVwZGF0ZS5wYWludFJlY3RzWzBdKTsKK30KKworVEVTVChQYWludEFnZ3JlZ2F0b3Is
IERvdWJsZURpc2pvaW50SW52YWxpZGF0aW9uKQoreworICAgIFBhaW50QWdncmVnYXRvciBncmVn
OworCisgICAgSW50UmVjdCByMSgyLCA0LCAyLCA0MCk7CisgICAgSW50UmVjdCByMig0LCAyLCA0
MCwgMik7CisKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHIxKTsKKyAgICBncmVnLmludmFsaWRh
dGVSZWN0KHIyKTsKKworICAgIEludFJlY3QgZXhwZWN0ZWRCb3VuZHMgPSB1bmlvblJlY3QocjEs
IHIyKTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQ
YWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGlu
Z1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIEVYUEVDVF9UUlVFKHVwZGF0ZS5zY3JvbGxSZWN0Lmlz
RW1wdHkoKSk7CisgICAgRVhQRUNUX0VRKDJVLCB1cGRhdGUucGFpbnRSZWN0cy5zaXplKCkpOwor
CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkQm91bmRzLCB1cGRhdGUuY2FsY3VsYXRlUGFpbnRCb3Vu
ZHMoKSk7Cit9CisKK1RFU1QoUGFpbnRBZ2dyZWdhdG9yLCBEaXNqb2ludEludmFsaWRhdGlvbnND
b21iaW5lZCkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIC8vIE1ha2UgdGhl
IHJlY3RhbmdsZXMgc3VjaCB0aGF0IHRoZXkgZG9uJ3Qgb3ZlcmxhcCBidXQgY292ZXIgYSB2ZXJ5
IGxhcmdlCisgICAgLy8gcGVyY2VudGFnZSBvZiB0aGUgYXJlYSBvZiBjb3ZlcmVkIGJ5IHRoZWly
IHVuaW9uLiBUaGlzIGlzIHNvIHdlJ3JlIG5vdAorICAgIC8vIHZlcnkgc2Vuc2l0aXZlIHRvIHRo
ZSBjb21iaW5pbmcgaGV1cmlzdGljIGluIHRoZSBwYWludCBhZ2dyZWdhdG9yLgorICAgIEludFJl
Y3QgcjEoMiwgNCwgMiwgMTAwMCk7CisgICAgSW50UmVjdCByMig1LCAyLCAyLCAxMDAwKTsKKwor
ICAgIGdyZWcuaW52YWxpZGF0ZVJlY3QocjEpOworICAgIGdyZWcuaW52YWxpZGF0ZVJlY3QocjIp
OworCisgICAgSW50UmVjdCBleHBlY3RlZEJvdW5kcyA9IHVuaW9uUmVjdChyMSwgcjIpOworCisg
ICAgRVhQRUNUX1RSVUUoZ3JlZy5oYXNQZW5kaW5nVXBkYXRlKCkpOworICAgIFBhaW50QWdncmVn
YXRvcjo6UGVuZGluZ1VwZGF0ZSB1cGRhdGU7CisgICAgZ3JlZy5wb3BQZW5kaW5nVXBkYXRlKCZ1
cGRhdGUpOworCisgICAgRVhQRUNUX1RSVUUodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsK
KyAgICBBU1NFUlRfRVEoMVUsIHVwZGF0ZS5wYWludFJlY3RzLnNpemUoKSk7CisKKyAgICBFWFBF
Q1RfRVEoZXhwZWN0ZWRCb3VuZHMsIHVwZGF0ZS5wYWludFJlY3RzWzBdKTsKK30KKworVEVTVChQ
YWludEFnZ3JlZ2F0b3IsIFNpbmdsZVNjcm9sbCkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3Jl
ZzsKKworICAgIEludFJlY3QgcmVjdCgxLCAyLCAzLCA0KTsKKyAgICBJbnRQb2ludCBkZWx0YSgx
LCAwKTsKKyAgICBncmVnLnNjcm9sbFJlY3QoZGVsdGEueCgpLCBkZWx0YS55KCksIHJlY3QpOwor
CisgICAgRVhQRUNUX1RSVUUoZ3JlZy5oYXNQZW5kaW5nVXBkYXRlKCkpOworICAgIFBhaW50QWdn
cmVnYXRvcjo6UGVuZGluZ1VwZGF0ZSB1cGRhdGU7CisgICAgZ3JlZy5wb3BQZW5kaW5nVXBkYXRl
KCZ1cGRhdGUpOworCisgICAgRVhQRUNUX1RSVUUodXBkYXRlLnBhaW50UmVjdHMuaXNFbXB0eSgp
KTsKKyAgICBFWFBFQ1RfRkFMU0UodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKworICAg
IEVYUEVDVF9FUShyZWN0LCB1cGRhdGUuc2Nyb2xsUmVjdCk7CisKKyAgICBFWFBFQ1RfRVEoZGVs
dGEueCgpLCB1cGRhdGUuc2Nyb2xsRGVsdGEueCgpKTsKKyAgICBFWFBFQ1RfRVEoZGVsdGEueSgp
LCB1cGRhdGUuc2Nyb2xsRGVsdGEueSgpKTsKKworICAgIEludFJlY3QgcmVzdWx0aW5nRGFtYWdl
ID0gdXBkYXRlLmNhbGN1bGF0ZVNjcm9sbERhbWFnZSgpOworICAgIEludFJlY3QgZXhwZWN0ZWRE
YW1hZ2UoMSwgMiwgMSwgNCk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkRGFtYWdlLCByZXN1bHRp
bmdEYW1hZ2UpOworfQorCitURVNUKFBhaW50QWdncmVnYXRvciwgRG91YmxlT3ZlcmxhcHBpbmdT
Y3JvbGwpCit7CisgICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7CisKKyAgICBJbnRSZWN0IHJlY3Qo
MSwgMiwgMywgNCk7CisgICAgSW50UG9pbnQgZGVsdGExKDEsIDApOworICAgIEludFBvaW50IGRl
bHRhMigxLCAwKTsKKyAgICBncmVnLnNjcm9sbFJlY3QoZGVsdGExLngoKSwgZGVsdGExLnkoKSwg
cmVjdCk7CisgICAgZ3JlZy5zY3JvbGxSZWN0KGRlbHRhMi54KCksIGRlbHRhMi55KCksIHJlY3Qp
OworCisgICAgRVhQRUNUX1RSVUUoZ3JlZy5oYXNQZW5kaW5nVXBkYXRlKCkpOworICAgIFBhaW50
QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0ZSB1cGRhdGU7CisgICAgZ3JlZy5wb3BQZW5kaW5nVXBk
YXRlKCZ1cGRhdGUpOworCisgICAgRVhQRUNUX1RSVUUodXBkYXRlLnBhaW50UmVjdHMuaXNFbXB0
eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKwor
ICAgIEVYUEVDVF9FUShyZWN0LCB1cGRhdGUuc2Nyb2xsUmVjdCk7CisKKyAgICBJbnRQb2ludCBl
eHBlY3RlZERlbHRhKGRlbHRhMS54KCkgKyBkZWx0YTIueCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVsdGExLnkoKSArIGRlbHRhMi55KCkpOworICAgIEVYUEVDVF9FUShleHBlY3Rl
ZERlbHRhLngoKSwgdXBkYXRlLnNjcm9sbERlbHRhLngoKSk7CisgICAgRVhQRUNUX0VRKGV4cGVj
dGVkRGVsdGEueSgpLCB1cGRhdGUuc2Nyb2xsRGVsdGEueSgpKTsKKworICAgIEludFJlY3QgcmVz
dWx0aW5nRGFtYWdlID0gdXBkYXRlLmNhbGN1bGF0ZVNjcm9sbERhbWFnZSgpOworICAgIEludFJl
Y3QgZXhwZWN0ZWREYW1hZ2UoMSwgMiwgMiwgNCk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkRGFt
YWdlLCByZXN1bHRpbmdEYW1hZ2UpOworfQorCitURVNUKFBhaW50QWdncmVnYXRvciwgTmVnYXRp
bmdTY3JvbGwpCit7CisgICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7CisKKyAgICAvLyBTY3JvbGwg
dHdpY2UgaW4gb3Bwb3NpdGUgZGlyZWN0aW9ucyBieSBlcXVhbCBhbW91bnRzLiBUaGUgcmVzdWx0
CisgICAgLy8gc2hvdWxkIGJlIG5vIHNjcm9sbGluZy4KKworICAgIEludFJlY3QgcmVjdCgxLCAy
LCAzLCA0KTsKKyAgICBJbnRQb2ludCBkZWx0YTEoMSwgMCk7CisgICAgSW50UG9pbnQgZGVsdGEy
KC0xLCAwKTsKKyAgICBncmVnLnNjcm9sbFJlY3QoZGVsdGExLngoKSwgZGVsdGExLnkoKSwgcmVj
dCk7CisgICAgZ3JlZy5zY3JvbGxSZWN0KGRlbHRhMi54KCksIGRlbHRhMi55KCksIHJlY3QpOwor
CisgICAgRVhQRUNUX0ZBTFNFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKK30KKworVEVTVChQ
YWludEFnZ3JlZ2F0b3IsIERpYWdvbmFsU2Nyb2xsKQoreworICAgIFBhaW50QWdncmVnYXRvciBn
cmVnOworCisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBvcHRpbWl6ZWQgZGlhZ29uYWwgc2Nyb2xs
aW5nLCBzbyB0aGlzIHNob3VsZCByZXN1bHQgaW4KKyAgICAvLyByZXBhaW50aW5nLgorCisgICAg
SW50UmVjdCByZWN0KDEsIDIsIDMsIDQpOworICAgIEludFBvaW50IGRlbHRhKDEsIDEpOworICAg
IGdyZWcuc2Nyb2xsUmVjdChkZWx0YS54KCksIGRlbHRhLnkoKSwgcmVjdCk7CisKKyAgICBFWFBF
Q1RfVFJVRShncmVnLmhhc1BlbmRpbmdVcGRhdGUoKSk7CisgICAgUGFpbnRBZ2dyZWdhdG9yOjpQ
ZW5kaW5nVXBkYXRlIHVwZGF0ZTsKKyAgICBncmVnLnBvcFBlbmRpbmdVcGRhdGUoJnVwZGF0ZSk7
CisKKyAgICBFWFBFQ1RfVFJVRSh1cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOworICAgIEFT
U0VSVF9FUSgxVSwgdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUShy
ZWN0LCB1cGRhdGUucGFpbnRSZWN0c1swXSk7Cit9CisKK1RFU1QoUGFpbnRBZ2dyZWdhdG9yLCBD
b250YWluZWRQYWludEFmdGVyU2Nyb2xsKQoreworICAgIFBhaW50QWdncmVnYXRvciBncmVnOwor
CisgICAgSW50UmVjdCBzY3JvbGxSZWN0KDAsIDAsIDEwLCAxMCk7CisgICAgZ3JlZy5zY3JvbGxS
ZWN0KDIsIDAsIHNjcm9sbFJlY3QpOworCisgICAgSW50UmVjdCBwYWludFJlY3QoNCwgNCwgMiwg
Mik7CisgICAgZ3JlZy5pbnZhbGlkYXRlUmVjdChwYWludFJlY3QpOworCisgICAgRVhQRUNUX1RS
VUUoZ3JlZy5oYXNQZW5kaW5nVXBkYXRlKCkpOworICAgIFBhaW50QWdncmVnYXRvcjo6UGVuZGlu
Z1VwZGF0ZSB1cGRhdGU7CisgICAgZ3JlZy5wb3BQZW5kaW5nVXBkYXRlKCZ1cGRhdGUpOworCisg
ICAgLy8gZXhwZWN0aW5nIGEgcGFpbnQgcmVjdCBpbnNpZGUgdGhlIHNjcm9sbCByZWN0CisgICAg
RVhQRUNUX0ZBTFNFKHVwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0VR
KDFVLCB1cGRhdGUucGFpbnRSZWN0cy5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKHNjcm9sbFJl
Y3QsIHVwZGF0ZS5zY3JvbGxSZWN0KTsKKyAgICBFWFBFQ1RfRVEocGFpbnRSZWN0LCB1cGRhdGUu
cGFpbnRSZWN0c1swXSk7Cit9CisKK1RFU1QoUGFpbnRBZ2dyZWdhdG9yLCBDb250YWluZWRQYWlu
dEJlZm9yZVNjcm9sbCkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJl
Y3QgcGFpbnRSZWN0KDQsIDQsIDIsIDIpOworICAgIGdyZWcuaW52YWxpZGF0ZVJlY3QocGFpbnRS
ZWN0KTsKKworICAgIEludFJlY3Qgc2Nyb2xsUmVjdCgwLCAwLCAxMCwgMTApOworICAgIGdyZWcu
c2Nyb2xsUmVjdCgyLCAwLCBzY3JvbGxSZWN0KTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFz
UGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBk
YXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIC8vIEV4cGVj
dGluZyBhIHBhaW50IHJlY3QgaW5zaWRlIHRoZSBzY3JvbGwgcmVjdAorICAgIEVYUEVDVF9GQUxT
RSh1cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUSgxVSwgdXBkYXRl
LnBhaW50UmVjdHMuc2l6ZSgpKTsKKworICAgIHBhaW50UmVjdC5tb3ZlKDIsIDApOworCisgICAg
RVhQRUNUX0VRKHNjcm9sbFJlY3QsIHVwZGF0ZS5zY3JvbGxSZWN0KTsKKyAgICBFWFBFQ1RfRVEo
cGFpbnRSZWN0LCB1cGRhdGUucGFpbnRSZWN0c1swXSk7Cit9CisKK1RFU1QoUGFpbnRBZ2dyZWdh
dG9yLCBDb250YWluZWRQYWludHNCZWZvcmVBbmRBZnRlclNjcm9sbCkKK3sKKyAgICBQYWludEFn
Z3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJlY3QgcGFpbnRSZWN0MSg0LCA0LCAyLCAyKTsKKyAg
ICBncmVnLmludmFsaWRhdGVSZWN0KHBhaW50UmVjdDEpOworCisgICAgSW50UmVjdCBzY3JvbGxS
ZWN0KDAsIDAsIDEwLCAxMCk7CisgICAgZ3JlZy5zY3JvbGxSZWN0KDIsIDAsIHNjcm9sbFJlY3Qp
OworCisgICAgSW50UmVjdCBwYWludFJlY3QyKDYsIDQsIDIsIDIpOworICAgIGdyZWcuaW52YWxp
ZGF0ZVJlY3QocGFpbnRSZWN0Mik7CisKKyAgICBJbnRSZWN0IGV4cGVjdGVkUGFpbnRSZWN0ID0g
cGFpbnRSZWN0MjsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsK
KyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9w
UGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIC8vIEV4cGVjdGluZyBhIHBhaW50IHJlY3Qg
aW5zaWRlIHRoZSBzY3JvbGwgcmVjdAorICAgIEVYUEVDVF9GQUxTRSh1cGRhdGUuc2Nyb2xsUmVj
dC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUSgxVSwgdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgp
KTsKKworICAgIEVYUEVDVF9FUShzY3JvbGxSZWN0LCB1cGRhdGUuc2Nyb2xsUmVjdCk7CisgICAg
RVhQRUNUX0VRKGV4cGVjdGVkUGFpbnRSZWN0LCB1cGRhdGUucGFpbnRSZWN0c1swXSk7Cit9CisK
K1RFU1QoUGFpbnRBZ2dyZWdhdG9yLCBMYXJnZUNvbnRhaW5lZFBhaW50QWZ0ZXJTY3JvbGwpCit7
CisgICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7CisKKyAgICBJbnRSZWN0IHNjcm9sbFJlY3QoMCwg
MCwgMTAsIDEwKTsKKyAgICBncmVnLnNjcm9sbFJlY3QoMCwgMSwgc2Nyb2xsUmVjdCk7CisKKyAg
ICBJbnRSZWN0IHBhaW50UmVjdCgwLCAwLCAxMCwgOSk7IC8vIFJlcGFpbnQgOTAlCisgICAgZ3Jl
Zy5pbnZhbGlkYXRlUmVjdChwYWludFJlY3QpOworCisgICAgRVhQRUNUX1RSVUUoZ3JlZy5oYXNQ
ZW5kaW5nVXBkYXRlKCkpOworICAgIFBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0ZSB1cGRh
dGU7CisgICAgZ3JlZy5wb3BQZW5kaW5nVXBkYXRlKCZ1cGRhdGUpOworCisgICAgRVhQRUNUX1RS
VUUodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEoMVUsIHVwZGF0
ZS5wYWludFJlY3RzLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEoc2Nyb2xsUmVjdCwgdXBkYXRl
LnBhaW50UmVjdHNbMF0pOworfQorCitURVNUKFBhaW50QWdncmVnYXRvciwgTGFyZ2VDb250YWlu
ZWRQYWludEJlZm9yZVNjcm9sbCkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAg
IEludFJlY3QgcGFpbnRSZWN0KDAsIDAsIDEwLCA5KTsgLy8gUmVwYWludCA5MCUKKyAgICBncmVn
LmludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7CisKKyAgICBJbnRSZWN0IHNjcm9sbFJlY3QoMCwg
MCwgMTAsIDEwKTsKKyAgICBncmVnLnNjcm9sbFJlY3QoMCwgMSwgc2Nyb2xsUmVjdCk7CisKKyAg
ICBFWFBFQ1RfVFJVRShncmVnLmhhc1BlbmRpbmdVcGRhdGUoKSk7CisgICAgUGFpbnRBZ2dyZWdh
dG9yOjpQZW5kaW5nVXBkYXRlIHVwZGF0ZTsKKyAgICBncmVnLnBvcFBlbmRpbmdVcGRhdGUoJnVw
ZGF0ZSk7CisKKyAgICBFWFBFQ1RfVFJVRSh1cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOwor
ICAgIEVYUEVDVF9FUSgxVSwgdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpKTsKKworICAgIEVYUEVD
VF9FUShzY3JvbGxSZWN0LCB1cGRhdGUucGFpbnRSZWN0c1swXSk7Cit9CisKK1RFU1QoUGFpbnRB
Z2dyZWdhdG9yLCBPdmVybGFwcGluZ1BhaW50QmVmb3JlU2Nyb2xsKQoreworICAgIFBhaW50QWdn
cmVnYXRvciBncmVnOworCisgICAgSW50UmVjdCBwYWludFJlY3QoNCwgNCwgMTAsIDIpOworICAg
IGdyZWcuaW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsKKworICAgIEludFJlY3Qgc2Nyb2xsUmVj
dCgwLCAwLCAxMCwgMTApOworICAgIGdyZWcuc2Nyb2xsUmVjdCgyLCAwLCBzY3JvbGxSZWN0KTsK
KworICAgIEludFJlY3QgZXhwZWN0ZWRQYWludFJlY3QgPSB1bmlvblJlY3Qoc2Nyb2xsUmVjdCwg
cGFpbnRSZWN0KTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsK
KyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9w
UGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIEVYUEVDVF9UUlVFKHVwZGF0ZS5zY3JvbGxS
ZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0VRKDFVLCB1cGRhdGUucGFpbnRSZWN0cy5zaXpl
KCkpOworCisgICAgRVhQRUNUX0VRKGV4cGVjdGVkUGFpbnRSZWN0LCB1cGRhdGUucGFpbnRSZWN0
c1swXSk7Cit9CisKK1RFU1QoUGFpbnRBZ2dyZWdhdG9yLCBPdmVybGFwcGluZ1BhaW50QWZ0ZXJT
Y3JvbGwpCit7CisgICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7CisKKyAgICBJbnRSZWN0IHNjcm9s
bFJlY3QoMCwgMCwgMTAsIDEwKTsKKyAgICBncmVnLnNjcm9sbFJlY3QoMiwgMCwgc2Nyb2xsUmVj
dCk7CisKKyAgICBJbnRSZWN0IHBhaW50UmVjdCg0LCA0LCAxMCwgMik7CisgICAgZ3JlZy5pbnZh
bGlkYXRlUmVjdChwYWludFJlY3QpOworCisgICAgSW50UmVjdCBleHBlY3RlZFBhaW50UmVjdCA9
IHVuaW9uUmVjdChzY3JvbGxSZWN0LCBwYWludFJlY3QpOworCisgICAgRVhQRUNUX1RSVUUoZ3Jl
Zy5oYXNQZW5kaW5nVXBkYXRlKCkpOworICAgIFBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0
ZSB1cGRhdGU7CisgICAgZ3JlZy5wb3BQZW5kaW5nVXBkYXRlKCZ1cGRhdGUpOworCisgICAgRVhQ
RUNUX1RSVUUodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEoMVUs
IHVwZGF0ZS5wYWludFJlY3RzLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRQYWlu
dFJlY3QsIHVwZGF0ZS5wYWludFJlY3RzWzBdKTsKK30KKworVEVTVChQYWludEFnZ3JlZ2F0b3Is
IERpc2pvaW50UGFpbnRCZWZvcmVTY3JvbGwpCit7CisgICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7
CisKKyAgICBJbnRSZWN0IHBhaW50UmVjdCg0LCA0LCAxMCwgMik7CisgICAgZ3JlZy5pbnZhbGlk
YXRlUmVjdChwYWludFJlY3QpOworCisgICAgSW50UmVjdCBzY3JvbGxSZWN0KDAsIDAsIDIsIDEw
KTsKKyAgICBncmVnLnNjcm9sbFJlY3QoMiwgMCwgc2Nyb2xsUmVjdCk7CisKKyAgICBFWFBFQ1Rf
VFJVRShncmVnLmhhc1BlbmRpbmdVcGRhdGUoKSk7CisgICAgUGFpbnRBZ2dyZWdhdG9yOjpQZW5k
aW5nVXBkYXRlIHVwZGF0ZTsKKyAgICBncmVnLnBvcFBlbmRpbmdVcGRhdGUoJnVwZGF0ZSk7CisK
KyAgICBFWFBFQ1RfRkFMU0UodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBF
Q1RfRVEoMVUsIHVwZGF0ZS5wYWludFJlY3RzLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEocGFp
bnRSZWN0LCB1cGRhdGUucGFpbnRSZWN0c1swXSk7CisgICAgRVhQRUNUX0VRKHNjcm9sbFJlY3Qs
IHVwZGF0ZS5zY3JvbGxSZWN0KTsKK30KKworVEVTVChQYWludEFnZ3JlZ2F0b3IsIERpc2pvaW50
UGFpbnRBZnRlclNjcm9sbCkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIElu
dFJlY3Qgc2Nyb2xsUmVjdCgwLCAwLCAyLCAxMCk7CisgICAgZ3JlZy5zY3JvbGxSZWN0KDIsIDAs
IHNjcm9sbFJlY3QpOworCisgICAgSW50UmVjdCBwYWludFJlY3QoNCwgNCwgMTAsIDIpOworICAg
IGdyZWcuaW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcu
aGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUg
dXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIEVYUEVD
VF9GQUxTRSh1cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUSgxVSwg
dXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUShwYWludFJlY3QsIHVw
ZGF0ZS5wYWludFJlY3RzWzBdKTsKKyAgICBFWFBFQ1RfRVEoc2Nyb2xsUmVjdCwgdXBkYXRlLnNj
cm9sbFJlY3QpOworfQorCitURVNUKFBhaW50QWdncmVnYXRvciwgQ29udGFpbmVkUGFpbnRUcmlt
bWVkQnlTY3JvbGwpCit7CisgICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7CisKKyAgICBJbnRSZWN0
IHBhaW50UmVjdCg0LCA0LCA2LCA2KTsKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHBhaW50UmVj
dCk7CisKKyAgICBJbnRSZWN0IHNjcm9sbFJlY3QoMCwgMCwgMTAsIDEwKTsKKyAgICBncmVnLnNj
cm9sbFJlY3QoMiwgMCwgc2Nyb2xsUmVjdCk7CisKKyAgICAvLyBUaGUgcGFpbnQgcmVjdCBzaG91
bGQgaGF2ZSBiZWNvbWUgbmFycm93ZXIuCisgICAgSW50UmVjdCBleHBlY3RlZFBhaW50UmVjdCg2
LCA0LCA0LCA2KTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsK
KyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9w
UGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIEVYUEVDVF9GQUxTRSh1cGRhdGUuc2Nyb2xs
UmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUSgxVSwgdXBkYXRlLnBhaW50UmVjdHMuc2l6
ZSgpKTsKKworICAgIEVYUEVDVF9FUShleHBlY3RlZFBhaW50UmVjdCwgdXBkYXRlLnBhaW50UmVj
dHNbMF0pOworICAgIEVYUEVDVF9FUShzY3JvbGxSZWN0LCB1cGRhdGUuc2Nyb2xsUmVjdCk7Cit9
CisKK1RFU1QoUGFpbnRBZ2dyZWdhdG9yLCBDb250YWluZWRQYWludEVsaW1pbmF0ZWRCeVNjcm9s
bCkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJlY3QgcGFpbnRSZWN0
KDQsIDQsIDYsIDYpOworICAgIGdyZWcuaW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsKKworICAg
IEludFJlY3Qgc2Nyb2xsUmVjdCgwLCAwLCAxMCwgMTApOworICAgIGdyZWcuc2Nyb2xsUmVjdCg2
LCAwLCBzY3JvbGxSZWN0KTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0
ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdy
ZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIEVYUEVDVF9GQUxTRSh1cGRhdGUu
c2Nyb2xsUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKHVwZGF0ZS5wYWludFJlY3Rz
LmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoc2Nyb2xsUmVjdCwgdXBkYXRlLnNjcm9sbFJl
Y3QpOworfQorCitURVNUKFBhaW50QWdncmVnYXRvciwgQ29udGFpbmVkUGFpbnRBZnRlclNjcm9s
bFRyaW1tZWRCeVNjcm9sbERhbWFnZSkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKwor
ICAgIEludFJlY3Qgc2Nyb2xsUmVjdCgwLCAwLCAxMCwgMTApOworICAgIGdyZWcuc2Nyb2xsUmVj
dCg0LCAwLCBzY3JvbGxSZWN0KTsKKworICAgIEludFJlY3QgcGFpbnRSZWN0KDIsIDAsIDQsIDEw
KTsKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7CisKKyAgICBJbnRSZWN0IGV4
cGVjdGVkU2Nyb2xsRGFtYWdlKDAsIDAsIDQsIDEwKTsKKyAgICBJbnRSZWN0IGV4cGVjdGVkUGFp
bnRSZWN0KDQsIDAsIDIsIDEwKTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1Vw
ZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAg
IGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIEVYUEVDVF9GQUxTRSh1cGRh
dGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUSgxVSwgdXBkYXRlLnBhaW50
UmVjdHMuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUShzY3JvbGxSZWN0LCB1cGRhdGUuc2Nyb2xs
UmVjdCk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkU2Nyb2xsRGFtYWdlLCB1cGRhdGUuY2FsY3Vs
YXRlU2Nyb2xsRGFtYWdlKCkpOworICAgIEVYUEVDVF9FUShleHBlY3RlZFBhaW50UmVjdCwgdXBk
YXRlLnBhaW50UmVjdHNbMF0pOworfQorCitURVNUKFBhaW50QWdncmVnYXRvciwgQ29udGFpbmVk
UGFpbnRBZnRlclNjcm9sbEVsaW1pbmF0ZWRCeVNjcm9sbERhbWFnZSkKK3sKKyAgICBQYWludEFn
Z3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJlY3Qgc2Nyb2xsUmVjdCgwLCAwLCAxMCwgMTApOwor
ICAgIGdyZWcuc2Nyb2xsUmVjdCg0LCAwLCBzY3JvbGxSZWN0KTsKKworICAgIEludFJlY3QgcGFp
bnRSZWN0KDIsIDAsIDIsIDEwKTsKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7
CisKKyAgICBJbnRSZWN0IGV4cGVjdGVkU2Nyb2xsRGFtYWdlKDAsIDAsIDQsIDEwKTsKKworICAg
IEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0
b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBk
YXRlKTsKKworICAgIEVYUEVDVF9GQUxTRSh1cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOwor
ICAgIEVYUEVDVF9UUlVFKHVwZGF0ZS5wYWludFJlY3RzLmlzRW1wdHkoKSk7CisKKyAgICBFWFBF
Q1RfRVEoc2Nyb2xsUmVjdCwgdXBkYXRlLnNjcm9sbFJlY3QpOworICAgIEVYUEVDVF9FUShleHBl
Y3RlZFNjcm9sbERhbWFnZSwgdXBkYXRlLmNhbGN1bGF0ZVNjcm9sbERhbWFnZSgpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124768</attachid>
            <date>2012-01-31 10:21:42 -0800</date>
            <delta_ts>2012-01-31 14:57:34 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-53715-20120131102141.patch</filename>
            <type>text/plain</type>
            <size>36294</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MzY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDgyOGRlZWQ3OTg2ZGEwYzQ2YTExMmVlOWYxMjU4Mjc1NjUzOTkzZTAuLmU4MmFmOTRkYzAwMjE1
NTA0ZDZmNzZjYWFlZGQzODMxZjcwMmNiZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMTItMDEtMTIgIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wb3J0IFBhaW50QWdncmVnYXRvcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM3MTUKKworICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAg
ICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHNyYy9wYWludGluZy9QYWludEFnZ3JlZ2F0b3Iu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6Y2FsY3VsYXRlQXJlYSk6CisgICAgICAgIChX
ZWJLaXQ6OnN1YnRyYWN0SW50ZXJzZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6c2hhcmVzRWRn
ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0ZTo6UGVu
ZGluZ1VwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1Vw
ZGF0ZTo6flBlbmRpbmdVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpQYWludEFnZ3JlZ2F0b3I6
OlBlbmRpbmdVcGRhdGU6OmNhbGN1bGF0ZVNjcm9sbERhbWFnZSk6CisgICAgICAgIChXZWJLaXQ6
OlBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0ZTo6Y2FsY3VsYXRlUGFpbnRCb3VuZHMpOgor
ICAgICAgICAoV2ViS2l0OjpQYWludEFnZ3JlZ2F0b3I6Omhhc1BlbmRpbmdVcGRhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpQYWludEFnZ3JlZ2F0b3I6OmNsZWFyUGVuZGluZ1VwZGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlBhaW50QWdncmVnYXRvcjo6cG9wUGVuZGluZ1VwZGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OlBhaW50QWdncmVnYXRvcjo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2Vi
S2l0OjpQYWludEFnZ3JlZ2F0b3I6OnNjcm9sbFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpQYWlu
dEFnZ3JlZ2F0b3I6OnNjcm9sbFBhaW50UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlBhaW50QWdn
cmVnYXRvcjo6c2hvdWxkSW52YWxpZGF0ZVNjcm9sbFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpQ
YWludEFnZ3JlZ2F0b3I6OmludmFsaWRhdGVTY3JvbGxSZWN0KToKKyAgICAgICAgKFdlYktpdDo6
UGFpbnRBZ2dyZWdhdG9yOjpjb21iaW5lUGFpbnRSZWN0cyk6CisgICAgICAgICogc3JjL3BhaW50
aW5nL1BhaW50QWdncmVnYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9QYWludEFnZ3Jl
Z2F0b3JUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlRFU1QpOgorCiAyMDEyLTAx
LTI2ICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3BlZWNo
IElucHV0OiBtb3ZlIE1vY2tTcGVlY2hJbnB1dENsaWVudCBpbnRvIENocm9taXVtIER1bXBSZW5k
ZXJUcmVlIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggNzFl
NTdlM2JkYThjZjYzNmMyNmZlYjQ2M2Y5MmQyMDliNzUzMmE3Ni4uMWRjMjk1NzA0YzBjNjc5NzJh
ZmFkZDA1YzljZWYxZDJmZmM3MDUwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAt
NDQ1LDYgKzQ0NSw4IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9Ob3RpZmljYXRpb25QcmVzZW50
ZXJJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvTm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvcGFpbnRpbmcvR3JhcGhpY3NDb250ZXh0QnVp
bGRlci5oJywKKyAgICAgICAgICAgICAgICAnc3JjL3BhaW50aW5nL1BhaW50QWdncmVnYXRvci5o
JywKKyAgICAgICAgICAgICAgICAnc3JjL3BhaW50aW5nL1BhaW50QWdncmVnYXRvci5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvUGFnZU92ZXJsYXkuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1BhZ2VPdmVybGF5LmgnLAogICAgICAgICAgICAgICAgICdzcmMvUGFnZU92ZXJsYXlMaXN0
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCA4NGVjZmI4M2ZkOTFiMWE2
ZjA2ZTQyYTI4MDA0MjMzNWJkYzRjNzExLi5lMTVmYmZjYWE4NmQ3NTU2MzllZWM4MWE3YjdlZjY3
ZGQ2NmM1MGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTEwMSw2ICsxMDEs
NyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MYXllclRleHR1
cmVVcGRhdGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL1BhaW50QWdncmVnYXRvclRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9QT0RBcmVuYVRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9QT0RJbnRlcnZhbFRyZWVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
UE9EUmVkQmxhY2tUcmVlVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvcGFpbnRpbmcvUGFpbnRBZ2dyZWdhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL3BhaW50aW5nL1BhaW50QWdncmVnYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmY3ZTRj
NzNjNGY2ZGJkMjQ4YWYxZjU4NThlMmJjYzgzYmFhZDI0MwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL3BhaW50aW5nL1BhaW50QWdncmVnYXRvci5jcHAKQEAg
LTAsMCArMSwzNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFpbnRBZ2dyZWdh
dG9yLmgiCisKKyNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBTEdPUklUSE0gTk9URVMK
Ky8vCisvLyBXZSBhdHRlbXB0IHRvIG1haW50YWluIGEgc2Nyb2xsIHJlY3QgaW4gdGhlIHByZXNl
bmNlIG9mIGludmFsaWRhdGlvbnMgdGhhdAorLy8gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHNj
cm9sbCByZWN0LiBJZiBhbiBpbnZhbGlkYXRpb24gY3Jvc3NlcyBhIHNjcm9sbAorLy8gcmVjdCwg
dGhlbiB3ZSBqdXN0IHRyZWF0IHRoZSBzY3JvbGwgcmVjdCBhcyBhbiBpbnZhbGlkYXRpb24gcmVj
dC4KKy8vCisvLyBGb3IgaW52YWxpZGF0aW9ucyBwZXJmb3JtZWQgcHJpb3IgdG8gc2Nyb2xsaW5n
IGFuZCBjb250YWluZWQgd2l0aGluIHRoZQorLy8gc2Nyb2xsIHJlY3QsIHdlIG9mZnNldCB0aGUg
aW52YWxpZGF0aW9uIHJlY3RzIHRvIGFjY291bnQgZm9yIHRoZSBmYWN0IHRoYXQKKy8vIHRoZSBj
b25zdW1lciB3aWxsIHBlcmZvcm0gc2Nyb2xsaW5nIGJlZm9yZSBwYWludGluZy4KKy8vCisvLyBX
ZSBvbmx5IHN1cHBvcnQgc2Nyb2xsaW5nIGFsb25nIG9uZSBheGlzIGF0IGEgdGltZS4gQSBkaWFn
b25hbCBzY3JvbGwgd2lsbAorLy8gdGhlcmVmb3JlIGJlIHRyZWF0ZWQgYXMgYW4gaW52YWxpZGF0
aW9uLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBJZiB0aGUgY29tYmluZWQgYXJlYSBv
ZiBwYWludCByZWN0cyBjb250YWluZWQgd2l0aGluIHRoZSBzY3JvbGwgcmVjdCBncm93cworLy8g
dG9vIGxhcmdlLCB0aGVuIHdlIG1pZ2h0IGFzIHdlbGwganVzdCB0cmVhdCB0aGUgc2Nyb2xsIHJl
Y3QgYXMgYSBwYWludCByZWN0LgorLy8gVGhpcyBjb25zdGFudCBzZXRzIHRoZSBtYXggcmF0aW8g
b2YgcGFpbnQgcmVjdCBhcmVhIHRvIHNjcm9sbCByZWN0IGFyZWEgdGhhdAorLy8gd2Ugd2lsbCB0
b2xlcmF0ZSBiZWZvcmUgZG9ncmFkaW5nIHRoZSBzY3JvbGwgaW50byBhIHJlcGFpbnQuCitzdGF0
aWMgY29uc3QgZmxvYXQgbWF4UmVkdW5kYW50UGFpbnRUb1Njcm9sbEFyZWEgPSAwLjhmOworCisv
LyBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFpbnQgcmVjdHMuIElmIHdlIGV4Y2VlZCB0aGlzIGxp
bWl0LCB0aGVuIHdlJ2xsCisvLyBzdGFydCBjb21iaW5pbmcgcGFpbnQgcmVjdHMgKHNlZSBDb21i
aW5lUGFpbnRSZWN0cykuIFRoaXMgbGltaXRpbmcgaXMKKy8vIGltcG9ydGFudCBzaW5jZSB0aGUg
V2ViS2l0IGNvZGUgYXNzb2NpYXRlZCB3aXRoIGRlY2lkaW5nIHdoYXQgdG8gcGFpbnQgZ2l2ZW4K
Ky8vIGEgcGFpbnQgcmVjdCBjYW4gYmUgc2lnbmlmaWNhbnQuCitzdGF0aWMgY29uc3Qgc2l6ZV90
IG1heFBhaW50UmVjdHMgPSA1OworCisvLyBJZiB0aGUgY29tYmluZWQgYXJlYSBvZiBwYWludCBy
ZWN0cyBkaXZpZGVkIGJ5IHRoZSBhcmVhIG9mIHRoZSB1bmlvbiBvZiBhbGwKKy8vIHBhaW50IHJl
Y3RzIGV4Y2VlZHMgdGhpcyB0aHJlc2hvbGQsIHRoZW4gd2Ugd2lsbCBjb21iaW5lIHRoZSBwYWlu
dCByZWN0cy4KK3N0YXRpYyBjb25zdCBmbG9hdCBtYXhQYWludFJlY3RzQXJlYVJhdGlvID0gMC43
ZjsKKworc3RhdGljIGludCBjYWxjdWxhdGVBcmVhKGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgcmV0dXJuIHJlY3Quc2l6ZSgpLndpZHRoKCkgKiByZWN0LnNpemUoKS5oZWlnaHQoKTsKK30K
KworLy8gU3VidHJhY3RzIG91dCB0aGUgaW50ZXJzZWN0aW9uIG9mIHxhfCBhbmQgfGJ8IGZyb20g
fGF8LCBhc3N1bWluZyB8YnwgZnVsbHkKKy8vIG92ZXJsYXBzIHdpdGggfGF8IGluIGVpdGhlciB0
aGUgeC0gb3IgeS1kaXJlY3Rpb24uIElmIHRoZXJlIGlzIG5vIGZ1bGwKKy8vIG92ZXJsYXAsIHRo
ZW4gfGF8IGlzIHJldHVybmVkLgorc3RhdGljIEludFJlY3Qgc3VidHJhY3RJbnRlcnNlY3Rpb24o
Y29uc3QgSW50UmVjdCYgYSwgY29uc3QgSW50UmVjdCYgYikKK3sKKyAgICAvLyBib3VuZGFyeSBj
YXNlczoKKyAgICBpZiAoIWEuaW50ZXJzZWN0cyhiKSkKKyAgICAgICAgcmV0dXJuIGE7CisgICAg
aWYgKGIuY29udGFpbnMoYSkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBpbnQg
cnggPSBhLngoKTsKKyAgICBpbnQgcnkgPSBhLnkoKTsKKyAgICBpbnQgcnIgPSBhLm1heFgoKTsK
KyAgICBpbnQgcmIgPSBhLm1heFkoKTsKKworICAgIGlmIChiLnkoKSA8PSBhLnkoKSAmJiBiLm1h
eFkoKSA+PSBhLm1heFkoKSkgeworICAgICAgICAvLyBjb21wbGV0ZSBpbnRlcnNlY3Rpb24gaW4g
dGhlIHktZGlyZWN0aW9uCisgICAgICAgIGlmIChiLngoKSA8PSBhLngoKSkKKyAgICAgICAgICAg
IHJ4ID0gYi5tYXhYKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJyID0gYi54KCk7Cisg
ICAgfSBlbHNlIGlmIChiLngoKSA8PSBhLngoKSAmJiBiLm1heFgoKSA+PSBhLm1heFgoKSkgewor
ICAgICAgICAvLyBjb21wbGV0ZSBpbnRlcnNlY3Rpb24gaW4gdGhlIHgtZGlyZWN0aW9uCisgICAg
ICAgIGlmIChiLnkoKSA8PSBhLnkoKSkKKyAgICAgICAgICAgIHJ5ID0gYi5tYXhZKCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHJiID0gYi55KCk7CisgICAgfQorICAgIHJldHVybiBJbnRS
ZWN0KHJ4LCByeSwgcnIgLSByeCwgcmIgLSByeSk7Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB8
YXwgYW5kIHxifCBzaGFyZSBhbiBlbnRpcmUgZWRnZSAoaS5lLiwgc2FtZSB3aWR0aCBvciBzYW1l
CisvLyBoZWlnaHQpLCBhbmQgdGhlIHJlY3RhbmdsZXMgZG8gbm90IG92ZXJsYXAuCitzdGF0aWMg
Ym9vbCBzaGFyZXNFZGdlKGNvbnN0IEludFJlY3QmIGEsIGNvbnN0IEludFJlY3QmIGIpCit7Cisg
ICAgcmV0dXJuIChhLnkoKSA9PSBiLnkoKSAmJiBhLmhlaWdodCgpID09IGIuaGVpZ2h0KCkgJiYg
KGEueCgpID09IGIubWF4WCgpIHx8IGEubWF4WCgpID09IGIueCgpKSkKKyAgICAgICAgfHwgKGEu
eCgpID09IGIueCgpICYmIGEud2lkdGgoKSA9PSBiLndpZHRoKCkgJiYgKGEueSgpID09IGIubWF4
WSgpIHx8IGEubWF4WSgpID09IGIueSgpKSk7Cit9CisKK1BhaW50QWdncmVnYXRvcjo6UGVuZGlu
Z1VwZGF0ZTo6UGVuZGluZ1VwZGF0ZSgpCit7Cit9CisKK1BhaW50QWdncmVnYXRvcjo6UGVuZGlu
Z1VwZGF0ZTo6flBlbmRpbmdVcGRhdGUoKQoreworfQorCitJbnRSZWN0IFBhaW50QWdncmVnYXRv
cjo6UGVuZGluZ1VwZGF0ZTo6Y2FsY3VsYXRlU2Nyb2xsRGFtYWdlKCkgY29uc3QKK3sKKyAgICAv
LyBTaG91bGQgb25seSBiZSBzY3JvbGxpbmcgaW4gb25lIGRpcmVjdGlvbiBhdCBhIHRpbWUuCisg
ICAgQVNTRVJUKCEoc2Nyb2xsRGVsdGEueCgpICYmIHNjcm9sbERlbHRhLnkoKSkpOworCisgICAg
SW50UmVjdCBkYW1hZ2VkUmVjdDsKKworICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lvbiB3ZSB3aWxs
IGV4cG9zZSBieSBzY3JvbGxpbmcsIGFuZCBwYWludCB0aGF0IGludG8gYQorICAgIC8vIHNoYXJl
ZCBtZW1vcnkgc2VjdGlvbi4KKyAgICBpZiAoc2Nyb2xsRGVsdGEueCgpKSB7CisgICAgICAgIGlu
dCBkeCA9IHNjcm9sbERlbHRhLngoKTsKKyAgICAgICAgZGFtYWdlZFJlY3Quc2V0WShzY3JvbGxS
ZWN0LnkoKSk7CisgICAgICAgIGRhbWFnZWRSZWN0LnNldEhlaWdodChzY3JvbGxSZWN0LmhlaWdo
dCgpKTsKKyAgICAgICAgaWYgKGR4ID4gMCkgeworICAgICAgICAgICAgZGFtYWdlZFJlY3Quc2V0
WChzY3JvbGxSZWN0LngoKSk7CisgICAgICAgICAgICBkYW1hZ2VkUmVjdC5zZXRXaWR0aChkeCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkYW1hZ2VkUmVjdC5zZXRYKHNjcm9sbFJl
Y3QubWF4WCgpICsgZHgpOworICAgICAgICAgICAgZGFtYWdlZFJlY3Quc2V0V2lkdGgoLWR4KTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGludCBkeSA9IHNjcm9sbERlbHRhLnko
KTsKKyAgICAgICAgZGFtYWdlZFJlY3Quc2V0WChzY3JvbGxSZWN0LngoKSk7CisgICAgICAgIGRh
bWFnZWRSZWN0LnNldFdpZHRoKHNjcm9sbFJlY3Qud2lkdGgoKSk7CisgICAgICAgIGlmIChkeSA+
IDApIHsKKyAgICAgICAgICAgIGRhbWFnZWRSZWN0LnNldFkoc2Nyb2xsUmVjdC55KCkpOworICAg
ICAgICAgICAgZGFtYWdlZFJlY3Quc2V0SGVpZ2h0KGR5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGRhbWFnZWRSZWN0LnNldFkoc2Nyb2xsUmVjdC5tYXhZKCkgKyBkeSk7CisgICAg
ICAgICAgICBkYW1hZ2VkUmVjdC5zZXRIZWlnaHQoLWR5KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIEluIGNhc2UgdGhlIHNjcm9sbCBvZmZzZXQgZXhjZWVkcyB0aGUgd2lkdGgvaGVpZ2h0
IG9mIHRoZSBzY3JvbGwgcmVjdAorICAgIHJldHVybiBpbnRlcnNlY3Rpb24oc2Nyb2xsUmVjdCwg
ZGFtYWdlZFJlY3QpOworfQorCitJbnRSZWN0IFBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0
ZTo6Y2FsY3VsYXRlUGFpbnRCb3VuZHMoKSBjb25zdAoreworICAgIEludFJlY3QgYm91bmRzOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFpbnRSZWN0cy5zaXplKCk7ICsraSkKKyAgICAg
ICAgYm91bmRzLnVuaXRlKHBhaW50UmVjdHNbaV0pOworICAgIHJldHVybiBib3VuZHM7Cit9CisK
K2Jvb2wgUGFpbnRBZ2dyZWdhdG9yOjpoYXNQZW5kaW5nVXBkYXRlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gIW1fdXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpIHx8ICFtX3VwZGF0ZS5wYWludFJl
Y3RzLmlzRW1wdHkoKTsKK30KKwordm9pZCBQYWludEFnZ3JlZ2F0b3I6OmNsZWFyUGVuZGluZ1Vw
ZGF0ZSgpCit7CisgICAgbV91cGRhdGUgPSBQZW5kaW5nVXBkYXRlKCk7Cit9CisKK3ZvaWQgUGFp
bnRBZ2dyZWdhdG9yOjpwb3BQZW5kaW5nVXBkYXRlKFBlbmRpbmdVcGRhdGUqIHVwZGF0ZSkKK3sK
KyAgICAvLyBDb21iaW5lIHBhaW50IHJlY3RzIGlmIHRoZWlyIGNvbWJpbmVkIGFyZWEgaXMgbm90
IHN1ZmZpY2llbnRseSBsZXNzIHRoYW4KKyAgICAvLyB0aGUgYXJlYSBvZiB0aGUgdW5pb24gb2Yg
YWxsIHBhaW50IHJlY3RzLiBXZSBza2lwIHRoaXMgaWYgdGhlcmUgaXMgYQorICAgIC8vIHNjcm9s
bCByZWN0IHNpbmNlIHNjcm9sbGluZyBiZW5lZml0cyBmcm9tIHNtYWxsZXIgcGFpbnQgcmVjdHMu
CisgICAgaWYgKG1fdXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpICYmIG1fdXBkYXRlLnBhaW50
UmVjdHMuc2l6ZSgpID4gMSkgeworICAgICAgICBpbnQgcGFpbnRBcmVhID0gMDsKKyAgICAgICAg
SW50UmVjdCB1bmlvblJlY3Q7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91cGRh
dGUucGFpbnRSZWN0cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgcGFpbnRBcmVhICs9IGNh
bGN1bGF0ZUFyZWEobV91cGRhdGUucGFpbnRSZWN0c1tpXSk7CisgICAgICAgICAgICB1bmlvblJl
Y3QudW5pdGUobV91cGRhdGUucGFpbnRSZWN0c1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgaW50
IHVuaW9uQXJlYSA9IGNhbGN1bGF0ZUFyZWEodW5pb25SZWN0KTsKKyAgICAgICAgaWYgKGZsb2F0
KHBhaW50QXJlYSkgLyBmbG9hdCh1bmlvbkFyZWEpID4gbWF4UGFpbnRSZWN0c0FyZWFSYXRpbykK
KyAgICAgICAgICAgIGNvbWJpbmVQYWludFJlY3RzKCk7CisgICAgfQorICAgICp1cGRhdGUgPSBt
X3VwZGF0ZTsKKyAgICBjbGVhclBlbmRpbmdVcGRhdGUoKTsKK30KKwordm9pZCBQYWludEFnZ3Jl
Z2F0b3I6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8gQ29t
YmluZSBvdmVybGFwcGluZyBwYWludHMgdXNpbmcgc21hbGxlc3QgYm91bmRpbmcgYm94LgorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91cGRhdGUucGFpbnRSZWN0cy5zaXplKCk7ICsraSkg
eworICAgICAgICBjb25zdCBJbnRSZWN0JiBleGlzdGluZ1JlY3QgPSBtX3VwZGF0ZS5wYWludFJl
Y3RzW2ldOworICAgICAgICBpZiAoZXhpc3RpbmdSZWN0LmNvbnRhaW5zKHJlY3QpKSAvLyBPcHRp
bWl6ZSBvdXQgcmVkdW5kYW5jeS4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHJl
Y3QuaW50ZXJzZWN0cyhleGlzdGluZ1JlY3QpIHx8IHNoYXJlc0VkZ2UocmVjdCwgZXhpc3RpbmdS
ZWN0KSkgeworICAgICAgICAgICAgLy8gUmUtaW52YWxpZGF0ZSBpbiBjYXNlIHRoZSB1bmlvbiBp
bnRlcnNlY3RzIG90aGVyIHBhaW50IHJlY3RzLgorICAgICAgICAgICAgSW50UmVjdCBjb21iaW5l
ZFJlY3QgPSB1bmlvblJlY3QoZXhpc3RpbmdSZWN0LCByZWN0KTsKKyAgICAgICAgICAgIG1fdXBk
YXRlLnBhaW50UmVjdHMucmVtb3ZlKGkpOworICAgICAgICAgICAgaW52YWxpZGF0ZVJlY3QoY29t
YmluZWRSZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIEFkZCBhIG5vbi1vdmVybGFwcGluZyBwYWludC4KKyAgICBtX3VwZGF0ZS5wYWludFJlY3Rz
LmFwcGVuZChyZWN0KTsKKworICAgIC8vIElmIHRoZSBuZXcgcGFpbnQgb3ZlcmxhcHMgd2l0aCBh
IHNjcm9sbCwgdGhlbiBpdCBmb3JjZXMgYW4gaW52YWxpZGF0aW9uIG9mCisgICAgLy8gdGhlIHNj
cm9sbC4gSWYgdGhlIG5ldyBwYWludCBpcyBjb250YWluZWQgYnkgYSBzY3JvbGwsIHRoZW4gdHJp
bSBvZmYgdGhlCisgICAgLy8gc2Nyb2xsIGRhbWFnZSB0byBhdm9pZCByZWR1bmRhbnQgcGFpbnRp
bmcuCisgICAgaWYgKCFtX3VwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBp
ZiAoc2hvdWxkSW52YWxpZGF0ZVNjcm9sbFJlY3QocmVjdCkpCisgICAgICAgICAgICBpbnZhbGlk
YXRlU2Nyb2xsUmVjdCgpOworICAgICAgICBlbHNlIGlmIChtX3VwZGF0ZS5zY3JvbGxSZWN0LmNv
bnRhaW5zKHJlY3QpKSB7CisgICAgICAgICAgICBtX3VwZGF0ZS5wYWludFJlY3RzW21fdXBkYXRl
LnBhaW50UmVjdHMuc2l6ZSgpIC0gMV0gPQorICAgICAgICAgICAgICAgIHN1YnRyYWN0SW50ZXJz
ZWN0aW9uKHJlY3QsIG1fdXBkYXRlLmNhbGN1bGF0ZVNjcm9sbERhbWFnZSgpKTsKKyAgICAgICAg
ICAgIGlmIChtX3VwZGF0ZS5wYWludFJlY3RzW21fdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpIC0g
MV0uaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1fdXBkYXRlLnBhaW50UmVjdHMucmVtb3Zl
KG1fdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpIC0gMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAobV91cGRhdGUucGFpbnRSZWN0cy5zaXplKCkgPiBtYXhQYWludFJlY3RzKQorICAgICAg
ICBjb21iaW5lUGFpbnRSZWN0cygpOworCisgICAgLy8gVHJhY2sgaG93IGxhcmdlIHRoZSBwYWlu
dFJlY3RzIHZlY3RvciBncm93cyBkdXJpbmcgYW4gaW52YWxpZGF0aW9uCisgICAgLy8gc2VxdWVu
Y2UuIE5vdGU6IEEgc3Vic2VxdWVudCBpbnZhbGlkYXRpb24gbWF5IGVuZCB1cCBiZWluZyBjb21i
aW5lZAorICAgIC8vIHdpdGggYWxsIGV4aXN0aW5nIHBhaW50cywgd2hpY2ggbWVhbnMgdGhhdCB0
cmFja2luZyB0aGUgc2l6ZSBvZgorICAgIC8vIHBhaW50UmVjdHMgYXQgdGhlIHRpbWUgd2hlbiBw
b3BQZW5kaW5nVXBkYXRlKCkgaXMgY2FsbGVkIG1heSBtYXNrCisgICAgLy8gY2VydGFpbiBwZXJm
b3JtYW5jZSBwcm9ibGVtcy4KKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+aGlzdG9ncmFt
Q3VzdG9tQ291bnRzKCJNUEFyY2guUldfSW50ZXJtZWRpYXRlUGFpbnRSZWN0Q291bnQiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91cGRhdGUucGFpbnRSZWN0
cy5zaXplKCksIDEsIDEwMCwgNTApOworfQorCit2b2lkIFBhaW50QWdncmVnYXRvcjo6c2Nyb2xs
UmVjdChpbnQgZHgsIGludCBkeSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgLy8g
V2Ugb25seSBzdXBwb3J0IHNjcm9sbGluZyBhbG9uZyBvbmUgYXhpcyBhdCBhIHRpbWUuCisgICAg
aWYgKGR4ICYmIGR5KSB7CisgICAgICAgIGludmFsaWRhdGVSZWN0KGNsaXBSZWN0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIGNhbiBvbmx5IHNjcm9sbCBvbmUgcmVjdCBh
dCBhIHRpbWUuCisgICAgaWYgKCFtX3VwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHkoKSAmJiBtX3Vw
ZGF0ZS5zY3JvbGxSZWN0ICE9IGNsaXBSZWN0KSB7CisgICAgICAgIGludmFsaWRhdGVSZWN0KGNs
aXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEFnYWluLCB3ZSBvbmx5
IHN1cHBvcnQgc2Nyb2xsaW5nIGFsb25nIG9uZSBheGlzIGF0IGEgdGltZS4gTWFrZSBzdXJlIHRo
aXMKKyAgICAvLyB1cGRhdGUgZG9lc24ndCBzY3JvbGwgb24gYSBkaWZmZXJlbnQgYXhpcyB0aGFu
IGFueSBleGlzdGluZyBvbmUuCisgICAgaWYgKChkeCAmJiBtX3VwZGF0ZS5zY3JvbGxEZWx0YS55
KCkpIHx8IChkeSAmJiBtX3VwZGF0ZS5zY3JvbGxEZWx0YS54KCkpKSB7CisgICAgICAgIGludmFs
aWRhdGVSZWN0KGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRo
ZSBzY3JvbGwgcmVjdCBpcyBuZXcgb3IgaXNuJ3QgY2hhbmdpbmcgKHRob3VnaCB0aGUgc2Nyb2xs
IGFtb3VudCBtYXkKKyAgICAvLyBiZSBjaGFuZ2luZykuCisgICAgbV91cGRhdGUuc2Nyb2xsUmVj
dCA9IGNsaXBSZWN0OworICAgIG1fdXBkYXRlLnNjcm9sbERlbHRhLm1vdmUoZHgsIGR5KTsKKwor
ICAgIC8vIFdlIG1pZ2h0IGhhdmUganVzdCB3aXBlZCBvdXQgYSBwcmUtZXhpc3Rpbmcgc2Nyb2xs
LgorICAgIGlmIChtX3VwZGF0ZS5zY3JvbGxEZWx0YSA9PSBJbnRQb2ludCgpKSB7CisgICAgICAg
IG1fdXBkYXRlLnNjcm9sbFJlY3QgPSBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBBZGp1c3QgYW55IGNvbnRhaW5lZCBwYWludCByZWN0cyBhbmQgY2hlY2sgZm9y
IGFueSBvdmVybGFwcGluZyBwYWludHMuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Vw
ZGF0ZS5wYWludFJlY3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX3VwZGF0ZS5zY3Jv
bGxSZWN0LmNvbnRhaW5zKG1fdXBkYXRlLnBhaW50UmVjdHNbaV0pKSB7CisgICAgICAgICAgICBt
X3VwZGF0ZS5wYWludFJlY3RzW2ldID0gc2Nyb2xsUGFpbnRSZWN0KG1fdXBkYXRlLnBhaW50UmVj
dHNbaV0sIGR4LCBkeSk7CisgICAgICAgICAgICAvLyBUaGUgcmVjdCBtYXkgaGF2ZSBiZWVuIHNj
cm9sbGVkIG91dCBvZiB2aWV3LgorICAgICAgICAgICAgaWYgKG1fdXBkYXRlLnBhaW50UmVjdHNb
aV0uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbV91cGRhdGUucGFpbnRSZWN0cy5yZW1v
dmUoaSk7CisgICAgICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKG1fdXBkYXRlLnNjcm9sbFJlY3QuaW50ZXJzZWN0cyhtX3VwZGF0ZS5wYWludFJlY3Rz
W2ldKSkgeworICAgICAgICAgICAgaW52YWxpZGF0ZVNjcm9sbFJlY3QoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHRoZSBuZXcgc2Nyb2xsIG92
ZXJsYXBzIHRvbyBtdWNoIHdpdGggY29udGFpbmVkIHBhaW50IHJlY3RzLCB0aGVuIGZvcmNlCisg
ICAgLy8gYW4gaW52YWxpZGF0aW9uIG9mIHRoZSBzY3JvbGwuCisgICAgaWYgKHNob3VsZEludmFs
aWRhdGVTY3JvbGxSZWN0KEludFJlY3QoKSkpCisgICAgICAgIGludmFsaWRhdGVTY3JvbGxSZWN0
KCk7Cit9CisKK0ludFJlY3QgUGFpbnRBZ2dyZWdhdG9yOjpzY3JvbGxQYWludFJlY3QoY29uc3Qg
SW50UmVjdCYgcGFpbnRSZWN0LCBpbnQgZHgsIGludCBkeSkgY29uc3QKK3sKKyAgICBJbnRSZWN0
IHJlc3VsdCA9IHBhaW50UmVjdDsKKworICAgIHJlc3VsdC5tb3ZlKGR4LCBkeSk7CisgICAgcmVz
dWx0ID0gaW50ZXJzZWN0aW9uKG1fdXBkYXRlLnNjcm9sbFJlY3QsIHJlc3VsdCk7CisKKyAgICAv
LyBTdWJ0cmFjdCBvdXQgdGhlIHNjcm9sbCBkYW1hZ2UgcmVjdCB0byBhdm9pZCByZWR1bmRhbnQg
cGFpbnRpbmcuCisgICAgcmV0dXJuIHN1YnRyYWN0SW50ZXJzZWN0aW9uKHJlc3VsdCwgbV91cGRh
dGUuY2FsY3VsYXRlU2Nyb2xsRGFtYWdlKCkpOworfQorCitib29sIFBhaW50QWdncmVnYXRvcjo6
c2hvdWxkSW52YWxpZGF0ZVNjcm9sbFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sK
KyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghbV91cGRhdGUuc2Nyb2xs
UmVjdC5pbnRlcnNlY3RzKHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGlmICghbV91cGRhdGUuc2Nyb2xsUmVjdC5jb250YWlucyhyZWN0KSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIENoZWNrIGlmIHRoZSBjb21iaW5lZCBhcmVh
IG9mIGFsbCBjb250YWluZWQgcGFpbnQgcmVjdHMgcGx1cyB0aGlzIG5ldworICAgIC8vIHJlY3Qg
Y29tZXMgdG9vIGNsb3NlIHRvIHRoZSBhcmVhIG9mIHRoZSBzY3JvbGxSZWN0LiBJZiBzbywgdGhl
biB3ZQorICAgIC8vIG1pZ2h0IGFzIHdlbGwgaW52YWxpZGF0ZSB0aGUgc2Nyb2xsIHJlY3QuCisK
KyAgICBpbnQgcGFpbnRBcmVhID0gY2FsY3VsYXRlQXJlYShyZWN0KTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
Y29uc3QgSW50UmVjdCYgZXhpc3RpbmdSZWN0ID0gbV91cGRhdGUucGFpbnRSZWN0c1tpXTsKKyAg
ICAgICAgaWYgKG1fdXBkYXRlLnNjcm9sbFJlY3QuY29udGFpbnMoZXhpc3RpbmdSZWN0KSkKKyAg
ICAgICAgICAgIHBhaW50QXJlYSArPSBjYWxjdWxhdGVBcmVhKGV4aXN0aW5nUmVjdCk7CisgICAg
fQorICAgIGludCBzY3JvbGxBcmVhID0gY2FsY3VsYXRlQXJlYShtX3VwZGF0ZS5zY3JvbGxSZWN0
KTsKKyAgICBpZiAoZmxvYXQocGFpbnRBcmVhKSAvIGZsb2F0KHNjcm9sbEFyZWEpID4gbWF4UmVk
dW5kYW50UGFpbnRUb1Njcm9sbEFyZWEpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFBhaW50QWdncmVnYXRvcjo6aW52YWxpZGF0ZVNjcm9sbFJl
Y3QoKQoreworICAgIEludFJlY3Qgc2Nyb2xsUmVjdCA9IG1fdXBkYXRlLnNjcm9sbFJlY3Q7Cisg
ICAgbV91cGRhdGUuc2Nyb2xsUmVjdCA9IEludFJlY3QoKTsKKyAgICBtX3VwZGF0ZS5zY3JvbGxE
ZWx0YSA9IEludFBvaW50KCk7CisgICAgaW52YWxpZGF0ZVJlY3Qoc2Nyb2xsUmVjdCk7Cit9CisK
K3ZvaWQgUGFpbnRBZ2dyZWdhdG9yOjpjb21iaW5lUGFpbnRSZWN0cygpCit7CisgICAgLy8gQ29t
YmluZSBwYWludCByZWN0cyBkbyB0byBhdCBtb3N0IHR3byByZWN0czogb25lIGluc2lkZSB0aGUg
c2Nyb2xsUmVjdAorICAgIC8vIGFuZCBvbmUgb3V0c2lkZSB0aGUgc2Nyb2xsUmVjdC4gSWYgdGhl
cmUgaXMgbm8gc2Nyb2xsUmVjdCwgdGhlbiBqdXN0CisgICAgLy8gdXNlIHRoZSBzbWFsbGVzdCBi
b3VuZGluZyBib3ggZm9yIGFsbCBwYWludCByZWN0cy4KKyAgICAvLworICAgIC8vIE5PVEU6IFRo
aXMgaXMgYSBmYWlybHkgc2ltcGxlIGFsZ29yaXRobS4gV2UgY291bGQgZ2V0IGZhbmNpZXIgYnkg
b25seQorICAgIC8vIGNvbWJpbmluZyB0d28gcmVjdHMgdG8gZ2V0IHVzIHVuZGVyIHRoZSBtYXhQ
YWludFJlY3RzIGxpbWl0LCBidXQgaWYgd2UKKyAgICAvLyByZWFjaCB0aGlzIG1ldGhvZCB0aGVu
IGl0IG1lYW5zIHdlJ3JlIGhpdHRpbmcgYSByYXJlIGNhc2UsIHNvIHRoZXJlJ3Mgbm8KKyAgICAv
LyBuZWVkIHRvIG92ZXItb3B0aW1pemUgaXQuCisgICAgLy8KKyAgICBpZiAobV91cGRhdGUuc2Ny
b2xsUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgSW50UmVjdCBib3VuZHMgPSBtX3VwZGF0ZS5j
YWxjdWxhdGVQYWludEJvdW5kcygpOworICAgICAgICBtX3VwZGF0ZS5wYWludFJlY3RzLmNsZWFy
KCk7CisgICAgICAgIG1fdXBkYXRlLnBhaW50UmVjdHMuYXBwZW5kKGJvdW5kcyk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgSW50UmVjdCBpbm5lciwgb3V0ZXI7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV91cGRhdGUucGFpbnRSZWN0cy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgY29uc3QgSW50UmVjdCYgZXhpc3RpbmdSZWN0ID0gbV91cGRhdGUucGFpbnRSZWN0c1tpXTsK
KyAgICAgICAgICAgIGlmIChtX3VwZGF0ZS5zY3JvbGxSZWN0LmNvbnRhaW5zKGV4aXN0aW5nUmVj
dCkpCisgICAgICAgICAgICAgICAgaW5uZXIudW5pdGUoZXhpc3RpbmdSZWN0KTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXRlci51bml0ZShleGlzdGluZ1JlY3QpOworICAg
ICAgICB9CisgICAgICAgIG1fdXBkYXRlLnBhaW50UmVjdHMuY2xlYXIoKTsKKyAgICAgICAgbV91
cGRhdGUucGFpbnRSZWN0cy5hcHBlbmQoaW5uZXIpOworICAgICAgICBtX3VwZGF0ZS5wYWludFJl
Y3RzLmFwcGVuZChvdXRlcik7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL3BhaW50aW5nL1BhaW50QWdncmVn
YXRvci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvcGFpbnRpbmcvUGFpbnRBZ2dyZWdh
dG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjA4M2U0MDE3NWE5MWFlMDg2MzVhY2IwMGMzYTI1ZmQ5NzMzMzJi
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL3BhaW50aW5n
L1BhaW50QWdncmVnYXRvci5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhaW50QWdncmVnYXRv
cl9oCisjZGVmaW5lIFBhaW50QWdncmVnYXRvcl9oCisKKyNpbmNsdWRlICJJbnRQb2ludC5oIgor
I2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCisvLyBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBhZ2dyZWdhdGlu
ZyBtdWx0aXBsZSBpbnZhbGlkYXRpb24gYW5kIHNjcm9sbAorLy8gY29tbWFuZHMgdG8gcHJvZHVj
ZSBhIHNjcm9sbCBhbmQgcmVwYWludCBzZXF1ZW5jZS4KK2NsYXNzIFBhaW50QWdncmVnYXRvciB7
CitwdWJsaWM6CisgICAgLy8gVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGFuIGFnZ3JlZ2F0aW9u
IG9mIGludmFsaWRhdGVSZWN0IGFuZCBzY3JvbGxSZWN0CisgICAgLy8gY2FsbHMuIElmIHxzY3Jv
bGxSZWN0fCBpcyBub24tZW1wdHksIHRoZW4gdGhhdCByZWN0IHNob3VsZCBiZSBzY3JvbGxlZAor
ICAgIC8vIGJ5IHRoZSBhbW91bnQgc3BlY2lmaWVkIGJ5IHxzY3JvbGxEZWx0YXwuIElmIHxwYWlu
dFJlY3RzfCBpcyBub24tZW1wdHksCisgICAgLy8gdGhlbiB0aG9zZSByZWN0cyBzaG91bGQgYmUg
cmVwYWludGVkLiBJZiB8c2Nyb2xsUmVjdHwgYW5kIHxwYWludFJlY3RzfAorICAgIC8vIGFyZSBu
b24tZW1wdHksIHRoZW4gc2Nyb2xsaW5nIHNob3VsZCBiZSBwZXJmb3JtZWQgYmVmb3JlIHJlcGFp
bnRpbmcuCisgICAgLy8gfHNjcm9sbERlbHRhfCBjYW4gb25seSBzcGVjaWZ5IHNjcm9sbGluZyBp
biBvbmUgZGlyZWN0aW9uIChpLmUuLCB0aGUgeAorICAgIC8vIGFuZCB5IG1lbWJlcnMgY2Fubm90
IGJvdGggYmUgbm9uLXplcm8pLgorICAgIHN0cnVjdCBQZW5kaW5nVXBkYXRlIHsKKyAgICAgICAg
UGVuZGluZ1VwZGF0ZSgpOworICAgICAgICB+UGVuZGluZ1VwZGF0ZSgpOworCisgICAgICAgIC8v
IFJldHVybnMgdGhlIHJlY3QgZGFtYWdlZCBieSBzY3JvbGxpbmcgd2l0aGluIHxzY3JvbGxSZWN0
fCBieQorICAgICAgICAvLyB8c2Nyb2xsRGVsdGF8LiBUaGlzIHJlY3QgbXVzdCBiZSByZXBhaW50
ZWQuCisgICAgICAgIFdlYkNvcmU6OkludFJlY3QgY2FsY3VsYXRlU2Nyb2xsRGFtYWdlKCkgY29u
c3Q7CisKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgc21hbGxlc3QgcmVjdCBjb250YWluaW5nIGFs
bCBwYWludCByZWN0cy4KKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBjYWxjdWxhdGVQYWludEJv
dW5kcygpIGNvbnN0OworCisgICAgICAgIFdlYkNvcmU6OkludFBvaW50IHNjcm9sbERlbHRhOwor
ICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHNjcm9sbFJlY3Q7CisgICAgICAgIFdURjo6VmVjdG9y
PFdlYkNvcmU6OkludFJlY3Q+IHBhaW50UmVjdHM7CisgICAgfTsKKworICAgIC8vIFRoZXJlIGlz
IGEgUGVuZGluZ1VwZGF0ZSBpZiBpbnZhbGlkYXRlUmVjdCBvciBzY3JvbGxSZWN0IHdlcmUgY2Fs
bGVkIGFuZAorICAgIC8vIENsZWFyUGVuZGluZ1VwZGF0ZSB3YXMgbm90IGNhbGxlZC4KKyAgICBi
b29sIGhhc1BlbmRpbmdVcGRhdGUoKSBjb25zdDsKKyAgICB2b2lkIGNsZWFyUGVuZGluZ1VwZGF0
ZSgpOworCisgICAgLy8gRmlsbHMgfHVwZGF0ZXwgYW5kIGNsZWFycyB0aGUgcGVuZGluZyB1cGRh
dGUuCisgICAgdm9pZCBwb3BQZW5kaW5nVXBkYXRlKFBlbmRpbmdVcGRhdGUqKTsKKworICAgIC8v
IFRoZSBnaXZlbiByZWN0IHNob3VsZCBiZSByZXBhaW50ZWQuCisgICAgdm9pZCBpbnZhbGlkYXRl
UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisKKyAgICAvLyBUaGUgZ2l2ZW4gcmVjdCBz
aG91bGQgYmUgc2Nyb2xsZWQgYnkgdGhlIGdpdmVuIGFtb3VudHMuCisgICAgdm9pZCBzY3JvbGxS
ZWN0KGludCBkeCwgaW50IGR5LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CisK
K3ByaXZhdGU6CisgICAgV2ViQ29yZTo6SW50UmVjdCBzY3JvbGxQYWludFJlY3QoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgcGFpbnRSZWN0LCBpbnQgZHgsIGludCBkeSkgY29uc3Q7CisgICAgYm9v
bCBzaG91bGRJbnZhbGlkYXRlU2Nyb2xsUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29u
c3Q7CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsUmVjdCgpOworICAgIHZvaWQgY29tYmluZVBh
aW50UmVjdHMoKTsKKworICAgIFBlbmRpbmdVcGRhdGUgbV91cGRhdGU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1BhaW50QWdncmVnYXRvclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9QYWludEFnZ3JlZ2F0b3JUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mY2YzNzRiNDc2MDMz
OGYzYjY0N2VlMmY5NmFiZDFjZDFjMDRlMzJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9QYWludEFnZ3JlZ2F0b3JUZXN0LmNwcApAQCAtMCwwICsxLDQ5
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwYWludGluZy9QYWludEFnZ3JlZ2F0
b3IuaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNlIHsKKworVEVTVChQYWlu
dEFnZ3JlZ2F0b3IsIEluaXRpYWxTdGF0ZSkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsK
KyAgICBFWFBFQ1RfRkFMU0UoZ3JlZy5oYXNQZW5kaW5nVXBkYXRlKCkpOworfQorCitURVNUKFBh
aW50QWdncmVnYXRvciwgU2luZ2xlSW52YWxpZGF0aW9uKQoreworICAgIFBhaW50QWdncmVnYXRv
ciBncmVnOworCisgICAgSW50UmVjdCByZWN0KDIsIDQsIDEwLCAxNik7CisgICAgZ3JlZy5pbnZh
bGlkYXRlUmVjdChyZWN0KTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0
ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdy
ZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIEVYUEVDVF9UUlVFKHVwZGF0ZS5z
Y3JvbGxSZWN0LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUX0VRKDFVLCB1cGRhdGUucGFpbnRSZWN0
cy5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKHJlY3QsIHVwZGF0ZS5wYWludFJlY3RzWzBdKTsK
K30KKworVEVTVChQYWludEFnZ3JlZ2F0b3IsIERvdWJsZURpc2pvaW50SW52YWxpZGF0aW9uKQor
eworICAgIFBhaW50QWdncmVnYXRvciBncmVnOworCisgICAgSW50UmVjdCByMSgyLCA0LCAyLCA0
MCk7CisgICAgSW50UmVjdCByMig0LCAyLCA0MCwgMik7CisKKyAgICBncmVnLmludmFsaWRhdGVS
ZWN0KHIxKTsKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHIyKTsKKworICAgIEludFJlY3QgZXhw
ZWN0ZWRCb3VuZHMgPSB1bmlvblJlY3QocjEsIHIyKTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcu
aGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUg
dXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIEVYUEVD
VF9UUlVFKHVwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0VRKDJVLCB1
cGRhdGUucGFpbnRSZWN0cy5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKGV4cGVjdGVkQm91bmRz
LCB1cGRhdGUuY2FsY3VsYXRlUGFpbnRCb3VuZHMoKSk7Cit9CisKK1RFU1QoUGFpbnRBZ2dyZWdh
dG9yLCBEaXNqb2ludEludmFsaWRhdGlvbnNDb21iaW5lZCkKK3sKKyAgICBQYWludEFnZ3JlZ2F0
b3IgZ3JlZzsKKworICAgIC8vIE1ha2UgdGhlIHJlY3RhbmdsZXMgc3VjaCB0aGF0IHRoZXkgZG9u
J3Qgb3ZlcmxhcCBidXQgY292ZXIgYSB2ZXJ5IGxhcmdlCisgICAgLy8gcGVyY2VudGFnZSBvZiB0
aGUgYXJlYSBvZiBjb3ZlcmVkIGJ5IHRoZWlyIHVuaW9uLiBUaGlzIGlzIHNvIHdlJ3JlIG5vdAor
ICAgIC8vIHZlcnkgc2Vuc2l0aXZlIHRvIHRoZSBjb21iaW5pbmcgaGV1cmlzdGljIGluIHRoZSBw
YWludCBhZ2dyZWdhdG9yLgorICAgIEludFJlY3QgcjEoMiwgNCwgMiwgMTAwMCk7CisgICAgSW50
UmVjdCByMig1LCAyLCAyLCAxMDAwKTsKKworICAgIGdyZWcuaW52YWxpZGF0ZVJlY3QocjEpOwor
ICAgIGdyZWcuaW52YWxpZGF0ZVJlY3QocjIpOworCisgICAgSW50UmVjdCBleHBlY3RlZEJvdW5k
cyA9IHVuaW9uUmVjdChyMSwgcjIpOworCisgICAgRVhQRUNUX1RSVUUoZ3JlZy5oYXNQZW5kaW5n
VXBkYXRlKCkpOworICAgIFBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0ZSB1cGRhdGU7Cisg
ICAgZ3JlZy5wb3BQZW5kaW5nVXBkYXRlKCZ1cGRhdGUpOworCisgICAgRVhQRUNUX1RSVUUodXBk
YXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlRfRVEoMVUsIHVwZGF0ZS5wYWlu
dFJlY3RzLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRCb3VuZHMsIHVwZGF0ZS5w
YWludFJlY3RzWzBdKTsKK30KKworVEVTVChQYWludEFnZ3JlZ2F0b3IsIFNpbmdsZVNjcm9sbCkK
K3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJlY3QgcmVjdCgxLCAyLCAz
LCA0KTsKKyAgICBJbnRQb2ludCBkZWx0YSgxLCAwKTsKKyAgICBncmVnLnNjcm9sbFJlY3QoZGVs
dGEueCgpLCBkZWx0YS55KCksIHJlY3QpOworCisgICAgRVhQRUNUX1RSVUUoZ3JlZy5oYXNQZW5k
aW5nVXBkYXRlKCkpOworICAgIFBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0ZSB1cGRhdGU7
CisgICAgZ3JlZy5wb3BQZW5kaW5nVXBkYXRlKCZ1cGRhdGUpOworCisgICAgRVhQRUNUX1RSVUUo
dXBkYXRlLnBhaW50UmVjdHMuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodXBkYXRlLnNj
cm9sbFJlY3QuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9FUShyZWN0LCB1cGRhdGUuc2Nyb2xs
UmVjdCk7CisKKyAgICBFWFBFQ1RfRVEoZGVsdGEueCgpLCB1cGRhdGUuc2Nyb2xsRGVsdGEueCgp
KTsKKyAgICBFWFBFQ1RfRVEoZGVsdGEueSgpLCB1cGRhdGUuc2Nyb2xsRGVsdGEueSgpKTsKKwor
ICAgIEludFJlY3QgcmVzdWx0aW5nRGFtYWdlID0gdXBkYXRlLmNhbGN1bGF0ZVNjcm9sbERhbWFn
ZSgpOworICAgIEludFJlY3QgZXhwZWN0ZWREYW1hZ2UoMSwgMiwgMSwgNCk7CisgICAgRVhQRUNU
X0VRKGV4cGVjdGVkRGFtYWdlLCByZXN1bHRpbmdEYW1hZ2UpOworfQorCitURVNUKFBhaW50QWdn
cmVnYXRvciwgRG91YmxlT3ZlcmxhcHBpbmdTY3JvbGwpCit7CisgICAgUGFpbnRBZ2dyZWdhdG9y
IGdyZWc7CisKKyAgICBJbnRSZWN0IHJlY3QoMSwgMiwgMywgNCk7CisgICAgSW50UG9pbnQgZGVs
dGExKDEsIDApOworICAgIEludFBvaW50IGRlbHRhMigxLCAwKTsKKyAgICBncmVnLnNjcm9sbFJl
Y3QoZGVsdGExLngoKSwgZGVsdGExLnkoKSwgcmVjdCk7CisgICAgZ3JlZy5zY3JvbGxSZWN0KGRl
bHRhMi54KCksIGRlbHRhMi55KCksIHJlY3QpOworCisgICAgRVhQRUNUX1RSVUUoZ3JlZy5oYXNQ
ZW5kaW5nVXBkYXRlKCkpOworICAgIFBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0ZSB1cGRh
dGU7CisgICAgZ3JlZy5wb3BQZW5kaW5nVXBkYXRlKCZ1cGRhdGUpOworCisgICAgRVhQRUNUX1RS
VUUodXBkYXRlLnBhaW50UmVjdHMuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodXBkYXRl
LnNjcm9sbFJlY3QuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9FUShyZWN0LCB1cGRhdGUuc2Ny
b2xsUmVjdCk7CisKKyAgICBJbnRQb2ludCBleHBlY3RlZERlbHRhKGRlbHRhMS54KCkgKyBkZWx0
YTIueCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGExLnkoKSArIGRlbHRhMi55
KCkpOworICAgIEVYUEVDVF9FUShleHBlY3RlZERlbHRhLngoKSwgdXBkYXRlLnNjcm9sbERlbHRh
LngoKSk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkRGVsdGEueSgpLCB1cGRhdGUuc2Nyb2xsRGVs
dGEueSgpKTsKKworICAgIEludFJlY3QgcmVzdWx0aW5nRGFtYWdlID0gdXBkYXRlLmNhbGN1bGF0
ZVNjcm9sbERhbWFnZSgpOworICAgIEludFJlY3QgZXhwZWN0ZWREYW1hZ2UoMSwgMiwgMiwgNCk7
CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkRGFtYWdlLCByZXN1bHRpbmdEYW1hZ2UpOworfQorCitU
RVNUKFBhaW50QWdncmVnYXRvciwgTmVnYXRpbmdTY3JvbGwpCit7CisgICAgUGFpbnRBZ2dyZWdh
dG9yIGdyZWc7CisKKyAgICAvLyBTY3JvbGwgdHdpY2UgaW4gb3Bwb3NpdGUgZGlyZWN0aW9ucyBi
eSBlcXVhbCBhbW91bnRzLiBUaGUgcmVzdWx0CisgICAgLy8gc2hvdWxkIGJlIG5vIHNjcm9sbGlu
Zy4KKworICAgIEludFJlY3QgcmVjdCgxLCAyLCAzLCA0KTsKKyAgICBJbnRQb2ludCBkZWx0YTEo
MSwgMCk7CisgICAgSW50UG9pbnQgZGVsdGEyKC0xLCAwKTsKKyAgICBncmVnLnNjcm9sbFJlY3Qo
ZGVsdGExLngoKSwgZGVsdGExLnkoKSwgcmVjdCk7CisgICAgZ3JlZy5zY3JvbGxSZWN0KGRlbHRh
Mi54KCksIGRlbHRhMi55KCksIHJlY3QpOworCisgICAgRVhQRUNUX0ZBTFNFKGdyZWcuaGFzUGVu
ZGluZ1VwZGF0ZSgpKTsKK30KKworVEVTVChQYWludEFnZ3JlZ2F0b3IsIERpYWdvbmFsU2Nyb2xs
KQoreworICAgIFBhaW50QWdncmVnYXRvciBncmVnOworCisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9y
dCBvcHRpbWl6ZWQgZGlhZ29uYWwgc2Nyb2xsaW5nLCBzbyB0aGlzIHNob3VsZCByZXN1bHQgaW4K
KyAgICAvLyByZXBhaW50aW5nLgorCisgICAgSW50UmVjdCByZWN0KDEsIDIsIDMsIDQpOworICAg
IEludFBvaW50IGRlbHRhKDEsIDEpOworICAgIGdyZWcuc2Nyb2xsUmVjdChkZWx0YS54KCksIGRl
bHRhLnkoKSwgcmVjdCk7CisKKyAgICBFWFBFQ1RfVFJVRShncmVnLmhhc1BlbmRpbmdVcGRhdGUo
KSk7CisgICAgUGFpbnRBZ2dyZWdhdG9yOjpQZW5kaW5nVXBkYXRlIHVwZGF0ZTsKKyAgICBncmVn
LnBvcFBlbmRpbmdVcGRhdGUoJnVwZGF0ZSk7CisKKyAgICBFWFBFQ1RfVFJVRSh1cGRhdGUuc2Ny
b2xsUmVjdC5pc0VtcHR5KCkpOworICAgIEFTU0VSVF9FUSgxVSwgdXBkYXRlLnBhaW50UmVjdHMu
c2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUShyZWN0LCB1cGRhdGUucGFpbnRSZWN0c1swXSk7Cit9
CisKK1RFU1QoUGFpbnRBZ2dyZWdhdG9yLCBDb250YWluZWRQYWludEFmdGVyU2Nyb2xsKQorewor
ICAgIFBhaW50QWdncmVnYXRvciBncmVnOworCisgICAgSW50UmVjdCBzY3JvbGxSZWN0KDAsIDAs
IDEwLCAxMCk7CisgICAgZ3JlZy5zY3JvbGxSZWN0KDIsIDAsIHNjcm9sbFJlY3QpOworCisgICAg
SW50UmVjdCBwYWludFJlY3QoNCwgNCwgMiwgMik7CisgICAgZ3JlZy5pbnZhbGlkYXRlUmVjdChw
YWludFJlY3QpOworCisgICAgRVhQRUNUX1RSVUUoZ3JlZy5oYXNQZW5kaW5nVXBkYXRlKCkpOwor
ICAgIFBhaW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0ZSB1cGRhdGU7CisgICAgZ3JlZy5wb3BQ
ZW5kaW5nVXBkYXRlKCZ1cGRhdGUpOworCisgICAgLy8gZXhwZWN0aW5nIGEgcGFpbnQgcmVjdCBp
bnNpZGUgdGhlIHNjcm9sbCByZWN0CisgICAgRVhQRUNUX0ZBTFNFKHVwZGF0ZS5zY3JvbGxSZWN0
LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0VRKDFVLCB1cGRhdGUucGFpbnRSZWN0cy5zaXplKCkp
OworCisgICAgRVhQRUNUX0VRKHNjcm9sbFJlY3QsIHVwZGF0ZS5zY3JvbGxSZWN0KTsKKyAgICBF
WFBFQ1RfRVEocGFpbnRSZWN0LCB1cGRhdGUucGFpbnRSZWN0c1swXSk7Cit9CisKK1RFU1QoUGFp
bnRBZ2dyZWdhdG9yLCBDb250YWluZWRQYWludEJlZm9yZVNjcm9sbCkKK3sKKyAgICBQYWludEFn
Z3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJlY3QgcGFpbnRSZWN0KDQsIDQsIDIsIDIpOworICAg
IGdyZWcuaW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsKKworICAgIEludFJlY3Qgc2Nyb2xsUmVj
dCgwLCAwLCAxMCwgMTApOworICAgIGdyZWcuc2Nyb2xsUmVjdCgyLCAwLCBzY3JvbGxSZWN0KTsK
KworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFn
Z3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0
ZSgmdXBkYXRlKTsKKworICAgIC8vIEV4cGVjdGluZyBhIHBhaW50IHJlY3QgaW5zaWRlIHRoZSBz
Y3JvbGwgcmVjdAorICAgIEVYUEVDVF9GQUxTRSh1cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkp
OworICAgIEVYUEVDVF9FUSgxVSwgdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpKTsKKworICAgIHBh
aW50UmVjdC5tb3ZlKDIsIDApOworCisgICAgRVhQRUNUX0VRKHNjcm9sbFJlY3QsIHVwZGF0ZS5z
Y3JvbGxSZWN0KTsKKyAgICBFWFBFQ1RfRVEocGFpbnRSZWN0LCB1cGRhdGUucGFpbnRSZWN0c1sw
XSk7Cit9CisKK1RFU1QoUGFpbnRBZ2dyZWdhdG9yLCBDb250YWluZWRQYWludHNCZWZvcmVBbmRB
ZnRlclNjcm9sbCkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJlY3Qg
cGFpbnRSZWN0MSg0LCA0LCAyLCAyKTsKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHBhaW50UmVj
dDEpOworCisgICAgSW50UmVjdCBzY3JvbGxSZWN0KDAsIDAsIDEwLCAxMCk7CisgICAgZ3JlZy5z
Y3JvbGxSZWN0KDIsIDAsIHNjcm9sbFJlY3QpOworCisgICAgSW50UmVjdCBwYWludFJlY3QyKDYs
IDQsIDIsIDIpOworICAgIGdyZWcuaW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0Mik7CisKKyAgICBJ
bnRSZWN0IGV4cGVjdGVkUGFpbnRSZWN0ID0gcGFpbnRSZWN0MjsKKworICAgIEVYUEVDVF9UUlVF
KGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdV
cGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAg
IC8vIEV4cGVjdGluZyBhIHBhaW50IHJlY3QgaW5zaWRlIHRoZSBzY3JvbGwgcmVjdAorICAgIEVY
UEVDVF9GQUxTRSh1cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUSgx
VSwgdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUShzY3JvbGxSZWN0
LCB1cGRhdGUuc2Nyb2xsUmVjdCk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkUGFpbnRSZWN0LCB1
cGRhdGUucGFpbnRSZWN0c1swXSk7Cit9CisKK1RFU1QoUGFpbnRBZ2dyZWdhdG9yLCBMYXJnZUNv
bnRhaW5lZFBhaW50QWZ0ZXJTY3JvbGwpCit7CisgICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7CisK
KyAgICBJbnRSZWN0IHNjcm9sbFJlY3QoMCwgMCwgMTAsIDEwKTsKKyAgICBncmVnLnNjcm9sbFJl
Y3QoMCwgMSwgc2Nyb2xsUmVjdCk7CisKKyAgICBJbnRSZWN0IHBhaW50UmVjdCgwLCAwLCAxMCwg
OSk7IC8vIFJlcGFpbnQgOTAlCisgICAgZ3JlZy5pbnZhbGlkYXRlUmVjdChwYWludFJlY3QpOwor
CisgICAgRVhQRUNUX1RSVUUoZ3JlZy5oYXNQZW5kaW5nVXBkYXRlKCkpOworICAgIFBhaW50QWdn
cmVnYXRvcjo6UGVuZGluZ1VwZGF0ZSB1cGRhdGU7CisgICAgZ3JlZy5wb3BQZW5kaW5nVXBkYXRl
KCZ1cGRhdGUpOworCisgICAgRVhQRUNUX1RSVUUodXBkYXRlLnNjcm9sbFJlY3QuaXNFbXB0eSgp
KTsKKyAgICBFWFBFQ1RfRVEoMVUsIHVwZGF0ZS5wYWludFJlY3RzLnNpemUoKSk7CisKKyAgICBF
WFBFQ1RfRVEoc2Nyb2xsUmVjdCwgdXBkYXRlLnBhaW50UmVjdHNbMF0pOworfQorCitURVNUKFBh
aW50QWdncmVnYXRvciwgTGFyZ2VDb250YWluZWRQYWludEJlZm9yZVNjcm9sbCkKK3sKKyAgICBQ
YWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJlY3QgcGFpbnRSZWN0KDAsIDAsIDEwLCA5
KTsgLy8gUmVwYWludCA5MCUKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7CisK
KyAgICBJbnRSZWN0IHNjcm9sbFJlY3QoMCwgMCwgMTAsIDEwKTsKKyAgICBncmVnLnNjcm9sbFJl
Y3QoMCwgMSwgc2Nyb2xsUmVjdCk7CisKKyAgICBFWFBFQ1RfVFJVRShncmVnLmhhc1BlbmRpbmdV
cGRhdGUoKSk7CisgICAgUGFpbnRBZ2dyZWdhdG9yOjpQZW5kaW5nVXBkYXRlIHVwZGF0ZTsKKyAg
ICBncmVnLnBvcFBlbmRpbmdVcGRhdGUoJnVwZGF0ZSk7CisKKyAgICBFWFBFQ1RfVFJVRSh1cGRh
dGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUSgxVSwgdXBkYXRlLnBhaW50
UmVjdHMuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUShzY3JvbGxSZWN0LCB1cGRhdGUucGFpbnRS
ZWN0c1swXSk7Cit9CisKK1RFU1QoUGFpbnRBZ2dyZWdhdG9yLCBPdmVybGFwcGluZ1BhaW50QmVm
b3JlU2Nyb2xsKQoreworICAgIFBhaW50QWdncmVnYXRvciBncmVnOworCisgICAgSW50UmVjdCBw
YWludFJlY3QoNCwgNCwgMTAsIDIpOworICAgIGdyZWcuaW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0
KTsKKworICAgIEludFJlY3Qgc2Nyb2xsUmVjdCgwLCAwLCAxMCwgMTApOworICAgIGdyZWcuc2Ny
b2xsUmVjdCgyLCAwLCBzY3JvbGxSZWN0KTsKKworICAgIEludFJlY3QgZXhwZWN0ZWRQYWludFJl
Y3QgPSB1bmlvblJlY3Qoc2Nyb2xsUmVjdCwgcGFpbnRSZWN0KTsKKworICAgIEVYUEVDVF9UUlVF
KGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdV
cGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAg
IEVYUEVDVF9UUlVFKHVwZGF0ZS5zY3JvbGxSZWN0LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0VR
KDFVLCB1cGRhdGUucGFpbnRSZWN0cy5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKGV4cGVjdGVk
UGFpbnRSZWN0LCB1cGRhdGUucGFpbnRSZWN0c1swXSk7Cit9CisKK1RFU1QoUGFpbnRBZ2dyZWdh
dG9yLCBPdmVybGFwcGluZ1BhaW50QWZ0ZXJTY3JvbGwpCit7CisgICAgUGFpbnRBZ2dyZWdhdG9y
IGdyZWc7CisKKyAgICBJbnRSZWN0IHNjcm9sbFJlY3QoMCwgMCwgMTAsIDEwKTsKKyAgICBncmVn
LnNjcm9sbFJlY3QoMiwgMCwgc2Nyb2xsUmVjdCk7CisKKyAgICBJbnRSZWN0IHBhaW50UmVjdCg0
LCA0LCAxMCwgMik7CisgICAgZ3JlZy5pbnZhbGlkYXRlUmVjdChwYWludFJlY3QpOworCisgICAg
SW50UmVjdCBleHBlY3RlZFBhaW50UmVjdCA9IHVuaW9uUmVjdChzY3JvbGxSZWN0LCBwYWludFJl
Y3QpOworCisgICAgRVhQRUNUX1RSVUUoZ3JlZy5oYXNQZW5kaW5nVXBkYXRlKCkpOworICAgIFBh
aW50QWdncmVnYXRvcjo6UGVuZGluZ1VwZGF0ZSB1cGRhdGU7CisgICAgZ3JlZy5wb3BQZW5kaW5n
VXBkYXRlKCZ1cGRhdGUpOworCisgICAgRVhQRUNUX1RSVUUodXBkYXRlLnNjcm9sbFJlY3QuaXNF
bXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEoMVUsIHVwZGF0ZS5wYWludFJlY3RzLnNpemUoKSk7CisK
KyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRQYWludFJlY3QsIHVwZGF0ZS5wYWludFJlY3RzWzBdKTsK
K30KKworVEVTVChQYWludEFnZ3JlZ2F0b3IsIERpc2pvaW50UGFpbnRCZWZvcmVTY3JvbGwpCit7
CisgICAgUGFpbnRBZ2dyZWdhdG9yIGdyZWc7CisKKyAgICBJbnRSZWN0IHBhaW50UmVjdCg0LCA0
LCAxMCwgMik7CisgICAgZ3JlZy5pbnZhbGlkYXRlUmVjdChwYWludFJlY3QpOworCisgICAgSW50
UmVjdCBzY3JvbGxSZWN0KDAsIDAsIDIsIDEwKTsKKyAgICBncmVnLnNjcm9sbFJlY3QoMiwgMCwg
c2Nyb2xsUmVjdCk7CisKKyAgICBFWFBFQ1RfVFJVRShncmVnLmhhc1BlbmRpbmdVcGRhdGUoKSk7
CisgICAgUGFpbnRBZ2dyZWdhdG9yOjpQZW5kaW5nVXBkYXRlIHVwZGF0ZTsKKyAgICBncmVnLnBv
cFBlbmRpbmdVcGRhdGUoJnVwZGF0ZSk7CisKKyAgICBFWFBFQ1RfRkFMU0UodXBkYXRlLnNjcm9s
bFJlY3QuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEoMVUsIHVwZGF0ZS5wYWludFJlY3RzLnNp
emUoKSk7CisKKyAgICBFWFBFQ1RfRVEocGFpbnRSZWN0LCB1cGRhdGUucGFpbnRSZWN0c1swXSk7
CisgICAgRVhQRUNUX0VRKHNjcm9sbFJlY3QsIHVwZGF0ZS5zY3JvbGxSZWN0KTsKK30KKworVEVT
VChQYWludEFnZ3JlZ2F0b3IsIERpc2pvaW50UGFpbnRBZnRlclNjcm9sbCkKK3sKKyAgICBQYWlu
dEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJlY3Qgc2Nyb2xsUmVjdCgwLCAwLCAyLCAxMCk7
CisgICAgZ3JlZy5zY3JvbGxSZWN0KDIsIDAsIHNjcm9sbFJlY3QpOworCisgICAgSW50UmVjdCBw
YWludFJlY3QoNCwgNCwgMTAsIDIpOworICAgIGdyZWcuaW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0
KTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWlu
dEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1Vw
ZGF0ZSgmdXBkYXRlKTsKKworICAgIEVYUEVDVF9GQUxTRSh1cGRhdGUuc2Nyb2xsUmVjdC5pc0Vt
cHR5KCkpOworICAgIEVYUEVDVF9FUSgxVSwgdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpKTsKKwor
ICAgIEVYUEVDVF9FUShwYWludFJlY3QsIHVwZGF0ZS5wYWludFJlY3RzWzBdKTsKKyAgICBFWFBF
Q1RfRVEoc2Nyb2xsUmVjdCwgdXBkYXRlLnNjcm9sbFJlY3QpOworfQorCitURVNUKFBhaW50QWdn
cmVnYXRvciwgQ29udGFpbmVkUGFpbnRUcmltbWVkQnlTY3JvbGwpCit7CisgICAgUGFpbnRBZ2dy
ZWdhdG9yIGdyZWc7CisKKyAgICBJbnRSZWN0IHBhaW50UmVjdCg0LCA0LCA2LCA2KTsKKyAgICBn
cmVnLmludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7CisKKyAgICBJbnRSZWN0IHNjcm9sbFJlY3Qo
MCwgMCwgMTAsIDEwKTsKKyAgICBncmVnLnNjcm9sbFJlY3QoMiwgMCwgc2Nyb2xsUmVjdCk7CisK
KyAgICAvLyBUaGUgcGFpbnQgcmVjdCBzaG91bGQgaGF2ZSBiZWNvbWUgbmFycm93ZXIuCisgICAg
SW50UmVjdCBleHBlY3RlZFBhaW50UmVjdCg2LCA0LCA0LCA2KTsKKworICAgIEVYUEVDVF9UUlVF
KGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdV
cGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAg
IEVYUEVDVF9GQUxTRSh1cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9F
USgxVSwgdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUShleHBlY3Rl
ZFBhaW50UmVjdCwgdXBkYXRlLnBhaW50UmVjdHNbMF0pOworICAgIEVYUEVDVF9FUShzY3JvbGxS
ZWN0LCB1cGRhdGUuc2Nyb2xsUmVjdCk7Cit9CisKK1RFU1QoUGFpbnRBZ2dyZWdhdG9yLCBDb250
YWluZWRQYWludEVsaW1pbmF0ZWRCeVNjcm9sbCkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3Jl
ZzsKKworICAgIEludFJlY3QgcGFpbnRSZWN0KDQsIDQsIDYsIDYpOworICAgIGdyZWcuaW52YWxp
ZGF0ZVJlY3QocGFpbnRSZWN0KTsKKworICAgIEludFJlY3Qgc2Nyb2xsUmVjdCgwLCAwLCAxMCwg
MTApOworICAgIGdyZWcuc2Nyb2xsUmVjdCg2LCAwLCBzY3JvbGxSZWN0KTsKKworICAgIEVYUEVD
VF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6OlBl
bmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsK
KworICAgIEVYUEVDVF9GQUxTRSh1cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOworICAgIEVY
UEVDVF9UUlVFKHVwZGF0ZS5wYWludFJlY3RzLmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1RfRVEo
c2Nyb2xsUmVjdCwgdXBkYXRlLnNjcm9sbFJlY3QpOworfQorCitURVNUKFBhaW50QWdncmVnYXRv
ciwgQ29udGFpbmVkUGFpbnRBZnRlclNjcm9sbFRyaW1tZWRCeVNjcm9sbERhbWFnZSkKK3sKKyAg
ICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJlY3Qgc2Nyb2xsUmVjdCgwLCAwLCAx
MCwgMTApOworICAgIGdyZWcuc2Nyb2xsUmVjdCg0LCAwLCBzY3JvbGxSZWN0KTsKKworICAgIElu
dFJlY3QgcGFpbnRSZWN0KDIsIDAsIDQsIDEwKTsKKyAgICBncmVnLmludmFsaWRhdGVSZWN0KHBh
aW50UmVjdCk7CisKKyAgICBJbnRSZWN0IGV4cGVjdGVkU2Nyb2xsRGFtYWdlKDAsIDAsIDQsIDEw
KTsKKyAgICBJbnRSZWN0IGV4cGVjdGVkUGFpbnRSZWN0KDQsIDAsIDIsIDEwKTsKKworICAgIEVY
UEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1VwZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6
OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAgIGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRl
KTsKKworICAgIEVYUEVDVF9GQUxTRSh1cGRhdGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOworICAg
IEVYUEVDVF9FUSgxVSwgdXBkYXRlLnBhaW50UmVjdHMuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9F
UShzY3JvbGxSZWN0LCB1cGRhdGUuc2Nyb2xsUmVjdCk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVk
U2Nyb2xsRGFtYWdlLCB1cGRhdGUuY2FsY3VsYXRlU2Nyb2xsRGFtYWdlKCkpOworICAgIEVYUEVD
VF9FUShleHBlY3RlZFBhaW50UmVjdCwgdXBkYXRlLnBhaW50UmVjdHNbMF0pOworfQorCitURVNU
KFBhaW50QWdncmVnYXRvciwgQ29udGFpbmVkUGFpbnRBZnRlclNjcm9sbEVsaW1pbmF0ZWRCeVNj
cm9sbERhbWFnZSkKK3sKKyAgICBQYWludEFnZ3JlZ2F0b3IgZ3JlZzsKKworICAgIEludFJlY3Qg
c2Nyb2xsUmVjdCgwLCAwLCAxMCwgMTApOworICAgIGdyZWcuc2Nyb2xsUmVjdCg0LCAwLCBzY3Jv
bGxSZWN0KTsKKworICAgIEludFJlY3QgcGFpbnRSZWN0KDIsIDAsIDIsIDEwKTsKKyAgICBncmVn
LmludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7CisKKyAgICBJbnRSZWN0IGV4cGVjdGVkU2Nyb2xs
RGFtYWdlKDAsIDAsIDQsIDEwKTsKKworICAgIEVYUEVDVF9UUlVFKGdyZWcuaGFzUGVuZGluZ1Vw
ZGF0ZSgpKTsKKyAgICBQYWludEFnZ3JlZ2F0b3I6OlBlbmRpbmdVcGRhdGUgdXBkYXRlOworICAg
IGdyZWcucG9wUGVuZGluZ1VwZGF0ZSgmdXBkYXRlKTsKKworICAgIEVYUEVDVF9GQUxTRSh1cGRh
dGUuc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKHVwZGF0ZS5wYWludFJl
Y3RzLmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoc2Nyb2xsUmVjdCwgdXBkYXRlLnNjcm9s
bFJlY3QpOworICAgIEVYUEVDVF9FUShleHBlY3RlZFNjcm9sbERhbWFnZSwgdXBkYXRlLmNhbGN1
bGF0ZVNjcm9sbERhbWFnZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
      

    </bug>

</bugzilla>