<?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>10380</bug_id>
          
          <creation_ts>2006-08-13 08:37:40 -0700</creation_ts>
          <short_desc>tspans don&apos;t support styles</short_desc>
          <delta_ts>2006-10-10 18:39:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>SVGHitList</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>6423</blocked>
    
    <blocked>6424</blocked>
    
    <blocked>6559</blocked>
    
    <blocked>9998</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>eric</cc>
    
    <cc>hyatt</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>52493</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-08-13 08:37:40 -0700</bug_when>
    <thetext>tspans don&apos;t support style, or have any support for, well anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52494</commentid>
    <comment_count>1</comment_count>
      <attachid>10013</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-08-13 08:53:14 -0700</bug_when>
    <thetext>Created attachment 10013
initial renderer for tspan support

Having finally undone the immense damage done the standard text rendering here&apos;s an initial patch to support style

This is basically a rehash of the standard &lt;text&gt; renderer, simply to get a base platform for styles to be applied.  Currently blats layout as i&apos;ve made tspans become blocks which currently triggers a wrap.  As yet i&apos;m not sure what the best solution to this will be.

I believe a second layout pass should be added following the initial renderblock layout method that repositions the generated elements.  Initially this will just line everything up in good, wholesome order, although i just realised that may eat whitespace... :-/

Anyhoo, once that&apos;s going paint will need to be fixed, as will the paint method for the standard svg text renderer, as the current paint methods make absolute positioning painful...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52505</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-13 21:30:41 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=10013) [edit]
&gt; initial renderer for tspan support

Your patch does not contain the new files.

Once it does, hyatt shoult take a look at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52507</commentid>
    <comment_count>3</comment_count>
      <attachid>10017</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-08-13 21:44:08 -0700</bug_when>
    <thetext>Created attachment 10017
With new files

I am a muppet, new files now included</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52510</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-08-13 21:53:27 -0700</bug_when>
    <thetext>Just to note, currently the tspan renderer is basically a stripped down version of the svgtext renderer.  In the future (when the paint methods are tidied up) it may (in fact should) be possible to merge them into a single renderer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55407</commentid>
    <comment_count>5</comment_count>
      <attachid>10532</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-09-13 09:19:31 -0700</bug_when>
    <thetext>Created attachment 10532
Styled tspans patch attempt #4 million

Okles, as it currently stands i&apos;m not happy with how vertical alignment is performed... may be able to just align it manually, which may prove to be best approach (and maybe faster?)

also, this patch does slightly better at interacting with inspector... but it still gets it wrong -- node lookup works better though.

finally, this current patch break filter support for text -- which is incredibly irritating :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55410</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-09-13 09:30:44 -0700</bug_when>
    <thetext>Heya Oliver,

excellent work! Doing some kind of review now:

+#include &quot;RenderSVGInlineText.h&quot;
...
 RenderObject *Text::createRenderer(RenderArena *arena, RenderStyle *style)
 {
+    if(parentNode()-&gt;isSVGElement())
+        return new (arena) RenderSVGInlineText(this, str);
..

Both the include and the isSVGElement() needs to be in a SVG_SUPPORT block.

+RenderSVGInlineText::RenderSVGInlineText(Node *n, StringImpl *str) : RenderText(n, str) { }

Style issues: use Node* n, StringImpl* str and new lines for { }

+    virtual const char *renderName() const { return &quot;RenderSVGInlineText&quot;; }

Star misplaced.


+    SVGTextElement *text = static_cast&lt;SVGTextElement *&gt;(element());

Stars misplaced.

+void SVGInlineTextBox::paint(RenderObject::PaintInfo&amp; paintInfo, int tx, int ty){

{ should go to a new line.

+    const SVGRenderStyle *svgStyle = object()-&gt;style()-&gt;svgStyle();

Star misplaced.

+    KCanvasFilter* filter = getFilterById(object()-&gt;document(), svgStyle-&gt;filter().substring(1));

Not related to your patch, but it reminds me how ugly the
referencing is atm, with this substring(1) stuff ... ewwww

+    KRenderingPaintServer *fillPaintServer = KSVGPainterFactory::fillPaintServer(object()-&gt;style(), object());
...
+    KRenderingPaintServer *strokePaintServer = KSVGPainterFactory::strokePaintServer(object()-&gt;style(), object());

Stars misplaced.

+    bool isSVG=m_object&amp;&amp;m_object-&gt;element()&amp;&amp;m_object-&gt;element()-&gt;isSVGElement();
+    placeBoxesVertically(isSVG?heightOfBlock-maxAscent:heightOfBlock, maxHeight, maxAscent, strictMode, topPosition, bottomPosition, selectionTop, selectionBottom);
 
Spaces between operators, really! ;-)
Also needs a SVG_SUPPORT block.

Style issues only, other than that it rocks! Great work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55568</commentid>
    <comment_count>7</comment_count>
      <attachid>10532</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-15 01:37:43 -0700</bug_when>
    <thetext>Comment on attachment 10532
Styled tspans patch attempt #4 million

Yup, as WildFox noted:
+    if(parentNode()-&gt;isSVGElement())
+        return new (arena) RenderSVGInlineText(this, str);
needs SVG_SUPPORT wrappers

mat is poor name for a variable:
+    AffineTransform mat = absoluteTransform();
+    rects.append(enclosingIntRect(mat.mapRect(FloatRect(0, 0, width(), height()))));

sleep now, review later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56679</commentid>
    <comment_count>8</comment_count>
      <attachid>10813</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-09-27 19:40:56 -0700</bug_when>
    <thetext>Created attachment 10813
styled tspan patch #4 million and one

and again...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56680</commentid>
    <comment_count>9</comment_count>
      <attachid>10813</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-27 20:01:44 -0700</bug_when>
    <thetext>Comment on attachment 10813
styled tspan patch #4 million and one

marking this for review so others will take a peak.

I&apos;ve looked through, there are definitely some style issues left to resolve.  I&apos;m also not certain the placement of the filter/clip/mask code is correct.  I don&apos;t think we want to filter the individual boxes, unless there is only one box per tspan/text (since that would cause blurs to be off).

Also, SVG_SUPPORT is missing from dom/Text.cpp and possibly other core files.

Some example style issues:

+RenderSVGTSpan::RenderSVGTSpan(Node *n):RenderInline(n) {}

Node* n not Node *n
also generally : RenderInline is on the next line, indented
and in this case { } would be on separate lines after that

+    InlineFlowBox* initFlow=firstLineBox();

generally we use spaces before and after =

This could benefit from argument names:
+    virtual InlineBox* createInlineBox(bool, bool, bool isOnlyRun = false);


+void SVGInlineTextBox::paint(RenderObject::PaintInfo&amp; paintInfo, int tx, int ty){

{ should go on a separate line.

Nice work olliej.  I can&apos;t wait to see this land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56891</commentid>
    <comment_count>10</comment_count>
      <attachid>10859</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-10-01 21:36:59 -0700</bug_when>
    <thetext>Created attachment 10859
reformatting patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56899</commentid>
    <comment_count>11</comment_count>
      <attachid>10859</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-10-01 23:38:23 -0700</bug_when>
    <thetext>Comment on attachment 10859
reformatting patch

found bug in handling of transparency</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56900</commentid>
    <comment_count>12</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-10-01 23:40:46 -0700</bug_when>
    <thetext>My feeling is that i need to get tspans into the used render tree -- it seems the sanest way of insuring opacity, filters, etc get applied properly.  I have a small local fix for transparency, but it only fixes opacity, and none of the other problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54433</commentid>
    <comment_count>13</comment_count>
      <attachid>10918</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-10-04 17:04:11 -0700</bug_when>
    <thetext>Created attachment 10918
Now with anchoring and positioning

There are still a few hackish places, and text-filter is still borked...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54099</commentid>
    <comment_count>14</comment_count>
      <attachid>10918</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-10-05 16:43:21 -0700</bug_when>
    <thetext>Comment on attachment 10918
Now with anchoring and positioning

A bunch of these &quot;if(&quot; should be &quot;if (&quot; (spacing)

This should be multiple lines:
+RenderSVGInline::RenderSVGInline(Node *n) : RenderInline(n) {}
also the * is in the &quot;wrong&quot; place.

Shouldn&apos;t need RenderObject:: here:
+    RenderObject::PaintInfo pi = paintInfo;

As demonstrated recently in a separate bug, this will need a c-&gt;clip(boundingBox) call:
+    if (opacity &lt; 1.0f)
+        c-&gt;beginTransparencyLayer(opacity);

+    boundingBox=object-&gt;absoluteTransform().mapRect(boundingBox);
 need some spacing around the =

Also, I don&apos;t think you want to be using the aboluteTransform here:
+    boundingBox=object-&gt;absoluteTransform().mapRect(boundingBox);

Filters, clip, etc. all take the relativeBBox (normally).

Old comments like this can be removed:

+        // fillPaintServer-&gt;setActiveClient(this);

Our modern style does constructors slightly differently, with each m_ on its own line:

+    SVGInlineFlowBox(RenderObject *obj) : InlineFlowBox(obj), m_hasAbsx(false), 
+      m_hasAbsy(false), m_absx(0), m_absy(0), m_dx(0), m_dy(0) 
+    {
+        m_isSVGFlow = true;
+    }


The { goes on teh same line as the for():
+    for (InlineBox* curr = firstChild(); curr; curr = curr-&gt;nextOnLine()) 
+    {
again for all of the if&apos;s in that file:
+    if (positioned)
+    {

This doesn&apos;t strike me as a very helpful comment:
+    //SVG flowbox layout rules are different from html, etc
it should be clarified or removed.

Maybe &quot;ignoreX, ignoreY&quot; would be better here?
+        int temp1, temp2; //throwaway values

Why these constants?
+        int top = 100000, bottom = -100000, baseline = heightOfBlock;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54090</commentid>
    <comment_count>15</comment_count>
      <attachid>10939</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-10-05 20:09:58 -0700</bug_when>
    <thetext>Created attachment 10939
with selection issues fixed

And again, now generates correct repaint info for selection, and supports local transforms (oops)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53893</commentid>
    <comment_count>16</comment_count>
      <attachid>10939</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-10-08 00:50:12 -0700</bug_when>
    <thetext>Comment on attachment 10939
with selection issues fixed

obsoleted, and i spotted more formatting issues *sigh*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53894</commentid>
    <comment_count>17</comment_count>
      <attachid>10972</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-10-08 00:51:50 -0700</bug_when>
    <thetext>Created attachment 10972
Final (hopefully) patch

Fixes clipping, masking, and filtering</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53895</commentid>
    <comment_count>18</comment_count>
      <attachid>10973</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-10-08 01:40:25 -0700</bug_when>
    <thetext>Created attachment 10973
removed modification to RenderText

the remaining issue would seem to be the use of a m_isSVGFlow flag instead of virtual methods for layout.  I&apos;m hesitant to use virtual methods in the middle of the layout code as that introduces new virtual calls to the layout code for non-svg files as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53788</commentid>
    <comment_count>19</comment_count>
      <attachid>10988</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-10-08 15:26:37 -0700</bug_when>
    <thetext>Created attachment 10988
with darins comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53789</commentid>
    <comment_count>20</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-10-08 17:02:31 -0700</bug_when>
    <thetext>Patch looks good to me.  I only have one objection really.

I would rather you remove the SVG flow bit and make placesBoxesHorizontally and placeBoxesVertically virtual.  Then you can just subclass them and do your SVG work instead (and move your new place*** functions into your SVG flow box subclass).  That should keep all SVG code out of InlineFlowBox and should perform just fine.

Also, a minor nitpick that you can choose to fix or not... the name RenderSVGInlineText is pretty redundant... I&apos;d just call it RenderSVGText (that way you have consistently named subclasses that just have the word SVG in between Render and the rest of the class name).
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53710</commentid>
    <comment_count>21</comment_count>
      <attachid>10997</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-10-09 13:43:40 -0700</bug_when>
    <thetext>Created attachment 10997
removed m_isSVGFLow, using virtual methods to perform flow layout

Haven&apos;t renamed RenderSVGInlineText to RenderSVGText as RenderSVGText as RenderSVGText exists, and is for a &lt;text&gt; element rather than #text :-/

Also as hyatt noted this needs performance testing to check the impact of the changes to Text::createRenderer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53711</commentid>
    <comment_count>22</comment_count>
      <attachid>10997</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-10-09 13:48:59 -0700</bug_when>
    <thetext>Comment on attachment 10997
removed m_isSVGFLow, using virtual methods to perform flow layout

This fails a number of tests now :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53712</commentid>
    <comment_count>23</comment_count>
      <attachid>10997</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-10-09 13:56:01 -0700</bug_when>
    <thetext>Comment on attachment 10997
removed m_isSVGFLow, using virtual methods to perform flow layout

No, i was wrong, it&apos;s fine -- still needs perf testing though</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53715</commentid>
    <comment_count>24</comment_count>
      <attachid>10998</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-10-09 14:33:24 -0700</bug_when>
    <thetext>Created attachment 10998
yet more formatting changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53718</commentid>
    <comment_count>25</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-10-09 14:56:30 -0700</bug_when>
    <thetext>YOu don&apos;t need parentPaintMethod, since RootInlineBox doesn&apos;t do anything you care about.

So you can just do

flow-&gt;InlineFlowBox::paint

instead.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53640</commentid>
    <comment_count>26</comment_count>
      <attachid>11004</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-10-09 17:22:51 -0700</bug_when>
    <thetext>Created attachment 11004
incorporating suggestions from hyatt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53537</commentid>
    <comment_count>27</comment_count>
      <attachid>11004</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-10-10 02:34:32 -0700</bug_when>
    <thetext>Comment on attachment 11004
incorporating suggestions from hyatt

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53538</commentid>
    <comment_count>28</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-10-10 04:12:59 -0700</bug_when>
    <thetext>Make sure to performance test this before landing, since it added virtual method calls to some potentially hot code.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10013</attachid>
            <date>2006-08-13 08:53:14 -0700</date>
            <delta_ts>2006-08-13 21:44:08 -0700</delta_ts>
            <desc>initial renderer for tspan support</desc>
            <filename>inittspanrenderer.patch</filename>
            <type>text/plain</type>
            <size>5836</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1ODQ1KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NjQsNiAr
NjY0LDggQEAKIAkJOTNGMTlCMTYwODI0NUU1OTAwMUU5QUJDIC8qIEphdmFTY3JpcHRDb3JlLmZy
YW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY4MjE2Mjk5MDI5RjRGQjUwMTAwMDEzMSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87
IH07CiAJCTkzRjE5QjE3MDgyNDVFNTkwMDFFOUFCQyAvKiBsaWJpY3Vjb3JlLmR5bGliIGluIEZy
YW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGMUQzMUEwNTU4
Q0M1QzAwODIxQkMwIC8qIGxpYmljdWNvcmUuZHlsaWIgKi87IH07CiAJCTkzRjE5QjE4MDgyNDVF
NTkwMDFFOUFCQyAvKiBsaWJ4c2x0LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODQwNjMzMDcwNzMxQTc3MjAwREIxRkQxIC8qIGxpYnhzbHQu
ZHlsaWIgKi87IH07CisJCUE3NTg1NjhEMEE4RjM0OTAwMEQwODIzQiAvKiBSZW5kZXJTVkdUU3Bh
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1ODU2
OEIwQThGMzQ5MDAwRDA4MjNCIC8qIFJlbmRlclNWR1RTcGFuLmggKi87IH07CisJCUE3NTg1NjhF
MEE4RjM0OTAwMEQwODIzQiAvKiBSZW5kZXJTVkdUU3Bhbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzU4NTY4QzBBOEYzNDkwMDBEMDgyM0IgLyog
UmVuZGVyU1ZHVFNwYW4uY3BwICovOyB9OwogCQlBNzYzOEE4QjA5OTU4RUE1MDAwN0UxNEYgLyog
V0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3NjM4QTg5MDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVu
dE1hcEZpbHRlci5oICovOyB9OwogCQlBNzYzOEE4QzA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNw
bGFjZW1lbnRNYXBGaWx0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3NjM4QThBMDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZp
bHRlci5tICovOyB9OwogCQlBNzYzOEE5MjA5OTU5MkMzMDAwN0UxNEYgLyogV0tEaXNwbGFjZW1l
bnRNYXBGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1h
cEZpbHRlci5jaWtlcm5lbCAqLzsgfTsKQEAgLTIyNzQsNiArMjI3Niw4IEBACiAJCTkzRjhCMzA2
MEEzMDBGRUEwMEY2MUFCOCAvKiBDb2RlR2VuZXJhdG9ySlMucG0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5wZXJsOyBuYW1lID0gQ29kZUdlbmVyYXRvckpTLnBtOyBwYXRoID0gLi4vc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjhCMzA3
MEEzMDBGRUEwMEY2MUFCOCAvKiBnZW5lcmF0ZS1iaW5kaW5ncy5wbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnBlcmw7IG5hbWUgPSAiZ2VuZXJhdGUtYmluZGluZ3MucGwiOyBwYXRoID0gInNjcmlw
dHMvZ2VuZXJhdGUtYmluZGluZ3MucGwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0Y4QjMwODBBMzAwRkVBMDBGNjFBQjggLyogSURMU3RydWN0dXJlLnBtICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5zY3JpcHQucGVybDsgbmFtZSA9IElETFN0cnVjdHVyZS5wbTsgcGF0aCA9IHNjcmlwdHMvSURM
U3RydWN0dXJlLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzU4NTY4QjBBOEYz
NDkwMDBEMDgyM0IgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyU1ZHVFNwYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTc1ODU2OEMwQThGMzQ5MDAwRDA4MjNCIC8qIFJlbmRlclNWR1RTcGFuLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1RTcGFuLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdLRGlzcGxh
Y2VtZW50TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzYz
OEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmlsdGVyLm07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAv
KiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQ3OTcsNiArNDgwMSw4IEBACiAJCQkJRkFFMDQxODkwOTc1OTY5NDAwMDU0MEJF
IC8qIFJlbmRlclNWR0ltYWdlLmggKi8sCiAJCQkJNjU3NDNCNTAwOTcwNzZGODAwMUU3Q0VGIC8q
IFJlbmRlclNWR1RleHQuY3BwICovLAogCQkJCTY1NzQzQjUxMDk3MDc2RjgwMDFFN0NFRiAvKiBS
ZW5kZXJTVkdUZXh0LmggKi8sCisJCQkJQTc1ODU2OEIwQThGMzQ5MDAwRDA4MjNCIC8qIFJlbmRl
clNWR1RTcGFuLmggKi8sCisJCQkJQTc1ODU2OEMwQThGMzQ5MDAwRDA4MjNCIC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0ga2NhbnZhczsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CkBAIC02Mzg4LDYgKzYzOTQsNyBAQAogCQkJCTFBQjdGQzg0MEE4QjkyRUMw
MEQ5RDM3QiAvKiBYUGF0aFV0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjdGQzg2MEE4Qjky
RUMwMEQ5RDM3QiAvKiBYUGF0aFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUI3RkM4ODBB
OEI5MkVDMDBEOUQzN0IgLyogWFBhdGhWYXJpYWJsZVJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTc1ODU2OEQwQThGMzQ5MDAwRDA4MjNCIC8qIFJlbmRlclNWR1RTcGFuLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTY0MjEsNyArNjQyOCw2IEBACiAJCTA4NjdENjkwRkU4NDAyOEZDMDJBQUMw
NyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWls
ZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNv
bmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87Ci0JCQljb21wYXRp
YmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9
IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKQEAgLTY0MzUsOCArNjQ0MSw2
IEBACiAJCQltYWluR3JvdXAgPSAwODY3RDY5MUZFODQwMjhGQzAyQUFDMDcgLyogV2ViS2l0ICov
OwogCQkJcHJvZHVjdFJlZkdyb3VwID0gMDM0NzY4REZGRjM4QTUwNDExREI5QzhCIC8qIFByb2R1
Y3RzICovOwogCQkJcHJvamVjdERpclBhdGggPSAiIjsKLQkJCXByb2plY3RSb290ID0gIiI7Ci0J
CQlzaG91bGRDaGVja0NvbXBhdGliaWxpdHkgPSAxOwogCQkJdGFyZ2V0cyA9ICgKIAkJCQk5M0Yx
OThBNTA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZSAqLywKIAkJCQlERDA0MUZCRTA5RDlEREJF
MDAxMEFGMkEgLyogRGVyaXZlZCBTb3VyY2VzICovLApAQCAtNzI1OSw2ICs3MjYzLDcgQEAKIAkJ
CQkxQUI3RkM4MzBBOEI5MkVDMDBEOUQzN0IgLyogWFBhdGhVdGlsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBQjdGQzg1MEE4QjkyRUMwMEQ5RDM3QiAvKiBYUGF0aFZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBQjdGQzg3MEE4QjkyRUMwMEQ5RDM3QiAvKiBYUGF0aFZhcmlhYmxlUmVm
ZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3NTg1NjhFMEE4RjM0OTAwMEQwODIzQiAv
KiBSZW5kZXJTVkdUU3Bhbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IGNzcy9zdmcuY3NzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGNzcy9zdmcuY3NzCShyZXZpc2lvbiAxNTg0NSkKKysrIGNzcy9zdmcuY3Nz
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw2IEBAIHN2Zywgc3ltYm9sLCBtYXJrZXIsIHBh
dHRlcm4gewogICAgIG92ZXJmbG93OiBoaWRkZW4KIH0KIAotdGV4dCwgZm9yZWlnbk9iamVjdCB7
Cit0ZXh0LCB0c3BhbiwgZm9yZWlnbk9iamVjdCB7CiAgICAgZGlzcGxheTogYmxvY2sgIWltcG9y
dGFudAogfQpJbmRleDoga3N2ZzIvc3ZnL1NWR1RTcGFuRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga3N2ZzIvc3ZnL1NWR1RTcGFuRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1ODQ1KQorKysga3N2
ZzIvc3ZnL1NWR1RTcGFuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcg
QEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR1RTcGFuRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAi
UmVuZGVyU1ZHVFNwYW4uaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ3LDcg
KzQ3LDcgQEAgYm9vbCBTVkdUU3BhbkVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUgogCiBSZW5k
ZXJPYmplY3QgKlNWR1RTcGFuRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFy
ZW5hLCBSZW5kZXJTdHlsZSAqKQogewotICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJJbmxp
bmUodGhpcyk7CisgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR1RTcGFuKHRoaXMpOwog
fQogCiAvLyB2aW06dHM9NDpub2V0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10017</attachid>
            <date>2006-08-13 21:44:08 -0700</date>
            <delta_ts>2006-09-13 09:19:31 -0700</delta_ts>
            <desc>With new files</desc>
            <filename>inittspanrenderer.patch</filename>
            <type>text/plain</type>
            <size>11723</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1ODQ2KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NjQsNiAr
NjY0LDggQEAKIAkJOTNGMTlCMTYwODI0NUU1OTAwMUU5QUJDIC8qIEphdmFTY3JpcHRDb3JlLmZy
YW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY4MjE2Mjk5MDI5RjRGQjUwMTAwMDEzMSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87
IH07CiAJCTkzRjE5QjE3MDgyNDVFNTkwMDFFOUFCQyAvKiBsaWJpY3Vjb3JlLmR5bGliIGluIEZy
YW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGMUQzMUEwNTU4
Q0M1QzAwODIxQkMwIC8qIGxpYmljdWNvcmUuZHlsaWIgKi87IH07CiAJCTkzRjE5QjE4MDgyNDVF
NTkwMDFFOUFCQyAvKiBsaWJ4c2x0LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODQwNjMzMDcwNzMxQTc3MjAwREIxRkQxIC8qIGxpYnhzbHQu
ZHlsaWIgKi87IH07CisJCUE3NTg1NjhEMEE4RjM0OTAwMEQwODIzQiAvKiBSZW5kZXJTVkdUU3Bh
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1ODU2
OEIwQThGMzQ5MDAwRDA4MjNCIC8qIFJlbmRlclNWR1RTcGFuLmggKi87IH07CisJCUE3NTg1NjhF
MEE4RjM0OTAwMEQwODIzQiAvKiBSZW5kZXJTVkdUU3Bhbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzU4NTY4QzBBOEYzNDkwMDBEMDgyM0IgLyog
UmVuZGVyU1ZHVFNwYW4uY3BwICovOyB9OwogCQlBNzYzOEE4QjA5OTU4RUE1MDAwN0UxNEYgLyog
V0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3NjM4QTg5MDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVu
dE1hcEZpbHRlci5oICovOyB9OwogCQlBNzYzOEE4QzA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNw
bGFjZW1lbnRNYXBGaWx0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3NjM4QThBMDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZp
bHRlci5tICovOyB9OwogCQlBNzYzOEE5MjA5OTU5MkMzMDAwN0UxNEYgLyogV0tEaXNwbGFjZW1l
bnRNYXBGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1h
cEZpbHRlci5jaWtlcm5lbCAqLzsgfTsKQEAgLTIyNzQsNiArMjI3Niw4IEBACiAJCTkzRjhCMzA2
MEEzMDBGRUEwMEY2MUFCOCAvKiBDb2RlR2VuZXJhdG9ySlMucG0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5wZXJsOyBuYW1lID0gQ29kZUdlbmVyYXRvckpTLnBtOyBwYXRoID0gLi4vc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjhCMzA3
MEEzMDBGRUEwMEY2MUFCOCAvKiBnZW5lcmF0ZS1iaW5kaW5ncy5wbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnBlcmw7IG5hbWUgPSAiZ2VuZXJhdGUtYmluZGluZ3MucGwiOyBwYXRoID0gInNjcmlw
dHMvZ2VuZXJhdGUtYmluZGluZ3MucGwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0Y4QjMwODBBMzAwRkVBMDBGNjFBQjggLyogSURMU3RydWN0dXJlLnBtICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5zY3JpcHQucGVybDsgbmFtZSA9IElETFN0cnVjdHVyZS5wbTsgcGF0aCA9IHNjcmlwdHMvSURM
U3RydWN0dXJlLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzU4NTY4QjBBOEYz
NDkwMDBEMDgyM0IgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyU1ZHVFNwYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTc1ODU2OEMwQThGMzQ5MDAwRDA4MjNCIC8qIFJlbmRlclNWR1RTcGFuLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1RTcGFuLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdLRGlzcGxh
Y2VtZW50TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzYz
OEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmlsdGVyLm07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAv
KiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQ3OTcsNiArNDgwMSw4IEBACiAJCQkJRkFFMDQxODkwOTc1OTY5NDAwMDU0MEJF
IC8qIFJlbmRlclNWR0ltYWdlLmggKi8sCiAJCQkJNjU3NDNCNTAwOTcwNzZGODAwMUU3Q0VGIC8q
IFJlbmRlclNWR1RleHQuY3BwICovLAogCQkJCTY1NzQzQjUxMDk3MDc2RjgwMDFFN0NFRiAvKiBS
ZW5kZXJTVkdUZXh0LmggKi8sCisJCQkJQTc1ODU2OEIwQThGMzQ5MDAwRDA4MjNCIC8qIFJlbmRl
clNWR1RTcGFuLmggKi8sCisJCQkJQTc1ODU2OEMwQThGMzQ5MDAwRDA4MjNCIC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0ga2NhbnZhczsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CkBAIC02Mzg4LDYgKzYzOTQsNyBAQAogCQkJCTFBQjdGQzg0MEE4QjkyRUMw
MEQ5RDM3QiAvKiBYUGF0aFV0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjdGQzg2MEE4Qjky
RUMwMEQ5RDM3QiAvKiBYUGF0aFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUI3RkM4ODBB
OEI5MkVDMDBEOUQzN0IgLyogWFBhdGhWYXJpYWJsZVJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTc1ODU2OEQwQThGMzQ5MDAwRDA4MjNCIC8qIFJlbmRlclNWR1RTcGFuLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTY0MjEsNyArNjQyOCw2IEBACiAJCTA4NjdENjkwRkU4NDAyOEZDMDJBQUMw
NyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWls
ZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNv
bmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87Ci0JCQljb21wYXRp
YmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9
IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKQEAgLTY0MzUsOCArNjQ0MSw2
IEBACiAJCQltYWluR3JvdXAgPSAwODY3RDY5MUZFODQwMjhGQzAyQUFDMDcgLyogV2ViS2l0ICov
OwogCQkJcHJvZHVjdFJlZkdyb3VwID0gMDM0NzY4REZGRjM4QTUwNDExREI5QzhCIC8qIFByb2R1
Y3RzICovOwogCQkJcHJvamVjdERpclBhdGggPSAiIjsKLQkJCXByb2plY3RSb290ID0gIiI7Ci0J
CQlzaG91bGRDaGVja0NvbXBhdGliaWxpdHkgPSAxOwogCQkJdGFyZ2V0cyA9ICgKIAkJCQk5M0Yx
OThBNTA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZSAqLywKIAkJCQlERDA0MUZCRTA5RDlEREJF
MDAxMEFGMkEgLyogRGVyaXZlZCBTb3VyY2VzICovLApAQCAtNzI1OSw2ICs3MjYzLDcgQEAKIAkJ
CQkxQUI3RkM4MzBBOEI5MkVDMDBEOUQzN0IgLyogWFBhdGhVdGlsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBQjdGQzg1MEE4QjkyRUMwMEQ5RDM3QiAvKiBYUGF0aFZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBQjdGQzg3MEE4QjkyRUMwMEQ5RDM3QiAvKiBYUGF0aFZhcmlhYmxlUmVm
ZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3NTg1NjhFMEE4RjM0OTAwMEQwODIzQiAv
KiBSZW5kZXJTVkdUU3Bhbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IGNzcy9zdmcuY3NzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGNzcy9zdmcuY3NzCShyZXZpc2lvbiAxNTg0NikKKysrIGNzcy9zdmcuY3Nz
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw2IEBAIHN2Zywgc3ltYm9sLCBtYXJrZXIsIHBh
dHRlcm4gewogICAgIG92ZXJmbG93OiBoaWRkZW4KIH0KIAotdGV4dCwgZm9yZWlnbk9iamVjdCB7
Cit0ZXh0LCB0c3BhbiwgZm9yZWlnbk9iamVjdCB7CiAgICAgZGlzcGxheTogYmxvY2sgIWltcG9y
dGFudAogfQpJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdUU3Bhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2NhbnZhcy9SZW5kZXJTVkdUU3Bhbi5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1JlbmRl
clNWR1RTcGFuLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiAgICAgICAgICAgICAgIDIwMDYgQWxleGFu
ZGVyIEtlbGxldHQgPGx5cGFub3ZAa2RlLm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1B
IDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmZGVm
IFNWR19TVVBQT1JUCisjaW5jbHVkZSAiUmVuZGVyU1ZHVFNwYW4uaCIKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgorI2lu
Y2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbmNsdWRlICJTVkdUU3BhbkVsZW1lbnQuaCIK
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVy
U1ZHVFNwYW46OlJlbmRlclNWR1RTcGFuKFNWR1RTcGFuRWxlbWVudCAqbm9kZSkgCis6IFJlbmRl
ckJsb2NrKG5vZGUpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHVFNwYW46OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpCit7CisgICAgaWYgKHBhaW50
SW5mby5wLT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBL
UmVuZGVyaW5nRGV2aWNlKiBkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKKyAgICBLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dCogY29udGV4dCA9IGRldmljZS0+Y3VycmVudENvbnRleHQoKTsKKyAg
ICBib29sIHNob3VsZFBvcENvbnRleHQgPSBmYWxzZTsKKyAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gTmVlZCB0byBz
ZXQgdXAgS0NhbnZhcyByZW5kZXJpbmcgaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBkb25lLgor
ICAgICAgICBjb250ZXh0ID0gcGFpbnRJbmZvLnAtPmNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRl
eHQoKTsKKyAgICAgICAgZGV2aWNlLT5wdXNoQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgc2hv
dWxkUG9wQ29udGV4dCA9IHRydWU7CisgICAgfQorICAgIAorICAgIEZsb2F0UmVjdCBib3VuZGlu
Z0JveCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUg
KnN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICAKKyAgICBpZiAoS0NhbnZhc0Ns
aXBwZXIgKmNsaXBwZXIgPSBnZXRDbGlwcGVyQnlJZChkb2N1bWVudCgpLCBzdmdTdHlsZS0+Y2xp
cFBhdGgoKS5taWQoMSkpKQorICAgICAgICBjbGlwcGVyLT5hcHBseUNsaXAoYm91bmRpbmdCb3gp
OworICAgIAorICAgIGlmIChLQ2FudmFzTWFza2VyICptYXNrZXIgPSBnZXRNYXNrZXJCeUlkKGRv
Y3VtZW50KCksIHN2Z1N0eWxlLT5tYXNrRWxlbWVudCgpLm1pZCgxKSkpCisgICAgICAgIG1hc2tl
ci0+YXBwbHlNYXNrKGJvdW5kaW5nQm94KTsKKyAgICAKKyAgICBLQ2FudmFzRmlsdGVyICpmaWx0
ZXIgPSBnZXRGaWx0ZXJCeUlkKGRvY3VtZW50KCksIHN2Z1N0eWxlLT5maWx0ZXIoKS5taWQoMSkp
OworICAgIGlmIChmaWx0ZXIpCisgICAgICAgIGZpbHRlci0+cHJlcGFyZUZpbHRlcihib3VuZGlu
Z0JveCk7CisgICAgCisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYyhkZXZpY2UtPmN1cnJl
bnRDb250ZXh0KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKKyAgICBQYWludEluZm8gcGkg
PSBwYWludEluZm87CisgICAgcGkucCA9IGMuZ2V0KCk7CisgICAgcGkuciA9IHBhaW50SW5mby5y
OworICAgIAorICAgIGZsb2F0IG9wYWNpdHkgPSBzdHlsZSgpLT5vcGFjaXR5KCk7CisgICAgaWYg
KG9wYWNpdHkgPCAxLjBmKQorICAgICAgICBjLT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNp
dHkpOworICAgIAorICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqZmlsbFBhaW50U2VydmVyID0g
S1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcyk7CisgICAg
aWYgKGZpbGxQYWludFNlcnZlcikgeworICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50
aW5nVGV4dCh0cnVlKTsKKyAgICAgICAgLy8gZmlsbFBhaW50U2VydmVyLT5zZXRBY3RpdmVDbGll
bnQodGhpcyk7CisgICAgICAgIGlmIChmaWxsUGFpbnRTZXJ2ZXItPnNldHVwKGNvbnRleHQsIHRo
aXMsIEFQUExZX1RPX0ZJTEwpKSB7CisgICAgICAgICAgICBSZW5kZXJCbG9jazo6cGFpbnQocGks
IDAsIDApOworICAgICAgICAgICAgZmlsbFBhaW50U2VydmVyLT50ZWFyZG93bihjb250ZXh0LCB0
aGlzLCBBUFBMWV9UT19GSUxMKTsKKyAgICAgICAgfQorICAgICAgICBmaWxsUGFpbnRTZXJ2ZXIt
PnNldFBhaW50aW5nVGV4dChmYWxzZSk7CisgICAgfQorICAgIAorICAgIEtSZW5kZXJpbmdQYWlu
dFNlcnZlciAqc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBh
aW50U2VydmVyKHN0eWxlKCksIHRoaXMpOworICAgIGlmIChzdHJva2VQYWludFNlcnZlcikgewor
ICAgICAgICBzdHJva2VQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KHRydWUpOworICAgICAg
ICAvLyBzdHJva2VQYWludFNlcnZlci0+c2V0QWN0aXZlQ2xpZW50KHRoaXMpOworICAgICAgICBp
ZiAoc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldHVwKGNvbnRleHQsIHRoaXMsIEFQUExZX1RPX1NUUk9L
RSkpIHsKKyAgICAgICAgICAgIFJlbmRlckJsb2NrOjpwYWludChwaSwgMCwgMCk7CisgICAgICAg
ICAgICBzdHJva2VQYWludFNlcnZlci0+dGVhcmRvd24oY29udGV4dCwgdGhpcywgQVBQTFlfVE9f
U1RST0tFKTsKKyAgICAgICAgfQorICAgICAgICBzdHJva2VQYWludFNlcnZlci0+c2V0UGFpbnRp
bmdUZXh0KGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgaWYgKGZpbHRlcikKKyAgICAgICAgZmls
dGVyLT5hcHBseUZpbHRlcihib3VuZGluZ0JveCk7CisgICAgCisgICAgaWYgKG9wYWNpdHkgPCAx
LjBmKQorICAgICAgICBjLT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIAorICAgIC8vIHJl
c3RvcmUgZHJhd2luZyBzdGF0ZQorICAgIGlmICghc2hvdWxkUG9wQ29udGV4dCkKKyAgICAgICAg
cGFpbnRJbmZvLnAtPnJlc3RvcmUoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZGV2aWNlLT5wb3BD
b250ZXh0KCk7CisgICAgICAgIGRlbGV0ZSBjb250ZXh0OworICAgIH0KK30KKworfQorI2VuZGlm
IC8vIFNWR19TVVBQT1JUCkluZGV4OiBrY2FudmFzL1JlbmRlclNWR1RTcGFuLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdUU3Bhbi5oCShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9S
ZW5kZXJTVkdUU3Bhbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1RTcGFuX0gKKyNk
ZWZpbmUgUmVuZGVyU1ZHVFNwYW5fSAorI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJS
ZW5kZXJCbG9jay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitjbGFzcyBTVkdUU3Bh
bkVsZW1lbnQ7CisgICAgCisvKioKKyAqIEN1cnJlbnRseSB0aGlzIGlzIGVmZmVjdGl2ZWx5IGEg
ZGlyZWN0IGNvcHkgb2YgUmVuZGVyU1ZHVGV4dCwgYnV0IGl0IHdpbGwgbmVlZCB0bworICogYmUg
ZGlmZmVyZW50IGV2ZW50dWFsbHkKKyAqLworY2xhc3MgUmVuZGVyU1ZHVFNwYW4gOiBwdWJsaWMg
UmVuZGVyQmxvY2sKK3sKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdUU3BhbihTVkdUU3BhbkVsZW1l
bnQgKm5vZGUpOworICAgIAorICAgIHZpcnR1YWwgY29uc3QgY2hhciAqcmVuZGVyTmFtZSgpIGNv
bnN0IHsgcmV0dXJuICJSZW5kZXJTVkdUU3BhbiI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKTsKK307CisKK30KKworI2VuZGlm
IC8vIFNWR19TVVBQT1JUCisjZW5kaWYKSW5kZXg6IGtzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNTg0NikKKysrIGtzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw3ICsyNCw3IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdUU3Bh
bkVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRlcklubGlu
ZS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1RTcGFuLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCkBAIC00Nyw3ICs0Nyw3IEBAIGJvb2wgU1ZHVFNwYW5FbGVtZW50OjpjaGlsZFNob3Vs
ZENyZWF0ZVIKIAogUmVuZGVyT2JqZWN0ICpTVkdUU3BhbkVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKikKIHsKLSAgICByZXR1cm4gbmV3IChh
cmVuYSkgUmVuZGVySW5saW5lKHRoaXMpOworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJT
VkdUU3Bhbih0aGlzKTsKIH0KIAogLy8gdmltOnRzPTQ6bm9ldAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10532</attachid>
            <date>2006-09-13 09:19:31 -0700</date>
            <delta_ts>2006-09-27 19:40:56 -0700</delta_ts>
            <desc>Styled tspans patch attempt #4 million</desc>
            <filename>styledtspans.patch</filename>
            <type>text/plain</type>
            <size>21895</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2MzQyKQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY0LDYg
KzEwNjQsMTAgQEAKIAkJQTdCOTdCODUwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2Zl
ckZpbHRlci5jaWtlcm5lbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTdCOTdCNzQwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRl
ci5jaWtlcm5lbCAqLzsgfTsKIAkJQTdCOTdCODYwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVU
cmFuc2ZlckZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdCOTdCNzUwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5o
ICovOyB9OwogCQlBN0I5N0I4NzA5NzlDM0ExMDAwRThFQjEgLyogV0tUYWJsZVRyYW5zZmVyRmls
dGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I5
N0I3NjA5NzlDM0ExMDAwRThFQjEgLyogV0tUYWJsZVRyYW5zZmVyRmlsdGVyLm0gKi87IH07CisJ
CUE3RTFEREJFMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0UxRERCQzBBQUVDREQx
MDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5oICovOyB9OworCQlBN0UxRERCRjBBQUVD
REQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0UxRERCRDBBQUVDREQxMDBDQUNEMUMgLyog
UmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgKi87IH07CisJCUE3RTFEREY2MEFBRjA4QUYwMENBQ0Qx
QyAvKiBTVkdJbmxpbmVUZXh0Qm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0UxRERGNDBBQUYwOEFGMDBDQUNEMUMgLyogU1ZHSW5saW5lVGV4dEJv
eC5oICovOyB9OworCQlBN0UxRERGNzBBQUYwOEFGMDBDQUNEMUMgLyogU1ZHSW5saW5lVGV4dEJv
eC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0Ux
RERGNTBBQUYwOEFGMDBDQUNEMUMgLyogU1ZHSW5saW5lVGV4dEJveC5jcHAgKi87IH07CiAJCUE4
MEU2Q0U0MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NWYWx1ZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQkEwQTE5ODlDQTAwN0ZCOEM1
IC8qIENTU1ZhbHVlTGlzdC5jcHAgKi87IH07CiAJCUE4MEU2Q0U1MEExOTg5Q0EwMDdGQjhDNSAv
KiBDU1NCb3JkZXJJbWFnZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0JCMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NCb3JkZXJJbWFn
ZVZhbHVlLmNwcCAqLzsgfTsKIAkJQTgwRTZDRTYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ByaW1p
dGl2ZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBODBFNkNCQzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuaCAqLzsgfTsK
QEAgLTM0MzIsNiArMzQzNiwxMCBAQAogCQlBN0I5N0I3NDA5NzlDM0ExMDAwRThFQjEgLyogV0tU
YWJsZVRyYW5zZmVyRmlsdGVyLmNpa2VybmVsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXS1Rh
YmxlVHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3Qjk3Qjc1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLVGFibGVUcmFuc2ZlckZpbHRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I5N0I3NjA5NzlDM0ExMDAwRThFQjEgLyog
V0tUYWJsZVRyYW5zZmVyRmlsdGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBh
dGggPSBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTdFMUREQkMwQUFFQ0REMTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHSW5saW5lVGV4dC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0UxRERCRDBBQUVDREQxMDBDQUNEMUMgLyogUmVu
ZGVyU1ZHSW5saW5lVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTdFMURERjQwQUFGMDhBRjAwQ0FDRDFDIC8qIFNWR0lubGluZVRleHRCb3guaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW5saW5lVGV4dEJveC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBN0UxRERGNTBBQUYwOEFGMDBDQUNEMUMgLyogU1ZHSW5saW5lVGV4
dEJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdJbmxpbmVU
ZXh0Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkEwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ1NTVmFsdWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTgwRTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0JvcmRlckltYWdlVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODBFNkNCQzBBMTk4OUNBMDA3RkI4
QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENTU1ByaW1pdGl2ZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02
Njk0LDYgKzY3MDIsMTAgQEAKIAkJCQlGQUUwNDE4OTA5NzU5Njk0MDAwNTQwQkUgLyogUmVuZGVy
U1ZHSW1hZ2UuaCAqLywKIAkJCQk2NTc0M0I1MDA5NzA3NkY4MDAxRTdDRUYgLyogUmVuZGVyU1ZH
VGV4dC5jcHAgKi8sCiAJCQkJNjU3NDNCNTEwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1Rl
eHQuaCAqLywKKwkJCQlBN0UxRERCQzBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5l
VGV4dC5oICovLAorCQkJCUE3RTFEREJEMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcCAqLywKKwkJCQlBN0UxRERGNDBBQUYwOEFGMDBDQUNEMUMgLyogU1ZHSW5saW5l
VGV4dEJveC5oICovLAorCQkJCUE3RTFEREY1MEFBRjA4QUYwMENBQ0QxQyAvKiBTVkdJbmxpbmVU
ZXh0Qm94LmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0ga2NhbnZhczsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CkBAIC04Mzg5LDYgKzg0MDEsOCBAQAogCQkJCTg1MDY1NkZFMEFBQjQ3NjMw
MDJEMTVDMCAvKiBET01NZWRpYUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDY1NzAwMEFB
QjQ3NjMwMDJEMTVDMCAvKiBET01TdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTA2
NTcwMjBBQUI0NzYzMDAyRDE1QzAgLyogRE9NU3R5bGVTaGVldExpc3QuaCBpbiBIZWFkZXJzICov
LAorCQkJCUE3RTFEREJFMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlBN0UxRERGNjBBQUYwOEFGMDBDQUNEMUMgLyogU1ZHSW5saW5l
VGV4dEJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM0NzA2QUIwQUFDRDgwOTAwMkMxRDQzIC8q
IFRleHREZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUFGQTgyMjBBQUY1MjhBMDBFODQz
MDUgLyogRE9NRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QzdGNDQ3MEFBRjc2REMwMDQw
MTRERCAvKiBET01FdmVudFRhcmdldC5oIGluIEhlYWRlcnMgKi8sCkBAIC05NjA2LDYgKzk2MjAs
OCBAQAogCQkJCTg1MDY1NzAxMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01TdHlsZVNoZWV0Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODUwNjU3MDMwQUFCNDc2MzAwMkQxNUMwIC8qIERPTVN0eWxlU2hl
ZXRMaXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFFQkJCRDQwQUFDOUI4NzAwMUZFOEUyIC8q
IENTU0NoYXJzZXRSdWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3RTFEREJGMEFBRUNERDEw
MENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3
RTFEREY3MEFBRjA4QUYwMENBQ0QxQyAvKiBTVkdJbmxpbmVUZXh0Qm94LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg1QUZBODIzMEFBRjUyOEEwMEU4NDMwNSAvKiBET01FdmVudC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTg1QzdGNDkyMEFBRjc5REMwMDQwMTRERCAvKiBET01VSUV2ZW50Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODVDN0Y1QzAwQUFGQjdDRDAwNDAxNEREIC8qIERPTU11dGF0aW9u
RXZlbnQubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IGNzcy9zdmcuY3NzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGNzcy9zdmcuY3NzCShyZXZpc2lvbiAxNjM0MikKKysrIGNzcy9zdmcuY3NzCSh3b3JraW5nIGNv
cHkpCkBAIC00OSwzICs0OSw3IEBAIHN2Zywgc3ltYm9sLCBtYXJrZXIsIHBhdHRlcm4gewogdGV4
dCwgZm9yZWlnbk9iamVjdCB7CiAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudAogfQorCit0
ZXh0LCB0c3BhbiB7CisgICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQKK30KSW5kZXg6
IGRvbS9UZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vVGV4dC5jcHAJKHJldmlzaW9uIDE2MzQy
KQorKysgZG9tL1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0xNDksNiArMTUwLDggQEAgYm9vbCBUZXh0OjpyZW5kZXJlcklz
TmVlZGVkKFJlbmRlclN0eWxlIAogCiBSZW5kZXJPYmplY3QgKlRleHQ6OmNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKQogeworICAgIGlmKHBhcmVu
dE5vZGUoKS0+aXNTVkdFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5k
ZXJTVkdJbmxpbmVUZXh0KHRoaXMsIHN0cik7CiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRl
clRleHQodGhpcywgc3RyKTsKIH0KIApJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShyZXZp
c2lvbiAwKQorKysga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
cHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0
dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTVkdJbmxpbmVUZXh0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2
aWNlLmgiCisjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveC5oIgorI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitSZW5kZXJTVkdJbmxpbmVU
ZXh0OjpSZW5kZXJTVkdJbmxpbmVUZXh0KE5vZGUgKm4sIFN0cmluZ0ltcGwgKnN0cik6UmVuZGVy
VGV4dChuLCBzdHIpIHt9CisKK0lubGluZUJveCogUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y3JlYXRl
SW5saW5lQm94KGJvb2wsIGJvb2wgaXNSb290TGluZUJveCwgYm9vbCkKK3sKKyAgICBBU1NFUlQo
IWlzUm9vdExpbmVCb3gpOworICAgIElubGluZVRleHRCb3gqIHRleHRCb3ggPSBuZXcgKHJlbmRl
ckFyZW5hKCkpIFNWR0lubGluZVRleHRCb3godGhpcyk7CisgICAgCisgICAgaWYgKCFtX2ZpcnN0
VGV4dEJveCkKKyAgICAgICAgbV9maXJzdFRleHRCb3ggPSBtX2xhc3RUZXh0Qm94ID0gdGV4dEJv
eDsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9sYXN0VGV4dEJveC0+c2V0TmV4dExpbmVCb3godGV4
dEJveCk7CisgICAgICAgIHRleHRCb3gtPnNldFByZXZpb3VzTGluZUJveChtX2xhc3RUZXh0Qm94
KTsKKyAgICAgICAgbV9sYXN0VGV4dEJveCA9IHRleHRCb3g7CisgICAgfQorICAgIHJldHVybiB0
ZXh0Qm94OworfQorCit2b2lkIFJlbmRlclNWR0lubGluZVRleHQ6OmFic29sdXRlUmVjdHMoVmVj
dG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCit7CisgICAgQWZmaW5lVHJhbnNm
b3JtIG1hdCA9IGFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2lu
Z0ludFJlY3QobWF0Lm1hcFJlY3QoRmxvYXRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSkp
KTsKK30KKworfQpJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgJKHJldmlzaW9uIDApCisrKyBrY2Fu
dmFzL1JlbmRlclNWR0lubGluZVRleHQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAor
LyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5h
Yy5uej4uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxl
IFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgUmVuZGVyU1ZHSW5saW5lVGV4dF9oCisjZGVmaW5lIFJlbmRlclNWR0lu
bGluZVRleHRfaAorCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBSZW5kZXJTVkdJbmxpbmVUZXh0IDogcHVibGljIFJlbmRlclRleHQgeworcHVi
bGljOgorICAgIFJlbmRlclNWR0lubGluZVRleHQoTm9kZSosIFN0cmluZ0ltcGwqKTsKKyAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZH
SW5saW5lVGV4dCI7IH0KKyAgICB2aXJ0dWFsIElubGluZUJveCogY3JlYXRlSW5saW5lQm94KGJv
b2wsIGJvb2wsIGJvb2wgaXNPbmx5UnVuID0gZmFsc2UpOworICAgIHZpcnR1YWwgdm9pZCBhYnNv
bHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKK307Cit9CisKKyNl
bmRpZgpJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2Fu
dmFzL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAxNjM0MikKKysrIGtjYW52YXMvUmVuZGVy
U1ZHVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKiAgICAgICAgICAgICAgIDIwMDYg
QWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZAa2RlLm9yZz4KKyAqICAgICAgICAgICAgICAgMjAw
NiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtNzMsNjEgKzc0LDEyIEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWkKICAgICAgICAgc2hvdWxkUG9wQ29udGV4dCA9IHRydWU7CiAgICAgfQog
ICAgIAotICAgIGNvbnRleHQtPmNvbmNhdENUTShsb2NhbFRyYW5zZm9ybSgpKTsKLSAgICBjb250
ZXh0LT5jb25jYXRDVE0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKHBhcmVudFgsIHBhcmVu
dFkpKTsKLSAgICBjb250ZXh0LT5jb25jYXRDVE0odHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkp
OwotICAgIGNvbnRleHQtPmNvbmNhdENUTSh0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKSk7Ci0g
ICAgCi0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKTsK
LSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSAqc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgp
OwotICAgICAgICAgICAgCi0gICAgaWYgKEtDYW52YXNDbGlwcGVyKiBjbGlwcGVyID0gZ2V0Q2xp
cHBlckJ5SWQoZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmNsaXBQYXRoKCkuc3Vic3RyaW5nKDEpKSkK
LSAgICAgICAgY2xpcHBlci0+YXBwbHlDbGlwKGJvdW5kaW5nQm94KTsKLQotICAgIGlmIChLQ2Fu
dmFzTWFza2VyKiBtYXNrZXIgPSBnZXRNYXNrZXJCeUlkKGRvY3VtZW50KCksIHN2Z1N0eWxlLT5t
YXNrRWxlbWVudCgpLnN1YnN0cmluZygxKSkpCi0gICAgICAgIG1hc2tlci0+YXBwbHlNYXNrKGJv
dW5kaW5nQm94KTsKLQotICAgIEtDYW52YXNGaWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5SWQo
ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmZpbHRlcigpLnN1YnN0cmluZygxKSk7Ci0gICAgaWYgKGZp
bHRlcikKLSAgICAgICAgZmlsdGVyLT5wcmVwYXJlRmlsdGVyKGJvdW5kaW5nQm94KTsKLSAgICAg
ICAgCi0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYyhkZXZpY2UtPmN1cnJlbnRDb250ZXh0
KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKICAgICBQYWludEluZm8gcGkgPSBwYWludElu
Zm87CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYyhkZXZpY2UtPmN1cnJlbnRDb250ZXh0
KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKICAgICBwaS5wID0gYy5nZXQoKTsKLSAgICBw
aS5yID0gKHRyYW5zbGF0aW9uVG9wVG9CYXNlbGluZSgpICogdHJhbnNsYXRpb25Gb3JBdHRyaWJ1
dGVzKCkgKiBhYnNvbHV0ZVRyYW5zZm9ybSgpKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5mby5y
KTsKLQotICAgIGZsb2F0IG9wYWNpdHkgPSBzdHlsZSgpLT5vcGFjaXR5KCk7Ci0gICAgaWYgKG9w
YWNpdHkgPCAxLjBmKQotICAgICAgICBjLT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkp
OwotCi0gICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpmaWxsUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFp
bnRlckZhY3Rvcnk6OmZpbGxQYWludFNlcnZlcihzdHlsZSgpLCB0aGlzKTsKLSAgICBpZiAoZmls
bFBhaW50U2VydmVyKSB7Ci0gICAgICAgIGZpbGxQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0
KHRydWUpOwotICAgICAgICAvLyBmaWxsUGFpbnRTZXJ2ZXItPnNldEFjdGl2ZUNsaWVudCh0aGlz
KTsKLSAgICAgICAgaWYgKGZpbGxQYWludFNlcnZlci0+c2V0dXAoY29udGV4dCwgdGhpcywgQVBQ
TFlfVE9fRklMTCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrOjpwYWludChwaSwgMCwgMCk7
Ci0gICAgICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnRlYXJkb3duKGNvbnRleHQsIHRoaXMsIEFQ
UExZX1RPX0ZJTEwpOwotICAgICAgICB9Ci0gICAgICAgIGZpbGxQYWludFNlcnZlci0+c2V0UGFp
bnRpbmdUZXh0KGZhbHNlKTsKLSAgICB9CisgICAgcGkuciA9IChhYnNvbHV0ZVRyYW5zZm9ybSgp
KS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5mby5yKTsKKyAgICBSZW5kZXJCbG9jazo6cGFpbnQo
cGksIHBhcmVudFgsIHBhcmVudFkpOwogICAgIAotICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAq
c3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVy
KHN0eWxlKCksIHRoaXMpOwotICAgIGlmIChzdHJva2VQYWludFNlcnZlcikgewotICAgICAgICBz
dHJva2VQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KHRydWUpOwotICAgICAgICAvLyBzdHJv
a2VQYWludFNlcnZlci0+c2V0QWN0aXZlQ2xpZW50KHRoaXMpOwotICAgICAgICBpZiAoc3Ryb2tl
UGFpbnRTZXJ2ZXItPnNldHVwKGNvbnRleHQsIHRoaXMsIEFQUExZX1RPX1NUUk9LRSkpIHsKLSAg
ICAgICAgICAgIFJlbmRlckJsb2NrOjpwYWludChwaSwgMCwgMCk7Ci0gICAgICAgICAgICBzdHJv
a2VQYWludFNlcnZlci0+dGVhcmRvd24oY29udGV4dCwgdGhpcywgQVBQTFlfVE9fU1RST0tFKTsK
LSAgICAgICAgfQotICAgICAgICBzdHJva2VQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoZmlsdGVyKQotICAgICAgICBmaWx0ZXItPmFwcGx5Rmls
dGVyKGJvdW5kaW5nQm94KTsKLQotICAgIGlmIChvcGFjaXR5IDwgMS4wZikKLSAgICAgICAgYy0+
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLQogICAgIC8vIHJlc3RvcmUgZHJhd2luZyBzdGF0ZQog
ICAgIGlmICghc2hvdWxkUG9wQ29udGV4dCkKICAgICAgICAgcGFpbnRJbmZvLnAtPnJlc3RvcmUo
KTsKQEAgLTEzOSw3ICs5MSw3IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6cGFpbnQoUGFpbnRJbmZv
JiBwYWkKIAogdm9pZCBSZW5kZXJTVkdUZXh0Ojpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJ
bnRSZWN0JiByLCBib29sIGYpCiB7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IHRy
YW5zbGF0aW9uVG9wVG9CYXNlbGluZSgpICogdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkgKiBh
YnNvbHV0ZVRyYW5zZm9ybSgpOworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSB0cmFu
c2xhdGlvblRvcFRvQmFzZWxpbmUoKSAqIGFic29sdXRlVHJhbnNmb3JtKCk7CiAgICAgciA9IHRy
YW5zZm9ybS5tYXBSZWN0KHIpOwogICAgIAogICAgIFJlbmRlckNvbnRhaW5lcjo6Y29tcHV0ZUFi
c29sdXRlUmVwYWludFJlY3QociwgZik7CkBAIC0xNTksOSArMTExLDExIEBAIHZvaWQgUmVuZGVy
U1ZHVGV4dDo6bGF5b3V0KCkKICAgICBib29sIGNoZWNrRm9yUmVwYWludCA9IGNoZWNrRm9yUmVw
YWludER1cmluZ0xheW91dCgpOwogICAgIGlmIChjaGVja0ZvclJlcGFpbnQpCiAgICAgICAgIG9s
ZEJvdW5kcyA9IG1fYWJzb2x1dGVCb3VuZHM7Ci0KKyAgICBTVkdUZXh0RWxlbWVudCAqdGV4dCA9
IHN0YXRpY19jYXN0PFNWR1RleHRFbGVtZW50ICo+KGVsZW1lbnQoKSk7CisgICAgaW50IHhPZmZz
ZXQgPSB0ZXh0LT54KCktPmdldEZpcnN0KCkgPyB0ZXh0LT54KCktPmdldEZpcnN0KCktPnZhbHVl
KCkgOiAwOworICAgIGludCB5T2Zmc2V0ID0gdGV4dC0+eSgpLT5nZXRGaXJzdCgpID8gdGV4dC0+
eSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKKyAgICB0aGlzLT5zZXRQb3MoeE9mZnNldCwg
eU9mZnNldCk7CiAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwotCiAgICAgbV9hYnNvbHV0ZUJv
dW5kcyA9IGdldEFic29sdXRlUmVwYWludFJlY3QoKTsKIAogICAgIGJvb2wgcmVwYWludGVkID0g
ZmFsc2U7CkBAIC0xNzMsOSArMTI3LDcgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQog
CiBib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KE5vZGVJbmZvJiBpbmZvLCBpbnQgX3gs
IGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQog
ewotICAgIEFmZmluZVRyYW5zZm9ybSB0b3RhbFRyYW5zZm9ybSA9IHRyYW5zbGF0aW9uRm9yQXR0
cmlidXRlcygpOwotICAgIHRvdGFsVHJhbnNmb3JtICo9IHRyYW5zbGF0aW9uVG9wVG9CYXNlbGlu
ZSgpOwotICAgIHRvdGFsVHJhbnNmb3JtICo9IGFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgQWZm
aW5lVHJhbnNmb3JtIHRvdGFsVHJhbnNmb3JtID0gYWJzb2x1dGVUcmFuc2Zvcm0oKTsKICAgICBk
b3VibGUgbG9jYWxYLCBsb2NhbFk7CiAgICAgdG90YWxUcmFuc2Zvcm0uaW52ZXJ0KCkubWFwKF94
LCBfeSwgJmxvY2FsWCwgJmxvY2FsWSk7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQ
b2ludChpbmZvLCAoaW50KWxvY2FsWCwgKGludClsb2NhbFksIF90eCwgX3R5LCBoaXRUZXN0QWN0
aW9uKTsKQEAgLTE4MywxMSArMTM1LDggQEAgYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2lu
dChOb2RlSW5mbwogCiB2b2lkIFJlbmRlclNWR1RleHQ6OmFic29sdXRlUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1h
dCA9IHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpOwotICAgIG1hdCAqPSB0cmFuc2xhdGlvblRv
cFRvQmFzZWxpbmUoKTsKLSAgICBtYXQgKj0gYWJzb2x1dGVUcmFuc2Zvcm0oKTsKLQotICAgIHJl
Y3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KG1hdC5tYXBSZWN0KEZsb2F0UmVjdCgwLCAwLCB3
aWR0aCgpLCBoZWlnaHQoKSkpKSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIG1hdCA9IGFic29sdXRl
VHJhbnNmb3JtKCk7CisgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QobWF0Lm1hcFJl
Y3QoRmxvYXRSZWN0KHhQb3MoKSwgeVBvcygpLWhlaWdodCgpLCB3aWR0aCgpLCBoZWlnaHQoKSkp
KSk7CiB9CiAKIH0KSW5kZXg6IGtjYW52YXMvU1ZHSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga2NhbnZhcy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMCkKKysrIGtjYW52
YXMvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA5IEBACisv
KgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogICAgICAgICAgICAgICAy
MDA2IEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5vcmc+CisgKiAgICAgICAgICAgICAg
IDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3Vp
dGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJL
Q2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCisj
aW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgorI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIK
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBT
VkdJbmxpbmVUZXh0Qm94OjpwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZv
LCBpbnQgdHgsIGludCB0eSl7CisgICAgaWYgKHBhaW50SW5mby5wLT5wYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBLUmVuZGVyaW5nRGV2aWNlKiBkZXZpY2Ug
PSByZW5kZXJpbmdEZXZpY2UoKTsKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4
dCA9IGRldmljZS0+Y3VycmVudENvbnRleHQoKTsKKyAgICBib29sIHNob3VsZFBvcENvbnRleHQg
PSBmYWxzZTsKKyAgICBpZiAoY29udGV4dCkKKyAgICAgICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgLy8gTmVlZCB0byBzZXQgdXAgS0NhbnZhcyByZW5kZXJpbmcg
aWYgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBkb25lLgorICAgICAgICBjb250ZXh0ID0gcGFpbnRJ
bmZvLnAtPmNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRleHQoKTsKKyAgICAgICAgZGV2aWNlLT5w
dXNoQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgc2hvdWxkUG9wQ29udGV4dCA9IHRydWU7Cisg
ICAgfQorICAgIAorICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCh4UG9zKCksIHlQb3MoKSwgd2lk
dGgoKSwgaGVpZ2h0KCkpOworICAgIAorICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlICpzdmdTdHls
ZSA9IG9iamVjdCgpLT5zdHlsZSgpLT5zdmdTdHlsZSgpOworICAgIAorICAgIGlmIChLQ2FudmFz
Q2xpcHBlciogY2xpcHBlciA9IGdldENsaXBwZXJCeUlkKG9iamVjdCgpLT5kb2N1bWVudCgpLCBz
dmdTdHlsZS0+Y2xpcFBhdGgoKS5zdWJzdHJpbmcoMSkpKQorICAgICAgICBjbGlwcGVyLT5hcHBs
eUNsaXAoYm91bmRpbmdCb3gpOworICAgIAorICAgIGlmIChLQ2FudmFzTWFza2VyKiBtYXNrZXIg
PSBnZXRNYXNrZXJCeUlkKG9iamVjdCgpLT5kb2N1bWVudCgpLCBzdmdTdHlsZS0+bWFza0VsZW1l
bnQoKS5zdWJzdHJpbmcoMSkpKQorICAgICAgICBtYXNrZXItPmFwcGx5TWFzayhib3VuZGluZ0Jv
eCk7CisgICAgCisgICAgS0NhbnZhc0ZpbHRlciogZmlsdGVyID0gZ2V0RmlsdGVyQnlJZChvYmpl
Y3QoKS0+ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmZpbHRlcigpLnN1YnN0cmluZygxKSk7CisgICAg
aWYgKGZpbHRlcikKKyAgICAgICAgZmlsdGVyLT5wcmVwYXJlRmlsdGVyKGJvdW5kaW5nQm94KTsK
KyAgICAKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjKGRldmljZS0+Y3VycmVudENvbnRl
eHQoKS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkpOworICAgIAorICAgIGZsb2F0IG9wYWNpdHkg
PSBvYmplY3QoKS0+c3R5bGUoKS0+b3BhY2l0eSgpOworICAgIGlmIChvcGFjaXR5IDwgMS4wZikK
KyAgICAgICAgYy0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICAKKyAgICBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKmZpbGxQYWludFNlcnZlciA9IEtTVkdQYWludGVyRmFjdG9y
eTo6ZmlsbFBhaW50U2VydmVyKG9iamVjdCgpLT5zdHlsZSgpLCBvYmplY3QoKSk7CisgICAgaWYg
KGZpbGxQYWludFNlcnZlcikgeworICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5n
VGV4dCh0cnVlKTsKKyAgICAgICAgLy8gZmlsbFBhaW50U2VydmVyLT5zZXRBY3RpdmVDbGllbnQo
dGhpcyk7CisgICAgICAgIGlmIChmaWxsUGFpbnRTZXJ2ZXItPnNldHVwKGNvbnRleHQsIG9iamVj
dCgpLCBBUFBMWV9UT19GSUxMKSkgeworICAgICAgICAgICAgSW5saW5lVGV4dEJveDo6cGFpbnQo
cGFpbnRJbmZvLCB0eCwgdHkpOworICAgICAgICAgICAgZmlsbFBhaW50U2VydmVyLT50ZWFyZG93
bihjb250ZXh0LCBvYmplY3QoKSwgQVBQTFlfVE9fRklMTCk7CisgICAgICAgIH0KKyAgICAgICAg
ZmlsbFBhaW50U2VydmVyLT5zZXRQYWludGluZ1RleHQoZmFsc2UpOworICAgIH0KKyAgICAKKyAg
ICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnN0cm9rZVBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJG
YWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihvYmplY3QoKS0+c3R5bGUoKSwgb2JqZWN0KCkpOwor
ICAgIGlmIChzdHJva2VQYWludFNlcnZlcikgeworICAgICAgICBzdHJva2VQYWludFNlcnZlci0+
c2V0UGFpbnRpbmdUZXh0KHRydWUpOworICAgICAgICAvLyBzdHJva2VQYWludFNlcnZlci0+c2V0
QWN0aXZlQ2xpZW50KHRoaXMpOworICAgICAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldHVw
KGNvbnRleHQsIG9iamVjdCgpLCBBUFBMWV9UT19TVFJPS0UpKSB7CisgICAgICAgICAgICBJbmxp
bmVUZXh0Qm94OjpwYWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAgICAgICAgICBzdHJva2VQ
YWludFNlcnZlci0+dGVhcmRvd24oY29udGV4dCwgb2JqZWN0KCksIEFQUExZX1RPX1NUUk9LRSk7
CisgICAgICAgIH0KKyAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dChm
YWxzZSk7CisgICAgfQorICAgIAorICAgIGlmIChmaWx0ZXIpCisgICAgICAgIGZpbHRlci0+YXBw
bHlGaWx0ZXIoYm91bmRpbmdCb3gpOworICAgIAorICAgIGlmIChvcGFjaXR5IDwgMS4wZikKKyAg
ICAgICAgYy0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICAKKyAgICAvLyByZXN0b3JlIGRy
YXdpbmcgc3RhdGUKKyAgICBpZiAoIXNob3VsZFBvcENvbnRleHQpCisgICAgICAgIHBhaW50SW5m
by5wLT5yZXN0b3JlKCk7CisgICAgZWxzZSB7CisgICAgICAgIGRldmljZS0+cG9wQ29udGV4dCgp
OworICAgICAgICBkZWxldGUgY29udGV4dDsKKyAgICB9CisgICAgCit9CisgICAgCit9CkluZGV4
OiBrY2FudmFzL1NWR0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1NWR0lu
bGluZVRleHRCb3guaAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvU1ZHSW5saW5lVGV4dEJveC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIg
SHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTVkdJbmxpbmVU
ZXh0Qm94X0gKKyNkZWZpbmUgU1ZHSW5saW5lVGV4dEJveF9ICisKKyNpbmNsdWRlICJJbmxpbmVU
ZXh0Qm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHSW5saW5lVGV4dEJv
eCA6IHB1YmxpYyBJbmxpbmVUZXh0Qm94IHsKK3B1YmxpYzoKKyAgICBTVkdJbmxpbmVUZXh0Qm94
KFJlbmRlck9iamVjdCAqb2JqKSA6IElubGluZVRleHRCb3gob2JqKSB7fQorICAgIHZpcnR1YWwg
dm9pZCBwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IHR4LCBpbnQgdHkpOwor
fTsKKworfQorCisjZW5kaWYKSW5kZXg6IHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDE2MzQyKQor
KysgcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjksNyAr
MzI5LDggQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojp2ZXJ0aWNhbGx5QWxpZ25Cb3hlcwogICAgIGlu
dCBib3R0b21Qb3NpdGlvbiA9IGhlaWdodE9mQmxvY2s7CiAgICAgaW50IHNlbGVjdGlvblRvcCA9
IGhlaWdodE9mQmxvY2s7CiAgICAgaW50IHNlbGVjdGlvbkJvdHRvbSA9IGhlaWdodE9mQmxvY2s7
Ci0gICAgcGxhY2VCb3hlc1ZlcnRpY2FsbHkoaGVpZ2h0T2ZCbG9jaywgbWF4SGVpZ2h0LCBtYXhB
c2NlbnQsIHN0cmljdE1vZGUsIHRvcFBvc2l0aW9uLCBib3R0b21Qb3NpdGlvbiwgc2VsZWN0aW9u
VG9wLCBzZWxlY3Rpb25Cb3R0b20pOworICAgIGJvb2wgaXNTVkc9bV9vYmplY3QmJm1fb2JqZWN0
LT5lbGVtZW50KCkmJm1fb2JqZWN0LT5lbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpOworICAgIHBs
YWNlQm94ZXNWZXJ0aWNhbGx5KGlzU1ZHP2hlaWdodE9mQmxvY2stbWF4QXNjZW50OmhlaWdodE9m
QmxvY2ssIG1heEhlaWdodCwgbWF4QXNjZW50LCBzdHJpY3RNb2RlLCB0b3BQb3NpdGlvbiwgYm90
dG9tUG9zaXRpb24sIHNlbGVjdGlvblRvcCwgc2VsZWN0aW9uQm90dG9tKTsKIAogICAgIHNldFZl
cnRpY2FsT3ZlcmZsb3dQb3NpdGlvbnModG9wUG9zaXRpb24sIGJvdHRvbVBvc2l0aW9uKTsKICAg
ICBzZXRWZXJ0aWNhbFNlbGVjdGlvblBvc2l0aW9ucyhzZWxlY3Rpb25Ub3AsIHNlbGVjdGlvbkJv
dHRvbSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10813</attachid>
            <date>2006-09-27 19:40:56 -0700</date>
            <delta_ts>2006-10-01 21:36:59 -0700</delta_ts>
            <desc>styled tspan patch #4 million and one</desc>
            <filename>newtext2.patch</filename>
            <type>text/plain</type>
            <size>45102</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2NjA1KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUwLDYg
KzExNTAsOCBAQAogCQk5M0YxOUIxNjA4MjQ1RTU5MDAxRTlBQkMgLyogSmF2YVNjcmlwdENvcmUu
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjgyMTYyOTkwMjlGNEZCNTAxMDAwMTMxIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAq
LzsgfTsKIAkJOTNGMTlCMTcwODI0NUU1OTAwMUU5QUJDIC8qIGxpYmljdWNvcmUuZHlsaWIgaW4g
RnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0YxRDMxQTA1
NThDQzVDMDA4MjFCQzAgLyogbGliaWN1Y29yZS5keWxpYiAqLzsgfTsKIAkJOTNGMTlCMTgwODI0
NUU1OTAwMUU5QUJDIC8qIGxpYnhzbHQuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDA2MzMwNzA3MzFBNzcyMDBEQjFGRDEgLyogbGlieHNs
dC5keWxpYiAqLzsgfTsKKwkJQTc1RTk2RTAwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxp
bmVCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
NUU5NkRFMEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmggKi87IH07CisJCUE3
NUU5NkUxMEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU5NkRGMEFDMTM2NkYwMEVF
MEFGOSAvKiBTVkdSb290SW5saW5lQm94LmNwcCAqLzsgfTsKIAkJQTc2MzhBOEIwOTk1OEVBNTAw
MDdFMTRGIC8qIFdLRGlzcGxhY2VtZW50TWFwRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzYzOEE4OTA5OTU4RUE1MDAwN0UxNEYgLyogV0tE
aXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCAqLzsgfTsKIAkJQTc2MzhBOEMwOTk1OEVBNTAwMDdFMTRG
IC8qIFdLRGlzcGxhY2VtZW50TWFwRmlsdGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFj
ZW1lbnRNYXBGaWx0ZXIubSAqLzsgfTsKIAkJQTc2MzhBOTIwOTk1OTJDMzAwMDdFMTRGIC8qIFdL
RGlzcGxhY2VtZW50TWFwRmlsdGVyLmNpa2VybmVsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzYzOEE5MTA5OTU5MkMzMDAwN0UxNEYgLyogV0tEaXNw
bGFjZW1lbnRNYXBGaWx0ZXIuY2lrZXJuZWwgKi87IH07CkBAIC0xMTcyLDYgKzExNzQsMTQgQEAK
IAkJQTdCOTdCODUwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5jaWtl
cm5lbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdC
OTdCNzQwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5jaWtlcm5lbCAq
LzsgfTsKIAkJQTdCOTdCODYwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCOTdC
NzUwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5oICovOyB9OwogCQlB
N0I5N0I4NzA5NzlDM0ExMDAwRThFQjEgLyogV0tUYWJsZVRyYW5zZmVyRmlsdGVyLm0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I5N0I3NjA5NzlDM0Ex
MDAwRThFQjEgLyogV0tUYWJsZVRyYW5zZmVyRmlsdGVyLm0gKi87IH07CisJCUE3QzUxOTQ5MEFD
QTZBRjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDNTE5NDcwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRl
clNWR1RTcGFuLmggKi87IH07CisJCUE3QzUxOTRBMEFDQTZBRjEwMDZFMkZCOSAvKiBSZW5kZXJT
VkdUU3Bhbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0M1MTk0ODBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwICovOyB9Owor
CQlBN0M1MUE0NjBBQ0E3NDQ3MDA2RTJGQjkgLyogU1ZHSW5saW5lRmxvd0JveC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDNTFBNDQwQUNBNzQ0NzAw
NkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guaCAqLzsgfTsKKwkJQTdDNTFBNDcwQUNBNzQ0NzAw
NkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDNTFBNDUwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGlu
ZUZsb3dCb3guY3BwICovOyB9OworCQlBN0UxRERCRTBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVy
U1ZHSW5saW5lVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdFMUREQkMwQUFFQ0REMTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCAq
LzsgfTsKKwkJQTdFMUREQkYwQUFFQ0REMTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFMURE
QkQwQUFFQ0REMTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuY3BwICovOyB9OworCQlB
N0UxRERGNjBBQUYwOEFGMDBDQUNEMUMgLyogU1ZHSW5saW5lVGV4dEJveC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFMURERjQwQUFGMDhBRjAwQ0FD
RDFDIC8qIFNWR0lubGluZVRleHRCb3guaCAqLzsgfTsKKwkJQTdFMURERjcwQUFGMDhBRjAwQ0FD
RDFDIC8qIFNWR0lubGluZVRleHRCb3guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTdFMURERjUwQUFGMDhBRjAwQ0FDRDFDIC8qIFNWR0lubGluZVRl
eHRCb3guY3BwICovOyB9OwogCQlBODBFNkNFNDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVM
aXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
MEU2Q0JBMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NWYWx1ZUxpc3QuY3BwICovOyB9OwogCQlBODBF
NkNFNTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNCQjBBMTk4OUNBMDA3
RkI4QzUgLyogQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgKi87IH07CiAJCUE4MEU2Q0U2MEExOTg5
Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQkMwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1By
aW1pdGl2ZVZhbHVlLmggKi87IH07CkBAIC0zNTA0LDYgKzM1MTQsOCBAQAogCQk5M0Y4QjMwNjBB
MzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3Jp
cHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0b3JKUy5wbTsgcGF0aCA9IC4uL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y4QjMwNzBB
MzAwRkVBMDBGNjFBQjggLyogZ2VuZXJhdGUtYmluZGluZ3MucGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5wZXJsOyBuYW1lID0gImdlbmVyYXRlLWJpbmRpbmdzLnBsIjsgcGF0aCA9ICJzY3JpcHRz
L2dlbmVyYXRlLWJpbmRpbmdzLnBsIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNG
OEIzMDgwQTMwMEZFQTAwRjYxQUI4IC8qIElETFN0cnVjdHVyZS5wbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnBlcmw7IG5hbWUgPSBJRExTdHJ1Y3R1cmUucG07IHBhdGggPSBzY3JpcHRzL0lETFN0
cnVjdHVyZS5wbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc1RTk2REUwQUMxMzY2
RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHUm9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzVFOTZERjBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSb290SW5saW5lQm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdL
RGlzcGxhY2VtZW50TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmls
dGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjM4QTkxMDk5NTkyQzMwMDA3
RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTM1MjYsNiArMzUzOCwxNCBAQAogCQlBN0I5N0I3NDA5NzlDM0ExMDAw
RThFQjEgLyogV0tUYWJsZVRyYW5zZmVyRmlsdGVyLmNpa2VybmVsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3Qjk3Qjc1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNmZXJG
aWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLVGFibGVUcmFuc2Zl
ckZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I5N0I3NjA5NzlDM0Ex
MDAwRThFQjEgLyogV0tUYWJsZVRyYW5zZmVyRmlsdGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLm9iamM7IHBhdGggPSBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIubTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTdDNTE5NDcwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNWR1RTcGFu
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1RTcGFuLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3QzUxOTQ4MEFDQTZBRjEwMDZFMkZCOSAvKiBS
ZW5kZXJTVkdUU3Bhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJTVkdUU3Bhbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3QzUxQTQ0
MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNWR0lubGluZUZsb3dCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTdDNTFBNDUwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHSW5saW5lRmxvd0JveC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3RTFEREJDMEFBRUNERDEwMENBQ0Qx
QyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbmRlclNWR0lubGluZVRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTdFMUREQkQwQUFFQ0REMTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3RTFEREY0MEFBRjA4QUYwMENBQ0QxQyAv
KiBTVkdJbmxpbmVUZXh0Qm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0lubGluZVRleHRCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdFMURERjUw
QUFGMDhBRjAwQ0FDRDFDIC8qIFNWR0lubGluZVRleHRCb3guY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHSW5saW5lVGV4dEJveC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE4MEU2Q0JBMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NWYWx1ZUxpc3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1ZhbHVlTGlzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MEU2Q0JCMEExOTg5Q0EwMDdGQjhD
NSAvKiBDU1NCb3JkZXJJbWFnZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDU1NCb3JkZXJJbWFnZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTgwRTZDQkMwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ByaW1pdGl2ZVZhbHVlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NQcmltaXRpdmVWYWx1ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjk1Myw2ICs2OTczLDE2IEBACiAJCQkJRkFF
MDQxODkwOTc1OTY5NDAwMDU0MEJFIC8qIFJlbmRlclNWR0ltYWdlLmggKi8sCiAJCQkJNjU3NDNC
NTAwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuY3BwICovLAogCQkJCTY1NzQzQjUx
MDk3MDc2RjgwMDFFN0NFRiAvKiBSZW5kZXJTVkdUZXh0LmggKi8sCisJCQkJQTdFMUREQkMwQUFF
Q0REMTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCAqLywKKwkJCQlBN0UxRERCRDBB
QUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgKi8sCisJCQkJQTdFMURE
RjQwQUFGMDhBRjAwQ0FDRDFDIC8qIFNWR0lubGluZVRleHRCb3guaCAqLywKKwkJCQlBN0UxRERG
NTBBQUYwOEFGMDBDQUNEMUMgLyogU1ZHSW5saW5lVGV4dEJveC5jcHAgKi8sCisJCQkJQTc1RTk2
REUwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLywKKwkJCQlBNzVFOTZE
RjBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5jcHAgKi8sCisJCQkJQTdDNTE5
NDcwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNWR1RTcGFuLmggKi8sCisJCQkJQTdDNTE5NDgw
QUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNWR1RTcGFuLmNwcCAqLywKKwkJCQlBN0M1MUE0NDBB
Q0E3NDQ3MDA2RTJGQjkgLyogU1ZHSW5saW5lRmxvd0JveC5oICovLAorCQkJCUE3QzUxQTQ1MEFD
QTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCAqLywKIAkJCSk7CiAJCQlwYXRo
ID0ga2NhbnZhczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC04NjQ1LDYgKzg2NzUs
OCBAQAogCQkJCTg1MDY1NkZFMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01NZWRpYUxpc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg1MDY1NzAwMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01TdHlsZVNoZWV0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTA2NTcwMjBBQUI0NzYzMDAyRDE1QzAgLyogRE9NU3R5
bGVTaGVldExpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3RTFEREJFMEFBRUNERDEwMENBQ0Qx
QyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBN0UxRERGNjBB
QUYwOEFGMDBDQUNEMUMgLyogU1ZHSW5saW5lVGV4dEJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTM0NzA2QUIwQUFDRDgwOTAwMkMxRDQzIC8qIFRleHREZWNvZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NUFGQTgyMjBBQUY1MjhBMDBFODQzMDUgLyogRE9NRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg1QzdGNDQ3MEFBRjc2REMwMDQwMTRERCAvKiBET01FdmVudFRhcmdldC5oIGluIEhl
YWRlcnMgKi8sCkBAIC04NzkzLDYgKzg4MjUsOSBAQAogCQkJCUIyMDExMTA4MEFCNzc0MDUwMERC
MEU2OCAvKiBKU1NWR0FFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTNCRjREQjBBQkI2
QjU1MDA4NjQ3QkIgLyogRE9NTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUzQkY0RUIwQUJC
NkU5NzAwODY0N0JCIC8qIERPTU5vZGVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNzVF
OTZFMDBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTdDNTE5NDkwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNWR1RTcGFuLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBN0M1MUE0NjBBQ0E3NDQ3MDA2RTJGQjkgLyogU1ZHSW5saW5lRmxvd0Jv
eC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVCQ0JDMTMwQUJCQTg3RDAwMzgxMTYwIC8qIERPTUhU
TUxEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUEyMUVDQ0QwQUJGMEZDNjAwMkI4MzRD
IC8qIENTU0N1cnNvckltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MUVFODBDMEFC
Q0EyOEYwMEE2QUEzMyAvKiBET01BYnN0cmFjdFZpZXcuaCBpbiBIZWFkZXJzICovLApAQCAtODk1
MSw3ICs4OTg2LDYgQEAKIAkJCW1haW5Hcm91cCA9IDA4NjdENjkxRkU4NDAyOEZDMDJBQUMwNyAv
KiBXZWJLaXQgKi87CiAJCQlwcm9kdWN0UmVmR3JvdXAgPSAwMzQ3NjhERkZGMzhBNTA0MTFEQjlD
OEIgLyogUHJvZHVjdHMgKi87CiAJCQlwcm9qZWN0RGlyUGF0aCA9ICIiOwotCQkJcHJvamVjdFJv
b3QgPSAiIjsKIAkJCXRhcmdldHMgPSAoCiAJCQkJOTNGMTk4QTUwODI0NUU1OTAwMUU5QUJDIC8q
IFdlYkNvcmUgKi8sCiAJCQkJREQwNDFGQkUwOUQ5RERCRTAwMTBBRjJBIC8qIERlcml2ZWQgU291
cmNlcyAqLywKQEAgLTk4NTEsNiArOTg4NSw4IEBACiAJCQkJODUwNjU3MDEwQUFCNDc2MzAwMkQx
NUMwIC8qIERPTVN0eWxlU2hlZXQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NTA2NTcwMzBBQUI0
NzYzMDAyRDE1QzAgLyogRE9NU3R5bGVTaGVldExpc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQlF
MUVCQkJENDBBQUM5Qjg3MDAxRkU4RTIgLyogQ1NTQ2hhcnNldFJ1bGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTdFMUREQkYwQUFFQ0REMTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTdFMURERjcwQUFGMDhBRjAwQ0FDRDFDIC8qIFNWR0lu
bGluZVRleHRCb3guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODVBRkE4MjMwQUFGNTI4QTAwRTg0
MzA1IC8qIERPTUV2ZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVDN0Y0OTIwQUFGNzlEQzAw
NDAxNEREIC8qIERPTVVJRXZlbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUM3RjVDMDBBQUZC
N0NEMDA0MDE0REQgLyogRE9NTXV0YXRpb25FdmVudC5tbSBpbiBTb3VyY2VzICovLApAQCAtOTk4
Niw2ICsxMDAyMiw5IEBACiAJCQkJQjIyMkY2OUMwQUI3NzFCODAwMjJFRkFEIC8qIEpTU1ZHRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjAxMTEwNzBBQjc3NDA1MDBEQjBFNjggLyog
SlNTVkdBRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTNCRjREQzBBQkI2QjU1MDA4
NjQ3QkIgLyogRE9NTm9kZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCUE3NUU5NkUxMEFDMTM2NkYw
MEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3QzUx
OTRBMEFDQTZBRjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlBN0M1MUE0NzBBQ0E3NDQ3MDA2RTJGQjkgLyogU1ZHSW5saW5lRmxvd0JveC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NUJDQkMxNDBBQkJBODdEMDAzODExNjAgLyogRE9NSFRNTERvY3Vt
ZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQUEyMUVDQ0EwQUJGMEZCQTAwMkI4MzRDIC8qIENT
U0N1cnNvckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUxRUU4MEQwQUJDQTI4
RjAwQTZBQTMzIC8qIERPTUFic3RyYWN0Vmlldy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogY3Nz
L3N2Zy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL3N2Zy5jc3MJKHJldmlzaW9uIDE2NjA1KQorKysg
Y3NzL3N2Zy5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDMgKzQ5LDcgQEAgc3ZnLCBzeW1ib2ws
IG1hcmtlciwgcGF0dGVybiB7CiB0ZXh0LCBmb3JlaWduT2JqZWN0IHsKICAgICBkaXNwbGF5OiBi
bG9jayAhaW1wb3J0YW50CiB9CisKK3RleHQsIHRzcGFuIHsKKyAgIHdoaXRlLXNwYWNlOiBub3dy
YXAgIWltcG9ydGFudAorfQpJbmRleDogZG9tL1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9U
ZXh0LmNwcAkocmV2aXNpb24gMTY2MDUpCisrKyBkb20vVGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZH
SW5saW5lVGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE0OSw2ICsxNTAsOCBA
QCBib29sIFRleHQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgCiAKIFJlbmRlck9iamVj
dCAqVGV4dDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAq
c3R5bGUpCiB7CisgICAgaWYocGFyZW50Tm9kZSgpLT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR0lubGluZVRleHQodGhpcywgc3RyKTsKICAgICBy
ZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyVGV4dCh0aGlzLCBzdHIpOwogfQogCkluZGV4OiBrY2Fu
dmFzL1JlbmRlclNWR0lubGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVy
U1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1JlbmRlclNWR0lubGlu
ZVRleHQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwIEBACisvKgorICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAz
MzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmZGVmIFNW
R19TVVBQT1JUCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxp
bmVUZXh0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJLQ2Fu
dmFzUmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCisjaW5j
bHVkZSAiU1ZHSW5saW5lVGV4dEJveC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitSZW5kZXJTVkdJbmxpbmVUZXh0OjpSZW5kZXJT
VkdJbmxpbmVUZXh0KE5vZGUgKm4sIFN0cmluZ0ltcGwgKnN0cik6UmVuZGVyVGV4dChuLCBzdHIp
IHt9CisKK0lubGluZUJveCogUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y3JlYXRlSW5saW5lQm94KGJv
b2wsIGJvb2wgaXNSb290TGluZUJveCwgYm9vbCkKK3sKKyAgICBBU1NFUlQoIWlzUm9vdExpbmVC
b3gpOworICAgIElubGluZVRleHRCb3gqIHRleHRCb3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIFNW
R0lubGluZVRleHRCb3godGhpcyk7CisgICAgCisgICAgaWYgKCFtX2ZpcnN0VGV4dEJveCkKKyAg
ICAgICAgbV9maXJzdFRleHRCb3ggPSBtX2xhc3RUZXh0Qm94ID0gdGV4dEJveDsKKyAgICBlbHNl
IHsKKyAgICAgICAgbV9sYXN0VGV4dEJveC0+c2V0TmV4dExpbmVCb3godGV4dEJveCk7CisgICAg
ICAgIHRleHRCb3gtPnNldFByZXZpb3VzTGluZUJveChtX2xhc3RUZXh0Qm94KTsKKyAgICAgICAg
bV9sYXN0VGV4dEJveCA9IHRleHRCb3g7CisgICAgfQorICAgIHJldHVybiB0ZXh0Qm94OworfQor
Cit2b2lkIFJlbmRlclNWR0lubGluZVRleHQ6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCit7CisgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0lu
dFJlY3QoYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KEZsb2F0UmVjdCh0eCwgdHksIHdpZHRo
KCksIGhlaWdodCgpKSkpKTsKK30KKworfQorCisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6
IGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVu
ZGVyU1ZHSW5saW5lVGV4dC5oCShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2
IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMz
MCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJl
bmRlclNWR0lubGluZVRleHRfaAorI2RlZmluZSBSZW5kZXJTVkdJbmxpbmVUZXh0X2gKKworI2lm
ZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIFJlbmRlclNWR0lubGluZVRleHQgOiBwdWJsaWMgUmVuZGVyVGV4dCB7
CitwdWJsaWM6CisgICAgUmVuZGVyU1ZHSW5saW5lVGV4dChOb2RlKiwgU3RyaW5nSW1wbCopOwor
ICAgIHZpcnR1YWwgY29uc3QgY2hhciAqcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5k
ZXJTVkdJbmxpbmVUZXh0IjsgfQorICAgIHZpcnR1YWwgSW5saW5lQm94KiBjcmVhdGVJbmxpbmVC
b3goYm9vbCwgYm9vbCwgYm9vbCBpc09ubHlSdW4gPSBmYWxzZSk7CisgICAgdmlydHVhbCB2b2lk
IGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworfTsKK30K
KworI2VuZGlmIC8vIFNWR19TVVBQT1JUCisKKyNlbmRpZiAvLyAhUmVuZGVyU1ZHSW5saW5lVGV4
dF9oCkluZGV4OiBrY2FudmFzL1JlbmRlclNWR1RTcGFuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2Fu
dmFzL1JlbmRlclNWR1RTcGFuLmNwcAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvUmVuZGVyU1ZH
VFNwYW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisvKgorICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAz
MzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2lmZGVmIFNWR19TVVBQT1JUCisjaW5jbHVkZSAiUmVuZGVyU1ZHVFNwYW4u
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJLQ2FudmFzUmVuZGVy
aW5nU3R5bGUuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCisjaW5jbHVkZSAiU1ZH
Um9vdElubGluZUJveC5oIgorI2luY2x1ZGUgIlNWR0lubGluZUZsb3dCb3guaCIKKyNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorUmVuZGVy
U1ZHVFNwYW46OlJlbmRlclNWR1RTcGFuKE5vZGUgKm4pOlJlbmRlcklubGluZShuKSB7fQorICAg
IAorSW5saW5lQm94KiBSZW5kZXJTVkdUU3Bhbjo6Y3JlYXRlSW5saW5lQm94KGJvb2wgbWFrZVBs
YWNlSG9sZGVyQm94LCBib29sIGlzUm9vdExpbmVCb3gsIGJvb2wgaXNPbmx5UnVuKQoreworICAg
IGFzc2VydCghKCFpc1Jvb3RMaW5lQm94ICYmIChpc1JlcGxhY2VkKCkgfHwgbWFrZVBsYWNlSG9s
ZGVyQm94KSkpOworICAgIAorICAgIElubGluZUZsb3dCb3gqIGZsb3dCb3ggPSAwOworICAgIGlm
IChpc0lubGluZUZsb3coKSkKKyAgICAgICAgZmxvd0JveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkg
U1ZHSW5saW5lRmxvd0JveCh0aGlzKTsKKyAgICBlbHNlCisgICAgICAgIGZsb3dCb3ggPSBuZXcg
KHJlbmRlckFyZW5hKCkpIFNWR1Jvb3RJbmxpbmVCb3godGhpcyk7CisgICAgCisgICAgaWYgKCFt
X2ZpcnN0TGluZUJveCkKKyAgICAgICAgbV9maXJzdExpbmVCb3ggPSBtX2xhc3RMaW5lQm94ID0g
Zmxvd0JveDsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9sYXN0TGluZUJveC0+c2V0TmV4dExpbmVC
b3goZmxvd0JveCk7CisgICAgICAgIGZsb3dCb3gtPnNldFByZXZpb3VzTGluZUJveChtX2xhc3RM
aW5lQm94KTsKKyAgICAgICAgbV9sYXN0TGluZUJveCA9IGZsb3dCb3g7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBmbG93Qm94OworfQorCit2b2lkIFJlbmRlclNWR1RTcGFuOjphYnNvbHV0ZVJl
Y3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQoreworICAgIElubGlu
ZUZsb3dCb3gqIGluaXRGbG93PWZpcnN0TGluZUJveCgpOworICAgIHJlY3RzLmFwcGVuZChlbmNs
b3NpbmdJbnRSZWN0KGFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChGbG9hdFJlY3QodHggKyBp
bml0Rmxvdy0+eFBvcygpLCB0eSArIGluaXRGbG93LT55UG9zKCksIHdpZHRoKCksIGhlaWdodCgp
KSkpKTsKK30KKworCit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVApJbmRleDoga2NhbnZhcy9S
ZW5kZXJTVkdUU3Bhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHVFNwYW4uaAko
cmV2aXNpb24gMCkKKysrIGtjYW52YXMvUmVuZGVyU1ZHVFNwYW4uaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0MCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJv
amVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRl
bnQuY2FudGVyYnVyeS5hYy5uej4uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0x
MzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUmVuZGVyU1ZHVFNwYW5fSAorI2RlZmluZSBS
ZW5kZXJTVkdUU3Bhbl9ICisKKyNpZmRlZiBTVkdfU1VQUE9SVAorI2luY2x1ZGUgIlJlbmRlcklu
bGluZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBSZW5kZXJTVkdUU3BhbiA6IHB1
YmxpYyBSZW5kZXJJbmxpbmUgeworcHVibGljOgorICAgIFJlbmRlclNWR1RTcGFuKE5vZGUqKTsK
KyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVu
ZGVyU1ZHVFNwYW4iOyB9CisgICAgdmlydHVhbCBJbmxpbmVCb3gqIGNyZWF0ZUlubGluZUJveChi
b29sLCBib29sLCBib29sIGlzT25seVJ1biA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJz
b2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7Cit9OworfQorCisj
ZW5kaWYgLy8gU1ZHX1NVUFBPUlQKKyNlbmRpZiAvLyAhUmVuZGVyU1ZHVFNwYW5fSApJbmRleDog
a2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclNW
R1RleHQuY3BwCShyZXZpc2lvbiAxNjYwNSkKKysrIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKiAgICAgICAgICAgICAgIDIwMDYgQWxleGFuZGVyIEtl
bGxldHQgPGx5cGFub3ZAa2RlLm9yZz4KKyAqICAgICAgICAgICAgICAgMjAwNiBPbGl2ZXIgSHVu
dCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjYsMTIgKzI3LDExIEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiS0NhbnZhc0NsaXBwZXIuaCIKLSNpbmNs
dWRlICJLQ2FudmFzTWFza2VyLmgiCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgi
CiAjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aExpc3Qu
aCIKICNpbmNsdWRlICJTVkdUZXh0RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVC
b3guaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTQxLDIzICs0MSw2IEBAIFJlbmRlclNWR1RleHQ6OlJlbmRlclNWR1RleHQoU1ZHVGV4dEVsZW0K
IHsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1RleHQ6OnRyYW5zbGF0aW9uVG9wVG9C
YXNlbGluZSgpCi17Ci0gICAgaW50IG9mZnNldCA9IGJhc2VsaW5lUG9zaXRpb24odHJ1ZSwgdHJ1
ZSk7Ci0gICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZSgwLCAtb2Zmc2V0KTsK
LX0KLQotQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1RleHQ6OnRyYW5zbGF0aW9uRm9yQXR0cmli
dXRlcygpCi17Ci0gICAgU1ZHVGV4dEVsZW1lbnQgKnRleHQgPSBzdGF0aWNfY2FzdDxTVkdUZXh0
RWxlbWVudCo+KGVsZW1lbnQoKSk7Ci0KLSAgICBTVkdMZW5ndGgqIHhPZmZzZXQgPSB0ZXh0LT54
KCktPmdldEZpcnN0KCkuZ2V0KCk7Ci0gICAgU1ZHTGVuZ3RoKiB5T2Zmc2V0ID0gdGV4dC0+eSgp
LT5nZXRGaXJzdCgpLmdldCgpOwotCi0gICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpLnRyYW5z
bGF0ZSh4T2Zmc2V0ID8geE9mZnNldC0+dmFsdWUoKSA6IDAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB5T2Zmc2V0ID8geU9mZnNldC0+dmFsdWUoKSA6IDApOwotfQot
CiB2b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgcGFy
ZW50WCwgaW50IHBhcmVudFkpCiB7CiAgICAgaWYgKHBhaW50SW5mby5wLT5wYWludGluZ0Rpc2Fi
bGVkKCkpCkBAIC03NSw2MCArNTgsMTMgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpwYWludChQYWlu
dEluZm8mIHBhaQogICAgICAgICBzaG91bGRQb3BDb250ZXh0ID0gdHJ1ZTsKICAgICB9CiAgICAg
Ci0gICAgY29udGV4dC0+Y29uY2F0Q1RNKGxvY2FsVHJhbnNmb3JtKCkpOwotICAgIGNvbnRleHQt
PmNvbmNhdENUTShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUocGFyZW50WCwgcGFyZW50WSkp
OwotICAgIGNvbnRleHQtPmNvbmNhdENUTSh0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKSk7Ci0g
ICAgY29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zbGF0aW9uVG9wVG9CYXNlbGluZSgpKTsKLSAgICAK
LSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3goMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpOwotICAg
IGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0g
ICAgICAgICAgICAKLSAgICBpZiAoS0NhbnZhc0NsaXBwZXIqIGNsaXBwZXIgPSBnZXRDbGlwcGVy
QnlJZChkb2N1bWVudCgpLCBzdmdTdHlsZS0+Y2xpcFBhdGgoKS5zdWJzdHJpbmcoMSkpKQotICAg
ICAgICBjbGlwcGVyLT5hcHBseUNsaXAoYm91bmRpbmdCb3gpOwotCi0gICAgaWYgKEtDYW52YXNN
YXNrZXIqIG1hc2tlciA9IGdldE1hc2tlckJ5SWQoZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPm1hc2tF
bGVtZW50KCkuc3Vic3RyaW5nKDEpKSkKLSAgICAgICAgbWFza2VyLT5hcHBseU1hc2soYm91bmRp
bmdCb3gpOwotCi0gICAgS0NhbnZhc0ZpbHRlciogZmlsdGVyID0gZ2V0RmlsdGVyQnlJZChkb2N1
bWVudCgpLCBzdmdTdHlsZS0+ZmlsdGVyKCkuc3Vic3RyaW5nKDEpKTsKLSAgICBpZiAoZmlsdGVy
KQotICAgICAgICBmaWx0ZXItPnByZXBhcmVGaWx0ZXIoYm91bmRpbmdCb3gpOwotICAgICAgICAK
LSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjKGRldmljZS0+Y3VycmVudENvbnRleHQoKS0+
Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkpOwogICAgIFBhaW50SW5mbyBwaSA9IHBhaW50SW5mbzsK
KyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjKGRldmljZS0+Y3VycmVudENvbnRleHQoKS0+
Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkpOwogICAgIHBpLnAgPSBjLmdldCgpOwotICAgIHBpLnIg
PSAodHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5lKCkgKiB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMo
KSAqIGFic29sdXRlVHJhbnNmb3JtKCkpLmludmVydCgpLm1hcFJlY3QocGFpbnRJbmZvLnIpOwot
Ci0gICAgZmxvYXQgb3BhY2l0eSA9IHN0eWxlKCktPm9wYWNpdHkoKTsKLSAgICBpZiAob3BhY2l0
eSA8IDEuMGYpCi0gICAgICAgIGMtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0K
LSAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKmZpbGxQYWludFNlcnZlciA9IEtTVkdQYWludGVy
RmFjdG9yeTo6ZmlsbFBhaW50U2VydmVyKHN0eWxlKCksIHRoaXMpOwotICAgIGlmIChmaWxsUGFp
bnRTZXJ2ZXIpIHsKLSAgICAgICAgZmlsbFBhaW50U2VydmVyLT5zZXRQYWludGluZ1RleHQodHJ1
ZSk7Ci0gICAgICAgIC8vIGZpbGxQYWludFNlcnZlci0+c2V0QWN0aXZlQ2xpZW50KHRoaXMpOwot
ICAgICAgICBpZiAoZmlsbFBhaW50U2VydmVyLT5zZXR1cChjb250ZXh0LCB0aGlzLCBBUFBMWV9U
T19GSUxMKSkgewotICAgICAgICAgICAgUmVuZGVyQmxvY2s6OnBhaW50KHBpLCAwLCAwKTsKLSAg
ICAgICAgICAgIGZpbGxQYWludFNlcnZlci0+dGVhcmRvd24oY29udGV4dCwgdGhpcywgQVBQTFlf
VE9fRklMTCk7Ci0gICAgICAgIH0KLSAgICAgICAgZmlsbFBhaW50U2VydmVyLT5zZXRQYWludGlu
Z1RleHQoZmFsc2UpOwotICAgIH0KKyAgICBwaS5yID0gKGFic29sdXRlVHJhbnNmb3JtKCkpLmlu
dmVydCgpLm1hcFJlY3QocGFpbnRJbmZvLnIpOworICAgIGNvbnRleHQtPmNvbmNhdENUTShsb2Nh
bFRyYW5zZm9ybSgpKTsKICAgICAKLSAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnN0cm9rZVBh
aW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihzdHlsZSgp
LCB0aGlzKTsKLSAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgc3Ryb2tlUGFp
bnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dCh0cnVlKTsKLSAgICAgICAgLy8gc3Ryb2tlUGFpbnRT
ZXJ2ZXItPnNldEFjdGl2ZUNsaWVudCh0aGlzKTsKLSAgICAgICAgaWYgKHN0cm9rZVBhaW50U2Vy
dmVyLT5zZXR1cChjb250ZXh0LCB0aGlzLCBBUFBMWV9UT19TVFJPS0UpKSB7Ci0gICAgICAgICAg
ICBSZW5kZXJCbG9jazo6cGFpbnQocGksIDAsIDApOwotICAgICAgICAgICAgc3Ryb2tlUGFpbnRT
ZXJ2ZXItPnRlYXJkb3duKGNvbnRleHQsIHRoaXMsIEFQUExZX1RPX1NUUk9LRSk7Ci0gICAgICAg
IH0KLSAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dChmYWxzZSk7Ci0g
ICAgfQotCi0gICAgaWYgKGZpbHRlcikKLSAgICAgICAgZmlsdGVyLT5hcHBseUZpbHRlcihib3Vu
ZGluZ0JveCk7Ci0KLSAgICBpZiAob3BhY2l0eSA8IDEuMGYpCi0gICAgICAgIGMtPmVuZFRyYW5z
cGFyZW5jeUxheWVyKCk7CisgICAgUmVuZGVyQmxvY2s6OnBhaW50KHBpLCBwYXJlbnRYLCBwYXJl
bnRZKTsKIAogICAgIC8vIHJlc3RvcmUgZHJhd2luZyBzdGF0ZQogICAgIGlmICghc2hvdWxkUG9w
Q29udGV4dCkKQEAgLTE0MSwxMCArNzcsMTEgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpwYWludChQ
YWludEluZm8mIHBhaQogCiB2b2lkIFJlbmRlclNWR1RleHQ6OmNvbXB1dGVBYnNvbHV0ZVJlcGFp
bnRSZWN0KEludFJlY3QmIHIsIGJvb2wgZikKIHsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNm
b3JtID0gdHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5lKCkgKiB0cmFuc2xhdGlvbkZvckF0dHJpYnV0
ZXMoKSAqIGFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9y
bSA9IGFic29sdXRlVHJhbnNmb3JtKCk7CiAgICAgciA9IHRyYW5zZm9ybS5tYXBSZWN0KHIpOwog
ICAgIAogICAgIFJlbmRlckNvbnRhaW5lcjo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3Qociwg
Zik7CisgICAgciA9IHRyYW5zZm9ybS5pbnZlcnQoKS5tYXBSZWN0KHIpOwogfQogCiBib29sIFJl
bmRlclNWR1RleHQ6OnJlcXVpcmVzTGF5ZXIoKQpAQCAtMTYxLDkgKzk4LDEyIEBAIHZvaWQgUmVu
ZGVyU1ZHVGV4dDo6bGF5b3V0KCkKICAgICBib29sIGNoZWNrRm9yUmVwYWludCA9IGNoZWNrRm9y
UmVwYWludER1cmluZ0xheW91dCgpOwogICAgIGlmIChjaGVja0ZvclJlcGFpbnQpCiAgICAgICAg
IG9sZEJvdW5kcyA9IG1fYWJzb2x1dGVCb3VuZHM7Ci0KKyAgICBTVkdUZXh0RWxlbWVudCAqdGV4
dCA9IHN0YXRpY19jYXN0PFNWR1RleHRFbGVtZW50ICo+KGVsZW1lbnQoKSk7CisgICAgaW50IHhP
ZmZzZXQgPSB0ZXh0LT54KCktPmdldEZpcnN0KCkgPyB0ZXh0LT54KCktPmdldEZpcnN0KCktPnZh
bHVlKCkgOiAwOworICAgIGludCB5T2Zmc2V0ID0gdGV4dC0+eSgpLT5nZXRGaXJzdCgpID8gdGV4
dC0+eSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKKyAgICB0aGlzLT5zZXRQb3MoeE9mZnNl
dCwgeU9mZnNldCk7CiAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwotCisgICAgCiAgICAgbV9h
YnNvbHV0ZUJvdW5kcyA9IGdldEFic29sdXRlUmVwYWludFJlY3QoKTsKIAogICAgIGJvb2wgcmVw
YWludGVkID0gZmFsc2U7CkBAIC0xNzMsMTEgKzExMywyNiBAQCB2b2lkIFJlbmRlclNWR1RleHQ6
OmxheW91dCgpCiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCitJbmxpbmVCb3gqIFJl
bmRlclNWR1RleHQ6OmNyZWF0ZUlubGluZUJveChib29sIG1ha2VQbGFjZUhvbGRlckJveCwgYm9v
bCBpc1Jvb3RMaW5lQm94LCBib29sIGlzT25seVJ1bikKK3sKKyAgICBJbmxpbmVGbG93Qm94KiBm
bG93Qm94ID0gMDsKKyAgICBhc3NlcnQoIWlzSW5saW5lRmxvdygpKTsKKyAgICBmbG93Qm94ID0g
bmV3IChyZW5kZXJBcmVuYSgpKSBTVkdSb290SW5saW5lQm94KHRoaXMpOworICAgIAorICAgIGlm
ICghbV9maXJzdExpbmVCb3gpCisgICAgICAgIG1fZmlyc3RMaW5lQm94ID0gbV9sYXN0TGluZUJv
eCA9IGZsb3dCb3g7CisgICAgZWxzZSB7CisgICAgICAgIG1fbGFzdExpbmVCb3gtPnNldE5leHRM
aW5lQm94KGZsb3dCb3gpOworICAgICAgICBmbG93Qm94LT5zZXRQcmV2aW91c0xpbmVCb3gobV9s
YXN0TGluZUJveCk7CisgICAgICAgIG1fbGFzdExpbmVCb3ggPSBmbG93Qm94OworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gZmxvd0JveDsKK30KKwogYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQ
b2ludChOb2RlSW5mbyYgaW5mbywgaW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHksIEhp
dFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdG90YWxU
cmFuc2Zvcm0gPSB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKTsKLSAgICB0b3RhbFRyYW5zZm9y
bSAqPSB0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKTsKLSAgICB0b3RhbFRyYW5zZm9ybSAqPSBh
YnNvbHV0ZVRyYW5zZm9ybSgpOworICAgIEFmZmluZVRyYW5zZm9ybSB0b3RhbFRyYW5zZm9ybSA9
IGFic29sdXRlVHJhbnNmb3JtKCk7CiAgICAgZG91YmxlIGxvY2FsWCwgbG9jYWxZOwogICAgIHRv
dGFsVHJhbnNmb3JtLmludmVydCgpLm1hcChfeCwgX3ksICZsb2NhbFgsICZsb2NhbFkpOwogICAg
IHJldHVybiBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoaW5mbywgKGludClsb2NhbFgsIChpbnQp
bG9jYWxZLCBfdHgsIF90eSwgaGl0VGVzdEFjdGlvbik7CkBAIC0xODUsMTEgKzE0MCwxMCBAQCBi
b29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KE5vZGVJbmZvCiAKIHZvaWQgUmVuZGVyU1ZH
VGV4dDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0
eSkKIHsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0ID0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVz
KCk7Ci0gICAgbWF0ICo9IHRyYW5zbGF0aW9uVG9wVG9CYXNlbGluZSgpOwotICAgIG1hdCAqPSBh
YnNvbHV0ZVRyYW5zZm9ybSgpOwotCi0gICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3Qo
bWF0Lm1hcFJlY3QoRmxvYXRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSkpKTsKKyAgICBm
b3IgKElubGluZUJveCAqYm94ID0gbV9maXJzdExpbmVCb3g7IGJveDsgYm94ID0gYm94LT5tX25l
eHQpIHsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGJveFRyYW5zZm9ybSA9IGJveC0+b2JqZWN0
KCktPmFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJ
bnRSZWN0KGJveFRyYW5zZm9ybS5tYXBSZWN0KEZsb2F0UmVjdCh4UG9zKCkgKyBib3gtPnhQb3Mo
KSwgeVBvcygpICsgYm94LT55UG9zKCksIGJveC0+d2lkdGgoKSwgYm94LT5oZWlnaHQoKSkpKSk7
CisgICAgfQogfQogCiB9CkluZGV4OiBrY2FudmFzL1JlbmRlclNWR1RleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrY2FudmFzL1JlbmRlclNWR1RleHQuaAkocmV2aXNpb24gMTY2MDUpCisrKyBrY2FudmFz
L1JlbmRlclNWR1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5j
bHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Mywx
NiArNDQsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRMb2NhbFRyYW5zZm9ybShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9y
bTsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChOb2RlSW5mbyYsIGludCB4
LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwotCiAgICAgdmlydHVhbCB2
b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOwotCiAg
ICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmIHIsIGJv
b2wgZik7CiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKTsKICAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0KCk7CiAgICAgCisgICAgdmlydHVhbCBJbmxpbmVCb3gqIGNyZWF0ZUlubGluZUJv
eChib29sLCBib29sLCBib29sIGlzT25seVJ1biA9IGZhbHNlKTsKICBwcml2YXRlOgotICAgIEFm
ZmluZVRyYW5zZm9ybSB0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKTsKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1f
dHJhbnNmb3JtOwogICAgIEludFJlY3QgbV9hYnNvbHV0ZUJvdW5kczsKIH07CkluZGV4OiBrY2Fu
dmFzL1NWR0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvU1ZHSW5saW5l
Rmxvd0JveC5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1NWR0lubGluZUZsb3dCb3guY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIg
SHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworCisjaWZkZWYgU1ZHX1NVUFBP
UlQKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0lubGluZUZsb3dCb3guaCIK
KworI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBrY2FudmFzL1NWR0lubGluZUZsb3dCb3gu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1NWR0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gMCkK
KysrIGtjYW52YXMvU1ZHSW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0
IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJi
dXJ5LmFjLm56Pi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K
KyAqCisgKi8KKworI2lmbmRlZiBTVkdJbmxpbmVGbG93Qm94X0gKKyNkZWZpbmUgU1ZHSW5saW5l
Rmxvd0JveF9ICisKKyNpZmRlZiBTVkdfU1VQUE9SVAorCisjaW5jbHVkZSAiSW5saW5lRmxvd0Jv
eC5oIgorCituYW1lc3BhY2UgV2ViQ29yZQoreworICAgIAorY2xhc3MgU1ZHSW5saW5lRmxvd0Jv
eCA6IHB1YmxpYyBJbmxpbmVGbG93Qm94IHsKK3B1YmxpYzoKKyAgICBTVkdJbmxpbmVGbG93Qm94
KFJlbmRlck9iamVjdCAqb2JqKSA6IElubGluZUZsb3dCb3gob2JqKSB7CisgICAgICAgIG1faXNT
VkdGbG93ID0gdHJ1ZTsKKyAgICB9Cit9OworCit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAor
CisjZW5kaWYgLy8gIVNWR0lubGluZUZsb3dCb3hfSApJbmRleDoga2NhbnZhcy9TVkdJbmxpbmVU
ZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1NWR0lubGluZVRleHRCb3guY3BwCShy
ZXZpc2lvbiAwKQorKysga2NhbnZhcy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
CisgKiAgICAgICAgICAgICAgIDIwMDYgQWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZAa2RlLm9y
Zz4KKyAqICAgICAgICAgICAgICAgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50
ZXJidXJ5LmFjLm56Pi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KKyAqCisgKi8KKworI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5n
U3R5bGUuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCisjaW5jbHVkZSAiU1ZHTGVu
Z3RoTGlzdC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIlNWR0lu
bGluZVRleHRCb3guaCIKKyNpbmNsdWRlICJLQ2FudmFzQ2xpcHBlci5oIgorI2luY2x1ZGUgIktD
YW52YXNNYXNrZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludChSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSl7CisgICAgaWYgKHBhaW50SW5mby5wLT5w
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBLUmVuZGVyaW5n
RGV2aWNlKiBkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKKyAgICBLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dCogY29udGV4dCA9IGRldmljZS0+Y3VycmVudENvbnRleHQoKTsKKyAgICBib29sIHNo
b3VsZFBvcENvbnRleHQgPSBmYWxzZTsKKyAgICBpZiAoY29udGV4dCkKKyAgICAgICAgcGFpbnRJ
bmZvLnAtPnNhdmUoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gTmVlZCB0byBzZXQgdXAgS0Nh
bnZhcyByZW5kZXJpbmcgaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBkb25lLgorICAgICAgICBj
b250ZXh0ID0gcGFpbnRJbmZvLnAtPmNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRleHQoKTsKKyAg
ICAgICAgZGV2aWNlLT5wdXNoQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgc2hvdWxkUG9wQ29u
dGV4dCA9IHRydWU7CisgICAgfQorICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCh0eCwgdHksIHdp
ZHRoKCksIGhlaWdodCgpKTsKKyAgICBib3VuZGluZ0JveD1vYmplY3QoKS0+YWJzb2x1dGVUcmFu
c2Zvcm0oKS5tYXBSZWN0KGJvdW5kaW5nQm94KTsKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSAq
c3ZnU3R5bGUgPSBvYmplY3QoKS0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICAKKyAgICBpZiAo
S0NhbnZhc0NsaXBwZXIqIGNsaXBwZXIgPSBnZXRDbGlwcGVyQnlJZChvYmplY3QoKS0+ZG9jdW1l
bnQoKSwgc3ZnU3R5bGUtPmNsaXBQYXRoKCkuc3Vic3RyaW5nKDEpKSkKKyAgICAgICAgY2xpcHBl
ci0+YXBwbHlDbGlwKGJvdW5kaW5nQm94KTsKKyAgICAKKyAgICBpZiAoS0NhbnZhc01hc2tlciog
bWFza2VyID0gZ2V0TWFza2VyQnlJZChvYmplY3QoKS0+ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPm1h
c2tFbGVtZW50KCkuc3Vic3RyaW5nKDEpKSkKKyAgICAgICAgbWFza2VyLT5hcHBseU1hc2soYm91
bmRpbmdCb3gpOworICAgIAorICAgIEtDYW52YXNGaWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5
SWQob2JqZWN0KCktPmRvY3VtZW50KCksIHN2Z1N0eWxlLT5maWx0ZXIoKS5zdWJzdHJpbmcoMSkp
OworICAgIGlmIChmaWx0ZXIpCisgICAgICAgIGZpbHRlci0+cHJlcGFyZUZpbHRlcihib3VuZGlu
Z0JveCk7CisgICAgCisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYyhkZXZpY2UtPmN1cnJl
bnRDb250ZXh0KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKKyAgICAKKyAgICBmbG9hdCBv
cGFjaXR5ID0gb2JqZWN0KCktPnN0eWxlKCktPm9wYWNpdHkoKTsKKyAgICBpZiAob3BhY2l0eSA8
IDEuMGYpCisgICAgICAgIGMtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CisgICAg
CisgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpmaWxsUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRl
ckZhY3Rvcnk6OmZpbGxQYWludFNlcnZlcihvYmplY3QoKS0+c3R5bGUoKSwgb2JqZWN0KCkpOwor
ICAgIGlmIChmaWxsUGFpbnRTZXJ2ZXIpIHsKKyAgICAgICAgZmlsbFBhaW50U2VydmVyLT5zZXRQ
YWludGluZ1RleHQodHJ1ZSk7CisgICAgICAgIC8vIGZpbGxQYWludFNlcnZlci0+c2V0QWN0aXZl
Q2xpZW50KHRoaXMpOworICAgICAgICBpZiAoZmlsbFBhaW50U2VydmVyLT5zZXR1cChjb250ZXh0
LCBvYmplY3QoKSwgQVBQTFlfVE9fRklMTCkpIHsKKyAgICAgICAgICAgIElubGluZVRleHRCb3g6
OnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICAgICAgICAgIGZpbGxQYWludFNlcnZlci0+
dGVhcmRvd24oY29udGV4dCwgb2JqZWN0KCksIEFQUExZX1RPX0ZJTEwpOworICAgICAgICB9Cisg
ICAgICAgIGZpbGxQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KGZhbHNlKTsKKyAgICB9Cisg
ICAgCisgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpzdHJva2VQYWludFNlcnZlciA9IEtTVkdQ
YWludGVyRmFjdG9yeTo6c3Ryb2tlUGFpbnRTZXJ2ZXIob2JqZWN0KCktPnN0eWxlKCksIG9iamVj
dCgpKTsKKyAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKKyAgICAgICAgc3Ryb2tlUGFpbnRT
ZXJ2ZXItPnNldFBhaW50aW5nVGV4dCh0cnVlKTsKKyAgICAgICAgLy8gc3Ryb2tlUGFpbnRTZXJ2
ZXItPnNldEFjdGl2ZUNsaWVudCh0aGlzKTsKKyAgICAgICAgaWYgKHN0cm9rZVBhaW50U2VydmVy
LT5zZXR1cChjb250ZXh0LCBvYmplY3QoKSwgQVBQTFlfVE9fU1RST0tFKSkgeworICAgICAgICAg
ICAgSW5saW5lVGV4dEJveDo6cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgICAgICAgICAg
c3Ryb2tlUGFpbnRTZXJ2ZXItPnRlYXJkb3duKGNvbnRleHQsIG9iamVjdCgpLCBBUFBMWV9UT19T
VFJPS0UpOworICAgICAgICB9CisgICAgICAgIHN0cm9rZVBhaW50U2VydmVyLT5zZXRQYWludGlu
Z1RleHQoZmFsc2UpOworICAgIH0KKyAgICAKKyAgICBpZiAoZmlsdGVyKSAKKyAgICAgICAgZmls
dGVyLT5hcHBseUZpbHRlcihib3VuZGluZ0JveCk7CisgICAgCisgICAgaWYgKG9wYWNpdHkgPCAx
LjBmKQorICAgICAgICBjLT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIAorICAgIC8vIHJl
c3RvcmUgZHJhd2luZyBzdGF0ZQorICAgIGlmICghc2hvdWxkUG9wQ29udGV4dCkKKyAgICAgICAg
cGFpbnRJbmZvLnAtPnJlc3RvcmUoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZGV2aWNlLT5wb3BD
b250ZXh0KCk7CisgICAgICAgIGRlbGV0ZSBjb250ZXh0OworICAgIH0KKyAgICAKK30KKyAgICAK
K30KKworI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBrY2FudmFzL1NWR0lubGluZVRleHRC
b3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1NWR0lubGluZVRleHRCb3guaAkocmV2aXNpb24g
MCkKKysrIGtjYW52YXMvU1ZHSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0Lgor
ICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50
ZXJidXJ5LmFjLm56Pi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KKyAqCisgKi8KKworI2lmbmRlZiBTVkdJbmxpbmVUZXh0Qm94X0gKKyNkZWZpbmUgU1ZHSW5s
aW5lVGV4dEJveF9ICisKKyNpZmRlZiBTVkdfU1VQUE9SVAorCisjaW5jbHVkZSAiSW5saW5lVGV4
dEJveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR0lubGluZVRleHRCb3gg
OiBwdWJsaWMgSW5saW5lVGV4dEJveCB7CitwdWJsaWM6CisgICAgU1ZHSW5saW5lVGV4dEJveChS
ZW5kZXJPYmplY3QgKm9iaikgOiBJbmxpbmVUZXh0Qm94KG9iaikge30KKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGludCB0eCwgaW50IHR5KTsKK307
CisKK30KKworI2VuZGlmIC8vIFNWR19TVVBQT1JUCisKKyNlbmRpZiAvLyAhU1ZHSW5saW5lVGV4
dEJveF9ICkluZGV4OiBrY2FudmFzL1NWR1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtjYW52YXMvU1ZHUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1NW
R1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5IEBACisvKgorICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKwor
CisjaWZkZWYgU1ZHX1NVUFBPUlQKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNW
R1Jvb3RJbmxpbmVCb3guaCIKKworI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBrY2FudmFz
L1NWR1Jvb3RJbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1NWR1Jvb3RJbmxpbmVC
b3guaAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvU1ZHUm9vdElubGluZUJveC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2po
MTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1B
IDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTVkdSb290SW5saW5lQm94X0gK
KyNkZWZpbmUgU1ZHUm9vdElubGluZUJveF9ICisKKyNpZmRlZiBTVkdfU1VQUE9SVAorCisjaW5j
bHVkZSAiUm9vdElubGluZUJveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZQoreworICAgIAorY2xh
c3MgU1ZHUm9vdElubGluZUJveCA6IHB1YmxpYyBSb290SW5saW5lQm94IHsKK3B1YmxpYzoKKyAg
ICBTVkdSb290SW5saW5lQm94KFJlbmRlck9iamVjdCAqb2JqKSA6IFJvb3RJbmxpbmVCb3gob2Jq
KSB7CisgICAgICAgIG1faXNTVkdGbG93ID0gdHJ1ZTsKKyAgICB9Cit9OworCit9CisKKyNlbmRp
ZiAvLyBTVkdfU1VQUE9SVAorCisjZW5kaWYgLy8gIVJvb3RJbmxpbmVCb3hfSApJbmRleDoga3N2
ZzIvc3ZnL1NWR1RTcGFuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RT
cGFuRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2NjA1KQorKysga3N2ZzIvc3ZnL1NWR1RTcGFuRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpZmRlZiBTVkdfU1VQ
UE9SVAogI2luY2x1ZGUgIlNWR1RTcGFuRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
Ci0jaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHVFNwYW4uaCIK
IAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ3LDcgKzQ3LDcgQEAgYm9vbCBTVkdU
U3BhbkVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUgogCiBSZW5kZXJPYmplY3QgKlNWR1RTcGFu
RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAq
KQogewotICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJJbmxpbmUodGhpcyk7CisgICAgcmV0
dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR1RTcGFuKHRoaXMpOwogfQogCiAvLyB2aW06dHM9NDpu
b2V0CkluZGV4OiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNjYwNSkKKysrIHJlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDEzICszMDUsNDggQEAgaW50
IElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFsbAogICAgIHJldHVybiB4OwogfQog
Cit2b2lkIElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNWZXJ0aWNhbGx5V2l0aEFic0Jhc2VsaW5l
KGludCYgaGVpZ2h0T2ZCbG9jaywgaW50ICZtaW5feSwgaW50ICZtYXhfeSkKK3sKKyAgICBmb3Ig
KElubGluZUJveCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRP
bkxpbmUoKSkgeworICAgICAgICBpZiAoY3Vyci0+aXNJbmxpbmVGbG93Qm94KCkpCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxJbmxpbmVGbG93Qm94Kj4oY3VyciktPnBsYWNlQm94ZXNWZXJ0aWNh
bGx5V2l0aEFic0Jhc2VsaW5lKGhlaWdodE9mQmxvY2ssIG1pbl95LCBtYXhfeSk7CisKKyAgICAg
ICAgY29uc3QgRm9udCYgZm9udCA9IGN1cnItPm9iamVjdCgpLT5mb250KHRydWUpOworICAgICAg
ICBpbnQgYXNjZW50ID0gZm9udC5hc2NlbnQoKTsKKyAgICAgICAgaW50IHBvc2l0aW9uID0gaGVp
Z2h0T2ZCbG9jayAtIGFzY2VudDsKKyAgICAgICAgaW50IGhlaWdodCA9IGFzY2VudCArIGZvbnQu
ZGVzY2VudCgpOworICAgICAgICBjdXJyLT5zZXRCYXNlbGluZShhc2NlbnQpOworICAgICAgICBj
dXJyLT5zZXRZUG9zKHBvc2l0aW9uKTsKKyAgICAgICAgY3Vyci0+c2V0SGVpZ2h0KGhlaWdodCk7
CisKKyAgICAgICAgaWYgKHBvc2l0aW9uIDwgbWluX3kpIAorICAgICAgICAgICAgbWluX3kgPSBw
b3NpdGlvbjsKKyAgICAgICAgaWYgKHBvc2l0aW9uICsgaGVpZ2h0ID4gbWF4X3kpIAorICAgICAg
ICAgICAgbWF4X3kgPSBwb3NpdGlvbiArIGhlaWdodDsKKyAgICB9CisgICAgaWYgKGlzUm9vdElu
bGluZUJveCgpKSB7CisgICAgICAgIHNldFlQb3MobWluX3kpOworICAgICAgICBzZXRIZWlnaHQo
bWF4X3kgLSBtaW5feSk7CisgICAgICAgIHNldEJhc2VsaW5lKGhlaWdodE9mQmxvY2sgLSBtaW5f
eSk7CisgICAgICAgIGhlaWdodE9mQmxvY2sgKz0gbWF4X3kgLSBtaW5feTsKKyAgICB9Cit9CisK
IHZvaWQgSW5saW5lRmxvd0JveDo6dmVydGljYWxseUFsaWduQm94ZXMoaW50JiBoZWlnaHRPZkJs
b2NrKQogewogICAgIGludCBtYXhQb3NpdGlvblRvcCA9IDA7CiAgICAgaW50IG1heFBvc2l0aW9u
Qm90dG9tID0gMDsKICAgICBpbnQgbWF4QXNjZW50ID0gMDsKICAgICBpbnQgbWF4RGVzY2VudCA9
IDA7Ci0KKyAgICBpZiAobV9pc1NWR0Zsb3cpIHsKKyAgICAgICAgLy9BYnNvbHV0ZSBwb3NpdGlv
bnMgaW4gU1ZHIGRpY3RhdGUgcG9zaXRpb24gb2YgYmFzZWxpbmUKKyAgICAgICAgLy9zbyB3ZSBk
cm9wIHRvIGEgc2ltcGxlciBsYXlvdXQgZnVuY3Rpb24KKyAgICAgICAgaW50IHRvcD1oZWlnaHRP
ZkJsb2NrLCBib3R0b209aGVpZ2h0T2ZCbG9jazsKKyAgICAgICAgcGxhY2VCb3hlc1ZlcnRpY2Fs
bHlXaXRoQWJzQmFzZWxpbmUoaGVpZ2h0T2ZCbG9jaywgdG9wLCBib3R0b20pOworICAgICAgICBz
ZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25zKHRvcCwgYm90dG9tKTsKKyAgICAgICAgc2V0VmVy
dGljYWxTZWxlY3Rpb25Qb3NpdGlvbnModG9wLCBib3R0b20pOworICAgICAgICByZXR1cm47Cisg
ICAgfQogICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2UncmUgaW4gc3RyaWN0IG1vZGUuICBOb3RlIHRo
YXQgd2UgY2FuJ3Qgc2ltcGx5IHVzZSAhc3R5bGUoKS0+aHRtbEhhY2tzKCksCiAgICAgLy8gYmVj
YXVzZSB0aGF0IHdvdWxkIG1hdGNoIGFsbW9zdCBzdHJpY3QgbW9kZSBhcyB3ZWxsLgogICAgIFJl
bmRlck9iamVjdCogY3VyciA9IG9iamVjdCgpOwpJbmRleDogcmVuZGVyaW5nL0lubGluZUZsb3dC
b3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiAx
NjYwNSkKKysrIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDYgKzM4LDcgQEAgcHVibGljOgogICAgICAgICBtX2luY2x1ZGVMZWZ0RWRnZSA9IG1faW5jbHVk
ZVJpZ2h0RWRnZSA9IGZhbHNlOwogICAgICAgICBtX2hhc1RleHRDaGlsZHJlbiA9IGZhbHNlOwog
ICAgICAgICBtX21heEhvcml6b250YWxTaGFkb3cgPSAwOworICAgICAgICBtX2lzU1ZHRmxvdyA9
IGZhbHNlOwogICAgIH0KIAogICAgIFJlbmRlckZsb3cqIGZsb3dPYmplY3QoKTsKQEAgLTEwNSw2
ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
JiBtYXhBc2NlbnQsIGludCYgbWF4RGVzY2VudCwgYm9vbCBzdHJpY3RNb2RlKTsKICAgICB2b2lk
IGFkanVzdE1heEFzY2VudEFuZERlc2NlbnQoaW50JiBtYXhBc2NlbnQsIGludCYgbWF4RGVzY2Vu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heFBvc2l0aW9uVG9w
LCBpbnQgbWF4UG9zaXRpb25Cb3R0b20pOworICAgIHZvaWQgcGxhY2VCb3hlc1ZlcnRpY2FsbHlX
aXRoQWJzQmFzZWxpbmUoaW50JiBoZWlnaHRPZkJsb2NrLCBpbnQgJm1pbl95LCBpbnQgJm1heF95
KTsKICAgICB2b2lkIHBsYWNlQm94ZXNWZXJ0aWNhbGx5KGludCB5LCBpbnQgbWF4SGVpZ2h0LCBp
bnQgbWF4QXNjZW50LCBib29sIHN0cmljdE1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQmIHRvcFBvc2l0aW9uLCBpbnQmIGJvdHRvbVBvc2l0aW9uLCBpbnQmIHNlbGVjdGlv
blRvcCwgaW50JiBzZWxlY3Rpb25Cb3R0b20pOwogICAgIHZvaWQgc2hyaW5rQm94ZXNXaXRoTm9U
ZXh0Q2hpbGRyZW4oaW50IHRvcFBvc2l0aW9uLCBpbnQgYm90dG9tUG9zaXRpb24pOwpAQCAtMTI3
LDYgKzEyOSw3IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1faW5jbHVkZUxlZnRFZGdlIDogMTsK
ICAgICBib29sIG1faW5jbHVkZVJpZ2h0RWRnZSA6IDE7CiAgICAgYm9vbCBtX2hhc1RleHRDaGls
ZHJlbiA6IDE7CisgICAgYm9vbCBtX2lzU1ZHRmxvdyA6IDE7CiB9OwogCiB9IC8vbmFtZXNwYWNl
CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAxNjYwNSkKKysrIHJlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBSZW5kZXJUZXh0OjpSZW5kZXJU
ZXh0KE5vZGUqIG5vZGUsIFN0cmluCiAgICAgIDogUmVuZGVyT2JqZWN0KG5vZGUpLCBzdHIoX3N0
ciksIG1fZmlyc3RUZXh0Qm94KDApLCBtX2xhc3RUZXh0Qm94KDApCiAgICAgICwgbV9taW5XaWR0
aCgtMSksIG1fbWF4V2lkdGgoLTEpLCBtX3NlbGVjdGlvblN0YXRlKFNlbGVjdGlvbk5vbmUpCiAg
ICAgICwgbV9saW5lc0RpcnR5KGZhbHNlKSwgbV9jb250YWluc1JldmVyc2VkVGV4dChmYWxzZSkK
LSAgICAgLCBtX2FsbEFzY2lpQ2hlY2tlZChmYWxzZSksIG1fYWxsQXNjaWkoZmFsc2UpCisgICAg
ICwgbV9hbGxBc2NpaUNoZWNrZWQoZmFsc2UpLCBtX2FsbEFzY2lpKGZhbHNlKSwgbV9pc1NWR1Rl
eHQoZmFsc2UpCiAgICAgICwgbV9tb25vc3BhY2VDaGFyYWN0ZXJXaWR0aCgwKQogewogICAgIHNl
dFJlbmRlclRleHQoKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gMTY2MDUpCisrKyByZW5kZXJpbmcv
UmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgaW50IG5leHRPZmZzZXQoaW50IGN1cnJlbnQpIGNvbnN0OwogICAgIAogICAg
IGJvb2wgY29udGFpbnNSZXZlcnNlZFRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zUmV2
ZXJzZWRUZXh0OyB9Ci0gICAgCisgICAgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJldHVybiBt
X2lzU1ZHVGV4dDsgfQogcHVibGljOgogICAgIElubGluZVRleHRCb3ggKiBmaW5kTmV4dElubGlu
ZVRleHRCb3goIGludCBvZmZzZXQsIGludCAmcG9zICkgY29uc3Q7CiAKQEAgLTE4Myw2ICsxODMs
NyBAQCBwcm90ZWN0ZWQ6IC8vIG1lbWJlcnMKICAgICAvLyAyMiBiaXRzIGxlZnQKICAgICBtdXRh
YmxlIGJvb2wgbV9hbGxBc2NpaUNoZWNrZWQ6MTsKICAgICBtdXRhYmxlIGJvb2wgbV9hbGxBc2Np
aToxOworICAgIGJvb2wgbV9pc1NWR1RleHQ6MTsKICAgICBpbnQgbV9tb25vc3BhY2VDaGFyYWN0
ZXJXaWR0aDsKIH07CiAK
</data>
<flag name="review"
          id="3573"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10859</attachid>
            <date>2006-10-01 21:36:59 -0700</date>
            <delta_ts>2006-10-04 17:04:11 -0700</delta_ts>
            <desc>reformatting patch</desc>
            <filename>newtext5.patch</filename>
            <type>text/plain</type>
            <size>45439</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2NjkzKQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjU5LDYg
KzEyNTksOCBAQAogCQk5M0YxOUIxNjA4MjQ1RTU5MDAxRTlBQkMgLyogSmF2YVNjcmlwdENvcmUu
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjgyMTYyOTkwMjlGNEZCNTAxMDAwMTMxIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAq
LzsgfTsKIAkJOTNGMTlCMTcwODI0NUU1OTAwMUU5QUJDIC8qIGxpYmljdWNvcmUuZHlsaWIgaW4g
RnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0YxRDMxQTA1
NThDQzVDMDA4MjFCQzAgLyogbGliaWN1Y29yZS5keWxpYiAqLzsgfTsKIAkJOTNGMTlCMTgwODI0
NUU1OTAwMUU5QUJDIC8qIGxpYnhzbHQuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDA2MzMwNzA3MzFBNzcyMDBEQjFGRDEgLyogbGlieHNs
dC5keWxpYiAqLzsgfTsKKwkJQTc1RTk2RTAwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxp
bmVCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
NUU5NkRFMEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmggKi87IH07CisJCUE3
NUU5NkUxMEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU5NkRGMEFDMTM2NkYwMEVF
MEFGOSAvKiBTVkdSb290SW5saW5lQm94LmNwcCAqLzsgfTsKIAkJQTc2MzhBOEIwOTk1OEVBNTAw
MDdFMTRGIC8qIFdLRGlzcGxhY2VtZW50TWFwRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzYzOEE4OTA5OTU4RUE1MDAwN0UxNEYgLyogV0tE
aXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCAqLzsgfTsKIAkJQTc2MzhBOEMwOTk1OEVBNTAwMDdFMTRG
IC8qIFdLRGlzcGxhY2VtZW50TWFwRmlsdGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFj
ZW1lbnRNYXBGaWx0ZXIubSAqLzsgfTsKIAkJQTc2MzhBOTIwOTk1OTJDMzAwMDdFMTRGIC8qIFdL
RGlzcGxhY2VtZW50TWFwRmlsdGVyLmNpa2VybmVsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzYzOEE5MTA5OTU5MkMzMDAwN0UxNEYgLyogV0tEaXNw
bGFjZW1lbnRNYXBGaWx0ZXIuY2lrZXJuZWwgKi87IH07CkBAIC0xMjgxLDYgKzEyODMsMTQgQEAK
IAkJQTdCOTdCODUwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5jaWtl
cm5lbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdC
OTdCNzQwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5jaWtlcm5lbCAq
LzsgfTsKIAkJQTdCOTdCODYwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCOTdC
NzUwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5oICovOyB9OwogCQlB
N0I5N0I4NzA5NzlDM0ExMDAwRThFQjEgLyogV0tUYWJsZVRyYW5zZmVyRmlsdGVyLm0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I5N0I3NjA5NzlDM0Ex
MDAwRThFQjEgLyogV0tUYWJsZVRyYW5zZmVyRmlsdGVyLm0gKi87IH07CisJCUE3QzUxOTQ5MEFD
QTZBRjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDNTE5NDcwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRl
clNWR1RTcGFuLmggKi87IH07CisJCUE3QzUxOTRBMEFDQTZBRjEwMDZFMkZCOSAvKiBSZW5kZXJT
VkdUU3Bhbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0M1MTk0ODBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwICovOyB9Owor
CQlBN0M1MUE0NjBBQ0E3NDQ3MDA2RTJGQjkgLyogU1ZHSW5saW5lRmxvd0JveC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDNTFBNDQwQUNBNzQ0NzAw
NkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guaCAqLzsgfTsKKwkJQTdDNTFBNDcwQUNBNzQ0NzAw
NkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDNTFBNDUwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGlu
ZUZsb3dCb3guY3BwICovOyB9OworCQlBN0UxRERCRTBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVy
U1ZHSW5saW5lVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdFMUREQkMwQUFFQ0REMTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCAq
LzsgfTsKKwkJQTdFMUREQkYwQUFFQ0REMTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFMURE
QkQwQUFFQ0REMTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuY3BwICovOyB9OworCQlB
N0UxRERGNjBBQUYwOEFGMDBDQUNEMUMgLyogU1ZHSW5saW5lVGV4dEJveC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFMURERjQwQUFGMDhBRjAwQ0FD
RDFDIC8qIFNWR0lubGluZVRleHRCb3guaCAqLzsgfTsKKwkJQTdFMURERjcwQUFGMDhBRjAwQ0FD
RDFDIC8qIFNWR0lubGluZVRleHRCb3guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTdFMURERjUwQUFGMDhBRjAwQ0FDRDFDIC8qIFNWR0lubGluZVRl
eHRCb3guY3BwICovOyB9OwogCQlBODBFNkNFNDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVM
aXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
MEU2Q0JBMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NWYWx1ZUxpc3QuY3BwICovOyB9OwogCQlBODBF
NkNFNTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNCQjBBMTk4OUNBMDA3
RkI4QzUgLyogQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgKi87IH07CiAJCUE4MEU2Q0U2MEExOTg5
Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQkMwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1By
aW1pdGl2ZVZhbHVlLmggKi87IH07CkBAIC0zNzI2LDYgKzM3MzYsOCBAQAogCQk5M0Y4QjMwNjBB
MzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3Jp
cHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0b3JKUy5wbTsgcGF0aCA9IC4uL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y4QjMwNzBB
MzAwRkVBMDBGNjFBQjggLyogZ2VuZXJhdGUtYmluZGluZ3MucGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5wZXJsOyBuYW1lID0gImdlbmVyYXRlLWJpbmRpbmdzLnBsIjsgcGF0aCA9ICJzY3JpcHRz
L2dlbmVyYXRlLWJpbmRpbmdzLnBsIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNG
OEIzMDgwQTMwMEZFQTAwRjYxQUI4IC8qIElETFN0cnVjdHVyZS5wbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnBlcmw7IG5hbWUgPSBJRExTdHJ1Y3R1cmUucG07IHBhdGggPSBzY3JpcHRzL0lETFN0
cnVjdHVyZS5wbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc1RTk2REUwQUMxMzY2
RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHUm9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzVFOTZERjBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSb290SW5saW5lQm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdL
RGlzcGxhY2VtZW50TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmls
dGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjM4QTkxMDk5NTkyQzMwMDA3
RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTM3NDgsNiArMzc2MCwxNCBAQAogCQlBN0I5N0I3NDA5NzlDM0ExMDAw
RThFQjEgLyogV0tUYWJsZVRyYW5zZmVyRmlsdGVyLmNpa2VybmVsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3Qjk3Qjc1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNmZXJG
aWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLVGFibGVUcmFuc2Zl
ckZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I5N0I3NjA5NzlDM0Ex
MDAwRThFQjEgLyogV0tUYWJsZVRyYW5zZmVyRmlsdGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLm9iamM7IHBhdGggPSBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIubTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTdDNTE5NDcwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNWR1RTcGFu
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1RTcGFuLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3QzUxOTQ4MEFDQTZBRjEwMDZFMkZCOSAvKiBS
ZW5kZXJTVkdUU3Bhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJTVkdUU3Bhbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3QzUxQTQ0
MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNWR0lubGluZUZsb3dCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTdDNTFBNDUwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHSW5saW5lRmxvd0JveC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3RTFEREJDMEFBRUNERDEwMENBQ0Qx
QyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbmRlclNWR0lubGluZVRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTdFMUREQkQwQUFFQ0REMTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3RTFEREY0MEFBRjA4QUYwMENBQ0QxQyAv
KiBTVkdJbmxpbmVUZXh0Qm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0lubGluZVRleHRCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdFMURERjUw
QUFGMDhBRjAwQ0FDRDFDIC8qIFNWR0lubGluZVRleHRCb3guY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHSW5saW5lVGV4dEJveC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE4MEU2Q0JBMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NWYWx1ZUxpc3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1ZhbHVlTGlzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MEU2Q0JCMEExOTg5Q0EwMDdGQjhD
NSAvKiBDU1NCb3JkZXJJbWFnZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDU1NCb3JkZXJJbWFnZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTgwRTZDQkMwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ByaW1pdGl2ZVZhbHVlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NQcmltaXRpdmVWYWx1ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzI4NSw2ICs3MzA1LDE2IEBACiAJCQkJRkFF
MDQxODkwOTc1OTY5NDAwMDU0MEJFIC8qIFJlbmRlclNWR0ltYWdlLmggKi8sCiAJCQkJNjU3NDNC
NTAwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuY3BwICovLAogCQkJCTY1NzQzQjUx
MDk3MDc2RjgwMDFFN0NFRiAvKiBSZW5kZXJTVkdUZXh0LmggKi8sCisJCQkJQTdFMUREQkMwQUFF
Q0REMTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCAqLywKKwkJCQlBN0UxRERCRDBB
QUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgKi8sCisJCQkJQTdFMURE
RjQwQUFGMDhBRjAwQ0FDRDFDIC8qIFNWR0lubGluZVRleHRCb3guaCAqLywKKwkJCQlBN0UxRERG
NTBBQUYwOEFGMDBDQUNEMUMgLyogU1ZHSW5saW5lVGV4dEJveC5jcHAgKi8sCisJCQkJQTc1RTk2
REUwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLywKKwkJCQlBNzVFOTZE
RjBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5jcHAgKi8sCisJCQkJQTdDNTE5
NDcwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNWR1RTcGFuLmggKi8sCisJCQkJQTdDNTE5NDgw
QUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNWR1RTcGFuLmNwcCAqLywKKwkJCQlBN0M1MUE0NDBB
Q0E3NDQ3MDA2RTJGQjkgLyogU1ZHSW5saW5lRmxvd0JveC5oICovLAorCQkJCUE3QzUxQTQ1MEFD
QTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCAqLywKIAkJCSk7CiAJCQlwYXRo
ID0ga2NhbnZhczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC04OTc3LDYgKzkwMDcs
OCBAQAogCQkJCTg1MDY1NkZFMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01NZWRpYUxpc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg1MDY1NzAwMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01TdHlsZVNoZWV0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTA2NTcwMjBBQUI0NzYzMDAyRDE1QzAgLyogRE9NU3R5
bGVTaGVldExpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3RTFEREJFMEFBRUNERDEwMENBQ0Qx
QyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBN0UxRERGNjBB
QUYwOEFGMDBDQUNEMUMgLyogU1ZHSW5saW5lVGV4dEJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTM0NzA2QUIwQUFDRDgwOTAwMkMxRDQzIC8qIFRleHREZWNvZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NUFGQTgyMjBBQUY1MjhBMDBFODQzMDUgLyogRE9NRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg1QzdGNDQ3MEFBRjc2REMwMDQwMTRERCAvKiBET01FdmVudFRhcmdldC5oIGluIEhl
YWRlcnMgKi8sCkBAIC05MTI1LDYgKzkxNTcsOSBAQAogCQkJCUIyMDExMTA4MEFCNzc0MDUwMERC
MEU2OCAvKiBKU1NWR0FFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTNCRjREQjBBQkI2
QjU1MDA4NjQ3QkIgLyogRE9NTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUzQkY0RUIwQUJC
NkU5NzAwODY0N0JCIC8qIERPTU5vZGVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNzVF
OTZFMDBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTdDNTE5NDkwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNWR1RTcGFuLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBN0M1MUE0NjBBQ0E3NDQ3MDA2RTJGQjkgLyogU1ZHSW5saW5lRmxvd0Jv
eC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVCQ0JDMTMwQUJCQTg3RDAwMzgxMTYwIC8qIERPTUhU
TUxEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUEyMUVDQ0QwQUJGMEZDNjAwMkI4MzRD
IC8qIENTU0N1cnNvckltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MUVFODBDMEFC
Q0EyOEYwMEE2QUEzMyAvKiBET01BYnN0cmFjdFZpZXcuaCBpbiBIZWFkZXJzICovLApAQCAtMTAy
NjQsNiArMTAyOTksOCBAQAogCQkJCTg1MDY1NzAxMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01TdHls
ZVNoZWV0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODUwNjU3MDMwQUFCNDc2MzAwMkQxNUMwIC8q
IERPTVN0eWxlU2hlZXRMaXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFFQkJCRDQwQUFDOUI4
NzAwMUZFOEUyIC8qIENTU0NoYXJzZXRSdWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3RTFE
REJGMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUE3RTFEREY3MEFBRjA4QUYwMENBQ0QxQyAvKiBTVkdJbmxpbmVUZXh0Qm94LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg1QUZBODIzMEFBRjUyOEEwMEU4NDMwNSAvKiBET01FdmVu
dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1QzdGNDkyMEFBRjc5REMwMDQwMTRERCAvKiBET01V
SUV2ZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVDN0Y1QzAwQUFGQjdDRDAwNDAxNEREIC8q
IERPTU11dGF0aW9uRXZlbnQubW0gaW4gU291cmNlcyAqLywKQEAgLTEwMzk5LDYgKzEwNDM2LDkg
QEAKIAkJCQlCMjIyRjY5QzBBQjc3MUI4MDAyMkVGQUQgLyogSlNTVkdFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUIyMDExMTA3MEFCNzc0MDUwMERCMEU2OCAvKiBKU1NWR0FFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1M0JGNERDMEFCQjZCNTUwMDg2NDdCQiAvKiBET01O
b2RlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQTc1RTk2RTEwQUMxMzY2RjAwRUUwQUY5IC8qIFNW
R1Jvb3RJbmxpbmVCb3guY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTdDNTE5NEEwQUNBNkFGMTAw
NkUyRkI5IC8qIFJlbmRlclNWR1RTcGFuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3QzUxQTQ3
MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg1QkNCQzE0MEFCQkE4N0QwMDM4MTE2MCAvKiBET01IVE1MRG9jdW1lbnQubW0gaW4gU291
cmNlcyAqLywKIAkJCQlBQTIxRUNDQTBBQkYwRkJBMDAyQjgzNEMgLyogQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTFFRTgwRDBBQkNBMjhGMDBBNkFBMzMgLyog
RE9NQWJzdHJhY3RWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBjc3Mvc3ZnLmNzcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBjc3Mvc3ZnLmNzcwkocmV2aXNpb24gMTY2OTMpCisrKyBjc3Mvc3ZnLmNzcwko
d29ya2luZyBjb3B5KQpAQCAtNDksMyArNDksNyBAQCBzdmcsIHN5bWJvbCwgbWFya2VyLCBwYXR0
ZXJuIHsKIHRleHQsIGZvcmVpZ25PYmplY3QgewogICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRh
bnQKIH0KKwordGV4dCwgdHNwYW4geworICAgd2hpdGUtc3BhY2U6IG5vd3JhcCAhaW1wb3J0YW50
Cit9CkluZGV4OiBkb20vVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL1RleHQuY3BwCShyZXZp
c2lvbiAxNjY5MykKKysrIGRvbS9UZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgog
I2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmVUZXh0Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTQ5LDYgKzE1MCwxMSBAQCBib29sIFRleHQ6
OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgCiAKIFJlbmRlck9iamVjdCAqVGV4dDo6Y3Jl
YXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpCiB7Cisj
aWZkZWYgU1ZHX1NVUFBPUlQKKyAgICBpZihwYXJlbnROb2RlKCktPmlzU1ZHRWxlbWVudCgpKQor
ICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHSW5saW5lVGV4dCh0aGlzLCBzdHIp
OworI2VuZGlmIC8vIFNWR19TVVBQT1JUCisgICAgCiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJl
bmRlclRleHQodGhpcywgc3RyKTsKIH0KIApJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShy
ZXZpc2lvbiAwKQorKysga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2
QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZmRlZiBTVkdfU1VQUE9SVAorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgi
CisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgorI2luY2x1ZGUgIlNWR0lubGluZVRleHRC
b3guaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIAorUmVuZGVyU1ZHSW5saW5lVGV4dDo6UmVuZGVyU1ZHSW5saW5lVGV4dChOb2RlICpu
LCBTdHJpbmdJbXBsICpzdHIpOlJlbmRlclRleHQobiwgc3RyKSB7fQorCitJbmxpbmVCb3gqIFJl
bmRlclNWR0lubGluZVRleHQ6OmNyZWF0ZUlubGluZUJveChib29sIG1ha2VQbGFjZUhvbGRlckJv
eCwgYm9vbCBpc1Jvb3RMaW5lQm94LCBib29sIGlzT25seVJ1bikKK3sKKyAgICBBU1NFUlQoIWlz
Um9vdExpbmVCb3gpOworICAgIElubGluZVRleHRCb3gqIHRleHRCb3ggPSBuZXcgKHJlbmRlckFy
ZW5hKCkpIFNWR0lubGluZVRleHRCb3godGhpcyk7CisgICAgCisgICAgaWYgKCFtX2ZpcnN0VGV4
dEJveCkKKyAgICAgICAgbV9maXJzdFRleHRCb3ggPSBtX2xhc3RUZXh0Qm94ID0gdGV4dEJveDsK
KyAgICBlbHNlIHsKKyAgICAgICAgbV9sYXN0VGV4dEJveC0+c2V0TmV4dExpbmVCb3godGV4dEJv
eCk7CisgICAgICAgIHRleHRCb3gtPnNldFByZXZpb3VzTGluZUJveChtX2xhc3RUZXh0Qm94KTsK
KyAgICAgICAgbV9sYXN0VGV4dEJveCA9IHRleHRCb3g7CisgICAgfQorICAgIHJldHVybiB0ZXh0
Qm94OworfQorCit2b2lkIFJlbmRlclNWR0lubGluZVRleHQ6OmFic29sdXRlUmVjdHMoVmVjdG9y
PEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCit7CisgICAgRmxvYXRSZWN0IGFic29s
dXRlUmVjdCA9IGFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChGbG9hdFJlY3QodHgsIHR5LCB3
aWR0aCgpLCBoZWlnaHQoKSkpOworICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KGFi
c29sdXRlUmVjdCkpOworfQorCit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVApJbmRleDoga2Nh
bnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJT
VkdJbmxpbmVUZXh0LmgJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1JlbmRlclNWR0lubGluZVRl
eHQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xp
dmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAor
ICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUmVuZGVy
U1ZHSW5saW5lVGV4dF9oCisjZGVmaW5lIFJlbmRlclNWR0lubGluZVRleHRfaAorCisjaWZkZWYg
U1ZHX1NVUFBPUlQKKworI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgUmVuZGVyU1ZHSW5saW5lVGV4dCA6IHB1YmxpYyBSZW5kZXJUZXh0IHsKK3B1
YmxpYzoKKyAgICBSZW5kZXJTVkdJbmxpbmVUZXh0KE5vZGUqLCBTdHJpbmdJbXBsKik7CisgICAg
dmlydHVhbCBjb25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNW
R0lubGluZVRleHQiOyB9CisgICAgdmlydHVhbCBJbmxpbmVCb3gqIGNyZWF0ZUlubGluZUJveChi
b29sIG1ha2VQbGFjZUhvbGRlckJveCwgYm9vbCBpc1Jvb3RMaW5lQm94LCBib29sIGlzT25seVJ1
biA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVj
dD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSk7Cit9OworfQorCisjZW5kaWYgLy8gU1ZHX1NVUFBP
UlQKKworI2VuZGlmIC8vICFSZW5kZXJTVkdJbmxpbmVUZXh0X2gKSW5kZXg6IGtjYW52YXMvUmVu
ZGVyU1ZHVFNwYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHVFNwYW4uY3Bw
CShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9SZW5kZXJTVkdUU3Bhbi5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBz
dHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgU1ZH
X1NVUFBPUlQKKyNpbmNsdWRlICJSZW5kZXJTVkdUU3Bhbi5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgorI2luY2x1ZGUg
IktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCisjaW5j
bHVkZSAiU1ZHSW5saW5lRmxvd0JveC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitSZW5kZXJTVkdUU3Bhbjo6UmVuZGVyU1ZHVFNw
YW4oTm9kZSAqbikgOiBSZW5kZXJJbmxpbmUobikge30KKyAgICAKK0lubGluZUJveCogUmVuZGVy
U1ZHVFNwYW46OmNyZWF0ZUlubGluZUJveChib29sIG1ha2VQbGFjZUhvbGRlckJveCwgYm9vbCBp
c1Jvb3RMaW5lQm94LCBib29sIGlzT25seVJ1bikKK3sKKyAgICBhc3NlcnQoISghaXNSb290TGlu
ZUJveCAmJiAoaXNSZXBsYWNlZCgpIHx8IG1ha2VQbGFjZUhvbGRlckJveCkpKTsKKyAgICAKKyAg
ICBJbmxpbmVGbG93Qm94KiBmbG93Qm94ID0gMDsKKyAgICBpZiAoaXNJbmxpbmVGbG93KCkpCisg
ICAgICAgIGZsb3dCb3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIFNWR0lubGluZUZsb3dCb3godGhp
cyk7CisgICAgZWxzZQorICAgICAgICBmbG93Qm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBTVkdS
b290SW5saW5lQm94KHRoaXMpOworICAgIAorICAgIGlmICghbV9maXJzdExpbmVCb3gpCisgICAg
ICAgIG1fZmlyc3RMaW5lQm94ID0gbV9sYXN0TGluZUJveCA9IGZsb3dCb3g7CisgICAgZWxzZSB7
CisgICAgICAgIG1fbGFzdExpbmVCb3gtPnNldE5leHRMaW5lQm94KGZsb3dCb3gpOworICAgICAg
ICBmbG93Qm94LT5zZXRQcmV2aW91c0xpbmVCb3gobV9sYXN0TGluZUJveCk7CisgICAgICAgIG1f
bGFzdExpbmVCb3ggPSBmbG93Qm94OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmxvd0JveDsK
K30KKwordm9pZCBSZW5kZXJTVkdUU3Bhbjo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4m
IHJlY3RzLCBpbnQgdHgsIGludCB0eSkKK3sKKyAgICBJbmxpbmVGbG93Qm94KiBpbml0RmxvdyA9
IGZpcnN0TGluZUJveCgpOworICAgIEZsb2F0UmVjdCBib3VuZHModHggKyBpbml0Rmxvdy0+eFBv
cygpLCB0eSArIGluaXRGbG93LT55UG9zKCksIHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICByZWN0
cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoYm91
bmRzKSkpOworfQorCisKK30KKworI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBrY2FudmFz
L1JlbmRlclNWR1RTcGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdUU3Bhbi5o
CShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9SZW5kZXJTVkdUU3Bhbi5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBw
cm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1
ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdUU3Bhbl9ICisjZGVmaW5l
IFJlbmRlclNWR1RTcGFuX0gKKworI2lmZGVmIFNWR19TVVBQT1JUCisjaW5jbHVkZSAiUmVuZGVy
SW5saW5lLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlbmRlclNWR1RTcGFuIDog
cHVibGljIFJlbmRlcklubGluZSB7CitwdWJsaWM6CisgICAgUmVuZGVyU1ZHVFNwYW4oTm9kZSop
OworICAgIHZpcnR1YWwgY29uc3QgY2hhciAqcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJS
ZW5kZXJTVkdUU3BhbiI7IH0KKyAgICB2aXJ0dWFsIElubGluZUJveCogY3JlYXRlSW5saW5lQm94
KGJvb2wgbWFrZVBsYWNlSG9sZGVyQm94LCBib29sIGlzUm9vdExpbmVCb3gsIGJvb2wgaXNPbmx5
UnVuID0gZmFsc2UpOworICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYsIGludCB0eCwgaW50IHR5KTsKK307Cit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAor
I2VuZGlmIC8vICFSZW5kZXJTVkdUU3Bhbl9ICkluZGV4OiBrY2FudmFzL1JlbmRlclNWR1RleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDE2
NjkzKQorKysga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw2
ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
ICAqICAgICAgICAgICAgICAgMjAwNiBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3Jn
PgorICogICAgICAgICAgICAgICAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRl
cmJ1cnkuYWMubno+LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiwxMiArMjcsMTEgQEAKICNp
bmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJLQ2FudmFzQ2xpcHBlci5oIgotI2luY2x1ZGUgIktDYW52YXNNYXNrZXIuaCIK
ICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5n
RGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgogI2luY2x1ZGUgIlNWR1RleHRF
bGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHUm9vdElubGluZUJveC5oIgogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsMjMgKzQxLDYgQEAgUmVuZGVy
U1ZHVGV4dDo6UmVuZGVyU1ZHVGV4dChTVkdUZXh0RWxlbQogewogfQogCi1BZmZpbmVUcmFuc2Zv
cm0gUmVuZGVyU1ZHVGV4dDo6dHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5lKCkKLXsKLSAgICBpbnQg
b2Zmc2V0ID0gYmFzZWxpbmVQb3NpdGlvbih0cnVlLCB0cnVlKTsKLSAgICByZXR1cm4gQWZmaW5l
VHJhbnNmb3JtKCkudHJhbnNsYXRlKDAsIC1vZmZzZXQpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0g
UmVuZGVyU1ZHVGV4dDo6dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkKLXsKLSAgICBTVkdUZXh0
RWxlbWVudCAqdGV4dCA9IHN0YXRpY19jYXN0PFNWR1RleHRFbGVtZW50Kj4oZWxlbWVudCgpKTsK
LQotICAgIFNWR0xlbmd0aCogeE9mZnNldCA9IHRleHQtPngoKS0+Z2V0Rmlyc3QoKS5nZXQoKTsK
LSAgICBTVkdMZW5ndGgqIHlPZmZzZXQgPSB0ZXh0LT55KCktPmdldEZpcnN0KCkuZ2V0KCk7Ci0K
LSAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKHhPZmZzZXQgPyB4T2Zmc2V0
LT52YWx1ZSgpIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlP
ZmZzZXQgPyB5T2Zmc2V0LT52YWx1ZSgpIDogMCk7Ci19Ci0KIHZvaWQgUmVuZGVyU1ZHVGV4dDo6
cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSkKIHsK
ICAgICBpZiAocGFpbnRJbmZvLnAtPnBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTc1LDYwICs1OCwx
MyBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgICAgIHNo
b3VsZFBvcENvbnRleHQgPSB0cnVlOwogICAgIH0KICAgICAKLSAgICBjb250ZXh0LT5jb25jYXRD
VE0obG9jYWxUcmFuc2Zvcm0oKSk7Ci0gICAgY29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5z
Zm9ybSgpLnRyYW5zbGF0ZShwYXJlbnRYLCBwYXJlbnRZKSk7Ci0gICAgY29udGV4dC0+Y29uY2F0
Q1RNKHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpKTsKLSAgICBjb250ZXh0LT5jb25jYXRDVE0o
dHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5lKCkpOwotICAgIAotICAgIEZsb2F0UmVjdCBib3VuZGlu
Z0JveCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSk7Ci0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUq
IHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgICAgIAotICAgIGlmIChL
Q2FudmFzQ2xpcHBlciogY2xpcHBlciA9IGdldENsaXBwZXJCeUlkKGRvY3VtZW50KCksIHN2Z1N0
eWxlLT5jbGlwUGF0aCgpLnN1YnN0cmluZygxKSkpCi0gICAgICAgIGNsaXBwZXItPmFwcGx5Q2xp
cChib3VuZGluZ0JveCk7Ci0KLSAgICBpZiAoS0NhbnZhc01hc2tlciogbWFza2VyID0gZ2V0TWFz
a2VyQnlJZChkb2N1bWVudCgpLCBzdmdTdHlsZS0+bWFza0VsZW1lbnQoKS5zdWJzdHJpbmcoMSkp
KQotICAgICAgICBtYXNrZXItPmFwcGx5TWFzayhib3VuZGluZ0JveCk7Ci0KLSAgICBLQ2FudmFz
RmlsdGVyKiBmaWx0ZXIgPSBnZXRGaWx0ZXJCeUlkKGRvY3VtZW50KCksIHN2Z1N0eWxlLT5maWx0
ZXIoKS5zdWJzdHJpbmcoMSkpOwotICAgIGlmIChmaWx0ZXIpCi0gICAgICAgIGZpbHRlci0+cHJl
cGFyZUZpbHRlcihib3VuZGluZ0JveCk7Ci0gICAgICAgIAotICAgIE93blB0cjxHcmFwaGljc0Nv
bnRleHQ+IGMoZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpLT5jcmVhdGVHcmFwaGljc0NvbnRleHQo
KSk7CiAgICAgUGFpbnRJbmZvIHBpID0gcGFpbnRJbmZvOworICAgIE93blB0cjxHcmFwaGljc0Nv
bnRleHQ+IGMoZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpLT5jcmVhdGVHcmFwaGljc0NvbnRleHQo
KSk7CiAgICAgcGkucCA9IGMuZ2V0KCk7Ci0gICAgcGkuciA9ICh0cmFuc2xhdGlvblRvcFRvQmFz
ZWxpbmUoKSAqIHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpICogYWJzb2x1dGVUcmFuc2Zvcm0o
KSkuaW52ZXJ0KCkubWFwUmVjdChwYWludEluZm8ucik7Ci0KLSAgICBmbG9hdCBvcGFjaXR5ID0g
c3R5bGUoKS0+b3BhY2l0eSgpOwotICAgIGlmIChvcGFjaXR5IDwgMS4wZikKLSAgICAgICAgYy0+
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLQotICAgIEtSZW5kZXJpbmdQYWludFNl
cnZlciAqZmlsbFBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRTZXJ2
ZXIoc3R5bGUoKSwgdGhpcyk7Ci0gICAgaWYgKGZpbGxQYWludFNlcnZlcikgewotICAgICAgICBm
aWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dCh0cnVlKTsKLSAgICAgICAgLy8gZmlsbFBh
aW50U2VydmVyLT5zZXRBY3RpdmVDbGllbnQodGhpcyk7Ci0gICAgICAgIGlmIChmaWxsUGFpbnRT
ZXJ2ZXItPnNldHVwKGNvbnRleHQsIHRoaXMsIEFQUExZX1RPX0ZJTEwpKSB7Ci0gICAgICAgICAg
ICBSZW5kZXJCbG9jazo6cGFpbnQocGksIDAsIDApOwotICAgICAgICAgICAgZmlsbFBhaW50U2Vy
dmVyLT50ZWFyZG93bihjb250ZXh0LCB0aGlzLCBBUFBMWV9UT19GSUxMKTsKLSAgICAgICAgfQot
ICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dChmYWxzZSk7Ci0gICAgfQor
ICAgIHBpLnIgPSAoYWJzb2x1dGVUcmFuc2Zvcm0oKSkuaW52ZXJ0KCkubWFwUmVjdChwYWludElu
Zm8ucik7CisgICAgY29udGV4dC0+Y29uY2F0Q1RNKGxvY2FsVHJhbnNmb3JtKCkpOwogICAgIAot
ICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRl
ckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKHN0eWxlKCksIHRoaXMpOwotICAgIGlmIChzdHJv
a2VQYWludFNlcnZlcikgewotICAgICAgICBzdHJva2VQYWludFNlcnZlci0+c2V0UGFpbnRpbmdU
ZXh0KHRydWUpOwotICAgICAgICAvLyBzdHJva2VQYWludFNlcnZlci0+c2V0QWN0aXZlQ2xpZW50
KHRoaXMpOwotICAgICAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldHVwKGNvbnRleHQsIHRo
aXMsIEFQUExZX1RPX1NUUk9LRSkpIHsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrOjpwYWludChw
aSwgMCwgMCk7Ci0gICAgICAgICAgICBzdHJva2VQYWludFNlcnZlci0+dGVhcmRvd24oY29udGV4
dCwgdGhpcywgQVBQTFlfVE9fU1RST0tFKTsKLSAgICAgICAgfQotICAgICAgICBzdHJva2VQYWlu
dFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoZmlsdGVy
KQotICAgICAgICBmaWx0ZXItPmFwcGx5RmlsdGVyKGJvdW5kaW5nQm94KTsKLQotICAgIGlmIChv
cGFjaXR5IDwgMS4wZikKLSAgICAgICAgYy0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBS
ZW5kZXJCbG9jazo6cGFpbnQocGksIHBhcmVudFgsIHBhcmVudFkpOwogCiAgICAgLy8gcmVzdG9y
ZSBkcmF3aW5nIHN0YXRlCiAgICAgaWYgKCFzaG91bGRQb3BDb250ZXh0KQpAQCAtMTQxLDEwICs3
NywxMSBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAKIHZvaWQg
UmVuZGVyU1ZHVGV4dDo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVjdCYgciwgYm9v
bCBmKQogewotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSB0cmFuc2xhdGlvblRvcFRv
QmFzZWxpbmUoKSAqIHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpICogYWJzb2x1dGVUcmFuc2Zv
cm0oKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gYWJzb2x1dGVUcmFuc2Zvcm0o
KTsKICAgICByID0gdHJhbnNmb3JtLm1hcFJlY3Qocik7CiAgICAgCiAgICAgUmVuZGVyQ29udGFp
bmVyOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChyLCBmKTsKKyAgICByID0gdHJhbnNmb3Jt
LmludmVydCgpLm1hcFJlY3Qocik7CiB9CiAKIGJvb2wgUmVuZGVyU1ZHVGV4dDo6cmVxdWlyZXNM
YXllcigpCkBAIC0xNjEsOSArOTgsMTIgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQog
ICAgIGJvb2wgY2hlY2tGb3JSZXBhaW50ID0gY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCk7
CiAgICAgaWYgKGNoZWNrRm9yUmVwYWludCkKICAgICAgICAgb2xkQm91bmRzID0gbV9hYnNvbHV0
ZUJvdW5kczsKLQorICAgIFNWR1RleHRFbGVtZW50ICp0ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4
dEVsZW1lbnQgKj4oZWxlbWVudCgpKTsKKyAgICBpbnQgeE9mZnNldCA9IHRleHQtPngoKS0+Z2V0
Rmlyc3QoKSA/IHRleHQtPngoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSA6IDA7CisgICAgaW50IHlP
ZmZzZXQgPSB0ZXh0LT55KCktPmdldEZpcnN0KCkgPyB0ZXh0LT55KCktPmdldEZpcnN0KCktPnZh
bHVlKCkgOiAwOworICAgIHRoaXMtPnNldFBvcyh4T2Zmc2V0LCB5T2Zmc2V0KTsKICAgICBSZW5k
ZXJCbG9jazo6bGF5b3V0KCk7Ci0KKyAgICAKICAgICBtX2Fic29sdXRlQm91bmRzID0gZ2V0QWJz
b2x1dGVSZXBhaW50UmVjdCgpOwogCiAgICAgYm9vbCByZXBhaW50ZWQgPSBmYWxzZTsKQEAgLTE3
MywxMSArMTEzLDI1IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKICAgICBzZXROZWVk
c0xheW91dChmYWxzZSk7CiB9CiAKK0lubGluZUJveCogUmVuZGVyU1ZHVGV4dDo6Y3JlYXRlSW5s
aW5lQm94KGJvb2wgbWFrZVBsYWNlSG9sZGVyQm94LCBib29sIGlzUm9vdExpbmVCb3gsIGJvb2wg
aXNPbmx5UnVuKQoreworICAgIGFzc2VydCghaXNJbmxpbmVGbG93KCkpOworICAgIElubGluZUZs
b3dCb3gqIGZsb3dCb3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIFNWR1Jvb3RJbmxpbmVCb3godGhp
cyk7CisgICAgCisgICAgaWYgKCFtX2ZpcnN0TGluZUJveCkKKyAgICAgICAgbV9maXJzdExpbmVC
b3ggPSBtX2xhc3RMaW5lQm94ID0gZmxvd0JveDsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9sYXN0
TGluZUJveC0+c2V0TmV4dExpbmVCb3goZmxvd0JveCk7CisgICAgICAgIGZsb3dCb3gtPnNldFBy
ZXZpb3VzTGluZUJveChtX2xhc3RMaW5lQm94KTsKKyAgICAgICAgbV9sYXN0TGluZUJveCA9IGZs
b3dCb3g7CisgICAgfQorICAgIAorICAgIHJldHVybiBmbG93Qm94OworfQorCiBib29sIFJlbmRl
clNWR1RleHQ6Om5vZGVBdFBvaW50KE5vZGVJbmZvJiBpbmZvLCBpbnQgX3gsIGludCBfeSwgaW50
IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIEFmZmlu
ZVRyYW5zZm9ybSB0b3RhbFRyYW5zZm9ybSA9IHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpOwot
ICAgIHRvdGFsVHJhbnNmb3JtICo9IHRyYW5zbGF0aW9uVG9wVG9CYXNlbGluZSgpOwotICAgIHRv
dGFsVHJhbnNmb3JtICo9IGFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgQWZmaW5lVHJhbnNmb3Jt
IHRvdGFsVHJhbnNmb3JtID0gYWJzb2x1dGVUcmFuc2Zvcm0oKTsKICAgICBkb3VibGUgbG9jYWxY
LCBsb2NhbFk7CiAgICAgdG90YWxUcmFuc2Zvcm0uaW52ZXJ0KCkubWFwKF94LCBfeSwgJmxvY2Fs
WCwgJmxvY2FsWSk7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChpbmZvLCAo
aW50KWxvY2FsWCwgKGludClsb2NhbFksIF90eCwgX3R5LCBoaXRUZXN0QWN0aW9uKTsKQEAgLTE4
NSwxMSArMTM5LDExIEBAIGJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQoTm9kZUluZm8K
IAogdm9pZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVj
dHMsIGludCB0eCwgaW50IHR5KQogewotICAgIEFmZmluZVRyYW5zZm9ybSBtYXQgPSB0cmFuc2xh
dGlvbkZvckF0dHJpYnV0ZXMoKTsKLSAgICBtYXQgKj0gdHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5l
KCk7Ci0gICAgbWF0ICo9IGFic29sdXRlVHJhbnNmb3JtKCk7Ci0KLSAgICByZWN0cy5hcHBlbmQo
ZW5jbG9zaW5nSW50UmVjdChtYXQubWFwUmVjdChGbG9hdFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVp
Z2h0KCkpKSkpOworICAgIGZvciAoSW5saW5lQm94ICpib3ggPSBtX2ZpcnN0TGluZUJveDsgYm94
OyBib3ggPSBib3gtPm1fbmV4dCkgeworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYm94VHJhbnNm
b3JtID0gYm94LT5vYmplY3QoKS0+YWJzb2x1dGVUcmFuc2Zvcm0oKTsKKyAgICAgICAgRmxvYXRS
ZWN0IGJveFJlY3QgPSBGbG9hdFJlY3QoeFBvcygpICsgYm94LT54UG9zKCksIHlQb3MoKSArIGJv
eC0+eVBvcygpLCBib3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpOworICAgICAgICByZWN0cy5h
cHBlbmQoZW5jbG9zaW5nSW50UmVjdChib3hUcmFuc2Zvcm0ubWFwUmVjdChib3hSZWN0KSkpOwor
ICAgIH0KIH0KIAogfQpJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmgJKHJldmlzaW9uIDE2NjkzKQorKysga2NhbnZhcy9S
ZW5kZXJTVkdUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1
ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDMsMTYg
KzQ0LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TG9jYWxUcmFuc2Zvcm0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07
IH0KICAgICAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoTm9kZUluZm8mLCBpbnQgeCwg
aW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKLQogICAgIHZpcnR1YWwgdm9p
ZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKLQogICAg
IHZpcnR1YWwgdm9pZCBjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByLCBib29s
IGYpOwogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCk7CiAgICAgdmlydHVhbCB2b2lk
IGxheW91dCgpOwogICAgIAorICAgIHZpcnR1YWwgSW5saW5lQm94KiBjcmVhdGVJbmxpbmVCb3go
Ym9vbCBtYWtlUGxhY2VIb2xkZXJCb3gsIGJvb2wgaXNSb290TGluZUJveCwgYm9vbCBpc09ubHlS
dW4gPSBmYWxzZSk7CiAgcHJpdmF0ZToKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNsYXRpb25U
b3BUb0Jhc2VsaW5lKCk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0aW9uRm9yQXR0cmli
dXRlcygpOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKICAgICBJbnRSZWN0IG1f
YWJzb2x1dGVCb3VuZHM7CiB9OwpJbmRleDoga2NhbnZhcy9TVkdJbmxpbmVGbG93Qm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrY2FudmFzL1NWR0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAwKQor
Kysga2NhbnZhcy9TVkdJbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAq
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVy
YnVyeS5hYy5uej4uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkg
VGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CisgKgorICovCisKKworI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTVkdJbmxpbmVGbG93Qm94LmgiCisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVApJ
bmRleDoga2NhbnZhcy9TVkdJbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9T
VkdJbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1NWR0lubGluZUZsb3dC
b3guaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xp
dmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAor
ICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgU1ZHSW5s
aW5lRmxvd0JveF9ICisjZGVmaW5lIFNWR0lubGluZUZsb3dCb3hfSAorCisjaWZkZWYgU1ZHX1NV
UFBPUlQKKworI2luY2x1ZGUgIklubGluZUZsb3dCb3guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUK
K3sKKyAgICAKK2NsYXNzIFNWR0lubGluZUZsb3dCb3ggOiBwdWJsaWMgSW5saW5lRmxvd0JveCB7
CitwdWJsaWM6CisgICAgU1ZHSW5saW5lRmxvd0JveChSZW5kZXJPYmplY3QgKm9iaikgOiBJbmxp
bmVGbG93Qm94KG9iaikKKyAgICB7CisgICAgICAgIG1faXNTVkdGbG93ID0gdHJ1ZTsKKyAgICB9
Cit9OworCit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorCisjZW5kaWYgLy8gIVNWR0lubGlu
ZUZsb3dCb3hfSApJbmRleDoga2NhbnZhcy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrY2FudmFzL1NWR0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAwKQorKysga2NhbnZh
cy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTQgQEAKKy8q
CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiAgICAgICAgICAgICAgIDIw
MDYgQWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZAa2RlLm9yZz4KKyAqICAgICAgICAgICAgICAg
MjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0
ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmZGVm
IFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlICJL
UmVuZGVyaW5nRGV2aWNlLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgorI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIKKyNpbmNs
dWRlICJLQ2FudmFzQ2xpcHBlci5oIgorI2luY2x1ZGUgIktDYW52YXNNYXNrZXIuaCIKKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTVkdJbmxp
bmVUZXh0Qm94OjpwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQg
dHgsIGludCB0eSl7CisgICAgaWYgKHBhaW50SW5mby5wLT5wYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBLUmVuZGVyaW5nRGV2aWNlKiBkZXZpY2UgPSByZW5k
ZXJpbmdEZXZpY2UoKTsKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCA9IGRl
dmljZS0+Y3VycmVudENvbnRleHQoKTsKKyAgICBib29sIHNob3VsZFBvcENvbnRleHQgPSBmYWxz
ZTsKKyAgICBpZiAoY29udGV4dCkKKyAgICAgICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgLy8gTmVlZCB0byBzZXQgdXAgS0NhbnZhcyByZW5kZXJpbmcgaWYgaXQg
aGFzbid0IGFscmVhZHkgYmVlbiBkb25lLgorICAgICAgICBjb250ZXh0ID0gcGFpbnRJbmZvLnAt
PmNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRleHQoKTsKKyAgICAgICAgZGV2aWNlLT5wdXNoQ29u
dGV4dChjb250ZXh0KTsKKyAgICAgICAgc2hvdWxkUG9wQ29udGV4dCA9IHRydWU7CisgICAgfQor
ICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCh0eCArIG1feCwgdHkgKyBtX3ksIHdpZHRoKCksIGhl
aWdodCgpKTsKKyAgICBib3VuZGluZ0JveD1vYmplY3QoKS0+YWJzb2x1dGVUcmFuc2Zvcm0oKS5t
YXBSZWN0KGJvdW5kaW5nQm94KTsKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSAqc3ZnU3R5bGUg
PSBvYmplY3QoKS0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICAKKyAgICBpZiAoS0NhbnZhc0Ns
aXBwZXIqIGNsaXBwZXIgPSBnZXRDbGlwcGVyQnlJZChvYmplY3QoKS0+ZG9jdW1lbnQoKSwgc3Zn
U3R5bGUtPmNsaXBQYXRoKCkuc3Vic3RyaW5nKDEpKSkKKyAgICAgICAgY2xpcHBlci0+YXBwbHlD
bGlwKGJvdW5kaW5nQm94KTsKKyAgICAKKyAgICBpZiAoS0NhbnZhc01hc2tlciogbWFza2VyID0g
Z2V0TWFza2VyQnlJZChvYmplY3QoKS0+ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPm1hc2tFbGVtZW50
KCkuc3Vic3RyaW5nKDEpKSkKKyAgICAgICAgbWFza2VyLT5hcHBseU1hc2soYm91bmRpbmdCb3gp
OworICAgIAorICAgIEtDYW52YXNGaWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5SWQob2JqZWN0
KCktPmRvY3VtZW50KCksIHN2Z1N0eWxlLT5maWx0ZXIoKS5zdWJzdHJpbmcoMSkpOworICAgIGlm
IChmaWx0ZXIpCisgICAgICAgIGZpbHRlci0+cHJlcGFyZUZpbHRlcihib3VuZGluZ0JveCk7Cisg
ICAgCisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYyhkZXZpY2UtPmN1cnJlbnRDb250ZXh0
KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKKyAgICAKKyAgICBmbG9hdCBvcGFjaXR5ID0g
b2JqZWN0KCktPnN0eWxlKCktPm9wYWNpdHkoKTsKKyAgICBpZiAob3BhY2l0eSA8IDEuMGYpCisg
ICAgICAgIGMtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CisgICAgCisgICAgS1Jl
bmRlcmluZ1BhaW50U2VydmVyICpmaWxsUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6
OmZpbGxQYWludFNlcnZlcihvYmplY3QoKS0+c3R5bGUoKSwgb2JqZWN0KCkpOworICAgIGlmIChm
aWxsUGFpbnRTZXJ2ZXIpIHsKKyAgICAgICAgZmlsbFBhaW50U2VydmVyLT5zZXRQYWludGluZ1Rl
eHQodHJ1ZSk7CisgICAgICAgIC8vIGZpbGxQYWludFNlcnZlci0+c2V0QWN0aXZlQ2xpZW50KHRo
aXMpOworICAgICAgICBpZiAoZmlsbFBhaW50U2VydmVyLT5zZXR1cChjb250ZXh0LCBvYmplY3Qo
KSwgQVBQTFlfVE9fRklMTCkpIHsKKyAgICAgICAgICAgIElubGluZVRleHRCb3g6OnBhaW50KHBh
aW50SW5mbywgdHgsIHR5KTsKKyAgICAgICAgICAgIGZpbGxQYWludFNlcnZlci0+dGVhcmRvd24o
Y29udGV4dCwgb2JqZWN0KCksIEFQUExZX1RPX0ZJTEwpOworICAgICAgICB9CisgICAgICAgIGZp
bGxQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KGZhbHNlKTsKKyAgICB9CisgICAgCisgICAg
S1JlbmRlcmluZ1BhaW50U2VydmVyICpzdHJva2VQYWludFNlcnZlciA9IEtTVkdQYWludGVyRmFj
dG9yeTo6c3Ryb2tlUGFpbnRTZXJ2ZXIob2JqZWN0KCktPnN0eWxlKCksIG9iamVjdCgpKTsKKyAg
ICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKKyAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPnNl
dFBhaW50aW5nVGV4dCh0cnVlKTsKKyAgICAgICAgLy8gc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldEFj
dGl2ZUNsaWVudCh0aGlzKTsKKyAgICAgICAgaWYgKHN0cm9rZVBhaW50U2VydmVyLT5zZXR1cChj
b250ZXh0LCBvYmplY3QoKSwgQVBQTFlfVE9fU1RST0tFKSkgeworICAgICAgICAgICAgSW5saW5l
VGV4dEJveDo6cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgICAgICAgICAgc3Ryb2tlUGFp
bnRTZXJ2ZXItPnRlYXJkb3duKGNvbnRleHQsIG9iamVjdCgpLCBBUFBMWV9UT19TVFJPS0UpOwor
ICAgICAgICB9CisgICAgICAgIHN0cm9rZVBhaW50U2VydmVyLT5zZXRQYWludGluZ1RleHQoZmFs
c2UpOworICAgIH0KKyAgICAKKyAgICBpZiAoZmlsdGVyKSAKKyAgICAgICAgZmlsdGVyLT5hcHBs
eUZpbHRlcihib3VuZGluZ0JveCk7CisgICAgCisgICAgaWYgKG9wYWNpdHkgPCAxLjBmKQorICAg
ICAgICBjLT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIAorICAgIC8vIHJlc3RvcmUgZHJh
d2luZyBzdGF0ZQorICAgIGlmICghc2hvdWxkUG9wQ29udGV4dCkKKyAgICAgICAgcGFpbnRJbmZv
LnAtPnJlc3RvcmUoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZGV2aWNlLT5wb3BDb250ZXh0KCk7
CisgICAgICAgIGRlbGV0ZSBjb250ZXh0OworICAgIH0KK30KKyAgICAKK30KKworI2VuZGlmIC8v
IFNWR19TVVBQT1JUCkluZGV4OiBrY2FudmFzL1NWR0lubGluZVRleHRCb3guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrY2FudmFzL1NWR0lubGluZVRleHRCb3guaAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMv
U1ZHSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACisvKgorICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBTVkdJbmxpbmVUZXh0Qm94X0gKKyNkZWZpbmUgU1ZHSW5saW5lVGV4dEJveF9ICisK
KyNpZmRlZiBTVkdfU1VQUE9SVAorCisjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR0lubGluZVRleHRCb3ggOiBwdWJsaWMgSW5saW5l
VGV4dEJveCB7CitwdWJsaWM6CisgICAgU1ZHSW5saW5lVGV4dEJveChSZW5kZXJPYmplY3QgKm9i
aikgOiBJbmxpbmVUZXh0Qm94KG9iaikge30KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIGksIGludCB0eCwgaW50IHR5KTsKK307CisKK30KKworI2VuZGlm
IC8vIFNWR19TVVBQT1JUCisKKyNlbmRpZiAvLyAhU1ZHSW5saW5lVGV4dEJveF9ICkluZGV4OiBr
Y2FudmFzL1NWR1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvU1ZHUm9v
dElubGluZUJveC5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1NWR1Jvb3RJbmxpbmVCb3gu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2
ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisg
KiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworCisjaWZkZWYgU1ZHX1NV
UFBPUlQKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3gu
aCIKKworI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBrY2FudmFzL1NWR1Jvb3RJbmxpbmVC
b3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1NWR1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24g
MCkKKysrIGtjYW52YXMvU1ZHUm9vdElubGluZUJveC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0Lgor
ICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50
ZXJidXJ5LmFjLm56Pi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KKyAqCisgKi8KKworI2lmbmRlZiBTVkdSb290SW5saW5lQm94X0gKKyNkZWZpbmUgU1ZHUm9v
dElubGluZUJveF9ICisKKyNpZmRlZiBTVkdfU1VQUE9SVAorCisjaW5jbHVkZSAiUm9vdElubGlu
ZUJveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZQoreworICAgIAorY2xhc3MgU1ZHUm9vdElubGlu
ZUJveCA6IHB1YmxpYyBSb290SW5saW5lQm94IHsKK3B1YmxpYzoKKyAgICBTVkdSb290SW5saW5l
Qm94KFJlbmRlck9iamVjdCAqb2JqKSA6IFJvb3RJbmxpbmVCb3gob2JqKQorICAgIHsKKyAgICAg
ICAgbV9pc1NWR0Zsb3cgPSB0cnVlOworICAgIH0KK307CisKK30KKworI2VuZGlmIC8vIFNWR19T
VVBQT1JUCisKKyNlbmRpZiAvLyAhUm9vdElubGluZUJveF9ICkluZGV4OiBrc3ZnMi9zdmcvU1ZH
VFNwYW5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVFNwYW5FbGVtZW50
LmNwcAkocmV2aXNpb24gMTY2OTMpCisrKyBrc3ZnMi9zdmcvU1ZHVFNwYW5FbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5j
bHVkZSAiU1ZHVFNwYW5FbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRl
ICJSZW5kZXJJbmxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdUU3Bhbi5oIgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDcsNyArNDcsNyBAQCBib29sIFNWR1RTcGFuRWxlbWVu
dDo6Y2hpbGRTaG91bGRDcmVhdGVSCiAKIFJlbmRlck9iamVjdCAqU1ZHVFNwYW5FbGVtZW50Ojpj
cmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICopCiB7Ci0gICAg
cmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlcklubGluZSh0aGlzKTsKKyAgICByZXR1cm4gbmV3IChh
cmVuYSkgUmVuZGVyU1ZHVFNwYW4odGhpcyk7CiB9CiAKIC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6
IHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDE2NjkzKQorKysgcmVuZGVyaW5nL0lubGluZUZsb3dC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUsMTMgKzMwNSw0OCBAQCBpbnQgSW5saW5lRmxv
d0JveDo6cGxhY2VCb3hlc0hvcml6b250YWxsCiAgICAgcmV0dXJuIHg7CiB9CiAKK3ZvaWQgSW5s
aW5lRmxvd0JveDo6cGxhY2VCb3hlc1ZlcnRpY2FsbHlXaXRoQWJzQmFzZWxpbmUoaW50JiBoZWln
aHRPZkJsb2NrLCBpbnQgJm1pbl95LCBpbnQgJm1heF95KQoreworICAgIGZvciAoSW5saW5lQm94
KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgpKSB7
CisgICAgICAgIGlmIChjdXJyLT5pc0lubGluZUZsb3dCb3goKSkKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PElubGluZUZsb3dCb3gqPihjdXJyKS0+cGxhY2VCb3hlc1ZlcnRpY2FsbHlXaXRoQWJz
QmFzZWxpbmUoaGVpZ2h0T2ZCbG9jaywgbWluX3ksIG1heF95KTsKKworICAgICAgICBjb25zdCBG
b250JiBmb250ID0gY3Vyci0+b2JqZWN0KCktPmZvbnQodHJ1ZSk7CisgICAgICAgIGludCBhc2Nl
bnQgPSBmb250LmFzY2VudCgpOworICAgICAgICBpbnQgcG9zaXRpb24gPSBoZWlnaHRPZkJsb2Nr
IC0gYXNjZW50OworICAgICAgICBpbnQgaGVpZ2h0ID0gYXNjZW50ICsgZm9udC5kZXNjZW50KCk7
CisgICAgICAgIGN1cnItPnNldEJhc2VsaW5lKGFzY2VudCk7CisgICAgICAgIGN1cnItPnNldFlQ
b3MocG9zaXRpb24pOworICAgICAgICBjdXJyLT5zZXRIZWlnaHQoaGVpZ2h0KTsKKworICAgICAg
ICBpZiAocG9zaXRpb24gPCBtaW5feSkgCisgICAgICAgICAgICBtaW5feSA9IHBvc2l0aW9uOwor
ICAgICAgICBpZiAocG9zaXRpb24gKyBoZWlnaHQgPiBtYXhfeSkgCisgICAgICAgICAgICBtYXhf
eSA9IHBvc2l0aW9uICsgaGVpZ2h0OworICAgIH0KKyAgICBpZiAoaXNSb290SW5saW5lQm94KCkp
IHsKKyAgICAgICAgc2V0WVBvcyhtaW5feSk7CisgICAgICAgIHNldEhlaWdodChtYXhfeSAtIG1p
bl95KTsKKyAgICAgICAgc2V0QmFzZWxpbmUoaGVpZ2h0T2ZCbG9jayAtIG1pbl95KTsKKyAgICAg
ICAgaGVpZ2h0T2ZCbG9jayArPSBtYXhfeSAtIG1pbl95OworICAgIH0KK30KKwogdm9pZCBJbmxp
bmVGbG93Qm94Ojp2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQmIGhlaWdodE9mQmxvY2spCiB7CiAg
ICAgaW50IG1heFBvc2l0aW9uVG9wID0gMDsKICAgICBpbnQgbWF4UG9zaXRpb25Cb3R0b20gPSAw
OwogICAgIGludCBtYXhBc2NlbnQgPSAwOwogICAgIGludCBtYXhEZXNjZW50ID0gMDsKLQorICAg
IGlmIChtX2lzU1ZHRmxvdykgeworICAgICAgICAvL0Fic29sdXRlIHBvc2l0aW9ucyBpbiBTVkcg
ZGljdGF0ZSBwb3NpdGlvbiBvZiBiYXNlbGluZQorICAgICAgICAvL3NvIHdlIGRyb3AgdG8gYSBz
aW1wbGVyIGxheW91dCBmdW5jdGlvbgorICAgICAgICBpbnQgdG9wPWhlaWdodE9mQmxvY2ssIGJv
dHRvbT1oZWlnaHRPZkJsb2NrOworICAgICAgICBwbGFjZUJveGVzVmVydGljYWxseVdpdGhBYnNC
YXNlbGluZShoZWlnaHRPZkJsb2NrLCB0b3AsIGJvdHRvbSk7CisgICAgICAgIHNldFZlcnRpY2Fs
T3ZlcmZsb3dQb3NpdGlvbnModG9wLCBib3R0b20pOworICAgICAgICBzZXRWZXJ0aWNhbFNlbGVj
dGlvblBvc2l0aW9ucyh0b3AsIGJvdHRvbSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAg
Ly8gRmlndXJlIG91dCBpZiB3ZSdyZSBpbiBzdHJpY3QgbW9kZS4gIE5vdGUgdGhhdCB3ZSBjYW4n
dCBzaW1wbHkgdXNlICFzdHlsZSgpLT5odG1sSGFja3MoKSwKICAgICAvLyBiZWNhdXNlIHRoYXQg
d291bGQgbWF0Y2ggYWxtb3N0IHN0cmljdCBtb2RlIGFzIHdlbGwuCiAgICAgUmVuZGVyT2JqZWN0
KiBjdXJyID0gb2JqZWN0KCk7CkluZGV4OiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDE2NjkzKQorKysg
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTQgKzMxLDEw
IEBAIGNsYXNzIElubGluZUZsb3dCb3ggOiBwdWJsaWMgSW5saW5lUnVuQm8KIHsKIHB1YmxpYzoK
ICAgICBJbmxpbmVGbG93Qm94KFJlbmRlck9iamVjdCogb2JqKQotICAgIDpJbmxpbmVSdW5Cb3go
b2JqKQotICAgIHsKLSAgICAgICAgbV9maXJzdENoaWxkID0gMDsKLSAgICAgICAgbV9sYXN0Q2hp
bGQgPSAwOwotICAgICAgICBtX2luY2x1ZGVMZWZ0RWRnZSA9IG1faW5jbHVkZVJpZ2h0RWRnZSA9
IGZhbHNlOwotICAgICAgICBtX2hhc1RleHRDaGlsZHJlbiA9IGZhbHNlOwotICAgICAgICBtX21h
eEhvcml6b250YWxTaGFkb3cgPSAwOwotICAgIH0KKyAgICA6SW5saW5lUnVuQm94KG9iaiksIG1f
Zmlyc3RDaGlsZCgwKSwgbV9sYXN0Q2hpbGQoMCksIAorICAgICBtX21heEhvcml6b250YWxTaGFk
b3coMCksIG1faW5jbHVkZUxlZnRFZGdlKGZhbHNlKSwKKyAgICAgbV9pbmNsdWRlUmlnaHRFZGdl
KGZhbHNlKSwgbV9oYXNUZXh0Q2hpbGRyZW4oZmFsc2UpLCAKKyAgICAgbV9pc1NWR0Zsb3coZmFs
c2UpIHsgfQogCiAgICAgUmVuZGVyRmxvdyogZmxvd09iamVjdCgpOwogCkBAIC0xMDUsNiArMTAx
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbWF4
QXNjZW50LCBpbnQmIG1heERlc2NlbnQsIGJvb2wgc3RyaWN0TW9kZSk7CiAgICAgdm9pZCBhZGp1
c3RNYXhBc2NlbnRBbmREZXNjZW50KGludCYgbWF4QXNjZW50LCBpbnQmIG1heERlc2NlbnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhQb3NpdGlvblRvcCwgaW50
IG1heFBvc2l0aW9uQm90dG9tKTsKKyAgICB2b2lkIHBsYWNlQm94ZXNWZXJ0aWNhbGx5V2l0aEFi
c0Jhc2VsaW5lKGludCYgaGVpZ2h0T2ZCbG9jaywgaW50ICZtaW5feSwgaW50ICZtYXhfeSk7CiAg
ICAgdm9pZCBwbGFjZUJveGVzVmVydGljYWxseShpbnQgeSwgaW50IG1heEhlaWdodCwgaW50IG1h
eEFzY2VudCwgYm9vbCBzdHJpY3RNb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50JiB0b3BQb3NpdGlvbiwgaW50JiBib3R0b21Qb3NpdGlvbiwgaW50JiBzZWxlY3Rpb25Ub3As
IGludCYgc2VsZWN0aW9uQm90dG9tKTsKICAgICB2b2lkIHNocmlua0JveGVzV2l0aE5vVGV4dENo
aWxkcmVuKGludCB0b3BQb3NpdGlvbiwgaW50IGJvdHRvbVBvc2l0aW9uKTsKQEAgLTEyNyw2ICsx
MjQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2luY2x1ZGVMZWZ0RWRnZSA6IDE7CiAgICAg
Ym9vbCBtX2luY2x1ZGVSaWdodEVkZ2UgOiAxOwogICAgIGJvb2wgbV9oYXNUZXh0Q2hpbGRyZW4g
OiAxOworICAgIGJvb2wgbV9pc1NWR0Zsb3cgOiAxOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRl
eDogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5k
ZXJUZXh0LmNwcAkocmV2aXNpb24gMTY2OTMpCisrKyByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgUmVuZGVyVGV4dDo6UmVuZGVyVGV4dChO
b2RlKiBub2RlLCBTdHJpbgogICAgICA6IFJlbmRlck9iamVjdChub2RlKSwgc3RyKF9zdHIpLCBt
X2ZpcnN0VGV4dEJveCgwKSwgbV9sYXN0VGV4dEJveCgwKQogICAgICAsIG1fbWluV2lkdGgoLTEp
LCBtX21heFdpZHRoKC0xKSwgbV9zZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25Ob25lKQogICAgICAs
IG1fbGluZXNEaXJ0eShmYWxzZSksIG1fY29udGFpbnNSZXZlcnNlZFRleHQoZmFsc2UpCi0gICAg
ICwgbV9hbGxBc2NpaUNoZWNrZWQoZmFsc2UpLCBtX2FsbEFzY2lpKGZhbHNlKQorICAgICAsIG1f
YWxsQXNjaWlDaGVja2VkKGZhbHNlKSwgbV9hbGxBc2NpaShmYWxzZSksIG1faXNTVkdUZXh0KGZh
bHNlKQogICAgICAsIG1fbW9ub3NwYWNlQ2hhcmFjdGVyV2lkdGgoMCkKIHsKICAgICBzZXRSZW5k
ZXJUZXh0KCk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJl
bmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDE2NjkzKQorKysgcmVuZGVyaW5nL1JlbmRl
clRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGludCBuZXh0T2Zmc2V0KGludCBjdXJyZW50KSBjb25zdDsKICAgICAKICAgICBib29s
IGNvbnRhaW5zUmV2ZXJzZWRUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc1JldmVyc2Vk
VGV4dDsgfQotICAgIAorICAgIGJvb2wgaXNTVkdUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc1NW
R1RleHQ7IH0KIHB1YmxpYzoKICAgICBJbmxpbmVUZXh0Qm94ICogZmluZE5leHRJbmxpbmVUZXh0
Qm94KCBpbnQgb2Zmc2V0LCBpbnQgJnBvcyApIGNvbnN0OwogCkBAIC0xODMsNiArMTgzLDcgQEAg
cHJvdGVjdGVkOiAvLyBtZW1iZXJzCiAgICAgLy8gMjIgYml0cyBsZWZ0CiAgICAgbXV0YWJsZSBi
b29sIG1fYWxsQXNjaWlDaGVja2VkOjE7CiAgICAgbXV0YWJsZSBib29sIG1fYWxsQXNjaWk6MTsK
KyAgICBib29sIG1faXNTVkdUZXh0OjE7CiAgICAgaW50IG1fbW9ub3NwYWNlQ2hhcmFjdGVyV2lk
dGg7CiB9OwogCg==
</data>
<flag name="review"
          id="3601"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10918</attachid>
            <date>2006-10-04 17:04:11 -0700</date>
            <delta_ts>2006-10-05 20:09:58 -0700</delta_ts>
            <desc>Now with anchoring and positioning</desc>
            <filename>newtext6.patch</filename>
            <type>text/plain</type>
            <size>57870</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2Nzc2KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY2LDEx
ICsxMjY2LDE1IEBACiAJCTkzRjE5QjE2MDgyNDVFNTkwMDFFOUFCQyAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
ICovOyB9OwogCQk5M0YxOUIxNzA4MjQ1RTU5MDAxRTlBQkMgLyogbGliaWN1Y29yZS5keWxpYiBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFEMzFB
MDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovOyB9OwogCQk5M0YxOUIxODA4
MjQ1RTU5MDAxRTlBQkMgLyogbGlieHNsdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MDYzMzA3MDczMUE3NzIwMERCMUZEMSAvKiBsaWJ4
c2x0LmR5bGliICovOyB9OworCQlBNzVFOTZFMDBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElu
bGluZUJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTc1RTk2REUwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLzsgfTsKKwkJ
QTc1RTk2RTEwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RTk2REYwQUMxMzY2RjAw
RUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwICovOyB9OwogCQlBNzYzOEE4QjA5OTU4RUE1
MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTg5MDk5NThFQTUwMDA3RTE0RiAvKiBX
S0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oICovOyB9OwogCQlBNzYzOEE4QzA5OTU4RUE1MDAwN0Ux
NEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QThBMDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3Bs
YWNlbWVudE1hcEZpbHRlci5tICovOyB9OwogCQlBNzYzOEE5MjA5OTU5MkMzMDAwN0UxNEYgLyog
V0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLzsgfTsKIAkJQTc2MzhBOTcwOTk1OTY1RDAw
MDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8q
IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oICovOyB9OwogCQlBNzYzOEE5ODA5OTU5NjVE
MDAwN0UxNEYgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTk2MDk5NTk2NUQwMDA3RTE0
RiAvKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwICovOyB9OworCQlBNzcxQ0IzRTBB
RDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzcxQ0IzQzBBRDMzQ0MyMDBERjlFMjUgLyogUmVu
ZGVyU1ZHSW5saW5lLmggKi87IH07CisJCUE3NzFDQjNGMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5k
ZXJTVkdJbmxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc3MUNCM0QwQUQzM0NDMjAwREY5RTI1IC8qIFJlbmRlclNWR0lubGluZS5jcHAgKi87
IH07CiAJCUE3Qjk3Qjc3MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVy
LmNpa2VybmVsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0I5N0I2NjA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5jaWtl
cm5lbCAqLzsgfTsKIAkJQTdCOTdCNzgwOTc5QzNBMTAwMEU4RUIxIC8qIFdLQ29tcG9uZW50TWVy
Z2VGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3Qjk3QjY3MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVyLmggKi87
IH07CiAJCUE3Qjk3Qjc5MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVy
Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I5N0I2
ODA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5tICovOyB9OwpAQCAt
MTI4OCw2ICsxMjkyLDEyIEBACiAJCUE3Qjk3Qjg1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxl
VHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3Qjk3Qjc0MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNm
ZXJGaWx0ZXIuY2lrZXJuZWwgKi87IH07CiAJCUE3Qjk3Qjg2MDk3OUMzQTEwMDBFOEVCMSAvKiBX
S1RhYmxlVHJhbnNmZXJGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3Qjk3Qjc1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNmZXJG
aWx0ZXIuaCAqLzsgfTsKIAkJQTdCOTdCODcwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFu
c2ZlckZpbHRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdCOTdCNzYwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5tICov
OyB9OworCQlBN0M1MTk0OTBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzUxOTQ3MEFDQTZB
RjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5oICovOyB9OworCQlBN0M1MTk0QTBBQ0E2QUYx
MDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDNTE5NDgwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLzsgfTsKKwkJQTdDNTFBNDYwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGlu
ZUZsb3dCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QzUxQTQ0MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi87IH07CisJ
CUE3QzUxQTQ3MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzUxQTQ1MEFDQTc0NDcw
MDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCAqLzsgfTsKKwkJQTdFMUREQkUwQUFFQ0RE
MTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTFEREJDMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5k
ZXJTVkdJbmxpbmVUZXh0LmggKi87IH07CisJCUE3RTFEREJGMEFBRUNERDEwMENBQ0QxQyAvKiBS
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3RTFEREJEMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcCAqLzsgfTsKIAkJQTgwRTZDRTQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBF
NkNCQTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmNwcCAqLzsgfTsKIAkJQTgwRTZD
RTUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQkIwQTE5ODlDQTAwN0ZC
OEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovOyB9OwogCQlBODBFNkNFNjBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0JDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmlt
aXRpdmVWYWx1ZS5oICovOyB9OwpAQCAtMzc0MCwxMSArMzc1MCwxNSBAQAogCQk5M0Y4QjMwNjBB
MzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3Jp
cHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0b3JKUy5wbTsgcGF0aCA9IC4uL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y4QjMwNzBB
MzAwRkVBMDBGNjFBQjggLyogZ2VuZXJhdGUtYmluZGluZ3MucGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5wZXJsOyBuYW1lID0gImdlbmVyYXRlLWJpbmRpbmdzLnBsIjsgcGF0aCA9ICJzY3JpcHRz
L2dlbmVyYXRlLWJpbmRpbmdzLnBsIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNG
OEIzMDgwQTMwMEZFQTAwRjYxQUI4IC8qIElETFN0cnVjdHVyZS5wbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnBlcmw7IG5hbWUgPSBJRExTdHJ1Y3R1cmUucG07IHBhdGggPSBzY3JpcHRzL0lETFN0
cnVjdHVyZS5wbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc1RTk2REUwQUMxMzY2
RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHUm9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzVFOTZERjBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSb290SW5saW5lQm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdL
RGlzcGxhY2VtZW50TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmls
dGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjM4QTkxMDk5NTkyQzMwMDA3
RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2
MzhBOTYwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzcxQ0IzQzBBRDMz
Q0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzcxQ0IzRDBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Qjk3QjY2MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0Nv
bXBvbmVudE1lcmdlRmlsdGVyLmNpa2VybmVsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXS0Nv
bXBvbmVudE1lcmdlRmlsdGVyLmNpa2VybmVsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0I5N0I2NzA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb21wb25lbnRNZXJnZUZpbHRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I5N0I2ODA5NzlDM0ExMDAwRThFQjEg
LyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpj
OyBwYXRoID0gV0tDb21wb25lbnRNZXJnZUZpbHRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzc2Miw2ICszNzc2LDEyIEBACiAJCUE3Qjk3Qjc0MDk3OUMzQTEwMDBFOEVCMSAv
KiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFdLVGFibGVUcmFuc2ZlckZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTdCOTdCNzUwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tUYWJsZVRyYW5zZmVyRmlsdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Qjk3Qjc2MDk3OUMzQTEwMDBFOEVC
MSAvKiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2Jq
YzsgcGF0aCA9IFdLVGFibGVUcmFuc2ZlckZpbHRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBN0M1MTk0NzBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHVFNwYW4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTE5NDgwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNW
R1RTcGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTFBNDQwQUNBNzQ0
NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHSW5saW5lRmxvd0JveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBN0M1MUE0NTBBQ0E3NDQ3MDA2RTJGQjkgLyogU1ZHSW5saW5lRmxvd0JveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdJbmxpbmVGbG93Qm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdFMUREQkMwQUFFQ0REMTAwQ0FDRDFDIC8qIFJl
bmRlclNWR0lubGluZVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU1ZHSW5saW5lVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0UxRERC
RDBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkEwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Zh
bHVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVmFs
dWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkIwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENTU0JvcmRlckltYWdlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODBFNkNCQzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZl
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1ByaW1pdGl2ZVZh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03Mjk5LDYgKzczMTksMTYgQEAK
IAkJCQlGQUUwNDE4OTA5NzU5Njk0MDAwNTQwQkUgLyogUmVuZGVyU1ZHSW1hZ2UuaCAqLywKIAkJ
CQk2NTc0M0I1MDA5NzA3NkY4MDAxRTdDRUYgLyogUmVuZGVyU1ZHVGV4dC5jcHAgKi8sCiAJCQkJ
NjU3NDNCNTEwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuaCAqLywKKwkJCQlBN0Ux
RERCQzBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5oICovLAorCQkJCUE3
RTFEREJEMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCAqLywKKwkJ
CQlBNzVFOTZERTBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5oICovLAorCQkJ
CUE3NUU5NkRGMEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmNwcCAqLywKKwkJ
CQlBN0M1MTk0NzBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLywKKwkJCQlB
N0M1MTk0ODBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwICovLAorCQkJCUE3
QzUxQTQ0MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi8sCisJCQkJQTdD
NTFBNDUwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guY3BwICovLAorCQkJCUE3
NzFDQjNDMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5kZXJTVkdJbmxpbmUuaCAqLywKKwkJCQlBNzcx
Q0IzRDBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0ga2NhbnZhczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC04OTk4LDYg
KzkwMjgsNyBAQAogCQkJCTg1MDY1NkZFMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01NZWRpYUxpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDY1NzAwMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01TdHls
ZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTA2NTcwMjBBQUI0NzYzMDAyRDE1QzAgLyog
RE9NU3R5bGVTaGVldExpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3RTFEREJFMEFBRUNERDEw
MENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzQ3
MDZBQjBBQUNEODA5MDAyQzFENDMgLyogVGV4dERlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg1QUZBODIyMEFBRjUyOEEwMEU4NDMwNSAvKiBET01FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODVDN0Y0NDcwQUFGNzZEQzAwNDAxNEREIC8qIERPTUV2ZW50VGFyZ2V0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTkxNDYsNiArOTE3Nyw5IEBACiAJCQkJQjIwMTExMDgwQUI3NzQwNTAwREIwRTY4
IC8qIEpTU1ZHQUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1M0JGNERCMEFCQjZCNTUw
MDg2NDdCQiAvKiBET01Ob2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTNCRjRFQjBBQkI2RTk3
MDA4NjQ3QkIgLyogRE9NTm9kZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3NUU5NkUw
MEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBN0M1MTk0OTBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUE3QzUxQTQ2MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NUJDQkMxMzBBQkJBODdEMDAzODExNjAgLyogRE9NSFRNTERv
Y3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBQTIxRUNDRDBBQkYwRkM2MDAyQjgzNEMgLyog
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUxRUU4MEMwQUJDQTI4
RjAwQTZBQTMzIC8qIERPTUFic3RyYWN0Vmlldy5oIGluIEhlYWRlcnMgKi8sCkBAIC05MzQwLDYg
KzkzNzQsNyBAQAogCQkJCTg1MDA0REE2MEFDRUVCNUEwMEM0MzhGNiAvKiBET01TVkdEb2N1bWVu
dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTAwNERBNzBBQ0VFQjVBMDBDNDM4RjYg
LyogRE9NU1ZHRWxsaXBzZUVsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUJC
NTQxOUYwQUNEREZFNDAwMjgyMEVCIC8qIFJlbmRlckxpc3RCb3guaCBpbiBIZWFkZXJzICovLAor
CQkJCUE3NzFDQjNFMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5kZXJTVkdJbmxpbmUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzOTJGMTQyMEFEMTg1RjQwMDY5MUJENCAvKiBSZW5kZXJDb3VudGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzkyRjE0NjBBRDE4NjBDMDA2OTFCRDQgLyogQ291bnRlclJl
c2V0Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5MkYxNEMwQUQxODYxQjAwNjkxQkQ0IC8q
IENvdW50ZXJOb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMjg5LDYgKzEwMzI0LDcgQEAKIAkJ
CQk4NTA2NTcwMTBBQUI0NzYzMDAyRDE1QzAgLyogRE9NU3R5bGVTaGVldC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTg1MDY1NzAzMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01TdHlsZVNoZWV0TGlzdC5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUUxRUJCQkQ0MEFBQzlCODcwMDFGRThFMiAvKiBDU1NDaGFy
c2V0UnVsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBN0UxRERCRjBBQUVDREQxMDBDQUNEMUMg
LyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NUFGQTgyMzBB
QUY1MjhBMDBFODQzMDUgLyogRE9NRXZlbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUM3RjQ5
MjBBQUY3OURDMDA0MDE0REQgLyogRE9NVUlFdmVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1
QzdGNUMwMEFBRkI3Q0QwMDQwMTRERCAvKiBET01NdXRhdGlvbkV2ZW50Lm1tIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMDQyNCw2ICsxMDQ2MCw5IEBACiAJCQkJQjIyMkY2OUMwQUI3NzFCODAwMjJFRkFE
IC8qIEpTU1ZHRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjAxMTEwNzBBQjc3NDA1
MDBEQjBFNjggLyogSlNTVkdBRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTNCRjRE
QzBBQkI2QjU1MDA4NjQ3QkIgLyogRE9NTm9kZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCUE3NUU5
NkUxMEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUE3QzUxOTRBMEFDQTZBRjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBN0M1MUE0NzBBQ0E3NDQ3MDA2RTJGQjkgLyogU1ZHSW5saW5lRmxv
d0JveC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NUJDQkMxNDBBQkJBODdEMDAzODExNjAgLyog
RE9NSFRNTERvY3VtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQUEyMUVDQ0EwQUJGMEZCQTAw
MkI4MzRDIC8qIENTU0N1cnNvckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUx
RUU4MEQwQUJDQTI4RjAwQTZBQTMzIC8qIERPTUFic3RyYWN0Vmlldy5tbSBpbiBTb3VyY2VzICov
LApAQCAtMTA0NzEsNiArMTA1MTAsNyBAQAogCQkJCTg1MDA0RDk5MEFDRUVBRUYwMEM0MzhGNiAv
KiBET01TVkdEb2N1bWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1MDA0RDlCMEFDRUVBRUYw
MEM0MzhGNiAvKiBET01TVkdFbGxpcHNlRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUFC
QjU0MTlFMEFDRERGRTQwMDI4MjBFQiAvKiBSZW5kZXJMaXN0Qm94LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUE3NzFDQjNGMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5kZXJTVkdJbmxpbmUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM5MkYxNDQwQUQxODVGRTAwNjkxQkQ0IC8qIFJlbmRlckNvdW50
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MkYxNEEwQUQxODYxMzAwNjkxQkQ0IC8qIENv
dW50ZXJSZXNldE5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MkYxNTAwQUQxODYyMzAw
NjkxQkQ0IC8qIENvdW50ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogY3NzL3N2Zy5j
c3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gY3NzL3N2Zy5jc3MJKHJldmlzaW9uIDE2Nzc2KQorKysgY3NzL3N2
Zy5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDMgKzQ5LDcgQEAgc3ZnLCBzeW1ib2wsIG1hcmtl
ciwgcGF0dGVybiB7CiB0ZXh0LCBmb3JlaWduT2JqZWN0IHsKICAgICBkaXNwbGF5OiBibG9jayAh
aW1wb3J0YW50CiB9CisKK3RleHQsIHRzcGFuIHsKKyAgIHdoaXRlLXNwYWNlOiBub3dyYXAgIWlt
cG9ydGFudAorfQpJbmRleDogZG9tL1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9UZXh0LmNw
cAkocmV2aXNpb24gMTY3NzYpCisrKyBkb20vVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5l
VGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE0OSw2ICsxNTAsMTEgQEAgYm9v
bCBUZXh0OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlIAogCiBSZW5kZXJPYmplY3QgKlRl
eHQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxl
KQogeworI2lmZGVmIFNWR19TVVBQT1JUCisgICAgaWYocGFyZW50Tm9kZSgpLT5pc1NWR0VsZW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR0lubGluZVRleHQodGhp
cywgc3RyKTsKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorICAgIAogICAgIHJldHVybiBuZXcgKGFy
ZW5hKSBSZW5kZXJUZXh0KHRoaXMsIHN0cik7CiB9CiAKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZH
SW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR0lubGluZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBrY2FudmFzL1JlbmRlclNWR0lubGluZS5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHBy
b2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVk
ZW50LmNhbnRlcmJ1cnkuYWMubno+LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgU1ZHX1NV
UFBPUlQKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKKyNpbmNsdWRlICJTVkdJbmxpbmVG
bG93Qm94LmgiCisjaW5jbHVkZSAiU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oIgorI2luY2x1
ZGUgIlNWR0xlbmd0aExpc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorUmVuZGVy
U1ZHSW5saW5lOjpSZW5kZXJTVkdJbmxpbmUoTm9kZSAqbikgOiBSZW5kZXJJbmxpbmUobikge30K
KyAgICAKK0lubGluZUJveCogUmVuZGVyU1ZHSW5saW5lOjpjcmVhdGVJbmxpbmVCb3goYm9vbCBt
YWtlUGxhY2VIb2xkZXJCb3gsIGJvb2wgaXNSb290TGluZUJveCwgYm9vbCBpc09ubHlSdW4pCit7
CisgICAgYXNzZXJ0KCEoIWlzUm9vdExpbmVCb3ggJiYgKGlzUmVwbGFjZWQoKSB8fCBtYWtlUGxh
Y2VIb2xkZXJCb3gpKSk7CisgICAgYXNzZXJ0KGlzSW5saW5lRmxvdygpKTsKKyAgICBTVkdJbmxp
bmVGbG93Qm94KiBmbG93Qm94ID0gMDsKKyAgICBmbG93Qm94ID0gbmV3IChyZW5kZXJBcmVuYSgp
KSBTVkdJbmxpbmVGbG93Qm94KHRoaXMpOworICAgIAorICAgIFNWR1RleHRQb3NpdGlvbmluZ0Vs
ZW1lbnQgKnRleHQgPSBzdGF0aWNfY2FzdDxTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50ICo+KGVs
ZW1lbnQoKSk7CisgICAgZmxvd0JveC0+c2V0RHgodGV4dC0+ZHgoKS0+Z2V0Rmlyc3QoKSA/IHRl
eHQtPmR4KCktPmdldEZpcnN0KCktPnZhbHVlKCkgOiAwKTsKKyAgICBmbG93Qm94LT5zZXREeSh0
ZXh0LT5keSgpLT5nZXRGaXJzdCgpID8gdGV4dC0+ZHkoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSA6
IDApOworICAgIGlmKHRleHQtPngoKS0+Z2V0Rmlyc3QoKSkKKyAgICAgICAgZmxvd0JveC0+c2V0
QWJzWCh0ZXh0LT54KCktPmdldEZpcnN0KCktPnZhbHVlKCkpOworICAgIGlmKHRleHQtPnkoKS0+
Z2V0Rmlyc3QoKSkKKyAgICAgICAgZmxvd0JveC0+c2V0QWJzWSh0ZXh0LT55KCktPmdldEZpcnN0
KCktPnZhbHVlKCkpOworICAgIGlmICghbV9maXJzdExpbmVCb3gpCisgICAgICAgIG1fZmlyc3RM
aW5lQm94ID0gbV9sYXN0TGluZUJveCA9IGZsb3dCb3g7CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgbV9sYXN0TGluZUJveC0+c2V0TmV4dExpbmVCb3goZmxvd0JveCk7CisgICAgICAgIGZsb3dC
b3gtPnNldFByZXZpb3VzTGluZUJveChtX2xhc3RMaW5lQm94KTsKKyAgICAgICAgbV9sYXN0TGlu
ZUJveCA9IGZsb3dCb3g7CisgICAgfQorICAgICAgICAKKyAgICByZXR1cm4gZmxvd0JveDsKK30K
KworfQorCisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHSW5s
aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmUuaAkocmV2aXNpb24g
MCkKKysrIGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisg
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRl
cmJ1cnkuYWMubno+LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclNWR0lubGluZV9ICisjZGVmaW5lIFJlbmRlclNW
R0lubGluZV9ICisKKyNpZmRlZiBTVkdfU1VQUE9SVAorI2luY2x1ZGUgIlJlbmRlcklubGluZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBSZW5kZXJTVkdJbmxpbmUgOiBwdWJsaWMg
UmVuZGVySW5saW5lIHsKK3B1YmxpYzoKKyAgICAgICAgUmVuZGVyU1ZHSW5saW5lKE5vZGUqKTsK
KyAgICAgICAgdmlydHVhbCBjb25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlclNWR0lubGluZSI7IH0KKyAgICAgICAgdmlydHVhbCBJbmxpbmVCb3gqIGNyZWF0ZUlu
bGluZUJveChib29sIG1ha2VQbGFjZUhvbGRlckJveCwgYm9vbCBpc1Jvb3RMaW5lQm94LCBib29s
IGlzT25seVJ1biA9IGZhbHNlKTsKKyAgICB9OworfQorCisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQK
KyNlbmRpZiAvLyAhUmVuZGVyU1ZHVFNwYW5fSApJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR0lubGluZVRleHQuY3Bw
CShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9q
aDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZmRlZiBTVkdfU1VQUE9SVAorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgorCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxl
LmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitSZW5kZXJTVkdJbmxpbmVUZXh0
OjpSZW5kZXJTVkdJbmxpbmVUZXh0KE5vZGUgKm4sIFN0cmluZ0ltcGwgKnN0cik6UmVuZGVyVGV4
dChuLCBzdHIpIHt9CisKK3ZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6YWJzb2x1dGVSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKK3sKKyAgICBGbG9hdFJlY3Qg
YWJzb2x1dGVSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KEZsb2F0UmVjdCh0eCwg
dHksIHdpZHRoKCksIGhlaWdodCgpKSk7CisgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJl
Y3QoYWJzb2x1dGVSZWN0KSk7Cit9CisKK30KKworI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4
OiBrY2FudmFzL1JlbmRlclNWR0lubGluZVRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1Jl
bmRlclNWR0lubGluZVRleHQuaAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvUmVuZGVyU1ZHSW5s
aW5lVGV4dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisvKgorICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAz
MzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBS
ZW5kZXJTVkdJbmxpbmVUZXh0X2gKKyNkZWZpbmUgUmVuZGVyU1ZHSW5saW5lVGV4dF9oCisKKyNp
ZmRlZiBTVkdfU1VQUE9SVAorCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBSZW5kZXJTVkdJbmxpbmVUZXh0IDogcHVibGljIFJlbmRlclRleHQg
eworcHVibGljOgorICAgIFJlbmRlclNWR0lubGluZVRleHQoTm9kZSosIFN0cmluZ0ltcGwqKTsK
KyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVu
ZGVyU1ZHSW5saW5lVGV4dCI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0
b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSk7Cit9OworfQorCisjZW5kaWYgLy8g
U1ZHX1NVUFBPUlQKKworI2VuZGlmIC8vICFSZW5kZXJTVkdJbmxpbmVUZXh0X2gKSW5kZXg6IGtj
YW52YXMvUmVuZGVyU1ZHVFNwYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZH
VFNwYW4uY3BwCShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9SZW5kZXJTVkdUU3Bhbi5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50
IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJSZW5kZXJTVkdUU3Bhbi5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgor
I2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbmNsdWRlICJTVkdSb290SW5saW5lQm94
LmgiCisjaW5jbHVkZSAiU1ZHSW5saW5lRmxvd0JveC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgorI2luY2x1ZGUgIlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTVkdMZW5ndGhMaXN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1JlbmRlclNW
R1RTcGFuOjpSZW5kZXJTVkdUU3BhbihOb2RlICpuKSA6IFJlbmRlclNWR0lubGluZShuKSB7fQor
Cit2b2lkIFJlbmRlclNWR1RTcGFuOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVj
dHMsIGludCB0eCwgaW50IHR5KQoreworICAgIElubGluZUZsb3dCb3gqIGluaXRGbG93ID0gZmly
c3RMaW5lQm94KCk7CisgICAgRmxvYXRSZWN0IGJvdW5kcyh0eCArIGluaXRGbG93LT54UG9zKCks
IHR5ICsgaW5pdEZsb3ctPnlQb3MoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIHJlY3RzLmFw
cGVuZChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChib3VuZHMp
KSk7Cit9CisKKworfQorCisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtjYW52YXMvUmVu
ZGVyU1ZHVFNwYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR1RTcGFuLmgJKHJl
dmlzaW9uIDApCisrKyBrY2FudmFzL1JlbmRlclNWR1RTcGFuLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2pl
Y3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50
LmNhbnRlcmJ1cnkuYWMubno+LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1RTcGFuX0gKKyNkZWZpbmUgUmVu
ZGVyU1ZHVFNwYW5fSAorCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJSZW5kZXJTVkdJ
bmxpbmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUmVuZGVyU1ZHVFNwYW4gOiBw
dWJsaWMgUmVuZGVyU1ZHSW5saW5lIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdUU3BhbihOb2Rl
Kik7CisgICAgdmlydHVhbCBjb25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlclNWR1RTcGFuIjsgfQorICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KTsKK307Cit9CisKKyNlbmRpZiAvLyBT
VkdfU1VQUE9SVAorI2VuZGlmIC8vICFSZW5kZXJTVkdUU3Bhbl9ICkluZGV4OiBrY2FudmFzL1Jl
bmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHAJ
KHJldmlzaW9uIDE2Nzc2KQorKysga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMyw2ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KICAqICAgICAgICAgICAgICAgMjAwNiBBbGV4YW5kZXIgS2VsbGV0dCA8bHlw
YW5vdkBrZGUub3JnPgorICogICAgICAgICAgICAgICAyMDA2IE9saXZlciBIdW50IDxvamgxNkBz
dHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiwxMiAr
MjcsMTEgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJLQ2FudmFzQ2xpcHBlci5oIgotI2luY2x1ZGUgIktDYW52
YXNNYXNrZXIuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRl
ICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgogI2luY2x1
ZGUgIlNWR1RleHRFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHUm9vdElubGluZUJveC5oIgogI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsMTEwICs0
MSwxMyBAQCBSZW5kZXJTVkdUZXh0OjpSZW5kZXJTVkdUZXh0KFNWR1RleHRFbGVtCiB7CiB9CiAK
LUFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdUZXh0Ojp0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUo
KQotewotICAgIGludCBvZmZzZXQgPSBiYXNlbGluZVBvc2l0aW9uKHRydWUsIHRydWUpOwotICAg
IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoMCwgLW9mZnNldCk7Ci19Ci0KLUFm
ZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdUZXh0Ojp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKQot
ewotICAgIFNWR1RleHRFbGVtZW50ICp0ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dEVsZW1lbnQq
PihlbGVtZW50KCkpOwotCi0gICAgU1ZHTGVuZ3RoKiB4T2Zmc2V0ID0gdGV4dC0+eCgpLT5nZXRG
aXJzdCgpLmdldCgpOwotICAgIFNWR0xlbmd0aCogeU9mZnNldCA9IHRleHQtPnkoKS0+Z2V0Rmly
c3QoKS5nZXQoKTsKLQotICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoeE9m
ZnNldCA/IHhPZmZzZXQtPnZhbHVlKCkgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeU9mZnNldCA/IHlPZmZzZXQtPnZhbHVlKCkgOiAwKTsKLX0KLQotdm9pZCBS
ZW5kZXJTVkdUZXh0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgsIGlu
dCBwYXJlbnRZKQotewotICAgIGlmIChwYWludEluZm8ucC0+cGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBLUmVuZGVyaW5nRGV2aWNlKiBkZXZpY2UgPSByZW5kZXJp
bmdEZXZpY2UoKTsKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCA9IGRldmlj
ZS0+Y3VycmVudENvbnRleHQoKTsKLSAgICBib29sIHNob3VsZFBvcENvbnRleHQgPSBmYWxzZTsK
LSAgICBpZiAoY29udGV4dCkKLSAgICAgICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgLy8gTmVlZCB0byBzZXQgdXAgS0NhbnZhcyByZW5kZXJpbmcgaWYgaXQgaGFz
bid0IGFscmVhZHkgYmVlbiBkb25lLgotICAgICAgICBjb250ZXh0ID0gcGFpbnRJbmZvLnAtPmNy
ZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRleHQoKTsKLSAgICAgICAgZGV2aWNlLT5wdXNoQ29udGV4
dChjb250ZXh0KTsKLSAgICAgICAgc2hvdWxkUG9wQ29udGV4dCA9IHRydWU7Ci0gICAgfQotICAg
IAotICAgIGNvbnRleHQtPmNvbmNhdENUTShsb2NhbFRyYW5zZm9ybSgpKTsKLSAgICBjb250ZXh0
LT5jb25jYXRDVE0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKHBhcmVudFgsIHBhcmVudFkp
KTsKLSAgICBjb250ZXh0LT5jb25jYXRDVE0odHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkpOwot
ICAgIGNvbnRleHQtPmNvbmNhdENUTSh0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKSk7Ci0gICAg
Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKTsKLSAg
ICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwot
ICAgICAgICAgICAgCi0gICAgaWYgKEtDYW52YXNDbGlwcGVyKiBjbGlwcGVyID0gZ2V0Q2xpcHBl
ckJ5SWQoZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmNsaXBQYXRoKCkuc3Vic3RyaW5nKDEpKSkKLSAg
ICAgICAgY2xpcHBlci0+YXBwbHlDbGlwKGJvdW5kaW5nQm94KTsKLQotICAgIGlmIChLQ2FudmFz
TWFza2VyKiBtYXNrZXIgPSBnZXRNYXNrZXJCeUlkKGRvY3VtZW50KCksIHN2Z1N0eWxlLT5tYXNr
RWxlbWVudCgpLnN1YnN0cmluZygxKSkpCi0gICAgICAgIG1hc2tlci0+YXBwbHlNYXNrKGJvdW5k
aW5nQm94KTsKLQotICAgIEtDYW52YXNGaWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5SWQoZG9j
dW1lbnQoKSwgc3ZnU3R5bGUtPmZpbHRlcigpLnN1YnN0cmluZygxKSk7Ci0gICAgaWYgKGZpbHRl
cikKLSAgICAgICAgZmlsdGVyLT5wcmVwYXJlRmlsdGVyKGJvdW5kaW5nQm94KTsKLSAgICAgICAg
Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYyhkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCkt
PmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKLSAgICBQYWludEluZm8gcGkgPSBwYWludEluZm87
Ci0gICAgcGkucCA9IGMuZ2V0KCk7Ci0gICAgcGkuciA9ICh0cmFuc2xhdGlvblRvcFRvQmFzZWxp
bmUoKSAqIHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpICogYWJzb2x1dGVUcmFuc2Zvcm0oKSku
aW52ZXJ0KCkubWFwUmVjdChwYWludEluZm8ucik7Ci0KLSAgICBmbG9hdCBvcGFjaXR5ID0gc3R5
bGUoKS0+b3BhY2l0eSgpOwotICAgIGlmIChvcGFjaXR5IDwgMS4wZikKLSAgICAgICAgYy0+YmVn
aW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLQotICAgIEtSZW5kZXJpbmdQYWludFNlcnZl
ciAqZmlsbFBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRTZXJ2ZXIo
c3R5bGUoKSwgdGhpcyk7Ci0gICAgaWYgKGZpbGxQYWludFNlcnZlcikgewotICAgICAgICBmaWxs
UGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dCh0cnVlKTsKLSAgICAgICAgLy8gZmlsbFBhaW50
U2VydmVyLT5zZXRBY3RpdmVDbGllbnQodGhpcyk7Ci0gICAgICAgIGlmIChmaWxsUGFpbnRTZXJ2
ZXItPnNldHVwKGNvbnRleHQsIHRoaXMsIEFQUExZX1RPX0ZJTEwpKSB7Ci0gICAgICAgICAgICBS
ZW5kZXJCbG9jazo6cGFpbnQocGksIDAsIDApOwotICAgICAgICAgICAgZmlsbFBhaW50U2VydmVy
LT50ZWFyZG93bihjb250ZXh0LCB0aGlzLCBBUFBMWV9UT19GSUxMKTsKLSAgICAgICAgfQotICAg
ICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dChmYWxzZSk7Ci0gICAgfQotICAg
IAotICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFp
bnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKHN0eWxlKCksIHRoaXMpOwotICAgIGlmIChz
dHJva2VQYWludFNlcnZlcikgewotICAgICAgICBzdHJva2VQYWludFNlcnZlci0+c2V0UGFpbnRp
bmdUZXh0KHRydWUpOwotICAgICAgICAvLyBzdHJva2VQYWludFNlcnZlci0+c2V0QWN0aXZlQ2xp
ZW50KHRoaXMpOwotICAgICAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldHVwKGNvbnRleHQs
IHRoaXMsIEFQUExZX1RPX1NUUk9LRSkpIHsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrOjpwYWlu
dChwaSwgMCwgMCk7Ci0gICAgICAgICAgICBzdHJva2VQYWludFNlcnZlci0+dGVhcmRvd24oY29u
dGV4dCwgdGhpcywgQVBQTFlfVE9fU1RST0tFKTsKLSAgICAgICAgfQotICAgICAgICBzdHJva2VQ
YWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoZmls
dGVyKQotICAgICAgICBmaWx0ZXItPmFwcGx5RmlsdGVyKGJvdW5kaW5nQm94KTsKLQotICAgIGlm
IChvcGFjaXR5IDwgMS4wZikKLSAgICAgICAgYy0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLQot
ICAgIC8vIHJlc3RvcmUgZHJhd2luZyBzdGF0ZQotICAgIGlmICghc2hvdWxkUG9wQ29udGV4dCkK
LSAgICAgICAgcGFpbnRJbmZvLnAtPnJlc3RvcmUoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgZGV2
aWNlLT5wb3BDb250ZXh0KCk7Ci0gICAgICAgIGRlbGV0ZSBjb250ZXh0OwotICAgIH0KLX0KLQog
dm9pZCBSZW5kZXJTVkdUZXh0Ojpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiBy
LCBib29sIGYpCiB7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IHRyYW5zbGF0aW9u
VG9wVG9CYXNlbGluZSgpICogdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkgKiBhYnNvbHV0ZVRy
YW5zZm9ybSgpOworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBhYnNvbHV0ZVRyYW5z
Zm9ybSgpOwogICAgIHIgPSB0cmFuc2Zvcm0ubWFwUmVjdChyKTsKICAgICAKICAgICBSZW5kZXJD
b250YWluZXI6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KHIsIGYpOworICAgIHIgPSB0cmFu
c2Zvcm0uaW52ZXJ0KCkubWFwUmVjdChyKTsKIH0KIAogYm9vbCBSZW5kZXJTVkdUZXh0OjpyZXF1
aXJlc0xheWVyKCkKQEAgLTE2MSw5ICs2NCwxMiBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OmxheW91
dCgpCiAgICAgYm9vbCBjaGVja0ZvclJlcGFpbnQgPSBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlv
dXQoKTsKICAgICBpZiAoY2hlY2tGb3JSZXBhaW50KQogICAgICAgICBvbGRCb3VuZHMgPSBtX2Fi
c29sdXRlQm91bmRzOwotCisgICAgU1ZHVGV4dEVsZW1lbnQgKnRleHQgPSBzdGF0aWNfY2FzdDxT
VkdUZXh0RWxlbWVudCAqPihlbGVtZW50KCkpOworICAgIGludCB4T2Zmc2V0ID0gdGV4dC0+eCgp
LT5nZXRGaXJzdCgpID8gdGV4dC0+eCgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKKyAgICBp
bnQgeU9mZnNldCA9IHRleHQtPnkoKS0+Z2V0Rmlyc3QoKSA/IHRleHQtPnkoKS0+Z2V0Rmlyc3Qo
KS0+dmFsdWUoKSA6IDA7CisgICAgdGhpcy0+c2V0UG9zKHhPZmZzZXQsIHlPZmZzZXQpOwogICAg
IFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKLQorICAgIAogICAgIG1fYWJzb2x1dGVCb3VuZHMgPSBn
ZXRBYnNvbHV0ZVJlcGFpbnRSZWN0KCk7CiAKICAgICBib29sIHJlcGFpbnRlZCA9IGZhbHNlOwpA
QCAtMTczLDExICs3OSwyNSBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OmxheW91dCgpCiAgICAgc2V0
TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCitJbmxpbmVCb3gqIFJlbmRlclNWR1RleHQ6OmNyZWF0
ZUlubGluZUJveChib29sIG1ha2VQbGFjZUhvbGRlckJveCwgYm9vbCBpc1Jvb3RMaW5lQm94LCBi
b29sIGlzT25seVJ1bikKK3sKKyAgICBhc3NlcnQoIWlzSW5saW5lRmxvdygpKTsKKyAgICBJbmxp
bmVGbG93Qm94KiBmbG93Qm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBTVkdSb290SW5saW5lQm94
KHRoaXMpOworICAgIAorICAgIGlmICghbV9maXJzdExpbmVCb3gpCisgICAgICAgIG1fZmlyc3RM
aW5lQm94ID0gbV9sYXN0TGluZUJveCA9IGZsb3dCb3g7CisgICAgZWxzZSB7CisgICAgICAgIG1f
bGFzdExpbmVCb3gtPnNldE5leHRMaW5lQm94KGZsb3dCb3gpOworICAgICAgICBmbG93Qm94LT5z
ZXRQcmV2aW91c0xpbmVCb3gobV9sYXN0TGluZUJveCk7CisgICAgICAgIG1fbGFzdExpbmVCb3gg
PSBmbG93Qm94OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmxvd0JveDsKK30KKwogYm9vbCBS
ZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludChOb2RlSW5mbyYgaW5mbywgaW50IF94LCBpbnQgX3ks
IGludCBfdHgsIGludCBfdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gdG90YWxUcmFuc2Zvcm0gPSB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMo
KTsKLSAgICB0b3RhbFRyYW5zZm9ybSAqPSB0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKTsKLSAg
ICB0b3RhbFRyYW5zZm9ybSAqPSBhYnNvbHV0ZVRyYW5zZm9ybSgpOworICAgIEFmZmluZVRyYW5z
Zm9ybSB0b3RhbFRyYW5zZm9ybSA9IGFic29sdXRlVHJhbnNmb3JtKCk7CiAgICAgZG91YmxlIGxv
Y2FsWCwgbG9jYWxZOwogICAgIHRvdGFsVHJhbnNmb3JtLmludmVydCgpLm1hcChfeCwgX3ksICZs
b2NhbFgsICZsb2NhbFkpOwogICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoaW5m
bywgKGludClsb2NhbFgsIChpbnQpbG9jYWxZLCBfdHgsIF90eSwgaGl0VGVzdEFjdGlvbik7CkBA
IC0xODUsMTEgKzEwNSwyMSBAQCBib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KE5vZGVJ
bmZvCiAKIHZvaWQgUmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4m
IHJlY3RzLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0ID0gdHJh
bnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7Ci0gICAgbWF0ICo9IHRyYW5zbGF0aW9uVG9wVG9CYXNl
bGluZSgpOwotICAgIG1hdCAqPSBhYnNvbHV0ZVRyYW5zZm9ybSgpOworICAgIGZvciAoSW5saW5l
Qm94ICpib3ggPSBtX2ZpcnN0TGluZUJveDsgYm94OyBib3ggPSBib3gtPm1fbmV4dCkgeworICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gYm94VHJhbnNmb3JtID0gYm94LT5vYmplY3QoKS0+YWJzb2x1
dGVUcmFuc2Zvcm0oKTsKKyAgICAgICAgRmxvYXRSZWN0IGJveFJlY3QgPSBGbG9hdFJlY3QoeFBv
cygpICsgYm94LT54UG9zKCksIHlQb3MoKSArIGJveC0+eVBvcygpLCBib3gtPndpZHRoKCksIGJv
eC0+aGVpZ2h0KCkpOworICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChib3hU
cmFuc2Zvcm0ubWFwUmVjdChib3hSZWN0KSkpOworICAgIH0KK30KIAotICAgIHJlY3RzLmFwcGVu
ZChlbmNsb3NpbmdJbnRSZWN0KG1hdC5tYXBSZWN0KEZsb2F0UmVjdCgwLCAwLCB3aWR0aCgpLCBo
ZWlnaHQoKSkpKSk7Cit2b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBpbnQgX3R4LCBpbnQgX3R5KQoreyAgICAKKyAgICBLUmVuZGVyaW5nRGV2aWNlKiBkZXZp
Y2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKKyAgICBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyBwaSA9
IHBhaW50SW5mbzsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjKGRldmljZS0+Y3VycmVu
dENvbnRleHQoKS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkpOworICAgIHBpLnAgPSBjLmdldCgp
OworICAgIHBpLnIgPSAoYWJzb2x1dGVUcmFuc2Zvcm0oKSkuaW52ZXJ0KCkubWFwUmVjdChwYWlu
dEluZm8ucik7CisgICAgUmVuZGVyQmxvY2s6OnBhaW50KHBpLCBfdHgsIF90eSk7CiB9CiAKIH0K
SW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVu
ZGVyU1ZHVGV4dC5oCShyZXZpc2lvbiAxNjc3NikKKysrIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJSZW5kZXJCbG9j
ay5oIgogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3LDIyICszOCwxOCBAQCBwdWJs
aWM6CiAgICAgUmVuZGVyU1ZHVGV4dChTVkdUZXh0RWxlbWVudCAqbm9kZSk7CiAKICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHVGV4
dCI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGlu
dCBwYXJlbnRZKTsKICAgICAKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAgICAgdmlydHVhbCB2b2lkIHNl
dExvY2FsVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSB7IG1fdHJh
bnNmb3JtID0gdHJhbnNmb3JtOyB9Ci0gICAgCisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSk7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50
KE5vZGVJbmZvJiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7
Ci0KICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQg
dHgsIGludCB0eSk7Ci0KICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUFic29sdXRlUmVwYWludFJl
Y3QoSW50UmVjdCYgciwgYm9vbCBmKTsKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigp
OwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICAKKyAgICB2aXJ0dWFsIElubGluZUJv
eCogY3JlYXRlSW5saW5lQm94KGJvb2wgbWFrZVBsYWNlSG9sZGVyQm94LCBib29sIGlzUm9vdExp
bmVCb3gsIGJvb2wgaXNPbmx5UnVuID0gZmFsc2UpOwogIHByaXZhdGU6Ci0gICAgQWZmaW5lVHJh
bnNmb3JtIHRyYW5zbGF0aW9uVG9wVG9CYXNlbGluZSgpOwotICAgIEFmZmluZVRyYW5zZm9ybSB0
cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zv
cm07CiAgICAgSW50UmVjdCBtX2Fic29sdXRlQm91bmRzOwogfTsKSW5kZXg6IGtjYW52YXMvU1ZH
SW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9TVkdJbmxpbmVGbG93Qm94
LmNwcAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvU1ZHSW5saW5lRmxvd0JveC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8
b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24s
IE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworCisjaWZkZWYgU1ZHX1NVUFBPUlQKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIlNWR0lubGluZUZsb3dCb3guaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCisj
aW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCisjaW5jbHVkZSAiS0NhbnZhc0NsaXBw
ZXIuaCIKKyNpbmNsdWRlICJLQ2FudmFzTWFza2VyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZQoreworCit2b2lkIFNWR0lubGluZUZsb3dCb3g6OnBhaW50
KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KSAKK3sK
KyAgICBwYWludFNWR0lubGluZUZsb3codGhpcywgb2JqZWN0KCksIHBhaW50SW5mbywgdHgsIHR5
KTsKK30KKwordm9pZCBwYWludFNWR0lubGluZUZsb3coSW5saW5lRmxvd0JveCAqZmxvdywgUmVu
ZGVyT2JqZWN0ICpvYmplY3QsIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGlu
dCB0eCwgaW50IHR5KQoreworICAgIGlmIChwYWludEluZm8ucC0+cGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgS1JlbmRlcmluZ0RldmljZSogZGV2aWNlID0g
cmVuZGVyaW5nRGV2aWNlKCk7CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQg
PSBkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCk7CisgICAgYm9vbCBzaG91bGRQb3BDb250ZXh0ID0g
ZmFsc2U7CisgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHBhaW50SW5mby5wLT5zYXZlKCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIC8vIE5lZWQgdG8gc2V0IHVwIEtDYW52YXMgcmVuZGVyaW5nIGlm
IGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gZG9uZS4KKyAgICAgICAgY29udGV4dCA9IHBhaW50SW5m
by5wLT5jcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCk7CisgICAgICAgIGRldmljZS0+cHVz
aENvbnRleHQoY29udGV4dCk7CisgICAgICAgIHNob3VsZFBvcENvbnRleHQgPSB0cnVlOworICAg
IH0KKyAgICAKKyAgICBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyBwaSA9IHBhaW50SW5mbzsKKyAg
ICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjKGRldmljZS0+Y3VycmVudENvbnRleHQoKS0+Y3Jl
YXRlR3JhcGhpY3NDb250ZXh0KCkpOworICAgIHBpLnAgPSBjLmdldCgpOworICAgIGlmICghZmxv
dy0+aXNSb290SW5saW5lQm94KCkpCisgICAgICAgIHBpLnIgPSAob2JqZWN0LT5sb2NhbFRyYW5z
Zm9ybSgpKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5mby5yKTsKKworICAgIGZsb2F0IG9wYWNp
dHkgPSBvYmplY3QtPnN0eWxlKCktPm9wYWNpdHkoKTsKKyAgICBpZiAob3BhY2l0eSA8IDEuMGYp
CisgICAgICAgIGMtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CisgICAgCisgICAg
RmxvYXRSZWN0IGJvdW5kaW5nQm94KDAsIDAsIG9iamVjdC0+d2lkdGgoKSwgb2JqZWN0LT5oZWln
aHQoKSk7CisgICAgYm91bmRpbmdCb3g9b2JqZWN0LT5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJl
Y3QoYm91bmRpbmdCb3gpOworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlICpzdmdTdHlsZSA9IG9i
amVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICAKKyAgICBLQ2FudmFzRmlsdGVyKiBmaWx0
ZXIgPSBnZXRGaWx0ZXJCeUlkKG9iamVjdC0+ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmZpbHRlcigp
LnN1YnN0cmluZygxKSk7CisgICAgaWYgKGZpbHRlcikKKyAgICAgICAgZmlsdGVyLT5wcmVwYXJl
RmlsdGVyKGJvdW5kaW5nQm94KTsKKyAgICAKKyAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKmZp
bGxQYWludFNlcnZlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50U2VydmVyKG9iamVj
dC0+c3R5bGUoKSwgb2JqZWN0KTsKKyAgICBpZiAoZmlsbFBhaW50U2VydmVyKSB7CisgICAgICAg
IGZpbGxQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KHRydWUpOworICAgICAgICAvLyBmaWxs
UGFpbnRTZXJ2ZXItPnNldEFjdGl2ZUNsaWVudCh0aGlzKTsKKyAgICAgICAgaWYgKGZpbGxQYWlu
dFNlcnZlci0+c2V0dXAoY29udGV4dCwgb2JqZWN0LCBBUFBMWV9UT19GSUxMKSkgeworICAgICAg
ICAgICAgZmxvdy0+cGFyZW50UGFpbnRNZXRob2QocGksIHR4LCB0eSk7CisgICAgICAgICAgICBm
aWxsUGFpbnRTZXJ2ZXItPnRlYXJkb3duKGNvbnRleHQsIG9iamVjdCwgQVBQTFlfVE9fRklMTCk7
CisgICAgICAgIH0KKyAgICAgICAgZmlsbFBhaW50U2VydmVyLT5zZXRQYWludGluZ1RleHQoZmFs
c2UpOworICAgIH0KKyAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnN0cm9rZVBhaW50U2VydmVy
ID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihvYmplY3QtPnN0eWxlKCks
IG9iamVjdCk7CisgICAgaWYgKHN0cm9rZVBhaW50U2VydmVyKSB7CisgICAgICAgIHN0cm9rZVBh
aW50U2VydmVyLT5zZXRQYWludGluZ1RleHQodHJ1ZSk7CisgICAgICAgIC8vIHN0cm9rZVBhaW50
U2VydmVyLT5zZXRBY3RpdmVDbGllbnQodGhpcyk7CisgICAgICAgIGlmIChzdHJva2VQYWludFNl
cnZlci0+c2V0dXAoY29udGV4dCwgb2JqZWN0LCBBUFBMWV9UT19TVFJPS0UpKSB7CisgICAgICAg
ICAgICBmbG93LT5wYXJlbnRQYWludE1ldGhvZChwaSwgdHgsIHR5KTsKKyAgICAgICAgICAgIHN0
cm9rZVBhaW50U2VydmVyLT50ZWFyZG93bihjb250ZXh0LCBvYmplY3QsIEFQUExZX1RPX1NUUk9L
RSk7CisgICAgICAgIH0KKyAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4
dChmYWxzZSk7CisgICAgfQorICAgIAorICAgIGlmIChmaWx0ZXIpIAorICAgICAgICBmaWx0ZXIt
PmFwcGx5RmlsdGVyKGJvdW5kaW5nQm94KTsKKyAgICAKKyAgICBpZiAob3BhY2l0eSA8IDEuMGYp
CisgICAgICAgIGMtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisKKyAgICAvLyByZXN0b3JlIGRy
YXdpbmcgc3RhdGUKKyAgICBpZiAoIXNob3VsZFBvcENvbnRleHQpCisgICAgICAgIHBhaW50SW5m
by5wLT5yZXN0b3JlKCk7CisgICAgZWxzZSB7CisgICAgICAgIGRldmljZS0+cG9wQ29udGV4dCgp
OworICAgICAgICBkZWxldGUgY29udGV4dDsKKyAgICB9Cit9CisKK30KKyNlbmRpZiAvLyBTVkdf
U1VQUE9SVApJbmRleDoga2NhbnZhcy9TVkdJbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2NhbnZhcy9TVkdJbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1NWR0lu
bGluZUZsb3dCb3guaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3Vp
dGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5k
ZWYgU1ZHSW5saW5lRmxvd0JveF9ICisjZGVmaW5lIFNWR0lubGluZUZsb3dCb3hfSAorCisjaWZk
ZWYgU1ZHX1NVUFBPUlQKKworI2luY2x1ZGUgIklubGluZUZsb3dCb3guaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUKK3sKKwordm9pZCBwYWludFNWR0lubGluZUZsb3coSW5saW5lRmxvd0JveCAqZmxv
dywgUmVuZGVyT2JqZWN0ICpvYmplY3QsIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQg
X3R4LCBpbnQgX3R5KTsKKworY2xhc3MgU1ZHSW5saW5lRmxvd0JveCA6IHB1YmxpYyBJbmxpbmVG
bG93Qm94IHsKK3B1YmxpYzoKKyAgICBTVkdJbmxpbmVGbG93Qm94KFJlbmRlck9iamVjdCAqb2Jq
KSA6IElubGluZUZsb3dCb3gob2JqKSwgbV9oYXNBYnN4KGZhbHNlKSwgCisgICAgICBtX2hhc0Fi
c3koZmFsc2UpLCBtX2Fic3goMCksIG1fYWJzeSgwKSwgbV9keCgwKSwgbV9keSgwKSAKKyAgICB7
CisgICAgICAgIG1faXNTVkdGbG93ID0gdHJ1ZTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBh
cmVudFBhaW50TWV0aG9kKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQg
X3R5KXsgSW5saW5lRmxvd0JveDo6cGFpbnQoaSwgX3R4LCBfdHkpOyB9CisgICAgdmlydHVhbCB2
b2lkIHBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0QWJzWChpbnQgeCkgeyBtX2Fic3ggPSB4OyBtX2hhc0Fic3gg
PSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEFic1koaW50IHkpIHsgbV9hYnN5ID0geTsg
bV9oYXNBYnN5ID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNBYnNYKCkgeyByZXR1cm4g
bV9oYXNBYnN4OyB9CisgICAgdmlydHVhbCBib29sIGhhc0Fic1koKSB7IHJldHVybiBtX2hhc0Fi
c3k7IH0KKyAgICB2aXJ0dWFsIGludCBhYnNYKCkgeyByZXR1cm4gbV9hYnN4OyB9CisgICAgdmly
dHVhbCBpbnQgYWJzWSgpIHsgcmV0dXJuIG1fYWJzeTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRE
eChpbnQgZHgpIHsgbV9keCA9IGR4OyB9CisgICAgdmlydHVhbCB2b2lkIHNldER5KGludCBkeSkg
eyBtX2R5ID0gZHk7IH0KKyAgICB2aXJ0dWFsIGludCBkWCgpIHsgcmV0dXJuIG1fZHg7IH0KKyAg
ICB2aXJ0dWFsIGludCBkWSgpIHsgcmV0dXJuIG1fZHk7IH0KK3ByaXZhdGU6CisgICAgYm9vbCBt
X2hhc0Fic3ggOiAxOworICAgIGJvb2wgbV9oYXNBYnN5IDogMTsKKyAgICBpbnQgbV9hYnN4Owor
ICAgIGludCBtX2Fic3k7CisgICAgaW50IG1fZHg7CisgICAgaW50IG1fZHk7Cit9OworCit9CisK
KyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorCisjZW5kaWYgLy8gIVNWR0lubGluZUZsb3dCb3hfSApJ
bmRleDoga2NhbnZhcy9TVkdSb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFz
L1NWR1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9TVkdSb290SW5s
aW5lQm94LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUg
MzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKworI2lmZGVm
IFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdSb290SW5s
aW5lQm94LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiS0NhbnZh
c1JlbmRlcmluZ1N0eWxlLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgorI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlICJTVkdJbmxpbmVGbG93Qm94LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlCit7CisKK3ZvaWQgU1ZHUm9vdElubGluZUJveDo6cGFpbnQoUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKSAKK3sK
KyAgICBwYWludFNWR0lubGluZUZsb3codGhpcywgb2JqZWN0KCksIHBhaW50SW5mbywgcGFyZW50
WCwgcGFyZW50WSk7Cit9CisKK30KKyNlbmRpZiAvLyBTVkdfU1VQUE9SVApJbmRleDoga2NhbnZh
cy9TVkdSb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9TVkdSb290SW5saW5l
Qm94LmgJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1NWR1Jvb3RJbmxpbmVCb3guaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9q
aDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgU1ZHUm9vdElubGluZUJveF9I
CisjZGVmaW5lIFNWR1Jvb3RJbmxpbmVCb3hfSAorCisjaWZkZWYgU1ZHX1NVUFBPUlQKKworI2lu
Y2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKKyAgICAKK2Ns
YXNzIFNWR1Jvb3RJbmxpbmVCb3ggOiBwdWJsaWMgUm9vdElubGluZUJveCB7CitwdWJsaWM6Cisg
ICAgU1ZHUm9vdElubGluZUJveChSZW5kZXJPYmplY3QgKm9iaikgOiBSb290SW5saW5lQm94KG9i
aikKKyAgICB7CisgICAgICAgIG1faXNTVkdGbG93ID0gdHJ1ZTsKKyAgICB9CisgICAgdmlydHVh
bCB2b2lkIHBhcmVudFBhaW50TWV0aG9kKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQg
X3R4LCBpbnQgX3R5KXsgUm9vdElubGluZUJveDo6cGFpbnQoaSwgX3R4LCBfdHkpOyB9CisgICAg
dmlydHVhbCB2b2lkIHBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBp
bnQgX3R5KTsKK307CisKK30KKworI2VuZGlmIC8vIFNWR19TVVBQT1JUCisKKyNlbmRpZiAvLyAh
Um9vdElubGluZUJveF9ICkluZGV4OiBrc3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2Nzc2KQor
Kysga3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsNyBAQAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgog
I2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHSW5saW5lLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBA
IC03OSw3ICs3OSw3IEBAIGJvb2wgU1ZHVFJlZkVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmUK
IAogUmVuZGVyT2JqZWN0ICpTVkdUUmVmRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqKQogewotICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5k
ZXJJbmxpbmUodGhpcyk7CisgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR0lubGluZSh0
aGlzKTsKIH0KIAogLy8gdmltOnRzPTQ6bm9ldApJbmRleDoga3N2ZzIvc3ZnL1NWR1RTcGFuRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RTcGFuRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE2Nzc2KQorKysga3N2ZzIvc3ZnL1NWR1RTcGFuRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNW
R1RTcGFuRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiUmVuZGVy
SW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHVFNwYW4uaCIKIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKQEAgLTQ3LDcgKzQ3LDcgQEAgYm9vbCBTVkdUU3BhbkVsZW1lbnQ6OmNoaWxk
U2hvdWxkQ3JlYXRlUgogCiBSZW5kZXJPYmplY3QgKlNWR1RTcGFuRWxlbWVudDo6Y3JlYXRlUmVu
ZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqKQogewotICAgIHJldHVybiBu
ZXcgKGFyZW5hKSBSZW5kZXJJbmxpbmUodGhpcyk7CisgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJl
bmRlclNWR1RTcGFuKHRoaXMpOwogfQogCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiByZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL0lubGluZUZsb3dC
b3guY3BwCShyZXZpc2lvbiAxNjc3NikKKysrIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjM3LDkgKzIzNywxMjEgQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojpk
ZXRlcm1pbmVTcGFjaW5nRm9yRgogICAgICAgICB9CiAgICAgfQogfQorc3RhdGljIGJvb2wgdHJh
bnNsYXRlQm94KElubGluZUJveCAqYm94LCBpbnQgeCwgaW50IHksIGJvb2wgdG9wTGV2ZWwgPSB0
cnVlKQoreworICAgIAorICAgIGlmIChib3gtPm9iamVjdCgpLT5pc1RleHQoKSkgCisgICAgewor
ICAgICAgICBib3gtPnNldFhQb3MoYm94LT54UG9zKCkgKyB4KTsKKyAgICAgICAgYm94LT5zZXRZ
UG9zKGJveC0+eVBvcygpICsgeSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIElu
bGluZUZsb3dCb3gqIGZsb3cgPSBzdGF0aWNfY2FzdDxJbmxpbmVGbG93Qm94Kj4oYm94KTsKKyAg
ICAgICAgaWYgKHRvcExldmVsfHwhKGZsb3ctPmRYKCkgfHwgZmxvdy0+ZFkoKSB8fCBmbG93LT5o
YXNBYnNYKCkgfHwgZmxvdy0+aGFzQWJzWSgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgYm94
LT5zZXRYUG9zKGJveC0+eFBvcygpICsgeCk7CisgICAgICAgICAgICBib3gtPnNldFlQb3MoYm94
LT55UG9zKCkgKyB5KTsKKyAgICAgICAgICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gZmxvdy0+
Zmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgpKSAKKyAgICAgICAg
ICAgICAgICBpZiAoIXRyYW5zbGF0ZUJveChjdXJyLCB4LCB5LCBmYWxzZSkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworaW50IElubGluZUZsb3dCb3g6OnBsYWNlUG9zaXRpb25lZEJveGVzSG9yaXpvbnRh
bGx5KGludCB4LCBpbnQmIGxlZnRQb3NpdGlvbiwgaW50JiByaWdodFBvc2l0aW9uLCBpbnQgJmxl
ZnRBbGlnbiwgaW50ICZyaWdodEFsaWduLCBib29sJiBuZWVkc1dvcmRTcGFjaW5nLCBpbnQgeFBv
cywgYm9vbCBwb3NpdGlvbmVkKQoreworICAgIC8vaW50IHN0YXJ0eCA9IHg7CisgICAgaW50IG1u
ID0gMTAwMDAwOworICAgIGludCBteCA9IC0xMDAwMDA7CisgICAgaW50IGFtbiA9IDEwMDAwMDsK
KyAgICBpbnQgYW14ID0gLTEwMDAwMDsKKyAgICBib29sIHNlZW5Qb3NpdGlvbmVkRWxlbWVudCA9
IGZhbHNlOworICAgIHNldFhQb3MoeCk7CisgICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmaXJz
dENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIAorICAgIHsKKyAgICAg
ICAgaWYgKGN1cnItPm9iamVjdCgpLT5pc1RleHQoKSkgeworICAgICAgICAgICAgbW4gPSBtaW4o
bW4sIHgpOworICAgICAgICAgICAgYW1uID0gbWluKGFtbiwgeCk7CisgICAgICAgICAgICBJbmxp
bmVUZXh0Qm94KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KGN1cnIpOworICAg
ICAgICAgICAgUmVuZGVyVGV4dCogcnQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4odGV4dC0+
b2JqZWN0KCkpOworICAgICAgICAgICAgaWYgKHJ0LT5sZW5ndGgoKSkgeworICAgICAgICAgICAg
ICAgIGlmIChuZWVkc1dvcmRTcGFjaW5nICYmIERlcHJlY2F0ZWRDaGFyKHJ0LT50ZXh0KClbdGV4
dC0+c3RhcnQoKV0pLmlzU3BhY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgeCArPSBydC0+Zm9u
dChtX2ZpcnN0TGluZSktPndvcmRTcGFjaW5nKCk7CisgICAgICAgICAgICAgICAgbmVlZHNXb3Jk
U3BhY2luZyA9ICFEZXByZWNhdGVkQ2hhcihydC0+dGV4dCgpW3RleHQtPmVuZCgpXSkuaXNTcGFj
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGV4dC0+c2V0WFBvcyh4KTsKKyAgICAg
ICAgICAgIHggKz0gdGV4dC0+d2lkdGgoKTsKKyAgICAgICAgICAgIG14ID0gbWF4KG14LCB4KTsK
KyAgICAgICAgICAgIGFteCA9IG1heChhbXgsIHgpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgYXNzZXJ0KGN1cnItPm9iamVjdCgpLT5pc0lubGluZUZsb3coKSk7CisgICAgICAgICAg
ICBJbmxpbmVGbG93Qm94KiBmbG93ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KGN1cnIp
OworICAgICAgICAgICAgeCArPSBmbG93LT5kWCgpOworICAgICAgICAgICAgaWYgKGZsb3ctPmhh
c0Fic1goKSkKKyAgICAgICAgICAgICAgICB4ID0gZmxvdy0+YWJzWCgpIC0geFBvczsKKyAgICAg
ICAgICAgIGlmIChmbG93LT5kWCgpIHx8IGZsb3ctPmRZKCkgfHwgZmxvdy0+aGFzQWJzWCgpIHx8
IGZsb3ctPmhhc0Fic1koKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzZWVuUG9z
aXRpb25lZEVsZW1lbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIG5lZWRzV29yZFNwYWNpbmcg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbnQgX2FtbiwgX2FteDsgLy90aHJvdyBhd2F5IHRo
ZXNlIHZhbHVlcworICAgICAgICAgICAgICAgIHggPSBmbG93LT5wbGFjZVBvc2l0aW9uZWRCb3hl
c0hvcml6b250YWxseSh4LCBtbiwgbXgsIF9hbW4sIF9hbXgsIG5lZWRzV29yZFNwYWNpbmcsIHhQ
b3MsIHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoc2VlblBvc2l0
aW9uZWRFbGVtZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBfYW1uLCBf
YW14OyAvL3Rocm93IGF3YXkgdGhlc2UgdmFsdWVzCisgICAgICAgICAgICAgICAgeCA9IGZsb3ct
PnBsYWNlUG9zaXRpb25lZEJveGVzSG9yaXpvbnRhbGx5KHgsIG1uLCBteCwgX2FtbiwgX2FteCwg
bmVlZHNXb3JkU3BhY2luZywgeFBvcywgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHggPSBmbG93LT5wbGFjZVBvc2l0aW9uZWRCb3hlc0hv
cml6b250YWxseSh4LCBtbiwgbXgsIGFtbiwgYW14LCBuZWVkc1dvcmRTcGFjaW5nLCB4UG9zLCBm
YWxzZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaW50IHdpZHRoID0gbXggLSBtbjsKKyAgICBz
ZXRXaWR0aCh3aWR0aCk7CisgICAgaW50IGF3aWR0aCA9IGFteCAtIGFtbjsKKyAgICBpbnQgZHg9
MDsKKyAgICBpZiAocG9zaXRpb25lZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob2JqZWN0KCkt
PnN0eWxlKCktPnN2Z1N0eWxlKCktPnRleHRBbmNob3IoKSkgCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNhc2UgVEFfTUlERExFOgorICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUJveCh0aGlzLCBk
eCA9IC1hd2lkdGgvMiwgMCk7ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFRBX0VORDoKKyAgICAgICAgICAgICAgICB0cmFuc2xhdGVCb3godGhp
cywgZHggPSAtYXdpZHRoLCAwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVEFfU1RBUlQ6CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChkeCkgCisgICAgICAgIHsKKyAgICAgICAgICAg
IHggKz0gZHg7CisgICAgICAgICAgICBtbiArPSBkeDsKKyAgICAgICAgICAgIG14ICs9IGR4Owor
ICAgICAgICB9CisgICAgfQorICAgIGxlZnRQb3NpdGlvbiA9IG1pbihsZWZ0UG9zaXRpb24sIG1u
KTsKKyAgICByaWdodFBvc2l0aW9uID0gbWF4KHJpZ2h0UG9zaXRpb24sIG14KTsKKyAgICBsZWZ0
QWxpZ24gPSBtaW4obGVmdEFsaWduLCBhbW4pOworICAgIHJpZ2h0QWxpZ24gPSBtYXgocmlnaHRB
bGlnbiwgYW14KTsKKyAgICAKKyAgICByZXR1cm4geDsKK30KIAogaW50IElubGluZUZsb3dCb3g6
OnBsYWNlQm94ZXNIb3Jpem9udGFsbHkoaW50IHgsIGludCYgbGVmdFBvc2l0aW9uLCBpbnQmIHJp
Z2h0UG9zaXRpb24sIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcpCiB7CisgICAgLy9TVkcgZmxvd2Jv
eCBsYXlvdXQgcnVsZXMgYXJlIGRpZmZlcmVudCBmcm9tIGh0bWwsIGV0YworICAgIGlmIChtX2lz
U1ZHRmxvdykgCisgICAgeworICAgICAgICBpbnQgdGVtcDEsIHRlbXAyOyAvL3Rocm93YXdheSB2
YWx1ZXMKKyAgICAgICAgeCA9IHBsYWNlUG9zaXRpb25lZEJveGVzSG9yaXpvbnRhbGx5KHgsIGxl
ZnRQb3NpdGlvbiwgcmlnaHRQb3NpdGlvbiwgdGVtcDEsIHRlbXAyLCBuZWVkc1dvcmRTcGFjaW5n
LCBvYmplY3QoKS0+eFBvcygpLCB0cnVlKTsKKyAgICAgICAgbGVmdFBvc2l0aW9uID0gbWluKGxl
ZnRQb3NpdGlvbiwgeCk7CisgICAgICAgIHJpZ2h0UG9zaXRpb24gPSBtYXgocmlnaHRQb3NpdGlv
biwgeCk7CisgICAgICAgIG5lZWRzV29yZFNwYWNpbmcgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IHg7CisgICAgfQogICAgIC8vIFNldCBvdXIgeCBwb3NpdGlvbi4KICAgICBzZXRYUG9zKHgpOwog
ICAgIGxlZnRQb3NpdGlvbiA9IG1pbih4LCBsZWZ0UG9zaXRpb24pOwpAQCAtMzA1LDEzICs0MTcs
NTQgQEAgaW50IElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFsbAogICAgIHJldHVy
biB4OwogfQogCit2b2lkIElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNWZXJ0aWNhbGx5V2l0aEFi
c0Jhc2VsaW5lKGludCYgaGVpZ2h0T2ZCbG9jaywgaW50ICZtaW5feSwgaW50ICZtYXhfeSwgaW50
ICZiYXNlbGluZSwgaW50IHlQb3MpCit7CisgICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmaXJz
dENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgaWYg
KGN1cnItPmlzSW5saW5lRmxvd0JveCgpKSAKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHN0
YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihjdXJyKS0+aGFzQWJzWSgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+
KGN1cnIpLT5hYnNZKCkgLSB5UG9zOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYmFzZWxp
bmUgKz0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KGN1cnIpLT5kWSgpOworICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KGN1cnIpLT5wbGFjZUJveGVzVmVydGljYWxs
eVdpdGhBYnNCYXNlbGluZShoZWlnaHRPZkJsb2NrLCBtaW5feSwgbWF4X3ksIGJhc2VsaW5lLCB5
UG9zKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBGb250JiBmb250ID0gY3Vyci0+b2JqZWN0
KCktPmZvbnQodHJ1ZSk7CisgICAgICAgIGludCBhc2NlbnQgPSBmb250LmFzY2VudCgpOworICAg
ICAgICBpbnQgcG9zaXRpb24gPSBiYXNlbGluZSAtIGFzY2VudDsKKyAgICAgICAgaW50IGhlaWdo
dCA9IGFzY2VudCArIGZvbnQuZGVzY2VudCgpOworICAgICAgICBjdXJyLT5zZXRCYXNlbGluZShh
c2NlbnQpOworICAgICAgICBjdXJyLT5zZXRZUG9zKHBvc2l0aW9uKTsKKyAgICAgICAgY3Vyci0+
c2V0SGVpZ2h0KGhlaWdodCk7CisKKyAgICAgICAgaWYgKHBvc2l0aW9uIDwgbWluX3kpIAorICAg
ICAgICAgICAgbWluX3kgPSBwb3NpdGlvbjsKKyAgICAgICAgaWYgKHBvc2l0aW9uICsgaGVpZ2h0
ID4gbWF4X3kpIAorICAgICAgICAgICAgbWF4X3kgPSBwb3NpdGlvbiArIGhlaWdodDsKKyAgICB9
CisgICAgaWYgKGlzUm9vdElubGluZUJveCgpKSB7CisgICAgICAgIHNldFlQb3MobWluX3kpOwor
ICAgICAgICBzZXRIZWlnaHQobWF4X3kgLSBtaW5feSk7CisgICAgICAgIHNldEJhc2VsaW5lKGJh
c2VsaW5lIC0gbWluX3kpOworICAgICAgICBoZWlnaHRPZkJsb2NrICs9IG1heF95IC0gbWluX3k7
CisgICAgfQorfQorCiB2b2lkIElubGluZUZsb3dCb3g6OnZlcnRpY2FsbHlBbGlnbkJveGVzKGlu
dCYgaGVpZ2h0T2ZCbG9jaykKIHsKICAgICBpbnQgbWF4UG9zaXRpb25Ub3AgPSAwOwogICAgIGlu
dCBtYXhQb3NpdGlvbkJvdHRvbSA9IDA7CiAgICAgaW50IG1heEFzY2VudCA9IDA7CiAgICAgaW50
IG1heERlc2NlbnQgPSAwOwotCisgICAgaWYgKG1faXNTVkdGbG93KSB7CisgICAgICAgIC8vQWJz
b2x1dGUgcG9zaXRpb25zIGluIFNWRyBkaWN0YXRlIHBvc2l0aW9uIG9mIGJhc2VsaW5lCisgICAg
ICAgIC8vc28gd2UgZHJvcCB0byBhIHNpbXBsZXIgbGF5b3V0IGZ1bmN0aW9uCisgICAgICAgIGlu
dCB0b3AgPSAxMDAwMDAsIGJvdHRvbSA9IC0xMDAwMDAsIGJhc2VsaW5lID0gaGVpZ2h0T2ZCbG9j
azsKKyAgICAgICAgcGxhY2VCb3hlc1ZlcnRpY2FsbHlXaXRoQWJzQmFzZWxpbmUoaGVpZ2h0T2ZC
bG9jaywgdG9wLCBib3R0b20sIGJhc2VsaW5lLCBvYmplY3QoKS0+eVBvcygpKTsKKyAgICAgICAg
c2V0VmVydGljYWxPdmVyZmxvd1Bvc2l0aW9ucyh0b3AsIGJvdHRvbSk7CisgICAgICAgIHNldFZl
cnRpY2FsU2VsZWN0aW9uUG9zaXRpb25zKHRvcCwgYm90dG9tKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KICAgICAvLyBGaWd1cmUgb3V0IGlmIHdlJ3JlIGluIHN0cmljdCBtb2RlLiAgTm90ZSB0
aGF0IHdlIGNhbid0IHNpbXBseSB1c2UgIXN0eWxlKCktPmh0bWxIYWNrcygpLAogICAgIC8vIGJl
Y2F1c2UgdGhhdCB3b3VsZCBtYXRjaCBhbG1vc3Qgc3RyaWN0IG1vZGUgYXMgd2VsbC4KICAgICBS
ZW5kZXJPYmplY3QqIGN1cnIgPSBvYmplY3QoKTsKSW5kZXg6IHJlbmRlcmluZy9JbmxpbmVGbG93
Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkocmV2aXNpb24g
MTY3NzYpCisrKyByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxNCArMzEsMTAgQEAgY2xhc3MgSW5saW5lRmxvd0JveCA6IHB1YmxpYyBJbmxpbmVSdW5Cbwog
ewogcHVibGljOgogICAgIElubGluZUZsb3dCb3goUmVuZGVyT2JqZWN0KiBvYmopCi0gICAgOklu
bGluZVJ1bkJveChvYmopCi0gICAgewotICAgICAgICBtX2ZpcnN0Q2hpbGQgPSAwOwotICAgICAg
ICBtX2xhc3RDaGlsZCA9IDA7Ci0gICAgICAgIG1faW5jbHVkZUxlZnRFZGdlID0gbV9pbmNsdWRl
UmlnaHRFZGdlID0gZmFsc2U7Ci0gICAgICAgIG1faGFzVGV4dENoaWxkcmVuID0gZmFsc2U7Ci0g
ICAgICAgIG1fbWF4SG9yaXpvbnRhbFNoYWRvdyA9IDA7Ci0gICAgfQorICAgIDpJbmxpbmVSdW5C
b3gob2JqKSwgbV9maXJzdENoaWxkKDApLCBtX2xhc3RDaGlsZCgwKSwgCisgICAgIG1fbWF4SG9y
aXpvbnRhbFNoYWRvdygwKSwgbV9pbmNsdWRlTGVmdEVkZ2UoZmFsc2UpLAorICAgICBtX2luY2x1
ZGVSaWdodEVkZ2UoZmFsc2UpLCBtX2hhc1RleHRDaGlsZHJlbihmYWxzZSksIAorICAgICBtX2lz
U1ZHRmxvdyhmYWxzZSkgeyB9CiAKICAgICBSZW5kZXJGbG93KiBmbG93T2JqZWN0KCk7CiAKQEAg
LTc2LDYgKzcyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBteSwg
aW50IG1oLCBpbnQgX3R4LCBpbnQgX3R5LCBpbnQgdywgaW50IGgpOwogICAgIHZpcnR1YWwgdm9p
ZCBwYWludERlY29yYXRpb25zKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBp
bnQgX3R5LCBib29sIHBhaW50ZWRDaGlsZHJlbiA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpOworICAg
IHZpcnR1YWwgdm9pZCBwYXJlbnRQYWludE1ldGhvZChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
aSwgaW50IF90eCwgaW50IF90eSl7IHBhaW50KGksIF90eCwgX3R5KTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRQb2ludChSZW5kZXJPYmplY3Q6Ok5vZGVJbmZvJiBpLCBpbnQgeCwgaW50IHks
IGludCB0eCwgaW50IHR5KTsKIAogICAgIGludCBtYXJnaW5Cb3JkZXJQYWRkaW5nTGVmdCgpOwpA
QCAtMTAwLDExICs5NywxNCBAQCBwdWJsaWM6CiAgICAgaW50IGdldEZsb3dTcGFjaW5nV2lkdGgo
KTsKICAgICBib29sIG9uRW5kQ2hhaW4oUmVuZGVyT2JqZWN0KiBlbmRPYmplY3QpOwogICAgIGlu
dCBwbGFjZUJveGVzSG9yaXpvbnRhbGx5KGludCB4LCBpbnQmIGxlZnRQb3NpdGlvbiwgaW50JiBy
aWdodFBvc2l0aW9uLCBib29sJiBuZWVkc1dvcmRTcGFjaW5nKTsKKyAgICBpbnQgcGxhY2VQb3Np
dGlvbmVkQm94ZXNIb3Jpem9udGFsbHkoaW50IHgsIGludCYgbGVmdFBvc2l0aW9uLCBpbnQmIHJp
Z2h0UG9zaXRpb24sIGludCAmbGVmdEFsaWduLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ICZyaWdodEFsaWduLCBib29sJiBuZWVkc1dvcmRTcGFjaW5nLCBp
bnQgeFBvcywgYm9vbCBwb3NpdGlvbmVkKTsKICAgICB2b2lkIHZlcnRpY2FsbHlBbGlnbkJveGVz
KGludCYgaGVpZ2h0T2ZCbG9jayk7CiAgICAgdm9pZCBjb21wdXRlTG9naWNhbEJveEhlaWdodHMo
aW50JiBtYXhQb3NpdGlvblRvcCwgaW50JiBtYXhQb3NpdGlvbkJvdHRvbSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQmIG1heEFzY2VudCwgaW50JiBtYXhEZXNjZW50LCBi
b29sIHN0cmljdE1vZGUpOwogICAgIHZvaWQgYWRqdXN0TWF4QXNjZW50QW5kRGVzY2VudChpbnQm
IG1heEFzY2VudCwgaW50JiBtYXhEZXNjZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbWF4UG9zaXRpb25Ub3AsIGludCBtYXhQb3NpdGlvbkJvdHRvbSk7CisgICAg
dm9pZCBwbGFjZUJveGVzVmVydGljYWxseVdpdGhBYnNCYXNlbGluZShpbnQmIGhlaWdodE9mQmxv
Y2ssIGludCAmbWluX3ksIGludCAmbWF4X3ksIGludCAmYmFzZWxpbmUsIGludCB5UG9zKTsKICAg
ICB2b2lkIHBsYWNlQm94ZXNWZXJ0aWNhbGx5KGludCB5LCBpbnQgbWF4SGVpZ2h0LCBpbnQgbWF4
QXNjZW50LCBib29sIHN0cmljdE1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQmIHRvcFBvc2l0aW9uLCBpbnQmIGJvdHRvbVBvc2l0aW9uLCBpbnQmIHNlbGVjdGlvblRvcCwg
aW50JiBzZWxlY3Rpb25Cb3R0b20pOwogICAgIHZvaWQgc2hyaW5rQm94ZXNXaXRoTm9UZXh0Q2hp
bGRyZW4oaW50IHRvcFBvc2l0aW9uLCBpbnQgYm90dG9tUG9zaXRpb24pOwpAQCAtMTE5LDcgKzEx
OSwxMyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuQWNjb21tb2RhdGVFbGxpcHNp
cyhib29sIGx0ciwgaW50IGJsb2NrRWRnZSwgaW50IGVsbGlwc2lzV2lkdGgpOwogICAgIHZpcnR1
YWwgaW50IHBsYWNlRWxsaXBzaXNCb3goYm9vbCBsdHIsIGludCBibG9ja0VkZ2UsIGludCBlbGxp
cHNpc1dpZHRoLCBib29sJik7Ci0KKyAgICB2aXJ0dWFsIGludCBkWCgpIHsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIGludCBkWSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBhYnNY
KCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IGFic1koKSB7IHJldHVybiAwOyB9Cisg
ICAgdmlydHVhbCBib29sIGhhc0Fic1goKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBoYXNBYnNZKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAKIHByb3RlY3RlZDoKICAgICBJ
bmxpbmVCb3gqIG1fZmlyc3RDaGlsZDsKICAgICBJbmxpbmVCb3gqIG1fbGFzdENoaWxkOwpAQCAt
MTI3LDYgKzEzMyw3IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1faW5jbHVkZUxlZnRFZGdlIDog
MTsKICAgICBib29sIG1faW5jbHVkZVJpZ2h0RWRnZSA6IDE7CiAgICAgYm9vbCBtX2hhc1RleHRD
aGlsZHJlbiA6IDE7CisgICAgYm9vbCBtX2lzU1ZHRmxvdyA6IDE7CiB9OwogCiB9IC8vbmFtZXNw
YWNlCkluZGV4OiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gMTY3NzYpCisrKyByZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgUmVu
ZGVySW5saW5lOjpjYWxjTWluTWF4V2lkdGgoKQogfQogCiBib29sIFJlbmRlcklubGluZTo6cmVx
dWlyZXNMYXllcigpIHsKLSAgICByZXR1cm4gaXNSb290KCkgfHwgaXNSZWxQb3NpdGlvbmVkKCkg
fHwgc3R5bGUoKS0+b3BhY2l0eSgpIDwgMS4wZjsKKyAgICByZXR1cm4gaXNSb290KCkgfHwgaXNS
ZWxQb3NpdGlvbmVkKCkgfHwgKHN0eWxlKCktPm9wYWNpdHkoKSA8IDEuMGYgJiYgIWVsZW1lbnQo
KS0+aXNTVkdFbGVtZW50KCkpOwogfQogCiBpbnQgUmVuZGVySW5saW5lOjp3aWR0aCgpIGNvbnN0
CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAxNjc3NikKKysrIHJlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBSZW5kZXJUZXh0OjpSZW5kZXJU
ZXh0KE5vZGUqIG5vZGUsIFN0cmluCiAgICAgIDogUmVuZGVyT2JqZWN0KG5vZGUpLCBzdHIoX3N0
ciksIG1fZmlyc3RUZXh0Qm94KDApLCBtX2xhc3RUZXh0Qm94KDApCiAgICAgICwgbV9taW5XaWR0
aCgtMSksIG1fbWF4V2lkdGgoLTEpLCBtX3NlbGVjdGlvblN0YXRlKFNlbGVjdGlvbk5vbmUpCiAg
ICAgICwgbV9saW5lc0RpcnR5KGZhbHNlKSwgbV9jb250YWluc1JldmVyc2VkVGV4dChmYWxzZSkK
LSAgICAgLCBtX2FsbEFzY2lpQ2hlY2tlZChmYWxzZSksIG1fYWxsQXNjaWkoZmFsc2UpCisgICAg
ICwgbV9hbGxBc2NpaUNoZWNrZWQoZmFsc2UpLCBtX2FsbEFzY2lpKGZhbHNlKSwgbV9pc1NWR1Rl
eHQoZmFsc2UpCiAgICAgICwgbV9tb25vc3BhY2VDaGFyYWN0ZXJXaWR0aCgwKQogewogICAgIHNl
dFJlbmRlclRleHQoKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gMTY3NzYpCisrKyByZW5kZXJpbmcv
UmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgaW50IG5leHRPZmZzZXQoaW50IGN1cnJlbnQpIGNvbnN0OwogICAgIAogICAg
IGJvb2wgY29udGFpbnNSZXZlcnNlZFRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zUmV2
ZXJzZWRUZXh0OyB9Ci0gICAgCisgICAgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJldHVybiBt
X2lzU1ZHVGV4dDsgfQogcHVibGljOgogICAgIElubGluZVRleHRCb3ggKiBmaW5kTmV4dElubGlu
ZVRleHRCb3goIGludCBvZmZzZXQsIGludCAmcG9zICkgY29uc3Q7CiAKQEAgLTE4Myw2ICsxODMs
NyBAQCBwcm90ZWN0ZWQ6IC8vIG1lbWJlcnMKICAgICAvLyAyMiBiaXRzIGxlZnQKICAgICBtdXRh
YmxlIGJvb2wgbV9hbGxBc2NpaUNoZWNrZWQ6MTsKICAgICBtdXRhYmxlIGJvb2wgbV9hbGxBc2Np
aToxOworICAgIGJvb2wgbV9pc1NWR1RleHQ6MTsKICAgICBpbnQgbV9tb25vc3BhY2VDaGFyYWN0
ZXJXaWR0aDsKIH07CiAK
</data>
<flag name="review"
          id="3648"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10939</attachid>
            <date>2006-10-05 20:09:58 -0700</date>
            <delta_ts>2006-10-08 00:51:50 -0700</delta_ts>
            <desc>with selection issues fixed</desc>
            <filename>newtext6.patch</filename>
            <type>text/plain</type>
            <size>58707</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2ODE0KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY2LDEx
ICsxMjY2LDE1IEBACiAJCTkzRjE5QjE2MDgyNDVFNTkwMDFFOUFCQyAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
ICovOyB9OwogCQk5M0YxOUIxNzA4MjQ1RTU5MDAxRTlBQkMgLyogbGliaWN1Y29yZS5keWxpYiBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFEMzFB
MDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovOyB9OwogCQk5M0YxOUIxODA4
MjQ1RTU5MDAxRTlBQkMgLyogbGlieHNsdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MDYzMzA3MDczMUE3NzIwMERCMUZEMSAvKiBsaWJ4
c2x0LmR5bGliICovOyB9OworCQlBNzVFOTZFMDBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElu
bGluZUJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTc1RTk2REUwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLzsgfTsKKwkJ
QTc1RTk2RTEwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RTk2REYwQUMxMzY2RjAw
RUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwICovOyB9OwogCQlBNzYzOEE4QjA5OTU4RUE1
MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTg5MDk5NThFQTUwMDA3RTE0RiAvKiBX
S0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oICovOyB9OwogCQlBNzYzOEE4QzA5OTU4RUE1MDAwN0Ux
NEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QThBMDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3Bs
YWNlbWVudE1hcEZpbHRlci5tICovOyB9OwogCQlBNzYzOEE5MjA5OTU5MkMzMDAwN0UxNEYgLyog
V0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLzsgfTsKIAkJQTc2MzhBOTcwOTk1OTY1RDAw
MDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8q
IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oICovOyB9OwogCQlBNzYzOEE5ODA5OTU5NjVE
MDAwN0UxNEYgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTk2MDk5NTk2NUQwMDA3RTE0
RiAvKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwICovOyB9OworCQlBNzcxQ0IzRTBB
RDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzcxQ0IzQzBBRDMzQ0MyMDBERjlFMjUgLyogUmVu
ZGVyU1ZHSW5saW5lLmggKi87IH07CisJCUE3NzFDQjNGMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5k
ZXJTVkdJbmxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc3MUNCM0QwQUQzM0NDMjAwREY5RTI1IC8qIFJlbmRlclNWR0lubGluZS5jcHAgKi87
IH07CiAJCUE3Qjk3Qjc3MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVy
LmNpa2VybmVsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0I5N0I2NjA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5jaWtl
cm5lbCAqLzsgfTsKIAkJQTdCOTdCNzgwOTc5QzNBMTAwMEU4RUIxIC8qIFdLQ29tcG9uZW50TWVy
Z2VGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3Qjk3QjY3MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVyLmggKi87
IH07CiAJCUE3Qjk3Qjc5MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVy
Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I5N0I2
ODA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5tICovOyB9OwpAQCAt
MTI4OCw2ICsxMjkyLDEyIEBACiAJCUE3Qjk3Qjg1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxl
VHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3Qjk3Qjc0MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNm
ZXJGaWx0ZXIuY2lrZXJuZWwgKi87IH07CiAJCUE3Qjk3Qjg2MDk3OUMzQTEwMDBFOEVCMSAvKiBX
S1RhYmxlVHJhbnNmZXJGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3Qjk3Qjc1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNmZXJG
aWx0ZXIuaCAqLzsgfTsKIAkJQTdCOTdCODcwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFu
c2ZlckZpbHRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdCOTdCNzYwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5tICov
OyB9OworCQlBN0M1MTk0OTBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzUxOTQ3MEFDQTZB
RjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5oICovOyB9OworCQlBN0M1MTk0QTBBQ0E2QUYx
MDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDNTE5NDgwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLzsgfTsKKwkJQTdDNTFBNDYwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGlu
ZUZsb3dCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QzUxQTQ0MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi87IH07CisJ
CUE3QzUxQTQ3MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzUxQTQ1MEFDQTc0NDcw
MDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCAqLzsgfTsKKwkJQTdFMUREQkUwQUFFQ0RE
MTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTFEREJDMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5k
ZXJTVkdJbmxpbmVUZXh0LmggKi87IH07CisJCUE3RTFEREJGMEFBRUNERDEwMENBQ0QxQyAvKiBS
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3RTFEREJEMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcCAqLzsgfTsKIAkJQTgwRTZDRTQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBF
NkNCQTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmNwcCAqLzsgfTsKIAkJQTgwRTZD
RTUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQkIwQTE5ODlDQTAwN0ZC
OEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovOyB9OwogCQlBODBFNkNFNjBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0JDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmlt
aXRpdmVWYWx1ZS5oICovOyB9OwpAQCAtMzc0MCwxMSArMzc1MCwxNSBAQAogCQk5M0Y4QjMwNjBB
MzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3Jp
cHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0b3JKUy5wbTsgcGF0aCA9IC4uL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y4QjMwNzBB
MzAwRkVBMDBGNjFBQjggLyogZ2VuZXJhdGUtYmluZGluZ3MucGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5wZXJsOyBuYW1lID0gImdlbmVyYXRlLWJpbmRpbmdzLnBsIjsgcGF0aCA9ICJzY3JpcHRz
L2dlbmVyYXRlLWJpbmRpbmdzLnBsIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNG
OEIzMDgwQTMwMEZFQTAwRjYxQUI4IC8qIElETFN0cnVjdHVyZS5wbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnBlcmw7IG5hbWUgPSBJRExTdHJ1Y3R1cmUucG07IHBhdGggPSBzY3JpcHRzL0lETFN0
cnVjdHVyZS5wbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc1RTk2REUwQUMxMzY2
RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHUm9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzVFOTZERjBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSb290SW5saW5lQm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdL
RGlzcGxhY2VtZW50TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmls
dGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjM4QTkxMDk5NTkyQzMwMDA3
RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2
MzhBOTYwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzcxQ0IzQzBBRDMz
Q0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzcxQ0IzRDBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Qjk3QjY2MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0Nv
bXBvbmVudE1lcmdlRmlsdGVyLmNpa2VybmVsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXS0Nv
bXBvbmVudE1lcmdlRmlsdGVyLmNpa2VybmVsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0I5N0I2NzA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb21wb25lbnRNZXJnZUZpbHRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I5N0I2ODA5NzlDM0ExMDAwRThFQjEg
LyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpj
OyBwYXRoID0gV0tDb21wb25lbnRNZXJnZUZpbHRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzc2Miw2ICszNzc2LDEyIEBACiAJCUE3Qjk3Qjc0MDk3OUMzQTEwMDBFOEVCMSAv
KiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFdLVGFibGVUcmFuc2ZlckZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTdCOTdCNzUwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tUYWJsZVRyYW5zZmVyRmlsdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Qjk3Qjc2MDk3OUMzQTEwMDBFOEVC
MSAvKiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2Jq
YzsgcGF0aCA9IFdLVGFibGVUcmFuc2ZlckZpbHRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBN0M1MTk0NzBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHVFNwYW4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTE5NDgwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNW
R1RTcGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTFBNDQwQUNBNzQ0
NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHSW5saW5lRmxvd0JveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBN0M1MUE0NTBBQ0E3NDQ3MDA2RTJGQjkgLyogU1ZHSW5saW5lRmxvd0JveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdJbmxpbmVGbG93Qm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdFMUREQkMwQUFFQ0REMTAwQ0FDRDFDIC8qIFJl
bmRlclNWR0lubGluZVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU1ZHSW5saW5lVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0UxRERC
RDBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkEwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Zh
bHVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVmFs
dWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkIwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENTU0JvcmRlckltYWdlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODBFNkNCQzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZl
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1ByaW1pdGl2ZVZh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03Mjg3LDYgKzczMDcsMTYgQEAK
IAkJCQlGQUUwNDE4OTA5NzU5Njk0MDAwNTQwQkUgLyogUmVuZGVyU1ZHSW1hZ2UuaCAqLywKIAkJ
CQk2NTc0M0I1MDA5NzA3NkY4MDAxRTdDRUYgLyogUmVuZGVyU1ZHVGV4dC5jcHAgKi8sCiAJCQkJ
NjU3NDNCNTEwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuaCAqLywKKwkJCQlBN0Ux
RERCQzBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5oICovLAorCQkJCUE3
RTFEREJEMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCAqLywKKwkJ
CQlBNzVFOTZERTBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5oICovLAorCQkJ
CUE3NUU5NkRGMEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmNwcCAqLywKKwkJ
CQlBN0M1MTk0NzBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLywKKwkJCQlB
N0M1MTk0ODBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwICovLAorCQkJCUE3
QzUxQTQ0MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi8sCisJCQkJQTdD
NTFBNDUwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guY3BwICovLAorCQkJCUE3
NzFDQjNDMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5kZXJTVkdJbmxpbmUuaCAqLywKKwkJCQlBNzcx
Q0IzRDBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0ga2NhbnZhczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC04OTg2LDYg
KzkwMTYsNyBAQAogCQkJCTg1MDY1NkZFMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01NZWRpYUxpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDY1NzAwMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01TdHls
ZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTA2NTcwMjBBQUI0NzYzMDAyRDE1QzAgLyog
RE9NU3R5bGVTaGVldExpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3RTFEREJFMEFBRUNERDEw
MENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzQ3
MDZBQjBBQUNEODA5MDAyQzFENDMgLyogVGV4dERlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg1QUZBODIyMEFBRjUyOEEwMEU4NDMwNSAvKiBET01FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODVDN0Y0NDcwQUFGNzZEQzAwNDAxNEREIC8qIERPTUV2ZW50VGFyZ2V0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTkxMzQsNiArOTE2NSw5IEBACiAJCQkJQjIwMTExMDgwQUI3NzQwNTAwREIwRTY4
IC8qIEpTU1ZHQUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1M0JGNERCMEFCQjZCNTUw
MDg2NDdCQiAvKiBET01Ob2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTNCRjRFQjBBQkI2RTk3
MDA4NjQ3QkIgLyogRE9NTm9kZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3NUU5NkUw
MEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBN0M1MTk0OTBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUE3QzUxQTQ2MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NUJDQkMxMzBBQkJBODdEMDAzODExNjAgLyogRE9NSFRNTERv
Y3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBQTIxRUNDRDBBQkYwRkM2MDAyQjgzNEMgLyog
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUxRUU4MEMwQUJDQTI4
RjAwQTZBQTMzIC8qIERPTUFic3RyYWN0Vmlldy5oIGluIEhlYWRlcnMgKi8sCkBAIC05MzI4LDYg
KzkzNjIsNyBAQAogCQkJCTg1MDA0REE2MEFDRUVCNUEwMEM0MzhGNiAvKiBET01TVkdEb2N1bWVu
dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTAwNERBNzBBQ0VFQjVBMDBDNDM4RjYg
LyogRE9NU1ZHRWxsaXBzZUVsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUJC
NTQxOUYwQUNEREZFNDAwMjgyMEVCIC8qIFJlbmRlckxpc3RCb3guaCBpbiBIZWFkZXJzICovLAor
CQkJCUE3NzFDQjNFMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5kZXJTVkdJbmxpbmUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzOTJGMTQyMEFEMTg1RjQwMDY5MUJENCAvKiBSZW5kZXJDb3VudGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzkyRjE0NjBBRDE4NjBDMDA2OTFCRDQgLyogQ291bnRlclJl
c2V0Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5MkYxNEMwQUQxODYxQjAwNjkxQkQ0IC8q
IENvdW50ZXJOb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMjc3LDYgKzEwMzEyLDcgQEAKIAkJ
CQk4NTA2NTcwMTBBQUI0NzYzMDAyRDE1QzAgLyogRE9NU3R5bGVTaGVldC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTg1MDY1NzAzMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01TdHlsZVNoZWV0TGlzdC5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUUxRUJCQkQ0MEFBQzlCODcwMDFGRThFMiAvKiBDU1NDaGFy
c2V0UnVsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBN0UxRERCRjBBQUVDREQxMDBDQUNEMUMg
LyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NUFGQTgyMzBB
QUY1MjhBMDBFODQzMDUgLyogRE9NRXZlbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUM3RjQ5
MjBBQUY3OURDMDA0MDE0REQgLyogRE9NVUlFdmVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1
QzdGNUMwMEFBRkI3Q0QwMDQwMTRERCAvKiBET01NdXRhdGlvbkV2ZW50Lm1tIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMDQxMiw2ICsxMDQ0OCw5IEBACiAJCQkJQjIyMkY2OUMwQUI3NzFCODAwMjJFRkFE
IC8qIEpTU1ZHRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjAxMTEwNzBBQjc3NDA1
MDBEQjBFNjggLyogSlNTVkdBRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTNCRjRE
QzBBQkI2QjU1MDA4NjQ3QkIgLyogRE9NTm9kZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCUE3NUU5
NkUxMEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUE3QzUxOTRBMEFDQTZBRjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBN0M1MUE0NzBBQ0E3NDQ3MDA2RTJGQjkgLyogU1ZHSW5saW5lRmxv
d0JveC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NUJDQkMxNDBBQkJBODdEMDAzODExNjAgLyog
RE9NSFRNTERvY3VtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQUEyMUVDQ0EwQUJGMEZCQTAw
MkI4MzRDIC8qIENTU0N1cnNvckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUx
RUU4MEQwQUJDQTI4RjAwQTZBQTMzIC8qIERPTUFic3RyYWN0Vmlldy5tbSBpbiBTb3VyY2VzICov
LApAQCAtMTA0NTksNiArMTA0OTgsNyBAQAogCQkJCTg1MDA0RDk5MEFDRUVBRUYwMEM0MzhGNiAv
KiBET01TVkdEb2N1bWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1MDA0RDlCMEFDRUVBRUYw
MEM0MzhGNiAvKiBET01TVkdFbGxpcHNlRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUFC
QjU0MTlFMEFDRERGRTQwMDI4MjBFQiAvKiBSZW5kZXJMaXN0Qm94LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUE3NzFDQjNGMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5kZXJTVkdJbmxpbmUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM5MkYxNDQwQUQxODVGRTAwNjkxQkQ0IC8qIFJlbmRlckNvdW50
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MkYxNEEwQUQxODYxMzAwNjkxQkQ0IC8qIENv
dW50ZXJSZXNldE5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MkYxNTAwQUQxODYyMzAw
NjkxQkQ0IC8qIENvdW50ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogY3NzL3N2Zy5j
c3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gY3NzL3N2Zy5jc3MJKHJldmlzaW9uIDE2ODE0KQorKysgY3NzL3N2
Zy5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDMgKzQ5LDcgQEAgc3ZnLCBzeW1ib2wsIG1hcmtl
ciwgcGF0dGVybiB7CiB0ZXh0LCBmb3JlaWduT2JqZWN0IHsKICAgICBkaXNwbGF5OiBibG9jayAh
aW1wb3J0YW50CiB9CisKK3RleHQsIHRzcGFuIHsKKyAgIHdoaXRlLXNwYWNlOiBub3dyYXAgIWlt
cG9ydGFudAorfQpJbmRleDogZG9tL1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9UZXh0LmNw
cAkocmV2aXNpb24gMTY4MTQpCisrKyBkb20vVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5l
VGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE0OSw2ICsxNTAsMTEgQEAgYm9v
bCBUZXh0OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlIAogCiBSZW5kZXJPYmplY3QgKlRl
eHQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxl
KQogeworI2lmZGVmIFNWR19TVVBQT1JUCisgICAgaWYocGFyZW50Tm9kZSgpLT5pc1NWR0VsZW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR0lubGluZVRleHQodGhp
cywgc3RyKTsKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorICAgIAogICAgIHJldHVybiBuZXcgKGFy
ZW5hKSBSZW5kZXJUZXh0KHRoaXMsIHN0cik7CiB9CiAKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZH
SW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR0lubGluZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBrY2FudmFzL1JlbmRlclNWR0lubGluZS5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHBy
b2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVk
ZW50LmNhbnRlcmJ1cnkuYWMubno+LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgU1ZHX1NV
UFBPUlQKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKKyNpbmNsdWRlICJTVkdJbmxpbmVG
bG93Qm94LmgiCisjaW5jbHVkZSAiU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oIgorI2luY2x1
ZGUgIlNWR0xlbmd0aExpc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorUmVuZGVy
U1ZHSW5saW5lOjpSZW5kZXJTVkdJbmxpbmUoTm9kZSAqbikgOiBSZW5kZXJJbmxpbmUobikge30K
KyAgICAKK0lubGluZUJveCogUmVuZGVyU1ZHSW5saW5lOjpjcmVhdGVJbmxpbmVCb3goYm9vbCBt
YWtlUGxhY2VIb2xkZXJCb3gsIGJvb2wgaXNSb290TGluZUJveCwgYm9vbCBpc09ubHlSdW4pCit7
CisgICAgYXNzZXJ0KCEoIWlzUm9vdExpbmVCb3ggJiYgKGlzUmVwbGFjZWQoKSB8fCBtYWtlUGxh
Y2VIb2xkZXJCb3gpKSk7CisgICAgYXNzZXJ0KGlzSW5saW5lRmxvdygpKTsKKyAgICBJbmxpbmVG
bG93Qm94KiBmbG93Qm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBTVkdJbmxpbmVGbG93Qm94KHRo
aXMpOworICAgIGlmICghbV9maXJzdExpbmVCb3gpCisgICAgICAgIG1fZmlyc3RMaW5lQm94ID0g
bV9sYXN0TGluZUJveCA9IGZsb3dCb3g7CisgICAgZWxzZSB7CisgICAgICAgIG1fbGFzdExpbmVC
b3gtPnNldE5leHRMaW5lQm94KGZsb3dCb3gpOworICAgICAgICBmbG93Qm94LT5zZXRQcmV2aW91
c0xpbmVCb3gobV9sYXN0TGluZUJveCk7CisgICAgICAgIG1fbGFzdExpbmVCb3ggPSBmbG93Qm94
OworICAgIH0KKyAgICAgICAgCisgICAgcmV0dXJuIGZsb3dCb3g7Cit9CisKK30KKworI2VuZGlm
IC8vIFNWR19TVVBQT1JUCkluZGV4OiBrY2FudmFzL1JlbmRlclNWR0lubGluZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lLmgJKHJldmlzaW9uIDApCisrKyBrY2FudmFz
L1JlbmRlclNWR0lubGluZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvKgorICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBSZW5kZXJTVkdJbmxpbmVfSAorI2RlZmluZSBSZW5kZXJTVkdJbmxpbmVfSAorCisj
aWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgUmVuZGVyU1ZHSW5saW5lIDogcHVibGljIFJlbmRlcklubGluZSB7
CitwdWJsaWM6CisgICAgICAgIFJlbmRlclNWR0lubGluZShOb2RlKik7CisgICAgICAgIHZpcnR1
YWwgY29uc3QgY2hhciAqcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdJbmxp
bmUiOyB9CisgICAgICAgIHZpcnR1YWwgSW5saW5lQm94KiBjcmVhdGVJbmxpbmVCb3goYm9vbCBt
YWtlUGxhY2VIb2xkZXJCb3gsIGJvb2wgaXNSb290TGluZUJveCwgYm9vbCBpc09ubHlSdW4gPSBm
YWxzZSk7CisgICAgfTsKK30KKworI2VuZGlmIC8vIFNWR19TVVBQT1JUCisjZW5kaWYgLy8gIVJl
bmRlclNWR1RTcGFuX0gKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNpb24gMCkK
KysrIGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3Qu
CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNh
bnRlcmJ1cnkuYWMubno+LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywg
VVNBLgorICoKKyAqLworCisjaWZkZWYgU1ZHX1NVUFBPUlQKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgorI2luY2x1ZGUg
IktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworICAgIAorUmVuZGVyU1ZHSW5saW5lVGV4dDo6UmVuZGVyU1ZHSW5s
aW5lVGV4dChOb2RlKiBuLCBTdHJpbmdJbXBsKiBzdHIpIAorICAgIDogUmVuZGVyVGV4dChuLCBz
dHIpIHt9CisKK3ZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8
SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKK3sKKyAgICBGbG9hdFJlY3QgYWJzb2x1
dGVSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KEZsb2F0UmVjdCh0eCwgdHksIHdp
ZHRoKCksIGhlaWdodCgpKSk7CisgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoYWJz
b2x1dGVSZWN0KSk7Cit9CisKK0ludFJlY3QgUmVuZGVyU1ZHSW5saW5lVGV4dDo6c2VsZWN0aW9u
UmVjdCgpCit7CisgICAgSW50UmVjdCByZWN0ID0gUmVuZGVyVGV4dDo6c2VsZWN0aW9uUmVjdCgp
OworICAgIHJlY3QgPSBwYXJlbnQoKS0+YWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlY3Qp
OworICAgIHJldHVybiByZWN0OworfQorCit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVApJbmRl
eDoga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9S
ZW5kZXJTVkdJbmxpbmVUZXh0LmgJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1JlbmRlclNWR0lu
bGluZVRleHQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUg
MzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYg
UmVuZGVyU1ZHSW5saW5lVGV4dF9ICisjZGVmaW5lIFJlbmRlclNWR0lubGluZVRleHRfSAorCisj
aWZkZWYgU1ZHX1NVUFBPUlQKKworI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgUmVuZGVyU1ZHSW5saW5lVGV4dCA6IHB1YmxpYyBSZW5kZXJUZXh0
IHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdJbmxpbmVUZXh0KE5vZGUqLCBTdHJpbmdJbXBsKik7
CisgICAgdmlydHVhbCBjb25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJl
bmRlclNWR0lubGluZVRleHQiOyB9CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVj
dG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgSW50UmVj
dCBzZWxlY3Rpb25SZWN0KCk7Cit9OworfQorCisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKKworI2Vu
ZGlmIC8vICFSZW5kZXJTVkdJbmxpbmVUZXh0X0gKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHVFNw
YW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHVFNwYW4uY3BwCShyZXZpc2lv
biAwKQorKysga2NhbnZhcy9SZW5kZXJTVkdUU3Bhbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3Qu
CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNh
bnRlcmJ1cnkuYWMubno+LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgU1ZHX1NVUFBPUlQK
KyNpbmNsdWRlICJSZW5kZXJTVkdUU3Bhbi5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgorI2luY2x1ZGUgIktSZW5kZXJp
bmdEZXZpY2UuaCIKKyNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCisjaW5jbHVkZSAiU1ZH
SW5saW5lRmxvd0JveC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUg
IlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGhMaXN0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1JlbmRlclNWR1RTcGFuOjpSZW5kZXJTVkdU
U3BhbihOb2RlKiBuKSA6IFJlbmRlclNWR0lubGluZShuKSB7fQorCit2b2lkIFJlbmRlclNWR1RT
cGFuOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5
KQoreworICAgIElubGluZUZsb3dCb3gqIGluaXRGbG93ID0gZmlyc3RMaW5lQm94KCk7CisgICAg
RmxvYXRSZWN0IGJvdW5kcyh0eCArIGluaXRGbG93LT54UG9zKCksIHR5ICsgaW5pdEZsb3ctPnlQ
b3MoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRS
ZWN0KGFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChib3VuZHMpKSk7Cit9CisKKworfQorCisj
ZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHVFNwYW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR1RTcGFuLmgJKHJldmlzaW9uIDApCisrKyBrY2Fu
dmFzL1JlbmRlclNWR1RTcGFuLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisg
KiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFj
ZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLwor
CisjaWZuZGVmIFJlbmRlclNWR1RTcGFuX0gKKyNkZWZpbmUgUmVuZGVyU1ZHVFNwYW5fSAorCisj
aWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgUmVuZGVyU1ZHVFNwYW4gOiBwdWJsaWMgUmVuZGVyU1ZHSW5s
aW5lIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdUU3BhbihOb2RlKik7CisgICAgdmlydHVhbCBj
b25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1RTcGFuIjsg
fQorICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMs
IGludCB0eCwgaW50IHR5KTsKK307Cit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorI2VuZGlm
IC8vICFSZW5kZXJTVkdUU3Bhbl9ICkluZGV4OiBrY2FudmFzL1JlbmRlclNWR1RleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDE2ODE0KQor
Kysga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcg
QEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqICAg
ICAgICAgICAgICAgMjAwNiBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgorICog
ICAgICAgICAgICAgICAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnku
YWMubno+LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiwxMjQgKzI3LDI2IEBACiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHVGV4dC5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiS0NhbnZhc0NsaXBwZXIuaCIKLSNpbmNsdWRlICJLQ2FudmFzTWFza2VyLmgiCiAjaW5j
bHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0Rldmlj
ZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aExpc3QuaCIKICNpbmNsdWRlICJTVkdUZXh0RWxlbWVu
dC5oIgorI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIKICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVuZGVyU1ZHVGV4dDo6UmVuZGVyU1ZHVGV4
dChTVkdUZXh0RWxlbWVudCAqbm9kZSkgCitSZW5kZXJTVkdUZXh0OjpSZW5kZXJTVkdUZXh0KFNW
R1RleHRFbGVtZW50KiBub2RlKSAKICAgICA6IFJlbmRlckJsb2NrKG5vZGUpCiB7CiB9CiAKLUFm
ZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdUZXh0Ojp0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKQot
ewotICAgIGludCBvZmZzZXQgPSBiYXNlbGluZVBvc2l0aW9uKHRydWUsIHRydWUpOwotICAgIHJl
dHVybiBBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoMCwgLW9mZnNldCk7Ci19Ci0KLUFmZmlu
ZVRyYW5zZm9ybSBSZW5kZXJTVkdUZXh0Ojp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKQotewot
ICAgIFNWR1RleHRFbGVtZW50ICp0ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dEVsZW1lbnQqPihl
bGVtZW50KCkpOwotCi0gICAgU1ZHTGVuZ3RoKiB4T2Zmc2V0ID0gdGV4dC0+eCgpLT5nZXRGaXJz
dCgpLmdldCgpOwotICAgIFNWR0xlbmd0aCogeU9mZnNldCA9IHRleHQtPnkoKS0+Z2V0Rmlyc3Qo
KS5nZXQoKTsKLQotICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoeE9mZnNl
dCA/IHhPZmZzZXQtPnZhbHVlKCkgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeU9mZnNldCA/IHlPZmZzZXQtPnZhbHVlKCkgOiAwKTsKLX0KLQotdm9pZCBSZW5k
ZXJTVkdUZXh0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgsIGludCBw
YXJlbnRZKQotewotICAgIGlmIChwYWludEluZm8ucC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBLUmVuZGVyaW5nRGV2aWNlKiBkZXZpY2UgPSByZW5kZXJpbmdE
ZXZpY2UoKTsKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCA9IGRldmljZS0+
Y3VycmVudENvbnRleHQoKTsKLSAgICBib29sIHNob3VsZFBvcENvbnRleHQgPSBmYWxzZTsKLSAg
ICBpZiAoY29udGV4dCkKLSAgICAgICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgLy8gTmVlZCB0byBzZXQgdXAgS0NhbnZhcyByZW5kZXJpbmcgaWYgaXQgaGFzbid0
IGFscmVhZHkgYmVlbiBkb25lLgotICAgICAgICBjb250ZXh0ID0gcGFpbnRJbmZvLnAtPmNyZWF0
ZVJlbmRlcmluZ0RldmljZUNvbnRleHQoKTsKLSAgICAgICAgZGV2aWNlLT5wdXNoQ29udGV4dChj
b250ZXh0KTsKLSAgICAgICAgc2hvdWxkUG9wQ29udGV4dCA9IHRydWU7Ci0gICAgfQotICAgIAot
ICAgIGNvbnRleHQtPmNvbmNhdENUTShsb2NhbFRyYW5zZm9ybSgpKTsKLSAgICBjb250ZXh0LT5j
b25jYXRDVE0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKHBhcmVudFgsIHBhcmVudFkpKTsK
LSAgICBjb250ZXh0LT5jb25jYXRDVE0odHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkpOwotICAg
IGNvbnRleHQtPmNvbmNhdENUTSh0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKSk7Ci0gICAgCi0g
ICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICBj
b25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAg
ICAgICAgICAgCi0gICAgaWYgKEtDYW52YXNDbGlwcGVyKiBjbGlwcGVyID0gZ2V0Q2xpcHBlckJ5
SWQoZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmNsaXBQYXRoKCkuc3Vic3RyaW5nKDEpKSkKLSAgICAg
ICAgY2xpcHBlci0+YXBwbHlDbGlwKGJvdW5kaW5nQm94KTsKLQotICAgIGlmIChLQ2FudmFzTWFz
a2VyKiBtYXNrZXIgPSBnZXRNYXNrZXJCeUlkKGRvY3VtZW50KCksIHN2Z1N0eWxlLT5tYXNrRWxl
bWVudCgpLnN1YnN0cmluZygxKSkpCi0gICAgICAgIG1hc2tlci0+YXBwbHlNYXNrKGJvdW5kaW5n
Qm94KTsKLQotICAgIEtDYW52YXNGaWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5SWQoZG9jdW1l
bnQoKSwgc3ZnU3R5bGUtPmZpbHRlcigpLnN1YnN0cmluZygxKSk7Ci0gICAgaWYgKGZpbHRlcikK
LSAgICAgICAgZmlsdGVyLT5wcmVwYXJlRmlsdGVyKGJvdW5kaW5nQm94KTsKLSAgICAgICAgCi0g
ICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYyhkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCktPmNy
ZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKLSAgICBQYWludEluZm8gcGkgPSBwYWludEluZm87Ci0g
ICAgcGkucCA9IGMuZ2V0KCk7Ci0gICAgcGkuciA9ICh0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUo
KSAqIHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpICogYWJzb2x1dGVUcmFuc2Zvcm0oKSkuaW52
ZXJ0KCkubWFwUmVjdChwYWludEluZm8ucik7Ci0KLSAgICBmbG9hdCBvcGFjaXR5ID0gc3R5bGUo
KS0+b3BhY2l0eSgpOwotICAgIGlmIChvcGFjaXR5IDwgMS4wZikKLSAgICAgICAgLy8gRklYTUU6
IG9uY2UgUmVuZGVyU1ZHVGV4dDo6cmVsYXRpdmVCQm94KCkgaXMgZml4ZWQsIGNsaXBwaW5nIHRv
IHRoZSBjdXJyZW50IGJib3ggaGVyZSB3aWxsIHNhdmUgdGltZSB3aGVuIHJlbmRlcmluZyB0ZXh0
IHcvIG9wYWNpdHkKLSAgICAgICAgYy0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsK
LQotICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqZmlsbFBhaW50U2VydmVyID0gS1NWR1BhaW50
ZXJGYWN0b3J5OjpmaWxsUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcyk7Ci0gICAgaWYgKGZpbGxQ
YWludFNlcnZlcikgewotICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dCh0
cnVlKTsKLSAgICAgICAgaWYgKGZpbGxQYWludFNlcnZlci0+c2V0dXAoY29udGV4dCwgdGhpcywg
QVBQTFlfVE9fRklMTCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrOjpwYWludChwaSwgMCwg
MCk7Ci0gICAgICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnRlYXJkb3duKGNvbnRleHQsIHRoaXMs
IEFQUExZX1RPX0ZJTEwpOwotICAgICAgICB9Ci0gICAgICAgIGZpbGxQYWludFNlcnZlci0+c2V0
UGFpbnRpbmdUZXh0KGZhbHNlKTsKLSAgICB9Ci0gICAgCi0gICAgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyICpzdHJva2VQYWludFNlcnZlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tlUGFpbnRT
ZXJ2ZXIoc3R5bGUoKSwgdGhpcyk7Ci0gICAgaWYgKHN0cm9rZVBhaW50U2VydmVyKSB7Ci0gICAg
ICAgIHN0cm9rZVBhaW50U2VydmVyLT5zZXRQYWludGluZ1RleHQodHJ1ZSk7Ci0gICAgICAgIGlm
IChzdHJva2VQYWludFNlcnZlci0+c2V0dXAoY29udGV4dCwgdGhpcywgQVBQTFlfVE9fU1RST0tF
KSkgewotICAgICAgICAgICAgUmVuZGVyQmxvY2s6OnBhaW50KHBpLCAwLCAwKTsKLSAgICAgICAg
ICAgIHN0cm9rZVBhaW50U2VydmVyLT50ZWFyZG93bihjb250ZXh0LCB0aGlzLCBBUFBMWV9UT19T
VFJPS0UpOwotICAgICAgICB9Ci0gICAgICAgIHN0cm9rZVBhaW50U2VydmVyLT5zZXRQYWludGlu
Z1RleHQoZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChmaWx0ZXIpCi0gICAgICAgIGZpbHRlci0+
YXBwbHlGaWx0ZXIoYm91bmRpbmdCb3gpOwotCi0gICAgaWYgKG9wYWNpdHkgPCAxLjBmKQotICAg
ICAgICBjLT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwotCi0gICAgLy8gcmVzdG9yZSBkcmF3aW5n
IHN0YXRlCi0gICAgaWYgKCFzaG91bGRQb3BDb250ZXh0KQotICAgICAgICBwYWludEluZm8ucC0+
cmVzdG9yZSgpOwotICAgIGVsc2UgewotICAgICAgICBkZXZpY2UtPnBvcENvbnRleHQoKTsKLSAg
ICAgICAgZGVsZXRlIGNvbnRleHQ7Ci0gICAgfQotfQotCiB2b2lkIFJlbmRlclNWR1RleHQ6OmNv
bXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmIHIsIGJvb2wgZikKIHsKLSAgICBBZmZp
bmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gdHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5lKCkgKiB0cmFu
c2xhdGlvbkZvckF0dHJpYnV0ZXMoKSAqIGFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgQWZmaW5l
VHJhbnNmb3JtIHRyYW5zZm9ybSA9IGxvY2FsVHJhbnNmb3JtKCk7CiAgICAgciA9IHRyYW5zZm9y
bS5tYXBSZWN0KHIpOwotICAgIAogICAgIFJlbmRlckNvbnRhaW5lcjo6Y29tcHV0ZUFic29sdXRl
UmVwYWludFJlY3QociwgZik7CisgICAgciA9IHRyYW5zZm9ybS5pbnZlcnQoKS5tYXBSZWN0KHIp
OwogfQogCiBib29sIFJlbmRlclNWR1RleHQ6OnJlcXVpcmVzTGF5ZXIoKQpAQCAtMTYwLDkgKzYz
LDEyIEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKICAgICBib29sIGNoZWNrRm9yUmVw
YWludCA9IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpOwogICAgIGlmIChjaGVja0ZvclJl
cGFpbnQpCiAgICAgICAgIG9sZEJvdW5kcyA9IG1fYWJzb2x1dGVCb3VuZHM7Ci0KKyAgICBTVkdU
ZXh0RWxlbWVudCogdGV4dCA9IHN0YXRpY19jYXN0PFNWR1RleHRFbGVtZW50ICo+KGVsZW1lbnQo
KSk7CisgICAgaW50IHhPZmZzZXQgPSB0ZXh0LT54KCktPmdldEZpcnN0KCkgPyB0ZXh0LT54KCkt
PmdldEZpcnN0KCktPnZhbHVlKCkgOiAwOworICAgIGludCB5T2Zmc2V0ID0gdGV4dC0+eSgpLT5n
ZXRGaXJzdCgpID8gdGV4dC0+eSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKKyAgICB0aGlz
LT5zZXRQb3MoeE9mZnNldCwgeU9mZnNldCk7CiAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwot
CisgICAgCiAgICAgbV9hYnNvbHV0ZUJvdW5kcyA9IGdldEFic29sdXRlUmVwYWludFJlY3QoKTsK
IAogICAgIGJvb2wgcmVwYWludGVkID0gZmFsc2U7CkBAIC0xNzIsMTEgKzc4LDI1IEBAIHZvaWQg
UmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAK
K0lubGluZUJveCogUmVuZGVyU1ZHVGV4dDo6Y3JlYXRlSW5saW5lQm94KGJvb2wgbWFrZVBsYWNl
SG9sZGVyQm94LCBib29sIGlzUm9vdExpbmVCb3gsIGJvb2wgaXNPbmx5UnVuKQoreworICAgIGFz
c2VydCghaXNJbmxpbmVGbG93KCkpOworICAgIElubGluZUZsb3dCb3gqIGZsb3dCb3ggPSBuZXcg
KHJlbmRlckFyZW5hKCkpIFNWR1Jvb3RJbmxpbmVCb3godGhpcyk7CisgICAgCisgICAgaWYgKCFt
X2ZpcnN0TGluZUJveCkKKyAgICAgICAgbV9maXJzdExpbmVCb3ggPSBtX2xhc3RMaW5lQm94ID0g
Zmxvd0JveDsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9sYXN0TGluZUJveC0+c2V0TmV4dExpbmVC
b3goZmxvd0JveCk7CisgICAgICAgIGZsb3dCb3gtPnNldFByZXZpb3VzTGluZUJveChtX2xhc3RM
aW5lQm94KTsKKyAgICAgICAgbV9sYXN0TGluZUJveCA9IGZsb3dCb3g7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBmbG93Qm94OworfQorCiBib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50
KE5vZGVJbmZvJiBpbmZvLCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVz
dEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIEFmZmluZVRyYW5zZm9ybSB0b3RhbFRyYW5z
Zm9ybSA9IHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpOwotICAgIHRvdGFsVHJhbnNmb3JtICo9
IHRyYW5zbGF0aW9uVG9wVG9CYXNlbGluZSgpOwotICAgIHRvdGFsVHJhbnNmb3JtICo9IGFic29s
dXRlVHJhbnNmb3JtKCk7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRvdGFsVHJhbnNmb3JtID0gYWJz
b2x1dGVUcmFuc2Zvcm0oKTsKICAgICBkb3VibGUgbG9jYWxYLCBsb2NhbFk7CiAgICAgdG90YWxU
cmFuc2Zvcm0uaW52ZXJ0KCkubWFwKF94LCBfeSwgJmxvY2FsWCwgJmxvY2FsWSk7CiAgICAgcmV0
dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChpbmZvLCAoaW50KWxvY2FsWCwgKGludClsb2Nh
bFksIF90eCwgX3R5LCBoaXRUZXN0QWN0aW9uKTsKQEAgLTE4NCwxMSArMTA0LDIxIEBAIGJvb2wg
UmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQoTm9kZUluZm8KIAogdm9pZCBSZW5kZXJTVkdUZXh0
OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQog
ewotICAgIEFmZmluZVRyYW5zZm9ybSBtYXQgPSB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKTsK
LSAgICBtYXQgKj0gdHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5lKCk7Ci0gICAgbWF0ICo9IGFic29s
dXRlVHJhbnNmb3JtKCk7CisgICAgZm9yIChJbmxpbmVCb3gqIGJveCA9IG1fZmlyc3RMaW5lQm94
OyBib3g7IGJveCA9IGJveC0+bV9uZXh0KSB7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBib3hU
cmFuc2Zvcm0gPSBib3gtPm9iamVjdCgpLT5hYnNvbHV0ZVRyYW5zZm9ybSgpOworICAgICAgICBG
bG9hdFJlY3QgYm94UmVjdCA9IEZsb2F0UmVjdCh4UG9zKCkgKyBib3gtPnhQb3MoKSwgeVBvcygp
ICsgYm94LT55UG9zKCksIGJveC0+d2lkdGgoKSwgYm94LT5oZWlnaHQoKSk7CisgICAgICAgIHJl
Y3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KGJveFRyYW5zZm9ybS5tYXBSZWN0KGJveFJlY3Qp
KSk7CisgICAgfQorfQogCi0gICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QobWF0Lm1h
cFJlY3QoRmxvYXRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSkpKTsKK3ZvaWQgUmVuZGVy
U1ZHVGV4dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBfdHgsIGludCBfdHkpCit7
ICAgIAorICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgpOwor
ICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIHBpID0gcGFpbnRJbmZvOworICAgIE93blB0cjxH
cmFwaGljc0NvbnRleHQ+IGMoZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpLT5jcmVhdGVHcmFwaGlj
c0NvbnRleHQoKSk7CisgICAgcGkucCA9IGMuZ2V0KCk7CisgICAgcGkuciA9IChhYnNvbHV0ZVRy
YW5zZm9ybSgpKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5mby5yKTsKKyAgICBSZW5kZXJCbG9j
azo6cGFpbnQocGksIF90eCwgX3R5KTsKIH0KIAogfQpJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdU
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmgJKHJldmlzaW9uIDE2
ODE0KQorKysga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKIAogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMzQsMjUgKzM1LDIxIEBAIGNsYXNzIFNWR1RleHRFbGVtZW50OwogY2xhc3Mg
UmVuZGVyU1ZHVGV4dCA6IHB1YmxpYyBSZW5kZXJCbG9jawogewogcHVibGljOgotICAgIFJlbmRl
clNWR1RleHQoU1ZHVGV4dEVsZW1lbnQgKm5vZGUpOworICAgIFJlbmRlclNWR1RleHQoU1ZHVGV4
dEVsZW1lbnQqIG5vZGUpOwogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyICpyZW5kZXJOYW1lKCkg
Y29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1RleHQiOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50
KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7CiAgICAgCiAgICAgdmlydHVh
bCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5z
Zm9ybTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRMb2NhbFRyYW5zZm9ybShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgfQotICAgIAor
ICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpOwog
ICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChOb2RlSW5mbyYsIGludCB4LCBpbnQgeSwgaW50
IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwotCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRl
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOwotCiAgICAgdmlydHVhbCB2
b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmIHIsIGJvb2wgZik7CiAgICAg
dmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7
CiAgICAgCisgICAgdmlydHVhbCBJbmxpbmVCb3gqIGNyZWF0ZUlubGluZUJveChib29sIG1ha2VQ
bGFjZUhvbGRlckJveCwgYm9vbCBpc1Jvb3RMaW5lQm94LCBib29sIGlzT25seVJ1biA9IGZhbHNl
KTsKICBwcml2YXRlOgotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2xhdGlvblRvcFRvQmFzZWxp
bmUoKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7CiAg
ICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogICAgIEludFJlY3QgbV9hYnNvbHV0ZUJv
dW5kczsKIH07CkluZGV4OiBrY2FudmFzL1NWR0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtjYW52YXMvU1ZHSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFz
L1NWR0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOSBAQAorLyoK
KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5u
ej4uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICov
CisKKworI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJTVkdJbmxpbmVGbG93Qm94LmgiCisjaW5j
bHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgorI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHls
ZS5oIgorI2luY2x1ZGUgIktDYW52YXNDbGlwcGVyLmgiCisjaW5jbHVkZSAiS0NhbnZhc01hc2tl
ci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKKwor
dm9pZCBTVkdJbmxpbmVGbG93Qm94OjpwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFp
bnRJbmZvLCBpbnQgdHgsIGludCB0eSkgCit7CisgICAgcGFpbnRTVkdJbmxpbmVGbG93KHRoaXMs
IG9iamVjdCgpLCBwYWludEluZm8sIHR4LCB0eSk7Cit9CisKK3ZvaWQgcGFpbnRTVkdJbmxpbmVG
bG93KElubGluZUZsb3dCb3gqIGZsb3csIFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKK3sKKyAgICBpZiAocGFp
bnRJbmZvLnAtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IEtSZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgpOworICAgIEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0ID0gZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpOwor
ICAgIGJvb2wgc2hvdWxkUG9wQ29udGV4dCA9IGZhbHNlOworICAgIGlmIChjb250ZXh0KQorICAg
ICAgICBwYWludEluZm8ucC0+c2F2ZSgpOworICAgIGVsc2UgeworICAgICAgICAvLyBOZWVkIHRv
IHNldCB1cCBLQ2FudmFzIHJlbmRlcmluZyBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRvbmUu
CisgICAgICAgIGNvbnRleHQgPSBwYWludEluZm8ucC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dCgpOworICAgICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KGNvbnRleHQpOworICAgICAgICBz
aG91bGRQb3BDb250ZXh0ID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8gcGkgPSBwYWludEluZm87CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYyhk
ZXZpY2UtPmN1cnJlbnRDb250ZXh0KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKKyAgICBw
aS5wID0gYy5nZXQoKTsKKyAgICBpZiAoIWZsb3ctPmlzUm9vdElubGluZUJveCgpKQorICAgICAg
ICBwaS5yID0gKG9iamVjdC0+bG9jYWxUcmFuc2Zvcm0oKSkuaW52ZXJ0KCkubWFwUmVjdChwYWlu
dEluZm8ucik7CisKKyAgICBjb250ZXh0LT5jb25jYXRDVE0ob2JqZWN0LT5sb2NhbFRyYW5zZm9y
bSgpKTsKKyAgICAKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3godHgrZmxvdy0+eFBvcygpICwg
dHkrZmxvdy0+eVBvcygpLCBmbG93LT53aWR0aCgpLCBmbG93LT5oZWlnaHQoKSk7CisgICAgCisg
ICAgZmxvYXQgb3BhY2l0eSA9IG9iamVjdC0+c3R5bGUoKS0+b3BhY2l0eSgpOworICAgIGlmIChv
cGFjaXR5IDwgMS4wZikgeworICAgICAgICBjLT5hZGRDbGlwKGVuY2xvc2luZ0ludFJlY3QoYm91
bmRpbmdCb3gpKTsKKyAgICAgICAgYy0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsK
KyAgICB9CisgICAgCisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gb2JqZWN0
LT5zdHlsZSgpLT5zdmdTdHlsZSgpOworICAgIAorICAgIEtDYW52YXNGaWx0ZXIqIGZpbHRlciA9
IGdldEZpbHRlckJ5SWQob2JqZWN0LT5kb2N1bWVudCgpLCBzdmdTdHlsZS0+ZmlsdGVyKCkuc3Vi
c3RyaW5nKDEpKTsKKyAgICBpZiAoZmlsdGVyKQorICAgICAgICBmaWx0ZXItPnByZXBhcmVGaWx0
ZXIoYm91bmRpbmdCb3gpOworICAgIAorICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciogZmlsbFBh
aW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRTZXJ2ZXIob2JqZWN0LT5z
dHlsZSgpLCBvYmplY3QpOworICAgIGlmIChmaWxsUGFpbnRTZXJ2ZXIpIHsKKyAgICAgICAgZmls
bFBhaW50U2VydmVyLT5zZXRQYWludGluZ1RleHQodHJ1ZSk7CisgICAgICAgIC8vIGZpbGxQYWlu
dFNlcnZlci0+c2V0QWN0aXZlQ2xpZW50KHRoaXMpOworICAgICAgICBpZiAoZmlsbFBhaW50U2Vy
dmVyLT5zZXR1cChjb250ZXh0LCBvYmplY3QsIEFQUExZX1RPX0ZJTEwpKSB7CisgICAgICAgICAg
ICBmbG93LT5wYXJlbnRQYWludE1ldGhvZChwaSwgdHgsIHR5KTsKKyAgICAgICAgICAgIGZpbGxQ
YWludFNlcnZlci0+dGVhcmRvd24oY29udGV4dCwgb2JqZWN0LCBBUFBMWV9UT19GSUxMKTsKKyAg
ICAgICAgfQorICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dChmYWxzZSk7
CisgICAgfQorICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciogc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBL
U1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKG9iamVjdC0+c3R5bGUoKSwgb2Jq
ZWN0KTsKKyAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKKyAgICAgICAgc3Ryb2tlUGFpbnRT
ZXJ2ZXItPnNldFBhaW50aW5nVGV4dCh0cnVlKTsKKyAgICAgICAgLy8gc3Ryb2tlUGFpbnRTZXJ2
ZXItPnNldEFjdGl2ZUNsaWVudCh0aGlzKTsKKyAgICAgICAgaWYgKHN0cm9rZVBhaW50U2VydmVy
LT5zZXR1cChjb250ZXh0LCBvYmplY3QsIEFQUExZX1RPX1NUUk9LRSkpIHsKKyAgICAgICAgICAg
IGZsb3ctPnBhcmVudFBhaW50TWV0aG9kKHBpLCB0eCwgdHkpOworICAgICAgICAgICAgc3Ryb2tl
UGFpbnRTZXJ2ZXItPnRlYXJkb3duKGNvbnRleHQsIG9iamVjdCwgQVBQTFlfVE9fU1RST0tFKTsK
KyAgICAgICAgfQorICAgICAgICBzdHJva2VQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KGZh
bHNlKTsKKyAgICB9CisgICAgCisgICAgaWYgKGZpbHRlcikgCisgICAgICAgIGZpbHRlci0+YXBw
bHlGaWx0ZXIoYm91bmRpbmdCb3gpOworICAgIAorICAgIGlmIChvcGFjaXR5IDwgMS4wZikKKyAg
ICAgICAgYy0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKworICAgIC8vIHJlc3RvcmUgZHJhd2lu
ZyBzdGF0ZQorICAgIGlmICghc2hvdWxkUG9wQ29udGV4dCkKKyAgICAgICAgcGFpbnRJbmZvLnAt
PnJlc3RvcmUoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZGV2aWNlLT5wb3BDb250ZXh0KCk7Cisg
ICAgICAgIGRlbGV0ZSBjb250ZXh0OworICAgIH0KK30KKworfQorI2VuZGlmIC8vIFNWR19TVVBQ
T1JUCkluZGV4OiBrY2FudmFzL1NWR0lubGluZUZsb3dCb3guaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2Fu
dmFzL1NWR0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvU1ZHSW5saW5l
Rmxvd0JveC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAz
MzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBT
VkdJbmxpbmVGbG93Qm94X0gKKyNkZWZpbmUgU1ZHSW5saW5lRmxvd0JveF9ICisKKyNpZmRlZiBT
VkdfU1VQUE9SVAorCisjaW5jbHVkZSAiSW5saW5lRmxvd0JveC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZQoreworCit2b2lkIHBhaW50U1ZHSW5saW5lRmxvdyhJbmxpbmVGbG93Qm94KiBmbG93LCBS
ZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGludCBfdHgs
IGludCBfdHkpOworCitjbGFzcyBTVkdJbmxpbmVGbG93Qm94IDogcHVibGljIElubGluZUZsb3dC
b3ggeworcHVibGljOgorICAgIFNWR0lubGluZUZsb3dCb3goUmVuZGVyT2JqZWN0KiBvYmopIDog
SW5saW5lRmxvd0JveChvYmopCisgICAgeworICAgICAgICBtX2lzU1ZHRmxvdyA9IHRydWU7Cisg
ICAgfQorICAgIHZpcnR1YWwgdm9pZCBwYXJlbnRQYWludE1ldGhvZChSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSl7IElubGluZUZsb3dCb3g6OnBhaW50KGksIF90
eCwgX3R5KTsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgaSwgaW50IF90eCwgaW50IF90eSk7Cit9OworCit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9S
VAorCisjZW5kaWYgLy8gIVNWR0lubGluZUZsb3dCb3hfSApJbmRleDoga2NhbnZhcy9TVkdSb290
SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1NWR1Jvb3RJbmxpbmVCb3guY3Bw
CShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9TVkdSb290SW5saW5lQm94LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2
QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKworI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCisjaW5jbHVkZSAi
U1ZHSW5saW5lRmxvd0JveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZQoreworCit2b2lkIFNWR1Jv
b3RJbmxpbmVCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGlu
dCBwYXJlbnRYLCBpbnQgcGFyZW50WSkgCit7CisgICAgcGFpbnRTVkdJbmxpbmVGbG93KHRoaXMs
IG9iamVjdCgpLCBwYWludEluZm8sIHBhcmVudFgsIHBhcmVudFkpOworfQorCit9CisjZW5kaWYg
Ly8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtjYW52YXMvU1ZHUm9vdElubGluZUJveC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtjYW52YXMvU1ZHUm9vdElubGluZUJveC5oCShyZXZpc2lvbiAwKQorKysga2NhbnZh
cy9TVkdSb290SW5saW5lQm94LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFj
ZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLwor
CisjaWZuZGVmIFNWR1Jvb3RJbmxpbmVCb3hfSAorI2RlZmluZSBTVkdSb290SW5saW5lQm94X0gK
KworI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlCit7CisgICAgCitjbGFzcyBTVkdSb290SW5saW5lQm94IDogcHVibGlj
IFJvb3RJbmxpbmVCb3ggeworcHVibGljOgorICAgIFNWR1Jvb3RJbmxpbmVCb3goUmVuZGVyT2Jq
ZWN0KiBvYmopIDogUm9vdElubGluZUJveChvYmopCisgICAgeworICAgICAgICBtX2lzU1ZHRmxv
dyA9IHRydWU7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwYXJlbnRQYWludE1ldGhvZChSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSl7IFJvb3RJbmxpbmVCb3g6
OnBhaW50KGksIF90eCwgX3R5KTsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludChSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSk7Cit9OworCit9CisKKyNlbmRpZiAv
LyBTVkdfU1VQUE9SVAorCisjZW5kaWYgLy8gIVJvb3RJbmxpbmVCb3hfSApJbmRleDoga3N2ZzIv
c3ZnL1NWR1RSZWZFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVFJlZkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNjgxNCkKKysrIGtzdmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJTVkdOYW1lcy5o
IgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5oIgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNzksNyArNzksNyBAQCBib29sIFNWR1RSZWZF
bGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlCiAKIFJlbmRlck9iamVjdCAqU1ZHVFJlZkVsZW1l
bnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKikKIHsK
LSAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVySW5saW5lKHRoaXMpOworICAgIHJldHVybiBu
ZXcgKGFyZW5hKSBSZW5kZXJTVkdJbmxpbmUodGhpcyk7CiB9CiAKIC8vIHZpbTp0cz00Om5vZXQK
SW5kZXg6IGtzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcy
L3N2Zy9TVkdUU3BhbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjgxNCkKKysrIGtzdmcyL3N2Zy9T
VkdUU3BhbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaWZk
ZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdUU3BhbkVsZW1lbnQuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUgIlJlbmRlclNW
R1RTcGFuLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00Nyw3ICs0Nyw3IEBA
IGJvb2wgU1ZHVFNwYW5FbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVIKIAogUmVuZGVyT2JqZWN0
ICpTVkdUU3BhbkVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVu
ZGVyU3R5bGUgKikKIHsKLSAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVySW5saW5lKHRoaXMp
OworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdUU3Bhbih0aGlzKTsKIH0KIAogLy8g
dmltOnRzPTQ6bm9ldApJbmRleDogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMTY4MTQpCisrKyBy
ZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDEx
IEBACiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxl
Q2VsbC5oIgogCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJTVkdUZXh0UG9zaXRpb25p
bmdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgorI2VuZGlmIC8vIFNWR19T
VVBQT1JUCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTIzOCw4ICsyNDMsMTM3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6ZGV0ZXJtaW5lU3BhY2luZ0Zv
ckYKICAgICB9CiB9CiAKKworI2lmZGVmIFNWR19TVVBQT1JUCisKK3N0YXRpYyBib29sIHRyYW5z
bGF0ZUJveChJbmxpbmVCb3gqIGJveCwgaW50IHgsIGludCB5LCBib29sIHRvcExldmVsID0gdHJ1
ZSkKK3sgICAgCisgICAgaWYgKGJveC0+b2JqZWN0KCktPmlzVGV4dCgpKSAKKyAgICB7CisgICAg
ICAgIGJveC0+c2V0WFBvcyhib3gtPnhQb3MoKSArIHgpOworICAgICAgICBib3gtPnNldFlQb3Mo
Ym94LT55UG9zKCkgKyB5KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgSW5saW5l
Rmxvd0JveCogZmxvdyA9IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihib3gpOworICAgICAg
ICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudCAqPihib3gtPm9iamVjdCgpLT5lbGVtZW50KCkpOworICAgICAgICAK
KyAgICAgICAgaWYgKHRvcExldmVsfHwhKHRleHQtPngoKS0+Z2V0Rmlyc3QoKSB8fCB0ZXh0LT55
KCktPmdldEZpcnN0KCkgfHwgCisgICAgICAgICAgICAgICAgICAgICAgICAodGV4dC0+ZHgoKS0+
Z2V0Rmlyc3QoKSAmJiB0ZXh0LT5keCgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpKSB8fC8vZHggZXhp
c3RzIGFuZCBpcyBub24temVybworICAgICAgICAgICAgICAgICAgICAgICAgKHRleHQtPmR5KCkt
PmdldEZpcnN0KCkgJiYgdGV4dC0+ZHkoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSkpKSAvL2RpdHRv
IGZvciBkeQorICAgICAgICB7CisgICAgICAgICAgICBib3gtPnNldFhQb3MoYm94LT54UG9zKCkg
KyB4KTsKKyAgICAgICAgICAgIGJveC0+c2V0WVBvcyhib3gtPnlQb3MoKSArIHkpOworICAgICAg
ICAgICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmbG93LT5maXJzdENoaWxkKCk7IGN1cnI7IGN1
cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIAorICAgICAgICAgICAgICAgIGlmICghdHJhbnNsYXRl
Qm94KGN1cnIsIHgsIHksIGZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitpbnQgSW5saW5lRmxv
d0JveDo6cGxhY2VQb3NpdGlvbmVkQm94ZXNIb3Jpem9udGFsbHkoaW50IHgsIGludCYgbGVmdFBv
c2l0aW9uLCBpbnQmIHJpZ2h0UG9zaXRpb24sIGludCAmbGVmdEFsaWduLCBpbnQgJnJpZ2h0QWxp
Z24sIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcsIGludCB4UG9zLCBib29sIHBvc2l0aW9uZWQpCit7
CisgICAgLy9pbnQgc3RhcnR4ID0geDsKKyAgICBpbnQgbW4gPSBJTlRfTUFYOworICAgIGludCBt
eCA9IElOVF9NSU47CisgICAgaW50IGFtbiA9IElOVF9NQVg7CisgICAgaW50IGFteCA9IElOVF9N
SU47CisgICAgaW50IHN0YXJ0eCA9IHg7CisgICAgYm9vbCBzZWVuUG9zaXRpb25lZEVsZW1lbnQg
PSBmYWxzZTsKKyAgICBzZXRYUG9zKHgpOworICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gZmly
c3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgpKSAKKyAgICB7CisgICAg
ICAgIGlmIChjdXJyLT5vYmplY3QoKS0+aXNUZXh0KCkpIHsKKyAgICAgICAgICAgIG1uID0gbWlu
KG1uLCB4KTsKKyAgICAgICAgICAgIGFtbiA9IG1pbihhbW4sIHgpOworICAgICAgICAgICAgSW5s
aW5lVGV4dEJveCogdGV4dCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihjdXJyKTsKKyAg
ICAgICAgICAgIFJlbmRlclRleHQqIHJ0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHRleHQt
Pm9iamVjdCgpKTsKKyAgICAgICAgICAgIGlmIChydC0+bGVuZ3RoKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAobmVlZHNXb3JkU3BhY2luZyAmJiBEZXByZWNhdGVkQ2hhcihydC0+dGV4dCgpW3Rl
eHQtPnN0YXJ0KCldKS5pc1NwYWNlKCkpCisgICAgICAgICAgICAgICAgICAgIHggKz0gcnQtPmZv
bnQobV9maXJzdExpbmUpLT53b3JkU3BhY2luZygpOworICAgICAgICAgICAgICAgIG5lZWRzV29y
ZFNwYWNpbmcgPSAhRGVwcmVjYXRlZENoYXIocnQtPnRleHQoKVt0ZXh0LT5lbmQoKV0pLmlzU3Bh
Y2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRleHQtPnNldFhQb3MoeCk7CisgICAg
ICAgICAgICB4ICs9IHRleHQtPndpZHRoKCk7CisgICAgICAgICAgICBteCA9IG1heChteCwgeCk7
CisgICAgICAgICAgICBhbXggPSBtYXgoYW14LCB4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGFzc2VydChjdXJyLT5vYmplY3QoKS0+aXNJbmxpbmVGbG93KCkpOworICAgICAgICAg
ICAgSW5saW5lRmxvd0JveCogZmxvdyA9IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihjdXJy
KTsKKyAgICAgICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqIHRleHQgPSBzdGF0aWNf
Y2FzdDxTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50ICo+KGZsb3ctPm9iamVjdCgpLT5lbGVtZW50
KCkpOworICAgICAgICAgICAgeCArPSB0ZXh0LT5keCgpLT5nZXRGaXJzdCgpID8gdGV4dC0+ZHgo
KS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSA6IDA7CisgICAgICAgICAgICBpZiAodGV4dC0+eCgpLT5n
ZXRGaXJzdCgpKQorICAgICAgICAgICAgICAgIHggPSB0ZXh0LT54KCktPmdldEZpcnN0KCktPnZh
bHVlKCkgLSB4UG9zOworICAgICAgICAgICAgaWYgKHRleHQtPngoKS0+Z2V0Rmlyc3QoKSB8fCB0
ZXh0LT55KCktPmdldEZpcnN0KCkgfHwgCisgICAgICAgICAgICAgICAgKHRleHQtPmR4KCktPmdl
dEZpcnN0KCkgJiYgdGV4dC0+ZHgoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSkgfHwKKyAgICAgICAg
ICAgICAgICAodGV4dC0+ZHkoKS0+Z2V0Rmlyc3QoKSAmJiB0ZXh0LT5keSgpLT5nZXRGaXJzdCgp
LT52YWx1ZSgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzZWVuUG9zaXRpb25l
ZEVsZW1lbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIG5lZWRzV29yZFNwYWNpbmcgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBpbnQgaWdub3JlWCwgaWdub3JlWTsKKyAgICAgICAgICAgICAg
ICB4ID0gZmxvdy0+cGxhY2VQb3NpdGlvbmVkQm94ZXNIb3Jpem9udGFsbHkoeCwgbW4sIG14LCBp
Z25vcmVYLCBpZ25vcmVZLCBuZWVkc1dvcmRTcGFjaW5nLCB4UG9zLCB0cnVlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHNlZW5Qb3NpdGlvbmVkRWxlbWVudCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgX2FtbiwgX2FteDsgLy90aHJvdyBhd2F5IHRo
ZXNlIHZhbHVlcworICAgICAgICAgICAgICAgIHggPSBmbG93LT5wbGFjZVBvc2l0aW9uZWRCb3hl
c0hvcml6b250YWxseSh4LCBtbiwgbXgsIF9hbW4sIF9hbXgsIG5lZWRzV29yZFNwYWNpbmcsIHhQ
b3MsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB4ID0gZmxvdy0+cGxhY2VQb3NpdGlvbmVkQm94ZXNIb3Jpem9udGFsbHkoeCwgbW4sIG14
LCBhbW4sIGFteCwgbmVlZHNXb3JkU3BhY2luZywgeFBvcywgZmFsc2UpOworICAgICAgICB9Cisg
ICAgfQorICAgIGlmIChtbiA+IG14KQorICAgICAgICBtbiA9IG14ID0gc3RhcnR4OworICAgIGlm
IChhbW4gPiBhbXgpCisgICAgICAgIGFtbiA9IGFteCA9IHN0YXJ0eDsKKyAgICAKKyAgICBpbnQg
d2lkdGggPSBteCAtIG1uOworICAgIHNldFdpZHRoKHdpZHRoKTsKKyAgICBpbnQgYXdpZHRoID0g
YW14IC0gYW1uOworICAgIGludCBkeD0wOworICAgIGlmIChwb3NpdGlvbmVkKSB7CisgICAgICAg
IHN3aXRjaCAob2JqZWN0KCktPnN0eWxlKCktPnN2Z1N0eWxlKCktPnRleHRBbmNob3IoKSkgCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVEFfTUlERExFOgorICAgICAgICAgICAgICAgIHRy
YW5zbGF0ZUJveCh0aGlzLCBkeCA9IC1hd2lkdGgvMiwgMCk7ICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRBX0VORDoKKyAgICAgICAgICAgICAg
ICB0cmFuc2xhdGVCb3godGhpcywgZHggPSAtYXdpZHRoLCAwKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgVEFfU1RBUlQ6CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChkeCkgCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHggKz0gZHg7CisgICAgICAgICAgICBtbiArPSBkeDsKKyAgICAg
ICAgICAgIG14ICs9IGR4OworICAgICAgICB9CisgICAgfQorICAgIGxlZnRQb3NpdGlvbiA9IG1p
bihsZWZ0UG9zaXRpb24sIG1uKTsKKyAgICByaWdodFBvc2l0aW9uID0gbWF4KHJpZ2h0UG9zaXRp
b24sIG14KTsKKyAgICBsZWZ0QWxpZ24gPSBtaW4obGVmdEFsaWduLCBhbW4pOworICAgIHJpZ2h0
QWxpZ24gPSBtYXgocmlnaHRBbGlnbiwgYW14KTsKKyAgICAKKyAgICByZXR1cm4geDsKK30KKyNl
bmRpZiAvLyBTVkdfU1VQUE9SVAorCiBpbnQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0hvcml6
b250YWxseShpbnQgeCwgaW50JiBsZWZ0UG9zaXRpb24sIGludCYgcmlnaHRQb3NpdGlvbiwgYm9v
bCYgbmVlZHNXb3JkU3BhY2luZykKIHsKKyNpZmRlZiBTVkdfU1VQUE9SVAorICAgIGlmIChtX2lz
U1ZHRmxvdykgCisgICAgeworICAgICAgICBpbnQgaWdub3JlWCwgaWdub3JlWTsKKyAgICAgICAg
eCA9IHBsYWNlUG9zaXRpb25lZEJveGVzSG9yaXpvbnRhbGx5KHgsIGxlZnRQb3NpdGlvbiwgcmln
aHRQb3NpdGlvbiwgaWdub3JlWCwgaWdub3JlWSwgbmVlZHNXb3JkU3BhY2luZywgb2JqZWN0KCkt
PnhQb3MoKSwgdHJ1ZSk7CisgICAgICAgIGxlZnRQb3NpdGlvbiA9IG1pbihsZWZ0UG9zaXRpb24s
IHgpOworICAgICAgICByaWdodFBvc2l0aW9uID0gbWF4KHJpZ2h0UG9zaXRpb24sIHgpOworICAg
ICAgICBuZWVkc1dvcmRTcGFjaW5nID0gZmFsc2U7CisgICAgICAgIHJldHVybiB4OworICAgIH0K
KyNlbmRpZiAvLyBTVkdfU1VQUE9SVAogICAgIC8vIFNldCBvdXIgeCBwb3NpdGlvbi4KICAgICBz
ZXRYUG9zKHgpOwogICAgIGxlZnRQb3NpdGlvbiA9IG1pbih4LCBsZWZ0UG9zaXRpb24pOwpAQCAt
MzA1LDEzICs0MzksNTkgQEAgaW50IElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFs
bAogICAgIHJldHVybiB4OwogfQogCisjaWZkZWYgU1ZHX1NVUFBPUlQKK3ZvaWQgSW5saW5lRmxv
d0JveDo6cGxhY2VCb3hlc1ZlcnRpY2FsbHlXaXRoQWJzQmFzZWxpbmUoaW50JiBoZWlnaHRPZkJs
b2NrLCBpbnQgJm1pbl95LCBpbnQgJm1heF95LCBpbnQgJmJhc2VsaW5lLCBpbnQgeVBvcykKK3sK
KyAgICBmb3IgKElubGluZUJveCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1
cnItPm5leHRPbkxpbmUoKSkgeworICAgICAgICBpZiAoY3Vyci0+aXNJbmxpbmVGbG93Qm94KCkp
IAorICAgICAgICB7CisgICAgICAgICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50KiB0ZXh0
ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCAqPihjdXJyLT5vYmplY3Qo
KS0+ZWxlbWVudCgpKTsKKyAgICAgICAgICAgIGJhc2VsaW5lICs9IHRleHQtPmR5KCktPmdldEZp
cnN0KCkgPyB0ZXh0LT5keSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKKyAgICAgICAgICAg
IGlmICh0ZXh0LT55KCktPmdldEZpcnN0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYmFzZWxpbmUgPSB0ZXh0LT55KCktPmdldEZpcnN0KCktPnZhbHVlKCkgLSB5UG9zOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KGN1cnIp
LT5wbGFjZUJveGVzVmVydGljYWxseVdpdGhBYnNCYXNlbGluZShoZWlnaHRPZkJsb2NrLCBtaW5f
eSwgbWF4X3ksIGJhc2VsaW5lLCB5UG9zKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBGb250
JiBmb250ID0gY3Vyci0+b2JqZWN0KCktPmZvbnQodHJ1ZSk7CisgICAgICAgIGludCBhc2NlbnQg
PSBmb250LmFzY2VudCgpOworICAgICAgICBpbnQgcG9zaXRpb24gPSBiYXNlbGluZSAtIGFzY2Vu
dDsKKyAgICAgICAgaW50IGhlaWdodCA9IGFzY2VudCArIGZvbnQuZGVzY2VudCgpOworICAgICAg
ICBjdXJyLT5zZXRCYXNlbGluZShhc2NlbnQpOworICAgICAgICBjdXJyLT5zZXRZUG9zKHBvc2l0
aW9uKTsKKyAgICAgICAgY3Vyci0+c2V0SGVpZ2h0KGhlaWdodCk7CisKKyAgICAgICAgaWYgKHBv
c2l0aW9uIDwgbWluX3kpIAorICAgICAgICAgICAgbWluX3kgPSBwb3NpdGlvbjsKKyAgICAgICAg
aWYgKHBvc2l0aW9uICsgaGVpZ2h0ID4gbWF4X3kpIAorICAgICAgICAgICAgbWF4X3kgPSBwb3Np
dGlvbiArIGhlaWdodDsKKyAgICB9CisgICAgaWYgKGlzUm9vdElubGluZUJveCgpKSB7CisgICAg
ICAgIHNldFlQb3MobWluX3kpOworICAgICAgICBzZXRIZWlnaHQobWF4X3kgLSBtaW5feSk7Cisg
ICAgICAgIHNldEJhc2VsaW5lKGJhc2VsaW5lIC0gbWluX3kpOworICAgICAgICBoZWlnaHRPZkJs
b2NrICs9IG1heF95IC0gbWluX3k7CisgICAgfQorfQorI2VuZGlmIC8vIFNWR19TVVBQT1JUCisK
IHZvaWQgSW5saW5lRmxvd0JveDo6dmVydGljYWxseUFsaWduQm94ZXMoaW50JiBoZWlnaHRPZkJs
b2NrKQogewogICAgIGludCBtYXhQb3NpdGlvblRvcCA9IDA7CiAgICAgaW50IG1heFBvc2l0aW9u
Qm90dG9tID0gMDsKICAgICBpbnQgbWF4QXNjZW50ID0gMDsKICAgICBpbnQgbWF4RGVzY2VudCA9
IDA7Ci0KKyNpZmRlZiBTVkdfU1VQUE9SVAorICAgIGlmIChtX2lzU1ZHRmxvdykgeworICAgICAg
ICAvL0Fic29sdXRlIHBvc2l0aW9ucyBpbiBTVkcgZGljdGF0ZSBwb3NpdGlvbiBvZiBiYXNlbGlu
ZQorICAgICAgICAvL3NvIHdlIGRyb3AgdG8gYSBzaW1wbGVyIGxheW91dCBmdW5jdGlvbgorICAg
ICAgICBpbnQgdG9wID0gSU5UX01BWCwgYm90dG9tID0gSU5UX01JTiwgYmFzZWxpbmUgPSBoZWln
aHRPZkJsb2NrOworICAgICAgICBwbGFjZUJveGVzVmVydGljYWxseVdpdGhBYnNCYXNlbGluZSho
ZWlnaHRPZkJsb2NrLCB0b3AsIGJvdHRvbSwgYmFzZWxpbmUsIG9iamVjdCgpLT55UG9zKCkpOwor
ICAgICAgICBzZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25zKHRvcCwgYm90dG9tKTsKKyAgICAg
ICAgc2V0VmVydGljYWxTZWxlY3Rpb25Qb3NpdGlvbnModG9wLCBib3R0b20pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAgICAgLy8gRmlndXJlIG91dCBp
ZiB3ZSdyZSBpbiBzdHJpY3QgbW9kZS4gIE5vdGUgdGhhdCB3ZSBjYW4ndCBzaW1wbHkgdXNlICFz
dHlsZSgpLT5odG1sSGFja3MoKSwKICAgICAvLyBiZWNhdXNlIHRoYXQgd291bGQgbWF0Y2ggYWxt
b3N0IHN0cmljdCBtb2RlIGFzIHdlbGwuCiAgICAgUmVuZGVyT2JqZWN0KiBjdXJyID0gb2JqZWN0
KCk7CkluZGV4OiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRl
cmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDE2ODE0KQorKysgcmVuZGVyaW5nL0lubGlu
ZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTQgKzMxLDEwIEBAIGNsYXNzIElubGlu
ZUZsb3dCb3ggOiBwdWJsaWMgSW5saW5lUnVuQm8KIHsKIHB1YmxpYzoKICAgICBJbmxpbmVGbG93
Qm94KFJlbmRlck9iamVjdCogb2JqKQotICAgIDpJbmxpbmVSdW5Cb3gob2JqKQotICAgIHsKLSAg
ICAgICAgbV9maXJzdENoaWxkID0gMDsKLSAgICAgICAgbV9sYXN0Q2hpbGQgPSAwOwotICAgICAg
ICBtX2luY2x1ZGVMZWZ0RWRnZSA9IG1faW5jbHVkZVJpZ2h0RWRnZSA9IGZhbHNlOwotICAgICAg
ICBtX2hhc1RleHRDaGlsZHJlbiA9IGZhbHNlOwotICAgICAgICBtX21heEhvcml6b250YWxTaGFk
b3cgPSAwOwotICAgIH0KKyAgICA6SW5saW5lUnVuQm94KG9iaiksIG1fZmlyc3RDaGlsZCgwKSwg
bV9sYXN0Q2hpbGQoMCksIAorICAgICBtX21heEhvcml6b250YWxTaGFkb3coMCksIG1faW5jbHVk
ZUxlZnRFZGdlKGZhbHNlKSwKKyAgICAgbV9pbmNsdWRlUmlnaHRFZGdlKGZhbHNlKSwgbV9oYXNU
ZXh0Q2hpbGRyZW4oZmFsc2UpLCAKKyAgICAgbV9pc1NWR0Zsb3coZmFsc2UpIHsgfQogCiAgICAg
UmVuZGVyRmxvdyogZmxvd09iamVjdCgpOwogCkBAIC03Niw2ICs3Miw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbXksIGludCBtaCwgaW50IF90eCwgaW50IF90eSwg
aW50IHcsIGludCBoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnREZWNvcmF0aW9ucyhSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSwgYm9vbCBwYWludGVkQ2hpbGRy
ZW4gPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyZW50UGFpbnRN
ZXRob2QoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpeyBwYWlu
dChpLCBfdHgsIF90eSk7IH0KICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoUmVuZGVyT2Jq
ZWN0OjpOb2RlSW5mbyYgaSwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSk7CiAKICAgICBp
bnQgbWFyZ2luQm9yZGVyUGFkZGluZ0xlZnQoKTsKQEAgLTEwMCwxMSArOTcsMTggQEAgcHVibGlj
OgogICAgIGludCBnZXRGbG93U3BhY2luZ1dpZHRoKCk7CiAgICAgYm9vbCBvbkVuZENoYWluKFJl
bmRlck9iamVjdCogZW5kT2JqZWN0KTsKICAgICBpbnQgcGxhY2VCb3hlc0hvcml6b250YWxseShp
bnQgeCwgaW50JiBsZWZ0UG9zaXRpb24sIGludCYgcmlnaHRQb3NpdGlvbiwgYm9vbCYgbmVlZHNX
b3JkU3BhY2luZyk7CisjaWZkZWYgU1ZHX1NVUFBPUlQKKyAgICBpbnQgcGxhY2VQb3NpdGlvbmVk
Qm94ZXNIb3Jpem9udGFsbHkoaW50IHgsIGludCYgbGVmdFBvc2l0aW9uLCBpbnQmIHJpZ2h0UG9z
aXRpb24sIGludCAmbGVmdEFsaWduLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50ICZyaWdodEFsaWduLCBib29sJiBuZWVkc1dvcmRTcGFjaW5nLCBpbnQgeFBv
cywgYm9vbCBwb3NpdGlvbmVkKTsKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAogICAgIHZvaWQgdmVy
dGljYWxseUFsaWduQm94ZXMoaW50JiBoZWlnaHRPZkJsb2NrKTsKICAgICB2b2lkIGNvbXB1dGVM
b2dpY2FsQm94SGVpZ2h0cyhpbnQmIG1heFBvc2l0aW9uVG9wLCBpbnQmIG1heFBvc2l0aW9uQm90
dG9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbWF4QXNjZW50LCBp
bnQmIG1heERlc2NlbnQsIGJvb2wgc3RyaWN0TW9kZSk7CiAgICAgdm9pZCBhZGp1c3RNYXhBc2Nl
bnRBbmREZXNjZW50KGludCYgbWF4QXNjZW50LCBpbnQmIG1heERlc2NlbnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhQb3NpdGlvblRvcCwgaW50IG1heFBvc2l0
aW9uQm90dG9tKTsKKyNpZmRlZiBTVkdfU1VQUE9SVAorICAgIHZvaWQgcGxhY2VCb3hlc1ZlcnRp
Y2FsbHlXaXRoQWJzQmFzZWxpbmUoaW50JiBoZWlnaHRPZkJsb2NrLCBpbnQgJm1pbl95LCBpbnQg
Jm1heF95LCBpbnQgJmJhc2VsaW5lLCBpbnQgeVBvcyk7CisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQK
ICAgICB2b2lkIHBsYWNlQm94ZXNWZXJ0aWNhbGx5KGludCB5LCBpbnQgbWF4SGVpZ2h0LCBpbnQg
bWF4QXNjZW50LCBib29sIHN0cmljdE1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQmIHRvcFBvc2l0aW9uLCBpbnQmIGJvdHRvbVBvc2l0aW9uLCBpbnQmIHNlbGVjdGlvblRv
cCwgaW50JiBzZWxlY3Rpb25Cb3R0b20pOwogICAgIHZvaWQgc2hyaW5rQm94ZXNXaXRoTm9UZXh0
Q2hpbGRyZW4oaW50IHRvcFBvc2l0aW9uLCBpbnQgYm90dG9tUG9zaXRpb24pOwpAQCAtMTE4LDgg
KzEyMiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3Rh
dGUgc2VsZWN0aW9uU3RhdGUoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5BY2NvbW1vZGF0ZUVs
bGlwc2lzKGJvb2wgbHRyLCBpbnQgYmxvY2tFZGdlLCBpbnQgZWxsaXBzaXNXaWR0aCk7Ci0gICAg
dmlydHVhbCBpbnQgcGxhY2VFbGxpcHNpc0JveChib29sIGx0ciwgaW50IGJsb2NrRWRnZSwgaW50
IGVsbGlwc2lzV2lkdGgsIGJvb2wmKTsKLQorICAgIHZpcnR1YWwgaW50IHBsYWNlRWxsaXBzaXNC
b3goYm9vbCBsdHIsIGludCBibG9ja0VkZ2UsIGludCBlbGxpcHNpc1dpZHRoLCBib29sJik7ICAg
IAogcHJvdGVjdGVkOgogICAgIElubGluZUJveCogbV9maXJzdENoaWxkOwogICAgIElubGluZUJv
eCogbV9sYXN0Q2hpbGQ7CkBAIC0xMjcsNiArMTMwLDcgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wg
bV9pbmNsdWRlTGVmdEVkZ2UgOiAxOwogICAgIGJvb2wgbV9pbmNsdWRlUmlnaHRFZGdlIDogMTsK
ICAgICBib29sIG1faGFzVGV4dENoaWxkcmVuIDogMTsKKyAgICBib29sIG1faXNTVkdGbG93IDog
MTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDE2
ODE0KQorKysgcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDcsNyArMTA3LDcgQEAgSW50UmVjdCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0KGludAog
ewogICAgIGludCBzUG9zID0gbWF4KHN0YXJ0UG9zIC0gbV9zdGFydCwgMCk7CiAgICAgaW50IGVQ
b3MgPSBtaW4oZW5kUG9zIC0gbV9zdGFydCwgKGludCltX2xlbik7Ci0gICAgCisKICAgICBpZiAo
c1BvcyA+PSBlUG9zKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCkluZGV4OiByZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcAkocmV2aXNpb24gMTY4MTQpCisrKyByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpjYWxjTWlu
TWF4V2lkdGgoKQogfQogCiBib29sIFJlbmRlcklubGluZTo6cmVxdWlyZXNMYXllcigpIHsKLSAg
ICByZXR1cm4gaXNSb290KCkgfHwgaXNSZWxQb3NpdGlvbmVkKCkgfHwgc3R5bGUoKS0+b3BhY2l0
eSgpIDwgMS4wZjsKKyAgICByZXR1cm4gaXNSb290KCkgfHwgaXNSZWxQb3NpdGlvbmVkKCkgfHwg
KHN0eWxlKCktPm9wYWNpdHkoKSA8IDEuMGYgJiYgIWVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkp
OwogfQogCiBpbnQgUmVuZGVySW5saW5lOjp3aWR0aCgpIGNvbnN0CkluZGV4OiByZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShy
ZXZpc2lvbiAxNjgxNCkKKysrIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTcsNyArOTcsNyBAQCBSZW5kZXJUZXh0OjpSZW5kZXJUZXh0KE5vZGUqIG5vZGUsIFN0
cmluCiAgICAgIDogUmVuZGVyT2JqZWN0KG5vZGUpLCBzdHIoX3N0ciksIG1fZmlyc3RUZXh0Qm94
KDApLCBtX2xhc3RUZXh0Qm94KDApCiAgICAgICwgbV9taW5XaWR0aCgtMSksIG1fbWF4V2lkdGgo
LTEpLCBtX3NlbGVjdGlvblN0YXRlKFNlbGVjdGlvbk5vbmUpCiAgICAgICwgbV9saW5lc0RpcnR5
KGZhbHNlKSwgbV9jb250YWluc1JldmVyc2VkVGV4dChmYWxzZSkKLSAgICAgLCBtX2FsbEFzY2lp
Q2hlY2tlZChmYWxzZSksIG1fYWxsQXNjaWkoZmFsc2UpCisgICAgICwgbV9hbGxBc2NpaUNoZWNr
ZWQoZmFsc2UpLCBtX2FsbEFzY2lpKGZhbHNlKSwgbV9pc1NWR1RleHQoZmFsc2UpCiAgICAgICwg
bV9tb25vc3BhY2VDaGFyYWN0ZXJXaWR0aCgwKQogewogICAgIHNldFJlbmRlclRleHQoKTsKSW5k
ZXg6IHJlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRl
clRleHQuaAkocmV2aXNpb24gMTY4MTQpCisrKyByZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IG5l
eHRPZmZzZXQoaW50IGN1cnJlbnQpIGNvbnN0OwogICAgIAogICAgIGJvb2wgY29udGFpbnNSZXZl
cnNlZFRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zUmV2ZXJzZWRUZXh0OyB9Ci0gICAg
CisgICAgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJldHVybiBtX2lzU1ZHVGV4dDsgfQogcHVi
bGljOgogICAgIElubGluZVRleHRCb3ggKiBmaW5kTmV4dElubGluZVRleHRCb3goIGludCBvZmZz
ZXQsIGludCAmcG9zICkgY29uc3Q7CiAKQEAgLTE4Myw2ICsxODMsNyBAQCBwcm90ZWN0ZWQ6IC8v
IG1lbWJlcnMKICAgICAvLyAyMiBiaXRzIGxlZnQKICAgICBtdXRhYmxlIGJvb2wgbV9hbGxBc2Np
aUNoZWNrZWQ6MTsKICAgICBtdXRhYmxlIGJvb2wgbV9hbGxBc2NpaToxOworICAgIGJvb2wgbV9p
c1NWR1RleHQ6MTsKICAgICBpbnQgbV9tb25vc3BhY2VDaGFyYWN0ZXJXaWR0aDsKIH07CiAK
</data>
<flag name="review"
          id="3660"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10972</attachid>
            <date>2006-10-08 00:51:50 -0700</date>
            <delta_ts>2006-10-08 01:40:25 -0700</delta_ts>
            <desc>Final (hopefully) patch</desc>
            <filename>newtext8.patch</filename>
            <type>text/plain</type>
            <size>60033</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2ODc3KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzU3LDEx
ICsxMzU3LDE1IEBACiAJCTkzRjE5QjE2MDgyNDVFNTkwMDFFOUFCQyAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
ICovOyB9OwogCQk5M0YxOUIxNzA4MjQ1RTU5MDAxRTlBQkMgLyogbGliaWN1Y29yZS5keWxpYiBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFEMzFB
MDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovOyB9OwogCQk5M0YxOUIxODA4
MjQ1RTU5MDAxRTlBQkMgLyogbGlieHNsdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MDYzMzA3MDczMUE3NzIwMERCMUZEMSAvKiBsaWJ4
c2x0LmR5bGliICovOyB9OworCQlBNzVFOTZFMDBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElu
bGluZUJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTc1RTk2REUwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLzsgfTsKKwkJ
QTc1RTk2RTEwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RTk2REYwQUMxMzY2RjAw
RUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwICovOyB9OwogCQlBNzYzOEE4QjA5OTU4RUE1
MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTg5MDk5NThFQTUwMDA3RTE0RiAvKiBX
S0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oICovOyB9OwogCQlBNzYzOEE4QzA5OTU4RUE1MDAwN0Ux
NEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QThBMDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3Bs
YWNlbWVudE1hcEZpbHRlci5tICovOyB9OwogCQlBNzYzOEE5MjA5OTU5MkMzMDAwN0UxNEYgLyog
V0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLzsgfTsKIAkJQTc2MzhBOTcwOTk1OTY1RDAw
MDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8q
IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oICovOyB9OwogCQlBNzYzOEE5ODA5OTU5NjVE
MDAwN0UxNEYgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTk2MDk5NTk2NUQwMDA3RTE0
RiAvKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwICovOyB9OworCQlBNzcxQ0IzRTBB
RDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzcxQ0IzQzBBRDMzQ0MyMDBERjlFMjUgLyogUmVu
ZGVyU1ZHSW5saW5lLmggKi87IH07CisJCUE3NzFDQjNGMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5k
ZXJTVkdJbmxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc3MUNCM0QwQUQzM0NDMjAwREY5RTI1IC8qIFJlbmRlclNWR0lubGluZS5jcHAgKi87
IH07CiAJCUE3Qjk3Qjc3MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVy
LmNpa2VybmVsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0I5N0I2NjA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5jaWtl
cm5lbCAqLzsgfTsKIAkJQTdCOTdCNzgwOTc5QzNBMTAwMEU4RUIxIC8qIFdLQ29tcG9uZW50TWVy
Z2VGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3Qjk3QjY3MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVyLmggKi87
IH07CiAJCUE3Qjk3Qjc5MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVy
Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I5N0I2
ODA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5tICovOyB9OwpAQCAt
MTM3OSw2ICsxMzgzLDEyIEBACiAJCUE3Qjk3Qjg1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxl
VHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3Qjk3Qjc0MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNm
ZXJGaWx0ZXIuY2lrZXJuZWwgKi87IH07CiAJCUE3Qjk3Qjg2MDk3OUMzQTEwMDBFOEVCMSAvKiBX
S1RhYmxlVHJhbnNmZXJGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3Qjk3Qjc1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNmZXJG
aWx0ZXIuaCAqLzsgfTsKIAkJQTdCOTdCODcwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFu
c2ZlckZpbHRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdCOTdCNzYwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5tICov
OyB9OworCQlBN0M1MTk0OTBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzUxOTQ3MEFDQTZB
RjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5oICovOyB9OworCQlBN0M1MTk0QTBBQ0E2QUYx
MDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDNTE5NDgwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLzsgfTsKKwkJQTdDNTFBNDYwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGlu
ZUZsb3dCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QzUxQTQ0MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi87IH07CisJ
CUE3QzUxQTQ3MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzUxQTQ1MEFDQTc0NDcw
MDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCAqLzsgfTsKKwkJQTdFMUREQkUwQUFFQ0RE
MTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTFEREJDMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5k
ZXJTVkdJbmxpbmVUZXh0LmggKi87IH07CisJCUE3RTFEREJGMEFBRUNERDEwMENBQ0QxQyAvKiBS
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3RTFEREJEMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcCAqLzsgfTsKIAkJQTgwRTZDRTQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBF
NkNCQTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmNwcCAqLzsgfTsKIAkJQTgwRTZD
RTUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQkIwQTE5ODlDQTAwN0ZC
OEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovOyB9OwogCQlBODBFNkNFNjBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0JDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmlt
aXRpdmVWYWx1ZS5oICovOyB9OwpAQCAtMzkyMiwxMSArMzkzMiwxNSBAQAogCQk5M0Y4QjMwNjBB
MzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3Jp
cHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0b3JKUy5wbTsgcGF0aCA9IC4uL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y4QjMwNzBB
MzAwRkVBMDBGNjFBQjggLyogZ2VuZXJhdGUtYmluZGluZ3MucGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5wZXJsOyBuYW1lID0gImdlbmVyYXRlLWJpbmRpbmdzLnBsIjsgcGF0aCA9ICJzY3JpcHRz
L2dlbmVyYXRlLWJpbmRpbmdzLnBsIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNG
OEIzMDgwQTMwMEZFQTAwRjYxQUI4IC8qIElETFN0cnVjdHVyZS5wbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnBlcmw7IG5hbWUgPSBJRExTdHJ1Y3R1cmUucG07IHBhdGggPSBzY3JpcHRzL0lETFN0
cnVjdHVyZS5wbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc1RTk2REUwQUMxMzY2
RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHUm9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzVFOTZERjBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSb290SW5saW5lQm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdL
RGlzcGxhY2VtZW50TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmls
dGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjM4QTkxMDk5NTkyQzMwMDA3
RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2
MzhBOTYwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzcxQ0IzQzBBRDMz
Q0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzcxQ0IzRDBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Qjk3QjY2MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0Nv
bXBvbmVudE1lcmdlRmlsdGVyLmNpa2VybmVsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXS0Nv
bXBvbmVudE1lcmdlRmlsdGVyLmNpa2VybmVsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0I5N0I2NzA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb21wb25lbnRNZXJnZUZpbHRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I5N0I2ODA5NzlDM0ExMDAwRThFQjEg
LyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpj
OyBwYXRoID0gV0tDb21wb25lbnRNZXJnZUZpbHRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzk0NCw2ICszOTU4LDEyIEBACiAJCUE3Qjk3Qjc0MDk3OUMzQTEwMDBFOEVCMSAv
KiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFdLVGFibGVUcmFuc2ZlckZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTdCOTdCNzUwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tUYWJsZVRyYW5zZmVyRmlsdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Qjk3Qjc2MDk3OUMzQTEwMDBFOEVC
MSAvKiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2Jq
YzsgcGF0aCA9IFdLVGFibGVUcmFuc2ZlckZpbHRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBN0M1MTk0NzBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHVFNwYW4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTE5NDgwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNW
R1RTcGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTFBNDQwQUNBNzQ0
NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHSW5saW5lRmxvd0JveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBN0M1MUE0NTBBQ0E3NDQ3MDA2RTJGQjkgLyogU1ZHSW5saW5lRmxvd0JveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdJbmxpbmVGbG93Qm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdFMUREQkMwQUFFQ0REMTAwQ0FDRDFDIC8qIFJl
bmRlclNWR0lubGluZVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU1ZHSW5saW5lVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0UxRERC
RDBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkEwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Zh
bHVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVmFs
dWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkIwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENTU0JvcmRlckltYWdlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODBFNkNCQzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZl
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1ByaW1pdGl2ZVZh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NTM0LDYgKzc1NTQsMTYgQEAK
IAkJCQlGQUUwNDE4OTA5NzU5Njk0MDAwNTQwQkUgLyogUmVuZGVyU1ZHSW1hZ2UuaCAqLywKIAkJ
CQk2NTc0M0I1MDA5NzA3NkY4MDAxRTdDRUYgLyogUmVuZGVyU1ZHVGV4dC5jcHAgKi8sCiAJCQkJ
NjU3NDNCNTEwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuaCAqLywKKwkJCQlBN0Ux
RERCQzBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5oICovLAorCQkJCUE3
RTFEREJEMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCAqLywKKwkJ
CQlBNzVFOTZERTBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5oICovLAorCQkJ
CUE3NUU5NkRGMEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmNwcCAqLywKKwkJ
CQlBN0M1MTk0NzBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLywKKwkJCQlB
N0M1MTk0ODBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwICovLAorCQkJCUE3
QzUxQTQ0MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi8sCisJCQkJQTdD
NTFBNDUwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guY3BwICovLAorCQkJCUE3
NzFDQjNDMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5kZXJTVkdJbmxpbmUuaCAqLywKKwkJCQlBNzcx
Q0IzRDBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0ga2NhbnZhczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC05MjI4LDYg
KzkyNTgsNyBAQAogCQkJCTg1MDY1NkZFMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01NZWRpYUxpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDY1NzAwMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01TdHls
ZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTA2NTcwMjBBQUI0NzYzMDAyRDE1QzAgLyog
RE9NU3R5bGVTaGVldExpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3RTFEREJFMEFBRUNERDEw
MENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzQ3
MDZBQjBBQUNEODA5MDAyQzFENDMgLyogVGV4dERlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg1QUZBODIyMEFBRjUyOEEwMEU4NDMwNSAvKiBET01FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODVDN0Y0OTEwQUFGNzlEQzAwNDAxNEREIC8qIERPTVVJRXZlbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtOTM3Myw2ICs5NDA0LDkgQEAKIAkJCQlCMjAxMTEwODBBQjc3NDA1MDBEQjBFNjggLyog
SlNTVkdBRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUzQkY0REIwQUJCNkI1NTAwODY0
N0JCIC8qIERPTU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1M0JGNEVCMEFCQjZFOTcwMDg2
NDdCQiAvKiBET01Ob2RlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTc1RTk2RTAwQUMx
MzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCBpbiBIZWFkZXJzICovLAorCQkJCUE3
QzUxOTQ5MEFDQTZBRjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTdDNTFBNDYwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg1QkNCQzEzMEFCQkE4N0QwMDM4MTE2MCAvKiBET01IVE1MRG9jdW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1ND
dXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTFFRTgwQzBBQkNBMjhGMDBB
NkFBMzMgLyogRE9NQWJzdHJhY3RWaWV3LmggaW4gSGVhZGVycyAqLywKQEAgLTk1NjcsNiArOTYw
MSw3IEBACiAJCQkJODUwMDREQTYwQUNFRUI1QTAwQzQzOEY2IC8qIERPTVNWR0RvY3VtZW50SW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDA0REE3MEFDRUVCNUEwMEM0MzhGNiAvKiBE
T01TVkdFbGxpcHNlRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQkI1NDE5
RjBBQ0RERkU0MDAyODIwRUIgLyogUmVuZGVyTGlzdEJveC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QTc3MUNCM0UwQUQzM0NDMjAwREY5RTI1IC8qIFJlbmRlclNWR0lubGluZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTM5MkYxNDIwQUQxODVGNDAwNjkxQkQ0IC8qIFJlbmRlckNvdW50ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzOTJGMTQ2MEFEMTg2MEMwMDY5MUJENCAvKiBDb3VudGVyUmVzZXRO
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzkyRjE0QzBBRDE4NjFCMDA2OTFCRDQgLyogQ291
bnRlck5vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTY4MCw3ICs5NzE1LDYgQEAKIAkJCW1haW5H
cm91cCA9IDA4NjdENjkxRkU4NDAyOEZDMDJBQUMwNyAvKiBXZWJLaXQgKi87CiAJCQlwcm9kdWN0
UmVmR3JvdXAgPSAwMzQ3NjhERkZGMzhBNTA0MTFEQjlDOEIgLyogUHJvZHVjdHMgKi87CiAJCQlw
cm9qZWN0RGlyUGF0aCA9ICIiOwotCQkJcHJvamVjdFJvb3QgPSAiIjsKIAkJCXRhcmdldHMgPSAo
CiAJCQkJOTNGMTk4QTUwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmUgKi8sCiAJCQkJREQwNDFG
QkUwOUQ5RERCRTAwMTBBRjJBIC8qIERlcml2ZWQgU291cmNlcyAqLywKQEAgLTEwNTc4LDYgKzEw
NjEyLDcgQEAKIAkJCQk4NTA2NTcwMTBBQUI0NzYzMDAyRDE1QzAgLyogRE9NU3R5bGVTaGVldC5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTg1MDY1NzAzMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01TdHls
ZVNoZWV0TGlzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxRUJCQkQ0MEFBQzlCODcwMDFGRThF
MiAvKiBDU1NDaGFyc2V0UnVsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBN0UxRERCRjBBQUVD
REQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NUFGQTgyMzBBQUY1MjhBMDBFODQzMDUgLyogRE9NRXZlbnQubW0gaW4gU291cmNlcyAqLywK
IAkJCQk4NUM3RjQ5MjBBQUY3OURDMDA0MDE0REQgLyogRE9NVUlFdmVudC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTg1QzdGNUMwMEFBRkI3Q0QwMDQwMTRERCAvKiBET01NdXRhdGlvbkV2ZW50Lm1t
IGluIFNvdXJjZXMgKi8sCkBAIC0xMDcxMyw2ICsxMDc0OCw5IEBACiAJCQkJQjIyMkY2OUMwQUI3
NzFCODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjAx
MTEwNzBBQjc3NDA1MDBEQjBFNjggLyogSlNTVkdBRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NTNCRjREQzBBQkI2QjU1MDA4NjQ3QkIgLyogRE9NTm9kZS5tbSBpbiBTb3VyY2VzICov
LAorCQkJCUE3NUU5NkUxMEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUE3QzUxOTRBMEFDQTZBRjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdU
U3Bhbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBN0M1MUE0NzBBQ0E3NDQ3MDA2RTJGQjkgLyog
U1ZHSW5saW5lRmxvd0JveC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NUJDQkMxNDBBQkJBODdE
MDAzODExNjAgLyogRE9NSFRNTERvY3VtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQUEyMUVD
Q0EwQUJGMEZCQTAwMkI4MzRDIC8qIENTU0N1cnNvckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODUxRUU4MEQwQUJDQTI4RjAwQTZBQTMzIC8qIERPTUFic3RyYWN0Vmlldy5tbSBp
biBTb3VyY2VzICovLApAQCAtMTA3NjAsNiArMTA3OTgsNyBAQAogCQkJCTg1MDA0RDk5MEFDRUVB
RUYwMEM0MzhGNiAvKiBET01TVkdEb2N1bWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1MDA0
RDlCMEFDRUVBRUYwMEM0MzhGNiAvKiBET01TVkdFbGxpcHNlRWxlbWVudC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUFCQjU0MTlFMEFDRERGRTQwMDI4MjBFQiAvKiBSZW5kZXJMaXN0Qm94LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUE3NzFDQjNGMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5kZXJTVkdJ
bmxpbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MkYxNDQwQUQxODVGRTAwNjkxQkQ0IC8q
IFJlbmRlckNvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MkYxNEEwQUQxODYxMzAw
NjkxQkQ0IC8qIENvdW50ZXJSZXNldE5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MkYx
NTAwQUQxODYyMzAwNjkxQkQ0IC8qIENvdW50ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogY3NzL3N2Zy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL3N2Zy5jc3MJKHJldmlzaW9uIDE2ODc3
KQorKysgY3NzL3N2Zy5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDMgKzQ5LDcgQEAgc3ZnLCBz
eW1ib2wsIG1hcmtlciwgcGF0dGVybiB7CiB0ZXh0LCBmb3JlaWduT2JqZWN0IHsKICAgICBkaXNw
bGF5OiBibG9jayAhaW1wb3J0YW50CiB9CisKK3RleHQsIHRzcGFuIHsKKyAgIHdoaXRlLXNwYWNl
OiBub3dyYXAgIWltcG9ydGFudAorfQpJbmRleDogZG9tL1RleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGRvbS9UZXh0LmNwcAkocmV2aXNpb24gMTY4NzcpCisrKyBkb20vVGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHSW5saW5lVGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE0OSw2ICsx
NTAsMTEgQEAgYm9vbCBUZXh0OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlIAogCiBSZW5k
ZXJPYmplY3QgKlRleHQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVy
U3R5bGUgKnN0eWxlKQogeworI2lmZGVmIFNWR19TVVBQT1JUCisgICAgaWYocGFyZW50Tm9kZSgp
LT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR0lu
bGluZVRleHQodGhpcywgc3RyKTsKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorICAgIAogICAgIHJl
dHVybiBuZXcgKGFyZW5hKSBSZW5kZXJUZXh0KHRoaXMsIHN0cik7CiB9CiAKSW5kZXg6IGtjYW52
YXMvUmVuZGVyU1ZHSW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR0lu
bGluZS5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1JlbmRlclNWR0lubGluZS5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50
IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgKiAgICAgICAgICAgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgU1ZHX1NVUFBP
UlQKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKKyNpbmNsdWRlICJTVkdJbmxpbmVGbG93
Qm94LmgiCisjaW5jbHVkZSAiU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oIgorI2luY2x1ZGUg
IlNWR0xlbmd0aExpc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorUmVuZGVyU1ZH
SW5saW5lOjpSZW5kZXJTVkdJbmxpbmUoTm9kZSogbikgOiBSZW5kZXJJbmxpbmUobikge30KKyAg
ICAKK0lubGluZUJveCogUmVuZGVyU1ZHSW5saW5lOjpjcmVhdGVJbmxpbmVCb3goYm9vbCBtYWtl
UGxhY2VIb2xkZXJCb3gsIGJvb2wgaXNSb290TGluZUJveCwgYm9vbCBpc09ubHlSdW4pCit7Cisg
ICAgYXNzZXJ0KCEoIWlzUm9vdExpbmVCb3ggJiYgKGlzUmVwbGFjZWQoKSB8fCBtYWtlUGxhY2VI
b2xkZXJCb3gpKSk7CisgICAgYXNzZXJ0KGlzSW5saW5lRmxvdygpKTsKKyAgICBJbmxpbmVGbG93
Qm94KiBmbG93Qm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBTVkdJbmxpbmVGbG93Qm94KHRoaXMp
OworICAgIGlmICghbV9maXJzdExpbmVCb3gpCisgICAgICAgIG1fZmlyc3RMaW5lQm94ID0gbV9s
YXN0TGluZUJveCA9IGZsb3dCb3g7CisgICAgZWxzZSB7CisgICAgICAgIG1fbGFzdExpbmVCb3gt
PnNldE5leHRMaW5lQm94KGZsb3dCb3gpOworICAgICAgICBmbG93Qm94LT5zZXRQcmV2aW91c0xp
bmVCb3gobV9sYXN0TGluZUJveCk7CisgICAgICAgIG1fbGFzdExpbmVCb3ggPSBmbG93Qm94Owor
ICAgIH0KKyAgICAgICAgCisgICAgcmV0dXJuIGZsb3dCb3g7Cit9CisKK30KKworI2VuZGlmIC8v
IFNWR19TVVBQT1JUCkluZGV4OiBrY2FudmFzL1JlbmRlclNWR0lubGluZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lLmgJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1Jl
bmRlclNWR0lubGluZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACisvKgorICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgorICog
ICAgICAgICAgIChDKSAyMDA2IEFwcGxlIENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdJ
bmxpbmVfSAorI2RlZmluZSBSZW5kZXJTVkdJbmxpbmVfSAorCisjaWZkZWYgU1ZHX1NVUFBPUlQK
KyNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
UmVuZGVyU1ZHSW5saW5lIDogcHVibGljIFJlbmRlcklubGluZSB7CitwdWJsaWM6CisgICAgICAg
IFJlbmRlclNWR0lubGluZShOb2RlKik7CisgICAgICAgIHZpcnR1YWwgY29uc3QgY2hhciAqcmVu
ZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdJbmxpbmUiOyB9CisgICAgICAgIHZp
cnR1YWwgSW5saW5lQm94KiBjcmVhdGVJbmxpbmVCb3goYm9vbCBtYWtlUGxhY2VIb2xkZXJCb3gs
IGJvb2wgaXNSb290TGluZUJveCwgYm9vbCBpc09ubHlSdW4gPSBmYWxzZSk7CisgICAgfTsKK30K
KworI2VuZGlmIC8vIFNWR19TVVBQT1JUCisjZW5kaWYgLy8gIVJlbmRlclNWR1RTcGFuX0gKSW5k
ZXg6IGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZh
cy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvUmVuZGVy
U1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+Cisg
KiAgICAgICAgICAgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIgSW5jLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAq
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZkZWYgU1ZHX1NVUFBP
UlQKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQu
aCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIktDYW52YXNSZW5k
ZXJpbmdTdHlsZS5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorUmVuZGVyU1ZH
SW5saW5lVGV4dDo6UmVuZGVyU1ZHSW5saW5lVGV4dChOb2RlKiBuLCBTdHJpbmdJbXBsKiBzdHIp
IAorICAgIDogUmVuZGVyVGV4dChuLCBzdHIpIHt9CisKK3ZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4
dDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkK
K3sKKyAgICBGbG9hdFJlY3QgYWJzb2x1dGVSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBS
ZWN0KEZsb2F0UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKSk7CisgICAgcmVjdHMuYXBw
ZW5kKGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVSZWN0KSk7Cit9CisKK0ludFJlY3QgUmVuZGVy
U1ZHSW5saW5lVGV4dDo6c2VsZWN0aW9uUmVjdCgpCit7CisgICAgSW50UmVjdCByZWN0ID0gUmVu
ZGVyVGV4dDo6c2VsZWN0aW9uUmVjdCgpOworICAgIHJlY3QgPSBwYXJlbnQoKS0+YWJzb2x1dGVU
cmFuc2Zvcm0oKS5tYXBSZWN0KHJlY3QpOworICAgIHJldHVybiByZWN0OworfQorCit9CisKKyNl
bmRpZiAvLyBTVkdfU1VQUE9SVApJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgJKHJldmlzaW9uIDAp
CisrKyBrY2FudmFzL1JlbmRlclNWR0lubGluZVRleHQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4K
KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2Fu
dGVyYnVyeS5hYy5uej4KKyAqICAgICAgICAgICAoQykgMjAwNiBBcHBsZSBDb21wdXRlciBJbmMu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNl
IC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisK
KyNpZm5kZWYgUmVuZGVyU1ZHSW5saW5lVGV4dF9ICisjZGVmaW5lIFJlbmRlclNWR0lubGluZVRl
eHRfSAorCisjaWZkZWYgU1ZHX1NVUFBPUlQKKworI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUmVuZGVyU1ZHSW5saW5lVGV4dCA6IHB1YmxpYyBS
ZW5kZXJUZXh0IHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdJbmxpbmVUZXh0KE5vZGUqLCBTdHJp
bmdJbXBsKik7CisgICAgdmlydHVhbCBjb25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gIlJlbmRlclNWR0lubGluZVRleHQiOyB9CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRl
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1
YWwgSW50UmVjdCBzZWxlY3Rpb25SZWN0KCk7Cit9OworfQorCisjZW5kaWYgLy8gU1ZHX1NVUFBP
UlQKKworI2VuZGlmIC8vICFSZW5kZXJTVkdJbmxpbmVUZXh0X0gKSW5kZXg6IGtjYW52YXMvUmVu
ZGVyU1ZHVFNwYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHVFNwYW4uY3Bw
CShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9SZW5kZXJTVkdUU3Bhbi5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBz
dHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgKiAgICAgICAgICAgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgor
ICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNs
dWRlICJSZW5kZXJTVkdUU3Bhbi5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZp
Y2UuaCIKKyNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCisjaW5jbHVkZSAiU1ZHSW5saW5l
Rmxvd0JveC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIlNWR1Rl
eHRQb3NpdGlvbmluZ0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGhMaXN0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1JlbmRlclNWR1RTcGFuOjpSZW5kZXJTVkdUU3BhbihO
b2RlKiBuKSA6IFJlbmRlclNWR0lubGluZShuKSB7fQorCit2b2lkIFJlbmRlclNWR1RTcGFuOjph
YnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQorewor
ICAgIElubGluZUZsb3dCb3gqIGluaXRGbG93ID0gZmlyc3RMaW5lQm94KCk7CisgICAgRmxvYXRS
ZWN0IGJvdW5kcyh0eCArIGluaXRGbG93LT54UG9zKCksIHR5ICsgaW5pdEZsb3ctPnlQb3MoKSwg
d2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KGFi
c29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChib3VuZHMpKSk7Cit9CisKKworfQorCisjZW5kaWYg
Ly8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHVFNwYW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrY2FudmFzL1JlbmRlclNWR1RTcGFuLmgJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1Jl
bmRlclNWR1RTcGFuLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgKiAg
ICAgICAgICAgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIgSW5jLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJv
c3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1RT
cGFuX0gKKyNkZWZpbmUgUmVuZGVyU1ZHVFNwYW5fSAorCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNp
bmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
UmVuZGVyU1ZHVFNwYW4gOiBwdWJsaWMgUmVuZGVyU1ZHSW5saW5lIHsKK3B1YmxpYzoKKyAgICBS
ZW5kZXJTVkdUU3BhbihOb2RlKik7CisgICAgdmlydHVhbCBjb25zdCBjaGFyICpyZW5kZXJOYW1l
KCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1RTcGFuIjsgfQorICAgIHZpcnR1YWwgdm9pZCBh
YnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KTsKK307
Cit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorI2VuZGlmIC8vICFSZW5kZXJTVkdUU3Bhbl9I
CkluZGV4OiBrY2FudmFzL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMv
UmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDE2ODc3KQorKysga2NhbnZhcy9SZW5kZXJTVkdU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqICAgICAgICAgICAgICAgMjAwNiBBbGV4
YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgorICogICAgICAgICAgICAgICAyMDA2IE9s
aXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNiwxMjQgKzI3LDI2IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgog
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiS0NhbnZhc0NsaXBwZXIu
aCIKLSNpbmNsdWRlICJLQ2FudmFzTWFza2VyLmgiCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmlu
Z1N0eWxlLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlNWR0xl
bmd0aExpc3QuaCIKICNpbmNsdWRlICJTVkdUZXh0RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1Jv
b3RJbmxpbmVCb3guaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotUmVuZGVyU1ZHVGV4dDo6UmVuZGVyU1ZHVGV4dChTVkdUZXh0RWxlbWVudCAqbm9k
ZSkgCitSZW5kZXJTVkdUZXh0OjpSZW5kZXJTVkdUZXh0KFNWR1RleHRFbGVtZW50KiBub2RlKSAK
ICAgICA6IFJlbmRlckJsb2NrKG5vZGUpCiB7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBSZW5kZXJT
VkdUZXh0Ojp0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKQotewotICAgIGludCBvZmZzZXQgPSBi
YXNlbGluZVBvc2l0aW9uKHRydWUsIHRydWUpOwotICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0o
KS50cmFuc2xhdGUoMCwgLW9mZnNldCk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdU
ZXh0Ojp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKQotewotICAgIFNWR1RleHRFbGVtZW50ICp0
ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dEVsZW1lbnQqPihlbGVtZW50KCkpOwotCi0gICAgU1ZH
TGVuZ3RoKiB4T2Zmc2V0ID0gdGV4dC0+eCgpLT5nZXRGaXJzdCgpLmdldCgpOwotICAgIFNWR0xl
bmd0aCogeU9mZnNldCA9IHRleHQtPnkoKS0+Z2V0Rmlyc3QoKS5nZXQoKTsKLQotICAgIHJldHVy
biBBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoeE9mZnNldCA/IHhPZmZzZXQtPnZhbHVlKCkg
OiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeU9mZnNldCA/IHlP
ZmZzZXQtPnZhbHVlKCkgOiAwKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdUZXh0OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKQotewotICAgIGlmIChw
YWludEluZm8ucC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBL
UmVuZGVyaW5nRGV2aWNlKiBkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKLSAgICBLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dCogY29udGV4dCA9IGRldmljZS0+Y3VycmVudENvbnRleHQoKTsKLSAg
ICBib29sIHNob3VsZFBvcENvbnRleHQgPSBmYWxzZTsKLSAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gTmVlZCB0byBz
ZXQgdXAgS0NhbnZhcyByZW5kZXJpbmcgaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBkb25lLgot
ICAgICAgICBjb250ZXh0ID0gcGFpbnRJbmZvLnAtPmNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRl
eHQoKTsKLSAgICAgICAgZGV2aWNlLT5wdXNoQ29udGV4dChjb250ZXh0KTsKLSAgICAgICAgc2hv
dWxkUG9wQ29udGV4dCA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIGNvbnRleHQtPmNvbmNhdENU
TShsb2NhbFRyYW5zZm9ybSgpKTsKLSAgICBjb250ZXh0LT5jb25jYXRDVE0oQWZmaW5lVHJhbnNm
b3JtKCkudHJhbnNsYXRlKHBhcmVudFgsIHBhcmVudFkpKTsKLSAgICBjb250ZXh0LT5jb25jYXRD
VE0odHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkpOwotICAgIGNvbnRleHQtPmNvbmNhdENUTSh0
cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKSk7Ci0gICAgCi0gICAgRmxvYXRSZWN0IGJvdW5kaW5n
Qm94KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSog
c3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgICAgICAgICAgCi0gICAgaWYgKEtD
YW52YXNDbGlwcGVyKiBjbGlwcGVyID0gZ2V0Q2xpcHBlckJ5SWQoZG9jdW1lbnQoKSwgc3ZnU3R5
bGUtPmNsaXBQYXRoKCkuc3Vic3RyaW5nKDEpKSkKLSAgICAgICAgY2xpcHBlci0+YXBwbHlDbGlw
KGJvdW5kaW5nQm94KTsKLQotICAgIGlmIChLQ2FudmFzTWFza2VyKiBtYXNrZXIgPSBnZXRNYXNr
ZXJCeUlkKGRvY3VtZW50KCksIHN2Z1N0eWxlLT5tYXNrRWxlbWVudCgpLnN1YnN0cmluZygxKSkp
Ci0gICAgICAgIG1hc2tlci0+YXBwbHlNYXNrKGJvdW5kaW5nQm94KTsKLQotICAgIEtDYW52YXNG
aWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5SWQoZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmZpbHRl
cigpLnN1YnN0cmluZygxKSk7Ci0gICAgaWYgKGZpbHRlcikKLSAgICAgICAgZmlsdGVyLT5wcmVw
YXJlRmlsdGVyKGJvdW5kaW5nQm94KTsKLSAgICAgICAgCi0gICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dD4gYyhkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgp
KTsKLSAgICBQYWludEluZm8gcGkgPSBwYWludEluZm87Ci0gICAgcGkucCA9IGMuZ2V0KCk7Ci0g
ICAgcGkuciA9ICh0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKSAqIHRyYW5zbGF0aW9uRm9yQXR0
cmlidXRlcygpICogYWJzb2x1dGVUcmFuc2Zvcm0oKSkuaW52ZXJ0KCkubWFwUmVjdChwYWludElu
Zm8ucik7Ci0KLSAgICBmbG9hdCBvcGFjaXR5ID0gc3R5bGUoKS0+b3BhY2l0eSgpOwotICAgIGlm
IChvcGFjaXR5IDwgMS4wZikKLSAgICAgICAgLy8gRklYTUU6IG9uY2UgUmVuZGVyU1ZHVGV4dDo6
cmVsYXRpdmVCQm94KCkgaXMgZml4ZWQsIGNsaXBwaW5nIHRvIHRoZSBjdXJyZW50IGJib3ggaGVy
ZSB3aWxsIHNhdmUgdGltZSB3aGVuIHJlbmRlcmluZyB0ZXh0IHcvIG9wYWNpdHkKLSAgICAgICAg
Yy0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLQotICAgIEtSZW5kZXJpbmdQYWlu
dFNlcnZlciAqZmlsbFBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRT
ZXJ2ZXIoc3R5bGUoKSwgdGhpcyk7Ci0gICAgaWYgKGZpbGxQYWludFNlcnZlcikgewotICAgICAg
ICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dCh0cnVlKTsKLSAgICAgICAgaWYgKGZp
bGxQYWludFNlcnZlci0+c2V0dXAoY29udGV4dCwgdGhpcywgQVBQTFlfVE9fRklMTCkpIHsKLSAg
ICAgICAgICAgIFJlbmRlckJsb2NrOjpwYWludChwaSwgMCwgMCk7Ci0gICAgICAgICAgICBmaWxs
UGFpbnRTZXJ2ZXItPnRlYXJkb3duKGNvbnRleHQsIHRoaXMsIEFQUExZX1RPX0ZJTEwpOwotICAg
ICAgICB9Ci0gICAgICAgIGZpbGxQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KGZhbHNlKTsK
LSAgICB9Ci0gICAgCi0gICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpzdHJva2VQYWludFNlcnZl
ciA9IEtTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tlUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcyk7
Ci0gICAgaWYgKHN0cm9rZVBhaW50U2VydmVyKSB7Ci0gICAgICAgIHN0cm9rZVBhaW50U2VydmVy
LT5zZXRQYWludGluZ1RleHQodHJ1ZSk7Ci0gICAgICAgIGlmIChzdHJva2VQYWludFNlcnZlci0+
c2V0dXAoY29udGV4dCwgdGhpcywgQVBQTFlfVE9fU1RST0tFKSkgewotICAgICAgICAgICAgUmVu
ZGVyQmxvY2s6OnBhaW50KHBpLCAwLCAwKTsKLSAgICAgICAgICAgIHN0cm9rZVBhaW50U2VydmVy
LT50ZWFyZG93bihjb250ZXh0LCB0aGlzLCBBUFBMWV9UT19TVFJPS0UpOwotICAgICAgICB9Ci0g
ICAgICAgIHN0cm9rZVBhaW50U2VydmVyLT5zZXRQYWludGluZ1RleHQoZmFsc2UpOwotICAgIH0K
LQotICAgIGlmIChmaWx0ZXIpCi0gICAgICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIoYm91bmRpbmdC
b3gpOwotCi0gICAgaWYgKG9wYWNpdHkgPCAxLjBmKQotICAgICAgICBjLT5lbmRUcmFuc3BhcmVu
Y3lMYXllcigpOwotCi0gICAgLy8gcmVzdG9yZSBkcmF3aW5nIHN0YXRlCi0gICAgaWYgKCFzaG91
bGRQb3BDb250ZXh0KQotICAgICAgICBwYWludEluZm8ucC0+cmVzdG9yZSgpOwotICAgIGVsc2Ug
ewotICAgICAgICBkZXZpY2UtPnBvcENvbnRleHQoKTsKLSAgICAgICAgZGVsZXRlIGNvbnRleHQ7
Ci0gICAgfQotfQotCiB2b2lkIFJlbmRlclNWR1RleHQ6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRS
ZWN0KEludFJlY3QmIHIsIGJvb2wgZikKIHsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
ID0gdHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5lKCkgKiB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMo
KSAqIGFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9
IGxvY2FsVHJhbnNmb3JtKCk7CiAgICAgciA9IHRyYW5zZm9ybS5tYXBSZWN0KHIpOwotICAgIAog
ICAgIFJlbmRlckNvbnRhaW5lcjo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QociwgZik7Cisg
ICAgciA9IHRyYW5zZm9ybS5pbnZlcnQoKS5tYXBSZWN0KHIpOwogfQogCiBib29sIFJlbmRlclNW
R1RleHQ6OnJlcXVpcmVzTGF5ZXIoKQpAQCAtMTYwLDkgKzYzLDEyIEBAIHZvaWQgUmVuZGVyU1ZH
VGV4dDo6bGF5b3V0KCkKICAgICBib29sIGNoZWNrRm9yUmVwYWludCA9IGNoZWNrRm9yUmVwYWlu
dER1cmluZ0xheW91dCgpOwogICAgIGlmIChjaGVja0ZvclJlcGFpbnQpCiAgICAgICAgIG9sZEJv
dW5kcyA9IG1fYWJzb2x1dGVCb3VuZHM7Ci0KKyAgICBTVkdUZXh0RWxlbWVudCogdGV4dCA9IHN0
YXRpY19jYXN0PFNWR1RleHRFbGVtZW50ICo+KGVsZW1lbnQoKSk7CisgICAgaW50IHhPZmZzZXQg
PSB0ZXh0LT54KCktPmdldEZpcnN0KCkgPyB0ZXh0LT54KCktPmdldEZpcnN0KCktPnZhbHVlKCkg
OiAwOworICAgIGludCB5T2Zmc2V0ID0gdGV4dC0+eSgpLT5nZXRGaXJzdCgpID8gdGV4dC0+eSgp
LT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKKyAgICB0aGlzLT5zZXRQb3MoeE9mZnNldCwgeU9m
ZnNldCk7CiAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwotCisgICAgCiAgICAgbV9hYnNvbHV0
ZUJvdW5kcyA9IGdldEFic29sdXRlUmVwYWludFJlY3QoKTsKIAogICAgIGJvb2wgcmVwYWludGVk
ID0gZmFsc2U7CkBAIC0xNzIsMTEgKzc4LDI1IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0
KCkKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAKK0lubGluZUJveCogUmVuZGVyU1ZH
VGV4dDo6Y3JlYXRlSW5saW5lQm94KGJvb2wgbWFrZVBsYWNlSG9sZGVyQm94LCBib29sIGlzUm9v
dExpbmVCb3gsIGJvb2wgaXNPbmx5UnVuKQoreworICAgIGFzc2VydCghaXNJbmxpbmVGbG93KCkp
OworICAgIElubGluZUZsb3dCb3gqIGZsb3dCb3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIFNWR1Jv
b3RJbmxpbmVCb3godGhpcyk7CisgICAgCisgICAgaWYgKCFtX2ZpcnN0TGluZUJveCkKKyAgICAg
ICAgbV9maXJzdExpbmVCb3ggPSBtX2xhc3RMaW5lQm94ID0gZmxvd0JveDsKKyAgICBlbHNlIHsK
KyAgICAgICAgbV9sYXN0TGluZUJveC0+c2V0TmV4dExpbmVCb3goZmxvd0JveCk7CisgICAgICAg
IGZsb3dCb3gtPnNldFByZXZpb3VzTGluZUJveChtX2xhc3RMaW5lQm94KTsKKyAgICAgICAgbV9s
YXN0TGluZUJveCA9IGZsb3dCb3g7CisgICAgfQorICAgIAorICAgIHJldHVybiBmbG93Qm94Owor
fQorCiBib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KE5vZGVJbmZvJiBpbmZvLCBpbnQg
X3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9u
KQogewotICAgIEFmZmluZVRyYW5zZm9ybSB0b3RhbFRyYW5zZm9ybSA9IHRyYW5zbGF0aW9uRm9y
QXR0cmlidXRlcygpOwotICAgIHRvdGFsVHJhbnNmb3JtICo9IHRyYW5zbGF0aW9uVG9wVG9CYXNl
bGluZSgpOwotICAgIHRvdGFsVHJhbnNmb3JtICo9IGFic29sdXRlVHJhbnNmb3JtKCk7CisgICAg
QWZmaW5lVHJhbnNmb3JtIHRvdGFsVHJhbnNmb3JtID0gYWJzb2x1dGVUcmFuc2Zvcm0oKTsKICAg
ICBkb3VibGUgbG9jYWxYLCBsb2NhbFk7CiAgICAgdG90YWxUcmFuc2Zvcm0uaW52ZXJ0KCkubWFw
KF94LCBfeSwgJmxvY2FsWCwgJmxvY2FsWSk7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2Rl
QXRQb2ludChpbmZvLCAoaW50KWxvY2FsWCwgKGludClsb2NhbFksIF90eCwgX3R5LCBoaXRUZXN0
QWN0aW9uKTsKQEAgLTE4NCwxMSArMTA0LDMzIEBAIGJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0
UG9pbnQoTm9kZUluZm8KIAogdm9pZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQogewotICAgIEFmZmluZVRyYW5zZm9y
bSBtYXQgPSB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKTsKLSAgICBtYXQgKj0gdHJhbnNsYXRp
b25Ub3BUb0Jhc2VsaW5lKCk7Ci0gICAgbWF0ICo9IGFic29sdXRlVHJhbnNmb3JtKCk7CisgICAg
SW5saW5lQm94KiBib3ggPSBtX2ZpcnN0TGluZUJveDsKKyAgICBpZiAoIWJveCkKKyAgICAgICAg
cmV0dXJuOworICAgIEFmZmluZVRyYW5zZm9ybSBib3hUcmFuc2Zvcm0gPSBtX2ZpcnN0TGluZUJv
eC0+b2JqZWN0KCktPmFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgRmxvYXRSZWN0IGJveFJlY3Qg
PSBGbG9hdFJlY3QoeFBvcygpICsgYm94LT54UG9zKCksIHlQb3MoKSArIGJveC0+eVBvcygpLCBi
b3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpOworICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJ
bnRSZWN0KGJveFRyYW5zZm9ybS5tYXBSZWN0KGJveFJlY3QpKSk7Cit9CisKK3ZvaWQgUmVuZGVy
U1ZHVGV4dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBfdHgsIGludCBfdHkpCit7
ICAgIAorICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgpOwor
ICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIHBpID0gcGFpbnRJbmZvOworICAgIE93blB0cjxH
cmFwaGljc0NvbnRleHQ+IGMoZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpLT5jcmVhdGVHcmFwaGlj
c0NvbnRleHQoKSk7CisgICAgcGkucCA9IGMuZ2V0KCk7CisgICAgcGkuciA9IChhYnNvbHV0ZVRy
YW5zZm9ybSgpKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5mby5yKTsKKyAgICBSZW5kZXJCbG9j
azo6cGFpbnQocGksIF90eCwgX3R5KTsKK30KIAotICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJ
bnRSZWN0KG1hdC5tYXBSZWN0KEZsb2F0UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkpKSk7
CitGbG9hdFJlY3QgUmVuZGVyU1ZHVGV4dDo6cmVsYXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0cm9r
ZSkgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgYm91bmRzUmVjdDsKKyAgICBJbmxpbmVCb3gqIGJv
eCA9IG1fZmlyc3RMaW5lQm94OworICAgIGlmIChib3gpIHsKKyAgICAgICAgYm91bmRzUmVjdCA9
IEZsb2F0UmVjdCh4UG9zKCkgKyBib3gtPnhQb3MoKSwgeVBvcygpICsgYm94LT55UG9zKCksIGJv
eC0+d2lkdGgoKSwgYm94LT5oZWlnaHQoKSk7CisgICAgICAgIGJvdW5kc1JlY3QgPSBsb2NhbFRy
YW5zZm9ybSgpLm1hcFJlY3QoYm91bmRzUmVjdCk7CisgICAgfQorICAgIHJldHVybiBib3VuZHNS
ZWN0OwogfQogCiB9CkluZGV4OiBrY2FudmFzL1JlbmRlclNWR1RleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrY2FudmFzL1JlbmRlclNWR1RleHQuaAkocmV2aXNpb24gMTY4NzcpCisrKyBrY2FudmFzL1Jl
bmRlclNWR1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVk
ZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNCwyNSAr
MzUsMjEgQEAgY2xhc3MgU1ZHVGV4dEVsZW1lbnQ7CiBjbGFzcyBSZW5kZXJTVkdUZXh0IDogcHVi
bGljIFJlbmRlckJsb2NrCiB7CiBwdWJsaWM6Ci0gICAgUmVuZGVyU1ZHVGV4dChTVkdUZXh0RWxl
bWVudCAqbm9kZSk7CisgICAgUmVuZGVyU1ZHVGV4dChTVkdUZXh0RWxlbWVudCogbm9kZSk7CiAK
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVu
ZGVyU1ZHVGV4dCI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBh
cmVudFgsIGludCBwYXJlbnRZKTsKICAgICAKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBs
b2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAgICAgdmlydHVh
bCB2b2lkIHNldExvY2FsVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9Ci0gICAgCisgICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSk7CiAgICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KE5vZGVJbmZvJiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVz
dEFjdGlvbik7Ci0KICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVj
dD4mLCBpbnQgdHgsIGludCB0eSk7Ci0KICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUFic29sdXRl
UmVwYWludFJlY3QoSW50UmVjdCYgciwgYm9vbCBmKTsKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWly
ZXNMYXllcigpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAgICAKKyAgICB2aXJ0dWFs
IEZsb2F0UmVjdCByZWxhdGl2ZUJCb3goYm9vbCBpbmNsdWRlU3Ryb2tlID0gdHJ1ZSkgY29uc3Q7
CisgICAgdmlydHVhbCBJbmxpbmVCb3gqIGNyZWF0ZUlubGluZUJveChib29sIG1ha2VQbGFjZUhv
bGRlckJveCwgYm9vbCBpc1Jvb3RMaW5lQm94LCBib29sIGlzT25seVJ1biA9IGZhbHNlKTsKICBw
cml2YXRlOgotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKTsK
LSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7CiAgICAgQWZm
aW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogICAgIEludFJlY3QgbV9hYnNvbHV0ZUJvdW5kczsK
IH07CkluZGV4OiBrY2FudmFzL1NWR0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtj
YW52YXMvU1ZHSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1NWR0lu
bGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4KKyAq
ICAgICAgICAgICAoQykgMjAwNiBBcHBsZSBDb21wdXRlciBJbmMuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKworI2lmZGVmIFNWR19TVVBQ
T1JUCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJTVkdJbmxpbmVGbG93Qm94LmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0Rldmlj
ZS5oIgorI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgorI2luY2x1ZGUgIktDYW52
YXNDbGlwcGVyLmgiCisjaW5jbHVkZSAiS0NhbnZhc01hc2tlci5oIgorI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKKwordm9pZCBTVkdJbmxpbmVGbG93Qm94
OjpwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0
eSkgCit7CisgICAgcGFpbnRTVkdJbmxpbmVGbG93KHRoaXMsIG9iamVjdCgpLCBwYWludEluZm8s
IHR4LCB0eSk7Cit9CisKK3ZvaWQgcGFpbnRTVkdJbmxpbmVGbG93KElubGluZUZsb3dCb3gqIGZs
b3csIFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBpbnQgdHgsIGludCB0eSkKK3sKKyAgICBpZiAocGFpbnRJbmZvLnAtPnBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRl
dmljZSA9IHJlbmRlcmluZ0RldmljZSgpOworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBj
b250ZXh0ID0gZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpOworICAgIGJvb2wgc2hvdWxkUG9wQ29u
dGV4dCA9IGZhbHNlOworICAgIGlmIChjb250ZXh0KQorICAgICAgICBwYWludEluZm8ucC0+c2F2
ZSgpOworICAgIGVsc2UgeworICAgICAgICAvLyBOZWVkIHRvIHNldCB1cCBLQ2FudmFzIHJlbmRl
cmluZyBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRvbmUuCisgICAgICAgIGNvbnRleHQgPSBw
YWludEluZm8ucC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpOworICAgICAgICBkZXZp
Y2UtPnB1c2hDb250ZXh0KGNvbnRleHQpOworICAgICAgICBzaG91bGRQb3BDb250ZXh0ID0gdHJ1
ZTsKKyAgICB9CisgICAgCisKKyAgICBjb250ZXh0LT5jb25jYXRDVE0ob2JqZWN0LT5sb2NhbFRy
YW5zZm9ybSgpKTsKKyAgICAKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3godHgrZmxvdy0+eFBv
cygpICwgdHkrZmxvdy0+eVBvcygpLCBmbG93LT53aWR0aCgpLCBmbG93LT5oZWlnaHQoKSk7Cisg
ICAgCisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gb2JqZWN0LT5zdHlsZSgp
LT5zdmdTdHlsZSgpOworICAgIGlmIChLQ2FudmFzQ2xpcHBlciogY2xpcHBlciA9IGdldENsaXBw
ZXJCeUlkKG9iamVjdC0+ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmNsaXBQYXRoKCkuc3Vic3RyaW5n
KDEpKSkKKyAgICAgICAgY2xpcHBlci0+YXBwbHlDbGlwKGJvdW5kaW5nQm94KTsKKyAgICAKKyAg
ICBpZiAoS0NhbnZhc01hc2tlciogbWFza2VyID0gZ2V0TWFza2VyQnlJZChvYmplY3QtPmRvY3Vt
ZW50KCksIHN2Z1N0eWxlLT5tYXNrRWxlbWVudCgpLnN1YnN0cmluZygxKSkpCisgICAgICAgIG1h
c2tlci0+YXBwbHlNYXNrKGJvdW5kaW5nQm94KTsKKyAgICAKKyAgICBLQ2FudmFzRmlsdGVyKiBm
aWx0ZXIgPSBnZXRGaWx0ZXJCeUlkKG9iamVjdC0+ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmZpbHRl
cigpLnN1YnN0cmluZygxKSk7CisgICAgaWYgKGZpbHRlcikKKyAgICAgICAgZmlsdGVyLT5wcmVw
YXJlRmlsdGVyKGJvdW5kaW5nQm94KTsKKyAgICAKKyAgICBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byBwaSA9IHBhaW50SW5mbzsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjKGRldmljZS0+
Y3VycmVudENvbnRleHQoKS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkpOworICAgIHBpLnAgPSBj
LmdldCgpOworICAgIGlmICghZmxvdy0+aXNSb290SW5saW5lQm94KCkpCisgICAgICAgIHBpLnIg
PSAob2JqZWN0LT5sb2NhbFRyYW5zZm9ybSgpKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5mby5y
KTsKKyAgICAKKyAgICBmbG9hdCBvcGFjaXR5ID0gb2JqZWN0LT5zdHlsZSgpLT5vcGFjaXR5KCk7
CisgICAgaWYgKG9wYWNpdHkgPCAxLjBmKSB7CisgICAgICAgIGMtPmNsaXAoZW5jbG9zaW5nSW50
UmVjdChib3VuZGluZ0JveCkpOworICAgICAgICBjLT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9w
YWNpdHkpOworICAgIH0KKyAgICAKKyAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIqIGZpbGxQYWlu
dFNlcnZlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50U2VydmVyKG9iamVjdC0+c3R5
bGUoKSwgb2JqZWN0KTsKKyAgICBpZiAoZmlsbFBhaW50U2VydmVyKSB7CisgICAgICAgIGZpbGxQ
YWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KHRydWUpOworICAgICAgICBpZiAoZmlsbFBhaW50
U2VydmVyLT5zZXR1cChjb250ZXh0LCBvYmplY3QsIEFQUExZX1RPX0ZJTEwpKSB7CisgICAgICAg
ICAgICBmbG93LT5wYXJlbnRQYWludE1ldGhvZChwaSwgdHgsIHR5KTsKKyAgICAgICAgICAgIGZp
bGxQYWludFNlcnZlci0+dGVhcmRvd24oY29udGV4dCwgb2JqZWN0LCBBUFBMWV9UT19GSUxMKTsK
KyAgICAgICAgfQorICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dChmYWxz
ZSk7CisgICAgfQorICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciogc3Ryb2tlUGFpbnRTZXJ2ZXIg
PSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKG9iamVjdC0+c3R5bGUoKSwg
b2JqZWN0KTsKKyAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKKyAgICAgICAgc3Ryb2tlUGFp
bnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dCh0cnVlKTsKKyAgICAgICAgaWYgKHN0cm9rZVBhaW50
U2VydmVyLT5zZXR1cChjb250ZXh0LCBvYmplY3QsIEFQUExZX1RPX1NUUk9LRSkpIHsKKyAgICAg
ICAgICAgIGZsb3ctPnBhcmVudFBhaW50TWV0aG9kKHBpLCB0eCwgdHkpOworICAgICAgICAgICAg
c3Ryb2tlUGFpbnRTZXJ2ZXItPnRlYXJkb3duKGNvbnRleHQsIG9iamVjdCwgQVBQTFlfVE9fU1RS
T0tFKTsKKyAgICAgICAgfQorICAgICAgICBzdHJva2VQYWludFNlcnZlci0+c2V0UGFpbnRpbmdU
ZXh0KGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgaWYgKGZpbHRlcikgCisgICAgICAgIGZpbHRl
ci0+YXBwbHlGaWx0ZXIoYm91bmRpbmdCb3gpOworICAgIAorICAgIGlmIChvcGFjaXR5IDwgMS4w
ZikKKyAgICAgICAgYy0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKworICAgIC8vIHJlc3RvcmUg
ZHJhd2luZyBzdGF0ZQorICAgIGlmICghc2hvdWxkUG9wQ29udGV4dCkKKyAgICAgICAgcGFpbnRJ
bmZvLnAtPnJlc3RvcmUoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZGV2aWNlLT5wb3BDb250ZXh0
KCk7CisgICAgICAgIGRlbGV0ZSBjb250ZXh0OworICAgIH0KK30KKworfQorI2VuZGlmIC8vIFNW
R19TVVBQT1JUCkluZGV4OiBrY2FudmFzL1NWR0lubGluZUZsb3dCb3guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrY2FudmFzL1NWR0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvU1ZH
SW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgorICog
ICAgICAgICAgIChDKSAyMDA2IEFwcGxlIENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTVkdJbmxpbmVG
bG93Qm94X0gKKyNkZWZpbmUgU1ZHSW5saW5lRmxvd0JveF9ICisKKyNpZmRlZiBTVkdfU1VQUE9S
VAorCisjaW5jbHVkZSAiSW5saW5lRmxvd0JveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZQorewor
Cit2b2lkIHBhaW50U1ZHSW5saW5lRmxvdyhJbmxpbmVGbG93Qm94KiBmbG93LCBSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkp
OworCitjbGFzcyBTVkdJbmxpbmVGbG93Qm94IDogcHVibGljIElubGluZUZsb3dCb3ggeworcHVi
bGljOgorICAgIFNWR0lubGluZUZsb3dCb3goUmVuZGVyT2JqZWN0KiBvYmopIDogSW5saW5lRmxv
d0JveChvYmopCisgICAgeworICAgICAgICBtX2lzU1ZHRmxvdyA9IHRydWU7CisgICAgfQorICAg
IHZpcnR1YWwgdm9pZCBwYXJlbnRQYWludE1ldGhvZChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
aSwgaW50IF90eCwgaW50IF90eSl7IElubGluZUZsb3dCb3g6OnBhaW50KGksIF90eCwgX3R5KTsg
fQorICAgIHZpcnR1YWwgdm9pZCBwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50
IF90eCwgaW50IF90eSk7Cit9OworCit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorCisjZW5k
aWYgLy8gIVNWR0lubGluZUZsb3dCb3hfSApJbmRleDoga2NhbnZhcy9TVkdSb290SW5saW5lQm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1NWR1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lv
biAwKQorKysga2NhbnZhcy9TVkdSb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0MCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVj
dC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQu
Y2FudGVyYnVyeS5hYy5uej4KKyAqICAgICAgICAgICAoQykgMjAwNiBBcHBsZSBDb21wdXRlciBJ
bmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICov
CisKKworI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTVkdSb290SW5saW5lQm94LmgiCisjaW5jbHVkZSAiU1ZHSW5saW5lRmxvd0JveC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZQoreworCit2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OnBhaW50KFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSkg
Cit7CisgICAgcGFpbnRTVkdJbmxpbmVGbG93KHRoaXMsIG9iamVjdCgpLCBwYWludEluZm8sIHBh
cmVudFgsIHBhcmVudFkpOworfQorCit9CisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtj
YW52YXMvU1ZHUm9vdElubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvU1ZHUm9vdElu
bGluZUJveC5oCShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9TVkdSb290SW5saW5lQm94LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50
IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgKiAgICAgICAgICAgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFNWR1Jvb3RJbmxpbmVCb3hfSAorI2RlZmluZSBT
VkdSb290SW5saW5lQm94X0gKKworI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJSb290
SW5saW5lQm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlCit7CisgICAgCitjbGFzcyBTVkdSb290
SW5saW5lQm94IDogcHVibGljIFJvb3RJbmxpbmVCb3ggeworcHVibGljOgorICAgIFNWR1Jvb3RJ
bmxpbmVCb3goUmVuZGVyT2JqZWN0KiBvYmopIDogUm9vdElubGluZUJveChvYmopCisgICAgewor
ICAgICAgICBtX2lzU1ZHRmxvdyA9IHRydWU7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwYXJl
bnRQYWludE1ldGhvZChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90
eSl7IFJvb3RJbmxpbmVCb3g6OnBhaW50KGksIF90eCwgX3R5KTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSk7Cit9
OworCit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorCisjZW5kaWYgLy8gIVJvb3RJbmxpbmVC
b3hfSApJbmRleDoga3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
c3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjg3NykKKysrIGtzdmcyL3N2
Zy9TVkdUUmVmRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUgIlJlbmRl
clNWR0lubGluZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNzksNyArNzks
NyBAQCBib29sIFNWR1RSZWZFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlCiAKIFJlbmRlck9i
amVjdCAqU1ZHVFJlZkVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwg
UmVuZGVyU3R5bGUgKikKIHsKLSAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVySW5saW5lKHRo
aXMpOworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdJbmxpbmUodGhpcyk7CiB9CiAK
IC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IGtzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjg3
NykKKysrIGtzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw3ICsyNCw3IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdUU3BhbkVsZW1l
bnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgor
I2luY2x1ZGUgIlJlbmRlclNWR1RTcGFuLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CkBAIC00Nyw3ICs0Nyw3IEBAIGJvb2wgU1ZHVFNwYW5FbGVtZW50OjpjaGlsZFNob3VsZENyZWF0
ZVIKIAogUmVuZGVyT2JqZWN0ICpTVkdUU3BhbkVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRl
ckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKikKIHsKLSAgICByZXR1cm4gbmV3IChhcmVuYSkg
UmVuZGVySW5saW5lKHRoaXMpOworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdUU3Bh
bih0aGlzKTsKIH0KIAogLy8gdmltOnRzPTQ6bm9ldApJbmRleDogcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2
aXNpb24gMTY4NzcpCisrKyByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDExIEBACiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRl
ICJTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5o
IgorI2VuZGlmIC8vIFNWR19TVVBQT1JUCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTIzOCw4ICsyNDMsMTM3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6
ZGV0ZXJtaW5lU3BhY2luZ0ZvckYKICAgICB9CiB9CiAKKworI2lmZGVmIFNWR19TVVBQT1JUCisK
K3N0YXRpYyBib29sIHRyYW5zbGF0ZUJveChJbmxpbmVCb3gqIGJveCwgaW50IHgsIGludCB5LCBi
b29sIHRvcExldmVsID0gdHJ1ZSkKK3sgICAgCisgICAgaWYgKGJveC0+b2JqZWN0KCktPmlzVGV4
dCgpKSAKKyAgICB7CisgICAgICAgIGJveC0+c2V0WFBvcyhib3gtPnhQb3MoKSArIHgpOworICAg
ICAgICBib3gtPnNldFlQb3MoYm94LT55UG9zKCkgKyB5KTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgSW5saW5lRmxvd0JveCogZmxvdyA9IHN0YXRpY19jYXN0PElubGluZUZsb3dC
b3gqPihib3gpOworICAgICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50KiB0ZXh0ID0gc3Rh
dGljX2Nhc3Q8U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCo+KGJveC0+b2JqZWN0KCktPmVsZW1l
bnQoKSk7CisgICAgICAgIAorICAgICAgICBpZiAodG9wTGV2ZWx8fCEodGV4dC0+eCgpLT5nZXRG
aXJzdCgpIHx8IHRleHQtPnkoKS0+Z2V0Rmlyc3QoKSB8fCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICh0ZXh0LT5keCgpLT5nZXRGaXJzdCgpICYmIHRleHQtPmR4KCktPmdldEZpcnN0KCktPnZh
bHVlKCkpIHx8Ly9keCBleGlzdHMgYW5kIGlzIG5vbi16ZXJvCisgICAgICAgICAgICAgICAgICAg
ICAgICAodGV4dC0+ZHkoKS0+Z2V0Rmlyc3QoKSAmJiB0ZXh0LT5keSgpLT5nZXRGaXJzdCgpLT52
YWx1ZSgpKSkpIC8vZGl0dG8gZm9yIGR5CisgICAgICAgIHsKKyAgICAgICAgICAgIGJveC0+c2V0
WFBvcyhib3gtPnhQb3MoKSArIHgpOworICAgICAgICAgICAgYm94LT5zZXRZUG9zKGJveC0+eVBv
cygpICsgeSk7CisgICAgICAgICAgICBmb3IgKElubGluZUJveCogY3VyciA9IGZsb3ctPmZpcnN0
Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRPbkxpbmUoKSkgCisgICAgICAgICAgICAg
ICAgaWYgKCF0cmFuc2xhdGVCb3goY3VyciwgeCwgeSwgZmFsc2UpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2ludCBJbmxpbmVGbG93Qm94OjpwbGFjZVBvc2l0aW9uZWRCb3hlc0hvcml6b250YWxseShp
bnQgeCwgaW50JiBsZWZ0UG9zaXRpb24sIGludCYgcmlnaHRQb3NpdGlvbiwgaW50ICZsZWZ0QWxp
Z24sIGludCAmcmlnaHRBbGlnbiwgYm9vbCYgbmVlZHNXb3JkU3BhY2luZywgaW50IHhQb3MsIGJv
b2wgcG9zaXRpb25lZCkKK3sKKyAgICAvL2ludCBzdGFydHggPSB4OworICAgIGludCBtbiA9IElO
VF9NQVg7CisgICAgaW50IG14ID0gSU5UX01JTjsKKyAgICBpbnQgYW1uID0gSU5UX01BWDsKKyAg
ICBpbnQgYW14ID0gSU5UX01JTjsKKyAgICBpbnQgc3RhcnR4ID0geDsKKyAgICBib29sIHNlZW5Q
b3NpdGlvbmVkRWxlbWVudCA9IGZhbHNlOworICAgIHNldFhQb3MoeCk7CisgICAgZm9yIChJbmxp
bmVCb3gqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5l
KCkpIAorICAgIHsKKyAgICAgICAgaWYgKGN1cnItPm9iamVjdCgpLT5pc1RleHQoKSkgeworICAg
ICAgICAgICAgbW4gPSBtaW4obW4sIHgpOworICAgICAgICAgICAgYW1uID0gbWluKGFtbiwgeCk7
CisgICAgICAgICAgICBJbmxpbmVUZXh0Qm94KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4
dEJveCo+KGN1cnIpOworICAgICAgICAgICAgUmVuZGVyVGV4dCogcnQgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJUZXh0Kj4odGV4dC0+b2JqZWN0KCkpOworICAgICAgICAgICAgaWYgKHJ0LT5sZW5ndGgo
KSkgeworICAgICAgICAgICAgICAgIGlmIChuZWVkc1dvcmRTcGFjaW5nICYmIERlcHJlY2F0ZWRD
aGFyKHJ0LT50ZXh0KClbdGV4dC0+c3RhcnQoKV0pLmlzU3BhY2UoKSkKKyAgICAgICAgICAgICAg
ICAgICAgeCArPSBydC0+Zm9udChtX2ZpcnN0TGluZSktPndvcmRTcGFjaW5nKCk7CisgICAgICAg
ICAgICAgICAgbmVlZHNXb3JkU3BhY2luZyA9ICFEZXByZWNhdGVkQ2hhcihydC0+dGV4dCgpW3Rl
eHQtPmVuZCgpXSkuaXNTcGFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGV4dC0+
c2V0WFBvcyh4KTsKKyAgICAgICAgICAgIHggKz0gdGV4dC0+d2lkdGgoKTsKKyAgICAgICAgICAg
IG14ID0gbWF4KG14LCB4KTsKKyAgICAgICAgICAgIGFteCA9IG1heChhbXgsIHgpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KGN1cnItPm9iamVjdCgpLT5pc0lubGluZUZs
b3coKSk7CisgICAgICAgICAgICBJbmxpbmVGbG93Qm94KiBmbG93ID0gc3RhdGljX2Nhc3Q8SW5s
aW5lRmxvd0JveCo+KGN1cnIpOworICAgICAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVu
dCogdGV4dCA9IHN0YXRpY19jYXN0PFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqPihmbG93LT5v
YmplY3QoKS0+ZWxlbWVudCgpKTsKKyAgICAgICAgICAgIHggKz0gdGV4dC0+ZHgoKS0+Z2V0Rmly
c3QoKSA/IHRleHQtPmR4KCktPmdldEZpcnN0KCktPnZhbHVlKCkgOiAwOworICAgICAgICAgICAg
aWYgKHRleHQtPngoKS0+Z2V0Rmlyc3QoKSkKKyAgICAgICAgICAgICAgICB4ID0gdGV4dC0+eCgp
LT5nZXRGaXJzdCgpLT52YWx1ZSgpIC0geFBvczsKKyAgICAgICAgICAgIGlmICh0ZXh0LT54KCkt
PmdldEZpcnN0KCkgfHwgdGV4dC0+eSgpLT5nZXRGaXJzdCgpIHx8IAorICAgICAgICAgICAgICAg
ICh0ZXh0LT5keCgpLT5nZXRGaXJzdCgpICYmIHRleHQtPmR4KCktPmdldEZpcnN0KCktPnZhbHVl
KCkpIHx8CisgICAgICAgICAgICAgICAgKHRleHQtPmR5KCktPmdldEZpcnN0KCkgJiYgdGV4dC0+
ZHkoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgc2VlblBvc2l0aW9uZWRFbGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBuZWVkc1dv
cmRTcGFjaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaW50IGlnbm9yZVgsIGlnbm9yZVk7
CisgICAgICAgICAgICAgICAgeCA9IGZsb3ctPnBsYWNlUG9zaXRpb25lZEJveGVzSG9yaXpvbnRh
bGx5KHgsIG1uLCBteCwgaWdub3JlWCwgaWdub3JlWSwgbmVlZHNXb3JkU3BhY2luZywgeFBvcywg
dHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzZWVuUG9zaXRpb25l
ZEVsZW1lbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IF9hbW4sIF9hbXg7
IC8vdGhyb3cgYXdheSB0aGVzZSB2YWx1ZXMKKyAgICAgICAgICAgICAgICB4ID0gZmxvdy0+cGxh
Y2VQb3NpdGlvbmVkQm94ZXNIb3Jpem9udGFsbHkoeCwgbW4sIG14LCBfYW1uLCBfYW14LCBuZWVk
c1dvcmRTcGFjaW5nLCB4UG9zLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgeCA9IGZsb3ctPnBsYWNlUG9zaXRpb25lZEJveGVzSG9yaXpv
bnRhbGx5KHgsIG1uLCBteCwgYW1uLCBhbXgsIG5lZWRzV29yZFNwYWNpbmcsIHhQb3MsIGZhbHNl
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobW4gPiBteCkKKyAgICAgICAgbW4gPSBteCA9
IHN0YXJ0eDsKKyAgICBpZiAoYW1uID4gYW14KQorICAgICAgICBhbW4gPSBhbXggPSBzdGFydHg7
CisgICAgCisgICAgaW50IHdpZHRoID0gbXggLSBtbjsKKyAgICBzZXRXaWR0aCh3aWR0aCk7Cisg
ICAgaW50IGF3aWR0aCA9IGFteCAtIGFtbjsKKyAgICBpbnQgZHg9MDsKKyAgICBpZiAocG9zaXRp
b25lZCkgeworICAgICAgICBzd2l0Y2ggKG9iamVjdCgpLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT50
ZXh0QW5jaG9yKCkpIAorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRBX01JRERMRToKKyAg
ICAgICAgICAgICAgICB0cmFuc2xhdGVCb3godGhpcywgZHggPSAtYXdpZHRoLzIsIDApOyAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUQV9FTkQ6
CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlQm94KHRoaXMsIGR4ID0gLWF3aWR0aCwgMCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRBX1NUQVJUOgorICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoZHgpIAorICAgICAgICB7CisgICAgICAgICAgICB4ICs9IGR4OworICAgICAgICAgICAg
bW4gKz0gZHg7CisgICAgICAgICAgICBteCArPSBkeDsKKyAgICAgICAgfQorICAgIH0KKyAgICBs
ZWZ0UG9zaXRpb24gPSBtaW4obGVmdFBvc2l0aW9uLCBtbik7CisgICAgcmlnaHRQb3NpdGlvbiA9
IG1heChyaWdodFBvc2l0aW9uLCBteCk7CisgICAgbGVmdEFsaWduID0gbWluKGxlZnRBbGlnbiwg
YW1uKTsKKyAgICByaWdodEFsaWduID0gbWF4KHJpZ2h0QWxpZ24sIGFteCk7CisgICAgCisgICAg
cmV0dXJuIHg7Cit9CisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKKwogaW50IElubGluZUZsb3dCb3g6
OnBsYWNlQm94ZXNIb3Jpem9udGFsbHkoaW50IHgsIGludCYgbGVmdFBvc2l0aW9uLCBpbnQmIHJp
Z2h0UG9zaXRpb24sIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcpCiB7CisjaWZkZWYgU1ZHX1NVUFBP
UlQKKyAgICBpZiAobV9pc1NWR0Zsb3cpIAorICAgIHsKKyAgICAgICAgaW50IGlnbm9yZVgsIGln
bm9yZVk7CisgICAgICAgIHggPSBwbGFjZVBvc2l0aW9uZWRCb3hlc0hvcml6b250YWxseSh4LCBs
ZWZ0UG9zaXRpb24sIHJpZ2h0UG9zaXRpb24sIGlnbm9yZVgsIGlnbm9yZVksIG5lZWRzV29yZFNw
YWNpbmcsIG9iamVjdCgpLT54UG9zKCksIHRydWUpOworICAgICAgICBsZWZ0UG9zaXRpb24gPSBt
aW4obGVmdFBvc2l0aW9uLCB4KTsKKyAgICAgICAgcmlnaHRQb3NpdGlvbiA9IG1heChyaWdodFBv
c2l0aW9uLCB4KTsKKyAgICAgICAgbmVlZHNXb3JkU3BhY2luZyA9IGZhbHNlOworICAgICAgICBy
ZXR1cm4geDsKKyAgICB9CisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKICAgICAvLyBTZXQgb3VyIHgg
cG9zaXRpb24uCiAgICAgc2V0WFBvcyh4KTsKICAgICBsZWZ0UG9zaXRpb24gPSBtaW4oeCwgbGVm
dFBvc2l0aW9uKTsKQEAgLTMwNSwxMyArNDM5LDU5IEBAIGludCBJbmxpbmVGbG93Qm94OjpwbGFj
ZUJveGVzSG9yaXpvbnRhbGwKICAgICByZXR1cm4geDsKIH0KIAorI2lmZGVmIFNWR19TVVBQT1JU
Cit2b2lkIElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNWZXJ0aWNhbGx5V2l0aEFic0Jhc2VsaW5l
KGludCYgaGVpZ2h0T2ZCbG9jaywgaW50ICZtaW5feSwgaW50ICZtYXhfeSwgaW50ICZiYXNlbGlu
ZSwgaW50IHlQb3MpCit7CisgICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdENoaWxkKCk7
IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgaWYgKGN1cnItPmlz
SW5saW5lRmxvd0JveCgpKSAKKyAgICAgICAgeworICAgICAgICAgICAgU1ZHVGV4dFBvc2l0aW9u
aW5nRWxlbWVudCogdGV4dCA9IHN0YXRpY19jYXN0PFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQq
PihjdXJyLT5vYmplY3QoKS0+ZWxlbWVudCgpKTsKKyAgICAgICAgICAgIGJhc2VsaW5lICs9IHRl
eHQtPmR5KCktPmdldEZpcnN0KCkgPyB0ZXh0LT5keSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDog
MDsKKyAgICAgICAgICAgIGlmICh0ZXh0LT55KCktPmdldEZpcnN0KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYmFzZWxpbmUgPSB0ZXh0LT55KCktPmdldEZpcnN0KCktPnZhbHVl
KCkgLSB5UG9zOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW5saW5l
Rmxvd0JveCo+KGN1cnIpLT5wbGFjZUJveGVzVmVydGljYWxseVdpdGhBYnNCYXNlbGluZShoZWln
aHRPZkJsb2NrLCBtaW5feSwgbWF4X3ksIGJhc2VsaW5lLCB5UG9zKTsKKyAgICAgICAgfQorICAg
ICAgICBjb25zdCBGb250JiBmb250ID0gY3Vyci0+b2JqZWN0KCktPmZvbnQodHJ1ZSk7CisgICAg
ICAgIGludCBhc2NlbnQgPSBmb250LmFzY2VudCgpOworICAgICAgICBpbnQgcG9zaXRpb24gPSBi
YXNlbGluZSAtIGFzY2VudDsKKyAgICAgICAgaW50IGhlaWdodCA9IGFzY2VudCArIGZvbnQuZGVz
Y2VudCgpOworICAgICAgICBjdXJyLT5zZXRCYXNlbGluZShhc2NlbnQpOworICAgICAgICBjdXJy
LT5zZXRZUG9zKHBvc2l0aW9uKTsKKyAgICAgICAgY3Vyci0+c2V0SGVpZ2h0KGhlaWdodCk7CisK
KyAgICAgICAgaWYgKHBvc2l0aW9uIDwgbWluX3kpIAorICAgICAgICAgICAgbWluX3kgPSBwb3Np
dGlvbjsKKyAgICAgICAgaWYgKHBvc2l0aW9uICsgaGVpZ2h0ID4gbWF4X3kpIAorICAgICAgICAg
ICAgbWF4X3kgPSBwb3NpdGlvbiArIGhlaWdodDsKKyAgICB9CisgICAgaWYgKGlzUm9vdElubGlu
ZUJveCgpKSB7CisgICAgICAgIHNldFlQb3MobWluX3kpOworICAgICAgICBzZXRIZWlnaHQobWF4
X3kgLSBtaW5feSk7CisgICAgICAgIHNldEJhc2VsaW5lKGJhc2VsaW5lIC0gbWluX3kpOworICAg
ICAgICBoZWlnaHRPZkJsb2NrICs9IG1heF95IC0gbWluX3k7CisgICAgfQorfQorI2VuZGlmIC8v
IFNWR19TVVBQT1JUCisKIHZvaWQgSW5saW5lRmxvd0JveDo6dmVydGljYWxseUFsaWduQm94ZXMo
aW50JiBoZWlnaHRPZkJsb2NrKQogewogICAgIGludCBtYXhQb3NpdGlvblRvcCA9IDA7CiAgICAg
aW50IG1heFBvc2l0aW9uQm90dG9tID0gMDsKICAgICBpbnQgbWF4QXNjZW50ID0gMDsKICAgICBp
bnQgbWF4RGVzY2VudCA9IDA7Ci0KKyNpZmRlZiBTVkdfU1VQUE9SVAorICAgIGlmIChtX2lzU1ZH
RmxvdykgeworICAgICAgICAvL0Fic29sdXRlIHBvc2l0aW9ucyBpbiBTVkcgZGljdGF0ZSBwb3Np
dGlvbiBvZiBiYXNlbGluZQorICAgICAgICAvL3NvIHdlIGRyb3AgdG8gYSBzaW1wbGVyIGxheW91
dCBmdW5jdGlvbgorICAgICAgICBpbnQgdG9wID0gSU5UX01BWCwgYm90dG9tID0gSU5UX01JTiwg
YmFzZWxpbmUgPSBoZWlnaHRPZkJsb2NrOworICAgICAgICBwbGFjZUJveGVzVmVydGljYWxseVdp
dGhBYnNCYXNlbGluZShoZWlnaHRPZkJsb2NrLCB0b3AsIGJvdHRvbSwgYmFzZWxpbmUsIG9iamVj
dCgpLT55UG9zKCkpOworICAgICAgICBzZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25zKHRvcCwg
Ym90dG9tKTsKKyAgICAgICAgc2V0VmVydGljYWxTZWxlY3Rpb25Qb3NpdGlvbnModG9wLCBib3R0
b20pOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAgICAg
Ly8gRmlndXJlIG91dCBpZiB3ZSdyZSBpbiBzdHJpY3QgbW9kZS4gIE5vdGUgdGhhdCB3ZSBjYW4n
dCBzaW1wbHkgdXNlICFzdHlsZSgpLT5odG1sSGFja3MoKSwKICAgICAvLyBiZWNhdXNlIHRoYXQg
d291bGQgbWF0Y2ggYWxtb3N0IHN0cmljdCBtb2RlIGFzIHdlbGwuCiAgICAgUmVuZGVyT2JqZWN0
KiBjdXJyID0gb2JqZWN0KCk7CkluZGV4OiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDE2ODc3KQorKysg
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTQgKzMxLDEw
IEBAIGNsYXNzIElubGluZUZsb3dCb3ggOiBwdWJsaWMgSW5saW5lUnVuQm8KIHsKIHB1YmxpYzoK
ICAgICBJbmxpbmVGbG93Qm94KFJlbmRlck9iamVjdCogb2JqKQotICAgIDpJbmxpbmVSdW5Cb3go
b2JqKQotICAgIHsKLSAgICAgICAgbV9maXJzdENoaWxkID0gMDsKLSAgICAgICAgbV9sYXN0Q2hp
bGQgPSAwOwotICAgICAgICBtX2luY2x1ZGVMZWZ0RWRnZSA9IG1faW5jbHVkZVJpZ2h0RWRnZSA9
IGZhbHNlOwotICAgICAgICBtX2hhc1RleHRDaGlsZHJlbiA9IGZhbHNlOwotICAgICAgICBtX21h
eEhvcml6b250YWxTaGFkb3cgPSAwOwotICAgIH0KKyAgICA6SW5saW5lUnVuQm94KG9iaiksIG1f
Zmlyc3RDaGlsZCgwKSwgbV9sYXN0Q2hpbGQoMCksIAorICAgICBtX21heEhvcml6b250YWxTaGFk
b3coMCksIG1faW5jbHVkZUxlZnRFZGdlKGZhbHNlKSwKKyAgICAgbV9pbmNsdWRlUmlnaHRFZGdl
KGZhbHNlKSwgbV9oYXNUZXh0Q2hpbGRyZW4oZmFsc2UpLCAKKyAgICAgbV9pc1NWR0Zsb3coZmFs
c2UpIHsgfQogCiAgICAgUmVuZGVyRmxvdyogZmxvd09iamVjdCgpOwogCkBAIC03Niw2ICs3Miw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbXksIGludCBtaCwgaW50
IF90eCwgaW50IF90eSwgaW50IHcsIGludCBoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnREZWNv
cmF0aW9ucyhSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSwgYm9v
bCBwYWludGVkQ2hpbGRyZW4gPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFyZW50UGFpbnRNZXRob2QoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGludCBfdHgs
IGludCBfdHkpeyBwYWludChpLCBfdHgsIF90eSk7IH0KICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyYgaSwgaW50IHgsIGludCB5LCBpbnQgdHgsIGlu
dCB0eSk7CiAKICAgICBpbnQgbWFyZ2luQm9yZGVyUGFkZGluZ0xlZnQoKTsKQEAgLTEwMCwxMSAr
OTcsMTggQEAgcHVibGljOgogICAgIGludCBnZXRGbG93U3BhY2luZ1dpZHRoKCk7CiAgICAgYm9v
bCBvbkVuZENoYWluKFJlbmRlck9iamVjdCogZW5kT2JqZWN0KTsKICAgICBpbnQgcGxhY2VCb3hl
c0hvcml6b250YWxseShpbnQgeCwgaW50JiBsZWZ0UG9zaXRpb24sIGludCYgcmlnaHRQb3NpdGlv
biwgYm9vbCYgbmVlZHNXb3JkU3BhY2luZyk7CisjaWZkZWYgU1ZHX1NVUFBPUlQKKyAgICBpbnQg
cGxhY2VQb3NpdGlvbmVkQm94ZXNIb3Jpem9udGFsbHkoaW50IHgsIGludCYgbGVmdFBvc2l0aW9u
LCBpbnQmIHJpZ2h0UG9zaXRpb24sIGludCAmbGVmdEFsaWduLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICZyaWdodEFsaWduLCBib29sJiBuZWVkc1dvcmRT
cGFjaW5nLCBpbnQgeFBvcywgYm9vbCBwb3NpdGlvbmVkKTsKKyNlbmRpZiAvLyBTVkdfU1VQUE9S
VAogICAgIHZvaWQgdmVydGljYWxseUFsaWduQm94ZXMoaW50JiBoZWlnaHRPZkJsb2NrKTsKICAg
ICB2b2lkIGNvbXB1dGVMb2dpY2FsQm94SGVpZ2h0cyhpbnQmIG1heFBvc2l0aW9uVG9wLCBpbnQm
IG1heFBvc2l0aW9uQm90dG9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCYgbWF4QXNjZW50LCBpbnQmIG1heERlc2NlbnQsIGJvb2wgc3RyaWN0TW9kZSk7CiAgICAgdm9p
ZCBhZGp1c3RNYXhBc2NlbnRBbmREZXNjZW50KGludCYgbWF4QXNjZW50LCBpbnQmIG1heERlc2Nl
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhQb3NpdGlvblRv
cCwgaW50IG1heFBvc2l0aW9uQm90dG9tKTsKKyNpZmRlZiBTVkdfU1VQUE9SVAorICAgIHZvaWQg
cGxhY2VCb3hlc1ZlcnRpY2FsbHlXaXRoQWJzQmFzZWxpbmUoaW50JiBoZWlnaHRPZkJsb2NrLCBp
bnQgJm1pbl95LCBpbnQgJm1heF95LCBpbnQgJmJhc2VsaW5lLCBpbnQgeVBvcyk7CisjZW5kaWYg
Ly8gU1ZHX1NVUFBPUlQKICAgICB2b2lkIHBsYWNlQm94ZXNWZXJ0aWNhbGx5KGludCB5LCBpbnQg
bWF4SGVpZ2h0LCBpbnQgbWF4QXNjZW50LCBib29sIHN0cmljdE1vZGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQmIHRvcFBvc2l0aW9uLCBpbnQmIGJvdHRvbVBvc2l0aW9uLCBp
bnQmIHNlbGVjdGlvblRvcCwgaW50JiBzZWxlY3Rpb25Cb3R0b20pOwogICAgIHZvaWQgc2hyaW5r
Qm94ZXNXaXRoTm9UZXh0Q2hpbGRyZW4oaW50IHRvcFBvc2l0aW9uLCBpbnQgYm90dG9tUG9zaXRp
b24pOwpAQCAtMTE4LDggKzEyMiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBj
YW5BY2NvbW1vZGF0ZUVsbGlwc2lzKGJvb2wgbHRyLCBpbnQgYmxvY2tFZGdlLCBpbnQgZWxsaXBz
aXNXaWR0aCk7Ci0gICAgdmlydHVhbCBpbnQgcGxhY2VFbGxpcHNpc0JveChib29sIGx0ciwgaW50
IGJsb2NrRWRnZSwgaW50IGVsbGlwc2lzV2lkdGgsIGJvb2wmKTsKLQorICAgIHZpcnR1YWwgaW50
IHBsYWNlRWxsaXBzaXNCb3goYm9vbCBsdHIsIGludCBibG9ja0VkZ2UsIGludCBlbGxpcHNpc1dp
ZHRoLCBib29sJik7ICAgIAogcHJvdGVjdGVkOgogICAgIElubGluZUJveCogbV9maXJzdENoaWxk
OwogICAgIElubGluZUJveCogbV9sYXN0Q2hpbGQ7CkBAIC0xMjcsNiArMTMwLDcgQEAgcHJvdGVj
dGVkOgogICAgIGJvb2wgbV9pbmNsdWRlTGVmdEVkZ2UgOiAxOwogICAgIGJvb2wgbV9pbmNsdWRl
UmlnaHRFZGdlIDogMTsKICAgICBib29sIG1faGFzVGV4dENoaWxkcmVuIDogMTsKKyAgICBib29s
IG1faXNTVkdGbG93IDogMTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IHJlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHAJKHJldmlzaW9uIDE2ODc3KQorKysgcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgSW50UmVjdCBJbmxpbmVUZXh0Qm94OjpzZWxl
Y3Rpb25SZWN0KGludAogewogICAgIGludCBzUG9zID0gbWF4KHN0YXJ0UG9zIC0gbV9zdGFydCwg
MCk7CiAgICAgaW50IGVQb3MgPSBtaW4oZW5kUG9zIC0gbV9zdGFydCwgKGludCltX2xlbik7Ci0g
ICAgCisKICAgICBpZiAoc1BvcyA+PSBlUG9zKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwog
CkluZGV4OiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gMTY4NzcpCisrKyByZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgUmVuZGVy
SW5saW5lOjpjYWxjTWluTWF4V2lkdGgoKQogfQogCiBib29sIFJlbmRlcklubGluZTo6cmVxdWly
ZXNMYXllcigpIHsKLSAgICByZXR1cm4gaXNSb290KCkgfHwgaXNSZWxQb3NpdGlvbmVkKCkgfHwg
c3R5bGUoKS0+b3BhY2l0eSgpIDwgMS4wZjsKKyAgICByZXR1cm4gaXNSb290KCkgfHwgaXNSZWxQ
b3NpdGlvbmVkKCkgfHwgKHN0eWxlKCktPm9wYWNpdHkoKSA8IDEuMGYgJiYgIWVsZW1lbnQoKS0+
aXNTVkdFbGVtZW50KCkpOwogfQogCiBpbnQgUmVuZGVySW5saW5lOjp3aWR0aCgpIGNvbnN0Cklu
ZGV4OiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1Jl
bmRlclRleHQuY3BwCShyZXZpc2lvbiAxNjg3NykKKysrIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBSZW5kZXJUZXh0OjpSZW5kZXJUZXh0
KE5vZGUqIG5vZGUsIFN0cmluCiAgICAgIDogUmVuZGVyT2JqZWN0KG5vZGUpLCBzdHIoX3N0ciks
IG1fZmlyc3RUZXh0Qm94KDApLCBtX2xhc3RUZXh0Qm94KDApCiAgICAgICwgbV9taW5XaWR0aCgt
MSksIG1fbWF4V2lkdGgoLTEpLCBtX3NlbGVjdGlvblN0YXRlKFNlbGVjdGlvbk5vbmUpCiAgICAg
ICwgbV9saW5lc0RpcnR5KGZhbHNlKSwgbV9jb250YWluc1JldmVyc2VkVGV4dChmYWxzZSkKLSAg
ICAgLCBtX2FsbEFzY2lpQ2hlY2tlZChmYWxzZSksIG1fYWxsQXNjaWkoZmFsc2UpCisgICAgICwg
bV9hbGxBc2NpaUNoZWNrZWQoZmFsc2UpLCBtX2FsbEFzY2lpKGZhbHNlKSwgbV9pc1NWR1RleHQo
ZmFsc2UpCiAgICAgICwgbV9tb25vc3BhY2VDaGFyYWN0ZXJXaWR0aCgwKQogewogICAgIHNldFJl
bmRlclRleHQoKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gMTY4NzcpCisrKyByZW5kZXJpbmcvUmVu
ZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgaW50IG5leHRPZmZzZXQoaW50IGN1cnJlbnQpIGNvbnN0OwogICAgIAogICAgIGJv
b2wgY29udGFpbnNSZXZlcnNlZFRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zUmV2ZXJz
ZWRUZXh0OyB9Ci0gICAgCisgICAgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJldHVybiBtX2lz
U1ZHVGV4dDsgfQogcHVibGljOgogICAgIElubGluZVRleHRCb3ggKiBmaW5kTmV4dElubGluZVRl
eHRCb3goIGludCBvZmZzZXQsIGludCAmcG9zICkgY29uc3Q7CiAKQEAgLTE4Myw2ICsxODMsNyBA
QCBwcm90ZWN0ZWQ6IC8vIG1lbWJlcnMKICAgICAvLyAyMiBiaXRzIGxlZnQKICAgICBtdXRhYmxl
IGJvb2wgbV9hbGxBc2NpaUNoZWNrZWQ6MTsKICAgICBtdXRhYmxlIGJvb2wgbV9hbGxBc2NpaTox
OworICAgIGJvb2wgbV9pc1NWR1RleHQ6MTsKICAgICBpbnQgbV9tb25vc3BhY2VDaGFyYWN0ZXJX
aWR0aDsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10973</attachid>
            <date>2006-10-08 01:40:25 -0700</date>
            <delta_ts>2006-10-08 15:26:37 -0700</delta_ts>
            <desc>removed modification to RenderText</desc>
            <filename>newtext8.patch</filename>
            <type>text/plain</type>
            <size>58801</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2ODc3KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzU3LDEx
ICsxMzU3LDE1IEBACiAJCTkzRjE5QjE2MDgyNDVFNTkwMDFFOUFCQyAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
ICovOyB9OwogCQk5M0YxOUIxNzA4MjQ1RTU5MDAxRTlBQkMgLyogbGliaWN1Y29yZS5keWxpYiBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFEMzFB
MDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovOyB9OwogCQk5M0YxOUIxODA4
MjQ1RTU5MDAxRTlBQkMgLyogbGlieHNsdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MDYzMzA3MDczMUE3NzIwMERCMUZEMSAvKiBsaWJ4
c2x0LmR5bGliICovOyB9OworCQlBNzVFOTZFMDBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElu
bGluZUJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTc1RTk2REUwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLzsgfTsKKwkJ
QTc1RTk2RTEwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RTk2REYwQUMxMzY2RjAw
RUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwICovOyB9OwogCQlBNzYzOEE4QjA5OTU4RUE1
MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTg5MDk5NThFQTUwMDA3RTE0RiAvKiBX
S0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oICovOyB9OwogCQlBNzYzOEE4QzA5OTU4RUE1MDAwN0Ux
NEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QThBMDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3Bs
YWNlbWVudE1hcEZpbHRlci5tICovOyB9OwogCQlBNzYzOEE5MjA5OTU5MkMzMDAwN0UxNEYgLyog
V0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLzsgfTsKIAkJQTc2MzhBOTcwOTk1OTY1RDAw
MDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8q
IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oICovOyB9OwogCQlBNzYzOEE5ODA5OTU5NjVE
MDAwN0UxNEYgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTk2MDk5NTk2NUQwMDA3RTE0
RiAvKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwICovOyB9OworCQlBNzcxQ0IzRTBB
RDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzcxQ0IzQzBBRDMzQ0MyMDBERjlFMjUgLyogUmVu
ZGVyU1ZHSW5saW5lLmggKi87IH07CisJCUE3NzFDQjNGMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5k
ZXJTVkdJbmxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc3MUNCM0QwQUQzM0NDMjAwREY5RTI1IC8qIFJlbmRlclNWR0lubGluZS5jcHAgKi87
IH07CiAJCUE3Qjk3Qjc3MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVy
LmNpa2VybmVsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0I5N0I2NjA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5jaWtl
cm5lbCAqLzsgfTsKIAkJQTdCOTdCNzgwOTc5QzNBMTAwMEU4RUIxIC8qIFdLQ29tcG9uZW50TWVy
Z2VGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3Qjk3QjY3MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVyLmggKi87
IH07CiAJCUE3Qjk3Qjc5MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVy
Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I5N0I2
ODA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5tICovOyB9OwpAQCAt
MTM3OSw2ICsxMzgzLDEyIEBACiAJCUE3Qjk3Qjg1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxl
VHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3Qjk3Qjc0MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNm
ZXJGaWx0ZXIuY2lrZXJuZWwgKi87IH07CiAJCUE3Qjk3Qjg2MDk3OUMzQTEwMDBFOEVCMSAvKiBX
S1RhYmxlVHJhbnNmZXJGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3Qjk3Qjc1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNmZXJG
aWx0ZXIuaCAqLzsgfTsKIAkJQTdCOTdCODcwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFu
c2ZlckZpbHRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdCOTdCNzYwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5tICov
OyB9OworCQlBN0M1MTk0OTBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzUxOTQ3MEFDQTZB
RjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5oICovOyB9OworCQlBN0M1MTk0QTBBQ0E2QUYx
MDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDNTE5NDgwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLzsgfTsKKwkJQTdDNTFBNDYwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGlu
ZUZsb3dCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QzUxQTQ0MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi87IH07CisJ
CUE3QzUxQTQ3MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzUxQTQ1MEFDQTc0NDcw
MDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCAqLzsgfTsKKwkJQTdFMUREQkUwQUFFQ0RE
MTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTFEREJDMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5k
ZXJTVkdJbmxpbmVUZXh0LmggKi87IH07CisJCUE3RTFEREJGMEFBRUNERDEwMENBQ0QxQyAvKiBS
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3RTFEREJEMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcCAqLzsgfTsKIAkJQTgwRTZDRTQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBF
NkNCQTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmNwcCAqLzsgfTsKIAkJQTgwRTZD
RTUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQkIwQTE5ODlDQTAwN0ZC
OEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovOyB9OwogCQlBODBFNkNFNjBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0JDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmlt
aXRpdmVWYWx1ZS5oICovOyB9OwpAQCAtMzkyMiwxMSArMzkzMiwxNSBAQAogCQk5M0Y4QjMwNjBB
MzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3Jp
cHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0b3JKUy5wbTsgcGF0aCA9IC4uL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y4QjMwNzBB
MzAwRkVBMDBGNjFBQjggLyogZ2VuZXJhdGUtYmluZGluZ3MucGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5wZXJsOyBuYW1lID0gImdlbmVyYXRlLWJpbmRpbmdzLnBsIjsgcGF0aCA9ICJzY3JpcHRz
L2dlbmVyYXRlLWJpbmRpbmdzLnBsIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNG
OEIzMDgwQTMwMEZFQTAwRjYxQUI4IC8qIElETFN0cnVjdHVyZS5wbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnBlcmw7IG5hbWUgPSBJRExTdHJ1Y3R1cmUucG07IHBhdGggPSBzY3JpcHRzL0lETFN0
cnVjdHVyZS5wbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc1RTk2REUwQUMxMzY2
RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHUm9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzVFOTZERjBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSb290SW5saW5lQm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdL
RGlzcGxhY2VtZW50TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmls
dGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjM4QTkxMDk5NTkyQzMwMDA3
RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2
MzhBOTYwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzcxQ0IzQzBBRDMz
Q0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzcxQ0IzRDBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Qjk3QjY2MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0Nv
bXBvbmVudE1lcmdlRmlsdGVyLmNpa2VybmVsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXS0Nv
bXBvbmVudE1lcmdlRmlsdGVyLmNpa2VybmVsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0I5N0I2NzA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb21wb25lbnRNZXJnZUZpbHRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I5N0I2ODA5NzlDM0ExMDAwRThFQjEg
LyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpj
OyBwYXRoID0gV0tDb21wb25lbnRNZXJnZUZpbHRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzk0NCw2ICszOTU4LDEyIEBACiAJCUE3Qjk3Qjc0MDk3OUMzQTEwMDBFOEVCMSAv
KiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFdLVGFibGVUcmFuc2ZlckZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTdCOTdCNzUwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tUYWJsZVRyYW5zZmVyRmlsdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Qjk3Qjc2MDk3OUMzQTEwMDBFOEVC
MSAvKiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2Jq
YzsgcGF0aCA9IFdLVGFibGVUcmFuc2ZlckZpbHRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBN0M1MTk0NzBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHVFNwYW4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTE5NDgwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNW
R1RTcGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTFBNDQwQUNBNzQ0
NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHSW5saW5lRmxvd0JveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBN0M1MUE0NTBBQ0E3NDQ3MDA2RTJGQjkgLyogU1ZHSW5saW5lRmxvd0JveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdJbmxpbmVGbG93Qm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdFMUREQkMwQUFFQ0REMTAwQ0FDRDFDIC8qIFJl
bmRlclNWR0lubGluZVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU1ZHSW5saW5lVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0UxRERC
RDBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkEwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Zh
bHVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVmFs
dWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkIwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENTU0JvcmRlckltYWdlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODBFNkNCQzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZl
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1ByaW1pdGl2ZVZh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NTM0LDYgKzc1NTQsMTYgQEAK
IAkJCQlGQUUwNDE4OTA5NzU5Njk0MDAwNTQwQkUgLyogUmVuZGVyU1ZHSW1hZ2UuaCAqLywKIAkJ
CQk2NTc0M0I1MDA5NzA3NkY4MDAxRTdDRUYgLyogUmVuZGVyU1ZHVGV4dC5jcHAgKi8sCiAJCQkJ
NjU3NDNCNTEwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuaCAqLywKKwkJCQlBN0Ux
RERCQzBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5oICovLAorCQkJCUE3
RTFEREJEMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCAqLywKKwkJ
CQlBNzVFOTZERTBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5oICovLAorCQkJ
CUE3NUU5NkRGMEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmNwcCAqLywKKwkJ
CQlBN0M1MTk0NzBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLywKKwkJCQlB
N0M1MTk0ODBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwICovLAorCQkJCUE3
QzUxQTQ0MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi8sCisJCQkJQTdD
NTFBNDUwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guY3BwICovLAorCQkJCUE3
NzFDQjNDMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5kZXJTVkdJbmxpbmUuaCAqLywKKwkJCQlBNzcx
Q0IzRDBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0ga2NhbnZhczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC05MjI4LDYg
KzkyNTgsNyBAQAogCQkJCTg1MDY1NkZFMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01NZWRpYUxpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDY1NzAwMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01TdHls
ZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTA2NTcwMjBBQUI0NzYzMDAyRDE1QzAgLyog
RE9NU3R5bGVTaGVldExpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3RTFEREJFMEFBRUNERDEw
MENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzQ3
MDZBQjBBQUNEODA5MDAyQzFENDMgLyogVGV4dERlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg1QUZBODIyMEFBRjUyOEEwMEU4NDMwNSAvKiBET01FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODVDN0Y0OTEwQUFGNzlEQzAwNDAxNEREIC8qIERPTVVJRXZlbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtOTM3Myw2ICs5NDA0LDkgQEAKIAkJCQlCMjAxMTEwODBBQjc3NDA1MDBEQjBFNjggLyog
SlNTVkdBRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUzQkY0REIwQUJCNkI1NTAwODY0
N0JCIC8qIERPTU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1M0JGNEVCMEFCQjZFOTcwMDg2
NDdCQiAvKiBET01Ob2RlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTc1RTk2RTAwQUMx
MzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCBpbiBIZWFkZXJzICovLAorCQkJCUE3
QzUxOTQ5MEFDQTZBRjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTdDNTFBNDYwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg1QkNCQzEzMEFCQkE4N0QwMDM4MTE2MCAvKiBET01IVE1MRG9jdW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1ND
dXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTFFRTgwQzBBQkNBMjhGMDBB
NkFBMzMgLyogRE9NQWJzdHJhY3RWaWV3LmggaW4gSGVhZGVycyAqLywKQEAgLTk1NjcsNiArOTYw
MSw3IEBACiAJCQkJODUwMDREQTYwQUNFRUI1QTAwQzQzOEY2IC8qIERPTVNWR0RvY3VtZW50SW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDA0REE3MEFDRUVCNUEwMEM0MzhGNiAvKiBE
T01TVkdFbGxpcHNlRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQkI1NDE5
RjBBQ0RERkU0MDAyODIwRUIgLyogUmVuZGVyTGlzdEJveC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QTc3MUNCM0UwQUQzM0NDMjAwREY5RTI1IC8qIFJlbmRlclNWR0lubGluZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTM5MkYxNDIwQUQxODVGNDAwNjkxQkQ0IC8qIFJlbmRlckNvdW50ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzOTJGMTQ2MEFEMTg2MEMwMDY5MUJENCAvKiBDb3VudGVyUmVzZXRO
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzkyRjE0QzBBRDE4NjFCMDA2OTFCRDQgLyogQ291
bnRlck5vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTY4MCw3ICs5NzE1LDYgQEAKIAkJCW1haW5H
cm91cCA9IDA4NjdENjkxRkU4NDAyOEZDMDJBQUMwNyAvKiBXZWJLaXQgKi87CiAJCQlwcm9kdWN0
UmVmR3JvdXAgPSAwMzQ3NjhERkZGMzhBNTA0MTFEQjlDOEIgLyogUHJvZHVjdHMgKi87CiAJCQlw
cm9qZWN0RGlyUGF0aCA9ICIiOwotCQkJcHJvamVjdFJvb3QgPSAiIjsKIAkJCXRhcmdldHMgPSAo
CiAJCQkJOTNGMTk4QTUwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmUgKi8sCiAJCQkJREQwNDFG
QkUwOUQ5RERCRTAwMTBBRjJBIC8qIERlcml2ZWQgU291cmNlcyAqLywKQEAgLTEwNTc4LDYgKzEw
NjEyLDcgQEAKIAkJCQk4NTA2NTcwMTBBQUI0NzYzMDAyRDE1QzAgLyogRE9NU3R5bGVTaGVldC5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTg1MDY1NzAzMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01TdHls
ZVNoZWV0TGlzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxRUJCQkQ0MEFBQzlCODcwMDFGRThF
MiAvKiBDU1NDaGFyc2V0UnVsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBN0UxRERCRjBBQUVD
REQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NUFGQTgyMzBBQUY1MjhBMDBFODQzMDUgLyogRE9NRXZlbnQubW0gaW4gU291cmNlcyAqLywK
IAkJCQk4NUM3RjQ5MjBBQUY3OURDMDA0MDE0REQgLyogRE9NVUlFdmVudC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTg1QzdGNUMwMEFBRkI3Q0QwMDQwMTRERCAvKiBET01NdXRhdGlvbkV2ZW50Lm1t
IGluIFNvdXJjZXMgKi8sCkBAIC0xMDcxMyw2ICsxMDc0OCw5IEBACiAJCQkJQjIyMkY2OUMwQUI3
NzFCODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjAx
MTEwNzBBQjc3NDA1MDBEQjBFNjggLyogSlNTVkdBRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NTNCRjREQzBBQkI2QjU1MDA4NjQ3QkIgLyogRE9NTm9kZS5tbSBpbiBTb3VyY2VzICov
LAorCQkJCUE3NUU5NkUxMEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUE3QzUxOTRBMEFDQTZBRjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdU
U3Bhbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBN0M1MUE0NzBBQ0E3NDQ3MDA2RTJGQjkgLyog
U1ZHSW5saW5lRmxvd0JveC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NUJDQkMxNDBBQkJBODdE
MDAzODExNjAgLyogRE9NSFRNTERvY3VtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQUEyMUVD
Q0EwQUJGMEZCQTAwMkI4MzRDIC8qIENTU0N1cnNvckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODUxRUU4MEQwQUJDQTI4RjAwQTZBQTMzIC8qIERPTUFic3RyYWN0Vmlldy5tbSBp
biBTb3VyY2VzICovLApAQCAtMTA3NjAsNiArMTA3OTgsNyBAQAogCQkJCTg1MDA0RDk5MEFDRUVB
RUYwMEM0MzhGNiAvKiBET01TVkdEb2N1bWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1MDA0
RDlCMEFDRUVBRUYwMEM0MzhGNiAvKiBET01TVkdFbGxpcHNlRWxlbWVudC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUFCQjU0MTlFMEFDRERGRTQwMDI4MjBFQiAvKiBSZW5kZXJMaXN0Qm94LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUE3NzFDQjNGMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5kZXJTVkdJ
bmxpbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MkYxNDQwQUQxODVGRTAwNjkxQkQ0IC8q
IFJlbmRlckNvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MkYxNEEwQUQxODYxMzAw
NjkxQkQ0IC8qIENvdW50ZXJSZXNldE5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MkYx
NTAwQUQxODYyMzAwNjkxQkQ0IC8qIENvdW50ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogY3NzL3N2Zy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL3N2Zy5jc3MJKHJldmlzaW9uIDE2ODc3
KQorKysgY3NzL3N2Zy5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDMgKzQ5LDcgQEAgc3ZnLCBz
eW1ib2wsIG1hcmtlciwgcGF0dGVybiB7CiB0ZXh0LCBmb3JlaWduT2JqZWN0IHsKICAgICBkaXNw
bGF5OiBibG9jayAhaW1wb3J0YW50CiB9CisKK3RleHQsIHRzcGFuIHsKKyAgIHdoaXRlLXNwYWNl
OiBub3dyYXAgIWltcG9ydGFudAorfQpJbmRleDogZG9tL1RleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGRvbS9UZXh0LmNwcAkocmV2aXNpb24gMTY4NzcpCisrKyBkb20vVGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHSW5saW5lVGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE0OSw2ICsx
NTAsMTEgQEAgYm9vbCBUZXh0OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlIAogCiBSZW5k
ZXJPYmplY3QgKlRleHQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVy
U3R5bGUgKnN0eWxlKQogeworI2lmZGVmIFNWR19TVVBQT1JUCisgICAgaWYocGFyZW50Tm9kZSgp
LT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR0lu
bGluZVRleHQodGhpcywgc3RyKTsKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorICAgIAogICAgIHJl
dHVybiBuZXcgKGFyZW5hKSBSZW5kZXJUZXh0KHRoaXMsIHN0cik7CiB9CiAKSW5kZXg6IGtjYW52
YXMvUmVuZGVyU1ZHSW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR0lu
bGluZS5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1JlbmRlclNWR0lubGluZS5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50
IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgKiAgICAgICAgICAgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgU1ZHX1NVUFBP
UlQKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKKyNpbmNsdWRlICJTVkdJbmxpbmVGbG93
Qm94LmgiCisjaW5jbHVkZSAiU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oIgorI2luY2x1ZGUg
IlNWR0xlbmd0aExpc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorUmVuZGVyU1ZH
SW5saW5lOjpSZW5kZXJTVkdJbmxpbmUoTm9kZSogbikgOiBSZW5kZXJJbmxpbmUobikge30KKyAg
ICAKK0lubGluZUJveCogUmVuZGVyU1ZHSW5saW5lOjpjcmVhdGVJbmxpbmVCb3goYm9vbCBtYWtl
UGxhY2VIb2xkZXJCb3gsIGJvb2wgaXNSb290TGluZUJveCwgYm9vbCBpc09ubHlSdW4pCit7Cisg
ICAgYXNzZXJ0KCEoIWlzUm9vdExpbmVCb3ggJiYgKGlzUmVwbGFjZWQoKSB8fCBtYWtlUGxhY2VI
b2xkZXJCb3gpKSk7CisgICAgYXNzZXJ0KGlzSW5saW5lRmxvdygpKTsKKyAgICBJbmxpbmVGbG93
Qm94KiBmbG93Qm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBTVkdJbmxpbmVGbG93Qm94KHRoaXMp
OworICAgIGlmICghbV9maXJzdExpbmVCb3gpCisgICAgICAgIG1fZmlyc3RMaW5lQm94ID0gbV9s
YXN0TGluZUJveCA9IGZsb3dCb3g7CisgICAgZWxzZSB7CisgICAgICAgIG1fbGFzdExpbmVCb3gt
PnNldE5leHRMaW5lQm94KGZsb3dCb3gpOworICAgICAgICBmbG93Qm94LT5zZXRQcmV2aW91c0xp
bmVCb3gobV9sYXN0TGluZUJveCk7CisgICAgICAgIG1fbGFzdExpbmVCb3ggPSBmbG93Qm94Owor
ICAgIH0KKyAgICAgICAgCisgICAgcmV0dXJuIGZsb3dCb3g7Cit9CisKK30KKworI2VuZGlmIC8v
IFNWR19TVVBQT1JUCkluZGV4OiBrY2FudmFzL1JlbmRlclNWR0lubGluZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lLmgJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1Jl
bmRlclNWR0lubGluZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACisvKgorICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgorICog
ICAgICAgICAgIChDKSAyMDA2IEFwcGxlIENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdJ
bmxpbmVfSAorI2RlZmluZSBSZW5kZXJTVkdJbmxpbmVfSAorCisjaWZkZWYgU1ZHX1NVUFBPUlQK
KyNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
UmVuZGVyU1ZHSW5saW5lIDogcHVibGljIFJlbmRlcklubGluZSB7CitwdWJsaWM6CisgICAgICAg
IFJlbmRlclNWR0lubGluZShOb2RlKik7CisgICAgICAgIHZpcnR1YWwgY29uc3QgY2hhciAqcmVu
ZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdJbmxpbmUiOyB9CisgICAgICAgIHZp
cnR1YWwgSW5saW5lQm94KiBjcmVhdGVJbmxpbmVCb3goYm9vbCBtYWtlUGxhY2VIb2xkZXJCb3gs
IGJvb2wgaXNSb290TGluZUJveCwgYm9vbCBpc09ubHlSdW4gPSBmYWxzZSk7CisgICAgfTsKK30K
KworI2VuZGlmIC8vIFNWR19TVVBQT1JUCisjZW5kaWYgLy8gIVJlbmRlclNWR1RTcGFuX0gKSW5k
ZXg6IGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZh
cy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvUmVuZGVy
U1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+Cisg
KiAgICAgICAgICAgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIgSW5jLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAq
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZkZWYgU1ZHX1NVUFBP
UlQKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQu
aCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIktDYW52YXNSZW5k
ZXJpbmdTdHlsZS5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorUmVuZGVyU1ZH
SW5saW5lVGV4dDo6UmVuZGVyU1ZHSW5saW5lVGV4dChOb2RlKiBuLCBTdHJpbmdJbXBsKiBzdHIp
IAorICAgIDogUmVuZGVyVGV4dChuLCBzdHIpIHt9CisKK3ZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4
dDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkK
K3sKKyAgICBGbG9hdFJlY3QgYWJzb2x1dGVSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBS
ZWN0KEZsb2F0UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKSk7CisgICAgcmVjdHMuYXBw
ZW5kKGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVSZWN0KSk7Cit9CisKK0ludFJlY3QgUmVuZGVy
U1ZHSW5saW5lVGV4dDo6c2VsZWN0aW9uUmVjdCgpCit7CisgICAgSW50UmVjdCByZWN0ID0gUmVu
ZGVyVGV4dDo6c2VsZWN0aW9uUmVjdCgpOworICAgIHJlY3QgPSBwYXJlbnQoKS0+YWJzb2x1dGVU
cmFuc2Zvcm0oKS5tYXBSZWN0KHJlY3QpOworICAgIHJldHVybiByZWN0OworfQorCit9CisKKyNl
bmRpZiAvLyBTVkdfU1VQUE9SVApJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgJKHJldmlzaW9uIDAp
CisrKyBrY2FudmFzL1JlbmRlclNWR0lubGluZVRleHQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4K
KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2Fu
dGVyYnVyeS5hYy5uej4KKyAqICAgICAgICAgICAoQykgMjAwNiBBcHBsZSBDb21wdXRlciBJbmMu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNl
IC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisK
KyNpZm5kZWYgUmVuZGVyU1ZHSW5saW5lVGV4dF9ICisjZGVmaW5lIFJlbmRlclNWR0lubGluZVRl
eHRfSAorCisjaWZkZWYgU1ZHX1NVUFBPUlQKKworI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUmVuZGVyU1ZHSW5saW5lVGV4dCA6IHB1YmxpYyBS
ZW5kZXJUZXh0IHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdJbmxpbmVUZXh0KE5vZGUqLCBTdHJp
bmdJbXBsKik7CisgICAgdmlydHVhbCBjb25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gIlJlbmRlclNWR0lubGluZVRleHQiOyB9CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRl
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1
YWwgSW50UmVjdCBzZWxlY3Rpb25SZWN0KCk7Cit9OworfQorCisjZW5kaWYgLy8gU1ZHX1NVUFBP
UlQKKworI2VuZGlmIC8vICFSZW5kZXJTVkdJbmxpbmVUZXh0X0gKSW5kZXg6IGtjYW52YXMvUmVu
ZGVyU1ZHVFNwYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHVFNwYW4uY3Bw
CShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9SZW5kZXJTVkdUU3Bhbi5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBz
dHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgKiAgICAgICAgICAgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgor
ICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNs
dWRlICJSZW5kZXJTVkdUU3Bhbi5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZp
Y2UuaCIKKyNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCisjaW5jbHVkZSAiU1ZHSW5saW5l
Rmxvd0JveC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIlNWR1Rl
eHRQb3NpdGlvbmluZ0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGhMaXN0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1JlbmRlclNWR1RTcGFuOjpSZW5kZXJTVkdUU3BhbihO
b2RlKiBuKSA6IFJlbmRlclNWR0lubGluZShuKSB7fQorCit2b2lkIFJlbmRlclNWR1RTcGFuOjph
YnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQorewor
ICAgIElubGluZUZsb3dCb3gqIGluaXRGbG93ID0gZmlyc3RMaW5lQm94KCk7CisgICAgRmxvYXRS
ZWN0IGJvdW5kcyh0eCArIGluaXRGbG93LT54UG9zKCksIHR5ICsgaW5pdEZsb3ctPnlQb3MoKSwg
d2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KGFi
c29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChib3VuZHMpKSk7Cit9CisKKworfQorCisjZW5kaWYg
Ly8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHVFNwYW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrY2FudmFzL1JlbmRlclNWR1RTcGFuLmgJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1Jl
bmRlclNWR1RTcGFuLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgKiAg
ICAgICAgICAgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIgSW5jLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJv
c3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1RT
cGFuX0gKKyNkZWZpbmUgUmVuZGVyU1ZHVFNwYW5fSAorCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNp
bmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
UmVuZGVyU1ZHVFNwYW4gOiBwdWJsaWMgUmVuZGVyU1ZHSW5saW5lIHsKK3B1YmxpYzoKKyAgICBS
ZW5kZXJTVkdUU3BhbihOb2RlKik7CisgICAgdmlydHVhbCBjb25zdCBjaGFyICpyZW5kZXJOYW1l
KCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1RTcGFuIjsgfQorICAgIHZpcnR1YWwgdm9pZCBh
YnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KTsKK307
Cit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorI2VuZGlmIC8vICFSZW5kZXJTVkdUU3Bhbl9I
CkluZGV4OiBrY2FudmFzL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMv
UmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDE2ODc3KQorKysga2NhbnZhcy9SZW5kZXJTVkdU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqICAgICAgICAgICAgICAgMjAwNiBBbGV4
YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgorICogICAgICAgICAgICAgICAyMDA2IE9s
aXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNiwxMjQgKzI3LDI2IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgog
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiS0NhbnZhc0NsaXBwZXIu
aCIKLSNpbmNsdWRlICJLQ2FudmFzTWFza2VyLmgiCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmlu
Z1N0eWxlLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlNWR0xl
bmd0aExpc3QuaCIKICNpbmNsdWRlICJTVkdUZXh0RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1Jv
b3RJbmxpbmVCb3guaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotUmVuZGVyU1ZHVGV4dDo6UmVuZGVyU1ZHVGV4dChTVkdUZXh0RWxlbWVudCAqbm9k
ZSkgCitSZW5kZXJTVkdUZXh0OjpSZW5kZXJTVkdUZXh0KFNWR1RleHRFbGVtZW50KiBub2RlKSAK
ICAgICA6IFJlbmRlckJsb2NrKG5vZGUpCiB7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBSZW5kZXJT
VkdUZXh0Ojp0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKQotewotICAgIGludCBvZmZzZXQgPSBi
YXNlbGluZVBvc2l0aW9uKHRydWUsIHRydWUpOwotICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0o
KS50cmFuc2xhdGUoMCwgLW9mZnNldCk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdU
ZXh0Ojp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKQotewotICAgIFNWR1RleHRFbGVtZW50ICp0
ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dEVsZW1lbnQqPihlbGVtZW50KCkpOwotCi0gICAgU1ZH
TGVuZ3RoKiB4T2Zmc2V0ID0gdGV4dC0+eCgpLT5nZXRGaXJzdCgpLmdldCgpOwotICAgIFNWR0xl
bmd0aCogeU9mZnNldCA9IHRleHQtPnkoKS0+Z2V0Rmlyc3QoKS5nZXQoKTsKLQotICAgIHJldHVy
biBBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoeE9mZnNldCA/IHhPZmZzZXQtPnZhbHVlKCkg
OiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeU9mZnNldCA/IHlP
ZmZzZXQtPnZhbHVlKCkgOiAwKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdUZXh0OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKQotewotICAgIGlmIChw
YWludEluZm8ucC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBL
UmVuZGVyaW5nRGV2aWNlKiBkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKLSAgICBLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dCogY29udGV4dCA9IGRldmljZS0+Y3VycmVudENvbnRleHQoKTsKLSAg
ICBib29sIHNob3VsZFBvcENvbnRleHQgPSBmYWxzZTsKLSAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gTmVlZCB0byBz
ZXQgdXAgS0NhbnZhcyByZW5kZXJpbmcgaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBkb25lLgot
ICAgICAgICBjb250ZXh0ID0gcGFpbnRJbmZvLnAtPmNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRl
eHQoKTsKLSAgICAgICAgZGV2aWNlLT5wdXNoQ29udGV4dChjb250ZXh0KTsKLSAgICAgICAgc2hv
dWxkUG9wQ29udGV4dCA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIGNvbnRleHQtPmNvbmNhdENU
TShsb2NhbFRyYW5zZm9ybSgpKTsKLSAgICBjb250ZXh0LT5jb25jYXRDVE0oQWZmaW5lVHJhbnNm
b3JtKCkudHJhbnNsYXRlKHBhcmVudFgsIHBhcmVudFkpKTsKLSAgICBjb250ZXh0LT5jb25jYXRD
VE0odHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkpOwotICAgIGNvbnRleHQtPmNvbmNhdENUTSh0
cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKSk7Ci0gICAgCi0gICAgRmxvYXRSZWN0IGJvdW5kaW5n
Qm94KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSog
c3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgICAgICAgICAgCi0gICAgaWYgKEtD
YW52YXNDbGlwcGVyKiBjbGlwcGVyID0gZ2V0Q2xpcHBlckJ5SWQoZG9jdW1lbnQoKSwgc3ZnU3R5
bGUtPmNsaXBQYXRoKCkuc3Vic3RyaW5nKDEpKSkKLSAgICAgICAgY2xpcHBlci0+YXBwbHlDbGlw
KGJvdW5kaW5nQm94KTsKLQotICAgIGlmIChLQ2FudmFzTWFza2VyKiBtYXNrZXIgPSBnZXRNYXNr
ZXJCeUlkKGRvY3VtZW50KCksIHN2Z1N0eWxlLT5tYXNrRWxlbWVudCgpLnN1YnN0cmluZygxKSkp
Ci0gICAgICAgIG1hc2tlci0+YXBwbHlNYXNrKGJvdW5kaW5nQm94KTsKLQotICAgIEtDYW52YXNG
aWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5SWQoZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmZpbHRl
cigpLnN1YnN0cmluZygxKSk7Ci0gICAgaWYgKGZpbHRlcikKLSAgICAgICAgZmlsdGVyLT5wcmVw
YXJlRmlsdGVyKGJvdW5kaW5nQm94KTsKLSAgICAgICAgCi0gICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dD4gYyhkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgp
KTsKLSAgICBQYWludEluZm8gcGkgPSBwYWludEluZm87Ci0gICAgcGkucCA9IGMuZ2V0KCk7Ci0g
ICAgcGkuciA9ICh0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKSAqIHRyYW5zbGF0aW9uRm9yQXR0
cmlidXRlcygpICogYWJzb2x1dGVUcmFuc2Zvcm0oKSkuaW52ZXJ0KCkubWFwUmVjdChwYWludElu
Zm8ucik7Ci0KLSAgICBmbG9hdCBvcGFjaXR5ID0gc3R5bGUoKS0+b3BhY2l0eSgpOwotICAgIGlm
IChvcGFjaXR5IDwgMS4wZikKLSAgICAgICAgLy8gRklYTUU6IG9uY2UgUmVuZGVyU1ZHVGV4dDo6
cmVsYXRpdmVCQm94KCkgaXMgZml4ZWQsIGNsaXBwaW5nIHRvIHRoZSBjdXJyZW50IGJib3ggaGVy
ZSB3aWxsIHNhdmUgdGltZSB3aGVuIHJlbmRlcmluZyB0ZXh0IHcvIG9wYWNpdHkKLSAgICAgICAg
Yy0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLQotICAgIEtSZW5kZXJpbmdQYWlu
dFNlcnZlciAqZmlsbFBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRT
ZXJ2ZXIoc3R5bGUoKSwgdGhpcyk7Ci0gICAgaWYgKGZpbGxQYWludFNlcnZlcikgewotICAgICAg
ICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dCh0cnVlKTsKLSAgICAgICAgaWYgKGZp
bGxQYWludFNlcnZlci0+c2V0dXAoY29udGV4dCwgdGhpcywgQVBQTFlfVE9fRklMTCkpIHsKLSAg
ICAgICAgICAgIFJlbmRlckJsb2NrOjpwYWludChwaSwgMCwgMCk7Ci0gICAgICAgICAgICBmaWxs
UGFpbnRTZXJ2ZXItPnRlYXJkb3duKGNvbnRleHQsIHRoaXMsIEFQUExZX1RPX0ZJTEwpOwotICAg
ICAgICB9Ci0gICAgICAgIGZpbGxQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KGZhbHNlKTsK
LSAgICB9Ci0gICAgCi0gICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpzdHJva2VQYWludFNlcnZl
ciA9IEtTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tlUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcyk7
Ci0gICAgaWYgKHN0cm9rZVBhaW50U2VydmVyKSB7Ci0gICAgICAgIHN0cm9rZVBhaW50U2VydmVy
LT5zZXRQYWludGluZ1RleHQodHJ1ZSk7Ci0gICAgICAgIGlmIChzdHJva2VQYWludFNlcnZlci0+
c2V0dXAoY29udGV4dCwgdGhpcywgQVBQTFlfVE9fU1RST0tFKSkgewotICAgICAgICAgICAgUmVu
ZGVyQmxvY2s6OnBhaW50KHBpLCAwLCAwKTsKLSAgICAgICAgICAgIHN0cm9rZVBhaW50U2VydmVy
LT50ZWFyZG93bihjb250ZXh0LCB0aGlzLCBBUFBMWV9UT19TVFJPS0UpOwotICAgICAgICB9Ci0g
ICAgICAgIHN0cm9rZVBhaW50U2VydmVyLT5zZXRQYWludGluZ1RleHQoZmFsc2UpOwotICAgIH0K
LQotICAgIGlmIChmaWx0ZXIpCi0gICAgICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIoYm91bmRpbmdC
b3gpOwotCi0gICAgaWYgKG9wYWNpdHkgPCAxLjBmKQotICAgICAgICBjLT5lbmRUcmFuc3BhcmVu
Y3lMYXllcigpOwotCi0gICAgLy8gcmVzdG9yZSBkcmF3aW5nIHN0YXRlCi0gICAgaWYgKCFzaG91
bGRQb3BDb250ZXh0KQotICAgICAgICBwYWludEluZm8ucC0+cmVzdG9yZSgpOwotICAgIGVsc2Ug
ewotICAgICAgICBkZXZpY2UtPnBvcENvbnRleHQoKTsKLSAgICAgICAgZGVsZXRlIGNvbnRleHQ7
Ci0gICAgfQotfQotCiB2b2lkIFJlbmRlclNWR1RleHQ6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRS
ZWN0KEludFJlY3QmIHIsIGJvb2wgZikKIHsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
ID0gdHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5lKCkgKiB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMo
KSAqIGFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9
IGxvY2FsVHJhbnNmb3JtKCk7CiAgICAgciA9IHRyYW5zZm9ybS5tYXBSZWN0KHIpOwotICAgIAog
ICAgIFJlbmRlckNvbnRhaW5lcjo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QociwgZik7Cisg
ICAgciA9IHRyYW5zZm9ybS5pbnZlcnQoKS5tYXBSZWN0KHIpOwogfQogCiBib29sIFJlbmRlclNW
R1RleHQ6OnJlcXVpcmVzTGF5ZXIoKQpAQCAtMTYwLDkgKzYzLDEyIEBAIHZvaWQgUmVuZGVyU1ZH
VGV4dDo6bGF5b3V0KCkKICAgICBib29sIGNoZWNrRm9yUmVwYWludCA9IGNoZWNrRm9yUmVwYWlu
dER1cmluZ0xheW91dCgpOwogICAgIGlmIChjaGVja0ZvclJlcGFpbnQpCiAgICAgICAgIG9sZEJv
dW5kcyA9IG1fYWJzb2x1dGVCb3VuZHM7Ci0KKyAgICBTVkdUZXh0RWxlbWVudCogdGV4dCA9IHN0
YXRpY19jYXN0PFNWR1RleHRFbGVtZW50ICo+KGVsZW1lbnQoKSk7CisgICAgaW50IHhPZmZzZXQg
PSB0ZXh0LT54KCktPmdldEZpcnN0KCkgPyB0ZXh0LT54KCktPmdldEZpcnN0KCktPnZhbHVlKCkg
OiAwOworICAgIGludCB5T2Zmc2V0ID0gdGV4dC0+eSgpLT5nZXRGaXJzdCgpID8gdGV4dC0+eSgp
LT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKKyAgICB0aGlzLT5zZXRQb3MoeE9mZnNldCwgeU9m
ZnNldCk7CiAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwotCisgICAgCiAgICAgbV9hYnNvbHV0
ZUJvdW5kcyA9IGdldEFic29sdXRlUmVwYWludFJlY3QoKTsKIAogICAgIGJvb2wgcmVwYWludGVk
ID0gZmFsc2U7CkBAIC0xNzIsMTEgKzc4LDI1IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0
KCkKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAKK0lubGluZUJveCogUmVuZGVyU1ZH
VGV4dDo6Y3JlYXRlSW5saW5lQm94KGJvb2wgbWFrZVBsYWNlSG9sZGVyQm94LCBib29sIGlzUm9v
dExpbmVCb3gsIGJvb2wgaXNPbmx5UnVuKQoreworICAgIGFzc2VydCghaXNJbmxpbmVGbG93KCkp
OworICAgIElubGluZUZsb3dCb3gqIGZsb3dCb3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIFNWR1Jv
b3RJbmxpbmVCb3godGhpcyk7CisgICAgCisgICAgaWYgKCFtX2ZpcnN0TGluZUJveCkKKyAgICAg
ICAgbV9maXJzdExpbmVCb3ggPSBtX2xhc3RMaW5lQm94ID0gZmxvd0JveDsKKyAgICBlbHNlIHsK
KyAgICAgICAgbV9sYXN0TGluZUJveC0+c2V0TmV4dExpbmVCb3goZmxvd0JveCk7CisgICAgICAg
IGZsb3dCb3gtPnNldFByZXZpb3VzTGluZUJveChtX2xhc3RMaW5lQm94KTsKKyAgICAgICAgbV9s
YXN0TGluZUJveCA9IGZsb3dCb3g7CisgICAgfQorICAgIAorICAgIHJldHVybiBmbG93Qm94Owor
fQorCiBib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KE5vZGVJbmZvJiBpbmZvLCBpbnQg
X3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9u
KQogewotICAgIEFmZmluZVRyYW5zZm9ybSB0b3RhbFRyYW5zZm9ybSA9IHRyYW5zbGF0aW9uRm9y
QXR0cmlidXRlcygpOwotICAgIHRvdGFsVHJhbnNmb3JtICo9IHRyYW5zbGF0aW9uVG9wVG9CYXNl
bGluZSgpOwotICAgIHRvdGFsVHJhbnNmb3JtICo9IGFic29sdXRlVHJhbnNmb3JtKCk7CisgICAg
QWZmaW5lVHJhbnNmb3JtIHRvdGFsVHJhbnNmb3JtID0gYWJzb2x1dGVUcmFuc2Zvcm0oKTsKICAg
ICBkb3VibGUgbG9jYWxYLCBsb2NhbFk7CiAgICAgdG90YWxUcmFuc2Zvcm0uaW52ZXJ0KCkubWFw
KF94LCBfeSwgJmxvY2FsWCwgJmxvY2FsWSk7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2Rl
QXRQb2ludChpbmZvLCAoaW50KWxvY2FsWCwgKGludClsb2NhbFksIF90eCwgX3R5LCBoaXRUZXN0
QWN0aW9uKTsKQEAgLTE4NCwxMSArMTA0LDMzIEBAIGJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0
UG9pbnQoTm9kZUluZm8KIAogdm9pZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQogewotICAgIEFmZmluZVRyYW5zZm9y
bSBtYXQgPSB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKTsKLSAgICBtYXQgKj0gdHJhbnNsYXRp
b25Ub3BUb0Jhc2VsaW5lKCk7Ci0gICAgbWF0ICo9IGFic29sdXRlVHJhbnNmb3JtKCk7CisgICAg
SW5saW5lQm94KiBib3ggPSBtX2ZpcnN0TGluZUJveDsKKyAgICBpZiAoIWJveCkKKyAgICAgICAg
cmV0dXJuOworICAgIEFmZmluZVRyYW5zZm9ybSBib3hUcmFuc2Zvcm0gPSBtX2ZpcnN0TGluZUJv
eC0+b2JqZWN0KCktPmFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgRmxvYXRSZWN0IGJveFJlY3Qg
PSBGbG9hdFJlY3QoeFBvcygpICsgYm94LT54UG9zKCksIHlQb3MoKSArIGJveC0+eVBvcygpLCBi
b3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpOworICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJ
bnRSZWN0KGJveFRyYW5zZm9ybS5tYXBSZWN0KGJveFJlY3QpKSk7Cit9CisKK3ZvaWQgUmVuZGVy
U1ZHVGV4dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBfdHgsIGludCBfdHkpCit7
ICAgIAorICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgpOwor
ICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIHBpID0gcGFpbnRJbmZvOworICAgIE93blB0cjxH
cmFwaGljc0NvbnRleHQ+IGMoZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpLT5jcmVhdGVHcmFwaGlj
c0NvbnRleHQoKSk7CisgICAgcGkucCA9IGMuZ2V0KCk7CisgICAgcGkuciA9IChhYnNvbHV0ZVRy
YW5zZm9ybSgpKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5mby5yKTsKKyAgICBSZW5kZXJCbG9j
azo6cGFpbnQocGksIF90eCwgX3R5KTsKK30KIAotICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJ
bnRSZWN0KG1hdC5tYXBSZWN0KEZsb2F0UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkpKSk7
CitGbG9hdFJlY3QgUmVuZGVyU1ZHVGV4dDo6cmVsYXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0cm9r
ZSkgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgYm91bmRzUmVjdDsKKyAgICBJbmxpbmVCb3gqIGJv
eCA9IG1fZmlyc3RMaW5lQm94OworICAgIGlmIChib3gpIHsKKyAgICAgICAgYm91bmRzUmVjdCA9
IEZsb2F0UmVjdCh4UG9zKCkgKyBib3gtPnhQb3MoKSwgeVBvcygpICsgYm94LT55UG9zKCksIGJv
eC0+d2lkdGgoKSwgYm94LT5oZWlnaHQoKSk7CisgICAgICAgIGJvdW5kc1JlY3QgPSBsb2NhbFRy
YW5zZm9ybSgpLm1hcFJlY3QoYm91bmRzUmVjdCk7CisgICAgfQorICAgIHJldHVybiBib3VuZHNS
ZWN0OwogfQogCiB9CkluZGV4OiBrY2FudmFzL1JlbmRlclNWR1RleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrY2FudmFzL1JlbmRlclNWR1RleHQuaAkocmV2aXNpb24gMTY4NzcpCisrKyBrY2FudmFzL1Jl
bmRlclNWR1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVk
ZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNCwyNSAr
MzUsMjEgQEAgY2xhc3MgU1ZHVGV4dEVsZW1lbnQ7CiBjbGFzcyBSZW5kZXJTVkdUZXh0IDogcHVi
bGljIFJlbmRlckJsb2NrCiB7CiBwdWJsaWM6Ci0gICAgUmVuZGVyU1ZHVGV4dChTVkdUZXh0RWxl
bWVudCAqbm9kZSk7CisgICAgUmVuZGVyU1ZHVGV4dChTVkdUZXh0RWxlbWVudCogbm9kZSk7CiAK
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVu
ZGVyU1ZHVGV4dCI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBh
cmVudFgsIGludCBwYXJlbnRZKTsKICAgICAKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBs
b2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAgICAgdmlydHVh
bCB2b2lkIHNldExvY2FsVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9Ci0gICAgCisgICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSk7CiAgICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KE5vZGVJbmZvJiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVz
dEFjdGlvbik7Ci0KICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVj
dD4mLCBpbnQgdHgsIGludCB0eSk7Ci0KICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUFic29sdXRl
UmVwYWludFJlY3QoSW50UmVjdCYgciwgYm9vbCBmKTsKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWly
ZXNMYXllcigpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAgICAKKyAgICB2aXJ0dWFs
IEZsb2F0UmVjdCByZWxhdGl2ZUJCb3goYm9vbCBpbmNsdWRlU3Ryb2tlID0gdHJ1ZSkgY29uc3Q7
CisgICAgdmlydHVhbCBJbmxpbmVCb3gqIGNyZWF0ZUlubGluZUJveChib29sIG1ha2VQbGFjZUhv
bGRlckJveCwgYm9vbCBpc1Jvb3RMaW5lQm94LCBib29sIGlzT25seVJ1biA9IGZhbHNlKTsKICBw
cml2YXRlOgotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKTsK
LSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7CiAgICAgQWZm
aW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogICAgIEludFJlY3QgbV9hYnNvbHV0ZUJvdW5kczsK
IH07CkluZGV4OiBrY2FudmFzL1NWR0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtj
YW52YXMvU1ZHSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1NWR0lu
bGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4KKyAq
ICAgICAgICAgICAoQykgMjAwNiBBcHBsZSBDb21wdXRlciBJbmMuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKworI2lmZGVmIFNWR19TVVBQ
T1JUCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJTVkdJbmxpbmVGbG93Qm94LmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0Rldmlj
ZS5oIgorI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgorI2luY2x1ZGUgIktDYW52
YXNDbGlwcGVyLmgiCisjaW5jbHVkZSAiS0NhbnZhc01hc2tlci5oIgorI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKKwordm9pZCBTVkdJbmxpbmVGbG93Qm94
OjpwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0
eSkgCit7CisgICAgcGFpbnRTVkdJbmxpbmVGbG93KHRoaXMsIG9iamVjdCgpLCBwYWludEluZm8s
IHR4LCB0eSk7Cit9CisKK3ZvaWQgcGFpbnRTVkdJbmxpbmVGbG93KElubGluZUZsb3dCb3gqIGZs
b3csIFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBpbnQgdHgsIGludCB0eSkKK3sKKyAgICBpZiAocGFpbnRJbmZvLnAtPnBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRl
dmljZSA9IHJlbmRlcmluZ0RldmljZSgpOworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBj
b250ZXh0ID0gZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpOworICAgIGJvb2wgc2hvdWxkUG9wQ29u
dGV4dCA9IGZhbHNlOworICAgIGlmIChjb250ZXh0KQorICAgICAgICBwYWludEluZm8ucC0+c2F2
ZSgpOworICAgIGVsc2UgeworICAgICAgICAvLyBOZWVkIHRvIHNldCB1cCBLQ2FudmFzIHJlbmRl
cmluZyBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRvbmUuCisgICAgICAgIGNvbnRleHQgPSBw
YWludEluZm8ucC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpOworICAgICAgICBkZXZp
Y2UtPnB1c2hDb250ZXh0KGNvbnRleHQpOworICAgICAgICBzaG91bGRQb3BDb250ZXh0ID0gdHJ1
ZTsKKyAgICB9CisgICAgCisKKyAgICBjb250ZXh0LT5jb25jYXRDVE0ob2JqZWN0LT5sb2NhbFRy
YW5zZm9ybSgpKTsKKyAgICAKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3godHgrZmxvdy0+eFBv
cygpICwgdHkrZmxvdy0+eVBvcygpLCBmbG93LT53aWR0aCgpLCBmbG93LT5oZWlnaHQoKSk7Cisg
ICAgCisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gb2JqZWN0LT5zdHlsZSgp
LT5zdmdTdHlsZSgpOworICAgIGlmIChLQ2FudmFzQ2xpcHBlciogY2xpcHBlciA9IGdldENsaXBw
ZXJCeUlkKG9iamVjdC0+ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmNsaXBQYXRoKCkuc3Vic3RyaW5n
KDEpKSkKKyAgICAgICAgY2xpcHBlci0+YXBwbHlDbGlwKGJvdW5kaW5nQm94KTsKKyAgICAKKyAg
ICBpZiAoS0NhbnZhc01hc2tlciogbWFza2VyID0gZ2V0TWFza2VyQnlJZChvYmplY3QtPmRvY3Vt
ZW50KCksIHN2Z1N0eWxlLT5tYXNrRWxlbWVudCgpLnN1YnN0cmluZygxKSkpCisgICAgICAgIG1h
c2tlci0+YXBwbHlNYXNrKGJvdW5kaW5nQm94KTsKKyAgICAKKyAgICBLQ2FudmFzRmlsdGVyKiBm
aWx0ZXIgPSBnZXRGaWx0ZXJCeUlkKG9iamVjdC0+ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmZpbHRl
cigpLnN1YnN0cmluZygxKSk7CisgICAgaWYgKGZpbHRlcikKKyAgICAgICAgZmlsdGVyLT5wcmVw
YXJlRmlsdGVyKGJvdW5kaW5nQm94KTsKKyAgICAKKyAgICBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byBwaSA9IHBhaW50SW5mbzsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjKGRldmljZS0+
Y3VycmVudENvbnRleHQoKS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkpOworICAgIHBpLnAgPSBj
LmdldCgpOworICAgIGlmICghZmxvdy0+aXNSb290SW5saW5lQm94KCkpCisgICAgICAgIHBpLnIg
PSAob2JqZWN0LT5sb2NhbFRyYW5zZm9ybSgpKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5mby5y
KTsKKyAgICAKKyAgICBmbG9hdCBvcGFjaXR5ID0gb2JqZWN0LT5zdHlsZSgpLT5vcGFjaXR5KCk7
CisgICAgaWYgKG9wYWNpdHkgPCAxLjBmKSB7CisgICAgICAgIGMtPmNsaXAoZW5jbG9zaW5nSW50
UmVjdChib3VuZGluZ0JveCkpOworICAgICAgICBjLT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9w
YWNpdHkpOworICAgIH0KKyAgICAKKyAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIqIGZpbGxQYWlu
dFNlcnZlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50U2VydmVyKG9iamVjdC0+c3R5
bGUoKSwgb2JqZWN0KTsKKyAgICBpZiAoZmlsbFBhaW50U2VydmVyKSB7CisgICAgICAgIGZpbGxQ
YWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KHRydWUpOworICAgICAgICBpZiAoZmlsbFBhaW50
U2VydmVyLT5zZXR1cChjb250ZXh0LCBvYmplY3QsIEFQUExZX1RPX0ZJTEwpKSB7CisgICAgICAg
ICAgICBmbG93LT5wYXJlbnRQYWludE1ldGhvZChwaSwgdHgsIHR5KTsKKyAgICAgICAgICAgIGZp
bGxQYWludFNlcnZlci0+dGVhcmRvd24oY29udGV4dCwgb2JqZWN0LCBBUFBMWV9UT19GSUxMKTsK
KyAgICAgICAgfQorICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dChmYWxz
ZSk7CisgICAgfQorICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciogc3Ryb2tlUGFpbnRTZXJ2ZXIg
PSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKG9iamVjdC0+c3R5bGUoKSwg
b2JqZWN0KTsKKyAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKKyAgICAgICAgc3Ryb2tlUGFp
bnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dCh0cnVlKTsKKyAgICAgICAgaWYgKHN0cm9rZVBhaW50
U2VydmVyLT5zZXR1cChjb250ZXh0LCBvYmplY3QsIEFQUExZX1RPX1NUUk9LRSkpIHsKKyAgICAg
ICAgICAgIGZsb3ctPnBhcmVudFBhaW50TWV0aG9kKHBpLCB0eCwgdHkpOworICAgICAgICAgICAg
c3Ryb2tlUGFpbnRTZXJ2ZXItPnRlYXJkb3duKGNvbnRleHQsIG9iamVjdCwgQVBQTFlfVE9fU1RS
T0tFKTsKKyAgICAgICAgfQorICAgICAgICBzdHJva2VQYWludFNlcnZlci0+c2V0UGFpbnRpbmdU
ZXh0KGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgaWYgKGZpbHRlcikgCisgICAgICAgIGZpbHRl
ci0+YXBwbHlGaWx0ZXIoYm91bmRpbmdCb3gpOworICAgIAorICAgIGlmIChvcGFjaXR5IDwgMS4w
ZikKKyAgICAgICAgYy0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKworICAgIC8vIHJlc3RvcmUg
ZHJhd2luZyBzdGF0ZQorICAgIGlmICghc2hvdWxkUG9wQ29udGV4dCkKKyAgICAgICAgcGFpbnRJ
bmZvLnAtPnJlc3RvcmUoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZGV2aWNlLT5wb3BDb250ZXh0
KCk7CisgICAgICAgIGRlbGV0ZSBjb250ZXh0OworICAgIH0KK30KKworfQorI2VuZGlmIC8vIFNW
R19TVVBQT1JUCkluZGV4OiBrY2FudmFzL1NWR0lubGluZUZsb3dCb3guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrY2FudmFzL1NWR0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvU1ZH
SW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgorICog
ICAgICAgICAgIChDKSAyMDA2IEFwcGxlIENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTVkdJbmxpbmVG
bG93Qm94X0gKKyNkZWZpbmUgU1ZHSW5saW5lRmxvd0JveF9ICisKKyNpZmRlZiBTVkdfU1VQUE9S
VAorCisjaW5jbHVkZSAiSW5saW5lRmxvd0JveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZQorewor
Cit2b2lkIHBhaW50U1ZHSW5saW5lRmxvdyhJbmxpbmVGbG93Qm94KiBmbG93LCBSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkp
OworCitjbGFzcyBTVkdJbmxpbmVGbG93Qm94IDogcHVibGljIElubGluZUZsb3dCb3ggeworcHVi
bGljOgorICAgIFNWR0lubGluZUZsb3dCb3goUmVuZGVyT2JqZWN0KiBvYmopIDogSW5saW5lRmxv
d0JveChvYmopCisgICAgeworICAgICAgICBtX2lzU1ZHRmxvdyA9IHRydWU7CisgICAgfQorICAg
IHZpcnR1YWwgdm9pZCBwYXJlbnRQYWludE1ldGhvZChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
aSwgaW50IF90eCwgaW50IF90eSl7IElubGluZUZsb3dCb3g6OnBhaW50KGksIF90eCwgX3R5KTsg
fQorICAgIHZpcnR1YWwgdm9pZCBwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50
IF90eCwgaW50IF90eSk7Cit9OworCit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorCisjZW5k
aWYgLy8gIVNWR0lubGluZUZsb3dCb3hfSApJbmRleDoga2NhbnZhcy9TVkdSb290SW5saW5lQm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1NWR1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lv
biAwKQorKysga2NhbnZhcy9TVkdSb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0MCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVj
dC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQu
Y2FudGVyYnVyeS5hYy5uej4KKyAqICAgICAgICAgICAoQykgMjAwNiBBcHBsZSBDb21wdXRlciBJ
bmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICov
CisKKworI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTVkdSb290SW5saW5lQm94LmgiCisjaW5jbHVkZSAiU1ZHSW5saW5lRmxvd0JveC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZQoreworCit2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OnBhaW50KFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSkg
Cit7CisgICAgcGFpbnRTVkdJbmxpbmVGbG93KHRoaXMsIG9iamVjdCgpLCBwYWludEluZm8sIHBh
cmVudFgsIHBhcmVudFkpOworfQorCit9CisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtj
YW52YXMvU1ZHUm9vdElubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvU1ZHUm9vdElu
bGluZUJveC5oCShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9TVkdSb290SW5saW5lQm94LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50
IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgKiAgICAgICAgICAgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFNWR1Jvb3RJbmxpbmVCb3hfSAorI2RlZmluZSBT
VkdSb290SW5saW5lQm94X0gKKworI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJSb290
SW5saW5lQm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlCit7CisgICAgCitjbGFzcyBTVkdSb290
SW5saW5lQm94IDogcHVibGljIFJvb3RJbmxpbmVCb3ggeworcHVibGljOgorICAgIFNWR1Jvb3RJ
bmxpbmVCb3goUmVuZGVyT2JqZWN0KiBvYmopIDogUm9vdElubGluZUJveChvYmopCisgICAgewor
ICAgICAgICBtX2lzU1ZHRmxvdyA9IHRydWU7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwYXJl
bnRQYWludE1ldGhvZChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90
eSl7IFJvb3RJbmxpbmVCb3g6OnBhaW50KGksIF90eCwgX3R5KTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSk7Cit9
OworCit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorCisjZW5kaWYgLy8gIVJvb3RJbmxpbmVC
b3hfSApJbmRleDoga3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
c3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjg3NykKKysrIGtzdmcyL3N2
Zy9TVkdUUmVmRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUgIlJlbmRl
clNWR0lubGluZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNzksNyArNzks
NyBAQCBib29sIFNWR1RSZWZFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlCiAKIFJlbmRlck9i
amVjdCAqU1ZHVFJlZkVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwg
UmVuZGVyU3R5bGUgKikKIHsKLSAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVySW5saW5lKHRo
aXMpOworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdJbmxpbmUodGhpcyk7CiB9CiAK
IC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IGtzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjg3
NykKKysrIGtzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw3ICsyNCw3IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdUU3BhbkVsZW1l
bnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgor
I2luY2x1ZGUgIlJlbmRlclNWR1RTcGFuLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CkBAIC00Nyw3ICs0Nyw3IEBAIGJvb2wgU1ZHVFNwYW5FbGVtZW50OjpjaGlsZFNob3VsZENyZWF0
ZVIKIAogUmVuZGVyT2JqZWN0ICpTVkdUU3BhbkVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRl
ckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKikKIHsKLSAgICByZXR1cm4gbmV3IChhcmVuYSkg
UmVuZGVySW5saW5lKHRoaXMpOworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdUU3Bh
bih0aGlzKTsKIH0KIAogLy8gdmltOnRzPTQ6bm9ldApJbmRleDogcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2
aXNpb24gMTY4NzcpCisrKyByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDExIEBACiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRl
ICJTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5o
IgorI2VuZGlmIC8vIFNWR19TVVBQT1JUCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTIzOCw4ICsyNDMsMTM3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6
ZGV0ZXJtaW5lU3BhY2luZ0ZvckYKICAgICB9CiB9CiAKKworI2lmZGVmIFNWR19TVVBQT1JUCisK
K3N0YXRpYyBib29sIHRyYW5zbGF0ZUJveChJbmxpbmVCb3gqIGJveCwgaW50IHgsIGludCB5LCBi
b29sIHRvcExldmVsID0gdHJ1ZSkKK3sgICAgCisgICAgaWYgKGJveC0+b2JqZWN0KCktPmlzVGV4
dCgpKSAKKyAgICB7CisgICAgICAgIGJveC0+c2V0WFBvcyhib3gtPnhQb3MoKSArIHgpOworICAg
ICAgICBib3gtPnNldFlQb3MoYm94LT55UG9zKCkgKyB5KTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgSW5saW5lRmxvd0JveCogZmxvdyA9IHN0YXRpY19jYXN0PElubGluZUZsb3dC
b3gqPihib3gpOworICAgICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50KiB0ZXh0ID0gc3Rh
dGljX2Nhc3Q8U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCo+KGJveC0+b2JqZWN0KCktPmVsZW1l
bnQoKSk7CisgICAgICAgIAorICAgICAgICBpZiAodG9wTGV2ZWx8fCEodGV4dC0+eCgpLT5nZXRG
aXJzdCgpIHx8IHRleHQtPnkoKS0+Z2V0Rmlyc3QoKSB8fCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICh0ZXh0LT5keCgpLT5nZXRGaXJzdCgpICYmIHRleHQtPmR4KCktPmdldEZpcnN0KCktPnZh
bHVlKCkpIHx8Ly9keCBleGlzdHMgYW5kIGlzIG5vbi16ZXJvCisgICAgICAgICAgICAgICAgICAg
ICAgICAodGV4dC0+ZHkoKS0+Z2V0Rmlyc3QoKSAmJiB0ZXh0LT5keSgpLT5nZXRGaXJzdCgpLT52
YWx1ZSgpKSkpIC8vZGl0dG8gZm9yIGR5CisgICAgICAgIHsKKyAgICAgICAgICAgIGJveC0+c2V0
WFBvcyhib3gtPnhQb3MoKSArIHgpOworICAgICAgICAgICAgYm94LT5zZXRZUG9zKGJveC0+eVBv
cygpICsgeSk7CisgICAgICAgICAgICBmb3IgKElubGluZUJveCogY3VyciA9IGZsb3ctPmZpcnN0
Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRPbkxpbmUoKSkgCisgICAgICAgICAgICAg
ICAgaWYgKCF0cmFuc2xhdGVCb3goY3VyciwgeCwgeSwgZmFsc2UpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2ludCBJbmxpbmVGbG93Qm94OjpwbGFjZVBvc2l0aW9uZWRCb3hlc0hvcml6b250YWxseShp
bnQgeCwgaW50JiBsZWZ0UG9zaXRpb24sIGludCYgcmlnaHRQb3NpdGlvbiwgaW50ICZsZWZ0QWxp
Z24sIGludCAmcmlnaHRBbGlnbiwgYm9vbCYgbmVlZHNXb3JkU3BhY2luZywgaW50IHhQb3MsIGJv
b2wgcG9zaXRpb25lZCkKK3sKKyAgICAvL2ludCBzdGFydHggPSB4OworICAgIGludCBtbiA9IElO
VF9NQVg7CisgICAgaW50IG14ID0gSU5UX01JTjsKKyAgICBpbnQgYW1uID0gSU5UX01BWDsKKyAg
ICBpbnQgYW14ID0gSU5UX01JTjsKKyAgICBpbnQgc3RhcnR4ID0geDsKKyAgICBib29sIHNlZW5Q
b3NpdGlvbmVkRWxlbWVudCA9IGZhbHNlOworICAgIHNldFhQb3MoeCk7CisgICAgZm9yIChJbmxp
bmVCb3gqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5l
KCkpIAorICAgIHsKKyAgICAgICAgaWYgKGN1cnItPm9iamVjdCgpLT5pc1RleHQoKSkgeworICAg
ICAgICAgICAgbW4gPSBtaW4obW4sIHgpOworICAgICAgICAgICAgYW1uID0gbWluKGFtbiwgeCk7
CisgICAgICAgICAgICBJbmxpbmVUZXh0Qm94KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4
dEJveCo+KGN1cnIpOworICAgICAgICAgICAgUmVuZGVyVGV4dCogcnQgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJUZXh0Kj4odGV4dC0+b2JqZWN0KCkpOworICAgICAgICAgICAgaWYgKHJ0LT5sZW5ndGgo
KSkgeworICAgICAgICAgICAgICAgIGlmIChuZWVkc1dvcmRTcGFjaW5nICYmIERlcHJlY2F0ZWRD
aGFyKHJ0LT50ZXh0KClbdGV4dC0+c3RhcnQoKV0pLmlzU3BhY2UoKSkKKyAgICAgICAgICAgICAg
ICAgICAgeCArPSBydC0+Zm9udChtX2ZpcnN0TGluZSktPndvcmRTcGFjaW5nKCk7CisgICAgICAg
ICAgICAgICAgbmVlZHNXb3JkU3BhY2luZyA9ICFEZXByZWNhdGVkQ2hhcihydC0+dGV4dCgpW3Rl
eHQtPmVuZCgpXSkuaXNTcGFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGV4dC0+
c2V0WFBvcyh4KTsKKyAgICAgICAgICAgIHggKz0gdGV4dC0+d2lkdGgoKTsKKyAgICAgICAgICAg
IG14ID0gbWF4KG14LCB4KTsKKyAgICAgICAgICAgIGFteCA9IG1heChhbXgsIHgpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KGN1cnItPm9iamVjdCgpLT5pc0lubGluZUZs
b3coKSk7CisgICAgICAgICAgICBJbmxpbmVGbG93Qm94KiBmbG93ID0gc3RhdGljX2Nhc3Q8SW5s
aW5lRmxvd0JveCo+KGN1cnIpOworICAgICAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVu
dCogdGV4dCA9IHN0YXRpY19jYXN0PFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqPihmbG93LT5v
YmplY3QoKS0+ZWxlbWVudCgpKTsKKyAgICAgICAgICAgIHggKz0gdGV4dC0+ZHgoKS0+Z2V0Rmly
c3QoKSA/IHRleHQtPmR4KCktPmdldEZpcnN0KCktPnZhbHVlKCkgOiAwOworICAgICAgICAgICAg
aWYgKHRleHQtPngoKS0+Z2V0Rmlyc3QoKSkKKyAgICAgICAgICAgICAgICB4ID0gdGV4dC0+eCgp
LT5nZXRGaXJzdCgpLT52YWx1ZSgpIC0geFBvczsKKyAgICAgICAgICAgIGlmICh0ZXh0LT54KCkt
PmdldEZpcnN0KCkgfHwgdGV4dC0+eSgpLT5nZXRGaXJzdCgpIHx8IAorICAgICAgICAgICAgICAg
ICh0ZXh0LT5keCgpLT5nZXRGaXJzdCgpICYmIHRleHQtPmR4KCktPmdldEZpcnN0KCktPnZhbHVl
KCkpIHx8CisgICAgICAgICAgICAgICAgKHRleHQtPmR5KCktPmdldEZpcnN0KCkgJiYgdGV4dC0+
ZHkoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgc2VlblBvc2l0aW9uZWRFbGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBuZWVkc1dv
cmRTcGFjaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaW50IGlnbm9yZVgsIGlnbm9yZVk7
CisgICAgICAgICAgICAgICAgeCA9IGZsb3ctPnBsYWNlUG9zaXRpb25lZEJveGVzSG9yaXpvbnRh
bGx5KHgsIG1uLCBteCwgaWdub3JlWCwgaWdub3JlWSwgbmVlZHNXb3JkU3BhY2luZywgeFBvcywg
dHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzZWVuUG9zaXRpb25l
ZEVsZW1lbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IF9hbW4sIF9hbXg7
IC8vdGhyb3cgYXdheSB0aGVzZSB2YWx1ZXMKKyAgICAgICAgICAgICAgICB4ID0gZmxvdy0+cGxh
Y2VQb3NpdGlvbmVkQm94ZXNIb3Jpem9udGFsbHkoeCwgbW4sIG14LCBfYW1uLCBfYW14LCBuZWVk
c1dvcmRTcGFjaW5nLCB4UG9zLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgeCA9IGZsb3ctPnBsYWNlUG9zaXRpb25lZEJveGVzSG9yaXpv
bnRhbGx5KHgsIG1uLCBteCwgYW1uLCBhbXgsIG5lZWRzV29yZFNwYWNpbmcsIHhQb3MsIGZhbHNl
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobW4gPiBteCkKKyAgICAgICAgbW4gPSBteCA9
IHN0YXJ0eDsKKyAgICBpZiAoYW1uID4gYW14KQorICAgICAgICBhbW4gPSBhbXggPSBzdGFydHg7
CisgICAgCisgICAgaW50IHdpZHRoID0gbXggLSBtbjsKKyAgICBzZXRXaWR0aCh3aWR0aCk7Cisg
ICAgaW50IGF3aWR0aCA9IGFteCAtIGFtbjsKKyAgICBpbnQgZHg9MDsKKyAgICBpZiAocG9zaXRp
b25lZCkgeworICAgICAgICBzd2l0Y2ggKG9iamVjdCgpLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT50
ZXh0QW5jaG9yKCkpIAorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRBX01JRERMRToKKyAg
ICAgICAgICAgICAgICB0cmFuc2xhdGVCb3godGhpcywgZHggPSAtYXdpZHRoLzIsIDApOyAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUQV9FTkQ6
CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlQm94KHRoaXMsIGR4ID0gLWF3aWR0aCwgMCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRBX1NUQVJUOgorICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoZHgpIAorICAgICAgICB7CisgICAgICAgICAgICB4ICs9IGR4OworICAgICAgICAgICAg
bW4gKz0gZHg7CisgICAgICAgICAgICBteCArPSBkeDsKKyAgICAgICAgfQorICAgIH0KKyAgICBs
ZWZ0UG9zaXRpb24gPSBtaW4obGVmdFBvc2l0aW9uLCBtbik7CisgICAgcmlnaHRQb3NpdGlvbiA9
IG1heChyaWdodFBvc2l0aW9uLCBteCk7CisgICAgbGVmdEFsaWduID0gbWluKGxlZnRBbGlnbiwg
YW1uKTsKKyAgICByaWdodEFsaWduID0gbWF4KHJpZ2h0QWxpZ24sIGFteCk7CisgICAgCisgICAg
cmV0dXJuIHg7Cit9CisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKKwogaW50IElubGluZUZsb3dCb3g6
OnBsYWNlQm94ZXNIb3Jpem9udGFsbHkoaW50IHgsIGludCYgbGVmdFBvc2l0aW9uLCBpbnQmIHJp
Z2h0UG9zaXRpb24sIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcpCiB7CisjaWZkZWYgU1ZHX1NVUFBP
UlQKKyAgICBpZiAobV9pc1NWR0Zsb3cpIAorICAgIHsKKyAgICAgICAgaW50IGlnbm9yZVgsIGln
bm9yZVk7CisgICAgICAgIHggPSBwbGFjZVBvc2l0aW9uZWRCb3hlc0hvcml6b250YWxseSh4LCBs
ZWZ0UG9zaXRpb24sIHJpZ2h0UG9zaXRpb24sIGlnbm9yZVgsIGlnbm9yZVksIG5lZWRzV29yZFNw
YWNpbmcsIG9iamVjdCgpLT54UG9zKCksIHRydWUpOworICAgICAgICBsZWZ0UG9zaXRpb24gPSBt
aW4obGVmdFBvc2l0aW9uLCB4KTsKKyAgICAgICAgcmlnaHRQb3NpdGlvbiA9IG1heChyaWdodFBv
c2l0aW9uLCB4KTsKKyAgICAgICAgbmVlZHNXb3JkU3BhY2luZyA9IGZhbHNlOworICAgICAgICBy
ZXR1cm4geDsKKyAgICB9CisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKICAgICAvLyBTZXQgb3VyIHgg
cG9zaXRpb24uCiAgICAgc2V0WFBvcyh4KTsKICAgICBsZWZ0UG9zaXRpb24gPSBtaW4oeCwgbGVm
dFBvc2l0aW9uKTsKQEAgLTMwNSwxMyArNDM5LDU5IEBAIGludCBJbmxpbmVGbG93Qm94OjpwbGFj
ZUJveGVzSG9yaXpvbnRhbGwKICAgICByZXR1cm4geDsKIH0KIAorI2lmZGVmIFNWR19TVVBQT1JU
Cit2b2lkIElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNWZXJ0aWNhbGx5V2l0aEFic0Jhc2VsaW5l
KGludCYgaGVpZ2h0T2ZCbG9jaywgaW50ICZtaW5feSwgaW50ICZtYXhfeSwgaW50ICZiYXNlbGlu
ZSwgaW50IHlQb3MpCit7CisgICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdENoaWxkKCk7
IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgaWYgKGN1cnItPmlz
SW5saW5lRmxvd0JveCgpKSAKKyAgICAgICAgeworICAgICAgICAgICAgU1ZHVGV4dFBvc2l0aW9u
aW5nRWxlbWVudCogdGV4dCA9IHN0YXRpY19jYXN0PFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQq
PihjdXJyLT5vYmplY3QoKS0+ZWxlbWVudCgpKTsKKyAgICAgICAgICAgIGJhc2VsaW5lICs9IHRl
eHQtPmR5KCktPmdldEZpcnN0KCkgPyB0ZXh0LT5keSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDog
MDsKKyAgICAgICAgICAgIGlmICh0ZXh0LT55KCktPmdldEZpcnN0KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYmFzZWxpbmUgPSB0ZXh0LT55KCktPmdldEZpcnN0KCktPnZhbHVl
KCkgLSB5UG9zOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW5saW5l
Rmxvd0JveCo+KGN1cnIpLT5wbGFjZUJveGVzVmVydGljYWxseVdpdGhBYnNCYXNlbGluZShoZWln
aHRPZkJsb2NrLCBtaW5feSwgbWF4X3ksIGJhc2VsaW5lLCB5UG9zKTsKKyAgICAgICAgfQorICAg
ICAgICBjb25zdCBGb250JiBmb250ID0gY3Vyci0+b2JqZWN0KCktPmZvbnQodHJ1ZSk7CisgICAg
ICAgIGludCBhc2NlbnQgPSBmb250LmFzY2VudCgpOworICAgICAgICBpbnQgcG9zaXRpb24gPSBi
YXNlbGluZSAtIGFzY2VudDsKKyAgICAgICAgaW50IGhlaWdodCA9IGFzY2VudCArIGZvbnQuZGVz
Y2VudCgpOworICAgICAgICBjdXJyLT5zZXRCYXNlbGluZShhc2NlbnQpOworICAgICAgICBjdXJy
LT5zZXRZUG9zKHBvc2l0aW9uKTsKKyAgICAgICAgY3Vyci0+c2V0SGVpZ2h0KGhlaWdodCk7CisK
KyAgICAgICAgaWYgKHBvc2l0aW9uIDwgbWluX3kpIAorICAgICAgICAgICAgbWluX3kgPSBwb3Np
dGlvbjsKKyAgICAgICAgaWYgKHBvc2l0aW9uICsgaGVpZ2h0ID4gbWF4X3kpIAorICAgICAgICAg
ICAgbWF4X3kgPSBwb3NpdGlvbiArIGhlaWdodDsKKyAgICB9CisgICAgaWYgKGlzUm9vdElubGlu
ZUJveCgpKSB7CisgICAgICAgIHNldFlQb3MobWluX3kpOworICAgICAgICBzZXRIZWlnaHQobWF4
X3kgLSBtaW5feSk7CisgICAgICAgIHNldEJhc2VsaW5lKGJhc2VsaW5lIC0gbWluX3kpOworICAg
ICAgICBoZWlnaHRPZkJsb2NrICs9IG1heF95IC0gbWluX3k7CisgICAgfQorfQorI2VuZGlmIC8v
IFNWR19TVVBQT1JUCisKIHZvaWQgSW5saW5lRmxvd0JveDo6dmVydGljYWxseUFsaWduQm94ZXMo
aW50JiBoZWlnaHRPZkJsb2NrKQogewogICAgIGludCBtYXhQb3NpdGlvblRvcCA9IDA7CiAgICAg
aW50IG1heFBvc2l0aW9uQm90dG9tID0gMDsKICAgICBpbnQgbWF4QXNjZW50ID0gMDsKICAgICBp
bnQgbWF4RGVzY2VudCA9IDA7Ci0KKyNpZmRlZiBTVkdfU1VQUE9SVAorICAgIGlmIChtX2lzU1ZH
RmxvdykgeworICAgICAgICAvL0Fic29sdXRlIHBvc2l0aW9ucyBpbiBTVkcgZGljdGF0ZSBwb3Np
dGlvbiBvZiBiYXNlbGluZQorICAgICAgICAvL3NvIHdlIGRyb3AgdG8gYSBzaW1wbGVyIGxheW91
dCBmdW5jdGlvbgorICAgICAgICBpbnQgdG9wID0gSU5UX01BWCwgYm90dG9tID0gSU5UX01JTiwg
YmFzZWxpbmUgPSBoZWlnaHRPZkJsb2NrOworICAgICAgICBwbGFjZUJveGVzVmVydGljYWxseVdp
dGhBYnNCYXNlbGluZShoZWlnaHRPZkJsb2NrLCB0b3AsIGJvdHRvbSwgYmFzZWxpbmUsIG9iamVj
dCgpLT55UG9zKCkpOworICAgICAgICBzZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25zKHRvcCwg
Ym90dG9tKTsKKyAgICAgICAgc2V0VmVydGljYWxTZWxlY3Rpb25Qb3NpdGlvbnModG9wLCBib3R0
b20pOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAgICAg
Ly8gRmlndXJlIG91dCBpZiB3ZSdyZSBpbiBzdHJpY3QgbW9kZS4gIE5vdGUgdGhhdCB3ZSBjYW4n
dCBzaW1wbHkgdXNlICFzdHlsZSgpLT5odG1sSGFja3MoKSwKICAgICAvLyBiZWNhdXNlIHRoYXQg
d291bGQgbWF0Y2ggYWxtb3N0IHN0cmljdCBtb2RlIGFzIHdlbGwuCiAgICAgUmVuZGVyT2JqZWN0
KiBjdXJyID0gb2JqZWN0KCk7CkluZGV4OiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDE2ODc3KQorKysg
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTQgKzMxLDEz
IEBAIGNsYXNzIElubGluZUZsb3dCb3ggOiBwdWJsaWMgSW5saW5lUnVuQm8KIHsKIHB1YmxpYzoK
ICAgICBJbmxpbmVGbG93Qm94KFJlbmRlck9iamVjdCogb2JqKQotICAgIDpJbmxpbmVSdW5Cb3go
b2JqKQotICAgIHsKLSAgICAgICAgbV9maXJzdENoaWxkID0gMDsKLSAgICAgICAgbV9sYXN0Q2hp
bGQgPSAwOwotICAgICAgICBtX2luY2x1ZGVMZWZ0RWRnZSA9IG1faW5jbHVkZVJpZ2h0RWRnZSA9
IGZhbHNlOwotICAgICAgICBtX2hhc1RleHRDaGlsZHJlbiA9IGZhbHNlOwotICAgICAgICBtX21h
eEhvcml6b250YWxTaGFkb3cgPSAwOwotICAgIH0KKyAgICA6SW5saW5lUnVuQm94KG9iaiksIG1f
Zmlyc3RDaGlsZCgwKSwgbV9sYXN0Q2hpbGQoMCksIAorICAgICBtX21heEhvcml6b250YWxTaGFk
b3coMCksIG1faW5jbHVkZUxlZnRFZGdlKGZhbHNlKSwKKyAgICAgbV9pbmNsdWRlUmlnaHRFZGdl
KGZhbHNlKSwgbV9oYXNUZXh0Q2hpbGRyZW4oZmFsc2UpCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyAg
ICAsIG1faXNTVkdGbG93KGZhbHNlKSAKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorICAgICB7IH0K
IAogICAgIFJlbmRlckZsb3cqIGZsb3dPYmplY3QoKTsKIApAQCAtNzYsNiArNzUsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG15LCBpbnQgbWgsIGludCBfdHgsIGlu
dCBfdHksIGludCB3LCBpbnQgaCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50RGVjb3JhdGlvbnMo
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHksIGJvb2wgcGFpbnRl
ZENoaWxkcmVuID0gZmFsc2UpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSk7CisgICAgdmlydHVhbCB2b2lkIHBhcmVu
dFBhaW50TWV0aG9kKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5
KXsgcGFpbnQoaSwgX3R4LCBfdHkpOyB9CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KFJl
bmRlck9iamVjdDo6Tm9kZUluZm8mIGksIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkpOwog
CiAgICAgaW50IG1hcmdpbkJvcmRlclBhZGRpbmdMZWZ0KCk7CkBAIC0xMDAsMTEgKzEwMCwxOCBA
QCBwdWJsaWM6CiAgICAgaW50IGdldEZsb3dTcGFjaW5nV2lkdGgoKTsKICAgICBib29sIG9uRW5k
Q2hhaW4oUmVuZGVyT2JqZWN0KiBlbmRPYmplY3QpOwogICAgIGludCBwbGFjZUJveGVzSG9yaXpv
bnRhbGx5KGludCB4LCBpbnQmIGxlZnRQb3NpdGlvbiwgaW50JiByaWdodFBvc2l0aW9uLCBib29s
JiBuZWVkc1dvcmRTcGFjaW5nKTsKKyNpZmRlZiBTVkdfU1VQUE9SVAorICAgIGludCBwbGFjZVBv
c2l0aW9uZWRCb3hlc0hvcml6b250YWxseShpbnQgeCwgaW50JiBsZWZ0UG9zaXRpb24sIGludCYg
cmlnaHRQb3NpdGlvbiwgaW50ICZsZWZ0QWxpZ24sIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgJnJpZ2h0QWxpZ24sIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcs
IGludCB4UG9zLCBib29sIHBvc2l0aW9uZWQpOworI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAgICAg
dm9pZCB2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQmIGhlaWdodE9mQmxvY2spOwogICAgIHZvaWQg
Y29tcHV0ZUxvZ2ljYWxCb3hIZWlnaHRzKGludCYgbWF4UG9zaXRpb25Ub3AsIGludCYgbWF4UG9z
aXRpb25Cb3R0b20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBtYXhB
c2NlbnQsIGludCYgbWF4RGVzY2VudCwgYm9vbCBzdHJpY3RNb2RlKTsKICAgICB2b2lkIGFkanVz
dE1heEFzY2VudEFuZERlc2NlbnQoaW50JiBtYXhBc2NlbnQsIGludCYgbWF4RGVzY2VudCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heFBvc2l0aW9uVG9wLCBpbnQg
bWF4UG9zaXRpb25Cb3R0b20pOworI2lmZGVmIFNWR19TVVBQT1JUCisgICAgdm9pZCBwbGFjZUJv
eGVzVmVydGljYWxseVdpdGhBYnNCYXNlbGluZShpbnQmIGhlaWdodE9mQmxvY2ssIGludCAmbWlu
X3ksIGludCAmbWF4X3ksIGludCAmYmFzZWxpbmUsIGludCB5UG9zKTsKKyNlbmRpZiAvLyBTVkdf
U1VQUE9SVAogICAgIHZvaWQgcGxhY2VCb3hlc1ZlcnRpY2FsbHkoaW50IHksIGludCBtYXhIZWln
aHQsIGludCBtYXhBc2NlbnQsIGJvb2wgc3RyaWN0TW9kZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCYgdG9wUG9zaXRpb24sIGludCYgYm90dG9tUG9zaXRpb24sIGludCYgc2Vs
ZWN0aW9uVG9wLCBpbnQmIHNlbGVjdGlvbkJvdHRvbSk7CiAgICAgdm9pZCBzaHJpbmtCb3hlc1dp
dGhOb1RleHRDaGlsZHJlbihpbnQgdG9wUG9zaXRpb24sIGludCBib3R0b21Qb3NpdGlvbik7CkBA
IC0xMTgsOCArMTI1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpOwogCiAgICAgdmlydHVhbCBib29sIGNhbkFjY29t
bW9kYXRlRWxsaXBzaXMoYm9vbCBsdHIsIGludCBibG9ja0VkZ2UsIGludCBlbGxpcHNpc1dpZHRo
KTsKLSAgICB2aXJ0dWFsIGludCBwbGFjZUVsbGlwc2lzQm94KGJvb2wgbHRyLCBpbnQgYmxvY2tF
ZGdlLCBpbnQgZWxsaXBzaXNXaWR0aCwgYm9vbCYpOwotCisgICAgdmlydHVhbCBpbnQgcGxhY2VF
bGxpcHNpc0JveChib29sIGx0ciwgaW50IGJsb2NrRWRnZSwgaW50IGVsbGlwc2lzV2lkdGgsIGJv
b2wmKTsgICAgCiBwcm90ZWN0ZWQ6CiAgICAgSW5saW5lQm94KiBtX2ZpcnN0Q2hpbGQ7CiAgICAg
SW5saW5lQm94KiBtX2xhc3RDaGlsZDsKQEAgLTEyNyw2ICsxMzMsOSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgYm9vbCBtX2luY2x1ZGVMZWZ0RWRnZSA6IDE7CiAgICAgYm9vbCBtX2luY2x1ZGVSaWdodEVk
Z2UgOiAxOwogICAgIGJvb2wgbV9oYXNUZXh0Q2hpbGRyZW4gOiAxOworI2lmZGVmIFNWR19TVVBQ
T1JUCisgICAgYm9vbCBtX2lzU1ZHRmxvdyA6IDE7CisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIH07
CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDE2ODc3KQor
KysgcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyAr
MTA3LDcgQEAgSW50UmVjdCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0KGludAogewogICAg
IGludCBzUG9zID0gbWF4KHN0YXJ0UG9zIC0gbV9zdGFydCwgMCk7CiAgICAgaW50IGVQb3MgPSBt
aW4oZW5kUG9zIC0gbV9zdGFydCwgKGludCltX2xlbik7Ci0gICAgCisKICAgICBpZiAoc1BvcyA+
PSBlUG9zKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCkluZGV4OiByZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAko
cmV2aXNpb24gMTY4NzcpCisrKyByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpjYWxjTWluTWF4V2lk
dGgoKQogfQogCiBib29sIFJlbmRlcklubGluZTo6cmVxdWlyZXNMYXllcigpIHsKLSAgICByZXR1
cm4gaXNSb290KCkgfHwgaXNSZWxQb3NpdGlvbmVkKCkgfHwgc3R5bGUoKS0+b3BhY2l0eSgpIDwg
MS4wZjsKKyAgICByZXR1cm4gaXNSb290KCkgfHwgaXNSZWxQb3NpdGlvbmVkKCkgfHwgKHN0eWxl
KCktPm9wYWNpdHkoKSA8IDEuMGYgJiYgIWVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkpOwogfQog
CiBpbnQgUmVuZGVySW5saW5lOjp3aWR0aCgpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10988</attachid>
            <date>2006-10-08 15:26:37 -0700</date>
            <delta_ts>2006-10-09 13:43:40 -0700</delta_ts>
            <desc>with darins comments</desc>
            <filename>newtext9.patch</filename>
            <type>text/plain</type>
            <size>58347</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2ODkxKQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDY0LDEx
ICsxNDY0LDE1IEBACiAJCTkzRjE5QjE2MDgyNDVFNTkwMDFFOUFCQyAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
ICovOyB9OwogCQk5M0YxOUIxNzA4MjQ1RTU5MDAxRTlBQkMgLyogbGliaWN1Y29yZS5keWxpYiBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFEMzFB
MDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovOyB9OwogCQk5M0YxOUIxODA4
MjQ1RTU5MDAxRTlBQkMgLyogbGlieHNsdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MDYzMzA3MDczMUE3NzIwMERCMUZEMSAvKiBsaWJ4
c2x0LmR5bGliICovOyB9OworCQlBNzVFOTZFMDBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElu
bGluZUJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTc1RTk2REUwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLzsgfTsKKwkJ
QTc1RTk2RTEwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RTk2REYwQUMxMzY2RjAw
RUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwICovOyB9OwogCQlBNzYzOEE4QjA5OTU4RUE1
MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTg5MDk5NThFQTUwMDA3RTE0RiAvKiBX
S0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oICovOyB9OwogCQlBNzYzOEE4QzA5OTU4RUE1MDAwN0Ux
NEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QThBMDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3Bs
YWNlbWVudE1hcEZpbHRlci5tICovOyB9OwogCQlBNzYzOEE5MjA5OTU5MkMzMDAwN0UxNEYgLyog
V0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLzsgfTsKIAkJQTc2MzhBOTcwOTk1OTY1RDAw
MDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8q
IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oICovOyB9OwogCQlBNzYzOEE5ODA5OTU5NjVE
MDAwN0UxNEYgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTk2MDk5NTk2NUQwMDA3RTE0
RiAvKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwICovOyB9OworCQlBNzcxQ0IzRTBB
RDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzcxQ0IzQzBBRDMzQ0MyMDBERjlFMjUgLyogUmVu
ZGVyU1ZHSW5saW5lLmggKi87IH07CisJCUE3NzFDQjNGMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5k
ZXJTVkdJbmxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc3MUNCM0QwQUQzM0NDMjAwREY5RTI1IC8qIFJlbmRlclNWR0lubGluZS5jcHAgKi87
IH07CiAJCUE3Qjk3Qjc3MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVy
LmNpa2VybmVsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0I5N0I2NjA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5jaWtl
cm5lbCAqLzsgfTsKIAkJQTdCOTdCNzgwOTc5QzNBMTAwMEU4RUIxIC8qIFdLQ29tcG9uZW50TWVy
Z2VGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3Qjk3QjY3MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVyLmggKi87
IH07CiAJCUE3Qjk3Qjc5MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVy
Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I5N0I2
ODA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5tICovOyB9OwpAQCAt
MTQ4Niw2ICsxNDkwLDEyIEBACiAJCUE3Qjk3Qjg1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxl
VHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3Qjk3Qjc0MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNm
ZXJGaWx0ZXIuY2lrZXJuZWwgKi87IH07CiAJCUE3Qjk3Qjg2MDk3OUMzQTEwMDBFOEVCMSAvKiBX
S1RhYmxlVHJhbnNmZXJGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3Qjk3Qjc1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNmZXJG
aWx0ZXIuaCAqLzsgfTsKIAkJQTdCOTdCODcwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFu
c2ZlckZpbHRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdCOTdCNzYwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5tICov
OyB9OworCQlBN0M1MTk0OTBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzUxOTQ3MEFDQTZB
RjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5oICovOyB9OworCQlBN0M1MTk0QTBBQ0E2QUYx
MDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDNTE5NDgwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLzsgfTsKKwkJQTdDNTFBNDYwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGlu
ZUZsb3dCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QzUxQTQ0MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi87IH07CisJ
CUE3QzUxQTQ3MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzUxQTQ1MEFDQTc0NDcw
MDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCAqLzsgfTsKKwkJQTdFMUREQkUwQUFFQ0RE
MTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTFEREJDMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5k
ZXJTVkdJbmxpbmVUZXh0LmggKi87IH07CisJCUE3RTFEREJGMEFBRUNERDEwMENBQ0QxQyAvKiBS
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3RTFEREJEMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcCAqLzsgfTsKIAkJQTgwRTZDRTQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBF
NkNCQTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmNwcCAqLzsgfTsKIAkJQTgwRTZD
RTUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQkIwQTE5ODlDQTAwN0ZC
OEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovOyB9OwogCQlBODBFNkNFNjBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0JDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmlt
aXRpdmVWYWx1ZS5oICovOyB9OwpAQCAtNDEzNiwxMSArNDE0NiwxNSBAQAogCQk5M0Y4QjMwNjBB
MzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3Jp
cHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0b3JKUy5wbTsgcGF0aCA9IC4uL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y4QjMwNzBB
MzAwRkVBMDBGNjFBQjggLyogZ2VuZXJhdGUtYmluZGluZ3MucGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5wZXJsOyBuYW1lID0gImdlbmVyYXRlLWJpbmRpbmdzLnBsIjsgcGF0aCA9ICJzY3JpcHRz
L2dlbmVyYXRlLWJpbmRpbmdzLnBsIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNG
OEIzMDgwQTMwMEZFQTAwRjYxQUI4IC8qIElETFN0cnVjdHVyZS5wbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnBlcmw7IG5hbWUgPSBJRExTdHJ1Y3R1cmUucG07IHBhdGggPSBzY3JpcHRzL0lETFN0
cnVjdHVyZS5wbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc1RTk2REUwQUMxMzY2
RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHUm9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzVFOTZERjBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSb290SW5saW5lQm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdL
RGlzcGxhY2VtZW50TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmls
dGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjM4QTkxMDk5NTkyQzMwMDA3
RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2
MzhBOTYwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzcxQ0IzQzBBRDMz
Q0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzcxQ0IzRDBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Qjk3QjY2MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0Nv
bXBvbmVudE1lcmdlRmlsdGVyLmNpa2VybmVsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXS0Nv
bXBvbmVudE1lcmdlRmlsdGVyLmNpa2VybmVsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0I5N0I2NzA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb21wb25lbnRNZXJnZUZpbHRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I5N0I2ODA5NzlDM0ExMDAwRThFQjEg
LyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpj
OyBwYXRoID0gV0tDb21wb25lbnRNZXJnZUZpbHRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNDE1OCw2ICs0MTcyLDEyIEBACiAJCUE3Qjk3Qjc0MDk3OUMzQTEwMDBFOEVCMSAv
KiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFdLVGFibGVUcmFuc2ZlckZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTdCOTdCNzUwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tUYWJsZVRyYW5zZmVyRmlsdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Qjk3Qjc2MDk3OUMzQTEwMDBFOEVC
MSAvKiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2Jq
YzsgcGF0aCA9IFdLVGFibGVUcmFuc2ZlckZpbHRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBN0M1MTk0NzBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHVFNwYW4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTE5NDgwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNW
R1RTcGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTFBNDQwQUNBNzQ0
NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHSW5saW5lRmxvd0JveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBN0M1MUE0NTBBQ0E3NDQ3MDA2RTJGQjkgLyogU1ZHSW5saW5lRmxvd0JveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdJbmxpbmVGbG93Qm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdFMUREQkMwQUFFQ0REMTAwQ0FDRDFDIC8qIFJl
bmRlclNWR0lubGluZVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU1ZHSW5saW5lVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0UxRERC
RDBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkEwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Zh
bHVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVmFs
dWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkIwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENTU0JvcmRlckltYWdlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODBFNkNCQzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZl
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1ByaW1pdGl2ZVZh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODUyLDYgKzc4NzIsMTYgQEAK
IAkJCQlGQUUwNDE4OTA5NzU5Njk0MDAwNTQwQkUgLyogUmVuZGVyU1ZHSW1hZ2UuaCAqLywKIAkJ
CQk2NTc0M0I1MDA5NzA3NkY4MDAxRTdDRUYgLyogUmVuZGVyU1ZHVGV4dC5jcHAgKi8sCiAJCQkJ
NjU3NDNCNTEwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuaCAqLywKKwkJCQlBN0Ux
RERCQzBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5oICovLAorCQkJCUE3
RTFEREJEMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCAqLywKKwkJ
CQlBNzVFOTZERTBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5oICovLAorCQkJ
CUE3NUU5NkRGMEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmNwcCAqLywKKwkJ
CQlBN0M1MTk0NzBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLywKKwkJCQlB
N0M1MTk0ODBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwICovLAorCQkJCUE3
QzUxQTQ0MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi8sCisJCQkJQTdD
NTFBNDUwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guY3BwICovLAorCQkJCUE3
NzFDQjNDMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5kZXJTVkdJbmxpbmUuaCAqLywKKwkJCQlBNzcx
Q0IzRDBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0ga2NhbnZhczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC05NTQyLDYg
Kzk1NzIsNyBAQAogCQkJCTg1MDY1NkZFMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01NZWRpYUxpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDY1NzAwMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01TdHls
ZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTA2NTcwMjBBQUI0NzYzMDAyRDE1QzAgLyog
RE9NU3R5bGVTaGVldExpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3RTFEREJFMEFBRUNERDEw
MENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzQ3
MDZBQjBBQUNEODA5MDAyQzFENDMgLyogVGV4dERlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg1QUZBODIyMEFBRjUyOEEwMEU4NDMwNSAvKiBET01FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODVDN0Y0OTEwQUFGNzlEQzAwNDAxNEREIC8qIERPTVVJRXZlbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtOTY4Nyw2ICs5NzE4LDkgQEAKIAkJCQlCMjAxMTEwODBBQjc3NDA1MDBEQjBFNjggLyog
SlNTVkdBRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUzQkY0REIwQUJCNkI1NTAwODY0
N0JCIC8qIERPTU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1M0JGNEVCMEFCQjZFOTcwMDg2
NDdCQiAvKiBET01Ob2RlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTc1RTk2RTAwQUMx
MzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCBpbiBIZWFkZXJzICovLAorCQkJCUE3
QzUxOTQ5MEFDQTZBRjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTdDNTFBNDYwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg1QkNCQzEzMEFCQkE4N0QwMDM4MTE2MCAvKiBET01IVE1MRG9jdW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1ND
dXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTFFRTgxMTBBQkNBMzk2MDBB
NkFBMzMgLyogRE9NRXZlbnRFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtOTg4MCw2ICs5
OTE0LDcgQEAKIAkJCQk4NTAwNERBNjBBQ0VFQjVBMDBDNDM4RjYgLyogRE9NU1ZHRG9jdW1lbnRJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUwMDREQTcwQUNFRUI1QTAwQzQzOEY2IC8q
IERPTVNWR0VsbGlwc2VFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCQjU0
MTlGMEFDRERGRTQwMDI4MjBFQiAvKiBSZW5kZXJMaXN0Qm94LmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBNzcxQ0IzRTBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzkyRjE0MjBBRDE4NUY0MDA2OTFCRDQgLyogUmVuZGVyQ291bnRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTM5MkYxNDYwQUQxODYwQzAwNjkxQkQ0IC8qIENvdW50ZXJSZXNl
dE5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTJGMTRDMEFEMTg2MUIwMDY5MUJENCAvKiBD
b3VudGVyTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDA2Niw3ICsxMDEwMSw2IEBACiAJCQlt
YWluR3JvdXAgPSAwODY3RDY5MUZFODQwMjhGQzAyQUFDMDcgLyogV2ViS2l0ICovOwogCQkJcHJv
ZHVjdFJlZkdyb3VwID0gMDM0NzY4REZGRjM4QTUwNDExREI5QzhCIC8qIFByb2R1Y3RzICovOwog
CQkJcHJvamVjdERpclBhdGggPSAiIjsKLQkJCXByb2plY3RSb290ID0gIiI7CiAJCQl0YXJnZXRz
ID0gKAogCQkJCTkzRjE5OEE1MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlICovLAogCQkJCURE
MDQxRkJFMDlEOUREQkUwMDEwQUYyQSAvKiBEZXJpdmVkIFNvdXJjZXMgKi8sCkBAIC0xMDk2Myw2
ICsxMDk5Nyw3IEBACiAJCQkJODUwNjU3MDEwQUFCNDc2MzAwMkQxNUMwIC8qIERPTVN0eWxlU2hl
ZXQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NTA2NTcwMzBBQUI0NzYzMDAyRDE1QzAgLyogRE9N
U3R5bGVTaGVldExpc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMUVCQkJENDBBQUM5Qjg3MDAx
RkU4RTIgLyogQ1NTQ2hhcnNldFJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTdFMUREQkYw
QUFFQ0REMTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODVBRkE4MjMwQUFGNTI4QTAwRTg0MzA1IC8qIERPTUV2ZW50Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODVDN0Y0OTIwQUFGNzlEQzAwNDAxNEREIC8qIERPTVVJRXZlbnQubW0gaW4gU291
cmNlcyAqLywKIAkJCQk4NUM3RjVDMDBBQUZCN0NEMDA0MDE0REQgLyogRE9NTXV0YXRpb25FdmVu
dC5tbSBpbiBTb3VyY2VzICovLApAQCAtMTEwOTcsNiArMTExMzIsOSBAQAogCQkJCUIyMjJGNjlD
MEFCNzcxQjgwMDIyRUZBRCAvKiBKU1NWR0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjIwMTExMDcwQUI3NzQwNTAwREIwRTY4IC8qIEpTU1ZHQUVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODUzQkY0REMwQUJCNkI1NTAwODY0N0JCIC8qIERPTU5vZGUubW0gaW4gU291cmNl
cyAqLywKKwkJCQlBNzVFOTZFMTBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBN0M1MTk0QTBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVy
U1ZHVFNwYW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTdDNTFBNDcwQUNBNzQ0NzAwNkUyRkI5
IC8qIFNWR0lubGluZUZsb3dCb3guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODVCQ0JDMTQwQUJC
QTg3RDAwMzgxMTYwIC8qIERPTUhUTUxEb2N1bWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUFB
MjFFQ0NBMEFCRjBGQkEwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE4NDE1RjlCMEFDMTBDNUQwMEY3RDBERiAvKiBLQ2FudmFzQ2xpcHBlci5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTExMTQzLDYgKzExMTgxLDcgQEAKIAkJCQk4NTAwNEQ5OTBB
Q0VFQUVGMDBDNDM4RjYgLyogRE9NU1ZHRG9jdW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4
NTAwNEQ5QjBBQ0VFQUVGMDBDNDM4RjYgLyogRE9NU1ZHRWxsaXBzZUVsZW1lbnQubW0gaW4gU291
cmNlcyAqLywKIAkJCQlBQkI1NDE5RTBBQ0RERkU0MDAyODIwRUIgLyogUmVuZGVyTGlzdEJveC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBNzcxQ0IzRjBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVy
U1ZHSW5saW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTJGMTQ0MEFEMTg1RkUwMDY5MUJE
NCAvKiBSZW5kZXJDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTJGMTRBMEFEMTg2
MTMwMDY5MUJENCAvKiBDb3VudGVyUmVzZXROb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
OTJGMTUwMEFEMTg2MjMwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IGNzcy9zdmcuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9zdmcuY3NzCShyZXZpc2lvbiAx
Njg5MSkKKysrIGNzcy9zdmcuY3NzCSh3b3JraW5nIGNvcHkpCkBAIC00OSwzICs0OSw3IEBAIHN2
Zywgc3ltYm9sLCBtYXJrZXIsIHBhdHRlcm4gewogdGV4dCwgZm9yZWlnbk9iamVjdCB7CiAgICAg
ZGlzcGxheTogYmxvY2sgIWltcG9ydGFudAogfQorCit0ZXh0LCB0c3BhbiB7CisgICB3aGl0ZS1z
cGFjZTogbm93cmFwICFpbXBvcnRhbnQKK30KSW5kZXg6IGRvbS9UZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBkb20vVGV4dC5jcHAJKHJldmlzaW9uIDE2ODkxKQorKysgZG9tL1RleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUg
IlJlbmRlclNWR0lubGluZVRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNDks
NiArMTUwLDExIEBAIGJvb2wgVGV4dDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAKIAog
UmVuZGVyT2JqZWN0ICpUZXh0OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJl
bmRlclN0eWxlICpzdHlsZSkKIHsKKyNpZmRlZiBTVkdfU1VQUE9SVAorICAgIGlmKHBhcmVudE5v
ZGUoKS0+aXNTVkdFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJT
VkdJbmxpbmVUZXh0KHRoaXMsIHN0cik7CisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKKyAgICAKICAg
ICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyVGV4dCh0aGlzLCBzdHIpOwogfQogCkluZGV4OiBr
Y2FudmFzL1JlbmRlclNWR0lubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJT
VkdJbmxpbmUuY3BwCShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmUuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIg
SHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgorICogICAgICAgICAgIChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmZGVmIFNWR19T
VVBQT1JUCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lLmgiCisjaW5jbHVkZSAiU1ZHSW5saW5l
Rmxvd0JveC5oIgorI2luY2x1ZGUgIlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaCIKKyNpbmNs
dWRlICJTVkdMZW5ndGhMaXN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1JlbmRl
clNWR0lubGluZTo6UmVuZGVyU1ZHSW5saW5lKE5vZGUqIG4pIDogUmVuZGVySW5saW5lKG4pIHt9
CisgICAgCitJbmxpbmVCb3gqIFJlbmRlclNWR0lubGluZTo6Y3JlYXRlSW5saW5lQm94KGJvb2wg
bWFrZVBsYWNlSG9sZGVyQm94LCBib29sIGlzUm9vdExpbmVCb3gsIGJvb2wgaXNPbmx5UnVuKQor
eworICAgIGFzc2VydCghKCFpc1Jvb3RMaW5lQm94ICYmIChpc1JlcGxhY2VkKCkgfHwgbWFrZVBs
YWNlSG9sZGVyQm94KSkpOworICAgIGFzc2VydChpc0lubGluZUZsb3coKSk7CisgICAgSW5saW5l
Rmxvd0JveCogZmxvd0JveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkgU1ZHSW5saW5lRmxvd0JveCh0
aGlzKTsKKyAgICBpZiAoIW1fZmlyc3RMaW5lQm94KQorICAgICAgICBtX2ZpcnN0TGluZUJveCA9
IG1fbGFzdExpbmVCb3ggPSBmbG93Qm94OworICAgIGVsc2UgeworICAgICAgICBtX2xhc3RMaW5l
Qm94LT5zZXROZXh0TGluZUJveChmbG93Qm94KTsKKyAgICAgICAgZmxvd0JveC0+c2V0UHJldmlv
dXNMaW5lQm94KG1fbGFzdExpbmVCb3gpOworICAgICAgICBtX2xhc3RMaW5lQm94ID0gZmxvd0Jv
eDsKKyAgICB9CisgICAgICAgIAorICAgIHJldHVybiBmbG93Qm94OworfQorCit9CisKKyNlbmRp
ZiAvLyBTVkdfU1VQUE9SVApJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR0lubGluZS5oCShyZXZpc2lvbiAwKQorKysga2NhbnZh
cy9SZW5kZXJTVkdJbmxpbmUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4K
KyAqICAgICAgICAgICAoQykgMjAwNiBBcHBsZSBDb21wdXRlciBJbmMuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAor
ICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUmVuZGVy
U1ZHSW5saW5lX0gKKyNkZWZpbmUgUmVuZGVyU1ZHSW5saW5lX0gKKworI2lmZGVmIFNWR19TVVBQ
T1JUCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIFJlbmRlclNWR0lubGluZSA6IHB1YmxpYyBSZW5kZXJJbmxpbmUgeworcHVibGljOgorICAg
ICAgICBSZW5kZXJTVkdJbmxpbmUoTm9kZSopOworICAgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHSW5saW5lIjsgfQorICAgICAg
ICB2aXJ0dWFsIElubGluZUJveCogY3JlYXRlSW5saW5lQm94KGJvb2wgbWFrZVBsYWNlSG9sZGVy
Qm94LCBib29sIGlzUm9vdExpbmVCb3gsIGJvb2wgaXNPbmx5UnVuID0gZmFsc2UpOworICAgIH07
Cit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorI2VuZGlmIC8vICFSZW5kZXJTVkdUU3Bhbl9I
CkluZGV4OiBrY2FudmFzL1JlbmRlclNWR0lubGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtj
YW52YXMvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1Jl
bmRlclNWR0lubGluZVRleHQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56
PgorICogICAgICAgICAgIChDKSAyMDA2IEFwcGxlIENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
CisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmZGVmIFNWR19T
VVBQT1JUCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmVU
ZXh0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJLQ2FudmFz
UmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCisjaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1JlbmRl
clNWR0lubGluZVRleHQ6OlJlbmRlclNWR0lubGluZVRleHQoTm9kZSogbiwgU3RyaW5nSW1wbCog
c3RyKSAKKyAgICA6IFJlbmRlclRleHQobiwgc3RyKSB7fQorCit2b2lkIFJlbmRlclNWR0lubGlu
ZVRleHQ6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQg
dHkpCit7CisgICAgRmxvYXRSZWN0IGFic29sdXRlUmVjdCA9IGFic29sdXRlVHJhbnNmb3JtKCku
bWFwUmVjdChGbG9hdFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSkpOworICAgIHJlY3Rz
LmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUmVjdCkpOworfQorCitJbnRSZWN0IFJl
bmRlclNWR0lubGluZVRleHQ6OnNlbGVjdGlvblJlY3QoKQoreworICAgIEludFJlY3QgcmVjdCA9
IFJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3QoKTsKKyAgICByZWN0ID0gcGFyZW50KCktPmFic29s
dXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZWN0KTsKKyAgICByZXR1cm4gcmVjdDsKK30KKworfQor
CisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lVGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCShyZXZpc2lv
biAwKQorKysga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2pl
Y3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50
LmNhbnRlcmJ1cnkuYWMubno+CisgKiAgICAgICAgICAgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIg
SW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAq
LworCisjaWZuZGVmIFJlbmRlclNWR0lubGluZVRleHRfSAorI2RlZmluZSBSZW5kZXJTVkdJbmxp
bmVUZXh0X0gKKworI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJSZW5kZXJUZXh0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlbmRlclNWR0lubGluZVRleHQgOiBwdWJs
aWMgUmVuZGVyVGV4dCB7CitwdWJsaWM6CisgICAgUmVuZGVyU1ZHSW5saW5lVGV4dChOb2RlKiwg
U3RyaW5nSW1wbCopOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0
IHsgcmV0dXJuICJSZW5kZXJTVkdJbmxpbmVUZXh0IjsgfQorICAgIHZpcnR1YWwgdm9pZCBhYnNv
bHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KTsKKyAgICB2
aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdCgpOworfTsKK30KKworI2VuZGlmIC8vIFNWR19T
VVBQT1JUCisKKyNlbmRpZiAvLyAhUmVuZGVyU1ZHSW5saW5lVGV4dF9ICkluZGV4OiBrY2FudmFz
L1JlbmRlclNWR1RTcGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR1RTcGFu
LmNwcAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvUmVuZGVyU1ZHVFNwYW4uY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2po
MTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgorICogICAgICAgICAgIChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmZGVmIFNWR19TVVBQT1JUCisj
aW5jbHVkZSAiUmVuZGVyU1ZHVFNwYW4uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5n
RGV2aWNlLmgiCisjaW5jbHVkZSAiU1ZHUm9vdElubGluZUJveC5oIgorI2luY2x1ZGUgIlNWR0lu
bGluZUZsb3dCb3guaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJT
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitSZW5kZXJTVkdUU3Bhbjo6UmVuZGVyU1ZHVFNw
YW4oTm9kZSogbikgOiBSZW5kZXJTVkdJbmxpbmUobikge30KKwordm9pZCBSZW5kZXJTVkdUU3Bh
bjo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkK
K3sKKyAgICBJbmxpbmVGbG93Qm94KiBpbml0RmxvdyA9IGZpcnN0TGluZUJveCgpOworICAgIEZs
b2F0UmVjdCBib3VuZHModHggKyBpbml0Rmxvdy0+eFBvcygpLCB0eSArIGluaXRGbG93LT55UG9z
KCksIHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVj
dChhYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoYm91bmRzKSkpOworfQorCisKK30KKworI2Vu
ZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBrY2FudmFzL1JlbmRlclNWR1RTcGFuLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdUU3Bhbi5oCShyZXZpc2lvbiAwKQorKysga2NhbnZh
cy9SZW5kZXJTVkdUU3Bhbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACisvKgorICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pgor
ICogICAgICAgICAgIChDKSAyMDA2IEFwcGxlIENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisg
KiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBSZW5kZXJT
VkdUU3Bhbl9ICisjZGVmaW5lIFJlbmRlclNWR1RTcGFuX0gKKworI2lmZGVmIFNWR19TVVBQT1JU
CisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIFJlbmRlclNWR1RTcGFuIDogcHVibGljIFJlbmRlclNWR0lubGluZSB7CitwdWJsaWM6Cisg
ICAgUmVuZGVyU1ZHVFNwYW4oTm9kZSopOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVy
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdUU3BhbiI7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSk7
Cit9OworfQorCisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKKyNlbmRpZiAvLyAhUmVuZGVyU1ZHVFNw
YW5fSApJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2Fu
dmFzL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAxNjg5MSkKKysrIGtjYW52YXMvUmVuZGVy
U1ZHVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKiAgICAgICAgICAgICAgIDIwMDYg
QWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZAa2RlLm9yZz4KKyAqICAgICAgICAgICAgICAgMjAw
NiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjYsMTI0ICsyNywyNiBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQu
aCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIktDYW52YXNDbGlw
cGVyLmgiCi0jaW5jbHVkZSAiS0NhbnZhc01hc2tlci5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5k
ZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJT
VkdMZW5ndGhMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHVGV4dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJT
VkdSb290SW5saW5lQm94LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVJlbmRlclNWR1RleHQ6OlJlbmRlclNWR1RleHQoU1ZHVGV4dEVsZW1lbnQg
Km5vZGUpIAorUmVuZGVyU1ZHVGV4dDo6UmVuZGVyU1ZHVGV4dChTVkdUZXh0RWxlbWVudCogbm9k
ZSkgCiAgICAgOiBSZW5kZXJCbG9jayhub2RlKQogewogfQogCi1BZmZpbmVUcmFuc2Zvcm0gUmVu
ZGVyU1ZHVGV4dDo6dHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5lKCkKLXsKLSAgICBpbnQgb2Zmc2V0
ID0gYmFzZWxpbmVQb3NpdGlvbih0cnVlLCB0cnVlKTsKLSAgICByZXR1cm4gQWZmaW5lVHJhbnNm
b3JtKCkudHJhbnNsYXRlKDAsIC1vZmZzZXQpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gUmVuZGVy
U1ZHVGV4dDo6dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkKLXsKLSAgICBTVkdUZXh0RWxlbWVu
dCAqdGV4dCA9IHN0YXRpY19jYXN0PFNWR1RleHRFbGVtZW50Kj4oZWxlbWVudCgpKTsKLQotICAg
IFNWR0xlbmd0aCogeE9mZnNldCA9IHRleHQtPngoKS0+Z2V0Rmlyc3QoKS5nZXQoKTsKLSAgICBT
VkdMZW5ndGgqIHlPZmZzZXQgPSB0ZXh0LT55KCktPmdldEZpcnN0KCkuZ2V0KCk7Ci0KLSAgICBy
ZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKHhPZmZzZXQgPyB4T2Zmc2V0LT52YWx1
ZSgpIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlPZmZzZXQg
PyB5T2Zmc2V0LT52YWx1ZSgpIDogMCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHVGV4dDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSkKLXsKLSAgICBp
ZiAocGFpbnRJbmZvLnAtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgS1JlbmRlcmluZ0RldmljZSogZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7Ci0gICAgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQgPSBkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCk7
Ci0gICAgYm9vbCBzaG91bGRQb3BDb250ZXh0ID0gZmFsc2U7Ci0gICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHBhaW50SW5mby5wLT5zYXZlKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIE5lZWQg
dG8gc2V0IHVwIEtDYW52YXMgcmVuZGVyaW5nIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gZG9u
ZS4KLSAgICAgICAgY29udGV4dCA9IHBhaW50SW5mby5wLT5jcmVhdGVSZW5kZXJpbmdEZXZpY2VD
b250ZXh0KCk7Ci0gICAgICAgIGRldmljZS0+cHVzaENvbnRleHQoY29udGV4dCk7Ci0gICAgICAg
IHNob3VsZFBvcENvbnRleHQgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBjb250ZXh0LT5jb25j
YXRDVE0obG9jYWxUcmFuc2Zvcm0oKSk7Ci0gICAgY29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRy
YW5zZm9ybSgpLnRyYW5zbGF0ZShwYXJlbnRYLCBwYXJlbnRZKSk7Ci0gICAgY29udGV4dC0+Y29u
Y2F0Q1RNKHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpKTsKLSAgICBjb250ZXh0LT5jb25jYXRD
VE0odHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5lKCkpOwotICAgIAotICAgIEZsb2F0UmVjdCBib3Vu
ZGluZ0JveCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSk7Ci0gICAgY29uc3QgU1ZHUmVuZGVyU3R5
bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgICAgIAotICAgIGlm
IChLQ2FudmFzQ2xpcHBlciogY2xpcHBlciA9IGdldENsaXBwZXJCeUlkKGRvY3VtZW50KCksIHN2
Z1N0eWxlLT5jbGlwUGF0aCgpLnN1YnN0cmluZygxKSkpCi0gICAgICAgIGNsaXBwZXItPmFwcGx5
Q2xpcChib3VuZGluZ0JveCk7Ci0KLSAgICBpZiAoS0NhbnZhc01hc2tlciogbWFza2VyID0gZ2V0
TWFza2VyQnlJZChkb2N1bWVudCgpLCBzdmdTdHlsZS0+bWFza0VsZW1lbnQoKS5zdWJzdHJpbmco
MSkpKQotICAgICAgICBtYXNrZXItPmFwcGx5TWFzayhib3VuZGluZ0JveCk7Ci0KLSAgICBLQ2Fu
dmFzRmlsdGVyKiBmaWx0ZXIgPSBnZXRGaWx0ZXJCeUlkKGRvY3VtZW50KCksIHN2Z1N0eWxlLT5m
aWx0ZXIoKS5zdWJzdHJpbmcoMSkpOwotICAgIGlmIChmaWx0ZXIpCi0gICAgICAgIGZpbHRlci0+
cHJlcGFyZUZpbHRlcihib3VuZGluZ0JveCk7Ci0gICAgICAgIAotICAgIE93blB0cjxHcmFwaGlj
c0NvbnRleHQ+IGMoZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpLT5jcmVhdGVHcmFwaGljc0NvbnRl
eHQoKSk7Ci0gICAgUGFpbnRJbmZvIHBpID0gcGFpbnRJbmZvOwotICAgIHBpLnAgPSBjLmdldCgp
OwotICAgIHBpLnIgPSAodHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5lKCkgKiB0cmFuc2xhdGlvbkZv
ckF0dHJpYnV0ZXMoKSAqIGFic29sdXRlVHJhbnNmb3JtKCkpLmludmVydCgpLm1hcFJlY3QocGFp
bnRJbmZvLnIpOwotCi0gICAgZmxvYXQgb3BhY2l0eSA9IHN0eWxlKCktPm9wYWNpdHkoKTsKLSAg
ICBpZiAob3BhY2l0eSA8IDEuMGYpCi0gICAgICAgIC8vIEZJWE1FOiBvbmNlIFJlbmRlclNWR1Rl
eHQ6OnJlbGF0aXZlQkJveCgpIGlzIGZpeGVkLCBjbGlwcGluZyB0byB0aGUgY3VycmVudCBiYm94
IGhlcmUgd2lsbCBzYXZlIHRpbWUgd2hlbiByZW5kZXJpbmcgdGV4dCB3LyBvcGFjaXR5Ci0gICAg
ICAgIGMtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0KLSAgICBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXIgKmZpbGxQYWludFNlcnZlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBh
aW50U2VydmVyKHN0eWxlKCksIHRoaXMpOwotICAgIGlmIChmaWxsUGFpbnRTZXJ2ZXIpIHsKLSAg
ICAgICAgZmlsbFBhaW50U2VydmVyLT5zZXRQYWludGluZ1RleHQodHJ1ZSk7Ci0gICAgICAgIGlm
IChmaWxsUGFpbnRTZXJ2ZXItPnNldHVwKGNvbnRleHQsIHRoaXMsIEFQUExZX1RPX0ZJTEwpKSB7
Ci0gICAgICAgICAgICBSZW5kZXJCbG9jazo6cGFpbnQocGksIDAsIDApOwotICAgICAgICAgICAg
ZmlsbFBhaW50U2VydmVyLT50ZWFyZG93bihjb250ZXh0LCB0aGlzLCBBUFBMWV9UT19GSUxMKTsK
LSAgICAgICAgfQotICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dChmYWxz
ZSk7Ci0gICAgfQotICAgIAotICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqc3Ryb2tlUGFpbnRT
ZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKHN0eWxlKCksIHRo
aXMpOwotICAgIGlmIChzdHJva2VQYWludFNlcnZlcikgewotICAgICAgICBzdHJva2VQYWludFNl
cnZlci0+c2V0UGFpbnRpbmdUZXh0KHRydWUpOwotICAgICAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2
ZXItPnNldHVwKGNvbnRleHQsIHRoaXMsIEFQUExZX1RPX1NUUk9LRSkpIHsKLSAgICAgICAgICAg
IFJlbmRlckJsb2NrOjpwYWludChwaSwgMCwgMCk7Ci0gICAgICAgICAgICBzdHJva2VQYWludFNl
cnZlci0+dGVhcmRvd24oY29udGV4dCwgdGhpcywgQVBQTFlfVE9fU1RST0tFKTsKLSAgICAgICAg
fQotICAgICAgICBzdHJva2VQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KGZhbHNlKTsKLSAg
ICB9Ci0KLSAgICBpZiAoZmlsdGVyKQotICAgICAgICBmaWx0ZXItPmFwcGx5RmlsdGVyKGJvdW5k
aW5nQm94KTsKLQotICAgIGlmIChvcGFjaXR5IDwgMS4wZikKLSAgICAgICAgYy0+ZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKTsKLQotICAgIC8vIHJlc3RvcmUgZHJhd2luZyBzdGF0ZQotICAgIGlmICgh
c2hvdWxkUG9wQ29udGV4dCkKLSAgICAgICAgcGFpbnRJbmZvLnAtPnJlc3RvcmUoKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgZGV2aWNlLT5wb3BDb250ZXh0KCk7Ci0gICAgICAgIGRlbGV0ZSBjb250
ZXh0OwotICAgIH0KLX0KLQogdm9pZCBSZW5kZXJTVkdUZXh0Ojpjb21wdXRlQWJzb2x1dGVSZXBh
aW50UmVjdChJbnRSZWN0JiByLCBib29sIGYpCiB7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IHRyYW5zbGF0aW9uVG9wVG9CYXNlbGluZSgpICogdHJhbnNsYXRpb25Gb3JBdHRyaWJ1
dGVzKCkgKiBhYnNvbHV0ZVRyYW5zZm9ybSgpOworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zv
cm0gPSBsb2NhbFRyYW5zZm9ybSgpOwogICAgIHIgPSB0cmFuc2Zvcm0ubWFwUmVjdChyKTsKLSAg
ICAKICAgICBSZW5kZXJDb250YWluZXI6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KHIsIGYp
OworICAgIHIgPSB0cmFuc2Zvcm0uaW52ZXJ0KCkubWFwUmVjdChyKTsKIH0KIAogYm9vbCBSZW5k
ZXJTVkdUZXh0OjpyZXF1aXJlc0xheWVyKCkKQEAgLTE2MCw5ICs2MywxMiBAQCB2b2lkIFJlbmRl
clNWR1RleHQ6OmxheW91dCgpCiAgICAgYm9vbCBjaGVja0ZvclJlcGFpbnQgPSBjaGVja0ZvclJl
cGFpbnREdXJpbmdMYXlvdXQoKTsKICAgICBpZiAoY2hlY2tGb3JSZXBhaW50KQogICAgICAgICBv
bGRCb3VuZHMgPSBtX2Fic29sdXRlQm91bmRzOwotCisgICAgU1ZHVGV4dEVsZW1lbnQqIHRleHQg
PSBzdGF0aWNfY2FzdDxTVkdUZXh0RWxlbWVudCo+KGVsZW1lbnQoKSk7CisgICAgaW50IHhPZmZz
ZXQgPSB0ZXh0LT54KCktPmdldEZpcnN0KCkgPyB0ZXh0LT54KCktPmdldEZpcnN0KCktPnZhbHVl
KCkgOiAwOworICAgIGludCB5T2Zmc2V0ID0gdGV4dC0+eSgpLT5nZXRGaXJzdCgpID8gdGV4dC0+
eSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKKyAgICB0aGlzLT5zZXRQb3MoeE9mZnNldCwg
eU9mZnNldCk7CiAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwotCisgICAgCiAgICAgbV9hYnNv
bHV0ZUJvdW5kcyA9IGdldEFic29sdXRlUmVwYWludFJlY3QoKTsKIAogICAgIGJvb2wgcmVwYWlu
dGVkID0gZmFsc2U7CkBAIC0xNzIsMTEgKzc4LDI1IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5
b3V0KCkKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAKK0lubGluZUJveCogUmVuZGVy
U1ZHVGV4dDo6Y3JlYXRlSW5saW5lQm94KGJvb2wgbWFrZVBsYWNlSG9sZGVyQm94LCBib29sIGlz
Um9vdExpbmVCb3gsIGJvb2wgaXNPbmx5UnVuKQoreworICAgIGFzc2VydCghaXNJbmxpbmVGbG93
KCkpOworICAgIElubGluZUZsb3dCb3gqIGZsb3dCb3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIFNW
R1Jvb3RJbmxpbmVCb3godGhpcyk7CisgICAgCisgICAgaWYgKCFtX2ZpcnN0TGluZUJveCkKKyAg
ICAgICAgbV9maXJzdExpbmVCb3ggPSBtX2xhc3RMaW5lQm94ID0gZmxvd0JveDsKKyAgICBlbHNl
IHsKKyAgICAgICAgbV9sYXN0TGluZUJveC0+c2V0TmV4dExpbmVCb3goZmxvd0JveCk7CisgICAg
ICAgIGZsb3dCb3gtPnNldFByZXZpb3VzTGluZUJveChtX2xhc3RMaW5lQm94KTsKKyAgICAgICAg
bV9sYXN0TGluZUJveCA9IGZsb3dCb3g7CisgICAgfQorICAgIAorICAgIHJldHVybiBmbG93Qm94
OworfQorCiBib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KE5vZGVJbmZvJiBpbmZvLCBp
bnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQogewotICAgIEFmZmluZVRyYW5zZm9ybSB0b3RhbFRyYW5zZm9ybSA9IHRyYW5zbGF0aW9u
Rm9yQXR0cmlidXRlcygpOwotICAgIHRvdGFsVHJhbnNmb3JtICo9IHRyYW5zbGF0aW9uVG9wVG9C
YXNlbGluZSgpOwotICAgIHRvdGFsVHJhbnNmb3JtICo9IGFic29sdXRlVHJhbnNmb3JtKCk7Cisg
ICAgQWZmaW5lVHJhbnNmb3JtIHRvdGFsVHJhbnNmb3JtID0gYWJzb2x1dGVUcmFuc2Zvcm0oKTsK
ICAgICBkb3VibGUgbG9jYWxYLCBsb2NhbFk7CiAgICAgdG90YWxUcmFuc2Zvcm0uaW52ZXJ0KCku
bWFwKF94LCBfeSwgJmxvY2FsWCwgJmxvY2FsWSk7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpu
b2RlQXRQb2ludChpbmZvLCAoaW50KWxvY2FsWCwgKGludClsb2NhbFksIF90eCwgX3R5LCBoaXRU
ZXN0QWN0aW9uKTsKQEAgLTE4NCwxMSArMTA0LDMzIEBAIGJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9k
ZUF0UG9pbnQoTm9kZUluZm8KIAogdm9pZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVJlY3RzKFZl
Y3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQogewotICAgIEFmZmluZVRyYW5z
Zm9ybSBtYXQgPSB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKTsKLSAgICBtYXQgKj0gdHJhbnNs
YXRpb25Ub3BUb0Jhc2VsaW5lKCk7Ci0gICAgbWF0ICo9IGFic29sdXRlVHJhbnNmb3JtKCk7Cisg
ICAgSW5saW5lQm94KiBib3ggPSBtX2ZpcnN0TGluZUJveDsKKyAgICBpZiAoIWJveCkKKyAgICAg
ICAgcmV0dXJuOworICAgIEFmZmluZVRyYW5zZm9ybSBib3hUcmFuc2Zvcm0gPSBtX2ZpcnN0TGlu
ZUJveC0+b2JqZWN0KCktPmFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgRmxvYXRSZWN0IGJveFJl
Y3QgPSBGbG9hdFJlY3QoeFBvcygpICsgYm94LT54UG9zKCksIHlQb3MoKSArIGJveC0+eVBvcygp
LCBib3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpOworICAgIHJlY3RzLmFwcGVuZChlbmNsb3Np
bmdJbnRSZWN0KGJveFRyYW5zZm9ybS5tYXBSZWN0KGJveFJlY3QpKSk7Cit9CisKK3ZvaWQgUmVu
ZGVyU1ZHVGV4dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBfdHgsIGludCBfdHkp
Cit7ICAgIAorICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgp
OworICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIHBpID0gcGFpbnRJbmZvOworICAgIE93blB0
cjxHcmFwaGljc0NvbnRleHQ+IGMoZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpLT5jcmVhdGVHcmFw
aGljc0NvbnRleHQoKSk7CisgICAgcGkucCA9IGMuZ2V0KCk7CisgICAgcGkuciA9IChhYnNvbHV0
ZVRyYW5zZm9ybSgpKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5mby5yKTsKKyAgICBSZW5kZXJC
bG9jazo6cGFpbnQocGksIF90eCwgX3R5KTsKK30KIAotICAgIHJlY3RzLmFwcGVuZChlbmNsb3Np
bmdJbnRSZWN0KG1hdC5tYXBSZWN0KEZsb2F0UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkp
KSk7CitGbG9hdFJlY3QgUmVuZGVyU1ZHVGV4dDo6cmVsYXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0
cm9rZSkgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgYm91bmRzUmVjdDsKKyAgICBJbmxpbmVCb3gq
IGJveCA9IG1fZmlyc3RMaW5lQm94OworICAgIGlmIChib3gpIHsKKyAgICAgICAgYm91bmRzUmVj
dCA9IEZsb2F0UmVjdCh4UG9zKCkgKyBib3gtPnhQb3MoKSwgeVBvcygpICsgYm94LT55UG9zKCks
IGJveC0+d2lkdGgoKSwgYm94LT5oZWlnaHQoKSk7CisgICAgICAgIGJvdW5kc1JlY3QgPSBsb2Nh
bFRyYW5zZm9ybSgpLm1hcFJlY3QoYm91bmRzUmVjdCk7CisgICAgfQorICAgIHJldHVybiBib3Vu
ZHNSZWN0OwogfQogCiB9CkluZGV4OiBrY2FudmFzL1JlbmRlclNWR1RleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrY2FudmFzL1JlbmRlclNWR1RleHQuaAkocmV2aXNpb24gMTY4OTEpCisrKyBrY2FudmFz
L1JlbmRlclNWR1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMjUgKzM0LDIxIEBAIGNsYXNz
IFNWR1RleHRFbGVtZW50OwogY2xhc3MgUmVuZGVyU1ZHVGV4dCA6IHB1YmxpYyBSZW5kZXJCbG9j
awogewogcHVibGljOgotICAgIFJlbmRlclNWR1RleHQoU1ZHVGV4dEVsZW1lbnQgKm5vZGUpOwor
ICAgIFJlbmRlclNWR1RleHQoU1ZHVGV4dEVsZW1lbnQqIG5vZGUpOwogCiAgICAgdmlydHVhbCBj
b25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1RleHQiOyB9
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBpbnQgcGFy
ZW50WSk7CiAgICAgCiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRMb2Nh
bFRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9y
bSA9IHRyYW5zZm9ybTsgfQotICAgIAorICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8m
IGksIGludCBfdHgsIGludCBfdHkpOwogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChOb2Rl
SW5mbyYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwotCiAg
ICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBp
bnQgdHkpOwotCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KElu
dFJlY3QmIHIsIGJvb2wgZik7CiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgCisgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVs
YXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0cm9rZSA9IHRydWUpIGNvbnN0OworICAgIHZpcnR1YWwg
SW5saW5lQm94KiBjcmVhdGVJbmxpbmVCb3goYm9vbCBtYWtlUGxhY2VIb2xkZXJCb3gsIGJvb2wg
aXNSb290TGluZUJveCwgYm9vbCBpc09ubHlSdW4gPSBmYWxzZSk7CiAgcHJpdmF0ZToKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5lKCk7Ci0gICAgQWZmaW5lVHJh
bnNmb3JtIHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpOwogICAgIEFmZmluZVRyYW5zZm9ybSBt
X3RyYW5zZm9ybTsKICAgICBJbnRSZWN0IG1fYWJzb2x1dGVCb3VuZHM7CiB9OwpJbmRleDoga2Nh
bnZhcy9TVkdJbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1NWR0lubGlu
ZUZsb3dCb3guY3BwCShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9TVkdJbmxpbmVGbG93Qm94LmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZl
ciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgKiAgICAgICAgICAgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgorICoKKyAqLworCisKKyNpZmRlZiBTVkdfU1VQUE9SVAorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiU1ZH
SW5saW5lRmxvd0JveC5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbmNsdWRl
ICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlICJLQ2FudmFzQ2xpcHBlci5oIgor
I2luY2x1ZGUgIktDYW52YXNNYXNrZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTVkdJbmxpbmVGbG93Qm94OjpwYWludChSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkgCit7CisgICAgcGFp
bnRTVkdJbmxpbmVGbG93KHRoaXMsIG9iamVjdCgpLCBwYWludEluZm8sIHR4LCB0eSk7Cit9CisK
K3ZvaWQgcGFpbnRTVkdJbmxpbmVGbG93KElubGluZUZsb3dCb3gqIGZsb3csIFJlbmRlck9iamVj
dCogb2JqZWN0LCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGlu
dCB0eSkKK3sKKyAgICBpZiAocGFpbnRJbmZvLnAtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmlu
Z0RldmljZSgpOworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0ID0gZGV2aWNl
LT5jdXJyZW50Q29udGV4dCgpOworICAgIGJvb2wgc2hvdWxkUG9wQ29udGV4dCA9IGZhbHNlOwor
ICAgIGlmIChjb250ZXh0KQorICAgICAgICBwYWludEluZm8ucC0+c2F2ZSgpOworICAgIGVsc2Ug
eworICAgICAgICAvLyBOZWVkIHRvIHNldCB1cCBLQ2FudmFzIHJlbmRlcmluZyBpZiBpdCBoYXNu
J3QgYWxyZWFkeSBiZWVuIGRvbmUuCisgICAgICAgIGNvbnRleHQgPSBwYWludEluZm8ucC0+Y3Jl
YXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpOworICAgICAgICBkZXZpY2UtPnB1c2hDb250ZXh0
KGNvbnRleHQpOworICAgICAgICBzaG91bGRQb3BDb250ZXh0ID0gdHJ1ZTsKKyAgICB9CisgICAg
CisKKyAgICBjb250ZXh0LT5jb25jYXRDVE0ob2JqZWN0LT5sb2NhbFRyYW5zZm9ybSgpKTsKKyAg
ICAKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3godHgrZmxvdy0+eFBvcygpICwgdHkrZmxvdy0+
eVBvcygpLCBmbG93LT53aWR0aCgpLCBmbG93LT5oZWlnaHQoKSk7CisgICAgCisgICAgY29uc3Qg
U1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gb2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpOwor
ICAgIGlmIChLQ2FudmFzQ2xpcHBlciogY2xpcHBlciA9IGdldENsaXBwZXJCeUlkKG9iamVjdC0+
ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmNsaXBQYXRoKCkuc3Vic3RyaW5nKDEpKSkKKyAgICAgICAg
Y2xpcHBlci0+YXBwbHlDbGlwKGJvdW5kaW5nQm94KTsKKyAgICAKKyAgICBpZiAoS0NhbnZhc01h
c2tlciogbWFza2VyID0gZ2V0TWFza2VyQnlJZChvYmplY3QtPmRvY3VtZW50KCksIHN2Z1N0eWxl
LT5tYXNrRWxlbWVudCgpLnN1YnN0cmluZygxKSkpCisgICAgICAgIG1hc2tlci0+YXBwbHlNYXNr
KGJvdW5kaW5nQm94KTsKKyAgICAKKyAgICBLQ2FudmFzRmlsdGVyKiBmaWx0ZXIgPSBnZXRGaWx0
ZXJCeUlkKG9iamVjdC0+ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmZpbHRlcigpLnN1YnN0cmluZygx
KSk7CisgICAgaWYgKGZpbHRlcikKKyAgICAgICAgZmlsdGVyLT5wcmVwYXJlRmlsdGVyKGJvdW5k
aW5nQm94KTsKKyAgICAKKyAgICBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyBwaSA9IHBhaW50SW5m
bzsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjKGRldmljZS0+Y3VycmVudENvbnRleHQo
KS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkpOworICAgIHBpLnAgPSBjLmdldCgpOworICAgIGlm
ICghZmxvdy0+aXNSb290SW5saW5lQm94KCkpCisgICAgICAgIHBpLnIgPSAob2JqZWN0LT5sb2Nh
bFRyYW5zZm9ybSgpKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5mby5yKTsKKyAgICAKKyAgICBm
bG9hdCBvcGFjaXR5ID0gb2JqZWN0LT5zdHlsZSgpLT5vcGFjaXR5KCk7CisgICAgaWYgKG9wYWNp
dHkgPCAxLjBmKSB7CisgICAgICAgIGMtPmNsaXAoZW5jbG9zaW5nSW50UmVjdChib3VuZGluZ0Jv
eCkpOworICAgICAgICBjLT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOworICAgIH0K
KyAgICAKKyAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIqIGZpbGxQYWludFNlcnZlciA9IEtTVkdQ
YWludGVyRmFjdG9yeTo6ZmlsbFBhaW50U2VydmVyKG9iamVjdC0+c3R5bGUoKSwgb2JqZWN0KTsK
KyAgICBpZiAoZmlsbFBhaW50U2VydmVyKSB7CisgICAgICAgIGZpbGxQYWludFNlcnZlci0+c2V0
UGFpbnRpbmdUZXh0KHRydWUpOworICAgICAgICBpZiAoZmlsbFBhaW50U2VydmVyLT5zZXR1cChj
b250ZXh0LCBvYmplY3QsIEFQUExZX1RPX0ZJTEwpKSB7CisgICAgICAgICAgICBmbG93LT5wYXJl
bnRQYWludE1ldGhvZChwaSwgdHgsIHR5KTsKKyAgICAgICAgICAgIGZpbGxQYWludFNlcnZlci0+
dGVhcmRvd24oY29udGV4dCwgb2JqZWN0LCBBUFBMWV9UT19GSUxMKTsKKyAgICAgICAgfQorICAg
ICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dChmYWxzZSk7CisgICAgfQorICAg
IEtSZW5kZXJpbmdQYWludFNlcnZlciogc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZh
Y3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKG9iamVjdC0+c3R5bGUoKSwgb2JqZWN0KTsKKyAgICBp
ZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKKyAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldFBh
aW50aW5nVGV4dCh0cnVlKTsKKyAgICAgICAgaWYgKHN0cm9rZVBhaW50U2VydmVyLT5zZXR1cChj
b250ZXh0LCBvYmplY3QsIEFQUExZX1RPX1NUUk9LRSkpIHsKKyAgICAgICAgICAgIGZsb3ctPnBh
cmVudFBhaW50TWV0aG9kKHBpLCB0eCwgdHkpOworICAgICAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2
ZXItPnRlYXJkb3duKGNvbnRleHQsIG9iamVjdCwgQVBQTFlfVE9fU1RST0tFKTsKKyAgICAgICAg
fQorICAgICAgICBzdHJva2VQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KGZhbHNlKTsKKyAg
ICB9CisgICAgCisgICAgaWYgKGZpbHRlcikgCisgICAgICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIo
Ym91bmRpbmdCb3gpOworICAgIAorICAgIGlmIChvcGFjaXR5IDwgMS4wZikKKyAgICAgICAgYy0+
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKworICAgIC8vIHJlc3RvcmUgZHJhd2luZyBzdGF0ZQor
ICAgIGlmICghc2hvdWxkUG9wQ29udGV4dCkKKyAgICAgICAgcGFpbnRJbmZvLnAtPnJlc3RvcmUo
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgZGV2aWNlLT5wb3BDb250ZXh0KCk7CisgICAgICAgIGRl
bGV0ZSBjb250ZXh0OworICAgIH0KK30KKworfQorI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4
OiBrY2FudmFzL1NWR0lubGluZUZsb3dCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1NWR0lu
bGluZUZsb3dCb3guaAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvU1ZHSW5saW5lRmxvd0JveC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIg
SHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgorICogICAgICAgICAgIChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTVkdJbmxpbmVGbG93Qm94X0gKKyNkZWZp
bmUgU1ZHSW5saW5lRmxvd0JveF9ICisKKyNpZmRlZiBTVkdfU1VQUE9SVAorCisjaW5jbHVkZSAi
SW5saW5lRmxvd0JveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgcGFpbnRTVkdJ
bmxpbmVGbG93KElubGluZUZsb3dCb3gqIGZsb3csIFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSk7CisKK2NsYXNzIFNWR0lu
bGluZUZsb3dCb3ggOiBwdWJsaWMgSW5saW5lRmxvd0JveCB7CitwdWJsaWM6CisgICAgU1ZHSW5s
aW5lRmxvd0JveChSZW5kZXJPYmplY3QqIG9iaikgOiBJbmxpbmVGbG93Qm94KG9iaikKKyAgICB7
CisgICAgICAgIG1faXNTVkdGbG93ID0gdHJ1ZTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBh
cmVudFBhaW50TWV0aG9kKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQg
X3R5KXsgSW5saW5lRmxvd0JveDo6cGFpbnQoaSwgX3R4LCBfdHkpOyB9CisgICAgdmlydHVhbCB2
b2lkIHBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KTsK
K307CisKK30KKworI2VuZGlmIC8vIFNWR19TVVBQT1JUCisKKyNlbmRpZiAvLyAhU1ZHSW5saW5l
Rmxvd0JveF9ICkluZGV4OiBrY2FudmFzL1NWR1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtjYW52YXMvU1ZHUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFz
L1NWR1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56
PgorICogICAgICAgICAgIChDKSAyMDA2IEFwcGxlIENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
CisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworCisjaWZkZWYgU1ZH
X1NVUFBPUlQKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVC
b3guaCIKKyNpbmNsdWRlICJTVkdJbmxpbmVGbG93Qm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordm9pZCBTVkdSb290SW5saW5lQm94OjpwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpIAoreworICAgIHBhaW50U1ZH
SW5saW5lRmxvdyh0aGlzLCBvYmplY3QoKSwgcGFpbnRJbmZvLCBwYXJlbnRYLCBwYXJlbnRZKTsK
K30KKworfQorI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBrY2FudmFzL1NWR1Jvb3RJbmxp
bmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1NWR1Jvb3RJbmxpbmVCb3guaAkocmV2aXNp
b24gMCkKKysrIGtjYW52YXMvU1ZHUm9vdElubGluZUJveC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0
LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5j
YW50ZXJidXJ5LmFjLm56PgorICogICAgICAgICAgIChDKSAyMDA2IEFwcGxlIENvbXB1dGVyIElu
Yy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8K
KworI2lmbmRlZiBTVkdSb290SW5saW5lQm94X0gKKyNkZWZpbmUgU1ZHUm9vdElubGluZUJveF9I
CisKKyNpZmRlZiBTVkdfU1VQUE9SVAorCisjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitjbGFzcyBTVkdSb290SW5saW5lQm94IDogcHVibGlj
IFJvb3RJbmxpbmVCb3ggeworcHVibGljOgorICAgIFNWR1Jvb3RJbmxpbmVCb3goUmVuZGVyT2Jq
ZWN0KiBvYmopIDogUm9vdElubGluZUJveChvYmopCisgICAgeworICAgICAgICBtX2lzU1ZHRmxv
dyA9IHRydWU7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwYXJlbnRQYWludE1ldGhvZChSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSl7IFJvb3RJbmxpbmVCb3g6
OnBhaW50KGksIF90eCwgX3R5KTsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludChSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSk7Cit9OworCit9CisKKyNlbmRpZiAv
LyBTVkdfU1VQUE9SVAorCisjZW5kaWYgLy8gIVJvb3RJbmxpbmVCb3hfSApJbmRleDoga3N2ZzIv
c3ZnL1NWR1RSZWZFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVFJlZkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNjg5MSkKKysrIGtzdmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJTVkdOYW1lcy5o
IgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5oIgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNzksNyArNzksNyBAQCBib29sIFNWR1RSZWZF
bGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlCiAKIFJlbmRlck9iamVjdCAqU1ZHVFJlZkVsZW1l
bnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKikKIHsK
LSAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVySW5saW5lKHRoaXMpOworICAgIHJldHVybiBu
ZXcgKGFyZW5hKSBSZW5kZXJTVkdJbmxpbmUodGhpcyk7CiB9CiAKIC8vIHZpbTp0cz00Om5vZXQK
SW5kZXg6IGtzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcy
L3N2Zy9TVkdUU3BhbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjg5MSkKKysrIGtzdmcyL3N2Zy9T
VkdUU3BhbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaWZk
ZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdUU3BhbkVsZW1lbnQuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUgIlJlbmRlclNW
R1RTcGFuLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00Nyw3ICs0Nyw3IEBA
IGJvb2wgU1ZHVFNwYW5FbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVIKIAogUmVuZGVyT2JqZWN0
ICpTVkdUU3BhbkVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVu
ZGVyU3R5bGUgKikKIHsKLSAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVySW5saW5lKHRoaXMp
OworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdUU3Bhbih0aGlzKTsKIH0KIAogLy8g
dmltOnRzPTQ6bm9ldApJbmRleDogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMTY4OTEpCisrKyBy
ZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDEx
IEBACiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxl
Q2VsbC5oIgogCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJTVkdUZXh0UG9zaXRpb25p
bmdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgorI2VuZGlmIC8vIFNWR19T
VVBQT1JUCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTIzOCw4ICsyNDMsMTM3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6ZGV0ZXJtaW5lU3BhY2luZ0Zv
ckYKICAgICB9CiB9CiAKKworI2lmZGVmIFNWR19TVVBQT1JUCisKK3N0YXRpYyBib29sIHRyYW5z
bGF0ZUJveChJbmxpbmVCb3gqIGJveCwgaW50IHgsIGludCB5LCBib29sIHRvcExldmVsID0gdHJ1
ZSkKK3sgICAgCisgICAgaWYgKGJveC0+b2JqZWN0KCktPmlzVGV4dCgpKSAKKyAgICB7CisgICAg
ICAgIGJveC0+c2V0WFBvcyhib3gtPnhQb3MoKSArIHgpOworICAgICAgICBib3gtPnNldFlQb3Mo
Ym94LT55UG9zKCkgKyB5KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgSW5saW5l
Rmxvd0JveCogZmxvdyA9IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihib3gpOworICAgICAg
ICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudCo+KGJveC0+b2JqZWN0KCktPmVsZW1lbnQoKSk7CisgICAgICAgIAor
ICAgICAgICBpZiAodG9wTGV2ZWx8fCEodGV4dC0+eCgpLT5nZXRGaXJzdCgpIHx8IHRleHQtPnko
KS0+Z2V0Rmlyc3QoKSB8fCAKKyAgICAgICAgICAgICAgICAgICAgICAgICh0ZXh0LT5keCgpLT5n
ZXRGaXJzdCgpICYmIHRleHQtPmR4KCktPmdldEZpcnN0KCktPnZhbHVlKCkpIHx8Ly9keCBleGlz
dHMgYW5kIGlzIG5vbi16ZXJvCisgICAgICAgICAgICAgICAgICAgICAgICAodGV4dC0+ZHkoKS0+
Z2V0Rmlyc3QoKSAmJiB0ZXh0LT5keSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpKSkpIC8vZGl0dG8g
Zm9yIGR5CisgICAgICAgIHsKKyAgICAgICAgICAgIGJveC0+c2V0WFBvcyhib3gtPnhQb3MoKSAr
IHgpOworICAgICAgICAgICAgYm94LT5zZXRZUG9zKGJveC0+eVBvcygpICsgeSk7CisgICAgICAg
ICAgICBmb3IgKElubGluZUJveCogY3VyciA9IGZsb3ctPmZpcnN0Q2hpbGQoKTsgY3VycjsgY3Vy
ciA9IGN1cnItPm5leHRPbkxpbmUoKSkgCisgICAgICAgICAgICAgICAgaWYgKCF0cmFuc2xhdGVC
b3goY3VyciwgeCwgeSwgZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludCBJbmxpbmVGbG93
Qm94OjpwbGFjZVBvc2l0aW9uZWRCb3hlc0hvcml6b250YWxseShpbnQgeCwgaW50JiBsZWZ0UG9z
aXRpb24sIGludCYgcmlnaHRQb3NpdGlvbiwgaW50ICZsZWZ0QWxpZ24sIGludCAmcmlnaHRBbGln
biwgYm9vbCYgbmVlZHNXb3JkU3BhY2luZywgaW50IHhQb3MsIGJvb2wgcG9zaXRpb25lZCkKK3sK
KyAgICAvL2ludCBzdGFydHggPSB4OworICAgIGludCBtbiA9IElOVF9NQVg7CisgICAgaW50IG14
ID0gSU5UX01JTjsKKyAgICBpbnQgYW1uID0gSU5UX01BWDsKKyAgICBpbnQgYW14ID0gSU5UX01J
TjsKKyAgICBpbnQgc3RhcnR4ID0geDsKKyAgICBib29sIHNlZW5Qb3NpdGlvbmVkRWxlbWVudCA9
IGZhbHNlOworICAgIHNldFhQb3MoeCk7CisgICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmaXJz
dENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIAorICAgIHsKKyAgICAg
ICAgaWYgKGN1cnItPm9iamVjdCgpLT5pc1RleHQoKSkgeworICAgICAgICAgICAgbW4gPSBtaW4o
bW4sIHgpOworICAgICAgICAgICAgYW1uID0gbWluKGFtbiwgeCk7CisgICAgICAgICAgICBJbmxp
bmVUZXh0Qm94KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KGN1cnIpOworICAg
ICAgICAgICAgUmVuZGVyVGV4dCogcnQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4odGV4dC0+
b2JqZWN0KCkpOworICAgICAgICAgICAgaWYgKHJ0LT5sZW5ndGgoKSkgeworICAgICAgICAgICAg
ICAgIGlmIChuZWVkc1dvcmRTcGFjaW5nICYmIERlcHJlY2F0ZWRDaGFyKHJ0LT50ZXh0KClbdGV4
dC0+c3RhcnQoKV0pLmlzU3BhY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgeCArPSBydC0+Zm9u
dChtX2ZpcnN0TGluZSktPndvcmRTcGFjaW5nKCk7CisgICAgICAgICAgICAgICAgbmVlZHNXb3Jk
U3BhY2luZyA9ICFEZXByZWNhdGVkQ2hhcihydC0+dGV4dCgpW3RleHQtPmVuZCgpXSkuaXNTcGFj
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGV4dC0+c2V0WFBvcyh4KTsKKyAgICAg
ICAgICAgIHggKz0gdGV4dC0+d2lkdGgoKTsKKyAgICAgICAgICAgIG14ID0gbWF4KG14LCB4KTsK
KyAgICAgICAgICAgIGFteCA9IG1heChhbXgsIHgpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgYXNzZXJ0KGN1cnItPm9iamVjdCgpLT5pc0lubGluZUZsb3coKSk7CisgICAgICAgICAg
ICBJbmxpbmVGbG93Qm94KiBmbG93ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KGN1cnIp
OworICAgICAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCogdGV4dCA9IHN0YXRpY19j
YXN0PFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqPihmbG93LT5vYmplY3QoKS0+ZWxlbWVudCgp
KTsKKyAgICAgICAgICAgIHggKz0gdGV4dC0+ZHgoKS0+Z2V0Rmlyc3QoKSA/IHRleHQtPmR4KCkt
PmdldEZpcnN0KCktPnZhbHVlKCkgOiAwOworICAgICAgICAgICAgaWYgKHRleHQtPngoKS0+Z2V0
Rmlyc3QoKSkKKyAgICAgICAgICAgICAgICB4ID0gdGV4dC0+eCgpLT5nZXRGaXJzdCgpLT52YWx1
ZSgpIC0geFBvczsKKyAgICAgICAgICAgIGlmICh0ZXh0LT54KCktPmdldEZpcnN0KCkgfHwgdGV4
dC0+eSgpLT5nZXRGaXJzdCgpIHx8IAorICAgICAgICAgICAgICAgICh0ZXh0LT5keCgpLT5nZXRG
aXJzdCgpICYmIHRleHQtPmR4KCktPmdldEZpcnN0KCktPnZhbHVlKCkpIHx8CisgICAgICAgICAg
ICAgICAgKHRleHQtPmR5KCktPmdldEZpcnN0KCkgJiYgdGV4dC0+ZHkoKS0+Z2V0Rmlyc3QoKS0+
dmFsdWUoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2VlblBvc2l0aW9uZWRF
bGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBuZWVkc1dvcmRTcGFjaW5nID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgaW50IGlnbm9yZVgsIGlnbm9yZVk7CisgICAgICAgICAgICAgICAg
eCA9IGZsb3ctPnBsYWNlUG9zaXRpb25lZEJveGVzSG9yaXpvbnRhbGx5KHgsIG1uLCBteCwgaWdu
b3JlWCwgaWdub3JlWSwgbmVlZHNXb3JkU3BhY2luZywgeFBvcywgdHJ1ZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmIChzZWVuUG9zaXRpb25lZEVsZW1lbnQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaW50IF9hbW4sIF9hbXg7IC8vdGhyb3cgYXdheSB0aGVz
ZSB2YWx1ZXMKKyAgICAgICAgICAgICAgICB4ID0gZmxvdy0+cGxhY2VQb3NpdGlvbmVkQm94ZXNI
b3Jpem9udGFsbHkoeCwgbW4sIG14LCBfYW1uLCBfYW14LCBuZWVkc1dvcmRTcGFjaW5nLCB4UG9z
LCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeCA9IGZsb3ctPnBsYWNlUG9zaXRpb25lZEJveGVzSG9yaXpvbnRhbGx5KHgsIG1uLCBteCwg
YW1uLCBhbXgsIG5lZWRzV29yZFNwYWNpbmcsIHhQb3MsIGZhbHNlKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBpZiAobW4gPiBteCkKKyAgICAgICAgbW4gPSBteCA9IHN0YXJ0eDsKKyAgICBpZiAo
YW1uID4gYW14KQorICAgICAgICBhbW4gPSBhbXggPSBzdGFydHg7CisgICAgCisgICAgaW50IHdp
ZHRoID0gbXggLSBtbjsKKyAgICBzZXRXaWR0aCh3aWR0aCk7CisgICAgaW50IGF3aWR0aCA9IGFt
eCAtIGFtbjsKKyAgICBpbnQgZHg9MDsKKyAgICBpZiAocG9zaXRpb25lZCkgeworICAgICAgICBz
d2l0Y2ggKG9iamVjdCgpLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT50ZXh0QW5jaG9yKCkpIAorICAg
ICAgICB7CisgICAgICAgICAgICBjYXNlIFRBX01JRERMRToKKyAgICAgICAgICAgICAgICB0cmFu
c2xhdGVCb3godGhpcywgZHggPSAtYXdpZHRoLzIsIDApOyAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUQV9FTkQ6CisgICAgICAgICAgICAgICAg
dHJhbnNsYXRlQm94KHRoaXMsIGR4ID0gLWF3aWR0aCwgMCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFRBX1NUQVJUOgorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHgpIAorICAgICAg
ICB7CisgICAgICAgICAgICB4ICs9IGR4OworICAgICAgICAgICAgbW4gKz0gZHg7CisgICAgICAg
ICAgICBteCArPSBkeDsKKyAgICAgICAgfQorICAgIH0KKyAgICBsZWZ0UG9zaXRpb24gPSBtaW4o
bGVmdFBvc2l0aW9uLCBtbik7CisgICAgcmlnaHRQb3NpdGlvbiA9IG1heChyaWdodFBvc2l0aW9u
LCBteCk7CisgICAgbGVmdEFsaWduID0gbWluKGxlZnRBbGlnbiwgYW1uKTsKKyAgICByaWdodEFs
aWduID0gbWF4KHJpZ2h0QWxpZ24sIGFteCk7CisgICAgCisgICAgcmV0dXJuIHg7Cit9CisjZW5k
aWYgLy8gU1ZHX1NVUFBPUlQKKwogaW50IElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNIb3Jpem9u
dGFsbHkoaW50IHgsIGludCYgbGVmdFBvc2l0aW9uLCBpbnQmIHJpZ2h0UG9zaXRpb24sIGJvb2wm
IG5lZWRzV29yZFNwYWNpbmcpCiB7CisjaWZkZWYgU1ZHX1NVUFBPUlQKKyAgICBpZiAobV9pc1NW
R0Zsb3cpIAorICAgIHsKKyAgICAgICAgaW50IGlnbm9yZVgsIGlnbm9yZVk7CisgICAgICAgIHgg
PSBwbGFjZVBvc2l0aW9uZWRCb3hlc0hvcml6b250YWxseSh4LCBsZWZ0UG9zaXRpb24sIHJpZ2h0
UG9zaXRpb24sIGlnbm9yZVgsIGlnbm9yZVksIG5lZWRzV29yZFNwYWNpbmcsIG9iamVjdCgpLT54
UG9zKCksIHRydWUpOworICAgICAgICBsZWZ0UG9zaXRpb24gPSBtaW4obGVmdFBvc2l0aW9uLCB4
KTsKKyAgICAgICAgcmlnaHRQb3NpdGlvbiA9IG1heChyaWdodFBvc2l0aW9uLCB4KTsKKyAgICAg
ICAgbmVlZHNXb3JkU3BhY2luZyA9IGZhbHNlOworICAgICAgICByZXR1cm4geDsKKyAgICB9Cisj
ZW5kaWYgLy8gU1ZHX1NVUFBPUlQKICAgICAvLyBTZXQgb3VyIHggcG9zaXRpb24uCiAgICAgc2V0
WFBvcyh4KTsKICAgICBsZWZ0UG9zaXRpb24gPSBtaW4oeCwgbGVmdFBvc2l0aW9uKTsKQEAgLTMw
NSwxMyArNDM5LDU5IEBAIGludCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSG9yaXpvbnRhbGwK
ICAgICByZXR1cm4geDsKIH0KIAorI2lmZGVmIFNWR19TVVBQT1JUCit2b2lkIElubGluZUZsb3dC
b3g6OnBsYWNlQm94ZXNWZXJ0aWNhbGx5V2l0aEFic0Jhc2VsaW5lKGludCYgaGVpZ2h0T2ZCbG9j
aywgaW50ICZtaW5feSwgaW50ICZtYXhfeSwgaW50ICZiYXNlbGluZSwgaW50IHlQb3MpCit7Cisg
ICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJy
LT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgaWYgKGN1cnItPmlzSW5saW5lRmxvd0JveCgpKSAK
KyAgICAgICAgeworICAgICAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCogdGV4dCA9
IHN0YXRpY19jYXN0PFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqPihjdXJyLT5vYmplY3QoKS0+
ZWxlbWVudCgpKTsKKyAgICAgICAgICAgIGJhc2VsaW5lICs9IHRleHQtPmR5KCktPmdldEZpcnN0
KCkgPyB0ZXh0LT5keSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKKyAgICAgICAgICAgIGlm
ICh0ZXh0LT55KCktPmdldEZpcnN0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
YmFzZWxpbmUgPSB0ZXh0LT55KCktPmdldEZpcnN0KCktPnZhbHVlKCkgLSB5UG9zOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KGN1cnIpLT5w
bGFjZUJveGVzVmVydGljYWxseVdpdGhBYnNCYXNlbGluZShoZWlnaHRPZkJsb2NrLCBtaW5feSwg
bWF4X3ksIGJhc2VsaW5lLCB5UG9zKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBGb250JiBm
b250ID0gY3Vyci0+b2JqZWN0KCktPmZvbnQodHJ1ZSk7CisgICAgICAgIGludCBhc2NlbnQgPSBm
b250LmFzY2VudCgpOworICAgICAgICBpbnQgcG9zaXRpb24gPSBiYXNlbGluZSAtIGFzY2VudDsK
KyAgICAgICAgaW50IGhlaWdodCA9IGFzY2VudCArIGZvbnQuZGVzY2VudCgpOworICAgICAgICBj
dXJyLT5zZXRCYXNlbGluZShhc2NlbnQpOworICAgICAgICBjdXJyLT5zZXRZUG9zKHBvc2l0aW9u
KTsKKyAgICAgICAgY3Vyci0+c2V0SGVpZ2h0KGhlaWdodCk7CisKKyAgICAgICAgaWYgKHBvc2l0
aW9uIDwgbWluX3kpIAorICAgICAgICAgICAgbWluX3kgPSBwb3NpdGlvbjsKKyAgICAgICAgaWYg
KHBvc2l0aW9uICsgaGVpZ2h0ID4gbWF4X3kpIAorICAgICAgICAgICAgbWF4X3kgPSBwb3NpdGlv
biArIGhlaWdodDsKKyAgICB9CisgICAgaWYgKGlzUm9vdElubGluZUJveCgpKSB7CisgICAgICAg
IHNldFlQb3MobWluX3kpOworICAgICAgICBzZXRIZWlnaHQobWF4X3kgLSBtaW5feSk7CisgICAg
ICAgIHNldEJhc2VsaW5lKGJhc2VsaW5lIC0gbWluX3kpOworICAgICAgICBoZWlnaHRPZkJsb2Nr
ICs9IG1heF95IC0gbWluX3k7CisgICAgfQorfQorI2VuZGlmIC8vIFNWR19TVVBQT1JUCisKIHZv
aWQgSW5saW5lRmxvd0JveDo6dmVydGljYWxseUFsaWduQm94ZXMoaW50JiBoZWlnaHRPZkJsb2Nr
KQogewogICAgIGludCBtYXhQb3NpdGlvblRvcCA9IDA7CiAgICAgaW50IG1heFBvc2l0aW9uQm90
dG9tID0gMDsKICAgICBpbnQgbWF4QXNjZW50ID0gMDsKICAgICBpbnQgbWF4RGVzY2VudCA9IDA7
Ci0KKyNpZmRlZiBTVkdfU1VQUE9SVAorICAgIGlmIChtX2lzU1ZHRmxvdykgeworICAgICAgICAv
L0Fic29sdXRlIHBvc2l0aW9ucyBpbiBTVkcgZGljdGF0ZSBwb3NpdGlvbiBvZiBiYXNlbGluZQor
ICAgICAgICAvL3NvIHdlIGRyb3AgdG8gYSBzaW1wbGVyIGxheW91dCBmdW5jdGlvbgorICAgICAg
ICBpbnQgdG9wID0gSU5UX01BWCwgYm90dG9tID0gSU5UX01JTiwgYmFzZWxpbmUgPSBoZWlnaHRP
ZkJsb2NrOworICAgICAgICBwbGFjZUJveGVzVmVydGljYWxseVdpdGhBYnNCYXNlbGluZShoZWln
aHRPZkJsb2NrLCB0b3AsIGJvdHRvbSwgYmFzZWxpbmUsIG9iamVjdCgpLT55UG9zKCkpOworICAg
ICAgICBzZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25zKHRvcCwgYm90dG9tKTsKKyAgICAgICAg
c2V0VmVydGljYWxTZWxlY3Rpb25Qb3NpdGlvbnModG9wLCBib3R0b20pOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAgICAgLy8gRmlndXJlIG91dCBpZiB3
ZSdyZSBpbiBzdHJpY3QgbW9kZS4gIE5vdGUgdGhhdCB3ZSBjYW4ndCBzaW1wbHkgdXNlICFzdHls
ZSgpLT5odG1sSGFja3MoKSwKICAgICAvLyBiZWNhdXNlIHRoYXQgd291bGQgbWF0Y2ggYWxtb3N0
IHN0cmljdCBtb2RlIGFzIHdlbGwuCiAgICAgUmVuZGVyT2JqZWN0KiBjdXJyID0gb2JqZWN0KCk7
CkluZGV4OiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDE2ODkxKQorKysgcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTQgKzMxLDEzIEBAIGNsYXNzIElubGluZUZs
b3dCb3ggOiBwdWJsaWMgSW5saW5lUnVuQm8KIHsKIHB1YmxpYzoKICAgICBJbmxpbmVGbG93Qm94
KFJlbmRlck9iamVjdCogb2JqKQotICAgIDpJbmxpbmVSdW5Cb3gob2JqKQotICAgIHsKLSAgICAg
ICAgbV9maXJzdENoaWxkID0gMDsKLSAgICAgICAgbV9sYXN0Q2hpbGQgPSAwOwotICAgICAgICBt
X2luY2x1ZGVMZWZ0RWRnZSA9IG1faW5jbHVkZVJpZ2h0RWRnZSA9IGZhbHNlOwotICAgICAgICBt
X2hhc1RleHRDaGlsZHJlbiA9IGZhbHNlOwotICAgICAgICBtX21heEhvcml6b250YWxTaGFkb3cg
PSAwOwotICAgIH0KKyAgICA6SW5saW5lUnVuQm94KG9iaiksIG1fZmlyc3RDaGlsZCgwKSwgbV9s
YXN0Q2hpbGQoMCksIAorICAgICBtX21heEhvcml6b250YWxTaGFkb3coMCksIG1faW5jbHVkZUxl
ZnRFZGdlKGZhbHNlKSwKKyAgICAgbV9pbmNsdWRlUmlnaHRFZGdlKGZhbHNlKSwgbV9oYXNUZXh0
Q2hpbGRyZW4oZmFsc2UpCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyAgICAsIG1faXNTVkdGbG93KGZh
bHNlKSAKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorICAgICB7IH0KIAogICAgIFJlbmRlckZsb3cq
IGZsb3dPYmplY3QoKTsKIApAQCAtNzYsNiArNzUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IG15LCBpbnQgbWgsIGludCBfdHgsIGludCBfdHksIGludCB3LCBpbnQg
aCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIGksIGludCBfdHgsIGludCBfdHksIGJvb2wgcGFpbnRlZENoaWxkcmVuID0gZmFsc2Up
OwogICAgIHZpcnR1YWwgdm9pZCBwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50
IF90eCwgaW50IF90eSk7CisgICAgdmlydHVhbCB2b2lkIHBhcmVudFBhaW50TWV0aG9kKFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KXsgcGFpbnQoaSwgX3R4LCBf
dHkpOyB9CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KFJlbmRlck9iamVjdDo6Tm9kZUlu
Zm8mIGksIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkpOwogCiAgICAgaW50IG1hcmdpbkJv
cmRlclBhZGRpbmdMZWZ0KCk7CkBAIC0xMDAsMTEgKzEwMCwxOCBAQCBwdWJsaWM6CiAgICAgaW50
IGdldEZsb3dTcGFjaW5nV2lkdGgoKTsKICAgICBib29sIG9uRW5kQ2hhaW4oUmVuZGVyT2JqZWN0
KiBlbmRPYmplY3QpOwogICAgIGludCBwbGFjZUJveGVzSG9yaXpvbnRhbGx5KGludCB4LCBpbnQm
IGxlZnRQb3NpdGlvbiwgaW50JiByaWdodFBvc2l0aW9uLCBib29sJiBuZWVkc1dvcmRTcGFjaW5n
KTsKKyNpZmRlZiBTVkdfU1VQUE9SVAorICAgIGludCBwbGFjZVBvc2l0aW9uZWRCb3hlc0hvcml6
b250YWxseShpbnQgeCwgaW50JiBsZWZ0UG9zaXRpb24sIGludCYgcmlnaHRQb3NpdGlvbiwgaW50
ICZsZWZ0QWxpZ24sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgJnJpZ2h0QWxpZ24sIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcsIGludCB4UG9zLCBib29sIHBv
c2l0aW9uZWQpOworI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAgICAgdm9pZCB2ZXJ0aWNhbGx5QWxp
Z25Cb3hlcyhpbnQmIGhlaWdodE9mQmxvY2spOwogICAgIHZvaWQgY29tcHV0ZUxvZ2ljYWxCb3hI
ZWlnaHRzKGludCYgbWF4UG9zaXRpb25Ub3AsIGludCYgbWF4UG9zaXRpb25Cb3R0b20sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBtYXhBc2NlbnQsIGludCYgbWF4RGVz
Y2VudCwgYm9vbCBzdHJpY3RNb2RlKTsKICAgICB2b2lkIGFkanVzdE1heEFzY2VudEFuZERlc2Nl
bnQoaW50JiBtYXhBc2NlbnQsIGludCYgbWF4RGVzY2VudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IG1heFBvc2l0aW9uVG9wLCBpbnQgbWF4UG9zaXRpb25Cb3R0b20p
OworI2lmZGVmIFNWR19TVVBQT1JUCisgICAgdm9pZCBwbGFjZUJveGVzVmVydGljYWxseVdpdGhB
YnNCYXNlbGluZShpbnQmIGhlaWdodE9mQmxvY2ssIGludCAmbWluX3ksIGludCAmbWF4X3ksIGlu
dCAmYmFzZWxpbmUsIGludCB5UG9zKTsKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAogICAgIHZvaWQg
cGxhY2VCb3hlc1ZlcnRpY2FsbHkoaW50IHksIGludCBtYXhIZWlnaHQsIGludCBtYXhBc2NlbnQs
IGJvb2wgc3RyaWN0TW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgdG9w
UG9zaXRpb24sIGludCYgYm90dG9tUG9zaXRpb24sIGludCYgc2VsZWN0aW9uVG9wLCBpbnQmIHNl
bGVjdGlvbkJvdHRvbSk7CiAgICAgdm9pZCBzaHJpbmtCb3hlc1dpdGhOb1RleHRDaGlsZHJlbihp
bnQgdG9wUG9zaXRpb24sIGludCBib3R0b21Qb3NpdGlvbik7CkBAIC0xMTgsOCArMTI1LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rp
b25TdGF0ZSgpOwogCiAgICAgdmlydHVhbCBib29sIGNhbkFjY29tbW9kYXRlRWxsaXBzaXMoYm9v
bCBsdHIsIGludCBibG9ja0VkZ2UsIGludCBlbGxpcHNpc1dpZHRoKTsKLSAgICB2aXJ0dWFsIGlu
dCBwbGFjZUVsbGlwc2lzQm94KGJvb2wgbHRyLCBpbnQgYmxvY2tFZGdlLCBpbnQgZWxsaXBzaXNX
aWR0aCwgYm9vbCYpOwotCisgICAgdmlydHVhbCBpbnQgcGxhY2VFbGxpcHNpc0JveChib29sIGx0
ciwgaW50IGJsb2NrRWRnZSwgaW50IGVsbGlwc2lzV2lkdGgsIGJvb2wmKTsgICAgCiBwcm90ZWN0
ZWQ6CiAgICAgSW5saW5lQm94KiBtX2ZpcnN0Q2hpbGQ7CiAgICAgSW5saW5lQm94KiBtX2xhc3RD
aGlsZDsKQEAgLTEyNyw2ICsxMzMsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2luY2x1ZGVM
ZWZ0RWRnZSA6IDE7CiAgICAgYm9vbCBtX2luY2x1ZGVSaWdodEVkZ2UgOiAxOwogICAgIGJvb2wg
bV9oYXNUZXh0Q2hpbGRyZW4gOiAxOworI2lmZGVmIFNWR19TVVBQT1JUCisgICAgYm9vbCBtX2lz
U1ZHRmxvdyA6IDE7CisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIH07CiAKIH0gLy9uYW1lc3BhY2UK
SW5kZXg6IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAxNjg5MSkKKysrIHJlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsNyArMjg0LDEyIEBAIHZvaWQgUmVuZGVy
SW5saW5lOjpjYWxjTWluTWF4V2lkdGgoKQogfQogCiBib29sIFJlbmRlcklubGluZTo6cmVxdWly
ZXNMYXllcigpIHsKLSAgICByZXR1cm4gaXNSb290KCkgfHwgaXNSZWxQb3NpdGlvbmVkKCkgfHwg
c3R5bGUoKS0+b3BhY2l0eSgpIDwgMS4wZjsKKyAgICByZXR1cm4gaXNSb290KCkgfHwgaXNSZWxQ
b3NpdGlvbmVkKCkgfHwKKyNpZmRlZiBTVkdfU1VQUE9SVAorICAgICAgICAoc3R5bGUoKS0+b3Bh
Y2l0eSgpIDwgMS4wZiAmJiAhZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSk7CisjZWxzZQorICAg
ICAgICBzdHlsZSgpLT5vcGFjaXR5KCkgPCAxLjBmOworI2VuZGlmIC8vIFNWR19TVVBQT1JUCiB9
CiAKIGludCBSZW5kZXJJbmxpbmU6OndpZHRoKCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10997</attachid>
            <date>2006-10-09 13:43:40 -0700</date>
            <delta_ts>2006-10-09 14:33:24 -0700</delta_ts>
            <desc>removed m_isSVGFLow, using virtual methods to perform flow layout</desc>
            <filename>newtext10.patch</filename>
            <type>text/plain</type>
            <size>56619</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2OTI4KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYyLDEx
ICsxNDYyLDE1IEBACiAJCTkzRjE5QjE2MDgyNDVFNTkwMDFFOUFCQyAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
ICovOyB9OwogCQk5M0YxOUIxNzA4MjQ1RTU5MDAxRTlBQkMgLyogbGliaWN1Y29yZS5keWxpYiBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFEMzFB
MDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovOyB9OwogCQk5M0YxOUIxODA4
MjQ1RTU5MDAxRTlBQkMgLyogbGlieHNsdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MDYzMzA3MDczMUE3NzIwMERCMUZEMSAvKiBsaWJ4
c2x0LmR5bGliICovOyB9OworCQlBNzVFOTZFMDBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElu
bGluZUJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTc1RTk2REUwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLzsgfTsKKwkJ
QTc1RTk2RTEwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RTk2REYwQUMxMzY2RjAw
RUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwICovOyB9OwogCQlBNzYzOEE4QjA5OTU4RUE1
MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTg5MDk5NThFQTUwMDA3RTE0RiAvKiBX
S0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oICovOyB9OwogCQlBNzYzOEE4QzA5OTU4RUE1MDAwN0Ux
NEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QThBMDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3Bs
YWNlbWVudE1hcEZpbHRlci5tICovOyB9OwogCQlBNzYzOEE5MjA5OTU5MkMzMDAwN0UxNEYgLyog
V0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLzsgfTsKIAkJQTc2MzhBOTcwOTk1OTY1RDAw
MDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8q
IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oICovOyB9OwogCQlBNzYzOEE5ODA5OTU5NjVE
MDAwN0UxNEYgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTk2MDk5NTk2NUQwMDA3RTE0
RiAvKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwICovOyB9OworCQlBNzcxQ0IzRTBB
RDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzcxQ0IzQzBBRDMzQ0MyMDBERjlFMjUgLyogUmVu
ZGVyU1ZHSW5saW5lLmggKi87IH07CisJCUE3NzFDQjNGMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5k
ZXJTVkdJbmxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc3MUNCM0QwQUQzM0NDMjAwREY5RTI1IC8qIFJlbmRlclNWR0lubGluZS5jcHAgKi87
IH07CiAJCUE3Qjk3Qjc3MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVy
LmNpa2VybmVsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0I5N0I2NjA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5jaWtl
cm5lbCAqLzsgfTsKIAkJQTdCOTdCNzgwOTc5QzNBMTAwMEU4RUIxIC8qIFdLQ29tcG9uZW50TWVy
Z2VGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3Qjk3QjY3MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVyLmggKi87
IH07CiAJCUE3Qjk3Qjc5MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVy
Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I5N0I2
ODA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5tICovOyB9OwpAQCAt
MTQ4NCw2ICsxNDg4LDEyIEBACiAJCUE3Qjk3Qjg1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxl
VHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3Qjk3Qjc0MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNm
ZXJGaWx0ZXIuY2lrZXJuZWwgKi87IH07CiAJCUE3Qjk3Qjg2MDk3OUMzQTEwMDBFOEVCMSAvKiBX
S1RhYmxlVHJhbnNmZXJGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3Qjk3Qjc1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNmZXJG
aWx0ZXIuaCAqLzsgfTsKIAkJQTdCOTdCODcwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFu
c2ZlckZpbHRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdCOTdCNzYwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5tICov
OyB9OworCQlBN0M1MTk0OTBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzUxOTQ3MEFDQTZB
RjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5oICovOyB9OworCQlBN0M1MTk0QTBBQ0E2QUYx
MDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDNTE5NDgwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLzsgfTsKKwkJQTdDNTFBNDYwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGlu
ZUZsb3dCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QzUxQTQ0MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi87IH07CisJ
CUE3QzUxQTQ3MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzUxQTQ1MEFDQTc0NDcw
MDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCAqLzsgfTsKKwkJQTdFMUREQkUwQUFFQ0RE
MTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTFEREJDMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5k
ZXJTVkdJbmxpbmVUZXh0LmggKi87IH07CisJCUE3RTFEREJGMEFBRUNERDEwMENBQ0QxQyAvKiBS
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3RTFEREJEMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcCAqLzsgfTsKIAkJQTgwRTZDRTQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBF
NkNCQTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmNwcCAqLzsgfTsKIAkJQTgwRTZD
RTUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQkIwQTE5ODlDQTAwN0ZC
OEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovOyB9OwogCQlBODBFNkNFNjBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0JDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmlt
aXRpdmVWYWx1ZS5oICovOyB9OwpAQCAtNDEzNCwxMSArNDE0NCwxNSBAQAogCQk5M0Y4QjMwNjBB
MzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3Jp
cHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0b3JKUy5wbTsgcGF0aCA9IC4uL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y4QjMwNzBB
MzAwRkVBMDBGNjFBQjggLyogZ2VuZXJhdGUtYmluZGluZ3MucGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5wZXJsOyBuYW1lID0gImdlbmVyYXRlLWJpbmRpbmdzLnBsIjsgcGF0aCA9ICJzY3JpcHRz
L2dlbmVyYXRlLWJpbmRpbmdzLnBsIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNG
OEIzMDgwQTMwMEZFQTAwRjYxQUI4IC8qIElETFN0cnVjdHVyZS5wbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnBlcmw7IG5hbWUgPSBJRExTdHJ1Y3R1cmUucG07IHBhdGggPSBzY3JpcHRzL0lETFN0
cnVjdHVyZS5wbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc1RTk2REUwQUMxMzY2
RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHUm9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzVFOTZERjBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSb290SW5saW5lQm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdL
RGlzcGxhY2VtZW50TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmls
dGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjM4QTkxMDk5NTkyQzMwMDA3
RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2
MzhBOTYwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzcxQ0IzQzBBRDMz
Q0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzcxQ0IzRDBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Qjk3QjY2MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0Nv
bXBvbmVudE1lcmdlRmlsdGVyLmNpa2VybmVsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXS0Nv
bXBvbmVudE1lcmdlRmlsdGVyLmNpa2VybmVsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0I5N0I2NzA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb21wb25lbnRNZXJnZUZpbHRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I5N0I2ODA5NzlDM0ExMDAwRThFQjEg
LyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpj
OyBwYXRoID0gV0tDb21wb25lbnRNZXJnZUZpbHRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNDE1Niw2ICs0MTcwLDEyIEBACiAJCUE3Qjk3Qjc0MDk3OUMzQTEwMDBFOEVCMSAv
KiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFdLVGFibGVUcmFuc2ZlckZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTdCOTdCNzUwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tUYWJsZVRyYW5zZmVyRmlsdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Qjk3Qjc2MDk3OUMzQTEwMDBFOEVC
MSAvKiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2Jq
YzsgcGF0aCA9IFdLVGFibGVUcmFuc2ZlckZpbHRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBN0M1MTk0NzBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHVFNwYW4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTE5NDgwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNW
R1RTcGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTFBNDQwQUNBNzQ0
NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHSW5saW5lRmxvd0JveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBN0M1MUE0NTBBQ0E3NDQ3MDA2RTJGQjkgLyogU1ZHSW5saW5lRmxvd0JveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdJbmxpbmVGbG93Qm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdFMUREQkMwQUFFQ0REMTAwQ0FDRDFDIC8qIFJl
bmRlclNWR0lubGluZVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU1ZHSW5saW5lVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0UxRERC
RDBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkEwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Zh
bHVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVmFs
dWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkIwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENTU0JvcmRlckltYWdlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODBFNkNCQzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZl
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1ByaW1pdGl2ZVZh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODQ2LDYgKzc4NjYsMTYgQEAK
IAkJCQlGQUUwNDE4OTA5NzU5Njk0MDAwNTQwQkUgLyogUmVuZGVyU1ZHSW1hZ2UuaCAqLywKIAkJ
CQk2NTc0M0I1MDA5NzA3NkY4MDAxRTdDRUYgLyogUmVuZGVyU1ZHVGV4dC5jcHAgKi8sCiAJCQkJ
NjU3NDNCNTEwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuaCAqLywKKwkJCQlBN0Ux
RERCQzBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5oICovLAorCQkJCUE3
RTFEREJEMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCAqLywKKwkJ
CQlBNzVFOTZERTBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5oICovLAorCQkJ
CUE3NUU5NkRGMEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmNwcCAqLywKKwkJ
CQlBN0M1MTk0NzBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLywKKwkJCQlB
N0M1MTk0ODBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwICovLAorCQkJCUE3
QzUxQTQ0MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi8sCisJCQkJQTdD
NTFBNDUwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guY3BwICovLAorCQkJCUE3
NzFDQjNDMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5kZXJTVkdJbmxpbmUuaCAqLywKKwkJCQlBNzcx
Q0IzRDBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0ga2NhbnZhczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC05NTM1LDYg
Kzk1NjUsNyBAQAogCQkJCTg1MDY1NkZFMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01NZWRpYUxpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDY1NzAwMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01TdHls
ZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTA2NTcwMjBBQUI0NzYzMDAyRDE1QzAgLyog
RE9NU3R5bGVTaGVldExpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3RTFEREJFMEFBRUNERDEw
MENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzQ3
MDZBQjBBQUNEODA5MDAyQzFENDMgLyogVGV4dERlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg1QUZBODIyMEFBRjUyOEEwMEU4NDMwNSAvKiBET01FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODVDN0Y0OTEwQUFGNzlEQzAwNDAxNEREIC8qIERPTVVJRXZlbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtOTY4MCw2ICs5NzExLDkgQEAKIAkJCQlCMjAxMTEwODBBQjc3NDA1MDBEQjBFNjggLyog
SlNTVkdBRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUzQkY0REIwQUJCNkI1NTAwODY0
N0JCIC8qIERPTU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1M0JGNEVCMEFCQjZFOTcwMDg2
NDdCQiAvKiBET01Ob2RlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTc1RTk2RTAwQUMx
MzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCBpbiBIZWFkZXJzICovLAorCQkJCUE3
QzUxOTQ5MEFDQTZBRjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTdDNTFBNDYwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg1QkNCQzEzMEFCQkE4N0QwMDM4MTE2MCAvKiBET01IVE1MRG9jdW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1ND
dXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTFFRTgxMTBBQkNBMzk2MDBB
NkFBMzMgLyogRE9NRXZlbnRFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtOTg3Myw2ICs5
OTA3LDcgQEAKIAkJCQk4NTAwNERBNjBBQ0VFQjVBMDBDNDM4RjYgLyogRE9NU1ZHRG9jdW1lbnRJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUwMDREQTcwQUNFRUI1QTAwQzQzOEY2IC8q
IERPTVNWR0VsbGlwc2VFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCQjU0
MTlGMEFDRERGRTQwMDI4MjBFQiAvKiBSZW5kZXJMaXN0Qm94LmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBNzcxQ0IzRTBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzkyRjE0MjBBRDE4NUY0MDA2OTFCRDQgLyogUmVuZGVyQ291bnRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTM5MkYxNDYwQUQxODYwQzAwNjkxQkQ0IC8qIENvdW50ZXJSZXNl
dE5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTJGMTRDMEFEMTg2MUIwMDY5MUJENCAvKiBD
b3VudGVyTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDA1OSw3ICsxMDA5NCw2IEBACiAJCQlt
YWluR3JvdXAgPSAwODY3RDY5MUZFODQwMjhGQzAyQUFDMDcgLyogV2ViS2l0ICovOwogCQkJcHJv
ZHVjdFJlZkdyb3VwID0gMDM0NzY4REZGRjM4QTUwNDExREI5QzhCIC8qIFByb2R1Y3RzICovOwog
CQkJcHJvamVjdERpclBhdGggPSAiIjsKLQkJCXByb2plY3RSb290ID0gIiI7CiAJCQl0YXJnZXRz
ID0gKAogCQkJCTkzRjE5OEE1MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlICovLAogCQkJCURE
MDQxRkJFMDlEOUREQkUwMDEwQUYyQSAvKiBEZXJpdmVkIFNvdXJjZXMgKi8sCkBAIC0xMDk1NSw2
ICsxMDk4OSw3IEBACiAJCQkJODUwNjU3MDEwQUFCNDc2MzAwMkQxNUMwIC8qIERPTVN0eWxlU2hl
ZXQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NTA2NTcwMzBBQUI0NzYzMDAyRDE1QzAgLyogRE9N
U3R5bGVTaGVldExpc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMUVCQkJENDBBQUM5Qjg3MDAx
RkU4RTIgLyogQ1NTQ2hhcnNldFJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTdFMUREQkYw
QUFFQ0REMTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODVBRkE4MjMwQUFGNTI4QTAwRTg0MzA1IC8qIERPTUV2ZW50Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODVDN0Y0OTIwQUFGNzlEQzAwNDAxNEREIC8qIERPTVVJRXZlbnQubW0gaW4gU291
cmNlcyAqLywKIAkJCQk4NUM3RjVDMDBBQUZCN0NEMDA0MDE0REQgLyogRE9NTXV0YXRpb25FdmVu
dC5tbSBpbiBTb3VyY2VzICovLApAQCAtMTEwODksNiArMTExMjQsOSBAQAogCQkJCUIyMjJGNjlD
MEFCNzcxQjgwMDIyRUZBRCAvKiBKU1NWR0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjIwMTExMDcwQUI3NzQwNTAwREIwRTY4IC8qIEpTU1ZHQUVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODUzQkY0REMwQUJCNkI1NTAwODY0N0JCIC8qIERPTU5vZGUubW0gaW4gU291cmNl
cyAqLywKKwkJCQlBNzVFOTZFMTBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBN0M1MTk0QTBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVy
U1ZHVFNwYW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTdDNTFBNDcwQUNBNzQ0NzAwNkUyRkI5
IC8qIFNWR0lubGluZUZsb3dCb3guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODVCQ0JDMTQwQUJC
QTg3RDAwMzgxMTYwIC8qIERPTUhUTUxEb2N1bWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUFB
MjFFQ0NBMEFCRjBGQkEwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE4NDE1RjlCMEFDMTBDNUQwMEY3RDBERiAvKiBLQ2FudmFzQ2xpcHBlci5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTExMTM1LDYgKzExMTczLDcgQEAKIAkJCQk4NTAwNEQ5OTBB
Q0VFQUVGMDBDNDM4RjYgLyogRE9NU1ZHRG9jdW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4
NTAwNEQ5QjBBQ0VFQUVGMDBDNDM4RjYgLyogRE9NU1ZHRWxsaXBzZUVsZW1lbnQubW0gaW4gU291
cmNlcyAqLywKIAkJCQlBQkI1NDE5RTBBQ0RERkU0MDAyODIwRUIgLyogUmVuZGVyTGlzdEJveC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBNzcxQ0IzRjBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVy
U1ZHSW5saW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTJGMTQ0MEFEMTg1RkUwMDY5MUJE
NCAvKiBSZW5kZXJDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTJGMTRBMEFEMTg2
MTMwMDY5MUJENCAvKiBDb3VudGVyUmVzZXROb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
OTJGMTUwMEFEMTg2MjMwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IGNzcy9zdmcuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9zdmcuY3NzCShyZXZpc2lvbiAx
NjkyOCkKKysrIGNzcy9zdmcuY3NzCSh3b3JraW5nIGNvcHkpCkBAIC00OSwzICs0OSw3IEBAIHN2
Zywgc3ltYm9sLCBtYXJrZXIsIHBhdHRlcm4gewogdGV4dCwgZm9yZWlnbk9iamVjdCB7CiAgICAg
ZGlzcGxheTogYmxvY2sgIWltcG9ydGFudAogfQorCit0ZXh0LCB0c3BhbiB7CisgICB3aGl0ZS1z
cGFjZTogbm93cmFwICFpbXBvcnRhbnQKK30KSW5kZXg6IGRvbS9UZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBkb20vVGV4dC5jcHAJKHJldmlzaW9uIDE2OTI4KQorKysgZG9tL1RleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUg
IlJlbmRlclNWR0lubGluZVRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNDks
NiArMTUwLDExIEBAIGJvb2wgVGV4dDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAKIAog
UmVuZGVyT2JqZWN0ICpUZXh0OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJl
bmRlclN0eWxlICpzdHlsZSkKIHsKKyNpZmRlZiBTVkdfU1VQUE9SVAorICAgIGlmKHBhcmVudE5v
ZGUoKS0+aXNTVkdFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJT
VkdJbmxpbmVUZXh0KHRoaXMsIHN0cik7CisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKKyAgICAKICAg
ICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyVGV4dCh0aGlzLCBzdHIpOwogfQogCkluZGV4OiBr
Y2FudmFzL1JlbmRlclNWR0lubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJT
VkdJbmxpbmUuY3BwCShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmUuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIg
SHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgorICogICAgICAgICAgIChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmZGVmIFNWR19T
VVBQT1JUCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lLmgiCisjaW5jbHVkZSAiU1ZHSW5saW5l
Rmxvd0JveC5oIgorI2luY2x1ZGUgIlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaCIKKyNpbmNs
dWRlICJTVkdMZW5ndGhMaXN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1JlbmRl
clNWR0lubGluZTo6UmVuZGVyU1ZHSW5saW5lKE5vZGUqIG4pIDogUmVuZGVySW5saW5lKG4pIHt9
CisgICAgCitJbmxpbmVCb3gqIFJlbmRlclNWR0lubGluZTo6Y3JlYXRlSW5saW5lQm94KGJvb2wg
bWFrZVBsYWNlSG9sZGVyQm94LCBib29sIGlzUm9vdExpbmVCb3gsIGJvb2wgaXNPbmx5UnVuKQor
eworICAgIGFzc2VydCghKCFpc1Jvb3RMaW5lQm94ICYmIChpc1JlcGxhY2VkKCkgfHwgbWFrZVBs
YWNlSG9sZGVyQm94KSkpOworICAgIGFzc2VydChpc0lubGluZUZsb3coKSk7CisgICAgSW5saW5l
Rmxvd0JveCogZmxvd0JveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkgU1ZHSW5saW5lRmxvd0JveCh0
aGlzKTsKKyAgICBpZiAoIW1fZmlyc3RMaW5lQm94KQorICAgICAgICBtX2ZpcnN0TGluZUJveCA9
IG1fbGFzdExpbmVCb3ggPSBmbG93Qm94OworICAgIGVsc2UgeworICAgICAgICBtX2xhc3RMaW5l
Qm94LT5zZXROZXh0TGluZUJveChmbG93Qm94KTsKKyAgICAgICAgZmxvd0JveC0+c2V0UHJldmlv
dXNMaW5lQm94KG1fbGFzdExpbmVCb3gpOworICAgICAgICBtX2xhc3RMaW5lQm94ID0gZmxvd0Jv
eDsKKyAgICB9CisgICAgICAgIAorICAgIHJldHVybiBmbG93Qm94OworfQorCit9CisKKyNlbmRp
ZiAvLyBTVkdfU1VQUE9SVApJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR0lubGluZS5oCShyZXZpc2lvbiAwKQorKysga2NhbnZh
cy9SZW5kZXJTVkdJbmxpbmUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4K
KyAqICAgICAgICAgICAoQykgMjAwNiBBcHBsZSBDb21wdXRlciBJbmMuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAor
ICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUmVuZGVy
U1ZHSW5saW5lX0gKKyNkZWZpbmUgUmVuZGVyU1ZHSW5saW5lX0gKKworI2lmZGVmIFNWR19TVVBQ
T1JUCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIFJlbmRlclNWR0lubGluZSA6IHB1YmxpYyBSZW5kZXJJbmxpbmUgeworcHVibGljOgorICAg
ICAgICBSZW5kZXJTVkdJbmxpbmUoTm9kZSopOworICAgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHSW5saW5lIjsgfQorICAgICAg
ICB2aXJ0dWFsIElubGluZUJveCogY3JlYXRlSW5saW5lQm94KGJvb2wgbWFrZVBsYWNlSG9sZGVy
Qm94LCBib29sIGlzUm9vdExpbmVCb3gsIGJvb2wgaXNPbmx5UnVuID0gZmFsc2UpOworICAgIH07
Cit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorI2VuZGlmIC8vICFSZW5kZXJTVkdUU3Bhbl9I
CkluZGV4OiBrY2FudmFzL1JlbmRlclNWR0lubGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtj
YW52YXMvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1Jl
bmRlclNWR0lubGluZVRleHQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56
PgorICogICAgICAgICAgIChDKSAyMDA2IEFwcGxlIENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
CisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmZGVmIFNWR19T
VVBQT1JUCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmVU
ZXh0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJLQ2FudmFz
UmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCisjaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1JlbmRl
clNWR0lubGluZVRleHQ6OlJlbmRlclNWR0lubGluZVRleHQoTm9kZSogbiwgU3RyaW5nSW1wbCog
c3RyKSAKKyAgICA6IFJlbmRlclRleHQobiwgc3RyKSB7fQorCit2b2lkIFJlbmRlclNWR0lubGlu
ZVRleHQ6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQg
dHkpCit7CisgICAgRmxvYXRSZWN0IGFic29sdXRlUmVjdCA9IGFic29sdXRlVHJhbnNmb3JtKCku
bWFwUmVjdChGbG9hdFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSkpOworICAgIHJlY3Rz
LmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUmVjdCkpOworfQorCitJbnRSZWN0IFJl
bmRlclNWR0lubGluZVRleHQ6OnNlbGVjdGlvblJlY3QoKQoreworICAgIEludFJlY3QgcmVjdCA9
IFJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3QoKTsKKyAgICByZWN0ID0gcGFyZW50KCktPmFic29s
dXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZWN0KTsKKyAgICByZXR1cm4gcmVjdDsKK30KKworfQor
CisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lVGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCShyZXZpc2lv
biAwKQorKysga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2pl
Y3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50
LmNhbnRlcmJ1cnkuYWMubno+CisgKiAgICAgICAgICAgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIg
SW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAq
LworCisjaWZuZGVmIFJlbmRlclNWR0lubGluZVRleHRfSAorI2RlZmluZSBSZW5kZXJTVkdJbmxp
bmVUZXh0X0gKKworI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJSZW5kZXJUZXh0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlbmRlclNWR0lubGluZVRleHQgOiBwdWJs
aWMgUmVuZGVyVGV4dCB7CitwdWJsaWM6CisgICAgUmVuZGVyU1ZHSW5saW5lVGV4dChOb2RlKiwg
U3RyaW5nSW1wbCopOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0
IHsgcmV0dXJuICJSZW5kZXJTVkdJbmxpbmVUZXh0IjsgfQorICAgIHZpcnR1YWwgdm9pZCBhYnNv
bHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KTsKKyAgICB2
aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdCgpOworfTsKK30KKworI2VuZGlmIC8vIFNWR19T
VVBQT1JUCisKKyNlbmRpZiAvLyAhUmVuZGVyU1ZHSW5saW5lVGV4dF9ICkluZGV4OiBrY2FudmFz
L1JlbmRlclNWR1RTcGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR1RTcGFu
LmNwcAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvUmVuZGVyU1ZHVFNwYW4uY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2po
MTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgorICogICAgICAgICAgIChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmZGVmIFNWR19TVVBQT1JUCisj
aW5jbHVkZSAiUmVuZGVyU1ZHVFNwYW4uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5n
RGV2aWNlLmgiCisjaW5jbHVkZSAiU1ZHUm9vdElubGluZUJveC5oIgorI2luY2x1ZGUgIlNWR0lu
bGluZUZsb3dCb3guaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJT
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitSZW5kZXJTVkdUU3Bhbjo6UmVuZGVyU1ZHVFNw
YW4oTm9kZSogbikgOiBSZW5kZXJTVkdJbmxpbmUobikge30KKwordm9pZCBSZW5kZXJTVkdUU3Bh
bjo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkK
K3sKKyAgICBJbmxpbmVGbG93Qm94KiBpbml0RmxvdyA9IGZpcnN0TGluZUJveCgpOworICAgIEZs
b2F0UmVjdCBib3VuZHModHggKyBpbml0Rmxvdy0+eFBvcygpLCB0eSArIGluaXRGbG93LT55UG9z
KCksIHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVj
dChhYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoYm91bmRzKSkpOworfQorCisKK30KKworI2Vu
ZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBrY2FudmFzL1JlbmRlclNWR1RTcGFuLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdUU3Bhbi5oCShyZXZpc2lvbiAwKQorKysga2NhbnZh
cy9SZW5kZXJTVkdUU3Bhbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACisvKgorICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pgor
ICogICAgICAgICAgIChDKSAyMDA2IEFwcGxlIENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisg
KiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBSZW5kZXJT
VkdUU3Bhbl9ICisjZGVmaW5lIFJlbmRlclNWR1RTcGFuX0gKKworI2lmZGVmIFNWR19TVVBQT1JU
CisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIFJlbmRlclNWR1RTcGFuIDogcHVibGljIFJlbmRlclNWR0lubGluZSB7CitwdWJsaWM6Cisg
ICAgUmVuZGVyU1ZHVFNwYW4oTm9kZSopOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVy
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdUU3BhbiI7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSk7
Cit9OworfQorCisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKKyNlbmRpZiAvLyAhUmVuZGVyU1ZHVFNw
YW5fSApJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2Fu
dmFzL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAxNjkyOCkKKysrIGtjYW52YXMvUmVuZGVy
U1ZHVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKiAgICAgICAgICAgICAgIDIwMDYg
QWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZAa2RlLm9yZz4KKyAqICAgICAgICAgICAgICAgMjAw
NiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjYsMTI0ICsyNywyNiBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQu
aCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIktDYW52YXNDbGlw
cGVyLmgiCi0jaW5jbHVkZSAiS0NhbnZhc01hc2tlci5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5k
ZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJT
VkdMZW5ndGhMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHVGV4dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJT
VkdSb290SW5saW5lQm94LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVJlbmRlclNWR1RleHQ6OlJlbmRlclNWR1RleHQoU1ZHVGV4dEVsZW1lbnQg
Km5vZGUpIAorUmVuZGVyU1ZHVGV4dDo6UmVuZGVyU1ZHVGV4dChTVkdUZXh0RWxlbWVudCogbm9k
ZSkgCiAgICAgOiBSZW5kZXJCbG9jayhub2RlKQogewogfQogCi1BZmZpbmVUcmFuc2Zvcm0gUmVu
ZGVyU1ZHVGV4dDo6dHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5lKCkKLXsKLSAgICBpbnQgb2Zmc2V0
ID0gYmFzZWxpbmVQb3NpdGlvbih0cnVlLCB0cnVlKTsKLSAgICByZXR1cm4gQWZmaW5lVHJhbnNm
b3JtKCkudHJhbnNsYXRlKDAsIC1vZmZzZXQpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gUmVuZGVy
U1ZHVGV4dDo6dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkKLXsKLSAgICBTVkdUZXh0RWxlbWVu
dCAqdGV4dCA9IHN0YXRpY19jYXN0PFNWR1RleHRFbGVtZW50Kj4oZWxlbWVudCgpKTsKLQotICAg
IFNWR0xlbmd0aCogeE9mZnNldCA9IHRleHQtPngoKS0+Z2V0Rmlyc3QoKS5nZXQoKTsKLSAgICBT
VkdMZW5ndGgqIHlPZmZzZXQgPSB0ZXh0LT55KCktPmdldEZpcnN0KCkuZ2V0KCk7Ci0KLSAgICBy
ZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKHhPZmZzZXQgPyB4T2Zmc2V0LT52YWx1
ZSgpIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlPZmZzZXQg
PyB5T2Zmc2V0LT52YWx1ZSgpIDogMCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHVGV4dDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSkKLXsKLSAgICBp
ZiAocGFpbnRJbmZvLnAtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgS1JlbmRlcmluZ0RldmljZSogZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7Ci0gICAgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQgPSBkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCk7
Ci0gICAgYm9vbCBzaG91bGRQb3BDb250ZXh0ID0gZmFsc2U7Ci0gICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHBhaW50SW5mby5wLT5zYXZlKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIE5lZWQg
dG8gc2V0IHVwIEtDYW52YXMgcmVuZGVyaW5nIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gZG9u
ZS4KLSAgICAgICAgY29udGV4dCA9IHBhaW50SW5mby5wLT5jcmVhdGVSZW5kZXJpbmdEZXZpY2VD
b250ZXh0KCk7Ci0gICAgICAgIGRldmljZS0+cHVzaENvbnRleHQoY29udGV4dCk7Ci0gICAgICAg
IHNob3VsZFBvcENvbnRleHQgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBjb250ZXh0LT5jb25j
YXRDVE0obG9jYWxUcmFuc2Zvcm0oKSk7Ci0gICAgY29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRy
YW5zZm9ybSgpLnRyYW5zbGF0ZShwYXJlbnRYLCBwYXJlbnRZKSk7Ci0gICAgY29udGV4dC0+Y29u
Y2F0Q1RNKHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpKTsKLSAgICBjb250ZXh0LT5jb25jYXRD
VE0odHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5lKCkpOwotICAgIAotICAgIEZsb2F0UmVjdCBib3Vu
ZGluZ0JveCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSk7Ci0gICAgY29uc3QgU1ZHUmVuZGVyU3R5
bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgICAgIAotICAgIGlm
IChLQ2FudmFzQ2xpcHBlciogY2xpcHBlciA9IGdldENsaXBwZXJCeUlkKGRvY3VtZW50KCksIHN2
Z1N0eWxlLT5jbGlwUGF0aCgpLnN1YnN0cmluZygxKSkpCi0gICAgICAgIGNsaXBwZXItPmFwcGx5
Q2xpcChib3VuZGluZ0JveCk7Ci0KLSAgICBpZiAoS0NhbnZhc01hc2tlciogbWFza2VyID0gZ2V0
TWFza2VyQnlJZChkb2N1bWVudCgpLCBzdmdTdHlsZS0+bWFza0VsZW1lbnQoKS5zdWJzdHJpbmco
MSkpKQotICAgICAgICBtYXNrZXItPmFwcGx5TWFzayhib3VuZGluZ0JveCk7Ci0KLSAgICBLQ2Fu
dmFzRmlsdGVyKiBmaWx0ZXIgPSBnZXRGaWx0ZXJCeUlkKGRvY3VtZW50KCksIHN2Z1N0eWxlLT5m
aWx0ZXIoKS5zdWJzdHJpbmcoMSkpOwotICAgIGlmIChmaWx0ZXIpCi0gICAgICAgIGZpbHRlci0+
cHJlcGFyZUZpbHRlcihib3VuZGluZ0JveCk7Ci0gICAgICAgIAotICAgIE93blB0cjxHcmFwaGlj
c0NvbnRleHQ+IGMoZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpLT5jcmVhdGVHcmFwaGljc0NvbnRl
eHQoKSk7Ci0gICAgUGFpbnRJbmZvIHBpID0gcGFpbnRJbmZvOwotICAgIHBpLnAgPSBjLmdldCgp
OwotICAgIHBpLnIgPSAodHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5lKCkgKiB0cmFuc2xhdGlvbkZv
ckF0dHJpYnV0ZXMoKSAqIGFic29sdXRlVHJhbnNmb3JtKCkpLmludmVydCgpLm1hcFJlY3QocGFp
bnRJbmZvLnIpOwotCi0gICAgZmxvYXQgb3BhY2l0eSA9IHN0eWxlKCktPm9wYWNpdHkoKTsKLSAg
ICBpZiAob3BhY2l0eSA8IDEuMGYpCi0gICAgICAgIC8vIEZJWE1FOiBvbmNlIFJlbmRlclNWR1Rl
eHQ6OnJlbGF0aXZlQkJveCgpIGlzIGZpeGVkLCBjbGlwcGluZyB0byB0aGUgY3VycmVudCBiYm94
IGhlcmUgd2lsbCBzYXZlIHRpbWUgd2hlbiByZW5kZXJpbmcgdGV4dCB3LyBvcGFjaXR5Ci0gICAg
ICAgIGMtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0KLSAgICBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXIgKmZpbGxQYWludFNlcnZlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBh
aW50U2VydmVyKHN0eWxlKCksIHRoaXMpOwotICAgIGlmIChmaWxsUGFpbnRTZXJ2ZXIpIHsKLSAg
ICAgICAgZmlsbFBhaW50U2VydmVyLT5zZXRQYWludGluZ1RleHQodHJ1ZSk7Ci0gICAgICAgIGlm
IChmaWxsUGFpbnRTZXJ2ZXItPnNldHVwKGNvbnRleHQsIHRoaXMsIEFQUExZX1RPX0ZJTEwpKSB7
Ci0gICAgICAgICAgICBSZW5kZXJCbG9jazo6cGFpbnQocGksIDAsIDApOwotICAgICAgICAgICAg
ZmlsbFBhaW50U2VydmVyLT50ZWFyZG93bihjb250ZXh0LCB0aGlzLCBBUFBMWV9UT19GSUxMKTsK
LSAgICAgICAgfQotICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dChmYWxz
ZSk7Ci0gICAgfQotICAgIAotICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqc3Ryb2tlUGFpbnRT
ZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKHN0eWxlKCksIHRo
aXMpOwotICAgIGlmIChzdHJva2VQYWludFNlcnZlcikgewotICAgICAgICBzdHJva2VQYWludFNl
cnZlci0+c2V0UGFpbnRpbmdUZXh0KHRydWUpOwotICAgICAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2
ZXItPnNldHVwKGNvbnRleHQsIHRoaXMsIEFQUExZX1RPX1NUUk9LRSkpIHsKLSAgICAgICAgICAg
IFJlbmRlckJsb2NrOjpwYWludChwaSwgMCwgMCk7Ci0gICAgICAgICAgICBzdHJva2VQYWludFNl
cnZlci0+dGVhcmRvd24oY29udGV4dCwgdGhpcywgQVBQTFlfVE9fU1RST0tFKTsKLSAgICAgICAg
fQotICAgICAgICBzdHJva2VQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KGZhbHNlKTsKLSAg
ICB9Ci0KLSAgICBpZiAoZmlsdGVyKQotICAgICAgICBmaWx0ZXItPmFwcGx5RmlsdGVyKGJvdW5k
aW5nQm94KTsKLQotICAgIGlmIChvcGFjaXR5IDwgMS4wZikKLSAgICAgICAgYy0+ZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKTsKLQotICAgIC8vIHJlc3RvcmUgZHJhd2luZyBzdGF0ZQotICAgIGlmICgh
c2hvdWxkUG9wQ29udGV4dCkKLSAgICAgICAgcGFpbnRJbmZvLnAtPnJlc3RvcmUoKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgZGV2aWNlLT5wb3BDb250ZXh0KCk7Ci0gICAgICAgIGRlbGV0ZSBjb250
ZXh0OwotICAgIH0KLX0KLQogdm9pZCBSZW5kZXJTVkdUZXh0Ojpjb21wdXRlQWJzb2x1dGVSZXBh
aW50UmVjdChJbnRSZWN0JiByLCBib29sIGYpCiB7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IHRyYW5zbGF0aW9uVG9wVG9CYXNlbGluZSgpICogdHJhbnNsYXRpb25Gb3JBdHRyaWJ1
dGVzKCkgKiBhYnNvbHV0ZVRyYW5zZm9ybSgpOworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zv
cm0gPSBsb2NhbFRyYW5zZm9ybSgpOwogICAgIHIgPSB0cmFuc2Zvcm0ubWFwUmVjdChyKTsKLSAg
ICAKICAgICBSZW5kZXJDb250YWluZXI6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KHIsIGYp
OworICAgIHIgPSB0cmFuc2Zvcm0uaW52ZXJ0KCkubWFwUmVjdChyKTsKIH0KIAogYm9vbCBSZW5k
ZXJTVkdUZXh0OjpyZXF1aXJlc0xheWVyKCkKQEAgLTE2MCw5ICs2MywxMiBAQCB2b2lkIFJlbmRl
clNWR1RleHQ6OmxheW91dCgpCiAgICAgYm9vbCBjaGVja0ZvclJlcGFpbnQgPSBjaGVja0ZvclJl
cGFpbnREdXJpbmdMYXlvdXQoKTsKICAgICBpZiAoY2hlY2tGb3JSZXBhaW50KQogICAgICAgICBv
bGRCb3VuZHMgPSBtX2Fic29sdXRlQm91bmRzOwotCisgICAgU1ZHVGV4dEVsZW1lbnQqIHRleHQg
PSBzdGF0aWNfY2FzdDxTVkdUZXh0RWxlbWVudCo+KGVsZW1lbnQoKSk7CisgICAgaW50IHhPZmZz
ZXQgPSB0ZXh0LT54KCktPmdldEZpcnN0KCkgPyB0ZXh0LT54KCktPmdldEZpcnN0KCktPnZhbHVl
KCkgOiAwOworICAgIGludCB5T2Zmc2V0ID0gdGV4dC0+eSgpLT5nZXRGaXJzdCgpID8gdGV4dC0+
eSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKKyAgICB0aGlzLT5zZXRQb3MoeE9mZnNldCwg
eU9mZnNldCk7CiAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwotCisgICAgCiAgICAgbV9hYnNv
bHV0ZUJvdW5kcyA9IGdldEFic29sdXRlUmVwYWludFJlY3QoKTsKIAogICAgIGJvb2wgcmVwYWlu
dGVkID0gZmFsc2U7CkBAIC0xNzIsMTEgKzc4LDI1IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5
b3V0KCkKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAKK0lubGluZUJveCogUmVuZGVy
U1ZHVGV4dDo6Y3JlYXRlSW5saW5lQm94KGJvb2wgbWFrZVBsYWNlSG9sZGVyQm94LCBib29sIGlz
Um9vdExpbmVCb3gsIGJvb2wgaXNPbmx5UnVuKQoreworICAgIGFzc2VydCghaXNJbmxpbmVGbG93
KCkpOworICAgIElubGluZUZsb3dCb3gqIGZsb3dCb3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIFNW
R1Jvb3RJbmxpbmVCb3godGhpcyk7CisgICAgCisgICAgaWYgKCFtX2ZpcnN0TGluZUJveCkKKyAg
ICAgICAgbV9maXJzdExpbmVCb3ggPSBtX2xhc3RMaW5lQm94ID0gZmxvd0JveDsKKyAgICBlbHNl
IHsKKyAgICAgICAgbV9sYXN0TGluZUJveC0+c2V0TmV4dExpbmVCb3goZmxvd0JveCk7CisgICAg
ICAgIGZsb3dCb3gtPnNldFByZXZpb3VzTGluZUJveChtX2xhc3RMaW5lQm94KTsKKyAgICAgICAg
bV9sYXN0TGluZUJveCA9IGZsb3dCb3g7CisgICAgfQorICAgIAorICAgIHJldHVybiBmbG93Qm94
OworfQorCiBib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KE5vZGVJbmZvJiBpbmZvLCBp
bnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQogewotICAgIEFmZmluZVRyYW5zZm9ybSB0b3RhbFRyYW5zZm9ybSA9IHRyYW5zbGF0aW9u
Rm9yQXR0cmlidXRlcygpOwotICAgIHRvdGFsVHJhbnNmb3JtICo9IHRyYW5zbGF0aW9uVG9wVG9C
YXNlbGluZSgpOwotICAgIHRvdGFsVHJhbnNmb3JtICo9IGFic29sdXRlVHJhbnNmb3JtKCk7Cisg
ICAgQWZmaW5lVHJhbnNmb3JtIHRvdGFsVHJhbnNmb3JtID0gYWJzb2x1dGVUcmFuc2Zvcm0oKTsK
ICAgICBkb3VibGUgbG9jYWxYLCBsb2NhbFk7CiAgICAgdG90YWxUcmFuc2Zvcm0uaW52ZXJ0KCku
bWFwKF94LCBfeSwgJmxvY2FsWCwgJmxvY2FsWSk7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpu
b2RlQXRQb2ludChpbmZvLCAoaW50KWxvY2FsWCwgKGludClsb2NhbFksIF90eCwgX3R5LCBoaXRU
ZXN0QWN0aW9uKTsKQEAgLTE4NCwxMSArMTA0LDMzIEBAIGJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9k
ZUF0UG9pbnQoTm9kZUluZm8KIAogdm9pZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVJlY3RzKFZl
Y3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQogewotICAgIEFmZmluZVRyYW5z
Zm9ybSBtYXQgPSB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKTsKLSAgICBtYXQgKj0gdHJhbnNs
YXRpb25Ub3BUb0Jhc2VsaW5lKCk7Ci0gICAgbWF0ICo9IGFic29sdXRlVHJhbnNmb3JtKCk7Cisg
ICAgSW5saW5lQm94KiBib3ggPSBtX2ZpcnN0TGluZUJveDsKKyAgICBpZiAoIWJveCkKKyAgICAg
ICAgcmV0dXJuOworICAgIEFmZmluZVRyYW5zZm9ybSBib3hUcmFuc2Zvcm0gPSBtX2ZpcnN0TGlu
ZUJveC0+b2JqZWN0KCktPmFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgRmxvYXRSZWN0IGJveFJl
Y3QgPSBGbG9hdFJlY3QoeFBvcygpICsgYm94LT54UG9zKCksIHlQb3MoKSArIGJveC0+eVBvcygp
LCBib3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpOworICAgIHJlY3RzLmFwcGVuZChlbmNsb3Np
bmdJbnRSZWN0KGJveFRyYW5zZm9ybS5tYXBSZWN0KGJveFJlY3QpKSk7Cit9CisKK3ZvaWQgUmVu
ZGVyU1ZHVGV4dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBfdHgsIGludCBfdHkp
Cit7ICAgIAorICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgp
OworICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIHBpID0gcGFpbnRJbmZvOworICAgIE93blB0
cjxHcmFwaGljc0NvbnRleHQ+IGMoZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpLT5jcmVhdGVHcmFw
aGljc0NvbnRleHQoKSk7CisgICAgcGkucCA9IGMuZ2V0KCk7CisgICAgcGkuciA9IChhYnNvbHV0
ZVRyYW5zZm9ybSgpKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5mby5yKTsKKyAgICBSZW5kZXJC
bG9jazo6cGFpbnQocGksIF90eCwgX3R5KTsKK30KIAotICAgIHJlY3RzLmFwcGVuZChlbmNsb3Np
bmdJbnRSZWN0KG1hdC5tYXBSZWN0KEZsb2F0UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkp
KSk7CitGbG9hdFJlY3QgUmVuZGVyU1ZHVGV4dDo6cmVsYXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0
cm9rZSkgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgYm91bmRzUmVjdDsKKyAgICBJbmxpbmVCb3gq
IGJveCA9IG1fZmlyc3RMaW5lQm94OworICAgIGlmIChib3gpIHsKKyAgICAgICAgYm91bmRzUmVj
dCA9IEZsb2F0UmVjdCh4UG9zKCkgKyBib3gtPnhQb3MoKSwgeVBvcygpICsgYm94LT55UG9zKCks
IGJveC0+d2lkdGgoKSwgYm94LT5oZWlnaHQoKSk7CisgICAgICAgIGJvdW5kc1JlY3QgPSBsb2Nh
bFRyYW5zZm9ybSgpLm1hcFJlY3QoYm91bmRzUmVjdCk7CisgICAgfQorICAgIHJldHVybiBib3Vu
ZHNSZWN0OwogfQogCiB9CkluZGV4OiBrY2FudmFzL1JlbmRlclNWR1RleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrY2FudmFzL1JlbmRlclNWR1RleHQuaAkocmV2aXNpb24gMTY5MjgpCisrKyBrY2FudmFz
L1JlbmRlclNWR1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMjUgKzM0LDIxIEBAIGNsYXNz
IFNWR1RleHRFbGVtZW50OwogY2xhc3MgUmVuZGVyU1ZHVGV4dCA6IHB1YmxpYyBSZW5kZXJCbG9j
awogewogcHVibGljOgotICAgIFJlbmRlclNWR1RleHQoU1ZHVGV4dEVsZW1lbnQgKm5vZGUpOwor
ICAgIFJlbmRlclNWR1RleHQoU1ZHVGV4dEVsZW1lbnQqIG5vZGUpOwogCiAgICAgdmlydHVhbCBj
b25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1RleHQiOyB9
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBpbnQgcGFy
ZW50WSk7CiAgICAgCiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRMb2Nh
bFRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9y
bSA9IHRyYW5zZm9ybTsgfQotICAgIAorICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8m
IGksIGludCBfdHgsIGludCBfdHkpOwogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChOb2Rl
SW5mbyYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwotCiAg
ICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBp
bnQgdHkpOwotCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KElu
dFJlY3QmIHIsIGJvb2wgZik7CiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgCisgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVs
YXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0cm9rZSA9IHRydWUpIGNvbnN0OworICAgIHZpcnR1YWwg
SW5saW5lQm94KiBjcmVhdGVJbmxpbmVCb3goYm9vbCBtYWtlUGxhY2VIb2xkZXJCb3gsIGJvb2wg
aXNSb290TGluZUJveCwgYm9vbCBpc09ubHlSdW4gPSBmYWxzZSk7CiAgcHJpdmF0ZToKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5lKCk7Ci0gICAgQWZmaW5lVHJh
bnNmb3JtIHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpOwogICAgIEFmZmluZVRyYW5zZm9ybSBt
X3RyYW5zZm9ybTsKICAgICBJbnRSZWN0IG1fYWJzb2x1dGVCb3VuZHM7CiB9OwpJbmRleDoga2Nh
bnZhcy9TVkdJbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1NWR0lubGlu
ZUZsb3dCb3guY3BwCShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9TVkdJbmxpbmVGbG93Qm94LmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZl
ciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgKiAgICAgICAgICAgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgorICoKKyAqLworCisKKyNpZmRlZiBTVkdfU1VQUE9SVAorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZHSW5saW5lRmxvd0JveC5oIgorI2luY2x1ZGUgIktS
ZW5kZXJpbmdEZXZpY2UuaCIKKyNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKKyNp
bmNsdWRlICJLQ2FudmFzQ2xpcHBlci5oIgorI2luY2x1ZGUgIktDYW52YXNNYXNrZXIuaCIKKyNp
bmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgorI2lu
Y2x1ZGUgIlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGhM
aXN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Zv
aWQgU1ZHSW5saW5lRmxvd0JveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50
SW5mbywgaW50IHR4LCBpbnQgdHkpIAoreworICAgIHBhaW50U1ZHSW5saW5lRmxvdyh0aGlzLCBv
YmplY3QoKSwgcGFpbnRJbmZvLCB0eCwgdHkpOworfQorCitpbnQgU1ZHSW5saW5lRmxvd0JveDo6
cGxhY2VCb3hlc0hvcml6b250YWxseShpbnQgeCwgaW50JiBsZWZ0UG9zaXRpb24sIGludCYgcmln
aHRQb3NpdGlvbiwgYm9vbCYgbmVlZHNXb3JkU3BhY2luZykKK3sKKyAgICByZXR1cm4gcGxhY2VT
VkdGbG93SG9yaXpvbnRhbGx5KHRoaXMsIHgsIGxlZnRQb3NpdGlvbiwgcmlnaHRQb3NpdGlvbiwg
bmVlZHNXb3JkU3BhY2luZyk7Cit9CisKK3ZvaWQgU1ZHSW5saW5lRmxvd0JveDo6dmVydGljYWxs
eUFsaWduQm94ZXMoaW50JiBoZWlnaHRPZkJsb2NrKQoreworICAgIHBsYWNlU1ZHRmxvd1ZlcnRp
Y2FsbHkodGhpcywgaGVpZ2h0T2ZCbG9jayk7Cit9CisKK3ZvaWQgcGFpbnRTVkdJbmxpbmVGbG93
KElubGluZUZsb3dCb3gqIGZsb3csIFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKK3sKKyAgICBpZiAocGFpbnRJ
bmZvLnAtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEtS
ZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgpOworICAgIEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KiBjb250ZXh0ID0gZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpOworICAg
IGJvb2wgc2hvdWxkUG9wQ29udGV4dCA9IGZhbHNlOworICAgIGlmIChjb250ZXh0KQorICAgICAg
ICBwYWludEluZm8ucC0+c2F2ZSgpOworICAgIGVsc2UgeworICAgICAgICAvLyBOZWVkIHRvIHNl
dCB1cCBLQ2FudmFzIHJlbmRlcmluZyBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRvbmUuCisg
ICAgICAgIGNvbnRleHQgPSBwYWludEluZm8ucC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4
dCgpOworICAgICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KGNvbnRleHQpOworICAgICAgICBzaG91
bGRQb3BDb250ZXh0ID0gdHJ1ZTsKKyAgICB9CisgICAgCisKKyAgICBjb250ZXh0LT5jb25jYXRD
VE0ob2JqZWN0LT5sb2NhbFRyYW5zZm9ybSgpKTsKKyAgICAKKyAgICBGbG9hdFJlY3QgYm91bmRp
bmdCb3godHgrZmxvdy0+eFBvcygpICwgdHkrZmxvdy0+eVBvcygpLCBmbG93LT53aWR0aCgpLCBm
bG93LT5oZWlnaHQoKSk7CisgICAgCisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxl
ID0gb2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpOworICAgIGlmIChLQ2FudmFzQ2xpcHBlciog
Y2xpcHBlciA9IGdldENsaXBwZXJCeUlkKG9iamVjdC0+ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmNs
aXBQYXRoKCkuc3Vic3RyaW5nKDEpKSkKKyAgICAgICAgY2xpcHBlci0+YXBwbHlDbGlwKGJvdW5k
aW5nQm94KTsKKyAgICAKKyAgICBpZiAoS0NhbnZhc01hc2tlciogbWFza2VyID0gZ2V0TWFza2Vy
QnlJZChvYmplY3QtPmRvY3VtZW50KCksIHN2Z1N0eWxlLT5tYXNrRWxlbWVudCgpLnN1YnN0cmlu
ZygxKSkpCisgICAgICAgIG1hc2tlci0+YXBwbHlNYXNrKGJvdW5kaW5nQm94KTsKKyAgICAKKyAg
ICBLQ2FudmFzRmlsdGVyKiBmaWx0ZXIgPSBnZXRGaWx0ZXJCeUlkKG9iamVjdC0+ZG9jdW1lbnQo
KSwgc3ZnU3R5bGUtPmZpbHRlcigpLnN1YnN0cmluZygxKSk7CisgICAgaWYgKGZpbHRlcikKKyAg
ICAgICAgZmlsdGVyLT5wcmVwYXJlRmlsdGVyKGJvdW5kaW5nQm94KTsKKyAgICAKKyAgICBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyBwaSA9IHBhaW50SW5mbzsKKyAgICBPd25QdHI8R3JhcGhpY3ND
b250ZXh0PiBjKGRldmljZS0+Y3VycmVudENvbnRleHQoKS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0
KCkpOworICAgIHBpLnAgPSBjLmdldCgpOworICAgIGlmICghZmxvdy0+aXNSb290SW5saW5lQm94
KCkpCisgICAgICAgIHBpLnIgPSAob2JqZWN0LT5sb2NhbFRyYW5zZm9ybSgpKS5pbnZlcnQoKS5t
YXBSZWN0KHBhaW50SW5mby5yKTsKKyAgICAKKyAgICBmbG9hdCBvcGFjaXR5ID0gb2JqZWN0LT5z
dHlsZSgpLT5vcGFjaXR5KCk7CisgICAgaWYgKG9wYWNpdHkgPCAxLjBmKSB7CisgICAgICAgIGMt
PmNsaXAoZW5jbG9zaW5nSW50UmVjdChib3VuZGluZ0JveCkpOworICAgICAgICBjLT5iZWdpblRy
YW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOworICAgIH0KKyAgICAKKyAgICBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXIqIGZpbGxQYWludFNlcnZlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50
U2VydmVyKG9iamVjdC0+c3R5bGUoKSwgb2JqZWN0KTsKKyAgICBpZiAoZmlsbFBhaW50U2VydmVy
KSB7CisgICAgICAgIGZpbGxQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KHRydWUpOworICAg
ICAgICBpZiAoZmlsbFBhaW50U2VydmVyLT5zZXR1cChjb250ZXh0LCBvYmplY3QsIEFQUExZX1RP
X0ZJTEwpKSB7CisgICAgICAgICAgICBmbG93LT5wYXJlbnRQYWludE1ldGhvZChwaSwgdHgsIHR5
KTsKKyAgICAgICAgICAgIGZpbGxQYWludFNlcnZlci0+dGVhcmRvd24oY29udGV4dCwgb2JqZWN0
LCBBUFBMWV9UT19GSUxMKTsKKyAgICAgICAgfQorICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNl
dFBhaW50aW5nVGV4dChmYWxzZSk7CisgICAgfQorICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciog
c3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVy
KG9iamVjdC0+c3R5bGUoKSwgb2JqZWN0KTsKKyAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsK
KyAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dCh0cnVlKTsKKyAgICAg
ICAgaWYgKHN0cm9rZVBhaW50U2VydmVyLT5zZXR1cChjb250ZXh0LCBvYmplY3QsIEFQUExZX1RP
X1NUUk9LRSkpIHsKKyAgICAgICAgICAgIGZsb3ctPnBhcmVudFBhaW50TWV0aG9kKHBpLCB0eCwg
dHkpOworICAgICAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPnRlYXJkb3duKGNvbnRleHQsIG9i
amVjdCwgQVBQTFlfVE9fU1RST0tFKTsKKyAgICAgICAgfQorICAgICAgICBzdHJva2VQYWludFNl
cnZlci0+c2V0UGFpbnRpbmdUZXh0KGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgaWYgKGZpbHRl
cikgCisgICAgICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIoYm91bmRpbmdCb3gpOworICAgIAorICAg
IGlmIChvcGFjaXR5IDwgMS4wZikKKyAgICAgICAgYy0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
KworICAgIC8vIHJlc3RvcmUgZHJhd2luZyBzdGF0ZQorICAgIGlmICghc2hvdWxkUG9wQ29udGV4
dCkKKyAgICAgICAgcGFpbnRJbmZvLnAtPnJlc3RvcmUoKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
ZGV2aWNlLT5wb3BDb250ZXh0KCk7CisgICAgICAgIGRlbGV0ZSBjb250ZXh0OworICAgIH0KK30K
Kworc3RhdGljIGJvb2wgdHJhbnNsYXRlQm94KElubGluZUJveCogYm94LCBpbnQgeCwgaW50IHks
IGJvb2wgdG9wTGV2ZWwgPSB0cnVlKQoreyAgICAKKyAgICBpZiAoYm94LT5vYmplY3QoKS0+aXNU
ZXh0KCkpIAorICAgIHsKKyAgICAgICAgYm94LT5zZXRYUG9zKGJveC0+eFBvcygpICsgeCk7Cisg
ICAgICAgIGJveC0+c2V0WVBvcyhib3gtPnlQb3MoKSArIHkpOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBJbmxpbmVGbG93Qm94KiBmbG93ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxv
d0JveCo+KGJveCk7CisgICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqIHRleHQgPSBz
dGF0aWNfY2FzdDxTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50Kj4oYm94LT5vYmplY3QoKS0+ZWxl
bWVudCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmICh0b3BMZXZlbHx8ISh0ZXh0LT54KCktPmdl
dEZpcnN0KCkgfHwgdGV4dC0+eSgpLT5nZXRGaXJzdCgpIHx8IAorICAgICAgICAgICAgICAgICAg
ICAgICAgKHRleHQtPmR4KCktPmdldEZpcnN0KCkgJiYgdGV4dC0+ZHgoKS0+Z2V0Rmlyc3QoKS0+
dmFsdWUoKSkgfHwvL2R4IGV4aXN0cyBhbmQgaXMgbm9uLXplcm8KKyAgICAgICAgICAgICAgICAg
ICAgICAgICh0ZXh0LT5keSgpLT5nZXRGaXJzdCgpICYmIHRleHQtPmR5KCktPmdldEZpcnN0KCkt
PnZhbHVlKCkpKSkgLy9kaXR0byBmb3IgZHkKKyAgICAgICAgeworICAgICAgICAgICAgYm94LT5z
ZXRYUG9zKGJveC0+eFBvcygpICsgeCk7CisgICAgICAgICAgICBib3gtPnNldFlQb3MoYm94LT55
UG9zKCkgKyB5KTsKKyAgICAgICAgICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gZmxvdy0+Zmly
c3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgpKSAKKyAgICAgICAgICAg
ICAgICBpZiAoIXRyYW5zbGF0ZUJveChjdXJyLCB4LCB5LCBmYWxzZSkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworc3RhdGljIGludCBwbGFjZVBvc2l0aW9uZWRCb3hlc0hvcml6b250YWxseShJbmxpbmVG
bG93Qm94KiBmbG93LCBpbnQgeCwgaW50JiBsZWZ0UG9zaXRpb24sIGludCYgcmlnaHRQb3NpdGlv
biwgaW50JiBsZWZ0QWxpZ24sIGludCYgcmlnaHRBbGlnbiwgYm9vbCYgbmVlZHNXb3JkU3BhY2lu
ZywgaW50IHhQb3MsIGJvb2wgcG9zaXRpb25lZCkKK3sKKyAgICAvL2ludCBzdGFydHggPSB4Owor
ICAgIGludCBtbiA9IElOVF9NQVg7CisgICAgaW50IG14ID0gSU5UX01JTjsKKyAgICBpbnQgYW1u
ID0gSU5UX01BWDsKKyAgICBpbnQgYW14ID0gSU5UX01JTjsKKyAgICBpbnQgc3RhcnR4ID0geDsK
KyAgICBib29sIHNlZW5Qb3NpdGlvbmVkRWxlbWVudCA9IGZhbHNlOworICAgIGZsb3ctPnNldFhQ
b3MoeCk7CisgICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmbG93LT5maXJzdENoaWxkKCk7IGN1
cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIAorICAgIHsKKyAgICAgICAgaWYgKGN1cnIt
Pm9iamVjdCgpLT5pc1RleHQoKSkgeworICAgICAgICAgICAgbW4gPSBtaW4obW4sIHgpOworICAg
ICAgICAgICAgYW1uID0gbWluKGFtbiwgeCk7CisgICAgICAgICAgICBJbmxpbmVUZXh0Qm94KiB0
ZXh0ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KGN1cnIpOworICAgICAgICAgICAgUmVu
ZGVyVGV4dCogcnQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4odGV4dC0+b2JqZWN0KCkpOwor
ICAgICAgICAgICAgaWYgKHJ0LT5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGlmIChuZWVk
c1dvcmRTcGFjaW5nICYmIERlcHJlY2F0ZWRDaGFyKHJ0LT50ZXh0KClbdGV4dC0+c3RhcnQoKV0p
LmlzU3BhY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgeCArPSBydC0+Zm9udChmbG93LT5pc0Zp
cnN0TGluZVN0eWxlKCkpLT53b3JkU3BhY2luZygpOworICAgICAgICAgICAgICAgIG5lZWRzV29y
ZFNwYWNpbmcgPSAhRGVwcmVjYXRlZENoYXIocnQtPnRleHQoKVt0ZXh0LT5lbmQoKV0pLmlzU3Bh
Y2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRleHQtPnNldFhQb3MoeCk7CisgICAg
ICAgICAgICB4ICs9IHRleHQtPndpZHRoKCk7CisgICAgICAgICAgICBteCA9IG1heChteCwgeCk7
CisgICAgICAgICAgICBhbXggPSBtYXgoYW14LCB4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGFzc2VydChjdXJyLT5vYmplY3QoKS0+aXNJbmxpbmVGbG93KCkpOworICAgICAgICAg
ICAgSW5saW5lRmxvd0JveCogZmxvdyA9IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihjdXJy
KTsKKyAgICAgICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqIHRleHQgPSBzdGF0aWNf
Y2FzdDxTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50Kj4oZmxvdy0+b2JqZWN0KCktPmVsZW1lbnQo
KSk7CisgICAgICAgICAgICB4ICs9IHRleHQtPmR4KCktPmdldEZpcnN0KCkgPyB0ZXh0LT5keCgp
LT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKKyAgICAgICAgICAgIGlmICh0ZXh0LT54KCktPmdl
dEZpcnN0KCkpCisgICAgICAgICAgICAgICAgeCA9IHRleHQtPngoKS0+Z2V0Rmlyc3QoKS0+dmFs
dWUoKSAtIHhQb3M7CisgICAgICAgICAgICBpZiAodGV4dC0+eCgpLT5nZXRGaXJzdCgpIHx8IHRl
eHQtPnkoKS0+Z2V0Rmlyc3QoKSB8fCAKKyAgICAgICAgICAgICAgICAodGV4dC0+ZHgoKS0+Z2V0
Rmlyc3QoKSAmJiB0ZXh0LT5keCgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpKSB8fAorICAgICAgICAg
ICAgICAgICh0ZXh0LT5keSgpLT5nZXRGaXJzdCgpICYmIHRleHQtPmR5KCktPmdldEZpcnN0KCkt
PnZhbHVlKCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNlZW5Qb3NpdGlvbmVk
RWxlbWVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgbmVlZHNXb3JkU3BhY2luZyA9IGZhbHNl
OworICAgICAgICAgICAgICAgIGludCBpZ25vcmVYLCBpZ25vcmVZOworICAgICAgICAgICAgICAg
IHggPSBwbGFjZVBvc2l0aW9uZWRCb3hlc0hvcml6b250YWxseShmbG93LCB4LCBtbiwgbXgsIGln
bm9yZVgsIGlnbm9yZVksIG5lZWRzV29yZFNwYWNpbmcsIHhQb3MsIHRydWUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoc2VlblBvc2l0aW9uZWRFbGVtZW50KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGludCBfYW1uLCBfYW14OyAvL3Rocm93IGF3YXkgdGhl
c2UgdmFsdWVzCisgICAgICAgICAgICAgICAgeCA9IHBsYWNlUG9zaXRpb25lZEJveGVzSG9yaXpv
bnRhbGx5KGZsb3csIHgsIG1uLCBteCwgX2FtbiwgX2FteCwgbmVlZHNXb3JkU3BhY2luZywgeFBv
cywgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHggPSBwbGFjZVBvc2l0aW9uZWRCb3hlc0hvcml6b250YWxseShmbG93LCB4LCBtbiwgbXgs
IGFtbiwgYW14LCBuZWVkc1dvcmRTcGFjaW5nLCB4UG9zLCBmYWxzZSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgaWYgKG1uID4gbXgpCisgICAgICAgIG1uID0gbXggPSBzdGFydHg7CisgICAgaWYg
KGFtbiA+IGFteCkKKyAgICAgICAgYW1uID0gYW14ID0gc3RhcnR4OworICAgIAorICAgIGludCB3
aWR0aCA9IG14IC0gbW47CisgICAgZmxvdy0+c2V0V2lkdGgod2lkdGgpOworICAgIGludCBhd2lk
dGggPSBhbXggLSBhbW47CisgICAgaW50IGR4PTA7CisgICAgaWYgKHBvc2l0aW9uZWQpIHsKKyAg
ICAgICAgc3dpdGNoIChmbG93LT5vYmplY3QoKS0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+dGV4dEFu
Y2hvcigpKSAKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBUQV9NSURETEU6CisgICAgICAg
ICAgICAgICAgdHJhbnNsYXRlQm94KGZsb3csIGR4ID0gLWF3aWR0aC8yLCAwKTsgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVEFfRU5EOgorICAg
ICAgICAgICAgICAgIHRyYW5zbGF0ZUJveChmbG93LCBkeCA9IC1hd2lkdGgsIDApOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUQV9TVEFSVDoKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGR4KSAKKyAgICAgICAgeworICAgICAgICAgICAgeCArPSBkeDsKKyAgICAgICAgICAgIG1uICs9
IGR4OworICAgICAgICAgICAgbXggKz0gZHg7CisgICAgICAgIH0KKyAgICB9CisgICAgbGVmdFBv
c2l0aW9uID0gbWluKGxlZnRQb3NpdGlvbiwgbW4pOworICAgIHJpZ2h0UG9zaXRpb24gPSBtYXgo
cmlnaHRQb3NpdGlvbiwgbXgpOworICAgIGxlZnRBbGlnbiA9IG1pbihsZWZ0QWxpZ24sIGFtbik7
CisgICAgcmlnaHRBbGlnbiA9IG1heChyaWdodEFsaWduLCBhbXgpOworICAgIAorICAgIHJldHVy
biB4OworfQorCitpbnQgcGxhY2VTVkdGbG93SG9yaXpvbnRhbGx5KElubGluZUZsb3dCb3gqIGZs
b3csIGludCB4LCBpbnQmIGxlZnRQb3NpdGlvbiwgaW50JiByaWdodFBvc2l0aW9uLCBib29sJiBu
ZWVkc1dvcmRTcGFjaW5nKQoreworICAgIGludCBpZ25vcmVYLCBpZ25vcmVZOworICAgIHggPSBw
bGFjZVBvc2l0aW9uZWRCb3hlc0hvcml6b250YWxseShmbG93LCB4LCBsZWZ0UG9zaXRpb24sIHJp
Z2h0UG9zaXRpb24sIGlnbm9yZVgsIGlnbm9yZVksIG5lZWRzV29yZFNwYWNpbmcsIGZsb3ctPm9i
amVjdCgpLT54UG9zKCksIHRydWUpOworICAgIGxlZnRQb3NpdGlvbiA9IG1pbihsZWZ0UG9zaXRp
b24sIHgpOworICAgIHJpZ2h0UG9zaXRpb24gPSBtYXgocmlnaHRQb3NpdGlvbiwgeCk7CisgICAg
bmVlZHNXb3JkU3BhY2luZyA9IGZhbHNlOworICAgIHJldHVybiB4OworfQorCitzdGF0aWMgdm9p
ZCBwbGFjZUJveGVzVmVydGljYWxseVdpdGhBYnNCYXNlbGluZShJbmxpbmVGbG93Qm94KiBmbG93
LCBpbnQmIGhlaWdodE9mQmxvY2ssIGludCYgbWluX3ksIGludCYgbWF4X3ksIGludCYgYmFzZWxp
bmUsIGludCB5UG9zKQoreworICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gZmxvdy0+Zmlyc3RD
aGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgpKSB7CisgICAgICAgIGlmIChj
dXJyLT5pc0lubGluZUZsb3dCb3goKSkgCisgICAgICAgIHsKKyAgICAgICAgICAgIFNWR1RleHRQ
b3NpdGlvbmluZ0VsZW1lbnQqIHRleHQgPSBzdGF0aWNfY2FzdDxTVkdUZXh0UG9zaXRpb25pbmdF
bGVtZW50Kj4oY3Vyci0+b2JqZWN0KCktPmVsZW1lbnQoKSk7CisgICAgICAgICAgICBiYXNlbGlu
ZSArPSB0ZXh0LT5keSgpLT5nZXRGaXJzdCgpID8gdGV4dC0+ZHkoKS0+Z2V0Rmlyc3QoKS0+dmFs
dWUoKSA6IDA7CisgICAgICAgICAgICBpZiAodGV4dC0+eSgpLT5nZXRGaXJzdCgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGJhc2VsaW5lID0gdGV4dC0+eSgpLT5nZXRGaXJzdCgp
LT52YWx1ZSgpIC0geVBvczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBsYWNlQm94ZXNW
ZXJ0aWNhbGx5V2l0aEFic0Jhc2VsaW5lKHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihjdXJy
KSwgaGVpZ2h0T2ZCbG9jaywgbWluX3ksIG1heF95LCBiYXNlbGluZSwgeVBvcyk7CisgICAgICAg
IH0KKyAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IGN1cnItPm9iamVjdCgpLT5mb250KHRydWUp
OworICAgICAgICBpbnQgYXNjZW50ID0gZm9udC5hc2NlbnQoKTsKKyAgICAgICAgaW50IHBvc2l0
aW9uID0gYmFzZWxpbmUgLSBhc2NlbnQ7CisgICAgICAgIGludCBoZWlnaHQgPSBhc2NlbnQgKyBm
b250LmRlc2NlbnQoKTsKKyAgICAgICAgY3Vyci0+c2V0QmFzZWxpbmUoYXNjZW50KTsKKyAgICAg
ICAgY3Vyci0+c2V0WVBvcyhwb3NpdGlvbik7CisgICAgICAgIGN1cnItPnNldEhlaWdodChoZWln
aHQpOworICAgICAgICAKKyAgICAgICAgaWYgKHBvc2l0aW9uIDwgbWluX3kpIAorICAgICAgICAg
ICAgbWluX3kgPSBwb3NpdGlvbjsKKyAgICAgICAgaWYgKHBvc2l0aW9uICsgaGVpZ2h0ID4gbWF4
X3kpIAorICAgICAgICAgICAgbWF4X3kgPSBwb3NpdGlvbiArIGhlaWdodDsKKyAgICB9CisgICAg
aWYgKGZsb3ctPmlzUm9vdElubGluZUJveCgpKSB7CisgICAgICAgIGZsb3ctPnNldFlQb3MobWlu
X3kpOworICAgICAgICBmbG93LT5zZXRIZWlnaHQobWF4X3kgLSBtaW5feSk7CisgICAgICAgIGZs
b3ctPnNldEJhc2VsaW5lKGJhc2VsaW5lIC0gbWluX3kpOworICAgICAgICBoZWlnaHRPZkJsb2Nr
ICs9IG1heF95IC0gbWluX3k7CisgICAgfQorfQorCit2b2lkIHBsYWNlU1ZHRmxvd1ZlcnRpY2Fs
bHkoSW5saW5lRmxvd0JveCogZmxvdywgaW50JiBoZWlnaHRPZkJsb2NrKQoreworICAgIGludCB0
b3AgPSBJTlRfTUFYLCBib3R0b20gPSBJTlRfTUlOLCBiYXNlbGluZSA9IGhlaWdodE9mQmxvY2s7
CisgICAgcGxhY2VCb3hlc1ZlcnRpY2FsbHlXaXRoQWJzQmFzZWxpbmUoZmxvdywgaGVpZ2h0T2ZC
bG9jaywgdG9wLCBib3R0b20sIGJhc2VsaW5lLCBmbG93LT5vYmplY3QoKS0+eVBvcygpKTsKKyAg
ICBmbG93LT5zZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25zKHRvcCwgYm90dG9tKTsKKyAgICBm
bG93LT5zZXRWZXJ0aWNhbFNlbGVjdGlvblBvc2l0aW9ucyh0b3AsIGJvdHRvbSk7Cit9CisKK30K
KyNlbmRpZiAvLyBTVkdfU1VQUE9SVApJbmRleDoga2NhbnZhcy9TVkdJbmxpbmVGbG93Qm94LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga2NhbnZhcy9TVkdJbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDApCisr
KyBrY2FudmFzL1NWR0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBA
QAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVy
eS5hYy5uej4KKyAqICAgICAgICAgICAoQykgMjAwNiBBcHBsZSBDb21wdXRlciBJbmMuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3Vp
dGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5k
ZWYgU1ZHSW5saW5lRmxvd0JveF9ICisjZGVmaW5lIFNWR0lubGluZUZsb3dCb3hfSAorCisjaWZk
ZWYgU1ZHX1NVUFBPUlQKKworI2luY2x1ZGUgIklubGluZUZsb3dCb3guaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit2b2lkIHBhaW50U1ZHSW5saW5lRmxvdyhJbmxpbmVGbG93Qm94KiBmbG93
LCBSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIAorICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IF90eCwgaW50IF90eSk7CitpbnQgcGxhY2VTVkdGbG93
SG9yaXpvbnRhbGx5KElubGluZUZsb3dCb3gqIGZsb3csIGludCB4LCBpbnQmIGxlZnRQb3NpdGlv
biwgaW50JiByaWdodFBvc2l0aW9uLCBib29sJiBuZWVkc1dvcmRTcGFjaW5nKTsKK3ZvaWQgcGxh
Y2VTVkdGbG93VmVydGljYWxseShJbmxpbmVGbG93Qm94KiBmbG93LCBpbnQmIGhlaWdodE9mQmxv
Y2spOworCitjbGFzcyBTVkdJbmxpbmVGbG93Qm94IDogcHVibGljIElubGluZUZsb3dCb3ggewor
cHVibGljOgorICAgIFNWR0lubGluZUZsb3dCb3goUmVuZGVyT2JqZWN0KiBvYmopIDogSW5saW5l
Rmxvd0JveChvYmopIHt9CisgICAgdmlydHVhbCB2b2lkIHBhcmVudFBhaW50TWV0aG9kKFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KXsgSW5saW5lRmxvd0JveDo6
cGFpbnQoaSwgX3R4LCBfdHkpOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KTsKKyAgICB2aXJ0dWFsIGludCBwbGFj
ZUJveGVzSG9yaXpvbnRhbGx5KGludCB4LCBpbnQmIGxlZnRQb3NpdGlvbiwgaW50JiByaWdodFBv
c2l0aW9uLCBib29sJiBuZWVkc1dvcmRTcGFjaW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGlj
YWxseUFsaWduQm94ZXMoaW50JiBoZWlnaHRPZkJsb2NrKTsKK307CisKK30KKworI2VuZGlmIC8v
IFNWR19TVVBQT1JUCisKKyNlbmRpZiAvLyAhU1ZHSW5saW5lRmxvd0JveF9ICkluZGV4OiBrY2Fu
dmFzL1NWR1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvU1ZHUm9vdElu
bGluZUJveC5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1NWR1Jvb3RJbmxpbmVCb3guY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIg
SHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgorICogICAgICAgICAgIChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KKyAqCisgKi8KKworCisjaWZkZWYgU1ZHX1NVUFBPUlQKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIKKyNpbmNsdWRlICJTVkdJ
bmxpbmVGbG93Qm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTVkdSb290SW5s
aW5lQm94OjpwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgcGFy
ZW50WCwgaW50IHBhcmVudFkpIAoreworICAgIHBhaW50U1ZHSW5saW5lRmxvdyh0aGlzLCBvYmpl
Y3QoKSwgcGFpbnRJbmZvLCBwYXJlbnRYLCBwYXJlbnRZKTsKK30KKworaW50IFNWR1Jvb3RJbmxp
bmVCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFsbHkoaW50IHgsIGludCYgbGVmdFBvc2l0aW9uLCBp
bnQmIHJpZ2h0UG9zaXRpb24sIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcpCit7CisgICAgcmV0dXJu
IHBsYWNlU1ZHRmxvd0hvcml6b250YWxseSh0aGlzLCB4LCBsZWZ0UG9zaXRpb24sIHJpZ2h0UG9z
aXRpb24sIG5lZWRzV29yZFNwYWNpbmcpOworfQorCit2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OnZl
cnRpY2FsbHlBbGlnbkJveGVzKGludCYgaGVpZ2h0T2ZCbG9jaykKK3sKKyAgICBwbGFjZVNWR0Zs
b3dWZXJ0aWNhbGx5KHRoaXMsIGhlaWdodE9mQmxvY2spOworfQorCit9CisjZW5kaWYgLy8gU1ZH
X1NVUFBPUlQKSW5kZXg6IGtjYW52YXMvU1ZHUm9vdElubGluZUJveC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtjYW52YXMvU1ZHUm9vdElubGluZUJveC5oCShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9TVkdS
b290SW5saW5lQm94LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgKiAg
ICAgICAgICAgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIgSW5jLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJv
c3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFNWR1Jvb3RJbmxp
bmVCb3hfSAorI2RlZmluZSBTVkdSb290SW5saW5lQm94X0gKKworI2lmZGVmIFNWR19TVVBQT1JU
CisKKyNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAg
ICAKK2NsYXNzIFNWR1Jvb3RJbmxpbmVCb3ggOiBwdWJsaWMgUm9vdElubGluZUJveCB7CitwdWJs
aWM6CisgICAgU1ZHUm9vdElubGluZUJveChSZW5kZXJPYmplY3QqIG9iaikgOiBSb290SW5saW5l
Qm94KG9iaikge30KKyAgICB2aXJ0dWFsIHZvaWQgcGFyZW50UGFpbnRNZXRob2QoUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpeyBSb290SW5saW5lQm94OjpwYWlu
dChpLCBfdHgsIF90eSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpOworICAgIHZpcnR1YWwgaW50IHBsYWNlQm94
ZXNIb3Jpem9udGFsbHkoaW50IHgsIGludCYgbGVmdFBvc2l0aW9uLCBpbnQmIHJpZ2h0UG9zaXRp
b24sIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcpOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0aWNhbGx5
QWxpZ25Cb3hlcyhpbnQmIGhlaWdodE9mQmxvY2spOworfTsKKworfQorCisjZW5kaWYgLy8gU1ZH
X1NVUFBPUlQKKworI2VuZGlmIC8vICFSb290SW5saW5lQm94X0gKSW5kZXg6IGtzdmcyL3N2Zy9T
VkdUUmVmRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50
LmNwcAkocmV2aXNpb24gMTY5MjgpCisrKyBrc3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNp
bmNsdWRlICJYTGlua05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJSZW5kZXJJbmxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTc5LDcgKzc5LDcgQEAgYm9vbCBTVkdUUmVmRWxlbWVu
dDo6Y2hpbGRTaG91bGRDcmVhdGVSZQogCiBSZW5kZXJPYmplY3QgKlNWR1RSZWZFbGVtZW50Ojpj
cmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICopCiB7Ci0gICAg
cmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlcklubGluZSh0aGlzKTsKKyAgICByZXR1cm4gbmV3IChh
cmVuYSkgUmVuZGVyU1ZHSW5saW5lKHRoaXMpOwogfQogCiAvLyB2aW06dHM9NDpub2V0CkluZGV4
OiBrc3ZnMi9zdmcvU1ZHVFNwYW5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcv
U1ZHVFNwYW5FbGVtZW50LmNwcAkocmV2aXNpb24gMTY5MjgpCisrKyBrc3ZnMi9zdmcvU1ZHVFNw
YW5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2lmZGVmIFNW
R19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHVFNwYW5FbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdUU3Bh
bi5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDcsNyArNDcsNyBAQCBib29s
IFNWR1RTcGFuRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSCiAKIFJlbmRlck9iamVjdCAqU1ZH
VFNwYW5FbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0
eWxlICopCiB7Ci0gICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlcklubGluZSh0aGlzKTsKKyAg
ICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHVFNwYW4odGhpcyk7CiB9CiAKIC8vIHZpbTp0
cz00Om5vZXQKSW5kZXg6IHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gMTY5MjgpCisrKyByZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbXksIGludCBtaCwgaW50IF90eCwgaW50IF90
eSwgaW50IHcsIGludCBoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnREZWNvcmF0aW9ucyhSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSwgYm9vbCBwYWludGVkQ2hp
bGRyZW4gPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyZW50UGFp
bnRNZXRob2QoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpeyBw
YWludChpLCBfdHgsIF90eSk7IH0KICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoUmVuZGVy
T2JqZWN0OjpOb2RlSW5mbyYgaSwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSk7CiAKICAg
ICBpbnQgbWFyZ2luQm9yZGVyUGFkZGluZ0xlZnQoKTsKQEAgLTk5LDggKzEwMCw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGRldGVybWluZVNwYWNpbmdGb3JGbG93Qm94ZXMoYm9vbCBsYXN0TGluZSwg
UmVuZGVyT2JqZWN0KiBlbmRPYmplY3QpOwogICAgIGludCBnZXRGbG93U3BhY2luZ1dpZHRoKCk7
CiAgICAgYm9vbCBvbkVuZENoYWluKFJlbmRlck9iamVjdCogZW5kT2JqZWN0KTsKLSAgICBpbnQg
cGxhY2VCb3hlc0hvcml6b250YWxseShpbnQgeCwgaW50JiBsZWZ0UG9zaXRpb24sIGludCYgcmln
aHRQb3NpdGlvbiwgYm9vbCYgbmVlZHNXb3JkU3BhY2luZyk7Ci0gICAgdm9pZCB2ZXJ0aWNhbGx5
QWxpZ25Cb3hlcyhpbnQmIGhlaWdodE9mQmxvY2spOworICAgIHZpcnR1YWwgaW50IHBsYWNlQm94
ZXNIb3Jpem9udGFsbHkoaW50IHgsIGludCYgbGVmdFBvc2l0aW9uLCBpbnQmIHJpZ2h0UG9zaXRp
b24sIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcpOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0aWNhbGx5
QWxpZ25Cb3hlcyhpbnQmIGhlaWdodE9mQmxvY2spOwogICAgIHZvaWQgY29tcHV0ZUxvZ2ljYWxC
b3hIZWlnaHRzKGludCYgbWF4UG9zaXRpb25Ub3AsIGludCYgbWF4UG9zaXRpb25Cb3R0b20sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBtYXhBc2NlbnQsIGludCYgbWF4
RGVzY2VudCwgYm9vbCBzdHJpY3RNb2RlKTsKICAgICB2b2lkIGFkanVzdE1heEFzY2VudEFuZERl
c2NlbnQoaW50JiBtYXhBc2NlbnQsIGludCYgbWF4RGVzY2VudCwKSW5kZXg6IHJlbmRlcmluZy9S
ZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
CShyZXZpc2lvbiAxNjkyOCkKKysrIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODQsNyArMjg0LDEyIEBAIHZvaWQgUmVuZGVySW5saW5lOjpjYWxjTWluTWF4
V2lkdGgoKQogfQogCiBib29sIFJlbmRlcklubGluZTo6cmVxdWlyZXNMYXllcigpIHsKLSAgICBy
ZXR1cm4gaXNSb290KCkgfHwgaXNSZWxQb3NpdGlvbmVkKCkgfHwgc3R5bGUoKS0+b3BhY2l0eSgp
IDwgMS4wZjsKKyAgICByZXR1cm4gaXNSb290KCkgfHwgaXNSZWxQb3NpdGlvbmVkKCkgfHwKKyNp
ZmRlZiBTVkdfU1VQUE9SVAorICAgICAgICAoc3R5bGUoKS0+b3BhY2l0eSgpIDwgMS4wZiAmJiAh
ZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSk7CisjZWxzZQorICAgICAgICBzdHlsZSgpLT5vcGFj
aXR5KCkgPCAxLjBmOworI2VuZGlmIC8vIFNWR19TVVBQT1JUCiB9CiAKIGludCBSZW5kZXJJbmxp
bmU6OndpZHRoKCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10998</attachid>
            <date>2006-10-09 14:33:24 -0700</date>
            <delta_ts>2006-10-09 17:22:51 -0700</delta_ts>
            <desc>yet more formatting changes</desc>
            <filename>newtext10.patch</filename>
            <type>text/plain</type>
            <size>56520</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2OTM1KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYyLDEx
ICsxNDYyLDE1IEBACiAJCTkzRjE5QjE2MDgyNDVFNTkwMDFFOUFCQyAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
ICovOyB9OwogCQk5M0YxOUIxNzA4MjQ1RTU5MDAxRTlBQkMgLyogbGliaWN1Y29yZS5keWxpYiBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFEMzFB
MDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovOyB9OwogCQk5M0YxOUIxODA4
MjQ1RTU5MDAxRTlBQkMgLyogbGlieHNsdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MDYzMzA3MDczMUE3NzIwMERCMUZEMSAvKiBsaWJ4
c2x0LmR5bGliICovOyB9OworCQlBNzVFOTZFMDBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElu
bGluZUJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTc1RTk2REUwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLzsgfTsKKwkJ
QTc1RTk2RTEwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RTk2REYwQUMxMzY2RjAw
RUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwICovOyB9OwogCQlBNzYzOEE4QjA5OTU4RUE1
MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTg5MDk5NThFQTUwMDA3RTE0RiAvKiBX
S0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oICovOyB9OwogCQlBNzYzOEE4QzA5OTU4RUE1MDAwN0Ux
NEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QThBMDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3Bs
YWNlbWVudE1hcEZpbHRlci5tICovOyB9OwogCQlBNzYzOEE5MjA5OTU5MkMzMDAwN0UxNEYgLyog
V0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLzsgfTsKIAkJQTc2MzhBOTcwOTk1OTY1RDAw
MDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8q
IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oICovOyB9OwogCQlBNzYzOEE5ODA5OTU5NjVE
MDAwN0UxNEYgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTk2MDk5NTk2NUQwMDA3RTE0
RiAvKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwICovOyB9OworCQlBNzcxQ0IzRTBB
RDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzcxQ0IzQzBBRDMzQ0MyMDBERjlFMjUgLyogUmVu
ZGVyU1ZHSW5saW5lLmggKi87IH07CisJCUE3NzFDQjNGMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5k
ZXJTVkdJbmxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc3MUNCM0QwQUQzM0NDMjAwREY5RTI1IC8qIFJlbmRlclNWR0lubGluZS5jcHAgKi87
IH07CiAJCUE3Qjk3Qjc3MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVy
LmNpa2VybmVsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0I5N0I2NjA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5jaWtl
cm5lbCAqLzsgfTsKIAkJQTdCOTdCNzgwOTc5QzNBMTAwMEU4RUIxIC8qIFdLQ29tcG9uZW50TWVy
Z2VGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3Qjk3QjY3MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVyLmggKi87
IH07CiAJCUE3Qjk3Qjc5MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVy
Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I5N0I2
ODA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5tICovOyB9OwpAQCAt
MTQ4NCw2ICsxNDg4LDEyIEBACiAJCUE3Qjk3Qjg1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxl
VHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3Qjk3Qjc0MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNm
ZXJGaWx0ZXIuY2lrZXJuZWwgKi87IH07CiAJCUE3Qjk3Qjg2MDk3OUMzQTEwMDBFOEVCMSAvKiBX
S1RhYmxlVHJhbnNmZXJGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3Qjk3Qjc1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNmZXJG
aWx0ZXIuaCAqLzsgfTsKIAkJQTdCOTdCODcwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFu
c2ZlckZpbHRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdCOTdCNzYwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5tICov
OyB9OworCQlBN0M1MTk0OTBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzUxOTQ3MEFDQTZB
RjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5oICovOyB9OworCQlBN0M1MTk0QTBBQ0E2QUYx
MDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDNTE5NDgwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLzsgfTsKKwkJQTdDNTFBNDYwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGlu
ZUZsb3dCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QzUxQTQ0MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi87IH07CisJ
CUE3QzUxQTQ3MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzUxQTQ1MEFDQTc0NDcw
MDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCAqLzsgfTsKKwkJQTdFMUREQkUwQUFFQ0RE
MTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTFEREJDMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5k
ZXJTVkdJbmxpbmVUZXh0LmggKi87IH07CisJCUE3RTFEREJGMEFBRUNERDEwMENBQ0QxQyAvKiBS
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3RTFEREJEMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcCAqLzsgfTsKIAkJQTgwRTZDRTQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBF
NkNCQTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmNwcCAqLzsgfTsKIAkJQTgwRTZD
RTUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQkIwQTE5ODlDQTAwN0ZC
OEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovOyB9OwogCQlBODBFNkNFNjBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0JDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmlt
aXRpdmVWYWx1ZS5oICovOyB9OwpAQCAtNDEzNCwxMSArNDE0NCwxNSBAQAogCQk5M0Y4QjMwNjBB
MzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3Jp
cHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0b3JKUy5wbTsgcGF0aCA9IC4uL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y4QjMwNzBB
MzAwRkVBMDBGNjFBQjggLyogZ2VuZXJhdGUtYmluZGluZ3MucGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5wZXJsOyBuYW1lID0gImdlbmVyYXRlLWJpbmRpbmdzLnBsIjsgcGF0aCA9ICJzY3JpcHRz
L2dlbmVyYXRlLWJpbmRpbmdzLnBsIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNG
OEIzMDgwQTMwMEZFQTAwRjYxQUI4IC8qIElETFN0cnVjdHVyZS5wbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnBlcmw7IG5hbWUgPSBJRExTdHJ1Y3R1cmUucG07IHBhdGggPSBzY3JpcHRzL0lETFN0
cnVjdHVyZS5wbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc1RTk2REUwQUMxMzY2
RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHUm9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzVFOTZERjBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSb290SW5saW5lQm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdL
RGlzcGxhY2VtZW50TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmls
dGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjM4QTkxMDk5NTkyQzMwMDA3
RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2
MzhBOTYwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzcxQ0IzQzBBRDMz
Q0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzcxQ0IzRDBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Qjk3QjY2MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0Nv
bXBvbmVudE1lcmdlRmlsdGVyLmNpa2VybmVsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXS0Nv
bXBvbmVudE1lcmdlRmlsdGVyLmNpa2VybmVsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0I5N0I2NzA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb21wb25lbnRNZXJnZUZpbHRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I5N0I2ODA5NzlDM0ExMDAwRThFQjEg
LyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpj
OyBwYXRoID0gV0tDb21wb25lbnRNZXJnZUZpbHRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNDE1Niw2ICs0MTcwLDEyIEBACiAJCUE3Qjk3Qjc0MDk3OUMzQTEwMDBFOEVCMSAv
KiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFdLVGFibGVUcmFuc2ZlckZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTdCOTdCNzUwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tUYWJsZVRyYW5zZmVyRmlsdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Qjk3Qjc2MDk3OUMzQTEwMDBFOEVC
MSAvKiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2Jq
YzsgcGF0aCA9IFdLVGFibGVUcmFuc2ZlckZpbHRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBN0M1MTk0NzBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHVFNwYW4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTE5NDgwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNW
R1RTcGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTFBNDQwQUNBNzQ0
NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHSW5saW5lRmxvd0JveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBN0M1MUE0NTBBQ0E3NDQ3MDA2RTJGQjkgLyogU1ZHSW5saW5lRmxvd0JveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdJbmxpbmVGbG93Qm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdFMUREQkMwQUFFQ0REMTAwQ0FDRDFDIC8qIFJl
bmRlclNWR0lubGluZVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU1ZHSW5saW5lVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0UxRERC
RDBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkEwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Zh
bHVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVmFs
dWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkIwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENTU0JvcmRlckltYWdlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODBFNkNCQzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZl
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1ByaW1pdGl2ZVZh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODQ2LDYgKzc4NjYsMTYgQEAK
IAkJCQlGQUUwNDE4OTA5NzU5Njk0MDAwNTQwQkUgLyogUmVuZGVyU1ZHSW1hZ2UuaCAqLywKIAkJ
CQk2NTc0M0I1MDA5NzA3NkY4MDAxRTdDRUYgLyogUmVuZGVyU1ZHVGV4dC5jcHAgKi8sCiAJCQkJ
NjU3NDNCNTEwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuaCAqLywKKwkJCQlBN0Ux
RERCQzBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5oICovLAorCQkJCUE3
RTFEREJEMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCAqLywKKwkJ
CQlBNzVFOTZERTBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5oICovLAorCQkJ
CUE3NUU5NkRGMEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmNwcCAqLywKKwkJ
CQlBN0M1MTk0NzBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLywKKwkJCQlB
N0M1MTk0ODBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwICovLAorCQkJCUE3
QzUxQTQ0MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi8sCisJCQkJQTdD
NTFBNDUwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guY3BwICovLAorCQkJCUE3
NzFDQjNDMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5kZXJTVkdJbmxpbmUuaCAqLywKKwkJCQlBNzcx
Q0IzRDBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0ga2NhbnZhczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC05NTM1LDYg
Kzk1NjUsNyBAQAogCQkJCTg1MDY1NkZFMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01NZWRpYUxpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDY1NzAwMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01TdHls
ZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTA2NTcwMjBBQUI0NzYzMDAyRDE1QzAgLyog
RE9NU3R5bGVTaGVldExpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3RTFEREJFMEFBRUNERDEw
MENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzQ3
MDZBQjBBQUNEODA5MDAyQzFENDMgLyogVGV4dERlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg1QUZBODIyMEFBRjUyOEEwMEU4NDMwNSAvKiBET01FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODVDN0Y0OTEwQUFGNzlEQzAwNDAxNEREIC8qIERPTVVJRXZlbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtOTY4MCw2ICs5NzExLDkgQEAKIAkJCQlCMjAxMTEwODBBQjc3NDA1MDBEQjBFNjggLyog
SlNTVkdBRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUzQkY0REIwQUJCNkI1NTAwODY0
N0JCIC8qIERPTU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1M0JGNEVCMEFCQjZFOTcwMDg2
NDdCQiAvKiBET01Ob2RlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTc1RTk2RTAwQUMx
MzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCBpbiBIZWFkZXJzICovLAorCQkJCUE3
QzUxOTQ5MEFDQTZBRjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTdDNTFBNDYwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg1QkNCQzEzMEFCQkE4N0QwMDM4MTE2MCAvKiBET01IVE1MRG9jdW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1ND
dXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTFFRTgxMTBBQkNBMzk2MDBB
NkFBMzMgLyogRE9NRXZlbnRFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtOTg3Myw2ICs5
OTA3LDcgQEAKIAkJCQk4NTAwNERBNjBBQ0VFQjVBMDBDNDM4RjYgLyogRE9NU1ZHRG9jdW1lbnRJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUwMDREQTcwQUNFRUI1QTAwQzQzOEY2IC8q
IERPTVNWR0VsbGlwc2VFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCQjU0
MTlGMEFDRERGRTQwMDI4MjBFQiAvKiBSZW5kZXJMaXN0Qm94LmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBNzcxQ0IzRTBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzkyRjE0MjBBRDE4NUY0MDA2OTFCRDQgLyogUmVuZGVyQ291bnRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTM5MkYxNDYwQUQxODYwQzAwNjkxQkQ0IC8qIENvdW50ZXJSZXNl
dE5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTJGMTRDMEFEMTg2MUIwMDY5MUJENCAvKiBD
b3VudGVyTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDA1OSw3ICsxMDA5NCw2IEBACiAJCQlt
YWluR3JvdXAgPSAwODY3RDY5MUZFODQwMjhGQzAyQUFDMDcgLyogV2ViS2l0ICovOwogCQkJcHJv
ZHVjdFJlZkdyb3VwID0gMDM0NzY4REZGRjM4QTUwNDExREI5QzhCIC8qIFByb2R1Y3RzICovOwog
CQkJcHJvamVjdERpclBhdGggPSAiIjsKLQkJCXByb2plY3RSb290ID0gIiI7CiAJCQl0YXJnZXRz
ID0gKAogCQkJCTkzRjE5OEE1MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlICovLAogCQkJCURE
MDQxRkJFMDlEOUREQkUwMDEwQUYyQSAvKiBEZXJpdmVkIFNvdXJjZXMgKi8sCkBAIC0xMDk1NSw2
ICsxMDk4OSw3IEBACiAJCQkJODUwNjU3MDEwQUFCNDc2MzAwMkQxNUMwIC8qIERPTVN0eWxlU2hl
ZXQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NTA2NTcwMzBBQUI0NzYzMDAyRDE1QzAgLyogRE9N
U3R5bGVTaGVldExpc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMUVCQkJENDBBQUM5Qjg3MDAx
RkU4RTIgLyogQ1NTQ2hhcnNldFJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTdFMUREQkYw
QUFFQ0REMTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODVBRkE4MjMwQUFGNTI4QTAwRTg0MzA1IC8qIERPTUV2ZW50Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODVDN0Y0OTIwQUFGNzlEQzAwNDAxNEREIC8qIERPTVVJRXZlbnQubW0gaW4gU291
cmNlcyAqLywKIAkJCQk4NUM3RjVDMDBBQUZCN0NEMDA0MDE0REQgLyogRE9NTXV0YXRpb25FdmVu
dC5tbSBpbiBTb3VyY2VzICovLApAQCAtMTEwODksNiArMTExMjQsOSBAQAogCQkJCUIyMjJGNjlD
MEFCNzcxQjgwMDIyRUZBRCAvKiBKU1NWR0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjIwMTExMDcwQUI3NzQwNTAwREIwRTY4IC8qIEpTU1ZHQUVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODUzQkY0REMwQUJCNkI1NTAwODY0N0JCIC8qIERPTU5vZGUubW0gaW4gU291cmNl
cyAqLywKKwkJCQlBNzVFOTZFMTBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBN0M1MTk0QTBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVy
U1ZHVFNwYW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTdDNTFBNDcwQUNBNzQ0NzAwNkUyRkI5
IC8qIFNWR0lubGluZUZsb3dCb3guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODVCQ0JDMTQwQUJC
QTg3RDAwMzgxMTYwIC8qIERPTUhUTUxEb2N1bWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUFB
MjFFQ0NBMEFCRjBGQkEwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE4NDE1RjlCMEFDMTBDNUQwMEY3RDBERiAvKiBLQ2FudmFzQ2xpcHBlci5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTExMTM1LDYgKzExMTczLDcgQEAKIAkJCQk4NTAwNEQ5OTBB
Q0VFQUVGMDBDNDM4RjYgLyogRE9NU1ZHRG9jdW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4
NTAwNEQ5QjBBQ0VFQUVGMDBDNDM4RjYgLyogRE9NU1ZHRWxsaXBzZUVsZW1lbnQubW0gaW4gU291
cmNlcyAqLywKIAkJCQlBQkI1NDE5RTBBQ0RERkU0MDAyODIwRUIgLyogUmVuZGVyTGlzdEJveC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBNzcxQ0IzRjBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVy
U1ZHSW5saW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTJGMTQ0MEFEMTg1RkUwMDY5MUJE
NCAvKiBSZW5kZXJDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTJGMTRBMEFEMTg2
MTMwMDY5MUJENCAvKiBDb3VudGVyUmVzZXROb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
OTJGMTUwMEFEMTg2MjMwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IGNzcy9zdmcuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9zdmcuY3NzCShyZXZpc2lvbiAx
NjkzNSkKKysrIGNzcy9zdmcuY3NzCSh3b3JraW5nIGNvcHkpCkBAIC00OSwzICs0OSw3IEBAIHN2
Zywgc3ltYm9sLCBtYXJrZXIsIHBhdHRlcm4gewogdGV4dCwgZm9yZWlnbk9iamVjdCB7CiAgICAg
ZGlzcGxheTogYmxvY2sgIWltcG9ydGFudAogfQorCit0ZXh0LCB0c3BhbiB7CisgICB3aGl0ZS1z
cGFjZTogbm93cmFwICFpbXBvcnRhbnQKK30KSW5kZXg6IGRvbS9UZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBkb20vVGV4dC5jcHAJKHJldmlzaW9uIDE2OTM1KQorKysgZG9tL1RleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUg
IlJlbmRlclNWR0lubGluZVRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNDks
NiArMTUwLDExIEBAIGJvb2wgVGV4dDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAKIAog
UmVuZGVyT2JqZWN0ICpUZXh0OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJl
bmRlclN0eWxlICpzdHlsZSkKIHsKKyNpZmRlZiBTVkdfU1VQUE9SVAorICAgIGlmIChwYXJlbnRO
b2RlKCktPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVy
U1ZHSW5saW5lVGV4dCh0aGlzLCBzdHIpOworI2VuZGlmIC8vIFNWR19TVVBQT1JUCisgICAgCiAg
ICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclRleHQodGhpcywgc3RyKTsKIH0KIApJbmRleDog
a2NhbnZhcy9SZW5kZXJTVkdJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVy
U1ZHSW5saW5lLmNwcAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVy
IEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4KKyAqICAgICAgICAgICAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZmRlZiBTVkdf
U1VQUE9SVAorI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5oIgorI2luY2x1ZGUgIlNWR0lubGlu
ZUZsb3dCb3guaCIKKyNpbmNsdWRlICJTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgiCisjaW5j
bHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitSZW5k
ZXJTVkdJbmxpbmU6OlJlbmRlclNWR0lubGluZShOb2RlKiBuKSA6IFJlbmRlcklubGluZShuKSB7
fQorICAgIAorSW5saW5lQm94KiBSZW5kZXJTVkdJbmxpbmU6OmNyZWF0ZUlubGluZUJveChib29s
IG1ha2VQbGFjZUhvbGRlckJveCwgYm9vbCBpc1Jvb3RMaW5lQm94LCBib29sIGlzT25seVJ1bikK
K3sKKyAgICBhc3NlcnQoISghaXNSb290TGluZUJveCAmJiAoaXNSZXBsYWNlZCgpIHx8IG1ha2VQ
bGFjZUhvbGRlckJveCkpKTsKKyAgICBhc3NlcnQoaXNJbmxpbmVGbG93KCkpOworICAgIElubGlu
ZUZsb3dCb3gqIGZsb3dCb3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIFNWR0lubGluZUZsb3dCb3go
dGhpcyk7CisgICAgaWYgKCFtX2ZpcnN0TGluZUJveCkKKyAgICAgICAgbV9maXJzdExpbmVCb3gg
PSBtX2xhc3RMaW5lQm94ID0gZmxvd0JveDsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9sYXN0TGlu
ZUJveC0+c2V0TmV4dExpbmVCb3goZmxvd0JveCk7CisgICAgICAgIGZsb3dCb3gtPnNldFByZXZp
b3VzTGluZUJveChtX2xhc3RMaW5lQm94KTsKKyAgICAgICAgbV9sYXN0TGluZUJveCA9IGZsb3dC
b3g7CisgICAgfQorICAgICAgICAKKyAgICByZXR1cm4gZmxvd0JveDsKK30KKworfQorCisjZW5k
aWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmUuaAkocmV2aXNpb24gMCkKKysrIGtjYW52
YXMvUmVuZGVyU1ZHSW5saW5lLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisg
KiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+
CisgKiAgICAgICAgICAgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIgSW5jLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwK
KyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRl
clNWR0lubGluZV9ICisjZGVmaW5lIFJlbmRlclNWR0lubGluZV9ICisKKyNpZmRlZiBTVkdfU1VQ
UE9SVAorI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBSZW5kZXJTVkdJbmxpbmUgOiBwdWJsaWMgUmVuZGVySW5saW5lIHsKK3B1YmxpYzoKKyAg
ICAgICAgUmVuZGVyU1ZHSW5saW5lKE5vZGUqKTsKKyAgICAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR0lubGluZSI7IH0KKyAgICAg
ICAgdmlydHVhbCBJbmxpbmVCb3gqIGNyZWF0ZUlubGluZUJveChib29sIG1ha2VQbGFjZUhvbGRl
ckJveCwgYm9vbCBpc1Jvb3RMaW5lQm94LCBib29sIGlzT25seVJ1biA9IGZhbHNlKTsKKyAgICB9
OworfQorCisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKKyNlbmRpZiAvLyAhUmVuZGVyU1ZHVFNwYW5f
SApJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
Y2FudmFzL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9S
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAorLyoK
KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5u
ej4KKyAqICAgICAgICAgICAoQykgMjAwNiBBcHBsZSBDb21wdXRlciBJbmMuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMw
LAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZmRlZiBTVkdf
U1VQUE9SVAorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5l
VGV4dC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiS0NhbnZh
c1JlbmRlcmluZ1N0eWxlLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgorI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitSZW5k
ZXJTVkdJbmxpbmVUZXh0OjpSZW5kZXJTVkdJbmxpbmVUZXh0KE5vZGUqIG4sIFN0cmluZ0ltcGwq
IHN0cikgCisgICAgOiBSZW5kZXJUZXh0KG4sIHN0cikge30KKwordm9pZCBSZW5kZXJTVkdJbmxp
bmVUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50
IHR5KQoreworICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybSgp
Lm1hcFJlY3QoRmxvYXRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKKyAgICByZWN0
cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVJlY3QpKTsKK30KKworSW50UmVjdCBS
ZW5kZXJTVkdJbmxpbmVUZXh0OjpzZWxlY3Rpb25SZWN0KCkKK3sKKyAgICBJbnRSZWN0IHJlY3Qg
PSBSZW5kZXJUZXh0OjpzZWxlY3Rpb25SZWN0KCk7CisgICAgcmVjdCA9IHBhcmVudCgpLT5hYnNv
bHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QocmVjdCk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK30K
KworI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBrY2FudmFzL1JlbmRlclNWR0lubGluZVRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR0lubGluZVRleHQuaAkocmV2aXNp
b24gMCkKKysrIGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9q
ZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVu
dC5jYW50ZXJidXJ5LmFjLm56PgorICogICAgICAgICAgIChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
IEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisg
Ki8KKworI2lmbmRlZiBSZW5kZXJTVkdJbmxpbmVUZXh0X0gKKyNkZWZpbmUgUmVuZGVyU1ZHSW5s
aW5lVGV4dF9ICisKKyNpZmRlZiBTVkdfU1VQUE9SVAorCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBSZW5kZXJTVkdJbmxpbmVUZXh0IDogcHVi
bGljIFJlbmRlclRleHQgeworcHVibGljOgorICAgIFJlbmRlclNWR0lubGluZVRleHQoTm9kZSos
IFN0cmluZ0ltcGwqKTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25z
dCB7IHJldHVybiAiUmVuZGVyU1ZHSW5saW5lVGV4dCI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWJz
b2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSk7CisgICAg
dmlydHVhbCBJbnRSZWN0IHNlbGVjdGlvblJlY3QoKTsKK307Cit9CisKKyNlbmRpZiAvLyBTVkdf
U1VQUE9SVAorCisjZW5kaWYgLy8gIVJlbmRlclNWR0lubGluZVRleHRfSApJbmRleDoga2NhbnZh
cy9SZW5kZXJTVkdUU3Bhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdUU3Bh
bi5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1JlbmRlclNWR1RTcGFuLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9q
aDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4KKyAqICAgICAgICAgICAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBV
U0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZmRlZiBTVkdfU1VQUE9SVAor
I2luY2x1ZGUgIlJlbmRlclNWR1RTcGFuLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCisjaW5jbHVkZSAiS1JlbmRlcmlu
Z0RldmljZS5oIgorI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIKKyNpbmNsdWRlICJTVkdJ
bmxpbmVGbG93Qm94LmgiCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAi
U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aExpc3QuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorUmVuZGVyU1ZHVFNwYW46OlJlbmRlclNWR1RT
cGFuKE5vZGUqIG4pIDogUmVuZGVyU1ZHSW5saW5lKG4pIHt9CisKK3ZvaWQgUmVuZGVyU1ZHVFNw
YW46OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkp
Cit7CisgICAgSW5saW5lRmxvd0JveCogaW5pdEZsb3cgPSBmaXJzdExpbmVCb3goKTsKKyAgICBG
bG9hdFJlY3QgYm91bmRzKHR4ICsgaW5pdEZsb3ctPnhQb3MoKSwgdHkgKyBpbml0Rmxvdy0+eVBv
cygpLCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJl
Y3QoYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGJvdW5kcykpKTsKK30KKworCit9CisKKyNl
bmRpZiAvLyBTVkdfU1VQUE9SVApJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdUU3Bhbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHVFNwYW4uaAkocmV2aXNpb24gMCkKKysrIGtjYW52
YXMvUmVuZGVyU1ZHVFNwYW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4K
KyAqICAgICAgICAgICAoQykgMjAwNiBBcHBsZSBDb21wdXRlciBJbmMuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAor
ICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUmVuZGVy
U1ZHVFNwYW5fSAorI2RlZmluZSBSZW5kZXJTVkdUU3Bhbl9ICisKKyNpZmRlZiBTVkdfU1VQUE9S
VAorI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBSZW5kZXJTVkdUU3BhbiA6IHB1YmxpYyBSZW5kZXJTVkdJbmxpbmUgeworcHVibGljOgor
ICAgIFJlbmRlclNWR1RTcGFuKE5vZGUqKTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRl
ck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHVFNwYW4iOyB9CisgICAgdmlydHVhbCB2
b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkp
OworfTsKK30KKworI2VuZGlmIC8vIFNWR19TVVBQT1JUCisjZW5kaWYgLy8gIVJlbmRlclNWR1RT
cGFuX0gKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2Nh
bnZhcy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNpb24gMTY5MzUpCisrKyBrY2FudmFzL1JlbmRl
clNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICogICAgICAgICAgICAgICAyMDA2
IEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5vcmc+CisgKiAgICAgICAgICAgICAgIDIw
MDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI2LDEyNCArMjcsMjYgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0
LmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJLQ2FudmFzQ2xp
cHBlci5oIgotI2luY2x1ZGUgIktDYW52YXNNYXNrZXIuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVu
ZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAi
U1ZHTGVuZ3RoTGlzdC5oIgogI2luY2x1ZGUgIlNWR1RleHRFbGVtZW50LmgiCisjaW5jbHVkZSAi
U1ZHUm9vdElubGluZUJveC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1SZW5kZXJTVkdUZXh0OjpSZW5kZXJTVkdUZXh0KFNWR1RleHRFbGVtZW50
ICpub2RlKSAKK1JlbmRlclNWR1RleHQ6OlJlbmRlclNWR1RleHQoU1ZHVGV4dEVsZW1lbnQqIG5v
ZGUpIAogICAgIDogUmVuZGVyQmxvY2sobm9kZSkKIHsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIFJl
bmRlclNWR1RleHQ6OnRyYW5zbGF0aW9uVG9wVG9CYXNlbGluZSgpCi17Ci0gICAgaW50IG9mZnNl
dCA9IGJhc2VsaW5lUG9zaXRpb24odHJ1ZSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIEFmZmluZVRyYW5z
Zm9ybSgpLnRyYW5zbGF0ZSgwLCAtb2Zmc2V0KTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIFJlbmRl
clNWR1RleHQ6OnRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpCi17Ci0gICAgU1ZHVGV4dEVsZW1l
bnQgKnRleHQgPSBzdGF0aWNfY2FzdDxTVkdUZXh0RWxlbWVudCo+KGVsZW1lbnQoKSk7Ci0KLSAg
ICBTVkdMZW5ndGgqIHhPZmZzZXQgPSB0ZXh0LT54KCktPmdldEZpcnN0KCkuZ2V0KCk7Ci0gICAg
U1ZHTGVuZ3RoKiB5T2Zmc2V0ID0gdGV4dC0+eSgpLT5nZXRGaXJzdCgpLmdldCgpOwotCi0gICAg
cmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZSh4T2Zmc2V0ID8geE9mZnNldC0+dmFs
dWUoKSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5T2Zmc2V0
ID8geU9mZnNldC0+dmFsdWUoKSA6IDApOwotfQotCi12b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpCi17Ci0gICAg
aWYgKHBhaW50SW5mby5wLT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgpOwotICAgIEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0ID0gZGV2aWNlLT5jdXJyZW50Q29udGV4dCgp
OwotICAgIGJvb2wgc2hvdWxkUG9wQ29udGV4dCA9IGZhbHNlOwotICAgIGlmIChjb250ZXh0KQot
ICAgICAgICBwYWludEluZm8ucC0+c2F2ZSgpOwotICAgIGVsc2UgewotICAgICAgICAvLyBOZWVk
IHRvIHNldCB1cCBLQ2FudmFzIHJlbmRlcmluZyBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRv
bmUuCi0gICAgICAgIGNvbnRleHQgPSBwYWludEluZm8ucC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNl
Q29udGV4dCgpOwotICAgICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KGNvbnRleHQpOwotICAgICAg
ICBzaG91bGRQb3BDb250ZXh0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgY29udGV4dC0+Y29u
Y2F0Q1RNKGxvY2FsVHJhbnNmb3JtKCkpOwotICAgIGNvbnRleHQtPmNvbmNhdENUTShBZmZpbmVU
cmFuc2Zvcm0oKS50cmFuc2xhdGUocGFyZW50WCwgcGFyZW50WSkpOwotICAgIGNvbnRleHQtPmNv
bmNhdENUTSh0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKSk7Ci0gICAgY29udGV4dC0+Y29uY2F0
Q1RNKHRyYW5zbGF0aW9uVG9wVG9CYXNlbGluZSgpKTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYm91
bmRpbmdCb3goMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpOwotICAgIGNvbnN0IFNWR1JlbmRlclN0
eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgICAgICAgICAKLSAgICBp
ZiAoS0NhbnZhc0NsaXBwZXIqIGNsaXBwZXIgPSBnZXRDbGlwcGVyQnlJZChkb2N1bWVudCgpLCBz
dmdTdHlsZS0+Y2xpcFBhdGgoKS5zdWJzdHJpbmcoMSkpKQotICAgICAgICBjbGlwcGVyLT5hcHBs
eUNsaXAoYm91bmRpbmdCb3gpOwotCi0gICAgaWYgKEtDYW52YXNNYXNrZXIqIG1hc2tlciA9IGdl
dE1hc2tlckJ5SWQoZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPm1hc2tFbGVtZW50KCkuc3Vic3RyaW5n
KDEpKSkKLSAgICAgICAgbWFza2VyLT5hcHBseU1hc2soYm91bmRpbmdCb3gpOwotCi0gICAgS0Nh
bnZhc0ZpbHRlciogZmlsdGVyID0gZ2V0RmlsdGVyQnlJZChkb2N1bWVudCgpLCBzdmdTdHlsZS0+
ZmlsdGVyKCkuc3Vic3RyaW5nKDEpKTsKLSAgICBpZiAoZmlsdGVyKQotICAgICAgICBmaWx0ZXIt
PnByZXBhcmVGaWx0ZXIoYm91bmRpbmdCb3gpOwotICAgICAgICAKLSAgICBPd25QdHI8R3JhcGhp
Y3NDb250ZXh0PiBjKGRldmljZS0+Y3VycmVudENvbnRleHQoKS0+Y3JlYXRlR3JhcGhpY3NDb250
ZXh0KCkpOwotICAgIFBhaW50SW5mbyBwaSA9IHBhaW50SW5mbzsKLSAgICBwaS5wID0gYy5nZXQo
KTsKLSAgICBwaS5yID0gKHRyYW5zbGF0aW9uVG9wVG9CYXNlbGluZSgpICogdHJhbnNsYXRpb25G
b3JBdHRyaWJ1dGVzKCkgKiBhYnNvbHV0ZVRyYW5zZm9ybSgpKS5pbnZlcnQoKS5tYXBSZWN0KHBh
aW50SW5mby5yKTsKLQotICAgIGZsb2F0IG9wYWNpdHkgPSBzdHlsZSgpLT5vcGFjaXR5KCk7Ci0g
ICAgaWYgKG9wYWNpdHkgPCAxLjBmKQotICAgICAgICAvLyBGSVhNRTogb25jZSBSZW5kZXJTVkdU
ZXh0OjpyZWxhdGl2ZUJCb3goKSBpcyBmaXhlZCwgY2xpcHBpbmcgdG8gdGhlIGN1cnJlbnQgYmJv
eCBoZXJlIHdpbGwgc2F2ZSB0aW1lIHdoZW4gcmVuZGVyaW5nIHRleHQgdy8gb3BhY2l0eQotICAg
ICAgICBjLT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwotCi0gICAgS1JlbmRlcmlu
Z1BhaW50U2VydmVyICpmaWxsUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQ
YWludFNlcnZlcihzdHlsZSgpLCB0aGlzKTsKLSAgICBpZiAoZmlsbFBhaW50U2VydmVyKSB7Ci0g
ICAgICAgIGZpbGxQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KHRydWUpOwotICAgICAgICBp
ZiAoZmlsbFBhaW50U2VydmVyLT5zZXR1cChjb250ZXh0LCB0aGlzLCBBUFBMWV9UT19GSUxMKSkg
ewotICAgICAgICAgICAgUmVuZGVyQmxvY2s6OnBhaW50KHBpLCAwLCAwKTsKLSAgICAgICAgICAg
IGZpbGxQYWludFNlcnZlci0+dGVhcmRvd24oY29udGV4dCwgdGhpcywgQVBQTFlfVE9fRklMTCk7
Ci0gICAgICAgIH0KLSAgICAgICAgZmlsbFBhaW50U2VydmVyLT5zZXRQYWludGluZ1RleHQoZmFs
c2UpOwotICAgIH0KLSAgICAKLSAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnN0cm9rZVBhaW50
U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihzdHlsZSgpLCB0
aGlzKTsKLSAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgc3Ryb2tlUGFpbnRT
ZXJ2ZXItPnNldFBhaW50aW5nVGV4dCh0cnVlKTsKLSAgICAgICAgaWYgKHN0cm9rZVBhaW50U2Vy
dmVyLT5zZXR1cChjb250ZXh0LCB0aGlzLCBBUFBMWV9UT19TVFJPS0UpKSB7Ci0gICAgICAgICAg
ICBSZW5kZXJCbG9jazo6cGFpbnQocGksIDAsIDApOwotICAgICAgICAgICAgc3Ryb2tlUGFpbnRT
ZXJ2ZXItPnRlYXJkb3duKGNvbnRleHQsIHRoaXMsIEFQUExZX1RPX1NUUk9LRSk7Ci0gICAgICAg
IH0KLSAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dChmYWxzZSk7Ci0g
ICAgfQotCi0gICAgaWYgKGZpbHRlcikKLSAgICAgICAgZmlsdGVyLT5hcHBseUZpbHRlcihib3Vu
ZGluZ0JveCk7Ci0KLSAgICBpZiAob3BhY2l0eSA8IDEuMGYpCi0gICAgICAgIGMtPmVuZFRyYW5z
cGFyZW5jeUxheWVyKCk7Ci0KLSAgICAvLyByZXN0b3JlIGRyYXdpbmcgc3RhdGUKLSAgICBpZiAo
IXNob3VsZFBvcENvbnRleHQpCi0gICAgICAgIHBhaW50SW5mby5wLT5yZXN0b3JlKCk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIGRldmljZS0+cG9wQ29udGV4dCgpOwotICAgICAgICBkZWxldGUgY29u
dGV4dDsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyU1ZHVGV4dDo6Y29tcHV0ZUFic29sdXRlUmVw
YWludFJlY3QoSW50UmVjdCYgciwgYm9vbCBmKQogewotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm0gPSB0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKSAqIHRyYW5zbGF0aW9uRm9yQXR0cmli
dXRlcygpICogYWJzb2x1dGVUcmFuc2Zvcm0oKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNm
b3JtID0gbG9jYWxUcmFuc2Zvcm0oKTsKICAgICByID0gdHJhbnNmb3JtLm1hcFJlY3Qocik7Ci0g
ICAgCiAgICAgUmVuZGVyQ29udGFpbmVyOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChyLCBm
KTsKKyAgICByID0gdHJhbnNmb3JtLmludmVydCgpLm1hcFJlY3Qocik7CiB9CiAKIGJvb2wgUmVu
ZGVyU1ZHVGV4dDo6cmVxdWlyZXNMYXllcigpCkBAIC0xNjAsOSArNjMsMTIgQEAgdm9pZCBSZW5k
ZXJTVkdUZXh0OjpsYXlvdXQoKQogICAgIGJvb2wgY2hlY2tGb3JSZXBhaW50ID0gY2hlY2tGb3JS
ZXBhaW50RHVyaW5nTGF5b3V0KCk7CiAgICAgaWYgKGNoZWNrRm9yUmVwYWludCkKICAgICAgICAg
b2xkQm91bmRzID0gbV9hYnNvbHV0ZUJvdW5kczsKLQorICAgIFNWR1RleHRFbGVtZW50KiB0ZXh0
ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dEVsZW1lbnQqPihlbGVtZW50KCkpOworICAgIGludCB4T2Zm
c2V0ID0gdGV4dC0+eCgpLT5nZXRGaXJzdCgpID8gdGV4dC0+eCgpLT5nZXRGaXJzdCgpLT52YWx1
ZSgpIDogMDsKKyAgICBpbnQgeU9mZnNldCA9IHRleHQtPnkoKS0+Z2V0Rmlyc3QoKSA/IHRleHQt
PnkoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSA6IDA7CisgICAgdGhpcy0+c2V0UG9zKHhPZmZzZXQs
IHlPZmZzZXQpOwogICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKLQorICAgIAogICAgIG1fYWJz
b2x1dGVCb3VuZHMgPSBnZXRBYnNvbHV0ZVJlcGFpbnRSZWN0KCk7CiAKICAgICBib29sIHJlcGFp
bnRlZCA9IGZhbHNlOwpAQCAtMTcyLDExICs3OCwyNSBAQCB2b2lkIFJlbmRlclNWR1RleHQ6Omxh
eW91dCgpCiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCitJbmxpbmVCb3gqIFJlbmRl
clNWR1RleHQ6OmNyZWF0ZUlubGluZUJveChib29sIG1ha2VQbGFjZUhvbGRlckJveCwgYm9vbCBp
c1Jvb3RMaW5lQm94LCBib29sIGlzT25seVJ1bikKK3sKKyAgICBhc3NlcnQoIWlzSW5saW5lRmxv
dygpKTsKKyAgICBJbmxpbmVGbG93Qm94KiBmbG93Qm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBT
VkdSb290SW5saW5lQm94KHRoaXMpOworICAgIAorICAgIGlmICghbV9maXJzdExpbmVCb3gpCisg
ICAgICAgIG1fZmlyc3RMaW5lQm94ID0gbV9sYXN0TGluZUJveCA9IGZsb3dCb3g7CisgICAgZWxz
ZSB7CisgICAgICAgIG1fbGFzdExpbmVCb3gtPnNldE5leHRMaW5lQm94KGZsb3dCb3gpOworICAg
ICAgICBmbG93Qm94LT5zZXRQcmV2aW91c0xpbmVCb3gobV9sYXN0TGluZUJveCk7CisgICAgICAg
IG1fbGFzdExpbmVCb3ggPSBmbG93Qm94OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmxvd0Jv
eDsKK30KKwogYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludChOb2RlSW5mbyYgaW5mbywg
aW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFj
dGlvbikKIHsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdG90YWxUcmFuc2Zvcm0gPSB0cmFuc2xhdGlv
bkZvckF0dHJpYnV0ZXMoKTsKLSAgICB0b3RhbFRyYW5zZm9ybSAqPSB0cmFuc2xhdGlvblRvcFRv
QmFzZWxpbmUoKTsKLSAgICB0b3RhbFRyYW5zZm9ybSAqPSBhYnNvbHV0ZVRyYW5zZm9ybSgpOwor
ICAgIEFmZmluZVRyYW5zZm9ybSB0b3RhbFRyYW5zZm9ybSA9IGFic29sdXRlVHJhbnNmb3JtKCk7
CiAgICAgZG91YmxlIGxvY2FsWCwgbG9jYWxZOwogICAgIHRvdGFsVHJhbnNmb3JtLmludmVydCgp
Lm1hcChfeCwgX3ksICZsb2NhbFgsICZsb2NhbFkpOwogICAgIHJldHVybiBSZW5kZXJCbG9jazo6
bm9kZUF0UG9pbnQoaW5mbywgKGludClsb2NhbFgsIChpbnQpbG9jYWxZLCBfdHgsIF90eSwgaGl0
VGVzdEFjdGlvbik7CkBAIC0xODQsMTEgKzEwNCwzMyBAQCBib29sIFJlbmRlclNWR1RleHQ6Om5v
ZGVBdFBvaW50KE5vZGVJbmZvCiAKIHZvaWQgUmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gbWF0ID0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7Ci0gICAgbWF0ICo9IHRyYW5z
bGF0aW9uVG9wVG9CYXNlbGluZSgpOwotICAgIG1hdCAqPSBhYnNvbHV0ZVRyYW5zZm9ybSgpOwor
ICAgIGlmICghbV9maXJzdExpbmVCb3gpCisgICAgICAgIHJldHVybjsKKyAgICBBZmZpbmVUcmFu
c2Zvcm0gYm94VHJhbnNmb3JtID0gbV9maXJzdExpbmVCb3gtPm9iamVjdCgpLT5hYnNvbHV0ZVRy
YW5zZm9ybSgpOworICAgIEZsb2F0UmVjdCBib3hSZWN0ID0gRmxvYXRSZWN0KHhQb3MoKSArIG1f
Zmlyc3RMaW5lQm94LT54UG9zKCksIHlQb3MoKSArIG1fZmlyc3RMaW5lQm94LT55UG9zKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9maXJzdExpbmVCb3gtPndpZHRoKCks
IG1fZmlyc3RMaW5lQm94LT5oZWlnaHQoKSk7CisgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0lu
dFJlY3QoYm94VHJhbnNmb3JtLm1hcFJlY3QoYm94UmVjdCkpKTsKK30KKwordm9pZCBSZW5kZXJT
VkdUZXh0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IF90eCwgaW50IF90eSkKK3sg
ICAgCisgICAgS1JlbmRlcmluZ0RldmljZSogZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7Cisg
ICAgUmVuZGVyT2JqZWN0OjpQYWludEluZm8gcGkgPSBwYWludEluZm87CisgICAgT3duUHRyPEdy
YXBoaWNzQ29udGV4dD4gYyhkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCktPmNyZWF0ZUdyYXBoaWNz
Q29udGV4dCgpKTsKKyAgICBwaS5wID0gYy5nZXQoKTsKKyAgICBwaS5yID0gKGFic29sdXRlVHJh
bnNmb3JtKCkpLmludmVydCgpLm1hcFJlY3QocGFpbnRJbmZvLnIpOworICAgIFJlbmRlckJsb2Nr
OjpwYWludChwaSwgX3R4LCBfdHkpOworfQogCi0gICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0lu
dFJlY3QobWF0Lm1hcFJlY3QoRmxvYXRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSkpKTsK
K0Zsb2F0UmVjdCBSZW5kZXJTVkdUZXh0OjpyZWxhdGl2ZUJCb3goYm9vbCBpbmNsdWRlU3Ryb2tl
KSBjb25zdAoreworICAgIEZsb2F0UmVjdCBib3VuZHNSZWN0OworICAgIElubGluZUJveCogYm94
ID0gbV9maXJzdExpbmVCb3g7CisgICAgaWYgKGJveCkgeworICAgICAgICBib3VuZHNSZWN0ID0g
RmxvYXRSZWN0KHhQb3MoKSArIGJveC0+eFBvcygpLCB5UG9zKCkgKyBib3gtPnlQb3MoKSwgYm94
LT53aWR0aCgpLCBib3gtPmhlaWdodCgpKTsKKyAgICAgICAgYm91bmRzUmVjdCA9IGxvY2FsVHJh
bnNmb3JtKCkubWFwUmVjdChib3VuZHNSZWN0KTsKKyAgICB9CisgICAgcmV0dXJuIGJvdW5kc1Jl
Y3Q7CiB9CiAKIH0KSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5oCShyZXZpc2lvbiAxNjkzNSkKKysrIGtjYW52YXMvUmVu
ZGVyU1ZHVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwyNSArMzQsMjEgQEAgY2xhc3MgU1ZH
VGV4dEVsZW1lbnQ7CiBjbGFzcyBSZW5kZXJTVkdUZXh0IDogcHVibGljIFJlbmRlckJsb2NrCiB7
CiBwdWJsaWM6Ci0gICAgUmVuZGVyU1ZHVGV4dChTVkdUZXh0RWxlbWVudCAqbm9kZSk7CisgICAg
UmVuZGVyU1ZHVGV4dChTVkdUZXh0RWxlbWVudCogbm9kZSk7CiAKICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHVGV4dCI7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZ
KTsKICAgICAKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldExvY2FsVHJh
bnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0g
dHJhbnNmb3JtOyB9Ci0gICAgCisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYgaSwg
aW50IF90eCwgaW50IF90eSk7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KE5vZGVJbmZv
JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7Ci0KICAgICB2
aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0
eSk7Ci0KICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVj
dCYgciwgYm9vbCBmKTsKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpOwogICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAgICAKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZWxhdGl2
ZUJCb3goYm9vbCBpbmNsdWRlU3Ryb2tlID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBJbmxp
bmVCb3gqIGNyZWF0ZUlubGluZUJveChib29sIG1ha2VQbGFjZUhvbGRlckJveCwgYm9vbCBpc1Jv
b3RMaW5lQm94LCBib29sIGlzT25seVJ1biA9IGZhbHNlKTsKICBwcml2YXRlOgotICAgIEFmZmlu
ZVRyYW5zZm9ybSB0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKTsKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJh
bnNmb3JtOwogICAgIEludFJlY3QgbV9hYnNvbHV0ZUJvdW5kczsKIH07CkluZGV4OiBrY2FudmFz
L1NWR0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvU1ZHSW5saW5lRmxv
d0JveC5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1NWR0lubGluZUZsb3dCb3guY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1
bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4KKyAqICAgICAgICAgICAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0x
MzA3LCBVU0EuCisgKgorICovCisKKworI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTVkdJbmxpbmVGbG93Qm94LmgiCisjaW5jbHVkZSAiS1JlbmRl
cmluZ0RldmljZS5oIgorI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgorI2luY2x1
ZGUgIktDYW52YXNDbGlwcGVyLmgiCisjaW5jbHVkZSAiS0NhbnZhc01hc2tlci5oIgorI2luY2x1
ZGUgIklubGluZVRleHRCb3guaCIKKyNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCisjaW5jbHVk
ZSAiU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aExpc3Qu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBT
VkdJbmxpbmVGbG93Qm94OjpwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZv
LCBpbnQgdHgsIGludCB0eSkgCit7CisgICAgcGFpbnRTVkdJbmxpbmVGbG93KHRoaXMsIG9iamVj
dCgpLCBwYWludEluZm8sIHR4LCB0eSk7Cit9CisKK2ludCBTVkdJbmxpbmVGbG93Qm94OjpwbGFj
ZUJveGVzSG9yaXpvbnRhbGx5KGludCB4LCBpbnQmIGxlZnRQb3NpdGlvbiwgaW50JiByaWdodFBv
c2l0aW9uLCBib29sJiBuZWVkc1dvcmRTcGFjaW5nKQoreworICAgIHJldHVybiBwbGFjZVNWR0Zs
b3dIb3Jpem9udGFsbHkodGhpcywgeCwgbGVmdFBvc2l0aW9uLCByaWdodFBvc2l0aW9uLCBuZWVk
c1dvcmRTcGFjaW5nKTsKK30KKwordm9pZCBTVkdJbmxpbmVGbG93Qm94Ojp2ZXJ0aWNhbGx5QWxp
Z25Cb3hlcyhpbnQmIGhlaWdodE9mQmxvY2spCit7CisgICAgcGxhY2VTVkdGbG93VmVydGljYWxs
eSh0aGlzLCBoZWlnaHRPZkJsb2NrKTsKK30KKwordm9pZCBwYWludFNWR0lubGluZUZsb3coSW5s
aW5lRmxvd0JveCogZmxvdywgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQoreworICAgIGlmIChwYWludEluZm8u
cC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgS1JlbmRl
cmluZ0RldmljZSogZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7CisgICAgS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQqIGNvbnRleHQgPSBkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCk7CisgICAgYm9v
bCBzaG91bGRQb3BDb250ZXh0ID0gZmFsc2U7CisgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHBh
aW50SW5mby5wLT5zYXZlKCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIE5lZWQgdG8gc2V0IHVw
IEtDYW52YXMgcmVuZGVyaW5nIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gZG9uZS4KKyAgICAg
ICAgY29udGV4dCA9IHBhaW50SW5mby5wLT5jcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCk7
CisgICAgICAgIGRldmljZS0+cHVzaENvbnRleHQoY29udGV4dCk7CisgICAgICAgIHNob3VsZFBv
cENvbnRleHQgPSB0cnVlOworICAgIH0KKyAgICAKKworICAgIGNvbnRleHQtPmNvbmNhdENUTShv
YmplY3QtPmxvY2FsVHJhbnNmb3JtKCkpOworICAgIAorICAgIEZsb2F0UmVjdCBib3VuZGluZ0Jv
eCh0eCtmbG93LT54UG9zKCkgLCB0eStmbG93LT55UG9zKCksIGZsb3ctPndpZHRoKCksIGZsb3ct
PmhlaWdodCgpKTsKKyAgICAKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBv
YmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgaWYgKEtDYW52YXNDbGlwcGVyKiBjbGlw
cGVyID0gZ2V0Q2xpcHBlckJ5SWQob2JqZWN0LT5kb2N1bWVudCgpLCBzdmdTdHlsZS0+Y2xpcFBh
dGgoKS5zdWJzdHJpbmcoMSkpKQorICAgICAgICBjbGlwcGVyLT5hcHBseUNsaXAoYm91bmRpbmdC
b3gpOworICAgIAorICAgIGlmIChLQ2FudmFzTWFza2VyKiBtYXNrZXIgPSBnZXRNYXNrZXJCeUlk
KG9iamVjdC0+ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPm1hc2tFbGVtZW50KCkuc3Vic3RyaW5nKDEp
KSkKKyAgICAgICAgbWFza2VyLT5hcHBseU1hc2soYm91bmRpbmdCb3gpOworICAgIAorICAgIEtD
YW52YXNGaWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5SWQob2JqZWN0LT5kb2N1bWVudCgpLCBz
dmdTdHlsZS0+ZmlsdGVyKCkuc3Vic3RyaW5nKDEpKTsKKyAgICBpZiAoZmlsdGVyKQorICAgICAg
ICBmaWx0ZXItPnByZXBhcmVGaWx0ZXIoYm91bmRpbmdCb3gpOworICAgIAorICAgIFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvIHBpID0gcGFpbnRJbmZvOworICAgIE93blB0cjxHcmFwaGljc0NvbnRl
eHQ+IGMoZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKSk7
CisgICAgcGkucCA9IGMuZ2V0KCk7CisgICAgaWYgKCFmbG93LT5pc1Jvb3RJbmxpbmVCb3goKSkK
KyAgICAgICAgcGkuciA9IChvYmplY3QtPmxvY2FsVHJhbnNmb3JtKCkpLmludmVydCgpLm1hcFJl
Y3QocGFpbnRJbmZvLnIpOworICAgIAorICAgIGZsb2F0IG9wYWNpdHkgPSBvYmplY3QtPnN0eWxl
KCktPm9wYWNpdHkoKTsKKyAgICBpZiAob3BhY2l0eSA8IDEuMGYpIHsKKyAgICAgICAgYy0+Y2xp
cChlbmNsb3NpbmdJbnRSZWN0KGJvdW5kaW5nQm94KSk7CisgICAgICAgIGMtPmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIob3BhY2l0eSk7CisgICAgfQorICAgIAorICAgIEtSZW5kZXJpbmdQYWludFNl
cnZlciogZmlsbFBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRTZXJ2
ZXIob2JqZWN0LT5zdHlsZSgpLCBvYmplY3QpOworICAgIGlmIChmaWxsUGFpbnRTZXJ2ZXIpIHsK
KyAgICAgICAgZmlsbFBhaW50U2VydmVyLT5zZXRQYWludGluZ1RleHQodHJ1ZSk7CisgICAgICAg
IGlmIChmaWxsUGFpbnRTZXJ2ZXItPnNldHVwKGNvbnRleHQsIG9iamVjdCwgQVBQTFlfVE9fRklM
TCkpIHsKKyAgICAgICAgICAgIGZsb3ctPnBhcmVudFBhaW50TWV0aG9kKHBpLCB0eCwgdHkpOwor
ICAgICAgICAgICAgZmlsbFBhaW50U2VydmVyLT50ZWFyZG93bihjb250ZXh0LCBvYmplY3QsIEFQ
UExZX1RPX0ZJTEwpOworICAgICAgICB9CisgICAgICAgIGZpbGxQYWludFNlcnZlci0+c2V0UGFp
bnRpbmdUZXh0KGZhbHNlKTsKKyAgICB9CisgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyKiBzdHJv
a2VQYWludFNlcnZlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tlUGFpbnRTZXJ2ZXIob2Jq
ZWN0LT5zdHlsZSgpLCBvYmplY3QpOworICAgIGlmIChzdHJva2VQYWludFNlcnZlcikgeworICAg
ICAgICBzdHJva2VQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KHRydWUpOworICAgICAgICBp
ZiAoc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldHVwKGNvbnRleHQsIG9iamVjdCwgQVBQTFlfVE9fU1RS
T0tFKSkgeworICAgICAgICAgICAgZmxvdy0+cGFyZW50UGFpbnRNZXRob2QocGksIHR4LCB0eSk7
CisgICAgICAgICAgICBzdHJva2VQYWludFNlcnZlci0+dGVhcmRvd24oY29udGV4dCwgb2JqZWN0
LCBBUFBMWV9UT19TVFJPS0UpOworICAgICAgICB9CisgICAgICAgIHN0cm9rZVBhaW50U2VydmVy
LT5zZXRQYWludGluZ1RleHQoZmFsc2UpOworICAgIH0KKyAgICAKKyAgICBpZiAoZmlsdGVyKSAK
KyAgICAgICAgZmlsdGVyLT5hcHBseUZpbHRlcihib3VuZGluZ0JveCk7CisgICAgCisgICAgaWYg
KG9wYWNpdHkgPCAxLjBmKQorICAgICAgICBjLT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworCisg
ICAgLy8gcmVzdG9yZSBkcmF3aW5nIHN0YXRlCisgICAgaWYgKCFzaG91bGRQb3BDb250ZXh0KQor
ICAgICAgICBwYWludEluZm8ucC0+cmVzdG9yZSgpOworICAgIGVsc2UgeworICAgICAgICBkZXZp
Y2UtPnBvcENvbnRleHQoKTsKKyAgICAgICAgZGVsZXRlIGNvbnRleHQ7CisgICAgfQorfQorCitz
dGF0aWMgYm9vbCB0cmFuc2xhdGVCb3goSW5saW5lQm94KiBib3gsIGludCB4LCBpbnQgeSwgYm9v
bCB0b3BMZXZlbCA9IHRydWUpCit7ICAgIAorICAgIGlmIChib3gtPm9iamVjdCgpLT5pc1RleHQo
KSkgeworICAgICAgICBib3gtPnNldFhQb3MoYm94LT54UG9zKCkgKyB4KTsKKyAgICAgICAgYm94
LT5zZXRZUG9zKGJveC0+eVBvcygpICsgeSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSW5saW5l
Rmxvd0JveCogZmxvdyA9IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihib3gpOworICAgICAg
ICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudCo+KGJveC0+b2JqZWN0KCktPmVsZW1lbnQoKSk7CisgICAgICAgIAor
ICAgICAgICBpZiAodG9wTGV2ZWx8fCEodGV4dC0+eCgpLT5nZXRGaXJzdCgpIHx8IHRleHQtPnko
KS0+Z2V0Rmlyc3QoKSB8fCAKKyAgICAgICAgICAgICAgICAgICAgICAgICh0ZXh0LT5keCgpLT5n
ZXRGaXJzdCgpICYmIHRleHQtPmR4KCktPmdldEZpcnN0KCktPnZhbHVlKCkpIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICAodGV4dC0+ZHkoKS0+Z2V0Rmlyc3QoKSAmJiB0ZXh0LT5keSgpLT5n
ZXRGaXJzdCgpLT52YWx1ZSgpKSkpIHsKKyAgICAgICAgICAgIGJveC0+c2V0WFBvcyhib3gtPnhQ
b3MoKSArIHgpOworICAgICAgICAgICAgYm94LT5zZXRZUG9zKGJveC0+eVBvcygpICsgeSk7Cisg
ICAgICAgICAgICBmb3IgKElubGluZUJveCogY3VyciA9IGZsb3ctPmZpcnN0Q2hpbGQoKTsgY3Vy
cjsgY3VyciA9IGN1cnItPm5leHRPbkxpbmUoKSkgCisgICAgICAgICAgICAgICAgaWYgKCF0cmFu
c2xhdGVCb3goY3VyciwgeCwgeSwgZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBp
bnQgcGxhY2VQb3NpdGlvbmVkQm94ZXNIb3Jpem9udGFsbHkoSW5saW5lRmxvd0JveCogZmxvdywg
aW50IHgsIGludCYgbGVmdFBvc2l0aW9uLCBpbnQmIHJpZ2h0UG9zaXRpb24sIGludCYgbGVmdEFs
aWduLCBpbnQmIHJpZ2h0QWxpZ24sIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcsIGludCB4UG9zLCBi
b29sIHBvc2l0aW9uZWQpCit7CisgICAgLy9pbnQgc3RhcnR4ID0geDsKKyAgICBpbnQgbW4gPSBJ
TlRfTUFYOworICAgIGludCBteCA9IElOVF9NSU47CisgICAgaW50IGFtbiA9IElOVF9NQVg7Cisg
ICAgaW50IGFteCA9IElOVF9NSU47CisgICAgaW50IHN0YXJ0eCA9IHg7CisgICAgYm9vbCBzZWVu
UG9zaXRpb25lZEVsZW1lbnQgPSBmYWxzZTsKKyAgICBmbG93LT5zZXRYUG9zKHgpOworICAgIGZv
ciAoSW5saW5lQm94KiBjdXJyID0gZmxvdy0+Zmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vy
ci0+bmV4dE9uTGluZSgpKSAKKyAgICB7CisgICAgICAgIGlmIChjdXJyLT5vYmplY3QoKS0+aXNU
ZXh0KCkpIHsKKyAgICAgICAgICAgIG1uID0gbWluKG1uLCB4KTsKKyAgICAgICAgICAgIGFtbiA9
IG1pbihhbW4sIHgpOworICAgICAgICAgICAgSW5saW5lVGV4dEJveCogdGV4dCA9IHN0YXRpY19j
YXN0PElubGluZVRleHRCb3gqPihjdXJyKTsKKyAgICAgICAgICAgIFJlbmRlclRleHQqIHJ0ID0g
c3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHRleHQtPm9iamVjdCgpKTsKKyAgICAgICAgICAgIGlm
IChydC0+bGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobmVlZHNXb3JkU3BhY2luZyAm
JiBEZXByZWNhdGVkQ2hhcihydC0+dGV4dCgpW3RleHQtPnN0YXJ0KCldKS5pc1NwYWNlKCkpCisg
ICAgICAgICAgICAgICAgICAgIHggKz0gcnQtPmZvbnQoZmxvdy0+aXNGaXJzdExpbmVTdHlsZSgp
KS0+d29yZFNwYWNpbmcoKTsKKyAgICAgICAgICAgICAgICBuZWVkc1dvcmRTcGFjaW5nID0gIURl
cHJlY2F0ZWRDaGFyKHJ0LT50ZXh0KClbdGV4dC0+ZW5kKCldKS5pc1NwYWNlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0ZXh0LT5zZXRYUG9zKHgpOworICAgICAgICAgICAgeCArPSB0
ZXh0LT53aWR0aCgpOworICAgICAgICAgICAgbXggPSBtYXgobXgsIHgpOworICAgICAgICAgICAg
YW14ID0gbWF4KGFteCwgeCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQo
Y3Vyci0+b2JqZWN0KCktPmlzSW5saW5lRmxvdygpKTsKKyAgICAgICAgICAgIElubGluZUZsb3dC
b3gqIGZsb3cgPSBzdGF0aWNfY2FzdDxJbmxpbmVGbG93Qm94Kj4oY3Vycik7CisgICAgICAgICAg
ICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudCo+KGZsb3ctPm9iamVjdCgpLT5lbGVtZW50KCkpOworICAgICAgICAg
ICAgeCArPSB0ZXh0LT5keCgpLT5nZXRGaXJzdCgpID8gdGV4dC0+ZHgoKS0+Z2V0Rmlyc3QoKS0+
dmFsdWUoKSA6IDA7CisgICAgICAgICAgICBpZiAodGV4dC0+eCgpLT5nZXRGaXJzdCgpKQorICAg
ICAgICAgICAgICAgIHggPSB0ZXh0LT54KCktPmdldEZpcnN0KCktPnZhbHVlKCkgLSB4UG9zOwor
ICAgICAgICAgICAgaWYgKHRleHQtPngoKS0+Z2V0Rmlyc3QoKSB8fCB0ZXh0LT55KCktPmdldEZp
cnN0KCkgfHwgCisgICAgICAgICAgICAgICAgKHRleHQtPmR4KCktPmdldEZpcnN0KCkgJiYgdGV4
dC0+ZHgoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSkgfHwKKyAgICAgICAgICAgICAgICAodGV4dC0+
ZHkoKS0+Z2V0Rmlyc3QoKSAmJiB0ZXh0LT5keSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpKSkgewor
ICAgICAgICAgICAgICAgIHNlZW5Qb3NpdGlvbmVkRWxlbWVudCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgbmVlZHNXb3JkU3BhY2luZyA9IGZhbHNlOworICAgICAgICAgICAgICAgIGludCBpZ25v
cmVYLCBpZ25vcmVZOworICAgICAgICAgICAgICAgIHggPSBwbGFjZVBvc2l0aW9uZWRCb3hlc0hv
cml6b250YWxseShmbG93LCB4LCBtbiwgbXgsIGlnbm9yZVgsIGlnbm9yZVksIG5lZWRzV29yZFNw
YWNpbmcsIHhQb3MsIHRydWUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzZWVuUG9zaXRpb25l
ZEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBpbnQgX2FtbiwgX2FteDsgLy90aHJvdyBhd2F5
IHRoZXNlIHZhbHVlcworICAgICAgICAgICAgICAgIHggPSBwbGFjZVBvc2l0aW9uZWRCb3hlc0hv
cml6b250YWxseShmbG93LCB4LCBtbiwgbXgsIF9hbW4sIF9hbXgsIG5lZWRzV29yZFNwYWNpbmcs
IHhQb3MsIGZhbHNlKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHggPSBw
bGFjZVBvc2l0aW9uZWRCb3hlc0hvcml6b250YWxseShmbG93LCB4LCBtbiwgbXgsIGFtbiwgYW14
LCBuZWVkc1dvcmRTcGFjaW5nLCB4UG9zLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKG1uID4gbXgpCisgICAgICAgIG1uID0gbXggPSBzdGFydHg7CisgICAgaWYgKGFtbiA+IGFt
eCkKKyAgICAgICAgYW1uID0gYW14ID0gc3RhcnR4OworICAgIAorICAgIGludCB3aWR0aCA9IG14
IC0gbW47CisgICAgZmxvdy0+c2V0V2lkdGgod2lkdGgpOworICAgIGludCBhd2lkdGggPSBhbXgg
LSBhbW47CisgICAgaW50IGR4PTA7CisgICAgaWYgKHBvc2l0aW9uZWQpIHsKKyAgICAgICAgc3dp
dGNoIChmbG93LT5vYmplY3QoKS0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+dGV4dEFuY2hvcigpKSAK
KyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBUQV9NSURETEU6CisgICAgICAgICAgICAgICAg
dHJhbnNsYXRlQm94KGZsb3csIGR4ID0gLWF3aWR0aC8yLCAwKTsgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVEFfRU5EOgorICAgICAgICAgICAg
ICAgIHRyYW5zbGF0ZUJveChmbG93LCBkeCA9IC1hd2lkdGgsIDApOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBUQV9TVEFSVDoKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGR4KSB7Cisg
ICAgICAgICAgICB4ICs9IGR4OworICAgICAgICAgICAgbW4gKz0gZHg7CisgICAgICAgICAgICBt
eCArPSBkeDsKKyAgICAgICAgfQorICAgIH0KKyAgICBsZWZ0UG9zaXRpb24gPSBtaW4obGVmdFBv
c2l0aW9uLCBtbik7CisgICAgcmlnaHRQb3NpdGlvbiA9IG1heChyaWdodFBvc2l0aW9uLCBteCk7
CisgICAgbGVmdEFsaWduID0gbWluKGxlZnRBbGlnbiwgYW1uKTsKKyAgICByaWdodEFsaWduID0g
bWF4KHJpZ2h0QWxpZ24sIGFteCk7CisgICAgCisgICAgcmV0dXJuIHg7Cit9CisKK2ludCBwbGFj
ZVNWR0Zsb3dIb3Jpem9udGFsbHkoSW5saW5lRmxvd0JveCogZmxvdywgaW50IHgsIGludCYgbGVm
dFBvc2l0aW9uLCBpbnQmIHJpZ2h0UG9zaXRpb24sIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcpCit7
CisgICAgaW50IGlnbm9yZVgsIGlnbm9yZVk7CisgICAgeCA9IHBsYWNlUG9zaXRpb25lZEJveGVz
SG9yaXpvbnRhbGx5KGZsb3csIHgsIGxlZnRQb3NpdGlvbiwgcmlnaHRQb3NpdGlvbiwgaWdub3Jl
WCwgaWdub3JlWSwgbmVlZHNXb3JkU3BhY2luZywgZmxvdy0+b2JqZWN0KCktPnhQb3MoKSwgdHJ1
ZSk7CisgICAgbGVmdFBvc2l0aW9uID0gbWluKGxlZnRQb3NpdGlvbiwgeCk7CisgICAgcmlnaHRQ
b3NpdGlvbiA9IG1heChyaWdodFBvc2l0aW9uLCB4KTsKKyAgICBuZWVkc1dvcmRTcGFjaW5nID0g
ZmFsc2U7CisgICAgcmV0dXJuIHg7Cit9CisKK3N0YXRpYyB2b2lkIHBsYWNlQm94ZXNWZXJ0aWNh
bGx5V2l0aEFic0Jhc2VsaW5lKElubGluZUZsb3dCb3gqIGZsb3csIGludCYgaGVpZ2h0T2ZCbG9j
aywgaW50JiBtaW5feSwgaW50JiBtYXhfeSwgaW50JiBiYXNlbGluZSwgaW50IHlQb3MpCit7Cisg
ICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmbG93LT5maXJzdENoaWxkKCk7IGN1cnI7IGN1cnIg
PSBjdXJyLT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgaWYgKGN1cnItPmlzSW5saW5lRmxvd0Jv
eCgpKSB7CisgICAgICAgICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50KiB0ZXh0ID0gc3Rh
dGljX2Nhc3Q8U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCo+KGN1cnItPm9iamVjdCgpLT5lbGVt
ZW50KCkpOworICAgICAgICAgICAgYmFzZWxpbmUgKz0gdGV4dC0+ZHkoKS0+Z2V0Rmlyc3QoKSA/
IHRleHQtPmR5KCktPmdldEZpcnN0KCktPnZhbHVlKCkgOiAwOworICAgICAgICAgICAgaWYgKHRl
eHQtPnkoKS0+Z2V0Rmlyc3QoKSkgeworICAgICAgICAgICAgICAgIGJhc2VsaW5lID0gdGV4dC0+
eSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIC0geVBvczsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHBsYWNlQm94ZXNWZXJ0aWNhbGx5V2l0aEFic0Jhc2VsaW5lKHN0YXRpY19jYXN0PElubGlu
ZUZsb3dCb3gqPihjdXJyKSwgaGVpZ2h0T2ZCbG9jaywgbWluX3ksIG1heF95LCBiYXNlbGluZSwg
eVBvcyk7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IGN1cnItPm9iamVj
dCgpLT5mb250KHRydWUpOworICAgICAgICBpbnQgYXNjZW50ID0gZm9udC5hc2NlbnQoKTsKKyAg
ICAgICAgaW50IHBvc2l0aW9uID0gYmFzZWxpbmUgLSBhc2NlbnQ7CisgICAgICAgIGludCBoZWln
aHQgPSBhc2NlbnQgKyBmb250LmRlc2NlbnQoKTsKKyAgICAgICAgY3Vyci0+c2V0QmFzZWxpbmUo
YXNjZW50KTsKKyAgICAgICAgY3Vyci0+c2V0WVBvcyhwb3NpdGlvbik7CisgICAgICAgIGN1cnIt
PnNldEhlaWdodChoZWlnaHQpOworICAgICAgICAKKyAgICAgICAgaWYgKHBvc2l0aW9uIDwgbWlu
X3kpIAorICAgICAgICAgICAgbWluX3kgPSBwb3NpdGlvbjsKKyAgICAgICAgaWYgKHBvc2l0aW9u
ICsgaGVpZ2h0ID4gbWF4X3kpIAorICAgICAgICAgICAgbWF4X3kgPSBwb3NpdGlvbiArIGhlaWdo
dDsKKyAgICB9CisgICAgaWYgKGZsb3ctPmlzUm9vdElubGluZUJveCgpKSB7CisgICAgICAgIGZs
b3ctPnNldFlQb3MobWluX3kpOworICAgICAgICBmbG93LT5zZXRIZWlnaHQobWF4X3kgLSBtaW5f
eSk7CisgICAgICAgIGZsb3ctPnNldEJhc2VsaW5lKGJhc2VsaW5lIC0gbWluX3kpOworICAgICAg
ICBoZWlnaHRPZkJsb2NrICs9IG1heF95IC0gbWluX3k7CisgICAgfQorfQorCit2b2lkIHBsYWNl
U1ZHRmxvd1ZlcnRpY2FsbHkoSW5saW5lRmxvd0JveCogZmxvdywgaW50JiBoZWlnaHRPZkJsb2Nr
KQoreworICAgIGludCB0b3AgPSBJTlRfTUFYLCBib3R0b20gPSBJTlRfTUlOLCBiYXNlbGluZSA9
IGhlaWdodE9mQmxvY2s7CisgICAgcGxhY2VCb3hlc1ZlcnRpY2FsbHlXaXRoQWJzQmFzZWxpbmUo
ZmxvdywgaGVpZ2h0T2ZCbG9jaywgdG9wLCBib3R0b20sIGJhc2VsaW5lLCBmbG93LT5vYmplY3Qo
KS0+eVBvcygpKTsKKyAgICBmbG93LT5zZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25zKHRvcCwg
Ym90dG9tKTsKKyAgICBmbG93LT5zZXRWZXJ0aWNhbFNlbGVjdGlvblBvc2l0aW9ucyh0b3AsIGJv
dHRvbSk7Cit9CisKK30KKyNlbmRpZiAvLyBTVkdfU1VQUE9SVApJbmRleDoga2NhbnZhcy9TVkdJ
bmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9TVkdJbmxpbmVGbG93Qm94LmgJ
KHJldmlzaW9uIDApCisrKyBrY2FudmFzL1NWR0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
cHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0
dWRlbnQuY2FudGVyYnVyeS5hYy5uej4KKyAqICAgICAgICAgICAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisg
KgorICovCisKKyNpZm5kZWYgU1ZHSW5saW5lRmxvd0JveF9ICisjZGVmaW5lIFNWR0lubGluZUZs
b3dCb3hfSAorCisjaWZkZWYgU1ZHX1NVUFBPUlQKKworI2luY2x1ZGUgIklubGluZUZsb3dCb3gu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIHBhaW50U1ZHSW5saW5lRmxvdyhJbmxp
bmVGbG93Qm94KiBmbG93LCBSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIGksIAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IF90eCwgaW50IF90eSk7Citp
bnQgcGxhY2VTVkdGbG93SG9yaXpvbnRhbGx5KElubGluZUZsb3dCb3gqIGZsb3csIGludCB4LCBp
bnQmIGxlZnRQb3NpdGlvbiwgaW50JiByaWdodFBvc2l0aW9uLCBib29sJiBuZWVkc1dvcmRTcGFj
aW5nKTsKK3ZvaWQgcGxhY2VTVkdGbG93VmVydGljYWxseShJbmxpbmVGbG93Qm94KiBmbG93LCBp
bnQmIGhlaWdodE9mQmxvY2spOworCitjbGFzcyBTVkdJbmxpbmVGbG93Qm94IDogcHVibGljIElu
bGluZUZsb3dCb3ggeworcHVibGljOgorICAgIFNWR0lubGluZUZsb3dCb3goUmVuZGVyT2JqZWN0
KiBvYmopIDogSW5saW5lRmxvd0JveChvYmopIHt9CisgICAgdmlydHVhbCB2b2lkIHBhcmVudFBh
aW50TWV0aG9kKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KXsg
SW5saW5lRmxvd0JveDo6cGFpbnQoaSwgX3R4LCBfdHkpOyB9CisgICAgdmlydHVhbCB2b2lkIHBh
aW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KTsKKyAgICB2
aXJ0dWFsIGludCBwbGFjZUJveGVzSG9yaXpvbnRhbGx5KGludCB4LCBpbnQmIGxlZnRQb3NpdGlv
biwgaW50JiByaWdodFBvc2l0aW9uLCBib29sJiBuZWVkc1dvcmRTcGFjaW5nKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmVydGljYWxseUFsaWduQm94ZXMoaW50JiBoZWlnaHRPZkJsb2NrKTsKK307CisK
K30KKworI2VuZGlmIC8vIFNWR19TVVBQT1JUCisKKyNlbmRpZiAvLyAhU1ZHSW5saW5lRmxvd0Jv
eF9ICkluZGV4OiBrY2FudmFzL1NWR1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtj
YW52YXMvU1ZHUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1NWR1Jv
b3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgorICog
ICAgICAgICAgIChDKSAyMDA2IEFwcGxlIENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworCisjaWZkZWYgU1ZHX1NVUFBP
UlQKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIK
KyNpbmNsdWRlICJTVkdJbmxpbmVGbG93Qm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dm9pZCBTVkdSb290SW5saW5lQm94OjpwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFp
bnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpIAoreworICAgIHBhaW50U1ZHSW5saW5l
Rmxvdyh0aGlzLCBvYmplY3QoKSwgcGFpbnRJbmZvLCBwYXJlbnRYLCBwYXJlbnRZKTsKK30KKwor
aW50IFNWR1Jvb3RJbmxpbmVCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFsbHkoaW50IHgsIGludCYg
bGVmdFBvc2l0aW9uLCBpbnQmIHJpZ2h0UG9zaXRpb24sIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcp
Cit7CisgICAgcmV0dXJuIHBsYWNlU1ZHRmxvd0hvcml6b250YWxseSh0aGlzLCB4LCBsZWZ0UG9z
aXRpb24sIHJpZ2h0UG9zaXRpb24sIG5lZWRzV29yZFNwYWNpbmcpOworfQorCit2b2lkIFNWR1Jv
b3RJbmxpbmVCb3g6OnZlcnRpY2FsbHlBbGlnbkJveGVzKGludCYgaGVpZ2h0T2ZCbG9jaykKK3sK
KyAgICBwbGFjZVNWR0Zsb3dWZXJ0aWNhbGx5KHRoaXMsIGhlaWdodE9mQmxvY2spOworfQorCit9
CisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtjYW52YXMvU1ZHUm9vdElubGluZUJveC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtjYW52YXMvU1ZHUm9vdElubGluZUJveC5oCShyZXZpc2lvbiAwKQor
Kysga2NhbnZhcy9TVkdSb290SW5saW5lQm94LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYg
QEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1
cnkuYWMubno+CisgKiAgICAgICAgICAgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIgSW5jLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZu
ZGVmIFNWR1Jvb3RJbmxpbmVCb3hfSAorI2RlZmluZSBTVkdSb290SW5saW5lQm94X0gKKworI2lm
ZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIFNWR1Jvb3RJbmxpbmVCb3ggOiBwdWJsaWMgUm9vdElu
bGluZUJveCB7CitwdWJsaWM6CisgICAgU1ZHUm9vdElubGluZUJveChSZW5kZXJPYmplY3QqIG9i
aikgOiBSb290SW5saW5lQm94KG9iaikge30KKyAgICB2aXJ0dWFsIHZvaWQgcGFyZW50UGFpbnRN
ZXRob2QoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpeyBSb290
SW5saW5lQm94OjpwYWludChpLCBfdHgsIF90eSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpOworICAgIHZpcnR1
YWwgaW50IHBsYWNlQm94ZXNIb3Jpem9udGFsbHkoaW50IHgsIGludCYgbGVmdFBvc2l0aW9uLCBp
bnQmIHJpZ2h0UG9zaXRpb24sIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcpOworICAgIHZpcnR1YWwg
dm9pZCB2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQmIGhlaWdodE9mQmxvY2spOworfTsKKworfQor
CisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKKworI2VuZGlmIC8vICFSb290SW5saW5lQm94X0gKSW5k
ZXg6IGtzdmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3Zn
L1NWR1RSZWZFbGVtZW50LmNwcAkocmV2aXNpb24gMTY5MzUpCisrKyBrc3ZnMi9zdmcvU1ZHVFJl
ZkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxp
bmUuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTc5LDcgKzc5LDcgQEAgYm9v
bCBTVkdUUmVmRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZQogCiBSZW5kZXJPYmplY3QgKlNW
R1RSZWZFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0
eWxlICopCiB7Ci0gICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlcklubGluZSh0aGlzKTsKKyAg
ICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHSW5saW5lKHRoaXMpOwogfQogCiAvLyB2aW06
dHM9NDpub2V0CkluZGV4OiBrc3ZnMi9zdmcvU1ZHVFNwYW5FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrc3ZnMi9zdmcvU1ZHVFNwYW5FbGVtZW50LmNwcAkocmV2aXNpb24gMTY5MzUpCisrKyBr
c3ZnMi9zdmcvU1ZHVFNwYW5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQs
NyBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHVFNwYW5FbGVtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKyNpbmNsdWRl
ICJSZW5kZXJTVkdUU3Bhbi5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDcs
NyArNDcsNyBAQCBib29sIFNWR1RTcGFuRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSCiAKIFJl
bmRlck9iamVjdCAqU1ZHVFNwYW5FbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAq
YXJlbmEsIFJlbmRlclN0eWxlICopCiB7Ci0gICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlcklu
bGluZSh0aGlzKTsKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHVFNwYW4odGhpcyk7
CiB9CiAKIC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gMTY5MzUp
CisrKyByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbXksIGludCBtaCwg
aW50IF90eCwgaW50IF90eSwgaW50IHcsIGludCBoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRE
ZWNvcmF0aW9ucyhSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSwg
Ym9vbCBwYWludGVkQ2hpbGRyZW4gPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFyZW50UGFpbnRNZXRob2QoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGludCBf
dHgsIGludCBfdHkpeyBwYWludChpLCBfdHgsIF90eSk7IH0KICAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0UG9pbnQoUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyYgaSwgaW50IHgsIGludCB5LCBpbnQgdHgs
IGludCB0eSk7CiAKICAgICBpbnQgbWFyZ2luQm9yZGVyUGFkZGluZ0xlZnQoKTsKQEAgLTk5LDgg
KzEwMCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGVybWluZVNwYWNpbmdGb3JGbG93Qm94ZXMo
Ym9vbCBsYXN0TGluZSwgUmVuZGVyT2JqZWN0KiBlbmRPYmplY3QpOwogICAgIGludCBnZXRGbG93
U3BhY2luZ1dpZHRoKCk7CiAgICAgYm9vbCBvbkVuZENoYWluKFJlbmRlck9iamVjdCogZW5kT2Jq
ZWN0KTsKLSAgICBpbnQgcGxhY2VCb3hlc0hvcml6b250YWxseShpbnQgeCwgaW50JiBsZWZ0UG9z
aXRpb24sIGludCYgcmlnaHRQb3NpdGlvbiwgYm9vbCYgbmVlZHNXb3JkU3BhY2luZyk7Ci0gICAg
dm9pZCB2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQmIGhlaWdodE9mQmxvY2spOworICAgIHZpcnR1
YWwgaW50IHBsYWNlQm94ZXNIb3Jpem9udGFsbHkoaW50IHgsIGludCYgbGVmdFBvc2l0aW9uLCBp
bnQmIHJpZ2h0UG9zaXRpb24sIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcpOworICAgIHZpcnR1YWwg
dm9pZCB2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQmIGhlaWdodE9mQmxvY2spOwogICAgIHZvaWQg
Y29tcHV0ZUxvZ2ljYWxCb3hIZWlnaHRzKGludCYgbWF4UG9zaXRpb25Ub3AsIGludCYgbWF4UG9z
aXRpb25Cb3R0b20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBtYXhB
c2NlbnQsIGludCYgbWF4RGVzY2VudCwgYm9vbCBzdHJpY3RNb2RlKTsKICAgICB2b2lkIGFkanVz
dE1heEFzY2VudEFuZERlc2NlbnQoaW50JiBtYXhBc2NlbnQsIGludCYgbWF4RGVzY2VudCwKSW5k
ZXg6IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9S
ZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAxNjkzNSkKKysrIHJlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsNyArMjg0LDEyIEBAIHZvaWQgUmVuZGVySW5s
aW5lOjpjYWxjTWluTWF4V2lkdGgoKQogfQogCiBib29sIFJlbmRlcklubGluZTo6cmVxdWlyZXNM
YXllcigpIHsKLSAgICByZXR1cm4gaXNSb290KCkgfHwgaXNSZWxQb3NpdGlvbmVkKCkgfHwgc3R5
bGUoKS0+b3BhY2l0eSgpIDwgMS4wZjsKKyAgICByZXR1cm4gaXNSb290KCkgfHwgaXNSZWxQb3Np
dGlvbmVkKCkgfHwKKyNpZmRlZiBTVkdfU1VQUE9SVAorICAgICAgICAoc3R5bGUoKS0+b3BhY2l0
eSgpIDwgMS4wZiAmJiAhZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSk7CisjZWxzZQorICAgICAg
ICBzdHlsZSgpLT5vcGFjaXR5KCkgPCAxLjBmOworI2VuZGlmIC8vIFNWR19TVVBQT1JUCiB9CiAK
IGludCBSZW5kZXJJbmxpbmU6OndpZHRoKCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11004</attachid>
            <date>2006-10-09 17:22:51 -0700</date>
            <delta_ts>2006-10-10 02:34:32 -0700</delta_ts>
            <desc>incorporating suggestions from hyatt</desc>
            <filename>newtext11.patch</filename>
            <type>text/plain</type>
            <size>55324</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2OTM1KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYyLDEx
ICsxNDYyLDE1IEBACiAJCTkzRjE5QjE2MDgyNDVFNTkwMDFFOUFCQyAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
ICovOyB9OwogCQk5M0YxOUIxNzA4MjQ1RTU5MDAxRTlBQkMgLyogbGliaWN1Y29yZS5keWxpYiBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFEMzFB
MDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovOyB9OwogCQk5M0YxOUIxODA4
MjQ1RTU5MDAxRTlBQkMgLyogbGlieHNsdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MDYzMzA3MDczMUE3NzIwMERCMUZEMSAvKiBsaWJ4
c2x0LmR5bGliICovOyB9OworCQlBNzVFOTZFMDBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElu
bGluZUJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTc1RTk2REUwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLzsgfTsKKwkJ
QTc1RTk2RTEwQUMxMzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RTk2REYwQUMxMzY2RjAw
RUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwICovOyB9OwogCQlBNzYzOEE4QjA5OTU4RUE1
MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTg5MDk5NThFQTUwMDA3RTE0RiAvKiBX
S0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oICovOyB9OwogCQlBNzYzOEE4QzA5OTU4RUE1MDAwN0Ux
NEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QThBMDk5NThFQTUwMDA3RTE0RiAvKiBXS0Rpc3Bs
YWNlbWVudE1hcEZpbHRlci5tICovOyB9OwogCQlBNzYzOEE5MjA5OTU5MkMzMDAwN0UxNEYgLyog
V0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTkxMDk5NTkyQzMwMDA3RTE0RiAvKiBXS0Rp
c3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLzsgfTsKIAkJQTc2MzhBOTcwOTk1OTY1RDAw
MDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8q
IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oICovOyB9OwogCQlBNzYzOEE5ODA5OTU5NjVE
MDAwN0UxNEYgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NjM4QTk2MDk5NTk2NUQwMDA3RTE0
RiAvKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwICovOyB9OworCQlBNzcxQ0IzRTBB
RDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzcxQ0IzQzBBRDMzQ0MyMDBERjlFMjUgLyogUmVu
ZGVyU1ZHSW5saW5lLmggKi87IH07CisJCUE3NzFDQjNGMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5k
ZXJTVkdJbmxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc3MUNCM0QwQUQzM0NDMjAwREY5RTI1IC8qIFJlbmRlclNWR0lubGluZS5jcHAgKi87
IH07CiAJCUE3Qjk3Qjc3MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVy
LmNpa2VybmVsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0I5N0I2NjA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5jaWtl
cm5lbCAqLzsgfTsKIAkJQTdCOTdCNzgwOTc5QzNBMTAwMEU4RUIxIC8qIFdLQ29tcG9uZW50TWVy
Z2VGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3Qjk3QjY3MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVyLmggKi87
IH07CiAJCUE3Qjk3Qjc5MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0NvbXBvbmVudE1lcmdlRmlsdGVy
Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I5N0I2
ODA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5tICovOyB9OwpAQCAt
MTQ4NCw2ICsxNDg4LDEyIEBACiAJCUE3Qjk3Qjg1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxl
VHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3Qjk3Qjc0MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNm
ZXJGaWx0ZXIuY2lrZXJuZWwgKi87IH07CiAJCUE3Qjk3Qjg2MDk3OUMzQTEwMDBFOEVCMSAvKiBX
S1RhYmxlVHJhbnNmZXJGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3Qjk3Qjc1MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNmZXJG
aWx0ZXIuaCAqLzsgfTsKIAkJQTdCOTdCODcwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFu
c2ZlckZpbHRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdCOTdCNzYwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5tICov
OyB9OworCQlBN0M1MTk0OTBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzUxOTQ3MEFDQTZB
RjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5oICovOyB9OworCQlBN0M1MTk0QTBBQ0E2QUYx
MDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDNTE5NDgwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLzsgfTsKKwkJQTdDNTFBNDYwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGlu
ZUZsb3dCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QzUxQTQ0MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi87IH07CisJ
CUE3QzUxQTQ3MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzUxQTQ1MEFDQTc0NDcw
MDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCAqLzsgfTsKKwkJQTdFMUREQkUwQUFFQ0RE
MTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTFEREJDMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5k
ZXJTVkdJbmxpbmVUZXh0LmggKi87IH07CisJCUE3RTFEREJGMEFBRUNERDEwMENBQ0QxQyAvKiBS
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3RTFEREJEMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcCAqLzsgfTsKIAkJQTgwRTZDRTQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBF
NkNCQTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmNwcCAqLzsgfTsKIAkJQTgwRTZD
RTUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQkIwQTE5ODlDQTAwN0ZC
OEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovOyB9OwogCQlBODBFNkNFNjBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0JDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmlt
aXRpdmVWYWx1ZS5oICovOyB9OwpAQCAtNDEzNCwxMSArNDE0NCwxNSBAQAogCQk5M0Y4QjMwNjBB
MzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3Jp
cHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0b3JKUy5wbTsgcGF0aCA9IC4uL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y4QjMwNzBB
MzAwRkVBMDBGNjFBQjggLyogZ2VuZXJhdGUtYmluZGluZ3MucGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5wZXJsOyBuYW1lID0gImdlbmVyYXRlLWJpbmRpbmdzLnBsIjsgcGF0aCA9ICJzY3JpcHRz
L2dlbmVyYXRlLWJpbmRpbmdzLnBsIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNG
OEIzMDgwQTMwMEZFQTAwRjYxQUI4IC8qIElETFN0cnVjdHVyZS5wbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnBlcmw7IG5hbWUgPSBJRExTdHJ1Y3R1cmUucG07IHBhdGggPSBzY3JpcHRzL0lETFN0
cnVjdHVyZS5wbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc1RTk2REUwQUMxMzY2
RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHUm9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzVFOTZERjBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSb290SW5saW5lQm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2MzhBODkwOTk1OEVBNTAwMDdFMTRGIC8qIFdL
RGlzcGxhY2VtZW50TWFwRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzYzOEE4QTA5OTU4RUE1MDAwN0UxNEYgLyogV0tEaXNwbGFjZW1lbnRNYXBGaWx0ZXIubSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdLRGlzcGxhY2VtZW50TWFwRmls
dGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjM4QTkxMDk5NTkyQzMwMDA3
RTE0RiAvKiBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXS0Rpc3BsYWNlbWVudE1hcEZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTc2MzhBOTUwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2
MzhBOTYwOTk1OTY1RDAwMDdFMTRGIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzcxQ0IzQzBBRDMz
Q0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNzcxQ0IzRDBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Qjk3QjY2MDk3OUMzQTEwMDBFOEVCMSAvKiBXS0Nv
bXBvbmVudE1lcmdlRmlsdGVyLmNpa2VybmVsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXS0Nv
bXBvbmVudE1lcmdlRmlsdGVyLmNpa2VybmVsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0I5N0I2NzA5NzlDM0ExMDAwRThFQjEgLyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb21wb25lbnRNZXJnZUZpbHRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I5N0I2ODA5NzlDM0ExMDAwRThFQjEg
LyogV0tDb21wb25lbnRNZXJnZUZpbHRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpj
OyBwYXRoID0gV0tDb21wb25lbnRNZXJnZUZpbHRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNDE1Niw2ICs0MTcwLDEyIEBACiAJCUE3Qjk3Qjc0MDk3OUMzQTEwMDBFOEVCMSAv
KiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIuY2lrZXJuZWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFdLVGFibGVUcmFuc2ZlckZpbHRlci5jaWtlcm5lbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTdCOTdCNzUwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZpbHRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tUYWJsZVRyYW5zZmVyRmlsdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Qjk3Qjc2MDk3OUMzQTEwMDBFOEVC
MSAvKiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2Jq
YzsgcGF0aCA9IFdLVGFibGVUcmFuc2ZlckZpbHRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBN0M1MTk0NzBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHVFNwYW4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTE5NDgwQUNBNkFGMTAwNkUyRkI5IC8qIFJlbmRlclNW
R1RTcGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNW
R1RTcGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTFBNDQwQUNBNzQ0
NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHSW5saW5lRmxvd0JveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBN0M1MUE0NTBBQ0E3NDQ3MDA2RTJGQjkgLyogU1ZHSW5saW5lRmxvd0JveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdJbmxpbmVGbG93Qm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdFMUREQkMwQUFFQ0REMTAwQ0FDRDFDIC8qIFJl
bmRlclNWR0lubGluZVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU1ZHSW5saW5lVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0UxRERC
RDBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkEwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Zh
bHVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVmFs
dWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkIwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENTU0JvcmRlckltYWdlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODBFNkNCQzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZl
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1ByaW1pdGl2ZVZh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODQ2LDYgKzc4NjYsMTYgQEAK
IAkJCQlGQUUwNDE4OTA5NzU5Njk0MDAwNTQwQkUgLyogUmVuZGVyU1ZHSW1hZ2UuaCAqLywKIAkJ
CQk2NTc0M0I1MDA5NzA3NkY4MDAxRTdDRUYgLyogUmVuZGVyU1ZHVGV4dC5jcHAgKi8sCiAJCQkJ
NjU3NDNCNTEwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuaCAqLywKKwkJCQlBN0Ux
RERCQzBBQUVDREQxMDBDQUNEMUMgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5oICovLAorCQkJCUE3
RTFEREJEMEFBRUNERDEwMENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCAqLywKKwkJ
CQlBNzVFOTZERTBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5oICovLAorCQkJ
CUE3NUU5NkRGMEFDMTM2NkYwMEVFMEFGOSAvKiBTVkdSb290SW5saW5lQm94LmNwcCAqLywKKwkJ
CQlBN0M1MTk0NzBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLywKKwkJCQlB
N0M1MTk0ODBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVyU1ZHVFNwYW4uY3BwICovLAorCQkJCUE3
QzUxQTQ0MEFDQTc0NDcwMDZFMkZCOSAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi8sCisJCQkJQTdD
NTFBNDUwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guY3BwICovLAorCQkJCUE3
NzFDQjNDMEFEMzNDQzIwMERGOUUyNSAvKiBSZW5kZXJTVkdJbmxpbmUuaCAqLywKKwkJCQlBNzcx
Q0IzRDBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0ga2NhbnZhczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC05NTM1LDYg
Kzk1NjUsNyBAQAogCQkJCTg1MDY1NkZFMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01NZWRpYUxpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDY1NzAwMEFBQjQ3NjMwMDJEMTVDMCAvKiBET01TdHls
ZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTA2NTcwMjBBQUI0NzYzMDAyRDE1QzAgLyog
RE9NU3R5bGVTaGVldExpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3RTFEREJFMEFBRUNERDEw
MENBQ0QxQyAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzQ3
MDZBQjBBQUNEODA5MDAyQzFENDMgLyogVGV4dERlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg1QUZBODIyMEFBRjUyOEEwMEU4NDMwNSAvKiBET01FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODVDN0Y0OTEwQUFGNzlEQzAwNDAxNEREIC8qIERPTVVJRXZlbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtOTY4MCw2ICs5NzExLDkgQEAKIAkJCQlCMjAxMTEwODBBQjc3NDA1MDBEQjBFNjggLyog
SlNTVkdBRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUzQkY0REIwQUJCNkI1NTAwODY0
N0JCIC8qIERPTU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1M0JGNEVCMEFCQjZFOTcwMDg2
NDdCQiAvKiBET01Ob2RlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTc1RTk2RTAwQUMx
MzY2RjAwRUUwQUY5IC8qIFNWR1Jvb3RJbmxpbmVCb3guaCBpbiBIZWFkZXJzICovLAorCQkJCUE3
QzUxOTQ5MEFDQTZBRjEwMDZFMkZCOSAvKiBSZW5kZXJTVkdUU3Bhbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTdDNTFBNDYwQUNBNzQ0NzAwNkUyRkI5IC8qIFNWR0lubGluZUZsb3dCb3guaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg1QkNCQzEzMEFCQkE4N0QwMDM4MTE2MCAvKiBET01IVE1MRG9jdW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1ND
dXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTFFRTgxMTBBQkNBMzk2MDBB
NkFBMzMgLyogRE9NRXZlbnRFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtOTg3Myw2ICs5
OTA3LDcgQEAKIAkJCQk4NTAwNERBNjBBQ0VFQjVBMDBDNDM4RjYgLyogRE9NU1ZHRG9jdW1lbnRJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUwMDREQTcwQUNFRUI1QTAwQzQzOEY2IC8q
IERPTVNWR0VsbGlwc2VFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCQjU0
MTlGMEFDRERGRTQwMDI4MjBFQiAvKiBSZW5kZXJMaXN0Qm94LmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBNzcxQ0IzRTBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVyU1ZHSW5saW5lLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzkyRjE0MjBBRDE4NUY0MDA2OTFCRDQgLyogUmVuZGVyQ291bnRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTM5MkYxNDYwQUQxODYwQzAwNjkxQkQ0IC8qIENvdW50ZXJSZXNl
dE5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTJGMTRDMEFEMTg2MUIwMDY5MUJENCAvKiBD
b3VudGVyTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDA1OSw3ICsxMDA5NCw2IEBACiAJCQlt
YWluR3JvdXAgPSAwODY3RDY5MUZFODQwMjhGQzAyQUFDMDcgLyogV2ViS2l0ICovOwogCQkJcHJv
ZHVjdFJlZkdyb3VwID0gMDM0NzY4REZGRjM4QTUwNDExREI5QzhCIC8qIFByb2R1Y3RzICovOwog
CQkJcHJvamVjdERpclBhdGggPSAiIjsKLQkJCXByb2plY3RSb290ID0gIiI7CiAJCQl0YXJnZXRz
ID0gKAogCQkJCTkzRjE5OEE1MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlICovLAogCQkJCURE
MDQxRkJFMDlEOUREQkUwMDEwQUYyQSAvKiBEZXJpdmVkIFNvdXJjZXMgKi8sCkBAIC0xMDk1NSw2
ICsxMDk4OSw3IEBACiAJCQkJODUwNjU3MDEwQUFCNDc2MzAwMkQxNUMwIC8qIERPTVN0eWxlU2hl
ZXQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NTA2NTcwMzBBQUI0NzYzMDAyRDE1QzAgLyogRE9N
U3R5bGVTaGVldExpc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMUVCQkJENDBBQUM5Qjg3MDAx
RkU4RTIgLyogQ1NTQ2hhcnNldFJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTdFMUREQkYw
QUFFQ0REMTAwQ0FDRDFDIC8qIFJlbmRlclNWR0lubGluZVRleHQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODVBRkE4MjMwQUFGNTI4QTAwRTg0MzA1IC8qIERPTUV2ZW50Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODVDN0Y0OTIwQUFGNzlEQzAwNDAxNEREIC8qIERPTVVJRXZlbnQubW0gaW4gU291
cmNlcyAqLywKIAkJCQk4NUM3RjVDMDBBQUZCN0NEMDA0MDE0REQgLyogRE9NTXV0YXRpb25FdmVu
dC5tbSBpbiBTb3VyY2VzICovLApAQCAtMTEwODksNiArMTExMjQsOSBAQAogCQkJCUIyMjJGNjlD
MEFCNzcxQjgwMDIyRUZBRCAvKiBKU1NWR0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjIwMTExMDcwQUI3NzQwNTAwREIwRTY4IC8qIEpTU1ZHQUVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODUzQkY0REMwQUJCNkI1NTAwODY0N0JCIC8qIERPTU5vZGUubW0gaW4gU291cmNl
cyAqLywKKwkJCQlBNzVFOTZFMTBBQzEzNjZGMDBFRTBBRjkgLyogU1ZHUm9vdElubGluZUJveC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBN0M1MTk0QTBBQ0E2QUYxMDA2RTJGQjkgLyogUmVuZGVy
U1ZHVFNwYW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTdDNTFBNDcwQUNBNzQ0NzAwNkUyRkI5
IC8qIFNWR0lubGluZUZsb3dCb3guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODVCQ0JDMTQwQUJC
QTg3RDAwMzgxMTYwIC8qIERPTUhUTUxEb2N1bWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUFB
MjFFQ0NBMEFCRjBGQkEwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE4NDE1RjlCMEFDMTBDNUQwMEY3RDBERiAvKiBLQ2FudmFzQ2xpcHBlci5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTExMTM1LDYgKzExMTczLDcgQEAKIAkJCQk4NTAwNEQ5OTBB
Q0VFQUVGMDBDNDM4RjYgLyogRE9NU1ZHRG9jdW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4
NTAwNEQ5QjBBQ0VFQUVGMDBDNDM4RjYgLyogRE9NU1ZHRWxsaXBzZUVsZW1lbnQubW0gaW4gU291
cmNlcyAqLywKIAkJCQlBQkI1NDE5RTBBQ0RERkU0MDAyODIwRUIgLyogUmVuZGVyTGlzdEJveC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBNzcxQ0IzRjBBRDMzQ0MyMDBERjlFMjUgLyogUmVuZGVy
U1ZHSW5saW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTJGMTQ0MEFEMTg1RkUwMDY5MUJE
NCAvKiBSZW5kZXJDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTJGMTRBMEFEMTg2
MTMwMDY5MUJENCAvKiBDb3VudGVyUmVzZXROb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
OTJGMTUwMEFEMTg2MjMwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IGNzcy9zdmcuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9zdmcuY3NzCShyZXZpc2lvbiAx
NjkzNSkKKysrIGNzcy9zdmcuY3NzCSh3b3JraW5nIGNvcHkpCkBAIC00OSwzICs0OSw3IEBAIHN2
Zywgc3ltYm9sLCBtYXJrZXIsIHBhdHRlcm4gewogdGV4dCwgZm9yZWlnbk9iamVjdCB7CiAgICAg
ZGlzcGxheTogYmxvY2sgIWltcG9ydGFudAogfQorCit0ZXh0LCB0c3BhbiB7CisgICB3aGl0ZS1z
cGFjZTogbm93cmFwICFpbXBvcnRhbnQKK30KSW5kZXg6IGRvbS9UZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBkb20vVGV4dC5jcHAJKHJldmlzaW9uIDE2OTM1KQorKysgZG9tL1RleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUg
IlJlbmRlclNWR0lubGluZVRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNDks
NiArMTUwLDExIEBAIGJvb2wgVGV4dDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAKIAog
UmVuZGVyT2JqZWN0ICpUZXh0OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJl
bmRlclN0eWxlICpzdHlsZSkKIHsKKyNpZmRlZiBTVkdfU1VQUE9SVAorICAgIGlmIChwYXJlbnRO
b2RlKCktPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVy
U1ZHSW5saW5lVGV4dCh0aGlzLCBzdHIpOworI2VuZGlmIC8vIFNWR19TVVBQT1JUCisgICAgCiAg
ICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclRleHQodGhpcywgc3RyKTsKIH0KIApJbmRleDog
a2NhbnZhcy9SZW5kZXJTVkdJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVy
U1ZHSW5saW5lLmNwcAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVy
IEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4KKyAqICAgICAgICAgICAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZmRlZiBTVkdf
U1VQUE9SVAorI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5oIgorI2luY2x1ZGUgIlNWR0lubGlu
ZUZsb3dCb3guaCIKKyNpbmNsdWRlICJTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgiCisjaW5j
bHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitSZW5k
ZXJTVkdJbmxpbmU6OlJlbmRlclNWR0lubGluZShOb2RlKiBuKSA6IFJlbmRlcklubGluZShuKSB7
fQorICAgIAorSW5saW5lQm94KiBSZW5kZXJTVkdJbmxpbmU6OmNyZWF0ZUlubGluZUJveChib29s
IG1ha2VQbGFjZUhvbGRlckJveCwgYm9vbCBpc1Jvb3RMaW5lQm94LCBib29sIGlzT25seVJ1bikK
K3sKKyAgICBhc3NlcnQoISghaXNSb290TGluZUJveCAmJiAoaXNSZXBsYWNlZCgpIHx8IG1ha2VQ
bGFjZUhvbGRlckJveCkpKTsKKyAgICBhc3NlcnQoaXNJbmxpbmVGbG93KCkpOworICAgIElubGlu
ZUZsb3dCb3gqIGZsb3dCb3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIFNWR0lubGluZUZsb3dCb3go
dGhpcyk7CisgICAgaWYgKCFtX2ZpcnN0TGluZUJveCkKKyAgICAgICAgbV9maXJzdExpbmVCb3gg
PSBtX2xhc3RMaW5lQm94ID0gZmxvd0JveDsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9sYXN0TGlu
ZUJveC0+c2V0TmV4dExpbmVCb3goZmxvd0JveCk7CisgICAgICAgIGZsb3dCb3gtPnNldFByZXZp
b3VzTGluZUJveChtX2xhc3RMaW5lQm94KTsKKyAgICAgICAgbV9sYXN0TGluZUJveCA9IGZsb3dC
b3g7CisgICAgfQorICAgICAgICAKKyAgICByZXR1cm4gZmxvd0JveDsKK30KKworfQorCisjZW5k
aWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmUuaAkocmV2aXNpb24gMCkKKysrIGtjYW52
YXMvUmVuZGVyU1ZHSW5saW5lLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisg
KiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+
CisgKiAgICAgICAgICAgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIgSW5jLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwK
KyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRl
clNWR0lubGluZV9ICisjZGVmaW5lIFJlbmRlclNWR0lubGluZV9ICisKKyNpZmRlZiBTVkdfU1VQ
UE9SVAorI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBSZW5kZXJTVkdJbmxpbmUgOiBwdWJsaWMgUmVuZGVySW5saW5lIHsKK3B1YmxpYzoKKyAg
ICAgICAgUmVuZGVyU1ZHSW5saW5lKE5vZGUqKTsKKyAgICAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR0lubGluZSI7IH0KKyAgICAg
ICAgdmlydHVhbCBJbmxpbmVCb3gqIGNyZWF0ZUlubGluZUJveChib29sIG1ha2VQbGFjZUhvbGRl
ckJveCwgYm9vbCBpc1Jvb3RMaW5lQm94LCBib29sIGlzT25seVJ1biA9IGZhbHNlKTsKKyAgICAg
ICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIH07
Cit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorI2VuZGlmIC8vICFSZW5kZXJTVkdUU3Bhbl9I
CkluZGV4OiBrY2FudmFzL1JlbmRlclNWR0lubGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtj
YW52YXMvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDApCisrKyBrY2FudmFzL1Jl
bmRlclNWR0lubGluZVRleHQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56
PgorICogICAgICAgICAgIChDKSAyMDA2IEFwcGxlIENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
CisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmZGVmIFNWR19T
VVBQT1JUCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmVU
ZXh0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJLQ2FudmFz
UmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCisjaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1JlbmRl
clNWR0lubGluZVRleHQ6OlJlbmRlclNWR0lubGluZVRleHQoTm9kZSogbiwgU3RyaW5nSW1wbCog
c3RyKSAKKyAgICA6IFJlbmRlclRleHQobiwgc3RyKSB7fQorCit2b2lkIFJlbmRlclNWR0lubGlu
ZVRleHQ6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQg
dHkpCit7CisgICAgRmxvYXRSZWN0IGFic29sdXRlUmVjdCA9IGFic29sdXRlVHJhbnNmb3JtKCku
bWFwUmVjdChGbG9hdFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSkpOworICAgIHJlY3Rz
LmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUmVjdCkpOworfQorCitJbnRSZWN0IFJl
bmRlclNWR0lubGluZVRleHQ6OnNlbGVjdGlvblJlY3QoKQoreworICAgIEludFJlY3QgcmVjdCA9
IFJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3QoKTsKKyAgICByZWN0ID0gcGFyZW50KCktPmFic29s
dXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZWN0KTsKKyAgICByZXR1cm4gcmVjdDsKK30KKworfQor
CisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lVGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCShyZXZpc2lv
biAwKQorKysga2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2pl
Y3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50
LmNhbnRlcmJ1cnkuYWMubno+CisgKiAgICAgICAgICAgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIg
SW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAq
LworCisjaWZuZGVmIFJlbmRlclNWR0lubGluZVRleHRfSAorI2RlZmluZSBSZW5kZXJTVkdJbmxp
bmVUZXh0X0gKKworI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJSZW5kZXJUZXh0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlbmRlclNWR0lubGluZVRleHQgOiBwdWJs
aWMgUmVuZGVyVGV4dCB7CitwdWJsaWM6CisgICAgUmVuZGVyU1ZHSW5saW5lVGV4dChOb2RlKiwg
U3RyaW5nSW1wbCopOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0
IHsgcmV0dXJuICJSZW5kZXJTVkdJbmxpbmVUZXh0IjsgfQorICAgIHZpcnR1YWwgdm9pZCBhYnNv
bHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KTsKKyAgICB2
aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBJbnRSZWN0IHNlbGVjdGlvblJlY3QoKTsKK307Cit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9S
VAorCisjZW5kaWYgLy8gIVJlbmRlclNWR0lubGluZVRleHRfSApJbmRleDoga2NhbnZhcy9SZW5k
ZXJTVkdUU3Bhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdUU3Bhbi5jcHAJ
KHJldmlzaW9uIDApCisrKyBrY2FudmFzL1JlbmRlclNWR1RTcGFuLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
cHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0
dWRlbnQuY2FudGVyYnVyeS5hYy5uej4KKyAqICAgICAgICAgICAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisg
KgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZmRlZiBTVkdfU1VQUE9SVAorI2luY2x1
ZGUgIlJlbmRlclNWR1RTcGFuLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0Rldmlj
ZS5oIgorI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIKKyNpbmNsdWRlICJTVkdJbmxpbmVG
bG93Qm94LmgiCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiU1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aExpc3QuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworICAgIAorUmVuZGVyU1ZHVFNwYW46OlJlbmRlclNWR1RTcGFuKE5v
ZGUqIG4pIDogUmVuZGVyU1ZHSW5saW5lKG4pIHt9CisKK3ZvaWQgUmVuZGVyU1ZHVFNwYW46OmFi
c29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCit7Cisg
ICAgSW5saW5lRmxvd0JveCogaW5pdEZsb3cgPSBmaXJzdExpbmVCb3goKTsKKyAgICBGbG9hdFJl
Y3QgYm91bmRzKHR4ICsgaW5pdEZsb3ctPnhQb3MoKSwgdHkgKyBpbml0Rmxvdy0+eVBvcygpLCB3
aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoYWJz
b2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGJvdW5kcykpKTsKK30KKworCit9CisKKyNlbmRpZiAv
LyBTVkdfU1VQUE9SVApJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdUU3Bhbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtjYW52YXMvUmVuZGVyU1ZHVFNwYW4uaAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMvUmVu
ZGVyU1ZHVFNwYW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4KKyAqICAg
ICAgICAgICAoQykgMjAwNiBBcHBsZSBDb21wdXRlciBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUmVuZGVyU1ZHVFNw
YW5fSAorI2RlZmluZSBSZW5kZXJTVkdUU3Bhbl9ICisKKyNpZmRlZiBTVkdfU1VQUE9SVAorI2lu
Y2x1ZGUgIlJlbmRlclNWR0lubGluZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBS
ZW5kZXJTVkdUU3BhbiA6IHB1YmxpYyBSZW5kZXJTVkdJbmxpbmUgeworcHVibGljOgorICAgIFJl
bmRlclNWR1RTcGFuKE5vZGUqKTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHVFNwYW4iOyB9CisgICAgdmlydHVhbCB2b2lkIGFi
c29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpOworfTsK
K30KKworI2VuZGlmIC8vIFNWR19TVVBQT1JUCisjZW5kaWYgLy8gIVJlbmRlclNWR1RTcGFuX0gK
SW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9S
ZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNpb24gMTY5MzUpCisrKyBrY2FudmFzL1JlbmRlclNWR1Rl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICogICAgICAgICAgICAgICAyMDA2IEFsZXhh
bmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5vcmc+CisgKiAgICAgICAgICAgICAgIDIwMDYgT2xp
dmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI2LDEyNCArMjcsMjYgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJLQ2FudmFzQ2xpcHBlci5o
IgotI2luY2x1ZGUgIktDYW52YXNNYXNrZXIuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5n
U3R5bGUuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVu
Z3RoTGlzdC5oIgogI2luY2x1ZGUgIlNWR1RleHRFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHUm9v
dElubGluZUJveC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1SZW5kZXJTVkdUZXh0OjpSZW5kZXJTVkdUZXh0KFNWR1RleHRFbGVtZW50ICpub2Rl
KSAKK1JlbmRlclNWR1RleHQ6OlJlbmRlclNWR1RleHQoU1ZHVGV4dEVsZW1lbnQqIG5vZGUpIAog
ICAgIDogUmVuZGVyQmxvY2sobm9kZSkKIHsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNW
R1RleHQ6OnRyYW5zbGF0aW9uVG9wVG9CYXNlbGluZSgpCi17Ci0gICAgaW50IG9mZnNldCA9IGJh
c2VsaW5lUG9zaXRpb24odHJ1ZSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgp
LnRyYW5zbGF0ZSgwLCAtb2Zmc2V0KTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Rl
eHQ6OnRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpCi17Ci0gICAgU1ZHVGV4dEVsZW1lbnQgKnRl
eHQgPSBzdGF0aWNfY2FzdDxTVkdUZXh0RWxlbWVudCo+KGVsZW1lbnQoKSk7Ci0KLSAgICBTVkdM
ZW5ndGgqIHhPZmZzZXQgPSB0ZXh0LT54KCktPmdldEZpcnN0KCkuZ2V0KCk7Ci0gICAgU1ZHTGVu
Z3RoKiB5T2Zmc2V0ID0gdGV4dC0+eSgpLT5nZXRGaXJzdCgpLmdldCgpOwotCi0gICAgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZSh4T2Zmc2V0ID8geE9mZnNldC0+dmFsdWUoKSA6
IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5T2Zmc2V0ID8geU9m
ZnNldC0+dmFsdWUoKSA6IDApOwotfQotCi12b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpCi17Ci0gICAgaWYgKHBh
aW50SW5mby5wLT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEtS
ZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgpOwotICAgIEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KiBjb250ZXh0ID0gZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpOwotICAg
IGJvb2wgc2hvdWxkUG9wQ29udGV4dCA9IGZhbHNlOwotICAgIGlmIChjb250ZXh0KQotICAgICAg
ICBwYWludEluZm8ucC0+c2F2ZSgpOwotICAgIGVsc2UgewotICAgICAgICAvLyBOZWVkIHRvIHNl
dCB1cCBLQ2FudmFzIHJlbmRlcmluZyBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRvbmUuCi0g
ICAgICAgIGNvbnRleHQgPSBwYWludEluZm8ucC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4
dCgpOwotICAgICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KGNvbnRleHQpOwotICAgICAgICBzaG91
bGRQb3BDb250ZXh0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgY29udGV4dC0+Y29uY2F0Q1RN
KGxvY2FsVHJhbnNmb3JtKCkpOwotICAgIGNvbnRleHQtPmNvbmNhdENUTShBZmZpbmVUcmFuc2Zv
cm0oKS50cmFuc2xhdGUocGFyZW50WCwgcGFyZW50WSkpOwotICAgIGNvbnRleHQtPmNvbmNhdENU
TSh0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKSk7Ci0gICAgY29udGV4dC0+Y29uY2F0Q1RNKHRy
YW5zbGF0aW9uVG9wVG9CYXNlbGluZSgpKTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdC
b3goMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpOwotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBz
dmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgICAgICAgICAKLSAgICBpZiAoS0Nh
bnZhc0NsaXBwZXIqIGNsaXBwZXIgPSBnZXRDbGlwcGVyQnlJZChkb2N1bWVudCgpLCBzdmdTdHls
ZS0+Y2xpcFBhdGgoKS5zdWJzdHJpbmcoMSkpKQotICAgICAgICBjbGlwcGVyLT5hcHBseUNsaXAo
Ym91bmRpbmdCb3gpOwotCi0gICAgaWYgKEtDYW52YXNNYXNrZXIqIG1hc2tlciA9IGdldE1hc2tl
ckJ5SWQoZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPm1hc2tFbGVtZW50KCkuc3Vic3RyaW5nKDEpKSkK
LSAgICAgICAgbWFza2VyLT5hcHBseU1hc2soYm91bmRpbmdCb3gpOwotCi0gICAgS0NhbnZhc0Zp
bHRlciogZmlsdGVyID0gZ2V0RmlsdGVyQnlJZChkb2N1bWVudCgpLCBzdmdTdHlsZS0+ZmlsdGVy
KCkuc3Vic3RyaW5nKDEpKTsKLSAgICBpZiAoZmlsdGVyKQotICAgICAgICBmaWx0ZXItPnByZXBh
cmVGaWx0ZXIoYm91bmRpbmdCb3gpOwotICAgICAgICAKLSAgICBPd25QdHI8R3JhcGhpY3NDb250
ZXh0PiBjKGRldmljZS0+Y3VycmVudENvbnRleHQoKS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkp
OwotICAgIFBhaW50SW5mbyBwaSA9IHBhaW50SW5mbzsKLSAgICBwaS5wID0gYy5nZXQoKTsKLSAg
ICBwaS5yID0gKHRyYW5zbGF0aW9uVG9wVG9CYXNlbGluZSgpICogdHJhbnNsYXRpb25Gb3JBdHRy
aWJ1dGVzKCkgKiBhYnNvbHV0ZVRyYW5zZm9ybSgpKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5m
by5yKTsKLQotICAgIGZsb2F0IG9wYWNpdHkgPSBzdHlsZSgpLT5vcGFjaXR5KCk7Ci0gICAgaWYg
KG9wYWNpdHkgPCAxLjBmKQotICAgICAgICAvLyBGSVhNRTogb25jZSBSZW5kZXJTVkdUZXh0Ojpy
ZWxhdGl2ZUJCb3goKSBpcyBmaXhlZCwgY2xpcHBpbmcgdG8gdGhlIGN1cnJlbnQgYmJveCBoZXJl
IHdpbGwgc2F2ZSB0aW1lIHdoZW4gcmVuZGVyaW5nIHRleHQgdy8gb3BhY2l0eQotICAgICAgICBj
LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwotCi0gICAgS1JlbmRlcmluZ1BhaW50
U2VydmVyICpmaWxsUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWludFNl
cnZlcihzdHlsZSgpLCB0aGlzKTsKLSAgICBpZiAoZmlsbFBhaW50U2VydmVyKSB7Ci0gICAgICAg
IGZpbGxQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KHRydWUpOwotICAgICAgICBpZiAoZmls
bFBhaW50U2VydmVyLT5zZXR1cChjb250ZXh0LCB0aGlzLCBBUFBMWV9UT19GSUxMKSkgewotICAg
ICAgICAgICAgUmVuZGVyQmxvY2s6OnBhaW50KHBpLCAwLCAwKTsKLSAgICAgICAgICAgIGZpbGxQ
YWludFNlcnZlci0+dGVhcmRvd24oY29udGV4dCwgdGhpcywgQVBQTFlfVE9fRklMTCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZmlsbFBhaW50U2VydmVyLT5zZXRQYWludGluZ1RleHQoZmFsc2UpOwot
ICAgIH0KLSAgICAKLSAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnN0cm9rZVBhaW50U2VydmVy
ID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihzdHlsZSgpLCB0aGlzKTsK
LSAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXIt
PnNldFBhaW50aW5nVGV4dCh0cnVlKTsKLSAgICAgICAgaWYgKHN0cm9rZVBhaW50U2VydmVyLT5z
ZXR1cChjb250ZXh0LCB0aGlzLCBBUFBMWV9UT19TVFJPS0UpKSB7Ci0gICAgICAgICAgICBSZW5k
ZXJCbG9jazo6cGFpbnQocGksIDAsIDApOwotICAgICAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXIt
PnRlYXJkb3duKGNvbnRleHQsIHRoaXMsIEFQUExZX1RPX1NUUk9LRSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dChmYWxzZSk7Ci0gICAgfQot
Ci0gICAgaWYgKGZpbHRlcikKLSAgICAgICAgZmlsdGVyLT5hcHBseUZpbHRlcihib3VuZGluZ0Jv
eCk7Ci0KLSAgICBpZiAob3BhY2l0eSA8IDEuMGYpCi0gICAgICAgIGMtPmVuZFRyYW5zcGFyZW5j
eUxheWVyKCk7Ci0KLSAgICAvLyByZXN0b3JlIGRyYXdpbmcgc3RhdGUKLSAgICBpZiAoIXNob3Vs
ZFBvcENvbnRleHQpCi0gICAgICAgIHBhaW50SW5mby5wLT5yZXN0b3JlKCk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGRldmljZS0+cG9wQ29udGV4dCgpOwotICAgICAgICBkZWxldGUgY29udGV4dDsK
LSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyU1ZHVGV4dDo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJl
Y3QoSW50UmVjdCYgciwgYm9vbCBmKQogewotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0g
PSB0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKSAqIHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygp
ICogYWJzb2x1dGVUcmFuc2Zvcm0oKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0g
bG9jYWxUcmFuc2Zvcm0oKTsKICAgICByID0gdHJhbnNmb3JtLm1hcFJlY3Qocik7Ci0gICAgCiAg
ICAgUmVuZGVyQ29udGFpbmVyOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChyLCBmKTsKKyAg
ICByID0gdHJhbnNmb3JtLmludmVydCgpLm1hcFJlY3Qocik7CiB9CiAKIGJvb2wgUmVuZGVyU1ZH
VGV4dDo6cmVxdWlyZXNMYXllcigpCkBAIC0xNjAsOSArNjMsMTIgQEAgdm9pZCBSZW5kZXJTVkdU
ZXh0OjpsYXlvdXQoKQogICAgIGJvb2wgY2hlY2tGb3JSZXBhaW50ID0gY2hlY2tGb3JSZXBhaW50
RHVyaW5nTGF5b3V0KCk7CiAgICAgaWYgKGNoZWNrRm9yUmVwYWludCkKICAgICAgICAgb2xkQm91
bmRzID0gbV9hYnNvbHV0ZUJvdW5kczsKLQorICAgIFNWR1RleHRFbGVtZW50KiB0ZXh0ID0gc3Rh
dGljX2Nhc3Q8U1ZHVGV4dEVsZW1lbnQqPihlbGVtZW50KCkpOworICAgIGludCB4T2Zmc2V0ID0g
dGV4dC0+eCgpLT5nZXRGaXJzdCgpID8gdGV4dC0+eCgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDog
MDsKKyAgICBpbnQgeU9mZnNldCA9IHRleHQtPnkoKS0+Z2V0Rmlyc3QoKSA/IHRleHQtPnkoKS0+
Z2V0Rmlyc3QoKS0+dmFsdWUoKSA6IDA7CisgICAgdGhpcy0+c2V0UG9zKHhPZmZzZXQsIHlPZmZz
ZXQpOwogICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKLQorICAgIAogICAgIG1fYWJzb2x1dGVC
b3VuZHMgPSBnZXRBYnNvbHV0ZVJlcGFpbnRSZWN0KCk7CiAKICAgICBib29sIHJlcGFpbnRlZCA9
IGZhbHNlOwpAQCAtMTcyLDExICs3OCwyNSBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OmxheW91dCgp
CiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCitJbmxpbmVCb3gqIFJlbmRlclNWR1Rl
eHQ6OmNyZWF0ZUlubGluZUJveChib29sIG1ha2VQbGFjZUhvbGRlckJveCwgYm9vbCBpc1Jvb3RM
aW5lQm94LCBib29sIGlzT25seVJ1bikKK3sKKyAgICBhc3NlcnQoIWlzSW5saW5lRmxvdygpKTsK
KyAgICBJbmxpbmVGbG93Qm94KiBmbG93Qm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBTVkdSb290
SW5saW5lQm94KHRoaXMpOworICAgIAorICAgIGlmICghbV9maXJzdExpbmVCb3gpCisgICAgICAg
IG1fZmlyc3RMaW5lQm94ID0gbV9sYXN0TGluZUJveCA9IGZsb3dCb3g7CisgICAgZWxzZSB7Cisg
ICAgICAgIG1fbGFzdExpbmVCb3gtPnNldE5leHRMaW5lQm94KGZsb3dCb3gpOworICAgICAgICBm
bG93Qm94LT5zZXRQcmV2aW91c0xpbmVCb3gobV9sYXN0TGluZUJveCk7CisgICAgICAgIG1fbGFz
dExpbmVCb3ggPSBmbG93Qm94OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmxvd0JveDsKK30K
KwogYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludChOb2RlSW5mbyYgaW5mbywgaW50IF94
LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikK
IHsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdG90YWxUcmFuc2Zvcm0gPSB0cmFuc2xhdGlvbkZvckF0
dHJpYnV0ZXMoKTsKLSAgICB0b3RhbFRyYW5zZm9ybSAqPSB0cmFuc2xhdGlvblRvcFRvQmFzZWxp
bmUoKTsKLSAgICB0b3RhbFRyYW5zZm9ybSAqPSBhYnNvbHV0ZVRyYW5zZm9ybSgpOworICAgIEFm
ZmluZVRyYW5zZm9ybSB0b3RhbFRyYW5zZm9ybSA9IGFic29sdXRlVHJhbnNmb3JtKCk7CiAgICAg
ZG91YmxlIGxvY2FsWCwgbG9jYWxZOwogICAgIHRvdGFsVHJhbnNmb3JtLmludmVydCgpLm1hcChf
eCwgX3ksICZsb2NhbFgsICZsb2NhbFkpOwogICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9kZUF0
UG9pbnQoaW5mbywgKGludClsb2NhbFgsIChpbnQpbG9jYWxZLCBfdHgsIF90eSwgaGl0VGVzdEFj
dGlvbik7CkBAIC0xODQsMTEgKzEwNCwzMyBAQCBib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdFBv
aW50KE5vZGVJbmZvCiAKIHZvaWQgUmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8
SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICBBZmZpbmVUcmFuc2Zvcm0g
bWF0ID0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7Ci0gICAgbWF0ICo9IHRyYW5zbGF0aW9u
VG9wVG9CYXNlbGluZSgpOwotICAgIG1hdCAqPSBhYnNvbHV0ZVRyYW5zZm9ybSgpOworICAgIGlm
ICghbV9maXJzdExpbmVCb3gpCisgICAgICAgIHJldHVybjsKKyAgICBBZmZpbmVUcmFuc2Zvcm0g
Ym94VHJhbnNmb3JtID0gbV9maXJzdExpbmVCb3gtPm9iamVjdCgpLT5hYnNvbHV0ZVRyYW5zZm9y
bSgpOworICAgIEZsb2F0UmVjdCBib3hSZWN0ID0gRmxvYXRSZWN0KHhQb3MoKSArIG1fZmlyc3RM
aW5lQm94LT54UG9zKCksIHlQb3MoKSArIG1fZmlyc3RMaW5lQm94LT55UG9zKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9maXJzdExpbmVCb3gtPndpZHRoKCksIG1fZmly
c3RMaW5lQm94LT5oZWlnaHQoKSk7CisgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3Qo
Ym94VHJhbnNmb3JtLm1hcFJlY3QoYm94UmVjdCkpKTsKK30KKwordm9pZCBSZW5kZXJTVkdUZXh0
OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IF90eCwgaW50IF90eSkKK3sgICAgCisg
ICAgS1JlbmRlcmluZ0RldmljZSogZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7CisgICAgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8gcGkgPSBwYWludEluZm87CisgICAgT3duUHRyPEdyYXBoaWNz
Q29udGV4dD4gYyhkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4
dCgpKTsKKyAgICBwaS5wID0gYy5nZXQoKTsKKyAgICBwaS5yID0gKGFic29sdXRlVHJhbnNmb3Jt
KCkpLmludmVydCgpLm1hcFJlY3QocGFpbnRJbmZvLnIpOworICAgIFJlbmRlckJsb2NrOjpwYWlu
dChwaSwgX3R4LCBfdHkpOworfQogCi0gICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3Qo
bWF0Lm1hcFJlY3QoRmxvYXRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSkpKTsKK0Zsb2F0
UmVjdCBSZW5kZXJTVkdUZXh0OjpyZWxhdGl2ZUJCb3goYm9vbCBpbmNsdWRlU3Ryb2tlKSBjb25z
dAoreworICAgIEZsb2F0UmVjdCBib3VuZHNSZWN0OworICAgIElubGluZUJveCogYm94ID0gbV9m
aXJzdExpbmVCb3g7CisgICAgaWYgKGJveCkgeworICAgICAgICBib3VuZHNSZWN0ID0gRmxvYXRS
ZWN0KHhQb3MoKSArIGJveC0+eFBvcygpLCB5UG9zKCkgKyBib3gtPnlQb3MoKSwgYm94LT53aWR0
aCgpLCBib3gtPmhlaWdodCgpKTsKKyAgICAgICAgYm91bmRzUmVjdCA9IGxvY2FsVHJhbnNmb3Jt
KCkubWFwUmVjdChib3VuZHNSZWN0KTsKKyAgICB9CisgICAgcmV0dXJuIGJvdW5kc1JlY3Q7CiB9
CiAKIH0KSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52
YXMvUmVuZGVyU1ZHVGV4dC5oCShyZXZpc2lvbiAxNjkzNSkKKysrIGtjYW52YXMvUmVuZGVyU1ZH
VGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwyNSArMzQsMjIgQEAgY2xhc3MgU1ZHVGV4dEVs
ZW1lbnQ7CiBjbGFzcyBSZW5kZXJTVkdUZXh0IDogcHVibGljIFJlbmRlckJsb2NrCiB7CiBwdWJs
aWM6Ci0gICAgUmVuZGVyU1ZHVGV4dChTVkdUZXh0RWxlbWVudCAqbm9kZSk7CisgICAgUmVuZGVy
U1ZHVGV4dChTVkdUZXh0RWxlbWVudCogbm9kZSk7CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIg
KnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHVGV4dCI7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKTsKICAg
ICAKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldExvY2FsVHJhbnNmb3Jt
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNm
b3JtOyB9Ci0gICAgCisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYgaSwgaW50IF90
eCwgaW50IF90eSk7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KE5vZGVJbmZvJiwgaW50
IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7Ci0KICAgICB2aXJ0dWFs
IHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7Ci0K
ICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVjdCYgciwg
Ym9vbCBmKTsKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpOwogICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKTsKLSAgICAKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZWxhdGl2ZUJCb3go
Ym9vbCBpbmNsdWRlU3Ryb2tlID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBJbmxpbmVCb3gq
IGNyZWF0ZUlubGluZUJveChib29sIG1ha2VQbGFjZUhvbGRlckJveCwgYm9vbCBpc1Jvb3RMaW5l
Qm94LCBib29sIGlzT25seVJ1biA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNM
YXllcigpIHsgcmV0dXJuIGZhbHNlOyB9CiAgcHJpdmF0ZToKLSAgICBBZmZpbmVUcmFuc2Zvcm0g
dHJhbnNsYXRpb25Ub3BUb0Jhc2VsaW5lKCk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0
aW9uRm9yQXR0cmlidXRlcygpOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKICAg
ICBJbnRSZWN0IG1fYWJzb2x1dGVCb3VuZHM7CiB9OwpJbmRleDoga2NhbnZhcy9TVkdJbmxpbmVG
bG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1NWR0lubGluZUZsb3dCb3guY3BwCShy
ZXZpc2lvbiAwKQorKysga2NhbnZhcy9TVkdJbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyOTQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBz
dHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgKiAgICAgICAgICAgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgor
ICoKKyAqLworCisKKyNpZmRlZiBTVkdfU1VQUE9SVAorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU1ZHSW5saW5lRmxvd0JveC5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2Uu
aCIKKyNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlICJLQ2FudmFz
Q2xpcHBlci5oIgorI2luY2x1ZGUgIktDYW52YXNNYXNrZXIuaCIKKyNpbmNsdWRlICJJbmxpbmVU
ZXh0Qm94LmgiCisjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgorI2luY2x1ZGUgIlNWR1RleHRQ
b3NpdGlvbmluZ0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGhMaXN0LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCit1c2luZyBu
YW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgU1ZHSW5saW5lRmxv
d0JveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBp
bnQgdHkpIAoreworICAgIHBhaW50U1ZHSW5saW5lRmxvdyh0aGlzLCBvYmplY3QoKSwgcGFpbnRJ
bmZvLCB0eCwgdHkpOworfQorCitpbnQgU1ZHSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0hvcml6
b250YWxseShpbnQgeCwgaW50JiBsZWZ0UG9zaXRpb24sIGludCYgcmlnaHRQb3NpdGlvbiwgYm9v
bCYgbmVlZHNXb3JkU3BhY2luZykKK3sKKyAgICByZXR1cm4gcGxhY2VTVkdGbG93SG9yaXpvbnRh
bGx5KHRoaXMsIHgsIGxlZnRQb3NpdGlvbiwgcmlnaHRQb3NpdGlvbiwgbmVlZHNXb3JkU3BhY2lu
Zyk7Cit9CisKK3ZvaWQgU1ZHSW5saW5lRmxvd0JveDo6dmVydGljYWxseUFsaWduQm94ZXMoaW50
JiBoZWlnaHRPZkJsb2NrKQoreworICAgIHBsYWNlU1ZHRmxvd1ZlcnRpY2FsbHkodGhpcywgaGVp
Z2h0T2ZCbG9jayk7Cit9CisKK3ZvaWQgcGFpbnRTVkdJbmxpbmVGbG93KElubGluZUZsb3dCb3gq
IGZsb3csIFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFp
bnRJbmZvLCBpbnQgdHgsIGludCB0eSkKK3sKKyAgICBpZiAocGFpbnRJbmZvLnAtPnBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEtSZW5kZXJpbmdEZXZpY2Uq
IGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgpOworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
KiBjb250ZXh0ID0gZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpOworICAgIGJvb2wgc2hvdWxkUG9w
Q29udGV4dCA9IGZhbHNlOworICAgIGlmIChjb250ZXh0KQorICAgICAgICBwYWludEluZm8ucC0+
c2F2ZSgpOworICAgIGVsc2UgeworICAgICAgICAvLyBOZWVkIHRvIHNldCB1cCBLQ2FudmFzIHJl
bmRlcmluZyBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRvbmUuCisgICAgICAgIGNvbnRleHQg
PSBwYWludEluZm8ucC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpOworICAgICAgICBk
ZXZpY2UtPnB1c2hDb250ZXh0KGNvbnRleHQpOworICAgICAgICBzaG91bGRQb3BDb250ZXh0ID0g
dHJ1ZTsKKyAgICB9CisgICAgCisKKyAgICBjb250ZXh0LT5jb25jYXRDVE0ob2JqZWN0LT5sb2Nh
bFRyYW5zZm9ybSgpKTsKKyAgICAKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3godHgrZmxvdy0+
eFBvcygpICwgdHkrZmxvdy0+eVBvcygpLCBmbG93LT53aWR0aCgpLCBmbG93LT5oZWlnaHQoKSk7
CisgICAgCisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gb2JqZWN0LT5zdHls
ZSgpLT5zdmdTdHlsZSgpOworICAgIGlmIChLQ2FudmFzQ2xpcHBlciogY2xpcHBlciA9IGdldENs
aXBwZXJCeUlkKG9iamVjdC0+ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmNsaXBQYXRoKCkuc3Vic3Ry
aW5nKDEpKSkKKyAgICAgICAgY2xpcHBlci0+YXBwbHlDbGlwKGJvdW5kaW5nQm94KTsKKyAgICAK
KyAgICBpZiAoS0NhbnZhc01hc2tlciogbWFza2VyID0gZ2V0TWFza2VyQnlJZChvYmplY3QtPmRv
Y3VtZW50KCksIHN2Z1N0eWxlLT5tYXNrRWxlbWVudCgpLnN1YnN0cmluZygxKSkpCisgICAgICAg
IG1hc2tlci0+YXBwbHlNYXNrKGJvdW5kaW5nQm94KTsKKyAgICAKKyAgICBLQ2FudmFzRmlsdGVy
KiBmaWx0ZXIgPSBnZXRGaWx0ZXJCeUlkKG9iamVjdC0+ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmZp
bHRlcigpLnN1YnN0cmluZygxKSk7CisgICAgaWYgKGZpbHRlcikKKyAgICAgICAgZmlsdGVyLT5w
cmVwYXJlRmlsdGVyKGJvdW5kaW5nQm94KTsKKyAgICAKKyAgICBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyBwaSA9IHBhaW50SW5mbzsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjKGRldmlj
ZS0+Y3VycmVudENvbnRleHQoKS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkpOworICAgIHBpLnAg
PSBjLmdldCgpOworICAgIGlmICghZmxvdy0+aXNSb290SW5saW5lQm94KCkpCisgICAgICAgIHBp
LnIgPSAob2JqZWN0LT5sb2NhbFRyYW5zZm9ybSgpKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5m
by5yKTsKKyAgICAKKyAgICBmbG9hdCBvcGFjaXR5ID0gb2JqZWN0LT5zdHlsZSgpLT5vcGFjaXR5
KCk7CisgICAgaWYgKG9wYWNpdHkgPCAxLjBmKSB7CisgICAgICAgIGMtPmNsaXAoZW5jbG9zaW5n
SW50UmVjdChib3VuZGluZ0JveCkpOworICAgICAgICBjLT5iZWdpblRyYW5zcGFyZW5jeUxheWVy
KG9wYWNpdHkpOworICAgIH0KKyAgICAKKyAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIqIGZpbGxQ
YWludFNlcnZlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50U2VydmVyKG9iamVjdC0+
c3R5bGUoKSwgb2JqZWN0KTsKKyAgICBpZiAoZmlsbFBhaW50U2VydmVyKSB7CisgICAgICAgIGZp
bGxQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KHRydWUpOworICAgICAgICBpZiAoZmlsbFBh
aW50U2VydmVyLT5zZXR1cChjb250ZXh0LCBvYmplY3QsIEFQUExZX1RPX0ZJTEwpKSB7CisgICAg
ICAgICAgICBmbG93LT5JbmxpbmVGbG93Qm94OjpwYWludChwaSwgdHgsIHR5KTsKKyAgICAgICAg
ICAgIGZpbGxQYWludFNlcnZlci0+dGVhcmRvd24oY29udGV4dCwgb2JqZWN0LCBBUFBMWV9UT19G
SUxMKTsKKyAgICAgICAgfQorICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4
dChmYWxzZSk7CisgICAgfQorICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciogc3Ryb2tlUGFpbnRT
ZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKG9iamVjdC0+c3R5
bGUoKSwgb2JqZWN0KTsKKyAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKKyAgICAgICAgc3Ry
b2tlUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dCh0cnVlKTsKKyAgICAgICAgaWYgKHN0cm9r
ZVBhaW50U2VydmVyLT5zZXR1cChjb250ZXh0LCBvYmplY3QsIEFQUExZX1RPX1NUUk9LRSkpIHsK
KyAgICAgICAgICAgIGZsb3ctPklubGluZUZsb3dCb3g6OnBhaW50KHBpLCB0eCwgdHkpOworICAg
ICAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPnRlYXJkb3duKGNvbnRleHQsIG9iamVjdCwgQVBQ
TFlfVE9fU1RST0tFKTsKKyAgICAgICAgfQorICAgICAgICBzdHJva2VQYWludFNlcnZlci0+c2V0
UGFpbnRpbmdUZXh0KGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgaWYgKGZpbHRlcikgCisgICAg
ICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIoYm91bmRpbmdCb3gpOworICAgIAorICAgIGlmIChvcGFj
aXR5IDwgMS4wZikKKyAgICAgICAgYy0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKworICAgIC8v
IHJlc3RvcmUgZHJhd2luZyBzdGF0ZQorICAgIGlmICghc2hvdWxkUG9wQ29udGV4dCkKKyAgICAg
ICAgcGFpbnRJbmZvLnAtPnJlc3RvcmUoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZGV2aWNlLT5w
b3BDb250ZXh0KCk7CisgICAgICAgIGRlbGV0ZSBjb250ZXh0OworICAgIH0KK30KKworc3RhdGlj
IGJvb2wgdHJhbnNsYXRlQm94KElubGluZUJveCogYm94LCBpbnQgeCwgaW50IHksIGJvb2wgdG9w
TGV2ZWwgPSB0cnVlKQoreyAgICAKKyAgICBpZiAoYm94LT5vYmplY3QoKS0+aXNUZXh0KCkpIHsK
KyAgICAgICAgYm94LT5zZXRYUG9zKGJveC0+eFBvcygpICsgeCk7CisgICAgICAgIGJveC0+c2V0
WVBvcyhib3gtPnlQb3MoKSArIHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIElubGluZUZsb3dC
b3gqIGZsb3cgPSBzdGF0aWNfY2FzdDxJbmxpbmVGbG93Qm94Kj4oYm94KTsKKyAgICAgICAgU1ZH
VGV4dFBvc2l0aW9uaW5nRWxlbWVudCogdGV4dCA9IHN0YXRpY19jYXN0PFNWR1RleHRQb3NpdGlv
bmluZ0VsZW1lbnQqPihib3gtPm9iamVjdCgpLT5lbGVtZW50KCkpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHRvcExldmVsfHwhKHRleHQtPngoKS0+Z2V0Rmlyc3QoKSB8fCB0ZXh0LT55KCktPmdl
dEZpcnN0KCkgfHwgCisgICAgICAgICAgICAgICAgICAgICAgICAodGV4dC0+ZHgoKS0+Z2V0Rmly
c3QoKSAmJiB0ZXh0LT5keCgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpKSB8fAorICAgICAgICAgICAg
ICAgICAgICAgICAgKHRleHQtPmR5KCktPmdldEZpcnN0KCkgJiYgdGV4dC0+ZHkoKS0+Z2V0Rmly
c3QoKS0+dmFsdWUoKSkpKSB7CisgICAgICAgICAgICBib3gtPnNldFhQb3MoYm94LT54UG9zKCkg
KyB4KTsKKyAgICAgICAgICAgIGJveC0+c2V0WVBvcyhib3gtPnlQb3MoKSArIHkpOworICAgICAg
ICAgICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmbG93LT5maXJzdENoaWxkKCk7IGN1cnI7IGN1
cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIAorICAgICAgICAgICAgICAgIGlmICghdHJhbnNsYXRl
Qm94KGN1cnIsIHgsIHksIGZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IHBs
YWNlUG9zaXRpb25lZEJveGVzSG9yaXpvbnRhbGx5KElubGluZUZsb3dCb3gqIGZsb3csIGludCB4
LCBpbnQmIGxlZnRQb3NpdGlvbiwgaW50JiByaWdodFBvc2l0aW9uLCBpbnQmIGxlZnRBbGlnbiwg
aW50JiByaWdodEFsaWduLCBib29sJiBuZWVkc1dvcmRTcGFjaW5nLCBpbnQgeFBvcywgYm9vbCBw
b3NpdGlvbmVkKQoreworICAgIC8vaW50IHN0YXJ0eCA9IHg7CisgICAgaW50IG1uID0gSU5UX01B
WDsKKyAgICBpbnQgbXggPSBJTlRfTUlOOworICAgIGludCBhbW4gPSBJTlRfTUFYOworICAgIGlu
dCBhbXggPSBJTlRfTUlOOworICAgIGludCBzdGFydHggPSB4OworICAgIGJvb2wgc2VlblBvc2l0
aW9uZWRFbGVtZW50ID0gZmFsc2U7CisgICAgZmxvdy0+c2V0WFBvcyh4KTsKKyAgICBmb3IgKElu
bGluZUJveCogY3VyciA9IGZsb3ctPmZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5l
eHRPbkxpbmUoKSkgCisgICAgeworICAgICAgICBpZiAoY3Vyci0+b2JqZWN0KCktPmlzVGV4dCgp
KSB7CisgICAgICAgICAgICBtbiA9IG1pbihtbiwgeCk7CisgICAgICAgICAgICBhbW4gPSBtaW4o
YW1uLCB4KTsKKyAgICAgICAgICAgIElubGluZVRleHRCb3gqIHRleHQgPSBzdGF0aWNfY2FzdDxJ
bmxpbmVUZXh0Qm94Kj4oY3Vycik7CisgICAgICAgICAgICBSZW5kZXJUZXh0KiBydCA9IHN0YXRp
Y19jYXN0PFJlbmRlclRleHQqPih0ZXh0LT5vYmplY3QoKSk7CisgICAgICAgICAgICBpZiAocnQt
Pmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5lZWRzV29yZFNwYWNpbmcgJiYgRGVw
cmVjYXRlZENoYXIocnQtPnRleHQoKVt0ZXh0LT5zdGFydCgpXSkuaXNTcGFjZSgpKQorICAgICAg
ICAgICAgICAgICAgICB4ICs9IHJ0LT5mb250KGZsb3ctPmlzRmlyc3RMaW5lU3R5bGUoKSktPndv
cmRTcGFjaW5nKCk7CisgICAgICAgICAgICAgICAgbmVlZHNXb3JkU3BhY2luZyA9ICFEZXByZWNh
dGVkQ2hhcihydC0+dGV4dCgpW3RleHQtPmVuZCgpXSkuaXNTcGFjZSgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGV4dC0+c2V0WFBvcyh4KTsKKyAgICAgICAgICAgIHggKz0gdGV4dC0+
d2lkdGgoKTsKKyAgICAgICAgICAgIG14ID0gbWF4KG14LCB4KTsKKyAgICAgICAgICAgIGFteCA9
IG1heChhbXgsIHgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KGN1cnIt
Pm9iamVjdCgpLT5pc0lubGluZUZsb3coKSk7CisgICAgICAgICAgICBJbmxpbmVGbG93Qm94KiBm
bG93ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KGN1cnIpOworICAgICAgICAgICAgU1ZH
VGV4dFBvc2l0aW9uaW5nRWxlbWVudCogdGV4dCA9IHN0YXRpY19jYXN0PFNWR1RleHRQb3NpdGlv
bmluZ0VsZW1lbnQqPihmbG93LT5vYmplY3QoKS0+ZWxlbWVudCgpKTsKKyAgICAgICAgICAgIHgg
Kz0gdGV4dC0+ZHgoKS0+Z2V0Rmlyc3QoKSA/IHRleHQtPmR4KCktPmdldEZpcnN0KCktPnZhbHVl
KCkgOiAwOworICAgICAgICAgICAgaWYgKHRleHQtPngoKS0+Z2V0Rmlyc3QoKSkKKyAgICAgICAg
ICAgICAgICB4ID0gdGV4dC0+eCgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIC0geFBvczsKKyAgICAg
ICAgICAgIGlmICh0ZXh0LT54KCktPmdldEZpcnN0KCkgfHwgdGV4dC0+eSgpLT5nZXRGaXJzdCgp
IHx8IAorICAgICAgICAgICAgICAgICh0ZXh0LT5keCgpLT5nZXRGaXJzdCgpICYmIHRleHQtPmR4
KCktPmdldEZpcnN0KCktPnZhbHVlKCkpIHx8CisgICAgICAgICAgICAgICAgKHRleHQtPmR5KCkt
PmdldEZpcnN0KCkgJiYgdGV4dC0+ZHkoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSkpIHsKKyAgICAg
ICAgICAgICAgICBzZWVuUG9zaXRpb25lZEVsZW1lbnQgPSB0cnVlOworICAgICAgICAgICAgICAg
IG5lZWRzV29yZFNwYWNpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbnQgaWdub3JlWCwg
aWdub3JlWTsKKyAgICAgICAgICAgICAgICB4ID0gcGxhY2VQb3NpdGlvbmVkQm94ZXNIb3Jpem9u
dGFsbHkoZmxvdywgeCwgbW4sIG14LCBpZ25vcmVYLCBpZ25vcmVZLCBuZWVkc1dvcmRTcGFjaW5n
LCB4UG9zLCB0cnVlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VlblBvc2l0aW9uZWRFbGVt
ZW50KSB7CisgICAgICAgICAgICAgICAgaW50IF9hbW4sIF9hbXg7IC8vdGhyb3cgYXdheSB0aGVz
ZSB2YWx1ZXMKKyAgICAgICAgICAgICAgICB4ID0gcGxhY2VQb3NpdGlvbmVkQm94ZXNIb3Jpem9u
dGFsbHkoZmxvdywgeCwgbW4sIG14LCBfYW1uLCBfYW14LCBuZWVkc1dvcmRTcGFjaW5nLCB4UG9z
LCBmYWxzZSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB4ID0gcGxhY2VQ
b3NpdGlvbmVkQm94ZXNIb3Jpem9udGFsbHkoZmxvdywgeCwgbW4sIG14LCBhbW4sIGFteCwgbmVl
ZHNXb3JkU3BhY2luZywgeFBvcywgZmFsc2UpOworICAgICAgICB9CisgICAgfQorICAgIGlmICht
biA+IG14KQorICAgICAgICBtbiA9IG14ID0gc3RhcnR4OworICAgIGlmIChhbW4gPiBhbXgpCisg
ICAgICAgIGFtbiA9IGFteCA9IHN0YXJ0eDsKKyAgICAKKyAgICBpbnQgd2lkdGggPSBteCAtIG1u
OworICAgIGZsb3ctPnNldFdpZHRoKHdpZHRoKTsKKyAgICBpbnQgYXdpZHRoID0gYW14IC0gYW1u
OworICAgIGludCBkeD0wOworICAgIGlmIChwb3NpdGlvbmVkKSB7CisgICAgICAgIHN3aXRjaCAo
Zmxvdy0+b2JqZWN0KCktPnN0eWxlKCktPnN2Z1N0eWxlKCktPnRleHRBbmNob3IoKSkgCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNhc2UgVEFfTUlERExFOgorICAgICAgICAgICAgICAgIHRyYW5z
bGF0ZUJveChmbG93LCBkeCA9IC1hd2lkdGgvMiwgMCk7ICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRBX0VORDoKKyAgICAgICAgICAgICAgICB0
cmFuc2xhdGVCb3goZmxvdywgZHggPSAtYXdpZHRoLCAwKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVEFfU1RBUlQ6CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChkeCkgeworICAgICAg
ICAgICAgeCArPSBkeDsKKyAgICAgICAgICAgIG1uICs9IGR4OworICAgICAgICAgICAgbXggKz0g
ZHg7CisgICAgICAgIH0KKyAgICB9CisgICAgbGVmdFBvc2l0aW9uID0gbWluKGxlZnRQb3NpdGlv
biwgbW4pOworICAgIHJpZ2h0UG9zaXRpb24gPSBtYXgocmlnaHRQb3NpdGlvbiwgbXgpOworICAg
IGxlZnRBbGlnbiA9IG1pbihsZWZ0QWxpZ24sIGFtbik7CisgICAgcmlnaHRBbGlnbiA9IG1heChy
aWdodEFsaWduLCBhbXgpOworICAgIAorICAgIHJldHVybiB4OworfQorCitpbnQgcGxhY2VTVkdG
bG93SG9yaXpvbnRhbGx5KElubGluZUZsb3dCb3gqIGZsb3csIGludCB4LCBpbnQmIGxlZnRQb3Np
dGlvbiwgaW50JiByaWdodFBvc2l0aW9uLCBib29sJiBuZWVkc1dvcmRTcGFjaW5nKQoreworICAg
IGludCBpZ25vcmVYLCBpZ25vcmVZOworICAgIHggPSBwbGFjZVBvc2l0aW9uZWRCb3hlc0hvcml6
b250YWxseShmbG93LCB4LCBsZWZ0UG9zaXRpb24sIHJpZ2h0UG9zaXRpb24sIGlnbm9yZVgsIGln
bm9yZVksIG5lZWRzV29yZFNwYWNpbmcsIGZsb3ctPm9iamVjdCgpLT54UG9zKCksIHRydWUpOwor
ICAgIGxlZnRQb3NpdGlvbiA9IG1pbihsZWZ0UG9zaXRpb24sIHgpOworICAgIHJpZ2h0UG9zaXRp
b24gPSBtYXgocmlnaHRQb3NpdGlvbiwgeCk7CisgICAgbmVlZHNXb3JkU3BhY2luZyA9IGZhbHNl
OworICAgIHJldHVybiB4OworfQorCitzdGF0aWMgdm9pZCBwbGFjZUJveGVzVmVydGljYWxseVdp
dGhBYnNCYXNlbGluZShJbmxpbmVGbG93Qm94KiBmbG93LCBpbnQmIGhlaWdodE9mQmxvY2ssIGlu
dCYgbWluX3ksIGludCYgbWF4X3ksIGludCYgYmFzZWxpbmUsIGludCB5UG9zKQoreworICAgIGZv
ciAoSW5saW5lQm94KiBjdXJyID0gZmxvdy0+Zmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vy
ci0+bmV4dE9uTGluZSgpKSB7CisgICAgICAgIGlmIChjdXJyLT5pc0lubGluZUZsb3dCb3goKSkg
eworICAgICAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCogdGV4dCA9IHN0YXRpY19j
YXN0PFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqPihjdXJyLT5vYmplY3QoKS0+ZWxlbWVudCgp
KTsKKyAgICAgICAgICAgIGJhc2VsaW5lICs9IHRleHQtPmR5KCktPmdldEZpcnN0KCkgPyB0ZXh0
LT5keSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKKyAgICAgICAgICAgIGlmICh0ZXh0LT55
KCktPmdldEZpcnN0KCkpIHsKKyAgICAgICAgICAgICAgICBiYXNlbGluZSA9IHRleHQtPnkoKS0+
Z2V0Rmlyc3QoKS0+dmFsdWUoKSAtIHlQb3M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBw
bGFjZUJveGVzVmVydGljYWxseVdpdGhBYnNCYXNlbGluZShzdGF0aWNfY2FzdDxJbmxpbmVGbG93
Qm94Kj4oY3VyciksIGhlaWdodE9mQmxvY2ssIG1pbl95LCBtYXhfeSwgYmFzZWxpbmUsIHlQb3Mp
OworICAgICAgICB9CisgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBjdXJyLT5vYmplY3QoKS0+
Zm9udCh0cnVlKTsKKyAgICAgICAgaW50IGFzY2VudCA9IGZvbnQuYXNjZW50KCk7CisgICAgICAg
IGludCBwb3NpdGlvbiA9IGJhc2VsaW5lIC0gYXNjZW50OworICAgICAgICBpbnQgaGVpZ2h0ID0g
YXNjZW50ICsgZm9udC5kZXNjZW50KCk7CisgICAgICAgIGN1cnItPnNldEJhc2VsaW5lKGFzY2Vu
dCk7CisgICAgICAgIGN1cnItPnNldFlQb3MocG9zaXRpb24pOworICAgICAgICBjdXJyLT5zZXRI
ZWlnaHQoaGVpZ2h0KTsKKyAgICAgICAgCisgICAgICAgIGlmIChwb3NpdGlvbiA8IG1pbl95KSAK
KyAgICAgICAgICAgIG1pbl95ID0gcG9zaXRpb247CisgICAgICAgIGlmIChwb3NpdGlvbiArIGhl
aWdodCA+IG1heF95KSAKKyAgICAgICAgICAgIG1heF95ID0gcG9zaXRpb24gKyBoZWlnaHQ7Cisg
ICAgfQorICAgIGlmIChmbG93LT5pc1Jvb3RJbmxpbmVCb3goKSkgeworICAgICAgICBmbG93LT5z
ZXRZUG9zKG1pbl95KTsKKyAgICAgICAgZmxvdy0+c2V0SGVpZ2h0KG1heF95IC0gbWluX3kpOwor
ICAgICAgICBmbG93LT5zZXRCYXNlbGluZShiYXNlbGluZSAtIG1pbl95KTsKKyAgICAgICAgaGVp
Z2h0T2ZCbG9jayArPSBtYXhfeSAtIG1pbl95OworICAgIH0KK30KKwordm9pZCBwbGFjZVNWR0Zs
b3dWZXJ0aWNhbGx5KElubGluZUZsb3dCb3gqIGZsb3csIGludCYgaGVpZ2h0T2ZCbG9jaykKK3sK
KyAgICBpbnQgdG9wID0gSU5UX01BWCwgYm90dG9tID0gSU5UX01JTiwgYmFzZWxpbmUgPSBoZWln
aHRPZkJsb2NrOworICAgIHBsYWNlQm94ZXNWZXJ0aWNhbGx5V2l0aEFic0Jhc2VsaW5lKGZsb3cs
IGhlaWdodE9mQmxvY2ssIHRvcCwgYm90dG9tLCBiYXNlbGluZSwgZmxvdy0+b2JqZWN0KCktPnlQ
b3MoKSk7CisgICAgZmxvdy0+c2V0VmVydGljYWxPdmVyZmxvd1Bvc2l0aW9ucyh0b3AsIGJvdHRv
bSk7CisgICAgZmxvdy0+c2V0VmVydGljYWxTZWxlY3Rpb25Qb3NpdGlvbnModG9wLCBib3R0b20p
OworfQorCit9CisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtjYW52YXMvU1ZHSW5saW5l
Rmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvU1ZHSW5saW5lRmxvd0JveC5oCShyZXZp
c2lvbiAwKQorKysga2NhbnZhcy9TVkdJbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2pl
Y3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50
LmNhbnRlcmJ1cnkuYWMubno+CisgKiAgICAgICAgICAgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIg
SW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAq
LworCisjaWZuZGVmIFNWR0lubGluZUZsb3dCb3hfSAorI2RlZmluZSBTVkdJbmxpbmVGbG93Qm94
X0gKKworI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJJbmxpbmVGbG93Qm94LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBwYWludFNWR0lubGluZUZsb3coSW5saW5lRmxv
d0JveCogZmxvdywgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBfdHgsIGludCBfdHkpOworaW50IHBs
YWNlU1ZHRmxvd0hvcml6b250YWxseShJbmxpbmVGbG93Qm94KiBmbG93LCBpbnQgeCwgaW50JiBs
ZWZ0UG9zaXRpb24sIGludCYgcmlnaHRQb3NpdGlvbiwgYm9vbCYgbmVlZHNXb3JkU3BhY2luZyk7
Cit2b2lkIHBsYWNlU1ZHRmxvd1ZlcnRpY2FsbHkoSW5saW5lRmxvd0JveCogZmxvdywgaW50JiBo
ZWlnaHRPZkJsb2NrKTsKKworY2xhc3MgU1ZHSW5saW5lRmxvd0JveCA6IHB1YmxpYyBJbmxpbmVG
bG93Qm94IHsKK3B1YmxpYzoKKyAgICBTVkdJbmxpbmVGbG93Qm94KFJlbmRlck9iamVjdCogb2Jq
KSA6IElubGluZUZsb3dCb3gob2JqKSB7fQorICAgIHZpcnR1YWwgdm9pZCBwYWludChSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSk7CisgICAgdmlydHVhbCBpbnQg
cGxhY2VCb3hlc0hvcml6b250YWxseShpbnQgeCwgaW50JiBsZWZ0UG9zaXRpb24sIGludCYgcmln
aHRQb3NpdGlvbiwgYm9vbCYgbmVlZHNXb3JkU3BhY2luZyk7CisgICAgdmlydHVhbCB2b2lkIHZl
cnRpY2FsbHlBbGlnbkJveGVzKGludCYgaGVpZ2h0T2ZCbG9jayk7Cit9OworCit9CisKKyNlbmRp
ZiAvLyBTVkdfU1VQUE9SVAorCisjZW5kaWYgLy8gIVNWR0lubGluZUZsb3dCb3hfSApJbmRleDog
a2NhbnZhcy9TVkdSb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1NWR1Jv
b3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAwKQorKysga2NhbnZhcy9TVkdSb290SW5saW5lQm94
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xp
dmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4KKyAqICAgICAgICAgICAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKworI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCisjaW5jbHVkZSAi
U1ZHSW5saW5lRmxvd0JveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgU1ZHUm9v
dElubGluZUJveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgaW50
IHBhcmVudFgsIGludCBwYXJlbnRZKSAKK3sKKyAgICBwYWludFNWR0lubGluZUZsb3codGhpcywg
b2JqZWN0KCksIHBhaW50SW5mbywgcGFyZW50WCwgcGFyZW50WSk7Cit9CisKK2ludCBTVkdSb290
SW5saW5lQm94OjpwbGFjZUJveGVzSG9yaXpvbnRhbGx5KGludCB4LCBpbnQmIGxlZnRQb3NpdGlv
biwgaW50JiByaWdodFBvc2l0aW9uLCBib29sJiBuZWVkc1dvcmRTcGFjaW5nKQoreworICAgIHJl
dHVybiBwbGFjZVNWR0Zsb3dIb3Jpem9udGFsbHkodGhpcywgeCwgbGVmdFBvc2l0aW9uLCByaWdo
dFBvc2l0aW9uLCBuZWVkc1dvcmRTcGFjaW5nKTsKK30KKwordm9pZCBTVkdSb290SW5saW5lQm94
Ojp2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQmIGhlaWdodE9mQmxvY2spCit7CisgICAgcGxhY2VT
VkdGbG93VmVydGljYWxseSh0aGlzLCBoZWlnaHRPZkJsb2NrKTsKK30KKworfQorI2VuZGlmIC8v
IFNWR19TVVBQT1JUCkluZGV4OiBrY2FudmFzL1NWR1Jvb3RJbmxpbmVCb3guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrY2FudmFzL1NWR1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gMCkKKysrIGtjYW52YXMv
U1ZHUm9vdElubGluZUJveC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACisvKgorICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pgor
ICogICAgICAgICAgIChDKSAyMDA2IEFwcGxlIENvbXB1dGVyIEluYy4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisg
KiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTVkdSb290
SW5saW5lQm94X0gKKyNkZWZpbmUgU1ZHUm9vdElubGluZUJveF9ICisKKyNpZmRlZiBTVkdfU1VQ
UE9SVAorCisjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisgICAgCitjbGFzcyBTVkdSb290SW5saW5lQm94IDogcHVibGljIFJvb3RJbmxpbmVCb3ggewor
cHVibGljOgorICAgIFNWR1Jvb3RJbmxpbmVCb3goUmVuZGVyT2JqZWN0KiBvYmopIDogUm9vdElu
bGluZUJveChvYmopIHt9CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KTsKKyAgICB2aXJ0dWFsIGludCBwbGFjZUJveGVz
SG9yaXpvbnRhbGx5KGludCB4LCBpbnQmIGxlZnRQb3NpdGlvbiwgaW50JiByaWdodFBvc2l0aW9u
LCBib29sJiBuZWVkc1dvcmRTcGFjaW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGljYWxseUFs
aWduQm94ZXMoaW50JiBoZWlnaHRPZkJsb2NrKTsKK307CisKK30KKworI2VuZGlmIC8vIFNWR19T
VVBQT1JUCisKKyNlbmRpZiAvLyAhUm9vdElubGluZUJveF9ICkluZGV4OiBrc3ZnMi9zdmcvU1ZH
VFJlZkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE2OTM1KQorKysga3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5j
bHVkZSAiWExpbmtOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAi
UmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCkBAIC03OSw3ICs3OSw3IEBAIGJvb2wgU1ZHVFJlZkVsZW1lbnQ6
OmNoaWxkU2hvdWxkQ3JlYXRlUmUKIAogUmVuZGVyT2JqZWN0ICpTVkdUUmVmRWxlbWVudDo6Y3Jl
YXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqKQogewotICAgIHJl
dHVybiBuZXcgKGFyZW5hKSBSZW5kZXJJbmxpbmUodGhpcyk7CisgICAgcmV0dXJuIG5ldyAoYXJl
bmEpIFJlbmRlclNWR0lubGluZSh0aGlzKTsKIH0KIAogLy8gdmltOnRzPTQ6bm9ldApJbmRleDog
a3N2ZzIvc3ZnL1NWR1RTcGFuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NW
R1RTcGFuRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2OTM1KQorKysga3N2ZzIvc3ZnL1NWR1RTcGFu
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpZmRlZiBTVkdf
U1VQUE9SVAogI2luY2x1ZGUgIlNWR1RTcGFuRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCi0jaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHVFNwYW4u
aCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ3LDcgKzQ3LDcgQEAgYm9vbCBT
VkdUU3BhbkVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUgogCiBSZW5kZXJPYmplY3QgKlNWR1RT
cGFuRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHls
ZSAqKQogewotICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJJbmxpbmUodGhpcyk7CisgICAg
cmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR1RTcGFuKHRoaXMpOwogfQogCiAvLyB2aW06dHM9
NDpub2V0CkluZGV4OiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDE2OTM1KQorKysgcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtOTksOCArOTksOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkZXRlcm1pbmVTcGFjaW5nRm9yRmxvd0JveGVzKGJvb2wgbGFzdExpbmUsIFJlbmRl
ck9iamVjdCogZW5kT2JqZWN0KTsKICAgICBpbnQgZ2V0Rmxvd1NwYWNpbmdXaWR0aCgpOwogICAg
IGJvb2wgb25FbmRDaGFpbihSZW5kZXJPYmplY3QqIGVuZE9iamVjdCk7Ci0gICAgaW50IHBsYWNl
Qm94ZXNIb3Jpem9udGFsbHkoaW50IHgsIGludCYgbGVmdFBvc2l0aW9uLCBpbnQmIHJpZ2h0UG9z
aXRpb24sIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcpOwotICAgIHZvaWQgdmVydGljYWxseUFsaWdu
Qm94ZXMoaW50JiBoZWlnaHRPZkJsb2NrKTsKKyAgICB2aXJ0dWFsIGludCBwbGFjZUJveGVzSG9y
aXpvbnRhbGx5KGludCB4LCBpbnQmIGxlZnRQb3NpdGlvbiwgaW50JiByaWdodFBvc2l0aW9uLCBi
b29sJiBuZWVkc1dvcmRTcGFjaW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGljYWxseUFsaWdu
Qm94ZXMoaW50JiBoZWlnaHRPZkJsb2NrKTsKICAgICB2b2lkIGNvbXB1dGVMb2dpY2FsQm94SGVp
Z2h0cyhpbnQmIG1heFBvc2l0aW9uVG9wLCBpbnQmIG1heFBvc2l0aW9uQm90dG9tLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbWF4QXNjZW50LCBpbnQmIG1heERlc2Nl
bnQsIGJvb2wgc3RyaWN0TW9kZSk7CiAgICAgdm9pZCBhZGp1c3RNYXhBc2NlbnRBbmREZXNjZW50
KGludCYgbWF4QXNjZW50LCBpbnQmIG1heERlc2NlbnQsCg==
</data>
<flag name="review"
          id="3706"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>