<?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>11217</bug_id>
          
          <creation_ts>2006-10-08 08:16:02 -0700</creation_ts>
          <short_desc>Cleanup svg coding style</short_desc>
          <delta_ts>2006-10-31 11:21:05 -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>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Rob Buis">rwlbuis</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mitz</cc>
    
    <cc>mrowe</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>53816</commentid>
    <comment_count>0</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-08 08:16:02 -0700</bug_when>
    <thetext>Svg code has the following style problems:

- use of if(, for(, while(, switch(
- unsorted inludes
- usage of * on the right, for instance Foo *foo instead of Foo* foo, same for &amp;
- using namespace Webcore; instead of wrapping the implementation code in namespace WebCore { ... }
- unneeded includes, { not on the same line as if, incorrect use of whitespace</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53817</commentid>
    <comment_count>1</comment_count>
      <attachid>10979</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-08 08:38:56 -0700</bug_when>
    <thetext>Created attachment 10979
Cleanup for svg filter code

Should be clear what this about looking at the description :)
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53804</commentid>
    <comment_count>2</comment_count>
      <attachid>10980</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-08 09:15:18 -0700</bug_when>
    <thetext>Created attachment 10980
Cleanup for svg SVGPath* code

This one is pretty straightforward.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53815</commentid>
    <comment_count>3</comment_count>
      <attachid>10986</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-08 12:23:42 -0700</bug_when>
    <thetext>Created attachment 10986
Cleanup for svg code in shape classes

This time a cleanup for shape classes.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53797</commentid>
    <comment_count>4</comment_count>
      <attachid>10986</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2006-10-08 13:08:46 -0700</bug_when>
    <thetext>Comment on attachment 10986
Cleanup for svg code in shape classes

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53798</commentid>
    <comment_count>5</comment_count>
      <attachid>10980</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-10-08 13:30:10 -0700</bug_when>
    <thetext>Comment on attachment 10980
Cleanup for svg SVGPath* code

remove 

-    filterStyle-&gt;deref(view()-&gt;renderArena());
+    filterStyle-&gt;deref(document()-&gt;renderArena());

and associated bits before landing, as we discussed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53794</commentid>
    <comment_count>6</comment_count>
      <attachid>10979</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-10-08 13:31:50 -0700</bug_when>
    <thetext>Comment on attachment 10979
Cleanup for svg filter code

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53787</commentid>
    <comment_count>7</comment_count>
      <attachid>10980</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-10-08 13:48:42 -0700</bug_when>
    <thetext>Comment on attachment 10980
Cleanup for svg SVGPath* code

looks sane to me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53748</commentid>
    <comment_count>8</comment_count>
      <attachid>10992</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-09 07:32:46 -0700</bug_when>
    <thetext>Created attachment 10992
Cleaning up of anim* classes

Small patch this time, anim* classes...
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53703</commentid>
    <comment_count>9</comment_count>
      <attachid>10992</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-09 10:23:44 -0700</bug_when>
    <thetext>Comment on attachment 10992
Cleaning up of anim* classes

             Node *target = parentNode();
-            while(target != 0) {
+            while (target != 0) {

Forgot to move the star there. Also, per the style guidelines, the second line should say just
+            while (target) {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53705</commentid>
    <comment_count>10</comment_count>
      <attachid>10992</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-09 12:07:57 -0700</bug_when>
    <thetext>Comment on attachment 10992
Cleaning up of anim* classes

Rob is going to post an updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53707</commentid>
    <comment_count>11</comment_count>
      <attachid>10995</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-09 12:25:09 -0700</bug_when>
    <thetext>Created attachment 10995
Improved patch

This one solves some issues with the previous, now obsoleted anim patch.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53713</commentid>
    <comment_count>12</comment_count>
      <attachid>10995</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-09 13:58:45 -0700</bug_when>
    <thetext>Comment on attachment 10995
Improved patch

I asked Rob to make a few more changes: change NULLs to 0s, keep the #include &quot;SVGColor.h&quot; in SVGAnimateColorElement.cpp, and move the open braces in switch statements to the same line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53532</commentid>
    <comment_count>13</comment_count>
      <attachid>11010</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-10 01:11:04 -0700</bug_when>
    <thetext>Created attachment 11010
New anim patch

Addreessing Mitz&apos; issues this time I hope :)
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53534</commentid>
    <comment_count>14</comment_count>
      <attachid>11010</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-10 01:39:36 -0700</bug_when>
    <thetext>Comment on attachment 11010
New anim patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53572</commentid>
    <comment_count>15</comment_count>
      <attachid>11023</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-10 13:52:32 -0700</bug_when>
    <thetext>Created attachment 11023
Cleanup for svg text code

This time a cleanup for text related classes.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53505</commentid>
    <comment_count>16</comment_count>
      <attachid>11035</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-11 12:51:53 -0700</bug_when>
    <thetext>Created attachment 11035
Improved patch

New patch after olliej&apos; text changes.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53476</commentid>
    <comment_count>17</comment_count>
      <attachid>11035</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-11 13:53:14 -0700</bug_when>
    <thetext>Comment on attachment 11035
Improved patch

There are several declarations (repeating in several headers) where you could drop the parameter names:

+        virtual void parseMappedAttribute(MappedAttribute* attr);
+        virtual RenderObject* createRenderer(RenderArena* arena, RenderStyle* style);
+        bool childShouldCreateRenderer(Node* child) const;
+        virtual void updateLocalTransform(SVGTransformList* localTransforms);

The second line here should be indented:

+SVGTSpanElement::SVGTSpanElement(const QualifiedName&amp; tagName, Document* doc)
 : SVGTextPositioningElement(tagName, doc)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53407</commentid>
    <comment_count>18</comment_count>
      <attachid>11042</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-12 01:07:54 -0700</bug_when>
    <thetext>Created attachment 11042
Improved patch

Fixing the headers...
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53417</commentid>
    <comment_count>19</comment_count>
      <attachid>11042</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-12 06:41:21 -0700</bug_when>
    <thetext>Comment on attachment 11042
Improved patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53441</commentid>
    <comment_count>20</comment_count>
      <attachid>11052</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-12 13:09:54 -0700</bug_when>
    <thetext>Created attachment 11052
First attempt

Various style fixes for svg structure classes.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53471</commentid>
    <comment_count>21</comment_count>
      <attachid>11052</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-13 00:56:33 -0700</bug_when>
    <thetext>Comment on attachment 11052
First attempt

Unnecessary parameter names in
+        SVGDocument(DOMImplementation* i, FrameView* view);

These should be two lines each:
+    if (SVGLangSpace::parseMappedAttribute(attr)) return;
+    if (SVGExternalResourcesRequired::parseMappedAttribute(attr)) return;
+    if (SVGFitToViewBox::parseMappedAttribute(attr)) return;

I also discussed with Rob the commented-out code in SVGSVGElement.cpp. Those comments should be deleted and replaced with FIXMEs, preferably referring to bugs about the missing functionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53333</commentid>
    <comment_count>22</comment_count>
      <attachid>11062</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-13 03:23:43 -0700</bug_when>
    <thetext>Created attachment 11062
Improved patch

Now includes FIXMEs in SVGSVGElement referencing to bug numbers.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53334</commentid>
    <comment_count>23</comment_count>
      <attachid>11062</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-13 03:39:22 -0700</bug_when>
    <thetext>Comment on attachment 11062
Improved patch

Looks great!
+    //FIXME: implement me (see bug 11273)
1) There should be a space between // and FIXME.
2) You should use sentence capitalization for the part after &quot;FIXME:&quot;, e.g. &quot;// FIXME: Implement me (see bug 11273)&quot;. (This applies also to comments that you added that have the space after the //).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53342</commentid>
    <comment_count>24</comment_count>
      <attachid>11065</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-13 04:44:36 -0700</bug_when>
    <thetext>Created attachment 11065
Improved patch

Fixing remaining issues.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53344</commentid>
    <comment_count>25</comment_count>
      <attachid>11065</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-13 05:04:25 -0700</bug_when>
    <thetext>Comment on attachment 11065
Improved patch

Two stars remaining to be moved here:
         virtual bool rendererIsNeeded(RenderStyle *style) { return StyledElement::rendererIsNeeded(style); }
-        virtual RenderObject *createRenderer(RenderArena *arena, RenderStyle *style);
+        virtual RenderObject *createRenderer(RenderArena*, RenderStyle*);

You can fix this when landing. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53368</commentid>
    <comment_count>26</comment_count>
      <attachid>11073</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-13 12:11:06 -0700</bug_when>
    <thetext>Created attachment 11073
First attempt

Cleaning up the house, err paint servers ;-&gt;
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53371</commentid>
    <comment_count>27</comment_count>
      <attachid>11073</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-13 12:53:17 -0700</bug_when>
    <thetext>Comment on attachment 11073
First attempt

Redundant parameter names (some of these show up multiple times):

-        virtual void buildGradient(KRenderingPaintServerGradient *grad) const = 0;
+        virtual void buildGradient(KRenderingPaintServerGradient* grad) const = 0;

-        const SVGStyledElement *pushAttributeContext(const SVGStyledElement *context);
+        const SVGStyledElement* pushAttributeContext(const SVGStyledElement* context);

-        virtual void buildGradient(KRenderingPaintServerGradient *grad) const;
+        virtual void buildGradient(KRenderingPaintServerGradient* grad) const;

Don&apos;t need the &quot;!= 0&quot; here:

+    for (Node* n = target-&gt;firstChild(); n != 0; n = n-&gt;nextSibling()) {

Don&apos;t need the space before the &gt; here (some of these show up multiple times):

         SVGStyledElement* e = static_cast&lt;SVGStyledElement* &gt;(elem);

         SVGStyledElement* styled = (current ? static_cast&lt;SVGStyledElement* &gt;(current-&gt;element()) : 0);

         m_paintServer-&gt;setListener(const_cast&lt;SVGPatternElement* &gt;(this));

-    KRenderingPaintServerRadialGradient *grad = static_cast&lt;KRenderingPaintServerRadialGradient *&gt;(_grad);
+    KRenderingPaintServerRadialGradient* grad = static_cast&lt;KRenderingPaintServerRadialGradient* &gt;(_grad);

-        KRenderingPaintServerGradient *gradient = static_cast&lt;KRenderingPaintServerGradient *&gt;(pserver);
+        KRenderingPaintServerGradient* gradient = static_cast&lt;KRenderingPaintServerGradient* &gt;(pserver);

+            KRenderingPaintServerRadialGradient* radial = static_cast&lt;KRenderingPaintServerRadialGradient* &gt;(pserver);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53317</commentid>
    <comment_count>28</comment_count>
      <attachid>11077</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-13 13:22:31 -0700</bug_when>
    <thetext>Created attachment 11077
Improved patch

This should address Mitz&apos; issues.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53273</commentid>
    <comment_count>29</comment_count>
      <attachid>11077</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-13 13:50:40 -0700</bug_when>
    <thetext>Comment on attachment 11077
Improved patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53145</commentid>
    <comment_count>30</comment_count>
      <attachid>11089</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-14 13:57:05 -0700</bug_when>
    <thetext>Created attachment 11089
First attempt

This time cleaning up basic datastructures.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53148</commentid>
    <comment_count>31</comment_count>
      <attachid>11089</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-14 14:32:26 -0700</bug_when>
    <thetext>Comment on attachment 11089
First attempt

My only comments are about lines that the patch doesn&apos;t touch:

The opening brace should go on the same line as the case:

         case SVG_LENGTHTYPE_EXS:
         {

This needs spaces after the semicolons:

     for (unsigned long i = 0;i &lt; list-&gt;numberOfItems();i++) {

The way this is split into lines doesn&apos;t make sense. I think two lines with 4 parameters in each will suffice, but otherwise, it should be 2 parameters on each line:
+        SVGMatrix* getCTM(float logicX, float logicY,
                               float logicWidth, float logicHeight,
                               float physX, float physY, float physWidth,
                               float physHeight);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53164</commentid>
    <comment_count>32</comment_count>
      <attachid>11092</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-15 00:16:35 -0700</bug_when>
    <thetext>Created attachment 11092
Improved patch

This one should address Mitz&apos; issues.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53167</commentid>
    <comment_count>33</comment_count>
      <attachid>11092</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-15 00:42:21 -0700</bug_when>
    <thetext>Comment on attachment 11092
Improved patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52411</commentid>
    <comment_count>34</comment_count>
      <attachid>11114</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-16 12:31:02 -0700</bug_when>
    <thetext>Created attachment 11114
First attempt

This one should be easy to review :-)
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51740</commentid>
    <comment_count>35</comment_count>
      <attachid>11114</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-20 00:18:29 -0700</bug_when>
    <thetext>Comment on attachment 11114
First attempt

Don&apos;t need &quot;!= 0&quot; here:
+    for (Node* n = firstChild(); n != 0; n = n-&gt;nextSibling()) {

Don&apos;t need the &quot;angle&quot; and &quot;attr&quot; parameter names: 
+        void setOrientToAngle(SVGAngle* angle);

         virtual void attributeChanged(Attribute* attr, bool preserveDecls);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51741</commentid>
    <comment_count>36</comment_count>
      <attachid>11163</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-20 00:49:59 -0700</bug_when>
    <thetext>Created attachment 11163
Improved patch

This patch should fix the remaining issues.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51743</commentid>
    <comment_count>37</comment_count>
      <attachid>11165</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-20 01:24:36 -0700</bug_when>
    <thetext>Created attachment 11165
Even better patch

Mitz noted some problems with my previous patch, so I invalidated that one, this
one should be better.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51744</commentid>
    <comment_count>38</comment_count>
      <attachid>11165</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-20 01:44:17 -0700</bug_when>
    <thetext>Comment on attachment 11165
Even better patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50851</commentid>
    <comment_count>39</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2006-10-24 04:35:55 -0700</bug_when>
    <thetext>Do any of these patches remain to be landed?  It&apos;s still showing up in the pending commit queue, but it&apos;s not at all obvious which of these patches have been landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50834</commentid>
    <comment_count>40</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-24 06:06:11 -0700</bug_when>
    <thetext>Hi,

(In reply to comment #39)
&gt; Do any of these patches remain to be landed?  It&apos;s still showing up in the
&gt; pending commit queue, but it&apos;s not at all obvious which of these patches have
&gt; been landed.

All patches that have been appended are reviewed and okayed (sometimes not on the first try). I expect there is still one big patch and one or two small patches left before all of the svg code has been cleaned up, I plan to do the big one soon. Once these are done, the whole bug can be closed. I hope that clears things up a bit.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50838</commentid>
    <comment_count>41</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-10-24 07:04:25 -0700</bug_when>
    <thetext>(In reply to comment #40)

Rob,
It would be helpful if you checked the &quot;obsolete&quot; check-mark for the patches that have been applied (or rejected) so that we can figure out what, if anything, is left to commit.  If it&apos;s possible, it would also be nice if you (or the commiter) noted what revision the patches were landed in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50839</commentid>
    <comment_count>42</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-10-24 07:31:25 -0700</bug_when>
    <thetext>Hi Sam,

(In reply to comment #41)
&gt; (In reply to comment #40)
&gt; 
&gt; Rob,
&gt; It would be helpful if you checked the &quot;obsolete&quot; check-mark for the patches
&gt; that have been applied (or rejected) so that we can figure out what, if
&gt; anything, is left to commit.  If it&apos;s possible, it would also be nice if you
&gt; (or the commiter) noted what revision the patches were landed in.

I tried to obsolete some but I get an error after checking the obsolete flag.
Cheers,

Rob.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48227</commentid>
    <comment_count>43</comment_count>
      <attachid>10986</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-31 11:09:50 -0800</bug_when>
    <thetext>Comment on attachment 10986
Cleanup for svg code in shape classes

Landed in r16918</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48228</commentid>
    <comment_count>44</comment_count>
      <attachid>10980</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-31 11:11:26 -0800</bug_when>
    <thetext>Comment on attachment 10980
Cleanup for svg SVGPath* code

Landed in r16920</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48231</commentid>
    <comment_count>45</comment_count>
      <attachid>11010</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-31 11:13:04 -0800</bug_when>
    <thetext>Comment on attachment 11010
New anim patch

Landed in r16963</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48232</commentid>
    <comment_count>46</comment_count>
      <attachid>11042</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-31 11:14:41 -0800</bug_when>
    <thetext>Comment on attachment 11042
Improved patch

Landed in r17008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48233</commentid>
    <comment_count>47</comment_count>
      <attachid>11065</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-31 11:15:41 -0800</bug_when>
    <thetext>Comment on attachment 11065
Improved patch

Landed in r17027</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48234</commentid>
    <comment_count>48</comment_count>
      <attachid>11077</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-31 11:16:42 -0800</bug_when>
    <thetext>Comment on attachment 11077
Improved patch

Landed in r17041</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48236</commentid>
    <comment_count>49</comment_count>
      <attachid>11092</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-31 11:17:51 -0800</bug_when>
    <thetext>Comment on attachment 11092
Improved patch

Landed in r17062</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48237</commentid>
    <comment_count>50</comment_count>
      <attachid>11165</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-31 11:18:19 -0800</bug_when>
    <thetext>Comment on attachment 11165
Even better patch

Landed in r17158</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48238</commentid>
    <comment_count>51</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-10-31 11:21:05 -0800</bug_when>
    <thetext>I guess we&apos;re done here :-)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10979</attachid>
            <date>2006-10-08 08:38:56 -0700</date>
            <delta_ts>2006-10-24 10:24:27 -0700</delta_ts>
            <desc>Cleanup for svg filter code</desc>
            <filename>11217-filters.diff</filename>
            <type>text/plain</type>
            <size>64767</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODEgQEAKKzIwMDYtMTAtMDggIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIGZpbHRlciBjbGFz
c2VzLgorCisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b25FbGVtZW50OjpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uRWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUJsZW5kRWxlbWVudDo6U1ZHRkVCbGVuZEVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpmaWx0ZXJFZmZl
Y3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oOgorICAgICAgICAq
IGtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpmaWx0ZXJF
ZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6Cisg
ICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzdHJpbmdUb0NoYW5uZWwpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaDoKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVG
bG9vZEVsZW1lbnQ6OmZpbHRlckVmZmVjdCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFRnVu
Y0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRnVuY0FFbGVtZW50OjpTVkdG
RUZ1bmNBRWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFRnVuY0JFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRnVuY0JFbGVtZW50OjpTVkdGRUZ1bmNCRWxlbWVu
dCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFRnVuY0dFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFRnVuY0dFbGVtZW50OjpTVkdGRUZ1bmNHRWxlbWVudCk6CisgICAgICAg
ICoga3N2ZzIvc3ZnL1NWR0ZFRnVuY1JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFRnVuY1JFbGVtZW50OjpTVkdGRUZ1bmNSRWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQ6OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6ZmlsdGVyRWZmZWN0
KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Lmg6CisgICAg
ICAgICoga3N2ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZFTGlnaHRFbGVtZW50OjpTVkdGRUxpZ2h0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGRUxpZ2h0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRU1l
cmdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1lcmdlRWxlbWVudDo6U1ZH
RkVNZXJnZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNZXJnZUVsZW1lbnQ6OmZp
bHRlckVmZmVjdCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50Lmg6Cisg
ICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OlNWR0ZFTWVyZ2VOb2RlRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50Lmg6CisgICAg
ICAgICoga3N2ZzIvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6U1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6dXBkYXRlTGlnaHRzKToKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIGtzdmcy
L3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQ6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6ZmlsdGVyRWZmZWN0KToKKyAg
ICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRl
ckVsZW1lbnQ6OlNWR0ZpbHRlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmls
dGVyRWxlbWVudDo6Y2FudmFzUmVzb3VyY2UpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGaWx0
ZXJFbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKToKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisKIDIw
MDYtMTAtMDcgIEFuZGVycyBDYXJsc3NvbiAgPGFjYXJsc3NvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTWFjaWVqLgpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24g
MTY4ODcpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4K
LSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAg
ICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
IAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yMiwxOCAr
MjIsMTYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5j
bHVkZSAiQXR0ci5oIgorI2luY2x1ZGUgIlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVt
ZW50LmgiCiAKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR0hlbHBlci5oIgot
I2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxl
bWVudC5oIgorI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAj
aW5jbHVkZSAiU1ZHTnVtYmVyTGlzdC5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK25h
bWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6
OlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCitTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxl
bWVudDo6U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR0VsZW1lbnQodGFnTmFtZSwg
ZG9jKQogICAgICwgbV90eXBlKDApCiAgICAgLCBtX3RhYmxlVmFsdWVzKG5ldyBTVkdOdW1iZXJM
aXN0KQpAQCAtNTcsMjAgKzU1LDIwIEBAIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNW
R0NvbXBvbmUKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0NvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb25FbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBFeHBvbmVudCwgZXhw
b25lbnQsIFNWR05hbWVzOjpleHBvbmVudEF0dHIubG9jYWxOYW1lKCksIG1fZXhwb25lbnQpCiBB
TklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
RWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgT2Zmc2V0LCBvZmZzZXQsIFNWR05hbWVz
OjpvZmZzZXRBdHRyLmxvY2FsTmFtZSgpLCBtX29mZnNldCkKIAotdm9pZCBTVkdDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlICphdHRyKQordm9pZCBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0IFN0
cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnR5cGVBdHRyKQogICAgIHsKLSAgICAgICAgaWYodmFsdWUgPT0gImlkZW50aXR5IikK
KyAgICAgICAgaWYgKHZhbHVlID09ICJpZGVudGl0eSIpCiAgICAgICAgICAgICBzZXRUeXBlQmFz
ZVZhbHVlKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfSURFTlRJVFkpOwotICAgICAgICBl
bHNlIGlmKHZhbHVlID09ICJ0YWJsZSIpCisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJ0YWJs
ZSIpCiAgICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfVEFCTEUpOwotICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJkaXNjcmV0ZSIpCisgICAg
ICAgIGVsc2UgaWYgKHZhbHVlID09ICJkaXNjcmV0ZSIpCiAgICAgICAgICAgICBzZXRUeXBlQmFz
ZVZhbHVlKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUpOwotICAgICAgICBl
bHNlIGlmKHZhbHVlID09ICJsaW5lYXIiKQorICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAibGlu
ZWFyIikKICAgICAgICAgICAgIHNldFR5cGVCYXNlVmFsdWUoU1ZHX0ZFQ09NUE9ORU5UVFJBTlNG
RVJfVFlQRV9MSU5FQVIpOwotICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJnYW1tYSIpCisgICAg
ICAgIGVsc2UgaWYgKHZhbHVlID09ICJnYW1tYSIpCiAgICAgICAgICAgICBzZXRUeXBlQmFzZVZh
bHVlKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEpOwogICAgIH0KICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRhYmxlVmFsdWVzQXR0cikKQEAgLTk4LDcg
Kzk2LDcgQEAgS0NDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIFNWR0NvbXBvbmVudAogICAgIGZ1
bmMuYW1wbGl0dWRlID0gYW1wbGl0dWRlKCk7CiAgICAgZnVuYy5leHBvbmVudCA9IGV4cG9uZW50
KCk7CiAgICAgZnVuYy5vZmZzZXQgPSBvZmZzZXQoKTsKLSAgICBTVkdOdW1iZXJMaXN0ICpudW1i
ZXJzID0gdGFibGVWYWx1ZXMoKTsKKyAgICBTVkdOdW1iZXJMaXN0KiBudW1iZXJzID0gdGFibGVW
YWx1ZXMoKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHVuc2lnbmVkIGludCBu
ciA9IG51bWJlcnMtPm51bWJlck9mSXRlbXMoKTsKQEAgLTEwNyw2ICsxMDUsOCBAQCBLQ0NvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gU1ZHQ29tcG9uZW50CiAgICAgcmV0dXJuIGZ1bmM7CiB9CiAK
K30KKwogLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKSW5kZXg6IFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
bkVsZW1lbnQuaAkocmV2aXNpb24gMTY4ODcpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5u
IDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHBy
b2plY3QKIApAQCAtMjQsOCArMjQsOCBAQAogI2RlZmluZSBLU1ZHX1NWR0NvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb25FbGVtZW50SW1wbF9ICiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAotI2luY2x1ZGUg
IlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgorI2luY2x1ZGUgIlNW
R0VsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUKIAogICAgICAgICAvLyAnU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
bkVsZW1lbnQnIGZ1bmN0aW9ucwogICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50Jwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
ICphdHRyKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSogYXR0cik7CiAgICAgICAgIAogICAgICAgICBLQ0NvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbigpIGNvbnN0OwogCkluZGV4OiBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8
d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9q
ZWN0CiAKQEAgLTIyLDE5ICsyMiwxNCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYg
U1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJBdHRyLmgiCi0KLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52
YXNGaWx0ZXJzLmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5o
PgorI2luY2x1ZGUgIlNWR0ZFQmxlbmRFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJrc3ZnLmgiCisj
aW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgotI2lu
Y2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU1ZHRkVCbGVuZEVsZW1lbnQuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGRUJsZW5kRWxlbWVudDo6U1ZHRkVCbGVuZEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKK1NWR0ZF
QmxlbmRFbGVtZW50OjpTVkdGRUJsZW5kRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzKHRhZ05hbWUsIGRvYykKICAgICAsIG1fbW9kZSgwKQogICAgICwgbV9maWx0ZXJFZmZl
Y3QoMCkKQEAgLTUwLDIzICs0NSwyMSBAQCBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhT
VkdGRUJsZW5kCiBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUJsZW5kRWxlbWVu
dCwgU3RyaW5nLCBTdHJpbmcsIHN0cmluZywgSW4yLCBpbjIsIFNWR05hbWVzOjppbjJBdHRyLmxv
Y2FsTmFtZSgpLCBtX2luMikKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFQmxl
bmRFbGVtZW50LCBpbnQsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgTW9kZSwgbW9kZSwgU1ZH
TmFtZXM6Om1vZGVBdHRyLmxvY2FsTmFtZSgpLCBtX21vZGUpCiAKLXZvaWQgU1ZHRkVCbGVuZEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQg
U1ZHRkVCbGVuZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSog
YXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptb2RlQXR0cikKLSAgICB7Ci0gICAgICAgIGlm
KHZhbHVlID09ICJub3JtYWwiKQorICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om1v
ZGVBdHRyKSB7CisgICAgICAgIGlmICh2YWx1ZSA9PSAibm9ybWFsIikKICAgICAgICAgICAgIHNl
dE1vZGVCYXNlVmFsdWUoU1ZHX0ZFQkxFTkRfTU9ERV9OT1JNQUwpOwotICAgICAgICBlbHNlIGlm
KHZhbHVlID09ICJtdWx0aXBseSIpCisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJtdWx0aXBs
eSIpCiAgICAgICAgICAgICBzZXRNb2RlQmFzZVZhbHVlKFNWR19GRUJMRU5EX01PREVfTVVMVElQ
TFkpOwotICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJzY3JlZW4iKQorICAgICAgICBlbHNlIGlm
ICh2YWx1ZSA9PSAic2NyZWVuIikKICAgICAgICAgICAgIHNldE1vZGVCYXNlVmFsdWUoU1ZHX0ZF
QkxFTkRfTU9ERV9TQ1JFRU4pOwotICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJkYXJrZW4iKQor
ICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAiZGFya2VuIikKICAgICAgICAgICAgIHNldE1vZGVC
YXNlVmFsdWUoU1ZHX0ZFQkxFTkRfTU9ERV9EQVJLRU4pOwotICAgICAgICBlbHNlIGlmKHZhbHVl
ID09ICJsaWdodGVuIikKKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gImxpZ2h0ZW4iKQogICAg
ICAgICAgICAgc2V0TW9kZUJhc2VWYWx1ZShTVkdfRkVCTEVORF9NT0RFX0xJR0hURU4pOwotICAg
IH0KLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKKyAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQogICAgICAgICBzZXRJ
bjFCYXNlVmFsdWUodmFsdWUpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6aW4yQXR0cikKICAgICAgICAgc2V0SW4yQmFzZVZhbHVlKHZhbHVlKTsKQEAgLTc0LDEwICs2
NywxMCBAQCB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiAgICAgICAg
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cik7CiB9CiAKLUtDYW52YXNGRUJsZW5kICpTVkdGRUJsZW5kRWxlbWVudDo6ZmlsdGVy
RWZmZWN0KCkgY29uc3QKK0tDYW52YXNGRUJsZW5kKiBTVkdGRUJsZW5kRWxlbWVudDo6ZmlsdGVy
RWZmZWN0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQotICAgICAgICBtX2Zp
bHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRUJsZW5kICo+KHJlbmRlcmluZ0Rldmlj
ZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfQkxFTkQpKTsKKyAgICAgICAgbV9maWx0ZXJFZmZl
Y3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVCbGVuZCo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVh
dGVGaWx0ZXJFZmZlY3QoRkVfQkxFTkQpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAg
ICAgICByZXR1cm4gMDsKICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0QmxlbmRNb2RlKChLQ0JsZW5k
TW9kZVR5cGUpKG1vZGUoKS0xKSk7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUJsZW5k
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVt
ZW50LmgJKHJldmlzaW9uIDE2ODg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVCbGVuZEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAg
ICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDggKzI0LDgg
QEAKICNkZWZpbmUgS1NWR19TVkdGRUJsZW5kRWxlbWVudEltcGxfSAogI2lmZGVmIFNWR19TVVBQ
T1JUCiAKLSNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIK
ICNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewpAQCAtNDcsOSAr
NDcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZQogCiAgICAgICAgIC8vICdTVkdGRUJsZW5kRWxlbWVu
dCcgZnVuY3Rpb25zCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnQnCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlKiBhdHRyKTsKIAotICAgICAgICB2aXJ0dWFsIEtDYW52YXNGRUJsZW5kICpmaWx0ZXJFZmZl
Y3QoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVCbGVuZCogZmlsdGVyRWZmZWN0
KCkgY29uc3Q7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxl
bWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CkBAIC01OCw3ICs1
OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xB
UkFUSU9OUyhTVkdGRUJsZW5kRWxlbWVudCwgU3RyaW5nLCBTdHJpbmcsIEluMSwgaW4xKQogICAg
ICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHRkVCbGVuZEVsZW1lbnQsIFN0
cmluZywgU3RyaW5nLCBJbjIsIGluMikKICAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKFNWR0ZFQmxlbmRFbGVtZW50LCBpbnQsIGludCwgTW9kZSwgbW9kZSkKLSAgICAgICAg
bXV0YWJsZSBLQ2FudmFzRkVCbGVuZCAqbV9maWx0ZXJFZmZlY3Q7CisgICAgICAgIG11dGFibGUg
S0NhbnZhc0ZFQmxlbmQqIG1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxl
bWVudC5jcHAJKHJldmlzaW9uIDE2ODg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtk
ZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAt
MjIsMjIgKzIyLDE2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQUE9S
VAotI2luY2x1ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJTVkdGRUNvbG9yTWF0cml4RWxlbWVudC5o
IgogCi0jaW5jbHVkZSAiS0NhbnZhc0ZpbHRlcnMuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2
aWNlLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuaCIKLQotI2lu
Y2x1ZGUgImtzdmcuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0hlbHBl
ci5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR051bWJl
ckxpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGRUNvbG9yTWF0cml4RWxlbWVu
dDo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQgKmRvYykKK1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpTVkdGRUNvbG9yTWF0cml4
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAg
IDogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKICAg
ICAsIG1fdHlwZSgwKQogICAgICwgbV92YWx1ZXMobmV3IFNWR051bWJlckxpc3QpCkBAIC01NCwx
NyArNDgsMTcgQEAgQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVDb2xvcgogQU5J
TUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQsIGludCwg
RW51bWVyYXRpb24sIGVudW1lcmF0aW9uLCBUeXBlLCB0eXBlLCBTVkdOYW1lczo6dHlwZUF0dHIu
bG9jYWxOYW1lKCksIG1fdHlwZSkKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZF
Q29sb3JNYXRyaXhFbGVtZW50LCBTVkdOdW1iZXJMaXN0KiwgTnVtYmVyTGlzdCwgbnVtYmVyTGlz
dCwgVmFsdWVzLCB2YWx1ZXMsIFNWR05hbWVzOjp2YWx1ZXNBdHRyLmxvY2FsTmFtZSgpLCBtX3Zh
bHVlcy5nZXQoKSkKIAotdm9pZCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBTVkdGRUNvbG9yTWF0cml4RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAg
IGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKSB7Ci0gICAgICAgIGlmKHZhbHVlID09ICJtYXRyaXgi
KQorICAgICAgICBpZiAodmFsdWUgPT0gIm1hdHJpeCIpCiAgICAgICAgICAgICBzZXRUeXBlQmFz
ZVZhbHVlKFNWR19GRUNPTE9STUFUUklYX1RZUEVfTUFUUklYKTsKLSAgICAgICAgZWxzZSBpZih2
YWx1ZSA9PSAic2F0dXJhdGUiKQorICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAic2F0dXJhdGUi
KQogICAgICAgICAgICAgc2V0VHlwZUJhc2VWYWx1ZShTVkdfRkVDT0xPUk1BVFJJWF9UWVBFX1NB
VFVSQVRFKTsKLSAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAiaHVlUm90YXRlIikKKyAgICAgICAg
ZWxzZSBpZiAodmFsdWUgPT0gImh1ZVJvdGF0ZSIpCiAgICAgICAgICAgICBzZXRUeXBlQmFzZVZh
bHVlKFNWR19GRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKTsKLSAgICAgICAgZWxzZSBpZih2
YWx1ZSA9PSAibHVtaW5hbmNlVG9BbHBoYSIpCisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJs
dW1pbmFuY2VUb0FscGhhIikKICAgICAgICAgICAgIHNldFR5cGVCYXNlVmFsdWUoU1ZHX0ZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBKTsKICAgICB9CiAgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCkBAIC03NSwyMSArNjksMjEgQEAgdm9pZCBT
VkdGRUNvbG9yTWF0cml4RWxlbWVudDo6cGFyc2VNYXBwZQogICAgICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQog
Ci1LQ2FudmFzRkVDb2xvck1hdHJpeCAqU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmZpbHRlckVm
ZmVjdCgpIGNvbnN0CitLQ2FudmFzRkVDb2xvck1hdHJpeCogU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQ6OmZpbHRlckVmZmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKLSAg
ICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVDb2xvck1hdHJpeCAq
PihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0NPTE9SX01BVFJJWCkp
OworICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRUNvbG9yTWF0
cml4Kj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9DT0xPUl9NQVRS
SVgpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgCiAgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKGluMSgpKTsKICAgICBzZXRTdGFuZGFyZEF0
dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwogICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8ZmxvYXQ+
IF92YWx1ZXM7Ci0gICAgU1ZHTnVtYmVyTGlzdCAqbnVtYmVycyA9IHZhbHVlcygpOworICAgIFNW
R051bWJlckxpc3QqIG51bWJlcnMgPSB2YWx1ZXMoKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIHVuc2lnbmVkIGludCBuciA9IG51bWJlcnMtPm51bWJlck9mSXRlbXMoKTsKLSAg
ICBmb3IodW5zaWduZWQgaW50IGkgPSAwO2kgPCBucjtpKyspCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7aSA8IG5yO2krKykKICAgICAgICAgX3ZhbHVlcy5hcHBlbmQobnVtYmVycy0+Z2V0
SXRlbShpLCBlYykpOwogICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRWYWx1ZXMoX3ZhbHVlcyk7CiAg
ICAgbV9maWx0ZXJFZmZlY3QtPnNldFR5cGUoKEtDQ29sb3JNYXRyaXhUeXBlKSh0eXBlKCkgLSAx
KSk7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgJ
KHJldmlzaW9uIDE2ODg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAg
ICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDggKzI0LDgg
QEAKICNkZWZpbmUgS1NWR19TVkdGRUNvbG9yTWF0cml4RWxlbWVudEltcGxfSAogI2lmZGVmIFNW
R19TVVBQT1JUCiAKLSNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMuaCIKICNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewpAQCAt
NDcsOSArNDcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZQogCiAgICAgICAgIC8vICdTVkdGRUNvbG9y
TWF0cml4RWxlbWVudCcgZnVuY3Rpb25zCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1l
bnQnCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUgKmF0dHIpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlKiBhdHRyKTsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgS0NhbnZh
c0ZFQ29sb3JNYXRyaXggKmZpbHRlckVmZmVjdCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEtD
YW52YXNGRUNvbG9yTWF0cml4KiBmaWx0ZXJFZmZlY3QoKSBjb25zdDsKIAogICAgIHByb3RlY3Rl
ZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIHRoaXM7IH0KQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUK
ICAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0ZFQ29sb3JNYXRyaXhF
bGVtZW50LCBTdHJpbmcsIFN0cmluZywgSW4xLCBpbjEpCiAgICAgICAgIEFOSU1BVEVEX1BST1BF
UlRZX0RFQ0xBUkFUSU9OUyhTVkdGRUNvbG9yTWF0cml4RWxlbWVudCwgaW50LCBpbnQsIFR5cGUs
IHR5cGUpCiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdGRUNvbG9y
TWF0cml4RWxlbWVudCwgU1ZHTnVtYmVyTGlzdCosIFJlZlB0cjxTVkdOdW1iZXJMaXN0PiwgVmFs
dWVzLCB2YWx1ZXMpCi0gICAgICAgIG11dGFibGUgS0NhbnZhc0ZFQ29sb3JNYXRyaXggKm1fZmls
dGVyRWZmZWN0OworICAgICAgICBtdXRhYmxlIEtDYW52YXNGRUNvbG9yTWF0cml4KiBtX2ZpbHRl
ckVmZmVjdDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2ODg3KQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5p
a29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwg
MjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIyLDE3ICsyMiwxMSBAQAogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJBdHRyLmgiCisjaW5jbHVk
ZSAiU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5o
IgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJHcmFkaWVudC5oIgotCi0jaW5jbHVkZSAia3N2Zy5oIgotI2luY2x1ZGUgIlNWR05h
bWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUu
aCIKLSNpbmNsdWRlICJTVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdOYW1l
cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY1LDE3ICs1OSwxNyBAQCB2b2lkIFNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VNYXBwZWRBCiAgICAgY29uc3QgU3RyaW5nJiB2YWx1
ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b3Bl
cmF0b3JBdHRyKQogICAgIHsKLSAgICAgICAgaWYodmFsdWUgPT0gIm92ZXIiKQorICAgICAgICBp
ZiAodmFsdWUgPT0gIm92ZXIiKQogICAgICAgICAgICAgc2V0X29wZXJhdG9yQmFzZVZhbHVlKFNW
R19GRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSKTsKLSAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAi
aW4iKQorICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAiaW4iKQogICAgICAgICAgICAgc2V0X29w
ZXJhdG9yQmFzZVZhbHVlKFNWR19GRUNPTVBPU0lURV9PUEVSQVRPUl9JTik7Ci0gICAgICAgIGVs
c2UgaWYodmFsdWUgPT0gIm91dCIpCisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJvdXQiKQog
ICAgICAgICAgICAgc2V0X29wZXJhdG9yQmFzZVZhbHVlKFNWR19GRUNPTVBPU0lURV9PUEVSQVRP
Ul9PVVQpOwotICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJhdG9wIikKKyAgICAgICAgZWxzZSBp
ZiAodmFsdWUgPT0gImF0b3AiKQogICAgICAgICAgICAgc2V0X29wZXJhdG9yQmFzZVZhbHVlKFNW
R19GRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QKTsKLSAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAi
eG9yIikKKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gInhvciIpCiAgICAgICAgICAgICBzZXRf
b3BlcmF0b3JCYXNlVmFsdWUoU1ZHX0ZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUik7Ci0gICAgICAg
IGVsc2UgaWYodmFsdWUgPT0gImFyaXRobWV0aWMiKQorICAgICAgICBlbHNlIGlmICh2YWx1ZSA9
PSAiYXJpdGhtZXRpYyIpCiAgICAgICAgICAgICBzZXRfb3BlcmF0b3JCYXNlVmFsdWUoU1ZHX0ZF
Q09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpOwogICAgIH0KICAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0ZFQ29tcG9zaXRlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0ZFQ29tcG9zaXRlRWxlbWVudC5oCShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3
aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2pl
Y3QKIApAQCAtMjQsOCArMjQsOCBAQAogI2RlZmluZSBLU1ZHX1NWR0ZFQ29tcG9zaXRlRWxlbWVu
dEltcGxfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgorI2lu
Y2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZQogewpAQCAtNDgsOSArNDgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZQogCiAgICAg
ICAgIC8vICdTVkdGRUNvbXBvc2l0ZUVsZW1lbnQnIGZ1bmN0aW9ucwogICAgICAgICAvLyBEZXJp
dmVkIGZyb206ICdFbGVtZW50JwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cik7CiAKLSAgICAgICAgdmlydHVh
bCBLQ2FudmFzRkVDb21wb3NpdGUgKmZpbHRlckVmZmVjdCgpIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIEtDYW52YXNGRUNvbXBvc2l0ZSogZmlsdGVyRWZmZWN0KCkgY29uc3Q7CiAKICAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiB0aGlzOyB9CkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlCiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdGRUNvbXBvc2l0
ZUVsZW1lbnQsIGRvdWJsZSwgZG91YmxlLCBLMiwgazIpCiAgICAgICAgIEFOSU1BVEVEX1BST1BF
UlRZX0RFQ0xBUkFUSU9OUyhTVkdGRUNvbXBvc2l0ZUVsZW1lbnQsIGRvdWJsZSwgZG91YmxlLCBL
MywgazMpCiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdGRUNvbXBv
c2l0ZUVsZW1lbnQsIGRvdWJsZSwgZG91YmxlLCBLNCwgazQpCi0gICAgICAgIG11dGFibGUgS0Nh
bnZhc0ZFQ29tcG9zaXRlICptX2ZpbHRlckVmZmVjdDsKKyAgICAgICAgbXV0YWJsZSBLQ2FudmFz
RkVDb21wb3NpdGUqIG1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50LmNwcAkocmV2aXNpb24gMTY4ODcpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNyArMjAs
MTIgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5jbHVk
ZSAiQXR0ci5oIgotCi0jaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oPgotI2luY2x1
ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KKyNpbmNsdWRlICJTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgImtzdmcuaCIKKyNpbmNsdWRlICJL
UmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCi0jaW5jbHVkZSAiU1ZH
UmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaCIK
IAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudDo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQpAQCAtNTQsMTMgKzQ5LDEz
IEBAIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFRGlzcGwKIAogS0NDaGFubmVs
U2VsZWN0b3JUeXBlIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c3RyaW5nVG9DaGFubmVs
KGNvbnN0IFN0cmluZyYga2V5KQogewotICAgIGlmKGtleSA9PSAiUiIpCisgICAgaWYgKGtleSA9
PSAiUiIpCiAgICAgICAgIHJldHVybiBDU19SRUQ7Ci0gICAgZWxzZSBpZihrZXkgPT0gIkciKQor
ICAgIGVsc2UgaWYgKGtleSA9PSAiRyIpCiAgICAgICAgIHJldHVybiBDU19HUkVFTjsKLSAgICBl
bHNlIGlmKGtleSA9PSAiQiIpCisgICAgZWxzZSBpZiAoa2V5ID09ICJCIikKICAgICAgICAgcmV0
dXJuIENTX0JMVUU7Ci0gICAgZWxzZSBpZihrZXkgPT0gIkEiKQorICAgIGVsc2UgaWYgKGtleSA9
PSAiQSIpCiAgICAgICAgIHJldHVybiBDU19BTFBIQTsKICAgICAvL2Vycm9yCiAgICAgcmV0dXJu
IChLQ0NoYW5uZWxTZWxlY3RvclR5cGUpLTE7CkBAIC05Nyw0ICs5Miw2IEBAIEtDYW52YXNGRURp
c3BsYWNlbWVudE1hcCogU1ZHRkVEaXNwbGFjZW0KICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMo
bV9maWx0ZXJFZmZlY3QpOwogICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKIH0KKworfQogI2Vu
ZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQuaAkocmV2aXNpb24gMTY4ODcpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEs
OCArMjEsOCBAQAogI2RlZmluZSBLU1ZHX1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudEltcGxf
SAogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgorI2luY2x1ZGUg
IlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBLQ2FudmFzRkVGbG9vZCAqU1ZH
RkVGbG9vZEVsZW1lbnQ6OmZpbHRlCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUgKnN2Z1N0eWxl
ID0gZmlsdGVyU3R5bGUtPnN2Z1N0eWxlKCk7CiAgICAgbV9maWx0ZXJFZmZlY3QtPnNldEZsb29k
Q29sb3Ioc3ZnU3R5bGUtPmZsb29kQ29sb3IoKSk7CiAgICAgbV9maWx0ZXJFZmZlY3QtPnNldEZs
b29kT3BhY2l0eShzdmdTdHlsZS0+Zmxvb2RPcGFjaXR5KCkpOwotICAgIGZpbHRlclN0eWxlLT5k
ZXJlZih2aWV3KCktPnJlbmRlckFyZW5hKCkpOworICAgIGZpbHRlclN0eWxlLT5kZXJlZihkb2N1
bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKIAogICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKIH0K
SW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRnVuY0FFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUZ1bmNBRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2
ODg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVGdW5jQUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0
LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjQsMTAgKzI0LDEwIEBACiAjaWZkZWYgU1ZH
X1NVUFBPUlQKICNpbmNsdWRlICJTVkdGRUZ1bmNBRWxlbWVudC5oIgogCi11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRkVGdW5jQUVsZW1lbnQ6OlNW
R0ZFRnVuY0FFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpk
b2MpIDogCi1TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudCh0YWdOYW1lLCBkb2Mp
CitTVkdGRUZ1bmNBRWxlbWVudDo6U1ZHRkVGdW5jQUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IFNWR0NvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb25FbGVtZW50KHRhZ05hbWUsIGRvYykKIHsKIH0KIApAQCAtMzUsNiArMzUsOCBAQCBTVkdG
RUZ1bmNBRWxlbWVudDo6flNWR0ZFRnVuY0FFbGVtZW50KCkKIHsKIH0KIAorfQorCiAvLyB2aW06
dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRkVGdW5jQkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ZFRnVuY0JFbGVtZW50LmNwcAkocmV2aXNpb24gMTY4ODcpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdGRUZ1bmNCRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdp
bGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAogCkBAIC0yNCwxMCArMjQsMTAgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNW
R0ZFRnVuY0JFbGVtZW50LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1TVkdGRUZ1bmNCRWxlbWVudDo6U1ZHRkVGdW5jQkVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykgOiAKLVNWR0NvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb25FbGVtZW50KHRhZ05hbWUsIGRvYykKK1NWR0ZFRnVuY0JFbGVtZW50OjpT
VkdGRUZ1bmNCRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAq
ZG9jKQorICAgIDogU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQodGFnTmFtZSwg
ZG9jKQogewogfQogCkBAIC0zNSw2ICszNSw4IEBAIFNWR0ZFRnVuY0JFbGVtZW50Ojp+U1ZHRkVG
dW5jQkVsZW1lbnQoKQogewogfQogCit9CisKIC8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBT
VkdfU1VQUE9SVAogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUZ1bmNHRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVGdW5jR0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRnVuY0dFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAg
ICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDkgKzI0LDkgQEAK
ICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0ZFRnVuY0dFbGVtZW50LmgiCiAKLXVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGRUZ1bmNH
RWxlbWVudDo6U1ZHRkVGdW5jR0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQgKmRvYykgOiAKK1NWR0ZFRnVuY0dFbGVtZW50OjpTVkdGRUZ1bmNHRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKSA6IAogU1ZHQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jKQogewogfQpAQCAtMzUsNiAr
MzUsOCBAQCBTVkdGRUZ1bmNHRWxlbWVudDo6flNWR0ZFRnVuY0dFbGVtZW50KCkKIHsKIH0KIAor
fQorCiAvLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHRkVGdW5jUkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0ZFRnVuY1JFbGVtZW50LmNwcAkocmV2aXNpb24gMTY4ODcpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUZ1bmNSRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFpp
bW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIw
MDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBLREUgcHJvamVjdAogCkBAIC0yNCwxMCArMjQsMTAgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAog
I2luY2x1ZGUgIlNWR0ZFRnVuY1JFbGVtZW50LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGRUZ1bmNSRWxlbWVudDo6U1ZHRkVGdW5jUkVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykgOiAKLVNW
R0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50KHRhZ05hbWUsIGRvYykKK1NWR0ZFRnVu
Y1JFbGVtZW50OjpTVkdGRUZ1bmNSRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jKQorICAgIDogU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1l
bnQodGFnTmFtZSwgZG9jKQogewogfQogCkBAIC0zNSw2ICszNSw4IEBAIFNWR0ZFRnVuY1JFbGVt
ZW50Ojp+U1ZHRkVGdW5jUkVsZW1lbnQoKQogewogfQogCit9CisKIC8vIHZpbTp0cz00Om5vZXQK
ICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2ODg3KQorKysgV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAKQEAgLTIyLDIwICsyMiwxNiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJBdHRyLmgiCisjaW5jbHVkZSAiU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgogI2lu
Y2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJHcmFkaWVudC5oIgotCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxw
ZXIuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKK1NWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudDo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQogICAgICwgbV9zdGREZXZpYXRpb25YKDAu
MCkKICAgICAsIG1fc3RkRGV2aWF0aW9uWSgwLjApCkBAIC01NiwyNyArNTIsMjYgQEAgdm9pZCBT
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnNldFN0ZERldgogewogfQogCi12b2lkIFNWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICph
dHRyKQordm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0
ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzdGREZXZpYXRp
b25BdHRyKSB7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IG51bWJlcnMgPSB2YWx1ZS5zcGxpdCgn
ICcpOwogICAgICAgICBzZXRTdGREZXZpYXRpb25YQmFzZVZhbHVlKG51bWJlcnNbMF0udG9Eb3Vi
bGUoKSk7Ci0gICAgICAgIGlmKG51bWJlcnMuc2l6ZSgpID09IDEpCisgICAgICAgIGlmIChudW1i
ZXJzLnNpemUoKSA9PSAxKQogICAgICAgICAgICAgc2V0U3RkRGV2aWF0aW9uWUJhc2VWYWx1ZShu
dW1iZXJzWzBdLnRvRG91YmxlKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzZXRTdGRE
ZXZpYXRpb25ZQmFzZVZhbHVlKG51bWJlcnNbMV0udG9Eb3VibGUoKSk7Ci0gICAgfQotICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCiAgICAgICAgIHNldEluMUJhc2VWYWx1
ZSh2YWx1ZSk7CiAgICAgZWxzZQogICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1LQ2FudmFzRkVHYXVz
c2lhbkJsdXIgKlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QK
K0tDYW52YXNGRUdhdXNzaWFuQmx1ciogU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpmaWx0ZXJF
ZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAgICAgIG1fZmls
dGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFR2F1c3NpYW5CbHVyICo+KHJlbmRlcmlu
Z0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfR0FVU1NJQU5fQkxVUikpOworICAgICAg
ICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRUdhdXNzaWFuQmx1cio+KHJl
bmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfR0FVU1NJQU5fQkxVUikpOwog
ICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwogICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRJbihpbjEoKSk7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQuaAkocmV2aXNpb24gMTY4ODcpCisrKyBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8
d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9q
ZWN0CiAKQEAgLTI0LDggKzI0LDggQEAKICNkZWZpbmUgS1NWR19TVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnRJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSAiU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiS0NhbnZhc0ZpbHRlcnMuaCIK
KyNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUKIHsKQEAgLTQwLDkgKzQwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAg
ICAgICAgdm9pZCBzZXRTdGREZXZpYXRpb24oZmxvYXQgc3RkRGV2aWF0aW9uWCwgZmxvYXQgc3Rk
RGV2aWF0aW9uWSk7CiAKICAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxlbWVudCcKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0
cik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUqIGF0dHIpOwogCi0gICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZFR2F1c3NpYW5CbHVyICpm
aWx0ZXJFZmZlY3QoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVHYXVzc2lhbkJs
dXIqIGZpbHRlckVmZmVjdCgpIGNvbnN0OwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0
dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhp
czsgfQpAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICBBTklNQVRF
RF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LCBTdHJpbmcs
IFN0cmluZywgSW4xLCBpbjEpCiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
UyhTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQsIGRvdWJsZSwgZG91YmxlLCBTdGREZXZpYXRpb25Y
LCBzdGREZXZpYXRpb25YKQogICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMo
U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LCBkb3VibGUsIGRvdWJsZSwgU3RkRGV2aWF0aW9uWSwg
c3RkRGV2aWF0aW9uWSkKLSAgICAgICAgbXV0YWJsZSBLQ2FudmFzRkVHYXVzc2lhbkJsdXIgKm1f
ZmlsdGVyRWZmZWN0OworICAgICAgICBtdXRhYmxlIEtDYW52YXNGRUdhdXNzaWFuQmx1ciogbV9m
aWx0ZXJFZmZlY3Q7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmNwcAkocmV2aXNpb24gMTY4ODcpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFpp
bW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIw
MDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIwMDUgT2xpdmVy
IEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4KIAogICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTE3
LDIzICsxNywxOCBAQAogICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCiAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAogICAgIEJvc3Rvbiwg
TUEgMDIxMTEtMTMwNywgVVNBLgotICovCisqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZk
ZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJBdHRyLmgiCi0KLSNpbmNsdWRlICJLQ2FudmFzRmls
dGVycy5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbmNsdWRlICJTVkdGRUxp
Z2h0RWxlbWVudC5oIgogCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxw
ZXIuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNWR0ZFTGlnaHRF
bGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0ZFTGlnaHRFbGVtZW50OjpTVkdGRUxpZ2h0
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZH
RkVMaWdodEVsZW1lbnQ6OlNWR0ZFTGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdFbGVtZW50KHRhZ05hbWUsIGRvYykKICAg
ICAsIG1fYXppbXV0aCgwLjApCiAgICAgLCBtX2VsZXZhdGlvbigwLjApCkBAIC02NCw3ICs1OSw3
IEBAIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFTGlnaHQKIEFOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFTGlnaHRFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVt
YmVyLCBTcGVjdWxhckV4cG9uZW50LCBzcGVjdWxhckV4cG9uZW50LCBTVkdOYW1lczo6c3BlY3Vs
YXJFeHBvbmVudEF0dHIubG9jYWxOYW1lKCksIG1fc3BlY3VsYXJFeHBvbmVudCkKIEFOSU1BVEVE
X1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFTGlnaHRFbGVtZW50LCBkb3VibGUsIE51bWJlciwg
bnVtYmVyLCBMaW1pdGluZ0NvbmVBbmdsZSwgbGltaXRpbmdDb25lQW5nbGUsIFNWR05hbWVzOjps
aW1pdGluZ0NvbmVBbmdsZUF0dHIubG9jYWxOYW1lKCksIG1fbGltaXRpbmdDb25lQW5nbGUpCiAK
LXZvaWQgU1ZHRkVMaWdodEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSAqYXR0cikKK3ZvaWQgU1ZHRkVMaWdodEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0
ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjphemltdXRoQXR0
cikKQEAgLTkwLDUgKzg1LDggQEAgdm9pZCBTVkdGRUxpZ2h0RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaQogICAgIGVsc2UKICAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CiB9CisKK30KKwogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaAkocmV2aXNpb24gMTY4ODcpCisrKyBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3
aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA1IE9saXZlciBIdW50IDxvamgx
NkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMyw4ICsyMyw4IEBA
CiAjZGVmaW5lIEtTVkdfU1ZHRkVMaWdodEVsZW1lbnRJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9S
VAogCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIktDYW52YXNGaWx0ZXJzLmgi
CisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewpAQCAtMzcs
MTAgKzM3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR0ZFTGln
aHRFbGVtZW50KCk7CiAgICAgICAgIAogICAgICAgICAvLyAnU1ZHQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbkVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICB2aXJ0dWFsIEtDTGlnaHRTb3VyY2Ug
KmxpZ2h0U291cmNlKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIEtDTGlnaHRTb3VyY2Uq
IGxpZ2h0U291cmNlKCkgY29uc3QgPSAwOwogICAgICAgICAKICAgICAgICAgLy8gRGVyaXZlZCBm
cm9tOiAnRWxlbWVudCcKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7ICAgICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cik7ICAgICAgICAKICAgICBw
cml2YXRlOgogICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHRkVMaWdo
dEVsZW1lbnQsIGRvdWJsZSwgZG91YmxlLCBBemltdXRoLCBhemltdXRoKQogICAgICAgICBBTklN
QVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHRkVMaWdodEVsZW1lbnQsIGRvdWJsZSwgZG91
YmxlLCBFbGV2YXRpb24sIGVsZXZhdGlvbikKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZF
TWVyZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU1l
cmdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2ODg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
RkVNZXJnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtk
ZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAt
MjIsMjAgKzIyLDE1IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQUE9S
VAotI2luY2x1ZGUgIkF0dHIuaCIKLQotI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMu
aD4KLSNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+Ci0KLSNpbmNs
dWRlICJrc3ZnLmgiCi0jaW5jbHVkZSAiU1ZHSGVscGVyLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVy
U3R5bGUuaCIKICNpbmNsdWRlICJTVkdGRU1lcmdlRWxlbWVudC5oIgorCisjaW5jbHVkZSAiS1Jl
bmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlNWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlNWR0hlbHBlci5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotU1ZHRkVNZXJnZUVsZW1lbnQ6OlNWR0ZFTWVyZ2VFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCitTVkdGRU1lcmdlRWxlbWVu
dDo6U1ZHRkVNZXJnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvYykKICAgICA6IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyh0YWdO
YW1lLCBkb2MpCiAgICAgLCBtX2ZpbHRlckVmZmVjdCgwKQogewpAQCAtNDYsMTAgKzQxLDEwIEBA
IFNWR0ZFTWVyZ2VFbGVtZW50Ojp+U1ZHRkVNZXJnZUVsZW1lbnQoKQogICAgIGRlbGV0ZSBtX2Zp
bHRlckVmZmVjdDsKIH0KIAotS0NhbnZhc0ZFTWVyZ2UgKlNWR0ZFTWVyZ2VFbGVtZW50OjpmaWx0
ZXJFZmZlY3QoKSBjb25zdAorS0NhbnZhc0ZFTWVyZ2UqIFNWR0ZFTWVyZ2VFbGVtZW50OjpmaWx0
ZXJFZmZlY3QoKSBjb25zdAogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCi0gICAgICAgIG1f
ZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFTWVyZ2UgKj4ocmVuZGVyaW5nRGV2
aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9NRVJHRSkpOworICAgICAgICBtX2ZpbHRlckVm
ZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRU1lcmdlKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNy
ZWF0ZUZpbHRlckVmZmVjdChGRV9NRVJHRSkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVj
dCk7CkBAIC01Nyw3ICs1Miw3IEBAIEtDYW52YXNGRU1lcmdlICpTVkdGRU1lcmdlRWxlbWVudDo6
ZmlsdGUKICAgICBWZWN0b3I8U3RyaW5nPiBtZXJnZUlucHV0czsKICAgICBmb3IgKE5vZGUqIG4g
PSBmaXJzdENoaWxkKCk7IG4gIT0gMDsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAg
aWYgKG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZlTWVyZ2VOb2RlVGFnKSkKLSAgICAgICAgICAg
IG1lcmdlSW5wdXRzLmFwcGVuZChzdGF0aWNfY2FzdDxTVkdGRU1lcmdlTm9kZUVsZW1lbnQgKj4o
biktPmluMSgpKTsKKyAgICAgICAgICAgIG1lcmdlSW5wdXRzLmFwcGVuZChzdGF0aWNfY2FzdDxT
VkdGRU1lcmdlTm9kZUVsZW1lbnQqPihuKS0+aW4xKCkpOwogICAgIH0KIAogICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRNZXJnZUlucHV0cyhtZXJnZUlucHV0cyk7CkBAIC02NSw2ICs2MCw4IEBAIEtD
YW52YXNGRU1lcmdlICpTVkdGRU1lcmdlRWxlbWVudDo6ZmlsdGUKICAgICByZXR1cm4gbV9maWx0
ZXJFZmZlY3Q7CiB9CiAKK30KKwogLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIFNWR19TVVBQ
T1JUCiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAkocmV2aXNpb24g
MTY4ODcpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0
LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjQsOCArMjQsOCBAQAogI2RlZmluZSBLU1ZH
X1NWR0ZFTWVyZ2VFbGVtZW50SW1wbF9ICiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAotI2luY2x1ZGUg
IlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIktDYW52
YXNGaWx0ZXJzLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7CkBAIC0zNSwxMyArMzUsMTMgQEAgbmFtZXNw
YWNlIFdlYkNvcmUKICAgICAgICAgU1ZHRkVNZXJnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CiAgICAgICAgIHZpcnR1YWwgflNWR0ZFTWVyZ2VFbGVtZW50KCk7CiAK
LSAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVNZXJnZSAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZFTWVyZ2UqIGZpbHRlckVmZmVjdCgpIGNvbnN0OwogCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRF
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
bXV0YWJsZSBLQ2FudmFzRkVNZXJnZSAqbV9maWx0ZXJFZmZlY3Q7CisgICAgICAgIG11dGFibGUg
S0NhbnZhc0ZFTWVyZ2UqIG1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50
LmNwcAkocmV2aXNpb24gMTY4ODcpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU1lcmdlTm9k
ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+
Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Cisg
ICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjIsMTQg
KzIyLDE0IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQUE9SVAotI2lu
Y2x1ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJTVkdGRU1lcmdlTm9kZUVsZW1lbnQuaCIKIAogI2lu
Y2x1ZGUgIlNWR0hlbHBlci5oIgotI2luY2x1ZGUgIlNWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oIgog
Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRkVN
ZXJnZU5vZGVFbGVtZW50OjpTVkdGRU1lcmdlTm9kZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykgOiBTVkdFbGVtZW50KHRhZ05hbWUsIGRvYykKK1NW
R0ZFTWVyZ2VOb2RlRWxlbWVudDo6U1ZHRkVNZXJnZU5vZGVFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBTVkdFbGVtZW50KHRhZ05hbWUs
IGRvYykKIHsKIH0KIApAQCAtMzksNyArMzksNyBAQCBTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6On5T
VkdGRU1lcmdlTm9kZUVsCiAKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFTWVy
Z2VOb2RlRWxlbWVudCwgU3RyaW5nLCBTdHJpbmcsIHN0cmluZywgSW4xLCBpbjEsIFNWR05hbWVz
OjppbkF0dHIubG9jYWxOYW1lKCksIG1faW4xKQogCi12b2lkIFNWR0ZFTWVyZ2VOb2RlRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBTVkdG
RU1lcmdlTm9kZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSog
YXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCkBAIC00OCw2ICs0OCw3IEBAIHZv
aWQgU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpwYXJzZU1hcHBlZEEKICAgICAgICAgU1ZHRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKK30KIAogLy8gdmltOnRzPTQ6bm9l
dAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU1l
cmdlTm9kZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU1l
cmdlTm9kZUVsZW1lbnQuaAkocmV2aXNpb24gMTY4ODcpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdGRU1lcmdlTm9kZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZv
eEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAK
QEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZH
RkVNZXJnZU5vZGVFbGVtZW50KCk7CiAKICAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxlbWVu
dCcKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSAqYXR0cik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUqIGF0dHIpOwogCiAgICAgICAgIC8vICdTVkdGRU1lcmdlTm9kZUVsZW1l
bnQnIGZ1bmN0aW9ucwogICAgIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2ODg3KQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtv
bGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIw
MDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIwMDUg
T2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4KIAogICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
QEAgLTE3LDI2ICsxNywyMSBAQAogICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCiAgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAogICAgIEJv
c3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCisqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJBdHRyLmgiCi0KLSNpbmNsdWRlIDxrY2Fu
dmFzL0tDYW52YXNGaWx0ZXJzLmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmlu
Z0RldmljZS5oPgorI2luY2x1ZGUgIlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaCIKIAot
I2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHSGVscGVyLmgiCi0jaW5jbHVkZSAi
U1ZHUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVk
ZSAiU1ZHQ29sb3IuaCIKKyNpbmNsdWRlICJTVkdIZWxwZXIuaCIKKyNpbmNsdWRlICJTVkdOYW1l
cy5oIgogI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudC5oIgotCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpTVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50ICpkb2MpCitTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpTVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2Mp
CiAgICAgOiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9j
KQogICAgICwgbV9zcGVjdWxhckNvbnN0YW50KDAuMCkKICAgICAsIG1fc3BlY3VsYXJFeHBvbmVu
dCgwLjApCkBAIC02MSw3ICs1Niw3IEBAIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNW
R0ZFU3BlY3UKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFU3BlY3VsYXJMaWdo
dGluZ0VsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIEtlcm5lbFVuaXRMZW5ndGhZLCBr
ZXJuZWxVbml0TGVuZ3RoWSwgImtlcm5lbFVuaXRMZW5ndGhZIiwgbV9rZXJuZWxVbml0TGVuZ3Ro
WSkKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFU3BlY3VsYXJMaWdodGluZ0Vs
ZW1lbnQsIFNWR0NvbG9yKiwgQ29sb3IsIGNvbG9yLCBMaWdodGluZ0NvbG9yLCBsaWdodGluZ0Nv
bG9yLCBTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyLmxvY2FsTmFtZSgpLCBtX2xpZ2h0aW5n
Q29sb3IuZ2V0KCkpCiAKLXZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0
dHIpCiB7ICAgIAogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKQEAgLTg1LDEwICs4MCwxMCBA
QCB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnBhcnNlCiAgICAgICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cik7CiB9CiAKLUtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgKlNWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQ6OmZpbHRlckVmZmVjdCgpIGNvbnN0CitLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5n
KiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3QoKSBjb25zdAogewog
ICAgIGlmICghbV9maWx0ZXJFZmZlY3QpIAotICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRp
Y19jYXN0PEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNy
ZWF0ZUZpbHRlckVmZmVjdChGRV9TUEVDVUxBUl9MSUdIVElORykpOworICAgICAgICBtX2ZpbHRl
ckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcqPihyZW5kZXJp
bmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX1NQRUNVTEFSX0xJR0hUSU5HKSk7CiAg
ICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKGluMSgpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0
ZXMobV9maWx0ZXJFZmZlY3QpOwogICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTcGVjdWxhckNvbnN0
YW50KChzcGVjdWxhckNvbnN0YW50KCkpKTsKQEAgLTEwNiwxNSArMTAxLDE4IEBAIHZvaWQgU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6dXBkYXQKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0
KQogICAgICAgICByZXR1cm47CiAKLSAgICBLQ0xpZ2h0U291cmNlICpsaWdodCA9IDA7ICAgIAot
ICAgIGZvciAoTm9kZSAqbiA9IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkp
IHsKKyAgICBLQ0xpZ2h0U291cmNlKiBsaWdodCA9IDA7ICAgIAorICAgIGZvciAoTm9kZSogbiA9
IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKG4t
Pmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZlRGlzdGFudExpZ2h0VGFnKXx8bi0+aGFzVGFnTmFtZShT
VkdOYW1lczo6ZmVQb2ludExpZ2h0VGFnKXx8bi0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmVTcG90
TGlnaHRUYWcpKSB7Ci0gICAgICAgICAgICBTVkdGRUxpZ2h0RWxlbWVudCAqbGlnaHROb2RlID0g
c3RhdGljX2Nhc3Q8U1ZHRkVMaWdodEVsZW1lbnQgKj4obik7IAorICAgICAgICAgICAgU1ZHRkVM
aWdodEVsZW1lbnQqIGxpZ2h0Tm9kZSA9IHN0YXRpY19jYXN0PFNWR0ZFTGlnaHRFbGVtZW50Kj4o
bik7IAogICAgICAgICAgICAgbGlnaHQgPSBsaWdodE5vZGUtPmxpZ2h0U291cmNlKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
TGlnaHRTb3VyY2UobGlnaHQpOwogfQorCit9CisKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dC5oCShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAg
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUu
b3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgogICAgICAgICAgICAgICAgICAgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5j
YW50ZXJidXJ5LmFjLm56PgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjMsOCArMjMsOCBAQAogI2RlZmluZSBL
U1ZHX1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9S
VAogCi0jaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAj
aW5jbHVkZSAiS0NhbnZhc0ZpbHRlcnMuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKQEAgLTM4LDkgKzM4
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgCiAgICAgICAgIC8vICdTVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnQnIGZ1bmN0aW9ucwogICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdF
bGVtZW50JwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlICphdHRyKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cik7CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIEtD
YW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgKmZpbHRlckVmZmVjdCgpIGNvbnN0OworICAgICAgICB2
aXJ0dWFsIEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcqIGZpbHRlckVmZmVjdCgpIGNvbnN0Owog
CiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRl
eHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQpAQCAtNTQsNyArNTQsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZQogICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudCwgZG91YmxlLCBkb3VibGUsIEtlcm5lbFVuaXRMZW5n
dGhYLCBrZXJuZWxVbml0TGVuZ3RoWCkKICAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQsIGRvdWJsZSwgZG91YmxlLCBLZXJu
ZWxVbml0TGVuZ3RoWSwga2VybmVsVW5pdExlbmd0aFkpCiAgICAgICAgIC8vbmVlZCBvdGhlciBw
cm9wZXJ0aWVzIGhlcmUuLi4KLSAgICAgICAgbXV0YWJsZSBLQ2FudmFzRkVTcGVjdWxhckxpZ2h0
aW5nICptX2ZpbHRlckVmZmVjdDsKKyAgICAgICAgbXV0YWJsZSBLQ2FudmFzRkVTcGVjdWxhckxp
Z2h0aW5nKiBtX2ZpbHRlckVmZmVjdDsKICAgICAgICAgCiAgICAgICAgIC8vbGlnaHQgbWFuYWdl
bWVudAogICAgICAgICB2b2lkIHVwZGF0ZUxpZ2h0cygpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2ODg3KQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBO
aWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQs
IDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yMiwyMCArMjIsMTMgQEAKIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5jbHVkZSAiQXR0ci5oIgorI2luY2x1
ZGUgIlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIktDYW52YXNGaWx0ZXJz
LmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50LmgiCi0KLSNpbmNsdWRlICJrc3ZnLmgiCi0jaW5jbHVkZSAiU1ZH
SGVscGVyLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJTVkdGRVR1
cmJ1bGVuY2VFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRkVUdXJidWxl
bmNlRWxlbWVudDo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6U1ZHRkVUdXJi
dWxlbmNlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
KQogICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRv
YykKICAgICAsIG1fYmFzZUZyZXF1ZW5jeVgoMC4wKQogICAgICwgbV9iYXNlRnJlcXVlbmN5WSgw
LjApCkBAIC01OSwzMyArNTIsMjcgQEAgQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZH
RkVUdXJidQogQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVUdXJidWxlbmNlRWxl
bWVudCwgaW50LCBFbnVtZXJhdGlvbiwgZW51bWVyYXRpb24sIFN0aXRjaFRpbGVzLCBzdGl0Y2hU
aWxlcywgU1ZHTmFtZXM6OnN0aXRjaFRpbGVzQXR0ci5sb2NhbE5hbWUoKSwgbV9zdGl0Y2hUaWxl
cykKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQs
IGludCwgRW51bWVyYXRpb24sIGVudW1lcmF0aW9uLCBUeXBlLCB0eXBlLCBTVkdOYW1lczo6dHlw
ZUF0dHIubG9jYWxOYW1lKCksIG1fdHlwZSkKIAotdm9pZCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSog
YXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0eXBlQXR0cikKLSAgICB7Ci0gICAgICAgIGlm
KHZhbHVlID09ICJmcmFjdGFsTm9pc2UiKQorICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnR5cGVBdHRyKSB7CisgICAgICAgIGlmICh2YWx1ZSA9PSAiZnJhY3RhbE5vaXNlIikKICAg
ICAgICAgICAgIHNldFR5cGVCYXNlVmFsdWUoU1ZHX1RVUkJVTEVOQ0VfVFlQRV9GUkFDVEFMTk9J
U0UpOwotICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJ0dXJidWxlbmNlIikKKyAgICAgICAgZWxz
ZSBpZiAodmFsdWUgPT0gInR1cmJ1bGVuY2UiKQogICAgICAgICAgICAgc2V0VHlwZUJhc2VWYWx1
ZShTVkdfVFVSQlVMRU5DRV9UWVBFX1RVUkJVTEVOQ0UpOwotICAgIH0KLSAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN0aXRjaFRpbGVzQXR0cikKLSAgICB7Ci0gICAgICAg
IGlmKHZhbHVlID09ICJzdGl0Y2giKQorICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpzdGl0Y2hUaWxlc0F0dHIpIHsKKyAgICAgICAgaWYgKHZhbHVlID09ICJzdGl0Y2gi
KQogICAgICAgICAgICAgc2V0U3RpdGNoVGlsZXNCYXNlVmFsdWUoU1ZHX1NUSVRDSFRZUEVfU1RJ
VENIKTsKLSAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAibm9zdGl0Y2giKQorICAgICAgICBlbHNl
IGlmICh2YWx1ZSA9PSAibm9zdGl0Y2giKQogICAgICAgICAgICAgc2V0U3RpdGNoVGlsZXNCYXNl
VmFsdWUoU1ZHX1NUSVRDSFRZUEVfTk9TVElUQ0gpOwotICAgIH0KLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmJhc2VGcmVxdWVuY3lBdHRyKQotICAgIHsKKyAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6YmFzZUZyZXF1ZW5jeUF0dHIpIHsKICAg
ICAgICAgVmVjdG9yPFN0cmluZz4gbnVtYmVycyA9IHZhbHVlLnNwbGl0KCcgJyk7CiAgICAgICAg
IHNldEJhc2VGcmVxdWVuY3lYQmFzZVZhbHVlKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7Ci0gICAg
ICAgIGlmKG51bWJlcnMuc2l6ZSgpID09IDEpCisgICAgICAgIGlmIChudW1iZXJzLnNpemUoKSA9
PSAxKQogICAgICAgICAgICAgc2V0QmFzZUZyZXF1ZW5jeVlCYXNlVmFsdWUobnVtYmVyc1swXS50
b0RvdWJsZSgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0QmFzZUZyZXF1ZW5jeVlC
YXNlVmFsdWUobnVtYmVyc1sxXS50b0RvdWJsZSgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpzZWVkQXR0cikKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6c2VlZEF0dHIpCiAgICAgICAgIHNldFNlZWRCYXNlVmFsdWUodmFs
dWUudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpu
dW1PY3RhdmVzQXR0cikKICAgICAgICAgc2V0TnVtT2N0YXZlc0Jhc2VWYWx1ZSh2YWx1ZS5kZXBy
ZWNhdGVkU3RyaW5nKCkudG9VSW50KCkpOwpAQCAtOTMsMTAgKzgwLDEwIEBAIHZvaWQgU1ZHRkVU
dXJidWxlbmNlRWxlbWVudDo6cGFyc2VNYXBwZWQKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAotS0Nh
bnZhc0ZFVHVyYnVsZW5jZSAqU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6ZmlsdGVyRWZmZWN0KCkg
Y29uc3QKK0tDYW52YXNGRVR1cmJ1bGVuY2UqIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmZpbHRl
ckVmZmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKLSAgICAgICAgbV9m
aWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVUdXJidWxlbmNlICo+KHJlbmRlcmlu
Z0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfVFVSQlVMRU5DRSkpOworICAgICAgICBt
X2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRVR1cmJ1bGVuY2UqPihyZW5kZXJp
bmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX1RVUkJVTEVOQ0UpKTsKICAgICBpZiAo
IW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICAKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgJKHJldmlzaW9uIDE2ODg3KQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xh
cyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjQsOCArMjQsOCBAQAogI2RlZmluZSBLU1ZHX1NWR0ZF
VHVyYnVsZW5jZUVsZW1lbnRJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSAi
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiS0NhbnZh
c0ZpbHRlcnMuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKQEAgLTUwLDkgKzUwLDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUKIAogICAgICAgICAvLyAnU1ZHRkVUdXJidWxlbmNlRWxlbWVudCcgZnVuY3Rpb25z
CiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnQnCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKTsK
IAotICAgICAgICB2aXJ0dWFsIEtDYW52YXNGRVR1cmJ1bGVuY2UgKmZpbHRlckVmZmVjdCgpIGNv
bnN0OworICAgICAgICB2aXJ0dWFsIEtDYW52YXNGRVR1cmJ1bGVuY2UqIGZpbHRlckVmZmVjdCgp
IGNvbnN0OwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1l
bnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQpAQCAtNjQsNyArNjQs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJB
VElPTlMoU1ZHRkVUdXJidWxlbmNlRWxlbWVudCwgZG91YmxlLCBkb3VibGUsIFNlZWQsIHNlZWQp
CiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdGRVR1cmJ1bGVuY2VF
bGVtZW50LCBpbnQsIGludCwgU3RpdGNoVGlsZXMsIHN0aXRjaFRpbGVzKQogICAgICAgICBBTklN
QVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHRkVUdXJidWxlbmNlRWxlbWVudCwgaW50LCBp
bnQsIFR5cGUsIHR5cGUpCi0gICAgICAgIG11dGFibGUgS0NhbnZhc0ZFVHVyYnVsZW5jZSAqbV9m
aWx0ZXJFZmZlY3Q7CisgICAgICAgIG11dGFibGUgS0NhbnZhc0ZFVHVyYnVsZW5jZSogbV9maWx0
ZXJFZmZlY3Q7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2ODg3KQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1h
bm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5p
ZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
S0RFIHByb2plY3QKQEAgLTIzLDIwICsyMywyMCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJBdHRyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVy
RWxlbWVudC5oIgogCisjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZp
Y2UuaCIKICNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgotI2luY2x1ZGUgIlNWR1VuaXRUeXBl
cy5oIgotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHSGVscGVyLmgiCi0jaW5j
bHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNW
R0xlbmd0aC5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHVW5pdFR5cGVz
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmlsdGVyRWxlbWVudDo6U1ZHRmlsdGVy
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZH
RmlsdGVyRWxlbWVudDo6U1ZHRmlsdGVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHU3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2Mp
CiAgICAgLCBTVkdVUklSZWZlcmVuY2UoKQogICAgICwgU1ZHTGFuZ1NwYWNlKCkKQEAgLTgwLDI0
ICs4MCwyMCBAQCB2b2lkIFNWR0ZpbHRlckVsZW1lbnQ6OnNldEZpbHRlclJlcyh1bnNpCiB7CiB9
CiAKLXZvaWQgU1ZHRmlsdGVyRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlICphdHRyKQordm9pZCBTVkdGaWx0ZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0
dHItPnZhbHVlKCk7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZmlsdGVyVW5p
dHNBdHRyKQotICAgIHsKLSAgICAgICAgaWYodmFsdWUgPT0gInVzZXJTcGFjZU9uVXNlIikKKyAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpmaWx0ZXJVbml0c0F0dHIpIHsKKyAgICAg
ICAgaWYgKHZhbHVlID09ICJ1c2VyU3BhY2VPblVzZSIpCiAgICAgICAgICAgICBzZXRGaWx0ZXJV
bml0c0Jhc2VWYWx1ZShTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0Up
OwotICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJvYmplY3RCb3VuZGluZ0JveCIpCisgICAgICAg
IGVsc2UgaWYgKHZhbHVlID09ICJvYmplY3RCb3VuZGluZ0JveCIpCiAgICAgICAgICAgICBzZXRG
aWx0ZXJVbml0c0Jhc2VWYWx1ZShTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9V
TkRJTkdCT1gpOwotICAgIH0KLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnByaW1pdGl2ZVVuaXRzQXR0cikKLSAgICB7Ci0gICAgICAgIGlmKHZhbHVlID09ICJ1c2VyU3Bh
Y2VPblVzZSIpCisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByaW1p
dGl2ZVVuaXRzQXR0cikgeworICAgICAgICBpZiAodmFsdWUgPT0gInVzZXJTcGFjZU9uVXNlIikK
ICAgICAgICAgICAgIHNldFByaW1pdGl2ZVVuaXRzQmFzZVZhbHVlKFNWR1VuaXRUeXBlczo6U1ZH
X1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7Ci0gICAgICAgIGVsc2UgaWYodmFsdWUgPT0gIm9i
amVjdEJvdW5kaW5nQm94IikKKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gIm9iamVjdEJvdW5k
aW5nQm94IikKICAgICAgICAgICAgIHNldFByaW1pdGl2ZVVuaXRzQmFzZVZhbHVlKFNWR1VuaXRU
eXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7Ci0gICAgfQotICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQogICAgICAgICB4QmFzZVZhbHVlKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6eUF0dHIpCiAgICAgICAgIHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7
CkBAIC0xMDUsMjMgKzEwMSwyMiBAQCB2b2lkIFNWR0ZpbHRlckVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmliCiAgICAgICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUp
OwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKICAg
ICAgICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUpOwotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIGlmKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cikpIHJldHVybjsKLSAgICAgICAgaWYoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwotICAgICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOworICAgIGVsc2Ugewor
ICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkg
cmV0dXJuOworICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkgcmV0dXJuOworICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKIAogICAgICAgICBTVkdTdHlsZWRF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKICAgICB9CiB9CiAKLUtDYW52YXNG
aWx0ZXIgKlNWR0ZpbHRlckVsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKCkKK0tDYW52YXNGaWx0ZXIq
IFNWR0ZpbHRlckVsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKCkKIHsKICAgICBpZiAoIWF0dGFjaGVk
KCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFtX2ZpbHRlcikKLSAgICAgICAgbV9m
aWx0ZXIgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRmlsdGVyICo+KHJlbmRlcmluZ0RldmljZSgpLT5j
cmVhdGVSZXNvdXJjZShSU19GSUxURVIpKTsKKyAgICAgICAgbV9maWx0ZXIgPSBzdGF0aWNfY2Fz
dDxLQ2FudmFzRmlsdGVyKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVJlc291cmNlKFJTX0ZJ
TFRFUikpOwogCiAgICAgYm9vbCBmaWx0ZXJCQm94TW9kZSA9IGZpbHRlclVuaXRzKCkgPT0gU1ZH
VW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwogICAgIG1fZmlsdGVy
LT5zZXRGaWx0ZXJCb3VuZGluZ0JveE1vZGUoZmlsdGVyQkJveE1vZGUpOwpAQCAtMTM4LDEwICsx
MzMsMTAgQEAgS0NhbnZhc0ZpbHRlciAqU1ZHRmlsdGVyRWxlbWVudDo6Y2FudmFzUgogCiAgICAg
Ly8gVE9ETyA6IHVzZSBzd2l0Y2gvY2FzZSBpbnN0ZWFkPwogICAgIG1fZmlsdGVyLT5jbGVhckVm
ZmVjdHMoKTsKLSAgICBmb3IgKE5vZGUgKm4gPSBmaXJzdENoaWxkKCk7IG4gIT0gMDsgbiA9IG4t
Pm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgU1ZHRWxlbWVudCAqZWxlbWVudCA9IHN2Z19keW5h
bWljX2Nhc3Qobik7Ci0gICAgICAgIGlmKGVsZW1lbnQgJiYgZWxlbWVudC0+aXNGaWx0ZXJFZmZl
Y3QoKSkgewotICAgICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
ICpmZSA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyAq
PihlbGVtZW50KTsKKyAgICBmb3IgKE5vZGUqIG4gPSBmaXJzdENoaWxkKCk7IG4gIT0gMDsgbiA9
IG4tPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IHN2Z19k
eW5hbWljX2Nhc3Qobik7CisgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmlzRmlsdGVy
RWZmZWN0KCkpIHsKKyAgICAgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcyogZmUgPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMqPihlbGVtZW50KTsKICAgICAgICAgICAgIGlmIChmZS0+ZmlsdGVyRWZmZWN0KCkpCiAgICAg
ICAgICAgICAgICAgbV9maWx0ZXItPmFkZEZpbHRlckVmZmVjdChmZS0+ZmlsdGVyRWZmZWN0KCkp
OwogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVudC5oCShyZXZp
c2lvbiAxNjg4NykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICAgIENvcHlyaWdodCAo
QykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KIAogICAgIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdApAQCAtMjUsMzEgKzI1LDMwIEBACiAjZGVm
aW5lIEtTVkdfU1ZHRmlsdGVyRWxlbWVudEltcGxfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKKyNp
bmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgorI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQuaCIKICNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIKLSNpbmNsdWRlICJTVkdVUklS
ZWZlcmVuY2UuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIgotCi0jaW5jbHVkZSAiS0NhbnZhc0ZpbHRlcnMu
aCIKKyNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIFNWR0xlbmd0aDsKIAogICAgIGNsYXNzIFNWR0ZpbHRlckVsZW1lbnQgOiBwdWJs
aWMgU1ZHU3R5bGVkRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
YmxpYyBTVkdVUklSZWZlcmVuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dWJsaWMgU1ZHTGFuZ1NwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIFNWR1VSSVJlZmVyZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVibGljIFNWR0xhbmdTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQKICAgICB7CiAgICAgcHVibGljOgogICAg
ICAgICBTVkdGaWx0ZXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwog
ICAgICAgICB2aXJ0dWFsIH5TVkdGaWx0ZXJFbGVtZW50KCk7CiAKLSAgICAgICAgdmlydHVhbCBL
Q2FudmFzRmlsdGVyICpjYW52YXNSZXNvdXJjZSgpOworICAgICAgICB2aXJ0dWFsIEtDYW52YXNG
aWx0ZXIqIGNhbnZhc1Jlc291cmNlKCk7CiAKICAgICAgICAgLy8gJ1NWR0ZpbHRlckVsZW1lbnQn
IGZ1bmN0aW9ucwogICAgICAgICB2b2lkIHNldEZpbHRlclJlcyh1bnNpZ25lZCBsb25nIGZpbHRl
clJlc1gsIHVuc2lnbmVkIGxvbmcgZmlsdGVyUmVzWSkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0
dHIpOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQq
IGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQpAQCAtNjcsNyArNjYsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhTVkdGaWx0ZXJFbGVtZW50LCBsb25nLCBsb25nLCBGaWx0ZXJSZXNYLCBmaWx0ZXJSZXNY
KQogICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHRmlsdGVyRWxlbWVu
dCwgbG9uZywgbG9uZywgRmlsdGVyUmVzWSwgZmlsdGVyUmVzWSkKIAotICAgICAgICBLQ2FudmFz
RmlsdGVyICptX2ZpbHRlcjsKKyAgICAgICAgS0NhbnZhc0ZpbHRlciogbV9maWx0ZXI7CiAgICAg
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCShy
ZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hA
a2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBA
IC0yMiwyMSArMjIsMTcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQ
T1JUCi0jaW5jbHVkZSAiQXR0ci5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLSNp
bmNsdWRlICJTVkdVbml0VHlwZXMuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUg
IlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgorCisjaW5jbHVkZSAiU1ZH
RmlsdGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgorI2luY2x1ZGUgIlNWR05h
bWVzLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRl
ckVsZW1lbnQuaCIKLQotI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaD4KKyNpbmNs
dWRlICJTVkdVbml0VHlwZXMuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6U1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50ICpkb2MpCitTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyhjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHU3R5bGVkRWxlbWVudCh0YWdO
YW1lLCBkb2MpCiAgICAgLCBtX3gobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURUSCwgdmlld3Bv
cnRFbGVtZW50KCkpKQogICAgICwgbV95KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2
aWV3cG9ydEVsZW1lbnQoKSkpCkBAIC01OCw3ICs1NCw3IEBAIEFOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR0ZpbHRlclAKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcywgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5n
dGgsIEhlaWdodCwgaGVpZ2h0LCBTVkdOYW1lczo6aGVpZ2h0QXR0ci5sb2NhbE5hbWUoKSwgbV9o
ZWlnaHQuZ2V0KCkpCiBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMsIFN0cmluZywgU3RyaW5nLCBzdHJpbmcsIFJlc3VsdCwg
cmVzdWx0LCBTVkdOYW1lczo6cmVzdWx0QXR0ci5sb2NhbE5hbWUoKSwgbV9yZXN1bHQpCiAKLXZv
aWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRy
KQogewogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQpAQCAtNzUsMTQgKzcxLDE0IEBA
IHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGUKICAgICAgICAgcmV0dXJu
IFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi12b2lk
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1
dGVzKEtDYW52YXNGaWx0ZXJFZmZlY3QgKmZpbHRlckVmZmVjdCkgY29uc3QKK3ZvaWQgU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoS0Nh
bnZhc0ZpbHRlckVmZmVjdCogZmlsdGVyRWZmZWN0KSBjb25zdAogewogICAgIEFTU0VSVChmaWx0
ZXJFZmZlY3QpOwogICAgIGlmICghZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm47CiAgICAg
Ym9vbCBiYm94ID0gZmFsc2U7CiAgICAgaWYgKHBhcmVudE5vZGUoKSAmJiBwYXJlbnROb2RlKCkt
Pmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZpbHRlclRhZykpCi0gICAgICAgIGJib3ggPSBzdGF0aWNf
Y2FzdDxTVkdGaWx0ZXJFbGVtZW50ICo+KHBhcmVudE5vZGUoKSktPnByaW1pdGl2ZVVuaXRzKCkg
PT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOworICAgICAg
ICBiYm94ID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyRWxlbWVudCo+KHBhcmVudE5vZGUoKSktPnBy
aW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5E
SU5HQk9YOwogCiAgICAgeCgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CiAgICAgeSgpLT5zZXRC
Ym94UmVsYXRpdmUoYmJveCk7CkBAIC05OCw2ICs5NCw4IEBAIHZvaWQgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGUKICAgICBmaWx0ZXJFZmZlY3QtPnNldFJlc3VsdChyZXN1bHQo
KSk7CiB9CiAKK30KKwogLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAK
SW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5oCShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xh
cyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgS0RFIHByb2plY3QKIApAQCAtNDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgLy8gJ1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcycgZnVu
Y3Rpb25zCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpOwogCi0gICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZpbHRlckVmZmVjdCAq
ZmlsdGVyRWZmZWN0KCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIEtDYW52YXNGaWx0ZXJF
ZmZlY3QqIGZpbHRlckVmZmVjdCgpIGNvbnN0ID0gMDsKIAogICAgIHByb3RlY3RlZDoKLSAgICAg
ICAgdm9pZCBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoS0NhbnZhc0ZpbHRlckVmZmVjdCAqZmlsdGVy
RWZmZWN0KSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoS0NhbnZh
c0ZpbHRlckVmZmVjdCogZmlsdGVyRWZmZWN0KSBjb25zdDsKIAogICAgIHByb3RlY3RlZDoKICAg
ICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIHRoaXM7IH0K
</data>
<flag name="review"
          id="3687"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10980</attachid>
            <date>2006-10-08 09:15:18 -0700</date>
            <delta_ts>2006-10-31 11:11:26 -0800</delta_ts>
            <desc>Cleanup for svg SVGPath* code</desc>
            <filename>11217-path.diff</filename>
            <type>text/plain</type>
            <size>71814</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUwIEBACisyMDA2LTEwLTA4ICBSb2IgQnVpcyAgPGJ1aXNAa2RlLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTIxNworICAgICAgICBDbGVhbnVwIHN2ZyBj
b2Rpbmcgc3R5bGUKKworICAgICAgICBDbGVhbnVwIGNvZGluZyBzdHlsZSBpbiBTVkdQYXRoKiBj
bGFzc2VzLgorCisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpTVkdQYXRoRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6Z2V0UG9pbnRBdExlbmd0aCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0Nsb3NlUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ01vdmV0b0Ficyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ01vdmV0b1Jl
bCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0xp
bmV0b0Ficyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0
aFNlZ0xpbmV0b1JlbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6Y3JlYXRl
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxl
bWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRv
UXVhZHJhdGljUmVsKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpjcmVhdGVT
VkdQYXRoU2VnQXJjQWJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpjcmVh
dGVTVkdQYXRoU2VnQXJjUmVsKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50Ojpj
cmVhdGVTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9WZXJ0
aWNhbEFicyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50
OjpjcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVs
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY1Ntb290aEFicyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVu
dDo6Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnN2Z01vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoRWxlbWVudDo6c3ZnTGluZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVt
ZW50OjpzdmdMaW5lVG9Ib3Jpem9udGFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVt
ZW50OjpzdmdMaW5lVG9WZXJ0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVu
dDo6c3ZnQ3VydmVUb0N1YmljKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50Ojpz
dmdDdXJ2ZVRvQ3ViaWNTbW9vdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6
OnN2Z0N1cnZlVG9RdWFkcmF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6
OnN2Z0N1cnZlVG9RdWFkcmF0aWNTbW9vdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVs
ZW1lbnQ6OnN2Z0FyY1RvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6cGF0
aFNlZ0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6Om5vcm1hbGl6ZWRQ
YXRoU2VnTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6YW5pbWF0ZWRQ
YXRoU2VnTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6YW5pbWF0ZWRO
b3JtYWxpemVkUGF0aFNlZ0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6
OnRvUGF0aERhdGEpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5oOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdQYXRoU2VnLmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdGhT
ZWdBcmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0FyY0Ficzo6U1ZHUGF0aFNl
Z0FyY0Ficyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQXJjQWJzOjpzZXRYKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdBcmNBYnM6OnNldFkpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFNlZ0FyY0Ficzo6c2V0UjEpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNl
Z0FyY0Ficzo6c2V0UjIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0FyY0Ficzo6c2V0
QW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0FyY0Ficzo6c2V0TGFyZ2VBcmNG
bGFnKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdBcmNBYnM6OnNldFN3ZWVwRmxhZyk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQXJjUmVsOjpTVkdQYXRoU2VnQXJjUmVsKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdBcmNSZWw6OnNldFgpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aFNlZ0FyY1JlbDo6c2V0WSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
U2VnQXJjUmVsOjpzZXRSMSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQXJjUmVsOjpz
ZXRSMik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQXJjUmVsOjpzZXRBbmdsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQXJjUmVsOjpzZXRMYXJnZUFyY0ZsYWcpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0FyY1JlbDo6c2V0U3dlZXBGbGFnKToKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0FyYy5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRo
U2VnQ2xvc2VQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDbG9zZVBhdGg6
OlNWR1BhdGhTZWdDbG9zZVBhdGgpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoU2VnQ2xv
c2VQYXRoLmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6U1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY0Ficyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b0N1
YmljQWJzOjpzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNB
YnM6OnNldFkpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6
c2V0WDEpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6c2V0
WTEpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6c2V0WDIp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6c2V0WTIpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6U1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY1JlbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
UmVsOjpzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6
OnNldFkpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6c2V0
WDEpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6c2V0WTEp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6c2V0WDIpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6c2V0WTIpOgorICAg
ICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmg6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGguY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJp
Y1Ntb290aEFicyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21v
b3RoQWJzOjpzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNT
bW9vdGhBYnM6OnNldFkpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJp
Y1Ntb290aEFiczo6c2V0WDIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY1Ntb290aEFiczo6c2V0WTIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY1Ntb290aFJlbDo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpzZXRYKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6OnNldFkpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6c2V0WDIp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6c2V0
WTIpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmg6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOjpTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpY0Ficyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY0Ficzo6c2V0WCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY0Ficzo6c2V0WSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY0Ficzo6c2V0WDEpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWNBYnM6OnNldFkxKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljUmVsOjpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6c2V0WCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6c2V0WSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6c2V0WDEpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OnNldFkxKToKKyAgICAg
ICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuaDoKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGguY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM6OlNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpzZXRZKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOjpTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY1Ntb290aFJlbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY1Ntb290aFJlbDo6c2V0WCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6c2V0WSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoLmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1Bh
dGhTZWdMaW5ldG8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b0Ficzo6
U1ZHUGF0aFNlZ0xpbmV0b0Ficyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGluZXRv
QWJzOjpzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaW5ldG9BYnM6OnNldFkp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b1JlbDo6U1ZHUGF0aFNlZ0xpbmV0
b1JlbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGluZXRvUmVsOjpzZXRYKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaW5ldG9SZWw6OnNldFkpOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRvLmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdGhT
ZWdMaW5ldG9Ib3Jpem9udGFsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaW5l
dG9Ib3Jpem9udGFsQWJzOjpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6c2V0WCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbDo6U1ZHUGF0aFNlZ0xpbmV0
b0hvcml6b250YWxSZWwpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWxSZWw6OnNldFgpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRvSG9y
aXpvbnRhbC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpTVkdQ
YXRoU2VnTGluZXRvVmVydGljYWxBYnMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xp
bmV0b1ZlcnRpY2FsQWJzOjpzZXRZKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaW5l
dG9WZXJ0aWNhbFJlbDo6U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6c2V0WSk6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9T
VkdQYXRoU2VnTW92ZXRvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdNb3ZldG9B
YnM6OlNWR1BhdGhTZWdNb3ZldG9BYnMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ01v
dmV0b0Ficzo6c2V0WCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTW92ZXRvQWJzOjpz
ZXRZKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdNb3ZldG9SZWw6OlNWR1BhdGhTZWdN
b3ZldG9SZWwpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ01vdmV0b1JlbDo6c2V0WCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTW92ZXRvUmVsOjpzZXRZKToKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ01vdmV0by5oOgorCiAyMDA2LTEwLTA3ICBBbmRlcnMgQ2Fy
bHNzb24gIDxhY2FybHNzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2ll
ai4KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2ODg3
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xh
cyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjIsMzAgKzIyLDI2IEBACiAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpZmRlZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJT
VkdQYXRoRWxlbWVudC5oIgogCi0jaW5jbHVkZSAia3N2Zy5oIgotI2luY2x1ZGUgIlNWR05hbWVz
LmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgor
I2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0FyYy5oIgotI2luY2x1
ZGUgIlNWR1BhdGhTZWdMaXN0LmgiCi0jaW5jbHVkZSAiU1ZHUGF0aEVsZW1lbnQuaCIKLSNpbmNs
dWRlICJTVkdQYXRoU2VnTGluZXRvLmgiCi0jaW5jbHVkZSAiU1ZHUGF0aFNlZ01vdmV0by5oIgog
I2luY2x1ZGUgIlNWR1BhdGhTZWdDbG9zZVBhdGguaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljLmgiCi0jaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmgiCi0jaW5j
bHVkZSAiU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwuaCIKLSNpbmNsdWRlICJTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpYy5oIgogI2luY2x1ZGUgIlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9v
dGguaCIKKyNpbmNsdWRlICJTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5oIgogI2luY2x1ZGUg
IlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoLmgiCi0KLSNpbmNsdWRlIDxrY2FudmFz
L2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CisjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpbmV0by5o
IgorI2luY2x1ZGUgIlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsLmgiCisjaW5jbHVkZSAiU1ZH
UGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmgiCisjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpc3QuaCIKKyNp
bmNsdWRlICJTVkdQYXRoU2VnTW92ZXRvLmgiCisjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR1BhdGhFbGVtZW50OjpTVkdQYXRoRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHUGF0aEVsZW1l
bnQ6OlNWR1BhdGhFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2MpCiAgICAgOiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCh0YWdOYW1lLCBkb2Mp
CiAgICAgLCBTVkdUZXN0cygpCiAgICAgLCBTVkdMYW5nU3BhY2UoKQpAQCAtNzAsMTQgKzY2LDE0
IEBAIEZsb2F0UG9pbnQgU1ZHUGF0aEVsZW1lbnQ6OmdldFBvaW50QXRMZW4KIHsKICAgICAvKgog
ICAgIGRvdWJsZSB0b3RhbERpc3RhbmNlID0gZ2V0VG90YWxMZW5ndGgoKTsKLSAgICBUMlA6OkJl
emllclBhdGggKnBhdGggPSBvd25lckRvYygpLT52aWV3KCktPnRvQmV6aWVyUGF0aChtX2l0ZW0p
OworICAgIFQyUDo6QmV6aWVyUGF0aCogcGF0aCA9IG93bmVyRG9jKCktPnZpZXcoKS0+dG9CZXpp
ZXJQYXRoKG1faXRlbSk7CiAgICAgaWYgKHBhdGgpIHsKICAgICAgICAgVDJQOjpQb2ludCBwOwog
ICAgICAgICBwYXRoLT5wb2ludFRhbmdlbnROb3JtYWxBdChkaXN0YW5jZSAvIHRvdGFsRGlzdGFu
Y2UsICZwKTsKICAgICAgICAgcmV0LT5zZXRYKHAueCgpKTsKICAgICAgICAgcmV0LT5zZXRZKHAu
eSgpKTsKICAgICB9Ci0gICAgKi8KKyAgICovCiAKICAgICByZXR1cm4gRmxvYXRQb2ludCgpOwog
fQpAQCAtODcsNDYgKzgzLDQ2IEBAIHVuc2lnbmVkIGxvbmcgU1ZHUGF0aEVsZW1lbnQ6OmdldFBh
dGhTZWcKICAgICByZXR1cm4gMDsKIH0KIAotU1ZHUGF0aFNlZ0Nsb3NlUGF0aCAqU1ZHUGF0aEVs
ZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdDbG9zZVBhdGgoKQorU1ZHUGF0aFNlZ0Nsb3NlUGF0aCog
U1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdDbG9zZVBhdGgoKQogewogICAgIHJldHVy
biBuZXcgU1ZHUGF0aFNlZ0Nsb3NlUGF0aCgpOwogfQogCi1TVkdQYXRoU2VnTW92ZXRvQWJzICpT
VkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ01vdmV0b0Ficyhkb3VibGUgeCwgZG91Ymxl
IHksIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpCitTVkdQYXRoU2VnTW92ZXRvQWJz
KiBTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ01vdmV0b0Ficyhkb3VibGUgeCwgZG91
YmxlIHksIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQpCiB7Ci0gICAgU1ZHUGF0aFNl
Z01vdmV0b0FicyAqdGVtcCA9IG5ldyBTVkdQYXRoU2VnTW92ZXRvQWJzKGNvbnRleHQpOworICAg
IFNWR1BhdGhTZWdNb3ZldG9BYnMqIHRlbXAgPSBuZXcgU1ZHUGF0aFNlZ01vdmV0b0Ficyhjb250
ZXh0KTsKICAgICB0ZW1wLT5zZXRYKHgpOwogICAgIHRlbXAtPnNldFkoeSk7CiAgICAgcmV0dXJu
IHRlbXA7CiB9CiAKLVNWR1BhdGhTZWdNb3ZldG9SZWwgKlNWR1BhdGhFbGVtZW50OjpjcmVhdGVT
VkdQYXRoU2VnTW92ZXRvUmVsKGRvdWJsZSB4LCBkb3VibGUgeSwgY29uc3QgU1ZHU3R5bGVkRWxl
bWVudCAqY29udGV4dCkKK1NWR1BhdGhTZWdNb3ZldG9SZWwqIFNWR1BhdGhFbGVtZW50OjpjcmVh
dGVTVkdQYXRoU2VnTW92ZXRvUmVsKGRvdWJsZSB4LCBkb3VibGUgeSwgY29uc3QgU1ZHU3R5bGVk
RWxlbWVudCogY29udGV4dCkKIHsKLSAgICBTVkdQYXRoU2VnTW92ZXRvUmVsICp0ZW1wID0gbmV3
IFNWR1BhdGhTZWdNb3ZldG9SZWwoY29udGV4dCk7CisgICAgU1ZHUGF0aFNlZ01vdmV0b1JlbCog
dGVtcCA9IG5ldyBTVkdQYXRoU2VnTW92ZXRvUmVsKGNvbnRleHQpOwogICAgIHRlbXAtPnNldFgo
eCk7CiAgICAgdGVtcC0+c2V0WSh5KTsKICAgICByZXR1cm4gdGVtcDsKIH0KIAotU1ZHUGF0aFNl
Z0xpbmV0b0FicyAqU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9BYnMoZG91
YmxlIHgsIGRvdWJsZSB5LCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQorU1ZHUGF0
aFNlZ0xpbmV0b0FicyogU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9BYnMo
ZG91YmxlIHgsIGRvdWJsZSB5LCBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBjb250ZXh0KQogewot
ICAgIFNWR1BhdGhTZWdMaW5ldG9BYnMgKnRlbXAgPSBuZXcgU1ZHUGF0aFNlZ0xpbmV0b0Ficyhj
b250ZXh0KTsKKyAgICBTVkdQYXRoU2VnTGluZXRvQWJzKiB0ZW1wID0gbmV3IFNWR1BhdGhTZWdM
aW5ldG9BYnMoY29udGV4dCk7CiAgICAgdGVtcC0+c2V0WCh4KTsKICAgICB0ZW1wLT5zZXRZKHkp
OwogICAgIHJldHVybiB0ZW1wOwogfQogCi1TVkdQYXRoU2VnTGluZXRvUmVsICpTVkdQYXRoRWxl
bWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1JlbChkb3VibGUgeCwgZG91YmxlIHksIGNvbnN0
IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpCitTVkdQYXRoU2VnTGluZXRvUmVsKiBTVkdQYXRo
RWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1JlbChkb3VibGUgeCwgZG91YmxlIHksIGNv
bnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQpCiB7Ci0gICAgU1ZHUGF0aFNlZ0xpbmV0b1Jl
bCAqdGVtcCA9IG5ldyBTVkdQYXRoU2VnTGluZXRvUmVsKGNvbnRleHQpOworICAgIFNWR1BhdGhT
ZWdMaW5ldG9SZWwqIHRlbXAgPSBuZXcgU1ZHUGF0aFNlZ0xpbmV0b1JlbChjb250ZXh0KTsKICAg
ICB0ZW1wLT5zZXRYKHgpOwogICAgIHRlbXAtPnNldFkoeSk7CiAgICAgcmV0dXJuIHRlbXA7CiB9
CiAKLVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMgKlNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljQWJzKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHgxLCBkb3Vi
bGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyLCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250
ZXh0KQorU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicyogU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeDEsIGRv
dWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNv
bnRleHQpCiB7Ci0gICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicyAqdGVtcCA9IG5ldyBTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljQWJzKGNvbnRleHQpOworICAgIFNWR1BhdGhTZWdDdXJ2ZXRvQ3Vi
aWNBYnMqIHRlbXAgPSBuZXcgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyhjb250ZXh0KTsKICAg
ICB0ZW1wLT5zZXRYKHgpOwogICAgIHRlbXAtPnNldFkoeSk7CiAgICAgdGVtcC0+c2V0WDEoeDEp
OwpAQCAtMTM2LDkgKzEzMiw5IEBAIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMgKlNWR1BhdGhF
bGVtZW4KICAgICByZXR1cm4gdGVtcDsKIH0KIAotU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCAq
U1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwoZG91YmxlIHgs
IGRvdWJsZSB5LCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIsIGNv
bnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpCitTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVs
KiBTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbChkb3VibGUg
eCwgZG91YmxlIHksIGRvdWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5Miwg
Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCkKIHsKLSAgICBTVkdQYXRoU2VnQ3VydmV0
b0N1YmljUmVsICp0ZW1wID0gbmV3IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwoY29udGV4dCk7
CisgICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCogdGVtcCA9IG5ldyBTVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljUmVsKGNvbnRleHQpOwogICAgIHRlbXAtPnNldFgoeCk7CiAgICAgdGVtcC0+c2V0
WSh5KTsKICAgICB0ZW1wLT5zZXRYMSh4MSk7CkBAIC0xNDgsOSArMTQ0LDkgQEAgU1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY1JlbCAqU1ZHUGF0aEVsZW1lbgogICAgIHJldHVybiB0ZW1wOwogfQogCi1T
VkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0FicyAqU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHgxLCBk
b3VibGUgeTEsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpCitTVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY0FicyogU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRv
UXVhZHJhdGljQWJzKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHgxLCBkb3VibGUgeTEsIGNv
bnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQpCiB7Ci0gICAgU1ZHUGF0aFNlZ0N1cnZldG9R
dWFkcmF0aWNBYnMgKnRlbXAgPSBuZXcgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMoY29u
dGV4dCk7CisgICAgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMqIHRlbXAgPSBuZXcgU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMoY29udGV4dCk7CiAgICAgdGVtcC0+c2V0WCh4KTsK
ICAgICB0ZW1wLT5zZXRZKHkpOwogICAgIHRlbXAtPnNldFgxKHgxKTsKQEAgLTE1OCw5ICsxNTQs
OSBAQCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0FicyAqU1ZHUGF0aEVsCiAgICAgcmV0dXJu
IHRlbXA7CiB9CiAKLVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsICpTVkdQYXRoRWxlbWVu
dDo6Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwoZG91YmxlIHgsIGRvdWJsZSB5
LCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkK
K1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsKiBTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeDEs
IGRvdWJsZSB5MSwgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCkKIHsKLSAgICBTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbCAqdGVtcCA9IG5ldyBTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY1JlbChjb250ZXh0KTsKKyAgICBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbCog
dGVtcCA9IG5ldyBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbChjb250ZXh0KTsKICAgICB0
ZW1wLT5zZXRYKHgpOwogICAgIHRlbXAtPnNldFkoeSk7CiAgICAgdGVtcC0+c2V0WDEoeDEpOwpA
QCAtMTY4LDkgKzE2NCw5IEBAIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsICpTVkdQYXRo
RWwKICAgICByZXR1cm4gdGVtcDsKIH0KIAotU1ZHUGF0aFNlZ0FyY0FicyAqU1ZHUGF0aEVsZW1l
bnQ6OmNyZWF0ZVNWR1BhdGhTZWdBcmNBYnMoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgcjEs
IGRvdWJsZSByMiwgZG91YmxlIGFuZ2xlLCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZs
YWcsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpCitTVkdQYXRoU2VnQXJjQWJzKiBT
VkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0FyY0Ficyhkb3VibGUgeCwgZG91YmxlIHks
IGRvdWJsZSByMSwgZG91YmxlIHIyLCBkb3VibGUgYW5nbGUsIGJvb2wgbGFyZ2VBcmNGbGFnLCBi
b29sIHN3ZWVwRmxhZywgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCkKIHsKLSAgICBT
VkdQYXRoU2VnQXJjQWJzICp0ZW1wID0gbmV3IFNWR1BhdGhTZWdBcmNBYnMoY29udGV4dCk7Cisg
ICAgU1ZHUGF0aFNlZ0FyY0FicyogdGVtcCA9IG5ldyBTVkdQYXRoU2VnQXJjQWJzKGNvbnRleHQp
OwogICAgIHRlbXAtPnNldFgoeCk7CiAgICAgdGVtcC0+c2V0WSh5KTsKICAgICB0ZW1wLT5zZXRS
MShyMSk7CkBAIC0xODEsOSArMTc3LDkgQEAgU1ZHUGF0aFNlZ0FyY0FicyAqU1ZHUGF0aEVsZW1l
bnQ6OmNyZWF0ZQogICAgIHJldHVybiB0ZW1wOwogfQogCi1TVkdQYXRoU2VnQXJjUmVsICpTVkdQ
YXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0FyY1JlbChkb3VibGUgeCwgZG91YmxlIHksIGRv
dWJsZSByMSwgZG91YmxlIHIyLCBkb3VibGUgYW5nbGUsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29s
IHN3ZWVwRmxhZywgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKK1NWR1BhdGhTZWdB
cmNSZWwqIFNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnQXJjUmVsKGRvdWJsZSB4LCBk
b3VibGUgeSwgZG91YmxlIHIxLCBkb3VibGUgcjIsIGRvdWJsZSBhbmdsZSwgYm9vbCBsYXJnZUFy
Y0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBjb250ZXh0KQog
ewotICAgIFNWR1BhdGhTZWdBcmNSZWwgKnRlbXAgPSBuZXcgU1ZHUGF0aFNlZ0FyY1JlbChjb250
ZXh0KTsKKyAgICBTVkdQYXRoU2VnQXJjUmVsKiB0ZW1wID0gbmV3IFNWR1BhdGhTZWdBcmNSZWwo
Y29udGV4dCk7CiAgICAgdGVtcC0+c2V0WCh4KTsKICAgICB0ZW1wLT5zZXRZKHkpOwogICAgIHRl
bXAtPnNldFIxKHIxKTsKQEAgLTE5NCwzNyArMTkwLDM3IEBAIFNWR1BhdGhTZWdBcmNSZWwgKlNW
R1BhdGhFbGVtZW50OjpjcmVhdGUKICAgICByZXR1cm4gdGVtcDsKIH0KIAotU1ZHUGF0aFNlZ0xp
bmV0b0hvcml6b250YWxBYnMgKlNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnTGluZXRv
SG9yaXpvbnRhbEFicyhkb3VibGUgeCwgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkK
K1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzKiBTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZH
UGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMoZG91YmxlIHgsIGNvbnN0IFNWR1N0eWxlZEVsZW1l
bnQqIGNvbnRleHQpCiB7Ci0gICAgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMgKnRlbXAg
PSBuZXcgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMoY29udGV4dCk7CisgICAgU1ZHUGF0
aFNlZ0xpbmV0b0hvcml6b250YWxBYnMqIHRlbXAgPSBuZXcgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWxBYnMoY29udGV4dCk7CiAgICAgdGVtcC0+c2V0WCh4KTsKICAgICByZXR1cm4gdGVtcDsK
IH0KIAotU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwgKlNWR1BhdGhFbGVtZW50OjpjcmVh
dGVTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbChkb3VibGUgeCwgY29uc3QgU1ZHU3R5bGVk
RWxlbWVudCAqY29udGV4dCkKK1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsKiBTVkdQYXRo
RWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwoZG91YmxlIHgsIGNv
bnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQpCiB7Ci0gICAgU1ZHUGF0aFNlZ0xpbmV0b0hv
cml6b250YWxSZWwgKnRlbXAgPSBuZXcgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwoY29u
dGV4dCk7CisgICAgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwqIHRlbXAgPSBuZXcgU1ZH
UGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwoY29udGV4dCk7CiAgICAgdGVtcC0+c2V0WCh4KTsK
ICAgICByZXR1cm4gdGVtcDsKIH0KIAotU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzICpTVkdQ
YXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzKGRvdWJsZSB5LCBj
b25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQorU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2Fs
QWJzKiBTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzKGRv
dWJsZSB5LCBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBjb250ZXh0KQogewotICAgIFNWR1BhdGhT
ZWdMaW5ldG9WZXJ0aWNhbEFicyAqdGVtcCA9IG5ldyBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxB
YnMoY29udGV4dCk7CisgICAgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzKiB0ZW1wID0gbmV3
IFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyhjb250ZXh0KTsKICAgICB0ZW1wLT5zZXRZKHkp
OwogICAgIHJldHVybiB0ZW1wOwogfQogCi1TVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwgKlNW
R1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwoZG91YmxlIHks
IGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpCitTVkdQYXRoU2VnTGluZXRvVmVydGlj
YWxSZWwqIFNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwo
ZG91YmxlIHksIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQpCiB7Ci0gICAgU1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsICp0ZW1wID0gbmV3IFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNh
bFJlbChjb250ZXh0KTsKKyAgICBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwqIHRlbXAgPSBu
ZXcgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKGNvbnRleHQpOwogICAgIHRlbXAtPnNldFko
eSk7CiAgICAgcmV0dXJuIHRlbXA7CiB9CiAKLVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhB
YnMgKlNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJz
KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHgyLCBkb3VibGUgeTIsIGNvbnN0IFNWR1N0eWxl
ZEVsZW1lbnQgKmNvbnRleHQpCitTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzKiBTVkdQ
YXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicyhkb3VibGUg
eCwgZG91YmxlIHksIGRvdWJsZSB4MiwgZG91YmxlIHkyLCBjb25zdCBTVkdTdHlsZWRFbGVtZW50
KiBjb250ZXh0KQogewotICAgIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMgKnRlbXAg
PSBuZXcgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicyhjb250ZXh0KTsKKyAgICBTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzKiB0ZW1wID0gbmV3IFNWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNTbW9vdGhBYnMoY29udGV4dCk7CiAgICAgdGVtcC0+c2V0WCh4KTsKICAgICB0ZW1wLT5z
ZXRZKHkpOwogICAgIHRlbXAtPnNldFgyKHgyKTsKQEAgLTIzMiw5ICsyMjgsOSBAQCBTVkdQYXRo
U2VnQ3VydmV0b0N1YmljU21vb3RoQWJzICpTVkdQYXRoCiAgICAgcmV0dXJuIHRlbXA7CiB9CiAK
LVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwgKlNWR1BhdGhFbGVtZW50OjpjcmVhdGVT
VkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91Ymxl
IHgyLCBkb3VibGUgeTIsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpCitTVkdQYXRo
U2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKiBTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY1Ntb290aFJlbChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB4MiwgZG91
YmxlIHkyLCBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBjb250ZXh0KQogewotICAgIFNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwgKnRlbXAgPSBuZXcgU1ZHUGF0aFNlZ0N1cnZldG9DdWJp
Y1Ntb290aFJlbChjb250ZXh0KTsKKyAgICBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVs
KiB0ZW1wID0gbmV3IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwoY29udGV4dCk7CiAg
ICAgdGVtcC0+c2V0WCh4KTsKICAgICB0ZW1wLT5zZXRZKHkpOwogICAgIHRlbXAtPnNldFgyKHgy
KTsKQEAgLTI0MiwxNyArMjM4LDE3IEBAIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwg
KlNWR1BhdGgKICAgICByZXR1cm4gdGVtcDsKIH0KIAotU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNTbW9vdGhBYnMgKlNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY1Ntb290aEFicyhkb3VibGUgeCwgZG91YmxlIHksIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQg
KmNvbnRleHQpCitTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicyogU1ZHUGF0aEVs
ZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzKGRvdWJsZSB4
LCBkb3VibGUgeSwgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCkKIHsKLSAgICBTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicyAqdGVtcCA9IG5ldyBTVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY1Ntb290aEFicyhjb250ZXh0KTsKKyAgICBTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY1Ntb290aEFicyogdGVtcCA9IG5ldyBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Nt
b290aEFicyhjb250ZXh0KTsKICAgICB0ZW1wLT5zZXRYKHgpOwogICAgIHRlbXAtPnNldFkoeSk7
CiAgICAgcmV0dXJuIHRlbXA7CiB9CiAKLVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3Ro
UmVsICpTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9v
dGhSZWwoZG91YmxlIHgsIGRvdWJsZSB5LCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0
KQorU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwqIFNWR1BhdGhFbGVtZW50Ojpj
cmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbChkb3VibGUgeCwgZG91Ymxl
IHksIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQpCiB7Ci0gICAgU1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwgKnRlbXAgPSBuZXcgU1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNTbW9vdGhSZWwoY29udGV4dCk7CisgICAgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNT
bW9vdGhSZWwqIHRlbXAgPSBuZXcgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwo
Y29udGV4dCk7CiAgICAgdGVtcC0+c2V0WCh4KTsKICAgICB0ZW1wLT5zZXRZKHkpOwogICAgIHJl
dHVybiB0ZW1wOwpAQCAtMjYyLDcgKzI1OCw3IEBAIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnN2Z01v
dmVUbyhkb3VibGUgeDEKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKIAotICAgIGlmKGFi
cykKKyAgICBpZiAoYWJzKQogICAgICAgICBwYXRoU2VnTGlzdCgpLT5hcHBlbmRJdGVtKGNyZWF0
ZVNWR1BhdGhTZWdNb3ZldG9BYnMoeDEsIHkxLCB0aGlzKSwgZWMpOwogICAgIGVsc2UKICAgICAg
ICAgcGF0aFNlZ0xpc3QoKS0+YXBwZW5kSXRlbShjcmVhdGVTVkdQYXRoU2VnTW92ZXRvUmVsKHgx
LCB5MSwgdGhpcyksIGVjKTsKQEAgLTI3Miw3ICsyNjgsNyBAQCB2b2lkIFNWR1BhdGhFbGVtZW50
OjpzdmdMaW5lVG8oZG91YmxlIHgxCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKLSAg
ICBpZihhYnMpCisgICAgaWYgKGFicykKICAgICAgICAgcGF0aFNlZ0xpc3QoKS0+YXBwZW5kSXRl
bShjcmVhdGVTVkdQYXRoU2VnTGluZXRvQWJzKHgxLCB5MSwgdGhpcyksIGVjKTsKICAgICBlbHNl
CiAgICAgICAgIHBhdGhTZWdMaXN0KCktPmFwcGVuZEl0ZW0oY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0
b1JlbCh4MSwgeTEsIHRoaXMpLCBlYyk7CkBAIC0yODIsNyArMjc4LDcgQEAgdm9pZCBTVkdQYXRo
RWxlbWVudDo6c3ZnTGluZVRvSG9yaXpvbnRhbAogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwogCi0gICAgaWYoYWJzKQorICAgIGlmIChhYnMpCiAgICAgICAgIHBhdGhTZWdMaXN0KCktPmFw
cGVuZEl0ZW0oY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMoeCwgdGhpcyksIGVj
KTsKICAgICBlbHNlCiAgICAgICAgIHBhdGhTZWdMaXN0KCktPmFwcGVuZEl0ZW0oY3JlYXRlU1ZH
UGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwoeCwgdGhpcyksIGVjKTsKQEAgLTI5Miw3ICsyODgs
NyBAQCB2b2lkIFNWR1BhdGhFbGVtZW50OjpzdmdMaW5lVG9WZXJ0aWNhbChkCiB7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAKLSAgICBpZihhYnMpCisgICAgaWYgKGFicykKICAgICAgICAg
cGF0aFNlZ0xpc3QoKS0+YXBwZW5kSXRlbShjcmVhdGVTVkdQYXRoU2VnTGluZXRvVmVydGljYWxB
YnMoeSwgdGhpcyksIGVjKTsKICAgICBlbHNlCiAgICAgICAgIHBhdGhTZWdMaXN0KCktPmFwcGVu
ZEl0ZW0oY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKHksIHRoaXMpLCBlYyk7CkBA
IC0zMDIsNyArMjk4LDcgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6c3ZnQ3VydmVUb0N1YmljKGRv
dQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCi0gICAgaWYoYWJzKQorICAgIGlmIChh
YnMpCiAgICAgICAgIHBhdGhTZWdMaXN0KCktPmFwcGVuZEl0ZW0oY3JlYXRlU1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY0Ficyh4LCB5LCB4MSwgeTEsIHgyLCB5MiwgdGhpcyksIGVjKTsKICAgICBlbHNl
CiAgICAgICAgIHBhdGhTZWdMaXN0KCktPmFwcGVuZEl0ZW0oY3JlYXRlU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY1JlbCh4LCB5LCB4MSwgeTEsIHgyLCB5MiwgdGhpcyksIGVjKTsKQEAgLTMxMiw3ICsz
MDgsNyBAQCB2b2lkIFNWR1BhdGhFbGVtZW50OjpzdmdDdXJ2ZVRvQ3ViaWNTbW9vCiB7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKLSAgICBpZihhYnMpCisgICAgaWYgKGFicykKICAgICAg
ICAgcGF0aFNlZ0xpc3QoKS0+YXBwZW5kSXRlbShjcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
U21vb3RoQWJzKHgyLCB5MiwgeCwgeSwgdGhpcyksIGVjKTsKICAgICBlbHNlCiAgICAgICAgIHBh
dGhTZWdMaXN0KCktPmFwcGVuZEl0ZW0oY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290
aFJlbCh4MiwgeTIsIHgsIHksIHRoaXMpLCBlYyk7CkBAIC0zMjIsNyArMzE4LDcgQEAgdm9pZCBT
VkdQYXRoRWxlbWVudDo6c3ZnQ3VydmVUb1F1YWRyYXRpYwogewogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogCi0gICAgaWYoYWJzKQorICAgIGlmIChhYnMpCiAgICAgICAgIHBhdGhTZWdMaXN0
KCktPmFwcGVuZEl0ZW0oY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMoeDEsIHkx
LCB4LCB5LCB0aGlzKSwgZWMpOwogICAgIGVsc2UKICAgICAgICAgcGF0aFNlZ0xpc3QoKS0+YXBw
ZW5kSXRlbShjcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbCh4MSwgeTEsIHgsIHks
IHRoaXMpLCBlYyk7CkBAIC0zMzIsNyArMzI4LDcgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6c3Zn
Q3VydmVUb1F1YWRyYXRpYwogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCi0gICAgaWYo
YWJzKQorICAgIGlmIChhYnMpCiAgICAgICAgIHBhdGhTZWdMaXN0KCktPmFwcGVuZEl0ZW0oY3Jl
YXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMoeCwgeSwgdGhpcyksIGVjKTsK
ICAgICBlbHNlCiAgICAgICAgIHBhdGhTZWdMaXN0KCktPmFwcGVuZEl0ZW0oY3JlYXRlU1ZHUGF0
aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwoeCwgeSwgdGhpcyksIGVjKTsKQEAgLTM0Miw3
ICszMzgsNyBAQCB2b2lkIFNWR1BhdGhFbGVtZW50OjpzdmdBcmNUbyhkb3VibGUgeCwgCiB7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKLSAgICBpZihhYnMpCisgICAgaWYgKGFicykKICAg
ICAgICAgcGF0aFNlZ0xpc3QoKS0+YXBwZW5kSXRlbShjcmVhdGVTVkdQYXRoU2VnQXJjQWJzKHgs
IHksIHIxLCByMiwgYW5nbGUsIGxhcmdlQXJjRmxhZywgc3dlZXBGbGFnLCB0aGlzKSwgZWMpOwog
ICAgIGVsc2UKICAgICAgICAgcGF0aFNlZ0xpc3QoKS0+YXBwZW5kSXRlbShjcmVhdGVTVkdQYXRo
U2VnQXJjUmVsKHgsIHksIHIxLCByMiwgYW5nbGUsIGxhcmdlQXJjRmxhZywgc3dlZXBGbGFnLCB0
aGlzKSwgZWMpOwpAQCAtMzU0LDM4ICszNTAsMzggQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6c3Zn
Q2xvc2VQYXRoKCkKICAgICBwYXRoU2VnTGlzdCgpLT5hcHBlbmRJdGVtKGNyZWF0ZVNWR1BhdGhT
ZWdDbG9zZVBhdGgoKSwgZWMpOwogfQogCi12b2lkIFNWR1BhdGhFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR1BhdGhFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZEF0dHIpIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YzsKICAgICAgICAgcGF0aFNlZ0xpc3QoKS0+Y2xlYXIoZWMpOwogICAgICAgICBwYXJzZVNWRyhh
dHRyLT52YWx1ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdHJ1ZSk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47Ci0g
ICAgICAgIGlmKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVy
bjsKLSAgICAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cikpIHJldHVybjsKKyAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOworICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOworICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKICAg
ICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwogICAgIH0KIH0KIAotU1ZHUGF0aFNlZ0xpc3QgKlNWR1BhdGhFbGVtZW50OjpwYXRo
U2VnTGlzdCgpIGNvbnN0CitTVkdQYXRoU2VnTGlzdCogU1ZHUGF0aEVsZW1lbnQ6OnBhdGhTZWdM
aXN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHUGF0aFNlZ0xpc3Q+KG1f
cGF0aFNlZ0xpc3QpOwogfQogCi1TVkdQYXRoU2VnTGlzdCAqU1ZHUGF0aEVsZW1lbnQ6Om5vcm1h
bGl6ZWRQYXRoU2VnTGlzdCgpIGNvbnN0CitTVkdQYXRoU2VnTGlzdCogU1ZHUGF0aEVsZW1lbnQ6
Om5vcm1hbGl6ZWRQYXRoU2VnTGlzdCgpIGNvbnN0CiB7CiAgICAgLy8gVE9ETwogICAgIHJldHVy
biAwOwogfQogCi1TVkdQYXRoU2VnTGlzdCAqU1ZHUGF0aEVsZW1lbnQ6OmFuaW1hdGVkUGF0aFNl
Z0xpc3QoKSBjb25zdAorU1ZHUGF0aFNlZ0xpc3QqIFNWR1BhdGhFbGVtZW50OjphbmltYXRlZFBh
dGhTZWdMaXN0KCkgY29uc3QKIHsKICAgICAvLyBUT0RPCiAgICAgcmV0dXJuIDA7CiB9CiAKLVNW
R1BhdGhTZWdMaXN0ICpTVkdQYXRoRWxlbWVudDo6YW5pbWF0ZWROb3JtYWxpemVkUGF0aFNlZ0xp
c3QoKSBjb25zdAorU1ZHUGF0aFNlZ0xpc3QqIFNWR1BhdGhFbGVtZW50OjphbmltYXRlZE5vcm1h
bGl6ZWRQYXRoU2VnTGlzdCgpIGNvbnN0CiB7CiAgICAgLy8gVE9ETwogICAgIHJldHVybiAwOwpA
QCAtMzk3LDMwICszOTMsMjkgQEAgUGF0aCBTVkdQYXRoRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNv
bnN0CiAgICAgUGF0aCBwYXRoRGF0YTsKICAgICAvLyBUT0RPIDogYWxzbyBzdXBwb3J0IG5vbi1u
b3JtYWxpemVkIG1vZGUsIGF0IGxlYXN0IGluIGRvbSBzdHJ1Y3R1cmUKICAgICBpbnQgbGVuID0g
cGF0aFNlZ0xpc3QoKS0+bnVtYmVyT2ZJdGVtcygpOwotICAgIGlmKGxlbiA8IDEpCisgICAgaWYg
KGxlbiA8IDEpCiAgICAgICAgIHJldHVybiBwYXRoRGF0YTsKIAogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIGZvcihpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkKLSAgICB7Ci0gICAgICAg
IFNWR1BhdGhTZWcgKnAgPSBwYXRoU2VnTGlzdCgpLT5nZXRJdGVtKGksIGVjKS5nZXQoKTs7Ci0g
ICAgICAgIHN3aXRjaChwLT5wYXRoU2VnVHlwZSgpKQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGVuOyArK2kpIHsKKyAgICAgICAgU1ZHUGF0aFNlZyogcCA9IHBhdGhTZWdMaXN0KCktPmdldEl0
ZW0oaSwgZWMpLmdldCgpOzsKKyAgICAgICAgc3dpdGNoIChwLT5wYXRoU2VnVHlwZSgpKQogICAg
ICAgICB7CiAgICAgICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTU9WRVRPX0FCUzoK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTVkdQYXRoU2VnTW92ZXRvQWJzICptb3Zl
VG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTW92ZXRvQWJzICo+KHApOworICAgICAgICAgICAg
ICAgIFNWR1BhdGhTZWdNb3ZldG9BYnMqIG1vdmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdN
b3ZldG9BYnMqID4ocCk7CiAgICAgICAgICAgICAgICAgcGF0aERhdGEubW92ZVRvKEZsb2F0UG9p
bnQobW92ZVRvLT54KCksIG1vdmVUby0+eSgpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRP
X0FCUzoKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTVkdQYXRoU2VnTGluZXRvQWJz
ICpsaW5lVG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvQWJzICo+KHApOworICAgICAg
ICAgICAgICAgIFNWR1BhdGhTZWdMaW5ldG9BYnMqIGxpbmVUbyA9IHN0YXRpY19jYXN0PFNWR1Bh
dGhTZWdMaW5ldG9BYnMqID4ocCk7CiAgICAgICAgICAgICAgICAgcGF0aERhdGEuYWRkTGluZVRv
KEZsb2F0UG9pbnQobGluZVRvLT54KCksIGxpbmVUby0+eSgpKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhT
RUdfQ1VSVkVUT19DVUJJQ19BQlM6CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY0FicyAqY3VydmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNBYnMgKj4ocCk7CisgICAgICAgICAgICAgICAgU1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY0FicyogY3VydmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMq
ID4ocCk7CiAgICAgICAgICAgICAgICAgcGF0aERhdGEuYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBv
aW50KGN1cnZlVG8tPngxKCksIGN1cnZlVG8tPnkxKCkpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRmxvYXRQb2ludChjdXJ2ZVRvLT54MigpLCBjdXJ2ZVRvLT55MigpKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQoY3VydmVUby0+eCgpLCBj
dXJ2ZVRvLT55KCkpKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkocmV2aXNp
b24gMTY4ODcpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0
LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjQsMTIgKzI0LDEyIEBACiAjZGVmaW5lIEtT
VkdfU1ZHUGF0aEVsZW1lbnRJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSAi
U1ZHVGVzdHMuaCIKLSNpbmNsdWRlICJzdmdwYXRocGFyc2VyLmgiCi0jaW5jbHVkZSAiU1ZHTGFu
Z1NwYWNlLmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKICNp
bmNsdWRlICJTVkdBbmltYXRlZFBhdGhEYXRhLmgiCiAjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZC5oIgorI2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5oIgorI2luY2x1ZGUgIlNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHVGVzdHMuaCIKKyNp
bmNsdWRlICJzdmdwYXRocGFyc2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7CkBAIC01NCwx
MSArNTQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICBjbGFzcyBTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY1Ntb290aEFiczsKICAgICBjbGFzcyBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y1Ntb290aFJlbDsKICAgICBjbGFzcyBTVkdQYXRoRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xh
bmdTcGFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHQW5pbWF0ZWRQYXRoRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dWJsaWMgU1ZHUGF0aFBhcnNlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNW
R1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0FuaW1hdGVkUGF0
aERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHUGF0aFBhcnNlcgog
ICAgIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNWR1BhdGhFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOwpAQCAtNjksMzUgKzY5LDM1IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
CiAgICAgICAgIEZsb2F0UG9pbnQgZ2V0UG9pbnRBdExlbmd0aChkb3VibGUgZGlzdGFuY2UpOwog
ICAgICAgICB1bnNpZ25lZCBsb25nIGdldFBhdGhTZWdBdExlbmd0aChkb3VibGUgZGlzdGFuY2Up
OwogCi0gICAgICAgIFNWR1BhdGhTZWdDbG9zZVBhdGggKmNyZWF0ZVNWR1BhdGhTZWdDbG9zZVBh
dGgoKTsKLSAgICAgICAgU1ZHUGF0aFNlZ01vdmV0b0FicyAqY3JlYXRlU1ZHUGF0aFNlZ01vdmV0
b0Ficyhkb3VibGUgeCwgZG91YmxlIHksIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQg
PSAwKTsKLSAgICAgICAgU1ZHUGF0aFNlZ01vdmV0b1JlbCAqY3JlYXRlU1ZHUGF0aFNlZ01vdmV0
b1JlbChkb3VibGUgeCwgZG91YmxlIHksIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQg
PSAwKTsKLSAgICAgICAgU1ZHUGF0aFNlZ0xpbmV0b0FicyAqY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0
b0Ficyhkb3VibGUgeCwgZG91YmxlIHksIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQg
PSAwKTsKLSAgICAgICAgU1ZHUGF0aFNlZ0xpbmV0b1JlbCAqY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0
b1JlbChkb3VibGUgeCwgZG91YmxlIHksIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQg
PSAwKTsKLSAgICAgICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicyAqY3JlYXRlU1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY0Ficyhkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB4MSwgZG91YmxlIHkx
LCBkb3VibGUgeDIsIGRvdWJsZSB5MiwgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCA9
IDApOwotICAgICAgICBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsICpjcmVhdGVTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljUmVsKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHgxLCBkb3VibGUgeTEs
IGRvdWJsZSB4MiwgZG91YmxlIHkyLCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0ID0g
MCk7Ci0gICAgICAgIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzICpjcmVhdGVTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY0Ficyhkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB4MSwgZG91
YmxlIHkxLCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0ID0gMCk7Ci0gICAgICAgIFNW
R1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsICpjcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY1JlbChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB4MSwgZG91YmxlIHkxLCBjb25zdCBT
VkdTdHlsZWRFbGVtZW50ICpjb250ZXh0ID0gMCk7Ci0gICAgICAgIFNWR1BhdGhTZWdBcmNBYnMg
KmNyZWF0ZVNWR1BhdGhTZWdBcmNBYnMoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgcjEsIGRv
dWJsZSByMiwgZG91YmxlIGFuZ2xlLCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZsYWcs
IGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQgPSAwKTsKLSAgICAgICAgU1ZHUGF0aFNl
Z0FyY1JlbCAqY3JlYXRlU1ZHUGF0aFNlZ0FyY1JlbChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJs
ZSByMSwgZG91YmxlIHIyLCBkb3VibGUgYW5nbGUsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3
ZWVwRmxhZywgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCA9IDApOwotICAgICAgICBT
VkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyAqY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWxBYnMoZG91YmxlIHgsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQgPSAwKTsK
LSAgICAgICAgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwgKmNyZWF0ZVNWR1BhdGhTZWdM
aW5ldG9Ib3Jpem9udGFsUmVsKGRvdWJsZSB4LCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250
ZXh0ID0gMCk7Ci0gICAgICAgIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyAqY3JlYXRlU1ZH
UGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzKGRvdWJsZSB5LCBjb25zdCBTVkdTdHlsZWRFbGVtZW50
ICpjb250ZXh0ID0gMCk7Ci0gICAgICAgIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbCAqY3Jl
YXRlU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKGRvdWJsZSB5LCBjb25zdCBTVkdTdHlsZWRF
bGVtZW50ICpjb250ZXh0ID0gMCk7Ci0gICAgICAgIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9v
dGhBYnMgKmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMoZG91YmxlIHgsIGRv
dWJsZSB5LCBkb3VibGUgeDIsIGRvdWJsZSB5MiwgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29u
dGV4dCA9IDApOwotICAgICAgICBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsICpjcmVh
dGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91
YmxlIHgyLCBkb3VibGUgeTIsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQgPSAwKTsK
LSAgICAgICAgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMgKmNyZWF0ZVNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzKGRvdWJsZSB4LCBkb3VibGUgeSwgY29uc3Qg
U1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCA9IDApOwotICAgICAgICBTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY1Ntb290aFJlbCAqY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9v
dGhSZWwoZG91YmxlIHgsIGRvdWJsZSB5LCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0
ID0gMCk7CisgICAgICAgIFNWR1BhdGhTZWdDbG9zZVBhdGgqIGNyZWF0ZVNWR1BhdGhTZWdDbG9z
ZVBhdGgoKTsKKyAgICAgICAgU1ZHUGF0aFNlZ01vdmV0b0FicyogY3JlYXRlU1ZHUGF0aFNlZ01v
dmV0b0Ficyhkb3VibGUgeCwgZG91YmxlIHksIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRl
eHQgPSAwKTsKKyAgICAgICAgU1ZHUGF0aFNlZ01vdmV0b1JlbCogY3JlYXRlU1ZHUGF0aFNlZ01v
dmV0b1JlbChkb3VibGUgeCwgZG91YmxlIHksIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRl
eHQgPSAwKTsKKyAgICAgICAgU1ZHUGF0aFNlZ0xpbmV0b0FicyogY3JlYXRlU1ZHUGF0aFNlZ0xp
bmV0b0Ficyhkb3VibGUgeCwgZG91YmxlIHksIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRl
eHQgPSAwKTsKKyAgICAgICAgU1ZHUGF0aFNlZ0xpbmV0b1JlbCogY3JlYXRlU1ZHUGF0aFNlZ0xp
bmV0b1JlbChkb3VibGUgeCwgZG91YmxlIHksIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRl
eHQgPSAwKTsKKyAgICAgICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicyogY3JlYXRlU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY0Ficyhkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB4MSwgZG91Ymxl
IHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MiwgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4
dCA9IDApOworICAgICAgICBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsKiBjcmVhdGVTVkdQYXRo
U2VnQ3VydmV0b0N1YmljUmVsKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHgxLCBkb3VibGUg
eTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyLCBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBjb250ZXh0
ID0gMCk7CisgICAgICAgIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzKiBjcmVhdGVTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficyhkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB4MSwg
ZG91YmxlIHkxLCBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBjb250ZXh0ID0gMCk7CisgICAgICAg
IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsKiBjcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY1JlbChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB4MSwgZG91YmxlIHkxLCBjb25z
dCBTVkdTdHlsZWRFbGVtZW50KiBjb250ZXh0ID0gMCk7CisgICAgICAgIFNWR1BhdGhTZWdBcmNB
YnMqIGNyZWF0ZVNWR1BhdGhTZWdBcmNBYnMoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgcjEs
IGRvdWJsZSByMiwgZG91YmxlIGFuZ2xlLCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZs
YWcsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQgPSAwKTsKKyAgICAgICAgU1ZHUGF0
aFNlZ0FyY1JlbCogY3JlYXRlU1ZHUGF0aFNlZ0FyY1JlbChkb3VibGUgeCwgZG91YmxlIHksIGRv
dWJsZSByMSwgZG91YmxlIHIyLCBkb3VibGUgYW5nbGUsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29s
IHN3ZWVwRmxhZywgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCA9IDApOworICAgICAg
ICBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyogY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0hv
cml6b250YWxBYnMoZG91YmxlIHgsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQgPSAw
KTsKKyAgICAgICAgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwqIGNyZWF0ZVNWR1BhdGhT
ZWdMaW5ldG9Ib3Jpem9udGFsUmVsKGRvdWJsZSB4LCBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBj
b250ZXh0ID0gMCk7CisgICAgICAgIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyogY3JlYXRl
U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzKGRvdWJsZSB5LCBjb25zdCBTVkdTdHlsZWRFbGVt
ZW50KiBjb250ZXh0ID0gMCk7CisgICAgICAgIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbCog
Y3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKGRvdWJsZSB5LCBjb25zdCBTVkdTdHls
ZWRFbGVtZW50KiBjb250ZXh0ID0gMCk7CisgICAgICAgIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNT
bW9vdGhBYnMqIGNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMoZG91YmxlIHgs
IGRvdWJsZSB5LCBkb3VibGUgeDIsIGRvdWJsZSB5MiwgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCog
Y29udGV4dCA9IDApOworICAgICAgICBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKiBj
cmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKGRvdWJsZSB4LCBkb3VibGUgeSwg
ZG91YmxlIHgyLCBkb3VibGUgeTIsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQgPSAw
KTsKKyAgICAgICAgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMqIGNyZWF0ZVNW
R1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzKGRvdWJsZSB4LCBkb3VibGUgeSwgY29u
c3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCA9IDApOworICAgICAgICBTVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY1Ntb290aFJlbCogY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNT
bW9vdGhSZWwoZG91YmxlIHgsIGRvdWJsZSB5LCBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBjb250
ZXh0ID0gMCk7CiAKICAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnU1ZHQW5pbWF0ZWRQYXRoRGF0
YScKLSAgICAgICAgdmlydHVhbCBTVkdQYXRoU2VnTGlzdCAqcGF0aFNlZ0xpc3QoKSBjb25zdDsK
LSAgICAgICAgdmlydHVhbCBTVkdQYXRoU2VnTGlzdCAqbm9ybWFsaXplZFBhdGhTZWdMaXN0KCkg
Y29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ0xpc3QgKmFuaW1hdGVkUGF0aFNlZ0xp
c3QoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBTVkdQYXRoU2VnTGlzdCAqYW5pbWF0ZWROb3Jt
YWxpemVkUGF0aFNlZ0xpc3QoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTVkdQYXRoU2VnTGlz
dCogcGF0aFNlZ0xpc3QoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTVkdQYXRoU2VnTGlzdCog
bm9ybWFsaXplZFBhdGhTZWdMaXN0KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgU1ZHUGF0aFNl
Z0xpc3QqIGFuaW1hdGVkUGF0aFNlZ0xpc3QoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTVkdQ
YXRoU2VnTGlzdCogYW5pbWF0ZWROb3JtYWxpemVkUGF0aFNlZ0xpc3QoKSBjb25zdDsKIAotICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICph
dHRyKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSogYXR0cik7CiAKLSAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQo
UmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVl
ZGVkKHN0eWxlKTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5k
ZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQo
c3R5bGUpOyB9CiAgICAgICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7CiAKICAg
ICBwcm90ZWN0ZWQ6CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2VnLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZy5oCShyZXZpc2lvbiAxNjg4NykK
KysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhTZWcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVy
bWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0CiAKQEAgLTI1LDcgKzI1LDYgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLQogI2luY2x1ZGUgImtzdmcuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUKQEAgLTM1LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICBjbGFzcyBT
VkdQYXRoU2VnIDogcHVibGljIFNoYXJlZDxTVkdQYXRoU2VnPgogICAgIHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIFNWR1BhdGhTZWcoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCA9IDAp
OworICAgICAgICBTVkdQYXRoU2VnKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQgPSAw
KTsKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZygpOwogICAgICAgICAKICAgICAgICAgZW51
bSBTVkdQYXRoU2VnVHlwZSB7CkBAIC02Niw3ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAg
ICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIiI7IH0KIAog
ICAgIHByb3RlY3RlZDoKLSAgICAgICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqbV9jb250ZXh0
OworICAgICAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBtX2NvbnRleHQ7CiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNl
Z0FyYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0FyYy5j
cHAJKHJldmlzaW9uIDE2ODg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0FyYy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAg
ICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAg
ICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yMywxMiArMjMsMTMgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR1Bh
dGhTZWdBcmMuaCIKKwogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKIAotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR1BhdGhTZWdBcmNBYnM6
OlNWR1BhdGhTZWdBcmNBYnMoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKLTogU1ZH
UGF0aFNlZyhjb250ZXh0KQorU1ZHUGF0aFNlZ0FyY0Ficzo6U1ZHUGF0aFNlZ0FyY0Ficyhjb25z
dCBTVkdTdHlsZWRFbGVtZW50KiBjb250ZXh0KQorICAgIDogU1ZHUGF0aFNlZyhjb250ZXh0KQog
ewogICAgIG1feCA9IG1feSA9IG1fcjEgPSBtX3IyID0gbV9hbmdsZSA9IDAuMDsKICAgICBtX2xh
cmdlQXJjRmxhZyA9IG1fc3dlZXBGbGFnID0gZmFsc2U7CkBAIC00Miw3ICs0Myw3IEBAIHZvaWQg
U1ZHUGF0aFNlZ0FyY0Ficzo6c2V0WChkb3VibGUgeCkKIHsKICAgICBtX3ggPSB4OwogCi0gICAg
aWYobV9jb250ZXh0KQorICAgIGlmIChtX2NvbnRleHQpCiAgICAgICAgIG1fY29udGV4dC0+bm90
aWZ5QXR0cmlidXRlQ2hhbmdlKCk7CiB9CiAKQEAgLTU1LDcgKzU2LDcgQEAgdm9pZCBTVkdQYXRo
U2VnQXJjQWJzOjpzZXRZKGRvdWJsZSB5KQogewogICAgIG1feSA9IHk7CiAKLSAgICBpZihtX2Nv
bnRleHQpCisgICAgaWYgKG1fY29udGV4dCkKICAgICAgICAgbV9jb250ZXh0LT5ub3RpZnlBdHRy
aWJ1dGVDaGFuZ2UoKTsKIH0KIApAQCAtNjgsNyArNjksNyBAQCB2b2lkIFNWR1BhdGhTZWdBcmNB
YnM6OnNldFIxKGRvdWJsZSByMSkKIHsKICAgICBtX3IxID0gcjE7CiAKLSAgICBpZihtX2NvbnRl
eHQpCisgICAgaWYgKG1fY29udGV4dCkKICAgICAgICAgbV9jb250ZXh0LT5ub3RpZnlBdHRyaWJ1
dGVDaGFuZ2UoKTsKIH0KIApAQCAtODEsNyArODIsNyBAQCB2b2lkIFNWR1BhdGhTZWdBcmNBYnM6
OnNldFIyKGRvdWJsZSByMikKIHsKICAgICBtX3IyID0gcjI7CiAKLSAgICBpZihtX2NvbnRleHQp
CisgICAgaWYgKG1fY29udGV4dCkKICAgICAgICAgbV9jb250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVD
aGFuZ2UoKTsKIH0KIApAQCAtOTQsNyArOTUsNyBAQCB2b2lkIFNWR1BhdGhTZWdBcmNBYnM6OnNl
dEFuZ2xlKGRvdWJsZSBhCiB7CiAgICAgbV9hbmdsZSA9IGFuZ2xlOwogCi0gICAgaWYobV9jb250
ZXh0KQorICAgIGlmIChtX2NvbnRleHQpCiAgICAgICAgIG1fY29udGV4dC0+bm90aWZ5QXR0cmli
dXRlQ2hhbmdlKCk7CiB9CiAKQEAgLTEwNyw3ICsxMDgsNyBAQCB2b2lkIFNWR1BhdGhTZWdBcmNB
YnM6OnNldExhcmdlQXJjRmxhZyhiCiB7CiAgICAgbV9sYXJnZUFyY0ZsYWcgPSBsYXJnZUFyY0Zs
YWc7CiAKLSAgICBpZihtX2NvbnRleHQpCisgICAgaWYgKG1fY29udGV4dCkKICAgICAgICAgbV9j
b250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVDaGFuZ2UoKTsKIH0KIApAQCAtMTIwLDcgKzEyMSw3IEBA
IHZvaWQgU1ZHUGF0aFNlZ0FyY0Ficzo6c2V0U3dlZXBGbGFnKGJvb2wKIHsKICAgICBtX3N3ZWVw
RmxhZyA9IHN3ZWVwRmxhZzsKIAotICAgIGlmKG1fY29udGV4dCkKKyAgICBpZiAobV9jb250ZXh0
KQogICAgICAgICBtX2NvbnRleHQtPm5vdGlmeUF0dHJpYnV0ZUNoYW5nZSgpOwogfQogCkBAIC0x
MzEsOCArMTMyLDggQEAgYm9vbCBTVkdQYXRoU2VnQXJjQWJzOjpzd2VlcEZsYWcoKSBjb25zdAog
CiAKIAotU1ZHUGF0aFNlZ0FyY1JlbDo6U1ZHUGF0aFNlZ0FyY1JlbChjb25zdCBTVkdTdHlsZWRF
bGVtZW50ICpjb250ZXh0KQotOiBTVkdQYXRoU2VnKGNvbnRleHQpCitTVkdQYXRoU2VnQXJjUmVs
OjpTVkdQYXRoU2VnQXJjUmVsKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQpCisgICAg
OiBTVkdQYXRoU2VnKGNvbnRleHQpCiB7CiAgICAgbV94ID0gbV95ID0gbV9yMSA9IG1fcjIgPSBt
X2FuZ2xlID0gMC4wOwogICAgIG1fbGFyZ2VBcmNGbGFnID0gbV9zd2VlcEZsYWcgPSBmYWxzZTsK
QEAgLTE0Niw3ICsxNDcsNyBAQCB2b2lkIFNWR1BhdGhTZWdBcmNSZWw6OnNldFgoZG91YmxlIHgp
CiB7CiAgICAgbV94ID0geDsKIAotICAgIGlmKG1fY29udGV4dCkKKyAgICBpZiAobV9jb250ZXh0
KQogICAgICAgICBtX2NvbnRleHQtPm5vdGlmeUF0dHJpYnV0ZUNoYW5nZSgpOwogfQogCkBAIC0x
NTksNyArMTYwLDcgQEAgdm9pZCBTVkdQYXRoU2VnQXJjUmVsOjpzZXRZKGRvdWJsZSB5KQogewog
ICAgIG1feSA9IHk7CiAKLSAgICBpZihtX2NvbnRleHQpCisgICAgaWYgKG1fY29udGV4dCkKICAg
ICAgICAgbV9jb250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVDaGFuZ2UoKTsKIH0KIApAQCAtMTcyLDcg
KzE3Myw3IEBAIHZvaWQgU1ZHUGF0aFNlZ0FyY1JlbDo6c2V0UjEoZG91YmxlIHIxKQogewogICAg
IG1fcjEgPSByMTsKIAotICAgIGlmKG1fY29udGV4dCkKKyAgICBpZiAobV9jb250ZXh0KQogICAg
ICAgICBtX2NvbnRleHQtPm5vdGlmeUF0dHJpYnV0ZUNoYW5nZSgpOwogfQogCkBAIC0xODUsNyAr
MTg2LDcgQEAgdm9pZCBTVkdQYXRoU2VnQXJjUmVsOjpzZXRSMihkb3VibGUgcjIpCiB7CiAgICAg
bV9yMiA9IHIyOwogCi0gICAgaWYobV9jb250ZXh0KQorICAgIGlmIChtX2NvbnRleHQpCiAgICAg
ICAgIG1fY29udGV4dC0+bm90aWZ5QXR0cmlidXRlQ2hhbmdlKCk7CiB9CiAKQEAgLTE5OCw3ICsx
OTksNyBAQCB2b2lkIFNWR1BhdGhTZWdBcmNSZWw6OnNldEFuZ2xlKGRvdWJsZSBhCiB7CiAgICAg
bV9hbmdsZSA9IGFuZ2xlOwogCi0gICAgaWYobV9jb250ZXh0KQorICAgIGlmIChtX2NvbnRleHQp
CiAgICAgICAgIG1fY29udGV4dC0+bm90aWZ5QXR0cmlidXRlQ2hhbmdlKCk7CiB9CiAKQEAgLTIx
MSw3ICsyMTIsNyBAQCB2b2lkIFNWR1BhdGhTZWdBcmNSZWw6OnNldExhcmdlQXJjRmxhZyhiCiB7
CiAgICAgbV9sYXJnZUFyY0ZsYWcgPSBsYXJnZUFyY0ZsYWc7CiAKLSAgICBpZihtX2NvbnRleHQp
CisgICAgaWYgKG1fY29udGV4dCkKICAgICAgICAgbV9jb250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVD
aGFuZ2UoKTsKIH0KIApAQCAtMjI0LDcgKzIyNSw3IEBAIHZvaWQgU1ZHUGF0aFNlZ0FyY1JlbDo6
c2V0U3dlZXBGbGFnKGJvb2wKIHsKICAgICBtX3N3ZWVwRmxhZyA9IHN3ZWVwRmxhZzsKIAotICAg
IGlmKG1fY29udGV4dCkKKyAgICBpZiAobV9jb250ZXh0KQogICAgICAgICBtX2NvbnRleHQtPm5v
dGlmeUF0dHJpYnV0ZUNoYW5nZSgpOwogfQogCkBAIC0yMzMsNiArMjM0LDggQEAgYm9vbCBTVkdQ
YXRoU2VnQXJjUmVsOjpzd2VlcEZsYWcoKSBjb25zdAogICAgIHJldHVybiBtX3N3ZWVwRmxhZzsK
IH0KIAorfQorCiAvLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0FyYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR1BhdGhTZWdBcmMuaAkocmV2aXNpb24gMTY4ODcpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdQYXRoU2VnQXJjLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdp
bGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAogCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgY2xhc3MgU1ZHUGF0
aFNlZ0FyY0FicyA6IHB1YmxpYyBTVkdQYXRoU2VnCiAgICAgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgU1ZHUGF0aFNlZ0FyY0Ficyhjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0ID0gMCk7
CisgICAgICAgIFNWR1BhdGhTZWdBcmNBYnMoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4
dCA9IDApOwogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnQXJjQWJzKCk7CiAKICAgICAgICAg
dmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhT
RUdfQVJDX0FCUzsgfQpAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgIGNs
YXNzIFNWR1BhdGhTZWdBcmNSZWwgOiBwdWJsaWMgU1ZHUGF0aFNlZwogICAgIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIFNWR1BhdGhTZWdBcmNSZWwoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29u
dGV4dCA9IDApOworICAgICAgICBTVkdQYXRoU2VnQXJjUmVsKGNvbnN0IFNWR1N0eWxlZEVsZW1l
bnQqIGNvbnRleHQgPSAwKTsKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0FyY1JlbCgpOwog
CiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJl
dHVybiBQQVRIU0VHX0FSQ19SRUw7IH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhT
ZWdDbG9zZVBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhT
ZWdDbG9zZVBhdGguY3BwCShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1BhdGhTZWdDbG9zZVBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94
QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApA
QCAtMjQsMTAgKzI0LDEwIEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdQYXRo
U2VnQ2xvc2VQYXRoLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBTVkdQYXRoU2VnQ2xvc2VQYXRoOjpTVkdQYXRoU2VnQ2xvc2VQYXRoKCkKLTog
U1ZHUGF0aFNlZygpCisgICAgOiBTVkdQYXRoU2VnKCkKIHsKIH0KIApAQCAtMzUsNiArMzUsOCBA
QCBTVkdQYXRoU2VnQ2xvc2VQYXRoOjp+U1ZHUGF0aFNlZ0Nsb3NlUGF0CiB7CiB9CiAKK30KKwog
Ly8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1BhdGhTZWdDbG9zZVBhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdQYXRoU2VnQ2xvc2VQYXRoLmgJKHJldmlzaW9uIDE2ODg3KQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJt
YW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RF
IHByb2plY3QKIApAQCAtMjQsNyArMjQsNyBAQAogI2RlZmluZSBLU1ZHX1NWR1BhdGhTZWdDbG9z
ZVBhdGhJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSA8a3N2ZzIvc3ZnL1NW
R1BhdGhTZWcuaD4KKyNpbmNsdWRlICJTVkdQYXRoU2VnLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
CiB7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmNw
cAkocmV2aXNpb24gMTY4ODcpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0
b0N1YmljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgot
ICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
CiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIzLDEyICsy
MywxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVk
ZSAiU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5oIgorCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVu
dC5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAot
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyhjb25z
dCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQotOiBTVkdQYXRoU2VnKGNvbnRleHQpCitTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljQWJzOjpTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzKGNvbnN0IFNW
R1N0eWxlZEVsZW1lbnQqIGNvbnRleHQpCisgICAgOiBTVkdQYXRoU2VnKGNvbnRleHQpCiB7CiAg
ICAgbV94ID0gbV95ID0gbV94MSA9IG1feTEgPSBtX3gyID0gbV95MiA9IDAuMDsKIH0KQEAgLTQx
LDcgKzQyLDcgQEAgdm9pZCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpzZXRYKGRvdQogewog
ICAgIG1feCA9IHg7CiAKLSAgICBpZihtX2NvbnRleHQpCisgICAgaWYgKG1fY29udGV4dCkKICAg
ICAgICAgbV9jb250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVDaGFuZ2UoKTsKIH0KIApAQCAtNTQsNyAr
NTUsNyBAQCB2b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OnNldFkoZG91CiB7CiAgICAg
bV95ID0geTsKIAotICAgIGlmKG1fY29udGV4dCkKKyAgICBpZiAobV9jb250ZXh0KQogICAgICAg
ICBtX2NvbnRleHQtPm5vdGlmeUF0dHJpYnV0ZUNoYW5nZSgpOwogfQogCkBAIC02Nyw3ICs2OCw3
IEBAIHZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6c2V0WDEoZG8KIHsKICAgICBtX3gx
ID0geDE7CiAKLSAgICBpZihtX2NvbnRleHQpCisgICAgaWYgKG1fY29udGV4dCkKICAgICAgICAg
bV9jb250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVDaGFuZ2UoKTsKIH0KIApAQCAtODAsNyArODEsNyBA
QCB2b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OnNldFkxKGRvCiB7CiAgICAgbV95MSA9
IHkxOwogCi0gICAgaWYobV9jb250ZXh0KQorICAgIGlmIChtX2NvbnRleHQpCiAgICAgICAgIG1f
Y29udGV4dC0+bm90aWZ5QXR0cmlidXRlQ2hhbmdlKCk7CiB9CiAKQEAgLTkzLDcgKzk0LDcgQEAg
dm9pZCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpzZXRYMihkbwogewogICAgIG1feDIgPSB4
MjsKIAotICAgIGlmKG1fY29udGV4dCkKKyAgICBpZiAobV9jb250ZXh0KQogICAgICAgICBtX2Nv
bnRleHQtPm5vdGlmeUF0dHJpYnV0ZUNoYW5nZSgpOwogfQogCkBAIC0xMDYsNyArMTA3LDcgQEAg
dm9pZCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpzZXRZMihkbwogewogICAgIG1feTIgPSB5
MjsKIAotICAgIGlmKG1fY29udGV4dCkKKyAgICBpZiAobV9jb250ZXh0KQogICAgICAgICBtX2Nv
bnRleHQtPm5vdGlmeUF0dHJpYnV0ZUNoYW5nZSgpOwogfQogCkBAIC0xMTgsOCArMTE5LDggQEAg
ZG91YmxlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OnkyKCkgYwogCiAKIAotU1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY1JlbDo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbChjb25zdCBTVkdTdHls
ZWRFbGVtZW50ICpjb250ZXh0KQotOiBTVkdQYXRoU2VnKGNvbnRleHQpCitTVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljUmVsOjpTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsKGNvbnN0IFNWR1N0eWxlZEVs
ZW1lbnQqIGNvbnRleHQpCisgICAgOiBTVkdQYXRoU2VnKGNvbnRleHQpCiB7CiAgICAgbV94ID0g
bV95ID0gbV94MSA9IG1feTEgPSBtX3gyID0gbV95MiA9IDAuMDsKIH0KQEAgLTEzMiw3ICsxMzMs
NyBAQCB2b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OnNldFgoZG91CiB7CiAgICAgbV94
ID0geDsKIAotICAgIGlmKG1fY29udGV4dCkKKyAgICBpZiAobV9jb250ZXh0KQogICAgICAgICBt
X2NvbnRleHQtPm5vdGlmeUF0dHJpYnV0ZUNoYW5nZSgpOwogfQogCkBAIC0xNDUsNyArMTQ2LDcg
QEAgdm9pZCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsOjpzZXRZKGRvdQogewogICAgIG1feSA9
IHk7CiAKLSAgICBpZihtX2NvbnRleHQpCisgICAgaWYgKG1fY29udGV4dCkKICAgICAgICAgbV9j
b250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVDaGFuZ2UoKTsKIH0KIApAQCAtMTU4LDcgKzE1OSw3IEBA
IHZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6c2V0WDEoZG8KIHsKICAgICBtX3gxID0g
eDE7CiAKLSAgICBpZihtX2NvbnRleHQpCisgICAgaWYgKG1fY29udGV4dCkKICAgICAgICAgbV9j
b250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVDaGFuZ2UoKTsKIH0KIApAQCAtMTcxLDcgKzE3Miw3IEBA
IHZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6c2V0WTEoZG8KIHsKICAgICBtX3kxID0g
eTE7CiAKLSAgICBpZihtX2NvbnRleHQpCisgICAgaWYgKG1fY29udGV4dCkKICAgICAgICAgbV9j
b250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVDaGFuZ2UoKTsKIH0KIApAQCAtMTg0LDcgKzE4NSw3IEBA
IHZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6c2V0WDIoZG8KIHsKICAgICBtX3gyID0g
eDI7CiAKLSAgICBpZihtX2NvbnRleHQpCisgICAgaWYgKG1fY29udGV4dCkKICAgICAgICAgbV9j
b250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVDaGFuZ2UoKTsKIH0KIApAQCAtMTk3LDcgKzE5OCw3IEBA
IHZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6c2V0WTIoZG8KIHsKICAgICBtX3kyID0g
eTI7CiAKLSAgICBpZihtX2NvbnRleHQpCisgICAgaWYgKG1fY29udGV4dCkKICAgICAgICAgbV9j
b250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVDaGFuZ2UoKTsKIH0KIApAQCAtMjA2LDYgKzIwNyw4IEBA
IGRvdWJsZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsOjp5MigpIGMKICAgICByZXR1cm4gbV95
MjsKIH0KIAorfQorCiAvLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJ
bmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuaAkocmV2aXNp
b24gMTY4ODcpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAg
ICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAg
ICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlCiAgICAgY2xhc3MgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicyA6IHB1Ymxp
YyBTVkdQYXRoU2VnIAogICAgIHsgCiAgICAgcHVibGljOgotICAgICAgICBTVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljQWJzKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQgPSAwKTsKKyAgICAg
ICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyhjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBjb250
ZXh0ID0gMCk7CiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMoKTsK
IAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gUEFUSFNFR19DVVJWRVRPX0NVQklDX0FCUzsgfQpAQCAtNjgsNyArNjgsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZQogICAgIGNsYXNzIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwgOiBwdWJs
aWMgU1ZHUGF0aFNlZyAKICAgICB7IAogICAgIHB1YmxpYzoKLSAgICAgICAgU1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY1JlbChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0ID0gMCk7CisgICAg
ICAgIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29u
dGV4dCA9IDApOwogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsKCk7
CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIFBBVEhTRUdfQ1VSVkVUT19DVUJJQ19SRUw7IH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGguY3BwCShyZXZpc2lvbiAx
Njg4NykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAg
ICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAg
ICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjMsMTIgKzIzLDEzIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmgiCisKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50
LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1T
VkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21v
b3RoQWJzKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpCi06IFNWR1BhdGhTZWcoY29u
dGV4dCkKK1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OlNWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNTbW9vdGhBYnMoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCkKKyAgICA6IFNW
R1BhdGhTZWcoY29udGV4dCkKIHsKICAgICBtX3ggPSBtX3kgPSBtX3gyID0gbV95MiA9IDAuMDsK
IH0KQEAgLTQxLDcgKzQyLDcgQEAgdm9pZCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJz
OjpzZQogewogICAgIG1feCA9IHg7CiAKLSAgICBpZihtX2NvbnRleHQpCisgICAgaWYgKG1fY29u
dGV4dCkKICAgICAgICAgbV9jb250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVDaGFuZ2UoKTsKIH0KIApA
QCAtNTQsNyArNTUsNyBAQCB2b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OnNl
CiB7CiAgICAgbV95ID0geTsKIAotICAgIGlmKG1fY29udGV4dCkKKyAgICBpZiAobV9jb250ZXh0
KQogICAgICAgICBtX2NvbnRleHQtPm5vdGlmeUF0dHJpYnV0ZUNoYW5nZSgpOwogfQogCkBAIC02
Nyw3ICs2OCw3IEBAIHZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6c2UKIHsK
ICAgICBtX3gyID0geDI7CiAKLSAgICBpZihtX2NvbnRleHQpCisgICAgaWYgKG1fY29udGV4dCkK
ICAgICAgICAgbV9jb250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVDaGFuZ2UoKTsKIH0KIApAQCAtODAs
NyArODEsNyBAQCB2b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OnNlCiB7CiAg
ICAgbV95MiA9IHkyOwogCi0gICAgaWYobV9jb250ZXh0KQorICAgIGlmIChtX2NvbnRleHQpCiAg
ICAgICAgIG1fY29udGV4dC0+bm90aWZ5QXR0cmlidXRlQ2hhbmdlKCk7CiB9CiAKQEAgLTkxLDgg
KzkyLDggQEAgZG91YmxlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OgogCiAKIAot
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Nt
b290aFJlbChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQotOiBTVkdQYXRoU2VnKGNv
bnRleHQpCitTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpTVkdQYXRoU2VnQ3VydmV0
b0N1YmljU21vb3RoUmVsKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQpCisgICAgOiBT
VkdQYXRoU2VnKGNvbnRleHQpCiB7CiAgICAgbV94ID0gbV95ID0gbV94MiA9IG1feTIgPSAwLjA7
CiB9CkBAIC0xMDUsNyArMTA2LDcgQEAgdm9pZCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3Ro
UmVsOjpzZQogewogICAgIG1feCA9IHg7CiAKLSAgICBpZihtX2NvbnRleHQpCisgICAgaWYgKG1f
Y29udGV4dCkKICAgICAgICAgbV9jb250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVDaGFuZ2UoKTsKIH0K
IApAQCAtMTE4LDcgKzExOSw3IEBAIHZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJl
bDo6c2UKIHsKICAgICBtX3kgPSB5OwogCi0gICAgaWYobV9jb250ZXh0KQorICAgIGlmIChtX2Nv
bnRleHQpCiAgICAgICAgIG1fY29udGV4dC0+bm90aWZ5QXR0cmlidXRlQ2hhbmdlKCk7CiB9CiAK
QEAgLTEzMSw3ICsxMzIsNyBAQCB2b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6
OnNlCiB7CiAgICAgbV94MiA9IHgyOwogCi0gICAgaWYobV9jb250ZXh0KQorICAgIGlmIChtX2Nv
bnRleHQpCiAgICAgICAgIG1fY29udGV4dC0+bm90aWZ5QXR0cmlidXRlQ2hhbmdlKCk7CiB9CiAK
QEAgLTE0NCw3ICsxNDUsNyBAQCB2b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6
OnNlCiB7CiAgICAgbV95MiA9IHkyOwogCi0gICAgaWYobV9jb250ZXh0KQorICAgIGlmIChtX2Nv
bnRleHQpCiAgICAgICAgIG1fY29udGV4dC0+bm90aWZ5QXR0cmlidXRlQ2hhbmdlKCk7CiB9CiAK
QEAgLTE1Myw2ICsxNTQsOCBAQCBkb3VibGUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJl
bDo6CiAgICAgcmV0dXJuIG1feTI7CiB9CiAKK30KKwogLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlm
IC8vIFNWR19TVVBQT1JUCiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNTbW9vdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRo
U2VnQ3VydmV0b0N1YmljU21vb3RoLmgJKHJldmlzaW9uIDE2ODg3KQorKysgV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
S0RFIHByb2plY3QKIApAQCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgIGNs
YXNzIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMgOiBwdWJsaWMgU1ZHUGF0aFNlZwog
ICAgIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhB
YnMoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCA9IDApOworICAgICAgICBTVkdQYXRo
U2VnQ3VydmV0b0N1YmljU21vb3RoQWJzKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQg
PSAwKTsKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicygp
OwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7
IHJldHVybiBQQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01PT1RIX0FCUzsgfQpAQCAtNjAsNyArNjAs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgIGNsYXNzIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNT
bW9vdGhSZWwgOiBwdWJsaWMgU1ZHUGF0aFNlZwogICAgIHsgCiAgICAgcHVibGljOgotICAgICAg
ICBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQg
KmNvbnRleHQgPSAwKTsKKyAgICAgICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbChj
b25zdCBTVkdTdHlsZWRFbGVtZW50KiBjb250ZXh0ID0gMCk7CiAgICAgICAgIHZpcnR1YWwgflNW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2ln
bmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19DVVJWRVRPX0NV
QklDX1NNT09USF9SRUw7IH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpYy5jcHAJKHJldmlzaW9uIDE2ODg3KQorKysgV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
S0RFIHByb2plY3QKIApAQCAtMjMsMTIgKzIzLDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5o
IgorCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgogCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNB
YnM6OlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQg
KmNvbnRleHQpCi06IFNWR1BhdGhTZWcoY29udGV4dCkKK1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljQWJzOjpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficyhjb25zdCBTVkdTdHlsZWRFbGVt
ZW50KiBjb250ZXh0KQorICAgIDogU1ZHUGF0aFNlZyhjb250ZXh0KQogewogICAgIG1feCA9IG1f
eSA9IG1feDEgPSBtX3kxID0gMC4wOwogfQpAQCAtNDEsNyArNDIsNyBAQCB2b2lkIFNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOjpzZXRYCiB7CiAgICAgbV94ID0geDsKIAotICAgIGlmKG1f
Y29udGV4dCkKKyAgICBpZiAobV9jb250ZXh0KQogICAgICAgICBtX2NvbnRleHQtPm5vdGlmeUF0
dHJpYnV0ZUNoYW5nZSgpOwogfQogCkBAIC01NCw3ICs1NSw3IEBAIHZvaWQgU1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWNBYnM6OnNldFkKIHsKICAgICBtX3kgPSB5OwogCi0gICAgaWYobV9jb250
ZXh0KQorICAgIGlmIChtX2NvbnRleHQpCiAgICAgICAgIG1fY29udGV4dC0+bm90aWZ5QXR0cmli
dXRlQ2hhbmdlKCk7CiB9CiAKQEAgLTY3LDcgKzY4LDcgQEAgdm9pZCBTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY0Ficzo6c2V0WAogewogICAgIG1feDEgPSB4MTsKIAotICAgIGlmKG1fY29udGV4
dCkKKyAgICBpZiAobV9jb250ZXh0KQogICAgICAgICBtX2NvbnRleHQtPm5vdGlmeUF0dHJpYnV0
ZUNoYW5nZSgpOwogfQogCkBAIC04MCw3ICs4MSw3IEBAIHZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9R
dWFkcmF0aWNBYnM6OnNldFkKIHsKICAgICBtX3kxID0geTE7CiAKLSAgICBpZihtX2NvbnRleHQp
CisgICAgaWYgKG1fY29udGV4dCkKICAgICAgICAgbV9jb250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVD
aGFuZ2UoKTsKIH0KIApAQCAtOTIsOCArOTMsOCBAQCBkb3VibGUgU1ZHUGF0aFNlZ0N1cnZldG9R
dWFkcmF0aWNBYnM6OnkxCiAKIAogCi1TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6U1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4
dCkKLTogU1ZHUGF0aFNlZyhjb250ZXh0KQorU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6
OlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNv
bnRleHQpCisgICAgOiBTVkdQYXRoU2VnKGNvbnRleHQpCiB7CiAgICAgbV94ID0gbV95ID0gbV94
MSA9IG1feTEgPSAwLjA7CiB9CkBAIC0xMDYsNyArMTA3LDcgQEAgdm9pZCBTVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY1JlbDo6c2V0WAogewogICAgIG1feCA9IHg7CiAKLSAgICBpZihtX2NvbnRl
eHQpCisgICAgaWYgKG1fY29udGV4dCkKICAgICAgICAgbV9jb250ZXh0LT5ub3RpZnlBdHRyaWJ1
dGVDaGFuZ2UoKTsKIH0KIApAQCAtMTE5LDcgKzEyMCw3IEBAIHZvaWQgU1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWNSZWw6OnNldFkKIHsKICAgICBtX3kgPSB5OwogCi0gICAgaWYobV9jb250ZXh0
KQorICAgIGlmIChtX2NvbnRleHQpCiAgICAgICAgIG1fY29udGV4dC0+bm90aWZ5QXR0cmlidXRl
Q2hhbmdlKCk7CiB9CiAKQEAgLTEzMiw3ICsxMzMsNyBAQCB2b2lkIFNWR1BhdGhTZWdDdXJ2ZXRv
UXVhZHJhdGljUmVsOjpzZXRYCiB7CiAgICAgbV94MSA9IHgxOwogCi0gICAgaWYobV9jb250ZXh0
KQorICAgIGlmIChtX2NvbnRleHQpCiAgICAgICAgIG1fY29udGV4dC0+bm90aWZ5QXR0cmlidXRl
Q2hhbmdlKCk7CiB9CiAKQEAgLTE0NSw3ICsxNDYsNyBAQCB2b2lkIFNWR1BhdGhTZWdDdXJ2ZXRv
UXVhZHJhdGljUmVsOjpzZXRZCiB7CiAgICAgbV95MSA9IHkxOwogCi0gICAgaWYobV9jb250ZXh0
KQorICAgIGlmIChtX2NvbnRleHQpCiAgICAgICAgIG1fY29udGV4dC0+bm90aWZ5QXR0cmlidXRl
Q2hhbmdlKCk7CiB9CiAKQEAgLTE1NCw2ICsxNTUsOCBAQCBkb3VibGUgU1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWNSZWw6OnkxCiAgICAgcmV0dXJuIG1feTE7CiB9CiAKK30KKwogLy8gdmltOnRz
PTQ6bm9ldAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuaAkocmV2aXNpb24gMTY4ODcpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlr
b2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAy
MDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZQogICAgIGNsYXNzIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzIDogcHVibGljIFNWR1Bh
dGhTZWcKICAgICB7IAogICAgIHB1YmxpYzoKLSAgICAgICAgU1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNBYnMoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCA9IDApOworICAgICAgICBT
VkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficyhjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBjb250
ZXh0ID0gMCk7CiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJz
KCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIFBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfQUJTOyB9CkBAIC02MCw3ICs2MCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgY2xhc3MgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNSZWwgOiBwdWJsaWMgU1ZHUGF0aFNlZyAKICAgICB7IAogICAgIHB1YmxpYzoKLSAgICAgICAg
U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29u
dGV4dCA9IDApOworICAgICAgICBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbChjb25zdCBT
VkdTdHlsZWRFbGVtZW50KiBjb250ZXh0ID0gMCk7CiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljUmVsKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9y
dCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNf
UkVMOyB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y1Ntb290aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWNTbW9vdGguY3BwCShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29s
YXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwg
MjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAw
NSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIzLDEyICsyMywxMyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNTbW9vdGguaCIKKwogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKIAotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFi
cyhjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQotOiBTVkdQYXRoU2VnKGNvbnRleHQp
CitTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFiczo6U1ZHUGF0aFNlZ0N1cnZldG9R
dWFkcmF0aWNTbW9vdGhBYnMoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCkKKyAgICA6
IFNWR1BhdGhTZWcoY29udGV4dCkKIHsKICAgICBtX3ggPSBtX3kgPSAwLjA7CiB9CkBAIC00MSw3
ICs0Miw3IEBAIHZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMKIHsKICAg
ICBtX3ggPSB4OwogCi0gICAgaWYobV9jb250ZXh0KQorICAgIGlmIChtX2NvbnRleHQpCiAgICAg
ICAgIG1fY29udGV4dC0+bm90aWZ5QXR0cmlidXRlQ2hhbmdlKCk7CiB9CiAKQEAgLTU0LDcgKzU1
LDcgQEAgdm9pZCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicwogewogICAgIG1f
eSA9IHk7CiAKLSAgICBpZihtX2NvbnRleHQpCisgICAgaWYgKG1fY29udGV4dCkKICAgICAgICAg
bV9jb250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVDaGFuZ2UoKTsKIH0KIApAQCAtNjUsOCArNjYsOCBA
QCBkb3VibGUgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBCiAKIAogCi1TVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNT
bW9vdGhSZWwoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKLTogU1ZHUGF0aFNlZyhj
b250ZXh0KQorU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw6OlNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQp
CisgICAgOiBTVkdQYXRoU2VnKGNvbnRleHQpCiB7CiAgICAgbV94ID0gbV95ID0gMC4wOwogfQpA
QCAtNzksNyArODAsNyBAQCB2b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVs
CiB7CiAgICAgbV94ID0geDsKIAotICAgIGlmKG1fY29udGV4dCkKKyAgICBpZiAobV9jb250ZXh0
KQogICAgICAgICBtX2NvbnRleHQtPm5vdGlmeUF0dHJpYnV0ZUNoYW5nZSgpOwogfQogCkBAIC05
Miw3ICs5Myw3IEBAIHZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwKIHsK
ICAgICBtX3kgPSB5OwogCi0gICAgaWYobV9jb250ZXh0KQorICAgIGlmIChtX2NvbnRleHQpCiAg
ICAgICAgIG1fY29udGV4dC0+bm90aWZ5QXR0cmlidXRlQ2hhbmdlKCk7CiB9CiAKQEAgLTEwMSw2
ICsxMDIsOCBAQCBkb3VibGUgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSCiAgICAg
cmV0dXJuIG1feTsKIH0KIAorfQorCiAvLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NV
UFBPUlQKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNTbW9vdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY1Ntb290aC5oCShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFpp
bW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIw
MDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBLREUgcHJvamVjdAogCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAg
Y2xhc3MgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMgOiBwdWJsaWMgU1ZHUGF0
aFNlZwogICAgIHsgCiAgICAgcHVibGljOgotICAgICAgICBTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY1Ntb290aEFicyhjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0ID0gMCk7CisgICAg
ICAgIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzKGNvbnN0IFNWR1N0eWxlZEVs
ZW1lbnQqIGNvbnRleHQgPSAwKTsKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0N1cnZldG9R
dWFkcmF0aWNTbW9vdGhBYnMoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBh
dGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9P
VEhfQUJTOyB9CkBAIC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgY2xhc3Mg
U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwgOiBwdWJsaWMgU1ZHUGF0aFNlZyAK
ICAgICB7IAogICAgIHB1YmxpYzoKLSAgICAgICAgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNT
bW9vdGhSZWwoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCA9IDApOworICAgICAgICBT
VkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbChjb25zdCBTVkdTdHlsZWRFbGVtZW50
KiBjb250ZXh0ID0gMCk7CiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljU21vb3RoUmVsKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2Vn
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX1JF
TDsgfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0by5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0by5jcHAJKHJldmlzaW9u
IDE2ODg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0by5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDE0ICsyMiwxNCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZk
ZWYgU1ZHX1NVUFBPUlQKLQogI2luY2x1ZGUgIlNWR1BhdGhTZWdMaW5ldG8uaCIKKwogI2luY2x1
ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVNWR1BhdGhTZWdMaW5ldG9BYnM6OlNWR1BhdGhTZWdMaW5ldG9B
YnMoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKLTogU1ZHUGF0aFNlZyhjb250ZXh0
KQorU1ZHUGF0aFNlZ0xpbmV0b0Ficzo6U1ZHUGF0aFNlZ0xpbmV0b0Ficyhjb25zdCBTVkdTdHls
ZWRFbGVtZW50KiBjb250ZXh0KQorICAgIDogU1ZHUGF0aFNlZyhjb250ZXh0KQogewogICAgIG1f
eCA9IG1feSA9IDAuMDsKIH0KQEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBTVkdQYXRoU2VnTGluZXRv
QWJzOjpzZXRYKGRvdWJsZSB4KQogewogICAgIG1feCA9IHg7CiAKLSAgICBpZihtX2NvbnRleHQp
CisgICAgaWYgKG1fY29udGV4dCkKICAgICAgICAgbV9jb250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVD
aGFuZ2UoKTsKIH0KIApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIFNWR1BhdGhTZWdMaW5ldG9BYnM6
OnNldFkoZG91YmxlIHkpCiB7CiAgICAgbV95ID0geTsKIAotICAgIGlmKG1fY29udGV4dCkKKyAg
ICBpZiAobV9jb250ZXh0KQogICAgICAgICBtX2NvbnRleHQtPm5vdGlmeUF0dHJpYnV0ZUNoYW5n
ZSgpOwogfQogCkBAIC02NCw4ICs2NCw4IEBAIGRvdWJsZSBTVkdQYXRoU2VnTGluZXRvQWJzOjp5
KCkgY29uc3QKICAgICByZXR1cm4gbV95OwogfQogCi1TVkdQYXRoU2VnTGluZXRvUmVsOjpTVkdQ
YXRoU2VnTGluZXRvUmVsKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpCi06IFNWR1Bh
dGhTZWcoY29udGV4dCkKK1NWR1BhdGhTZWdMaW5ldG9SZWw6OlNWR1BhdGhTZWdMaW5ldG9SZWwo
Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCkKKyAgICA6IFNWR1BhdGhTZWcoY29udGV4
dCkKIHsKICAgICBtX3ggPSBtX3kgPSAwLjA7CiB9CkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgU1ZH
UGF0aFNlZ0xpbmV0b1JlbDo6c2V0WChkb3VibGUgeCkKIHsKICAgICBtX3ggPSB4OwogCi0gICAg
aWYobV9jb250ZXh0KQorICAgIGlmIChtX2NvbnRleHQpCiAgICAgICAgIG1fY29udGV4dC0+bm90
aWZ5QXR0cmlidXRlQ2hhbmdlKCk7CiB9CiAKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBTVkdQYXRo
U2VnTGluZXRvUmVsOjpzZXRZKGRvdWJsZSB5KQogewogICAgIG1feSA9IHk7CiAKLSAgICBpZiht
X2NvbnRleHQpCisgICAgaWYgKG1fY29udGV4dCkKICAgICAgICAgbV9jb250ZXh0LT5ub3RpZnlB
dHRyaWJ1dGVDaGFuZ2UoKTsKIH0KIApAQCAtMTAwLDYgKzEwMCw4IEBAIGRvdWJsZSBTVkdQYXRo
U2VnTGluZXRvUmVsOjp5KCkgY29uc3QKICAgICByZXR1cm4gbV95OwogfQogCit9CisKIC8vIHZp
bTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCkluZGV4OiBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdQYXRoU2VnTGluZXRvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHUGF0aFNlZ0xpbmV0by5oCShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1BhdGhTZWdMaW5ldG8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBr
ZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAg
LTI0LDE0ICsyNCwxNCBAQAogI2RlZmluZSBLU1ZHX1NWR1BhdGhTZWdMaW5ldG9JbXBsX0gKICNp
ZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSA8a3N2ZzIvc3ZnL1NWR1BhdGhTZWcuaD4KKyNp
bmNsdWRlICJTVkdQYXRoU2VnLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7CiAgICAgY2xhc3Mg
U1ZHUGF0aFNlZ0xpbmV0b0FicyA6IHB1YmxpYyBTVkdQYXRoU2VnCiAgICAgeyAKICAgICBwdWJs
aWM6Ci0gICAgICAgIFNWR1BhdGhTZWdMaW5ldG9BYnMoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAq
Y29udGV4dCA9IDApOworICAgICAgICBTVkdQYXRoU2VnTGluZXRvQWJzKGNvbnN0IFNWR1N0eWxl
ZEVsZW1lbnQqIGNvbnRleHQgPSAwKTsKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0xpbmV0
b0FicygpOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBj
b25zdCB7IHJldHVybiBQQVRIU0VHX0xJTkVUT19BQlM7IH0KQEAgLTUyLDcgKzUyLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUKICAgICBjbGFzcyBTVkdQYXRoU2VnTGluZXRvUmVsIDogcHVibGljIFNW
R1BhdGhTZWcKICAgICB7IAogICAgIHB1YmxpYzoKLSAgICAgICAgU1ZHUGF0aFNlZ0xpbmV0b1Jl
bChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0ID0gMCk7CisgICAgICAgIFNWR1BhdGhT
ZWdMaW5ldG9SZWwoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCA9IDApOwogICAgICAg
ICB2aXJ0dWFsIH5TVkdQYXRoU2VnTGluZXRvUmVsKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNp
Z25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfTElORVRPX1JF
TDsgfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhTZWdMaW5ldG9Ib3Jp
em9udGFsLmNwcAkocmV2aXNpb24gMTY4ODcpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRo
U2VnTGluZXRvSG9yaXpvbnRhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEyICsyMywxMyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZH
UGF0aFNlZ0xpbmV0b0hvcml6b250YWwuaCIKKwogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQu
aCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNW
R1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFi
cyhjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQotOiBTVkdQYXRoU2VnKGNvbnRleHQp
CitTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250
YWxBYnMoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCkKKyAgICA6IFNWR1BhdGhTZWco
Y29udGV4dCkKIHsKICAgICBtX3ggPSAwLjA7CiB9CkBAIC00MSw3ICs0Miw3IEBAIHZvaWQgU1ZH
UGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM6OnNldFgKIHsKICAgICBtX3ggPSB4OwogCi0gICAg
aWYobV9jb250ZXh0KQorICAgIGlmIChtX2NvbnRleHQpCiAgICAgICAgIG1fY29udGV4dC0+bm90
aWZ5QXR0cmlidXRlQ2hhbmdlKCk7CiB9CiAKQEAgLTUyLDggKzUzLDggQEAgZG91YmxlIFNWR1Bh
dGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjp4KAogCiAKIAotU1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWxSZWw6OlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsKGNvbnN0IFNWR1N0eWxlZEVs
ZW1lbnQgKmNvbnRleHQpCi06IFNWR1BhdGhTZWcoY29udGV4dCkKK1NWR1BhdGhTZWdMaW5ldG9I
b3Jpem9udGFsUmVsOjpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbChjb25zdCBTVkdTdHls
ZWRFbGVtZW50KiBjb250ZXh0KQorICAgIDogU1ZHUGF0aFNlZyhjb250ZXh0KQogewogICAgIG1f
eCA9IDAuMDsKIH0KQEAgLTY2LDcgKzY3LDcgQEAgdm9pZCBTVkdQYXRoU2VnTGluZXRvSG9yaXpv
bnRhbFJlbDo6c2V0WAogewogICAgIG1feCA9IHg7CiAKLSAgICBpZihtX2NvbnRleHQpCisgICAg
aWYgKG1fY29udGV4dCkKICAgICAgICAgbV9jb250ZXh0LT5ub3RpZnlBdHRyaWJ1dGVDaGFuZ2Uo
KTsKIH0KIApAQCAtNzUsNiArNzYsOCBAQCBkb3VibGUgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250
YWxSZWw6OngoCiAgICAgcmV0dXJuIG1feDsKIH0KIAorfQorCiAvLyB2aW06dHM9NDpub2V0CiAj
ZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNl
Z0xpbmV0b0hvcml6b250YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQ
YXRoU2VnTGluZXRvSG9yaXpvbnRhbC5oCShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1l
cm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgcHJvamVjdAogCkBAIC0yNCwxNCArMjQsMTQgQEAKICNkZWZpbmUgS1NWR19TVkdQYXRoU2Vn
TGluZXRvSG9yaXpvbnRhbEltcGxfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRlIDxr
c3ZnMi9zdmcvU1ZHUGF0aFNlZy5oPgorI2luY2x1ZGUgIlNWR1BhdGhTZWcuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUKIHsKICAgICBjbGFzcyBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyA6
IHB1YmxpYyBTVkdQYXRoU2VnCiAgICAgewogICAgIHB1YmxpYzoKLSAgICAgICAgU1ZHUGF0aFNl
Z0xpbmV0b0hvcml6b250YWxBYnMoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCA9IDAp
OworICAgICAgICBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyhjb25zdCBTVkdTdHlsZWRF
bGVtZW50KiBjb250ZXh0ID0gMCk7CiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdMaW5ldG9I
b3Jpem9udGFsQWJzKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2Vn
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfQUJTOyB9CkBA
IC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgY2xhc3MgU1ZHUGF0aFNlZ0xp
bmV0b0hvcml6b250YWxSZWwgOiBwdWJsaWMgU1ZHUGF0aFNlZwogICAgIHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsKGNvbnN0IFNWR1N0eWxlZEVs
ZW1lbnQgKmNvbnRleHQgPSAwKTsKKyAgICAgICAgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxS
ZWwoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCA9IDApOwogICAgICAgICB2aXJ0dWFs
IH5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbCgpOwogCiAgICAgICAgIHZpcnR1YWwgdW5z
aWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VHX0xJTkVUT19I
T1JJWk9OVEFMX1JFTDsgfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0
b1ZlcnRpY2FsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2Vn
TGluZXRvVmVydGljYWwuY3BwCShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4g
PHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJv
amVjdAogCkBAIC0yMywxMiArMjMsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBT
VkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5oIgorCiAjaW5j
bHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK25h
bWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpTVkdQYXRo
U2VnTGluZXRvVmVydGljYWxBYnMoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKLTog
U1ZHUGF0aFNlZyhjb250ZXh0KQorU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpTVkdQYXRo
U2VnTGluZXRvVmVydGljYWxBYnMoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCkKKyAg
ICA6IFNWR1BhdGhTZWcoY29udGV4dCkKIHsKICAgICBtX3kgPSAwLjA7CiB9CkBAIC00MSw3ICs0
Miw3IEBAIHZvaWQgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpzZXRZKGQKIHsKICAgICBt
X3kgPSB5OwogCi0gICAgaWYobV9jb250ZXh0KQorICAgIGlmIChtX2NvbnRleHQpCiAgICAgICAg
IG1fY29udGV4dC0+bm90aWZ5QXR0cmlidXRlQ2hhbmdlKCk7CiB9CiAKQEAgLTUzLDggKzU0LDgg
QEAgZG91YmxlIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6eSgpIAogCiAKIAotU1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwoY29uc3Qg
U1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKLTogU1ZHUGF0aFNlZyhjb250ZXh0KQorU1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwoY29uc3Qg
U1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCkKKyAgICA6IFNWR1BhdGhTZWcoY29udGV4dCkKIHsK
ICAgICBtX3kgPSAwLjA7CiB9CkBAIC02Nyw3ICs2OCw3IEBAIHZvaWQgU1ZHUGF0aFNlZ0xpbmV0
b1ZlcnRpY2FsUmVsOjpzZXRZKGQKIHsKICAgICBtX3kgPSB5OwogCi0gICAgaWYobV9jb250ZXh0
KQorICAgIGlmIChtX2NvbnRleHQpCiAgICAgICAgIG1fY29udGV4dC0+bm90aWZ5QXR0cmlidXRl
Q2hhbmdlKCk7CiB9CiAKQEAgLTc2LDYgKzc3LDggQEAgZG91YmxlIFNWR1BhdGhTZWdMaW5ldG9W
ZXJ0aWNhbFJlbDo6eSgpIAogICAgIHJldHVybiBtX3k7CiB9CiAKK30KKwogLy8gdmltOnRzPTQ6
bm9ldAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5oCShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
S0RFIHByb2plY3QKIApAQCAtMjQsMTQgKzI0LDE0IEBACiAjZGVmaW5lIEtTVkdfU1ZHUGF0aFNl
Z0xpbmV0b1ZlcnRpY2FsSW1wbF9ICiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAotI2luY2x1ZGUgPGtz
dmcyL3N2Zy9TVkdQYXRoU2VnLmg+CisjaW5jbHVkZSAiU1ZHUGF0aFNlZy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZQogewogICAgIGNsYXNzIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyA6IHB1
YmxpYyBTVkdQYXRoU2VnCiAgICAgewogICAgIHB1YmxpYzoKLSAgICAgICAgU1ZHUGF0aFNlZ0xp
bmV0b1ZlcnRpY2FsQWJzKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQgPSAwKTsKKyAg
ICAgICAgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQq
IGNvbnRleHQgPSAwKTsKICAgICAgICAgdmlydHVhbH5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxB
YnMoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29u
c3QgeyByZXR1cm4gUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfQUJTOyB9CkBAIC00OCw3ICs0OCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgY2xhc3MgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2Fs
UmVsIDogcHVibGljIFNWR1BhdGhTZWcKICAgICB7CiAgICAgcHVibGljOgotICAgICAgICBTVkdQ
YXRoU2VnTGluZXRvVmVydGljYWxSZWwoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCA9
IDApOworICAgICAgICBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwoY29uc3QgU1ZHU3R5bGVk
RWxlbWVudCogY29udGV4dCA9IDApOwogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnTGluZXRv
VmVydGljYWxSZWwoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdU
eXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfUkVMOyB9CkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2VnTW92ZXRvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2VnTW92ZXRvLmNwcAkocmV2aXNpb24gMTY4ODcpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2VnTW92ZXRvLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMg
WmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwg
MjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIEtERSBwcm9qZWN0CiAKQEAgLTIzLDEyICsyMywxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ01vdmV0by5oIgorCiAj
aW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
K25hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHUGF0aFNlZ01vdmV0b0Ficzo6U1ZHUGF0aFNlZ01v
dmV0b0Ficyhjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQotOiBTVkdQYXRoU2VnKGNv
bnRleHQpCitTVkdQYXRoU2VnTW92ZXRvQWJzOjpTVkdQYXRoU2VnTW92ZXRvQWJzKGNvbnN0IFNW
R1N0eWxlZEVsZW1lbnQqIGNvbnRleHQpCisgICAgOiBTVkdQYXRoU2VnKGNvbnRleHQpCiB7CiAg
ICAgbV94ID0gbV95ID0gMC4wOwogfQpAQCAtNDEsNyArNDIsNyBAQCB2b2lkIFNWR1BhdGhTZWdN
b3ZldG9BYnM6OnNldFgoZG91YmxlIHgpCiB7CiAgICAgbV94ID0geDsKIAotICAgIGlmKG1fY29u
dGV4dCkKKyAgICBpZiAobV9jb250ZXh0KQogICAgICAgICBtX2NvbnRleHQtPm5vdGlmeUF0dHJp
YnV0ZUNoYW5nZSgpOwogfQogCkBAIC01NCw3ICs1NSw3IEBAIHZvaWQgU1ZHUGF0aFNlZ01vdmV0
b0Ficzo6c2V0WShkb3VibGUgeSkKIHsKICAgICBtX3kgPSB5OwogCi0gICAgaWYobV9jb250ZXh0
KQorICAgIGlmIChtX2NvbnRleHQpCiAgICAgICAgIG1fY29udGV4dC0+bm90aWZ5QXR0cmlidXRl
Q2hhbmdlKCk7CiB9CiAKQEAgLTY2LDggKzY3LDggQEAgZG91YmxlIFNWR1BhdGhTZWdNb3ZldG9B
YnM6OnkoKSBjb25zdAogCiAKIAotU1ZHUGF0aFNlZ01vdmV0b1JlbDo6U1ZHUGF0aFNlZ01vdmV0
b1JlbChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQotOiBTVkdQYXRoU2VnKGNvbnRl
eHQpCitTVkdQYXRoU2VnTW92ZXRvUmVsOjpTVkdQYXRoU2VnTW92ZXRvUmVsKGNvbnN0IFNWR1N0
eWxlZEVsZW1lbnQqIGNvbnRleHQpCisgICAgOiBTVkdQYXRoU2VnKGNvbnRleHQpCiB7CiAgICAg
bV94ID0gbV95ID0gMC4wOwogfQpAQCAtODAsNyArODEsNyBAQCB2b2lkIFNWR1BhdGhTZWdNb3Zl
dG9SZWw6OnNldFgoZG91YmxlIHgpCiB7CiAgICAgbV94ID0geDsKIAotICAgIGlmKG1fY29udGV4
dCkKKyAgICBpZiAobV9jb250ZXh0KQogICAgICAgICBtX2NvbnRleHQtPm5vdGlmeUF0dHJpYnV0
ZUNoYW5nZSgpOwogfQogCkBAIC05Myw3ICs5NCw3IEBAIHZvaWQgU1ZHUGF0aFNlZ01vdmV0b1Jl
bDo6c2V0WShkb3VibGUgeSkKIHsKICAgICBtX3kgPSB5OwogCi0gICAgaWYobV9jb250ZXh0KQor
ICAgIGlmIChtX2NvbnRleHQpCiAgICAgICAgIG1fY29udGV4dC0+bm90aWZ5QXR0cmlidXRlQ2hh
bmdlKCk7CiB9CiAKQEAgLTEwMiw2ICsxMDMsOCBAQCBkb3VibGUgU1ZHUGF0aFNlZ01vdmV0b1Jl
bDo6eSgpIGNvbnN0CiAgICAgcmV0dXJuIG1feTsKIH0KIAorfQorCiAvLyB2aW06dHM9NDpub2V0
CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0
aFNlZ01vdmV0by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhTZWdN
b3ZldG8uaAkocmV2aXNpb24gMTY4ODcpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2Vn
TW92ZXRvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAg
ICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAg
ICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAog
ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxNCArMjQs
MTQgQEAKICNkZWZpbmUgS1NWR19TVkdQYXRoU2VnTW92ZXRvSW1wbF9ICiAjaWZkZWYgU1ZHX1NV
UFBPUlQKIAotI2luY2x1ZGUgPGtzdmcyL3N2Zy9TVkdQYXRoU2VnLmg+CisjaW5jbHVkZSAiU1ZH
UGF0aFNlZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewogICAgIGNsYXNzIFNWR1BhdGhTZWdN
b3ZldG9BYnMgOiBwdWJsaWMgU1ZHUGF0aFNlZwogICAgIHsgCiAgICAgcHVibGljOgotICAgICAg
ICBTVkdQYXRoU2VnTW92ZXRvQWJzKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQgPSAw
KTsKKyAgICAgICAgU1ZHUGF0aFNlZ01vdmV0b0Ficyhjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBj
b250ZXh0ID0gMCk7CiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdNb3ZldG9BYnMoKTsKIAog
ICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1
cm4gUEFUSFNFR19NT1ZFVE9fQUJTOyB9CkBAIC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlCiAgICAgY2xhc3MgU1ZHUGF0aFNlZ01vdmV0b1JlbCA6IHB1YmxpYyBTVkdQYXRoU2VnCiAg
ICAgeyAKICAgICBwdWJsaWM6Ci0gICAgICAgIFNWR1BhdGhTZWdNb3ZldG9SZWwoY29uc3QgU1ZH
U3R5bGVkRWxlbWVudCAqY29udGV4dCA9IDApOworICAgICAgICBTVkdQYXRoU2VnTW92ZXRvUmVs
KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQgPSAwKTsKICAgICAgICAgdmlydHVhbCB+
U1ZHUGF0aFNlZ01vdmV0b1JlbCgpOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQg
cGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VHX01PVkVUT19SRUw7IH0K
</data>
<flag name="review"
          id="3688"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10986</attachid>
            <date>2006-10-08 12:23:42 -0700</date>
            <delta_ts>2006-10-31 11:09:50 -0800</delta_ts>
            <desc>Cleanup for svg code in shape classes</desc>
            <filename>11217-shapes.diff</filename>
            <type>text/plain</type>
            <size>28923</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMDYtMTAtMDggIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIHN2ZyBzaGFwZSBj
bGFzc2VzLgorCisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQ2lyY2xlRWxlbWVudDo6U1ZHQ2lyY2xlRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdDaXJjbGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdDaXJjbGVFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dCk6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0NpcmNsZUVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQpOgorICAgICAgICAqIGtzdmcy
L3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0VsbGlw
c2VFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGxpcHNlRWxlbWVudDo6cmVuZGVy
ZXJJc05lZWRlZCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0xpbmVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdMaW5lRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQpOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHTGluZUVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9T
VkdQb2x5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2x5RWxlbWVudDo6U1ZH
UG9seUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OnBvaW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2x5RWxlbWVudDo6YW5pbWF0ZWRQb2ludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BvbHlFbGVtZW50Ojpub3RpZnlBdHRyaWJ1dGVDaGFuZ2UpOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQb2x5RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUG9seUVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9T
VkdQb2x5Z29uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2x5Z29uRWxlbWVu
dDo6U1ZHUG9seWdvbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seWdvbkVsZW1l
bnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5o
OgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUG9seWxpbmVFbGVtZW50OjpTVkdQb2x5bGluZUVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUG9seWxpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHUG9seWxpbmVFbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1Jl
Y3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZWN0RWxlbWVudDo6cHVzaEF0
dHJpYnV0ZUNvbnRleHQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUmVjdEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQpOgorCiAy
MDA2LTEwLTA3ICBBbmRlcnMgQ2FybHNzb24gIDxhY2FybHNzb25AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE1hY2llai4KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NpcmNs
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NpcmNsZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NpcmNs
ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+
Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Cisg
ICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjIsMTgg
KzIyLDE2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQUE9SVAotI2lu
Y2x1ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCiAKICNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCi0KLSNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0hl
bHBlci5oIgotI2luY2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdMZW5n
dGguaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
K25hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHQ2lyY2xlRWxlbWVudDo6U1ZHQ2lyY2xlRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHQ2lyY2xl
RWxlbWVudDo6U1ZHQ2lyY2xlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jKQogICAgIDogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQodGFnTmFt
ZSwgZG9jKQogICAgICwgU1ZHVGVzdHMoKQogICAgICwgU1ZHTGFuZ1NwYWNlKCkKQEAgLTUyLDcg
KzUwLDcgQEAgQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHQ2lyY2xlRQogQU5JTUFU
RURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHQ2lyY2xlRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVu
Z3RoLCBsZW5ndGgsIEN5LCBjeSwgU1ZHTmFtZXM6OmN5QXR0ci5sb2NhbE5hbWUoKSwgbV9jeS5n
ZXQoKSkKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0NpcmNsZUVsZW1lbnQsIFNW
R0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBSLCByLCBTVkdOYW1lczo6ckF0dHIubG9jYWxOYW1l
KCksIG1fci5nZXQoKSkKIAotdm9pZCBTVkdDaXJjbGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR0NpcmNsZUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpjeEF0dHIpCkBAIC04MCwxMCArNzgsMTAgQEAgUGF0aCBTVkdDaXJjbGVFbGVt
ZW50Ojp0b1BhdGhEYXRhKCkgY29ucwogICAgIHJldHVybiBQYXRoOjpjcmVhdGVDaXJjbGUoRmxv
YXRQb2ludChfY3gsIF9jeSksIF9yKTsKIH0KIAotY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqU1ZH
Q2lyY2xlRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVu
dCAqY29udGV4dCkKK2NvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIFNWR0NpcmNsZUVsZW1lbnQ6OnB1
c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQpCiB7CiAg
ICAgLy8gQWxsIGF0dHJpYnV0ZSdzIGNvbnRleHRzIGFyZSBlcXVhbCAoc28ganVzdCB0YWtlIHRo
ZSBvbmUgZnJvbSAnY3gnKS4KLSAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpyZXN0b3JlID0g
Y3goKS0+Y29udGV4dCgpOworICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIHJlc3RvcmUgPSBj
eCgpLT5jb250ZXh0KCk7CiAKICAgICBjeCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwogICAgIGN5
KCktPnNldENvbnRleHQoY29udGV4dCk7CkBAIC0xMDMsNiArMTAxLDggQEAgYm9vbCBTVkdDaXJj
bGVFbGVtZW50OjpoYXNQZXJjZW50YWdlVmFsdQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorfQor
CiAvLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaAkocmV2aXNpb24gMTY4ODcpCisrKyBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdp
bGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAogCkBAIC0yNCwxOCArMjQsMTggQEAKICNkZWZpbmUgS1NWR19TVkdDaXJjbGVFbGVtZW50SW1w
bF9ICiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAotI2luY2x1ZGUgIlNWR1Rlc3RzLmgiCisjaW5jbHVk
ZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIgogI2luY2x1ZGUgIlNWR0xhbmdTcGFj
ZS5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIgorI2luY2x1ZGUgIlNWR1Rlc3RzLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7CiAgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNz
IFNWR0NpcmNsZUVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZAog
ICAgIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNWR0NpcmNsZUVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CkBAIC00NCwxMiArNDQsMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0
czo6aXNWYWxpZCgpOyB9CiAKICAgICAgICAgLy8gJ1NWR0NpcmNsZUVsZW1lbnQnIGZ1bmN0aW9u
cwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlICphdHRyKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSogYXR0cik7CiAKLSAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNO
ZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJl
cklzTmVlZGVkKHN0eWxlKTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRl
ZChSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNO
ZWVkZWQoc3R5bGUpOyB9CiAgICAgICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7
CiAKLSAgICAgICAgdmlydHVhbCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpwdXNoQXR0cmlidXRl
Q29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KTsKKyAgICAgICAgdmlydHVh
bCBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBwdXNoQXR0cmlidXRlQ29udGV4dChjb25zdCBTVkdT
dHlsZWRFbGVtZW50KiBjb250ZXh0KTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVh
bCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7
IH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE2ODg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAg
ICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAy
MDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjIsMTggKzIyLDE2IEBACiAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgIkF0dHIuaCIKKyNp
bmNsdWRlICJTVkdFbGxpcHNlRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgot
Ci0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKLSNpbmNsdWRl
ICJTVkdFbGxpcHNlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgorI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRWxsaXBzZUVsZW1lbnQ6
OlNWR0VsbGlwc2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
ICpkb2MpCitTVkdFbGxpcHNlRWxlbWVudDo6U1ZHRWxsaXBzZUVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIFNWR1Rlc3RzKCkKICAgICAsIFNWR0xh
bmdTcGFjZSgpCkBAIC01NCw3ICs1Miw3IEBAIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05T
KFNWR0VsbGlwc2UKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0VsbGlwc2VFbGVt
ZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgUngsIHJ4LCBTVkdOYW1lczo6cnhBdHRy
LmxvY2FsTmFtZSgpLCBtX3J4LmdldCgpKQogQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMo
U1ZHRWxsaXBzZUVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBSeSwgcnksIFNW
R05hbWVzOjpyeUF0dHIubG9jYWxOYW1lKCksIG1fcnkuZ2V0KCkpCiAKLXZvaWQgU1ZHRWxsaXBz
ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3Zv
aWQgU1ZHRWxsaXBzZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSogYXR0cikKIHsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUo
KTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpjeEF0dHIpCkBAIC04NCwxMCAr
ODIsMTAgQEAgUGF0aCBTVkdFbGxpcHNlRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbgogICAgIHJl
dHVybiBQYXRoOjpjcmVhdGVFbGxpcHNlKEZsb2F0UG9pbnQoX2N4LCBfY3kpLCBfcngsIF9yeSk7
CiB9CiAKLWNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKlNWR0VsbGlwc2VFbGVtZW50OjpwdXNoQXR0
cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQorY29uc3QgU1ZH
U3R5bGVkRWxlbWVudCogU1ZHRWxsaXBzZUVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNv
bnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQpCiB7CiAgICAgLy8gQWxsIGF0dHJpYnV0ZSdz
IGNvbnRleHRzIGFyZSBlcXVhbCAoc28ganVzdCB0YWtlIHRoZSBvbmUgZnJvbSAnY3gnKS4KLSAg
ICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpyZXN0b3JlID0gY3goKS0+Y29udGV4dCgpOworICAg
IGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIHJlc3RvcmUgPSBjeCgpLT5jb250ZXh0KCk7CiAKICAg
ICBjeCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwogICAgIGN5KCktPnNldENvbnRleHQoY29udGV4
dCk7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmgJKHJldmlzaW9uIDE2
ODg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5p
a29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwg
MjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDE4ICsyNCwxOCBAQAogI2RlZmluZSBLU1ZH
X1NWR0VsbGlwc2VFbGVtZW50SW1wbF9ICiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAotI2luY2x1ZGUg
IlNWR1Rlc3RzLmgiCisjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIgog
I2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIgor
I2luY2x1ZGUgIlNWR1Rlc3RzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7CiAgICAgY2xhc3Mg
U1ZHTGVuZ3RoOwogICAgIGNsYXNzIFNWR0VsbGlwc2VFbGVtZW50IDogcHVibGljIFNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1YmxpYyBTVkdUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHTGFuZ1NwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdWJsaWMgU1ZHVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHTGFuZ1NwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQKICAgICB7CiAgICAgcHVibGljOgogICAgICAgICBT
VkdFbGxpcHNlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAgLTQ0
LDEyICs0NCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAogICAgICAgICAv
LyAnU1ZHRWxsaXBzZUVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cik7CiAKLSAg
ICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7
IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQorICAgICAg
ICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0
dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9CiAgICAgICAgIHZp
cnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBjb25zdCBT
VkdTdHlsZWRFbGVtZW50ICpwdXNoQXR0cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVt
ZW50ICpjb250ZXh0KTsKKyAgICAgICAgdmlydHVhbCBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBw
dXNoQXR0cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBjb250ZXh0KTsKIAog
ICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0xpbmVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdM
aW5lRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2ODg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
TGluZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5v
cmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjIs
MTggKzIyLDE2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQUE9SVAot
I2luY2x1ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJTVkdMaW5lRWxlbWVudC5oIgogCiAjaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgotCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdI
ZWxwZXIuaCIKLSNpbmNsdWRlICJTVkdMaW5lRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0xlbmd0
aC5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdMaW5lRWxlbWVudDo6U1ZHTGluZUVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKK1NWR0xpbmVFbGVtZW50
OjpTVkdMaW5lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jKQogICAgIDogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKQog
ICAgICwgU1ZHVGVzdHMoKQogICAgICwgU1ZHTGFuZ1NwYWNlKCkKQEAgLTU0LDcgKzUyLDcgQEAg
QU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHTGluZUVsZQogQU5JTUFURURfUFJPUEVS
VFlfREVGSU5JVElPTlMoU1ZHTGluZUVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3Ro
LCBYMiwgeDIsIFNWR05hbWVzOjp4MkF0dHIubG9jYWxOYW1lKCksIG1feDIuZ2V0KCkpCiBBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdMaW5lRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVu
Z3RoLCBsZW5ndGgsIFkyLCB5MiwgU1ZHTmFtZXM6OnkyQXR0ci5sb2NhbE5hbWUoKSwgbV95Mi5n
ZXQoKSkKIAotdm9pZCBTVkdMaW5lRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlICphdHRyKQordm9pZCBTVkdMaW5lRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Ongx
QXR0cikKQEAgLTY3LDkgKzY1LDkgQEAgdm9pZCBTVkdMaW5lRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dAogICAgICAgICB5MkJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsK
ICAgICBlbHNlCiAgICAgewotICAgICAgICBpZihTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cikpIHJldHVybjsKLSAgICAgICAgaWYoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwotICAgICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOworICAgICAgICBpZiAo
U1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CisgICAgICAgIGlm
IChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CisgICAg
ICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkgcmV0dXJuOwogICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAgICAgfQogfQpAQCAtODIsMTAgKzgwLDEwIEBA
IFBhdGggU1ZHTGluZUVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAogICAgIHJldHVybiBQYXRo
OjpjcmVhdGVMaW5lKEZsb2F0UG9pbnQoX3gxLCBfeTEpLCBGbG9hdFBvaW50KF94MiwgX3kyKSk7
CiB9CiAKLWNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKlNWR0xpbmVFbGVtZW50OjpwdXNoQXR0cmli
dXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQorY29uc3QgU1ZHU3R5
bGVkRWxlbWVudCogU1ZHTGluZUVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0IFNW
R1N0eWxlZEVsZW1lbnQqIGNvbnRleHQpCiB7CiAgICAgLy8gQWxsIGF0dHJpYnV0ZSdzIGNvbnRl
eHRzIGFyZSBlcXVhbCAoc28ganVzdCB0YWtlIHRoZSBvbmUgZnJvbSAneDEnKS4KLSAgICBjb25z
dCBTVkdTdHlsZWRFbGVtZW50ICpyZXN0b3JlID0geDEoKS0+Y29udGV4dCgpOworICAgIGNvbnN0
IFNWR1N0eWxlZEVsZW1lbnQqIHJlc3RvcmUgPSB4MSgpLT5jb250ZXh0KCk7CiAKICAgICB4MSgp
LT5zZXRDb250ZXh0KGNvbnRleHQpOwogICAgIHkxKCktPnNldENvbnRleHQoY29udGV4dCk7CkBA
IC0xMDcsNiArMTA1LDggQEAgYm9vbCBTVkdMaW5lRWxlbWVudDo6aGFzUGVyY2VudGFnZVZhbHVl
cwogICAgIHJldHVybiBmYWxzZTsKIH0KIAorfQorCiAvLyB2aW06dHM9NDpub2V0CiAjZW5kaWYg
Ly8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5oCShyZXZp
c2lvbiAxNjg4NykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAg
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIw
MDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxOCArMjQsMTggQEAKICNkZWZpbmUg
S1NWR19TVkdMaW5lRWxlbWVudEltcGxfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRl
ICJTVkdUZXN0cy5oIgorI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIK
ICNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIK
KyNpbmNsdWRlICJTVkdUZXN0cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewogICAgIGNsYXNz
IFNWR0xlbmd0aDsKICAgICBjbGFzcyBTVkdMaW5lRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xh
bmdTcGFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNW
R1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkCiAgICAgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHTGluZUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CkBAIC00NCwxMiArNDQsMTIgQEAgbmFtZXNwYWNl
IFdlYkNvcmUKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBT
VkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKICAgICAgICAgLy8gJ1NWR0xpbmVFbGVtZW50JyBmdW5j
dGlvbnMKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJl
cklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVu
ZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KKyAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNO
ZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJl
cklzTmVlZGVkKHN0eWxlKTsgfQogICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0YSgpIGNv
bnN0OwogCi0gICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqcHVzaEF0dHJp
YnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCk7CisgICAgICAgIHZp
cnR1YWwgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogcHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3Qg
U1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZp
cnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0
aGlzOyB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
Njg4NykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5p
a29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwg
MjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDE2ICsyNCwyMCBAQAogI2lmZGVmIFNWR19T
VVBQT1JUCiAjaW5jbHVkZSAiU1ZHUG9seUVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkF0dHIuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCiAKLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdQb2x5RWxlbWVudDo6U1ZHUG9s
eUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLTog
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVGVzdHMoKSwg
U1ZHTGFuZ1NwYWNlKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKSwgU1ZHQW5pbWF0
ZWRQb2ludHMoKSwgU1ZHUG9seVBhcnNlcigpCitTVkdQb2x5RWxlbWVudDo6U1ZHUG9seUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIFNWR1Rlc3Rz
KCkKKyAgICAsIFNWR0xhbmdTcGFjZSgpCisgICAgLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkKCkKKyAgICAsIFNWR0FuaW1hdGVkUG9pbnRzKCkKKyAgICAsIFNWR1BvbHlQYXJzZXIoKQog
ewogfQogCkBAIC00MSwyNiArNDUsMjYgQEAgU1ZHUG9seUVsZW1lbnQ6On5TVkdQb2x5RWxlbWVu
dCgpCiB7CiB9CiAKLVNWR1BvaW50TGlzdCAqU1ZHUG9seUVsZW1lbnQ6OnBvaW50cygpIGNvbnN0
CitTVkdQb2ludExpc3QqIFNWR1BvbHlFbGVtZW50Ojpwb2ludHMoKSBjb25zdAogewogICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdQb2ludExpc3Q+KG1fcG9pbnRzKTsKIH0KIAotU1ZHUG9pbnRM
aXN0ICpTVkdQb2x5RWxlbWVudDo6YW5pbWF0ZWRQb2ludHMoKSBjb25zdAorU1ZHUG9pbnRMaXN0
KiBTVkdQb2x5RWxlbWVudDo6YW5pbWF0ZWRQb2ludHMoKSBjb25zdAogewogICAgIHJldHVybiAw
OwogfQogCi12b2lkIFNWR1BvbHlFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR1BvbHlFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6cG9pbnRzQXR0cikgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAg
ICAgcG9pbnRzKCktPmNsZWFyKGVjKTsKICAgICAgICAgcGFyc2VQb2ludHMoYXR0ci0+dmFsdWUo
KS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmKFNWR1Rlc3Rz
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwotICAgICAgICBpZihTVkdMYW5n
U3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47Ci0gICAgICAgIGlmKFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSBy
ZXR1cm47CisgICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikp
IHJldHVybjsKKyAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cikpIHJldHVybjsKKyAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CiAgICAgICAgIFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKICAgICB9CiB9
CkBAIC05Miw3ICs5Niw3IEBAIHZvaWQgU1ZHUG9seUVsZW1lbnQ6Om5vdGlmeUF0dHJpYnV0ZUNo
YW4KICAgICB9CiAKICAgICBTdHJpbmcgcCgicG9pbnRzIik7Ci0gICAgUmVmUHRyPEF0dHI+IGF0
dHIgPSBjb25zdF9jYXN0PFNWR1BvbHlFbGVtZW50ICo+KHRoaXMpLT5nZXRBdHRyaWJ1dGVOb2Rl
KHAuaW1wbCgpKTsKKyAgICBSZWZQdHI8QXR0cj4gYXR0ciA9IGNvbnN0X2Nhc3Q8U1ZHUG9seUVs
ZW1lbnQqPih0aGlzKS0+Z2V0QXR0cmlidXRlTm9kZShwLmltcGwoKSk7CiAgICAgaWYgKGF0dHIp
IHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIGlnbm9yZU5vdGlmaWNh
dGlvbnMgPSB0cnVlOyAvLyBwcmV2ZW50IHJlY3Vyc2lvbi4KQEAgLTEwMSw2ICsxMDUsOCBAQCB2
b2lkIFNWR1BvbHlFbGVtZW50Ojpub3RpZnlBdHRyaWJ1dGVDaGFuCiAgICAgfQogfQogCit9CisK
IC8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCkluZGV4OiBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdQb2x5RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1BvbHlFbGVtZW50LmgJKHJldmlzaW9uIDE2ODg3KQorKysgV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHUG9seUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBr
ZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAg
LTI0LDIxICsyNCwyMSBAQAogI2RlZmluZSBLU1ZHX1NWR1BvbHlFbGVtZW50SW1wbF9ICiAjaWZk
ZWYgU1ZHX1NVUFBPUlQKIAotI2luY2x1ZGUgIlNWR1Rlc3RzLmgiCi0jaW5jbHVkZSAic3ZncGF0
aHBhcnNlci5oIgotI2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5oIgotI2luY2x1ZGUgIlNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQb2ludHMuaCIK
ICNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgiCisjaW5jbHVkZSAiU1ZH
TGFuZ1NwYWNlLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJTVkdUZXN0cy5oIgorI2luY2x1ZGUgInN2Z3BhdGhwYXJzZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUKIHsKICAgICBjbGFzcyBTVkdQb2x5RWxlbWVudCA6ICBwdWJsaWMgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1YmxpYyBTVkdUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR0xhbmdTcGFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlj
IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1YmxpYyBTVkdBbmltYXRlZFBvaW50cywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHVibGljIFNWR1BvbHlQYXJzZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgU1ZHVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNW
R0xhbmdTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
U1ZHQW5pbWF0ZWRQb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNW
R1BvbHlQYXJzZXIKICAgICB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdQb2x5RWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAgLTQ3LDEyICs0NywxMiBAQCBuYW1l
c3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAogICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdT
VkdBbmltYXRlZFBvaW50cycKLSAgICAgICAgdmlydHVhbCBTVkdQb2ludExpc3QgKnBvaW50cygp
IGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFNWR1BvaW50TGlzdCAqYW5pbWF0ZWRQb2ludHMoKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCBTVkdQb2ludExpc3QqIHBvaW50cygpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIFNWR1BvaW50TGlzdCogYW5pbWF0ZWRQb2ludHMoKSBjb25zdDsKIAotICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICph
dHRyKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSogYXR0cik7CiAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVk
KFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05l
ZWRlZChzdHlsZSk7IH0KKyAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVu
ZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVk
KHN0eWxlKTsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBdHRyaWJ1dGVDaGFuZ2Uo
KSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmNwcAko
cmV2aXNpb24gMTY4ODcpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAg
ICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAg
ICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yMiwxNSArMjIsMTQgQEAK
IAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5jbHVkZSAiU1ZH
UG9pbnRMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHUG9seWdvbkVsZW1lbnQuaCIKIAotI2luY2x1ZGUg
PGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KKyNpbmNsdWRlICJTVkdQb2ludExp
c3QuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVNWR1BvbHlnb25FbGVtZW50OjpTVkdQb2x5Z29uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQotOiBTVkdQb2x5RWxlbWVudCh0YWdOYW1lLCBkb2Mp
CitTVkdQb2x5Z29uRWxlbWVudDo6U1ZHUG9seWdvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IFNWR1BvbHlFbGVtZW50KHRhZ05hbWUs
IGRvYykKIHsKIH0KIApAQCAtNDIsNyArNDEsNyBAQCBQYXRoIFNWR1BvbHlnb25FbGVtZW50Ojp0
b1BhdGhEYXRhKCkgY29uCiB7CiAgICAgUGF0aCBwb2x5RGF0YTsKICAgICBpbnQgbGVuID0gcG9p
bnRzKCktPm51bWJlck9mSXRlbXMoKTsKLSAgICBpZihsZW4gPCAxKQorICAgIGlmIChsZW4gPCAx
KQogICAgICAgICByZXR1cm4gcG9seURhdGE7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CkBAIC01NCw2ICs1Myw4IEBAIFBhdGggU1ZHUG9seWdvbkVsZW1lbnQ6OnRvUGF0aERhdGEo
KSBjb24KICAgICByZXR1cm4gcG9seURhdGE7CiB9CiAKK30KKwogLy8gdmltOnRzPTQ6bm9ldAog
I2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BvbHln
b25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seWdvbkVs
ZW1lbnQuaAkocmV2aXNpb24gMTY4ODcpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQb2x5Z29u
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0g
ICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAg
ICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAK
ICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjgsNyArMjgs
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR1BvbHlnb25FbGVtZW50
IDogICAgcHVibGljIFNWR1BvbHlFbGVtZW50CisgICAgY2xhc3MgU1ZHUG9seWdvbkVsZW1lbnQg
OiBwdWJsaWMgU1ZHUG9seUVsZW1lbnQKICAgICB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdQ
b2x5Z29uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKSW5kZXg6IFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHUG9seWxpbmVFbGVtZW50LmNwcAkocmV2aXNpb24gMTY4ODcpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xh
cyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjIsMTUgKzIyLDE0IEBACiAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpZmRlZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgIlNWR1BvaW50TGlzdC5oIgogI2lu
Y2x1ZGUgIlNWR1BvbHlsaW5lRWxlbWVudC5oIgogCi0jaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2Uv
S1JlbmRlcmluZ0RldmljZS5oPgorI2luY2x1ZGUgIlNWR1BvaW50TGlzdC5oIgogCi11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHUG9seWxpbmVFbGVt
ZW50OjpTVkdQb2x5bGluZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQgKmRvYykKLTogU1ZHUG9seUVsZW1lbnQodGFnTmFtZSwgZG9jKQorU1ZHUG9seWxpbmVF
bGVtZW50OjpTVkdQb2x5bGluZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqIGRvYykKKyAgICA6IFNWR1BvbHlFbGVtZW50KHRhZ05hbWUsIGRvYykKIHsKIH0K
IApAQCAtNDIsNyArNDEsNyBAQCBQYXRoIFNWR1BvbHlsaW5lRWxlbWVudDo6dG9QYXRoRGF0YSgp
IGNvCiB7CiAgICAgUGF0aCBwb2x5RGF0YTsKICAgICBpbnQgbGVuID0gcG9pbnRzKCktPm51bWJl
ck9mSXRlbXMoKTsKLSAgICBpZihsZW4gPCAxKQorICAgIGlmIChsZW4gPCAxKQogICAgICAgICBy
ZXR1cm4gcG9seURhdGE7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTUzLDYgKzUy
LDggQEAgUGF0aCBTVkdQb2x5bGluZUVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjbwogICAgIHJldHVy
biBwb2x5RGF0YTsKIH0KIAorfQorCiAvLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NV
UFBPUlQKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seWxpbmVFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seWxpbmVFbGVtZW50LmgJKHJldmlz
aW9uIDE2ODg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seWxpbmVFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAg
ICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAg
IDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdSZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmVj
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjg4NykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1Jl
Y3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3Jn
PgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
ICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDEw
ICsyNCw2IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdSZWN0RWxlbWVudC5o
IgogCi0jaW5jbHVkZSAiQXR0ci5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKLSNp
bmNsdWRlICJLUmVuZGVyaW5nRmlsbFBhaW50ZXIuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJTb2xpZC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR0xl
bmd0aC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkBAIC01OSw3ICs1NSw3IEBAIEFOSU1BVEVE
X1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1JlY3RFbGUKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklO
SVRJT05TKFNWR1JlY3RFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgUngsIHJ4
LCBTVkdOYW1lczo6cnhBdHRyLmxvY2FsTmFtZSgpLCBtX3J4LmdldCgpKQogQU5JTUFURURfUFJP
UEVSVFlfREVGSU5JVElPTlMoU1ZHUmVjdEVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVu
Z3RoLCBSeSwgcnksIFNWR05hbWVzOjpyeUF0dHIubG9jYWxOYW1lKCksIG1fcnkuZ2V0KCkpCiAK
LXZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSAqYXR0cikKK3ZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0
ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikKQEAg
LTEwMCwxMCArOTYsMTAgQEAgUGF0aCBTVkdSZWN0RWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0
CiAgICAgcmV0dXJuIFBhdGg6OmNyZWF0ZVJlY3RhbmdsZShyZWN0KTsKIH0KIAotY29uc3QgU1ZH
U3R5bGVkRWxlbWVudCAqU1ZHUmVjdEVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0
IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpCitjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBTVkdS
ZWN0RWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCog
Y29udGV4dCkKIHsKICAgICAvLyBBbGwgYXR0cmlidXRlJ3MgY29udGV4dHMgYXJlIGVxdWFsIChz
byBqdXN0IHRha2UgdGhlIG9uZSBmcm9tICd4JykuCi0gICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVu
dCAqcmVzdG9yZSA9IHgoKS0+Y29udGV4dCgpOworICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQq
IHJlc3RvcmUgPSB4KCktPmNvbnRleHQoKTsKIAogICAgIHgoKS0+c2V0Q29udGV4dChjb250ZXh0
KTsKICAgICB5KCktPnNldENvbnRleHQoY29udGV4dCk7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdSZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1Jl
Y3RFbGVtZW50LmgJKHJldmlzaW9uIDE2ODg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmVj
dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgot
ICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
CiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDE4ICsy
NCwxOCBAQAogI2RlZmluZSBLU1ZHX1NWR1JlY3RFbGVtZW50SW1wbF9ICiAjaWZkZWYgU1ZHX1NV
UFBPUlQKIAotI2luY2x1ZGUgIlNWR1Rlc3RzLmgiCisjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZC5oIgogI2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5oIgogI2luY2x1ZGUgIlNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZC5oIgorI2luY2x1ZGUgIlNWR1Rlc3RzLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlCiB7CiAgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFNWR1JlY3RFbGVtZW50IDog
cHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHTGFuZ1NwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQKICAgICB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdS
ZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAgLTQ0LDEyICs0
NCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAogICAgICAgICAvLyAnU1ZH
UmVjdEVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cik7CiAKLSAgICAgICAgdmly
dHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBT
dHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQorICAgICAgICB2aXJ0dWFs
IGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIFN0eWxl
ZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9CiAgICAgICAgIHZpcnR1YWwgUGF0
aCB0b1BhdGhEYXRhKCkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBjb25zdCBTVkdTdHlsZWRF
bGVtZW50ICpwdXNoQXR0cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250
ZXh0KTsKKyAgICAgICAgdmlydHVhbCBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBwdXNoQXR0cmli
dXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBjb250ZXh0KTsKIAogICAgIHByb3Rl
Y3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0K
</data>
<flag name="review"
          id="3690"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10992</attachid>
            <date>2006-10-09 07:32:46 -0700</date>
            <delta_ts>2006-10-09 12:25:09 -0700</delta_ts>
            <desc>Cleaning up of anim* classes</desc>
            <filename>11217-anim.diff</filename>
            <type>text/plain</type>
            <size>15290</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNjkyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMDYtMTAtMDkgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIHN2ZyBhbmltYXRp
b24gY2xhc3Nlcy4KKworICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmhhbmRsZVRp
bWVyRXZlbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6U1ZHQW5pbWF0ZUVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OmhhbmRsZVRpbWVyRXZlbnQpOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6U1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjpoYW5kbGVUaW1lckV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZVRyYW5zZm9ybVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVSb3RhdGlvbkZy
b21NYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6
OmluaXRpYWxNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQ6OnRyYW5zZm9ybU1hdHJpeCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVkUGF0aERh
dGEuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRlZFBhdGhEYXRhLmg6CisgICAg
ICAgICoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVkUG9pbnRzLmNwcDoKKyAgICAgICAgKiBrc3ZnMi9z
dmcvU1ZHQW5pbWF0ZWRQb2ludHMuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQW5pbWF0aW9u
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojp0YXJn
ZXRFbGVtZW50KToKKwogMjAwNi0xMC0wOSAgTWl0eiBQZXR0ZWwgIDxtaXR6QHdlYmtpdC5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4uCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAkocmV2aXNpb24gMTY5MjUpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBTVkdBbmltYXRlQ29sb3JFbGVt
ZW50OjpoYW5kbGVUaW1lcgogICAgICAgICBtX2luaXRpYWxDb2xvciA9IHRlbXAtPmNvbG9yKCk7
CiAKICAgICAgICAgLy8gQW5pbWF0aW9uIG1vZGUgaGFuZGxpbmcKLSAgICAgICAgc3dpdGNoKGRl
dGVjdEFuaW1hdGlvbk1vZGUoKSkKKyAgICAgICAgc3dpdGNoIChkZXRlY3RBbmltYXRpb25Nb2Rl
KCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGNhc2UgVE9fQU5JTUFUSU9OOgogICAgICAgICAg
ICAgY2FzZSBGUk9NX1RPX0FOSU1BVElPTjoKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0Fu
aW1hdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmlt
YXRlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2OTI1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
QW5pbWF0ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtk
ZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAt
MjUsMTMgKzI1LDEyIEBACiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZUVsZW1lbnQuaCIKIAogI2luY2x1
ZGUgIktTVkdUaW1lU2NoZWR1bGVyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAK
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdBbmlt
YXRlRWxlbWVudDo6U1ZHQW5pbWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQgKmRvYykKK1NWR0FuaW1hdGVFbGVtZW50OjpTVkdBbmltYXRlRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHQW5p
bWF0aW9uRWxlbWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX2N1cnJlbnRJdGVtKC0xKQogewpA
QCAtNTAsNyArNDksNyBAQCB2b2lkIFNWR0FuaW1hdGVFbGVtZW50OjpoYW5kbGVUaW1lckV2ZW50
CiAgICAgICAgIG1fc2F2ZWRUbyA9IGF0dHIuZGVwcmVjYXRlZFN0cmluZygpOwogCiAgICAgICAg
IC8vIEFuaW1hdGlvbiBtb2RlIGhhbmRsaW5nCi0gICAgICAgIHN3aXRjaChkZXRlY3RBbmltYXRp
b25Nb2RlKCkpCisgICAgICAgIHN3aXRjaCAoZGV0ZWN0QW5pbWF0aW9uTW9kZSgpKQogICAgICAg
ICB7CiAvKiAgICAgICAgICAgIGNhc2UgVE9fQU5JTUFUSU9OOgogICAgICAgICAgICAgY2FzZSBG
Uk9NX1RPX0FOSU1BVElPTjoKQEAgLTIwNyw2ICsyMDYsOCBAQCB2b2lkIFNWR0FuaW1hdGVFbGVt
ZW50OjpoYW5kbGVUaW1lckV2ZW50CiAgICAgfQogfQogCit9CisKIC8vIHZpbTp0cz00Om5vZXQK
ICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjkyNSkKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29s
YXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwg
MjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAw
NSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIyLDI5ICsyMiwyMyBAQAogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJBdHRyLmgiCi0KLSNpbmNsdWRl
IDxrY2FudmFzL1JlbmRlclBhdGguaD4KKyNpbmNsdWRlICJTVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudC5oIgogCisjaW5jbHVkZSAiS1NWR1RpbWVTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJTVkdB
bmdsZS5oIgorI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNW
R01hdHJpeC5oIgotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgot
I2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudC5oIgotI2luY2x1ZGUgIktTVkdUaW1lU2NoZWR1bGVyLmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRl
ICJTVkdTVkdFbGVtZW50LmgiCi0KKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKKyNpbmNsdWRl
ICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogCiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50OjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OlNWR0FuaW1h
dGVUcmFuc2Zvcm1FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2MpCiAgICAgOiBTVkdBbmltYXRpb25FbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIG1f
Y3VycmVudEl0ZW0oLTEpCiAgICAgLCBtX3R5cGUoU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JN
X1VOS05PV04pCkBAIC01OCw3ICs1Miw3IEBAIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojp+
U1ZHQW5pbWF0ZVQKIHsKIH0KIAotdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBTVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBh
dHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKSB7CiAg
ICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwpAQCAtODQsMTIgKzc4
LDEyIEBAIHZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmhhbmRsZVQKICAgICAgICAg
CiAgICAgICAgIC8vIFNhdmUgaW5pdGlhbCB0cmFuc2Zvcm0uLi4gKG5lZWRlZCBmb3IgZmlsbD0i
cmVtb3ZlIiBvciBhZGRpdHZlPSJzdW0iKQogICAgICAgICBpZiAodGFyZ2V0RWxlbWVudCgpLT5p
c1N0eWxlZFRyYW5zZm9ybWFibGUoKSkgewotICAgICAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQgKnRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50ICo+KHRhcmdldEVsZW1lbnQoKSk7CisgICAgICAgICAgICBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQqPih0YXJnZXRFbGVtZW50KCkpOwogICAgICAgICAgICAgUmVmUHRyPFNW
R1RyYW5zZm9ybUxpc3Q+IHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRyYW5zZm9ybUJhc2VW
YWx1ZSgpOwogICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUxpc3QpIHsKICAgICAgICAgICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxv
bmcgaSA9IDA7IGkgPCB0cmFuc2Zvcm1MaXN0LT5udW1iZXJPZkl0ZW1zKCk7IGkrKykgewotICAg
ICAgICAgICAgICAgICAgICBTVkdUcmFuc2Zvcm0gKnZhbHVlID0gdHJhbnNmb3JtTGlzdC0+Z2V0
SXRlbShpLCBlYykuZ2V0KCk7OworICAgICAgICAgICAgICAgICAgICBTVkdUcmFuc2Zvcm0qIHZh
bHVlID0gdHJhbnNmb3JtTGlzdC0+Z2V0SXRlbShpLCBlYykuZ2V0KCk7OwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTEwMiw3ICs5Niw3IEBAIHZvaWQgU1ZHQW5pbWF0
ZVRyYW5zZm9ybUVsZW1lbnQ6OmhhbmRsZVQKICAgICAgICAgfQogICAgICAgICAgICAgICAgIAog
ICAgICAgICAvLyBBbmltYXRpb24gbW9kZSBoYW5kbGluZwotICAgICAgICBzd2l0Y2goZGV0ZWN0
QW5pbWF0aW9uTW9kZSgpKQorICAgICAgICBzd2l0Y2ggKGRldGVjdEFuaW1hdGlvbk1vZGUoKSkK
ICAgICAgICAgewogICAgICAgICAgICAgY2FzZSBUT19BTklNQVRJT046CiAgICAgICAgICAgICBj
YXNlIEZST01fVE9fQU5JTUFUSU9OOgpAQCAtMTQ2LDggKzE0MCw4IEBAIHZvaWQgU1ZHQW5pbWF0
ZVRyYW5zZm9ybUVsZW1lbnQ6OmhhbmRsZVQKICAgICAgICAgICAgICAgICBpZiAoIW1fZnJvbVRy
YW5zZm9ybSkKICAgICAgICAgICAgICAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gbmV3IFNWR1Ry
YW5zZm9ybSgpOwogCi0gICAgICAgICAgICAgICAgU1ZHTWF0cml4ICpieU1hdHJpeCA9IG1fdG9U
cmFuc2Zvcm0tPm1hdHJpeCgpOwotICAgICAgICAgICAgICAgIFNWR01hdHJpeCAqZnJvbU1hdHJp
eCA9IG1fZnJvbVRyYW5zZm9ybS0+bWF0cml4KCk7CisgICAgICAgICAgICAgICAgU1ZHTWF0cml4
KiBieU1hdHJpeCA9IG1fdG9UcmFuc2Zvcm0tPm1hdHJpeCgpOworICAgICAgICAgICAgICAgIFNW
R01hdHJpeCogZnJvbU1hdHJpeCA9IG1fZnJvbVRyYW5zZm9ybS0+bWF0cml4KCk7CiAKICAgICAg
ICAgICAgICAgICBieU1hdHJpeC0+bXVsdGlwbHkoZnJvbU1hdHJpeCk7CiAKQEAgLTIzMSw3ICsy
MjUsNyBAQCB2b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpoYW5kbGVUCiAgICAgICAg
ICAgICBtX3RyYW5zZm9ybU1hdHJpeC0+bXVsdGlwbHkobV9sYXN0TWF0cml4LmdldCgpKTsKICAg
ICB9CiAgICAgCi0gICAgc3dpdGNoKG1fdHlwZSkKKyAgICBzd2l0Y2ggKG1fdHlwZSkKICAgICB7
CiAgICAgICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURToKICAg
ICAgICAgewpAQCAtMzIyLDcgKzMxNiw3IEBAIHZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1l
bnQ6OmhhbmRsZVQKICAgICAgICAgbV9pbml0aWFsVHJhbnNmb3JtID0gMDsKIAogICAgICAgICBp
ZiAoIWlzRnJvemVuKCkpIHsKLSAgICAgICAgICAgIFNWR01hdHJpeCAqaW5pdGlhbCA9IGluaXRp
YWxNYXRyaXgoKTsKKyAgICAgICAgICAgIFNWR01hdHJpeCogaW5pdGlhbCA9IGluaXRpYWxNYXRy
aXgoKTsKICAgICAgICAgICAgIGlmIChpbml0aWFsKQogICAgICAgICAgICAgICAgIG1fdHJhbnNm
b3JtTWF0cml4ID0gaW5pdGlhbDsKICAgICAgICAgICAgIGVsc2UKQEAgLTM0MSw3ICszMzUsNyBA
QCBSZWZQdHI8U1ZHVHJhbnNmb3JtPiBTVkdBbmltYXRlVHJhbnNmb3JtCiAKICAgICBSZWZQdHI8
U1ZHVHJhbnNmb3JtPiBwYXJzZWRUcmFuc2Zvcm0gPSBuZXcgU1ZHVHJhbnNmb3JtKCk7CiAgICAg
Ci0gICAgc3dpdGNoKG1fdHlwZSkKKyAgICBzd2l0Y2ggKG1fdHlwZSkKICAgICB7CiAgICAgICAg
IGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURToKICAgICAgICAgewpA
QCAtNDIxLDcgKzQxNSw3IEBAIFJlZlB0cjxTVkdUcmFuc2Zvcm0+IFNWR0FuaW1hdGVUcmFuc2Zv
cm0KICAgICByZXR1cm4gcGFyc2VkVHJhbnNmb3JtOwogfQogCi12b2lkIFNWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVSb3RhdGlvbkZyb21NYXRyaXgoY29uc3QgQWZmaW5lVHJh
bnNmb3JtICZtYXRyaXgsIGRvdWJsZSAmYW5nbGUsIGRvdWJsZSAmY3gsIGRvdWJsZSAmY3kpIGNv
bnN0Cit2b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVSb3RhdGlvbkZy
b21NYXRyaXgoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgsIGRvdWJsZSYgYW5nbGUsIGRv
dWJsZSYgY3gsIGRvdWJsZSYgY3kpIGNvbnN0CiB7CiAgICAgZG91YmxlIGNvc2EgPSBtYXRyaXgu
bTExKCk7CiAgICAgZG91YmxlIHNpbmEgPSAtbWF0cml4Lm0yMSgpOwpAQCAtNDQ3LDEyICs0NDEs
MTIgQEAgdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y2FsY3VsYQogICAgIGFuZ2xl
ID0gMC4wOwogfQogCi1TVkdNYXRyaXggKlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojppbml0
aWFsTWF0cml4KCkgY29uc3QKK1NWR01hdHJpeCogU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6
OmluaXRpYWxNYXRyaXgoKSBjb25zdAogewogICAgIGlmICghdGFyZ2V0RWxlbWVudCgpLT5pc1N0
eWxlZFRyYW5zZm9ybWFibGUoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQgKnRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50ICo+KHRhcmdldEVsZW1lbnQoKSk7Ci0gICAgU1ZHVHJhbnNmb3JtTGlz
dCAqdHJhbnNmb3JtTGlzdCA9ICh0cmFuc2Zvcm0gPyB0cmFuc2Zvcm0tPnRyYW5zZm9ybUJhc2VW
YWx1ZSgpIDogMCk7CisgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIHRyYW5zZm9y
bSA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4odGFyZ2V0RWxl
bWVudCgpKTsKKyAgICBTVkdUcmFuc2Zvcm1MaXN0KiB0cmFuc2Zvcm1MaXN0ID0gKHRyYW5zZm9y
bSA/IHRyYW5zZm9ybS0+dHJhbnNmb3JtQmFzZVZhbHVlKCkgOiAwKTsKICAgICBpZiAoIXRyYW5z
Zm9ybUxpc3QpCiAgICAgICAgIHJldHVybiAwOwogICAgIApAQCAtNDYwLDEzICs0NTQsMTMgQEAg
U1ZHTWF0cml4ICpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6aQogICAgIGlmICghcmVzdWx0
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFNWR01hdHJpeCAqcmV0ID0gcmVzdWx0LT5tYXRy
aXgoKTsKKyAgICBTVkdNYXRyaXgqIHJldCA9IHJlc3VsdC0+bWF0cml4KCk7CiAgICAgcmV0LT5y
ZWYoKTsKIAogICAgIHJldHVybiByZXQ7CiB9CiAKLVNWR01hdHJpeCAqU1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQ6OnRyYW5zZm9ybU1hdHJpeCgpIGNvbnN0CitTVkdNYXRyaXgqIFNWR0FuaW1h
dGVUcmFuc2Zvcm1FbGVtZW50Ojp0cmFuc2Zvcm1NYXRyaXgoKSBjb25zdAogewogICAgIHJldHVy
biBtX3RyYW5zZm9ybU1hdHJpeC5nZXQoKTsKIH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAkocmV2aXNpb24gMTY5MjUpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xh
cyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgS0RFIHByb2plY3QKIApAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgLy8gSGVscGVycwogICAgICAgICBSZWZQdHI8U1ZHVHJhbnNmb3JtPiBwYXJz
ZVRyYW5zZm9ybVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgICAgICB2b2lkIGNhbGN1
bGF0ZVJvdGF0aW9uRnJvbU1hdHJpeChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBkb3VibGUgJmFu
Z2xlLCBkb3VibGUgJmN4LCBkb3VibGUgJmN5KSBjb25zdDsKKyAgICAgICAgdm9pZCBjYWxjdWxh
dGVSb3RhdGlvbkZyb21NYXRyaXgoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZG91YmxlJiBhbmds
ZSwgZG91YmxlJiBjeCwgZG91YmxlJiBjeSkgY29uc3Q7CiAKICAgICAgICAgU1ZHTWF0cml4KiBp
bml0aWFsTWF0cml4KCkgY29uc3Q7CiAgICAgICAgIFNWR01hdHJpeCogdHJhbnNmb3JtTWF0cml4
KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlZFBhdGhEYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlZFBhdGhEYXRhLmNw
cAkocmV2aXNpb24gMTY5MjUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlZFBhdGhE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAg
ICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDcgKzI0LDcg
QEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0FuaW1hdGVkUGF0aERhdGEuaCIK
IAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0Fu
aW1hdGVkUGF0aERhdGE6OlNWR0FuaW1hdGVkUGF0aERhdGEoKQogewpAQCAtMzQsNiArMzQsOCBA
QCBTVkdBbmltYXRlZFBhdGhEYXRhOjp+U1ZHQW5pbWF0ZWRQYXRoRGF0CiB7CiB9CiAKK30KKwog
Ly8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0FuaW1hdGVkUGF0aERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdBbmltYXRlZFBhdGhEYXRhLmgJKHJldmlzaW9uIDE2OTI1KQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZWRQYXRoRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJt
YW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RF
IHByb2plY3QKIApAQCAtMzQsMTAgKzM0LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAg
IHZpcnR1YWwgflNWR0FuaW1hdGVkUGF0aERhdGEoKTsKIAogICAgICAgICAvLyAnU1ZHQW5pbWF0
ZWRQYXRoRGF0YScgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ0xpc3QgKnBh
dGhTZWdMaXN0KCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdMaXN0ICpu
b3JtYWxpemVkUGF0aFNlZ0xpc3QoKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgU1ZHUGF0
aFNlZ0xpc3QgKmFuaW1hdGVkUGF0aFNlZ0xpc3QoKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1
YWwgU1ZHUGF0aFNlZ0xpc3QgKmFuaW1hdGVkTm9ybWFsaXplZFBhdGhTZWdMaXN0KCkgY29uc3Qg
PSAwOworICAgICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdMaXN0KiBwYXRoU2VnTGlzdCgpIGNvbnN0
ID0gMDsKKyAgICAgICAgdmlydHVhbCBTVkdQYXRoU2VnTGlzdCogbm9ybWFsaXplZFBhdGhTZWdM
aXN0KCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdMaXN0KiBhbmltYXRl
ZFBhdGhTZWdMaXN0KCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdMaXN0
KiBhbmltYXRlZE5vcm1hbGl6ZWRQYXRoU2VnTGlzdCgpIGNvbnN0ID0gMDsKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRl
ZFBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZWRQ
b2ludHMuY3BwCShyZXZpc2lvbiAxNjkyNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1h
dGVkUG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3Jn
PgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
ICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDcg
KzI0LDcgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0FuaW1hdGVkUG9pbnRz
LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIFdlYkNvcmUgewogCiBT
VkdBbmltYXRlZFBvaW50czo6U1ZHQW5pbWF0ZWRQb2ludHMoKQogewpAQCAtMzQsNiArMzQsOCBA
QCBTVkdBbmltYXRlZFBvaW50czo6flNWR0FuaW1hdGVkUG9pbnRzKCkKIHsKIH0KIAorfQorCiAv
LyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHQW5pbWF0ZWRQb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdBbmltYXRlZFBvaW50cy5oCShyZXZpc2lvbiAxNjkyNSkKKysrIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0FuaW1hdGVkUG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdp
bGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAogCkBAIC0zNCw4ICszNCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwg
flNWR0FuaW1hdGVkUG9pbnRzKCk7CiAKICAgICAgICAgLy8gJ1NWR0FuaW1hdGVkUG9pbnRzJyBm
dW5jdGlvbnMKLSAgICAgICAgdmlydHVhbCBTVkdQb2ludExpc3QgKnBvaW50cygpIGNvbnN0ID0g
MDsKLSAgICAgICAgdmlydHVhbCBTVkdQb2ludExpc3QgKmFuaW1hdGVkUG9pbnRzKCkgY29uc3Qg
PSAwOworICAgICAgICB2aXJ0dWFsIFNWR1BvaW50TGlzdCogcG9pbnRzKCkgY29uc3QgPSAwOwor
ICAgICAgICB2aXJ0dWFsIFNWR1BvaW50TGlzdCogYW5pbWF0ZWRQb2ludHMoKSBjb25zdCA9IDA7
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2OTI1KQorKysgV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1h
bm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdAogCkBAIC0yNCw3ICsyNCw2IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRl
ICJTVkdBbmltYXRpb25FbGVtZW50LmgiCiAKLSNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRE9N
SW1wbGVtZW50YXRpb24uaCIKQEAgLTgxLDcgKzgwLDcgQEAgU1ZHRWxlbWVudCAqU1ZHQW5pbWF0
aW9uRWxlbWVudDo6dGFyZ2V0RQogICAgICAgICAgICAgbV90YXJnZXRFbGVtZW50ID0gc3ZnX2R5
bmFtaWNfY2FzdChlbGVtZW50KTsKICAgICAgICAgfSBlbHNlIGlmIChwYXJlbnROb2RlKCkpIHsK
ICAgICAgICAgICAgIE5vZGUgKnRhcmdldCA9IHBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgIHdo
aWxlKHRhcmdldCAhPSAwKSB7CisgICAgICAgICAgICB3aGlsZSAodGFyZ2V0ICE9IDApIHsKICAg
ICAgICAgICAgICAgICBpZiAodGFyZ2V0LT5ub2RlVHlwZSgpICE9IEVMRU1FTlRfTk9ERSkKICAg
ICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LT5wYXJlbnROb2RlKCk7CiAgICAgICAg
ICAgICAgICAgZWxzZQo=
</data>
<flag name="review"
          id="3693"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10995</attachid>
            <date>2006-10-09 12:25:09 -0700</date>
            <delta_ts>2006-10-31 11:13:48 -0800</delta_ts>
            <desc>Improved patch</desc>
            <filename>11217-anim3.diff</filename>
            <type>text/plain</type>
            <size>19605</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNjkzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMDYtMTAtMDkgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIHN2ZyBhbmltYXRp
b24gY2xhc3Nlcy4KKworICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmhhbmRsZVRp
bWVyRXZlbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6U1ZHQW5pbWF0ZUVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OmhhbmRsZVRpbWVyRXZlbnQpOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6U1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjpoYW5kbGVUaW1lckV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZVRyYW5zZm9ybVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVSb3RhdGlvbkZy
b21NYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6
OmluaXRpYWxNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQ6OnRyYW5zZm9ybU1hdHJpeCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVkUGF0aERh
dGEuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRlZFBhdGhEYXRhLmg6CisgICAg
ICAgICoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVkUG9pbnRzLmNwcDoKKyAgICAgICAgKiBrc3ZnMi9z
dmcvU1ZHQW5pbWF0ZWRQb2ludHMuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQW5pbWF0aW9u
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojp0YXJn
ZXRFbGVtZW50KToKKwogMjAwNi0xMC0wOSAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRlbGUuCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAkocmV2aXNpb24gMTY5MzQpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAKQEAgLTIyLDE5ICsyMiwxNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaWZkZWYgU1ZHX1NVUFBPUlQKLQotI2luY2x1ZGUgIlNWR0NvbG9yLmgiCiAjaW5jbHVkZSAi
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJLU1ZHVGltZVNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIK
ICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OlNWR0FuaW1hdGVDb2xvckVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKK1NWR0Fu
aW1hdGVDb2xvckVsZW1lbnQ6OlNWR0FuaW1hdGVDb2xvckVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQo
dGFnTmFtZSwgZG9jKQogICAgICwgbV90b0NvbG9yKG5ldyBTVkdDb2xvcigpKQogICAgICwgbV9m
cm9tQ29sb3IobmV3IFNWR0NvbG9yKCkpCkBAIC02MCw3ICs1OCw3IEBAIHZvaWQgU1ZHQW5pbWF0
ZUNvbG9yRWxlbWVudDo6aGFuZGxlVGltZXIKICAgICAgICAgbV9pbml0aWFsQ29sb3IgPSB0ZW1w
LT5jb2xvcigpOwogCiAgICAgICAgIC8vIEFuaW1hdGlvbiBtb2RlIGhhbmRsaW5nCi0gICAgICAg
IHN3aXRjaChkZXRlY3RBbmltYXRpb25Nb2RlKCkpCisgICAgICAgIHN3aXRjaCAoZGV0ZWN0QW5p
bWF0aW9uTW9kZSgpKQogICAgICAgICB7CiAgICAgICAgICAgICBjYXNlIFRPX0FOSU1BVElPTjoK
ICAgICAgICAgICAgIGNhc2UgRlJPTV9UT19BTklNQVRJT046CkluZGV4OiBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCShyZXZpc2lvbiAxNjkzNCkKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAKQEAgLTI1LDggKzI1LDcgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogCiAj
aW5jbHVkZSAiU1ZHQW5pbWF0aW9uRWxlbWVudC5oIgotCi1jbGFzcyBTVkdDb2xvcjsKKyNpbmNs
dWRlICJTVkdjb2xvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2OTM0KQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJt
YW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RF
IHByb2plY3QKIApAQCAtMjUsMTMgKzI1LDEyIEBACiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZUVsZW1l
bnQuaCIKIAogI2luY2x1ZGUgIktTVkdUaW1lU2NoZWR1bGVyLmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTVkdT
VkdFbGVtZW50LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1TVkdBbmltYXRlRWxlbWVudDo6U1ZHQW5pbWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKK1NWR0FuaW1hdGVFbGVtZW50OjpTVkdB
bmltYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
KQogICAgIDogU1ZHQW5pbWF0aW9uRWxlbWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX2N1cnJl
bnRJdGVtKC0xKQogewpAQCAtNTAsNyArNDksNyBAQCB2b2lkIFNWR0FuaW1hdGVFbGVtZW50Ojpo
YW5kbGVUaW1lckV2ZW50CiAgICAgICAgIG1fc2F2ZWRUbyA9IGF0dHIuZGVwcmVjYXRlZFN0cmlu
ZygpOwogCiAgICAgICAgIC8vIEFuaW1hdGlvbiBtb2RlIGhhbmRsaW5nCi0gICAgICAgIHN3aXRj
aChkZXRlY3RBbmltYXRpb25Nb2RlKCkpCisgICAgICAgIHN3aXRjaCAoZGV0ZWN0QW5pbWF0aW9u
TW9kZSgpKQogICAgICAgICB7CiAvKiAgICAgICAgICAgIGNhc2UgVE9fQU5JTUFUSU9OOgogICAg
ICAgICAgICAgY2FzZSBGUk9NX1RPX0FOSU1BVElPTjoKQEAgLTIwNyw2ICsyMDYsOCBAQCB2b2lk
IFNWR0FuaW1hdGVFbGVtZW50OjpoYW5kbGVUaW1lckV2ZW50CiAgICAgfQogfQogCit9CisKIC8v
IHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
NjkzNCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAg
ICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIyLDI5ICsyMiwyMiBAQAog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJBdHRy
LmgiCi0KLSNpbmNsdWRlIDxrY2FudmFzL1JlbmRlclBhdGguaD4KKyNpbmNsdWRlICJTVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudC5oIgogCisjaW5jbHVkZSAiS1NWR1RpbWVTY2hlZHVsZXIuaCIK
ICNpbmNsdWRlICJTVkdBbmdsZS5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgotI2luY2x1ZGUg
IlNWR1RyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
LmgiCi0jaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgotI2luY2x1ZGUgIlNWR1RyYW5zZm9y
bUxpc3QuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oIgotI2luY2x1
ZGUgIktTVkdUaW1lU2NoZWR1bGVyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCi0K
KyNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0Lmgi
CiAjaW5jbHVkZSA8bWF0aC5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpTVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQor
U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdBbmlt
YXRpb25FbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIG1fY3VycmVudEl0ZW0oLTEpCiAgICAg
LCBtX3R5cGUoU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1VOS05PV04pCkBAIC01OCw3ICs1
MSw3IEBAIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojp+U1ZHQW5pbWF0ZVQKIHsKIH0KIAot
dm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKQordm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYg
dmFsdWUgPSBhdHRyLT52YWx1ZSgpOwpAQCAtODQsMTIgKzc3LDEyIEBAIHZvaWQgU1ZHQW5pbWF0
ZVRyYW5zZm9ybUVsZW1lbnQ6OmhhbmRsZVQKICAgICAgICAgCiAgICAgICAgIC8vIFNhdmUgaW5p
dGlhbCB0cmFuc2Zvcm0uLi4gKG5lZWRlZCBmb3IgZmlsbD0icmVtb3ZlIiBvciBhZGRpdHZlPSJz
dW0iKQogICAgICAgICBpZiAodGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUo
KSkgewotICAgICAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQgKnRyYW5zZm9y
bSA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50ICo+KHRhcmdldEVs
ZW1lbnQoKSk7CisgICAgICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogdHJh
bnNmb3JtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPih0YXJn
ZXRFbGVtZW50KCkpOwogICAgICAgICAgICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+IHRyYW5z
Zm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRyYW5zZm9ybUJhc2VWYWx1ZSgpOwogICAgICAgICAgICAg
aWYgKHRyYW5zZm9ybUxpc3QpIHsKICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCB0cmFuc2Zv
cm1MaXN0LT5udW1iZXJPZkl0ZW1zKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBTVkdU
cmFuc2Zvcm0gKnZhbHVlID0gdHJhbnNmb3JtTGlzdC0+Z2V0SXRlbShpLCBlYykuZ2V0KCk7Owor
ICAgICAgICAgICAgICAgICAgICBTVkdUcmFuc2Zvcm0qIHZhbHVlID0gdHJhbnNmb3JtTGlzdC0+
Z2V0SXRlbShpLCBlYykuZ2V0KCk7OwogICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAKQEAgLTEwMiw3ICs5NSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6Omhh
bmRsZVQKICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAvLyBBbmltYXRpb24g
bW9kZSBoYW5kbGluZwotICAgICAgICBzd2l0Y2goZGV0ZWN0QW5pbWF0aW9uTW9kZSgpKQorICAg
ICAgICBzd2l0Y2ggKGRldGVjdEFuaW1hdGlvbk1vZGUoKSkKICAgICAgICAgewogICAgICAgICAg
ICAgY2FzZSBUT19BTklNQVRJT046CiAgICAgICAgICAgICBjYXNlIEZST01fVE9fQU5JTUFUSU9O
OgpAQCAtMTQ2LDggKzEzOSw4IEBAIHZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6Omhh
bmRsZVQKICAgICAgICAgICAgICAgICBpZiAoIW1fZnJvbVRyYW5zZm9ybSkKICAgICAgICAgICAg
ICAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gbmV3IFNWR1RyYW5zZm9ybSgpOwogCi0gICAgICAg
ICAgICAgICAgU1ZHTWF0cml4ICpieU1hdHJpeCA9IG1fdG9UcmFuc2Zvcm0tPm1hdHJpeCgpOwot
ICAgICAgICAgICAgICAgIFNWR01hdHJpeCAqZnJvbU1hdHJpeCA9IG1fZnJvbVRyYW5zZm9ybS0+
bWF0cml4KCk7CisgICAgICAgICAgICAgICAgU1ZHTWF0cml4KiBieU1hdHJpeCA9IG1fdG9UcmFu
c2Zvcm0tPm1hdHJpeCgpOworICAgICAgICAgICAgICAgIFNWR01hdHJpeCogZnJvbU1hdHJpeCA9
IG1fZnJvbVRyYW5zZm9ybS0+bWF0cml4KCk7CiAKICAgICAgICAgICAgICAgICBieU1hdHJpeC0+
bXVsdGlwbHkoZnJvbU1hdHJpeCk7CiAKQEAgLTIzMSw3ICsyMjQsNyBAQCB2b2lkIFNWR0FuaW1h
dGVUcmFuc2Zvcm1FbGVtZW50OjpoYW5kbGVUCiAgICAgICAgICAgICBtX3RyYW5zZm9ybU1hdHJp
eC0+bXVsdGlwbHkobV9sYXN0TWF0cml4LmdldCgpKTsKICAgICB9CiAgICAgCi0gICAgc3dpdGNo
KG1fdHlwZSkKKyAgICBzd2l0Y2ggKG1fdHlwZSkKICAgICB7CiAgICAgICAgIGNhc2UgU1ZHVHJh
bnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURToKICAgICAgICAgewpAQCAtMzIyLDcgKzMx
NSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmhhbmRsZVQKICAgICAgICAg
bV9pbml0aWFsVHJhbnNmb3JtID0gMDsKIAogICAgICAgICBpZiAoIWlzRnJvemVuKCkpIHsKLSAg
ICAgICAgICAgIFNWR01hdHJpeCAqaW5pdGlhbCA9IGluaXRpYWxNYXRyaXgoKTsKKyAgICAgICAg
ICAgIFNWR01hdHJpeCogaW5pdGlhbCA9IGluaXRpYWxNYXRyaXgoKTsKICAgICAgICAgICAgIGlm
IChpbml0aWFsKQogICAgICAgICAgICAgICAgIG1fdHJhbnNmb3JtTWF0cml4ID0gaW5pdGlhbDsK
ICAgICAgICAgICAgIGVsc2UKQEAgLTM0MSw3ICszMzQsNyBAQCBSZWZQdHI8U1ZHVHJhbnNmb3Jt
PiBTVkdBbmltYXRlVHJhbnNmb3JtCiAKICAgICBSZWZQdHI8U1ZHVHJhbnNmb3JtPiBwYXJzZWRU
cmFuc2Zvcm0gPSBuZXcgU1ZHVHJhbnNmb3JtKCk7CiAgICAgCi0gICAgc3dpdGNoKG1fdHlwZSkK
KyAgICBzd2l0Y2ggKG1fdHlwZSkKICAgICB7CiAgICAgICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpT
VkdfVFJBTlNGT1JNX1RSQU5TTEFURToKICAgICAgICAgewpAQCAtNDIxLDcgKzQxNCw3IEBAIFJl
ZlB0cjxTVkdUcmFuc2Zvcm0+IFNWR0FuaW1hdGVUcmFuc2Zvcm0KICAgICByZXR1cm4gcGFyc2Vk
VHJhbnNmb3JtOwogfQogCi12b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxh
dGVSb3RhdGlvbkZyb21NYXRyaXgoY29uc3QgQWZmaW5lVHJhbnNmb3JtICZtYXRyaXgsIGRvdWJs
ZSAmYW5nbGUsIGRvdWJsZSAmY3gsIGRvdWJsZSAmY3kpIGNvbnN0Cit2b2lkIFNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVSb3RhdGlvbkZyb21NYXRyaXgoY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBtYXRyaXgsIGRvdWJsZSYgYW5nbGUsIGRvdWJsZSYgY3gsIGRvdWJsZSYgY3kp
IGNvbnN0CiB7CiAgICAgZG91YmxlIGNvc2EgPSBtYXRyaXgubTExKCk7CiAgICAgZG91YmxlIHNp
bmEgPSAtbWF0cml4Lm0yMSgpOwpAQCAtNDQ3LDEyICs0NDAsMTIgQEAgdm9pZCBTVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudDo6Y2FsY3VsYQogICAgIGFuZ2xlID0gMC4wOwogfQogCi1TVkdNYXRy
aXggKlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojppbml0aWFsTWF0cml4KCkgY29uc3QKK1NW
R01hdHJpeCogU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmluaXRpYWxNYXRyaXgoKSBjb25z
dAogewogICAgIGlmICghdGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQgKnRy
YW5zZm9ybSA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50ICo+KHRh
cmdldEVsZW1lbnQoKSk7Ci0gICAgU1ZHVHJhbnNmb3JtTGlzdCAqdHJhbnNmb3JtTGlzdCA9ICh0
cmFuc2Zvcm0gPyB0cmFuc2Zvcm0tPnRyYW5zZm9ybUJhc2VWYWx1ZSgpIDogMCk7CisgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4odGFyZ2V0RWxlbWVudCgpKTsKKyAgICBTVkdUcmFu
c2Zvcm1MaXN0KiB0cmFuc2Zvcm1MaXN0ID0gKHRyYW5zZm9ybSA/IHRyYW5zZm9ybS0+dHJhbnNm
b3JtQmFzZVZhbHVlKCkgOiAwKTsKICAgICBpZiAoIXRyYW5zZm9ybUxpc3QpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIApAQCAtNDYwLDEzICs0NTMsMTMgQEAgU1ZHTWF0cml4ICpTVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudDo6aQogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIFNWR01hdHJpeCAqcmV0ID0gcmVzdWx0LT5tYXRyaXgoKTsKKyAgICBTVkdNYXRyaXgq
IHJldCA9IHJlc3VsdC0+bWF0cml4KCk7CiAgICAgcmV0LT5yZWYoKTsKIAogICAgIHJldHVybiBy
ZXQ7CiB9CiAKLVNWR01hdHJpeCAqU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnRyYW5zZm9y
bU1hdHJpeCgpIGNvbnN0CitTVkdNYXRyaXgqIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojp0
cmFuc2Zvcm1NYXRyaXgoKSBjb25zdAogewogICAgIHJldHVybiBtX3RyYW5zZm9ybU1hdHJpeC5n
ZXQoKTsKIH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnQuaAkocmV2aXNpb24gMTY5MzQpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94
QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApA
QCAtMjQsOCArMjQsOCBAQAogI2RlZmluZSBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudF9ICiAj
aWZkZWYgU1ZHX1NVUFBPUlQKIAotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgogI2luY2x1ZGUg
IlNWR0FuaW1hdGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICAvLyBIZWxwZXJzCiAgICAgICAgIFJlZlB0cjxTVkdUcmFuc2Zvcm0+IHBhcnNl
VHJhbnNmb3JtVmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgY2FsY3Vs
YXRlUm90YXRpb25Gcm9tTWF0cml4KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGRvdWJsZSAmYW5n
bGUsIGRvdWJsZSAmY3gsIGRvdWJsZSAmY3kpIGNvbnN0OworICAgICAgICB2b2lkIGNhbGN1bGF0
ZVJvdGF0aW9uRnJvbU1hdHJpeChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBkb3VibGUmIGFuZ2xl
LCBkb3VibGUmIGN4LCBkb3VibGUmIGN5KSBjb25zdDsKIAogICAgICAgICBTVkdNYXRyaXgqIGlu
aXRpYWxNYXRyaXgoKSBjb25zdDsKICAgICAgICAgU1ZHTWF0cml4KiB0cmFuc2Zvcm1NYXRyaXgo
KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVkUGF0aERhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVkUGF0aERhdGEuY3Bw
CShyZXZpc2lvbiAxNjkzNCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVkUGF0aERh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAg
ICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAg
ICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjQsNyArMjQsNyBA
QAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQYXRoRGF0YS5oIgog
Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHQW5p
bWF0ZWRQYXRoRGF0YTo6U1ZHQW5pbWF0ZWRQYXRoRGF0YSgpCiB7CkBAIC0zNCw2ICszNCw4IEBA
IFNWR0FuaW1hdGVkUGF0aERhdGE6On5TVkdBbmltYXRlZFBhdGhEYXQKIHsKIH0KIAorfQorCiAv
LyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHQW5pbWF0ZWRQYXRoRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0FuaW1hdGVkUGF0aERhdGEuaAkocmV2aXNpb24gMTY5MzQpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdBbmltYXRlZFBhdGhEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1h
bm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdAogCkBAIC0zNCwxMCArMzQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAg
dmlydHVhbCB+U1ZHQW5pbWF0ZWRQYXRoRGF0YSgpOwogCiAgICAgICAgIC8vICdTVkdBbmltYXRl
ZFBhdGhEYXRhJyBmdW5jdGlvbnMKLSAgICAgICAgdmlydHVhbCBTVkdQYXRoU2VnTGlzdCAqcGF0
aFNlZ0xpc3QoKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ0xpc3QgKm5v
cm1hbGl6ZWRQYXRoU2VnTGlzdCgpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBTVkdQYXRo
U2VnTGlzdCAqYW5pbWF0ZWRQYXRoU2VnTGlzdCgpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVh
bCBTVkdQYXRoU2VnTGlzdCAqYW5pbWF0ZWROb3JtYWxpemVkUGF0aFNlZ0xpc3QoKSBjb25zdCA9
IDA7CisgICAgICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ0xpc3QqIHBhdGhTZWdMaXN0KCkgY29uc3Qg
PSAwOworICAgICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdMaXN0KiBub3JtYWxpemVkUGF0aFNlZ0xp
c3QoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ0xpc3QqIGFuaW1hdGVk
UGF0aFNlZ0xpc3QoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ0xpc3Qq
IGFuaW1hdGVkTm9ybWFsaXplZFBhdGhTZWdMaXN0KCkgY29uc3QgPSAwOwogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVk
UG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlZFBv
aW50cy5jcHAJKHJldmlzaW9uIDE2OTM0KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0
ZWRQb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+
Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Cisg
ICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjQsNyAr
MjQsNyBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQb2ludHMu
aCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNW
R0FuaW1hdGVkUG9pbnRzOjpTVkdBbmltYXRlZFBvaW50cygpCiB7CkBAIC0zNCw2ICszNCw4IEBA
IFNWR0FuaW1hdGVkUG9pbnRzOjp+U1ZHQW5pbWF0ZWRQb2ludHMoKQogewogfQogCit9CisKIC8v
IHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdBbmltYXRlZFBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0FuaW1hdGVkUG9pbnRzLmgJKHJldmlzaW9uIDE2OTM0KQorKysgV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHQW5pbWF0ZWRQb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2ls
ZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0
CiAKQEAgLTM0LDggKzM0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+
U1ZHQW5pbWF0ZWRQb2ludHMoKTsKIAogICAgICAgICAvLyAnU1ZHQW5pbWF0ZWRQb2ludHMnIGZ1
bmN0aW9ucwotICAgICAgICB2aXJ0dWFsIFNWR1BvaW50TGlzdCAqcG9pbnRzKCkgY29uc3QgPSAw
OwotICAgICAgICB2aXJ0dWFsIFNWR1BvaW50TGlzdCAqYW5pbWF0ZWRQb2ludHMoKSBjb25zdCA9
IDA7CisgICAgICAgIHZpcnR1YWwgU1ZHUG9pbnRMaXN0KiBwb2ludHMoKSBjb25zdCA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgU1ZHUG9pbnRMaXN0KiBhbmltYXRlZFBvaW50cygpIGNvbnN0ID0gMDsK
ICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMTY5MzQpCisrKyBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFu
biA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBw
cm9qZWN0CiAKQEAgLTI0LDE5ICsyNCwxNiBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVk
ZSAiU1ZHQW5pbWF0aW9uRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUg
IkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRP
TUltcGxlbWVudGF0aW9uLmgiCi0jaW5jbHVkZSAia3N2Z2Nzc3Byb3BlcnRpZXMuaCIKICNpbmNs
dWRlICJLU1ZHVGltZVNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0j
aW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgi
CiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQu
aCIKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgi
CisjaW5jbHVkZSAia3N2Z2Nzc3Byb3BlcnRpZXMuaCIKICNpbmNsdWRlIDxmbG9hdC5oPgogI2lu
Y2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03MywxNSArNzAsMTUg
QEAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6flNWR0FuaW1hdGlvbkVsZW1lbgogewogfQogCi1TVkdF
bGVtZW50ICpTVkdBbmltYXRpb25FbGVtZW50Ojp0YXJnZXRFbGVtZW50KCkgY29uc3QKK1NWR0Vs
ZW1lbnQqIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRhcmdldEVsZW1lbnQoKSBjb25zdAogewogICAg
IGlmICghbV90YXJnZXRFbGVtZW50KSB7CiAgICAgICAgIGlmICghbV9ocmVmLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgRWxlbWVudCAqZWxlbWVudCA9IG93bmVyRG9jdW1lbnQoKS0+Z2V0RWxl
bWVudEJ5SWQoU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQobV9ocmVmKSk7CisgICAgICAgICAg
ICBFbGVtZW50KiBlbGVtZW50ID0gb3duZXJEb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChTVkdV
UklSZWZlcmVuY2U6OmdldFRhcmdldChtX2hyZWYpKTsKICAgICAgICAgICAgIG1fdGFyZ2V0RWxl
bWVudCA9IHN2Z19keW5hbWljX2Nhc3QoZWxlbWVudCk7CiAgICAgICAgIH0gZWxzZSBpZiAocGFy
ZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBOb2RlICp0YXJnZXQgPSBwYXJlbnROb2RlKCk7Ci0g
ICAgICAgICAgICB3aGlsZSh0YXJnZXQgIT0gMCkgeworICAgICAgICAgICAgTm9kZSogdGFyZ2V0
ID0gcGFyZW50Tm9kZSgpOworICAgICAgICAgICAgd2hpbGUgKHRhcmdldCkgewogICAgICAgICAg
ICAgICAgIGlmICh0YXJnZXQtPm5vZGVUeXBlKCkgIT0gRUxFTUVOVF9OT0RFKQogICAgICAgICAg
ICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQtPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgICAg
ICBlbHNlCkBAIC0xMTQsNyArMTExLDcgQEAgZG91YmxlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omdl
dFNpbXBsZUR1cgogICAgIHJldHVybiBtX3NpbXBsZUR1cmF0aW9uOwogfQogCi12b2lkIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0
cikKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1
ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkubWF0Y2hlcyhYTGlua05hbWVzOjpocmVmQXR0cikp
CkBAIC00MDAsMTAgKzM5NywxMCBAQCBTdHJpbmcgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dGFyZ2V0
QXR0cmliCiAgICAgaWYgKCF0YXJnZXRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKICAgICAKLSAgICBTVkdFbGVtZW50ICp0YXJnZXQgPSB0YXJnZXRFbGVtZW50KCk7Ci0gICAg
U1ZHU3R5bGVkRWxlbWVudCAqc3R5bGVkID0gTlVMTDsKKyAgICBTVkdFbGVtZW50KiB0YXJnZXQg
PSB0YXJnZXRFbGVtZW50KCk7CisgICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkID0gTlVMTDsK
ICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC0+aXNTdHlsZWQoKSkKLSAgICAgICAgc3R5bGVkID0g
c3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCAqPih0YXJnZXQpOworICAgICAgICBzdHlsZWQg
PSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4odGFyZ2V0KTsKICAgICAKICAgICBTdHJp
bmcgcmV0OwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCShy
ZXZpc2lvbiAxNjkzNCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAg
ICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTc1LDggKzc1LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIH07CiAKICAgICBjbGFzcyBTVkdBbmltYXRpb25FbGVtZW50
IDogcHVibGljIFNWR0VsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgU1ZHVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkCiAgICAgewogICAgIHB1Ymxp
YzoKICAgICAgICAgU1ZHQW5pbWF0aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqKTsKQEAgLTkyLDcgKzkyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBk
b3VibGUgZ2V0Q3VycmVudFRpbWUoKSBjb25zdDsKICAgICAgICAgZG91YmxlIGdldFNpbXBsZUR1
cmF0aW9uKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpOwog
ICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopIHsgcmV0
dXJuIGZhbHNlOyB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlUmVuZGVyZXIoKTsK
</data>
<flag name="review"
          id="3696"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11010</attachid>
            <date>2006-10-10 01:11:04 -0700</date>
            <delta_ts>2006-10-31 11:13:04 -0800</delta_ts>
            <desc>New anim patch</desc>
            <filename>11217-anim4.diff</filename>
            <type>text/plain</type>
            <size>20045</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNjk2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMDYtMTAtMDkgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIHN2ZyBhbmltYXRp
b24gY2xhc3Nlcy4KKworICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmhhbmRsZVRp
bWVyRXZlbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6U1ZHQW5pbWF0ZUVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OmhhbmRsZVRpbWVyRXZlbnQpOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6U1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjpoYW5kbGVUaW1lckV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZVRyYW5zZm9ybVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVSb3RhdGlvbkZy
b21NYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6
OmluaXRpYWxNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQ6OnRyYW5zZm9ybU1hdHJpeCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVkUGF0aERh
dGEuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRlZFBhdGhEYXRhLmg6CisgICAg
ICAgICoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVkUG9pbnRzLmNwcDoKKyAgICAgICAgKiBrc3ZnMi9z
dmcvU1ZHQW5pbWF0ZWRQb2ludHMuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQW5pbWF0aW9u
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojp0YXJn
ZXRFbGVtZW50KToKKwogMjAwNi0xMC0wOSAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+
CiAKICAgICAgICAgQmFja2luZyBvdXQgYWNjaWRlbnRhbCBjb21taXQuCkluZGV4OiBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAkocmV2aXNpb24gMTY5NjEp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAw
NCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIyLDE5ICsyMiwxOCBAQAogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKLQotI2luY2x1ZGUgIlNWR0NvbG9yLmgi
CiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oIgorCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJLU1ZHVGltZVNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJTVkdEb2N1bWVudEV4
dGVuc2lvbnMuaCIKKyNpbmNsdWRlICJTVkdDb2xvci5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1l
bnQuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHQW5p
bWF0ZUNvbG9yRWxlbWVudDo6U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6U1ZH
QW5pbWF0ZUNvbG9yRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jKQogICAgIDogU1ZHQW5pbWF0aW9uRWxlbWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCBt
X3RvQ29sb3IobmV3IFNWR0NvbG9yKCkpCiAgICAgLCBtX2Zyb21Db2xvcihuZXcgU1ZHQ29sb3Io
KSkKQEAgLTYwLDggKzU5LDcgQEAgdm9pZCBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpoYW5kbGVU
aW1lcgogICAgICAgICBtX2luaXRpYWxDb2xvciA9IHRlbXAtPmNvbG9yKCk7CiAKICAgICAgICAg
Ly8gQW5pbWF0aW9uIG1vZGUgaGFuZGxpbmcKLSAgICAgICAgc3dpdGNoKGRldGVjdEFuaW1hdGlv
bk1vZGUoKSkKLSAgICAgICAgeworICAgICAgICBzd2l0Y2ggKGRldGVjdEFuaW1hdGlvbk1vZGUo
KSkgewogICAgICAgICAgICAgY2FzZSBUT19BTklNQVRJT046CiAgICAgICAgICAgICBjYXNlIEZS
T01fVE9fQU5JTUFUSU9OOgogICAgICAgICAgICAgewpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaAkocmV2aXNpb24gMTY5NjEpCisrKyBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1h
bm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdAogCkBAIC0yNSwxMSArMjUsMTIgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogCiAjaW5j
bHVkZSAiU1ZHQW5pbWF0aW9uRWxlbWVudC5oIgotCi1jbGFzcyBTVkdDb2xvcjsKKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAgIGNsYXNzIFNWR0Nv
bG9yOworCiAgICAgY2xhc3MgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudCA6IHB1YmxpYyBTVkdBbmlt
YXRpb25FbGVtZW50IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNWR0FuaW1hdGVDb2xvckVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CkluZGV4OiBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjk2MSkKKysrIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8
d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9q
ZWN0CiAKQEAgLTI1LDEzICsyNSwxMiBAQAogI2luY2x1ZGUgIlNWR0FuaW1hdGVFbGVtZW50Lmgi
CiAKICNpbmNsdWRlICJLU1ZHVGltZVNjaGVkdWxlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxl
bWVudC5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsK
IAotU1ZHQW5pbWF0ZUVsZW1lbnQ6OlNWR0FuaW1hdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCitTVkdBbmltYXRlRWxlbWVudDo6U1ZHQW5pbWF0
ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAg
ICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jKQogICAgICwgbV9jdXJyZW50SXRl
bSgtMSkKIHsKQEAgLTUwLDggKzQ5LDcgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6aGFuZGxl
VGltZXJFdmVudAogICAgICAgICBtX3NhdmVkVG8gPSBhdHRyLmRlcHJlY2F0ZWRTdHJpbmcoKTsK
IAogICAgICAgICAvLyBBbmltYXRpb24gbW9kZSBoYW5kbGluZwotICAgICAgICBzd2l0Y2goZGV0
ZWN0QW5pbWF0aW9uTW9kZSgpKQotICAgICAgICB7CisgICAgICAgIHN3aXRjaCAoZGV0ZWN0QW5p
bWF0aW9uTW9kZSgpKSB7CiAvKiAgICAgICAgICAgIGNhc2UgVE9fQU5JTUFUSU9OOgogICAgICAg
ICAgICAgY2FzZSBGUk9NX1RPX0FOSU1BVElPTjoKICAgICAgICAgICAgIHsKQEAgLTIwNyw2ICsy
MDUsOCBAQCB2b2lkIFNWR0FuaW1hdGVFbGVtZW50OjpoYW5kbGVUaW1lckV2ZW50CiAgICAgfQog
fQogCit9CisKIC8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxNjk2MSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3Jn
PgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
ICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIyLDI5
ICsyMiwyMiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKLSNp
bmNsdWRlICJBdHRyLmgiCi0KLSNpbmNsdWRlIDxrY2FudmFzL1JlbmRlclBhdGguaD4KKyNpbmNs
dWRlICJTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oIgogCisjaW5jbHVkZSAiS1NWR1RpbWVT
Y2hlZHVsZXIuaCIKICNpbmNsdWRlICJTVkdBbmdsZS5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5o
IgotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgotI2luY2x1ZGUg
IlNWR1RyYW5zZm9ybUxpc3QuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dC5oIgotI2luY2x1ZGUgIktTVkdUaW1lU2NoZWR1bGVyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTVkdTVkdF
bGVtZW50LmgiCi0KKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJTVkdUcmFu
c2Zvcm1MaXN0LmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpTVkdB
bmltYXRlVHJhbnNmb3JtRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCAqZG9jKQorU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OlNWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAg
ICAgOiBTVkdBbmltYXRpb25FbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIG1fY3VycmVudEl0
ZW0oLTEpCiAgICAgLCBtX3R5cGUoU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1VOS05PV04p
CkBAIC01OCw3ICs1MSw3IEBAIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojp+U1ZHQW5pbWF0
ZVQKIHsKIH0KIAotdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBTVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewog
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKSB7CiAgICAgICAgIGNv
bnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwpAQCAtODQsMTIgKzc3LDEyIEBAIHZv
aWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmhhbmRsZVQKICAgICAgICAgCiAgICAgICAg
IC8vIFNhdmUgaW5pdGlhbCB0cmFuc2Zvcm0uLi4gKG5lZWRlZCBmb3IgZmlsbD0icmVtb3ZlIiBv
ciBhZGRpdHZlPSJzdW0iKQogICAgICAgICBpZiAodGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRy
YW5zZm9ybWFibGUoKSkgewotICAgICAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQgKnRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
ICo+KHRhcmdldEVsZW1lbnQoKSk7CisgICAgICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudCogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQqPih0YXJnZXRFbGVtZW50KCkpOwogICAgICAgICAgICAgUmVmUHRyPFNWR1RyYW5zZm9y
bUxpc3Q+IHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRyYW5zZm9ybUJhc2VWYWx1ZSgpOwog
ICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUxpc3QpIHsKICAgICAgICAgICAgICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7
IGkgPCB0cmFuc2Zvcm1MaXN0LT5udW1iZXJPZkl0ZW1zKCk7IGkrKykgewotICAgICAgICAgICAg
ICAgICAgICBTVkdUcmFuc2Zvcm0gKnZhbHVlID0gdHJhbnNmb3JtTGlzdC0+Z2V0SXRlbShpLCBl
YykuZ2V0KCk7OworICAgICAgICAgICAgICAgICAgICBTVkdUcmFuc2Zvcm0qIHZhbHVlID0gdHJh
bnNmb3JtTGlzdC0+Z2V0SXRlbShpLCBlYykuZ2V0KCk7OwogICAgICAgICAgICAgICAgICAgICBp
ZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAKQEAgLTEwMiw4ICs5NSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnQ6OmhhbmRsZVQKICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAv
LyBBbmltYXRpb24gbW9kZSBoYW5kbGluZwotICAgICAgICBzd2l0Y2goZGV0ZWN0QW5pbWF0aW9u
TW9kZSgpKQotICAgICAgICB7CisgICAgICAgIHN3aXRjaCAoZGV0ZWN0QW5pbWF0aW9uTW9kZSgp
KSB7CiAgICAgICAgICAgICBjYXNlIFRPX0FOSU1BVElPTjoKICAgICAgICAgICAgIGNhc2UgRlJP
TV9UT19BTklNQVRJT046CiAgICAgICAgICAgICB7ICAgICAgICAKQEAgLTE0Niw4ICsxMzgsOCBA
QCB2b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpoYW5kbGVUCiAgICAgICAgICAgICAg
ICAgaWYgKCFtX2Zyb21UcmFuc2Zvcm0pCiAgICAgICAgICAgICAgICAgICAgIG1fZnJvbVRyYW5z
Zm9ybSA9IG5ldyBTVkdUcmFuc2Zvcm0oKTsKIAotICAgICAgICAgICAgICAgIFNWR01hdHJpeCAq
YnlNYXRyaXggPSBtX3RvVHJhbnNmb3JtLT5tYXRyaXgoKTsKLSAgICAgICAgICAgICAgICBTVkdN
YXRyaXggKmZyb21NYXRyaXggPSBtX2Zyb21UcmFuc2Zvcm0tPm1hdHJpeCgpOworICAgICAgICAg
ICAgICAgIFNWR01hdHJpeCogYnlNYXRyaXggPSBtX3RvVHJhbnNmb3JtLT5tYXRyaXgoKTsKKyAg
ICAgICAgICAgICAgICBTVkdNYXRyaXgqIGZyb21NYXRyaXggPSBtX2Zyb21UcmFuc2Zvcm0tPm1h
dHJpeCgpOwogCiAgICAgICAgICAgICAgICAgYnlNYXRyaXgtPm11bHRpcGx5KGZyb21NYXRyaXgp
OwogCkBAIC0yMzEsOCArMjIzLDcgQEAgdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6
aGFuZGxlVAogICAgICAgICAgICAgbV90cmFuc2Zvcm1NYXRyaXgtPm11bHRpcGx5KG1fbGFzdE1h
dHJpeC5nZXQoKSk7CiAgICAgfQogICAgIAotICAgIHN3aXRjaChtX3R5cGUpCi0gICAgeworICAg
IHN3aXRjaCAobV90eXBlKSB7CiAgICAgICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNG
T1JNX1RSQU5TTEFURToKICAgICAgICAgewogICAgICAgICAgICAgZG91YmxlIGR4ID0gKChxVG9N
YXRyaXguZHgoKSAtIHFGcm9tTWF0cml4LmR4KCkpICogdXNlVGltZVBlcmNlbnRhZ2UpICsgcUZy
b21NYXRyaXguZHgoKTsKQEAgLTMyMiw3ICszMTMsNyBAQCB2b2lkIFNWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50OjpoYW5kbGVUCiAgICAgICAgIG1faW5pdGlhbFRyYW5zZm9ybSA9IDA7CiAKICAg
ICAgICAgaWYgKCFpc0Zyb3plbigpKSB7Ci0gICAgICAgICAgICBTVkdNYXRyaXggKmluaXRpYWwg
PSBpbml0aWFsTWF0cml4KCk7CisgICAgICAgICAgICBTVkdNYXRyaXgqIGluaXRpYWwgPSBpbml0
aWFsTWF0cml4KCk7CiAgICAgICAgICAgICBpZiAoaW5pdGlhbCkKICAgICAgICAgICAgICAgICBt
X3RyYW5zZm9ybU1hdHJpeCA9IGluaXRpYWw7CiAgICAgICAgICAgICBlbHNlCkBAIC0zNDEsOCAr
MzMyLDcgQEAgUmVmUHRyPFNWR1RyYW5zZm9ybT4gU1ZHQW5pbWF0ZVRyYW5zZm9ybQogCiAgICAg
UmVmUHRyPFNWR1RyYW5zZm9ybT4gcGFyc2VkVHJhbnNmb3JtID0gbmV3IFNWR1RyYW5zZm9ybSgp
OwogICAgIAotICAgIHN3aXRjaChtX3R5cGUpCi0gICAgeworICAgIHN3aXRjaCAobV90eXBlKSB7
CiAgICAgICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURToKICAg
ICAgICAgewogICAgICAgICAgICAgZG91YmxlIHR4ID0gMC4wLCB0eSA9IDAuMDsKQEAgLTQyMSw3
ICs0MTEsNyBAQCBSZWZQdHI8U1ZHVHJhbnNmb3JtPiBTVkdBbmltYXRlVHJhbnNmb3JtCiAgICAg
cmV0dXJuIHBhcnNlZFRyYW5zZm9ybTsKIH0KIAotdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudDo6Y2FsY3VsYXRlUm90YXRpb25Gcm9tTWF0cml4KGNvbnN0IEFmZmluZVRyYW5zZm9ybSAm
bWF0cml4LCBkb3VibGUgJmFuZ2xlLCBkb3VibGUgJmN4LCBkb3VibGUgJmN5KSBjb25zdAordm9p
ZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y2FsY3VsYXRlUm90YXRpb25Gcm9tTWF0cml4
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4LCBkb3VibGUmIGFuZ2xlLCBkb3VibGUmIGN4
LCBkb3VibGUmIGN5KSBjb25zdAogewogICAgIGRvdWJsZSBjb3NhID0gbWF0cml4Lm0xMSgpOwog
ICAgIGRvdWJsZSBzaW5hID0gLW1hdHJpeC5tMjEoKTsKQEAgLTQ0NywxMiArNDM3LDEyIEBAIHZv
aWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmNhbGN1bGEKICAgICBhbmdsZSA9IDAuMDsK
IH0KIAotU1ZHTWF0cml4ICpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6aW5pdGlhbE1hdHJp
eCgpIGNvbnN0CitTVkdNYXRyaXgqIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojppbml0aWFs
TWF0cml4KCkgY29uc3QKIHsKICAgICBpZiAoIXRhcmdldEVsZW1lbnQoKS0+aXNTdHlsZWRUcmFu
c2Zvcm1hYmxlKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50ICp0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudCAqPih0YXJnZXRFbGVtZW50KCkpOwotICAgIFNWR1RyYW5zZm9ybUxpc3QgKnRyYW5z
Zm9ybUxpc3QgPSAodHJhbnNmb3JtID8gdHJhbnNmb3JtLT50cmFuc2Zvcm1CYXNlVmFsdWUoKSA6
IDApOworICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiB0cmFuc2Zvcm0gPSBzdGF0
aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KHRhcmdldEVsZW1lbnQoKSk7
CisgICAgU1ZHVHJhbnNmb3JtTGlzdCogdHJhbnNmb3JtTGlzdCA9ICh0cmFuc2Zvcm0gPyB0cmFu
c2Zvcm0tPnRyYW5zZm9ybUJhc2VWYWx1ZSgpIDogMCk7CiAgICAgaWYgKCF0cmFuc2Zvcm1MaXN0
KQogICAgICAgICByZXR1cm4gMDsKICAgICAKQEAgLTQ2MCwxMyArNDUwLDEzIEBAIFNWR01hdHJp
eCAqU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmkKICAgICBpZiAoIXJlc3VsdCkKICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICBTVkdNYXRyaXggKnJldCA9IHJlc3VsdC0+bWF0cml4KCk7Cisg
ICAgU1ZHTWF0cml4KiByZXQgPSByZXN1bHQtPm1hdHJpeCgpOwogICAgIHJldC0+cmVmKCk7CiAK
ICAgICByZXR1cm4gcmV0OwogfQogCi1TVkdNYXRyaXggKlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50Ojp0cmFuc2Zvcm1NYXRyaXgoKSBjb25zdAorU1ZHTWF0cml4KiBTVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudDo6dHJhbnNmb3JtTWF0cml4KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV90cmFu
c2Zvcm1NYXRyaXguZ2V0KCk7CiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgJKHJldmlzaW9uIDE2OTYxKQorKysgV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVy
bWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0CiAKQEAgLTI0LDggKzI0LDggQEAKICNkZWZpbmUgU1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnRfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRlICJTVkdUcmFuc2Zvcm0u
aCIKICNpbmNsdWRlICJTVkdBbmltYXRpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHVHJhbnNm
b3JtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gSGVscGVycwogICAgICAgICBSZWZQdHI8U1ZHVHJh
bnNmb3JtPiBwYXJzZVRyYW5zZm9ybVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgICAg
ICB2b2lkIGNhbGN1bGF0ZVJvdGF0aW9uRnJvbU1hdHJpeChjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
LCBkb3VibGUgJmFuZ2xlLCBkb3VibGUgJmN4LCBkb3VibGUgJmN5KSBjb25zdDsKKyAgICAgICAg
dm9pZCBjYWxjdWxhdGVSb3RhdGlvbkZyb21NYXRyaXgoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
ZG91YmxlJiBhbmdsZSwgZG91YmxlJiBjeCwgZG91YmxlJiBjeSkgY29uc3Q7CiAKICAgICAgICAg
U1ZHTWF0cml4KiBpbml0aWFsTWF0cml4KCkgY29uc3Q7CiAgICAgICAgIFNWR01hdHJpeCogdHJh
bnNmb3JtTWF0cml4KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRl
ZFBhdGhEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRl
ZFBhdGhEYXRhLmNwcAkocmV2aXNpb24gMTY5NjEpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdB
bmltYXRlZFBhdGhEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBr
ZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAg
LTI0LDcgKzI0LDcgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0FuaW1hdGVk
UGF0aERhdGEuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFNWR0FuaW1hdGVkUGF0aERhdGE6OlNWR0FuaW1hdGVkUGF0aERhdGEoKQogewpAQCAt
MzQsNiArMzQsOCBAQCBTVkdBbmltYXRlZFBhdGhEYXRhOjp+U1ZHQW5pbWF0ZWRQYXRoRGF0CiB7
CiB9CiAKK30KKwogLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKSW5k
ZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVkUGF0aERhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlZFBhdGhEYXRhLmgJKHJldmlzaW9uIDE2OTYx
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZWRQYXRoRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlr
b2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAy
MDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMzQsMTAgKzM0LDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlCiAgICAgICAgIHZpcnR1YWwgflNWR0FuaW1hdGVkUGF0aERhdGEoKTsKIAogICAgICAgICAv
LyAnU1ZHQW5pbWF0ZWRQYXRoRGF0YScgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgU1ZHUGF0
aFNlZ0xpc3QgKnBhdGhTZWdMaXN0KCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIFNWR1Bh
dGhTZWdMaXN0ICpub3JtYWxpemVkUGF0aFNlZ0xpc3QoKSBjb25zdCA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgU1ZHUGF0aFNlZ0xpc3QgKmFuaW1hdGVkUGF0aFNlZ0xpc3QoKSBjb25zdCA9IDA7Ci0g
ICAgICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ0xpc3QgKmFuaW1hdGVkTm9ybWFsaXplZFBhdGhTZWdM
aXN0KCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdMaXN0KiBwYXRoU2Vn
TGlzdCgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBTVkdQYXRoU2VnTGlzdCogbm9ybWFs
aXplZFBhdGhTZWdMaXN0KCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdM
aXN0KiBhbmltYXRlZFBhdGhTZWdMaXN0KCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFNW
R1BhdGhTZWdMaXN0KiBhbmltYXRlZE5vcm1hbGl6ZWRQYXRoU2VnTGlzdCgpIGNvbnN0ID0gMDsK
ICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdBbmltYXRlZFBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHQW5pbWF0ZWRQb2ludHMuY3BwCShyZXZpc2lvbiAxNjk2MSkKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0FuaW1hdGVkUG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2ls
ZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0
CiAKQEAgLTI0LDcgKzI0LDcgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkUG9pbnRzLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBTVkdBbmltYXRlZFBvaW50czo6U1ZHQW5pbWF0ZWRQb2ludHMoKQogewpAQCAt
MzQsNiArMzQsOCBAQCBTVkdBbmltYXRlZFBvaW50czo6flNWR0FuaW1hdGVkUG9pbnRzKCkKIHsK
IH0KIAorfQorCiAvLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZWRQb2ludHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlZFBvaW50cy5oCShyZXZpc2lvbiAxNjk2MSkKKysr
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVkUG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFpp
bW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIw
MDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBLREUgcHJvamVjdAogCkBAIC0zNCw4ICszNCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAg
ICAgIHZpcnR1YWwgflNWR0FuaW1hdGVkUG9pbnRzKCk7CiAKICAgICAgICAgLy8gJ1NWR0FuaW1h
dGVkUG9pbnRzJyBmdW5jdGlvbnMKLSAgICAgICAgdmlydHVhbCBTVkdQb2ludExpc3QgKnBvaW50
cygpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBTVkdQb2ludExpc3QgKmFuaW1hdGVkUG9p
bnRzKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFNWR1BvaW50TGlzdCogcG9pbnRzKCkg
Y29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFNWR1BvaW50TGlzdCogYW5pbWF0ZWRQb2ludHMo
KSBjb25zdCA9IDA7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2OTYxKQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtv
bGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIw
MDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxOSArMjQsMTYgQEAKICNpZmRlZiBTVkdfU1VQ
UE9SVAogI2luY2x1ZGUgIlNWR0FuaW1hdGlvbkVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkF0dHIu
aCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgImtzdmdjc3Nwcm9wZXJ0
aWVzLmgiCiAjaW5jbHVkZSAiS1NWR1RpbWVTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgotI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUg
IlNWR0hlbHBlci5oIgotI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJT
VkdTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUg
IlNWR1VSSVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKKyNpbmNsdWRlICJr
c3ZnY3NzcHJvcGVydGllcy5oIgogI2luY2x1ZGUgPGZsb2F0Lmg+CiAjaW5jbHVkZSA8bWF0aC5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTczLDE1ICs3MCwxNSBAQCBTVkdBbmltYXRp
b25FbGVtZW50Ojp+U1ZHQW5pbWF0aW9uRWxlbWVuCiB7CiB9CiAKLVNWR0VsZW1lbnQgKlNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnRhcmdldEVsZW1lbnQoKSBjb25zdAorU1ZHRWxlbWVudCogU1ZHQW5p
bWF0aW9uRWxlbWVudDo6dGFyZ2V0RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3Rhcmdl
dEVsZW1lbnQpIHsKICAgICAgICAgaWYgKCFtX2hyZWYuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBFbGVtZW50ICplbGVtZW50ID0gb3duZXJEb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChTVkdV
UklSZWZlcmVuY2U6OmdldFRhcmdldChtX2hyZWYpKTsKKyAgICAgICAgICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBvd25lckRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKFNWR1VSSVJlZmVyZW5jZTo6
Z2V0VGFyZ2V0KG1faHJlZikpOwogICAgICAgICAgICAgbV90YXJnZXRFbGVtZW50ID0gc3ZnX2R5
bmFtaWNfY2FzdChlbGVtZW50KTsKICAgICAgICAgfSBlbHNlIGlmIChwYXJlbnROb2RlKCkpIHsK
LSAgICAgICAgICAgIE5vZGUgKnRhcmdldCA9IHBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgIHdo
aWxlKHRhcmdldCAhPSAwKSB7CisgICAgICAgICAgICBOb2RlKiB0YXJnZXQgPSBwYXJlbnROb2Rl
KCk7CisgICAgICAgICAgICB3aGlsZSAodGFyZ2V0KSB7CiAgICAgICAgICAgICAgICAgaWYgKHRh
cmdldC0+bm9kZVR5cGUoKSAhPSBFTEVNRU5UX05PREUpCiAgICAgICAgICAgICAgICAgICAgIHRh
cmdldCA9IHRhcmdldC0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTEx
NCw3ICsxMTEsNyBAQCBkb3VibGUgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Z2V0U2ltcGxlRHVyCiAg
ICAgcmV0dXJuIG1fc2ltcGxlRHVyYXRpb247CiB9CiAKLXZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBTVkdB
bmltYXRpb25FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0
dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYg
KGF0dHItPm5hbWUoKS5tYXRjaGVzKFhMaW5rTmFtZXM6OmhyZWZBdHRyKSkKQEAgLTQwMCwxMCAr
Mzk3LDEwIEBAIFN0cmluZyBTVkdBbmltYXRpb25FbGVtZW50Ojp0YXJnZXRBdHRyaWIKICAgICBp
ZiAoIXRhcmdldEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIAotICAg
IFNWR0VsZW1lbnQgKnRhcmdldCA9IHRhcmdldEVsZW1lbnQoKTsKLSAgICBTVkdTdHlsZWRFbGVt
ZW50ICpzdHlsZWQgPSBOVUxMOworICAgIFNWR0VsZW1lbnQqIHRhcmdldCA9IHRhcmdldEVsZW1l
bnQoKTsKKyAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHlsZWQgPSAwOwogICAgIGlmICh0YXJnZXQg
JiYgdGFyZ2V0LT5pc1N0eWxlZCgpKQotICAgICAgICBzdHlsZWQgPSBzdGF0aWNfY2FzdDxTVkdT
dHlsZWRFbGVtZW50ICo+KHRhcmdldCk7CisgICAgICAgIHN0eWxlZCA9IHN0YXRpY19jYXN0PFNW
R1N0eWxlZEVsZW1lbnQqPih0YXJnZXQpOwogICAgIAogICAgIFN0cmluZyByZXQ7CiAKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHJldmlzaW9uIDE2OTYxKQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xh
cyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgS0RFIHByb2plY3QKIApAQCAtNzUsOCArNzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgfTsKIAogICAgIGNsYXNzIFNWR0FuaW1hdGlvbkVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxl
bWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBTVkdUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQKICAgICB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdB
bmltYXRpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpAQCAtOTIs
NyArOTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGRvdWJsZSBnZXRDdXJyZW50
VGltZSgpIGNvbnN0OwogICAgICAgICBkb3VibGUgZ2V0U2ltcGxlRHVyYXRpb24oRXhjZXB0aW9u
Q29kZSYpIGNvbnN0OwogICAgIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cik7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKikgeyByZXR1cm4gZmFsc2U7IH0KIAog
ICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VSZW5kZXJlcigpOwo=
</data>
<flag name="review"
          id="3711"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11023</attachid>
            <date>2006-10-10 13:52:32 -0700</date>
            <delta_ts>2006-10-11 12:51:53 -0700</delta_ts>
            <desc>Cleanup for svg text code</desc>
            <filename>11217-text.diff</filename>
            <type>text/plain</type>
            <size>21668</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNjk3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMDYtMTAtMTAgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIHN2ZyB0ZXh0IGNs
YXNzZXMuCisKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OlNWR1RSZWZFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RSZWZFbGVtZW50Ojp1cGRhdGVSZWZlcmVuY2VkVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdUUmVmRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZF
bGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVFNwYW5F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RTcGFuRWxlbWVudDo6U1ZHVFNwYW5F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RTcGFuRWxlbWVudDo6Y2hpbGRTaG91bGRD
cmVhdGVSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUU3BhbkVsZW1lbnQ6OmNyZWF0
ZVJlbmRlcmVyKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVFNwYW5FbGVtZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUU3BhbkVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpTVkdUZXh0Q29udGVudEVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5oOgorICAgICAgICAq
IGtzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0
RWxlbWVudDo6U1ZHVGV4dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1l
bnQ6OmxvY2FsTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxlbWVudDo6dXBk
YXRlTG9jYWxUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6Om5l
YXJlc3RWaWV3cG9ydEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6
OmZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVt
ZW50OjpnZXRTY3JlZW5DVE0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6Omdl
dENUTSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVu
ZGVyZXIpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6OmdldFRyYW5zZm9ybVRvRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUZXh0RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1l
bnQuaDoKKwogMjAwNi0xMC0xMCAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE1pdHouCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdU
UmVmRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFJlZkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNjk3MSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RSZWZF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgot
ICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
CiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIyLDE3ICsy
MiwxOSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNs
dWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiU1ZHVFJlZkVsZW1lbnQuaCIKKworI2luY2x1ZGUgIlJl
bmRlcklubGluZS5oIgorI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKKyNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgotI2luY2x1
ZGUgIlNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAKLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdUUmVmRWxlbWVudDo6
U1ZHVFJlZkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRv
YykKLTogU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCh0YWdOYW1lLCBkb2MpLCBTVkdVUklSZWZl
cmVuY2UoKQorU1ZHVFJlZkVsZW1lbnQ6OlNWR1RSZWZFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBTVkdUZXh0UG9zaXRpb25pbmdFbGVt
ZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIFNWR1VSSVJlZmVyZW5jZSgpCiB7CiB9CiAKQEAgLTQz
LDggKzQ1LDggQEAgU1ZHVFJlZkVsZW1lbnQ6On5TVkdUUmVmRWxlbWVudCgpCiB2b2lkIFNWR1RS
ZWZFbGVtZW50Ojp1cGRhdGVSZWZlcmVuY2VkVGV4dCgpCiB7CiAgICAgU3RyaW5nIHRhcmdldElk
ID0gU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQoaHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7
Ci0gICAgRWxlbWVudCAqdGFyZ2V0RWxlbWVudCA9IG93bmVyRG9jdW1lbnQoKS0+Z2V0RWxlbWVu
dEJ5SWQodGFyZ2V0SWQuaW1wbCgpKTsKLSAgICBTVkdFbGVtZW50ICp0YXJnZXQgPSBzdmdfZHlu
YW1pY19jYXN0KHRhcmdldEVsZW1lbnQpOworICAgIEVsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBv
d25lckRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKHRhcmdldElkLmltcGwoKSk7CisgICAgU1ZH
RWxlbWVudCogdGFyZ2V0ID0gc3ZnX2R5bmFtaWNfY2FzdCh0YXJnZXRFbGVtZW50KTsKICAgICBp
ZiAodGFyZ2V0KSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgaWdub3JlID0gMDsKICAgICAgICAg
c2V0VGV4dENvbnRlbnQodGFyZ2V0LT50ZXh0Q29udGVudCgpLCBpZ25vcmUpOwpAQCAtNTksNyAr
NjEsNyBAQCB2b2lkIFNWR1RSZWZFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0CiAgICAgU1ZH
VGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBwcmVzZXJ2ZURl
Y2xzKTsKIH0KIAotdm9pZCBTVkdUUmVmRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKQordm9pZCBTVkdUUmVmRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChTVkdVUklSZWZlcmVuY2U6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSB7CiAgICAgICAgIHVwZGF0ZVJlZmVyZW5jZWRU
ZXh0KCk7CkBAIC02OSw3ICs3MSw3IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXQKICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKIH0KIAotYm9vbCBTVkdUUmVmRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVS
ZW5kZXJlcihOb2RlICpjaGlsZCkgY29uc3QKK2Jvb2wgU1ZHVFJlZkVsZW1lbnQ6OmNoaWxkU2hv
dWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSogY2hpbGQpIGNvbnN0CiB7CiAgICAgaWYgKGNoaWxkLT5p
c1RleHROb2RlKCkgfHwgY2hpbGQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRzcGFuVGFnKSB8fAog
ICAgICAgICBjaGlsZC0+aGFzVGFnTmFtZShTVkdOYW1lczo6dHJlZlRhZykpCkBAIC03NywxMSAr
NzksMTMgQEAgYm9vbCBTVkdUUmVmRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotUmVuZGVyT2JqZWN0ICpTVkdUUmVmRWxlbWVudDo6Y3JlYXRlUmVu
ZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqKQorUmVuZGVyT2JqZWN0KiBT
VkdUUmVmRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJT
dHlsZSopCiB7CiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlcklubGluZSh0aGlzKTsKIH0K
IAorfQorCiAvLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDog
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5oCShyZXZpc2lvbiAxNjk3MSkKKysrIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdp
bGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAogCkBAIC0yNCw4ICsyNCw4IEBACiAjZGVmaW5lIEtTVkdfU1ZHVFJlZkVsZW1lbnRJbXBsX0gK
ICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5j
bHVkZSAiU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1VSSVJlZmVy
ZW5jZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewpAQCAtMzYsMTEgKzM2LDExIEBAIG5hbWVz
cGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1RSZWZFbGVtZW50KCk7CiAKICAgICAg
ICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHBy
ZXNlcnZlRGVjbHMpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cik7CiAKLSAgICAgICAgdmlydHVhbCBib29s
IHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVt
ZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQotICAgICAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5
bGUpOwotICAgICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSAqY2hpbGQp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHls
ZSogc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUp
OyB9CisgICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJB
cmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSk7CisgICAgICAgIGJvb2wgY2hpbGRTaG91
bGRDcmVhdGVSZW5kZXJlcihOb2RlKiBjaGlsZCkgY29uc3Q7CiAKICAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiB0aGlzOyB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RTcGFuRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE2OTcxKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFNwYW5FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAg
ICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIzLDEyICsyMywxMyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHVFNw
YW5FbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKwogI2luY2x1ZGUgIlJlbmRlcklu
bGluZS5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdUU3BhbkVsZW1lbnQ6OlNWR1RTcGFuRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHVFNwYW5F
bGVtZW50OjpTVkdUU3BhbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvYykKIDogU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCh0YWdOYW1lLCBkb2MpCiB7
CiB9CkBAIC0zNyw3ICszOCw3IEBAIFNWR1RTcGFuRWxlbWVudDo6flNWR1RTcGFuRWxlbWVudCgp
CiB7CiB9CiAKLWJvb2wgU1ZHVFNwYW5FbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVy
KE5vZGUgKmNoaWxkKSBjb25zdAorYm9vbCBTVkdUU3BhbkVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3Jl
YXRlUmVuZGVyZXIoTm9kZSogY2hpbGQpIGNvbnN0CiB7CiAgICAgaWYgKGNoaWxkLT5pc1RleHRO
b2RlKCkgfHwgY2hpbGQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRzcGFuVGFnKSB8fAogICAgICAg
ICBjaGlsZC0+aGFzVGFnTmFtZShTVkdOYW1lczo6dHJlZlRhZykpCkBAIC00NSwxMSArNDYsMTMg
QEAgYm9vbCBTVkdUU3BhbkVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotUmVuZGVyT2JqZWN0ICpTVkdUU3BhbkVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKikKK1JlbmRlck9iamVjdCogU1ZHVFNw
YW5FbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxl
KikKIHsKICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVySW5saW5lKHRoaXMpOwogfQogCit9
CisKIC8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCkluZGV4OiBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQuaAkocmV2aXNpb24gMTY5NzEpCisrKyBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2ls
ZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0
CiAKQEAgLTM0LDkgKzM0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgU1ZHVFNwYW5F
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgICAgICB2aXJ0dWFs
IH5TVkdUU3BhbkVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgdmlydHVhbCBi
b29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBTdHlsZWRF
bGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQotICAgICAgICB2aXJ0dWFsIFJlbmRl
ck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAq
c3R5bGUpOwotICAgICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSAqY2hp
bGQpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJT
dHlsZSogc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5
bGUpOyB9CisgICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSk7CisgICAgICAgIGJvb2wgY2hpbGRT
aG91bGRDcmVhdGVSZW5kZXJlcihOb2RlKiBjaGlsZCkgY29uc3Q7CiAgICAgCiAgICAgcHJvdGVj
dGVkOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gdGhpczsgfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dENv
bnRlbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0
Q29udGVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjk3MSkKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdp
bGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAogCkBAIC0yMiwxOCArMjIsMTcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNW
R19TVVBQT1JUCi0jaW5jbHVkZSAiQXR0ci5oIgotCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNp
bmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdUZXh0Q29udGVudEVsZW1lbnQuaCIK
LSNpbmNsdWRlICJTVkdMZW5ndGguaCIKKwogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJTVkdIZWxwZXIuaCIKKyNpbmNsdWRlICJTVkdM
ZW5ndGguaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpTVkdUZXh0
Q29udGVudEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRv
YykKK1NWR1RleHRDb250ZW50RWxlbWVudDo6U1ZHVGV4dENvbnRlbnRFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdTdHlsZWRFbGVt
ZW50KHRhZ05hbWUsIGRvYykKICAgICAsIFNWR1Rlc3RzKCkKICAgICAsIFNWR0xhbmdTcGFjZSgp
CkBAIC05NCw3ICs5Myw3IEBAIHZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzZWxlY3RTdWJT
dHIKIHsKIH0KIAotdm9pZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgLy9pZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpsZW5ndGhBZGp1c3RBdHRyKQogICAgIC8vICAgIHhC
YXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CkBAIC0xMTEsNiArMTEwLDggQEAg
dm9pZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQQogICAgIH0KIH0KIAorfQor
CiAvLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgJKHJldmlzaW9uIDE2OTcxKQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFz
IFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUs
IDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxOCArMjQsMTggQEAKICNkZWZpbmUgS1NWR19TVkdU
ZXh0Q29udGVudEVsZW1lbnRJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCisjaW5jbHVkZSAi
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIgorI2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5o
IgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdUZXN0cy5oIgot
I2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5oIgotI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNWR0xlbmd0aDsK
IAogICAgIGNsYXNzIFNWR1RleHRDb250ZW50RWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRFbGVt
ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVz
dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdMYW5n
U3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVibGljIFNWR1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
YmxpYyBTVkdMYW5nU3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQKICAgICB7CiAgICAgcHVibGljOgogICAg
ICAgICBlbnVtIFNWR0xlbmd0aEFkanVzdFR5cGUgewpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHVGV4dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1Rl
eHRFbGVtZW50LmNwcAkocmV2aXNpb24gMTY5NzEpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdU
ZXh0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9y
Zz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
KyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwx
OCArMjQsMTcgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR1RleHRFbGVtZW50
LmgiCiAKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdUZXh0Lmgi
CiAjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3Qu
aCIKICNpbmNsdWRlICJTVkdNYXRyaXguaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlNWR1RTcGFuRWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0j
aW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdUZXh0
RWxlbWVudDo6U1ZHVGV4dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQgKmRvYykKK1NWR1RleHRFbGVtZW50OjpTVkdUZXh0RWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHVGV4dFBvc2l0aW9uaW5n
RWxlbWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCBTVkdUcmFuc2Zvcm1hYmxlKCkKICAgICAsIG1f
dHJhbnNmb3JtKG5ldyBTVkdUcmFuc2Zvcm1MaXN0KQpAQCAtNDgsMTUgKzQ3LDE1IEBAIFNWR1Rl
eHRFbGVtZW50Ojp+U1ZHVGV4dEVsZW1lbnQoKQogCiBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdUZXh0RWxlbWVudCwgU1ZHVHJhbnNmb3JtTGlzdCosIFRyYW5zZm9ybUxpc3QsIHRy
YW5zZm9ybUxpc3QsIFRyYW5zZm9ybSwgdHJhbnNmb3JtLCBTVkdOYW1lczo6dHJhbnNmb3JtQXR0
ci5sb2NhbE5hbWUoKSwgbV90cmFuc2Zvcm0uZ2V0KCkpCiAKLVNWR01hdHJpeCAqU1ZHVGV4dEVs
ZW1lbnQ6OmxvY2FsTWF0cml4KCkgY29uc3QKK1NWR01hdHJpeCogU1ZHVGV4dEVsZW1lbnQ6Omxv
Y2FsTWF0cml4KCkgY29uc3QKIHsKICAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHTWF0cml4Piht
X2xvY2FsTWF0cml4KTsKIH0KIAotdm9pZCBTVkdUZXh0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBTVkdUZXh0RWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIpIHsKLSAgICAgICAgU1ZHVHJhbnNmb3Jt
TGlzdCAqbG9jYWxUcmFuc2Zvcm1zID0gdHJhbnNmb3JtQmFzZVZhbHVlKCk7CisgICAgICAgIFNW
R1RyYW5zZm9ybUxpc3QqIGxvY2FsVHJhbnNmb3JtcyA9IHRyYW5zZm9ybUJhc2VWYWx1ZSgpOwog
CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICBsb2NhbFRyYW5zZm9ybXMt
PmNsZWFyKGVjKTsKQEAgLTY3LDExICs2NiwxMSBAQCB2b2lkIFNWR1RleHRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0CiAgICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi12b2lkIFNWR1RleHRFbGVtZW50Ojp1cGRhdGVM
b2NhbFRyYW5zZm9ybShTVkdUcmFuc2Zvcm1MaXN0ICpsb2NhbFRyYW5zZm9ybXMpCit2b2lkIFNW
R1RleHRFbGVtZW50Ojp1cGRhdGVMb2NhbFRyYW5zZm9ybShTVkdUcmFuc2Zvcm1MaXN0KiBsb2Nh
bFRyYW5zZm9ybXMpCiB7CiAgICAgLy8gVXBkYXRlIGNhY2hlZCBsb2NhbCBtYXRyaXgKICAgICBS
ZWZQdHI8U1ZHVHJhbnNmb3JtPiBsb2NhbFRyYW5zZm9ybSA9IGxvY2FsVHJhbnNmb3Jtcy0+Y29u
Y2F0ZW5hdGUoKTsKLSAgICBpZihsb2NhbFRyYW5zZm9ybSkgeworICAgIGlmIChsb2NhbFRyYW5z
Zm9ybSkgewogICAgICAgICBtX2xvY2FsTWF0cml4ID0gbG9jYWxUcmFuc2Zvcm0tPm1hdHJpeCgp
OwogICAgICAgICBpZiAocmVuZGVyZXIoKSkgewogICAgICAgICAgICAgcmVuZGVyZXIoKS0+c2V0
TG9jYWxUcmFuc2Zvcm0obV9sb2NhbE1hdHJpeC0+bWF0cml4KCkpOwpAQCAtODgsMTIgKzg3LDEy
IEBAIHZvaWQgU1ZHVGV4dEVsZW1lbnQ6OmF0dGFjaCgpCiAgICAgICAgIHJlbmRlcmVyKCktPnNl
dExvY2FsVHJhbnNmb3JtKG1fbG9jYWxNYXRyaXgtPm1hdHJpeCgpKTsKIH0KIAotU1ZHRWxlbWVu
dCAqU1ZHVGV4dEVsZW1lbnQ6Om5lYXJlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdAorU1ZHRWxl
bWVudCogU1ZHVGV4dEVsZW1lbnQ6Om5lYXJlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdAogewog
ICAgIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjpuZWFyZXN0Vmlld3BvcnRFbGVtZW50KHRoaXMp
OwogfQogCi1TVkdFbGVtZW50ICpTVkdUZXh0RWxlbWVudDo6ZmFydGhlc3RWaWV3cG9ydEVsZW1l
bnQoKSBjb25zdAorU1ZHRWxlbWVudCogU1ZHVGV4dEVsZW1lbnQ6OmZhcnRoZXN0Vmlld3BvcnRF
bGVtZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6ZmFydGhlc3RW
aWV3cG9ydEVsZW1lbnQodGhpcyk7CiB9CkBAIC0xMDMsMjIgKzEwMiwyMiBAQCBGbG9hdFJlY3Qg
U1ZHVGV4dEVsZW1lbnQ6OmdldEJCb3goKSBjb25zCiAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybWFi
bGU6OmdldEJCb3godGhpcyk7CiB9CiAKLVNWR01hdHJpeCAqU1ZHVGV4dEVsZW1lbnQ6OmdldFNj
cmVlbkNUTSgpIGNvbnN0CitTVkdNYXRyaXgqIFNWR1RleHRFbGVtZW50OjpnZXRTY3JlZW5DVE0o
KSBjb25zdAogewogICAgIHJldHVybiBTVkdMb2NhdGFibGU6OmdldFNjcmVlbkNUTSh0aGlzKTsK
IH0KIAotU1ZHTWF0cml4ICpTVkdUZXh0RWxlbWVudDo6Z2V0Q1RNKCkgY29uc3QKK1NWR01hdHJp
eCogU1ZHVGV4dEVsZW1lbnQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFNWR0xvY2F0
YWJsZTo6Z2V0U2NyZWVuQ1RNKHRoaXMpOwogfQogCi1SZW5kZXJPYmplY3QgKlNWR1RleHRFbGVt
ZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHls
ZSkKK1JlbmRlck9iamVjdCogU1ZHVGV4dEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFy
ZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIHJldHVybiBuZXcgKGFyZW5h
KSBSZW5kZXJTVkdUZXh0KHRoaXMpOwogfQogCi1ib29sIFNWR1RleHRFbGVtZW50OjpjaGlsZFNo
b3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUgKmNoaWxkKSBjb25zdAorYm9vbCBTVkdUZXh0RWxlbWVu
dDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlKiBjaGlsZCkgY29uc3QKIHsKICAgICBp
ZiAoY2hpbGQtPmlzVGV4dE5vZGUoKSB8fCBjaGlsZC0+aGFzVGFnTmFtZShTVkdOYW1lczo6dHNw
YW5UYWcpIHx8CiAgICAgICAgIGNoaWxkLT5oYXNUYWdOYW1lKFNWR05hbWVzOjp0cmVmVGFnKSkK
SW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnQuaAkocmV2aXNpb24gMTY5NzEpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJt
YW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RF
IHByb2plY3QKIApAQCAtMzAsMzAgKzMwLDMwIEBACiBuYW1lc3BhY2UgV2ViQ29yZQogewogICAg
IGNsYXNzIFNWR1RleHRFbGVtZW50IDogcHVibGljIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1RyYW5zZm9ybWFibGUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUcmFuc2Zvcm1hYmxlCiAgICAg
ewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHVGV4dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CiAgICAgICAgIHZpcnR1YWwgflNWR1RleHRFbGVtZW50KCk7CiAKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAq
YXR0cik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUqIGF0dHIpOwogCiAgICAgICAgICAvLyAnU1ZHVGV4dEVsZW1lbnQnIGZ1bmN0aW9u
cwotICAgICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQgKm5lYXJlc3RWaWV3cG9ydEVsZW1lbnQoKSBj
b25zdDsKLSAgICAgICAgdmlydHVhbCBTVkdFbGVtZW50ICpmYXJ0aGVzdFZpZXdwb3J0RWxlbWVu
dCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIG5lYXJlc3RWaWV3cG9ydEVs
ZW1lbnQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTVkdFbGVtZW50KiBmYXJ0aGVzdFZpZXdw
b3J0RWxlbWVudCgpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3go
KSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBTVkdNYXRyaXggKmdldENUTSgpIGNvbnN0OwotICAg
ICAgICB2aXJ0dWFsIFNWR01hdHJpeCAqZ2V0U2NyZWVuQ1RNKCkgY29uc3Q7Ci0gICAgICAgIHZp
cnR1YWwgU1ZHTWF0cml4ICpnZXRUcmFuc2Zvcm1Ub0VsZW1lbnQoU1ZHRWxlbWVudCosIEV4Y2Vw
dGlvbkNvZGUmKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHJl
bmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50
OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQotICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVj
dCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUp
OwotICAgICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlICop
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeCogZ2V0Q1RNKCkgY29uc3Q7CisgICAg
ICAgIHZpcnR1YWwgU1ZHTWF0cml4KiBnZXRTY3JlZW5DVE0oKSBjb25zdDsKKyAgICAgICAgdmly
dHVhbCBTVkdNYXRyaXgqIGdldFRyYW5zZm9ybVRvRWxlbWVudChTVkdFbGVtZW50KiwgRXhjZXB0
aW9uQ29kZSYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgICAgICB2aXJ0dWFsIGJvb2wgcmVu
ZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6
OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9CisgICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0
KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSk7
CisgICAgICAgIHZpcnR1YWwgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqKSBj
b25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwotICAgICAgICB2aXJ0dWFsIFNW
R01hdHJpeCAqbG9jYWxNYXRyaXgoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTVkdNYXRyaXgq
IGxvY2FsTWF0cml4KCkgY29uc3Q7CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlTG9jYWxUcmFuc2Zvcm0oU1ZHVHJhbnNmb3JtTGlzdCAqbG9jYWxUcmFuc2Zvcm1zKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxvY2FsVHJhbnNmb3JtKFNWR1RyYW5zZm9ybUxpc3Qq
IGxvY2FsVHJhbnNmb3Jtcyk7CiAgICAgICAgIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmly
dHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRo
aXM7IH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNjk3MSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRQ
b3NpdGlvbmluZ0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94
QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApA
QCAtMjIsMTcgKzIyLDE2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQ
UE9SVAotI2luY2x1ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJTVkdUZXh0UG9zaXRpb25pbmdFbGVt
ZW50LmgiCiAKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgot
I2luY2x1ZGUgIlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdMZW5n
dGhMaXN0LmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdOdW1iZXJMaXN0
LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1T
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCitTVkdUZXh0UG9zaXRpb25p
bmdFbGVtZW50OjpTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdUZXh0Q29udGVudEVsZW1lbnQodGFn
TmFtZSwgZG9jKQogICAgICwgbV94KG5ldyBTVkdMZW5ndGhMaXN0KQogICAgICwgbV95KG5ldyBT
VkdMZW5ndGhMaXN0KQpAQCAtNTIsNyArNTEsNyBAQCBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdUZXh0UG9zCiBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdUZXh0UG9z
aXRpb25pbmdFbGVtZW50LCBTVkdMZW5ndGhMaXN0KiwgTGVuZ3RoTGlzdCwgbGVuZ3RoTGlzdCwg
RHksIGR5LCBTVkdOYW1lczo6ZHlBdHRyLmxvY2FsTmFtZSgpLCBtX2R5LmdldCgpKQogQU5JTUFU
RURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCwgU1ZHTnVt
YmVyTGlzdCosIE51bWJlckxpc3QsIG51bWJlckxpc3QsIFJvdGF0ZSwgcm90YXRlLCBTVkdOYW1l
czo6cm90YXRlQXR0ci5sb2NhbE5hbWUoKSwgbV9yb3RhdGUuZ2V0KCkpCiAKLXZvaWQgU1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
ICphdHRyKQordm9pZCBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9
IGF0dHItPnZhbHVlKCk7CiAgICAgCkBAIC03MCw2ICs2OSw4IEBAIHZvaWQgU1ZHVGV4dFBvc2l0
aW9uaW5nRWxlbWVudDo6cGFyc2VNYXAKICAgICAgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAorfQorCiAvLyB2aW06dHM9NDpub2V0CiAj
ZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1Rl
eHRQb3NpdGlvbmluZ0VsZW1lbnQuaAkocmV2aXNpb24gMTY5NzEpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1h
bm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdAogCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZp
cnR1YWwgflNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdUZXh0
UG9zaXRpb25pbmdFbGVtZW50LCBTVkdMZW5ndGhMaXN0KiwgUmVmUHRyPFNWR0xlbmd0aExpc3Q+
LCBYLCB4KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11035</attachid>
            <date>2006-10-11 12:51:53 -0700</date>
            <delta_ts>2006-10-12 01:07:54 -0700</delta_ts>
            <desc>Improved patch</desc>
            <filename>11217-text-2.diff</filename>
            <type>text/plain</type>
            <size>21705</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNjk5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMDYtMTAtMTEgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIHN2ZyB0ZXh0IGNs
YXNzZXMuCisKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OlNWR1RSZWZFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RSZWZFbGVtZW50Ojp1cGRhdGVSZWZlcmVuY2VkVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdUUmVmRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZF
bGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVFNwYW5F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RTcGFuRWxlbWVudDo6U1ZHVFNwYW5F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RTcGFuRWxlbWVudDo6Y2hpbGRTaG91bGRD
cmVhdGVSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUU3BhbkVsZW1lbnQ6OmNyZWF0
ZVJlbmRlcmVyKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVFNwYW5FbGVtZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUU3BhbkVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpTVkdUZXh0Q29udGVudEVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5oOgorICAgICAgICAq
IGtzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0
RWxlbWVudDo6U1ZHVGV4dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1l
bnQ6OmxvY2FsTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxlbWVudDo6dXBk
YXRlTG9jYWxUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6Om5l
YXJlc3RWaWV3cG9ydEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6
OmZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVt
ZW50OjpnZXRTY3JlZW5DVE0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6Omdl
dENUTSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVu
ZGVyZXIpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6OmdldFRyYW5zZm9ybVRvRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUZXh0RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1l
bnQuaDoKKwogMjAwNi0xMC0xMSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEFkYW0uCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUUmVm
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFJlZkVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxNjk5NCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RSZWZFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAg
ICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIyLDE3ICsyMiwx
OSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRl
ICJUZXh0LmgiCiAjaW5jbHVkZSAiU1ZHVFJlZkVsZW1lbnQuaCIKKworI2luY2x1ZGUgIlJlbmRl
clNWR0lubGluZS5oIgorI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKKyNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgotI2luY2x1
ZGUgIlNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lLmgiCiAKLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdUUmVmRWxlbWVu
dDo6U1ZHVFJlZkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQg
KmRvYykKLTogU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCh0YWdOYW1lLCBkb2MpLCBTVkdVUklS
ZWZlcmVuY2UoKQorU1ZHVFJlZkVsZW1lbnQ6OlNWR1RSZWZFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBTVkdUZXh0UG9zaXRpb25pbmdF
bGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIFNWR1VSSVJlZmVyZW5jZSgpCiB7CiB9CiAKQEAg
LTQzLDggKzQ1LDggQEAgU1ZHVFJlZkVsZW1lbnQ6On5TVkdUUmVmRWxlbWVudCgpCiB2b2lkIFNW
R1RSZWZFbGVtZW50Ojp1cGRhdGVSZWZlcmVuY2VkVGV4dCgpCiB7CiAgICAgU3RyaW5nIHRhcmdl
dElkID0gU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQoaHJlZigpLmRlcHJlY2F0ZWRTdHJpbmco
KSk7Ci0gICAgRWxlbWVudCAqdGFyZ2V0RWxlbWVudCA9IG93bmVyRG9jdW1lbnQoKS0+Z2V0RWxl
bWVudEJ5SWQodGFyZ2V0SWQuaW1wbCgpKTsKLSAgICBTVkdFbGVtZW50ICp0YXJnZXQgPSBzdmdf
ZHluYW1pY19jYXN0KHRhcmdldEVsZW1lbnQpOworICAgIEVsZW1lbnQqIHRhcmdldEVsZW1lbnQg
PSBvd25lckRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKHRhcmdldElkLmltcGwoKSk7CisgICAg
U1ZHRWxlbWVudCogdGFyZ2V0ID0gc3ZnX2R5bmFtaWNfY2FzdCh0YXJnZXRFbGVtZW50KTsKICAg
ICBpZiAodGFyZ2V0KSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgaWdub3JlID0gMDsKICAgICAg
ICAgc2V0VGV4dENvbnRlbnQodGFyZ2V0LT50ZXh0Q29udGVudCgpLCBpZ25vcmUpOwpAQCAtNTks
NyArNjEsNyBAQCB2b2lkIFNWR1RSZWZFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0CiAgICAg
U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBwcmVzZXJ2
ZURlY2xzKTsKIH0KIAotdm9pZCBTVkdUUmVmRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBTVkdUUmVmRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChTVkdVUklSZWZlcmVu
Y2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSB7CiAgICAgICAgIHVwZGF0ZVJlZmVyZW5j
ZWRUZXh0KCk7CkBAIC02OSw3ICs3MSw3IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXQKICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKIH0KIAotYm9vbCBTVkdUUmVmRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVh
dGVSZW5kZXJlcihOb2RlICpjaGlsZCkgY29uc3QKK2Jvb2wgU1ZHVFJlZkVsZW1lbnQ6OmNoaWxk
U2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSogY2hpbGQpIGNvbnN0CiB7CiAgICAgaWYgKGNoaWxk
LT5pc1RleHROb2RlKCkgfHwgY2hpbGQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRzcGFuVGFnKSB8
fAogICAgICAgICBjaGlsZC0+aGFzVGFnTmFtZShTVkdOYW1lczo6dHJlZlRhZykpCkBAIC03Nywx
MSArNzksMTMgQEAgYm9vbCBTVkdUUmVmRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotUmVuZGVyT2JqZWN0ICpTVkdUUmVmRWxlbWVudDo6Y3JlYXRl
UmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqKQorUmVuZGVyT2JqZWN0
KiBTVkdUUmVmRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5k
ZXJTdHlsZSopCiB7CiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR0lubGluZSh0aGlz
KTsKIH0KIAorfQorCiAvLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJ
bmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5oCShyZXZpc2lvbiAxNjk5NCkKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1h
bm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdAogCkBAIC0yNCw4ICsyNCw4IEBACiAjZGVmaW5lIEtTVkdfU1ZHVFJlZkVsZW1lbnRJ
bXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgi
CiAjaW5jbHVkZSAiU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1VS
SVJlZmVyZW5jZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewpAQCAtMzYsMTEgKzM2LDExIEBA
IG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1RSZWZFbGVtZW50KCk7CiAK
ICAgICAgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBi
b29sIHByZXNlcnZlRGVjbHMpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cik7CiAKLSAgICAgICAgdmlydHVh
bCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBTdHls
ZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQotICAgICAgICB2aXJ0dWFsIFJl
bmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHls
ZSAqc3R5bGUpOwotICAgICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSAq
Y2hpbGQpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5k
ZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQo
c3R5bGUpOyB9CisgICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSk7CisgICAgICAgIGJvb2wgY2hp
bGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlKiBjaGlsZCkgY29uc3Q7CiAKICAgICBwcm90ZWN0
ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBj
b25zdCB7IHJldHVybiB0aGlzOyB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUU3BhbkVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RTcGFuRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE2OTk0KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFNwYW5FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAg
ICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIzLDEyICsyMywx
NCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAi
U1ZHVFNwYW5FbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKworI2luY2x1ZGUgIlJl
bmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RTcGFuLmgiCisjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVNWR1RTcGFuRWxlbWVudDo6U1ZHVFNwYW5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCitTVkdUU3BhbkVsZW1lbnQ6OlNWR1RTcGFuRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogOiBTVkdUZXh0
UG9zaXRpb25pbmdFbGVtZW50KHRhZ05hbWUsIGRvYykKIHsKIH0KQEAgLTM3LDcgKzM5LDcgQEAg
U1ZHVFNwYW5FbGVtZW50Ojp+U1ZHVFNwYW5FbGVtZW50KCkKIHsKIH0KIAotYm9vbCBTVkdUU3Bh
bkVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSAqY2hpbGQpIGNvbnN0Citi
b29sIFNWR1RTcGFuRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlKiBjaGls
ZCkgY29uc3QKIHsKICAgICBpZiAoY2hpbGQtPmlzVGV4dE5vZGUoKSB8fCBjaGlsZC0+aGFzVGFn
TmFtZShTVkdOYW1lczo6dHNwYW5UYWcpIHx8CiAgICAgICAgIGNoaWxkLT5oYXNUYWdOYW1lKFNW
R05hbWVzOjp0cmVmVGFnKSkKQEAgLTQ1LDExICs0NywxMyBAQCBib29sIFNWR1RTcGFuRWxlbWVu
dDo6Y2hpbGRTaG91bGRDcmVhdGVSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZW5kZXJPYmpl
Y3QgKlNWR1RTcGFuRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBS
ZW5kZXJTdHlsZSAqKQorUmVuZGVyT2JqZWN0KiBTVkdUU3BhbkVsZW1lbnQ6OmNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQogewogICAgIHJldHVybiBuZXcg
KGFyZW5hKSBSZW5kZXJTVkdUU3Bhbih0aGlzKTsKIH0KIAorfQorCiAvLyB2aW06dHM9NDpub2V0
CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFNw
YW5FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFNwYW5FbGVt
ZW50LmgJKHJldmlzaW9uIDE2OTk0KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFNwYW5FbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAg
ICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAg
ICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0zNCw5ICszNCw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIFNWR1RTcGFuRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAgICAgdmlydHVhbCB+U1ZHVFNwYW5FbGVtZW50KCk7
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVk
KFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05l
ZWRlZChzdHlsZSk7IH0KLSAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKTsKLSAgICAgICAgYm9v
bCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUgKmNoaWxkKSBjb25zdDsKKyAgICAgICAg
dmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVy
biBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQorICAgICAgICB2aXJ0
dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5k
ZXJTdHlsZSogc3R5bGUpOworICAgICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIo
Tm9kZSogY2hpbGQpIGNvbnN0OwogICAgIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVh
bCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7
IH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAko
cmV2aXNpb24gMTY5OTQpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAg
ICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAg
ICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjIsMTggKzIyLDE3
IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUg
IkF0dHIuaCIKLQotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHSGVscGVyLmgi
CiAjaW5jbHVkZSAiU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHTGVuZ3Ro
LmgiCisKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiU1ZHSGVscGVyLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCisjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVNWR1RleHRDb250ZW50RWxlbWVudDo6U1ZHVGV4dENvbnRlbnRFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCitTVkdUZXh0Q29udGVudEVs
ZW1lbnQ6OlNWR1RleHRDb250ZW50RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHU3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpCiAg
ICAgLCBTVkdUZXN0cygpCiAgICAgLCBTVkdMYW5nU3BhY2UoKQpAQCAtOTQsNyArOTMsNyBAQCB2
b2lkIFNWR1RleHRDb250ZW50RWxlbWVudDo6c2VsZWN0U3ViU3RyCiB7CiB9CiAKLXZvaWQgU1ZH
VGV4dENvbnRlbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUg
KmF0dHIpCit2b2lkIFNWR1RleHRDb250ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIC8vaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6bGVuZ3RoQWRqdXN0QXR0cikKICAgICAvLyAgICB4QmFzZVZhbHVlKCktPnNldFZhbHVl
QXNTdHJpbmcodmFsdWUpOwpAQCAtMTExLDYgKzExMCw4IEBAIHZvaWQgU1ZHVGV4dENvbnRlbnRF
bGVtZW50OjpwYXJzZU1hcHBlZEEKICAgICB9CiB9CiAKK30KKwogLy8gdmltOnRzPTQ6bm9ldAog
I2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRD
b250ZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRD
b250ZW50RWxlbWVudC5oCShyZXZpc2lvbiAxNjk5NCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1RleHRDb250ZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94
QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApA
QCAtMjQsMTggKzI0LDE4IEBACiAjZGVmaW5lIEtTVkdfU1ZHVGV4dENvbnRlbnRFbGVtZW50SW1w
bF9ICiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAorI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQuaCIKKyNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIKICNpbmNsdWRlICJTVkdTdHls
ZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVGVzdHMuaCIKLSNpbmNsdWRlICJTVkdMYW5nU3Bh
Y2UuaCIKLSNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTVkdMZW5ndGg7CiAKICAgICBjbGFzcyBTVkdUZXh0
Q29udGVudEVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkRWxlbWVudCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkCiAgICAgewogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBTVkdMZW5ndGhB
ZGp1c3RUeXBlIHsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAJKHJldmlz
aW9uIDE2OTk0KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAg
ICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAy
MDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjQsMTggKzI0LDE3IEBACiAjaWZkZWYg
U1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdUZXh0RWxlbWVudC5oIgogCisjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlNWR0xlbmd0
aExpc3QuaCIKLSNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAjaW5jbHVkZSAiU1ZHTWF0
cml4LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdUU3BhbkVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Rl
eHQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHVGV4dEVsZW1lbnQ6OlNWR1RleHRFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCitTVkdUZXh0
RWxlbWVudDo6U1ZHVGV4dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvYykKICAgICA6IFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQodGFnTmFtZSwgZG9j
KQogICAgICwgU1ZHVHJhbnNmb3JtYWJsZSgpCiAgICAgLCBtX3RyYW5zZm9ybShuZXcgU1ZHVHJh
bnNmb3JtTGlzdCkKQEAgLTQ4LDE1ICs0NywxNSBAQCBTVkdUZXh0RWxlbWVudDo6flNWR1RleHRF
bGVtZW50KCkKIAogQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHVGV4dEVsZW1lbnQs
IFNWR1RyYW5zZm9ybUxpc3QqLCBUcmFuc2Zvcm1MaXN0LCB0cmFuc2Zvcm1MaXN0LCBUcmFuc2Zv
cm0sIHRyYW5zZm9ybSwgU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIubG9jYWxOYW1lKCksIG1fdHJh
bnNmb3JtLmdldCgpKQogCi1TVkdNYXRyaXggKlNWR1RleHRFbGVtZW50Ojpsb2NhbE1hdHJpeCgp
IGNvbnN0CitTVkdNYXRyaXgqIFNWR1RleHRFbGVtZW50Ojpsb2NhbE1hdHJpeCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR01hdHJpeD4obV9sb2NhbE1hdHJpeCk7CiB9CiAK
LXZvaWQgU1ZHVGV4dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSAqYXR0cikKK3ZvaWQgU1ZHVGV4dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0
cmFuc2Zvcm1BdHRyKSB7Ci0gICAgICAgIFNWR1RyYW5zZm9ybUxpc3QgKmxvY2FsVHJhbnNmb3Jt
cyA9IHRyYW5zZm9ybUJhc2VWYWx1ZSgpOworICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0KiBsb2Nh
bFRyYW5zZm9ybXMgPSB0cmFuc2Zvcm1CYXNlVmFsdWUoKTsKIAogICAgICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKICAgICAgICAgbG9jYWxUcmFuc2Zvcm1zLT5jbGVhcihlYyk7CkBAIC02Nywx
MSArNjYsMTEgQEAgdm9pZCBTVkdUZXh0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dAogICAg
ICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KTsKIH0KIAotdm9pZCBTVkdUZXh0RWxlbWVudDo6dXBkYXRlTG9jYWxUcmFuc2Zvcm0oU1ZHVHJh
bnNmb3JtTGlzdCAqbG9jYWxUcmFuc2Zvcm1zKQordm9pZCBTVkdUZXh0RWxlbWVudDo6dXBkYXRl
TG9jYWxUcmFuc2Zvcm0oU1ZHVHJhbnNmb3JtTGlzdCogbG9jYWxUcmFuc2Zvcm1zKQogewogICAg
IC8vIFVwZGF0ZSBjYWNoZWQgbG9jYWwgbWF0cml4CiAgICAgUmVmUHRyPFNWR1RyYW5zZm9ybT4g
bG9jYWxUcmFuc2Zvcm0gPSBsb2NhbFRyYW5zZm9ybXMtPmNvbmNhdGVuYXRlKCk7Ci0gICAgaWYo
bG9jYWxUcmFuc2Zvcm0pIHsKKyAgICBpZiAobG9jYWxUcmFuc2Zvcm0pIHsKICAgICAgICAgbV9s
b2NhbE1hdHJpeCA9IGxvY2FsVHJhbnNmb3JtLT5tYXRyaXgoKTsKICAgICAgICAgaWYgKHJlbmRl
cmVyKCkpIHsKICAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldExvY2FsVHJhbnNmb3JtKG1fbG9j
YWxNYXRyaXgtPm1hdHJpeCgpKTsKQEAgLTg4LDEyICs4NywxMiBAQCB2b2lkIFNWR1RleHRFbGVt
ZW50OjphdHRhY2goKQogICAgICAgICByZW5kZXJlcigpLT5zZXRMb2NhbFRyYW5zZm9ybShtX2xv
Y2FsTWF0cml4LT5tYXRyaXgoKSk7CiB9CiAKLVNWR0VsZW1lbnQgKlNWR1RleHRFbGVtZW50Ojpu
ZWFyZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3QKK1NWR0VsZW1lbnQqIFNWR1RleHRFbGVtZW50
OjpuZWFyZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gU1ZHVHJhbnNm
b3JtYWJsZTo6bmVhcmVzdFZpZXdwb3J0RWxlbWVudCh0aGlzKTsKIH0KIAotU1ZHRWxlbWVudCAq
U1ZHVGV4dEVsZW1lbnQ6OmZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3QKK1NWR0VsZW1l
bnQqIFNWR1RleHRFbGVtZW50OjpmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIFNWR1RyYW5zZm9ybWFibGU6OmZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KHRoaXMp
OwogfQpAQCAtMTAzLDIyICsxMDIsMjIgQEAgRmxvYXRSZWN0IFNWR1RleHRFbGVtZW50OjpnZXRC
Qm94KCkgY29ucwogICAgIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjpnZXRCQm94KHRoaXMpOwog
fQogCi1TVkdNYXRyaXggKlNWR1RleHRFbGVtZW50OjpnZXRTY3JlZW5DVE0oKSBjb25zdAorU1ZH
TWF0cml4KiBTVkdUZXh0RWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCkgY29uc3QKIHsKICAgICByZXR1
cm4gU1ZHTG9jYXRhYmxlOjpnZXRTY3JlZW5DVE0odGhpcyk7CiB9CiAKLVNWR01hdHJpeCAqU1ZH
VGV4dEVsZW1lbnQ6OmdldENUTSgpIGNvbnN0CitTVkdNYXRyaXgqIFNWR1RleHRFbGVtZW50Ojpn
ZXRDVE0oKSBjb25zdAogewogICAgIHJldHVybiBTVkdMb2NhdGFibGU6OmdldFNjcmVlbkNUTSh0
aGlzKTsKIH0KIAotUmVuZGVyT2JqZWN0ICpTVkdUZXh0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpCitSZW5kZXJPYmplY3QqIFNW
R1RleHRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0
eWxlKiBzdHlsZSkKIHsKICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHVGV4dCh0aGlz
KTsKIH0KIAotYm9vbCBTVkdUZXh0RWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihO
b2RlICpjaGlsZCkgY29uc3QKK2Jvb2wgU1ZHVGV4dEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRl
UmVuZGVyZXIoTm9kZSogY2hpbGQpIGNvbnN0CiB7CiAgICAgaWYgKGNoaWxkLT5pc1RleHROb2Rl
KCkgfHwgY2hpbGQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRzcGFuVGFnKSB8fAogICAgICAgICBj
aGlsZC0+aGFzVGFnTmFtZShTVkdOYW1lczo6dHJlZlRhZykpCkluZGV4OiBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdUZXh0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1RleHRFbGVtZW50LmgJKHJldmlzaW9uIDE2OTk0KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
VGV4dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3Jn
PgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
ICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTMwLDMw
ICszMCwzMCBAQAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKICAgICBjbGFzcyBTVkdUZXh0RWxlbWVu
dCA6IHB1YmxpYyBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1YmxpYyBTVkdUcmFuc2Zvcm1hYmxlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgU1ZHVHJhbnNmb3JtYWJsZQogICAgIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIFNWR1RleHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAg
ICAgICB2aXJ0dWFsIH5TVkdUZXh0RWxlbWVudCgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKTsKIAog
ICAgICAgICAgLy8gJ1NWR1RleHRFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgdmlydHVhbCBT
VkdFbGVtZW50ICpuZWFyZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1
YWwgU1ZHRWxlbWVudCAqZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsKKyAgICAgICAg
dmlydHVhbCBTVkdFbGVtZW50KiBuZWFyZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7CisgICAg
ICAgIHZpcnR1YWwgU1ZHRWxlbWVudCogZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsK
IAogICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBnZXRCQm94KCkgY29uc3Q7Ci0gICAgICAgIHZp
cnR1YWwgU1ZHTWF0cml4ICpnZXRDVE0oKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBTVkdNYXRy
aXggKmdldFNjcmVlbkNUTSgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeCAqZ2V0
VHJhbnNmb3JtVG9FbGVtZW50KFNWR0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJikgY29uc3QgeyBy
ZXR1cm4gMDsgfQotCi0gICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRl
clN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChz
dHlsZSk7IH0KLSAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJl
bmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKTsKLSAgICAgICAgdmlydHVhbCBi
b29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSAqKSBjb25zdDsKKyAgICAgICAgdmly
dHVhbCBTVkdNYXRyaXgqIGdldENUTSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFNWR01hdHJp
eCogZ2V0U2NyZWVuQ1RNKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgU1ZHTWF0cml4KiBnZXRU
cmFuc2Zvcm1Ub0VsZW1lbnQoU1ZHRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKSBjb25zdCB7IHJl
dHVybiAwOyB9CisKKyAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVy
U3R5bGUqIHN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0
eWxlKTsgfQorICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVu
ZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUpOworICAgICAgICB2aXJ0dWFsIGJv
b2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2goKTsKLSAgICAgICAgdmlydHVhbCBTVkdNYXRyaXggKmxvY2FsTWF0cml4
KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgU1ZHTWF0cml4KiBsb2NhbE1hdHJpeCgpIGNvbnN0
OwogICAgICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxvY2FsVHJhbnNmb3JtKFNW
R1RyYW5zZm9ybUxpc3QgKmxvY2FsVHJhbnNmb3Jtcyk7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVMb2NhbFRyYW5zZm9ybShTVkdUcmFuc2Zvcm1MaXN0KiBsb2NhbFRyYW5zZm9ybXMpOwog
ICAgICAgICAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVu
dCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CkluZGV4OiBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAkocmV2aXNpb24g
MTY5OTQpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAg
ICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIyLDE3ICsyMiwxNiBAQAog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJBdHRy
LmgiCisjaW5jbHVkZSAiU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oIgogCi0jaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKLSNpbmNsdWRlICJTVkdUZXh0UG9z
aXRpb25pbmdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgorI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHTnVtYmVyTGlzdC5oIgogCi11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHVGV4dFBvc2l0aW9uaW5nRWxl
bWVudDo6U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6U1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jKQogICAgIDogU1ZHVGV4dENvbnRlbnRFbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIG1f
eChuZXcgU1ZHTGVuZ3RoTGlzdCkKICAgICAsIG1feShuZXcgU1ZHTGVuZ3RoTGlzdCkKQEAgLTUy
LDcgKzUxLDcgQEAgQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHVGV4dFBvcwogQU5J
TUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCwgU1ZH
TGVuZ3RoTGlzdCosIExlbmd0aExpc3QsIGxlbmd0aExpc3QsIER5LCBkeSwgU1ZHTmFtZXM6OmR5
QXR0ci5sb2NhbE5hbWUoKSwgbV9keS5nZXQoKSkKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJ
T05TKFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQsIFNWR051bWJlckxpc3QqLCBOdW1iZXJMaXN0
LCBudW1iZXJMaXN0LCBSb3RhdGUsIHJvdGF0ZSwgU1ZHTmFtZXM6OnJvdGF0ZUF0dHIubG9jYWxO
YW1lKCksIG1fcm90YXRlLmdldCgpKQogCi12b2lkIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgU1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
KiBhdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAg
IApAQCAtNzAsNiArNjksOCBAQCB2b2lkIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNl
TWFwCiAgICAgICAgIFNWR1RleHRDb250ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CiB9CiAKK30KKwogLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIFNWR19TVVBQT1JU
CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50
LmgJKHJldmlzaW9uIDE2OTk0KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dFBvc2l0aW9u
aW5nRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+
Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Cisg
ICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMzgsNyAr
MzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdUZXh0UG9zaXRp
b25pbmdFbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQn
IGZ1bmN0aW9ucwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCwg
U1ZHTGVuZ3RoTGlzdCosIFJlZlB0cjxTVkdMZW5ndGhMaXN0PiwgWCwgeCkK
</data>
<flag name="review"
          id="3729"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11042</attachid>
            <date>2006-10-12 01:07:54 -0700</date>
            <delta_ts>2006-10-31 11:14:41 -0800</delta_ts>
            <desc>Improved patch</desc>
            <filename>11217-text-3.diff</filename>
            <type>text/plain</type>
            <size>21674</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzAwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMDYtMTAtMTEgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIHN2ZyB0ZXh0IGNs
YXNzZXMuCisKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OlNWR1RSZWZFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RSZWZFbGVtZW50Ojp1cGRhdGVSZWZlcmVuY2VkVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdUUmVmRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZF
bGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVFNwYW5F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RTcGFuRWxlbWVudDo6U1ZHVFNwYW5F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RTcGFuRWxlbWVudDo6Y2hpbGRTaG91bGRD
cmVhdGVSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUU3BhbkVsZW1lbnQ6OmNyZWF0
ZVJlbmRlcmVyKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVFNwYW5FbGVtZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUU3BhbkVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpTVkdUZXh0Q29udGVudEVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5oOgorICAgICAgICAq
IGtzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0
RWxlbWVudDo6U1ZHVGV4dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1l
bnQ6OmxvY2FsTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxlbWVudDo6dXBk
YXRlTG9jYWxUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6Om5l
YXJlc3RWaWV3cG9ydEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6
OmZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVt
ZW50OjpnZXRTY3JlZW5DVE0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6Omdl
dENUTSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVu
ZGVyZXIpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6OmdldFRyYW5zZm9ybVRvRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUZXh0RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1l
bnQuaDoKKwogMjAwNi0xMC0xMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgSm9obi4KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RSZWZF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUUmVmRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE3MDAxKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFJlZkVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAg
ICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAg
ICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjIsMTcgKzIyLDE5
IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUg
IlRleHQuaCIKICNpbmNsdWRlICJTVkdUUmVmRWxlbWVudC5oIgorCisjaW5jbHVkZSAiUmVuZGVy
U1ZHSW5saW5lLmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1l
cy5oIgorI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCi0jaW5jbHVk
ZSAiU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKIAotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR1RSZWZFbGVtZW50
OjpTVkdUUmVmRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAq
ZG9jKQotOiBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50KHRhZ05hbWUsIGRvYyksIFNWR1VSSVJl
ZmVyZW5jZSgpCitTVkdUUmVmRWxlbWVudDo6U1ZHVFJlZkVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IFNWR1RleHRQb3NpdGlvbmluZ0Vs
ZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgU1ZHVVJJUmVmZXJlbmNlKCkKIHsKIH0KIApAQCAt
NDMsOCArNDUsOCBAQCBTVkdUUmVmRWxlbWVudDo6flNWR1RSZWZFbGVtZW50KCkKIHZvaWQgU1ZH
VFJlZkVsZW1lbnQ6OnVwZGF0ZVJlZmVyZW5jZWRUZXh0KCkKIHsKICAgICBTdHJpbmcgdGFyZ2V0
SWQgPSBTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldChocmVmKCkuZGVwcmVjYXRlZFN0cmluZygp
KTsKLSAgICBFbGVtZW50ICp0YXJnZXRFbGVtZW50ID0gb3duZXJEb2N1bWVudCgpLT5nZXRFbGVt
ZW50QnlJZCh0YXJnZXRJZC5pbXBsKCkpOwotICAgIFNWR0VsZW1lbnQgKnRhcmdldCA9IHN2Z19k
eW5hbWljX2Nhc3QodGFyZ2V0RWxlbWVudCk7CisgICAgRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9
IG93bmVyRG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQuaW1wbCgpKTsKKyAgICBT
VkdFbGVtZW50KiB0YXJnZXQgPSBzdmdfZHluYW1pY19jYXN0KHRhcmdldEVsZW1lbnQpOwogICAg
IGlmICh0YXJnZXQpIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBpZ25vcmUgPSAwOwogICAgICAg
ICBzZXRUZXh0Q29udGVudCh0YXJnZXQtPnRleHRDb250ZW50KCksIGlnbm9yZSk7CkBAIC01OSw3
ICs2MSw3IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXQKICAgICBT
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGF0dHIsIHByZXNlcnZl
RGVjbHMpOwogfQogCi12b2lkIFNWR1RSZWZFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR1RSZWZFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYgKFNWR1VSSVJlZmVyZW5j
ZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKICAgICAgICAgdXBkYXRlUmVmZXJlbmNl
ZFRleHQoKTsKQEAgLTY5LDcgKzcxLDcgQEAgdm9pZCBTVkdUUmVmRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dAogICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOwogfQogCi1ib29sIFNWR1RSZWZFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0
ZVJlbmRlcmVyKE5vZGUgKmNoaWxkKSBjb25zdAorYm9vbCBTVkdUUmVmRWxlbWVudDo6Y2hpbGRT
aG91bGRDcmVhdGVSZW5kZXJlcihOb2RlKiBjaGlsZCkgY29uc3QKIHsKICAgICBpZiAoY2hpbGQt
PmlzVGV4dE5vZGUoKSB8fCBjaGlsZC0+aGFzVGFnTmFtZShTVkdOYW1lczo6dHNwYW5UYWcpIHx8
CiAgICAgICAgIGNoaWxkLT5oYXNUYWdOYW1lKFNWR05hbWVzOjp0cmVmVGFnKSkKQEAgLTc3LDEx
ICs3OSwxMyBAQCBib29sIFNWR1RSZWZFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1SZW5kZXJPYmplY3QgKlNWR1RSZWZFbGVtZW50OjpjcmVhdGVS
ZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICopCitSZW5kZXJPYmplY3Qq
IFNWR1RSZWZFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRl
clN0eWxlKikKIHsKICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHSW5saW5lKHRoaXMp
OwogfQogCit9CisKIC8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmgJKHJldmlzaW9uIDE3MDAxKQorKysgV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFu
biA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBw
cm9qZWN0CiAKQEAgLTI0LDggKzI0LDggQEAKICNkZWZpbmUgS1NWR19TVkdUUmVmRWxlbWVudElt
cGxfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIK
ICNpbmNsdWRlICJTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHVVJJ
UmVmZXJlbmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7CkBAIC0zNiwxMSArMzYsMTEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHVFJlZkVsZW1lbnQoKTsKIAog
ICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIsIGJv
b2wgcHJlc2VydmVEZWNscyk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKLSAgICAgICAgdmlydHVhbCBib29s
IHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVt
ZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQotICAgICAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5
bGUpOwotICAgICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSAqY2hpbGQp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHls
ZSogc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUp
OyB9CisgICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJB
cmVuYSosIFJlbmRlclN0eWxlKik7CisgICAgICAgIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5k
ZXJlcihOb2RlKikgY29uc3Q7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29u
c3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9Cklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RTcGFuRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDAxKQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFNwYW5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMg
WmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwg
MjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIEtERSBwcm9qZWN0CiAKQEAgLTIzLDEzICsyMywxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHVFNwYW5FbGVtZW50LmgiCi0jaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKKworI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUg
IlJlbmRlclNWR1RTcGFuLmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIAotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR1RTcGFuRWxlbWVudDo6U1ZH
VFNwYW5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2Mp
Ci06IFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQodGFnTmFtZSwgZG9jKQorU1ZHVFNwYW5FbGVt
ZW50OjpTVkdUU3BhbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvYykKKyAgICA6IFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQodGFnTmFtZSwgZG9jKQog
ewogfQogCkBAIC0zNyw3ICszOSw3IEBAIFNWR1RTcGFuRWxlbWVudDo6flNWR1RTcGFuRWxlbWVu
dCgpCiB7CiB9CiAKLWJvb2wgU1ZHVFNwYW5FbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRl
cmVyKE5vZGUgKmNoaWxkKSBjb25zdAorYm9vbCBTVkdUU3BhbkVsZW1lbnQ6OmNoaWxkU2hvdWxk
Q3JlYXRlUmVuZGVyZXIoTm9kZSogY2hpbGQpIGNvbnN0CiB7CiAgICAgaWYgKGNoaWxkLT5pc1Rl
eHROb2RlKCkgfHwgY2hpbGQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRzcGFuVGFnKSB8fAogICAg
ICAgICBjaGlsZC0+aGFzVGFnTmFtZShTVkdOYW1lczo6dHJlZlRhZykpCkBAIC00NSwxMSArNDcs
MTMgQEAgYm9vbCBTVkdUU3BhbkVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUgogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotUmVuZGVyT2JqZWN0ICpTVkdUU3BhbkVsZW1lbnQ6OmNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKikKK1JlbmRlck9iamVjdCogU1ZH
VFNwYW5FbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0
eWxlKikKIHsKICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHVFNwYW4odGhpcyk7CiB9
CiAKK30KKwogLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RTcGFuRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR1RTcGFuRWxlbWVudC5oCShyZXZpc2lvbiAxNzAwMSkKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR1RTcGFuRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5u
IDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHBy
b2plY3QKIApAQCAtMzQsOSArMzQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICBTVkdU
U3BhbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgICAgIHZp
cnR1YWwgflNWR1RTcGFuRWxlbWVudCgpOwogICAgICAgICAgICAgICAgIAotICAgICAgICB2aXJ0
dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpIHsgcmV0dXJuIFN0
eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9Ci0gICAgICAgIHZpcnR1YWwg
UmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0
eWxlICpzdHlsZSk7Ci0gICAgICAgIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2Rl
ICpjaGlsZCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJl
bmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRl
ZChzdHlsZSk7IH0KKyAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKyAgICAgICAgYm9vbCBjaGlsZFNob3VsZENy
ZWF0ZVJlbmRlcmVyKE5vZGUqKSBjb25zdDsKICAgICAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
IHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biB0aGlzOyB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE3MDAxKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dENvbnRl
bnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3Jn
PgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
ICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIyLDE4
ICsyMiwxNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKLSNp
bmNsdWRlICJBdHRyLmgiCi0KLSNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR0hl
bHBlci5oIgogI2luY2x1ZGUgIlNWR1RleHRDb250ZW50RWxlbWVudC5oIgotI2luY2x1ZGUgIlNW
R0xlbmd0aC5oIgorCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgorI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1TVkdUZXh0Q29udGVudEVsZW1lbnQ6OlNWR1RleHRDb250ZW50RWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHVGV4dENv
bnRlbnRFbGVtZW50OjpTVkdUZXh0Q29udGVudEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR1N0eWxlZEVsZW1lbnQodGFnTmFtZSwg
ZG9jKQogICAgICwgU1ZHVGVzdHMoKQogICAgICwgU1ZHTGFuZ1NwYWNlKCkKQEAgLTk0LDcgKzkz
LDcgQEAgdm9pZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnNlbGVjdFN1YlN0cgogewogfQogCi12
b2lkIFNWR1RleHRDb250ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlICphdHRyKQordm9pZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICAvL2lmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6Omxlbmd0aEFkanVzdEF0dHIpCiAgICAgLy8gICAgeEJhc2VWYWx1ZSgpLT5z
ZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKQEAgLTExMSw2ICsxMTAsOCBAQCB2b2lkIFNWR1RleHRD
b250ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBCiAgICAgfQogfQogCit9CisKIC8vIHZpbTp0cz00
Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdUZXh0Q29udGVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdUZXh0Q29udGVudEVsZW1lbnQuaAkocmV2aXNpb24gMTcwMDEpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8
d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9q
ZWN0CiAKQEAgLTI0LDE4ICsyNCwxOCBAQAogI2RlZmluZSBLU1ZHX1NWR1RleHRDb250ZW50RWxl
bWVudEltcGxfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKKyNpbmNsdWRlICJTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkLmgiCisjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlLmgiCiAjaW5jbHVkZSAi
U1ZHU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1Rlc3RzLmgiCi0jaW5jbHVkZSAiU1ZH
TGFuZ1NwYWNlLmgiCi0jaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU1ZHTGVuZ3RoOwogCiAgICAgY2xhc3Mg
U1ZHVGV4dENvbnRlbnRFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZH
VGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdT
cGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZAogICAgIHsKICAgICBwdWJsaWM6CiAgICAgICAgIGVudW0gU1ZH
TGVuZ3RoQWRqdXN0VHlwZSB7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxNzAwMSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAg
ICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDE4ICsyNCwxNyBAQAog
I2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHVGV4dEVsZW1lbnQuaCIKIAorI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJT
VkdMZW5ndGhMaXN0LmgiCi0jaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogI2luY2x1ZGUg
IlNWR01hdHJpeC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZH
VFNwYW5FbGVtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJSZW5k
ZXJTVkdUZXh0LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiU1ZHVHJhbnNm
b3JtTGlzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR1RleHRFbGVtZW50OjpTVkdU
ZXh0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQor
U1ZHVGV4dEVsZW1lbnQ6OlNWR1RleHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50KHRhZ05h
bWUsIGRvYykKICAgICAsIFNWR1RyYW5zZm9ybWFibGUoKQogICAgICwgbV90cmFuc2Zvcm0obmV3
IFNWR1RyYW5zZm9ybUxpc3QpCkBAIC00OCwxNSArNDcsMTUgQEAgU1ZHVGV4dEVsZW1lbnQ6On5T
VkdUZXh0RWxlbWVudCgpCiAKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1RleHRF
bGVtZW50LCBTVkdUcmFuc2Zvcm1MaXN0KiwgVHJhbnNmb3JtTGlzdCwgdHJhbnNmb3JtTGlzdCwg
VHJhbnNmb3JtLCB0cmFuc2Zvcm0sIFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyLmxvY2FsTmFtZSgp
LCBtX3RyYW5zZm9ybS5nZXQoKSkKIAotU1ZHTWF0cml4ICpTVkdUZXh0RWxlbWVudDo6bG9jYWxN
YXRyaXgoKSBjb25zdAorU1ZHTWF0cml4KiBTVkdUZXh0RWxlbWVudDo6bG9jYWxNYXRyaXgoKSBj
b25zdAogewogICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdNYXRyaXg+KG1fbG9jYWxNYXRyaXgp
OwogfQogCi12b2lkIFNWR1RleHRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR1RleHRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6dHJhbnNmb3JtQXR0cikgewotICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0ICpsb2NhbFRy
YW5zZm9ybXMgPSB0cmFuc2Zvcm1CYXNlVmFsdWUoKTsKKyAgICAgICAgU1ZHVHJhbnNmb3JtTGlz
dCogbG9jYWxUcmFuc2Zvcm1zID0gdHJhbnNmb3JtQmFzZVZhbHVlKCk7CiAKICAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIGxvY2FsVHJhbnNmb3Jtcy0+Y2xlYXIoZWMpOwpA
QCAtNjcsMTEgKzY2LDExIEBAIHZvaWQgU1ZHVGV4dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXQKICAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cik7CiB9CiAKLXZvaWQgU1ZHVGV4dEVsZW1lbnQ6OnVwZGF0ZUxvY2FsVHJhbnNmb3Jt
KFNWR1RyYW5zZm9ybUxpc3QgKmxvY2FsVHJhbnNmb3JtcykKK3ZvaWQgU1ZHVGV4dEVsZW1lbnQ6
OnVwZGF0ZUxvY2FsVHJhbnNmb3JtKFNWR1RyYW5zZm9ybUxpc3QqIGxvY2FsVHJhbnNmb3JtcykK
IHsKICAgICAvLyBVcGRhdGUgY2FjaGVkIGxvY2FsIG1hdHJpeAogICAgIFJlZlB0cjxTVkdUcmFu
c2Zvcm0+IGxvY2FsVHJhbnNmb3JtID0gbG9jYWxUcmFuc2Zvcm1zLT5jb25jYXRlbmF0ZSgpOwot
ICAgIGlmKGxvY2FsVHJhbnNmb3JtKSB7CisgICAgaWYgKGxvY2FsVHJhbnNmb3JtKSB7CiAgICAg
ICAgIG1fbG9jYWxNYXRyaXggPSBsb2NhbFRyYW5zZm9ybS0+bWF0cml4KCk7CiAgICAgICAgIGlm
IChyZW5kZXJlcigpKSB7CiAgICAgICAgICAgICByZW5kZXJlcigpLT5zZXRMb2NhbFRyYW5zZm9y
bShtX2xvY2FsTWF0cml4LT5tYXRyaXgoKSk7CkBAIC04OCwxMiArODcsMTIgQEAgdm9pZCBTVkdU
ZXh0RWxlbWVudDo6YXR0YWNoKCkKICAgICAgICAgcmVuZGVyZXIoKS0+c2V0TG9jYWxUcmFuc2Zv
cm0obV9sb2NhbE1hdHJpeC0+bWF0cml4KCkpOwogfQogCi1TVkdFbGVtZW50ICpTVkdUZXh0RWxl
bWVudDo6bmVhcmVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0CitTVkdFbGVtZW50KiBTVkdUZXh0
RWxlbWVudDo6bmVhcmVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFNW
R1RyYW5zZm9ybWFibGU6Om5lYXJlc3RWaWV3cG9ydEVsZW1lbnQodGhpcyk7CiB9CiAKLVNWR0Vs
ZW1lbnQgKlNWR1RleHRFbGVtZW50OjpmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0CitT
VkdFbGVtZW50KiBTVkdUZXh0RWxlbWVudDo6ZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25z
dAogewogICAgIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjpmYXJ0aGVzdFZpZXdwb3J0RWxlbWVu
dCh0aGlzKTsKIH0KQEAgLTEwMywyMiArMTAyLDIyIEBAIEZsb2F0UmVjdCBTVkdUZXh0RWxlbWVu
dDo6Z2V0QkJveCgpIGNvbnMKICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0QkJveCh0
aGlzKTsKIH0KIAotU1ZHTWF0cml4ICpTVkdUZXh0RWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCkgY29u
c3QKK1NWR01hdHJpeCogU1ZHVGV4dEVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIFNWR0xvY2F0YWJsZTo6Z2V0U2NyZWVuQ1RNKHRoaXMpOwogfQogCi1TVkdNYXRy
aXggKlNWR1RleHRFbGVtZW50OjpnZXRDVE0oKSBjb25zdAorU1ZHTWF0cml4KiBTVkdUZXh0RWxl
bWVudDo6Z2V0Q1RNKCkgY29uc3QKIHsKICAgICByZXR1cm4gU1ZHTG9jYXRhYmxlOjpnZXRTY3Jl
ZW5DVE0odGhpcyk7CiB9CiAKLVJlbmRlck9iamVjdCAqU1ZHVGV4dEVsZW1lbnQ6OmNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKQorUmVuZGVyT2Jq
ZWN0KiBTVkdUZXh0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBS
ZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR1Rl
eHQodGhpcyk7CiB9CiAKLWJvb2wgU1ZHVGV4dEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVu
ZGVyZXIoTm9kZSAqY2hpbGQpIGNvbnN0Citib29sIFNWR1RleHRFbGVtZW50OjpjaGlsZFNob3Vs
ZENyZWF0ZVJlbmRlcmVyKE5vZGUqIGNoaWxkKSBjb25zdAogewogICAgIGlmIChjaGlsZC0+aXNU
ZXh0Tm9kZSgpIHx8IGNoaWxkLT5oYXNUYWdOYW1lKFNWR05hbWVzOjp0c3BhblRhZykgfHwKICAg
ICAgICAgY2hpbGQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRyZWZUYWcpKQpJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdUZXh0RWxlbWVudC5oCShyZXZpc2lvbiAxNzAwMSkKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1RleHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hA
a2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBA
IC0zMCwzMCArMzAsMzAgQEAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7CiAgICAgY2xhc3MgU1ZHVGV4
dEVsZW1lbnQgOiBwdWJsaWMgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVHJhbnNmb3JtYWJsZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVibGljIFNWR1RyYW5zZm9ybWFibGUKICAgICB7CiAgICAgcHVibGlj
OgogICAgICAgICBTVkdUZXh0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
KTsKICAgICAgICAgdmlydHVhbCB+U1ZHVGV4dEVsZW1lbnQoKTsKIAotICAgICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwog
CiAgICAgICAgICAvLyAnU1ZHVGV4dEVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICB2aXJ0dWFs
IFNWR0VsZW1lbnQgKm5lYXJlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsKLSAgICAgICAgdmly
dHVhbCBTVkdFbGVtZW50ICpmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIFNWR0VsZW1lbnQqIG5lYXJlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCBTVkdFbGVtZW50KiBmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0
OwogCiAgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3goKSBjb25zdDsKLSAgICAgICAg
dmlydHVhbCBTVkdNYXRyaXggKmdldENUTSgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFNWR01h
dHJpeCAqZ2V0U2NyZWVuQ1RNKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgU1ZHTWF0cml4ICpn
ZXRUcmFuc2Zvcm1Ub0VsZW1lbnQoU1ZHRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKSBjb25zdCB7
IHJldHVybiAwOyB9Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVu
ZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVk
KHN0eWxlKTsgfQotICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpOwotICAgICAgICB2aXJ0dWFs
IGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlICopIGNvbnN0OworICAgICAgICB2
aXJ0dWFsIFNWR01hdHJpeCogZ2V0Q1RNKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgU1ZHTWF0
cml4KiBnZXRTY3JlZW5DVE0oKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTVkdNYXRyaXgqIGdl
dFRyYW5zZm9ybVRvRWxlbWVudChTVkdFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKworICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5k
ZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQo
c3R5bGUpOyB9CisgICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjaGlsZFNo
b3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIGF0
dGFjaCgpOwotICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeCAqbG9jYWxNYXRyaXgoKSBjb25zdDsK
KyAgICAgICAgdmlydHVhbCBTVkdNYXRyaXgqIGxvY2FsTWF0cml4KCkgY29uc3Q7CiAgICAgICAg
IAotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTG9jYWxUcmFuc2Zvcm0oU1ZHVHJhbnNmb3Jt
TGlzdCAqbG9jYWxUcmFuc2Zvcm1zKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxvY2Fs
VHJhbnNmb3JtKFNWR1RyYW5zZm9ybUxpc3QqKTsKICAgICAgICAgCiAgICAgcHJvdGVjdGVkOgog
ICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gdGhpczsgfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dFBvc2l0aW9u
aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDAxKQorKysgV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1h
bm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdAogCkBAIC0yMiwxNyArMjIsMTYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lm
ZGVmIFNWR19TVVBQT1JUCi0jaW5jbHVkZSAiQXR0ci5oIgorI2luY2x1ZGUgIlNWR1RleHRQb3Np
dGlvbmluZ0VsZW1lbnQuaCIKIAotI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZH
SGVscGVyLmgiCi0jaW5jbHVkZSAiU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oIgogI2luY2x1
ZGUgIlNWR0xlbmd0aExpc3QuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNW
R051bWJlckxpc3QuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OlNWR1RleHRQb3NpdGlvbmluZ0Vs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKK1NWR1Rl
eHRQb3NpdGlvbmluZ0VsZW1lbnQ6OlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR1RleHRDb250ZW50
RWxlbWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX3gobmV3IFNWR0xlbmd0aExpc3QpCiAgICAg
LCBtX3kobmV3IFNWR0xlbmd0aExpc3QpCkBAIC01Miw3ICs1MSw3IEBAIEFOSU1BVEVEX1BST1BF
UlRZX0RFRklOSVRJT05TKFNWR1RleHRQb3MKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05T
KFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQsIFNWR0xlbmd0aExpc3QqLCBMZW5ndGhMaXN0LCBs
ZW5ndGhMaXN0LCBEeSwgZHksIFNWR05hbWVzOjpkeUF0dHIubG9jYWxOYW1lKCksIG1fZHkuZ2V0
KCkpCiBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdUZXh0UG9zaXRpb25pbmdFbGVt
ZW50LCBTVkdOdW1iZXJMaXN0KiwgTnVtYmVyTGlzdCwgbnVtYmVyTGlzdCwgUm90YXRlLCByb3Rh
dGUsIFNWR05hbWVzOjpyb3RhdGVBdHRyLmxvY2FsTmFtZSgpLCBtX3JvdGF0ZS5nZXQoKSkKIAot
dm9pZCBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICAKQEAgLTcwLDYgKzY5LDggQEAgdm9pZCBT
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpwYXJzZU1hcAogICAgICAgICBTVkdUZXh0Q29udGVu
dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCit9CisKIC8vIHZpbTp0
cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oCShyZXZpc2lvbiAxNzAwMSkKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29s
YXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwg
MjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAw
NSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUK
ICAgICAgICAgdmlydHVhbCB+U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCgpOwogCiAgICAgICAg
IC8vICdTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhT
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LCBTVkdMZW5ndGhMaXN0KiwgUmVmUHRyPFNWR0xlbmd0
aExpc3Q+LCBYLCB4KQo=
</data>
<flag name="review"
          id="3735"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11052</attachid>
            <date>2006-10-12 13:09:54 -0700</date>
            <delta_ts>2006-10-31 11:19:23 -0800</delta_ts>
            <desc>First attempt</desc>
            <filename>11217-structure.diff</filename>
            <type>text/plain</type>
            <size>42321</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzAxNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODYgQEAKKzIwMDYtMTAtMTIgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIHN2ZyBzdHJ1Y3R1
cmUgY2xhc3Nlcy4KKworICAgICAgICAqIGtzdmcyL3N2Zy9TVkdEZWZzRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdEZWZzRWxlbWVudDo6U1ZHRGVmc0VsZW1lbnQpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdEZWZzRWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdE
ZXNjRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdEZXNjRWxlbWVudDo6U1ZHRGVz
Y0VsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdEZXNjRWxlbWVudC5oOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdEb2N1bWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6Om93bmVyU1ZHRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojp2aWV3cG9ydEVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcik6CisgICAgICAg
ICoga3N2ZzIvc3ZnL1NWR0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OnN2Z19keW5hbWlj
X2Nhc3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudEluc3RhbmNlOjpTVkdFbGVtZW50SW5zdGFuY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudEluc3RhbmNlOjpjb3JyZXNwb25kaW5nRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OmNvcnJlc3BvbmRpbmdV
c2VFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRJbnN0YW5jZTo6cGFyZW50
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OmNoaWxkTm9kZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudEluc3RhbmNlOjpwcmV2aW91c1NpYmxpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudEluc3RhbmNlOjpuZXh0U2libGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OmZpcnN0Q2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRWxlbWVudEluc3RhbmNlOjpsYXN0Q2hpbGQpOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRWxl
bWVudEluc3RhbmNlTGlzdC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0VsZW1lbnRJbnN0
YW5jZUxpc3QuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHR0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHR0VsZW1lbnQ6OlNWR0dFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0dFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdEdW1teUVsZW1lbnQ6OlNWR0R1bW15RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NW
R0dFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdHRWxlbWVudDo6cmVuZGVyZXJJc05l
ZWRlZCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdJbWFnZUVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1NWR0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6U1ZHU1ZHRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpwaXhlbFVuaXRUb01pbGxpbWV0
ZXJYKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OnBpeGVsVW5pdFRvTWlsbGlt
ZXRlclkpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y3VycmVudFNjYWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OnNldEN1cnJlbnRTY2FsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjdXJyZW50VHJhbnNsYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmdldEludGVyc2VjdGlvbkxpc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Z2V0RW5jbG9zdXJlTGlzdCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHQW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZH
RWxlbWVudDo6Y3JlYXRlU1ZHTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1l
bnQ6OmNyZWF0ZVNWR1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50
OjpjcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NW
R0VsZW1lbnQ6OmdldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpnZXRT
Y3JlZW5DVE0pOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTVkdFbGVtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTd2l0
Y2hFbGVtZW50OjpTVkdTd2l0Y2hFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N3aXRj
aEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIGtzdmcyL3N2
Zy9TVkdTd2l0Y2hFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdTd2l0Y2hFbGVtZW50
OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU3ltYm9sRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTeW1ib2xFbGVtZW50OjpTVkdTeW1ib2xFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N5bWJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU3ltYm9sRWxlbWVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6c2hvdWxkQXR0YWNoQ2hpbGQpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdUaXRsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGl0bGVFbGVtZW50OjpTVkdUaXRsZUVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdU
aXRsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjpjbG9zZVJlbmRlcmVyKToKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxl
bWVudDo6cmVuZGVyZXJJc05lZWRlZCk6CisKIDIwMDYtMTAtMTIgIEFkYW0gUm9iZW4gIDxhcm9i
ZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEh5YXR0LgpJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRGVmc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0RlZnNFbGVtZW50LmNwcAkocmV2aXNpb24gMTcwMTQpCisrKyBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdEZWZzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdp
bGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAogCkBAIC0yMywxMSArMjMsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdf
U1VQUE9SVAogI2luY2x1ZGUgIlNWR0RlZnNFbGVtZW50LmgiCisKICNpbmNsdWRlICJSZW5kZXJT
VkdDb250YWluZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdEZWZzRWxlbWVudDo6
U1ZHRGVmc0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRv
YykKK1NWR0RlZnNFbGVtZW50OjpTVkdEZWZzRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQodGFnTmFtZSwgZG9jKQogICAgICwgU1ZHVGVzdHMoKQogICAgICwgU1ZHTGFuZ1NwYWNlKCkK
SW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0RlZnNFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRGVmc0VsZW1lbnQuaAkocmV2aXNpb24gMTcwMTQpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdEZWZzRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJt
YW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RF
IHByb2plY3QKIApAQCAtMjQsMTcgKzI0LDE3IEBACiAjZGVmaW5lIFNWR0RlZnNFbGVtZW50SW1w
bF9ICiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAorI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQuaCIKKyNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIKICNpbmNsdWRlICJTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1Rlc3RzLmgiCi0jaW5jbHVk
ZSAiU1ZHTGFuZ1NwYWNlLmgiCi0jaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewogICAgIGNsYXNzIFNWR0RlZnNFbGVtZW50IDog
cHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHTGFuZ1NwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQKICAgICB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdE
ZWZzRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKSW5kZXg6IFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRG9jdW1lbnQuaAkocmV2aXNpb24gMTcwMTQpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdEb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+
Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Cisg
ICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMzQsNyAr
MzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBTVkdEb2N1bWVudCA6IHB1
YmxpYyBEb2N1bWVudCB7CiAgICAgcHVibGljOgotICAgICAgICBTVkdEb2N1bWVudChET01JbXBs
ZW1lbnRhdGlvbiAqaSwgRnJhbWVWaWV3ICp2aWV3KTsKKyAgICAgICAgU1ZHRG9jdW1lbnQoRE9N
SW1wbGVtZW50YXRpb24qIGksIEZyYW1lVmlldyogdmlldyk7CiAgICAgICAgIHZpcnR1YWwgflNW
R0RvY3VtZW50KCk7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdEb2N1bWVu
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0Vs
ZW1lbnRJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxl
bWVudEluc3RhbmNlLmNwcAkocmV2aXNpb24gMTcwMTQpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdFbGVtZW50SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94
QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApA
QCAtMjIsMTQgKzIyLDE1IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQ
UE9SVAotI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdVc2VFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCisKICNpbmNsdWRlICJTVkdFbGVtZW50
SW5zdGFuY2VMaXN0LmgiCisjaW5jbHVkZSAiU1ZHVXNlRWxlbWVudC5oIgogCi11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRWxlbWVudEluc3RhbmNl
OjpTVkdFbGVtZW50SW5zdGFuY2UoKSA6IEV2ZW50VGFyZ2V0KCkKK1NWR0VsZW1lbnRJbnN0YW5j
ZTo6U1ZHRWxlbWVudEluc3RhbmNlKCkKKyAgICA6IEV2ZW50VGFyZ2V0KCkKIHsKIH0KIApAQCAt
MzcsNDYgKzM4LDQ4IEBAIFNWR0VsZW1lbnRJbnN0YW5jZTo6flNWR0VsZW1lbnRJbnN0YW5jZSgK
IHsKIH0KIAotU1ZHRWxlbWVudCAqU1ZHRWxlbWVudEluc3RhbmNlOjpjb3JyZXNwb25kaW5nRWxl
bWVudCgpIGNvbnN0CitTVkdFbGVtZW50KiBTVkdFbGVtZW50SW5zdGFuY2U6OmNvcnJlc3BvbmRp
bmdFbGVtZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotU1ZHVXNlRWxlbWVudCAq
U1ZHRWxlbWVudEluc3RhbmNlOjpjb3JyZXNwb25kaW5nVXNlRWxlbWVudCgpIGNvbnN0CitTVkdV
c2VFbGVtZW50KiBTVkdFbGVtZW50SW5zdGFuY2U6OmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotU1ZHRWxlbWVudEluc3RhbmNlICpTVkdFbGVt
ZW50SW5zdGFuY2U6OnBhcmVudE5vZGUoKSBjb25zdAorU1ZHRWxlbWVudEluc3RhbmNlKiBTVkdF
bGVtZW50SW5zdGFuY2U6OnBhcmVudE5vZGUoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQog
Ci1TVkdFbGVtZW50SW5zdGFuY2VMaXN0ICpTVkdFbGVtZW50SW5zdGFuY2U6OmNoaWxkTm9kZXMo
KSBjb25zdAorU1ZHRWxlbWVudEluc3RhbmNlTGlzdCogU1ZHRWxlbWVudEluc3RhbmNlOjpjaGls
ZE5vZGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotU1ZHRWxlbWVudEluc3RhbmNl
ICpTVkdFbGVtZW50SW5zdGFuY2U6OnByZXZpb3VzU2libGluZygpIGNvbnN0CitTVkdFbGVtZW50
SW5zdGFuY2UqIFNWR0VsZW1lbnRJbnN0YW5jZTo6cHJldmlvdXNTaWJsaW5nKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gMDsKIH0KIAotU1ZHRWxlbWVudEluc3RhbmNlICpTVkdFbGVtZW50SW5zdGFu
Y2U6Om5leHRTaWJsaW5nKCkgY29uc3QKK1NWR0VsZW1lbnRJbnN0YW5jZSogU1ZHRWxlbWVudElu
c3RhbmNlOjpuZXh0U2libGluZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNWR0Vs
ZW1lbnRJbnN0YW5jZSAqU1ZHRWxlbWVudEluc3RhbmNlOjpmaXJzdENoaWxkKCkgY29uc3QKK1NW
R0VsZW1lbnRJbnN0YW5jZSogU1ZHRWxlbWVudEluc3RhbmNlOjpmaXJzdENoaWxkKCkgY29uc3QK
IHsKICAgICByZXR1cm4gMDsKIH0KIAotU1ZHRWxlbWVudEluc3RhbmNlICpTVkdFbGVtZW50SW5z
dGFuY2U6Omxhc3RDaGlsZCgpIGNvbnN0CitTVkdFbGVtZW50SW5zdGFuY2UqIFNWR0VsZW1lbnRJ
bnN0YW5jZTo6bGFzdENoaWxkKCkgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAorfQorCiAv
LyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmgJKHJldmlzaW9uIDE3MDE0KQorKysgV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4g
PHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJv
amVjdAogCkBAIC0yNCw3ICsyNCw3IEBACiAjZGVmaW5lIEtTVkdfU1ZHRWxlbWVudEluc3RhbmNl
SW1wbF9ICiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAotI2luY2x1ZGUgPGtkb20vZXZlbnRzL0V2ZW50
VGFyZ2V0Lmg+CisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUK
IHsKQEAgLTM4LDE1ICszOCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFs
IH5TVkdFbGVtZW50SW5zdGFuY2UoKTsKIAogICAgICAgICAvLyAnU1ZHRWxlbWVudEluc3RhbmNl
JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHRWxlbWVudCAqY29ycmVzcG9uZGluZ0VsZW1lbnQoKSBj
b25zdDsKLSAgICAgICAgU1ZHVXNlRWxlbWVudCAqY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQoKSBj
b25zdDsKKyAgICAgICAgU1ZHRWxlbWVudCogY29ycmVzcG9uZGluZ0VsZW1lbnQoKSBjb25zdDsK
KyAgICAgICAgU1ZHVXNlRWxlbWVudCogY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQoKSBjb25zdDsK
IAotICAgICAgICBTVkdFbGVtZW50SW5zdGFuY2UgKnBhcmVudE5vZGUoKSBjb25zdDsKLSAgICAg
ICAgU1ZHRWxlbWVudEluc3RhbmNlTGlzdCAqY2hpbGROb2RlcygpIGNvbnN0OwotICAgICAgICBT
VkdFbGVtZW50SW5zdGFuY2UgKnByZXZpb3VzU2libGluZygpIGNvbnN0OwotICAgICAgICBTVkdF
bGVtZW50SW5zdGFuY2UgKm5leHRTaWJsaW5nKCkgY29uc3Q7Ci0gICAgICAgIFNWR0VsZW1lbnRJ
bnN0YW5jZSAqZmlyc3RDaGlsZCgpIGNvbnN0OwotICAgICAgICBTVkdFbGVtZW50SW5zdGFuY2Ug
Kmxhc3RDaGlsZCgpIGNvbnN0OworICAgICAgICBTVkdFbGVtZW50SW5zdGFuY2UqIHBhcmVudE5v
ZGUoKSBjb25zdDsKKyAgICAgICAgU1ZHRWxlbWVudEluc3RhbmNlTGlzdCogY2hpbGROb2Rlcygp
IGNvbnN0OworICAgICAgICBTVkdFbGVtZW50SW5zdGFuY2UqIHByZXZpb3VzU2libGluZygpIGNv
bnN0OworICAgICAgICBTVkdFbGVtZW50SW5zdGFuY2UqIG5leHRTaWJsaW5nKCkgY29uc3Q7Cisg
ICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZSogZmlyc3RDaGlsZCgpIGNvbnN0OworICAgICAgICBT
VkdFbGVtZW50SW5zdGFuY2UqIGxhc3RDaGlsZCgpIGNvbnN0OwogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsZW1lbnRJbnN0YW5j
ZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsZW1lbnRJbnN0
YW5jZUxpc3QuY3BwCShyZXZpc2lvbiAxNzAxNCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0Vs
ZW1lbnRJbnN0YW5jZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94
QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApA
QCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWZkZWYgU1ZHX1NVUFBP
UlQKLQogI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZUxpc3QuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZUxpc3Qu
aAkocmV2aXNpb24gMTcwMTQpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50SW5zdGFu
Y2VMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAg
ICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAg
ICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAog
ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNSw4ICsyNSw4
IEBACiAKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSAiU1ZHTGlzdC5oIgogI2luY2x1
ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgorI2luY2x1ZGUgIlNWR0xpc3QuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUKIHsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0dFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE3MDE0KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlr
b2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAy
MDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjQsMTIgKzI0LDExIEBACiAjaWZkZWYgU1ZHX1NV
UFBPUlQKICNpbmNsdWRlICJTVkdHRWxlbWVudC5oIgogCi0jaW5jbHVkZSA8a2NhbnZhcy9SZW5k
ZXJTVkdDb250YWluZXIuaD4KLSNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2
aWNlLmg+CisjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotU1ZHR0VsZW1lbnQ6OlNWR0dFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50ICpkb2MpCitTVkdHRWxlbWVudDo6U1ZHR0VsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIFNWR1Rlc3RzKCkKICAgICAsIFNW
R0xhbmdTcGFjZSgpCkBAIC00MSw3ICs0MCw3IEBAIFNWR0dFbGVtZW50Ojp+U1ZHR0VsZW1lbnQo
KQogewogfQogCi12b2lkIFNWR0dFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR0dFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTgsNyArNTcsNyBAQCBSZW5kZXJP
YmplY3QqIFNWR0dFbGVtZW50OjpjcmVhdGVSZW5kZXJlCiB9CiAKIC8vIEhlbHBlciBjbGFzcyBm
b3IgPHVzZT4gc3VwcG9ydAotU1ZHRHVtbXlFbGVtZW50OjpTVkdEdW1teUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKK1NWR0R1bW15RWxlbWVudDo6
U1ZHRHVtbXlFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2MpCiAgICAgOiBTVkdHRWxlbWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCAgbV9sb2NhbE5hbWUo
ImR1bW15IikKIHsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0dFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHR0VsZW1lbnQuaAkocmV2aXNpb24gMTcwMTQp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
S0RFIHByb2plY3QKIApAQCAtMjQsMTcgKzI0LDE3IEBACiAjZGVmaW5lIEtTVkdfU1ZHR0VsZW1l
bnRJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCisjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZC5oIgorI2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5oIgogI2luY2x1ZGUgIlNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVGVzdHMuaCIKLSNp
bmNsdWRlICJTVkdMYW5nU3BhY2UuaCIKLSNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7CiAgICAgY2xhc3MgU1ZHR0VsZW1lbnQg
OiBwdWJsaWMgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1YmxpYyBTVkdMYW5nU3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlj
IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1
YmxpYyBTVkdUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdMYW5nU3Bh
Y2UsCisgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZAogICAgIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNWR0dFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpAQCAtNDIsMTAgKzQyLDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlCiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogCi0gICAgICAg
IHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1
cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KLSAgICAgICAgdmly
dHVhbCBSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVu
ZGVyU3R5bGUgKnN0eWxlKTsKKyAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQo
UmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVl
ZGVkKHN0eWxlKTsgfQorICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVy
ZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAg
ICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gdGhpczsgfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNzAxNCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAg
ICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAg
IDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAgICAgICAgICAgICAg
ICAgIDIwMDYgICAgICAgQWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZAa2RlLm9yZz4KIAogICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdApAQCAtMjUsMTkgKzI1LDE3IEBA
CiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdJbWFnZUVsZW1lbnQuaCIKIAotI2lu
Y2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAi
S0NhbnZhc0ltYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHSW1hZ2UuaCIKLSNpbmNsdWRlICJTVkdMZW5ndGguaCIKLSNpbmNsdWRlICJT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJTVkdIZWxwZXIuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgorI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKICNpbmNsdWRlICJT
VkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRl
clNWR0NvbnRhaW5lci5oIgotI2luY2x1ZGUgIktDYW52YXNJbWFnZS5oIgotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTcsNyArOTUsNyBA
QCB2b2lkIFNWR0ltYWdlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1CiAgICAgfQogfQogCi1S
ZW5kZXJPYmplY3QgKlNWR0ltYWdlRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEg
KmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpCitSZW5kZXJPYmplY3QqIFNWR0ltYWdlRWxlbWVu
dDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUp
CiB7CiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR0ltYWdlKHRoaXMpOwogfQpJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDE3MDE0KQorKysgV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1h
bm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdAogCkBAIC0yNCwxMiArMjQsMTIgQEAKICNkZWZpbmUgS1NWR19TVkdJbWFnZUVsZW1l
bnRJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSAiU1ZHVGVzdHMuaCIKLSNp
bmNsdWRlICJTVkdJbWFnZUxvYWRlci5oIgorI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQuaCIKICNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIKLSNpbmNsdWRlICJTVkdVUklS
ZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJTVkdJbWFnZUxvYWRlci5oIgogI2luY2x1ZGUgIlNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZC5oIgorI2luY2x1ZGUgIlNWR1Rlc3RzLmgiCisjaW5jbHVkZSAiU1ZHVVJJUmVm
ZXJlbmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7CkBAIC0zOCwxMCArMzgsMTAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUKICAgICBjbGFzcyBTVkdEb2N1bWVudDsKIAogICAgIGNsYXNzIFNWR0lt
YWdlRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1VSSVJlZmVyZW5jZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdVUklSZWZlcmVuY2UKICAgICB7CiAgICAgcHVibGlj
OgogICAgICAgICBTVkdJbWFnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CkBAIC01MCwxMSArNTAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVh
bCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAK
ICAgICAgICAgLy8gJ1NWR0ltYWdlRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgcmVu
ZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6
OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9Ci0gICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0
ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSk7
CisgICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSosIFJlbmRlclN0eWxlKik7CiAgICAgICAgIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmly
dHVhbCBib29sIGhhdmVMb2FkZWRSZXF1aXJlZFJlc291cmNlcygpOwpJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDE0KQorKysgV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hA
a2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBA
IC0zMCwxNiArMzAsMTMgQEAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiS1NWR1RpbWVTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTVkdDb250YWluZXIuaCIKICNpbmNsdWRlICJTVkdBbmdsZS5oIgogI2luY2x1ZGUgIlNWR0xl
bmd0aC5oIgotI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKLSNpbmNsdWRlICJT
VkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTVkdNYXRyaXguaCIKKyNpbmNsdWRl
ICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCiAj
aW5jbHVkZSAiU1ZHWm9vbUV2ZW50LmgiCi0jaW5jbHVkZSAia3N2Zy5oIgotI2luY2x1ZGUgPGtj
YW52YXMvUmVuZGVyU1ZHQ29udGFpbmVyLmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1Jl
bmRlcmluZ0RldmljZS5oPgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDcsNyArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiAKLVNWR1NWR0Vs
ZW1lbnQ6OlNWR1NWR0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQgKmRvYykKK1NWR1NWR0VsZW1lbnQ6OlNWR1NWR0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR1N0eWxlZExvY2F0YWJsZUVsZW1l
bnQodGFnTmFtZSwgZG9jKQogICAgICwgU1ZHVGVzdHMoKQogICAgICwgU1ZHTGFuZ1NwYWNlKCkK
QEAgLTExNCw5ICsxMTEsOSBAQCBGbG9hdFJlY3QgU1ZHU1ZHRWxlbWVudDo6dmlld3BvcnQoKSBj
b25zCiBmbG9hdCBTVkdTVkdFbGVtZW50OjpwaXhlbFVuaXRUb01pbGxpbWV0ZXJYKCkgY29uc3QK
IHsKICNpZiAwCi0gICAgaWYob3duZXJEb2N1bWVudCgpICYmIG93bmVyRG9jdW1lbnQoKS0+cGFp
bnREZXZpY2VNZXRyaWNzKCkpCisgICAgaWYgKG93bmVyRG9jdW1lbnQoKSAmJiBvd25lckRvY3Vt
ZW50KCktPnBhaW50RGV2aWNlTWV0cmljcygpKQogICAgIHsKLSAgICAgICAgUTNQYWludERldmlj
ZU1ldHJpY3MgKm1ldHJpY3MgPSBvd25lckRvY3VtZW50KCktPnBhaW50RGV2aWNlTWV0cmljcygp
OworICAgICAgICBRM1BhaW50RGV2aWNlTWV0cmljcyogbWV0cmljcyA9IG93bmVyRG9jdW1lbnQo
KS0+cGFpbnREZXZpY2VNZXRyaWNzKCk7CiAgICAgICAgIHJldHVybiBmbG9hdChtZXRyaWNzLT53
aWR0aE1NKCkpIC8gZmxvYXQobWV0cmljcy0+d2lkdGgoKSk7CiAgICAgfQogI2VuZGlmCkBAIC0x
MjcsOSArMTI0LDkgQEAgZmxvYXQgU1ZHU1ZHRWxlbWVudDo6cGl4ZWxVbml0VG9NaWxsaW1ldAog
ZmxvYXQgU1ZHU1ZHRWxlbWVudDo6cGl4ZWxVbml0VG9NaWxsaW1ldGVyWSgpIGNvbnN0CiB7CiAj
aWYgMAotICAgIGlmKG93bmVyRG9jdW1lbnQoKSAmJiBvd25lckRvY3VtZW50KCktPnBhaW50RGV2
aWNlTWV0cmljcygpKQorICAgIGlmIChvd25lckRvY3VtZW50KCkgJiYgb3duZXJEb2N1bWVudCgp
LT5wYWludERldmljZU1ldHJpY3MoKSkKICAgICB7Ci0gICAgICAgIFEzUGFpbnREZXZpY2VNZXRy
aWNzICptZXRyaWNzID0gb3duZXJEb2N1bWVudCgpLT5wYWludERldmljZU1ldHJpY3MoKTsKKyAg
ICAgICAgUTNQYWludERldmljZU1ldHJpY3MqIG1ldHJpY3MgPSBvd25lckRvY3VtZW50KCktPnBh
aW50RGV2aWNlTWV0cmljcygpOwogICAgICAgICByZXR1cm4gZmxvYXQobWV0cmljcy0+aGVpZ2h0
TU0oKSkgLyBmbG9hdChtZXRyaWNzLT5oZWlnaHQoKSk7CiAgICAgfQogI2VuZGlmCkBAIC0xNTks
NyArMTU2LDcgQEAgdm9pZCBTVkdTVkdFbGVtZW50OjpzZXRVc2VDdXJyZW50VmlldyhibwogCiBm
bG9hdCBTVkdTVkdFbGVtZW50OjpjdXJyZW50U2NhbGUoKSBjb25zdAogewotICAgIC8vaWYoIWNh
bnZhc1ZpZXcoKSkKKyAgICAvL2lmICghY2FudmFzVmlldygpKQogICAgICAgICByZXR1cm4gMS47
CiAKICAgICAvL3JldHVybiBjYW52YXNWaWV3KCktPnpvb20oKTsKQEAgLTE2Nyw3ICsxNjQsNyBA
QCBmbG9hdCBTVkdTVkdFbGVtZW50OjpjdXJyZW50U2NhbGUoKSBjb25zCiAKIHZvaWQgU1ZHU1ZH
RWxlbWVudDo6c2V0Q3VycmVudFNjYWxlKGZsb2F0IHNjYWxlKQogewotLy8gICAgaWYoY2FudmFz
VmlldygpKQorLy8gICAgaWYgKGNhbnZhc1ZpZXcoKSkKIC8vICAgIHsKIC8vICAgICAgICBmbG9h
dCBvbGR6b29tID0gY2FudmFzVmlldygpLT56b29tKCk7CiAvLyAgICAgICAgY2FudmFzVmlldygp
LT5zZXRab29tKHNjYWxlKTsKQEAgLTE3Nyw3ICsxNzQsNyBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6
OnNldEN1cnJlbnRTY2FsZShmbG9hCiAKIEZsb2F0UG9pbnQgU1ZHU1ZHRWxlbWVudDo6Y3VycmVu
dFRyYW5zbGF0ZSgpIGNvbnN0CiB7Ci0gICAgLy9pZighdmlldygpKQorICAgIC8vaWYgKCF2aWV3
KCkpCiAgICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7CiAKICAgICAvL3JldHVybiBjcmVhdGVT
VkdQb2ludChjYW52YXNWaWV3KCktPnBhbigpKTsKQEAgLTE5Miw3ICsxODksNyBAQCB2b2lkIFNW
R1NWR0VsZW1lbnQ6OmFkZFNWR1dpbmRvd0V2ZW50TGlzCiAgICAgZG9jdW1lbnQoKS0+c2V0SFRN
TFdpbmRvd0V2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lci5yZWxlYXNlKCkpOwogfQog
Ci12b2lkIFNWR1NWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSAqYXR0cikKK3ZvaWQgU1ZHU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRy
LT52YWx1ZSgpOwogICAgIGlmICghbmVhcmVzdFZpZXdwb3J0RWxlbWVudCgpKSB7CkBAIC0yNTgs
MTQgKzI1NSwxNCBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OmZvcmNlUmVkcmF3KCkKICAgICAvLyBU
T0RPCiB9CiAKLU5vZGVMaXN0ICpTVkdTVkdFbGVtZW50OjpnZXRJbnRlcnNlY3Rpb25MaXN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgU1ZHRWxlbWVudCopCitOb2RlTGlzdCogU1ZHU1ZHRWxlbWVu
dDo6Z2V0SW50ZXJzZWN0aW9uTGlzdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFNWR0VsZW1lbnQq
KQogewotICAgIC8vTm9kZUxpc3QgKmxpc3Q7CisgICAgLy9Ob2RlTGlzdCogbGlzdDsKICAgICAv
LyBUT0RPCiAgICAgcmV0dXJuIDA7CiB9CiAKLU5vZGVMaXN0ICpTVkdTVkdFbGVtZW50OjpnZXRF
bmNsb3N1cmVMaXN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgU1ZHRWxlbWVudCopCitOb2RlTGlz
dCogU1ZHU1ZHRWxlbWVudDo6Z2V0RW5jbG9zdXJlTGlzdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IFNWR0VsZW1lbnQqKQogewogICAgIC8vIFRPRE8KICAgICByZXR1cm4gMDsKQEAgLTI5NSwxMiAr
MjkyLDEyIEBAIGZsb2F0IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR051bWJlcigpCiAgICAgcmV0
dXJuIDA7CiB9CiAKLVNWR0xlbmd0aCAqU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTGVuZ3RoKCkK
K1NWR0xlbmd0aCogU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTGVuZ3RoKCkKIHsKICAgICByZXR1
cm4gbmV3IFNWR0xlbmd0aCgwKTsKIH0KIAotU1ZHQW5nbGUgKlNWR1NWR0VsZW1lbnQ6OmNyZWF0
ZVNWR0FuZ2xlKCkKK1NWR0FuZ2xlKiBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdBbmdsZSgpCiB7
CiAgICAgcmV0dXJuIG5ldyBTVkdBbmdsZSgwKTsKIH0KQEAgLTMxMCw3ICszMDcsNyBAQCBGbG9h
dFBvaW50IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1BvaW50CiAgICAgcmV0dXJuIEZsb2F0UG9p
bnQocCk7CiB9CiAKLVNWR01hdHJpeCAqU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTWF0cml4KCkK
K1NWR01hdHJpeCogU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTWF0cml4KCkKIHsKICAgICByZXR1
cm4gbmV3IFNWR01hdHJpeCgpOwogfQpAQCAtMzIwLDI3ICszMTcsMjUgQEAgRmxvYXRSZWN0IFNW
R1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1JlY3QoKQogICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIH0K
IAotU1ZHVHJhbnNmb3JtICpTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdUcmFuc2Zvcm0oKQorU1ZH
VHJhbnNmb3JtKiBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdUcmFuc2Zvcm0oKQogewogICAgIHJl
dHVybiBuZXcgU1ZHVHJhbnNmb3JtKCk7CiB9CiAKLVNWR1RyYW5zZm9ybSAqU1ZHU1ZHRWxlbWVu
dDo6Y3JlYXRlU1ZHVHJhbnNmb3JtRnJvbU1hdHJpeChTVkdNYXRyaXggKm1hdHJpeCkKK1NWR1Ry
YW5zZm9ybSogU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHVHJhbnNmb3JtRnJvbU1hdHJpeChTVkdN
YXRyaXgqIG1hdHJpeCkKIHsgICAgCi0gICAgU1ZHVHJhbnNmb3JtICpvYmogPSBTVkdTVkdFbGVt
ZW50OjpjcmVhdGVTVkdUcmFuc2Zvcm0oKTsKKyAgICBTVkdUcmFuc2Zvcm0qIG9iaiA9IFNWR1NW
R0VsZW1lbnQ6OmNyZWF0ZVNWR1RyYW5zZm9ybSgpOwogICAgIG9iai0+c2V0TWF0cml4KG1hdHJp
eCk7CiAgICAgcmV0dXJuIG9iajsKIH0KIAotU1ZHTWF0cml4ICpTVkdTVkdFbGVtZW50OjpnZXRD
VE0oKSBjb25zdAorU1ZHTWF0cml4KiBTVkdTVkdFbGVtZW50OjpnZXRDVE0oKSBjb25zdAogewot
ICAgIFNWR01hdHJpeCAqbWF0ID0gY3JlYXRlU1ZHTWF0cml4KCk7Ci0gICAgaWYobWF0KQotICAg
IHsKKyAgICBTVkdNYXRyaXgqIG1hdCA9IGNyZWF0ZVNWR01hdHJpeCgpOworICAgIGlmIChtYXQp
IHsKICAgICAgICAgbWF0LT50cmFuc2xhdGUoeCgpLT52YWx1ZSgpLCB5KCktPnZhbHVlKCkpOwog
Ci0gICAgICAgIGlmKGF0dHJpYnV0ZXMoKS0+Z2V0TmFtZWRJdGVtKFNWR05hbWVzOjp2aWV3Qm94
QXR0cikpCi0gICAgICAgIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMoKS0+Z2V0TmFtZWRJdGVt
KFNWR05hbWVzOjp2aWV3Qm94QXR0cikpIHsKICAgICAgICAgICAgIFJlZlB0cjxTVkdNYXRyaXg+
IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoKCktPnZhbHVlKCksIGhlaWdo
dCgpLT52YWx1ZSgpKTsKICAgICAgICAgICAgIG1hdC0+bXVsdGlwbHkodmlld0JveC5nZXQoKSk7
CiAgICAgICAgIH0KQEAgLTM0OSwxMCArMzQ0LDEwIEBAIFNWR01hdHJpeCAqU1ZHU1ZHRWxlbWVu
dDo6Z2V0Q1RNKCkgY29uc3QKICAgICByZXR1cm4gbWF0OwogfQogCi1TVkdNYXRyaXggKlNWR1NW
R0VsZW1lbnQ6OmdldFNjcmVlbkNUTSgpIGNvbnN0CitTVkdNYXRyaXgqIFNWR1NWR0VsZW1lbnQ6
OmdldFNjcmVlbkNUTSgpIGNvbnN0CiB7Ci0gICAgU1ZHTWF0cml4ICptYXQgPSBTVkdTdHlsZWRM
b2NhdGFibGVFbGVtZW50OjpnZXRTY3JlZW5DVE0oKTsKLSAgICBpZihtYXQpIHsKKyAgICBTVkdN
YXRyaXgqIG1hdCA9IFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpOwor
ICAgIGlmIChtYXQpIHsKICAgICAgICAgbWF0LT50cmFuc2xhdGUoeCgpLT52YWx1ZSgpLCB5KCkt
PnZhbHVlKCkpOwogCiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKCktPmdldE5hbWVkSXRlbShTVkdO
YW1lczo6dmlld0JveEF0dHIpKSB7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVudC5oCShy
ZXZpc2lvbiAxNzAxNCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAg
ICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAg
MjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDE2ICsyNCwxNSBAQAogI2RlZmlu
ZSBTVkdTVkdFbGVtZW50X0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSAiU1ZHVGVz
dHMuaCIKLSNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIKKyNpbmNsdWRlICJTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkLmgiCiAjaW5jbHVkZSAiU1ZHRml0VG9WaWV3Qm94LmgiCi0jaW5jbHVk
ZSAiU1ZHWm9vbUFuZFBhbi5oIgorI2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5oIgogI2luY2x1ZGUg
IlNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkLmgiCisjaW5jbHVkZSAiU1ZHVGVzdHMuaCIKKyNpbmNsdWRlICJTVkdab29t
QW5kUGFuLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgRG9jdW1lbnRQdHI7
CiAgICAgY2xhc3MgU1ZHQW5nbGU7CiAgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFNW
R01hdHJpeDsKQEAgLTQxLDExICs0MCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgIGNsYXNz
IFNWR0xlbmd0aDsKICAgICBjbGFzcyBUaW1lU2NoZWR1bGVyOwogICAgIGNsYXNzIFNWR1NWR0Vs
ZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1YmxpYyBTVkdMYW5nU3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1YmxpYyBTVkdGaXRUb1ZpZXdCb3gsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgU1ZHWm9vbUFuZFBhbgorICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgU1ZHVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdM
YW5nU3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRml0
VG9WaWV3Qm94LAorICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHWm9vbUFuZFBh
bgogICAgIHsKICAgICBwdWJsaWM6CiAgICAgICAgIGVudW0gU1ZHWm9vbUFuZFBhblR5cGUgewpA
QCAtNzgsNyArNzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICBib29sIHVzZUN1cnJl
bnRWaWV3KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0VXNlQ3VycmVudFZpZXcoYm9vbCBjdXJy
ZW50Vmlldyk7CiAKLSAgICAgICAgLy8gU1ZHVmlld1NwZWMgKmN1cnJlbnRWaWV3KCkgY29uc3Q7
CisgICAgICAgIC8vIFNWR1ZpZXdTcGVjKiBjdXJyZW50VmlldygpIGNvbnN0OwogCiAgICAgICAg
IGZsb2F0IGN1cnJlbnRTY2FsZSgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEN1cnJlbnRTY2Fs
ZShmbG9hdCBzY2FsZSk7CkBAIC05OSw4ICs5OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAg
ICAgIHZvaWQgdW5zdXNwZW5kUmVkcmF3QWxsKCk7CiAgICAgICAgIHZvaWQgZm9yY2VSZWRyYXco
KTsKIAotICAgICAgICBOb2RlTGlzdCogZ2V0SW50ZXJzZWN0aW9uTGlzdChjb25zdCBGbG9hdFJl
Y3QmLCBTVkdFbGVtZW50ICpyZWZlcmVuY2VFbGVtZW50KTsKLSAgICAgICAgTm9kZUxpc3QqIGdl
dEVuY2xvc3VyZUxpc3QoY29uc3QgRmxvYXRSZWN0JiwgU1ZHRWxlbWVudCAqcmVmZXJlbmNlRWxl
bWVudCk7CisgICAgICAgIE5vZGVMaXN0KiBnZXRJbnRlcnNlY3Rpb25MaXN0KGNvbnN0IEZsb2F0
UmVjdCYsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZUVsZW1lbnQpOworICAgICAgICBOb2RlTGlzdCog
Z2V0RW5jbG9zdXJlTGlzdChjb25zdCBGbG9hdFJlY3QmLCBTVkdFbGVtZW50KiByZWZlcmVuY2VF
bGVtZW50KTsKICAgICAgICAgYm9vbCBjaGVja0ludGVyc2VjdGlvbihTVkdFbGVtZW50KiwgY29u
c3QgRmxvYXRSZWN0Jik7CiAgICAgICAgIGJvb2wgY2hlY2tFbmNsb3N1cmUoU1ZHRWxlbWVudCos
IGNvbnN0IEZsb2F0UmVjdCYpOwogICAgICAgICB2b2lkIGRlc2VsZWN0QWxsKCk7CkBAIC0xMTQs
MTUgKzExMywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICBzdGF0aWMgU1ZHVHJhbnNm
b3JtKiBjcmVhdGVTVkdUcmFuc2Zvcm0oKTsKICAgICAgICAgc3RhdGljIFNWR1RyYW5zZm9ybSog
Y3JlYXRlU1ZHVHJhbnNmb3JtRnJvbU1hdHJpeChTVkdNYXRyaXgqKTsKIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSop
OwogCiAgICAgICAgIC8vICd2aXJ0dWFsIFNWR0xvY2F0YWJsZScgZnVuY3Rpb25zCi0gICAgICAg
IHZpcnR1YWwgU1ZHTWF0cml4ICpnZXRDVE0oKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBTVkdN
YXRyaXggKmdldFNjcmVlbkNUTSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeCog
Z2V0Q1RNKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgU1ZHTWF0cml4KiBnZXRTY3JlZW5DVE0o
KSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJT
dHlsZSogc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5
bGUpOyB9CisgICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAKLSAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVy
SXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5k
ZXJlcklzTmVlZGVkKHN0eWxlKTsgfQotICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3Jl
YXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpOwotICAg
ICAgICAKICAgICAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzAxNCkKKysrIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5u
IDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHBy
b2plY3QKIApAQCAtMjIsMjEgKzIyLDE4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRl
ZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgIkF0dHIuaCIKLQotI2luY2x1ZGUgPGtjYW52YXMvUmVu
ZGVyU1ZHQ29udGFpbmVyLmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0Rl
dmljZS5oPgorI2luY2x1ZGUgIlNWR1N3aXRjaEVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIlJlbmRl
clNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHSGVs
cGVyLmgiCi0jaW5jbHVkZSAiU1ZHVGVzdHMuaCIKLSNpbmNsdWRlICJTVkdTd2l0Y2hFbGVtZW50
LmgiCi0jaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZH
U3dpdGNoRWxlbWVudDo6U1ZHU3dpdGNoRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCAqZG9jKQotOiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCh0YWdO
YW1lLCBkb2MpLCBTVkdUZXN0cygpLCBTVkdMYW5nU3BhY2UoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZCgpCitTVkdTd2l0Y2hFbGVtZW50OjpTVkdTd2l0Y2hFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBTVkdUZXN0cygpCisgICAgLCBT
VkdMYW5nU3BhY2UoKQorICAgICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCiB7CiB9
CiAKQEAgLTQ0LDEwICs0MSwxMCBAQCBTVkdTd2l0Y2hFbGVtZW50Ojp+U1ZHU3dpdGNoRWxlbWVu
dCgpCiB7CiB9CiAKLWJvb2wgU1ZHU3dpdGNoRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5k
ZXJlcihOb2RlICpjaGlsZCkgY29uc3QKK2Jvb2wgU1ZHU3dpdGNoRWxlbWVudDo6Y2hpbGRTaG91
bGRDcmVhdGVSZW5kZXJlcihOb2RlKiBjaGlsZCkgY29uc3QKIHsKLSAgICBmb3IgKE5vZGUgKm4g
PSBmaXJzdENoaWxkKCk7IG4gIT0gMDsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAg
U1ZHRWxlbWVudCAqZWxlbWVudCA9IHN2Z19keW5hbWljX2Nhc3Qobik7CisgICAgZm9yIChOb2Rl
KiBuID0gZmlyc3RDaGlsZCgpOyBuICE9IDA7IG4gPSBuLT5uZXh0U2libGluZygpKSB7CisgICAg
ICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdmdfZHluYW1pY19jYXN0KG4pOwogICAgICAgICBp
ZiAoZWxlbWVudCAmJiBlbGVtZW50LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gKG4g
PT0gY2hpbGQpOyAvLyBPbmx5IGFsbG93IHRoaXMgY2hpbGQgaWYgaXQncyB0aGUgZmlyc3QgdmFs
aWQgY2hpbGQKICAgICB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3dpdGNoRWxlbWVudC5oCShy
ZXZpc2lvbiAxNzAxNCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N3aXRjaEVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAg
ICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAg
ICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDE3ICsyNCwxNyBAQAogI2Rl
ZmluZSBLU1ZHX1NWR1N3aXRjaEVsZW1lbnRJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0j
aW5jbHVkZSAiU1ZHVGVzdHMuaCIKKyNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkLmgiCiAjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkLmgiCisjaW5jbHVkZSAiU1ZHVGVzdHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKICAg
ICBjbGFzcyBTVkdTd2l0Y2hFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3Rz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQKICAgICB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdTd2l0Y2hFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpAQCAtNDIsMTAgKzQyLDEwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlCiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAotICAgICAgICB2aXJ0dWFsIGJvb2wg
cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1l
bnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjaGls
ZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUgKikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9v
bCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxl
bWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGNo
aWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSopIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwg
UmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0
eWxlICpzdHlsZSk7CisgICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
IHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biB0aGlzOyB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTeW1ib2xFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTeW1ib2xFbGVtZW50LmNwcAkocmV2
aXNpb24gMTcwMTQpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTeW1ib2xFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAg
ICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAg
ICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIyLDE2ICsyMiwxOSBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgotCi0jaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHU3ltYm9s
RWxlbWVudC5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTVkdG
aXRUb1ZpZXdCb3guaCIKKyNpbmNsdWRlICJTVkdIZWxwZXIuaCIKIAotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR1N5bWJvbEVsZW1lbnQ6OlNWR1N5
bWJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykK
LTogU1ZHU3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpLCBTVkdMYW5nU3BhY2UoKSwgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpLCBTVkdGaXRUb1ZpZXdCb3goKQorU1ZHU3ltYm9sRWxl
bWVudDo6U1ZHU3ltYm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jKQorICAgIDogU1ZHU3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBT
VkdMYW5nU3BhY2UoKQorICAgICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCisgICAg
LCBTVkdGaXRUb1ZpZXdCb3goKQogewogfQogCkBAIC0zOSwxNSArNDIsMTcgQEAgU1ZHU3ltYm9s
RWxlbWVudDo6flNWR1N5bWJvbEVsZW1lbnQoKQogewogfQogCi12b2lkIFNWR1N5bWJvbEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgU1ZH
U3ltYm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRy
KQogewotICAgIGlmKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJl
dHVybjsKLSAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwotICAgIGlmKFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOworICAgIGlmIChT
VkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CiAKICAg
ICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAorfQor
CiAvLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHU3ltYm9sRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR1N5bWJvbEVsZW1lbnQuaAkocmV2aXNpb24gMTcwMTQpCisrKyBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdTeW1ib2xFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdp
bGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAogCkBAIC0yNCwyNCArMjQsMjQgQEAKICNkZWZpbmUgS1NWR19TVkdTeW1ib2xFbGVtZW50SW1w
bF9ICiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAotI2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5oIgorI2lu
Y2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKICNpbmNsdWRlICJTVkdGaXRU
b1ZpZXdCb3guaCIKKyNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIKICNpbmNsdWRlICJTVkdTdHls
ZWRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZQogewogICAgIGNsYXNzIFNWR1N5bWJvbEVsZW1lbnQgOiBwdWJs
aWMgU1ZHU3R5bGVkRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
YmxpYyBTVkdMYW5nU3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBTVkdGaXRUb1ZpZXdCb3gKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBTVkdGaXRUb1ZpZXdCb3gKICAgICB7CiAgICAgcHVibGljOgogICAg
ICAgICBTVkdTeW1ib2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwog
ICAgICAgICB2aXJ0dWFsIH5TVkdTeW1ib2xFbGVtZW50KCk7CiAKLSAgICAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRBdHRhY2hDaGlsZChFbGVtZW50ICopIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqKTsKKyAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEF0dGFjaENoaWxkKEVs
ZW1lbnQqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIAogICAgIHByb3RlY3RlZDoKICAg
ICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIHRoaXM7IH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RpdGxlRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGl0bGVFbGVtZW50LmNwcAko
cmV2aXNpb24gMTcwMTQpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUaXRsZUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAg
ICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAg
ICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjgsNyArMjgsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR1RpdGxlRWxlbWVudDo6U1ZHVGl0bGVFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCitTVkdUaXRsZUVsZW1l
bnQ6OlNWR1RpdGxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jKQogICAgIDogU1ZHU3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpCiB7CiB9CkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUaXRsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdUaXRsZUVsZW1lbnQuaAkocmV2aXNpb24gMTcwMTQpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdUaXRsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFu
biA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBw
cm9qZWN0CiAKQEAgLTMwLDcgKzMwLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7CiAgICAgY2xh
c3MgU1ZHVGl0bGVFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdMYW5nU3BhY2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlCiAgICAgewogICAgIHB1YmxpYzoKICAg
ICAgICAgU1ZHVGl0bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpJ
bmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDE0KQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1l
cm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgcHJvamVjdAogCkBAIC0yNCwxOCArMjQsMTUgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2lu
Y2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJE
b2N1bWVudC5oIgotI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgotI2luY2x1ZGUgIlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW8uaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKICNpbmNsdWRl
ICJTVkdHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1ZGUgIlNWR0xl
bmd0aC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpby5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTeW1i
b2xFbGVtZW50LmgiCi0jaW5jbHVkZSAia3N2Zy5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRh
aW5lci5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC02MSw3ICs1OCw3IEBAIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNW
R1VzZUVsZW0KIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1VzZUVsZW1lbnQsIFNW
R0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBXaWR0aCwgd2lkdGgsIFNWR05hbWVzOjp3aWR0aEF0
dHIubG9jYWxOYW1lKCksIG1fd2lkdGguZ2V0KCkpCiBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdVc2VFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgSGVpZ2h0LCBo
ZWlnaHQsIFNWR05hbWVzOjpoZWlnaHRBdHRyLmxvY2FsTmFtZSgpLCBtX2hlaWdodC5nZXQoKSkK
IAotdm9pZCBTVkdVc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUgKmF0dHIpCit2b2lkIFNWR1VzZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0
ci0+dmFsdWUoKTsKICAgICAKQEAgLTg5LDggKzg2LDggQEAgdm9pZCBTVkdVc2VFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZQogdm9pZCBTVkdVc2VFbGVtZW50OjpjbG9zZVJlbmRlcmVyKCkK
IHsKICAgICBTdHJpbmcgdGFyZ2V0SWQgPSBTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldChocmVm
KCkuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICBFbGVtZW50ICp0YXJnZXRFbGVtZW50ID0gb3du
ZXJEb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZCh0YXJnZXRJZCk7Ci0gICAgU1ZHRWxlbWVudCAq
dGFyZ2V0ID0gc3ZnX2R5bmFtaWNfY2FzdCh0YXJnZXRFbGVtZW50KTsKKyAgICBFbGVtZW50KiB0
YXJnZXRFbGVtZW50ID0gb3duZXJEb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZCh0YXJnZXRJZCk7
CisgICAgU1ZHRWxlbWVudCogdGFyZ2V0ID0gc3ZnX2R5bmFtaWNfY2FzdCh0YXJnZXRFbGVtZW50
KTsKICAgICBpZiAoIXRhcmdldCkgewogICAgICAgICAvL2RvY3VtZW50KCktPmFkZEZvcndhcmRS
ZWZlcmVuY2UodGhpcyk7CiAgICAgICAgIHJldHVybjsKQEAgLTExMSw3ICsxMDgsNyBAQCB2b2lk
IFNWR1VzZUVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIoKQogICAgICAgICBpZiAoX2ggPiAwKQogICAg
ICAgICAgICAgZHVtbXktPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0ciwgaFN0cmlu
Zyk7CiAgICAgICAgIAotICAgICAgICBTVkdTeW1ib2xFbGVtZW50ICpzeW1ib2wgPSBzdGF0aWNf
Y2FzdDxTVkdTeW1ib2xFbGVtZW50ICo+KHRhcmdldCk7CisgICAgICAgIFNWR1N5bWJvbEVsZW1l
bnQqIHN5bWJvbCA9IHN0YXRpY19jYXN0PFNWR1N5bWJvbEVsZW1lbnQqPih0YXJnZXQpOwogICAg
ICAgICBpZiAoc3ltYm9sLT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZpZXdCb3hBdHRyKSkgewog
ICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzeW1ib2xWaWV3Qm94ID0gc3ltYm9sLT5n
ZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZpZXdCb3hBdHRyKTsKICAgICAgICAgICAgIGR1bW15LT5z
ZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZpZXdCb3hBdHRyLCBzeW1ib2xWaWV3Qm94KTsKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmgJKHJldmlzaW9uIDE3MDE0KQorKysgV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxk
Zm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QK
IApAQCAtMjQsMjAgKzI0LDIwIEBACiAjZGVmaW5lIEtTVkdfU1ZHVXNlRWxlbWVudEltcGxfSAog
I2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRlICJTVkdUZXN0cy5oIgorI2luY2x1ZGUgIlNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKICNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIK
LSNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQu
aCIKKyNpbmNsdWRlICJTVkdUZXN0cy5oIgorI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZQogewogICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBT
VkdVc2VFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1VSSVJlZmVyZW5jZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1YmxpYyBTVkdMYW5nU3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlCiAgICAgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZH
VXNlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAgLTUxLDEwICs1
MSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VSZW5k
ZXJlcigpOwogCiAgICAgICAgIC8vICdTVkdVc2VFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUqKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHls
ZSAqc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUp
OyB9Ci0gICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJB
cmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBy
ZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVu
dDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KKyAgICAgICAgdmlydHVhbCBSZW5kZXJPYmpl
Y3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKIAogICAgIHBy
b3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0K
</data>
<flag name="review"
          id="3744"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11062</attachid>
            <date>2006-10-13 03:23:43 -0700</date>
            <delta_ts>2006-10-31 11:19:20 -0800</delta_ts>
            <desc>Improved patch</desc>
            <filename>11217-structure-2.diff</filename>
            <type>text/plain</type>
            <size>44467</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzAyNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODggQEAKKzIwMDYtMTAtMTMgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIHN2ZyBzdHJ1Y3R1
cmUgY2xhc3Nlcy4KKworICAgICAgICAqIGtzdmcyL3N2Zy9TVkdEZWZzRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdEZWZzRWxlbWVudDo6U1ZHRGVmc0VsZW1lbnQpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdEZWZzRWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdE
ZXNjRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdEZXNjRWxlbWVudDo6U1ZHRGVz
Y0VsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdEZXNjRWxlbWVudC5oOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdEb2N1bWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0Rv
Y3VtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OlNWR0VsZW1lbnRJbnN0YW5jZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OmNvcnJlc3BvbmRpbmdFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRJbnN0YW5jZTo6Y29ycmVzcG9uZGlu
Z1VzZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudEluc3RhbmNlOjpwYXJl
bnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRJbnN0YW5jZTo6Y2hpbGROb2Rl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OnByZXZpb3VzU2libGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6Om5leHRTaWJsaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRJbnN0YW5jZTo6Zmlyc3RDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6Omxhc3RDaGlsZCk6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdF
bGVtZW50SW5zdGFuY2VMaXN0LmNwcDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRWxlbWVudElu
c3RhbmNlTGlzdC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdHRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdHRWxlbWVudDo6U1ZHR0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0R1bW15RWxlbWVudDo6U1ZHRHVtbXlFbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcv
U1ZHR0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dFbGVtZW50OjpyZW5kZXJlcklz
TmVlZGVkKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ltYWdlRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAq
IGtzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU1ZH
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpTVkdTVkdFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OnBpeGVsVW5pdFRvTWlsbGlt
ZXRlclgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6cGl4ZWxVbml0VG9NaWxs
aW1ldGVyWSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjdXJyZW50U2NhbGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6c2V0Q3VycmVudFNjYWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmN1cnJlbnRUcmFuc2xhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6c3VzcGVuZFJlZHJhdyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTVkdFbGVtZW50Ojp1bnN1c3BlbmRSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU1ZHRWxlbWVudDo6dW5zdXNwZW5kUmVkcmF3QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1NWR0VsZW1lbnQ6OmZvcmNlUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1l
bnQ6OmdldEludGVyc2VjdGlvbkxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVu
dDo6Z2V0RW5jbG9zdXJlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojpj
aGVja0ludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjaGVj
a0VuY2xvc3VyZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpkZXNlbGVjdEFs
bCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdMZW5ndGgpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHQW5nbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTWF0cml4KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmdldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTVkdFbGVtZW50OjpnZXRTY3JlZW5DVE0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxl
bWVudDo6c2V0Q3VycmVudFRpbWUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTVkdFbGVtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToK
KyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTd2l0Y2hFbGVtZW50OjpTVkdTd2l0Y2hFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1N3aXRjaEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdT
d2l0Y2hFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZH
U3ltYm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTeW1ib2xFbGVtZW50OjpT
VkdTeW1ib2xFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N5bWJvbEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU3ltYm9sRWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6c2hvdWxkQXR0YWNoQ2hp
bGQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUaXRsZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGl0bGVFbGVtZW50OjpTVkdUaXRsZUVsZW1lbnQpOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdUaXRsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVXNlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjpjbG9zZVJlbmRlcmVy
KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVXNlRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6CisKIDIwMDYtMTAtMTIgIEFkZWxl
IFBldGVyc29uICA8YWRlbGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVy
cy4KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0RlZnNFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdEZWZzRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDI2
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRGVmc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xh
cyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjMsMTEgKzIzLDEyIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdEZWZzRWxlbWVudC5oIgorCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
U1ZHRGVmc0VsZW1lbnQ6OlNWR0RlZnNFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50ICpkb2MpCitTVkdEZWZzRWxlbWVudDo6U1ZHRGVmc0VsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIFNWR1Rlc3RzKCkKICAgICAs
IFNWR0xhbmdTcGFjZSgpCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdEZWZzRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0RlZnNFbGVtZW50LmgJKHJldmlz
aW9uIDE3MDI2KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRGVmc0VsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAw
NCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDE3ICsyNCwxNyBAQAogI2RlZmluZSBT
VkdEZWZzRWxlbWVudEltcGxfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKKyNpbmNsdWRlICJTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgiCisjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlLmgiCiAj
aW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdU
ZXN0cy5oIgotI2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5oIgotI2luY2x1ZGUgIlNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKICAgICBjbGFzcyBT
VkdEZWZzRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkCiAgICAgewogICAgIHB1Ymxp
YzoKICAgICAgICAgU1ZHRGVmc0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdEb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNzAyNikKKysr
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVy
bWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0RvY3VtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRG9jdW1lbnQuaAkocmV2aXNpb24gMTcwMjYp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdEb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
S0RFIHByb2plY3QKIApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICBjbGFzcyBTVkdEb2N1bWVudCA6IHB1YmxpYyBEb2N1bWVudCB7CiAgICAgcHVibGljOgotICAg
ICAgICBTVkdEb2N1bWVudChET01JbXBsZW1lbnRhdGlvbiAqaSwgRnJhbWVWaWV3ICp2aWV3KTsK
KyAgICAgICAgU1ZHRG9jdW1lbnQoRE9NSW1wbGVtZW50YXRpb24qLCBGcmFtZVZpZXcqKTsKICAg
ICAgICAgdmlydHVhbCB+U1ZHRG9jdW1lbnQoKTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc1NWR0RvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAxNzAyNikKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFpp
bW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIw
MDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBLREUgcHJvamVjdAogCkBAIC0yMiwxNCArMjIsMTUgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUg
IlNWR1VzZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKKwogI2lu
Y2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZUxpc3QuaCIKKyNpbmNsdWRlICJTVkdVc2VFbGVtZW50
LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1T
VkdFbGVtZW50SW5zdGFuY2U6OlNWR0VsZW1lbnRJbnN0YW5jZSgpIDogRXZlbnRUYXJnZXQoKQor
U1ZHRWxlbWVudEluc3RhbmNlOjpTVkdFbGVtZW50SW5zdGFuY2UoKQorICAgIDogRXZlbnRUYXJn
ZXQoKQogewogfQogCkBAIC0zNyw0NiArMzgsNDggQEAgU1ZHRWxlbWVudEluc3RhbmNlOjp+U1ZH
RWxlbWVudEluc3RhbmNlKAogewogfQogCi1TVkdFbGVtZW50ICpTVkdFbGVtZW50SW5zdGFuY2U6
OmNvcnJlc3BvbmRpbmdFbGVtZW50KCkgY29uc3QKK1NWR0VsZW1lbnQqIFNWR0VsZW1lbnRJbnN0
YW5jZTo6Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQog
Ci1TVkdVc2VFbGVtZW50ICpTVkdFbGVtZW50SW5zdGFuY2U6OmNvcnJlc3BvbmRpbmdVc2VFbGVt
ZW50KCkgY29uc3QKK1NWR1VzZUVsZW1lbnQqIFNWR0VsZW1lbnRJbnN0YW5jZTo6Y29ycmVzcG9u
ZGluZ1VzZUVsZW1lbnQoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi1TVkdFbGVtZW50
SW5zdGFuY2UgKlNWR0VsZW1lbnRJbnN0YW5jZTo6cGFyZW50Tm9kZSgpIGNvbnN0CitTVkdFbGVt
ZW50SW5zdGFuY2UqIFNWR0VsZW1lbnRJbnN0YW5jZTo6cGFyZW50Tm9kZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIDA7CiB9CiAKLVNWR0VsZW1lbnRJbnN0YW5jZUxpc3QgKlNWR0VsZW1lbnRJbnN0
YW5jZTo6Y2hpbGROb2RlcygpIGNvbnN0CitTVkdFbGVtZW50SW5zdGFuY2VMaXN0KiBTVkdFbGVt
ZW50SW5zdGFuY2U6OmNoaWxkTm9kZXMoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi1T
VkdFbGVtZW50SW5zdGFuY2UgKlNWR0VsZW1lbnRJbnN0YW5jZTo6cHJldmlvdXNTaWJsaW5nKCkg
Y29uc3QKK1NWR0VsZW1lbnRJbnN0YW5jZSogU1ZHRWxlbWVudEluc3RhbmNlOjpwcmV2aW91c1Np
YmxpbmcoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi1TVkdFbGVtZW50SW5zdGFuY2Ug
KlNWR0VsZW1lbnRJbnN0YW5jZTo6bmV4dFNpYmxpbmcoKSBjb25zdAorU1ZHRWxlbWVudEluc3Rh
bmNlKiBTVkdFbGVtZW50SW5zdGFuY2U6Om5leHRTaWJsaW5nKCkgY29uc3QKIHsKICAgICByZXR1
cm4gMDsKIH0KIAotU1ZHRWxlbWVudEluc3RhbmNlICpTVkdFbGVtZW50SW5zdGFuY2U6OmZpcnN0
Q2hpbGQoKSBjb25zdAorU1ZHRWxlbWVudEluc3RhbmNlKiBTVkdFbGVtZW50SW5zdGFuY2U6OmZp
cnN0Q2hpbGQoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi1TVkdFbGVtZW50SW5zdGFu
Y2UgKlNWR0VsZW1lbnRJbnN0YW5jZTo6bGFzdENoaWxkKCkgY29uc3QKK1NWR0VsZW1lbnRJbnN0
YW5jZSogU1ZHRWxlbWVudEluc3RhbmNlOjpsYXN0Q2hpbGQoKSBjb25zdAogewogICAgIHJldHVy
biAwOwogfQogCit9CisKIC8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAog
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuaAkocmV2aXNpb24gMTcw
MjYpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5p
a29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwg
MjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDcgKzI0LDcgQEAKICNkZWZpbmUgS1NWR19T
VkdFbGVtZW50SW5zdGFuY2VJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSA8
a2RvbS9ldmVudHMvRXZlbnRUYXJnZXQuaD4KKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZQogewpAQCAtMzgsMTUgKzM4LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
CiAgICAgICAgIHZpcnR1YWwgflNWR0VsZW1lbnRJbnN0YW5jZSgpOwogCiAgICAgICAgIC8vICdT
VkdFbGVtZW50SW5zdGFuY2UnIGZ1bmN0aW9ucwotICAgICAgICBTVkdFbGVtZW50ICpjb3JyZXNw
b25kaW5nRWxlbWVudCgpIGNvbnN0OwotICAgICAgICBTVkdVc2VFbGVtZW50ICpjb3JyZXNwb25k
aW5nVXNlRWxlbWVudCgpIGNvbnN0OworICAgICAgICBTVkdFbGVtZW50KiBjb3JyZXNwb25kaW5n
RWxlbWVudCgpIGNvbnN0OworICAgICAgICBTVkdVc2VFbGVtZW50KiBjb3JyZXNwb25kaW5nVXNl
RWxlbWVudCgpIGNvbnN0OwogCi0gICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZSAqcGFyZW50Tm9k
ZSgpIGNvbnN0OwotICAgICAgICBTVkdFbGVtZW50SW5zdGFuY2VMaXN0ICpjaGlsZE5vZGVzKCkg
Y29uc3Q7Ci0gICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZSAqcHJldmlvdXNTaWJsaW5nKCkgY29u
c3Q7Ci0gICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZSAqbmV4dFNpYmxpbmcoKSBjb25zdDsKLSAg
ICAgICAgU1ZHRWxlbWVudEluc3RhbmNlICpmaXJzdENoaWxkKCkgY29uc3Q7Ci0gICAgICAgIFNW
R0VsZW1lbnRJbnN0YW5jZSAqbGFzdENoaWxkKCkgY29uc3Q7CisgICAgICAgIFNWR0VsZW1lbnRJ
bnN0YW5jZSogcGFyZW50Tm9kZSgpIGNvbnN0OworICAgICAgICBTVkdFbGVtZW50SW5zdGFuY2VM
aXN0KiBjaGlsZE5vZGVzKCkgY29uc3Q7CisgICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZSogcHJl
dmlvdXNTaWJsaW5nKCkgY29uc3Q7CisgICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZSogbmV4dFNp
YmxpbmcoKSBjb25zdDsKKyAgICAgICAgU1ZHRWxlbWVudEluc3RhbmNlKiBmaXJzdENoaWxkKCkg
Y29uc3Q7CisgICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZSogbGFzdENoaWxkKCkgY29uc3Q7CiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHRWxlbWVudEluc3RhbmNlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5jcHAJKHJldmlzaW9uIDE3MDI2KQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFpp
bW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIw
MDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBLREUgcHJvamVjdAogCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAK
ICNpZmRlZiBTVkdfU1VQUE9SVAotCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVt
ZW50SW5zdGFuY2VMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxl
bWVudEluc3RhbmNlTGlzdC5oCShyZXZpc2lvbiAxNzAyNikKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0VsZW1lbnRJbnN0YW5jZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2ls
ZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0
CiAKQEAgLTI1LDggKzI1LDggQEAKIAogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRlICJT
VkdMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCisjaW5jbHVkZSAiU1ZH
TGlzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0dFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTcwMjYpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAg
ICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAg
ICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxMiArMjQsMTEg
QEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0dFbGVtZW50LmgiCiAKLSNpbmNs
dWRlIDxrY2FudmFzL1JlbmRlclNWR0NvbnRhaW5lci5oPgotI2luY2x1ZGUgPGtjYW52YXMvZGV2
aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KKyNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdHRWxlbWVudDo6U1ZHR0VsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKK1NWR0dFbGVtZW50OjpTVkdH
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAg
IDogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKQogICAgICwgU1ZH
VGVzdHMoKQogICAgICwgU1ZHTGFuZ1NwYWNlKCkKQEAgLTQxLDcgKzQwLDcgQEAgU1ZHR0VsZW1l
bnQ6On5TVkdHRWxlbWVudCgpCiB7CiB9CiAKLXZvaWQgU1ZHR0VsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgU1ZHR0VsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAoU1ZHVGVz
dHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICByZXR1cm47CkBAIC01OCw3
ICs1Nyw3IEBAIFJlbmRlck9iamVjdCogU1ZHR0VsZW1lbnQ6OmNyZWF0ZVJlbmRlcmUKIH0KIAog
Ly8gSGVscGVyIGNsYXNzIGZvciA8dXNlPiBzdXBwb3J0Ci1TVkdEdW1teUVsZW1lbnQ6OlNWR0R1
bW15RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQor
U1ZHRHVtbXlFbGVtZW50OjpTVkdEdW1teUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR0dFbGVtZW50KHRhZ05hbWUsIGRvYykKICAg
ICAsICBtX2xvY2FsTmFtZSgiZHVtbXkiKQogewpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
R0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHRWxlbWVudC5o
CShyZXZpc2lvbiAxNzAyNikKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0dFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAg
ICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAg
IDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxNyArMjQsMTcgQEAKICNkZWZp
bmUgS1NWR19TVkdHRWxlbWVudEltcGxfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKKyNpbmNsdWRl
ICJTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgiCisjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNl
LmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdUZXN0cy5oIgotI2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5oIgotI2luY2x1ZGUgIlNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKICAgICBj
bGFzcyBTVkdHRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZAorICAgICAgICAg
ICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAg
cHVibGljIFNWR0xhbmdTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkCiAgICAgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZH
R0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CkBAIC00MiwxMCArNDIs
MTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBp
c1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlKik7CiAKLSAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5
bGUgKnN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxl
KTsgfQotICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVy
QXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpOworICAgICAgICB2aXJ0dWFsIGJvb2wg
cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1l
bnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9CisgICAgICAgIHZpcnR1YWwgUmVuZGVyT2Jq
ZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAKICAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJ
bWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ltYWdl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDI2KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHSW1h
Z2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3Jn
PgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
ICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgogICAgICAgICAgICAgICAgICAgMjAwNiAgICAgICBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5v
dkBrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CkBA
IC0yNSwxOSArMjUsMTcgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0ltYWdl
RWxlbWVudC5oIgogCi0jaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFt
ZXMuaCIKKyNpbmNsdWRlICJLQ2FudmFzSW1hZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdDb250
YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdJbWFnZS5oIgotI2luY2x1ZGUgIlNWR0xlbmd0
aC5oIgotI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKICNpbmNsdWRlICJTVkdE
b2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5o
IgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRp
by5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCi0jaW5jbHVkZSAiS0NhbnZhc0ltYWdl
LmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC05Nyw3ICs5NSw3IEBAIHZvaWQgU1ZHSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnUKICAgICB9CiB9CiAKLVJlbmRlck9iamVjdCAqU1ZHSW1hZ2VFbGVtZW50OjpjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSkKK1JlbmRlck9iamVj
dCogU1ZHSW1hZ2VFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJl
bmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHSW1h
Z2UodGhpcyk7CiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAkocmV2aXNp
b24gMTcwMjYpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAw
NCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDEyICsyNCwxMiBAQAogI2RlZmluZSBL
U1ZHX1NWR0ltYWdlRWxlbWVudEltcGxfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRl
ICJTVkdUZXN0cy5oIgotI2luY2x1ZGUgIlNWR0ltYWdlTG9hZGVyLmgiCisjaW5jbHVkZSAiU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIgogI2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5oIgot
I2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIlNWR0ltYWdlTG9hZGVyLmgi
CiAjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgiCisjaW5jbHVkZSAiU1ZHVGVzdHMuaCIKKyNp
bmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKQEAgLTM4
LDEwICszOCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgIGNsYXNzIFNWR0RvY3VtZW50Owog
CiAgICAgY2xhc3MgU1ZHSW1hZ2VFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVz
dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdMYW5nU3BhY2Us
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZH
VVJJUmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3Rz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdMYW5nU3BhY2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1VSSVJlZmVyZW5jZQog
ICAgIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNWR0ltYWdlRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAgLTUwLDExICs1MCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3Rz
Ojppc1ZhbGlkKCk7IH0KIAogICAgICAgICAvLyAnU1ZHSW1hZ2VFbGVtZW50JyBmdW5jdGlvbnMK
LSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSAqYXR0cik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogCiAgICAgICAg
IHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1
cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KLSAgICAgICAgdmly
dHVhbCBSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVu
ZGVyU3R5bGUgKnN0eWxlKTsKKyAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QgKmNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKICAgICAgICAgCiAgICAgcHJvdGVj
dGVkOgogICAgICAgICB2aXJ0dWFsIGJvb2wgaGF2ZUxvYWRlZFJlcXVpcmVkUmVzb3VyY2VzKCk7
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkocmV2aXNpb24gMTcwMjYpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAKQEAgLTMwLDE2ICszMCwxMyBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLU1ZHVGltZVNjaGVkdWxlci5o
IgorI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIlNWR0FuZ2xlLmgi
CiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRp
by5oIgotI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR01h
dHJpeC5oIgorI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKICNpbmNsdWRlICJT
VkdUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJTVkdab29tRXZlbnQuaCIKLSNpbmNsdWRlICJrc3Zn
LmgiCi0jaW5jbHVkZSA8a2NhbnZhcy9SZW5kZXJTVkdDb250YWluZXIuaD4KLSNpbmNsdWRlIDxr
Y2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Nyw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgRXZlbnRO
YW1lczsKIAotU1ZHU1ZHRWxlbWVudDo6U1ZHU1ZHRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHU1ZHRWxlbWVudDo6U1ZHU1ZHRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHU3R5
bGVkTG9jYXRhYmxlRWxlbWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCBTVkdUZXN0cygpCiAgICAg
LCBTVkdMYW5nU3BhY2UoKQpAQCAtMTEzLDI3ICsxMTAsMTMgQEAgRmxvYXRSZWN0IFNWR1NWR0Vs
ZW1lbnQ6OnZpZXdwb3J0KCkgY29ucwogCiBmbG9hdCBTVkdTVkdFbGVtZW50OjpwaXhlbFVuaXRU
b01pbGxpbWV0ZXJYKCkgY29uc3QKIHsKLSNpZiAwCi0gICAgaWYob3duZXJEb2N1bWVudCgpICYm
IG93bmVyRG9jdW1lbnQoKS0+cGFpbnREZXZpY2VNZXRyaWNzKCkpCi0gICAgewotICAgICAgICBR
M1BhaW50RGV2aWNlTWV0cmljcyAqbWV0cmljcyA9IG93bmVyRG9jdW1lbnQoKS0+cGFpbnREZXZp
Y2VNZXRyaWNzKCk7Ci0gICAgICAgIHJldHVybiBmbG9hdChtZXRyaWNzLT53aWR0aE1NKCkpIC8g
ZmxvYXQobWV0cmljcy0+d2lkdGgoKSk7Ci0gICAgfQotI2VuZGlmCi0KKyAgICAvL0ZJWE1FOiBp
bXBsZW1lbnQgbWUgKHNlZSBidWcgMTEyNzMpCiAgICAgcmV0dXJuIC4yODsKIH0KIAogZmxvYXQg
U1ZHU1ZHRWxlbWVudDo6cGl4ZWxVbml0VG9NaWxsaW1ldGVyWSgpIGNvbnN0CiB7Ci0jaWYgMAot
ICAgIGlmKG93bmVyRG9jdW1lbnQoKSAmJiBvd25lckRvY3VtZW50KCktPnBhaW50RGV2aWNlTWV0
cmljcygpKQotICAgIHsKLSAgICAgICAgUTNQYWludERldmljZU1ldHJpY3MgKm1ldHJpY3MgPSBv
d25lckRvY3VtZW50KCktPnBhaW50RGV2aWNlTWV0cmljcygpOwotICAgICAgICByZXR1cm4gZmxv
YXQobWV0cmljcy0+aGVpZ2h0TU0oKSkgLyBmbG9hdChtZXRyaWNzLT5oZWlnaHQoKSk7Ci0gICAg
fQotI2VuZGlmCi0KKyAgICAvL0ZJWE1FOiBpbXBsZW1lbnQgbWUgKHNlZSBidWcgMTEyNzMpCiAg
ICAgcmV0dXJuIC4yODsKIH0KIApAQCAtMTU5LDI4ICsxNDIsMTkgQEAgdm9pZCBTVkdTVkdFbGVt
ZW50OjpzZXRVc2VDdXJyZW50VmlldyhibwogCiBmbG9hdCBTVkdTVkdFbGVtZW50OjpjdXJyZW50
U2NhbGUoKSBjb25zdAogewotICAgIC8vaWYoIWNhbnZhc1ZpZXcoKSkKLSAgICAgICAgcmV0dXJu
IDEuOwotCi0gICAgLy9yZXR1cm4gY2FudmFzVmlldygpLT56b29tKCk7CisgICAgLy9GSVhNRTog
cmV0dXJuIHRoZSBjdXJyZW50IHpvb20vc2NhbGUgdmFsdWUgKHNlZSBidWcgMTEyNzIpCisgICAg
cmV0dXJuIDEuOwogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OnNldEN1cnJlbnRTY2FsZShmbG9h
dCBzY2FsZSkKIHsKLS8vICAgIGlmKGNhbnZhc1ZpZXcoKSkKLS8vICAgIHsKLS8vICAgICAgICBm
bG9hdCBvbGR6b29tID0gY2FudmFzVmlldygpLT56b29tKCk7Ci0vLyAgICAgICAgY2FudmFzVmll
dygpLT5zZXRab29tKHNjYWxlKTsKLS8vICAgICAgICBkb2N1bWVudCgpLT5kaXNwYXRjaFpvb21F
dmVudChvbGR6b29tLCBzY2FsZSk7Ci0vLyAgICB9CisgICAgLy9GSVhNRTogc2V0IHRoZSBjdXJy
ZW50IHpvb20vc2NhbGUgdmFsdWUgKHNlZSBidWcgMTEyNzIpCiB9CiAKIEZsb2F0UG9pbnQgU1ZH
U1ZHRWxlbWVudDo6Y3VycmVudFRyYW5zbGF0ZSgpIGNvbnN0CiB7Ci0gICAgLy9pZighdmlldygp
KQotICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgpOwotCi0gICAgLy9yZXR1cm4gY3JlYXRlU1ZH
UG9pbnQoY2FudmFzVmlldygpLT5wYW4oKSk7CisgICAgLy9GSVhNRTogcmV0dXJuIHRoZSBjdXJy
ZW50IHBhbi90cmFuc2xhdGUgdmFsdWUgKHNlZSBidWcgMTEyNzIpCisgICAgcmV0dXJuIEZsb2F0
UG9pbnQoKTsKIH0KIAogdm9pZCBTVkdTVkdFbGVtZW50OjphZGRTVkdXaW5kb3dFdmVudExpc3Ru
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IEF0dHJpYnV0ZSogYXR0cikK
QEAgLTE5Miw3ICsxNjYsNyBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OmFkZFNWR1dpbmRvd0V2ZW50
TGlzCiAgICAgZG9jdW1lbnQoKS0+c2V0SFRNTFdpbmRvd0V2ZW50TGlzdGVuZXIoZXZlbnRUeXBl
LCBsaXN0ZW5lci5yZWxlYXNlKCkpOwogfQogCi12b2lkIFNWR1NWR0VsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgU1ZHU1ZHRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmICghbmVhcmVzdFZp
ZXdwb3J0RWxlbWVudCgpKSB7CkBAIC0yMzgsMzYgKzIxMiwzNSBAQCB2b2lkIFNWR1NWR0VsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlCiAKIHVuc2lnbmVkIGxvbmcgU1ZHU1ZHRWxlbWVudDo6
c3VzcGVuZFJlZHJhdyh1bnNpZ25lZCBsb25nIC8qIG1heF93YWl0X21pbGxpc2Vjb25kcyAqLykK
IHsKLSAgICAvLyBUT0RPCisgICAgLy8gRklYTUU6IGltcGxlbWVudCBtZSAoc2VlIGJ1ZyAxMTI3
NSkKICAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBTVkdTVkdFbGVtZW50Ojp1bnN1c3BlbmRSZWRy
YXcodW5zaWduZWQgbG9uZyAvKiBzdXNwZW5kX2hhbmRsZV9pZCAqLywgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgLy8gaWYgc3VzcGVuZF9oYW5kbGVfaWQgaXMgbm90IGZvdW5kLCB0aHJvdyBl
eGNlcHRpb24KLSAgICAvLyBUT0RPCisgICAgLy8gRklYTUU6IGltcGxlbWVudCBtZSAoc2VlIGJ1
ZyAxMTI3NSkKIH0KIAogdm9pZCBTVkdTVkdFbGVtZW50Ojp1bnN1c3BlbmRSZWRyYXdBbGwoKQog
ewotICAgIC8vIFRPRE8KKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IG1lIChzZWUgYnVnIDExMjc1
KQogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OmZvcmNlUmVkcmF3KCkKIHsKLSAgICAvLyBUT0RP
CisgICAgLy8gRklYTUU6IGltcGxlbWVudCBtZSAoc2VlIGJ1ZyAxMTI3NSkKIH0KIAotTm9kZUxp
c3QgKlNWR1NWR0VsZW1lbnQ6OmdldEludGVyc2VjdGlvbkxpc3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBTVkdFbGVtZW50KikKK05vZGVMaXN0KiBTVkdTVkdFbGVtZW50OjpnZXRJbnRlcnNlY3Rp
b25MaXN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgU1ZHRWxlbWVudCopCiB7Ci0gICAgLy9Ob2Rl
TGlzdCAqbGlzdDsKLSAgICAvLyBUT0RPCisgICAgLy8gRklYTUU6IGltcGxlbWVudCBtZSAoc2Vl
IGJ1ZyAxMTI3NCkKICAgICByZXR1cm4gMDsKIH0KIAotTm9kZUxpc3QgKlNWR1NWR0VsZW1lbnQ6
OmdldEVuY2xvc3VyZUxpc3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBTVkdFbGVtZW50KikKK05v
ZGVMaXN0KiBTVkdTVkdFbGVtZW50OjpnZXRFbmNsb3N1cmVMaXN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgU1ZHRWxlbWVudCopCiB7Ci0gICAgLy8gVE9ETworICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQgbWUgKHNlZSBidWcgMTEyNzQpCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTI3NSw2ICsyNDgs
NyBAQCBib29sIFNWR1NWR0VsZW1lbnQ6OmNoZWNrSW50ZXJzZWN0aW9uKFNWCiB7CiAgICAgLy8g
VE9ETyA6IHRha2UgaW50byBhY2NvdW50IHBvaW50ZXItZXZlbnRzPwogICAgIC8vIEZJWE1FOiBX
aHkgaXMgZWxlbWVudCBpZ25vcmVkPz8KKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IG1lIChzZWUg
YnVnIDExMjc0KQogICAgIHJldHVybiByZWN0LmludGVyc2VjdHMoZ2V0QkJveCgpKTsKIH0KIApA
QCAtMjgyLDEyICsyNTYsMTMgQEAgYm9vbCBTVkdTVkdFbGVtZW50OjpjaGVja0VuY2xvc3VyZShT
VkdFbAogewogICAgIC8vIFRPRE8gOiB0YWtlIGludG8gYWNjb3VudCBwb2ludGVyLWV2ZW50cz8K
ICAgICAvLyBGSVhNRTogV2h5IGlzIGVsZW1lbnQgaWdub3JlZD8/CisgICAgLy8gRklYTUU6IGlt
cGxlbWVudCBtZSAoc2VlIGJ1ZyAxMTI3NCkKICAgICByZXR1cm4gcmVjdC5jb250YWlucyhnZXRC
Qm94KCkpOwogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OmRlc2VsZWN0QWxsKCkKIHsKLSAgICAv
LyBUT0RPCisgICAgLy8gRklYTUU6IGltcGxlbWVudCBtZSAoc2VlIGJ1ZyAxMTI3NSkKIH0KIAog
ZmxvYXQgU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTnVtYmVyKCkKQEAgLTI5NSwxMiArMjcwLDEy
IEBAIGZsb2F0IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR051bWJlcigpCiAgICAgcmV0dXJuIDA7
CiB9CiAKLVNWR0xlbmd0aCAqU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTGVuZ3RoKCkKK1NWR0xl
bmd0aCogU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTGVuZ3RoKCkKIHsKICAgICByZXR1cm4gbmV3
IFNWR0xlbmd0aCgwKTsKIH0KIAotU1ZHQW5nbGUgKlNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR0Fu
Z2xlKCkKK1NWR0FuZ2xlKiBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdBbmdsZSgpCiB7CiAgICAg
cmV0dXJuIG5ldyBTVkdBbmdsZSgwKTsKIH0KQEAgLTMxMCw3ICsyODUsNyBAQCBGbG9hdFBvaW50
IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1BvaW50CiAgICAgcmV0dXJuIEZsb2F0UG9pbnQocCk7
CiB9CiAKLVNWR01hdHJpeCAqU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTWF0cml4KCkKK1NWR01h
dHJpeCogU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTWF0cml4KCkKIHsKICAgICByZXR1cm4gbmV3
IFNWR01hdHJpeCgpOwogfQpAQCAtMzIwLDI3ICsyOTUsMjUgQEAgRmxvYXRSZWN0IFNWR1NWR0Vs
ZW1lbnQ6OmNyZWF0ZVNWR1JlY3QoKQogICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIH0KIAotU1ZH
VHJhbnNmb3JtICpTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdUcmFuc2Zvcm0oKQorU1ZHVHJhbnNm
b3JtKiBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdUcmFuc2Zvcm0oKQogewogICAgIHJldHVybiBu
ZXcgU1ZHVHJhbnNmb3JtKCk7CiB9CiAKLVNWR1RyYW5zZm9ybSAqU1ZHU1ZHRWxlbWVudDo6Y3Jl
YXRlU1ZHVHJhbnNmb3JtRnJvbU1hdHJpeChTVkdNYXRyaXggKm1hdHJpeCkKK1NWR1RyYW5zZm9y
bSogU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHVHJhbnNmb3JtRnJvbU1hdHJpeChTVkdNYXRyaXgq
IG1hdHJpeCkKIHsgICAgCi0gICAgU1ZHVHJhbnNmb3JtICpvYmogPSBTVkdTVkdFbGVtZW50Ojpj
cmVhdGVTVkdUcmFuc2Zvcm0oKTsKKyAgICBTVkdUcmFuc2Zvcm0qIG9iaiA9IFNWR1NWR0VsZW1l
bnQ6OmNyZWF0ZVNWR1RyYW5zZm9ybSgpOwogICAgIG9iai0+c2V0TWF0cml4KG1hdHJpeCk7CiAg
ICAgcmV0dXJuIG9iajsKIH0KIAotU1ZHTWF0cml4ICpTVkdTVkdFbGVtZW50OjpnZXRDVE0oKSBj
b25zdAorU1ZHTWF0cml4KiBTVkdTVkdFbGVtZW50OjpnZXRDVE0oKSBjb25zdAogewotICAgIFNW
R01hdHJpeCAqbWF0ID0gY3JlYXRlU1ZHTWF0cml4KCk7Ci0gICAgaWYobWF0KQotICAgIHsKKyAg
ICBTVkdNYXRyaXgqIG1hdCA9IGNyZWF0ZVNWR01hdHJpeCgpOworICAgIGlmIChtYXQpIHsKICAg
ICAgICAgbWF0LT50cmFuc2xhdGUoeCgpLT52YWx1ZSgpLCB5KCktPnZhbHVlKCkpOwogCi0gICAg
ICAgIGlmKGF0dHJpYnV0ZXMoKS0+Z2V0TmFtZWRJdGVtKFNWR05hbWVzOjp2aWV3Qm94QXR0cikp
Ci0gICAgICAgIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMoKS0+Z2V0TmFtZWRJdGVtKFNWR05h
bWVzOjp2aWV3Qm94QXR0cikpIHsKICAgICAgICAgICAgIFJlZlB0cjxTVkdNYXRyaXg+IHZpZXdC
b3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoKCktPnZhbHVlKCksIGhlaWdodCgpLT52
YWx1ZSgpKTsKICAgICAgICAgICAgIG1hdC0+bXVsdGlwbHkodmlld0JveC5nZXQoKSk7CiAgICAg
ICAgIH0KQEAgLTM0OSwxMCArMzIyLDEwIEBAIFNWR01hdHJpeCAqU1ZHU1ZHRWxlbWVudDo6Z2V0
Q1RNKCkgY29uc3QKICAgICByZXR1cm4gbWF0OwogfQogCi1TVkdNYXRyaXggKlNWR1NWR0VsZW1l
bnQ6OmdldFNjcmVlbkNUTSgpIGNvbnN0CitTVkdNYXRyaXgqIFNWR1NWR0VsZW1lbnQ6OmdldFNj
cmVlbkNUTSgpIGNvbnN0CiB7Ci0gICAgU1ZHTWF0cml4ICptYXQgPSBTVkdTdHlsZWRMb2NhdGFi
bGVFbGVtZW50OjpnZXRTY3JlZW5DVE0oKTsKLSAgICBpZihtYXQpIHsKKyAgICBTVkdNYXRyaXgq
IG1hdCA9IFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpOworICAgIGlm
IChtYXQpIHsKICAgICAgICAgbWF0LT50cmFuc2xhdGUoeCgpLT52YWx1ZSgpLCB5KCktPnZhbHVl
KCkpOwogCiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKCktPmdldE5hbWVkSXRlbShTVkdOYW1lczo6
dmlld0JveEF0dHIpKSB7CkBAIC00MTgsNyArMzkxLDcgQEAgZmxvYXQgU1ZHU1ZHRWxlbWVudDo6
Z2V0Q3VycmVudFRpbWUoKSBjbwogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OnNldEN1cnJlbnRUaW1l
KGZsb2F0IC8qIHNlY29uZHMgKi8pCiB7Ci0gICAgLy8gVE9ETworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQgbWUKIH0KIAogdm9pZCBTVkdTVkdFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0dHJp
YnV0ZSogYXR0ciwgYm9vbCBwcmVzZXJ2ZURlY2xzKQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NWR0Vs
ZW1lbnQuaAkocmV2aXNpb24gMTcwMjYpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAg
ICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAg
ICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxNiArMjQsMTUg
QEAKICNkZWZpbmUgU1ZHU1ZHRWxlbWVudF9ICiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAotI2luY2x1
ZGUgIlNWR1Rlc3RzLmgiCi0jaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlLmgiCisjaW5jbHVkZSAiU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIgogI2luY2x1ZGUgIlNWR0ZpdFRvVmlld0JveC5o
IgotI2luY2x1ZGUgIlNWR1pvb21BbmRQYW4uaCIKKyNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIK
ICNpbmNsdWRlICJTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIgorI2luY2x1ZGUgIlNWR1Rlc3RzLmgiCisjaW5jbHVk
ZSAiU1ZHWm9vbUFuZFBhbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIERv
Y3VtZW50UHRyOwogICAgIGNsYXNzIFNWR0FuZ2xlOwogICAgIGNsYXNzIFNWR0xlbmd0aDsKICAg
ICBjbGFzcyBTVkdNYXRyaXg7CkBAIC00MSwxMSArNDAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUK
ICAgICBjbGFzcyBTVkdMZW5ndGg7CiAgICAgY2xhc3MgVGltZVNjaGVkdWxlcjsKICAgICBjbGFz
cyBTVkdTVkdFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRml0VG9WaWV3Qm94LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1pvb21BbmRQYW4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBw
dWJsaWMgU1ZHTGFuZ1NwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR0ZpdFRvVmlld0JveCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNW
R1pvb21BbmRQYW4KICAgICB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIFNWR1pvb21BbmRQ
YW5UeXBlIHsKQEAgLTc4LDcgKzc3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgYm9v
bCB1c2VDdXJyZW50VmlldygpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFVzZUN1cnJlbnRWaWV3
KGJvb2wgY3VycmVudFZpZXcpOwogCi0gICAgICAgIC8vIFNWR1ZpZXdTcGVjICpjdXJyZW50Vmll
dygpIGNvbnN0OworICAgICAgICAvLyBTVkdWaWV3U3BlYyogY3VycmVudFZpZXcoKSBjb25zdDsK
IAogICAgICAgICBmbG9hdCBjdXJyZW50U2NhbGUoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRD
dXJyZW50U2NhbGUoZmxvYXQgc2NhbGUpOwpAQCAtOTksOCArOTgsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZQogICAgICAgICB2b2lkIHVuc3VzcGVuZFJlZHJhd0FsbCgpOwogICAgICAgICB2b2lkIGZv
cmNlUmVkcmF3KCk7CiAKLSAgICAgICAgTm9kZUxpc3QqIGdldEludGVyc2VjdGlvbkxpc3QoY29u
c3QgRmxvYXRSZWN0JiwgU1ZHRWxlbWVudCAqcmVmZXJlbmNlRWxlbWVudCk7Ci0gICAgICAgIE5v
ZGVMaXN0KiBnZXRFbmNsb3N1cmVMaXN0KGNvbnN0IEZsb2F0UmVjdCYsIFNWR0VsZW1lbnQgKnJl
ZmVyZW5jZUVsZW1lbnQpOworICAgICAgICBOb2RlTGlzdCogZ2V0SW50ZXJzZWN0aW9uTGlzdChj
b25zdCBGbG9hdFJlY3QmLCBTVkdFbGVtZW50KiByZWZlcmVuY2VFbGVtZW50KTsKKyAgICAgICAg
Tm9kZUxpc3QqIGdldEVuY2xvc3VyZUxpc3QoY29uc3QgRmxvYXRSZWN0JiwgU1ZHRWxlbWVudCog
cmVmZXJlbmNlRWxlbWVudCk7CiAgICAgICAgIGJvb2wgY2hlY2tJbnRlcnNlY3Rpb24oU1ZHRWxl
bWVudCosIGNvbnN0IEZsb2F0UmVjdCYpOwogICAgICAgICBib29sIGNoZWNrRW5jbG9zdXJlKFNW
R0VsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmKTsKICAgICAgICAgdm9pZCBkZXNlbGVjdEFsbCgp
OwpAQCAtMTE0LDE1ICsxMTMsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgc3RhdGlj
IFNWR1RyYW5zZm9ybSogY3JlYXRlU1ZHVHJhbnNmb3JtKCk7CiAgICAgICAgIHN0YXRpYyBTVkdU
cmFuc2Zvcm0qIGNyZWF0ZVNWR1RyYW5zZm9ybUZyb21NYXRyaXgoU1ZHTWF0cml4Kik7CiAKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAq
YXR0cik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUqKTsKIAogICAgICAgICAvLyAndmlydHVhbCBTVkdMb2NhdGFibGUnIGZ1bmN0aW9u
cwotICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeCAqZ2V0Q1RNKCkgY29uc3Q7Ci0gICAgICAgIHZp
cnR1YWwgU1ZHTWF0cml4ICpnZXRTY3JlZW5DVE0oKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBT
VkdNYXRyaXgqIGdldENUTSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeCogZ2V0
U2NyZWVuQ1RNKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVk
ZWQoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklz
TmVlZGVkKHN0eWxlKTsgfQorICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVu
ZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogCi0gICAgICAgIHZpcnR1YWwgYm9v
bCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxl
bWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KLSAgICAgICAgdmlydHVhbCBSZW5kZXJP
YmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0
eWxlKTsKLSAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVu
dCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogCkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcAkocmV2aXNpb24gMTcwMjYpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMg
WmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwg
MjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIEtERSBwcm9qZWN0CiAKQEAgLTIyLDIxICsyMiwxOCBAQAogCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJBdHRyLmgiCi0KLSNpbmNsdWRlIDxr
Y2FudmFzL1JlbmRlclNWR0NvbnRhaW5lci5oPgotI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tS
ZW5kZXJpbmdEZXZpY2UuaD4KKyNpbmNsdWRlICJTVkdTd2l0Y2hFbGVtZW50LmgiCiAKKyNpbmNs
dWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1
ZGUgIlNWR0hlbHBlci5oIgotI2luY2x1ZGUgIlNWR1Rlc3RzLmgiCi0jaW5jbHVkZSAiU1ZHU3dp
dGNoRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVNWR1N3aXRjaEVsZW1lbnQ6OlNWR1N3aXRjaEVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLTogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVGVzdHMoKSwgU1ZHTGFuZ1NwYWNlKCksIFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorU1ZHU3dpdGNoRWxlbWVudDo6U1ZHU3dpdGNoRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAgIDogU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgU1ZHVGVzdHMo
KQorICAgICwgU1ZHTGFuZ1NwYWNlKCkKKyAgICAsIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQoKQogewogfQogCkBAIC00NCwxMCArNDEsMTAgQEAgU1ZHU3dpdGNoRWxlbWVudDo6flNWR1N3
aXRjaEVsZW1lbnQoKQogewogfQogCi1ib29sIFNWR1N3aXRjaEVsZW1lbnQ6OmNoaWxkU2hvdWxk
Q3JlYXRlUmVuZGVyZXIoTm9kZSAqY2hpbGQpIGNvbnN0Citib29sIFNWR1N3aXRjaEVsZW1lbnQ6
OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSogY2hpbGQpIGNvbnN0CiB7Ci0gICAgZm9y
IChOb2RlICpuID0gZmlyc3RDaGlsZCgpOyBuICE9IDA7IG4gPSBuLT5uZXh0U2libGluZygpKSB7
Ci0gICAgICAgIFNWR0VsZW1lbnQgKmVsZW1lbnQgPSBzdmdfZHluYW1pY19jYXN0KG4pOworICAg
IGZvciAoTm9kZSogbiA9IGZpcnN0Q2hpbGQoKTsgbiAhPSAwOyBuID0gbi0+bmV4dFNpYmxpbmco
KSkgeworICAgICAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0gc3ZnX2R5bmFtaWNfY2FzdChuKTsK
ICAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aXNWYWxpZCgpKQogICAgICAgICAgICAg
cmV0dXJuIChuID09IGNoaWxkKTsgLy8gT25seSBhbGxvdyB0aGlzIGNoaWxkIGlmIGl0J3MgdGhl
IGZpcnN0IHZhbGlkIGNoaWxkCiAgICAgfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3dp
dGNoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N3aXRjaEVs
ZW1lbnQuaAkocmV2aXNpb24gMTcwMjYpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTd2l0Y2hF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAg
ICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAg
ICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAog
ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxNyArMjQs
MTcgQEAKICNkZWZpbmUgS1NWR19TVkdTd2l0Y2hFbGVtZW50SW1wbF9ICiAjaWZkZWYgU1ZHX1NV
UFBPUlQKIAotI2luY2x1ZGUgIlNWR1Rlc3RzLmgiCisjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZC5oIgogI2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5oIgogI2luY2x1ZGUgIlNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZC5oIgorI2luY2x1ZGUgIlNWR1Rlc3RzLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlCiB7CiAgICAgY2xhc3MgU1ZHU3dpdGNoRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBTVkdUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdM
YW5nU3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdMYW5n
U3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkCiAgICAgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHU3dpdGNoRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAgLTQyLDEwICs0MiwxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKLSAgICAgICAgdmly
dHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBT
dHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQotICAgICAgICB2aXJ0dWFs
IGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlICopIGNvbnN0OworICAgICAgICB2
aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJu
IFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9CisgICAgICAgIHZpcnR1
YWwgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqKSBjb25zdDsKIAotICAgICAg
ICB2aXJ0dWFsIFJlbmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5h
LCBSZW5kZXJTdHlsZSAqc3R5bGUpOworICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3Jl
YXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogCiAgICAgcHJvdGVjdGVk
OgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gdGhpczsgfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3ltYm9sRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3ltYm9sRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE3MDI2KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3ltYm9sRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAg
ICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAg
ICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAog
ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yMiwxNiArMjIs
MTkgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKLQotI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUg
IlNWR1N5bWJvbEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5j
bHVkZSAiU1ZHRml0VG9WaWV3Qm94LmgiCisjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAKLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdTeW1ib2xFbGVt
ZW50OjpTVkdTeW1ib2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50ICpkb2MpCi06IFNWR1N0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHTGFuZ1NwYWNl
KCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKSwgU1ZHRml0VG9WaWV3Qm94KCkKK1NW
R1N5bWJvbEVsZW1lbnQ6OlNWR1N5bWJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IFNWR1N0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9j
KQorICAgICwgU1ZHTGFuZ1NwYWNlKCkKKyAgICAsIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQoKQorICAgICwgU1ZHRml0VG9WaWV3Qm94KCkKIHsKIH0KIApAQCAtMzksMTUgKzQyLDIwIEBA
IFNWR1N5bWJvbEVsZW1lbnQ6On5TVkdTeW1ib2xFbGVtZW50KCkKIHsKIH0KIAotdm9pZCBTVkdT
eW1ib2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
Cit2b2lkIFNWR1N5bWJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSogYXR0cikKIHsKLSAgICBpZihTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKSByZXR1cm47Ci0gICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKLSAgICBpZihTVkdGaXRUb1ZpZXdCb3g6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CisgICAgaWYgKFNWR0xhbmdTcGFj
ZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgU1ZHU3R5bGVkRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKK30KKwogLy8gdmltOnRzPTQ6bm9ldAog
I2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N5bWJv
bEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTeW1ib2xFbGVt
ZW50LmgJKHJldmlzaW9uIDE3MDI2KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3ltYm9sRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAg
ICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAg
ICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjQsMjQgKzI0LDI0
IEBACiAjZGVmaW5lIEtTVkdfU1ZHU3ltYm9sRWxlbWVudEltcGxfSAogI2lmZGVmIFNWR19TVVBQ
T1JUCiAKLSNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIKKyNpbmNsdWRlICJTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkLmgiCiAjaW5jbHVkZSAiU1ZHRml0VG9WaWV3Qm94LmgiCisjaW5jbHVk
ZSAiU1ZHTGFuZ1NwYWNlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgotI2luY2x1
ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUK
IHsKICAgICBjbGFzcyBTVkdTeW1ib2xFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZH
Rml0VG9WaWV3Qm94CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdMYW5n
U3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZH
Rml0VG9WaWV3Qm94CiAgICAgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHU3ltYm9sRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAgICAgdmlydHVhbCB+U1ZH
U3ltYm9sRWxlbWVudCgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
QXR0YWNoQ2hpbGQoRWxlbWVudCAqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBdHRhY2hDaGlsZChFbGVtZW50KikgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3Qg
U1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUaXRsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1RpdGxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDI2KQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGl0bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1TVkdUaXRsZUVsZW1lbnQ6OlNWR1RpdGxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHVGl0bGVFbGVtZW50OjpTVkdUaXRsZUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR1N0
eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jKQogewogfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHVGl0bGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGl0
bGVFbGVtZW50LmgJKHJldmlzaW9uIDE3MDI2KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGl0
bGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4K
LSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAg
ICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
IAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0zMCw3ICsz
MCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZQogewogICAgIGNsYXNzIFNWR1RpdGxlRWxlbWVudCA6
IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgU1ZHTGFuZ1NwYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlj
IFNWR0xhbmdTcGFjZQogICAgIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNWR1RpdGxlRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1VzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1VzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzAyNikKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1VzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5v
cmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjQs
MTggKzI0LDE1IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdVc2VFbGVtZW50
LmgiCiAKLSNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJTVkdMZW5ndGguaCIKLSNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiU1ZHR0VsZW1lbnQuaCIKICNp
bmNsdWRlICJTVkdIZWxwZXIuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKICNpbmNsdWRl
ICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU3ltYm9sRWxlbWVudC5oIgotI2luY2x1
ZGUgImtzdmcuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKLSNpbmNsdWRlICJL
UmVuZGVyaW5nRGV2aWNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjEsNyArNTgs
NyBAQCBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdVc2VFbGVtCiBBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdVc2VFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxl
bmd0aCwgV2lkdGgsIHdpZHRoLCBTVkdOYW1lczo6d2lkdGhBdHRyLmxvY2FsTmFtZSgpLCBtX3dp
ZHRoLmdldCgpKQogQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHVXNlRWxlbWVudCwg
U1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIEhlaWdodCwgaGVpZ2h0LCBTVkdOYW1lczo6aGVp
Z2h0QXR0ci5sb2NhbE5hbWUoKSwgbV9oZWlnaHQuZ2V0KCkpCiAKLXZvaWQgU1ZHVXNlRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBTVkdV
c2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7
CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgCkBA
IC04OSw4ICs4Niw4IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUK
IHZvaWQgU1ZHVXNlRWxlbWVudDo6Y2xvc2VSZW5kZXJlcigpCiB7CiAgICAgU3RyaW5nIHRhcmdl
dElkID0gU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQoaHJlZigpLmRlcHJlY2F0ZWRTdHJpbmco
KSk7Ci0gICAgRWxlbWVudCAqdGFyZ2V0RWxlbWVudCA9IG93bmVyRG9jdW1lbnQoKS0+Z2V0RWxl
bWVudEJ5SWQodGFyZ2V0SWQpOwotICAgIFNWR0VsZW1lbnQgKnRhcmdldCA9IHN2Z19keW5hbWlj
X2Nhc3QodGFyZ2V0RWxlbWVudCk7CisgICAgRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IG93bmVy
RG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQpOworICAgIFNWR0VsZW1lbnQqIHRh
cmdldCA9IHN2Z19keW5hbWljX2Nhc3QodGFyZ2V0RWxlbWVudCk7CiAgICAgaWYgKCF0YXJnZXQp
IHsKICAgICAgICAgLy9kb2N1bWVudCgpLT5hZGRGb3J3YXJkUmVmZXJlbmNlKHRoaXMpOwogICAg
ICAgICByZXR1cm47CkBAIC0xMTEsNyArMTA4LDcgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpjbG9z
ZVJlbmRlcmVyKCkKICAgICAgICAgaWYgKF9oID4gMCkKICAgICAgICAgICAgIGR1bW15LT5zZXRB
dHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIsIGhTdHJpbmcpOwogICAgICAgICAKLSAgICAg
ICAgU1ZHU3ltYm9sRWxlbWVudCAqc3ltYm9sID0gc3RhdGljX2Nhc3Q8U1ZHU3ltYm9sRWxlbWVu
dCAqPih0YXJnZXQpOworICAgICAgICBTVkdTeW1ib2xFbGVtZW50KiBzeW1ib2wgPSBzdGF0aWNf
Y2FzdDxTVkdTeW1ib2xFbGVtZW50Kj4odGFyZ2V0KTsKICAgICAgICAgaWYgKHN5bWJvbC0+aGFz
QXR0cmlidXRlKFNWR05hbWVzOjp2aWV3Qm94QXR0cikpIHsKICAgICAgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgc3ltYm9sVmlld0JveCA9IHN5bWJvbC0+Z2V0QXR0cmlidXRlKFNWR05hbWVz
Ojp2aWV3Qm94QXR0cik7CiAgICAgICAgICAgICBkdW1teS0+c2V0QXR0cmlidXRlKFNWR05hbWVz
Ojp2aWV3Qm94QXR0ciwgc3ltYm9sVmlld0JveCk7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdVc2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxl
bWVudC5oCShyZXZpc2lvbiAxNzAyNikKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1VzZUVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAg
ICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDIwICsyNCwyMCBA
QAogI2RlZmluZSBLU1ZHX1NWR1VzZUVsZW1lbnRJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAog
Ci0jaW5jbHVkZSAiU1ZHVGVzdHMuaCIKKyNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkLmgiCiAjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlLmgiCi0jaW5jbHVkZSAiU1ZHVVJJUmVm
ZXJlbmNlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKLSNp
bmNsdWRlICJTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgiCisjaW5jbHVkZSAiU1ZHVGVz
dHMuaCIKKyNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUK
IHsKICAgICBjbGFzcyBTVkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZHVXNlRWxlbWVudCA6IHB1Ymxp
YyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1YmxpYyBTVkdUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
YmxpYyBTVkdMYW5nU3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1YmxpYyBTVkdVUklSZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1Nw
YWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1VSSVJlZmVy
ZW5jZQogICAgIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNWR1VzZUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CkBAIC01MSwxMCArNTEsMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUKICAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlUmVuZGVyZXIoKTsKIAogICAgICAgICAv
LyAnU1ZHVXNlRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKLSAgICAgICAgdmly
dHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBT
dHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQotICAgICAgICB2aXJ0dWFs
IFJlbmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJT
dHlsZSAqc3R5bGUpOworICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5k
ZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQo
c3R5bGUpOyB9CisgICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZp
cnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0
aGlzOyB9Cg==
</data>
<flag name="review"
          id="3752"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11065</attachid>
            <date>2006-10-13 04:44:36 -0700</date>
            <delta_ts>2006-10-31 11:15:41 -0800</delta_ts>
            <desc>Improved patch</desc>
            <filename>11217-structure-3.diff</filename>
            <type>text/plain</type>
            <size>45012</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzAyNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODggQEAKKzIwMDYtMTAtMTMgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIHN2ZyBzdHJ1Y3R1
cmUgY2xhc3Nlcy4KKworICAgICAgICAqIGtzdmcyL3N2Zy9TVkdEZWZzRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdEZWZzRWxlbWVudDo6U1ZHRGVmc0VsZW1lbnQpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdEZWZzRWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdE
ZXNjRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdEZXNjRWxlbWVudDo6U1ZHRGVz
Y0VsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdEZXNjRWxlbWVudC5oOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdEb2N1bWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0Rv
Y3VtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OlNWR0VsZW1lbnRJbnN0YW5jZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OmNvcnJlc3BvbmRpbmdFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRJbnN0YW5jZTo6Y29ycmVzcG9uZGlu
Z1VzZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudEluc3RhbmNlOjpwYXJl
bnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRJbnN0YW5jZTo6Y2hpbGROb2Rl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OnByZXZpb3VzU2libGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6Om5leHRTaWJsaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRJbnN0YW5jZTo6Zmlyc3RDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6Omxhc3RDaGlsZCk6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdF
bGVtZW50SW5zdGFuY2VMaXN0LmNwcDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRWxlbWVudElu
c3RhbmNlTGlzdC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdHRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdHRWxlbWVudDo6U1ZHR0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0R1bW15RWxlbWVudDo6U1ZHRHVtbXlFbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcv
U1ZHR0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dFbGVtZW50OjpyZW5kZXJlcklz
TmVlZGVkKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ltYWdlRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAq
IGtzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU1ZH
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpTVkdTVkdFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OnBpeGVsVW5pdFRvTWlsbGlt
ZXRlclgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6cGl4ZWxVbml0VG9NaWxs
aW1ldGVyWSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjdXJyZW50U2NhbGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6c2V0Q3VycmVudFNjYWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmN1cnJlbnRUcmFuc2xhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6c3VzcGVuZFJlZHJhdyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTVkdFbGVtZW50Ojp1bnN1c3BlbmRSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU1ZHRWxlbWVudDo6dW5zdXNwZW5kUmVkcmF3QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1NWR0VsZW1lbnQ6OmZvcmNlUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1l
bnQ6OmdldEludGVyc2VjdGlvbkxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVu
dDo6Z2V0RW5jbG9zdXJlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojpj
aGVja0ludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjaGVj
a0VuY2xvc3VyZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpkZXNlbGVjdEFs
bCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdMZW5ndGgpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHQW5nbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTWF0cml4KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmdldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTVkdFbGVtZW50OjpnZXRTY3JlZW5DVE0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxl
bWVudDo6c2V0Q3VycmVudFRpbWUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTVkdFbGVtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToK
KyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTd2l0Y2hFbGVtZW50OjpTVkdTd2l0Y2hFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1N3aXRjaEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdT
d2l0Y2hFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZH
U3ltYm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTeW1ib2xFbGVtZW50OjpT
VkdTeW1ib2xFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N5bWJvbEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU3ltYm9sRWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9sRWxlbWVudDo6c2hvdWxkQXR0YWNoQ2hp
bGQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUaXRsZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGl0bGVFbGVtZW50OjpTVkdUaXRsZUVsZW1lbnQpOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdUaXRsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVXNlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjpjbG9zZVJlbmRlcmVy
KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVXNlRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6CisKIDIwMDYtMTAtMTIgIEFkZWxl
IFBldGVyc29uICA8YWRlbGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVy
cy4KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0RlZnNFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdEZWZzRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDI2
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRGVmc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xh
cyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjMsMTEgKzIzLDEyIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdEZWZzRWxlbWVudC5oIgorCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
U1ZHRGVmc0VsZW1lbnQ6OlNWR0RlZnNFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50ICpkb2MpCitTVkdEZWZzRWxlbWVudDo6U1ZHRGVmc0VsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIFNWR1Rlc3RzKCkKICAgICAs
IFNWR0xhbmdTcGFjZSgpCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdEZWZzRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0RlZnNFbGVtZW50LmgJKHJldmlz
aW9uIDE3MDI2KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRGVmc0VsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAw
NCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDE3ICsyNCwxNyBAQAogI2RlZmluZSBT
VkdEZWZzRWxlbWVudEltcGxfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKKyNpbmNsdWRlICJTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgiCisjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlLmgiCiAj
aW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdU
ZXN0cy5oIgotI2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5oIgotI2luY2x1ZGUgIlNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKICAgICBjbGFzcyBT
VkdEZWZzRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkCiAgICAgewogICAgIHB1Ymxp
YzoKICAgICAgICAgU1ZHRGVmc0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdEb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNzAyNikKKysr
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVy
bWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0RvY3VtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRG9jdW1lbnQuaAkocmV2aXNpb24gMTcwMjYp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdEb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
S0RFIHByb2plY3QKIApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICBjbGFzcyBTVkdEb2N1bWVudCA6IHB1YmxpYyBEb2N1bWVudCB7CiAgICAgcHVibGljOgotICAg
ICAgICBTVkdEb2N1bWVudChET01JbXBsZW1lbnRhdGlvbiAqaSwgRnJhbWVWaWV3ICp2aWV3KTsK
KyAgICAgICAgU1ZHRG9jdW1lbnQoRE9NSW1wbGVtZW50YXRpb24qLCBGcmFtZVZpZXcqKTsKICAg
ICAgICAgdmlydHVhbCB+U1ZHRG9jdW1lbnQoKTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc1NWR0RvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAxNzAyNikKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFpp
bW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIw
MDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBLREUgcHJvamVjdAogCkBAIC0yMiwxNCArMjIsMTUgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUg
IlNWR1VzZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKKwogI2lu
Y2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZUxpc3QuaCIKKyNpbmNsdWRlICJTVkdVc2VFbGVtZW50
LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1T
VkdFbGVtZW50SW5zdGFuY2U6OlNWR0VsZW1lbnRJbnN0YW5jZSgpIDogRXZlbnRUYXJnZXQoKQor
U1ZHRWxlbWVudEluc3RhbmNlOjpTVkdFbGVtZW50SW5zdGFuY2UoKQorICAgIDogRXZlbnRUYXJn
ZXQoKQogewogfQogCkBAIC0zNyw0NiArMzgsNDggQEAgU1ZHRWxlbWVudEluc3RhbmNlOjp+U1ZH
RWxlbWVudEluc3RhbmNlKAogewogfQogCi1TVkdFbGVtZW50ICpTVkdFbGVtZW50SW5zdGFuY2U6
OmNvcnJlc3BvbmRpbmdFbGVtZW50KCkgY29uc3QKK1NWR0VsZW1lbnQqIFNWR0VsZW1lbnRJbnN0
YW5jZTo6Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQog
Ci1TVkdVc2VFbGVtZW50ICpTVkdFbGVtZW50SW5zdGFuY2U6OmNvcnJlc3BvbmRpbmdVc2VFbGVt
ZW50KCkgY29uc3QKK1NWR1VzZUVsZW1lbnQqIFNWR0VsZW1lbnRJbnN0YW5jZTo6Y29ycmVzcG9u
ZGluZ1VzZUVsZW1lbnQoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi1TVkdFbGVtZW50
SW5zdGFuY2UgKlNWR0VsZW1lbnRJbnN0YW5jZTo6cGFyZW50Tm9kZSgpIGNvbnN0CitTVkdFbGVt
ZW50SW5zdGFuY2UqIFNWR0VsZW1lbnRJbnN0YW5jZTo6cGFyZW50Tm9kZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIDA7CiB9CiAKLVNWR0VsZW1lbnRJbnN0YW5jZUxpc3QgKlNWR0VsZW1lbnRJbnN0
YW5jZTo6Y2hpbGROb2RlcygpIGNvbnN0CitTVkdFbGVtZW50SW5zdGFuY2VMaXN0KiBTVkdFbGVt
ZW50SW5zdGFuY2U6OmNoaWxkTm9kZXMoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi1T
VkdFbGVtZW50SW5zdGFuY2UgKlNWR0VsZW1lbnRJbnN0YW5jZTo6cHJldmlvdXNTaWJsaW5nKCkg
Y29uc3QKK1NWR0VsZW1lbnRJbnN0YW5jZSogU1ZHRWxlbWVudEluc3RhbmNlOjpwcmV2aW91c1Np
YmxpbmcoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi1TVkdFbGVtZW50SW5zdGFuY2Ug
KlNWR0VsZW1lbnRJbnN0YW5jZTo6bmV4dFNpYmxpbmcoKSBjb25zdAorU1ZHRWxlbWVudEluc3Rh
bmNlKiBTVkdFbGVtZW50SW5zdGFuY2U6Om5leHRTaWJsaW5nKCkgY29uc3QKIHsKICAgICByZXR1
cm4gMDsKIH0KIAotU1ZHRWxlbWVudEluc3RhbmNlICpTVkdFbGVtZW50SW5zdGFuY2U6OmZpcnN0
Q2hpbGQoKSBjb25zdAorU1ZHRWxlbWVudEluc3RhbmNlKiBTVkdFbGVtZW50SW5zdGFuY2U6OmZp
cnN0Q2hpbGQoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi1TVkdFbGVtZW50SW5zdGFu
Y2UgKlNWR0VsZW1lbnRJbnN0YW5jZTo6bGFzdENoaWxkKCkgY29uc3QKK1NWR0VsZW1lbnRJbnN0
YW5jZSogU1ZHRWxlbWVudEluc3RhbmNlOjpsYXN0Q2hpbGQoKSBjb25zdAogewogICAgIHJldHVy
biAwOwogfQogCit9CisKIC8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAog
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuaAkocmV2aXNpb24gMTcw
MjYpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5p
a29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwg
MjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDcgKzI0LDcgQEAKICNkZWZpbmUgS1NWR19T
VkdFbGVtZW50SW5zdGFuY2VJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSA8
a2RvbS9ldmVudHMvRXZlbnRUYXJnZXQuaD4KKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZQogewpAQCAtMzgsMTUgKzM4LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
CiAgICAgICAgIHZpcnR1YWwgflNWR0VsZW1lbnRJbnN0YW5jZSgpOwogCiAgICAgICAgIC8vICdT
VkdFbGVtZW50SW5zdGFuY2UnIGZ1bmN0aW9ucwotICAgICAgICBTVkdFbGVtZW50ICpjb3JyZXNw
b25kaW5nRWxlbWVudCgpIGNvbnN0OwotICAgICAgICBTVkdVc2VFbGVtZW50ICpjb3JyZXNwb25k
aW5nVXNlRWxlbWVudCgpIGNvbnN0OworICAgICAgICBTVkdFbGVtZW50KiBjb3JyZXNwb25kaW5n
RWxlbWVudCgpIGNvbnN0OworICAgICAgICBTVkdVc2VFbGVtZW50KiBjb3JyZXNwb25kaW5nVXNl
RWxlbWVudCgpIGNvbnN0OwogCi0gICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZSAqcGFyZW50Tm9k
ZSgpIGNvbnN0OwotICAgICAgICBTVkdFbGVtZW50SW5zdGFuY2VMaXN0ICpjaGlsZE5vZGVzKCkg
Y29uc3Q7Ci0gICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZSAqcHJldmlvdXNTaWJsaW5nKCkgY29u
c3Q7Ci0gICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZSAqbmV4dFNpYmxpbmcoKSBjb25zdDsKLSAg
ICAgICAgU1ZHRWxlbWVudEluc3RhbmNlICpmaXJzdENoaWxkKCkgY29uc3Q7Ci0gICAgICAgIFNW
R0VsZW1lbnRJbnN0YW5jZSAqbGFzdENoaWxkKCkgY29uc3Q7CisgICAgICAgIFNWR0VsZW1lbnRJ
bnN0YW5jZSogcGFyZW50Tm9kZSgpIGNvbnN0OworICAgICAgICBTVkdFbGVtZW50SW5zdGFuY2VM
aXN0KiBjaGlsZE5vZGVzKCkgY29uc3Q7CisgICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZSogcHJl
dmlvdXNTaWJsaW5nKCkgY29uc3Q7CisgICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZSogbmV4dFNp
YmxpbmcoKSBjb25zdDsKKyAgICAgICAgU1ZHRWxlbWVudEluc3RhbmNlKiBmaXJzdENoaWxkKCkg
Y29uc3Q7CisgICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZSogbGFzdENoaWxkKCkgY29uc3Q7CiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHRWxlbWVudEluc3RhbmNlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5jcHAJKHJldmlzaW9uIDE3MDI2KQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFpp
bW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIw
MDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBLREUgcHJvamVjdAogCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAK
ICNpZmRlZiBTVkdfU1VQUE9SVAotCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVt
ZW50SW5zdGFuY2VMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxl
bWVudEluc3RhbmNlTGlzdC5oCShyZXZpc2lvbiAxNzAyNikKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0VsZW1lbnRJbnN0YW5jZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2ls
ZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0
CiAKQEAgLTI1LDggKzI1LDggQEAKIAogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRlICJT
VkdMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCisjaW5jbHVkZSAiU1ZH
TGlzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0dFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTcwMjYpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAg
ICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAg
ICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxMiArMjQsMTEg
QEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0dFbGVtZW50LmgiCiAKLSNpbmNs
dWRlIDxrY2FudmFzL1JlbmRlclNWR0NvbnRhaW5lci5oPgotI2luY2x1ZGUgPGtjYW52YXMvZGV2
aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KKyNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdHRWxlbWVudDo6U1ZHR0VsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKK1NWR0dFbGVtZW50OjpTVkdH
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAg
IDogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKQogICAgICwgU1ZH
VGVzdHMoKQogICAgICwgU1ZHTGFuZ1NwYWNlKCkKQEAgLTQxLDcgKzQwLDcgQEAgU1ZHR0VsZW1l
bnQ6On5TVkdHRWxlbWVudCgpCiB7CiB9CiAKLXZvaWQgU1ZHR0VsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgU1ZHR0VsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAoU1ZHVGVz
dHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICByZXR1cm47CkBAIC01OCw3
ICs1Nyw3IEBAIFJlbmRlck9iamVjdCogU1ZHR0VsZW1lbnQ6OmNyZWF0ZVJlbmRlcmUKIH0KIAog
Ly8gSGVscGVyIGNsYXNzIGZvciA8dXNlPiBzdXBwb3J0Ci1TVkdEdW1teUVsZW1lbnQ6OlNWR0R1
bW15RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQor
U1ZHRHVtbXlFbGVtZW50OjpTVkdEdW1teUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR0dFbGVtZW50KHRhZ05hbWUsIGRvYykKICAg
ICAsICBtX2xvY2FsTmFtZSgiZHVtbXkiKQogewpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
R0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHRWxlbWVudC5o
CShyZXZpc2lvbiAxNzAyNikKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0dFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAg
ICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAg
IDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxNyArMjQsMTcgQEAKICNkZWZp
bmUgS1NWR19TVkdHRWxlbWVudEltcGxfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKKyNpbmNsdWRl
ICJTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgiCisjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNl
LmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdUZXN0cy5oIgotI2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5oIgotI2luY2x1ZGUgIlNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKICAgICBj
bGFzcyBTVkdHRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZAorICAgICAgICAg
ICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAg
cHVibGljIFNWR0xhbmdTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkCiAgICAgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZH
R0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CkBAIC00MiwxMCArNDIs
MTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBp
c1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlKik7CiAKLSAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5
bGUgKnN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxl
KTsgfQotICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVy
QXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpOworICAgICAgICB2aXJ0dWFsIGJvb2wg
cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1l
bnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9CisgICAgICAgIHZpcnR1YWwgUmVuZGVyT2Jq
ZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAKICAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJ
bWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ltYWdl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDI2KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHSW1h
Z2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3Jn
PgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
ICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgogICAgICAgICAgICAgICAgICAgMjAwNiAgICAgICBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5v
dkBrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CkBA
IC0yNSwxOSArMjUsMTcgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0ltYWdl
RWxlbWVudC5oIgogCi0jaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFt
ZXMuaCIKKyNpbmNsdWRlICJLQ2FudmFzSW1hZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdDb250
YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdJbWFnZS5oIgotI2luY2x1ZGUgIlNWR0xlbmd0
aC5oIgotI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKICNpbmNsdWRlICJTVkdE
b2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5o
IgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRp
by5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCi0jaW5jbHVkZSAiS0NhbnZhc0ltYWdl
LmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC05Nyw3ICs5NSw3IEBAIHZvaWQgU1ZHSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnUKICAgICB9CiB9CiAKLVJlbmRlck9iamVjdCAqU1ZHSW1hZ2VFbGVtZW50OjpjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSkKK1JlbmRlck9iamVj
dCogU1ZHSW1hZ2VFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJl
bmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHSW1h
Z2UodGhpcyk7CiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAkocmV2aXNp
b24gMTcwMjYpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAw
NCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDEyICsyNCwxMiBAQAogI2RlZmluZSBL
U1ZHX1NWR0ltYWdlRWxlbWVudEltcGxfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRl
ICJTVkdUZXN0cy5oIgotI2luY2x1ZGUgIlNWR0ltYWdlTG9hZGVyLmgiCisjaW5jbHVkZSAiU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIgogI2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5oIgot
I2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIlNWR0ltYWdlTG9hZGVyLmgi
CiAjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgiCisjaW5jbHVkZSAiU1ZHVGVzdHMuaCIKKyNp
bmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKQEAgLTM4
LDEwICszOCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgIGNsYXNzIFNWR0RvY3VtZW50Owog
CiAgICAgY2xhc3MgU1ZHSW1hZ2VFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVz
dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdMYW5nU3BhY2Us
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZH
VVJJUmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3Rz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdMYW5nU3BhY2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1VSSVJlZmVyZW5jZQog
ICAgIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNWR0ltYWdlRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAgLTUwLDExICs1MCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3Rz
Ojppc1ZhbGlkKCk7IH0KIAogICAgICAgICAvLyAnU1ZHSW1hZ2VFbGVtZW50JyBmdW5jdGlvbnMK
LSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSAqYXR0cik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogCiAgICAgICAg
IHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1
cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KLSAgICAgICAgdmly
dHVhbCBSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVu
ZGVyU3R5bGUgKnN0eWxlKTsKKyAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QgKmNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKICAgICAgICAgCiAgICAgcHJvdGVj
dGVkOgogICAgICAgICB2aXJ0dWFsIGJvb2wgaGF2ZUxvYWRlZFJlcXVpcmVkUmVzb3VyY2VzKCk7
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkocmV2aXNpb24gMTcwMjYpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAKQEAgLTMwLDE2ICszMCwxMyBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLU1ZHVGltZVNjaGVkdWxlci5o
IgorI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIlNWR0FuZ2xlLmgi
CiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRp
by5oIgotI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR01h
dHJpeC5oIgorI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKICNpbmNsdWRlICJT
VkdUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJTVkdab29tRXZlbnQuaCIKLSNpbmNsdWRlICJrc3Zn
LmgiCi0jaW5jbHVkZSA8a2NhbnZhcy9SZW5kZXJTVkdDb250YWluZXIuaD4KLSNpbmNsdWRlIDxr
Y2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Nyw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgRXZlbnRO
YW1lczsKIAotU1ZHU1ZHRWxlbWVudDo6U1ZHU1ZHRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHU1ZHRWxlbWVudDo6U1ZHU1ZHRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHU3R5
bGVkTG9jYXRhYmxlRWxlbWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCBTVkdUZXN0cygpCiAgICAg
LCBTVkdMYW5nU3BhY2UoKQpAQCAtMTEzLDI3ICsxMTAsMTMgQEAgRmxvYXRSZWN0IFNWR1NWR0Vs
ZW1lbnQ6OnZpZXdwb3J0KCkgY29ucwogCiBmbG9hdCBTVkdTVkdFbGVtZW50OjpwaXhlbFVuaXRU
b01pbGxpbWV0ZXJYKCkgY29uc3QKIHsKLSNpZiAwCi0gICAgaWYob3duZXJEb2N1bWVudCgpICYm
IG93bmVyRG9jdW1lbnQoKS0+cGFpbnREZXZpY2VNZXRyaWNzKCkpCi0gICAgewotICAgICAgICBR
M1BhaW50RGV2aWNlTWV0cmljcyAqbWV0cmljcyA9IG93bmVyRG9jdW1lbnQoKS0+cGFpbnREZXZp
Y2VNZXRyaWNzKCk7Ci0gICAgICAgIHJldHVybiBmbG9hdChtZXRyaWNzLT53aWR0aE1NKCkpIC8g
ZmxvYXQobWV0cmljcy0+d2lkdGgoKSk7Ci0gICAgfQotI2VuZGlmCi0KKyAgICAvLyBGSVhNRTog
SW1wbGVtZW50IG1lIChzZWUgYnVnIDExMjczKQogICAgIHJldHVybiAuMjg7CiB9CiAKIGZsb2F0
IFNWR1NWR0VsZW1lbnQ6OnBpeGVsVW5pdFRvTWlsbGltZXRlclkoKSBjb25zdAogewotI2lmIDAK
LSAgICBpZihvd25lckRvY3VtZW50KCkgJiYgb3duZXJEb2N1bWVudCgpLT5wYWludERldmljZU1l
dHJpY3MoKSkKLSAgICB7Ci0gICAgICAgIFEzUGFpbnREZXZpY2VNZXRyaWNzICptZXRyaWNzID0g
b3duZXJEb2N1bWVudCgpLT5wYWludERldmljZU1ldHJpY3MoKTsKLSAgICAgICAgcmV0dXJuIGZs
b2F0KG1ldHJpY3MtPmhlaWdodE1NKCkpIC8gZmxvYXQobWV0cmljcy0+aGVpZ2h0KCkpOwotICAg
IH0KLSNlbmRpZgotCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBtZSAoc2VlIGJ1ZyAxMTI3MykK
ICAgICByZXR1cm4gLjI4OwogfQogCkBAIC0xNTksMjggKzE0MiwxOSBAQCB2b2lkIFNWR1NWR0Vs
ZW1lbnQ6OnNldFVzZUN1cnJlbnRWaWV3KGJvCiAKIGZsb2F0IFNWR1NWR0VsZW1lbnQ6OmN1cnJl
bnRTY2FsZSgpIGNvbnN0CiB7Ci0gICAgLy9pZighY2FudmFzVmlldygpKQotICAgICAgICByZXR1
cm4gMS47Ci0KLSAgICAvL3JldHVybiBjYW52YXNWaWV3KCktPnpvb20oKTsKKyAgICAvLyBGSVhN
RTogUmV0dXJuIHRoZSBjdXJyZW50IHpvb20vc2NhbGUgdmFsdWUgKHNlZSBidWcgMTEyNzIpCisg
ICAgcmV0dXJuIDEuOwogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OnNldEN1cnJlbnRTY2FsZShm
bG9hdCBzY2FsZSkKIHsKLS8vICAgIGlmKGNhbnZhc1ZpZXcoKSkKLS8vICAgIHsKLS8vICAgICAg
ICBmbG9hdCBvbGR6b29tID0gY2FudmFzVmlldygpLT56b29tKCk7Ci0vLyAgICAgICAgY2FudmFz
VmlldygpLT5zZXRab29tKHNjYWxlKTsKLS8vICAgICAgICBkb2N1bWVudCgpLT5kaXNwYXRjaFpv
b21FdmVudChvbGR6b29tLCBzY2FsZSk7Ci0vLyAgICB9CisgICAgLy8gRklYTUU6IFNldCB0aGUg
Y3VycmVudCB6b29tL3NjYWxlIHZhbHVlIChzZWUgYnVnIDExMjcyKQogfQogCiBGbG9hdFBvaW50
IFNWR1NWR0VsZW1lbnQ6OmN1cnJlbnRUcmFuc2xhdGUoKSBjb25zdAogewotICAgIC8vaWYoIXZp
ZXcoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKLQotICAgIC8vcmV0dXJuIGNyZWF0
ZVNWR1BvaW50KGNhbnZhc1ZpZXcoKS0+cGFuKCkpOworICAgIC8vIEZJWE1FOiBSZXR1cm4gdGhl
IGN1cnJlbnQgcGFuL3RyYW5zbGF0ZSB2YWx1ZSAoc2VlIGJ1ZyAxMTI3MikKKyAgICByZXR1cm4g
RmxvYXRQb2ludCgpOwogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OmFkZFNWR1dpbmRvd0V2ZW50
TGlzdG5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgY29uc3QgQXR0cmlidXRlKiBh
dHRyKQpAQCAtMTkyLDcgKzE2Niw3IEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6YWRkU1ZHV2luZG93
RXZlbnRMaXMKICAgICBkb2N1bWVudCgpLT5zZXRIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihldmVu
dFR5cGUsIGxpc3RlbmVyLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgU1ZHU1ZHRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBTVkdTVkdFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKCFuZWFy
ZXN0Vmlld3BvcnRFbGVtZW50KCkpIHsKQEAgLTIzOCwzNiArMjEyLDM1IEBAIHZvaWQgU1ZHU1ZH
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUKIAogdW5zaWduZWQgbG9uZyBTVkdTVkdFbGVt
ZW50OjpzdXNwZW5kUmVkcmF3KHVuc2lnbmVkIGxvbmcgLyogbWF4X3dhaXRfbWlsbGlzZWNvbmRz
ICovKQogewotICAgIC8vIFRPRE8KKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lIChzZWUgYnVn
IDExMjc1KQogICAgIHJldHVybiAwOwogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OnVuc3VzcGVu
ZFJlZHJhdyh1bnNpZ25lZCBsb25nIC8qIHN1c3BlbmRfaGFuZGxlX2lkICovLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICAvLyBpZiBzdXNwZW5kX2hhbmRsZV9pZCBpcyBub3QgZm91bmQsIHRo
cm93IGV4Y2VwdGlvbgotICAgIC8vIFRPRE8KKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lIChz
ZWUgYnVnIDExMjc1KQogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OnVuc3VzcGVuZFJlZHJhd0Fs
bCgpCiB7Ci0gICAgLy8gVE9ETworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUgKHNlZSBidWcg
MTEyNzUpCiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVudDo6Zm9yY2VSZWRyYXcoKQogewotICAgIC8v
IFRPRE8KKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lIChzZWUgYnVnIDExMjc1KQogfQogCi1O
b2RlTGlzdCAqU1ZHU1ZHRWxlbWVudDo6Z2V0SW50ZXJzZWN0aW9uTGlzdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIFNWR0VsZW1lbnQqKQorTm9kZUxpc3QqIFNWR1NWR0VsZW1lbnQ6OmdldEludGVy
c2VjdGlvbkxpc3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBTVkdFbGVtZW50KikKIHsKLSAgICAv
L05vZGVMaXN0ICpsaXN0OwotICAgIC8vIFRPRE8KKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1l
IChzZWUgYnVnIDExMjc0KQogICAgIHJldHVybiAwOwogfQogCi1Ob2RlTGlzdCAqU1ZHU1ZHRWxl
bWVudDo6Z2V0RW5jbG9zdXJlTGlzdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFNWR0VsZW1lbnQq
KQorTm9kZUxpc3QqIFNWR1NWR0VsZW1lbnQ6OmdldEVuY2xvc3VyZUxpc3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBTVkdFbGVtZW50KikKIHsKLSAgICAvLyBUT0RPCisgICAgLy8gRklYTUU6IElt
cGxlbWVudCBtZSAoc2VlIGJ1ZyAxMTI3NCkKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjc1LDYg
KzI0OCw3IEBAIGJvb2wgU1ZHU1ZHRWxlbWVudDo6Y2hlY2tJbnRlcnNlY3Rpb24oU1YKIHsKICAg
ICAvLyBUT0RPIDogdGFrZSBpbnRvIGFjY291bnQgcG9pbnRlci1ldmVudHM/CiAgICAgLy8gRklY
TUU6IFdoeSBpcyBlbGVtZW50IGlnbm9yZWQ/PworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUg
KHNlZSBidWcgMTEyNzQpCiAgICAgcmV0dXJuIHJlY3QuaW50ZXJzZWN0cyhnZXRCQm94KCkpOwog
fQogCkBAIC0yODIsMTIgKzI1NiwxMyBAQCBib29sIFNWR1NWR0VsZW1lbnQ6OmNoZWNrRW5jbG9z
dXJlKFNWR0VsCiB7CiAgICAgLy8gVE9ETyA6IHRha2UgaW50byBhY2NvdW50IHBvaW50ZXItZXZl
bnRzPwogICAgIC8vIEZJWE1FOiBXaHkgaXMgZWxlbWVudCBpZ25vcmVkPz8KKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50IG1lIChzZWUgYnVnIDExMjc0KQogICAgIHJldHVybiByZWN0LmNvbnRhaW5z
KGdldEJCb3goKSk7CiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVudDo6ZGVzZWxlY3RBbGwoKQogewot
ICAgIC8vIFRPRE8KKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lIChzZWUgYnVnIDExMjc1KQog
fQogCiBmbG9hdCBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdOdW1iZXIoKQpAQCAtMjk1LDEyICsy
NzAsMTIgQEAgZmxvYXQgU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTnVtYmVyKCkKICAgICByZXR1
cm4gMDsKIH0KIAotU1ZHTGVuZ3RoICpTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdMZW5ndGgoKQor
U1ZHTGVuZ3RoKiBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdMZW5ndGgoKQogewogICAgIHJldHVy
biBuZXcgU1ZHTGVuZ3RoKDApOwogfQogCi1TVkdBbmdsZSAqU1ZHU1ZHRWxlbWVudDo6Y3JlYXRl
U1ZHQW5nbGUoKQorU1ZHQW5nbGUqIFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR0FuZ2xlKCkKIHsK
ICAgICByZXR1cm4gbmV3IFNWR0FuZ2xlKDApOwogfQpAQCAtMzEwLDcgKzI4NSw3IEBAIEZsb2F0
UG9pbnQgU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHUG9pbnQKICAgICByZXR1cm4gRmxvYXRQb2lu
dChwKTsKIH0KIAotU1ZHTWF0cml4ICpTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdNYXRyaXgoKQor
U1ZHTWF0cml4KiBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdNYXRyaXgoKQogewogICAgIHJldHVy
biBuZXcgU1ZHTWF0cml4KCk7CiB9CkBAIC0zMjAsMjcgKzI5NSwyNSBAQCBGbG9hdFJlY3QgU1ZH
U1ZHRWxlbWVudDo6Y3JlYXRlU1ZHUmVjdCgpCiAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogfQog
Ci1TVkdUcmFuc2Zvcm0gKlNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1RyYW5zZm9ybSgpCitTVkdU
cmFuc2Zvcm0qIFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1RyYW5zZm9ybSgpCiB7CiAgICAgcmV0
dXJuIG5ldyBTVkdUcmFuc2Zvcm0oKTsKIH0KIAotU1ZHVHJhbnNmb3JtICpTVkdTVkdFbGVtZW50
OjpjcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KFNWR01hdHJpeCAqbWF0cml4KQorU1ZHVHJh
bnNmb3JtKiBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KFNWR01h
dHJpeCogbWF0cml4KQogeyAgICAKLSAgICBTVkdUcmFuc2Zvcm0gKm9iaiA9IFNWR1NWR0VsZW1l
bnQ6OmNyZWF0ZVNWR1RyYW5zZm9ybSgpOworICAgIFNWR1RyYW5zZm9ybSogb2JqID0gU1ZHU1ZH
RWxlbWVudDo6Y3JlYXRlU1ZHVHJhbnNmb3JtKCk7CiAgICAgb2JqLT5zZXRNYXRyaXgobWF0cml4
KTsKICAgICByZXR1cm4gb2JqOwogfQogCi1TVkdNYXRyaXggKlNWR1NWR0VsZW1lbnQ6OmdldENU
TSgpIGNvbnN0CitTVkdNYXRyaXgqIFNWR1NWR0VsZW1lbnQ6OmdldENUTSgpIGNvbnN0CiB7Ci0g
ICAgU1ZHTWF0cml4ICptYXQgPSBjcmVhdGVTVkdNYXRyaXgoKTsKLSAgICBpZihtYXQpCi0gICAg
eworICAgIFNWR01hdHJpeCogbWF0ID0gY3JlYXRlU1ZHTWF0cml4KCk7CisgICAgaWYgKG1hdCkg
ewogICAgICAgICBtYXQtPnRyYW5zbGF0ZSh4KCktPnZhbHVlKCksIHkoKS0+dmFsdWUoKSk7CiAK
LSAgICAgICAgaWYoYXR0cmlidXRlcygpLT5nZXROYW1lZEl0ZW0oU1ZHTmFtZXM6OnZpZXdCb3hB
dHRyKSkKLSAgICAgICAgeworICAgICAgICBpZiAoYXR0cmlidXRlcygpLT5nZXROYW1lZEl0ZW0o
U1ZHTmFtZXM6OnZpZXdCb3hBdHRyKSkgewogICAgICAgICAgICAgUmVmUHRyPFNWR01hdHJpeD4g
dmlld0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0od2lkdGgoKS0+dmFsdWUoKSwgaGVpZ2h0
KCktPnZhbHVlKCkpOwogICAgICAgICAgICAgbWF0LT5tdWx0aXBseSh2aWV3Qm94LmdldCgpKTsK
ICAgICAgICAgfQpAQCAtMzQ5LDEwICszMjIsMTAgQEAgU1ZHTWF0cml4ICpTVkdTVkdFbGVtZW50
OjpnZXRDVE0oKSBjb25zdAogICAgIHJldHVybiBtYXQ7CiB9CiAKLVNWR01hdHJpeCAqU1ZHU1ZH
RWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCkgY29uc3QKK1NWR01hdHJpeCogU1ZHU1ZHRWxlbWVudDo6
Z2V0U2NyZWVuQ1RNKCkgY29uc3QKIHsKLSAgICBTVkdNYXRyaXggKm1hdCA9IFNWR1N0eWxlZExv
Y2F0YWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpOwotICAgIGlmKG1hdCkgeworICAgIFNWR01h
dHJpeCogbWF0ID0gU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCk7Cisg
ICAgaWYgKG1hdCkgewogICAgICAgICBtYXQtPnRyYW5zbGF0ZSh4KCktPnZhbHVlKCksIHkoKS0+
dmFsdWUoKSk7CiAKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMoKS0+Z2V0TmFtZWRJdGVtKFNWR05h
bWVzOjp2aWV3Qm94QXR0cikpIHsKQEAgLTM2OCw3ICszNDEsNyBAQCBSZW5kZXJPYmplY3QqIFNW
R1NWR0VsZW1lbnQ6OmNyZWF0ZVJlbmRlCiB7CiAgICAgUmVuZGVyU1ZHQ29udGFpbmVyKiByb290
Q29udGFpbmVyID0gbmV3IChhcmVuYSkgUmVuZGVyU1ZHQ29udGFpbmVyKHRoaXMpOwogCi0gICAg
Ly8gRklYTUU6IGFsbCB0aGlzIHNldHVwIHNob3VsZCBiZSBkb25lIGFmdGVyIGF0dHJpYnV0ZXND
aGFuZ2VkLCBub3QgaGVyZS4KKyAgICAvLyBGSVhNRTogQWxsIHRoaXMgc2V0dXAgc2hvdWxkIGJl
IGRvbmUgYWZ0ZXIgYXR0cmlidXRlc0NoYW5nZWQsIG5vdCBoZXJlLgogICAgIHJvb3RDb250YWlu
ZXItPnNldFZpZXdCb3godmlld0JveCgpKTsKICAgICByb290Q29udGFpbmVyLT5zZXRBbGlnbihL
Q0FsaWduKHByZXNlcnZlQXNwZWN0UmF0aW8oKS0+YWxpZ24oKSAtIDEpKTsKICAgICByb290Q29u
dGFpbmVyLT5zZXRTbGljZShwcmVzZXJ2ZUFzcGVjdFJhdGlvKCktPm1lZXRPclNsaWNlKCkgPT0g
U1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6U1ZHX01FRVRPUlNMSUNFX1NMSUNFKTsKQEAgLTQxOCw3
ICszOTEsNyBAQCBmbG9hdCBTVkdTVkdFbGVtZW50OjpnZXRDdXJyZW50VGltZSgpIGNvCiAKIHZv
aWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q3VycmVudFRpbWUoZmxvYXQgLyogc2Vjb25kcyAqLykKIHsK
LSAgICAvLyBUT0RPCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBtZQogfQogCiB2b2lkIFNWR1NW
R0VsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZl
RGVjbHMpCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVudC5oCShyZXZpc2lvbiAxNzAyNikK
KysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAKQEAgLTI0LDE2ICsyNCwxNSBAQAogI2RlZmluZSBTVkdTVkdFbGVtZW50
X0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSAiU1ZHVGVzdHMuaCIKLSNpbmNsdWRl
ICJTVkdMYW5nU3BhY2UuaCIKKyNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
LmgiCiAjaW5jbHVkZSAiU1ZHRml0VG9WaWV3Qm94LmgiCi0jaW5jbHVkZSAiU1ZHWm9vbUFuZFBh
bi5oIgorI2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZExvY2F0
YWJsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgi
CisjaW5jbHVkZSAiU1ZHVGVzdHMuaCIKKyNpbmNsdWRlICJTVkdab29tQW5kUGFuLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgRG9jdW1lbnRQdHI7CiAgICAgY2xhc3MgU1ZH
QW5nbGU7CiAgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFNWR01hdHJpeDsKQEAgLTQx
LDExICs0MCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgIGNsYXNzIFNWR0xlbmd0aDsKICAg
ICBjbGFzcyBUaW1lU2NoZWR1bGVyOwogICAgIGNsYXNzIFNWR1NWR0VsZW1lbnQgOiBwdWJsaWMg
U1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1YmxpYyBTVkdUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBT
VkdMYW5nU3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
YmxpYyBTVkdGaXRUb1ZpZXdCb3gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHWm9vbUFuZFBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVz
dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdMYW5nU3BhY2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRml0VG9WaWV3Qm94LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHWm9vbUFuZFBhbgogICAgIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIGVudW0gU1ZHWm9vbUFuZFBhblR5cGUgewpAQCAtNzgsNyArNzcsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICBib29sIHVzZUN1cnJlbnRWaWV3KCkgY29uc3Q7
CiAgICAgICAgIHZvaWQgc2V0VXNlQ3VycmVudFZpZXcoYm9vbCBjdXJyZW50Vmlldyk7CiAKLSAg
ICAgICAgLy8gU1ZHVmlld1NwZWMgKmN1cnJlbnRWaWV3KCkgY29uc3Q7CisgICAgICAgIC8vIFNW
R1ZpZXdTcGVjKiBjdXJyZW50VmlldygpIGNvbnN0OwogCiAgICAgICAgIGZsb2F0IGN1cnJlbnRT
Y2FsZSgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEN1cnJlbnRTY2FsZShmbG9hdCBzY2FsZSk7
CkBAIC05OSw4ICs5OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZvaWQgdW5zdXNw
ZW5kUmVkcmF3QWxsKCk7CiAgICAgICAgIHZvaWQgZm9yY2VSZWRyYXcoKTsKIAotICAgICAgICBO
b2RlTGlzdCogZ2V0SW50ZXJzZWN0aW9uTGlzdChjb25zdCBGbG9hdFJlY3QmLCBTVkdFbGVtZW50
ICpyZWZlcmVuY2VFbGVtZW50KTsKLSAgICAgICAgTm9kZUxpc3QqIGdldEVuY2xvc3VyZUxpc3Qo
Y29uc3QgRmxvYXRSZWN0JiwgU1ZHRWxlbWVudCAqcmVmZXJlbmNlRWxlbWVudCk7CisgICAgICAg
IE5vZGVMaXN0KiBnZXRJbnRlcnNlY3Rpb25MaXN0KGNvbnN0IEZsb2F0UmVjdCYsIFNWR0VsZW1l
bnQqIHJlZmVyZW5jZUVsZW1lbnQpOworICAgICAgICBOb2RlTGlzdCogZ2V0RW5jbG9zdXJlTGlz
dChjb25zdCBGbG9hdFJlY3QmLCBTVkdFbGVtZW50KiByZWZlcmVuY2VFbGVtZW50KTsKICAgICAg
ICAgYm9vbCBjaGVja0ludGVyc2VjdGlvbihTVkdFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0Jik7
CiAgICAgICAgIGJvb2wgY2hlY2tFbmNsb3N1cmUoU1ZHRWxlbWVudCosIGNvbnN0IEZsb2F0UmVj
dCYpOwogICAgICAgICB2b2lkIGRlc2VsZWN0QWxsKCk7CkBAIC0xMTQsMTUgKzExMywxNSBAQCBu
YW1lc3BhY2UgV2ViQ29yZQogICAgICAgICBzdGF0aWMgU1ZHVHJhbnNmb3JtKiBjcmVhdGVTVkdU
cmFuc2Zvcm0oKTsKICAgICAgICAgc3RhdGljIFNWR1RyYW5zZm9ybSogY3JlYXRlU1ZHVHJhbnNm
b3JtRnJvbU1hdHJpeChTVkdNYXRyaXgqKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogCiAgICAgICAgIC8v
ICd2aXJ0dWFsIFNWR0xvY2F0YWJsZScgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgU1ZHTWF0
cml4ICpnZXRDVE0oKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBTVkdNYXRyaXggKmdldFNjcmVl
bkNUTSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeCogZ2V0Q1RNKCkgY29uc3Q7
CisgICAgICAgIHZpcnR1YWwgU1ZHTWF0cml4KiBnZXRTY3JlZW5DVE0oKSBjb25zdDsKKworICAg
ICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpIHsg
cmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9CisgICAgICAg
IHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRl
clN0eWxlKik7CiAKLSAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVy
U3R5bGUgKnN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0
eWxlKTsgfQotICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVu
ZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpOwotICAgICAgICAKICAgICAgICAg
dmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N3
aXRjaEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N3aXRj
aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzAyNikKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N3
aXRjaEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5v
cmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjIs
MjEgKzIyLDE4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQUE9SVAot
I2luY2x1ZGUgIkF0dHIuaCIKLQotI2luY2x1ZGUgPGtjYW52YXMvUmVuZGVyU1ZHQ29udGFpbmVy
Lmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgorI2luY2x1
ZGUgIlNWR1N3aXRjaEVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5o
IgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHSGVscGVyLmgiCi0jaW5jbHVk
ZSAiU1ZHVGVzdHMuaCIKLSNpbmNsdWRlICJTVkdTd2l0Y2hFbGVtZW50LmgiCi0jaW5jbHVkZSAi
U1ZHTGVuZ3RoLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHU3dpdGNoRWxlbWVudDo6
U1ZHU3dpdGNoRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAq
ZG9jKQotOiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCh0YWdOYW1lLCBkb2MpLCBTVkdU
ZXN0cygpLCBTVkdMYW5nU3BhY2UoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCitT
VkdTd2l0Y2hFbGVtZW50OjpTVkdTd2l0Y2hFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dCh0YWdOYW1lLCBkb2MpCisgICAgLCBTVkdUZXN0cygpCisgICAgLCBTVkdMYW5nU3BhY2UoKQor
ICAgICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCiB7CiB9CiAKQEAgLTQ0LDEwICs0
MSwxMCBAQCBTVkdTd2l0Y2hFbGVtZW50Ojp+U1ZHU3dpdGNoRWxlbWVudCgpCiB7CiB9CiAKLWJv
b2wgU1ZHU3dpdGNoRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlICpjaGls
ZCkgY29uc3QKK2Jvb2wgU1ZHU3dpdGNoRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJl
cihOb2RlKiBjaGlsZCkgY29uc3QKIHsKLSAgICBmb3IgKE5vZGUgKm4gPSBmaXJzdENoaWxkKCk7
IG4gIT0gMDsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgU1ZHRWxlbWVudCAqZWxl
bWVudCA9IHN2Z19keW5hbWljX2Nhc3Qobik7CisgICAgZm9yIChOb2RlKiBuID0gZmlyc3RDaGls
ZCgpOyBuICE9IDA7IG4gPSBuLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIFNWR0VsZW1lbnQq
IGVsZW1lbnQgPSBzdmdfZHluYW1pY19jYXN0KG4pOwogICAgICAgICBpZiAoZWxlbWVudCAmJiBl
bGVtZW50LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gKG4gPT0gY2hpbGQpOyAvLyBP
bmx5IGFsbG93IHRoaXMgY2hpbGQgaWYgaXQncyB0aGUgZmlyc3QgdmFsaWQgY2hpbGQKICAgICB9
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3dpdGNoRWxlbWVudC5oCShyZXZpc2lvbiAxNzAyNikK
KysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N3aXRjaEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMg
WmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwg
MjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDE3ICsyNCwxNyBAQAogI2RlZmluZSBLU1ZHX1NWR1N3
aXRjaEVsZW1lbnRJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSAiU1ZHVGVz
dHMuaCIKKyNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgiCiAjaW5jbHVk
ZSAiU1ZHTGFuZ1NwYWNlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgiCisjaW5jbHVk
ZSAiU1ZHVGVzdHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKICAgICBjbGFzcyBTVkdTd2l0
Y2hFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQKICAgICB7CiAg
ICAgcHVibGljOgogICAgICAgICBTVkdTd2l0Y2hFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwpAQCAtNDIsMTAgKzQyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAg
ICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rl
c3RzOjppc1ZhbGlkKCk7IH0KIAotICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRl
ZChSZW5kZXJTdHlsZSAqc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNO
ZWVkZWQoc3R5bGUpOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJl
bmRlcmVyKE5vZGUgKikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVl
ZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJ
c05lZWRlZChzdHlsZSk7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRl
UmVuZGVyZXIoTm9kZSopIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0ICpj
cmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSk7Cisg
ICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSos
IFJlbmRlclN0eWxlKik7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3Qg
U1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTeW1ib2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdTeW1ib2xFbGVtZW50LmNwcAkocmV2aXNpb24gMTcwMjYpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTeW1ib2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMg
WmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwg
MjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIEtERSBwcm9qZWN0CiAKQEAgLTIyLDE2ICsyMiwxOSBAQAogCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotCi0j
aW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHU3ltYm9sRWxlbWVudC5oIgorCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTVkdGaXRUb1ZpZXdCb3guaCIK
KyNpbmNsdWRlICJTVkdIZWxwZXIuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVNWR1N5bWJvbEVsZW1lbnQ6OlNWR1N5bWJvbEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLTogU1ZHU3R5bGVkRWxl
bWVudCh0YWdOYW1lLCBkb2MpLCBTVkdMYW5nU3BhY2UoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZCgpLCBTVkdGaXRUb1ZpZXdCb3goKQorU1ZHU3ltYm9sRWxlbWVudDo6U1ZHU3ltYm9s
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAg
IDogU1ZHU3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBTVkdMYW5nU3BhY2UoKQor
ICAgICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCisgICAgLCBTVkdGaXRUb1ZpZXdC
b3goKQogewogfQogCkBAIC0zOSwxNSArNDIsMjAgQEAgU1ZHU3ltYm9sRWxlbWVudDo6flNWR1N5
bWJvbEVsZW1lbnQoKQogewogfQogCi12b2lkIFNWR1N5bWJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgU1ZHU3ltYm9sRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmKFNW
R0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKLSAgICBpZihT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkg
cmV0dXJuOwotICAgIGlmKFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpIHJldHVybjsKKyAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICBy
ZXR1cm47CiAKICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KTsKIH0KIAorfQorCiAvLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJ
bmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3ltYm9sRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N5bWJvbEVsZW1lbnQuaAkocmV2aXNpb24gMTcwMjYpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTeW1ib2xFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFpp
bW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIw
MDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBLREUgcHJvamVjdAogCkBAIC0yNCwyNCArMjQsMjQgQEAKICNkZWZpbmUgS1NWR19TVkdTeW1i
b2xFbGVtZW50SW1wbF9ICiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAotI2luY2x1ZGUgIlNWR0xhbmdT
cGFjZS5oIgorI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKICNpbmNs
dWRlICJTVkdGaXRUb1ZpZXdCb3guaCIKKyNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIKICNpbmNs
dWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewogICAgIGNsYXNzIFNWR1N5bWJvbEVs
ZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBTVkdMYW5nU3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdGaXRUb1ZpZXdCb3gKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdGaXRUb1ZpZXdCb3gKICAgICB7CiAgICAg
cHVibGljOgogICAgICAgICBTVkdTeW1ib2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOwogICAgICAgICB2aXJ0dWFsIH5TVkdTeW1ib2xFbGVtZW50KCk7CiAKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0
cik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBdHRhY2hDaGlsZChFbGVtZW50ICopIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKyAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEF0
dGFjaENoaWxkKEVsZW1lbnQqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIAogICAgIHBy
b3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1Rp
dGxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGl0bGVF
bGVtZW50LmNwcAkocmV2aXNpb24gMTcwMjYpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUaXRs
ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+
Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Cisg
ICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjgsNyAr
MjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR1RpdGxlRWxlbWVudDo6U1ZHVGl0
bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCitT
VkdUaXRsZUVsZW1lbnQ6OlNWR1RpdGxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHU3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2Mp
CiB7CiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUaXRsZUVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUaXRsZUVsZW1lbnQuaAkocmV2aXNpb24gMTcw
MjYpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUaXRsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29s
YXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwg
MjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAw
NSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTMwLDcgKzMwLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
CiB7CiAgICAgY2xhc3MgU1ZHVGl0bGVFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdMYW5nU3BhY2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlCiAgICAgewogICAg
IHB1YmxpYzoKICAgICAgICAgU1ZHVGl0bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE3MDI2KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBO
aWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQs
IDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxOCArMjQsMTUgQEAKICNpZmRlZiBTVkdf
U1VQUE9SVAogI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkF0dHIuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgotI2luY2x1ZGUg
IlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIu
aCIKICNpbmNsdWRlICJTVkdHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2lu
Y2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZH
UHJlc2VydmVBc3BlY3RSYXRpby5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNs
dWRlICJTVkdTeW1ib2xFbGVtZW50LmgiCi0jaW5jbHVkZSAia3N2Zy5oIgotI2luY2x1ZGUgIlJl
bmRlclNWR0NvbnRhaW5lci5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC02MSw3ICs1OCw3IEBAIEFOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR1VzZUVsZW0KIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1Vz
ZUVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBXaWR0aCwgd2lkdGgsIFNWR05h
bWVzOjp3aWR0aEF0dHIubG9jYWxOYW1lKCksIG1fd2lkdGguZ2V0KCkpCiBBTklNQVRFRF9QUk9Q
RVJUWV9ERUZJTklUSU9OUyhTVkdVc2VFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0
aCwgSGVpZ2h0LCBoZWlnaHQsIFNWR05hbWVzOjpoZWlnaHRBdHRyLmxvY2FsTmFtZSgpLCBtX2hl
aWdodC5nZXQoKSkKIAotdm9pZCBTVkdVc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR1VzZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICAKQEAgLTg5LDggKzg2LDggQEAgdm9pZCBTVkdV
c2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZQogdm9pZCBTVkdVc2VFbGVtZW50OjpjbG9z
ZVJlbmRlcmVyKCkKIHsKICAgICBTdHJpbmcgdGFyZ2V0SWQgPSBTVkdVUklSZWZlcmVuY2U6Omdl
dFRhcmdldChocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICBFbGVtZW50ICp0YXJnZXRF
bGVtZW50ID0gb3duZXJEb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZCh0YXJnZXRJZCk7Ci0gICAg
U1ZHRWxlbWVudCAqdGFyZ2V0ID0gc3ZnX2R5bmFtaWNfY2FzdCh0YXJnZXRFbGVtZW50KTsKKyAg
ICBFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gb3duZXJEb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJ
ZCh0YXJnZXRJZCk7CisgICAgU1ZHRWxlbWVudCogdGFyZ2V0ID0gc3ZnX2R5bmFtaWNfY2FzdCh0
YXJnZXRFbGVtZW50KTsKICAgICBpZiAoIXRhcmdldCkgewogICAgICAgICAvL2RvY3VtZW50KCkt
PmFkZEZvcndhcmRSZWZlcmVuY2UodGhpcyk7CiAgICAgICAgIHJldHVybjsKQEAgLTExMSw3ICsx
MDgsNyBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIoKQogICAgICAgICBpZiAo
X2ggPiAwKQogICAgICAgICAgICAgZHVtbXktPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0
QXR0ciwgaFN0cmluZyk7CiAgICAgICAgIAotICAgICAgICBTVkdTeW1ib2xFbGVtZW50ICpzeW1i
b2wgPSBzdGF0aWNfY2FzdDxTVkdTeW1ib2xFbGVtZW50ICo+KHRhcmdldCk7CisgICAgICAgIFNW
R1N5bWJvbEVsZW1lbnQqIHN5bWJvbCA9IHN0YXRpY19jYXN0PFNWR1N5bWJvbEVsZW1lbnQqPih0
YXJnZXQpOwogICAgICAgICBpZiAoc3ltYm9sLT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZpZXdC
b3hBdHRyKSkgewogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzeW1ib2xWaWV3Qm94
ID0gc3ltYm9sLT5nZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZpZXdCb3hBdHRyKTsKICAgICAgICAg
ICAgIGR1bW15LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZpZXdCb3hBdHRyLCBzeW1ib2xWaWV3
Qm94KTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmgJKHJldmlzaW9uIDE3MDI2KQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
S0RFIHByb2plY3QKIApAQCAtMjQsMjAgKzI0LDIwIEBACiAjZGVmaW5lIEtTVkdfU1ZHVXNlRWxl
bWVudEltcGxfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRlICJTVkdUZXN0cy5oIgor
I2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKICNpbmNsdWRlICJTVkdM
YW5nU3BhY2UuaCIKLSNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQuaCIKKyNpbmNsdWRlICJTVkdUZXN0cy5oIgorI2luY2x1ZGUgIlNWR1VSSVJl
ZmVyZW5jZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewogICAgIGNsYXNzIFNWR0xlbmd0aDsK
ICAgICBjbGFzcyBTVkdVc2VFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1VSSVJlZmVyZW5j
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdMYW5nU3BhY2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlCiAgICAgewogICAgIHB1YmxpYzoK
ICAgICAgICAgU1ZHVXNlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
QEAgLTUxLDEwICs1MSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIHZv
aWQgY2xvc2VSZW5kZXJlcigpOwogCiAgICAgICAgIC8vICdTVkdVc2VFbGVtZW50JyBmdW5jdGlv
bnMKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSAqYXR0cik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUqKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRl
ZChSZW5kZXJTdHlsZSAqc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNO
ZWVkZWQoc3R5bGUpOyB9Ci0gICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSk7CisgICAgICAgIHZp
cnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4g
U3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KKyAgICAgICAgdmlydHVh
bCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUq
KTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBj
b250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0K
</data>
<flag name="review"
          id="3753"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11073</attachid>
            <date>2006-10-13 12:11:06 -0700</date>
            <delta_ts>2006-10-31 11:19:19 -0800</delta_ts>
            <desc>First attempt</desc>
            <filename>11217-pservers.diff</filename>
            <type>text/plain</type>
            <size>38585</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzAzNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMDYtMTAtMTMgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIHN2ZyBwYWludCBz
ZXJ2ZXIgY2xhc3Nlcy4KKworICAgICAgICAqIGtzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpTVkdHcmFkaWVudEVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdHcmFkaWVudEVsZW1lbnQ6Om5vdGlm
eUF0dHJpYnV0ZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdHcmFkaWVudEVsZW1lbnQ6
OmNhbnZhc1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dyYWRpZW50RWxlbWVudDo6
cmVidWlsZFN0b3BzKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHR3JhZGllbnRFbGVtZW50Lmg6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OlNWR0xpbmVhckdyYWRpZW50
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpbmVhckdyYWRpZW50
RWxlbWVudDo6YnVpbGRHcmFkaWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0xpbmVhckdy
YWRpZW50RWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6U1ZHUGF0dGVybkVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0dGVybkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50OjpmaWxsQXR0cmli
dXRlc0Zyb21SZWZlcmVuY2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5F
bGVtZW50OjpkcmF3UGF0dGVybkNvbnRlbnRJbnRvVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXR0ZXJuRWxlbWVudDo6bm90aWZ5Q2xpZW50c1RvUmVwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6bm90aWZ5QXR0cmlidXRlQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50OjpjYW52YXNSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6Z2V0Q1RNKToKKyAgICAgICAgKiBrc3ZnMi9zdmcv
U1ZHUGF0dGVybkVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50
OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGll
bnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVu
dDo6U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JhZGlh
bEdyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWRpZW50KToKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR1N0b3BFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0b3BFbGVtZW50OjpT
VkdTdG9wRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTdG9wRWxlbWVudC5oOgor
CiAyMDA2LTEwLTEzICBEYXZpZCBIYXJyaXNvbiAgPGhhcnJpc29uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBKdXN0aW4uCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHcmFk
aWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0dyYWRp
ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDM2KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
R3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBr
ZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAg
LTI0LDI0ICsyNCwxOSBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHR3JhZGll
bnRFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJBdHRyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgot
I2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVk
ZSAiU1ZHU3RvcEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAjaW5j
bHVkZSAiU1ZHVHJhbnNmb3JtYWJsZS5oIgotI2luY2x1ZGUgImNzc3N0eWxlc2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKLSNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVu
ZGVyaW5nRGV2aWNlLmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50
U2VydmVyR3JhZGllbnQuaD4KKyNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCiAKLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdHcmFkaWVudEVs
ZW1lbnQ6OlNWR0dyYWRpZW50RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCAqZG9jKQorU1ZHR3JhZGllbnRFbGVtZW50OjpTVkdHcmFkaWVudEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR1N0eWxl
ZEVsZW1lbnQodGFnTmFtZSwgZG9jKQogICAgICwgU1ZHVVJJUmVmZXJlbmNlKCkKICAgICAsIFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQpAQCAtNjEsMjMgKzU2LDIzIEBAIEFOSU1BVEVE
X1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0dyYWRpZW4KIEFOSU1BVEVEX1BST1BFUlRZX0RFRklO
SVRJT05TKFNWR0dyYWRpZW50RWxlbWVudCwgU1ZHVHJhbnNmb3JtTGlzdCosIFRyYW5zZm9ybUxp
c3QsIHRyYW5zZm9ybUxpc3QsIEdyYWRpZW50VHJhbnNmb3JtLCBncmFkaWVudFRyYW5zZm9ybSwg
U1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0ci5sb2NhbE5hbWUoKSwgbV9ncmFkaWVudFRy
YW5zZm9ybS5nZXQoKSkKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0dyYWRpZW50
RWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwgZW51bWVyYXRpb24sIFNwcmVhZE1ldGhvZCwgc3By
ZWFkTWV0aG9kLCBTVkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0ci5sb2NhbE5hbWUoKSwgbV9zcHJl
YWRNZXRob2QpCiAKLXZvaWQgU1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR0dyYWRpZW50RWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0IFN0cmlu
ZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmdyYWRpZW50VW5pdHNBdHRyKSB7Ci0gICAgICAgIGlmKHZhbHVlID09ICJ1c2VyU3BhY2VP
blVzZSIpCisgICAgICAgIGlmICh2YWx1ZSA9PSAidXNlclNwYWNlT25Vc2UiKQogICAgICAgICAg
ICAgc2V0R3JhZGllbnRVbml0c0Jhc2VWYWx1ZShTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVf
VVNFUlNQQUNFT05VU0UpOwotICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJvYmplY3RCb3VuZGlu
Z0JveCIpCisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJvYmplY3RCb3VuZGluZ0JveCIpCiAg
ICAgICAgICAgICBzZXRHcmFkaWVudFVuaXRzQmFzZVZhbHVlKFNWR1VuaXRUeXBlczo6U1ZHX1VO
SVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0cikgewotICAgICAgICBTVkdUcmFuc2Zv
cm1MaXN0ICpncmFkaWVudFRyYW5zZm9ybXMgPSBncmFkaWVudFRyYW5zZm9ybUJhc2VWYWx1ZSgp
OworICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0KiBncmFkaWVudFRyYW5zZm9ybXMgPSBncmFkaWVu
dFRyYW5zZm9ybUJhc2VWYWx1ZSgpOwogICAgICAgICBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRy
YW5zZm9ybUF0dHJpYnV0ZShncmFkaWVudFRyYW5zZm9ybXMsIGF0dHItPnZhbHVlKCkpOwogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcHJlYWRNZXRob2RBdHRyKSB7
Ci0gICAgICAgIGlmKHZhbHVlID09ICJyZWZsZWN0IikKKyAgICAgICAgaWYgKHZhbHVlID09ICJy
ZWZsZWN0IikKICAgICAgICAgICAgIHNldFNwcmVhZE1ldGhvZEJhc2VWYWx1ZShTVkdfU1BSRUFE
TUVUSE9EX1JFRkxFQ1QpOwotICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJyZXBlYXQiKQorICAg
ICAgICBlbHNlIGlmICh2YWx1ZSA9PSAicmVwZWF0IikKICAgICAgICAgICAgIHNldFNwcmVhZE1l
dGhvZEJhc2VWYWx1ZShTVkdfU1BSRUFETUVUSE9EX1JFUEVBVCk7Ci0gICAgICAgIGVsc2UgaWYo
dmFsdWUgPT0gInBhZCIpCisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJwYWQiKQogICAgICAg
ICAgICAgc2V0U3ByZWFkTWV0aG9kQmFzZVZhbHVlKFNWR19TUFJFQURNRVRIT0RfUEFEKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKSkKQEAgLTkxLDcgKzg2LDcgQEAgdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cgogCiB2b2lkIFNWR0dyYWRpZW50RWxlbWVudDo6bm90aWZ5QXR0cmlidXRl
Q2hhbmdlKCkgY29uc3QKIHsKLSAgICBpZihvd25lckRvY3VtZW50KCktPnBhcnNpbmcoKSB8fCAh
YXR0YWNoZWQoKSB8fCAhbV9yZXNvdXJjZSkKKyAgICBpZiAob3duZXJEb2N1bWVudCgpLT5wYXJz
aW5nKCkgfHwgIWF0dGFjaGVkKCkgfHwgIW1fcmVzb3VyY2UpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIFVwZGF0ZSBjbGllbnRzIG9mIHRoaXMgZ3JhZGllbnQgcmVzb3VyY2UuLi4KQEAgLTEw
MCwyMCArOTUsMTkgQEAgdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6Om5vdGlmeUF0dHJpYnV0ZQog
ICAgIG1fcmVzb3VyY2UtPmludmFsaWRhdGUoKTsgIC8vIHNob3VsZCB0aGlzIGJlIGFkZGVkIHRv
IGJ1aWxkIGdyYWRpZW50PwogICAgIAogICAgIGNvbnN0IFJlbmRlclBhdGhMaXN0ICZjbGllbnRz
ID0gbV9yZXNvdXJjZS0+Y2xpZW50cygpOwotICAgIGZvcihSZW5kZXJQYXRoTGlzdDo6Q29uc3RJ
dGVyYXRvciBpdCA9IGNsaWVudHMuYmVnaW4oKTsgaXQgIT0gY2xpZW50cy5lbmQoKTsgKytpdCkK
LSAgICB7Ci0gICAgICAgIGNvbnN0IFJlbmRlclBhdGggKmN1cnJlbnQgPSAoKml0KTsKLSAgICAg
ICAgU1ZHU3R5bGVkRWxlbWVudCAqc3R5bGVkID0gKGN1cnJlbnQgPyBzdGF0aWNfY2FzdDxTVkdT
dHlsZWRFbGVtZW50ICo+KGN1cnJlbnQtPmVsZW1lbnQoKSkgOiAwKTsKLSAgICAgICAgaWYoc3R5
bGVkKQorICAgIGZvciAoUmVuZGVyUGF0aExpc3Q6OkNvbnN0SXRlcmF0b3IgaXQgPSBjbGllbnRz
LmJlZ2luKCk7IGl0ICE9IGNsaWVudHMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgY29uc3QgUmVu
ZGVyUGF0aCogY3VycmVudCA9ICgqaXQpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHls
ZWQgPSAoY3VycmVudCA/IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihjdXJyZW50LT5l
bGVtZW50KCkpIDogMCk7CisgICAgICAgIGlmIChzdHlsZWQpCiAgICAgICAgICAgICBzdHlsZWQt
PnNldENoYW5nZWQodHJ1ZSk7CiAgICAgfQogfQogCi1LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFk
aWVudCAqU1ZHR3JhZGllbnRFbGVtZW50OjpjYW52YXNSZXNvdXJjZSgpCitLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJHcmFkaWVudCogU1ZHR3JhZGllbnRFbGVtZW50OjpjYW52YXNSZXNvdXJjZSgpCiB7
CiAgICAgaWYgKCFtX3Jlc291cmNlKSB7Ci0gICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAq
dGVtcCA9IHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYWludFNlcnZlcihncmFkaWVudFR5cGUo
KSk7Ci0gICAgICAgIG1fcmVzb3VyY2UgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJHcmFkaWVudCAqPih0ZW1wKTsKKyAgICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyKiB0ZW1w
ID0gcmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVBhaW50U2VydmVyKGdyYWRpZW50VHlwZSgpKTsK
KyAgICAgICAgbV9yZXNvdXJjZSA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50Kj4odGVtcCk7CiAgICAgICAgIG1fcmVzb3VyY2UtPnNldExpc3RlbmVyKHRoaXMpOwog
ICAgICAgICBidWlsZEdyYWRpZW50KG1fcmVzb3VyY2UpOwogICAgIH0KQEAgLTEzMiwxMyArMTI2
LDEzIEBAIHZvaWQgU1ZHR3JhZGllbnRFbGVtZW50OjpyZWJ1aWxkU3RvcHMoKSAKICAgICAgICAg
VmVjdG9yPEtDR3JhZGllbnRTdG9wPiBzdG9wczsKICAgICAgICAgIC8vIEZJWE1FOiBNYW51YWwg
c3R5bGUgcmVzb2x1dGlvbiBpcyBhIGhhY2sKICAgICAgICAgUmVuZGVyU3R5bGUqIGdyYWRpZW50
U3R5bGUgPSBjb25zdF9jYXN0PFNWR0dyYWRpZW50RWxlbWVudCo+KHRoaXMpLT5zdHlsZUZvclJl
bmRlcmVyKHBhcmVudCgpLT5yZW5kZXJlcigpKTsKLSAgICAgICAgZm9yIChOb2RlICpuID0gZmly
c3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgICAgU1ZHRWxl
bWVudCAqZWxlbWVudCA9IHN2Z19keW5hbWljX2Nhc3Qobik7CisgICAgICAgIGZvciAoTm9kZSog
biA9IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAg
IFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdmdfZHluYW1pY19jYXN0KG4pOwogICAgICAgICAgICAg
aWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aXNHcmFkaWVudFN0b3AoKSkgewotICAgICAgICAgICAg
ICAgIFNWR1N0b3BFbGVtZW50ICpzdG9wID0gc3RhdGljX2Nhc3Q8U1ZHU3RvcEVsZW1lbnQgKj4o
ZWxlbWVudCk7CisgICAgICAgICAgICAgICAgU1ZHU3RvcEVsZW1lbnQqIHN0b3AgPSBzdGF0aWNf
Y2FzdDxTVkdTdG9wRWxlbWVudCo+KGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGZsb2F0IHN0
b3BPZmZzZXQgPSBzdG9wLT5vZmZzZXQoKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBSZW5kZXJTdHlsZSAqc3RvcFN0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rvcigp
LT5zdHlsZUZvckVsZW1lbnQoc3RvcCwgZ3JhZGllbnRTdHlsZSk7CisgICAgICAgICAgICAgICAg
UmVuZGVyU3R5bGUqIHN0b3BTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5
bGVGb3JFbGVtZW50KHN0b3AsIGdyYWRpZW50U3R5bGUpOwogICAgICAgICAgICAgICAgIENvbG9y
IGMgPSBzdG9wU3R5bGUtPnN2Z1N0eWxlKCktPnN0b3BDb2xvcigpOwogICAgICAgICAgICAgICAg
IGZsb2F0IG9wYWNpdHkgPSBzdG9wU3R5bGUtPnN2Z1N0eWxlKCktPnN0b3BPcGFjaXR5KCk7CiAg
ICAgICAgICAgICAgICAgCkBAIC0xNTEsNiArMTQ1LDggQEAgdm9pZCBTVkdHcmFkaWVudEVsZW1l
bnQ6OnJlYnVpbGRTdG9wcygpIAogICAgIH0KIH0KIAorfQorCiAvLyB2aW06dHM9NDpub2V0CiAj
ZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHR3JhZGll
bnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHR3JhZGllbnRF
bGVtZW50LmgJKHJldmlzaW9uIDE3MDM2KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHR3JhZGll
bnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4K
LSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAg
ICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
IAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxOSAr
MjQsMTggQEAKICNkZWZpbmUgS1NWR19TVkdHcmFkaWVudEVsZW1lbnRJbXBsX0gKICNpZmRlZiBT
VkdfU1VQUE9SVAogCi0jaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiU1ZH
U3R5bGVkRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQu
aCIKLQogI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50LmgiCisjaW5jbHVk
ZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIGNsYXNzIFNWR0dyYWRpZW50RWxlbWVudDsKICAgICBjbGFzcyBTVkdUcmFuc2Zv
cm1MaXN0OwogICAgIGNsYXNzIFNWR0dyYWRpZW50RWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRF
bGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVVJJ
UmVmZXJlbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIEtDYW52YXNSZXNvdXJjZUxpc3RlbmVyCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR1VSSVJlZmVyZW5jZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgS0NhbnZhc1Jlc291cmNlTGlzdGVuZXIKICAg
ICB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIFNWR0dyYWRpZW50VHlwZSB7CkBAIC01MCwx
NCArNDksMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIH5TVkdHcmFk
aWVudEVsZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZHR3JhZGllbnRFbGVtZW50JyBmdW5jdGlv
bnMKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSAqYXR0cik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUF0dHJpYnV0ZUNo
YW5nZSgpIGNvbnN0OwogICAgICAgICAKLSAgICAgICAgdmlydHVhbCBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJHcmFkaWVudCAqY2FudmFzUmVzb3VyY2UoKTsKKyAgICAgICAgdmlydHVhbCBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCogY2FudmFzUmVzb3VyY2UoKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIHJlc291cmNlTm90aWZpY2F0aW9uKCkgY29uc3Q7CiAKICAgICBwcm90ZWN0ZWQ6Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBidWlsZEdyYWRpZW50KEtSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50ICpncmFkKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBidWlsZEdyYWRp
ZW50KEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBncmFkKSBjb25zdCA9IDA7CiAgICAg
ICAgIHZpcnR1YWwgS0NQYWludFNlcnZlclR5cGUgZ3JhZGllbnRUeXBlKCkgY29uc3QgPSAwOwog
ICAgICAgICB2b2lkIHJlYnVpbGRTdG9wcygpIGNvbnN0OwogCkBAIC02OSw3ICs2OCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KFNWR0dyYWRpZW50RWxlbWVudCwgaW50LCBpbnQsIEdyYWRpZW50VW5pdHMsIGdyYWRpZW50VW5p
dHMpCiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdHcmFkaWVudEVs
ZW1lbnQsIFNWR1RyYW5zZm9ybUxpc3QqLCBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4sIEdyYWRp
ZW50VHJhbnNmb3JtLCBncmFkaWVudFRyYW5zZm9ybSkKIAotICAgICAgICBtdXRhYmxlIEtSZW5k
ZXJpbmdQYWludFNlcnZlckdyYWRpZW50ICptX3Jlc291cmNlOworICAgICAgICBtdXRhYmxlIEtS
ZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBtX3Jlc291cmNlOwogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVhckdyYWRp
ZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZWFy
R3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTcwMzYpCisrKyBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5u
IDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHBy
b2plY3QKIApAQCAtMjIsMjQgKzIyLDIxIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRl
ZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJTVkdMaW5lYXJHcmFk
aWVudEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgotI2luY2x1ZGUgIlNW
R05hbWVzLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgorI2luY2x1ZGUgIktSZW5k
ZXJpbmdQYWludFNlcnZlckdyYWRpZW50LmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCisjaW5j
bHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTWF0cml4LmgiCisjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zv
cm1MaXN0LmgiCi0jaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgotCi0jaW5jbHVk
ZSAiS1JlbmRlcmluZ0RldmljZS5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50LmgiCisjaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKK1NWR0xpbmVhckdy
YWRpZW50RWxlbWVudDo6U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdHcmFkaWVudEVsZW1lbnQodGFn
TmFtZSwgZG9jKQogICAgICwgbV94MShuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3
cG9ydEVsZW1lbnQoKSkpCiAgICAgLCBtX3kxKG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hU
LCB2aWV3cG9ydEVsZW1lbnQoKSkpCkBAIC01OSw3ICs1Niw3IEBAIEFOSU1BVEVEX1BST1BFUlRZ
X0RFRklOSVRJT05TKFNWR0xpbmVhckcKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNW
R0xpbmVhckdyYWRpZW50RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFgyLCB4
MiwgU1ZHTmFtZXM6OngyQXR0ci5sb2NhbE5hbWUoKSwgbV94Mi5nZXQoKSkKIEFOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCwgU1ZHTGVuZ3RoKiwg
TGVuZ3RoLCBsZW5ndGgsIFkyLCB5MiwgU1ZHTmFtZXM6OnkyQXR0ci5sb2NhbE5hbWUoKSwgbV95
Mi5nZXQoKSkKIAotdm9pZCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgU1ZHTGluZWFyR3JhZGllbnRFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6eDFBdHRyKQpAQCAtNzQsNyArNzEsNyBAQCB2b2lkIFNWR0xp
bmVhckdyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBwCiAgICAgICAgIFNWR0dyYWRpZW50RWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKLXZvaWQgU1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50OjpidWlsZEdyYWRpZW50KEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50ICpf
Z3JhZCkgY29uc3QKK3ZvaWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWRpZW50
KEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBfZ3JhZCkgY29uc3QKIHsKICAgICByZWJ1
aWxkU3RvcHMoKTsgLy8gcmVidWlsZCBzdG9wcyBiZWZvcmUgcG9zc2libHkgaW1wb3J0aW5nIHRo
ZW0gZnJvbSBhbnkgcmVmZXJlbmNlZCBncmFkaWVudC4KIApAQCAtODgsMjUgKzg1LDIzIEBAIHZv
aWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWQKICAgICBmbG9hdCBfeDEgPSB4
MSgpLT52YWx1ZSgpLCBfeTEgPSB5MSgpLT52YWx1ZSgpOwogICAgIGZsb2F0IF94MiA9IHgyKCkt
PnZhbHVlKCksIF95MiA9IHkyKCktPnZhbHVlKCk7CiAKLSAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJMaW5lYXJHcmFkaWVudCAqZ3JhZCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZl
ckxpbmVhckdyYWRpZW50ICo+KF9ncmFkKTsKKyAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5l
YXJHcmFkaWVudCogZ3JhZCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVh
ckdyYWRpZW50Kj4oX2dyYWQpOwogICAgIEFmZmluZVRyYW5zZm9ybSBtYXQ7CiAgICAgaWYgKGdy
YWRpZW50VHJhbnNmb3JtKCktPm51bWJlck9mSXRlbXMoKSA+IDApCiAgICAgICAgIG1hdCA9IGdy
YWRpZW50VHJhbnNmb3JtKCktPmNvbnNvbGlkYXRlKCktPm1hdHJpeCgpLT5tYXRyaXgoKTsKIAog
ICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmID0gaHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAg
ICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnBzZXJ2ZXIgPSBnZXRQYWludFNlcnZlckJ5SWQoZG9j
dW1lbnQoKSwgcmVmLm1pZCgxKSk7CisgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyKiBwc2VydmVy
ID0gZ2V0UGFpbnRTZXJ2ZXJCeUlkKGRvY3VtZW50KCksIHJlZi5taWQoMSkpOwogICAgIAotICAg
IGlmIChwc2VydmVyICYmIChwc2VydmVyLT50eXBlKCkgPT0gUFNfUkFESUFMX0dSQURJRU5UIHx8
IHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19MSU5FQVJfR1JBRElFTlQpKQotICAgIHsKKyAgICBpZiAo
cHNlcnZlciAmJiAocHNlcnZlci0+dHlwZSgpID09IFBTX1JBRElBTF9HUkFESUVOVCB8fCBwc2Vy
dmVyLT50eXBlKCkgPT0gUFNfTElORUFSX0dSQURJRU5UKSkgewogICAgICAgICBib29sIGlzTGlu
ZWFyID0gcHNlcnZlci0+dHlwZSgpID09IFBTX0xJTkVBUl9HUkFESUVOVDsKLSAgICAgICAgS1Jl
bmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQgKmdyYWRpZW50ID0gc3RhdGljX2Nhc3Q8S1JlbmRl
cmluZ1BhaW50U2VydmVyR3JhZGllbnQgKj4ocHNlcnZlcik7CisgICAgICAgIEtSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50KiBncmFkaWVudCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQYWlu
dFNlcnZlckdyYWRpZW50Kj4ocHNlcnZlcik7CiAKICAgICAgICAgaWYgKCFoYXNBdHRyaWJ1dGUo
U1ZHTmFtZXM6OmdyYWRpZW50VW5pdHNBdHRyKSkKICAgICAgICAgICAgIGJib3ggPSBncmFkaWVu
dC0+Ym91bmRpbmdCb3hNb2RlKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgaWYgKGlzTGluZWFy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFk
aWVudCAqbGluZWFyID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnQgKj4ocHNlcnZlcik7CisgICAgICAgIGlmIChpc0xpbmVhcikgeworICAgICAgICAgICAg
S1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQqIGxpbmVhciA9IHN0YXRpY19jYXN0
PEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Kj4ocHNlcnZlcik7CiAgICAgICAg
ICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eDFBdHRyKSkKICAgICAgICAgICAgICAg
ICBfeDEgPSBsaW5lYXItPmdyYWRpZW50U3RhcnQoKS54KCk7CiAgICAgICAgICAgICBlbHNlIGlm
IChiYm94KQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVt
ZW50LmgJKHJldmlzaW9uIDE3MDM2KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9y
Zz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
KyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0zNiwx
MCArMzYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHTGluZWFy
R3JhZGllbnRFbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0xpbmVhckdyYWRpZW50RWxlbWVu
dCcgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBidWlsZEdyYWRpZW50KEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50ICpn
cmFkKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGJ1aWxkR3JhZGllbnQoS1JlbmRlcmlu
Z1BhaW50U2VydmVyR3JhZGllbnQqIGdyYWQpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEtDUGFp
bnRTZXJ2ZXJUeXBlIGdyYWRpZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBTX0xJTkVBUl9HUkFE
SUVOVDsgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0
dGVybkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdHRl
cm5FbGVtZW50LmNwcAkocmV2aXNpb24gMTcwMzYpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQ
YXR0ZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2Rl
Lm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0y
NCwyOCArMjQsMjYgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR1BhdHRlcm5F
bGVtZW50LmgiCiAKLSNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIu
aCIKICNpbmNsdWRlICJLQ2FudmFzSW1hZ2UuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNl
LmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybi5oIgotI2luY2x1ZGUg
IlNWR0xlbmd0aC5oIgotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTVkdDb250YWluZXIuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKKyNpbmNsdWRlICJT
VkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdNYXRyaXguaCIKICNpbmNsdWRlICJTVkdOYW1lcy5o
IgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0
LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtYWJsZS5oIgogI2luY2x1ZGUgIlNWR1VuaXRUeXBl
cy5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR1BhdHRlcm5FbGVt
ZW50OjpTVkdQYXR0ZXJuRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCAqZG9jKQorU1ZHUGF0dGVybkVsZW1lbnQ6OlNWR1BhdHRlcm5FbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdTdHlsZWRMb2Nh
dGFibGVFbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIFNWR1VSSVJlZmVyZW5jZSgpCiAgICAg
LCBTVkdUZXN0cygpCkBAIC03OSw5ICs3Nyw5IEBAIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJ
T05TKFNWR1BhdHRlcm4KIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1BhdHRlcm5F
bGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgSGVpZ2h0LCBoZWlnaHQsIFNWR05h
bWVzOjpoZWlnaHRBdHRyLmxvY2FsTmFtZSgpLCBtX2hlaWdodC5nZXQoKSkKIEFOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR1BhdHRlcm5FbGVtZW50LCBTVkdUcmFuc2Zvcm1MaXN0Kiwg
VHJhbnNmb3JtTGlzdCwgdHJhbnNmb3JtTGlzdCwgUGF0dGVyblRyYW5zZm9ybSwgcGF0dGVyblRy
YW5zZm9ybSwgU1ZHTmFtZXM6OnBhdHRlcm5UcmFuc2Zvcm1BdHRyLmxvY2FsTmFtZSgpLCBtX3Bh
dHRlcm5UcmFuc2Zvcm0uZ2V0KCkpCiAKLXZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgU1ZHUGF0dGVybkVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBj
b25zdCBBdG9taWNTdHJpbmcgJnZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpwYXR0ZXJuVW5pdHNBdHRyKSB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAidXNl
clNwYWNlT25Vc2UiKQogICAgICAgICAgICAgc2V0UGF0dGVyblVuaXRzQmFzZVZhbHVlKFNWR1Vu
aXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7CkBAIC05Myw3ICs5MSw3IEBA
IHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAgICAgZWxzZSBp
ZiAodmFsdWUgPT0gIm9iamVjdEJvdW5kaW5nQm94IikKICAgICAgICAgICAgIHNldFBhdHRlcm5D
b250ZW50VW5pdHNCYXNlVmFsdWUoU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJP
VU5ESU5HQk9YKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cGF0
dGVyblRyYW5zZm9ybUF0dHIpIHsKLSAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdCAqcGF0dGVyblRy
YW5zZm9ybXMgPSBwYXR0ZXJuVHJhbnNmb3JtQmFzZVZhbHVlKCk7CisgICAgICAgIFNWR1RyYW5z
Zm9ybUxpc3QqIHBhdHRlcm5UcmFuc2Zvcm1zID0gcGF0dGVyblRyYW5zZm9ybUJhc2VWYWx1ZSgp
OwogICAgICAgICBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybUF0dHJpYnV0ZShwYXR0
ZXJuVHJhbnNmb3JtcywgdmFsdWUpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjp4QXR0cikKICAgICAgICAgeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZh
bHVlKTsKQEAgLTE0MSwxMiArMTM5LDEyIEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OnJlc291
cmNlTm90aWZpY2EKIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVzRnJvbVJl
ZmVyZW5jZVBhdHRlcm4oY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqIHRhcmdldCwgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4KQogewogICAgIERlcHJlY2F0ZWRTdHJpbmcg
cmVmID0gaHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXIgKnJlZlNlcnZlciA9IGdldFBhaW50U2VydmVyQnlJZChkb2N1bWVudCgpLCByZWYubWlkKDEp
KTsKKyAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIqIHJlZlNlcnZlciA9IGdldFBhaW50U2VydmVy
QnlJZChkb2N1bWVudCgpLCByZWYubWlkKDEpKTsKIAogICAgIGlmICghcmVmU2VydmVyIHx8IHJl
ZlNlcnZlci0+dHlwZSgpICE9IFBTX1BBVFRFUk4pCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuICpyZWZQYXR0ZXJuID0gc3RhdGljX2Nhc3Q8
S1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybiAqPihyZWZTZXJ2ZXIpOworICAgIEtSZW5kZXJp
bmdQYWludFNlcnZlclBhdHRlcm4qIHJlZlBhdHRlcm4gPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJQYXR0ZXJuKj4ocmVmU2VydmVyKTsKICAgICAKICAgICBpZiAoIWhhc0F0dHJp
YnV0ZShTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0cikpIHsKICAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSA9IHRhcmdldC0+Z2V0QXR0cmlidXRlKFNWR05hbWVzOjpwYXR0ZXJuVW5p
dHNBdHRyKTsKQEAgLTE5OSwxMyArMTk3LDEyIEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmRy
YXdQYXR0ZXJuQ29udGUKIAogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQocGF0
dGVybkNvbnRleHQtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKIAotICAgIGZvcihOb2RlICpu
ID0gdGFyZ2V0LT5maXJzdENoaWxkKCk7IG4gIT0gMDsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCi0g
ICAgeworICAgIGZvciAoTm9kZSogbiA9IHRhcmdldC0+Zmlyc3RDaGlsZCgpOyBuICE9IDA7IG4g
PSBuLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIFNWR0VsZW1lbnQqIGVsZW0gPSBzdmdfZHlu
YW1pY19jYXN0KG4pOwogICAgICAgICBpZiAoIWVsZW0gfHwgIWVsZW0tPmlzU3R5bGVkKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudCogZSA9IHN0YXRp
Y19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqID4oZWxlbSk7Ci0gICAgICAgIFJlbmRlck9iamVjdCAq
aXRlbSA9IGUtPnJlbmRlcmVyKCk7CisgICAgICAgIFJlbmRlck9iamVjdCogaXRlbSA9IGUtPnJl
bmRlcmVyKCk7CiAgICAgICAgIGlmICghaXRlbSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogI2lm
IDAKQEAgLTI2MCwxOCArMjU3LDE2IEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmRyYXdQYXR0
ZXJuQ29udGUKIAogdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6bm90aWZ5Q2xpZW50c1RvUmVwYWlu
dCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgUmVuZGVyUGF0aExpc3QgJmNsaWVudHMgPSBtX3BhaW50
U2VydmVyLT5jbGllbnRzKCk7CisgICAgY29uc3QgUmVuZGVyUGF0aExpc3QmIGNsaWVudHMgPSBt
X3BhaW50U2VydmVyLT5jbGllbnRzKCk7CiAKICAgICBSZW5kZXJQYXRoTGlzdDo6Q29uc3RJdGVy
YXRvciBpdCA9IGNsaWVudHMuYmVnaW4oKTsKICAgICBSZW5kZXJQYXRoTGlzdDo6Q29uc3RJdGVy
YXRvciBlbmQgPSBjbGllbnRzLmVuZCgpOwogCi0gICAgZm9yKDsgaXQgIT0gZW5kOyArK2l0KQot
ICAgIHsKLSAgICAgICAgY29uc3QgUmVuZGVyUGF0aCAqY3VycmVudCA9ICgqaXQpOworICAgIGZv
ciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgY29uc3QgUmVuZGVyUGF0aCogY3VycmVu
dCA9ICgqaXQpOwogCiAgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQqIHN0eWxlZCA9IChjdXJyZW50
ID8gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCogPihjdXJyZW50LT5lbGVtZW50KCkpIDog
MCk7Ci0gICAgICAgIGlmIChzdHlsZWQpCi0gICAgICAgIHsKKyAgICAgICAgaWYgKHN0eWxlZCkg
ewogICAgICAgICAgICAgc3R5bGVkLT5zZXRDaGFuZ2VkKHRydWUpOwogCiAgICAgICAgICAgICBp
ZiAoc3R5bGVkLT5yZW5kZXJlcigpKQpAQCAtMjk4LDkgKzI5Myw4IEBAIHZvaWQgU1ZHUGF0dGVy
bkVsZW1lbnQ6Om5vdGlmeUF0dHJpYnV0ZUMKIAogICAgIC8vIEZpbmQgZmlyc3QgcGF0dGVybiBk
ZWYgdGhhdCBoYXMgY2hpbGRyZW4KICAgICBjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCogdGFyZ2V0
ID0gdGhpczsKLSAgICBjb25zdCBOb2RlICp0ZXN0ID0gdGhpczsKLSAgICB3aGlsZSh0ZXN0ICYm
ICF0ZXN0LT5oYXNDaGlsZE5vZGVzKCkpCi0gICAgeworICAgIGNvbnN0IE5vZGUqIHRlc3QgPSB0
aGlzOworICAgIHdoaWxlICh0ZXN0ICYmICF0ZXN0LT5oYXNDaGlsZE5vZGVzKCkpIHsKICAgICAg
ICAgRGVwcmVjYXRlZFN0cmluZyByZWYgPSB0YXJnZXQtPmhyZWYoKS5kZXByZWNhdGVkU3RyaW5n
KCk7CiAgICAgICAgIHRlc3QgPSBvd25lckRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKFN0cmlu
ZyhyZWYubWlkKDEpKS5pbXBsKCkpOwogICAgICAgICBpZiAodGVzdCAmJiB0ZXN0LT5oYXNUYWdO
YW1lKFNWR05hbWVzOjpwYXR0ZXJuVGFnKSkKQEAgLTMxNSw3ICszMDksNyBAQCB2b2lkIFNWR1Bh
dHRlcm5FbGVtZW50Ojpub3RpZnlBdHRyaWJ1dGVDCiAgICAgICAgIHBhdHRlcm5UcmFuc2Zvcm1N
YXRyaXggPSBwYXR0ZXJuVHJhbnNmb3JtKCktPmNvbnNvbGlkYXRlKCktPm1hdHJpeCgpLT5tYXRy
aXgoKTsKIAogCi0gICAgU1ZHUGF0dGVybkVsZW1lbnQgKm5vbkNvbnN0VGhpcyA9IGNvbnN0X2Nh
c3Q8U1ZHUGF0dGVybkVsZW1lbnQqPih0aGlzKTsKKyAgICBTVkdQYXR0ZXJuRWxlbWVudCogbm9u
Q29uc3RUaGlzID0gY29uc3RfY2FzdDxTVkdQYXR0ZXJuRWxlbWVudCo+KHRoaXMpOwogCiAgICAg
bm9uQ29uc3RUaGlzLT5maWxsQXR0cmlidXRlc0Zyb21SZWZlcmVuY2VQYXR0ZXJuKHRhcmdldCwg
cGF0dGVyblRyYW5zZm9ybU1hdHJpeCk7ICAgCiAgICAgbm9uQ29uc3RUaGlzLT5kcmF3UGF0dGVy
bkNvbnRlbnRJbnRvVGlsZSh0YXJnZXQsIG5ld1NpemUsIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgp
OwpAQCAtMzM0LDE5ICszMjgsMTkgQEAgUmVuZGVyT2JqZWN0KiBTVkdQYXR0ZXJuRWxlbWVudDo6
Y3JlYXRlUgogICAgIHJldHVybiBwYXR0ZXJuQ29udGFpbmVyOwogfQogCi1LUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJQYXR0ZXJuICpTVkdQYXR0ZXJuRWxlbWVudDo6Y2FudmFzUmVzb3VyY2UoKQorS1Jl
bmRlcmluZ1BhaW50U2VydmVyUGF0dGVybiogU1ZHUGF0dGVybkVsZW1lbnQ6OmNhbnZhc1Jlc291
cmNlKCkKIHsKICAgICBpZiAoIW1fcGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgS1JlbmRlcmluZ1Bh
aW50U2VydmVyICpwc2VydmVyID0gcmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVBhaW50U2VydmVy
KEtDUGFpbnRTZXJ2ZXJUeXBlKFBTX1BBVFRFUk4pKTsKLSAgICAgICAgbV9wYWludFNlcnZlciA9
IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4gKj4ocHNlcnZlcik7Cisg
ICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciogcHNlcnZlciA9IHJlbmRlcmluZ0RldmljZSgp
LT5jcmVhdGVQYWludFNlcnZlcihLQ1BhaW50U2VydmVyVHlwZShQU19QQVRURVJOKSk7CisgICAg
ICAgIG1fcGFpbnRTZXJ2ZXIgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0
ZXJuKj4ocHNlcnZlcik7CiAgICAgICAgIG1fcGFpbnRTZXJ2ZXItPnNldExpc3RlbmVyKGNvbnN0
X2Nhc3Q8U1ZHUGF0dGVybkVsZW1lbnQqID4odGhpcykpOwogICAgIH0KICAgICByZXR1cm4gbV9w
YWludFNlcnZlcjsKIH0KIAotU1ZHTWF0cml4ICpTVkdQYXR0ZXJuRWxlbWVudDo6Z2V0Q1RNKCkg
Y29uc3QKK1NWR01hdHJpeCogU1ZHUGF0dGVybkVsZW1lbnQ6OmdldENUTSgpIGNvbnN0CiB7Ci0g
ICAgU1ZHTWF0cml4ICptYXQgPSBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdNYXRyaXgoKTsKKyAg
ICBTVkdNYXRyaXgqIG1hdCA9IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR01hdHJpeCgpOwogICAg
IGlmIChtYXQpIHsKICAgICAgICAgUmVmUHRyPFNWR01hdHJpeD4gdmlld0JveCA9IHZpZXdCb3hU
b1ZpZXdUcmFuc2Zvcm0od2lkdGgoKS0+dmFsdWUoKSwgaGVpZ2h0KCktPnZhbHVlKCkpOwogICAg
ICAgICBtYXQtPm11bHRpcGx5KHZpZXdCb3guZ2V0KCkpOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHUGF0dGVybkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdQYXR0ZXJuRWxlbWVudC5oCShyZXZpc2lvbiAxNzAzNikKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1BhdHRlcm5FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hA
a2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBA
IC0yNCwxNCArMjQsMTMgQEAKICNkZWZpbmUgS1NWR19TVkdQYXR0ZXJuRWxlbWVudEltcGxfSAog
I2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRlICJTVkdUZXN0cy5oIgotI2luY2x1ZGUgIlNW
R0xhbmdTcGFjZS5oIgotI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIktS
ZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4uaCIKKyNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkLmgiCiAjaW5jbHVkZSAiU1ZHRml0VG9WaWV3Qm94LmgiCisjaW5jbHVkZSAi
U1ZHTGFuZ1NwYWNlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5oIgot
I2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKLQotI2luY2x1ZGUgPGtj
YW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4uaD4KKyNpbmNsdWRlICJT
VkdUZXN0cy5oIgorI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogCiBjbGFzcyBLQ2FudmFz
SW1hZ2U7CiAKQEAgLTQxLDEyICs0MCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgIGNsYXNz
IFNWR1BhdHRlcm5FbGVtZW50OwogICAgIGNsYXNzIFNWR1RyYW5zZm9ybUxpc3Q7CiAgICAgY2xh
c3MgU1ZHUGF0dGVybkVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdG
aXRUb1ZpZXdCb3gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIEtD
YW52YXNSZXNvdXJjZUxpc3RlbmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHVVJJUmVmZXJlbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlj
IFNWR1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdT
cGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNW
R0ZpdFRvVmlld0JveCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBLQ2Fu
dmFzUmVzb3VyY2VMaXN0ZW5lcgogICAgIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNWR1BhdHRl
cm5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpAQCAtNTUsMTkgKzU0
LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCiAgICAgICAgIC8vICdTVkdQ
YXR0ZXJuRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKLSAgICAgICAgY29uc3Qg
U1ZHU3R5bGVkRWxlbWVudCAqcHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxl
bWVudCAqY29udGV4dCk7CisgICAgICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIHB1c2hBdHRy
aWJ1dGVDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQpOwogCiAgICAgICAg
IHZpcnR1YWwgdm9pZCByZXNvdXJjZU5vdGlmaWNhdGlvbigpIGNvbnN0OwogICAgICAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5QXR0cmlidXRlQ2hhbmdlKCkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVh
bCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBTdHls
ZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQotICAgICAgICB2aXJ0dWFsIFJl
bmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHls
ZSAqc3R5bGUpOwotICAgICAgICB2aXJ0dWFsIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4g
KmNhbnZhc1Jlc291cmNlKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVk
KFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05l
ZWRlZChzdHlsZSk7IH0KKyAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKyAgICAgICAgdmlydHVhbCBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuKiBjYW52YXNSZXNvdXJjZSgpOwogCiAgICAgICAgIC8vICd2
aXJ0dWFsIFNWR0xvY2F0YWJsZScgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgU1ZHTWF0cml4
ICpnZXRDVE0oKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTVkdNYXRyaXgqIGdldENUTSgpIGNv
bnN0OwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9GT1JXQVJE
X0RFQ0xBUkFUSU9OUyhTVkdVUklSZWZlcmVuY2UsIFN0cmluZywgSHJlZiwgaHJlZikKQEAgLTgz
LDE2ICs4MiwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoU1ZHUGF0dGVybkVsZW1lbnQsIGludCwgaW50LCBQYXR0ZXJuQ29udGVu
dFVuaXRzLCBwYXR0ZXJuQ29udGVudFVuaXRzKQogICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoU1ZHUGF0dGVybkVsZW1lbnQsIFNWR1RyYW5zZm9ybUxpc3QqLCBSZWZQdHI8
U1ZHVHJhbnNmb3JtTGlzdD4sIFBhdHRlcm5UcmFuc2Zvcm0sIHBhdHRlcm5UcmFuc2Zvcm0pCiAK
LSAgICAgICAgbXV0YWJsZSBLQ2FudmFzSW1hZ2UgKm1fdGlsZTsKKyAgICAgICAgbXV0YWJsZSBL
Q2FudmFzSW1hZ2UqIG1fdGlsZTsKICAgICAgICAgbXV0YWJsZSBib29sIG1faWdub3JlQXR0cmli
dXRlQ2hhbmdlczsKLSAgICAgICAgbXV0YWJsZSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJu
ICptX3BhaW50U2VydmVyOworICAgICAgICBtdXRhYmxlIEtSZW5kZXJpbmdQYWludFNlcnZlclBh
dHRlcm4qIG1fcGFpbnRTZXJ2ZXI7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNW
R0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgLy8gbm90aWZ5QXR0cmlidXRlQ2hhbmdlIGhlbHBlcnM6Ci0gICAg
ICAgIHZvaWQgZmlsbEF0dHJpYnV0ZXNGcm9tUmVmZXJlbmNlUGF0dGVybihjb25zdCBTVkdQYXR0
ZXJuRWxlbWVudCAqdGFyZ2V0LCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm1NYXRy
aXgpOwotICAgICAgICB2b2lkIGRyYXdQYXR0ZXJuQ29udGVudEludG9UaWxlKGNvbnN0IFNWR1Bh
dHRlcm5FbGVtZW50ICp0YXJnZXQsIGNvbnN0IEludFNpemUgJm5ld1NpemUsIEFmZmluZVRyYW5z
Zm9ybSBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4KTsKKyAgICAgICAgdm9pZCBmaWxsQXR0cmlidXRl
c0Zyb21SZWZlcmVuY2VQYXR0ZXJuKGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50KiB0YXJnZXQsIEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgIHZvaWQgZHJh
d1BhdHRlcm5Db250ZW50SW50b1RpbGUoY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqIHRhcmdldCwg
Y29uc3QgSW50U2l6ZSYgbmV3U2l6ZSwgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm1N
YXRyaXgpOwogICAgICAgICB2b2lkIG5vdGlmeUNsaWVudHNUb1JlcGFpbnQoKSBjb25zdDsKICAg
ICB9OwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxl
bWVudC5jcHAJKHJldmlzaW9uIDE3MDM2KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmFkaWFs
R3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBr
ZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAg
LTIyLDI1ICsyMiwyMSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NVUFBP
UlQKLSNpbmNsdWRlICJBdHRyLmgiCisjaW5jbHVkZSAiU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50
LmgiCiAKLSNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgor
I2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50LmgiCiAjaW5jbHVkZSAiU1ZH
SGVscGVyLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTWF0cml4Lmgi
Ci0jaW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTVkdTdG9wRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgogI2luY2x1
ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKLSNpbmNsdWRlICJTVkdMZW5ndGguaCIKLSNpbmNsdWRl
ICJTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0
LmgiCi0KLSNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+Ci0jaW5j
bHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuaD4KKyNp
bmNsdWRlICJTVkdVbml0VHlwZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdSYWRp
YWxHcmFkaWVudEVsZW1lbnQ6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50
OjpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqIGRvYykKICAgICA6IFNWR0dyYWRpZW50RWxlbWVudCh0YWdOYW1lLCBkb2MpCiAg
ICAgLCBtX2N4KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgp
KSkKICAgICAsIG1fY3kobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxl
bWVudCgpKSkKQEAgLTY0LDcgKzYwLDcgQEAgQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMo
U1ZHUmFkaWFsRwogQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHUmFkaWFsR3JhZGll
bnRFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgRnksIGZ5LCBTVkdOYW1lczo6
ZnlBdHRyLmxvY2FsTmFtZSgpLCBtX2Z5LmdldCgpKQogQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlMoU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0
aCwgUiwgciwgU1ZHTmFtZXM6OnJBdHRyLmxvY2FsTmFtZSgpLCBtX3IuZ2V0KCkpCiAKLXZvaWQg
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUgKmF0dHIpCit2b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmN4QXR0cikKQEAgLTgxLDcgKzc3LDcgQEAgdm9pZCBTVkdSYWRpYWxHcmFkaWVudEVsZW1l
bnQ6OnBhcnNlTWFwcAogICAgICAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOwogfQogCi12b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6YnVpbGRH
cmFkaWVudChLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCAqX2dyYWQpIGNvbnN0Cit2b2lk
IFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkaWVudChLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJHcmFkaWVudCogX2dyYWQpIGNvbnN0CiB7CiAgICAgcmVidWlsZFN0b3BzKCk7IC8vIHJl
YnVpbGQgc3RvcHMgYmVmb3JlIHBvc3NpYmx5IGltcG9ydGluZyB0aGVtIGZyb20gYW55IHJlZmVy
ZW5jZWQgZ3JhZGllbnQuCiAKQEAgLTk4LDUwICs5NCw0NiBAQCB2b2lkIFNWR1JhZGlhbEdyYWRp
ZW50RWxlbWVudDo6YnVpbGRHcmFkCiAgICAgZmxvYXQgX2Z4ID0gZnhTZXQgPyBmeCgpLT52YWx1
ZSgpIDogX2N4OwogICAgIGZsb2F0IF9meSA9IGZ5U2V0ID8gZnkoKS0+dmFsdWUoKSA6IF9jeTsK
IAotICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50ICpncmFkID0gc3RhdGlj
X2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQgKj4oX2dyYWQpOworICAg
IEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50KiBncmFkID0gc3RhdGljX2Nhc3Q8
S1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQqID4oX2dyYWQpOwogICAgIEFmZmlu
ZVRyYW5zZm9ybSBtYXQ7Ci0gICAgaWYoZ3JhZGllbnRUcmFuc2Zvcm0oKS0+bnVtYmVyT2ZJdGVt
cygpID4gMCkKKyAgICBpZiAoZ3JhZGllbnRUcmFuc2Zvcm0oKS0+bnVtYmVyT2ZJdGVtcygpID4g
MCkKICAgICAgICAgbWF0ID0gZ3JhZGllbnRUcmFuc2Zvcm0oKS0+Y29uc29saWRhdGUoKS0+bWF0
cml4KCktPm1hdHJpeCgpOwogCiAgICAgRGVwcmVjYXRlZFN0cmluZyByZWYgPSBocmVmKCkuZGVw
cmVjYXRlZFN0cmluZygpOwotICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqcHNlcnZlciA9IGdl
dFBhaW50U2VydmVyQnlJZChkb2N1bWVudCgpLCByZWYubWlkKDEpKTsKKyAgICBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXIqIHBzZXJ2ZXIgPSBnZXRQYWludFNlcnZlckJ5SWQoZG9jdW1lbnQoKSwgcmVm
Lm1pZCgxKSk7CiAKLSAgICBpZihwc2VydmVyICYmIChwc2VydmVyLT50eXBlKCkgPT0gUFNfUkFE
SUFMX0dSQURJRU5UIHx8IHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19MSU5FQVJfR1JBRElFTlQpKQot
ICAgIHsKKyAgICBpZiAocHNlcnZlciAmJiAocHNlcnZlci0+dHlwZSgpID09IFBTX1JBRElBTF9H
UkFESUVOVCB8fCBwc2VydmVyLT50eXBlKCkgPT0gUFNfTElORUFSX0dSQURJRU5UKSkgewogICAg
ICAgICBib29sIGlzUmFkaWFsID0gcHNlcnZlci0+dHlwZSgpID09IFBTX1JBRElBTF9HUkFESUVO
VDsKLSAgICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQgKmdyYWRpZW50ID0gc3Rh
dGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQgKj4ocHNlcnZlcik7CisgICAg
ICAgIEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBncmFkaWVudCA9IHN0YXRpY19jYXN0
PEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiA+KHBzZXJ2ZXIpOwogCi0gICAgICAgIGlm
KCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmdyYWRpZW50VW5pdHNBdHRyKSkKKyAgICAgICAgaWYg
KCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmdyYWRpZW50VW5pdHNBdHRyKSkKICAgICAgICAgICAg
IGJib3ggPSBncmFkaWVudC0+Ym91bmRpbmdCb3hNb2RlKCk7CiAKLSAgICAgICAgaWYoaXNSYWRp
YWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdy
YWRpZW50ICpyYWRpYWwgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxH
cmFkaWVudCAqPihwc2VydmVyKTsKLSAgICAgICAgICAgIGlmKCFoYXNBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OmN4QXR0cikpCisgICAgICAgIGlmIChpc1JhZGlhbCkgeworICAgICAgICAgICAgS1JlbmRl
cmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQqIHJhZGlhbCA9IHN0YXRpY19jYXN0PEtSZW5k
ZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50KiA+KHBzZXJ2ZXIpOworICAgICAgICAgICAg
aWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmN4QXR0cikpCiAgICAgICAgICAgICAgICAgX2N4
ID0gcmFkaWFsLT5ncmFkaWVudENlbnRlcigpLngoKTsKLSAgICAgICAgICAgIGVsc2UgaWYoYmJv
eCkKKyAgICAgICAgICAgIGVsc2UgaWYgKGJib3gpCiAgICAgICAgICAgICAgICAgX2N4ICo9IDEw
MC47Ci0gICAgICAgICAgICBpZighaGFzQXR0cmlidXRlKFNWR05hbWVzOjpjeUF0dHIpKQorICAg
ICAgICAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmN5QXR0cikpCiAgICAgICAgICAg
ICAgICAgX2N5ID0gcmFkaWFsLT5ncmFkaWVudENlbnRlcigpLnkoKTsKLSAgICAgICAgICAgIGVs
c2UgaWYoYmJveCkKKyAgICAgICAgICAgIGVsc2UgaWYgKGJib3gpCiAgICAgICAgICAgICAgICAg
X2N5ICo9IDEwMC47CiAKLSAgICAgICAgICAgIGlmKCFmeFNldCkKKyAgICAgICAgICAgIGlmICgh
ZnhTZXQpCiAgICAgICAgICAgICAgICAgX2Z4ID0gcmFkaWFsLT5ncmFkaWVudEZvY2FsKCkueCgp
OwotICAgICAgICAgICAgZWxzZSBpZihiYm94KQorICAgICAgICAgICAgZWxzZSBpZiAoYmJveCkK
ICAgICAgICAgICAgICAgICBfZnggKj0gMTAwLjsKLSAgICAgICAgICAgIGlmKCFmeVNldCkKKyAg
ICAgICAgICAgIGlmICghZnlTZXQpCiAgICAgICAgICAgICAgICAgX2Z5ID0gcmFkaWFsLT5ncmFk
aWVudEZvY2FsKCkueSgpOwotICAgICAgICAgICAgZWxzZSBpZihiYm94KQorICAgICAgICAgICAg
ZWxzZSBpZiAoYmJveCkKICAgICAgICAgICAgICAgICBfZnkgKj0gMTAwLjsKIAotICAgICAgICAg
ICAgaWYoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6ckF0dHIpKQorICAgICAgICAgICAgaWYgKCFo
YXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJBdHRyKSkKICAgICAgICAgICAgICAgICBfciA9IHJhZGlh
bC0+Z3JhZGllbnRSYWRpdXMoKTsKLSAgICAgICAgICAgIGVsc2UgaWYoYmJveCkKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGJib3gpCiAgICAgICAgICAgICAgICAgX3IgKj0gMTAwLjsKLSAgICAgICAg
fQotICAgICAgICBlbHNlIGlmKGJib3gpCi0gICAgICAgIHsKKyAgICAgICAgfSBlbHNlIGlmIChi
Ym94KSB7CiAgICAgICAgICAgICBfY3ggKj0gMTAwLjA7CiAgICAgICAgICAgICBfY3kgKj0gMTAw
LjA7CiAgICAgICAgICAgICBfZnggKj0gMTAwLjA7CkBAIC0xNTgsMTggKzE1MCwxNSBAQCB2b2lk
IFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkCiAKICAgICAgICAgaWYgKCFoYXNB
dHRyaWJ1dGUoU1ZHTmFtZXM6OnNwcmVhZE1ldGhvZEF0dHIpKQogICAgICAgICAgICAgZ3JhZC0+
c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoZ3JhZGllbnQtPnNwcmVhZE1ldGhvZCgpKTsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYoc3ByZWFkTWV0aG9kKCkgPT0gU1ZHX1NQUkVB
RE1FVEhPRF9SRUZMRUNUKQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzcHJlYWRNZXRob2Qo
KSA9PSBTVkdfU1BSRUFETUVUSE9EX1JFRkxFQ1QpCiAgICAgICAgICAgICBncmFkLT5zZXRHcmFk
aWVudFNwcmVhZE1ldGhvZChTUFJFQURNRVRIT0RfUkVGTEVDVCk7Ci0gICAgICAgIGVsc2UgaWYo
c3ByZWFkTWV0aG9kKCkgPT0gU1ZHX1NQUkVBRE1FVEhPRF9SRVBFQVQpCisgICAgICAgIGVsc2Ug
aWYgKHNwcmVhZE1ldGhvZCgpID09IFNWR19TUFJFQURNRVRIT0RfUkVQRUFUKQogICAgICAgICAg
ICAgZ3JhZC0+c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoU1BSRUFETUVUSE9EX1JFUEVBVCk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3ByZWFkTWV0aG9kKFNQ
UkVBRE1FVEhPRF9QQUQpOwogCi0gICAgICAgIGlmKGJib3gpCi0gICAgICAgIHsKKyAgICAgICAg
aWYgKGJib3gpIHsKICAgICAgICAgICAgIF9jeCAqPSAxMDAuMDsKICAgICAgICAgICAgIF9jeSAq
PSAxMDAuMDsKICAgICAgICAgICAgIF9meCAqPSAxMDAuMDsKSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCShyZXZpc2lvbiAxNzAzNikKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xh
cyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMzYsMTAgKzM2LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
CiAgICAgICAgIHZpcnR1YWwgflNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCgpOwogCiAgICAgICAg
IC8vICdTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwog
CiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIHZvaWQgYnVpbGRHcmFkaWVudChLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCAqZ3JhZCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBidWlsZEdyYWRpZW50KEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBncmFkKSBj
b25zdDsKICAgICAgICAgdmlydHVhbCBLQ1BhaW50U2VydmVyVHlwZSBncmFkaWVudFR5cGUoKSBj
b25zdCB7IHJldHVybiBQU19SQURJQUxfR1JBRElFTlQ7IH0KIAogICAgIHByb3RlY3RlZDoKSW5k
ZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDM2KQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
S0RFIHByb2plY3QKIApAQCAtMjIsMTkgKzIyLDE1IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpZmRlZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgIkF0dHIuaCIKLSNpbmNsdWRlICJEb2N1bWVu
dC5oIgotCi0jaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyR3Jh
ZGllbnQuaD4KKyNpbmNsdWRlICJTVkdTdG9wRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgotI2lu
Y2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU1ZHU3RvcEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJTVkdOYW1lcy5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotU1ZHU3RvcEVsZW1lbnQ6OlNWR1N0b3BFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCitTVkdTdG9wRWxlbWVudDo6U1ZHU3Rv
cEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAg
ICA6IFNWR1N0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jKQogICAgICwgbV9vZmZzZXQoMC4wKQog
ewpAQCAtNDYsMTEgKzQyLDExIEBAIFNWR1N0b3BFbGVtZW50Ojp+U1ZHU3RvcEVsZW1lbnQoKQog
CiBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdTdG9wRWxlbWVudCwgZG91YmxlLCBO
dW1iZXIsIG51bWJlciwgT2Zmc2V0LCBvZmZzZXQsIFNWR05hbWVzOjpvZmZzZXRBdHRyLmxvY2Fs
TmFtZSgpLCBtX29mZnNldCkKIAotdm9pZCBTVkdTdG9wRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBTVkdTdG9wRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0IFN0cmlu
ZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6Om9mZnNldEF0dHIpIHsKLSAgICAgICAgaWYodmFsdWUuZW5kc1dpdGgoIiUiKSkKKyAgICAg
ICAgaWYgKHZhbHVlLmVuZHNXaXRoKCIlIikpCiAgICAgICAgICAgICBzZXRPZmZzZXRCYXNlVmFs
dWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLmxlZnQodmFsdWUubGVuZ3RoKCkgLSAxKS50b0Rv
dWJsZSgpIC8gMTAwLik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNldE9mZnNldEJhc2VW
YWx1ZSh2YWx1ZS50b0RvdWJsZSgpKTsKQEAgLTYwLDEyICs1NiwxNCBAQCB2b2lkIFNWR1N0b3BF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0CiAgICAgaWYgKCFvd25lckRvY3VtZW50KCktPnBh
cnNpbmcoKSAmJiBhdHRhY2hlZCgpKSB7CiAgICAgICAgIHJlY2FsY1N0eWxlKEZvcmNlKTsKICAg
ICAgICAgCi0gICAgICAgIFNWR1N0eWxlZEVsZW1lbnQgKnBhcmVudFN0eWxlZCA9IHN0YXRpY19j
YXN0PFNWR1N0eWxlZEVsZW1lbnQgKj4ocGFyZW50Tm9kZSgpKTsKLSAgICAgICAgaWYocGFyZW50
U3R5bGVkKQorICAgICAgICBTVkdTdHlsZWRFbGVtZW50KiBwYXJlbnRTdHlsZWQgPSBzdGF0aWNf
Y2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4ocGFyZW50Tm9kZSgpKTsKKyAgICAgICAgaWYgKHBhcmVu
dFN0eWxlZCkKICAgICAgICAgICAgIHBhcmVudFN0eWxlZC0+bm90aWZ5QXR0cmlidXRlQ2hhbmdl
KCk7CiAgICAgfQogfQogCit9CisKIC8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQ
UE9SVAogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdG9wRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0b3BFbGVtZW50LmgJKHJldmlzaW9uIDE3MDM2
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3RvcEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMg
WmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwg
MjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIEtERSBwcm9qZWN0CiAKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAg
ICAgICAgdmlydHVhbCBib29sIGlzR3JhZGllbnRTdG9wKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogCiAgICAgICAgIC8vICdTVkdTdG9wbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsK
ICAgICBwcml2YXRlOgogICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZH
U3RvcEVsZW1lbnQsIGRvdWJsZSwgZG91YmxlLCBPZmZzZXQsIG9mZnNldCkKICAgICB9Owo=
</data>
<flag name="review"
          id="3760"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11077</attachid>
            <date>2006-10-13 13:22:31 -0700</date>
            <delta_ts>2006-10-31 11:16:42 -0800</delta_ts>
            <desc>Improved patch</desc>
            <filename>11217-pservers-2.diff</filename>
            <type>text/plain</type>
            <size>40353</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzAzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMDYtMTAtMTMgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIHN2ZyBwYWludCBz
ZXJ2ZXIgY2xhc3Nlcy4KKworICAgICAgICAqIGtzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpTVkdHcmFkaWVudEVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdHcmFkaWVudEVsZW1lbnQ6Om5vdGlm
eUF0dHJpYnV0ZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdHcmFkaWVudEVsZW1lbnQ6
OmNhbnZhc1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dyYWRpZW50RWxlbWVudDo6
cmVidWlsZFN0b3BzKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHR3JhZGllbnRFbGVtZW50Lmg6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OlNWR0xpbmVhckdyYWRpZW50
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpbmVhckdyYWRpZW50
RWxlbWVudDo6YnVpbGRHcmFkaWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0xpbmVhckdy
YWRpZW50RWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6U1ZHUGF0dGVybkVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0dGVybkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50OjpmaWxsQXR0cmli
dXRlc0Zyb21SZWZlcmVuY2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5F
bGVtZW50OjpkcmF3UGF0dGVybkNvbnRlbnRJbnRvVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXR0ZXJuRWxlbWVudDo6bm90aWZ5Q2xpZW50c1RvUmVwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6bm90aWZ5QXR0cmlidXRlQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50OjpjYW52YXNSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6Z2V0Q1RNKToKKyAgICAgICAgKiBrc3ZnMi9zdmcv
U1ZHUGF0dGVybkVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50
OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGll
bnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVu
dDo6U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JhZGlh
bEdyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWRpZW50KToKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR1N0b3BFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0b3BFbGVtZW50OjpT
VkdTdG9wRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTdG9wRWxlbWVudC5oOgor
CiAyMDA2LTEwLTEzICBEYXZpZCBIYXJyaXNvbiAgPGhhcnJpc29uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBKdXN0aW4uCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHcmFk
aWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0dyYWRp
ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
R3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBr
ZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAg
LTI0LDI0ICsyNCwxOSBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHR3JhZGll
bnRFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJBdHRyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgot
I2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVk
ZSAiU1ZHU3RvcEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAjaW5j
bHVkZSAiU1ZHVHJhbnNmb3JtYWJsZS5oIgotI2luY2x1ZGUgImNzc3N0eWxlc2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKLSNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVu
ZGVyaW5nRGV2aWNlLmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50
U2VydmVyR3JhZGllbnQuaD4KKyNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCiAKLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdHcmFkaWVudEVs
ZW1lbnQ6OlNWR0dyYWRpZW50RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCAqZG9jKQorU1ZHR3JhZGllbnRFbGVtZW50OjpTVkdHcmFkaWVudEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR1N0eWxl
ZEVsZW1lbnQodGFnTmFtZSwgZG9jKQogICAgICwgU1ZHVVJJUmVmZXJlbmNlKCkKICAgICAsIFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQpAQCAtNjEsMjMgKzU2LDIzIEBAIEFOSU1BVEVE
X1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0dyYWRpZW4KIEFOSU1BVEVEX1BST1BFUlRZX0RFRklO
SVRJT05TKFNWR0dyYWRpZW50RWxlbWVudCwgU1ZHVHJhbnNmb3JtTGlzdCosIFRyYW5zZm9ybUxp
c3QsIHRyYW5zZm9ybUxpc3QsIEdyYWRpZW50VHJhbnNmb3JtLCBncmFkaWVudFRyYW5zZm9ybSwg
U1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0ci5sb2NhbE5hbWUoKSwgbV9ncmFkaWVudFRy
YW5zZm9ybS5nZXQoKSkKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0dyYWRpZW50
RWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwgZW51bWVyYXRpb24sIFNwcmVhZE1ldGhvZCwgc3By
ZWFkTWV0aG9kLCBTVkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0ci5sb2NhbE5hbWUoKSwgbV9zcHJl
YWRNZXRob2QpCiAKLXZvaWQgU1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR0dyYWRpZW50RWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0IFN0cmlu
ZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmdyYWRpZW50VW5pdHNBdHRyKSB7Ci0gICAgICAgIGlmKHZhbHVlID09ICJ1c2VyU3BhY2VP
blVzZSIpCisgICAgICAgIGlmICh2YWx1ZSA9PSAidXNlclNwYWNlT25Vc2UiKQogICAgICAgICAg
ICAgc2V0R3JhZGllbnRVbml0c0Jhc2VWYWx1ZShTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVf
VVNFUlNQQUNFT05VU0UpOwotICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJvYmplY3RCb3VuZGlu
Z0JveCIpCisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJvYmplY3RCb3VuZGluZ0JveCIpCiAg
ICAgICAgICAgICBzZXRHcmFkaWVudFVuaXRzQmFzZVZhbHVlKFNWR1VuaXRUeXBlczo6U1ZHX1VO
SVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0cikgewotICAgICAgICBTVkdUcmFuc2Zv
cm1MaXN0ICpncmFkaWVudFRyYW5zZm9ybXMgPSBncmFkaWVudFRyYW5zZm9ybUJhc2VWYWx1ZSgp
OworICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0KiBncmFkaWVudFRyYW5zZm9ybXMgPSBncmFkaWVu
dFRyYW5zZm9ybUJhc2VWYWx1ZSgpOwogICAgICAgICBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRy
YW5zZm9ybUF0dHJpYnV0ZShncmFkaWVudFRyYW5zZm9ybXMsIGF0dHItPnZhbHVlKCkpOwogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcHJlYWRNZXRob2RBdHRyKSB7
Ci0gICAgICAgIGlmKHZhbHVlID09ICJyZWZsZWN0IikKKyAgICAgICAgaWYgKHZhbHVlID09ICJy
ZWZsZWN0IikKICAgICAgICAgICAgIHNldFNwcmVhZE1ldGhvZEJhc2VWYWx1ZShTVkdfU1BSRUFE
TUVUSE9EX1JFRkxFQ1QpOwotICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJyZXBlYXQiKQorICAg
ICAgICBlbHNlIGlmICh2YWx1ZSA9PSAicmVwZWF0IikKICAgICAgICAgICAgIHNldFNwcmVhZE1l
dGhvZEJhc2VWYWx1ZShTVkdfU1BSRUFETUVUSE9EX1JFUEVBVCk7Ci0gICAgICAgIGVsc2UgaWYo
dmFsdWUgPT0gInBhZCIpCisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJwYWQiKQogICAgICAg
ICAgICAgc2V0U3ByZWFkTWV0aG9kQmFzZVZhbHVlKFNWR19TUFJFQURNRVRIT0RfUEFEKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKSkKQEAgLTkxLDcgKzg2LDcgQEAgdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cgogCiB2b2lkIFNWR0dyYWRpZW50RWxlbWVudDo6bm90aWZ5QXR0cmlidXRl
Q2hhbmdlKCkgY29uc3QKIHsKLSAgICBpZihvd25lckRvY3VtZW50KCktPnBhcnNpbmcoKSB8fCAh
YXR0YWNoZWQoKSB8fCAhbV9yZXNvdXJjZSkKKyAgICBpZiAob3duZXJEb2N1bWVudCgpLT5wYXJz
aW5nKCkgfHwgIWF0dGFjaGVkKCkgfHwgIW1fcmVzb3VyY2UpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIFVwZGF0ZSBjbGllbnRzIG9mIHRoaXMgZ3JhZGllbnQgcmVzb3VyY2UuLi4KQEAgLTEw
MCwyMCArOTUsMTkgQEAgdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6Om5vdGlmeUF0dHJpYnV0ZQog
ICAgIG1fcmVzb3VyY2UtPmludmFsaWRhdGUoKTsgIC8vIHNob3VsZCB0aGlzIGJlIGFkZGVkIHRv
IGJ1aWxkIGdyYWRpZW50PwogICAgIAogICAgIGNvbnN0IFJlbmRlclBhdGhMaXN0ICZjbGllbnRz
ID0gbV9yZXNvdXJjZS0+Y2xpZW50cygpOwotICAgIGZvcihSZW5kZXJQYXRoTGlzdDo6Q29uc3RJ
dGVyYXRvciBpdCA9IGNsaWVudHMuYmVnaW4oKTsgaXQgIT0gY2xpZW50cy5lbmQoKTsgKytpdCkK
LSAgICB7Ci0gICAgICAgIGNvbnN0IFJlbmRlclBhdGggKmN1cnJlbnQgPSAoKml0KTsKLSAgICAg
ICAgU1ZHU3R5bGVkRWxlbWVudCAqc3R5bGVkID0gKGN1cnJlbnQgPyBzdGF0aWNfY2FzdDxTVkdT
dHlsZWRFbGVtZW50ICo+KGN1cnJlbnQtPmVsZW1lbnQoKSkgOiAwKTsKLSAgICAgICAgaWYoc3R5
bGVkKQorICAgIGZvciAoUmVuZGVyUGF0aExpc3Q6OkNvbnN0SXRlcmF0b3IgaXQgPSBjbGllbnRz
LmJlZ2luKCk7IGl0ICE9IGNsaWVudHMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgY29uc3QgUmVu
ZGVyUGF0aCogY3VycmVudCA9ICgqaXQpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHls
ZWQgPSAoY3VycmVudCA/IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihjdXJyZW50LT5l
bGVtZW50KCkpIDogMCk7CisgICAgICAgIGlmIChzdHlsZWQpCiAgICAgICAgICAgICBzdHlsZWQt
PnNldENoYW5nZWQodHJ1ZSk7CiAgICAgfQogfQogCi1LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFk
aWVudCAqU1ZHR3JhZGllbnRFbGVtZW50OjpjYW52YXNSZXNvdXJjZSgpCitLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJHcmFkaWVudCogU1ZHR3JhZGllbnRFbGVtZW50OjpjYW52YXNSZXNvdXJjZSgpCiB7
CiAgICAgaWYgKCFtX3Jlc291cmNlKSB7Ci0gICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAq
dGVtcCA9IHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYWludFNlcnZlcihncmFkaWVudFR5cGUo
KSk7Ci0gICAgICAgIG1fcmVzb3VyY2UgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJHcmFkaWVudCAqPih0ZW1wKTsKKyAgICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyKiB0ZW1w
ID0gcmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVBhaW50U2VydmVyKGdyYWRpZW50VHlwZSgpKTsK
KyAgICAgICAgbV9yZXNvdXJjZSA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50Kj4odGVtcCk7CiAgICAgICAgIG1fcmVzb3VyY2UtPnNldExpc3RlbmVyKHRoaXMpOwog
ICAgICAgICBidWlsZEdyYWRpZW50KG1fcmVzb3VyY2UpOwogICAgIH0KQEAgLTEzMiwxMyArMTI2
LDEzIEBAIHZvaWQgU1ZHR3JhZGllbnRFbGVtZW50OjpyZWJ1aWxkU3RvcHMoKSAKICAgICAgICAg
VmVjdG9yPEtDR3JhZGllbnRTdG9wPiBzdG9wczsKICAgICAgICAgIC8vIEZJWE1FOiBNYW51YWwg
c3R5bGUgcmVzb2x1dGlvbiBpcyBhIGhhY2sKICAgICAgICAgUmVuZGVyU3R5bGUqIGdyYWRpZW50
U3R5bGUgPSBjb25zdF9jYXN0PFNWR0dyYWRpZW50RWxlbWVudCo+KHRoaXMpLT5zdHlsZUZvclJl
bmRlcmVyKHBhcmVudCgpLT5yZW5kZXJlcigpKTsKLSAgICAgICAgZm9yIChOb2RlICpuID0gZmly
c3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgICAgU1ZHRWxl
bWVudCAqZWxlbWVudCA9IHN2Z19keW5hbWljX2Nhc3Qobik7CisgICAgICAgIGZvciAoTm9kZSog
biA9IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAg
IFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdmdfZHluYW1pY19jYXN0KG4pOwogICAgICAgICAgICAg
aWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aXNHcmFkaWVudFN0b3AoKSkgewotICAgICAgICAgICAg
ICAgIFNWR1N0b3BFbGVtZW50ICpzdG9wID0gc3RhdGljX2Nhc3Q8U1ZHU3RvcEVsZW1lbnQgKj4o
ZWxlbWVudCk7CisgICAgICAgICAgICAgICAgU1ZHU3RvcEVsZW1lbnQqIHN0b3AgPSBzdGF0aWNf
Y2FzdDxTVkdTdG9wRWxlbWVudCo+KGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGZsb2F0IHN0
b3BPZmZzZXQgPSBzdG9wLT5vZmZzZXQoKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBSZW5kZXJTdHlsZSAqc3RvcFN0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rvcigp
LT5zdHlsZUZvckVsZW1lbnQoc3RvcCwgZ3JhZGllbnRTdHlsZSk7CisgICAgICAgICAgICAgICAg
UmVuZGVyU3R5bGUqIHN0b3BTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5
bGVGb3JFbGVtZW50KHN0b3AsIGdyYWRpZW50U3R5bGUpOwogICAgICAgICAgICAgICAgIENvbG9y
IGMgPSBzdG9wU3R5bGUtPnN2Z1N0eWxlKCktPnN0b3BDb2xvcigpOwogICAgICAgICAgICAgICAg
IGZsb2F0IG9wYWNpdHkgPSBzdG9wU3R5bGUtPnN2Z1N0eWxlKCktPnN0b3BPcGFjaXR5KCk7CiAg
ICAgICAgICAgICAgICAgCkBAIC0xNTEsNiArMTQ1LDggQEAgdm9pZCBTVkdHcmFkaWVudEVsZW1l
bnQ6OnJlYnVpbGRTdG9wcygpIAogICAgIH0KIH0KIAorfQorCiAvLyB2aW06dHM9NDpub2V0CiAj
ZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHR3JhZGll
bnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHR3JhZGllbnRF
bGVtZW50LmgJKHJldmlzaW9uIDE3MDM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHR3JhZGll
bnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4K
LSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAg
ICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
IAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxOSAr
MjQsMTggQEAKICNkZWZpbmUgS1NWR19TVkdHcmFkaWVudEVsZW1lbnRJbXBsX0gKICNpZmRlZiBT
VkdfU1VQUE9SVAogCi0jaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiU1ZH
U3R5bGVkRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQu
aCIKLQogI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50LmgiCisjaW5jbHVk
ZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIGNsYXNzIFNWR0dyYWRpZW50RWxlbWVudDsKICAgICBjbGFzcyBTVkdUcmFuc2Zv
cm1MaXN0OwogICAgIGNsYXNzIFNWR0dyYWRpZW50RWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRF
bGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVVJJ
UmVmZXJlbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIEtDYW52YXNSZXNvdXJjZUxpc3RlbmVyCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR1VSSVJlZmVyZW5jZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgS0NhbnZhc1Jlc291cmNlTGlzdGVuZXIKICAg
ICB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIFNWR0dyYWRpZW50VHlwZSB7CkBAIC01MCwx
NCArNDksMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIH5TVkdHcmFk
aWVudEVsZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZHR3JhZGllbnRFbGVtZW50JyBmdW5jdGlv
bnMKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSAqYXR0cik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUF0dHJpYnV0ZUNo
YW5nZSgpIGNvbnN0OwogICAgICAgICAKLSAgICAgICAgdmlydHVhbCBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJHcmFkaWVudCAqY2FudmFzUmVzb3VyY2UoKTsKKyAgICAgICAgdmlydHVhbCBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCogY2FudmFzUmVzb3VyY2UoKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIHJlc291cmNlTm90aWZpY2F0aW9uKCkgY29uc3Q7CiAKICAgICBwcm90ZWN0ZWQ6Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBidWlsZEdyYWRpZW50KEtSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50ICpncmFkKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBidWlsZEdyYWRp
ZW50KEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KikgY29uc3QgPSAwOwogICAgICAgICB2
aXJ0dWFsIEtDUGFpbnRTZXJ2ZXJUeXBlIGdyYWRpZW50VHlwZSgpIGNvbnN0ID0gMDsKICAgICAg
ICAgdm9pZCByZWJ1aWxkU3RvcHMoKSBjb25zdDsKIApAQCAtNjksNyArNjgsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdH
cmFkaWVudEVsZW1lbnQsIGludCwgaW50LCBHcmFkaWVudFVuaXRzLCBncmFkaWVudFVuaXRzKQog
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHR3JhZGllbnRFbGVtZW50
LCBTVkdUcmFuc2Zvcm1MaXN0KiwgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+LCBHcmFkaWVudFRy
YW5zZm9ybSwgZ3JhZGllbnRUcmFuc2Zvcm0pCiAKLSAgICAgICAgbXV0YWJsZSBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJHcmFkaWVudCAqbV9yZXNvdXJjZTsKKyAgICAgICAgbXV0YWJsZSBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCogbV9yZXNvdXJjZTsKICAgICB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVhckdyYWRp
ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2ls
ZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0
CiAKQEAgLTIyLDI0ICsyMiwyMSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZH
X1NVUFBPUlQKLSNpbmNsdWRlICJBdHRyLmgiCisjaW5jbHVkZSAiU1ZHTGluZWFyR3JhZGllbnRF
bGVtZW50LmgiCiAKLSNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKLSNpbmNsdWRlICJTVkdOYW1l
cy5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJHcmFkaWVudC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1ZGUg
IlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgorI2luY2x1ZGUgIlNWR05hbWVz
LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlz
dC5oIgotI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgotI2luY2x1ZGUgIlNWR0xpbmVhckdyYWRpZW50
RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKLQotI2luY2x1ZGUgIktS
ZW5kZXJpbmdEZXZpY2UuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVu
dC5oIgorI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCitTVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQ6OlNWR0xpbmVhckdyYWRpZW50RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHR3JhZGllbnRFbGVtZW50KHRhZ05hbWUs
IGRvYykKICAgICAsIG1feDEobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRF
bGVtZW50KCkpKQogICAgICwgbV95MShuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX0hFSUdIVCwgdmll
d3BvcnRFbGVtZW50KCkpKQpAQCAtNTksNyArNTYsNyBAQCBBTklNQVRFRF9QUk9QRVJUWV9ERUZJ
TklUSU9OUyhTVkdMaW5lYXJHCiBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdMaW5l
YXJHcmFkaWVudEVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBYMiwgeDIsIFNW
R05hbWVzOjp4MkF0dHIubG9jYWxOYW1lKCksIG1feDIuZ2V0KCkpCiBBTklNQVRFRF9QUk9QRVJU
WV9ERUZJTklUSU9OUyhTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0
aCwgbGVuZ3RoLCBZMiwgeTIsIFNWR05hbWVzOjp5MkF0dHIubG9jYWxOYW1lKCksIG1feTIuZ2V0
KCkpCiAKLXZvaWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OngxQXR0cikKQEAgLTc0LDcgKzcxLDcgQEAgdm9pZCBTVkdMaW5lYXJH
cmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcAogICAgICAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi12b2lkIFNWR0xpbmVhckdyYWRpZW50RWxl
bWVudDo6YnVpbGRHcmFkaWVudChLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCAqX2dyYWQp
IGNvbnN0Cit2b2lkIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkaWVudChLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCogX2dyYWQpIGNvbnN0CiB7CiAgICAgcmVidWlsZFN0
b3BzKCk7IC8vIHJlYnVpbGQgc3RvcHMgYmVmb3JlIHBvc3NpYmx5IGltcG9ydGluZyB0aGVtIGZy
b20gYW55IHJlZmVyZW5jZWQgZ3JhZGllbnQuCiAKQEAgLTg4LDI1ICs4NSwyMyBAQCB2b2lkIFNW
R0xpbmVhckdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkCiAgICAgZmxvYXQgX3gxID0geDEoKS0+
dmFsdWUoKSwgX3kxID0geTEoKS0+dmFsdWUoKTsKICAgICBmbG9hdCBfeDIgPSB4MigpLT52YWx1
ZSgpLCBfeTIgPSB5MigpLT52YWx1ZSgpOwogCi0gICAgS1JlbmRlcmluZ1BhaW50U2VydmVyTGlu
ZWFyR3JhZGllbnQgKmdyYWQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5l
YXJHcmFkaWVudCAqPihfZ3JhZCk7CisgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnQqIGdyYWQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFk
aWVudCo+KF9ncmFkKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0OwogICAgIGlmIChncmFkaWVu
dFRyYW5zZm9ybSgpLT5udW1iZXJPZkl0ZW1zKCkgPiAwKQogICAgICAgICBtYXQgPSBncmFkaWVu
dFRyYW5zZm9ybSgpLT5jb25zb2xpZGF0ZSgpLT5tYXRyaXgoKS0+bWF0cml4KCk7CiAKICAgICBE
ZXByZWNhdGVkU3RyaW5nIHJlZiA9IGhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgS1Jl
bmRlcmluZ1BhaW50U2VydmVyICpwc2VydmVyID0gZ2V0UGFpbnRTZXJ2ZXJCeUlkKGRvY3VtZW50
KCksIHJlZi5taWQoMSkpOworICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciogcHNlcnZlciA9IGdl
dFBhaW50U2VydmVyQnlJZChkb2N1bWVudCgpLCByZWYubWlkKDEpKTsKICAgICAKLSAgICBpZiAo
cHNlcnZlciAmJiAocHNlcnZlci0+dHlwZSgpID09IFBTX1JBRElBTF9HUkFESUVOVCB8fCBwc2Vy
dmVyLT50eXBlKCkgPT0gUFNfTElORUFSX0dSQURJRU5UKSkKLSAgICB7CisgICAgaWYgKHBzZXJ2
ZXIgJiYgKHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19SQURJQUxfR1JBRElFTlQgfHwgcHNlcnZlci0+
dHlwZSgpID09IFBTX0xJTkVBUl9HUkFESUVOVCkpIHsKICAgICAgICAgYm9vbCBpc0xpbmVhciA9
IHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19MSU5FQVJfR1JBRElFTlQ7Ci0gICAgICAgIEtSZW5kZXJp
bmdQYWludFNlcnZlckdyYWRpZW50ICpncmFkaWVudCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50ICo+KHBzZXJ2ZXIpOworICAgICAgICBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJHcmFkaWVudCogZ3JhZGllbnQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJHcmFkaWVudCo+KHBzZXJ2ZXIpOwogCiAgICAgICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05h
bWVzOjpncmFkaWVudFVuaXRzQXR0cikpCiAgICAgICAgICAgICBiYm94ID0gZ3JhZGllbnQtPmJv
dW5kaW5nQm94TW9kZSgpOwogICAgICAgICAgICAgCi0gICAgICAgIGlmIChpc0xpbmVhcikKLSAg
ICAgICAgewotICAgICAgICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQg
KmxpbmVhciA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50
ICo+KHBzZXJ2ZXIpOworICAgICAgICBpZiAoaXNMaW5lYXIpIHsKKyAgICAgICAgICAgIEtSZW5k
ZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50KiBsaW5lYXIgPSBzdGF0aWNfY2FzdDxLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCo+KHBzZXJ2ZXIpOwogICAgICAgICAgICAg
aWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OngxQXR0cikpCiAgICAgICAgICAgICAgICAgX3gx
ID0gbGluZWFyLT5ncmFkaWVudFN0YXJ0KCkueCgpOwogICAgICAgICAgICAgZWxzZSBpZiAoYmJv
eCkKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5o
CShyZXZpc2lvbiAxNzAzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVhckdyYWRpZW50
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0g
ICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAg
ICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAK
ICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMzYsMTAgKzM2
LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR0xpbmVhckdyYWRp
ZW50RWxlbWVudCgpOwogCiAgICAgICAgIC8vICdTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQnIGZ1
bmN0aW9ucwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlICphdHRyKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFs
IHZvaWQgYnVpbGRHcmFkaWVudChLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCAqZ3JhZCkg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBidWlsZEdyYWRpZW50KEtSZW5kZXJpbmdQYWlu
dFNlcnZlckdyYWRpZW50KikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgS0NQYWludFNlcnZlclR5
cGUgZ3JhZGllbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gUFNfTElORUFSX0dSQURJRU5UOyB9CiAK
ICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNzAzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAg
ICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDI4ICsyNCwy
NiBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHUGF0dGVybkVsZW1lbnQuaCIK
IAotI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1
ZGUgIktDYW52YXNJbWFnZS5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNs
dWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAiU1ZHTGVuZ3Ro
LmgiCi0jaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0Nv
bnRhaW5lci5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5o
IgogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVk
ZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNs
dWRlICJTVkdUcmFuc2Zvcm1hYmxlLmgiCiAjaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCi0jaW5j
bHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHUGF0dGVybkVsZW1lbnQ6OlNWR1Bh
dHRlcm5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2Mp
CitTVkdQYXR0ZXJuRWxlbWVudDo6U1ZHUGF0dGVybkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR1N0eWxlZExvY2F0YWJsZUVsZW1l
bnQodGFnTmFtZSwgZG9jKQogICAgICwgU1ZHVVJJUmVmZXJlbmNlKCkKICAgICAsIFNWR1Rlc3Rz
KCkKQEAgLTc5LDkgKzc3LDkgQEAgQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHUGF0
dGVybgogQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHUGF0dGVybkVsZW1lbnQsIFNW
R0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBIZWlnaHQsIGhlaWdodCwgU1ZHTmFtZXM6OmhlaWdo
dEF0dHIubG9jYWxOYW1lKCksIG1faGVpZ2h0LmdldCgpKQogQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHUGF0dGVybkVsZW1lbnQsIFNWR1RyYW5zZm9ybUxpc3QqLCBUcmFuc2Zvcm1M
aXN0LCB0cmFuc2Zvcm1MaXN0LCBQYXR0ZXJuVHJhbnNmb3JtLCBwYXR0ZXJuVHJhbnNmb3JtLCBT
VkdOYW1lczo6cGF0dGVyblRyYW5zZm9ybUF0dHIubG9jYWxOYW1lKCksIG1fcGF0dGVyblRyYW5z
Zm9ybS5nZXQoKSkKIAotdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyAmdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnBhdHRlcm5Vbml0c0F0dHIpIHsKICAgICAgICAgaWYgKHZhbHVlID09ICJ1c2VyU3BhY2VPblVz
ZSIpCiAgICAgICAgICAgICBzZXRQYXR0ZXJuVW5pdHNCYXNlVmFsdWUoU1ZHVW5pdFR5cGVzOjpT
VkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKQEAgLTkzLDcgKzkxLDcgQEAgdm9pZCBTVkdQ
YXR0ZXJuRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAgICBlbHNlIGlmICh2YWx1ZSA9
PSAib2JqZWN0Qm91bmRpbmdCb3giKQogICAgICAgICAgICAgc2V0UGF0dGVybkNvbnRlbnRVbml0
c0Jhc2VWYWx1ZShTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gp
OwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwYXR0ZXJuVHJhbnNm
b3JtQXR0cikgewotICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0ICpwYXR0ZXJuVHJhbnNmb3JtcyA9
IHBhdHRlcm5UcmFuc2Zvcm1CYXNlVmFsdWUoKTsKKyAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdCog
cGF0dGVyblRyYW5zZm9ybXMgPSBwYXR0ZXJuVHJhbnNmb3JtQmFzZVZhbHVlKCk7CiAgICAgICAg
IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0cmlidXRlKHBhdHRlcm5UcmFuc2Zv
cm1zLCB2YWx1ZSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhB
dHRyKQogICAgICAgICB4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUpOwpAQCAt
MTQxLDEyICsxMzksMTIgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6cmVzb3VyY2VOb3RpZmlj
YQogdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6ZmlsbEF0dHJpYnV0ZXNGcm9tUmVmZXJlbmNlUGF0
dGVybihjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCogdGFyZ2V0LCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm1NYXRyaXgpCiB7CiAgICAgRGVwcmVjYXRlZFN0cmluZyByZWYgPSBocmVm
KCkuZGVwcmVjYXRlZFN0cmluZygpOwotICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqcmVmU2Vy
dmVyID0gZ2V0UGFpbnRTZXJ2ZXJCeUlkKGRvY3VtZW50KCksIHJlZi5taWQoMSkpOworICAgIEtS
ZW5kZXJpbmdQYWludFNlcnZlciogcmVmU2VydmVyID0gZ2V0UGFpbnRTZXJ2ZXJCeUlkKGRvY3Vt
ZW50KCksIHJlZi5taWQoMSkpOwogCiAgICAgaWYgKCFyZWZTZXJ2ZXIgfHwgcmVmU2VydmVyLT50
eXBlKCkgIT0gUFNfUEFUVEVSTikKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEtSZW5kZXJp
bmdQYWludFNlcnZlclBhdHRlcm4gKnJlZlBhdHRlcm4gPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJQYXR0ZXJuICo+KHJlZlNlcnZlcik7CisgICAgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyUGF0dGVybiogcmVmUGF0dGVybiA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZl
clBhdHRlcm4qPihyZWZTZXJ2ZXIpOwogICAgIAogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05h
bWVzOjpwYXR0ZXJuVW5pdHNBdHRyKSkgewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlID0gdGFyZ2V0LT5nZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnBhdHRlcm5Vbml0c0F0dHIpOwpA
QCAtMTgzLDcgKzE4MSw3IEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmRyYXdQYXR0ZXJuQ29u
dGUKICAgICAgICAgaWYgKGhlaWdodCgpLT51bml0VHlwZSgpICE9IFNWR0xlbmd0aDo6U1ZHX0xF
TkdUSFRZUEVfUEVSQ0VOVEFHRSkKICAgICAgICAgICAgIGhlaWdodCgpLT5uZXdWYWx1ZVNwZWNp
ZmllZFVuaXRzKFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSwgaGVpZ2h0KCkt
PnZhbHVlKCkgKiAxMDAuKTsKICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQpCi0gICAgICAgICAg
ICBzYXZlZENvbnRleHQgPSBjb25zdF9jYXN0PFNWR1BhdHRlcm5FbGVtZW50KiA+KHRoaXMpLT5w
dXNoQXR0cmlidXRlQ29udGV4dChhY3RpdmVFbGVtZW50KTsKKyAgICAgICAgICAgIHNhdmVkQ29u
dGV4dCA9IGNvbnN0X2Nhc3Q8U1ZHUGF0dGVybkVsZW1lbnQqPih0aGlzKS0+cHVzaEF0dHJpYnV0
ZUNvbnRleHQoYWN0aXZlRWxlbWVudCk7CiAgICAgfQogICAgIAogICAgIGRlbGV0ZSBtX3RpbGU7
CkBAIC0xOTksMTMgKzE5NywxMiBAQCB2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpkcmF3UGF0dGVy
bkNvbnRlCiAKICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0KHBhdHRlcm5Db250
ZXh0LT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKSk7CiAKLSAgICBmb3IoTm9kZSAqbiA9IHRhcmdl
dC0+Zmlyc3RDaGlsZCgpOyBuICE9IDA7IG4gPSBuLT5uZXh0U2libGluZygpKQotICAgIHsKKyAg
ICBmb3IgKE5vZGUqIG4gPSB0YXJnZXQtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJs
aW5nKCkpIHsKICAgICAgICAgU1ZHRWxlbWVudCogZWxlbSA9IHN2Z19keW5hbWljX2Nhc3Qobik7
CiAgICAgICAgIGlmICghZWxlbSB8fCAhZWxlbS0+aXNTdHlsZWQoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBTVkdTdHlsZWRFbGVtZW50KiBlID0gc3RhdGljX2Nhc3Q8U1ZHU3R5
bGVkRWxlbWVudCogPihlbGVtKTsKLSAgICAgICAgUmVuZGVyT2JqZWN0ICppdGVtID0gZS0+cmVu
ZGVyZXIoKTsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudCogZSA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZEVsZW1lbnQqPihlbGVtKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBpdGVtID0gZS0+cmVu
ZGVyZXIoKTsKICAgICAgICAgaWYgKCFpdGVtKQogICAgICAgICAgICAgY29udGludWU7CiAjaWYg
MApAQCAtMjI3LDcgKzIyNCw3IEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmRyYXdQYXR0ZXJu
Q29udGUKICAgICAgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdmlld3BvcnRFbGVtZW50J3Mgdmll
d0JveCwgaWYgZXhpc3RhbnQuLi4KICAgICAgICAgaWYgKHZpZXdwb3J0RWxlbWVudCgpICYmIHZp
ZXdwb3J0RWxlbWVudCgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpKQogICAgICAgICB7
Ci0gICAgICAgICAgICBTVkdTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
U1ZHRWxlbWVudCogPih2aWV3cG9ydEVsZW1lbnQoKSk7CisgICAgICAgICAgICBTVkdTVkdFbGVt
ZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KHZpZXdwb3J0RWxl
bWVudCgpKTsKIAogICAgICAgICAgICAgUmVmUHRyPFNWR01hdHJpeD4gc3ZnQ1RNID0gc3ZnRWxl
bWVudC0+Z2V0Q1RNKCk7CiAgICAgICAgICAgICBSZWZQdHI8U1ZHTWF0cml4PiBjdG0gPSBnZXRD
VE0oKTsKQEAgLTI1Miw3ICsyNDksNyBAQCB2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpkcmF3UGF0
dGVybkNvbnRlCiAgICAgfQogCiAgICAgaWYgKHNhdmVkQ29udGV4dCkKLSAgICAgICAgY29uc3Rf
Y2FzdDxTVkdQYXR0ZXJuRWxlbWVudCogPih0aGlzKS0+cHVzaEF0dHJpYnV0ZUNvbnRleHQoc2F2
ZWRDb250ZXh0KTsKKyAgICAgICAgY29uc3RfY2FzdDxTVkdQYXR0ZXJuRWxlbWVudCo+KHRoaXMp
LT5wdXNoQXR0cmlidXRlQ29udGV4dChzYXZlZENvbnRleHQpOwogCiAgICAgZGV2aWNlLT5wb3BD
b250ZXh0KCk7CiAgICAgZGVsZXRlIHBhdHRlcm5Db250ZXh0OwpAQCAtMjYwLDE4ICsyNTcsMTYg
QEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6ZHJhd1BhdHRlcm5Db250ZQogCiB2b2lkIFNWR1Bh
dHRlcm5FbGVtZW50Ojpub3RpZnlDbGllbnRzVG9SZXBhaW50KCkgY29uc3QKIHsKLSAgICBjb25z
dCBSZW5kZXJQYXRoTGlzdCAmY2xpZW50cyA9IG1fcGFpbnRTZXJ2ZXItPmNsaWVudHMoKTsKKyAg
ICBjb25zdCBSZW5kZXJQYXRoTGlzdCYgY2xpZW50cyA9IG1fcGFpbnRTZXJ2ZXItPmNsaWVudHMo
KTsKIAogICAgIFJlbmRlclBhdGhMaXN0OjpDb25zdEl0ZXJhdG9yIGl0ID0gY2xpZW50cy5iZWdp
bigpOwogICAgIFJlbmRlclBhdGhMaXN0OjpDb25zdEl0ZXJhdG9yIGVuZCA9IGNsaWVudHMuZW5k
KCk7CiAKLSAgICBmb3IoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgewotICAgICAgICBjb25zdCBS
ZW5kZXJQYXRoICpjdXJyZW50ID0gKCppdCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICBjb25zdCBSZW5kZXJQYXRoKiBjdXJyZW50ID0gKCppdCk7CiAKLSAgICAgICAg
U1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkID0gKGN1cnJlbnQgPyBzdGF0aWNfY2FzdDxTVkdTdHls
ZWRFbGVtZW50KiA+KGN1cnJlbnQtPmVsZW1lbnQoKSkgOiAwKTsKLSAgICAgICAgaWYgKHN0eWxl
ZCkKLSAgICAgICAgeworICAgICAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHlsZWQgPSAoY3VycmVu
dCA/IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihjdXJyZW50LT5lbGVtZW50KCkpIDog
MCk7CisgICAgICAgIGlmIChzdHlsZWQpIHsKICAgICAgICAgICAgIHN0eWxlZC0+c2V0Q2hhbmdl
ZCh0cnVlKTsKIAogICAgICAgICAgICAgaWYgKHN0eWxlZC0+cmVuZGVyZXIoKSkKQEAgLTI5OCwx
MyArMjkzLDEyIEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6Om5vdGlmeUF0dHJpYnV0ZUMKIAog
ICAgIC8vIEZpbmQgZmlyc3QgcGF0dGVybiBkZWYgdGhhdCBoYXMgY2hpbGRyZW4KICAgICBjb25z
dCBTVkdQYXR0ZXJuRWxlbWVudCogdGFyZ2V0ID0gdGhpczsKLSAgICBjb25zdCBOb2RlICp0ZXN0
ID0gdGhpczsKLSAgICB3aGlsZSh0ZXN0ICYmICF0ZXN0LT5oYXNDaGlsZE5vZGVzKCkpCi0gICAg
eworICAgIGNvbnN0IE5vZGUqIHRlc3QgPSB0aGlzOworICAgIHdoaWxlICh0ZXN0ICYmICF0ZXN0
LT5oYXNDaGlsZE5vZGVzKCkpIHsKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyByZWYgPSB0YXJn
ZXQtPmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgICAgIHRlc3QgPSBvd25lckRvY3Vt
ZW50KCktPmdldEVsZW1lbnRCeUlkKFN0cmluZyhyZWYubWlkKDEpKS5pbXBsKCkpOwogICAgICAg
ICBpZiAodGVzdCAmJiB0ZXN0LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpwYXR0ZXJuVGFnKSkKLSAg
ICAgICAgICAgIHRhcmdldCA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50KiA+
KHRlc3QpOworICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHUGF0dGVy
bkVsZW1lbnQqPih0ZXN0KTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBzaG9ydCBzYXZlZFBhdHRl
cm5Vbml0cyA9IHBhdHRlcm5Vbml0cygpOwpAQCAtMzE1LDcgKzMwOSw3IEBAIHZvaWQgU1ZHUGF0
dGVybkVsZW1lbnQ6Om5vdGlmeUF0dHJpYnV0ZUMKICAgICAgICAgcGF0dGVyblRyYW5zZm9ybU1h
dHJpeCA9IHBhdHRlcm5UcmFuc2Zvcm0oKS0+Y29uc29saWRhdGUoKS0+bWF0cml4KCktPm1hdHJp
eCgpOwogCiAKLSAgICBTVkdQYXR0ZXJuRWxlbWVudCAqbm9uQ29uc3RUaGlzID0gY29uc3RfY2Fz
dDxTVkdQYXR0ZXJuRWxlbWVudCo+KHRoaXMpOworICAgIFNWR1BhdHRlcm5FbGVtZW50KiBub25D
b25zdFRoaXMgPSBjb25zdF9jYXN0PFNWR1BhdHRlcm5FbGVtZW50Kj4odGhpcyk7CiAKICAgICBu
b25Db25zdFRoaXMtPmZpbGxBdHRyaWJ1dGVzRnJvbVJlZmVyZW5jZVBhdHRlcm4odGFyZ2V0LCBw
YXR0ZXJuVHJhbnNmb3JtTWF0cml4KTsgICAKICAgICBub25Db25zdFRoaXMtPmRyYXdQYXR0ZXJu
Q29udGVudEludG9UaWxlKHRhcmdldCwgbmV3U2l6ZSwgcGF0dGVyblRyYW5zZm9ybU1hdHJpeCk7
CkBAIC0zMzQsMTkgKzMyOCwxOSBAQCBSZW5kZXJPYmplY3QqIFNWR1BhdHRlcm5FbGVtZW50Ojpj
cmVhdGVSCiAgICAgcmV0dXJuIHBhdHRlcm5Db250YWluZXI7CiB9CiAKLUtSZW5kZXJpbmdQYWlu
dFNlcnZlclBhdHRlcm4gKlNWR1BhdHRlcm5FbGVtZW50OjpjYW52YXNSZXNvdXJjZSgpCitLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuKiBTVkdQYXR0ZXJuRWxlbWVudDo6Y2FudmFzUmVzb3Vy
Y2UoKQogewogICAgIGlmICghbV9wYWludFNlcnZlcikgewotICAgICAgICBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXIgKnBzZXJ2ZXIgPSByZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlUGFpbnRTZXJ2ZXIo
S0NQYWludFNlcnZlclR5cGUoUFNfUEFUVEVSTikpOwotICAgICAgICBtX3BhaW50U2VydmVyID0g
c3RhdGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybiAqPihwc2VydmVyKTsKLSAg
ICAgICAgbV9wYWludFNlcnZlci0+c2V0TGlzdGVuZXIoY29uc3RfY2FzdDxTVkdQYXR0ZXJuRWxl
bWVudCogPih0aGlzKSk7CisgICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciogcHNlcnZlciA9
IHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYWludFNlcnZlcihLQ1BhaW50U2VydmVyVHlwZShQ
U19QQVRURVJOKSk7CisgICAgICAgIG1fcGFpbnRTZXJ2ZXIgPSBzdGF0aWNfY2FzdDxLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuKj4ocHNlcnZlcik7CisgICAgICAgIG1fcGFpbnRTZXJ2ZXIt
PnNldExpc3RlbmVyKGNvbnN0X2Nhc3Q8U1ZHUGF0dGVybkVsZW1lbnQqPih0aGlzKSk7CiAgICAg
fQogICAgIHJldHVybiBtX3BhaW50U2VydmVyOwogfQogCi1TVkdNYXRyaXggKlNWR1BhdHRlcm5F
bGVtZW50OjpnZXRDVE0oKSBjb25zdAorU1ZHTWF0cml4KiBTVkdQYXR0ZXJuRWxlbWVudDo6Z2V0
Q1RNKCkgY29uc3QKIHsKLSAgICBTVkdNYXRyaXggKm1hdCA9IFNWR1NWR0VsZW1lbnQ6OmNyZWF0
ZVNWR01hdHJpeCgpOworICAgIFNWR01hdHJpeCogbWF0ID0gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRl
U1ZHTWF0cml4KCk7CiAgICAgaWYgKG1hdCkgewogICAgICAgICBSZWZQdHI8U1ZHTWF0cml4PiB2
aWV3Qm94ID0gdmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpLT52YWx1ZSgpLCBoZWlnaHQo
KS0+dmFsdWUoKSk7CiAgICAgICAgIG1hdC0+bXVsdGlwbHkodmlld0JveC5nZXQoKSk7CkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmgJKHJldmlzaW9uIDE3MDM4KQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAKQEAgLTI0LDE0ICsyNCwxMyBAQAogI2RlZmluZSBLU1ZHX1NWR1BhdHRl
cm5FbGVtZW50SW1wbF9ICiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAotI2luY2x1ZGUgIlNWR1Rlc3Rz
LmgiCi0jaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlLmgiCi0jaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNl
LmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybi5oIgorI2luY2x1ZGUg
IlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKICNpbmNsdWRlICJTVkdGaXRUb1ZpZXdC
b3guaCIKKyNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRMb2Nh
dGFibGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5o
IgotCi0jaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVy
bi5oPgorI2luY2x1ZGUgIlNWR1Rlc3RzLmgiCisjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgi
CiAKIGNsYXNzIEtDYW52YXNJbWFnZTsKIApAQCAtNDEsMTIgKzQwLDEyIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlCiAgICAgY2xhc3MgU1ZHUGF0dGVybkVsZW1lbnQ7CiAgICAgY2xhc3MgU1ZHVHJhbnNm
b3JtTGlzdDsKICAgICBjbGFzcyBTVkdQYXR0ZXJuRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRM
b2NhdGFibGVFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBTVkdVUklSZWZlcmVuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR1Rlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBT
VkdMYW5nU3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIFNWR0ZpdFRvVmlld0JveCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgS0NhbnZhc1Jlc291cmNlTGlzdGVuZXIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1YmxpYyBTVkdVUklSZWZlcmVuY2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgU1ZHRml0VG9WaWV3Qm94LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIEtDYW52YXNSZXNvdXJjZUxpc3RlbmVyCiAgICAgewogICAgIHB1YmxpYzoK
ICAgICAgICAgU1ZHUGF0dGVybkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CkBAIC01NSwxOSArNTQsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVh
bCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAK
ICAgICAgICAgLy8gJ1NWR1BhdHRlcm5FbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsK
IAotICAgICAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpwdXNoQXR0cmlidXRlQ29udGV4dChj
b25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KTsKKyAgICAgICAgY29uc3QgU1ZHU3R5bGVk
RWxlbWVudCogcHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCopOwog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZU5vdGlmaWNhdGlvbigpIGNvbnN0OwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QXR0cmlidXRlQ2hhbmdlKCkgY29uc3Q7CiAKLSAgICAg
ICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJl
dHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQotICAgICAgICB2
aXJ0dWFsIFJlbmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBS
ZW5kZXJTdHlsZSAqc3R5bGUpOwotICAgICAgICB2aXJ0dWFsIEtSZW5kZXJpbmdQYWludFNlcnZl
clBhdHRlcm4gKmNhbnZhc1Jlc291cmNlKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJl
cklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVu
ZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KKyAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNy
ZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKyAgICAgICAgdmlydHVh
bCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuKiBjYW52YXNSZXNvdXJjZSgpOwogCiAgICAg
ICAgIC8vICd2aXJ0dWFsIFNWR0xvY2F0YWJsZScgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwg
U1ZHTWF0cml4ICpnZXRDVE0oKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTVkdNYXRyaXgqIGdl
dENUTSgpIGNvbnN0OwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9GT1JXQVJEX0RFQ0xBUkFUSU9OUyhTVkdVUklSZWZlcmVuY2UsIFN0cmluZywgSHJlZiwgaHJl
ZikKQEAgLTgzLDE2ICs4MiwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICBBTklNQVRF
RF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHUGF0dGVybkVsZW1lbnQsIGludCwgaW50LCBQYXR0
ZXJuQ29udGVudFVuaXRzLCBwYXR0ZXJuQ29udGVudFVuaXRzKQogICAgICAgICBBTklNQVRFRF9Q
Uk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHUGF0dGVybkVsZW1lbnQsIFNWR1RyYW5zZm9ybUxpc3Qq
LCBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4sIFBhdHRlcm5UcmFuc2Zvcm0sIHBhdHRlcm5UcmFu
c2Zvcm0pCiAKLSAgICAgICAgbXV0YWJsZSBLQ2FudmFzSW1hZ2UgKm1fdGlsZTsKKyAgICAgICAg
bXV0YWJsZSBLQ2FudmFzSW1hZ2UqIG1fdGlsZTsKICAgICAgICAgbXV0YWJsZSBib29sIG1faWdu
b3JlQXR0cmlidXRlQ2hhbmdlczsKLSAgICAgICAgbXV0YWJsZSBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJQYXR0ZXJuICptX3BhaW50U2VydmVyOworICAgICAgICBtdXRhYmxlIEtSZW5kZXJpbmdQYWlu
dFNlcnZlclBhdHRlcm4qIG1fcGFpbnRTZXJ2ZXI7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFs
IGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsg
fQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gbm90aWZ5QXR0cmlidXRlQ2hhbmdlIGhlbHBl
cnM6Ci0gICAgICAgIHZvaWQgZmlsbEF0dHJpYnV0ZXNGcm9tUmVmZXJlbmNlUGF0dGVybihjb25z
dCBTVkdQYXR0ZXJuRWxlbWVudCAqdGFyZ2V0LCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm1NYXRyaXgpOwotICAgICAgICB2b2lkIGRyYXdQYXR0ZXJuQ29udGVudEludG9UaWxlKGNv
bnN0IFNWR1BhdHRlcm5FbGVtZW50ICp0YXJnZXQsIGNvbnN0IEludFNpemUgJm5ld1NpemUsIEFm
ZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4KTsKKyAgICAgICAgdm9pZCBmaWxs
QXR0cmlidXRlc0Zyb21SZWZlcmVuY2VQYXR0ZXJuKGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50KiB0
YXJnZXQsIEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybU1hdHJpeCk7CisgICAgICAg
IHZvaWQgZHJhd1BhdHRlcm5Db250ZW50SW50b1RpbGUoY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQq
IHRhcmdldCwgY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSwgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5U
cmFuc2Zvcm1NYXRyaXgpOwogICAgICAgICB2b2lkIG5vdGlmeUNsaWVudHNUb1JlcGFpbnQoKSBj
b25zdDsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVu
dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1JhZGlhbEdy
YWRpZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8
d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9q
ZWN0CiAKQEAgLTIyLDI1ICsyMiwyMSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYg
U1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJBdHRyLmgiCisjaW5jbHVkZSAiU1ZHUmFkaWFsR3JhZGll
bnRFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKLSNpbmNsdWRlICJTVkdO
YW1lcy5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50LmgiCiAjaW5j
bHVkZSAiU1ZHSGVscGVyLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZH
TWF0cml4LmgiCi0jaW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKICNpbmNsdWRlICJTVkdTdG9wRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5o
IgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKLSNpbmNsdWRlICJTVkdMZW5ndGguaCIK
LSNpbmNsdWRlICJTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdUcmFu
c2Zvcm1MaXN0LmgiCi0KLSNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNl
Lmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGll
bnQuaD4KKyNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHUmFkaWFsR3JhZGll
bnRFbGVtZW50OjpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR0dyYWRpZW50RWxlbWVudCh0YWdOYW1l
LCBkb2MpCiAgICAgLCBtX2N4KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0
RWxlbWVudCgpKSkKICAgICAsIG1fY3kobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZp
ZXdwb3J0RWxlbWVudCgpKSkKQEAgLTY0LDcgKzYwLDcgQEAgQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHUmFkaWFsRwogQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgRnksIGZ5LCBT
VkdOYW1lczo6ZnlBdHRyLmxvY2FsTmFtZSgpLCBtX2Z5LmdldCgpKQogQU5JTUFURURfUFJPUEVS
VFlfREVGSU5JVElPTlMoU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5n
dGgsIGxlbmd0aCwgUiwgciwgU1ZHTmFtZXM6OnJBdHRyLmxvY2FsTmFtZSgpLCBtX3IuZ2V0KCkp
CiAKLXZvaWQgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmN4QXR0cikKQEAgLTgxLDcgKzc3LDcgQEAgdm9pZCBTVkdSYWRpYWxHcmFk
aWVudEVsZW1lbnQ6OnBhcnNlTWFwcAogICAgICAgICBTVkdHcmFkaWVudEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi12b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVu
dDo6YnVpbGRHcmFkaWVudChLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCAqX2dyYWQpIGNv
bnN0Cit2b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkaWVudChLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCogX2dyYWQpIGNvbnN0CiB7CiAgICAgcmVidWlsZFN0b3Bz
KCk7IC8vIHJlYnVpbGQgc3RvcHMgYmVmb3JlIHBvc3NpYmx5IGltcG9ydGluZyB0aGVtIGZyb20g
YW55IHJlZmVyZW5jZWQgZ3JhZGllbnQuCiAKQEAgLTk4LDUwICs5NCw0NiBAQCB2b2lkIFNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkCiAgICAgZmxvYXQgX2Z4ID0gZnhTZXQgPyBm
eCgpLT52YWx1ZSgpIDogX2N4OwogICAgIGZsb2F0IF9meSA9IGZ5U2V0ID8gZnkoKS0+dmFsdWUo
KSA6IF9jeTsKIAotICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50ICpncmFk
ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQgKj4oX2dy
YWQpOworICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50KiBncmFkID0gc3Rh
dGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQqPihfZ3JhZCk7CiAg
ICAgQWZmaW5lVHJhbnNmb3JtIG1hdDsKLSAgICBpZihncmFkaWVudFRyYW5zZm9ybSgpLT5udW1i
ZXJPZkl0ZW1zKCkgPiAwKQorICAgIGlmIChncmFkaWVudFRyYW5zZm9ybSgpLT5udW1iZXJPZkl0
ZW1zKCkgPiAwKQogICAgICAgICBtYXQgPSBncmFkaWVudFRyYW5zZm9ybSgpLT5jb25zb2xpZGF0
ZSgpLT5tYXRyaXgoKS0+bWF0cml4KCk7CiAKICAgICBEZXByZWNhdGVkU3RyaW5nIHJlZiA9IGhy
ZWYoKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpwc2Vy
dmVyID0gZ2V0UGFpbnRTZXJ2ZXJCeUlkKGRvY3VtZW50KCksIHJlZi5taWQoMSkpOworICAgIEtS
ZW5kZXJpbmdQYWludFNlcnZlciogcHNlcnZlciA9IGdldFBhaW50U2VydmVyQnlJZChkb2N1bWVu
dCgpLCByZWYubWlkKDEpKTsKIAotICAgIGlmKHBzZXJ2ZXIgJiYgKHBzZXJ2ZXItPnR5cGUoKSA9
PSBQU19SQURJQUxfR1JBRElFTlQgfHwgcHNlcnZlci0+dHlwZSgpID09IFBTX0xJTkVBUl9HUkFE
SUVOVCkpCi0gICAgeworICAgIGlmIChwc2VydmVyICYmIChwc2VydmVyLT50eXBlKCkgPT0gUFNf
UkFESUFMX0dSQURJRU5UIHx8IHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19MSU5FQVJfR1JBRElFTlQp
KSB7CiAgICAgICAgIGJvb2wgaXNSYWRpYWwgPSBwc2VydmVyLT50eXBlKCkgPT0gUFNfUkFESUFM
X0dSQURJRU5UOwotICAgICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCAqZ3JhZGll
bnQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCAqPihwc2VydmVy
KTsKKyAgICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQqIGdyYWRpZW50ID0gc3Rh
dGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQqPihwc2VydmVyKTsKIAotICAg
ICAgICBpZighaGFzQXR0cmlidXRlKFNWR05hbWVzOjpncmFkaWVudFVuaXRzQXR0cikpCisgICAg
ICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjpncmFkaWVudFVuaXRzQXR0cikpCiAgICAg
ICAgICAgICBiYm94ID0gZ3JhZGllbnQtPmJvdW5kaW5nQm94TW9kZSgpOwogCi0gICAgICAgIGlm
KGlzUmFkaWFsKQotICAgICAgICB7Ci0gICAgICAgICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJS
YWRpYWxHcmFkaWVudCAqcmFkaWFsID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVy
UmFkaWFsR3JhZGllbnQgKj4ocHNlcnZlcik7Ci0gICAgICAgICAgICBpZighaGFzQXR0cmlidXRl
KFNWR05hbWVzOjpjeEF0dHIpKQorICAgICAgICBpZiAoaXNSYWRpYWwpIHsKKyAgICAgICAgICAg
IEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50KiByYWRpYWwgPSBzdGF0aWNfY2Fz
dDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCo+KHBzZXJ2ZXIpOworICAgICAg
ICAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmN4QXR0cikpCiAgICAgICAgICAgICAg
ICAgX2N4ID0gcmFkaWFsLT5ncmFkaWVudENlbnRlcigpLngoKTsKLSAgICAgICAgICAgIGVsc2Ug
aWYoYmJveCkKKyAgICAgICAgICAgIGVsc2UgaWYgKGJib3gpCiAgICAgICAgICAgICAgICAgX2N4
ICo9IDEwMC47Ci0gICAgICAgICAgICBpZighaGFzQXR0cmlidXRlKFNWR05hbWVzOjpjeUF0dHIp
KQorICAgICAgICAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmN5QXR0cikpCiAgICAg
ICAgICAgICAgICAgX2N5ID0gcmFkaWFsLT5ncmFkaWVudENlbnRlcigpLnkoKTsKLSAgICAgICAg
ICAgIGVsc2UgaWYoYmJveCkKKyAgICAgICAgICAgIGVsc2UgaWYgKGJib3gpCiAgICAgICAgICAg
ICAgICAgX2N5ICo9IDEwMC47CiAKLSAgICAgICAgICAgIGlmKCFmeFNldCkKKyAgICAgICAgICAg
IGlmICghZnhTZXQpCiAgICAgICAgICAgICAgICAgX2Z4ID0gcmFkaWFsLT5ncmFkaWVudEZvY2Fs
KCkueCgpOwotICAgICAgICAgICAgZWxzZSBpZihiYm94KQorICAgICAgICAgICAgZWxzZSBpZiAo
YmJveCkKICAgICAgICAgICAgICAgICBfZnggKj0gMTAwLjsKLSAgICAgICAgICAgIGlmKCFmeVNl
dCkKKyAgICAgICAgICAgIGlmICghZnlTZXQpCiAgICAgICAgICAgICAgICAgX2Z5ID0gcmFkaWFs
LT5ncmFkaWVudEZvY2FsKCkueSgpOwotICAgICAgICAgICAgZWxzZSBpZihiYm94KQorICAgICAg
ICAgICAgZWxzZSBpZiAoYmJveCkKICAgICAgICAgICAgICAgICBfZnkgKj0gMTAwLjsKIAotICAg
ICAgICAgICAgaWYoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6ckF0dHIpKQorICAgICAgICAgICAg
aWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJBdHRyKSkKICAgICAgICAgICAgICAgICBfciA9
IHJhZGlhbC0+Z3JhZGllbnRSYWRpdXMoKTsKLSAgICAgICAgICAgIGVsc2UgaWYoYmJveCkKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGJib3gpCiAgICAgICAgICAgICAgICAgX3IgKj0gMTAwLjsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmKGJib3gpCi0gICAgICAgIHsKKyAgICAgICAgfSBlbHNl
IGlmIChiYm94KSB7CiAgICAgICAgICAgICBfY3ggKj0gMTAwLjA7CiAgICAgICAgICAgICBfY3kg
Kj0gMTAwLjA7CiAgICAgICAgICAgICBfZnggKj0gMTAwLjA7CkBAIC0xNTgsMTggKzE1MCwxNSBA
QCB2b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkCiAKICAgICAgICAgaWYg
KCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnNwcmVhZE1ldGhvZEF0dHIpKQogICAgICAgICAgICAg
Z3JhZC0+c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoZ3JhZGllbnQtPnNwcmVhZE1ldGhvZCgpKTsK
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYoc3ByZWFkTWV0aG9kKCkgPT0gU1ZH
X1NQUkVBRE1FVEhPRF9SRUZMRUNUKQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzcHJlYWRN
ZXRob2QoKSA9PSBTVkdfU1BSRUFETUVUSE9EX1JFRkxFQ1QpCiAgICAgICAgICAgICBncmFkLT5z
ZXRHcmFkaWVudFNwcmVhZE1ldGhvZChTUFJFQURNRVRIT0RfUkVGTEVDVCk7Ci0gICAgICAgIGVs
c2UgaWYoc3ByZWFkTWV0aG9kKCkgPT0gU1ZHX1NQUkVBRE1FVEhPRF9SRVBFQVQpCisgICAgICAg
IGVsc2UgaWYgKHNwcmVhZE1ldGhvZCgpID09IFNWR19TUFJFQURNRVRIT0RfUkVQRUFUKQogICAg
ICAgICAgICAgZ3JhZC0+c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoU1BSRUFETUVUSE9EX1JFUEVB
VCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3ByZWFkTWV0
aG9kKFNQUkVBRE1FVEhPRF9QQUQpOwogCi0gICAgICAgIGlmKGJib3gpCi0gICAgICAgIHsKKyAg
ICAgICAgaWYgKGJib3gpIHsKICAgICAgICAgICAgIF9jeCAqPSAxMDAuMDsKICAgICAgICAgICAg
IF9jeSAqPSAxMDAuMDsKICAgICAgICAgICAgIF9meCAqPSAxMDAuMDsKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCShyZXZpc2lvbiAxNzAzOCkK
KysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0
LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMzYsMTAgKzM2LDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCgpOwogCiAg
ICAgICAgIC8vICdTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSopOwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIHZvaWQgYnVpbGRHcmFkaWVu
dChLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCAqZ3JhZCkgY29uc3Q7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBidWlsZEdyYWRpZW50KEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50Kikg
Y29uc3Q7CiAgICAgICAgIHZpcnR1YWwgS0NQYWludFNlcnZlclR5cGUgZ3JhZGllbnRUeXBlKCkg
Y29uc3QgeyByZXR1cm4gUFNfUkFESUFMX0dSQURJRU5UOyB9CiAKICAgICBwcm90ZWN0ZWQ6Cklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzAzOCkKKysr
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAKQEAgLTIyLDE5ICsyMiwxNSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJBdHRyLmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLQotI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50Lmg+CisjaW5jbHVkZSAiU1ZHU3RvcEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIlNWR05h
bWVzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKLSNp
bmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNWR1N0b3BFbGVtZW50LmgiCisj
aW5jbHVkZSAiU1ZHTmFtZXMuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVNWR1N0b3BFbGVtZW50OjpTVkdTdG9wRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHU3RvcEVsZW1lbnQ6OlNWR1N0
b3BFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAg
ICAgOiBTVkdTdHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIG1fb2Zmc2V0KDAuMCkK
IHsKQEAgLTQ2LDExICs0MiwxMSBAQCBTVkdTdG9wRWxlbWVudDo6flNWR1N0b3BFbGVtZW50KCkK
IAogQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHU3RvcEVsZW1lbnQsIGRvdWJsZSwg
TnVtYmVyLCBudW1iZXIsIE9mZnNldCwgb2Zmc2V0LCBTVkdOYW1lczo6b2Zmc2V0QXR0ci5sb2Nh
bE5hbWUoKSwgbV9vZmZzZXQpCiAKLXZvaWQgU1ZHU3RvcEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgU1ZHU3RvcEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpvZmZzZXRBdHRyKSB7Ci0gICAgICAgIGlmKHZhbHVlLmVuZHNXaXRoKCIlIikpCisgICAg
ICAgIGlmICh2YWx1ZS5lbmRzV2l0aCgiJSIpKQogICAgICAgICAgICAgc2V0T2Zmc2V0QmFzZVZh
bHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS5sZWZ0KHZhbHVlLmxlbmd0aCgpIC0gMSkudG9E
b3VibGUoKSAvIDEwMC4pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzZXRPZmZzZXRCYXNl
VmFsdWUodmFsdWUudG9Eb3VibGUoKSk7CkBAIC02MCwxMiArNTYsMTQgQEAgdm9pZCBTVkdTdG9w
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dAogICAgIGlmICghb3duZXJEb2N1bWVudCgpLT5w
YXJzaW5nKCkgJiYgYXR0YWNoZWQoKSkgewogICAgICAgICByZWNhbGNTdHlsZShGb3JjZSk7CiAg
ICAgICAgIAotICAgICAgICBTVkdTdHlsZWRFbGVtZW50ICpwYXJlbnRTdHlsZWQgPSBzdGF0aWNf
Y2FzdDxTVkdTdHlsZWRFbGVtZW50ICo+KHBhcmVudE5vZGUoKSk7Ci0gICAgICAgIGlmKHBhcmVu
dFN0eWxlZCkKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudCogcGFyZW50U3R5bGVkID0gc3RhdGlj
X2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHBhcmVudE5vZGUoKSk7CisgICAgICAgIGlmIChwYXJl
bnRTdHlsZWQpCiAgICAgICAgICAgICBwYXJlbnRTdHlsZWQtPm5vdGlmeUF0dHJpYnV0ZUNoYW5n
ZSgpOwogICAgIH0KIH0KIAorfQorCiAvLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NV
UFBPUlQKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3RvcEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdG9wRWxlbWVudC5oCShyZXZpc2lvbiAxNzAz
OCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0b3BFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFz
IFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUs
IDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBLREUgcHJvamVjdAogCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc0dyYWRpZW50U3RvcCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIAogICAgICAgICAvLyAnU1ZHU3RvcGxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7
CiAgICAgcHJpdmF0ZToKICAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNW
R1N0b3BFbGVtZW50LCBkb3VibGUsIGRvdWJsZSwgT2Zmc2V0LCBvZmZzZXQpCiAgICAgfTsK
</data>
<flag name="review"
          id="3763"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11089</attachid>
            <date>2006-10-14 13:57:05 -0700</date>
            <delta_ts>2006-10-31 11:19:18 -0800</delta_ts>
            <desc>First attempt</desc>
            <filename>11217-basicdatastructures.diff</filename>
            <type>text/plain</type>
            <size>44508</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzA1OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzYgQEAKKzIwMDYtMTAtMTQgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIHN2ZyBiYXNpYyBk
YXRhc3RydWN0dXJlIGNsYXNzZXMuCisKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQW5nbGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5nbGU6OnZhbHVlQXNTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5nbGU6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5nbGU6
OnNldENvbnRleHQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmdsZS5oOgorICAgICAgICAq
IGtzdmcyL3N2Zy9TVkdDb2xvci5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0NvbG9yLmg6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRWxlbWVudDo6b3duZXJTVkdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1l
bnQ6OnZpZXdwb3J0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpjaGlsZFNo
b3VsZENyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRWxlbWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6c3ZnX2R5bmFtaWNfY2FzdCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR0ZpdFRvVmlld0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaXRUb1ZpZXdCb3g6
OnBhcnNlVmlld0JveCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5oOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdMYW5nU3BhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR0xhbmdTcGFjZS5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdMZW5ndGguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoOjpTVkdMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHTGVuZ3RoOjpzZXRWYWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0
aDo6ZHBpKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aDo6dXBkYXRlVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoOjp1cGRhdGVWYWx1ZUluU3BlY2lmaWVkVW5pdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoOjpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0xlbmd0aDo6c2V0Q29udGV4dCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0xlbmd0aC5o
OgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdMZW5ndGhMaXN0LmNwcDoKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHTGVuZ3RoTGlzdC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdMb2NhdGFibGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTG9jYXRhYmxlOjpuZWFyZXN0Vmlld3BvcnRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xvY2F0YWJsZTo6ZmFydGhlc3RWaWV3cG9ydEVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTG9jYXRhYmxlOjpnZXRCQm94KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0xvY2F0YWJsZTo6Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0xvY2F0YWJsZTo6Z2V0U2NyZWVuQ1RNKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHTnVtYmVy
TGlzdC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR051bWJlckxpc3QuaDoKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OmdldENUTSk6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcv
U1ZHU3RyaW5nTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHJpbmdMaXN0OjpyZXNl
dCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1N0cmluZ0xpc3QuaDoKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHU3R5bGFibGUuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTdHlsYWJsZS5o
OgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUZXN0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdUZXN0czo6cmVxdWlyZWRGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXN0czo6
cmVxdWlyZWRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rlc3RzOjpzeXN0ZW1M
YW5ndWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXN0czo6aXNWYWxpZCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdUZXN0cy5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1hYmxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3Jt
QXR0cmlidXRlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oOgorICAg
ICAgICAqIGtzdmcyL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR1pvb21BbmRQYW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHWm9vbUFuZFBhbjo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdab29tQW5kUGFu
Lmg6CisKIDIwMDYtMTAtMTQgIERhdmlkIEhhcnJpc29uICA8aGFycmlzb25AYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmLgpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
QW5nbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuZ2xlLmNwcAko
cmV2aXNpb24gMTcwNTkpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmdsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAg
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIw
MDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yMiwxNSArMjIsMTEgQEAKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5jbHVkZSA8bWF0aC5oPgotCi0j
aW5jbHVkZSA8a3N2ZzIva3N2Zy5oPgotCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgog
I2luY2x1ZGUgIlNWR0FuZ2xlLmgiCi0jaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAKLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjb25zdCBkb3VibGUgZGVnMnJhZCA9IDAuMDE3NDUzMjkyNTE5OTQzMjk1NzY5OyAvLyBw
aS8xODAKIGNvbnN0IGRvdWJsZSBkZWcyZ3JhZCA9IDQwMC4wIC8gMzYwLjA7CkBAIC0xMTEsNyAr
MTA3LDcgQEAgU3RyaW5nIFNWR0FuZ2xlOjp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKIHsKICAgICBt
X3ZhbHVlQXNTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyk7
CiAKLSAgICBzd2l0Y2gobV91bml0VHlwZSkgeworICAgIHN3aXRjaCAobV91bml0VHlwZSkgewog
ICAgICAgICBjYXNlIFNWR19BTkdMRVRZUEVfVU5TUEVDSUZJRUQ6CiAgICAgICAgIGNhc2UgU1ZH
X0FOR0xFVFlQRV9ERUc6CiAgICAgICAgICAgICBtX3ZhbHVlQXNTdHJpbmcgKz0gImRlZyI7CkBA
IC0xNzgsMTYgKzE3NCwxNyBAQCBkb3VibGUgU1ZHQW5nbGU6OnNob3J0ZXN0QXJjQmlzZWN0b3Io
ZG91CiAgICAgcmV0dXJuIGJpc2VjdG9yOwogfQogCi1jb25zdCBTVkdTdHlsZWRFbGVtZW50ICpT
VkdBbmdsZTo6Y29udGV4dCgpIGNvbnN0Citjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBTVkdBbmds
ZTo6Y29udGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY29udGV4dDsKIH0KIAotdm9pZCBT
VkdBbmdsZTo6c2V0Q29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQordm9p
ZCBTVkdBbmdsZTo6c2V0Q29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBjb250ZXh0KQog
ewogICAgIG1fY29udGV4dCA9IGNvbnRleHQ7CiB9CiAKK30KIAogLy8gdmltOnRzPTQ6bm9ldAog
I2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmdsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuZ2xlLmgJKHJldmlzaW9uIDE3
MDU5KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5nbGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAKQEAgLTcyLDcgKzcyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBmbG9hdCBtX3ZhbHVlOwogICAgICAgICBmbG9hdCBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0
czsKICAgICAgICAgbXV0YWJsZSBTdHJpbmcgbV92YWx1ZUFzU3RyaW5nOwotICAgICAgICBjb25z
dCBTVkdTdHlsZWRFbGVtZW50ICptX2NvbnRleHQ7CisgICAgICAgIGNvbnN0IFNWR1N0eWxlZEVs
ZW1lbnQqIG1fY29udGV4dDsKIAogICAgICAgICB2b2lkIGNhbGN1bGF0ZSgpOwogICAgIH07Cklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHQ29sb3IuY3BwCShyZXZpc2lvbiAxNzA1OSkKKysrIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBr
ZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAg
LTI0LDcgKzI0LDcgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0NvbG9yLmgi
CiAKLSNpbmNsdWRlICJrc3ZnLmgiCisjaW5jbHVkZSAiU1ZHRXhjZXB0aW9uLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ29sb3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDb2xvci5oCShyZXZpc2lvbiAxNzA1OSkK
KysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1h
bm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdAogCkBAIC0yOSw5ICsyOSw5IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIFJHQkNvbG9yOworICAgCiAgICAgdHlw
ZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLSAgICAKKyAKICAgICBjbGFzcyBTVkdDb2xvciA6IHB1
YmxpYyBDU1NWYWx1ZSB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdDb2xvcigpOwpJbmRleDog
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDU5KQorKysgV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hA
a2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBA
IC0yNCw5ICsyNCw4IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdFbGVtZW50
LmgiCiAKLSNpbmNsdWRlICJBdHRyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJET01JbXBsZW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RXZlbnQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgpAQCAtMzYsNyArMzUsNiBAQAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAi
U1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCi0jaW5jbHVkZSAia3N2Zy5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgyLDggKzgwLDggQEAgdm9pZCBTVkdFbGVt
ZW50OjpzZXRYbWxiYXNlKGNvbnN0IFN0cmluZwogCiBTVkdTVkdFbGVtZW50KiBTVkdFbGVtZW50
Ojpvd25lclNWR0VsZW1lbnQoKSBjb25zdAogewotICAgIE5vZGUgKm4gPSBwYXJlbnROb2RlKCk7
Ci0gICAgd2hpbGUobikgeworICAgIE5vZGUqIG4gPSBwYXJlbnROb2RlKCk7CisgICAgd2hpbGUg
KG4pIHsKICAgICAgICAgaWYgKG4tPm5vZGVUeXBlKCkgPT0gRUxFTUVOVF9OT0RFICYmIG4tPmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8U1ZHU1ZHRWxlbWVudCo+KG4pOwogCkBAIC05NSw3ICs5Myw3IEBAIFNWR1NWR0VsZW1lbnQq
IFNWR0VsZW1lbnQ6Om93bmVyU1ZHRWxlbWUKIAogU1ZHRWxlbWVudCogU1ZHRWxlbWVudDo6dmll
d3BvcnRFbGVtZW50KCkgY29uc3QKIHsKLSAgICBOb2RlICpuID0gcGFyZW50Tm9kZSgpOworICAg
IE5vZGUqIG4gPSBwYXJlbnROb2RlKCk7CiAgICAgd2hpbGUgKG4pIHsKICAgICAgICAgaWYgKG4t
PmlzRWxlbWVudE5vZGUoKSAmJgogICAgICAgICAgICAgKG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6
OnN2Z1RhZykgfHwgbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6aW1hZ2VUYWcpIHx8IG4tPmhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OnN5bWJvbFRhZykpKQpAQCAtMTI5LDcgKzEyNyw3IEBAIHZvaWQgU1ZH
RWxlbWVudDo6YWRkU1ZHRXZlbnRMaXN0ZW5lcihjb24KICAgICAgICAgY3JlYXRlU1ZHRXZlbnRM
aXN0ZW5lcihhdHRyLT5sb2NhbE5hbWUoKS5kb21TdHJpbmcoKSwgYXR0ci0+dmFsdWUoKSwgdGhp
cykpOwogfQogCi12b2lkIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cikKK3ZvaWQgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIC8vIHN0YW5kYXJkIGV2ZW50cwogICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gb25sb2FkQXR0cikKQEAgLTE4OSw3ICsxODcsNyBAQCB2b2lkIFNWR0Vs
ZW1lbnQ6OmNsb3NlUmVuZGVyZXIoKQogICAgIHNlbmRTVkdMb2FkRXZlbnRJZlBvc3NpYmxlKCk7
CiB9CiAKLWJvb2wgU1ZHRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlICpj
aGlsZCkgY29uc3QKK2Jvb2wgU1ZHRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihO
b2RlKiBjaGlsZCkgY29uc3QKIHsKICAgICBpZiAoY2hpbGQtPmlzU1ZHRWxlbWVudCgpKQogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkKS0+aXNWYWxpZCgpOwpJ
bmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0VsZW1lbnQuaAkocmV2aXNpb24gMTcwNTkpCisrKyBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hA
a2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBA
IC0yNywxMCArMjcsOSBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgotCi0jaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKICNpbmNsdWRlICJTVkdBbmltYXRlZFRlbXBsYXRlLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1l
bnRFeHRlbnNpb25zLmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIAogI2RlZmluZSBBTklNQVRF
RF9QUk9QRVJUWV9FTVBUWV9ERUNMQVJBVElPTlMoQmFyZVR5cGUsIE51bGxUeXBlLCBVcHBlclBy
b3BlcnR5LCBMb3dlclByb3BlcnR5KSBcCiBwdWJsaWM6IFwKQEAgLTIwNSw3ICsyMDQsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBzdGF0aWMgaW5saW5lIFNWR0VsZW1lbnQqIHN2Z19k
eW5hbWljX2Nhc3QoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIFNWR0VsZW1lbnQqIHN2Z0Vs
ZW1lbnQgPSBOVUxMOworICAgICAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gMDsKICAgICAg
ICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNTVkdFbGVtZW50KCkpCiAgICAgICAgICAgICBzdmdFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpOwogICAgICAgICByZXR1cm4gc3Zn
RWxlbWVudDsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNp
b24gMTcwNTkpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAg
ICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAy
MDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjIsMTEgKzIyLDkgQEAKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQT1JUCisjaW5jbHVkZSAiU1ZHRml0VG9WaWV3
Qm94LmgiCiAKLSNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5j
bHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgotI2luY2x1ZGUgIlNWR0ZpdFRvVmlld0Jv
eC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RS
YXRpby5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKQEAgLTUyLDkgKzUwLDkgQEAgdm9p
ZCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjb25zdAogewogICAgIGRvdWJsZSB4ID0g
MCwgeSA9IDAsIHcgPSAwLCBoID0gMDsKICAgICBEZXByZWNhdGVkU3RyaW5nIHZpZXdib3ggPSBz
dHIuZGVwcmVjYXRlZFN0cmluZygpOwotICAgIGNvbnN0IGNoYXIgKnAgPSB2aWV3Ym94LmxhdGlu
MSgpOwotICAgIGNvbnN0IGNoYXIgKmVuZCA9IHAgKyB2aWV3Ym94Lmxlbmd0aCgpOwotICAgIGNv
bnN0IGNoYXIgKmMgPSBwOworICAgIGNvbnN0IGNoYXIqIHAgPSB2aWV3Ym94LmxhdGluMSgpOwor
ICAgIGNvbnN0IGNoYXIqIGVuZCA9IHAgKyB2aWV3Ym94Lmxlbmd0aCgpOworICAgIGNvbnN0IGNo
YXIqIGMgPSBwOwogICAgIHAgPSBwYXJzZUNvb3JkKGMsIHgpOwogICAgIGlmIChwID09IGMpCiAg
ICAgICAgIGdvdG8gYmFpbF9vdXQ7CkBAIC02Niw3ICs2NCw3IEBAIHZvaWQgU1ZHRml0VG9WaWV3
Qm94OjpwYXJzZVZpZXdCb3goY29uc3QKIAogICAgIGMgPSBwOwogICAgIHAgPSBwYXJzZUNvb3Jk
KGMsIHcpOwotICAgIGlmKHcgPCAwLjAgfHwgcCA9PSBjKSAvLyBjaGVjayB0aGF0IHdpZHRoIGlz
IHBvc2l0aXZlCisgICAgaWYgKHcgPCAwLjAgfHwgcCA9PSBjKSAvLyBjaGVjayB0aGF0IHdpZHRo
IGlzIHBvc2l0aXZlCiAgICAgICAgIGdvdG8gYmFpbF9vdXQ7CiAKICAgICBjID0gcDsKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCShyZXZpc2lvbiAxNzA1OSkKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5u
IDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHBy
b2plY3QKIApAQCAtMjgsOSArMjgsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xh
c3MgQXR0cmlidXRlOwotICAgIGNsYXNzIFN0cmluZ0ltcGw7Ci0gICAgY2xhc3MgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpbzsKICAgICBjbGFzcyBTVkdNYXRyaXg7CisgICAgY2xhc3MgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpbzsKKyAgICBjbGFzcyBTdHJpbmdJbXBsOwogCiAgICAgY2xhc3MgU1ZHRml0
VG9WaWV3Qm94IHsKICAgICBwdWJsaWM6CkBAIC0zOSw5ICszOSw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICAvLyAnU1ZHRml0VG9WaWV3Qm94JyBmdW5jdGlvbnMKICAgICAgICAg
dm9pZCBwYXJzZVZpZXdCb3goY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIFNWR01hdHJpeCAqdmll
d0JveFRvVmlld1RyYW5zZm9ybShmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpIGNv
bnN0OworICAgICAgICBTVkdNYXRyaXgqIHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmll
d1dpZHRoLCBmbG9hdCB2aWV3SGVpZ2h0KSBjb25zdDsKIAotICAgICAgICBib29sIHBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CisgICAgICAgIGJvb2wgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCA9IDA7
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMYW5nU3BhY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xhbmdTcGFjZS5jcHAJKHJldmlzaW9uIDE3MDU5KQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGFuZ1NwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVy
bWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0CiAKQEAgLTI0LDEzICsyNCwxMCBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5j
bHVkZSAiU1ZHTGFuZ1NwYWNlLmgiCiAKLSNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiU1ZH
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU3RyaW5nSW1wbC5o
IgotI2luY2x1ZGUgImtzdmcuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFNWR0xhbmdTcGFjZTo6U1ZHTGFuZ1NwYWNlKCkKIHsKQEAgLTYwLDE1
ICs1NywxMiBAQCB2b2lkIFNWR0xhbmdTcGFjZTo6c2V0WG1sc3BhY2UoY29uc3QgQXRvCiAgICAg
bV9zcGFjZSA9IHhtbFNwYWNlOwogfQogCi1ib29sIFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQorYm9vbCBTVkdMYW5nU3BhY2U6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpsYW5nQXR0cikKLSAgICB7CisgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6bGFuZ0F0dHIpIHsKICAgICAgICAgc2V0WG1sbGFuZyhhdHRyLT52YWx1
ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6c3BhY2VBdHRyKQotICAgIHsKKyAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6c3BhY2VBdHRyKSB7CiAgICAgICAgIHNldFhtbHNwYWNlKGF0
dHItPnZhbHVlKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03Niw2ICs3MCw4
IEBAIGJvb2wgU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSgKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKK30KKwogLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIFNWR19TVVBQT1JU
CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xhbmdTcGFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xhbmdTcGFjZS5oCShyZXZpc2lvbiAxNzA1OSkKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR0xhbmdTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5u
IDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHBy
b2plY3QKIApAQCAtMjksOCArMjksNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xh
c3MgTWFwcGVkQXR0cmlidXRlOwotICAgIGNsYXNzIFN0cmluZ0ltcGw7Ci0gICAgY2xhc3MgU1ZH
TGVuZ3RoOwogCiAgICAgY2xhc3MgU1ZHTGFuZ1NwYWNlIHsKICAgICBwdWJsaWM6CkBAIC00NCw3
ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB4bWxzcGFjZSgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFhtbHNwYWNlKGNvbnN0IEF0b21p
Y1N0cmluZyYgeG1sU3BhY2UpOwogCi0gICAgICAgIGJvb2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAgICAgICAgYm9vbCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUqKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIEF0b21pY1N0cmlu
ZyBtX2xhbmc7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMZW5ndGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xlbmd0aC5jcHAJKHJldmlzaW9uIDE3MDU5KQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVy
bWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0CiAKQEAgLTI5LDkgKzI5LDcgQEAKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgotI2luY2x1
ZGUgImtzdmcuaCIKICNpbmNsdWRlICJzdmdwYXRocGFyc2VyLmgiCi0KICNpbmNsdWRlIDxtYXRo
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC00OSw3ICs0Nyw3IEBAIHN0YXRpYyBjb25z
dCBjaGFyKiBVbml0VGV4dFtdID0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdMZW5ndGg6
OlNWR0xlbmd0aChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0LCBMZW5ndGhNb2RlIG1v
ZGUsIGNvbnN0IFNWR0VsZW1lbnQgKnZpZXdwb3J0KQorU1ZHTGVuZ3RoOjpTVkdMZW5ndGgoY29u
c3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCwgTGVuZ3RoTW9kZSBtb2RlLCBjb25zdCBTVkdF
bGVtZW50KiB2aWV3cG9ydCkKICAgICA6IFNoYXJlZDxTVkdMZW5ndGg+KCkKICAgICAsIG1fdmFs
dWUoMCkKICAgICAsIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzKDApCkBAIC0xMDYsMTQgKzEwNCwx
NCBAQCBmbG9hdCBTVkdMZW5ndGg6OnZhbHVlSW5TcGVjaWZpZWRVbml0cygpCiAKIHZvaWQgU1ZH
TGVuZ3RoOjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKIHsKLSAgICBpZihzLmlz
RW1wdHkoKSkKKyAgICBpZiAocy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIERl
cHJlY2F0ZWRTdHJpbmcgdmFsdWVBc1FTdHJpbmcgPSBzLmRlcHJlY2F0ZWRTdHJpbmcoKTsKIAog
ICAgIGRvdWJsZSBjb252ZXJ0ZWROdW1iZXIgPSAwOwotICAgIGNvbnN0IGNoYXIgKnN0YXJ0ID0g
dmFsdWVBc1FTdHJpbmcubGF0aW4xKCk7Ci0gICAgY29uc3QgY2hhciAqZW5kID0gcGFyc2VDb29y
ZChzdGFydCwgY29udmVydGVkTnVtYmVyKTsKKyAgICBjb25zdCBjaGFyKiBzdGFydCA9IHZhbHVl
QXNRU3RyaW5nLmxhdGluMSgpOworICAgIGNvbnN0IGNoYXIqIGVuZCA9IHBhcnNlQ29vcmQoc3Rh
cnQsIGNvbnZlcnRlZE51bWJlcik7CiAgICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSBjb252
ZXJ0ZWROdW1iZXI7CiAKICAgICB1bnNpZ25lZCBpbnQgZGlmZiA9IGVuZCAtIHN0YXJ0OwpAQCAt
MTY4LDEzICsxNjYsMTIgQEAgdm9pZCBTVkdMZW5ndGg6OmNvbnZlcnRUb1NwZWNpZmllZFVuaXRz
KAogZG91YmxlIFNWR0xlbmd0aDo6ZHBpKCkgY29uc3QKIHsKICAgICAvKiBGSVhNRTogRFBJIGRl
dGVjdGlvbgotICAgIGlmKGNvbnRleHQgJiYgY29udGV4dC0+b3duZXJEb2MoKSkKLSAgICB7Ci0g
ICAgICAgIGlmKG1vZGUgPT0gTE1fV0lEVEgpCisgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC0+
b3duZXJEb2MoKSkgeworICAgICAgICBpZiAobW9kZSA9PSBMTV9XSURUSCkKICAgICAgICAgICAg
IHJldHVybiAyNS40ICogY29udGV4dC0+b3duZXJEb2MoKS0+c2NyZWVuUGl4ZWxzUGVyTWlsbGlt
ZXRlclgoKTsKLSAgICAgICAgZWxzZSBpZihtb2RlID09IExNX0hFSUdIVCkKKyAgICAgICAgZWxz
ZSBpZiAobW9kZSA9PSBMTV9IRUlHSFQpCiAgICAgICAgICAgICByZXR1cm4gMjUuNCAqIGNvbnRl
eHQtPm93bmVyRG9jKCktPnNjcmVlblBpeGVsc1Blck1pbGxpbWV0ZXJZKCk7Ci0gICAgICAgIGVs
c2UgaWYobW9kZSA9PSBMTV9PVEhFUikKKyAgICAgICAgZWxzZSBpZiAobW9kZSA9PSBMTV9PVEhF
UikKICAgICAgICAgICAgIHJldHVybiAyNS40ICogY29udGV4dC0+b3duZXJEb2MoKS0+c2NyZWVu
UGl4ZWxzUGVyTWlsbGltZXRlclgoKTsKICAgICB9CiAgICAgKi8KQEAgLTE4NCw4ICsxODEsNyBA
QCBkb3VibGUgU1ZHTGVuZ3RoOjpkcGkoKSBjb25zdAogCiB2b2lkIFNWR0xlbmd0aDo6dXBkYXRl
VmFsdWUoYm9vbCBub3RpZnkpCiB7Ci0gICAgc3dpdGNoKG1fdW5pdFR5cGUpCi0gICAgeworICAg
IHN3aXRjaCAobV91bml0VHlwZSkgewogICAgICAgICBjYXNlIFNWR19MRU5HVEhUWVBFX1BYOgog
ICAgICAgICAgICAgbV92YWx1ZSA9IG1fdmFsdWVJblNwZWNpZmllZFVuaXRzOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC0yMDcsNyArMjAzLDcgQEAgdm9pZCBTVkdMZW5ndGg6OnVwZGF0ZVZhbHVl
KGJvb2wgbm90aWZ5KQogICAgICAgICBjYXNlIFNWR19MRU5HVEhUWVBFX0VNUzoKICAgICAgICAg
Y2FzZSBTVkdfTEVOR1RIVFlQRV9FWFM6CiAgICAgICAgIHsKLSAgICAgICAgICAgIFJlbmRlclN0
eWxlICpzdHlsZSA9IDA7CisgICAgICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAwOwogICAg
ICAgICAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPnJlbmRlcmVyKCkpCiAgICAgICAg
ICAgICAgICAgc3R5bGUgPSBtX2NvbnRleHQtPnJlbmRlcmVyKCktPnN0eWxlKCk7CiAgICAgICAg
ICAgICBlbHNlIGlmIChtX3ZpZXdwb3J0RWxlbWVudCAmJiBtX3ZpZXdwb3J0RWxlbWVudC0+cmVu
ZGVyZXIoKSkKQEAgLTI0MCwxMSArMjM2LDEwIEBAIHZvaWQgU1ZHTGVuZ3RoOjp1cGRhdGVWYWx1
ZShib29sIG5vdGlmeSkKIAogYm9vbCBTVkdMZW5ndGg6OnVwZGF0ZVZhbHVlSW5TcGVjaWZpZWRV
bml0cyhib29sIG5vdGlmeSkKIHsKLSAgICBpZihtX3VuaXRUeXBlID09IFNWR19MRU5HVEhUWVBF
X1VOS05PV04pCisgICAgaWYgKG1fdW5pdFR5cGUgPT0gU1ZHX0xFTkdUSFRZUEVfVU5LTk9XTikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3dpdGNoKG1fdW5pdFR5cGUpCi0gICAgewor
ICAgIHN3aXRjaCAobV91bml0VHlwZSkgewogICAgICAgICBjYXNlIFNWR19MRU5HVEhUWVBFX1BF
UkNFTlRBR0U6CiAgICAgICAgICAgICAvL2tkRXJyb3IoKSA8PCAidXBkYXRlVmFsdWVJblNwZWNp
ZmllZFVuaXRzKCkgU1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSAtIFVOU1VQUE9SVEVEISBQbGVh
c2UgcmVwb3J0ISIgPDwgZW5kbDsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5Mywx
MiArMjg4LDEyIEBAIHZvaWQgU1ZHTGVuZ3RoOjpzZXRCYm94UmVsYXRpdmUoYm9vbCByZWwKICAg
ICBtX2Jib3hSZWxhdGl2ZSA9IHJlbGF0aXZlOwogfQogCi1jb25zdCBTVkdTdHlsZWRFbGVtZW50
ICpTVkdMZW5ndGg6OmNvbnRleHQoKSBjb25zdAorY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogU1ZH
TGVuZ3RoOjpjb250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZXh0OwogfQogCi12
b2lkIFNWR0xlbmd0aDo6c2V0Q29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0
KQordm9pZCBTVkdMZW5ndGg6OnNldENvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29u
dGV4dCkKIHsKICAgICBtX2NvbnRleHQgPSBjb250ZXh0OwogfQpJbmRleDogV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHTGVuZ3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGVu
Z3RoLmgJKHJldmlzaW9uIDE3MDU5KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGVuZ3RoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAg
ICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAg
ICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNSw3ICsyNSw3IEBACiAjaWZk
ZWYgU1ZHX1NVUFBPUlQKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8
a3N2ZzIvc3ZnL1NWR0hlbHBlci5oPgorI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTcyLDcgKzcyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2b2lkIHNldEJib3hSZWxhdGl2ZShib29sKTsKIAogICAgICAgICBjb25zdCBTVkdTdHls
ZWRFbGVtZW50KiBjb250ZXh0KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0Q29udGV4dChjb25z
dCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KTsKKyAgICAgICAgdm9pZCBzZXRDb250ZXh0KGNv
bnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
Ym9vbCB1cGRhdGVWYWx1ZUluU3BlY2lmaWVkVW5pdHMoYm9vbCBub3RpZnkgPSB0cnVlKTsKQEAg
LTg4LDggKzg4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTVkdMZW5ndGhUeXBl
IG1fdW5pdFR5cGUgOiA0OwogICAgICAgICBib29sIG1fcmVxdWlyZXNMYXlvdXQgOiAxOwogCi0g
ICAgICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKm1fY29udGV4dDsKLSAgICAgICAgY29uc3Qg
U1ZHRWxlbWVudCAqbV92aWV3cG9ydEVsZW1lbnQ7CisgICAgICAgIGNvbnN0IFNWR1N0eWxlZEVs
ZW1lbnQqIG1fY29udGV4dDsKKyAgICAgICAgY29uc3QgU1ZHRWxlbWVudCogbV92aWV3cG9ydEVs
ZW1lbnQ7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHTGVuZ3RoTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHTGVuZ3RoTGlzdC5jcHAJKHJldmlzaW9uIDE3MDU5KQorKysgV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHTGVuZ3RoTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hA
a2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBA
IC0yMyw5ICsyMyw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZmRlZiBTVkdfU1VQUE9S
VAorI2luY2x1ZGUgIlNWR0xlbmd0aExpc3QuaCIKICNpbmNsdWRlICJTVkdNYXRyaXguaCIKICNp
bmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xlbmd0aExp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMZW5ndGhMaXN0LmgJKHJl
dmlzaW9uIDE3MDU5KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGVuZ3RoTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAg
ICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAy
MDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjUsOCArMjUsOCBAQAogCiAjaWZkZWYg
U1ZHX1NVUFBPUlQKIAotI2luY2x1ZGUgIlNWR0xpc3QuaCIKICNpbmNsdWRlICJTVkdMZW5ndGgu
aCIKKyNpbmNsdWRlICJTVkdMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7CkluZGV4OiBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdMb2NhdGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0xvY2F0YWJsZS5jcHAJKHJldmlzaW9uIDE3MDU5KQorKysgV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHTG9jYXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2ls
ZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0
CiAKQEAgLTI0LDEyICsyNCwxMSBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZH
TG9jYXRhYmxlLmgiCiAKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVy
UGF0aC5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQu
aCIKLSNpbmNsdWRlIDxrY2FudmFzL1JlbmRlclBhdGguaD4KIAotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0xvY2F0YWJsZTo6U1ZHTG9jYXRhYmxl
KCkKIHsKQEAgLTM5LDEzICszOCwxMyBAQCBTVkdMb2NhdGFibGU6On5TVkdMb2NhdGFibGUoKQog
ewogfQogCi1TVkdFbGVtZW50ICpTVkdMb2NhdGFibGU6Om5lYXJlc3RWaWV3cG9ydEVsZW1lbnQo
Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqZSkKK1NWR0VsZW1lbnQqIFNWR0xvY2F0YWJsZTo6bmVh
cmVzdFZpZXdwb3J0RWxlbWVudChjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBlKQogewotICAgIE5v
ZGUgKm4gPSBlLT5wYXJlbnROb2RlKCk7CisgICAgTm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsK
ICAgICB3aGlsZSAobiAmJiAhbi0+aXNEb2N1bWVudE5vZGUoKSkgewogICAgICAgICBpZiAobi0+
aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSB8fCBuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpz
eW1ib2xUYWcpIHx8CiAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjppbWFnZVRh
ZykgfHwgbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6Zm9yZWlnbk9iamVjdFRhZykpCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCAqPihuKTsKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obik7CiAKICAgICAgICAgbiA9IG4tPnBhcmVu
dE5vZGUoKTsKICAgICB9CkBAIC01MywxOCArNTIsMTggQEAgU1ZHRWxlbWVudCAqU1ZHTG9jYXRh
YmxlOjpuZWFyZXN0Vmlld3BvcgogICAgIHJldHVybiAwOwogfQogCi1TVkdFbGVtZW50ICpTVkdM
b2NhdGFibGU6OmZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQg
KmUpCitTVkdFbGVtZW50KiBTVkdMb2NhdGFibGU6OmZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KGNv
bnN0IFNWR1N0eWxlZEVsZW1lbnQqIGUpCiB7CiAgICAgLy8gRklYTUUgOiBsaWtlbHkgdGhpcyB3
aWxsIGJlIGFsd2F5cyB0aGUgPHN2Zz4gZmFydGhlc3QgYXdheS4KICAgICAvLyBJZiB3ZSBoYXZl
IGEgZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIG9mIGRvY3VtZW50RWxlbWVudCgpLCBvbmUKICAg
ICAvLyB0aGF0IGdpdmUgdGhlIGRvY3VtZW50RWxlbWVudCgpIG9mIHRoZSBzdmcgZnJhZ21lbnQs
IGl0IGNvdWxkIGJlCiAgICAgLy8gdXNlZCBpbnN0ZWFkLiBUaGlzIGRlcGVuZHMgb24gY2RmIGRl
bWFuZHMgdGhvdWdoKFJvYi4pCi0gICAgU1ZHRWxlbWVudCAqZmFydGhlc3QgPSAwOwotICAgIE5v
ZGUgKm4gPSBlLT5wYXJlbnROb2RlKCk7CisgICAgU1ZHRWxlbWVudCogZmFydGhlc3QgPSAwOwor
ICAgIE5vZGUqIG4gPSBlLT5wYXJlbnROb2RlKCk7CiAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRG9j
dW1lbnROb2RlKCkpIHsKICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1Rh
ZykgfHwgbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ltYm9sVGFnKSB8fAogICAgICAgICAgICAg
bi0+aGFzVGFnTmFtZShTVkdOYW1lczo6aW1hZ2VUYWcpIHx8IG4tPmhhc1RhZ05hbWUoU1ZHTmFt
ZXM6OmZvcmVpZ25PYmplY3RUYWcpKQotICAgICAgICAgICAgZmFydGhlc3QgPSBzdGF0aWNfY2Fz
dDxTVkdFbGVtZW50ICo+KG4pOworICAgICAgICAgICAgZmFydGhlc3QgPSBzdGF0aWNfY2FzdDxT
VkdFbGVtZW50Kj4obik7CiAKICAgICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKICAgICB9CkBA
IC03NCw3ICs3Myw3IEBAIFNWR0VsZW1lbnQgKlNWR0xvY2F0YWJsZTo6ZmFydGhlc3RWaWV3cG8K
IAogLy8gU3BlYzoKIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDUvV0QtU1ZHTW9iaWxlMTIt
MjAwNTA0MTMvc3ZndWRvbS5odG1sI3N2Zzo6U1ZHTG9jYXRhYmxlCi1GbG9hdFJlY3QgU1ZHTG9j
YXRhYmxlOjpnZXRCQm94KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmUpCitGbG9hdFJlY3QgU1ZH
TG9jYXRhYmxlOjpnZXRCQm94KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGUpCiB7CiAgICAgRmxv
YXRSZWN0IGJib3hSZWN0OwogICAgIApAQCAtODYsMTkgKzg1LDE4IEBAIEZsb2F0UmVjdCBTVkdM
b2NhdGFibGU6OmdldEJCb3goY29uc3QgU1YKICAgICByZXR1cm4gYmJveFJlY3Q7CiB9CiAKLVNW
R01hdHJpeCAqU1ZHTG9jYXRhYmxlOjpnZXRDVE0oY29uc3QgU1ZHRWxlbWVudCAqZWxlbWVudCkK
K1NWR01hdHJpeCogU1ZHTG9jYXRhYmxlOjpnZXRDVE0oY29uc3QgU1ZHRWxlbWVudCogZWxlbWVu
dCkKIHsKLSAgICBpZighZWxlbWVudCkKKyAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgU1ZHTWF0cml4ICpjdG0gPSBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdNYXRy
aXgoKTsKKyAgICBTVkdNYXRyaXgqIGN0bSA9IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR01hdHJp
eCgpOwogCi0gICAgTm9kZSAqcGFyZW50ID0gZWxlbWVudC0+cGFyZW50Tm9kZSgpOworICAgIE5v
ZGUqIHBhcmVudCA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKICAgICBpZiAocGFyZW50ICYmIHBh
cmVudC0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgIFNWR0VsZW1lbnQgKnBhcmVudEVsZW1l
bnQgPSBzdmdfZHluYW1pY19jYXN0KHBhcmVudCk7Ci0gICAgICAgIGlmKHBhcmVudEVsZW1lbnQg
JiYgcGFyZW50RWxlbWVudC0+aXNTdHlsZWRMb2NhdGFibGUoKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgUmVmUHRyPFNWR01hdHJpeD4gcGFyZW50Q1RNID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVk
TG9jYXRhYmxlRWxlbWVudCAqPihwYXJlbnRFbGVtZW50KS0+Z2V0Q1RNKCk7CisgICAgICAgIFNW
R0VsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBzdmdfZHluYW1pY19jYXN0KHBhcmVudCk7CisgICAg
ICAgIGlmIChwYXJlbnRFbGVtZW50ICYmIHBhcmVudEVsZW1lbnQtPmlzU3R5bGVkTG9jYXRhYmxl
KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxTVkdNYXRyaXg+IHBhcmVudENUTSA9IHN0YXRpY19j
YXN0PFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQqPihwYXJlbnRFbGVtZW50KS0+Z2V0Q1RNKCk7
CiAgICAgICAgICAgICBjdG0tPm11bHRpcGx5KHBhcmVudENUTS5nZXQoKSk7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xMDYsMjAgKzEwNCwxOCBAQCBTVkdNYXRyaXggKlNWR0xvY2F0YWJsZTo6Z2V0
Q1RNKGNvbnN0IFNWCiAgICAgcmV0dXJuIGN0bTsKIH0KIAotU1ZHTWF0cml4ICpTVkdMb2NhdGFi
bGU6OmdldFNjcmVlbkNUTShjb25zdCBTVkdFbGVtZW50ICplbGVtZW50KQorU1ZHTWF0cml4KiBT
VkdMb2NhdGFibGU6OmdldFNjcmVlbkNUTShjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50KQogewot
ICAgIGlmKCFlbGVtZW50KQorICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBTVkdNYXRyaXggKmN0bSA9IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR01hdHJpeCgpOwor
ICAgIFNWR01hdHJpeCogY3RtID0gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTWF0cml4KCk7CiAK
LSAgICBOb2RlICpwYXJlbnQgPSBlbGVtZW50LT5wYXJlbnROb2RlKCk7Ci0gICAgaWYocGFyZW50
ICYmIHBhcmVudC0+aXNFbGVtZW50Tm9kZSgpKQotICAgIHsKLSAgICAgICAgU1ZHRWxlbWVudCAq
cGFyZW50RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQgKj4ocGFyZW50KTsKLSAgICAg
ICAgaWYocGFyZW50RWxlbWVudC0+aXNTdHlsZWRMb2NhdGFibGUoKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgUmVmUHRyPFNWR01hdHJpeD4gcGFyZW50Q1RNID0gc3RhdGljX2Nhc3Q8U1ZHU3R5
bGVkTG9jYXRhYmxlRWxlbWVudCAqPihwYXJlbnRFbGVtZW50KS0+Z2V0U2NyZWVuQ1RNKCk7Cisg
ICAgTm9kZSogcGFyZW50ID0gZWxlbWVudC0+cGFyZW50Tm9kZSgpOworICAgIGlmIChwYXJlbnQg
JiYgcGFyZW50LT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgU1ZHRWxlbWVudCogcGFyZW50
RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwYXJlbnQpOworICAgICAgICBpZiAo
cGFyZW50RWxlbWVudC0+aXNTdHlsZWRMb2NhdGFibGUoKSkgeworICAgICAgICAgICAgUmVmUHRy
PFNWR01hdHJpeD4gcGFyZW50Q1RNID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkTG9jYXRhYmxlRWxl
bWVudCo+KHBhcmVudEVsZW1lbnQpLT5nZXRTY3JlZW5DVE0oKTsKICAgICAgICAgICAgIGN0bS0+
bXVsdGlwbHkocGFyZW50Q1RNLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEyNyw2ICsx
MjMsOCBAQCBTVkdNYXRyaXggKlNWR0xvY2F0YWJsZTo6Z2V0U2NyZWVuQ1RNKGNvCiAgICAgcmV0
dXJuIGN0bTsKIH0KIAorfQorCiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIAogLy8gdmltOnRzPTQ6
bm9ldApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTnVtYmVyTGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTnVtYmVyTGlzdC5jcHAJKHJldmlzaW9uIDE3MDU5
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTnVtYmVyTGlzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFz
IFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUs
IDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBLREUgcHJvamVjdAogCkBAIC0yMywxMSArMjMsMTIgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKIAogI2lmZGVmIFNWR19TVVBQT1JUCisjaW5jbHVkZSAiU1ZHTnVtYmVyTGlzdC5oIgorCiAj
aW5jbHVkZSAiU1ZHTWF0cml4LmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgotI2luY2x1
ZGUgIlNWR051bWJlckxpc3QuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFNWR051bWJlckxpc3Q6OlNWR051bWJlckxpc3QoKQogICAgIDogU1ZH
TGlzdDxkb3VibGU+KCkKQEAgLTQ3LDYgKzQ4LDggQEAgdm9pZCBTVkdOdW1iZXJMaXN0OjpwYXJz
ZShjb25zdCBTdHJpbmcmIAogICAgICAgICBhcHBlbmRJdGVtKG51bWJlcnNbaV0udG9Eb3VibGUo
KSwgZWMpOwogfQogCit9CisKIC8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9S
VAogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdOdW1iZXJMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTnVtYmVyTGlzdC5oCShyZXZpc2lvbiAxNzA1OSkKKysr
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR051bWJlckxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVy
bWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0CiAKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAg
ICBjbGFzcyBEZXByZWNhdGVkU3RyaW5nOworICAgIGNsYXNzIFN0cmluZzsKIAogICAgIGNsYXNz
IFNWR051bWJlckxpc3QgOiBwdWJsaWMgU1ZHTGlzdDxkb3VibGU+CiAgICAgewpJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAJKHJldmlzaW9uIDE3
MDU5KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAg
ICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAg
IDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yMiwxNCArMjIsMTQgQEAKIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5jbHVkZSAia3N2Zy5oIgor
I2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKKwogI2luY2x1ZGUgIlNWR01hdHJp
eC5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHUHJlc2VydmVBc3BlY3RS
YXRpbzo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpbyhjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250
ZXh0KQorU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpbyhjb25z
dCBTVkdTdHlsZWRFbGVtZW50KiBjb250ZXh0KQogICAgIDogU2hhcmVkPFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW8+KCkKICAgICAsIG1fYWxpZ24oU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlN
SUQpCiAgICAgLCBtX21lZXRPclNsaWNlKFNWR19NRUVUT1JTTElDRV9NRUVUKQpAQCAtMTAxLDEw
ICsxMDEsMTAgQEAgdm9pZCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpwYXJzZVByZXNlcgogICAg
ICAgICBtX2NvbnRleHQtPm5vdGlmeUF0dHJpYnV0ZUNoYW5nZSgpOwogfQogCi1TVkdNYXRyaXgg
KlNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OmdldENUTShmbG9hdCBsb2dpY1gsIGZsb2F0IGxvZ2lj
WSwgZmxvYXQgbG9naWNXaWR0aCwgZmxvYXQgbG9naWNIZWlnaHQsCitTVkdNYXRyaXgqIFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW86OmdldENUTShmbG9hdCBsb2dpY1gsIGZsb2F0IGxvZ2ljWSwgZmxv
YXQgbG9naWNXaWR0aCwgZmxvYXQgbG9naWNIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IC8qcGh5c1gqLywgZmxvYXQgLypwaHlz
WSovLCBmbG9hdCBwaHlzV2lkdGgsIGZsb2F0IHBoeXNIZWlnaHQpCiB7Ci0gICAgU1ZHTWF0cml4
ICp0ZW1wID0gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTWF0cml4KCk7CisgICAgU1ZHTWF0cml4
KiB0ZW1wID0gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTWF0cml4KCk7CiAKICAgICBpZiAoYWxp
Z24oKSA9PSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19VTktOT1dOKQogICAgICAgICByZXR1cm4g
dGVtcDsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgJ
KHJldmlzaW9uIDE3MDU5KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUHJlc2VydmVBc3BlY3RS
YXRpby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAg
ICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAg
ICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjksNiArMjksNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBTdHJpbmc7CiAgICAgY2xhc3Mg
U1ZHTWF0cml4OwogICAgIGNsYXNzIFNWR1N0eWxlZEVsZW1lbnQ7CiAKQEAgLTU0LDcgKzU1LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgU1ZHX01FRVRPUlNMSUNFX1NMSUNF
ICAgICAgPSAyCiAgICAgICAgIH07CiAKLSAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyhj
b25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KTsKKyAgICAgICAgU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpbyhjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBjb250ZXh0KTsKICAgICAgICAgdmlydHVh
bCB+U1ZHUHJlc2VydmVBc3BlY3RSYXRpbygpOwogCiAgICAgICAgIHZvaWQgc2V0QWxpZ24odW5z
aWduZWQgc2hvcnQpOwpAQCAtNjMsNyArNjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZvaWQgc2V0TWVldE9yU2xpY2UodW5zaWduZWQgc2hvcnQpOwogICAgICAgICB1bnNpZ25l
ZCBzaG9ydCBtZWV0T3JTbGljZSgpIGNvbnN0OwogICAgICAgICAKLSAgICAgICAgU1ZHTWF0cml4
ICpnZXRDVE0oZmxvYXQgbG9naWNYLCBmbG9hdCBsb2dpY1ksCisgICAgICAgIFNWR01hdHJpeCog
Z2V0Q1RNKGZsb2F0IGxvZ2ljWCwgZmxvYXQgbG9naWNZLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgbG9naWNXaWR0aCwgZmxvYXQgbG9naWNIZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCBwaHlzWCwgZmxvYXQgcGh5c1ksIGZsb2F0IHBoeXNX
aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHBoeXNIZWlnaHQpOwpA
QCAtNzUsNyArNzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHVuc2lnbmVkIHNo
b3J0IG1fYWxpZ247CiAgICAgICAgIHVuc2lnbmVkIHNob3J0IG1fbWVldE9yU2xpY2U7CiAKLSAg
ICAgICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqbV9jb250ZXh0OworICAgICAgICBjb25zdCBT
VkdTdHlsZWRFbGVtZW50KiBtX2NvbnRleHQ7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3RyaW5nTGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3RyaW5nTGlzdC5jcHAJKHJldmlzaW9uIDE3MDU5
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3RyaW5nTGlzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFz
IFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUs
IDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBLREUgcHJvamVjdAogCkBAIC0yMSw3ICsyMSw2IEBACiAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCi0KICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR1N0cmluZ0xpc3QuaCIK
IApAQCAtNDUsNyArNDQsNyBAQCB2b2lkIFNWR1N0cmluZ0xpc3Q6OnJlc2V0KGNvbnN0IFN0cmlu
ZyYgCiAgICAgICAgIGFwcGVuZEl0ZW0oU3RyaW5nKCIiKSwgZWMpOyAvLyBDcmVhdGUgZW1wdHkg
c3RyaW5nLi4uCiAgICAgfSBlbHNlIHsKICAgICAgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IHZlY3Rvci5lbmQoKTsKLSAgICAgICAgZm9yKFZlY3RvcjxTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IHZlY3Rvci5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAg
ICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdmVjdG9yLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKml0LCBlYyk7CiAg
ICAgfQogfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3RyaW5nTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0cmluZ0xpc3QuaAkocmV2aXNpb24gMTcwNTkp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHJpbmdMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFpp
bW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIw
MDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBLREUgcHJvamVjdAogCkBAIC0yNSw4ICsyNSw4IEBACiAKICNpZmRlZiBTVkdfU1VQUE9SVAog
Ci0jaW5jbHVkZSAiU1ZHTGlzdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSAiU1ZHTGlzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1N0eWxhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdTdHlsYWJsZS5jcHAJKHJldmlzaW9uIDE3MDU5KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHU3R5bGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5v
cmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjQs
NyArMjQsNyBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHU3R5bGFibGUuaCIK
IAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR1N0
eWxhYmxlOjpTVkdTdHlsYWJsZSgpCiB7CkBAIC0zNCw2ICszNCw4IEBAIFNWR1N0eWxhYmxlOjp+
U1ZHU3R5bGFibGUoKQogewogfQogCit9CisKIC8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBT
VkdfU1VQUE9SVAogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsYWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxhYmxlLmgJKHJldmlzaW9uIDE3MDU5
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAKQEAgLTI0LDEzICsyNCwxMiBAQAogI2RlZmluZSBLU1ZHX1NWR1N0eWxh
YmxlSW1wbF9ICiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFN0cmluZzsKICAgICBjbGFz
cyBDU1NWYWx1ZTsKICAgICBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOworICAgIGNsYXNzIFN0
cmluZzsKKyAgICBjbGFzcyBTdHJpbmdJbXBsOwogCiAgICAgY2xhc3MgU1ZHU3R5bGFibGUgewog
ICAgIHB1YmxpYzoKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1Rlc3RzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXN0cy5jcHAJKHJldmlzaW9uIDE3MDU5KQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJt
YW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiwgMjAw
NiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RF
IHByb2plY3QKIApAQCAtMjQsMTMgKzI0LDEyIEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNs
dWRlICJTVkdUZXN0cy5oIgogCisjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNs
dWRlICJMYW5ndWFnZS5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdI
ZWxwZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1N0cmluZ0xpc3Qu
aCIKLSNpbmNsdWRlICJBdHRyLmgiCi0jaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MiwxNyArNDEsMTcgQEAgU1ZHVGVzdHM6On5TVkdU
ZXN0cygpCiB7CiB9CiAKLVNWR1N0cmluZ0xpc3QgKlNWR1Rlc3RzOjpyZXF1aXJlZEZlYXR1cmVz
KCkgY29uc3QKK1NWR1N0cmluZ0xpc3QqIFNWR1Rlc3RzOjpyZXF1aXJlZEZlYXR1cmVzKCkgY29u
c3QKIHsKICAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHU3RyaW5nTGlzdD4obV9mZWF0dXJlcyk7
CiB9CiAKLVNWR1N0cmluZ0xpc3QgKlNWR1Rlc3RzOjpyZXF1aXJlZEV4dGVuc2lvbnMoKSBjb25z
dAorU1ZHU3RyaW5nTGlzdCogU1ZHVGVzdHM6OnJlcXVpcmVkRXh0ZW5zaW9ucygpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR1N0cmluZ0xpc3Q+KG1fZXh0ZW5zaW9ucyk7CiB9
CiAKLVNWR1N0cmluZ0xpc3QgKlNWR1Rlc3RzOjpzeXN0ZW1MYW5ndWFnZSgpIGNvbnN0CitTVkdT
dHJpbmdMaXN0KiBTVkdUZXN0czo6c3lzdGVtTGFuZ3VhZ2UoKSBjb25zdAogewogICAgIHJldHVy
biBsYXp5X2NyZWF0ZTxTVkdTdHJpbmdMaXN0PihtX3N5c3RlbUxhbmd1YWdlKTsKIH0KQEAgLTY2
LDEwICs2NSwxMCBAQCBib29sIFNWR1Rlc3RzOjppc1ZhbGlkKCkgY29uc3QKIHsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKIAotICAgIFNWR1N0cmluZ0xpc3QgKmxpc3QgPSByZXF1aXJlZEZl
YXR1cmVzKCk7CisgICAgU1ZHU3RyaW5nTGlzdCogbGlzdCA9IHJlcXVpcmVkRmVhdHVyZXMoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7aSA8IGxpc3QtPm51bWJlck9mSXRlbXMoKTtp
KyspIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gU3RyaW5nKGxpc3QtPmdldEl0ZW0oaSwgZWMp
KTsKLSAgICAgICAgaWYodmFsdWUuaXNFbXB0eSgpIHx8ICFET01JbXBsZW1lbnRhdGlvbjo6aW5z
dGFuY2UoKS0+aGFzRmVhdHVyZSh2YWx1ZSwgU3RyaW5nKCkpKQorICAgICAgICBTdHJpbmcgdmFs
dWUgPSBsaXN0LT5nZXRJdGVtKGksIGVjKTsKKyAgICAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSB8
fCAhRE9NSW1wbGVtZW50YXRpb246Omluc3RhbmNlKCktPmhhc0ZlYXR1cmUodmFsdWUsIFN0cmlu
ZygpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTc5LDEzICs3OCwx
MyBAQCBib29sIFNWR1Rlc3RzOjppc1ZhbGlkKCkgY29uc3QKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGxpc3QgPSByZXF1aXJlZEV4dGVuc2lvbnMoKTsKLSAgICBpZihsaXN0LT5u
dW1iZXJPZkl0ZW1zKCkgPiAwKQorICAgIGlmIChsaXN0LT5udW1iZXJPZkl0ZW1zKCkgPiAwKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdU
ZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQorYm9vbCBT
VkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewog
ICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnJlcXVpcmVkRmVhdHVyZXNBdHRyKSB7CkluZGV4OiBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdUZXN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1Rlc3RzLmgJKHJldmlzaW9uIDE3MDU5KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGVzdHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAg
ICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTM4LDE1ICszOCwxNSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgflNWR1Rlc3RzKCk7CiAKICAgICAg
ICAgLy8gJ1NWR1Rlc3RzJyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHU3RyaW5nTGlzdCAqcmVxdWly
ZWRGZWF0dXJlcygpIGNvbnN0OwotICAgICAgICBTVkdTdHJpbmdMaXN0ICpyZXF1aXJlZEV4dGVu
c2lvbnMoKSBjb25zdDsKLSAgICAgICAgU1ZHU3RyaW5nTGlzdCAqc3lzdGVtTGFuZ3VhZ2UoKSBj
b25zdDsKKyAgICAgICAgU1ZHU3RyaW5nTGlzdCogcmVxdWlyZWRGZWF0dXJlcygpIGNvbnN0Owor
ICAgICAgICBTVkdTdHJpbmdMaXN0KiByZXF1aXJlZEV4dGVuc2lvbnMoKSBjb25zdDsKKyAgICAg
ICAgU1ZHU3RyaW5nTGlzdCogc3lzdGVtTGFuZ3VhZ2UoKSBjb25zdDsKIAogICAgICAgICBib29s
IGhhc0V4dGVuc2lvbihjb25zdCBTdHJpbmcmKSBjb25zdDsKIAogICAgICAgICBib29sIGlzVmFs
aWQoKSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIGJvb2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAgICAgICAgYm9vbCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUqKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR1N0cmluZ0xpc3Q+IG1fZmVhdHVyZXM7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdUcmFuc2Zvcm1hYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdU
cmFuc2Zvcm1hYmxlLmNwcAkocmV2aXNpb24gMTcwNTkpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdUcmFuc2Zvcm1hYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBr
ZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAg
LTIyLDIyICsyMiwxNiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NVUFBP
UlQKLSNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLQotI2luY2x1ZGUgIkF0dHIuaCIKLQotI2luY2x1ZGUgPGtjYW52YXMvUmVuZGVyUGF0aC5o
PgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybWFibGUuaCIKIAotI2luY2x1ZGUgIlNWR05hbWVzLmgi
CisjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIK
ICNpbmNsdWRlICJTVkdNYXRyaXguaCIKLSNpbmNsdWRlICJTVkdUcmFuc2Zvcm1hYmxlLmgiCisj
aW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgotI2luY2x1ZGUgImtzdmcuaCIKIAotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR1RyYW5zZm9ybWFibGU6
OlNWR1RyYW5zZm9ybWFibGUoKSA6IFNWR0xvY2F0YWJsZSgpCiB7CkBAIC00Nyw3ICs0MSw3IEBA
IFNWR1RyYW5zZm9ybWFibGU6On5TVkdUcmFuc2Zvcm1hYmxlKCkKIHsKIH0KIAotdm9pZCBTVkdU
cmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybUF0dHJpYnV0ZShTVkdUcmFuc2Zvcm1MaXN0ICps
aXN0LCBjb25zdCBBdG9taWNTdHJpbmcmIHRyYW5zZm9ybSkKK3ZvaWQgU1ZHVHJhbnNmb3JtYWJs
ZTo6cGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUoU1ZHVHJhbnNmb3JtTGlzdCogbGlzdCwgY29uc3Qg
QXRvbWljU3RyaW5nJiB0cmFuc2Zvcm0pCiB7CiAgICAgLy8gU3BsaXQgc3RyaW5nIGZvciBoYW5k
bGluZyAxIHRyYW5zZm9ybSBzdGF0ZW1lbnQgYXQgYSB0aW1lCiAgICAgVmVjdG9yPFN0cmluZz4g
c3VidHJhbnNmb3JtcyA9IHRyYW5zZm9ybS5kb21TdHJpbmcoKS5zaW1wbGlmeVdoaXRlU3BhY2Uo
KS5zcGxpdCgnKScpOwpAQCAtMTAzLDEyICs5NywxMiBAQCB2b2lkIFNWR1RyYW5zZm9ybWFibGU6
OnBhcnNlVHJhbnNmb3JtQXR0CiAgICAgICAgIGVsc2UgaWYgKHN1YnRyYW5zZm9ybVswXSA9PSAi
c2tld3kiICYmIChwYXJhbXMuc2l6ZSgpID09IDEpKQogICAgICAgICAgICAgdC0+c2V0U2tld1ko
cGFyYW1zWzBdLnRvRG91YmxlKCkpOwogICAgICAgICBlbHNlIGlmIChzdWJ0cmFuc2Zvcm1bMF0g
PT0gIm1hdHJpeCIgJiYgKHBhcmFtcy5zaXplKCkgPT0gNikpIHsKLSAgICAgICAgICAgIFNWR01h
dHJpeCAqcmV0ID0gbmV3IFNWR01hdHJpeChwYXJhbXNbMF0udG9Eb3VibGUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1sxXS50b0Rv
dWJsZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zWzJdLnRvRG91YmxlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXNbM10udG9Eb3VibGUoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1s0XS50b0RvdWJsZSgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
YW1zWzVdLnRvRG91YmxlKCkpOworICAgICAgICAgICAgU1ZHTWF0cml4KiByZXQgPSBuZXcgU1ZH
TWF0cml4KHBhcmFtc1swXS50b0RvdWJsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtc1sxXS50b0RvdWJsZSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1syXS50b0RvdWJsZSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1szXS50b0RvdWJsZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1s0XS50b0Rv
dWJsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1s1XS50b0RvdWJsZSgpKTsKICAgICAgICAgICAgIHQtPnNldE1hdHJpeChyZXQpOwogICAgICAg
ICB9CiAgICAgICAgIApAQCAtMTIyLDYgKzExNiw4IEBAIHZvaWQgU1ZHVHJhbnNmb3JtYWJsZTo6
cGFyc2VUcmFuc2Zvcm1BdHQKICAgICB9CiB9CiAKK30KKwogLy8gdmltOnRzPTQ6bm9ldAogI2Vu
ZGlmIC8vIFNWR19TVVBQT1JUCiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RyYW5zZm9y
bWFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1hYmxl
LmgJKHJldmlzaW9uIDE3MDU5KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAg
ICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAg
ICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjgsMTEgKzI4LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsK
ICAgICBjbGFzcyBBdG9taWNTdHJpbmc7Ci0gICAgY2xhc3MgQXR0cmlidXRlOwotICAgIGNsYXNz
IE5vZGU7Ci0gICAgY2xhc3MgU1ZHVHJhbnNmb3JtTGlzdDsKICAgICBjbGFzcyBTVkdNYXRyaXg7
CiAgICAgY2xhc3MgU1ZHVHJhbnNmb3JtTGlzdDsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHVVJJUmVmZXJlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdV
UklSZWZlcmVuY2UuY3BwCShyZXZpc2lvbiAxNzA1OSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1VSSVJlZmVyZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2Rl
Lm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0y
MiwxNCArMjIsMTIgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmZGVmIFNWR19TVVBQT1JU
Ci0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJTVkdVUklS
ZWZlcmVuY2UuaCIKIAotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiWExpbmtOYW1l
cy5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgotI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5o
IgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgor
I2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3
ICs0MSw3IEBAIFNWR1VSSVJlZmVyZW5jZTo6flNWR1VSSVJlZmVyZW5jZSgpCiAKIEFOSU1BVEVE
X1BST1BFUlRZX0RFRklOSVRJT05TX1dJVEhfQ09OVEVYVChTVkdVUklSZWZlcmVuY2UsIFN0cmlu
ZywgU3RyaW5nLCBzdHJpbmcsIEhyZWYsIGhyZWYsIFhMaW5rTmFtZXM6OmhyZWZBdHRyLmxvY2Fs
TmFtZSgpLCBtX2hyZWYpCiAKLWJvb2wgU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCitib29sIFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5u
YW1lKCkubWF0Y2hlcyhYTGlua05hbWVzOjpocmVmQXR0cikpIHsKICAgICAgICAgc2V0SHJlZkJh
c2VWYWx1ZShhdHRyLT52YWx1ZSgpKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1pvb21B
bmRQYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1pvb21BbmRQYW4u
Y3BwCShyZXZpc2lvbiAxNzA1OSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1pvb21BbmRQYW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAg
ICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAg
ICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjIsMTQgKzIyLDExIEBA
CiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgIkF0
dHIuaCIKLSNpbmNsdWRlICJNYXBwZWRBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJTVkdab29tQW5k
UGFuLmgiCiAKLSNpbmNsdWRlICJrc3ZnLmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTVkdIZWxwZXIuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1NW
R0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdab29tQW5kUGFuLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNTIsMTMgKzQ5LDEzIEBAIHZvaWQgU1ZHWm9vbUFuZFBhbjo6c2V0Wm9vbUFu
ZFBhbih1bnNpZ24KICAgICBtX3pvb21BbmRQYW4gPSB6b29tQW5kUGFuOwogfQogCi1ib29sIFNW
R1pvb21BbmRQYW46OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikK
K2Jvb2wgU1ZHWm9vbUFuZFBhbjo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
KiBhdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Onpvb21BbmRQYW5BdHRyKSB7Ci0gICAgICAg
IGlmKHZhbHVlID09ICJkaXNhYmxlIikKKyAgICAgICAgaWYgKHZhbHVlID09ICJkaXNhYmxlIikK
ICAgICAgICAgICAgIHNldFpvb21BbmRQYW4oU1ZHU1ZHRWxlbWVudDo6U1ZHX1pPT01BTkRQQU5f
RElTQUJMRSk7Ci0gICAgICAgIGVsc2UgaWYodmFsdWUgPT0gIm1hZ25pZnkiKQorICAgICAgICBl
bHNlIGlmICh2YWx1ZSA9PSAibWFnbmlmeSIpCiAgICAgICAgICAgICBzZXRab29tQW5kUGFuKFNW
R1NWR0VsZW1lbnQ6OlNWR19aT09NQU5EUEFOX01BR05JRlkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdab29tQW5kUGFuLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHWm9vbUFuZFBhbi5oCShyZXZpc2lvbiAxNzA1
OSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1pvb21BbmRQYW4uaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMg
WmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwg
MjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIEtERSBwcm9qZWN0CiAKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB1bnNpZ25lZCBzaG9ydCB6b29tQW5kUGFuKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzZXRab29tQW5kUGFuKHVuc2lnbmVkIHNob3J0IHpvb21BbmRQYW4pOwogCi0gICAg
ICAgIGJvb2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAg
ICAgICAgYm9vbCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIHNob3J0IG1fem9vbUFuZFBhbjsK
</data>
<flag name="review"
          id="3772"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11092</attachid>
            <date>2006-10-15 00:16:35 -0700</date>
            <delta_ts>2006-10-31 11:17:51 -0800</delta_ts>
            <desc>Improved patch</desc>
            <filename>11217-basicdatastructures-2.diff</filename>
            <type>text/plain</type>
            <size>45154</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzA2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzYgQEAKKzIwMDYtMTAtMTQgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIHN2ZyBiYXNpYyBk
YXRhc3RydWN0dXJlIGNsYXNzZXMuCisKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQW5nbGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5nbGU6OnZhbHVlQXNTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5nbGU6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5nbGU6
OnNldENvbnRleHQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmdsZS5oOgorICAgICAgICAq
IGtzdmcyL3N2Zy9TVkdDb2xvci5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0NvbG9yLmg6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRWxlbWVudDo6b3duZXJTVkdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1l
bnQ6OnZpZXdwb3J0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpjaGlsZFNo
b3VsZENyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRWxlbWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6c3ZnX2R5bmFtaWNfY2FzdCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR0ZpdFRvVmlld0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaXRUb1ZpZXdCb3g6
OnBhcnNlVmlld0JveCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5oOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdMYW5nU3BhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR0xhbmdTcGFjZS5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdMZW5ndGguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoOjpTVkdMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHTGVuZ3RoOjpzZXRWYWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0
aDo6ZHBpKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aDo6dXBkYXRlVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoOjp1cGRhdGVWYWx1ZUluU3BlY2lmaWVkVW5pdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoOjpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0xlbmd0aDo6c2V0Q29udGV4dCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0xlbmd0aC5o
OgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdMZW5ndGhMaXN0LmNwcDoKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHTGVuZ3RoTGlzdC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdMb2NhdGFibGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTG9jYXRhYmxlOjpuZWFyZXN0Vmlld3BvcnRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xvY2F0YWJsZTo6ZmFydGhlc3RWaWV3cG9ydEVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTG9jYXRhYmxlOjpnZXRCQm94KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0xvY2F0YWJsZTo6Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0xvY2F0YWJsZTo6Z2V0U2NyZWVuQ1RNKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHTnVtYmVy
TGlzdC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR051bWJlckxpc3QuaDoKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OmdldENUTSk6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcv
U1ZHU3RyaW5nTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHJpbmdMaXN0OjpyZXNl
dCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1N0cmluZ0xpc3QuaDoKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHU3R5bGFibGUuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTdHlsYWJsZS5o
OgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUZXN0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdUZXN0czo6cmVxdWlyZWRGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXN0czo6
cmVxdWlyZWRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rlc3RzOjpzeXN0ZW1M
YW5ndWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXN0czo6aXNWYWxpZCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdUZXN0cy5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1hYmxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3Jt
QXR0cmlidXRlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oOgorICAg
ICAgICAqIGtzdmcyL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR1pvb21BbmRQYW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHWm9vbUFuZFBhbjo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdab29tQW5kUGFu
Lmg6CisKIDIwMDYtMTAtMTUgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIuCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdBbmdsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5nbGUu
Y3BwCShyZXZpc2lvbiAxNzA2MSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuZ2xlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAg
ICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAg
ICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIyLDE1ICsyMiwxMSBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlIDxtYXRoLmg+
Ci0KLSNpbmNsdWRlIDxrc3ZnMi9rc3ZnLmg+Ci0KLSNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5n
LmgiCiAjaW5jbHVkZSAiU1ZHQW5nbGUuaCIKLSNpbmNsdWRlICJTVkdIZWxwZXIuaCIKIAotdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisjaW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNvbnN0IGRvdWJsZSBkZWcycmFkID0gMC4wMTc0NTMyOTI1MTk5NDMyOTU3Njk7
IC8vIHBpLzE4MAogY29uc3QgZG91YmxlIGRlZzJncmFkID0gNDAwLjAgLyAzNjAuMDsKQEAgLTEx
MSw3ICsxMDcsNyBAQCBTdHJpbmcgU1ZHQW5nbGU6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAogewog
ICAgIG1fdmFsdWVBc1N0cmluZyA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWVJblNwZWNpZmllZFVu
aXRzKTsKIAotICAgIHN3aXRjaChtX3VuaXRUeXBlKSB7CisgICAgc3dpdGNoIChtX3VuaXRUeXBl
KSB7CiAgICAgICAgIGNhc2UgU1ZHX0FOR0xFVFlQRV9VTlNQRUNJRklFRDoKICAgICAgICAgY2Fz
ZSBTVkdfQU5HTEVUWVBFX0RFRzoKICAgICAgICAgICAgIG1fdmFsdWVBc1N0cmluZyArPSAiZGVn
IjsKQEAgLTE3OCwxNiArMTc0LDE3IEBAIGRvdWJsZSBTVkdBbmdsZTo6c2hvcnRlc3RBcmNCaXNl
Y3Rvcihkb3UKICAgICByZXR1cm4gYmlzZWN0b3I7CiB9CiAKLWNvbnN0IFNWR1N0eWxlZEVsZW1l
bnQgKlNWR0FuZ2xlOjpjb250ZXh0KCkgY29uc3QKK2NvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIFNW
R0FuZ2xlOjpjb250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZXh0OwogfQogCi12
b2lkIFNWR0FuZ2xlOjpzZXRDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQp
Cit2b2lkIFNWR0FuZ2xlOjpzZXRDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRl
eHQpCiB7CiAgICAgbV9jb250ZXh0ID0gY29udGV4dDsKIH0KIAorfQogCiAvLyB2aW06dHM9NDpu
b2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0Fu
Z2xlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5nbGUuaAkocmV2aXNp
b24gMTcwNjEpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmdsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xh
cyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgS0RFIHByb2plY3QKIApAQCAtNzIsNyArNzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIGZsb2F0IG1fdmFsdWU7CiAgICAgICAgIGZsb2F0IG1fdmFsdWVJblNwZWNpZmll
ZFVuaXRzOwogICAgICAgICBtdXRhYmxlIFN0cmluZyBtX3ZhbHVlQXNTdHJpbmc7Ci0gICAgICAg
IGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKm1fY29udGV4dDsKKyAgICAgICAgY29uc3QgU1ZHU3R5
bGVkRWxlbWVudCogbV9jb250ZXh0OwogCiAgICAgICAgIHZvaWQgY2FsY3VsYXRlKCk7CiAgICAg
fTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NvbG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdDb2xvci5jcHAJKHJldmlzaW9uIDE3MDYxKQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxk
Zm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QK
IApAQCAtMjQsNyArMjQsNyBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHQ29s
b3IuaCIKIAotI2luY2x1ZGUgImtzdmcuaCIKKyNpbmNsdWRlICJTVkdFeGNlcHRpb24uaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDb2xvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NvbG9yLmgJKHJldmlzaW9uIDE3
MDYxKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAKQEAgLTI5LDkgKzI5LDkgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgUkdCQ29sb3I7CisgICAKICAg
ICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotICAgIAorIAogICAgIGNsYXNzIFNWR0NvbG9y
IDogcHVibGljIENTU1ZhbHVlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNWR0NvbG9yKCk7Cklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24gMTcwNjEpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2ls
ZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0
CiAKQEAgLTI0LDkgKzI0LDggQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0Vs
ZW1lbnQuaCIKIAotI2luY2x1ZGUgIkF0dHIuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCkBAIC0zNiw3ICszNSw2IEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKLSNpbmNsdWRlICJr
c3ZnLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODIsOCArODAsOCBAQCB2b2lkIFNW
R0VsZW1lbnQ6OnNldFhtbGJhc2UoY29uc3QgU3RyaW5nCiAKIFNWR1NWR0VsZW1lbnQqIFNWR0Vs
ZW1lbnQ6Om93bmVyU1ZHRWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgTm9kZSAqbiA9IHBhcmVudE5v
ZGUoKTsKLSAgICB3aGlsZShuKSB7CisgICAgTm9kZSogbiA9IHBhcmVudE5vZGUoKTsKKyAgICB3
aGlsZSAobikgewogICAgICAgICBpZiAobi0+bm9kZVR5cGUoKSA9PSBFTEVNRU5UX05PREUgJiYg
bi0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4obik7CiAKQEAgLTk1LDcgKzkzLDcgQEAgU1ZHU1ZHRWxl
bWVudCogU1ZHRWxlbWVudDo6b3duZXJTVkdFbGVtZQogCiBTVkdFbGVtZW50KiBTVkdFbGVtZW50
Ojp2aWV3cG9ydEVsZW1lbnQoKSBjb25zdAogewotICAgIE5vZGUgKm4gPSBwYXJlbnROb2RlKCk7
CisgICAgTm9kZSogbiA9IHBhcmVudE5vZGUoKTsKICAgICB3aGlsZSAobikgewogICAgICAgICBp
ZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmCiAgICAgICAgICAgICAobi0+aGFzVGFnTmFtZShTVkdO
YW1lczo6c3ZnVGFnKSB8fCBuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjppbWFnZVRhZykgfHwgbi0+
aGFzVGFnTmFtZShTVkdOYW1lczo6c3ltYm9sVGFnKSkpCkBAIC0xMjksNyArMTI3LDcgQEAgdm9p
ZCBTVkdFbGVtZW50OjphZGRTVkdFdmVudExpc3RlbmVyKGNvbgogICAgICAgICBjcmVhdGVTVkdF
dmVudExpc3RlbmVyKGF0dHItPmxvY2FsTmFtZSgpLmRvbVN0cmluZygpLCBhdHRyLT52YWx1ZSgp
LCB0aGlzKSk7CiB9CiAKLXZvaWQgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKQordm9pZCBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgLy8gc3RhbmRhcmQgZXZlbnRzCiAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBvbmxvYWRBdHRyKQpAQCAtMTg5LDcgKzE4Nyw3IEBAIHZvaWQg
U1ZHRWxlbWVudDo6Y2xvc2VSZW5kZXJlcigpCiAgICAgc2VuZFNWR0xvYWRFdmVudElmUG9zc2li
bGUoKTsKIH0KIAotYm9vbCBTVkdFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5v
ZGUgKmNoaWxkKSBjb25zdAorYm9vbCBTVkdFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRl
cmVyKE5vZGUqIGNoaWxkKSBjb25zdAogewogICAgIGlmIChjaGlsZC0+aXNTVkdFbGVtZW50KCkp
CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGQpLT5pc1ZhbGlk
KCk7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudC5oCShyZXZpc2lvbiAxNzA2MSkKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2ls
ZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0
CiAKQEAgLTI3LDEwICsyNyw5IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKICNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCi0KLSNpbmNsdWRlICJTVkdO
YW1lcy5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkVGVtcGxhdGUuaCIKICNpbmNsdWRlICJTVkdE
b2N1bWVudEV4dGVuc2lvbnMuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgogCiAjZGVmaW5lIEFO
SU1BVEVEX1BST1BFUlRZX0VNUFRZX0RFQ0xBUkFUSU9OUyhCYXJlVHlwZSwgTnVsbFR5cGUsIFVw
cGVyUHJvcGVydHksIExvd2VyUHJvcGVydHkpIFwKIHB1YmxpYzogXApAQCAtMjA1LDcgKzIwNCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHN0YXRpYyBpbmxpbmUgU1ZHRWxlbWVudCog
c3ZnX2R5bmFtaWNfY2FzdChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgU1ZHRWxlbWVudCog
c3ZnRWxlbWVudCA9IE5VTEw7CisgICAgICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSAwOwog
ICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5pc1NWR0VsZW1lbnQoKSkKICAgICAgICAgICAgIHN2
Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSk7CiAgICAgICAgIHJldHVy
biBzdmdFbGVtZW50OwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCShy
ZXZpc2lvbiAxNzA2MSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAg
ICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAg
ICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yMiwxMSArMjIsOSBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJTVkdGaXRU
b1ZpZXdCb3guaCIKIAotI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCi0jaW5jbHVkZSAiU1ZHRml0VG9W
aWV3Qm94LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvLmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgpAQCAtNTIsOSArNTAsOSBA
QCB2b2lkIFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0CiB7CiAgICAgZG91Ymxl
IHggPSAwLCB5ID0gMCwgdyA9IDAsIGggPSAwOwogICAgIERlcHJlY2F0ZWRTdHJpbmcgdmlld2Jv
eCA9IHN0ci5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgY29uc3QgY2hhciAqcCA9IHZpZXdib3gu
bGF0aW4xKCk7Ci0gICAgY29uc3QgY2hhciAqZW5kID0gcCArIHZpZXdib3gubGVuZ3RoKCk7Ci0g
ICAgY29uc3QgY2hhciAqYyA9IHA7CisgICAgY29uc3QgY2hhciogcCA9IHZpZXdib3gubGF0aW4x
KCk7CisgICAgY29uc3QgY2hhciogZW5kID0gcCArIHZpZXdib3gubGVuZ3RoKCk7CisgICAgY29u
c3QgY2hhciogYyA9IHA7CiAgICAgcCA9IHBhcnNlQ29vcmQoYywgeCk7CiAgICAgaWYgKHAgPT0g
YykKICAgICAgICAgZ290byBiYWlsX291dDsKQEAgLTY2LDcgKzY0LDcgQEAgdm9pZCBTVkdGaXRU
b1ZpZXdCb3g6OnBhcnNlVmlld0JveChjb25zdAogCiAgICAgYyA9IHA7CiAgICAgcCA9IHBhcnNl
Q29vcmQoYywgdyk7Ci0gICAgaWYodyA8IDAuMCB8fCBwID09IGMpIC8vIGNoZWNrIHRoYXQgd2lk
dGggaXMgcG9zaXRpdmUKKyAgICBpZiAodyA8IDAuMCB8fCBwID09IGMpIC8vIGNoZWNrIHRoYXQg
d2lkdGggaXMgcG9zaXRpdmUKICAgICAgICAgZ290byBiYWlsX291dDsKIAogICAgIGMgPSBwOwpJ
bmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmgJKHJldmlzaW9uIDE3MDYxKQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1l
cm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgcHJvamVjdAogCkBAIC0yOCw5ICsyOCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBjbGFzcyBBdHRyaWJ1dGU7Ci0gICAgY2xhc3MgU3RyaW5nSW1wbDsKLSAgICBjbGFzcyBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvOwogICAgIGNsYXNzIFNWR01hdHJpeDsKKyAgICBjbGFzcyBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgIGNsYXNzIFN0cmluZ0ltcGw7CiAKICAgICBjbGFzcyBT
VkdGaXRUb1ZpZXdCb3ggewogICAgIHB1YmxpYzoKQEAgLTM5LDkgKzM5LDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIC8vICdTVkdGaXRUb1ZpZXdCb3gnIGZ1bmN0aW9ucwogICAg
ICAgICB2b2lkIHBhcnNlVmlld0JveChjb25zdCBTdHJpbmcmKTsKLSAgICAgICAgU1ZHTWF0cml4
ICp2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKGZsb2F0IHZpZXdXaWR0aCwgZmxvYXQgdmlld0hlaWdo
dCkgY29uc3Q7CisgICAgICAgIFNWR01hdHJpeCogdmlld0JveFRvVmlld1RyYW5zZm9ybShmbG9h
dCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpIGNvbnN0OwogCi0gICAgICAgIGJvb2wgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAgICAgICAgYm9vbCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKIAogICAgIHByb3RlY3RlZDoK
ICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0
ID0gMDsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xhbmdTcGFjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGFuZ1NwYWNlLmNwcAkocmV2aXNpb24gMTcwNjEp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMYW5nU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBa
aW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAy
MDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgS0RFIHByb2plY3QKIApAQCAtMjQsMTMgKzI0LDEwIEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQK
ICNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIKIAotI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRl
ICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJTdHJpbmdJ
bXBsLmgiCi0jaW5jbHVkZSAia3N2Zy5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK25h
bWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHTGFuZ1NwYWNlOjpTVkdMYW5nU3BhY2UoKQogewpAQCAt
NjAsMTUgKzU3LDEyIEBAIHZvaWQgU1ZHTGFuZ1NwYWNlOjpzZXRYbWxzcGFjZShjb25zdCBBdG8K
ICAgICBtX3NwYWNlID0geG1sU3BhY2U7CiB9CiAKLWJvb2wgU1ZHTGFuZ1NwYWNlOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCitib29sIFNWR0xhbmdTcGFjZTo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmxhbmdBdHRyKQotICAgIHsKKyAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpsYW5nQXR0cikgewogICAgICAgICBzZXRYbWxsYW5nKGF0dHIt
PnZhbHVlKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGFjZUF0dHIpCi0gICAgeworICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGFjZUF0dHIpIHsKICAgICAgICAgc2V0WG1sc3Bh
Y2UoYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc2LDYg
KzcwLDggQEAgYm9vbCBTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAorfQorCiAvLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NV
UFBPUlQKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGFuZ1NwYWNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGFuZ1NwYWNlLmgJKHJldmlzaW9uIDE3MDYxKQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGFuZ1NwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1l
cm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgcHJvamVjdAogCkBAIC0yOSw4ICsyOSw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICBjbGFzcyBNYXBwZWRBdHRyaWJ1dGU7Ci0gICAgY2xhc3MgU3RyaW5nSW1wbDsKLSAgICBjbGFz
cyBTVkdMZW5ndGg7CiAKICAgICBjbGFzcyBTVkdMYW5nU3BhY2UgewogICAgIHB1YmxpYzoKQEAg
LTQ0LDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHhtbHNwYWNlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0WG1sc3BhY2UoY29uc3Qg
QXRvbWljU3RyaW5nJiB4bWxTcGFjZSk7CiAKLSAgICAgICAgYm9vbCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOworICAgICAgICBib29sIHBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQXRvbWlj
U3RyaW5nIG1fbGFuZzsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xlbmd0aC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGVuZ3RoLmNwcAkocmV2aXNpb24gMTcw
NjEpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBa
aW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAy
MDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgS0RFIHByb2plY3QKIApAQCAtMjksOSArMjksNyBAQAogI2luY2x1ZGUgIlNWR0VsZW1lbnQu
aCIKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCi0j
aW5jbHVkZSAia3N2Zy5oIgogI2luY2x1ZGUgInN2Z3BhdGhwYXJzZXIuaCIKLQogI2luY2x1ZGUg
PG1hdGguaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTQ5LDcgKzQ3LDcgQEAgc3RhdGlj
IGNvbnN0IGNoYXIqIFVuaXRUZXh0W10gPQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0xl
bmd0aDo6U1ZHTGVuZ3RoKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQsIExlbmd0aE1v
ZGUgbW9kZSwgY29uc3QgU1ZHRWxlbWVudCAqdmlld3BvcnQpCitTVkdMZW5ndGg6OlNWR0xlbmd0
aChjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBjb250ZXh0LCBMZW5ndGhNb2RlIG1vZGUsIGNvbnN0
IFNWR0VsZW1lbnQqIHZpZXdwb3J0KQogICAgIDogU2hhcmVkPFNWR0xlbmd0aD4oKQogICAgICwg
bV92YWx1ZSgwKQogICAgICwgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMoMCkKQEAgLTEwNiwxNCAr
MTA0LDE0IEBAIGZsb2F0IFNWR0xlbmd0aDo6dmFsdWVJblNwZWNpZmllZFVuaXRzKCkKIAogdm9p
ZCBTVkdMZW5ndGg6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBzKQogewotICAgIGlm
KHMuaXNFbXB0eSgpKQorICAgIGlmIChzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgRGVwcmVjYXRlZFN0cmluZyB2YWx1ZUFzUVN0cmluZyA9IHMuZGVwcmVjYXRlZFN0cmluZygp
OwogCiAgICAgZG91YmxlIGNvbnZlcnRlZE51bWJlciA9IDA7Ci0gICAgY29uc3QgY2hhciAqc3Rh
cnQgPSB2YWx1ZUFzUVN0cmluZy5sYXRpbjEoKTsKLSAgICBjb25zdCBjaGFyICplbmQgPSBwYXJz
ZUNvb3JkKHN0YXJ0LCBjb252ZXJ0ZWROdW1iZXIpOworICAgIGNvbnN0IGNoYXIqIHN0YXJ0ID0g
dmFsdWVBc1FTdHJpbmcubGF0aW4xKCk7CisgICAgY29uc3QgY2hhciogZW5kID0gcGFyc2VDb29y
ZChzdGFydCwgY29udmVydGVkTnVtYmVyKTsKICAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9
IGNvbnZlcnRlZE51bWJlcjsKIAogICAgIHVuc2lnbmVkIGludCBkaWZmID0gZW5kIC0gc3RhcnQ7
CkBAIC0xNjgsMTMgKzE2NiwxMiBAQCB2b2lkIFNWR0xlbmd0aDo6Y29udmVydFRvU3BlY2lmaWVk
VW5pdHMoCiBkb3VibGUgU1ZHTGVuZ3RoOjpkcGkoKSBjb25zdAogewogICAgIC8qIEZJWE1FOiBE
UEkgZGV0ZWN0aW9uCi0gICAgaWYoY29udGV4dCAmJiBjb250ZXh0LT5vd25lckRvYygpKQotICAg
IHsKLSAgICAgICAgaWYobW9kZSA9PSBMTV9XSURUSCkKKyAgICBpZiAoY29udGV4dCAmJiBjb250
ZXh0LT5vd25lckRvYygpKSB7CisgICAgICAgIGlmIChtb2RlID09IExNX1dJRFRIKQogICAgICAg
ICAgICAgcmV0dXJuIDI1LjQgKiBjb250ZXh0LT5vd25lckRvYygpLT5zY3JlZW5QaXhlbHNQZXJN
aWxsaW1ldGVyWCgpOwotICAgICAgICBlbHNlIGlmKG1vZGUgPT0gTE1fSEVJR0hUKQorICAgICAg
ICBlbHNlIGlmIChtb2RlID09IExNX0hFSUdIVCkKICAgICAgICAgICAgIHJldHVybiAyNS40ICog
Y29udGV4dC0+b3duZXJEb2MoKS0+c2NyZWVuUGl4ZWxzUGVyTWlsbGltZXRlclkoKTsKLSAgICAg
ICAgZWxzZSBpZihtb2RlID09IExNX09USEVSKQorICAgICAgICBlbHNlIGlmIChtb2RlID09IExN
X09USEVSKQogICAgICAgICAgICAgcmV0dXJuIDI1LjQgKiBjb250ZXh0LT5vd25lckRvYygpLT5z
Y3JlZW5QaXhlbHNQZXJNaWxsaW1ldGVyWCgpOwogICAgIH0KICAgICAqLwpAQCAtMTg0LDggKzE4
MSw3IEBAIGRvdWJsZSBTVkdMZW5ndGg6OmRwaSgpIGNvbnN0CiAKIHZvaWQgU1ZHTGVuZ3RoOjp1
cGRhdGVWYWx1ZShib29sIG5vdGlmeSkKIHsKLSAgICBzd2l0Y2gobV91bml0VHlwZSkKLSAgICB7
CisgICAgc3dpdGNoIChtX3VuaXRUeXBlKSB7CiAgICAgICAgIGNhc2UgU1ZHX0xFTkdUSFRZUEVf
UFg6CiAgICAgICAgICAgICBtX3ZhbHVlID0gbV92YWx1ZUluU3BlY2lmaWVkVW5pdHM7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTIwNSw5ICsyMDEsOCBAQCB2b2lkIFNWR0xlbmd0aDo6dXBkYXRl
VmFsdWUoYm9vbCBub3RpZnkpCiAgICAgICAgICAgICBtX3ZhbHVlID0gKG1fdmFsdWVJblNwZWNp
ZmllZFVuaXRzIC8gNi4wKSAqIGRwaSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgU1ZHX0xFTkdUSFRZUEVfRU1TOgotICAgICAgICBjYXNlIFNWR19MRU5HVEhUWVBFX0VYUzoK
LSAgICAgICAgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUgKnN0eWxlID0gMDsKKyAgICAgICAg
Y2FzZSBTVkdfTEVOR1RIVFlQRV9FWFM6IHsKKyAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IDA7CiAgICAgICAgICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+cmVuZGVyZXIo
KSkKICAgICAgICAgICAgICAgICBzdHlsZSA9IG1fY29udGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUo
KTsKICAgICAgICAgICAgIGVsc2UgaWYgKG1fdmlld3BvcnRFbGVtZW50ICYmIG1fdmlld3BvcnRF
bGVtZW50LT5yZW5kZXJlcigpKQpAQCAtMjQwLDExICsyMzUsMTAgQEAgdm9pZCBTVkdMZW5ndGg6
OnVwZGF0ZVZhbHVlKGJvb2wgbm90aWZ5KQogCiBib29sIFNWR0xlbmd0aDo6dXBkYXRlVmFsdWVJ
blNwZWNpZmllZFVuaXRzKGJvb2wgbm90aWZ5KQogewotICAgIGlmKG1fdW5pdFR5cGUgPT0gU1ZH
X0xFTkdUSFRZUEVfVU5LTk9XTikKKyAgICBpZiAobV91bml0VHlwZSA9PSBTVkdfTEVOR1RIVFlQ
RV9VTktOT1dOKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzd2l0Y2gobV91bml0VHlw
ZSkKLSAgICB7CisgICAgc3dpdGNoIChtX3VuaXRUeXBlKSB7CiAgICAgICAgIGNhc2UgU1ZHX0xF
TkdUSFRZUEVfUEVSQ0VOVEFHRToKICAgICAgICAgICAgIC8va2RFcnJvcigpIDw8ICJ1cGRhdGVW
YWx1ZUluU3BlY2lmaWVkVW5pdHMoKSBTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFIC0gVU5TVVBQ
T1JURUQhIFBsZWFzZSByZXBvcnQhIiA8PCBlbmRsOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMjkzLDEyICsyODcsMTIgQEAgdm9pZCBTVkdMZW5ndGg6OnNldEJib3hSZWxhdGl2ZShi
b29sIHJlbAogICAgIG1fYmJveFJlbGF0aXZlID0gcmVsYXRpdmU7CiB9CiAKLWNvbnN0IFNWR1N0
eWxlZEVsZW1lbnQgKlNWR0xlbmd0aDo6Y29udGV4dCgpIGNvbnN0Citjb25zdCBTVkdTdHlsZWRF
bGVtZW50KiBTVkdMZW5ndGg6OmNvbnRleHQoKSBjb25zdAogewogICAgIHJldHVybiBtX2NvbnRl
eHQ7CiB9CiAKLXZvaWQgU1ZHTGVuZ3RoOjpzZXRDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1l
bnQgKmNvbnRleHQpCit2b2lkIFNWR0xlbmd0aDo6c2V0Q29udGV4dChjb25zdCBTVkdTdHlsZWRF
bGVtZW50KiBjb250ZXh0KQogewogICAgIG1fY29udGV4dCA9IGNvbnRleHQ7CiB9CkluZGV4OiBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdMZW5ndGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdMZW5ndGguaAkocmV2aXNpb24gMTcwNjEpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdMZW5ndGguaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgot
ICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
CiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI1LDcgKzI1
LDcgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
LSNpbmNsdWRlIDxrc3ZnMi9zdmcvU1ZHSGVscGVyLmg+CisjaW5jbHVkZSAiU1ZHSGVscGVyLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzIsNyArNzIsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZvaWQgc2V0QmJveFJlbGF0aXZlKGJvb2wpOwogCiAgICAgICAgIGNv
bnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRD
b250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpOworICAgICAgICB2b2lkIHNl
dENvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCk7CiAKICAgICBwcml2YXRl
OgogICAgICAgICBib29sIHVwZGF0ZVZhbHVlSW5TcGVjaWZpZWRVbml0cyhib29sIG5vdGlmeSA9
IHRydWUpOwpAQCAtODgsOCArODgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNW
R0xlbmd0aFR5cGUgbV91bml0VHlwZSA6IDQ7CiAgICAgICAgIGJvb2wgbV9yZXF1aXJlc0xheW91
dCA6IDE7CiAKLSAgICAgICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqbV9jb250ZXh0OwotICAg
ICAgICBjb25zdCBTVkdFbGVtZW50ICptX3ZpZXdwb3J0RWxlbWVudDsKKyAgICAgICAgY29uc3Qg
U1ZHU3R5bGVkRWxlbWVudCogbV9jb250ZXh0OworICAgICAgICBjb25zdCBTVkdFbGVtZW50KiBt
X3ZpZXdwb3J0RWxlbWVudDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMZW5ndGhMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdMZW5ndGhMaXN0LmNwcAkocmV2aXNpb24gMTcwNjEpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdMZW5ndGhMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFu
biA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBw
cm9qZWN0CiAKQEAgLTIzLDkgKzIzLDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lmZGVm
IFNWR19TVVBQT1JUCisjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgogI2luY2x1ZGUgIlNWR01h
dHJpeC5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdMZW5ndGhM
aXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHTGVuZ3RoTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xlbmd0
aExpc3QuaAkocmV2aXNpb24gMTcwNjEpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMZW5ndGhM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAg
ICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAg
ICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNSw4ICsyNSw4IEBA
CiAKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSAiU1ZHTGlzdC5oIgogI2luY2x1ZGUg
IlNWR0xlbmd0aC5oIgorI2luY2x1ZGUgIlNWR0xpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUK
IHsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xvY2F0YWJsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTG9jYXRhYmxlLmNwcAkocmV2aXNpb24gMTcwNjEpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMb2NhdGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
S0RFIHByb2plY3QKIApAQCAtMjQsMTIgKzI0LDExIEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNp
bmNsdWRlICJTVkdMb2NhdGFibGUuaCIKIAotI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNs
dWRlICJSZW5kZXJQYXRoLmgiCiAjaW5jbHVkZSAiU1ZHTWF0cml4LmgiCiAjaW5jbHVkZSAiU1ZH
U1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgPGtjYW52YXMvUmVuZGVyUGF0aC5oPgogCi11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHTG9jYXRhYmxlOjpT
VkdMb2NhdGFibGUoKQogewpAQCAtMzksMTMgKzM4LDEzIEBAIFNWR0xvY2F0YWJsZTo6flNWR0xv
Y2F0YWJsZSgpCiB7CiB9CiAKLVNWR0VsZW1lbnQgKlNWR0xvY2F0YWJsZTo6bmVhcmVzdFZpZXdw
b3J0RWxlbWVudChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICplKQorU1ZHRWxlbWVudCogU1ZHTG9j
YXRhYmxlOjpuZWFyZXN0Vmlld3BvcnRFbGVtZW50KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGUp
CiB7Ci0gICAgTm9kZSAqbiA9IGUtPnBhcmVudE5vZGUoKTsKKyAgICBOb2RlKiBuID0gZS0+cGFy
ZW50Tm9kZSgpOwogICAgIHdoaWxlIChuICYmICFuLT5pc0RvY3VtZW50Tm9kZSgpKSB7CiAgICAg
ICAgIGlmIChuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpIHx8IG4tPmhhc1RhZ05hbWUo
U1ZHTmFtZXM6OnN5bWJvbFRhZykgfHwKICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoU1ZHTmFt
ZXM6OmltYWdlVGFnKSB8fCBuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmb3JlaWduT2JqZWN0VGFn
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50ICo+KG4pOworICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihuKTsKIAogICAgICAgICBu
ID0gbi0+cGFyZW50Tm9kZSgpOwogICAgIH0KQEAgLTUzLDE4ICs1MiwxOCBAQCBTVkdFbGVtZW50
ICpTVkdMb2NhdGFibGU6Om5lYXJlc3RWaWV3cG9yCiAgICAgcmV0dXJuIDA7CiB9CiAKLVNWR0Vs
ZW1lbnQgKlNWR0xvY2F0YWJsZTo6ZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoY29uc3QgU1ZHU3R5
bGVkRWxlbWVudCAqZSkKK1NWR0VsZW1lbnQqIFNWR0xvY2F0YWJsZTo6ZmFydGhlc3RWaWV3cG9y
dEVsZW1lbnQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogZSkKIHsKICAgICAvLyBGSVhNRSA6IGxp
a2VseSB0aGlzIHdpbGwgYmUgYWx3YXlzIHRoZSA8c3ZnPiBmYXJ0aGVzdCBhd2F5LgogICAgIC8v
IElmIHdlIGhhdmUgYSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24gb2YgZG9jdW1lbnRFbGVtZW50
KCksIG9uZQogICAgIC8vIHRoYXQgZ2l2ZSB0aGUgZG9jdW1lbnRFbGVtZW50KCkgb2YgdGhlIHN2
ZyBmcmFnbWVudCwgaXQgY291bGQgYmUKICAgICAvLyB1c2VkIGluc3RlYWQuIFRoaXMgZGVwZW5k
cyBvbiBjZGYgZGVtYW5kcyB0aG91Z2goUm9iLikKLSAgICBTVkdFbGVtZW50ICpmYXJ0aGVzdCA9
IDA7Ci0gICAgTm9kZSAqbiA9IGUtPnBhcmVudE5vZGUoKTsKKyAgICBTVkdFbGVtZW50KiBmYXJ0
aGVzdCA9IDA7CisgICAgTm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsKICAgICB3aGlsZSAobiAm
JiAhbi0+aXNEb2N1bWVudE5vZGUoKSkgewogICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShTVkdO
YW1lczo6c3ZnVGFnKSB8fCBuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzeW1ib2xUYWcpIHx8CiAg
ICAgICAgICAgICBuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjppbWFnZVRhZykgfHwgbi0+aGFzVGFn
TmFtZShTVkdOYW1lczo6Zm9yZWlnbk9iamVjdFRhZykpCi0gICAgICAgICAgICBmYXJ0aGVzdCA9
IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQgKj4obik7CisgICAgICAgICAgICBmYXJ0aGVzdCA9IHN0
YXRpY19jYXN0PFNWR0VsZW1lbnQqPihuKTsKIAogICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgp
OwogICAgIH0KQEAgLTc0LDcgKzczLDcgQEAgU1ZHRWxlbWVudCAqU1ZHTG9jYXRhYmxlOjpmYXJ0
aGVzdFZpZXdwbwogCiAvLyBTcGVjOgogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAwNS9XRC1T
VkdNb2JpbGUxMi0yMDA1MDQxMy9zdmd1ZG9tLmh0bWwjc3ZnOjpTVkdMb2NhdGFibGUKLUZsb2F0
UmVjdCBTVkdMb2NhdGFibGU6OmdldEJCb3goY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqZSkKK0Zs
b2F0UmVjdCBTVkdMb2NhdGFibGU6OmdldEJCb3goY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogZSkK
IHsKICAgICBGbG9hdFJlY3QgYmJveFJlY3Q7CiAgICAgCkBAIC04NiwxOSArODUsMTggQEAgRmxv
YXRSZWN0IFNWR0xvY2F0YWJsZTo6Z2V0QkJveChjb25zdCBTVgogICAgIHJldHVybiBiYm94UmVj
dDsKIH0KIAotU1ZHTWF0cml4ICpTVkdMb2NhdGFibGU6OmdldENUTShjb25zdCBTVkdFbGVtZW50
ICplbGVtZW50KQorU1ZHTWF0cml4KiBTVkdMb2NhdGFibGU6OmdldENUTShjb25zdCBTVkdFbGVt
ZW50KiBlbGVtZW50KQogewotICAgIGlmKCFlbGVtZW50KQorICAgIGlmICghZWxlbWVudCkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICBTVkdNYXRyaXggKmN0bSA9IFNWR1NWR0VsZW1lbnQ6OmNy
ZWF0ZVNWR01hdHJpeCgpOworICAgIFNWR01hdHJpeCogY3RtID0gU1ZHU1ZHRWxlbWVudDo6Y3Jl
YXRlU1ZHTWF0cml4KCk7CiAKLSAgICBOb2RlICpwYXJlbnQgPSBlbGVtZW50LT5wYXJlbnROb2Rl
KCk7CisgICAgTm9kZSogcGFyZW50ID0gZWxlbWVudC0+cGFyZW50Tm9kZSgpOwogICAgIGlmIChw
YXJlbnQgJiYgcGFyZW50LT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgU1ZHRWxlbWVudCAq
cGFyZW50RWxlbWVudCA9IHN2Z19keW5hbWljX2Nhc3QocGFyZW50KTsKLSAgICAgICAgaWYocGFy
ZW50RWxlbWVudCAmJiBwYXJlbnRFbGVtZW50LT5pc1N0eWxlZExvY2F0YWJsZSgpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBSZWZQdHI8U1ZHTWF0cml4PiBwYXJlbnRDVE0gPSBzdGF0aWNfY2Fz
dDxTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50ICo+KHBhcmVudEVsZW1lbnQpLT5nZXRDVE0oKTsK
KyAgICAgICAgU1ZHRWxlbWVudCogcGFyZW50RWxlbWVudCA9IHN2Z19keW5hbWljX2Nhc3QocGFy
ZW50KTsKKyAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQgJiYgcGFyZW50RWxlbWVudC0+aXNTdHls
ZWRMb2NhdGFibGUoKSkgeworICAgICAgICAgICAgUmVmUHRyPFNWR01hdHJpeD4gcGFyZW50Q1RN
ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCo+KHBhcmVudEVsZW1lbnQp
LT5nZXRDVE0oKTsKICAgICAgICAgICAgIGN0bS0+bXVsdGlwbHkocGFyZW50Q1RNLmdldCgpKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTEwNiwyMCArMTA0LDE4IEBAIFNWR01hdHJpeCAqU1ZHTG9j
YXRhYmxlOjpnZXRDVE0oY29uc3QgU1YKICAgICByZXR1cm4gY3RtOwogfQogCi1TVkdNYXRyaXgg
KlNWR0xvY2F0YWJsZTo6Z2V0U2NyZWVuQ1RNKGNvbnN0IFNWR0VsZW1lbnQgKmVsZW1lbnQpCitT
VkdNYXRyaXgqIFNWR0xvY2F0YWJsZTo6Z2V0U2NyZWVuQ1RNKGNvbnN0IFNWR0VsZW1lbnQqIGVs
ZW1lbnQpCiB7Ci0gICAgaWYoIWVsZW1lbnQpCisgICAgaWYgKCFlbGVtZW50KQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIFNWR01hdHJpeCAqY3RtID0gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZH
TWF0cml4KCk7CisgICAgU1ZHTWF0cml4KiBjdG0gPSBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdN
YXRyaXgoKTsKIAotICAgIE5vZGUgKnBhcmVudCA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKLSAg
ICBpZihwYXJlbnQgJiYgcGFyZW50LT5pc0VsZW1lbnROb2RlKCkpCi0gICAgewotICAgICAgICBT
VkdFbGVtZW50ICpwYXJlbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCAqPihwYXJl
bnQpOwotICAgICAgICBpZihwYXJlbnRFbGVtZW50LT5pc1N0eWxlZExvY2F0YWJsZSgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBSZWZQdHI8U1ZHTWF0cml4PiBwYXJlbnRDVE0gPSBzdGF0aWNf
Y2FzdDxTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50ICo+KHBhcmVudEVsZW1lbnQpLT5nZXRTY3Jl
ZW5DVE0oKTsKKyAgICBOb2RlKiBwYXJlbnQgPSBlbGVtZW50LT5wYXJlbnROb2RlKCk7CisgICAg
aWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICBTVkdFbGVt
ZW50KiBwYXJlbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBhcmVudCk7Cisg
ICAgICAgIGlmIChwYXJlbnRFbGVtZW50LT5pc1N0eWxlZExvY2F0YWJsZSgpKSB7CisgICAgICAg
ICAgICBSZWZQdHI8U1ZHTWF0cml4PiBwYXJlbnRDVE0gPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRM
b2NhdGFibGVFbGVtZW50Kj4ocGFyZW50RWxlbWVudCktPmdldFNjcmVlbkNUTSgpOwogICAgICAg
ICAgICAgY3RtLT5tdWx0aXBseShwYXJlbnRDVE0uZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQpA
QCAtMTI3LDYgKzEyMyw4IEBAIFNWR01hdHJpeCAqU1ZHTG9jYXRhYmxlOjpnZXRTY3JlZW5DVE0o
Y28KICAgICByZXR1cm4gY3RtOwogfQogCit9CisKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCiAv
LyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdOdW1iZXJMaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdOdW1iZXJMaXN0LmNwcAkocmV2
aXNpb24gMTcwNjEpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdOdW1iZXJMaXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAg
ICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAg
MjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIzLDExICsyMywxMiBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogCiAjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJTVkdOdW1iZXJM
aXN0LmgiCisKICNpbmNsdWRlICJTVkdNYXRyaXguaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50
LmgiCi0jaW5jbHVkZSAiU1ZHTnVtYmVyTGlzdC5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHTnVtYmVyTGlzdDo6U1ZHTnVtYmVyTGlzdCgp
CiAgICAgOiBTVkdMaXN0PGRvdWJsZT4oKQpAQCAtNDcsNiArNDgsOCBAQCB2b2lkIFNWR051bWJl
ckxpc3Q6OnBhcnNlKGNvbnN0IFN0cmluZyYgCiAgICAgICAgIGFwcGVuZEl0ZW0obnVtYmVyc1tp
XS50b0RvdWJsZSgpLCBlYyk7CiB9CiAKK30KKwogLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8v
IFNWR19TVVBQT1JUCiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR051bWJlckxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHJldmlzaW9u
IDE3MDYxKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTnVtYmVyTGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlr
b2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAy
MDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjksNyArMjksNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZQogewotICAgIGNsYXNzIERlcHJlY2F0ZWRTdHJpbmc7CisgICAgY2xhc3MgU3RyaW5nOwog
CiAgICAgY2xhc3MgU1ZHTnVtYmVyTGlzdCA6IHB1YmxpYyBTVkdMaXN0PGRvdWJsZT4KICAgICB7
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAko
cmV2aXNpb24gMTcwNjEpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAg
ICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIyLDE0ICsyMiwx
NCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRl
ICJrc3ZnLmgiCisjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgorCiAjaW5jbHVk
ZSAiU1ZHTWF0cml4LmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlNW
R1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKGNvbnN0IFNWR1N0eWxlZEVs
ZW1lbnQgKmNvbnRleHQpCitTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNvbnRleHQpCiAgICAgOiBTaGFyZWQ8U1ZH
UHJlc2VydmVBc3BlY3RSYXRpbz4oKQogICAgICwgbV9hbGlnbihTVkdfUFJFU0VSVkVBU1BFQ1RS
QVRJT19YTUlEWU1JRCkKICAgICAsIG1fbWVldE9yU2xpY2UoU1ZHX01FRVRPUlNMSUNFX01FRVQp
CkBAIC0xMDEsMTAgKzEwMSwxMiBAQCB2b2lkIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnBhcnNl
UHJlc2VyCiAgICAgICAgIG1fY29udGV4dC0+bm90aWZ5QXR0cmlidXRlQ2hhbmdlKCk7CiB9CiAK
LVNWR01hdHJpeCAqU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6Z2V0Q1RNKGZsb2F0IGxvZ2ljWCwg
ZmxvYXQgbG9naWNZLCBmbG9hdCBsb2dpY1dpZHRoLCBmbG9hdCBsb2dpY0hlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgLypwaHlz
WCovLCBmbG9hdCAvKnBoeXNZKi8sIGZsb2F0IHBoeXNXaWR0aCwgZmxvYXQgcGh5c0hlaWdodCkK
K1NWR01hdHJpeCogU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6Z2V0Q1RNKGZsb2F0IGxvZ2ljWCwg
ZmxvYXQgbG9naWNZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgbG9naWNXaWR0aCwgZmxvYXQgbG9naWNIZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAvKnBoeXNYKi8sIGZsb2F0IC8qcGh5c1kqLywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHBoeXNXaWR0
aCwgZmxvYXQgcGh5c0hlaWdodCkKIHsKLSAgICBTVkdNYXRyaXggKnRlbXAgPSBTVkdTVkdFbGVt
ZW50OjpjcmVhdGVTVkdNYXRyaXgoKTsKKyAgICBTVkdNYXRyaXgqIHRlbXAgPSBTVkdTVkdFbGVt
ZW50OjpjcmVhdGVTVkdNYXRyaXgoKTsKIAogICAgIGlmIChhbGlnbigpID09IFNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX1VOS05PV04pCiAgICAgICAgIHJldHVybiB0ZW1wOwpJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaAkocmV2aXNpb24gMTcwNjEpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtv
bGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIw
MDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yOSw2ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorICAgIGNsYXNzIFN0cmluZzsKICAgICBjbGFzcyBTVkdNYXRyaXg7CiAgICAgY2xh
c3MgU1ZHU3R5bGVkRWxlbWVudDsKIApAQCAtNTQsNyArNTUsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgICAgICBTVkdfTUVFVE9SU0xJQ0VfU0xJQ0UgICAgICA9IDIKICAgICAgICAg
fTsKIAotICAgICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKGNvbnN0IFNWR1N0eWxlZEVsZW1l
bnQgKmNvbnRleHQpOworICAgICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKGNvbnN0IFNWR1N0
eWxlZEVsZW1lbnQqIGNvbnRleHQpOwogICAgICAgICB2aXJ0dWFsIH5TVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvKCk7CiAKICAgICAgICAgdm9pZCBzZXRBbGlnbih1bnNpZ25lZCBzaG9ydCk7CkBAIC02
MywxMCArNjQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldE1lZXRP
clNsaWNlKHVuc2lnbmVkIHNob3J0KTsKICAgICAgICAgdW5zaWduZWQgc2hvcnQgbWVldE9yU2xp
Y2UoKSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIFNWR01hdHJpeCAqZ2V0Q1RNKGZsb2F0IGxv
Z2ljWCwgZmxvYXQgbG9naWNZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQg
bG9naWNXaWR0aCwgZmxvYXQgbG9naWNIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCBwaHlzWCwgZmxvYXQgcGh5c1ksIGZsb2F0IHBoeXNXaWR0aCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHBoeXNIZWlnaHQpOworICAgICAgICBTVkdNYXRy
aXgqIGdldENUTShmbG9hdCBsb2dpY1gsIGZsb2F0IGxvZ2ljWSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgbG9naWNXaWR0aCwgZmxvYXQgbG9naWNIZWlnaHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IHBoeXNYLCBmbG9hdCBwaHlzWSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgcGh5c1dpZHRoLCBmbG9hdCBwaHlzSGVpZ2h0KTsKIAogICAgICAg
ICAvLyBIZWxwZXIKICAgICAgICAgdm9pZCBwYXJzZVByZXNlcnZlQXNwZWN0UmF0aW8oY29uc3Qg
U3RyaW5nJik7CkBAIC03NSw3ICs3Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dW5zaWduZWQgc2hvcnQgbV9hbGlnbjsKICAgICAgICAgdW5zaWduZWQgc2hvcnQgbV9tZWV0T3JT
bGljZTsKIAotICAgICAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICptX2NvbnRleHQ7CisgICAg
ICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIG1fY29udGV4dDsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHJpbmdMaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHJpbmdMaXN0LmNwcAkocmV2
aXNpb24gMTcwNjEpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHJpbmdMaXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAg
ICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAg
MjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTIxLDcgKzIxLDYgQEAKICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLQogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHU3Ry
aW5nTGlzdC5oIgogCkBAIC00NSw3ICs0NCw3IEBAIHZvaWQgU1ZHU3RyaW5nTGlzdDo6cmVzZXQo
Y29uc3QgU3RyaW5nJiAKICAgICAgICAgYXBwZW5kSXRlbShTdHJpbmcoIiIpLCBlYyk7IC8vIENy
ZWF0ZSBlbXB0eSBzdHJpbmcuLi4KICAgICB9IGVsc2UgewogICAgICAgICBWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdmVjdG9yLmVuZCgpOwotICAgICAgICBmb3IoVmVjdG9y
PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdmVjdG9yLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB2
ZWN0b3IuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgYXBwZW5kSXRlbSgq
aXQsIGVjKTsKICAgICB9CiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHJpbmdMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3RyaW5nTGlzdC5oCShyZXZp
c2lvbiAxNzA2MSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0cmluZ0xpc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAw
NCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI1LDggKzI1LDggQEAKIAogI2lmZGVmIFNW
R19TVVBQT1JUCiAKLSNpbmNsdWRlICJTVkdMaXN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlICJTVkdMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR1N0eWxhYmxlLmNwcAkocmV2aXNpb24gMTcwNjEpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdTdHlsYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdp
bGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAogCkBAIC0yNCw3ICsyNCw3IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdT
dHlsYWJsZS5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogU1ZHU3R5bGFibGU6OlNWR1N0eWxhYmxlKCkKIHsKQEAgLTM0LDYgKzM0LDggQEAgU1ZH
U3R5bGFibGU6On5TVkdTdHlsYWJsZSgpCiB7CiB9CiAKK30KKwogLy8gdmltOnRzPTQ6bm9ldAog
I2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxh
YmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGFibGUuaAkocmV2
aXNpb24gMTcwNjEpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsYWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0
LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjQsMTMgKzI0LDEyIEBACiAjZGVmaW5lIEtT
VkdfU1ZHU3R5bGFibGVJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgU3RyaW5n
OwogICAgIGNsYXNzIENTU1ZhbHVlOwogICAgIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247Cisg
ICAgY2xhc3MgU3RyaW5nOworICAgIGNsYXNzIFN0cmluZ0ltcGw7CiAKICAgICBjbGFzcyBTVkdT
dHlsYWJsZSB7CiAgICAgcHVibGljOgpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGVzdHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1Rlc3RzLmNwcAkocmV2aXNp
b24gMTcwNjEpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXN0cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtv
bGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIw
MDUgUm9iLCAyMDA2IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxMyArMjQsMTIgQEAKICNpZmRlZiBTVkdfU1VQ
UE9SVAogI2luY2x1ZGUgIlNWR1Rlc3RzLmgiCiAKKyNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlv
bi5oIgogI2luY2x1ZGUgIkxhbmd1YWdlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZH
U3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIkF0dHIuaCIKLSNpbmNsdWRlICJET01JbXBsZW1lbnRh
dGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyLDE3ICs0MSwxNyBAQCBTVkdU
ZXN0czo6flNWR1Rlc3RzKCkKIHsKIH0KIAotU1ZHU3RyaW5nTGlzdCAqU1ZHVGVzdHM6OnJlcXVp
cmVkRmVhdHVyZXMoKSBjb25zdAorU1ZHU3RyaW5nTGlzdCogU1ZHVGVzdHM6OnJlcXVpcmVkRmVh
dHVyZXMoKSBjb25zdAogewogICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdTdHJpbmdMaXN0Piht
X2ZlYXR1cmVzKTsKIH0KIAotU1ZHU3RyaW5nTGlzdCAqU1ZHVGVzdHM6OnJlcXVpcmVkRXh0ZW5z
aW9ucygpIGNvbnN0CitTVkdTdHJpbmdMaXN0KiBTVkdUZXN0czo6cmVxdWlyZWRFeHRlbnNpb25z
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHU3RyaW5nTGlzdD4obV9leHRl
bnNpb25zKTsKIH0KIAotU1ZHU3RyaW5nTGlzdCAqU1ZHVGVzdHM6OnN5c3RlbUxhbmd1YWdlKCkg
Y29uc3QKK1NWR1N0cmluZ0xpc3QqIFNWR1Rlc3RzOjpzeXN0ZW1MYW5ndWFnZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR1N0cmluZ0xpc3Q+KG1fc3lzdGVtTGFuZ3VhZ2Up
OwogfQpAQCAtNjYsMTAgKzY1LDEwIEBAIGJvb2wgU1ZHVGVzdHM6OmlzVmFsaWQoKSBjb25zdAog
ewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCi0gICAgU1ZHU3RyaW5nTGlzdCAqbGlzdCA9
IHJlcXVpcmVkRmVhdHVyZXMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7aSA8IGxp
c3QtPm51bWJlck9mSXRlbXMoKTtpKyspIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gU3RyaW5n
KGxpc3QtPmdldEl0ZW0oaSwgZWMpKTsKLSAgICAgICAgaWYodmFsdWUuaXNFbXB0eSgpIHx8ICFE
T01JbXBsZW1lbnRhdGlvbjo6aW5zdGFuY2UoKS0+aGFzRmVhdHVyZSh2YWx1ZSwgU3RyaW5nKCkp
KQorICAgIFNWR1N0cmluZ0xpc3QqIGxpc3QgPSByZXF1aXJlZEZlYXR1cmVzKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgbGlzdC0+bnVtYmVyT2ZJdGVtcygpOyBpKyspIHsK
KyAgICAgICAgU3RyaW5nIHZhbHVlID0gbGlzdC0+Z2V0SXRlbShpLCBlYyk7CisgICAgICAgIGlm
ICh2YWx1ZS5pc0VtcHR5KCkgfHwgIURPTUltcGxlbWVudGF0aW9uOjppbnN0YW5jZSgpLT5oYXNG
ZWF0dXJlKHZhbHVlLCBTdHJpbmcoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCkBAIC03OSwxMyArNzgsMTMgQEAgYm9vbCBTVkdUZXN0czo6aXNWYWxpZCgpIGNvbnN0CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBsaXN0ID0gcmVxdWlyZWRFeHRlbnNpb25z
KCk7Ci0gICAgaWYobGlzdC0+bnVtYmVyT2ZJdGVtcygpID4gMCkKKyAgICBpZiAobGlzdC0+bnVt
YmVyT2ZJdGVtcygpID4gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSAqYXR0cikKK2Jvb2wgU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUo
KTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyZXF1aXJlZEZlYXR1cmVzQXR0
cikgewpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGVzdHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXN0cy5oCShyZXZpc2lvbiAxNzA2MSkKKysrIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1Rlc3RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hA
a2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBA
IC0zOCwxNSArMzgsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIH5T
VkdUZXN0cygpOwogCiAgICAgICAgIC8vICdTVkdUZXN0cycgZnVuY3Rpb25zCi0gICAgICAgIFNW
R1N0cmluZ0xpc3QgKnJlcXVpcmVkRmVhdHVyZXMoKSBjb25zdDsKLSAgICAgICAgU1ZHU3RyaW5n
TGlzdCAqcmVxdWlyZWRFeHRlbnNpb25zKCkgY29uc3Q7Ci0gICAgICAgIFNWR1N0cmluZ0xpc3Qg
KnN5c3RlbUxhbmd1YWdlKCkgY29uc3Q7CisgICAgICAgIFNWR1N0cmluZ0xpc3QqIHJlcXVpcmVk
RmVhdHVyZXMoKSBjb25zdDsKKyAgICAgICAgU1ZHU3RyaW5nTGlzdCogcmVxdWlyZWRFeHRlbnNp
b25zKCkgY29uc3Q7CisgICAgICAgIFNWR1N0cmluZ0xpc3QqIHN5c3RlbUxhbmd1YWdlKCkgY29u
c3Q7CiAKICAgICAgICAgYm9vbCBoYXNFeHRlbnNpb24oY29uc3QgU3RyaW5nJikgY29uc3Q7CiAK
ICAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAgICAgICAgIAotICAgICAgICBib29sIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CisgICAgICAgIGJvb2wg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdTdHJpbmdMaXN0PiBtX2ZlYXR1cmVzOwpJbmRleDog
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJKHJldmlzaW9uIDE3MDYxKQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFpp
bW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIw
MDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBLREUgcHJvamVjdAogCkBAIC0yMiwyMiArMjIsMTYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24uaCIKLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNpbmNsdWRlICJBdHRyLmgiCi0KLSNpbmNsdWRlIDxr
Y2FudmFzL1JlbmRlclBhdGguaD4KKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1hYmxlLmgiCiAKLSNp
bmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCiAjaW5j
bHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTWF0cml4LmgiCi0jaW5jbHVkZSAiU1ZH
VHJhbnNmb3JtYWJsZS5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHU3R5
bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKLSNpbmNsdWRlICJr
c3ZnLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBTVkdUcmFuc2Zvcm1hYmxlOjpTVkdUcmFuc2Zvcm1hYmxlKCkgOiBTVkdMb2NhdGFibGUoKQog
ewpAQCAtNDcsNyArNDEsNyBAQCBTVkdUcmFuc2Zvcm1hYmxlOjp+U1ZHVHJhbnNmb3JtYWJsZSgp
CiB7CiB9CiAKLXZvaWQgU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUo
U1ZHVHJhbnNmb3JtTGlzdCAqbGlzdCwgY29uc3QgQXRvbWljU3RyaW5nJiB0cmFuc2Zvcm0pCit2
b2lkIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0cmlidXRlKFNWR1RyYW5zZm9y
bUxpc3QqIGxpc3QsIGNvbnN0IEF0b21pY1N0cmluZyYgdHJhbnNmb3JtKQogewogICAgIC8vIFNw
bGl0IHN0cmluZyBmb3IgaGFuZGxpbmcgMSB0cmFuc2Zvcm0gc3RhdGVtZW50IGF0IGEgdGltZQog
ICAgIFZlY3RvcjxTdHJpbmc+IHN1YnRyYW5zZm9ybXMgPSB0cmFuc2Zvcm0uZG9tU3RyaW5nKCku
c2ltcGxpZnlXaGl0ZVNwYWNlKCkuc3BsaXQoJyknKTsKQEAgLTEwMywxMiArOTcsMTIgQEAgdm9p
ZCBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybUF0dAogICAgICAgICBlbHNlIGlmIChz
dWJ0cmFuc2Zvcm1bMF0gPT0gInNrZXd5IiAmJiAocGFyYW1zLnNpemUoKSA9PSAxKSkKICAgICAg
ICAgICAgIHQtPnNldFNrZXdZKHBhcmFtc1swXS50b0RvdWJsZSgpKTsKICAgICAgICAgZWxzZSBp
ZiAoc3VidHJhbnNmb3JtWzBdID09ICJtYXRyaXgiICYmIChwYXJhbXMuc2l6ZSgpID09IDYpKSB7
Ci0gICAgICAgICAgICBTVkdNYXRyaXggKnJldCA9IG5ldyBTVkdNYXRyaXgocGFyYW1zWzBdLnRv
RG91YmxlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbMV0udG9Eb3VibGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1syXS50b0RvdWJsZSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzNdLnRvRG91Ymxl
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbNF0udG9Eb3VibGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtc1s1XS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIFNWR01h
dHJpeCogcmV0ID0gbmV3IFNWR01hdHJpeChwYXJhbXNbMF0udG9Eb3VibGUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbMV0udG9Eb3VibGUoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbMl0udG9E
b3VibGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bXNbM10udG9Eb3VibGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbNF0udG9Eb3VibGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbXNbNV0udG9Eb3VibGUoKSk7CiAgICAgICAgICAgICB0LT5zZXRN
YXRyaXgocmV0KTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEyMiw2ICsxMTYsOCBAQCB2b2lk
IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0CiAgICAgfQogfQogCit9CisKIC8v
IHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHVHJhbnNmb3JtYWJsZS5oCShyZXZpc2lvbiAxNzA2MSkKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZv
eEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAK
QEAgLTI4LDExICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLSAgICBjbGFz
cyBBZmZpbmVUcmFuc2Zvcm07CiAgICAgY2xhc3MgQXRvbWljU3RyaW5nOwotICAgIGNsYXNzIEF0
dHJpYnV0ZTsKLSAgICBjbGFzcyBOb2RlOwotICAgIGNsYXNzIFNWR1RyYW5zZm9ybUxpc3Q7CiAg
ICAgY2xhc3MgU1ZHTWF0cml4OwogICAgIGNsYXNzIFNWR1RyYW5zZm9ybUxpc3Q7CiAKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcAkocmV2aXNpb24gMTcwNjEpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
S0RFIHByb2plY3QKIApAQCAtMjIsMTQgKzIyLDEyIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpZmRlZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlICJBdHRyLmgi
CisjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgot
I2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKLSNpbmNsdWRl
ICJTVkdVUklSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNW
R1N0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJYTGlua05hbWVzLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNDMsNyArNDEsNyBAQCBTVkdVUklSZWZlcmVuY2U6On5TVkdVUklSZWZl
cmVuY2UoKQogCiBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OU19XSVRIX0NPTlRFWFQoU1ZH
VVJJUmVmZXJlbmNlLCBTdHJpbmcsIFN0cmluZywgc3RyaW5nLCBIcmVmLCBocmVmLCBYTGlua05h
bWVzOjpocmVmQXR0ci5sb2NhbE5hbWUoKSwgbV9ocmVmKQogCi1ib29sIFNWR1VSSVJlZmVyZW5j
ZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQorYm9vbCBTVkdV
UklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikK
IHsKICAgICBpZiAoYXR0ci0+bmFtZSgpLm1hdGNoZXMoWExpbmtOYW1lczo6aHJlZkF0dHIpKSB7
CiAgICAgICAgIHNldEhyZWZCYXNlVmFsdWUoYXR0ci0+dmFsdWUoKSk7CkluZGV4OiBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdab29tQW5kUGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdab29tQW5kUGFuLmNwcAkocmV2aXNpb24gMTcwNjEpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdab29tQW5kUGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZv
eEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAK
QEAgLTIyLDE0ICsyMiwxMSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NV
UFBPUlQKLSNpbmNsdWRlICJBdHRyLmgiCi0jaW5jbHVkZSAiTWFwcGVkQXR0cmlidXRlLmgiCisj
aW5jbHVkZSAiU1ZHWm9vbUFuZFBhbi5oIgogCi0jaW5jbHVkZSAia3N2Zy5oIgotI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHWm9vbUFuZFBhbi5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUyLDEzICs0OSwxMyBAQCB2b2lkIFNWR1pv
b21BbmRQYW46OnNldFpvb21BbmRQYW4odW5zaWduCiAgICAgbV96b29tQW5kUGFuID0gem9vbUFu
ZFBhbjsKIH0KIAotYm9vbCBTVkdab29tQW5kUGFuOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUgKmF0dHIpCitib29sIFNWR1pvb21BbmRQYW46OnBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0g
YXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp6b29tQW5k
UGFuQXR0cikgewotICAgICAgICBpZih2YWx1ZSA9PSAiZGlzYWJsZSIpCisgICAgICAgIGlmICh2
YWx1ZSA9PSAiZGlzYWJsZSIpCiAgICAgICAgICAgICBzZXRab29tQW5kUGFuKFNWR1NWR0VsZW1l
bnQ6OlNWR19aT09NQU5EUEFOX0RJU0FCTEUpOwotICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJt
YWduaWZ5IikKKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gIm1hZ25pZnkiKQogICAgICAgICAg
ICAgc2V0Wm9vbUFuZFBhbihTVkdTVkdFbGVtZW50OjpTVkdfWk9PTUFORFBBTl9NQUdOSUZZKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
Wm9vbUFuZFBhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1pvb21BbmRQ
YW4uaAkocmV2aXNpb24gMTcwNjEpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdab29tQW5kUGFu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAg
ICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAg
ICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0zNyw3ICszNyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdW5zaWduZWQgc2hvcnQgem9vbUFuZFBhbigpIGNv
bnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Wm9vbUFuZFBhbih1bnNpZ25lZCBzaG9ydCB6
b29tQW5kUGFuKTsKIAotICAgICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cik7CisgICAgICAgIGJvb2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBzaG9ydCBtX3pv
b21BbmRQYW47Cg==
</data>
<flag name="review"
          id="3774"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11114</attachid>
            <date>2006-10-16 12:31:02 -0700</date>
            <delta_ts>2006-10-31 11:19:26 -0800</delta_ts>
            <desc>First attempt</desc>
            <filename>11217-clipping-painting.diff</filename>
            <type>text/plain</type>
            <size>20208</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzA2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMDYtMTAtMTYgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIHN2ZyBjbGlwcGlu
ZyBhbmQgcGFpbnRpbmcgY2xhc3Nlcy4KKworICAgICAgICAqIGtzdmcyL3N2Zy9TVkdDbGlwUGF0
aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2xpcFBhdGhFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDbGlwUGF0aEVsZW1lbnQ6
OmNhbnZhc1Jlc291cmNlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50
Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTWFya2VyRWxlbWVudDo6U1ZHTWFya2VyRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdNYXJrZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdNYXJrZXJFbGVtZW50OjpzZXRPcmllbnRUb0FuZ2xlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR01hcmtlckVsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKToKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHTWFya2VyRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFya2Vy
RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR01hc2tF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVtZW50OjpTVkdNYXNrRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXNrRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OmRyYXdNYXNrZXJDb250
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVtZW50OjpjYW52YXNSZXNvdXJjZSk6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR01hc2tFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdNYXNrRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR1BhaW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50OjpzZXRQYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYWludDo6Y3NzVGV4dCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR1BhaW50Lmg6CisKIDIwMDYtMTAtMTYgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgogCiAgICAgICAgIEZpeCBmb3IgYnVnIDkzNDcsIHBvc2l0aW9uZWQgZWxlbWVudHMgaGF2ZSB0
aGUgd3JvbmcgY29udGFpbmluZyBibG9jay4gIFRoaXMgaXMgYSBjaGFuZ2UgZnJvbSBDU1MyIHRv
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE3MDY5KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAg
ICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAg
MjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDIwICsyNCwxNyBAQAogI2lmZGVm
IFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHQ2xpcFBhdGhFbGVtZW50LmgiCiAKLSNpbmNsdWRl
ICJBdHRyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
CisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgot
I2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHTWF0cml4LmgiCi0jaW5jbHVkZSAi
U1ZHUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCisjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKLSNpbmNsdWRlIDxrY2Fu
dmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CisjaW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rv
ci5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAot
U1ZHQ2xpcFBhdGhFbGVtZW50OjpTVkdDbGlwUGF0aEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKK1NWR0NsaXBQYXRoRWxlbWVudDo6U1ZHQ2xpcFBh
dGhFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAg
ICAgOiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCBT
VkdUZXN0cygpCiAgICAgLCBTVkdMYW5nU3BhY2UoKQpAQCAtNTQsNyArNTEsNyBAQCBTVkdDbGlw
UGF0aEVsZW1lbnQ6On5TVkdDbGlwUGF0aEVsZW1lbnQoCiAKIEFOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR0NsaXBQYXRoRWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwgZW51bWVyYXRp
b24sIENsaXBQYXRoVW5pdHMsIGNsaXBQYXRoVW5pdHMsIFNWR05hbWVzOjpjbGlwUGF0aFVuaXRz
QXR0ci5sb2NhbE5hbWUoKSwgbV9jbGlwUGF0aFVuaXRzKQogCi12b2lkIFNWR0NsaXBQYXRoRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBT
VkdDbGlwUGF0aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSog
YXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpjbGlwUGF0aFVuaXRzQXR0cikgewpAQCAtNzMs
MzUgKzcwLDM3IEBAIHZvaWQgU1ZHQ2xpcFBhdGhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHIKICAg
ICB9CiB9CiAKLUtDYW52YXNDbGlwcGVyICpTVkdDbGlwUGF0aEVsZW1lbnQ6OmNhbnZhc1Jlc291
cmNlKCkKK0tDYW52YXNDbGlwcGVyKiBTVkdDbGlwUGF0aEVsZW1lbnQ6OmNhbnZhc1Jlc291cmNl
KCkKIHsKICAgICBpZiAoIXZpZXcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFtX2Ns
aXBwZXIpCi0gICAgICAgIG1fY2xpcHBlciA9IHN0YXRpY19jYXN0PEtDYW52YXNDbGlwcGVyICo+
KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVSZXNvdXJjZShSU19DTElQUEVSKSk7CisgICAgICAg
IG1fY2xpcHBlciA9IHN0YXRpY19jYXN0PEtDYW52YXNDbGlwcGVyKj4ocmVuZGVyaW5nRGV2aWNl
KCktPmNyZWF0ZVJlc291cmNlKFJTX0NMSVBQRVIpKTsKICAgICBlbHNlCiAgICAgICAgIG1fY2xp
cHBlci0+cmVzZXRDbGlwRGF0YSgpOwogCiAgICAgYm9vbCBiYm94ID0gY2xpcFBhdGhVbml0cygp
ID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKIAotICAg
IFJlbmRlclN0eWxlICpjbGlwUGF0aFN0eWxlID0gc3R5bGVGb3JSZW5kZXJlcihwYXJlbnQoKS0+
cmVuZGVyZXIoKSk7IC8vIEZJWE1FOiBNYW51YWwgc3R5bGUgcmVzb2x1dGlvbiBpcyBhIGhhY2sK
LSAgICBmb3IgKE5vZGUgKm4gPSBmaXJzdENoaWxkKCk7IG4gIT0gMDsgbiA9IG4tPm5leHRTaWJs
aW5nKCkpIHsKLSAgICAgICAgU1ZHRWxlbWVudCAqZSA9IHN2Z19keW5hbWljX2Nhc3Qobik7Cisg
ICAgUmVuZGVyU3R5bGUqIGNsaXBQYXRoU3R5bGUgPSBzdHlsZUZvclJlbmRlcmVyKHBhcmVudCgp
LT5yZW5kZXJlcigpKTsgLy8gRklYTUU6IE1hbnVhbCBzdHlsZSByZXNvbHV0aW9uIGlzIGEgaGFj
aworICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Q2hpbGQoKTsgbiAhPSAwOyBuID0gbi0+bmV4dFNp
YmxpbmcoKSkgeworICAgICAgICBTVkdFbGVtZW50KiBlID0gc3ZnX2R5bmFtaWNfY2FzdChuKTsK
ICAgICAgICAgaWYgKGUgJiYgZS0+aXNTdHlsZWQoKSkgewotICAgICAgICAgICAgU1ZHU3R5bGVk
RWxlbWVudCAqc3R5bGVkID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCAqPihlKTsKLSAg
ICAgICAgICAgIFJlbmRlclN0eWxlICpwYXRoU3R5bGUgPSBkb2N1bWVudCgpLT5zdHlsZVNlbGVj
dG9yKCktPnN0eWxlRm9yRWxlbWVudChzdHlsZWQsIGNsaXBQYXRoU3R5bGUpOworICAgICAgICAg
ICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVu
dCo+KGUpOworICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhdGhTdHlsZSA9IGRvY3VtZW50KCkt
PnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHN0eWxlZCwgY2xpcFBhdGhTdHlsZSk7
CiAgICAgICAgICAgICBQYXRoIHBhdGhEYXRhID0gc3R5bGVkLT50b1BhdGhEYXRhKCk7CiAgICAg
ICAgICAgICBpZiAoZS0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpCi0gICAgICAgICAgICAgICAg
cGF0aERhdGEudHJhbnNmb3JtKHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50ICo+KGUpLT5sb2NhbE1hdHJpeCgpLT5tYXRyaXgoKSk7CisgICAgICAgICAgICAgICAgcGF0
aERhdGEudHJhbnNmb3JtKHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
Kj4oZSktPmxvY2FsTWF0cml4KCktPm1hdHJpeCgpKTsKICAgICAgICAgICAgIGlmICghcGF0aERh
dGEuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIG1fY2xpcHBlci0+YWRkQ2xpcERhdGEocGF0
aERhdGEsIHBhdGhTdHlsZS0+c3ZnU3R5bGUoKS0+Y2xpcFJ1bGUoKSwgYmJveCk7Ci0gICAgICAg
ICAgICBwYXRoU3R5bGUtPmRlcmVmKHZpZXcoKS0+cmVuZGVyQXJlbmEoKSk7CisgICAgICAgICAg
ICBwYXRoU3R5bGUtPmRlcmVmKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpOwogICAgICAgICB9
CiAgICAgfQotICAgIGNsaXBQYXRoU3R5bGUtPmRlcmVmKHZpZXcoKS0+cmVuZGVyQXJlbmEoKSk7
CisgICAgY2xpcFBhdGhTdHlsZS0+ZGVyZWYoZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7CiAg
ICAgcmV0dXJuIG1fY2xpcHBlcjsKIH0KIAorfQorCiAvLyB2aW06dHM9NDpub2V0CiAjZW5kaWYg
Ly8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50
LmgJKHJldmlzaW9uIDE3MDY5KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAg
ICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAg
ICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxOSArMjQsMTgg
QEAKICNkZWZpbmUgS1NWR19TVkdDbGlwUGF0aEVsZW1lbnRJbXBsX0gKICNpZmRlZiBTVkdfU1VQ
UE9SVAogCi0jaW5jbHVkZSAiU1ZHVGVzdHMuaCIKKyNpbmNsdWRlICJLQ2FudmFzQ2xpcHBlci5o
IgorI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKICNpbmNsdWRlICJT
VkdMYW5nU3BhY2UuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5o
IgotI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKLQotI2luY2x1ZGUg
IktDYW52YXNDbGlwcGVyLmgiCisjaW5jbHVkZSAiU1ZHVGVzdHMuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUKIHsKICAgICBjbGFzcyBTVkdDbGlwUGF0aEVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1YmxpYyBTVkdUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR0xhbmdTcGFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVibGljIFNWR0xhbmdTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZAogICAgIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIFNWR0NsaXBQYXRoRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
QEAgLTQ0LDEwICs0MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICAKICAgICAgICAg
dmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgp
OyB9CiAKLSAgICAgICAgdmlydHVhbCBLQ2FudmFzQ2xpcHBlciAqY2FudmFzUmVzb3VyY2UoKTsK
KyAgICAgICAgdmlydHVhbCBLQ2FudmFzQ2xpcHBlciogY2FudmFzUmVzb3VyY2UoKTsKIAogICAg
ICAgICAvLyAnU1ZHQ2xpcFBhdGhFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKIAog
ICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KQEAgLTU3LDcgKzU2LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUKIAogICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZH
Q2xpcFBhdGhFbGVtZW50LCBpbnQsIGludCwgQ2xpcFBhdGhVbml0cywgY2xpcFBhdGhVbml0cykK
IAotICAgICAgICBLQ2FudmFzQ2xpcHBlciAqbV9jbGlwcGVyOworICAgICAgICBLQ2FudmFzQ2xp
cHBlciogbV9jbGlwcGVyOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzA2OSkKKysr
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBa
aW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAy
MDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgS0RFIHByb2plY3QKIApAQCAtMjQsNyArMjQsNiBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAj
aW5jbHVkZSAiU1ZHTWFya2VyRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1
ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgpAQCAtMzYsMTEgKzM1LDEwIEBACiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCiAjaW5j
bHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgImtzdmcuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1TVkdNYXJrZXJFbGVtZW50OjpTVkdNYXJrZXJFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCitTVkdNYXJrZXJFbGVtZW50OjpTVkdN
YXJrZXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2Mp
CiAgICAgOiBTVkdTdHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIFNWR0xhbmdTcGFj
ZSgpCiAgICAgLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKQEAgLTYxLDcgKzU5LDcg
QEAgU1ZHTWFya2VyRWxlbWVudDo6flNWR01hcmtlckVsZW1lbnQoKQogICAgIGRlbGV0ZSBtX21h
cmtlcjsKIH0KIAotdm9pZCBTVkdNYXJrZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR01hcmtlckVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjptYXJrZXJVbml0c0F0dHIpIHsKQEAgLTEwOCwxNSArMTA2LDE1IEBAIHZvaWQgU1ZHTWFy
a2VyRWxlbWVudDo6c2V0T3JpZW50VG9BdXRvKCkKICAgICBzZXRPcmllbnRUeXBlQmFzZVZhbHVl
KFNWR19NQVJLRVJfT1JJRU5UX0FVVE8pOwogfQogCi12b2lkIFNWR01hcmtlckVsZW1lbnQ6OnNl
dE9yaWVudFRvQW5nbGUoU1ZHQW5nbGUgKmFuZ2xlKQordm9pZCBTVkdNYXJrZXJFbGVtZW50Ojpz
ZXRPcmllbnRUb0FuZ2xlKFNWR0FuZ2xlKiBhbmdsZSkKIHsKICAgICBzZXRPcmllbnRUeXBlQmFz
ZVZhbHVlKFNWR19NQVJLRVJfT1JJRU5UX0FOR0xFKTsKICAgICBzZXRPcmllbnRBbmdsZUJhc2VW
YWx1ZShhbmdsZSk7CiB9CiAKLUtDYW52YXNNYXJrZXIgKlNWR01hcmtlckVsZW1lbnQ6OmNhbnZh
c1Jlc291cmNlKCkKK0tDYW52YXNNYXJrZXIqIFNWR01hcmtlckVsZW1lbnQ6OmNhbnZhc1Jlc291
cmNlKCkKIHsKLSAgICBpZighbV9tYXJrZXIpCisgICAgaWYgKCFtX21hcmtlcikKICAgICAgICAg
bV9tYXJrZXIgPSBzdGF0aWNfY2FzdDxLQ2FudmFzTWFya2VyKj4ocmVuZGVyaW5nRGV2aWNlKCkt
PmNyZWF0ZVJlc291cmNlKFJTX01BUktFUikpOwogICAgIAogICAgIG1fbWFya2VyLT5zZXRNYXJr
ZXIoc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHQ29udGFpbmVyKj4ocmVuZGVyZXIoKSkpOwpJbmRleDog
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFya2VyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuaAkocmV2aXNpb24gMTcwNjkpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1h
bm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdAogCkBAIC0zNyw5ICszNyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgY2xhc3Mg
U1ZHQW5nbGU7CiAgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFNWR01hcmtlckVsZW1l
bnQgOiBwdWJsaWMgU1ZHU3R5bGVkRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1YmxpYyBTVkdMYW5nU3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdGaXRUb1ZpZXdCb3gKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdGaXRUb1ZpZXdCb3gKICAgICB7CiAgICAgcHVi
bGljOgogICAgICAgICBlbnVtIFNWR01hcmtlclVuaXRzVHlwZSB7CkBAIC01OSwxMyArNTksMTMg
QEAgbmFtZXNwYWNlIFdlYkNvcmUKIAogICAgICAgICAvLyAnU1ZHTWFya2VyRWxlbWVudCcgZnVu
Y3Rpb25zCiAgICAgICAgIHZvaWQgc2V0T3JpZW50VG9BdXRvKCk7Ci0gICAgICAgIHZvaWQgc2V0
T3JpZW50VG9BbmdsZShTVkdBbmdsZSAqYW5nbGUpOworICAgICAgICB2b2lkIHNldE9yaWVudFRv
QW5nbGUoU1ZHQW5nbGUqIGFuZ2xlKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogICAgIAotICAgICAgICB2
aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpIHsgcmV0dXJu
IFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9Ci0gICAgICAgIHZpcnR1
YWwgUmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRl
clN0eWxlICpzdHlsZSk7Ci0gICAgICAgIHZpcnR1YWwgS0NhbnZhc01hcmtlciAqY2FudmFzUmVz
b3VyY2UoKTsKKyAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5
bGUqIHN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxl
KTsgfQorICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVy
QXJlbmEqLCBSZW5kZXJTdHlsZSopOworICAgICAgICB2aXJ0dWFsIEtDYW52YXNNYXJrZXIqIGNh
bnZhc1Jlc291cmNlKCk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3Qg
U1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CkBAIC04
Myw3ICs4Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZ
X0RFQ0xBUkFUSU9OUyhTVkdNYXJrZXJFbGVtZW50LCBpbnQsIGludCwgT3JpZW50VHlwZSwgb3Jp
ZW50VHlwZSkKICAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR01hcmtl
ckVsZW1lbnQsIFNWR0FuZ2xlKiwgUmVmUHRyPFNWR0FuZ2xlPiwgT3JpZW50QW5nbGUsIG9yaWVu
dEFuZ2xlKQogCi0gICAgICAgIEtDYW52YXNNYXJrZXIgKm1fbWFya2VyOworICAgICAgICBLQ2Fu
dmFzTWFya2VyKiBtX21hcmtlcjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzA2OSkKKysr
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNSBBbGV4YW5k
ZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIEtERSBwcm9qZWN0CkBAIC0yNiwyMiArMjYsMTkgQEAKICNpbmNsdWRlICJTVkdNYXNrRWxl
bWVudC5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVy
U1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiS0NhbnZhc0ltYWdlLmgiCiAjaW5jbHVkZSAiS1Jl
bmRlcmluZ0RldmljZS5oIgotI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgorI2luY2x1ZGUgIlJlbmRl
clNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1ZGUgIlNWR0xl
bmd0aC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCi0jaW5jbHVkZSAia3N2Zy5oIgotI2lu
Y2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8bWF0aC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR01hc2tFbGVtZW50OjpTVkdNYXNrRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorU1ZHTWFza0Vs
ZW1lbnQ6OlNWR01hc2tFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2MpCiAgICAgOiBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50KHRhZ05hbWUsIGRvYykK
ICAgICAsIFNWR1VSSVJlZmVyZW5jZSgpCiAgICAgLCBTVkdUZXN0cygpCkBAIC04MCw3ICs3Nyw3
IEBAIHZvaWQgU1ZHTWFza0VsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCiAgICAgU1ZHU3R5bGVk
TG9jYXRhYmxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKCk7CiB9CiAKLXZvaWQgU1ZHTWFza0Vs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQg
U1ZHTWFza0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0
cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikKQEAgLTEwNCwyNCArMTAxLDI0IEBAIHZv
aWQgU1ZHTWFza0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXQKICAgICB9CiB9CiAKLUtDYW52
YXNJbWFnZSAqU1ZHTWFza0VsZW1lbnQ6OmRyYXdNYXNrZXJDb250ZW50KCkKK0tDYW52YXNJbWFn
ZSogU1ZHTWFza0VsZW1lbnQ6OmRyYXdNYXNrZXJDb250ZW50KCkKIHsKLSAgICBLUmVuZGVyaW5n
RGV2aWNlICpkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKKyAgICBLUmVuZGVyaW5nRGV2aWNl
KiBkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKICAgICBpZiAoIWRldmljZS0+Y3VycmVudENv
bnRleHQoKSkgLy8gRklYTUU6IGhhY2sgZm9yIG5vdyB1bnRpbCBJbWFnZTo6bG9ja0ZvY3VzIGV4
aXN0cwogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIXJlbmRlcmVyKCkpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIEtDYW52YXNJbWFnZSAqbWFza0ltYWdlID0gc3RhdGljX2Nhc3Q8S0NhbnZh
c0ltYWdlICo+KGRldmljZS0+Y3JlYXRlUmVzb3VyY2UoUlNfSU1BR0UpKTsKKyAgICBLQ2FudmFz
SW1hZ2UqIG1hc2tJbWFnZSA9IHN0YXRpY19jYXN0PEtDYW52YXNJbWFnZSo+KGRldmljZS0+Y3Jl
YXRlUmVzb3VyY2UoUlNfSU1BR0UpKTsKIAogICAgIEludFNpemUgc2l6ZSA9IEludFNpemUobHJv
dW5kZih3aWR0aCgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHQoKS0+dmFsdWUoKSkpOwogICAg
IG1hc2tJbWFnZS0+aW5pdChzaXplKTsKIAotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpw
YXR0ZXJuQ29udGV4dCA9IGRldmljZS0+Y29udGV4dEZvckltYWdlKG1hc2tJbWFnZSk7CisgICAg
S1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHBhdHRlcm5Db250ZXh0ID0gZGV2aWNlLT5jb250ZXh0
Rm9ySW1hZ2UobWFza0ltYWdlKTsKICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KHBhdHRlcm5Db250
ZXh0KTsKIAogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQocGF0dGVybkNvbnRl
eHQtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKIAotICAgIFJlbmRlclNWR0NvbnRhaW5lciAq
bWFza0NvbnRhaW5lciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR0NvbnRhaW5lciAqPihyZW5kZXJl
cigpKTsKKyAgICBSZW5kZXJTVkdDb250YWluZXIqIG1hc2tDb250YWluZXIgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJTVkdDb250YWluZXIqPihyZW5kZXJlcigpKTsKICAgICBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyBpbmZvKGNvbnRleHQuZ2V0KCksIEludFJlY3QoKSwgUGFpbnRQaGFzZUZvcmVncm91
bmQsIDAsIDAsIDApOwogICAgIG1hc2tDb250YWluZXItPnNldERyYXdzQ29udGVudHModHJ1ZSk7
CiAgICAgbWFza0NvbnRhaW5lci0+cGFpbnQoaW5mbywgMCwgMCk7CkBAIC0xNDAsMTQgKzEzNywx
NCBAQCBSZW5kZXJPYmplY3QqIFNWR01hc2tFbGVtZW50OjpjcmVhdGVSZW5kCiAgICAgcmV0dXJu
IG1hc2tDb250YWluZXI7CiB9CiAKLUtDYW52YXNNYXNrZXIgKlNWR01hc2tFbGVtZW50OjpjYW52
YXNSZXNvdXJjZSgpCitLQ2FudmFzTWFza2VyKiBTVkdNYXNrRWxlbWVudDo6Y2FudmFzUmVzb3Vy
Y2UoKQogewogICAgIGlmICghbV9tYXNrZXIpIHsKLSAgICAgICAgbV9tYXNrZXIgPSBzdGF0aWNf
Y2FzdDxLQ2FudmFzTWFza2VyICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVSZXNvdXJjZShS
U19NQVNLRVIpKTsKKyAgICAgICAgbV9tYXNrZXIgPSBzdGF0aWNfY2FzdDxLQ2FudmFzTWFza2Vy
Kj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVJlc291cmNlKFJTX01BU0tFUikpOwogICAgICAg
ICBtX2RpcnR5ID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKG1fZGlydHkpIHsKLSAgICAgICAgS0Nh
bnZhc0ltYWdlICpuZXdNYXNrSW1hZ2UgPSBkcmF3TWFza2VyQ29udGVudCgpOworICAgICAgICBL
Q2FudmFzSW1hZ2UqIG5ld01hc2tJbWFnZSA9IGRyYXdNYXNrZXJDb250ZW50KCk7CiAgICAgICAg
IG1fbWFza2VyLT5zZXRNYXNrKG5ld01hc2tJbWFnZSk7CiAgICAgICAgIG1fZGlydHkgPSAobmV3
TWFza0ltYWdlICE9IDApOwogICAgIH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hc2tF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFza0VsZW1lbnQu
aAkocmV2aXNpb24gMTcwNjkpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXNrRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMywyMyArMjMsMjIgQEAKICNkZWZpbmUgU1ZHTWFza0VsZW1l
bnRfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRlICJTVkdUZXN0cy5oIgorI2luY2x1
ZGUgIktDYW52YXNNYXNrZXIuaCIKKyNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkLmgiCiAjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlLmgiCi0jaW5jbHVkZSAiU1ZHVVJJUmVmZXJl
bmNlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5oIgotI2luY2x1ZGUg
IlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKLQotI2luY2x1ZGUgIktDYW52YXNNYXNr
ZXIuaCIKKyNpbmNsdWRlICJTVkdUZXN0cy5oIgorI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewogICAgIGNsYXNzIEF0dHJpYnV0ZTsKICAgICBjbGFz
cyBTVkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZHTWFza0VsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVk
TG9jYXRhYmxlRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHVVJJUmVmZXJlbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
YmxpYyBTVkdUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
U1ZHTGFuZ1NwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dWJsaWMgU1ZHVVJJUmVmZXJlbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlj
IFNWR1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFj
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkCiAgICAgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHTWFza0VsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CkBAIC00OSwxNCArNDgsMTQgQEAgbmFtZXNw
YWNlIFdlYkNvcmUKICAgICAgICAgLy8gJ1NWR01hc2tFbGVtZW50JyBmdW5jdGlvbnMKICAgICAg
ICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIsIGJvb2wgcHJlc2VydmVEZWNscyk7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUg
KmF0dHIpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlKik7CiAKLSAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVu
ZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVk
KHN0eWxlKTsgfQotICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpOwotICAgICAgICB2aXJ0dWFs
IEtDYW52YXNNYXNrZXIgKmNhbnZhc1Jlc291cmNlKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBy
ZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVu
dDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KKyAgICAgICAgdmlydHVhbCBSZW5kZXJPYmpl
Y3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKyAgICAgICAg
dmlydHVhbCBLQ2FudmFzTWFza2VyKiBjYW52YXNSZXNvdXJjZSgpOwogCiAgICAgcHJvdGVjdGVk
OgotICAgICAgICBLQ2FudmFzSW1hZ2UgKmRyYXdNYXNrZXJDb250ZW50KCk7CisgICAgICAgIEtD
YW52YXNJbWFnZSogZHJhd01hc2tlckNvbnRlbnQoKTsKIAogICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9GT1JXQVJEX0RFQ0xBUkFUSU9OUyhTVkdVUklSZWZlcmVuY2UsIFN0cmluZywgSHJlZiwg
aHJlZikKICAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfRk9SV0FSRF9ERUNMQVJBVElPTlMoU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwgYm9vbCwgRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZCwgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCkKQEAgLTY5LDcgKzY4LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEtDYW52
YXNNYXNrZXIgKm1fbWFza2VyOworICAgICAgICBLQ2FudmFzTWFza2VyKiBtX21hc2tlcjsKICAg
ICAgICAgYm9vbCBtX2RpcnR5OwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1BhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYWludC5jcHAJ
KHJldmlzaW9uIDE3MDY5KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGFpbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAg
ICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAy
MDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJrc3ZnLmgiCiAjaW5j
bHVkZSAiU1ZHUGFpbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODMsMTkgKzgyLDE5
IEBAIHZvaWQgU1ZHUGFpbnQ6OnNldFBhaW50KFNWR1BhaW50VHlwZSBwYWkKIHsKICAgICBtX3Bh
aW50VHlwZSA9IHBhaW50VHlwZTsKIAotICAgIGlmKG1fcGFpbnRUeXBlID09IFNWR19QQUlOVFRZ
UEVfVVJJKQorICAgIGlmIChtX3BhaW50VHlwZSA9PSBTVkdfUEFJTlRUWVBFX1VSSSkKICAgICAg
ICAgc2V0VXJpKHVyaSk7Ci0gICAgZWxzZSBpZihtX3BhaW50VHlwZSA9PSBTVkdfUEFJTlRUWVBF
X1JHQkNPTE9SKQorICAgIGVsc2UgaWYgKG1fcGFpbnRUeXBlID09IFNWR19QQUlOVFRZUEVfUkdC
Q09MT1IpCiAgICAgICAgIHNldFJHQkNvbG9yKHJnYlBhaW50KTsKIH0KIAogU3RyaW5nIFNWR1Bh
aW50Ojpjc3NUZXh0KCkgY29uc3QKIHsKLSAgICBpZihtX3BhaW50VHlwZSA9PSBTVkdfUEFJTlRU
WVBFX05PTkUpCisgICAgaWYgKG1fcGFpbnRUeXBlID09IFNWR19QQUlOVFRZUEVfTk9ORSkKICAg
ICAgICAgcmV0dXJuICJub25lIjsKLSAgICBlbHNlIGlmKG1fcGFpbnRUeXBlID09IFNWR19QQUlO
VFRZUEVfQ1VSUkVOVENPTE9SKQorICAgIGVsc2UgaWYgKG1fcGFpbnRUeXBlID09IFNWR19QQUlO
VFRZUEVfQ1VSUkVOVENPTE9SKQogICAgICAgICByZXR1cm4gImN1cnJlbnRDb2xvciI7Ci0gICAg
ZWxzZSBpZihtX3BhaW50VHlwZSA9PSBTVkdfUEFJTlRUWVBFX1VSSSkKKyAgICBlbHNlIGlmICht
X3BhaW50VHlwZSA9PSBTVkdfUEFJTlRUWVBFX1VSSSkKICAgICAgICAgcmV0dXJuICJ1cmwoIiAr
IG1fdXJpICsgIikiOwogCiAgICAgcmV0dXJuIFNWR0NvbG9yOjpjc3NUZXh0KCk7CkluZGV4OiBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1BhaW50LmgJKHJldmlzaW9uIDE3MDY5KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
UGFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAg
ICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDggKzI0LDcg
QEAKICNkZWZpbmUgS1NWR19TVkdQYWludEltcGxfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNp
bmNsdWRlICJrc3ZnLmgiCi0jaW5jbHVkZSA8U1ZHQ29sb3IuaD4KKyNpbmNsdWRlICJTVkdDb2xv
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
</data>
<flag name="review"
          id="3785"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11163</attachid>
            <date>2006-10-20 00:49:59 -0700</date>
            <delta_ts>2006-10-20 01:24:36 -0700</delta_ts>
            <desc>Improved patch</desc>
            <filename>11217-clipping-painting2.diff</filename>
            <type>text/plain</type>
            <size>20289</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzE1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMDYtMTAtMjAgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIHN2ZyBjbGlwcGlu
ZyBhbmQgcGFpbnRpbmcgY2xhc3Nlcy4KKworICAgICAgICAqIGtzdmcyL3N2Zy9TVkdDbGlwUGF0
aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2xpcFBhdGhFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDbGlwUGF0aEVsZW1lbnQ6
OmNhbnZhc1Jlc291cmNlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50
Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTWFya2VyRWxlbWVudDo6U1ZHTWFya2VyRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdNYXJrZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdNYXJrZXJFbGVtZW50OjpzZXRPcmllbnRUb0FuZ2xlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR01hcmtlckVsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKToKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHTWFya2VyRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFya2Vy
RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR01hc2tF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVtZW50OjpTVkdNYXNrRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXNrRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OmRyYXdNYXNrZXJDb250
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVtZW50OjpjYW52YXNSZXNvdXJjZSk6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR01hc2tFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdNYXNrRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR1BhaW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50OjpzZXRQYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYWludDo6Y3NzVGV4dCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR1BhaW50Lmg6CisKIDIwMDYtMTAtMjAgIFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2VuQGFw
cGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXgKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0NsaXBQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
Q2xpcFBhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gMTcxNTUpCisrKyBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxk
Zm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QK
IApAQCAtMjQsMjAgKzI0LDE3IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdD
bGlwUGF0aEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNl
LmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTVkdNYXRyaXguaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUg
ImNzc3N0eWxlc2VsZWN0b3IuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNW
R1VuaXRUeXBlcy5oIgotI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2Uu
aD4KKyNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdDbGlwUGF0aEVsZW1lbnQ6OlNWR0NsaXBQ
YXRoRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQor
U1ZHQ2xpcFBhdGhFbGVtZW50OjpTVkdDbGlwUGF0aEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIFNWR1Rlc3RzKCkKICAgICAsIFNWR0xhbmdTcGFj
ZSgpCkBAIC01NCw3ICs1MSw3IEBAIFNWR0NsaXBQYXRoRWxlbWVudDo6flNWR0NsaXBQYXRoRWxl
bWVudCgKIAogQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHQ2xpcFBhdGhFbGVtZW50
LCBpbnQsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgQ2xpcFBhdGhVbml0cywgY2xpcFBhdGhV
bml0cywgU1ZHTmFtZXM6OmNsaXBQYXRoVW5pdHNBdHRyLmxvY2FsTmFtZSgpLCBtX2NsaXBQYXRo
VW5pdHMpCiAKLXZvaWQgU1ZHQ2xpcFBhdGhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR0NsaXBQYXRoRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYg
dmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmNsaXBQYXRoVW5pdHNBdHRyKSB7CkBAIC03MywzNSArNzAsMzcgQEAgdm9pZCBTVkdDbGlwUGF0
aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cgogICAgIH0KIH0KIAotS0NhbnZhc0NsaXBwZXIgKlNW
R0NsaXBQYXRoRWxlbWVudDo6Y2FudmFzUmVzb3VyY2UoKQorS0NhbnZhc0NsaXBwZXIqIFNWR0Ns
aXBQYXRoRWxlbWVudDo6Y2FudmFzUmVzb3VyY2UoKQogewogICAgIGlmICghdmlldygpKQogICAg
ICAgICByZXR1cm4gMDsKICAgICBpZiAoIW1fY2xpcHBlcikKLSAgICAgICAgbV9jbGlwcGVyID0g
c3RhdGljX2Nhc3Q8S0NhbnZhc0NsaXBwZXIgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVJl
c291cmNlKFJTX0NMSVBQRVIpKTsKKyAgICAgICAgbV9jbGlwcGVyID0gc3RhdGljX2Nhc3Q8S0Nh
bnZhc0NsaXBwZXIqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlUmVzb3VyY2UoUlNfQ0xJUFBF
UikpOwogICAgIGVsc2UKICAgICAgICAgbV9jbGlwcGVyLT5yZXNldENsaXBEYXRhKCk7CiAKICAg
ICBib29sIGJib3ggPSBjbGlwUGF0aFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9U
WVBFX09CSkVDVEJPVU5ESU5HQk9YOwogCi0gICAgUmVuZGVyU3R5bGUgKmNsaXBQYXRoU3R5bGUg
PSBzdHlsZUZvclJlbmRlcmVyKHBhcmVudCgpLT5yZW5kZXJlcigpKTsgLy8gRklYTUU6IE1hbnVh
bCBzdHlsZSByZXNvbHV0aW9uIGlzIGEgaGFjawotICAgIGZvciAoTm9kZSAqbiA9IGZpcnN0Q2hp
bGQoKTsgbiAhPSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBTVkdFbGVtZW50
ICplID0gc3ZnX2R5bmFtaWNfY2FzdChuKTsKKyAgICBSZW5kZXJTdHlsZSogY2xpcFBhdGhTdHls
ZSA9IHN0eWxlRm9yUmVuZGVyZXIocGFyZW50KCktPnJlbmRlcmVyKCkpOyAvLyBGSVhNRTogTWFu
dWFsIHN0eWxlIHJlc29sdXRpb24gaXMgYSBoYWNrCisgICAgZm9yIChOb2RlKiBuID0gZmlyc3RD
aGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBTVkdFbGVtZW50KiBl
ID0gc3ZnX2R5bmFtaWNfY2FzdChuKTsKICAgICAgICAgaWYgKGUgJiYgZS0+aXNTdHlsZWQoKSkg
ewotICAgICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudCAqc3R5bGVkID0gc3RhdGljX2Nhc3Q8U1ZH
U3R5bGVkRWxlbWVudCAqPihlKTsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlICpwYXRoU3R5bGUg
PSBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudChzdHlsZWQsIGNs
aXBQYXRoU3R5bGUpOworICAgICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkID0gc3Rh
dGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KGUpOworICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IHBhdGhTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50
KHN0eWxlZCwgY2xpcFBhdGhTdHlsZSk7CiAgICAgICAgICAgICBQYXRoIHBhdGhEYXRhID0gc3R5
bGVkLT50b1BhdGhEYXRhKCk7CiAgICAgICAgICAgICBpZiAoZS0+aXNTdHlsZWRUcmFuc2Zvcm1h
YmxlKCkpCi0gICAgICAgICAgICAgICAgcGF0aERhdGEudHJhbnNmb3JtKHN0YXRpY19jYXN0PFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50ICo+KGUpLT5sb2NhbE1hdHJpeCgpLT5tYXRyaXgo
KSk7CisgICAgICAgICAgICAgICAgcGF0aERhdGEudHJhbnNmb3JtKHN0YXRpY19jYXN0PFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4oZSktPmxvY2FsTWF0cml4KCktPm1hdHJpeCgpKTsK
ICAgICAgICAgICAgIGlmICghcGF0aERhdGEuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIG1f
Y2xpcHBlci0+YWRkQ2xpcERhdGEocGF0aERhdGEsIHBhdGhTdHlsZS0+c3ZnU3R5bGUoKS0+Y2xp
cFJ1bGUoKSwgYmJveCk7Ci0gICAgICAgICAgICBwYXRoU3R5bGUtPmRlcmVmKHZpZXcoKS0+cmVu
ZGVyQXJlbmEoKSk7CisgICAgICAgICAgICBwYXRoU3R5bGUtPmRlcmVmKGRvY3VtZW50KCktPnJl
bmRlckFyZW5hKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIGNsaXBQYXRoU3R5bGUtPmRlcmVm
KHZpZXcoKS0+cmVuZGVyQXJlbmEoKSk7CisgICAgY2xpcFBhdGhTdHlsZS0+ZGVyZWYoZG9jdW1l
bnQoKS0+cmVuZGVyQXJlbmEoKSk7CiAgICAgcmV0dXJuIG1fY2xpcHBlcjsKIH0KIAorfQorCiAv
LyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmgJKHJldmlzaW9uIDE3MTU1KQorKysgV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4g
PHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJv
amVjdAogCkBAIC0yNCwxOSArMjQsMTggQEAKICNkZWZpbmUgS1NWR19TVkdDbGlwUGF0aEVsZW1l
bnRJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSAiU1ZHVGVzdHMuaCIKKyNp
bmNsdWRlICJLQ2FudmFzQ2xpcHBlci5oIgorI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQuaCIKICNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIKICNpbmNsdWRlICJTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQuaCIKLQotI2luY2x1ZGUgIktDYW52YXNDbGlwcGVyLmgiCisjaW5jbHVkZSAiU1ZH
VGVzdHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKICAgICBjbGFzcyBTVkdDbGlwUGF0aEVs
ZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZAog
ICAgIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNWR0NsaXBQYXRoRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAgLTQ0LDEwICs0MywxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZQogICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKLSAgICAgICAgdmlydHVhbCBLQ2FudmFzQ2xp
cHBlciAqY2FudmFzUmVzb3VyY2UoKTsKKyAgICAgICAgdmlydHVhbCBLQ2FudmFzQ2xpcHBlciog
Y2FudmFzUmVzb3VyY2UoKTsKIAogICAgICAgICAvLyAnU1ZHQ2xpcFBhdGhFbGVtZW50JyBmdW5j
dGlvbnMKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUqKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBj
b25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0K
QEAgLTU3LDcgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUKIAogICAgICAgICBBTklNQVRFRF9Q
Uk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHQ2xpcFBhdGhFbGVtZW50LCBpbnQsIGludCwgQ2xpcFBh
dGhVbml0cywgY2xpcFBhdGhVbml0cykKIAotICAgICAgICBLQ2FudmFzQ2xpcHBlciAqbV9jbGlw
cGVyOworICAgICAgICBLQ2FudmFzQ2xpcHBlciogbV9jbGlwcGVyOwogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNzE1NSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAg
ICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAg
ICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjQsNyArMjQsNiBA
QAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHTWFya2VyRWxlbWVudC5oIgogCi0j
aW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgpAQCAt
MzYsMTEgKzM1LDEwIEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvLmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUg
ImtzdmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdNYXJrZXJFbGVtZW50OjpTVkdN
YXJrZXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2Mp
CitTVkdNYXJrZXJFbGVtZW50OjpTVkdNYXJrZXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdTdHlsZWRFbGVtZW50KHRhZ05hbWUs
IGRvYykKICAgICAsIFNWR0xhbmdTcGFjZSgpCiAgICAgLCBTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkKCkKQEAgLTYxLDcgKzU5LDcgQEAgU1ZHTWFya2VyRWxlbWVudDo6flNWR01hcmtlckVs
ZW1lbnQoKQogICAgIGRlbGV0ZSBtX21hcmtlcjsKIH0KIAotdm9pZCBTVkdNYXJrZXJFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR01h
cmtlckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikK
IHsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptYXJrZXJVbml0c0F0dHIpIHsKQEAgLTEwOCwx
NSArMTA2LDE1IEBAIHZvaWQgU1ZHTWFya2VyRWxlbWVudDo6c2V0T3JpZW50VG9BdXRvKCkKICAg
ICBzZXRPcmllbnRUeXBlQmFzZVZhbHVlKFNWR19NQVJLRVJfT1JJRU5UX0FVVE8pOwogfQogCi12
b2lkIFNWR01hcmtlckVsZW1lbnQ6OnNldE9yaWVudFRvQW5nbGUoU1ZHQW5nbGUgKmFuZ2xlKQor
dm9pZCBTVkdNYXJrZXJFbGVtZW50OjpzZXRPcmllbnRUb0FuZ2xlKFNWR0FuZ2xlKiBhbmdsZSkK
IHsKICAgICBzZXRPcmllbnRUeXBlQmFzZVZhbHVlKFNWR19NQVJLRVJfT1JJRU5UX0FOR0xFKTsK
ICAgICBzZXRPcmllbnRBbmdsZUJhc2VWYWx1ZShhbmdsZSk7CiB9CiAKLUtDYW52YXNNYXJrZXIg
KlNWR01hcmtlckVsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKCkKK0tDYW52YXNNYXJrZXIqIFNWR01h
cmtlckVsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKCkKIHsKLSAgICBpZighbV9tYXJrZXIpCisgICAg
aWYgKCFtX21hcmtlcikKICAgICAgICAgbV9tYXJrZXIgPSBzdGF0aWNfY2FzdDxLQ2FudmFzTWFy
a2VyKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVJlc291cmNlKFJTX01BUktFUikpOwogICAg
IAogICAgIG1fbWFya2VyLT5zZXRNYXJrZXIoc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHQ29udGFpbmVy
Kj4ocmVuZGVyZXIoKSkpOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFya2VyRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuaAko
cmV2aXNpb24gMTcxNTUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAg
ICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAg
ICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0zNyw5ICszNyw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlCiAgICAgY2xhc3MgU1ZHQW5nbGU7CiAgICAgY2xhc3MgU1ZHTGVuZ3RoOwog
ICAgIGNsYXNzIFNWR01hcmtlckVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkRWxlbWVudCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdMYW5nU3BhY2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdGaXRU
b1ZpZXdCb3gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFj
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdGaXRU
b1ZpZXdCb3gKICAgICB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIFNWR01hcmtlclVuaXRz
VHlwZSB7CkBAIC01OSwxMyArNTksMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUKIAogICAgICAgICAv
LyAnU1ZHTWFya2VyRWxlbWVudCcgZnVuY3Rpb25zCiAgICAgICAgIHZvaWQgc2V0T3JpZW50VG9B
dXRvKCk7Ci0gICAgICAgIHZvaWQgc2V0T3JpZW50VG9BbmdsZShTVkdBbmdsZSAqYW5nbGUpOwor
ICAgICAgICB2b2lkIHNldE9yaWVudFRvQW5nbGUoU1ZHQW5nbGUqKTsKIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSop
OwogICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHls
ZSAqc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUp
OyB9Ci0gICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJB
cmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSk7Ci0gICAgICAgIHZpcnR1YWwgS0NhbnZh
c01hcmtlciAqY2FudmFzUmVzb3VyY2UoKTsKKyAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVy
SXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5k
ZXJlcklzTmVlZGVkKHN0eWxlKTsgfQorICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3Jl
YXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOworICAgICAgICB2aXJ0dWFs
IEtDYW52YXNNYXJrZXIqIGNhbnZhc1Jlc291cmNlKCk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiB0aGlzOyB9CkBAIC04Myw3ICs4Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAg
IEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdNYXJrZXJFbGVtZW50LCBpbnQsIGlu
dCwgT3JpZW50VHlwZSwgb3JpZW50VHlwZSkKICAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVD
TEFSQVRJT05TKFNWR01hcmtlckVsZW1lbnQsIFNWR0FuZ2xlKiwgUmVmUHRyPFNWR0FuZ2xlPiwg
T3JpZW50QW5nbGUsIG9yaWVudEFuZ2xlKQogCi0gICAgICAgIEtDYW52YXNNYXJrZXIgKm1fbWFy
a2VyOworICAgICAgICBLQ2FudmFzTWFya2VyKiBtX21hcmtlcjsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXNrRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNzE1NSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAg
ICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAg
ICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICAgICAgICAgICAg
ICAgICAgMjAwNSBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgogCiAgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CkBAIC0yNiwyMiArMjYsMTkgQEAKICNp
bmNsdWRlICJTVkdNYXNrRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiS0NhbnZhc0ltYWdl
LmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgotI2luY2x1ZGUgIlNWR0xlbmd0aC5o
IgorI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5o
IgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVk
ZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCi0jaW5j
bHVkZSAia3N2Zy5oIgotI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CiAjaW5jbHVkZSA8bWF0aC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR01hc2tFbGVt
ZW50OjpTVkdNYXNrRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCAqZG9jKQorU1ZHTWFza0VsZW1lbnQ6OlNWR01hc2tFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdTdHlsZWRMb2NhdGFibGVFbGVt
ZW50KHRhZ05hbWUsIGRvYykKICAgICAsIFNWR1VSSVJlZmVyZW5jZSgpCiAgICAgLCBTVkdUZXN0
cygpCkBAIC04MCw3ICs3Nyw3IEBAIHZvaWQgU1ZHTWFza0VsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdl
ZCgpCiAgICAgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKCk7CiB9
CiAKLXZvaWQgU1ZHTWFza0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSAqYXR0cikKK3ZvaWQgU1ZHTWFza0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+
dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikKQEAgLTEw
NCwyNCArMTAxLDI0IEBAIHZvaWQgU1ZHTWFza0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXQK
ICAgICB9CiB9CiAKLUtDYW52YXNJbWFnZSAqU1ZHTWFza0VsZW1lbnQ6OmRyYXdNYXNrZXJDb250
ZW50KCkKK0tDYW52YXNJbWFnZSogU1ZHTWFza0VsZW1lbnQ6OmRyYXdNYXNrZXJDb250ZW50KCkK
IHsKLSAgICBLUmVuZGVyaW5nRGV2aWNlICpkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKKyAg
ICBLUmVuZGVyaW5nRGV2aWNlKiBkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKICAgICBpZiAo
IWRldmljZS0+Y3VycmVudENvbnRleHQoKSkgLy8gRklYTUU6IGhhY2sgZm9yIG5vdyB1bnRpbCBJ
bWFnZTo6bG9ja0ZvY3VzIGV4aXN0cwogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIXJlbmRl
cmVyKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIEtDYW52YXNJbWFnZSAqbWFza0ltYWdlID0g
c3RhdGljX2Nhc3Q8S0NhbnZhc0ltYWdlICo+KGRldmljZS0+Y3JlYXRlUmVzb3VyY2UoUlNfSU1B
R0UpKTsKKyAgICBLQ2FudmFzSW1hZ2UqIG1hc2tJbWFnZSA9IHN0YXRpY19jYXN0PEtDYW52YXNJ
bWFnZSo+KGRldmljZS0+Y3JlYXRlUmVzb3VyY2UoUlNfSU1BR0UpKTsKIAogICAgIEludFNpemUg
c2l6ZSA9IEludFNpemUobHJvdW5kZih3aWR0aCgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHQo
KS0+dmFsdWUoKSkpOwogICAgIG1hc2tJbWFnZS0+aW5pdChzaXplKTsKIAotICAgIEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0ICpwYXR0ZXJuQ29udGV4dCA9IGRldmljZS0+Y29udGV4dEZvckltYWdl
KG1hc2tJbWFnZSk7CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHBhdHRlcm5Db250ZXh0
ID0gZGV2aWNlLT5jb250ZXh0Rm9ySW1hZ2UobWFza0ltYWdlKTsKICAgICBkZXZpY2UtPnB1c2hD
b250ZXh0KHBhdHRlcm5Db250ZXh0KTsKIAogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGNv
bnRleHQocGF0dGVybkNvbnRleHQtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKIAotICAgIFJl
bmRlclNWR0NvbnRhaW5lciAqbWFza0NvbnRhaW5lciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR0Nv
bnRhaW5lciAqPihyZW5kZXJlcigpKTsKKyAgICBSZW5kZXJTVkdDb250YWluZXIqIG1hc2tDb250
YWluZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdDb250YWluZXIqPihyZW5kZXJlcigpKTsKICAg
ICBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyBpbmZvKGNvbnRleHQuZ2V0KCksIEludFJlY3QoKSwg
UGFpbnRQaGFzZUZvcmVncm91bmQsIDAsIDAsIDApOwogICAgIG1hc2tDb250YWluZXItPnNldERy
YXdzQ29udGVudHModHJ1ZSk7CiAgICAgbWFza0NvbnRhaW5lci0+cGFpbnQoaW5mbywgMCwgMCk7
CkBAIC0xNDAsMTQgKzEzNywxNCBAQCBSZW5kZXJPYmplY3QqIFNWR01hc2tFbGVtZW50OjpjcmVh
dGVSZW5kCiAgICAgcmV0dXJuIG1hc2tDb250YWluZXI7CiB9CiAKLUtDYW52YXNNYXNrZXIgKlNW
R01hc2tFbGVtZW50OjpjYW52YXNSZXNvdXJjZSgpCitLQ2FudmFzTWFza2VyKiBTVkdNYXNrRWxl
bWVudDo6Y2FudmFzUmVzb3VyY2UoKQogewogICAgIGlmICghbV9tYXNrZXIpIHsKLSAgICAgICAg
bV9tYXNrZXIgPSBzdGF0aWNfY2FzdDxLQ2FudmFzTWFza2VyICo+KHJlbmRlcmluZ0RldmljZSgp
LT5jcmVhdGVSZXNvdXJjZShSU19NQVNLRVIpKTsKKyAgICAgICAgbV9tYXNrZXIgPSBzdGF0aWNf
Y2FzdDxLQ2FudmFzTWFza2VyKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVJlc291cmNlKFJT
X01BU0tFUikpOwogICAgICAgICBtX2RpcnR5ID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKG1fZGly
dHkpIHsKLSAgICAgICAgS0NhbnZhc0ltYWdlICpuZXdNYXNrSW1hZ2UgPSBkcmF3TWFza2VyQ29u
dGVudCgpOworICAgICAgICBLQ2FudmFzSW1hZ2UqIG5ld01hc2tJbWFnZSA9IGRyYXdNYXNrZXJD
b250ZW50KCk7CiAgICAgICAgIG1fbWFza2VyLT5zZXRNYXNrKG5ld01hc2tJbWFnZSk7CiAgICAg
ICAgIG1fZGlydHkgPSAobmV3TWFza0ltYWdlICE9IDApOwogICAgIH0KSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR01hc2tFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHTWFza0VsZW1lbnQuaAkocmV2aXNpb24gMTcxNTUpCisrKyBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdNYXNrRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyMyArMjMsMjIgQEAKICNk
ZWZpbmUgU1ZHTWFza0VsZW1lbnRfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRlICJT
VkdUZXN0cy5oIgorI2luY2x1ZGUgIktDYW52YXNNYXNrZXIuaCIKKyNpbmNsdWRlICJTVkdFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkLmgiCiAjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlLmgiCi0jaW5j
bHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkTG9jYXRhYmxlRWxl
bWVudC5oIgotI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKLQotI2lu
Y2x1ZGUgIktDYW52YXNNYXNrZXIuaCIKKyNpbmNsdWRlICJTVkdUZXN0cy5oIgorI2luY2x1ZGUg
IlNWR1VSSVJlZmVyZW5jZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewogICAgIGNsYXNzIEF0
dHJpYnV0ZTsKICAgICBjbGFzcyBTVkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZHTWFza0VsZW1lbnQg
OiBwdWJsaWMgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVibGljIFNWR0xhbmdTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkCiAgICAgewogICAgIHB1YmxpYzoKICAgICAgICAg
U1ZHTWFza0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CkBAIC00OCwx
NSArNDcsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUKIAogICAgICAgICAvLyAnU1ZHTWFza0VsZW1l
bnQnIGZ1bmN0aW9ucwogICAgICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0ciwgYm9v
bCBwcmVzZXJ2ZURlY2xzKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1
dGVDaGFuZ2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJlc2VydmVEZWNscyk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKIAotICAgICAg
ICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpIHsgcmV0
dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9Ci0gICAgICAgIHZp
cnR1YWwgUmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJl
bmRlclN0eWxlICpzdHlsZSk7Ci0gICAgICAgIHZpcnR1YWwgS0NhbnZhc01hc2tlciAqY2FudmFz
UmVzb3VyY2UoKTsKKyAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVy
U3R5bGUqIHN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0
eWxlKTsgfQorICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVu
ZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOworICAgICAgICB2aXJ0dWFsIEtDYW52YXNNYXNrZXIq
IGNhbnZhc1Jlc291cmNlKCk7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEtDYW52YXNJbWFn
ZSAqZHJhd01hc2tlckNvbnRlbnQoKTsKKyAgICAgICAgS0NhbnZhc0ltYWdlKiBkcmF3TWFza2Vy
Q29udGVudCgpOwogCiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0ZPUldBUkRfREVDTEFSQVRJ
T05TKFNWR1VSSVJlZmVyZW5jZSwgU3RyaW5nLCBIcmVmLCBocmVmKQogICAgICAgICBBTklNQVRF
RF9QUk9QRVJUWV9GT1JXQVJEX0RFQ0xBUkFUSU9OUyhTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkLCBib29sLCBFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLCBleHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkKQpAQCAtNjksNyArNjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0
dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhp
czsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgS0NhbnZhc01hc2tlciAqbV9tYXNrZXI7Cisg
ICAgICAgIEtDYW52YXNNYXNrZXIqIG1fbWFza2VyOwogICAgICAgICBib29sIG1fZGlydHk7CiAg
ICAgfTsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGFpbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhaW50LmNwcAkocmV2aXNpb24gMTcxNTUpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4g
PHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJv
amVjdAogCkBAIC0yMiw3ICsyMiw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBT
VkdfU1VQUE9SVAotI2luY2x1ZGUgImtzdmcuaCIKICNpbmNsdWRlICJTVkdQYWludC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04MywxOSArODIsMTkgQEAgdm9pZCBTVkdQYWludDo6c2V0
UGFpbnQoU1ZHUGFpbnRUeXBlIHBhaQogewogICAgIG1fcGFpbnRUeXBlID0gcGFpbnRUeXBlOwog
Ci0gICAgaWYobV9wYWludFR5cGUgPT0gU1ZHX1BBSU5UVFlQRV9VUkkpCisgICAgaWYgKG1fcGFp
bnRUeXBlID09IFNWR19QQUlOVFRZUEVfVVJJKQogICAgICAgICBzZXRVcmkodXJpKTsKLSAgICBl
bHNlIGlmKG1fcGFpbnRUeXBlID09IFNWR19QQUlOVFRZUEVfUkdCQ09MT1IpCisgICAgZWxzZSBp
ZiAobV9wYWludFR5cGUgPT0gU1ZHX1BBSU5UVFlQRV9SR0JDT0xPUikKICAgICAgICAgc2V0UkdC
Q29sb3IocmdiUGFpbnQpOwogfQogCiBTdHJpbmcgU1ZHUGFpbnQ6OmNzc1RleHQoKSBjb25zdAog
ewotICAgIGlmKG1fcGFpbnRUeXBlID09IFNWR19QQUlOVFRZUEVfTk9ORSkKKyAgICBpZiAobV9w
YWludFR5cGUgPT0gU1ZHX1BBSU5UVFlQRV9OT05FKQogICAgICAgICByZXR1cm4gIm5vbmUiOwot
ICAgIGVsc2UgaWYobV9wYWludFR5cGUgPT0gU1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IpCisg
ICAgZWxzZSBpZiAobV9wYWludFR5cGUgPT0gU1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IpCiAg
ICAgICAgIHJldHVybiAiY3VycmVudENvbG9yIjsKLSAgICBlbHNlIGlmKG1fcGFpbnRUeXBlID09
IFNWR19QQUlOVFRZUEVfVVJJKQorICAgIGVsc2UgaWYgKG1fcGFpbnRUeXBlID09IFNWR19QQUlO
VFRZUEVfVVJJKQogICAgICAgICByZXR1cm4gInVybCgiICsgbV91cmkgKyAiKSI7CiAKICAgICBy
ZXR1cm4gU1ZHQ29sb3I6OmNzc1RleHQoKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1Bh
aW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGFpbnQuaAkocmV2aXNp
b24gMTcxNTUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYWludC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDcgKzEsMTEgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29s
YXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorPDw8PDw8PCAubWluZQorICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorPT09PT09
PQogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtaWFsLmNv
bSkKKz4+Pj4+Pj4gLnIxNzEwNQogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBw
cm9qZWN0CiAKQEAgLTI1LDggKzI5LDcgQEAKICNkZWZpbmUgS1NWR19TVkdQYWludEltcGxfSAog
I2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRlICJrc3ZnLmgiCi0jaW5jbHVkZSA8U1ZHQ29s
b3IuaD4KKyNpbmNsdWRlICJTVkdDb2xvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11165</attachid>
            <date>2006-10-20 01:24:36 -0700</date>
            <delta_ts>2006-10-31 11:18:19 -0800</delta_ts>
            <desc>Even better patch</desc>
            <filename>11217-clipping-painting3.diff</filename>
            <type>text/plain</type>
            <size>20125</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzE1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMDYtMTAtMjAgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE3CisgICAgICAgIENsZWFudXAgc3ZnIGNv
ZGluZyBzdHlsZQorCisgICAgICAgIENsZWFudXAgY29kaW5nIHN0eWxlIGluIHN2ZyBjbGlwcGlu
ZyBhbmQgcGFpbnRpbmcgY2xhc3Nlcy4KKworICAgICAgICAqIGtzdmcyL3N2Zy9TVkdDbGlwUGF0
aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2xpcFBhdGhFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDbGlwUGF0aEVsZW1lbnQ6
OmNhbnZhc1Jlc291cmNlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50
Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTWFya2VyRWxlbWVudDo6U1ZHTWFya2VyRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdNYXJrZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdNYXJrZXJFbGVtZW50OjpzZXRPcmllbnRUb0FuZ2xlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR01hcmtlckVsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKToKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHTWFya2VyRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFya2Vy
RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR01hc2tF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVtZW50OjpTVkdNYXNrRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXNrRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OmRyYXdNYXNrZXJDb250
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVtZW50OjpjYW52YXNSZXNvdXJjZSk6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR01hc2tFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdNYXNrRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR1BhaW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50OjpzZXRQYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYWludDo6Y3NzVGV4dCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR1BhaW50Lmg6CisKIDIwMDYtMTAtMjAgIFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2VuQGFw
cGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXgKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0NsaXBQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
Q2xpcFBhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gMTcxNTUpCisrKyBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxk
Zm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QK
IApAQCAtMjQsMjAgKzI0LDE3IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdD
bGlwUGF0aEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNl
LmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTVkdNYXRyaXguaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUg
ImNzc3N0eWxlc2VsZWN0b3IuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNW
R1VuaXRUeXBlcy5oIgotI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2Uu
aD4KKyNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdDbGlwUGF0aEVsZW1lbnQ6OlNWR0NsaXBQ
YXRoRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQor
U1ZHQ2xpcFBhdGhFbGVtZW50OjpTVkdDbGlwUGF0aEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIFNWR1Rlc3RzKCkKICAgICAsIFNWR0xhbmdTcGFj
ZSgpCkBAIC01NCw3ICs1MSw3IEBAIFNWR0NsaXBQYXRoRWxlbWVudDo6flNWR0NsaXBQYXRoRWxl
bWVudCgKIAogQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHQ2xpcFBhdGhFbGVtZW50
LCBpbnQsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgQ2xpcFBhdGhVbml0cywgY2xpcFBhdGhV
bml0cywgU1ZHTmFtZXM6OmNsaXBQYXRoVW5pdHNBdHRyLmxvY2FsTmFtZSgpLCBtX2NsaXBQYXRo
VW5pdHMpCiAKLXZvaWQgU1ZHQ2xpcFBhdGhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR0NsaXBQYXRoRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYg
dmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmNsaXBQYXRoVW5pdHNBdHRyKSB7CkBAIC03MywyNiArNzAsMjYgQEAgdm9pZCBTVkdDbGlwUGF0
aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cgogICAgIH0KIH0KIAotS0NhbnZhc0NsaXBwZXIgKlNW
R0NsaXBQYXRoRWxlbWVudDo6Y2FudmFzUmVzb3VyY2UoKQorS0NhbnZhc0NsaXBwZXIqIFNWR0Ns
aXBQYXRoRWxlbWVudDo6Y2FudmFzUmVzb3VyY2UoKQogewogICAgIGlmICghdmlldygpKQogICAg
ICAgICByZXR1cm4gMDsKICAgICBpZiAoIW1fY2xpcHBlcikKLSAgICAgICAgbV9jbGlwcGVyID0g
c3RhdGljX2Nhc3Q8S0NhbnZhc0NsaXBwZXIgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVJl
c291cmNlKFJTX0NMSVBQRVIpKTsKKyAgICAgICAgbV9jbGlwcGVyID0gc3RhdGljX2Nhc3Q8S0Nh
bnZhc0NsaXBwZXIqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlUmVzb3VyY2UoUlNfQ0xJUFBF
UikpOwogICAgIGVsc2UKICAgICAgICAgbV9jbGlwcGVyLT5yZXNldENsaXBEYXRhKCk7CiAKICAg
ICBib29sIGJib3ggPSBjbGlwUGF0aFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9U
WVBFX09CSkVDVEJPVU5ESU5HQk9YOwogCi0gICAgUmVuZGVyU3R5bGUgKmNsaXBQYXRoU3R5bGUg
PSBzdHlsZUZvclJlbmRlcmVyKHBhcmVudCgpLT5yZW5kZXJlcigpKTsgLy8gRklYTUU6IE1hbnVh
bCBzdHlsZSByZXNvbHV0aW9uIGlzIGEgaGFjawotICAgIGZvciAoTm9kZSAqbiA9IGZpcnN0Q2hp
bGQoKTsgbiAhPSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBTVkdFbGVtZW50
ICplID0gc3ZnX2R5bmFtaWNfY2FzdChuKTsKKyAgICBSZW5kZXJTdHlsZSogY2xpcFBhdGhTdHls
ZSA9IHN0eWxlRm9yUmVuZGVyZXIocGFyZW50KCktPnJlbmRlcmVyKCkpOyAvLyBGSVhNRTogTWFu
dWFsIHN0eWxlIHJlc29sdXRpb24gaXMgYSBoYWNrCisgICAgZm9yIChOb2RlKiBuID0gZmlyc3RD
aGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBTVkdFbGVtZW50KiBl
ID0gc3ZnX2R5bmFtaWNfY2FzdChuKTsKICAgICAgICAgaWYgKGUgJiYgZS0+aXNTdHlsZWQoKSkg
ewotICAgICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudCAqc3R5bGVkID0gc3RhdGljX2Nhc3Q8U1ZH
U3R5bGVkRWxlbWVudCAqPihlKTsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlICpwYXRoU3R5bGUg
PSBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudChzdHlsZWQsIGNs
aXBQYXRoU3R5bGUpOworICAgICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkID0gc3Rh
dGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KGUpOworICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IHBhdGhTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50
KHN0eWxlZCwgY2xpcFBhdGhTdHlsZSk7CiAgICAgICAgICAgICBQYXRoIHBhdGhEYXRhID0gc3R5
bGVkLT50b1BhdGhEYXRhKCk7CiAgICAgICAgICAgICBpZiAoZS0+aXNTdHlsZWRUcmFuc2Zvcm1h
YmxlKCkpCi0gICAgICAgICAgICAgICAgcGF0aERhdGEudHJhbnNmb3JtKHN0YXRpY19jYXN0PFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50ICo+KGUpLT5sb2NhbE1hdHJpeCgpLT5tYXRyaXgo
KSk7CisgICAgICAgICAgICAgICAgcGF0aERhdGEudHJhbnNmb3JtKHN0YXRpY19jYXN0PFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4oZSktPmxvY2FsTWF0cml4KCktPm1hdHJpeCgpKTsK
ICAgICAgICAgICAgIGlmICghcGF0aERhdGEuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIG1f
Y2xpcHBlci0+YWRkQ2xpcERhdGEocGF0aERhdGEsIHBhdGhTdHlsZS0+c3ZnU3R5bGUoKS0+Y2xp
cFJ1bGUoKSwgYmJveCk7CiAgICAgICAgICAgICBwYXRoU3R5bGUtPmRlcmVmKHZpZXcoKS0+cmVu
ZGVyQXJlbmEoKSk7CkBAIC0xMDIsNiArOTksOCBAQCBLQ2FudmFzQ2xpcHBlciAqU1ZHQ2xpcFBh
dGhFbGVtZW50OjpjYW52CiAgICAgcmV0dXJuIG1fY2xpcHBlcjsKIH0KIAorfQorCiAvLyB2aW06
dHM9NDpub2V0CiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHQ2xpcFBhdGhFbGVtZW50LmgJKHJldmlzaW9uIDE3MTU1KQorKysgV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRm
b3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAog
CkBAIC0yNCwxOSArMjQsMTggQEAKICNkZWZpbmUgS1NWR19TVkdDbGlwUGF0aEVsZW1lbnRJbXBs
X0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSAiU1ZHVGVzdHMuaCIKKyNpbmNsdWRl
ICJLQ2FudmFzQ2xpcHBlci5oIgorI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQuaCIKICNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQuaCIKLQotI2luY2x1ZGUgIktDYW52YXNDbGlwcGVyLmgiCisjaW5jbHVkZSAiU1ZHVGVzdHMu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKICAgICBjbGFzcyBTVkdDbGlwUGF0aEVsZW1lbnQg
OiBwdWJsaWMgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZAogICAgIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIFNWR0NsaXBQYXRoRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqKTsKQEAgLTQ0LDEwICs0MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZQog
ICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBT
VkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKLSAgICAgICAgdmlydHVhbCBLQ2FudmFzQ2xpcHBlciAq
Y2FudmFzUmVzb3VyY2UoKTsKKyAgICAgICAgdmlydHVhbCBLQ2FudmFzQ2xpcHBlciogY2FudmFz
UmVzb3VyY2UoKTsKIAogICAgICAgICAvLyAnU1ZHQ2xpcFBhdGhFbGVtZW50JyBmdW5jdGlvbnMK
LSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSAqYXR0cik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBT
VkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KQEAgLTU3
LDcgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUKIAogICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoU1ZHQ2xpcFBhdGhFbGVtZW50LCBpbnQsIGludCwgQ2xpcFBhdGhVbml0
cywgY2xpcFBhdGhVbml0cykKIAotICAgICAgICBLQ2FudmFzQ2xpcHBlciAqbV9jbGlwcGVyOwor
ICAgICAgICBLQ2FudmFzQ2xpcHBlciogbV9jbGlwcGVyOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNzE1NSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAg
ICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAg
ICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjQsNyArMjQsNiBAQAogI2lm
ZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHTWFya2VyRWxlbWVudC5oIgogCi0jaW5jbHVk
ZSAiQXR0ci5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgpAQCAtMzYsMTEg
KzM1LDEwIEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvLmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgImtzdmcu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdNYXJrZXJFbGVtZW50OjpTVkdNYXJrZXJF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCitTVkdN
YXJrZXJFbGVtZW50OjpTVkdNYXJrZXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdTdHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvYykK
ICAgICAsIFNWR0xhbmdTcGFjZSgpCiAgICAgLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
KCkKQEAgLTYxLDcgKzU5LDcgQEAgU1ZHTWFya2VyRWxlbWVudDo6flNWR01hcmtlckVsZW1lbnQo
KQogICAgIGRlbGV0ZSBtX21hcmtlcjsKIH0KIAotdm9pZCBTVkdNYXJrZXJFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIFNWR01hcmtlckVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjptYXJrZXJVbml0c0F0dHIpIHsKQEAgLTEwOCwxNSArMTA2
LDE1IEBAIHZvaWQgU1ZHTWFya2VyRWxlbWVudDo6c2V0T3JpZW50VG9BdXRvKCkKICAgICBzZXRP
cmllbnRUeXBlQmFzZVZhbHVlKFNWR19NQVJLRVJfT1JJRU5UX0FVVE8pOwogfQogCi12b2lkIFNW
R01hcmtlckVsZW1lbnQ6OnNldE9yaWVudFRvQW5nbGUoU1ZHQW5nbGUgKmFuZ2xlKQordm9pZCBT
VkdNYXJrZXJFbGVtZW50OjpzZXRPcmllbnRUb0FuZ2xlKFNWR0FuZ2xlKiBhbmdsZSkKIHsKICAg
ICBzZXRPcmllbnRUeXBlQmFzZVZhbHVlKFNWR19NQVJLRVJfT1JJRU5UX0FOR0xFKTsKICAgICBz
ZXRPcmllbnRBbmdsZUJhc2VWYWx1ZShhbmdsZSk7CiB9CiAKLUtDYW52YXNNYXJrZXIgKlNWR01h
cmtlckVsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKCkKK0tDYW52YXNNYXJrZXIqIFNWR01hcmtlckVs
ZW1lbnQ6OmNhbnZhc1Jlc291cmNlKCkKIHsKLSAgICBpZighbV9tYXJrZXIpCisgICAgaWYgKCFt
X21hcmtlcikKICAgICAgICAgbV9tYXJrZXIgPSBzdGF0aWNfY2FzdDxLQ2FudmFzTWFya2VyKj4o
cmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVJlc291cmNlKFJTX01BUktFUikpOwogICAgIAogICAg
IG1fbWFya2VyLT5zZXRNYXJrZXIoc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHQ29udGFpbmVyKj4ocmVu
ZGVyZXIoKSkpOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFya2VyRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuaAkocmV2aXNp
b24gMTcxNTUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAg
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIw
MDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0zNyw5ICszNyw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlCiAgICAgY2xhc3MgU1ZHQW5nbGU7CiAgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNs
YXNzIFNWR01hcmtlckVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkRWxlbWVudCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdMYW5nU3BhY2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdGaXRUb1ZpZXdC
b3gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdGaXRUb1ZpZXdC
b3gKICAgICB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIFNWR01hcmtlclVuaXRzVHlwZSB7
CkBAIC01OSwxMyArNTksMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUKIAogICAgICAgICAvLyAnU1ZH
TWFya2VyRWxlbWVudCcgZnVuY3Rpb25zCiAgICAgICAgIHZvaWQgc2V0T3JpZW50VG9BdXRvKCk7
Ci0gICAgICAgIHZvaWQgc2V0T3JpZW50VG9BbmdsZShTVkdBbmdsZSAqYW5nbGUpOworICAgICAg
ICB2b2lkIHNldE9yaWVudFRvQW5nbGUoU1ZHQW5nbGUqKTsKIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogICAg
IAotICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5
bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9Ci0g
ICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAq
YXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSk7Ci0gICAgICAgIHZpcnR1YWwgS0NhbnZhc01hcmtl
ciAqY2FudmFzUmVzb3VyY2UoKTsKKyAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVk
ZWQoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklz
TmVlZGVkKHN0eWxlKTsgfQorICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVu
ZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOworICAgICAgICB2aXJ0dWFsIEtDYW52
YXNNYXJrZXIqIGNhbnZhc1Jlc291cmNlKCk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZp
cnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0
aGlzOyB9CkBAIC04Myw3ICs4Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIEFOSU1B
VEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdNYXJrZXJFbGVtZW50LCBpbnQsIGludCwgT3Jp
ZW50VHlwZSwgb3JpZW50VHlwZSkKICAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJ
T05TKFNWR01hcmtlckVsZW1lbnQsIFNWR0FuZ2xlKiwgUmVmUHRyPFNWR0FuZ2xlPiwgT3JpZW50
QW5nbGUsIG9yaWVudEFuZ2xlKQogCi0gICAgICAgIEtDYW52YXNNYXJrZXIgKm1fbWFya2VyOwor
ICAgICAgICBLQ2FudmFzTWFya2VyKiBtX21hcmtlcjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCShyZXZpc2lv
biAxNzE1NSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAw
NCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICAgICAgICAgICAgICAgICAg
MjAwNSBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgogCiAgICAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CkBAIC0yNiwyMiArMjYsMTkgQEAKICNpbmNsdWRl
ICJTVkdNYXNrRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiS0NhbnZhc0ltYWdlLmgiCiAj
aW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgotI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgorI2lu
Y2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2lu
Y2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZH
UmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCi0jaW5jbHVkZSAi
a3N2Zy5oIgotI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5j
bHVkZSA8bWF0aC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR01hc2tFbGVtZW50OjpT
VkdNYXNrRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9j
KQorU1ZHTWFza0VsZW1lbnQ6OlNWR01hc2tFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50KHRh
Z05hbWUsIGRvYykKICAgICAsIFNWR1VSSVJlZmVyZW5jZSgpCiAgICAgLCBTVkdUZXN0cygpCkBA
IC04MCw3ICs3Nyw3IEBAIHZvaWQgU1ZHTWFza0VsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCiAg
ICAgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKCk7CiB9CiAKLXZv
aWQgU1ZHTWFza0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAq
YXR0cikKK3ZvaWQgU1ZHTWFza0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUo
KTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikKQEAgLTEwNCwyNCAr
MTAxLDI0IEBAIHZvaWQgU1ZHTWFza0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXQKICAgICB9
CiB9CiAKLUtDYW52YXNJbWFnZSAqU1ZHTWFza0VsZW1lbnQ6OmRyYXdNYXNrZXJDb250ZW50KCkK
K0tDYW52YXNJbWFnZSogU1ZHTWFza0VsZW1lbnQ6OmRyYXdNYXNrZXJDb250ZW50KCkKIHsKLSAg
ICBLUmVuZGVyaW5nRGV2aWNlICpkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKKyAgICBLUmVu
ZGVyaW5nRGV2aWNlKiBkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKICAgICBpZiAoIWRldmlj
ZS0+Y3VycmVudENvbnRleHQoKSkgLy8gRklYTUU6IGhhY2sgZm9yIG5vdyB1bnRpbCBJbWFnZTo6
bG9ja0ZvY3VzIGV4aXN0cwogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIXJlbmRlcmVyKCkp
CiAgICAgICAgIHJldHVybiAwOwotICAgIEtDYW52YXNJbWFnZSAqbWFza0ltYWdlID0gc3RhdGlj
X2Nhc3Q8S0NhbnZhc0ltYWdlICo+KGRldmljZS0+Y3JlYXRlUmVzb3VyY2UoUlNfSU1BR0UpKTsK
KyAgICBLQ2FudmFzSW1hZ2UqIG1hc2tJbWFnZSA9IHN0YXRpY19jYXN0PEtDYW52YXNJbWFnZSo+
KGRldmljZS0+Y3JlYXRlUmVzb3VyY2UoUlNfSU1BR0UpKTsKIAogICAgIEludFNpemUgc2l6ZSA9
IEludFNpemUobHJvdW5kZih3aWR0aCgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHQoKS0+dmFs
dWUoKSkpOwogICAgIG1hc2tJbWFnZS0+aW5pdChzaXplKTsKIAotICAgIEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0ICpwYXR0ZXJuQ29udGV4dCA9IGRldmljZS0+Y29udGV4dEZvckltYWdlKG1hc2tJ
bWFnZSk7CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHBhdHRlcm5Db250ZXh0ID0gZGV2
aWNlLT5jb250ZXh0Rm9ySW1hZ2UobWFza0ltYWdlKTsKICAgICBkZXZpY2UtPnB1c2hDb250ZXh0
KHBhdHRlcm5Db250ZXh0KTsKIAogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQo
cGF0dGVybkNvbnRleHQtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKIAotICAgIFJlbmRlclNW
R0NvbnRhaW5lciAqbWFza0NvbnRhaW5lciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR0NvbnRhaW5l
ciAqPihyZW5kZXJlcigpKTsKKyAgICBSZW5kZXJTVkdDb250YWluZXIqIG1hc2tDb250YWluZXIg
PSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdDb250YWluZXIqPihyZW5kZXJlcigpKTsKICAgICBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyBpbmZvKGNvbnRleHQuZ2V0KCksIEludFJlY3QoKSwgUGFpbnRQ
aGFzZUZvcmVncm91bmQsIDAsIDAsIDApOwogICAgIG1hc2tDb250YWluZXItPnNldERyYXdzQ29u
dGVudHModHJ1ZSk7CiAgICAgbWFza0NvbnRhaW5lci0+cGFpbnQoaW5mbywgMCwgMCk7CkBAIC0x
NDAsMTQgKzEzNywxNCBAQCBSZW5kZXJPYmplY3QqIFNWR01hc2tFbGVtZW50OjpjcmVhdGVSZW5k
CiAgICAgcmV0dXJuIG1hc2tDb250YWluZXI7CiB9CiAKLUtDYW52YXNNYXNrZXIgKlNWR01hc2tF
bGVtZW50OjpjYW52YXNSZXNvdXJjZSgpCitLQ2FudmFzTWFza2VyKiBTVkdNYXNrRWxlbWVudDo6
Y2FudmFzUmVzb3VyY2UoKQogewogICAgIGlmICghbV9tYXNrZXIpIHsKLSAgICAgICAgbV9tYXNr
ZXIgPSBzdGF0aWNfY2FzdDxLQ2FudmFzTWFza2VyICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVh
dGVSZXNvdXJjZShSU19NQVNLRVIpKTsKKyAgICAgICAgbV9tYXNrZXIgPSBzdGF0aWNfY2FzdDxL
Q2FudmFzTWFza2VyKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVJlc291cmNlKFJTX01BU0tF
UikpOwogICAgICAgICBtX2RpcnR5ID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKG1fZGlydHkpIHsK
LSAgICAgICAgS0NhbnZhc0ltYWdlICpuZXdNYXNrSW1hZ2UgPSBkcmF3TWFza2VyQ29udGVudCgp
OworICAgICAgICBLQ2FudmFzSW1hZ2UqIG5ld01hc2tJbWFnZSA9IGRyYXdNYXNrZXJDb250ZW50
KCk7CiAgICAgICAgIG1fbWFza2VyLT5zZXRNYXNrKG5ld01hc2tJbWFnZSk7CiAgICAgICAgIG1f
ZGlydHkgPSAobmV3TWFza0ltYWdlICE9IDApOwogICAgIH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR01hc2tFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
TWFza0VsZW1lbnQuaAkocmV2aXNpb24gMTcxNTUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdN
YXNrRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyMyArMjMsMjIgQEAKICNkZWZpbmUg
U1ZHTWFza0VsZW1lbnRfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRlICJTVkdUZXN0
cy5oIgorI2luY2x1ZGUgIktDYW52YXNNYXNrZXIuaCIKKyNpbmNsdWRlICJTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkLmgiCiAjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlLmgiCi0jaW5jbHVkZSAi
U1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5o
IgotI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKLQotI2luY2x1ZGUg
IktDYW52YXNNYXNrZXIuaCIKKyNpbmNsdWRlICJTVkdUZXN0cy5oIgorI2luY2x1ZGUgIlNWR1VS
SVJlZmVyZW5jZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewogICAgIGNsYXNzIEF0dHJpYnV0
ZTsKICAgICBjbGFzcyBTVkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZHTWFza0VsZW1lbnQgOiBwdWJs
aWMgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIFNWR1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlj
IFNWR0xhbmdTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkCiAgICAgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHTWFz
a0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CkBAIC00OCwxNSArNDcs
MTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUKIAogICAgICAgICAvLyAnU1ZHTWFza0VsZW1lbnQnIGZ1
bmN0aW9ucwogICAgICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0ciwgYm9vbCBwcmVz
ZXJ2ZURlY2xzKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSAqYXR0cik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFu
Z2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJlc2VydmVEZWNscyk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKIAotICAgICAgICB2aXJ0
dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpIHsgcmV0dXJuIFN0
eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9Ci0gICAgICAgIHZpcnR1YWwg
UmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0
eWxlICpzdHlsZSk7Ci0gICAgICAgIHZpcnR1YWwgS0NhbnZhc01hc2tlciAqY2FudmFzUmVzb3Vy
Y2UoKTsKKyAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUq
IHN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsg
fQorICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEqLCBSZW5kZXJTdHlsZSopOworICAgICAgICB2aXJ0dWFsIEtDYW52YXNNYXNrZXIqIGNhbnZh
c1Jlc291cmNlKCk7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEtDYW52YXNJbWFnZSAqZHJh
d01hc2tlckNvbnRlbnQoKTsKKyAgICAgICAgS0NhbnZhc0ltYWdlKiBkcmF3TWFza2VyQ29udGVu
dCgpOwogCiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0ZPUldBUkRfREVDTEFSQVRJT05TKFNW
R1VSSVJlZmVyZW5jZSwgU3RyaW5nLCBIcmVmLCBocmVmKQogICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9GT1JXQVJEX0RFQ0xBUkFUSU9OUyhTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLCBi
b29sLCBFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLCBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
KQpAQCAtNjksNyArNjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIGNv
bnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQog
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgS0NhbnZhc01hc2tlciAqbV9tYXNrZXI7CisgICAgICAg
IEtDYW52YXNNYXNrZXIqIG1fbWFza2VyOwogICAgICAgICBib29sIG1fZGlydHk7CiAgICAgfTsK
IApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGFpbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1BhaW50LmNwcAkocmV2aXNpb24gMTcxNTUpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdQYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRm
b3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAog
CkBAIC0yMiw3ICsyMiw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQ
UE9SVAotI2luY2x1ZGUgImtzdmcuaCIKICNpbmNsdWRlICJTVkdQYWludC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC04MywxOSArODIsMTkgQEAgdm9pZCBTVkdQYWludDo6c2V0UGFpbnQo
U1ZHUGFpbnRUeXBlIHBhaQogewogICAgIG1fcGFpbnRUeXBlID0gcGFpbnRUeXBlOwogCi0gICAg
aWYobV9wYWludFR5cGUgPT0gU1ZHX1BBSU5UVFlQRV9VUkkpCisgICAgaWYgKG1fcGFpbnRUeXBl
ID09IFNWR19QQUlOVFRZUEVfVVJJKQogICAgICAgICBzZXRVcmkodXJpKTsKLSAgICBlbHNlIGlm
KG1fcGFpbnRUeXBlID09IFNWR19QQUlOVFRZUEVfUkdCQ09MT1IpCisgICAgZWxzZSBpZiAobV9w
YWludFR5cGUgPT0gU1ZHX1BBSU5UVFlQRV9SR0JDT0xPUikKICAgICAgICAgc2V0UkdCQ29sb3Io
cmdiUGFpbnQpOwogfQogCiBTdHJpbmcgU1ZHUGFpbnQ6OmNzc1RleHQoKSBjb25zdAogewotICAg
IGlmKG1fcGFpbnRUeXBlID09IFNWR19QQUlOVFRZUEVfTk9ORSkKKyAgICBpZiAobV9wYWludFR5
cGUgPT0gU1ZHX1BBSU5UVFlQRV9OT05FKQogICAgICAgICByZXR1cm4gIm5vbmUiOwotICAgIGVs
c2UgaWYobV9wYWludFR5cGUgPT0gU1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IpCisgICAgZWxz
ZSBpZiAobV9wYWludFR5cGUgPT0gU1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IpCiAgICAgICAg
IHJldHVybiAiY3VycmVudENvbG9yIjsKLSAgICBlbHNlIGlmKG1fcGFpbnRUeXBlID09IFNWR19Q
QUlOVFRZUEVfVVJJKQorICAgIGVsc2UgaWYgKG1fcGFpbnRUeXBlID09IFNWR19QQUlOVFRZUEVf
VVJJKQogICAgICAgICByZXR1cm4gInVybCgiICsgbV91cmkgKyAiKSI7CiAKICAgICByZXR1cm4g
U1ZHQ29sb3I6OmNzc1RleHQoKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhaW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGFpbnQuaAkocmV2aXNpb24gMTcx
NTUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBX
ZWluaWcgKHNhbS53ZWluaWdAZ21pYWwuY29tKQogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIEtERSBwcm9qZWN0CkBAIC0yNSw4ICsyNSw3IEBACiAjZGVmaW5lIEtTVkdfU1ZHUGFpbnRJ
bXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSAia3N2Zy5oIgotI2luY2x1ZGUg
PFNWR0NvbG9yLmg+CisjaW5jbHVkZSAiU1ZHQ29sb3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCg==
</data>
<flag name="review"
          id="3817"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>