<?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>20699</bug_id>
          
          <creation_ts>2008-09-07 09:46:58 -0700</creation_ts>
          <short_desc>SVGPaintServer CleanUp</short_desc>
          <delta_ts>2008-11-17 13:11:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Cairo, Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>90407</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-07 09:46:58 -0700</bug_when>
    <thetext>Removed platform-dependend SVGPaintServerSolid*.cpp and added the platform-independent version to SVGPaintServerSolid.cpp. Moved applyStrokeStyleToContext() to SVGPaintServer.cpp and removed it from CgSupport.

With this patch colors on SVG texts work for Qt and Cairo too, now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90409</commentid>
    <comment_count>1</comment_count>
      <attachid>23227</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-07 09:56:55 -0700</bug_when>
    <thetext>Created attachment 23227
SVGPaintServer cleanUp

see comment above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90412</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-07 09:58:54 -0700</bug_when>
    <thetext>*** Bug 20689 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90420</commentid>
    <comment_count>3</comment_count>
      <attachid>23228</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-07 12:02:50 -0700</bug_when>
    <thetext>Created attachment 23228
SVGPaintServer cleanUp

changed build instruction for Cg.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90666</commentid>
    <comment_count>4</comment_count>
      <attachid>23228</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-09 09:56:21 -0700</bug_when>
    <thetext>Comment on attachment 23228
SVGPaintServer cleanUp

We should really fix dashes.  (Instead of adding an #ifdef).  Just add a GraphicsContext::setLineDash(DashArray) function to GraphicContext, and an:
OwnPtr&lt;DashArray&gt; onto the GraphicsContext state, and then copy the passed in DashArray onto the state any time the method is called.  We&apos;d have to fix stroke* to setup the dash calls per-platform, but I think that&apos;s teh better long term solution.  I guess that can be a separate patch.

Does this still work for CG?  If so, then r+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90669</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-09 11:08:36 -0700</bug_when>
    <thetext>(In reply to comment #4) 
&gt; Does this still work for CG?  If so, then r+

Can&apos;t test it. I have no windows or MacOs to compile it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91474</commentid>
    <comment_count>6</comment_count>
      <attachid>23498</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-17 01:57:12 -0700</bug_when>
    <thetext>Created attachment 23498
SVGPaintServer cleanUp

Fixed windows and macos build. Tested Cg with Windows and it works without exceptions.

The DashArray can be added to GraphicsContext in a second step.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91475</commentid>
    <comment_count>7</comment_count>
      <attachid>23498</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-09-17 02:26:20 -0700</bug_when>
    <thetext>Comment on attachment 23498
SVGPaintServer cleanUp

Looks great, some style issues that we talked about on IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91499</commentid>
    <comment_count>8</comment_count>
      <attachid>23503</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-17 11:06:52 -0700</bug_when>
    <thetext>Created attachment 23503
SVGPaintServer cleanUp 2

I don&apos;t know how to make a patch that depends on another one. That&apos;s why I upload the whole patch.

This patch cleans up the styling issues, cleans up the PaintServer code in general, moved the DashArray to the GraphicsContext and purges the Qt code a bit.

Either this patch gets a review and landed or I update the patch after the landing of the first one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91911</commentid>
    <comment_count>9</comment_count>
      <attachid>23498</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-09-20 11:12:00 -0700</bug_when>
    <thetext>Comment on attachment 23498
SVGPaintServer cleanUp

Dirk is going to upload a new patch, combining the previous cleanup attempts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91914</commentid>
    <comment_count>10</comment_count>
      <attachid>23607</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-20 11:46:51 -0700</bug_when>
    <thetext>Created attachment 23607
SVGPaintServer cleanUp

This one makes CgSupport obsolete and removes the platform dependent SVGPaintServerSolid* as well as RenderPath*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91916</commentid>
    <comment_count>11</comment_count>
      <attachid>23609</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-20 12:53:37 -0700</bug_when>
    <thetext>Created attachment 23609
SVGPaintServer cleanUp

some corrections</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91922</commentid>
    <comment_count>12</comment_count>
      <attachid>23609</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-20 13:28:23 -0700</bug_when>
    <thetext>Comment on attachment 23609
SVGPaintServer cleanUp

Please break this down.  There seem to be lots of little errors.  I think trying to land smaller pieces of this, like just the linedash stuff first, would be helpful to the quality of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91929</commentid>
    <comment_count>13</comment_count>
      <attachid>23611</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-20 13:49:21 -0700</bug_when>
    <thetext>Created attachment 23611
SVGPaintServer cleanUp - first part

First part: lineDash</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91933</commentid>
    <comment_count>14</comment_count>
      <attachid>23612</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-20 14:23:02 -0700</bug_when>
    <thetext>Created attachment 23612
SVGPaintServer cleanUp - first part

fixes issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91940</commentid>
    <comment_count>15</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-09-20 15:11:36 -0700</bug_when>
    <thetext>It&apos;s a good idea to split up these patches. Several small issues in the one, up for review:
- DashArray enum declared twice (GraphicsContext.h &amp; SVGPaintServer.h - the latter should be removed)
- The Qt setLineDash function, could be rewritten to be more readable.

+    unsigned int dashLength = !dashes.isEmpty() ? dashes.size() : 0;
-&gt;
+    unsigned int dashLength = dashes.size();


+        unsigned int count = (dashLength % 2) == 0 ? dashLength : dashLength * 2;
-&gt;
+        unsigned int count = dashLength;
+        if ((dashLength % 2) != 0)
+            count *= 2;

+        for(unsigned int i = 0; i &lt; count; i++)
-&gt;
+        for (unsigned int i = 0; i &lt; count; ++i)

+            pattern.append(dashes[i % dashLength] / (float)pen.widthF());
-&gt;
+            pattern.append(dashes[i % dashLength] / narrowPrecisionToFloat(pen.widthF()));

That&apos;s it. Could you upload an updated version?
I&apos;m going to land it then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91941</commentid>
    <comment_count>16</comment_count>
      <attachid>23615</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-20 15:23:14 -0700</bug_when>
    <thetext>Created attachment 23615
SVGPaintServer cleanUp - first part

Yes, another patch. Won&apos;t be the last one :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91942</commentid>
    <comment_count>17</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-20 15:31:27 -0700</bug_when>
    <thetext>(In reply to comment #16)
There are to many blank lines. But please comment on it, before I upload the patch again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91946</commentid>
    <comment_count>18</comment_count>
      <attachid>23616</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-20 15:50:52 -0700</bug_when>
    <thetext>Created attachment 23616
SVGPaintServer cleanUp - first part

final first part?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91947</commentid>
    <comment_count>19</comment_count>
      <attachid>23616</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-20 15:52:27 -0700</bug_when>
    <thetext>Comment on attachment 23616
SVGPaintServer cleanUp - first part

So pretty!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91950</commentid>
    <comment_count>20</comment_count>
      <attachid>23616</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-20 16:47:12 -0700</bug_when>
    <thetext>Comment on attachment 23616
SVGPaintServer cleanUp - first part

Landed as r36719.  Clearing review flag, since it seems you might be planning to re-use this bug for the rest of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91955</commentid>
    <comment_count>21</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-09-20 18:31:22 -0700</bug_when>
    <thetext>Rolled out in r36725 as it broke Mac, Windows, and Qt builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91979</commentid>
    <comment_count>22</comment_count>
      <attachid>23622</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-21 03:00:52 -0700</bug_when>
    <thetext>Created attachment 23622
SVGPaintServer cleanUp - second part

second part: Make use of GraphicsContext::setLineDash() on all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91980</commentid>
    <comment_count>23</comment_count>
      <attachid>23622</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-21 03:11:08 -0700</bug_when>
    <thetext>Comment on attachment 23622
SVGPaintServer cleanUp - second part

We talked about style, and svgStyle local variables and about possibly renaming renderStyle to style in one usage.  Otherwise looks fine.  GREAT PATCH.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91981</commentid>
    <comment_count>24</comment_count>
      <attachid>23623</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-21 03:20:39 -0700</bug_when>
    <thetext>Created attachment 23623
SVGPaintServer cleanUp - second part

second try</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91984</commentid>
    <comment_count>25</comment_count>
      <attachid>23623</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-21 03:39:42 -0700</bug_when>
    <thetext>Comment on attachment 23623
SVGPaintServer cleanUp - second part

Great!  Landed as r36737.  Clearing review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91987</commentid>
    <comment_count>26</comment_count>
      <attachid>23625</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-21 06:41:32 -0700</bug_when>
    <thetext>Created attachment 23625
SVGPaintServer cleanUp - third part</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91988</commentid>
    <comment_count>27</comment_count>
      <attachid>23625</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-21 07:19:12 -0700</bug_when>
    <thetext>Comment on attachment 23625
SVGPaintServer cleanUp - third part

Looks fine.  Except why are you adding:
 97 void SVGPaintServerSolid::renderPath(GraphicsContext*&amp; context, const RenderObject* path, SVGPaintTargetType type) const

That&apos;s already implemented exactly like that in SVGPaintServer, or?  Maybe that&apos;s only for CG?

Also, it seems:
context-&gt;setFillRule(svgStyle-&gt;fillRule());

should go in setup() in the fill if-block not in renderPath(), or?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91992</commentid>
    <comment_count>28</comment_count>
      <attachid>23627</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-21 10:20:59 -0700</bug_when>
    <thetext>Created attachment 23627
SVGPaintServer cleanUp - third part

Moved the fillRule from renderPath to setup.

&gt;That&apos;s already implemented exactly like that in SVGPaintServer, or?
Yes, but I can&apos;t use it. Every platform has it&apos;s own renderPath() with it&apos;s platform dependent code and we can&apos;t get rid of it at the moment.
I&apos;ll move this renderPath code to SVGPaintServer, when the gradient and pattern code was changed too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91996</commentid>
    <comment_count>29</comment_count>
      <attachid>23627</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-21 11:28:41 -0700</bug_when>
    <thetext>Comment on attachment 23627
SVGPaintServer cleanUp - third part

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92170</commentid>
    <comment_count>30</comment_count>
      <attachid>23660</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-22 12:15:54 -0700</bug_when>
    <thetext>Created attachment 23660
SVGPaintServer cleanUp - fourth part

Moved out makeMapBetweenRects from CgSupport to AffineTransform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92286</commentid>
    <comment_count>31</comment_count>
      <attachid>23660</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-22 23:00:43 -0700</bug_when>
    <thetext>Comment on attachment 23660
SVGPaintServer cleanUp - fourth part

I&apos;m not sure I&apos;m a huge fan of the name:
 126 AffineTransform&amp; makeMapBetweenRects(const FloatRect&amp; source, const FloatRect&amp; dest);
Nor am I sure it really should go in AffineTransform.h.  But I think this patch is definitely a great step in the right direction, and we can always tweak it later.  Thanks ever so much!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92297</commentid>
    <comment_count>32</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-23 00:58:20 -0700</bug_when>
    <thetext>Landed part four in r36795 and fixed in r36800 by eseidel.  Clearing review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92359</commentid>
    <comment_count>33</comment_count>
      <attachid>23712</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-23 12:53:47 -0700</bug_when>
    <thetext>Created attachment 23712
SVGPaintServer cleanUp - pre fifth part

This only a patch to discuss the next steps. I want to show what I think we could do next.

I creat a new ImageBuffer to have a new GraphicsContext (save and restore could be necessary for qt) to draw on.
I add the given path to the context, call applyStrokeStyleToContext() and call strokeBoundingBox() on the GraphicsContext. Every platform has its own strokeBoundingBox() implementation to create the boundingbox of a stroked path.
This should work for all platforms (don&apos;t know how to do it on Qt at the moment).
Skia in Chromium seems to do it as well but duplicate some functions like boundingboxes for normal paths.
After this changes, we can move strokeBBox() to RenderPath.cpp.

The old implementation seems not to create a new context on every call and try to use an existing one, right? I tried something similar, it worked for Cg and Cairo but qt seems to delete the QOainter to early.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92366</commentid>
    <comment_count>34</comment_count>
      <attachid>23712</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-23 13:18:39 -0700</bug_when>
    <thetext>Comment on attachment 23712
SVGPaintServer cleanUp - pre fifth part

Th current implementation of:
 704 FloatRect GraphicsContext::strokeBoundingBox()

has the unfortunate side effect of destroying the current path. :(  This is one reason to use a scratch context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92367</commentid>
    <comment_count>35</comment_count>
      <attachid>23712</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-23 13:19:44 -0700</bug_when>
    <thetext>Comment on attachment 23712
SVGPaintServer cleanUp - pre fifth part

See http://developer.apple.com/documentation/GraphicsImaging/Reference/CGContext/Reference/reference.html#//apple_ref/c/func/CGContextReplacePathWithStrokedPath</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92368</commentid>
    <comment_count>36</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-23 13:20:02 -0700</bug_when>
    <thetext>I think it also might be time to start a new bug. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92521</commentid>
    <comment_count>37</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-24 08:06:06 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; has the unfortunate side effect of destroying the current path. :(  This is one
&gt; reason to use a scratch context.

I use it! I created an ImageBuffer with a new GraphicsContext. I named it context but you can name it scratchContext. It has nothing to do with drawing context. And GraphicsContext::strokeBoundingBox() is only called by the scratchContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94325</commentid>
    <comment_count>38</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-10-06 18:49:20 -0700</bug_when>
    <thetext>I&apos;m not sure what the current status of this bug is... but I think it&apos;s time to close this one and start a new bug. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94331</commentid>
    <comment_count>39</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-10-06 22:27:05 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; I&apos;m not sure what the current status of this bug is... but I think it&apos;s time to
&gt; close this one and start a new bug. :)

The third part was not landed yet. Otherwise I agree with you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98902</commentid>
    <comment_count>40</comment_count>
      <attachid>23627</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-11-15 15:46:04 -0800</bug_when>
    <thetext>Comment on attachment 23627
SVGPaintServer cleanUp - third part

This breaks svg/custom/svg-fonts-in-html.html and it gives wrong colors for svg/W3C-SVG-1.1/painting-fill-05-b.svg.

+        RGBA32 rgba = color().rgb();
+        ASSERT(!color().hasAlpha());
+        if (style)
+            rgba = colorWithOverrideAlpha(rgba, svgStyle-&gt;strokeOpacity());

seems to be handled differently by some platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99091</commentid>
    <comment_count>41</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-11-17 13:11:25 -0800</bug_when>
    <thetext>Was landed in r38426. Had r- third part first, because it breaks 2 LayoutTest. I spoke to ggaren and we agreed to role it out if they aren&apos;t fixed.

Fixed in r38435, r38439
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23227</attachid>
            <date>2008-09-07 09:56:55 -0700</date>
            <delta_ts>2008-09-07 12:02:50 -0700</delta_ts>
            <desc>SVGPaintServer cleanUp</desc>
            <filename>SVGPaintServer-cleanUp.patch</filename>
            <type>text/plain</type>
            <size>24263</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjI1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMDgtMDktMDcgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDbGVhbiBV
cCBvZiBTVkdQYWludFNlcnZlci4gQ29tYmluZWQgdGhlIFNWR1BhaW50U2VydmVyU29saWQqCisg
ICAgICAgIHRvIGEgdW5pdCBTVkdQYWludFNlcnZlclNvbGlkLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogc3ZnL2dyYXBoaWNz
L1NWR1BhaW50U2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyOjph
cHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFp
bnRTZXJ2ZXIuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlclNvbGlkOjpyZW5kZXJQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyU29saWQ6OnNldHVwKToKKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9jYWlyby9TVkdQYWludFNlcnZlckdyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXApOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9jYWlyby9TVkdQYWludFNlcnZlclBhdHRlcm5DYWlyby5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYWludFNlcnZlclBhdHRlcm46OnNldHVwKToKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJTb2xpZENhaXJvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmNwcDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
Y2cvQ2dTdXBwb3J0Lmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVy
U29saWRDZy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50
U2VydmVyU29saWRRdC5jcHA6IFJlbW92ZWQuCisKIDIwMDgtMDktMDcgIEtlaXNoaSBIYXR0b3Jp
ICA8Y2FzZXkuaGF0dG9yaUBnbWFpbC5jb20+CiAKICAgICAgICAgQWRkcyBjb25zb2xlLmRpcnht
bCBzdXBwb3J0IHRvIHRoZSBXZWIgSW5zcGVjdG9yLgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzNjI1
NCkKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTMyNTYsNyAr
MzI1Niw2IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
Y2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJDYWlyby5jcHAgXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Nh
aXJvL1NWR1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHAgXAogCVdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2NhaXJvL1NWR1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmNwcCBcCi0JV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJTb2xpZENhaXJvLmNwcCBcCiAJV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUmVzb3VyY2VDbGlwcGVyQ2Fpcm8uY3BwIFwKIAlXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9jYWlyby9TVkdSZXNvdXJjZUZpbHRlckNhaXJvLmNwcCBcCiAJV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUmVzb3VyY2VNYXNrZXJDYWlyby5jcHAKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2
aXNpb24gMzYyNTQpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjE2LDcgKzE2MTYsNiBAQCBTT1VSQ0VTICs9IFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NW
R1BhaW50U2VydmVyUGF0dGVyblF0LmNwcCBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9xdC9TVkdQ
YWludFNlcnZlclF0LmNwcCBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZl
clJhZGlhbEdyYWRpZW50UXQuY3BwIFwKLSAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50
U2VydmVyU29saWRRdC5jcHAgXAogICAgICAgICBzdmcvZ3JhcGhpY3MvcXQvU1ZHUmVzb3VyY2VD
bGlwcGVyUXQuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NWR1Jlc291cmNlRmlsdGVy
UXQuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NWR1Jlc291cmNlTWFza2VyUXQuY3Bw
CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuY3BwCShyZXZpc2lvbiAz
NjI1NCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiAgICAgICAgICAgICAgIDIwMDcg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqICAgICAgICAgICAgICAgMjAwOCBEaXJrIFNjaHVs
emUgPHZiczg1QGdteC5kZT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
MTEgKzMwLDEzIEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdQYWludFNlcnZlci5o
IgogCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdQYWludFNlcnZlclNv
bGlkLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1VSSVJl
ZmVyZW5jZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTE0NCw2ICsxNDcsMjggQEAgU1ZHUGFpbnRTZXJ2ZXIqIFNWR1BhaW50U2Vy
dmVyOjpzdHJva2VQYQogICAgIHJldHVybiBzdHJva2VQYWludFNlcnZlcjsKIH0KIAordm9pZCBT
VkdQYWludFNlcnZlcjo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3Qp
IGNvbnN0Cit7CisgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKFNWR1JlbmRlclN0eWxl
Ojpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VX
aWR0aCgpLCAxLjApKTsKKyAgICBjb250ZXh0LT5zZXRMaW5lQ2FwKHN0eWxlLT5zdmdTdHlsZSgp
LT5jYXBTdHlsZSgpKTsKKyAgICBjb250ZXh0LT5zZXRMaW5lSm9pbihzdHlsZS0+c3ZnU3R5bGUo
KS0+am9pblN0eWxlKCkpOworICAgIGlmIChzdHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0eWxlKCkg
PT0gTWl0ZXJKb2luKQorICAgICAgICBjb250ZXh0LT5zZXRNaXRlckxpbWl0KHN0eWxlLT5zdmdT
dHlsZSgpLT5zdHJva2VNaXRlckxpbWl0KCkpOworCisgICAgY29uc3QgRGFzaEFycmF5JiBkYXNo
ZXMgPSBkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUob2JqZWN0LT5zdHlsZSgpKTsKKyNpZiBQ
TEFURk9STShDQUlSTykKKyAgICBPd25BcnJheVB0cjxkb3VibGU+IGRzaChuZXcgZG91YmxlW2Rh
c2hlcy5zaXplKCldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBkYXNoZXMuc2l6ZSgp
IDsgaSsrKQorICAgICAgICBkc2hbaV0gPSBkYXNoZXNbaV07CisgICAgZG91YmxlIGRhc2hPZmZz
ZXQgPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+
c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjApOworICAgIGNhaXJvX3NldF9kYXNo
KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBkc2guZ2V0KCksIGRhc2hlcy5zaXplKCksIGRh
c2hPZmZzZXQpOworI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgZmxvYXQgZGFzaE9mZnNldCA9IFNW
R1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdTdHls
ZSgpLT5zdHJva2VEYXNoT2Zmc2V0KCksIDAuMGYpOworCisgICAgQ0dDb250ZXh0U2V0TGluZURh
c2goY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIGRhc2hPZmZzZXQsIGRhc2hlcy5kYXRhKCks
IGRhc2hlcy5zaXplKCkpOworI2VuZGlmCit9CisKIERhc2hBcnJheSBkYXNoQXJyYXlGcm9tUmVu
ZGVyaW5nU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIERhc2hBcnJheSBh
cnJheTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaAkocmV2aXNpb24g
MzYyNTQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC04OCw2ICs4OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3Rh
dGljIFNWR1BhaW50U2VydmVyKiBmaWxsUGFpbnRTZXJ2ZXIoY29uc3QgUmVuZGVyU3R5bGUqLCBj
b25zdCBSZW5kZXJPYmplY3QqKTsKICAgICAgICAgc3RhdGljIFNWR1BhaW50U2VydmVyU29saWQq
IHNoYXJlZFNvbGlkUGFpbnRTZXJ2ZXIoKTsKIAorICAgICAgICB2b2lkIGFwcGx5U3Ryb2tlU3R5
bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJP
YmplY3QqKSBjb25zdDsKKwogICAgIHByb3RlY3RlZDoKICNpZiBQTEFURk9STShDRykKICAgICAg
ICAgdm9pZCBzdHJva2VQYXRoKENHQ29udGV4dFJlZiwgY29uc3QgUmVuZGVyT2JqZWN0KikgY29u
c3Q7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNvbGlkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNvbGlkLmNw
cAkocmV2aXNpb24gMzYyNTQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZl
clNvbGlkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggRGlyayBTY2h1bHplIDx2YnM4NUBnbXguZGU+CiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzMwLDExIEBACiAjaW5jbHVkZSAiU1ZHUGFp
bnRTZXJ2ZXJTb2xpZC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKIAorI2lu
Y2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
U1ZHUGFpbnRTZXJ2ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogU1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6U1ZHUGFpbnRTZXJ2ZXJTb2xpZCgpCkBA
IC01Niw2ICs2Miw1NCBAQCBUZXh0U3RyZWFtJiBTVkdQYWludFNlcnZlclNvbGlkOjpleHRlcm5h
CiAgICAgcmV0dXJuIHRzOwogfQogCit2b2lkIFNWR1BhaW50U2VydmVyU29saWQ6OnJlbmRlclBh
dGgoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXRoLCBT
VkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBjb25zdCBTVkdSZW5kZXJTdHls
ZSogc3R5bGUgPSBwYXRoLT5zdHlsZSgpLT5zdmdTdHlsZSgpOworCisgICAgY29udGV4dC0+c2V0
RmlsbFJ1bGUoc3R5bGUtPmZpbGxSdWxlKCkpOworCisgICAgaWYgKCh0eXBlICYgQXBwbHlUb0Zp
bGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFzRmlsbCgpKQorICAgICAgICBjb250ZXh0LT5maWxs
UGF0aCgpOworCisgICAgaWYgKCh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmIHN0
eWxlLT5oYXNTdHJva2UoKSkKKyAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgpOworfQorCiti
b29sIFNWR1BhaW50U2VydmVyU29saWQ6OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQs
IGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSwgYm9v
bCBpc1BhaW50aW5nVGV4dCkgY29uc3QKK3sKKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9i
amVjdCA/IG9iamVjdC0+c3R5bGUoKSA6IDA7CisKKyAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmls
bFRhcmdldFR5cGUpICYmICghc3R5bGUgfHwgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkp
IHsKKyAgICAgICAgUkdCQTMyIHJnYmEgPSBjb2xvcigpLnJnYigpOworICAgICAgICBBU1NFUlQo
IWNvbG9yKCkuaGFzQWxwaGEoKSk7CisgICAgICAgIGlmIChzdHlsZSkKKyAgICAgICAgICAgIHJn
YmEgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKHJnYmEsIHN0eWxlLT5zdmdTdHlsZSgpLT5maWxs
T3BhY2l0eSgpKTsKKworICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IocmdiYSk7CisKKyAg
ICAgICAgaWYgKGlzUGFpbnRpbmdUZXh0KQorICAgICAgICAgICAgY29udGV4dC0+c2V0VGV4dERy
YXdpbmdNb2RlKGNUZXh0RmlsbCk7CisgICAgfQorCisgICAgaWYgKCh0eXBlICYgQXBwbHlUb1N0
cm9rZVRhcmdldFR5cGUpICYmICghc3R5bGUgfHwgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0cm9r
ZSgpKSkgeworICAgICAgICBSR0JBMzIgcmdiYSA9IGNvbG9yKCkucmdiKCk7CisgICAgICAgIEFT
U0VSVCghY29sb3IoKS5oYXNBbHBoYSgpKTsKKyAgICAgICAgaWYgKHN0eWxlKQorICAgICAgICAg
ICAgcmdiYSA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEocmdiYSwgc3R5bGUtPnN2Z1N0eWxlKCkt
PnN0cm9rZU9wYWNpdHkoKSk7CisKKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Iocmdi
YSk7CisKKyAgICAgICAgaWYgKHN0eWxlKQorICAgICAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRv
Q29udGV4dChjb250ZXh0LCBzdHlsZSwgb2JqZWN0KTsKKworICAgICAgICBpZiAoaXNQYWludGlu
Z1RleHQpCisgICAgICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY1RleHRTdHJv
a2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJT
b2xpZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVy
U29saWQuaAkocmV2aXNpb24gMzYyNTQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWlu
dFNlcnZlclNvbGlkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzZXR1cChH
cmFwaGljc0NvbnRleHQqJiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBl
LCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbmRl
clBhdGgoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFy
Z2V0VHlwZSkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBTVkdQYWludFNlcnZlclNv
bGlkKCk7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlckdy
YWRpZW50Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJv
L1NWR1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHAJKHJldmlzaW9uIDM2MjU0KQorKysgV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsMjUgKzM0LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0vLyBUT0RPOiBTaGFyZSB0aGlzIGNvZGUgd2l0aCBhbGwgU1ZHUGFpbnRTZXJ2ZXJzCi1zdGF0
aWMgdm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVj
dCkKLXsKLSAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0g
ICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRp
dmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdHJva2VXaWR0aCgpLCAxLjApKTsKLSAgICBjb250
ZXh0LT5zZXRMaW5lQ2FwKHN0eWxlLT5jYXBTdHlsZSgpKTsKLSAgICBjb250ZXh0LT5zZXRMaW5l
Sm9pbihzdHlsZS0+am9pblN0eWxlKCkpOwotICAgIGlmIChzdHlsZS0+am9pblN0eWxlKCkgPT0g
TWl0ZXJKb2luKQotICAgICAgICBjb250ZXh0LT5zZXRNaXRlckxpbWl0KHN0eWxlLT5zdHJva2VN
aXRlckxpbWl0KCkpOwotCi0gICAgY29uc3QgRGFzaEFycmF5JiBkYXNoZXMgPSBkYXNoQXJyYXlG
cm9tUmVuZGVyaW5nU3R5bGUob2JqZWN0LT5zdHlsZSgpKTsKLSAgICBPd25BcnJheVB0cjxkb3Vi
bGU+IGRzaChuZXcgZG91YmxlW2Rhc2hlcy5zaXplKCldKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MCA7IGkgPCBkYXNoZXMuc2l6ZSgpIDsgaSsrKQotICAgICAgICBkc2hbaV0gPSBkYXNoZXNbaV07
Ci0gICAgZG91YmxlIGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9M
ZW5ndGgob2JqZWN0LCBzdHlsZS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjApOwotICAgIGNhaXJv
X3NldF9kYXNoKGNyLCBkc2guZ2V0KCksIGRhc2hlcy5zaXplKCksIGRhc2hPZmZzZXQpOwotfQot
CiBib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNv
bnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlw
ZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QKIHsKICAgICBtX293bmVyRWxlbWVudC0+YnVp
bGRHcmFkaWVudCgpOwpAQCAtNjMsNyArNDQsNyBAQCBib29sIFNWR1BhaW50U2VydmVyR3JhZGll
bnQ6OnNldHVwKEdyYXBoCiAgICAgY2Fpcm9fbWF0cml4X3QgbWF0cml4OwogICAgIGNhaXJvX21h
dHJpeF9pbml0X2lkZW50aXR5ICgmbWF0cml4KTsKICAgICBjb25zdCBjYWlyb19tYXRyaXhfdCBn
cmFkaWVudF9tYXRyaXggPSBncmFkaWVudFRyYW5zZm9ybSgpOwotICAgIGNvbnN0IFNWR1JlbmRl
clN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CiAKICAgICBpZiAodGhpcy0+dHlwZSgpID09
IExpbmVhckdyYWRpZW50UGFpbnRTZXJ2ZXIpIHsKICAgICAgICAgY29uc3QgU1ZHUGFpbnRTZXJ2
ZXJMaW5lYXJHcmFkaWVudCogbGluZWFyID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHUGFpbnRTZXJ2
ZXJMaW5lYXJHcmFkaWVudCo+KHRoaXMpOwpAQCAtMTYxLDEwICsxNDIsMTAgQEAgYm9vbCBTVkdQ
YWludFNlcnZlckdyYWRpZW50OjpzZXR1cChHcmFwaAogICAgICAgICBjYWlyb19wYXR0ZXJuX2Fk
ZF9jb2xvcl9zdG9wX3JnYmEocGF0dGVybiwgb2Zmc2V0LCBjb2xvci5yZWQoKSAvIDI1NS4wLCBj
b2xvci5ncmVlbigpIC8gMjU1LjAsIGNvbG9yLmJsdWUoKSAvIDI1NS4wLCBjb2xvci5hbHBoYSgp
IC8gMjU1LjApOwogICAgIH0KIAotICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlw
ZSkgJiYgc3R5bGUtPmhhc0ZpbGwoKSkKLSAgICAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwg
c3R5bGUtPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REID8gQ0FJUk9fRklMTF9SVUxFX0VWRU5f
T0REIDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcpOworICAgIGlmICgodHlwZSAmIEFwcGx5VG9G
aWxsVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkKKyAgICAgICAg
Y2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxSdWxlKCkgPT0g
UlVMRV9FVkVOT0REID8gQ0FJUk9fRklMTF9SVUxFX0VWRU5fT0REIDogQ0FJUk9fRklMTF9SVUxF
X1dJTkRJTkcpOwogCi0gICAgaWYgKCh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYm
IHN0eWxlLT5oYXNTdHJva2UoKSkKKyAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0
VHlwZSkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpKQogICAgICAgICBhcHBseVN0
cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3QpOwogCiAgICAgY2Fpcm9f
c2V0X3NvdXJjZShjciwgcGF0dGVybik7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWly
by9TVkdQYWludFNlcnZlclBhdHRlcm5DYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwCShyZXZpc2lv
biAzNjI1NCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyUGF0
dGVybkNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMzIgKzMzLDEzIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotLy8gVE9ETzogU2hhcmUgdGhpcyBjb2RlIHdpdGggYWxsIFNWR1Bh
aW50U2VydmVycwotc3RhdGljIHZvaWQgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVu
ZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKLQotICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhTVkdSZW5kZXJT
dHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3Ryb2tlV2lkdGgoKSwg
MS4wKSk7Ci0gICAgY29udGV4dC0+c2V0TGluZUNhcChzdHlsZS0+Y2FwU3R5bGUoKSk7Ci0gICAg
Y29udGV4dC0+c2V0TGluZUpvaW4oc3R5bGUtPmpvaW5TdHlsZSgpKTsKLSAgICBpZiAoc3R5bGUt
PmpvaW5TdHlsZSgpID09IE1pdGVySm9pbikKLSAgICAgICAgY29udGV4dC0+c2V0TWl0ZXJMaW1p
dChzdHlsZS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsKLQotICAgIGNvbnN0IERhc2hBcnJheSYgZGFz
aGVzID0gZGFzaEFycmF5RnJvbVJlbmRlcmluZ1N0eWxlKG9iamVjdC0+c3R5bGUoKSk7Ci0gICAg
T3duQXJyYXlQdHI8ZG91YmxlPiBkc2gobmV3IGRvdWJsZVtkYXNoZXMuc2l6ZSgpXSk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgpIDsgaSsrKQotICAgICAgICBkc2hb
aV0gPSBkYXNoZXNbaV07Ci0gICAgZG91YmxlIGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJTdHlsZTo6
Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAw
LjApOwotICAgIGNhaXJvX3NldF9kYXNoKGNyLCBkc2guZ2V0KCksIGRhc2hlcy5zaXplKCksIGRh
c2hPZmZzZXQpOwotfQotCiBib29sIFNWR1BhaW50U2VydmVyUGF0dGVybjo6c2V0dXAoR3JhcGhp
Y3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50
VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAogewogICAgIEZsb2F0
UmVjdCB0YXJnZXRSZWN0ID0gb2JqZWN0LT5yZWxhdGl2ZUJCb3goZmFsc2UpOwogCi0gICAgY29u
c3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpOwor
ICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKIAotICAgIGZsb2F0IHN0
cm9rZVdpZHRoID0gU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwg
c3R5bGUtPnN0cm9rZVdpZHRoKCksIDEuMCk7CisgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBTVkdS
ZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUo
KS0+c3Ryb2tlV2lkdGgoKSwgMS4wKTsKIAogICAgIGlmICh0YXJnZXRSZWN0LndpZHRoKCkgPT0g
MCkKICAgICAgICAgdGFyZ2V0UmVjdCA9IEZsb2F0UmVjdCh0YXJnZXRSZWN0LngoKSwgdGFyZ2V0
UmVjdC55KCksIHN0cm9rZVdpZHRoLCB0YXJnZXRSZWN0LmhlaWdodCgpKTsKQEAgLTgzLDEwICs2
NCwxMCBAQCBib29sIFNWR1BhaW50U2VydmVyUGF0dGVybjo6c2V0dXAoR3JhcGhpCiAgICAgY2Fp
cm9fbWF0cml4X2ludmVydCgmbWF0cml4KTsKICAgICBjYWlyb19wYXR0ZXJuX3NldF9tYXRyaXgo
cGF0dGVybiwgJm1hdHJpeCk7CiAKLSAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5
cGUpICYmIHN0eWxlLT5oYXNGaWxsKCkpCi0gICAgICAgIGNhaXJvX3NldF9maWxsX3J1bGUoY3Is
IHN0eWxlLT5maWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCA/IENBSVJPX0ZJTExfUlVMRV9FVkVO
X09ERCA6IENBSVJPX0ZJTExfUlVMRV9XSU5ESU5HKTsKKyAgICBpZiAoKHR5cGUgJiBBcHBseVRv
RmlsbFRhcmdldFR5cGUpICYmIHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpCisgICAgICAg
IGNhaXJvX3NldF9maWxsX3J1bGUoY3IsIHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpID09
IFJVTEVfRVZFTk9ERCA/IENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCA6IENBSVJPX0ZJTExfUlVM
RV9XSU5ESU5HKTsKIAotICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAm
JiBzdHlsZS0+aGFzU3Ryb2tlKCkpCisgICAgaWYgKCh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdl
dFR5cGUpICYmIHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkKICAgICAgICAgYXBwbHlT
dHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSwgb2JqZWN0KTsKIAogICAgIGNhaXJv
X3NldF9zb3VyY2UoY3IsIHBhdHRlcm4pOwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fp
cm8vU1ZHUGFpbnRTZXJ2ZXJTb2xpZENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclNvbGlkQ2Fpcm8uY3BwCShyZXZpc2lvbiAz
NjI1NCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyU29saWRD
YWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyU29saWQuaCIKLQot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wg
U1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29u
c3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlz
UGFpbnRpbmdUZXh0KSBjb25zdAotewotICAgIC8vIFRPRE86IHNoYXJlIHRoaXMgY29kZSB3aXRo
IG90aGVyIFBhaW50U2VydmVycwotCi0gICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0
eWxlKCktPnN2Z1N0eWxlKCk7Ci0KLSAgICBmbG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsK
LSAgICBjb2xvcigpLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotCi0gICAgaWYg
KCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFzRmlsbCgpKSB7Ci0g
ICAgICAgIGFscGhhID0gc3R5bGUtPmZpbGxPcGFjaXR5KCk7Ci0KLSAgICAgICAgY2Fpcm9fc2V0
X2ZpbGxfcnVsZShjciwgc3R5bGUtPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REID8gQ0FJUk9f
RklMTF9SVUxFX0VWRU5fT0REIDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcpOwotICAgIH0KLQot
ICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFzU3Ry
b2tlKCkpIHsKLSAgICAgICAgYWxwaGEgPSBzdHlsZS0+c3Ryb2tlT3BhY2l0eSgpOwotCi0gICAg
ICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZl
VG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3Ryb2tlV2lkdGgoKSwgMS4wKSk7Ci0gICAgICAgIGNv
bnRleHQtPnNldExpbmVDYXAoc3R5bGUtPmNhcFN0eWxlKCkpOwotICAgICAgICBjb250ZXh0LT5z
ZXRMaW5lSm9pbihzdHlsZS0+am9pblN0eWxlKCkpOwotICAgICAgICBpZiAoc3R5bGUtPmpvaW5T
dHlsZSgpID09IE1pdGVySm9pbikKLSAgICAgICAgICAgIGNvbnRleHQtPnNldE1pdGVyTGltaXQo
c3R5bGUtPnN0cm9rZU1pdGVyTGltaXQoKSk7Ci0KLSAgICAgICAgY29uc3QgRGFzaEFycmF5JiBk
YXNoZXMgPSBkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUob2JqZWN0LT5zdHlsZSgpKTsKLSAg
ICAgICAgZG91YmxlKiBkc2ggPSBuZXcgZG91YmxlW2Rhc2hlcy5zaXplKCldOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGRhc2hlcy5zaXplKCkgOyBpKyspCi0gICAgICAgICAg
ICBkc2hbaV0gPSBkYXNoZXNbaV07Ci0gICAgICAgIGRvdWJsZSBkYXNoT2Zmc2V0ID0gU1ZHUmVu
ZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN0cm9rZURhc2hP
ZmZzZXQoKSwgMC4wKTsKLSAgICAgICAgY2Fpcm9fc2V0X2Rhc2goY3IsIGRzaCwgZGFzaGVzLnNp
emUoKSwgZGFzaE9mZnNldCk7Ci0gICAgICAgIGRlbGV0ZVtdIGRzaDsKLSAgICB9Ci0KLSAgICBj
YWlyb19zZXRfc291cmNlX3JnYmEoY3IsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRl
eDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9DZ1N1cHBvcnQuY3BwCShyZXZpc2lvbiAzNjI1NCkKKysr
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDIwICs0OCw2IEBAIENHQWZmaW5lVHJhbnNmb3JtIENHQWZmaW5lVHJhbnNmb3JtTWFrZU0K
ICAgICByZXR1cm4gdHJhbnNmb3JtOwogfQogCi12b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJl
bmRlck9iamVjdCogb2JqZWN0KQotewotICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhT
VkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5
bGUoKS0+c3Ryb2tlV2lkdGgoKSwgMS4wZikpOwotICAgIGNvbnRleHQtPnNldExpbmVDYXAoc3R5
bGUtPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkpOwotICAgIGNvbnRleHQtPnNldExpbmVKb2luKHN0
eWxlLT5zdmdTdHlsZSgpLT5qb2luU3R5bGUoKSk7Ci0gICAgY29udGV4dC0+c2V0TWl0ZXJMaW1p
dChzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsKLQotICAgIC8vIEZJWE1F
OiBEYXNoQXJyYXkgc3VwcG9ydCBjb3VsZCBlYXNpbHkgYmUgbW92ZWQgaW50byBHcmFwaGljc0Nv
bnRleHQsIGFuZCB0aGlzIGZ1bmN0aW9uIHRoZW4gbWFkZSB4LXBsYXRmb3JtCi0gICAgY29uc3Qg
RGFzaEFycmF5JiBkYXNoZXMgPSBkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUoc3R5bGUpOwot
ICAgIGZsb2F0IGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5n
dGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjBmKTsK
LQotICAgIENHQ29udGV4dFNldExpbmVEYXNoKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBk
YXNoT2Zmc2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsKLX0KLQogQ0dDb250ZXh0
UmVmIHNjcmF0Y2hDb250ZXh0KCkKIHsKICAgICBzdGF0aWMgQ0dDb250ZXh0UmVmIHNjcmF0Y2gg
PSAwOwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmgJKHJldmlzaW9uIDM2MjU0
KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDggKzQzLDYgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogCiBDR0FmZmluZVRyYW5z
Zm9ybSBDR0FmZmluZVRyYW5zZm9ybU1ha2VNYXBCZXR3ZWVuUmVjdHMoQ0dSZWN0IHNvdXJjZSwg
Q0dSZWN0IGRlc3QpOwogCi12b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3ND
b250ZXh0KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKLQogQ0dDb250ZXh0
UmVmIHNjcmF0Y2hDb250ZXh0KCk7CiBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goY29uc3Qg
UGF0aCYgcGF0aCwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKIApJbmRleDog
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlclNvbGlkQ2cuY3Bw
CShyZXZpc2lvbiAzNjI1NCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2Vy
dmVyU29saWRDZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAgICBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0K
LSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQotICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJTb2xp
ZC5oIgotCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJDZ1N1cHBvcnQuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIFNWR1BhaW50U2VydmVyU29saWQ6OnNldHVwKEdyYXBo
aWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWlu
dFRhcmdldFR5cGUgdHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QKLXsKLSAgICAvLyBG
SVhNRTogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1c2UgYW55IENHLXNwZWNpZmljIGNhbGxzLCBo
b3dldmVyIGl0J3Mgbm90IHlldAotICAgIC8vIGNyb3NzIHBsYXRmb3JtLCBiZWNhdXNlIENHIGhh
bmRsZXMgZmlsbCBydWxlIGRpZmZlcmVudCBmcm9tIG90aGVyIGdyYXBoaWNzCi0gICAgLy8gcGxh
dGZvcm1zLiAgQ0cgbWFrZXMgeW91IHVzZSB0d28gc2VwYXJhdGUgZmlsbCBjYWxscywgb3RoZXIg
cGxhdGZvcm1zIHNldAotICAgIC8vIHRoZSBmaWxsIHJ1bGUgc3RhdGUgb24gdGhlIGNvbnRleHQg
YW5kIHRoZW4gY2FsbCBhIGdlbmVyaWMgImZpbGxQYXRoIgotCi0gICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gb2JqZWN0ID8gb2JqZWN0LT5zdHlsZSgpIDogMDsKLQotICAgIGlmICgodHlwZSAmIEFw
cGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgKCFzdHlsZSB8fCBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFz
RmlsbCgpKSkgewotICAgICAgICBSR0JBMzIgcmdiYSA9IGNvbG9yKCkucmdiKCk7Ci0gICAgICAg
IEFTU0VSVCghY29sb3IoKS5oYXNBbHBoYSgpKTsKLSAgICAgICAgaWYgKHN0eWxlKQotICAgICAg
ICAgICAgcmdiYSA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEocmdiYSwgc3R5bGUtPnN2Z1N0eWxl
KCktPmZpbGxPcGFjaXR5KCkpOwotCi0gICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihyZ2Jh
KTsKLQotICAgICAgICBpZiAoaXNQYWludGluZ1RleHQpCi0gICAgICAgICAgICBjb250ZXh0LT5z
ZXRUZXh0RHJhd2luZ01vZGUoY1RleHRGaWxsKTsKLSAgICB9Ci0KLSAgICBpZiAoKHR5cGUgJiBB
cHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgKCFzdHlsZSB8fCBzdHlsZS0+c3ZnU3R5bGUoKS0+
aGFzU3Ryb2tlKCkpKSB7Ci0gICAgICAgIFJHQkEzMiByZ2JhID0gY29sb3IoKS5yZ2IoKTsKLSAg
ICAgICAgQVNTRVJUKCFjb2xvcigpLmhhc0FscGhhKCkpOwotICAgICAgICBpZiAoc3R5bGUpCi0g
ICAgICAgICAgICByZ2JhID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShyZ2JhLCBzdHlsZS0+c3Zn
U3R5bGUoKS0+c3Ryb2tlT3BhY2l0eSgpKTsKLQotICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VD
b2xvcihyZ2JhKTsKLQotICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICBhcHBseVN0cm9r
ZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3QpOwotCi0gICAgICAgIGlmIChp
c1BhaW50aW5nVGV4dCkKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShj
VGV4dFN0cm9rZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLS8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJTb2xpZFF0LmNwcAkocmV2aXNp
b24gMzYyNTQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclNvbGlk
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgIENvcHly
aWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotCi0gICAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyU29saWQuaCIKLQotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKLQotI2luY2x1
ZGUgPFFQYWludGVyPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgU1ZHUGFpbnRTZXJ2
ZXJTb2xpZDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0
KSBjb25zdAotewotICAgIFFQYWludGVyKiBwYWludGVyKGNvbnRleHQgPyBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKSA6IDApOwotICAgIFFfQVNTRVJUKHBhaW50ZXIpOwotCi0gICAgUmVuZGVy
U3R5bGUqIHJlbmRlclN0eWxlID0gb2JqZWN0ID8gb2JqZWN0LT5zdHlsZSgpIDogMDsKLSAgICAv
LyBUT0RPPyBwYWludGVyLT5zZXRPcGFjaXR5KHJlbmRlclN0eWxlLT5vcGFjaXR5KCkpOwotCi0g
ICAgUUNvbG9yIGMgPSBjb2xvcigpOwotCi0gICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJn
ZXRUeXBlKSAmJiAoIXJlbmRlclN0eWxlIHx8IHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNG
aWxsKCkpKSB7Ci0gICAgICAgIGlmIChyZW5kZXJTdHlsZSkKLSAgICAgICAgICAgIGMuc2V0QWxw
aGFGKHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5maWxsT3BhY2l0eSgpKTsKLQotICAgICAgICBR
QnJ1c2ggYnJ1c2goYyk7Ci0gICAgICAgIHBhaW50ZXItPnNldEJydXNoKGJydXNoKTsKLQotICAg
ICAgICBpZiAocmVuZGVyU3R5bGUpCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShy
ZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSk7Ci0KLSAgICAgICAgLyogaWYoaXNQ
YWludGluZ1RleHQoKSkgLi4uICovCi0gICAgfQotCi0gICAgaWYgKCh0eXBlICYgQXBwbHlUb1N0
cm9rZVRhcmdldFR5cGUpICYmICghcmVuZGVyU3R5bGUgfHwgcmVuZGVyU3R5bGUtPnN2Z1N0eWxl
KCktPmhhc1N0cm9rZSgpKSkgewotICAgICAgICBpZiAocmVuZGVyU3R5bGUpCi0gICAgICAgICAg
ICBjLnNldEFscGhhRihyZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlT3BhY2l0eSgpKTsK
LQotICAgICAgICBRUGVuIHBlbihjKTsKLSAgICAgICAgaWYgKHJlbmRlclN0eWxlKQotICAgICAg
ICAgICAgc2V0UGVuUHJvcGVydGllcyhvYmplY3QsIHJlbmRlclN0eWxlLCBwZW4pOwotICAgICAg
ICBwYWludGVyLT5zZXRQZW4ocGVuKTsKLQotICAgICAgICAvKiBpZihpc1BhaW50aW5nVGV4dCgp
KSAuLi4gKi8KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9ldAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23228</attachid>
            <date>2008-09-07 12:02:50 -0700</date>
            <delta_ts>2008-09-17 01:57:12 -0700</delta_ts>
            <desc>SVGPaintServer cleanUp</desc>
            <filename>SVGPaintServer-cleanUp.patch</filename>
            <type>text/plain</type>
            <size>28165</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjI1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDgtMDktMDcgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDbGVhbiBV
cCBvZiBTVkdQYWludFNlcnZlci4gQ29tYmluZWQgdGhlIFNWR1BhaW50U2VydmVyU29saWQqCisg
ICAgICAgIHRvIGEgdW5pdCBTVkdQYWludFNlcnZlclNvbGlkLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNl
cnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlcjo6YXBwbHlTdHJva2VT
dHlsZVRvQ29udGV4dCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmg6
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyU29saWQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6cmVuZGVyUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYWludFNlcnZlclNvbGlkOjpzZXR1cCk6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL1NWR1BhaW50U2VydmVyU29saWQuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvY2Fpcm8v
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
aW50U2VydmVyR3JhZGllbnQ6OnNldHVwKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvY2Fpcm8v
U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFp
bnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1cCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2NhaXJvL1NW
R1BhaW50U2VydmVyU29saWRDYWlyby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2NnL0NnU3VwcG9ydC5jcHA6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9y
dC5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlclNvbGlkQ2cuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclNvbGlk
UXQuY3BwOiBSZW1vdmVkLgorCiAyMDA4LTA5LTA3ICBLZWlzaGkgSGF0dG9yaSAgPGNhc2V5Lmhh
dHRvcmlAZ21haWwuY29tPgogCiAgICAgICAgIEFkZHMgY29uc29sZS5kaXJ4bWwgc3VwcG9ydCB0
byB0aGUgV2ViIEluc3BlY3Rvci4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMzYyNTQpCisrKyBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zMjU2LDcgKzMyNTYsNiBAQCB3
ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1Bh
aW50U2VydmVyQ2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWlu
dFNlcnZlckdyYWRpZW50Q2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9T
VkdQYWludFNlcnZlclBhdHRlcm5DYWlyby5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Nh
aXJvL1NWR1BhaW50U2VydmVyU29saWRDYWlyby5jcHAgXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2NhaXJvL1NWR1Jlc291cmNlQ2xpcHBlckNhaXJvLmNwcCBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvY2Fpcm8vU1ZHUmVzb3VyY2VGaWx0ZXJDYWlyby5jcHAgXAogCVdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2NhaXJvL1NWR1Jlc291cmNlTWFza2VyQ2Fpcm8uY3BwCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDM2MjU0
KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTYxNiw3ICsxNjE2
LDYgQEAgU09VUkNFUyArPSBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZl
clBhdHRlcm5RdC5jcHAgXAogICAgICAgICBzdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJR
dC5jcHAgXAogICAgICAgICBzdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFk
aWVudFF0LmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclNvbGlk
UXQuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NWR1Jlc291cmNlQ2xpcHBlclF0LmNw
cCBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9xdC9TVkdSZXNvdXJjZUZpbHRlclF0LmNwcCBcCiAg
ICAgICAgIHN2Zy9ncmFwaGljcy9xdC9TVkdSZXNvdXJjZU1hc2tlclF0LmNwcApJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDM2MjU0KQor
KysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTMwNzksNyArMzA3OSw2IEBACiAJCUIyNTU5OTJGMEQwMEQ4QkEwMEJCODI1QyAvKiBT
VkdQYWludFNlcnZlckNnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyNTU5ODkzMEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckNnLmNw
cCAqLzsgfTsKIAkJQjI1NTk5MzAwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyR3Jh
ZGllbnRDZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjU1OTg5NDBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNw
cCAqLzsgfTsKIAkJQjI1NTk5MzEwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyUGF0
dGVybkNnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyNTU5ODk1MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAg
Ki87IH07Ci0JCUIyNTU5OTMyMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclNvbGlk
Q2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1
NTk4OTYwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyU29saWRDZy5jcHAgKi87IH07
CiAJCUIyNTU5OTMzMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdSZXNvdXJjZUNsaXBwZXJDZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTg5NzBE
MDBEOEI4MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VDbGlwcGVyQ2cuY3BwICovOyB9OwogCQlCMjU1
OTkzNTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VGaWx0ZXJDZy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5ODk5MEQwMEQ4QjgwMEJC
ODI1QyAvKiBTVkdSZXNvdXJjZUZpbHRlckNnLm1tICovOyB9OwogCQlCMjU1OTkzNzBEMDBEOEJB
MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5ODlCMEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdS
ZXNvdXJjZU1hc2tlckNnLm1tICovOyB9OwpAQCAtNzUwNyw3ICs3NTA2LDYgQEAKIAkJQjI1NTk4
OTMwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyQ2cuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhaW50U2VydmVyQ2cuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCMjU1OTg5NDBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRT
ZXJ2ZXJHcmFkaWVudENnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMjU1OTg5NTBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhaW50U2VydmVy
UGF0dGVybkNnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI1NTk4OTYwRDAw
RDhCODAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyU29saWRDZy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OTcwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jl
c291cmNlQ2xpcHBlckNnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTVkdSZXNvdXJjZUNsaXBwZXJDZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyNTU5ODk5MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdSZXNvdXJjZUZpbHRlckNnLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNWR1Jlc291cmNlRmlsdGVyQ2cu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNTU5ODlCMEQwMEQ4QjgwMEJCODI1
QyAvKiBTVkdSZXNvdXJjZU1hc2tlckNnLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFNWR1Jlc291cmNlTWFza2VyQ2cubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMjExMiw3ICsxMjExMCw2IEBACiAJCQkJQjI1NTk4OTMwRDAwRDhCODAwQkI4
MjVDIC8qIFNWR1BhaW50U2VydmVyQ2cuY3BwICovLAogCQkJCUIyNTU5ODk0MEQwMEQ4QjgwMEJC
ODI1QyAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwICovLAogCQkJCUIyNTU5ODk1MEQw
MEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAgKi8sCi0JCQkJQjI1
NTk4OTYwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyU29saWRDZy5jcHAgKi8sCiAJ
CQkJQjI1NTk4OTcwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlQ2xpcHBlckNnLmNwcCAq
LywKIAkJCQlCMjU1OTg5OTBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VGaWx0ZXJDZy5t
bSAqLywKIAkJCQlCMjU1OTg5QjBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VNYXNrZXJD
Zy5tbSAqLywKQEAgLTE2OTMyLDcgKzE2OTI5LDYgQEAKIAkJCQlCMjU1OTkzMTBEMDBEOEJBMDBC
QjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjI1NTk5QUUwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI1NTk5QjAwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1Bh
aW50U2VydmVyU29saWQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjI1NTk5MzIwRDAwRDhCQTAw
QkI4MjVDIC8qIFNWR1BhaW50U2VydmVyU29saWRDZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MjIyN0E1NjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUIyMjI3QTU4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQYXRoRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0E1RDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0
aFNlZ0FyYy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R1BhaW50U2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQ
YWludFNlcnZlci5jcHAJKHJldmlzaW9uIDM2MjU0KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
U1ZHUGFpbnRTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqICAgICAgICAgICAgICAgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogICAg
ICAgICAgICAgICAyMDA4IERpcmsgU2NodWx6ZSA8dmJzODVAZ214LmRlPgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxMSArMzAsMTMgQEAKICNpZiBFTkFCTEUoU1ZHKQog
I2luY2x1ZGUgIlNWR1BhaW50U2VydmVyLmgiCiAKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlNWR1BhaW50U2VydmVyU29saWQuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCisjaW5jbHVkZSA8d3RmL093bkFy
cmF5UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTQ0LDYgKzE0NywyOCBAQCBT
VkdQYWludFNlcnZlciogU1ZHUGFpbnRTZXJ2ZXI6OnN0cm9rZVBhCiAgICAgcmV0dXJuIHN0cm9r
ZVBhaW50U2VydmVyOwogfQogCit2b2lkIFNWR1BhaW50U2VydmVyOjphcHBseVN0cm9rZVN0eWxl
VG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBj
b25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkgY29uc3QKK3sKKyAgICBjb250ZXh0LT5zZXRTdHJv
a2VUaGlja25lc3MoU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwg
c3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCksIDEuMCkpOworICAgIGNvbnRleHQtPnNl
dExpbmVDYXAoc3R5bGUtPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkpOworICAgIGNvbnRleHQtPnNl
dExpbmVKb2luKHN0eWxlLT5zdmdTdHlsZSgpLT5qb2luU3R5bGUoKSk7CisgICAgaWYgKHN0eWxl
LT5zdmdTdHlsZSgpLT5qb2luU3R5bGUoKSA9PSBNaXRlckpvaW4pCisgICAgICAgIGNvbnRleHQt
PnNldE1pdGVyTGltaXQoc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGltaXQoKSk7CisK
KyAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcyA9IGRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHls
ZShvYmplY3QtPnN0eWxlKCkpOworI2lmIFBMQVRGT1JNKENBSVJPKQorICAgIE93bkFycmF5UHRy
PGRvdWJsZT4gZHNoKG5ldyBkb3VibGVbZGFzaGVzLnNpemUoKV0pOworICAgIGZvciAoc2l6ZV90
IGkgPSAwIDsgaSA8IGRhc2hlcy5zaXplKCkgOyBpKyspCisgICAgICAgIGRzaFtpXSA9IGRhc2hl
c1tpXTsKKyAgICBkb3VibGUgZGFzaE9mZnNldCA9IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRp
dmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VEYXNoT2Zmc2V0KCks
IDAuMCk7CisgICAgY2Fpcm9fc2V0X2Rhc2goY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIGRz
aC5nZXQoKSwgZGFzaGVzLnNpemUoKSwgZGFzaE9mZnNldCk7CisjZWxpZiBQTEFURk9STShDRykK
KyAgICBmbG9hdCBkYXNoT2Zmc2V0ID0gU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVu
Z3RoKG9iamVjdCwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZURhc2hPZmZzZXQoKSwgMC4wZik7
CisKKyAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwg
ZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7CisjZW5kaWYKK30KKwog
RGFzaEFycmF5IGRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUpCiB7CiAgICAgRGFzaEFycmF5IGFycmF5OwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHUGFpbnRTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdQYWludFNlcnZlci5oCShyZXZpc2lvbiAzNjI1NCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR1BhaW50U2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgU1ZHUGFpbnRTZXJ2ZXIqIGZpbGxQYWludFNl
cnZlcihjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlck9iamVjdCopOwogICAgICAgICBz
dGF0aWMgU1ZHUGFpbnRTZXJ2ZXJTb2xpZCogc2hhcmVkU29saWRQYWludFNlcnZlcigpOwogCisg
ICAgICAgIHZvaWQgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBS
ZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworCiAgICAgcHJvdGVjdGVk
OgogI2lmIFBMQVRGT1JNKENHKQogICAgICAgICB2b2lkIHN0cm9rZVBhdGgoQ0dDb250ZXh0UmVm
LCBjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR1BhaW50U2VydmVyU29saWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR1BhaW50U2VydmVyU29saWQuY3BwCShyZXZpc2lvbiAzNjI1NCkKKysrIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyU29saWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBEaXJrIFNjaHVsemUg
PHZiczg1QGdteC5kZT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiAr
MzAsMTEgQEAKICNpbmNsdWRlICJTVkdQYWludFNlcnZlclNvbGlkLmgiCiAjaW5jbHVkZSAiU1ZH
UmVuZGVyVHJlZUFzVGV4dC5oIgogCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJTVkdQYWludFNlcnZlci5oIgorI2luY2x1ZGUgIlJl
bmRlclBhdGguaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdQYWludFNlcnZlclNvbGlk
OjpTVkdQYWludFNlcnZlclNvbGlkKCkKQEAgLTU2LDYgKzYyLDU0IEBAIFRleHRTdHJlYW0mIFNW
R1BhaW50U2VydmVyU29saWQ6OmV4dGVybmEKICAgICByZXR1cm4gdHM7CiB9CiAKK3ZvaWQgU1ZH
UGFpbnRTZXJ2ZXJTb2xpZDo6cmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBj
b25zdCBSZW5kZXJPYmplY3QqIHBhdGgsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAor
eworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHlsZSA9IHBhdGgtPnN0eWxlKCktPnN2Z1N0
eWxlKCk7CisKKyAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShzdHlsZS0+ZmlsbFJ1bGUoKSk7CisK
KyAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN0eWxlLT5oYXNGaWxs
KCkpCisgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCk7CisKKyAgICBpZiAoKHR5cGUgJiBBcHBs
eVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhhc1N0cm9rZSgpKQorICAgICAgICBjb250
ZXh0LT5zdHJva2VQYXRoKCk7Cit9CisKK2Jvb2wgU1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6c2V0dXAo
R3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNW
R1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAoreworCisg
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0ID8gb2JqZWN0LT5zdHlsZSgpIDogMDsKKwor
ICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgKCFzdHlsZSB8fCBzdHls
ZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSkgeworICAgICAgICBSR0JBMzIgcmdiYSA9IGNvbG9y
KCkucmdiKCk7CisgICAgICAgIEFTU0VSVCghY29sb3IoKS5oYXNBbHBoYSgpKTsKKyAgICAgICAg
aWYgKHN0eWxlKQorICAgICAgICAgICAgcmdiYSA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEocmdi
YSwgc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxPcGFjaXR5KCkpOworCisgICAgICAgIGNvbnRleHQt
PnNldEZpbGxDb2xvcihyZ2JhKTsKKworICAgICAgICBpZiAoaXNQYWludGluZ1RleHQpCisgICAg
ICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY1RleHRGaWxsKTsKKyAgICB9CisK
KyAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgKCFzdHlsZSB8fCBz
dHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpKSB7CisgICAgICAgIFJHQkEzMiByZ2JhID0g
Y29sb3IoKS5yZ2IoKTsKKyAgICAgICAgQVNTRVJUKCFjb2xvcigpLmhhc0FscGhhKCkpOworICAg
ICAgICBpZiAoc3R5bGUpCisgICAgICAgICAgICByZ2JhID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBo
YShyZ2JhLCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlT3BhY2l0eSgpKTsKKworICAgICAgICBj
b250ZXh0LT5zZXRTdHJva2VDb2xvcihyZ2JhKTsKKworICAgICAgICBpZiAoc3R5bGUpCisgICAg
ICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3Qp
OworCisgICAgICAgIGlmIChpc1BhaW50aW5nVGV4dCkKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dFRleHREcmF3aW5nTW9kZShjVGV4dFN0cm9rZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNvbGlkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oCShyZXZpc2lvbiAzNjI1NCkKKysrIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyU29saWQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDYsNiArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgVGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikgY29uc3Q7CiAKICAg
ICAgICAgdmlydHVhbCBib29sIHNldHVwKEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBSZW5kZXJP
YmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQqJiwgY29uc3Qg
UmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIFNWR1BhaW50U2VydmVyU29saWQoKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2NhaXJvL1NWR1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNw
cAkocmV2aXNpb24gMzYyNTQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWlu
dFNlcnZlckdyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwyNSArMzQsNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFRPRE86IFNoYXJlIHRoaXMgY29kZSB3aXRo
IGFsbCBTVkdQYWludFNlcnZlcnMKLXN0YXRpYyB2b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUs
IGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIGNhaXJvX3QqIGNyID0gY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3Mo
U1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN0cm9r
ZVdpZHRoKCksIDEuMCkpOwotICAgIGNvbnRleHQtPnNldExpbmVDYXAoc3R5bGUtPmNhcFN0eWxl
KCkpOwotICAgIGNvbnRleHQtPnNldExpbmVKb2luKHN0eWxlLT5qb2luU3R5bGUoKSk7Ci0gICAg
aWYgKHN0eWxlLT5qb2luU3R5bGUoKSA9PSBNaXRlckpvaW4pCi0gICAgICAgIGNvbnRleHQtPnNl
dE1pdGVyTGltaXQoc3R5bGUtPnN0cm9rZU1pdGVyTGltaXQoKSk7Ci0KLSAgICBjb25zdCBEYXNo
QXJyYXkmIGRhc2hlcyA9IGRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShvYmplY3QtPnN0eWxl
KCkpOwotICAgIE93bkFycmF5UHRyPGRvdWJsZT4gZHNoKG5ldyBkb3VibGVbZGFzaGVzLnNpemUo
KV0pOwotICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IGRhc2hlcy5zaXplKCkgOyBpKyspCi0g
ICAgICAgIGRzaFtpXSA9IGRhc2hlc1tpXTsKLSAgICBkb3VibGUgZGFzaE9mZnNldCA9IFNWR1Jl
bmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdHJva2VEYXNo
T2Zmc2V0KCksIDAuMCk7Ci0gICAgY2Fpcm9fc2V0X2Rhc2goY3IsIGRzaC5nZXQoKSwgZGFzaGVz
LnNpemUoKSwgZGFzaE9mZnNldCk7Ci19Ci0KIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6
c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAog
ewogICAgIG1fb3duZXJFbGVtZW50LT5idWlsZEdyYWRpZW50KCk7CkBAIC02Myw3ICs0NCw3IEBA
IGJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGgKICAgICBjYWlyb19tYXRy
aXhfdCBtYXRyaXg7CiAgICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkgKCZtYXRyaXgpOwog
ICAgIGNvbnN0IGNhaXJvX21hdHJpeF90IGdyYWRpZW50X21hdHJpeCA9IGdyYWRpZW50VHJhbnNm
b3JtKCk7Ci0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgp
LT5zdmdTdHlsZSgpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsK
IAogICAgIGlmICh0aGlzLT50eXBlKCkgPT0gTGluZWFyR3JhZGllbnRQYWludFNlcnZlcikgewog
ICAgICAgICBjb25zdCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50KiBsaW5lYXIgPSBzdGF0
aWNfY2FzdDxjb25zdCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Kj4odGhpcyk7CkBAIC0x
NjEsMTAgKzE0MiwxMCBAQCBib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBo
CiAgICAgICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShwYXR0ZXJuLCBvZmZz
ZXQsIGNvbG9yLnJlZCgpIC8gMjU1LjAsIGNvbG9yLmdyZWVuKCkgLyAyNTUuMCwgY29sb3IuYmx1
ZSgpIC8gMjU1LjAsIGNvbG9yLmFscGhhKCkgLyAyNTUuMCk7CiAgICAgfQogCi0gICAgaWYgKCh0
eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFzRmlsbCgpKQotICAgICAg
ICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBzdHlsZS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5P
REQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVfV0lORElORyk7
CisgICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+c3ZnU3R5
bGUoKS0+aGFzRmlsbCgpKQorICAgICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBzdHlsZS0+
c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQgPyBDQUlST19GSUxMX1JVTEVf
RVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVfV0lORElORyk7CiAKLSAgICBpZiAoKHR5cGUgJiBB
cHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhhc1N0cm9rZSgpKQorICAgIGlmICgo
dHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFz
U3Ryb2tlKCkpCiAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5
bGUsIG9iamVjdCk7CiAKICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsKSW5kZXg6
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZl
clBhdHRlcm5DYWlyby5jcHAJKHJldmlzaW9uIDM2MjU0KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMywzMiArMzMsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBUT0RPOiBTaGFy
ZSB0aGlzIGNvZGUgd2l0aCBhbGwgU1ZHUGFpbnRTZXJ2ZXJzCi1zdGF0aWMgdm9pZCBhcHBseVN0
cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU1ZHUmVu
ZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBjYWly
b190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgY29udGV4dC0+c2V0
U3Ryb2tlVGhpY2tuZXNzKFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmpl
Y3QsIHN0eWxlLT5zdHJva2VXaWR0aCgpLCAxLjApKTsKLSAgICBjb250ZXh0LT5zZXRMaW5lQ2Fw
KHN0eWxlLT5jYXBTdHlsZSgpKTsKLSAgICBjb250ZXh0LT5zZXRMaW5lSm9pbihzdHlsZS0+am9p
blN0eWxlKCkpOwotICAgIGlmIChzdHlsZS0+am9pblN0eWxlKCkgPT0gTWl0ZXJKb2luKQotICAg
ICAgICBjb250ZXh0LT5zZXRNaXRlckxpbWl0KHN0eWxlLT5zdHJva2VNaXRlckxpbWl0KCkpOwot
Ci0gICAgY29uc3QgRGFzaEFycmF5JiBkYXNoZXMgPSBkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5
bGUob2JqZWN0LT5zdHlsZSgpKTsKLSAgICBPd25BcnJheVB0cjxkb3VibGU+IGRzaChuZXcgZG91
YmxlW2Rhc2hlcy5zaXplKCldKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5z
aXplKCkgOyBpKyspCi0gICAgICAgIGRzaFtpXSA9IGRhc2hlc1tpXTsKLSAgICBkb3VibGUgZGFz
aE9mZnNldCA9IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0
eWxlLT5zdHJva2VEYXNoT2Zmc2V0KCksIDAuMCk7Ci0gICAgY2Fpcm9fc2V0X2Rhc2goY3IsIGRz
aC5nZXQoKSwgZGFzaGVzLnNpemUoKSwgZGFzaE9mZnNldCk7Ci19Ci0KIGJvb2wgU1ZHUGFpbnRT
ZXJ2ZXJQYXR0ZXJuOjpzZXR1cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5k
ZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUsIGJvb2wgaXNQYWludGlu
Z1RleHQpIGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0IHRhcmdldFJlY3QgPSBvYmplY3QtPnJlbGF0
aXZlQkJveChmYWxzZSk7CiAKLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmpl
Y3QtPnN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0
LT5zdHlsZSgpOwogCi0gICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBTVkdSZW5kZXJTdHlsZTo6Y3Nz
UHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3Ryb2tlV2lkdGgoKSwgMS4wKTsKKyAg
ICBmbG9hdCBzdHJva2VXaWR0aCA9IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0
aChvYmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjApOwogCiAgICAg
aWYgKHRhcmdldFJlY3Qud2lkdGgoKSA9PSAwKQogICAgICAgICB0YXJnZXRSZWN0ID0gRmxvYXRS
ZWN0KHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgc3Ryb2tlV2lkdGgsIHRhcmdldFJl
Y3QuaGVpZ2h0KCkpOwpAQCAtODMsMTAgKzY0LDEwIEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJQYXR0
ZXJuOjpzZXR1cChHcmFwaGkKICAgICBjYWlyb19tYXRyaXhfaW52ZXJ0KCZtYXRyaXgpOwogICAg
IGNhaXJvX3BhdHRlcm5fc2V0X21hdHJpeChwYXR0ZXJuLCAmbWF0cml4KTsKIAotICAgIGlmICgo
dHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhhc0ZpbGwoKSkKLSAgICAg
ICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgc3R5bGUtPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVO
T0REID8gQ0FJUk9fRklMTF9SVUxFX0VWRU5fT0REIDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcp
OworICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPnN2Z1N0
eWxlKCktPmhhc0ZpbGwoKSkKKyAgICAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgc3R5bGUt
PnN2Z1N0eWxlKCktPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REID8gQ0FJUk9fRklMTF9SVUxF
X0VWRU5fT0REIDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcpOwogCi0gICAgaWYgKCh0eXBlICYg
QXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmIHN0eWxlLT5oYXNTdHJva2UoKSkKKyAgICBpZiAo
KHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhh
c1N0cm9rZSgpKQogICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0
eWxlLCBvYmplY3QpOwogCiAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7CkluZGV4
OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclNvbGlkQ2Fpcm8uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVy
U29saWRDYWlyby5jcHAJKHJldmlzaW9uIDM2MjU0KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
Y2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJTb2xpZENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tl
ci5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAi
U1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBTVkdQYWludFNlcnZlclNvbGlkOjpzZXR1cChHcmFw
aGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFp
bnRUYXJnZXRUeXBlIHR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0Ci17Ci0gICAgLy8g
VE9ETzogc2hhcmUgdGhpcyBjb2RlIHdpdGggb3RoZXIgUGFpbnRTZXJ2ZXJzCi0KLSAgICBjYWly
b190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNvbnN0IFNWR1JlbmRl
clN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKLQotICAgIGZsb2F0
IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwotICAgIGNvbG9yKCkuZ2V0UkdCQShyZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSk7Ci0KLSAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUp
ICYmIHN0eWxlLT5oYXNGaWxsKCkpIHsKLSAgICAgICAgYWxwaGEgPSBzdHlsZS0+ZmlsbE9wYWNp
dHkoKTsKLQotICAgICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBzdHlsZS0+ZmlsbFJ1bGUo
KSA9PSBSVUxFX0VWRU5PREQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxM
X1JVTEVfV0lORElORyk7Ci0gICAgfQotCi0gICAgaWYgKCh0eXBlICYgQXBwbHlUb1N0cm9rZVRh
cmdldFR5cGUpICYmIHN0eWxlLT5oYXNTdHJva2UoKSkgewotICAgICAgICBhbHBoYSA9IHN0eWxl
LT5zdHJva2VPcGFjaXR5KCk7Ci0KLSAgICAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY3IsIFNW
R1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdHJva2VX
aWR0aCgpLCAxLjApKTsKLSAgICAgICAgY29udGV4dC0+c2V0TGluZUNhcChzdHlsZS0+Y2FwU3R5
bGUoKSk7Ci0gICAgICAgIGNvbnRleHQtPnNldExpbmVKb2luKHN0eWxlLT5qb2luU3R5bGUoKSk7
Ci0gICAgICAgIGlmIChzdHlsZS0+am9pblN0eWxlKCkgPT0gTWl0ZXJKb2luKQotICAgICAgICAg
ICAgY29udGV4dC0+c2V0TWl0ZXJMaW1pdChzdHlsZS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsKLQot
ICAgICAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcyA9IGRhc2hBcnJheUZyb21SZW5kZXJpbmdT
dHlsZShvYmplY3QtPnN0eWxlKCkpOwotICAgICAgICBkb3VibGUqIGRzaCA9IG5ldyBkb3VibGVb
ZGFzaGVzLnNpemUoKV07Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgZGFzaGVz
LnNpemUoKSA7IGkrKykKLSAgICAgICAgICAgIGRzaFtpXSA9IGRhc2hlc1tpXTsKLSAgICAgICAg
ZG91YmxlIGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgo
b2JqZWN0LCBzdHlsZS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjApOwotICAgICAgICBjYWlyb19z
ZXRfZGFzaChjciwgZHNoLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsKLSAgICAgICAgZGVs
ZXRlW10gZHNoOwotICAgIH0KLQotICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9DZ1N1
cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9y
dC5jcHAJKHJldmlzaW9uIDM2MjU0KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBw
b3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMjAgKzQ4LDYgQEAgQ0dBZmZpbmVUcmFuc2Zv
cm0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlTQogICAgIHJldHVybiB0cmFuc2Zvcm07CiB9CiAKLXZv
aWQgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJl
bmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgY29u
dGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xl
bmd0aChvYmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjBmKSk7Ci0g
ICAgY29udGV4dC0+c2V0TGluZUNhcChzdHlsZS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSk7Ci0g
ICAgY29udGV4dC0+c2V0TGluZUpvaW4oc3R5bGUtPnN2Z1N0eWxlKCktPmpvaW5TdHlsZSgpKTsK
LSAgICBjb250ZXh0LT5zZXRNaXRlckxpbWl0KHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VNaXRl
ckxpbWl0KCkpOwotCi0gICAgLy8gRklYTUU6IERhc2hBcnJheSBzdXBwb3J0IGNvdWxkIGVhc2ls
eSBiZSBtb3ZlZCBpbnRvIEdyYXBoaWNzQ29udGV4dCwgYW5kIHRoaXMgZnVuY3Rpb24gdGhlbiBt
YWRlIHgtcGxhdGZvcm0KLSAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcyA9IGRhc2hBcnJheUZy
b21SZW5kZXJpbmdTdHlsZShzdHlsZSk7Ci0gICAgZmxvYXQgZGFzaE9mZnNldCA9IFNWR1JlbmRl
clN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5z
dHJva2VEYXNoT2Zmc2V0KCksIDAuMGYpOwotCi0gICAgQ0dDb250ZXh0U2V0TGluZURhc2goY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIGRhc2hPZmZzZXQsIGRhc2hlcy5kYXRhKCksIGRhc2hl
cy5zaXplKCkpOwotfQotCiBDR0NvbnRleHRSZWYgc2NyYXRjaENvbnRleHQoKQogewogICAgIHN0
YXRpYyBDR0NvbnRleHRSZWYgc2NyYXRjaCA9IDA7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9jZy9DZ1N1cHBvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9D
Z1N1cHBvcnQuaAkocmV2aXNpb24gMzYyNTQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9D
Z1N1cHBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsNiBAQCBjbGFzcyBHcmFwaGlj
c0NvbnRleHQ7CiAKIENHQWZmaW5lVHJhbnNmb3JtIENHQWZmaW5lVHJhbnNmb3JtTWFrZU1hcEJl
dHdlZW5SZWN0cyhDR1JlY3Qgc291cmNlLCBDR1JlY3QgZGVzdCk7CiAKLXZvaWQgYXBwbHlTdHJv
a2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJl
bmRlck9iamVjdCopOwotCiBDR0NvbnRleHRSZWYgc2NyYXRjaENvbnRleHQoKTsKIEZsb2F0UmVj
dCBzdHJva2VCb3VuZGluZ0JveChjb25zdCBQYXRoJiBwYXRoLCBSZW5kZXJTdHlsZSosIGNvbnN0
IFJlbmRlck9iamVjdCopOwogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWlu
dFNlcnZlclNvbGlkQ2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Nn
L1NWR1BhaW50U2VydmVyU29saWRDZy5jcHAJKHJldmlzaW9uIDM2MjU0KQorKysgV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw3NyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1l
cm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNp
bmNsdWRlICJTVkdQYWludFNlcnZlclNvbGlkLmgiCi0KLSNpbmNsdWRlICJDb2xvci5oIgotI2lu
Y2x1ZGUgIkNnU3VwcG9ydC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgU1ZHUGFp
bnRTZXJ2ZXJTb2xpZDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRp
bmdUZXh0KSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHVz
ZSBhbnkgQ0ctc3BlY2lmaWMgY2FsbHMsIGhvd2V2ZXIgaXQncyBub3QgeWV0Ci0gICAgLy8gY3Jv
c3MgcGxhdGZvcm0sIGJlY2F1c2UgQ0cgaGFuZGxlcyBmaWxsIHJ1bGUgZGlmZmVyZW50IGZyb20g
b3RoZXIgZ3JhcGhpY3MKLSAgICAvLyBwbGF0Zm9ybXMuICBDRyBtYWtlcyB5b3UgdXNlIHR3byBz
ZXBhcmF0ZSBmaWxsIGNhbGxzLCBvdGhlciBwbGF0Zm9ybXMgc2V0Ci0gICAgLy8gdGhlIGZpbGwg
cnVsZSBzdGF0ZSBvbiB0aGUgY29udGV4dCBhbmQgdGhlbiBjYWxsIGEgZ2VuZXJpYyAiZmlsbFBh
dGgiCi0KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QgPyBvYmplY3QtPnN0eWxlKCkg
OiAwOwotCi0gICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiAoIXN0eWxl
IHx8IHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpKSB7Ci0gICAgICAgIFJHQkEzMiByZ2Jh
ID0gY29sb3IoKS5yZ2IoKTsKLSAgICAgICAgQVNTRVJUKCFjb2xvcigpLmhhc0FscGhhKCkpOwot
ICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICByZ2JhID0gY29sb3JXaXRoT3ZlcnJpZGVB
bHBoYShyZ2JhLCBzdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbE9wYWNpdHkoKSk7Ci0KLSAgICAgICAg
Y29udGV4dC0+c2V0RmlsbENvbG9yKHJnYmEpOwotCi0gICAgICAgIGlmIChpc1BhaW50aW5nVGV4
dCkKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShjVGV4dEZpbGwpOwot
ICAgIH0KLQotICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiAoIXN0
eWxlIHx8IHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkpIHsKLSAgICAgICAgUkdCQTMy
IHJnYmEgPSBjb2xvcigpLnJnYigpOwotICAgICAgICBBU1NFUlQoIWNvbG9yKCkuaGFzQWxwaGEo
KSk7Ci0gICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJnYmEgPSBjb2xvcldpdGhPdmVy
cmlkZUFscGhhKHJnYmEsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VPcGFjaXR5KCkpOwotCi0g
ICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHJnYmEpOwotCi0gICAgICAgIGlmIChzdHls
ZSkKLSAgICAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUs
IG9iamVjdCk7Ci0KLSAgICAgICAgaWYgKGlzUGFpbnRpbmdUZXh0KQotICAgICAgICAgICAgY29u
dGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKGNUZXh0U3Ryb2tlKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotLy8gdmlt
OnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJT
b2xpZFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWlu
dFNlcnZlclNvbGlkUXQuY3BwCShyZXZpc2lvbiAzNjI1NCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL3F0L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcg
KzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3
aWxkZm94QGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCi0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHUGFp
bnRTZXJ2ZXJTb2xpZC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyUGF0aC5oIgotCi0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotYm9vbCBTVkdQYWludFNlcnZlclNvbGlkOjpzZXR1cChHcmFwaGljc0NvbnRleHQq
JiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBl
IHR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0Ci17Ci0gICAgUVBhaW50ZXIqIHBhaW50
ZXIoY29udGV4dCA/IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogMCk7Ci0gICAgUV9BU1NF
UlQocGFpbnRlcik7Ci0KLSAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBvYmplY3QgPyBv
YmplY3QtPnN0eWxlKCkgOiAwOwotICAgIC8vIFRPRE8/IHBhaW50ZXItPnNldE9wYWNpdHkocmVu
ZGVyU3R5bGUtPm9wYWNpdHkoKSk7Ci0KLSAgICBRQ29sb3IgYyA9IGNvbG9yKCk7Ci0KLSAgICBp
ZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmICghcmVuZGVyU3R5bGUgfHwgcmVu
ZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkpIHsKLSAgICAgICAgaWYgKHJlbmRlclN0
eWxlKQotICAgICAgICAgICAgYy5zZXRBbHBoYUYocmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmZp
bGxPcGFjaXR5KCkpOwotCi0gICAgICAgIFFCcnVzaCBicnVzaChjKTsKLSAgICAgICAgcGFpbnRl
ci0+c2V0QnJ1c2goYnJ1c2gpOwotCi0gICAgICAgIGlmIChyZW5kZXJTdHlsZSkKLSAgICAgICAg
ICAgIGNvbnRleHQtPnNldEZpbGxSdWxlKHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5maWxsUnVs
ZSgpKTsKLQotICAgICAgICAvKiBpZihpc1BhaW50aW5nVGV4dCgpKSAuLi4gKi8KLSAgICB9Ci0K
LSAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgKCFyZW5kZXJTdHls
ZSB8fCByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpKSB7Ci0gICAgICAgIGlm
IChyZW5kZXJTdHlsZSkKLSAgICAgICAgICAgIGMuc2V0QWxwaGFGKHJlbmRlclN0eWxlLT5zdmdT
dHlsZSgpLT5zdHJva2VPcGFjaXR5KCkpOwotCi0gICAgICAgIFFQZW4gcGVuKGMpOwotICAgICAg
ICBpZiAocmVuZGVyU3R5bGUpCi0gICAgICAgICAgICBzZXRQZW5Qcm9wZXJ0aWVzKG9iamVjdCwg
cmVuZGVyU3R5bGUsIHBlbik7Ci0gICAgICAgIHBhaW50ZXItPnNldFBlbihwZW4pOwotCi0gICAg
ICAgIC8qIGlmKGlzUGFpbnRpbmdUZXh0KCkpIC4uLiAqLwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0vLyB2aW06dHM9
NDpub2V0Cg==
</data>
<flag name="review"
          id="10348"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23498</attachid>
            <date>2008-09-17 01:57:12 -0700</date>
            <delta_ts>2008-09-20 11:46:51 -0700</delta_ts>
            <desc>SVGPaintServer cleanUp</desc>
            <filename>SVGPaintServer-cleanUp.patch</filename>
            <type>text/plain</type>
            <size>29014</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjU0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDgtMDktMTcgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDbGVhbiBV
cCBvZiBTVkdQYWludFNlcnZlci4gQ29tYmluZWQgdGhlIFNWR1BhaW50U2VydmVyU29saWQqCisg
ICAgICAgIHRvIGEgdW5pdCBTVkdQYWludFNlcnZlclNvbGlkLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KToKKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFp
bnRTZXJ2ZXJTb2xpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlclNvbGlk
OjpyZW5kZXJQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyU29saWQ6OnNl
dHVwKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlckdyYWRpZW50Q2Fpcm8uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXApOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclBhdHRlcm5DYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlclBhdHRlcm46OnNldHVwKToKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJTb2xpZENhaXJvLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmNwcDoKKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0Lmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Nn
L1NWR1BhaW50U2VydmVyU29saWRDZy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL3F0L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHA6IFJlbW92ZWQuCisKIFwyMDA4LTA5LTE3
ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSAjZGVmaW5l
IHRvIGNvbnRyb2wgd2hldGhlciBvciBub3QgdG8gdXNlIGFuIE5TU2Nyb2xsZXIgb24gTWFjLgpJ
bmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCShyZXZpc2lvbiAzNjUyNikKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTMyNTksNyArMzI1OSw2IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBc
CiAJV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJDYWlyby5jcHAgXAog
CVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5j
cHAgXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyUGF0dGVybkNh
aXJvLmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJTb2xp
ZENhaXJvLmNwcCBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUmVzb3VyY2VDbGlw
cGVyQ2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdSZXNvdXJjZUZp
bHRlckNhaXJvLmNwcCBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUmVzb3VyY2VN
YXNrZXJDYWlyby5jcHAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gMzY1MjYpCisrKyBXZWJDb3JlL1dlYkNvcmUu
cHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIyLDcgKzE2MjIsNiBAQCBTT1VSQ0VTICs9IFwKICAg
ICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyUGF0dGVyblF0LmNwcCBcCiAgICAg
ICAgIHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclF0LmNwcCBcCiAgICAgICAgIHN2Zy9n
cmFwaGljcy9xdC9TVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXQuY3BwIFwKLSAgICAgICAg
c3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHAgXAogICAgICAgICBzdmcv
Z3JhcGhpY3MvcXQvU1ZHUmVzb3VyY2VDbGlwcGVyUXQuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBo
aWNzL3F0L1NWR1Jlc291cmNlRmlsdGVyUXQuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL3F0
L1NWR1Jlc291cmNlTWFza2VyUXQuY3BwCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHJldmlzaW9uIDM2NTI2KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQ3NDAsMjYgKzE0NzQwLDYgQEAKIAkJCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KLQkJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGNnXFNWR1BhaW50U2VydmVyU29saWRDZy5j
cHAiDQotCQkJCQkJPg0KLQkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCQlOYW1lPSJE
ZWJ1Z19DYWlyb3xXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJ
CQkJCT4NCi0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQot
CQkJCQkJCS8+DQotCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24NCi0JCQkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb3xXaW4zMiINCi0JCQkJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJCT4NCi0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCS8+DQotCQkJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdmdcZ3JhcGhpY3NcY2dcU1ZHUmVzb3VyY2VDbGlwcGVyQ2cuY3BwIg0KIAkJCQkJCT4N
CiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzY1MjYpCisrKyBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzA4Miw3ICszMDgy
LDYgQEAKIAkJQjI1NTk5MkYwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyQ2cuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTMw
RDAwRDhCODAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyQ2cuY3BwICovOyB9OwogCQlCMjU1OTkz
MDBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5ODk0MEQwMEQ4Qjgw
MEJCODI1QyAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwICovOyB9OwogCQlCMjU1OTkz
MTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTUwRDAwRDhCODAw
QkI4MjVDIC8qIFNWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcCAqLzsgfTsKLQkJQjI1NTk5MzIw
RDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyU29saWRDZy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTg5NjBEMDBEOEI4MDBCQjgy
NUMgLyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcCAqLzsgfTsKIAkJQjI1NTk5MzMwRDAwRDhC
QTAwQkI4MjVDIC8qIFNWR1Jlc291cmNlQ2xpcHBlckNnLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5ODk3MEQwMEQ4QjgwMEJCODI1QyAvKiBT
VkdSZXNvdXJjZUNsaXBwZXJDZy5jcHAgKi87IH07CiAJCUIyNTU5OTM1MEQwMEQ4QkEwMEJCODI1
QyAvKiBTVkdSZXNvdXJjZUZpbHRlckNnLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTkwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNl
RmlsdGVyQ2cubW0gKi87IH07CiAJCUIyNTU5OTM3MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdSZXNv
dXJjZU1hc2tlckNnLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjI1NTk4OUIwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFza2VyQ2cubW0g
Ki87IH07CkBAIC03NTE3LDcgKzc1MTYsNiBAQAogCQlCMjU1OTg5MzBEMDBEOEI4MDBCQjgyNUMg
LyogU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU1ZHUGFpbnRTZXJ2ZXJDZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyNTU5ODk0MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhaW50U2VydmVyR3Jh
ZGllbnRDZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNTU5ODk1MEQwMEQ4
QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OTg5NjBEMDBEOEI4MDBCQjgyNUMgLyogU1ZH
UGFpbnRTZXJ2ZXJTb2xpZENnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdQYWludFNlcnZlclNvbGlkQ2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMjU1OTg5NzBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VDbGlwcGVyQ2cuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1Jlc291cmNlQ2xpcHBl
ckNnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OTkwRDAwRDhCODAw
QkI4MjVDIC8qIFNWR1Jlc291cmNlRmlsdGVyQ2cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gU1ZHUmVzb3VyY2VGaWx0ZXJDZy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OUIwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFz
a2VyQ2cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU1ZHUmVz
b3VyY2VNYXNrZXJDZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMTMwLDcg
KzEyMTI4LDYgQEAKIAkJCQlCMjU1OTg5MzBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2
ZXJDZy5jcHAgKi8sCiAJCQkJQjI1NTk4OTQwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1BhaW50U2Vy
dmVyR3JhZGllbnRDZy5jcHAgKi8sCiAJCQkJQjI1NTk4OTUwRDAwRDhCODAwQkI4MjVDIC8qIFNW
R1BhaW50U2VydmVyUGF0dGVybkNnLmNwcCAqLywKLQkJCQlCMjU1OTg5NjBEMDBEOEI4MDBCQjgy
NUMgLyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcCAqLywKIAkJCQlCMjU1OTg5NzBEMDBEOEI4
MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VDbGlwcGVyQ2cuY3BwICovLAogCQkJCUIyNTU5ODk5MEQw
MEQ4QjgwMEJCODI1QyAvKiBTVkdSZXNvdXJjZUZpbHRlckNnLm1tICovLAogCQkJCUIyNTU5ODlC
MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1hc2tlckNnLm1tICovLApAQCAtMTY5NTcs
NyArMTY5NTQsNiBAQAogCQkJCUIyNTU5OTMxMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNl
cnZlclBhdHRlcm5DZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjU1OTlBRTBEMDBEOEJBMDBC
QjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMjU1OTlCMDBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlCMjU1OTkzMjBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFpbnRT
ZXJ2ZXJTb2xpZENnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTU2MEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdQYXJzZXJVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdB
NTgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUIyMjI3QTVEMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQYXRoU2VnQXJjLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmNwcAkocmV2
aXNpb24gMzY1MjYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogICAgICAgICAgICAg
ICAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiAgICAgICAgICAgICAgIDIwMDggRGly
ayBTY2h1bHplIDx2YnM4NUBnbXguZGU+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI5LDExICszMCwxMyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUGFpbnRT
ZXJ2ZXIuaCIKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHUGFpbnRT
ZXJ2ZXJTb2xpZC5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJT
VkdVUklSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0xNDQsNiArMTQ3LDI4IEBAIFNWR1BhaW50U2VydmVyKiBTVkdQ
YWludFNlcnZlcjo6c3Ryb2tlUGEKICAgICByZXR1cm4gc3Ryb2tlUGFpbnRTZXJ2ZXI7CiB9CiAK
K3ZvaWQgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAg
Y29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVU
b0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjApKTsK
KyAgICBjb250ZXh0LT5zZXRMaW5lQ2FwKHN0eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpKTsK
KyAgICBjb250ZXh0LT5zZXRMaW5lSm9pbihzdHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0eWxlKCkp
OworICAgIGlmIChzdHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0eWxlKCkgPT0gTWl0ZXJKb2luKQor
ICAgICAgICBjb250ZXh0LT5zZXRNaXRlckxpbWl0KHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VN
aXRlckxpbWl0KCkpOworCisgICAgY29uc3QgRGFzaEFycmF5JiBkYXNoZXMgPSBkYXNoQXJyYXlG
cm9tUmVuZGVyaW5nU3R5bGUob2JqZWN0LT5zdHlsZSgpKTsKKyNpZiBQTEFURk9STShDQUlSTykK
KyAgICBPd25BcnJheVB0cjxkb3VibGU+IGRzaChuZXcgZG91YmxlW2Rhc2hlcy5zaXplKCldKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBkYXNoZXMuc2l6ZSgpIDsgaSsrKQorICAgICAg
ICBkc2hbaV0gPSBkYXNoZXNbaV07CisgICAgZG91YmxlIGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJT
dHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ry
b2tlRGFzaE9mZnNldCgpLCAwLjApOworICAgIGNhaXJvX3NldF9kYXNoKGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLCBkc2guZ2V0KCksIGRhc2hlcy5zaXplKCksIGRhc2hPZmZzZXQpOworI2Vs
aWYgUExBVEZPUk0oQ0cpCisgICAgZmxvYXQgZGFzaE9mZnNldCA9IFNWR1JlbmRlclN0eWxlOjpj
c3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VEYXNo
T2Zmc2V0KCksIDAuMGYpOworCisgICAgQ0dDb250ZXh0U2V0TGluZURhc2goY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCksIGRhc2hPZmZzZXQsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCkp
OworI2VuZGlmCit9CisKIERhc2hBcnJheSBkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUoY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIERhc2hBcnJheSBhcnJheTsKSW5kZXg6IFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaAkocmV2aXNpb24gMzY1MjYpCisrKyBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMs
NiArMTAzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTVkdQYWludFNlcnZlcigp
OyAgICAgICAgCiAgICAgfTsKIAorICAgIHZvaWQgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChH
cmFwaGljc0NvbnRleHQqLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlck9iamVjdCopOworCiAg
ICAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgU1ZHUGFpbnRTZXJ2
ZXImKTsKIAogICAgIFNWR1BhaW50U2VydmVyKiBnZXRQYWludFNlcnZlckJ5SWQoRG9jdW1lbnQq
LCBjb25zdCBBdG9taWNTdHJpbmcmKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1Bh
aW50U2VydmVyU29saWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R1BhaW50U2VydmVyU29saWQuY3BwCShyZXZpc2lvbiAzNjUyNikKKysrIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR1BhaW50U2VydmVyU29saWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBEaXJrIFNjaHVsemUgPHZiczg1
QGdteC5kZT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMzAsMTEg
QEAKICNpbmNsdWRlICJTVkdQYWludFNlcnZlclNvbGlkLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVy
VHJlZUFzVGV4dC5oIgogCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJTVkdQYWludFNlcnZlci5oIgorI2luY2x1ZGUgIlJlbmRlclBh
dGguaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdQYWludFNlcnZlclNvbGlkOjpTVkdQ
YWludFNlcnZlclNvbGlkKCkKQEAgLTU2LDYgKzYyLDU0IEBAIFRleHRTdHJlYW0mIFNWR1BhaW50
U2VydmVyU29saWQ6OmV4dGVybmEKICAgICByZXR1cm4gdHM7CiB9CiAKK3ZvaWQgU1ZHUGFpbnRT
ZXJ2ZXJTb2xpZDo6cmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBS
ZW5kZXJPYmplY3QqIHBhdGgsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAg
IGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHlsZSA9IHBhdGgtPnN0eWxlKCktPnN2Z1N0eWxlKCk7
CisKKyAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShzdHlsZS0+ZmlsbFJ1bGUoKSk7CisKKyAgICBp
ZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN0eWxlLT5oYXNGaWxsKCkpCisg
ICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCk7CisKKyAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ry
b2tlVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhhc1N0cm9rZSgpKQorICAgICAgICBjb250ZXh0LT5z
dHJva2VQYXRoKCk7Cit9CisKK2Jvb2wgU1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6c2V0dXAoR3JhcGhp
Y3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50
VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAoreworCisgICAgUmVu
ZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0ID8gb2JqZWN0LT5zdHlsZSgpIDogMDsKKworICAgIGlm
ICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgKCFzdHlsZSB8fCBzdHlsZS0+c3Zn
U3R5bGUoKS0+aGFzRmlsbCgpKSkgeworICAgICAgICBSR0JBMzIgcmdiYSA9IGNvbG9yKCkucmdi
KCk7CisgICAgICAgIEFTU0VSVCghY29sb3IoKS5oYXNBbHBoYSgpKTsKKyAgICAgICAgaWYgKHN0
eWxlKQorICAgICAgICAgICAgcmdiYSA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEocmdiYSwgc3R5
bGUtPnN2Z1N0eWxlKCktPmZpbGxPcGFjaXR5KCkpOworCisgICAgICAgIGNvbnRleHQtPnNldEZp
bGxDb2xvcihyZ2JhKTsKKworICAgICAgICBpZiAoaXNQYWludGluZ1RleHQpCisgICAgICAgICAg
ICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY1RleHRGaWxsKTsKKyAgICB9CisKKyAgICBp
ZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgKCFzdHlsZSB8fCBzdHlsZS0+
c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpKSB7CisgICAgICAgIFJHQkEzMiByZ2JhID0gY29sb3Io
KS5yZ2IoKTsKKyAgICAgICAgQVNTRVJUKCFjb2xvcigpLmhhc0FscGhhKCkpOworICAgICAgICBp
ZiAoc3R5bGUpCisgICAgICAgICAgICByZ2JhID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShyZ2Jh
LCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlT3BhY2l0eSgpKTsKKworICAgICAgICBjb250ZXh0
LT5zZXRTdHJva2VDb2xvcihyZ2JhKTsKKworICAgICAgICBpZiAoc3R5bGUpCisgICAgICAgICAg
ICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3QpOworCisg
ICAgICAgIGlmIChpc1BhaW50aW5nVGV4dCkKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFRleHRE
cmF3aW5nTW9kZShjVGV4dFN0cm9rZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdQYWludFNlcnZlclNvbGlkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oCShyZXZpc2lvbiAzNjUyNikKKysrIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyU29saWQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYs
NiArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgVGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikgY29uc3Q7CiAKICAgICAgICAg
dmlydHVhbCBib29sIHNldHVwKEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBSZW5kZXJPYmplY3Qq
LCBTVkdQYWludFRhcmdldFR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgUmVuZGVy
T2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIFNWR1BhaW50U2VydmVyU29saWQoKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Nh
aXJvL1NWR1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcAkocmV2
aXNpb24gMzY1MjYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZl
ckdyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwyNSArMzQsNiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFRPRE86IFNoYXJlIHRoaXMgY29kZSB3aXRoIGFsbCBT
VkdQYWludFNlcnZlcnMKLXN0YXRpYyB2b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCk7Ci0KLSAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoU1ZHUmVu
ZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN0cm9rZVdpZHRo
KCksIDEuMCkpOwotICAgIGNvbnRleHQtPnNldExpbmVDYXAoc3R5bGUtPmNhcFN0eWxlKCkpOwot
ICAgIGNvbnRleHQtPnNldExpbmVKb2luKHN0eWxlLT5qb2luU3R5bGUoKSk7Ci0gICAgaWYgKHN0
eWxlLT5qb2luU3R5bGUoKSA9PSBNaXRlckpvaW4pCi0gICAgICAgIGNvbnRleHQtPnNldE1pdGVy
TGltaXQoc3R5bGUtPnN0cm9rZU1pdGVyTGltaXQoKSk7Ci0KLSAgICBjb25zdCBEYXNoQXJyYXkm
IGRhc2hlcyA9IGRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShvYmplY3QtPnN0eWxlKCkpOwot
ICAgIE93bkFycmF5UHRyPGRvdWJsZT4gZHNoKG5ldyBkb3VibGVbZGFzaGVzLnNpemUoKV0pOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IGRhc2hlcy5zaXplKCkgOyBpKyspCi0gICAgICAg
IGRzaFtpXSA9IGRhc2hlc1tpXTsKLSAgICBkb3VibGUgZGFzaE9mZnNldCA9IFNWR1JlbmRlclN0
eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdHJva2VEYXNoT2Zmc2V0
KCksIDAuMCk7Ci0gICAgY2Fpcm9fc2V0X2Rhc2goY3IsIGRzaC5nZXQoKSwgZGFzaGVzLnNpemUo
KSwgZGFzaE9mZnNldCk7Ci19Ci0KIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAo
R3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNW
R1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAogewogICAg
IG1fb3duZXJFbGVtZW50LT5idWlsZEdyYWRpZW50KCk7CkBAIC02Myw3ICs0NCw3IEBAIGJvb2wg
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGgKICAgICBjYWlyb19tYXRyaXhfdCBt
YXRyaXg7CiAgICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkgKCZtYXRyaXgpOwogICAgIGNv
bnN0IGNhaXJvX21hdHJpeF90IGdyYWRpZW50X21hdHJpeCA9IGdyYWRpZW50VHJhbnNmb3JtKCk7
Ci0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpLT5zdmdT
dHlsZSgpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKIAogICAg
IGlmICh0aGlzLT50eXBlKCkgPT0gTGluZWFyR3JhZGllbnRQYWludFNlcnZlcikgewogICAgICAg
ICBjb25zdCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50KiBsaW5lYXIgPSBzdGF0aWNfY2Fz
dDxjb25zdCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Kj4odGhpcyk7CkBAIC0xNjEsMTAg
KzE0MiwxMCBAQCBib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoCiAgICAg
ICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShwYXR0ZXJuLCBvZmZzZXQsIGNv
bG9yLnJlZCgpIC8gMjU1LjAsIGNvbG9yLmdyZWVuKCkgLyAyNTUuMCwgY29sb3IuYmx1ZSgpIC8g
MjU1LjAsIGNvbG9yLmFscGhhKCkgLyAyNTUuMCk7CiAgICAgfQogCi0gICAgaWYgKCh0eXBlICYg
QXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFzRmlsbCgpKQotICAgICAgICBjYWly
b19zZXRfZmlsbF9ydWxlKGNyLCBzdHlsZS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQgPyBD
QUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVfV0lORElORyk7CisgICAg
aWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+
aGFzRmlsbCgpKQorICAgICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBzdHlsZS0+c3ZnU3R5
bGUoKS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9P
REQgOiBDQUlST19GSUxMX1JVTEVfV0lORElORyk7CiAKLSAgICBpZiAoKHR5cGUgJiBBcHBseVRv
U3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhhc1N0cm9rZSgpKQorICAgIGlmICgodHlwZSAm
IEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tl
KCkpCiAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9i
amVjdCk7CiAKICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsKSW5kZXg6IFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclBhdHRl
cm5DYWlyby5jcHAJKHJldmlzaW9uIDM2NTI2KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fp
cm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywz
MiArMzMsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBUT0RPOiBTaGFyZSB0aGlz
IGNvZGUgd2l0aCBhbGwgU1ZHUGFpbnRTZXJ2ZXJzCi1zdGF0aWMgdm9pZCBhcHBseVN0cm9rZVN0
eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU1ZHUmVuZGVyU3R5
bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBjYWlyb190KiBj
ciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgY29udGV4dC0+c2V0U3Ryb2tl
VGhpY2tuZXNzKFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0
eWxlLT5zdHJva2VXaWR0aCgpLCAxLjApKTsKLSAgICBjb250ZXh0LT5zZXRMaW5lQ2FwKHN0eWxl
LT5jYXBTdHlsZSgpKTsKLSAgICBjb250ZXh0LT5zZXRMaW5lSm9pbihzdHlsZS0+am9pblN0eWxl
KCkpOwotICAgIGlmIChzdHlsZS0+am9pblN0eWxlKCkgPT0gTWl0ZXJKb2luKQotICAgICAgICBj
b250ZXh0LT5zZXRNaXRlckxpbWl0KHN0eWxlLT5zdHJva2VNaXRlckxpbWl0KCkpOwotCi0gICAg
Y29uc3QgRGFzaEFycmF5JiBkYXNoZXMgPSBkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUob2Jq
ZWN0LT5zdHlsZSgpKTsKLSAgICBPd25BcnJheVB0cjxkb3VibGU+IGRzaChuZXcgZG91YmxlW2Rh
c2hlcy5zaXplKCldKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5zaXplKCkg
OyBpKyspCi0gICAgICAgIGRzaFtpXSA9IGRhc2hlc1tpXTsKLSAgICBkb3VibGUgZGFzaE9mZnNl
dCA9IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5z
dHJva2VEYXNoT2Zmc2V0KCksIDAuMCk7Ci0gICAgY2Fpcm9fc2V0X2Rhc2goY3IsIGRzaC5nZXQo
KSwgZGFzaGVzLnNpemUoKSwgZGFzaE9mZnNldCk7Ci19Ci0KIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJQ
YXR0ZXJuOjpzZXR1cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQp
IGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0IHRhcmdldFJlY3QgPSBvYmplY3QtPnJlbGF0aXZlQkJv
eChmYWxzZSk7CiAKLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0
eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHls
ZSgpOwogCi0gICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0
aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3Ryb2tlV2lkdGgoKSwgMS4wKTsKKyAgICBmbG9h
dCBzdHJva2VXaWR0aCA9IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmpl
Y3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjApOwogCiAgICAgaWYgKHRh
cmdldFJlY3Qud2lkdGgoKSA9PSAwKQogICAgICAgICB0YXJnZXRSZWN0ID0gRmxvYXRSZWN0KHRh
cmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgc3Ryb2tlV2lkdGgsIHRhcmdldFJlY3QuaGVp
Z2h0KCkpOwpAQCAtODMsMTAgKzY0LDEwIEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpz
ZXR1cChHcmFwaGkKICAgICBjYWlyb19tYXRyaXhfaW52ZXJ0KCZtYXRyaXgpOwogICAgIGNhaXJv
X3BhdHRlcm5fc2V0X21hdHJpeChwYXR0ZXJuLCAmbWF0cml4KTsKIAotICAgIGlmICgodHlwZSAm
IEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhhc0ZpbGwoKSkKLSAgICAgICAgY2Fp
cm9fc2V0X2ZpbGxfcnVsZShjciwgc3R5bGUtPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REID8g
Q0FJUk9fRklMTF9SVUxFX0VWRU5fT0REIDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcpOworICAg
IGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPnN2Z1N0eWxlKCkt
Pmhhc0ZpbGwoKSkKKyAgICAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgc3R5bGUtPnN2Z1N0
eWxlKCktPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REID8gQ0FJUk9fRklMTF9SVUxFX0VWRU5f
T0REIDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcpOwogCi0gICAgaWYgKCh0eXBlICYgQXBwbHlU
b1N0cm9rZVRhcmdldFR5cGUpICYmIHN0eWxlLT5oYXNTdHJva2UoKSkKKyAgICBpZiAoKHR5cGUg
JiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0cm9r
ZSgpKQogICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBv
YmplY3QpOwogCiAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7CkluZGV4OiBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclNvbGlkQ2Fpcm8uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyU29saWRD
YWlyby5jcHAJKHJldmlzaW9uIDM2NTI2KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8v
U1ZHUGFpbnRTZXJ2ZXJTb2xpZENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHUGFp
bnRTZXJ2ZXJTb2xpZC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotYm9vbCBTVkdQYWludFNlcnZlclNvbGlkOjpzZXR1cChHcmFwaGljc0Nv
bnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJn
ZXRUeXBlIHR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0Ci17Ci0gICAgLy8gVE9ETzog
c2hhcmUgdGhpcyBjb2RlIHdpdGggb3RoZXIgUGFpbnRTZXJ2ZXJzCi0KLSAgICBjYWlyb190KiBj
ciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxl
KiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKLQotICAgIGZsb2F0IHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhOwotICAgIGNvbG9yKCkuZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Ci0KLSAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN0
eWxlLT5oYXNGaWxsKCkpIHsKLSAgICAgICAgYWxwaGEgPSBzdHlsZS0+ZmlsbE9wYWNpdHkoKTsK
LQotICAgICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBzdHlsZS0+ZmlsbFJ1bGUoKSA9PSBS
VUxFX0VWRU5PREQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVf
V0lORElORyk7Ci0gICAgfQotCi0gICAgaWYgKCh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5
cGUpICYmIHN0eWxlLT5oYXNTdHJva2UoKSkgewotICAgICAgICBhbHBoYSA9IHN0eWxlLT5zdHJv
a2VPcGFjaXR5KCk7Ci0KLSAgICAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY3IsIFNWR1JlbmRl
clN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdHJva2VXaWR0aCgp
LCAxLjApKTsKLSAgICAgICAgY29udGV4dC0+c2V0TGluZUNhcChzdHlsZS0+Y2FwU3R5bGUoKSk7
Ci0gICAgICAgIGNvbnRleHQtPnNldExpbmVKb2luKHN0eWxlLT5qb2luU3R5bGUoKSk7Ci0gICAg
ICAgIGlmIChzdHlsZS0+am9pblN0eWxlKCkgPT0gTWl0ZXJKb2luKQotICAgICAgICAgICAgY29u
dGV4dC0+c2V0TWl0ZXJMaW1pdChzdHlsZS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsKLQotICAgICAg
ICBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcyA9IGRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShv
YmplY3QtPnN0eWxlKCkpOwotICAgICAgICBkb3VibGUqIGRzaCA9IG5ldyBkb3VibGVbZGFzaGVz
LnNpemUoKV07Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgZGFzaGVzLnNpemUo
KSA7IGkrKykKLSAgICAgICAgICAgIGRzaFtpXSA9IGRhc2hlc1tpXTsKLSAgICAgICAgZG91Ymxl
IGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0
LCBzdHlsZS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjApOwotICAgICAgICBjYWlyb19zZXRfZGFz
aChjciwgZHNoLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsKLSAgICAgICAgZGVsZXRlW10g
ZHNoOwotICAgIH0KLQotICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9DZ1N1cHBvcnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5jcHAJ
KHJldmlzaW9uIDM2NTI2KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDgsMjAgKzQ4LDYgQEAgQ0dBZmZpbmVUcmFuc2Zvcm0gQ0dB
ZmZpbmVUcmFuc2Zvcm1NYWtlTQogICAgIHJldHVybiB0cmFuc2Zvcm07CiB9CiAKLXZvaWQgYXBw
bHlTdHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJlbmRlclN0
eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgY29udGV4dC0+
c2V0U3Ryb2tlVGhpY2tuZXNzKFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChv
YmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjBmKSk7Ci0gICAgY29u
dGV4dC0+c2V0TGluZUNhcChzdHlsZS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSk7Ci0gICAgY29u
dGV4dC0+c2V0TGluZUpvaW4oc3R5bGUtPnN2Z1N0eWxlKCktPmpvaW5TdHlsZSgpKTsKLSAgICBj
b250ZXh0LT5zZXRNaXRlckxpbWl0KHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VNaXRlckxpbWl0
KCkpOwotCi0gICAgLy8gRklYTUU6IERhc2hBcnJheSBzdXBwb3J0IGNvdWxkIGVhc2lseSBiZSBt
b3ZlZCBpbnRvIEdyYXBoaWNzQ29udGV4dCwgYW5kIHRoaXMgZnVuY3Rpb24gdGhlbiBtYWRlIHgt
cGxhdGZvcm0KLSAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcyA9IGRhc2hBcnJheUZyb21SZW5k
ZXJpbmdTdHlsZShzdHlsZSk7Ci0gICAgZmxvYXQgZGFzaE9mZnNldCA9IFNWR1JlbmRlclN0eWxl
Ojpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VE
YXNoT2Zmc2V0KCksIDAuMGYpOwotCi0gICAgQ0dDb250ZXh0U2V0TGluZURhc2goY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCksIGRhc2hPZmZzZXQsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXpl
KCkpOwotfQotCiBDR0NvbnRleHRSZWYgc2NyYXRjaENvbnRleHQoKQogewogICAgIHN0YXRpYyBD
R0NvbnRleHRSZWYgc2NyYXRjaCA9IDA7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9D
Z1N1cHBvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9DZ1N1cHBv
cnQuaAkocmV2aXNpb24gMzY1MjYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9DZ1N1cHBv
cnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsNiBAQCBjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7CiAKIENHQWZmaW5lVHJhbnNmb3JtIENHQWZmaW5lVHJhbnNmb3JtTWFrZU1hcEJldHdlZW5S
ZWN0cyhDR1JlY3Qgc291cmNlLCBDR1JlY3QgZGVzdCk7CiAKLXZvaWQgYXBwbHlTdHJva2VTdHls
ZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlck9i
amVjdCopOwotCiBDR0NvbnRleHRSZWYgc2NyYXRjaENvbnRleHQoKTsKIEZsb2F0UmVjdCBzdHJv
a2VCb3VuZGluZ0JveChjb25zdCBQYXRoJiBwYXRoLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRl
ck9iamVjdCopOwogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZl
clNvbGlkQ2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1Bh
aW50U2VydmVyU29saWRDZy5jcHAJKHJldmlzaW9uIDM2NTI2KQorKysgV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
NyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHdpbGRmb3hAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJv
amVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFp
bnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRl
ICJTVkdQYWludFNlcnZlclNvbGlkLmgiCi0KLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUg
IkNnU3VwcG9ydC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgU1ZHUGFpbnRTZXJ2
ZXJTb2xpZDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0
KSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHVzZSBhbnkg
Q0ctc3BlY2lmaWMgY2FsbHMsIGhvd2V2ZXIgaXQncyBub3QgeWV0Ci0gICAgLy8gY3Jvc3MgcGxh
dGZvcm0sIGJlY2F1c2UgQ0cgaGFuZGxlcyBmaWxsIHJ1bGUgZGlmZmVyZW50IGZyb20gb3RoZXIg
Z3JhcGhpY3MKLSAgICAvLyBwbGF0Zm9ybXMuICBDRyBtYWtlcyB5b3UgdXNlIHR3byBzZXBhcmF0
ZSBmaWxsIGNhbGxzLCBvdGhlciBwbGF0Zm9ybXMgc2V0Ci0gICAgLy8gdGhlIGZpbGwgcnVsZSBz
dGF0ZSBvbiB0aGUgY29udGV4dCBhbmQgdGhlbiBjYWxsIGEgZ2VuZXJpYyAiZmlsbFBhdGgiCi0K
LSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QgPyBvYmplY3QtPnN0eWxlKCkgOiAwOwot
Ci0gICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiAoIXN0eWxlIHx8IHN0
eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpKSB7Ci0gICAgICAgIFJHQkEzMiByZ2JhID0gY29s
b3IoKS5yZ2IoKTsKLSAgICAgICAgQVNTRVJUKCFjb2xvcigpLmhhc0FscGhhKCkpOwotICAgICAg
ICBpZiAoc3R5bGUpCi0gICAgICAgICAgICByZ2JhID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShy
Z2JhLCBzdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbE9wYWNpdHkoKSk7Ci0KLSAgICAgICAgY29udGV4
dC0+c2V0RmlsbENvbG9yKHJnYmEpOwotCi0gICAgICAgIGlmIChpc1BhaW50aW5nVGV4dCkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShjVGV4dEZpbGwpOwotICAgIH0K
LQotICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiAoIXN0eWxlIHx8
IHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkpIHsKLSAgICAgICAgUkdCQTMyIHJnYmEg
PSBjb2xvcigpLnJnYigpOwotICAgICAgICBBU1NFUlQoIWNvbG9yKCkuaGFzQWxwaGEoKSk7Ci0g
ICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJnYmEgPSBjb2xvcldpdGhPdmVycmlkZUFs
cGhhKHJnYmEsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VPcGFjaXR5KCkpOwotCi0gICAgICAg
IGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHJnYmEpOwotCi0gICAgICAgIGlmIChzdHlsZSkKLSAg
ICAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVj
dCk7Ci0KLSAgICAgICAgaWYgKGlzUGFpbnRpbmdUZXh0KQotICAgICAgICAgICAgY29udGV4dC0+
c2V0VGV4dERyYXdpbmdNb2RlKGNUZXh0U3Ryb2tlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotLy8gdmltOnRzPTQ6
bm9ldApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJTb2xpZFF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZl
clNvbGlkUXQuY3BwCShyZXZpc2lvbiAzNjUyNikKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0
L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBA
QAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94
QGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyCi0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQotICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2
ZXJTb2xpZC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyUGF0aC5oIgotCi0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotYm9vbCBTVkdQYWludFNlcnZlclNvbGlkOjpzZXR1cChHcmFwaGljc0NvbnRleHQqJiBjb250
ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUs
IGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0Ci17Ci0gICAgUVBhaW50ZXIqIHBhaW50ZXIoY29u
dGV4dCA/IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogMCk7Ci0gICAgUV9BU1NFUlQocGFp
bnRlcik7Ci0KLSAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBvYmplY3QgPyBvYmplY3Qt
PnN0eWxlKCkgOiAwOwotICAgIC8vIFRPRE8/IHBhaW50ZXItPnNldE9wYWNpdHkocmVuZGVyU3R5
bGUtPm9wYWNpdHkoKSk7Ci0KLSAgICBRQ29sb3IgYyA9IGNvbG9yKCk7Ci0KLSAgICBpZiAoKHR5
cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmICghcmVuZGVyU3R5bGUgfHwgcmVuZGVyU3R5
bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkpIHsKLSAgICAgICAgaWYgKHJlbmRlclN0eWxlKQot
ICAgICAgICAgICAgYy5zZXRBbHBoYUYocmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxPcGFj
aXR5KCkpOwotCi0gICAgICAgIFFCcnVzaCBicnVzaChjKTsKLSAgICAgICAgcGFpbnRlci0+c2V0
QnJ1c2goYnJ1c2gpOwotCi0gICAgICAgIGlmIChyZW5kZXJTdHlsZSkKLSAgICAgICAgICAgIGNv
bnRleHQtPnNldEZpbGxSdWxlKHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpKTsK
LQotICAgICAgICAvKiBpZihpc1BhaW50aW5nVGV4dCgpKSAuLi4gKi8KLSAgICB9Ci0KLSAgICBp
ZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgKCFyZW5kZXJTdHlsZSB8fCBy
ZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpKSB7Ci0gICAgICAgIGlmIChyZW5k
ZXJTdHlsZSkKLSAgICAgICAgICAgIGMuc2V0QWxwaGFGKHJlbmRlclN0eWxlLT5zdmdTdHlsZSgp
LT5zdHJva2VPcGFjaXR5KCkpOwotCi0gICAgICAgIFFQZW4gcGVuKGMpOwotICAgICAgICBpZiAo
cmVuZGVyU3R5bGUpCi0gICAgICAgICAgICBzZXRQZW5Qcm9wZXJ0aWVzKG9iamVjdCwgcmVuZGVy
U3R5bGUsIHBlbik7Ci0gICAgICAgIHBhaW50ZXItPnNldFBlbihwZW4pOwotCi0gICAgICAgIC8q
IGlmKGlzUGFpbnRpbmdUZXh0KCkpIC4uLiAqLwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0vLyB2aW06dHM9NDpub2V0
Cg==
</data>
<flag name="review"
          id="10510"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23503</attachid>
            <date>2008-09-17 11:06:52 -0700</date>
            <delta_ts>2008-09-20 11:46:51 -0700</delta_ts>
            <desc>SVGPaintServer cleanUp 2</desc>
            <filename>SVGPaintServer-cleanUp2.patch</filename>
            <type>text/plain</type>
            <size>36541</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjU0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMDgtMDktMTcgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDbGVhbiBV
cCBvZiBTVkdQYWludFNlcnZlci4gQ29tYmluZWQgdGhlIFNWR1BhaW50U2VydmVyU29saWQqCisg
ICAgICAgIHRvIGEgdW5pdCBTVkdQYWludFNlcnZlclNvbGlkLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gpOgorICAgICAgICAqIHN2Zy9ncmFwaGlj
cy9TVkdQYWludFNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBseVN0cm9rZVN0eWxl
VG9Db250ZXh0KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaDoKKyAg
ICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYWludFNlcnZlclNvbGlkOjpyZW5kZXJQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhaW50U2VydmVyU29saWQ6OnNldHVwKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
U1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9jYWlyby9TVkdQ
YWludFNlcnZlckdyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRT
ZXJ2ZXJHcmFkaWVudDo6c2V0dXApOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9jYWlyby9TVkdQ
YWludFNlcnZlclBhdHRlcm5DYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNl
cnZlclBhdHRlcm46OnNldHVwKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFp
bnRTZXJ2ZXJTb2xpZENhaXJvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
Y2cvQ2dTdXBwb3J0LmNwcDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0Lmg6
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyU29saWRDZy5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyR3JhZGllbnRR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXR1cCk6
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyUXQuY3BwOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclNvbGlkUXQuY3BwOiBSZW1vdmVkLgor
CiAyMDA4LTA5LTE3ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzNjU0MCkK
KysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTMyNTksNyArMzI1
OSw2IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fp
cm8vU1ZHUGFpbnRTZXJ2ZXJDYWlyby5jcHAgXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJv
L1NWR1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHAgXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2NhaXJvL1NWR1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJTb2xpZENhaXJvLmNwcCBcCiAJV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvY2Fpcm8vU1ZHUmVzb3VyY2VDbGlwcGVyQ2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3N2
Zy9ncmFwaGljcy9jYWlyby9TVkdSZXNvdXJjZUZpbHRlckNhaXJvLmNwcCBcCiAJV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUmVzb3VyY2VNYXNrZXJDYWlyby5jcHAKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNp
b24gMzY1NDApCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIy
LDcgKzE2MjIsNiBAQCBTT1VSQ0VTICs9IFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NWR1Bh
aW50U2VydmVyUGF0dGVyblF0LmNwcCBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9xdC9TVkdQYWlu
dFNlcnZlclF0LmNwcCBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclJh
ZGlhbEdyYWRpZW50UXQuY3BwIFwKLSAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2Vy
dmVyU29saWRRdC5jcHAgXAogICAgICAgICBzdmcvZ3JhcGhpY3MvcXQvU1ZHUmVzb3VyY2VDbGlw
cGVyUXQuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NWR1Jlc291cmNlRmlsdGVyUXQu
Y3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NWR1Jlc291cmNlTWFza2VyUXQuY3BwCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDM2NTQwKQor
KysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTQ3MzIsMjYgKzE0NzMyLDYgQEAKIAkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJ
CQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBo
aWNzXGNnXFNWR1BhaW50U2VydmVyU29saWRDZy5jcHAiDQotCQkJCQkJPg0KLQkJCQkJCTxGaWxl
Q29uZmlndXJhdGlvbg0KLQkJCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb3xXaW4zMiINCi0JCQkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJCT4NCi0JCQkJCQkJPFRvb2wNCi0JCQkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCS8+DQotCQkJCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4NCi0JCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQkJTmFtZT0iUmVs
ZWFzZV9DYWlyb3xXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJ
CQkJCT4NCi0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQot
CQkJCQkJCS8+DQotCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTwvRmlsZT4NCi0J
CQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcY2dcU1ZHUmVz
b3VyY2VDbGlwcGVyQ2cuY3BwIg0KIAkJCQkJCT4NCiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24N
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMzY1NDApCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMzA4MSw3ICszMDgxLDYgQEAKIAkJQjI1NTk5MkYwRDAwRDhCQTAw
QkI4MjVDIC8qIFNWR1BhaW50U2VydmVyQ2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTMwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1BhaW50
U2VydmVyQ2cuY3BwICovOyB9OwogCQlCMjU1OTkzMDBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFp
bnRTZXJ2ZXJHcmFkaWVudENnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyNTU5ODk0MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckdy
YWRpZW50Q2cuY3BwICovOyB9OwogCQlCMjU1OTkzMTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFp
bnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjI1NTk4OTUwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyUGF0
dGVybkNnLmNwcCAqLzsgfTsKLQkJQjI1NTk5MzIwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50
U2VydmVyU29saWRDZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjU1OTg5NjBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZENn
LmNwcCAqLzsgfTsKIAkJQjI1NTk5MzMwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1Jlc291cmNlQ2xp
cHBlckNnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyNTU5ODk3MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdSZXNvdXJjZUNsaXBwZXJDZy5jcHAgKi87
IH07CiAJCUIyNTU5OTM1MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdSZXNvdXJjZUZpbHRlckNnLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTkw
RDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlRmlsdGVyQ2cubW0gKi87IH07CiAJCUIyNTU5
OTM3MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1hc2tlckNnLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OUIwRDAwRDhCODAwQkI4
MjVDIC8qIFNWR1Jlc291cmNlTWFza2VyQ2cubW0gKi87IH07CkBAIC03NTE3LDcgKzc1MTYsNiBA
QAogCQlCMjU1OTg5MzBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGFpbnRTZXJ2ZXJDZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNTU5ODk0MEQwMEQ4QjgwMEJCODI1QyAv
KiBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyNTU5ODk1MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZl
clBhdHRlcm5DZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZH
UGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlC
MjU1OTg5NjBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYWludFNlcnZlclNvbGlkQ2cu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjU1OTg5NzBEMDBEOEI4MDBCQjgy
NUMgLyogU1ZHUmVzb3VyY2VDbGlwcGVyQ2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNWR1Jlc291cmNlQ2xpcHBlckNnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjI1NTk4OTkwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlRmlsdGVy
Q2cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU1ZHUmVzb3Vy
Y2VGaWx0ZXJDZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OUIwRDAw
RDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFza2VyQ2cubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMTMwLDcgKzEyMTI4LDYgQEAKIAkJCQlCMjU1OTg5MzBE
MDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAgKi8sCiAJCQkJQjI1NTk4OTQw
RDAwRDhCODAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAgKi8sCiAJCQkJ
QjI1NTk4OTUwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcCAq
LywKLQkJCQlCMjU1OTg5NjBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZENn
LmNwcCAqLywKIAkJCQlCMjU1OTg5NzBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VDbGlw
cGVyQ2cuY3BwICovLAogCQkJCUIyNTU5ODk5MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdSZXNvdXJj
ZUZpbHRlckNnLm1tICovLAogCQkJCUIyNTU5ODlCMEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdSZXNv
dXJjZU1hc2tlckNnLm1tICovLApAQCAtMTY5NTYsNyArMTY5NTMsNiBAQAogCQkJCUIyNTU5OTMx
MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMjU1OTlBRTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJSYWRp
YWxHcmFkaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjU1OTlCMDBEMDBEOEJBMDBCQjgy
NUMgLyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjU1OTkz
MjBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyMjI3QTU2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQYXJzZXJVdGlsaXRpZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBNTgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1Bh
dGhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTVEMEQwMEJGMjIwMDcxQjc4
MiAvKiBTVkdQYXRoU2VnQXJjLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAzNjU0MCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIKICNpbmNs
dWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CkBAIC0yMzEsNiArMjMyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBJbnRSZWN0IGZvY3VzUmluZ0JvdW5kaW5nUmVjdCgpOwogCiAgICAgICAg
IHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKTsKKyAgICAgICAgdm9pZCBzZXRMaW5lRGFzaChjb25z
dCBEYXNoQXJyYXkmLCBmbG9hdCYpOwogICAgICAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2lu
KTsKICAgICAgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KTsKIApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWly
by5jcHAJKHJldmlzaW9uIDM2NTQwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcg
QEAKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiAjaWYgUExBVEZP
Uk0oR1RLKQogI2luY2x1ZGUgPGdkay9nZGsuaD4KQEAgLTgwNyw2ICs4MDgsMTQgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcAogICAgIGNhaXJvX3NldF9saW5lX2Nh
cChtX2RhdGEtPmNyLCBjYWlyb0NhcCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRM
aW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQmIGRhc2hPZmZzZXQpCit7Cisg
ICAgT3duQXJyYXlQdHI8ZG91YmxlPiBkc2gobmV3IGRvdWJsZVtkYXNoZXMuc2l6ZSgpXSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgpOyBpKyspCisgICAgICAgIGRz
aFtpXSA9IGRhc2hlc1tpXTsKKyAgICBjYWlyb19zZXRfZGFzaChtX2RhdGEtPmNyLCBkc2guZ2V0
KCksIGRhc2hlcy5zaXplKCksIGRhc2hPZmZzZXQpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwCShyZXZpc2lvbiAzNjU0MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTgs
NiArNzE4LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAKICAg
ICB9CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJy
YXkmIGRhc2hlcywgZmxvYXQmIGRhc2hPZmZzZXQpCit7CisgICAgQ0dDb250ZXh0U2V0TGluZURh
c2gocGxhdGZvcm1Db250ZXh0KCksIGRhc2hPZmZzZXQsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5z
aXplKCkpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4g
am9pbikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtNzM0LDcgKzczOSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm8KICAgICAgICAgICAgIGJy
ZWFrOwogICAgIH0KIH0KLSAKKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGF0aCgpCiB7
CiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCShy
ZXZpc2lvbiAzNjU0MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwyNCArMzksMjUgQEAKICNlbmRpZgog
CiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotI2luY2x1
ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2
YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJQZW4uaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCi0jaW5jbHVkZSA8UVN0YWNrPgorI2luY2x1ZGUg
PFFEZWJ1Zz4KICNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpbmNsdWRlIDxRUG9seWdvbkY+Ci0jaW5j
bHVkZSA8UVBhaW50ZXJQYXRoPgogI2luY2x1ZGUgPFFQYWludERldmljZT4KLSNpbmNsdWRlIDxR
UGl4bWFwPgogI2luY2x1ZGUgPFFQYWludEVuZ2luZT4KLSNpbmNsdWRlIDxRRGVidWc+CisjaW5j
bHVkZSA8UVBhaW50ZXJQYXRoPgorI2luY2x1ZGUgPFFQaXhtYXA+CisjaW5jbHVkZSA8UVBvbHln
b25GPgorI2luY2x1ZGUgPFFTdGFjaz4KKyNpbmNsdWRlIDxRVmVjdG9yPgogCiAjaWZuZGVmIE1f
UEkKICNkZWZpbmUgTV9QSSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2CkBAIC03ODQsNiArNzg1LDI2
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAKICAgICBwLT5zZXRQ
ZW4oblBlbik7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBE
YXNoQXJyYXkmIGRhc2hlcywgZmxvYXQmIGRhc2hPZmZzZXQpCit7CisgICAgUVBhaW50ZXIgKnAg
PSBtX2RhdGEtPnAoKTsKKyAgICBRUGVuIHBlbiA9IHAtPnBlbigpOworICAgIHVuc2lnbmVkIGlu
dCBkYXNoTGVuZ3RoID0gIWRhc2hlcy5pc0VtcHR5KCkgPyBkYXNoZXMuc2l6ZSgpIDogMDsKKyAg
ICBpZihkYXNoTGVuZ3RoKSB7CisgICAgICAgIFFWZWN0b3I8cXJlYWw+IHBhdHRlcm47CisgICAg
ICAgIHVuc2lnbmVkIGludCBjb3VudCA9IChkYXNoTGVuZ3RoICUgMikgPT0gMCA/IGRhc2hMZW5n
dGggOiBkYXNoTGVuZ3RoICogMjsKKworICAgICAgICBmb3IodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIHBhdHRlcm4uYXBwZW5kKGRhc2hlc1tpICUgZGFz
aExlbmd0aF0gLyAoZmxvYXQpcGVuLndpZHRoRigpKTsKKworICAgICAgICBwZW4uc2V0RGFzaFBh
dHRlcm4ocGF0dGVybik7CisKKyAgICAgICAgUV9VTlVTRUQoZGFzaE9mZnNldCk7CisgICAgICAg
IC8vIFRPRE86IGRhc2gtb2Zmc2V0LCBkb2VzL3dpbGwgcXQ0IEFQSSBhbGxvdyBpdD8gKFJvYikK
KyAgICB9CisgICAgcC0+c2V0UGVuKHBlbik7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRMaW5lSm9pbihMaW5lSm9pbiBsaikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJ
bmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmNwcAkocmV2aXNpb24gMzY1
NDApCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogICAgICAgICAgICAgICAyMDA3IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiAgICAgICAgICAgICAgIDIwMDggRGlyayBTY2h1bHpl
IDx2YnM4NUBnbXguZGU+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDEx
ICszMCwxMyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIK
IAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5o
IgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJTb2xp
ZC5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdVUklSZWZl
cmVuY2UuaCIKKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC0xNDQsNiArMTQ3LDE5IEBAIFNWR1BhaW50U2VydmVyKiBTVkdQYWludFNlcnZl
cjo6c3Ryb2tlUGEKICAgICByZXR1cm4gc3Ryb2tlUGFpbnRTZXJ2ZXI7CiB9CiAKK3ZvaWQgYXBw
bHlTdHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJlbmRlclN0
eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgY29udGV4dC0+
c2V0U3Ryb2tlVGhpY2tuZXNzKFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChv
YmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjApKTsKKyAgICBjb250
ZXh0LT5zZXRMaW5lQ2FwKHN0eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpKTsKKyAgICBjb250
ZXh0LT5zZXRMaW5lSm9pbihzdHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0eWxlKCkpOworICAgIGlm
IChzdHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0eWxlKCkgPT0gTWl0ZXJKb2luKQorICAgICAgICBj
b250ZXh0LT5zZXRNaXRlckxpbWl0KHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VNaXRlckxpbWl0
KCkpOworCisgICAgY29uc3QgRGFzaEFycmF5JiBkYXNoZXMgPSBkYXNoQXJyYXlGcm9tUmVuZGVy
aW5nU3R5bGUob2JqZWN0LT5zdHlsZSgpKTsKKyAgICBmbG9hdCBkYXNoT2Zmc2V0ID0gU1ZHUmVu
ZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN2Z1N0eWxlKCkt
PnN0cm9rZURhc2hPZmZzZXQoKSwgMC4wZik7CisgICAgY29udGV4dC0+c2V0TGluZURhc2goZGFz
aGVzLCBkYXNoT2Zmc2V0KTsKK30KKwogRGFzaEFycmF5IGRhc2hBcnJheUZyb21SZW5kZXJpbmdT
dHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgRGFzaEFycmF5IGFycmF5OwpJ
bmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5oCShyZXZpc2lvbiAzNjU0MCkK
KysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDEzICszNCw2IEBACiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNh
dGlvblNlcnZpY2VzLmg+CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPHFn
bG9iYWwuaD4KLVFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUVBlbjsKLVFUX0VORF9OQU1FU1BB
Q0UKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgdHlwZWRlZiBWZWN0b3I8Q0dGbG9h
dD4gRGFzaEFycmF5OwogI2Vsc2UKQEAgLTk2LDEzICs4OSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZvaWQgY2xpcFRvRmlsbFBhdGgoQ0dDb250ZXh0UmVmLCBjb25zdCBSZW5k
ZXJPYmplY3QqKSBjb25zdDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgICAgIHZv
aWQgc2V0UGVuUHJvcGVydGllcyhjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHls
ZSosIFFQZW4mKSBjb25zdDsKLSNlbmRpZgogICAgIHByb3RlY3RlZDoKICAgICAgICAgU1ZHUGFp
bnRTZXJ2ZXIoKTsgICAgICAgIAogICAgIH07CiAKKyAgICB2b2lkIGFwcGx5U3Ryb2tlU3R5bGVU
b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJPYmpl
Y3QqKTsKKwogICAgIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IFNW
R1BhaW50U2VydmVyJik7CiAKICAgICBTVkdQYWludFNlcnZlciogZ2V0UGFpbnRTZXJ2ZXJCeUlk
KERvY3VtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJik7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdQYWludFNlcnZlclNvbGlkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdQYWludFNlcnZlclNvbGlkLmNwcAkocmV2aXNpb24gMzY1NDApCisrKyBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNvbGlkLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRGlyayBTY2h1
bHplIDx2YnM4NUBnbXguZGU+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5
LDYgKzMwLDExIEBACiAjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oIgogI2luY2x1ZGUg
IlNWR1JlbmRlclRyZWVBc1RleHQuaCIKIAorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJQYXRoLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHUGFpbnRTZXJ2ZXJT
b2xpZDo6U1ZHUGFpbnRTZXJ2ZXJTb2xpZCgpCkBAIC01Niw2ICs2Miw1MyBAQCBUZXh0U3RyZWFt
JiBTVkdQYWludFNlcnZlclNvbGlkOjpleHRlcm5hCiAgICAgcmV0dXJuIHRzOwogfQogCit2b2lk
IFNWR1BhaW50U2VydmVyU29saWQ6OnJlbmRlclBhdGgoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4
dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXRoLCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29u
c3QKK3sKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUgPSBwYXRoLT5zdHlsZSgpLT5z
dmdTdHlsZSgpOworCisgICAgY29udGV4dC0+c2V0RmlsbFJ1bGUoc3R5bGUtPmZpbGxSdWxlKCkp
OworCisgICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFz
RmlsbCgpKQorICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgpOworCisgICAgaWYgKCh0eXBlICYg
QXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmIHN0eWxlLT5oYXNTdHJva2UoKSkKKyAgICAgICAg
Y29udGV4dC0+c3Ryb2tlUGF0aCgpOworfQorCitib29sIFNWR1BhaW50U2VydmVyU29saWQ6OnNl
dHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0
LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QKK3sK
KyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QgPyBvYmplY3QtPnN0eWxlKCkgOiAwOwor
CisgICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiAoIXN0eWxlIHx8IHN0
eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpKSB7CisgICAgICAgIFJHQkEzMiByZ2JhID0gY29s
b3IoKS5yZ2IoKTsKKyAgICAgICAgQVNTRVJUKCFjb2xvcigpLmhhc0FscGhhKCkpOworICAgICAg
ICBpZiAoc3R5bGUpCisgICAgICAgICAgICByZ2JhID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShy
Z2JhLCBzdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbE9wYWNpdHkoKSk7CisKKyAgICAgICAgY29udGV4
dC0+c2V0RmlsbENvbG9yKHJnYmEpOworCisgICAgICAgIGlmIChpc1BhaW50aW5nVGV4dCkKKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShjVGV4dEZpbGwpOworICAgIH0K
KworICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiAoIXN0eWxlIHx8
IHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkpIHsKKyAgICAgICAgUkdCQTMyIHJnYmEg
PSBjb2xvcigpLnJnYigpOworICAgICAgICBBU1NFUlQoIWNvbG9yKCkuaGFzQWxwaGEoKSk7Cisg
ICAgICAgIGlmIChzdHlsZSkKKyAgICAgICAgICAgIHJnYmEgPSBjb2xvcldpdGhPdmVycmlkZUFs
cGhhKHJnYmEsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VPcGFjaXR5KCkpOworCisgICAgICAg
IGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHJnYmEpOworCisgICAgICAgIGlmIChzdHlsZSkKKyAg
ICAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVj
dCk7CisKKyAgICAgICAgaWYgKGlzUGFpbnRpbmdUZXh0KQorICAgICAgICAgICAgY29udGV4dC0+
c2V0VGV4dERyYXdpbmdNb2RlKGNUZXh0U3Ryb2tlKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyU29saWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNvbGlkLmgJKHJldmlzaW9uIDM2NTQwKQorKysg
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw2ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdDsKIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRl
ck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3Q7
CisgICAgICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEdyYXBoaWNzQ29udGV4dComLCBjb25z
dCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0OwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgU1ZHUGFpbnRTZXJ2ZXJTb2xpZCgpOwpJbmRleDogV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlckdyYWRpZW50Q2Fpcm8u
Y3BwCShyZXZpc2lvbiAzNjU0MCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1Bh
aW50U2VydmVyR3JhZGllbnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDI1ICszNCw2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gVE9ETzogU2hhcmUgdGhpcyBjb2RlIHdp
dGggYWxsIFNWR1BhaW50U2VydmVycwotc3RhdGljIHZvaWQgYXBwbHlTdHJva2VTdHlsZVRvQ29u
dGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHls
ZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgY2Fpcm9fdCogY3IgPSBjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVz
cyhTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3Ry
b2tlV2lkdGgoKSwgMS4wKSk7Ci0gICAgY29udGV4dC0+c2V0TGluZUNhcChzdHlsZS0+Y2FwU3R5
bGUoKSk7Ci0gICAgY29udGV4dC0+c2V0TGluZUpvaW4oc3R5bGUtPmpvaW5TdHlsZSgpKTsKLSAg
ICBpZiAoc3R5bGUtPmpvaW5TdHlsZSgpID09IE1pdGVySm9pbikKLSAgICAgICAgY29udGV4dC0+
c2V0TWl0ZXJMaW1pdChzdHlsZS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsKLQotICAgIGNvbnN0IERh
c2hBcnJheSYgZGFzaGVzID0gZGFzaEFycmF5RnJvbVJlbmRlcmluZ1N0eWxlKG9iamVjdC0+c3R5
bGUoKSk7Ci0gICAgT3duQXJyYXlQdHI8ZG91YmxlPiBkc2gobmV3IGRvdWJsZVtkYXNoZXMuc2l6
ZSgpXSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgZGFzaGVzLnNpemUoKSA7IGkrKykK
LSAgICAgICAgZHNoW2ldID0gZGFzaGVzW2ldOwotICAgIGRvdWJsZSBkYXNoT2Zmc2V0ID0gU1ZH
UmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN0cm9rZURh
c2hPZmZzZXQoKSwgMC4wKTsKLSAgICBjYWlyb19zZXRfZGFzaChjciwgZHNoLmdldCgpLCBkYXNo
ZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsKLX0KLQogYm9vbCBTVkdQYWludFNlcnZlckdyYWRpZW50
OjpzZXR1cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9i
amVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0
CiB7CiAgICAgbV9vd25lckVsZW1lbnQtPmJ1aWxkR3JhZGllbnQoKTsKQEAgLTYzLDcgKzQ0LDcg
QEAgYm9vbCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXR1cChHcmFwaAogICAgIGNhaXJvX21h
dHJpeF90IG1hdHJpeDsKICAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSAoJm1hdHJpeCk7
CiAgICAgY29uc3QgY2Fpcm9fbWF0cml4X3QgZ3JhZGllbnRfbWF0cml4ID0gZ3JhZGllbnRUcmFu
c2Zvcm0oKTsKLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxl
KCktPnN2Z1N0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgp
OwogCiAgICAgaWYgKHRoaXMtPnR5cGUoKSA9PSBMaW5lYXJHcmFkaWVudFBhaW50U2VydmVyKSB7
CiAgICAgICAgIGNvbnN0IFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQqIGxpbmVhciA9IHN0
YXRpY19jYXN0PGNvbnN0IFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQqPih0aGlzKTsKQEAg
LTE2MSwxMCArMTQyLDEwIEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3Jh
cGgKICAgICAgICAgY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKHBhdHRlcm4sIG9m
ZnNldCwgY29sb3IucmVkKCkgLyAyNTUuMCwgY29sb3IuZ3JlZW4oKSAvIDI1NS4wLCBjb2xvci5i
bHVlKCkgLyAyNTUuMCwgY29sb3IuYWxwaGEoKSAvIDI1NS4wKTsKICAgICB9CiAKLSAgICBpZiAo
KHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN0eWxlLT5oYXNGaWxsKCkpCi0gICAg
ICAgIGNhaXJvX3NldF9maWxsX3J1bGUoY3IsIHN0eWxlLT5maWxsUnVsZSgpID09IFJVTEVfRVZF
Tk9ERCA/IENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCA6IENBSVJPX0ZJTExfUlVMRV9XSU5ESU5H
KTsKKyAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN0eWxlLT5zdmdT
dHlsZSgpLT5oYXNGaWxsKCkpCisgICAgICAgIGNhaXJvX3NldF9maWxsX3J1bGUoY3IsIHN0eWxl
LT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCA/IENBSVJPX0ZJTExfUlVM
RV9FVkVOX09ERCA6IENBSVJPX0ZJTExfUlVMRV9XSU5ESU5HKTsKIAotICAgIGlmICgodHlwZSAm
IEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFzU3Ryb2tlKCkpCisgICAgaWYg
KCh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmIHN0eWxlLT5zdmdTdHlsZSgpLT5o
YXNTdHJva2UoKSkKICAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBz
dHlsZSwgb2JqZWN0KTsKIAogICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHBhdHRlcm4pOwpJbmRl
eDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2Vy
dmVyUGF0dGVybkNhaXJvLmNwcAkocmV2aXNpb24gMzY1NDApCisrKyBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9jYWlyby9TVkdQYWludFNlcnZlclBhdHRlcm5DYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDMyICszMywxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFRPRE86IFNo
YXJlIHRoaXMgY29kZSB3aXRoIGFsbCBTVkdQYWludFNlcnZlcnMKLXN0YXRpYyB2b2lkIGFwcGx5
U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTVkdS
ZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIGNh
aXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBjb250ZXh0LT5z
ZXRTdHJva2VUaGlja25lc3MoU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9i
amVjdCwgc3R5bGUtPnN0cm9rZVdpZHRoKCksIDEuMCkpOwotICAgIGNvbnRleHQtPnNldExpbmVD
YXAoc3R5bGUtPmNhcFN0eWxlKCkpOwotICAgIGNvbnRleHQtPnNldExpbmVKb2luKHN0eWxlLT5q
b2luU3R5bGUoKSk7Ci0gICAgaWYgKHN0eWxlLT5qb2luU3R5bGUoKSA9PSBNaXRlckpvaW4pCi0g
ICAgICAgIGNvbnRleHQtPnNldE1pdGVyTGltaXQoc3R5bGUtPnN0cm9rZU1pdGVyTGltaXQoKSk7
Ci0KLSAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcyA9IGRhc2hBcnJheUZyb21SZW5kZXJpbmdT
dHlsZShvYmplY3QtPnN0eWxlKCkpOwotICAgIE93bkFycmF5UHRyPGRvdWJsZT4gZHNoKG5ldyBk
b3VibGVbZGFzaGVzLnNpemUoKV0pOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVz
LnNpemUoKSA7IGkrKykKLSAgICAgICAgZHNoW2ldID0gZGFzaGVzW2ldOwotICAgIGRvdWJsZSBk
YXNoT2Zmc2V0ID0gU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwg
c3R5bGUtPnN0cm9rZURhc2hPZmZzZXQoKSwgMC4wKTsKLSAgICBjYWlyb19zZXRfZGFzaChjciwg
ZHNoLmdldCgpLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsKLX0KLQogYm9vbCBTVkdQYWlu
dFNlcnZlclBhdHRlcm46OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJl
bmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSwgYm9vbCBpc1BhaW50
aW5nVGV4dCkgY29uc3QKIHsKICAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdCA9IG9iamVjdC0+cmVs
YXRpdmVCQm94KGZhbHNlKTsKIAotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHlsZSA9IG9i
amVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmpl
Y3QtPnN0eWxlKCk7CiAKLSAgICBmbG9hdCBzdHJva2VXaWR0aCA9IFNWR1JlbmRlclN0eWxlOjpj
c3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdHJva2VXaWR0aCgpLCAxLjApOwor
ICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVu
Z3RoKG9iamVjdCwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCksIDEuMCk7CiAKICAg
ICBpZiAodGFyZ2V0UmVjdC53aWR0aCgpID09IDApCiAgICAgICAgIHRhcmdldFJlY3QgPSBGbG9h
dFJlY3QodGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCBzdHJva2VXaWR0aCwgdGFyZ2V0
UmVjdC5oZWlnaHQoKSk7CkBAIC04MywxMCArNjQsMTAgQEAgYm9vbCBTVkdQYWludFNlcnZlclBh
dHRlcm46OnNldHVwKEdyYXBoaQogICAgIGNhaXJvX21hdHJpeF9pbnZlcnQoJm1hdHJpeCk7CiAg
ICAgY2Fpcm9fcGF0dGVybl9zZXRfbWF0cml4KHBhdHRlcm4sICZtYXRyaXgpOwogCi0gICAgaWYg
KCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFzRmlsbCgpKQotICAg
ICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBzdHlsZS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VW
RU5PREQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVfV0lORElO
Ryk7CisgICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+c3Zn
U3R5bGUoKS0+aGFzRmlsbCgpKQorICAgICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBzdHls
ZS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQgPyBDQUlST19GSUxMX1JV
TEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVfV0lORElORyk7CiAKLSAgICBpZiAoKHR5cGUg
JiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhhc1N0cm9rZSgpKQorICAgIGlm
ICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+
aGFzU3Ryb2tlKCkpCiAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwg
c3R5bGUsIG9iamVjdCk7CiAKICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsKSW5k
ZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyU29saWRDYWlyby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2
ZXJTb2xpZENhaXJvLmNwcAkocmV2aXNpb24gMzY1NDApCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9jYWlyby9TVkdQYWludFNlcnZlclNvbGlkQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRv
a2VyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRl
ICJTVkdQYWludFNlcnZlclNvbGlkLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJTVkdQYWludFNlcnZlci5oIgotI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIFNWR1BhaW50U2VydmVyU29saWQ6OnNldHVwKEdy
YXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQ
YWludFRhcmdldFR5cGUgdHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QKLXsKLSAgICAv
LyBUT0RPOiBzaGFyZSB0aGlzIGNvZGUgd2l0aCBvdGhlciBQYWludFNlcnZlcnMKLQotICAgIGNh
aXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgY29uc3QgU1ZHUmVu
ZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpOwotCi0gICAgZmxv
YXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7Ci0gICAgY29sb3IoKS5nZXRSR0JBKHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKLQotICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlw
ZSkgJiYgc3R5bGUtPmhhc0ZpbGwoKSkgewotICAgICAgICBhbHBoYSA9IHN0eWxlLT5maWxsT3Bh
Y2l0eSgpOwotCi0gICAgICAgIGNhaXJvX3NldF9maWxsX3J1bGUoY3IsIHN0eWxlLT5maWxsUnVs
ZSgpID09IFJVTEVfRVZFTk9ERCA/IENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCA6IENBSVJPX0ZJ
TExfUlVMRV9XSU5ESU5HKTsKLSAgICB9Ci0KLSAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tl
VGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhhc1N0cm9rZSgpKSB7Ci0gICAgICAgIGFscGhhID0gc3R5
bGUtPnN0cm9rZU9wYWNpdHkoKTsKLQotICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjciwg
U1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN0cm9r
ZVdpZHRoKCksIDEuMCkpOwotICAgICAgICBjb250ZXh0LT5zZXRMaW5lQ2FwKHN0eWxlLT5jYXBT
dHlsZSgpKTsKLSAgICAgICAgY29udGV4dC0+c2V0TGluZUpvaW4oc3R5bGUtPmpvaW5TdHlsZSgp
KTsKLSAgICAgICAgaWYgKHN0eWxlLT5qb2luU3R5bGUoKSA9PSBNaXRlckpvaW4pCi0gICAgICAg
ICAgICBjb250ZXh0LT5zZXRNaXRlckxpbWl0KHN0eWxlLT5zdHJva2VNaXRlckxpbWl0KCkpOwot
Ci0gICAgICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzID0gZGFzaEFycmF5RnJvbVJlbmRlcmlu
Z1N0eWxlKG9iamVjdC0+c3R5bGUoKSk7Ci0gICAgICAgIGRvdWJsZSogZHNoID0gbmV3IGRvdWJs
ZVtkYXNoZXMuc2l6ZSgpXTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBkYXNo
ZXMuc2l6ZSgpIDsgaSsrKQotICAgICAgICAgICAgZHNoW2ldID0gZGFzaGVzW2ldOwotICAgICAg
ICBkb3VibGUgZGFzaE9mZnNldCA9IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0
aChvYmplY3QsIHN0eWxlLT5zdHJva2VEYXNoT2Zmc2V0KCksIDAuMCk7Ci0gICAgICAgIGNhaXJv
X3NldF9kYXNoKGNyLCBkc2gsIGRhc2hlcy5zaXplKCksIGRhc2hPZmZzZXQpOwotICAgICAgICBk
ZWxldGVbXSBkc2g7Ci0gICAgfQotCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCByZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0Nn
U3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBw
b3J0LmNwcAkocmV2aXNpb24gMzY1NDApCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9DZ1N1
cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwyMCArNDgsNiBAQCBDR0FmZmluZVRyYW5z
Zm9ybSBDR0FmZmluZVRyYW5zZm9ybU1ha2VNCiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAot
dm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBj
b250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRv
TGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCksIDEuMGYpKTsK
LSAgICBjb250ZXh0LT5zZXRMaW5lQ2FwKHN0eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpKTsK
LSAgICBjb250ZXh0LT5zZXRMaW5lSm9pbihzdHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0eWxlKCkp
OwotICAgIGNvbnRleHQtPnNldE1pdGVyTGltaXQoc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU1p
dGVyTGltaXQoKSk7Ci0KLSAgICAvLyBGSVhNRTogRGFzaEFycmF5IHN1cHBvcnQgY291bGQgZWFz
aWx5IGJlIG1vdmVkIGludG8gR3JhcGhpY3NDb250ZXh0LCBhbmQgdGhpcyBmdW5jdGlvbiB0aGVu
IG1hZGUgeC1wbGF0Zm9ybQotICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzID0gZGFzaEFycmF5
RnJvbVJlbmRlcmluZ1N0eWxlKHN0eWxlKTsKLSAgICBmbG9hdCBkYXNoT2Zmc2V0ID0gU1ZHUmVu
ZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN2Z1N0eWxlKCkt
PnN0cm9rZURhc2hPZmZzZXQoKSwgMC4wZik7Ci0KLSAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChj
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFz
aGVzLnNpemUoKSk7Ci19Ci0KIENHQ29udGV4dFJlZiBzY3JhdGNoQ29udGV4dCgpCiB7CiAgICAg
c3RhdGljIENHQ29udGV4dFJlZiBzY3JhdGNoID0gMDsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2NnL0NnU3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Nn
L0NnU3VwcG9ydC5oCShyZXZpc2lvbiAzNjU0MCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Nn
L0NnU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0Myw2IEBAIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKIAogQ0dBZmZpbmVUcmFuc2Zvcm0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlTWFw
QmV0d2VlblJlY3RzKENHUmVjdCBzb3VyY2UsIENHUmVjdCBkZXN0KTsKIAotdm9pZCBhcHBseVN0
cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCosIFJlbmRlclN0eWxlKiwgY29uc3Qg
UmVuZGVyT2JqZWN0Kik7Ci0KIENHQ29udGV4dFJlZiBzY3JhdGNoQ29udGV4dCgpOwogRmxvYXRS
ZWN0IHN0cm9rZUJvdW5kaW5nQm94KGNvbnN0IFBhdGgmIHBhdGgsIFJlbmRlclN0eWxlKiwgY29u
c3QgUmVuZGVyT2JqZWN0Kik7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1Bh
aW50U2VydmVyU29saWRDZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
Y2cvU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcAkocmV2aXNpb24gMzY1NDApCisrKyBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlclNvbGlkQ2cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQot
I2luY2x1ZGUgIlNWR1BhaW50U2VydmVyU29saWQuaCIKLQotI2luY2x1ZGUgIkNvbG9yLmgiCi0j
aW5jbHVkZSAiQ2dTdXBwb3J0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBTVkdQ
YWludFNlcnZlclNvbGlkOjpzZXR1cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBS
ZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUsIGJvb2wgaXNQYWlu
dGluZ1RleHQpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qg
dXNlIGFueSBDRy1zcGVjaWZpYyBjYWxscywgaG93ZXZlciBpdCdzIG5vdCB5ZXQKLSAgICAvLyBj
cm9zcyBwbGF0Zm9ybSwgYmVjYXVzZSBDRyBoYW5kbGVzIGZpbGwgcnVsZSBkaWZmZXJlbnQgZnJv
bSBvdGhlciBncmFwaGljcwotICAgIC8vIHBsYXRmb3Jtcy4gIENHIG1ha2VzIHlvdSB1c2UgdHdv
IHNlcGFyYXRlIGZpbGwgY2FsbHMsIG90aGVyIHBsYXRmb3JtcyBzZXQKLSAgICAvLyB0aGUgZmls
bCBydWxlIHN0YXRlIG9uIHRoZSBjb250ZXh0IGFuZCB0aGVuIGNhbGwgYSBnZW5lcmljICJmaWxs
UGF0aCIKLQotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdCA/IG9iamVjdC0+c3R5bGUo
KSA6IDA7Ci0KLSAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmICghc3R5
bGUgfHwgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkpIHsKLSAgICAgICAgUkdCQTMyIHJn
YmEgPSBjb2xvcigpLnJnYigpOwotICAgICAgICBBU1NFUlQoIWNvbG9yKCkuaGFzQWxwaGEoKSk7
Ci0gICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJnYmEgPSBjb2xvcldpdGhPdmVycmlk
ZUFscGhhKHJnYmEsIHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsT3BhY2l0eSgpKTsKLQotICAgICAg
ICBjb250ZXh0LT5zZXRGaWxsQ29sb3IocmdiYSk7Ci0KLSAgICAgICAgaWYgKGlzUGFpbnRpbmdU
ZXh0KQotICAgICAgICAgICAgY29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKGNUZXh0RmlsbCk7
Ci0gICAgfQotCi0gICAgaWYgKCh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmICgh
c3R5bGUgfHwgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpKSkgewotICAgICAgICBSR0JB
MzIgcmdiYSA9IGNvbG9yKCkucmdiKCk7Ci0gICAgICAgIEFTU0VSVCghY29sb3IoKS5oYXNBbHBo
YSgpKTsKLSAgICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgcmdiYSA9IGNvbG9yV2l0aE92
ZXJyaWRlQWxwaGEocmdiYSwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU9wYWNpdHkoKSk7Ci0K
LSAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IocmdiYSk7Ci0KLSAgICAgICAgaWYgKHN0
eWxlKQotICAgICAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHls
ZSwgb2JqZWN0KTsKLQotICAgICAgICBpZiAoaXNQYWludGluZ1RleHQpCi0gICAgICAgICAgICBj
b250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY1RleHRTdHJva2UpOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0vLyB2
aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZl
ckdyYWRpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NW
R1BhaW50U2VydmVyR3JhZGllbnRRdC5jcHAJKHJldmlzaW9uIDM2NTQwKQorKysgV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksMTAgKzI5LDEwIEBACiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJTVkdHcmFkaWVudEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1ZGUg
PFFQYWludGVyUGF0aD4KICNpbmNsdWRlIDxRQ29sb3I+CiAjaW5jbHVkZSA8UUdyYWRpZW50Pgor
I2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFFQYWludGVyUGF0aD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC05NCw3ICs5NCw4IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dDo6c2V0dXAoR3JhcGgKICAgICAgICAgUUJydXNoIGJydXNoKGdyYWRpZW50KTsKICAgICAgICAg
YnJ1c2guc2V0TWF0cml4KGdyYWRpZW50VHJhbnNmb3JtKCkpOwogCi0gICAgICAgIHNldFBlblBy
b3BlcnRpZXMob2JqZWN0LCByZW5kZXJTdHlsZSwgcGVuKTsKKyAgICAgICAgYXBwbHlTdHJva2VT
dHlsZVRvQ29udGV4dChjb250ZXh0LCByZW5kZXJTdHlsZSwgb2JqZWN0KTsKKyAgICAgICAgCiAg
ICAgICAgIHBlbi5zZXRCcnVzaChicnVzaCk7CiAKICAgICAgICAgcGFpbnRlci0+c2V0UGVuKHBl
bik7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclF0LmNw
cAkocmV2aXNpb24gMzY1NDApCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNl
cnZlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNDcgKzI2LDEzIEBACiAjaW5jbHVkZSAi
U1ZHUGFpbnRTZXJ2ZXIuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3R5bGUuaCIKIAogI2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1ZGUgPFFW
ZWN0b3I+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBTVkdQYWludFNlcnZlcjo6c2V0
UGVuUHJvcGVydGllcyhjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlLCBRUGVuJiBwZW4pIGNvbnN0Ci17Ci0gICAgcGVuLnNldFdpZHRoRihTVkdSZW5k
ZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+
c3Ryb2tlV2lkdGgoKSwgMS4wKSk7Ci0KLSAgICBpZiAoc3R5bGUtPnN2Z1N0eWxlKCktPmNhcFN0
eWxlKCkgPT0gQnV0dENhcCkKLSAgICAgICAgcGVuLnNldENhcFN0eWxlKFF0OjpGbGF0Q2FwKTsK
LSAgICBlbHNlIGlmIChzdHlsZS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSA9PSBSb3VuZENhcCkK
LSAgICAgICAgcGVuLnNldENhcFN0eWxlKFF0OjpSb3VuZENhcCk7Ci0KLSAgICBpZiAoc3R5bGUt
PnN2Z1N0eWxlKCktPmpvaW5TdHlsZSgpID09IE1pdGVySm9pbikgewotICAgICAgICBwZW4uc2V0
Sm9pblN0eWxlKFF0OjpNaXRlckpvaW4pOwotICAgICAgICBwZW4uc2V0TWl0ZXJMaW1pdCgocXJl
YWwpIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VNaXRlckxpbWl0KCkpOwotICAgIH0gZWxzZSBp
ZihzdHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0eWxlKCkgPT0gUm91bmRKb2luKQotICAgICAgICBw
ZW4uc2V0Sm9pblN0eWxlKFF0OjpSb3VuZEpvaW4pOwotCi0gICAgY29uc3QgRGFzaEFycmF5JiBk
YXNoZXMgPSBXZWJDb3JlOjpkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUoc3R5bGUpOwotICAg
IGRvdWJsZSBkYXNoT2Zmc2V0ID0gU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3Ro
KG9iamVjdCwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZURhc2hPZmZzZXQoKSwgMC4wKTsKLQot
ICAgIHVuc2lnbmVkIGludCBkYXNoTGVuZ3RoID0gIWRhc2hlcy5pc0VtcHR5KCkgPyBkYXNoZXMu
c2l6ZSgpIDogMDsKLSAgICBpZihkYXNoTGVuZ3RoKSB7Ci0gICAgICAgIFFWZWN0b3I8cXJlYWw+
IHBhdHRlcm47Ci0gICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IChkYXNoTGVuZ3RoICUgMikg
PT0gMCA/IGRhc2hMZW5ndGggOiBkYXNoTGVuZ3RoICogMjsKLQotICAgICAgICBmb3IodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHBhdHRlcm4uYXBwZW5k
KGRhc2hlc1tpICUgZGFzaExlbmd0aF0gLyAoZmxvYXQpcGVuLndpZHRoRigpKTsKLQotICAgICAg
ICBwZW4uc2V0RGFzaFBhdHRlcm4ocGF0dGVybik7Ci0KLSAgICAgICAgUV9VTlVTRUQoZGFzaE9m
ZnNldCk7Ci0gICAgICAgIC8vIFRPRE86IGRhc2gtb2Zmc2V0LCBkb2VzL3dpbGwgcXQ0IEFQSSBh
bGxvdyBpdD8gKFJvYikKLSAgICB9Ci19Ci0KIHZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OmRyYXcoR3Jh
cGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXRoLCBTVkdQYWlu
dFRhcmdldFR5cGUgdHlwZSkgY29uc3QKIHsKICAgICBpZiAoIXNldHVwKGNvbnRleHQsIHBhdGgs
IHR5cGUpKQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJTb2xp
ZFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNl
cnZlclNvbGlkUXQuY3BwCShyZXZpc2lvbiAzNjU0MCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L3F0L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcgKzAs
MCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxk
Zm94QGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCi0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQotICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHUGFpbnRT
ZXJ2ZXJTb2xpZC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
UmVuZGVyUGF0aC5oIgotCi0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotYm9vbCBTVkdQYWludFNlcnZlclNvbGlkOjpzZXR1cChHcmFwaGljc0NvbnRleHQqJiBj
b250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5
cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0Ci17Ci0gICAgUVBhaW50ZXIqIHBhaW50ZXIo
Y29udGV4dCA/IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogMCk7Ci0gICAgUV9BU1NFUlQo
cGFpbnRlcik7Ci0KLSAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBvYmplY3QgPyBvYmpl
Y3QtPnN0eWxlKCkgOiAwOwotICAgIC8vIFRPRE8/IHBhaW50ZXItPnNldE9wYWNpdHkocmVuZGVy
U3R5bGUtPm9wYWNpdHkoKSk7Ci0KLSAgICBRQ29sb3IgYyA9IGNvbG9yKCk7Ci0KLSAgICBpZiAo
KHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmICghcmVuZGVyU3R5bGUgfHwgcmVuZGVy
U3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkpIHsKLSAgICAgICAgaWYgKHJlbmRlclN0eWxl
KQotICAgICAgICAgICAgYy5zZXRBbHBoYUYocmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxP
cGFjaXR5KCkpOwotCi0gICAgICAgIFFCcnVzaCBicnVzaChjKTsKLSAgICAgICAgcGFpbnRlci0+
c2V0QnJ1c2goYnJ1c2gpOwotCi0gICAgICAgIGlmIChyZW5kZXJTdHlsZSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnNldEZpbGxSdWxlKHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5maWxsUnVsZSgp
KTsKLQotICAgICAgICAvKiBpZihpc1BhaW50aW5nVGV4dCgpKSAuLi4gKi8KLSAgICB9Ci0KLSAg
ICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgKCFyZW5kZXJTdHlsZSB8
fCByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpKSB7Ci0gICAgICAgIGlmIChy
ZW5kZXJTdHlsZSkKLSAgICAgICAgICAgIGMuc2V0QWxwaGFGKHJlbmRlclN0eWxlLT5zdmdTdHls
ZSgpLT5zdHJva2VPcGFjaXR5KCkpOwotCi0gICAgICAgIFFQZW4gcGVuKGMpOwotICAgICAgICBp
ZiAocmVuZGVyU3R5bGUpCi0gICAgICAgICAgICBzZXRQZW5Qcm9wZXJ0aWVzKG9iamVjdCwgcmVu
ZGVyU3R5bGUsIHBlbik7Ci0gICAgICAgIHBhaW50ZXItPnNldFBlbihwZW4pOwotCi0gICAgICAg
IC8qIGlmKGlzUGFpbnRpbmdUZXh0KCkpIC4uLiAqLwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0vLyB2aW06dHM9NDpu
b2V0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23607</attachid>
            <date>2008-09-20 11:46:51 -0700</date>
            <delta_ts>2008-09-20 12:53:37 -0700</delta_ts>
            <desc>SVGPaintServer cleanUp</desc>
            <filename>SVGPaintServer-cleanUp.patch</filename>
            <type>text/plain</type>
            <size>69447</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjYgQEAKKzIwMDgtMDktMjAgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDbGVhbiBV
cCBvZiBTVkdQYWludFNlcnZlci4gQ29tYmluZWQgdGhlIFNWR1BhaW50U2VydmVyU29saWQqCisg
ICAgICAgIHRvIGEgdW5pdCBTVkdQYWludFNlcnZlclNvbGlkLiBSZXBsYWNlZCBDZ1N1cHBvcnQg
YnkgYSBwbGF0Zm9ybQorICAgICAgICBpbmRlcGVuZGVudCBjb2RlLgorCisgICAgICAgICogR05V
bWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlTWFwQmV0d2VlblJlY3RzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9BZmZpbmVUcmFuc2Zvcm0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Q
YXRoLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFz
aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6c3Ryb2tlQ29udGFpbnMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdGhRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YXRoOjpzdHJva2VDb250YWlucyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclBhdGguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6c3Ryb2tlQ29udGFpbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6c3Ryb2tlQkJveCk6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL1NWR1BhaW50U2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5U3Ryb2tlU3R5
bGVUb0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6c3Ryb2tlQm91bmRpbmdCb3gpOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5oOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9TVkdQYWludFNlcnZlclNvbGlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50
U2VydmVyU29saWQ6OnJlbmRlclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2
ZXJTb2xpZDo6c2V0dXApOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNv
bGlkLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1Jlc291cmNlLmg6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2NhaXJvL1JlbmRlclBhdGhDYWlyby5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXR1cCk6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyUGF0dGVybjo6c2V0dXApOgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclNvbGlkQ2Fpcm8uY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9jZy9DZ1N1cHBvcnQuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9jZy9DZ1N1cHBvcnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvY2cvUmVuZGVyUGF0aENnLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmhhbmRsZUJvdW5kaW5nQm94TW9kZUFuZEdyYWRp
ZW50VHJhbnNmb3JtYXRpb24pOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNl
cnZlclBhdHRlcm5DZy5jcHA6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2Vy
dmVyU29saWRDZy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2NnL1NWR1Jl
c291cmNlQ2xpcHBlckNnLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNlQ2xpcHBl
cjo6YXBwbHlDbGlwKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvY2cvU1ZHUmVzb3VyY2VNYXNr
ZXJDZy5tbToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvcXQvUmVuZGVyUGF0aFF0LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudFF0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKToK
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJRdC5jcHA6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHA6IFJlbW92ZWQuCisK
IDIwMDgtMDktMjAgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyICA8emVja2VAc2VsZmlzaC5v
cmc+CiAKICAgICAgICAgQnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzNjcxMSkKKysr
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTMzMjAsMTEgKzMzMjAs
OSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHU3BvdExpZ2h0U291cmNlLmgKIAogd2ViY29yZWd0a19zb3VyY2VzICs9IFwKLQlXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9jYWlyby9SZW5kZXJQYXRoQ2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3N2Zy9n
cmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlckNhaXJvLmNwcCBcCiAJV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcCBcCiAJV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwIFwKLQlXZWJD
b3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclNvbGlkQ2Fpcm8uY3BwIFwKIAlX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdSZXNvdXJjZUNsaXBwZXJDYWlyby5jcHAgXAog
CVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1Jlc291cmNlRmlsdGVyQ2Fpcm8uY3BwIFwK
IAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdSZXNvdXJjZU1hc2tlckNhaXJvLmNwcApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
cHJvCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29w
eSkKQEAgLTE2NDgsMTMgKzE2NDgsMTEgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0x
KSB7CiAgICAgICAgIHJlbmRlcmluZy9TVkdSb290SW5saW5lQm94LmNwcAogCiBTT1VSQ0VTICs9
IFwKLSAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1JlbmRlclBhdGhRdC5jcHAgXAogICAgICAgICBz
dmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmNwcCBcCiAgICAgICAgIHN2
Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXQuY3BwIFwKICAgICAg
ICAgc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyUGF0dGVyblF0LmNwcCBcCiAgICAgICAg
IHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclF0LmNwcCBcCiAgICAgICAgIHN2Zy9ncmFw
aGljcy9xdC9TVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXQuY3BwIFwKLSAgICAgICAgc3Zn
L2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHAgXAogICAgICAgICBzdmcvZ3Jh
cGhpY3MvcXQvU1ZHUmVzb3VyY2VDbGlwcGVyUXQuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNz
L3F0L1NWR1Jlc291cmNlRmlsdGVyUXQuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NW
R1Jlc291cmNlTWFza2VyUXQuY3BwCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTUwODgsNjYgKzE1MDg4LDYgQEAKIAkJCQkJTmFt
ZT0iY2ciDQogCQkJCQk+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3Zn
XGdyYXBoaWNzXGNnXENnU3VwcG9ydC5jcHAiDQotCQkJCQkJPg0KLQkJCQkJCTxGaWxlQ29uZmln
dXJhdGlvbg0KLQkJCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb3xXaW4zMiINCi0JCQkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJCT4NCi0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCS8+DQotCQkJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4NCi0JCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQkJTmFtZT0iUmVsZWFzZV9D
YWlyb3xXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJCT4N
Ci0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJ
CS8+DQotCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxG
aWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcY2dcQ2dTdXBwb3J0Lmgi
DQotCQkJCQkJPg0KLQkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCQlOYW1lPSJEZWJ1
Z19DYWlyb3xXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJ
CT4NCi0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJ
CQkJCQkvPg0KLQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQkJPEZpbGVDb25maWd1
cmF0aW9uDQotCQkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm98V2luMzIiDQotCQkJCQkJCUV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQotCQkJCQkJCQlO
YW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCQkJLz4NCi0JCQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHN2Z1xncmFwaGljc1xjZ1xSZW5kZXJQYXRoQ2cuY3BwIg0KLQkJCQkJCT4NCi0JCQkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm98V2luMzIiDQotCQkJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQot
CQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQkvPg0KLQkJCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+DQotCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJCU5hbWU9
IlJlbGVhc2VfQ2Fpcm98V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0K
LQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQotCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
Ig0KLQkJCQkJCQkvPg0KLQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8L0ZpbGU+
DQotCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGNnXFNW
R1BhaW50U2VydmVyQ2cuY3BwIg0KIAkJCQkJCT4NCiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24N
CkBAIC0xNTIwOCwyNiArMTUxNDgsNiBAQAogCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJ
CQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3Jh
cGhpY3NcY2dcU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcCINCi0JCQkJCQk+DQotCQkJCQkJPEZp
bGVDb25maWd1cmF0aW9uDQotCQkJCQkJCU5hbWU9IkRlYnVnX0NhaXJvfFdpbjMyIg0KLQkJCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCQkJPg0KLQkJCQkJCQk8VG9vbA0KLQkJ
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJLz4NCi0JCQkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPg0KLQkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCQlOYW1lPSJS
ZWxlYXNlX0NhaXJvfFdpbjMyIg0KLQkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0J
CQkJCQkJPg0KLQkJCQkJCQk8VG9vbA0KLQkJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIN
Ci0JCQkJCQkJLz4NCi0JCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPC9GaWxlPg0K
LQkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xjZ1xTVkdS
ZXNvdXJjZUNsaXBwZXJDZy5jcHAiDQogCQkJCQkJPg0KIAkJCQkJCTxGaWxlQ29uZmlndXJhdGlv
bg0KQEAgLTE1NTkyLDQyICsxNTUxMiw2IEBACiAJCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0K
IAkJCQkJPC9GaWxlPg0KIAkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xn
cmFwaGljc1xjYWlyb1xTVkdQYWludFNlcnZlclNvbGlkQ2Fpcm8uY3BwIg0KLQkJCQkJCT4NCi0J
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQot
CQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQkvPg0KLQkJCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+DQotCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJCU5hbWU9
IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJ
CQk+DQotCQkJCQkJCTxUb29sDQotCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJ
CQkJCQkvPg0KLQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQkJPEZpbGVDb25maWd1
cmF0aW9uDQotCQkJCQkJCU5hbWU9IkRlYnVnX0ludGVybmFsfFdpbjMyIg0KLQkJCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCQkJPg0KLQkJCQkJCQk8VG9vbA0KLQkJCQkJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJLz4NCi0JCQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPg0KLQkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCQlOYW1lPSJSZWxlYXNl
X1BHT3xXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJCT4N
Ci0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJ
CS8+DQotCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxG
aWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcY2Fpcm9cU1ZHUmVzb3Vy
Y2VDbGlwcGVyQ2Fpcm8uY3BwIg0KIAkJCQkJCT4NCiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24N
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMzY3MTEpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMzA3MSwxMyArMzA3MSw5IEBACiAJCUIyMzdDOEE4MEQzNDREMTEw
MDEzRjcwNyAvKiBTVkdGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjIzN0M4QTYwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmgg
Ki87IH07CiAJCUIyNDA1NTY1MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5zdGFu
Y2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjI0MDU1NjMwQjVCRTY0MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUludGVy
bmFsLmggKi87IH07CiAJCUIyNDA1NTY2MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50
SW5zdGFuY2VMaXN0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyNDA1NTY0MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5z
dGFuY2VMaXN0SW50ZXJuYWwuaCAqLzsgfTsKLQkJQjI1NTk5MkMwRDAwRDhCQTAwQkI4MjVDIC8q
IENnU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMjU1OTg5MDBEMDBEOEI4MDBCQjgyNUMgLyogQ2dTdXBwb3J0LmNwcCAqLzsgfTsKLQkJ
QjI1NTk5MkQwRDAwRDhCQTAwQkI4MjVDIC8qIENnU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTEwRDAwRDhCODAwQkI4MjVDIC8q
IENnU3VwcG9ydC5oICovOyB9OwotCQlCMjU1OTkyRTBEMDBEOEJBMDBCQjgyNUMgLyogUmVuZGVy
UGF0aENnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyNTU5ODkyMEQwMEQ4QjgwMEJCODI1QyAvKiBSZW5kZXJQYXRoQ2cuY3BwICovOyB9OwogCQlC
MjU1OTkyRjBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTg5MzBEMDBEOEI4MDBC
QjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAgKi87IH07CiAJCUIyNTU5OTMwMEQwMEQ4QkEw
MEJCODI1QyAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTQwRDAwRDhCODAwQkI4MjVDIC8q
IFNWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAgKi87IH07CiAJCUIyNTU5OTMxMEQwMEQ4QkEw
MEJCODI1QyAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTg5NTBEMDBEOEI4MDBCQjgyNUMgLyog
U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwICovOyB9OwotCQlCMjU1OTkzMjBEMDBEOEJBMDBC
QjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5ODk2MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQ
YWludFNlcnZlclNvbGlkQ2cuY3BwICovOyB9OwogCQlCMjU1OTkzMzBEMDBEOEJBMDBCQjgyNUMg
LyogU1ZHUmVzb3VyY2VDbGlwcGVyQ2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTcwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNl
Q2xpcHBlckNnLmNwcCAqLzsgfTsKIAkJQjI1NTk5MzUwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1Jl
c291cmNlRmlsdGVyQ2cubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjU1OTg5OTBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VGaWx0ZXJDZy5t
bSAqLzsgfTsKIAkJQjI1NTk5MzcwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFza2Vy
Q2cubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1
OTg5QjBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbSAqLzsgfTsKQEAg
LTc1NzQsMTMgKzc1NzAsOSBAQAogCQlCMjM3QzhBNjBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9u
dERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZvbnREYXRhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNDA1NTYzMEI1QkU2NDAwMDJBMjhDMCAv
KiBET01TVkdFbGVtZW50SW5zdGFuY2VJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NU1ZHRWxlbWVudEluc3RhbmNlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjI0MDU1NjQwQjVCRTY0MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1l
bnRJbnN0YW5jZUxpc3RJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUIyNTU5ODkwMEQwMEQ4QjgwMEJCODI1QyAvKiBDZ1N1cHBvcnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENnU3VwcG9ydC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5ODkxMEQwMEQ4QjgwMEJCODI1QyAvKiBDZ1N1
cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENnU3VwcG9ydC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OTg5MjBEMDBEOEI4MDBCQjgyNUMgLyog
UmVuZGVyUGF0aENnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJQYXRoQ2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjU1OTg5MzBE
MDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGFpbnRTZXJ2ZXJDZy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyNTU5ODk0MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZl
ckdyYWRpZW50Q2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNW
R1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyNTU5ODk1MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGFpbnRTZXJ2ZXJQYXR0
ZXJuQ2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OTg5NjBEMDBEOEI4
MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYWludFNlcnZlclNvbGlkQ2cuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCMjU1OTg5NzBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUmVzb3Vy
Y2VDbGlwcGVyQ2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNW
R1Jlc291cmNlQ2xpcHBlckNnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1
NTk4OTkwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlRmlsdGVyQ2cubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU1ZHUmVzb3VyY2VGaWx0ZXJDZy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OUIwRDAwRDhCODAwQkI4MjVDIC8q
IFNWR1Jlc291cmNlTWFza2VyQ2cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEyMjYwLDEzICsxMjI1Miw5IEBACiAJCUIyNTU5ODhGMEQwMEQ4QjgwMEJCODI1QyAv
KiBjZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQjI1
NTk4OTAwRDAwRDhCODAwQkI4MjVDIC8qIENnU3VwcG9ydC5jcHAgKi8sCi0JCQkJQjI1NTk4OTEw
RDAwRDhCODAwQkI4MjVDIC8qIENnU3VwcG9ydC5oICovLAotCQkJCUIyNTU5ODkyMEQwMEQ4Qjgw
MEJCODI1QyAvKiBSZW5kZXJQYXRoQ2cuY3BwICovLAogCQkJCUIyNTU5ODkzMEQwMEQ4QjgwMEJC
ODI1QyAvKiBTVkdQYWludFNlcnZlckNnLmNwcCAqLywKIAkJCQlCMjU1OTg5NDBEMDBEOEI4MDBC
QjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcCAqLywKIAkJCQlCMjU1OTg5NTBE
MDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwICovLAotCQkJCUIy
NTU5ODk2MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclNvbGlkQ2cuY3BwICovLAog
CQkJCUIyNTU5ODk3MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdSZXNvdXJjZUNsaXBwZXJDZy5jcHAg
Ki8sCiAJCQkJQjI1NTk4OTkwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlRmlsdGVyQ2cu
bW0gKi8sCiAJCQkJQjI1NTk4OUIwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFza2Vy
Q2cubW0gKi8sCkBAIC0xMzg0NCw3ICsxMzgzMiw2IEBACiAJCQkJOTNFRUMyMDQwOUMyODc3NzAw
QzUxNUQxIC8qIENhbnZhc1BhdHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRUVDMjAwMDlD
Mjg3NzcwMEM1MTVEMSAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzRUVDMjAxMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNTdHlsZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQjI1NTk5MkQwRDAwRDhCQTAwQkI4MjVDIC8qIENnU3VwcG9ydC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTE0MTg1RUUwQ0Q2NUYwNDAwNzYzQzk5IC8qIENoYW5nZVZlcnNpb25X
cmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjZBMDA5OURGMDI3MDA5MEQ3ODEgLyog
Q2hhcmFjdGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBMjYwRDAwNkMxRDAwRUY2
RjI2IC8qIENoYXJhY3Rlck5hbWVzLmggaW4gSGVhZGVycyAqLywKQEAgLTE2MTQ4LDcgKzE2MTM1
LDYgQEAKIAkJCQk5M0VFQzI2RjA5QzMyMTgwMDBDNTE1RDEgLyogQ2FudmFzUGF0dGVybi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5M0VFQzFGRjA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRUVDMjcxMDlDMzIxODgw
MEM1MTVEMSAvKiBDYW52YXNTdHlsZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjU1OTkyQzBE
MDBEOEJBMDBCQjgyNUMgLyogQ2dTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNDE4
NUVGMENENjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk2NTUwQjY5RjA5OURGMDI3MDA5MEQ3ODEgLyogQ2hhcmFjdGVyRGF0YS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzI2REMwQzA5REFENUQ2MDBBRkM4NDcgLyogQ2hhcnNldERh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNzA0Niw3ICsxNzAzMiw2IEBACiAJCQkJQTg3MURF
RDAwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlclBhcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTg3MURFRDYwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlclBhcnRPYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODUzQ0E5RjAwQUVFQzY1NzAwMjM3MkRDIC8qIFJlbmRlclBhdGguY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQjI1NTk5MkUwRDAwRDhCQTAwQkI4MjVDIC8qIFJlbmRlclBhdGhD
Zy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODcxREZFMjBBMTUzNzZCMDBCMTJBNjggLyogUmVu
ZGVyUmVwbGFjZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczNTJDMTkwQjFCQjg5RDAwQTk4
NkQwIC8qIFJlbmRlclNWR0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1M0NBOUQ2MEFF
RUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0xNzIwNCw3ICsxNzE4OSw2IEBACiAJCQkJQjI1NTk5MzEwRDAwRDhCQTAwQkI4MjVDIC8qIFNW
R1BhaW50U2VydmVyUGF0dGVybkNnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNTU5OUFFMEQw
MEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUIyNTU5OUIwMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclNv
bGlkLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNTU5OTMyMEQwMEQ4QkEwMEJCODI1QyAvKiBT
VkdQYWludFNlcnZlclNvbGlkQ2cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBNTYwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR1BhcnNlclV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCMjIyN0E1ODBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0aEVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjIyMjdBNUQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWdBcmMuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRy
YW5zZm9ybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BZmZp
bmVUcmFuc2Zvcm0uY3BwCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQWZmaW5lVHJhbnNmb3JtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDYgKzEzNSwx
NCBAQCBBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6c2tld1koCiAgICAgcmV0dXJu
IHNoZWFyKDAuMGYsIHRhbihkZWcycmFkKGFuZ2xlKSkpOwogfQogCitBZmZpbmVUcmFuc2Zvcm0m
IG1ha2VNYXBCZXR3ZWVuUmVjdHMoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdCkKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOworICAgIHRyYW5z
Zm9ybS50cmFuc2xhdGUoZGVzdC54KCkgLSBzb3VyY2UueCgpLCBkZXN0LnkoKSAtIHNvdXJjZS55
KCkpOworICAgIHRyYW5zZm9ybS5zY2FsZShkZXN0LndpZHRoKCkvc291cmNlLndpZHRoKCksIGRl
c3QuaGVpZ2h0KCkvc291cmNlLmhlaWdodCgpKTsKKyAgICByZXR1cm4gdHJhbnNmb3JtOworfQor
CiBJbnRQb2ludCBBZmZpbmVUcmFuc2Zvcm06Om1hcFBvaW50KGNvbnN0IEludFBvaW50JiBwb2lu
dCkgY29uc3QKIHsKICAgICBkb3VibGUgeDIsIHkyOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9BZmZpbmVUcmFuc2Zvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5oCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
MSw2ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgQWZmaW5lVHJhbnNmb3JtJiBza2V3KGRvdWJsZSBh
bmdsZVgsIGRvdWJsZSBhbmdsZVkpOwogICAgIEFmZmluZVRyYW5zZm9ybSYgc2tld1goZG91Ymxl
IGFuZ2xlKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0mIHNrZXdZKGRvdWJsZSBhbmdsZSk7CisgICAg
QWZmaW5lVHJhbnNmb3JtJiBtYWtlTWFwQmV0d2VlblJlY3RzKGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0UmVjdCYpOwogIAogICAgIGRvdWJsZSBkZXQoKSBjb25zdDsKICAgICBib29sIGlz
SW52ZXJ0aWJsZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDEyIEBA
IHR5cGVkZWYgdW5zaWduZWQgY2hhciBVSW50ODsKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBQTEFU
Rk9STShDRykKK3R5cGVkZWYgVmVjdG9yPENHRmxvYXQ+IERhc2hBcnJheTsKKyNlbHNlCit0eXBl
ZGVmIFZlY3RvcjxmbG9hdD4gRGFzaEFycmF5OworI2VuZGlmCisKICNpZiBQTEFURk9STShRVCkg
JiYgZGVmaW5lZChRX1dTX1dJTikKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKQEAgLTIz
MSw2ICsyMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEludFJlY3QgZm9jdXNS
aW5nQm91bmRpbmdSZWN0KCk7CiAKICAgICAgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApOwor
ICAgICAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0Jik7CiAgICAg
ICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pOwogICAgICAgICB2b2lkIHNldE1pdGVyTGlt
aXQoZmxvYXQpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkocmV2aXNpb24gMzY3
MTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkod29ya2luZyBjb3B5KQpA
QCAtODcsNiArODcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBhdGgmIG9wZXJh
dG9yPShjb25zdCBQYXRoJik7CiAKICAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBGbG9hdFBv
aW50JiwgV2luZFJ1bGUgcnVsZSA9IFJVTEVfTk9OWkVSTykgY29uc3Q7CisgICAgICAgIGJvb2wg
c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgICAgICBGbG9hdFJl
Y3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICBmbG9hdCBsZW5ndGgo
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGlv
Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQ
dHIuaD4KIAogI2lmIFBMQVRGT1JNKEdUSykKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CkBAIC04MDcs
NiArODA4LDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAKICAg
ICBjYWlyb19zZXRfbGluZV9jYXAobV9kYXRhLT5jciwgY2Fpcm9DYXApOwogfQogCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0
JiBkYXNoT2Zmc2V0KQoreworICAgIE93bkFycmF5UHRyPGRvdWJsZT4gZHNoKG5ldyBkb3VibGVb
ZGFzaGVzLnNpemUoKV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUo
KTsgaSsrKQorICAgICAgICBkc2hbaV0gPSBkYXNoZXNbaV07CisgICAgY2Fpcm9fc2V0X2Rhc2go
bV9kYXRhLT5jciwgZHNoLmdldCgpLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsKK30KKwog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQogewog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAxLDYgKzIwMSwxNiBAQCBib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBv
CiAgICAgcmV0dXJuIGNvbnRhaW5zOwogfQogCitib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIGlmICghYm91bmRpbmdSZWN0KCku
Y29udGFpbnMocG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYWlyb190KiBj
ciA9IHBsYXRmb3JtUGF0aCgpLT5tX2NyOworICAgIGJvb2wgY29udGFpbnMgPSBjYWlyb19pbl9z
dHJva2UoY3IsIHBvaW50LngoKSwgcG9pbnQueSgpKTsKKyAgICByZXR1cm4gY29udGFpbnM7Cit9
CisKIHZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXJGdW5jdGlvbiBmdW5j
dGlvbikgY29uc3QKIHsKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtUGF0aCgpLT5tX2NyOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHAJKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxOCw2ICs3MTgsMTEg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcAogICAgIH0KIH0KIAor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVz
LCBmbG9hdCYgZGFzaE9mZnNldCkKK3sKKyAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChwbGF0Zm9y
bUNvbnRleHQoKSwgZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7Cit9
CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQogewog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC03MzQsNyArNzM5LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKbwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
fQogfQotIAorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QYXRoKCkKIHsKICAgICBDR0Nv
bnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUGF0aENHLmNwcAkocmV2aXNpb24gMzY3MTEpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDks
MTggQEAgYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50ICZwbwogICAgIHJldHVy
biByZXQ7CiB9CiAKK2Jvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCAm
cG9pbnQpIGNvbnN0Cit7CisgICAgaWYgKCFib3VuZGluZ1JlY3QoKS5jb250YWlucyhwb2ludCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENHUGF0aENvbnRhaW5zUG9pbnQgcmV0
dXJucyBmYWxzZSBmb3Igbm9uLWNsb3NlZCBwYXRocywgYXMgYSB3b3JrLWFyb3VuZCwgd2UgY29w
eSBhbmQgY2xvc2UgdGhlIHBhdGggZmlyc3QuICBSYWRhciA0NzU4OTk4IGFza3MgZm9yIGEgYmV0
dGVyIENHIEFQSSB0byB1c2UKKyAgICBDR011dGFibGVQYXRoUmVmIHBhdGggPSBjb3B5Q0dQYXRo
Q2xvc2luZ1N1YnBhdGhzKG1fcGF0aCk7CisgICAgYm9vbCByZXQgPSBDR1BhdGhDb250YWluc1Bv
aW50KHBhdGgsIDAsIHBvaW50LCBrQ0dQYXRoU3Ryb2tlKTsKKyAgICBDR1BhdGhSZWxlYXNlKHBh
dGgpOworICAgIHJldHVybiByZXQ7Cit9CisKIHZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkKIHsKICAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2xhdGlvbiA9IENH
QWZmaW5lVHJhbnNmb3JtTWFrZSgxLCAwLCAwLCAxLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHRRdC5jcHAJKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDI0ICsz
OSwyNSBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRl
ICJQYXRoLmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5j
bHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1
ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiUGF0dGVybi5oIgogI2lu
Y2x1ZGUgIlBlbi5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKLSNpbmNsdWRlIDxR
U3RhY2s+CisjaW5jbHVkZSA8UURlYnVnPgogI2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1ZGUg
PFFQb2x5Z29uRj4KLSNpbmNsdWRlIDxRUGFpbnRlclBhdGg+CiAjaW5jbHVkZSA8UVBhaW50RGV2
aWNlPgotI2luY2x1ZGUgPFFQaXhtYXA+CiAjaW5jbHVkZSA8UVBhaW50RW5naW5lPgotI2luY2x1
ZGUgPFFEZWJ1Zz4KKyNpbmNsdWRlIDxRUGFpbnRlclBhdGg+CisjaW5jbHVkZSA8UVBpeG1hcD4K
KyNpbmNsdWRlIDxRUG9seWdvbkY+CisjaW5jbHVkZSA8UVN0YWNrPgorI2luY2x1ZGUgPFFWZWN0
b3I+CiAKICNpZm5kZWYgTV9QSQogI2RlZmluZSBNX1BJIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYK
QEAgLTc4NCw2ICs3ODUsMjYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGlu
ZUNhcAogICAgIHAtPnNldFBlbihuUGVuKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCYgZGFzaE9mZnNldCkKK3sK
KyAgICBRUGFpbnRlciAqcCA9IG1fZGF0YS0+cCgpOworICAgIFFQZW4gcGVuID0gcC0+cGVuKCk7
CisgICAgdW5zaWduZWQgaW50IGRhc2hMZW5ndGggPSAhZGFzaGVzLmlzRW1wdHkoKSA/IGRhc2hl
cy5zaXplKCkgOiAwOworICAgIGlmKGRhc2hMZW5ndGgpIHsKKyAgICAgICAgUVZlY3RvcjxxcmVh
bD4gcGF0dGVybjsKKyAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gKGRhc2hMZW5ndGggJSAy
KSA9PSAwID8gZGFzaExlbmd0aCA6IGRhc2hMZW5ndGggKiAyOworCisgICAgICAgIGZvcih1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgcGF0dGVybi5hcHBl
bmQoZGFzaGVzW2kgJSBkYXNoTGVuZ3RoXSAvIChmbG9hdClwZW4ud2lkdGhGKCkpOworCisgICAg
ICAgIHBlbi5zZXREYXNoUGF0dGVybihwYXR0ZXJuKTsKKworICAgICAgICBRX1VOVVNFRChkYXNo
T2Zmc2V0KTsKKyAgICAgICAgLy8gVE9ETzogZGFzaC1vZmZzZXQsIGRvZXMvd2lsbCBxdDQgQVBJ
IGFsbG93IGl0PyAoUm9iKQorICAgIH0KKyAgICBwLT5zZXRQZW4ocGVuKTsKK30KKwogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGxqKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdGhR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXRoUXQu
Y3BwCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0
aFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMTIgQEAgYm9vbCBQYXRoOjpjb250
YWlucyhjb25zdCBGbG9hdFBvaW50JiBwbwogICAgIHJldHVybiBjb250YWluczsKIH0KIAorYm9v
bCBQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sK
KyAgICBib29sIGNvbnRhaW5zID0gbV9wYXRoLT5jb250YWlucyhwb2ludCk7CisgICAgcmV0dXJu
IGNvbnRhaW5zOworfQorCiB2b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNp
emUpCiB7CiAgICAgUU1hdHJpeCBtYXRyaXg7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNw
cAkocmV2aXNpb24gMzY3MTEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CiAjaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIKQEAgLTgzLDYgKzg0LDI3
IEBAIGJvb2wgUmVuZGVyUGF0aDo6ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2EKICAgICByZXR1cm4g
bV9wYXRoLmNvbnRhaW5zKHBvaW50LCBzdHlsZSgpLT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpKTsK
IH0KIAorYm9vbCBSZW5kZXJQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkgY29uc3QKK3sKKyAgICBpZiAobV9wYXRoLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYm
ICFTVkdQYWludFNlcnZlcjo6c3Ryb2tlUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vR3JhcGhpY3NDb250ZXh0KiBzY3JhdGNoID0gc2Ny
YXRjaENvbnRleHQoKTsKKyAgICBzdGQ6OmF1dG9fcHRyPEltYWdlQnVmZmVyPiBpbWFnZSA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxLCAxKSwgZmFsc2UpOworICAgIEdyYXBoaWNzQ29u
dGV4dCogc2NyYXRjaCA9IGltYWdlLT5jb250ZXh0KCk7CisgICAgc2NyYXRjaC0+c2V0RmlsbENv
bG9yKENvbG9yOjpibGFjayk7CisgICAgc2NyYXRjaC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJs
YWNrKTsKKyAgICBzY3JhdGNoLT5zYXZlKCk7CisgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4
dChzY3JhdGNoLCBzdHlsZSgpLCB0aGlzKTsKKyAgICBib29sIGNvbnRhaW5zID0gbV9wYXRoLnN0
cm9rZUNvbnRhaW5zKHBvaW50KTsKKyAgICBzY3JhdGNoLT5yZXN0b3JlKCk7CisKKyAgICByZXR1
cm4gY29udGFpbnM7Cit9CisKIEZsb2F0UmVjdCBSZW5kZXJQYXRoOjpyZWxhdGl2ZUJCb3goYm9v
bCBpbmNsdWRlU3Ryb2tlKSBjb25zdAogewogICAgIGlmIChtX3BhdGguaXNFbXB0eSgpKQpAQCAt
MTAxLDYgKzEyMywxNCBAQCBGbG9hdFJlY3QgUmVuZGVyUGF0aDo6cmVsYXRpdmVCQm94KGJvb2wg
CiAgICAgcmV0dXJuIG1fZmlsbEJCb3g7CiB9CiAKK0Zsb2F0UmVjdCBSZW5kZXJQYXRoOjpzdHJv
a2VCQm94KCkgY29uc3QKK3sKKyAgICBpZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tl
KCkpCisgICAgICAgIHJldHVybiBzdHJva2VCb3VuZGluZ0JveChtX3BhdGgsIHN0eWxlKCksIHRo
aXMpOworCisgICAgcmV0dXJuIG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKK30KKwogdm9pZCBSZW5k
ZXJQYXRoOjpzZXRQYXRoKGNvbnN0IFBhdGgmIG5ld1BhdGgpCiB7CiAgICAgbV9wYXRoID0gbmV3
UGF0aDsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5jcHAJKHJldmlz
aW9uIDM2NzExKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqICAgICAgICAgICAgICAg
MjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogICAgICAgICAgICAgICAyMDA4IERpcmsg
U2NodWx6ZSA8dmJzODVAZ214LmRlPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOSwxMSArMzAsMjMgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1BhaW50U2Vy
dmVyLmgiCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclBhdGguaCIK
ICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyU29saWQu
aCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJl
bmNlLmgiCisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisjaWYgUExBVEZPUk0oQ0FJUk8p
CisgICAgI2luY2x1ZGUgPGNhaXJvLmg+CisjZWxpZiBQTEFURk9STShRVCkKKyAgICAjaW5jbHVk
ZSA8UVBhaW50ZXI+CisgICAgI2luY2x1ZGUgPFFQaXhtYXA+CisjZW5kaWYKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC0xNDQsNiArMTU3LDMzIEBAIFNWR1BhaW50U2VydmVyKiBTVkdQYWlu
dFNlcnZlcjo6c3Ryb2tlUGEKICAgICByZXR1cm4gc3Ryb2tlUGFpbnRTZXJ2ZXI7CiB9CiAKK3Zv
aWQgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJl
bmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgY29u
dGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xl
bmd0aChvYmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjBmKSk7Cisg
ICAgY29udGV4dC0+c2V0TGluZUNhcChzdHlsZS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSk7Cisg
ICAgY29udGV4dC0+c2V0TGluZUpvaW4oc3R5bGUtPnN2Z1N0eWxlKCktPmpvaW5TdHlsZSgpKTsK
KyAgICBpZiAoc3R5bGUtPnN2Z1N0eWxlKCktPmpvaW5TdHlsZSgpID09IE1pdGVySm9pbikKKyAg
ICAgICAgY29udGV4dC0+c2V0TWl0ZXJMaW1pdChzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlTWl0
ZXJMaW1pdCgpKTsKKworICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzID0gZGFzaEFycmF5RnJv
bVJlbmRlcmluZ1N0eWxlKG9iamVjdC0+c3R5bGUoKSk7CisgICAgZmxvYXQgZGFzaE9mZnNldCA9
IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdT
dHlsZSgpLT5zdHJva2VEYXNoT2Zmc2V0KCksIDAuMGYpOworICAgIGNvbnRleHQtPnNldExpbmVE
YXNoKGRhc2hlcywgZGFzaE9mZnNldCk7Cit9CisKK0Zsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0Jv
eChjb25zdCBQYXRoJiBwYXRoLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0KQoreworICAgIHN0ZDo6YXV0b19wdHI8SW1hZ2VCdWZmZXI+IGltYWdlID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDEsIDEpLCBmYWxzZSk7CisgICAgR3JhcGhpY3NDb250
ZXh0KiBzY3JhdGNoID0gaW1hZ2UtPmNvbnRleHQoKTsKKyAgICBzY3JhdGNoLT5zZXRGaWxsQ29s
b3IoQ29sb3I6OmJsYWNrKTsKKyAgICBzY3JhdGNoLT5zZXRTdHJva2VDb2xvcihDb2xvcjo6Ymxh
Y2spOworICAgIHNjcmF0Y2gtPnNhdmUoKTsKKyAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0
KHNjcmF0Y2gsIHN0eWxlLCBvYmplY3QpOworICAgIEZsb2F0UmVjdCBiYm94ID0gcGF0aC5ib3Vu
ZGluZ1JlY3QoKTsKKyAgICBzY3JhdGNoLT5yZXN0b3JlKCk7CisKKyAgICByZXR1cm4gYmJveDsK
K30KKwogRGFzaEFycmF5IGRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUpCiB7CiAgICAgRGFzaEFycmF5IGFycmF5OwpJbmRleDogV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdQYWludFNlcnZlci5oCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR1BhaW50U2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEzICszNCw2IEBA
CiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CiAj
ZW5kaWYKIAotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPHFnbG9iYWwuaD4KLVFUX0JFR0lO
X05BTUVTUEFDRQotY2xhc3MgUVBlbjsKLVFUX0VORF9OQU1FU1BBQ0UKLSNlbmRpZgotCiAjaWYg
UExBVEZPUk0oQ0cpCiAgICAgdHlwZWRlZiBWZWN0b3I8Q0dGbG9hdD4gRGFzaEFycmF5OwogI2Vs
c2UKQEAgLTYzLDcgKzU2LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQXBwbHlU
b1N0cm9rZVRhcmdldFR5cGUgPSAyCiAgICAgfTsKIAorICAgIGNsYXNzIEFmZmluZVRyYW5zZm9y
bTsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisgICAgY2xhc3MgRmxvYXRSZWN0OworICAg
IGNsYXNzIFBhdGg7CiAgICAgY2xhc3MgUmVuZGVyT2JqZWN0OwogICAgIGNsYXNzIFJlbmRlclN0
eWxlOwogICAgIGNsYXNzIFNWR1BhaW50U2VydmVyU29saWQ7CkBAIC05NiwxMyArOTIsMTMgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGNsaXBUb0ZpbGxQYXRoKENHQ29udGV4
dFJlZiwgY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JN
KFFUKQotICAgICAgICB2b2lkIHNldFBlblByb3BlcnRpZXMoY29uc3QgUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUmVuZGVyU3R5bGUqLCBRUGVuJikgY29uc3Q7Ci0jZW5kaWYKICAgICBwcm90ZWN0ZWQ6
CiAgICAgICAgIFNWR1BhaW50U2VydmVyKCk7ICAgICAgICAKICAgICB9OwogCisgICAgdm9pZCBh
cHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCosIFJlbmRlclN0eWxlKiwg
Y29uc3QgUmVuZGVyT2JqZWN0Kik7CisgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KGNv
bnN0IFBhdGgmLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlck9iamVjdCopOworCiAgICAgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgU1ZHUGFpbnRTZXJ2ZXImKTsK
IAogICAgIFNWR1BhaW50U2VydmVyKiBnZXRQYWludFNlcnZlckJ5SWQoRG9jdW1lbnQqLCBjb25z
dCBBdG9taWNTdHJpbmcmKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2Vy
dmVyU29saWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50
U2VydmVyU29saWQuY3BwCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR1BhaW50U2VydmVyU29saWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBEaXJrIFNjaHVsemUgPHZiczg1QGdteC5k
ZT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMzAsMTEgQEAKICNp
bmNsdWRlICJTVkdQYWludFNlcnZlclNvbGlkLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFz
VGV4dC5oIgogCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJTVkdQYWludFNlcnZlci5oIgorI2luY2x1ZGUgIlJlbmRlclBhdGguaCIK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdQYWludFNlcnZlclNvbGlkOjpTVkdQYWludFNl
cnZlclNvbGlkKCkKQEAgLTU2LDYgKzYyLDUzIEBAIFRleHRTdHJlYW0mIFNWR1BhaW50U2VydmVy
U29saWQ6OmV4dGVybmEKICAgICByZXR1cm4gdHM7CiB9CiAKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJT
b2xpZDo6cmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJP
YmplY3QqIHBhdGgsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAgIGNvbnN0
IFNWR1JlbmRlclN0eWxlKiBzdHlsZSA9IHBhdGgtPnN0eWxlKCktPnN2Z1N0eWxlKCk7CisKKyAg
ICBjb250ZXh0LT5zZXRGaWxsUnVsZShzdHlsZS0+ZmlsbFJ1bGUoKSk7CisKKyAgICBpZiAoKHR5
cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN0eWxlLT5oYXNGaWxsKCkpCisgICAgICAg
IGNvbnRleHQtPmZpbGxQYXRoKCk7CisKKyAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFy
Z2V0VHlwZSkgJiYgc3R5bGUtPmhhc1N0cm9rZSgpKQorICAgICAgICBjb250ZXh0LT5zdHJva2VQ
YXRoKCk7Cit9CisKK2Jvb2wgU1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6c2V0dXAoR3JhcGhpY3NDb250
ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0
VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAoreworICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IG9iamVjdCA/IG9iamVjdC0+c3R5bGUoKSA6IDA7CisKKyAgICBpZiAoKHR5cGUg
JiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmICghc3R5bGUgfHwgc3R5bGUtPnN2Z1N0eWxlKCkt
Pmhhc0ZpbGwoKSkpIHsKKyAgICAgICAgUkdCQTMyIHJnYmEgPSBjb2xvcigpLnJnYigpOworICAg
ICAgICBBU1NFUlQoIWNvbG9yKCkuaGFzQWxwaGEoKSk7CisgICAgICAgIGlmIChzdHlsZSkKKyAg
ICAgICAgICAgIHJnYmEgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKHJnYmEsIHN0eWxlLT5zdmdT
dHlsZSgpLT5maWxsT3BhY2l0eSgpKTsKKworICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Io
cmdiYSk7CisKKyAgICAgICAgaWYgKGlzUGFpbnRpbmdUZXh0KQorICAgICAgICAgICAgY29udGV4
dC0+c2V0VGV4dERyYXdpbmdNb2RlKGNUZXh0RmlsbCk7CisgICAgfQorCisgICAgaWYgKCh0eXBl
ICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmICghc3R5bGUgfHwgc3R5bGUtPnN2Z1N0eWxl
KCktPmhhc1N0cm9rZSgpKSkgeworICAgICAgICBSR0JBMzIgcmdiYSA9IGNvbG9yKCkucmdiKCk7
CisgICAgICAgIEFTU0VSVCghY29sb3IoKS5oYXNBbHBoYSgpKTsKKyAgICAgICAgaWYgKHN0eWxl
KQorICAgICAgICAgICAgcmdiYSA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEocmdiYSwgc3R5bGUt
PnN2Z1N0eWxlKCktPnN0cm9rZU9wYWNpdHkoKSk7CisKKyAgICAgICAgY29udGV4dC0+c2V0U3Ry
b2tlQ29sb3IocmdiYSk7CisKKyAgICAgICAgaWYgKHN0eWxlKQorICAgICAgICAgICAgYXBwbHlT
dHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSwgb2JqZWN0KTsKKworICAgICAgICBp
ZiAoaXNQYWludGluZ1RleHQpCisgICAgICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01v
ZGUoY1RleHRTdHJva2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
UGFpbnRTZXJ2ZXJTb2xpZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R1BhaW50U2VydmVyU29saWQuaAkocmV2aXNpb24gMzY3MTEpCisrKyBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdQYWludFNlcnZlclNvbGlkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBzZXR1cChHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFp
bnRUYXJnZXRUeXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdDsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHJlbmRlclBhdGgoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCos
IFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBTVkdQ
YWludFNlcnZlclNvbGlkKCk7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdSZXNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1Jlc291cmNlLmgJKHJl
dmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUmVzb3VyY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKKyNpZiBQTEFURk9STShDRykKKyNpbmNsdWRl
IDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBBdG9taWNTdHJpbmc7IApJbmRleDogV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vUmVuZGVyUGF0aENhaXJvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9SZW5kZXJQYXRoQ2Fpcm8uY3BwCShyZXZpc2lv
biAzNjcxMSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1JlbmRlclBhdGhDYWlyby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUmVuZGVyUGF0aC5oIgotCi0jaW5jbHVkZSAiQ2Fpcm9QYXRoLmgiCi0jaW5jbHVkZSAi
U1ZHUGFpbnRTZXJ2ZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIFJlbmRlclBh
dGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVz
U3Ryb2tlKSBjb25zdAotewotICAgIGlmIChyZXF1aXJlc1N0cm9rZSAmJiAhU1ZHUGFpbnRTZXJ2
ZXI6OnN0cm9rZVBhaW50U2VydmVyKHN0eWxlKCksIHRoaXMpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBjYWlyb190KiBjciA9IHBhdGgoKS5wbGF0Zm9ybVBhdGgoKS0+bV9jcjsKLQot
ICAgIC8vIFRPRE86IHNldCBzdHJva2UgcHJvcGVydGllcwotICAgIHJldHVybiBjYWlyb19pbl9z
dHJva2UoY3IsIHBvaW50LngoKSwgcG9pbnQueSgpKTsKLX0KLQotRmxvYXRSZWN0IFJlbmRlclBh
dGg6OnN0cm9rZUJCb3goKSBjb25zdAotewotICAgIC8vIFRPRE86IHRoaXMgaW1wbGVtZW50YXRp
b24gaXMgbmFpdmUKLQotICAgIGNhaXJvX3QqIGNyID0gcGF0aCgpLnBsYXRmb3JtUGF0aCgpLT5t
X2NyOwotCi0gICAgZG91YmxlIHgwLCB4MSwgeTAsIHkxOwotICAgIGNhaXJvX3N0cm9rZV9leHRl
bnRzKGNyLCAmeDAsICZ5MCwgJngxLCAmeTEpOwotICAgIEZsb2F0UmVjdCBiYm94ID0gRmxvYXRS
ZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7Ci0KLSAgICByZXR1cm4gYmJveDsKLX0KLQot
fQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQ
YWludFNlcnZlckdyYWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDI1ICszNCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8g
VE9ETzogU2hhcmUgdGhpcyBjb2RlIHdpdGggYWxsIFNWR1BhaW50U2VydmVycwotc3RhdGljIHZv
aWQgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFNWR1JlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17
Ci0gICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIGNv
bnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9M
ZW5ndGgob2JqZWN0LCBzdHlsZS0+c3Ryb2tlV2lkdGgoKSwgMS4wKSk7Ci0gICAgY29udGV4dC0+
c2V0TGluZUNhcChzdHlsZS0+Y2FwU3R5bGUoKSk7Ci0gICAgY29udGV4dC0+c2V0TGluZUpvaW4o
c3R5bGUtPmpvaW5TdHlsZSgpKTsKLSAgICBpZiAoc3R5bGUtPmpvaW5TdHlsZSgpID09IE1pdGVy
Sm9pbikKLSAgICAgICAgY29udGV4dC0+c2V0TWl0ZXJMaW1pdChzdHlsZS0+c3Ryb2tlTWl0ZXJM
aW1pdCgpKTsKLQotICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzID0gZGFzaEFycmF5RnJvbVJl
bmRlcmluZ1N0eWxlKG9iamVjdC0+c3R5bGUoKSk7Ci0gICAgT3duQXJyYXlQdHI8ZG91YmxlPiBk
c2gobmV3IGRvdWJsZVtkYXNoZXMuc2l6ZSgpXSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDAgOyBp
IDwgZGFzaGVzLnNpemUoKSA7IGkrKykKLSAgICAgICAgZHNoW2ldID0gZGFzaGVzW2ldOwotICAg
IGRvdWJsZSBkYXNoT2Zmc2V0ID0gU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3Ro
KG9iamVjdCwgc3R5bGUtPnN0cm9rZURhc2hPZmZzZXQoKSwgMC4wKTsKLSAgICBjYWlyb19zZXRf
ZGFzaChjciwgZHNoLmdldCgpLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsKLX0KLQogYm9v
bCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXR1cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0
LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUsIGJv
b2wgaXNQYWludGluZ1RleHQpIGNvbnN0CiB7CiAgICAgbV9vd25lckVsZW1lbnQtPmJ1aWxkR3Jh
ZGllbnQoKTsKQEAgLTYzLDcgKzQ0LDcgQEAgYm9vbCBTVkdQYWludFNlcnZlckdyYWRpZW50Ojpz
ZXR1cChHcmFwaAogICAgIGNhaXJvX21hdHJpeF90IG1hdHJpeDsKICAgICBjYWlyb19tYXRyaXhf
aW5pdF9pZGVudGl0eSAoJm1hdHJpeCk7CiAgICAgY29uc3QgY2Fpcm9fbWF0cml4X3QgZ3JhZGll
bnRfbWF0cml4ID0gZ3JhZGllbnRUcmFuc2Zvcm0oKTsKLSAgICBjb25zdCBTVkdSZW5kZXJTdHls
ZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwogCiAgICAgaWYgKHRoaXMtPnR5cGUoKSA9PSBMaW5l
YXJHcmFkaWVudFBhaW50U2VydmVyKSB7CiAgICAgICAgIGNvbnN0IFNWR1BhaW50U2VydmVyTGlu
ZWFyR3JhZGllbnQqIGxpbmVhciA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR1BhaW50U2VydmVyTGlu
ZWFyR3JhZGllbnQqPih0aGlzKTsKQEAgLTE2MSwxMCArMTQyLDEwIEBAIGJvb2wgU1ZHUGFpbnRT
ZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGgKICAgICAgICAgY2Fpcm9fcGF0dGVybl9hZGRfY29s
b3Jfc3RvcF9yZ2JhKHBhdHRlcm4sIG9mZnNldCwgY29sb3IucmVkKCkgLyAyNTUuMCwgY29sb3Iu
Z3JlZW4oKSAvIDI1NS4wLCBjb2xvci5ibHVlKCkgLyAyNTUuMCwgY29sb3IuYWxwaGEoKSAvIDI1
NS4wKTsKICAgICB9CiAKLSAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYm
IHN0eWxlLT5oYXNGaWxsKCkpCi0gICAgICAgIGNhaXJvX3NldF9maWxsX3J1bGUoY3IsIHN0eWxl
LT5maWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCA/IENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCA6
IENBSVJPX0ZJTExfUlVMRV9XSU5ESU5HKTsKKyAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRh
cmdldFR5cGUpICYmIHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpCisgICAgICAgIGNhaXJv
X3NldF9maWxsX3J1bGUoY3IsIHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpID09IFJVTEVf
RVZFTk9ERCA/IENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCA6IENBSVJPX0ZJTExfUlVMRV9XSU5E
SU5HKTsKIAotICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdHls
ZS0+aGFzU3Ryb2tlKCkpCisgICAgaWYgKCh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUp
ICYmIHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkKICAgICAgICAgYXBwbHlTdHJva2VT
dHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSwgb2JqZWN0KTsKIAogICAgIGNhaXJvX3NldF9z
b3VyY2UoY3IsIHBhdHRlcm4pOwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZH
UGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmNwcAkocmV2aXNpb24gMzY3
MTEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclBhdHRlcm5D
YWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDMyICszMywxMyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLS8vIFRPRE86IFNoYXJlIHRoaXMgY29kZSB3aXRoIGFsbCBTVkdQYWludFNl
cnZlcnMKLXN0YXRpYyB2b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlck9i
amVjdCogb2JqZWN0KQotewotICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCk7Ci0KLSAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoU1ZHUmVuZGVyU3R5bGU6
OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN0cm9rZVdpZHRoKCksIDEuMCkp
OwotICAgIGNvbnRleHQtPnNldExpbmVDYXAoc3R5bGUtPmNhcFN0eWxlKCkpOwotICAgIGNvbnRl
eHQtPnNldExpbmVKb2luKHN0eWxlLT5qb2luU3R5bGUoKSk7Ci0gICAgaWYgKHN0eWxlLT5qb2lu
U3R5bGUoKSA9PSBNaXRlckpvaW4pCi0gICAgICAgIGNvbnRleHQtPnNldE1pdGVyTGltaXQoc3R5
bGUtPnN0cm9rZU1pdGVyTGltaXQoKSk7Ci0KLSAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcyA9
IGRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShvYmplY3QtPnN0eWxlKCkpOwotICAgIE93bkFy
cmF5UHRyPGRvdWJsZT4gZHNoKG5ldyBkb3VibGVbZGFzaGVzLnNpemUoKV0pOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKSA7IGkrKykKLSAgICAgICAgZHNoW2ldID0g
ZGFzaGVzW2ldOwotICAgIGRvdWJsZSBkYXNoT2Zmc2V0ID0gU1ZHUmVuZGVyU3R5bGU6OmNzc1By
aW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN0cm9rZURhc2hPZmZzZXQoKSwgMC4wKTsK
LSAgICBjYWlyb19zZXRfZGFzaChjciwgZHNoLmdldCgpLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zm
c2V0KTsKLX0KLQogYm9vbCBTVkdQYWludFNlcnZlclBhdHRlcm46OnNldHVwKEdyYXBoaWNzQ29u
dGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdl
dFR5cGUgdHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QKIHsKICAgICBGbG9hdFJlY3Qg
dGFyZ2V0UmVjdCA9IG9iamVjdC0+cmVsYXRpdmVCQm94KGZhbHNlKTsKIAotICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CiAKLSAgICBmbG9hdCBzdHJva2VX
aWR0aCA9IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxl
LT5zdHJva2VXaWR0aCgpLCAxLjApOworICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gU1ZHUmVuZGVy
U3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0
cm9rZVdpZHRoKCksIDEuMCk7CiAKICAgICBpZiAodGFyZ2V0UmVjdC53aWR0aCgpID09IDApCiAg
ICAgICAgIHRhcmdldFJlY3QgPSBGbG9hdFJlY3QodGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3Qu
eSgpLCBzdHJva2VXaWR0aCwgdGFyZ2V0UmVjdC5oZWlnaHQoKSk7CkBAIC04MywxMCArNjQsMTAg
QEAgYm9vbCBTVkdQYWludFNlcnZlclBhdHRlcm46OnNldHVwKEdyYXBoaQogICAgIGNhaXJvX21h
dHJpeF9pbnZlcnQoJm1hdHJpeCk7CiAgICAgY2Fpcm9fcGF0dGVybl9zZXRfbWF0cml4KHBhdHRl
cm4sICZtYXRyaXgpOwogCi0gICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAm
JiBzdHlsZS0+aGFzRmlsbCgpKQotICAgICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBzdHls
ZS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQg
OiBDQUlST19GSUxMX1JVTEVfV0lORElORyk7CisgICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxU
YXJnZXRUeXBlKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKQorICAgICAgICBjYWly
b19zZXRfZmlsbF9ydWxlKGNyLCBzdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSA9PSBSVUxF
X0VWRU5PREQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVfV0lO
RElORyk7CiAKLSAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3R5
bGUtPmhhc1N0cm9rZSgpKQorICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBl
KSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpCiAgICAgICAgIGFwcGx5U3Ryb2tl
U3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVjdCk7CiAKICAgICBjYWlyb19zZXRf
c291cmNlKGNyLCBwYXR0ZXJuKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NW
R1BhaW50U2VydmVyU29saWRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJTb2xpZENhaXJvLmNwcAkocmV2aXNpb24gMzY3MTEp
CisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclNvbGlkQ2Fpcm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlclNvbGlkLmgiCi0KLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlci5oIgotI2lu
Y2x1ZGUgIlJlbmRlclBhdGguaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIFNWR1Bh
aW50U2VydmVyU29saWQ6OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJl
bmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSwgYm9vbCBpc1BhaW50
aW5nVGV4dCkgY29uc3QKLXsKLSAgICAvLyBUT0RPOiBzaGFyZSB0aGlzIGNvZGUgd2l0aCBvdGhl
ciBQYWludFNlcnZlcnMKLQotICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCk7Ci0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgp
LT5zdmdTdHlsZSgpOwotCi0gICAgZmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7Ci0gICAg
Y29sb3IoKS5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLQotICAgIGlmICgodHlw
ZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhhc0ZpbGwoKSkgewotICAgICAg
ICBhbHBoYSA9IHN0eWxlLT5maWxsT3BhY2l0eSgpOwotCi0gICAgICAgIGNhaXJvX3NldF9maWxs
X3J1bGUoY3IsIHN0eWxlLT5maWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCA/IENBSVJPX0ZJTExf
UlVMRV9FVkVOX09ERCA6IENBSVJPX0ZJTExfUlVMRV9XSU5ESU5HKTsKLSAgICB9Ci0KLSAgICBp
ZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhhc1N0cm9rZSgp
KSB7Ci0gICAgICAgIGFscGhhID0gc3R5bGUtPnN0cm9rZU9wYWNpdHkoKTsKLQotICAgICAgICBj
YWlyb19zZXRfbGluZV93aWR0aChjciwgU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVu
Z3RoKG9iamVjdCwgc3R5bGUtPnN0cm9rZVdpZHRoKCksIDEuMCkpOwotICAgICAgICBjb250ZXh0
LT5zZXRMaW5lQ2FwKHN0eWxlLT5jYXBTdHlsZSgpKTsKLSAgICAgICAgY29udGV4dC0+c2V0TGlu
ZUpvaW4oc3R5bGUtPmpvaW5TdHlsZSgpKTsKLSAgICAgICAgaWYgKHN0eWxlLT5qb2luU3R5bGUo
KSA9PSBNaXRlckpvaW4pCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRNaXRlckxpbWl0KHN0eWxl
LT5zdHJva2VNaXRlckxpbWl0KCkpOwotCi0gICAgICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaGVz
ID0gZGFzaEFycmF5RnJvbVJlbmRlcmluZ1N0eWxlKG9iamVjdC0+c3R5bGUoKSk7Ci0gICAgICAg
IGRvdWJsZSogZHNoID0gbmV3IGRvdWJsZVtkYXNoZXMuc2l6ZSgpXTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMCA7IGkgPCBkYXNoZXMuc2l6ZSgpIDsgaSsrKQotICAgICAgICAgICAgZHNo
W2ldID0gZGFzaGVzW2ldOwotICAgICAgICBkb3VibGUgZGFzaE9mZnNldCA9IFNWR1JlbmRlclN0
eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdHJva2VEYXNoT2Zmc2V0
KCksIDAuMCk7Ci0gICAgICAgIGNhaXJvX3NldF9kYXNoKGNyLCBkc2gsIGRhc2hlcy5zaXplKCks
IGRhc2hPZmZzZXQpOwotICAgICAgICBkZWxldGVbXSBkc2g7Ci0gICAgfQotCi0gICAgY2Fpcm9f
c2V0X3NvdXJjZV9yZ2JhKGNyLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmNwcAkocmV2aXNpb24gMzY3MTEpCisrKyBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9jZy9DZ1N1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEy
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICAgICAgICAgICAgICAyMDA2IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+Ci0gKiAgICAgICAgICAgICAgIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYg
RU5BQkxFKFNWRykKLSNpbmNsdWRlICJDZ1N1cHBvcnQuaCIKLQotI2luY2x1ZGUgPEFwcGxpY2F0
aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2luY2x1ZGUgIkZsb2F0Q29udmVy
c2lvbi5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclN0
eWxlLmgiCi0jaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJT
dHlsZS5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotQ0dBZmZpbmVUcmFuc2Zvcm0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlTWFwQmV0d2VlblJl
Y3RzKENHUmVjdCBzb3VyY2UsIENHUmVjdCBkZXN0KQotewotICAgIENHQWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0aW9uKGRlc3Qub3JpZ2lu
LnggLSBzb3VyY2Uub3JpZ2luLngsIGRlc3Qub3JpZ2luLnkgLSBzb3VyY2Uub3JpZ2luLnkpOwot
ICAgIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtU2NhbGUodHJhbnNmb3JtLCBkZXN0LnNp
emUud2lkdGgvc291cmNlLnNpemUud2lkdGgsIGRlc3Quc2l6ZS5oZWlnaHQvc291cmNlLnNpemUu
aGVpZ2h0KTsKLSAgICByZXR1cm4gdHJhbnNmb3JtOwotfQotCi12b2lkIGFwcGx5U3Ryb2tlU3R5
bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUs
IGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIGNvbnRleHQtPnNldFN0cm9rZVRo
aWNrbmVzcyhTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHls
ZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKSwgMS4wZikpOwotICAgIGNvbnRleHQtPnNldExp
bmVDYXAoc3R5bGUtPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkpOwotICAgIGNvbnRleHQtPnNldExp
bmVKb2luKHN0eWxlLT5zdmdTdHlsZSgpLT5qb2luU3R5bGUoKSk7Ci0gICAgY29udGV4dC0+c2V0
TWl0ZXJMaW1pdChzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsKLQotICAg
IC8vIEZJWE1FOiBEYXNoQXJyYXkgc3VwcG9ydCBjb3VsZCBlYXNpbHkgYmUgbW92ZWQgaW50byBH
cmFwaGljc0NvbnRleHQsIGFuZCB0aGlzIGZ1bmN0aW9uIHRoZW4gbWFkZSB4LXBsYXRmb3JtCi0g
ICAgY29uc3QgRGFzaEFycmF5JiBkYXNoZXMgPSBkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUo
c3R5bGUpOwotICAgIGZsb2F0IGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0
aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaE9mZnNldCgp
LCAwLjBmKTsKLQotICAgIENHQ29udGV4dFNldExpbmVEYXNoKGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLCBkYXNoT2Zmc2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsKLX0KLQot
Q0dDb250ZXh0UmVmIHNjcmF0Y2hDb250ZXh0KCkKLXsKLSAgICBzdGF0aWMgQ0dDb250ZXh0UmVm
IHNjcmF0Y2ggPSAwOwotICAgIGlmICghc2NyYXRjaCkgewotICAgICAgICBDRk11dGFibGVEYXRh
UmVmIGVtcHR5ID0gQ0ZEYXRhQ3JlYXRlTXV0YWJsZShOVUxMLCAwKTsKLSAgICAgICAgQ0dEYXRh
Q29uc3VtZXJSZWYgY29uc3VtZXIgPSBDR0RhdGFDb25zdW1lckNyZWF0ZVdpdGhDRkRhdGEoZW1w
dHkpOwotICAgICAgICBzY3JhdGNoID0gQ0dQREZDb250ZXh0Q3JlYXRlKGNvbnN1bWVyLCBOVUxM
LCBOVUxMKTsKLSAgICAgICAgQ0dEYXRhQ29uc3VtZXJSZWxlYXNlKGNvbnN1bWVyKTsKLSAgICAg
ICAgQ0ZSZWxlYXNlKGVtcHR5KTsKLQotICAgICAgICBDR0Zsb2F0IGJsYWNrWzRdID0gezAsIDAs
IDAsIDF9OwotICAgICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3Ioc2NyYXRjaCwgYmxhY2spOwot
ICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcihzY3JhdGNoLCBibGFjayk7Ci0gICAgIH0K
LSAgICByZXR1cm4gc2NyYXRjaDsKLX0KLQotRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KGNv
bnN0IFBhdGgmIHBhdGgsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBv
YmplY3QpCi0gewotICAgIC8vIHRoZSBiYm94IG1pZ2h0IGdyb3cgaWYgdGhlIHBhdGggaXMgc3Ry
b2tlZC4KLSAgICAvLyBhbmQgQ0dQYXRoR2V0Qm91bmRpbmdCb3ggZG9lc24ndCBzdXBwb3J0IHRo
YXQsIHNvIHdlJ2xsIGhhdmUKLSAgICAvLyB0byBtYWtlIGFuIGFsdGVybmF0aXZlIGNhbGwuLi4K
LSAKLSAgICAvLyBGSVhNRTogc2luY2UgdGhpcyBpcyBtYWlubHkgdXNlZCB0byBkZWNpZGUgd2hh
dCB0byByZXBhaW50LAotICAgIC8vIHBlcmhhcHMgaXQgd291bGQgYmUgc3VmZmljaWVudCB0byBq
dXN0IG91dHNldCB0aGUgZmlsbCBiYm94IGJ5Ci0gICAgLy8gdGhlIHN0cm9rZSB3aWR0aCAtIHRo
YXQgc2hvdWxkIGJlIHdheSBjaGVhcGVyIGFuZCBzaW1wbGVyIHRoYW4KLSAgICAvLyB3aGF0IHdl
IGRvIGhlcmUuCi0gCi0gICAgQ0dQYXRoUmVmIGNnUGF0aCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7
Ci0KLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHNjcmF0Y2hDb250ZXh0KCk7Ci0gICAgQ0dD
b250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKLQotICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250
ZXh0KTsKLSAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIGNnUGF0aCk7Ci0KLSAgICBHcmFw
aGljc0NvbnRleHQgZ2MoY29udGV4dCk7Ci0gICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dCgm
Z2MsIHN0eWxlLCBvYmplY3QpOwotCi0gICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tl
ZFBhdGgoY29udGV4dCk7Ci0gICAgaWYgKENHQ29udGV4dElzUGF0aEVtcHR5KGNvbnRleHQpKSB7
Ci0gICAgICAgIC8vIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoIHNlZW1zIHRv
IGZhaWwgdG8gY3JlYXRlIGEgcGF0aCBzb21ldGltZXMsIHRoaXMgaXMgbm90IHdlbGwgdW5kZXJz
dG9vZC4KLSAgICAgICAgLy8gcmV0dXJuaW5nIGhlcmUgcHJldmVudHMgQ0cgZnJvbSBsb2dnaW5n
IHRvIHRoZSBjb25zb2xlIGZyb20gQ0dDb250ZXh0R2V0UGF0aEJvdW5kaW5nQm94Ci0gICAgICAg
IENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Ci0gICAgICAgIHJldHVybiBGbG9hdFJl
Y3QoKTsKLSAgICB9Ci0KLSAgICBDR1JlY3QgYm94ID0gQ0dDb250ZXh0R2V0UGF0aEJvdW5kaW5n
Qm94KGNvbnRleHQpOwotICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Ci0KLSAg
ICByZXR1cm4gRmxvYXRSZWN0KGJveCk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcp
Ci0KSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5oCShyZXZpc2lvbiAzNjcxMSkK
KysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ2dTdXBwb3J0X2gK
LSNkZWZpbmUgQ2dTdXBwb3J0X2gKLQotI2lmIEVOQUJMRShTVkcpCi0KLSNpbmNsdWRlIDxBcHBs
aWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNpbmNsdWRlICJHcmFwaGlj
c1R5cGVzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBzdHJ1Y3QgQ0dQYXRo
ICpDR011dGFibGVQYXRoUmVmOwotCi1jbGFzcyBQYXRoOwotY2xhc3MgRmxvYXRSZWN0OwotY2xh
c3MgUmVuZGVyU3R5bGU7Ci1jbGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRl
eHQ7Ci0KLUNHQWZmaW5lVHJhbnNmb3JtIENHQWZmaW5lVHJhbnNmb3JtTWFrZU1hcEJldHdlZW5S
ZWN0cyhDR1JlY3Qgc291cmNlLCBDR1JlY3QgZGVzdCk7Ci0KLXZvaWQgYXBwbHlTdHJva2VTdHls
ZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlck9i
amVjdCopOwotCi1DR0NvbnRleHRSZWYgc2NyYXRjaENvbnRleHQoKTsKLUZsb2F0UmVjdCBzdHJv
a2VCb3VuZGluZ0JveChjb25zdCBQYXRoJiBwYXRoLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRl
ck9iamVjdCopOwotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQotI2VuZGlmIC8vICFDZ1N1
cHBvcnRfaApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvUmVuZGVyUGF0aENnLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9SZW5kZXJQYXRoQ2cuY3BwCShy
ZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1JlbmRlclBhdGhDZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgICAg
ICAgICAoQykgMjAwNiBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgotICogICAg
ICAgICAgICAgICAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgot
Ci0jaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0j
aW5jbHVkZSAiQ2dTdXBwb3J0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgotI2lu
Y2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0UmVjdCBSZW5kZXJQYXRoOjpzdHJva2VCQm94
KCkgY29uc3QKLXsKLSAgICBpZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpCi0g
ICAgICAgIHJldHVybiBzdHJva2VCb3VuZGluZ0JveChwYXRoKCksIHN0eWxlKCksIHRoaXMpOwot
Ci0gICAgcmV0dXJuIHBhdGgoKS5ib3VuZGluZ1JlY3QoKTsKLX0KLQotCi1ib29sIFJlbmRlclBh
dGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVz
U3Ryb2tlKSBjb25zdAotewotICAgIGlmIChwYXRoKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAocmVxdWlyZXNTdHJva2UgJiYgIVNWR1BhaW50U2VydmVyOjpz
dHJva2VQYWludFNlcnZlcihzdHlsZSgpLCB0aGlzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgQ0dNdXRhYmxlUGF0aFJlZiBjZ1BhdGggPSBwYXRoKCkucGxhdGZvcm1QYXRoKCk7Ci0g
ICAgCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBzY3JhdGNoQ29udGV4dCgpOwotICAgIENH
Q29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0gICAgCi0gICAgQ0dDb250ZXh0QmVnaW5QYXRo
KGNvbnRleHQpOwotICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgY2dQYXRoKTsKLQotICAg
IEdyYXBoaWNzQ29udGV4dCBnYyhjb250ZXh0KTsKLSAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250
ZXh0KCZnYywgc3R5bGUoKSwgdGhpcyk7Ci0KLSAgICBib29sIGhpdFN1Y2Nlc3MgPSBDR0NvbnRl
eHRQYXRoQ29udGFpbnNQb2ludChjb250ZXh0LCBwb2ludCwga0NHUGF0aFN0cm9rZSk7Ci0gICAg
Q0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKLSAgICAKLSAgICByZXR1cm4gaGl0U3Vj
Y2VzczsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcAkocmV2
aXNpb24gMzY3MTEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckdy
YWRpZW50Q2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw2IEBACiAjaWYgRU5BQkxF
KFNWRykKICNpbmNsdWRlICJTVkdQYWludFNlcnZlckdyYWRpZW50LmgiCiAKLSNpbmNsdWRlICJD
Z1N1cHBvcnQuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgpAQCAtMjU4LDExICsyNTcs
MTAgQEAgdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpoYW5kbGVCb3VuZAogCiAgICAgaWYg
KGJvdW5kaW5nQm94TW9kZSgpKSB7CiAgICAgICAgIC8vIENob29zZSBkZWZhdWx0IGdyYWRpZW50
IGJvdW5kaW5nIGJveAotICAgICAgICBDR1JlY3QgZ3JhZGllbnRCQm94ID0gQ0dSZWN0TWFrZSgw
LjBmLCAwLjBmLCAxLjBmLCAxLjBmKTsKKyAgICAgICAgRmxvYXRSZWN0IGdyYWRpZW50QkJveCgw
LjBmLCAwLjBmLCAxLjBmLCAxLjBmKTsKIAogICAgICAgICAvLyBHZW5lcmF0ZSBhIHRyYW5zZm9y
bSB0byBtYXAgYmV0d2VlbiBib3RoIGJvdW5kaW5nIGJveGVzCi0gICAgICAgIENHQWZmaW5lVHJh
bnNmb3JtIGdyYWRpZW50SW50b09iamVjdEJCb3ggPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VNYXBC
ZXR3ZWVuUmVjdHMoZ3JhZGllbnRCQm94LCBDR1JlY3QodGFyZ2V0UmVjdCkpOwotICAgICAgICBD
R0NvbnRleHRDb25jYXRDVE0oY29udGV4dFJlZiwgZ3JhZGllbnRJbnRvT2JqZWN0QkJveCk7Cisg
ICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShtYWtlTWFwQmV0d2VlblJlY3RzKGdyYWRpZW50QkJv
eCwgdGFyZ2V0UmVjdCkpOwogICAgIH0KIAogICAgIC8vIEFwcGx5IHRoZSBncmFkaWVudCdzIG93
biB0cmFuc2Zvcm0KSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVy
UGF0dGVybkNnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQ
YWludFNlcnZlclBhdHRlcm5DZy5jcHAJKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCw3ICsyNCw2IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdQYWludFNlcnZl
clBhdHRlcm4uaCIKIAotI2luY2x1ZGUgIkNnU3VwcG9ydC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2Jq
ZWN0LmgiCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlclNvbGlk
Q2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2Vy
dmVyU29saWRDZy5jcHAJKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
Y2cvU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3NyArMCww
IEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRm
b3hAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJTVkdQ
YWludFNlcnZlclNvbGlkLmgiCi0KLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkNnU3Vw
cG9ydC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlck9i
amVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgU1ZHUGFpbnRTZXJ2ZXJTb2xp
ZDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBv
YmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25z
dAotewotICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHVzZSBhbnkgQ0ctc3Bl
Y2lmaWMgY2FsbHMsIGhvd2V2ZXIgaXQncyBub3QgeWV0Ci0gICAgLy8gY3Jvc3MgcGxhdGZvcm0s
IGJlY2F1c2UgQ0cgaGFuZGxlcyBmaWxsIHJ1bGUgZGlmZmVyZW50IGZyb20gb3RoZXIgZ3JhcGhp
Y3MKLSAgICAvLyBwbGF0Zm9ybXMuICBDRyBtYWtlcyB5b3UgdXNlIHR3byBzZXBhcmF0ZSBmaWxs
IGNhbGxzLCBvdGhlciBwbGF0Zm9ybXMgc2V0Ci0gICAgLy8gdGhlIGZpbGwgcnVsZSBzdGF0ZSBv
biB0aGUgY29udGV4dCBhbmQgdGhlbiBjYWxsIGEgZ2VuZXJpYyAiZmlsbFBhdGgiCi0KLSAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QgPyBvYmplY3QtPnN0eWxlKCkgOiAwOwotCi0gICAg
aWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiAoIXN0eWxlIHx8IHN0eWxlLT5z
dmdTdHlsZSgpLT5oYXNGaWxsKCkpKSB7Ci0gICAgICAgIFJHQkEzMiByZ2JhID0gY29sb3IoKS5y
Z2IoKTsKLSAgICAgICAgQVNTRVJUKCFjb2xvcigpLmhhc0FscGhhKCkpOwotICAgICAgICBpZiAo
c3R5bGUpCi0gICAgICAgICAgICByZ2JhID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShyZ2JhLCBz
dHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbE9wYWNpdHkoKSk7Ci0KLSAgICAgICAgY29udGV4dC0+c2V0
RmlsbENvbG9yKHJnYmEpOwotCi0gICAgICAgIGlmIChpc1BhaW50aW5nVGV4dCkKLSAgICAgICAg
ICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShjVGV4dEZpbGwpOwotICAgIH0KLQotICAg
IGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiAoIXN0eWxlIHx8IHN0eWxl
LT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkpIHsKLSAgICAgICAgUkdCQTMyIHJnYmEgPSBjb2xv
cigpLnJnYigpOwotICAgICAgICBBU1NFUlQoIWNvbG9yKCkuaGFzQWxwaGEoKSk7Ci0gICAgICAg
IGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJnYmEgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKHJn
YmEsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VPcGFjaXR5KCkpOwotCi0gICAgICAgIGNvbnRl
eHQtPnNldFN0cm9rZUNvbG9yKHJnYmEpOwotCi0gICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAg
ICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVjdCk7Ci0K
LSAgICAgICAgaWYgKGlzUGFpbnRpbmdUZXh0KQotICAgICAgICAgICAgY29udGV4dC0+c2V0VGV4
dERyYXdpbmdNb2RlKGNUZXh0U3Ryb2tlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9ldApJ
bmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUmVzb3VyY2VDbGlwcGVyQ2cuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1Jlc291cmNlQ2xpcHBlckNn
LmNwcAkocmV2aXNpb24gMzY3MTEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdSZXNv
dXJjZUNsaXBwZXJDZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAKICNpZiBF
TkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1Jlc291cmNlQ2xpcHBlci5oIgogCisjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiQ2dTdXBwb3J0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDYsMjIgKzQ2LDE5
IEBAIHZvaWQgU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXAoR3JhcGgKIAogICAgIGNvbnRl
eHQtPmJlZ2luUGF0aCgpOwogCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gYmJveFRyYW5zZm9ybSA9
IENHQWZmaW5lVHJhbnNmb3JtTWFrZU1hcEJldHdlZW5SZWN0cyhDR1JlY3RNYWtlKDAsMCwxLDEp
LCBDR1JlY3QoYm91bmRpbmdCb3gpKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmJveFRyYW5zZm9y
bSA9IG1ha2VNYXBCZXR3ZWVuUmVjdHMoRmxvYXRSZWN0KDAsIDAsIDEsIDEpLCBib3VuZGluZ0Jv
eCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgbV9jbGlwRGF0YS5jbGlwRGF0YSgp
LnNpemUoKTsgeCsrKSB7CiAgICAgICAgIENsaXBEYXRhIGRhdGEgPSBtX2NsaXBEYXRhLmNsaXBE
YXRhKClbeF07CiAgICAgICAgIGlmIChkYXRhLndpbmRSdWxlICE9IGNsaXBSdWxlKQogICAgICAg
ICAgICAgaGV0ZXJvZ2Vub3VzQ2xpcFJ1bGVzID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIENH
UGF0aFJlZiBjbGlwUGF0aCA9IGRhdGEucGF0aC5wbGF0Zm9ybVBhdGgoKTsKIAogICAgICAgICBp
ZiAoZGF0YS5iYm94VW5pdHMpIHsKLSAgICAgICAgICAgIENHTXV0YWJsZVBhdGhSZWYgdHJhbnNm
b3JtZWRQYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwotICAgICAgICAgICAgQ0dQYXRoQWRk
UGF0aCh0cmFuc2Zvcm1lZFBhdGgsICZiYm94VHJhbnNmb3JtLCBjbGlwUGF0aCk7Ci0gICAgICAg
ICAgICBDR0NvbnRleHRBZGRQYXRoKGNnQ29udGV4dCwgdHJhbnNmb3JtZWRQYXRoKTsKLSAgICAg
ICAgICAgIENHUGF0aFJlbGVhc2UodHJhbnNmb3JtZWRQYXRoKTsKKyAgICAgICAgICAgIFBhdGgg
dHJhbnNmb3JtZWRQYXRoID0gZGF0YS5wYXRoOworICAgICAgICAgICAgdHJhbnNmb3JtZWRQYXRo
LnRyYW5zZm9ybShiYm94VHJhbnNmb3JtKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmFkZFBhdGgo
dHJhbnNmb3JtZWRQYXRoKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBDR0NvbnRleHRB
ZGRQYXRoKGNnQ29udGV4dCwgY2xpcFBhdGgpOworICAgICAgICAgICAgY29udGV4dC0+YWRkUGF0
aChkYXRhLnBhdGgpOwogICAgIH0KIAogICAgIGlmIChtX2NsaXBEYXRhLmNsaXBEYXRhKCkuc2l6
ZSgpKSB7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdSZXNvdXJjZU1hc2tlckNn
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1Jlc291cmNlTWFz
a2VyQ2cubW0JKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZH
UmVzb3VyY2VNYXNrZXJDZy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2lt
cG9ydCAiU1ZHUmVzb3VyY2VNYXNrZXIuaCIKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgi
Ci0jaW1wb3J0ICJDZ1N1cHBvcnQuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lt
cG9ydCAiSW1hZ2VCdWZmZXIuaCIKICNpbXBvcnQgIlNWR01hc2tFbGVtZW50LmgiCkluZGV4OiBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9SZW5kZXJQYXRoUXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1JlbmRlclBhdGhRdC5jcHAJKHJldmlzaW9uIDM2NzExKQor
KysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvUmVuZGVyUGF0aFF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw4OSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAg
IDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAgICAgICAgICAgICAg
ICAgIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWMuc2VpZGVsQGtkZW1haWwubmV0PgotCi0gICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0K
LSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCi0j
aW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIKLQotI2luY2x1ZGUgPFFEZWJ1Zz4KLSNpbmNsdWRl
IDxRUGFpbnRlclBhdGhTdHJva2VyPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1ib29s
IFJlbmRlclBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29s
IHJlcXVpcmVzU3Ryb2tlKSBjb25zdAotewotICAgIGlmIChwYXRoKCkuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAocmVxdWlyZXNTdHJva2UgJiYgIVNWR1BhaW50
U2VydmVyOjpzdHJva2VQYWludFNlcnZlcihzdHlsZSgpLCB0aGlzKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgUVBhaW50ZXJQYXRoIGdl
dFBhdGhTdHJva2UoY29uc3QgUVBhaW50ZXJQYXRoICZwYXRoLCBjb25zdCBSZW5kZXJPYmplY3Qq
IG9iamVjdCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQoteyAKLSAgICBRUGFpbnRlclBhdGhT
dHJva2VyIHM7Ci0gICAgcy5zZXRXaWR0aChTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9M
ZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKSwgMS4wKSk7Ci0K
LSAgICBpZiAoc3R5bGUtPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gQnV0dENhcCkKLSAgICAg
ICAgcy5zZXRDYXBTdHlsZShRdDo6RmxhdENhcCk7Ci0gICAgZWxzZSBpZiAoc3R5bGUtPnN2Z1N0
eWxlKCktPmNhcFN0eWxlKCkgPT0gUm91bmRDYXApCi0gICAgICAgIHMuc2V0Q2FwU3R5bGUoUXQ6
OlJvdW5kQ2FwKTsKLQotICAgIGlmIChzdHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0eWxlKCkgPT0g
TWl0ZXJKb2luKSB7Ci0gICAgICAgIHMuc2V0Sm9pblN0eWxlKFF0OjpNaXRlckpvaW4pOwotICAg
ICAgICBzLnNldE1pdGVyTGltaXQoKHFyZWFsKSBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlTWl0
ZXJMaW1pdCgpKTsKLSAgICB9IGVsc2UgaWYoc3R5bGUtPnN2Z1N0eWxlKCktPmpvaW5TdHlsZSgp
ID09IFJvdW5kSm9pbikKLSAgICAgICAgcy5zZXRKb2luU3R5bGUoUXQ6OlJvdW5kSm9pbik7Ci0K
LSAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcyA9IFdlYkNvcmU6OmRhc2hBcnJheUZyb21SZW5k
ZXJpbmdTdHlsZShzdHlsZSk7Ci0gICAgZG91YmxlIGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJTdHls
ZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tl
RGFzaE9mZnNldCgpLCAwLjApOwotCi0gICAgdW5zaWduZWQgaW50IGRhc2hMZW5ndGggPSAhZGFz
aGVzLmlzRW1wdHkoKSA/IGRhc2hlcy5zaXplKCkgOiAwOwotICAgIGlmKGRhc2hMZW5ndGgpIHsK
LSAgICAgICAgUVZlY3RvcjxxcmVhbD4gcGF0dGVybjsKLSAgICAgICAgdW5zaWduZWQgaW50IGNv
dW50ID0gKGRhc2hMZW5ndGggJSAyKSA9PSAwID8gZGFzaExlbmd0aCA6IGRhc2hMZW5ndGggKiAy
OwotCi0gICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAg
ICAgICAgICAgcGF0dGVybi5hcHBlbmQoZGFzaGVzW2kgJSBkYXNoTGVuZ3RoXSAvIChmbG9hdClz
LndpZHRoKCkpOwotCi0gICAgICAgIHMuc2V0RGFzaFBhdHRlcm4ocGF0dGVybik7Ci0gICAgCi0g
ICAgICAgIFFfVU5VU0VEKGRhc2hPZmZzZXQpOwotICAgICAgICAvLyBUT0RPOiBkYXNoLW9mZnNl
dCwgZG9lcy93aWxsIHF0NCBBUEkgYWxsb3cgaXQ/IChSb2IpCi0gICAgfQotCi0gICAgcmV0dXJu
IHMuY3JlYXRlU3Ryb2tlKHBhdGgpOwotfQotCi1GbG9hdFJlY3QgUmVuZGVyUGF0aDo6c3Ryb2tl
QkJveCgpIGNvbnN0Ci17Ci0gICAgUVBhaW50ZXJQYXRoIG91dGxpbmUgPSBnZXRQYXRoU3Ryb2tl
KCoocGF0aCgpLnBsYXRmb3JtUGF0aCgpKSwgdGhpcywgc3R5bGUoKSk7Ci0gICAgcmV0dXJuIG91
dGxpbmUuYm91bmRpbmdSZWN0KCk7Ci19Ci0KLX0KLQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDog
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlckdyYWRpZW50
UXQuY3BwCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1Bh
aW50U2VydmVyR3JhZGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSwxMCBA
QAogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHR3JhZGllbnRFbGVtZW50
LmgiCiAKLSNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpbmNsdWRlIDxRUGFpbnRlclBhdGg+CiAjaW5j
bHVkZSA8UUNvbG9yPgogI2luY2x1ZGUgPFFHcmFkaWVudD4KKyNpbmNsdWRlIDxRUGFpbnRlcj4K
KyNpbmNsdWRlIDxRUGFpbnRlclBhdGg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTMs
MTEgKzkzLDkgQEAgYm9vbCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXR1cChHcmFwaAogICAg
ICAgICBRUGVuIHBlbjsKICAgICAgICAgUUJydXNoIGJydXNoKGdyYWRpZW50KTsKICAgICAgICAg
YnJ1c2guc2V0TWF0cml4KGdyYWRpZW50VHJhbnNmb3JtKCkpOwotCi0gICAgICAgIHNldFBlblBy
b3BlcnRpZXMob2JqZWN0LCByZW5kZXJTdHlsZSwgcGVuKTsKICAgICAgICAgcGVuLnNldEJydXNo
KGJydXNoKTsKLQogICAgICAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKKyAgICAgICAgYXBwbHlT
dHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCByZW5kZXJTdHlsZSwgb2JqZWN0KTsKICAgICB9
CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1Bh
aW50U2VydmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NW
R1BhaW50U2VydmVyUXQuY3BwCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL3F0L1NWR1BhaW50U2VydmVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw0NyArMjYs
MTMgQEAKICNpbmNsdWRlICJTVkdQYWludFNlcnZlci5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogCiAjaW5jbHVkZSA8UVBhaW50
ZXI+Ci0jaW5jbHVkZSA8UVZlY3Rvcj4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFNW
R1BhaW50U2VydmVyOjpzZXRQZW5Qcm9wZXJ0aWVzKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0
LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIFFQZW4mIHBlbikgY29uc3QKLXsKLSAgICBwZW4u
c2V0V2lkdGhGKFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0
eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjApKTsKLQotICAgIGlmIChzdHlsZS0+
c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSA9PSBCdXR0Q2FwKQotICAgICAgICBwZW4uc2V0Q2FwU3R5
bGUoUXQ6OkZsYXRDYXApOwotICAgIGVsc2UgaWYgKHN0eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHls
ZSgpID09IFJvdW5kQ2FwKQotICAgICAgICBwZW4uc2V0Q2FwU3R5bGUoUXQ6OlJvdW5kQ2FwKTsK
LQotICAgIGlmIChzdHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0eWxlKCkgPT0gTWl0ZXJKb2luKSB7
Ci0gICAgICAgIHBlbi5zZXRKb2luU3R5bGUoUXQ6Ok1pdGVySm9pbik7Ci0gICAgICAgIHBlbi5z
ZXRNaXRlckxpbWl0KChxcmVhbCkgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGltaXQo
KSk7Ci0gICAgfSBlbHNlIGlmKHN0eWxlLT5zdmdTdHlsZSgpLT5qb2luU3R5bGUoKSA9PSBSb3Vu
ZEpvaW4pCi0gICAgICAgIHBlbi5zZXRKb2luU3R5bGUoUXQ6OlJvdW5kSm9pbik7Ci0KLSAgICBj
b25zdCBEYXNoQXJyYXkmIGRhc2hlcyA9IFdlYkNvcmU6OmRhc2hBcnJheUZyb21SZW5kZXJpbmdT
dHlsZShzdHlsZSk7Ci0gICAgZG91YmxlIGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJTdHlsZTo6Y3Nz
UHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaE9m
ZnNldCgpLCAwLjApOwotCi0gICAgdW5zaWduZWQgaW50IGRhc2hMZW5ndGggPSAhZGFzaGVzLmlz
RW1wdHkoKSA/IGRhc2hlcy5zaXplKCkgOiAwOwotICAgIGlmKGRhc2hMZW5ndGgpIHsKLSAgICAg
ICAgUVZlY3RvcjxxcmVhbD4gcGF0dGVybjsKLSAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0g
KGRhc2hMZW5ndGggJSAyKSA9PSAwID8gZGFzaExlbmd0aCA6IGRhc2hMZW5ndGggKiAyOwotCi0g
ICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAg
ICAgcGF0dGVybi5hcHBlbmQoZGFzaGVzW2kgJSBkYXNoTGVuZ3RoXSAvIChmbG9hdClwZW4ud2lk
dGhGKCkpOwotCi0gICAgICAgIHBlbi5zZXREYXNoUGF0dGVybihwYXR0ZXJuKTsKLQotICAgICAg
ICBRX1VOVVNFRChkYXNoT2Zmc2V0KTsKLSAgICAgICAgLy8gVE9ETzogZGFzaC1vZmZzZXQsIGRv
ZXMvd2lsbCBxdDQgQVBJIGFsbG93IGl0PyAoUm9iKQotICAgIH0KLX0KLQogdm9pZCBTVkdQYWlu
dFNlcnZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmpl
Y3QqIHBhdGgsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogewogICAgIGlmICghc2V0
dXAoY29udGV4dCwgcGF0aCwgdHlwZSkpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9T
VkdQYWludFNlcnZlclNvbGlkUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL3F0L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHAJKHJldmlzaW9uIDM2NzExKQorKysgV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJTb2xpZFF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw3NyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFz
IFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDggSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNp
bmNsdWRlICJTVkdQYWludFNlcnZlclNvbGlkLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCi0KLSNpbmNsdWRlIDxRUGFpbnRlcj4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIFNWR1BhaW50U2VydmVyU29saWQ6OnNldHVwKEdy
YXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQ
YWludFRhcmdldFR5cGUgdHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QKLXsKLSAgICBR
UGFpbnRlciogcGFpbnRlcihjb250ZXh0ID8gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiAw
KTsKLSAgICBRX0FTU0VSVChwYWludGVyKTsKLQotICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHls
ZSA9IG9iamVjdCA/IG9iamVjdC0+c3R5bGUoKSA6IDA7Ci0gICAgLy8gVE9ETz8gcGFpbnRlci0+
c2V0T3BhY2l0eShyZW5kZXJTdHlsZS0+b3BhY2l0eSgpKTsKLQotICAgIFFDb2xvciBjID0gY29s
b3IoKTsKLQotICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgKCFyZW5k
ZXJTdHlsZSB8fCByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSkgewotICAgICAg
ICBpZiAocmVuZGVyU3R5bGUpCi0gICAgICAgICAgICBjLnNldEFscGhhRihyZW5kZXJTdHlsZS0+
c3ZnU3R5bGUoKS0+ZmlsbE9wYWNpdHkoKSk7Ci0KLSAgICAgICAgUUJydXNoIGJydXNoKGMpOwot
ICAgICAgICBwYWludGVyLT5zZXRCcnVzaChicnVzaCk7Ci0KLSAgICAgICAgaWYgKHJlbmRlclN0
eWxlKQotICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbFJ1bGUocmVuZGVyU3R5bGUtPnN2Z1N0
eWxlKCktPmZpbGxSdWxlKCkpOwotCi0gICAgICAgIC8qIGlmKGlzUGFpbnRpbmdUZXh0KCkpIC4u
LiAqLwotICAgIH0KLQotICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAm
JiAoIXJlbmRlclN0eWxlIHx8IHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkp
IHsKLSAgICAgICAgaWYgKHJlbmRlclN0eWxlKQotICAgICAgICAgICAgYy5zZXRBbHBoYUYocmVu
ZGVyU3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU9wYWNpdHkoKSk7Ci0KLSAgICAgICAgUVBlbiBw
ZW4oYyk7Ci0gICAgICAgIGlmIChyZW5kZXJTdHlsZSkKLSAgICAgICAgICAgIHNldFBlblByb3Bl
cnRpZXMob2JqZWN0LCByZW5kZXJTdHlsZSwgcGVuKTsKLSAgICAgICAgcGFpbnRlci0+c2V0UGVu
KHBlbik7Ci0KLSAgICAgICAgLyogaWYoaXNQYWludGluZ1RleHQoKSkgLi4uICovCi0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
Ci0KLS8vIHZpbTp0cz00Om5vZXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23609</attachid>
            <date>2008-09-20 12:53:37 -0700</date>
            <delta_ts>2008-09-20 12:53:37 -0700</delta_ts>
            <desc>SVGPaintServer cleanUp</desc>
            <filename>SVGPaintServer-cleanUp.patch</filename>
            <type>text/plain</type>
            <size>69244</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjYgQEAKKzIwMDgtMDktMjAgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDbGVhbiBV
cCBvZiBTVkdQYWludFNlcnZlci4gQ29tYmluZWQgdGhlIFNWR1BhaW50U2VydmVyU29saWQqCisg
ICAgICAgIHRvIGEgdW5pdCBTVkdQYWludFNlcnZlclNvbGlkLiBSZXBsYWNlZCBDZ1N1cHBvcnQg
YnkgYSBwbGF0Zm9ybQorICAgICAgICBpbmRlcGVuZGVudCBjb2RlLgorCisgICAgICAgICogR05V
bWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlTWFwQmV0d2VlblJlY3RzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9BZmZpbmVUcmFuc2Zvcm0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Q
YXRoLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFz
aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6c3Ryb2tlQ29udGFpbnMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdGhRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YXRoOjpzdHJva2VDb250YWlucyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclBhdGguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6c3Ryb2tlQ29udGFpbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6c3Ryb2tlQkJveCk6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL1NWR1BhaW50U2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5U3Ryb2tlU3R5
bGVUb0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6c3Ryb2tlQm91bmRpbmdCb3gpOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5oOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9TVkdQYWludFNlcnZlclNvbGlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50
U2VydmVyU29saWQ6OnJlbmRlclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2
ZXJTb2xpZDo6c2V0dXApOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNv
bGlkLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1Jlc291cmNlLmg6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2NhaXJvL1JlbmRlclBhdGhDYWlyby5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXR1cCk6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyUGF0dGVybjo6c2V0dXApOgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclNvbGlkQ2Fpcm8uY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9jZy9DZ1N1cHBvcnQuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9jZy9DZ1N1cHBvcnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvY2cvUmVuZGVyUGF0aENnLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmhhbmRsZUJvdW5kaW5nQm94TW9kZUFuZEdyYWRp
ZW50VHJhbnNmb3JtYXRpb24pOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNl
cnZlclBhdHRlcm5DZy5jcHA6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2Vy
dmVyU29saWRDZy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2NnL1NWR1Jl
c291cmNlQ2xpcHBlckNnLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNlQ2xpcHBl
cjo6YXBwbHlDbGlwKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvY2cvU1ZHUmVzb3VyY2VNYXNr
ZXJDZy5tbToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvcXQvUmVuZGVyUGF0aFF0LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudFF0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKToK
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJRdC5jcHA6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHA6IFJlbW92ZWQuCisK
IDIwMDgtMDktMjAgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyICA8emVja2VAc2VsZmlzaC5v
cmc+CiAKICAgICAgICAgQnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzNjcxMSkKKysr
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTMzMjAsMTEgKzMzMjAs
OSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHU3BvdExpZ2h0U291cmNlLmgKIAogd2ViY29yZWd0a19zb3VyY2VzICs9IFwKLQlXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9jYWlyby9SZW5kZXJQYXRoQ2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3N2Zy9n
cmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlckNhaXJvLmNwcCBcCiAJV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcCBcCiAJV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwIFwKLQlXZWJD
b3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclNvbGlkQ2Fpcm8uY3BwIFwKIAlX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdSZXNvdXJjZUNsaXBwZXJDYWlyby5jcHAgXAog
CVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1Jlc291cmNlRmlsdGVyQ2Fpcm8uY3BwIFwK
IAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdSZXNvdXJjZU1hc2tlckNhaXJvLmNwcApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
cHJvCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29w
eSkKQEAgLTE2NDgsMTMgKzE2NDgsMTEgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0x
KSB7CiAgICAgICAgIHJlbmRlcmluZy9TVkdSb290SW5saW5lQm94LmNwcAogCiBTT1VSQ0VTICs9
IFwKLSAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1JlbmRlclBhdGhRdC5jcHAgXAogICAgICAgICBz
dmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmNwcCBcCiAgICAgICAgIHN2
Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXQuY3BwIFwKICAgICAg
ICAgc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyUGF0dGVyblF0LmNwcCBcCiAgICAgICAg
IHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclF0LmNwcCBcCiAgICAgICAgIHN2Zy9ncmFw
aGljcy9xdC9TVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXQuY3BwIFwKLSAgICAgICAgc3Zn
L2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHAgXAogICAgICAgICBzdmcvZ3Jh
cGhpY3MvcXQvU1ZHUmVzb3VyY2VDbGlwcGVyUXQuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNz
L3F0L1NWR1Jlc291cmNlRmlsdGVyUXQuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NW
R1Jlc291cmNlTWFza2VyUXQuY3BwCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTUwODgsNjYgKzE1MDg4LDYgQEAKIAkJCQkJTmFt
ZT0iY2ciDQogCQkJCQk+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3Zn
XGdyYXBoaWNzXGNnXENnU3VwcG9ydC5jcHAiDQotCQkJCQkJPg0KLQkJCQkJCTxGaWxlQ29uZmln
dXJhdGlvbg0KLQkJCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb3xXaW4zMiINCi0JCQkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJCT4NCi0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCS8+DQotCQkJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4NCi0JCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQkJTmFtZT0iUmVsZWFzZV9D
YWlyb3xXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJCT4N
Ci0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJ
CS8+DQotCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxG
aWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcY2dcQ2dTdXBwb3J0Lmgi
DQotCQkJCQkJPg0KLQkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCQlOYW1lPSJEZWJ1
Z19DYWlyb3xXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJ
CT4NCi0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJ
CQkJCQkvPg0KLQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQkJPEZpbGVDb25maWd1
cmF0aW9uDQotCQkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm98V2luMzIiDQotCQkJCQkJCUV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQotCQkJCQkJCQlO
YW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCQkJLz4NCi0JCQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHN2Z1xncmFwaGljc1xjZ1xSZW5kZXJQYXRoQ2cuY3BwIg0KLQkJCQkJCT4NCi0JCQkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm98V2luMzIiDQotCQkJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQot
CQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQkvPg0KLQkJCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+DQotCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJCU5hbWU9
IlJlbGVhc2VfQ2Fpcm98V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0K
LQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQotCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
Ig0KLQkJCQkJCQkvPg0KLQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8L0ZpbGU+
DQotCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGNnXFNW
R1BhaW50U2VydmVyQ2cuY3BwIg0KIAkJCQkJCT4NCiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24N
CkBAIC0xNTIwOCwyNiArMTUxNDgsNiBAQAogCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJ
CQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3Jh
cGhpY3NcY2dcU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcCINCi0JCQkJCQk+DQotCQkJCQkJPEZp
bGVDb25maWd1cmF0aW9uDQotCQkJCQkJCU5hbWU9IkRlYnVnX0NhaXJvfFdpbjMyIg0KLQkJCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCQkJPg0KLQkJCQkJCQk8VG9vbA0KLQkJ
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJLz4NCi0JCQkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPg0KLQkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCQlOYW1lPSJS
ZWxlYXNlX0NhaXJvfFdpbjMyIg0KLQkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0J
CQkJCQkJPg0KLQkJCQkJCQk8VG9vbA0KLQkJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIN
Ci0JCQkJCQkJLz4NCi0JCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPC9GaWxlPg0K
LQkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xjZ1xTVkdS
ZXNvdXJjZUNsaXBwZXJDZy5jcHAiDQogCQkJCQkJPg0KIAkJCQkJCTxGaWxlQ29uZmlndXJhdGlv
bg0KQEAgLTE1NTkyLDQyICsxNTUxMiw2IEBACiAJCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0K
IAkJCQkJPC9GaWxlPg0KIAkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xn
cmFwaGljc1xjYWlyb1xTVkdQYWludFNlcnZlclNvbGlkQ2Fpcm8uY3BwIg0KLQkJCQkJCT4NCi0J
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQot
CQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQkvPg0KLQkJCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+DQotCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJCU5hbWU9
IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJ
CQk+DQotCQkJCQkJCTxUb29sDQotCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJ
CQkJCQkvPg0KLQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQkJPEZpbGVDb25maWd1
cmF0aW9uDQotCQkJCQkJCU5hbWU9IkRlYnVnX0ludGVybmFsfFdpbjMyIg0KLQkJCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCQkJPg0KLQkJCQkJCQk8VG9vbA0KLQkJCQkJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJLz4NCi0JCQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPg0KLQkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCQlOYW1lPSJSZWxlYXNl
X1BHT3xXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJCT4N
Ci0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJ
CS8+DQotCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxG
aWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcY2Fpcm9cU1ZHUmVzb3Vy
Y2VDbGlwcGVyQ2Fpcm8uY3BwIg0KIAkJCQkJCT4NCiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24N
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMzY3MTEpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMzA3MSwxMyArMzA3MSw5IEBACiAJCUIyMzdDOEE4MEQzNDREMTEw
MDEzRjcwNyAvKiBTVkdGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjIzN0M4QTYwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmgg
Ki87IH07CiAJCUIyNDA1NTY1MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5zdGFu
Y2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjI0MDU1NjMwQjVCRTY0MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUludGVy
bmFsLmggKi87IH07CiAJCUIyNDA1NTY2MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50
SW5zdGFuY2VMaXN0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyNDA1NTY0MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5z
dGFuY2VMaXN0SW50ZXJuYWwuaCAqLzsgfTsKLQkJQjI1NTk5MkMwRDAwRDhCQTAwQkI4MjVDIC8q
IENnU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMjU1OTg5MDBEMDBEOEI4MDBCQjgyNUMgLyogQ2dTdXBwb3J0LmNwcCAqLzsgfTsKLQkJ
QjI1NTk5MkQwRDAwRDhCQTAwQkI4MjVDIC8qIENnU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTEwRDAwRDhCODAwQkI4MjVDIC8q
IENnU3VwcG9ydC5oICovOyB9OwotCQlCMjU1OTkyRTBEMDBEOEJBMDBCQjgyNUMgLyogUmVuZGVy
UGF0aENnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyNTU5ODkyMEQwMEQ4QjgwMEJCODI1QyAvKiBSZW5kZXJQYXRoQ2cuY3BwICovOyB9OwogCQlC
MjU1OTkyRjBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTg5MzBEMDBEOEI4MDBC
QjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAgKi87IH07CiAJCUIyNTU5OTMwMEQwMEQ4QkEw
MEJCODI1QyAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTQwRDAwRDhCODAwQkI4MjVDIC8q
IFNWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAgKi87IH07CiAJCUIyNTU5OTMxMEQwMEQ4QkEw
MEJCODI1QyAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTg5NTBEMDBEOEI4MDBCQjgyNUMgLyog
U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwICovOyB9OwotCQlCMjU1OTkzMjBEMDBEOEJBMDBC
QjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5ODk2MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQ
YWludFNlcnZlclNvbGlkQ2cuY3BwICovOyB9OwogCQlCMjU1OTkzMzBEMDBEOEJBMDBCQjgyNUMg
LyogU1ZHUmVzb3VyY2VDbGlwcGVyQ2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTcwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNl
Q2xpcHBlckNnLmNwcCAqLzsgfTsKIAkJQjI1NTk5MzUwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1Jl
c291cmNlRmlsdGVyQ2cubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjU1OTg5OTBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VGaWx0ZXJDZy5t
bSAqLzsgfTsKIAkJQjI1NTk5MzcwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFza2Vy
Q2cubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1
OTg5QjBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbSAqLzsgfTsKQEAg
LTc1NzQsMTMgKzc1NzAsOSBAQAogCQlCMjM3QzhBNjBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9u
dERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZvbnREYXRhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNDA1NTYzMEI1QkU2NDAwMDJBMjhDMCAv
KiBET01TVkdFbGVtZW50SW5zdGFuY2VJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NU1ZHRWxlbWVudEluc3RhbmNlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjI0MDU1NjQwQjVCRTY0MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1l
bnRJbnN0YW5jZUxpc3RJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUIyNTU5ODkwMEQwMEQ4QjgwMEJCODI1QyAvKiBDZ1N1cHBvcnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENnU3VwcG9ydC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5ODkxMEQwMEQ4QjgwMEJCODI1QyAvKiBDZ1N1
cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENnU3VwcG9ydC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OTg5MjBEMDBEOEI4MDBCQjgyNUMgLyog
UmVuZGVyUGF0aENnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJQYXRoQ2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjU1OTg5MzBE
MDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGFpbnRTZXJ2ZXJDZy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyNTU5ODk0MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZl
ckdyYWRpZW50Q2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNW
R1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyNTU5ODk1MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGFpbnRTZXJ2ZXJQYXR0
ZXJuQ2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OTg5NjBEMDBEOEI4
MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYWludFNlcnZlclNvbGlkQ2cuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCMjU1OTg5NzBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUmVzb3Vy
Y2VDbGlwcGVyQ2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNW
R1Jlc291cmNlQ2xpcHBlckNnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1
NTk4OTkwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlRmlsdGVyQ2cubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU1ZHUmVzb3VyY2VGaWx0ZXJDZy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OUIwRDAwRDhCODAwQkI4MjVDIC8q
IFNWR1Jlc291cmNlTWFza2VyQ2cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEyMjYwLDEzICsxMjI1Miw5IEBACiAJCUIyNTU5ODhGMEQwMEQ4QjgwMEJCODI1QyAv
KiBjZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQjI1
NTk4OTAwRDAwRDhCODAwQkI4MjVDIC8qIENnU3VwcG9ydC5jcHAgKi8sCi0JCQkJQjI1NTk4OTEw
RDAwRDhCODAwQkI4MjVDIC8qIENnU3VwcG9ydC5oICovLAotCQkJCUIyNTU5ODkyMEQwMEQ4Qjgw
MEJCODI1QyAvKiBSZW5kZXJQYXRoQ2cuY3BwICovLAogCQkJCUIyNTU5ODkzMEQwMEQ4QjgwMEJC
ODI1QyAvKiBTVkdQYWludFNlcnZlckNnLmNwcCAqLywKIAkJCQlCMjU1OTg5NDBEMDBEOEI4MDBC
QjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcCAqLywKIAkJCQlCMjU1OTg5NTBE
MDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwICovLAotCQkJCUIy
NTU5ODk2MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclNvbGlkQ2cuY3BwICovLAog
CQkJCUIyNTU5ODk3MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdSZXNvdXJjZUNsaXBwZXJDZy5jcHAg
Ki8sCiAJCQkJQjI1NTk4OTkwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlRmlsdGVyQ2cu
bW0gKi8sCiAJCQkJQjI1NTk4OUIwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFza2Vy
Q2cubW0gKi8sCkBAIC0xMzg0NCw3ICsxMzgzMiw2IEBACiAJCQkJOTNFRUMyMDQwOUMyODc3NzAw
QzUxNUQxIC8qIENhbnZhc1BhdHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRUVDMjAwMDlD
Mjg3NzcwMEM1MTVEMSAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzRUVDMjAxMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNTdHlsZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQjI1NTk5MkQwRDAwRDhCQTAwQkI4MjVDIC8qIENnU3VwcG9ydC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTE0MTg1RUUwQ0Q2NUYwNDAwNzYzQzk5IC8qIENoYW5nZVZlcnNpb25X
cmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjZBMDA5OURGMDI3MDA5MEQ3ODEgLyog
Q2hhcmFjdGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBMjYwRDAwNkMxRDAwRUY2
RjI2IC8qIENoYXJhY3Rlck5hbWVzLmggaW4gSGVhZGVycyAqLywKQEAgLTE2MTQ4LDcgKzE2MTM1
LDYgQEAKIAkJCQk5M0VFQzI2RjA5QzMyMTgwMDBDNTE1RDEgLyogQ2FudmFzUGF0dGVybi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5M0VFQzFGRjA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRUVDMjcxMDlDMzIxODgw
MEM1MTVEMSAvKiBDYW52YXNTdHlsZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjU1OTkyQzBE
MDBEOEJBMDBCQjgyNUMgLyogQ2dTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNDE4
NUVGMENENjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk2NTUwQjY5RjA5OURGMDI3MDA5MEQ3ODEgLyogQ2hhcmFjdGVyRGF0YS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzI2REMwQzA5REFENUQ2MDBBRkM4NDcgLyogQ2hhcnNldERh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNzA0Niw3ICsxNzAzMiw2IEBACiAJCQkJQTg3MURF
RDAwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlclBhcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTg3MURFRDYwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlclBhcnRPYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODUzQ0E5RjAwQUVFQzY1NzAwMjM3MkRDIC8qIFJlbmRlclBhdGguY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQjI1NTk5MkUwRDAwRDhCQTAwQkI4MjVDIC8qIFJlbmRlclBhdGhD
Zy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODcxREZFMjBBMTUzNzZCMDBCMTJBNjggLyogUmVu
ZGVyUmVwbGFjZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczNTJDMTkwQjFCQjg5RDAwQTk4
NkQwIC8qIFJlbmRlclNWR0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1M0NBOUQ2MEFF
RUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0xNzIwNCw3ICsxNzE4OSw2IEBACiAJCQkJQjI1NTk5MzEwRDAwRDhCQTAwQkI4MjVDIC8qIFNW
R1BhaW50U2VydmVyUGF0dGVybkNnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNTU5OUFFMEQw
MEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUIyNTU5OUIwMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclNv
bGlkLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNTU5OTMyMEQwMEQ4QkEwMEJCODI1QyAvKiBT
VkdQYWludFNlcnZlclNvbGlkQ2cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBNTYwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR1BhcnNlclV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCMjIyN0E1ODBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0aEVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjIyMjdBNUQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWdBcmMuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRy
YW5zZm9ybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BZmZp
bmVUcmFuc2Zvcm0uY3BwCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQWZmaW5lVHJhbnNmb3JtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDYgKzEzNSwx
NCBAQCBBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6c2tld1koCiAgICAgcmV0dXJu
IHNoZWFyKDAuMGYsIHRhbihkZWcycmFkKGFuZ2xlKSkpOwogfQogCitBZmZpbmVUcmFuc2Zvcm0m
IG1ha2VNYXBCZXR3ZWVuUmVjdHMoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdCkKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOworICAgIHRyYW5z
Zm9ybS50cmFuc2xhdGUoZGVzdC54KCkgLSBzb3VyY2UueCgpLCBkZXN0LnkoKSAtIHNvdXJjZS55
KCkpOworICAgIHRyYW5zZm9ybS5zY2FsZShkZXN0LndpZHRoKCkvc291cmNlLndpZHRoKCksIGRl
c3QuaGVpZ2h0KCkvc291cmNlLmhlaWdodCgpKTsKKyAgICByZXR1cm4gdHJhbnNmb3JtOworfQor
CiBJbnRQb2ludCBBZmZpbmVUcmFuc2Zvcm06Om1hcFBvaW50KGNvbnN0IEludFBvaW50JiBwb2lu
dCkgY29uc3QKIHsKICAgICBkb3VibGUgeDIsIHkyOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9BZmZpbmVUcmFuc2Zvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5oCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
Myw2ICsxMjMsOCBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCisgICAgQWZmaW5lVHJhbnNmb3Jt
JiBtYWtlTWFwQmV0d2VlblJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3QpCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEFmZmlu
ZVRyYW5zZm9ybV9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgJKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsMTIgQEAgdHlwZWRl
ZiB1bnNpZ25lZCBjaGFyIFVJbnQ4OwogI2VuZGlmCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENH
KQordHlwZWRlZiBWZWN0b3I8Q0dGbG9hdD4gRGFzaEFycmF5OworI2Vsc2UKK3R5cGVkZWYgVmVj
dG9yPGZsb2F0PiBEYXNoQXJyYXk7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFFUKSAmJiBkZWZp
bmVkKFFfV1NfV0lOKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbmRpZgpAQCAtMjMxLDYgKzIz
Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgSW50UmVjdCBmb2N1c1JpbmdCb3Vu
ZGluZ1JlY3QoKTsKIAogICAgICAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCk7CisgICAgICAg
IHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCk7CiAg
ICAgICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pOwogICAgICAgICB2b2lkIHNldE1pdGVy
TGltaXQoZmxvYXQpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkocmV2aXNpb24g
MzY3MTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkod29ya2luZyBjb3B5
KQpAQCAtODcsNiArODcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBhdGgmIG9w
ZXJhdG9yPShjb25zdCBQYXRoJik7CiAKICAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBGbG9h
dFBvaW50JiwgV2luZFJ1bGUgcnVsZSA9IFJVTEVfTk9OWkVSTykgY29uc3Q7CisgICAgICAgIGJv
b2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgICAgICBGbG9h
dFJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICBmbG9hdCBsZW5n
dGgoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0
ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvT3duQXJy
YXlQdHIuaD4KIAogI2lmIFBMQVRGT1JNKEdUSykKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CkBAIC04
MDcsNiArODA4LDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAK
ICAgICBjYWlyb19zZXRfbGluZV9jYXAobV9kYXRhLT5jciwgY2Fpcm9DYXApOwogfQogCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZs
b2F0IGRhc2hPZmZzZXQpCit7CisgICAgT3duQXJyYXlQdHI8ZG91YmxlPiBkc2gobmV3IGRvdWJs
ZVtkYXNoZXMuc2l6ZSgpXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6
ZSgpOyBpKyspCisgICAgICAgIGRzaFtpXSA9IGRhc2hlc1tpXTsKKyAgICBjYWlyb19zZXRfZGFz
aChtX2RhdGEtPmNyLCBkc2guZ2V0KCksIGRhc2hlcy5zaXplKCksIGRhc2hPZmZzZXQpOworfQor
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAJKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDEsNiArMjAxLDE2IEBAIGJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG8KICAgICByZXR1cm4gY29udGFpbnM7CiB9CiAKK2Jvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgaWYgKCFib3VuZGluZ1JlY3Qo
KS5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNhaXJvX3Qq
IGNyID0gcGxhdGZvcm1QYXRoKCktPm1fY3I7CisgICAgYm9vbCBjb250YWlucyA9IGNhaXJvX2lu
X3N0cm9rZShjciwgcG9pbnQueCgpLCBwb2ludC55KCkpOworICAgIHJldHVybiBjb250YWluczsK
K30KKwogdm9pZCBQYXRoOjphcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1bmN0aW9uIGZ1
bmN0aW9uKSBjb25zdAogewogICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1QYXRoKCktPm1fY3I7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmNwcAkocmV2aXNpb24gMzY3MTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzE4LDYgKzcxOCwx
MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwCiAgICAgfQogfQog
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNo
ZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit7CisgICAgQ0dDb250ZXh0U2V0TGluZURhc2gocGxhdGZv
cm1Db250ZXh0KCksIGRhc2hPZmZzZXQsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCkpOwor
fQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKIHsK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtNzM0LDcgKzczOSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm8KICAgICAgICAgICAgIGJyZWFrOwogICAg
IH0KIH0KLSAKKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGF0aCgpCiB7CiAgICAgQ0dD
b250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAJKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5
LDE4IEBAIGJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCAmcG8KICAgICByZXR1
cm4gcmV0OwogfQogCitib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50KSBjb25zdAoreworICAgIGlmICghYm91bmRpbmdSZWN0KCkuY29udGFpbnMocG9pbnQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDR1BhdGhDb250YWluc1BvaW50IHJl
dHVybnMgZmFsc2UgZm9yIG5vbi1jbG9zZWQgcGF0aHMsIGFzIGEgd29yay1hcm91bmQsIHdlIGNv
cHkgYW5kIGNsb3NlIHRoZSBwYXRoIGZpcnN0LiAgUmFkYXIgNDc1ODk5OCBhc2tzIGZvciBhIGJl
dHRlciBDRyBBUEkgdG8gdXNlCisgICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0gY29weUNHUGF0
aENsb3NpbmdTdWJwYXRocyhtX3BhdGgpOworICAgIGJvb2wgcmV0ID0gQ0dQYXRoQ29udGFpbnNQ
b2ludChwYXRoLCAwLCBwb2ludCwga0NHUGF0aFN0cm9rZSk7CisgICAgQ0dQYXRoUmVsZWFzZShw
YXRoKTsKKyAgICByZXR1cm4gcmV0OworfQorCiB2b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBG
bG9hdFNpemUmIHNpemUpCiB7CiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNsYXRpb24gPSBD
R0FmZmluZVRyYW5zZm9ybU1ha2UoMSwgMCwgMCwgMSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwyNCAr
MzksMjUgQEAKICNlbmRpZgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVk
ZSAiUGF0aC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJDb2xvci5oIgorI2lu
Y2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNs
dWRlICJGb250LmgiCisjaW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNp
bmNsdWRlICJQZW4uaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCi0jaW5jbHVkZSA8
UVN0YWNrPgorI2luY2x1ZGUgPFFEZWJ1Zz4KICNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpbmNsdWRl
IDxRUG9seWdvbkY+Ci0jaW5jbHVkZSA8UVBhaW50ZXJQYXRoPgogI2luY2x1ZGUgPFFQYWludERl
dmljZT4KLSNpbmNsdWRlIDxRUGl4bWFwPgogI2luY2x1ZGUgPFFQYWludEVuZ2luZT4KLSNpbmNs
dWRlIDxRRGVidWc+CisjaW5jbHVkZSA8UVBhaW50ZXJQYXRoPgorI2luY2x1ZGUgPFFQaXhtYXA+
CisjaW5jbHVkZSA8UVBvbHlnb25GPgorI2luY2x1ZGUgPFFTdGFjaz4KKyNpbmNsdWRlIDxRVmVj
dG9yPgogCiAjaWZuZGVmIE1fUEkKICNkZWZpbmUgTV9QSSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2
CkBAIC03ODQsNiArNzg1LDI0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExp
bmVDYXAKICAgICBwLT5zZXRQZW4oblBlbik7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3sK
KyAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOworICAgIFFQZW4gcGVuID0gcC0+cGVuKCk7
CisgICAgdW5zaWduZWQgaW50IGRhc2hMZW5ndGggPSAhZGFzaGVzLmlzRW1wdHkoKSA/IGRhc2hl
cy5zaXplKCkgOiAwOworICAgIGlmKGRhc2hMZW5ndGgpIHsKKyAgICAgICAgUVZlY3RvcjxxcmVh
bD4gcGF0dGVybjsKKyAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gKGRhc2hMZW5ndGggJSAy
KSA9PSAwID8gZGFzaExlbmd0aCA6IGRhc2hMZW5ndGggKiAyOworCisgICAgICAgIGZvcih1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgcGF0dGVybi5hcHBl
bmQoZGFzaGVzW2kgJSBkYXNoTGVuZ3RoXSAvIChmbG9hdClwZW4ud2lkdGhGKCkpOworCisgICAg
ICAgIHBlbi5zZXREYXNoUGF0dGVybihwYXR0ZXJuKTsKKyAgICAgICAgcGVuLnNldERhc2hPZmZz
ZXQoZGFzaE9mZnNldCk7CisgICAgfQorICAgIHAtPnNldFBlbihwZW4pOworfQorCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGopCiB7CiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0aFF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdGhRdC5j
cHAJKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXRo
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3NywxMSBAQCBib29sIFBhdGg6OmNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvCiAgICAgcmV0dXJuIGNvbnRhaW5zOwogfQogCitib29s
IFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorewor
ICAgIHJldHVybiBtX3BhdGgtPmNvbnRhaW5zKHBvaW50KTsKK30KKwogdm9pZCBQYXRoOjp0cmFu
c2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIFFNYXRyaXggbWF0cml4OwpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAJKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAK
IAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxl
cy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIlNWR1BhaW50
U2VydmVyLmgiCkBAIC04Myw2ICs4NCwyNyBAQCBib29sIFJlbmRlclBhdGg6OmZpbGxDb250YWlu
cyhjb25zdCBGbG9hCiAgICAgcmV0dXJuIG1fcGF0aC5jb250YWlucyhwb2ludCwgc3R5bGUoKS0+
c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSk7CiB9CiAKK2Jvb2wgUmVuZGVyUGF0aDo6c3Ryb2tlQ29u
dGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNTdHJva2UpIGNvbnN0
Cit7CisgICAgaWYgKG1fcGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChyZXF1aXJlc1N0cm9rZSAmJiAhU1ZHUGFpbnRTZXJ2ZXI6OnN0cm9rZVBhaW50U2Vy
dmVyKHN0eWxlKCksIHRoaXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvL0dyYXBo
aWNzQ29udGV4dCogc2NyYXRjaCA9IHNjcmF0Y2hDb250ZXh0KCk7CisgICAgc3RkOjphdXRvX3B0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMSwgMSks
IGZhbHNlKTsKKyAgICBHcmFwaGljc0NvbnRleHQqIHNjcmF0Y2ggPSBpbWFnZS0+Y29udGV4dCgp
OworICAgIHNjcmF0Y2gtPnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOworICAgIHNjcmF0Y2gt
PnNldFN0cm9rZUNvbG9yKENvbG9yOjpibGFjayk7CisgICAgc2NyYXRjaC0+c2F2ZSgpOworICAg
IGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoc2NyYXRjaCwgc3R5bGUoKSwgdGhpcyk7CisgICAg
Ym9vbCBjb250YWlucyA9IG1fcGF0aC5zdHJva2VDb250YWlucyhwb2ludCk7CisgICAgc2NyYXRj
aC0+cmVzdG9yZSgpOworCisgICAgcmV0dXJuIGNvbnRhaW5zOworfQorCiBGbG9hdFJlY3QgUmVu
ZGVyUGF0aDo6cmVsYXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0cm9rZSkgY29uc3QKIHsKICAgICBp
ZiAobV9wYXRoLmlzRW1wdHkoKSkKQEAgLTEwMSw2ICsxMjMsMTQgQEAgRmxvYXRSZWN0IFJlbmRl
clBhdGg6OnJlbGF0aXZlQkJveChib29sIAogICAgIHJldHVybiBtX2ZpbGxCQm94OwogfQogCitG
bG9hdFJlY3QgUmVuZGVyUGF0aDo6c3Ryb2tlQkJveCgpIGNvbnN0Cit7CisgICAgaWYgKHN0eWxl
KCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpKQorICAgICAgICByZXR1cm4gc3Ryb2tlQm91bmRp
bmdCb3gobV9wYXRoLCBzdHlsZSgpLCB0aGlzKTsKKworICAgIHJldHVybiBtX3BhdGguYm91bmRp
bmdSZWN0KCk7Cit9CisKIHZvaWQgUmVuZGVyUGF0aDo6c2V0UGF0aChjb25zdCBQYXRoJiBuZXdQ
YXRoKQogewogICAgIG1fcGF0aCA9IG5ld1BhdGg7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdQYWludFNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
U1ZHUGFpbnRTZXJ2ZXIuY3BwCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR1BhaW50U2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CiAgKiAgICAgICAgICAgICAgIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAq
ICAgICAgICAgICAgICAgMjAwOCBEaXJrIFNjaHVsemUgPHZiczg1QGdteC5kZT4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMTEgKzMwLDIzIEBACiAjaWYgRU5BQkxFKFNW
RykKICNpbmNsdWRlICJTVkdQYWludFNlcnZlci5oIgogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
KyNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNs
dWRlICJTVkdQYWludFNlcnZlclNvbGlkLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5o
IgogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0
ci5oPgorI2lmIFBMQVRGT1JNKENBSVJPKQorICAgICNpbmNsdWRlIDxjYWlyby5oPgorI2VsaWYg
UExBVEZPUk0oUVQpCisgICAgI2luY2x1ZGUgPFFQYWludGVyPgorICAgICNpbmNsdWRlIDxRUGl4
bWFwPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTQ0LDYgKzE1NywzMyBA
QCBTVkdQYWludFNlcnZlciogU1ZHUGFpbnRTZXJ2ZXI6OnN0cm9rZVBhCiAgICAgcmV0dXJuIHN0
cm9rZVBhaW50U2VydmVyOwogfQogCit2b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlck9i
amVjdCogb2JqZWN0KQoreworICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhTVkdSZW5k
ZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+
c3Ryb2tlV2lkdGgoKSwgMS4wZikpOworICAgIGNvbnRleHQtPnNldExpbmVDYXAoc3R5bGUtPnN2
Z1N0eWxlKCktPmNhcFN0eWxlKCkpOworICAgIGNvbnRleHQtPnNldExpbmVKb2luKHN0eWxlLT5z
dmdTdHlsZSgpLT5qb2luU3R5bGUoKSk7CisgICAgaWYgKHN0eWxlLT5zdmdTdHlsZSgpLT5qb2lu
U3R5bGUoKSA9PSBNaXRlckpvaW4pCisgICAgICAgIGNvbnRleHQtPnNldE1pdGVyTGltaXQoc3R5
bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGltaXQoKSk7CisKKyAgICBjb25zdCBEYXNoQXJy
YXkmIGRhc2hlcyA9IGRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShvYmplY3QtPnN0eWxlKCkp
OworICAgIGZsb2F0IGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9M
ZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjBm
KTsKKyAgICBjb250ZXh0LT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hPZmZzZXQpOworfQorCitG
bG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goY29uc3QgUGF0aCYgcGF0aCwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBzdGQ6OmF1dG9fcHRy
PEltYWdlQnVmZmVyPiBpbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxLCAxKSwg
ZmFsc2UpOworICAgIEdyYXBoaWNzQ29udGV4dCogc2NyYXRjaCA9IGltYWdlLT5jb250ZXh0KCk7
CisgICAgc2NyYXRjaC0+c2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7CisgICAgc2NyYXRjaC0+
c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrKTsKKyAgICBzY3JhdGNoLT5zYXZlKCk7CisgICAg
YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChzY3JhdGNoLCBzdHlsZSwgb2JqZWN0KTsKKyAgICBG
bG9hdFJlY3QgYmJveCA9IHBhdGguYm91bmRpbmdSZWN0KCk7CisgICAgc2NyYXRjaC0+cmVzdG9y
ZSgpOworCisgICAgcmV0dXJuIGJib3g7Cit9CisKIERhc2hBcnJheSBkYXNoQXJyYXlGcm9tUmVu
ZGVyaW5nU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIERhc2hBcnJheSBh
cnJheTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaAkocmV2aXNpb24g
MzY3MTEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCwxMyArMzQsNiBAQAogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMv
QXBwbGljYXRpb25TZXJ2aWNlcy5oPgogI2VuZGlmCiAKLSNpZiBQTEFURk9STShRVCkKLSNpbmNs
dWRlIDxxZ2xvYmFsLmg+Ci1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFQZW47Ci1RVF9FTkRf
TkFNRVNQQUNFCi0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKENHKQogICAgIHR5cGVkZWYgVmVjdG9y
PENHRmxvYXQ+IERhc2hBcnJheTsKICNlbHNlCkBAIC02Myw3ICs1NiwxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlID0gMgogICAgIH07CiAK
KyAgICBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0Owor
ICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBQYXRoOwogICAgIGNsYXNzIFJlbmRlck9i
amVjdDsKICAgICBjbGFzcyBSZW5kZXJTdHlsZTsKICAgICBjbGFzcyBTVkdQYWludFNlcnZlclNv
bGlkOwpAQCAtOTYsMTMgKzkyLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9p
ZCBjbGlwVG9GaWxsUGF0aChDR0NvbnRleHRSZWYsIGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0
OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShRVCkKLSAgICAgICAgdm9pZCBzZXRQZW5Qcm9wZXJ0
aWVzKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiwgUVBlbiYpIGNvbnN0
OwotI2VuZGlmCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBTVkdQYWludFNlcnZlcigpOyAgICAg
ICAgCiAgICAgfTsKIAorICAgIHZvaWQgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGlj
c0NvbnRleHQqLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlck9iamVjdCopOworICAgIEZsb2F0
UmVjdCBzdHJva2VCb3VuZGluZ0JveChjb25zdCBQYXRoJiwgUmVuZGVyU3R5bGUqLCBjb25zdCBS
ZW5kZXJPYmplY3QqKTsKKwogICAgIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYs
IGNvbnN0IFNWR1BhaW50U2VydmVyJik7CiAKICAgICBTVkdQYWludFNlcnZlciogZ2V0UGFpbnRT
ZXJ2ZXJCeUlkKERvY3VtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJik7CkluZGV4OiBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNvbGlkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNvbGlkLmNwcAkocmV2aXNpb24gMzY3MTEp
CisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNvbGlkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
RGlyayBTY2h1bHplIDx2YnM4NUBnbXguZGU+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI5LDYgKzMwLDExIEBACiAjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oIgog
I2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKIAorI2luY2x1ZGUgIkNvbG9yLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIK
KyNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHUGFp
bnRTZXJ2ZXJTb2xpZDo6U1ZHUGFpbnRTZXJ2ZXJTb2xpZCgpCkBAIC01Niw2ICs2Miw1MyBAQCBU
ZXh0U3RyZWFtJiBTVkdQYWludFNlcnZlclNvbGlkOjpleHRlcm5hCiAgICAgcmV0dXJuIHRzOwog
fQogCit2b2lkIFNWR1BhaW50U2VydmVyU29saWQ6OnJlbmRlclBhdGgoR3JhcGhpY3NDb250ZXh0
KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXRoLCBTVkdQYWludFRhcmdldFR5cGUg
dHlwZSkgY29uc3QKK3sKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUgPSBwYXRoLT5z
dHlsZSgpLT5zdmdTdHlsZSgpOworCisgICAgY29udGV4dC0+c2V0RmlsbFJ1bGUoc3R5bGUtPmZp
bGxSdWxlKCkpOworCisgICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBz
dHlsZS0+aGFzRmlsbCgpKQorICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgpOworCisgICAgaWYg
KCh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmIHN0eWxlLT5oYXNTdHJva2UoKSkK
KyAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgpOworfQorCitib29sIFNWR1BhaW50U2VydmVy
U29saWQ6OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkg
Y29uc3QKK3sKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QgPyBvYmplY3QtPnN0eWxl
KCkgOiAwOworCisgICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiAoIXN0
eWxlIHx8IHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpKSB7CisgICAgICAgIFJHQkEzMiBy
Z2JhID0gY29sb3IoKS5yZ2IoKTsKKyAgICAgICAgQVNTRVJUKCFjb2xvcigpLmhhc0FscGhhKCkp
OworICAgICAgICBpZiAoc3R5bGUpCisgICAgICAgICAgICByZ2JhID0gY29sb3JXaXRoT3ZlcnJp
ZGVBbHBoYShyZ2JhLCBzdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbE9wYWNpdHkoKSk7CisKKyAgICAg
ICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHJnYmEpOworCisgICAgICAgIGlmIChpc1BhaW50aW5n
VGV4dCkKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShjVGV4dEZpbGwp
OworICAgIH0KKworICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiAo
IXN0eWxlIHx8IHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkpIHsKKyAgICAgICAgUkdC
QTMyIHJnYmEgPSBjb2xvcigpLnJnYigpOworICAgICAgICBBU1NFUlQoIWNvbG9yKCkuaGFzQWxw
aGEoKSk7CisgICAgICAgIGlmIChzdHlsZSkKKyAgICAgICAgICAgIHJnYmEgPSBjb2xvcldpdGhP
dmVycmlkZUFscGhhKHJnYmEsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VPcGFjaXR5KCkpOwor
CisgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHJnYmEpOworCisgICAgICAgIGlmIChz
dHlsZSkKKyAgICAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5
bGUsIG9iamVjdCk7CisKKyAgICAgICAgaWYgKGlzUGFpbnRpbmdUZXh0KQorICAgICAgICAgICAg
Y29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKGNUZXh0U3Ryb2tlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyU29saWQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNvbGlkLmgJKHJldmlzaW9uIDM2
NzExKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBj
b25zdDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoR3JhcGhpY3NDb250ZXh0KiYsIGNv
bnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4
dCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEdyYXBoaWNzQ29udGV4
dComLCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0OwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgU1ZHUGFpbnRTZXJ2ZXJTb2xpZCgpOwpJbmRleDogV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHUmVzb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdSZXNvdXJjZS5oCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR1Jlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDEwIEBACiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCisj
aWYgUExBVEZPUk0oQ0cpCisjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlv
blNlcnZpY2VzLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3Mg
QXRvbWljU3RyaW5nOyAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1JlbmRlclBh
dGhDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vUmVu
ZGVyUGF0aENhaXJvLmNwcAkocmV2aXNpb24gMzY3MTEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9jYWlyby9SZW5kZXJQYXRoQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKLQotI2luY2x1ZGUg
IkNhaXJvUGF0aC5oIgotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotYm9vbCBSZW5kZXJQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkgY29uc3QKLXsKLSAgICBpZiAocmVxdWly
ZXNTdHJva2UgJiYgIVNWR1BhaW50U2VydmVyOjpzdHJva2VQYWludFNlcnZlcihzdHlsZSgpLCB0
aGlzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2Fpcm9fdCogY3IgPSBwYXRoKCku
cGxhdGZvcm1QYXRoKCktPm1fY3I7Ci0KLSAgICAvLyBUT0RPOiBzZXQgc3Ryb2tlIHByb3BlcnRp
ZXMKLSAgICByZXR1cm4gY2Fpcm9faW5fc3Ryb2tlKGNyLCBwb2ludC54KCksIHBvaW50LnkoKSk7
Ci19Ci0KLUZsb2F0UmVjdCBSZW5kZXJQYXRoOjpzdHJva2VCQm94KCkgY29uc3QKLXsKLSAgICAv
LyBUT0RPOiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIG5haXZlCi0KLSAgICBjYWlyb190KiBjciA9
IHBhdGgoKS5wbGF0Zm9ybVBhdGgoKS0+bV9jcjsKLQotICAgIGRvdWJsZSB4MCwgeDEsIHkwLCB5
MTsKLSAgICBjYWlyb19zdHJva2VfZXh0ZW50cyhjciwgJngwLCAmeTAsICZ4MSwgJnkxKTsKLSAg
ICBGbG9hdFJlY3QgYmJveCA9IEZsb2F0UmVjdCh4MCwgeTAsIHgxIC0geDAsIHkxIC0geTApOwot
Ci0gICAgcmV0dXJuIGJib3g7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Nh
aXJvL1NWR1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcAkocmV2
aXNpb24gMzY3MTEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZl
ckdyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwyNSArMzQsNiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFRPRE86IFNoYXJlIHRoaXMgY29kZSB3aXRoIGFsbCBT
VkdQYWludFNlcnZlcnMKLXN0YXRpYyB2b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCk7Ci0KLSAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoU1ZHUmVu
ZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN0cm9rZVdpZHRo
KCksIDEuMCkpOwotICAgIGNvbnRleHQtPnNldExpbmVDYXAoc3R5bGUtPmNhcFN0eWxlKCkpOwot
ICAgIGNvbnRleHQtPnNldExpbmVKb2luKHN0eWxlLT5qb2luU3R5bGUoKSk7Ci0gICAgaWYgKHN0
eWxlLT5qb2luU3R5bGUoKSA9PSBNaXRlckpvaW4pCi0gICAgICAgIGNvbnRleHQtPnNldE1pdGVy
TGltaXQoc3R5bGUtPnN0cm9rZU1pdGVyTGltaXQoKSk7Ci0KLSAgICBjb25zdCBEYXNoQXJyYXkm
IGRhc2hlcyA9IGRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShvYmplY3QtPnN0eWxlKCkpOwot
ICAgIE93bkFycmF5UHRyPGRvdWJsZT4gZHNoKG5ldyBkb3VibGVbZGFzaGVzLnNpemUoKV0pOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IGRhc2hlcy5zaXplKCkgOyBpKyspCi0gICAgICAg
IGRzaFtpXSA9IGRhc2hlc1tpXTsKLSAgICBkb3VibGUgZGFzaE9mZnNldCA9IFNWR1JlbmRlclN0
eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdHJva2VEYXNoT2Zmc2V0
KCksIDAuMCk7Ci0gICAgY2Fpcm9fc2V0X2Rhc2goY3IsIGRzaC5nZXQoKSwgZGFzaGVzLnNpemUo
KSwgZGFzaE9mZnNldCk7Ci19Ci0KIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAo
R3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNW
R1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAogewogICAg
IG1fb3duZXJFbGVtZW50LT5idWlsZEdyYWRpZW50KCk7CkBAIC02Myw3ICs0NCw3IEBAIGJvb2wg
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGgKICAgICBjYWlyb19tYXRyaXhfdCBt
YXRyaXg7CiAgICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkgKCZtYXRyaXgpOwogICAgIGNv
bnN0IGNhaXJvX21hdHJpeF90IGdyYWRpZW50X21hdHJpeCA9IGdyYWRpZW50VHJhbnNmb3JtKCk7
Ci0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpLT5zdmdT
dHlsZSgpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKIAogICAg
IGlmICh0aGlzLT50eXBlKCkgPT0gTGluZWFyR3JhZGllbnRQYWludFNlcnZlcikgewogICAgICAg
ICBjb25zdCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50KiBsaW5lYXIgPSBzdGF0aWNfY2Fz
dDxjb25zdCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Kj4odGhpcyk7CkBAIC0xNjEsMTAg
KzE0MiwxMCBAQCBib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoCiAgICAg
ICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShwYXR0ZXJuLCBvZmZzZXQsIGNv
bG9yLnJlZCgpIC8gMjU1LjAsIGNvbG9yLmdyZWVuKCkgLyAyNTUuMCwgY29sb3IuYmx1ZSgpIC8g
MjU1LjAsIGNvbG9yLmFscGhhKCkgLyAyNTUuMCk7CiAgICAgfQogCi0gICAgaWYgKCh0eXBlICYg
QXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFzRmlsbCgpKQotICAgICAgICBjYWly
b19zZXRfZmlsbF9ydWxlKGNyLCBzdHlsZS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQgPyBD
QUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVfV0lORElORyk7CisgICAg
aWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+
aGFzRmlsbCgpKQorICAgICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBzdHlsZS0+c3ZnU3R5
bGUoKS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9P
REQgOiBDQUlST19GSUxMX1JVTEVfV0lORElORyk7CiAKLSAgICBpZiAoKHR5cGUgJiBBcHBseVRv
U3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhhc1N0cm9rZSgpKQorICAgIGlmICgodHlwZSAm
IEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tl
KCkpCiAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9i
amVjdCk7CiAKICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsKSW5kZXg6IFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclBhdHRl
cm5DYWlyby5jcHAJKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fp
cm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywz
MiArMzMsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBUT0RPOiBTaGFyZSB0aGlz
IGNvZGUgd2l0aCBhbGwgU1ZHUGFpbnRTZXJ2ZXJzCi1zdGF0aWMgdm9pZCBhcHBseVN0cm9rZVN0
eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU1ZHUmVuZGVyU3R5
bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBjYWlyb190KiBj
ciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgY29udGV4dC0+c2V0U3Ryb2tl
VGhpY2tuZXNzKFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0
eWxlLT5zdHJva2VXaWR0aCgpLCAxLjApKTsKLSAgICBjb250ZXh0LT5zZXRMaW5lQ2FwKHN0eWxl
LT5jYXBTdHlsZSgpKTsKLSAgICBjb250ZXh0LT5zZXRMaW5lSm9pbihzdHlsZS0+am9pblN0eWxl
KCkpOwotICAgIGlmIChzdHlsZS0+am9pblN0eWxlKCkgPT0gTWl0ZXJKb2luKQotICAgICAgICBj
b250ZXh0LT5zZXRNaXRlckxpbWl0KHN0eWxlLT5zdHJva2VNaXRlckxpbWl0KCkpOwotCi0gICAg
Y29uc3QgRGFzaEFycmF5JiBkYXNoZXMgPSBkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUob2Jq
ZWN0LT5zdHlsZSgpKTsKLSAgICBPd25BcnJheVB0cjxkb3VibGU+IGRzaChuZXcgZG91YmxlW2Rh
c2hlcy5zaXplKCldKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5zaXplKCkg
OyBpKyspCi0gICAgICAgIGRzaFtpXSA9IGRhc2hlc1tpXTsKLSAgICBkb3VibGUgZGFzaE9mZnNl
dCA9IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5z
dHJva2VEYXNoT2Zmc2V0KCksIDAuMCk7Ci0gICAgY2Fpcm9fc2V0X2Rhc2goY3IsIGRzaC5nZXQo
KSwgZGFzaGVzLnNpemUoKSwgZGFzaE9mZnNldCk7Ci19Ci0KIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJQ
YXR0ZXJuOjpzZXR1cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQp
IGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0IHRhcmdldFJlY3QgPSBvYmplY3QtPnJlbGF0aXZlQkJv
eChmYWxzZSk7CiAKLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0
eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHls
ZSgpOwogCi0gICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0
aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3Ryb2tlV2lkdGgoKSwgMS4wKTsKKyAgICBmbG9h
dCBzdHJva2VXaWR0aCA9IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmpl
Y3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjApOwogCiAgICAgaWYgKHRh
cmdldFJlY3Qud2lkdGgoKSA9PSAwKQogICAgICAgICB0YXJnZXRSZWN0ID0gRmxvYXRSZWN0KHRh
cmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgc3Ryb2tlV2lkdGgsIHRhcmdldFJlY3QuaGVp
Z2h0KCkpOwpAQCAtODMsMTAgKzY0LDEwIEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpz
ZXR1cChHcmFwaGkKICAgICBjYWlyb19tYXRyaXhfaW52ZXJ0KCZtYXRyaXgpOwogICAgIGNhaXJv
X3BhdHRlcm5fc2V0X21hdHJpeChwYXR0ZXJuLCAmbWF0cml4KTsKIAotICAgIGlmICgodHlwZSAm
IEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhhc0ZpbGwoKSkKLSAgICAgICAgY2Fp
cm9fc2V0X2ZpbGxfcnVsZShjciwgc3R5bGUtPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REID8g
Q0FJUk9fRklMTF9SVUxFX0VWRU5fT0REIDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcpOworICAg
IGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPnN2Z1N0eWxlKCkt
Pmhhc0ZpbGwoKSkKKyAgICAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgc3R5bGUtPnN2Z1N0
eWxlKCktPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REID8gQ0FJUk9fRklMTF9SVUxFX0VWRU5f
T0REIDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcpOwogCi0gICAgaWYgKCh0eXBlICYgQXBwbHlU
b1N0cm9rZVRhcmdldFR5cGUpICYmIHN0eWxlLT5oYXNTdHJva2UoKSkKKyAgICBpZiAoKHR5cGUg
JiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0cm9r
ZSgpKQogICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBv
YmplY3QpOwogCiAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7CkluZGV4OiBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclNvbGlkQ2Fpcm8uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyU29saWRD
YWlyby5jcHAJKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8v
U1ZHUGFpbnRTZXJ2ZXJTb2xpZENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHUGFp
bnRTZXJ2ZXJTb2xpZC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotYm9vbCBTVkdQYWludFNlcnZlclNvbGlkOjpzZXR1cChHcmFwaGljc0Nv
bnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJn
ZXRUeXBlIHR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0Ci17Ci0gICAgLy8gVE9ETzog
c2hhcmUgdGhpcyBjb2RlIHdpdGggb3RoZXIgUGFpbnRTZXJ2ZXJzCi0KLSAgICBjYWlyb190KiBj
ciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxl
KiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKLQotICAgIGZsb2F0IHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhOwotICAgIGNvbG9yKCkuZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Ci0KLSAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN0
eWxlLT5oYXNGaWxsKCkpIHsKLSAgICAgICAgYWxwaGEgPSBzdHlsZS0+ZmlsbE9wYWNpdHkoKTsK
LQotICAgICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBzdHlsZS0+ZmlsbFJ1bGUoKSA9PSBS
VUxFX0VWRU5PREQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVf
V0lORElORyk7Ci0gICAgfQotCi0gICAgaWYgKCh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5
cGUpICYmIHN0eWxlLT5oYXNTdHJva2UoKSkgewotICAgICAgICBhbHBoYSA9IHN0eWxlLT5zdHJv
a2VPcGFjaXR5KCk7Ci0KLSAgICAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY3IsIFNWR1JlbmRl
clN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdHJva2VXaWR0aCgp
LCAxLjApKTsKLSAgICAgICAgY29udGV4dC0+c2V0TGluZUNhcChzdHlsZS0+Y2FwU3R5bGUoKSk7
Ci0gICAgICAgIGNvbnRleHQtPnNldExpbmVKb2luKHN0eWxlLT5qb2luU3R5bGUoKSk7Ci0gICAg
ICAgIGlmIChzdHlsZS0+am9pblN0eWxlKCkgPT0gTWl0ZXJKb2luKQotICAgICAgICAgICAgY29u
dGV4dC0+c2V0TWl0ZXJMaW1pdChzdHlsZS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsKLQotICAgICAg
ICBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcyA9IGRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShv
YmplY3QtPnN0eWxlKCkpOwotICAgICAgICBkb3VibGUqIGRzaCA9IG5ldyBkb3VibGVbZGFzaGVz
LnNpemUoKV07Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgZGFzaGVzLnNpemUo
KSA7IGkrKykKLSAgICAgICAgICAgIGRzaFtpXSA9IGRhc2hlc1tpXTsKLSAgICAgICAgZG91Ymxl
IGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0
LCBzdHlsZS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjApOwotICAgICAgICBjYWlyb19zZXRfZGFz
aChjciwgZHNoLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsKLSAgICAgICAgZGVsZXRlW10g
ZHNoOwotICAgIH0KLQotICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9DZ1N1cHBvcnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5jcHAJ
KHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgICAg
ICAgICAgICAgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogICAgICAgICAgICAgICAy
MDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiQ2dTdXBwb3J0
LmgiCi0KLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMu
aD4KLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVy
LmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNHQWZmaW5lVHJhbnNmb3JtIENHQWZmaW5l
VHJhbnNmb3JtTWFrZU1hcEJldHdlZW5SZWN0cyhDR1JlY3Qgc291cmNlLCBDR1JlY3QgZGVzdCkK
LXsKLSAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1h
a2VUcmFuc2xhdGlvbihkZXN0Lm9yaWdpbi54IC0gc291cmNlLm9yaWdpbi54LCBkZXN0Lm9yaWdp
bi55IC0gc291cmNlLm9yaWdpbi55KTsKLSAgICB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9y
bVNjYWxlKHRyYW5zZm9ybSwgZGVzdC5zaXplLndpZHRoL3NvdXJjZS5zaXplLndpZHRoLCBkZXN0
LnNpemUuaGVpZ2h0L3NvdXJjZS5zaXplLmhlaWdodCk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybTsK
LX0KLQotdm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsK
LSAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1p
dGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCksIDEu
MGYpKTsKLSAgICBjb250ZXh0LT5zZXRMaW5lQ2FwKHN0eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHls
ZSgpKTsKLSAgICBjb250ZXh0LT5zZXRMaW5lSm9pbihzdHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0
eWxlKCkpOwotICAgIGNvbnRleHQtPnNldE1pdGVyTGltaXQoc3R5bGUtPnN2Z1N0eWxlKCktPnN0
cm9rZU1pdGVyTGltaXQoKSk7Ci0KLSAgICAvLyBGSVhNRTogRGFzaEFycmF5IHN1cHBvcnQgY291
bGQgZWFzaWx5IGJlIG1vdmVkIGludG8gR3JhcGhpY3NDb250ZXh0LCBhbmQgdGhpcyBmdW5jdGlv
biB0aGVuIG1hZGUgeC1wbGF0Zm9ybQotICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzID0gZGFz
aEFycmF5RnJvbVJlbmRlcmluZ1N0eWxlKHN0eWxlKTsKLSAgICBmbG9hdCBkYXNoT2Zmc2V0ID0g
U1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN2Z1N0
eWxlKCktPnN0cm9rZURhc2hPZmZzZXQoKSwgMC4wZik7Ci0KLSAgICBDR0NvbnRleHRTZXRMaW5l
RGFzaChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEo
KSwgZGFzaGVzLnNpemUoKSk7Ci19Ci0KLUNHQ29udGV4dFJlZiBzY3JhdGNoQ29udGV4dCgpCi17
Ci0gICAgc3RhdGljIENHQ29udGV4dFJlZiBzY3JhdGNoID0gMDsKLSAgICBpZiAoIXNjcmF0Y2gp
IHsKLSAgICAgICAgQ0ZNdXRhYmxlRGF0YVJlZiBlbXB0eSA9IENGRGF0YUNyZWF0ZU11dGFibGUo
TlVMTCwgMCk7Ci0gICAgICAgIENHRGF0YUNvbnN1bWVyUmVmIGNvbnN1bWVyID0gQ0dEYXRhQ29u
c3VtZXJDcmVhdGVXaXRoQ0ZEYXRhKGVtcHR5KTsKLSAgICAgICAgc2NyYXRjaCA9IENHUERGQ29u
dGV4dENyZWF0ZShjb25zdW1lciwgTlVMTCwgTlVMTCk7Ci0gICAgICAgIENHRGF0YUNvbnN1bWVy
UmVsZWFzZShjb25zdW1lcik7Ci0gICAgICAgIENGUmVsZWFzZShlbXB0eSk7Ci0KLSAgICAgICAg
Q0dGbG9hdCBibGFja1s0XSA9IHswLCAwLCAwLCAxfTsKLSAgICAgICAgQ0dDb250ZXh0U2V0Rmls
bENvbG9yKHNjcmF0Y2gsIGJsYWNrKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3Io
c2NyYXRjaCwgYmxhY2spOwotICAgICB9Ci0gICAgcmV0dXJuIHNjcmF0Y2g7Ci19Ci0KLUZsb2F0
UmVjdCBzdHJva2VCb3VuZGluZ0JveChjb25zdCBQYXRoJiBwYXRoLCBSZW5kZXJTdHlsZSogc3R5
bGUsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQotIHsKLSAgICAvLyB0aGUgYmJveCBtaWdo
dCBncm93IGlmIHRoZSBwYXRoIGlzIHN0cm9rZWQuCi0gICAgLy8gYW5kIENHUGF0aEdldEJvdW5k
aW5nQm94IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0LCBzbyB3ZSdsbCBoYXZlCi0gICAgLy8gdG8gbWFr
ZSBhbiBhbHRlcm5hdGl2ZSBjYWxsLi4uCi0gCi0gICAgLy8gRklYTUU6IHNpbmNlIHRoaXMgaXMg
bWFpbmx5IHVzZWQgdG8gZGVjaWRlIHdoYXQgdG8gcmVwYWludCwKLSAgICAvLyBwZXJoYXBzIGl0
IHdvdWxkIGJlIHN1ZmZpY2llbnQgdG8ganVzdCBvdXRzZXQgdGhlIGZpbGwgYmJveCBieQotICAg
IC8vIHRoZSBzdHJva2Ugd2lkdGggLSB0aGF0IHNob3VsZCBiZSB3YXkgY2hlYXBlciBhbmQgc2lt
cGxlciB0aGFuCi0gICAgLy8gd2hhdCB3ZSBkbyBoZXJlLgotIAotICAgIENHUGF0aFJlZiBjZ1Bh
dGggPSBwYXRoLnBsYXRmb3JtUGF0aCgpOwotCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBz
Y3JhdGNoQ29udGV4dCgpOwotICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0KLSAg
ICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0QWRkUGF0aChjb250
ZXh0LCBjZ1BhdGgpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0IGdjKGNvbnRleHQpOwotICAgIGFw
cGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoJmdjLCBzdHlsZSwgb2JqZWN0KTsKLQotICAgIENHQ29u
dGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwotICAgIGlmIChDR0NvbnRl
eHRJc1BhdGhFbXB0eShjb250ZXh0KSkgewotICAgICAgICAvLyBDR0NvbnRleHRSZXBsYWNlUGF0
aFdpdGhTdHJva2VkUGF0aCBzZWVtcyB0byBmYWlsIHRvIGNyZWF0ZSBhIHBhdGggc29tZXRpbWVz
LCB0aGlzIGlzIG5vdCB3ZWxsIHVuZGVyc3Rvb2QuCi0gICAgICAgIC8vIHJldHVybmluZyBoZXJl
IHByZXZlbnRzIENHIGZyb20gbG9nZ2luZyB0byB0aGUgY29uc29sZSBmcm9tIENHQ29udGV4dEdl
dFBhdGhCb3VuZGluZ0JveAotICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQp
OwotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0gICAgfQotCi0gICAgQ0dSZWN0IGJveCA9
IENHQ29udGV4dEdldFBhdGhCb3VuZGluZ0JveChjb250ZXh0KTsKLSAgICBDR0NvbnRleHRSZXN0
b3JlR1N0YXRlKGNvbnRleHQpOwotCi0gICAgcmV0dXJuIEZsb2F0UmVjdChib3gpOwotfQotCi19
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQotCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9j
Zy9DZ1N1cHBvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9DZ1N1
cHBvcnQuaAkocmV2aXNpb24gMzY3MTEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9DZ1N1
cHBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIENnU3VwcG9ydF9oCi0jZGVmaW5lIENnU3VwcG9ydF9oCi0KLSNpZiBFTkFC
TEUoU1ZHKQotCi0jaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZp
Y2VzLmg+Ci0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXR5cGVkZWYgc3RydWN0IENHUGF0aCAqQ0dNdXRhYmxlUGF0aFJlZjsKLQotY2xhc3MgUGF0
aDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIFJlbmRlclN0eWxlOwotY2xhc3MgUmVuZGVyT2Jq
ZWN0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotCi1DR0FmZmluZVRyYW5zZm9ybSBDR0FmZmlu
ZVRyYW5zZm9ybU1ha2VNYXBCZXR3ZWVuUmVjdHMoQ0dSZWN0IHNvdXJjZSwgQ0dSZWN0IGRlc3Qp
OwotCi12b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgUmVu
ZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKLQotQ0dDb250ZXh0UmVmIHNjcmF0Y2hD
b250ZXh0KCk7Ci1GbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goY29uc3QgUGF0aCYgcGF0aCwg
UmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKLQotfQotCi0jZW5kaWYgLy8gRU5B
QkxFKFNWRykKLSNlbmRpZiAvLyAhQ2dTdXBwb3J0X2gKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2NnL1JlbmRlclBhdGhDZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvY2cvUmVuZGVyUGF0aENnLmNwcAkocmV2aXNpb24gMzY3MTEpCisrKyBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9jZy9SZW5kZXJQYXRoQ2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGFuZGVyIEtlbGxldHQg
PGx5cGFub3ZAa2RlLm9yZz4KLSAqICAgICAgICAgICAgICAgMjAwNiBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQot
I2luY2x1ZGUgIlJlbmRlclBhdGguaCIKLQotI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMv
QXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2luY2x1ZGUgIkNnU3VwcG9ydC5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyLmgiCi0jaW5jbHVk
ZSAiU1ZHUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCi0jaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GbG9hdFJl
Y3QgUmVuZGVyUGF0aDo6c3Ryb2tlQkJveCgpIGNvbnN0Ci17Ci0gICAgaWYgKHN0eWxlKCktPnN2
Z1N0eWxlKCktPmhhc1N0cm9rZSgpKQotICAgICAgICByZXR1cm4gc3Ryb2tlQm91bmRpbmdCb3go
cGF0aCgpLCBzdHlsZSgpLCB0aGlzKTsKLQotICAgIHJldHVybiBwYXRoKCkuYm91bmRpbmdSZWN0
KCk7Ci19Ci0KLQotYm9vbCBSZW5kZXJQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkgY29uc3QKLXsKLSAgICBpZiAocGF0aCgp
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHJlcXVpcmVzU3Ry
b2tlICYmICFTVkdQYWludFNlcnZlcjo6c3Ryb2tlUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcykp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENHTXV0YWJsZVBhdGhSZWYgY2dQYXRoID0g
cGF0aCgpLnBsYXRmb3JtUGF0aCgpOwotICAgIAotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0g
c2NyYXRjaENvbnRleHQoKTsKLSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwotICAg
IAotICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKLSAgICBDR0NvbnRleHRBZGRQYXRo
KGNvbnRleHQsIGNnUGF0aCk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoY29udGV4dCk7Ci0g
ICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dCgmZ2MsIHN0eWxlKCksIHRoaXMpOwotCi0gICAg
Ym9vbCBoaXRTdWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoY29udGV4dCwgcG9p
bnQsIGtDR1BhdGhTdHJva2UpOwotICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7
Ci0gICAgCi0gICAgcmV0dXJuIGhpdFN1Y2Nlc3M7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJM
RShTVkcpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckdyYWRp
ZW50Q2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50
U2VydmVyR3JhZGllbnRDZy5jcHAJKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQsNyArMjQsNiBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudC5oIgogCi0jaW5jbHVkZSAiQ2dTdXBwb3J0LmgiCiAjaW5jbHVkZSAiRmxvYXRDb252
ZXJzaW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKQEAgLTI1OCwxMSArMjU3LDEwIEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dDo6aGFuZGxlQm91bmQKIAogICAgIGlmIChib3VuZGluZ0JveE1vZGUoKSkgewogICAgICAgICAv
LyBDaG9vc2UgZGVmYXVsdCBncmFkaWVudCBib3VuZGluZyBib3gKLSAgICAgICAgQ0dSZWN0IGdy
YWRpZW50QkJveCA9IENHUmVjdE1ha2UoMC4wZiwgMC4wZiwgMS4wZiwgMS4wZik7CisgICAgICAg
IEZsb2F0UmVjdCBncmFkaWVudEJCb3goMC4wZiwgMC4wZiwgMS4wZiwgMS4wZik7CiAKICAgICAg
ICAgLy8gR2VuZXJhdGUgYSB0cmFuc2Zvcm0gdG8gbWFwIGJldHdlZW4gYm90aCBib3VuZGluZyBi
b3hlcwotICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBncmFkaWVudEludG9PYmplY3RCQm94ID0g
Q0dBZmZpbmVUcmFuc2Zvcm1NYWtlTWFwQmV0d2VlblJlY3RzKGdyYWRpZW50QkJveCwgQ0dSZWN0
KHRhcmdldFJlY3QpKTsKLSAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHRSZWYsIGdy
YWRpZW50SW50b09iamVjdEJCb3gpOworICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0obWFrZU1h
cEJldHdlZW5SZWN0cyhncmFkaWVudEJCb3gsIHRhcmdldFJlY3QpKTsKICAgICB9CiAKICAgICAv
LyBBcHBseSB0aGUgZ3JhZGllbnQncyBvd24gdHJhbnNmb3JtCkluZGV4OiBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9jZy9TVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwCShyZXZpc2lv
biAzNjcxMSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyUGF0dGVy
bkNnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNiBAQAogI2lmIEVOQUJMRShTVkcp
CiAjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCiAKLSNpbmNsdWRlICJDZ1N1cHBv
cnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvY2cvU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlclNvbGlkQ2cuY3BwCShyZXZpc2lvbiAzNjcxMSkK
KysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyU29saWRDZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVO
QUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oIgotCi0jaW5jbHVkZSAi
Q29sb3IuaCIKLSNpbmNsdWRlICJDZ1N1cHBvcnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1ib29sIFNWR1BhaW50U2VydmVyU29saWQ6OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRl
eHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSwg
Ym9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlv
biBkb2VzIG5vdCB1c2UgYW55IENHLXNwZWNpZmljIGNhbGxzLCBob3dldmVyIGl0J3Mgbm90IHll
dAotICAgIC8vIGNyb3NzIHBsYXRmb3JtLCBiZWNhdXNlIENHIGhhbmRsZXMgZmlsbCBydWxlIGRp
ZmZlcmVudCBmcm9tIG90aGVyIGdyYXBoaWNzCi0gICAgLy8gcGxhdGZvcm1zLiAgQ0cgbWFrZXMg
eW91IHVzZSB0d28gc2VwYXJhdGUgZmlsbCBjYWxscywgb3RoZXIgcGxhdGZvcm1zIHNldAotICAg
IC8vIHRoZSBmaWxsIHJ1bGUgc3RhdGUgb24gdGhlIGNvbnRleHQgYW5kIHRoZW4gY2FsbCBhIGdl
bmVyaWMgImZpbGxQYXRoIgotCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0ID8gb2Jq
ZWN0LT5zdHlsZSgpIDogMDsKLQotICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlw
ZSkgJiYgKCFzdHlsZSB8fCBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSkgewotICAgICAg
ICBSR0JBMzIgcmdiYSA9IGNvbG9yKCkucmdiKCk7Ci0gICAgICAgIEFTU0VSVCghY29sb3IoKS5o
YXNBbHBoYSgpKTsKLSAgICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgcmdiYSA9IGNvbG9y
V2l0aE92ZXJyaWRlQWxwaGEocmdiYSwgc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxPcGFjaXR5KCkp
OwotCi0gICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihyZ2JhKTsKLQotICAgICAgICBpZiAo
aXNQYWludGluZ1RleHQpCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUo
Y1RleHRGaWxsKTsKLSAgICB9Ci0KLSAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0
VHlwZSkgJiYgKCFzdHlsZSB8fCBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpKSB7Ci0g
ICAgICAgIFJHQkEzMiByZ2JhID0gY29sb3IoKS5yZ2IoKTsKLSAgICAgICAgQVNTRVJUKCFjb2xv
cigpLmhhc0FscGhhKCkpOwotICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICByZ2JhID0g
Y29sb3JXaXRoT3ZlcnJpZGVBbHBoYShyZ2JhLCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlT3Bh
Y2l0eSgpKTsKLQotICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihyZ2JhKTsKLQotICAg
ICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNv
bnRleHQsIHN0eWxlLCBvYmplY3QpOwotCi0gICAgICAgIGlmIChpc1BhaW50aW5nVGV4dCkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShjVGV4dFN0cm9rZSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmCi0KLS8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NW
R1Jlc291cmNlQ2xpcHBlckNnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9jZy9TVkdSZXNvdXJjZUNsaXBwZXJDZy5jcHAJKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUmVzb3VyY2VDbGlwcGVyQ2cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw4ICszMCw4IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdSZXNvdXJj
ZUNsaXBwZXIuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkNnU3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTQ2LDIyICs0NiwxOSBAQCB2b2lkIFNWR1Jlc291cmNlQ2xpcHBlcjo6YXBw
bHlDbGlwKEdyYXBoCiAKICAgICBjb250ZXh0LT5iZWdpblBhdGgoKTsKIAotICAgIENHQWZmaW5l
VHJhbnNmb3JtIGJib3hUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VNYXBCZXR3ZWVu
UmVjdHMoQ0dSZWN0TWFrZSgwLDAsMSwxKSwgQ0dSZWN0KGJvdW5kaW5nQm94KSk7CisgICAgQWZm
aW5lVHJhbnNmb3JtIGJib3hUcmFuc2Zvcm0gPSBtYWtlTWFwQmV0d2VlblJlY3RzKEZsb2F0UmVj
dCgwLCAwLCAxLCAxKSwgYm91bmRpbmdCb3gpOwogCiAgICAgZm9yICh1bnNpZ25lZCB4ID0gMDsg
eCA8IG1fY2xpcERhdGEuY2xpcERhdGEoKS5zaXplKCk7IHgrKykgewogICAgICAgICBDbGlwRGF0
YSBkYXRhID0gbV9jbGlwRGF0YS5jbGlwRGF0YSgpW3hdOwogICAgICAgICBpZiAoZGF0YS53aW5k
UnVsZSAhPSBjbGlwUnVsZSkKICAgICAgICAgICAgIGhldGVyb2dlbm91c0NsaXBSdWxlcyA9IHRy
dWU7Ci0gICAgICAgIAotICAgICAgICBDR1BhdGhSZWYgY2xpcFBhdGggPSBkYXRhLnBhdGgucGxh
dGZvcm1QYXRoKCk7CiAKICAgICAgICAgaWYgKGRhdGEuYmJveFVuaXRzKSB7Ci0gICAgICAgICAg
ICBDR011dGFibGVQYXRoUmVmIHRyYW5zZm9ybWVkUGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUo
KTsKLSAgICAgICAgICAgIENHUGF0aEFkZFBhdGgodHJhbnNmb3JtZWRQYXRoLCAmYmJveFRyYW5z
Zm9ybSwgY2xpcFBhdGgpOwotICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChjZ0NvbnRleHQs
IHRyYW5zZm9ybWVkUGF0aCk7Ci0gICAgICAgICAgICBDR1BhdGhSZWxlYXNlKHRyYW5zZm9ybWVk
UGF0aCk7CisgICAgICAgICAgICBQYXRoIHRyYW5zZm9ybWVkUGF0aCA9IGRhdGEucGF0aDsKKyAg
ICAgICAgICAgIHRyYW5zZm9ybWVkUGF0aC50cmFuc2Zvcm0oYmJveFRyYW5zZm9ybSk7CisgICAg
ICAgICAgICBjb250ZXh0LT5hZGRQYXRoKHRyYW5zZm9ybWVkUGF0aCk7CiAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChjZ0NvbnRleHQsIGNsaXBQYXRoKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmFkZFBhdGgoZGF0YS5wYXRoKTsKICAgICB9CiAKICAgICBpZiAo
bV9jbGlwRGF0YS5jbGlwRGF0YSgpLnNpemUoKSkgewpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvY2cvU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9jZy9TVkdSZXNvdXJjZU1hc2tlckNnLm1tCShyZXZpc2lvbiAzNjcxMSkKKysrIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1Jlc291cmNlTWFza2VyQ2cubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbXBvcnQgIlNWR1Jlc291cmNlTWFza2VyLmgiCiAKICNp
bXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiQ2dTdXBwb3J0LmgiCiAjaW1wb3J0
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCiAjaW1wb3J0ICJT
VkdNYXNrRWxlbWVudC5oIgpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvUmVuZGVyUGF0
aFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9SZW5kZXJQYXRo
UXQuY3BwCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1JlbmRl
clBhdGhRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtk
ZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA1IEVyaWMgU2VpZGVsIDxlcmljLnNlaWRl
bEBrZGVtYWlsLm5ldD4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKLSNpbmNs
dWRlICJTVkdSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyLmgiCi0KLSNp
bmNsdWRlIDxRRGVidWc+Ci0jaW5jbHVkZSA8UVBhaW50ZXJQYXRoU3Ryb2tlcj4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAotYm9vbCBSZW5kZXJQYXRoOjpzdHJva2VDb250YWlucyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkgY29uc3QKLXsKLSAgICBp
ZiAocGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHJl
cXVpcmVzU3Ryb2tlICYmICFTVkdQYWludFNlcnZlcjo6c3Ryb2tlUGFpbnRTZXJ2ZXIoc3R5bGUo
KSwgdGhpcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotc3RhdGljIFFQYWludGVyUGF0aCBnZXRQYXRoU3Ryb2tlKGNvbnN0IFFQYWludGVyUGF0aCAm
cGF0aCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSkKLXsgCi0gICAgUVBhaW50ZXJQYXRoU3Ryb2tlciBzOwotICAgIHMuc2V0V2lkdGgoU1ZHUmVu
ZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN2Z1N0eWxlKCkt
PnN0cm9rZVdpZHRoKCksIDEuMCkpOwotCi0gICAgaWYgKHN0eWxlLT5zdmdTdHlsZSgpLT5jYXBT
dHlsZSgpID09IEJ1dHRDYXApCi0gICAgICAgIHMuc2V0Q2FwU3R5bGUoUXQ6OkZsYXRDYXApOwot
ICAgIGVsc2UgaWYgKHN0eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpID09IFJvdW5kQ2FwKQot
ICAgICAgICBzLnNldENhcFN0eWxlKFF0OjpSb3VuZENhcCk7Ci0KLSAgICBpZiAoc3R5bGUtPnN2
Z1N0eWxlKCktPmpvaW5TdHlsZSgpID09IE1pdGVySm9pbikgewotICAgICAgICBzLnNldEpvaW5T
dHlsZShRdDo6TWl0ZXJKb2luKTsKLSAgICAgICAgcy5zZXRNaXRlckxpbWl0KChxcmVhbCkgc3R5
bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGltaXQoKSk7Ci0gICAgfSBlbHNlIGlmKHN0eWxl
LT5zdmdTdHlsZSgpLT5qb2luU3R5bGUoKSA9PSBSb3VuZEpvaW4pCi0gICAgICAgIHMuc2V0Sm9p
blN0eWxlKFF0OjpSb3VuZEpvaW4pOwotCi0gICAgY29uc3QgRGFzaEFycmF5JiBkYXNoZXMgPSBX
ZWJDb3JlOjpkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUoc3R5bGUpOwotICAgIGRvdWJsZSBk
YXNoT2Zmc2V0ID0gU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwg
c3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZURhc2hPZmZzZXQoKSwgMC4wKTsKLQotICAgIHVuc2ln
bmVkIGludCBkYXNoTGVuZ3RoID0gIWRhc2hlcy5pc0VtcHR5KCkgPyBkYXNoZXMuc2l6ZSgpIDog
MDsKLSAgICBpZihkYXNoTGVuZ3RoKSB7Ci0gICAgICAgIFFWZWN0b3I8cXJlYWw+IHBhdHRlcm47
Ci0gICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IChkYXNoTGVuZ3RoICUgMikgPT0gMCA/IGRh
c2hMZW5ndGggOiBkYXNoTGVuZ3RoICogMjsKLQotICAgICAgICBmb3IodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHBhdHRlcm4uYXBwZW5kKGRhc2hlc1tp
ICUgZGFzaExlbmd0aF0gLyAoZmxvYXQpcy53aWR0aCgpKTsKLQotICAgICAgICBzLnNldERhc2hQ
YXR0ZXJuKHBhdHRlcm4pOwotICAgIAotICAgICAgICBRX1VOVVNFRChkYXNoT2Zmc2V0KTsKLSAg
ICAgICAgLy8gVE9ETzogZGFzaC1vZmZzZXQsIGRvZXMvd2lsbCBxdDQgQVBJIGFsbG93IGl0PyAo
Um9iKQotICAgIH0KLQotICAgIHJldHVybiBzLmNyZWF0ZVN0cm9rZShwYXRoKTsKLX0KLQotRmxv
YXRSZWN0IFJlbmRlclBhdGg6OnN0cm9rZUJCb3goKSBjb25zdAotewotICAgIFFQYWludGVyUGF0
aCBvdXRsaW5lID0gZ2V0UGF0aFN0cm9rZSgqKHBhdGgoKS5wbGF0Zm9ybVBhdGgoKSksIHRoaXMs
IHN0eWxlKCkpOwotICAgIHJldHVybiBvdXRsaW5lLmJvdW5kaW5nUmVjdCgpOwotfQotCi19Ci0K
LS8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50
U2VydmVyR3JhZGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
cXQvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmNwcAkocmV2aXNpb24gMzY3MTEpCisrKyBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlckdyYWRpZW50UXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSwxMCArMjksMTAgQEAKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2lu
Y2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgogCi0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5j
bHVkZSA8UVBhaW50ZXJQYXRoPgogI2luY2x1ZGUgPFFDb2xvcj4KICNpbmNsdWRlIDxRR3JhZGll
bnQ+CisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UVBhaW50ZXJQYXRoPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkzLDExICs5Myw5IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudDo6c2V0dXAoR3JhcGgKICAgICAgICAgUVBlbiBwZW47CiAgICAgICAgIFFCcnVzaCBi
cnVzaChncmFkaWVudCk7CiAgICAgICAgIGJydXNoLnNldE1hdHJpeChncmFkaWVudFRyYW5zZm9y
bSgpKTsKLQotICAgICAgICBzZXRQZW5Qcm9wZXJ0aWVzKG9iamVjdCwgcmVuZGVyU3R5bGUsIHBl
bik7CiAgICAgICAgIHBlbi5zZXRCcnVzaChicnVzaCk7Ci0KICAgICAgICAgcGFpbnRlci0+c2V0
UGVuKHBlbik7CisgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgcmVu
ZGVyU3R5bGUsIG9iamVjdCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclF0LmNwcAkocmV2aXNpb24gMzY3
MTEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNDcgKzI2LDEzIEBACiAjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXIu
aCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN0
eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5
bGUuaCIKIAogI2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1ZGUgPFFWZWN0b3I+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBTVkdQYWludFNlcnZlcjo6c2V0UGVuUHJvcGVydGllcyhj
b25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBRUGVu
JiBwZW4pIGNvbnN0Ci17Ci0gICAgcGVuLnNldFdpZHRoRihTVkdSZW5kZXJTdHlsZTo6Y3NzUHJp
bWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKSwg
MS4wKSk7Ci0KLSAgICBpZiAoc3R5bGUtPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gQnV0dENh
cCkKLSAgICAgICAgcGVuLnNldENhcFN0eWxlKFF0OjpGbGF0Q2FwKTsKLSAgICBlbHNlIGlmIChz
dHlsZS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSA9PSBSb3VuZENhcCkKLSAgICAgICAgcGVuLnNl
dENhcFN0eWxlKFF0OjpSb3VuZENhcCk7Ci0KLSAgICBpZiAoc3R5bGUtPnN2Z1N0eWxlKCktPmpv
aW5TdHlsZSgpID09IE1pdGVySm9pbikgewotICAgICAgICBwZW4uc2V0Sm9pblN0eWxlKFF0OjpN
aXRlckpvaW4pOwotICAgICAgICBwZW4uc2V0TWl0ZXJMaW1pdCgocXJlYWwpIHN0eWxlLT5zdmdT
dHlsZSgpLT5zdHJva2VNaXRlckxpbWl0KCkpOwotICAgIH0gZWxzZSBpZihzdHlsZS0+c3ZnU3R5
bGUoKS0+am9pblN0eWxlKCkgPT0gUm91bmRKb2luKQotICAgICAgICBwZW4uc2V0Sm9pblN0eWxl
KFF0OjpSb3VuZEpvaW4pOwotCi0gICAgY29uc3QgRGFzaEFycmF5JiBkYXNoZXMgPSBXZWJDb3Jl
OjpkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUoc3R5bGUpOwotICAgIGRvdWJsZSBkYXNoT2Zm
c2V0ID0gU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUt
PnN2Z1N0eWxlKCktPnN0cm9rZURhc2hPZmZzZXQoKSwgMC4wKTsKLQotICAgIHVuc2lnbmVkIGlu
dCBkYXNoTGVuZ3RoID0gIWRhc2hlcy5pc0VtcHR5KCkgPyBkYXNoZXMuc2l6ZSgpIDogMDsKLSAg
ICBpZihkYXNoTGVuZ3RoKSB7Ci0gICAgICAgIFFWZWN0b3I8cXJlYWw+IHBhdHRlcm47Ci0gICAg
ICAgIHVuc2lnbmVkIGludCBjb3VudCA9IChkYXNoTGVuZ3RoICUgMikgPT0gMCA/IGRhc2hMZW5n
dGggOiBkYXNoTGVuZ3RoICogMjsKLQotICAgICAgICBmb3IodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHBhdHRlcm4uYXBwZW5kKGRhc2hlc1tpICUgZGFz
aExlbmd0aF0gLyAoZmxvYXQpcGVuLndpZHRoRigpKTsKLQotICAgICAgICBwZW4uc2V0RGFzaFBh
dHRlcm4ocGF0dGVybik7Ci0KLSAgICAgICAgUV9VTlVTRUQoZGFzaE9mZnNldCk7Ci0gICAgICAg
IC8vIFRPRE86IGRhc2gtb2Zmc2V0LCBkb2VzL3dpbGwgcXQ0IEFQSSBhbGxvdyBpdD8gKFJvYikK
LSAgICB9Ci19Ci0KIHZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiYg
Y29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXRoLCBTVkdQYWludFRhcmdldFR5cGUgdHlw
ZSkgY29uc3QKIHsKICAgICBpZiAoIXNldHVwKGNvbnRleHQsIHBhdGgsIHR5cGUpKQpJbmRleDog
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJTb2xpZFF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclNvbGlkUXQuY3Bw
CShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2Vy
dmVyU29saWRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAgICBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0g
ICAgQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0KLSAgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQotICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oIgot
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgot
Ci0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBTVkdQ
YWludFNlcnZlclNvbGlkOjpzZXR1cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBS
ZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUsIGJvb2wgaXNQYWlu
dGluZ1RleHQpIGNvbnN0Ci17Ci0gICAgUVBhaW50ZXIqIHBhaW50ZXIoY29udGV4dCA/IGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpIDogMCk7Ci0gICAgUV9BU1NFUlQocGFpbnRlcik7Ci0KLSAg
ICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBvYmplY3QgPyBvYmplY3QtPnN0eWxlKCkgOiAw
OwotICAgIC8vIFRPRE8/IHBhaW50ZXItPnNldE9wYWNpdHkocmVuZGVyU3R5bGUtPm9wYWNpdHko
KSk7Ci0KLSAgICBRQ29sb3IgYyA9IGNvbG9yKCk7Ci0KLSAgICBpZiAoKHR5cGUgJiBBcHBseVRv
RmlsbFRhcmdldFR5cGUpICYmICghcmVuZGVyU3R5bGUgfHwgcmVuZGVyU3R5bGUtPnN2Z1N0eWxl
KCktPmhhc0ZpbGwoKSkpIHsKLSAgICAgICAgaWYgKHJlbmRlclN0eWxlKQotICAgICAgICAgICAg
Yy5zZXRBbHBoYUYocmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxPcGFjaXR5KCkpOwotCi0g
ICAgICAgIFFCcnVzaCBicnVzaChjKTsKLSAgICAgICAgcGFpbnRlci0+c2V0QnJ1c2goYnJ1c2gp
OwotCi0gICAgICAgIGlmIChyZW5kZXJTdHlsZSkKLSAgICAgICAgICAgIGNvbnRleHQtPnNldEZp
bGxSdWxlKHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpKTsKLQotICAgICAgICAv
KiBpZihpc1BhaW50aW5nVGV4dCgpKSAuLi4gKi8KLSAgICB9Ci0KLSAgICBpZiAoKHR5cGUgJiBB
cHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgKCFyZW5kZXJTdHlsZSB8fCByZW5kZXJTdHlsZS0+
c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpKSB7Ci0gICAgICAgIGlmIChyZW5kZXJTdHlsZSkKLSAg
ICAgICAgICAgIGMuc2V0QWxwaGFGKHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VPcGFj
aXR5KCkpOwotCi0gICAgICAgIFFQZW4gcGVuKGMpOwotICAgICAgICBpZiAocmVuZGVyU3R5bGUp
Ci0gICAgICAgICAgICBzZXRQZW5Qcm9wZXJ0aWVzKG9iamVjdCwgcmVuZGVyU3R5bGUsIHBlbik7
Ci0gICAgICAgIHBhaW50ZXItPnNldFBlbihwZW4pOwotCi0gICAgICAgIC8qIGlmKGlzUGFpbnRp
bmdUZXh0KCkpIC4uLiAqLwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0vLyB2aW06dHM9NDpub2V0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23611</attachid>
            <date>2008-09-20 13:49:21 -0700</date>
            <delta_ts>2008-09-20 14:23:02 -0700</delta_ts>
            <desc>SVGPaintServer cleanUp - first part</desc>
            <filename>SVGPaintServer-cleanUp-first.patch</filename>
            <type>text/plain</type>
            <size>8600</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjcxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMDgtMDktMjAgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlZCBE
YXNoQXJyYXkgdG8gdGhlIEdyYXBoaWNzQ29udGV4dC4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZURhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZURhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURh
c2gpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvY2cvQ2dTdXBw
b3J0LmNwcDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0Lmg6CisKIDIwMDgt
MDktMjAgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1hbm5Aa2RlLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBFcmljLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDEyIEBA
IHR5cGVkZWYgdW5zaWduZWQgY2hhciBVSW50ODsKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBQTEFU
Rk9STShDRykKK3R5cGVkZWYgVmVjdG9yPENHRmxvYXQ+IERhc2hBcnJheTsKKyNlbHNlCit0eXBl
ZGVmIFZlY3RvcjxmbG9hdD4gRGFzaEFycmF5OworI2VuZGlmCisKICNpZiBQTEFURk9STShRVCkg
JiYgZGVmaW5lZChRX1dTX1dJTikKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKQEAgLTIz
MSw2ICsyMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEludFJlY3QgZm9jdXNS
aW5nQm91bmRpbmdSZWN0KCk7CiAKICAgICAgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApOwor
ICAgICAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZz
ZXQpOwogICAgICAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKTsKICAgICAgICAgdm9pZCBz
ZXRNaXRlckxpbWl0KGZsb2F0KTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDM2
NzExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxtYXRo
Lmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiAjaWYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUg
PGdkay9nZGsuaD4KQEAgLTgwNyw2ICs4MDgsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVDYXAoTGluZUNhcAogICAgIGNhaXJvX3NldF9saW5lX2NhcChtX2RhdGEtPmNyLCBjYWly
b0NhcCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNo
QXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3sKKyAgICBPd25BcnJheVB0cjxkb3Vi
bGU+IGRzaChuZXcgZG91YmxlW2Rhc2hlcy5zaXplKCldKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGRhc2hlcy5zaXplKCk7IGkrKykKKyAgICAgICAgZHNoW2ldID0gZGFzaGVzW2ldOwor
ICAgIGNhaXJvX3NldF9kYXNoKG1fZGF0YS0+Y3IsIGRzaC5nZXQoKSwgZGFzaGVzLnNpemUoKSwg
ZGFzaE9mZnNldCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5l
Sm9pbiBsaW5lSm9pbikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJ
KHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxOCw2ICs3MTgsMTEgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcAogICAgIH0KIH0KIAordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBk
YXNoT2Zmc2V0KQoreworICAgIENHQ29udGV4dFNldExpbmVEYXNoKHBsYXRmb3JtQ29udGV4dCgp
LCBkYXNoT2Zmc2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsKK30KKwogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKQEAgLTczNCw3ICs3MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0TGluZUpvaW4oTGluZUpvCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiB9Ci0gCisK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQogewogICAgIENHQ29udGV4dEJlZ2lu
UGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkocmV2aXNpb24gMzY3MTEpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksMjQgKzM5LDI1IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgotI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5j
bHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNs
dWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiUGVuLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKIAotI2luY2x1ZGUgPFFTdGFjaz4KKyNpbmNsdWRlIDxRRGVidWc+CiAjaW5jbHVkZSA8
UVBhaW50ZXI+Ci0jaW5jbHVkZSA8UVBvbHlnb25GPgotI2luY2x1ZGUgPFFQYWludGVyUGF0aD4K
ICNpbmNsdWRlIDxRUGFpbnREZXZpY2U+Ci0jaW5jbHVkZSA8UVBpeG1hcD4KICNpbmNsdWRlIDxR
UGFpbnRFbmdpbmU+Ci0jaW5jbHVkZSA8UURlYnVnPgorI2luY2x1ZGUgPFFQYWludGVyUGF0aD4K
KyNpbmNsdWRlIDxRUGl4bWFwPgorI2luY2x1ZGUgPFFQb2x5Z29uRj4KKyNpbmNsdWRlIDxRU3Rh
Y2s+CisjaW5jbHVkZSA8UVZlY3Rvcj4KIAogI2lmbmRlZiBNX1BJCiAjZGVmaW5lIE1fUEkgMy4x
NDE1OTI2NTM1ODk3OTMyMzg0NgpAQCAtNzg0LDYgKzc4NSwyNCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwCiAgICAgcC0+c2V0UGVuKG5QZW4pOwogfQogCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZs
b2F0IGRhc2hPZmZzZXQpCit7CisgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKKyAgICBR
UGVuIHBlbiA9IHAtPnBlbigpOworICAgIHVuc2lnbmVkIGludCBkYXNoTGVuZ3RoID0gIWRhc2hl
cy5pc0VtcHR5KCkgPyBkYXNoZXMuc2l6ZSgpIDogMDsKKyAgICBpZihkYXNoTGVuZ3RoKSB7Cisg
ICAgICAgIFFWZWN0b3I8cXJlYWw+IHBhdHRlcm47CisgICAgICAgIHVuc2lnbmVkIGludCBjb3Vu
dCA9IChkYXNoTGVuZ3RoICUgMikgPT0gMCA/IGRhc2hMZW5ndGggOiBkYXNoTGVuZ3RoICogMjsK
KworICAgICAgICBmb3IodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAg
ICAgICAgIHBhdHRlcm4uYXBwZW5kKGRhc2hlc1tpICUgZGFzaExlbmd0aF0gLyAoZmxvYXQpcGVu
LndpZHRoRigpKTsKKworICAgICAgICBwZW4uc2V0RGFzaFBhdHRlcm4ocGF0dGVybik7CisgICAg
ICAgIHBlbi5zZXREYXNoT2Zmc2V0KGRhc2hPZmZzZXQpOworICAgIH0KKyAgICBwLT5zZXRQZW4o
cGVuKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGxq
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdQYWludFNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHUGFpbnRTZXJ2ZXIuY3BwCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR1BhaW50U2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYgKzE0NCwx
OSBAQCBTVkdQYWludFNlcnZlciogU1ZHUGFpbnRTZXJ2ZXI6OnN0cm9rZVBhCiAgICAgcmV0dXJu
IHN0cm9rZVBhaW50U2VydmVyOwogfQogCit2b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRl
ck9iamVjdCogb2JqZWN0KQoreworICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhTVkdS
ZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUo
KS0+c3Ryb2tlV2lkdGgoKSwgMS4wZikpOworICAgIGNvbnRleHQtPnNldExpbmVDYXAoc3R5bGUt
PnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkpOworICAgIGNvbnRleHQtPnNldExpbmVKb2luKHN0eWxl
LT5zdmdTdHlsZSgpLT5qb2luU3R5bGUoKSk7CisgICAgaWYgKHN0eWxlLT5zdmdTdHlsZSgpLT5q
b2luU3R5bGUoKSA9PSBNaXRlckpvaW4pCisgICAgICAgIGNvbnRleHQtPnNldE1pdGVyTGltaXQo
c3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGltaXQoKSk7CisKKyAgICBjb25zdCBEYXNo
QXJyYXkmIGRhc2hlcyA9IGRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShvYmplY3QtPnN0eWxl
KCkpOworICAgIGZsb2F0IGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZl
VG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAw
LjBmKTsKKyAgICBjb250ZXh0LT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hPZmZzZXQpOworfQor
CiBEYXNoQXJyYXkgZGFzaEFycmF5RnJvbVJlbmRlcmluZ1N0eWxlKGNvbnN0IFJlbmRlclN0eWxl
KiBzdHlsZSkKIHsKICAgICBEYXNoQXJyYXkgYXJyYXk7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdQYWludFNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR1BhaW50U2VydmVyLmgJKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHUGFpbnRTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIFNWR1BhaW50U2VydmVyKiBnZXRQYWludFNlcnZlckJ5
SWQoRG9jdW1lbnQqLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKIAorICAgIHZvaWQgYXBwbHlTdHJv
a2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJl
bmRlck9iamVjdCopOwogICAgIERhc2hBcnJheSBkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKTsKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRl
eDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9DZ1N1cHBvcnQuY3BwCShyZXZpc2lvbiAzNjcxMSkKKysr
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDIwICs0OCw2IEBAIENHQWZmaW5lVHJhbnNmb3JtIENHQWZmaW5lVHJhbnNmb3JtTWFrZU0K
ICAgICByZXR1cm4gdHJhbnNmb3JtOwogfQogCi12b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJl
bmRlck9iamVjdCogb2JqZWN0KQotewotICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhT
VkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5
bGUoKS0+c3Ryb2tlV2lkdGgoKSwgMS4wZikpOwotICAgIGNvbnRleHQtPnNldExpbmVDYXAoc3R5
bGUtPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkpOwotICAgIGNvbnRleHQtPnNldExpbmVKb2luKHN0
eWxlLT5zdmdTdHlsZSgpLT5qb2luU3R5bGUoKSk7Ci0gICAgY29udGV4dC0+c2V0TWl0ZXJMaW1p
dChzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsKLQotICAgIC8vIEZJWE1F
OiBEYXNoQXJyYXkgc3VwcG9ydCBjb3VsZCBlYXNpbHkgYmUgbW92ZWQgaW50byBHcmFwaGljc0Nv
bnRleHQsIGFuZCB0aGlzIGZ1bmN0aW9uIHRoZW4gbWFkZSB4LXBsYXRmb3JtCi0gICAgY29uc3Qg
RGFzaEFycmF5JiBkYXNoZXMgPSBkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUoc3R5bGUpOwot
ICAgIGZsb2F0IGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5n
dGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjBmKTsK
LQotICAgIENHQ29udGV4dFNldExpbmVEYXNoKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBk
YXNoT2Zmc2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsKLX0KLQogQ0dDb250ZXh0
UmVmIHNjcmF0Y2hDb250ZXh0KCkKIHsKICAgICBzdGF0aWMgQ0dDb250ZXh0UmVmIHNjcmF0Y2gg
PSAwOwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmgJKHJldmlzaW9uIDM2NzEx
KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDggKzQzLDYgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogCiBDR0FmZmluZVRyYW5z
Zm9ybSBDR0FmZmluZVRyYW5zZm9ybU1ha2VNYXBCZXR3ZWVuUmVjdHMoQ0dSZWN0IHNvdXJjZSwg
Q0dSZWN0IGRlc3QpOwogCi12b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3ND
b250ZXh0KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKLQogQ0dDb250ZXh0
UmVmIHNjcmF0Y2hDb250ZXh0KCk7CiBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goY29uc3Qg
UGF0aCYgcGF0aCwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23612</attachid>
            <date>2008-09-20 14:23:02 -0700</date>
            <delta_ts>2008-09-20 15:23:14 -0700</delta_ts>
            <desc>SVGPaintServer cleanUp - first part</desc>
            <filename>SVGPaintServer-cleanUp-first.patch</filename>
            <type>text/plain</type>
            <size>8763</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjcxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMDgtMDktMjAgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlZCBE
YXNoQXJyYXkgdG8gdGhlIEdyYXBoaWNzQ29udGV4dC4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZURhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZURhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURh
c2gpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvY2cvQ2dTdXBw
b3J0LmNwcDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0Lmg6CisKIDIwMDgt
MDktMjAgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1hbm5Aa2RlLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBFcmljLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDE0IEBA
IHR5cGVkZWYgdW5zaWduZWQgY2hhciBVSW50ODsKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBQTEFU
Rk9STShDRykKK3R5cGVkZWYgVmVjdG9yPENHRmxvYXQ+IERhc2hBcnJheTsKKyNlbGlmIFBMQVRG
T1JNKENBSVJPKQordHlwZWRlZiBWZWN0b3I8ZG91YmxlPiBEYXNoQXJyYXk7CisjZWxzZQordHlw
ZWRlZiBWZWN0b3I8ZmxvYXQ+IERhc2hBcnJheTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oUVQp
ICYmIGRlZmluZWQoUV9XU19XSU4pCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCkBAIC0y
MzEsNiArMjM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJbnRSZWN0IGZvY3Vz
UmluZ0JvdW5kaW5nUmVjdCgpOwogCiAgICAgICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKTsK
KyAgICAgICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zm
c2V0KTsKICAgICAgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbik7CiAgICAgICAgIHZvaWQg
c2V0TWl0ZXJMaW1pdChmbG9hdCk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiAz
NjcxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDcsNiArODA3LDExIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAKICAgICBjYWlyb19zZXRfbGluZV9jYXAobV9k
YXRhLT5jciwgY2Fpcm9DYXApOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURh
c2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit7CisgICAgY2Fp
cm9fc2V0X2Rhc2gobV9kYXRhLT5jciwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSwgZGFz
aE9mZnNldCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9p
biBsaW5lSm9pbikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHJl
dmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxOCw2ICs3MTgsMTEgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcAogICAgIH0KIH0KIAordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNo
T2Zmc2V0KQoreworICAgIENHQ29udGV4dFNldExpbmVEYXNoKHBsYXRmb3JtQ29udGV4dCgpLCBk
YXNoT2Zmc2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsKK30KKwogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCiB7CiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKQEAgLTczNCw3ICs3MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZUpvaW4oTGluZUpvCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiB9Ci0gCisKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQogewogICAgIENHQ29udGV4dEJlZ2luUGF0
aChwbGF0Zm9ybUNvbnRleHQoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkocmV2aXNpb24gMzY3MTEpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksMjQgKzM5LDI1IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgotI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVk
ZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRl
ICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiUGVuLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKIAotI2luY2x1ZGUgPFFTdGFjaz4KKyNpbmNsdWRlIDxRRGVidWc+CiAjaW5jbHVkZSA8UVBh
aW50ZXI+Ci0jaW5jbHVkZSA8UVBvbHlnb25GPgotI2luY2x1ZGUgPFFQYWludGVyUGF0aD4KICNp
bmNsdWRlIDxRUGFpbnREZXZpY2U+Ci0jaW5jbHVkZSA8UVBpeG1hcD4KICNpbmNsdWRlIDxRUGFp
bnRFbmdpbmU+Ci0jaW5jbHVkZSA8UURlYnVnPgorI2luY2x1ZGUgPFFQYWludGVyUGF0aD4KKyNp
bmNsdWRlIDxRUGl4bWFwPgorI2luY2x1ZGUgPFFQb2x5Z29uRj4KKyNpbmNsdWRlIDxRU3RhY2s+
CisjaW5jbHVkZSA8UVZlY3Rvcj4KIAogI2lmbmRlZiBNX1BJCiAjZGVmaW5lIE1fUEkgMy4xNDE1
OTI2NTM1ODk3OTMyMzg0NgpAQCAtNzg0LDYgKzc4NSwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0TGluZUNhcChMaW5lQ2FwCiAgICAgcC0+c2V0UGVuKG5QZW4pOwogfQogCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0
IGRhc2hPZmZzZXQpCit7CisgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKKyAgICBRUGVu
IHBlbiA9IHAtPnBlbigpOworICAgIHVuc2lnbmVkIGludCBkYXNoTGVuZ3RoID0gIWRhc2hlcy5p
c0VtcHR5KCkgPyBkYXNoZXMuc2l6ZSgpIDogMDsKKyAgICBpZiAoZGFzaExlbmd0aCkgeworICAg
ICAgICBRVmVjdG9yPHFyZWFsPiBwYXR0ZXJuOworICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQg
PSAoZGFzaExlbmd0aCAlIDIpID09IDAgPyBkYXNoTGVuZ3RoIDogZGFzaExlbmd0aCAqIDI7CisK
KyAgICAgICAgZm9yKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAg
ICAgICBwYXR0ZXJuLmFwcGVuZChkYXNoZXNbaSAlIGRhc2hMZW5ndGhdIC8gKGZsb2F0KXBlbi53
aWR0aEYoKSk7CisKKyAgICAgICAgcGVuLnNldERhc2hQYXR0ZXJuKHBhdHRlcm4pOworICAgICAg
ICBwZW4uc2V0RGFzaE9mZnNldChkYXNoT2Zmc2V0KTsKKyAgICB9CisgICAgcC0+c2V0UGVuKHBl
bik7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaikK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHUGFpbnRTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR1BhaW50U2VydmVyLmNwcAkocmV2aXNpb24gMzY3MTEpCisrKyBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdQYWludFNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyLmgiCiAKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRl
ICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyU29saWQuaCIKQEAgLTE0
NCw2ICsxNDUsMTkgQEAgU1ZHUGFpbnRTZXJ2ZXIqIFNWR1BhaW50U2VydmVyOjpzdHJva2VQYQog
ICAgIHJldHVybiBzdHJva2VQYWludFNlcnZlcjsKIH0KIAordm9pZCBhcHBseVN0cm9rZVN0eWxl
VG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBj
b25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlj
a25lc3MoU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUt
PnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCksIDEuMGYpKTsKKyAgICBjb250ZXh0LT5zZXRMaW5l
Q2FwKHN0eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpKTsKKyAgICBjb250ZXh0LT5zZXRMaW5l
Sm9pbihzdHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0eWxlKCkpOworICAgIGlmIChzdHlsZS0+c3Zn
U3R5bGUoKS0+am9pblN0eWxlKCkgPT0gTWl0ZXJKb2luKQorICAgICAgICBjb250ZXh0LT5zZXRN
aXRlckxpbWl0KHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VNaXRlckxpbWl0KCkpOworCisgICAg
Y29uc3QgRGFzaEFycmF5JiBkYXNoZXMgPSBkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUob2Jq
ZWN0LT5zdHlsZSgpKTsKKyAgICBmbG9hdCBkYXNoT2Zmc2V0ID0gU1ZHUmVuZGVyU3R5bGU6OmNz
c1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZURhc2hP
ZmZzZXQoKSwgMC4wZik7CisgICAgY29udGV4dC0+c2V0TGluZURhc2goZGFzaGVzLCBkYXNoT2Zm
c2V0KTsKK30KKwogRGFzaEFycmF5IGRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgRGFzaEFycmF5IGFycmF5OwpJbmRleDogV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5oCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQz
LDggQEAgUVRfRU5EX05BTUVTUEFDRQogCiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgdHlwZWRlZiBW
ZWN0b3I8Q0dGbG9hdD4gRGFzaEFycmF5OworI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgdHlw
ZWRlZiBWZWN0b3I8ZG91YmxlPiBEYXNoQXJyYXk7CiAjZWxzZQogICAgIHR5cGVkZWYgVmVjdG9y
PGZsb2F0PiBEYXNoQXJyYXk7CiAjZW5kaWYKQEAgLTEwNyw2ICsxMDksNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICBTVkdQYWludFNlcnZlciogZ2V0UGFpbnRTZXJ2ZXJCeUlkKERvY3Vt
ZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJik7CiAKKyAgICB2b2lkIGFwcGx5U3Ryb2tlU3R5bGVU
b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJPYmpl
Y3QqKTsKICAgICBEYXNoQXJyYXkgZGFzaEFycmF5RnJvbVJlbmRlcmluZ1N0eWxlKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSk7CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmNwcAkocmV2aXNpb24gMzY3MTEpCisrKyBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9jZy9DZ1N1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwyMCAr
NDgsNiBAQCBDR0FmZmluZVRyYW5zZm9ybSBDR0FmZmluZVRyYW5zZm9ybU1ha2VNCiAgICAgcmV0
dXJuIHRyYW5zZm9ybTsKIH0KIAotdm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKLXsKLSAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoU1ZHUmVuZGVy
U3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0
cm9rZVdpZHRoKCksIDEuMGYpKTsKLSAgICBjb250ZXh0LT5zZXRMaW5lQ2FwKHN0eWxlLT5zdmdT
dHlsZSgpLT5jYXBTdHlsZSgpKTsKLSAgICBjb250ZXh0LT5zZXRMaW5lSm9pbihzdHlsZS0+c3Zn
U3R5bGUoKS0+am9pblN0eWxlKCkpOwotICAgIGNvbnRleHQtPnNldE1pdGVyTGltaXQoc3R5bGUt
PnN2Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGltaXQoKSk7Ci0KLSAgICAvLyBGSVhNRTogRGFzaEFy
cmF5IHN1cHBvcnQgY291bGQgZWFzaWx5IGJlIG1vdmVkIGludG8gR3JhcGhpY3NDb250ZXh0LCBh
bmQgdGhpcyBmdW5jdGlvbiB0aGVuIG1hZGUgeC1wbGF0Zm9ybQotICAgIGNvbnN0IERhc2hBcnJh
eSYgZGFzaGVzID0gZGFzaEFycmF5RnJvbVJlbmRlcmluZ1N0eWxlKHN0eWxlKTsKLSAgICBmbG9h
dCBkYXNoT2Zmc2V0ID0gU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVj
dCwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZURhc2hPZmZzZXQoKSwgMC4wZik7Ci0KLSAgICBD
R0NvbnRleHRTZXRMaW5lRGFzaChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgZGFzaE9mZnNl
dCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7Ci19Ci0KIENHQ29udGV4dFJlZiBzY3Jh
dGNoQ29udGV4dCgpCiB7CiAgICAgc3RhdGljIENHQ29udGV4dFJlZiBzY3JhdGNoID0gMDsKSW5k
ZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5oCShyZXZpc2lvbiAzNjcxMSkKKysrIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4
ICs0Myw2IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIAogQ0dBZmZpbmVUcmFuc2Zvcm0gQ0dB
ZmZpbmVUcmFuc2Zvcm1NYWtlTWFwQmV0d2VlblJlY3RzKENHUmVjdCBzb3VyY2UsIENHUmVjdCBk
ZXN0KTsKIAotdm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCos
IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0KIENHQ29udGV4dFJlZiBzY3Jh
dGNoQ29udGV4dCgpOwogRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KGNvbnN0IFBhdGgmIHBh
dGgsIFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23615</attachid>
            <date>2008-09-20 15:23:14 -0700</date>
            <delta_ts>2008-09-20 15:50:52 -0700</delta_ts>
            <desc>SVGPaintServer cleanUp - first part</desc>
            <filename>SVGPaintServer-cleanUp-first.patch</filename>
            <type>text/plain</type>
            <size>11358</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjcxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMDgtMDktMjAgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlZCBE
YXNoQXJyYXkgdG8gdGhlIEdyYXBoaWNzQ29udGV4dC4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rhc2hBcnJheS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVEYXNoKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFpbnRT
ZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dCk6
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmg6CisgICAgICAgICogc3Zn
L2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5jcHA6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2NnL0Nn
U3VwcG9ydC5oOgorCiAyMDA4LTA5LTIwICBNYXR0IExpbGVrICA8d2Via2l0QG1hdHRsaWxlay5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCkluZGV4OiBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlz
aW9uIDM2NzExKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAt
MTU2NCw2ICsxNTY0LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggXAorCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRGFzaEFycmF5LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRQb2ludC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAgXApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rhc2hBcnJheS5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBEaXJrIFNjaHVsemUgPHZiczg1QGdt
eC5kZT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBEYXNoQXJyYXlfaAorI2RlZmluZSBEYXNoQXJyYXlfaAor
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIFBMQVRGT1JNKENHKQordHlwZWRlZiBWZWN0
b3I8Q0dGbG9hdD4gRGFzaEFycmF5OworI2VsaWYgUExBVEZPUk0oQ0FJUk8pCit0eXBlZGVmIFZl
Y3Rvcjxkb3VibGU+IERhc2hBcnJheTsKKyNlbHNlCit0eXBlZGVmIFZlY3RvcjxmbG9hdD4gRGFz
aEFycmF5OworI2VuZGlmCisKKyNlbmRpZiAvLyBEYXNoQXJyYXlfaApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAzNjcxMSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgR3JhcGhpY3NDb250ZXh0X2gKICNkZWZpbmUg
R3JhcGhpY3NDb250ZXh0X2gKIAorI2luY2x1ZGUgIkRhc2hBcnJheS5oIgogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAt
MjMxLDYgKzIzMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgSW50UmVjdCBmb2N1
c1JpbmdCb3VuZGluZ1JlY3QoKTsKIAogICAgICAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCk7
CisgICAgICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9m
ZnNldCk7CiAgICAgICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pOwogICAgICAgICB2b2lk
IHNldE1pdGVyTGltaXQoZmxvYXQpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkocmV2aXNpb24g
MzY3MTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODA3LDYgKzgwNywxMSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwCiAgICAgY2Fpcm9fc2V0X2xpbmVfY2FwKG1f
ZGF0YS0+Y3IsIGNhaXJvQ2FwKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVE
YXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQoreworICAgIGNh
aXJvX3NldF9kYXNoKG1fZGF0YS0+Y3IsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCksIGRh
c2hPZmZzZXQpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpv
aW4gbGluZUpvaW4pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCShy
ZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTgsNiArNzE4LDExIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAKICAgICB9CiB9CiAKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFz
aE9mZnNldCkKK3sKKyAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChwbGF0Zm9ybUNvbnRleHQoKSwg
ZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7Cit9CisKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCkBAIC03MzQsNyArNzM5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVKb2luKExpbmVKbwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogfQotIAorCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QYXRoKCkKIHsKICAgICBDR0NvbnRleHRCZWdpblBh
dGgocGxhdGZvcm1Db250ZXh0KCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHJldmlzaW9uIDM2NzExKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDI0ICszOSwyNSBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKLSNpbmNsdWRlICJQYXRoLmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1
ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVk
ZSAiUGF0dGVybi5oIgogI2luY2x1ZGUgIlBlbi5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAKLSNpbmNsdWRlIDxRU3RhY2s+CisjaW5jbHVkZSA8UURlYnVnPgogI2luY2x1ZGUgPFFQ
YWludGVyPgotI2luY2x1ZGUgPFFQb2x5Z29uRj4KLSNpbmNsdWRlIDxRUGFpbnRlclBhdGg+CiAj
aW5jbHVkZSA8UVBhaW50RGV2aWNlPgotI2luY2x1ZGUgPFFQaXhtYXA+CiAjaW5jbHVkZSA8UVBh
aW50RW5naW5lPgotI2luY2x1ZGUgPFFEZWJ1Zz4KKyNpbmNsdWRlIDxRUGFpbnRlclBhdGg+Cisj
aW5jbHVkZSA8UVBpeG1hcD4KKyNpbmNsdWRlIDxRUG9seWdvbkY+CisjaW5jbHVkZSA8UVN0YWNr
PgorI2luY2x1ZGUgPFFWZWN0b3I+CiAKICNpZm5kZWYgTV9QSQogI2RlZmluZSBNX1BJIDMuMTQx
NTkyNjUzNTg5NzkzMjM4NDYKQEAgLTc4NCw2ICs3ODUsMjggQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldExpbmVDYXAoTGluZUNhcAogICAgIHAtPnNldFBlbihuUGVuKTsKIH0KIAordm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9h
dCBkYXNoT2Zmc2V0KQoreworICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7CisgICAgUVBl
biBwZW4gPSBwLT5wZW4oKTsKKyAgICB1bnNpZ25lZCBpbnQgZGFzaExlbmd0aCA9IGRhc2hlcy5z
aXplKCk7CisgICAgaWYgKGRhc2hMZW5ndGgpIHsKKyAgICAgICAgUVZlY3RvcjxxcmVhbD4gcGF0
dGVybjsKKyAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gZGFzaExlbmd0aDsKKyAgICAgICAg
aWYgKChkYXNoTGVuZ3RoICUgMikgIT0gMCkKKyAgICAgICAgICAgIGNvdW50ICo9IDI7CisKKwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAg
ICAgICBwYXR0ZXJuLmFwcGVuZChkYXNoZXNbaSAlIGRhc2hMZW5ndGhdIC8gbmFycm93UHJlY2lz
aW9uVG9GbG9hdChwZW4ud2lkdGhGKCkpKTsKKworCisgICAgICAgIHBlbi5zZXREYXNoUGF0dGVy
bihwYXR0ZXJuKTsKKyAgICAgICAgcGVuLnNldERhc2hPZmZzZXQoZGFzaE9mZnNldCk7CisgICAg
fQorICAgIHAtPnNldFBlbihwZW4pOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGlu
ZUpvaW4oTGluZUpvaW4gbGopCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKSW5kZXg6
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5jcHAJKHJldmlzaW9uIDM2NzExKQor
KysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdQYWludFNl
cnZlci5oIgogCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdQYWludFNl
cnZlclNvbGlkLmgiCkBAIC0xNDQsNiArMTQ1LDE5IEBAIFNWR1BhaW50U2VydmVyKiBTVkdQYWlu
dFNlcnZlcjo6c3Ryb2tlUGEKICAgICByZXR1cm4gc3Ryb2tlUGFpbnRTZXJ2ZXI7CiB9CiAKK3Zv
aWQgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJl
bmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgY29u
dGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xl
bmd0aChvYmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjBmKSk7Cisg
ICAgY29udGV4dC0+c2V0TGluZUNhcChzdHlsZS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSk7Cisg
ICAgY29udGV4dC0+c2V0TGluZUpvaW4oc3R5bGUtPnN2Z1N0eWxlKCktPmpvaW5TdHlsZSgpKTsK
KyAgICBpZiAoc3R5bGUtPnN2Z1N0eWxlKCktPmpvaW5TdHlsZSgpID09IE1pdGVySm9pbikKKyAg
ICAgICAgY29udGV4dC0+c2V0TWl0ZXJMaW1pdChzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlTWl0
ZXJMaW1pdCgpKTsKKworICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzID0gZGFzaEFycmF5RnJv
bVJlbmRlcmluZ1N0eWxlKG9iamVjdC0+c3R5bGUoKSk7CisgICAgZmxvYXQgZGFzaE9mZnNldCA9
IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdT
dHlsZSgpLT5zdHJva2VEYXNoT2Zmc2V0KCksIDAuMGYpOworICAgIGNvbnRleHQtPnNldExpbmVE
YXNoKGRhc2hlcywgZGFzaE9mZnNldCk7Cit9CisKIERhc2hBcnJheSBkYXNoQXJyYXlGcm9tUmVu
ZGVyaW5nU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIERhc2hBcnJheSBh
cnJheTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaAkocmV2aXNpb24g
MzY3MTEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogCisjaW5jbHVkZSAi
RGFzaEFycmF5LmgiCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2UuaCIKIAogI2lmIFBMQVRGT1JNKENH
KQpAQCAtNDEsMTIgKzQyLDYgQEAgY2xhc3MgUVBlbjsKIFFUX0VORF9OQU1FU1BBQ0UKICNlbmRp
ZgogCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgdHlwZWRlZiBWZWN0b3I8Q0dGbG9hdD4gRGFzaEFy
cmF5OwotI2Vsc2UKLSAgICB0eXBlZGVmIFZlY3RvcjxmbG9hdD4gRGFzaEFycmF5OwotI2VuZGlm
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGVudW0gU1ZHUGFpbnRTZXJ2ZXJUeXBlIHsK
QEAgLTEwNyw2ICsxMDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBTVkdQYWludFNl
cnZlciogZ2V0UGFpbnRTZXJ2ZXJCeUlkKERvY3VtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJik7
CiAKKyAgICB2b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0Kiwg
UmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKICAgICBEYXNoQXJyYXkgZGFzaEFy
cmF5RnJvbVJlbmRlcmluZ1N0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSk7CiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9y
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmNw
cAkocmV2aXNpb24gMzY3MTEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9DZ1N1cHBvcnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwyMCArNDgsNiBAQCBDR0FmZmluZVRyYW5zZm9ybSBD
R0FmZmluZVRyYW5zZm9ybU1ha2VNCiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAotdm9pZCBh
cHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBjb250ZXh0
LT5zZXRTdHJva2VUaGlja25lc3MoU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3Ro
KG9iamVjdCwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCksIDEuMGYpKTsKLSAgICBj
b250ZXh0LT5zZXRMaW5lQ2FwKHN0eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpKTsKLSAgICBj
b250ZXh0LT5zZXRMaW5lSm9pbihzdHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0eWxlKCkpOwotICAg
IGNvbnRleHQtPnNldE1pdGVyTGltaXQoc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGlt
aXQoKSk7Ci0KLSAgICAvLyBGSVhNRTogRGFzaEFycmF5IHN1cHBvcnQgY291bGQgZWFzaWx5IGJl
IG1vdmVkIGludG8gR3JhcGhpY3NDb250ZXh0LCBhbmQgdGhpcyBmdW5jdGlvbiB0aGVuIG1hZGUg
eC1wbGF0Zm9ybQotICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzID0gZGFzaEFycmF5RnJvbVJl
bmRlcmluZ1N0eWxlKHN0eWxlKTsKLSAgICBmbG9hdCBkYXNoT2Zmc2V0ID0gU1ZHUmVuZGVyU3R5
bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9r
ZURhc2hPZmZzZXQoKSwgMC4wZik7Ci0KLSAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKSwgZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNp
emUoKSk7Ci19Ci0KIENHQ29udGV4dFJlZiBzY3JhdGNoQ29udGV4dCgpCiB7CiAgICAgc3RhdGlj
IENHQ29udGV4dFJlZiBzY3JhdGNoID0gMDsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Nn
L0NnU3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3Vw
cG9ydC5oCShyZXZpc2lvbiAzNjcxMSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3Vw
cG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0Myw2IEBAIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKIAogQ0dBZmZpbmVUcmFuc2Zvcm0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlTWFwQmV0d2Vl
blJlY3RzKENHUmVjdCBzb3VyY2UsIENHUmVjdCBkZXN0KTsKIAotdm9pZCBhcHBseVN0cm9rZVN0
eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCosIFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVy
T2JqZWN0Kik7Ci0KIENHQ29udGV4dFJlZiBzY3JhdGNoQ29udGV4dCgpOwogRmxvYXRSZWN0IHN0
cm9rZUJvdW5kaW5nQm94KGNvbnN0IFBhdGgmIHBhdGgsIFJlbmRlclN0eWxlKiwgY29uc3QgUmVu
ZGVyT2JqZWN0Kik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23616</attachid>
            <date>2008-09-20 15:50:52 -0700</date>
            <delta_ts>2008-09-21 03:00:52 -0700</delta_ts>
            <desc>SVGPaintServer cleanUp - first part</desc>
            <filename>SVGPaintServer-cleanUp-first.patch</filename>
            <type>text/plain</type>
            <size>11223</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjcxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMDgtMDktMjAgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlZCBE
YXNoQXJyYXkgdG8gdGhlIEdyYXBoaWNzQ29udGV4dC4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rhc2hBcnJheS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVEYXNoKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFpbnRT
ZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dCk6
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmg6CisgICAgICAgICogc3Zn
L2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5jcHA6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2NnL0Nn
U3VwcG9ydC5oOgorCiAyMDA4LTA5LTIwICBNYXR0IExpbGVrICA8d2Via2l0QG1hdHRsaWxlay5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCkluZGV4OiBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlz
aW9uIDM2NzExKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAt
MTU2NCw2ICsxNTY0LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggXAorCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRGFzaEFycmF5LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRQb2ludC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAgXApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rhc2hBcnJheS5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBEaXJrIFNjaHVsemUgPHZiczg1QGdt
eC5kZT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBEYXNoQXJyYXlfaAorI2RlZmluZSBEYXNoQXJyYXlfaAor
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgUExBVEZPUk0oQ0cpCit0eXBlZGVmIFZl
Y3RvcjxDR0Zsb2F0PiBEYXNoQXJyYXk7CisjZWxpZiBQTEFURk9STShDQUlSTykKK3R5cGVkZWYg
VmVjdG9yPGRvdWJsZT4gRGFzaEFycmF5OworI2Vsc2UKK3R5cGVkZWYgVmVjdG9yPGZsb2F0PiBE
YXNoQXJyYXk7CisjZW5kaWYKKworI2VuZGlmIC8vIERhc2hBcnJheV9oCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDM2NzExKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBHcmFwaGljc0NvbnRleHRfaAogI2RlZmlu
ZSBHcmFwaGljc0NvbnRleHRfaAogCisjaW5jbHVkZSAiRGFzaEFycmF5LmgiCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBA
IC0yMzEsNiArMjMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJbnRSZWN0IGZv
Y3VzUmluZ0JvdW5kaW5nUmVjdCgpOwogCiAgICAgICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2Fw
KTsKKyAgICAgICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNo
T2Zmc2V0KTsKICAgICAgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbik7CiAgICAgICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lv
biAzNjcxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDcsNiArODA3LDExIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAKICAgICBjYWlyb19zZXRfbGluZV9jYXAo
bV9kYXRhLT5jciwgY2Fpcm9DYXApOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit7CisgICAg
Y2Fpcm9fc2V0X2Rhc2gobV9kYXRhLT5jciwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSwg
ZGFzaE9mZnNldCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5l
Sm9pbiBsaW5lSm9pbikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJ
KHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxOCw2ICs3MTgsMTEgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcAogICAgIH0KIH0KIAordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBk
YXNoT2Zmc2V0KQoreworICAgIENHQ29udGV4dFNldExpbmVEYXNoKHBsYXRmb3JtQ29udGV4dCgp
LCBkYXNoT2Zmc2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsKK30KKwogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKQEAgLTczNCw3ICs3MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0TGluZUpvaW4oTGluZUpvCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiB9Ci0gCisK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQogewogICAgIENHQ29udGV4dEJlZ2lu
UGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkocmV2aXNpb24gMzY3MTEpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksMjQgKzM5LDI1IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgotI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5j
bHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNs
dWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiUGVuLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKIAotI2luY2x1ZGUgPFFTdGFjaz4KKyNpbmNsdWRlIDxRRGVidWc+CiAjaW5jbHVkZSA8
UVBhaW50ZXI+Ci0jaW5jbHVkZSA8UVBvbHlnb25GPgotI2luY2x1ZGUgPFFQYWludGVyUGF0aD4K
ICNpbmNsdWRlIDxRUGFpbnREZXZpY2U+Ci0jaW5jbHVkZSA8UVBpeG1hcD4KICNpbmNsdWRlIDxR
UGFpbnRFbmdpbmU+Ci0jaW5jbHVkZSA8UURlYnVnPgorI2luY2x1ZGUgPFFQYWludGVyUGF0aD4K
KyNpbmNsdWRlIDxRUGl4bWFwPgorI2luY2x1ZGUgPFFQb2x5Z29uRj4KKyNpbmNsdWRlIDxRU3Rh
Y2s+CisjaW5jbHVkZSA8UVZlY3Rvcj4KIAogI2lmbmRlZiBNX1BJCiAjZGVmaW5lIE1fUEkgMy4x
NDE1OTI2NTM1ODk3OTMyMzg0NgpAQCAtNzg0LDYgKzc4NSwyNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwCiAgICAgcC0+c2V0UGVuKG5QZW4pOwogfQogCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZs
b2F0IGRhc2hPZmZzZXQpCit7CisgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKKyAgICBR
UGVuIHBlbiA9IHAtPnBlbigpOworICAgIHVuc2lnbmVkIGRhc2hMZW5ndGggPSBkYXNoZXMuc2l6
ZSgpOworICAgIGlmIChkYXNoTGVuZ3RoKSB7CisgICAgICAgIFFWZWN0b3I8cXJlYWw+IHBhdHRl
cm47CisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gZGFzaExlbmd0aDsKKyAgICAgICAgaWYgKGRh
c2hMZW5ndGggJSAyKQorICAgICAgICAgICAgY291bnQgKj0gMjsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIHBhdHRlcm4uYXBwZW5k
KGRhc2hlc1tpICUgZGFzaExlbmd0aF0gLyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBlbi53aWR0
aEYoKSkpOworCisgICAgICAgIHBlbi5zZXREYXNoUGF0dGVybihwYXR0ZXJuKTsKKyAgICAgICAg
cGVuLnNldERhc2hPZmZzZXQoZGFzaE9mZnNldCk7CisgICAgfQorICAgIHAtPnNldFBlbihwZW4p
OworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGopCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR1BhaW50U2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdQYWludFNlcnZlci5jcHAJKHJldmlzaW9uIDM2NzExKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHUGFpbnRTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdQYWludFNlcnZlci5oIgogCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAi
UmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdQYWludFNlcnZlclNvbGlkLmgiCkBAIC0xNDQs
NiArMTQ1LDE5IEBAIFNWR1BhaW50U2VydmVyKiBTVkdQYWludFNlcnZlcjo6c3Ryb2tlUGEKICAg
ICByZXR1cm4gc3Ryb2tlUGFpbnRTZXJ2ZXI7CiB9CiAKK3ZvaWQgYXBwbHlTdHJva2VTdHlsZVRv
Q29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tu
ZXNzKFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5z
dmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjBmKSk7CisgICAgY29udGV4dC0+c2V0TGluZUNh
cChzdHlsZS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSk7CisgICAgY29udGV4dC0+c2V0TGluZUpv
aW4oc3R5bGUtPnN2Z1N0eWxlKCktPmpvaW5TdHlsZSgpKTsKKyAgICBpZiAoc3R5bGUtPnN2Z1N0
eWxlKCktPmpvaW5TdHlsZSgpID09IE1pdGVySm9pbikKKyAgICAgICAgY29udGV4dC0+c2V0TWl0
ZXJMaW1pdChzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsKKworICAgIGNv
bnN0IERhc2hBcnJheSYgZGFzaGVzID0gZGFzaEFycmF5RnJvbVJlbmRlcmluZ1N0eWxlKG9iamVj
dC0+c3R5bGUoKSk7CisgICAgZmxvYXQgZGFzaE9mZnNldCA9IFNWR1JlbmRlclN0eWxlOjpjc3NQ
cmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VEYXNoT2Zm
c2V0KCksIDAuMGYpOworICAgIGNvbnRleHQtPnNldExpbmVEYXNoKGRhc2hlcywgZGFzaE9mZnNl
dCk7Cit9CisKIERhc2hBcnJheSBkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlKQogewogICAgIERhc2hBcnJheSBhcnJheTsKSW5kZXg6IFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaAkocmV2aXNpb24gMzY3MTEpCisrKyBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogCisjaW5jbHVkZSAiRGFzaEFycmF5LmgiCiAjaW5jbHVk
ZSAiU1ZHUmVzb3VyY2UuaCIKIAogI2lmIFBMQVRGT1JNKENHKQpAQCAtNDEsMTIgKzQyLDYgQEAg
Y2xhc3MgUVBlbjsKIFFUX0VORF9OQU1FU1BBQ0UKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ0cp
Ci0gICAgdHlwZWRlZiBWZWN0b3I8Q0dGbG9hdD4gRGFzaEFycmF5OwotI2Vsc2UKLSAgICB0eXBl
ZGVmIFZlY3RvcjxmbG9hdD4gRGFzaEFycmF5OwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgIGVudW0gU1ZHUGFpbnRTZXJ2ZXJUeXBlIHsKQEAgLTEwNyw2ICsxMDIsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBTVkdQYWludFNlcnZlciogZ2V0UGFpbnRTZXJ2ZXJC
eUlkKERvY3VtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJik7CiAKKyAgICB2b2lkIGFwcGx5U3Ry
b2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBS
ZW5kZXJPYmplY3QqKTsKICAgICBEYXNoQXJyYXkgZGFzaEFycmF5RnJvbVJlbmRlcmluZ1N0eWxl
KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSk7CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5k
ZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmNwcAkocmV2aXNpb24gMzY3MTEpCisr
KyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9DZ1N1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OCwyMCArNDgsNiBAQCBDR0FmZmluZVRyYW5zZm9ybSBDR0FmZmluZVRyYW5zZm9ybU1ha2VN
CiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAotdm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250
ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBS
ZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3Mo
U1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN2Z1N0
eWxlKCktPnN0cm9rZVdpZHRoKCksIDEuMGYpKTsKLSAgICBjb250ZXh0LT5zZXRMaW5lQ2FwKHN0
eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpKTsKLSAgICBjb250ZXh0LT5zZXRMaW5lSm9pbihz
dHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0eWxlKCkpOwotICAgIGNvbnRleHQtPnNldE1pdGVyTGlt
aXQoc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGltaXQoKSk7Ci0KLSAgICAvLyBGSVhN
RTogRGFzaEFycmF5IHN1cHBvcnQgY291bGQgZWFzaWx5IGJlIG1vdmVkIGludG8gR3JhcGhpY3ND
b250ZXh0LCBhbmQgdGhpcyBmdW5jdGlvbiB0aGVuIG1hZGUgeC1wbGF0Zm9ybQotICAgIGNvbnN0
IERhc2hBcnJheSYgZGFzaGVzID0gZGFzaEFycmF5RnJvbVJlbmRlcmluZ1N0eWxlKHN0eWxlKTsK
LSAgICBmbG9hdCBkYXNoT2Zmc2V0ID0gU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVu
Z3RoKG9iamVjdCwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZURhc2hPZmZzZXQoKSwgMC4wZik7
Ci0KLSAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwg
ZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7Ci19Ci0KIENHQ29udGV4
dFJlZiBzY3JhdGNoQ29udGV4dCgpCiB7CiAgICAgc3RhdGljIENHQ29udGV4dFJlZiBzY3JhdGNo
ID0gMDsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5oCShyZXZpc2lvbiAzNjcx
MSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw4ICs0Myw2IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIAogQ0dBZmZpbmVUcmFu
c2Zvcm0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlTWFwQmV0d2VlblJlY3RzKENHUmVjdCBzb3VyY2Us
IENHUmVjdCBkZXN0KTsKIAotdm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNz
Q29udGV4dCosIFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0KIENHQ29udGV4
dFJlZiBzY3JhdGNoQ29udGV4dCgpOwogRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KGNvbnN0
IFBhdGgmIHBhdGgsIFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23622</attachid>
            <date>2008-09-21 03:00:52 -0700</date>
            <delta_ts>2008-09-21 03:39:53 -0700</delta_ts>
            <desc>SVGPaintServer cleanUp - second part</desc>
            <filename>SVGPaintServer-cleanUp-second.patch</filename>
            <type>text/plain</type>
            <size>12523</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjczNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMDgtMDktMjEgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGwgcGxh
dGZvcm1zIHVzZSB0aGUgRGFzaEFycmF5IGluIHRoZSBHcmFwaGljc0NvbnRleHQuCisKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKToKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1cCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNz
L2NhaXJvL1NWR1BhaW50U2VydmVyU29saWRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYWludFNlcnZlclNvbGlkOjpzZXR1cCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL3F0L1NW
R1BhaW50U2VydmVyR3JhZGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNl
cnZlckdyYWRpZW50OjpzZXR1cCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50
U2VydmVyUXQuY3BwOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclNv
bGlkUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6c2V0dXAp
OgorCiAyMDA4LTA5LTIxICBEaXJrIFNjaHVsemUgIDx2YnM4NUBnbXguZGU+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgZXNlaWRlbC4gIExhbmRlZCBieSBlc2VpZGVsLgpJbmRleDogV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdQYWludFNlcnZlci5oCShyZXZpc2lvbiAzNjczNikKKysrIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSw2
IEBACiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+
CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPHFnbG9iYWwuaD4KLVFUX0JF
R0lOX05BTUVTUEFDRQotY2xhc3MgUVBlbjsKLVFUX0VORF9OQU1FU1BBQ0UKLSNlbmRpZgotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBlbnVtIFNWR1BhaW50U2VydmVyVHlwZSB7CkBAIC05
MSw5ICs4NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGlwVG9GaWxs
UGF0aChDR0NvbnRleHRSZWYsIGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwogI2VuZGlmCiAK
LSNpZiBQTEFURk9STShRVCkKLSAgICAgICAgdm9pZCBzZXRQZW5Qcm9wZXJ0aWVzKGNvbnN0IFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiwgUVBlbiYpIGNvbnN0OwotI2VuZGlmCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICBTVkdQYWludFNlcnZlcigpOyAgICAgICAgCiAgICAgfTsK
SW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyR3JhZGllbnRD
YWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFp
bnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcAkocmV2aXNpb24gMzY3MzYpCisrKyBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlckdyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwyOSArMzAsOSBAQAogI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKICNpbmNs
dWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgotI2lu
Y2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFRP
RE86IFNoYXJlIHRoaXMgY29kZSB3aXRoIGFsbCBTVkdQYWludFNlcnZlcnMKLXN0YXRpYyB2b2lk
IGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBTVkdSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQotewot
ICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBjb250
ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVu
Z3RoKG9iamVjdCwgc3R5bGUtPnN0cm9rZVdpZHRoKCksIDEuMCkpOwotICAgIGNvbnRleHQtPnNl
dExpbmVDYXAoc3R5bGUtPmNhcFN0eWxlKCkpOwotICAgIGNvbnRleHQtPnNldExpbmVKb2luKHN0
eWxlLT5qb2luU3R5bGUoKSk7Ci0gICAgaWYgKHN0eWxlLT5qb2luU3R5bGUoKSA9PSBNaXRlckpv
aW4pCi0gICAgICAgIGNvbnRleHQtPnNldE1pdGVyTGltaXQoc3R5bGUtPnN0cm9rZU1pdGVyTGlt
aXQoKSk7Ci0KLSAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcyA9IGRhc2hBcnJheUZyb21SZW5k
ZXJpbmdTdHlsZShvYmplY3QtPnN0eWxlKCkpOwotICAgIE93bkFycmF5UHRyPGRvdWJsZT4gZHNo
KG5ldyBkb3VibGVbZGFzaGVzLnNpemUoKV0pOwotICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8
IGRhc2hlcy5zaXplKCkgOyBpKyspCi0gICAgICAgIGRzaFtpXSA9IGRhc2hlc1tpXTsKLSAgICBk
b3VibGUgZGFzaE9mZnNldCA9IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChv
YmplY3QsIHN0eWxlLT5zdHJva2VEYXNoT2Zmc2V0KCksIDAuMCk7Ci0gICAgY2Fpcm9fc2V0X2Rh
c2goY3IsIGRzaC5nZXQoKSwgZGFzaGVzLnNpemUoKSwgZGFzaE9mZnNldCk7Ci19Ci0KIGJvb2wg
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwg
Y29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29s
IGlzUGFpbnRpbmdUZXh0KSBjb25zdAogewogICAgIG1fb3duZXJFbGVtZW50LT5idWlsZEdyYWRp
ZW50KCk7CkBAIC02Myw3ICs0Myw3IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0
dXAoR3JhcGgKICAgICBjYWlyb19tYXRyaXhfdCBtYXRyaXg7CiAgICAgY2Fpcm9fbWF0cml4X2lu
aXRfaWRlbnRpdHkgKCZtYXRyaXgpOwogICAgIGNvbnN0IGNhaXJvX21hdHJpeF90IGdyYWRpZW50
X21hdHJpeCA9IGdyYWRpZW50VHJhbnNmb3JtKCk7Ci0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUq
IHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpOworICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKIAogICAgIGlmICh0aGlzLT50eXBlKCkgPT0gTGluZWFy
R3JhZGllbnRQYWludFNlcnZlcikgewogICAgICAgICBjb25zdCBTVkdQYWludFNlcnZlckxpbmVh
ckdyYWRpZW50KiBsaW5lYXIgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdQYWludFNlcnZlckxpbmVh
ckdyYWRpZW50Kj4odGhpcyk7CkBAIC0xNjEsMTAgKzE0MSwxMCBAQCBib29sIFNWR1BhaW50U2Vy
dmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoCiAgICAgICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9y
X3N0b3BfcmdiYShwYXR0ZXJuLCBvZmZzZXQsIGNvbG9yLnJlZCgpIC8gMjU1LjAsIGNvbG9yLmdy
ZWVuKCkgLyAyNTUuMCwgY29sb3IuYmx1ZSgpIC8gMjU1LjAsIGNvbG9yLmFscGhhKCkgLyAyNTUu
MCk7CiAgICAgfQogCi0gICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBz
dHlsZS0+aGFzRmlsbCgpKQotICAgICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBzdHlsZS0+
ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBD
QUlST19GSUxMX1JVTEVfV0lORElORyk7CisgICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJn
ZXRUeXBlKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKQorICAgICAgICBjb250ZXh0
LT5zZXRGaWxsUnVsZShzdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSk7CiAKLSAgICBpZiAo
KHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhhc1N0cm9rZSgpKQor
ICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdHlsZS0+c3ZnU3R5
bGUoKS0+aGFzU3Ryb2tlKCkpCiAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29u
dGV4dCwgc3R5bGUsIG9iamVjdCk7CiAKICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwYXR0ZXJu
KTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyUGF0dGVy
bkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQ
YWludFNlcnZlclBhdHRlcm5DYWlyby5jcHAJKHJldmlzaW9uIDM2NzM2KQorKysgV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMywzMiArMzMsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBU
T0RPOiBTaGFyZSB0aGlzIGNvZGUgd2l0aCBhbGwgU1ZHUGFpbnRTZXJ2ZXJzCi1zdGF0aWMgdm9p
ZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsK
LSAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgY29u
dGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xl
bmd0aChvYmplY3QsIHN0eWxlLT5zdHJva2VXaWR0aCgpLCAxLjApKTsKLSAgICBjb250ZXh0LT5z
ZXRMaW5lQ2FwKHN0eWxlLT5jYXBTdHlsZSgpKTsKLSAgICBjb250ZXh0LT5zZXRMaW5lSm9pbihz
dHlsZS0+am9pblN0eWxlKCkpOwotICAgIGlmIChzdHlsZS0+am9pblN0eWxlKCkgPT0gTWl0ZXJK
b2luKQotICAgICAgICBjb250ZXh0LT5zZXRNaXRlckxpbWl0KHN0eWxlLT5zdHJva2VNaXRlckxp
bWl0KCkpOwotCi0gICAgY29uc3QgRGFzaEFycmF5JiBkYXNoZXMgPSBkYXNoQXJyYXlGcm9tUmVu
ZGVyaW5nU3R5bGUob2JqZWN0LT5zdHlsZSgpKTsKLSAgICBPd25BcnJheVB0cjxkb3VibGU+IGRz
aChuZXcgZG91YmxlW2Rhc2hlcy5zaXplKCldKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGRhc2hlcy5zaXplKCkgOyBpKyspCi0gICAgICAgIGRzaFtpXSA9IGRhc2hlc1tpXTsKLSAgICBk
b3VibGUgZGFzaE9mZnNldCA9IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChv
YmplY3QsIHN0eWxlLT5zdHJva2VEYXNoT2Zmc2V0KCksIDAuMCk7Ci0gICAgY2Fpcm9fc2V0X2Rh
c2goY3IsIGRzaC5nZXQoKSwgZGFzaGVzLnNpemUoKSwgZGFzaE9mZnNldCk7Ci19Ci0KIGJvb2wg
U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBj
b25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUsIGJvb2wg
aXNQYWludGluZ1RleHQpIGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0IHRhcmdldFJlY3QgPSBvYmpl
Y3QtPnJlbGF0aXZlQkJveChmYWxzZSk7CiAKLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5
bGUgPSBvYmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gb2JqZWN0LT5zdHlsZSgpOwogCi0gICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBTVkdSZW5kZXJT
dHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3Ryb2tlV2lkdGgoKSwg
MS4wKTsKKyAgICBmbG9hdCBzdHJva2VXaWR0aCA9IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRp
dmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjBm
KTsKIAogICAgIGlmICh0YXJnZXRSZWN0LndpZHRoKCkgPT0gMCkKICAgICAgICAgdGFyZ2V0UmVj
dCA9IEZsb2F0UmVjdCh0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHN0cm9rZVdpZHRo
LCB0YXJnZXRSZWN0LmhlaWdodCgpKTsKQEAgLTgzLDEwICs2NCwxMCBAQCBib29sIFNWR1BhaW50
U2VydmVyUGF0dGVybjo6c2V0dXAoR3JhcGhpCiAgICAgY2Fpcm9fbWF0cml4X2ludmVydCgmbWF0
cml4KTsKICAgICBjYWlyb19wYXR0ZXJuX3NldF9tYXRyaXgocGF0dGVybiwgJm1hdHJpeCk7CiAK
LSAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN0eWxlLT5oYXNGaWxs
KCkpCi0gICAgICAgIGNhaXJvX3NldF9maWxsX3J1bGUoY3IsIHN0eWxlLT5maWxsUnVsZSgpID09
IFJVTEVfRVZFTk9ERCA/IENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCA6IENBSVJPX0ZJTExfUlVM
RV9XSU5ESU5HKTsKKyAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN0
eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpCisgICAgICAgIGNvbnRleHQtPnNldEZpbGxSdWxl
KHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpKTsKIAotICAgIGlmICgodHlwZSAmIEFwcGx5
VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFzU3Ryb2tlKCkpCisgICAgaWYgKCh0eXBl
ICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmIHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJv
a2UoKSkKICAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSwg
b2JqZWN0KTsKIAogICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHBhdHRlcm4pOwpJbmRleDogV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJTb2xpZENhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclNvbGlk
Q2Fpcm8uY3BwCShyZXZpc2lvbiAzNjczNikKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJv
L1NWR1BhaW50U2VydmVyU29saWRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDMzICsz
MywxOSBAQCBib29sIFNWR1BhaW50U2VydmVyU29saWQ6OnNldHVwKEdyYXBoaWNzCiAgICAgLy8g
VE9ETzogc2hhcmUgdGhpcyBjb2RlIHdpdGggb3RoZXIgUGFpbnRTZXJ2ZXJzCiAKICAgICBjYWly
b190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNvbnN0IFNWR1JlbmRl
clN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CiAKICAgICBmbG9hdCByZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYTsKICAgICBjb2xvcigpLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OwogCi0gICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFz
RmlsbCgpKSB7Ci0gICAgICAgIGFscGhhID0gc3R5bGUtPmZpbGxPcGFjaXR5KCk7Ci0KLSAgICAg
ICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgc3R5bGUtPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVO
T0REID8gQ0FJUk9fRklMTF9SVUxFX0VWRU5fT0REIDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcp
OworICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPnN2Z1N0
eWxlKCktPmhhc0ZpbGwoKSkgeworICAgICAgICBhbHBoYSA9IHN0eWxlLT5zdmdTdHlsZSgpLT5m
aWxsT3BhY2l0eSgpOworICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShzdHlsZS0+c3ZnU3R5
bGUoKS0+ZmlsbFJ1bGUoKSk7CiAgICAgfQogCi0gICAgaWYgKCh0eXBlICYgQXBwbHlUb1N0cm9r
ZVRhcmdldFR5cGUpICYmIHN0eWxlLT5oYXNTdHJva2UoKSkgewotICAgICAgICBhbHBoYSA9IHN0
eWxlLT5zdHJva2VPcGFjaXR5KCk7Ci0KLSAgICAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY3Is
IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdHJv
a2VXaWR0aCgpLCAxLjApKTsKLSAgICAgICAgY29udGV4dC0+c2V0TGluZUNhcChzdHlsZS0+Y2Fw
U3R5bGUoKSk7Ci0gICAgICAgIGNvbnRleHQtPnNldExpbmVKb2luKHN0eWxlLT5qb2luU3R5bGUo
KSk7Ci0gICAgICAgIGlmIChzdHlsZS0+am9pblN0eWxlKCkgPT0gTWl0ZXJKb2luKQotICAgICAg
ICAgICAgY29udGV4dC0+c2V0TWl0ZXJMaW1pdChzdHlsZS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsK
LQotICAgICAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcyA9IGRhc2hBcnJheUZyb21SZW5kZXJp
bmdTdHlsZShvYmplY3QtPnN0eWxlKCkpOwotICAgICAgICBkb3VibGUqIGRzaCA9IG5ldyBkb3Vi
bGVbZGFzaGVzLnNpemUoKV07Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgZGFz
aGVzLnNpemUoKSA7IGkrKykKLSAgICAgICAgICAgIGRzaFtpXSA9IGRhc2hlc1tpXTsKLSAgICAg
ICAgZG91YmxlIGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5n
dGgob2JqZWN0LCBzdHlsZS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjApOwotICAgICAgICBjYWly
b19zZXRfZGFzaChjciwgZHNoLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsKLSAgICAgICAg
ZGVsZXRlW10gZHNoOworICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAm
JiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpIHsKKyAgICAgICAgYWxwaGEgPSBzdHls
ZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlT3BhY2l0eSgpOworICAgICAgICBhcHBseVN0cm9rZVN0eWxl
VG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3QpOwogICAgIH0KIAogICAgIGNhaXJvX3Nl
dF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwpJbmRleDogV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlckdyYWRpZW50UXQuY3Bw
CShyZXZpc2lvbiAzNjczNikKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2Vy
dmVyR3JhZGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDExICs5MywxMCBAQCBib29s
IFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoCiAgICAgICAgIFFQZW4gcGVuOwog
ICAgICAgICBRQnJ1c2ggYnJ1c2goZ3JhZGllbnQpOwogICAgICAgICBicnVzaC5zZXRNYXRyaXgo
Z3JhZGllbnRUcmFuc2Zvcm0oKSk7Ci0KLSAgICAgICAgc2V0UGVuUHJvcGVydGllcyhvYmplY3Qs
IHJlbmRlclN0eWxlLCBwZW4pOwogICAgICAgICBwZW4uc2V0QnJ1c2goYnJ1c2gpOwotCiAgICAg
ICAgIHBhaW50ZXItPnNldFBlbihwZW4pOworCisgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0Nv
bnRleHQoY29udGV4dCwgcmVuZGVyU3R5bGUsIG9iamVjdCk7CiAgICAgfQogCiAgICAgcmV0dXJu
IHRydWU7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclF0
LmNwcAkocmV2aXNpb24gMzY3MzYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWlu
dFNlcnZlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMzkgKzM0LDYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi12b2lkIFNWR1BhaW50U2VydmVyOjpzZXRQZW5Qcm9wZXJ0aWVzKGNv
bnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIFFQZW4m
IHBlbikgY29uc3QKLXsKLSAgICBwZW4uc2V0V2lkdGhGKFNWR1JlbmRlclN0eWxlOjpjc3NQcmlt
aXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAx
LjApKTsKLQotICAgIGlmIChzdHlsZS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSA9PSBCdXR0Q2Fw
KQotICAgICAgICBwZW4uc2V0Q2FwU3R5bGUoUXQ6OkZsYXRDYXApOwotICAgIGVsc2UgaWYgKHN0
eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpID09IFJvdW5kQ2FwKQotICAgICAgICBwZW4uc2V0
Q2FwU3R5bGUoUXQ6OlJvdW5kQ2FwKTsKLQotICAgIGlmIChzdHlsZS0+c3ZnU3R5bGUoKS0+am9p
blN0eWxlKCkgPT0gTWl0ZXJKb2luKSB7Ci0gICAgICAgIHBlbi5zZXRKb2luU3R5bGUoUXQ6Ok1p
dGVySm9pbik7Ci0gICAgICAgIHBlbi5zZXRNaXRlckxpbWl0KChxcmVhbCkgc3R5bGUtPnN2Z1N0
eWxlKCktPnN0cm9rZU1pdGVyTGltaXQoKSk7Ci0gICAgfSBlbHNlIGlmKHN0eWxlLT5zdmdTdHls
ZSgpLT5qb2luU3R5bGUoKSA9PSBSb3VuZEpvaW4pCi0gICAgICAgIHBlbi5zZXRKb2luU3R5bGUo
UXQ6OlJvdW5kSm9pbik7Ci0KLSAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcyA9IFdlYkNvcmU6
OmRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShzdHlsZSk7Ci0gICAgZG91YmxlIGRhc2hPZmZz
ZXQgPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+
c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjApOwotCi0gICAgdW5zaWduZWQgaW50
IGRhc2hMZW5ndGggPSAhZGFzaGVzLmlzRW1wdHkoKSA/IGRhc2hlcy5zaXplKCkgOiAwOwotICAg
IGlmKGRhc2hMZW5ndGgpIHsKLSAgICAgICAgUVZlY3RvcjxxcmVhbD4gcGF0dGVybjsKLSAgICAg
ICAgdW5zaWduZWQgaW50IGNvdW50ID0gKGRhc2hMZW5ndGggJSAyKSA9PSAwID8gZGFzaExlbmd0
aCA6IGRhc2hMZW5ndGggKiAyOwotCi0gICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgICAgICAgICAgcGF0dGVybi5hcHBlbmQoZGFzaGVzW2kgJSBkYXNo
TGVuZ3RoXSAvIChmbG9hdClwZW4ud2lkdGhGKCkpOwotCi0gICAgICAgIHBlbi5zZXREYXNoUGF0
dGVybihwYXR0ZXJuKTsKLQotICAgICAgICBRX1VOVVNFRChkYXNoT2Zmc2V0KTsKLSAgICAgICAg
Ly8gVE9ETzogZGFzaC1vZmZzZXQsIGRvZXMvd2lsbCBxdDQgQVBJIGFsbG93IGl0PyAoUm9iKQot
ICAgIH0KLX0KLQogdm9pZCBTVkdQYWludFNlcnZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqJiBj
b250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHBhdGgsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBl
KSBjb25zdAogewogICAgIGlmICghc2V0dXAoY29udGV4dCwgcGF0aCwgdHlwZSkpCkluZGV4OiBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclNvbGlkUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHAJ
KHJldmlzaW9uIDM2NzM2KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2
ZXJTb2xpZFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsOSArNjAsOSBAQCBib29sIFNWR1Bh
aW50U2VydmVyU29saWQ6OnNldHVwKEdyYXBoaWNzCiAgICAgICAgICAgICBjLnNldEFscGhhRihy
ZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlT3BhY2l0eSgpKTsKIAogICAgICAgICBRUGVu
IHBlbihjKTsKLSAgICAgICAgaWYgKHJlbmRlclN0eWxlKQotICAgICAgICAgICAgc2V0UGVuUHJv
cGVydGllcyhvYmplY3QsIHJlbmRlclN0eWxlLCBwZW4pOwogICAgICAgICBwYWludGVyLT5zZXRQ
ZW4ocGVuKTsKKyAgICAgICAgaWYgKHJlbmRlclN0eWxlKQorICAgICAgICAgICAgYXBwbHlTdHJv
a2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCByZW5kZXJTdHlsZSwgb2JqZWN0KTsKIAogICAgICAg
ICAvKiBpZihpc1BhaW50aW5nVGV4dCgpKSAuLi4gKi8KICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23623</attachid>
            <date>2008-09-21 03:20:39 -0700</date>
            <delta_ts>2008-09-21 03:39:42 -0700</delta_ts>
            <desc>SVGPaintServer cleanUp - second part</desc>
            <filename>SVGPaintServer-cleanUp-second.patch</filename>
            <type>text/plain</type>
            <size>15131</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjczNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMDgtMDktMjEgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGwgcGxh
dGZvcm1zIHVzZSB0aGUgRGFzaEFycmF5IGluIHRoZSBHcmFwaGljc0NvbnRleHQuCisKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKToKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1cCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNz
L2NhaXJvL1NWR1BhaW50U2VydmVyU29saWRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYWludFNlcnZlclNvbGlkOjpzZXR1cCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL3F0L1NW
R1BhaW50U2VydmVyR3JhZGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNl
cnZlckdyYWRpZW50OjpzZXR1cCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50
U2VydmVyUXQuY3BwOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclNv
bGlkUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6c2V0dXAp
OgorCiAyMDA4LTA5LTIxICBEaXJrIFNjaHVsemUgIDx2YnM4NUBnbXguZGU+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgZXNlaWRlbC4gIExhbmRlZCBieSBlc2VpZGVsLgpJbmRleDogV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdQYWludFNlcnZlci5oCShyZXZpc2lvbiAzNjczNikKKysrIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSw2
IEBACiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+
CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPHFnbG9iYWwuaD4KLVFUX0JF
R0lOX05BTUVTUEFDRQotY2xhc3MgUVBlbjsKLVFUX0VORF9OQU1FU1BBQ0UKLSNlbmRpZgotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBlbnVtIFNWR1BhaW50U2VydmVyVHlwZSB7CkBAIC05
MSw5ICs4NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGlwVG9GaWxs
UGF0aChDR0NvbnRleHRSZWYsIGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwogI2VuZGlmCiAK
LSNpZiBQTEFURk9STShRVCkKLSAgICAgICAgdm9pZCBzZXRQZW5Qcm9wZXJ0aWVzKGNvbnN0IFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiwgUVBlbiYpIGNvbnN0OwotI2VuZGlmCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICBTVkdQYWludFNlcnZlcigpOyAgICAgICAgCiAgICAgfTsK
SW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyR3JhZGllbnRD
YWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFp
bnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcAkocmV2aXNpb24gMzY3MzYpCisrKyBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlckdyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwyOSArMzAsOSBAQAogI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKICNpbmNs
dWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgotI2lu
Y2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFRP
RE86IFNoYXJlIHRoaXMgY29kZSB3aXRoIGFsbCBTVkdQYWludFNlcnZlcnMKLXN0YXRpYyB2b2lk
IGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBTVkdSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQotewot
ICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBjb250
ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVu
Z3RoKG9iamVjdCwgc3R5bGUtPnN0cm9rZVdpZHRoKCksIDEuMCkpOwotICAgIGNvbnRleHQtPnNl
dExpbmVDYXAoc3R5bGUtPmNhcFN0eWxlKCkpOwotICAgIGNvbnRleHQtPnNldExpbmVKb2luKHN0
eWxlLT5qb2luU3R5bGUoKSk7Ci0gICAgaWYgKHN0eWxlLT5qb2luU3R5bGUoKSA9PSBNaXRlckpv
aW4pCi0gICAgICAgIGNvbnRleHQtPnNldE1pdGVyTGltaXQoc3R5bGUtPnN0cm9rZU1pdGVyTGlt
aXQoKSk7Ci0KLSAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcyA9IGRhc2hBcnJheUZyb21SZW5k
ZXJpbmdTdHlsZShvYmplY3QtPnN0eWxlKCkpOwotICAgIE93bkFycmF5UHRyPGRvdWJsZT4gZHNo
KG5ldyBkb3VibGVbZGFzaGVzLnNpemUoKV0pOwotICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8
IGRhc2hlcy5zaXplKCkgOyBpKyspCi0gICAgICAgIGRzaFtpXSA9IGRhc2hlc1tpXTsKLSAgICBk
b3VibGUgZGFzaE9mZnNldCA9IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChv
YmplY3QsIHN0eWxlLT5zdHJva2VEYXNoT2Zmc2V0KCksIDAuMCk7Ci0gICAgY2Fpcm9fc2V0X2Rh
c2goY3IsIGRzaC5nZXQoKSwgZGFzaGVzLnNpemUoKSwgZGFzaE9mZnNldCk7Ci19Ci0KIGJvb2wg
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwg
Y29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29s
IGlzUGFpbnRpbmdUZXh0KSBjb25zdAogewogICAgIG1fb3duZXJFbGVtZW50LT5idWlsZEdyYWRp
ZW50KCk7CkBAIC02Myw3ICs0Myw5IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0
dXAoR3JhcGgKICAgICBjYWlyb19tYXRyaXhfdCBtYXRyaXg7CiAgICAgY2Fpcm9fbWF0cml4X2lu
aXRfaWRlbnRpdHkgKCZtYXRyaXgpOwogICAgIGNvbnN0IGNhaXJvX21hdHJpeF90IGdyYWRpZW50
X21hdHJpeCA9IGdyYWRpZW50VHJhbnNmb3JtKCk7Ci0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUq
IHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpOworCisgICAgY29uc3QgU1ZHUmVu
ZGVyU3R5bGUqIHN2Z1N0eWxlID0gb2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpOworICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKIAogICAgIGlmICh0aGlzLT50eXBl
KCkgPT0gTGluZWFyR3JhZGllbnRQYWludFNlcnZlcikgewogICAgICAgICBjb25zdCBTVkdQYWlu
dFNlcnZlckxpbmVhckdyYWRpZW50KiBsaW5lYXIgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdQYWlu
dFNlcnZlckxpbmVhckdyYWRpZW50Kj4odGhpcyk7CkBAIC0xNjEsMTAgKzE0MywxMCBAQCBib29s
IFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoCiAgICAgICAgIGNhaXJvX3BhdHRl
cm5fYWRkX2NvbG9yX3N0b3BfcmdiYShwYXR0ZXJuLCBvZmZzZXQsIGNvbG9yLnJlZCgpIC8gMjU1
LjAsIGNvbG9yLmdyZWVuKCkgLyAyNTUuMCwgY29sb3IuYmx1ZSgpIC8gMjU1LjAsIGNvbG9yLmFs
cGhhKCkgLyAyNTUuMCk7CiAgICAgfQogCi0gICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJn
ZXRUeXBlKSAmJiBzdHlsZS0+aGFzRmlsbCgpKQotICAgICAgICBjYWlyb19zZXRfZmlsbF9ydWxl
KGNyLCBzdHlsZS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQgPyBDQUlST19GSUxMX1JVTEVf
RVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVfV0lORElORyk7CisgICAgaWYgKCh0eXBlICYgQXBw
bHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdmdTdHlsZS0+aGFzRmlsbCgpKQorICAgICAgICBjb250
ZXh0LT5zZXRGaWxsUnVsZShzdmdTdHlsZS0+ZmlsbFJ1bGUoKSk7CiAKLSAgICBpZiAoKHR5cGUg
JiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhhc1N0cm9rZSgpKQorICAgIGlm
ICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdmdTdHlsZS0+aGFzU3Ryb2tl
KCkpCiAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9i
amVjdCk7CiAKICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsKSW5kZXg6IFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclBhdHRl
cm5DYWlyby5jcHAJKHJldmlzaW9uIDM2NzM2KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fp
cm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywz
MiArMzMsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBUT0RPOiBTaGFyZSB0aGlz
IGNvZGUgd2l0aCBhbGwgU1ZHUGFpbnRTZXJ2ZXJzCi1zdGF0aWMgdm9pZCBhcHBseVN0cm9rZVN0
eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU1ZHUmVuZGVyU3R5
bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBjYWlyb190KiBj
ciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgY29udGV4dC0+c2V0U3Ryb2tl
VGhpY2tuZXNzKFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0
eWxlLT5zdHJva2VXaWR0aCgpLCAxLjApKTsKLSAgICBjb250ZXh0LT5zZXRMaW5lQ2FwKHN0eWxl
LT5jYXBTdHlsZSgpKTsKLSAgICBjb250ZXh0LT5zZXRMaW5lSm9pbihzdHlsZS0+am9pblN0eWxl
KCkpOwotICAgIGlmIChzdHlsZS0+am9pblN0eWxlKCkgPT0gTWl0ZXJKb2luKQotICAgICAgICBj
b250ZXh0LT5zZXRNaXRlckxpbWl0KHN0eWxlLT5zdHJva2VNaXRlckxpbWl0KCkpOwotCi0gICAg
Y29uc3QgRGFzaEFycmF5JiBkYXNoZXMgPSBkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUob2Jq
ZWN0LT5zdHlsZSgpKTsKLSAgICBPd25BcnJheVB0cjxkb3VibGU+IGRzaChuZXcgZG91YmxlW2Rh
c2hlcy5zaXplKCldKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5zaXplKCkg
OyBpKyspCi0gICAgICAgIGRzaFtpXSA9IGRhc2hlc1tpXTsKLSAgICBkb3VibGUgZGFzaE9mZnNl
dCA9IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5z
dHJva2VEYXNoT2Zmc2V0KCksIDAuMCk7Ci0gICAgY2Fpcm9fc2V0X2Rhc2goY3IsIGRzaC5nZXQo
KSwgZGFzaGVzLnNpemUoKSwgZGFzaE9mZnNldCk7Ci19Ci0KIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJQ
YXR0ZXJuOjpzZXR1cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQp
IGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0IHRhcmdldFJlY3QgPSBvYmplY3QtPnJlbGF0aXZlQkJv
eChmYWxzZSk7CiAKLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0
eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0g
b2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9i
amVjdC0+c3R5bGUoKTsKIAotICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gU1ZHUmVuZGVyU3R5bGU6
OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN0cm9rZVdpZHRoKCksIDEuMCk7
CisgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9M
ZW5ndGgob2JqZWN0LCBzdmdTdHlsZS0+c3Ryb2tlV2lkdGgoKSwgMS4wZik7CiAKICAgICBpZiAo
dGFyZ2V0UmVjdC53aWR0aCgpID09IDApCiAgICAgICAgIHRhcmdldFJlY3QgPSBGbG9hdFJlY3Qo
dGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCBzdHJva2VXaWR0aCwgdGFyZ2V0UmVjdC5o
ZWlnaHQoKSk7CkBAIC04MywxMCArNjUsMTAgQEAgYm9vbCBTVkdQYWludFNlcnZlclBhdHRlcm46
OnNldHVwKEdyYXBoaQogICAgIGNhaXJvX21hdHJpeF9pbnZlcnQoJm1hdHJpeCk7CiAgICAgY2Fp
cm9fcGF0dGVybl9zZXRfbWF0cml4KHBhdHRlcm4sICZtYXRyaXgpOwogCi0gICAgaWYgKCh0eXBl
ICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFzRmlsbCgpKQotICAgICAgICBj
YWlyb19zZXRfZmlsbF9ydWxlKGNyLCBzdHlsZS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQg
PyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVfV0lORElORyk7Cisg
ICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdmdTdHlsZS0+aGFzRmls
bCgpKQorICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShzdmdTdHlsZS0+ZmlsbFJ1bGUoKSk7
CiAKLSAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhh
c1N0cm9rZSgpKQorICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBz
dmdTdHlsZS0+aGFzU3Ryb2tlKCkpCiAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQo
Y29udGV4dCwgc3R5bGUsIG9iamVjdCk7CiAKICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwYXR0
ZXJuKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyU29s
aWRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZH
UGFpbnRTZXJ2ZXJTb2xpZENhaXJvLmNwcAkocmV2aXNpb24gMzY3MzYpCisrKyBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclNvbGlkQ2Fpcm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSwzNSArMzEsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogYm9vbCBTVkdQYWlu
dFNlcnZlclNvbGlkOjpzZXR1cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5k
ZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUsIGJvb2wgaXNQYWludGlu
Z1RleHQpIGNvbnN0CiB7CiAgICAgLy8gVE9ETzogc2hhcmUgdGhpcyBjb2RlIHdpdGggb3RoZXIg
UGFpbnRTZXJ2ZXJzCi0KICAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpOwotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+
c3ZnU3R5bGUoKTsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IG9iamVj
dC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3Qt
PnN0eWxlKCk7CiAKICAgICBmbG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKICAgICBjb2xv
cigpLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogCi0gICAgaWYgKCh0eXBlICYg
QXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFzRmlsbCgpKSB7Ci0gICAgICAgIGFs
cGhhID0gc3R5bGUtPmZpbGxPcGFjaXR5KCk7Ci0KLSAgICAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVs
ZShjciwgc3R5bGUtPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REID8gQ0FJUk9fRklMTF9SVUxF
X0VWRU5fT0REIDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcpOworICAgIGlmICgodHlwZSAmIEFw
cGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3ZnU3R5bGUtPmhhc0ZpbGwoKSkgeworICAgICAgICBh
bHBoYSA9IHN2Z1N0eWxlLT5maWxsT3BhY2l0eSgpOworICAgICAgICBjb250ZXh0LT5zZXRGaWxs
UnVsZShzdmdTdHlsZS0+ZmlsbFJ1bGUoKSk7CiAgICAgfQogCi0gICAgaWYgKCh0eXBlICYgQXBw
bHlUb1N0cm9rZVRhcmdldFR5cGUpICYmIHN0eWxlLT5oYXNTdHJva2UoKSkgewotICAgICAgICBh
bHBoYSA9IHN0eWxlLT5zdHJva2VPcGFjaXR5KCk7Ci0KLSAgICAgICAgY2Fpcm9fc2V0X2xpbmVf
d2lkdGgoY3IsIFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0
eWxlLT5zdHJva2VXaWR0aCgpLCAxLjApKTsKLSAgICAgICAgY29udGV4dC0+c2V0TGluZUNhcChz
dHlsZS0+Y2FwU3R5bGUoKSk7Ci0gICAgICAgIGNvbnRleHQtPnNldExpbmVKb2luKHN0eWxlLT5q
b2luU3R5bGUoKSk7Ci0gICAgICAgIGlmIChzdHlsZS0+am9pblN0eWxlKCkgPT0gTWl0ZXJKb2lu
KQotICAgICAgICAgICAgY29udGV4dC0+c2V0TWl0ZXJMaW1pdChzdHlsZS0+c3Ryb2tlTWl0ZXJM
aW1pdCgpKTsKLQotICAgICAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcyA9IGRhc2hBcnJheUZy
b21SZW5kZXJpbmdTdHlsZShvYmplY3QtPnN0eWxlKCkpOwotICAgICAgICBkb3VibGUqIGRzaCA9
IG5ldyBkb3VibGVbZGFzaGVzLnNpemUoKV07Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAg
OyBpIDwgZGFzaGVzLnNpemUoKSA7IGkrKykKLSAgICAgICAgICAgIGRzaFtpXSA9IGRhc2hlc1tp
XTsKLSAgICAgICAgZG91YmxlIGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0
aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjApOwotICAg
ICAgICBjYWlyb19zZXRfZGFzaChjciwgZHNoLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsK
LSAgICAgICAgZGVsZXRlW10gZHNoOworICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJn
ZXRUeXBlKSAmJiBzdmdTdHlsZS0+aGFzU3Ryb2tlKCkpIHsKKyAgICAgICAgYWxwaGEgPSBzdmdT
dHlsZS0+c3Ryb2tlT3BhY2l0eSgpOworICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0
KGNvbnRleHQsIHN0eWxlLCBvYmplY3QpOwogICAgIH0KIAogICAgIGNhaXJvX3NldF9zb3VyY2Vf
cmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwpJbmRleDogV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlckdyYWRpZW50UXQuY3BwCShyZXZpc2lv
biAzNjczNikKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyR3JhZGll
bnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDggQEAgYm9vbCBTVkdQYWludFNl
cnZlckdyYWRpZW50OjpzZXR1cChHcmFwaAogICAgIFFQYWludGVyUGF0aCogcGF0aChjb250ZXh0
ID8gY29udGV4dC0+Y3VycmVudFBhdGgoKSA6IDApOwogICAgIFFfQVNTRVJUKHBhdGgpOwogCi0g
ICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOworICAgIGNvbnN0
IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsK
KyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CiAKICAgICBRR3JhZGll
bnQgZ3JhZGllbnQgPSBzZXR1cEdyYWRpZW50KGNvbnRleHQsIG9iamVjdCk7CiAKQEAgLTc3LDI3
ICs3OCwyNiBAQCBib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoCiAgICAg
ICAgIGdyYWRpZW50LnNldFNwcmVhZChRR3JhZGllbnQ6OlBhZFNwcmVhZCk7ICAgIAogICAgIGRv
dWJsZSBvcGFjaXR5ID0gMS4wOwogCi0gICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRU
eXBlKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSB7CisgICAgaWYgKCh0
eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdmdTdHlsZS0+aGFzRmlsbCgpKSB7CiAg
ICAgICAgIGZpbGxDb2xvckFycmF5KGdyYWRpZW50LCBncmFkaWVudFN0b3BzKCksIG9wYWNpdHkp
OwogCiAgICAgICAgIFFCcnVzaCBicnVzaChncmFkaWVudCk7CiAgICAgICAgIGJydXNoLnNldE1h
dHJpeChncmFkaWVudFRyYW5zZm9ybSgpKTsKIAogICAgICAgICBwYWludGVyLT5zZXRCcnVzaChi
cnVzaCk7Ci0gICAgICAgIGNvbnRleHQtPnNldEZpbGxSdWxlKHJlbmRlclN0eWxlLT5zdmdTdHls
ZSgpLT5maWxsUnVsZSgpKTsKKyAgICAgICAgY29udGV4dC0+c2V0RmlsbFJ1bGUoc3ZnU3R5bGUt
PmZpbGxSdWxlKCkpOwogICAgIH0KIAotICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJn
ZXRUeXBlKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpIHsKKyAgICBp
ZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3ZnU3R5bGUtPmhhc1N0cm9r
ZSgpKSB7CiAgICAgICAgIGZpbGxDb2xvckFycmF5KGdyYWRpZW50LCBncmFkaWVudFN0b3BzKCks
IG9wYWNpdHkpOwogCiAgICAgICAgIFFQZW4gcGVuOwogICAgICAgICBRQnJ1c2ggYnJ1c2goZ3Jh
ZGllbnQpOwogICAgICAgICBicnVzaC5zZXRNYXRyaXgoZ3JhZGllbnRUcmFuc2Zvcm0oKSk7Ci0K
LSAgICAgICAgc2V0UGVuUHJvcGVydGllcyhvYmplY3QsIHJlbmRlclN0eWxlLCBwZW4pOwogICAg
ICAgICBwZW4uc2V0QnJ1c2goYnJ1c2gpOwotCiAgICAgICAgIHBhaW50ZXItPnNldFBlbihwZW4p
OworCisgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9i
amVjdCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9xdC9TVkdQYWludFNlcnZlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9xdC9TVkdQYWludFNlcnZlclF0LmNwcAkocmV2aXNpb24gMzY3MzYpCisrKyBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMzkgKzM0LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFNWR1BhaW50
U2VydmVyOjpzZXRQZW5Qcm9wZXJ0aWVzKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUsIFFQZW4mIHBlbikgY29uc3QKLXsKLSAgICBwZW4uc2V0V2lk
dGhGKFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5z
dmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjApKTsKLQotICAgIGlmIChzdHlsZS0+c3ZnU3R5
bGUoKS0+Y2FwU3R5bGUoKSA9PSBCdXR0Q2FwKQotICAgICAgICBwZW4uc2V0Q2FwU3R5bGUoUXQ6
OkZsYXRDYXApOwotICAgIGVsc2UgaWYgKHN0eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpID09
IFJvdW5kQ2FwKQotICAgICAgICBwZW4uc2V0Q2FwU3R5bGUoUXQ6OlJvdW5kQ2FwKTsKLQotICAg
IGlmIChzdHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0eWxlKCkgPT0gTWl0ZXJKb2luKSB7Ci0gICAg
ICAgIHBlbi5zZXRKb2luU3R5bGUoUXQ6Ok1pdGVySm9pbik7Ci0gICAgICAgIHBlbi5zZXRNaXRl
ckxpbWl0KChxcmVhbCkgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGltaXQoKSk7Ci0g
ICAgfSBlbHNlIGlmKHN0eWxlLT5zdmdTdHlsZSgpLT5qb2luU3R5bGUoKSA9PSBSb3VuZEpvaW4p
Ci0gICAgICAgIHBlbi5zZXRKb2luU3R5bGUoUXQ6OlJvdW5kSm9pbik7Ci0KLSAgICBjb25zdCBE
YXNoQXJyYXkmIGRhc2hlcyA9IFdlYkNvcmU6OmRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShz
dHlsZSk7Ci0gICAgZG91YmxlIGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0
aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaE9mZnNldCgp
LCAwLjApOwotCi0gICAgdW5zaWduZWQgaW50IGRhc2hMZW5ndGggPSAhZGFzaGVzLmlzRW1wdHko
KSA/IGRhc2hlcy5zaXplKCkgOiAwOwotICAgIGlmKGRhc2hMZW5ndGgpIHsKLSAgICAgICAgUVZl
Y3RvcjxxcmVhbD4gcGF0dGVybjsKLSAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gKGRhc2hM
ZW5ndGggJSAyKSA9PSAwID8gZGFzaExlbmd0aCA6IGRhc2hMZW5ndGggKiAyOwotCi0gICAgICAg
IGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgcGF0
dGVybi5hcHBlbmQoZGFzaGVzW2kgJSBkYXNoTGVuZ3RoXSAvIChmbG9hdClwZW4ud2lkdGhGKCkp
OwotCi0gICAgICAgIHBlbi5zZXREYXNoUGF0dGVybihwYXR0ZXJuKTsKLQotICAgICAgICBRX1VO
VVNFRChkYXNoT2Zmc2V0KTsKLSAgICAgICAgLy8gVE9ETzogZGFzaC1vZmZzZXQsIGRvZXMvd2ls
bCBxdDQgQVBJIGFsbG93IGl0PyAoUm9iKQotICAgIH0KLX0KLQogdm9pZCBTVkdQYWludFNlcnZl
cjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHBh
dGgsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogewogICAgIGlmICghc2V0dXAoY29u
dGV4dCwgcGF0aCwgdHlwZSkpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWlu
dFNlcnZlclNvbGlkUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0
L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHAJKHJldmlzaW9uIDM2NzM2KQorKysgV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJTb2xpZFF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzcsMzIgKzM3LDMzIEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6c2V0dXAoR3JhcGhp
Y3MKICAgICBRUGFpbnRlciogcGFpbnRlcihjb250ZXh0ID8gY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCkgOiAwKTsKICAgICBRX0FTU0VSVChwYWludGVyKTsKIAotICAgIFJlbmRlclN0eWxlKiBy
ZW5kZXJTdHlsZSA9IG9iamVjdCA/IG9iamVjdC0+c3R5bGUoKSA6IDA7CisgICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gb2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpOworICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdCA/IG9iamVjdC0+c3R5bGUoKSA6IDA7CiAgICAg
Ly8gVE9ETz8gcGFpbnRlci0+c2V0T3BhY2l0eShyZW5kZXJTdHlsZS0+b3BhY2l0eSgpKTsKIAog
ICAgIFFDb2xvciBjID0gY29sb3IoKTsKIAotICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFy
Z2V0VHlwZSkgJiYgKCFyZW5kZXJTdHlsZSB8fCByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFz
RmlsbCgpKSkgewotICAgICAgICBpZiAocmVuZGVyU3R5bGUpCi0gICAgICAgICAgICBjLnNldEFs
cGhhRihyZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbE9wYWNpdHkoKSk7CisgICAgaWYgKCh0
eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiAoIXN0eWxlIHx8IHN2Z1N0eWxlLT5oYXNG
aWxsKCkpKSB7CisgICAgICAgIGlmIChzdHlsZSkKKyAgICAgICAgICAgIGMuc2V0QWxwaGFGKHN2
Z1N0eWxlLT5maWxsT3BhY2l0eSgpKTsKIAogICAgICAgICBRQnJ1c2ggYnJ1c2goYyk7CiAgICAg
ICAgIHBhaW50ZXItPnNldEJydXNoKGJydXNoKTsKIAotICAgICAgICBpZiAocmVuZGVyU3R5bGUp
Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShyZW5kZXJTdHlsZS0+c3ZnU3R5bGUo
KS0+ZmlsbFJ1bGUoKSk7CisgICAgICAgIGlmIChzdHlsZSkKKyAgICAgICAgICAgIGNvbnRleHQt
PnNldEZpbGxSdWxlKHN2Z1N0eWxlLT5maWxsUnVsZSgpKTsKIAogICAgICAgICAvKiBpZihpc1Bh
aW50aW5nVGV4dCgpKSAuLi4gKi8KICAgICB9CiAKLSAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ry
b2tlVGFyZ2V0VHlwZSkgJiYgKCFyZW5kZXJTdHlsZSB8fCByZW5kZXJTdHlsZS0+c3ZnU3R5bGUo
KS0+aGFzU3Ryb2tlKCkpKSB7Ci0gICAgICAgIGlmIChyZW5kZXJTdHlsZSkKLSAgICAgICAgICAg
IGMuc2V0QWxwaGFGKHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VPcGFjaXR5KCkpOwor
ICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiAoIXN0eWxlIHx8IHN2
Z1N0eWxlLT5oYXNTdHJva2UoKSkpIHsKKyAgICAgICAgaWYgKHN0eWxlKQorICAgICAgICAgICAg
Yy5zZXRBbHBoYUYoc3ZnU3R5bGUtPnN0cm9rZU9wYWNpdHkoKSk7CiAKICAgICAgICAgUVBlbiBw
ZW4oYyk7Ci0gICAgICAgIGlmIChyZW5kZXJTdHlsZSkKLSAgICAgICAgICAgIHNldFBlblByb3Bl
cnRpZXMob2JqZWN0LCByZW5kZXJTdHlsZSwgcGVuKTsKICAgICAgICAgcGFpbnRlci0+c2V0UGVu
KHBlbik7CisgICAgICAgIGlmIChzdHlsZSkKKyAgICAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVU
b0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVjdCk7CiAKICAgICAgICAgLyogaWYoaXNQYWlu
dGluZ1RleHQoKSkgLi4uICovCiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23625</attachid>
            <date>2008-09-21 06:41:32 -0700</date>
            <delta_ts>2008-09-21 10:20:59 -0700</delta_ts>
            <desc>SVGPaintServer cleanUp - third part</desc>
            <filename>SVGPaintServer-cleanUp-third.patch</filename>
            <type>text/plain</type>
            <size>18595</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjczOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMDgtMDktMjEgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmVk
IHBsYXRmb3JtIGRlcGVuZGVudCBjb2RlIG9uIFNWR1BhaW50U2VydmVyU29saWQuCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVy
U29saWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6c2V0dXAp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6cmVuZGVyUGF0aCk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyU29saWQuaDoKKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJTb2xpZENhaXJvLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJTb2xpZFF0LmNw
cDogUmVtb3ZlZC4KKwogMjAwOC0wOS0yMSAgRGlyayBTY2h1bHplICA8dmJzODVAZ214LmRlPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IGVzZWlkZWwuICBMYW5kZWQgYnkgZXNlaWRlbC4KSW5kZXg6
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQkocmV2aXNpb24gMzY3MzcpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzI3LDcgKzMzMjcsNiBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyQ2Fpcm8uY3BwIFwKIAlXZWJD
b3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlckdyYWRpZW50Q2Fpcm8uY3BwIFwK
IAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclBhdHRlcm5DYWlyby5j
cHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyU29saWRDYWly
by5jcHAgXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1Jlc291cmNlQ2xpcHBlckNh
aXJvLmNwcCBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUmVzb3VyY2VGaWx0ZXJD
YWlyby5jcHAgXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1Jlc291cmNlTWFza2Vy
Q2Fpcm8uY3BwCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDM2NzM3KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwko
d29ya2luZyBjb3B5KQpAQCAtMTY1NSw3ICsxNjU1LDYgQEAgU09VUkNFUyArPSBcCiAgICAgICAg
IHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclBhdHRlcm5RdC5jcHAgXAogICAgICAgICBz
dmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJRdC5jcHAgXAogICAgICAgICBzdmcvZ3JhcGhp
Y3MvcXQvU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0LmNwcCBcCi0gICAgICAgIHN2Zy9n
cmFwaGljcy9xdC9TVkdQYWludFNlcnZlclNvbGlkUXQuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBo
aWNzL3F0L1NWR1Jlc291cmNlQ2xpcHBlclF0LmNwcCBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9x
dC9TVkdSZXNvdXJjZUZpbHRlclF0LmNwcCBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9xdC9TVkdS
ZXNvdXJjZU1hc2tlclF0LmNwcApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCShyZXZpc2lvbiAzNjczNykKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTE1MjE2LDI2ICsxNTIxNiw2IEBACiAJCQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPg0KIAkJCQkJPC9GaWxlPg0KIAkJCQkJPEZpbGUNCi0JCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xjZ1xTVkdQYWludFNlcnZlclNvbGlkQ2cuY3BwIg0K
LQkJCQkJCT4NCi0JCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQkJTmFtZT0iRGVidWdf
Q2Fpcm98V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+
DQotCQkJCQkJCTxUb29sDQotCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJ
CQkvPg0KLQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQkJPEZpbGVDb25maWd1cmF0
aW9uDQotCQkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm98V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQotCQkJCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQkvPg0KLQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
c3ZnXGdyYXBoaWNzXGNnXFNWR1Jlc291cmNlQ2xpcHBlckNnLmNwcCINCiAJCQkJCQk+DQogCQkJ
CQkJPEZpbGVDb25maWd1cmF0aW9uDQpAQCAtMTU2MDAsNDIgKzE1NTgwLDYgQEAKIAkJCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJl
bGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGNhaXJvXFNWR1BhaW50U2VydmVyU29saWRDYWly
by5jcHAiDQotCQkJCQkJPg0KLQkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCQlOYW1l
PSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJ
CT4NCi0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJ
CQkJCS8+DQotCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24NCi0JCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiDQotCQkJCQkJCT4NCi0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiDQotCQkJCQkJCS8+DQotCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4N
Ci0JCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQkJTmFtZT0iRGVidWdfSW50ZXJuYWx8
V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+DQotCQkJ
CQkJCTxUb29sDQotCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQkvPg0K
LQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQot
CQkJCQkJCU5hbWU9IlJlbGVhc2VfUEdPfFdpbjMyIg0KLQkJCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSINCi0JCQkJCQkJPg0KLQkJCQkJCQk8VG9vbA0KLQkJCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCINCi0JCQkJCQkJLz4NCi0JCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJ
CQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFw
aGljc1xjYWlyb1xTVkdSZXNvdXJjZUNsaXBwZXJDYWlyby5jcHAiDQogCQkJCQkJPg0KIAkJCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAzNjczNykKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgwLDcgKzMwODAsNiBAQAog
CQlCMjU1OTkyRjBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTg5MzBEMDBEOEI4
MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAgKi87IH07CiAJCUIyNTU5OTMwMEQwMEQ4
QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTQwRDAwRDhCODAwQkI4MjVD
IC8qIFNWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAgKi87IH07CiAJCUIyNTU5OTMxMEQwMEQ4
QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTg5NTBEMDBEOEI4MDBCQjgyNUMg
LyogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwICovOyB9OwotCQlCMjU1OTkzMjBEMDBEOEJB
MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5ODk2MEQwMEQ4QjgwMEJCODI1QyAvKiBT
VkdQYWludFNlcnZlclNvbGlkQ2cuY3BwICovOyB9OwogCQlCMjU1OTkzMzBEMDBEOEJBMDBCQjgy
NUMgLyogU1ZHUmVzb3VyY2VDbGlwcGVyQ2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTcwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291
cmNlQ2xpcHBlckNnLmNwcCAqLzsgfTsKIAkJQjI1NTk5MzUwRDAwRDhCQTAwQkI4MjVDIC8qIFNW
R1Jlc291cmNlRmlsdGVyQ2cubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjU1OTg5OTBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VGaWx0ZXJD
Zy5tbSAqLzsgfTsKIAkJQjI1NTk5MzcwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFz
a2VyQ2cubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MjU1OTg5QjBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbSAqLzsgfTsK
QEAgLTc1ODYsNyArNzU4NSw2IEBACiAJCUIyNTU5ODkzMEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQ
YWludFNlcnZlckNnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
VkdQYWludFNlcnZlckNnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4
OTQwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENn
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OTUwRDAwRDhCODAwQkI4
MjVDIC8qIFNWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5ODk2MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNl
cnZlclNvbGlkQ2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNW
R1BhaW50U2VydmVyU29saWRDZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
NTU5ODk3MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdSZXNvdXJjZUNsaXBwZXJDZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUmVzb3VyY2VDbGlwcGVyQ2cuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjU1OTg5OTBEMDBEOEI4MDBCQjgyNUMg
LyogU1ZHUmVzb3VyY2VGaWx0ZXJDZy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBTVkdSZXNvdXJjZUZpbHRlckNnLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMjU1OTg5QjBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VNYXNrZXJDZy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTVkdSZXNvdXJjZU1h
c2tlckNnLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIyNzIsNyArMTIyNzAs
NiBAQAogCQkJCUIyNTU5ODkzMEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckNnLmNw
cCAqLywKIAkJCQlCMjU1OTg5NDBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudENnLmNwcCAqLywKIAkJCQlCMjU1OTg5NTBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRT
ZXJ2ZXJQYXR0ZXJuQ2cuY3BwICovLAotCQkJCUIyNTU5ODk2MEQwMEQ4QjgwMEJCODI1QyAvKiBT
VkdQYWludFNlcnZlclNvbGlkQ2cuY3BwICovLAogCQkJCUIyNTU5ODk3MEQwMEQ4QjgwMEJCODI1
QyAvKiBTVkdSZXNvdXJjZUNsaXBwZXJDZy5jcHAgKi8sCiAJCQkJQjI1NTk4OTkwRDAwRDhCODAw
QkI4MjVDIC8qIFNWR1Jlc291cmNlRmlsdGVyQ2cubW0gKi8sCiAJCQkJQjI1NTk4OUIwRDAwRDhC
ODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFza2VyQ2cubW0gKi8sCkBAIC0xNzIxNSw3ICsxNzIx
Miw2IEBACiAJCQkJQjI1NTk5MzEwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyUGF0
dGVybkNnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNTU5OUFFMEQwMEQ4QkEwMEJCODI1QyAv
KiBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
NTU5OUIwMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclNvbGlkLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUIyNTU5OTMyMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclNv
bGlkQ2cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBNTYwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR1BhcnNlclV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0E1ODBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHUGF0aEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIy
MjdBNUQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWdBcmMuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNvbGlkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNvbGlkLmNwcAko
cmV2aXNpb24gMzY3MzcpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNv
bGlkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOSBAQAogCiAjaWYgRU5BQkxFKFNW
RykKICNpbmNsdWRlICJTVkdQYWludFNlcnZlclNvbGlkLmgiCisKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVy
VHJlZUFzVGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Niw2ICs1OSw1NCBAQCBU
ZXh0U3RyZWFtJiBTVkdQYWludFNlcnZlclNvbGlkOjpleHRlcm5hCiAgICAgcmV0dXJuIHRzOwog
fQogCitib29sIFNWR1BhaW50U2VydmVyU29saWQ6OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNv
bnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlw
ZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QKK3sKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBvYmplY3QgPyBvYmplY3QtPnN0eWxlKCkgOiAwOworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxl
KiBzdmdTdHlsZSA9IG9iamVjdCA/IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKSA6IDA7CisK
KyAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmICghc3R5bGUgfHwgc3Zn
U3R5bGUtPmhhc0ZpbGwoKSkpIHsKKyAgICAgICAgUkdCQTMyIHJnYmEgPSBjb2xvcigpLnJnYigp
OworICAgICAgICBBU1NFUlQoIWNvbG9yKCkuaGFzQWxwaGEoKSk7CisgICAgICAgIGlmIChzdHls
ZSkKKyAgICAgICAgICAgIHJnYmEgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKHJnYmEsIHN2Z1N0
eWxlLT5maWxsT3BhY2l0eSgpKTsKKworICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Iocmdi
YSk7CisKKyAgICAgICAgaWYgKGlzUGFpbnRpbmdUZXh0KQorICAgICAgICAgICAgY29udGV4dC0+
c2V0VGV4dERyYXdpbmdNb2RlKGNUZXh0RmlsbCk7CisgICAgfQorCisgICAgaWYgKCh0eXBlICYg
QXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmICghc3R5bGUgfHwgc3ZnU3R5bGUtPmhhc1N0cm9r
ZSgpKSkgeworICAgICAgICBSR0JBMzIgcmdiYSA9IGNvbG9yKCkucmdiKCk7CisgICAgICAgIEFT
U0VSVCghY29sb3IoKS5oYXNBbHBoYSgpKTsKKyAgICAgICAgaWYgKHN0eWxlKQorICAgICAgICAg
ICAgcmdiYSA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEocmdiYSwgc3ZnU3R5bGUtPnN0cm9rZU9w
YWNpdHkoKSk7CisKKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IocmdiYSk7CisKKyAg
ICAgICAgaWYgKHN0eWxlKQorICAgICAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChj
b250ZXh0LCBzdHlsZSwgb2JqZWN0KTsKKworICAgICAgICBpZiAoaXNQYWludGluZ1RleHQpCisg
ICAgICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY1RleHRTdHJva2UpOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNWR1BhaW50U2VydmVyU29saWQ6OnJl
bmRlclBhdGgoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBw
YXRoLCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSogc3ZnU3R5bGUgPSBwYXRoLT5zdHlsZSgpLT5zdmdTdHlsZSgpOworCisgICAgY29u
dGV4dC0+c2V0RmlsbFJ1bGUoc3ZnU3R5bGUtPmZpbGxSdWxlKCkpOworCisgICAgaWYgKCh0eXBl
ICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdmdTdHlsZS0+aGFzRmlsbCgpKQorICAgICAg
ICBjb250ZXh0LT5maWxsUGF0aCgpOworCisgICAgaWYgKCh0eXBlICYgQXBwbHlUb1N0cm9rZVRh
cmdldFR5cGUpICYmIHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkKKyAgICAgICAgY29udGV4dC0+c3Ry
b2tlUGF0aCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDog
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyU29saWQuaAkocmV2aXNpb24gMzY3
MzcpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNvbGlkLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNv
bnN0OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzZXR1cChHcmFwaGljc0NvbnRleHQqJiwgY29u
c3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlLCBib29sIGlzUGFpbnRpbmdUZXh0
KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoR3JhcGhpY3NDb250ZXh0
KiYsIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CiAKICAg
ICBwcml2YXRlOgogICAgICAgICBTVkdQYWludFNlcnZlclNvbGlkKCk7CkluZGV4OiBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclNvbGlkQ2Fpcm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyU29saWRDYWly
by5jcHAJKHJldmlzaW9uIDM2NzM3KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZH
UGFpbnRTZXJ2ZXJTb2xpZENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHUGFpbnRT
ZXJ2ZXJTb2xpZC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
U1ZHUGFpbnRTZXJ2ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotYm9vbCBTVkdQYWludFNlcnZlclNvbGlkOjpzZXR1cChHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRU
eXBlIHR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0Ci17Ci0gICAgLy8gVE9ETzogc2hh
cmUgdGhpcyBjb2RlIHdpdGggb3RoZXIgUGFpbnRTZXJ2ZXJzCi0gICAgY2Fpcm9fdCogY3IgPSBj
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBz
dmdTdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7Ci0KLSAgICBmbG9hdCByZWQsIGdyZWVuLCBibHVlLCBh
bHBoYTsKLSAgICBjb2xvcigpLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotCi0g
ICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdmdTdHlsZS0+aGFzRmls
bCgpKSB7Ci0gICAgICAgIGFscGhhID0gc3ZnU3R5bGUtPmZpbGxPcGFjaXR5KCk7Ci0gICAgICAg
IGNvbnRleHQtPnNldEZpbGxSdWxlKHN2Z1N0eWxlLT5maWxsUnVsZSgpKTsKLSAgICB9Ci0KLSAg
ICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3ZnU3R5bGUtPmhhc1N0
cm9rZSgpKSB7Ci0gICAgICAgIGFscGhhID0gc3ZnU3R5bGUtPnN0cm9rZU9wYWNpdHkoKTsKLSAg
ICAgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSwgb2JqZWN0KTsK
LSAgICB9Ci0KLSAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsIHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJT
b2xpZENnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWlu
dFNlcnZlclNvbGlkQ2cuY3BwCShyZXZpc2lvbiAzNjczNykKKysrIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2NnL1NWR1BhaW50U2VydmVyU29saWRDZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcg
KzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3
aWxkZm94QGtkZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2pl
Y3QKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhaW50
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAi
U1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oIgotCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJD
Z1N1cHBvcnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIFNWR1BhaW50U2VydmVy
U29saWQ6OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkg
Y29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1c2UgYW55IENH
LXNwZWNpZmljIGNhbGxzLCBob3dldmVyIGl0J3Mgbm90IHlldAotICAgIC8vIGNyb3NzIHBsYXRm
b3JtLCBiZWNhdXNlIENHIGhhbmRsZXMgZmlsbCBydWxlIGRpZmZlcmVudCBmcm9tIG90aGVyIGdy
YXBoaWNzCi0gICAgLy8gcGxhdGZvcm1zLiAgQ0cgbWFrZXMgeW91IHVzZSB0d28gc2VwYXJhdGUg
ZmlsbCBjYWxscywgb3RoZXIgcGxhdGZvcm1zIHNldAotICAgIC8vIHRoZSBmaWxsIHJ1bGUgc3Rh
dGUgb24gdGhlIGNvbnRleHQgYW5kIHRoZW4gY2FsbCBhIGdlbmVyaWMgImZpbGxQYXRoIgotCi0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0ID8gb2JqZWN0LT5zdHlsZSgpIDogMDsKLQot
ICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgKCFzdHlsZSB8fCBzdHls
ZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSkgewotICAgICAgICBSR0JBMzIgcmdiYSA9IGNvbG9y
KCkucmdiKCk7Ci0gICAgICAgIEFTU0VSVCghY29sb3IoKS5oYXNBbHBoYSgpKTsKLSAgICAgICAg
aWYgKHN0eWxlKQotICAgICAgICAgICAgcmdiYSA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEocmdi
YSwgc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxPcGFjaXR5KCkpOwotCi0gICAgICAgIGNvbnRleHQt
PnNldEZpbGxDb2xvcihyZ2JhKTsKLQotICAgICAgICBpZiAoaXNQYWludGluZ1RleHQpCi0gICAg
ICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY1RleHRGaWxsKTsKLSAgICB9Ci0K
LSAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgKCFzdHlsZSB8fCBz
dHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpKSB7Ci0gICAgICAgIFJHQkEzMiByZ2JhID0g
Y29sb3IoKS5yZ2IoKTsKLSAgICAgICAgQVNTRVJUKCFjb2xvcigpLmhhc0FscGhhKCkpOwotICAg
ICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICByZ2JhID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBo
YShyZ2JhLCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlT3BhY2l0eSgpKTsKLQotICAgICAgICBj
b250ZXh0LT5zZXRTdHJva2VDb2xvcihyZ2JhKTsKLQotICAgICAgICBpZiAoc3R5bGUpCi0gICAg
ICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3Qp
OwotCi0gICAgICAgIGlmIChpc1BhaW50aW5nVGV4dCkKLSAgICAgICAgICAgIGNvbnRleHQtPnNl
dFRleHREcmF3aW5nTW9kZShjVGV4dFN0cm9rZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLS8vIHZpbTp0cz00Om5v
ZXQKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyU29saWRRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJT
b2xpZFF0LmNwcAkocmV2aXNpb24gMzY3MzcpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9T
VkdQYWludFNlcnZlclNvbGlkUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc4ICswLDAgQEAK
LS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBr
ZGUub3JnPgotICAgIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
cgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVy
U29saWQuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRl
clBhdGguaCIKLQotI2luY2x1ZGUgPFFQYWludGVyPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWJvb2wgU1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4
dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBi
b29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAotewotICAgIFFQYWludGVyKiBwYWludGVyKGNvbnRl
eHQgPyBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSA6IDApOwotICAgIFFfQVNTRVJUKHBhaW50
ZXIpOwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gb2JqZWN0LT5zdHls
ZSgpLT5zdmdTdHlsZSgpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdCA/IG9iamVj
dC0+c3R5bGUoKSA6IDA7Ci0gICAgLy8gVE9ETz8gcGFpbnRlci0+c2V0T3BhY2l0eShyZW5kZXJT
dHlsZS0+b3BhY2l0eSgpKTsKLQotICAgIFFDb2xvciBjID0gY29sb3IoKTsKLQotICAgIGlmICgo
dHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgKCFzdHlsZSB8fCBzdmdTdHlsZS0+aGFz
RmlsbCgpKSkgewotICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICBjLnNldEFscGhhRihz
dmdTdHlsZS0+ZmlsbE9wYWNpdHkoKSk7Ci0KLSAgICAgICAgUUJydXNoIGJydXNoKGMpOwotICAg
ICAgICBwYWludGVyLT5zZXRCcnVzaChicnVzaCk7Ci0KLSAgICAgICAgaWYgKHN0eWxlKQotICAg
ICAgICAgICAgY29udGV4dC0+c2V0RmlsbFJ1bGUoc3ZnU3R5bGUtPmZpbGxSdWxlKCkpOwotCi0g
ICAgICAgIC8qIGlmKGlzUGFpbnRpbmdUZXh0KCkpIC4uLiAqLwotICAgIH0KLQotICAgIGlmICgo
dHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiAoIXN0eWxlIHx8IHN2Z1N0eWxlLT5o
YXNTdHJva2UoKSkpIHsKLSAgICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgYy5zZXRBbHBo
YUYoc3ZnU3R5bGUtPnN0cm9rZU9wYWNpdHkoKSk7Ci0KLSAgICAgICAgUVBlbiBwZW4oYyk7Ci0g
ICAgICAgIHBhaW50ZXItPnNldFBlbihwZW4pOwotICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAg
ICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3QpOwot
Ci0gICAgICAgIC8qIGlmKGlzUGFpbnRpbmdUZXh0KCkpIC4uLiAqLwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0vLyB2
aW06dHM9NDpub2V0Cg==
</data>
<flag name="review"
          id="10589"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23627</attachid>
            <date>2008-09-21 10:20:59 -0700</date>
            <delta_ts>2008-11-15 15:46:04 -0800</delta_ts>
            <desc>SVGPaintServer cleanUp - third part</desc>
            <filename>SVGPaintServer-cleanUp-third.patch</filename>
            <type>text/plain</type>
            <size>18597</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjczOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMDgtMDktMjEgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmVk
IHBsYXRmb3JtIGRlcGVuZGVudCBjb2RlIG9uIFNWR1BhaW50U2VydmVyU29saWQuCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVy
U29saWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6c2V0dXAp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6cmVuZGVyUGF0aCk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyU29saWQuaDoKKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJTb2xpZENhaXJvLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJTb2xpZFF0LmNw
cDogUmVtb3ZlZC4KKwogMjAwOC0wOS0yMSAgRGlyayBTY2h1bHplICA8dmJzODVAZ214LmRlPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IGVzZWlkZWwuICBMYW5kZWQgYnkgZXNlaWRlbC4KSW5kZXg6
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQkocmV2aXNpb24gMzY3MzcpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzI3LDcgKzMzMjcsNiBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyQ2Fpcm8uY3BwIFwKIAlXZWJD
b3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlckdyYWRpZW50Q2Fpcm8uY3BwIFwK
IAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclBhdHRlcm5DYWlyby5j
cHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyU29saWRDYWly
by5jcHAgXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1Jlc291cmNlQ2xpcHBlckNh
aXJvLmNwcCBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUmVzb3VyY2VGaWx0ZXJD
YWlyby5jcHAgXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1Jlc291cmNlTWFza2Vy
Q2Fpcm8uY3BwCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDM2NzM3KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwko
d29ya2luZyBjb3B5KQpAQCAtMTY1NSw3ICsxNjU1LDYgQEAgU09VUkNFUyArPSBcCiAgICAgICAg
IHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclBhdHRlcm5RdC5jcHAgXAogICAgICAgICBz
dmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJRdC5jcHAgXAogICAgICAgICBzdmcvZ3JhcGhp
Y3MvcXQvU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0LmNwcCBcCi0gICAgICAgIHN2Zy9n
cmFwaGljcy9xdC9TVkdQYWludFNlcnZlclNvbGlkUXQuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBo
aWNzL3F0L1NWR1Jlc291cmNlQ2xpcHBlclF0LmNwcCBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9x
dC9TVkdSZXNvdXJjZUZpbHRlclF0LmNwcCBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9xdC9TVkdS
ZXNvdXJjZU1hc2tlclF0LmNwcApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCShyZXZpc2lvbiAzNjczNykKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTE1MjE2LDI2ICsxNTIxNiw2IEBACiAJCQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPg0KIAkJCQkJPC9GaWxlPg0KIAkJCQkJPEZpbGUNCi0JCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xjZ1xTVkdQYWludFNlcnZlclNvbGlkQ2cuY3BwIg0K
LQkJCQkJCT4NCi0JCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQkJTmFtZT0iRGVidWdf
Q2Fpcm98V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+
DQotCQkJCQkJCTxUb29sDQotCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJ
CQkvPg0KLQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQkJPEZpbGVDb25maWd1cmF0
aW9uDQotCQkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm98V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQotCQkJCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQkvPg0KLQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
c3ZnXGdyYXBoaWNzXGNnXFNWR1Jlc291cmNlQ2xpcHBlckNnLmNwcCINCiAJCQkJCQk+DQogCQkJ
CQkJPEZpbGVDb25maWd1cmF0aW9uDQpAQCAtMTU2MDAsNDIgKzE1NTgwLDYgQEAKIAkJCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJl
bGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGNhaXJvXFNWR1BhaW50U2VydmVyU29saWRDYWly
by5jcHAiDQotCQkJCQkJPg0KLQkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCQlOYW1l
PSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJ
CT4NCi0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJ
CQkJCS8+DQotCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24NCi0JCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiDQotCQkJCQkJCT4NCi0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiDQotCQkJCQkJCS8+DQotCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4N
Ci0JCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQkJTmFtZT0iRGVidWdfSW50ZXJuYWx8
V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+DQotCQkJ
CQkJCTxUb29sDQotCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQkvPg0K
LQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQot
CQkJCQkJCU5hbWU9IlJlbGVhc2VfUEdPfFdpbjMyIg0KLQkJCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSINCi0JCQkJCQkJPg0KLQkJCQkJCQk8VG9vbA0KLQkJCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCINCi0JCQkJCQkJLz4NCi0JCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJ
CQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFw
aGljc1xjYWlyb1xTVkdSZXNvdXJjZUNsaXBwZXJDYWlyby5jcHAiDQogCQkJCQkJPg0KIAkJCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAzNjczNykKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgwLDcgKzMwODAsNiBAQAog
CQlCMjU1OTkyRjBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTg5MzBEMDBEOEI4
MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAgKi87IH07CiAJCUIyNTU5OTMwMEQwMEQ4
QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTQwRDAwRDhCODAwQkI4MjVD
IC8qIFNWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAgKi87IH07CiAJCUIyNTU5OTMxMEQwMEQ4
QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTg5NTBEMDBEOEI4MDBCQjgyNUMg
LyogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwICovOyB9OwotCQlCMjU1OTkzMjBEMDBEOEJB
MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5ODk2MEQwMEQ4QjgwMEJCODI1QyAvKiBT
VkdQYWludFNlcnZlclNvbGlkQ2cuY3BwICovOyB9OwogCQlCMjU1OTkzMzBEMDBEOEJBMDBCQjgy
NUMgLyogU1ZHUmVzb3VyY2VDbGlwcGVyQ2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTcwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291
cmNlQ2xpcHBlckNnLmNwcCAqLzsgfTsKIAkJQjI1NTk5MzUwRDAwRDhCQTAwQkI4MjVDIC8qIFNW
R1Jlc291cmNlRmlsdGVyQ2cubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjU1OTg5OTBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VGaWx0ZXJD
Zy5tbSAqLzsgfTsKIAkJQjI1NTk5MzcwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFz
a2VyQ2cubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MjU1OTg5QjBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbSAqLzsgfTsK
QEAgLTc1ODYsNyArNzU4NSw2IEBACiAJCUIyNTU5ODkzMEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQ
YWludFNlcnZlckNnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
VkdQYWludFNlcnZlckNnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4
OTQwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENn
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OTUwRDAwRDhCODAwQkI4
MjVDIC8qIFNWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5ODk2MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNl
cnZlclNvbGlkQ2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNW
R1BhaW50U2VydmVyU29saWRDZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
NTU5ODk3MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdSZXNvdXJjZUNsaXBwZXJDZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUmVzb3VyY2VDbGlwcGVyQ2cuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjU1OTg5OTBEMDBEOEI4MDBCQjgyNUMg
LyogU1ZHUmVzb3VyY2VGaWx0ZXJDZy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBTVkdSZXNvdXJjZUZpbHRlckNnLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMjU1OTg5QjBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VNYXNrZXJDZy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTVkdSZXNvdXJjZU1h
c2tlckNnLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIyNzIsNyArMTIyNzAs
NiBAQAogCQkJCUIyNTU5ODkzMEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckNnLmNw
cCAqLywKIAkJCQlCMjU1OTg5NDBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudENnLmNwcCAqLywKIAkJCQlCMjU1OTg5NTBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRT
ZXJ2ZXJQYXR0ZXJuQ2cuY3BwICovLAotCQkJCUIyNTU5ODk2MEQwMEQ4QjgwMEJCODI1QyAvKiBT
VkdQYWludFNlcnZlclNvbGlkQ2cuY3BwICovLAogCQkJCUIyNTU5ODk3MEQwMEQ4QjgwMEJCODI1
QyAvKiBTVkdSZXNvdXJjZUNsaXBwZXJDZy5jcHAgKi8sCiAJCQkJQjI1NTk4OTkwRDAwRDhCODAw
QkI4MjVDIC8qIFNWR1Jlc291cmNlRmlsdGVyQ2cubW0gKi8sCiAJCQkJQjI1NTk4OUIwRDAwRDhC
ODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFza2VyQ2cubW0gKi8sCkBAIC0xNzIxNSw3ICsxNzIx
Miw2IEBACiAJCQkJQjI1NTk5MzEwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyUGF0
dGVybkNnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNTU5OUFFMEQwMEQ4QkEwMEJCODI1QyAv
KiBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
NTU5OUIwMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclNvbGlkLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUIyNTU5OTMyMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclNv
bGlkQ2cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBNTYwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR1BhcnNlclV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0E1ODBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHUGF0aEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIy
MjdBNUQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWdBcmMuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNvbGlkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNvbGlkLmNwcAko
cmV2aXNpb24gMzY3MzcpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNv
bGlkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOSBAQAogCiAjaWYgRU5BQkxFKFNW
RykKICNpbmNsdWRlICJTVkdQYWludFNlcnZlclNvbGlkLmgiCisKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVy
VHJlZUFzVGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Niw2ICs1OSw1MyBAQCBU
ZXh0U3RyZWFtJiBTVkdQYWludFNlcnZlclNvbGlkOjpleHRlcm5hCiAgICAgcmV0dXJuIHRzOwog
fQogCitib29sIFNWR1BhaW50U2VydmVyU29saWQ6OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNv
bnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlw
ZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QKK3sKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBvYmplY3QgPyBvYmplY3QtPnN0eWxlKCkgOiAwOworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxl
KiBzdmdTdHlsZSA9IG9iamVjdCA/IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKSA6IDA7CisK
KyAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmICghc3R5bGUgfHwgc3Zn
U3R5bGUtPmhhc0ZpbGwoKSkpIHsKKyAgICAgICAgUkdCQTMyIHJnYmEgPSBjb2xvcigpLnJnYigp
OworICAgICAgICBBU1NFUlQoIWNvbG9yKCkuaGFzQWxwaGEoKSk7CisgICAgICAgIGlmIChzdHls
ZSkKKyAgICAgICAgICAgIHJnYmEgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKHJnYmEsIHN2Z1N0
eWxlLT5maWxsT3BhY2l0eSgpKTsKKworICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShzdmdT
dHlsZS0+ZmlsbFJ1bGUoKSk7CisgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihyZ2JhKTsK
KworICAgICAgICBpZiAoaXNQYWludGluZ1RleHQpCisgICAgICAgICAgICBjb250ZXh0LT5zZXRU
ZXh0RHJhd2luZ01vZGUoY1RleHRGaWxsKTsKKyAgICB9CisKKyAgICBpZiAoKHR5cGUgJiBBcHBs
eVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgKCFzdHlsZSB8fCBzdmdTdHlsZS0+aGFzU3Ryb2tlKCkp
KSB7CisgICAgICAgIFJHQkEzMiByZ2JhID0gY29sb3IoKS5yZ2IoKTsKKyAgICAgICAgQVNTRVJU
KCFjb2xvcigpLmhhc0FscGhhKCkpOworICAgICAgICBpZiAoc3R5bGUpCisgICAgICAgICAgICBy
Z2JhID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShyZ2JhLCBzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0
eSgpKTsKKworICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihyZ2JhKTsKKworICAgICAg
ICBpZiAoc3R5bGUpCisgICAgICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRl
eHQsIHN0eWxlLCBvYmplY3QpOworCisgICAgICAgIGlmIChpc1BhaW50aW5nVGV4dCkKKyAgICAg
ICAgICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShjVGV4dFN0cm9rZSk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6cmVuZGVy
UGF0aChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHBhdGgs
IFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAgIGNvbnN0IFNWR1JlbmRlclN0
eWxlKiBzdmdTdHlsZSA9IHBhdGgtPnN0eWxlKCktPnN2Z1N0eWxlKCk7CisKKyAgICBpZiAoKHR5
cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN2Z1N0eWxlLT5oYXNGaWxsKCkpCisgICAg
ICAgIGNvbnRleHQtPmZpbGxQYXRoKCk7CisKKyAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tl
VGFyZ2V0VHlwZSkgJiYgc3ZnU3R5bGUtPmhhc1N0cm9rZSgpKQorICAgICAgICBjb250ZXh0LT5z
dHJva2VQYXRoKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4
OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclNvbGlkLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oCShyZXZpc2lvbiAz
NjczNykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyU29saWQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikg
Y29uc3Q7CiAKICAgICAgICAgdmlydHVhbCBib29sIHNldHVwKEdyYXBoaWNzQ29udGV4dComLCBj
b25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUsIGJvb2wgaXNQYWludGluZ1Rl
eHQpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyUGF0aChHcmFwaGljc0NvbnRl
eHQqJiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIFNWR1BhaW50U2VydmVyU29saWQoKTsKSW5kZXg6IFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyU29saWRDYWlyby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJTb2xpZENh
aXJvLmNwcAkocmV2aXNpb24gMzY3MzcpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9T
VkdQYWludFNlcnZlclNvbGlkQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJTVkdQYWlu
dFNlcnZlclNvbGlkLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJTVkdQYWludFNlcnZlci5oIgotI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1ib29sIFNWR1BhaW50U2VydmVyU29saWQ6OnNldHVwKEdyYXBoaWNzQ29u
dGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdl
dFR5cGUgdHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QKLXsKLSAgICAvLyBUT0RPOiBz
aGFyZSB0aGlzIGNvZGUgd2l0aCBvdGhlciBQYWludFNlcnZlcnMKLSAgICBjYWlyb190KiBjciA9
IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUq
IHN2Z1N0eWxlID0gb2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKLQotICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhOwotICAgIGNvbG9yKCkuZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0K
LSAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN2Z1N0eWxlLT5oYXNG
aWxsKCkpIHsKLSAgICAgICAgYWxwaGEgPSBzdmdTdHlsZS0+ZmlsbE9wYWNpdHkoKTsKLSAgICAg
ICAgY29udGV4dC0+c2V0RmlsbFJ1bGUoc3ZnU3R5bGUtPmZpbGxSdWxlKCkpOwotICAgIH0KLQot
ICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdmdTdHlsZS0+aGFz
U3Ryb2tlKCkpIHsKLSAgICAgICAgYWxwaGEgPSBzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpOwot
ICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3Qp
OwotICAgIH0KLQotICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGEpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZl
clNvbGlkQ2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1Bh
aW50U2VydmVyU29saWRDZy5jcHAJKHJldmlzaW9uIDM2NzM3KQorKysgV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
NyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHdpbGRmb3hAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJv
amVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFp
bnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRl
ICJTVkdQYWludFNlcnZlclNvbGlkLmgiCi0KLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUg
IkNnU3VwcG9ydC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgU1ZHUGFpbnRTZXJ2
ZXJTb2xpZDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0
KSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHVzZSBhbnkg
Q0ctc3BlY2lmaWMgY2FsbHMsIGhvd2V2ZXIgaXQncyBub3QgeWV0Ci0gICAgLy8gY3Jvc3MgcGxh
dGZvcm0sIGJlY2F1c2UgQ0cgaGFuZGxlcyBmaWxsIHJ1bGUgZGlmZmVyZW50IGZyb20gb3RoZXIg
Z3JhcGhpY3MKLSAgICAvLyBwbGF0Zm9ybXMuICBDRyBtYWtlcyB5b3UgdXNlIHR3byBzZXBhcmF0
ZSBmaWxsIGNhbGxzLCBvdGhlciBwbGF0Zm9ybXMgc2V0Ci0gICAgLy8gdGhlIGZpbGwgcnVsZSBz
dGF0ZSBvbiB0aGUgY29udGV4dCBhbmQgdGhlbiBjYWxsIGEgZ2VuZXJpYyAiZmlsbFBhdGgiCi0K
LSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QgPyBvYmplY3QtPnN0eWxlKCkgOiAwOwot
Ci0gICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiAoIXN0eWxlIHx8IHN0
eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpKSB7Ci0gICAgICAgIFJHQkEzMiByZ2JhID0gY29s
b3IoKS5yZ2IoKTsKLSAgICAgICAgQVNTRVJUKCFjb2xvcigpLmhhc0FscGhhKCkpOwotICAgICAg
ICBpZiAoc3R5bGUpCi0gICAgICAgICAgICByZ2JhID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShy
Z2JhLCBzdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbE9wYWNpdHkoKSk7Ci0KLSAgICAgICAgY29udGV4
dC0+c2V0RmlsbENvbG9yKHJnYmEpOwotCi0gICAgICAgIGlmIChpc1BhaW50aW5nVGV4dCkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShjVGV4dEZpbGwpOwotICAgIH0K
LQotICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiAoIXN0eWxlIHx8
IHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkpIHsKLSAgICAgICAgUkdCQTMyIHJnYmEg
PSBjb2xvcigpLnJnYigpOwotICAgICAgICBBU1NFUlQoIWNvbG9yKCkuaGFzQWxwaGEoKSk7Ci0g
ICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJnYmEgPSBjb2xvcldpdGhPdmVycmlkZUFs
cGhhKHJnYmEsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VPcGFjaXR5KCkpOwotCi0gICAgICAg
IGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHJnYmEpOwotCi0gICAgICAgIGlmIChzdHlsZSkKLSAg
ICAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVj
dCk7Ci0KLSAgICAgICAgaWYgKGlzUGFpbnRpbmdUZXh0KQotICAgICAgICAgICAgY29udGV4dC0+
c2V0VGV4dERyYXdpbmdNb2RlKGNUZXh0U3Ryb2tlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotLy8gdmltOnRzPTQ6
bm9ldApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJTb2xpZFF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZl
clNvbGlkUXQuY3BwCShyZXZpc2lvbiAzNjczNykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0
L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzggKzAsMCBA
QAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94
QGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyCi0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQotICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2
ZXJTb2xpZC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyUGF0aC5oIgotCi0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotYm9vbCBTVkdQYWludFNlcnZlclNvbGlkOjpzZXR1cChHcmFwaGljc0NvbnRleHQqJiBjb250
ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUs
IGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0Ci17Ci0gICAgUVBhaW50ZXIqIHBhaW50ZXIoY29u
dGV4dCA/IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogMCk7Ci0gICAgUV9BU1NFUlQocGFp
bnRlcik7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBvYmplY3QtPnN0
eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0ID8gb2Jq
ZWN0LT5zdHlsZSgpIDogMDsKLSAgICAvLyBUT0RPPyBwYWludGVyLT5zZXRPcGFjaXR5KHJlbmRl
clN0eWxlLT5vcGFjaXR5KCkpOwotCi0gICAgUUNvbG9yIGMgPSBjb2xvcigpOwotCi0gICAgaWYg
KCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiAoIXN0eWxlIHx8IHN2Z1N0eWxlLT5o
YXNGaWxsKCkpKSB7Ci0gICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAgIGMuc2V0QWxwaGFG
KHN2Z1N0eWxlLT5maWxsT3BhY2l0eSgpKTsKLQotICAgICAgICBRQnJ1c2ggYnJ1c2goYyk7Ci0g
ICAgICAgIHBhaW50ZXItPnNldEJydXNoKGJydXNoKTsKLQotICAgICAgICBpZiAoc3R5bGUpCi0g
ICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShzdmdTdHlsZS0+ZmlsbFJ1bGUoKSk7Ci0K
LSAgICAgICAgLyogaWYoaXNQYWludGluZ1RleHQoKSkgLi4uICovCi0gICAgfQotCi0gICAgaWYg
KCh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmICghc3R5bGUgfHwgc3ZnU3R5bGUt
Pmhhc1N0cm9rZSgpKSkgewotICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICBjLnNldEFs
cGhhRihzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpKTsKLQotICAgICAgICBRUGVuIHBlbihjKTsK
LSAgICAgICAgcGFpbnRlci0+c2V0UGVuKHBlbik7Ci0gICAgICAgIGlmIChzdHlsZSkKLSAgICAg
ICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVjdCk7
Ci0KLSAgICAgICAgLyogaWYoaXNQYWludGluZ1RleHQoKSkgLi4uICovCi0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLS8v
IHZpbTp0cz00Om5vZXQK
</data>
<flag name="review"
          id="10591"
          type_id="1"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23660</attachid>
            <date>2008-09-22 12:15:54 -0700</date>
            <delta_ts>2008-09-23 00:55:25 -0700</delta_ts>
            <desc>SVGPaintServer cleanUp - fourth part</desc>
            <filename>SVGPaintServer-cleanUp-fourth.path</filename>
            <type>text/plain</type>
            <size>6865</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjc3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDgtMDktMjIgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlZCBt
YWtlTWFwQmV0d2VlblJlY3RzIGZyb20gU1ZHL0NnIHRvIEFmZmluZVRyYW5zZm9ybSAgICAgICAg
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9BZmZpbmVUcmFuc2Zvcm0uY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5oOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9jZy9DZ1N1cHBvcnQuY3BwOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9jZy9D
Z1N1cHBvcnQuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudENnLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6Omhh
bmRsZUJvdW5kaW5nQm94TW9kZUFuZEdyYWRpZW50VHJhbnNmb3JtYXRpb24pOgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9jZy9TVkdSZXNvdXJjZUNsaXBwZXJDZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcCk6CisKIDIwMDgtMDktMjIgIENocmlz
IEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWZmaW5lVHJhbnNm
b3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRy
YW5zZm9ybS5jcHAJKHJldmlzaW9uIDM2NzY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9BZmZpbmVUcmFuc2Zvcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNiArMTM1LDE0IEBA
IEFmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpza2V3WSgKICAgICByZXR1cm4gc2hl
YXIoMC4wZiwgdGFuKGRlZzJyYWQoYW5nbGUpKSk7CiB9CiAKK0FmZmluZVRyYW5zZm9ybSYgQWZm
aW5lVHJhbnNmb3JtOjptYWtlTWFwQmV0d2VlblJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3QpOworeworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zv
cm07CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShkZXN0LngoKSAtIHNvdXJjZS54KCksIGRlc3Qu
eSgpIC0gc291cmNlLnkoKSk7CisgICAgdHJhbnNmb3JtLnNjYWxlKGRlc3Qud2lkdGgoKSAvIHNv
dXJjZS53aWR0aCgpLCBkZXN0LmhlaWdodCgpIC8gc291cmNlLmhlaWdodCgpKTsKKyAgICByZXR1
cm4gdHJhbnNmb3JtOworfQorCiBJbnRQb2ludCBBZmZpbmVUcmFuc2Zvcm06Om1hcFBvaW50KGNv
bnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBkb3VibGUgeDIsIHkyOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BZmZpbmVUcmFuc2Zvcm0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5oCShyZXZpc2lvbiAz
Njc2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyMyw2ICsxMjMsOCBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCitB
ZmZpbmVUcmFuc2Zvcm0mIG1ha2VNYXBCZXR3ZWVuUmVjdHMoY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEFmZmluZVRyYW5zZm9ybV9oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9j
Zy9DZ1N1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0Nn
U3VwcG9ydC5jcHAJKHJldmlzaW9uIDM2NzY5KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cv
Q2dTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQxLDYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1DR0FmZmluZVRyYW5zZm9ybSBDR0FmZmluZVRyYW5zZm9ybU1ha2VN
YXBCZXR3ZWVuUmVjdHMoQ0dSZWN0IHNvdXJjZSwgQ0dSZWN0IGRlc3QpCi17Ci0gICAgQ0dBZmZp
bmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlVHJhbnNsYXRpb24o
ZGVzdC5vcmlnaW4ueCAtIHNvdXJjZS5vcmlnaW4ueCwgZGVzdC5vcmlnaW4ueSAtIHNvdXJjZS5v
cmlnaW4ueSk7Ci0gICAgdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1TY2FsZSh0cmFuc2Zv
cm0sIGRlc3Quc2l6ZS53aWR0aC9zb3VyY2Uuc2l6ZS53aWR0aCwgZGVzdC5zaXplLmhlaWdodC9z
b3VyY2Uuc2l6ZS5oZWlnaHQpOwotICAgIHJldHVybiB0cmFuc2Zvcm07Ci19Ci0KIENHQ29udGV4
dFJlZiBzY3JhdGNoQ29udGV4dCgpCiB7CiAgICAgc3RhdGljIENHQ29udGV4dFJlZiBzY3JhdGNo
ID0gMDsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5oCShyZXZpc2lvbiAzNjc2
OSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw4ICs0MSw2IEBAIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgUmVuZGVyT2JqZWN0
OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogCi1DR0FmZmluZVRyYW5zZm9ybSBDR0FmZmluZVRy
YW5zZm9ybU1ha2VNYXBCZXR3ZWVuUmVjdHMoQ0dSZWN0IHNvdXJjZSwgQ0dSZWN0IGRlc3QpOwot
CiBDR0NvbnRleHRSZWYgc2NyYXRjaENvbnRleHQoKTsKIEZsb2F0UmVjdCBzdHJva2VCb3VuZGlu
Z0JveChjb25zdCBQYXRoJiBwYXRoLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlck9iamVjdCop
OwogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckdyYWRpZW50
Q2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2Vy
dmVyR3JhZGllbnRDZy5jcHAJKHJldmlzaW9uIDM2NzY5KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQs
NyArMjQsNiBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudC5oIgogCi0jaW5jbHVkZSAiQ2dTdXBwb3J0LmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJz
aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKQEAgLTI1NCwyMCArMjUzLDE2IEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6
cmVuZGVyUGF0aCgKIAogdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpoYW5kbGVCb3VuZGlu
Z0JveE1vZGVBbmRHcmFkaWVudFRyYW5zZm9ybWF0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0KSBjb25zdAogewotICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0UmVmID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KICAgICBpZiAoYm91
bmRpbmdCb3hNb2RlKCkpIHsKICAgICAgICAgLy8gQ2hvb3NlIGRlZmF1bHQgZ3JhZGllbnQgYm91
bmRpbmcgYm94Ci0gICAgICAgIENHUmVjdCBncmFkaWVudEJCb3ggPSBDR1JlY3RNYWtlKDAuMGYs
IDAuMGYsIDEuMGYsIDEuMGYpOworICAgICAgICBGbG9hdFJlY3QgZ3JhZGllbnRCQm94KDAuMGYs
IDAuMGYsIDEuMGYsIDEuMGYpOwogCiAgICAgICAgIC8vIEdlbmVyYXRlIGEgdHJhbnNmb3JtIHRv
IG1hcCBiZXR3ZWVuIGJvdGggYm91bmRpbmcgYm94ZXMKLSAgICAgICAgQ0dBZmZpbmVUcmFuc2Zv
cm0gZ3JhZGllbnRJbnRvT2JqZWN0QkJveCA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZU1hcEJldHdl
ZW5SZWN0cyhncmFkaWVudEJCb3gsIENHUmVjdCh0YXJnZXRSZWN0KSk7Ci0gICAgICAgIENHQ29u
dGV4dENvbmNhdENUTShjb250ZXh0UmVmLCBncmFkaWVudEludG9PYmplY3RCQm94KTsKKyAgICAg
ICAgY29udGV4dC0+Y29uY2F0Q1RNKG1ha2VNYXBCZXR3ZWVuUmVjdHMoZ3JhZGllbnRCQm94LCB0
YXJnZXRSZWN0KSk7CiAgICAgfQogCiAgICAgLy8gQXBwbHkgdGhlIGdyYWRpZW50J3Mgb3duIHRy
YW5zZm9ybQotICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdyYWRpZW50VHJhbnNm
b3JtKCk7Ci0gICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHRSZWYsIHRyYW5zZm9ybSk7Cisg
ICAgY29udGV4dC0+Y29uY2F0Q1RNKGdyYWRpZW50VHJhbnNmb3JtKCkpOwogfQogCiBib29sIFNW
R1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNv
bnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSwgYm9vbCBp
c1BhaW50aW5nVGV4dCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1Jl
c291cmNlQ2xpcHBlckNnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9j
Zy9TVkdSZXNvdXJjZUNsaXBwZXJDZy5jcHAJKHJldmlzaW9uIDM2NzY5KQorKysgV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvY2cvU1ZHUmVzb3VyY2VDbGlwcGVyQ2cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCwxNCArMzAsMTMgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1Jlc291cmNl
Q2xpcHBlci5oIgogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiQ2dTdXBwb3J0LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdm9pZCBTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0CiB7Ci0gICAg
Q0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAg
IGlmIChtX2NsaXBEYXRhLmNsaXBEYXRhKCkuc2l6ZSgpIDwgMSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC00NiwyNCArNDUsMjIgQEAgdm9pZCBTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcChH
cmFwaAogCiAgICAgY29udGV4dC0+YmVnaW5QYXRoKCk7CiAKLSAgICBDR0FmZmluZVRyYW5zZm9y
bSBiYm94VHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlTWFwQmV0d2VlblJlY3RzKENH
UmVjdE1ha2UoMCwwLDEsMSksIENHUmVjdChib3VuZGluZ0JveCkpOworICAgIEFmZmluZVRyYW5z
Zm9ybSBiYm94VHJhbnNmb3JtID0gbWFrZU1hcEJldHdlZW5SZWN0cyhGbG9hdFJlY3QoMC4wZiwg
MC4wZiwgMS4wZiwgMS4wZiksIGJvdW5kaW5nQm94KTsKIAogICAgIGZvciAodW5zaWduZWQgeCA9
IDA7IHggPCBtX2NsaXBEYXRhLmNsaXBEYXRhKCkuc2l6ZSgpOyB4KyspIHsKICAgICAgICAgQ2xp
cERhdGEgZGF0YSA9IG1fY2xpcERhdGEuY2xpcERhdGEoKVt4XTsKICAgICAgICAgaWYgKGRhdGEu
d2luZFJ1bGUgIT0gY2xpcFJ1bGUpCiAgICAgICAgICAgICBoZXRlcm9nZW5vdXNDbGlwUnVsZXMg
PSB0cnVlOwogICAgICAgICAKLSAgICAgICAgQ0dQYXRoUmVmIGNsaXBQYXRoID0gZGF0YS5wYXRo
LnBsYXRmb3JtUGF0aCgpOworICAgICAgICBQYXRoIGNsaXBQYXRoID0gZGF0YS5wYXRoOworCisg
ICAgICAgIGlmIChkYXRhLmJib3hVbml0cykKKyAgICAgICAgICAgIGNsaXBQYXRoLnRyYW5zZm9y
bShiYm94VHJhbnNmb3JtKTsKIAotICAgICAgICBpZiAoZGF0YS5iYm94VW5pdHMpIHsKLSAgICAg
ICAgICAgIENHTXV0YWJsZVBhdGhSZWYgdHJhbnNmb3JtZWRQYXRoID0gQ0dQYXRoQ3JlYXRlTXV0
YWJsZSgpOwotICAgICAgICAgICAgQ0dQYXRoQWRkUGF0aCh0cmFuc2Zvcm1lZFBhdGgsICZiYm94
VHJhbnNmb3JtLCBjbGlwUGF0aCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNnQ29u
dGV4dCwgdHJhbnNmb3JtZWRQYXRoKTsKLSAgICAgICAgICAgIENHUGF0aFJlbGVhc2UodHJhbnNm
b3JtZWRQYXRoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRo
KGNnQ29udGV4dCwgY2xpcFBhdGgpOworICAgICAgICBjb250ZXh0LT5hZGRQYXRoKGNsaXBQYXRo
KTsKICAgICB9CiAKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCk7CiAgICAgaWYgKG1fY2xpcERhdGEuY2xpcERhdGEoKS5zaXplKCkpIHsKICAg
ICAgICAgLy8gRklYTUUhCiAgICAgICAgIC8vIFdlIGRvbid0IGN1cnJlbnRseSBhbGxvdyBmb3Ig
aGV0ZXJvZ2Vub3VzIGNsaXAgcnVsZXMuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23712</attachid>
            <date>2008-09-23 12:53:47 -0700</date>
            <delta_ts>2008-09-23 13:18:39 -0700</delta_ts>
            <desc>SVGPaintServer cleanUp - pre fifth part</desc>
            <filename>SVGPaintServer-cleanUp-pre-fifth.patch</filename>
            <type>text/plain</type>
            <size>3511</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2
aXNpb24gMzY4MDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNiArMTc2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKICAgICAgICAg
dm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCk7CisgICAg
ICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpOwogCiAgICAgICAgIHZvaWQgZHJhd0lt
YWdlKEltYWdlKiwgY29uc3QgSW50UG9pbnQmLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0
ZVNvdXJjZU92ZXIpOwogICAgICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZSosIGNvbnN0IEludFJl
Y3QmLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93
UXVhbGl0eVNjYWxlID0gZmFsc2UpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHJldmlzaW9uIDM2ODAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcwMSw2ICs3MDEsMTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJl
Y3QoY29uc3QgRgogICAgIENHQ29udGV4dFN0cm9rZVJlY3RXaXRoV2lkdGgocGxhdGZvcm1Db250
ZXh0KCksIHIsIGxpbmVXaWR0aCk7CiB9CiAKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZUJvdW5kaW5nQm94KCkKK3sKKyAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2Vk
UGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgaWYgKENHQ29udGV4dElzUGF0aEVtcHR5KHBs
YXRmb3JtQ29udGV4dCgpKSkgeworICAgICAgICAvLyBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhT
dHJva2VkUGF0aCBzZWVtcyB0byBmYWlsIHRvIGNyZWF0ZSBhIHBhdGggc29tZXRpbWVzLCB0aGlz
IGlzIG5vdCB3ZWxsIHVuZGVyc3Rvb2QuCisgICAgICAgIC8vIHJldHVybmluZyBoZXJlIHByZXZl
bnRzIENHIGZyb20gbG9nZ2luZyB0byB0aGUgY29uc29sZSBmcm9tIENHQ29udGV4dEdldFBhdGhC
b3VuZGluZ0JveAorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgfQorCisgICAgcmV0
dXJuIEZsb2F0UmVjdChDR0NvbnRleHRHZXRQYXRoQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0
KCkpKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBjYXAp
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2NnL0NnU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
Y2cvQ2dTdXBwb3J0LmNwcAkocmV2aXNpb24gMzY4MDApCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9jZy9DZ1N1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CiAjaW5jbHVk
ZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUg
IlNWR1BhaW50U2VydmVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKQEAgLTY4LDMw
ICs2OSwyMCBAQCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goY29uc3QgUGF0aCYgCiAgICAg
Ly8gcGVyaGFwcyBpdCB3b3VsZCBiZSBzdWZmaWNpZW50IHRvIGp1c3Qgb3V0c2V0IHRoZSBmaWxs
IGJib3ggYnkKICAgICAvLyB0aGUgc3Ryb2tlIHdpZHRoIC0gdGhhdCBzaG91bGQgYmUgd2F5IGNo
ZWFwZXIgYW5kIHNpbXBsZXIgdGhhbgogICAgIC8vIHdoYXQgd2UgZG8gaGVyZS4KLSAKLSAgICBD
R1BhdGhSZWYgY2dQYXRoID0gcGF0aC5wbGF0Zm9ybVBhdGgoKTsKLQotICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gc2NyYXRjaENvbnRleHQoKTsKLSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNv
bnRleHQpOwogCi0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwotICAgIENHQ29udGV4
dEFkZFBhdGgoY29udGV4dCwgY2dQYXRoKTsKKyAgICBzdGQ6OmF1dG9fcHRyPEltYWdlQnVmZmVy
PiBpbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxLCAxKSwgZmFsc2UpOworICAg
IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGltYWdlLT5jb250ZXh0KCk7CiAKLSAgICBHcmFw
aGljc0NvbnRleHQgZ2MoY29udGV4dCk7Ci0gICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dCgm
Z2MsIHN0eWxlLCBvYmplY3QpOworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5i
ZWdpblBhdGgoKTsKKyAgICBjb250ZXh0LT5hZGRQYXRoKHBhdGgpOwogCi0gICAgQ0dDb250ZXh0
UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7Ci0gICAgaWYgKENHQ29udGV4dElz
UGF0aEVtcHR5KGNvbnRleHQpKSB7Ci0gICAgICAgIC8vIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0
aFN0cm9rZWRQYXRoIHNlZW1zIHRvIGZhaWwgdG8gY3JlYXRlIGEgcGF0aCBzb21ldGltZXMsIHRo
aXMgaXMgbm90IHdlbGwgdW5kZXJzdG9vZC4KLSAgICAgICAgLy8gcmV0dXJuaW5nIGhlcmUgcHJl
dmVudHMgQ0cgZnJvbSBsb2dnaW5nIHRvIHRoZSBjb25zb2xlIGZyb20gQ0dDb250ZXh0R2V0UGF0
aEJvdW5kaW5nQm94Ci0gICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Ci0g
ICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLSAgICB9CisgICAgYXBwbHlTdHJva2VTdHlsZVRv
Q29udGV4dChjb250ZXh0LCBzdHlsZSwgb2JqZWN0KTsKKyAgICBGbG9hdFJlY3QgYmJveCA9IGNv
bnRleHQtPnN0cm9rZUJvdW5kaW5nQm94KCk7CiAKLSAgICBDR1JlY3QgYm94ID0gQ0dDb250ZXh0
R2V0UGF0aEJvdW5kaW5nQm94KGNvbnRleHQpOwotICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUo
Y29udGV4dCk7CisgICAgY29udGV4dC0+cmVzdG9yZSgpOwogCi0gICAgcmV0dXJuIEZsb2F0UmVj
dChib3gpOworICAgIHJldHVybiBiYm94OwogfQogCiB9Cg==
</data>
<flag name="review"
          id="10643"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>