<?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>20543</bug_id>
          
          <creation_ts>2008-08-27 05:43:45 -0700</creation_ts>
          <short_desc>SVG should use the new Gradient support on GraphicsContext</short_desc>
          <delta_ts>2008-12-03 12:32:09 -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>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>20373</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>krit</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>89476</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-27 05:43:45 -0700</bug_when>
    <thetext>SVG should use the new Gradient support on GraphicsContext

I have an incomplete patch (well, set of patches) to add support for using Gradient instead of having SVGPaintServerGradient do lots of platform-specific junk.  It still needs to be cleaned up (and one regressed test fixed), but I&apos;m posting it here for now.  I&apos;m not sure I&apos;ll get a chance to work on this more in the near future, we&apos;ll see.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89478</commentid>
    <comment_count>1</comment_count>
      <attachid>23025</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-27 05:45:54 -0700</bug_when>
    <thetext>Created attachment 23025
Update SVG to use new fill/stroke functions for gradients

 .../JavaScriptCore.xcodeproj/project.pbxproj       |    3 -
 WebCore/rendering/SVGRenderTreeAsText.cpp          |    1 -
 WebCore/svg/GradientAttributes.h                   |   14 ++-
 WebCore/svg/LinearGradientAttributes.h             |   15 ++-
 WebCore/svg/RadialGradientAttributes.h             |   15 ++-
 WebCore/svg/SVGGradientElement.cpp                 |    2 +-
 WebCore/svg/SVGLinearGradientElement.cpp           |    9 +-
 WebCore/svg/SVGLinearGradientElement.h             |    2 -
 WebCore/svg/SVGRadialGradientElement.cpp           |    5 +-
 WebCore/svg/graphics/SVGPaintServer.h              |    9 +-
 WebCore/svg/graphics/SVGPaintServerGradient.cpp    |   17 +--
 WebCore/svg/graphics/SVGPaintServerGradient.h      |   39 +----
 WebCore/svg/graphics/cg/SVGPaintServerCg.cpp       |   32 +----
 .../svg/graphics/cg/SVGPaintServerGradientCg.cpp   |  177 ++------------------
 14 files changed, 75 insertions(+), 265 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89479</commentid>
    <comment_count>2</comment_count>
      <attachid>23026</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-27 05:45:57 -0700</bug_when>
    <thetext>Created attachment 23026
Attempt to clean up SVG gradient code

 WebCore/platform/graphics/FloatSize.h              |    6 +
 WebCore/svg/graphics/SVGPaintServerGradient.h      |    3 -
 .../svg/graphics/cg/SVGPaintServerGradientCg.cpp   |  164 ++++++++++----------
 3 files changed, 90 insertions(+), 83 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89480</commentid>
    <comment_count>3</comment_count>
      <attachid>23027</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-27 05:46:00 -0700</bug_when>
    <thetext>Created attachment 23027
Make more of the CG code cross-platform

 WebCore/svg/graphics/cg/CgSupport.cpp              |   93 +++++++++++---------
 WebCore/svg/graphics/cg/CgSupport.h                |   16 ++--
 WebCore/svg/graphics/cg/RenderPathCg.cpp           |   23 ++---
 .../svg/graphics/cg/SVGPaintServerGradientCg.cpp   |    5 +-
 WebCore/svg/graphics/cg/SVGResourceClipperCg.cpp   |   49 +++++------
 5 files changed, 90 insertions(+), 96 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89481</commentid>
    <comment_count>4</comment_count>
      <attachid>23028</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-27 05:46:05 -0700</bug_when>
    <thetext>Created attachment 23028
SVG Gradient fixes to pass all but one test

 WebCore/platform/graphics/FloatSize.h              |    1 +
 WebCore/svg/GradientAttributes.h                   |   13 +++++++---
 WebCore/svg/LinearGradientAttributes.h             |    1 +
 WebCore/svg/RadialGradientAttributes.h             |   24 +++++++++++++++----
 WebCore/svg/SVGLinearGradientElement.cpp           |    3 +-
 WebCore/svg/SVGRadialGradientElement.cpp           |    4 +-
 WebCore/svg/graphics/cg/CgSupport.cpp              |    1 +
 WebCore/svg/graphics/cg/CgSupport.h                |    1 +
 WebCore/svg/graphics/cg/SVGPaintServerCg.cpp       |    3 +-
 .../svg/graphics/cg/SVGPaintServerGradientCg.cpp   |   23 +++++++++++-------
 10 files changed, 50 insertions(+), 24 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89482</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-27 05:48:13 -0700</bug_when>
    <thetext>Two of the above patches could probably be reviewed and landed separately.  It wasn&apos;t super-simple to break them apart, and so eventually I gave up and finished preparing the patch for bug 20373.  My primary motivator here was to make it simple to merge in Skia support, as GraphicsContextSkia has a similar pattern/gradient refactor to what I did as part of bug 20373.  This SVG cleanup is a very secondary goal, and so I&apos;ve stopped working on it for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89483</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-27 05:50:05 -0700</bug_when>
    <thetext>Oh, and btw, there are a couple hacks in this patch which would need to be cleaned up for this to be done for real:

1.  Serialization of gradient stops was disabled.  That will need to be fixed or all SVG test cases which use gradients will fail.
2.  GradientAtrributes*.h files really shouldn&apos;t have such large function implementations in them.  I think that the createGradient and addStopsToGradient logic should be pushed down into either corresponding .cpp files or the SVGGradientElement*.cpp files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93262</commentid>
    <comment_count>7</comment_count>
      <attachid>23915</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-29 13:06:53 -0700</bug_when>
    <thetext>Created attachment 23915
SVGPaintServer cleanUp gradient

I updated the patches above to match current trunk and to go on. I made only small changes on the code itself, but moved out changes on CgSupport and RenderStyle. This should be part of another patch. It breaks builds for Qt and Cairo currently.

It needs the same fixes like discribed above!!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93420</commentid>
    <comment_count>8</comment_count>
      <attachid>23953</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-30 13:44:22 -0700</bug_when>
    <thetext>Created attachment 23953
Move gradient spread method to GraphicsContext

Move gradient spread method from SVG to GraphicsContext. The ports will use this code later, when gradients are platform independent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93424</commentid>
    <comment_count>9</comment_count>
      <attachid>23953</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-30 13:56:32 -0700</bug_when>
    <thetext>Comment on attachment 23953
Move gradient spread method to GraphicsContext

I have mixed feelings about this change.  CG has no concept of &quot;Spread Method&quot;, so if/when we ever decide to implement that obscure part of SVG (which I&apos;ve yet to see a single SVG depend on), we&apos;ll need to write a &quot;spread method&quot; implementation on top of GraphicsContext functions or on top of CG functions.

So if we have to write one generic implementation (for the currently most-popular port of WebKit) then it makes me wonder if we&apos;ll want to use that implementation for all other ports.

enum GradientSpreadMethod {
 129         SPREADMETHOD_PAD = 1,
 130         SPREADMETHOD_REFLECT = 2,
 131         SPREADMETHOD_REPEAT = 3
 132     };

This should follow the CamelCase naming convention of all other enums in that file.

SpreadMethodPad
SpreadMethodRepeat
SpreadMethodReflect

 74         GradientSpreadMethod spreadMethod;

That needs to be initialized to something.

 459         if (spreadMethod())
That should never be false!  Since spreadMethod() == 0 is not a valid value.

No default is needed here:
167         default:
 168             gradient.setSpread(QGradient::PadSpread);
 169             break;

I think this change is overall OK.  I think we&apos;ll end up crossing the &quot;how to write a CG implementation&quot; bridge when we come to it.  And when we do write a CG implementation of this we&apos;ll think about generalizing said implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93761</commentid>
    <comment_count>10</comment_count>
      <attachid>24025</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-10-02 11:58:06 -0700</bug_when>
    <thetext>Created attachment 24025
Move gradient spread method to GraphicsContext

Renaming SPREADMETHOD_* to SpreadMethod* forced me to change a bit more code :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93766</commentid>
    <comment_count>11</comment_count>
      <attachid>24025</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-10-02 12:29:45 -0700</bug_when>
    <thetext>Comment on attachment 24025
Move gradient spread method to GraphicsContext

 108             attributes.setSpreadMethod((GradientSpreadMethod) current-&gt;spreadMethod());

Should be changed to use static_cast.

Otherwise looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94336</commentid>
    <comment_count>12</comment_count>
      <attachid>24140</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-10-06 23:13:44 -0700</bug_when>
    <thetext>Created attachment 24140
Just for testing

Just for testing http://www.w3.org/Graphics/SVG/Test/20061213/htmlObjectHarness/full-pservers-grad-17-b.html .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94349</commentid>
    <comment_count>13</comment_count>
      <attachid>24142</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-10-07 02:19:23 -0700</bug_when>
    <thetext>Created attachment 24142
screenie of krit&apos;s testing patch on Mac

I had to fix the extra variable &quot;isFilled&quot; to make the mac build compile with this patch.  The patch still fails this gradient test. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95121</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-12 17:59:33 -0700</bug_when>
    <thetext>If the patch fails the gradient test, then shouldn&apos;t it be review- instead of review+?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95148</commentid>
    <comment_count>15</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-10-12 22:54:14 -0700</bug_when>
    <thetext>(In reply to comment #14)
The r+ patch is adding spreadMethod to GraphicsContext. Cg doesn&apos;t support spreadMethod. So it doesn&apos;t fail any test.
But it isn&apos;t used by Cairo or Qt as well. Bbut it will be used, when we get the whole clean up patch to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95413</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-15 09:44:34 -0700</bug_when>
    <thetext>I&apos;m working on landing the reviewed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95416</commentid>
    <comment_count>17</comment_count>
      <attachid>24025</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-15 10:02:36 -0700</bug_when>
    <thetext>Comment on attachment 24025
Move gradient spread method to GraphicsContext

I think it was a mistake to remove the spread method constants from the SVG DOM. Don&apos;t we want people to be able to get at those from JavaScript?

I also think it&apos;s wrong to just cast from the SVG DOM type to the GraphicsContext type; the types need to be independent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95417</commentid>
    <comment_count>18</comment_count>
      <attachid>24025</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-15 10:03:04 -0700</bug_when>
    <thetext>Comment on attachment 24025
Move gradient spread method to GraphicsContext

Cleared review flag since I landed this as http://trac.webkit.org/changeset/37605</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98880</commentid>
    <comment_count>19</comment_count>
      <attachid>25187</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-11-15 10:54:12 -0800</bug_when>
    <thetext>Created attachment 25187
makes SVGPaintServerGradient platform-independent

This patch makes SVG gradients platform independent (some Cg-code left for text drawing).
It fixes a regressen of one LayoutTest on Cg: pservers-grad-17-b-expected,
will make linear gradients work for Qt (after a path-transformation-patch, independent from this patch),
makes it possible to implement stroke and fill gradients for texts on Qt and Cairo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99097</commentid>
    <comment_count>20</comment_count>
      <attachid>25187</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-11-17 13:35:55 -0800</bug_when>
    <thetext>Comment on attachment 25187
makes SVGPaintServerGradient platform-independent

Does this pass the layout tests?

I would think removing this line:
130      ts  &lt;&lt; &quot;[stops=&quot; &lt;&lt; gradientStops() &lt;&lt; &quot;]&quot;;

would cause them to fail.  I think we want to find a way to print out what gradient stops a gradient has when dumping text results for SVG files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99116</commentid>
    <comment_count>21</comment_count>
      <attachid>25229</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-11-17 14:37:34 -0800</bug_when>
    <thetext>Created attachment 25229
makes SVGPaintServerGradient platform-independent

readded:

130      ts  &lt;&lt; &quot;[stops=&quot; &lt;&lt; gradientStops() &lt;&lt; &quot;]&quot;;

and the needed calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100842</commentid>
    <comment_count>22</comment_count>
      <attachid>25229</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-12-01 11:27:04 -0800</bug_when>
    <thetext>Comment on attachment 25229
makes SVGPaintServerGradient platform-independent

Testing this on CG now, since I don&apos;t think you have a mac available to you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100863</commentid>
    <comment_count>23</comment_count>
      <attachid>25635</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-12-01 13:00:18 -0800</bug_when>
    <thetext>Created attachment 25635
makes SVGPaintServerGradient platform-independent

this should fix the Mac build and make the Layout tests work for gradients again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101203</commentid>
    <comment_count>24</comment_count>
      <attachid>25711</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-12-03 08:06:48 -0800</bug_when>
    <thetext>Created attachment 25711
makes SVGPaintServerGradient platform-independent

Fixes all layouttests. 2 pixel tests have to be updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101204</commentid>
    <comment_count>25</comment_count>
      <attachid>25711</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-12-03 08:28:55 -0800</bug_when>
    <thetext>Comment on attachment 25711
makes SVGPaintServerGradient platform-independent

Looks great, no more comments from my side after the xxxth review :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101237</commentid>
    <comment_count>26</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-12-03 12:32:09 -0800</bug_when>
    <thetext>landed in r38952.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23025</attachid>
            <date>2008-08-27 05:45:54 -0700</date>
            <delta_ts>2008-09-29 13:06:53 -0700</delta_ts>
            <desc>Update SVG to use new fill/stroke functions for gradients</desc>
            <filename>Update-SVG-to-use-new-fill-stroke-functions-for-gradients.patch</filename>
            <type>text/plain</type>
            <size>25966</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">NWQ3OGI1NjYzYzk4MGZkYzc3OGVhODVhZDU0ODRmMzg1ZGU1ZDFkOApkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMzNiYWU4Yy4uMDU5NDhmZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNjM4LDkgKzE2MzgsNiBA
QAogCQkJcHJvZHVjdFJlZkdyb3VwID0gMDM0NzY4REZGRjM4QTUwNDExREI5QzhCIC8qIFByb2R1
Y3RzICovOwogCQkJcHJvamVjdERpclBhdGggPSAiIjsKIAkJCXByb2plY3RSb290ID0gIiI7Ci0J
CQlwcm9qZWN0Um9vdHMgPSAoCi0JCQkJIiIsCi0JCQkpOwogCQkJdGFyZ2V0cyA9ICgKIAkJCQk5
MzJGNUJFMzA4MjJBMUM3MDA3MzY5NzUgLyogQWxsICovLAogCQkJCTkzMkY1QjNFMDgyMkExQzcw
MDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZSAqLywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5jcHAKaW5kZXggZDNlMDI5Yy4uOWIwNDM1OSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTE3OCw3ICsxNzgsNiBAQCBzdGF0aWMgdm9p
ZCB3cml0ZUluZGVudChUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkKICAgICAgICAgdHMgPDwg
IiAgIjsKIH0KIAotLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGluIEtDYW52YXNSZW5k
ZXJpbmdTdHlsZS5jcHAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBEYXNoQXJyYXkmIGEpCiB7CiAgICAgdHMgPDwgInsiOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9zdmcvR3JhZGllbnRBdHRyaWJ1dGVzLmggYi9XZWJDb3JlL3N2Zy9HcmFkaWVudEF0
dHJpYnV0ZXMuaAppbmRleCBjMTZlOTYxLi4wNDI3ZTRhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2
Zy9HcmFkaWVudEF0dHJpYnV0ZXMuaAorKysgYi9XZWJDb3JlL3N2Zy9HcmFkaWVudEF0dHJpYnV0
ZXMuaApAQCAtMjYsNyArMjYsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIHN0cnVj
dCBHcmFkaWVudEF0dHJpYnV0ZXMgeworICAgIGNsYXNzIEdyYWRpZW50QXR0cmlidXRlcyB7Cisg
ICAgcHVibGljOgogICAgICAgICBHcmFkaWVudEF0dHJpYnV0ZXMoKQogICAgICAgICAgICAgOiBt
X3NwcmVhZE1ldGhvZChTUFJFQURNRVRIT0RfUEFEKQogICAgICAgICAgICAgLCBtX2JvdW5kaW5n
Qm94TW9kZSh0cnVlKQpAQCAtMzYsNiArMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAg
ICAgICAgLCBtX3N0b3BzU2V0KGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0KKyAgICAgICAg
dmlydHVhbCB+R3JhZGllbnRBdHRyaWJ1dGVzKCkge30KIAogICAgICAgICBTVkdHcmFkaWVudFNw
cmVhZE1ldGhvZCBzcHJlYWRNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX3NwcmVhZE1ldGhvZDsg
fQogICAgICAgICBib29sIGJvdW5kaW5nQm94TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRp
bmdCb3hNb2RlOyB9CkBAIC01MiwxMiArNTQsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAg
ICAgYm9vbCBoYXNHcmFkaWVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhZGllbnRU
cmFuc2Zvcm1TZXQ7IH0KICAgICAgICAgYm9vbCBoYXNTdG9wcygpIGNvbnN0IHsgcmV0dXJuIG1f
c3RvcHNTZXQ7IH0KIAorICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhZGllbnQ+IGNyZWF0
ZUdyYWRpZW50KCkgPSAwOworCisgICAgICAgIHZvaWQgYWRkU3RvcHNUb0dyYWRpZW50KEdyYWRp
ZW50KiBncmFkaWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB4ID0g
MDsgeCA8IG1fc3RvcHMuc2l6ZSgpOyB4KyspCisgICAgICAgICAgICAgICAgZ3JhZGllbnQtPmFk
ZENvbG9yU3RvcChtX3N0b3BzW3hdLmZpcnN0LCBtX3N0b3BzW3hdLnNlY29uZCk7CisgICAgICAg
IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIC8vIFByb3BlcnRpZXMKICAgICAgICAgU1ZHR3Jh
ZGllbnRTcHJlYWRNZXRob2QgbV9zcHJlYWRNZXRob2Q7Ci0gICAgICAgIGJvb2wgbV9ib3VuZGlu
Z0JveE1vZGU7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX2dyYWRpZW50VHJhbnNmb3JtOwog
ICAgICAgICBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiBtX3N0b3BzOworICAgICAgICBib29sIG1f
Ym91bmRpbmdCb3hNb2RlOwogCiAgICAgICAgIC8vIFByb3BlcnR5IHN0YXRlcwogICAgICAgICBi
b29sIG1fc3ByZWFkTWV0aG9kU2V0IDogMTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL0xpbmVh
ckdyYWRpZW50QXR0cmlidXRlcy5oIGIvV2ViQ29yZS9zdmcvTGluZWFyR3JhZGllbnRBdHRyaWJ1
dGVzLmgKaW5kZXggZTY0MGMwMy4uNDUwNTg1MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvTGlu
ZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmgKKysrIGIvV2ViQ29yZS9zdmcvTGluZWFyR3JhZGllbnRB
dHRyaWJ1dGVzLmgKQEAgLTEsOCArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNiBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KIAotICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCiAgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCkBA
IC0yOCw3ICsyNiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgc3RydWN0IExpbmVh
ckdyYWRpZW50QXR0cmlidXRlcyA6IEdyYWRpZW50QXR0cmlidXRlcyB7CisgICAgY2xhc3MgTGlu
ZWFyR3JhZGllbnRBdHRyaWJ1dGVzIDogcHVibGljIEdyYWRpZW50QXR0cmlidXRlcyB7CisgICAg
cHVibGljOgogICAgICAgICBMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMoKQogICAgICAgICAgICAg
OiBtX3gxKDAuMCkKICAgICAgICAgICAgICwgbV95MSgwLjApCkBAIC01Niw2ICs1NSwxNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZQogICAgICAgICBib29sIGhhc1gyKCkgY29uc3QgeyByZXR1cm4gbV94
MlNldDsgfQogICAgICAgICBib29sIGhhc1kyKCkgY29uc3QgeyByZXR1cm4gbV95MlNldDsgfQog
CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlR3JhZGllbnQoKQor
ICAgICAgICB7CisgICAgICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3JhZGll
bnQ6OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICBGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24o
bV94MSwgbV95MSksCisgICAgICAgICAgICAgICAgRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9u
KG1feDIsIG1feTIpKTsKKworICAgICAgICAgICAgYWRkU3RvcHNUb0dyYWRpZW50KGdyYWRpZW50
LmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiBncmFkaWVudC5yZWxlYXNlKCk7CisgICAgICAg
IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIC8vIFByb3BlcnRpZXMKICAgICAgICAgZG91Ymxl
IG1feDE7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9SYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMu
aCBiL1dlYkNvcmUvc3ZnL1JhZGlhbEdyYWRpZW50QXR0cmlidXRlcy5oCmluZGV4IDc4MmFiNDku
LjA2MzQyYWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1JhZGlhbEdyYWRpZW50QXR0cmlidXRl
cy5oCisrKyBiL1dlYkNvcmUvc3ZnL1JhZGlhbEdyYWRpZW50QXR0cmlidXRlcy5oCkBAIC0yOCw3
ICsyOCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgc3RydWN0IFJhZGlhbEdyYWRp
ZW50QXR0cmlidXRlcyA6IEdyYWRpZW50QXR0cmlidXRlcyB7CisgICAgY2xhc3MgUmFkaWFsR3Jh
ZGllbnRBdHRyaWJ1dGVzIDogcHVibGljIEdyYWRpZW50QXR0cmlidXRlcyB7CisgICAgcHVibGlj
OgogICAgICAgICBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMoKQogICAgICAgICAgICAgOiBtX2N4
KDAuNSkKICAgICAgICAgICAgICwgbV9jeSgwLjUpCkBAIC02MSw2ICs2MiwxOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZQogICAgICAgICBib29sIGhhc0Z4KCkgY29uc3QgeyByZXR1cm4gbV9meFNldDsg
fQogICAgICAgICBib29sIGhhc0Z5KCkgY29uc3QgeyByZXR1cm4gbV9meVNldDsgfQogCisgICAg
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlR3JhZGllbnQoKQorICAgICAg
ICB7CisgICAgICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNy
ZWF0ZSgKKyAgICAgICAgICAgICAgICBGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24obV9jeCwg
bV9jeSksCisgICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChtX3IpLAorICAg
ICAgICAgICAgICAgIEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihtX2Z4LCBtX2Z5KSwKKyAg
ICAgICAgICAgICAgICAwLmYpOworCisgICAgICAgICAgICBhZGRTdG9wc1RvR3JhZGllbnQoZ3Jh
ZGllbnQuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIGdyYWRpZW50LnJlbGVhc2UoKTsKKyAg
ICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gUHJvcGVydGllcwogICAgICAgICBk
b3VibGUgbV9jeDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5j
cHAgYi9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCmluZGV4IDRjZjg4NDEuLjE4
OTkzNDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAKKysr
IGIvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcApAQCAtMTU5LDcgKzE1OSw3IEBA
IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+IFNWR0dyYWRpZW50RWxlbWVudDo6YnVpbGRTdG9wcygp
IGNvbnN0CiAgICAgICAgICAgICAgICAgc3RvcFN0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5k
ZXJBcmVuYSgpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc3RvcHMuYXBwZW5kKG1h
a2VHcmFkaWVudFN0b3Aoc3RvcE9mZnNldCwgbWFrZVJHQkEoY29sb3IucmVkKCksIGNvbG9yLmdy
ZWVuKCksIGNvbG9yLmJsdWUoKSwgaW50KG9wYWNpdHkgKiAyNTUuKSkpKTsKKyAgICAgICAgICAg
IHN0b3BzLmFwcGVuZChtYWtlR3JhZGllbnRTdG9wKHN0b3BPZmZzZXQsIGNvbG9yV2l0aE92ZXJy
aWRlQWxwaGEoY29sb3IucmdiKCksIG9wYWNpdHkpKSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAgYi9XZWJD
b3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCmluZGV4IDgzZWU5MTkuLjZiMGIx
MzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAK
KysrIGIvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcApAQCAtODYsMTIg
Kzg2LDE1IEBAIHZvaWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWRpZW50KCkg
Y29uc3QKIAogICAgIFJlZlB0cjxTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50PiBsaW5lYXJH
cmFkaWVudCA9IFdURjo6c3RhdGljX3BvaW50ZXJfY2FzdDxTVkdQYWludFNlcnZlckxpbmVhckdy
YWRpZW50PihtX3Jlc291cmNlKTsKIAotICAgIGxpbmVhckdyYWRpZW50LT5zZXRHcmFkaWVudFN0
b3BzKGF0dHJpYnV0ZXMuc3RvcHMoKSk7CisgICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRpZW50
KGF0dHJpYnV0ZXMuY3JlYXRlR3JhZGllbnQoKSk7CisKKyAgICAvLyBUaGlzIGNvZGUgc2hvdWxk
IGdvIGF3YXkuICBQYWludFNlcnZlcnMgc2hvdWxkIGdvIGF3YXkgdG9vLgorICAgIC8vIE9ubHkg
dGhpcyBjb2RlIHNob3VsZCBjYXJlIGFib3V0IGJvdW5kaW5nIGJveGVzCiAgICAgbGluZWFyR3Jh
ZGllbnQtPnNldEJvdW5kaW5nQm94TW9kZShhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKTsK
KyAgICAKKyAgICAvLyBUaGVzZSBzaG91bGQgcG9zc2libHkgYmUgc3VwcG9ydGVkIG9uIEdyYWRp
ZW50CiAgICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRpZW50U3ByZWFkTWV0aG9kKGF0dHJpYnV0
ZXMuc3ByZWFkTWV0aG9kKCkpOwogICAgIGxpbmVhckdyYWRpZW50LT5zZXRHcmFkaWVudFRyYW5z
Zm9ybShhdHRyaWJ1dGVzLmdyYWRpZW50VHJhbnNmb3JtKCkpOwotICAgIGxpbmVhckdyYWRpZW50
LT5zZXRHcmFkaWVudFN0YXJ0KEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihhdHRyaWJ1dGVz
LngxKCksIGF0dHJpYnV0ZXMueTEoKSkpOwotICAgIGxpbmVhckdyYWRpZW50LT5zZXRHcmFkaWVu
dEVuZChGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24oYXR0cmlidXRlcy54MigpLCBhdHRyaWJ1
dGVzLnkyKCkpKTsKIH0KIAogTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzIFNWR0xpbmVhckdyYWRp
ZW50RWxlbWVudDo6Y29sbGVjdEdyYWRpZW50UHJvcGVydGllcygpIGNvbnN0CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaCBiL1dlYkNvcmUvc3ZnL1NW
R0xpbmVhckdyYWRpZW50RWxlbWVudC5oCmluZGV4IDBlMWVmZDQuLjQ5MmMzNjYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oCisrKyBiL1dlYkNvcmUv
c3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oCkBAIC0yLDggKzIsNiBAQAogICAgIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KIAotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJv
amVjdAotCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCiAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2
Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50LmNwcAppbmRleCBmYTQzNzQ4Li43OGQ5ZTRiIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NW
R1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKQEAgLTk0LDE0ICs5NCwxMSBAQCB2b2lkIFNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkaWVudCgpIGNvbnN0CiAgICAgICAgIHJldHVy
bjsKIAogICAgIFJlZlB0cjxTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50PiByYWRpYWxHcmFk
aWVudCA9IFdURjo6c3RhdGljX3BvaW50ZXJfY2FzdDxTVkdQYWludFNlcnZlclJhZGlhbEdyYWRp
ZW50PihtX3Jlc291cmNlKTsKKyAgICByYWRpYWxHcmFkaWVudC0+c2V0R3JhZGllbnQoYXR0cmli
dXRlcy5jcmVhdGVHcmFkaWVudCgpKTsKIAotICAgIHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVu
dFN0b3BzKGF0dHJpYnV0ZXMuc3RvcHMoKSk7CiAgICAgcmFkaWFsR3JhZGllbnQtPnNldEJvdW5k
aW5nQm94TW9kZShhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKTsKICAgICByYWRpYWxHcmFk
aWVudC0+c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSk7
IAogICAgIHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudFRyYW5zZm9ybShhdHRyaWJ1dGVzLmdy
YWRpZW50VHJhbnNmb3JtKCkpOwotICAgIHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudENlbnRl
cihGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24oYXR0cmlidXRlcy5jeCgpLCBhdHRyaWJ1dGVz
LmN5KCkpKTsKLSAgICByYWRpYWxHcmFkaWVudC0+c2V0R3JhZGllbnRGb2NhbChGbG9hdFBvaW50
OjpuYXJyb3dQcmVjaXNpb24oYXR0cmlidXRlcy5meCgpLCBhdHRyaWJ1dGVzLmZ5KCkpKTsKLSAg
ICByYWRpYWxHcmFkaWVudC0+c2V0R3JhZGllbnRSYWRpdXMobmFycm93UHJlY2lzaW9uVG9GbG9h
dChhdHRyaWJ1dGVzLnIoKSkpOwogfQogCiBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMgU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50Ojpjb2xsZWN0R3JhZGllbnRQcm9wZXJ0aWVzKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmggYi9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5oCmluZGV4IGE3NGQ2MmMuLjdiOGU0MzQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmgKKysrIGIvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaApAQCAtODksMTggKzg5LDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFNWR1BhaW50U2VydmVyU29saWQqIHNo
YXJlZFNvbGlkUGFpbnRTZXJ2ZXIoKTsKIAogICAgIHByb3RlY3RlZDoKLSNpZiBQTEFURk9STShD
RykKLSAgICAgICAgdm9pZCBzdHJva2VQYXRoKENHQ29udGV4dFJlZiwgY29uc3QgUmVuZGVyT2Jq
ZWN0KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgY2xpcFRvU3Ryb2tlUGF0aChDR0NvbnRleHRSZWYs
IGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwotICAgICAgICB2b2lkIGZpbGxQYXRoKENHQ29u
dGV4dFJlZiwgY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgY2xpcFRv
RmlsbFBhdGgoQ0dDb250ZXh0UmVmLCBjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLSNlbmRp
ZgotCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIHZvaWQgc2V0UGVuUHJvcGVydGllcyhjb25z
dCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSosIFFQZW4mKSBjb25zdDsKICNlbmRp
ZgogICAgIHByb3RlY3RlZDoKLSAgICAgICAgU1ZHUGFpbnRTZXJ2ZXIoKTsgICAgICAgIAorICAg
ICAgICBTVkdQYWludFNlcnZlcigpOwogICAgIH07CiAKICAgICBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mLCBjb25zdCBTVkdQYWludFNlcnZlciYpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAgYi9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAppbmRleCA2YTcwMWI4Li4wMjVi
ZTgwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRp
ZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50
LmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiU1ZHR3JhZGllbnRFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjMsMTAgKzY0LDcgQEAgU1ZHUGFpbnRT
ZXJ2ZXJHcmFkaWVudDo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudChjb25zdCBTVkdHcmFkaWVudEVs
ZW1lbnQqIG93bmVyKQogICAgIDogbV9zcHJlYWRNZXRob2QoU1BSRUFETUVUSE9EX1BBRCkKICAg
ICAsIG1fYm91bmRpbmdCb3hNb2RlKHRydWUpCiAgICAgLCBtX293bmVyRWxlbWVudChvd25lcikK
LQogI2lmIFBMQVRGT1JNKENHKQotICAgICwgbV9zdG9wc0NhY2hlKDApCi0gICAgLCBtX3NoYWRp
bmdDYWNoZSgwKQogICAgICwgbV9zYXZlZENvbnRleHQoMCkKICAgICAsIG1faW1hZ2VCdWZmZXIo
MCkKICNlbmRpZgpAQCAtNzYsMTkgKzc0LDE2IEBAIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OlNW
R1BhaW50U2VydmVyR3JhZGllbnQoY29uc3QgU1ZHR3JhZGllbnRFbGVtZW50KiBvd25lcikKIAog
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6flNWR1BhaW50U2VydmVyR3JhZGllbnQoKQogewotI2lm
IFBMQVRGT1JNKENHKQotICAgIENHU2hhZGluZ1JlbGVhc2UobV9zaGFkaW5nQ2FjaGUpOwotI2Vu
ZGlmCiB9CiAKLWNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+JiBTVkdQYWludFNlcnZlckdy
YWRpZW50OjpncmFkaWVudFN0b3BzKCkgY29uc3QKK0dyYWRpZW50KiBTVkdQYWludFNlcnZlckdy
YWRpZW50OjpncmFkaWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc3RvcHM7CisgICAgcmV0
dXJuIG1fZ3JhZGllbnQuZ2V0KCk7CiB9CiAKLXZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6
c2V0R3JhZGllbnRTdG9wcyhjb25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYgc3RvcHMpCit2
b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldEdyYWRpZW50KFBhc3NSZWZQdHI8R3JhZGll
bnQ+IGdyYWRpZW50KQogewotICAgIG1fc3RvcHMgPSBzdG9wczsKKyAgICBtX2dyYWRpZW50ID0g
Z3JhZGllbnQ7CiB9CiAKIFNWR0dyYWRpZW50U3ByZWFkTWV0aG9kIFNWR1BhaW50U2VydmVyR3Jh
ZGllbnQ6OnNwcmVhZE1ldGhvZCgpIGNvbnN0CkBAIC0xMjcsNyArMTIyLDcgQEAgVGV4dFN0cmVh
bSYgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cykgY29uc3QKICAgICBtX293bmVyRWxlbWVudC0+YnVpbGRHcmFkaWVudCgpOwogCiAg
ICAgLy8gYWJzdHJhY3QsIGRvbid0IHN0cmVhbSB0eXBlCi0gICAgdHMgIDw8ICJbc3RvcHM9IiA8
PCBncmFkaWVudFN0b3BzKCkgPDwgIl0iOworICAgIC8vdHMgIDw8ICJbc3RvcHM9IiA8PCBncmFk
aWVudCgpLT5zdG9wcygpIDw8ICJdIjsKICAgICBpZiAoc3ByZWFkTWV0aG9kKCkgIT0gU1BSRUFE
TUVUSE9EX1BBRCkKICAgICAgICAgdHMgPDwgIlttZXRob2Q9IiA8PCBzcHJlYWRNZXRob2QoKSA8
PCAiXSI7CiAgICAgaWYgKCFib3VuZGluZ0JveE1vZGUoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaCBiL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaAppbmRleCA2NGY3ZjNlLi41MzhmN2IxIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmgKKysr
IGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5oCkBAIC0zMCw2
ICszMCw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xv
ci5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIK
IAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC01NCwxOSArNTUsMTQgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBTUFJFQURNRVRIT0RfUkVQRUFUID0gMwogICAgIH07CiAK
LSNpZiBQTEFURk9STShDRykKLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxDR0Zsb2F0LCBDb2xvcj4g
U1ZHR3JhZGllbnRTdG9wOwotI2Vsc2UKICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxmbG9hdCwgQ29s
b3I+IFNWR0dyYWRpZW50U3RvcDsKLSNlbmRpZgotCiAKICAgICBjbGFzcyBTVkdQYWludFNlcnZl
ckdyYWRpZW50IDogcHVibGljIFNWR1BhaW50U2VydmVyIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IHZpcnR1YWwgflNWR1BhaW50U2VydmVyR3JhZGllbnQoKTsKIAotICAgICAgICBjb25zdCBWZWN0
b3I8U1ZHR3JhZGllbnRTdG9wPiYgZ3JhZGllbnRTdG9wcygpIGNvbnN0OwotICAgICAgICB2b2lk
IHNldEdyYWRpZW50U3RvcHMoY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mKTsKKyAgICAg
ICAgdm9pZCBzZXRHcmFkaWVudChQYXNzUmVmUHRyPEdyYWRpZW50Pik7CisgICAgICAgIEdyYWRp
ZW50KiBncmFkaWVudCgpIGNvbnN0OwogCiAgICAgICAgIFNWR0dyYWRpZW50U3ByZWFkTWV0aG9k
IHNwcmVhZE1ldGhvZCgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEdyYWRpZW50U3ByZWFkTWV0
aG9kKGNvbnN0IFNWR0dyYWRpZW50U3ByZWFkTWV0aG9kJik7CkBAIC04NywxMSArODMsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihHcmFwaGlj
c0NvbnRleHQqJiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlLCBib29s
IGlzUGFpbnRpbmdUZXh0KSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgo
R3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlw
ZSkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKLQogICAgICAg
ICAvLyBIZWxwZXJzCi0gICAgICAgIHZvaWQgdXBkYXRlUXVhcnR6R3JhZGllbnRTdG9wc0NhY2hl
KGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+Jik7Ci0gICAgICAgIHZvaWQgdXBkYXRlUXVh
cnR6R3JhZGllbnRDYWNoZShjb25zdCBTVkdQYWludFNlcnZlckdyYWRpZW50Kik7CiAgICAgICAg
IHZvaWQgaGFuZGxlQm91bmRpbmdCb3hNb2RlQW5kR3JhZGllbnRUcmFuc2Zvcm1hdGlvbihHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QpIGNvbnN0OwogI2VuZGlm
CiAKQEAgLTEwMyw5ICs5NSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByb3RlY3Rl
ZDoKICAgICAgICAgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudChjb25zdCBTVkdHcmFkaWVudEVsZW1l
bnQqIG93bmVyKTsKLSAgICAgICAgCisKICAgICBwcml2YXRlOgotICAgICAgICBWZWN0b3I8U1ZH
R3JhZGllbnRTdG9wPiBtX3N0b3BzOworICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IG1fZ3JhZGll
bnQ7CiAgICAgICAgIFNWR0dyYWRpZW50U3ByZWFkTWV0aG9kIG1fc3ByZWFkTWV0aG9kOwogICAg
ICAgICBib29sIG1fYm91bmRpbmdCb3hNb2RlOwogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9n
cmFkaWVudFRyYW5zZm9ybTsKQEAgLTExMywyNyArMTA1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIHN0cnVj
dCB7Ci0gICAgICAgICAgICBDR0Zsb2F0IGNvbG9yQXJyYXlbNF07Ci0gICAgICAgICAgICBDR0Zs
b2F0IG9mZnNldDsKLSAgICAgICAgICAgIENHRmxvYXQgcHJldmlvdXNEZWx0YUludmVyc2U7Ci0g
ICAgICAgIH0gUXVhcnR6R3JhZGllbnRTdG9wOwotICAgICAgICAKLSAgICAgICAgc3RydWN0IFNo
YXJlZFN0b3BDYWNoZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZFN0b3BDYWNoZT4gewotICAg
ICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRTdG9wQ2Fj
aGU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRTdG9wQ2FjaGUpOyB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIFZlY3RvcjxRdWFydHpHcmFkaWVudFN0b3A+IG1fc3Rv
cHM7Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgU2hhcmVkU3RvcENh
Y2hlKCkgeyB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgUmVmUHRyPFNoYXJlZFN0b3BDYWNoZT4g
bV9zdG9wc0NhY2hlOwotCi0gICAgICAgIENHU2hhZGluZ1JlZiBtX3NoYWRpbmdDYWNoZTsKICAg
ICAgICAgbXV0YWJsZSBHcmFwaGljc0NvbnRleHQqIG1fc2F2ZWRDb250ZXh0OwotICAgICAgICBt
dXRhYmxlIEltYWdlQnVmZmVyKiBtX2ltYWdlQnVmZmVyOworICAgICAgICBtdXRhYmxlIE93blB0
cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKICNlbmRpZgogICAgIH07CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyQ2cuY3BwIGIvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAKaW5kZXggMzVlYjIzOS4uODEw
YjQ2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJD
Zy5jcHAKKysrIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAK
QEAgLTQ2LDQwICs0NiwxMiBAQCB2b2lkIFNWR1BhaW50U2VydmVyOjp0ZWFyZG93bihHcmFwaGlj
c0NvbnRleHQqJiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYQogdm9pZCBTVkdQYWlu
dFNlcnZlcjo6cmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5k
ZXJPYmplY3QqIHBhdGgsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAogewogICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IHBhdGggPyBwYXRoLT5zdHlsZSgpIDogMDsKLSAgICBDR0NvbnRl
eHRSZWYgY29udGV4dFJlZiA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgaWYg
KCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiAoIXN0eWxlIHx8IHN0eWxlLT5zdmdT
dHlsZSgpLT5oYXNGaWxsKCkpKQotICAgICAgICBmaWxsUGF0aChjb250ZXh0UmVmLCBwYXRoKTsK
KyAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKTsKIAogICAgIGlmICgodHlwZSAmIEFwcGx5VG9T
dHJva2VUYXJnZXRUeXBlKSAmJiAoIXN0eWxlIHx8IHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJv
a2UoKSkpCi0gICAgICAgIHN0cm9rZVBhdGgoY29udGV4dFJlZiwgcGF0aCk7Ci19Ci0KLXZvaWQg
U1ZHUGFpbnRTZXJ2ZXI6OnN0cm9rZVBhdGgoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFJl
bmRlck9iamVjdCopIGNvbnN0Ci17Ci0gICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsK
LX0KLQotdm9pZCBTVkdQYWludFNlcnZlcjo6Y2xpcFRvU3Ryb2tlUGF0aChDR0NvbnRleHRSZWYg
Y29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3QKLXsKLSAgICBDR0NvbnRleHRSZXBs
YWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsKLSAgICBDR0NvbnRleHRDbGlwKGNvbnRl
eHQpOwotfQotCi12b2lkIFNWR1BhaW50U2VydmVyOjpmaWxsUGF0aChDR0NvbnRleHRSZWYgY29u
dGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXRoKSBjb25zdAotewotICAgIGlmICghcGF0aCB8
fCBwYXRoLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCkK
LSAgICAgICAgQ0dDb250ZXh0RU9GaWxsUGF0aChjb250ZXh0KTsKLSAgICBlbHNlCi0gICAgICAg
IENHQ29udGV4dEZpbGxQYXRoKGNvbnRleHQpOwotfQotCi12b2lkIFNWR1BhaW50U2VydmVyOjpj
bGlwVG9GaWxsUGF0aChDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBw
YXRoKSBjb25zdAotewotICAgIGlmICghcGF0aCB8fCBwYXRoLT5zdHlsZSgpLT5zdmdTdHlsZSgp
LT5maWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCkKLSAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNv
bnRleHQpOwotICAgIGVsc2UKLSAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKKyAgICAg
ICAgY29udGV4dC0+c3Ryb2tlUGF0aCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckdyYWRpZW50
Q2cuY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENn
LmNwcAppbmRleCA2ODFhZTdjLi5lY2Y0MTUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9jZy9TVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2NnL1NWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAKQEAgLTM1LDE0MSArMzUsMTIg
QEAKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAKICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdm9pZCByZWxlYXNlQ2FjaGVkU3Rv
cHModm9pZCogaW5mbykKLXsKLSAgICBzdGF0aWNfY2FzdDxTVkdQYWludFNlcnZlckdyYWRpZW50
OjpTaGFyZWRTdG9wQ2FjaGUqPihpbmZvKS0+ZGVyZWYoKTsKLX0KLQotc3RhdGljIHZvaWQgY2dH
cmFkaWVudENhbGxiYWNrKHZvaWQqIGluZm8sIGNvbnN0IENHRmxvYXQqIGluVmFsdWVzLCBDR0Zs
b2F0KiBvdXRDb2xvcikKLXsKLSAgICBTVkdQYWludFNlcnZlckdyYWRpZW50OjpTaGFyZWRTdG9w
Q2FjaGUqIHN0b3BzQ2FjaGUgPSBzdGF0aWNfY2FzdDxTVkdQYWludFNlcnZlckdyYWRpZW50OjpT
aGFyZWRTdG9wQ2FjaGUqPihpbmZvKTsKLSAgICAKLSAgICBTVkdQYWludFNlcnZlckdyYWRpZW50
OjpRdWFydHpHcmFkaWVudFN0b3AqIHN0b3BzID0gc3RvcHNDYWNoZS0+bV9zdG9wcy5kYXRhKCk7
Ci0gICAgICAgIAotICAgIGludCBzdG9wc0NvdW50ID0gc3RvcHNDYWNoZS0+bV9zdG9wcy5zaXpl
KCk7Ci0KLSAgICBDR0Zsb2F0IGluVmFsdWUgPSBpblZhbHVlc1swXTsKLQotICAgIGlmICghc3Rv
cHNDb3VudCkgewotICAgICAgICBvdXRDb2xvclswXSA9IDA7Ci0gICAgICAgIG91dENvbG9yWzFd
ID0gMDsKLSAgICAgICAgb3V0Q29sb3JbMl0gPSAwOwotICAgICAgICBvdXRDb2xvclszXSA9IDA7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKHN0b3BzQ291bnQgPT0gMSkgewotICAg
ICAgICBtZW1jcHkob3V0Q29sb3IsIHN0b3BzWzBdLmNvbG9yQXJyYXksIDQgKiBzaXplb2YoQ0dG
bG9hdCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCEoaW5WYWx1ZSA+IHN0
b3BzWzBdLm9mZnNldCkpCi0gICAgICAgIG1lbWNweShvdXRDb2xvciwgc3RvcHNbMF0uY29sb3JB
cnJheSwgNCAqIHNpemVvZihDR0Zsb2F0KSk7Ci0gICAgZWxzZSBpZiAoIShpblZhbHVlIDwgc3Rv
cHNbc3RvcHNDb3VudCAtIDFdLm9mZnNldCkpCi0gICAgICAgIG1lbWNweShvdXRDb2xvciwgc3Rv
cHNbc3RvcHNDb3VudCAtIDFdLmNvbG9yQXJyYXksIDQgKiBzaXplb2YoQ0dGbG9hdCkpOwotICAg
IGVsc2UgewotICAgICAgICBpbnQgbmV4dFN0b3BJbmRleCA9IDA7Ci0gICAgICAgIHdoaWxlICgo
bmV4dFN0b3BJbmRleCA8IHN0b3BzQ291bnQpICYmIChzdG9wc1tuZXh0U3RvcEluZGV4XS5vZmZz
ZXQgPCBpblZhbHVlKSkKLSAgICAgICAgICAgIG5leHRTdG9wSW5kZXgrKzsKLQotICAgICAgICBD
R0Zsb2F0KiBuZXh0Q29sb3JBcnJheSA9IHN0b3BzW25leHRTdG9wSW5kZXhdLmNvbG9yQXJyYXk7
Ci0gICAgICAgIENHRmxvYXQqIHByZXZpb3VzQ29sb3JBcnJheSA9IHN0b3BzW25leHRTdG9wSW5k
ZXggLSAxXS5jb2xvckFycmF5OwotICAgICAgICBDR0Zsb2F0IGRpZmZGcm9tUHJldmlvdXMgPSBp
blZhbHVlIC0gc3RvcHNbbmV4dFN0b3BJbmRleCAtIDFdLm9mZnNldDsKLSAgICAgICAgQ0dGbG9h
dCBwZXJjZW50ID0gZGlmZkZyb21QcmV2aW91cyAqIHN0b3BzW25leHRTdG9wSW5kZXhdLnByZXZp
b3VzRGVsdGFJbnZlcnNlOwotCi0gICAgICAgIG91dENvbG9yWzBdID0gKCgxLjBmIC0gcGVyY2Vu
dCkgKiBwcmV2aW91c0NvbG9yQXJyYXlbMF0gKyBwZXJjZW50ICogbmV4dENvbG9yQXJyYXlbMF0p
OwotICAgICAgICBvdXRDb2xvclsxXSA9ICgoMS4wZiAtIHBlcmNlbnQpICogcHJldmlvdXNDb2xv
ckFycmF5WzFdICsgcGVyY2VudCAqIG5leHRDb2xvckFycmF5WzFdKTsKLSAgICAgICAgb3V0Q29s
b3JbMl0gPSAoKDEuMGYgLSBwZXJjZW50KSAqIHByZXZpb3VzQ29sb3JBcnJheVsyXSArIHBlcmNl
bnQgKiBuZXh0Q29sb3JBcnJheVsyXSk7Ci0gICAgICAgIG91dENvbG9yWzNdID0gKCgxLjBmIC0g
cGVyY2VudCkgKiBwcmV2aW91c0NvbG9yQXJyYXlbM10gKyBwZXJjZW50ICogbmV4dENvbG9yQXJy
YXlbM10pOwotICAgIH0KLSAgICAvLyBGSVhNRTogaGF2ZSB0byBoYW5kbGUgdGhlIHNwcmVhZE1l
dGhvZCgpcyBoZXJlIFNQUkVBRE1FVEhPRF9SRVBFQVQsIGV0Yy4KLX0KLQotc3RhdGljIENHU2hh
ZGluZ1JlZiBDR1NoYWRpbmdSZWZGb3JMaW5lYXJHcmFkaWVudChjb25zdCBTVkdQYWludFNlcnZl
ckxpbmVhckdyYWRpZW50KiBzZXJ2ZXIpCi17Ci0gICAgQ0dQb2ludCBzdGFydCA9IENHUG9pbnQo
c2VydmVyLT5ncmFkaWVudFN0YXJ0KCkpOwotICAgIENHUG9pbnQgZW5kID0gQ0dQb2ludChzZXJ2
ZXItPmdyYWRpZW50RW5kKCkpOwotCi0gICAgQ0dGdW5jdGlvbkNhbGxiYWNrcyBjYWxsYmFja3Mg
PSB7MCwgY2dHcmFkaWVudENhbGxiYWNrLCByZWxlYXNlQ2FjaGVkU3RvcHN9OwotICAgIENHRmxv
YXQgZG9tYWluTGltaXRzWzJdID0gezAsIDF9OwotICAgIENHRmxvYXQgcmFuZ2VMaW1pdHNbOF0g
PSB7MCwgMSwgMCwgMSwgMCwgMSwgMCwgMX07Ci0gICAgc2VydmVyLT5tX3N0b3BzQ2FjaGUtPnJl
ZigpOwotICAgIENHRnVuY3Rpb25SZWYgc2hhZGluZ0Z1bmN0aW9uID0gQ0dGdW5jdGlvbkNyZWF0
ZShzZXJ2ZXItPm1fc3RvcHNDYWNoZS5nZXQoKSwgMSwgZG9tYWluTGltaXRzLCA0LCByYW5nZUxp
bWl0cywgJmNhbGxiYWNrcyk7Ci0KLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENH
Q29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwotICAgIENHU2hhZGluZ1JlZiBzaGFkaW5nID0g
Q0dTaGFkaW5nQ3JlYXRlQXhpYWwoY29sb3JTcGFjZSwgc3RhcnQsIGVuZCwgc2hhZGluZ0Z1bmN0
aW9uLCB0cnVlLCB0cnVlKTsKLSAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9yU3BhY2UpOwot
ICAgIENHRnVuY3Rpb25SZWxlYXNlKHNoYWRpbmdGdW5jdGlvbik7Ci0gICAgcmV0dXJuIHNoYWRp
bmc7Ci19Ci0KLXN0YXRpYyBDR1NoYWRpbmdSZWYgQ0dTaGFkaW5nUmVmRm9yUmFkaWFsR3JhZGll
bnQoY29uc3QgU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCogc2VydmVyKQotewotICAgIENH
UG9pbnQgY2VudGVyID0gQ0dQb2ludChzZXJ2ZXItPmdyYWRpZW50Q2VudGVyKCkpOwotICAgIENH
UG9pbnQgZm9jdXMgPSBDR1BvaW50KHNlcnZlci0+Z3JhZGllbnRGb2NhbCgpKTsKLSAgICBkb3Vi
bGUgcmFkaXVzID0gc2VydmVyLT5ncmFkaWVudFJhZGl1cygpOwotCi0gICAgZG91YmxlIGZkeCA9
IGZvY3VzLnggLSBjZW50ZXIueDsKLSAgICBkb3VibGUgZmR5ID0gZm9jdXMueSAtIGNlbnRlci55
OwotCi0gICAgLy8gU3BlYzogSWYgKGZ4LCBmeSkgbGllcyBvdXRzaWRlIHRoZSBjaXJjbGUgZGVm
aW5lZCBieSAoY3gsIGN5KSBhbmQgciwgc2V0IChmeCwgZnkpCi0gICAgLy8gdG8gdGhlIHBvaW50
IG9mIGludGVyc2VjdGlvbiBvZiB0aGUgbGluZSB0aHJvdWdoIChmeCwgZnkpIGFuZCB0aGUgY2ly
Y2xlLgotICAgIGlmIChzcXJ0KGZkeCAqIGZkeCArIGZkeSAqIGZkeSkgPiByYWRpdXMpIHsgCi0g
ICAgICAgIGRvdWJsZSBhbmdsZSA9IGF0YW4yKGZvY3VzLnkgKiAxMDAuMCwgZm9jdXMueCAqIDEw
MC4wKTsKLSAgICAgICAgZm9jdXMueCA9IG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChjb3MoYW5n
bGUpICogcmFkaXVzKTsKLSAgICAgICAgZm9jdXMueSA9IG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9h
dChzaW4oYW5nbGUpICogcmFkaXVzKTsKLSAgICB9Ci0KLSAgICBDR0Z1bmN0aW9uQ2FsbGJhY2tz
IGNhbGxiYWNrcyA9IHswLCBjZ0dyYWRpZW50Q2FsbGJhY2ssIHJlbGVhc2VDYWNoZWRTdG9wc307
Ci0gICAgQ0dGbG9hdCBkb21haW5MaW1pdHNbMl0gPSB7MCwgMX07Ci0gICAgQ0dGbG9hdCByYW5n
ZUxpbWl0c1s4XSA9IHswLCAxLCAwLCAxLCAwLCAxLCAwLCAxfTsKLSAgICBzZXJ2ZXItPm1fc3Rv
cHNDYWNoZS0+cmVmKCk7Ci0gICAgQ0dGdW5jdGlvblJlZiBzaGFkaW5nRnVuY3Rpb24gPSBDR0Z1
bmN0aW9uQ3JlYXRlKHNlcnZlci0+bV9zdG9wc0NhY2hlLmdldCgpLCAxLCBkb21haW5MaW1pdHMs
IDQsIHJhbmdlTGltaXRzLCAmY2FsbGJhY2tzKTsKLQotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xv
clNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7Ci0gICAgQ0dTaGFkaW5nUmVm
IHNoYWRpbmcgPSBDR1NoYWRpbmdDcmVhdGVSYWRpYWwoY29sb3JTcGFjZSwgZm9jdXMsIDAsIGNl
bnRlciwgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KHJhZGl1cyksIHNoYWRpbmdGdW5jdGlvbiwg
dHJ1ZSwgdHJ1ZSk7Ci0gICAgQ0dDb2xvclNwYWNlUmVsZWFzZShjb2xvclNwYWNlKTsKLSAgICBD
R0Z1bmN0aW9uUmVsZWFzZShzaGFkaW5nRnVuY3Rpb24pOwotICAgIHJldHVybiBzaGFkaW5nOwot
fQotCi12b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnVwZGF0ZVF1YXJ0ekdyYWRpZW50U3Rv
cHNDYWNoZShjb25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYgc3RvcHMpCi17Ci0gICAgbV9z
dG9wc0NhY2hlID0gU2hhcmVkU3RvcENhY2hlOjpjcmVhdGUoKTsKLSAgICBWZWN0b3I8UXVhcnR6
R3JhZGllbnRTdG9wPiYgc3RvcHNDYWNoZSA9IG1fc3RvcHNDYWNoZS0+bV9zdG9wczsKLSAgICBz
dG9wc0NhY2hlLnJlc2l6ZShzdG9wcy5zaXplKCkpOwotICAgIENHRmxvYXQgcHJldmlvdXNPZmZz
ZXQgPSAwLjBmOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9wcy5zaXplKCk7ICsr
aSkgewotICAgICAgICBDR0Zsb2F0IGN1cnJPZmZzZXQgPSBtaW4obWF4KHN0b3BzW2ldLmZpcnN0
LCBwcmV2aW91c09mZnNldCksIHN0YXRpY19jYXN0PENHRmxvYXQ+KDEuMCkpOwotICAgICAgICBz
dG9wc0NhY2hlW2ldLm9mZnNldCA9IGN1cnJPZmZzZXQ7Ci0gICAgICAgIHN0b3BzQ2FjaGVbaV0u
cHJldmlvdXNEZWx0YUludmVyc2UgPSAxLjBmIC8gKGN1cnJPZmZzZXQgLSBwcmV2aW91c09mZnNl
dCk7Ci0gICAgICAgIHByZXZpb3VzT2Zmc2V0ID0gY3Vyck9mZnNldDsKLSAgICAgICAgQ0dGbG9h
dCogY2EgPSBzdG9wc0NhY2hlW2ldLmNvbG9yQXJyYXk7Ci0gICAgICAgIHN0b3BzW2ldLnNlY29u
ZC5nZXRSR0JBKGNhWzBdLCBjYVsxXSwgY2FbMl0sIGNhWzNdKTsKLSAgICB9Ci19Ci0KLXZvaWQg
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6dXBkYXRlUXVhcnR6R3JhZGllbnRDYWNoZShjb25zdCBT
VkdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIpCi17Ci0gICAgLy8gY2FjaGUgb3VyIG93biBj
b3B5IG9mIHRoZSBzdG9wcyBmb3IgZmFzdGVyIGFjY2Vzcy4KLSAgICAvLyB0aGlzIGlzIGxlZ2Fj
eSBjb2RlLCBwcm9iYWJseSBjb3VsZCBiZSByZXdvcmtlZC4KLSAgICBpZiAoIW1fc3RvcHNDYWNo
ZSkKLSAgICAgICAgdXBkYXRlUXVhcnR6R3JhZGllbnRTdG9wc0NhY2hlKGdyYWRpZW50U3RvcHMo
KSk7Ci0KLSAgICBDR1NoYWRpbmdSZWxlYXNlKG1fc2hhZGluZ0NhY2hlKTsKLQotICAgIGlmICh0
eXBlKCkgPT0gUmFkaWFsR3JhZGllbnRQYWludFNlcnZlcikgewotICAgICAgICBjb25zdCBTVkdQ
YWludFNlcnZlclJhZGlhbEdyYWRpZW50KiByYWRpYWwgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdQ
YWludFNlcnZlclJhZGlhbEdyYWRpZW50Kj4oc2VydmVyKTsKLSAgICAgICAgbV9zaGFkaW5nQ2Fj
aGUgPSBDR1NoYWRpbmdSZWZGb3JSYWRpYWxHcmFkaWVudChyYWRpYWwpOwotICAgIH0gZWxzZSBp
ZiAodHlwZSgpID09IExpbmVhckdyYWRpZW50UGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgY29uc3Qg
U1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCogbGluZWFyID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
U1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCo+KHNlcnZlcik7Ci0gICAgICAgIG1fc2hhZGlu
Z0NhY2hlID0gQ0dTaGFkaW5nUmVmRm9yTGluZWFyR3JhZGllbnQobGluZWFyKTsKLSAgICB9Ci19
Ci0KIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4dCBwYWludGluZwogc3RhdGljIGlubGluZSBj
b25zdCBSZW5kZXJPYmplY3QqIGZpbmRUZXh0Um9vdE9iamVjdChjb25zdCBSZW5kZXJPYmplY3Qq
IHN0YXJ0KQogewpAQCAtMTg0LDcgKzU1LDYgQEAgc3RhdGljIGlubGluZSBjb25zdCBSZW5kZXJP
YmplY3QqIGZpbmRUZXh0Um9vdE9iamVjdChjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0KQogCiB2
b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnRlYXJkb3duKEdyYXBoaWNzQ29udGV4dComIGNv
bnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlw
ZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QKIHsKLSAgICBDR1NoYWRpbmdSZWYgc2hhZGlu
ZyA9IG1fc2hhZGluZ0NhY2hlOwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0UmVmID0gY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQVNTRVJUKGNvbnRleHRSZWYpOwogCkBAIC0yMDgs
MzMgKzc4LDMxIEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6dGVhcmRvd24oR3JhcGhp
Y3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqCiAKICAgICAgICAgICAgIC8vIENs
aXAgY3VycmVudCBjb250ZXh0IHRvIG1hc2sgaW1hZ2UgKGdyYWRpZW50KQogICAgICAgICAgICAg
bV9zYXZlZENvbnRleHQtPmNvbmNhdENUTSh0cmFuc2Zvcm0uaW52ZXJzZSgpKTsKLSAgICAgICAg
ICAgIG1fc2F2ZWRDb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcih0ZXh0Qm91bmRhcnksIG1faW1h
Z2VCdWZmZXIpOworICAgICAgICAgICAgbV9zYXZlZENvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVy
KHRleHRCb3VuZGFyeSwgbV9pbWFnZUJ1ZmZlci5nZXQoKSk7CiAgICAgICAgICAgICBtX3NhdmVk
Q29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7CiAKICAgICAgICAgICAgIGhhbmRsZUJvdW5k
aW5nQm94TW9kZUFuZEdyYWRpZW50VHJhbnNmb3JtYXRpb24obV9zYXZlZENvbnRleHQsIG1hc2tC
Qm94KTsKIAogICAgICAgICAgICAgLy8gUmVzdG9yZSBvbi1zY3JlZW4gZHJhd2luZyBjb250ZXh0
LCBhZnRlciB3ZSBnb3QgdGhlIGltYWdlIG9mIHRoZSBncmFkaWVudAotICAgICAgICAgICAgZGVs
ZXRlIG1faW1hZ2VCdWZmZXI7Ci0KICAgICAgICAgICAgIGNvbnRleHQgPSBtX3NhdmVkQ29udGV4
dDsKICAgICAgICAgICAgIGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
IAogICAgICAgICAgICAgbV9zYXZlZENvbnRleHQgPSAwOwotICAgICAgICAgICAgbV9pbWFnZUJ1
ZmZlciA9IDA7CisgICAgICAgICAgICBtX2ltYWdlQnVmZmVyLmNsZWFyKCk7CisKKyAgICAgICAg
ICAgIC8vIGZpbmFsbHkgZmlsbCB0aGUgdGV4dCBjbGlwIHdpdGggdGhlIHNoYWRpbmcKKyAgICAg
ICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHRSZWYsIG1fZ3JhZGllbnQtPnBsYXRm
b3JtR3JhZGllbnQoKSk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBDR0NvbnRleHREcmF3U2hh
ZGluZyhjb250ZXh0UmVmLCBzaGFkaW5nKTsKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAK
IHZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6cmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQq
JiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHBhdGgsIFNWR1BhaW50VGFyZ2V0VHlwZSB0
eXBlKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHBhdGgtPnN0eWxlKCk7Ci0g
ICAgQ0dDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
LSAgICBBU1NFUlQoY29udGV4dFJlZik7Ci0gICAgCi0gICAgYm9vbCBpc0ZpbGxlZCA9ICh0eXBl
ICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgp
OworICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgcGF0aC0+c3R5bGUo
KS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKQorICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgpOwor
ICAgIGVsc2UKKyAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgpOwogCiAgICAgLy8gQ29tcHV0
ZSBkZXN0aW5hdGlvbiBvYmplY3QgYm91bmRpbmcgYm94CiAgICAgRmxvYXRSZWN0IG9iamVjdEJC
b3g7CkBAIC0yNDQsMTEgKzExMiw2IEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6cmVu
ZGVyUGF0aChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPCiAgICAgICAg
ICAgICBvYmplY3RCQm94ID0gYmJveDsKICAgICB9CiAKLSAgICBpZiAoaXNGaWxsZWQpCi0gICAg
ICAgIGNsaXBUb0ZpbGxQYXRoKGNvbnRleHRSZWYsIHBhdGgpOwotICAgIGVsc2UKLSAgICAgICAg
Y2xpcFRvU3Ryb2tlUGF0aChjb250ZXh0UmVmLCBwYXRoKTsKLQogICAgIGhhbmRsZUJvdW5kaW5n
Qm94TW9kZUFuZEdyYWRpZW50VHJhbnNmb3JtYXRpb24oY29udGV4dCwgb2JqZWN0QkJveCk7CiB9
CiAKQEAgLTI3NCwxMCArMTM3LDYgQEAgYm9vbCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXR1
cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QKIHsKICAgICBt
X293bmVyRWxlbWVudC0+YnVpbGRHcmFkaWVudCgpOwogCi0gICAgLy8gV2UgbmVlZCBhIGhvb2sg
dG8gY2FsbCB0aGlzIHdoZW4gdGhlIGdyYWRpZW50IGdldHMgdXBkYXRlZCwgYmVmb3JlIGRyYXdu
LgotICAgIGlmICghbV9zaGFkaW5nQ2FjaGUpCi0gICAgICAgIGNvbnN0X2Nhc3Q8U1ZHUGFpbnRT
ZXJ2ZXJHcmFkaWVudCo+KHRoaXMpLT51cGRhdGVRdWFydHpHcmFkaWVudENhY2hlKHRoaXMpOwot
CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKICAgICBBU1NFUlQoY29udGV4dFJlZik7CiAKQEAgLTMxMiwzMCArMTcxLDIyIEBAIGJvb2wg
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwg
Y29uc3QgUmVuZGVyT2JqZWN0CiAgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgt
bWFza1JlY3QueCgpLCAtbWFza1JlY3QueSgpKTsKICAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+
Y29uY2F0Q1RNKG9iamVjdC0+YWJzb2x1dGVUcmFuc2Zvcm0oKSk7CiAKLSAgICAgICAgbV9pbWFn
ZUJ1ZmZlciA9IG1hc2tJbWFnZS5yZWxlYXNlKCk7CisgICAgICAgIG1faW1hZ2VCdWZmZXIuc2V0
KG1hc2tJbWFnZS5yZWxlYXNlKCkpOwogICAgICAgICBtX3NhdmVkQ29udGV4dCA9IGNvbnRleHQ7
CiAKICAgICAgICAgY29udGV4dCA9IG1hc2tJbWFnZUNvbnRleHQ7CiAgICAgICAgIGNvbnRleHRS
ZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICB9CiAKKyAgICBpZiAoaXNGaWxs
ZWQgJiYgb2JqZWN0KQorICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShvYmplY3QtPnN0eWxl
KCktPnN2Z1N0eWxlKCktPmZpbGxSdWxlKCkpOworCiAgICAgaWYgKGlzU3Ryb2tlZCkKICAgICAg
ICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSwgb2JqZWN0KTsKIAog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmludmFs
aWRhdGUoKQotewotICAgIFNWR1BhaW50U2VydmVyOjppbnZhbGlkYXRlKCk7Ci0KLSAgICAvLyBJ
bnZhbGlkYXRlIGNhY2hlcwotICAgIENHU2hhZGluZ1JlbGVhc2UobV9zaGFkaW5nQ2FjaGUpOwot
Ci0gICAgbV9zdG9wc0NhY2hlID0gMDsKLSAgICBtX3NoYWRpbmdDYWNoZSA9IDA7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23026</attachid>
            <date>2008-08-27 05:45:57 -0700</date>
            <delta_ts>2008-09-29 13:06:53 -0700</delta_ts>
            <desc>Attempt to clean up SVG gradient code</desc>
            <filename>Attempt-to-clean-up-SVG-gradient-code.patch</filename>
            <type>text/plain</type>
            <size>11039</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MmU2YTM1ZDJmNGZlNWQzZjBmOWIwYTFjNGQ3YWY4M2RmYjBlN2ViOApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRTaXplLmgKaW5kZXggY2YxZTFjNS4uNTI5ZTA1MSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCkBAIC02Nyw2ICs2NywxMiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBtX2hlaWdodCA+IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdo
dCk7CiAgICAgfQogCisgICAgRmxvYXRTaXplIHNocnVua1RvKGNvbnN0IEZsb2F0U2l6ZSYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRmxvYXRTaXplKG1fd2lkdGggPCBvdGhl
ci5tX3dpZHRoID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCisgICAgICAgICAgICBtX2hlaWdo
dCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CisgICAgfQor
CiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgZXhwbGljaXQgRmxvYXRTaXplKGNvbnN0IENHU2l6ZSYp
OyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQogICAgIG9wZXJh
dG9yIENHU2l6ZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudC5oIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2
ZXJHcmFkaWVudC5oCmluZGV4IDUzOGY3YjEuLjVhYTVkOTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaAorKysgYi9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmgKQEAgLTgyLDkgKzgyLDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogI2lmIFBMQVRGT1JNKENHKQogICAgICAgICB2aXJ0dWFsIHZvaWQgdGVh
cmRvd24oR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFy
Z2V0VHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCByZW5kZXJQYXRoKEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQ
YWludFRhcmdldFR5cGUpIGNvbnN0OwotCi0gICAgICAgIC8vIEhlbHBlcnMKLSAgICAgICAgdm9p
ZCBoYW5kbGVCb3VuZGluZ0JveE1vZGVBbmRHcmFkaWVudFRyYW5zZm9ybWF0aW9uKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCkgY29uc3Q7CiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKFFUKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcCBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1Bh
aW50U2VydmVyR3JhZGllbnRDZy5jcHAKaW5kZXggZWNmNDE1MS4uMzU3NGQ1ZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcAor
KysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3Bw
CkBAIC01Myw0OCArNTMsOTEgQEAgc3RhdGljIGlubGluZSBjb25zdCBSZW5kZXJPYmplY3QqIGZp
bmRUZXh0Um9vdE9iamVjdChjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0KQogICAgIHJldHVybiBz
dGFydDsKIH0KIAotdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50Ojp0ZWFyZG93bihHcmFwaGlj
c0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRU
YXJnZXRUeXBlIHR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0CitzdGF0aWMgaW5saW5l
IHZvaWQgaGFuZGxlQm91bmRpbmdCb3hNb2RlQW5kR3JhZGllbnRUcmFuc2Zvcm1hdGlvbigKKyAg
ICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGJvb2wgYm91bmRpbmdCb3hNb2RlLAorICAgIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0UmVjdCkKIHsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9IGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpOwotICAgIEFTU0VSVChjb250ZXh0UmVmKTsKKyAgICBpZiAoYm91bmRp
bmdCb3hNb2RlKSB7CisgICAgICAgIC8vIENob29zZSBkZWZhdWx0IGdyYWRpZW50IGJvdW5kaW5n
IGJveAorICAgICAgICBDR1JlY3QgZ3JhZGllbnRCQm94ID0gQ0dSZWN0TWFrZSgwLjBmLCAwLjBm
LCAxLjBmLCAxLjBmKTsKIAotICAgIC8vIEFzIHJlbmRlclBhdGgoKSBpcyBub3QgdXNlZCB3aGVu
IHBhaW50aW5nIHRleHQsIHNwZWNpYWwgbG9naWMgbmVlZGVkIGhlcmUuCi0gICAgaWYgKGlzUGFp
bnRpbmdUZXh0KSB7Ci0gICAgICAgIGlmIChtX3NhdmVkQ29udGV4dCkgewotICAgICAgICAgICAg
RmxvYXRSZWN0IG1hc2tCQm94ID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihmaW5kVGV4dFJv
b3RPYmplY3Qob2JqZWN0KSktPnJlbGF0aXZlQkJveChmYWxzZSk7CisgICAgICAgIC8vIEdlbmVy
YXRlIGEgdHJhbnNmb3JtIHRvIG1hcCBiZXR3ZWVuIGJvdGggYm91bmRpbmcgYm94ZXMKKyAgICAg
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRJbnRvT2JqZWN0QkJveCA9IENHQWZmaW5lVHJh
bnNmb3JtTWFrZU1hcEJldHdlZW5SZWN0cyhncmFkaWVudEJCb3gsIENHUmVjdCh0YXJnZXRSZWN0
KSk7CisgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShncmFkaWVudEludG9PYmplY3RCQm94KTsK
KyAgICB9CiAKLSAgICAgICAgICAgIC8vIEZpeHVwIHRyYW5zZm9ybWF0aW9ucyB0byBiZSBhYmxl
IHRvIGNsaXAgdG8gbWFzawotICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9
IG9iamVjdC0+YWJzb2x1dGVUcmFuc2Zvcm0oKTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB0ZXh0
Qm91bmRhcnkgPSB0cmFuc2Zvcm0ubWFwUmVjdChtYXNrQkJveCk7CisgICAgLy8gQXBwbHkgdGhl
IGdyYWRpZW50J3Mgb3duIHRyYW5zZm9ybQorICAgIGNvbnRleHQtPmNvbmNhdENUTShncmFkaWVu
dFRyYW5zZm9ybSk7Cit9CiAKLSAgICAgICAgICAgIEludFNpemUgbWFza1NpemUobHJvdW5kZih0
ZXh0Qm91bmRhcnkud2lkdGgoKSksIGxyb3VuZGYodGV4dEJvdW5kYXJ5LmhlaWdodCgpKSk7Ci0g
ICAgICAgICAgICBjbGFtcEltYWdlQnVmZmVyU2l6ZVRvVmlld3BvcnQob2JqZWN0LT5kb2N1bWVu
dCgpLT5yZW5kZXJlcigpLCBtYXNrU2l6ZSk7CitzdGF0aWMgaW5saW5lIGJvb2wgY3JlYXRlTWFz
a0FuZFN3YXBDb250ZXh0Rm9yVGV4dEdyYWRpZW50KAorICAgIEdyYXBoaWNzQ29udGV4dComIGNv
bnRleHQsIEdyYXBoaWNzQ29udGV4dComIHNhdmVkQ29udGV4dCwKKyAgICBPd25QdHI8SW1hZ2VC
dWZmZXI+JiBpbWFnZUJ1ZmZlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAg
RmxvYXRSZWN0IG1hc2tCQm94ID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihmaW5kVGV4dFJv
b3RPYmplY3Qob2JqZWN0KSktPnJlbGF0aXZlQkJveChmYWxzZSk7CisgICAgSW50UmVjdCBtYXNr
UmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qob2JqZWN0LT5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJl
Y3QobWFza0JCb3gpKTsKIAotICAgICAgICAgICAgaWYgKG1hc2tTaXplLndpZHRoKCkgPCBzdGF0
aWNfY2FzdDxpbnQ+KHRleHRCb3VuZGFyeS53aWR0aCgpKSkKLSAgICAgICAgICAgICAgICB0ZXh0
Qm91bmRhcnkuc2V0V2lkdGgobWFza1NpemUud2lkdGgoKSk7CisgICAgSW50U2l6ZSBtYXNrU2l6
ZShtYXNrUmVjdC53aWR0aCgpLCBtYXNrUmVjdC5oZWlnaHQoKSk7CisgICAgY2xhbXBJbWFnZUJ1
ZmZlclNpemVUb1ZpZXdwb3J0KG9iamVjdC0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSwgbWFza1Np
emUpOwogCi0gICAgICAgICAgICBpZiAobWFza1NpemUuaGVpZ2h0KCkgPCBzdGF0aWNfY2FzdDxp
bnQ+KHRleHRCb3VuZGFyeS5oZWlnaHQoKSkpCi0gICAgICAgICAgICAgICAgdGV4dEJvdW5kYXJ5
LnNldEhlaWdodChtYXNrU2l6ZS5oZWlnaHQoKSk7CisgICAgYXV0b19wdHI8SW1hZ2VCdWZmZXI+
IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobWFza1NpemUsIGZhbHNlKTsKIAotICAg
ICAgICAgICAgLy8gQ2xpcCBjdXJyZW50IGNvbnRleHQgdG8gbWFzayBpbWFnZSAoZ3JhZGllbnQp
Ci0gICAgICAgICAgICBtX3NhdmVkQ29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybS5pbnZlcnNl
KCkpOwotICAgICAgICAgICAgbV9zYXZlZENvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKHRleHRC
b3VuZGFyeSwgbV9pbWFnZUJ1ZmZlci5nZXQoKSk7Ci0gICAgICAgICAgICBtX3NhdmVkQ29udGV4
dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7CisgICAgaWYgKCFtYXNrSW1hZ2UuZ2V0KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgaGFuZGxlQm91bmRpbmdCb3hNb2RlQW5k
R3JhZGllbnRUcmFuc2Zvcm1hdGlvbihtX3NhdmVkQ29udGV4dCwgbWFza0JCb3gpOworICAgIEdy
YXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOwor
ICAgIG1hc2tJbWFnZUNvbnRleHQtPnNhdmUoKTsKKyAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFu
c2xhdGUoLW1hc2tSZWN0LngoKSwgLW1hc2tSZWN0LnkoKSk7CisgICAgbWFza0ltYWdlQ29udGV4
dC0+Y29uY2F0Q1RNKG9iamVjdC0+YWJzb2x1dGVUcmFuc2Zvcm0oKSk7CiAKLSAgICAgICAgICAg
IC8vIFJlc3RvcmUgb24tc2NyZWVuIGRyYXdpbmcgY29udGV4dCwgYWZ0ZXIgd2UgZ290IHRoZSBp
bWFnZSBvZiB0aGUgZ3JhZGllbnQKLSAgICAgICAgICAgIGNvbnRleHQgPSBtX3NhdmVkQ29udGV4
dDsKLSAgICAgICAgICAgIGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
KyAgICBpbWFnZUJ1ZmZlci5zZXQobWFza0ltYWdlLnJlbGVhc2UoKSk7CisgICAgc2F2ZWRDb250
ZXh0ID0gY29udGV4dDsKIAotICAgICAgICAgICAgbV9zYXZlZENvbnRleHQgPSAwOwotICAgICAg
ICAgICAgbV9pbWFnZUJ1ZmZlci5jbGVhcigpOworICAgIGNvbnRleHQgPSBtYXNrSW1hZ2VDb250
ZXh0OwogCi0gICAgICAgICAgICAvLyBmaW5hbGx5IGZpbGwgdGhlIHRleHQgY2xpcCB3aXRoIHRo
ZSBzaGFkaW5nCi0gICAgICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0UmVmLCBt
X2dyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOwotICAgICAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGlwVG9UZXh0TWFzayhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIsIGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0LAorICAgIGNvbnN0IFNWR1BhaW50U2VydmVyR3JhZGllbnQq
IGdyYWRpZW50U2VydmVyKQoreworICAgIEZsb2F0UmVjdCBtYXNrQkJveCA9IGNvbnN0X2Nhc3Q8
UmVuZGVyT2JqZWN0Kj4oZmluZFRleHRSb290T2JqZWN0KG9iamVjdCkpLT5yZWxhdGl2ZUJCb3go
ZmFsc2UpOworCisgICAgLy8gRml4dXAgdHJhbnNmb3JtYXRpb25zIHRvIGJlIGFibGUgdG8gY2xp
cCB0byBtYXNrCisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG9iamVjdC0+YWJzb2x1
dGVUcmFuc2Zvcm0oKTsKKyAgICBGbG9hdFJlY3QgdGV4dEJvdW5kYXJ5ID0gdHJhbnNmb3JtLm1h
cFJlY3QobWFza0JCb3gpOworCisgICAgSW50U2l6ZSBtYXNrU2l6ZShscm91bmRmKHRleHRCb3Vu
ZGFyeS53aWR0aCgpKSwgbHJvdW5kZih0ZXh0Qm91bmRhcnkuaGVpZ2h0KCkpKTsKKyAgICBjbGFt
cEltYWdlQnVmZmVyU2l6ZVRvVmlld3BvcnQob2JqZWN0LT5kb2N1bWVudCgpLT5yZW5kZXJlcigp
LCBtYXNrU2l6ZSk7CisgICAgdGV4dEJvdW5kYXJ5LnNldFNpemUodGV4dEJvdW5kYXJ5LnNpemUo
KS5zaHJ1bmtUbyhtYXNrU2l6ZSkpOworCisgICAgLy8gQ2xpcCBjdXJyZW50IGNvbnRleHQgdG8g
bWFzayBpbWFnZSAoZ3JhZGllbnQpCisgICAgY29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybS5p
bnZlcnNlKCkpOworICAgIGNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKHRleHRCb3VuZGFyeSwg
aW1hZ2VCdWZmZXIuZ2V0KCkpOworICAgIGNvbnRleHQtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwor
CisgICAgaGFuZGxlQm91bmRpbmdCb3hNb2RlQW5kR3JhZGllbnRUcmFuc2Zvcm1hdGlvbihjb250
ZXh0LAorICAgICAgICAgICAgZ3JhZGllbnRTZXJ2ZXItPmJvdW5kaW5nQm94TW9kZSgpLAorICAg
ICAgICAgICAgZ3JhZGllbnRTZXJ2ZXItPmdyYWRpZW50VHJhbnNmb3JtKCksIG1hc2tCQm94KTsK
K30KKwordm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50Ojp0ZWFyZG93bihHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRU
eXBlIHR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0Cit7CisgICAgLy8gcmVuZGVyUGF0
aCgpIGlzIG5vdCB1c2VkIHdoZW4gcGFpbnRpbmcgdGV4dCwgc28gd2UgcGFpbnQgdGhlIGdyYWRp
ZW50IGR1cmluZyB0ZWFyZG93bigpCisgICAgaWYgKGlzUGFpbnRpbmdUZXh0ICYmIG1fc2F2ZWRD
b250ZXh0KSB7CisgICAgICAgIC8vIFJlc3RvcmUgb24tc2NyZWVuIGRyYXdpbmcgY29udGV4dAor
ICAgICAgICBjb250ZXh0ID0gbV9zYXZlZENvbnRleHQ7CisgICAgICAgIG1fc2F2ZWRDb250ZXh0
ID0gMDsKKworICAgICAgICBjbGlwVG9UZXh0TWFzayhjb250ZXh0LCBtX2ltYWdlQnVmZmVyLCBv
YmplY3QsIHRoaXMpOworCisgICAgICAgIC8vIGZpbmFsbHkgZmlsbCB0aGUgdGV4dCBjbGlwIHdp
dGggdGhlIHNoYWRpbmcKKyAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCksIG1fZ3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisKKyAgICAg
ICAgbV9pbWFnZUJ1ZmZlci5jbGVhcigpOyAvLyB3ZSdyZSBkb25lIHdpdGggb3VyIHRleHQgbWFz
ayBidWZmZXIKICAgICB9Ci0gICAgY29udGV4dC0+cmVzdG9yZSgpOworICAgIGNvbnRleHQtPnJl
c3RvcmUoKTsgLy8gc2F2ZSB3YXMgY2FsbGVkIGR1cmluZyBzZXR1cCgpCiB9CiAKIHZvaWQgU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudDo6cmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0
LCBjb25zdCBSZW5kZXJPYmplY3QqIHBhdGgsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25z
dApAQCAtMTEyLDc0ICsxNTUsMzUgQEAgdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpyZW5k
ZXJQYXRoKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck8KICAgICAgICAg
ICAgIG9iamVjdEJCb3ggPSBiYm94OwogICAgIH0KIAotICAgIGhhbmRsZUJvdW5kaW5nQm94TW9k
ZUFuZEdyYWRpZW50VHJhbnNmb3JtYXRpb24oY29udGV4dCwgb2JqZWN0QkJveCk7Ci19Ci0KLXZv
aWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6aGFuZGxlQm91bmRpbmdCb3hNb2RlQW5kR3JhZGll
bnRUcmFuc2Zvcm1hdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCkgY29uc3QKLXsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9IGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpKSB7
Ci0gICAgICAgIC8vIENob29zZSBkZWZhdWx0IGdyYWRpZW50IGJvdW5kaW5nIGJveAotICAgICAg
ICBDR1JlY3QgZ3JhZGllbnRCQm94ID0gQ0dSZWN0TWFrZSgwLjBmLCAwLjBmLCAxLjBmLCAxLjBm
KTsKLQotICAgICAgICAvLyBHZW5lcmF0ZSBhIHRyYW5zZm9ybSB0byBtYXAgYmV0d2VlbiBib3Ro
IGJvdW5kaW5nIGJveGVzCi0gICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50SW50b09i
amVjdEJCb3ggPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VNYXBCZXR3ZWVuUmVjdHMoZ3JhZGllbnRC
Qm94LCBDR1JlY3QodGFyZ2V0UmVjdCkpOwotICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29u
dGV4dFJlZiwgZ3JhZGllbnRJbnRvT2JqZWN0QkJveCk7Ci0gICAgfQotCi0gICAgLy8gQXBwbHkg
dGhlIGdyYWRpZW50J3Mgb3duIHRyYW5zZm9ybQotICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IGdyYWRpZW50VHJhbnNmb3JtKCk7Ci0gICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRl
eHRSZWYsIHRyYW5zZm9ybSk7CisgICAgaGFuZGxlQm91bmRpbmdCb3hNb2RlQW5kR3JhZGllbnRU
cmFuc2Zvcm1hdGlvbihjb250ZXh0LCBib3VuZGluZ0JveE1vZGUoKSwKKyAgICAgICAgZ3JhZGll
bnRUcmFuc2Zvcm0oKSwgb2JqZWN0QkJveCk7CiB9CiAKIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0
KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBj
b25zdAogewogICAgIG1fb3duZXJFbGVtZW50LT5idWlsZEdyYWRpZW50KCk7CiAKLSAgICBDR0Nv
bnRleHRSZWYgY29udGV4dFJlZiA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEFT
U0VSVChjb250ZXh0UmVmKTsKLQogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5
bGUoKTsKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5
bGUoKTsKIAotICAgIGJvb2wgaXNGaWxsZWQgPSAodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlw
ZSkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKTsKLSAgICBib29sIGlzU3Ryb2tlZCA9
ICh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmIHN0eWxlLT5zdmdTdHlsZSgpLT5o
YXNTdHJva2UoKTsKKyAgICBib29sIGlzRmlsbGVkID0gKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdl
dFR5cGUpICYmIHN2Z1N0eWxlLT5oYXNGaWxsKCk7CisgICAgYm9vbCBpc1N0cm9rZWQgPSAodHlw
ZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdmdTdHlsZS0+aGFzU3Ryb2tlKCk7CiAK
ICAgICBBU1NFUlQoaXNGaWxsZWQgJiYgIWlzU3Ryb2tlZCB8fCAhaXNGaWxsZWQgJiYgaXNTdHJv
a2VkKTsKIAotICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICBDR0NvbnRleHRTZXRBbHBoYShjb250
ZXh0UmVmLCBpc0ZpbGxlZCA/IHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsT3BhY2l0eSgpIDogc3R5
bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU9wYWNpdHkoKSk7CisgICAgY29udGV4dC0+c2F2ZSgpOyAv
LyByZXN0b3JlIGlzIGNhbGxlZCBkdXJpbmcgdGVhcmRvd24oKQorICAgIGNvbnRleHQtPnNldEFs
cGhhKGlzRmlsbGVkID8gc3ZnU3R5bGUtPmZpbGxPcGFjaXR5KCkgOiBzdmdTdHlsZS0+c3Ryb2tl
T3BhY2l0eSgpKTsKIAogICAgIGlmIChpc1BhaW50aW5nVGV4dCkgewotICAgICAgICBGbG9hdFJl
Y3QgbWFza0JCb3ggPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGZpbmRUZXh0Um9vdE9iamVj
dChvYmplY3QpKS0+cmVsYXRpdmVCQm94KGZhbHNlKTsKLSAgICAgICAgSW50UmVjdCBtYXNrUmVj
dCA9IGVuY2xvc2luZ0ludFJlY3Qob2JqZWN0LT5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3Qo
bWFza0JCb3gpKTsKLQotICAgICAgICBJbnRTaXplIG1hc2tTaXplKG1hc2tSZWN0LndpZHRoKCks
IG1hc2tSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgY2xhbXBJbWFnZUJ1ZmZlclNpemVUb1ZpZXdw
b3J0KG9iamVjdC0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSwgbWFza1NpemUpOwotCi0gICAgICAg
IGF1dG9fcHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1h
c2tTaXplLCBmYWxzZSk7Ci0KLSAgICAgICAgaWYgKCFtYXNrSW1hZ2UuZ2V0KCkpIHsKKyAgICAg
ICAgaWYgKCFjcmVhdGVNYXNrQW5kU3dhcENvbnRleHRGb3JUZXh0R3JhZGllbnQoY29udGV4dCwg
bV9zYXZlZENvbnRleHQsIG1faW1hZ2VCdWZmZXIsIG9iamVjdCkpIHsKICAgICAgICAgICAgIGNv
bnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQot
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+
Y29udGV4dCgpOwotICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5zYXZlKCk7Ci0KLSAgICAgICAg
bWFza0ltYWdlQ29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKGlzRmlsbGVkID8gY1RleHRGaWxs
IDogY1RleHRTdHJva2UpOwotICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLW1h
c2tSZWN0LngoKSwgLW1hc2tSZWN0LnkoKSk7Ci0gICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmNv
bmNhdENUTShvYmplY3QtPmFic29sdXRlVHJhbnNmb3JtKCkpOwotCi0gICAgICAgIG1faW1hZ2VC
dWZmZXIuc2V0KG1hc2tJbWFnZS5yZWxlYXNlKCkpOwotICAgICAgICBtX3NhdmVkQ29udGV4dCA9
IGNvbnRleHQ7Ci0KLSAgICAgICAgY29udGV4dCA9IG1hc2tJbWFnZUNvbnRleHQ7Ci0gICAgICAg
IGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICAgICAgY29udGV4
dC0+c2V0VGV4dERyYXdpbmdNb2RlKGlzRmlsbGVkID8gY1RleHRGaWxsIDogY1RleHRTdHJva2Up
OwogICAgIH0KIAotICAgIGlmIChpc0ZpbGxlZCAmJiBvYmplY3QpCi0gICAgICAgIGNvbnRleHQt
PnNldEZpbGxSdWxlKG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSk7Cisg
ICAgaWYgKGlzRmlsbGVkKQorICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShzdmdTdHlsZS0+
ZmlsbFJ1bGUoKSk7CiAKICAgICBpZiAoaXNTdHJva2VkKQogICAgICAgICBhcHBseVN0cm9rZVN0
eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3QpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23027</attachid>
            <date>2008-08-27 05:46:00 -0700</date>
            <delta_ts>2008-09-29 13:06:53 -0700</delta_ts>
            <desc>Make more of the CG code cross-platform</desc>
            <filename>Make-more-of-the-CG-code-cross-platform.patch</filename>
            <type>text/plain</type>
            <size>12253</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">Yjc5OWFjZGJmMmM3NWM4MjgxN2Y5NDc4NGMzMDJmYTU3MDRjZGY5MApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmNwcCBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2NnL0NnU3VwcG9ydC5jcHAKaW5kZXggMGRjMzA1Zi4uNTZlNTE5OSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9jZy9DZ1N1cHBvcnQuY3BwCkBAIC0zNywxNCArMzcsMTcgQEAKICNpbmNsdWRlICJSZW5k
ZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVu
ZGVyU3R5bGUuaCIKKwogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNHQWZmaW5lVHJhbnNmb3Jt
IENHQWZmaW5lVHJhbnNmb3JtTWFrZU1hcEJldHdlZW5SZWN0cyhDR1JlY3Qgc291cmNlLCBDR1Jl
Y3QgZGVzdCkKK0FmZmluZVRyYW5zZm9ybSBtYWtlTWFwQmV0d2VlblJlY3RzKGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QpCiB7Ci0gICAgQ0dBZmZpbmVUcmFu
c2Zvcm0gdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlVHJhbnNsYXRpb24oZGVzdC5v
cmlnaW4ueCAtIHNvdXJjZS5vcmlnaW4ueCwgZGVzdC5vcmlnaW4ueSAtIHNvdXJjZS5vcmlnaW4u
eSk7Ci0gICAgdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1TY2FsZSh0cmFuc2Zvcm0sIGRl
c3Quc2l6ZS53aWR0aC9zb3VyY2Uuc2l6ZS53aWR0aCwgZGVzdC5zaXplLmhlaWdodC9zb3VyY2Uu
c2l6ZS5oZWlnaHQpOworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CisgICAgdHJhbnNm
b3JtLnRyYW5zbGF0ZShkZXN0LngoKSAtIHNvdXJjZS54KCksIGRlc3QueSgpIC0gc291cmNlLnko
KSk7CisgICAgdHJhbnNmb3JtLnNjYWxlKGRlc3Qud2lkdGgoKS9zb3VyY2Uud2lkdGgoKSwgZGVz
dC5oZWlnaHQoKS9zb3VyY2UuaGVpZ2h0KCkpOwogICAgIHJldHVybiB0cmFuc2Zvcm07CiB9CiAK
QEAgLTU1LDY0ICs1OCw2OCBAQCB2b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbgogICAgIGNvbnRleHQt
PnNldExpbmVKb2luKHN0eWxlLT5zdmdTdHlsZSgpLT5qb2luU3R5bGUoKSk7CiAgICAgY29udGV4
dC0+c2V0TWl0ZXJMaW1pdChzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsK
IAotICAgIC8vIEZJWE1FOiBEYXNoQXJyYXkgc3VwcG9ydCBjb3VsZCBlYXNpbHkgYmUgbW92ZWQg
aW50byBHcmFwaGljc0NvbnRleHQsIGFuZCB0aGlzIGZ1bmN0aW9uIHRoZW4gbWFkZSB4LXBsYXRm
b3JtCisgICAgLy8gRklYTUU6IERhc2hBcnJheSBzdXBwb3J0IGNvdWxkIGVhc2lseSBiZSBtb3Zl
ZCBpbnRvIEdyYXBoaWNzQ29udGV4dCwgYW5kCisgICAgLy8gdGhpcyBmdW5jdGlvbiB0aGVuIG1h
ZGUgY3Jvc3MtcGxhdGZvcm0KICAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcyA9IGRhc2hBcnJh
eUZyb21SZW5kZXJpbmdTdHlsZShzdHlsZSk7CiAgICAgZmxvYXQgZGFzaE9mZnNldCA9IFNWR1Jl
bmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdTdHlsZSgp
LT5zdHJva2VEYXNoT2Zmc2V0KCksIDAuMGYpOwogCiAgICAgQ0dDb250ZXh0U2V0TGluZURhc2go
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIGRhc2hPZmZzZXQsIGRhc2hlcy5kYXRhKCksIGRh
c2hlcy5zaXplKCkpOwogfQogCi1DR0NvbnRleHRSZWYgc2NyYXRjaENvbnRleHQoKQorR3JhcGhp
Y3NDb250ZXh0KiBzY3JhdGNoQ29udGV4dCgpCiB7Ci0gICAgc3RhdGljIENHQ29udGV4dFJlZiBz
Y3JhdGNoID0gMDsKLSAgICBpZiAoIXNjcmF0Y2gpIHsKLSAgICAgICAgQ0ZNdXRhYmxlRGF0YVJl
ZiBlbXB0eSA9IENGRGF0YUNyZWF0ZU11dGFibGUoTlVMTCwgMCk7Ci0gICAgICAgIENHRGF0YUNv
bnN1bWVyUmVmIGNvbnN1bWVyID0gQ0dEYXRhQ29uc3VtZXJDcmVhdGVXaXRoQ0ZEYXRhKGVtcHR5
KTsKLSAgICAgICAgc2NyYXRjaCA9IENHUERGQ29udGV4dENyZWF0ZShjb25zdW1lciwgTlVMTCwg
TlVMTCk7CisgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dCogc2hhcmVkU2NyYXRjaENvbnRleHQg
PSAwOworICAgIGlmICghc2hhcmVkU2NyYXRjaENvbnRleHQpIHsKKyAgICAgICAgUmV0YWluUHRy
PENGTXV0YWJsZURhdGFSZWY+IGVtcHR5KEFkb3B0Q0YsIENGRGF0YUNyZWF0ZU11dGFibGUoTlVM
TCwgMCkpOworICAgICAgICBDR0RhdGFDb25zdW1lclJlZiBjb25zdW1lciA9IENHRGF0YUNvbnN1
bWVyQ3JlYXRlV2l0aENGRGF0YShlbXB0eS5nZXQoKSk7CisgICAgICAgIENHQ29udGV4dFJlZiBz
Y3JhdGNoID0gQ0dQREZDb250ZXh0Q3JlYXRlKGNvbnN1bWVyLCBOVUxMLCBOVUxMKTsKICAgICAg
ICAgQ0dEYXRhQ29uc3VtZXJSZWxlYXNlKGNvbnN1bWVyKTsKLSAgICAgICAgQ0ZSZWxlYXNlKGVt
cHR5KTsKIAotICAgICAgICBDR0Zsb2F0IGJsYWNrWzRdID0gezAsIDAsIDAsIDF9OwotICAgICAg
ICBDR0NvbnRleHRTZXRGaWxsQ29sb3Ioc2NyYXRjaCwgYmxhY2spOwotICAgICAgICBDR0NvbnRl
eHRTZXRTdHJva2VDb2xvcihzY3JhdGNoLCBibGFjayk7Ci0gICAgIH0KLSAgICByZXR1cm4gc2Ny
YXRjaDsKKyAgICAgICAgc2hhcmVkU2NyYXRjaENvbnRleHQgPSBuZXcgR3JhcGhpY3NDb250ZXh0
KHNjcmF0Y2gpOworICAgICAgICBDR0NvbnRleHRSZWxlYXNlKHNjcmF0Y2gpOworCisgICAgICAg
IC8vIFNldHVwIHNvbWUgZGVmYXVsdCBzdGF0ZSB3aGljaCBzaG91bGQgbmV2ZXIgY2hhbmdlIHNp
bmNlIGNhbGxlcnMKKyAgICAgICAgLy8gc2hvdWxkIGFsd2F5cyBzYXZlKCkgYW5kIHJlc3RvcmUo
KQorICAgICAgICBzaGFyZWRTY3JhdGNoQ29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjpibGFj
ayk7CisgICAgICAgIHNoYXJlZFNjcmF0Y2hDb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6
YmxhY2spOworICAgIH0KKyAgICAvLyBUT0RPKGVzZWlkZWwpOiBXZSBjb3VsZCBhZGQgYW4gQVNT
RVJUIGhlcmUgdG8gYXNzdXJlIHRoYXQgCisgICAgLy8gc2hhcmVkU2NyYXRjaENvbnRleHQgYWx3
YXlzIGhhcyB0aGUgc2FtZSBzaGFyZWQgc3RhdGUsIGFuZCBpcyBub3QKKyAgICAvLyBhbHJlYWR5
IGluIHVzZSAoYW4gZW1wdHkgZ3JhcGhpY3Mgc3RhdGUgc3RhY2spLgorICAgIHJldHVybiBzaGFy
ZWRTY3JhdGNoQ29udGV4dDsKIH0KIAogRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KGNvbnN0
IFBhdGgmIHBhdGgsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmpl
Y3QpCi0gewotICAgIC8vIHRoZSBiYm94IG1pZ2h0IGdyb3cgaWYgdGhlIHBhdGggaXMgc3Ryb2tl
ZC4KLSAgICAvLyBhbmQgQ0dQYXRoR2V0Qm91bmRpbmdCb3ggZG9lc24ndCBzdXBwb3J0IHRoYXQs
IHNvIHdlJ2xsIGhhdmUKLSAgICAvLyB0byBtYWtlIGFuIGFsdGVybmF0aXZlIGNhbGwuLi4KK3sK
KyAgICAvLyBUaGUgYm91bmRpbmcgYm94IG1heSBleHBhbmQgaWYgdGhlIHBhdGggaXMgc3Ryb2tl
ZC4KKyAgICAvLyBDR1BhdGhHZXRCb3VuZGluZ0JveCBvbmx5IHN1cHBvcnRzIHJldHVybmluZyB0
aGUgZmlsbCBib3VuZGluZyBib3gKKyAgICAvLyBzbyB3ZSBoYXZlIHRvIGZpcnN0IGNhbGwgQ0dD
b250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgKICAKLSAgICAvLyBGSVhNRTogc2luY2Ug
dGhpcyBpcyBtYWlubHkgdXNlZCB0byBkZWNpZGUgd2hhdCB0byByZXBhaW50LAotICAgIC8vIHBl
cmhhcHMgaXQgd291bGQgYmUgc3VmZmljaWVudCB0byBqdXN0IG91dHNldCB0aGUgZmlsbCBiYm94
IGJ5Ci0gICAgLy8gdGhlIHN0cm9rZSB3aWR0aCAtIHRoYXQgc2hvdWxkIGJlIHdheSBjaGVhcGVy
IGFuZCBzaW1wbGVyIHRoYW4KLSAgICAvLyB3aGF0IHdlIGRvIGhlcmUuCisgICAgLy8gRklYTUU6
IENhbGxlcnMgd2hpY2ggb25seSBuZWVkIHRoaXMgZm9yIGRlY2lkaW5nIHRoZSByZXBhaW50LXJl
Y3QKKyAgICAvLyBzaG91bGQgcHJvYmFibHkgdXNlIGEgY2hlYXBlciBjYWxsLCB3aGljaCBqdXN0
IG9mZnNldHMgdGhlIChjYWNoZWQpIGZpbGwKKyAgICAvLyBib3VuZGluZyBib3ggYnkgb25lIGhh
bGYgb2YgdGhlIHN0cm9rZSB3aWR0aC4KICAKLSAgICBDR1BhdGhSZWYgY2dQYXRoID0gcGF0aC5w
bGF0Zm9ybVBhdGgoKTsKLQotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gc2NyYXRjaENvbnRl
eHQoKTsKLSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwotCi0gICAgQ0dDb250ZXh0
QmVnaW5QYXRoKGNvbnRleHQpOwotICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgY2dQYXRo
KTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjb250ZXh0KTsKLSAgICBhcHBseVN0cm9rZVN0
eWxlVG9Db250ZXh0KCZnYywgc3R5bGUsIG9iamVjdCk7Ci0KLSAgICBDR0NvbnRleHRSZXBsYWNl
UGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsKLSAgICBpZiAoQ0dDb250ZXh0SXNQYXRoRW1w
dHkoY29udGV4dCkpIHsKLSAgICAgICAgLy8gQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tl
ZFBhdGggc2VlbXMgdG8gZmFpbCB0byBjcmVhdGUgYSBwYXRoIHNvbWV0aW1lcywgdGhpcyBpcyBu
b3Qgd2VsbCB1bmRlcnN0b29kLgotICAgICAgICAvLyByZXR1cm5pbmcgaGVyZSBwcmV2ZW50cyBD
RyBmcm9tIGxvZ2dpbmcgdG8gdGhlIGNvbnNvbGUgZnJvbSBDR0NvbnRleHRHZXRQYXRoQm91bmRp
bmdCb3gKLSAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKKyAgICBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQgPSBzY3JhdGNoQ29udGV4dCgpOworICAgIGNvbnRleHQtPnNh
dmUoKTsKKworICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOworICAgIGNvbnRleHQtPmFkZFBhdGgo
cGF0aCk7CisgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSwgb2Jq
ZWN0KTsKKworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKTsKKyAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjZ0NvbnRl
eHQpOworICAgIGlmIChDR0NvbnRleHRJc1BhdGhFbXB0eShjZ0NvbnRleHQpKSB7CisgICAgICAg
IC8vIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoIHNlZW1zIHRvIHNvbWV0aW1l
cyBmYWlsIHRvIGNyZWF0ZQorICAgICAgICAvLyBhIHBhdGgsIHRoaXMgaXMgbm90IHdlbGwgdW5k
ZXJzdG9vZC4gIFJldHVybmluZyBoZXJlIHByZXZlbnRzIENHIGZyb20KKyAgICAgICAgLy8gbG9n
Z2luZyB0byB0aGUgc3lzdGVtIGNvbnNvbGUgZnJvbSBDR0NvbnRleHRHZXRQYXRoQm91bmRpbmdC
b3guCisgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dCgpOwogICAgIH0KIAotICAgIENHUmVjdCBib3ggPSBDR0NvbnRleHRHZXRQYXRoQm91bmRpbmdC
b3goY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKKyAgICBG
bG9hdFJlY3QgYm94ID0gQ0dDb250ZXh0R2V0UGF0aEJvdW5kaW5nQm94KGNnQ29udGV4dCk7Cisg
ICAgY29udGV4dC0+cmVzdG9yZSgpOwogCi0gICAgcmV0dXJuIEZsb2F0UmVjdChib3gpOworICAg
IHJldHVybiBib3g7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Nn
L0NnU3VwcG9ydC5oIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmgKaW5kZXgg
NDU0ZTViOS4uNjkxMGI5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dT
dXBwb3J0LmgKKysrIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0LmgKQEAgLTI4
LDI0ICsyOCwyMCBAQAogCiAjaWYgRU5BQkxFKFNWRykKIAotI2luY2x1ZGUgPEFwcGxpY2F0aW9u
U2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMu
aCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIHN0cnVjdCBDR1BhdGggKkNHTXV0
YWJsZVBhdGhSZWY7Ci0KLWNsYXNzIFBhdGg7CitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFz
cyBGbG9hdFJlY3Q7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLWNsYXNzIFJlbmRlck9iamVjdDsKIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIFBhdGg7CitjbGFzcyBSZW5kZXJPYmplY3Q7Citj
bGFzcyBSZW5kZXJTdHlsZTsKIAotQ0dBZmZpbmVUcmFuc2Zvcm0gQ0dBZmZpbmVUcmFuc2Zvcm1N
YWtlTWFwQmV0d2VlblJlY3RzKENHUmVjdCBzb3VyY2UsIENHUmVjdCBkZXN0KTsKK0FmZmluZVRy
YW5zZm9ybSBtYWtlTWFwQmV0d2VlblJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3QpOwogCiB2b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3Jh
cGhpY3NDb250ZXh0KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKIAotQ0dD
b250ZXh0UmVmIHNjcmF0Y2hDb250ZXh0KCk7CitHcmFwaGljc0NvbnRleHQqIHNjcmF0Y2hDb250
ZXh0KCk7CiBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goY29uc3QgUGF0aCYgcGF0aCwgUmVu
ZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvY2cvUmVuZGVyUGF0aENnLmNwcCBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2NnL1JlbmRlclBhdGhDZy5jcHAKaW5kZXggZWI4ZTQ4Mi4uMGMxMzMxMyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvUmVuZGVyUGF0aENnLmNwcAorKysgYi9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9jZy9SZW5kZXJQYXRoQ2cuY3BwCkBAIC0zMCwxMiArMzAsMTMgQEAKICNpZiBF
TkFCTEUoU1ZHKQogI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKIAotI2luY2x1ZGUgPEFwcGxpY2F0
aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgogI2luY2x1ZGUgIkNnU3VwcG9ydC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVy
LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVt
ZW50LmgiCisKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vydmlj
ZXMuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC01NywxOSArNTgsMTUgQEAgYm9vbCBSZW5kZXJQYXRoOjpzdHJva2VDb250YWlucyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkgY28KICAgICBpZiAocmVx
dWlyZXNTdHJva2UgJiYgIVNWR1BhaW50U2VydmVyOjpzdHJva2VQYWludFNlcnZlcihzdHlsZSgp
LCB0aGlzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ0dNdXRhYmxlUGF0aFJlZiBj
Z1BhdGggPSBwYXRoKCkucGxhdGZvcm1QYXRoKCk7Ci0gICAgCi0gICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBzY3JhdGNoQ29udGV4dCgpOwotICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4
dCk7Ci0gICAgCi0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwotICAgIENHQ29udGV4
dEFkZFBhdGgoY29udGV4dCwgY2dQYXRoKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjb250
ZXh0KTsKLSAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KCZnYywgc3R5bGUoKSwgdGhpcyk7
CisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gc2NyYXRjaENvbnRleHQoKTsKKyAgICBj
b250ZXh0LT5zYXZlKCk7CisgICAgY29udGV4dC0+YmVnaW5QYXRoKCk7CisgICAgY29udGV4dC0+
YWRkUGF0aChwYXRoKCkpOworICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwg
c3R5bGUoKSwgdGhpcyk7CiAKLSAgICBib29sIGhpdFN1Y2Nlc3MgPSBDR0NvbnRleHRQYXRoQ29u
dGFpbnNQb2ludChjb250ZXh0LCBwb2ludCwga0NHUGF0aFN0cm9rZSk7Ci0gICAgQ0dDb250ZXh0
UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKKyAgICAvLyBUT0RPKGVzZWlkZWwpOiBUaGlzIHNob3Vs
ZCBiZSBtYWRlIGNyb3NzLXBsYXRmb3JtCisgICAgYm9vbCBoaXRTdWNjZXNzID0gQ0dDb250ZXh0
UGF0aENvbnRhaW5zUG9pbnQoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHBvaW50LCBrQ0dQ
YXRoU3Ryb2tlKTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgCiAgICAgcmV0dXJuIGhp
dFN1Y2Nlc3M7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWlu
dFNlcnZlckdyYWRpZW50Q2cuY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRT
ZXJ2ZXJHcmFkaWVudENnLmNwcAppbmRleCAzNTc0ZDVlLi5mNmViN2Q5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwCisrKyBi
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAKQEAg
LTU5LDExICs1OSwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlQm91bmRpbmdCb3hNb2Rl
QW5kR3JhZGllbnRUcmFuc2Zvcm1hdGlvbigKIHsKICAgICBpZiAoYm91bmRpbmdCb3hNb2RlKSB7
CiAgICAgICAgIC8vIENob29zZSBkZWZhdWx0IGdyYWRpZW50IGJvdW5kaW5nIGJveAotICAgICAg
ICBDR1JlY3QgZ3JhZGllbnRCQm94ID0gQ0dSZWN0TWFrZSgwLjBmLCAwLjBmLCAxLjBmLCAxLjBm
KTsKKyAgICAgICAgRmxvYXRSZWN0IGdyYWRpZW50QkJveCgwLjBmLCAwLjBmLCAxLjBmLCAxLjBm
KTsKIAogICAgICAgICAvLyBHZW5lcmF0ZSBhIHRyYW5zZm9ybSB0byBtYXAgYmV0d2VlbiBib3Ro
IGJvdW5kaW5nIGJveGVzCi0gICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50SW50b09i
amVjdEJCb3ggPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VNYXBCZXR3ZWVuUmVjdHMoZ3JhZGllbnRC
Qm94LCBDR1JlY3QodGFyZ2V0UmVjdCkpOwotICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZ3Jh
ZGllbnRJbnRvT2JqZWN0QkJveCk7CisgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShtYWtlTWFw
QmV0d2VlblJlY3RzKGdyYWRpZW50QkJveCwgdGFyZ2V0UmVjdCkpOwogICAgIH0KIAogICAgIC8v
IEFwcGx5IHRoZSBncmFkaWVudCdzIG93biB0cmFuc2Zvcm0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2NnL1NWR1Jlc291cmNlQ2xpcHBlckNnLmNwcCBiL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2NnL1NWR1Jlc291cmNlQ2xpcHBlckNnLmNwcAppbmRleCAwNzFhZmUyLi4zMDI2MzRj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdSZXNvdXJjZUNsaXBwZXJD
Zy5jcHAKKysrIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUmVzb3VyY2VDbGlwcGVyQ2cu
Y3BwCkBAIC0zMCw1MiArMzAsNDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1Jl
c291cmNlQ2xpcHBlci5oIgogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiQ2dTdXBwb3J0LmgiCiAKKyNpbmNsdWRl
IDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB2b2lkIFNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkgY29uc3QKIHsK
LSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
Ci0gICAgaWYgKG1fY2xpcERhdGEuY2xpcERhdGEoKS5zaXplKCkgPCAxKQorICAgIGlmIChtX2Ns
aXBEYXRhLmNsaXBEYXRhKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBib29s
IGhldGVyb2dlbm91c0NsaXBSdWxlcyA9IGZhbHNlOwogICAgIFdpbmRSdWxlIGNsaXBSdWxlID0g
bV9jbGlwRGF0YS5jbGlwRGF0YSgpWzBdLndpbmRSdWxlOwogCi0gICAgY29udGV4dC0+YmVnaW5Q
YXRoKCk7Ci0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBiYm94VHJhbnNmb3JtID0gQ0dBZmZpbmVU
cmFuc2Zvcm1NYWtlTWFwQmV0d2VlblJlY3RzKENHUmVjdE1ha2UoMCwwLDEsMSksIENHUmVjdChi
b3VuZGluZ0JveCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBiYm94VHJhbnNmb3JtID0gbWFrZU1h
cEJldHdlZW5SZWN0cyhGbG9hdFJlY3QoMCwgMCwgMSwgMSksIGJvdW5kaW5nQm94KTsKIAogICAg
IGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBtX2NsaXBEYXRhLmNsaXBEYXRhKCkuc2l6ZSgpOyB4
KyspIHsKLSAgICAgICAgQ2xpcERhdGEgZGF0YSA9IG1fY2xpcERhdGEuY2xpcERhdGEoKVt4XTsK
LSAgICAgICAgaWYgKGRhdGEud2luZFJ1bGUgIT0gY2xpcFJ1bGUpCisgICAgICAgIENsaXBEYXRh
IGNsaXBEYXRhID0gbV9jbGlwRGF0YS5jbGlwRGF0YSgpW3hdOworICAgICAgICBpZiAoY2xpcERh
dGEud2luZFJ1bGUgIT0gY2xpcFJ1bGUpCiAgICAgICAgICAgICBoZXRlcm9nZW5vdXNDbGlwUnVs
ZXMgPSB0cnVlOwotICAgICAgICAKLSAgICAgICAgQ0dQYXRoUmVmIGNsaXBQYXRoID0gZGF0YS5w
YXRoLnBsYXRmb3JtUGF0aCgpOwogCi0gICAgICAgIGlmIChkYXRhLmJib3hVbml0cykgewotICAg
ICAgICAgICAgQ0dNdXRhYmxlUGF0aFJlZiB0cmFuc2Zvcm1lZFBhdGggPSBDR1BhdGhDcmVhdGVN
dXRhYmxlKCk7Ci0gICAgICAgICAgICBDR1BhdGhBZGRQYXRoKHRyYW5zZm9ybWVkUGF0aCwgJmJi
b3hUcmFuc2Zvcm0sIGNsaXBQYXRoKTsKLSAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY2dD
b250ZXh0LCB0cmFuc2Zvcm1lZFBhdGgpOwotICAgICAgICAgICAgQ0dQYXRoUmVsZWFzZSh0cmFu
c2Zvcm1lZFBhdGgpOworICAgICAgICBpZiAoY2xpcERhdGEuYmJveFVuaXRzKSB7CisgICAgICAg
ICAgICBQYXRoIHRyYW5zZm9ybWVkUGF0aCA9IGNsaXBEYXRhLnBhdGg7CisgICAgICAgICAgICB0
cmFuc2Zvcm1lZFBhdGgudHJhbnNmb3JtKGJib3hUcmFuc2Zvcm0pOworICAgICAgICAgICAgY29u
dGV4dC0+YWRkUGF0aCh0cmFuc2Zvcm1lZFBhdGgpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIENHQ29udGV4dEFkZFBhdGgoY2dDb250ZXh0LCBjbGlwUGF0aCk7CisgICAgICAgICAgICBj
b250ZXh0LT5hZGRQYXRoKGNsaXBEYXRhLnBhdGgpOwogICAgIH0KIAotICAgIGlmIChtX2NsaXBE
YXRhLmNsaXBEYXRhKCkuc2l6ZSgpKSB7Ci0gICAgICAgIC8vIEZJWE1FIQotICAgICAgICAvLyBX
ZSBkb24ndCBjdXJyZW50bHkgYWxsb3cgZm9yIGhldGVyb2dlbm91cyBjbGlwIHJ1bGVzLgotICAg
ICAgICAvLyB3ZSB3b3VsZCBoYXZlIHRvIGRldGVjdCBzdWNoLCBkcmF3IHRvIGEgbWFzaywgYW5k
IHRoZW4gY2xpcAotICAgICAgICAvLyB0byB0aGF0IG1hc2sgICAgICAgICAgICAgICAgCi0gICAg
ICAgIGlmICghQ0dDb250ZXh0SXNQYXRoRW1wdHkoY2dDb250ZXh0KSkgewotICAgICAgICAgICAg
aWYgKGNsaXBSdWxlID09IFJVTEVfRVZFTk9ERCkKLSAgICAgICAgICAgICAgICBDR0NvbnRleHRF
T0NsaXAoY2dDb250ZXh0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBDR0Nv
bnRleHRDbGlwKGNnQ29udGV4dCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgQ0dDb250ZXh0UmVm
IGNnQ29udGV4dCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGlmIChDR0NvbnRl
eHRJc1BhdGhFbXB0eShjZ0NvbnRleHQpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUT0RP
KGVzZWlkZWwpOiBXZSBkb24ndCBoYW5kbGUgaGV0ZXJvZ2Vub3VzIGNsaXAgcnVsZXMuIFdlIHdv
dWxkIGhhdmUKKyAgICAvLyB0byBkcmF3IHRoZSBmaWxsZWQgcGF0aCB0byBhIG1hc2ssIGFuZCB0
aGVuIGNsaXAgdG8gdGhhdCBtYXNrLgorICAgIGlmIChjbGlwUnVsZSA9PSBSVUxFX0VWRU5PREQp
CisgICAgICAgIENHQ29udGV4dEVPQ2xpcChjZ0NvbnRleHQpOworICAgIGVsc2UKKyAgICAgICAg
Q0dDb250ZXh0Q2xpcChjZ0NvbnRleHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23028</attachid>
            <date>2008-08-27 05:46:05 -0700</date>
            <delta_ts>2008-09-29 13:06:53 -0700</delta_ts>
            <desc>SVG Gradient fixes to pass all but one test</desc>
            <filename>SVG-Gradient-fixes-to-pass-all-but-one-test.patch</filename>
            <type>text/plain</type>
            <size>9460</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MTYzOWE1MDFkMzNlMWM0OWYzZjc2Yjg4NzZlN2I4YTFmODA4YmE3ZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRTaXplLmgKaW5kZXggNTI5ZTA1MS4uOTcwNjU3NCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvR3JhZGllbnRB
dHRyaWJ1dGVzLmggYi9XZWJDb3JlL3N2Zy9HcmFkaWVudEF0dHJpYnV0ZXMuaAppbmRleCAwNDI3
ZTRhLi44NTQ5NTQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9HcmFkaWVudEF0dHJpYnV0ZXMu
aAorKysgYi9XZWJDb3JlL3N2Zy9HcmFkaWVudEF0dHJpYnV0ZXMuaApAQCAtMSw3ICsxLDYgQEAK
IC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Cisg
ICAgQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAKICAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTU4LDggKzU3LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAKICAg
ICAgICAgdm9pZCBhZGRTdG9wc1RvR3JhZGllbnQoR3JhZGllbnQqIGdyYWRpZW50KQogICAgICAg
ICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgbV9zdG9wcy5zaXplKCk7
IHgrKykKLSAgICAgICAgICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKG1fc3RvcHNbeF0u
Zmlyc3QsIG1fc3RvcHNbeF0uc2Vjb25kKTsKKyAgICAgICAgICAgIC8vIFNwZWM6IGlmIGEgc3Rv
cCBvZmZzZXQgaXMgc21hbGxlciB0aGFuIGFueSBiZWZvcmUgaXQsIGl0IGlzCisgICAgICAgICAg
ICAvLyBzZXQgdG8gdGhlIGxhcmdlc3Qgb2YgdGhlIHByZXZpb3VzIG9mZnNldHMgKHBzZXJ2ZXJz
LWdyYWQtMTYtYikKKyAgICAgICAgICAgIGZsb2F0IHByZXZpb3VzT2Zmc2V0ID0gMC4wZjsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0b3BzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgZmxvYXQgb2Zmc2V0ID0gc3RkOjptaW4oc3RkOjptYXgocHJldmlv
dXNPZmZzZXQsIG1fc3RvcHNbaV0uZmlyc3QpLCAxLjBmKTsKKyAgICAgICAgICAgICAgICBwcmV2
aW91c09mZnNldCA9IG9mZnNldDsKKyAgICAgICAgICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JT
dG9wKG9mZnNldCwgbV9zdG9wc1tpXS5zZWNvbmQpOworICAgICAgICAgICAgfQogICAgICAgICB9
CiAKICAgICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvTGluZWFyR3JhZGllbnRB
dHRyaWJ1dGVzLmggYi9XZWJDb3JlL3N2Zy9MaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMuaAppbmRl
eCA0NTA1ODUwLi45YmRhNzQ0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9MaW5lYXJHcmFkaWVu
dEF0dHJpYnV0ZXMuaAorKysgYi9XZWJDb3JlL3N2Zy9MaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMu
aApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwOCBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3N2Zy9SYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMuaCBiL1dlYkNvcmUvc3ZnL1Jh
ZGlhbEdyYWRpZW50QXR0cmlidXRlcy5oCmluZGV4IDA2MzQyYWUuLjE3ZDMyOTQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvc3ZnL1JhZGlhbEdyYWRpZW50QXR0cmlidXRlcy5oCisrKyBiL1dlYkNvcmUv
c3ZnL1JhZGlhbEdyYWRpZW50QXR0cmlidXRlcy5oCkBAIC0xLDcgKzEsNiBAQAogLyoKICAgICBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
Ci0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtNjQsMTEgKzYzLDI2IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAKICAgICAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEdyYWRpZW50PiBjcmVhdGVHcmFkaWVudCgpCiAgICAgICAgIHsKKyAg
ICAgICAgICAgIGRvdWJsZSBhZGp1c3RlZEZvY3VzWCA9IG1fZng7CisgICAgICAgICAgICBkb3Vi
bGUgYWRqdXN0ZWRGb2N1c1kgPSBtX2Z5OworCisgICAgICAgICAgICBkb3VibGUgZmR4ID0gbV9m
eCAtIG1fY3g7CisgICAgICAgICAgICBkb3VibGUgZmR5ID0gbV9meSAtIG1fY3k7CisKKyAgICAg
ICAgICAgIC8vIFNwZWM6IElmIChmeCwgZnkpIGxpZXMgb3V0c2lkZSB0aGUgY2lyY2xlIGRlZmlu
ZWQgYnkgKGN4LCBjeSkgYW5kCisgICAgICAgICAgICAvLyByLCBzZXQgKGZ4LCBmeSkgdG8gdGhl
IHBvaW50IG9mIGludGVyc2VjdGlvbiBvZiB0aGUgbGluZSB0aHJvdWdoCisgICAgICAgICAgICAv
LyAoZngsIGZ5KSBhbmQgdGhlIGNpcmNsZS4KKyAgICAgICAgICAgIGlmIChzcXJ0KGZkeCAqIGZk
eCArIGZkeSAqIGZkeSkgPiBtX3IpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBh
dGFuMihtX2Z5ICogMTAwLjAsIG1fZnggKiAxMDAuMCk7CisgICAgICAgICAgICAgICAgYWRqdXN0
ZWRGb2N1c1ggPSBjb3MoYW5nbGUpICogbV9yOworICAgICAgICAgICAgICAgIGFkanVzdGVkRm9j
dXNZID0gc2luKGFuZ2xlKSAqIG1fcjsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgUmVm
UHRyPEdyYWRpZW50PiBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoCisgICAgICAgICAgICAg
ICAgRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKGFkanVzdGVkRm9jdXNYLCBhZGp1c3RlZEZv
Y3VzWSksCisgICAgICAgICAgICAgICAgMC5mLCAvLyBTVkcgZG9lcyBub3Qgc3VwcG9ydCBhICJm
b2N1cyByYWRpdXMiCiAgICAgICAgICAgICAgICAgRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9u
KG1fY3gsIG1fY3kpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV9y
KSwKLSAgICAgICAgICAgICAgICBGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24obV9meCwgbV9m
eSksCi0gICAgICAgICAgICAgICAgMC5mKTsKKyAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KG1fcikpOwogCiAgICAgICAgICAgICBhZGRTdG9wc1RvR3JhZGllbnQoZ3JhZGll
bnQuZ2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuIGdyYWRpZW50LnJlbGVhc2UoKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAgYi9XZWJDb3Jl
L3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCmluZGV4IDZiMGIxMzcuLmMxNmNiNWIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAKKysr
IGIvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcApAQCAtMSw4ICsxLDcg
QEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotCi0gICAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisgICAgQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9T
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCmluZGV4IDc4ZDllNGIuLjhhNWI4NjYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKKysrIGIvV2Vi
Q29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcApAQCAtMSw4ICsxLDcgQEAKIC8q
CiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIEtERSBwcm9qZWN0CisgICAgQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE2OSw2ICsxNjgsNyBA
QCBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Ojpjb2xs
ZWN0R3JhZGllbnRQcm9wZXJ0aWVzKCkgYwogCiAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7CiB9CisK
IH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9jZy9DZ1N1cHBvcnQuY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvQ2dTdXBwb3J0
LmNwcAppbmRleCA1NmU1MTk5Li5lMTRjZDkxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9jZy9DZ1N1cHBvcnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3Vw
cG9ydC5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgICAgIDIwMDYg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqICAgICAgICAgICAgICAgMjAwOCBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9DZ1N1cHBvcnQuaCBiL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5oCmluZGV4IDY5MTBiOWEuLmVhMTBiNzggMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5oCisrKyBiL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9jZy9TVkdQYWludFNlcnZlckNnLmNwcCBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Nn
L1NWR1BhaW50U2VydmVyQ2cuY3BwCmluZGV4IDgxMGI0NjMuLmY0MjU0ZmQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyQ2cuY3BwCisrKyBiL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyQ2cuY3BwCkBAIC0xLDcgKzEsNiBAQAog
LyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtk
ZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRT
ZXJ2ZXJHcmFkaWVudENnLmNwcCBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2Vy
dmVyR3JhZGllbnRDZy5jcHAKaW5kZXggZjZlYjdkOS4uMzM2MDJmMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcAorKysgYi9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwCkBAIC0x
LDcgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgS0RFIHByb2plY3QKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTQxLDExICsxNDAsNiBA
QCB2b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnRlYXJkb3duKEdyYXBoaWNzQ29udGV4dCom
IGNvbnRleHQsIGNvbnN0IFJlbmRlck9iagogCiB2b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6
OnJlbmRlclBhdGgoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0
KiBwYXRoLCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKIHsKLSAgICBpZiAoKHR5cGUg
JiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHBhdGgtPnN0eWxlKCktPnN2Z1N0eWxlKCktPmhh
c0ZpbGwoKSkKLSAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKTsKLSAgICBlbHNlCi0gICAgICAg
IGNvbnRleHQtPnN0cm9rZVBhdGgoKTsKLQogICAgIC8vIENvbXB1dGUgZGVzdGluYXRpb24gb2Jq
ZWN0IGJvdW5kaW5nIGJveAogICAgIEZsb2F0UmVjdCBvYmplY3RCQm94OwogICAgIGlmIChib3Vu
ZGluZ0JveE1vZGUoKSkgewpAQCAtMTU2LDExICsxNTAsMTggQEAgdm9pZCBTVkdQYWludFNlcnZl
ckdyYWRpZW50OjpyZW5kZXJQYXRoKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJl
bmRlck8KIAogICAgIGhhbmRsZUJvdW5kaW5nQm94TW9kZUFuZEdyYWRpZW50VHJhbnNmb3JtYXRp
b24oY29udGV4dCwgYm91bmRpbmdCb3hNb2RlKCksCiAgICAgICAgIGdyYWRpZW50VHJhbnNmb3Jt
KCksIG9iamVjdEJCb3gpOworCisgICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBl
KSAmJiBwYXRoLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpCisgICAgICAgIGNvbnRl
eHQtPmZpbGxQYXRoKCk7CisgICAgZWxzZQorICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCk7
CiB9CiAKIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0
KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlw
ZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAogewogICAgIG1fb3duZXJFbGVtZW50
LT5idWlsZEdyYWRpZW50KCk7CisgICAgaWYgKCFtX2dyYWRpZW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CiAgICAg
Y29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7CkBAIC0x
ODEsMTEgKzE4MiwxNSBAQCBib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBo
aWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdAogICAgICAgICBjb250ZXh0
LT5zZXRUZXh0RHJhd2luZ01vZGUoaXNGaWxsZWQgPyBjVGV4dEZpbGwgOiBjVGV4dFN0cm9rZSk7
CiAgICAgfQogCi0gICAgaWYgKGlzRmlsbGVkKQorICAgIGlmIChpc0ZpbGxlZCkgewogICAgICAg
ICBjb250ZXh0LT5zZXRGaWxsUnVsZShzdmdTdHlsZS0+ZmlsbFJ1bGUoKSk7CisgICAgICAgIGNv
bnRleHQtPnNldEZpbGxHcmFkaWVudChtX2dyYWRpZW50KTsKKyAgICB9CiAKLSAgICBpZiAoaXNT
dHJva2VkKQorICAgIGlmIChpc1N0cm9rZWQpIHsKICAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRv
Q29udGV4dChjb250ZXh0LCBzdHlsZSwgb2JqZWN0KTsKKyAgICAgICAgY29udGV4dC0+c2V0U3Ry
b2tlR3JhZGllbnQobV9ncmFkaWVudCk7CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23915</attachid>
            <date>2008-09-29 13:06:53 -0700</date>
            <delta_ts>2008-09-29 13:06:53 -0700</delta_ts>
            <desc>SVGPaintServer cleanUp gradient</desc>
            <filename>SVGPaintServer-cleanUp-gradient-new.patch</filename>
            <type>text/plain</type>
            <size>32336</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAJKHJldmlzaW9uIDM3
MDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwNSBOb2tpYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzYsNiArMzcsMTIgQEAgRmxvYXRTaXplOjpGbG9hdFNpemUoY29uc3QgSW50
U2l6ZSYgc2l6ZQogewogfQogCitGbG9hdFNpemUgc2hydW5rVG8oY29uc3QgRmxvYXRTaXplJiBv
dGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gRmxvYXRTaXplKG1fd2lkdGggPCBvdGhlci5tX3dp
ZHRoID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCisgICAgICAgIG1faGVpZ2h0IDwgb3RoZXIu
bV9oZWlnaHQgPyBtX2hlaWdodCA6IG90aGVyLm1faGVpZ2h0KTsKK30KKwogRmxvYXRTaXplIEZs
b2F0U2l6ZTo6bmFycm93UHJlY2lzaW9uKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCkKIHsK
ICAgICByZXR1cm4gRmxvYXRTaXplKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQod2lkdGgpLCBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KGhlaWdodCkpOwpJbmRleDogV2ViQ29yZS9zdmcvR3JhZGllbnRB
dHRyaWJ1dGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvR3JhZGllbnRBdHRyaWJ1dGVz
LmgJKHJldmlzaW9uIDM3MDY0KQorKysgV2ViQ29yZS9zdmcvR3JhZGllbnRBdHRyaWJ1dGVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAw
NiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLQotICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorICAgIENvcHlyaWdodCAoQykgMjAwOCBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiw3ICsy
NSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgc3RydWN0IEdyYWRpZW50QXR0cmli
dXRlcyB7CisgICAgY2xhc3MgR3JhZGllbnRBdHRyaWJ1dGVzIHsKKyAgICBwdWJsaWM6CiAgICAg
ICAgIEdyYWRpZW50QXR0cmlidXRlcygpCiAgICAgICAgICAgICA6IG1fc3ByZWFkTWV0aG9kKFNQ
UkVBRE1FVEhPRF9QQUQpCiAgICAgICAgICAgICAsIG1fYm91bmRpbmdCb3hNb2RlKHRydWUpCkBA
IC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgICAgICAsIG1fc3RvcHNT
ZXQoZmFsc2UpCiAgICAgICAgIHsKICAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIH5HcmFkaWVu
dEF0dHJpYnV0ZXMoKSB7fQogCiAgICAgICAgIFNWR0dyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVh
ZE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ByZWFkTWV0aG9kOyB9CiAgICAgICAgIGJvb2wg
Ym91bmRpbmdCb3hNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ0JveE1vZGU7IH0KQEAg
LTUyLDEyICs1MywyNiBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICBib29sIGhhc0dyYWRp
ZW50VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9ncmFkaWVudFRyYW5zZm9ybVNldDsgfQog
ICAgICAgICBib29sIGhhc1N0b3BzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wc1NldDsgfQogCisg
ICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlR3JhZGllbnQoKSA9IDA7
CisKKyAgICAgICAgdm9pZCBhZGRTdG9wc1RvR3JhZGllbnQoR3JhZGllbnQqIGdyYWRpZW50KQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBTcGVjOiBpZiBhIHN0b3Agb2Zmc2V0IGlzIHNtYWxs
ZXIgdGhhbiBhbnkgYmVmb3JlIGl0LCBpdCBpcworICAgICAgICAgICAgLy8gc2V0IHRvIHRoZSBs
YXJnZXN0IG9mIHRoZSBwcmV2aW91cyBvZmZzZXRzIChwc2VydmVycy1ncmFkLTE2LWIpCisgICAg
ICAgICAgICBmbG9hdCBwcmV2aW91c09mZnNldCA9IDAuMGY7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAg
IGZsb2F0IG9mZnNldCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHByZXZpb3VzT2Zmc2V0LCBtX3N0b3Bz
W2ldLmZpcnN0KSwgMS4wZik7CisgICAgICAgICAgICAgICAgcHJldmlvdXNPZmZzZXQgPSBvZmZz
ZXQ7CisgICAgICAgICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcChvZmZzZXQsIG1fc3Rv
cHNbaV0uc2Vjb25kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgLy8gUHJvcGVydGllcwogICAgICAgICBTVkdHcmFkaWVudFNwcmVhZE1ldGhvZCBt
X3NwcmVhZE1ldGhvZDsKLSAgICAgICAgYm9vbCBtX2JvdW5kaW5nQm94TW9kZTsKICAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIG1fZ3JhZGllbnRUcmFuc2Zvcm07CiAgICAgICAgIFZlY3RvcjxTVkdH
cmFkaWVudFN0b3A+IG1fc3RvcHM7CisgICAgICAgIGJvb2wgbV9ib3VuZGluZ0JveE1vZGU7CiAK
ICAgICAgICAgLy8gUHJvcGVydHkgc3RhdGVzCiAgICAgICAgIGJvb2wgbV9zcHJlYWRNZXRob2RT
ZXQgOiAxOwpJbmRleDogV2ViQ29yZS9zdmcvTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmgJKHJldmlz
aW9uIDM3MDY0KQorKysgV2ViQ29yZS9zdmcvTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNyArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNiBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorICAgIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw3ICsyNyw4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgc3RydWN0IExpbmVhckdyYWRpZW50QXR0
cmlidXRlcyA6IEdyYWRpZW50QXR0cmlidXRlcyB7CisgICAgY2xhc3MgTGluZWFyR3JhZGllbnRB
dHRyaWJ1dGVzIDogcHVibGljIEdyYWRpZW50QXR0cmlidXRlcyB7CisgICAgcHVibGljOgogICAg
ICAgICBMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMoKQogICAgICAgICAgICAgOiBtX3gxKDAuMCkK
ICAgICAgICAgICAgICwgbV95MSgwLjApCkBAIC01Niw2ICs1NiwxNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZQogICAgICAgICBib29sIGhhc1gyKCkgY29uc3QgeyByZXR1cm4gbV94MlNldDsgfQogICAg
ICAgICBib29sIGhhc1kyKCkgY29uc3QgeyByZXR1cm4gbV95MlNldDsgfQogCisgICAgICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlR3JhZGllbnQoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZSgK
KyAgICAgICAgICAgICAgICBGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24obV94MSwgbV95MSks
CisgICAgICAgICAgICAgICAgRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKG1feDIsIG1feTIp
KTsKKworICAgICAgICAgICAgYWRkU3RvcHNUb0dyYWRpZW50KGdyYWRpZW50LmdldCgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBncmFkaWVudC5yZWxlYXNlKCk7CisgICAgICAgIH0KKwogICAgIHBy
aXZhdGU6CiAgICAgICAgIC8vIFByb3BlcnRpZXMKICAgICAgICAgZG91YmxlIG1feDE7CkluZGV4
OiBXZWJDb3JlL3N2Zy9SYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9SYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMuaAkocmV2aXNpb24gMzcwNjQpCisr
KyBXZWJDb3JlL3N2Zy9SYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw3ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CisgICAgQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDcgKzI3LDggQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUKIHsKLSAgICBzdHJ1Y3QgUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzIDogR3Jh
ZGllbnRBdHRyaWJ1dGVzIHsKKyAgICBjbGFzcyBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMgOiBw
dWJsaWMgR3JhZGllbnRBdHRyaWJ1dGVzIHsKKyAgICBwdWJsaWM6CiAgICAgICAgIFJhZGlhbEdy
YWRpZW50QXR0cmlidXRlcygpCiAgICAgICAgICAgICA6IG1fY3goMC41KQogICAgICAgICAgICAg
LCBtX2N5KDAuNSkKQEAgLTYxLDYgKzYxLDMzIEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAg
IGJvb2wgaGFzRngoKSBjb25zdCB7IHJldHVybiBtX2Z4U2V0OyB9CiAgICAgICAgIGJvb2wgaGFz
RnkoKSBjb25zdCB7IHJldHVybiBtX2Z5U2V0OyB9CiAKKyAgICAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEdyYWRpZW50PiBjcmVhdGVHcmFkaWVudCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRv
dWJsZSBhZGp1c3RlZEZvY3VzWCA9IG1fZng7CisgICAgICAgICAgICBkb3VibGUgYWRqdXN0ZWRG
b2N1c1kgPSBtX2Z5OworCisgICAgICAgICAgICBkb3VibGUgZmR4ID0gbV9meCAtIG1fY3g7Cisg
ICAgICAgICAgICBkb3VibGUgZmR5ID0gbV9meSAtIG1fY3k7CisKKyAgICAgICAgICAgIC8vIFNw
ZWM6IElmIChmeCwgZnkpIGxpZXMgb3V0c2lkZSB0aGUgY2lyY2xlIGRlZmluZWQgYnkgKGN4LCBj
eSkgYW5kCisgICAgICAgICAgICAvLyByLCBzZXQgKGZ4LCBmeSkgdG8gdGhlIHBvaW50IG9mIGlu
dGVyc2VjdGlvbiBvZiB0aGUgbGluZSB0aHJvdWdoCisgICAgICAgICAgICAvLyAoZngsIGZ5KSBh
bmQgdGhlIGNpcmNsZS4KKyAgICAgICAgICAgIGlmIChzcXJ0KGZkeCAqIGZkeCArIGZkeSAqIGZk
eSkgPiBtX3IpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBhdGFuMihtX2Z5ICog
MTAwLjAsIG1fZnggKiAxMDAuMCk7CisgICAgICAgICAgICAgICAgYWRqdXN0ZWRGb2N1c1ggPSBj
b3MoYW5nbGUpICogbV9yOworICAgICAgICAgICAgICAgIGFkanVzdGVkRm9jdXNZID0gc2luKGFu
Z2xlKSAqIG1fcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVmUHRyPEdyYWRpZW50
PiBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoCisgICAgICAgICAgICAgICAgRmxvYXRQb2lu
dDo6bmFycm93UHJlY2lzaW9uKGFkanVzdGVkRm9jdXNYLCBhZGp1c3RlZEZvY3VzWSksCisgICAg
ICAgICAgICAgICAgMC5mLCAvLyBTVkcgZG9lcyBub3Qgc3VwcG9ydCBhICJmb2N1cyByYWRpdXMi
CisgICAgICAgICAgICAgICAgRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKG1fY3gsIG1fY3kp
LAorICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV9yKSk7CisKKyAgICAg
ICAgICAgIGFkZFN0b3BzVG9HcmFkaWVudChncmFkaWVudC5nZXQoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gZ3JhZGllbnQucmVsZWFzZSgpOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAg
ICAgICAvLyBQcm9wZXJ0aWVzCiAgICAgICAgIGRvdWJsZSBtX2N4OwpJbmRleDogV2ViQ29yZS9z
dmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdH
cmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNzA2NCkKKysrIFdlYkNvcmUvc3ZnL1NWR0dy
YWRpZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksNyBAQCBWZWN0
b3I8U1ZHR3JhZGllbnRTdG9wPiBTVkdHcmFkaWVudEVsZW1lCiAgICAgICAgICAgICAgICAgc3Rv
cFN0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgc3RvcHMuYXBwZW5kKG1ha2VHcmFkaWVudFN0b3Aoc3RvcE9mZnNldCwg
bWFrZVJHQkEoY29sb3IucmVkKCksIGNvbG9yLmdyZWVuKCksIGNvbG9yLmJsdWUoKSwgaW50KG9w
YWNpdHkgKiAyNTUuKSkpKTsKKyAgICAgICAgICAgIHN0b3BzLmFwcGVuZChtYWtlR3JhZGllbnRT
dG9wKHN0b3BPZmZzZXQsIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3IucmdiKCksIG9wYWNp
dHkpKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0xpbmVhckdy
YWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMzcwNjQpCisrKyBXZWJDb3JlL3N2Zy9TVkdMaW5l
YXJHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsNyBAQAogLyoK
ICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgS0RFIHByb2plY3QKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtODcsMTIgKzg2LDE1IEBA
IHZvaWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWQKIAogICAgIFJlZlB0cjxT
VkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50PiBsaW5lYXJHcmFkaWVudCA9IFdURjo6c3RhdGlj
X3BvaW50ZXJfY2FzdDxTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50PihtX3Jlc291cmNlKTsK
IAotICAgIGxpbmVhckdyYWRpZW50LT5zZXRHcmFkaWVudFN0b3BzKGF0dHJpYnV0ZXMuc3RvcHMo
KSk7CisgICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRpZW50KGF0dHJpYnV0ZXMuY3JlYXRlR3Jh
ZGllbnQoKSk7CisKKyAgICAvLyBUaGlzIGNvZGUgc2hvdWxkIGdvIGF3YXkuICBQYWludFNlcnZl
cnMgc2hvdWxkIGdvIGF3YXkgdG9vLgorICAgIC8vIE9ubHkgdGhpcyBjb2RlIHNob3VsZCBjYXJl
IGFib3V0IGJvdW5kaW5nIGJveGVzCiAgICAgbGluZWFyR3JhZGllbnQtPnNldEJvdW5kaW5nQm94
TW9kZShhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKTsKKworICAgIC8vIFRoZXNlIHNob3Vs
ZCBwb3NzaWJseSBiZSBzdXBwb3J0ZWQgb24gR3JhZGllbnQKICAgICBsaW5lYXJHcmFkaWVudC0+
c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSk7CiAgICAg
bGluZWFyR3JhZGllbnQtPnNldEdyYWRpZW50VHJhbnNmb3JtKGF0dHJpYnV0ZXMuZ3JhZGllbnRU
cmFuc2Zvcm0oKSk7Ci0gICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRpZW50U3RhcnQoRmxvYXRQ
b2ludDo6bmFycm93UHJlY2lzaW9uKGF0dHJpYnV0ZXMueDEoKSwgYXR0cmlidXRlcy55MSgpKSk7
Ci0gICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRpZW50RW5kKEZsb2F0UG9pbnQ6Om5hcnJvd1By
ZWNpc2lvbihhdHRyaWJ1dGVzLngyKCksIGF0dHJpYnV0ZXMueTIoKSkpOwogfQogCiBMaW5lYXJH
cmFkaWVudEF0dHJpYnV0ZXMgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojpjb2xsZWN0R3JhZGll
bnRQcm9wZXJ0aWVzKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRF
bGVtZW50LmNwcAkocmV2aXNpb24gMzcwNjQpCisrKyBXZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFk
aWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsNyBAQAogLyoKICAgICBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgS0RFIHByb2plY3QKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtOTQsMTQgKzkzLDExIEBAIHZvaWQg
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWQKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgUmVmUHRyPFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ+IHJhZGlhbEdyYWRpZW50ID0g
V1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ+KG1f
cmVzb3VyY2UpOworICAgIHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudChhdHRyaWJ1dGVzLmNy
ZWF0ZUdyYWRpZW50KCkpOwogCi0gICAgcmFkaWFsR3JhZGllbnQtPnNldEdyYWRpZW50U3RvcHMo
YXR0cmlidXRlcy5zdG9wcygpKTsKICAgICByYWRpYWxHcmFkaWVudC0+c2V0Qm91bmRpbmdCb3hN
b2RlKGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkpOwogICAgIHJhZGlhbEdyYWRpZW50LT5z
ZXRHcmFkaWVudFNwcmVhZE1ldGhvZChhdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpKTsgCiAgICAg
cmFkaWFsR3JhZGllbnQtPnNldEdyYWRpZW50VHJhbnNmb3JtKGF0dHJpYnV0ZXMuZ3JhZGllbnRU
cmFuc2Zvcm0oKSk7Ci0gICAgcmFkaWFsR3JhZGllbnQtPnNldEdyYWRpZW50Q2VudGVyKEZsb2F0
UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihhdHRyaWJ1dGVzLmN4KCksIGF0dHJpYnV0ZXMuY3koKSkp
OwotICAgIHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudEZvY2FsKEZsb2F0UG9pbnQ6Om5hcnJv
d1ByZWNpc2lvbihhdHRyaWJ1dGVzLmZ4KCksIGF0dHJpYnV0ZXMuZnkoKSkpOwotICAgIHJhZGlh
bEdyYWRpZW50LT5zZXRHcmFkaWVudFJhZGl1cyhuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGF0dHJp
YnV0ZXMucigpKSk7CiB9CiAKIFJhZGlhbEdyYWRpZW50QXR0cmlidXRlcyBTVkdSYWRpYWxHcmFk
aWVudEVsZW1lbnQ6OmNvbGxlY3RHcmFkaWVudFByb3BlcnRpZXMoKSBjb25zdApJbmRleDogV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5oCShyZXZpc2lvbiAzNzA2NCkKKysrIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDkg
Kzc5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByb3RlY3RlZDoKICNpZiBQTEFURk9S
TShDRykKICAgICAgICAgdm9pZCBzdHJva2VQYXRoKENHQ29udGV4dFJlZiwgY29uc3QgUmVuZGVy
T2JqZWN0KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgY2xpcFRvU3Ryb2tlUGF0aChDR0NvbnRleHRS
ZWYsIGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwogICAgICAgICB2b2lkIGZpbGxQYXRoKENH
Q29udGV4dFJlZiwgY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgY2xp
cFRvRmlsbFBhdGgoQ0dDb250ZXh0UmVmLCBjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKICNl
bmRpZgogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFp
bnRTZXJ2ZXJHcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAJKHJldmlzaW9uIDM3MDY0KQorKysgV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVy
R3JhZGllbnQuaCIKIAorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiU1ZHR3Jh
ZGllbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogCkBAIC02
NSw4ICs2Niw2IEBAIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OlNWR1BhaW50U2VydmVyR3IKICAg
ICAsIG1fb3duZXJFbGVtZW50KG93bmVyKQogCiAjaWYgUExBVEZPUk0oQ0cpCi0gICAgLCBtX3N0
b3BzQ2FjaGUoMCkKLSAgICAsIG1fc2hhZGluZ0NhY2hlKDApCiAgICAgLCBtX3NhdmVkQ29udGV4
dCgwKQogICAgICwgbV9pbWFnZUJ1ZmZlcigwKQogI2VuZGlmCkBAIC03NiwxOSArNzUsMTYgQEAg
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6U1ZHUGFpbnRTZXJ2ZXJHcgogCiBTVkdQYWludFNlcnZl
ckdyYWRpZW50Ojp+U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudCgpCiB7Ci0jaWYgUExBVEZPUk0oQ0cp
Ci0gICAgQ0dTaGFkaW5nUmVsZWFzZShtX3NoYWRpbmdDYWNoZSk7Ci0jZW5kaWYKIH0KIAotY29u
c3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmdyYWRp
ZW50U3RvcHMoKSBjb25zdAorR3JhZGllbnQqIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmdyYWRp
ZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zdG9wczsKKyAgICByZXR1cm4gbV9ncmFkaWVu
dC5nZXQoKTsKIH0KIAotdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVudFN0
b3BzKGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+JiBzdG9wcykKK3ZvaWQgU1ZHUGFpbnRT
ZXJ2ZXJHcmFkaWVudDo6c2V0R3JhZGllbnQoUGFzc1JlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQp
CiB7Ci0gICAgbV9zdG9wcyA9IHN0b3BzOworICAgIG1fZ3JhZGllbnQgPSBncmFkaWVudDsKIH0K
IAogU1ZHR3JhZGllbnRTcHJlYWRNZXRob2QgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c3ByZWFk
TWV0aG9kKCkgY29uc3QKQEAgLTEyNyw3ICsxMjMsNyBAQCBUZXh0U3RyZWFtJiBTVkdQYWludFNl
cnZlckdyYWRpZW50OjpleHRlCiAgICAgbV9vd25lckVsZW1lbnQtPmJ1aWxkR3JhZGllbnQoKTsK
IAogICAgIC8vIGFic3RyYWN0LCBkb24ndCBzdHJlYW0gdHlwZQotICAgIHRzICA8PCAiW3N0b3Bz
PSIgPDwgZ3JhZGllbnRTdG9wcygpIDw8ICJdIjsKKyAgICAvL3RzICA8PCAiW3N0b3BzPSIgPDwg
Z3JhZGllbnRTdG9wcygpIDw8ICJdIjsKICAgICBpZiAoc3ByZWFkTWV0aG9kKCkgIT0gU1BSRUFE
TUVUSE9EX1BBRCkKICAgICAgICAgdHMgPDwgIlttZXRob2Q9IiA8PCBzcHJlYWRNZXRob2QoKSA8
PCAiXSI7CiAgICAgaWYgKCFib3VuZGluZ0JveE1vZGUoKSkKSW5kZXg6IFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmgJKHJldmlzaW9uIDM3MDY0KQorKysg
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiU1ZHUGFp
bnRTZXJ2ZXIuaCIKIAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC01NCwxOSArNTUs
MTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTUFJFQURNRVRIT0RfUkVQRUFUID0g
MwogICAgIH07CiAKLSNpZiBQTEFURk9STShDRykKLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxDR0Zs
b2F0LCBDb2xvcj4gU1ZHR3JhZGllbnRTdG9wOwotI2Vsc2UKICAgICB0eXBlZGVmIHN0ZDo6cGFp
cjxmbG9hdCwgQ29sb3I+IFNWR0dyYWRpZW50U3RvcDsKLSNlbmRpZgotCiAKICAgICBjbGFzcyBT
VkdQYWludFNlcnZlckdyYWRpZW50IDogcHVibGljIFNWR1BhaW50U2VydmVyIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIHZpcnR1YWwgflNWR1BhaW50U2VydmVyR3JhZGllbnQoKTsKIAotICAgICAg
ICBjb25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYgZ3JhZGllbnRTdG9wcygpIGNvbnN0Owot
ICAgICAgICB2b2lkIHNldEdyYWRpZW50U3RvcHMoY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50U3Rv
cD4mKTsKKyAgICAgICAgdm9pZCBzZXRHcmFkaWVudChQYXNzUmVmUHRyPEdyYWRpZW50Pik7Cisg
ICAgICAgIEdyYWRpZW50KiBncmFkaWVudCgpIGNvbnN0OwogCiAgICAgICAgIFNWR0dyYWRpZW50
U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEdyYWRp
ZW50U3ByZWFkTWV0aG9kKGNvbnN0IFNWR0dyYWRpZW50U3ByZWFkTWV0aG9kJik7CkBAIC04Nywx
MSArODMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB0ZWFy
ZG93bihHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJn
ZXRUeXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lk
IHJlbmRlclBhdGgoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1Bh
aW50VGFyZ2V0VHlwZSkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUo
KTsKLQogICAgICAgICAvLyBIZWxwZXJzCi0gICAgICAgIHZvaWQgdXBkYXRlUXVhcnR6R3JhZGll
bnRTdG9wc0NhY2hlKGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+Jik7Ci0gICAgICAgIHZv
aWQgdXBkYXRlUXVhcnR6R3JhZGllbnRDYWNoZShjb25zdCBTVkdQYWludFNlcnZlckdyYWRpZW50
Kik7CiAgICAgICAgIHZvaWQgaGFuZGxlQm91bmRpbmdCb3hNb2RlQW5kR3JhZGllbnRUcmFuc2Zv
cm1hdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QpIGNv
bnN0OwogI2VuZGlmCiAKQEAgLTEwNSw3ICs5Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudChjb25zdCBTVkdHcmFkaWVudEVsZW1lbnQqIG93
bmVyKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgVmVjdG9yPFNWR0dyYWRpZW50
U3RvcD4gbV9zdG9wczsKKyAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBtX2dyYWRpZW50OwogICAg
ICAgICBTVkdHcmFkaWVudFNwcmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZDsKICAgICAgICAgYm9v
bCBtX2JvdW5kaW5nQm94TW9kZTsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1fZ3JhZGllbnRU
cmFuc2Zvcm07CkBAIC0xMTMsMjcgKzEwNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lm
IFBMQVRGT1JNKENHKQogICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBzdHJ1Y3QgewotICAg
ICAgICAgICAgQ0dGbG9hdCBjb2xvckFycmF5WzRdOwotICAgICAgICAgICAgQ0dGbG9hdCBvZmZz
ZXQ7Ci0gICAgICAgICAgICBDR0Zsb2F0IHByZXZpb3VzRGVsdGFJbnZlcnNlOwotICAgICAgICB9
IFF1YXJ0ekdyYWRpZW50U3RvcDsKLSAgICAgICAgCi0gICAgICAgIHN0cnVjdCBTaGFyZWRTdG9w
Q2FjaGUgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRTdG9wQ2FjaGU+IHsKLSAgICAgICAgcHVi
bGljOgotICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkU3RvcENhY2hlPiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkU3RvcENhY2hlKTsgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBWZWN0b3I8UXVhcnR6R3JhZGllbnRTdG9wPiBtX3N0b3BzOwotICAg
ICAgICAKLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIFNoYXJlZFN0b3BDYWNoZSgpIHsg
fQotICAgICAgICB9OwotCi0gICAgICAgIFJlZlB0cjxTaGFyZWRTdG9wQ2FjaGU+IG1fc3RvcHND
YWNoZTsKLQotICAgICAgICBDR1NoYWRpbmdSZWYgbV9zaGFkaW5nQ2FjaGU7CiAgICAgICAgIG11
dGFibGUgR3JhcGhpY3NDb250ZXh0KiBtX3NhdmVkQ29udGV4dDsKLSAgICAgICAgbXV0YWJsZSBJ
bWFnZUJ1ZmZlciogbV9pbWFnZUJ1ZmZlcjsKKyAgICAgICAgbXV0YWJsZSBPd25QdHI8SW1hZ2VC
dWZmZXI+IG1faW1hZ2VCdWZmZXI7CiAjZW5kaWYKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckNnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckNnLmNwcAkocmV2aXNpb24gMzcwNjQpCisr
KyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckNnLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIEtERSBwcm9qZWN0CisgICAgQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTYwLDEyICs1OSw2IEBAIHZvaWQg
U1ZHUGFpbnRTZXJ2ZXI6OnN0cm9rZVBhdGgoQ0dDb250ZXgKICAgICBDR0NvbnRleHRTdHJva2VQ
YXRoKGNvbnRleHQpOwogfQogCi12b2lkIFNWR1BhaW50U2VydmVyOjpjbGlwVG9TdHJva2VQYXRo
KENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdAotewotICAg
IENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwotICAgIENHQ29u
dGV4dENsaXAoY29udGV4dCk7Ci19Ci0KIHZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OmZpbGxQYXRoKENH
Q29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHBhdGgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFwYXRoIHx8IHBhdGgtPnN0eWxlKCktPnN2Z1N0eWxlKCktPmZpbGxSdWxlKCkgPT0g
UlVMRV9FVkVOT0REKQpAQCAtNzQsMTQgKzY3LDYgQEAgdm9pZCBTVkdQYWludFNlcnZlcjo6Zmls
bFBhdGgoQ0dDb250ZXh0UgogICAgICAgICBDR0NvbnRleHRGaWxsUGF0aChjb250ZXh0KTsKIH0K
IAotdm9pZCBTVkdQYWludFNlcnZlcjo6Y2xpcFRvRmlsbFBhdGgoQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIGNvbnN0IFJlbmRlck9iamVjdCogcGF0aCkgY29uc3QKLXsKLSAgICBpZiAoIXBhdGggfHwg
cGF0aC0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpCi0g
ICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKLSAgICBlbHNlCi0gICAgICAgIENHQ29u
dGV4dENsaXAoY29udGV4dCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckdyYWRpZW50Q2cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVy
R3JhZGllbnRDZy5jcHAJKHJldmlzaW9uIDM3MDY0KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
Y2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsx
LDcgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIEtERSBwcm9qZWN0CisgICAgQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA4IERpcmsgU2NodWx6ZSA8dmJzODVA
Z214LmRlPgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNCwxOTcgKzM0LDg5IEBACiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHZvaWQgcmVsZWFzZUNhY2hlZFN0b3BzKHZvaWQqIGlu
Zm8pCi17Ci0gICAgc3RhdGljX2Nhc3Q8U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6U2hhcmVkU3Rv
cENhY2hlKj4oaW5mbyktPmRlcmVmKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNnR3JhZGllbnRDYWxs
YmFjayh2b2lkKiBpbmZvLCBjb25zdCBDR0Zsb2F0KiBpblZhbHVlcywgQ0dGbG9hdCogb3V0Q29s
b3IpCi17Ci0gICAgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6U2hhcmVkU3RvcENhY2hlKiBzdG9w
c0NhY2hlID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6U2hhcmVkU3RvcENh
Y2hlKj4oaW5mbyk7Ci0gICAgCi0gICAgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6UXVhcnR6R3Jh
ZGllbnRTdG9wKiBzdG9wcyA9IHN0b3BzQ2FjaGUtPm1fc3RvcHMuZGF0YSgpOwotICAgICAgICAK
LSAgICBpbnQgc3RvcHNDb3VudCA9IHN0b3BzQ2FjaGUtPm1fc3RvcHMuc2l6ZSgpOwotCi0gICAg
Q0dGbG9hdCBpblZhbHVlID0gaW5WYWx1ZXNbMF07Ci0KLSAgICBpZiAoIXN0b3BzQ291bnQpIHsK
LSAgICAgICAgb3V0Q29sb3JbMF0gPSAwOwotICAgICAgICBvdXRDb2xvclsxXSA9IDA7Ci0gICAg
ICAgIG91dENvbG9yWzJdID0gMDsKLSAgICAgICAgb3V0Q29sb3JbM10gPSAwOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfSBlbHNlIGlmIChzdG9wc0NvdW50ID09IDEpIHsKLSAgICAgICAgbWVtY3B5
KG91dENvbG9yLCBzdG9wc1swXS5jb2xvckFycmF5LCA0ICogc2l6ZW9mKENHRmxvYXQpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghKGluVmFsdWUgPiBzdG9wc1swXS5vZmZz
ZXQpKQotICAgICAgICBtZW1jcHkob3V0Q29sb3IsIHN0b3BzWzBdLmNvbG9yQXJyYXksIDQgKiBz
aXplb2YoQ0dGbG9hdCkpOwotICAgIGVsc2UgaWYgKCEoaW5WYWx1ZSA8IHN0b3BzW3N0b3BzQ291
bnQgLSAxXS5vZmZzZXQpKQotICAgICAgICBtZW1jcHkob3V0Q29sb3IsIHN0b3BzW3N0b3BzQ291
bnQgLSAxXS5jb2xvckFycmF5LCA0ICogc2l6ZW9mKENHRmxvYXQpKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgaW50IG5leHRTdG9wSW5kZXggPSAwOwotICAgICAgICB3aGlsZSAoKG5leHRTdG9wSW5k
ZXggPCBzdG9wc0NvdW50KSAmJiAoc3RvcHNbbmV4dFN0b3BJbmRleF0ub2Zmc2V0IDwgaW5WYWx1
ZSkpCi0gICAgICAgICAgICBuZXh0U3RvcEluZGV4Kys7Ci0KLSAgICAgICAgQ0dGbG9hdCogbmV4
dENvbG9yQXJyYXkgPSBzdG9wc1tuZXh0U3RvcEluZGV4XS5jb2xvckFycmF5OwotICAgICAgICBD
R0Zsb2F0KiBwcmV2aW91c0NvbG9yQXJyYXkgPSBzdG9wc1tuZXh0U3RvcEluZGV4IC0gMV0uY29s
b3JBcnJheTsKLSAgICAgICAgQ0dGbG9hdCBkaWZmRnJvbVByZXZpb3VzID0gaW5WYWx1ZSAtIHN0
b3BzW25leHRTdG9wSW5kZXggLSAxXS5vZmZzZXQ7Ci0gICAgICAgIENHRmxvYXQgcGVyY2VudCA9
IGRpZmZGcm9tUHJldmlvdXMgKiBzdG9wc1tuZXh0U3RvcEluZGV4XS5wcmV2aW91c0RlbHRhSW52
ZXJzZTsKLQotICAgICAgICBvdXRDb2xvclswXSA9ICgoMS4wZiAtIHBlcmNlbnQpICogcHJldmlv
dXNDb2xvckFycmF5WzBdICsgcGVyY2VudCAqIG5leHRDb2xvckFycmF5WzBdKTsKLSAgICAgICAg
b3V0Q29sb3JbMV0gPSAoKDEuMGYgLSBwZXJjZW50KSAqIHByZXZpb3VzQ29sb3JBcnJheVsxXSAr
IHBlcmNlbnQgKiBuZXh0Q29sb3JBcnJheVsxXSk7Ci0gICAgICAgIG91dENvbG9yWzJdID0gKCgx
LjBmIC0gcGVyY2VudCkgKiBwcmV2aW91c0NvbG9yQXJyYXlbMl0gKyBwZXJjZW50ICogbmV4dENv
bG9yQXJyYXlbMl0pOwotICAgICAgICBvdXRDb2xvclszXSA9ICgoMS4wZiAtIHBlcmNlbnQpICog
cHJldmlvdXNDb2xvckFycmF5WzNdICsgcGVyY2VudCAqIG5leHRDb2xvckFycmF5WzNdKTsKLSAg
ICB9Ci0gICAgLy8gRklYTUU6IGhhdmUgdG8gaGFuZGxlIHRoZSBzcHJlYWRNZXRob2QoKXMgaGVy
ZSBTUFJFQURNRVRIT0RfUkVQRUFULCBldGMuCi19Ci0KLXN0YXRpYyBDR1NoYWRpbmdSZWYgQ0dT
aGFkaW5nUmVmRm9yTGluZWFyR3JhZGllbnQoY29uc3QgU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFk
aWVudCogc2VydmVyKQotewotICAgIENHUG9pbnQgc3RhcnQgPSBDR1BvaW50KHNlcnZlci0+Z3Jh
ZGllbnRTdGFydCgpKTsKLSAgICBDR1BvaW50IGVuZCA9IENHUG9pbnQoc2VydmVyLT5ncmFkaWVu
dEVuZCgpKTsKLQotICAgIENHRnVuY3Rpb25DYWxsYmFja3MgY2FsbGJhY2tzID0gezAsIGNnR3Jh
ZGllbnRDYWxsYmFjaywgcmVsZWFzZUNhY2hlZFN0b3BzfTsKLSAgICBDR0Zsb2F0IGRvbWFpbkxp
bWl0c1syXSA9IHswLCAxfTsKLSAgICBDR0Zsb2F0IHJhbmdlTGltaXRzWzhdID0gezAsIDEsIDAs
IDEsIDAsIDEsIDAsIDF9OwotICAgIHNlcnZlci0+bV9zdG9wc0NhY2hlLT5yZWYoKTsKLSAgICBD
R0Z1bmN0aW9uUmVmIHNoYWRpbmdGdW5jdGlvbiA9IENHRnVuY3Rpb25DcmVhdGUoc2VydmVyLT5t
X3N0b3BzQ2FjaGUuZ2V0KCksIDEsIGRvbWFpbkxpbWl0cywgNCwgcmFuZ2VMaW1pdHMsICZjYWxs
YmFja3MpOwotCi0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VD
cmVhdGVEZXZpY2VSR0IoKTsKLSAgICBDR1NoYWRpbmdSZWYgc2hhZGluZyA9IENHU2hhZGluZ0Ny
ZWF0ZUF4aWFsKGNvbG9yU3BhY2UsIHN0YXJ0LCBlbmQsIHNoYWRpbmdGdW5jdGlvbiwgdHJ1ZSwg
dHJ1ZSk7Ci0gICAgQ0dDb2xvclNwYWNlUmVsZWFzZShjb2xvclNwYWNlKTsKLSAgICBDR0Z1bmN0
aW9uUmVsZWFzZShzaGFkaW5nRnVuY3Rpb24pOwotICAgIHJldHVybiBzaGFkaW5nOwotfQotCi1z
dGF0aWMgQ0dTaGFkaW5nUmVmIENHU2hhZGluZ1JlZkZvclJhZGlhbEdyYWRpZW50KGNvbnN0IFNW
R1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQqIHNlcnZlcikKLXsKLSAgICBDR1BvaW50IGNlbnRl
ciA9IENHUG9pbnQoc2VydmVyLT5ncmFkaWVudENlbnRlcigpKTsKLSAgICBDR1BvaW50IGZvY3Vz
ID0gQ0dQb2ludChzZXJ2ZXItPmdyYWRpZW50Rm9jYWwoKSk7Ci0gICAgZG91YmxlIHJhZGl1cyA9
IHNlcnZlci0+Z3JhZGllbnRSYWRpdXMoKTsKLQotICAgIGRvdWJsZSBmZHggPSBmb2N1cy54IC0g
Y2VudGVyLng7Ci0gICAgZG91YmxlIGZkeSA9IGZvY3VzLnkgLSBjZW50ZXIueTsKLQotICAgIC8v
IFNwZWM6IElmIChmeCwgZnkpIGxpZXMgb3V0c2lkZSB0aGUgY2lyY2xlIGRlZmluZWQgYnkgKGN4
LCBjeSkgYW5kIHIsIHNldCAoZngsIGZ5KQotICAgIC8vIHRvIHRoZSBwb2ludCBvZiBpbnRlcnNl
Y3Rpb24gb2YgdGhlIGxpbmUgdGhyb3VnaCAoZngsIGZ5KSBhbmQgdGhlIGNpcmNsZS4KLSAgICBp
ZiAoc3FydChmZHggKiBmZHggKyBmZHkgKiBmZHkpID4gcmFkaXVzKSB7IAotICAgICAgICBkb3Vi
bGUgYW5nbGUgPSBhdGFuMihmb2N1cy55ICogMTAwLjAsIGZvY3VzLnggKiAxMDAuMCk7Ci0gICAg
ICAgIGZvY3VzLnggPSBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoY29zKGFuZ2xlKSAqIHJhZGl1
cyk7Ci0gICAgICAgIGZvY3VzLnkgPSBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoc2luKGFuZ2xl
KSAqIHJhZGl1cyk7Ci0gICAgfQotCi0gICAgQ0dGdW5jdGlvbkNhbGxiYWNrcyBjYWxsYmFja3Mg
PSB7MCwgY2dHcmFkaWVudENhbGxiYWNrLCByZWxlYXNlQ2FjaGVkU3RvcHN9OwotICAgIENHRmxv
YXQgZG9tYWluTGltaXRzWzJdID0gezAsIDF9OwotICAgIENHRmxvYXQgcmFuZ2VMaW1pdHNbOF0g
PSB7MCwgMSwgMCwgMSwgMCwgMSwgMCwgMX07Ci0gICAgc2VydmVyLT5tX3N0b3BzQ2FjaGUtPnJl
ZigpOwotICAgIENHRnVuY3Rpb25SZWYgc2hhZGluZ0Z1bmN0aW9uID0gQ0dGdW5jdGlvbkNyZWF0
ZShzZXJ2ZXItPm1fc3RvcHNDYWNoZS5nZXQoKSwgMSwgZG9tYWluTGltaXRzLCA0LCByYW5nZUxp
bWl0cywgJmNhbGxiYWNrcyk7Ci0KLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENH
Q29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwotICAgIENHU2hhZGluZ1JlZiBzaGFkaW5nID0g
Q0dTaGFkaW5nQ3JlYXRlUmFkaWFsKGNvbG9yU3BhY2UsIGZvY3VzLCAwLCBjZW50ZXIsIG5hcnJv
d1ByZWNpc2lvblRvQ0dGbG9hdChyYWRpdXMpLCBzaGFkaW5nRnVuY3Rpb24sIHRydWUsIHRydWUp
OwotICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7Ci0gICAgQ0dGdW5jdGlvblJl
bGVhc2Uoc2hhZGluZ0Z1bmN0aW9uKTsKLSAgICByZXR1cm4gc2hhZGluZzsKLX0KLQotdm9pZCBT
VkdQYWludFNlcnZlckdyYWRpZW50Ojp1cGRhdGVRdWFydHpHcmFkaWVudFN0b3BzQ2FjaGUoY29u
c3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mIHN0b3BzKQotewotICAgIG1fc3RvcHNDYWNoZSA9
IFNoYXJlZFN0b3BDYWNoZTo6Y3JlYXRlKCk7Ci0gICAgVmVjdG9yPFF1YXJ0ekdyYWRpZW50U3Rv
cD4mIHN0b3BzQ2FjaGUgPSBtX3N0b3BzQ2FjaGUtPm1fc3RvcHM7Ci0gICAgc3RvcHNDYWNoZS5y
ZXNpemUoc3RvcHMuc2l6ZSgpKTsKLSAgICBDR0Zsb2F0IHByZXZpb3VzT2Zmc2V0ID0gMC4wZjsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcHMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgQ0dGbG9hdCBjdXJyT2Zmc2V0ID0gbWluKG1heChzdG9wc1tpXS5maXJzdCwgcHJldmlvdXNP
ZmZzZXQpLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PigxLjApKTsKLSAgICAgICAgc3RvcHNDYWNoZVtp
XS5vZmZzZXQgPSBjdXJyT2Zmc2V0OwotICAgICAgICBzdG9wc0NhY2hlW2ldLnByZXZpb3VzRGVs
dGFJbnZlcnNlID0gMS4wZiAvIChjdXJyT2Zmc2V0IC0gcHJldmlvdXNPZmZzZXQpOwotICAgICAg
ICBwcmV2aW91c09mZnNldCA9IGN1cnJPZmZzZXQ7Ci0gICAgICAgIENHRmxvYXQqIGNhID0gc3Rv
cHNDYWNoZVtpXS5jb2xvckFycmF5OwotICAgICAgICBzdG9wc1tpXS5zZWNvbmQuZ2V0UkdCQShj
YVswXSwgY2FbMV0sIGNhWzJdLCBjYVszXSk7Ci0gICAgfQotfQotCi12b2lkIFNWR1BhaW50U2Vy
dmVyR3JhZGllbnQ6OnVwZGF0ZVF1YXJ0ekdyYWRpZW50Q2FjaGUoY29uc3QgU1ZHUGFpbnRTZXJ2
ZXJHcmFkaWVudCogc2VydmVyKQotewotICAgIC8vIGNhY2hlIG91ciBvd24gY29weSBvZiB0aGUg
c3RvcHMgZm9yIGZhc3RlciBhY2Nlc3MuCi0gICAgLy8gdGhpcyBpcyBsZWdhY3kgY29kZSwgcHJv
YmFibHkgY291bGQgYmUgcmV3b3JrZWQuCi0gICAgaWYgKCFtX3N0b3BzQ2FjaGUpCi0gICAgICAg
IHVwZGF0ZVF1YXJ0ekdyYWRpZW50U3RvcHNDYWNoZShncmFkaWVudFN0b3BzKCkpOwotCi0gICAg
Q0dTaGFkaW5nUmVsZWFzZShtX3NoYWRpbmdDYWNoZSk7Ci0KLSAgICBpZiAodHlwZSgpID09IFJh
ZGlhbEdyYWRpZW50UGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgY29uc3QgU1ZHUGFpbnRTZXJ2ZXJS
YWRpYWxHcmFkaWVudCogcmFkaWFsID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHUGFpbnRTZXJ2ZXJS
YWRpYWxHcmFkaWVudCo+KHNlcnZlcik7Ci0gICAgICAgIG1fc2hhZGluZ0NhY2hlID0gQ0dTaGFk
aW5nUmVmRm9yUmFkaWFsR3JhZGllbnQocmFkaWFsKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUoKSA9
PSBMaW5lYXJHcmFkaWVudFBhaW50U2VydmVyKSB7Ci0gICAgICAgIGNvbnN0IFNWR1BhaW50U2Vy
dmVyTGluZWFyR3JhZGllbnQqIGxpbmVhciA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR1BhaW50U2Vy
dmVyTGluZWFyR3JhZGllbnQqPihzZXJ2ZXIpOwotICAgICAgICBtX3NoYWRpbmdDYWNoZSA9IENH
U2hhZGluZ1JlZkZvckxpbmVhckdyYWRpZW50KGxpbmVhcik7Ci0gICAgfQotfQotCiAvLyBIZWxw
ZXIgZnVuY3Rpb24gZm9yIHRleHQgcGFpbnRpbmcKIHN0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVy
T2JqZWN0KiBmaW5kVGV4dFJvb3RPYmplY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBzdGFydCkKIHsK
ICAgICB3aGlsZSAoc3RhcnQgJiYgIXN0YXJ0LT5pc1NWR1RleHQoKSkKICAgICAgICAgc3RhcnQg
PSBzdGFydC0+cGFyZW50KCk7Ci0KICAgICBBU1NFUlQoc3RhcnQpOwogICAgIEFTU0VSVChzdGFy
dC0+aXNTVkdUZXh0KCkpOwogCiAgICAgcmV0dXJuIHN0YXJ0OwogfQogCi12b2lkIFNWR1BhaW50
U2VydmVyR3JhZGllbnQ6OnRlYXJkb3duKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSwgYm9vbCBpc1Bh
aW50aW5nVGV4dCkgY29uc3QKK3N0YXRpYyBpbmxpbmUgYm9vbCBjcmVhdGVNYXNrQW5kU3dhcENv
bnRleHRGb3JUZXh0R3JhZGllbnQoCisgICAgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgR3Jh
cGhpY3NDb250ZXh0KiYgc2F2ZWRDb250ZXh0LAorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4mIGlt
YWdlQnVmZmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICBDR1NoYWRpbmdS
ZWYgc2hhZGluZyA9IG1fc2hhZGluZ0NhY2hlOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0UmVm
ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQVNTRVJUKGNvbnRleHRSZWYpOwor
ICAgIEZsb2F0UmVjdCBtYXNrQkJveCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oZmluZFRl
eHRSb290T2JqZWN0KG9iamVjdCkpLT5yZWxhdGl2ZUJCb3goZmFsc2UpOworICAgIEludFJlY3Qg
bWFza1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG9iamVjdC0+YWJzb2x1dGVUcmFuc2Zvcm0oKS5t
YXBSZWN0KG1hc2tCQm94KSk7CiAKLSAgICAvLyBBcyByZW5kZXJQYXRoKCkgaXMgbm90IHVzZWQg
d2hlbiBwYWludGluZyB0ZXh0LCBzcGVjaWFsIGxvZ2ljIG5lZWRlZCBoZXJlLgotICAgIGlmIChp
c1BhaW50aW5nVGV4dCkgewotICAgICAgICBpZiAobV9zYXZlZENvbnRleHQpIHsKLSAgICAgICAg
ICAgIEZsb2F0UmVjdCBtYXNrQkJveCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oZmluZFRl
eHRSb290T2JqZWN0KG9iamVjdCkpLT5yZWxhdGl2ZUJCb3goZmFsc2UpOworICAgIEludFNpemUg
bWFza1NpemUobWFza1JlY3Qud2lkdGgoKSwgbWFza1JlY3QuaGVpZ2h0KCkpOworICAgIGNsYW1w
SW1hZ2VCdWZmZXJTaXplVG9WaWV3cG9ydChvYmplY3QtPmRvY3VtZW50KCktPnJlbmRlcmVyKCks
IG1hc2tTaXplKTsKIAotICAgICAgICAgICAgLy8gRml4dXAgdHJhbnNmb3JtYXRpb25zIHRvIGJl
IGFibGUgdG8gY2xpcCB0byBtYXNrCi0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNm
b3JtID0gb2JqZWN0LT5hYnNvbHV0ZVRyYW5zZm9ybSgpOwotICAgICAgICAgICAgRmxvYXRSZWN0
IHRleHRCb3VuZGFyeSA9IHRyYW5zZm9ybS5tYXBSZWN0KG1hc2tCQm94KTsKKyAgICBhdXRvX3B0
cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtYXNrU2l6ZSwg
ZmFsc2UpOwogCi0gICAgICAgICAgICBJbnRTaXplIG1hc2tTaXplKGxyb3VuZGYodGV4dEJvdW5k
YXJ5LndpZHRoKCkpLCBscm91bmRmKHRleHRCb3VuZGFyeS5oZWlnaHQoKSkpOwotICAgICAgICAg
ICAgY2xhbXBJbWFnZUJ1ZmZlclNpemVUb1ZpZXdwb3J0KG9iamVjdC0+ZG9jdW1lbnQoKS0+cmVu
ZGVyZXIoKSwgbWFza1NpemUpOworICAgIGlmICghbWFza0ltYWdlLmdldCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGlmIChtYXNrU2l6ZS53aWR0aCgpIDwgc3RhdGlj
X2Nhc3Q8aW50Pih0ZXh0Qm91bmRhcnkud2lkdGgoKSkpCi0gICAgICAgICAgICAgICAgdGV4dEJv
dW5kYXJ5LnNldFdpZHRoKG1hc2tTaXplLndpZHRoKCkpOworICAgIEdyYXBoaWNzQ29udGV4dCog
bWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOworICAgIG1hc2tJbWFnZUNv
bnRleHQtPnNhdmUoKTsKKyAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLW1hc2tSZWN0
LngoKSwgLW1hc2tSZWN0LnkoKSk7CisgICAgbWFza0ltYWdlQ29udGV4dC0+Y29uY2F0Q1RNKG9i
amVjdC0+YWJzb2x1dGVUcmFuc2Zvcm0oKSk7CiAKLSAgICAgICAgICAgIGlmIChtYXNrU2l6ZS5o
ZWlnaHQoKSA8IHN0YXRpY19jYXN0PGludD4odGV4dEJvdW5kYXJ5LmhlaWdodCgpKSkKLSAgICAg
ICAgICAgICAgICB0ZXh0Qm91bmRhcnkuc2V0SGVpZ2h0KG1hc2tTaXplLmhlaWdodCgpKTsKKyAg
ICBpbWFnZUJ1ZmZlci5zZXQobWFza0ltYWdlLnJlbGVhc2UoKSk7CisgICAgc2F2ZWRDb250ZXh0
ID0gY29udGV4dDsKIAotICAgICAgICAgICAgLy8gQ2xpcCBjdXJyZW50IGNvbnRleHQgdG8gbWFz
ayBpbWFnZSAoZ3JhZGllbnQpCi0gICAgICAgICAgICBtX3NhdmVkQ29udGV4dC0+Y29uY2F0Q1RN
KHRyYW5zZm9ybS5pbnZlcnNlKCkpOwotICAgICAgICAgICAgbV9zYXZlZENvbnRleHQtPmNsaXBU
b0ltYWdlQnVmZmVyKHRleHRCb3VuZGFyeSwgbV9pbWFnZUJ1ZmZlcik7Ci0gICAgICAgICAgICBt
X3NhdmVkQ29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7CisgICAgY29udGV4dCA9IG1hc2tJ
bWFnZUNvbnRleHQ7CiAKLSAgICAgICAgICAgIGhhbmRsZUJvdW5kaW5nQm94TW9kZUFuZEdyYWRp
ZW50VHJhbnNmb3JtYXRpb24obV9zYXZlZENvbnRleHQsIG1hc2tCQm94KTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KIAotICAgICAgICAgICAgLy8gUmVzdG9yZSBvbi1zY3JlZW4gZHJhd2luZyBjb250
ZXh0LCBhZnRlciB3ZSBnb3QgdGhlIGltYWdlIG9mIHRoZSBncmFkaWVudAotICAgICAgICAgICAg
ZGVsZXRlIG1faW1hZ2VCdWZmZXI7CitzdGF0aWMgaW5saW5lIHZvaWQgY2xpcFRvVGV4dE1hc2so
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdl
QnVmZmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwKKyAgICBjb25zdCBTVkdQYWludFNl
cnZlckdyYWRpZW50KiBncmFkaWVudFNlcnZlcikKK3sKKyAgICBGbG9hdFJlY3QgbWFza0JCb3gg
PSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGZpbmRUZXh0Um9vdE9iamVjdChvYmplY3QpKS0+
cmVsYXRpdmVCQm94KGZhbHNlKTsKKworICAgIC8vIEZpeHVwIHRyYW5zZm9ybWF0aW9ucyB0byBi
ZSBhYmxlIHRvIGNsaXAgdG8gbWFzaworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBv
YmplY3QtPmFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgRmxvYXRSZWN0IHRleHRCb3VuZGFyeSA9
IHRyYW5zZm9ybS5tYXBSZWN0KG1hc2tCQm94KTsKKworICAgIEludFNpemUgbWFza1NpemUobHJv
dW5kZih0ZXh0Qm91bmRhcnkud2lkdGgoKSksIGxyb3VuZGYodGV4dEJvdW5kYXJ5LmhlaWdodCgp
KSk7CisgICAgY2xhbXBJbWFnZUJ1ZmZlclNpemVUb1ZpZXdwb3J0KG9iamVjdC0+ZG9jdW1lbnQo
KS0+cmVuZGVyZXIoKSwgbWFza1NpemUpOworICAgIHRleHRCb3VuZGFyeS5zZXRTaXplKHRleHRC
b3VuZGFyeS5zaXplKCkuc2hydW5rVG8obWFza1NpemUpKTsKKworICAgIC8vIENsaXAgY3VycmVu
dCBjb250ZXh0IHRvIG1hc2sgaW1hZ2UgKGdyYWRpZW50KQorICAgIGNvbnRleHQtPmNvbmNhdENU
TSh0cmFuc2Zvcm0uaW52ZXJzZSgpKTsKKyAgICBjb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcih0
ZXh0Qm91bmRhcnksIGltYWdlQnVmZmVyLmdldCgpKTsKKyAgICBjb250ZXh0LT5jb25jYXRDVE0o
dHJhbnNmb3JtKTsKIAotICAgICAgICAgICAgY29udGV4dCA9IG1fc2F2ZWRDb250ZXh0OwotICAg
ICAgICAgICAgY29udGV4dFJlZiA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGhh
bmRsZUJvdW5kaW5nQm94TW9kZUFuZEdyYWRpZW50VHJhbnNmb3JtYXRpb24oY29udGV4dCwgbWFz
a0JCb3gpOworfQogCi0gICAgICAgICAgICBtX3NhdmVkQ29udGV4dCA9IDA7Ci0gICAgICAgICAg
ICBtX2ltYWdlQnVmZmVyID0gMDsKLSAgICAgICAgfQordm9pZCBTVkdQYWludFNlcnZlckdyYWRp
ZW50Ojp0ZWFyZG93bihHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQp
IGNvbnN0Cit7CisgICAgLy8gcmVuZGVyUGF0aCgpIGlzIG5vdCB1c2VkIHdoZW4gcGFpbnRpbmcg
dGV4dCwgc28gd2UgcGFpbnQgdGhlIGdyYWRpZW50IGR1cmluZyB0ZWFyZG93bigpCisgICAgaWYg
KGlzUGFpbnRpbmdUZXh0ICYmIG1fc2F2ZWRDb250ZXh0KSB7CisgICAgICAgIC8vIFJlc3RvcmUg
b24tc2NyZWVuIGRyYXdpbmcgY29udGV4dAorICAgICAgICBjb250ZXh0ID0gbV9zYXZlZENvbnRl
eHQ7CisgICAgICAgIG1fc2F2ZWRDb250ZXh0ID0gMDsKKworICAgICAgICBjbGlwVG9UZXh0TWFz
ayhjb250ZXh0LCBtX2ltYWdlQnVmZmVyLCBvYmplY3QsIHRoaXMpOworCisgICAgICAgIC8vIGZp
bmFsbHkgZmlsbCB0aGUgdGV4dCBjbGlwIHdpdGggdGhlIHNoYWRpbmcKKyAgICAgICAgQ0dDb250
ZXh0RHJhd1NoYWRpbmcoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIG1fZ3JhZGllbnQtPnBs
YXRmb3JtR3JhZGllbnQoKSk7CisgCisgICAgICAgIG1faW1hZ2VCdWZmZXIuY2xlYXIoKTsgLy8g
d2UncmUgZG9uZSB3aXRoIG91ciB0ZXh0IG1hc2sgYnVmZmVyCiAgICAgfQotCi0gICAgQ0dDb250
ZXh0RHJhd1NoYWRpbmcoY29udGV4dFJlZiwgc2hhZGluZyk7Ci0gICAgY29udGV4dC0+cmVzdG9y
ZSgpOworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsgLy8gc2F2ZSB3YXMgY2FsbGVkIGR1cmluZyBz
ZXR1cCgpCiB9CiAKIHZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6cmVuZGVyUGF0aChHcmFw
aGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHBhdGgsIFNWR1BhaW50
VGFyZ2V0VHlwZSB0eXBlKSBjb25zdApAQCAtMjQzLDEyICsxMzUsMTEgQEAgdm9pZCBTVkdQYWlu
dFNlcnZlckdyYWRpZW50OjpyZW5kZXJQYXRoKAogICAgICAgICAgICAgb2JqZWN0QkJveCA9IGJi
b3g7CiAgICAgfQogCi0gICAgaWYgKGlzRmlsbGVkKQotICAgICAgICBjbGlwVG9GaWxsUGF0aChj
b250ZXh0UmVmLCBwYXRoKTsKLSAgICBlbHNlCi0gICAgICAgIGNsaXBUb1N0cm9rZVBhdGgoY29u
dGV4dFJlZiwgcGF0aCk7Ci0KICAgICBoYW5kbGVCb3VuZGluZ0JveE1vZGVBbmRHcmFkaWVudFRy
YW5zZm9ybWF0aW9uKGNvbnRleHQsIG9iamVjdEJCb3gpOworICAgIGlmICgodHlwZSAmIEFwcGx5
VG9GaWxsVGFyZ2V0VHlwZSkgJiYgcGF0aC0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgp
KQorICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgpOworICAgIGVsc2UKKyAgICAgICAgY29udGV4
dC0+c3Ryb2tlUGF0aCgpOwogfQogCiB2b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmhhbmRs
ZUJvdW5kaW5nQm94TW9kZUFuZEdyYWRpZW50VHJhbnNmb3JtYXRpb24oR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QpIGNvbnN0CkBAIC0yNjgsNjkg
KzE1OSw0MSBAQCB2b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmhhbmRsZUJvdW5kCiBib29s
IFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQs
IGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSwgYm9v
bCBpc1BhaW50aW5nVGV4dCkgY29uc3QKIHsKICAgICBtX293bmVyRWxlbWVudC0+YnVpbGRHcmFk
aWVudCgpOwotCi0gICAgLy8gV2UgbmVlZCBhIGhvb2sgdG8gY2FsbCB0aGlzIHdoZW4gdGhlIGdy
YWRpZW50IGdldHMgdXBkYXRlZCwgYmVmb3JlIGRyYXduLgotICAgIGlmICghbV9zaGFkaW5nQ2Fj
aGUpCi0gICAgICAgIGNvbnN0X2Nhc3Q8U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudCo+KHRoaXMpLT51
cGRhdGVRdWFydHpHcmFkaWVudENhY2hlKHRoaXMpOwotCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBBU1NFUlQoY29udGV4dFJl
Zik7CisgICAgaWYgKCFtX2dyYWRpZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CisgICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7CiAKLSAgICBib29sIGlzRmlsbGVk
ID0gKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN0eWxlLT5zdmdTdHlsZSgpLT5o
YXNGaWxsKCk7Ci0gICAgYm9vbCBpc1N0cm9rZWQgPSAodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJn
ZXRUeXBlKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCk7CisgICAgYm9vbCBpc0Zp
bGxlZCA9ICh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdmdTdHlsZS0+aGFzRmls
bCgpOworICAgIGJvb2wgaXNTdHJva2VkID0gKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlw
ZSkgJiYgc3ZnU3R5bGUtPmhhc1N0cm9rZSgpOwogCiAgICAgQVNTRVJUKGlzRmlsbGVkICYmICFp
c1N0cm9rZWQgfHwgIWlzRmlsbGVkICYmIGlzU3Ryb2tlZCk7CiAKLSAgICBjb250ZXh0LT5zYXZl
KCk7Ci0gICAgQ0dDb250ZXh0U2V0QWxwaGEoY29udGV4dFJlZiwgaXNGaWxsZWQgPyBzdHlsZS0+
c3ZnU3R5bGUoKS0+ZmlsbE9wYWNpdHkoKSA6IHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VPcGFj
aXR5KCkpOworICAgIGNvbnRleHQtPnNhdmUoKTsgLy8gcmVzdG9yZSBpcyBjYWxsZWQgZHVyaW5n
IHRlYXJkb3duKCkKKyAgICBjb250ZXh0LT5zZXRBbHBoYShpc0ZpbGxlZCA/IHN2Z1N0eWxlLT5m
aWxsT3BhY2l0eSgpIDogc3ZnU3R5bGUtPnN0cm9rZU9wYWNpdHkoKSk7CiAKICAgICBpZiAoaXNQ
YWludGluZ1RleHQpIHsKLSAgICAgICAgRmxvYXRSZWN0IG1hc2tCQm94ID0gY29uc3RfY2FzdDxS
ZW5kZXJPYmplY3QqPihmaW5kVGV4dFJvb3RPYmplY3Qob2JqZWN0KSktPnJlbGF0aXZlQkJveChm
YWxzZSk7Ci0gICAgICAgIEludFJlY3QgbWFza1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG9iamVj
dC0+YWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KG1hc2tCQm94KSk7Ci0KLSAgICAgICAgSW50
U2l6ZSBtYXNrU2l6ZShtYXNrUmVjdC53aWR0aCgpLCBtYXNrUmVjdC5oZWlnaHQoKSk7Ci0gICAg
ICAgIGNsYW1wSW1hZ2VCdWZmZXJTaXplVG9WaWV3cG9ydChvYmplY3QtPmRvY3VtZW50KCktPnJl
bmRlcmVyKCksIG1hc2tTaXplKTsKLQotICAgICAgICBhdXRvX3B0cjxJbWFnZUJ1ZmZlcj4gbWFz
a0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtYXNrU2l6ZSwgZmFsc2UpOwotCi0gICAgICAg
IGlmICghbWFza0ltYWdlLmdldCgpKSB7CisgICAgICAgIGlmICghY3JlYXRlTWFza0FuZFN3YXBD
b250ZXh0Rm9yVGV4dEdyYWRpZW50KGNvbnRleHQsIG1fc2F2ZWRDb250ZXh0LCBtX2ltYWdlQnVm
ZmVyLCBvYmplY3QpKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAgY29udGV4dC0+c2V0VGV4dERy
YXdpbmdNb2RlKGlzRmlsbGVkID8gY1RleHRGaWxsIDogY1RleHRTdHJva2UpOworICAgIH0KIAot
ICAgICAgICBHcmFwaGljc0NvbnRleHQqIG1hc2tJbWFnZUNvbnRleHQgPSBtYXNrSW1hZ2UtPmNv
bnRleHQoKTsKLSAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+c2F2ZSgpOwotCi0gICAgICAgIG1h
c2tJbWFnZUNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShpc0ZpbGxlZCA/IGNUZXh0RmlsbCA6
IGNUZXh0U3Ryb2tlKTsKLSAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+dHJhbnNsYXRlKC1tYXNr
UmVjdC54KCksIC1tYXNrUmVjdC55KCkpOwotICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5jb25j
YXRDVE0ob2JqZWN0LT5hYnNvbHV0ZVRyYW5zZm9ybSgpKTsKLQotICAgICAgICBtX2ltYWdlQnVm
ZmVyID0gbWFza0ltYWdlLnJlbGVhc2UoKTsKLSAgICAgICAgbV9zYXZlZENvbnRleHQgPSBjb250
ZXh0OwotCi0gICAgICAgIGNvbnRleHQgPSBtYXNrSW1hZ2VDb250ZXh0OwotICAgICAgICBjb250
ZXh0UmVmID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgaWYgKGlzRmlsbGVkKSB7
CisgICAgICAgIGNvbnRleHQtPnNldEZpbGxSdWxlKHN2Z1N0eWxlLT5maWxsUnVsZSgpKTsKKyAg
ICAgICAgY29udGV4dC0+c2V0RmlsbEdyYWRpZW50KG1fZ3JhZGllbnQpOwogICAgIH0KIAotICAg
IGlmIChpc1N0cm9rZWQpCisgICAgaWYgKGlzU3Ryb2tlZCkgewogICAgICAgICBhcHBseVN0cm9r
ZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3QpOworICAgICAgICBjb250ZXh0
LT5zZXRTdHJva2VHcmFkaWVudChtX2dyYWRpZW50KTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjppbnZhbGlkYXRlKCkKLXsKLSAg
ICBTVkdQYWludFNlcnZlcjo6aW52YWxpZGF0ZSgpOwotCi0gICAgLy8gSW52YWxpZGF0ZSBjYWNo
ZXMKLSAgICBDR1NoYWRpbmdSZWxlYXNlKG1fc2hhZGluZ0NhY2hlKTsKLQotICAgIG1fc3RvcHND
YWNoZSA9IDA7Ci0gICAgbV9zaGFkaW5nQ2FjaGUgPSAwOwotfQotCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23953</attachid>
            <date>2008-09-30 13:44:22 -0700</date>
            <delta_ts>2008-10-02 11:58:06 -0700</delta_ts>
            <desc>Move gradient spread method to GraphicsContext</desc>
            <filename>SVGPaintServer-gradient-spread.patch</filename>
            <type>text/plain</type>
            <size>14702</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNzEwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMDgtMDktMzAgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlZCBn
cmFkaWVudCBzcHJlYWQgbWV0aG9kIG91dCBvZiBTVkcgaW50byB0aGUgR3JhcGhpY3NDb250ZXh0
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3ByZWFkTWV0aG9kKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3ByZWFkTWV0aG9kKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5U3ByZWFkTWV0aG9kKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBseVNwcmVhZE1ldGhv
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgICogc3Zn
L0dyYWRpZW50QXR0cmlidXRlcy5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRBdHRyaWJ1
dGVzOjpzcHJlYWRNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRBdHRyaWJ1dGVz
OjpzZXRTcHJlYWRNZXRob2QpOgorICAgICAgICAqIHN2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojpjb2xs
ZWN0R3JhZGllbnRQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBzdmcvU1ZHUmFkaWFsR3JhZGllbnRF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6
Y29sbGVjdEdyYWRpZW50UHJvcGVydGllcyk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1Bh
aW50U2VydmVyR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpzcHJlYWRNZXRob2QpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0R3JhZGllbnRTcHJl
YWRNZXRob2QpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50
Lmg6CisKIDIwMDgtMDktMzAgIEtldmluIE1jQ3VsbG91Z2ggIDxrbWNjdWxsb3VnaEBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiAzNzA2NCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg5LDYgKzE4OSwxNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Rmls
bFJ1bGUoV2luZFJ1CiAgICAgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7CiB9
CiAKK0dyYWRpZW50U3ByZWFkTWV0aG9kIEdyYXBoaWNzQ29udGV4dDo6c3ByZWFkTWV0aG9kKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnNwcmVhZE1ldGhvZDsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNwcmVhZE1ldGhvZChHcmFkaWVudFNwcmVhZE1ldGhv
ZCBzcHJlYWRNZXRob2QpCit7CisgICAgbV9jb21tb24tPnN0YXRlLnNwcmVhZE1ldGhvZCA9IHNw
cmVhZE1ldGhvZDsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxDb2xvcihjb25z
dCBDb2xvciYgY29sb3IpCiB7CiAgICAgbV9jb21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNlID0g
U29saWRDb2xvclNwYWNlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCShyZXZpc2lvbiAzNzA2NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw2ICsxMjUsMTIgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJbnRlcnBvbGF0aW9uSGlnaAogICAgIH07CiAK
KyAgICBlbnVtIEdyYWRpZW50U3ByZWFkTWV0aG9kIHsKKyAgICAgICAgU1BSRUFETUVUSE9EX1BB
RCA9IDEsCisgICAgICAgIFNQUkVBRE1FVEhPRF9SRUZMRUNUID0gMiwKKyAgICAgICAgU1BSRUFE
TUVUSE9EX1JFUEVBVCA9IDMKKyAgICB9OworCiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0IDog
Tm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0Kik7CkBAIC0xNDYsNiArMTUyLDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQg
c2V0RmlsbFJ1bGUoV2luZFJ1bGUpOworICAgICAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJl
YWRNZXRob2QoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRT
cHJlYWRNZXRob2QpOwogICAgICAgICBDb2xvciBmaWxsQ29sb3IoKSBjb25zdDsKICAgICAgICAg
dm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICAgICAgdm9pZCBzZXRGaWxsUGF0
dGVybihQYXNzUmVmUHRyPFBhdHRlcm4+KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCShyZXZpc2lvbiAzNzA2NCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
UmVmUHRyPFBhdHRlcm4+IHN0cm9rZVBhdHRlcm47CiAgICAgICAgIAogICAgICAgICBXaW5kUnVs
ZSBmaWxsUnVsZTsKKyAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kOwog
ICAgICAgICBDb2xvclNwYWNlIGZpbGxDb2xvclNwYWNlOwogICAgICAgICBDb2xvciBmaWxsQ29s
b3I7CiAgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gZmlsbEdyYWRpZW50OwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHAJKHJldmlzaW9uIDM3MDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3
LDI1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUmVjdFNvdXJjZU92ZXIoY2EKICAgICBjYWly
b19maWxsKGNyKTsKIH0KIAorc3RhdGljIGlubGluZSBjYWlyb19wYXR0ZXJuX3QqIGFwcGx5U3By
ZWFkTWV0aG9kKGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiwgR3JhZGllbnRTcHJlYWRNZXRob2Qg
c3ByZWFkTWV0aG9kKQoreworICAgIHN3aXRjaCAoc3ByZWFkTWV0aG9kKSB7CisgICAgICAgIGNh
c2UgU1BSRUFETUVUSE9EX1BBRDoKKyAgICAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5k
KHBhdHRlcm4sIENBSVJPX0VYVEVORF9QQUQpOworICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTUFJFQURNRVRIT0RfUkVGTEVDVDoKKyAgICAgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0
X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfUkVGTEVDVCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTUFJFQURNRVRIT0RfUkVQRUFUOgorICAgICAgICAgICAgY2Fpcm9f
cGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9SRVBFQVQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjYWlyb19wYXR0ZXJu
X3NldF9leHRlbmQocGF0dGVybiwgQ0FJUk9fRVhURU5EX05PTkUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIHJldHVybiBwYXR0ZXJuOworfQorCiBHcmFwaGljc0NvbnRleHQ6Okdy
YXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY3IpCiAgICAgOiBtX2NvbW1v
bihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCiAgICAgLCBtX2RhdGEobmV3IEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSkKQEAgLTQzNiw3ICs0NTUsMTAgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKICAgICAgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShj
ciwgbV9kYXRhLT5nbG9iYWxBbHBoYSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhZGll
bnRDb2xvclNwYWNlOgotICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBtX2NvbW1vbi0+c3Rh
dGUuZmlsbEdyYWRpZW50LmdldCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBjYWly
b19wYXR0ZXJuX3QqIHBhdHRlcm4gPSBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LmdldCgp
LT5wbGF0Zm9ybUdyYWRpZW50KCk7CisgICAgICAgIGlmIChzcHJlYWRNZXRob2QoKSkKKyAgICAg
ICAgICAgIHBhdHRlcm4gPSBhcHBseVNwcmVhZE1ldGhvZChwYXR0ZXJuLCBzcHJlYWRNZXRob2Qo
KSk7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHBhdHRlcm4pOwogICAgICAgICBjYWly
b19jbGlwKGNyKTsKICAgICAgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShjciwgbV9kYXRhLT5n
bG9iYWxBbHBoYSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDczLDcgKzQ5NSwxMCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCiAgICAgICAgIGNhaXJvX3N0cm9rZShjcik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgotICAgICAgICBjYWly
b19zZXRfc291cmNlKGNyLCBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCktPnBs
YXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IG1f
Y29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKS0+cGxhdGZvcm1HcmFkaWVudCgpOwor
ICAgICAgICBpZiAoc3ByZWFkTWV0aG9kKCkpCisgICAgICAgICAgICBwYXR0ZXJuID0gYXBwbHlT
cHJlYWRNZXRob2QocGF0dGVybiwgc3ByZWFkTWV0aG9kKCkpOworICAgICAgICBjYWlyb19zZXRf
c291cmNlKGNyLCBwYXR0ZXJuKTsKICAgICAgICAgaWYgKG1fZGF0YS0+Z2xvYmFsQWxwaGEgPCAx
LjBmKSB7CiAgICAgICAgICAgICBjYWlyb19wdXNoX2dyb3VwKGNyKTsKICAgICAgICAgICAgIGNh
aXJvX3BhaW50X3dpdGhfYWxwaGEoY3IsIG1fZGF0YS0+Z2xvYmFsQWxwaGEpOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJ
KHJldmlzaW9uIDM3MDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcsNiArNyw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBEaXJrIFNjaHVsemUgPHZiczg1QGdteC5kZT4KICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKQEAgLTUxLDYgKzUyLDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCiAj
aW5jbHVkZSA8UURlYnVnPgorI2luY2x1ZGUgPFFHcmFkaWVudD4KICNpbmNsdWRlIDxRUGFpbnRl
cj4KICNpbmNsdWRlIDxRUGFpbnREZXZpY2U+CiAjaW5jbHVkZSA8UVBhaW50RW5naW5lPgpAQCAt
MTUwLDYgKzE1MiwyNSBAQCBzdGF0aWMgUXQ6OlBlblN0eWxlIHRvUVBlblN0eWxlKFN0cm9rZVN0
CiAgICAgcmV0dXJuIFF0OjpOb1BlbjsKIH0KIAorc3RhdGljIGlubGluZSBRR3JhZGllbnQgYXBw
bHlTcHJlYWRNZXRob2QoUUdyYWRpZW50IGdyYWRpZW50LCBHcmFkaWVudFNwcmVhZE1ldGhvZCBz
cHJlYWRNZXRob2QpCit7CisgICAgc3dpdGNoIChzcHJlYWRNZXRob2QpIHsKKyAgICAgICAgY2Fz
ZSBTUFJFQURNRVRIT0RfUEFEOgorICAgICAgICAgICAgZ3JhZGllbnQuc2V0U3ByZWFkKFFHcmFk
aWVudDo6UGFkU3ByZWFkKTsKKyAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1BSRUFE
TUVUSE9EX1JFRkxFQ1Q6CisgICAgICAgICAgICBncmFkaWVudC5zZXRTcHJlYWQoUUdyYWRpZW50
OjpSZWZsZWN0U3ByZWFkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNQUkVB
RE1FVEhPRF9SRVBFQVQ6CisgICAgICAgICAgICBncmFkaWVudC5zZXRTcHJlYWQoUUdyYWRpZW50
OjpSZXBlYXRTcHJlYWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBncmFkaWVudC5zZXRTcHJlYWQoUUdyYWRpZW50OjpQYWRTcHJlYWQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBncmFkaWVudDsKK30KKwogc3RydWN0
IFRyYW5zcGFyZW5jeUxheWVyCiB7CiAgICAgVHJhbnNwYXJlbmN5TGF5ZXIoY29uc3QgUVBhaW50
ZXIqIHAsIGNvbnN0IFFSZWN0ICZyZWN0KQpAQCAtNTE1LDcgKzUzNiwxMCBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbFBhdGgoKQogICAgICAgICBwLT5maWxsUGF0aChwYXRoLCBRQnJ1c2go
bV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLmdldCgpLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
Z2V0Q1RNKCkpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNl
OgotICAgICAgICBwLT5maWxsUGF0aChwYXRoLCBRQnJ1c2goKihtX2NvbW1vbi0+c3RhdGUuZmls
bEdyYWRpZW50LmdldCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkpKSk7CisgICAgICAgIFFHcmFkaWVu
dCogZ3JhZGllbnQgPSBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpLT5wbGF0Zm9y
bUdyYWRpZW50KCk7CisgICAgICAgIGlmIChzcHJlYWRNZXRob2QoKSkKKyAgICAgICAgICAgICpn
cmFkaWVudCA9IGFwcGx5U3ByZWFkTWV0aG9kKCpncmFkaWVudCwgc3ByZWFkTWV0aG9kKCkpOyAg
CisgICAgICAgIHAtPmZpbGxQYXRoKHBhdGgsIFFCcnVzaCgqZ3JhZGllbnQpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogfQpAQCAtNTQxLDcgKzU2NSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUGF0aCgpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdyYWRpZW50
Q29sb3JTcGFjZTogewotICAgICAgICBwZW4uc2V0QnJ1c2goUUJydXNoKCoobV9jb21tb24tPnN0
YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkpKSk7CisgICAgICAg
IFFHcmFkaWVudCogZ3JhZGllbnQgPSBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0
KCktPnBsYXRmb3JtR3JhZGllbnQoKTsKKyAgICAgICAgaWYgKHNwcmVhZE1ldGhvZCgpKQorICAg
ICAgICAgICAgKmdyYWRpZW50ID0gYXBwbHlTcHJlYWRNZXRob2QoKmdyYWRpZW50LCBzcHJlYWRN
ZXRob2QoKSk7IAorICAgICAgICBwZW4uc2V0QnJ1c2goUUJydXNoKCpncmFkaWVudCkpOwogICAg
ICAgICBwLT5zZXRQZW4ocGVuKTsKICAgICAgICAgcC0+c3Ryb2tlUGF0aChwYXRoLCBwZW4pOwog
ICAgICAgICBicmVhazsKSW5kZXg6IFdlYkNvcmUvc3ZnL0dyYWRpZW50QXR0cmlidXRlcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL0dyYWRpZW50QXR0cmlidXRlcy5oCShyZXZpc2lvbiAz
NzA2NCkKKysrIFdlYkNvcmUvc3ZnL0dyYWRpZW50QXR0cmlidXRlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNywxMiArMzcsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgewogICAgICAg
ICB9CiAKLSAgICAgICAgU1ZHR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkgY29u
c3QgeyByZXR1cm4gbV9zcHJlYWRNZXRob2Q7IH0KKyAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRo
b2Qgc3ByZWFkTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9zcHJlYWRNZXRob2Q7IH0KICAgICAg
ICAgYm9vbCBib3VuZGluZ0JveE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kaW5nQm94TW9k
ZTsgfQogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRUcmFuc2Zvcm0oKSBjb25zdCB7
IHJldHVybiBtX2dyYWRpZW50VHJhbnNmb3JtOyB9CiAgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdH
cmFkaWVudFN0b3A+JiBzdG9wcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHM7IH0KIAotICAgICAg
ICB2b2lkIHNldFNwcmVhZE1ldGhvZChTVkdHcmFkaWVudFNwcmVhZE1ldGhvZCB2YWx1ZSkgeyBt
X3NwcmVhZE1ldGhvZCA9IHZhbHVlOyBtX3NwcmVhZE1ldGhvZFNldCA9IHRydWU7IH0KKyAgICAg
ICAgdm9pZCBzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRTcHJlYWRNZXRob2QgdmFsdWUpIHsgbV9z
cHJlYWRNZXRob2QgPSB2YWx1ZTsgbV9zcHJlYWRNZXRob2RTZXQgPSB0cnVlOyB9CiAgICAgICAg
IHZvaWQgc2V0Qm91bmRpbmdCb3hNb2RlKGJvb2wgdmFsdWUpIHsgbV9ib3VuZGluZ0JveE1vZGUg
PSB2YWx1ZTsgbV9ib3VuZGluZ0JveE1vZGVTZXQgPSB0cnVlOyB9CiAgICAgICAgIHZvaWQgc2V0
R3JhZGllbnRUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB2YWx1ZSkgeyBtX2dyYWRp
ZW50VHJhbnNmb3JtID0gdmFsdWU7IG1fZ3JhZGllbnRUcmFuc2Zvcm1TZXQgPSB0cnVlOyB9CiAg
ICAgICAgIHZvaWQgc2V0U3RvcHMoY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mIHZhbHVl
KSB7IG1fc3RvcHMgPSB2YWx1ZTsgbV9zdG9wc1NldCA9IHRydWU7IH0gCkBAIC01NCw3ICs1NCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBQcm9wZXJ0
aWVzCi0gICAgICAgIFNWR0dyYWRpZW50U3ByZWFkTWV0aG9kIG1fc3ByZWFkTWV0aG9kOworICAg
ICAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZDsKICAgICAgICAgYm9vbCBt
X2JvdW5kaW5nQm94TW9kZTsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1fZ3JhZGllbnRUcmFu
c2Zvcm07CiAgICAgICAgIFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+IG1fc3RvcHM7CkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDM3MDY0KQor
KysgV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA1LDcgKzEwNSw3IEBAIExpbmVhckdyYWRpZW50QXR0cmlidXRlcyBTVkdMaW5lYXJH
cmFkaWUKIAogICAgIHdoaWxlIChjdXJyZW50KSB7CiAgICAgICAgIGlmICghYXR0cmlidXRlcy5o
YXNTcHJlYWRNZXRob2QoKSAmJiBjdXJyZW50LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnNwcmVh
ZE1ldGhvZEF0dHIpKQotICAgICAgICAgICAgYXR0cmlidXRlcy5zZXRTcHJlYWRNZXRob2QoKFNW
R0dyYWRpZW50U3ByZWFkTWV0aG9kKSBjdXJyZW50LT5zcHJlYWRNZXRob2QoKSk7CisgICAgICAg
ICAgICBhdHRyaWJ1dGVzLnNldFNwcmVhZE1ldGhvZCgoR3JhZGllbnRTcHJlYWRNZXRob2QpIGN1
cnJlbnQtPnNwcmVhZE1ldGhvZCgpKTsKIAogICAgICAgICBpZiAoIWF0dHJpYnV0ZXMuaGFzQm91
bmRpbmdCb3hNb2RlKCkgJiYgY3VycmVudC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpncmFkaWVu
dFVuaXRzQXR0cikpCiAgICAgICAgICAgICBhdHRyaWJ1dGVzLnNldEJvdW5kaW5nQm94TW9kZShj
dXJyZW50LT5ncmFkaWVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09C
SkVDVEJPVU5ESU5HQk9YKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVt
ZW50LmNwcAkocmV2aXNpb24gMzcwNjQpCisrKyBXZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVu
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgUmFkaWFsR3Jh
ZGllbnRBdHRyaWJ1dGVzIFNWR1JhZGlhbEdyYWRpZQogCiAgICAgd2hpbGUgKGN1cnJlbnQpIHsK
ICAgICAgICAgaWYgKCFhdHRyaWJ1dGVzLmhhc1NwcmVhZE1ldGhvZCgpICYmIGN1cnJlbnQtPmhh
c0F0dHJpYnV0ZShTVkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0cikpCi0gICAgICAgICAgICBhdHRy
aWJ1dGVzLnNldFNwcmVhZE1ldGhvZCgoU1ZHR3JhZGllbnRTcHJlYWRNZXRob2QpIGN1cnJlbnQt
PnNwcmVhZE1ldGhvZCgpKTsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMuc2V0U3ByZWFkTWV0aG9k
KChHcmFkaWVudFNwcmVhZE1ldGhvZCkgY3VycmVudC0+c3ByZWFkTWV0aG9kKCkpOwogCiAgICAg
ICAgIGlmICghYXR0cmlidXRlcy5oYXNCb3VuZGluZ0JveE1vZGUoKSAmJiBjdXJyZW50LT5oYXNB
dHRyaWJ1dGUoU1ZHTmFtZXM6OmdyYWRpZW50VW5pdHNBdHRyKSkKICAgICAgICAgICAgIGF0dHJp
YnV0ZXMuc2V0Qm91bmRpbmdCb3hNb2RlKGN1cnJlbnQtPmdyYWRpZW50VW5pdHMoKSA9PSBTVkdV
bml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOwpJbmRleDogV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAJKHJldmlzaW9u
IDM3MDY0KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBTVkdHcmFkaWVudFNw
cmVhZE1ldGhvZCBtKQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgR3Jh
ZGllbnRTcHJlYWRNZXRob2QgbSkKIHsKICAgICBzd2l0Y2ggKG0pIHsKICAgICAgICAgY2FzZSBT
UFJFQURNRVRIT0RfUEFEOgpAQCAtOTEsMTIgKzkxLDEyIEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudDo6c2V0R3JhZGllbnQKICAgICBtX3N0b3BzID0gc3RvcHM7CiB9CiAKLVNWR0dyYWRp
ZW50U3ByZWFkTWV0aG9kIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNwcmVhZE1ldGhvZCgpIGNv
bnN0CitHcmFkaWVudFNwcmVhZE1ldGhvZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzcHJlYWRN
ZXRob2QoKSBjb25zdAogewogICAgIHJldHVybiBtX3NwcmVhZE1ldGhvZDsKIH0KIAotdm9pZCBT
VkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVudFNwcmVhZE1ldGhvZChjb25zdCBTVkdH
cmFkaWVudFNwcmVhZE1ldGhvZCYgbWV0aG9kKQordm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50
OjpzZXRHcmFkaWVudFNwcmVhZE1ldGhvZChjb25zdCBHcmFkaWVudFNwcmVhZE1ldGhvZCYgbWV0
aG9kKQogewogICAgIG1fc3ByZWFkTWV0aG9kID0gbWV0aG9kOwogfQpJbmRleDogV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaAkocmV2aXNpb24gMzcwNjQp
CisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5o
IgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIKIAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBA
IC00NywxMyArNDgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSW1hZ2VCdWZm
ZXI7CiAgICAgY2xhc3MgU1ZHR3JhZGllbnRFbGVtZW50OwogCi0gICAgLy8gRklYTUU6IFJlbW92
ZSB0aGUgc3ByZWFkIG1ldGhvZCBlbnVtIGluIFNWR0dyYWRpZW50RWxlbWVudAotICAgIGVudW0g
U1ZHR3JhZGllbnRTcHJlYWRNZXRob2QgewotICAgICAgICBTUFJFQURNRVRIT0RfUEFEID0gMSwK
LSAgICAgICAgU1BSRUFETUVUSE9EX1JFRkxFQ1QgPSAyLAotICAgICAgICBTUFJFQURNRVRIT0Rf
UkVQRUFUID0gMwotICAgIH07Ci0KICNpZiBQTEFURk9STShDRykKICAgICB0eXBlZGVmIHN0ZDo6
cGFpcjxDR0Zsb2F0LCBDb2xvcj4gU1ZHR3JhZGllbnRTdG9wOwogI2Vsc2UKQEAgLTY4LDggKzYy
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBWZWN0b3I8U1ZHR3JhZGll
bnRTdG9wPiYgZ3JhZGllbnRTdG9wcygpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEdyYWRpZW50
U3RvcHMoY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mKTsKIAotICAgICAgICBTVkdHcmFk
aWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRH
cmFkaWVudFNwcmVhZE1ldGhvZChjb25zdCBTVkdHcmFkaWVudFNwcmVhZE1ldGhvZCYpOworICAg
ICAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QoKSBjb25zdDsKKyAgICAgICAg
dm9pZCBzZXRHcmFkaWVudFNwcmVhZE1ldGhvZChjb25zdCBHcmFkaWVudFNwcmVhZE1ldGhvZCYp
OwogCiAgICAgICAgIC8vIEdyYWRpZW50IHN0YXJ0IGFuZCBlbmQgcG9pbnRzIGFyZSBwZXJjZW50
YWdlcyB3aGVuIHVzZWQgaW4gYm91bmRpbmdCb3ggbW9kZS4KICAgICAgICAgLy8gRm9yIGluc3Rh
bmNlIHN0YXJ0IHBvaW50IHdpdGggdmFsdWUgKDAsMCkgaXMgdG9wLWxlZnQgYW5kIGVuZCBwb2lu
dCB3aXRoCkBAIC0xMDYsNyArMTAwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAK
ICAgICBwcml2YXRlOgogICAgICAgICBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiBtX3N0b3BzOwot
ICAgICAgICBTVkdHcmFkaWVudFNwcmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZDsKKyAgICAgICAg
R3JhZGllbnRTcHJlYWRNZXRob2QgbV9zcHJlYWRNZXRob2Q7CiAgICAgICAgIGJvb2wgbV9ib3Vu
ZGluZ0JveE1vZGU7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX2dyYWRpZW50VHJhbnNmb3Jt
OwogICAgICAgICBjb25zdCBTVkdHcmFkaWVudEVsZW1lbnQqIG1fb3duZXJFbGVtZW50Owo=
</data>
<flag name="review"
          id="10816"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24025</attachid>
            <date>2008-10-02 11:58:06 -0700</date>
            <delta_ts>2008-10-15 10:02:36 -0700</delta_ts>
            <desc>Move gradient spread method to GraphicsContext</desc>
            <filename>SVGPaintServer-gradient-spread2.patch</filename>
            <type>text/plain</type>
            <size>19862</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNzIwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDgtMTAtMDIgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlZCBn
cmFkaWVudCBzcHJlYWQgbWV0aG9kIG91dCBvZiBTVkcgaW50byB0aGUgR3JhcGhpY3NDb250ZXh0
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3ByZWFkTWV0aG9kKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3ByZWFkTWV0aG9kKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5U3ByZWFkTWV0aG9kKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBseVNwcmVhZE1ldGhv
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgICogc3Zn
L0dyYWRpZW50QXR0cmlidXRlcy5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRBdHRyaWJ1
dGVzOjpHcmFkaWVudEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRBdHRy
aWJ1dGVzOjpzcHJlYWRNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRBdHRyaWJ1
dGVzOjpzZXRTcHJlYWRNZXRob2QpOgorICAgICAgICAqIHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50Ojpjb2xsZWN0R3JhZGllbnRQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKiBzdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6Y29sbGVjdEdyYWRpZW50UHJvcGVydGllcyk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZl
ckdyYWRpZW50OjpTVkdQYWludFNlcnZlckdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhaW50U2VydmVyR3JhZGllbnQ6OnNwcmVhZE1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVudFNwcmVhZE1ldGhvZCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5oOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlckdyYWRpZW50Q2Fpcm8uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXApOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlckdyYWRpZW50UXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXApOgorCiAyMDA4LTEw
LTAyICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQW5kZXJzIENhcmxzc29uIGFuZCBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDM3MDY0KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODksNiArMTg5LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUnVs
ZShXaW5kUnUKICAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUgPSBmaWxsUnVsZTsKIH0KIAor
R3JhZGllbnRTcHJlYWRNZXRob2QgR3JhcGhpY3NDb250ZXh0OjpzcHJlYWRNZXRob2QoKSBjb25z
dAoreworICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc3ByZWFkTWV0aG9kOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0aG9kIHNw
cmVhZE1ldGhvZCkKK3sKKyAgICBtX2NvbW1vbi0+c3RhdGUuc3ByZWFkTWV0aG9kID0gc3ByZWFk
TWV0aG9kOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikKIHsKICAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yU3BhY2UgPSBTb2xp
ZENvbG9yU3BhY2U7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgJKHJldmlzaW9uIDM3MDY0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDYgKzEyNSwxMiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEludGVycG9sYXRpb25IaWdoCiAgICAgfTsKIAorICAg
IGVudW0gR3JhZGllbnRTcHJlYWRNZXRob2QgeworICAgICAgICBTcHJlYWRNZXRob2RQYWQgPSAx
LAorICAgICAgICBTcHJlYWRNZXRob2RSZWZsZWN0ID0gMiwKKyAgICAgICAgU3ByZWFkTWV0aG9k
UmVwZWF0ID0gMworICAgIH07CisKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQgOiBOb25jb3B5
YWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqKTsKQEAgLTE0Niw2ICsxNTIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRGaWxs
UnVsZShXaW5kUnVsZSk7CisgICAgICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhv
ZCgpIGNvbnN0OworICAgICAgICB2b2lkIHNldFNwcmVhZE1ldGhvZChHcmFkaWVudFNwcmVhZE1l
dGhvZCk7CiAgICAgICAgIENvbG9yIGZpbGxDb2xvcigpIGNvbnN0OwogICAgICAgICB2b2lkIHNl
dEZpbGxDb2xvcihjb25zdCBDb2xvciYpOwogICAgICAgICB2b2lkIHNldEZpbGxQYXR0ZXJuKFBh
c3NSZWZQdHI8UGF0dGVybj4pOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgJKHJldmlzaW9uIDM3MDY0KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcxLDYgKzcxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8
UGF0dGVybj4gc3Ryb2tlUGF0dGVybjsKICAgICAgICAgCiAgICAgICAgIFdpbmRSdWxlIGZpbGxS
dWxlOworICAgICAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2Q7CiAgICAgICAg
IENvbG9yU3BhY2UgZmlsbENvbG9yU3BhY2U7CiAgICAgICAgIENvbG9yIGZpbGxDb2xvcjsKICAg
ICAgICAgUmVmUHRyPEdyYWRpZW50PiBmaWxsR3JhZGllbnQ7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cAkocmV2aXNpb24gMzcwNjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMjUgQEAg
c3RhdGljIGlubGluZSB2b2lkIGZpbGxSZWN0U291cmNlT3ZlcihjYQogICAgIGNhaXJvX2ZpbGwo
Y3IpOwogfQogCitzdGF0aWMgaW5saW5lIGNhaXJvX3BhdHRlcm5fdCogYXBwbHlTcHJlYWRNZXRo
b2QoY2Fpcm9fcGF0dGVybl90KiBwYXR0ZXJuLCBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRN
ZXRob2QpCit7CisgICAgc3dpdGNoIChzcHJlYWRNZXRob2QpIHsKKyAgICAgICAgY2FzZSBTcHJl
YWRNZXRob2RQYWQ6CisgICAgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJu
LCBDQUlST19FWFRFTkRfUEFEKTsKKyAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3By
ZWFkTWV0aG9kUmVmbGVjdDoKKyAgICAgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChw
YXR0ZXJuLCBDQUlST19FWFRFTkRfUkVGTEVDVCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTcHJlYWRNZXRob2RSZXBlYXQ6CisgICAgICAgICAgICBjYWlyb19wYXR0ZXJuX3Nl
dF9leHRlbmQocGF0dGVybiwgQ0FJUk9fRVhURU5EX1JFUEVBVCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVu
ZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfTk9ORSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisgICAgcmV0dXJuIHBhdHRlcm47Cit9CisKIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjcikKICAgICA6IG1fY29tbW9uKGNyZWF0ZUdy
YXBoaWNzQ29udGV4dFByaXZhdGUoKSkKICAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKQpAQCAtNDM2LDcgKzQ1NSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aCgpCiAgICAgICAgIGNhaXJvX3BhaW50X3dpdGhfYWxwaGEoY3IsIG1fZGF0YS0+
Z2xvYmFsQWxwaGEpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFj
ZToKLSAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFk
aWVudC5nZXQoKS0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgY2Fpcm9fcGF0dGVybl90
KiBwYXR0ZXJuID0gbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5nZXQoKS0+cGxhdGZvcm1H
cmFkaWVudCgpOworICAgICAgICBwYXR0ZXJuID0gYXBwbHlTcHJlYWRNZXRob2QocGF0dGVybiwg
c3ByZWFkTWV0aG9kKCkpOworICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsK
ICAgICAgICAgY2Fpcm9fY2xpcChjcik7CiAgICAgICAgIGNhaXJvX3BhaW50X3dpdGhfYWxwaGEo
Y3IsIG1fZGF0YS0+Z2xvYmFsQWxwaGEpOwogICAgICAgICBicmVhazsKQEAgLTQ3Myw3ICs0OTQs
OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCiAgICAgICAgIGNhaXJvX3N0
cm9rZShjcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgot
ICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGll
bnQuZ2V0KCktPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIGNhaXJvX3BhdHRlcm5fdCog
cGF0dGVybiA9IG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKS0+cGxhdGZvcm1H
cmFkaWVudCgpOworICAgICAgICBwYXR0ZXJuID0gYXBwbHlTcHJlYWRNZXRob2QocGF0dGVybiwg
c3ByZWFkTWV0aG9kKCkpOworICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsK
ICAgICAgICAgaWYgKG1fZGF0YS0+Z2xvYmFsQWxwaGEgPCAxLjBmKSB7CiAgICAgICAgICAgICBj
YWlyb19wdXNoX2dyb3VwKGNyKTsKICAgICAgICAgICAgIGNhaXJvX3BhaW50X3dpdGhfYWxwaGEo
Y3IsIG1fZGF0YS0+Z2xvYmFsQWxwaGEpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHJldmlzaW9uIDM3MDY0KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcsNiArNyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBEaXJrIFNjaHVsemUgPHZiczg1
QGdteC5kZT4KICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTUxLDYgKzUyLDcg
QEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCiAjaW5jbHVkZSA8UURlYnVnPgorI2lu
Y2x1ZGUgPFFHcmFkaWVudD4KICNpbmNsdWRlIDxRUGFpbnRlcj4KICNpbmNsdWRlIDxRUGFpbnRE
ZXZpY2U+CiAjaW5jbHVkZSA8UVBhaW50RW5naW5lPgpAQCAtMTUwLDYgKzE1MiwyMiBAQCBzdGF0
aWMgUXQ6OlBlblN0eWxlIHRvUVBlblN0eWxlKFN0cm9rZVN0CiAgICAgcmV0dXJuIFF0OjpOb1Bl
bjsKIH0KIAorc3RhdGljIGlubGluZSBRR3JhZGllbnQgYXBwbHlTcHJlYWRNZXRob2QoUUdyYWRp
ZW50IGdyYWRpZW50LCBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QpCit7CisgICAg
c3dpdGNoIChzcHJlYWRNZXRob2QpIHsKKyAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RQYWQ6Cisg
ICAgICAgICAgICBncmFkaWVudC5zZXRTcHJlYWQoUUdyYWRpZW50OjpQYWRTcHJlYWQpOworICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RSZWZsZWN0OgorICAgICAg
ICAgICAgZ3JhZGllbnQuc2V0U3ByZWFkKFFHcmFkaWVudDo6UmVmbGVjdFNwcmVhZCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RSZXBlYXQ6CisgICAgICAg
ICAgICBncmFkaWVudC5zZXRTcHJlYWQoUUdyYWRpZW50OjpSZXBlYXRTcHJlYWQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBncmFkaWVudDsKK30KKwogc3RydWN0IFRy
YW5zcGFyZW5jeUxheWVyCiB7CiAgICAgVHJhbnNwYXJlbmN5TGF5ZXIoY29uc3QgUVBhaW50ZXIq
IHAsIGNvbnN0IFFSZWN0ICZyZWN0KQpAQCAtNTE1LDcgKzUzMyw5IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUGF0aCgpCiAgICAgICAgIHAtPmZpbGxQYXRoKHBhdGgsIFFCcnVzaChtX2Nv
bW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRD
VE0oKSkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFkaWVudENvbG9yU3BhY2U6Ci0g
ICAgICAgIHAtPmZpbGxQYXRoKHBhdGgsIFFCcnVzaCgqKG1fY29tbW9uLT5zdGF0ZS5maWxsR3Jh
ZGllbnQuZ2V0KCktPnBsYXRmb3JtR3JhZGllbnQoKSkpKTsKKyAgICAgICAgUUdyYWRpZW50KiBn
cmFkaWVudCA9IG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCktPnBsYXRmb3JtR3Jh
ZGllbnQoKTsKKyAgICAgICAgKmdyYWRpZW50ID0gYXBwbHlTcHJlYWRNZXRob2QoKmdyYWRpZW50
LCBzcHJlYWRNZXRob2QoKSk7ICAKKyAgICAgICAgcC0+ZmlsbFBhdGgocGF0aCwgUUJydXNoKCpn
cmFkaWVudCkpOwogICAgICAgICBicmVhazsKICAgICB9CiB9CkBAIC01NDEsNyArNTYxLDkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgY2FzZSBHcmFkaWVudENvbG9yU3BhY2U6IHsKLSAgICAgICAgcGVuLnNldEJydXNoKFFC
cnVzaCgqKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKS0+cGxhdGZvcm1HcmFk
aWVudCgpKSkpOworICAgICAgICBRR3JhZGllbnQqIGdyYWRpZW50ID0gbV9jb21tb24tPnN0YXRl
LnN0cm9rZUdyYWRpZW50LmdldCgpLT5wbGF0Zm9ybUdyYWRpZW50KCk7CisgICAgICAgICpncmFk
aWVudCA9IGFwcGx5U3ByZWFkTWV0aG9kKCpncmFkaWVudCwgc3ByZWFkTWV0aG9kKCkpOyAKKyAg
ICAgICAgcGVuLnNldEJydXNoKFFCcnVzaCgqZ3JhZGllbnQpKTsKICAgICAgICAgcC0+c2V0UGVu
KHBlbik7CiAgICAgICAgIHAtPnN0cm9rZVBhdGgocGF0aCwgcGVuKTsKICAgICAgICAgYnJlYWs7
CkluZGV4OiBXZWJDb3JlL3N2Zy9HcmFkaWVudEF0dHJpYnV0ZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9HcmFkaWVudEF0dHJpYnV0ZXMuaAkocmV2aXNpb24gMzcwNjQpCisrKyBXZWJD
b3JlL3N2Zy9HcmFkaWVudEF0dHJpYnV0ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogewogICAgIHN0cnVjdCBHcmFkaWVudEF0dHJpYnV0ZXMg
ewogICAgICAgICBHcmFkaWVudEF0dHJpYnV0ZXMoKQotICAgICAgICAgICAgOiBtX3NwcmVhZE1l
dGhvZChTUFJFQURNRVRIT0RfUEFEKQorICAgICAgICAgICAgOiBtX3NwcmVhZE1ldGhvZChTcHJl
YWRNZXRob2RQYWQpCiAgICAgICAgICAgICAsIG1fYm91bmRpbmdCb3hNb2RlKHRydWUpCiAgICAg
ICAgICAgICAsIG1fc3ByZWFkTWV0aG9kU2V0KGZhbHNlKQogICAgICAgICAgICAgLCBtX2JvdW5k
aW5nQm94TW9kZVNldChmYWxzZSkKQEAgLTM3LDEyICszNywxMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBTVkdHcmFkaWVudFNwcmVhZE1ldGhv
ZCBzcHJlYWRNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX3NwcmVhZE1ldGhvZDsgfQorICAgICAg
ICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX3Nw
cmVhZE1ldGhvZDsgfQogICAgICAgICBib29sIGJvdW5kaW5nQm94TW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYm91bmRpbmdCb3hNb2RlOyB9CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBncmFkaWVu
dFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhZGllbnRUcmFuc2Zvcm07IH0KICAgICAg
ICAgY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mIHN0b3BzKCkgY29uc3QgeyByZXR1cm4g
bV9zdG9wczsgfQogCi0gICAgICAgIHZvaWQgc2V0U3ByZWFkTWV0aG9kKFNWR0dyYWRpZW50U3By
ZWFkTWV0aG9kIHZhbHVlKSB7IG1fc3ByZWFkTWV0aG9kID0gdmFsdWU7IG1fc3ByZWFkTWV0aG9k
U2V0ID0gdHJ1ZTsgfQorICAgICAgICB2b2lkIHNldFNwcmVhZE1ldGhvZChHcmFkaWVudFNwcmVh
ZE1ldGhvZCB2YWx1ZSkgeyBtX3NwcmVhZE1ldGhvZCA9IHZhbHVlOyBtX3NwcmVhZE1ldGhvZFNl
dCA9IHRydWU7IH0KICAgICAgICAgdm9pZCBzZXRCb3VuZGluZ0JveE1vZGUoYm9vbCB2YWx1ZSkg
eyBtX2JvdW5kaW5nQm94TW9kZSA9IHZhbHVlOyBtX2JvdW5kaW5nQm94TW9kZVNldCA9IHRydWU7
IH0KICAgICAgICAgdm9pZCBzZXRHcmFkaWVudFRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHZhbHVlKSB7IG1fZ3JhZGllbnRUcmFuc2Zvcm0gPSB2YWx1ZTsgbV9ncmFkaWVudFRyYW5z
Zm9ybVNldCA9IHRydWU7IH0KICAgICAgICAgdm9pZCBzZXRTdG9wcyhjb25zdCBWZWN0b3I8U1ZH
R3JhZGllbnRTdG9wPiYgdmFsdWUpIHsgbV9zdG9wcyA9IHZhbHVlOyBtX3N0b3BzU2V0ID0gdHJ1
ZTsgfSAKQEAgLTU0LDcgKzU0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIC8vIFByb3BlcnRpZXMKLSAgICAgICAgU1ZHR3JhZGllbnRTcHJlYWRNZXRob2Qg
bV9zcHJlYWRNZXRob2Q7CisgICAgICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIG1fc3ByZWFkTWV0
aG9kOwogICAgICAgICBib29sIG1fYm91bmRpbmdCb3hNb2RlOwogICAgICAgICBBZmZpbmVUcmFu
c2Zvcm0gbV9ncmFkaWVudFRyYW5zZm9ybTsKICAgICAgICAgVmVjdG9yPFNWR0dyYWRpZW50U3Rv
cD4gbV9zdG9wczsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24g
MzcwNjQpCisrKyBXZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OSwxMSArNjksMTEgQEAgdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cgogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnNwcmVhZE1ldGhvZEF0dHIpIHsKICAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gInJl
ZmxlY3QiKQotICAgICAgICAgICAgc2V0U3ByZWFkTWV0aG9kQmFzZVZhbHVlKFNWR19TUFJFQURN
RVRIT0RfUkVGTEVDVCk7CisgICAgICAgICAgICBzZXRTcHJlYWRNZXRob2RCYXNlVmFsdWUoU3By
ZWFkTWV0aG9kUmVmbGVjdCk7CiAgICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gInJl
cGVhdCIpCi0gICAgICAgICAgICBzZXRTcHJlYWRNZXRob2RCYXNlVmFsdWUoU1ZHX1NQUkVBRE1F
VEhPRF9SRVBFQVQpOworICAgICAgICAgICAgc2V0U3ByZWFkTWV0aG9kQmFzZVZhbHVlKFNwcmVh
ZE1ldGhvZFJlcGVhdCk7CiAgICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gInBhZCIp
Ci0gICAgICAgICAgICBzZXRTcHJlYWRNZXRob2RCYXNlVmFsdWUoU1ZHX1NQUkVBRE1FVEhPRF9Q
QUQpOworICAgICAgICAgICAgc2V0U3ByZWFkTWV0aG9kQmFzZVZhbHVlKFNwcmVhZE1ldGhvZFBh
ZCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdHcmFkaWVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdHcmFk
aWVudEVsZW1lbnQuaAkocmV2aXNpb24gMzcwNjQpCisrKyBXZWJDb3JlL3N2Zy9TVkdHcmFkaWVu
dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdVUklSZWZl
cmVuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQgewogICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBTVkdHcmFkaWVu
dFR5cGUgewotICAgICAgICAgICAgU1ZHX1NQUkVBRE1FVEhPRF9VTktOT1dOID0gMCwKLSAgICAg
ICAgICAgIFNWR19TUFJFQURNRVRIT0RfUEFEICAgICA9IDEsCi0gICAgICAgICAgICBTVkdfU1BS
RUFETUVUSE9EX1JFRkxFQ1QgPSAyLAotICAgICAgICAgICAgU1ZHX1NQUkVBRE1FVEhPRF9SRVBF
QVQgID0gMwotICAgICAgICB9OwotCiAgICAgICAgIFNWR0dyYWRpZW50RWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAgICAgdmlydHVhbCB+U1ZHR3JhZGllbnRF
bGVtZW50KCk7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNw
cAkocmV2aXNpb24gMzcwNjQpCisrKyBXZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgTGluZWFyR3JhZGllbnRB
dHRyaWJ1dGVzIFNWR0xpbmVhckdyYWRpZQogCiAgICAgd2hpbGUgKGN1cnJlbnQpIHsKICAgICAg
ICAgaWYgKCFhdHRyaWJ1dGVzLmhhc1NwcmVhZE1ldGhvZCgpICYmIGN1cnJlbnQtPmhhc0F0dHJp
YnV0ZShTVkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0cikpCi0gICAgICAgICAgICBhdHRyaWJ1dGVz
LnNldFNwcmVhZE1ldGhvZCgoU1ZHR3JhZGllbnRTcHJlYWRNZXRob2QpIGN1cnJlbnQtPnNwcmVh
ZE1ldGhvZCgpKTsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMuc2V0U3ByZWFkTWV0aG9kKChHcmFk
aWVudFNwcmVhZE1ldGhvZCkgY3VycmVudC0+c3ByZWFkTWV0aG9kKCkpOwogCiAgICAgICAgIGlm
ICghYXR0cmlidXRlcy5oYXNCb3VuZGluZ0JveE1vZGUoKSAmJiBjdXJyZW50LT5oYXNBdHRyaWJ1
dGUoU1ZHTmFtZXM6OmdyYWRpZW50VW5pdHNBdHRyKSkKICAgICAgICAgICAgIGF0dHJpYnV0ZXMu
c2V0Qm91bmRpbmdCb3hNb2RlKGN1cnJlbnQtPmdyYWRpZW50VW5pdHMoKSA9PSBTVkdVbml0VHlw
ZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOwpJbmRleDogV2ViQ29yZS9zdmcv
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9T
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNzA2NCkKKysrIFdlYkNvcmUv
c3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3
ICsxMTQsNyBAQCBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMgU1ZHUmFkaWFsR3JhZGllCiAKICAg
ICB3aGlsZSAoY3VycmVudCkgewogICAgICAgICBpZiAoIWF0dHJpYnV0ZXMuaGFzU3ByZWFkTWV0
aG9kKCkgJiYgY3VycmVudC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpzcHJlYWRNZXRob2RBdHRy
KSkKLSAgICAgICAgICAgIGF0dHJpYnV0ZXMuc2V0U3ByZWFkTWV0aG9kKChTVkdHcmFkaWVudFNw
cmVhZE1ldGhvZCkgY3VycmVudC0+c3ByZWFkTWV0aG9kKCkpOworICAgICAgICAgICAgYXR0cmli
dXRlcy5zZXRTcHJlYWRNZXRob2QoKEdyYWRpZW50U3ByZWFkTWV0aG9kKSBjdXJyZW50LT5zcHJl
YWRNZXRob2QoKSk7CiAKICAgICAgICAgaWYgKCFhdHRyaWJ1dGVzLmhhc0JvdW5kaW5nQm94TW9k
ZSgpICYmIGN1cnJlbnQtPmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6Z3JhZGllbnRVbml0c0F0dHIp
KQogICAgICAgICAgICAgYXR0cmlidXRlcy5zZXRCb3VuZGluZ0JveE1vZGUoY3VycmVudC0+Z3Jh
ZGllbnRVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElO
R0JPWCk7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdy
YWRpZW50LmNwcAkocmV2aXNpb24gMzcwNjQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQ
YWludFNlcnZlckdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTQgKzMzLDE0IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgU1ZHR3JhZGllbnRTcHJlYWRNZXRob2QgbSkKK1RleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIEdyYWRpZW50U3ByZWFkTWV0aG9kIG0pCiB7CiAgICAgc3dpdGNo
IChtKSB7Ci0gICAgICAgIGNhc2UgU1BSRUFETUVUSE9EX1BBRDoKKyAgICAgICAgY2FzZSBTcHJl
YWRNZXRob2RQYWQ6CiAgICAgICAgICAgICB0cyA8PCAiUEFEIjsgYnJlYWs7Ci0gICAgICAgIGNh
c2UgU1BSRUFETUVUSE9EX1JFUEVBVDoKKyAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RSZXBlYXQ6
CiAgICAgICAgICAgICB0cyA8PCAiUkVQRUFUIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1BSRUFE
TUVUSE9EX1JFRkxFQ1Q6CisgICAgICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVmbGVjdDoKICAgICAg
ICAgICAgIHRzIDw8ICJSRUZMRUNUIjsgYnJlYWs7CiAgICAgfQogCkBAIC02MCw3ICs2MCw3IEBA
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGMKIH0KIAogU1ZHUGFpbnRT
ZXJ2ZXJHcmFkaWVudDo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudChjb25zdCBTVkdHcmFkaWVudEVs
ZW1lbnQqIG93bmVyKQotICAgIDogbV9zcHJlYWRNZXRob2QoU1BSRUFETUVUSE9EX1BBRCkKKyAg
ICA6IG1fc3ByZWFkTWV0aG9kKFNwcmVhZE1ldGhvZFBhZCkKICAgICAsIG1fYm91bmRpbmdCb3hN
b2RlKHRydWUpCiAgICAgLCBtX293bmVyRWxlbWVudChvd25lcikKIApAQCAtOTEsMTIgKzkxLDEy
IEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0R3JhZGllbnQKICAgICBtX3N0b3Bz
ID0gc3RvcHM7CiB9CiAKLVNWR0dyYWRpZW50U3ByZWFkTWV0aG9kIFNWR1BhaW50U2VydmVyR3Jh
ZGllbnQ6OnNwcmVhZE1ldGhvZCgpIGNvbnN0CitHcmFkaWVudFNwcmVhZE1ldGhvZCBTVkdQYWlu
dFNlcnZlckdyYWRpZW50OjpzcHJlYWRNZXRob2QoKSBjb25zdAogewogICAgIHJldHVybiBtX3Nw
cmVhZE1ldGhvZDsKIH0KIAotdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVu
dFNwcmVhZE1ldGhvZChjb25zdCBTVkdHcmFkaWVudFNwcmVhZE1ldGhvZCYgbWV0aG9kKQordm9p
ZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVudFNwcmVhZE1ldGhvZChjb25zdCBH
cmFkaWVudFNwcmVhZE1ldGhvZCYgbWV0aG9kKQogewogICAgIG1fc3ByZWFkTWV0aG9kID0gbWV0
aG9kOwogfQpAQCAtMTI4LDcgKzEyOCw3IEBAIFRleHRTdHJlYW0mIFNWR1BhaW50U2VydmVyR3Jh
ZGllbnQ6OmV4dGUKIAogICAgIC8vIGFic3RyYWN0LCBkb24ndCBzdHJlYW0gdHlwZQogICAgIHRz
ICA8PCAiW3N0b3BzPSIgPDwgZ3JhZGllbnRTdG9wcygpIDw8ICJdIjsKLSAgICBpZiAoc3ByZWFk
TWV0aG9kKCkgIT0gU1BSRUFETUVUSE9EX1BBRCkKKyAgICBpZiAoc3ByZWFkTWV0aG9kKCkgIT0g
U3ByZWFkTWV0aG9kUGFkKQogICAgICAgICB0cyA8PCAiW21ldGhvZD0iIDw8IHNwcmVhZE1ldGhv
ZCgpIDw8ICJdIjsKICAgICBpZiAoIWJvdW5kaW5nQm94TW9kZSgpKQogICAgICAgICB0cyA8PCAi
IFtib3VuZGluZyBib3ggbW9kZT0iIDw8IGJvdW5kaW5nQm94TW9kZSgpIDw8ICJdIjsKSW5kZXg6
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmgJKHJldmlz
aW9uIDM3MDY0KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyLmgiCiAKICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgpAQCAtNDcsMjAgKzQ4LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBJbWFnZUJ1ZmZlcjsKICAgICBjbGFzcyBTVkdHcmFkaWVudEVsZW1lbnQ7CiAKLSAgICAvLyBG
SVhNRTogUmVtb3ZlIHRoZSBzcHJlYWQgbWV0aG9kIGVudW0gaW4gU1ZHR3JhZGllbnRFbGVtZW50
Ci0gICAgZW51bSBTVkdHcmFkaWVudFNwcmVhZE1ldGhvZCB7Ci0gICAgICAgIFNQUkVBRE1FVEhP
RF9QQUQgPSAxLAotICAgICAgICBTUFJFQURNRVRIT0RfUkVGTEVDVCA9IDIsCi0gICAgICAgIFNQ
UkVBRE1FVEhPRF9SRVBFQVQgPSAzCi0gICAgfTsKLQogI2lmIFBMQVRGT1JNKENHKQogICAgIHR5
cGVkZWYgc3RkOjpwYWlyPENHRmxvYXQsIENvbG9yPiBTVkdHcmFkaWVudFN0b3A7CiAjZWxzZQog
ICAgIHR5cGVkZWYgc3RkOjpwYWlyPGZsb2F0LCBDb2xvcj4gU1ZHR3JhZGllbnRTdG9wOwogI2Vu
ZGlmCiAKLQogICAgIGNsYXNzIFNWR1BhaW50U2VydmVyR3JhZGllbnQgOiBwdWJsaWMgU1ZHUGFp
bnRTZXJ2ZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+U1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudCgpOwpAQCAtNjgsOCArNjEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+JiBncmFkaWVudFN0b3BzKCkgY29uc3Q7CiAg
ICAgICAgIHZvaWQgc2V0R3JhZGllbnRTdG9wcyhjb25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9w
PiYpOwogCi0gICAgICAgIFNWR0dyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCgpIGNv
bnN0OwotICAgICAgICB2b2lkIHNldEdyYWRpZW50U3ByZWFkTWV0aG9kKGNvbnN0IFNWR0dyYWRp
ZW50U3ByZWFkTWV0aG9kJik7CisgICAgICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1l
dGhvZCgpIGNvbnN0OworICAgICAgICB2b2lkIHNldEdyYWRpZW50U3ByZWFkTWV0aG9kKGNvbnN0
IEdyYWRpZW50U3ByZWFkTWV0aG9kJik7CiAKICAgICAgICAgLy8gR3JhZGllbnQgc3RhcnQgYW5k
IGVuZCBwb2ludHMgYXJlIHBlcmNlbnRhZ2VzIHdoZW4gdXNlZCBpbiBib3VuZGluZ0JveCBtb2Rl
LgogICAgICAgICAvLyBGb3IgaW5zdGFuY2Ugc3RhcnQgcG9pbnQgd2l0aCB2YWx1ZSAoMCwwKSBp
cyB0b3AtbGVmdCBhbmQgZW5kIHBvaW50IHdpdGgKQEAgLTEwNiw3ICs5OSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPFNWR0dy
YWRpZW50U3RvcD4gbV9zdG9wczsKLSAgICAgICAgU1ZHR3JhZGllbnRTcHJlYWRNZXRob2QgbV9z
cHJlYWRNZXRob2Q7CisgICAgICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIG1fc3ByZWFkTWV0aG9k
OwogICAgICAgICBib29sIG1fYm91bmRpbmdCb3hNb2RlOwogICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gbV9ncmFkaWVudFRyYW5zZm9ybTsKICAgICAgICAgY29uc3QgU1ZHR3JhZGllbnRFbGVtZW50
KiBtX293bmVyRWxlbWVudDsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1Bh
aW50U2VydmVyR3JhZGllbnRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcAkocmV2aXNpb24gMzcw
NjQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlckdyYWRpZW50
Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTMgKzExNCwxMyBAQCBib29sIFNWR1Bh
aW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoCiAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZmls
dGVyKHBhdHRlcm4sIENBSVJPX0ZJTFRFUl9CSUxJTkVBUik7CiAKICAgICBzd2l0Y2ggKHNwcmVh
ZE1ldGhvZCgpKSB7Ci0gICAgICAgIGNhc2UgU1BSRUFETUVUSE9EX1BBRDoKKyAgICAgICAgY2Fz
ZSBTcHJlYWRNZXRob2RQYWQ6CiAgICAgICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQo
cGF0dGVybiwgQ0FJUk9fRVhURU5EX1BBRCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBTUFJFQURNRVRIT0RfUkVGTEVDVDoKKyAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RSZWZs
ZWN0OgogICAgICAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJP
X0VYVEVORF9SRUZMRUNUKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNQUkVB
RE1FVEhPRF9SRVBFQVQ6CisgICAgICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVwZWF0OgogICAgICAg
ICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9SRVBF
QVQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlckdyYWRpZW50UXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyR3JhZGllbnRRdC5jcHAJ
KHJldmlzaW9uIDM3MDY0KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2
ZXJHcmFkaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsOSArNzAsOSBAQCBib29sIFNW
R1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoCiAgICAgcGFpbnRlci0+c2V0UGVuKFF0
OjpOb1Blbik7CiAgICAgcGFpbnRlci0+c2V0QnJ1c2goUXQ6Ok5vQnJ1c2gpOwogCi0gICAgaWYg
KHNwcmVhZE1ldGhvZCgpID09IFNQUkVBRE1FVEhPRF9SRVBFQVQpCisgICAgaWYgKHNwcmVhZE1l
dGhvZCgpID09IFNwcmVhZE1ldGhvZFJlcGVhdCkKICAgICAgICAgZ3JhZGllbnQuc2V0U3ByZWFk
KFFHcmFkaWVudDo6UmVwZWF0U3ByZWFkKTsKLSAgICBlbHNlIGlmIChzcHJlYWRNZXRob2QoKSA9
PSBTUFJFQURNRVRIT0RfUkVGTEVDVCkKKyAgICBlbHNlIGlmIChzcHJlYWRNZXRob2QoKSA9PSBT
cHJlYWRNZXRob2RSZWZsZWN0KQogICAgICAgICBncmFkaWVudC5zZXRTcHJlYWQoUUdyYWRpZW50
OjpSZWZsZWN0U3ByZWFkKTsKICAgICBlbHNlCiAgICAgICAgIGdyYWRpZW50LnNldFNwcmVhZChR
R3JhZGllbnQ6OlBhZFNwcmVhZCk7ICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24140</attachid>
            <date>2008-10-06 23:13:44 -0700</date>
            <delta_ts>2008-11-15 10:54:12 -0800</delta_ts>
            <desc>Just for testing</desc>
            <filename>SVG-gradients.patch</filename>
            <type>text/plain</type>
            <size>57866</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5jcHAJ
KHJldmlzaW9uIDM3MzE0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BZmZpbmVUcmFu
c2Zvcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTIgKzEzNCwxOCBAQCBBZmZpbmVUcmFu
c2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6c2tld1koCiB7CiAgICAgcmV0dXJuIHNoZWFyKDAuMGYs
IHRhbihkZWcycmFkKGFuZ2xlKSkpOwogfQotCitzdGF0aWMgaW5saW5lIGZsb2F0IG1heChmbG9h
dCBhLCBmbG9hdCBiKQoreworIGlmIChhIDwgYikKKyAgIHJldHVybiBiOworIGVsc2UKKyAgIHJl
dHVybiBhOworfQogQWZmaW5lVHJhbnNmb3JtIG1ha2VNYXBCZXR3ZWVuUmVjdHMoY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdCkKIHsKICAgICBBZmZpbmVUcmFu
c2Zvcm0gdHJhbnNmb3JtOwogICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoZGVzdC54KCkgLSBzb3Vy
Y2UueCgpLCBkZXN0LnkoKSAtIHNvdXJjZS55KCkpOwotICAgIHRyYW5zZm9ybS5zY2FsZShkZXN0
LndpZHRoKCkgLyBzb3VyY2Uud2lkdGgoKSwgZGVzdC5oZWlnaHQoKSAvIHNvdXJjZS5oZWlnaHQo
KSk7CisgICAgdHJhbnNmb3JtLnNjYWxlKG1heChkZXN0LndpZHRoKCkgLyBzb3VyY2Uud2lkdGgo
KSwgMS4wZiksIG1heChkZXN0LmhlaWdodCgpIC8gc291cmNlLmhlaWdodCgpLCAxLjBmKSk7CiAg
ICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0U2l6ZS5oCShyZXZpc2lvbiAzNzMxNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIG1faGVpZ2h0ID4gb3RoZXIubV9oZWlnaHQgPyBtX2hlaWdodCA6IG90aGVyLm1f
aGVpZ2h0KTsKICAgICB9CiAKKyAgICBGbG9hdFNpemUgc2hydW5rVG8oY29uc3QgRmxvYXRTaXpl
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgcmV0dXJuIEZsb2F0U2l6ZShtX3dpZHRoIDwg
b3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAorICAgICAgICAgICBtX2hl
aWdodCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CisgICAg
fQorCiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgZXhwbGljaXQgRmxvYXRTaXplKGNvbnN0IENHU2l6
ZSYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQogICAgIG9w
ZXJhdG9yIENHU2l6ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gMzczMTQpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw2
ICsxODksMTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKFdpbmRSdQogICAg
IG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxlOwogfQogCitHcmFkaWVudFNwcmVh
ZE1ldGhvZCBHcmFwaGljc0NvbnRleHQ6OnNwcmVhZE1ldGhvZCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fY29tbW9uLT5zdGF0ZS5zcHJlYWRNZXRob2Q7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKQor
eworICAgIG1fY29tbW9uLT5zdGF0ZS5zcHJlYWRNZXRob2QgPSBzcHJlYWRNZXRob2Q7Cit9CisK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQog
ewogICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IFNvbGlkQ29sb3JTcGFjZTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2
aXNpb24gMzczMTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgSW50ZXJwb2xhdGlvbkhpZ2gKICAgICB9OwogCisgICAgZW51bSBHcmFkaWVu
dFNwcmVhZE1ldGhvZCB7CisgICAgICAgIFNwcmVhZE1ldGhvZFBhZCA9IDEsCisgICAgICAgIFNw
cmVhZE1ldGhvZFJlZmxlY3QgPSAyLAorICAgICAgICBTcHJlYWRNZXRob2RSZXBlYXQgPSAzCisg
ICAgfTsKKwogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dCA6IE5vbmNvcHlhYmxlIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCop
OwpAQCAtMTQ2LDYgKzE1Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBXaW5k
UnVsZSBmaWxsUnVsZSgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxl
KTsKKyAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkgY29uc3Q7Cisg
ICAgICAgIHZvaWQgc2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0aG9kKTsKICAgICAg
ICAgQ29sb3IgZmlsbENvbG9yKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0RmlsbENvbG9yKGNv
bnN0IENvbG9yJik7CiAgICAgICAgIHZvaWQgc2V0RmlsbFBhdHRlcm4oUGFzc1JlZlB0cjxQYXR0
ZXJuPik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFBy
aXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dFByaXZhdGUuaAkocmV2aXNpb24gMzczMTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiAr
NzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJv
a2VQYXR0ZXJuOwogICAgICAgICAKICAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGU7CisgICAgICAg
IEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZDsKICAgICAgICAgQ29sb3JTcGFjZSBm
aWxsQ29sb3JTcGFjZTsKICAgICAgICAgQ29sb3IgZmlsbENvbG9yOwogICAgICAgICBSZWZQdHI8
R3JhZGllbnQ+IGZpbGxHcmFkaWVudDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiAz
NzMxNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3NywyMiBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgZmlsbFJlY3RTb3VyY2VPdmVyKGNhCiAgICAgY2Fpcm9fZmlsbChjcik7CiB9CiAKK3N0
YXRpYyBpbmxpbmUgY2Fpcm9fcGF0dGVybl90KiBhcHBseVNwcmVhZE1ldGhvZChjYWlyb19wYXR0
ZXJuX3QqIHBhdHRlcm4sIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCkKK3sKKyAg
ICBzd2l0Y2ggKHNwcmVhZE1ldGhvZCkgeworICAgICAgICBjYXNlIFNwcmVhZE1ldGhvZFBhZDoK
KyAgICAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVO
RF9QQUQpOworICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RSZWZs
ZWN0OgorICAgICAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJP
X0VYVEVORF9SRUZMRUNUKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNwcmVh
ZE1ldGhvZFJlcGVhdDoKKyAgICAgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0
ZXJuLCBDQUlST19FWFRFTkRfUkVQRUFUKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gcGF0dGVybjsKK30KKwogR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQo
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNyKQogICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZSgpKQogICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUpCkBAIC00MzYsNyArNDUyLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxQYXRoKCkKICAgICAgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShjciwgbV9kYXRhLT5nbG9i
YWxBbHBoYSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgot
ICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50
LmdldCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBjYWlyb19wYXR0ZXJuX3QqIHBh
dHRlcm4gPSBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpLT5wbGF0Zm9ybUdyYWRp
ZW50KCk7CisgICAgICAgIHBhdHRlcm4gPSBhcHBseVNwcmVhZE1ldGhvZChwYXR0ZXJuLCBzcHJl
YWRNZXRob2QoKSk7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHBhdHRlcm4pOwogICAg
ICAgICBjYWlyb19jbGlwKGNyKTsKICAgICAgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShjciwg
bV9kYXRhLT5nbG9iYWxBbHBoYSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDczLDcgKzQ5MSw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKICAgICAgICAgY2Fpcm9fc3Ryb2tl
KGNyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFkaWVudENvbG9yU3BhY2U6Ci0gICAg
ICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudC5n
ZXQoKS0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgY2Fpcm9fcGF0dGVybl90KiBwYXR0
ZXJuID0gbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpLT5wbGF0Zm9ybUdyYWRp
ZW50KCk7CisgICAgICAgIHBhdHRlcm4gPSBhcHBseVNwcmVhZE1ldGhvZChwYXR0ZXJuLCBzcHJl
YWRNZXRob2QoKSk7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHBhdHRlcm4pOwogICAg
ICAgICBpZiAobV9kYXRhLT5nbG9iYWxBbHBoYSA8IDEuMGYpIHsKICAgICAgICAgICAgIGNhaXJv
X3B1c2hfZ3JvdXAoY3IpOwogICAgICAgICAgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShjciwg
bV9kYXRhLT5nbG9iYWxBbHBoYSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkocmV2aXNpb24gMzczMTQpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNyw2ICs3LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAyMDA4IERpcmsgU2NodWx6ZSA8dmJzODVAZ214
LmRlPgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtNTEsNiArNTIsNyBAQAog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKICNpbmNsdWRlIDxRRGVidWc+CisjaW5jbHVk
ZSA8UUdyYWRpZW50PgogI2luY2x1ZGUgPFFQYWludGVyPgogI2luY2x1ZGUgPFFQYWludERldmlj
ZT4KICNpbmNsdWRlIDxRUGFpbnRFbmdpbmU+CkBAIC0xNTAsNiArMTUyLDIyIEBAIHN0YXRpYyBR
dDo6UGVuU3R5bGUgdG9RUGVuU3R5bGUoU3Ryb2tlU3QKICAgICByZXR1cm4gUXQ6Ok5vUGVuOwog
fQogCitzdGF0aWMgaW5saW5lIFFHcmFkaWVudCBhcHBseVNwcmVhZE1ldGhvZChRR3JhZGllbnQg
Z3JhZGllbnQsIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCkKK3sKKyAgICBzd2l0
Y2ggKHNwcmVhZE1ldGhvZCkgeworICAgICAgICBjYXNlIFNwcmVhZE1ldGhvZFBhZDoKKyAgICAg
ICAgICAgIGdyYWRpZW50LnNldFNwcmVhZChRR3JhZGllbnQ6OlBhZFNwcmVhZCk7CisgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFNwcmVhZE1ldGhvZFJlZmxlY3Q6CisgICAgICAgICAg
ICBncmFkaWVudC5zZXRTcHJlYWQoUUdyYWRpZW50OjpSZWZsZWN0U3ByZWFkKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFNwcmVhZE1ldGhvZFJlcGVhdDoKKyAgICAgICAgICAg
IGdyYWRpZW50LnNldFNwcmVhZChRR3JhZGllbnQ6OlJlcGVhdFNwcmVhZCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGdyYWRpZW50OworfQorCiBzdHJ1Y3QgVHJhbnNw
YXJlbmN5TGF5ZXIKIHsKICAgICBUcmFuc3BhcmVuY3lMYXllcihjb25zdCBRUGFpbnRlciogcCwg
Y29uc3QgUVJlY3QgJnJlY3QpCkBAIC01MTUsNyArNTMzLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKCkKICAgICAgICAgcC0+ZmlsbFBhdGgocGF0aCwgUUJydXNoKG1fY29tbW9u
LT5zdGF0ZS5maWxsUGF0dGVybi5nZXQoKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgp
KSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKLSAgICAg
ICAgcC0+ZmlsbFBhdGgocGF0aCwgUUJydXNoKCoobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVu
dC5nZXQoKS0+cGxhdGZvcm1HcmFkaWVudCgpKSkpOworICAgICAgICBRR3JhZGllbnQqIGdyYWRp
ZW50ID0gbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5nZXQoKS0+cGxhdGZvcm1HcmFkaWVu
dCgpOworICAgICAgICAqZ3JhZGllbnQgPSBhcHBseVNwcmVhZE1ldGhvZCgqZ3JhZGllbnQsIHNw
cmVhZE1ldGhvZCgpKTsgIAorICAgICAgICBwLT5maWxsUGF0aChwYXRoLCBRQnJ1c2goKmdyYWRp
ZW50KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTU0MSw3ICs1NjEsOSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZTogewotICAgICAgICBwZW4uc2V0QnJ1c2goUUJydXNo
KCoobV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpLT5wbGF0Zm9ybUdyYWRpZW50
KCkpKSk7CisgICAgICAgIFFHcmFkaWVudCogZ3JhZGllbnQgPSBtX2NvbW1vbi0+c3RhdGUuc3Ry
b2tlR3JhZGllbnQuZ2V0KCktPnBsYXRmb3JtR3JhZGllbnQoKTsKKyAgICAgICAgKmdyYWRpZW50
ID0gYXBwbHlTcHJlYWRNZXRob2QoKmdyYWRpZW50LCBzcHJlYWRNZXRob2QoKSk7IAorICAgICAg
ICBwZW4uc2V0QnJ1c2goUUJydXNoKCpncmFkaWVudCkpOwogICAgICAgICBwLT5zZXRQZW4ocGVu
KTsKICAgICAgICAgcC0+c3Ryb2tlUGF0aChwYXRoLCBwZW4pOwogICAgICAgICBicmVhazsKSW5k
ZXg6IFdlYkNvcmUvc3ZnL0dyYWRpZW50QXR0cmlidXRlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL0dyYWRpZW50QXR0cmlidXRlcy5oCShyZXZpc2lvbiAzNzMxNCkKKysrIFdlYkNvcmUv
c3ZnL0dyYWRpZW50QXR0cmlidXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNiBAQAog
LyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjYsOSArMjUsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsK
LSAgICBzdHJ1Y3QgR3JhZGllbnRBdHRyaWJ1dGVzIHsKKyAgICBjbGFzcyBHcmFkaWVudEF0dHJp
YnV0ZXMgeworICAgIHB1YmxpYzoKICAgICAgICAgR3JhZGllbnRBdHRyaWJ1dGVzKCkKLSAgICAg
ICAgICAgIDogbV9zcHJlYWRNZXRob2QoU1BSRUFETUVUSE9EX1BBRCkKKyAgICAgICAgICAgIDog
bV9zcHJlYWRNZXRob2QoU3ByZWFkTWV0aG9kUGFkKQogICAgICAgICAgICAgLCBtX2JvdW5kaW5n
Qm94TW9kZSh0cnVlKQogICAgICAgICAgICAgLCBtX3NwcmVhZE1ldGhvZFNldChmYWxzZSkKICAg
ICAgICAgICAgICwgbV9ib3VuZGluZ0JveE1vZGVTZXQoZmFsc2UpCkBAIC0zNiwxMyArMzYsMTQg
QEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgICAgICwgbV9zdG9wc1NldChmYWxzZSkKICAg
ICAgICAgewogICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgfkdyYWRpZW50QXR0cmlidXRlcygp
IHt9CiAKLSAgICAgICAgU1ZHR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkgY29u
c3QgeyByZXR1cm4gbV9zcHJlYWRNZXRob2Q7IH0KKyAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRo
b2Qgc3ByZWFkTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9zcHJlYWRNZXRob2Q7IH0KICAgICAg
ICAgYm9vbCBib3VuZGluZ0JveE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kaW5nQm94TW9k
ZTsgfQogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRUcmFuc2Zvcm0oKSBjb25zdCB7
IHJldHVybiBtX2dyYWRpZW50VHJhbnNmb3JtOyB9CiAgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdH
cmFkaWVudFN0b3A+JiBzdG9wcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHM7IH0KIAotICAgICAg
ICB2b2lkIHNldFNwcmVhZE1ldGhvZChTVkdHcmFkaWVudFNwcmVhZE1ldGhvZCB2YWx1ZSkgeyBt
X3NwcmVhZE1ldGhvZCA9IHZhbHVlOyBtX3NwcmVhZE1ldGhvZFNldCA9IHRydWU7IH0KKyAgICAg
ICAgdm9pZCBzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRTcHJlYWRNZXRob2QgdmFsdWUpIHsgbV9z
cHJlYWRNZXRob2QgPSB2YWx1ZTsgbV9zcHJlYWRNZXRob2RTZXQgPSB0cnVlOyB9CiAgICAgICAg
IHZvaWQgc2V0Qm91bmRpbmdCb3hNb2RlKGJvb2wgdmFsdWUpIHsgbV9ib3VuZGluZ0JveE1vZGUg
PSB2YWx1ZTsgbV9ib3VuZGluZ0JveE1vZGVTZXQgPSB0cnVlOyB9CiAgICAgICAgIHZvaWQgc2V0
R3JhZGllbnRUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB2YWx1ZSkgeyBtX2dyYWRp
ZW50VHJhbnNmb3JtID0gdmFsdWU7IG1fZ3JhZGllbnRUcmFuc2Zvcm1TZXQgPSB0cnVlOyB9CiAg
ICAgICAgIHZvaWQgc2V0U3RvcHMoY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mIHZhbHVl
KSB7IG1fc3RvcHMgPSB2YWx1ZTsgbV9zdG9wc1NldCA9IHRydWU7IH0gCkBAIC01Miw5ICs1Mywy
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICBib29sIGhhc0dyYWRpZW50VHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV9ncmFkaWVudFRyYW5zZm9ybVNldDsgfQogICAgICAgICBib29s
IGhhc1N0b3BzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wc1NldDsgfQogCisgICAgICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlR3JhZGllbnQoKSA9IDA7CisKKyAgICAgICAg
dm9pZCBhZGRTdG9wc1RvR3JhZGllbnQoR3JhZGllbnQqIGdyYWRpZW50KQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBTcGVjOiBpZiBhIHN0b3Agb2Zmc2V0IGlzIHNtYWxsZXIgdGhhbiBhbnkg
YmVmb3JlIGl0LCBpdCBpcworICAgICAgICAgICAgLy8gc2V0IHRvIHRoZSBsYXJnZXN0IG9mIHRo
ZSBwcmV2aW91cyBvZmZzZXRzIChwc2VydmVycy1ncmFkLTE2LWIpCisgICAgICAgICAgICBmbG9h
dCBwcmV2aW91c09mZnNldCA9IDAuMGY7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9zdG9wcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGZsb2F0IG9mZnNl
dCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHByZXZpb3VzT2Zmc2V0LCBtX3N0b3BzW2ldLmZpcnN0KSwg
MS4wZik7CisgICAgICAgICAgICAgICAgcHJldmlvdXNPZmZzZXQgPSBvZmZzZXQ7CisgICAgICAg
ICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcChvZmZzZXQsIG1fc3RvcHNbaV0uc2Vjb25k
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8g
UHJvcGVydGllcwotICAgICAgICBTVkdHcmFkaWVudFNwcmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhv
ZDsKKyAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2QgbV9zcHJlYWRNZXRob2Q7CiAgICAgICAg
IGJvb2wgbV9ib3VuZGluZ0JveE1vZGU7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX2dyYWRp
ZW50VHJhbnNmb3JtOwogICAgICAgICBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiBtX3N0b3BzOwpJ
bmRleDogV2ViQ29yZS9zdmcvTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmgJKHJldmlzaW9uIDM3MzE0
KQorKysgV2ViQ29yZS9zdmcvTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNyArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBLREUgcHJvamVjdAorICAgIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw3ICsyNyw4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgc3RydWN0IExpbmVhckdyYWRpZW50QXR0cmlidXRlcyA6
IEdyYWRpZW50QXR0cmlidXRlcyB7CisgICAgY2xhc3MgTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVz
IDogcHVibGljIEdyYWRpZW50QXR0cmlidXRlcyB7CisgICAgcHVibGljOgogICAgICAgICBMaW5l
YXJHcmFkaWVudEF0dHJpYnV0ZXMoKQogICAgICAgICAgICAgOiBtX3gxKDAuMCkKICAgICAgICAg
ICAgICwgbV95MSgwLjApCkBAIC01Niw2ICs1NiwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAg
ICAgICBib29sIGhhc1gyKCkgY29uc3QgeyByZXR1cm4gbV94MlNldDsgfQogICAgICAgICBib29s
IGhhc1kyKCkgY29uc3QgeyByZXR1cm4gbV95MlNldDsgfQogCisgICAgICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlR3JhZGllbnQoKQorICAgICAgICB7CisgICAgICAgICAg
ICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZSgKKyAgICAgICAg
ICAgICAgICBGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24obV94MSwgbV95MSksCisgICAgICAg
ICAgICAgICAgRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKG1feDIsIG1feTIpKTsKKworICAg
ICAgICAgICAgYWRkU3RvcHNUb0dyYWRpZW50KGdyYWRpZW50LmdldCgpKTsKKyAgICAgICAgICAg
IHJldHVybiBncmFkaWVudC5yZWxlYXNlKCk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAg
ICAgICAgIC8vIFByb3BlcnRpZXMKICAgICAgICAgZG91YmxlIG1feDE7CkluZGV4OiBXZWJDb3Jl
L3N2Zy9SYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9SYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMuaAkocmV2aXNpb24gMzczMTQpCisrKyBXZWJDb3Jl
L3N2Zy9SYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsx
LDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9q
ZWN0CisgICAgQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDEyICsyMiwxNCBAQAogI2RlZmluZSBSYWRpYWxH
cmFkaWVudEF0dHJpYnV0ZXNfaAogCiAjaW5jbHVkZSAiR3JhZGllbnRBdHRyaWJ1dGVzLmgiCisj
aW5jbHVkZSA8bWF0aC5oPgogCiAjaWYgRU5BQkxFKFNWRykKIAogbmFtZXNwYWNlIFdlYkNvcmUK
IHsKLSAgICBzdHJ1Y3QgUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzIDogR3JhZGllbnRBdHRyaWJ1
dGVzIHsKKyAgICBjbGFzcyBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMgOiBwdWJsaWMgR3JhZGll
bnRBdHRyaWJ1dGVzIHsKKyAgICBwdWJsaWM6CiAgICAgICAgIFJhZGlhbEdyYWRpZW50QXR0cmli
dXRlcygpCiAgICAgICAgICAgICA6IG1fY3goMC41KQogICAgICAgICAgICAgLCBtX2N5KDAuNSkK
QEAgLTYxLDYgKzYyLDMzIEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIGJvb2wgaGFzRngo
KSBjb25zdCB7IHJldHVybiBtX2Z4U2V0OyB9CiAgICAgICAgIGJvb2wgaGFzRnkoKSBjb25zdCB7
IHJldHVybiBtX2Z5U2V0OyB9CiAKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYWRpZW50
PiBjcmVhdGVHcmFkaWVudCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvdWJsZSBhZGp1c3Rl
ZEZvY3VzWCA9IG1fZng7CisgICAgICAgICAgICBkb3VibGUgYWRqdXN0ZWRGb2N1c1kgPSBtX2Z5
OworCisgICAgICAgICAgICBkb3VibGUgZmR4ID0gbV9meCAtIG1fY3g7CisgICAgICAgICAgICBk
b3VibGUgZmR5ID0gbV9meSAtIG1fY3k7CisKKyAgICAgICAgICAgIC8vIFNwZWM6IElmIChmeCwg
ZnkpIGxpZXMgb3V0c2lkZSB0aGUgY2lyY2xlIGRlZmluZWQgYnkgKGN4LCBjeSkgYW5kCisgICAg
ICAgICAgICAvLyByLCBzZXQgKGZ4LCBmeSkgdG8gdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBv
ZiB0aGUgbGluZSB0aHJvdWdoCisgICAgICAgICAgICAvLyAoZngsIGZ5KSBhbmQgdGhlIGNpcmNs
ZS4KKyAgICAgICAgICAgIGlmIChzcXJ0KGZkeCAqIGZkeCArIGZkeSAqIGZkeSkgPiBtX3IpIHsK
KyAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBhdGFuMihtX2Z5ICogMTAwLjAsIG1fZngg
KiAxMDAuMCk7CisgICAgICAgICAgICAgICAgYWRqdXN0ZWRGb2N1c1ggPSBjb3MoYW5nbGUpICog
bV9yOworICAgICAgICAgICAgICAgIGFkanVzdGVkRm9jdXNZID0gc2luKGFuZ2xlKSAqIG1fcjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCA9
IEdyYWRpZW50OjpjcmVhdGUoCisgICAgICAgICAgICAgICAgRmxvYXRQb2ludDo6bmFycm93UHJl
Y2lzaW9uKGFkanVzdGVkRm9jdXNYLCBhZGp1c3RlZEZvY3VzWSksCisgICAgICAgICAgICAgICAg
MC5mLCAvLyBTVkcgZG9lcyBub3Qgc3VwcG9ydCBhICJmb2N1cyByYWRpdXMiCisgICAgICAgICAg
ICAgICAgRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKG1fY3gsIG1fY3kpLAorICAgICAgICAg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV9yKSk7CisKKyAgICAgICAgICAgIGFkZFN0
b3BzVG9HcmFkaWVudChncmFkaWVudC5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gZ3JhZGll
bnQucmVsZWFzZSgpOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICAvLyBQcm9w
ZXJ0aWVzCiAgICAgICAgIGRvdWJsZSBtX2N4OwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHR3JhZGll
bnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAzNzMxNCkKKysrIFdlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDExICs2OSwxMSBAQCB2b2lkIFNWR0dyYWRpZW50
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyCiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0cikgewogICAgICAgICBpZiAoYXR0
ci0+dmFsdWUoKSA9PSAicmVmbGVjdCIpCi0gICAgICAgICAgICBzZXRTcHJlYWRNZXRob2RCYXNl
VmFsdWUoU1ZHX1NQUkVBRE1FVEhPRF9SRUZMRUNUKTsKKyAgICAgICAgICAgIHNldFNwcmVhZE1l
dGhvZEJhc2VWYWx1ZShTcHJlYWRNZXRob2RSZWZsZWN0KTsKICAgICAgICAgZWxzZSBpZiAoYXR0
ci0+dmFsdWUoKSA9PSAicmVwZWF0IikKLSAgICAgICAgICAgIHNldFNwcmVhZE1ldGhvZEJhc2VW
YWx1ZShTVkdfU1BSRUFETUVUSE9EX1JFUEVBVCk7CisgICAgICAgICAgICBzZXRTcHJlYWRNZXRo
b2RCYXNlVmFsdWUoU3ByZWFkTWV0aG9kUmVwZWF0KTsKICAgICAgICAgZWxzZSBpZiAoYXR0ci0+
dmFsdWUoKSA9PSAicGFkIikKLSAgICAgICAgICAgIHNldFNwcmVhZE1ldGhvZEJhc2VWYWx1ZShT
VkdfU1BSRUFETUVUSE9EX1BBRCk7CisgICAgICAgICAgICBzZXRTcHJlYWRNZXRob2RCYXNlVmFs
dWUoU3ByZWFkTWV0aG9kUGFkKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVVJJUmVm
ZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTE1OSw3ICsxNTksNyBAQCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiBTVkdHcmFkaWVudEVs
ZW1lCiAgICAgICAgICAgICAgICAgc3RvcFN0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJB
cmVuYSgpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc3RvcHMuYXBwZW5kKG1ha2VH
cmFkaWVudFN0b3Aoc3RvcE9mZnNldCwgbWFrZVJHQkEoY29sb3IucmVkKCksIGNvbG9yLmdyZWVu
KCksIGNvbG9yLmJsdWUoKSwgaW50KG9wYWNpdHkgKiAyNTUuKSkpKTsKKyAgICAgICAgICAgIHN0
b3BzLmFwcGVuZChtYWtlR3JhZGllbnRTdG9wKHN0b3BPZmZzZXQsIGNvbG9yV2l0aE92ZXJyaWRl
QWxwaGEoY29sb3IucmdiKCksIG9wYWNpdHkpKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6
IFdlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oCShyZXZpc2lvbiAzNzMxNCkKKysrIFdlYkNvcmUvc3Zn
L1NWR0dyYWRpZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlj
IFNWR1VSSVJlZmVyZW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCB7CiAgICAgcHVibGljOgotICAgICAgICBlbnVt
IFNWR0dyYWRpZW50VHlwZSB7Ci0gICAgICAgICAgICBTVkdfU1BSRUFETUVUSE9EX1VOS05PV04g
PSAwLAotICAgICAgICAgICAgU1ZHX1NQUkVBRE1FVEhPRF9QQUQgICAgID0gMSwKLSAgICAgICAg
ICAgIFNWR19TUFJFQURNRVRIT0RfUkVGTEVDVCA9IDIsCi0gICAgICAgICAgICBTVkdfU1BSRUFE
TUVUSE9EX1JFUEVBVCAgPSAzCi0gICAgICAgIH07Ci0KICAgICAgICAgU1ZHR3JhZGllbnRFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgICAgICB2aXJ0dWFsIH5T
VkdHcmFkaWVudEVsZW1lbnQoKTsKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNzMxNCkKKysrIFdlYkNvcmUvc3ZnL1NWR0xpbmVhckdy
YWRpZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw3IEBACiAvKgogICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBLREUgcHJvamVjdAorICAgIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC04NywxMiArODYsMTUgQEAgdm9p
ZCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkR3JhZAogCiAgICAgUmVmUHRyPFNWR1Bh
aW50U2VydmVyTGluZWFyR3JhZGllbnQ+IGxpbmVhckdyYWRpZW50ID0gV1RGOjpzdGF0aWNfcG9p
bnRlcl9jYXN0PFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQ+KG1fcmVzb3VyY2UpOwogCi0g
ICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRpZW50U3RvcHMoYXR0cmlidXRlcy5zdG9wcygpKTsK
KyAgICBsaW5lYXJHcmFkaWVudC0+c2V0R3JhZGllbnQoYXR0cmlidXRlcy5jcmVhdGVHcmFkaWVu
dCgpKTsKKworICAgIC8vIFRoaXMgY29kZSBzaG91bGQgZ28gYXdheS4gIFBhaW50U2VydmVycyBz
aG91bGQgZ28gYXdheSB0b28uCisgICAgLy8gT25seSB0aGlzIGNvZGUgc2hvdWxkIGNhcmUgYWJv
dXQgYm91bmRpbmcgYm94ZXMKICAgICBsaW5lYXJHcmFkaWVudC0+c2V0Qm91bmRpbmdCb3hNb2Rl
KGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkpOworCisgICAgLy8gVGhlc2Ugc2hvdWxkIHBv
c3NpYmx5IGJlIHN1cHBvcnRlZCBvbiBHcmFkaWVudAogICAgIGxpbmVhckdyYWRpZW50LT5zZXRH
cmFkaWVudFNwcmVhZE1ldGhvZChhdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpKTsKICAgICBsaW5l
YXJHcmFkaWVudC0+c2V0R3JhZGllbnRUcmFuc2Zvcm0oYXR0cmlidXRlcy5ncmFkaWVudFRyYW5z
Zm9ybSgpKTsKLSAgICBsaW5lYXJHcmFkaWVudC0+c2V0R3JhZGllbnRTdGFydChGbG9hdFBvaW50
OjpuYXJyb3dQcmVjaXNpb24oYXR0cmlidXRlcy54MSgpLCBhdHRyaWJ1dGVzLnkxKCkpKTsKLSAg
ICBsaW5lYXJHcmFkaWVudC0+c2V0R3JhZGllbnRFbmQoRmxvYXRQb2ludDo6bmFycm93UHJlY2lz
aW9uKGF0dHJpYnV0ZXMueDIoKSwgYXR0cmlidXRlcy55MigpKSk7CiB9CiAKIExpbmVhckdyYWRp
ZW50QXR0cmlidXRlcyBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmNvbGxlY3RHcmFkaWVudFBy
b3BlcnRpZXMoKSBjb25zdApAQCAtMTA1LDcgKzEwNyw3IEBAIExpbmVhckdyYWRpZW50QXR0cmli
dXRlcyBTVkdMaW5lYXJHcmFkaWUKIAogICAgIHdoaWxlIChjdXJyZW50KSB7CiAgICAgICAgIGlm
ICghYXR0cmlidXRlcy5oYXNTcHJlYWRNZXRob2QoKSAmJiBjdXJyZW50LT5oYXNBdHRyaWJ1dGUo
U1ZHTmFtZXM6OnNwcmVhZE1ldGhvZEF0dHIpKQotICAgICAgICAgICAgYXR0cmlidXRlcy5zZXRT
cHJlYWRNZXRob2QoKFNWR0dyYWRpZW50U3ByZWFkTWV0aG9kKSBjdXJyZW50LT5zcHJlYWRNZXRo
b2QoKSk7CisgICAgICAgICAgICBhdHRyaWJ1dGVzLnNldFNwcmVhZE1ldGhvZCgoR3JhZGllbnRT
cHJlYWRNZXRob2QpIGN1cnJlbnQtPnNwcmVhZE1ldGhvZCgpKTsKIAogICAgICAgICBpZiAoIWF0
dHJpYnV0ZXMuaGFzQm91bmRpbmdCb3hNb2RlKCkgJiYgY3VycmVudC0+aGFzQXR0cmlidXRlKFNW
R05hbWVzOjpncmFkaWVudFVuaXRzQXR0cikpCiAgICAgICAgICAgICBhdHRyaWJ1dGVzLnNldEJv
dW5kaW5nQm94TW9kZShjdXJyZW50LT5ncmFkaWVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpT
VkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMzczMTQpCisrKyBXZWJDb3JlL3N2Zy9T
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsNyBA
QAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtOTQsMTQgKzkz
LDExIEBAIHZvaWQgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWQKICAgICAgICAg
cmV0dXJuOwogCiAgICAgUmVmUHRyPFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ+IHJhZGlh
bEdyYWRpZW50ID0gV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR1BhaW50U2VydmVyUmFkaWFs
R3JhZGllbnQ+KG1fcmVzb3VyY2UpOworICAgIHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudChh
dHRyaWJ1dGVzLmNyZWF0ZUdyYWRpZW50KCkpOwogCi0gICAgcmFkaWFsR3JhZGllbnQtPnNldEdy
YWRpZW50U3RvcHMoYXR0cmlidXRlcy5zdG9wcygpKTsKICAgICByYWRpYWxHcmFkaWVudC0+c2V0
Qm91bmRpbmdCb3hNb2RlKGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkpOwogICAgIHJhZGlh
bEdyYWRpZW50LT5zZXRHcmFkaWVudFNwcmVhZE1ldGhvZChhdHRyaWJ1dGVzLnNwcmVhZE1ldGhv
ZCgpKTsgCiAgICAgcmFkaWFsR3JhZGllbnQtPnNldEdyYWRpZW50VHJhbnNmb3JtKGF0dHJpYnV0
ZXMuZ3JhZGllbnRUcmFuc2Zvcm0oKSk7Ci0gICAgcmFkaWFsR3JhZGllbnQtPnNldEdyYWRpZW50
Q2VudGVyKEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihhdHRyaWJ1dGVzLmN4KCksIGF0dHJp
YnV0ZXMuY3koKSkpOwotICAgIHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudEZvY2FsKEZsb2F0
UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihhdHRyaWJ1dGVzLmZ4KCksIGF0dHJpYnV0ZXMuZnkoKSkp
OwotICAgIHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudFJhZGl1cyhuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGF0dHJpYnV0ZXMucigpKSk7CiB9CiAKIFJhZGlhbEdyYWRpZW50QXR0cmlidXRlcyBT
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmNvbGxlY3RHcmFkaWVudFByb3BlcnRpZXMoKSBjb25z
dApAQCAtMTE0LDcgKzExMCw3IEBAIFJhZGlhbEdyYWRpZW50QXR0cmlidXRlcyBTVkdSYWRpYWxH
cmFkaWUKIAogICAgIHdoaWxlIChjdXJyZW50KSB7CiAgICAgICAgIGlmICghYXR0cmlidXRlcy5o
YXNTcHJlYWRNZXRob2QoKSAmJiBjdXJyZW50LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnNwcmVh
ZE1ldGhvZEF0dHIpKQotICAgICAgICAgICAgYXR0cmlidXRlcy5zZXRTcHJlYWRNZXRob2QoKFNW
R0dyYWRpZW50U3ByZWFkTWV0aG9kKSBjdXJyZW50LT5zcHJlYWRNZXRob2QoKSk7CisgICAgICAg
ICAgICBhdHRyaWJ1dGVzLnNldFNwcmVhZE1ldGhvZCgoR3JhZGllbnRTcHJlYWRNZXRob2QpIGN1
cnJlbnQtPnNwcmVhZE1ldGhvZCgpKTsKIAogICAgICAgICBpZiAoIWF0dHJpYnV0ZXMuaGFzQm91
bmRpbmdCb3hNb2RlKCkgJiYgY3VycmVudC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpncmFkaWVu
dFVuaXRzQXR0cikpCiAgICAgICAgICAgICBhdHRyaWJ1dGVzLnNldEJvdW5kaW5nQm94TW9kZShj
dXJyZW50LT5ncmFkaWVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09C
SkVDVEJPVU5ESU5HQk9YKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2Vy
dmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIu
aAkocmV2aXNpb24gMzczMTQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw5ICs3OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBwcm90ZWN0ZWQ6CiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgICAgIHZvaWQgc3Ryb2tlUGF0
aChDR0NvbnRleHRSZWYsIGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwotICAgICAgICB2b2lk
IGNsaXBUb1N0cm9rZVBhdGgoQ0dDb250ZXh0UmVmLCBjb25zdCBSZW5kZXJPYmplY3QqKSBjb25z
dDsKICAgICAgICAgdm9pZCBmaWxsUGF0aChDR0NvbnRleHRSZWYsIGNvbnN0IFJlbmRlck9iamVj
dCopIGNvbnN0OwotICAgICAgICB2b2lkIGNsaXBUb0ZpbGxQYXRoKENHQ29udGV4dFJlZiwgY29u
c3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAjZW5kaWYKIAogICAgIHByb3RlY3RlZDoKSW5kZXg6
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuY3BwCShy
ZXZpc2lvbiAzNzMxNCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3Jh
ZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxOSArMjgsMjAgQEAKICNpZiBFTkFCTEUo
U1ZHKQogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyR3JhZGllbnQuaCIKIAorI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiU1ZHR3JhZGllbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFNWR0dyYWRpZW50U3ByZWFkTWV0aG9kIG0p
CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBHcmFkaWVudFNwcmVhZE1l
dGhvZCBtKQogewogICAgIHN3aXRjaCAobSkgewotICAgICAgICBjYXNlIFNQUkVBRE1FVEhPRF9Q
QUQ6CisgICAgICAgIGNhc2UgU3ByZWFkTWV0aG9kUGFkOgogICAgICAgICAgICAgdHMgPDwgIlBB
RCI7IGJyZWFrOwotICAgICAgICBjYXNlIFNQUkVBRE1FVEhPRF9SRVBFQVQ6CisgICAgICAgIGNh
c2UgU3ByZWFkTWV0aG9kUmVwZWF0OgogICAgICAgICAgICAgdHMgPDwgIlJFUEVBVCI7IGJyZWFr
OwotICAgICAgICBjYXNlIFNQUkVBRE1FVEhPRF9SRUZMRUNUOgorICAgICAgICBjYXNlIFNwcmVh
ZE1ldGhvZFJlZmxlY3Q6CiAgICAgICAgICAgICB0cyA8PCAiUkVGTEVDVCI7IGJyZWFrOwogICAg
IH0KIApAQCAtNjAsMTMgKzYxLDExIEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGMKIH0KIAogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6U1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudChjb25zdCBTVkdHcmFkaWVudEVsZW1lbnQqIG93bmVyKQotICAgIDogbV9zcHJlYWRNZXRo
b2QoU1BSRUFETUVUSE9EX1BBRCkKKyAgICA6IG1fc3ByZWFkTWV0aG9kKFNwcmVhZE1ldGhvZFBh
ZCkKICAgICAsIG1fYm91bmRpbmdCb3hNb2RlKHRydWUpCiAgICAgLCBtX293bmVyRWxlbWVudChv
d25lcikKIAogI2lmIFBMQVRGT1JNKENHKQotICAgICwgbV9zdG9wc0NhY2hlKDApCi0gICAgLCBt
X3NoYWRpbmdDYWNoZSgwKQogICAgICwgbV9zYXZlZENvbnRleHQoMCkKICAgICAsIG1faW1hZ2VC
dWZmZXIoMCkKICNlbmRpZgpAQCAtNzYsMjcgKzc1LDI0IEBAIFNWR1BhaW50U2VydmVyR3JhZGll
bnQ6OlNWR1BhaW50U2VydmVyR3IKIAogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6flNWR1BhaW50
U2VydmVyR3JhZGllbnQoKQogewotI2lmIFBMQVRGT1JNKENHKQotICAgIENHU2hhZGluZ1JlbGVh
c2UobV9zaGFkaW5nQ2FjaGUpOwotI2VuZGlmCiB9CiAKLWNvbnN0IFZlY3RvcjxTVkdHcmFkaWVu
dFN0b3A+JiBTVkdQYWludFNlcnZlckdyYWRpZW50OjpncmFkaWVudFN0b3BzKCkgY29uc3QKK0dy
YWRpZW50KiBTVkdQYWludFNlcnZlckdyYWRpZW50OjpncmFkaWVudCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fc3RvcHM7CisgICAgcmV0dXJuIG1fZ3JhZGllbnQuZ2V0KCk7CiB9CiAKLXZvaWQg
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0R3JhZGllbnRTdG9wcyhjb25zdCBWZWN0b3I8U1ZH
R3JhZGllbnRTdG9wPiYgc3RvcHMpCit2b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldEdy
YWRpZW50KFBhc3NSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50KQogewotICAgIG1fc3RvcHMgPSBz
dG9wczsKKyAgICBtX2dyYWRpZW50ID0gZ3JhZGllbnQ7CiB9CiAKLVNWR0dyYWRpZW50U3ByZWFk
TWV0aG9kIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNwcmVhZE1ldGhvZCgpIGNvbnN0CitHcmFk
aWVudFNwcmVhZE1ldGhvZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzcHJlYWRNZXRob2QoKSBj
b25zdAogewogICAgIHJldHVybiBtX3NwcmVhZE1ldGhvZDsKIH0KIAotdm9pZCBTVkdQYWludFNl
cnZlckdyYWRpZW50OjpzZXRHcmFkaWVudFNwcmVhZE1ldGhvZChjb25zdCBTVkdHcmFkaWVudFNw
cmVhZE1ldGhvZCYgbWV0aG9kKQordm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFk
aWVudFNwcmVhZE1ldGhvZChjb25zdCBHcmFkaWVudFNwcmVhZE1ldGhvZCYgbWV0aG9kKQogewog
ICAgIG1fc3ByZWFkTWV0aG9kID0gbWV0aG9kOwogfQpAQCAtMTI3LDggKzEyMyw4IEBAIFRleHRT
dHJlYW0mIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmV4dGUKICAgICBtX293bmVyRWxlbWVudC0+
YnVpbGRHcmFkaWVudCgpOwogCiAgICAgLy8gYWJzdHJhY3QsIGRvbid0IHN0cmVhbSB0eXBlCi0g
ICAgdHMgIDw8ICJbc3RvcHM9IiA8PCBncmFkaWVudFN0b3BzKCkgPDwgIl0iOwotICAgIGlmIChz
cHJlYWRNZXRob2QoKSAhPSBTUFJFQURNRVRIT0RfUEFEKQorICAgIC8vdHMgIDw8ICJbc3RvcHM9
IiA8PCBncmFkaWVudFN0b3BzKCkgPDwgIl0iOworICAgIGlmIChzcHJlYWRNZXRob2QoKSAhPSBT
cHJlYWRNZXRob2RQYWQpCiAgICAgICAgIHRzIDw8ICJbbWV0aG9kPSIgPDwgc3ByZWFkTWV0aG9k
KCkgPDwgIl0iOwogICAgIGlmICghYm91bmRpbmdCb3hNb2RlKCkpCiAgICAgICAgIHRzIDw8ICIg
W2JvdW5kaW5nIGJveCBtb2RlPSIgPDwgYm91bmRpbmdCb3hNb2RlKCkgPDwgIl0iOwpJbmRleDog
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaAkocmV2aXNp
b24gMzczMTQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDQ2ICszMCwyOSBAQAogCiAjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyLmgi
CiAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IAotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPHFnbG9iYWwuaD4KLVFUX0JFR0lOX05BTUVT
UEFDRQotY2xhc3MgUUdyYWRpZW50OwotUVRfRU5EX05BTUVTUEFDRQotI2VuZGlmCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEltYWdlQnVmZmVyOwogICAgIGNsYXNzIFNWR0dy
YWRpZW50RWxlbWVudDsKIAotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIHNwcmVhZCBtZXRob2Qg
ZW51bSBpbiBTVkdHcmFkaWVudEVsZW1lbnQKLSAgICBlbnVtIFNWR0dyYWRpZW50U3ByZWFkTWV0
aG9kIHsKLSAgICAgICAgU1BSRUFETUVUSE9EX1BBRCA9IDEsCi0gICAgICAgIFNQUkVBRE1FVEhP
RF9SRUZMRUNUID0gMiwKLSAgICAgICAgU1BSRUFETUVUSE9EX1JFUEVBVCA9IDMKLSAgICB9Owot
Ci0jaWYgUExBVEZPUk0oQ0cpCi0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8Q0dGbG9hdCwgQ29sb3I+
IFNWR0dyYWRpZW50U3RvcDsKLSNlbHNlCiAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8ZmxvYXQsIENv
bG9yPiBTVkdHcmFkaWVudFN0b3A7Ci0jZW5kaWYKLQogCiAgICAgY2xhc3MgU1ZHUGFpbnRTZXJ2
ZXJHcmFkaWVudCA6IHB1YmxpYyBTVkdQYWludFNlcnZlciB7CiAgICAgcHVibGljOgogICAgICAg
ICB2aXJ0dWFsIH5TVkdQYWludFNlcnZlckdyYWRpZW50KCk7CiAKLSAgICAgICAgY29uc3QgVmVj
dG9yPFNWR0dyYWRpZW50U3RvcD4mIGdyYWRpZW50U3RvcHMoKSBjb25zdDsKLSAgICAgICAgdm9p
ZCBzZXRHcmFkaWVudFN0b3BzKGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+Jik7CisgICAg
ICAgICB2b2lkIHNldEdyYWRpZW50KFBhc3NSZWZQdHI8R3JhZGllbnQ+KTsKKyAgICAgICAgIEdy
YWRpZW50KiBncmFkaWVudCgpIGNvbnN0OwogCi0gICAgICAgIFNWR0dyYWRpZW50U3ByZWFkTWV0
aG9kIHNwcmVhZE1ldGhvZCgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldEdyYWRpZW50U3ByZWFk
TWV0aG9kKGNvbnN0IFNWR0dyYWRpZW50U3ByZWFkTWV0aG9kJik7CisgICAgICAgIEdyYWRpZW50
U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCgpIGNvbnN0OworICAgICAgICB2b2lkIHNldEdyYWRp
ZW50U3ByZWFkTWV0aG9kKGNvbnN0IEdyYWRpZW50U3ByZWFkTWV0aG9kJik7CiAKICAgICAgICAg
Ly8gR3JhZGllbnQgc3RhcnQgYW5kIGVuZCBwb2ludHMgYXJlIHBlcmNlbnRhZ2VzIHdoZW4gdXNl
ZCBpbiBib3VuZGluZ0JveCBtb2RlLgogICAgICAgICAvLyBGb3IgaW5zdGFuY2Ugc3RhcnQgcG9p
bnQgd2l0aCB2YWx1ZSAoMCwwKSBpcyB0b3AtbGVmdCBhbmQgZW5kIHBvaW50IHdpdGgKQEAgLTgz
LDU3ICs2NiwyNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgVGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikgY29uc3Q7CiAKICAgICAg
ICAgdmlydHVhbCBib29sIHNldHVwKEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBSZW5kZXJPYmpl
Y3QqLCBTVkdQYWludFRhcmdldFR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0OwotI2lm
IFBMQVRGT1JNKENHKQorCiAgICAgICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihHcmFwaGljc0Nv
bnRleHQqJiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlLCBib29sIGlz
UGFpbnRpbmdUZXh0KSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoR3Jh
cGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSkg
Y29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKLQogICAgICAgICAv
LyBIZWxwZXJzCi0gICAgICAgIHZvaWQgdXBkYXRlUXVhcnR6R3JhZGllbnRTdG9wc0NhY2hlKGNv
bnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+Jik7Ci0gICAgICAgIHZvaWQgdXBkYXRlUXVhcnR6
R3JhZGllbnRDYWNoZShjb25zdCBTVkdQYWludFNlcnZlckdyYWRpZW50Kik7CiAgICAgICAgIHZv
aWQgaGFuZGxlQm91bmRpbmdCb3hNb2RlQW5kR3JhZGllbnRUcmFuc2Zvcm1hdGlvbihHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QpIGNvbnN0OwotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShRVCkKLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgZmlsbENvbG9y
QXJyYXkoUUdyYWRpZW50JiwgY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mLCBmbG9hdCBv
cGFjaXR5KSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBRR3JhZGllbnQgc2V0dXBHcmFkaWVudChH
cmFwaGljc0NvbnRleHQqJiwgY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3QgPSAwOwotI2VuZGlm
CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFNWR1BhaW50U2VydmVyR3JhZGllbnQoY29uc3Qg
U1ZHR3JhZGllbnRFbGVtZW50KiBvd25lcik7CiAgICAgICAgIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+IG1fc3RvcHM7Ci0gICAgICAgIFNWR0dyYWRpZW50
U3ByZWFkTWV0aG9kIG1fc3ByZWFkTWV0aG9kOworICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IG1f
Z3JhZGllbnQ7CisgICAgICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIG1fc3ByZWFkTWV0aG9kOwog
ICAgICAgICBib29sIG1fYm91bmRpbmdCb3hNb2RlOwogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
bV9ncmFkaWVudFRyYW5zZm9ybTsKICAgICAgICAgY29uc3QgU1ZHR3JhZGllbnRFbGVtZW50KiBt
X293bmVyRWxlbWVudDsKIAogI2lmIFBMQVRGT1JNKENHKQogICAgIHB1YmxpYzoKLSAgICAgICAg
dHlwZWRlZiBzdHJ1Y3QgewotICAgICAgICAgICAgQ0dGbG9hdCBjb2xvckFycmF5WzRdOwotICAg
ICAgICAgICAgQ0dGbG9hdCBvZmZzZXQ7Ci0gICAgICAgICAgICBDR0Zsb2F0IHByZXZpb3VzRGVs
dGFJbnZlcnNlOwotICAgICAgICB9IFF1YXJ0ekdyYWRpZW50U3RvcDsKLSAgICAgICAgCi0gICAg
ICAgIHN0cnVjdCBTaGFyZWRTdG9wQ2FjaGUgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRTdG9w
Q2FjaGU+IHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U2hhcmVkU3RvcENhY2hlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkU3Rv
cENhY2hlKTsgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBWZWN0b3I8UXVhcnR6R3JhZGll
bnRTdG9wPiBtX3N0b3BzOwotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAg
IFNoYXJlZFN0b3BDYWNoZSgpIHsgfQotICAgICAgICB9OwotCi0gICAgICAgIFJlZlB0cjxTaGFy
ZWRTdG9wQ2FjaGU+IG1fc3RvcHNDYWNoZTsKLQotICAgICAgICBDR1NoYWRpbmdSZWYgbV9zaGFk
aW5nQ2FjaGU7CiAgICAgICAgIG11dGFibGUgR3JhcGhpY3NDb250ZXh0KiBtX3NhdmVkQ29udGV4
dDsKLSAgICAgICAgbXV0YWJsZSBJbWFnZUJ1ZmZlciogbV9pbWFnZUJ1ZmZlcjsKKyAgICAgICAg
bXV0YWJsZSBPd25QdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7CiAjZW5kaWYKICAgICB9
OwogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlckdyYWRp
ZW50Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NW
R1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHAJKHJldmlzaW9uIDM3MzE0KQorKysgV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsMTM1ICsyMiwxODYgQEAKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5j
bHVkZSAiU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5oIgotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVy
TGluZWFyR3JhZGllbnQuaCIKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50
LmgiCiAKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVj
dC5oIgotI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1BhaW50U2VydmVy
TGluZWFyR3JhZGllbnQuaCIKKyNpbmNsdWRlICJTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50
LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorCisjaWYgUExBVEZPUk0oQ0cpCisj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Cisj
ZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1i
b29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRl
eHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSwg
Ym9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QKKyNpZiBQTEFURk9STShDRykKKy8vIEhlbHBlciBm
dW5jdGlvbiBmb3IgdGV4dCBwYWludGluZworc3RhdGljIGlubGluZSBjb25zdCBSZW5kZXJPYmpl
Y3QqIGZpbmRUZXh0Um9vdE9iamVjdChjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0KQogewotICAg
IG1fb3duZXJFbGVtZW50LT5idWlsZEdyYWRpZW50KCk7CisgICAgd2hpbGUgKHN0YXJ0ICYmICFz
dGFydC0+aXNTVkdUZXh0KCkpCisgICAgICAgIHN0YXJ0ID0gc3RhcnQtPnBhcmVudCgpOworICAg
IEFTU0VSVChzdGFydCk7CisgICAgQVNTRVJUKHN0YXJ0LT5pc1NWR1RleHQoKSk7CiAKLSAgICBj
YWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNhaXJvX3BhdHRl
cm5fdCogcGF0dGVybjsKKyAgICByZXR1cm4gc3RhcnQ7Cit9CiAKLSAgICBjYWlyb19tYXRyaXhf
dCBtYXRyaXg7Ci0gICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkgKCZtYXRyaXgpOwotICAg
IGNvbnN0IGNhaXJvX21hdHJpeF90IGdyYWRpZW50X21hdHJpeCA9IGdyYWRpZW50VHJhbnNmb3Jt
KCk7CitzdGF0aWMgaW5saW5lIGJvb2wgY3JlYXRlTWFza0FuZFN3YXBDb250ZXh0Rm9yVGV4dEdy
YWRpZW50KAorICAgIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dCom
IHNhdmVkQ29udGV4dCwKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlciwgY29u
c3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgRmxvYXRSZWN0IG1hc2tCQm94ID0gY29u
c3RfY2FzdDxSZW5kZXJPYmplY3QqPihmaW5kVGV4dFJvb3RPYmplY3Qob2JqZWN0KSktPnJlbGF0
aXZlQkJveChmYWxzZSk7CisgICAgSW50UmVjdCBtYXNrUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qo
b2JqZWN0LT5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QobWFza0JCb3gpKTsKIAotICAgIGNv
bnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUo
KTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CisgICAgSW50U2l6
ZSBtYXNrU2l6ZShtYXNrUmVjdC53aWR0aCgpLCBtYXNrUmVjdC5oZWlnaHQoKSk7CisgICAgY2xh
bXBJbWFnZUJ1ZmZlclNpemVUb1ZpZXdwb3J0KG9iamVjdC0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIo
KSwgbWFza1NpemUpOwogCi0gICAgaWYgKHRoaXMtPnR5cGUoKSA9PSBMaW5lYXJHcmFkaWVudFBh
aW50U2VydmVyKSB7Ci0gICAgICAgIGNvbnN0IFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQq
IGxpbmVhciA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQq
Pih0aGlzKTsKKyAgICBhdXRvX3B0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShtYXNrU2l6ZSwgZmFsc2UpOwogCi0gICAgICAgIGlmIChib3VuZGluZ0JveE1v
ZGUoKSkgewotICAgICAgICAgICAgRmxvYXRSZWN0IGJib3ggPSBvYmplY3QtPnJlbGF0aXZlQkJv
eChmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoYmJveC53aWR0aCgpID09IDAgfHwgYmJveC5oZWln
aHQoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChj
b250ZXh0LCBzdHlsZSwgb2JqZWN0KTsKLSAgICAgICAgICAgICAgICBjYWlyb19zZXRfc291cmNl
X3JnYihjciwgMCwgMCwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBjYWlyb19tYXRyaXhfdHJhbnNsYXRlKCZtYXRyaXgsIGJib3gu
eCgpLCBiYm94LnkoKSk7Ci0gICAgICAgICAgICBjYWlyb19tYXRyaXhfc2NhbGUoJm1hdHJpeCwg
YmJveC53aWR0aCgpLCBiYm94LmhlaWdodCgpKTsKLSAgICAgICAgfQorICAgIGlmICghbWFza0lt
YWdlLmdldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgZG91YmxlIHgwID0g
bGluZWFyLT5ncmFkaWVudFN0YXJ0KCkueCgpOwotICAgICAgICBkb3VibGUgeTAgPSBsaW5lYXIt
PmdyYWRpZW50U3RhcnQoKS55KCk7Ci0gICAgICAgIGRvdWJsZSB4MSA9IGxpbmVhci0+Z3JhZGll
bnRFbmQoKS54KCk7Ci0gICAgICAgIGRvdWJsZSB5MSA9IGxpbmVhci0+Z3JhZGllbnRFbmQoKS55
KCk7Ci0KLSAgICAgICAgcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2xpbmVhcih4MCwg
eTAsIHgxLCB5MSk7Ci0KLSAgICB9IGVsc2UgaWYgKHRoaXMtPnR5cGUoKSA9PSBSYWRpYWxHcmFk
aWVudFBhaW50U2VydmVyKSB7Ci0gICAgICAgIGNvbnN0IFNWR1BhaW50U2VydmVyUmFkaWFsR3Jh
ZGllbnQqIHJhZGlhbCA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR1BhaW50U2VydmVyUmFkaWFsR3Jh
ZGllbnQqPih0aGlzKTsKLQotICAgICAgICBpZiAoYm91bmRpbmdCb3hNb2RlKCkpIHsKLSAgICAg
ICAgICAgIEZsb2F0UmVjdCBiYm94ID0gb2JqZWN0LT5yZWxhdGl2ZUJCb3goZmFsc2UpOwotICAg
ICAgICAgICAgaWYgKGJib3gud2lkdGgoKSA9PSAwIHx8IGJib3guaGVpZ2h0KCkgPT0gMCkgewot
ICAgICAgICAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUs
IG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsIDAsIDAs
IDApOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY2Fpcm9fbWF0cml4X3RyYW5zbGF0ZSgmbWF0cml4LCBiYm94LngoKSwgYmJveC55KCkp
OwotICAgICAgICAgICAgY2Fpcm9fbWF0cml4X3NjYWxlKCZtYXRyaXgsIGJib3gud2lkdGgoKSwg
YmJveC5oZWlnaHQoKSk7Ci0gICAgICAgIH0KKyAgICBHcmFwaGljc0NvbnRleHQqIG1hc2tJbWFn
ZUNvbnRleHQgPSBtYXNrSW1hZ2UtPmNvbnRleHQoKTsKKyAgICBtYXNrSW1hZ2VDb250ZXh0LT5z
YXZlKCk7CisgICAgbWFza0ltYWdlQ29udGV4dC0+dHJhbnNsYXRlKC1tYXNrUmVjdC54KCksIC1t
YXNrUmVjdC55KCkpOworICAgIG1hc2tJbWFnZUNvbnRleHQtPmNvbmNhdENUTShvYmplY3QtPmFi
c29sdXRlVHJhbnNmb3JtKCkpOworCisgICAgaW1hZ2VCdWZmZXIuc2V0KG1hc2tJbWFnZS5yZWxl
YXNlKCkpOworICAgIHNhdmVkQ29udGV4dCA9IGNvbnRleHQ7CisKKyAgICBjb250ZXh0ID0gbWFz
a0ltYWdlQ29udGV4dDsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgY2xpcFRvVGV4dE1hc2soR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAorICAgIE93blB0cjxJ
bWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwKKyAg
ICBjb25zdCBTVkdQYWludFNlcnZlckdyYWRpZW50KiBncmFkaWVudFNlcnZlcikKK3sKKyAgICBG
bG9hdFJlY3QgbWFza0JCb3ggPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGZpbmRUZXh0Um9v
dE9iamVjdChvYmplY3QpKS0+cmVsYXRpdmVCQm94KGZhbHNlKTsKKworICAgIC8vIEZpeHVwIHRy
YW5zZm9ybWF0aW9ucyB0byBiZSBhYmxlIHRvIGNsaXAgdG8gbWFzaworICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm0gPSBvYmplY3QtPmFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgRmxvYXRS
ZWN0IHRleHRCb3VuZGFyeSA9IHRyYW5zZm9ybS5tYXBSZWN0KG1hc2tCQm94KTsKKworICAgIElu
dFNpemUgbWFza1NpemUobHJvdW5kZih0ZXh0Qm91bmRhcnkud2lkdGgoKSksIGxyb3VuZGYodGV4
dEJvdW5kYXJ5LmhlaWdodCgpKSk7CisgICAgY2xhbXBJbWFnZUJ1ZmZlclNpemVUb1ZpZXdwb3J0
KG9iamVjdC0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSwgbWFza1NpemUpOworICAgIHRleHRCb3Vu
ZGFyeS5zZXRTaXplKHRleHRCb3VuZGFyeS5zaXplKCkuc2hydW5rVG8obWFza1NpemUpKTsKKwor
ICAgIC8vIENsaXAgY3VycmVudCBjb250ZXh0IHRvIG1hc2sgaW1hZ2UgKGdyYWRpZW50KQorICAg
IGNvbnRleHQtPmNvbmNhdENUTSh0cmFuc2Zvcm0uaW52ZXJzZSgpKTsKKyAgICBjb250ZXh0LT5j
bGlwVG9JbWFnZUJ1ZmZlcih0ZXh0Qm91bmRhcnksIGltYWdlQnVmZmVyLmdldCgpKTsKKyAgICBj
b250ZXh0LT5jb25jYXRDVE0odHJhbnNmb3JtKTsKKworICAgIGhhbmRsZUJvdW5kaW5nQm94TW9k
ZUFuZEdyYWRpZW50VHJhbnNmb3JtYXRpb24oY29udGV4dCwgbWFza0JCb3gpOworfQorI2VuZGlm
CisKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6dGVhcmRvd24oR3JhcGhpY3NDb250ZXh0
KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlw
ZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAoreworI2lmIFBMQVRGT1JNKENHKQor
ICAgIC8vIHJlbmRlclBhdGgoKSBpcyBub3QgdXNlZCB3aGVuIHBhaW50aW5nIHRleHQsIHNvIHdl
IHBhaW50IHRoZSBncmFkaWVudCBkdXJpbmcgdGVhcmRvd24oKQorICAgIGlmIChpc1BhaW50aW5n
VGV4dCAmJiBtX3NhdmVkQ29udGV4dCkgeworICAgICAgICAvLyBSZXN0b3JlIG9uLXNjcmVlbiBk
cmF3aW5nIGNvbnRleHQKKyAgICAgICAgY29udGV4dCA9IG1fc2F2ZWRDb250ZXh0OworICAgICAg
ICBtX3NhdmVkQ29udGV4dCA9IDA7CisKKyAgICAgICAgY2xpcFRvVGV4dE1hc2soY29udGV4dCwg
bV9pbWFnZUJ1ZmZlciwgb2JqZWN0LCB0aGlzKTsKKworICAgICAgICAvLyBmaW5hbGx5IGZpbGwg
dGhlIHRleHQgY2xpcCB3aXRoIHRoZSBzaGFkaW5nCisgICAgICAgIENHQ29udGV4dERyYXdTaGFk
aW5nKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBtX2dyYWRpZW50LT5wbGF0Zm9ybUdyYWRp
ZW50KCkpOworIAorICAgICAgICBtX2ltYWdlQnVmZmVyLmNsZWFyKCk7IC8vIHdlJ3JlIGRvbmUg
d2l0aCBvdXIgdGV4dCBtYXNrIGJ1ZmZlcgorICAgIH0KKyNlbmRpZgorICAgIGNvbnRleHQtPnJl
c3RvcmUoKTsgLy8gc2F2ZSB3YXMgY2FsbGVkIGR1cmluZyBzZXR1cCgpCit9CisKK3ZvaWQgU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudDo6cmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0
LCBjb25zdCBSZW5kZXJPYmplY3QqIHBhdGgsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25z
dAoreworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHBhdGgtPnN0eWxlKCk7CisKKyAgICBib29s
IGlzRmlsbGVkID0gKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN0eWxlLT5zdmdT
dHlsZSgpLT5oYXNGaWxsKCk7CiAKLSAgICAgICAgZG91YmxlIGN4ID0gcmFkaWFsLT5ncmFkaWVu
dENlbnRlcigpLngoKTsKLSAgICAgICAgZG91YmxlIGN5ID0gcmFkaWFsLT5ncmFkaWVudENlbnRl
cigpLnkoKTsKLSAgICAgICAgZG91YmxlIHJhZGl1cyA9IHJhZGlhbC0+Z3JhZGllbnRSYWRpdXMo
KTsKLSAgICAgICAgZG91YmxlIGZ4ID0gcmFkaWFsLT5ncmFkaWVudEZvY2FsKCkueCgpOwotICAg
ICAgICBkb3VibGUgZnkgPSByYWRpYWwtPmdyYWRpZW50Rm9jYWwoKS55KCk7Ci0KLSAgICAgICAg
ZnggLT0gY3g7Ci0gICAgICAgIGZ5IC09IGN5OwotCi0gICAgICAgIGRvdWJsZSBmcmFkaXVzID0g
MC4wOwotCi0gICAgICAgIGlmIChzcXJ0KGZ4ICogZnggKyBmeSAqIGZ5KSA+PSByYWRpdXMpIHsK
LSAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGF0YW4yKGZ5LCBmeCk7Ci0gICAgICAgICAgICBp
ZiAoKGZ4ICsgY3gpIDwgY3gpCi0gICAgICAgICAgICAgICAgZnggPSBjb3MoYW5nbGUpICogcmFk
aXVzICsgMC4wMDI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnggPSBjb3Mo
YW5nbGUpICogcmFkaXVzIC0gMC4wMDI7Ci0gICAgICAgICAgICBpZiAoKGZ5ICsgY3kpIDwgY3kp
Ci0gICAgICAgICAgICAgICAgZnkgPSBzaW4oYW5nbGUpICogcmFkaXVzICsgMC4wMDI7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnkgPSBzaW4oYW5nbGUpICogcmFkaXVzIC0g
MC4wMDI7CisgICAgLy8gQ29tcHV0ZSBkZXN0aW5hdGlvbiBvYmplY3QgYm91bmRpbmcgYm94Cisg
ICAgRmxvYXRSZWN0IG9iamVjdEJCb3g7CisgICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpKSB7Cisg
ICAgICAgIEZsb2F0UmVjdCBiYm94ID0gcGF0aC0+cmVsYXRpdmVCQm94KGZhbHNlKTsKKyAgICAg
ICAgaWYgKGJib3gud2lkdGgoKSA+IDAuMGYgJiYgYmJveC5oZWlnaHQoKSA+IDAuMGYpCisgICAg
ICAgICAgICBvYmplY3RCQm94ID0gYmJveDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBD
b2xvciBjb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnNldFN0cm9rZUNvbG9yKGNvbG9yKTsKICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBwYXR0
ZXJuID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfcmFkaWFsKGZ4ICsgY3gsIGZ5ICsgY3ksIGZyYWRp
dXMsIGN4LCBjeSwgcmFkaXVzKTsKKyAgICAvL2lmICghKGJvdW5kaW5nQm94TW9kZSgpICYmIChv
YmplY3RCQm94LndpZHRoKCkgPT0gMC4wZiB8fCBvYmplY3RCQm94LmhlaWdodCgpID09IDAuMGYp
KSkKKyAgICAgICAgaGFuZGxlQm91bmRpbmdCb3hNb2RlQW5kR3JhZGllbnRUcmFuc2Zvcm1hdGlv
bihjb250ZXh0LCBvYmplY3RCQm94KTsKIAotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHBhdGgtPnN0
eWxlKCktPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkKKyAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgo
KTsKKyAgICBlbHNlCisgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKTsKK30KKwordm9pZCBT
VkdQYWludFNlcnZlckdyYWRpZW50OjpoYW5kbGVCb3VuZGluZ0JveE1vZGVBbmRHcmFkaWVudFRy
YW5zZm9ybWF0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB0
YXJnZXRSZWN0KSBjb25zdAoreworICAgIGlmIChib3VuZGluZ0JveE1vZGUoKSkgeworICAgICAg
ICAvLyBDaG9vc2UgZGVmYXVsdCBncmFkaWVudCBib3VuZGluZyBib3gKKyAgICAgICAgRmxvYXRS
ZWN0IGdyYWRpZW50QkJveCgwLjBmLCAwLjBmLCAxLjBmLCAxLjBmKTsKKworICAgICAgICAvLyBH
ZW5lcmF0ZSBhIHRyYW5zZm9ybSB0byBtYXAgYmV0d2VlbiBib3RoIGJvdW5kaW5nIGJveGVzCisg
ICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShtYWtlTWFwQmV0d2VlblJlY3RzKGdyYWRpZW50QkJv
eCwgdGFyZ2V0UmVjdCkpOwogICAgIH0KIAotICAgIGNhaXJvX3BhdHRlcm5fc2V0X2ZpbHRlcihw
YXR0ZXJuLCBDQUlST19GSUxURVJfQklMSU5FQVIpOworICAgIC8vIEFwcGx5IHRoZSBncmFkaWVu
dCdzIG93biB0cmFuc2Zvcm0KKyAgICBjb250ZXh0LT5jb25jYXRDVE0oZ3JhZGllbnRUcmFuc2Zv
cm0oKSk7Cit9CiAKLSAgICBzd2l0Y2ggKHNwcmVhZE1ldGhvZCgpKSB7Ci0gICAgICAgIGNhc2Ug
U1BSRUFETUVUSE9EX1BBRDoKLSAgICAgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChw
YXR0ZXJuLCBDQUlST19FWFRFTkRfUEFEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFNQUkVBRE1FVEhPRF9SRUZMRUNUOgotICAgICAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRf
ZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9SRUZMRUNUKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFNQUkVBRE1FVEhPRF9SRVBFQVQ6Ci0gICAgICAgICAgICBjYWlyb19w
YXR0ZXJuX3NldF9leHRlbmQocGF0dGVybiwgQ0FJUk9fRVhURU5EX1JFUEVBVCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGNhaXJvX3BhdHRlcm5f
c2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfTk9ORSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBjYWlyb19tYXRyaXhfbXVsdGlwbHkoJm1hdHJpeCwgJm1hdHJpeCwg
JmdyYWRpZW50X21hdHJpeCk7Ci0gICAgY2Fpcm9fbWF0cml4X2ludmVydCgmbWF0cml4KTsKLSAg
ICBjYWlyb19wYXR0ZXJuX3NldF9tYXRyaXgocGF0dGVybiwgJm1hdHJpeCk7Ci0KLSAgICBjb25z
dCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYgc3RvcHMgPSBncmFkaWVudFN0b3BzKCk7Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ZmxvYXQgb2Zmc2V0ID0gc3RvcHNbaV0uZmlyc3Q7Ci0gICAgICAgIENvbG9yIGNvbG9yID0gc3Rv
cHNbaV0uc2Vjb25kOwotICAgICAgICBpZiAoaSA+IDAgJiYgb2Zmc2V0IDwgc3RvcHNbaSAtIDFd
LmZpcnN0KQotICAgICAgICAgICAgb2Zmc2V0ID0gc3RvcHNbaSAtIDFdLmZpcnN0OworYm9vbCBT
VkdQYWludFNlcnZlckdyYWRpZW50OjpzZXR1cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBj
b25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUsIGJvb2wg
aXNQYWludGluZ1RleHQpIGNvbnN0Cit7CisgICAgbV9vd25lckVsZW1lbnQtPmJ1aWxkR3JhZGll
bnQoKTsKKyAgICBpZiAoIW1fZ3JhZGllbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKKyAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKKworICAgIGJvb2wgaXNGaWxs
ZWQgPSAodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3ZnU3R5bGUtPmhhc0ZpbGwo
KTsKKyAgICBib29sIGlzU3Ryb2tlZCA9ICh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUp
ICYmIHN2Z1N0eWxlLT5oYXNTdHJva2UoKTsKIAotICAgICAgICBjYWlyb19wYXR0ZXJuX2FkZF9j
b2xvcl9zdG9wX3JnYmEocGF0dGVybiwgb2Zmc2V0LCBjb2xvci5yZWQoKSAvIDI1NS4wLCBjb2xv
ci5ncmVlbigpIC8gMjU1LjAsIGNvbG9yLmJsdWUoKSAvIDI1NS4wLCBjb2xvci5hbHBoYSgpIC8g
MjU1LjApOworICAgIEFTU0VSVChpc0ZpbGxlZCAmJiAhaXNTdHJva2VkIHx8ICFpc0ZpbGxlZCAm
JiBpc1N0cm9rZWQpOworCisgICAgY29udGV4dC0+c2F2ZSgpOyAvLyByZXN0b3JlIGlzIGNhbGxl
ZCBkdXJpbmcgdGVhcmRvd24oKQorICAgIGNvbnRleHQtPnNldEFscGhhKGlzRmlsbGVkID8gc3Zn
U3R5bGUtPmZpbGxPcGFjaXR5KCkgOiBzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpKTsKKyAgICBj
b250ZXh0LT5zZXRTcHJlYWRNZXRob2Qoc3ByZWFkTWV0aG9kKCkpOworCisgICAgaWYgKGlzUGFp
bnRpbmdUZXh0KSB7CisjaWYgUExBVEZPUk0oQ0cpCisgICAgICAgIGlmICghY3JlYXRlTWFza0Fu
ZFN3YXBDb250ZXh0Rm9yVGV4dEdyYWRpZW50KGNvbnRleHQsIG1fc2F2ZWRDb250ZXh0LCBtX2lt
YWdlQnVmZmVyLCBvYmplY3QpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBjb250
ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoaXNGaWxsZWQgPyBjVGV4dEZpbGwgOiBjVGV4dFN0cm9r
ZSk7CiAgICAgfQogCi0gICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBz
dmdTdHlsZS0+aGFzRmlsbCgpKQorICAgIGlmIChpc0ZpbGxlZCkgewogICAgICAgICBjb250ZXh0
LT5zZXRGaWxsUnVsZShzdmdTdHlsZS0+ZmlsbFJ1bGUoKSk7CisgICAgICAgIGNvbnRleHQtPnNl
dEZpbGxHcmFkaWVudChtX2dyYWRpZW50KTsKKyAgICB9CiAKLSAgICBpZiAoKHR5cGUgJiBBcHBs
eVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3ZnU3R5bGUtPmhhc1N0cm9rZSgpKQorICAgIGlmIChp
c1N0cm9rZWQpIHsKICAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBz
dHlsZSwgb2JqZWN0KTsKLQotICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHBhdHRlcm4pOwotICAg
IGNhaXJvX3BhdHRlcm5fZGVzdHJveShwYXR0ZXJuKTsKKyAgICAgICAgY29udGV4dC0+c2V0U3Ry
b2tlR3JhZGllbnQobV9ncmFkaWVudCk7CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9Cklu
ZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckNnLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckNnLmNwcAkocmV2
aXNpb24gMzczMTQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckNn
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotCi0gICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisgICAgQ29weXJpZ2h0IChDKSAyMDA4IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTYwLDEy
ICs1OSw2IEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OnN0cm9rZVBhdGgoQ0dDb250ZXgKICAgICBD
R0NvbnRleHRTdHJva2VQYXRoKGNvbnRleHQpOwogfQogCi12b2lkIFNWR1BhaW50U2VydmVyOjpj
bGlwVG9TdHJva2VQYXRoKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3Qq
KSBjb25zdAotewotICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRl
eHQpOwotICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7Ci19Ci0KIHZvaWQgU1ZHUGFpbnRTZXJ2
ZXI6OmZpbGxQYXRoKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHBh
dGgpIGNvbnN0CiB7CiAgICAgaWYgKCFwYXRoIHx8IHBhdGgtPnN0eWxlKCktPnN2Z1N0eWxlKCkt
PmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKQpAQCAtNzQsMTQgKzY3LDYgQEAgdm9pZCBTVkdQ
YWludFNlcnZlcjo6ZmlsbFBhdGgoQ0dDb250ZXh0UgogICAgICAgICBDR0NvbnRleHRGaWxsUGF0
aChjb250ZXh0KTsKIH0KIAotdm9pZCBTVkdQYWludFNlcnZlcjo6Y2xpcFRvRmlsbFBhdGgoQ0dD
b250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcGF0aCkgY29uc3QKLXsKLSAg
ICBpZiAoIXBhdGggfHwgcGF0aC0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSA9PSBS
VUxFX0VWRU5PREQpCi0gICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKLSAgICBlbHNl
Ci0gICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNl
cnZlckdyYWRpZW50Q2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Nn
L1NWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAJKHJldmlzaW9uIDM3MzE0KQorKysgV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAy
MDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotCi0gICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisgICAgQ29weXJpZ2h0IChDKSAyMDA4IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA4IERpcmsg
U2NodWx6ZSA8dmJzODVAZ214LmRlPgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNCwyMDQgKzM0
LDk0IEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogCiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHZvaWQgcmVsZWFzZUNhY2hl
ZFN0b3BzKHZvaWQqIGluZm8pCi17Ci0gICAgc3RhdGljX2Nhc3Q8U1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudDo6U2hhcmVkU3RvcENhY2hlKj4oaW5mbyktPmRlcmVmKCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGNnR3JhZGllbnRDYWxsYmFjayh2b2lkKiBpbmZvLCBjb25zdCBDR0Zsb2F0KiBpblZhbHVlcywg
Q0dGbG9hdCogb3V0Q29sb3IpCi17Ci0gICAgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6U2hhcmVk
U3RvcENhY2hlKiBzdG9wc0NhY2hlID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dDo6U2hhcmVkU3RvcENhY2hlKj4oaW5mbyk7Ci0gICAgCi0gICAgU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudDo6UXVhcnR6R3JhZGllbnRTdG9wKiBzdG9wcyA9IHN0b3BzQ2FjaGUtPm1fc3RvcHMuZGF0
YSgpOwotICAgICAgICAKLSAgICBpbnQgc3RvcHNDb3VudCA9IHN0b3BzQ2FjaGUtPm1fc3RvcHMu
c2l6ZSgpOwotCi0gICAgQ0dGbG9hdCBpblZhbHVlID0gaW5WYWx1ZXNbMF07Ci0KLSAgICBpZiAo
IXN0b3BzQ291bnQpIHsKLSAgICAgICAgb3V0Q29sb3JbMF0gPSAwOwotICAgICAgICBvdXRDb2xv
clsxXSA9IDA7Ci0gICAgICAgIG91dENvbG9yWzJdID0gMDsKLSAgICAgICAgb3V0Q29sb3JbM10g
PSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChzdG9wc0NvdW50ID09IDEpIHsK
LSAgICAgICAgbWVtY3B5KG91dENvbG9yLCBzdG9wc1swXS5jb2xvckFycmF5LCA0ICogc2l6ZW9m
KENHRmxvYXQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghKGluVmFsdWUg
PiBzdG9wc1swXS5vZmZzZXQpKQotICAgICAgICBtZW1jcHkob3V0Q29sb3IsIHN0b3BzWzBdLmNv
bG9yQXJyYXksIDQgKiBzaXplb2YoQ0dGbG9hdCkpOwotICAgIGVsc2UgaWYgKCEoaW5WYWx1ZSA8
IHN0b3BzW3N0b3BzQ291bnQgLSAxXS5vZmZzZXQpKQotICAgICAgICBtZW1jcHkob3V0Q29sb3Is
IHN0b3BzW3N0b3BzQ291bnQgLSAxXS5jb2xvckFycmF5LCA0ICogc2l6ZW9mKENHRmxvYXQpKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgaW50IG5leHRTdG9wSW5kZXggPSAwOwotICAgICAgICB3aGls
ZSAoKG5leHRTdG9wSW5kZXggPCBzdG9wc0NvdW50KSAmJiAoc3RvcHNbbmV4dFN0b3BJbmRleF0u
b2Zmc2V0IDwgaW5WYWx1ZSkpCi0gICAgICAgICAgICBuZXh0U3RvcEluZGV4Kys7Ci0KLSAgICAg
ICAgQ0dGbG9hdCogbmV4dENvbG9yQXJyYXkgPSBzdG9wc1tuZXh0U3RvcEluZGV4XS5jb2xvckFy
cmF5OwotICAgICAgICBDR0Zsb2F0KiBwcmV2aW91c0NvbG9yQXJyYXkgPSBzdG9wc1tuZXh0U3Rv
cEluZGV4IC0gMV0uY29sb3JBcnJheTsKLSAgICAgICAgQ0dGbG9hdCBkaWZmRnJvbVByZXZpb3Vz
ID0gaW5WYWx1ZSAtIHN0b3BzW25leHRTdG9wSW5kZXggLSAxXS5vZmZzZXQ7Ci0gICAgICAgIENH
RmxvYXQgcGVyY2VudCA9IGRpZmZGcm9tUHJldmlvdXMgKiBzdG9wc1tuZXh0U3RvcEluZGV4XS5w
cmV2aW91c0RlbHRhSW52ZXJzZTsKLQotICAgICAgICBvdXRDb2xvclswXSA9ICgoMS4wZiAtIHBl
cmNlbnQpICogcHJldmlvdXNDb2xvckFycmF5WzBdICsgcGVyY2VudCAqIG5leHRDb2xvckFycmF5
WzBdKTsKLSAgICAgICAgb3V0Q29sb3JbMV0gPSAoKDEuMGYgLSBwZXJjZW50KSAqIHByZXZpb3Vz
Q29sb3JBcnJheVsxXSArIHBlcmNlbnQgKiBuZXh0Q29sb3JBcnJheVsxXSk7Ci0gICAgICAgIG91
dENvbG9yWzJdID0gKCgxLjBmIC0gcGVyY2VudCkgKiBwcmV2aW91c0NvbG9yQXJyYXlbMl0gKyBw
ZXJjZW50ICogbmV4dENvbG9yQXJyYXlbMl0pOwotICAgICAgICBvdXRDb2xvclszXSA9ICgoMS4w
ZiAtIHBlcmNlbnQpICogcHJldmlvdXNDb2xvckFycmF5WzNdICsgcGVyY2VudCAqIG5leHRDb2xv
ckFycmF5WzNdKTsKLSAgICB9Ci0gICAgLy8gRklYTUU6IGhhdmUgdG8gaGFuZGxlIHRoZSBzcHJl
YWRNZXRob2QoKXMgaGVyZSBTUFJFQURNRVRIT0RfUkVQRUFULCBldGMuCi19Ci0KLXN0YXRpYyBD
R1NoYWRpbmdSZWYgQ0dTaGFkaW5nUmVmRm9yTGluZWFyR3JhZGllbnQoY29uc3QgU1ZHUGFpbnRT
ZXJ2ZXJMaW5lYXJHcmFkaWVudCogc2VydmVyKQotewotICAgIENHUG9pbnQgc3RhcnQgPSBDR1Bv
aW50KHNlcnZlci0+Z3JhZGllbnRTdGFydCgpKTsKLSAgICBDR1BvaW50IGVuZCA9IENHUG9pbnQo
c2VydmVyLT5ncmFkaWVudEVuZCgpKTsKLQotICAgIENHRnVuY3Rpb25DYWxsYmFja3MgY2FsbGJh
Y2tzID0gezAsIGNnR3JhZGllbnRDYWxsYmFjaywgcmVsZWFzZUNhY2hlZFN0b3BzfTsKLSAgICBD
R0Zsb2F0IGRvbWFpbkxpbWl0c1syXSA9IHswLCAxfTsKLSAgICBDR0Zsb2F0IHJhbmdlTGltaXRz
WzhdID0gezAsIDEsIDAsIDEsIDAsIDEsIDAsIDF9OwotICAgIHNlcnZlci0+bV9zdG9wc0NhY2hl
LT5yZWYoKTsKLSAgICBDR0Z1bmN0aW9uUmVmIHNoYWRpbmdGdW5jdGlvbiA9IENHRnVuY3Rpb25D
cmVhdGUoc2VydmVyLT5tX3N0b3BzQ2FjaGUuZ2V0KCksIDEsIGRvbWFpbkxpbWl0cywgNCwgcmFu
Z2VMaW1pdHMsICZjYWxsYmFja3MpOwotCi0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2Ug
PSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKLSAgICBDR1NoYWRpbmdSZWYgc2hhZGlu
ZyA9IENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNvbG9yU3BhY2UsIHN0YXJ0LCBlbmQsIHNoYWRpbmdG
dW5jdGlvbiwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgQ0dDb2xvclNwYWNlUmVsZWFzZShjb2xvclNwYWNl
KTsKLSAgICBDR0Z1bmN0aW9uUmVsZWFzZShzaGFkaW5nRnVuY3Rpb24pOwotICAgIHJldHVybiBz
aGFkaW5nOwotfQotCi1zdGF0aWMgQ0dTaGFkaW5nUmVmIENHU2hhZGluZ1JlZkZvclJhZGlhbEdy
YWRpZW50KGNvbnN0IFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQqIHNlcnZlcikKLXsKLSAg
ICBDR1BvaW50IGNlbnRlciA9IENHUG9pbnQoc2VydmVyLT5ncmFkaWVudENlbnRlcigpKTsKLSAg
ICBDR1BvaW50IGZvY3VzID0gQ0dQb2ludChzZXJ2ZXItPmdyYWRpZW50Rm9jYWwoKSk7Ci0gICAg
ZG91YmxlIHJhZGl1cyA9IHNlcnZlci0+Z3JhZGllbnRSYWRpdXMoKTsKLQotICAgIGRvdWJsZSBm
ZHggPSBmb2N1cy54IC0gY2VudGVyLng7Ci0gICAgZG91YmxlIGZkeSA9IGZvY3VzLnkgLSBjZW50
ZXIueTsKLQotICAgIC8vIFNwZWM6IElmIChmeCwgZnkpIGxpZXMgb3V0c2lkZSB0aGUgY2lyY2xl
IGRlZmluZWQgYnkgKGN4LCBjeSkgYW5kIHIsIHNldCAoZngsIGZ5KQotICAgIC8vIHRvIHRoZSBw
b2ludCBvZiBpbnRlcnNlY3Rpb24gb2YgdGhlIGxpbmUgdGhyb3VnaCAoZngsIGZ5KSBhbmQgdGhl
IGNpcmNsZS4KLSAgICBpZiAoc3FydChmZHggKiBmZHggKyBmZHkgKiBmZHkpID4gcmFkaXVzKSB7
IAotICAgICAgICBkb3VibGUgYW5nbGUgPSBhdGFuMihmb2N1cy55ICogMTAwLjAsIGZvY3VzLngg
KiAxMDAuMCk7Ci0gICAgICAgIGZvY3VzLnggPSBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoY29z
KGFuZ2xlKSAqIHJhZGl1cyk7Ci0gICAgICAgIGZvY3VzLnkgPSBuYXJyb3dQcmVjaXNpb25Ub0NH
RmxvYXQoc2luKGFuZ2xlKSAqIHJhZGl1cyk7Ci0gICAgfQotCi0gICAgQ0dGdW5jdGlvbkNhbGxi
YWNrcyBjYWxsYmFja3MgPSB7MCwgY2dHcmFkaWVudENhbGxiYWNrLCByZWxlYXNlQ2FjaGVkU3Rv
cHN9OwotICAgIENHRmxvYXQgZG9tYWluTGltaXRzWzJdID0gezAsIDF9OwotICAgIENHRmxvYXQg
cmFuZ2VMaW1pdHNbOF0gPSB7MCwgMSwgMCwgMSwgMCwgMSwgMCwgMX07Ci0gICAgc2VydmVyLT5t
X3N0b3BzQ2FjaGUtPnJlZigpOwotICAgIENHRnVuY3Rpb25SZWYgc2hhZGluZ0Z1bmN0aW9uID0g
Q0dGdW5jdGlvbkNyZWF0ZShzZXJ2ZXItPm1fc3RvcHNDYWNoZS5nZXQoKSwgMSwgZG9tYWluTGlt
aXRzLCA0LCByYW5nZUxpbWl0cywgJmNhbGxiYWNrcyk7Ci0KLSAgICBDR0NvbG9yU3BhY2VSZWYg
Y29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwotICAgIENHU2hhZGlu
Z1JlZiBzaGFkaW5nID0gQ0dTaGFkaW5nQ3JlYXRlUmFkaWFsKGNvbG9yU3BhY2UsIGZvY3VzLCAw
LCBjZW50ZXIsIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChyYWRpdXMpLCBzaGFkaW5nRnVuY3Rp
b24sIHRydWUsIHRydWUpOwotICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7Ci0g
ICAgQ0dGdW5jdGlvblJlbGVhc2Uoc2hhZGluZ0Z1bmN0aW9uKTsKLSAgICByZXR1cm4gc2hhZGlu
ZzsKLX0KLQotdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50Ojp1cGRhdGVRdWFydHpHcmFkaWVu
dFN0b3BzQ2FjaGUoY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mIHN0b3BzKQotewotICAg
IG1fc3RvcHNDYWNoZSA9IFNoYXJlZFN0b3BDYWNoZTo6Y3JlYXRlKCk7Ci0gICAgVmVjdG9yPFF1
YXJ0ekdyYWRpZW50U3RvcD4mIHN0b3BzQ2FjaGUgPSBtX3N0b3BzQ2FjaGUtPm1fc3RvcHM7Ci0g
ICAgc3RvcHNDYWNoZS5yZXNpemUoc3RvcHMuc2l6ZSgpKTsKLSAgICBDR0Zsb2F0IHByZXZpb3Vz
T2Zmc2V0ID0gMC4wZjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgQ0dGbG9hdCBjdXJyT2Zmc2V0ID0gbWluKG1heChzdG9wc1tpXS5m
aXJzdCwgcHJldmlvdXNPZmZzZXQpLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PigxLjApKTsKLSAgICAg
ICAgc3RvcHNDYWNoZVtpXS5vZmZzZXQgPSBjdXJyT2Zmc2V0OwotICAgICAgICBzdG9wc0NhY2hl
W2ldLnByZXZpb3VzRGVsdGFJbnZlcnNlID0gMS4wZiAvIChjdXJyT2Zmc2V0IC0gcHJldmlvdXNP
ZmZzZXQpOwotICAgICAgICBwcmV2aW91c09mZnNldCA9IGN1cnJPZmZzZXQ7Ci0gICAgICAgIENH
RmxvYXQqIGNhID0gc3RvcHNDYWNoZVtpXS5jb2xvckFycmF5OwotICAgICAgICBzdG9wc1tpXS5z
ZWNvbmQuZ2V0UkdCQShjYVswXSwgY2FbMV0sIGNhWzJdLCBjYVszXSk7Ci0gICAgfQotfQotCi12
b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnVwZGF0ZVF1YXJ0ekdyYWRpZW50Q2FjaGUoY29u
c3QgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudCogc2VydmVyKQotewotICAgIC8vIGNhY2hlIG91ciBv
d24gY29weSBvZiB0aGUgc3RvcHMgZm9yIGZhc3RlciBhY2Nlc3MuCi0gICAgLy8gdGhpcyBpcyBs
ZWdhY3kgY29kZSwgcHJvYmFibHkgY291bGQgYmUgcmV3b3JrZWQuCi0gICAgaWYgKCFtX3N0b3Bz
Q2FjaGUpCi0gICAgICAgIHVwZGF0ZVF1YXJ0ekdyYWRpZW50U3RvcHNDYWNoZShncmFkaWVudFN0
b3BzKCkpOwotCi0gICAgQ0dTaGFkaW5nUmVsZWFzZShtX3NoYWRpbmdDYWNoZSk7Ci0KLSAgICBp
ZiAodHlwZSgpID09IFJhZGlhbEdyYWRpZW50UGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgY29uc3Qg
U1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCogcmFkaWFsID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
U1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCo+KHNlcnZlcik7Ci0gICAgICAgIG1fc2hhZGlu
Z0NhY2hlID0gQ0dTaGFkaW5nUmVmRm9yUmFkaWFsR3JhZGllbnQocmFkaWFsKTsKLSAgICB9IGVs
c2UgaWYgKHR5cGUoKSA9PSBMaW5lYXJHcmFkaWVudFBhaW50U2VydmVyKSB7Ci0gICAgICAgIGNv
bnN0IFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQqIGxpbmVhciA9IHN0YXRpY19jYXN0PGNv
bnN0IFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQqPihzZXJ2ZXIpOwotICAgICAgICBtX3No
YWRpbmdDYWNoZSA9IENHU2hhZGluZ1JlZkZvckxpbmVhckdyYWRpZW50KGxpbmVhcik7Ci0gICAg
fQotfQotCiAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHQgcGFpbnRpbmcKIHN0YXRpYyBpbmxp
bmUgY29uc3QgUmVuZGVyT2JqZWN0KiBmaW5kVGV4dFJvb3RPYmplY3QoY29uc3QgUmVuZGVyT2Jq
ZWN0KiBzdGFydCkKIHsKICAgICB3aGlsZSAoc3RhcnQgJiYgIXN0YXJ0LT5pc1NWR1RleHQoKSkK
ICAgICAgICAgc3RhcnQgPSBzdGFydC0+cGFyZW50KCk7Ci0KICAgICBBU1NFUlQoc3RhcnQpOwog
ICAgIEFTU0VSVChzdGFydC0+aXNTVkdUZXh0KCkpOwogCiAgICAgcmV0dXJuIHN0YXJ0OwogfQog
Ci12b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnRlYXJkb3duKEdyYXBoaWNzQ29udGV4dCom
IGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUg
dHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QKK3N0YXRpYyBpbmxpbmUgYm9vbCBjcmVh
dGVNYXNrQW5kU3dhcENvbnRleHRGb3JUZXh0R3JhZGllbnQoCisgICAgR3JhcGhpY3NDb250ZXh0
KiYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0KiYgc2F2ZWRDb250ZXh0LAorICAgIE93blB0cjxJ
bWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsK
LSAgICBDR1NoYWRpbmdSZWYgc2hhZGluZyA9IG1fc2hhZGluZ0NhY2hlOwotICAgIENHQ29udGV4
dFJlZiBjb250ZXh0UmVmID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQVNTRVJU
KGNvbnRleHRSZWYpOworICAgIEZsb2F0UmVjdCBtYXNrQkJveCA9IGNvbnN0X2Nhc3Q8UmVuZGVy
T2JqZWN0Kj4oZmluZFRleHRSb290T2JqZWN0KG9iamVjdCkpLT5yZWxhdGl2ZUJCb3goZmFsc2Up
OworICAgIEludFJlY3QgbWFza1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG9iamVjdC0+YWJzb2x1
dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KG1hc2tCQm94KSk7CiAKLSAgICAvLyBBcyByZW5kZXJQYXRo
KCkgaXMgbm90IHVzZWQgd2hlbiBwYWludGluZyB0ZXh0LCBzcGVjaWFsIGxvZ2ljIG5lZWRlZCBo
ZXJlLgotICAgIGlmIChpc1BhaW50aW5nVGV4dCkgewotICAgICAgICBpZiAobV9zYXZlZENvbnRl
eHQpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBtYXNrQkJveCA9IGNvbnN0X2Nhc3Q8UmVuZGVy
T2JqZWN0Kj4oZmluZFRleHRSb290T2JqZWN0KG9iamVjdCkpLT5yZWxhdGl2ZUJCb3goZmFsc2Up
OworICAgIEludFNpemUgbWFza1NpemUobWFza1JlY3Qud2lkdGgoKSwgbWFza1JlY3QuaGVpZ2h0
KCkpOworICAgIGNsYW1wSW1hZ2VCdWZmZXJTaXplVG9WaWV3cG9ydChvYmplY3QtPmRvY3VtZW50
KCktPnJlbmRlcmVyKCksIG1hc2tTaXplKTsKIAotICAgICAgICAgICAgLy8gRml4dXAgdHJhbnNm
b3JtYXRpb25zIHRvIGJlIGFibGUgdG8gY2xpcCB0byBtYXNrCi0gICAgICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtID0gb2JqZWN0LT5hYnNvbHV0ZVRyYW5zZm9ybSgpOwotICAgICAg
ICAgICAgRmxvYXRSZWN0IHRleHRCb3VuZGFyeSA9IHRyYW5zZm9ybS5tYXBSZWN0KG1hc2tCQm94
KTsKKyAgICBhdXRvX3B0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShtYXNrU2l6ZSwgZmFsc2UpOwogCi0gICAgICAgICAgICBJbnRTaXplIG1hc2tTaXplKGxy
b3VuZGYodGV4dEJvdW5kYXJ5LndpZHRoKCkpLCBscm91bmRmKHRleHRCb3VuZGFyeS5oZWlnaHQo
KSkpOwotICAgICAgICAgICAgY2xhbXBJbWFnZUJ1ZmZlclNpemVUb1ZpZXdwb3J0KG9iamVjdC0+
ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSwgbWFza1NpemUpOworICAgIGlmICghbWFza0ltYWdlLmdl
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGlmIChtYXNrU2l6ZS53
aWR0aCgpIDwgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0Qm91bmRhcnkud2lkdGgoKSkpCi0gICAgICAg
ICAgICAgICAgdGV4dEJvdW5kYXJ5LnNldFdpZHRoKG1hc2tTaXplLndpZHRoKCkpOworICAgIEdy
YXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOwor
ICAgIG1hc2tJbWFnZUNvbnRleHQtPnNhdmUoKTsKKyAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFu
c2xhdGUoLW1hc2tSZWN0LngoKSwgLW1hc2tSZWN0LnkoKSk7CisgICAgbWFza0ltYWdlQ29udGV4
dC0+Y29uY2F0Q1RNKG9iamVjdC0+YWJzb2x1dGVUcmFuc2Zvcm0oKSk7CiAKLSAgICAgICAgICAg
IGlmIChtYXNrU2l6ZS5oZWlnaHQoKSA8IHN0YXRpY19jYXN0PGludD4odGV4dEJvdW5kYXJ5Lmhl
aWdodCgpKSkKLSAgICAgICAgICAgICAgICB0ZXh0Qm91bmRhcnkuc2V0SGVpZ2h0KG1hc2tTaXpl
LmhlaWdodCgpKTsKKyAgICBpbWFnZUJ1ZmZlci5zZXQobWFza0ltYWdlLnJlbGVhc2UoKSk7Cisg
ICAgc2F2ZWRDb250ZXh0ID0gY29udGV4dDsKIAotICAgICAgICAgICAgLy8gQ2xpcCBjdXJyZW50
IGNvbnRleHQgdG8gbWFzayBpbWFnZSAoZ3JhZGllbnQpCi0gICAgICAgICAgICBtX3NhdmVkQ29u
dGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybS5pbnZlcnNlKCkpOwotICAgICAgICAgICAgbV9zYXZl
ZENvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKHRleHRCb3VuZGFyeSwgbV9pbWFnZUJ1ZmZlcik7
Ci0gICAgICAgICAgICBtX3NhdmVkQ29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7CisgICAg
Y29udGV4dCA9IG1hc2tJbWFnZUNvbnRleHQ7CiAKLSAgICAgICAgICAgIGhhbmRsZUJvdW5kaW5n
Qm94TW9kZUFuZEdyYWRpZW50VHJhbnNmb3JtYXRpb24obV9zYXZlZENvbnRleHQsIG1hc2tCQm94
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgICAgICAgICAgLy8gUmVzdG9yZSBvbi1zY3Jl
ZW4gZHJhd2luZyBjb250ZXh0LCBhZnRlciB3ZSBnb3QgdGhlIGltYWdlIG9mIHRoZSBncmFkaWVu
dAotICAgICAgICAgICAgZGVsZXRlIG1faW1hZ2VCdWZmZXI7CitzdGF0aWMgaW5saW5lIHZvaWQg
Y2xpcFRvVGV4dE1hc2soR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAorICAgIE93blB0cjxJbWFn
ZUJ1ZmZlcj4mIGltYWdlQnVmZmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwKKyAgICBj
b25zdCBTVkdQYWludFNlcnZlckdyYWRpZW50KiBncmFkaWVudFNlcnZlcikKK3sKKyAgICBGbG9h
dFJlY3QgbWFza0JCb3ggPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGZpbmRUZXh0Um9vdE9i
amVjdChvYmplY3QpKS0+cmVsYXRpdmVCQm94KGZhbHNlKTsKKworICAgIC8vIEZpeHVwIHRyYW5z
Zm9ybWF0aW9ucyB0byBiZSBhYmxlIHRvIGNsaXAgdG8gbWFzaworICAgIEFmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm0gPSBvYmplY3QtPmFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgRmxvYXRSZWN0
IHRleHRCb3VuZGFyeSA9IHRyYW5zZm9ybS5tYXBSZWN0KG1hc2tCQm94KTsKKworICAgIEludFNp
emUgbWFza1NpemUobHJvdW5kZih0ZXh0Qm91bmRhcnkud2lkdGgoKSksIGxyb3VuZGYodGV4dEJv
dW5kYXJ5LmhlaWdodCgpKSk7CisgICAgY2xhbXBJbWFnZUJ1ZmZlclNpemVUb1ZpZXdwb3J0KG9i
amVjdC0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSwgbWFza1NpemUpOworICAgIHRleHRCb3VuZGFy
eS5zZXRTaXplKHRleHRCb3VuZGFyeS5zaXplKCkuc2hydW5rVG8obWFza1NpemUpKTsKKworICAg
IC8vIENsaXAgY3VycmVudCBjb250ZXh0IHRvIG1hc2sgaW1hZ2UgKGdyYWRpZW50KQorICAgIGNv
bnRleHQtPmNvbmNhdENUTSh0cmFuc2Zvcm0uaW52ZXJzZSgpKTsKKyAgICBjb250ZXh0LT5jbGlw
VG9JbWFnZUJ1ZmZlcih0ZXh0Qm91bmRhcnksIGltYWdlQnVmZmVyLmdldCgpKTsKKyAgICBjb250
ZXh0LT5jb25jYXRDVE0odHJhbnNmb3JtKTsKIAotICAgICAgICAgICAgY29udGV4dCA9IG1fc2F2
ZWRDb250ZXh0OwotICAgICAgICAgICAgY29udGV4dFJlZiA9IGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOworICAgIC8vaGFuZGxlQm91bmRpbmdCb3hNb2RlQW5kR3JhZGllbnRUcmFuc2Zvcm1h
dGlvbihjb250ZXh0LCBtYXNrQkJveCk7Cit9CiAKLSAgICAgICAgICAgIG1fc2F2ZWRDb250ZXh0
ID0gMDsKLSAgICAgICAgICAgIG1faW1hZ2VCdWZmZXIgPSAwOwotICAgICAgICB9Cit2b2lkIFNW
R1BhaW50U2VydmVyR3JhZGllbnQ6OnRlYXJkb3duKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQs
IGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSwgYm9v
bCBpc1BhaW50aW5nVGV4dCkgY29uc3QKK3sKKyAgICAvLyByZW5kZXJQYXRoKCkgaXMgbm90IHVz
ZWQgd2hlbiBwYWludGluZyB0ZXh0LCBzbyB3ZSBwYWludCB0aGUgZ3JhZGllbnQgZHVyaW5nIHRl
YXJkb3duKCkKKyAgICBpZiAoaXNQYWludGluZ1RleHQgJiYgbV9zYXZlZENvbnRleHQpIHsKKyAg
ICAgICAgLy8gUmVzdG9yZSBvbi1zY3JlZW4gZHJhd2luZyBjb250ZXh0CisgICAgICAgIGNvbnRl
eHQgPSBtX3NhdmVkQ29udGV4dDsKKyAgICAgICAgbV9zYXZlZENvbnRleHQgPSAwOworCisgICAg
ICAgIGNsaXBUb1RleHRNYXNrKGNvbnRleHQsIG1faW1hZ2VCdWZmZXIsIG9iamVjdCwgdGhpcyk7
CisKKyAgICAgICAgLy8gZmluYWxseSBmaWxsIHRoZSB0ZXh0IGNsaXAgd2l0aCB0aGUgc2hhZGlu
ZworICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgbV9ncmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAKKyAgICAgICAgbV9pbWFnZUJ1
ZmZlci5jbGVhcigpOyAvLyB3ZSdyZSBkb25lIHdpdGggb3VyIHRleHQgbWFzayBidWZmZXIKICAg
ICB9Ci0KLSAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0UmVmLCBzaGFkaW5nKTsKLSAg
ICBjb250ZXh0LT5yZXN0b3JlKCk7CisgICAgY29udGV4dC0+cmVzdG9yZSgpOyAvLyBzYXZlIHdh
cyBjYWxsZWQgZHVyaW5nIHNldHVwKCkKIH0KIAogdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50
OjpyZW5kZXJQYXRoKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVj
dCogcGF0aCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0CiB7CiAgICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gcGF0aC0+c3R5bGUoKTsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9
IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEFTU0VSVChjb250ZXh0UmVmKTsKICAg
ICAKICAgICBib29sIGlzRmlsbGVkID0gKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYm
IHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCk7CiAKQEAgLTI0MSwxNCArMTMxLDE4IEBAIHZv
aWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6cmVuZGVyUGF0aCgKICAgICAgICAgRmxvYXRSZWN0
IGJib3ggPSBwYXRoLT5yZWxhdGl2ZUJCb3goZmFsc2UpOwogICAgICAgICBpZiAoYmJveC53aWR0
aCgpID4gMCAmJiBiYm94LmhlaWdodCgpID4gMCkKICAgICAgICAgICAgIG9iamVjdEJCb3ggPSBi
Ym94OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIENvbG9yIGNvbG9yKDAuMGYsIDAuMGYs
IDAuMGYsIDEuMGYpOworICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoY29sb3Ip
OworICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGlzRmlsbGVkKQotICAgICAgICBjbGlwVG9G
aWxsUGF0aChjb250ZXh0UmVmLCBwYXRoKTsKLSAgICBlbHNlCi0gICAgICAgIGNsaXBUb1N0cm9r
ZVBhdGgoY29udGV4dFJlZiwgcGF0aCk7Ci0KICAgICBoYW5kbGVCb3VuZGluZ0JveE1vZGVBbmRH
cmFkaWVudFRyYW5zZm9ybWF0aW9uKGNvbnRleHQsIG9iamVjdEJCb3gpOworCisgICAgaWYgKCh0
eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBwYXRoLT5zdHlsZSgpLT5zdmdTdHlsZSgp
LT5oYXNGaWxsKCkpCisgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCk7CisgICAgZWxzZQorICAg
ICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCk7CiB9CiAKIHZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudDo6aGFuZGxlQm91bmRpbmdCb3hNb2RlQW5kR3JhZGllbnRUcmFuc2Zvcm1hdGlvbihHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCkgY29uc3QK
QEAgLTI2OCw2OSArMTYyLDQxIEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6aGFuZGxl
Qm91bmQKIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0
KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlw
ZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAogewogICAgIG1fb3duZXJFbGVtZW50
LT5idWlsZEdyYWRpZW50KCk7Ci0KLSAgICAvLyBXZSBuZWVkIGEgaG9vayB0byBjYWxsIHRoaXMg
d2hlbiB0aGUgZ3JhZGllbnQgZ2V0cyB1cGRhdGVkLCBiZWZvcmUgZHJhd24uCi0gICAgaWYgKCFt
X3NoYWRpbmdDYWNoZSkKLSAgICAgICAgY29uc3RfY2FzdDxTVkdQYWludFNlcnZlckdyYWRpZW50
Kj4odGhpcyktPnVwZGF0ZVF1YXJ0ekdyYWRpZW50Q2FjaGUodGhpcyk7Ci0KLSAgICBDR0NvbnRl
eHRSZWYgY29udGV4dFJlZiA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEFTU0VS
VChjb250ZXh0UmVmKTsKKyAgICBpZiAoIW1fZ3JhZGllbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKKyAgICBjb25z
dCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKIAotICAgIGJv
b2wgaXNGaWxsZWQgPSAodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPnN2
Z1N0eWxlKCktPmhhc0ZpbGwoKTsKLSAgICBib29sIGlzU3Ryb2tlZCA9ICh0eXBlICYgQXBwbHlU
b1N0cm9rZVRhcmdldFR5cGUpICYmIHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKTsKKyAg
ICBib29sIGlzRmlsbGVkID0gKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN2Z1N0
eWxlLT5oYXNGaWxsKCk7CisgICAgYm9vbCBpc1N0cm9rZWQgPSAodHlwZSAmIEFwcGx5VG9TdHJv
a2VUYXJnZXRUeXBlKSAmJiBzdmdTdHlsZS0+aGFzU3Ryb2tlKCk7CiAKICAgICBBU1NFUlQoaXNG
aWxsZWQgJiYgIWlzU3Ryb2tlZCB8fCAhaXNGaWxsZWQgJiYgaXNTdHJva2VkKTsKIAotICAgIGNv
bnRleHQtPnNhdmUoKTsKLSAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0UmVmLCBpc0ZpbGxl
ZCA/IHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsT3BhY2l0eSgpIDogc3R5bGUtPnN2Z1N0eWxlKCkt
PnN0cm9rZU9wYWNpdHkoKSk7CisgICAgY29udGV4dC0+c2F2ZSgpOyAvLyByZXN0b3JlIGlzIGNh
bGxlZCBkdXJpbmcgdGVhcmRvd24oKQorICAgIGNvbnRleHQtPnNldEFscGhhKGlzRmlsbGVkID8g
c3ZnU3R5bGUtPmZpbGxPcGFjaXR5KCkgOiBzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpKTsKIAog
ICAgIGlmIChpc1BhaW50aW5nVGV4dCkgewotICAgICAgICBGbG9hdFJlY3QgbWFza0JCb3ggPSBj
b25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGZpbmRUZXh0Um9vdE9iamVjdChvYmplY3QpKS0+cmVs
YXRpdmVCQm94KGZhbHNlKTsKLSAgICAgICAgSW50UmVjdCBtYXNrUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3Qob2JqZWN0LT5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QobWFza0JCb3gpKTsKLQot
ICAgICAgICBJbnRTaXplIG1hc2tTaXplKG1hc2tSZWN0LndpZHRoKCksIG1hc2tSZWN0LmhlaWdo
dCgpKTsKLSAgICAgICAgY2xhbXBJbWFnZUJ1ZmZlclNpemVUb1ZpZXdwb3J0KG9iamVjdC0+ZG9j
dW1lbnQoKS0+cmVuZGVyZXIoKSwgbWFza1NpemUpOwotCi0gICAgICAgIGF1dG9fcHRyPEltYWdl
QnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1hc2tTaXplLCBmYWxzZSk7
Ci0KLSAgICAgICAgaWYgKCFtYXNrSW1hZ2UuZ2V0KCkpIHsKKyAgICAgICAgaWYgKCFjcmVhdGVN
YXNrQW5kU3dhcENvbnRleHRGb3JUZXh0R3JhZGllbnQoY29udGV4dCwgbV9zYXZlZENvbnRleHQs
IG1faW1hZ2VCdWZmZXIsIG9iamVjdCkpIHsKICAgICAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUo
KTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQorICAgICAgICBjb250ZXh0
LT5zZXRUZXh0RHJhd2luZ01vZGUoaXNGaWxsZWQgPyBjVGV4dEZpbGwgOiBjVGV4dFN0cm9rZSk7
CisgICAgfQogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1h
c2tJbWFnZS0+Y29udGV4dCgpOwotICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5zYXZlKCk7Ci0K
LSAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKGlzRmlsbGVkID8g
Y1RleHRGaWxsIDogY1RleHRTdHJva2UpOwotICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFu
c2xhdGUoLW1hc2tSZWN0LngoKSwgLW1hc2tSZWN0LnkoKSk7Ci0gICAgICAgIG1hc2tJbWFnZUNv
bnRleHQtPmNvbmNhdENUTShvYmplY3QtPmFic29sdXRlVHJhbnNmb3JtKCkpOwotCi0gICAgICAg
IG1faW1hZ2VCdWZmZXIgPSBtYXNrSW1hZ2UucmVsZWFzZSgpOwotICAgICAgICBtX3NhdmVkQ29u
dGV4dCA9IGNvbnRleHQ7Ci0KLSAgICAgICAgY29udGV4dCA9IG1hc2tJbWFnZUNvbnRleHQ7Ci0g
ICAgICAgIGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBpZiAo
aXNGaWxsZWQpIHsKKyAgICAgICAgY29udGV4dC0+c2V0RmlsbFJ1bGUoc3ZnU3R5bGUtPmZpbGxS
dWxlKCkpOworICAgICAgICBjb250ZXh0LT5zZXRGaWxsR3JhZGllbnQobV9ncmFkaWVudCk7CiAg
ICAgfQogCi0gICAgaWYgKGlzU3Ryb2tlZCkKKyAgICBpZiAoaXNTdHJva2VkKSB7CiAgICAgICAg
IGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVjdCk7CisgICAg
ICAgIGNvbnRleHQtPnNldFN0cm9rZUdyYWRpZW50KG1fZ3JhZGllbnQpOworICAgIH0KIAogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmludmFsaWRh
dGUoKQotewotICAgIFNWR1BhaW50U2VydmVyOjppbnZhbGlkYXRlKCk7Ci0KLSAgICAvLyBJbnZh
bGlkYXRlIGNhY2hlcwotICAgIENHU2hhZGluZ1JlbGVhc2UobV9zaGFkaW5nQ2FjaGUpOwotCi0g
ICAgbV9zdG9wc0NhY2hlID0gMDsKLSAgICBtX3NoYWRpbmdDYWNoZSA9IDA7Ci19Ci0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9x
dC9TVkdQYWludFNlcnZlckdyYWRpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyR3JhZGllbnRRdC5jcHAJKHJldmlzaW9uIDM3MzE0
KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzAsOSArNzAsOSBAQCBib29sIFNWR1BhaW50U2VydmVyR3Jh
ZGllbnQ6OnNldHVwKEdyYXBoCiAgICAgcGFpbnRlci0+c2V0UGVuKFF0OjpOb1Blbik7CiAgICAg
cGFpbnRlci0+c2V0QnJ1c2goUXQ6Ok5vQnJ1c2gpOwogCi0gICAgaWYgKHNwcmVhZE1ldGhvZCgp
ID09IFNQUkVBRE1FVEhPRF9SRVBFQVQpCisgICAgaWYgKHNwcmVhZE1ldGhvZCgpID09IFNwcmVh
ZE1ldGhvZFJlcGVhdCkKICAgICAgICAgZ3JhZGllbnQuc2V0U3ByZWFkKFFHcmFkaWVudDo6UmVw
ZWF0U3ByZWFkKTsKLSAgICBlbHNlIGlmIChzcHJlYWRNZXRob2QoKSA9PSBTUFJFQURNRVRIT0Rf
UkVGTEVDVCkKKyAgICBlbHNlIGlmIChzcHJlYWRNZXRob2QoKSA9PSBTcHJlYWRNZXRob2RSZWZs
ZWN0KQogICAgICAgICBncmFkaWVudC5zZXRTcHJlYWQoUUdyYWRpZW50OjpSZWZsZWN0U3ByZWFk
KTsKICAgICBlbHNlCiAgICAgICAgIGdyYWRpZW50LnNldFNwcmVhZChRR3JhZGllbnQ6OlBhZFNw
cmVhZCk7ICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>24142</attachid>
            <date>2008-10-07 02:19:23 -0700</date>
            <delta_ts>2008-11-15 10:54:12 -0800</delta_ts>
            <desc>screenie of krit&apos;s testing patch on Mac</desc>
            <filename>Picture 1.png</filename>
            <type>image/png</type>
            <size>52236</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">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
MjB5/4kb1V2fuX3GWuPGjx+3zj4fPfWSWTc90dd39H/fXi8X+rba+9DDV4ef+MH37oDRozfNRoFw
8bnHbN3/DN1zV5160LjxG288ftxaO+9z3NcvuXHeAgRp3Va0NttqBsyAGTADw2Ng+d0n7bPPUSfN
uPs5fpD3vWPyJxCpf9DXt8NhZwzcB04n8Ad7yojHZqA4BoZ996G4JTmyGQADk6cv4OZcPD/eXyY3
etBoZf0/n+rKyefXHz5aWnv0qF9GgJWzj423rAehduAm+FL+fZo698GlS5cuXjj7xGlz+59sWrl0
3vTDcYNi4eL+558WzdPyjpyz8MElSweei1q57MF554eHlSZMn9v/yNPKZU/MnT1v0ZIlS5YumXOK
IHB/As9ErVxZ6xat4TvIsm02AyNkgNfaCIPY3Qy0ZqD/A3bpAj7nOWFq/4f8kgXT+iZO5yOe/TnJ
4jn84KbL0oX1j1l/sLfm11YzEBjov5RG8E/fsH3DMiyagfYzMOHYOdqcKxcvnHakMunaXMfOXkSr
nk89cc4TNU3978rk6QtpXbkItxOG0JIKYdrANx4YrVk/l1n+5PP5nYdlS5fqyw+L557C6c9f2F9i
IIiskBei3qi1Y+9VZTFg1qExgnszUBwD3NvFxXdkMwAGVCHw0/zEOf0f47XPyaRCeOmlB2fWvp8Q
KwR/sHsXmYH8DDTLWPLr/ZRRfraN7CgDC88+4YI7+X2DvjGb7XTMjBuX3DtHzxSd/f1rn68vZ4Nd
JtW/izB58h5bQXHfNRfXXlS0YiXX+vyziygMtx+47/38fTNO+vqdA/fE8V2HG2ecesmdzzDsZpu/
uiY88ptZV8346M61R6LWWevUR+uuYzfbvGY6cuaHdqp/92H5o+cctNY6ax10+X39h1az9vWdOOdf
d6g/hHvnBR9dZ521LrivdnAb7HLI1CHc/6gHcmcGzIAZKDkD4zb51PSL5z+4+LRJW9dXuupnl508
sORnLr/kFn7sbnvoydMn9C3v/yyv2/3BPkCT/zUDHWDAFUIHSPYUw2Ng4RG7bnzS5XcOfL+4b6Md
Jv33snv7n8qZfe6tT/LvyNaH4sVDhx++ay0Df+aqsy5aY7KV8oZ64vQ58+bPnz9vDv7uDKk9eerf
73j06SdcftfiutuqG0+d/O6jT/7I5QsGCoi6euHZUyYfvelHps+ZO2/u3H3Hhxkm77I9v4T33B2X
fa52V2P2uVfdH+37v6NW3qCtt+X+F1988ZYvctljN9+GavdmwAyYgaowMGbrQ4867B3b1t4rgW8f
3H35yVPO06GNfXLqXufeyf//2egTV815zV/W+JTtx/mDXYRZMAOFMdD/Xc7C4juwGRgRA6dP2fX0
CYdffN7XDntH/X+bxu7wmdOnnrzbCX19C6dffe+ko3ZC9Dfu+6lpb94dW3nVQ9efwJ86WLd/0nEb
viZMP/5te++5C1L1VeuhQhjCbyI8/9SCOnr+PY/37YNU/vkHbqr/LMP8+5/vm8SvU9dmOXz6E+cf
tVXDS2rgv74eueu2/vWwYhhY3PoDXjtMOmyHASXuIkzYZ3Jf7XvXbmbADJiBqjCw6rk7f3HPype/
/LnHf33luUeft+aP3Izfpu+IXY/fd+WMHcb0jdl60mG8zcBD9wd7VbaAj6MrGBhITLpisV5kbzKw
8KKP7HbRzy6+d0Y9eR6z3oakYfbRs548aick7GN3OPSYelq94Jof9Zvu+/2qvl2wucfusD++uHyE
cmzcsK5VCCv5P1R56Rx40d74Pkpj+vpvEAz8vaoFmjj3TJYHz99++fnfvuipf7v0tJ0wF2+RDwD/
5s274gYC0Du/bss4+58H/pvs9hknff++vk3G0fjs/NO19Ai3bAbMgBnoWgaW3X/8XnutWResPpb6
e+TO++DJBy84bVKSoMz2B/tqniyZgcIZ8FNGhVPsCYbHwITDT5k+bfV7iNZ7eX+YddYZSLf7Tr76
7pjqP3Rp/QmeGu7sL9/wJPEb/dPli84/lm/OWBqfaO0P17Z/Xt3/Iwurnjh9yucu6ttyE5QH+P2G
TV6F/pFH/8h5NtvnM3OmnTJ9zr1n/UP8n7HZN9/V/5WG7XZ/8wNnn87222f7Xj3Ex6E4i3szYAbM
QHkZWGed+BBmw3UuPH3/M2/p/1RcDfAH+2ouLJmB4hnI/6XmBFn80jxDTzMw8NqKlUsWL168ZOBF
Py+9NH8a0/0aORNOnKttmb75Z/K0+ruN+u3LalEGXjG0bMHhTajVu4z4a839wwH85Gl8N1/9haqI
MPDyjfr7iCbMrr2qtNZWLlu9WgwXzZ1au8PA3wutA2LX/y6jCaf0v9SjZluG96Auqwe79/xmK21y
AFabgWExwD05LFc7mYG8DOgTdfWHuFwnTufrqsMvIRw+f+ANcP1vOwXYH+xizIIZaMlAzDSGJ/se
QkuCbRw9Bpb+6cX65GM22myzzTaq/4f88mdunHHUbrpRgO8SnH7+wF2EVbdefu4ai539uVev9dHL
7+QrhfrG1qJswHvWy5f8Md56WMOrf7B86dKgXpk8lbQq+T21lSsQb+HZ357Fdx2NGTt21TN3XnXj
fQyxxVZ4LOqmd2/+0Wvv6/8vseVP3nLOBbeHCeB98uv2OemWh56rK8dutNFGY2trff7Jxwf9bbc1
wnhgBsyAGSg7A41v5q6ov59h4IHL2jFctNunLuFnYv/jmtD5g73sZ9frqw4Da6GwGN7RrLXWWsNz
tJcZyMnAhImTJ7xhm7/ZBPCN+569//TzLsrpuAZswsRj3z/xVeP6/rhs2bJnH//N/ItuGsKXlNeI
lGMw4fAjd1vvxQfOu6j2kO3kI4/dou8PD9RnPHLq+ds+NOuE8/i9gsPnLT5/z81QBCy//Khx4T0e
fTjk3d6wRd+LLz79xMLZRS40x7EY0kMM8A+BP9V76JR3+6H6g73bz6DXXzADw07vV69reLce2jDx
6iVYMgPVZ2A6fxFtZe0JooGfRHvppSXz1vgduOrT4CMsKQP8Q1DSxXlZZqCsDPiDvaxnxusa/g8i
qy7wU0beRmagEwwsXlR/XmhM7QkiPuz03EO3HLd30xd6dGJNnsMMmAEzYAZGwIA/2EdAnl3LzoCf
Mir7GfL6KsTAxMOP3PlvNhk3blzf/QuuuWh2gU87VYg0H0onGOBtYT9l1AmuPUfVGPAHe9XOaDWO
Z+QP+7hCqMZO8FGYATNgBobPgCuE4XNnTzNgBsxA+RgYeYXgp4zKd1a9IjNgBsyAGTADZsAMmAEz
MHoMuEIYPe49sxkwA2bADJgBM2AGzIAZKB8DrhDKd068IjNgBsyAGTADZsAMmAEzMHoMuEIYPe49
sxkwA2bADJgBM2AGzIAZKB8DrhDKd068IjNgBsyAGTADZsAMmAEzMHoMuEIYPe49sxkwA2bADJgB
M2AGzIAZKB8DrhDKd068IjNgBsyAGTADZsAMmAEzMHoMDP/3EEZvzZ7ZDJgBM2AGzIAZMANmwAyY
gaIY8D2Eoph1XDNgBsyAGTADZsAMmAEz0I0MuELoxrPmNZsBM2AGzIAZMANmwAyYgaIYcIVQFLOO
awbMgBkwA2bADJgBM2AGupEBVwjdeNa8ZjNgBsyAGTADZsAMmAEzUBQDrhCKYtZxzYAZMANmwAyY
ATNgBsxANzLgCqEbz5rXbAbMgBkwA2bADJgBM2AGimLAFUJRzDquGTADZsAMmAEzYAbMgBnoRgZc
IXTjWfOazYAZMANmwAyYATNgBsxAUQy4QiiKWcc1A2bADJgBM2AGzIAZMAPdyMCYti96rbXWanvM
0Q2411577b333qO7Bs9uBsyAGRghA1/96ldHGMHuZsAMmAEz0CMMtL9CqB5x8+bNQ9kzceLE6h2a
j8gMmIEeYYDlwbCLhOr910+PnHcfphkwA9Vm4KWXXiroAF0h5CL2lltu2WeffU4++eRcaIPMgBkw
A+Vj4K9//etIFlXc36GRrMq+ZsAMmIGeZaDQ/7vx9xBy7Sv8aTzllFNOPfXUXGiDzIAZMANmwAyY
ATNgBsxA1zLgCmEIp+5r9TYEB0PNgBkwA2bADJgBM2AGzEC3MeAKIe8Z462cf6+3vD7GmQEzYAbM
gBkwA2bADJiBbmPAFULeM6ZncE+rt7xuxpkBM2AGzIAZMANmwAyYga5iwBXCkE8XbiacfvrpZ5xx
xpA97WAGzIAZMANmwAyYATNgBkrPgCuEXKdI3xaHgJsJ6L/xjW9MnTo1l7NBZsAMmAEzYAbMgBkw
A2agexhwhZDrXOkRoyh885vfRJ2Qy98gM2AGzIAZMANmwAyYATPQJQy4Qsh7ouJtBPmgSEDT0IIZ
MANmwAyYATNgBsyAGeh2BlwhDOEM8gYCegr0PPPMM7/1rW8NIYqhZsAMmAEzYAbMgBkwA2agxAy4
Qsh7clAV8DYCejZq0J911lmoE/IGMs4MmAEzYAbMgBkwA2bADJSYAVcIeU8OqgJCeQNB5QGVZ9db
3ljGmQEzYAbMgBkwA2bADJiBsjLgCiHXmVF50AKNGmHatGktADaZATNgBsyAGTADZsAMmIHyM+AK
Idc5wh0DNEEho2aIGprOqTfBLJgBM2AGzIAZMANmwAyYga5jwBVCrlMW7yFARmORAGfIMcR/1FvU
WDYDZsAMmAEzYAbMgBkwA13EgCuEXCdLtwtYG6g8gDNkNAgqFb5db7niGmQGzIAZMANmwAyYATNg
BkrGgCuEXCcE2T8LABQDkuUpE0sF6M8999zvfOc7AlgwA2bADJgBM2AGzIAZMAPdwoArhFxnqnab
YOB7CBQ0jP4sFaj57ne/izohWi2bATNgBsyAGTADZsAMmIHyM+AKYWjnKNYAKhIowCSBQadPnz5j
xoyhTWC0GTADZsAMmAEzYAbMgBkYVQZcIeSlX48SyUHVgkzSqHhAhXDeeefJxYIZMANmwAyYATNg
BsyAGSg5A64Q8p4gJf2Jg6oC6IlBLyWE/6y3xMtDM2AGzIAZMANmwAyYATNQTgZcIQz5vCDpj9UC
ZA1VGDCohv9Vb0OeyQ5mwAyYATNgBsyAGTADZqDjDLhCyEW5cn2WB+gp0BkyBPYKl1QO3//+97/3
ve/JasEMmAEzYAbMgBkwA2bADJSTAVcIuc6L7hJEIVsSxFhZ6/n1FjGWzYAZMANmwAyYATNgBsxA
2RhwhZD3jCjjl5D1ZP0AgAoJYIhHj4Ya4YILLsg6WmMGzIAZMANmwAyYATNgBkrCgCuEIZwI5v3o
KdATeb+GkKHEkAIBNXT9txTQQ39hvQ1hVkPNgBkwA2bADJgBM2AGzEAHGXCFkJds5vdAI8tno0Z6
BYJVMvFxCPkH9ZYoPTQDZsAMmAEzYAbMgBkwA2VgwBVC3rOgvB8lAXxUHsgfACjVoKcLNDTRC0MI
/11v8rVgBsyAGTADZsAMmAEzYAZKwoArhFwnQuVBCzQrASDZgGQxQBcoIbCn5uKLL77ooosouzcD
ZsAMmAEzYAbMgBkwAyVhwBVCrhOBXD+m+5CR60dNjFKD1m8UCMMhMBBUKkC+5JJLUCdEX8tmwAyY
ATNgBsyAGTADZmB0GXCFkIv/+H//kNFirp8NAQCUEQMZGuqj6dJLL/3hD3+YjWCNGTADZsAMmAEz
YAbMgBkYFQZcIeSinfk9oKwNlPpDAxmNphiLSmogq2aIGMgwoUK47LLLEr2HZsAMmAEzYAbMgBkw
A2ZgVBhwhZCLduT3SvEly1OmWBVQCYwE4oWhwGgzZ8780Y9+pIAWzIAZMANmwAyYATNgBszAaDHg
CiEX88jmmdADTUHD6J8UAzQBKT3rAeglwMqGIgEtRrNsBsyAGTADZsAMmAEzYAY6z4ArhKFxrlwf
bsjs6UwBJgnNgiYuhCnmFfXWzNd6M2AGzIAZMANmwAyYATPQAQZcIeQlmXm8Uny4KbOXSRrBEoEA
weLcVLpIiJxYNgNmwAyYATNgBsyAGeg8A64Q8nKuXD9xiOk+MeilTIQIoEwAeg2vrLdkFg/NgBkw
A2bADJgBM2AGzEBnGHCFMGSelc3TE5k9k3sMVQ/QpCEBHFKWC5CQNYQAGGqEWbNmMYh7M2AGzIAZ
MANmwAyYATPQSQZcIeRiW7k+BCbxFOhMqzBU1rL+gS8q0IQhBMoSohKOss6ut1yLM8gMmAEzYAbM
gBkwA2bADLSPAVcIubhUrh8FZvPyl4maZlbC0FMATDIco3z11VdfddVVim/BDJgBM2AGzIAZMANm
wAx0gAFXCHlJVsYvIesZk35ZiUePBgAFWCGgp0bDKEBGkYAGwc0MmAEzYAbMgBkwA2bADHSGAVcI
Q+CZBQB6CvRk3i8ZAqzM/qmsw2vvRZWeAnoBopDgr7nmmh//+McEuDcDZsAMmAEzYAbMgBkwA0Uz
4AohL8PK73kTgIWB+hgllgfQJ0MiFU0AagBmiwF/Um9RY9kMmAEzYAbMgBkwA2bADBTEgCuEvMQi
cScUqTwEJvSUqQcAQzUo6QINTfTCkPikF1gAahhnTr0lLh6aATNgBsyAGTADZsAMmIG2M+AKIRel
StZboFkJAMkGpHJ9yFCqzwahNauXBqGuvfban/70p9JYMANmwAyYATNgBsyAGTADRTDgCiEXq0jQ
0QSFjJw+amSCUIPWwcJwSJNKBSmjC+QIIAY9lddff/11110HjJsZMANmwAyYATNgBsyAGSiIAVcI
uYhlgk4oZDRl7ZCzIaiMGOb6AkcT3KGXidEIoB493WG64YYbUCdkZ7TGDJgBM2AGzIAZMANmwAy0
hQFXCLloVILOZF35PZwho0HIpvgKDQCtREov91qIgSAUaBIA7owAzdx6g+BmBsyAGTADZsAMmAEz
YAbazoArhFyUKkFH+i5Znszdazl+eBJJCb0E4oWhwGjsAYCSeGqEoUm+N9abFmDBDJgBM2AGzIAZ
MANmwAy0iwFXCLmYRGqu7JyChtGfyX3UQAZSeub9UEqAVY2OGNKLMCrZKw6GN9VbtFo2A2bADJgB
M2AGzIAZMAMjZ8AVwtA4jDk6U3n4U4BJQrOgiQthMSZkDbPgJP7N9dZsLuvNgBkwA2bADJgBM2AG
zMAwGHCFkJc0Ju7K2uGmVF4maQRLBAIEi3MriFwEg0ClNML8rN5iHMtmwAyYATNgBsyAGTADZmAk
DLhCyMuekvLEQVk79MSglzIRIoAyAejjMJkCQ8XhLBpCuKXesi7WmAEzYAbMgBkwA2bADJiBYTDg
CmHIpCmbpycyeyb3GCpxp0lDAjikLBcgIWsIIYlPAAMmvZAuEhJmPDQDZsAMmAEzYAbMgBkYNgOu
EHJRp1yfSTl6CnSGDIG9wtXT/v4fWaOJ2b/AWaWCyBTjKzKtGDIg9bfddtutt94qjAUzYAbMgBkw
A2bADJgBMzA8Blwh5OINuThxUVCmnpg4bGZlBPQUAJMMxygnERSWjhjSVwKKBDTC3JsBM2AGzIAZ
MANmwAyYgeEx4AohL2/K1yVkPWPSLyvx6NEAoAArBPTUaBgFWtHHJjyUnC4Kv/jFL+bPnx/xls2A
GTADZsAMmAEzYAbMwJAYcIUwBLqYkaOnQE/m/ZIhwMrsn8o6vP8nDmJVoCCJ0BDPUAqooSaS8Mtf
/vL2228XwIIZMANmwAyYATNgBsyAGRgSA64Q8tKFxJ1ZOHo2aqRXIFglQ0iGNEUvAqhh5IYuitnC
StMdd9yBOkF4C2bADJgBM2AGzIAZMANmID8DrhDycqW8HKk8fJjQU2YIADBUg5Iu0NBELwyJT3qB
BaBGcejOnhgBsqYFCxb86le/gt7NDJgBM2AGzIAZMANmwAwMiQFXCLnoirl4MwdWAkCyAaZcHzKU
6rMRaM3qpYklQTa+NJwCQ+BRJKApggUzYAbMgBkwA2bADJgBM5CHAVcIeViq5fpogkJmFi5NFOrY
GlgY+dIxmugoF5oEoKO8EnA2vgA03XXXXXfeeSeV7s2AGTADZsAMmAEzYAbMQB4GXCHkYWmN7xIg
+Wb+jR7O7JMoVCqzJz6Co4n6JA4BULJhGKeAMhkSID3d0f/6179GnRDBls2AGTADZsAMmAEzYAbM
QAsGXCG0IGe1SQk6UnDIaDEXxxBQaehGpWRao1ImKNkYBLJMEGiCOyPQJACVwEigiUP0MKFIQIuO
ls2AGTADZsAMmAEzYAbMQDMGXCE0Y2YNPVJtNKiYi1MWQiZYEyWGCVgYCrCqKT69oBeGJvli2KLJ
EXgGv/vuuxcuXNjCxSYzYAbMgBkwA2bADJgBM0AGXCHk2glItdEIpaBh9Ec6HofCS898HXoJtbgD
TXgI0BFGJXvF0ZAwDCMespDUo0eFgDohRrNsBsyAGTADZsAMmAEzYAayDLhCyHLSSqPMGyAm3xJg
oiZikliJC60RD1nDLDiJjyHBdaf+x58YU76KBv099ZYsyUMzYAbMgBkwA2bADJgBMxAZcIUQ2Wgl
M9VW5g2okm+ZpBEsEQgQLM6nIHIRDAKV0ghDAT2arFGAnrNQ+T/1Fue1bAbMgBkwA2bADJgBM2AG
IgOuECIbrWSl2glI6Tj0xDRL1hMAwXRHH4fJFBgms2god2k4C4dxJYwP62/rLTuFNWbADJgBM2AG
zIAZMANmAAy4QhjyNkDyrWwbzpA1jGk6TBoSoKydXpq4HmD1lxyS+AlYXhCETCLQRauKLvS69957
77vvvkTvoRkwA2bADJgBM2AGzIAZAAOuEHJtA+X6TMrRU6AzZAjsFS5m7TRBA4GyhKhUEGKU4nOo
yBrSl3oq0ScCg1BJJL0eeOCB3/3ud4ppwQyYATNgBsyAGTADZsAMkAFXCLl2gpL1KMS0G1FkYsRm
VsLQUwBMMoNQDzmJoLAREIPQnTDFTOLTSuSDDz6IOkEaC2bADJgBM2AGzIAZMANmAAy4Qsi7DZSv
S8h6Jvk6AcSjRwOAAkwQ0FOjYRRoRR+b8FByuigQych54qNIQIvxLZsBM2AGzIAZMANmwAz0OAOu
EIawAZiRo6dATyTiGiZJOQF1eO1rBhAiQF6J0BAfVyk8lAwYBU0UYXSnRvGpfPjhhx966CHK7s2A
GTADZsAMmAEzYAbMgCuEvHsAiTXTcfRs1EivQLBKhpAMaYpeBFDDyA1dFLOFVaYYTTNS0BTAQIP+
kUceQZ2g+BbMgBkwA2bADJgBM2AGepkBVwh5z35MvuHDFJxJNkMAgKEalHSBhiZ6YUh80gssADWK
Q3f2xAjQzAQYkQCgaQrI0Ef3RfVWR7kzA2bADJgBM2AGzIAZ6GkGXCHkOv0xmW7mwJwbSDbAstk5
TA3dm+kFZijCsvGlAZ5ynJpB6KuAWQE1wqOPPprVW2MGzIAZMANmwAyYATPQUwy4Qsh1upFwx5wb
MhLuqIlRatD6jQJhOAQGAjN1mehYcxi4txABVKKnMgEriHwFoCnxohU9A8pLwmP1JpgFM2AGzIAZ
MANmwAyYgR5kwBVCrpMeU23IaEyy4Qw5G4LKiGEWLnA0MYhMjEYAlGx010RQSqZ7w/jJLHKBezRx
CCuUj9ebkBbMgBkwA2bADJgBM2AGeo2BMb12wMM73phPQ9YQ0TiEkGTt0GsuyGuvXSvGopJWurNn
EGEo0AT3JD6jKawEhiWYqT8jRHdoNIzxqfz973+/ZMmScePGMdSo9Nttt92ozFueSe+///7yLMYr
GZQB79hBKTLADJgBM2AGuogBVwi5ThZSZ2bPyKezcR3EzgAAIABJREFUybpMsCoclRhKoEkYCrCq
AcD49IJeGJrky1DNejkymuIrGjTRl0NYCYBpxYoVUI4dOzbCOiYzOe7llAsMoFWJge233z7ZP1X6
SW+cLBxdlc5XcrLKObzhhhvGjKnOn7CJEycmPN90002JpquHq1ates973tPVhzDCxXvHjpDADrt7
x1bn47XQrROzZ6bRSqbjvEnmTROQ/A9+DAEgRgIjsxceAuMTTD3dJXNIGOSIh6wZqUePFu8zYBhD
UY7ToUjYdNNNt9pqqyzMmg4wgHSz2hlntY+uAzvEU6A82HvvvSvMQ8WO7uabb67wycpzaN6xeVgq
D8Y71t9DGNpujDm0kmwKMEloFjRxISzGhKxhFpzEx5DgulNtdjTGlKBo2bmEoQCkBIAxfOqpp55+
+mk6ujcDZsAMmAEzYAbMgBnoEQZcIeQ90Uy1lVXDTcm3TNIIlggECBbnVhC5CAaBSmmEoYAeTdYo
QM9ZqNQw5/pRISxevDiu07IZMANmwAyYATNgBsxAtRlwhZD3/MbcOvooHYeSGPRSJkIEUCYAfRzG
+JQVh7NoKHdpIiCuhPEHjRzdISPsM/WWdbTGDJgBM2AGzIAZMANmoJIMuEIY8mlF0hyzbcgaxjQd
cTUkgEPKcgEMsoYQkvgENFylkPUAazxfFDWJr7yoj0iuUHgh/1Bv0lswA2bADJgBM2AGzIAZqDAD
rhBynVylzkya0VOgM2QI7BUum3lDU3MbAFOISgWRKcZXZFoxpG/EwESrBGAAoJJIzUhTtEIjJWU5
4v2nzz77LCO4NwNmwAyYATNgBsyAGagwA64Qcp3cmDfTARplz9LEWM2sDMX8G3jAJGMY5SQCgxOf
yFIyeIyTxKcjAdn40GSVAEOJyM/VmyJYMANmwAyYATNgBsyAGagkA64Q8p5Wpc4Ssp5M0JlPy0o8
ejQAKMAKAT01GkaBVvSxCQ8lp4sCkYycJ36MrDhwjLPEaKgR/vjHPyZeHpoBM2AGzIAZMANmwAxU
iQFXCEM4m8zI0VOgJ/NpyRBgZVZNZR1ee9RHegroBYhCQzwBEUZZE0mAPokvX86o+IpAPYYMoiEB
Cf5P9aaYFsyAGTADZsAMmAEzYAYqxoArhLwnFIkyE2j0bNRIr0CwSoaQDGmKXgRQw8gNXRSzhVWm
GE0zUtAUwEATVxIBlJOe8ZfWW2Ly0AyYATNgBsyAGTADZqAaDLhCyHseY/INHybWTLIZAgAM1aCk
CzQ00QtD4pNeYAGoURy6sydGgGYmwIgEAE1TQIY+utNah/d3wstELwZ8vt6gcTMDZsAMmAEzYAbM
gBmoGAOuEHKd0CSZbujDnBtINmCYTBMMJQT2WfdmeiEZSkEoKD6G1HAKyDIpggDSJAJcalHCOmMQ
6qPLC/UWNZbNgBkwA2bADJgBM2AGKsCAK4RcJxG5ckyXISNjjpoYpQYdeMcoBfbAQFAKLiX1GkYA
lfLiLBiiQdYaOKSV0WhiKHllAVlTomHkGF/LA/LFF1/885//rLAWzIAZMANmwAyYATNgBirAgCuE
XCcxptqQ0ZA0o4cz+yQKlRHDJFvgaGIQmRiKACjZ6K5ZoJRM94bxk1nkAvdo4hBWzZIzPlyWL1++
bNkyRbZgBsyAGTADZsAMmAEz0O0MuELIdQZj6gwZTTk0h4giDSNCr9DCR6VgjECTknVYqaEVejQF
lC+VwEigiUP0dGcouQsPDQFAskUMZCiJkSAABbijQlixYkWi99AMmAEzYAbMgBkwA2agSxlwhZDr
xCl7Zm7NdFmeyp5hTZQYJmBhKDAye4AZn15QCkOTfDFs0eTIaJpC0aCJ7hzCSgBNCUZ4YerwWmWC
tnLlyr/85S/CWDADZsAMmAEzYAbMgBnoXgZcIeQ6d8yGCWWKrEQ5+iNXjkPhpa9l03WMBEZuFp9g
xcwOtQwKBEAWknr0aLIiIIYKK0FeCQB64iGgwUoBfS1uvaFIQFMoC2bADJgBM2AGzIAZMANdyoAr
hKGdOObH9EFiHAWmy9BETBI9caE14iFrmAVTEwGUaz4DyXpcUnYxgGlJSXxGkEtESpm4MJSQ/1dv
im/BDJgBM2AGzIAZMANmoBsZcIWQ96wxD1aKDDdlxjJJI1giECBYnFtB5CIYBCqlEYYCejRZowA9
Z6FSw2GvP0bIrt9FQuRkdOUf/ehHBx10kJ/+anEWsJnZWmBsqjADN99888EHH4z3Nlf4GH1oVWLA
O7ZKZ7P8x+IKIe85QibREKp0HFZi0EuZCBFAmQD0cZidSHE4i4ZylyYC4koYf9DI0R2ywlJQQAyT
gBpCkJydzprOMIDy4LDDDps9e/YhhxziIqEh59ilf/3rX9FnN3NDvJUVYwDJ1pQpU2bNmoUiAe9k
q9jRtetwVq1ahf/3aVc0xxkJA96xedjzjs3DUk6MK4ScRK2GJflELR0eKB6YRguqIQEcUpYLwJA1
hJDEJ0AxoyBkPcAajzxFTXSBLC/qI5IrFF5IYOiInjJ7KiXTkV6Jkib3nWGA5QH/rl9zzTUuErK0
Y3/iDwl6FAloAHjHZlmqsAbJ1oEHHviHP/wBx3jDDTe4SGh4rvGfC7xAXCQ05KeTSu/YPGx7x+Zh
KT/GFUIurpQ6M/1FT4HOkCGwVzgkHMo5aMIQAmUJUakgxCTuikwrhvSlPgkb4ysskZoxGx8aKSlr
Lk2XTASY5uJE1BDPGd13koFYHnBeFwkJ/9ii+EOCpIe1AXOgBONhhRlAsvXhD384Plx07bXXomDw
nYR40sEGrxFcL7hGXCREcjose8fmIdw7Ng9LQ8K4QshFFz4iiYtCzJ5hlYnIZlbC0FMATDKDUA85
iaCwERCD0J0wxUzi00pkNj40WSXAUGpSCs3iZ2Ga0UJnGLjwwguzf8tdJIh8bFH8fAcpQt7DnYye
smAWKszAtGnTnnrqqeQAcSfBRYI4+fOf/4x30/GiUJ/9YBHeQqEMeMcOSq937KAUDQPgCiEvaUqd
JWQ9mR/HfBoY4tGjAUBBemo0jAJkBoSgJjw0skogDFNAYC88h9ITmfSMA6S8hE+iSS9kEl94xkwm
8rA4Bq644or99tsvG99FAjjBbsQP/PH5IqQ7GCL7yXJlTbUZmDlz5gEHHJA9Rj5uFO8tZDG9oAED
8Rk8Xibo0Xrh8Et4jN6xrU+Kd2xrfoZtdYUwBOr4+Vj/nFz9Qcl8mlGUFitdhl54CBHAaATQnZqG
eAIijLImkgA9J1J8+SbxFUFILU8ujCaA9EBKmQgYStMwoIJYKIKBsWPH4suXLhKy3GJb4v+Z9KAq
9zAqBDSY1l57bW7XrKM1FWNgzJgxSLkmTZqUPS48boSvL/fs40a4FpYuXcqbbLXP8YEv6lAGb1nG
rOkAA96xzUj2jm3GTFv0rhDy0oiPSCYQ6NmokV6BYJUMIRnSFL0IoIaRG7ooZgurTDGaZqSgKYCB
Jq4kAignfRJfeAiKw/iJI+dKlB4WxICLhCyx2IH4fyY8OIH9yd3IwoD7Fn+AtbezvtZUjwFcI1de
eWXDOwkoEnrzi8u4Iv74xz+iPMBFgcabbBCgxwZYd911q7cNuuiIvGOzJ8s7NstJezWuEPLyqQQC
n5jwQa9UgyE4hJ4NSrpgKKRM2VkFBkYBE4EmBaELMQ1NQsY4QkZ3ALhIuhAjAE3AJAEZNgYnRn1D
gXj3hTLgIiHSi337pz/9CakP/qKgYajsB7cO1llnHW316GW52gzgGmn28EYPfnEZ18Vzzz0X7x7o
MnnZy17m8qAM14J3bDwL3rGRjYJkVwi5iM2TQODzFDA1xIVG0aGHzF5KCc30AjCUglBQfAyp4RSQ
ZVIEAaRJBLjUooR1xiDUR5fWVuEpEBxdYijLRTDgIoGsYtfhf0b1tUsM0bAtUSSgPEDqo71axFlw
zDIzwJSr4eNGPfUKVCRbePErnq3i1aH6mVcKWMKVUubz2Dtr847lufaO7cye92Wfi2d+bgrKz030
0kRBYGQexAgJgemITHSUC4YRIHcqE7CCKL4ANCVetKLnMuQlIQIUiniZGDOJjAgKkpjoCCUBgimg
heIYcJGA/fbss88i9cFfFPCMIbMfDHHrYNy4cXG7FnciHLm0DOAaufrqqxsWCXzcqPJfXMa18Mwz
z+Ab/LEwoIy7B694xStcHpRq93rHesd2bEO6QshFdUwjIKMh1UAPZ/ZJFCojBnIERxP1SRwCoGSj
u2aBUjLdG8ZPZpEL3KOJQ1g1S874nBpgNsVXKOip1HQyRbDl4hjo5SIBuw7lAZ+rxh8VDNkgI/VZ
b731tD+L49+Ry88AvoWC7yQ0KxKq/cVlXAt48Su+wc9LIxYJuDrGjx/v8qCEG9g71ju2M9vSFUIu
nvHpSRw+NPlJqtyCQ1ilIVIuGEKmNSoFYwSaGF8m+tI9iZ+ETeJzyGiMz5iKrGi0YsgmmNaTTCSA
QjGC8AoYkQiuIQEaWiiagd4sErDN8D+jL774IvcbeiRDaGAbf1832GCDuCeLPgWOX3IGcI305heX
WR7w0uCVwiIBd9g23nhjlwel3bfesdi03rFF709XCLkYVvaMHSlZnkw1uFkTJYZJIgIYMRQYTTEZ
n15QCgMNZA7p3qKXI/AxPt01lyJAk41PpTAStAYIaDE+g8T4AMiRVvSaLposF8pArxUJ2HhPP/00
/p9Jf0VAL2WkPhtuuGGz7V3oWXDwMjOAa6TFK1Cr92NquBwef/xxvNu09jk+UD9TRgm90UYbuTwo
83bF2rxj9fHuHVvQXnWFkItYfm4SChkC+8S5YdoBpPQQKEtgZPbZ+ARrluxQy6BAAGQhqUePJmue
9QMf5+UQERiEAvpa3IEW10+Z4BhHMp00tFA0A71TJGBrPfnkk7p7wP8Txd8SMIzy4JWvfGWyLYtm
3vG7hQFcI80eN6rYF5dVHkBA46cxZVwjm266KR7D65az1svr9I7FpvWOLe4ScIUwNG5jboFPVTpT
YLoMTcQk0RMXWiMesoZZsCbSvATXnfqTdZmywaFRcMhJfJhi/IiUY+KSnYIroT4LliYbkC7uC2Wg
F4oE7DGUB7p7AD6hQZGAPyR4bdEmm2ySbOxCCXfwrmMA10jlv7iMa+HRRx/F+39xaaCxMKCMw99y
yy1dHnTRvvWO9Y4tbru6QsjLLRMLfIzKQamGTNIIlggECKZQEBRELoJBoFIaYSigR5M1CtBzFio1
1IwSYgTBEgFBpGFY9YpPAPrsMqRREAiSFcpCcQxUu0hAroMHJ55//nkQCBlbCz1kCC4PittUFYtc
7a+B4op4+OGH8f5fCGi1z9+BIgGv9kKy5YeLum4/e8d23SnrlgW7Qsh7pvAx2hCqrBdWYtBLmQgR
QJkA9HGYnUhxOIuGcpcmAuJKGH/QyNEdssJSUEAMk4DJUI6csdlQYbMLs6YgBqpaJCDdeeyxx1Ae
YCtyNzIBQo/UZ/PNN082YUH0OmwFGMA1UskvLuNaePDBB1Ee8BrBEI0yXu211VZbuTzo0t3rHdul
J67ky3aFMOQThDyD+Qc9+fFKOUlBNCSeQ8rNIkCfxEfkCI7LFRIAYSjUFU1LGoEZXEMtWIejaNA0
XL/WoIUlGgWXIKQEmFpYBbPQLgaqVyQg0cGDEygP6jnPX/ndA9CFIcqDLbbYItnb7WLScarKAK6R
in1xGdfC/fffjx9O5jXCT13K66+//mte8xqXB129mb1ju/r0lXPxrhBynRelF0x/0VOgM2QI7BWO
n78RAE3NbQBMISoVRKborsi0YkjfiIGJVgnAAEAlkZqRpmiFRkrKDR3pQhNgmot6ajhXDC48TZpI
mKiRu4WCGKhSkYAs55FHHuFz1dhm2EhoUKLH/4ziwQnuvYKYdNiqMoBrpDJfXEbNfN999y1ZsqR+
cazx3QNcIy4PqrGHvWOrcR7LcxSuEHKdC3yqEheFJO2QichmVsLQU1BCo/jUY5hEUNgIiEEAkAkC
5SQ+gxCZjQ9NVgkwlIymKerh+2sPybK2ELLxGTn2cHfrAAPVKBJQCeC5ar60kf8hyg0JGXcP/OBE
BzZShafANdLii8t4BWpX/OIyyoN7770Xvx6YXCAY4ieTt9lmGzzIXuGT2FOH5h3bU6e76IN1hZCX
YaW2ErKeTHNjPg0M8ejRAKAgPTUaRgEyA0JQEx4aWSUQhikgsBeeQ+mJTHrGAVJewifRpBcyid8M
rxmb4bkGwSwUykC3FwlIcR544AF+7RJEYfNAgx7ND04UunN6J3iLr4HiFajl/8VlXBH33HPPH/7w
B14XGKJRRnnw+te/3m8uqthm9o6t2AkdxcNxhTAE8vGpCjQ/W+WGTJd6aLJpccQDFgHySgQMqUEv
vKZjQA0JwFACARgyiJDUs4+miGSQaM3iGTB6CU8BPQUgGZAuVMrEyNEkPH7Lk3r3HWCge4sEJDrx
uWoMQRc2GASkPq997Wv9XHUH9k8vTIFrpMUXl8v8Y2q4e7Bw4UKUB7go0HB18AKBjJ8Vf8Mb3uDy
oJIb2Du2kqe18wflCiEv5/hgZb6Lno0a6RUIVskQkiFN0YsAahi5oYtitrDKFKNpRgqaAhho4koi
gHLSJ/GFh6A4jJ84YkhfRZAmCvTCS+tdJJCKzvTdWCQgxcFz1fjaJXYU9h5aLQOqFwlIfbbeemuX
B53ZPD0yC66RZl9cxp2EchYJKA9+85vfPPPMM/ECoTx+/Pjtt9/e5UGFd693bIVPbscOzRVCXqqV
2uITFj7omZrIX5kKP4Khp0tEyiQvCQIDQyU1igOBJgURoJlJyBhQQaI7ZyFeXgJAkBcFBoy9wELS
muATKzCJhkMUCYljnMty2xnoriIBlcBvf/tbfO2yXhTU/mcUAno0Plft8qDtO8QBcY00u5NQzl9c
Rnnw9NNPo07gpYGe1wt+VnzHHXd0eVD5Le0dW/lTXPQBukLIxbDS3xZofP4CpgYkNMJDD5m9lBKa
6QVgKAWhoPgYUsMpIMukCAJIkwhwqUUJ64xBqI8ura3CUxA4xme0RBPx8orzWi6IgW4pEpDl4Llq
vpVFhQE4gYy7B9tuu63Lg4J2iMMy5Zo0aVKWimuvvbY8X1xGVfCrX/3qf//3f/ERihaLBNw9eOMb
3+jyIHsGK6nxjq3kae3YQblCyEU1P2cFxRCJLHppoiCwMELSEWCZ6CgXmgSgo7wSsIIQRit64rNe
WYACypRoGDnGx6TAsBcYAGESEzFaqlwSIRkKr7AEuC+UgfIXCSgD7r77br6VBXsD+wTZD5Ro+J9R
PFft8qDQHeLg/BroAQcckKWiJF9cxhXxy1/+8oknnsBFUftcrjcWCbhGJkyY4PIge+4qrPGOrfDJ
LfrQXCHkYjhmvZDR8KmLHs7skyhURgzkCI4m6pM4BEDJRnfNAqVkujeMn8wiF7hHE4ewapac8Tk1
wGyKr1DQU6npOJReAqeOwyjHyJYLZaDMRQIyHn7tEgww+0FPecMNN9xuu+1cHhS6NxycDOAawXcS
GhYJuJNw8MEHj+IrUFEJ3HbbbU899RQ+UXF1oEFgY3mAfNHnsdcY8I7ttTPeruN1hZCLSXzCEoe0
lZ+2MX+lVRoi5YIhZFqjUjAo2aBhfJnoCyv0aNSrp54YWqGhlUP0jCw9rXKkL4cAoxFAPXpqhE/i
yB16moCnHEMpDgQ0ItlL0xofwXRxXxwD5SwSkOvcddddeK4amwEyNgzvHmCI77XjuWqXB8VtCUdO
GGDK1exxo9EqEnBF3HrrrbhGVBhAoIxvdu2yyy7rrLNOciAe9ggD3rE9cqLbe5iuEHLxiXQEDVCk
I5LlKVNMZKkERgLxwlBgNPaKTy8ohaFJvgzVrJcj8DG+okEZfTmElQCaEozwwtTha8QHBkrOSLzA
ccjIMb7kFvjEpPVYKIKBshUJyHIWLFjAt7LUc55ah22DfqONNnJ5UMQecMzWDOAaKdUXl1Ee3HLL
LfjuAS4KfFqyp4DyYNddd/XDRa1PaOWt3rGVP8VtP0BXCLkoxecsGqEUNIz+ynSjEkjpIVCWAKta
Nj7BipYdwjd6EQClkARwClnhIkcFhyCvBAA98RDQiKTMyOwZKkYmmHp6SRZMQgJIhnEKBbFQHAOD
FgkrVqwobvYYGbnOHXfcsXjxYgjQKwGCgNTnTW96k+8eRLosd4wBplwN7yR0+O1GKA9uvvnmJ598
UlcHPjApb7755m9729tcHnRsV5R5Iu/YMp+dEq7NFcLQTkpMeZXaUoBJQrOgiQthMSZkDbPgJD6G
BNed+h/vYUz5Klp2LmEUVgLADR0Tl2xMriRZQ2svTZSFSaP1RA1ncV8cA62LhA984AMdKBKQ5eBr
lygPcOrZcLxMffBw0U477eTyoLgN4MiDMtDi92s79p2EVatW3XjjjXpzUSwSNt1007e//e0uDwY9
j70D8I7tnXM98iN1hZCXQyayyFHkoNRWJmkESwQCBFMoCAoiF8EgUCmNMBTQo8kaBeg5C5UaakYJ
MYJgiYAg0jCsesUnAH12GdIoSBRkhUC9NBEmWVNbKI6B0S0S8D+j8+fPx9cumfTg1ENAw/GiPNh5
551dHhR36h05JwO4Rq6++upmX1yeMmXK8uXLc4YaHgx3D/DmIlwsuEDYcI1AwN2D3Xff3eXB8Fit
sJd3bIVPbnsPrf0Vwrve9a72LrEk0fCB23AlymJhJQa9lIkQAZQJQB+H2YkUh7NoKHdpIiCuhPEH
jRzdISssBQXEMAmYDOXIGZsNpZeQB5/MRRf3BTHQukg45JBDCrqTwPIg+Z9RnHo0fu3S5UFBZ9xh
h8pAixdK8ncSCioSUAlcd911jz32GK+LWCRsscUWe+yxh8uDoZ7KHsF7x/bIiR7hYba/Qpg4ceJe
e+01wmWV2R25LD6OtUJ+NHPYLM0lnlbKzSJAn8RH5AjWvBCEBEAYCnXF6kU29KIyIrPrVzROhz5q
qKSG0bIaWSUIKSGaJEsQTAJMLayCWWgXAy2KhJ/85CdFFAnIdfDSRjxXjUOo3TUIL23EgxN4K4vL
g3adXMdpCwNIufAK1E5+JwEXxfXXX//oo4/Gq4NFwmabbbbnnnu6PGjLma1qEO/Yqp7ZNh5X+ysE
LG7vvff+yle+0sZVjnoopc5MytFT4MIgQ2CvpcYsliZoIFCWEJUKQoySYA4VWUP6Uk8l+kRgECqJ
1IzZ+NBISbmhI9dJE2AQKFNPDeeihjIxMX4WMyS8QimOheIY6GSRgCzn5z//OR6cwCnmWaaAHqnP
W9/6Vqc+xZ1oRx42A7hG8HajhkVC2+8koCpAzEceeYSXRiwSUEK7PBj2SewpR+/YnjrdwzjYQioE
rOP//b//V6UiAZ/CJDcKSosTE4fNrIzAj3UgAZOMYZSTCArLCPKNgkyKk8RnEPQAZONDk1XG+HRk
z7mA11yythCy8RmHfdaxNV5ecHQrmoHOFAkoD372s5/FuwfIfnBo6JH6+K0sRZ9lxx8JA7hG8J2E
hkVCe99uxPIAFwUaP4EpvOpVr3r3u9+NZYzkKOzbOwx4x/bOuR7GkRZVIWApFSsSlKpKyNLNhBWA
mLkSjx4NegrwhYCeGg2jQCv62ISHUrNIIJKR88SPkRUQjnGWhtEAbh0/sQqvGQmQftj45NgV30IR
DBRdJKA80EsbkfHgEJj3oMdz1bvttpvvHhRxWh2zjQwU/YQ33lx01VVXPfTQQ/joQ8OlgUYZ18g+
++zjn0Vr49nshVDesb1wlod3jAVWCFhQxYoEfArjoPhZLLqR2lIPTTbNjXjAIkBeiYAhNeiF13QM
qCEBGEogAEMGEZJ69tEUkQwSrVk8A0Yv4SmgpwAkA9KFSpkYOZqGjY8xGdB9cQwUVySgPMBLG3//
+9/HpAcHgiHeyvLOd77T5UFxp9WR28gArpGCvpPA8uDhhx9WVYBPP14vW2211b777uvyoI3nsXdC
ecf2zrke0pEWWyFgKZUpEvBBzHwXPRs10ot3WCVDSIY0RS8CqGHkhi6K2cIqU4ymGSloCmCgiSuJ
AMpJn8QXHoLiMH7iiCF9FUGaKESvIeF5LNHdcnEMFFEkoDzAYxiPP/64tiXyHigxxIMTf//3f+/y
oLgT6shtZwDXSLNfXB72dxJQHsyaNavhdw9cHrT9DPZaQO/YXjvjeY638AoBi6hGkaDUVhkMNDEx
5RAaNhw4XTAUUqbsuREYGFqpURwINCmIAM1MQsaAChLdOQvx8hIAgrwoMGDsBRaS1gSfWIFJNMPG
J45xbZbbzkB7iwRUAngri+4e6P9Hsewtt9zS5UHbT58DdoABXCNtvJOA8gAlB+8e6AKh8OpXv3r/
/ff33YMOnNNqT+EdW+3zO4yj60SFgGV1e5Gg9LcFxchQAVMDMuas0EPDPhukmV5IhlIQCoqPITWc
ArJMiiCANIkAl1qUsM4YhPro0toqPAWBY3xGSzQjwWuWuE7LBTHQriIB5cFPf/pTvNMd6Q7OPk6i
EiCUB3h1su8eFHQGHbZoBnCNtOVOAsoDFBsNv3uA8uD973+/y4OiT2WPxPeO7ZETnfMwO1QhYDVd
XSQga0ETp5CZykgThTq2BhZGvnSMJjrKhSYB6CivBJyNLwBN6KlBz1AJQEPBEo0WIABjJpEBIxKw
xERHKAWARrIEwjQcNl4RGNB9oQyMvEhAeTBnzpxFixaxKlBtAAEPTuDHVVweFHoGHbxoBnCNjPBO
AsuDht89QHlw4IEHujwo+iT2VHzv2J463a0PtnMVAtbRvUVCzHohoyETRY+DYp+wTGXEMHMVOJoY
RCaGIgBKNrprFigl071h/GQWucA9mjiEVbPkjM+pAWZTfIWCnkpNx6H0Ejh1HEqGi2QJLfA6Cs7l
vlAGRlIkIPW55pprUB7gtKIkQMO54+lD6oO3srg8KPTcOXhnGMA1Muw7CbhGLr300gcffJCXhq4R
DHGNvO9973N50JmT2FOzeMf21OlucbAdrRDE1qw3AAAgAElEQVSwji4tEpi1YP1IZfhJHVNVWqUh
3XLBEDKtUSkYlGyKLxN9YYU7I9AkAJUEEEwT9ej7Q4cbIIQpGgEYstFdoaCMeIAFoKD4NAGvgBHJ
OHKBEENBjgBY45DIIeEjOC7DchEM4M/J7Nmz99tvv2zwFr+4zPKAX7vEnQSccWQ/EHDucPfgPe95
j8uDLJ/WdCkDuEZa30l44YUXGh7aFVdc8cADD8TCgPI222xz6KGHrr/++g29rDQDI2TAO3aEBFbD
vdMVAljrxiIB6QsaFo/0RbJ2gEwxMaUSGAnEC0OB0dgrPr2gFIYm+TJUs16OwMf4igZl9OUQVgJo
SjDCC1OHrxEfGCg5I/ECxyEjx/iS24hPQmn9FopgYN1110WR0PCHolgkJJMi+8cPS6E8gB5nCg15
D2X8zyhe2ujyIGHMw25noPX/y06ZMiU5QNwc+OEPf3jPPffw6ohFwtZbb33wwQfjNfaJi4dmoI0M
eMe2kcwuDTUKFQKY6roioZ7D9P/3OWQcAvvkrCvTjXogpYdAWQIjs6cXI7MnWNGyQ8IAiHjIQlKP
Ho1KCMIrMgV5JQDo6QUBDVYK6GtxBxqDYESBMMnJUDAJCSAZCiYhASRDwCISVrdCGUCRgFcxNisS
4tTI/j/2sY81fK76ta99LSK4PIh0Wa4MAy3+XxavQI2HifIATxDdfffdKgwgUH7961+PcsLlQaTL
ckEMeMcWRGy3hB2dCgHsdF2RwDPK/JiyElAKTJdhihgi1Scu1Ec8ZA2zYE1ERwwJrjv1J+syZYND
o+CQk/gwxfgRKcfEJTsFV0J9FiyNAkZB1qwQYVpYFiaN8FEDpVuhDLQoEjQvy4Mdd9yRGQ+THpwm
CCgP8NJGlwfiykL1GGjx/7I6WGT/eGZvhx12wHXBS0PCNtts4/JARFnoAAPesR0gubRTjFqFAEa6
q0hgYopPap1LpaoySSNYIhAgmEJBUBC5CAaBSmmEoYAeTdYoQM9ZqNRQM0qIEQRLBASRhmHVKz4B
6LPLkEZBoiArBOqliTDOCI2srfHy1VItFMdA6yIB2f9HPvKR7bbbDvUA1oBTg8YiAQ9O4D9NXR4U
d2ocuSQMtPh/WawQdw9YHqh41jWy7bbbfuhDH/Ldg5Kcx95Zhnds75zr5EhHs0LAUrqoSMDHdMId
h8pTMSQGvZSJEAGUCUAfh9mJFIezaCh3aSIgroTxB40c3SErLAUFxDAJmAzlyBmbDaWXUAQ+WRun
cF8QA82KBGT/hx122Pbbb4/TgcYiAT0ayoMDDjjAqU9BZ8Rhy8YAUi58Dyf7SB7Kg/e+973xGuHF
gh7lwYc//GFfI2U7lT2yHu/YHjnRyWGO/ledUCRgTV/96leTlZV2iFwWn9daHj/BOWyW5hJPK2X0
AjOCrGuvvTYxcQrJUYCLosklq4kukOVFPfB0oSmChSRAKwQGGg6FkSM1tEakXISUEE2SJQgmIZok
SxBMAkyQtSTpyywgSyjz8oa6NpQHH/zgB9/whjegHuAOR0/53nvv/cIXvoC3GA01Zqnwv/vd70q1
nl5YDH4uo0qHiewfr/DSNcJD4zWC1xl985vfPOKII7r6eG+66aauXv/IF+8dO3IOOxnBO3aU7yHw
ZJf/ToKSS6W/FLh+WoWhElkpE1MMacIQAmUJUSkkMYk7wwoDgb7UJ2Fj/OgiLwCy8aGRkjLDcgpo
FFZCVHIiauhCDWWGgpVDCRET5bbj44xcg/vOMMDy4G//9m+R7uAs8ERQRnlw4YUXdnt50BkaPUuF
GcDdA/wACG4U8ALRlYIhfgwBvyq4cuXKCh++D63rGPCO7bpTNowFl6JCwLpLXiQwp8E6o8AUVqTL
RE0zK2HoKQAmmfGph5xEUNgIiEHoTphiJvFpJTIbH5qsEmAoNSmFZvETGCfipDRl4ytghMmxvXgt
j3O57wADKA/w4nakPjiVzHv4oweYGuXBD37wA5cHHTgLnqLMDCDZ2nvvvVFC4wNKtQEF3D348Y9/
/OKLL5Z5/V5brzHgHdsjZ3z0nzIS0SV/3EipqgStXIKS4JiJEo8eDXo8XAEBLuyp0TAKkGMcDKlB
BMkKQoH6/PGJV8/p4K5VwdQwmvRCagEJPtFrrkTPIaIl+rbjtXJFtlAcAygPPvCBD6A8QLqDWfRk
EYb4n9GLL77Y5UFx5DtyVzCAh4v22msvvMOUH79YM64OfsijPLjuuutWrFjRFQfiRfYIA96xPXKi
cZglqhCwmpIXCfwER0+BuwQZrYZKc5XEA1OH1x6tgUA9BXklAobUoBeec7GnlXLDfJqOERYdoY+m
hutXWDgmeM2rIIlAPCMkcTiXlEBSliAT5y0Ir+l4LO4LYgDlwUEHHYTUB/FZIUDAOWV5cOmll7o8
KIh5h+0WBvB/sXvuuSfLAxUGWDzkRYsWXX/99S4PuuVU9sg6vWN75ETzMMtVIWBNpS0SkFYyX0eK
w8ZEU3rtG1glQ0iGNEUvAqhh5IYuitnCKlOMphlpRc8GDExxJUTSqumiABOH0YtKaZq5E6YIiCNZ
QnauaJIsYdh4rLZhkBjQ8kgYUHkAqsk2euZAuHtw2WWXuTwYCb32rQADSLb22GOP173udbg0eDgq
EvBz43PnznV5UIGzXKVD8I6t0tnMcyxl+R5CXCuKhK985StRUwZZCSU/zZX0aG0AQKkGPV2goQka
WuUSBYGBoZ4ayBJoUhDpgWloEjIGFDK6cxbi5SUABHlRYMDYCywkrQk+sQKTaDqGTyaKx1IGGe/G
wQq7tOFbld/97ne32WYbMImkB8UAep7r+++/P1se4JcQli9f3qUHi2X7RUajcsngTSPdu2ew8jPP
PJPlAa4OHQjkhuUBXnO0bNkywbpRGJVNUqpJvWO7a9+WavOMymLKWCGAiLIVCUp/W5wkbH3A1ICE
RnjoIbOXUkIzvQAMpSAUFB9DajgFZJkUQQBpEgEutShhnTEI9dGltVV4CgLH+IyWaDqJ16ricVke
IQOrVq363ve+h28hx8IAVCP1eeihhy6//PLs3YOf/OQnhxxyiP/HdITM271bGPjLX/5yzjnn/PKX
v8R1waYiAQ8X3Xjjjdlr4YYbbjj44INfeOGFbjlGr7NKDHjHVuls5j+WklYIOIBSFQn8EBetGCKR
RS9NFAQWRkg6AiwTHeVCkwB0lFcCVhDCaEVPfNYrC1BAmRINI8f4mBQY9gIDIExiIkZLlUsiJMOO
4bVsLsD9CBnA3YP//M//ZHlQ3xSrfxkNDxc1LA84o4uEETJv925hAMnWWWedxfJAhQEuFsiPPfbY
zTffnC0PeGjXXnvtlClTcLetW47U66wGA96x1TiPwziK8lYIOJjyFAkx64WMhg909Fgk+4R6KiMG
cgRHE/VJHAKgZKO7ZoFSMt0bxk9mkQvco4lDWDVLzvicGmA2xVco6KnUdBxKL4FTx6FkuEiW0Ea8
jpprcz9sBlge/M///A9yHQQBsUyA0D/88MNXXnll9u5BnMtFQmTDciUZQLL1rW9969e//jWuDjZe
I5AfffTRW265pVl5QDZQJPhOQiU3RmkPyju2tKemAwsrdYWA4y9JkYCPb54MZKj8WI+pKq3SECkX
DCHTGpWCQckGDePLRF9YoUejXj31xNAKDa0comdk6WmVI305BBiNAOrRUyN8Ekfu0NMEPOUYSnEg
oBHJXprRxcfFcEnuh8oAyoMZM2bcc889IFNJDwQ0/D70rFmzkvJg0qRJ2SlcJGQ5saYyDCDZwk8j
szzAdYErhQ3ym9/85nnz5iW/e3DAAQdkj91FQpYTawpiwDu2IGK7JWzZKwTwWIYiAfkrU1h8oEvW
OZYJ1kSJIa3SC0OB0RST8ekFpTDQQOZQoZoJcgQ+xqe75pI7NNn4VAojQWuAgBbjM0iMD4AcaUXP
yDG+5FHEJ1PHZVselAF+NZnlAcAgkw3yDjvscMQRRyTlAfSoGVwkDEqsAZVhAMnW1KlT77zzzoGL
Y3UhvdNOOx1zzDG4iJKDnTlzZsNrhN9J8ONGCV0etpcB79j28tmN0bqgQgCto14kKN3BYiCrT065
Mt2oB156CJQl6K8FwyoyhwQrWnaYeBEApZAEoEeTVbMoMgV5JQDo4Q4lBDQJkOuB+zsGIZIywZTp
JVkwCQkgGQomIQEkQ8EkJIBkCFhEwuqWkwFkNueee+7dd9+NMqB2y6D+iBFllAef+MQn8As72VDr
rruui4QsLdZUkgEkW2ecccZdd92FDxlcIPUPm1oHGeXB5z73ObxHMnvgY8eOvfrqq10kZJmxpmgG
vGOLZrgr4ndHhQAqR71I4OmMKS8+36mkwHQZmoghQH3iQn3EQ9YwC9ZEdMSQ4LpTf7IuUzY4NAoO
OYkPU4wfkXJMXLJTcCXUZ8HSKGAUZM0KEaaFZWHSDBsfIyCI26AMoDz49re/vXDhQlCnhrwHp2nH
HXf85Cc/2bA8YFgXCYPSa0AFGECyddpppy1YsCBeIJQnTJhw3HHHvfzlL292mLh88AWehkWCHzdq
Rpr1I2TAO3aEBFbGvWsqBDA+ukUCE1N8rOvcK1WVSRrBEoEAwRQKgoLIRTAIVEojDAX0aLJGAXrO
QqWGmlFCjCBYIiCINAyrXvEJQJ9dhjQKEgVZIVAvTYRxRmhkbS9ec+nQLDRjAOUBXtqI56r536I4
ERAoozw48sgjG/7PaIzmIiGyYbmSDHzjG99gecBLA58waJB33nnnz3/+8y3KA7LBOwnNvpPgtxtV
cs+M7kF5x44u/+WZvZsqBLA2ikUCPtMbnjblqbASg17KRIgAygSgj8PsRIrDWTSUuzQREFfC+ING
ju6QFZaCAmKYBEyGcuSMzYbSSygDPjkWLsl9wgDKg7PPPvs3v/kNzh0Yq1UG9VsH6N/4xjceddRR
g5YHDOgiISHWw8owgN8GOeWUU2677TZcIGy4OiigPDj++OMHLQ9IBe8kNCsSDjzwQH8noTJ7ZnQP
xDt2dPkv2+xdViGAvlEsEnjymA/pRPLjXibpISjrBUZDyuwJjhEgJ/GBiWC6sBcyiUCXQb0YJPpq
wdn40NDKsAquNdCFMFkxlCxBSAnRJFmCYBKiSbIEwSREk2QJgkmAqYVVsF4WUB7gF2HxXHWtLBhI
eiDg6wd4K8s///M/5ywPyKGLhF7eS1U9diZbv/jFL/h5oh6XCUroE044IWd5QH5QJPiLy1XdKiU5
Lu/YkpyI8iyj+yoEcNf5IkGpMxNi9BR4IiFDYK9Ty78HEQBNzW0ATCEqFUSm6K7ItGJI34iBiVYJ
wABAJZGakaZohUZKyg0d6UITYJqLemo4VwwuPE2aKGKiPOr4uEKu2T0ZQHkQ3+nOCgEmMIby4NOf
/vSQygPGdJHg3VUlBpBs4e/U/PnzcVEk7U1vetO//du/Dak8IDN43KjFdxJ8J6FK+6fzx+Id23nO
yz9jV1YIoLXDRQI+4nkuo8AUVudYJmqaWQlDTwEwyXCMchJBYemIIX2jIJPiJPEZBD0A2fjQZJUx
Ph3Zcy7gNZesLYRsfMZhn3UcXbxWhYW5kQGUB1//+tf50kZoUB6wQkCPt7J89rOfHUZ5wMguErzH
KsMAHi5iecCrgx+S6PFw0Ze//OXx48cP70j9dqPh8WavQRnwjh2Uoh4EdGuFgFPV4SJBqaqE7HZh
QglAzCyJR48GPQX4QkBPjYZRoBV9bMJDqVkkEMnIeeLHyAoIxzhLw2gAt46fWIXXjARIX1p8wq3W
35sCy4P4cBF4AEV8uAjvdB92eUA+XST05r6q0lHjPTAnnnjiz3/+c1wXbCoSUB588YtfHDdu3EiO
199JGAl79s0y4B2b5cQaMtDFFQIOoMNFAj7uMSk/9LWBkNpSD002zY14wCJAXomAITXohdd0DKgh
ARhKIABDBhGSevbRFJEMEq1ZPANGL+EpoKcAJAPShUqZGDmaSouPa+aCe7NHeXD66af/6le/QsYD
BtCzQeZLG0dYHpBVFwm9ubuqcdQrVqxADdDwuwd/93d/h7sHIywPyBLuJPg7CdXYMKN+FN6xo34K
yryA7q4QwGzHigSkicx30bNRI71OM6ySISRDmqIXAdQwckMXxWxhlSlG04wUNAUw0MSVRADlpE/i
Cw9BcRg/ccSQvoogTRSiV6nw5Cour9dklAd4pzvLA7BBQlAhQOBLG9tSHpBVFwm9truqcbxMthp+
9wDlwcknn9yW8oBc8TsJfrtRNXbOaB2Fd+xoMd8t83Z9hQCiO1MkKLVlboQeGso82RxCwwYlXTAU
Uqbs/hAYGAVMBJoUhC7ENDQJGeMIGd0B4CLpQowANAGTBGTYGJwY9VEgTLNzKAD1GjazCtB5vGbU
2npHwG3oU0899Y477gAJaLx1AAEbo+3lAVl1kdA7u6saR4pk6wtf+ALvHrByrl8rtW6XXXb56le/
2sbygIz5TkI1ds5oHYV37Ggx30XzVqFCAN1FFwnKlVucWiZMQLIBCY3wUEJmL6WEZnoBGEpBKCg+
htRwCsgyKYIA0iQCXGpRwjpjEOqjS2ur8BQEjvEZLdGUGa+jiDxUXkZ58LWvfQ3lAfMeHC94YJGA
8gBvZWnj3YNIpouEyIblMjOAZAtvL413D1QkvOUtbymiPCAbvpNQ5l1R5rV5x5b57JRnbRWpEEBo
oUUCUiI0nTbISGSjRiYINWgdLAyHNCkhljK6QI4AYtBTCSsahmgQsvHr9hqApsSLVkaQL4cyUWB8
mTSEhjGTyAAIk5gYME6nsFEgLAaRHGFRGfUdi58sgMuucI/yAPnN7bffTrZx+Eh9IKPHgxPIigoq
D0ipi4QKb63KHBqSLdTJDb97gBIa1XXb7x5E6nwnIbJhOQ8D3rF5WDIGDFSnQsDBFFckxKwXMhpS
JfSYlH2ymaiMGGaWAkcTg8jEUARAyUZ3zQKlZLo3jJ/MIhe4RxOHsGqWnPE5NcBsiq9Q0FOp6TiU
XgKnjkPJcJEsYRTxYonHUuEe5cFXvvIVlAc4ZBUGENB23XXXk046qdDygMS6SKjwBqvAoSHZ+vzn
P3/rrbfiGkla27970Iwu30loxoz1WQa8Y7OcWNOMgUpVCDjIgooEfPSTQWSo/DMQU1VapSFSLhhC
pjUqBYOSDRrGl4m+sEKPRr166omhFRpaOUTPyNLTKkf6cggwGgHUo6dG+CSO3KGnCXjKMZTiQEAj
kr003YWPi+chVK9HeYDvVqo8wCGjMECPhueq8cKWDpQHZLV1kXDwwQfjb171+PcRdQUDX/rSl3D3
AEvV1cFr5O1vf/s3v/nNTTbZpDNHMeidhBdeeKEzK/EsJWfAO7bkJ6hUy6tahQByiygSkL8yhcWn
v2SdSJlgTZQY0iq9MBQYTTEZn15QCgMNZA4VqpkgR+BjfLprLrlDk41PpTAStAYIaDE+g8T4AMiR
VvSMHONL7iJ8stR4mBWQUR7opY04nNpdg4Hy4K1vfSv+xnSsPCCZLYqEOXPmuEiowJbrukPg/8Ve
f/31+Cjgp4GukXe84x1nnHEGNm0nD6r1nYQpU6YsX768k+vxXGVjwDu2bGek/OupYIUA0tteJOhv
AILzjwH75AQr0416IKWHQFkCI7OnFyOzJ1jRskPCAIh4yEJSjx6NSgjCKzIFeSUA6OkFAQ1WCuhr
cQcag2BEgTDJyVAwCQkgGQomIQEkQ8EkJIBkKJiEBJAMAYtIWCvTUB7gCSLcPajXBX/Fr6HhRFNG
eYB3ur/85S/v/MG6SOg8556xGQNItv7lX/7lhhtuwIeACgOAIe+2225Tp07tcHnAdba4k3Dttdce
eOCBLhKandDK671jK3+KizjAalYIYKrtRQLZZ35MWQkiBabLMEUMkeoTF+ojHrKGWbAmoiOGBNed
+pN1mbLBoVFwyEl8mGL8iJRj4pKdgiuhPguWRgGjIGtWiDAtLAuTpmP4OCMmrUBDeYDvH992223I
dXA4OEA0FAmQ3/a2t+FrCaNSHpBYFwkV2GAVOIRVq1Ydd9xxP/vZz3Bp4HDQq0hAefD1r399VMoD
EtviTgLqGdxtc5FQgR041EPwjh0qY8aTgcpWCDi89hYJTEz5J4HcKVWVSRrBEoEAweIuVBC5CAaB
SmmEoYAeTdYoQB9XqyGUEYZhjCBYIsBFmrh4RYOVAPQxPpXScMhJGad78TqWhJBuHKI8wFtZWB4o
6aGA8gAvNRrF8oB8ukjoxn1VpTXj/2I/+9nPsjzgpYGjw4cA5He+853f+ta3RrE8IM++k1Cl/Tby
Y/GOHTmHPRuhyhUCTmobi4RmiaCyXkxHDHopEyECKBOAPg6z21FxOIuGcpcmAuJKGH/QyNEdssJS
UEAMk4DJUI6csdlQegndiE+OnYfQdT3Kg+OPPx5vZcHKcUTIeNB4aPjaJX4xbdTLA1LqIqHrtlZl
Foxk65hjjrnpppt4XfAyobz77ruXoTwg1SgSrr766kmTJmWZ952ELCcV1njHVvjkduDQKl4hgEEU
CZ/5zGfaSCVyWf5JYEzIGjZLcwmglbJcEASyhhCS+AQ0XL+Q9QD99woYKmoSX3lRH5FcofBCMiat
ik+YMFkvxU8EISUwZgKLSiETDIaCSUjAERPl9uJbRMuup4QalAd4rvrnP/85DoTHgp5FAr52+e//
/u8lKQ9InYuEEm6hyi8Jj2rg7sHNN9/MSyNeJrhGzjrrrFG/exBPwZgxY6688soDDjggKin7OwlZ
Tiqp8Y6t5Gnt5EFVv0IAm/hYH2GRoNSZCTF6CjxVkCGw18nD3w/+CZEJw5rbAJhCVAopE6NxqMga
0jdiYKJVAtdAJZGakSYoZYVGSsoyAQaNwkqISoaihnPF4AwFK00SIibKXYePR8Rj7JYe5cGxxx6L
8gALxlGwMODikfqcdtpppSoPuDAXCd2yu6qxTjy+f/TRR9944428zHmZUMbX9zv/5qI8rLZ43Ih3
EvwK1Dw0dinGO7ZLT1yplt0TFQIYR5GAL1kOm3r+JYB7FJjCKqZM1DSzEoaeAmCSGZ96yEkEhY2A
GITuhClmEp9WIrPxockqAYZSk1JoFj+BcSJOSlM2vgJGmBy7C6/D57F0RY/y4HOf+9wtt9yCxaM2
wJr5cBF6vpWlhOUBiXWR0BUbrAKLRLKF/2Piw0W8OnBQvF5wjZx77rkbb7xxOQ+zxReXcSfBX1wu
51kb+aq8Y0fOoSOAgV6pEHCoI/xOglJVCdkNxAQRgJgpEo8eDXoK8IWAnhoNo0Ar+tiEh1KzSCCS
kfPEj5EVEI5xlobRAG4dP7EKrxkJkL4y+ORc6HjLKaA8QPGM8gDLU2FAGV+7xFtZSlsekE8XCeXc
V1VaFR7V+NSnPsUXm+K4cIGrSEB5cM4556y33nplPt5B7yQgmyzz+r22oTLgHTtUxoxvxkAPVQig
YIRFApM/9BTIKVJbDbNpLjB1eO3RGggRIK9EaIjnXOyFx5ABowAZgLgqelHPPomgoZYnlyyephhf
7hTQUwBSy2Mc9QwimIRq4HU4PMzS9igPPv3pT+OtLMh40Hh2IGD9+NolfhG25OUBiXWRUNoNVoGF
IXv+5Cc/OXfuXBwLLw0IuEAgo4T+zne+s/7665f/MFvfSfDvJJT/DOZfoXdsfq6MHJSB3qoQQMew
iwT8VWD+ip6NGunFNaySISRDmqIXAdQwckMXxWxhlSlG04wUNAUw0MSVRADlpE/iCw9BcRg/ccSQ
voogTRSiV1fjyW08nLLJeMcF/md03rx5WGrSkPqceeaZXVEekFUWCfvvv3+WZP/icpYTa3IygGTr
qKOOQnnACwReKhK6qDzgwfpOQs6T3tUw79iuPn0lXHzPVQg4B8MrEpTa4q8FgqCHhjLPK4f8W0I9
XSKS1ob7QGD6AkNNFGhSEAGAaWgSkjNqCuKjO2chXl4CQEjiM2DsBRaSVg6FTKzQJ5rK4JMDEQNl
EFAe4GuXeCsLMh6sBz0b1rzHHnucffbZXVQekE8UCXhzi4uEMuyuyqwBLzblw0W4Lth4seAO2/Tp
07vi7kE8FygS8ApUv90oclIx2Tu2Yid01A+nFysEkD7UIkHpb4sThj8hgKkBCY3w0ENmL6WEZnoB
GEpBKCg+htRwCsgyKYIA0iQCXGpRwjpjEOqjS2ur8BQEjvEZLdFUCa+jjryNuozyAP8zyoeLsEIu
Ej2KBJQH06ZN67rygJS6SBj1rVWZBfBRDeTTOKL6JbK6wzXSjeUBTw1egTpz5swWv5Pgtxt16R72
ju3SE1fyZfdohYCzMqQigX8fdC4xRCKLXpooCCyMkHQEWCY6yoUmAegorwSsIITRip74rFcWoIAy
JRpGjvExKTDsBQZAmMREjJYql0RIhpXBixYe4Kj3KA/wXDXeyoJ6AItB/3//93/1s/fSnnvu+R//
8R9dWh6QWBcJo77BKrAAJFv/9E//9OMf/xjXBS8TXiDo8fLf8847r+vuHsST0vo7CVOmTMHhR7zl
8jPgHVv+c9SlK+zdCgEnLH+RELNeyGj4a4EeQdgnp5/KiIEcwdFEfRKHACjZ6K5ZoJRM94bxk1nk
Avdo4hBWzZIzPqcGmE3xFQp6KjUdh9JL4NRxKBkukiV0EV6s8thHsWd5gHe6I+/Bqrgw9CgSUB7g
a5ddXR6QWBcJo7jBKjA1kq2Pf/zjye8e4LhwmXT13YN4alp8J4GvQPWdhEhXyWXvWLy01zu2oF3a
0xUCOM1ZJDCXAh4ZKmS0mKpiSFM8SVRSI3xUygQlG4NAlgkCTZhOM9JKE5XASKCVQ/R0V0xahWcQ
DgFGI4B69NQIn8SRO/Q0AU85hlIcCGhEspem2vh4sDzkzvcoD4444gh87RJUs0JAj4aV7LXXXnin
ewXKA7LqIqHzu6saMyLZ+tjHPqavJuuTCpfJu971rgsuuKC0v3swVP5b30lwyjVUPkcL7x0L5l3W
Frf9er1CALN5igQkVWgA42+GZJ0Vmbv0aasAACAASURBVGIiSCUwEogXhgKjsVd8ekEpDE3yZahm
vRyBj/EVDcroyyGsBNCUYIQXpg5fIz4wUHJG4gWOQ0aO8SVXGJ8cmvjsjIDyAA9OIPWpFwV/BeEU
sCqUB3iuGll1Z1bSmVlcJHSG5yrNgmTrox/9KL6ajIPCdaGG4d577/39738fWXWVjrfFnQT+4jII
qdLxVu9YvGN1Tr1jRUV7BVcINT4HLRL414LUQ4bAnhr1ynSlIVJ6CJQl6O+QAsb4BCtadph4EQCl
kIompTQKK0FeXHbU0wsAYiigh16NeAyjo2QI9E1gvYOPRxppKVpGeYDUR/8zqtoAAsqDGTNmVKw8
IJ8uEoreV1WKj2Tr8MMPZ3mA6wKHpo81lAfnn39+xcoDnjscFL6N3eKLyy4SSrvJvWOTU+MiISGk
LUNXCP00DlokENcix2W6DFjEJCdJOaKEBA9fuQuTCBFAueYzkKxzRrlAH9cQh8JQYAStJyKlTFwY
OSIha5gFS6OAUZA1K0RYV8fXoZG6DvQoD5j6IO/h7Ogp77PPPv/1X/9VyfKAxLpI6MAGq8AU+A3a
ww477Prrr8elgYYjUpEwYcIElNCVLA944vB2I7wmuGGR4Ic3Sru3vWO9YzuzOV0hrOa5dZHAxJR/
P+ijVFUmaQRLBAIEWz33QF0BvFwEg0ClNMJQQI8maxSgj6vVEMoIwzBGECwR4CJNXLyiwUoA+hif
Smk45KSM0zt4HXtCYBFDlAdMfZDxoGFq9hDwP6PVLg/Ip4uEIvZVxWLit0F49wDXBRsOEFcK3lx0
xRVXbLjhhhU73uRweCeh2e8k+O1GCV1lGHrHtvhlD+/YNm5RVwhrkNmiSMBfjjWgAwNlvVAQg17K
RIgAygSgj8OB2Kv/VRzOoqHcpYmAuBLGXx1xQEocoztkWSkoIIZJwGQoR87TbCi9hF7AJ1zxkNve
ozz40Ic+dN111/Gs1UqEgVcY4e4BHpyo8N2DSKaLhMiG5cgAHtXANXLppZfiGkGDiQL63XbbDd89
qHx5QDZ4J6FZkYAvLvtxo7htRlH2jvWO7eT2c4WQst2iSCAUuSz/lnDIvygyxXDKeonnkHKzCNAn
8REwgpP4iiZMVhNdICfxgacLTREsJAEN1y+MHBONgksQUkI0SZYgmIRokixBMAnRJFmCYBKiSbIE
wSREk2QJgkmAqYVVsJEIKA8++MEPojxgYYD3meK8UEZ5gLey9Eh5QA5dJIxkL1XVl09y4z8jeT2y
x8FC2HnnnS+55JItttiiqseePa4WP6aGx40OPPBAFwlZ0jqs8Y6NhHvHRjYKkl0hNCA2WyQwOQaU
6S96CnSGTFOMpb83MkFT9+sH0ysqhZSJATlUcA3pGzEw0SoBGIUlUjPSFK3QSEmZ0RJHutAEmOai
nhq6UENZeA41UcREufL4yAA5aVeP8gB3WvF3neeCtw7Qg1KUBz/4wQ96qjwgqy4S2rW7KhMHX9+/
5ppreDi4UtTe8pa34OfSXvnKV1bmSHMeCB43avadBH8NNCeHhcK8YxN6vWMTQto+dIXQmNKkSMAf
D+KiwBRW/jJR08xKGHoKgEmGY5STCApLRwzpGwWZFCeJzyDoAcjGhyarjPHpyJ5zAa+5ZG0hZOMz
DvusY7XxOmoceLsayoMPfOADc+bMQXDeNEBkyigPLr744h4sD8iti4R27bFuj4MveuKXxXn3ANcI
DwfXCBoeLpo1a9YrXvGKbj/G4a2f30lo9jVQ3EnwT1MNj9gRennHNiPQO7YZM23Ru0JoSmNSJChV
lZD1xB8YKAGgQADx6NGgp0AYemo0jAKt6GMTHkrNIoFITAGBvfAcSk9k0jMOkPISPokmvZBJ/GZ4
zWg8qAB7aOKkLQLvHiCUbh1wlve85z14cKJnywNy27pIAHVtOQUOUnIGcKIvvPBC1ga4OlQkoDzA
NdKDdw/i+WrxdiPcScB/Y0ew5c4w4B3bgmfv2BbkjNDkCqEVgUmRwGSO+ZbckOlSD002LYZSeAgR
IK9EaIjXdAyoYZJnU8+JFFZgahSf+obrlwuEBJ/10kTZ+Foe46hnkMQRyt7EiwfSMsIe7zZFBCY9
6Nne+9734uuYPV4ekNhmRcLLXvYyUjdC/u1efgaOOuoo/NcjrjtcHVgtBTxcdPnll2+66ablX3/R
K+TDGw2/uPzxj3+86NkdP8uAd2yWk6jxjo1stFF2hTAImSoS8FeE+St6NmqkVyBYJUNIhjRFLwKo
YeSGLorZwipTjKYZKWgKYKCJK4kAykmfxBceguIwfuKIIX0VQZooRK+ewvNcxMMftvyP//iP+H9Q
sKfsZ999973ssstcHojSbJGA8gCkgTphLFSYATxFgwfuY5Gw++6743s7PX73IJ5xkDNz5sz4uBH/
p/aggw6KMMudYcA7dlCevWMHpWgYAFcIg5OGIuHkk09WahsT65jYAYChGuLSBRqaoKG14ZQCA0MA
NYpDd/bECNDMlEynKYiP7tBgSLy8BKApTg05aQJzbeyBkUB8YhVAMAm9hk8OnIc/vF5FAmLut99+
+Evv8iBhMhYJLg8ScnphiIfuUCQg68U1goeL8LsHPfvdg2anO/l/WXyMuDxoxlUH9N6xg5LsHTso
RUMFuELIxRiKhC9/+cutofhLgyxZDeCY80EPDftsnGZ6IRlKQSgoPobUcArIMimCANIkAlxqUcI6
YxDqo0trq/AUBI7xGS3R9DJeLEWehyezSHjf+96H1MflQUMOWSTgy5e+e9CQn8ormXLhpwPx1WTf
PWh4uplyoTBANeXyoCFFnVR6xw7KtnfsoBQNCTBmSOheBvM2wmmnnQYSkMkhkW2Wz0FPkzAc0nHt
tWtVmUyktO6xxq0DAuiInl4JWEEUXwDgoQSAGvQRQ5M0ErJgmiKAMZPIAAiTmIQHQCbJErTyHscn
hOiMDENAkYA2DMfecUGRcNVVV/XO8fpIEwbw8AZaovQwMsCHi6LG8igy4B07KPnesYNSlB/gewj5
uerDbYQvfvGLSGHRlMlBzoagMmIgAyZwNFEvE6MRACUb3TURlJLp3jB+Motc4B5NHMKqWXLG59QA
sym+QkFPpabjUHoJnDoOJcNFsoQK43UWyJV7M2AGzIAZMANmwAx0mAFXCEMj/Etf+tKJJ54Y813I
aIii5JURqZRMa1TKVPOvNwaBKBMEmuDOCDQJQCUwEmjiED3dFTNxxDDGp5cwEBRWAq3qFZ9TaMYY
SnHoRSR7aYxPKNXQghkwA2bADJgBM2AGOsyAK4QhE47bCCgSopuy55j1KuWVQBdhKMCqBgCUGEKg
Uhia5MtQzXr4Esloiq9onELuHMJKAPUJRmBh6vDaatWAgZJD4gWOQwAwZE+9ZOPFTEIFiXJvBsyA
GTADZsAMmIEOMOAKYTgkn3TSSf/6r/+a9VSmG01MmqkBgBgJsKoRgyEE9gQrWnZIWIKHUkhFk1Ia
hZUgLwWkCXp6QUCDkgJ66NUIxpACYZKToWASEkAyFExCAkiGgklIAMlQMAkJIBkKJiEBJEPBJCSA
ZAhYRMLqZgbMgBkwA2bADJiBzjDgCmGYPH/hC184/vjj6cxMjukyNMyhG8ZVzichwTPzjmEhC6yJ
BOBc9IKVgOiSLCYOEzBM1BATkQjIYeLCZUQkZA2zYGkUMAqyZoUI66n4ooJUuzcDZsAMmAEzYAbM
QAcYcIUwfJJPOOEEFgnMWZHMDZq8EiBYnFtBlBQKBoFKaYShgB5N1ihAz1mo1BDKCMMwRhAsEeAi
TVy8osFKAPoYn0ppOOSkjGO8OExoEVckyr0ZMANmwAyYATNgBopmwBXCiBjGs0af//znFYLJXJLs
0srkOAIoU48+DhVQgnJraLLxYW0IiEjGV0AJiWPD+FASpoAYJgGTYQwr9+ykgkkgptlQegm9gE+4
FY0WzIAZMANmwAyYATNQBAOuEEbKKm4jHHfccYzSLG1lhkcr5ZjzQdYQAmAaMmwy1IqFBEAYCnXF
6u8DyAWCvBRcvlyhwEL+//auBz6K6lovGuSPBouKf0AERSxYCRbbKlaoQW3FVoP/+qwEK9WCWquh
rVqw0gJtbbB9JfS9GnyV0PKnVrQ1VA21AhqtYjVYQhWUINAKlaigiZJAorxv9ux+e/bO7maT7CbZ
5MxPJ98997vn3vvNneXcmTszQpBc+hcaOf5S9O8AMgnYAFiICUgj0FnEBKQR6CxiAtIIdBYxAWkE
OouYgDQCnUVMQBoBshLkkmbAFDAFTAFTwBQwBUyBlChgM4QUyIjbCAUFBU54raM6xtYAgglAI0ZT
mAvMoFCMbCiTUlbsLOgAccIi4hZJbH7/sNAoGDTWC0uwXORJZe2NzRAaS9GDAO3fz4HF+CILhaIm
2kLpDJgCpoApYAqYAqaAKZByBWyGkBpJv/Od79xyyy3aFyNdMTK8E4C9ANCIwdTY8SB+hO9gGsWn
9uP4l4JC8PuHxW8EGUbtOYF/hyZM7An8/qVIvILG1/pQJZHU9qaAKWAKmAKmgClgCqRDAZshpExV
rDX69re/DXc6npak7MWOPTbaEfPpJO0A2PwRIfk616Fph+SLEaUIvAqiN/EDAkshP6Y32smk28R8
Vmh8SEH1qGeT+sgxIs2AKWAKmAKmgClgCpgCKVfAZgiplBRrjTBJ0GEfvCOJTYCExUgCiFHs0gjS
CMgXgqYJduJsErR/lqVbVo0szYxXneazXhodgCQtbB5KiZFZtGhg/GT00Rw5HLY3BUwBU8AUMAVM
AVMghQrYDCGFYnqusNbo5ptv1k511Es7gjzaBYgFWDYy/QAEv1EszNLeJIthZaiC8BRFt4RO6Mep
iHZdSoy0iH+nIJJCowdaNNCljE+tCKgPjyYtBkwBU8AUMAVMAVPAFEiVAjZDSJWSET+4jXDTTTch
LYGdhM4S0mEvIMIOI5JJYFxIIFmei+BNCdrhQyzBHO9+hd+bNgpfF5dcKe44YZaUkoqAnY3ehEAa
gfCdXBgdi/GpSUzFqA+B0GxvCpgCpoApYAqYAqZAqhSwGUKqlIzyg9sIN954o47hJIBmGB3FDgf0
jlEnxRWdCKB/JMWCIoKZRSck0OIAFJGy4gR77cRfPHEu+QJIliRzWRctxqcmAMQx9aGqwrS9KWAK
mAKmgClgCpgCKVHAZggpkTGGk29961ucJDCSA5BQD3saURiYSU0QI/YMEDWZTlhW2iF8fym2kgTy
meVYxLPsJYvNYxHkyqYJjh821bGjIP0AMGl8RygnSX2omJbRsClgCpgCpoApYAqYAq1RwGYIrVGv
ibKYIUydOhUkxnMAUgaBnWDumaUJMMrmBIIw6rqRFALt4t+phUWEL2TssUlx2YMGC8mSlCzatWev
fHDTReLxhQO6A4xPTUTw5PUR6YRve1PAFDAFTAFTwBQwBVqvQFbrXWSEh9dff71d2pmbm7t79+5H
HnnkoIO8yZg/mIOFGwgIE5GUpgqQXBTXESQJdEsgWUIWb+JBF4eFSe2fRjiBHXuxADv+pRahiQfy
Jald0Y+UAgG5stcWwbLXxbsgHyK89tprFERrRSOB5GrFmNWRQXudkunQBH055ZRT0uHZfJoCpoAp
YAqYAu2iQJeYIbTvP96XX345orcVK1bIAUY8pwGyuMGOXInFxShkYMliWfEQbw++MMUb/dObOGTx
mP4dDslsAwA2OqcTtJ9lhaDLCh8WcjQ2vujjjFhqlUAfJ4uadxCgJzwdpEkpbAaOl3PIUujcXMVT
oLGx8amnnoqXm3H2NWvWOG3uTL1D13C8nA52taSN2Mw64jZiu8QMAYOyff/9/v73v3/UUUctWrRI
x8cS9iGw4yYnD5IAsmdoKFn+pNAcPowyzaAdFhoBaBe33Gv/QpMs2CUJgA1GAdjDzk3ISMZ0KKWY
BZq4InAITpI0AofgJEkjcAhOkjQCh+AkSSNwCE6SNAKH4CSHDh3q1weceJu4lSLxOGY3BTqTAuef
f35n6o71pdMrYCO20x/iTtZBew6hjQ7o9ddfP3nyZIRxUh8BkjqqA2aSHAdogmCvTDhYd/zDrnuo
k363YhGOZrKRThHxrJnATPrJtNChBsz1A00z/wn0YZYcGtubAqaAKWAKmAKmgCnQAgVshtAC0VpY
5LrrrsMkAYUZ42pHYkSExyCPNAAx0kKOAOyxMVcD2KUWMTKpm8EsFiTNASDQohtPb8gVAvb0xlK0
CAelNGCu8bUsonPyerKsc4AsaQqYAqaAKWAKmAKmQJIK2AwhSaFSQ8MM4etf/7pEexLJSVjsj4md
+hg9wy7FhcDiMQmaKdU5bpF0Csb0TxodopTj0ElqtywOIBtz/cAhOEnjO4I4SdHHORbCsb0pYAqY
AqaAKWAKmAJJKmAzhCSFShnt2muvveaaa3QMB8wkAII8JqVWJ8mmkAkCOQKChsjzACwCwFJ0zrIS
X5JMphAkl/6FRo6/FP07gEwCNgAWYgLSCHQWMQFpBDqLmIA0Ap1FTEAagc4iJiCNQGcRE5BGoLOI
CUgjQFaCXNIMmAKmgClgCpgCpoApEFMBmyHElCW9RtxGmDRpEgNuAMGoVYDsGeQxV5rFJAjEArB3
gDgRoxSXUrD4/cNCo+CYBaWdkgUagGCxi0XqEotg4Wj/fo7xU6gPXVFnA6aAKWAKmAKmgClgCiSj
gM0QklEp9RzcRpg4cSL8Im5GJMdgTmOG3bp64YuFmMDvR7JopytYkMUkHfqNyKJ/YHGFvQDHvxhJ
8wO/fykSr6DxW6MPVcWBsM0UMAVMAVPAFDAFTIEkFbAZQpJCpZ6G2whXX301YjgJghkKE6BKf4RH
vs51aNoh+XRL4O+S+AGBpcCJ6Y12Muk2MZ+VGh9SUD3qmXJ95JjSrQFTwBQwBUwBU8AUMAWaVMBm
CE1KlEZCfn7+1772NcZwArAnkDBakmyHTjpxtnBAgF3TaAeAXWdpZrzqNF9c6VLMFYC9ADDFoVO7
JLEnjcD4lCKF+mifFN+AKWAKmAKmgClgCpgC8RSwGUI8ZdrIjrVGmCSgMoRxiI+5JagenHi5zNLe
hMwwkVWIRZjaoRC0hdjxL3Yx0k+84kKjB5QlJmBFzNVZxATG11IQE1AfHn1aDJgCpoApYAqYAqaA
KRBPAZshxFOm7eyYIXz1q1+VqA6RHIM5xnkEkhWkeO8poh04ZhaZ0hlWIXxdXLwJn6VIAHD8i0O9
J5lMyZUkmU4u7I7F+NREC0hZCGLmsixpfiAFbW8KmAKmgClgCpgCpkA8BWyGEE+ZNrXnffGsMeeO
T1ClxHkShWMvgMEfLYFAw3vV1XUHvIC+Ye/ut9/dS59ShEk/QBH6cfyD7C/O2mPmku+4kiRzWZYW
41MTAOKU6KMPmThv8b5+z/Yt2/e0uLgVNAVMAVPAFDAFTIGOrIDNEFJ4dOpXzBiHSE62cTMeqg36
3rJiTtg2ctkmsTmV1j5w+eBbvjUv58uXIwNk2SOek5AOezFKsaA5dA+BhECgseqpB773vek/+umi
XfvB3/9i8Yw7p//8jfpQXcKkBzikhSBEDV/XR1L5D2WyeZoMmjBhdJoqNF0dLCQTCI1J4zuCOMkW
60OFgw5bNWJPHnzuCzGHs7TV9qaAKWAKmAKmgCmQsQrYDCGFh67nJT9dXVGUB495RRWrf3pFdtD3
kEvuaqhaHgjkrKpef/UwsTmV9sq5qbBg9l3fnHTlZZddJnmI5BAFcosO7KKicPBBO3Dg4JPPvfxb
Xzk5EDjyYC8Ezzr+3MvOv+TLR/cKzTd0lUF+aNYhVYh/1gKjny8ViV2aJxbx4BQRVzSSL8VpJzA+
pdA605hCfcRV8EC0dsSeFHM4yzFO975+y4qVm9Jdifk3BUwBU8AUMAW6pgJZXbPb6et19x5e0DTu
nKG6iqwBJ+XlXDGin7ZpnDXqittHBQ1XXHEFgsIVK1YgJZEc9tgOOuggBossKXZhghAIdO/Zo6fk
dut28AmjvnjiwQd7dwqCmy4OA5OSK/5pZO1iASfoP3LtX7dBPGAPI/iS1K7ErosIjRwUIRaaTkqu
5mhs/Bboo49IK0csD2vbgj2Lrjr5l2dXXHJh21ZrtZkC4V85KiG/ZkxqkCBL0xJg7UHjBEUsyxTQ
CjjDxkkmYOosw11TAbuHkKbj3hjlt6EhcOTh4dlY/eoF00aOHDdh3MhuI6dtqA3s2b5hxbK547pN
eqG2ccszK7Y8u/jpTfu3V61buHDh//3fo1Xv7MMpDW8H9u9e9/hv77lnUWHhwrJnX3799Y1b/hN7
kQf4H767o/LvT/z8m7/Zuu/jtzevf3xZ0Yx5j7zw9ANXXXXVV78669mtH0rz9r/7yoI7LvziF794
3jfvLqt8C7FmILC/4pGiiRNvuu2mq8+46hebIw8yhDoU5HgYABvq4iZGSQobBAE6CQKSshc7sfGp
DDWhBSCF+jiusEpNjkVo35wRO3fahJET5jy0aAba3K3buGXrws8n1G6aP2lkt27ef1PnLFix4qGV
63aqWhq3b3hmwYxJUxesXDHX+8T4nJXb63c+M01W6o2ctOiZ7SFy7aa5nh9vmzRj2c7GwIqpR0wu
DVTeMRnVPbTlPeeEUlUYNAXaUwHfWdaqxqTWW6uaYoU7owLtNcB69+7dGeXsDH2yGUJbHcV3QxU1
bn/0vBvmzXlq9SOrV0wPbH0v0PjmxorHfnPHmkBt90BWw4fbls4r3f73B9b0/sKXx4/tH/jPque3
NHhFG1/7y+I1Daffetu1UycMerm87MEHn3l/H87oUAguQBYHHTjw0Xu7/rXhb398LbDvoAMHfbTv
7ef+su7fFQ8XVR33ox/c+KnAK/N++9xeFPzglZmTbhs4+Q9/XfnAtOOeLLzlqlU7Gz5667lvz/3D
DcW/vufX/z05sFOmIIjMwv69KA2t8f4EN68F4U16iJQAoRE7SdIIHIKTJI3AIThJ0ggcgpMkjcAh
OEnSCByCkySNwCE4SdIIHIKTJI3AIThJ0DQTue7WnBFbWTrzyudPKV9VkhtYM/F7DwaHTf2yScNv
rb2p5sD6quXj7pt5Q17enO3vBcdyqKY9Lz7yixvuXnLfDePnbeidEwi8vuXZiwaMHXZ39YGGHcUn
Lpk8dvCyLfWBxk1T+wx/7pz/aThwYFtpwZK7J97x4Kbc20vBz51dWL374Quznow+odx+WNoUaBsF
/vjHPw4cODArKws/jVKjBk8//fSQIUMOO+ywkpIStmfPnj0XXHABIqRZs2aRzFwHkAAQ01t9fT0+
xIkqRo0a9Z///AfF/U1yfFqyyyrgHxscYNAk5hhLZrhKwdNPPx0nAvz4xyScXHTRRYcccohUh31d
XZ1gORb+hnXZY9TuHbcZQlsfgroaL/J6rHRdY2DQbfd949DGrBEXXjvtmnxpx7ALJ1/nxT7Fu/8y
/5tTb/0kHiuQK8eNe7a/ETjquGMPCQT6njLytEDgkxddNmpwH55jACrkO6j/8LPOO+tMlIX9uBFj
xg4MBIZP/r/rvjB8xJjzxkhVgU0rl1QGcgLvbXzuhdf29/KMS5/evO/D9wH+9vSmj7sdd82deb3C
V5alIsaUBCBLllc+PHMQTI4fCFNoLO6n0WJ8KEA1/KDF+tCVHIuY+2RH7IJrx4zLvz40kPEvw6tl
pYGcsz+LVXdDJnwD5rziP0wdN0hV0e+KuxYX52K0F5UuXrC+ru7mD+9fE8gN7Hp+xeMv7UOxQKDw
4fVbHvzJfYGCoqlj8K/NoC9OnZ2Xd96wI7MHnHhiINDn6KP79e17wD2hVA0GTYE2VODaa6999tln
GxsbY55Wv/rVr8rLy9etW/f973+fjZozZ860adP27t176qmn0pgMiOntRz/60ejRoz/44IMpU6bM
mDEDfhI3KZmKjNNZFWhybPjHWJLDtbi4+M9//jNOBEjnH5N33nknZgiYOchpovcidZMN66xHpAP2
y2YIKT4oDfuC10/1pdJQDaGXCmUPPhvR0n2Tz+jebdKq3mNG9fWyQ6WCzD6IfQIBxEN5eZddesGZ
gX1eCI7lPDC+85+39uPPQb0QPtUHTz+eXQAMtQV81OjVKIReeAQCjyZ4yYNOGPbZgNfGujc3bQiM
zukTCHz00UfHfuFnhT/5ybSzBvQ+7rQvBQJ/mvP1sz4788Vepw/Ldu5RhG4moLyzSaWoTmrEXrdH
jLRIEh40YC6A8UXeNtBnf33KRiyG7Yhz8gLeFBhbd/xf+dyLnvesIzFFrdnnW7IWCPTA+Av0wP+B
ng0bn1sTyMs9Egvd9u8ffGVZWWnp/4zv//LTSwI5Jx7hMcAZdtcjj1w7CqPZO8Fq9nm2mCeUl2Gb
KdC2CvTv3/+BBx5A6BOz2kWLFg0YMOCUU06prq4m4fe///2FF3oP01x55ZU0JgNievvtb3+bn+/N
0TFD+NOf/gSQuEnJVGSczqpAk2PDP8aSHK6LFy/GzTTRzT8mcY7cdNNN8mRjTG2bbFjMUmZMhwI2
Q0ixqgNPOwMeV7+wNdrv/hqms0cs3l1ZmI87BUuuzDli7jN6ZTZJIXDuyN6B7BFIdOt+VM64YYGq
J//699e3vVLxfODoMz95lGdXa35YGGGljrZD9sjiHxWofdjvzNGjx4wZc/bZn/3c2WePOPGwQO8h
P/zL4psvxM2Lstv/K3fRy+9IcXFIzwzidaXEAGyALk4Cc/3A+Fq9NtBn4GneQ/KpGrGI20NHueeI
m4vzA6U33DT3odXL/ufuQE5BXhJXSWsGfuWSS/C8/iWXXHjhJZeMGZG9H6O18q3dIaex/jTnhIpV
3mymQKsUOPhgXHvxtkceeQQvmTjxxBNXrlwpFr3H4h+dFPzuu+8mCJX8fFpienvrrbcOP/xw/Gig
SbiTAHLiJtGbga6jQJLDFYL4x1iSw1XWF4mk/jFZU1OTeMzboO04o9FmCCk+Fj37HQ2PNe+HHgUW
72+/WLYmEHpSufaFBfP/Ofj2K0eDcwAAIABJREFUxeurVhVjlnDHkudiXnHy7s/J1ifngvHex9SO
GnB8IHDyoE8EPjx40C23X3/K4d5qV7nGjL2AcBnv2nxkRhC2fhQEwTkF7gwc3B0riyp/ueYNPJIQ
vFHw3rqCbzxS/Urpg28cN2nW0j/9ejrex/TLR1/GhVohSLQqmN7ZhnAlcscjdOcBRjIJyCTQWcQE
pBHoLGIC0gh0FjEBaQQ6i5iANAKdRUxAGoHOIiYgjUBnEROQRqCziAlIExAase+lbsSGKxj5hfNw
J+y8kwJvHXL+jrr1lwwKvWgrnM+/+4KjvfshuDW2ZvIDeHhftrdXjxu56NCBOEvu/sPq7WJr3P7Q
uEnL5JTp08O7TZHkCRXyaX9MgVYrgCj8448/FjcAfM5y2LBhf/vb3+6///7JkycnWUnPnvFOiiQd
RNFOOOEELOnGmY5N1ni0oElRHi2R+Qq073D1j8l+/frJ4IwnrQ3aeMq0vd1mCCnWPHvoFwoQ58wc
O20ZnjTwtrc3LDv6vLunF16M+Mfbuu+79eYSvO1lyLjrbkLwc/wxkX8ivIAnsC94ETb4XED9hmfX
BCo3jfrKV8Z/8fTnFj858IyBh3bv3uuQbu/8Z8ee2v34Z0CidpQS8LFMAg7ykvKw3IGDvGC9sc7z
jGcYsIJj+8ZXAtt3vt+tx6gvT0H6v2/8zvI1L7383KPXXfrdTxecd2jW/nm/eBQx2oDPXHIlpgjH
HBVcAuKVlOrEb9C/t/BJG5GEXbdKLNgTIFeSBMwSe6jd4R6RRmB8LRRlIWiuPqER+8Ox05ZWpGrE
eqsoGrdMHz45t2DcsYcddsRhgU0vvrAl9Ny7NF/29dUY7Wu8R1+whGj8zUX4MznnnLnLVq5esWDk
0efl/s/EcV+7CcY7zhs8df6yFYvmdB985fU/ukxOmdJn16xbt6J41da4J5Tn1jZTIMUK/Nd//Ree
NpZJAm4aXHrppboChEQ6mRjn5eXBA1zhSeXu3YP/ACQukDD3hhtuwMoQP6VZTfIXN0tGK9C+w9U/
JidOnHjPPfdoSQ899FB5sF4bbdBqNdoNI7BI7YYHU2bOnJlan5nlrWFHeUFu1AGdvrSCXaipLPby
cqcUYKFRTkH5jj2rirxI3dtyrvvZdy4WOKWotKwYcw1vy51eWneg5uYTJRXZ531rOtTGw0M//elP
7757zpSLvOUi2PoPHX3pRWcLDhw/5oovnS74vGu+O/36iwSPuOLOPz5aOn/ahBANkdlPfosH6Z74
7W2e5YxLvzb+5MDQqxetevGf//znxo0bN23atHnz5jfeeGPr1q3/+te/3nzzzZ07d+7ateudd97B
nUfcN8RNbVy+2rdvX0NDA/7Bw7MN2McEMe3GpwJtr8/+N8tvPZcDwQMpGbHePbLorWRjDU+EAw1V
hd7XBb0td0rxDryr6EBDRUlozMM4u3SjkKvKCsOecorX7ggaG1bNlnMs79FVvxIX4RMqdA01UpGh
oAKt/GWGyCakKLB79248NtAjuH35y1/GOgqxe+MwEEBkU1ZWRosDkARHjNhv2bJl+PDhJ5100urV
q7Ozs2kn0GRiAtA0RhIPKKMBspJEckHQTaJnA11EgRYMVxk51IdjrMnh6hQUD86YrK2tHT9+PIco
OI899pge/KgOmw1a6p8YQKvEhNbkxn3wNHiMWrLDtRCEONi3pHAnKlO/5+3ddXiesvsR/ftF7hKE
O9hYX1tbF+jbN3RfIWyO+7d++8qLBhd/6XeT/vPimo8OdMMyvver1qzc+7kbzx2IMw1JbAJwIQoA
V+Idu5PESkGxHNi3d2/jgV6HH3Fo95AT2D/eX1ffePAnPnGYeAu6D+0cP1IvvUkSe+kJhibvCcTt
m8owvhIjBkyrPhix7+7d363bIUcOODpVI/YH20o+26ex1jsRAlv+fMfN1Tevv8t7xVaCrbF2z576
xp59+2XjaX1ujfV7aut6ZfftGTGCWNerb4jV3BOKjrsOaOUvs9we7DpytXFP8egCHgPFY51tXK9V
Zwq0QAEbri0QLU1F0vrLHPn3Nk2t77JuEeL0D76nKKYCWT0R7MTMiWmsf/QH49cEpv/flZdvOSYb
V5sOPrDvX2/tGp7zCcbfBCiPOBIxOvaOL7FgL0Bys3pn49E2edZOnCD34B69+/QOPX4XpLuu9KCk
NwHCF1dOq6QUjWAKJmCW9ML4bakPRuwAGbEYOeEXunMItXDEHtM3u2cgG27r335qXeUV+SfRYTyQ
lY3JgS8zq2df94QBMcJrZvN8/s1gCrSHAkcccQRedYp3w48bN27BggXt0QSr0xRIVgEbrskq1Vl4
NkPIiCPZ87MTZweWzDy5191YinRSoPKNQODMCddfcMKhTusZYSPmxiQBSW0RHLR5O3BQXJjajxC0
hRhZgnUpMdISr7jQ6AF+iAlYEXN1FjGB8bUUxAQt1gdHM6YT7TAhjhqxOYHKykCgYGnFPWP6JSxl
maZA11IAK0C6Voett5msgA3XTD56LWm7zRBaolrblxl04V111Ve/WLEZjzj3PXrwu2+/WfHs01hL
xJYgpAPGXoCEd0wKjUZhci0Qc4XPUowRAcQts6SI3pNMJqtjltQr3mgEX1skSc9Ort+D8bV6KdTH
EZZHJEngjNjTcob1tR+bJLUzmilgCpgCpoAp0N4K2D/a7X0Ekq6/Z78hYy4cEqYP69P9oKefflqS
iBGxaYzwLswM/SXBsTOJInLbARYhayf+4olzyacrAXovVTsW41P/dtcHh1gOh7SkufvoEdvc0sY3
BUwBU8AUMAVMgXZTwN522m7St7JirFs999xzJUzXwTrcSmDnhHeaQ4K0QWc5FsnSBCegl+pAIEfH
lNpILEWcipwknBhfC9Ve+uijIG2wvSlgCpgCpoApYAp0egVshpDBhzg3N/cLX/gCOsB4mtE5Ajsx
ioV26a2TJUlkMRyMyZeKxIP4FwvIskkWCZLLJDgkEBNI1TpJrP3QaHxKkW59OCp4+AyYAqaAKWAK
mAKmQOdWwGYImX18cRthzJgxjNcZzEn4iD0ssul+wsL4UnKRlI002IFhxJ58MZIjWeKBfElKQTJ1
UpiyFwKwJsCok8Zvd330weIxNWAKmAKmgClgCpgCnVUBmyFk/JHFbYRzzjlHdwPhNaNqYG5ilKTD
RxK5QpAs0DSHmJwg3YvsuYkTSQqfZJ0EAUnZi53Y+FSGmtAC0I76OFXLgbO9KWAKmAKmgClgCnRK
BWyG0BkO69ixY88+2/uIsoSVCOYYX0pghz025oKJpL/nLOUQYBc+ADapSLDnN7yJQ6ToWcgxk6QR
iFuSnSRpBA7BSZJG4BCcJGkEDsFJkkbgEJwkaQQOwUmSRuAQnCRpBA7BSZJG4BCcJGiaiVzbTAFT
wBQwBUwBU6CzKmAzhE5yZLHWaPTo0YzhCJKP0cGUUlIkZkG6JYB8mgnMJDl+oEsZP4P0YVM7yWlj
3TAFTAFTwBQwBUyBWArYDCGWKplpw1ojTBLQdsbcAAzpxMikQ0MSWSxImgO0Q0ck+pci2htLJfbP
XOM7sjtHp331YducAWBJU8AUMAVMAVPAFOg0CtgModMcSq8jWGv0uc99jtE5AbLiBXaMy8nRpZgr
gFkMUr1ag5vjnwUlN16SdgLjQwGq4QcdQR/nWEuTbG8KmAKmgClgCpgCnUYBmyF0mkMZ6shZZ531
2c9+FjFcvDAOQafOChJDTw4wHhVfZApfcgXTAznU0bGQSUAmgc4iJiCNQGcRE5BGoLOICUgj0FnE
BKQR6CxiAtIIdBYxAWkEOouYgDQCnUVMQBqBziImII0AWQlySTNgCpgCpoApYAqYAhmqgM0QMvTA
JWr2mWeeiUmCDugFSxnEdkhiY5AHzCwaAbAxCwRJigV7AdoIDoxOKaFJljjBXgNgcjSmf48dfQ/E
+BCk3fXBgQ4eGduZAqaAKWAKmAKmQGdTwGYIne2ISn8wQxg1ahQw4khEcv5gDhYdZ0spWPxGOhGO
uPI8hj+YQAyCGBMAv38pEq+g8TuyPjxqMjZsbwqYAqaAKWAKmAKdQwGbIXSO4xijFzJJQAwnQTZD
bQJ/GQn4QGApcHRxv50Wuk3MZ6XGhxRUjzpnnD7oAttswBQwBUwBU8AUMAU6hwI2Q+gcxzF2L844
44xPf/rTzJNgDnsBYkekzqRE7UwKwWP7okBdirkCPHaYz2kAXImRWbRoYPxM1Ee3WcaM7U0BU8AU
MAVMAVMgoxWwGUJGH76mG4+1RiNHjgSPYRyicNnEgj2S2pHkagsxmbqUGGmJV1xo9ACfxASsiLk6
i5jA+FoKYoI200fGkq7OsClgCpgCpoApYApkrgI2Q8jcY5dsy3EbIScnB2wJHCWYY0BPL8iFkRv5
AmAHkFwW0YBRKZmSK0kynVzYHYvxqYkWkLIQxMxlWdII0s13KpLqbG8KmAKmgClgCpgCmaiAzRAy
8ag1u82nn366TBISlESEhyhfAn3Z65hPLLp44lzyHVeSZC4cOhbjUxNRO4P00UNCDxXDpoApYAqY
AqaAKZBZCtgMIbOOV8tbixnCaaedJuVlMsB4joDeaRHAJAhOwAoLcmWT4kIQDDuNxFLEIThJODG+
FipT9NFHTdpse1PAFDAFTAFTwBTIOAVshpBxh6zlDR4xYsSnPvUplJf4m7E+w3GGd5LFmkigHUzB
2HMjH0BcIUuM5EuSdgLjUwpIREyQQfpIU+VA294UMAVMAVPAFDAFMlEBmyFk4lFreZtxG+HUU0/V
8TqwJBGMMh5FBTBiLxYh0Kir9wqHN+FLSruiHykIAoDsaTG+SEFlMlof3Xj2y4ApYAqYAqaAKWAK
ZIoCNkPIlCOVsnbiNsLw4cO1O04DdGDnhOzkkwOADTRu4NAifCRZUHKxB597yRULCWJk0viZqI9z
6HlMDZgCpoApYAqYAqZAx1fAZggd/xilvoW4jTB06FC/X0aiyNIRHuySBMCGXAHYw85NHCJJz0KO
mSSNQNyS7CRJI3AITpI0AofgJEkjcAhOkjQCh+AkSSNwCE6SNAKH4CRJI3AITpI0AofgJEkjcAhO
EjTNRK5tpoApYAqYAqaAKZApCtgMIVOOVIrbOWzYsJNPPlmcSiQn4T4sEtbHDO4Z8xGQL65QigXJ
8QNdyvidWB92TYaH7U0BU8AUMAVMAVMgIxSwGUJGHKa0NPKTn/ykTBIkRkcw12SwDkK8mI9OhKC9
sVRi/8w1PkXWIEP1YRfSMojNqSlgCpgCpoApYAqkQQGbIaRB1MxxibVGQ4YMYXslmMNeB6OSKxZm
MYh3yjJJD7q4P5c0AuNDAarhB5moj00SOPINmAKmgClgCpgCGaGAzRAy4jClsZG4jXDiiSdKBYxH
meScARbJ1RYxOvEfaNpCTCDO9V5nERNopmCdRUxgfC0FMUG76JOgdn97zGIKmAKmgClgCpgC7auA
zRDaV/8OUTtuIwwePBhNQRjHSE6wnjPAgqRYCLQRHmAXCzsmfMmSKiQLND+HNALSCJglxc2/6NDx
9dEtlDbb3hQwBUwBU8AUMAU6pgI2Q+iYx6WtW3XSSScNGjSIcb9TvcT9YpQ4D3sBkiUYhCYBA3pW
IUXiFTR+Z9KHR5lH34ApYAqYAqaAKWAKdEAFbIbQAQ9K+zQJa40GDhyIuiXoZ2guQPaI8Bw7LY49
Hp99Mz6koHoiO8XRSRGq0+hpkwR9lA2bAqaAKWAKmAIdUwGbIXTM49I+rcJaI0wSnBgOSceCxiFg
pdEBHju8gojTABQRI7No0cD4XUEf3UccfdtMAVPAFDAFTAFToKMpYDOEjnZE2rk9J5xwwvHHH68j
dd0g2hHkEQugBUmx6ILAYtRZxAS6iPEpC0Gn0ccmCfpQGjYFTAFTwBQwBTqaAjZD6GhHpP3bg9sI
/fv3RzsYmAJISIe9AH8rSRYCaQRSxMmF0bEYn5rEVKzT6ON0RDpre1PAFDAFTAFTwBToCArYDKEj
HIUO1wbcRjjuuON0DMcJANuaOJd8ASRLkrnw5liMT01E6k6sD0cFB5UBU8AUMAVMAVPAFOgICtgM
oSMchY7YhgEDBhx77LESw+lIzglY0XTkyibdEIJg2GkkliIOwUnCifG1UJ1VH32UpY+2NwVMAVPA
FDAFTIF2V8BmCO1+CDpuA7DW6Oijj0b7GK8z+kdgJxh7bronEvkhS4zkS5J2AuNTChHcEaoT6yNd
k/7a3hQwBUwBU8AUMAU6ggI2Q+gIR6HjtgG3Efr168f43h/MwcIN3UCYK0kd74qdnQQBWPZiBDZ+
V9ZHDwbqYMAUMAVMAVPAFDAF2ksBmyG0l/IZUy9uIxx11FFsLoM5AGyI7LmBQ4vwkWRBycUefO4l
VywkiJFJ43cFfZyhwjFgwBQwBUwBU8AUMAXaXgGbIbS95plXI24jHHHEEWg3QlWJVgVgj8COm3QM
SfZQyDGTpBGIf5KdJGkEDsFJkkbgEJwkaQQOwUmSRuAQnCRpBA7BSZJG4BCcJGkEDsFJkkbgEJwk
aQQOwUmSRuAQnCRomolc20wBU8AUMAVMAVOgvRSwGUJ7KZ9h9eI2Qt++fRnDEaAbehogMwfpGzl+
oEuxuJ9Gi/GhANXwg06jD7uGHtlmCpgCpoApYAqYAu2lgM0Q2kv5zKv3yCOP1JMEpwMS6CPCkyAP
e4b+AGKkRZLwoAFzja9lEZ1h6SL6sO/OALOkKWAKmAKmgClgCrSZAlltVpNV1AkUwAwBcWptbS2D
eHbKCewYzgohXpJ2AuNDAarhB11BHz0dkv7a3hQwBUwBU8AUMAXaUgG7h9CWaneGuj7xiU/06dOH
8wGEsMTSPcfCXAK/CjqLmMD4Wgpigk6pT4Le+ftrFlPAFDAFTAFTwBRIrQI2Q0itnl3C2+GHH56d
nS2XtxHJAQhG5wHEQiF0FoyM/AiklPFFKMpC0GX10QpweBgwBUwBU8AUMAVMgTZQwGYIbSByJ6wC
txEOPfRQdEymBAzmmgScMFAUKRKvoPG7sj4cFRwtBkwBU8AUMAVMAVOgDRSw5xDaQOTOWYXcRqiv
rz/oIG+eyVBegOwR4Tl2auHYjU9BRCImBXRZffTQ4uAxYAqYAqaAKWAKmAJpVcDuIaRV3k7u/LDD
DuvVqxcv9PJqNy0McyEEcykKaQTGpxRUTIOuqY/WhIPHgClgCpgCpoApYAqkTwG7h5A+bbuEZ6w1
wj2ExsZGhHG8maADWaogRp1FTEAygPEpC0GX1QejK6YIWhDDpoApYAqYAqaAKZAqBeweQqqU7Lp+
cBvhkEMOYQAnV3x53ZdABHJyYXQsxqcmMRXrsvo4HRdxbG8KmAKmgClgCpgC6VDAZgjpULXL+ezR
o0dWVtT9KE4YBDC8kyRzoZRjMT41kWFk+kAHGT8cRaKM7U0BU8AUMAVMAVMgTQrYDCFNwnY5t7iN
cPDBB6PbOvpnSAcjMTjEBKIXk8Z3BHGSXVYfjhARxPamgClgCpgCpoApkA4FbIaQDlW7qM/u3bvL
owjov0RynC0gSYxcYgLjUwrTJ/H4sUkC9LHNFDAFTAFTwBRIqwI2Q0irvF3Ouaw1cuYDUEGHvxLh
6TjP+KZPs8aDJne5c8w6bAqYAqaAKWAKpF8BmyGkX+MuVgPWGjHedSI5SUouOZCH2PhUg5rQAmD6
UA1HCthtMwVMAVPAFDAFTIFUKWAzhFQpaX4iCjC6JZA8nWSERwCOJjhJ0ggcgpMkjcAhOEnSCByC
kySNwCE4SdIIHIKTJI3AIThJ0ggcgpMkjcAhOEnSCByCkySNwCE4SdIIHIKTBE0zkWubKWAKmAKm
gClgCqRKAZshpEpJ8xOlAGJ9BnB+AConAwR+Gi3GhwJUww+6rD6UAgrY1pEVwGnOM70jt9PaZgpk
ogJ2fmXiUev4bbYZQsc/RpnaQj61jB8vieQYIjCw04C5xteyyOGHxfShAlof4kw9T6zdpoApYAqY
AqZAx1Ogw8wQGnc+NH/O/IfWNXY8jaxFLVaAIR2BuGLSDxyCk8xIfuPOP/7qx/Mf9sZ2RrY/VrPZ
EecAOUnSCByCkySNwCE4SaHZJEFk6Wj7Dz74YN68eRdeeGGfPn2kbT179hwwYMAVV1wxf/78HTt2
JG4wDm7MDa9D6N2798CBA+HnvvvuQy2J/XSQXN2XdDQp3f7T0eY28FlTU/Poo4/OmTMHo+W4445r
gxqlihUrVqT7iLTy/GozKayizFUgshQkVX2YNWvWxx9/jH3zHNavG9frjDU5RbvX39K3eSWN3dEV
kAAOe/xixmyrziIm8BfRWcQEHY5fv+683p9ZkzPv3X+ExrZuKjFBh2u/r0G6qcQEPrq3PoqHnpgg
VXxW4XdoFijQwl/msHaQF4csnGr67xNPPPH1r3/9rbfeikfFKw0webjzzjtHjx4dk5PkAe3bt+//
/u//fu1rX4vppOMYdXeapWSSXUi3/ySb0e40TAnKy8tffvnl9evX/+1vf3NGYDqU93d5z549p556
qq465fW2/vzyN9ssmahAc3+Zm9XHqO/gNqtkKsmNjfW73/OuMh0ZqGsM9O0YjUplB32+6ne+cM+s
/1mzuXbkhBtm3nJh6ydFKXfoa3LLDTKC5R8w/FA6AH7FIhUQOzQW9Pgfvbeu4s2hZ47IVmUT8dXM
JBn/H73z2toN7wQOPWrkmcOyw2Vb6L+hYZ+M7SMiY5tt0H1vof+U6BnuY0a3R48QGUu2by8FcNX2
4osvTlz7Rx999Fhwa2XwhGjs6quv3rt373XXXZe4RsvtCgocfvjh7d7NW265RU8PUt6etjy/Ut54
c5hBCrTzKqO3N62eO3VCt+7dew04rxSyrbl1QPdu3UaOmzRtzqIVz+ys1WuOaheMQxCV1DZy3ISp
0+YsW/HMlrdrO+TBqP1t/lkz71uyZk3pvFvHz16xvdWNTLnDVrco2gEOm8QBANE5oQdwGSU4wMev
rVix4NJDjvzM6PxXg8e2KX5z/YO//YfHnDr2/LFjR38LVbTYf/XGVffccOnBPXr0Pv58b2w/VXD8
IQcddPp53tj+87M7ahpEhxb7l4I+fVrQX+/CsNMMWjLLP3sh2tq+XRR4++23r7nmGlYN/NRTT0ly
3759a9euxSV/zB/wgUVymgQ4srJhXlFdXf3www9feeWVutSNN974xhtvaIthUwAKZGfjOlKbbgjf
lyxZkr4q03F+pa+15jmzFQj/8Kbs749+9KOZM2c27a6heun03LB2Ofn5IVwwuyAnbMXf6SVr68K+
dm+rqigvnZ6n8xU1DszJL6zcHXbRUf7uLs6LNDe3cG2r25Vyh61uUSwHWH6WeMM///EJe9eX3atk
y3vp/Y8T8mN4Sob/5CwOy7wX30vQnvj+9+9aosb2xInhsT0remwvfP7DRP2N7z9GTmxTMv3VJTsH
P9bQM9uBZH+Z40iFH6w4Oa4ZFcmvG9b/PPvss5ItFk398MMPf/Ob35x11lnaqLEU8RckZ/Xq1Yce
eihp06ZNY5aBLqsApgSXXnrpjBkzMI3cuXMndOAIAUi3LLt37z722GNRUa9evdJUb6rOr3RLYf7b
RoG0jurUnzDJ/TtUXRQJwySC35iPjuaVNEDUuurSQi8lW2GFE+DXLZ8Szgv+nV5aWVfXgK2urqZ6
R1V5ackUOg8Rc8u2caLRNkctcS01JaqFBaXbErOTyE25wyTqbBFFx6DEBP5oNZi199UnF6q5gRxU
b4agN3GiXRETNMnfVV6oxlZUFUn73zWPBzev8B/vYI7x6kQ4zVu4D/OBvbtKC72UbIUvvcsmJe0/
VML4PKwEFLNFY7OTF0rulzmuCBixcfOiM8444wwZ3pgAMEcsTCYDpEjigj/72c9IGzlyZDJujdPV
FOAIAUh333n3rKioKE31pur8SrcU5r9tFEjrqG6fVUYbFn3n1jVy+kzf9sjtI7AMv3ZvML3PWznS
s98lty+uWj5dGD3lT2Tf8wv5OozLGfuZ4T174v0WWT17ZvfrP2TMJdcuWN2wtlhPI9aMH3zrhvqI
i/ZG2fl/qCgqyM/Ly59esmr2JYNa3Z6UO2x1i+I44CtQkc8VLAS6kBi7dftg0Xm9Tz3/G8cULly+
cHqC+0dhfjc6oVsCZrF2ndXtg79PGXuH5micpH+M7YLw2N76p9tyjujGsf0BVlj17HfxbYs3h8d2
D1VBkv5Zwvg8dgQUBz/NxAbaWIFXX31VasSTyumuOj8/ci3p9ddfT3d15t8USKAA1hf97ne/A2Hs
2LF4FCEBszVZbXl+taadVrYTKNAeDwXXb5g7ObRKb3rp1FB0HF6SygYNuWLm8imPXXlfpV/lrMB7
yphzdDYL0Zx15tT/Ld20Nm8ei98394/TFl89jIz2BVn9Rt3yy8Up/AlJucP06YN4Dtd6GdUhmAOW
PSolkAYcOHBY3uKtb/U94eheCP3r31l8942h+DvUQB8/yhsdkkYQ9k/+B4tuGu09MBC9xeeHpiJC
CNEwtr+xVBxML52Cse3Zo8c2LEMuv+vBKY9+9b4NYIYKhiuVpDY6Fp3F4tpofBlaWpOwuva3LRTY
v3+/VIOrNumuD+9OZRWNjfq5NZoNmAJtoQCemJ86dSpqwsq3kpKS9FXZludX+nphnjNCgfa5h9A7
rM2gE48IQ//fnhNuj31BN+vQ0LQiWCb4vKq/dCDrooK7tHnJb57eo9OG208B/50EThgY3knrkOzb
f1BwegBD7WvR0wOY/Hwa6UFb4vG3PPxDL7bPnb6wUN99arZ/Los+YbA3tqU6aYlqT88Jt4XGdrz2
sIgQ6Mf4jqoJ9MEkgTIaaDMFjjzySKmroqIi3ZXiWgOrwMcWiBOAF1988Zvf/OYpp5wC/iGHHII5
Bt6Uitdixizymc98BgNMtsWLF8fkOMaf//znwv/85z+vs8JuvL/arjG6g1rkzf3SPPnsAz4f0eQd
kmT8S10IMVHLxIkThwwfJJtBAAAgAElEQVQZgi9LQATsIQgssDMA1Q1zcMy68IGLu+66C4qJTzj8
3ve+t2vXLqesTsb0owkZhAsKCvDYAxqMlW8nnXRS+lreludX+nphnjNCgfaZIVCaP5T9g9gPsgad
iWCtT2/fhajwRVl/EW3JOuakqMXrfQI+R5puuE0VkH8mnRiOSeQSo1lh3HNEZA2/19qw3QvEibVd
G7Xd4TdsX3H5lfNAWLLgB2MGfAggG4s7fNoJHD6SMcc2+TK2s3sdLAWb69/4fsFhobzUhxbh274N
FBg3bpzU8pOf/CTd1VVW8i5x4Mwzz0xcHd6UjyD4c5/7HB6Q2Lx5M16shKfXENU98MAD55xzzqRJ
k/x3IfQqpqVLcQmh6Q1vahLSlClR1xqaLPnvf/87JycHC9nxiC3elSnNe/PNN5G89dZbP/nJTzbp
IRnC/fffP2jQINSybNkyvP2pLvgMH/YQBBbYMSfBd+iScaU5+DQe5hs//vGPMS0Un3D4i1/8Aj36
xz8S/SuvnWQufvzxx2V90bnnnnvzzTentSNteX6ltSPmvOMr0B4zhIa9vKqw5o6bH9oSfD6gIZZW
WUMWHDhw7bCWvq2s7r2oRSM1saowW/spgDAOm9QvkZxOEoNA3C3686m0ozhxFD8p/9t/ljcBgUbe
vS9dfXKvveqmFH0m67+xjmP7qe9/+2Hf2I44PPik4o8/njy8D7vPrOa3X+mTVH+7Ft8mCTLG2mzP
yPhPf/oTrtb7w+4UtqS0NPIbj8XfCTzjHZEgIAiOx8EbKq+66ionFzMKfNlNjE8++WTiK+KgrVy5
ctu2bQBHH300phxSMJk91qhglvLKK68kQ24ZBzcocLfk+uuvT/yqfrxMFqtlmvUFuptuugkvksKU
xt8weMObbTPlu9f+9idjwbHDOAcT64sWLVqUTJHWcNry/GpNO61sJ1CgPWYI2QPPjjxwWnnlyVet
3N4YyObKo9SpmnVo1D2EwL7Ey1Qb92x6aP6cSePG4XMKkyZNGDdu0oz5D216233Aefvq+ZOmTsPL
1PQ2bdrUqXNXKmrjM/OnadrUSdNWSrzI/jXu2fDMQzMmdJuwYB1tGmx54aFpEyLfgMBHIvCNiGdW
LJi7LDY/0JTDoPP6Tc88NGea18uRuBbh7SZMm7Ng9Qbv9mi8rbF25wsrl82YNLLbpGUSP+/Z9Mx8
pEcirPW+XzFn0eq344hbu2nl1HEeb9zUuRv2uCTYUakTf8MidmmPRHiJ47zE/MT+n5k7+YeYH5w7
776po+IpkKx/Z2wP/dpftjceOKyX4zZxe/z9NX6y+oeFdvgiaTjT/qZXgdzcXH4uDVfrR40alaar
yLjo/stf/lI606NHD0ZOMbuH6B8f2ZUsXCnfuHEjRgXuIWCOwTUhuFr/+9//Xhfv16/fRRddJBa8
MqvJ2wi4lC7kG264Qa+l1D5jYhT817/+JVlDhw7961//ioAbLcT1+D//+c/4t2bEiBExCyZvnDx5
Mu6WCB9y3XbbbXgXrdSCPfB3v/tdfqQCzCQfNJ8zZ869994Lt5/+9KchIFxBKLQfcySpC7dBWnBT
Ivl+tTuT64uwwAz3Z9LdnjY7v9LdEfOfAQrgNyi1WzLv1Ksunx0tTW7R0iJv1pBXXJNEa2oqi1Xx
vIo4ZaqWFyhaIKegzHuVapytIvx6GV1EcEFxuX5VanVl2Wzf61Rz8FKiskrlv6GybOnsgsgMJbeg
uLI6mN9QU1Wxqnh65AZ0XlGFr1G7l4ZfnZ8/u2RVefnyItWXnKKo978m5dCroaaqbEpkbubraN7s
CmlhuDUNNTvw6tiC8KcqvAJ5JXUH6srUu2gjXnILd4QLqr+7C3WNcQ4BLm7J5ry20kl+/PH76qWn
Mb6H4OOH/Yb/OgQk331e/kXPLXtzv7DW38uVTO73EJziYa+RvyDsKp8V0cRDufOWzAuO7Xuj387q
lXIcOsmI3zByCE4yzIr8dQhOMsILI4fgJMOsyF+H4CQjvDByCE4yzIr8dQhOMsILI4fgJNWw7Iow
mV/mBLpgKCfIdbLwVni+k1GfDg4tcTJxwQ0bNgwePJice+65J4E3rvwBHyt2HCYWGuHTDeIKswUn
l1E1CAjTnVydxLoacYLbDgj3dRawZMneyUJy+PDhJKBrfkKTFhYH8JN1LxC7x6sCdkb28INbLn5X
sOi6BENVnG6a/Ktf/Yq0888/X2e1MWYzAFJeNT4LLv79fUxfvSk5v1IuhTlsFwXSMarZkdSfMMn9
O1RXGo6A9VkUyC2qZtPig2RmCHVVpTo0RS1LN8aZSSDknZ0rzZi+dO3uuoYDDTWVZUVRDStYricJ
aFplSSTEBzPyXbeoZlfPDjYip6BUzHUbS6LcBhP+GUJFcb7Qppdto7+6bWWhCYeaRyXpEE6qyjgr
yylatTE0mamrXlWs5h6BQHF5JM6vjHy0gq3OmZIf0jUnLy83WuL8Eu+yXNRWszYySYKPKa6MJIdj
vLh/g9GeO0OIy1bBtxMmRhV5/yWZDUwv3UraP9QMwfnkgi5LPkE4d2/ssX3uvF1Bho8fLhf9lzSC
6Hw3RRqBy4hOk0YQne+mSCNwGdFp0gii890UaQQuIzpNGkF0vpsSGsdbFwTJ/TLHFQanb9y8WBkI
Yrhgmj8ff/nLX2JxY9tYilXjICIKx4Xqyy+/nIt/kPuNb3wjtougFaX69+8v3o466ihclfeTf/CD
H7A6fIhNE3CfQX+XLV5sjSK4Bi9O0DztQTD9A/hzefE+Zq6f77ck8A8F9GzK6aDjCpf/6eqEE05A
WYeAJAkCYn6rjvMlcPAVM7+TNrPo1qa2UgxyGVroIG6VOM7TVy8qav355bTWkhmqAIZZ+lqeetdJ
/ztUE/tSdM6UpWu3Je5w9Awhv8L5wQ/G99GxayCvKO53iyvC3zcuVMExGlBTGRXNz17lTF52SPQv
vwKzy53cYA92lwdnHjml28J3FxqqN1ZW1TTsLo18cxdti76HUFcZiqpzo+8V4I6zNEnNEA4k4/DA
gWr1IbDiSnemVFUa+vSE9KVETaXwGbqKpeHcsKa5BSUbq0V0HEQ9BSioCnc0fAR3B+8NhX8q49xD
EDL+KZKwzg/C4V7UDIEfPI7PD5cL/vXR9i6RWd6U5XsVUd9DkBmCr6BiK6ho75Wpz6KFOx8I5ExZ
8vxWllB8t+PkaGB8KqBlIWauH5ADEB6ZXe5v0r/MsZXBMI6dkdCqI285EbDaB+vgExYKZUZOnPgI
q2US3z2AL/2sAlYixay6vLyclWD5jcPB2v0EuULGROLwww8X2lNPPeV4QJIeAPy5+hO8a9fG/dfK
X5CWBP7LysqYi0dpWSQe0FM7XCP30+gNIJ5DnIakYTrnd9JmFjYDILWVXnvtteJcfxyQVaSvXlbR
mvOLTgxktAIpH9VajRSfMHDdrH+HtpUXh8NOfTYFcvKLNkatpNFtRuyuVxkFSiqqqjZWlK8qW1pc
GLUkJuQyt6jMd22b/naUSQNyZ6+ijaAs6kbHdMb5QthWqq6+55W4cTcu28vHn/OXOlMYFNfX/t0Z
wu61oTsIObN9046aEgTkuTHWYiVy2LAxcr9jynI3hvc6U7M0VGVQspzCqHobKnXmlGLnX69tWoW1
PhW4tCk3Hx/PjlW5qBncM5JjkCeWcPL9+yPzkRgfPPYXDxeMsZ5nc2gR2pT1eyO54PtnCHBLP9Ht
idj9hK3l98Ye2xPnvfpupKDj0EnSLYFDcJKkETgEJ0kagUNwkqQROAQnSRqBQ3CSpBE4BCdJGoFD
cJJCUyOuC8Fm/TL7dWnxv0NY4M6F/vKTjCU98Zav6HpDv9/x/2BdBx4L1kViYh3f4/5DTA5Wz7Oe
vLw8h6PnD7hm7ORKcsGCBeIBLx2KSaB/AD8BcTYJqAKPTPg5iS0s7vevn9BAOxP7QS7iXXqDen4+
cwH8187J1zQa2x6kqRmcd33pS1+K2ak01evU1eLzy/FjyQxVAMMsfS1Pvetm/ztUs7HYt6w/eGrl
lKyNrHjREjgzBH0eapyTm1+0vDx6ab124+FV4fVFS31Xv5G7I+riuu+BhzodOqsbBaFKqguDdxBi
3l7YXR6+MI+1/dH3EOqqlofWPAUCBUujby9g1rEUMXKRLw4/kMDhxqWRCUJxnIc26jZGvchv9iql
fF1FZIYQa3JSLv30pM8tjz+vC6nS1B8J6eLso+4hJFgCFKd4xLz/zdAitHkvvRuxBlHMGYLDSTb5
/qv3xhnbC59/M1knxkuDAk0Nw06Y3+xf5mgNcHpHG5qRwsIe/css2P88gOPRX8SxYOVMbW2tU8qf
1E9ExLy6L0Xo/Nhjj/U70at0sA7HT8BzuuIB6+/9ubDQP4CfgPc+aQIuumPpVIIVTX4PuriTe9ZZ
ZzH3pZdecnL9ST7SjVJ4OayfQG8A/lxakqSRnyaQjma8//77xx9/PDzjxlG8OVI66o0pUcvOr5iu
zJhxCmCYpa/NB+lB3D44e9jUBat3rC3xXXCtnHzWgKmL1jXZqrwpBdMLIkGs8POXVq1fvfiWK8b0
S/ARhPp182euEf7Ey66YNCF6mzRpfN7dqvbSF7epF2Eio+eImyPBceW80qjPA9Vv+usdnu+Cq0f3
U05CMOsTg/xGsfQccFKfcN68iWdMmPPQTvWOpCEXF22smuR//2t8h2+vKOTLrfM/e6q/qFdZz2EX
6EeKZ5Y8peoMtwZ/2TJl+8ThA8KpNS9v3RPGLfzLt9Bg0CfjgjQCfymdFcQ7f3lRHl5flFtYfsuo
0BOK/lJiYVkCP1NnEXsAY7t41ZvPL/SP7W+MPv6G4NiO4vtdBy3kIEVM4C+ks4gJjA8pEqjh18cs
rVSA3zIbP348XRUVFSX/5ng5ZLLHS/fFCW4g3H777XQYD2zatIlZuFSPX5iYGzkI/ogJ9IcR/J9O
e/75519++WWQsViIK09YNhmAf3v0vQ7c7Fq4cCEejB4zZgzespqMhwQczDSYO3LkSOJ44NRTT2UW
XvpEbIAK4JkTTAyQxNu09Ie9SWhL0Przqy1ba3VlkgL6lzcluIVXqqKXsmgF9dO60sLoewh58gqh
bWWRq/LB4rio71/dE9XFaD+6TmId2uUsr3IdNmwrJRXP4Yaf//VqkbsTzv0BVq+r9nF2e0uJorac
2UvLE6/QieuwpkI5y/OvAmKTKsOPR3s160cdmrqHoAsWVbT6JkKwQbxqzNUjQdD0PYRoPt1Egefn
BSXJmYXL+H6+vofwvO/1Q35+lGtfwuPvXy/PQ0cd0mBielnksQQp2hL/wZIs6GtClIE0gqhsX4I0
Ah8lykAaQVS2L0EagY8SZSCNICrblyCNQFM4+LsCaOEvc1gaDNgwbMlfGfwoiQ9L4bFOngsxr8dL
BeQ4VeNQfupTn2JuAg/iRz8EzFIJAPj+HurnbvHwg/O4M16fKg6//e1v+8sm7o7mz549Wz+BzUZi
PdWWLVs0049JBnBytU8nK16S3mKqwVx/XdphkjRdJB04Hc3QPpuL09dHeE7+/EpHM8xn2yuA4Ze+
SjvAPQQ5vRobvOvz+UtrGnaURL+S8+7x8zY1JjoH9wbvYA+6cDaXDAXZlXmDb90Q+0q431tunNBZ
LwZdf8WQnk7JrEG5JZG7F/ctL98ZItSvK/HuTuTccIWeYzil4yX75v+6jAuNgqTKmRPHHtF93PwV
GxIqEdNhg7Ye7r6aP5I5+OxzIonSTTuSlS5SKIUIF/kw6OEQILFboYETjy920nZXLBhdgHld7uOP
/QDvN/H71/ecuncPuU3ePyuKtKexwfvO28Ql7+9/c6E7toswq5QORviSDu/F7rhFpvG1bi3Th6XC
YtvftCuA74jhSVy+UrO4uLi5VeI7A/fffz9LXXfddYk/yIU5IcnJgJjfMTj55JO5VgcPLfzhD3+g
K3yLjV9RwGcQaG8BuOuuu/CV6KuvvlrH9PCD2winn356628mtKBJViSzFGj9+ZVZ/bXWplWBDjND
wAvR0NEdtYGs/tcuqCgvisTdgcC8Jyr3JFCheygva9xdSyKrfjzjfTlXLUhQsvY9Pp3WJ+wkQT0x
s7LzphQyY+b8J2Qd0vYnHloCa/4d5/bXASeJTYCs/hc+sWOVliBYYM2teTndJ83H9+WS32p3/Lsm
ws6W2VTEoFCvPkeq2czW96NmForXVtD5d9ofyqMhiPBoJ5AGMilA9ngme/ntNwYJaxbMueZStV12
2WVITZp06ddu5CMZpZ+56NJrgvbzLr3ztX1Rc5U4/mO35zBUuTM4totfKp+n7yjM++uG95wGO8no
9sf2jyLNao/xw+MBIyipxWxyUGyfEgWwiOW///u/xdUTTzzRAp9nnnnmt771LSmILw/wNaMxXfXu
HfkcJ4J775An3OrrY18dwfeV6R9XaonxOTC8yAhJfBRZr88hoVkAHvBdtq1bt+KVSvpmC564wG/U
G2+80SxvQuYqFCST+cT1/v37WYsuS6OBjqxA68+vjtw7a1tbKtCBZghet/tI37PG3PJrdW0+8P57
MR50iyVT/9v/UK4W1QQCpTdcPveZWEzP1rDnrXBWaaXzjEE4o8m/fcf8V2R5U+lkfEM3ENhTOs97
gKFwygXuTYcm3YUJWf3HLa7bVjI9qjde5pJbB58xJ/lJQvaRR4RdNvE365hPqhlCoKVTpiZqaVY2
wjj8U84iGouRYTGSkqs5xATg95AxlhMovW8pXoPobEuXluL5hMj2VKmQ1pS++t5+ryV0pTGNidrT
R8pmnXPLr++PRBqRsS1O6KrZ/lXb6CRRe4wfnlZRrshxN5RmBa688kqpIV443mT9P/vZz/iVA8To
CWYaZ599Nr3hSWXi5gLMEHhp/+mnn96xYwc84AYFPxic/GMVTVY9cODAuXPn4lNuWLZEMiYJ+Gov
k8kDPkWNIvop5Hge5JkKyU3muYV4fjqxHT8aTW66+5qs7WnCrT+/0tQwc5tZCrTDDGHn6rlT58eN
2sPyZV8+rSiMA2te+jdxE6DfmJK1kYIgr7lj7IwVW2KWOubEU2hf9dxm4maCQdeo2cyvSzc2vv3M
rWvgo+DyWM8oN8N5z0HX/vSR3VXls51pQuXMS+5enayf7E+Epl1egcrq2uRuQOSOPzGyVDjZqtLB
03cSdLzrr0tyNYeYAKVqtgaLRs0D/M78lq3J+N+5+p4b5j8rhePzs6+YNo8VPFURGtvx+ZH7AywF
YHxRgFJocWgkhxYNWAT/fhMbaAMFDjnkEKklK6sld1lR9rDDDtNfSp48eXJNjbpdqvqA9TlM4WNh
xM0FeEnrV77yFSmFZyGWLPHuEz/++OO4iQGA6QrDsuZ6jsdHH+fPnz9jxgwScEWDOHmgo/x//OMf
TRbUs4hhw4Y1yTdCR1Og9edXR+uRtaddFGiHGcJb/1x5361/3NJUpJo99BwGxkOPPzyBOt79XbX1
PfMWfpNYzHfnnbxsU/RriIIZDQGuMgosuWFx4qcdtq+c0a3bhHUx3ASG5UVeabnm/rkzf+rFf3lF
k4a07N++xi1zp87dFL7R3XfImLseObCt3HvLKbfKmfNjtoSECMg6/MRIonLpE1WRVDRq3LU1Ejb3
CbSs7dEuU5NCkJcggHOyJKmN0Zbs/NJX8O8fN/x7CSx7gFc3v3r/lBHhducsLF//yiseYf36h0cG
p0zR3jyitnhju+BhPbZ1S8QtLFFje4CawUV7I5+1aBAzlwTWS2D8mApQHwKh2T6tCrz66qviH6/r
aXFFeP8Pvl0gxXG5Ha9PjekK32ijvaSkpMV3LeBEv6cIa4FgwatsxDmeQNCXM1hj68H06ZG71O++
+24LHEIolsKXKIjjAema5GLtZTya2TusAik5vzps76xhbaZAO8wQuvcYgEcLHkv4aAH6X7+jkldL
PjUMReJu/vUwo6ZGLVJCyYnDb3phj+she+jZ+RHbvJ/cvy6SikaNO1deMv7uQP5XhwbDxOjMQKDv
6Nv5bbXKJXfPwx2Elj2jHHRc9/7K++5Yuy08RQjaBo25+pGaiimqYmdepHKiYdagz6tiS373hE+G
EL/2rW2cIUz56vkxOxrtuu1SCf7plYvEDO8k6b9yTMsRg4YjKDnttNOwx5aTk8M9wLAhw0aflRPu
2Iicz4wYPtwjnHbaSbJgLLH/7j3642sVGNtOe8IOvb/woMf2qcOOh9Hhs7XC557A+JBCNueISLJl
+rBU2Lf9TZcChYWhx7e++MUvtqYO3EbgYv1Fixbhir7fG+4hjB07VuzV1dXf//73/ZwkLZdccgk/
nIxXiOJ5ZbkpgdVH+qtkSXpLkqafBOC14STLCg2vQsJ33ASjwWvWePe4423QkF+Iw1cgLrroonhM
s3dYBVJ1fnXYDlrD2kaBdpghSMdunf1gvFBVCLtefz0sQf450YF590CPcBb+lj652X9hP/va/6tU
gTFoS866fO5OVcyDPUdMDn8xzWPccMaMhzY4FCQbdz4zecB4RM8ld14cJ27OOnfqtKiCLX1G2XPS
3Xsc43dPrI9yiET2qJ9XFLnGptNZE2Ysj7DW3Fq6wS+Xl//PJx4J06bcfNmQMG7138a3Vy9bgDW1
i1asi5r0NNNxKPKLLsWQDrnEoBAfONCw5dk/L1v28J+f9e7K0B6ff6AhcmPpgwPBZw/gMAFft0iW
qhTMefC96PaQIw3YtXlz2DJRxnay/sOLYYwvAvKAOskW6+M4DB8m+5usAqNHj27yOv2dd94pT/ri
TZr6IwDJ1qF4eBU93hBKwze/+c09e2L8w4KvmPERAnyHAa8MYpFmAVyq0B9GuPFGee1BAOuLjjnm
mGa5csgXXHABPqrgGCX5i1/8gvZx48YRNwvgF5h83FThNWYaBVRUVHz961+nEQ97EHcpgB8QvXWc
vrfx+dVxOm4taR8F8C9iarcm37rN1+fnFCyPvDxfXrqfWxyyVK/i6z6nLN3otHBH9KcPiiv9nxj2
SuDjxI6mOQWlDdG+oj9o4NFzC4ord4QcNtRUly8N//PjKxvtqbqILcYzyuXV0bluqq6yhG3LK66M
yg59fyDf/wLWhirvvnZwy6+I/jZDIocHGsqm87o4elgUo3Hq+9Cu4CorEOubyjygaJjvm811y9VE
LWf2qqieNjtRszAv1P9A4Nwnd0VebR/zbffIfl693Cpn+pMsEI8Pgv4eAj/bnIAvPoXAsiNufTDy
rea9L01Eq3PvDVl2PcmRMmXJq7o4m+cHTgOcpPEdQZxkc/Vp9sDMhAJN/jIn7gSGcGKC5Mr5idD/
4osvRiyOjxXIpwPEvmDBAtyRE4w9mpTAJ2kACWjI0k/i4tMEMcn6oQU4RDN+85vf4JtrQsbLiPCx
4QceeAC3AoYOHRrTgxifffZZ3TDBMCYoIlm6lJ8suejIPffc8/e//x0DGBw074477tAFk/kmNPh+
/7BwPgMCPukAz3jtrFSEVzzh3gKeiuY8Cpx4SsKVblLMusTYJK1JQgLnyWe1oBZdBDj5ujRTO9H2
1mDxmZLzqzXNsLIdR4EWj89kutDCoZ/AdZP/DlUWR6K8QO708iqZFGz0FvzklSA2ryovYQgVyC+J
zCJCtdYsVUGnV6iwPF57qkoL5IziPq+o3JkkrC1S7SEPq09yVFQdKNgYHZH7a9xWytWiBVVOHT52
1XLVsPySKN/8Qllu4bZoP3y+IrdoreMykUNQG6r0HAGKRTuuWc739OOTFI7rHaVKiDxnZoL3hxZH
jlZg9qro2Qf7IsLmFvmOplNZ4mQVJYa/wucjQbgOASU6DO63zlJNx7Pjm/drYggrvmdhlI+RxRmC
LubwkSWWYFk1ljC2N3st/OijV7wZQt79+Pza5vKFEbUmLozZgQT+dTOIjU/9qYkGLdMn8UDMxNwm
f5kTdwpDODFBcuVET2aP6+6JHWoniZlY8KND28ceeywmn88MaM8xccziNJ500km6FJ4DZlYCoIv4
aTo3Hsb7T/0FadGlaHSAfo5C8/0Yt0pw4jjFmdR8Gv2gSVqTBL/PJi3aZzI4pkOnYExOk0btpEly
kgTtMzFu8vxKskajdXAFMAzS18LUu07i36GaitLiPBW65eRNme1/rScCupJyHTpXV20sL1taEImw
IidITv705WXllVXV0YEvdIu+fC4l8gqWlq3dUUNuzXI+RRBxqVBeoe9jyrGOSF1oXVNecUWsbM/W
UFdTvaNq1VJ1ZTtYz5TC5Rt3VNfUBZsUFVVPKa2oqqmrq9m9rawoPDHKK9oRriAph0Ju2KY/MpEz
pbB84466Btwm2Vgcnh7kTFd3dYKt3VZZ5gieW1BSGWpqw+4dlb73seYvr9gWkbahSs2EcB09fI8o
3P5k/jbU7a7esa2ivHS6HjTQLWfiksef2/zmrnfff18if1+k+Gb0DGH61n0f+WNHbQHWM4Tn3mua
r4t/9NF7L5Xeq5uJsT0r5theWL5XTS3Eia/92reHHYKTdNnGxwetE26OgE4ymcGZQZwkfpkT9QYn
XKLscB5elImFQ3w2QP2MRiCieSwNCpeI+zdSIImq9bV2fI7tnXfeiekXF/uHDx+uPcfEMcvSqNc1
ofi9997LrARAV+SnPffcc3haQHM07tWrF6Y3/lLaovna7uCFCxfyc3W6CPGxxx6LuytOKSdJMoCT
pZNN0pokaG9JYu0zGRzTrVMwJqdJo3bSJDlJQgrPryRrNFoHVwDDLH0tTL3rpP8dathWWb60qHBK
fl6uni3k5OYXzI6O4KX7NSXq+qw+9yI41hoY3Kp14/FggaIKfTm7bu3S2aoVdJlbuNx30Tz+0Vgb
rKks+jK6pm90bn+wniAILTeqq8AkKL+gID/GXAjtWatnTUk5jLSgoWJ5YaxuovrcorKNEWIQbVRv
cY1uKW72gFwZ74DkFkXmSBUl4YlNIDC7bJtTRTLJyvjNCLdq4nqE29GbRHsv3etdvpctt7A8mhKV
YnT4yhI2eIrfLd7B1nkAAAgvSURBVMuQT8Csjz/ev3V9+ZJ5hVMmumN7YsEszGreDM1oVAkfpFsC
HyXKQBpBVLYvQRqBjxJlII0gKtuXII3AR4kykEYQle1LkEbgo0QZSCOIyvYlhJbM+MwUTtK/zLE7
hJModkYsK9QrKyubNm3a+PHj8WgvFkXIOYgFPLgQzrU9sYpGbKHzNvgnYo2DsJZJX9rHZ4njED0z
2oar6ZgqIPKGeyy5Of744/FaJCyzefDBB/FapARlkbU58hxR4NBDD5VlVImLIDeZ7rz22mszZ87E
c9VoGOZRmGhh2vDjH/+4ySYl6V8aiTVFeKob15jxILIcGlSHOyEQDW86woKrlPQlmSYlo0mTjXEI
2mcy2CkuSadgTE6TRu2kSXKzCCk5v5pVo5E7rAIYZulrW9TznXpAtxjPmjUL/9pi3zwPtesm9Dmj
FCH+6qlxngZunr8Wset3btq8ZefbH3pflDzk6MFDhg4b1LzG1O9ctzkwagReaNOarbG2tjE723t3
Tv2et3fseuv9vQ3AvQ8/dvCQ/vJGndZ4DzTu2VTx8rp/bK7t0SNQU7Ovx1GnnD7q82cMy07b+033
7Nxe09AY6D1gUL8UNJ99xzDDw2RI4vRwADkAOze88G9Pv2M/9+kTHBoLaj4xc/2AHA38tJCldt2l
h3+mNPfe91dFje24fO1UYeNTAaVKBDLXDyIkhfw0WhQr9scoNCFTcAt/mcPdw7kDfcKpZv/lqdfs
klbAFDAFmlLAzq+mFOq0+a38ZU6sS9qiwsTV+nO7B7xYvI8/oy0tPfsPG9F/WCtq7Nl/VOQxvBb7
ycoOR+s9+/Yb0rdfix3FLpjVd9iZ4/Bf7Nw0WPv2H9Q3DW7xXhEJWeQMwR6b1MNQD6D/iDMxY6MF
BNAkGZMvxlTyuwcOQ63BsU23BO3QHqUGm0Fg7YECVANABMHettYogOv0rSluZU0BUyCBAnZ+JRDH
slqsQIeZITQ07EAntu5rbHFXrGDXU0BiffSbsb5owKQfOAQnmRZ+Q8NOVBMc22nxr7pv/p0D6iRb
pg8nDOLN9i1QoDXfKWtBdVbEFOhSCtj51aUOd5t1tsPMELJPmbV86U1HjGreqp4208kq6qgKIOaT
C70JwjidRUzg75nOIiZoNt8b20tu6hsZ29oVMUGz/fsKaFfEBD565JI5skgjMD6kgAicXfgFMYsp
YAqYAqaAKdDJFOgwM4RA3zFXXN3JxLXutI0CMkmQAI5xLQHaoGM74jbk9z3ncu+5ydASqPZvT9TD
Gx1An8xojx5RbTOwrRZTwBQwBUwBU6C9FDiovSq2ek2BFCqAcB8BHBxyAkDnYpc9jA4wvukjQ0V0
SDweOHg4ugyYAqaAKWAKmAKdUgGbIXTKw9oVO4UHl3W3GeoJkD0iPMfOIo7d+BREJGJSQJfVxyYJ
PGUMmAKmgClgCnRiBaKCqk7cT+taV1AAYasO4IgJGOZCDTEyixYNjG/6+MeD1gS5tpkCpoApYAqY
Ap1PAZshdL5j2qV7pO8kML4n0NKIUWcRExhfS0FM0GX1sUmCPvSGTQFTwBQwBTqfAjZD6HzHtKv3
CPGrDuAE00IgMjm5MDoW41OTmIp1WX2cjos4tjcFTAFTwBQwBTqHAjZD6BzH0XoRpYD/TgIvewtg
eCdJ5sKLYzE+NRGJTR/oIOOHo0iUsb0pYAqYAqaAKdBpFLAZQqc5lNaRKAWcyF7yGNIhlxhZxATG
11IQE5g+IoUjiMhie1PAFDAFTAFTINMVsBlCph9Ba39cBTANwCbZEsnpJDEIxATGpxSmDxRIMB5s
kiCnmO1NAVPAFDAFOpMCNkPoTEfT+uIqIGEuYjgd74KkkxLh6TjP+KZPs8aDJrtD0NKmgClgCpgC
pkAGKmAzhAw8aNbk5iiAYJfxrhPJSVJyyYFvYuNTDWpCC4DpQzUcKWC3zRQwBUwBU8AUyFwFbIaQ
ucfOWp6sAoxuCaSkTjLCIwBHE5wkaQQOwUmSRuAQnCRpBA7BSZJG4BCcJGkEDsFJkkbgEJwkaQQO
wUmSRuAQnCRpBA7BSZJG4BCcJGkEDsFJgqaZyLXNFDAFTAFTwBTIXAVshpC5x85a3gwFEOszgPMD
OOJkgMBPo8X4UIBq+EGX1YdSQAHbTAFTwBQwBUyBzFXAZgiZe+ys5c1TgK9A5Wwh8WSAucZn4KuB
6UMFtCzEzRudxjYFTAFTwBQwBTqSAlnpaMzs2bPT4dZ8mgKtV8ACuNZraB6aVICThyaZbUbAz/LM
mTPbrDqryBQwBUwBUyCjFYgsvUhhN2bNmpVCb+bKFEitAjJJwD5eGKeziAn8jdFZxATG11IQE3RW
feKNLn9/28zywx/+sMV1dcDutLgvVtAUMAVMgU6jAP4xTVNf0jJDSFNbza0pYAqYAqaAKWAKmAKm
gClgCqRbAXsOId0Km39TwBQwBUwBU8AUMAVMAVMgkxSwGUImHS1rqylgCpgCpoApYAqYAqaAKZBu
BWyGkG6Fzb8pYAqYAqaAKWAKmAKmgCmQSQrYDCGTjpa11RQwBUwBU8AUMAVMAVPAFEi3AjZDSLfC
5t8UMAVMAVPAFDAFTAFTwBTIJAVshpBJR8vaagqYAqaAKWAKmAKmgClgCqRbAZshpFth828KmAKm
gClgCpgCpoApYApkkgI2Q8iko2VtNQVMAVPAFDAFTAFTwBQwBdKtgM0Q0q2w+TcFTAFTwBQwBUwB
U8AUMAUySQGbIWTS0bK2mgKmgClgCpgCpoApYAqYAulWwGYI6VbY/JsCpoApYAqYAqaAKWAKmAKZ
pMD/A3em8KaVfrBaAAAAAElFTkSuQmCC
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25187</attachid>
            <date>2008-11-15 10:54:12 -0800</date>
            <delta_ts>2008-11-17 14:37:34 -0800</delta_ts>
            <desc>makes SVGPaintServerGradient platform-independent</desc>
            <filename>gradient.patch</filename>
            <type>text/plain</type>
            <size>59060</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODQyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDgtMTEtMTUgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IFNWR1BhaW50U2VydmVyR3JhZGllbnQgcGxhdGZvcm0gaW5kZXBlbmRlbnQuCisKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmg6
CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFNpemU6OnNocnVua1RvKToKKyAgICAgICAgKiBzdmcv
U1ZHR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dyYWRpZW50RWxl
bWVudDo6YnVpbGRTdG9wcyk6CisgICAgICAgICogc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmJ1aWxk
R3JhZGllbnQpOgorICAgICAgICAqIHN2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWRpZW50
KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaDoKKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpTVkdQYWludFNlcnZlckdyYWRpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6On5TVkdQYWludFNlcnZlckdyYWRp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmdyYWRpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldEdyYWRpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRUZXh0Um9vdE9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVNYXNrQW5kU3dhcENvbnRleHRGb3JUZXh0R3JhZGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Y2xpcFRvVGV4dE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2
ZXJHcmFkaWVudDo6c2V0dXApOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudDo6cmVuZGVyUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRp
ZW50Ojp0ZWFyZG93bik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFp
bnRTZXJ2ZXJHcmFkaWVudC5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWlu
dFNlcnZlckdyYWRpZW50Q2Fpcm8uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGlj
cy9jZy9TVkdQYWludFNlcnZlckNnLmNwcDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvY2cvU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvcXQvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVu
dFF0LmNwcDogUmVtb3ZlZC4KKwogMjAwOC0xMS0xNCAgR3JlZyBCb2xzaW5nYSAgPGJvbHNpbmdh
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQkocmV2aXNpb24gMzgzNjQpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzAxLDcgKzI3MDEsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogd2ViY29yZWd0
a19zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9SZW5kZXJQYXRoQ2Fp
cm8uY3BwIFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlckNhaXJv
LmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dENhaXJvLmNwcCBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJQ
YXR0ZXJuQ2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNl
cnZlclNvbGlkQ2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdSZXNv
dXJjZUNsaXBwZXJDYWlyby5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAzODM2NCkKKysrIFdlYkNvcmUv
V2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTE2NzMsMTEgKzE2NzMsOCBAQCBjb250YWlu
cyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsKIAogU09VUkNFUyArPSBcCiAgICAgICAgIHN2Zy9n
cmFwaGljcy9xdC9SZW5kZXJQYXRoUXQuY3BwIFwKLSAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NW
R1BhaW50U2VydmVyR3JhZGllbnRRdC5jcHAgXAotICAgICAgICBzdmcvZ3JhcGhpY3MvcXQvU1ZH
UGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0LmNwcCBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9x
dC9TVkdQYWludFNlcnZlclBhdHRlcm5RdC5jcHAgXAogICAgICAgICBzdmcvZ3JhcGhpY3MvcXQv
U1ZHUGFpbnRTZXJ2ZXJRdC5jcHAgXAotICAgICAgICBzdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRT
ZXJ2ZXJSYWRpYWxHcmFkaWVudFF0LmNwcCBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9xdC9TVkdQ
YWludFNlcnZlclNvbGlkUXQuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NWR1Jlc291
cmNlQ2xpcHBlclF0LmNwcCBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9xdC9TVkdSZXNvdXJjZUZp
bHRlclF0LmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJl
dmlzaW9uIDM4MzY0KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTUyNjQsMjYgKzE1MjY0LDYgQEAKIAkJCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cc3ZnXGdyYXBoaWNzXGNnXFNWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAiDQotCQkJ
CQkJPg0KLQkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCQlOYW1lPSJEZWJ1Z19DYWly
b3xXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJCT4NCi0J
CQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCS8+
DQotCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24N
Ci0JCQkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb3xXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiDQotCQkJCQkJCT4NCi0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiDQotCQkJCQkJCS8+DQotCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4N
Ci0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdc
Z3JhcGhpY3NcY2dcU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwIg0KIAkJCQkJCT4NCiAJCQkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24NCkBAIC0xNTYxNiw0MiArMTU1OTYsNiBAQAogCQkJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQotCQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcY2Fpcm9cU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENh
aXJvLmNwcCINCi0JCQkJCQk+DQotCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJCU5h
bWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJ
CQkJPg0KLQkJCQkJCQk8VG9vbA0KLQkJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0J
CQkJCQkJLz4NCi0JCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJCTxGaWxlQ29uZmln
dXJhdGlvbg0KLQkJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSINCi0JCQkJCQkJPg0KLQkJCQkJCQk8VG9vbA0KLQkJCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJLz4NCi0JCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
Pg0KLQkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCQlOYW1lPSJEZWJ1Z19JbnRlcm5h
bHxXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJCT4NCi0J
CQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCS8+
DQotCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24N
Ci0JCQkJCQkJTmFtZT0iUmVsZWFzZV9QR098V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIg0KLQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQotCQkJCQkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIg0KLQkJCQkJCQkvPg0KLQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQot
CQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdy
YXBoaWNzXGNhaXJvXFNWR1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmNwcCINCiAJCQkJCQk+DQog
CQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDM4MzY0KQorKysgV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMwOTIsNyArMzA5Miw2
IEBACiAJCUIyNTU5OTJEMEQwMEQ4QkEwMEJCODI1QyAvKiBDZ1N1cHBvcnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5ODkxMEQwMEQ4QjgwMEJC
ODI1QyAvKiBDZ1N1cHBvcnQuaCAqLzsgfTsKIAkJQjI1NTk5MkUwRDAwRDhCQTAwQkI4MjVDIC8q
IFJlbmRlclBhdGhDZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjU1OTg5MjBEMDBEOEI4MDBCQjgyNUMgLyogUmVuZGVyUGF0aENnLmNwcCAqLzsg
fTsKIAkJQjI1NTk5MkYwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyQ2cuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTMwRDAw
RDhCODAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyQ2cuY3BwICovOyB9OwotCQlCMjU1OTkzMDBE
MDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5ODk0MEQwMEQ4QjgwMEJC
ODI1QyAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwICovOyB9OwogCQlCMjU1OTkzMTBE
MDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTUwRDAwRDhCODAwQkI4
MjVDIC8qIFNWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcCAqLzsgfTsKIAkJQjI1NTk5MzIwRDAw
RDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyU29saWRDZy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTg5NjBEMDBEOEI4MDBCQjgyNUMg
LyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcCAqLzsgfTsKIAkJQjI1NTk5MzMwRDAwRDhCQTAw
QkI4MjVDIC8qIFNWR1Jlc291cmNlQ2xpcHBlckNnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5ODk3MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdS
ZXNvdXJjZUNsaXBwZXJDZy5jcHAgKi87IH07CkBAIC03Njg4LDcgKzc2ODcsNiBAQAogCQlCMjU1
OTg5MTBEMDBEOEI4MDBCQjgyNUMgLyogQ2dTdXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDZ1N1cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjI1NTk4OTIwRDAwRDhCODAwQkI4MjVDIC8qIFJlbmRlclBhdGhDZy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyUGF0aENnLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OTMwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1BhaW50U2Vy
dmVyQ2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhaW50
U2VydmVyQ2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OTg5NDBEMDBE
OEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjU1OTg5NTBEMDBEOEI4MDBCQjgyNUMgLyog
U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjI1NTk4OTYwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyU29s
aWRDZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGFpbnRT
ZXJ2ZXJTb2xpZENnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OTcw
RDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlQ2xpcHBlckNnLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSZXNvdXJjZUNsaXBwZXJDZy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjUwMyw3ICsxMjUwMSw2IEBACiAJCQkJQjI1NTk4
OTEwRDAwRDhCODAwQkI4MjVDIC8qIENnU3VwcG9ydC5oICovLAogCQkJCUIyNTU5ODkyMEQwMEQ4
QjgwMEJCODI1QyAvKiBSZW5kZXJQYXRoQ2cuY3BwICovLAogCQkJCUIyNTU5ODkzMEQwMEQ4Qjgw
MEJCODI1QyAvKiBTVkdQYWludFNlcnZlckNnLmNwcCAqLywKLQkJCQlCMjU1OTg5NDBEMDBEOEI4
MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcCAqLywKIAkJCQlCMjU1OTg5
NTBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwICovLAogCQkJ
CUIyNTU5ODk2MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclNvbGlkQ2cuY3BwICov
LAogCQkJCUIyNTU5ODk3MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdSZXNvdXJjZUNsaXBwZXJDZy5j
cHAgKi8sCkBAIC0xNzU5NCw3ICsxNzU5MSw2IEBACiAJCQkJQjI1NTk5QTYwRDAwRDhCQTAwQkI4
MjVDIC8qIFNWR1BhaW50U2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNTU5OTJGMEQw
MEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckNnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyNTU5OUE4MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50LmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUIyNTU5OTMwMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNl
cnZlckdyYWRpZW50Q2cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI1NTk5QUEwRDAwRDhCQTAw
QkI4MjVDIC8qIFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjI1NTk5QUMwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyUGF0dGVybi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjU1OTkzMTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFp
bnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRTaXplLmgJKHJldmlzaW9uIDM4MzY0KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogICAgICAgICAgICAgICAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDYgKzY4LDEyIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIG1faGVpZ2h0ID4gb3RoZXIubV9oZWlnaHQgPyBtX2hlaWdo
dCA6IG90aGVyLm1faGVpZ2h0KTsKICAgICB9CiAKKyAgICBGbG9hdFNpemUgc2hydW5rVG8oY29u
c3QgRmxvYXRTaXplJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgcmV0dXJuIEZsb2F0U2l6
ZShtX3dpZHRoIDwgb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAorICAg
ICAgICAgICBtX2hlaWdodCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hl
aWdodCk7CisgICAgfQorCiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgZXhwbGljaXQgRmxvYXRTaXpl
KGNvbnN0IENHU2l6ZSYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBs
b3NzeQogICAgIG9wZXJhdG9yIENHU2l6ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9zdmcvU1ZH
R3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdHcmFkaWVu
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODM2NCkKKysrIFdlYkNvcmUvc3ZnL1NWR0dyYWRpZW50
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCBWZWN0b3I8U1ZH
R3JhZGllbnRTdG9wPiBTVkdHcmFkaWVudEVsZW1lCiAgICAgICAgICAgICAgICAgb3BhY2l0eSA9
IHN0b3BTdHlsZS0+c3ZnU3R5bGUoKS0+c3RvcE9wYWNpdHkoKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgc3RvcHMuYXBwZW5kKG1ha2VHcmFkaWVudFN0b3Aoc3RvcE9mZnNldCwgbWFr
ZVJHQkEoY29sb3IucmVkKCksIGNvbG9yLmdyZWVuKCksIGNvbG9yLmJsdWUoKSwgaW50KG9wYWNp
dHkgKiAyNTUuKSkpKTsKKyAgICAgICAgICAgIHN0b3BzLmFwcGVuZChtYWtlR3JhZGllbnRTdG9w
KHN0b3BPZmZzZXQsIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3IucmdiKCksIG9wYWNpdHkp
KSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRp
ZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50LmNwcAkocmV2aXNpb24gMzgzNjQpCisrKyBXZWJDb3JlL3N2Zy9TVkdMaW5lYXJH
cmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsOCBAQAogLyoKICAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgS0RFIHByb2plY3QKKyAgICAgICAgICAgICAgICAgIDIwMDggRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDggRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTgxLDE4ICs4MSwyOSBAQCB2b2lk
IFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkCiB7CiAgICAgTGluZWFyR3JhZGll
bnRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBjb2xsZWN0R3JhZGllbnRQcm9wZXJ0aWVzKCk7CiAK
LSAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnkgZ3JhZGllbnQgY29udGFpbmluZyBzdG9wIGVs
ZW1lbnRzLCBpZ25vcmUgdGhlIHJlcXVlc3QuCi0gICAgaWYgKGF0dHJpYnV0ZXMuc3RvcHMoKS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIFJlZlB0cjxTVkdQYWludFNlcnZlckxp
bmVhckdyYWRpZW50PiBsaW5lYXJHcmFkaWVudCA9IFdURjo6c3RhdGljX3BvaW50ZXJfY2FzdDxT
VkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50PihtX3Jlc291cmNlKTsKIAotICAgIGxpbmVhckdy
YWRpZW50LT5zZXRHcmFkaWVudFN0b3BzKGF0dHJpYnV0ZXMuc3RvcHMoKSk7CisgICAgUmVmUHRy
PEdyYWRpZW50PiBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoCisgICAgICAgIEZsb2F0UG9p
bnQ6Om5hcnJvd1ByZWNpc2lvbihhdHRyaWJ1dGVzLngxKCksIGF0dHJpYnV0ZXMueTEoKSksCisg
ICAgICAgIEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihhdHRyaWJ1dGVzLngyKCksIGF0dHJp
YnV0ZXMueTIoKSkpOworCisgICAgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4gbV9zdG9wcyA9IGF0
dHJpYnV0ZXMuc3RvcHMoKTsKKyAgICBmbG9hdCBwcmV2aW91c09mZnNldCA9IDAuMGY7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RvcHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ZmxvYXQgb2Zmc2V0ID0gc3RkOjptaW4oc3RkOjptYXgocHJldmlvdXNPZmZzZXQsIG1fc3RvcHNb
aV0uZmlyc3QpLCAxLjBmKTsKKyAgICAgICAgcHJldmlvdXNPZmZzZXQgPSBvZmZzZXQ7CisgICAg
ICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3Aob2Zmc2V0LCBtX3N0b3BzW2ldLnNlY29uZCk7Cisg
ICAgfQorCisgICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRpZW50KGdyYWRpZW50KTsKKworICAg
IC8vIFRoaXMgY29kZSBzaG91bGQgZ28gYXdheS4gIFBhaW50U2VydmVycyBzaG91bGQgZ28gYXdh
eSB0b28uCisgICAgLy8gT25seSB0aGlzIGNvZGUgc2hvdWxkIGNhcmUgYWJvdXQgYm91bmRpbmcg
Ym94ZXMKICAgICBsaW5lYXJHcmFkaWVudC0+c2V0Qm91bmRpbmdCb3hNb2RlKGF0dHJpYnV0ZXMu
Ym91bmRpbmdCb3hNb2RlKCkpOworCisgICAgLy8gVGhlc2Ugc2hvdWxkIHBvc3NpYmx5IGJlIHN1
cHBvcnRlZCBvbiBHcmFkaWVudAogICAgIGxpbmVhckdyYWRpZW50LT5zZXRHcmFkaWVudFNwcmVh
ZE1ldGhvZChhdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpKTsKICAgICBsaW5lYXJHcmFkaWVudC0+
c2V0R3JhZGllbnRUcmFuc2Zvcm0oYXR0cmlidXRlcy5ncmFkaWVudFRyYW5zZm9ybSgpKTsKLSAg
ICBsaW5lYXJHcmFkaWVudC0+c2V0R3JhZGllbnRTdGFydChGbG9hdFBvaW50OjpuYXJyb3dQcmVj
aXNpb24oYXR0cmlidXRlcy54MSgpLCBhdHRyaWJ1dGVzLnkxKCkpKTsKLSAgICBsaW5lYXJHcmFk
aWVudC0+c2V0R3JhZGllbnRFbmQoRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKGF0dHJpYnV0
ZXMueDIoKSwgYXR0cmlidXRlcy55MigpKSk7CiB9CiAKIExpbmVhckdyYWRpZW50QXR0cmlidXRl
cyBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmNvbGxlY3RHcmFkaWVudFByb3BlcnRpZXMoKSBj
b25zdApJbmRleDogV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZp
c2lvbiAzODM2NCkKKysrIFdlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw4IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAor
ICAgICAgICAgICAgICAgICAgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICAg
ICAgICAgICAgICAgICAgMjAwOCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtODksMTkgKzg5LDQxIEBAIHZvaWQgU1ZHUmFkaWFsR3JhZGllbnRF
bGVtZW50OjpidWlsZEdyYWQKIHsKICAgICBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMgYXR0cmli
dXRlcyA9IGNvbGxlY3RHcmFkaWVudFByb3BlcnRpZXMoKTsKIAotICAgIC8vIElmIHdlIGRpZG4n
dCBmaW5kIGFueSBncmFkaWVudCBjb250YWluaW5nIHN0b3AgZWxlbWVudHMsIGlnbm9yZSB0aGUg
cmVxdWVzdC4KLSAgICBpZiAoYXR0cmlidXRlcy5zdG9wcygpLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgUmVmUHRyPFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ+IHJhZGlh
bEdyYWRpZW50ID0gV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR1BhaW50U2VydmVyUmFkaWFs
R3JhZGllbnQ+KG1fcmVzb3VyY2UpOwogCi0gICAgcmFkaWFsR3JhZGllbnQtPnNldEdyYWRpZW50
U3RvcHMoYXR0cmlidXRlcy5zdG9wcygpKTsKKyAgICBkb3VibGUgYWRqdXN0ZWRGb2N1c1ggPSBh
dHRyaWJ1dGVzLmZ4KCk7CisgICAgZG91YmxlIGFkanVzdGVkRm9jdXNZID0gYXR0cmlidXRlcy5m
eSgpOworCisgICAgZG91YmxlIGZkeCA9IGF0dHJpYnV0ZXMuZngoKSAtIGF0dHJpYnV0ZXMuY3go
KTsKKyAgICBkb3VibGUgZmR5ID0gYXR0cmlidXRlcy5meSgpIC0gYXR0cmlidXRlcy5jeSgpOwor
CisgICAgLy8gU3BlYzogSWYgKGZ4LCBmeSkgbGllcyBvdXRzaWRlIHRoZSBjaXJjbGUgZGVmaW5l
ZCBieSAoY3gsIGN5KSBhbmQKKyAgICAvLyByLCBzZXQgKGZ4LCBmeSkgdG8gdGhlIHBvaW50IG9m
IGludGVyc2VjdGlvbiBvZiB0aGUgbGluZSB0aHJvdWdoCisgICAgLy8gKGZ4LCBmeSkgYW5kIHRo
ZSBjaXJjbGUuCisgICAgaWYgKHNxcnQoZmR4ICogZmR4ICsgZmR5ICogZmR5KSA+IGF0dHJpYnV0
ZXMucigpKSB7CisgICAgICAgIGRvdWJsZSBhbmdsZSA9IGF0YW4yKGF0dHJpYnV0ZXMuZnkoKSAq
IDEwMC4wLCBhdHRyaWJ1dGVzLmZ4KCkgKiAxMDAuMCk7CisgICAgICAgIGFkanVzdGVkRm9jdXNY
ID0gY29zKGFuZ2xlKSAqIGF0dHJpYnV0ZXMucigpOworICAgICAgICBhZGp1c3RlZEZvY3VzWSA9
IHNpbihhbmdsZSkgKiBhdHRyaWJ1dGVzLnIoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8R3JhZGll
bnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZSgKKyAgICAgICAgRmxvYXRQb2ludDo6bmFy
cm93UHJlY2lzaW9uKGFkanVzdGVkRm9jdXNYLCBhZGp1c3RlZEZvY3VzWSksCisgICAgICAgIDAu
ZiwgLy8gU1ZHIGRvZXMgbm90IHN1cHBvcnQgYSAiZm9jdXMgcmFkaXVzIgorICAgICAgICBGbG9h
dFBvaW50OjpuYXJyb3dQcmVjaXNpb24oYXR0cmlidXRlcy5jeCgpLCBhdHRyaWJ1dGVzLmN5KCkp
LAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGF0dHJpYnV0ZXMucigpKSk7CisKKyAg
ICBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiBzdG9wcyA9IGF0dHJpYnV0ZXMuc3RvcHMoKTsKKyAg
ICBmbG9hdCBwcmV2aW91c09mZnNldCA9IDAuMGY7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0b3BzLnNpemUoKTsgKytpKSB7CisgICAgICAgICBmbG9hdCBvZmZzZXQgPSBzdGQ6Om1p
bihzdGQ6Om1heChwcmV2aW91c09mZnNldCwgc3RvcHNbaV0uZmlyc3QpLCAxLjBmKTsKKyAgICAg
ICAgIHByZXZpb3VzT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9y
U3RvcChvZmZzZXQsIHN0b3BzW2ldLnNlY29uZCk7CisgICAgfQorCisgICAgcmFkaWFsR3JhZGll
bnQtPnNldEdyYWRpZW50KGdyYWRpZW50KTsKICAgICByYWRpYWxHcmFkaWVudC0+c2V0Qm91bmRp
bmdCb3hNb2RlKGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkpOwogICAgIHJhZGlhbEdyYWRp
ZW50LT5zZXRHcmFkaWVudFNwcmVhZE1ldGhvZChhdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpKTsg
CiAgICAgcmFkaWFsR3JhZGllbnQtPnNldEdyYWRpZW50VHJhbnNmb3JtKGF0dHJpYnV0ZXMuZ3Jh
ZGllbnRUcmFuc2Zvcm0oKSk7Ci0gICAgcmFkaWFsR3JhZGllbnQtPnNldEdyYWRpZW50Q2VudGVy
KEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihhdHRyaWJ1dGVzLmN4KCksIGF0dHJpYnV0ZXMu
Y3koKSkpOwotICAgIHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudEZvY2FsKEZsb2F0UG9pbnQ6
Om5hcnJvd1ByZWNpc2lvbihhdHRyaWJ1dGVzLmZ4KCksIGF0dHJpYnV0ZXMuZnkoKSkpOwotICAg
IHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudFJhZGl1cyhuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGF0dHJpYnV0ZXMucigpKSk7CiB9CiAKIFJhZGlhbEdyYWRpZW50QXR0cmlidXRlcyBTVkdSYWRp
YWxHcmFkaWVudEVsZW1lbnQ6OmNvbGxlY3RHcmFkaWVudFByb3BlcnRpZXMoKSBjb25zdApJbmRl
eDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5oCShyZXZpc2lvbiAzODM2NCkKKysr
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc5LDkgKzc5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByb3RlY3RlZDoKICNpZiBQ
TEFURk9STShDRykKICAgICAgICAgdm9pZCBzdHJva2VQYXRoKENHQ29udGV4dFJlZiwgY29uc3Qg
UmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgY2xpcFRvU3Ryb2tlUGF0aChDR0Nv
bnRleHRSZWYsIGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwogICAgICAgICB2b2lkIGZpbGxQ
YXRoKENHQ29udGV4dFJlZiwgY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgICAgIHZv
aWQgY2xpcFRvRmlsbFBhdGgoQ0dDb250ZXh0UmVmLCBjb25zdCBSZW5kZXJPYmplY3QqKSBjb25z
dDsKICNlbmRpZgogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAJKHJldmlzaW9uIDM4MzY0KQorKysgV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogICAgICAgICAgICAgICAyMDA4IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiAgICAgICAgICAgICAgIDIwMDggRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI4LDkgKzMwLDIzIEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdQYWludFNlcnZl
ckdyYWRpZW50LmgiCiAKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgorI2luY2x1ZGUg
IlNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQuaCIKKyNpbmNsdWRlICJTVkdQYWludFNlcnZl
clJhZGlhbEdyYWRpZW50LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogI2luY2x1
ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKIAorI2lmIFBMQVRGT1JNKENHKQorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisK
K3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgR3JhZGllbnRTcHJlYWRNZXRob2QgbSkKQEAg
LTY1LDggKzgxLDYgQEAgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6U1ZHUGFpbnRTZXJ2ZXJHcgog
ICAgICwgbV9vd25lckVsZW1lbnQob3duZXIpCiAKICNpZiBQTEFURk9STShDRykKLSAgICAsIG1f
c3RvcHNDYWNoZSgwKQotICAgICwgbV9zaGFkaW5nQ2FjaGUoMCkKICAgICAsIG1fc2F2ZWRDb250
ZXh0KDApCiAgICAgLCBtX2ltYWdlQnVmZmVyKDApCiAjZW5kaWYKQEAgLTc2LDE5ICs5MCwxNiBA
QCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpTVkdQYWludFNlcnZlckdyCiAKIFNWR1BhaW50U2Vy
dmVyR3JhZGllbnQ6On5TVkdQYWludFNlcnZlckdyYWRpZW50KCkKIHsKLSNpZiBQTEFURk9STShD
RykKLSAgICBDR1NoYWRpbmdSZWxlYXNlKG1fc2hhZGluZ0NhY2hlKTsKLSNlbmRpZgogfQogCi1j
b25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6Z3Jh
ZGllbnRTdG9wcygpIGNvbnN0CitHcmFkaWVudCogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6Z3Jh
ZGllbnQoKSBjb25zdAogewotICAgIHJldHVybiBtX3N0b3BzOworICAgIHJldHVybiBtX2dyYWRp
ZW50LmdldCgpOwogfQogCi12b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldEdyYWRpZW50
U3RvcHMoY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mIHN0b3BzKQordm9pZCBTVkdQYWlu
dFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVudChQYXNzUmVmUHRyPEdyYWRpZW50PiBncmFkaWVu
dCkKIHsKLSAgICBtX3N0b3BzID0gc3RvcHM7CisgICAgbV9ncmFkaWVudCA9IGdyYWRpZW50Owog
fQogCiBHcmFkaWVudFNwcmVhZE1ldGhvZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzcHJlYWRN
ZXRob2QoKSBjb25zdApAQCAtMTIxLDEzICsxMzIsMTY4IEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudDo6c2V0R3JhZGllbnQKICAgICBtX2dyYWRpZW50VHJhbnNmb3JtID0gdHJhbnNmb3Jt
OwogfQogCisjaWYgUExBVEZPUk0oQ0cpCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHQgcGFp
bnRpbmcgaW4gQ0cKKy8vIFRoaXMgQ2cgc3BlY2lmaWMgY29kZSBzaG91bGQgbW92ZSB0byBHcmFw
aGljc0NvbnRleHQgYW5kIEZvbnQqIGluIGEgbmV4dCBzdGVwLgorc3RhdGljIGlubGluZSBjb25z
dCBSZW5kZXJPYmplY3QqIGZpbmRUZXh0Um9vdE9iamVjdChjb25zdCBSZW5kZXJPYmplY3QqIHN0
YXJ0KQoreworICAgIHdoaWxlIChzdGFydCAmJiAhc3RhcnQtPmlzU1ZHVGV4dCgpKQorICAgICAg
ICBzdGFydCA9IHN0YXJ0LT5wYXJlbnQoKTsKKyAgICBBU1NFUlQoc3RhcnQpOworICAgIEFTU0VS
VChzdGFydC0+aXNTVkdUZXh0KCkpOworCisgICAgcmV0dXJuIHN0YXJ0OworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgY3JlYXRlTWFza0FuZFN3YXBDb250ZXh0Rm9yVGV4dEdyYWRpZW50KAorICAg
IEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dComIHNhdmVkQ29udGV4
dCwKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlciwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgRmxvYXRSZWN0IG1hc2tCQm94ID0gY29uc3RfY2FzdDxSZW5k
ZXJPYmplY3QqPihmaW5kVGV4dFJvb3RPYmplY3Qob2JqZWN0KSktPnJlbGF0aXZlQkJveChmYWxz
ZSk7CisgICAgSW50UmVjdCBtYXNrUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qob2JqZWN0LT5hYnNv
bHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QobWFza0JCb3gpKTsKKworICAgIEludFNpemUgbWFza1Np
emUobWFza1JlY3Qud2lkdGgoKSwgbWFza1JlY3QuaGVpZ2h0KCkpOworICAgIGNsYW1wSW1hZ2VC
dWZmZXJTaXplVG9WaWV3cG9ydChvYmplY3QtPmRvY3VtZW50KCktPnJlbmRlcmVyKCksIG1hc2tT
aXplKTsKKworICAgIGF1dG9fcHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKG1hc2tTaXplLCBmYWxzZSk7CisKKyAgICBpZiAoIW1hc2tJbWFnZS5nZXQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0KiBtYXNrSW1hZ2VD
b250ZXh0ID0gbWFza0ltYWdlLT5jb250ZXh0KCk7CisgICAgbWFza0ltYWdlQ29udGV4dC0+c2F2
ZSgpOworICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtbWFza1JlY3QueCgpLCAtbWFz
a1JlY3QueSgpKTsKKyAgICBtYXNrSW1hZ2VDb250ZXh0LT5jb25jYXRDVE0ob2JqZWN0LT5hYnNv
bHV0ZVRyYW5zZm9ybSgpKTsKKworICAgIGltYWdlQnVmZmVyLnNldChtYXNrSW1hZ2UucmVsZWFz
ZSgpKTsKKyAgICBzYXZlZENvbnRleHQgPSBjb250ZXh0OworCisgICAgY29udGV4dCA9IG1hc2tJ
bWFnZUNvbnRleHQ7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lk
IGNsaXBUb1RleHRNYXNrKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAgICBPd25QdHI8SW1h
Z2VCdWZmZXI+JiBpbWFnZUJ1ZmZlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsCisgICAg
Y29uc3QgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudCogZ3JhZGllbnRTZXJ2ZXIpCit7CisgICAgRmxv
YXRSZWN0IG1hc2tCQm94ID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihmaW5kVGV4dFJvb3RP
YmplY3Qob2JqZWN0KSktPnJlbGF0aXZlQkJveChmYWxzZSk7CisKKyAgICAvLyBGaXh1cCB0cmFu
c2Zvcm1hdGlvbnMgdG8gYmUgYWJsZSB0byBjbGlwIHRvIG1hc2sKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gdHJhbnNmb3JtID0gb2JqZWN0LT5hYnNvbHV0ZVRyYW5zZm9ybSgpOworICAgIEZsb2F0UmVj
dCB0ZXh0Qm91bmRhcnkgPSB0cmFuc2Zvcm0ubWFwUmVjdChtYXNrQkJveCk7CisKKyAgICBJbnRT
aXplIG1hc2tTaXplKGxyb3VuZGYodGV4dEJvdW5kYXJ5LndpZHRoKCkpLCBscm91bmRmKHRleHRC
b3VuZGFyeS5oZWlnaHQoKSkpOworICAgIGNsYW1wSW1hZ2VCdWZmZXJTaXplVG9WaWV3cG9ydChv
YmplY3QtPmRvY3VtZW50KCktPnJlbmRlcmVyKCksIG1hc2tTaXplKTsKKyAgICB0ZXh0Qm91bmRh
cnkuc2V0U2l6ZSh0ZXh0Qm91bmRhcnkuc2l6ZSgpLnNocnVua1RvKG1hc2tTaXplKSk7CisKKyAg
ICAvLyBDbGlwIGN1cnJlbnQgY29udGV4dCB0byBtYXNrIGltYWdlIChncmFkaWVudCkKKyAgICBj
b250ZXh0LT5jb25jYXRDVE0odHJhbnNmb3JtLmludmVyc2UoKSk7CisgICAgY29udGV4dC0+Y2xp
cFRvSW1hZ2VCdWZmZXIodGV4dEJvdW5kYXJ5LCBpbWFnZUJ1ZmZlci5nZXQoKSk7CisgICAgY29u
dGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7CisKKyAgICBpZiAoZ3JhZGllbnRTZXJ2ZXItPmJv
dW5kaW5nQm94TW9kZSgpKSB7CisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShtYXNrQkJveC54
KCksIG1hc2tCQm94LnkoKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShtYXNr
QkJveC53aWR0aCgpLCBtYXNrQkJveC5oZWlnaHQoKSkpOworICAgIH0KKyAgICBjb250ZXh0LT5j
b25jYXRDVE0oZ3JhZGllbnRTZXJ2ZXItPmdyYWRpZW50VHJhbnNmb3JtKCkpOworfQorI2VuZGlm
CisKK2Jvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYg
Y29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0
eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAoreworICAgIG1fb3duZXJFbGVtZW50LT5i
dWlsZEdyYWRpZW50KCk7CisgICAgQVNTRVJUKCFtX2dyYWRpZW50KTsKKworICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBi
b29sIGlzRmlsbGVkID0gKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN0eWxlLT5o
YXNGaWxsKCk7CisgICAgYm9vbCBpc1N0cm9rZWQgPSAodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJn
ZXRUeXBlKSAmJiBzdHlsZS0+aGFzU3Ryb2tlKCk7CisKKyAgICBBU1NFUlQoaXNGaWxsZWQgJiYg
IWlzU3Ryb2tlZCB8fCAhaXNGaWxsZWQgJiYgaXNTdHJva2VkKTsKKworICAgIGNvbnRleHQtPnNh
dmUoKTsKKworICAgIGlmIChpc1BhaW50aW5nVGV4dCkgeworI2lmIFBMQVRGT1JNKENHKQorICAg
ICAgICBpZiAoIWNyZWF0ZU1hc2tBbmRTd2FwQ29udGV4dEZvclRleHRHcmFkaWVudChjb250ZXh0
LCBtX3NhdmVkQ29udGV4dCwgbV9pbWFnZUJ1ZmZlciwgb2JqZWN0KSkgeworICAgICAgICAgICAg
Y29udGV4dC0+cmVzdG9yZSgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisjZW5kaWYKKyAgICAgICAgY29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKGlzRmlsbGVkID8g
Y1RleHRGaWxsIDogY1RleHRTdHJva2UpOworICAgIH0KKworICAgIGlmIChpc0ZpbGxlZCkgewor
ICAgICAgICBjb250ZXh0LT5zZXRBbHBoYShzdHlsZS0+ZmlsbE9wYWNpdHkoKSk7CisgICAgICAg
IGNvbnRleHQtPnNldEZpbGxHcmFkaWVudChtX2dyYWRpZW50KTsKKyAgICAgICAgY29udGV4dC0+
c2V0RmlsbFJ1bGUoc3R5bGUtPmZpbGxSdWxlKCkpOworICAgIH0KKyAgICBpZiAoaXNTdHJva2Vk
KSB7CisgICAgICAgIGNvbnRleHQtPnNldEFscGhhKHN0eWxlLT5zdHJva2VPcGFjaXR5KCkpOwor
ICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VHcmFkaWVudChtX2dyYWRpZW50KTsKKyAgICAgICAg
YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBvYmplY3QtPnN0eWxlKCksIG9iamVj
dCk7CisgICAgfQorCisgICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpKSB7CisgICAgICAgIEZsb2F0
UmVjdCBiYm94ID0gb2JqZWN0LT5yZWxhdGl2ZUJCb3goZmFsc2UpOworICAgICAgICAvLyBEb24n
dCB1c2UgZ3JhZGllbnRlcyBmb3IgMWQgb2JqZWN0cyBsaWtlIGhvcml6b250YWwvdmVydGljYWwg
CisgICAgICAgIC8vIGxpbmVzIG9yIHJlY3RhbmdsZXMgd2l0aG91dCB3aWR0aCBvciBoZWlnaHQu
CisgICAgICAgIGlmIChiYm94LndpZHRoKCkgPT0gMCB8fCBiYm94LmhlaWdodCgpID09IDApIHsK
KyAgICAgICAgICAgIENvbG9yIGNvbG9yKDAsIDAsIDApOworICAgICAgICAgICAgY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3IoY29sb3IpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKGJib3gueCgpLCBiYm94LnkoKSk7CisgICAg
ICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShiYm94LndpZHRoKCksIGJib3guaGVpZ2h0KCkp
KTsKKworICAgICAgICAvLyBXaXRoIHNjYWxpbmcgdGhlIGNvbnRleHQsIHRoZSBzdHJva2VUaGlj
a25lc3MgaXMgc2NhbGVkIHRvby4gV2UgaGF2ZSB0bworICAgICAgICAvLyB1bmRvIHRoaXMuCisg
ICAgICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQtPnN0cm9rZVRoaWNrbmVzcygp
IC8gKChiYm94LndpZHRoKCkgKyBiYm94LmhlaWdodCgpKSAvIDIpOworICAgICAgICBjb250ZXh0
LT5zZXRTdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICB9CisgICAgY29udGV4
dC0+Y29uY2F0Q1RNKGdyYWRpZW50VHJhbnNmb3JtKCkpOworICAgIGNvbnRleHQtPnNldFNwcmVh
ZE1ldGhvZChzcHJlYWRNZXRob2QoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBT
VkdQYWludFNlcnZlckdyYWRpZW50OjpyZW5kZXJQYXRoKEdyYXBoaWNzQ29udGV4dComIGNvbnRl
eHQsIGNvbnN0IFJlbmRlck9iamVjdCogcGF0aCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNv
bnN0Cit7CisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlID0gcGF0aC0+c3R5bGUoKS0+
c3ZnU3R5bGUoKTsKKworICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYg
c3R5bGUtPmhhc0ZpbGwoKSkKKyAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKTsKKworICAgIGlm
ICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFzU3Ryb2tlKCkp
CisgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKTsKK30KKwordm9pZCBTVkdQYWludFNlcnZl
ckdyYWRpZW50Ojp0ZWFyZG93bihHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5k
ZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUsIGJvb2wgaXNQYWludGlu
Z1RleHQpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oQ0cpCisgICAgLy8gcmVuZGVyUGF0aCgpIGlz
IG5vdCB1c2VkIHdoZW4gcGFpbnRpbmcgdGV4dCwgc28gd2UgcGFpbnQgdGhlIGdyYWRpZW50IGR1
cmluZyB0ZWFyZG93bigpCisgICAgaWYgKGlzUGFpbnRpbmdUZXh0ICYmIG1fc2F2ZWRDb250ZXh0
KSB7CisgICAgICAgIC8vIFJlc3RvcmUgb24tc2NyZWVuIGRyYXdpbmcgY29udGV4dAorICAgICAg
ICBjb250ZXh0ID0gbV9zYXZlZENvbnRleHQ7CisgICAgICAgIG1fc2F2ZWRDb250ZXh0ID0gMDsK
KworICAgICAgICBjbGlwVG9UZXh0TWFzayhjb250ZXh0LCBtX2ltYWdlQnVmZmVyLCBvYmplY3Qs
IHRoaXMpOworCisgICAgICAgIC8vIGZpbmFsbHkgZmlsbCB0aGUgdGV4dCBjbGlwIHdpdGggdGhl
IHNoYWRpbmcKKyAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCksIG1fZ3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgCisgICAgICAgIG1f
aW1hZ2VCdWZmZXIuY2xlYXIoKTsgLy8gd2UncmUgZG9uZSB3aXRoIG91ciB0ZXh0IG1hc2sgYnVm
ZmVyCisgICAgfQorI2VuZGlmCisgICAgY29udGV4dC0+cmVzdG9yZSgpOworfQorCiBUZXh0U3Ry
ZWFtJiBTVkdQYWludFNlcnZlckdyYWRpZW50OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzKSBjb25zdAogewogICAgIC8vIEdyYWRpZW50cy9wYXR0ZXJucyBhcmVuJ3Qgc2V0
dXAsIHVudGlsIHRoZXkgYXJlIHVzZWQgZm9yIHBhaW50aW5nLiBXb3JrIGFyb3VuZCB0aGF0IGZh
Y3QuCiAgICAgbV9vd25lckVsZW1lbnQtPmJ1aWxkR3JhZGllbnQoKTsKIAogICAgIC8vIGFic3Ry
YWN0LCBkb24ndCBzdHJlYW0gdHlwZQotICAgIHRzICA8PCAiW3N0b3BzPSIgPDwgZ3JhZGllbnRT
dG9wcygpIDw8ICJdIjsKICAgICBpZiAoc3ByZWFkTWV0aG9kKCkgIT0gU3ByZWFkTWV0aG9kUGFk
KQogICAgICAgICB0cyA8PCAiW21ldGhvZD0iIDw8IHNwcmVhZE1ldGhvZCgpIDw8ICJdIjsKICAg
ICBpZiAoIWJvdW5kaW5nQm94TW9kZSgpKQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR1BhaW50U2VydmVyR3JhZGllbnQuaAkocmV2aXNpb24gMzgzNjQpCisrKyBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICogICAgICAgICAgICAgICAyMDA4IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDM2
ICszMSwyNiBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ29s
b3IuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyLmgiCiAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1
ZGUgPHFnbG9iYWwuaD4KLVFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUUdyYWRpZW50OwotUVRf
RU5EX05BTUVTUEFDRQotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNz
IEltYWdlQnVmZmVyOwogICAgIGNsYXNzIFNWR0dyYWRpZW50RWxlbWVudDsKIAotI2lmIFBMQVRG
T1JNKENHKQotICAgIHR5cGVkZWYgc3RkOjpwYWlyPENHRmxvYXQsIENvbG9yPiBTVkdHcmFkaWVu
dFN0b3A7Ci0jZWxzZQogICAgIHR5cGVkZWYgc3RkOjpwYWlyPGZsb2F0LCBDb2xvcj4gU1ZHR3Jh
ZGllbnRTdG9wOwotI2VuZGlmCiAKICAgICBjbGFzcyBTVkdQYWludFNlcnZlckdyYWRpZW50IDog
cHVibGljIFNWR1BhaW50U2VydmVyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgflNW
R1BhaW50U2VydmVyR3JhZGllbnQoKTsKIAotICAgICAgICBjb25zdCBWZWN0b3I8U1ZHR3JhZGll
bnRTdG9wPiYgZ3JhZGllbnRTdG9wcygpIGNvbnN0OwotICAgICAgICB2b2lkIHNldEdyYWRpZW50
U3RvcHMoY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mKTsKKyAgICAgICAgdm9pZCBzZXRH
cmFkaWVudChQYXNzUmVmUHRyPEdyYWRpZW50Pik7CisgICAgICAgIEdyYWRpZW50KiBncmFkaWVu
dCgpIGNvbnN0OwogCiAgICAgICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCgp
IGNvbnN0OwogICAgICAgICB2b2lkIHNldEdyYWRpZW50U3ByZWFkTWV0aG9kKGNvbnN0IEdyYWRp
ZW50U3ByZWFkTWV0aG9kJik7CkBAIC03NiwyOSArNjcsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzZXR1cChHcmFwaGljc0Nv
bnRleHQqJiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlLCBib29sIGlz
UGFpbnRpbmdUZXh0KSBjb25zdDsKLSNpZiBQTEFURk9STShDRykKICAgICAgICAgdmlydHVhbCB2
b2lkIHRlYXJkb3duKEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQ
YWludFRhcmdldFR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0OwogICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgUmVuZGVyT2JqZWN0
KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgaW52
YWxpZGF0ZSgpOwotCi0gICAgICAgIC8vIEhlbHBlcnMKLSAgICAgICAgdm9pZCB1cGRhdGVRdWFy
dHpHcmFkaWVudFN0b3BzQ2FjaGUoY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mKTsKLSAg
ICAgICAgdm9pZCB1cGRhdGVRdWFydHpHcmFkaWVudENhY2hlKGNvbnN0IFNWR1BhaW50U2VydmVy
R3JhZGllbnQqKTsKLSAgICAgICAgdm9pZCBoYW5kbGVCb3VuZGluZ0JveE1vZGVBbmRHcmFkaWVu
dFRyYW5zZm9ybWF0aW9uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
UmVjdCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFFUKQotICAgIHByb3RlY3RlZDoK
LSAgICAgICAgdm9pZCBmaWxsQ29sb3JBcnJheShRR3JhZGllbnQmLCBjb25zdCBWZWN0b3I8U1ZH
R3JhZGllbnRTdG9wPiYsIGZsb2F0IG9wYWNpdHkpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFFH
cmFkaWVudCBzZXR1cEdyYWRpZW50KEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBSZW5kZXJPYmpl
Y3QqKSBjb25zdCA9IDA7Ci0jZW5kaWYKLQogICAgIHByb3RlY3RlZDoKICAgICAgICAgU1ZHUGFp
bnRTZXJ2ZXJHcmFkaWVudChjb25zdCBTVkdHcmFkaWVudEVsZW1lbnQqIG93bmVyKTsKICAgICAg
ICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4gbV9zdG9w
czsKKyAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBtX2dyYWRpZW50OwogICAgICAgICBHcmFkaWVu
dFNwcmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZDsKICAgICAgICAgYm9vbCBtX2JvdW5kaW5nQm94
TW9kZTsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1fZ3JhZGllbnRUcmFuc2Zvcm07CkBAIC0x
MDYsMjcgKzgyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oQ0cpCiAg
ICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgICAgICAgICBDR0Zsb2F0
IGNvbG9yQXJyYXlbNF07Ci0gICAgICAgICAgICBDR0Zsb2F0IG9mZnNldDsKLSAgICAgICAgICAg
IENHRmxvYXQgcHJldmlvdXNEZWx0YUludmVyc2U7Ci0gICAgICAgIH0gUXVhcnR6R3JhZGllbnRT
dG9wOwotICAgICAgICAKLSAgICAgICAgc3RydWN0IFNoYXJlZFN0b3BDYWNoZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPFNoYXJlZFN0b3BDYWNoZT4gewotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRTdG9wQ2FjaGU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTaGFyZWRTdG9wQ2FjaGUpOyB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IFZlY3RvcjxRdWFydHpHcmFkaWVudFN0b3A+IG1fc3RvcHM7Ci0gICAgICAgIAotICAgICAgICBw
cml2YXRlOgotICAgICAgICAgICAgU2hhcmVkU3RvcENhY2hlKCkgeyB9Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgUmVmUHRyPFNoYXJlZFN0b3BDYWNoZT4gbV9zdG9wc0NhY2hlOwotCi0gICAgICAg
IENHU2hhZGluZ1JlZiBtX3NoYWRpbmdDYWNoZTsKICAgICAgICAgbXV0YWJsZSBHcmFwaGljc0Nv
bnRleHQqIG1fc2F2ZWRDb250ZXh0OwotICAgICAgICBtdXRhYmxlIEltYWdlQnVmZmVyKiBtX2lt
YWdlQnVmZmVyOworICAgICAgICBtdXRhYmxlIE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1
ZmZlcjsKICNlbmRpZgogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJv
L1NWR1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcAkocmV2aXNp
b24gMzgzNjQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlckdy
YWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2MCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDggRGlyayBTY2h1bHplIDx2YnM4NUBnbXguZGU+Ci0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5o
IgotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQuaCIKLSNpbmNsdWRlICJT
VkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJQYXRoLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJTVkdHcmFkaWVudEVsZW1lbnQu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6
OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QK
LXsKLSAgICBtX293bmVyRWxlbWVudC0+YnVpbGRHcmFkaWVudCgpOwotCi0gICAgY2Fpcm9fdCog
Y3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBjYWlyb19wYXR0ZXJuX3QqIHBh
dHRlcm47Ci0KLSAgICBjYWlyb19tYXRyaXhfdCBtYXRyaXg7Ci0gICAgY2Fpcm9fbWF0cml4X2lu
aXRfaWRlbnRpdHkgKCZtYXRyaXgpOwotICAgIGNvbnN0IGNhaXJvX21hdHJpeF90IGdyYWRpZW50
X21hdHJpeCA9IGdyYWRpZW50VHJhbnNmb3JtKCk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHls
ZSogc3ZnU3R5bGUgPSBvYmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwotCi0gICAgaWYgKHRoaXMtPnR5cGUoKSA9PSBM
aW5lYXJHcmFkaWVudFBhaW50U2VydmVyKSB7Ci0gICAgICAgIGNvbnN0IFNWR1BhaW50U2VydmVy
TGluZWFyR3JhZGllbnQqIGxpbmVhciA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR1BhaW50U2VydmVy
TGluZWFyR3JhZGllbnQqPih0aGlzKTsKLQotICAgICAgICBpZiAoYm91bmRpbmdCb3hNb2RlKCkp
IHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBiYm94ID0gb2JqZWN0LT5yZWxhdGl2ZUJCb3goZmFs
c2UpOwotICAgICAgICAgICAgaWYgKGJib3gud2lkdGgoKSA9PSAwIHx8IGJib3guaGVpZ2h0KCkg
PT0gMCkgewotICAgICAgICAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4
dCwgc3R5bGUsIG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2Io
Y3IsIDAsIDAsIDApOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgY2Fpcm9fbWF0cml4X3RyYW5zbGF0ZSgmbWF0cml4LCBiYm94LngoKSwg
YmJveC55KCkpOwotICAgICAgICAgICAgY2Fpcm9fbWF0cml4X3NjYWxlKCZtYXRyaXgsIGJib3gu
d2lkdGgoKSwgYmJveC5oZWlnaHQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBkb3VibGUgeDAg
PSBsaW5lYXItPmdyYWRpZW50U3RhcnQoKS54KCk7Ci0gICAgICAgIGRvdWJsZSB5MCA9IGxpbmVh
ci0+Z3JhZGllbnRTdGFydCgpLnkoKTsKLSAgICAgICAgZG91YmxlIHgxID0gbGluZWFyLT5ncmFk
aWVudEVuZCgpLngoKTsKLSAgICAgICAgZG91YmxlIHkxID0gbGluZWFyLT5ncmFkaWVudEVuZCgp
LnkoKTsKLQotICAgICAgICBwYXR0ZXJuID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyKHgw
LCB5MCwgeDEsIHkxKTsKLQotICAgIH0gZWxzZSBpZiAodGhpcy0+dHlwZSgpID09IFJhZGlhbEdy
YWRpZW50UGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgY29uc3QgU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxH
cmFkaWVudCogcmFkaWFsID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxH
cmFkaWVudCo+KHRoaXMpOwotCi0gICAgICAgIGlmIChib3VuZGluZ0JveE1vZGUoKSkgewotICAg
ICAgICAgICAgRmxvYXRSZWN0IGJib3ggPSBvYmplY3QtPnJlbGF0aXZlQkJveChmYWxzZSk7Ci0g
ICAgICAgICAgICBpZiAoYmJveC53aWR0aCgpID09IDAgfHwgYmJveC5oZWlnaHQoKSA9PSAwKSB7
Ci0gICAgICAgICAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHls
ZSwgb2JqZWN0KTsKLSAgICAgICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjciwgMCwg
MCwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjYWlyb19tYXRyaXhfdHJhbnNsYXRlKCZtYXRyaXgsIGJib3gueCgpLCBiYm94Lnko
KSk7Ci0gICAgICAgICAgICBjYWlyb19tYXRyaXhfc2NhbGUoJm1hdHJpeCwgYmJveC53aWR0aCgp
LCBiYm94LmhlaWdodCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRvdWJsZSBjeCA9IHJhZGlh
bC0+Z3JhZGllbnRDZW50ZXIoKS54KCk7Ci0gICAgICAgIGRvdWJsZSBjeSA9IHJhZGlhbC0+Z3Jh
ZGllbnRDZW50ZXIoKS55KCk7Ci0gICAgICAgIGRvdWJsZSByYWRpdXMgPSByYWRpYWwtPmdyYWRp
ZW50UmFkaXVzKCk7Ci0gICAgICAgIGRvdWJsZSBmeCA9IHJhZGlhbC0+Z3JhZGllbnRGb2NhbCgp
LngoKTsKLSAgICAgICAgZG91YmxlIGZ5ID0gcmFkaWFsLT5ncmFkaWVudEZvY2FsKCkueSgpOwot
Ci0gICAgICAgIGZ4IC09IGN4OwotICAgICAgICBmeSAtPSBjeTsKLQotICAgICAgICBkb3VibGUg
ZnJhZGl1cyA9IDAuMDsKLQotICAgICAgICBpZiAoc3FydChmeCAqIGZ4ICsgZnkgKiBmeSkgPj0g
cmFkaXVzKSB7Ci0gICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBhdGFuMihmeSwgZngpOwotICAg
ICAgICAgICAgaWYgKChmeCArIGN4KSA8IGN4KQotICAgICAgICAgICAgICAgIGZ4ID0gY29zKGFu
Z2xlKSAqIHJhZGl1cyArIDAuMDAyOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGZ4ID0gY29zKGFuZ2xlKSAqIHJhZGl1cyAtIDAuMDAyOwotICAgICAgICAgICAgaWYgKChmeSAr
IGN5KSA8IGN5KQotICAgICAgICAgICAgICAgIGZ5ID0gc2luKGFuZ2xlKSAqIHJhZGl1cyArIDAu
MDAyOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZ5ID0gc2luKGFuZ2xlKSAq
IHJhZGl1cyAtIDAuMDAyOwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0dGVybiA9IGNhaXJvX3Bh
dHRlcm5fY3JlYXRlX3JhZGlhbChmeCArIGN4LCBmeSArIGN5LCBmcmFkaXVzLCBjeCwgY3ksIHJh
ZGl1cyk7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgY2Fpcm9fcGF0dGVybl9zZXRfZmlsdGVyKHBhdHRlcm4sIENBSVJPX0ZJTFRFUl9CSUxJTkVB
Uik7Ci0KLSAgICBzd2l0Y2ggKHNwcmVhZE1ldGhvZCgpKSB7Ci0gICAgICAgIGNhc2UgU3ByZWFk
TWV0aG9kUGFkOgotICAgICAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4s
IENBSVJPX0VYVEVORF9QQUQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3By
ZWFkTWV0aG9kUmVmbGVjdDoKLSAgICAgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChw
YXR0ZXJuLCBDQUlST19FWFRFTkRfUkVGTEVDVCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBTcHJlYWRNZXRob2RSZXBlYXQ6Ci0gICAgICAgICAgICBjYWlyb19wYXR0ZXJuX3Nl
dF9leHRlbmQocGF0dGVybiwgQ0FJUk9fRVhURU5EX1JFUEVBVCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVu
ZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfTk9ORSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjYWlyb19tYXRyaXhfbXVsdGlwbHkoJm1hdHJpeCwgJm1hdHJpeCwgJmdyYWRpZW50
X21hdHJpeCk7Ci0gICAgY2Fpcm9fbWF0cml4X2ludmVydCgmbWF0cml4KTsKLSAgICBjYWlyb19w
YXR0ZXJuX3NldF9tYXRyaXgocGF0dGVybiwgJm1hdHJpeCk7Ci0KLSAgICBjb25zdCBWZWN0b3I8
U1ZHR3JhZGllbnRTdG9wPiYgc3RvcHMgPSBncmFkaWVudFN0b3BzKCk7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3RvcHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZmxvYXQgb2Zm
c2V0ID0gc3RvcHNbaV0uZmlyc3Q7Ci0gICAgICAgIENvbG9yIGNvbG9yID0gc3RvcHNbaV0uc2Vj
b25kOwotICAgICAgICBpZiAoaSA+IDAgJiYgb2Zmc2V0IDwgc3RvcHNbaSAtIDFdLmZpcnN0KQot
ICAgICAgICAgICAgb2Zmc2V0ID0gc3RvcHNbaSAtIDFdLmZpcnN0OwotCi0gICAgICAgIGNhaXJv
X3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShwYXR0ZXJuLCBvZmZzZXQsIGNvbG9yLnJlZCgp
IC8gMjU1LjAsIGNvbG9yLmdyZWVuKCkgLyAyNTUuMCwgY29sb3IuYmx1ZSgpIC8gMjU1LjAsIGNv
bG9yLmFscGhhKCkgLyAyNTUuMCk7Ci0gICAgfQotCi0gICAgaWYgKCh0eXBlICYgQXBwbHlUb0Zp
bGxUYXJnZXRUeXBlKSAmJiBzdmdTdHlsZS0+aGFzRmlsbCgpKQotICAgICAgICBjb250ZXh0LT5z
ZXRGaWxsUnVsZShzdmdTdHlsZS0+ZmlsbFJ1bGUoKSk7Ci0KLSAgICBpZiAoKHR5cGUgJiBBcHBs
eVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3ZnU3R5bGUtPmhhc1N0cm9rZSgpKQotICAgICAgICBh
cHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3QpOwotCi0gICAg
Y2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7Ci0gICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95
KHBhdHRlcm4pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZl
ckNnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNl
cnZlckNnLmNwcAkocmV2aXNpb24gMzgzNjQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9T
VkdQYWludFNlcnZlckNnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTIgKzYwLDYgQEAgdm9p
ZCBTVkdQYWludFNlcnZlcjo6c3Ryb2tlUGF0aChDR0NvbnRleAogICAgIENHQ29udGV4dFN0cm9r
ZVBhdGgoY29udGV4dCk7CiB9CiAKLXZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OmNsaXBUb1N0cm9rZVBh
dGgoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0Ci17Ci0g
ICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7Ci0gICAgQ0dD
b250ZXh0Q2xpcChjb250ZXh0KTsKLX0KLQogdm9pZCBTVkdQYWludFNlcnZlcjo6ZmlsbFBhdGgo
Q0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcGF0aCkgY29uc3QKIHsK
ICAgICBpZiAoIXBhdGggfHwgcGF0aC0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSA9
PSBSVUxFX0VWRU5PREQpCkBAIC03NCwxNCArNjgsNiBAQCB2b2lkIFNWR1BhaW50U2VydmVyOjpm
aWxsUGF0aChDR0NvbnRleHRSCiAgICAgICAgIENHQ29udGV4dEZpbGxQYXRoKGNvbnRleHQpOwog
fQogCi12b2lkIFNWR1BhaW50U2VydmVyOjpjbGlwVG9GaWxsUGF0aChDR0NvbnRleHRSZWYgY29u
dGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXRoKSBjb25zdAotewotICAgIGlmICghcGF0aCB8
fCBwYXRoLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCkK
LSAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwotICAgIGVsc2UKLSAgICAgICAgQ0dD
b250ZXh0Q2xpcChjb250ZXh0KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyR3JhZGllbnRD
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2
ZXJHcmFkaWVudENnLmNwcAkocmV2aXNpb24gMzgzNjQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9jZy9TVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMz
NiArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBLREUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxF
KFNWRykKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlckdyYWRpZW50LmgiCi0KLSNpbmNsdWRlICJG
bG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlNW
R0dyYWRpZW50RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyTGluZWFyR3JhZGll
bnQuaCIKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmgiCi0jaW5jbHVk
ZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgotCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgdm9p
ZCByZWxlYXNlQ2FjaGVkU3RvcHModm9pZCogaW5mbykKLXsKLSAgICBzdGF0aWNfY2FzdDxTVkdQ
YWludFNlcnZlckdyYWRpZW50OjpTaGFyZWRTdG9wQ2FjaGUqPihpbmZvKS0+ZGVyZWYoKTsKLX0K
LQotc3RhdGljIHZvaWQgY2dHcmFkaWVudENhbGxiYWNrKHZvaWQqIGluZm8sIGNvbnN0IENHRmxv
YXQqIGluVmFsdWVzLCBDR0Zsb2F0KiBvdXRDb2xvcikKLXsKLSAgICBTVkdQYWludFNlcnZlckdy
YWRpZW50OjpTaGFyZWRTdG9wQ2FjaGUqIHN0b3BzQ2FjaGUgPSBzdGF0aWNfY2FzdDxTVkdQYWlu
dFNlcnZlckdyYWRpZW50OjpTaGFyZWRTdG9wQ2FjaGUqPihpbmZvKTsKLSAgICAKLSAgICBTVkdQ
YWludFNlcnZlckdyYWRpZW50OjpRdWFydHpHcmFkaWVudFN0b3AqIHN0b3BzID0gc3RvcHNDYWNo
ZS0+bV9zdG9wcy5kYXRhKCk7Ci0gICAgICAgIAotICAgIGludCBzdG9wc0NvdW50ID0gc3RvcHND
YWNoZS0+bV9zdG9wcy5zaXplKCk7Ci0KLSAgICBDR0Zsb2F0IGluVmFsdWUgPSBpblZhbHVlc1sw
XTsKLQotICAgIGlmICghc3RvcHNDb3VudCkgewotICAgICAgICBvdXRDb2xvclswXSA9IDA7Ci0g
ICAgICAgIG91dENvbG9yWzFdID0gMDsKLSAgICAgICAgb3V0Q29sb3JbMl0gPSAwOwotICAgICAg
ICBvdXRDb2xvclszXSA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKHN0b3Bz
Q291bnQgPT0gMSkgewotICAgICAgICBtZW1jcHkob3V0Q29sb3IsIHN0b3BzWzBdLmNvbG9yQXJy
YXksIDQgKiBzaXplb2YoQ0dGbG9hdCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKCEoaW5WYWx1ZSA+IHN0b3BzWzBdLm9mZnNldCkpCi0gICAgICAgIG1lbWNweShvdXRDb2xv
ciwgc3RvcHNbMF0uY29sb3JBcnJheSwgNCAqIHNpemVvZihDR0Zsb2F0KSk7Ci0gICAgZWxzZSBp
ZiAoIShpblZhbHVlIDwgc3RvcHNbc3RvcHNDb3VudCAtIDFdLm9mZnNldCkpCi0gICAgICAgIG1l
bWNweShvdXRDb2xvciwgc3RvcHNbc3RvcHNDb3VudCAtIDFdLmNvbG9yQXJyYXksIDQgKiBzaXpl
b2YoQ0dGbG9hdCkpOwotICAgIGVsc2UgewotICAgICAgICBpbnQgbmV4dFN0b3BJbmRleCA9IDA7
Ci0gICAgICAgIHdoaWxlICgobmV4dFN0b3BJbmRleCA8IHN0b3BzQ291bnQpICYmIChzdG9wc1tu
ZXh0U3RvcEluZGV4XS5vZmZzZXQgPCBpblZhbHVlKSkKLSAgICAgICAgICAgIG5leHRTdG9wSW5k
ZXgrKzsKLQotICAgICAgICBDR0Zsb2F0KiBuZXh0Q29sb3JBcnJheSA9IHN0b3BzW25leHRTdG9w
SW5kZXhdLmNvbG9yQXJyYXk7Ci0gICAgICAgIENHRmxvYXQqIHByZXZpb3VzQ29sb3JBcnJheSA9
IHN0b3BzW25leHRTdG9wSW5kZXggLSAxXS5jb2xvckFycmF5OwotICAgICAgICBDR0Zsb2F0IGRp
ZmZGcm9tUHJldmlvdXMgPSBpblZhbHVlIC0gc3RvcHNbbmV4dFN0b3BJbmRleCAtIDFdLm9mZnNl
dDsKLSAgICAgICAgQ0dGbG9hdCBwZXJjZW50ID0gZGlmZkZyb21QcmV2aW91cyAqIHN0b3BzW25l
eHRTdG9wSW5kZXhdLnByZXZpb3VzRGVsdGFJbnZlcnNlOwotCi0gICAgICAgIG91dENvbG9yWzBd
ID0gKCgxLjBmIC0gcGVyY2VudCkgKiBwcmV2aW91c0NvbG9yQXJyYXlbMF0gKyBwZXJjZW50ICog
bmV4dENvbG9yQXJyYXlbMF0pOwotICAgICAgICBvdXRDb2xvclsxXSA9ICgoMS4wZiAtIHBlcmNl
bnQpICogcHJldmlvdXNDb2xvckFycmF5WzFdICsgcGVyY2VudCAqIG5leHRDb2xvckFycmF5WzFd
KTsKLSAgICAgICAgb3V0Q29sb3JbMl0gPSAoKDEuMGYgLSBwZXJjZW50KSAqIHByZXZpb3VzQ29s
b3JBcnJheVsyXSArIHBlcmNlbnQgKiBuZXh0Q29sb3JBcnJheVsyXSk7Ci0gICAgICAgIG91dENv
bG9yWzNdID0gKCgxLjBmIC0gcGVyY2VudCkgKiBwcmV2aW91c0NvbG9yQXJyYXlbM10gKyBwZXJj
ZW50ICogbmV4dENvbG9yQXJyYXlbM10pOwotICAgIH0KLSAgICAvLyBGSVhNRTogaGF2ZSB0byBo
YW5kbGUgdGhlIHNwcmVhZE1ldGhvZCgpcyBoZXJlIFNQUkVBRE1FVEhPRF9SRVBFQVQsIGV0Yy4K
LX0KLQotc3RhdGljIENHU2hhZGluZ1JlZiBDR1NoYWRpbmdSZWZGb3JMaW5lYXJHcmFkaWVudChj
b25zdCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50KiBzZXJ2ZXIpCi17Ci0gICAgQ0dQb2lu
dCBzdGFydCA9IENHUG9pbnQoc2VydmVyLT5ncmFkaWVudFN0YXJ0KCkpOwotICAgIENHUG9pbnQg
ZW5kID0gQ0dQb2ludChzZXJ2ZXItPmdyYWRpZW50RW5kKCkpOwotCi0gICAgQ0dGdW5jdGlvbkNh
bGxiYWNrcyBjYWxsYmFja3MgPSB7MCwgY2dHcmFkaWVudENhbGxiYWNrLCByZWxlYXNlQ2FjaGVk
U3RvcHN9OwotICAgIENHRmxvYXQgZG9tYWluTGltaXRzWzJdID0gezAsIDF9OwotICAgIENHRmxv
YXQgcmFuZ2VMaW1pdHNbOF0gPSB7MCwgMSwgMCwgMSwgMCwgMSwgMCwgMX07Ci0gICAgc2VydmVy
LT5tX3N0b3BzQ2FjaGUtPnJlZigpOwotICAgIENHRnVuY3Rpb25SZWYgc2hhZGluZ0Z1bmN0aW9u
ID0gQ0dGdW5jdGlvbkNyZWF0ZShzZXJ2ZXItPm1fc3RvcHNDYWNoZS5nZXQoKSwgMSwgZG9tYWlu
TGltaXRzLCA0LCByYW5nZUxpbWl0cywgJmNhbGxiYWNrcyk7Ci0KLSAgICBDR0NvbG9yU3BhY2VS
ZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwotICAgIENHU2hh
ZGluZ1JlZiBzaGFkaW5nID0gQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY29sb3JTcGFjZSwgc3RhcnQs
IGVuZCwgc2hhZGluZ0Z1bmN0aW9uLCB0cnVlLCB0cnVlKTsKLSAgICBDR0NvbG9yU3BhY2VSZWxl
YXNlKGNvbG9yU3BhY2UpOwotICAgIENHRnVuY3Rpb25SZWxlYXNlKHNoYWRpbmdGdW5jdGlvbik7
Ci0gICAgcmV0dXJuIHNoYWRpbmc7Ci19Ci0KLXN0YXRpYyBDR1NoYWRpbmdSZWYgQ0dTaGFkaW5n
UmVmRm9yUmFkaWFsR3JhZGllbnQoY29uc3QgU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCog
c2VydmVyKQotewotICAgIENHUG9pbnQgY2VudGVyID0gQ0dQb2ludChzZXJ2ZXItPmdyYWRpZW50
Q2VudGVyKCkpOwotICAgIENHUG9pbnQgZm9jdXMgPSBDR1BvaW50KHNlcnZlci0+Z3JhZGllbnRG
b2NhbCgpKTsKLSAgICBkb3VibGUgcmFkaXVzID0gc2VydmVyLT5ncmFkaWVudFJhZGl1cygpOwot
Ci0gICAgZG91YmxlIGZkeCA9IGZvY3VzLnggLSBjZW50ZXIueDsKLSAgICBkb3VibGUgZmR5ID0g
Zm9jdXMueSAtIGNlbnRlci55OwotCi0gICAgLy8gU3BlYzogSWYgKGZ4LCBmeSkgbGllcyBvdXRz
aWRlIHRoZSBjaXJjbGUgZGVmaW5lZCBieSAoY3gsIGN5KSBhbmQgciwgc2V0IChmeCwgZnkpCi0g
ICAgLy8gdG8gdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBvZiB0aGUgbGluZSB0aHJvdWdoIChm
eCwgZnkpIGFuZCB0aGUgY2lyY2xlLgotICAgIGlmIChzcXJ0KGZkeCAqIGZkeCArIGZkeSAqIGZk
eSkgPiByYWRpdXMpIHsgCi0gICAgICAgIGRvdWJsZSBhbmdsZSA9IGF0YW4yKGZvY3VzLnkgKiAx
MDAuMCwgZm9jdXMueCAqIDEwMC4wKTsKLSAgICAgICAgZm9jdXMueCA9IG5hcnJvd1ByZWNpc2lv
blRvQ0dGbG9hdChjb3MoYW5nbGUpICogcmFkaXVzKTsKLSAgICAgICAgZm9jdXMueSA9IG5hcnJv
d1ByZWNpc2lvblRvQ0dGbG9hdChzaW4oYW5nbGUpICogcmFkaXVzKTsKLSAgICB9Ci0KLSAgICBD
R0Z1bmN0aW9uQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHswLCBjZ0dyYWRpZW50Q2FsbGJhY2ssIHJl
bGVhc2VDYWNoZWRTdG9wc307Ci0gICAgQ0dGbG9hdCBkb21haW5MaW1pdHNbMl0gPSB7MCwgMX07
Ci0gICAgQ0dGbG9hdCByYW5nZUxpbWl0c1s4XSA9IHswLCAxLCAwLCAxLCAwLCAxLCAwLCAxfTsK
LSAgICBzZXJ2ZXItPm1fc3RvcHNDYWNoZS0+cmVmKCk7Ci0gICAgQ0dGdW5jdGlvblJlZiBzaGFk
aW5nRnVuY3Rpb24gPSBDR0Z1bmN0aW9uQ3JlYXRlKHNlcnZlci0+bV9zdG9wc0NhY2hlLmdldCgp
LCAxLCBkb21haW5MaW1pdHMsIDQsIHJhbmdlTGltaXRzLCAmY2FsbGJhY2tzKTsKLQotICAgIENH
Q29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7
Ci0gICAgQ0dTaGFkaW5nUmVmIHNoYWRpbmcgPSBDR1NoYWRpbmdDcmVhdGVSYWRpYWwoY29sb3JT
cGFjZSwgZm9jdXMsIDAsIGNlbnRlciwgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KHJhZGl1cyks
IHNoYWRpbmdGdW5jdGlvbiwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgQ0dDb2xvclNwYWNlUmVsZWFzZShj
b2xvclNwYWNlKTsKLSAgICBDR0Z1bmN0aW9uUmVsZWFzZShzaGFkaW5nRnVuY3Rpb24pOwotICAg
IHJldHVybiBzaGFkaW5nOwotfQotCi12b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnVwZGF0
ZVF1YXJ0ekdyYWRpZW50U3RvcHNDYWNoZShjb25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYg
c3RvcHMpCi17Ci0gICAgbV9zdG9wc0NhY2hlID0gU2hhcmVkU3RvcENhY2hlOjpjcmVhdGUoKTsK
LSAgICBWZWN0b3I8UXVhcnR6R3JhZGllbnRTdG9wPiYgc3RvcHNDYWNoZSA9IG1fc3RvcHNDYWNo
ZS0+bV9zdG9wczsKLSAgICBzdG9wc0NhY2hlLnJlc2l6ZShzdG9wcy5zaXplKCkpOwotICAgIENH
RmxvYXQgcHJldmlvdXNPZmZzZXQgPSAwLjBmOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdG9wcy5zaXplKCk7ICsraSkgewotICAgICAgICBDR0Zsb2F0IGN1cnJPZmZzZXQgPSBtaW4o
bWF4KHN0b3BzW2ldLmZpcnN0LCBwcmV2aW91c09mZnNldCksIHN0YXRpY19jYXN0PENHRmxvYXQ+
KDEuMCkpOwotICAgICAgICBzdG9wc0NhY2hlW2ldLm9mZnNldCA9IGN1cnJPZmZzZXQ7Ci0gICAg
ICAgIHN0b3BzQ2FjaGVbaV0ucHJldmlvdXNEZWx0YUludmVyc2UgPSAxLjBmIC8gKGN1cnJPZmZz
ZXQgLSBwcmV2aW91c09mZnNldCk7Ci0gICAgICAgIHByZXZpb3VzT2Zmc2V0ID0gY3Vyck9mZnNl
dDsKLSAgICAgICAgQ0dGbG9hdCogY2EgPSBzdG9wc0NhY2hlW2ldLmNvbG9yQXJyYXk7Ci0gICAg
ICAgIHN0b3BzW2ldLnNlY29uZC5nZXRSR0JBKGNhWzBdLCBjYVsxXSwgY2FbMl0sIGNhWzNdKTsK
LSAgICB9Ci19Ci0KLXZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6dXBkYXRlUXVhcnR6R3Jh
ZGllbnRDYWNoZShjb25zdCBTVkdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIpCi17Ci0gICAg
Ly8gY2FjaGUgb3VyIG93biBjb3B5IG9mIHRoZSBzdG9wcyBmb3IgZmFzdGVyIGFjY2Vzcy4KLSAg
ICAvLyB0aGlzIGlzIGxlZ2FjeSBjb2RlLCBwcm9iYWJseSBjb3VsZCBiZSByZXdvcmtlZC4KLSAg
ICBpZiAoIW1fc3RvcHNDYWNoZSkKLSAgICAgICAgdXBkYXRlUXVhcnR6R3JhZGllbnRTdG9wc0Nh
Y2hlKGdyYWRpZW50U3RvcHMoKSk7Ci0KLSAgICBDR1NoYWRpbmdSZWxlYXNlKG1fc2hhZGluZ0Nh
Y2hlKTsKLQotICAgIGlmICh0eXBlKCkgPT0gUmFkaWFsR3JhZGllbnRQYWludFNlcnZlcikgewot
ICAgICAgICBjb25zdCBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50KiByYWRpYWwgPSBzdGF0
aWNfY2FzdDxjb25zdCBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50Kj4oc2VydmVyKTsKLSAg
ICAgICAgbV9zaGFkaW5nQ2FjaGUgPSBDR1NoYWRpbmdSZWZGb3JSYWRpYWxHcmFkaWVudChyYWRp
YWwpOwotICAgIH0gZWxzZSBpZiAodHlwZSgpID09IExpbmVhckdyYWRpZW50UGFpbnRTZXJ2ZXIp
IHsKLSAgICAgICAgY29uc3QgU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCogbGluZWFyID0g
c3RhdGljX2Nhc3Q8Y29uc3QgU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCo+KHNlcnZlcik7
Ci0gICAgICAgIG1fc2hhZGluZ0NhY2hlID0gQ0dTaGFkaW5nUmVmRm9yTGluZWFyR3JhZGllbnQo
bGluZWFyKTsKLSAgICB9Ci19Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4dCBwYWludGlu
Zwotc3RhdGljIGlubGluZSBjb25zdCBSZW5kZXJPYmplY3QqIGZpbmRUZXh0Um9vdE9iamVjdChj
b25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0KQotewotICAgIHdoaWxlIChzdGFydCAmJiAhc3RhcnQt
PmlzU1ZHVGV4dCgpKQotICAgICAgICBzdGFydCA9IHN0YXJ0LT5wYXJlbnQoKTsKLQotICAgIEFT
U0VSVChzdGFydCk7Ci0gICAgQVNTRVJUKHN0YXJ0LT5pc1NWR1RleHQoKSk7Ci0KLSAgICByZXR1
cm4gc3RhcnQ7Ci19Ci0KLXZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6dGVhcmRvd24oR3Jh
cGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1Bh
aW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAotewotICAgIENH
U2hhZGluZ1JlZiBzaGFkaW5nID0gbV9zaGFkaW5nQ2FjaGU7Ci0gICAgQ0dDb250ZXh0UmVmIGNv
bnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBBU1NFUlQoY29udGV4
dFJlZik7Ci0KLSAgICAvLyBBcyByZW5kZXJQYXRoKCkgaXMgbm90IHVzZWQgd2hlbiBwYWludGlu
ZyB0ZXh0LCBzcGVjaWFsIGxvZ2ljIG5lZWRlZCBoZXJlLgotICAgIGlmIChpc1BhaW50aW5nVGV4
dCkgewotICAgICAgICBpZiAobV9zYXZlZENvbnRleHQpIHsKLSAgICAgICAgICAgIEZsb2F0UmVj
dCBtYXNrQkJveCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oZmluZFRleHRSb290T2JqZWN0
KG9iamVjdCkpLT5yZWxhdGl2ZUJCb3goZmFsc2UpOwotCi0gICAgICAgICAgICAvLyBGaXh1cCB0
cmFuc2Zvcm1hdGlvbnMgdG8gYmUgYWJsZSB0byBjbGlwIHRvIG1hc2sKLSAgICAgICAgICAgIEFm
ZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBvYmplY3QtPmFic29sdXRlVHJhbnNmb3JtKCk7Ci0g
ICAgICAgICAgICBGbG9hdFJlY3QgdGV4dEJvdW5kYXJ5ID0gdHJhbnNmb3JtLm1hcFJlY3QobWFz
a0JCb3gpOwotCi0gICAgICAgICAgICBJbnRTaXplIG1hc2tTaXplKGxyb3VuZGYodGV4dEJvdW5k
YXJ5LndpZHRoKCkpLCBscm91bmRmKHRleHRCb3VuZGFyeS5oZWlnaHQoKSkpOwotICAgICAgICAg
ICAgY2xhbXBJbWFnZUJ1ZmZlclNpemVUb1ZpZXdwb3J0KG9iamVjdC0+ZG9jdW1lbnQoKS0+cmVu
ZGVyZXIoKSwgbWFza1NpemUpOwotCi0gICAgICAgICAgICBpZiAobWFza1NpemUud2lkdGgoKSA8
IHN0YXRpY19jYXN0PGludD4odGV4dEJvdW5kYXJ5LndpZHRoKCkpKQotICAgICAgICAgICAgICAg
IHRleHRCb3VuZGFyeS5zZXRXaWR0aChtYXNrU2l6ZS53aWR0aCgpKTsKLQotICAgICAgICAgICAg
aWYgKG1hc2tTaXplLmhlaWdodCgpIDwgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0Qm91bmRhcnkuaGVp
Z2h0KCkpKQotICAgICAgICAgICAgICAgIHRleHRCb3VuZGFyeS5zZXRIZWlnaHQobWFza1NpemUu
aGVpZ2h0KCkpOwotCi0gICAgICAgICAgICAvLyBDbGlwIGN1cnJlbnQgY29udGV4dCB0byBtYXNr
IGltYWdlIChncmFkaWVudCkKLSAgICAgICAgICAgIG1fc2F2ZWRDb250ZXh0LT5jb25jYXRDVE0o
dHJhbnNmb3JtLmludmVyc2UoKSk7Ci0gICAgICAgICAgICBtX3NhdmVkQ29udGV4dC0+Y2xpcFRv
SW1hZ2VCdWZmZXIodGV4dEJvdW5kYXJ5LCBtX2ltYWdlQnVmZmVyKTsKLSAgICAgICAgICAgIG1f
c2F2ZWRDb250ZXh0LT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLQotICAgICAgICAgICAgaGFuZGxl
Qm91bmRpbmdCb3hNb2RlQW5kR3JhZGllbnRUcmFuc2Zvcm1hdGlvbihtX3NhdmVkQ29udGV4dCwg
bWFza0JCb3gpOwotCi0gICAgICAgICAgICAvLyBSZXN0b3JlIG9uLXNjcmVlbiBkcmF3aW5nIGNv
bnRleHQsIGFmdGVyIHdlIGdvdCB0aGUgaW1hZ2Ugb2YgdGhlIGdyYWRpZW50Ci0gICAgICAgICAg
ICBkZWxldGUgbV9pbWFnZUJ1ZmZlcjsKLQotICAgICAgICAgICAgY29udGV4dCA9IG1fc2F2ZWRD
b250ZXh0OwotICAgICAgICAgICAgY29udGV4dFJlZiA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpOwotCi0gICAgICAgICAgICBtX3NhdmVkQ29udGV4dCA9IDA7Ci0gICAgICAgICAgICBtX2lt
YWdlQnVmZmVyID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIENHQ29udGV4dERyYXdTaGFk
aW5nKGNvbnRleHRSZWYsIHNoYWRpbmcpOwotICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLX0KLQot
dm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpyZW5kZXJQYXRoKEdyYXBoaWNzQ29udGV4dCom
IGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcGF0aCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5
cGUpIGNvbnN0Ci17Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcGF0aC0+c3R5bGUoKTsKLSAg
ICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwot
ICAgIEFTU0VSVChjb250ZXh0UmVmKTsKLSAgICAKLSAgICBib29sIGlzRmlsbGVkID0gKHR5cGUg
JiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCk7
Ci0KLSAgICAvLyBDb21wdXRlIGRlc3RpbmF0aW9uIG9iamVjdCBib3VuZGluZyBib3gKLSAgICBG
bG9hdFJlY3Qgb2JqZWN0QkJveDsKLSAgICBpZiAoYm91bmRpbmdCb3hNb2RlKCkpIHsKLSAgICAg
ICAgRmxvYXRSZWN0IGJib3ggPSBwYXRoLT5yZWxhdGl2ZUJCb3goZmFsc2UpOwotICAgICAgICBp
ZiAoYmJveC53aWR0aCgpID4gMCAmJiBiYm94LmhlaWdodCgpID4gMCkKLSAgICAgICAgICAgIG9i
amVjdEJCb3ggPSBiYm94OwotICAgIH0KLQotICAgIGlmIChpc0ZpbGxlZCkKLSAgICAgICAgY2xp
cFRvRmlsbFBhdGgoY29udGV4dFJlZiwgcGF0aCk7Ci0gICAgZWxzZQotICAgICAgICBjbGlwVG9T
dHJva2VQYXRoKGNvbnRleHRSZWYsIHBhdGgpOwotCi0gICAgaGFuZGxlQm91bmRpbmdCb3hNb2Rl
QW5kR3JhZGllbnRUcmFuc2Zvcm1hdGlvbihjb250ZXh0LCBvYmplY3RCQm94KTsKLX0KLQotdm9p
ZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpoYW5kbGVCb3VuZGluZ0JveE1vZGVBbmRHcmFkaWVu
dFRyYW5zZm9ybWF0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiB0YXJnZXRSZWN0KSBjb25zdAotewotICAgIGlmIChib3VuZGluZ0JveE1vZGUoKSkgewotICAg
ICAgICAvLyBDaG9vc2UgZGVmYXVsdCBncmFkaWVudCBib3VuZGluZyBib3gKLSAgICAgICAgRmxv
YXRSZWN0IGdyYWRpZW50QkJveCgwLjBmLCAwLjBmLCAxLjBmLCAxLjBmKTsKLQotICAgICAgICAv
LyBHZW5lcmF0ZSBhIHRyYW5zZm9ybSB0byBtYXAgYmV0d2VlbiBib3RoIGJvdW5kaW5nIGJveGVz
Ci0gICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShtYWtlTWFwQmV0d2VlblJlY3RzKGdyYWRpZW50
QkJveCwgdGFyZ2V0UmVjdCkpOwotICAgIH0KLQotICAgIC8vIEFwcGx5IHRoZSBncmFkaWVudCdz
IG93biB0cmFuc2Zvcm0KLSAgICBjb250ZXh0LT5jb25jYXRDVE0oZ3JhZGllbnRUcmFuc2Zvcm0o
KSk7Ci19Ci0KLWJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGhpY3NDb250
ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0
VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAotewotICAgIG1fb3duZXJFbGVt
ZW50LT5idWlsZEdyYWRpZW50KCk7Ci0KLSAgICAvLyBXZSBuZWVkIGEgaG9vayB0byBjYWxsIHRo
aXMgd2hlbiB0aGUgZ3JhZGllbnQgZ2V0cyB1cGRhdGVkLCBiZWZvcmUgZHJhd24uCi0gICAgaWYg
KCFtX3NoYWRpbmdDYWNoZSkKLSAgICAgICAgY29uc3RfY2FzdDxTVkdQYWludFNlcnZlckdyYWRp
ZW50Kj4odGhpcyktPnVwZGF0ZVF1YXJ0ekdyYWRpZW50Q2FjaGUodGhpcyk7Ci0KLSAgICBDR0Nv
bnRleHRSZWYgY29udGV4dFJlZiA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEFT
U0VSVChjb250ZXh0UmVmKTsKLQotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5
bGUoKTsKLQotICAgIGJvb2wgaXNGaWxsZWQgPSAodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlw
ZSkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKTsKLSAgICBib29sIGlzU3Ryb2tlZCA9
ICh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmIHN0eWxlLT5zdmdTdHlsZSgpLT5o
YXNTdHJva2UoKTsKLQotICAgIEFTU0VSVChpc0ZpbGxlZCAmJiAhaXNTdHJva2VkIHx8ICFpc0Zp
bGxlZCAmJiBpc1N0cm9rZWQpOwotCi0gICAgY29udGV4dC0+c2F2ZSgpOwotICAgIENHQ29udGV4
dFNldEFscGhhKGNvbnRleHRSZWYsIGlzRmlsbGVkID8gc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxP
cGFjaXR5KCkgOiBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlT3BhY2l0eSgpKTsKLQotICAgIGlm
IChpc1BhaW50aW5nVGV4dCkgewotICAgICAgICBGbG9hdFJlY3QgbWFza0JCb3ggPSBjb25zdF9j
YXN0PFJlbmRlck9iamVjdCo+KGZpbmRUZXh0Um9vdE9iamVjdChvYmplY3QpKS0+cmVsYXRpdmVC
Qm94KGZhbHNlKTsKLSAgICAgICAgSW50UmVjdCBtYXNrUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qo
b2JqZWN0LT5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QobWFza0JCb3gpKTsKLQotICAgICAg
ICBJbnRTaXplIG1hc2tTaXplKG1hc2tSZWN0LndpZHRoKCksIG1hc2tSZWN0LmhlaWdodCgpKTsK
LSAgICAgICAgY2xhbXBJbWFnZUJ1ZmZlclNpemVUb1ZpZXdwb3J0KG9iamVjdC0+ZG9jdW1lbnQo
KS0+cmVuZGVyZXIoKSwgbWFza1NpemUpOwotCi0gICAgICAgIGF1dG9fcHRyPEltYWdlQnVmZmVy
PiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1hc2tTaXplLCBmYWxzZSk7Ci0KLSAg
ICAgICAgaWYgKCFtYXNrSW1hZ2UuZ2V0KCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlc3Rv
cmUoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIEdy
YXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOwot
ICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5zYXZlKCk7Ci0KLSAgICAgICAgbWFza0ltYWdlQ29u
dGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKGlzRmlsbGVkID8gY1RleHRGaWxsIDogY1RleHRTdHJv
a2UpOwotICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLW1hc2tSZWN0LngoKSwg
LW1hc2tSZWN0LnkoKSk7Ci0gICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmNvbmNhdENUTShvYmpl
Y3QtPmFic29sdXRlVHJhbnNmb3JtKCkpOwotCi0gICAgICAgIG1faW1hZ2VCdWZmZXIgPSBtYXNr
SW1hZ2UucmVsZWFzZSgpOwotICAgICAgICBtX3NhdmVkQ29udGV4dCA9IGNvbnRleHQ7Ci0KLSAg
ICAgICAgY29udGV4dCA9IG1hc2tJbWFnZUNvbnRleHQ7Ci0gICAgICAgIGNvbnRleHRSZWYgPSBj
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICB9Ci0KLSAgICBpZiAoaXNTdHJva2VkKQot
ICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3Qp
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6
aW52YWxpZGF0ZSgpCi17Ci0gICAgU1ZHUGFpbnRTZXJ2ZXI6OmludmFsaWRhdGUoKTsKLQotICAg
IC8vIEludmFsaWRhdGUgY2FjaGVzCi0gICAgQ0dTaGFkaW5nUmVsZWFzZShtX3NoYWRpbmdDYWNo
ZSk7Ci0KLSAgICBtX3N0b3BzQ2FjaGUgPSAwOwotICAgIG1fc2hhZGluZ0NhY2hlID0gMDsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL3F0L1NWR1BhaW50U2VydmVyR3JhZGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmNwcAkocmV2aXNp
b24gMzgzNjQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlckdyYWRp
ZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMCArMCwwIEBACi0vKgotICAgIENvcHly
aWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLQotICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlckdyYWRpZW50
LmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmpl
Y3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxl
bWVudC5oIgotCi0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVkZSA8UVBhaW50ZXJQYXRoPgot
I2luY2x1ZGUgPFFDb2xvcj4KLSNpbmNsdWRlIDxRR3JhZGllbnQ+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotLy8gSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgbGluZWFyICYgcmFkaWFsIGdyYWRp
ZW50Ci12b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmZpbGxDb2xvckFycmF5KFFHcmFkaWVu
dCYgZ3JhZGllbnQsIGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+JiBzdG9wcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3BhY2l0eSkgY29u
c3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcHMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgZmxvYXQgb2Zmc2V0ID0gc3RvcHNbaV0uZmlyc3Q7Ci0gICAgICAgIENvbG9yIGNv
bG9yID0gc3RvcHNbaV0uc2Vjb25kOwotCi0gICAgICAgIFFDb2xvciBjKGNvbG9yLnJlZCgpLCBj
b2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCkpOwotICAgICAgICBjLnNldEFscGhhKGludChjb2xv
ci5hbHBoYSgpICogb3BhY2l0eSkpOwotCi0gICAgICAgIGdyYWRpZW50LnNldENvbG9yQXQob2Zm
c2V0LCBjKTsKLSAgICB9Ci19Ci0KLWJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAo
R3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBl
LCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAotewotICAgIG1fb3duZXJFbGVtZW50LT5idWls
ZEdyYWRpZW50KCk7Ci0KLSAgICBRUGFpbnRlciogcGFpbnRlcihjb250ZXh0ID8gY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCkgOiAwKTsKLSAgICBRX0FTU0VSVChwYWludGVyKTsKLQotICAgIFFQ
YWludGVyUGF0aCogcGF0aChjb250ZXh0ID8gY29udGV4dC0+Y3VycmVudFBhdGgoKSA6IDApOwot
ICAgIFFfQVNTRVJUKHBhdGgpOwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxl
ID0gb2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IG9iamVjdC0+c3R5bGUoKTsKLQotICAgIFFHcmFkaWVudCBncmFkaWVudCA9IHNldHVwR3JhZGll
bnQoY29udGV4dCwgb2JqZWN0KTsKLQotICAgIHBhaW50ZXItPnNldFBlbihRdDo6Tm9QZW4pOwot
ICAgIHBhaW50ZXItPnNldEJydXNoKFF0OjpOb0JydXNoKTsKLQotICAgIGlmIChzcHJlYWRNZXRo
b2QoKSA9PSBTcHJlYWRNZXRob2RSZXBlYXQpCi0gICAgICAgIGdyYWRpZW50LnNldFNwcmVhZChR
R3JhZGllbnQ6OlJlcGVhdFNwcmVhZCk7Ci0gICAgZWxzZSBpZiAoc3ByZWFkTWV0aG9kKCkgPT0g
U3ByZWFkTWV0aG9kUmVmbGVjdCkKLSAgICAgICAgZ3JhZGllbnQuc2V0U3ByZWFkKFFHcmFkaWVu
dDo6UmVmbGVjdFNwcmVhZCk7Ci0gICAgZWxzZQotICAgICAgICBncmFkaWVudC5zZXRTcHJlYWQo
UUdyYWRpZW50OjpQYWRTcHJlYWQpOyAgICAKLSAgICBkb3VibGUgb3BhY2l0eSA9IDEuMDsKLQot
ICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3ZnU3R5bGUtPmhhc0Zp
bGwoKSkgewotICAgICAgICBmaWxsQ29sb3JBcnJheShncmFkaWVudCwgZ3JhZGllbnRTdG9wcygp
LCBvcGFjaXR5KTsKLQotICAgICAgICBRQnJ1c2ggYnJ1c2goZ3JhZGllbnQpOwotICAgICAgICBi
cnVzaC5zZXRNYXRyaXgoZ3JhZGllbnRUcmFuc2Zvcm0oKSk7Ci0KLSAgICAgICAgcGFpbnRlci0+
c2V0QnJ1c2goYnJ1c2gpOwotICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShzdmdTdHlsZS0+
ZmlsbFJ1bGUoKSk7Ci0gICAgfQotCi0gICAgaWYgKCh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdl
dFR5cGUpICYmIHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkgewotICAgICAgICBmaWxsQ29sb3JBcnJh
eShncmFkaWVudCwgZ3JhZGllbnRTdG9wcygpLCBvcGFjaXR5KTsKLQotICAgICAgICBRUGVuIHBl
bjsKLSAgICAgICAgUUJydXNoIGJydXNoKGdyYWRpZW50KTsKLSAgICAgICAgYnJ1c2guc2V0TWF0
cml4KGdyYWRpZW50VHJhbnNmb3JtKCkpOwotICAgICAgICBwZW4uc2V0QnJ1c2goYnJ1c2gpOwot
ICAgICAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKLQotICAgICAgICBhcHBseVN0cm9rZVN0eWxl
VG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3QpOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0vLyB2aW06dHM9
NDpub2V0CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlckxpbmVh
ckdyYWRpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NW
R1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdC5jcHAJKHJldmlzaW9uIDM4MzY0KQorKysgV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAw
NiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYg
RU5BQkxFKFNWRykKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50LmgiCi0j
aW5jbHVkZSAiU1ZHR3JhZGllbnRFbGVtZW50LmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCi0KLSNpbmNsdWRlIDxRTGluZWFyR3JhZGll
bnQ+Ci0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVkZSA8UVBhaW50ZXJQYXRoPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVFHcmFkaWVudCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50
OjpzZXR1cEdyYWRpZW50KEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9i
amVjdCogb2JqZWN0KSBjb25zdAotewotICAgIFFQYWludGVyUGF0aCogcGF0aChjb250ZXh0ID8g
Y29udGV4dC0+Y3VycmVudFBhdGgoKSA6IDApOwotICAgIFFfQVNTRVJUKHBhdGgpOwotCi0gICAg
ZG91YmxlIHgxLCB4MiwgeTEsIHkyOwotICAgIGlmIChib3VuZGluZ0JveE1vZGUoKSkgewotICAg
ICAgICBRUmVjdEYgYmJveCA9IHBhdGgtPmJvdW5kaW5nUmVjdCgpOwotICAgICAgICB4MSA9IGJi
b3gueCgpOwotICAgICAgICB5MSA9IGJib3gueSgpOwotICAgICAgICB4MiA9IGJib3gueCgpICsg
YmJveC53aWR0aCgpOwotICAgICAgICB5MiA9IGJib3gueSgpICsgYmJveC5oZWlnaHQoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICB4MSA9IGdyYWRpZW50U3RhcnQoKS54KCk7Ci0gICAgICAgIHkx
ID0gZ3JhZGllbnRTdGFydCgpLnkoKTsKLSAgICAgICAgeDIgPSBncmFkaWVudEVuZCgpLngoKTsK
LSAgICAgICAgeTIgPSBncmFkaWVudEVuZCgpLnkoKTsKLSAgICB9Ci0KLSAgICBRTGluZWFyR3Jh
ZGllbnQgZ3JhZGllbnQoUVBvaW50Rih4MSwgeTEpLCBRUG9pbnRGKHgyLCB5MikpOwotCi0gICAg
cmV0dXJuIGdyYWRpZW50OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgot
Ci0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWlu
dFNlcnZlclJhZGlhbEdyYWRpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL3F0L1NWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdC5jcHAJKHJldmlzaW9uIDM4
MzY0KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFk
aWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5OCArMCwwIEBACi0vKgotICAgIENvcHly
aWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLQotICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlclJhZGlhbEdy
YWRpZW50LmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5k
ZXJQYXRoLmgiCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5j
bHVkZSA8UVBhaW50ZXJQYXRoPgotI2luY2x1ZGUgPFFSYWRpYWxHcmFkaWVudD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1RR3JhZGllbnQgU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudDo6
c2V0dXBHcmFkaWVudChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmpl
Y3QqIG9iamVjdCkgY29uc3QKLXsKLSAgICBRUGFpbnRlciogcGFpbnRlcihjb250ZXh0ID8gY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiAwKTsKLSAgICBRX0FTU0VSVChwYWludGVyKTsKLQot
ICAgIFFQYWludGVyUGF0aCogcGF0aChjb250ZXh0ID8gY29udGV4dC0+Y3VycmVudFBhdGgoKSA6
IDApOwotICAgIFFfQVNTRVJUKHBhdGgpOwotCi0gICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxl
ID0gb2JqZWN0LT5zdHlsZSgpOwotCi0gICAgUU1hdHJpeCBtYXQgPSBwYWludGVyLT5tYXRyaXgo
KTsKLQotICAgIGRvdWJsZSBjeCwgZngsIGN5LCBmeSwgcjsKLSAgICBpZiAoYm91bmRpbmdCb3hN
b2RlKCkpIHsKLSAgICAgICAgUVJlY3RGIGJib3ggPSBwYXRoLT5ib3VuZGluZ1JlY3QoKTsgCi0g
ICAgICAgIGN4ID0gZG91YmxlKGJib3gubGVmdCgpKSArIChkb3VibGUoZ3JhZGllbnRDZW50ZXIo
KS54KCkgLyAxMDAuMCkgKiBkb3VibGUoYmJveC53aWR0aCgpKSk7Ci0gICAgICAgIGN5ID0gZG91
YmxlKGJib3gudG9wKCkpICsgKGRvdWJsZShncmFkaWVudENlbnRlcigpLnkoKSAvIDEwMC4wKSAq
IGRvdWJsZShiYm94LmhlaWdodCgpKSk7Ci0gICAgICAgIGZ4ID0gZG91YmxlKGJib3gubGVmdCgp
KSArIChkb3VibGUoZ3JhZGllbnRGb2NhbCgpLngoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94Lndp
ZHRoKCkpKSAtIGN4OwotICAgICAgICBmeSA9IGRvdWJsZShiYm94LnRvcCgpKSArIChkb3VibGUo
Z3JhZGllbnRGb2NhbCgpLnkoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LmhlaWdodCgpKSkgLSBj
eTsKLSAgICAgICAgciA9IGRvdWJsZShncmFkaWVudFJhZGl1cygpIC8gMTAwLjApICogKHNxcnQo
cG93KGJib3gud2lkdGgoKSwgMikgKyBwb3coYmJveC5oZWlnaHQoKSwgMikpKTsKLQotICAgICAg
ICBmbG9hdCB3aWR0aCA9IGJib3gud2lkdGgoKTsKLSAgICAgICAgZmxvYXQgaGVpZ2h0ID0gYmJv
eC5oZWlnaHQoKTsKLQotICAgICAgICBpbnQgZGlmZiA9IGludCh3aWR0aCAtIGhlaWdodCk7IC8v
IGFsbG93IHNsaWdodCB0b2xlcmFuY2UKLSAgICAgICAgaWYgKCEoZGlmZiA+IC0yICYmIGRpZmYg
PCAyKSkgewotICAgICAgICAgICAgLy8gbWFrZSBlbGxpcHRpY2FsIG9yIGNpcmN1bGFyIGRlcGVu
ZGluZyBvbiBiYm94IGFzcGVjdCByYXRpbwotICAgICAgICAgICAgZmxvYXQgcmF0aW9YID0gKHdp
ZHRoIC8gaGVpZ2h0KTsKLSAgICAgICAgICAgIGZsb2F0IHJhdGlvWSA9IChoZWlnaHQgLyB3aWR0
aCk7Ci0gICAgICAgICAgICBtYXQuc2NhbGUoKHdpZHRoID4gaGVpZ2h0KSA/IDEgOiByYXRpb1gs
ICh3aWR0aCA+IGhlaWdodCkgPyByYXRpb1kgOiAxKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGN4ID0gZ3JhZGllbnRDZW50ZXIoKS54KCk7Ci0gICAgICAgIGN5ID0gZ3JhZGll
bnRDZW50ZXIoKS55KCk7Ci0KLSAgICAgICAgZnggPSBncmFkaWVudEZvY2FsKCkueCgpOwotICAg
ICAgICBmeSA9IGdyYWRpZW50Rm9jYWwoKS55KCk7Ci0KLSAgICAgICAgZnggLT0gY3g7Ci0gICAg
ICAgIGZ5IC09IGN5OwotCi0gICAgICAgIHIgPSBncmFkaWVudFJhZGl1cygpOwotICAgIH0KLQot
ICAgIGlmIChzcXJ0KGZ4ICogZnggKyBmeSAqIGZ5KSA+IHIpIHsKLSAgICAgICAgLy8gU3BlYzog
SWYgKGZ4LCBmeSkgbGllcyBvdXRzaWRlIHRoZSBjaXJjbGUgZGVmaW5lZCBieSAoY3gsIGN5KSBh
bmQgciwgc2V0IChmeCwgZnkpCi0gICAgICAgIC8vIHRvIHRoZSBwb2ludCBvZiBpbnRlcnNlY3Rp
b24gb2YgdGhlIGxpbmUgdGhyb3VnaCAoZngsIGZ5KSBhbmQgdGhlIGNpcmNsZS4KLSAgICAgICAg
ZG91YmxlIGFuZ2xlID0gYXRhbjIoZnksIGZ4KTsKLSAgICAgICAgZnggPSBpbnQoY29zKGFuZ2xl
KSAqIHIpIC0gMTsKLSAgICAgICAgZnkgPSBpbnQoc2luKGFuZ2xlKSAqIHIpIC0gMTsKLSAgICB9
Ci0KLSAgICBRUmFkaWFsR3JhZGllbnQgZ3JhZGllbnQoUVBvaW50RihjeCwgY3kpLCBncmFkaWVu
dFJhZGl1cygpLCBRUG9pbnRGKGZ4ICsgY3gsIGZ5ICsgY3kpKTsKLQotICAgIHJldHVybiBncmFk
aWVudDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotLy8gdmltOnRz
PTQ6bm9ldAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25229</attachid>
            <date>2008-11-17 14:37:34 -0800</date>
            <delta_ts>2008-12-01 13:00:18 -0800</delta_ts>
            <desc>makes SVGPaintServerGradient platform-independent</desc>
            <filename>gradient.patch</filename>
            <type>text/plain</type>
            <size>59138</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODQ0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDgtMTEtMTcgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IFNWR1BhaW50U2VydmVyR3JhZGllbnQgcGxhdGZvcm0gaW5kZXBlbmRlbnQuCisKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmg6
CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFNpemU6OnNocnVua1RvKToKKyAgICAgICAgKiBzdmcv
U1ZHR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dyYWRpZW50RWxl
bWVudDo6YnVpbGRTdG9wcyk6CisgICAgICAgICogc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmJ1aWxk
R3JhZGllbnQpOgorICAgICAgICAqIHN2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWRpZW50
KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaDoKKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpTVkdQYWludFNlcnZlckdyYWRpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6On5TVkdQYWludFNlcnZlckdyYWRp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmdyYWRpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldEdyYWRpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRUZXh0Um9vdE9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVNYXNrQW5kU3dhcENvbnRleHRGb3JUZXh0R3JhZGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Y2xpcFRvVGV4dE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2
ZXJHcmFkaWVudDo6c2V0dXApOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudDo6cmVuZGVyUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRp
ZW50Ojp0ZWFyZG93bik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFp
bnRTZXJ2ZXJHcmFkaWVudC5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWlu
dFNlcnZlckdyYWRpZW50Q2Fpcm8uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGlj
cy9jZy9TVkdQYWludFNlcnZlckNnLmNwcDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvY2cvU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvcXQvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVu
dFF0LmNwcDogUmVtb3ZlZC4KKwogMjAwOC0xMS0xNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgUnViYmVyIHN0YW1wZWQgYnkgR2VvZmYgR2FyZW4uCkluZGV4OiBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUu
YW0JKHJldmlzaW9uIDM4NDQyKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBj
b3B5KQpAQCAtMjcwMSw3ICsyNzAxLDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIHdlYmNvcmVn
dGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vUmVuZGVyUGF0aENh
aXJvLmNwcCBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJDYWly
by5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyR3JhZGll
bnRDYWlyby5jcHAgXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVy
UGF0dGVybkNhaXJvLmNwcCBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUmVzb3Vy
Y2VGaWx0ZXJDYWlyby5jcHAgXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1Jlc291
cmNlTWFza2VyQ2Fpcm8uY3BwCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDM4NDQyKQorKysgV2ViQ29yZS9XZWJD
b3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTcwMSwxMSArMTcwMSw4IEBAIGNvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9TVkc9MSkgewogCiBTT1VSQ0VTICs9IFwKICAgICAgICAgc3ZnL2dyYXBo
aWNzL3F0L1JlbmRlclBhdGhRdC5jcHAgXAotICAgICAgICBzdmcvZ3JhcGhpY3MvcXQvU1ZHUGFp
bnRTZXJ2ZXJHcmFkaWVudFF0LmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9xdC9TVkdQYWlu
dFNlcnZlckxpbmVhckdyYWRpZW50UXQuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NW
R1BhaW50U2VydmVyUGF0dGVyblF0LmNwcCBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9xdC9TVkdQ
YWludFNlcnZlclF0LmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZl
clJhZGlhbEdyYWRpZW50UXQuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NWR1Jlc291
cmNlRmlsdGVyUXQuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NWR1Jlc291cmNlTWFz
a2VyUXQuY3BwCiAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2
aXNpb24gMzg0NDIpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTI2NCwyNiArMTUyNjQsNiBAQAogCQkJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdmdcZ3JhcGhpY3NcY2dcU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcCINCi0JCQkJ
CQk+DQotCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJCU5hbWU9IkRlYnVnX0NhaXJv
fFdpbjMyIg0KLQkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCQkJPg0KLQkJ
CQkJCQk8VG9vbA0KLQkJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJLz4N
Ci0JCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0K
LQkJCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvfFdpbjMyIg0KLQkJCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSINCi0JCQkJCQkJPg0KLQkJCQkJCQk8VG9vbA0KLQkJCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCINCi0JCQkJCQkJLz4NCi0JCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0K
LQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xn
cmFwaGljc1xjZ1xTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAiDQogCQkJCQkJPg0KIAkJCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbg0KQEAgLTE1NTc2LDQyICsxNTU1Niw2IEBACiAJCQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPg0KIAkJCQkJPC9GaWxlPg0KIAkJCQkJPEZpbGUNCi0JCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xjYWlyb1xTVkdQYWludFNlcnZlckdyYWRpZW50Q2Fp
cm8uY3BwIg0KLQkJCQkJCT4NCi0JCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQkJTmFt
ZT0iRGVidWd8V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJ
CQk+DQotCQkJCQkJCTxUb29sDQotCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJ
CQkJCQkvPg0KLQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQkJPEZpbGVDb25maWd1
cmF0aW9uDQotCQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQotCQkJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQkvPg0KLQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
DQotCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJCU5hbWU9IkRlYnVnX0ludGVybmFs
fFdpbjMyIg0KLQkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCQkJPg0KLQkJ
CQkJCQk8VG9vbA0KLQkJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJLz4N
Ci0JCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0K
LQkJCQkJCQlOYW1lPSJSZWxlYXNlX1BHT3xXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiDQotCQkJCQkJCT4NCi0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiDQotCQkJCQkJCS8+DQotCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0J
CQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3Jh
cGhpY3NcY2Fpcm9cU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwIg0KIAkJCQkJCT4NCiAJ
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzg0NDIpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzA5Miw3ICszMDkyLDYg
QEAKIAkJQjI1NTk5MkQwRDAwRDhCQTAwQkI4MjVDIC8qIENnU3VwcG9ydC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTEwRDAwRDhCODAwQkI4
MjVDIC8qIENnU3VwcG9ydC5oICovOyB9OwogCQlCMjU1OTkyRTBEMDBEOEJBMDBCQjgyNUMgLyog
UmVuZGVyUGF0aENnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyNTU5ODkyMEQwMEQ4QjgwMEJCODI1QyAvKiBSZW5kZXJQYXRoQ2cuY3BwICovOyB9
OwogCQlCMjU1OTkyRjBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTg5MzBEMDBE
OEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAgKi87IH07Ci0JCUIyNTU5OTMwMEQw
MEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTQwRDAwRDhCODAwQkI4
MjVDIC8qIFNWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAgKi87IH07CiAJCUIyNTU5OTMxMEQw
MEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTg5NTBEMDBEOEI4MDBCQjgy
NUMgLyogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwICovOyB9OwogCQlCMjU1OTkzNTBEMDBE
OEJBMDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VGaWx0ZXJDZy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5ODk5MEQwMEQ4QjgwMEJCODI1QyAvKiBT
VkdSZXNvdXJjZUZpbHRlckNnLm1tICovOyB9OwogCQlCMjU1OTkzNzBEMDBEOEJBMDBCQjgyNUMg
LyogU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyNTU5ODlCMEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1h
c2tlckNnLm1tICovOyB9OwpAQCAtNzY4OCw3ICs3Njg3LDYgQEAKIAkJQjI1NTk4OTEwRDAwRDhC
ODAwQkI4MjVDIC8qIENnU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2dTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNTU5ODkyMEQw
MEQ4QjgwMEJCODI1QyAvKiBSZW5kZXJQYXRoQ2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlclBhdGhDZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyNTU5ODkzMEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckNnLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYWludFNlcnZlckNnLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI1NTk4OTQwRDAwRDhCODAwQkI4MjVD
IC8qIFNWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OTUwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1BhaW50U2Vy
dmVyUGF0dGVybkNnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
VkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyNTU5ODk5MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdSZXNvdXJjZUZpbHRlckNnLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNWR1Jlc291cmNlRmlsdGVyQ2cu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNTU5ODlCMEQwMEQ4QjgwMEJCODI1
QyAvKiBTVkdSZXNvdXJjZU1hc2tlckNnLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFNWR1Jlc291cmNlTWFza2VyQ2cubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMjUwMyw3ICsxMjUwMSw2IEBACiAJCQkJQjI1NTk4OTEwRDAwRDhCODAwQkI4
MjVDIC8qIENnU3VwcG9ydC5oICovLAogCQkJCUIyNTU5ODkyMEQwMEQ4QjgwMEJCODI1QyAvKiBS
ZW5kZXJQYXRoQ2cuY3BwICovLAogCQkJCUIyNTU5ODkzMEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQ
YWludFNlcnZlckNnLmNwcCAqLywKLQkJCQlCMjU1OTg5NDBEMDBEOEI4MDBCQjgyNUMgLyogU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcCAqLywKIAkJCQlCMjU1OTg5NTBEMDBEOEI4MDBCQjgy
NUMgLyogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwICovLAogCQkJCUIyNTU5ODk5MEQwMEQ4
QjgwMEJCODI1QyAvKiBTVkdSZXNvdXJjZUZpbHRlckNnLm1tICovLAogCQkJCUIyNTU5ODlCMEQw
MEQ4QjgwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1hc2tlckNnLm1tICovLApAQCAtMTc1OTUsNyAr
MTc1OTIsNiBAQAogCQkJCUIyNTU5OUE2MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjU1OTkyRjBEMDBEOEJBMDBCQjgyNUMgLyogU1ZH
UGFpbnRTZXJ2ZXJDZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjU1OTlBODBEMDBEOEJBMDBC
QjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlC
MjU1OTkzMDBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyNTU5OUFBMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNl
cnZlckxpbmVhckdyYWRpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNTU5OUFDMEQwMEQ4
QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclBhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjI1NTk5MzEwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyUGF0dGVybkNnLmNw
cCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNp
emUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5o
CShyZXZpc2lvbiAzODQ0MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXpl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAg
ICAgICAgICAgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw2ICs2OCwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBtX2hlaWdodCA+IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7
CiAgICAgfQogCisgICAgRmxvYXRTaXplIHNocnVua1RvKGNvbnN0IEZsb2F0U2l6ZSYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgIHJldHVybiBGbG9hdFNpemUobV93aWR0aCA8IG90aGVyLm1f
d2lkdGggPyBtX3dpZHRoIDogb3RoZXIubV93aWR0aCwKKyAgICAgICAgICAgbV9oZWlnaHQgPCBv
dGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOworICAgIH0KKwogI2lm
IFBMQVRGT1JNKENHKQogICAgIGV4cGxpY2l0IEZsb2F0U2l6ZShjb25zdCBDR1NpemUmKTsgLy8g
ZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKICAgICBvcGVyYXRvciBD
R1NpemUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNp
b24gMzg0NDIpCisrKyBXZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTcsNyArMTU3LDcgQEAgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4gU1ZHR3Jh
ZGllbnRFbGVtZQogICAgICAgICAgICAgICAgIG9wYWNpdHkgPSBzdG9wU3R5bGUtPnN2Z1N0eWxl
KCktPnN0b3BPcGFjaXR5KCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN0b3BzLmFw
cGVuZChtYWtlR3JhZGllbnRTdG9wKHN0b3BPZmZzZXQsIG1ha2VSR0JBKGNvbG9yLnJlZCgpLCBj
b2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCksIGludChvcGFjaXR5ICogMjU1LikpKSk7CisgICAg
ICAgICAgICBzdG9wcy5hcHBlbmQobWFrZUdyYWRpZW50U3RvcChzdG9wT2Zmc2V0LCBjb2xvcldp
dGhPdmVycmlkZUFscGhhKGNvbG9yLnJnYigpLCBvcGFjaXR5KSkpOwogICAgICAgICB9CiAgICAg
fQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAJKHJldmlz
aW9uIDM4NDQyKQorKysgV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDggQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgogICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Cisg
ICAgICAgICAgICAgICAgICAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgICAg
ICAgICAgICAgICAgICAyMDA4IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogCiAgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC04MSwxOCArODEsMzAgQEAgdm9pZCBTVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQ6OmJ1aWxkR3JhZAogewogICAgIExpbmVhckdyYWRpZW50QXR0cmlidXRlcyBhdHRyaWJ1
dGVzID0gY29sbGVjdEdyYWRpZW50UHJvcGVydGllcygpOwogCi0gICAgLy8gSWYgd2UgZGlkbid0
IGZpbmQgYW55IGdyYWRpZW50IGNvbnRhaW5pbmcgc3RvcCBlbGVtZW50cywgaWdub3JlIHRoZSBy
ZXF1ZXN0LgotICAgIGlmIChhdHRyaWJ1dGVzLnN0b3BzKCkuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBSZWZQdHI8U1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudD4gbGluZWFy
R3JhZGllbnQgPSBXVEY6OnN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZHUGFpbnRTZXJ2ZXJMaW5lYXJH
cmFkaWVudD4obV9yZXNvdXJjZSk7CiAKLSAgICBsaW5lYXJHcmFkaWVudC0+c2V0R3JhZGllbnRT
dG9wcyhhdHRyaWJ1dGVzLnN0b3BzKCkpOworICAgIFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQg
PSBHcmFkaWVudDo6Y3JlYXRlKAorICAgICAgICBGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24o
YXR0cmlidXRlcy54MSgpLCBhdHRyaWJ1dGVzLnkxKCkpLAorICAgICAgICBGbG9hdFBvaW50Ojpu
YXJyb3dQcmVjaXNpb24oYXR0cmlidXRlcy54MigpLCBhdHRyaWJ1dGVzLnkyKCkpKTsKKworICAg
IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+IG1fc3RvcHMgPSBhdHRyaWJ1dGVzLnN0b3BzKCk7Cisg
ICAgZmxvYXQgcHJldmlvdXNPZmZzZXQgPSAwLjBmOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3N0b3BzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGZsb2F0IG9mZnNldCA9IHN0ZDo6
bWluKHN0ZDo6bWF4KHByZXZpb3VzT2Zmc2V0LCBtX3N0b3BzW2ldLmZpcnN0KSwgMS4wZik7Cisg
ICAgICAgIHByZXZpb3VzT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBncmFkaWVudC0+YWRkQ29s
b3JTdG9wKG9mZnNldCwgbV9zdG9wc1tpXS5zZWNvbmQpOworICAgIH0KKworICAgIGxpbmVhckdy
YWRpZW50LT5zZXRHcmFkaWVudChncmFkaWVudCk7CisKKyAgICAvLyBUaGlzIGNvZGUgc2hvdWxk
IGdvIGF3YXkuICBQYWludFNlcnZlcnMgc2hvdWxkIGdvIGF3YXkgdG9vLgorICAgIC8vIE9ubHkg
dGhpcyBjb2RlIHNob3VsZCBjYXJlIGFib3V0IGJvdW5kaW5nIGJveGVzCiAgICAgbGluZWFyR3Jh
ZGllbnQtPnNldEJvdW5kaW5nQm94TW9kZShhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKTsK
KyAgICBsaW5lYXJHcmFkaWVudC0+c2V0R3JhZGllbnRTdG9wcyhhdHRyaWJ1dGVzLnN0b3BzKCkp
OworCisgICAgLy8gVGhlc2Ugc2hvdWxkIHBvc3NpYmx5IGJlIHN1cHBvcnRlZCBvbiBHcmFkaWVu
dAogICAgIGxpbmVhckdyYWRpZW50LT5zZXRHcmFkaWVudFNwcmVhZE1ldGhvZChhdHRyaWJ1dGVz
LnNwcmVhZE1ldGhvZCgpKTsKICAgICBsaW5lYXJHcmFkaWVudC0+c2V0R3JhZGllbnRUcmFuc2Zv
cm0oYXR0cmlidXRlcy5ncmFkaWVudFRyYW5zZm9ybSgpKTsKLSAgICBsaW5lYXJHcmFkaWVudC0+
c2V0R3JhZGllbnRTdGFydChGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24oYXR0cmlidXRlcy54
MSgpLCBhdHRyaWJ1dGVzLnkxKCkpKTsKLSAgICBsaW5lYXJHcmFkaWVudC0+c2V0R3JhZGllbnRF
bmQoRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKGF0dHJpYnV0ZXMueDIoKSwgYXR0cmlidXRl
cy55MigpKSk7CiB9CiAKIExpbmVhckdyYWRpZW50QXR0cmlidXRlcyBTVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQ6OmNvbGxlY3RHcmFkaWVudFByb3BlcnRpZXMoKSBjb25zdApJbmRleDogV2ViQ29y
ZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODQ0MikKKysrIFdl
YkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsOCArMSw4IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
OCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAgICAg
ICAgIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLQotICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorICAgICAgICAgICAgICAgICAg
MjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICAgICAgICAgICAgICAgICAgMjAw
OCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
ODksMTkgKzg5LDQyIEBAIHZvaWQgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWQK
IHsKICAgICBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGNvbGxlY3RHcmFk
aWVudFByb3BlcnRpZXMoKTsKIAotICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueSBncmFkaWVu
dCBjb250YWluaW5nIHN0b3AgZWxlbWVudHMsIGlnbm9yZSB0aGUgcmVxdWVzdC4KLSAgICBpZiAo
YXR0cmlidXRlcy5zdG9wcygpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgUmVm
UHRyPFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ+IHJhZGlhbEdyYWRpZW50ID0gV1RGOjpz
dGF0aWNfcG9pbnRlcl9jYXN0PFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ+KG1fcmVzb3Vy
Y2UpOwogCi0gICAgcmFkaWFsR3JhZGllbnQtPnNldEdyYWRpZW50U3RvcHMoYXR0cmlidXRlcy5z
dG9wcygpKTsKKyAgICBkb3VibGUgYWRqdXN0ZWRGb2N1c1ggPSBhdHRyaWJ1dGVzLmZ4KCk7Cisg
ICAgZG91YmxlIGFkanVzdGVkRm9jdXNZID0gYXR0cmlidXRlcy5meSgpOworCisgICAgZG91Ymxl
IGZkeCA9IGF0dHJpYnV0ZXMuZngoKSAtIGF0dHJpYnV0ZXMuY3goKTsKKyAgICBkb3VibGUgZmR5
ID0gYXR0cmlidXRlcy5meSgpIC0gYXR0cmlidXRlcy5jeSgpOworCisgICAgLy8gU3BlYzogSWYg
KGZ4LCBmeSkgbGllcyBvdXRzaWRlIHRoZSBjaXJjbGUgZGVmaW5lZCBieSAoY3gsIGN5KSBhbmQK
KyAgICAvLyByLCBzZXQgKGZ4LCBmeSkgdG8gdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBvZiB0
aGUgbGluZSB0aHJvdWdoCisgICAgLy8gKGZ4LCBmeSkgYW5kIHRoZSBjaXJjbGUuCisgICAgaWYg
KHNxcnQoZmR4ICogZmR4ICsgZmR5ICogZmR5KSA+IGF0dHJpYnV0ZXMucigpKSB7CisgICAgICAg
IGRvdWJsZSBhbmdsZSA9IGF0YW4yKGF0dHJpYnV0ZXMuZnkoKSAqIDEwMC4wLCBhdHRyaWJ1dGVz
LmZ4KCkgKiAxMDAuMCk7CisgICAgICAgIGFkanVzdGVkRm9jdXNYID0gY29zKGFuZ2xlKSAqIGF0
dHJpYnV0ZXMucigpOworICAgICAgICBhZGp1c3RlZEZvY3VzWSA9IHNpbihhbmdsZSkgKiBhdHRy
aWJ1dGVzLnIoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3Jh
ZGllbnQ6OmNyZWF0ZSgKKyAgICAgICAgRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKGFkanVz
dGVkRm9jdXNYLCBhZGp1c3RlZEZvY3VzWSksCisgICAgICAgIDAuZiwgLy8gU1ZHIGRvZXMgbm90
IHN1cHBvcnQgYSAiZm9jdXMgcmFkaXVzIgorICAgICAgICBGbG9hdFBvaW50OjpuYXJyb3dQcmVj
aXNpb24oYXR0cmlidXRlcy5jeCgpLCBhdHRyaWJ1dGVzLmN5KCkpLAorICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KGF0dHJpYnV0ZXMucigpKSk7CisKKyAgICBWZWN0b3I8U1ZHR3JhZGll
bnRTdG9wPiBzdG9wcyA9IGF0dHJpYnV0ZXMuc3RvcHMoKTsKKyAgICBmbG9hdCBwcmV2aW91c09m
ZnNldCA9IDAuMGY7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0b3BzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICBmbG9hdCBvZmZzZXQgPSBzdGQ6Om1pbihzdGQ6Om1heChwcmV2aW91
c09mZnNldCwgc3RvcHNbaV0uZmlyc3QpLCAxLjBmKTsKKyAgICAgICAgIHByZXZpb3VzT2Zmc2V0
ID0gb2Zmc2V0OworICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcChvZmZzZXQsIHN0b3Bz
W2ldLnNlY29uZCk7CisgICAgfQorCisgICAgcmFkaWFsR3JhZGllbnQtPnNldEdyYWRpZW50KGdy
YWRpZW50KTsKICAgICByYWRpYWxHcmFkaWVudC0+c2V0Qm91bmRpbmdCb3hNb2RlKGF0dHJpYnV0
ZXMuYm91bmRpbmdCb3hNb2RlKCkpOwogICAgIHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudFNw
cmVhZE1ldGhvZChhdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpKTsgCiAgICAgcmFkaWFsR3JhZGll
bnQtPnNldEdyYWRpZW50VHJhbnNmb3JtKGF0dHJpYnV0ZXMuZ3JhZGllbnRUcmFuc2Zvcm0oKSk7
Ci0gICAgcmFkaWFsR3JhZGllbnQtPnNldEdyYWRpZW50Q2VudGVyKEZsb2F0UG9pbnQ6Om5hcnJv
d1ByZWNpc2lvbihhdHRyaWJ1dGVzLmN4KCksIGF0dHJpYnV0ZXMuY3koKSkpOwotICAgIHJhZGlh
bEdyYWRpZW50LT5zZXRHcmFkaWVudEZvY2FsKEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihh
dHRyaWJ1dGVzLmZ4KCksIGF0dHJpYnV0ZXMuZnkoKSkpOwotICAgIHJhZGlhbEdyYWRpZW50LT5z
ZXRHcmFkaWVudFJhZGl1cyhuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGF0dHJpYnV0ZXMucigpKSk7
CisgICAgcmFkaWFsR3JhZGllbnQtPnNldEdyYWRpZW50U3RvcHMoYXR0cmlidXRlcy5zdG9wcygp
KTsKIH0KIAogUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVu
dDo6Y29sbGVjdEdyYWRpZW50UHJvcGVydGllcygpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdQYWludFNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR1BhaW50U2VydmVyLmgJKHJldmlzaW9uIDM4NDQyKQorKysgV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzksOSArNzksNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJvdGVjdGVkOgogI2lmIFBMQVRGT1JNKENHKQogICAg
ICAgICB2b2lkIHN0cm9rZVBhdGgoQ0dDb250ZXh0UmVmLCBjb25zdCBSZW5kZXJPYmplY3QqKSBj
b25zdDsKLSAgICAgICAgdm9pZCBjbGlwVG9TdHJva2VQYXRoKENHQ29udGV4dFJlZiwgY29uc3Qg
UmVuZGVyT2JqZWN0KikgY29uc3Q7CiAgICAgICAgIHZvaWQgZmlsbFBhdGgoQ0dDb250ZXh0UmVm
LCBjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLSAgICAgICAgdm9pZCBjbGlwVG9GaWxsUGF0
aChDR0NvbnRleHRSZWYsIGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwogI2VuZGlmCiAKICAg
ICBwcm90ZWN0ZWQ6CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdy
YWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNl
cnZlckdyYWRpZW50LmNwcAkocmV2aXNpb24gMzg0NDIpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiAgICAgICAgICAgICAgIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KKyAqICAgICAgICAgICAgICAgMjAwOCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOSArMzAsMjMgQEAK
ICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyR3JhZGllbnQuaCIKIAor
I2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAj
aW5jbHVkZSAiU1ZHR3JhZGllbnRFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJM
aW5lYXJHcmFkaWVudC5oIgorI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQu
aCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5oIgogCisjaWYgUExBVEZPUk0oQ0cpCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNl
IHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBHcmFkaWVudFNwcmVhZE1ldGhvZCBtKQpAQCAtNjUsOCArODEsNiBAQCBT
VkdQYWludFNlcnZlckdyYWRpZW50OjpTVkdQYWludFNlcnZlckdyCiAgICAgLCBtX293bmVyRWxl
bWVudChvd25lcikKIAogI2lmIFBMQVRGT1JNKENHKQotICAgICwgbV9zdG9wc0NhY2hlKDApCi0g
ICAgLCBtX3NoYWRpbmdDYWNoZSgwKQogICAgICwgbV9zYXZlZENvbnRleHQoMCkKICAgICAsIG1f
aW1hZ2VCdWZmZXIoMCkKICNlbmRpZgpAQCAtNzYsMTkgKzkwLDE2IEBAIFNWR1BhaW50U2VydmVy
R3JhZGllbnQ6OlNWR1BhaW50U2VydmVyR3IKIAogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6flNW
R1BhaW50U2VydmVyR3JhZGllbnQoKQogewotI2lmIFBMQVRGT1JNKENHKQotICAgIENHU2hhZGlu
Z1JlbGVhc2UobV9zaGFkaW5nQ2FjaGUpOwotI2VuZGlmCiB9CiAKLWNvbnN0IFZlY3RvcjxTVkdH
cmFkaWVudFN0b3A+JiBTVkdQYWludFNlcnZlckdyYWRpZW50OjpncmFkaWVudFN0b3BzKCkgY29u
c3QKK0dyYWRpZW50KiBTVkdQYWludFNlcnZlckdyYWRpZW50OjpncmFkaWVudCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fc3RvcHM7CisgICAgcmV0dXJuIG1fZ3JhZGllbnQuZ2V0KCk7CiB9CiAK
LXZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0R3JhZGllbnRTdG9wcyhjb25zdCBWZWN0
b3I8U1ZHR3JhZGllbnRTdG9wPiYgc3RvcHMpCit2b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6
OnNldEdyYWRpZW50KFBhc3NSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50KQogewotICAgIG1fc3Rv
cHMgPSBzdG9wczsKKyAgICBtX2dyYWRpZW50ID0gZ3JhZGllbnQ7CiB9CiAKIEdyYWRpZW50U3By
ZWFkTWV0aG9kIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNwcmVhZE1ldGhvZCgpIGNvbnN0CkBA
IC0xMjEsNiArMTMyLDE2MiBAQCB2b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldEdyYWRp
ZW50CiAgICAgbV9ncmFkaWVudFRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKIH0KIAorI2lmIFBMQVRG
T1JNKENHKQorLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh0IHBhaW50aW5nIGluIENHCisvLyBU
aGlzIENnIHNwZWNpZmljIGNvZGUgc2hvdWxkIG1vdmUgdG8gR3JhcGhpY3NDb250ZXh0IGFuZCBG
b250KiBpbiBhIG5leHQgc3RlcC4KK3N0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyT2JqZWN0KiBm
aW5kVGV4dFJvb3RPYmplY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBzdGFydCkKK3sKKyAgICB3aGls
ZSAoc3RhcnQgJiYgIXN0YXJ0LT5pc1NWR1RleHQoKSkKKyAgICAgICAgc3RhcnQgPSBzdGFydC0+
cGFyZW50KCk7CisgICAgQVNTRVJUKHN0YXJ0KTsKKyAgICBBU1NFUlQoc3RhcnQtPmlzU1ZHVGV4
dCgpKTsKKworICAgIHJldHVybiBzdGFydDsKK30KKworc3RhdGljIGlubGluZSBib29sIGNyZWF0
ZU1hc2tBbmRTd2FwQ29udGV4dEZvclRleHRHcmFkaWVudCgKKyAgICBHcmFwaGljc0NvbnRleHQq
JiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQqJiBzYXZlZENvbnRleHQsCisgICAgT3duUHRyPElt
YWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQorewor
ICAgIEZsb2F0UmVjdCBtYXNrQkJveCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oZmluZFRl
eHRSb290T2JqZWN0KG9iamVjdCkpLT5yZWxhdGl2ZUJCb3goZmFsc2UpOworICAgIEludFJlY3Qg
bWFza1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG9iamVjdC0+YWJzb2x1dGVUcmFuc2Zvcm0oKS5t
YXBSZWN0KG1hc2tCQm94KSk7CisKKyAgICBJbnRTaXplIG1hc2tTaXplKG1hc2tSZWN0LndpZHRo
KCksIG1hc2tSZWN0LmhlaWdodCgpKTsKKyAgICBjbGFtcEltYWdlQnVmZmVyU2l6ZVRvVmlld3Bv
cnQob2JqZWN0LT5kb2N1bWVudCgpLT5yZW5kZXJlcigpLCBtYXNrU2l6ZSk7CisKKyAgICBhdXRv
X3B0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtYXNrU2l6
ZSwgZmFsc2UpOworCisgICAgaWYgKCFtYXNrSW1hZ2UuZ2V0KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFn
ZS0+Y29udGV4dCgpOworICAgIG1hc2tJbWFnZUNvbnRleHQtPnNhdmUoKTsKKyAgICBtYXNrSW1h
Z2VDb250ZXh0LT50cmFuc2xhdGUoLW1hc2tSZWN0LngoKSwgLW1hc2tSZWN0LnkoKSk7CisgICAg
bWFza0ltYWdlQ29udGV4dC0+Y29uY2F0Q1RNKG9iamVjdC0+YWJzb2x1dGVUcmFuc2Zvcm0oKSk7
CisKKyAgICBpbWFnZUJ1ZmZlci5zZXQobWFza0ltYWdlLnJlbGVhc2UoKSk7CisgICAgc2F2ZWRD
b250ZXh0ID0gY29udGV4dDsKKworICAgIGNvbnRleHQgPSBtYXNrSW1hZ2VDb250ZXh0OworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGlwVG9UZXh0TWFzayhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VC
dWZmZXIsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LAorICAgIGNvbnN0IFNWR1BhaW50U2Vy
dmVyR3JhZGllbnQqIGdyYWRpZW50U2VydmVyKQoreworICAgIEZsb2F0UmVjdCBtYXNrQkJveCA9
IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oZmluZFRleHRSb290T2JqZWN0KG9iamVjdCkpLT5y
ZWxhdGl2ZUJCb3goZmFsc2UpOworCisgICAgLy8gRml4dXAgdHJhbnNmb3JtYXRpb25zIHRvIGJl
IGFibGUgdG8gY2xpcCB0byBtYXNrCisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG9i
amVjdC0+YWJzb2x1dGVUcmFuc2Zvcm0oKTsKKyAgICBGbG9hdFJlY3QgdGV4dEJvdW5kYXJ5ID0g
dHJhbnNmb3JtLm1hcFJlY3QobWFza0JCb3gpOworCisgICAgSW50U2l6ZSBtYXNrU2l6ZShscm91
bmRmKHRleHRCb3VuZGFyeS53aWR0aCgpKSwgbHJvdW5kZih0ZXh0Qm91bmRhcnkuaGVpZ2h0KCkp
KTsKKyAgICBjbGFtcEltYWdlQnVmZmVyU2l6ZVRvVmlld3BvcnQob2JqZWN0LT5kb2N1bWVudCgp
LT5yZW5kZXJlcigpLCBtYXNrU2l6ZSk7CisgICAgdGV4dEJvdW5kYXJ5LnNldFNpemUodGV4dEJv
dW5kYXJ5LnNpemUoKS5zaHJ1bmtUbyhtYXNrU2l6ZSkpOworCisgICAgLy8gQ2xpcCBjdXJyZW50
IGNvbnRleHQgdG8gbWFzayBpbWFnZSAoZ3JhZGllbnQpCisgICAgY29udGV4dC0+Y29uY2F0Q1RN
KHRyYW5zZm9ybS5pbnZlcnNlKCkpOworICAgIGNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKHRl
eHRCb3VuZGFyeSwgaW1hZ2VCdWZmZXIuZ2V0KCkpOworICAgIGNvbnRleHQtPmNvbmNhdENUTSh0
cmFuc2Zvcm0pOworCisgICAgaWYgKGdyYWRpZW50U2VydmVyLT5ib3VuZGluZ0JveE1vZGUoKSkg
eworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUobWFza0JCb3gueCgpLCBtYXNrQkJveC55KCkp
OworICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUobWFza0JCb3gud2lkdGgoKSwgbWFz
a0JCb3guaGVpZ2h0KCkpKTsKKyAgICB9CisgICAgY29udGV4dC0+Y29uY2F0Q1RNKGdyYWRpZW50
U2VydmVyLT5ncmFkaWVudFRyYW5zZm9ybSgpKTsKK30KKyNlbmRpZgorCitib29sIFNWR1BhaW50
U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJl
bmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSwgYm9vbCBpc1BhaW50
aW5nVGV4dCkgY29uc3QKK3sKKyAgICBtX293bmVyRWxlbWVudC0+YnVpbGRHcmFkaWVudCgpOwor
ICAgIEFTU0VSVCghbV9ncmFkaWVudCk7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5
bGUgPSBvYmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgYm9vbCBpc0ZpbGxlZCA9ICh0
eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFzRmlsbCgpOworICAgIGJv
b2wgaXNTdHJva2VkID0gKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3R5bGUt
Pmhhc1N0cm9rZSgpOworCisgICAgQVNTRVJUKGlzRmlsbGVkICYmICFpc1N0cm9rZWQgfHwgIWlz
RmlsbGVkICYmIGlzU3Ryb2tlZCk7CisKKyAgICBjb250ZXh0LT5zYXZlKCk7CisKKyAgICBpZiAo
aXNQYWludGluZ1RleHQpIHsKKyNpZiBQTEFURk9STShDRykKKyAgICAgICAgaWYgKCFjcmVhdGVN
YXNrQW5kU3dhcENvbnRleHRGb3JUZXh0R3JhZGllbnQoY29udGV4dCwgbV9zYXZlZENvbnRleHQs
IG1faW1hZ2VCdWZmZXIsIG9iamVjdCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUo
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAg
IGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShpc0ZpbGxlZCA/IGNUZXh0RmlsbCA6IGNUZXh0
U3Ryb2tlKTsKKyAgICB9CisKKyAgICBpZiAoaXNGaWxsZWQpIHsKKyAgICAgICAgY29udGV4dC0+
c2V0QWxwaGEoc3R5bGUtPmZpbGxPcGFjaXR5KCkpOworICAgICAgICBjb250ZXh0LT5zZXRGaWxs
R3JhZGllbnQobV9ncmFkaWVudCk7CisgICAgICAgIGNvbnRleHQtPnNldEZpbGxSdWxlKHN0eWxl
LT5maWxsUnVsZSgpKTsKKyAgICB9CisgICAgaWYgKGlzU3Ryb2tlZCkgeworICAgICAgICBjb250
ZXh0LT5zZXRBbHBoYShzdHlsZS0+c3Ryb2tlT3BhY2l0eSgpKTsKKyAgICAgICAgY29udGV4dC0+
c2V0U3Ryb2tlR3JhZGllbnQobV9ncmFkaWVudCk7CisgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVU
b0NvbnRleHQoY29udGV4dCwgb2JqZWN0LT5zdHlsZSgpLCBvYmplY3QpOworICAgIH0KKworICAg
IGlmIChib3VuZGluZ0JveE1vZGUoKSkgeworICAgICAgICBGbG9hdFJlY3QgYmJveCA9IG9iamVj
dC0+cmVsYXRpdmVCQm94KGZhbHNlKTsKKyAgICAgICAgLy8gRG9uJ3QgdXNlIGdyYWRpZW50ZXMg
Zm9yIDFkIG9iamVjdHMgbGlrZSBob3Jpem9udGFsL3ZlcnRpY2FsIAorICAgICAgICAvLyBsaW5l
cyBvciByZWN0YW5nbGVzIHdpdGhvdXQgd2lkdGggb3IgaGVpZ2h0LgorICAgICAgICBpZiAoYmJv
eC53aWR0aCgpID09IDAgfHwgYmJveC5oZWlnaHQoKSA9PSAwKSB7CisgICAgICAgICAgICBDb2xv
ciBjb2xvcigwLCAwLCAwKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNv
bG9yKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGNvbnRl
eHQtPnRyYW5zbGF0ZShiYm94LngoKSwgYmJveC55KCkpOworICAgICAgICBjb250ZXh0LT5zY2Fs
ZShGbG9hdFNpemUoYmJveC53aWR0aCgpLCBiYm94LmhlaWdodCgpKSk7CisKKyAgICAgICAgLy8g
V2l0aCBzY2FsaW5nIHRoZSBjb250ZXh0LCB0aGUgc3Ryb2tlVGhpY2tuZXNzIGlzIHNjYWxlZCB0
b28uIFdlIGhhdmUgdG8KKyAgICAgICAgLy8gdW5kbyB0aGlzLgorICAgICAgICBmbG9hdCBzdHJv
a2VUaGlja25lc3MgPSBjb250ZXh0LT5zdHJva2VUaGlja25lc3MoKSAvICgoYmJveC53aWR0aCgp
ICsgYmJveC5oZWlnaHQoKSkgLyAyKTsKKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tu
ZXNzKHN0cm9rZVRoaWNrbmVzcyk7CisgICAgfQorICAgIGNvbnRleHQtPmNvbmNhdENUTShncmFk
aWVudFRyYW5zZm9ybSgpKTsKKyAgICBjb250ZXh0LT5zZXRTcHJlYWRNZXRob2Qoc3ByZWFkTWV0
aG9kKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudDo6cmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJP
YmplY3QqIHBhdGgsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAgIGNvbnN0
IFNWR1JlbmRlclN0eWxlKiBzdHlsZSA9IHBhdGgtPnN0eWxlKCktPnN2Z1N0eWxlKCk7CisKKyAg
ICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN0eWxlLT5oYXNGaWxsKCkp
CisgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCk7CisKKyAgICBpZiAoKHR5cGUgJiBBcHBseVRv
U3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhhc1N0cm9rZSgpKQorICAgICAgICBjb250ZXh0
LT5zdHJva2VQYXRoKCk7Cit9CisKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6dGVhcmRv
d24oR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3Qs
IFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAorewor
I2lmIFBMQVRGT1JNKENHKQorICAgIC8vIHJlbmRlclBhdGgoKSBpcyBub3QgdXNlZCB3aGVuIHBh
aW50aW5nIHRleHQsIHNvIHdlIHBhaW50IHRoZSBncmFkaWVudCBkdXJpbmcgdGVhcmRvd24oKQor
ICAgIGlmIChpc1BhaW50aW5nVGV4dCAmJiBtX3NhdmVkQ29udGV4dCkgeworICAgICAgICAvLyBS
ZXN0b3JlIG9uLXNjcmVlbiBkcmF3aW5nIGNvbnRleHQKKyAgICAgICAgY29udGV4dCA9IG1fc2F2
ZWRDb250ZXh0OworICAgICAgICBtX3NhdmVkQ29udGV4dCA9IDA7CisKKyAgICAgICAgY2xpcFRv
VGV4dE1hc2soY29udGV4dCwgbV9pbWFnZUJ1ZmZlciwgb2JqZWN0LCB0aGlzKTsKKworICAgICAg
ICAvLyBmaW5hbGx5IGZpbGwgdGhlIHRleHQgY2xpcCB3aXRoIHRoZSBzaGFkaW5nCisgICAgICAg
IENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBtX2dyYWRp
ZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworIAorICAgICAgICBtX2ltYWdlQnVmZmVyLmNsZWFy
KCk7IC8vIHdlJ3JlIGRvbmUgd2l0aCBvdXIgdGV4dCBtYXNrIGJ1ZmZlcgorICAgIH0KKyNlbmRp
ZgorICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKK30KKwogVGV4dFN0cmVhbSYgU1ZHUGFpbnRTZXJ2
ZXJHcmFkaWVudDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QK
IHsKICAgICAvLyBHcmFkaWVudHMvcGF0dGVybnMgYXJlbid0IHNldHVwLCB1bnRpbCB0aGV5IGFy
ZSB1c2VkIGZvciBwYWludGluZy4gV29yayBhcm91bmQgdGhhdCBmYWN0LgpJbmRleDogV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaAkocmV2aXNpb24gMzg0
NDIpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogICAgICAgICAgICAgICAy
MDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMwLDM2ICszMSwyNiBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyLmgiCiAKICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotI2lmIFBM
QVRGT1JNKFFUKQotI2luY2x1ZGUgPHFnbG9iYWwuaD4KLVFUX0JFR0lOX05BTUVTUEFDRQotY2xh
c3MgUUdyYWRpZW50OwotUVRfRU5EX05BTUVTUEFDRQotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIGNsYXNzIEltYWdlQnVmZmVyOwogICAgIGNsYXNzIFNWR0dyYWRpZW50RWxl
bWVudDsKIAotI2lmIFBMQVRGT1JNKENHKQotICAgIHR5cGVkZWYgc3RkOjpwYWlyPENHRmxvYXQs
IENvbG9yPiBTVkdHcmFkaWVudFN0b3A7Ci0jZWxzZQogICAgIHR5cGVkZWYgc3RkOjpwYWlyPGZs
b2F0LCBDb2xvcj4gU1ZHR3JhZGllbnRTdG9wOwotI2VuZGlmCiAKICAgICBjbGFzcyBTVkdQYWlu
dFNlcnZlckdyYWRpZW50IDogcHVibGljIFNWR1BhaW50U2VydmVyIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIHZpcnR1YWwgflNWR1BhaW50U2VydmVyR3JhZGllbnQoKTsKIAotICAgICAgICBjb25z
dCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYgZ3JhZGllbnRTdG9wcygpIGNvbnN0OwotICAgICAg
ICB2b2lkIHNldEdyYWRpZW50U3RvcHMoY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mKTsK
KyAgICAgICAgdm9pZCBzZXRHcmFkaWVudChQYXNzUmVmUHRyPEdyYWRpZW50Pik7CisgICAgICAg
IEdyYWRpZW50KiBncmFkaWVudCgpIGNvbnN0OwogCiAgICAgICAgIEdyYWRpZW50U3ByZWFkTWV0
aG9kIHNwcmVhZE1ldGhvZCgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEdyYWRpZW50U3ByZWFk
TWV0aG9kKGNvbnN0IEdyYWRpZW50U3ByZWFkTWV0aG9kJik7CkBAIC03MywzMiArNjQsMjEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRUcmFu
c2Zvcm0oKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRHcmFkaWVudFRyYW5zZm9ybShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKTsKIAorICAgICAgICB2b2lkIHNldEdyYWRpZW50U3RvcHMoY29uc3Qg
VmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mIHN0b3BzKSB7IG1fc3RvcHMgPSBzdG9wczsgfQorICAg
ICAgICBjb25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYgZ3JhZGllbnRTdG9wcygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RvcHM7IH0KKwogICAgICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBzZXR1cChHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFp
bnRUYXJnZXRUeXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdDsKLSNpZiBQTEFURk9STShD
RykKICAgICAgICAgdmlydHVhbCB2b2lkIHRlYXJkb3duKEdyYXBoaWNzQ29udGV4dComLCBjb25z
dCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQp
IGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQq
JiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKIAotICAg
ICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgICAgIC8vIEhlbHBlcnMKLSAg
ICAgICAgdm9pZCB1cGRhdGVRdWFydHpHcmFkaWVudFN0b3BzQ2FjaGUoY29uc3QgVmVjdG9yPFNW
R0dyYWRpZW50U3RvcD4mKTsKLSAgICAgICAgdm9pZCB1cGRhdGVRdWFydHpHcmFkaWVudENhY2hl
KGNvbnN0IFNWR1BhaW50U2VydmVyR3JhZGllbnQqKTsKLSAgICAgICAgdm9pZCBoYW5kbGVCb3Vu
ZGluZ0JveE1vZGVBbmRHcmFkaWVudFRyYW5zZm9ybWF0aW9uKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JN
KFFUKQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBmaWxsQ29sb3JBcnJheShRR3JhZGll
bnQmLCBjb25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYsIGZsb2F0IG9wYWNpdHkpIGNvbnN0
OwotICAgICAgICB2aXJ0dWFsIFFHcmFkaWVudCBzZXR1cEdyYWRpZW50KEdyYXBoaWNzQ29udGV4
dComLCBjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdCA9IDA7Ci0jZW5kaWYKLQogICAgIHByb3Rl
Y3RlZDoKICAgICAgICAgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudChjb25zdCBTVkdHcmFkaWVudEVs
ZW1lbnQqIG93bmVyKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPFNW
R0dyYWRpZW50U3RvcD4gbV9zdG9wczsKKyAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBtX2dyYWRp
ZW50OwogICAgICAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZDsKICAgICAg
ICAgYm9vbCBtX2JvdW5kaW5nQm94TW9kZTsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1fZ3Jh
ZGllbnRUcmFuc2Zvcm07CkBAIC0xMDYsMjcgKzg2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIHN0cnVjdCB7
Ci0gICAgICAgICAgICBDR0Zsb2F0IGNvbG9yQXJyYXlbNF07Ci0gICAgICAgICAgICBDR0Zsb2F0
IG9mZnNldDsKLSAgICAgICAgICAgIENHRmxvYXQgcHJldmlvdXNEZWx0YUludmVyc2U7Ci0gICAg
ICAgIH0gUXVhcnR6R3JhZGllbnRTdG9wOwotICAgICAgICAKLSAgICAgICAgc3RydWN0IFNoYXJl
ZFN0b3BDYWNoZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZFN0b3BDYWNoZT4gewotICAgICAg
ICBwdWJsaWM6Ci0gICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRTdG9wQ2FjaGU+
IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRTdG9wQ2FjaGUpOyB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIFZlY3RvcjxRdWFydHpHcmFkaWVudFN0b3A+IG1fc3RvcHM7
Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgU2hhcmVkU3RvcENhY2hl
KCkgeyB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgUmVmUHRyPFNoYXJlZFN0b3BDYWNoZT4gbV9z
dG9wc0NhY2hlOwotCi0gICAgICAgIENHU2hhZGluZ1JlZiBtX3NoYWRpbmdDYWNoZTsKICAgICAg
ICAgbXV0YWJsZSBHcmFwaGljc0NvbnRleHQqIG1fc2F2ZWRDb250ZXh0OwotICAgICAgICBtdXRh
YmxlIEltYWdlQnVmZmVyKiBtX2ltYWdlQnVmZmVyOworICAgICAgICBtdXRhYmxlIE93blB0cjxJ
bWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKICNlbmRpZgogICAgIH07CiAKSW5kZXg6IFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudENhaXJvLmNwcAkocmV2aXNpb24gMzg0NDIpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9j
YWlyby9TVkdQYWludFNlcnZlckdyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDE2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0
b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRGlyayBTY2h1bHplIDx2YnM4NUBnbXgu
ZGU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudC5oIgotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnQuaCIKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmgiCi0KLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNp
bmNsdWRlICJSZW5kZXJQYXRoLmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRl
ICJTVkdHcmFkaWVudEVsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIFNW
R1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNv
bnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSwgYm9vbCBp
c1BhaW50aW5nVGV4dCkgY29uc3QKLXsKLSAgICBtX293bmVyRWxlbWVudC0+YnVpbGRHcmFkaWVu
dCgpOwotCi0gICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAg
ICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm47Ci0KLSAgICBjYWlyb19tYXRyaXhfdCBtYXRyaXg7
Ci0gICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkgKCZtYXRyaXgpOwotICAgIGNvbnN0IGNh
aXJvX21hdHJpeF90IGdyYWRpZW50X21hdHJpeCA9IGdyYWRpZW50VHJhbnNmb3JtKCk7Ci0KLSAg
ICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBvYmplY3QtPnN0eWxlKCktPnN2Z1N0
eWxlKCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwotCi0gICAg
aWYgKHRoaXMtPnR5cGUoKSA9PSBMaW5lYXJHcmFkaWVudFBhaW50U2VydmVyKSB7Ci0gICAgICAg
IGNvbnN0IFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQqIGxpbmVhciA9IHN0YXRpY19jYXN0
PGNvbnN0IFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQqPih0aGlzKTsKLQotICAgICAgICBp
ZiAoYm91bmRpbmdCb3hNb2RlKCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBiYm94ID0gb2Jq
ZWN0LT5yZWxhdGl2ZUJCb3goZmFsc2UpOwotICAgICAgICAgICAgaWYgKGJib3gud2lkdGgoKSA9
PSAwIHx8IGJib3guaGVpZ2h0KCkgPT0gMCkgewotICAgICAgICAgICAgICAgIGFwcGx5U3Ryb2tl
U3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVjdCk7Ci0gICAgICAgICAgICAgICAg
Y2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsIDAsIDAsIDApOwotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2Fpcm9fbWF0cml4X3RyYW5zbGF0
ZSgmbWF0cml4LCBiYm94LngoKSwgYmJveC55KCkpOwotICAgICAgICAgICAgY2Fpcm9fbWF0cml4
X3NjYWxlKCZtYXRyaXgsIGJib3gud2lkdGgoKSwgYmJveC5oZWlnaHQoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBkb3VibGUgeDAgPSBsaW5lYXItPmdyYWRpZW50U3RhcnQoKS54KCk7Ci0gICAg
ICAgIGRvdWJsZSB5MCA9IGxpbmVhci0+Z3JhZGllbnRTdGFydCgpLnkoKTsKLSAgICAgICAgZG91
YmxlIHgxID0gbGluZWFyLT5ncmFkaWVudEVuZCgpLngoKTsKLSAgICAgICAgZG91YmxlIHkxID0g
bGluZWFyLT5ncmFkaWVudEVuZCgpLnkoKTsKLQotICAgICAgICBwYXR0ZXJuID0gY2Fpcm9fcGF0
dGVybl9jcmVhdGVfbGluZWFyKHgwLCB5MCwgeDEsIHkxKTsKLQotICAgIH0gZWxzZSBpZiAodGhp
cy0+dHlwZSgpID09IFJhZGlhbEdyYWRpZW50UGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgY29uc3Qg
U1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCogcmFkaWFsID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
U1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCo+KHRoaXMpOwotCi0gICAgICAgIGlmIChib3Vu
ZGluZ0JveE1vZGUoKSkgewotICAgICAgICAgICAgRmxvYXRSZWN0IGJib3ggPSBvYmplY3QtPnJl
bGF0aXZlQkJveChmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoYmJveC53aWR0aCgpID09IDAgfHwg
YmJveC5oZWlnaHQoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRv
Q29udGV4dChjb250ZXh0LCBzdHlsZSwgb2JqZWN0KTsKLSAgICAgICAgICAgICAgICBjYWlyb19z
ZXRfc291cmNlX3JnYihjciwgMCwgMCwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYWlyb19tYXRyaXhfdHJhbnNsYXRlKCZtYXRy
aXgsIGJib3gueCgpLCBiYm94LnkoKSk7Ci0gICAgICAgICAgICBjYWlyb19tYXRyaXhfc2NhbGUo
Jm1hdHJpeCwgYmJveC53aWR0aCgpLCBiYm94LmhlaWdodCgpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGRvdWJsZSBjeCA9IHJhZGlhbC0+Z3JhZGllbnRDZW50ZXIoKS54KCk7Ci0gICAgICAgIGRv
dWJsZSBjeSA9IHJhZGlhbC0+Z3JhZGllbnRDZW50ZXIoKS55KCk7Ci0gICAgICAgIGRvdWJsZSBy
YWRpdXMgPSByYWRpYWwtPmdyYWRpZW50UmFkaXVzKCk7Ci0gICAgICAgIGRvdWJsZSBmeCA9IHJh
ZGlhbC0+Z3JhZGllbnRGb2NhbCgpLngoKTsKLSAgICAgICAgZG91YmxlIGZ5ID0gcmFkaWFsLT5n
cmFkaWVudEZvY2FsKCkueSgpOwotCi0gICAgICAgIGZ4IC09IGN4OwotICAgICAgICBmeSAtPSBj
eTsKLQotICAgICAgICBkb3VibGUgZnJhZGl1cyA9IDAuMDsKLQotICAgICAgICBpZiAoc3FydChm
eCAqIGZ4ICsgZnkgKiBmeSkgPj0gcmFkaXVzKSB7Ci0gICAgICAgICAgICBkb3VibGUgYW5nbGUg
PSBhdGFuMihmeSwgZngpOwotICAgICAgICAgICAgaWYgKChmeCArIGN4KSA8IGN4KQotICAgICAg
ICAgICAgICAgIGZ4ID0gY29zKGFuZ2xlKSAqIHJhZGl1cyArIDAuMDAyOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGZ4ID0gY29zKGFuZ2xlKSAqIHJhZGl1cyAtIDAuMDAyOwot
ICAgICAgICAgICAgaWYgKChmeSArIGN5KSA8IGN5KQotICAgICAgICAgICAgICAgIGZ5ID0gc2lu
KGFuZ2xlKSAqIHJhZGl1cyArIDAuMDAyOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGZ5ID0gc2luKGFuZ2xlKSAqIHJhZGl1cyAtIDAuMDAyOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX3JhZGlhbChmeCArIGN4LCBmeSArIGN5
LCBmcmFkaXVzLCBjeCwgY3ksIHJhZGl1cyk7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY2Fpcm9fcGF0dGVybl9zZXRfZmlsdGVyKHBhdHRlcm4s
IENBSVJPX0ZJTFRFUl9CSUxJTkVBUik7Ci0KLSAgICBzd2l0Y2ggKHNwcmVhZE1ldGhvZCgpKSB7
Ci0gICAgICAgIGNhc2UgU3ByZWFkTWV0aG9kUGFkOgotICAgICAgICAgICAgY2Fpcm9fcGF0dGVy
bl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9QQUQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVmbGVjdDoKLSAgICAgICAgICAgIGNhaXJv
X3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfUkVGTEVDVCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RSZXBlYXQ6Ci0gICAgICAg
ICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybiwgQ0FJUk9fRVhURU5EX1JFUEVB
VCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGNh
aXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfTk9ORSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYWlyb19tYXRyaXhfbXVsdGlwbHkoJm1hdHJp
eCwgJm1hdHJpeCwgJmdyYWRpZW50X21hdHJpeCk7Ci0gICAgY2Fpcm9fbWF0cml4X2ludmVydCgm
bWF0cml4KTsKLSAgICBjYWlyb19wYXR0ZXJuX3NldF9tYXRyaXgocGF0dGVybiwgJm1hdHJpeCk7
Ci0KLSAgICBjb25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYgc3RvcHMgPSBncmFkaWVudFN0
b3BzKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgZmxvYXQgb2Zmc2V0ID0gc3RvcHNbaV0uZmlyc3Q7Ci0gICAgICAgIENvbG9y
IGNvbG9yID0gc3RvcHNbaV0uc2Vjb25kOwotICAgICAgICBpZiAoaSA+IDAgJiYgb2Zmc2V0IDwg
c3RvcHNbaSAtIDFdLmZpcnN0KQotICAgICAgICAgICAgb2Zmc2V0ID0gc3RvcHNbaSAtIDFdLmZp
cnN0OwotCi0gICAgICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShwYXR0ZXJu
LCBvZmZzZXQsIGNvbG9yLnJlZCgpIC8gMjU1LjAsIGNvbG9yLmdyZWVuKCkgLyAyNTUuMCwgY29s
b3IuYmx1ZSgpIC8gMjU1LjAsIGNvbG9yLmFscGhhKCkgLyAyNTUuMCk7Ci0gICAgfQotCi0gICAg
aWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdmdTdHlsZS0+aGFzRmlsbCgp
KQotICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShzdmdTdHlsZS0+ZmlsbFJ1bGUoKSk7Ci0K
LSAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3ZnU3R5bGUtPmhh
c1N0cm9rZSgpKQotICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0
eWxlLCBvYmplY3QpOwotCi0gICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7Ci0gICAg
Y2Fpcm9fcGF0dGVybl9kZXN0cm95KHBhdHRlcm4pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9jZy9TVkdQYWludFNlcnZlckNnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9jZy9TVkdQYWludFNlcnZlckNnLmNwcAkocmV2aXNpb24gMzg0NDIpCisrKyBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckNnLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjAsMTIgKzYwLDYgQEAgdm9pZCBTVkdQYWludFNlcnZlcjo6c3Ryb2tlUGF0aChDR0NvbnRl
eAogICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiB9CiAKLXZvaWQgU1ZHUGFpbnRT
ZXJ2ZXI6OmNsaXBUb1N0cm9rZVBhdGgoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFJlbmRl
ck9iamVjdCopIGNvbnN0Ci17Ci0gICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBh
dGgoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKLX0KLQogdm9pZCBTVkdQ
YWludFNlcnZlcjo6ZmlsbFBhdGgoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFJlbmRlck9i
amVjdCogcGF0aCkgY29uc3QKIHsKICAgICBpZiAoIXBhdGggfHwgcGF0aC0+c3R5bGUoKS0+c3Zn
U3R5bGUoKS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpCkBAIC03NCwxNCArNjgsNiBAQCB2
b2lkIFNWR1BhaW50U2VydmVyOjpmaWxsUGF0aChDR0NvbnRleHRSCiAgICAgICAgIENHQ29udGV4
dEZpbGxQYXRoKGNvbnRleHQpOwogfQogCi12b2lkIFNWR1BhaW50U2VydmVyOjpjbGlwVG9GaWxs
UGF0aChDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXRoKSBjb25z
dAotewotICAgIGlmICghcGF0aCB8fCBwYXRoLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5maWxsUnVs
ZSgpID09IFJVTEVfRVZFTk9ERCkKLSAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwot
ICAgIGVsc2UKLSAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NW
R1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcAkocmV2aXNpb24gMzg0NDIpCisr
KyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMzNiArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLQot
ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlckdyYWRp
ZW50LmgiCi0KLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlJlbmRlck9i
amVjdC5oIgotI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1Bh
aW50U2VydmVyTGluZWFyR3JhZGllbnQuaCIKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlclJhZGlh
bEdyYWRpZW50LmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgotCi0jaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGF0aWMgdm9pZCByZWxlYXNlQ2FjaGVkU3RvcHModm9pZCogaW5mbykKLXsK
LSAgICBzdGF0aWNfY2FzdDxTVkdQYWludFNlcnZlckdyYWRpZW50OjpTaGFyZWRTdG9wQ2FjaGUq
PihpbmZvKS0+ZGVyZWYoKTsKLX0KLQotc3RhdGljIHZvaWQgY2dHcmFkaWVudENhbGxiYWNrKHZv
aWQqIGluZm8sIGNvbnN0IENHRmxvYXQqIGluVmFsdWVzLCBDR0Zsb2F0KiBvdXRDb2xvcikKLXsK
LSAgICBTVkdQYWludFNlcnZlckdyYWRpZW50OjpTaGFyZWRTdG9wQ2FjaGUqIHN0b3BzQ2FjaGUg
PSBzdGF0aWNfY2FzdDxTVkdQYWludFNlcnZlckdyYWRpZW50OjpTaGFyZWRTdG9wQ2FjaGUqPihp
bmZvKTsKLSAgICAKLSAgICBTVkdQYWludFNlcnZlckdyYWRpZW50OjpRdWFydHpHcmFkaWVudFN0
b3AqIHN0b3BzID0gc3RvcHNDYWNoZS0+bV9zdG9wcy5kYXRhKCk7Ci0gICAgICAgIAotICAgIGlu
dCBzdG9wc0NvdW50ID0gc3RvcHNDYWNoZS0+bV9zdG9wcy5zaXplKCk7Ci0KLSAgICBDR0Zsb2F0
IGluVmFsdWUgPSBpblZhbHVlc1swXTsKLQotICAgIGlmICghc3RvcHNDb3VudCkgewotICAgICAg
ICBvdXRDb2xvclswXSA9IDA7Ci0gICAgICAgIG91dENvbG9yWzFdID0gMDsKLSAgICAgICAgb3V0
Q29sb3JbMl0gPSAwOwotICAgICAgICBvdXRDb2xvclszXSA9IDA7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9IGVsc2UgaWYgKHN0b3BzQ291bnQgPT0gMSkgewotICAgICAgICBtZW1jcHkob3V0Q29s
b3IsIHN0b3BzWzBdLmNvbG9yQXJyYXksIDQgKiBzaXplb2YoQ0dGbG9hdCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCEoaW5WYWx1ZSA+IHN0b3BzWzBdLm9mZnNldCkpCi0g
ICAgICAgIG1lbWNweShvdXRDb2xvciwgc3RvcHNbMF0uY29sb3JBcnJheSwgNCAqIHNpemVvZihD
R0Zsb2F0KSk7Ci0gICAgZWxzZSBpZiAoIShpblZhbHVlIDwgc3RvcHNbc3RvcHNDb3VudCAtIDFd
Lm9mZnNldCkpCi0gICAgICAgIG1lbWNweShvdXRDb2xvciwgc3RvcHNbc3RvcHNDb3VudCAtIDFd
LmNvbG9yQXJyYXksIDQgKiBzaXplb2YoQ0dGbG9hdCkpOwotICAgIGVsc2UgewotICAgICAgICBp
bnQgbmV4dFN0b3BJbmRleCA9IDA7Ci0gICAgICAgIHdoaWxlICgobmV4dFN0b3BJbmRleCA8IHN0
b3BzQ291bnQpICYmIChzdG9wc1tuZXh0U3RvcEluZGV4XS5vZmZzZXQgPCBpblZhbHVlKSkKLSAg
ICAgICAgICAgIG5leHRTdG9wSW5kZXgrKzsKLQotICAgICAgICBDR0Zsb2F0KiBuZXh0Q29sb3JB
cnJheSA9IHN0b3BzW25leHRTdG9wSW5kZXhdLmNvbG9yQXJyYXk7Ci0gICAgICAgIENHRmxvYXQq
IHByZXZpb3VzQ29sb3JBcnJheSA9IHN0b3BzW25leHRTdG9wSW5kZXggLSAxXS5jb2xvckFycmF5
OwotICAgICAgICBDR0Zsb2F0IGRpZmZGcm9tUHJldmlvdXMgPSBpblZhbHVlIC0gc3RvcHNbbmV4
dFN0b3BJbmRleCAtIDFdLm9mZnNldDsKLSAgICAgICAgQ0dGbG9hdCBwZXJjZW50ID0gZGlmZkZy
b21QcmV2aW91cyAqIHN0b3BzW25leHRTdG9wSW5kZXhdLnByZXZpb3VzRGVsdGFJbnZlcnNlOwot
Ci0gICAgICAgIG91dENvbG9yWzBdID0gKCgxLjBmIC0gcGVyY2VudCkgKiBwcmV2aW91c0NvbG9y
QXJyYXlbMF0gKyBwZXJjZW50ICogbmV4dENvbG9yQXJyYXlbMF0pOwotICAgICAgICBvdXRDb2xv
clsxXSA9ICgoMS4wZiAtIHBlcmNlbnQpICogcHJldmlvdXNDb2xvckFycmF5WzFdICsgcGVyY2Vu
dCAqIG5leHRDb2xvckFycmF5WzFdKTsKLSAgICAgICAgb3V0Q29sb3JbMl0gPSAoKDEuMGYgLSBw
ZXJjZW50KSAqIHByZXZpb3VzQ29sb3JBcnJheVsyXSArIHBlcmNlbnQgKiBuZXh0Q29sb3JBcnJh
eVsyXSk7Ci0gICAgICAgIG91dENvbG9yWzNdID0gKCgxLjBmIC0gcGVyY2VudCkgKiBwcmV2aW91
c0NvbG9yQXJyYXlbM10gKyBwZXJjZW50ICogbmV4dENvbG9yQXJyYXlbM10pOwotICAgIH0KLSAg
ICAvLyBGSVhNRTogaGF2ZSB0byBoYW5kbGUgdGhlIHNwcmVhZE1ldGhvZCgpcyBoZXJlIFNQUkVB
RE1FVEhPRF9SRVBFQVQsIGV0Yy4KLX0KLQotc3RhdGljIENHU2hhZGluZ1JlZiBDR1NoYWRpbmdS
ZWZGb3JMaW5lYXJHcmFkaWVudChjb25zdCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50KiBz
ZXJ2ZXIpCi17Ci0gICAgQ0dQb2ludCBzdGFydCA9IENHUG9pbnQoc2VydmVyLT5ncmFkaWVudFN0
YXJ0KCkpOwotICAgIENHUG9pbnQgZW5kID0gQ0dQb2ludChzZXJ2ZXItPmdyYWRpZW50RW5kKCkp
OwotCi0gICAgQ0dGdW5jdGlvbkNhbGxiYWNrcyBjYWxsYmFja3MgPSB7MCwgY2dHcmFkaWVudENh
bGxiYWNrLCByZWxlYXNlQ2FjaGVkU3RvcHN9OwotICAgIENHRmxvYXQgZG9tYWluTGltaXRzWzJd
ID0gezAsIDF9OwotICAgIENHRmxvYXQgcmFuZ2VMaW1pdHNbOF0gPSB7MCwgMSwgMCwgMSwgMCwg
MSwgMCwgMX07Ci0gICAgc2VydmVyLT5tX3N0b3BzQ2FjaGUtPnJlZigpOwotICAgIENHRnVuY3Rp
b25SZWYgc2hhZGluZ0Z1bmN0aW9uID0gQ0dGdW5jdGlvbkNyZWF0ZShzZXJ2ZXItPm1fc3RvcHND
YWNoZS5nZXQoKSwgMSwgZG9tYWluTGltaXRzLCA0LCByYW5nZUxpbWl0cywgJmNhbGxiYWNrcyk7
Ci0KLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURl
dmljZVJHQigpOwotICAgIENHU2hhZGluZ1JlZiBzaGFkaW5nID0gQ0dTaGFkaW5nQ3JlYXRlQXhp
YWwoY29sb3JTcGFjZSwgc3RhcnQsIGVuZCwgc2hhZGluZ0Z1bmN0aW9uLCB0cnVlLCB0cnVlKTsK
LSAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9yU3BhY2UpOwotICAgIENHRnVuY3Rpb25SZWxl
YXNlKHNoYWRpbmdGdW5jdGlvbik7Ci0gICAgcmV0dXJuIHNoYWRpbmc7Ci19Ci0KLXN0YXRpYyBD
R1NoYWRpbmdSZWYgQ0dTaGFkaW5nUmVmRm9yUmFkaWFsR3JhZGllbnQoY29uc3QgU1ZHUGFpbnRT
ZXJ2ZXJSYWRpYWxHcmFkaWVudCogc2VydmVyKQotewotICAgIENHUG9pbnQgY2VudGVyID0gQ0dQ
b2ludChzZXJ2ZXItPmdyYWRpZW50Q2VudGVyKCkpOwotICAgIENHUG9pbnQgZm9jdXMgPSBDR1Bv
aW50KHNlcnZlci0+Z3JhZGllbnRGb2NhbCgpKTsKLSAgICBkb3VibGUgcmFkaXVzID0gc2VydmVy
LT5ncmFkaWVudFJhZGl1cygpOwotCi0gICAgZG91YmxlIGZkeCA9IGZvY3VzLnggLSBjZW50ZXIu
eDsKLSAgICBkb3VibGUgZmR5ID0gZm9jdXMueSAtIGNlbnRlci55OwotCi0gICAgLy8gU3BlYzog
SWYgKGZ4LCBmeSkgbGllcyBvdXRzaWRlIHRoZSBjaXJjbGUgZGVmaW5lZCBieSAoY3gsIGN5KSBh
bmQgciwgc2V0IChmeCwgZnkpCi0gICAgLy8gdG8gdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBv
ZiB0aGUgbGluZSB0aHJvdWdoIChmeCwgZnkpIGFuZCB0aGUgY2lyY2xlLgotICAgIGlmIChzcXJ0
KGZkeCAqIGZkeCArIGZkeSAqIGZkeSkgPiByYWRpdXMpIHsgCi0gICAgICAgIGRvdWJsZSBhbmds
ZSA9IGF0YW4yKGZvY3VzLnkgKiAxMDAuMCwgZm9jdXMueCAqIDEwMC4wKTsKLSAgICAgICAgZm9j
dXMueCA9IG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChjb3MoYW5nbGUpICogcmFkaXVzKTsKLSAg
ICAgICAgZm9jdXMueSA9IG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChzaW4oYW5nbGUpICogcmFk
aXVzKTsKLSAgICB9Ci0KLSAgICBDR0Z1bmN0aW9uQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHswLCBj
Z0dyYWRpZW50Q2FsbGJhY2ssIHJlbGVhc2VDYWNoZWRTdG9wc307Ci0gICAgQ0dGbG9hdCBkb21h
aW5MaW1pdHNbMl0gPSB7MCwgMX07Ci0gICAgQ0dGbG9hdCByYW5nZUxpbWl0c1s4XSA9IHswLCAx
LCAwLCAxLCAwLCAxLCAwLCAxfTsKLSAgICBzZXJ2ZXItPm1fc3RvcHNDYWNoZS0+cmVmKCk7Ci0g
ICAgQ0dGdW5jdGlvblJlZiBzaGFkaW5nRnVuY3Rpb24gPSBDR0Z1bmN0aW9uQ3JlYXRlKHNlcnZl
ci0+bV9zdG9wc0NhY2hlLmdldCgpLCAxLCBkb21haW5MaW1pdHMsIDQsIHJhbmdlTGltaXRzLCAm
Y2FsbGJhY2tzKTsKLQotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dDb2xvclNw
YWNlQ3JlYXRlRGV2aWNlUkdCKCk7Ci0gICAgQ0dTaGFkaW5nUmVmIHNoYWRpbmcgPSBDR1NoYWRp
bmdDcmVhdGVSYWRpYWwoY29sb3JTcGFjZSwgZm9jdXMsIDAsIGNlbnRlciwgbmFycm93UHJlY2lz
aW9uVG9DR0Zsb2F0KHJhZGl1cyksIHNoYWRpbmdGdW5jdGlvbiwgdHJ1ZSwgdHJ1ZSk7Ci0gICAg
Q0dDb2xvclNwYWNlUmVsZWFzZShjb2xvclNwYWNlKTsKLSAgICBDR0Z1bmN0aW9uUmVsZWFzZShz
aGFkaW5nRnVuY3Rpb24pOwotICAgIHJldHVybiBzaGFkaW5nOwotfQotCi12b2lkIFNWR1BhaW50
U2VydmVyR3JhZGllbnQ6OnVwZGF0ZVF1YXJ0ekdyYWRpZW50U3RvcHNDYWNoZShjb25zdCBWZWN0
b3I8U1ZHR3JhZGllbnRTdG9wPiYgc3RvcHMpCi17Ci0gICAgbV9zdG9wc0NhY2hlID0gU2hhcmVk
U3RvcENhY2hlOjpjcmVhdGUoKTsKLSAgICBWZWN0b3I8UXVhcnR6R3JhZGllbnRTdG9wPiYgc3Rv
cHNDYWNoZSA9IG1fc3RvcHNDYWNoZS0+bV9zdG9wczsKLSAgICBzdG9wc0NhY2hlLnJlc2l6ZShz
dG9wcy5zaXplKCkpOwotICAgIENHRmxvYXQgcHJldmlvdXNPZmZzZXQgPSAwLjBmOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9wcy5zaXplKCk7ICsraSkgewotICAgICAgICBDR0Zs
b2F0IGN1cnJPZmZzZXQgPSBtaW4obWF4KHN0b3BzW2ldLmZpcnN0LCBwcmV2aW91c09mZnNldCks
IHN0YXRpY19jYXN0PENHRmxvYXQ+KDEuMCkpOwotICAgICAgICBzdG9wc0NhY2hlW2ldLm9mZnNl
dCA9IGN1cnJPZmZzZXQ7Ci0gICAgICAgIHN0b3BzQ2FjaGVbaV0ucHJldmlvdXNEZWx0YUludmVy
c2UgPSAxLjBmIC8gKGN1cnJPZmZzZXQgLSBwcmV2aW91c09mZnNldCk7Ci0gICAgICAgIHByZXZp
b3VzT2Zmc2V0ID0gY3Vyck9mZnNldDsKLSAgICAgICAgQ0dGbG9hdCogY2EgPSBzdG9wc0NhY2hl
W2ldLmNvbG9yQXJyYXk7Ci0gICAgICAgIHN0b3BzW2ldLnNlY29uZC5nZXRSR0JBKGNhWzBdLCBj
YVsxXSwgY2FbMl0sIGNhWzNdKTsKLSAgICB9Ci19Ci0KLXZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudDo6dXBkYXRlUXVhcnR6R3JhZGllbnRDYWNoZShjb25zdCBTVkdQYWludFNlcnZlckdyYWRp
ZW50KiBzZXJ2ZXIpCi17Ci0gICAgLy8gY2FjaGUgb3VyIG93biBjb3B5IG9mIHRoZSBzdG9wcyBm
b3IgZmFzdGVyIGFjY2Vzcy4KLSAgICAvLyB0aGlzIGlzIGxlZ2FjeSBjb2RlLCBwcm9iYWJseSBj
b3VsZCBiZSByZXdvcmtlZC4KLSAgICBpZiAoIW1fc3RvcHNDYWNoZSkKLSAgICAgICAgdXBkYXRl
UXVhcnR6R3JhZGllbnRTdG9wc0NhY2hlKGdyYWRpZW50U3RvcHMoKSk7Ci0KLSAgICBDR1NoYWRp
bmdSZWxlYXNlKG1fc2hhZGluZ0NhY2hlKTsKLQotICAgIGlmICh0eXBlKCkgPT0gUmFkaWFsR3Jh
ZGllbnRQYWludFNlcnZlcikgewotICAgICAgICBjb25zdCBTVkdQYWludFNlcnZlclJhZGlhbEdy
YWRpZW50KiByYWRpYWwgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdQYWludFNlcnZlclJhZGlhbEdy
YWRpZW50Kj4oc2VydmVyKTsKLSAgICAgICAgbV9zaGFkaW5nQ2FjaGUgPSBDR1NoYWRpbmdSZWZG
b3JSYWRpYWxHcmFkaWVudChyYWRpYWwpOwotICAgIH0gZWxzZSBpZiAodHlwZSgpID09IExpbmVh
ckdyYWRpZW50UGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgY29uc3QgU1ZHUGFpbnRTZXJ2ZXJMaW5l
YXJHcmFkaWVudCogbGluZWFyID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHUGFpbnRTZXJ2ZXJMaW5l
YXJHcmFkaWVudCo+KHNlcnZlcik7Ci0gICAgICAgIG1fc2hhZGluZ0NhY2hlID0gQ0dTaGFkaW5n
UmVmRm9yTGluZWFyR3JhZGllbnQobGluZWFyKTsKLSAgICB9Ci19Ci0KLS8vIEhlbHBlciBmdW5j
dGlvbiBmb3IgdGV4dCBwYWludGluZwotc3RhdGljIGlubGluZSBjb25zdCBSZW5kZXJPYmplY3Qq
IGZpbmRUZXh0Um9vdE9iamVjdChjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0KQotewotICAgIHdo
aWxlIChzdGFydCAmJiAhc3RhcnQtPmlzU1ZHVGV4dCgpKQotICAgICAgICBzdGFydCA9IHN0YXJ0
LT5wYXJlbnQoKTsKLQotICAgIEFTU0VSVChzdGFydCk7Ci0gICAgQVNTRVJUKHN0YXJ0LT5pc1NW
R1RleHQoKSk7Ci0KLSAgICByZXR1cm4gc3RhcnQ7Ci19Ci0KLXZvaWQgU1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudDo6dGVhcmRvd24oR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVy
T2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdU
ZXh0KSBjb25zdAotewotICAgIENHU2hhZGluZ1JlZiBzaGFkaW5nID0gbV9zaGFkaW5nQ2FjaGU7
Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKLSAgICBBU1NFUlQoY29udGV4dFJlZik7Ci0KLSAgICAvLyBBcyByZW5kZXJQYXRoKCkgaXMg
bm90IHVzZWQgd2hlbiBwYWludGluZyB0ZXh0LCBzcGVjaWFsIGxvZ2ljIG5lZWRlZCBoZXJlLgot
ICAgIGlmIChpc1BhaW50aW5nVGV4dCkgewotICAgICAgICBpZiAobV9zYXZlZENvbnRleHQpIHsK
LSAgICAgICAgICAgIEZsb2F0UmVjdCBtYXNrQkJveCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0
Kj4oZmluZFRleHRSb290T2JqZWN0KG9iamVjdCkpLT5yZWxhdGl2ZUJCb3goZmFsc2UpOwotCi0g
ICAgICAgICAgICAvLyBGaXh1cCB0cmFuc2Zvcm1hdGlvbnMgdG8gYmUgYWJsZSB0byBjbGlwIHRv
IG1hc2sKLSAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBvYmplY3QtPmFi
c29sdXRlVHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgdGV4dEJvdW5kYXJ5ID0g
dHJhbnNmb3JtLm1hcFJlY3QobWFza0JCb3gpOwotCi0gICAgICAgICAgICBJbnRTaXplIG1hc2tT
aXplKGxyb3VuZGYodGV4dEJvdW5kYXJ5LndpZHRoKCkpLCBscm91bmRmKHRleHRCb3VuZGFyeS5o
ZWlnaHQoKSkpOwotICAgICAgICAgICAgY2xhbXBJbWFnZUJ1ZmZlclNpemVUb1ZpZXdwb3J0KG9i
amVjdC0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSwgbWFza1NpemUpOwotCi0gICAgICAgICAgICBp
ZiAobWFza1NpemUud2lkdGgoKSA8IHN0YXRpY19jYXN0PGludD4odGV4dEJvdW5kYXJ5LndpZHRo
KCkpKQotICAgICAgICAgICAgICAgIHRleHRCb3VuZGFyeS5zZXRXaWR0aChtYXNrU2l6ZS53aWR0
aCgpKTsKLQotICAgICAgICAgICAgaWYgKG1hc2tTaXplLmhlaWdodCgpIDwgc3RhdGljX2Nhc3Q8
aW50Pih0ZXh0Qm91bmRhcnkuaGVpZ2h0KCkpKQotICAgICAgICAgICAgICAgIHRleHRCb3VuZGFy
eS5zZXRIZWlnaHQobWFza1NpemUuaGVpZ2h0KCkpOwotCi0gICAgICAgICAgICAvLyBDbGlwIGN1
cnJlbnQgY29udGV4dCB0byBtYXNrIGltYWdlIChncmFkaWVudCkKLSAgICAgICAgICAgIG1fc2F2
ZWRDb250ZXh0LT5jb25jYXRDVE0odHJhbnNmb3JtLmludmVyc2UoKSk7Ci0gICAgICAgICAgICBt
X3NhdmVkQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIodGV4dEJvdW5kYXJ5LCBtX2ltYWdlQnVm
ZmVyKTsKLSAgICAgICAgICAgIG1fc2F2ZWRDb250ZXh0LT5jb25jYXRDVE0odHJhbnNmb3JtKTsK
LQotICAgICAgICAgICAgaGFuZGxlQm91bmRpbmdCb3hNb2RlQW5kR3JhZGllbnRUcmFuc2Zvcm1h
dGlvbihtX3NhdmVkQ29udGV4dCwgbWFza0JCb3gpOwotCi0gICAgICAgICAgICAvLyBSZXN0b3Jl
IG9uLXNjcmVlbiBkcmF3aW5nIGNvbnRleHQsIGFmdGVyIHdlIGdvdCB0aGUgaW1hZ2Ugb2YgdGhl
IGdyYWRpZW50Ci0gICAgICAgICAgICBkZWxldGUgbV9pbWFnZUJ1ZmZlcjsKLQotICAgICAgICAg
ICAgY29udGV4dCA9IG1fc2F2ZWRDb250ZXh0OwotICAgICAgICAgICAgY29udGV4dFJlZiA9IGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgICAgICAgICBtX3NhdmVkQ29udGV4dCA9
IDA7Ci0gICAgICAgICAgICBtX2ltYWdlQnVmZmVyID0gMDsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHRSZWYsIHNoYWRpbmcpOwotICAgIGNvbnRl
eHQtPnJlc3RvcmUoKTsKLX0KLQotdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpyZW5kZXJQ
YXRoKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcGF0aCwg
U1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Ci17Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gcGF0aC0+c3R5bGUoKTsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9IGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEFTU0VSVChjb250ZXh0UmVmKTsKLSAgICAKLSAgICBi
b29sIGlzRmlsbGVkID0gKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN0eWxlLT5z
dmdTdHlsZSgpLT5oYXNGaWxsKCk7Ci0KLSAgICAvLyBDb21wdXRlIGRlc3RpbmF0aW9uIG9iamVj
dCBib3VuZGluZyBib3gKLSAgICBGbG9hdFJlY3Qgb2JqZWN0QkJveDsKLSAgICBpZiAoYm91bmRp
bmdCb3hNb2RlKCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IGJib3ggPSBwYXRoLT5yZWxhdGl2ZUJC
b3goZmFsc2UpOwotICAgICAgICBpZiAoYmJveC53aWR0aCgpID4gMCAmJiBiYm94LmhlaWdodCgp
ID4gMCkKLSAgICAgICAgICAgIG9iamVjdEJCb3ggPSBiYm94OwotICAgIH0KLQotICAgIGlmIChp
c0ZpbGxlZCkKLSAgICAgICAgY2xpcFRvRmlsbFBhdGgoY29udGV4dFJlZiwgcGF0aCk7Ci0gICAg
ZWxzZQotICAgICAgICBjbGlwVG9TdHJva2VQYXRoKGNvbnRleHRSZWYsIHBhdGgpOwotCi0gICAg
aGFuZGxlQm91bmRpbmdCb3hNb2RlQW5kR3JhZGllbnRUcmFuc2Zvcm1hdGlvbihjb250ZXh0LCBv
YmplY3RCQm94KTsKLX0KLQotdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpoYW5kbGVCb3Vu
ZGluZ0JveE1vZGVBbmRHcmFkaWVudFRyYW5zZm9ybWF0aW9uKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0KSBjb25zdAotewotICAgIGlmIChib3Vu
ZGluZ0JveE1vZGUoKSkgewotICAgICAgICAvLyBDaG9vc2UgZGVmYXVsdCBncmFkaWVudCBib3Vu
ZGluZyBib3gKLSAgICAgICAgRmxvYXRSZWN0IGdyYWRpZW50QkJveCgwLjBmLCAwLjBmLCAxLjBm
LCAxLjBmKTsKLQotICAgICAgICAvLyBHZW5lcmF0ZSBhIHRyYW5zZm9ybSB0byBtYXAgYmV0d2Vl
biBib3RoIGJvdW5kaW5nIGJveGVzCi0gICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShtYWtlTWFw
QmV0d2VlblJlY3RzKGdyYWRpZW50QkJveCwgdGFyZ2V0UmVjdCkpOwotICAgIH0KLQotICAgIC8v
IEFwcGx5IHRoZSBncmFkaWVudCdzIG93biB0cmFuc2Zvcm0KLSAgICBjb250ZXh0LT5jb25jYXRD
VE0oZ3JhZGllbnRUcmFuc2Zvcm0oKSk7Ci19Ci0KLWJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBv
YmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25z
dAotewotICAgIG1fb3duZXJFbGVtZW50LT5idWlsZEdyYWRpZW50KCk7Ci0KLSAgICAvLyBXZSBu
ZWVkIGEgaG9vayB0byBjYWxsIHRoaXMgd2hlbiB0aGUgZ3JhZGllbnQgZ2V0cyB1cGRhdGVkLCBi
ZWZvcmUgZHJhd24uCi0gICAgaWYgKCFtX3NoYWRpbmdDYWNoZSkKLSAgICAgICAgY29uc3RfY2Fz
dDxTVkdQYWludFNlcnZlckdyYWRpZW50Kj4odGhpcyktPnVwZGF0ZVF1YXJ0ekdyYWRpZW50Q2Fj
aGUodGhpcyk7Ci0KLSAgICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9IGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOwotICAgIEFTU0VSVChjb250ZXh0UmVmKTsKLQotICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKLQotICAgIGJvb2wgaXNGaWxsZWQgPSAodHlwZSAm
IEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKTsK
LSAgICBib29sIGlzU3Ryb2tlZCA9ICh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYm
IHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKTsKLQotICAgIEFTU0VSVChpc0ZpbGxlZCAm
JiAhaXNTdHJva2VkIHx8ICFpc0ZpbGxlZCAmJiBpc1N0cm9rZWQpOwotCi0gICAgY29udGV4dC0+
c2F2ZSgpOwotICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHRSZWYsIGlzRmlsbGVkID8gc3R5
bGUtPnN2Z1N0eWxlKCktPmZpbGxPcGFjaXR5KCkgOiBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tl
T3BhY2l0eSgpKTsKLQotICAgIGlmIChpc1BhaW50aW5nVGV4dCkgewotICAgICAgICBGbG9hdFJl
Y3QgbWFza0JCb3ggPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGZpbmRUZXh0Um9vdE9iamVj
dChvYmplY3QpKS0+cmVsYXRpdmVCQm94KGZhbHNlKTsKLSAgICAgICAgSW50UmVjdCBtYXNrUmVj
dCA9IGVuY2xvc2luZ0ludFJlY3Qob2JqZWN0LT5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3Qo
bWFza0JCb3gpKTsKLQotICAgICAgICBJbnRTaXplIG1hc2tTaXplKG1hc2tSZWN0LndpZHRoKCks
IG1hc2tSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgY2xhbXBJbWFnZUJ1ZmZlclNpemVUb1ZpZXdw
b3J0KG9iamVjdC0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSwgbWFza1NpemUpOwotCi0gICAgICAg
IGF1dG9fcHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1h
c2tTaXplLCBmYWxzZSk7Ci0KLSAgICAgICAgaWYgKCFtYXNrSW1hZ2UuZ2V0KCkpIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1h
c2tJbWFnZS0+Y29udGV4dCgpOwotICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5zYXZlKCk7Ci0K
LSAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKGlzRmlsbGVkID8g
Y1RleHRGaWxsIDogY1RleHRTdHJva2UpOwotICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFu
c2xhdGUoLW1hc2tSZWN0LngoKSwgLW1hc2tSZWN0LnkoKSk7Ci0gICAgICAgIG1hc2tJbWFnZUNv
bnRleHQtPmNvbmNhdENUTShvYmplY3QtPmFic29sdXRlVHJhbnNmb3JtKCkpOwotCi0gICAgICAg
IG1faW1hZ2VCdWZmZXIgPSBtYXNrSW1hZ2UucmVsZWFzZSgpOwotICAgICAgICBtX3NhdmVkQ29u
dGV4dCA9IGNvbnRleHQ7Ci0KLSAgICAgICAgY29udGV4dCA9IG1hc2tJbWFnZUNvbnRleHQ7Ci0g
ICAgICAgIGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICB9Ci0K
LSAgICBpZiAoaXNTdHJva2VkKQotICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNv
bnRleHQsIHN0eWxlLCBvYmplY3QpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudDo6aW52YWxpZGF0ZSgpCi17Ci0gICAgU1ZHUGFpbnRTZXJ2ZXI6
OmludmFsaWRhdGUoKTsKLQotICAgIC8vIEludmFsaWRhdGUgY2FjaGVzCi0gICAgQ0dTaGFkaW5n
UmVsZWFzZShtX3NoYWRpbmdDYWNoZSk7Ci0KLSAgICBtX3N0b3BzQ2FjaGUgPSAwOwotICAgIG1f
c2hhZGluZ0NhY2hlID0gMDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYK
SW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyR3JhZGllbnRRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudFF0LmNwcAkocmV2aXNpb24gMzg0NDIpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9x
dC9TVkdQYWludFNlcnZlckdyYWRpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMCAr
MCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdp
bGRmb3hAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJT
VkdQYWludFNlcnZlckdyYWRpZW50LmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2lu
Y2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgotCi0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5j
bHVkZSA8UVBhaW50ZXJQYXRoPgotI2luY2x1ZGUgPFFDb2xvcj4KLSNpbmNsdWRlIDxRR3JhZGll
bnQ+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkg
bGluZWFyICYgcmFkaWFsIGdyYWRpZW50Ci12b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmZp
bGxDb2xvckFycmF5KFFHcmFkaWVudCYgZ3JhZGllbnQsIGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVu
dFN0b3A+JiBzdG9wcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgb3BhY2l0eSkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c3RvcHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZmxvYXQgb2Zmc2V0ID0gc3RvcHNbaV0uZmly
c3Q7Ci0gICAgICAgIENvbG9yIGNvbG9yID0gc3RvcHNbaV0uc2Vjb25kOwotCi0gICAgICAgIFFD
b2xvciBjKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCkpOwotICAgICAg
ICBjLnNldEFscGhhKGludChjb2xvci5hbHBoYSgpICogb3BhY2l0eSkpOwotCi0gICAgICAgIGdy
YWRpZW50LnNldENvbG9yQXQob2Zmc2V0LCBjKTsKLSAgICB9Ci19Ci0KLWJvb2wgU1ZHUGFpbnRT
ZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVu
ZGVyT2JqZWN0KiBvYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNW
R1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAotewotICAg
IG1fb3duZXJFbGVtZW50LT5idWlsZEdyYWRpZW50KCk7Ci0KLSAgICBRUGFpbnRlciogcGFpbnRl
cihjb250ZXh0ID8gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiAwKTsKLSAgICBRX0FTU0VS
VChwYWludGVyKTsKLQotICAgIFFQYWludGVyUGF0aCogcGF0aChjb250ZXh0ID8gY29udGV4dC0+
Y3VycmVudFBhdGgoKSA6IDApOwotICAgIFFfQVNTRVJUKHBhdGgpOwotCi0gICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gb2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpOwotICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKLQotICAgIFFHcmFkaWVudCBn
cmFkaWVudCA9IHNldHVwR3JhZGllbnQoY29udGV4dCwgb2JqZWN0KTsKLQotICAgIHBhaW50ZXIt
PnNldFBlbihRdDo6Tm9QZW4pOwotICAgIHBhaW50ZXItPnNldEJydXNoKFF0OjpOb0JydXNoKTsK
LQotICAgIGlmIChzcHJlYWRNZXRob2QoKSA9PSBTcHJlYWRNZXRob2RSZXBlYXQpCi0gICAgICAg
IGdyYWRpZW50LnNldFNwcmVhZChRR3JhZGllbnQ6OlJlcGVhdFNwcmVhZCk7Ci0gICAgZWxzZSBp
ZiAoc3ByZWFkTWV0aG9kKCkgPT0gU3ByZWFkTWV0aG9kUmVmbGVjdCkKLSAgICAgICAgZ3JhZGll
bnQuc2V0U3ByZWFkKFFHcmFkaWVudDo6UmVmbGVjdFNwcmVhZCk7Ci0gICAgZWxzZQotICAgICAg
ICBncmFkaWVudC5zZXRTcHJlYWQoUUdyYWRpZW50OjpQYWRTcHJlYWQpOyAgICAKLSAgICBkb3Vi
bGUgb3BhY2l0eSA9IDEuMDsKLQotICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlw
ZSkgJiYgc3ZnU3R5bGUtPmhhc0ZpbGwoKSkgewotICAgICAgICBmaWxsQ29sb3JBcnJheShncmFk
aWVudCwgZ3JhZGllbnRTdG9wcygpLCBvcGFjaXR5KTsKLQotICAgICAgICBRQnJ1c2ggYnJ1c2go
Z3JhZGllbnQpOwotICAgICAgICBicnVzaC5zZXRNYXRyaXgoZ3JhZGllbnRUcmFuc2Zvcm0oKSk7
Ci0KLSAgICAgICAgcGFpbnRlci0+c2V0QnJ1c2goYnJ1c2gpOwotICAgICAgICBjb250ZXh0LT5z
ZXRGaWxsUnVsZShzdmdTdHlsZS0+ZmlsbFJ1bGUoKSk7Ci0gICAgfQotCi0gICAgaWYgKCh0eXBl
ICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmIHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkgewot
ICAgICAgICBmaWxsQ29sb3JBcnJheShncmFkaWVudCwgZ3JhZGllbnRTdG9wcygpLCBvcGFjaXR5
KTsKLQotICAgICAgICBRUGVuIHBlbjsKLSAgICAgICAgUUJydXNoIGJydXNoKGdyYWRpZW50KTsK
LSAgICAgICAgYnJ1c2guc2V0TWF0cml4KGdyYWRpZW50VHJhbnNmb3JtKCkpOwotICAgICAgICBw
ZW4uc2V0QnJ1c2goYnJ1c2gpOwotICAgICAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKLQotICAg
ICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3QpOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZgotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9x
dC9TVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdC5jcHAJKHJl
dmlzaW9uIDM4NDQyKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJM
aW5lYXJHcmFkaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBACi0vKgot
ICAgIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9y
Zz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCi0gICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJTVkdQYWludFNlcnZl
ckxpbmVhckdyYWRpZW50LmgiCi0jaW5jbHVkZSAiU1ZHR3JhZGllbnRFbGVtZW50LmgiCi0KLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCi0KLSNp
bmNsdWRlIDxRTGluZWFyR3JhZGllbnQ+Ci0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVkZSA8
UVBhaW50ZXJQYXRoPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVFHcmFkaWVudCBTVkdQYWlu
dFNlcnZlckxpbmVhckdyYWRpZW50OjpzZXR1cEdyYWRpZW50KEdyYXBoaWNzQ29udGV4dComIGNv
bnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KSBjb25zdAotewotICAgIFFQYWludGVy
UGF0aCogcGF0aChjb250ZXh0ID8gY29udGV4dC0+Y3VycmVudFBhdGgoKSA6IDApOwotICAgIFFf
QVNTRVJUKHBhdGgpOwotCi0gICAgZG91YmxlIHgxLCB4MiwgeTEsIHkyOwotICAgIGlmIChib3Vu
ZGluZ0JveE1vZGUoKSkgewotICAgICAgICBRUmVjdEYgYmJveCA9IHBhdGgtPmJvdW5kaW5nUmVj
dCgpOwotICAgICAgICB4MSA9IGJib3gueCgpOwotICAgICAgICB5MSA9IGJib3gueSgpOwotICAg
ICAgICB4MiA9IGJib3gueCgpICsgYmJveC53aWR0aCgpOwotICAgICAgICB5MiA9IGJib3gueSgp
ICsgYmJveC5oZWlnaHQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICB4MSA9IGdyYWRpZW50U3Rh
cnQoKS54KCk7Ci0gICAgICAgIHkxID0gZ3JhZGllbnRTdGFydCgpLnkoKTsKLSAgICAgICAgeDIg
PSBncmFkaWVudEVuZCgpLngoKTsKLSAgICAgICAgeTIgPSBncmFkaWVudEVuZCgpLnkoKTsKLSAg
ICB9Ci0KLSAgICBRTGluZWFyR3JhZGllbnQgZ3JhZGllbnQoUVBvaW50Rih4MSwgeTEpLCBRUG9p
bnRGKHgyLCB5MikpOwotCi0gICAgcmV0dXJuIGdyYWRpZW50OwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyUmFkaWFsR3JhZGll
bnRRdC5jcHAJKHJldmlzaW9uIDM4NDQyKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZH
UGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5OCAr
MCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdp
bGRmb3hAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJT
VkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5j
bHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVkZSA8UVBhaW50ZXJQYXRoPgotI2luY2x1ZGUgPFFSYWRp
YWxHcmFkaWVudD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1RR3JhZGllbnQgU1ZHUGFpbnRT
ZXJ2ZXJSYWRpYWxHcmFkaWVudDo6c2V0dXBHcmFkaWVudChHcmFwaGljc0NvbnRleHQqJiBjb250
ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkgY29uc3QKLXsKLSAgICBRUGFpbnRlciog
cGFpbnRlcihjb250ZXh0ID8gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiAwKTsKLSAgICBR
X0FTU0VSVChwYWludGVyKTsKLQotICAgIFFQYWludGVyUGF0aCogcGF0aChjb250ZXh0ID8gY29u
dGV4dC0+Y3VycmVudFBhdGgoKSA6IDApOwotICAgIFFfQVNTRVJUKHBhdGgpOwotCi0gICAgUmVu
ZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwotCi0gICAgUU1hdHJpeCBt
YXQgPSBwYWludGVyLT5tYXRyaXgoKTsKLQotICAgIGRvdWJsZSBjeCwgZngsIGN5LCBmeSwgcjsK
LSAgICBpZiAoYm91bmRpbmdCb3hNb2RlKCkpIHsKLSAgICAgICAgUVJlY3RGIGJib3ggPSBwYXRo
LT5ib3VuZGluZ1JlY3QoKTsgCi0gICAgICAgIGN4ID0gZG91YmxlKGJib3gubGVmdCgpKSArIChk
b3VibGUoZ3JhZGllbnRDZW50ZXIoKS54KCkgLyAxMDAuMCkgKiBkb3VibGUoYmJveC53aWR0aCgp
KSk7Ci0gICAgICAgIGN5ID0gZG91YmxlKGJib3gudG9wKCkpICsgKGRvdWJsZShncmFkaWVudENl
bnRlcigpLnkoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LmhlaWdodCgpKSk7Ci0gICAgICAgIGZ4
ID0gZG91YmxlKGJib3gubGVmdCgpKSArIChkb3VibGUoZ3JhZGllbnRGb2NhbCgpLngoKSAvIDEw
MC4wKSAqIGRvdWJsZShiYm94LndpZHRoKCkpKSAtIGN4OwotICAgICAgICBmeSA9IGRvdWJsZShi
Ym94LnRvcCgpKSArIChkb3VibGUoZ3JhZGllbnRGb2NhbCgpLnkoKSAvIDEwMC4wKSAqIGRvdWJs
ZShiYm94LmhlaWdodCgpKSkgLSBjeTsKLSAgICAgICAgciA9IGRvdWJsZShncmFkaWVudFJhZGl1
cygpIC8gMTAwLjApICogKHNxcnQocG93KGJib3gud2lkdGgoKSwgMikgKyBwb3coYmJveC5oZWln
aHQoKSwgMikpKTsKLQotICAgICAgICBmbG9hdCB3aWR0aCA9IGJib3gud2lkdGgoKTsKLSAgICAg
ICAgZmxvYXQgaGVpZ2h0ID0gYmJveC5oZWlnaHQoKTsKLQotICAgICAgICBpbnQgZGlmZiA9IGlu
dCh3aWR0aCAtIGhlaWdodCk7IC8vIGFsbG93IHNsaWdodCB0b2xlcmFuY2UKLSAgICAgICAgaWYg
KCEoZGlmZiA+IC0yICYmIGRpZmYgPCAyKSkgewotICAgICAgICAgICAgLy8gbWFrZSBlbGxpcHRp
Y2FsIG9yIGNpcmN1bGFyIGRlcGVuZGluZyBvbiBiYm94IGFzcGVjdCByYXRpbwotICAgICAgICAg
ICAgZmxvYXQgcmF0aW9YID0gKHdpZHRoIC8gaGVpZ2h0KTsKLSAgICAgICAgICAgIGZsb2F0IHJh
dGlvWSA9IChoZWlnaHQgLyB3aWR0aCk7Ci0gICAgICAgICAgICBtYXQuc2NhbGUoKHdpZHRoID4g
aGVpZ2h0KSA/IDEgOiByYXRpb1gsICh3aWR0aCA+IGhlaWdodCkgPyByYXRpb1kgOiAxKTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGN4ID0gZ3JhZGllbnRDZW50ZXIoKS54KCk7
Ci0gICAgICAgIGN5ID0gZ3JhZGllbnRDZW50ZXIoKS55KCk7Ci0KLSAgICAgICAgZnggPSBncmFk
aWVudEZvY2FsKCkueCgpOwotICAgICAgICBmeSA9IGdyYWRpZW50Rm9jYWwoKS55KCk7Ci0KLSAg
ICAgICAgZnggLT0gY3g7Ci0gICAgICAgIGZ5IC09IGN5OwotCi0gICAgICAgIHIgPSBncmFkaWVu
dFJhZGl1cygpOwotICAgIH0KLQotICAgIGlmIChzcXJ0KGZ4ICogZnggKyBmeSAqIGZ5KSA+IHIp
IHsKLSAgICAgICAgLy8gU3BlYzogSWYgKGZ4LCBmeSkgbGllcyBvdXRzaWRlIHRoZSBjaXJjbGUg
ZGVmaW5lZCBieSAoY3gsIGN5KSBhbmQgciwgc2V0IChmeCwgZnkpCi0gICAgICAgIC8vIHRvIHRo
ZSBwb2ludCBvZiBpbnRlcnNlY3Rpb24gb2YgdGhlIGxpbmUgdGhyb3VnaCAoZngsIGZ5KSBhbmQg
dGhlIGNpcmNsZS4KLSAgICAgICAgZG91YmxlIGFuZ2xlID0gYXRhbjIoZnksIGZ4KTsKLSAgICAg
ICAgZnggPSBpbnQoY29zKGFuZ2xlKSAqIHIpIC0gMTsKLSAgICAgICAgZnkgPSBpbnQoc2luKGFu
Z2xlKSAqIHIpIC0gMTsKLSAgICB9Ci0KLSAgICBRUmFkaWFsR3JhZGllbnQgZ3JhZGllbnQoUVBv
aW50RihjeCwgY3kpLCBncmFkaWVudFJhZGl1cygpLCBRUG9pbnRGKGZ4ICsgY3gsIGZ5ICsgY3kp
KTsKLQotICAgIHJldHVybiBncmFkaWVudDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9ldAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25635</attachid>
            <date>2008-12-01 13:00:18 -0800</date>
            <delta_ts>2008-12-03 08:06:48 -0800</delta_ts>
            <desc>makes SVGPaintServerGradient platform-independent</desc>
            <filename>gradient.patch</filename>
            <type>text/plain</type>
            <size>62227</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODg2MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMDgtMTItMDEgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IHVzZSBvZiB0aGUgZ3JhZGllbnQgY29kZSBpbiBHcmFwaGljc0NvbnRleHQgYW5kIGdldCByaWQg
b2YgbW9zdCBvZiB0aGUKKyAgICAgICAgcGxhdGZvcm0gZGVwZW5kZW50IGNvZGUuCisKKyAgICAg
ICAgU1ZHIHNob3VsZCB1c2UgdGhlIG5ldyBHcmFkaWVudCBzdXBwb3J0IG9uIEdyYXBoaWNzQ29u
dGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1
NDMKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUucHJvOgor
ICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFNpemUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2l6ZTo6c2hydW5rVG8pOgor
ICAgICAgICAqIHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHR3JhZGllbnRFbGVtZW50OjpidWlsZFN0b3BzKToKKyAgICAgICAgKiBzdmcvU1ZHTGluZWFy
R3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpbmVhckdyYWRpZW50
RWxlbWVudDo6YnVpbGRHcmFkaWVudCk6CisgICAgICAgICogc3ZnL1NWR1JhZGlhbEdyYWRpZW50
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6
OmJ1aWxkR3JhZGllbnQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5o
OgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OlNWR1BhaW50U2VydmVyR3Jh
ZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6flNWR1Bh
aW50U2VydmVyR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudDo6Z3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dDo6c2V0R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFRleHRSb290T2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1hc2tBbmRTd2FwQ29udGV4dEZvclRleHRHcmFkaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpjbGlwVG9UZXh0TWFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXR1cCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YWludFNlcnZlckdyYWRpZW50OjpyZW5kZXJQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
aW50U2VydmVyR3JhZGllbnQ6OnRlYXJkb3duKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudDo6c2V0R3JhZGllbnRTdG9wcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNl
cnZlckdyYWRpZW50OjpncmFkaWVudFN0b3BzKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZH
UGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudC5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQ
YWludFNlcnZlclJhZGlhbEdyYWRpZW50Lmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2NhaXJv
L1NWR1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3Zn
L2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyQ2cuY3BwOgorICAgICAgICAqIHN2Zy9ncmFwaGlj
cy9jZy9TVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlckdyYWRpZW50UXQuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclJhZGlh
bEdyYWRpZW50UXQuY3BwOiBSZW1vdmVkLgorCiAyMDA4LTEyLTAxICBUb3IgQXJuZSBWZXN0YsO4
ICA8dGF2ZXN0Ym9AdHJvbGx0ZWNoLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBI
YXVzbWFubi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMzg4NTgpCisrKyBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgxLDcgKzI3ODEsNiBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9j
YWlyby9SZW5kZXJQYXRoQ2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9T
VkdQYWludFNlcnZlckNhaXJvLmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcCBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fp
cm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9jYWlyby9TVkdSZXNvdXJjZUZpbHRlckNhaXJvLmNwcCBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvY2Fpcm8vU1ZHUmVzb3VyY2VNYXNrZXJDYWlyby5jcHAKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gMzg4NTgp
CisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUyLDExICsxNzUy
LDggQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0xKSB7CiAKIFNPVVJDRVMgKz0gXAog
ICAgICAgICBzdmcvZ3JhcGhpY3MvcXQvUmVuZGVyUGF0aFF0LmNwcCBcCi0gICAgICAgIHN2Zy9n
cmFwaGljcy9xdC9TVkdQYWludFNlcnZlckdyYWRpZW50UXQuY3BwIFwKLSAgICAgICAgc3ZnL2dy
YXBoaWNzL3F0L1NWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdC5jcHAgXAogICAgICAgICBz
dmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQuY3BwIFwKICAgICAgICAgc3Zn
L2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyUXQuY3BwIFwKLSAgICAgICAgc3ZnL2dyYXBoaWNz
L3F0L1NWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdC5jcHAgXAogICAgICAgICBzdmcvZ3Jh
cGhpY3MvcXQvU1ZHUmVzb3VyY2VGaWx0ZXJRdC5jcHAgXAogICAgICAgICBzdmcvZ3JhcGhpY3Mv
cXQvU1ZHUmVzb3VyY2VNYXNrZXJRdC5jcHAKIApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCShyZXZpc2lvbiAzODg1OCkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTE1NDQwLDI2ICsxNTQ0MCw2IEBACiAJ
CQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQkJPC9GaWxlPg0KIAkJCQkJPEZpbGUNCi0J
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xjZ1xTVkdQYWludFNlcnZlckdyYWRp
ZW50Q2cuY3BwIg0KLQkJCQkJCT4NCi0JCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQkJ
TmFtZT0iRGVidWdfQ2Fpcm98V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
Ig0KLQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQotCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIg0KLQkJCQkJCQkvPg0KLQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQkJPEZp
bGVDb25maWd1cmF0aW9uDQotCQkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm98V2luMzIiDQotCQkJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQot
CQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQkvPg0KLQkJCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGNnXFNWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcCIN
CiAJCQkJCQk+DQogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQpAQCAtMTU3NTIsNDIgKzE1NzMy
LDYgQEAKIAkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8
RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGNhaXJvXFNWR1BhaW50
U2VydmVyR3JhZGllbnRDYWlyby5jcHAiDQotCQkJCQkJPg0KLQkJCQkJCTxGaWxlQ29uZmlndXJh
dGlvbg0KLQkJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiDQotCQkJCQkJCT4NCi0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiDQotCQkJCQkJCS8+DQotCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0J
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0J
CQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJCT4NCi0JCQkJCQkJPFRvb2wN
Ci0JCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCS8+DQotCQkJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQkJTmFt
ZT0iRGVidWdfSW50ZXJuYWx8V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
Ig0KLQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQotCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIg0KLQkJCQkJCQkvPg0KLQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQkJPEZp
bGVDb25maWd1cmF0aW9uDQotCQkJCQkJCU5hbWU9IlJlbGVhc2VfUEdPfFdpbjMyIg0KLQkJCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCQkJPg0KLQkJCQkJCQk8VG9vbA0KLQkJ
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJLz4NCi0JCQkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xjYWlyb1xTVkdQYWludFNlcnZlclBhdHRlcm5DYWlyby5j
cHAiDQogCQkJCQkJPg0KIAkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzODg1OCkKKysrIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0zMTUzLDcgKzMxNTMsNiBAQAogCQlCMjU1OTkyRDBEMDBEOEJBMDBCQjgyNUMgLyogQ2dTdXBw
b3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1
OTg5MTBEMDBEOEI4MDBCQjgyNUMgLyogQ2dTdXBwb3J0LmggKi87IH07CiAJCUIyNTU5OTJFMEQw
MEQ4QkEwMEJCODI1QyAvKiBSZW5kZXJQYXRoQ2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTIwRDAwRDhCODAwQkI4MjVDIC8qIFJlbmRl
clBhdGhDZy5jcHAgKi87IH07CiAJCUIyNTU5OTJGMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWlu
dFNlcnZlckNnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyNTU5ODkzMEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckNnLmNwcCAqLzsg
fTsKLQkJQjI1NTk5MzAwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyR3JhZGllbnRD
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1
OTg5NDBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcCAqLzsg
fTsKIAkJQjI1NTk5MzEwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyUGF0dGVybkNn
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5
ODk1MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAgKi87IH07
CiAJCUIyNTU5OTM1MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdSZXNvdXJjZUZpbHRlckNnLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTkwRDAw
RDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlRmlsdGVyQ2cubW0gKi87IH07CiAJCUIyNTU5OTM3
MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1hc2tlckNnLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OUIwRDAwRDhCODAwQkI4MjVD
IC8qIFNWR1Jlc291cmNlTWFza2VyQ2cubW0gKi87IH07CkBAIC03ODE3LDcgKzc4MTYsNiBAQAog
CQlCMjU1OTg5MTBEMDBEOEI4MDBCQjgyNUMgLyogQ2dTdXBwb3J0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDZ1N1cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjI1NTk4OTIwRDAwRDhCODAwQkI4MjVDIC8qIFJlbmRlclBhdGhDZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyUGF0aENnLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OTMwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Bh
aW50U2VydmVyQ2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNW
R1BhaW50U2VydmVyQ2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OTg5
NDBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjU1OTg5NTBEMDBEOEI4MDBCQjgy
NUMgLyogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OTkwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNl
RmlsdGVyQ2cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU1ZH
UmVzb3VyY2VGaWx0ZXJDZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4
OUIwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFza2VyQ2cubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjk5LDcgKzEyNjk3LDYgQEAKIAkJCQlCMjU1
OTg5MTBEMDBEOEI4MDBCQjgyNUMgLyogQ2dTdXBwb3J0LmggKi8sCiAJCQkJQjI1NTk4OTIwRDAw
RDhCODAwQkI4MjVDIC8qIFJlbmRlclBhdGhDZy5jcHAgKi8sCiAJCQkJQjI1NTk4OTMwRDAwRDhC
ODAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyQ2cuY3BwICovLAotCQkJCUIyNTU5ODk0MEQwMEQ4
QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwICovLAogCQkJCUIyNTU5
ODk1MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAgKi8sCiAJ
CQkJQjI1NTk4OTkwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlRmlsdGVyQ2cubW0gKi8s
CiAJCQkJQjI1NTk4OUIwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFza2VyQ2cubW0g
Ki8sCkBAIC0xNzg0MCw3ICsxNzgzNyw2IEBACiAJCQkJQjI1NTk5QTYwRDAwRDhCQTAwQkI4MjVD
IC8qIFNWR1BhaW50U2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNTU5OTJGMEQwMEQ4
QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckNnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
NTU5OUE4MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50LmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUIyNTU5OTMwMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZl
ckdyYWRpZW50Q2cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI1NTk5QUEwRDAwRDhCQTAwQkI4
MjVDIC8qIFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjI1NTk5QUMwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyUGF0dGVybi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMjU1OTkzMTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUGFpbnRT
ZXJ2ZXJQYXR0ZXJuQ2cuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRTaXplLmgJKHJldmlzaW9uIDM4ODU4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogICAgICAgICAgICAgICAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDYgKzY4LDEyIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1faGVpZ2h0ID4gb3RoZXIubV9oZWlnaHQgPyBtX2hlaWdodCA6
IG90aGVyLm1faGVpZ2h0KTsKICAgICB9CiAKKyAgICBGbG9hdFNpemUgc2hydW5rVG8oY29uc3Qg
RmxvYXRTaXplJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSht
X3dpZHRoIDwgb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAorICAgICAg
ICAgICBtX2hlaWdodCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdo
dCk7CisgICAgfQorCiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgZXhwbGljaXQgRmxvYXRTaXplKGNv
bnN0IENHU2l6ZSYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3Nz
eQogICAgIG9wZXJhdG9yIENHU2l6ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHR3Jh
ZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAzODg1OCkKKysrIFdlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCBWZWN0b3I8U1ZHR3Jh
ZGllbnRTdG9wPiBTVkdHcmFkaWVudEVsZW1lCiAgICAgICAgICAgICAgICAgb3BhY2l0eSA9IHN0
b3BTdHlsZS0+c3ZnU3R5bGUoKS0+c3RvcE9wYWNpdHkoKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgc3RvcHMuYXBwZW5kKG1ha2VHcmFkaWVudFN0b3Aoc3RvcE9mZnNldCwgbWFrZVJH
QkEoY29sb3IucmVkKCksIGNvbG9yLmdyZWVuKCksIGNvbG9yLmJsdWUoKSwgaW50KG9wYWNpdHkg
KiAyNTUuKSkpKTsKKyAgICAgICAgICAgIHN0b3BzLmFwcGVuZChtYWtlR3JhZGllbnRTdG9wKHN0
b3BPZmZzZXQsIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3IucmdiKCksIG9wYWNpdHkpKSk7
CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRF
bGVtZW50LmNwcAkocmV2aXNpb24gMzg4NTgpCisrKyBXZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFk
aWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsOCBAQAogLyoKICAgICBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgS0RFIHByb2plY3QKKyAgICAgICAgICAgICAgICAgIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDggRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTgxLDE4ICs4MSwzMyBAQCB2b2lkIFNW
R0xpbmVhckdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkCiB7CiAgICAgTGluZWFyR3JhZGllbnRB
dHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBjb2xsZWN0R3JhZGllbnRQcm9wZXJ0aWVzKCk7CiAKLSAg
ICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnkgZ3JhZGllbnQgY29udGFpbmluZyBzdG9wIGVsZW1l
bnRzLCBpZ25vcmUgdGhlIHJlcXVlc3QuCi0gICAgaWYgKGF0dHJpYnV0ZXMuc3RvcHMoKS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIFJlZlB0cjxTVkdQYWludFNlcnZlckxpbmVh
ckdyYWRpZW50PiBsaW5lYXJHcmFkaWVudCA9IFdURjo6c3RhdGljX3BvaW50ZXJfY2FzdDxTVkdQ
YWludFNlcnZlckxpbmVhckdyYWRpZW50PihtX3Jlc291cmNlKTsKIAotICAgIGxpbmVhckdyYWRp
ZW50LT5zZXRHcmFkaWVudFN0b3BzKGF0dHJpYnV0ZXMuc3RvcHMoKSk7CisgICAgRmxvYXRQb2lu
dCBzdGFydFBvaW50ID0gRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKGF0dHJpYnV0ZXMueDEo
KSwgYXR0cmlidXRlcy55MSgpKTsKKyAgICBGbG9hdFBvaW50IGVuZFBvaW50ID0gRmxvYXRQb2lu
dDo6bmFycm93UHJlY2lzaW9uKGF0dHJpYnV0ZXMueDIoKSwgYXR0cmlidXRlcy55MigpKTsKKwor
ICAgIFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKHN0YXJ0UG9p
bnQsIGVuZFBvaW50KTsKKworICAgIFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+IG1fc3RvcHMgPSBh
dHRyaWJ1dGVzLnN0b3BzKCk7CisgICAgZmxvYXQgcHJldmlvdXNPZmZzZXQgPSAwLjBmOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0b3BzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGZsb2F0IG9mZnNldCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHByZXZpb3VzT2Zmc2V0LCBtX3N0b3Bz
W2ldLmZpcnN0KSwgMS4wZik7CisgICAgICAgIHByZXZpb3VzT2Zmc2V0ID0gb2Zmc2V0OworICAg
ICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKG9mZnNldCwgbV9zdG9wc1tpXS5zZWNvbmQpOwor
ICAgIH0KKworICAgIGxpbmVhckdyYWRpZW50LT5zZXRHcmFkaWVudChncmFkaWVudCk7CisKKyAg
ICAvLyBUaGlzIGNvZGUgc2hvdWxkIGdvIGF3YXkuICBQYWludFNlcnZlcnMgc2hvdWxkIGdvIGF3
YXkgdG9vLgorICAgIC8vIE9ubHkgdGhpcyBjb2RlIHNob3VsZCBjYXJlIGFib3V0IGJvdW5kaW5n
IGJveGVzCiAgICAgbGluZWFyR3JhZGllbnQtPnNldEJvdW5kaW5nQm94TW9kZShhdHRyaWJ1dGVz
LmJvdW5kaW5nQm94TW9kZSgpKTsKKyAgICBsaW5lYXJHcmFkaWVudC0+c2V0R3JhZGllbnRTdG9w
cyhhdHRyaWJ1dGVzLnN0b3BzKCkpOworCisgICAgLy8gVGhlc2Ugc2hvdWxkIHBvc3NpYmx5IGJl
IHN1cHBvcnRlZCBvbiBHcmFkaWVudAogICAgIGxpbmVhckdyYWRpZW50LT5zZXRHcmFkaWVudFNw
cmVhZE1ldGhvZChhdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpKTsKICAgICBsaW5lYXJHcmFkaWVu
dC0+c2V0R3JhZGllbnRUcmFuc2Zvcm0oYXR0cmlidXRlcy5ncmFkaWVudFRyYW5zZm9ybSgpKTsK
LSAgICBsaW5lYXJHcmFkaWVudC0+c2V0R3JhZGllbnRTdGFydChGbG9hdFBvaW50OjpuYXJyb3dQ
cmVjaXNpb24oYXR0cmlidXRlcy54MSgpLCBhdHRyaWJ1dGVzLnkxKCkpKTsKLSAgICBsaW5lYXJH
cmFkaWVudC0+c2V0R3JhZGllbnRFbmQoRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKGF0dHJp
YnV0ZXMueDIoKSwgYXR0cmlidXRlcy55MigpKSk7CisgICAgbGluZWFyR3JhZGllbnQtPnNldEdy
YWRpZW50U3RhcnQoc3RhcnRQb2ludCk7CisgICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRpZW50
RW5kKGVuZFBvaW50KTsKIH0KIAogTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzIFNWR0xpbmVhckdy
YWRpZW50RWxlbWVudDo6Y29sbGVjdEdyYWRpZW50UHJvcGVydGllcygpIGNvbnN0CkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4ODU4KQor
KysgV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw4ICsxLDggQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgot
Ci0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisgICAgICAgICAgICAg
ICAgICAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgICAgICAgICAgICAgICAg
ICAyMDA4IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogCiAgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC04OSwxOSArODksNDggQEAgdm9pZCBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmJ1aWxk
R3JhZAogewogICAgIFJhZGlhbEdyYWRpZW50QXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gY29sbGVj
dEdyYWRpZW50UHJvcGVydGllcygpOwogCi0gICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55IGdy
YWRpZW50IGNvbnRhaW5pbmcgc3RvcCBlbGVtZW50cywgaWdub3JlIHRoZSByZXF1ZXN0LgotICAg
IGlmIChhdHRyaWJ1dGVzLnN0b3BzKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KICAg
ICBSZWZQdHI8U1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudD4gcmFkaWFsR3JhZGllbnQgPSBX
VEY6OnN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudD4obV9y
ZXNvdXJjZSk7CiAKLSAgICByYWRpYWxHcmFkaWVudC0+c2V0R3JhZGllbnRTdG9wcyhhdHRyaWJ1
dGVzLnN0b3BzKCkpOworICAgIGRvdWJsZSBhZGp1c3RlZEZvY3VzWCA9IGF0dHJpYnV0ZXMuZngo
KTsKKyAgICBkb3VibGUgYWRqdXN0ZWRGb2N1c1kgPSBhdHRyaWJ1dGVzLmZ5KCk7CisKKyAgICBk
b3VibGUgZmR4ID0gYXR0cmlidXRlcy5meCgpIC0gYXR0cmlidXRlcy5jeCgpOworICAgIGRvdWJs
ZSBmZHkgPSBhdHRyaWJ1dGVzLmZ5KCkgLSBhdHRyaWJ1dGVzLmN5KCk7CisKKyAgICAvLyBTcGVj
OiBJZiAoZngsIGZ5KSBsaWVzIG91dHNpZGUgdGhlIGNpcmNsZSBkZWZpbmVkIGJ5IChjeCwgY3kp
IGFuZAorICAgIC8vIHIsIHNldCAoZngsIGZ5KSB0byB0aGUgcG9pbnQgb2YgaW50ZXJzZWN0aW9u
IG9mIHRoZSBsaW5lIHRocm91Z2gKKyAgICAvLyAoZngsIGZ5KSBhbmQgdGhlIGNpcmNsZS4KKyAg
ICBpZiAoc3FydChmZHggKiBmZHggKyBmZHkgKiBmZHkpID4gYXR0cmlidXRlcy5yKCkpIHsKKyAg
ICAgICAgZG91YmxlIGFuZ2xlID0gYXRhbjIoYXR0cmlidXRlcy5meSgpICogMTAwLjAsIGF0dHJp
YnV0ZXMuZngoKSAqIDEwMC4wKTsKKyAgICAgICAgYWRqdXN0ZWRGb2N1c1ggPSBjb3MoYW5nbGUp
ICogYXR0cmlidXRlcy5yKCk7CisgICAgICAgIGFkanVzdGVkRm9jdXNZID0gc2luKGFuZ2xlKSAq
IGF0dHJpYnV0ZXMucigpOworICAgIH0KKworICAgIEZsb2F0UG9pbnQgZm9jYWxQb2ludCA9IEZs
b2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihhdHRyaWJ1dGVzLmZ4KCksIGF0dHJpYnV0ZXMuZnko
KSk7CisgICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludCA9IEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNp
c2lvbihhdHRyaWJ1dGVzLmN4KCksIGF0dHJpYnV0ZXMuY3koKSk7CisKKyAgICBSZWZQdHI8R3Jh
ZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZSgKKyAgICAgICAgRmxvYXRQb2ludDo6
bmFycm93UHJlY2lzaW9uKGFkanVzdGVkRm9jdXNYLCBhZGp1c3RlZEZvY3VzWSksCisgICAgICAg
IDAuZiwgLy8gU1ZHIGRvZXMgbm90IHN1cHBvcnQgYSAiZm9jdXMgcmFkaXVzIgorICAgICAgICBj
ZW50ZXJQb2ludCwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChhdHRyaWJ1dGVzLnIo
KSkpOworCisgICAgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4gc3RvcHMgPSBhdHRyaWJ1dGVzLnN0
b3BzKCk7CisgICAgZmxvYXQgcHJldmlvdXNPZmZzZXQgPSAwLjBmOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzdG9wcy5zaXplKCk7ICsraSkgeworICAgICAgICAgZmxvYXQgb2Zmc2V0
ID0gc3RkOjptaW4oc3RkOjptYXgocHJldmlvdXNPZmZzZXQsIHN0b3BzW2ldLmZpcnN0KSwgMS4w
Zik7CisgICAgICAgICBwcmV2aW91c09mZnNldCA9IG9mZnNldDsKKyAgICAgICAgIGdyYWRpZW50
LT5hZGRDb2xvclN0b3Aob2Zmc2V0LCBzdG9wc1tpXS5zZWNvbmQpOworICAgIH0KKworICAgIHJh
ZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudChncmFkaWVudCk7CiAgICAgcmFkaWFsR3JhZGllbnQt
PnNldEJvdW5kaW5nQm94TW9kZShhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKTsKICAgICBy
YWRpYWxHcmFkaWVudC0+c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoYXR0cmlidXRlcy5zcHJlYWRN
ZXRob2QoKSk7IAogICAgIHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudFRyYW5zZm9ybShhdHRy
aWJ1dGVzLmdyYWRpZW50VHJhbnNmb3JtKCkpOwotICAgIHJhZGlhbEdyYWRpZW50LT5zZXRHcmFk
aWVudENlbnRlcihGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24oYXR0cmlidXRlcy5jeCgpLCBh
dHRyaWJ1dGVzLmN5KCkpKTsKLSAgICByYWRpYWxHcmFkaWVudC0+c2V0R3JhZGllbnRGb2NhbChG
bG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24oYXR0cmlidXRlcy5meCgpLCBhdHRyaWJ1dGVzLmZ5
KCkpKTsKKyAgICByYWRpYWxHcmFkaWVudC0+c2V0R3JhZGllbnRDZW50ZXIoY2VudGVyUG9pbnQp
OworICAgIHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudEZvY2FsKGZvY2FsUG9pbnQpOwogICAg
IHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudFJhZGl1cyhuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGF0dHJpYnV0ZXMucigpKSk7CisgICAgcmFkaWFsR3JhZGllbnQtPnNldEdyYWRpZW50U3RvcHMo
YXR0cmlidXRlcy5zdG9wcygpKTsKIH0KIAogUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzIFNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudDo6Y29sbGVjdEdyYWRpZW50UHJvcGVydGllcygpIGNvbnN0Cklu
ZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmgJKHJldmlzaW9uIDM4ODU4KQor
KysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNzksOSArNzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJvdGVjdGVkOgogI2lm
IFBMQVRGT1JNKENHKQogICAgICAgICB2b2lkIHN0cm9rZVBhdGgoQ0dDb250ZXh0UmVmLCBjb25z
dCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLSAgICAgICAgdm9pZCBjbGlwVG9TdHJva2VQYXRoKENH
Q29udGV4dFJlZiwgY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAgICAgICAgIHZvaWQgZmls
bFBhdGgoQ0dDb250ZXh0UmVmLCBjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLSAgICAgICAg
dm9pZCBjbGlwVG9GaWxsUGF0aChDR0NvbnRleHRSZWYsIGNvbnN0IFJlbmRlck9iamVjdCopIGNv
bnN0OwogI2VuZGlmCiAKICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAkocmV2aXNpb24gMzg4NTgpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiAgICAgICAgICAgICAgIDIwMDggRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqICAgICAgICAgICAgICAgMjAwOCBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjgsOSArMzAsMjMgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1BhaW50U2Vy
dmVyR3JhZGllbnQuaCIKIAorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAi
UmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiU1ZHR3JhZGllbnRFbGVtZW50LmgiCisjaW5jbHVk
ZSAiU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudC5oIgorI2luY2x1ZGUgIlNWR1BhaW50U2Vy
dmVyUmFkaWFsR3JhZGllbnQuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAjaW5j
bHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogCisjaWYgUExBVEZPUk0oQ0cpCisjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYK
KwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBHcmFkaWVudFNwcmVhZE1ldGhvZCBtKQpA
QCAtNjUsOCArODEsNiBAQCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpTVkdQYWludFNlcnZlckdy
CiAgICAgLCBtX293bmVyRWxlbWVudChvd25lcikKIAogI2lmIFBMQVRGT1JNKENHKQotICAgICwg
bV9zdG9wc0NhY2hlKDApCi0gICAgLCBtX3NoYWRpbmdDYWNoZSgwKQogICAgICwgbV9zYXZlZENv
bnRleHQoMCkKICAgICAsIG1faW1hZ2VCdWZmZXIoMCkKICNlbmRpZgpAQCAtNzYsMTkgKzkwLDE2
IEBAIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OlNWR1BhaW50U2VydmVyR3IKIAogU1ZHUGFpbnRT
ZXJ2ZXJHcmFkaWVudDo6flNWR1BhaW50U2VydmVyR3JhZGllbnQoKQogewotI2lmIFBMQVRGT1JN
KENHKQotICAgIENHU2hhZGluZ1JlbGVhc2UobV9zaGFkaW5nQ2FjaGUpOwotI2VuZGlmCiB9CiAK
LWNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+JiBTVkdQYWludFNlcnZlckdyYWRpZW50Ojpn
cmFkaWVudFN0b3BzKCkgY29uc3QKK0dyYWRpZW50KiBTVkdQYWludFNlcnZlckdyYWRpZW50Ojpn
cmFkaWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc3RvcHM7CisgICAgcmV0dXJuIG1fZ3Jh
ZGllbnQuZ2V0KCk7CiB9CiAKLXZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0R3JhZGll
bnRTdG9wcyhjb25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYgc3RvcHMpCit2b2lkIFNWR1Bh
aW50U2VydmVyR3JhZGllbnQ6OnNldEdyYWRpZW50KFBhc3NSZWZQdHI8R3JhZGllbnQ+IGdyYWRp
ZW50KQogewotICAgIG1fc3RvcHMgPSBzdG9wczsKKyAgICBtX2dyYWRpZW50ID0gZ3JhZGllbnQ7
CiB9CiAKIEdyYWRpZW50U3ByZWFkTWV0aG9kIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNwcmVh
ZE1ldGhvZCgpIGNvbnN0CkBAIC0xMjEsNiArMTMyLDE2MSBAQCB2b2lkIFNWR1BhaW50U2VydmVy
R3JhZGllbnQ6OnNldEdyYWRpZW50CiAgICAgbV9ncmFkaWVudFRyYW5zZm9ybSA9IHRyYW5zZm9y
bTsKIH0KIAorI2lmIFBMQVRGT1JNKENHKQorLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh0IHBh
aW50aW5nIGluIENHCisvLyBUaGlzIENnIHNwZWNpZmljIGNvZGUgc2hvdWxkIG1vdmUgdG8gR3Jh
cGhpY3NDb250ZXh0IGFuZCBGb250KiBpbiBhIG5leHQgc3RlcC4KK3N0YXRpYyBpbmxpbmUgY29u
c3QgUmVuZGVyT2JqZWN0KiBmaW5kVGV4dFJvb3RPYmplY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBz
dGFydCkKK3sKKyAgICB3aGlsZSAoc3RhcnQgJiYgIXN0YXJ0LT5pc1NWR1RleHQoKSkKKyAgICAg
ICAgc3RhcnQgPSBzdGFydC0+cGFyZW50KCk7CisgICAgQVNTRVJUKHN0YXJ0KTsKKyAgICBBU1NF
UlQoc3RhcnQtPmlzU1ZHVGV4dCgpKTsKKworICAgIHJldHVybiBzdGFydDsKK30KKworc3RhdGlj
IGlubGluZSBib29sIGNyZWF0ZU1hc2tBbmRTd2FwQ29udGV4dEZvclRleHRHcmFkaWVudCgKKyAg
ICBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQqJiBzYXZlZENvbnRl
eHQsCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIsIGNvbnN0IFJlbmRlck9i
amVjdCogb2JqZWN0KQoreworICAgIEZsb2F0UmVjdCBtYXNrQkJveCA9IGNvbnN0X2Nhc3Q8UmVu
ZGVyT2JqZWN0Kj4oZmluZFRleHRSb290T2JqZWN0KG9iamVjdCkpLT5yZWxhdGl2ZUJCb3goZmFs
c2UpOworICAgIEludFJlY3QgbWFza1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG9iamVjdC0+YWJz
b2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KG1hc2tCQm94KSk7CisKKyAgICBJbnRTaXplIG1hc2tT
aXplKG1hc2tSZWN0LndpZHRoKCksIG1hc2tSZWN0LmhlaWdodCgpKTsKKyAgICBjbGFtcEltYWdl
QnVmZmVyU2l6ZVRvVmlld3BvcnQob2JqZWN0LT5kb2N1bWVudCgpLT5yZW5kZXJlcigpLCBtYXNr
U2l6ZSk7CisKKyAgICBhdXRvX3B0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShtYXNrU2l6ZSwgZmFsc2UpOworCisgICAgaWYgKCFtYXNrSW1hZ2UuZ2V0KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdl
Q29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOworICAgIG1hc2tJbWFnZUNvbnRleHQtPnNh
dmUoKTsKKyAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLW1hc2tSZWN0LngoKSwgLW1h
c2tSZWN0LnkoKSk7CisgICAgbWFza0ltYWdlQ29udGV4dC0+Y29uY2F0Q1RNKG9iamVjdC0+YWJz
b2x1dGVUcmFuc2Zvcm0oKSk7CisKKyAgICBpbWFnZUJ1ZmZlci5zZXQobWFza0ltYWdlLnJlbGVh
c2UoKSk7CisgICAgc2F2ZWRDb250ZXh0ID0gY29udGV4dDsKKworICAgIGNvbnRleHQgPSBtYXNr
SW1hZ2VDb250ZXh0OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBjbGlwVG9UZXh0TWFzayhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCisgICAgT3duUHRyPElt
YWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LAorICAg
IGNvbnN0IFNWR1BhaW50U2VydmVyR3JhZGllbnQqIGdyYWRpZW50U2VydmVyKQoreworICAgIEZs
b2F0UmVjdCBtYXNrQkJveCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oZmluZFRleHRSb290
T2JqZWN0KG9iamVjdCkpLT5yZWxhdGl2ZUJCb3goZmFsc2UpOworCisgICAgLy8gRml4dXAgdHJh
bnNmb3JtYXRpb25zIHRvIGJlIGFibGUgdG8gY2xpcCB0byBtYXNrCisgICAgQWZmaW5lVHJhbnNm
b3JtIHRyYW5zZm9ybSA9IG9iamVjdC0+YWJzb2x1dGVUcmFuc2Zvcm0oKTsKKyAgICBGbG9hdFJl
Y3QgdGV4dEJvdW5kYXJ5ID0gdHJhbnNmb3JtLm1hcFJlY3QobWFza0JCb3gpOworCisgICAgSW50
U2l6ZSBtYXNrU2l6ZShscm91bmRmKHRleHRCb3VuZGFyeS53aWR0aCgpKSwgbHJvdW5kZih0ZXh0
Qm91bmRhcnkuaGVpZ2h0KCkpKTsKKyAgICBjbGFtcEltYWdlQnVmZmVyU2l6ZVRvVmlld3BvcnQo
b2JqZWN0LT5kb2N1bWVudCgpLT5yZW5kZXJlcigpLCBtYXNrU2l6ZSk7CisgICAgdGV4dEJvdW5k
YXJ5LnNldFNpemUodGV4dEJvdW5kYXJ5LnNpemUoKS5zaHJ1bmtUbyhtYXNrU2l6ZSkpOworCisg
ICAgLy8gQ2xpcCBjdXJyZW50IGNvbnRleHQgdG8gbWFzayBpbWFnZSAoZ3JhZGllbnQpCisgICAg
Y29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybS5pbnZlcnNlKCkpOworICAgIGNvbnRleHQtPmNs
aXBUb0ltYWdlQnVmZmVyKHRleHRCb3VuZGFyeSwgaW1hZ2VCdWZmZXIuZ2V0KCkpOworICAgIGNv
bnRleHQtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOworCisgICAgaWYgKGdyYWRpZW50U2VydmVyLT5i
b3VuZGluZ0JveE1vZGUoKSkgeworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUobWFza0JCb3gu
eCgpLCBtYXNrQkJveC55KCkpOworICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUobWFz
a0JCb3gud2lkdGgoKSwgbWFza0JCb3guaGVpZ2h0KCkpKTsKKyAgICB9CisgICAgY29udGV4dC0+
Y29uY2F0Q1RNKGdyYWRpZW50U2VydmVyLT5ncmFkaWVudFRyYW5zZm9ybSgpKTsKK30KKyNlbmRp
ZgorCitib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoaWNzQ29udGV4dCom
IGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUg
dHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QKK3sKKyAgICBtX293bmVyRWxlbWVudC0+
YnVpbGRHcmFkaWVudCgpOworCisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlID0gb2Jq
ZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpOworICAgIGJvb2wgaXNGaWxsZWQgPSAodHlwZSAmIEFw
cGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhhc0ZpbGwoKTsKKyAgICBib29sIGlzU3Ry
b2tlZCA9ICh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmIHN0eWxlLT5oYXNTdHJv
a2UoKTsKKworICAgIEFTU0VSVChpc0ZpbGxlZCAmJiAhaXNTdHJva2VkIHx8ICFpc0ZpbGxlZCAm
JiBpc1N0cm9rZWQpOworCisgICAgY29udGV4dC0+c2F2ZSgpOworCisgICAgaWYgKGlzUGFpbnRp
bmdUZXh0KSB7CisjaWYgUExBVEZPUk0oQ0cpCisgICAgICAgIGlmICghY3JlYXRlTWFza0FuZFN3
YXBDb250ZXh0Rm9yVGV4dEdyYWRpZW50KGNvbnRleHQsIG1fc2F2ZWRDb250ZXh0LCBtX2ltYWdl
QnVmZmVyLCBvYmplY3QpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBjb250ZXh0
LT5zZXRUZXh0RHJhd2luZ01vZGUoaXNGaWxsZWQgPyBjVGV4dEZpbGwgOiBjVGV4dFN0cm9rZSk7
CisgICAgfQorCisgICAgaWYgKGlzRmlsbGVkKSB7CisgICAgICAgIGNvbnRleHQtPnNldEFscGhh
KHN0eWxlLT5maWxsT3BhY2l0eSgpKTsKKyAgICAgICAgY29udGV4dC0+c2V0RmlsbEdyYWRpZW50
KG1fZ3JhZGllbnQpOworICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShzdHlsZS0+ZmlsbFJ1
bGUoKSk7CisgICAgfQorICAgIGlmIChpc1N0cm9rZWQpIHsKKyAgICAgICAgY29udGV4dC0+c2V0
QWxwaGEoc3R5bGUtPnN0cm9rZU9wYWNpdHkoKSk7CisgICAgICAgIGNvbnRleHQtPnNldFN0cm9r
ZUdyYWRpZW50KG1fZ3JhZGllbnQpOworICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0
KGNvbnRleHQsIG9iamVjdC0+c3R5bGUoKSwgb2JqZWN0KTsKKyAgICB9CisKKyAgICBpZiAoYm91
bmRpbmdCb3hNb2RlKCkpIHsKKyAgICAgICAgRmxvYXRSZWN0IGJib3ggPSBvYmplY3QtPnJlbGF0
aXZlQkJveChmYWxzZSk7CisgICAgICAgIC8vIERvbid0IHVzZSBncmFkaWVudGVzIGZvciAxZCBv
YmplY3RzIGxpa2UgaG9yaXpvbnRhbC92ZXJ0aWNhbCAKKyAgICAgICAgLy8gbGluZXMgb3IgcmVj
dGFuZ2xlcyB3aXRob3V0IHdpZHRoIG9yIGhlaWdodC4KKyAgICAgICAgaWYgKGJib3gud2lkdGgo
KSA9PSAwIHx8IGJib3guaGVpZ2h0KCkgPT0gMCkgeworICAgICAgICAgICAgQ29sb3IgY29sb3Io
MCwgMCwgMCk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihjb2xvcik7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBjb250ZXh0LT50cmFu
c2xhdGUoYmJveC54KCksIGJib3gueSgpKTsKKyAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRT
aXplKGJib3gud2lkdGgoKSwgYmJveC5oZWlnaHQoKSkpOworCisgICAgICAgIC8vIFdpdGggc2Nh
bGluZyB0aGUgY29udGV4dCwgdGhlIHN0cm9rZVRoaWNrbmVzcyBpcyBzY2FsZWQgdG9vLiBXZSBo
YXZlIHRvCisgICAgICAgIC8vIHVuZG8gdGhpcy4KKyAgICAgICAgZmxvYXQgc3Ryb2tlVGhpY2tu
ZXNzID0gY29udGV4dC0+c3Ryb2tlVGhpY2tuZXNzKCkgLyAoKGJib3gud2lkdGgoKSArIGJib3gu
aGVpZ2h0KCkpIC8gMik7CisgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhzdHJv
a2VUaGlja25lc3MpOworICAgIH0KKyAgICBjb250ZXh0LT5jb25jYXRDVE0oZ3JhZGllbnRUcmFu
c2Zvcm0oKSk7CisgICAgY29udGV4dC0+c2V0U3ByZWFkTWV0aG9kKHNwcmVhZE1ldGhvZCgpKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnJl
bmRlclBhdGgoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBw
YXRoLCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSogc3R5bGUgPSBwYXRoLT5zdHlsZSgpLT5zdmdTdHlsZSgpOworCisgICAgaWYgKCh0
eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFzRmlsbCgpKQorICAgICAg
ICBjb250ZXh0LT5maWxsUGF0aCgpOworCisgICAgaWYgKCh0eXBlICYgQXBwbHlUb1N0cm9rZVRh
cmdldFR5cGUpICYmIHN0eWxlLT5oYXNTdHJva2UoKSkKKyAgICAgICAgY29udGV4dC0+c3Ryb2tl
UGF0aCgpOworfQorCit2b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnRlYXJkb3duKEdyYXBo
aWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWlu
dFRhcmdldFR5cGUgdHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QKK3sKKyNpZiBQTEFU
Rk9STShDRykKKyAgICAvLyByZW5kZXJQYXRoKCkgaXMgbm90IHVzZWQgd2hlbiBwYWludGluZyB0
ZXh0LCBzbyB3ZSBwYWludCB0aGUgZ3JhZGllbnQgZHVyaW5nIHRlYXJkb3duKCkKKyAgICBpZiAo
aXNQYWludGluZ1RleHQgJiYgbV9zYXZlZENvbnRleHQpIHsKKyAgICAgICAgLy8gUmVzdG9yZSBv
bi1zY3JlZW4gZHJhd2luZyBjb250ZXh0CisgICAgICAgIGNvbnRleHQgPSBtX3NhdmVkQ29udGV4
dDsKKyAgICAgICAgbV9zYXZlZENvbnRleHQgPSAwOworCisgICAgICAgIGNsaXBUb1RleHRNYXNr
KGNvbnRleHQsIG1faW1hZ2VCdWZmZXIsIG9iamVjdCwgdGhpcyk7CisKKyAgICAgICAgLy8gZmlu
YWxseSBmaWxsIHRoZSB0ZXh0IGNsaXAgd2l0aCB0aGUgc2hhZGluZworICAgICAgICBDR0NvbnRl
eHREcmF3U2hhZGluZyhjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9ncmFkaWVudC0+cGxh
dGZvcm1HcmFkaWVudCgpKTsKKyAKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci5jbGVhcigpOyAvLyB3
ZSdyZSBkb25lIHdpdGggb3VyIHRleHQgbWFzayBidWZmZXIKKyAgICB9CisjZW5kaWYKKyAgICBj
b250ZXh0LT5yZXN0b3JlKCk7Cit9CisKIFRleHRTdHJlYW0mIFNWR1BhaW50U2VydmVyR3JhZGll
bnQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiB7CiAgICAg
Ly8gR3JhZGllbnRzL3BhdHRlcm5zIGFyZW4ndCBzZXR1cCwgdW50aWwgdGhleSBhcmUgdXNlZCBm
b3IgcGFpbnRpbmcuIFdvcmsgYXJvdW5kIHRoYXQgZmFjdC4KSW5kZXg6IFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmgJKHJldmlzaW9uIDM4ODU4KQorKysg
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqICAgICAgICAgICAgICAgMjAwOCBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMCwzNiArMzEsMjYgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2lu
Y2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJTVkdQYWludFNlcnZlci5oIgogCiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLSNpZiBQTEFURk9STShR
VCkKLSNpbmNsdWRlIDxxZ2xvYmFsLmg+Ci1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFHcmFk
aWVudDsKLVFUX0VORF9OQU1FU1BBQ0UKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBJbWFnZUJ1ZmZlcjsKICAgICBjbGFzcyBTVkdHcmFkaWVudEVsZW1lbnQ7CiAK
LSNpZiBQTEFURk9STShDRykKLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxDR0Zsb2F0LCBDb2xvcj4g
U1ZHR3JhZGllbnRTdG9wOwotI2Vsc2UKICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxmbG9hdCwgQ29s
b3I+IFNWR0dyYWRpZW50U3RvcDsKLSNlbmRpZgogCiAgICAgY2xhc3MgU1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudCA6IHB1YmxpYyBTVkdQYWludFNlcnZlciB7CiAgICAgcHVibGljOgogICAgICAgICB2
aXJ0dWFsIH5TVkdQYWludFNlcnZlckdyYWRpZW50KCk7CiAKLSAgICAgICAgY29uc3QgVmVjdG9y
PFNWR0dyYWRpZW50U3RvcD4mIGdyYWRpZW50U3RvcHMoKSBjb25zdDsKLSAgICAgICAgdm9pZCBz
ZXRHcmFkaWVudFN0b3BzKGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+Jik7CisgICAgICAg
IHZvaWQgc2V0R3JhZGllbnQoUGFzc1JlZlB0cjxHcmFkaWVudD4pOworICAgICAgICBHcmFkaWVu
dCogZ3JhZGllbnQoKSBjb25zdDsKIAogICAgICAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJl
YWRNZXRob2QoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRHcmFkaWVudFNwcmVhZE1ldGhvZChj
b25zdCBHcmFkaWVudFNwcmVhZE1ldGhvZCYpOwpAQCAtNzMsMzIgKzY0LDIxIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50VHJhbnNmb3JtKCkg
Y29uc3Q7CiAgICAgICAgIHZvaWQgc2V0R3JhZGllbnRUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJik7CiAKKyAgICAgICAgdm9pZCBzZXRHcmFkaWVudFN0b3BzKGNvbnN0IFZlY3RvcjxT
VkdHcmFkaWVudFN0b3A+JiBzdG9wcykgeyBtX3N0b3BzID0gc3RvcHM7IH0KKyAgICAgICAgY29u
c3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mIGdyYWRpZW50U3RvcHMoKSBjb25zdCB7IHJldHVy
biBtX3N0b3BzOyB9CisKICAgICAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0
dXAoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0
VHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3Q7Ci0jaWYgUExBVEZPUk0oQ0cpCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgUmVuZGVy
T2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdDsK
ICAgICAgICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0
IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CiAKLSAgICAgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgICAgICAvLyBIZWxwZXJzCi0gICAgICAgIHZv
aWQgdXBkYXRlUXVhcnR6R3JhZGllbnRTdG9wc0NhY2hlKGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVu
dFN0b3A+Jik7Ci0gICAgICAgIHZvaWQgdXBkYXRlUXVhcnR6R3JhZGllbnRDYWNoZShjb25zdCBT
VkdQYWludFNlcnZlckdyYWRpZW50Kik7Ci0gICAgICAgIHZvaWQgaGFuZGxlQm91bmRpbmdCb3hN
b2RlQW5kR3JhZGllbnRUcmFuc2Zvcm1hdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9h
dFJlY3QmIHRhcmdldFJlY3QpIGNvbnN0OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShRVCkKLSAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgZmlsbENvbG9yQXJyYXkoUUdyYWRpZW50JiwgY29u
c3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mLCBmbG9hdCBvcGFjaXR5KSBjb25zdDsKLSAgICAg
ICAgdmlydHVhbCBRR3JhZGllbnQgc2V0dXBHcmFkaWVudChHcmFwaGljc0NvbnRleHQqJiwgY29u
c3QgUmVuZGVyT2JqZWN0KikgY29uc3QgPSAwOwotI2VuZGlmCi0KICAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIFNWR1BhaW50U2VydmVyR3JhZGllbnQoY29uc3QgU1ZHR3JhZGllbnRFbGVtZW50KiBv
d25lcik7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIFZlY3RvcjxTVkdHcmFkaWVu
dFN0b3A+IG1fc3RvcHM7CisgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gbV9ncmFkaWVudDsKICAg
ICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2QgbV9zcHJlYWRNZXRob2Q7CiAgICAgICAgIGJvb2wg
bV9ib3VuZGluZ0JveE1vZGU7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX2dyYWRpZW50VHJh
bnNmb3JtOwpAQCAtMTA2LDI3ICs4Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFBM
QVRGT1JNKENHKQogICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBzdHJ1Y3QgewotICAgICAg
ICAgICAgQ0dGbG9hdCBjb2xvckFycmF5WzRdOwotICAgICAgICAgICAgQ0dGbG9hdCBvZmZzZXQ7
Ci0gICAgICAgICAgICBDR0Zsb2F0IHByZXZpb3VzRGVsdGFJbnZlcnNlOwotICAgICAgICB9IFF1
YXJ0ekdyYWRpZW50U3RvcDsKLSAgICAgICAgCi0gICAgICAgIHN0cnVjdCBTaGFyZWRTdG9wQ2Fj
aGUgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRTdG9wQ2FjaGU+IHsKLSAgICAgICAgcHVibGlj
OgotICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkU3RvcENhY2hlPiBjcmVhdGUo
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkU3RvcENhY2hlKTsgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBWZWN0b3I8UXVhcnR6R3JhZGllbnRTdG9wPiBtX3N0b3BzOwotICAgICAg
ICAKLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIFNoYXJlZFN0b3BDYWNoZSgpIHsgfQot
ICAgICAgICB9OwotCi0gICAgICAgIFJlZlB0cjxTaGFyZWRTdG9wQ2FjaGU+IG1fc3RvcHNDYWNo
ZTsKLQotICAgICAgICBDR1NoYWRpbmdSZWYgbV9zaGFkaW5nQ2FjaGU7CiAgICAgICAgIG11dGFi
bGUgR3JhcGhpY3NDb250ZXh0KiBtX3NhdmVkQ29udGV4dDsKLSAgICAgICAgbXV0YWJsZSBJbWFn
ZUJ1ZmZlciogbV9pbWFnZUJ1ZmZlcjsKKyAgICAgICAgbXV0YWJsZSBPd25QdHI8SW1hZ2VCdWZm
ZXI+IG1faW1hZ2VCdWZmZXI7CiAjZW5kaWYKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudC5oCShyZXZpc2lv
biAzODg1OCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJikgY29uc3Q7CiAKLSNpZiBQTEFURk9STShRVCkKLSAgICAgICAgdmlydHVh
bCBRR3JhZGllbnQgc2V0dXBHcmFkaWVudChHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgUmVuZGVy
T2JqZWN0KikgY29uc3Q7Ci0jZW5kaWYKLQogICAgIHByaXZhdGU6CiAgICAgICAgIFNWR1BhaW50
U2VydmVyTGluZWFyR3JhZGllbnQoY29uc3QgU1ZHR3JhZGllbnRFbGVtZW50KiBvd25lcik7CiAK
SW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclJhZGlh
bEdyYWRpZW50LmgJKHJldmlzaW9uIDM4ODU4KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
UGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMCArNTEs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdDsKIAotI2lmIFBMQVRGT1JN
KFFUKQotICAgICAgICB2aXJ0dWFsIFFHcmFkaWVudCBzZXR1cEdyYWRpZW50KEdyYXBoaWNzQ29u
dGV4dComLCBjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLSNlbmRpZgotCiAgICAgcHJpdmF0
ZToKICAgICAgICAgU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudChjb25zdCBTVkdHcmFkaWVu
dEVsZW1lbnQqIG93bmVyKTsKIApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlckdyYWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lvbiAz
ODg1OCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyR3JhZGll
bnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTYwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCBEaXJrIFNjaHVsemUgPHZiczg1QGdteC5kZT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlckdyYWRpZW50LmgiCi0j
aW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudC5oIgotI2luY2x1ZGUgIlNWR1Bh
aW50U2VydmVyUmFkaWFsR3JhZGllbnQuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKLSNp
bmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0
dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3Qs
IFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAotewot
ICAgIG1fb3duZXJFbGVtZW50LT5idWlsZEdyYWRpZW50KCk7Ci0KLSAgICBjYWlyb190KiBjciA9
IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVy
bjsKLQotICAgIGNhaXJvX21hdHJpeF90IG1hdHJpeDsKLSAgICBjYWlyb19tYXRyaXhfaW5pdF9p
ZGVudGl0eSAoJm1hdHJpeCk7Ci0gICAgY29uc3QgY2Fpcm9fbWF0cml4X3QgZ3JhZGllbnRfbWF0
cml4ID0gZ3JhZGllbnRUcmFuc2Zvcm0oKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBz
dmdTdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7Ci0KLSAgICBpZiAodGhpcy0+dHlwZSgpID09IExpbmVh
ckdyYWRpZW50UGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgY29uc3QgU1ZHUGFpbnRTZXJ2ZXJMaW5l
YXJHcmFkaWVudCogbGluZWFyID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHUGFpbnRTZXJ2ZXJMaW5l
YXJHcmFkaWVudCo+KHRoaXMpOwotCi0gICAgICAgIGlmIChib3VuZGluZ0JveE1vZGUoKSkgewot
ICAgICAgICAgICAgRmxvYXRSZWN0IGJib3ggPSBvYmplY3QtPnJlbGF0aXZlQkJveChmYWxzZSk7
Ci0gICAgICAgICAgICBpZiAoYmJveC53aWR0aCgpID09IDAgfHwgYmJveC5oZWlnaHQoKSA9PSAw
KSB7Ci0gICAgICAgICAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBz
dHlsZSwgb2JqZWN0KTsKLSAgICAgICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjciwg
MCwgMCwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBjYWlyb19tYXRyaXhfdHJhbnNsYXRlKCZtYXRyaXgsIGJib3gueCgpLCBiYm94
LnkoKSk7Ci0gICAgICAgICAgICBjYWlyb19tYXRyaXhfc2NhbGUoJm1hdHJpeCwgYmJveC53aWR0
aCgpLCBiYm94LmhlaWdodCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRvdWJsZSB4MCA9IGxp
bmVhci0+Z3JhZGllbnRTdGFydCgpLngoKTsKLSAgICAgICAgZG91YmxlIHkwID0gbGluZWFyLT5n
cmFkaWVudFN0YXJ0KCkueSgpOwotICAgICAgICBkb3VibGUgeDEgPSBsaW5lYXItPmdyYWRpZW50
RW5kKCkueCgpOwotICAgICAgICBkb3VibGUgeTEgPSBsaW5lYXItPmdyYWRpZW50RW5kKCkueSgp
OwotCi0gICAgICAgIHBhdHRlcm4gPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9saW5lYXIoeDAsIHkw
LCB4MSwgeTEpOwotCi0gICAgfSBlbHNlIGlmICh0aGlzLT50eXBlKCkgPT0gUmFkaWFsR3JhZGll
bnRQYWludFNlcnZlcikgewotICAgICAgICBjb25zdCBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRp
ZW50KiByYWRpYWwgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRp
ZW50Kj4odGhpcyk7Ci0KLSAgICAgICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpKSB7Ci0gICAgICAg
ICAgICBGbG9hdFJlY3QgYmJveCA9IG9iamVjdC0+cmVsYXRpdmVCQm94KGZhbHNlKTsKLSAgICAg
ICAgICAgIGlmIChiYm94LndpZHRoKCkgPT0gMCB8fCBiYm94LmhlaWdodCgpID09IDApIHsKLSAg
ICAgICAgICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBv
YmplY3QpOwotICAgICAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLCAwLCAwLCAw
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNhaXJvX21hdHJpeF90cmFuc2xhdGUoJm1hdHJpeCwgYmJveC54KCksIGJib3gueSgpKTsK
LSAgICAgICAgICAgIGNhaXJvX21hdHJpeF9zY2FsZSgmbWF0cml4LCBiYm94LndpZHRoKCksIGJi
b3guaGVpZ2h0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZG91YmxlIGN4ID0gcmFkaWFsLT5n
cmFkaWVudENlbnRlcigpLngoKTsKLSAgICAgICAgZG91YmxlIGN5ID0gcmFkaWFsLT5ncmFkaWVu
dENlbnRlcigpLnkoKTsKLSAgICAgICAgZG91YmxlIHJhZGl1cyA9IHJhZGlhbC0+Z3JhZGllbnRS
YWRpdXMoKTsKLSAgICAgICAgZG91YmxlIGZ4ID0gcmFkaWFsLT5ncmFkaWVudEZvY2FsKCkueCgp
OwotICAgICAgICBkb3VibGUgZnkgPSByYWRpYWwtPmdyYWRpZW50Rm9jYWwoKS55KCk7Ci0KLSAg
ICAgICAgZnggLT0gY3g7Ci0gICAgICAgIGZ5IC09IGN5OwotCi0gICAgICAgIGRvdWJsZSBmcmFk
aXVzID0gMC4wOwotCi0gICAgICAgIGlmIChzcXJ0KGZ4ICogZnggKyBmeSAqIGZ5KSA+PSByYWRp
dXMpIHsKLSAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGF0YW4yKGZ5LCBmeCk7Ci0gICAgICAg
ICAgICBpZiAoKGZ4ICsgY3gpIDwgY3gpCi0gICAgICAgICAgICAgICAgZnggPSBjb3MoYW5nbGUp
ICogcmFkaXVzICsgMC4wMDI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZngg
PSBjb3MoYW5nbGUpICogcmFkaXVzIC0gMC4wMDI7Ci0gICAgICAgICAgICBpZiAoKGZ5ICsgY3kp
IDwgY3kpCi0gICAgICAgICAgICAgICAgZnkgPSBzaW4oYW5nbGUpICogcmFkaXVzICsgMC4wMDI7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnkgPSBzaW4oYW5nbGUpICogcmFk
aXVzIC0gMC4wMDI7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXR0ZXJuID0gY2Fpcm9fcGF0dGVy
bl9jcmVhdGVfcmFkaWFsKGZ4ICsgY3gsIGZ5ICsgY3ksIGZyYWRpdXMsIGN4LCBjeSwgcmFkaXVz
KTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBj
YWlyb19wYXR0ZXJuX3NldF9maWx0ZXIocGF0dGVybiwgQ0FJUk9fRklMVEVSX0JJTElORUFSKTsK
LQotICAgIHN3aXRjaCAoc3ByZWFkTWV0aG9kKCkpIHsKLSAgICAgICAgY2FzZSBTcHJlYWRNZXRo
b2RQYWQ6Ci0gICAgICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybiwgQ0FJ
Uk9fRVhURU5EX1BBRCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTcHJlYWRN
ZXRob2RSZWZsZWN0OgotICAgICAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRl
cm4sIENBSVJPX0VYVEVORF9SRUZMRUNUKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFNwcmVhZE1ldGhvZFJlcGVhdDoKLSAgICAgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4
dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfUkVQRUFUKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBh
dHRlcm4sIENBSVJPX0VYVEVORF9OT05FKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIGNhaXJvX21hdHJpeF9tdWx0aXBseSgmbWF0cml4LCAmbWF0cml4LCAmZ3JhZGllbnRfbWF0
cml4KTsKLSAgICBjYWlyb19tYXRyaXhfaW52ZXJ0KCZtYXRyaXgpOwotICAgIGNhaXJvX3BhdHRl
cm5fc2V0X21hdHJpeChwYXR0ZXJuLCAmbWF0cml4KTsKLQotICAgIGNvbnN0IFZlY3RvcjxTVkdH
cmFkaWVudFN0b3A+JiBzdG9wcyA9IGdyYWRpZW50U3RvcHMoKTsKLQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzdG9wcy5zaXplKCk7ICsraSkgewotICAgICAgICBmbG9hdCBvZmZzZXQg
PSBzdG9wc1tpXS5maXJzdDsKLSAgICAgICAgQ29sb3IgY29sb3IgPSBzdG9wc1tpXS5zZWNvbmQ7
Ci0gICAgICAgIGlmIChpID4gMCAmJiBvZmZzZXQgPCBzdG9wc1tpIC0gMV0uZmlyc3QpCi0gICAg
ICAgICAgICBvZmZzZXQgPSBzdG9wc1tpIC0gMV0uZmlyc3Q7Ci0KLSAgICAgICAgY2Fpcm9fcGF0
dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKHBhdHRlcm4sIG9mZnNldCwgY29sb3IucmVkKCkgLyAy
NTUuMCwgY29sb3IuZ3JlZW4oKSAvIDI1NS4wLCBjb2xvci5ibHVlKCkgLyAyNTUuMCwgY29sb3Iu
YWxwaGEoKSAvIDI1NS4wKTsKLSAgICB9Ci0KLSAgICBpZiAoKHR5cGUgJiBBcHBseVRvRmlsbFRh
cmdldFR5cGUpICYmIHN2Z1N0eWxlLT5oYXNGaWxsKCkpCi0gICAgICAgIGNvbnRleHQtPnNldEZp
bGxSdWxlKHN2Z1N0eWxlLT5maWxsUnVsZSgpKTsKLQotICAgIGlmICgodHlwZSAmIEFwcGx5VG9T
dHJva2VUYXJnZXRUeXBlKSAmJiBzdmdTdHlsZS0+aGFzU3Ryb2tlKCkpCi0gICAgICAgIGFwcGx5
U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVjdCk7Ci0KLSAgICBjYWly
b19zZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsKLSAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3kocGF0
dGVybik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyQ2cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVy
Q2cuY3BwCShyZXZpc2lvbiAzODg1OCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1Bh
aW50U2VydmVyQ2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMiArNjAsNiBAQCB2b2lkIFNW
R1BhaW50U2VydmVyOjpzdHJva2VQYXRoKENHQ29udGV4CiAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0
aChjb250ZXh0KTsKIH0KIAotdm9pZCBTVkdQYWludFNlcnZlcjo6Y2xpcFRvU3Ryb2tlUGF0aChD
R0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3QKLXsKLSAgICBD
R0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsKLSAgICBDR0NvbnRl
eHRDbGlwKGNvbnRleHQpOwotfQotCiB2b2lkIFNWR1BhaW50U2VydmVyOjpmaWxsUGF0aChDR0Nv
bnRleHRSZWYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXRoKSBjb25zdAogewogICAg
IGlmICghcGF0aCB8fCBwYXRoLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpID09IFJV
TEVfRVZFTk9ERCkKQEAgLTc0LDE0ICs2OCw2IEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OmZpbGxQ
YXRoKENHQ29udGV4dFIKICAgICAgICAgQ0dDb250ZXh0RmlsbFBhdGgoY29udGV4dCk7CiB9CiAK
LXZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OmNsaXBUb0ZpbGxQYXRoKENHQ29udGV4dFJlZiBjb250ZXh0
LCBjb25zdCBSZW5kZXJPYmplY3QqIHBhdGgpIGNvbnN0Ci17Ci0gICAgaWYgKCFwYXRoIHx8IHBh
dGgtPnN0eWxlKCktPnN2Z1N0eWxlKCktPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKQotICAg
ICAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7Ci0gICAgZWxzZQotICAgICAgICBDR0NvbnRl
eHRDbGlwKGNvbnRleHQpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJ
bmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckdy
YWRpZW50Q2cuY3BwCShyZXZpc2lvbiAzODg1OCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Nn
L1NWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzM2ICsw
LDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIEtERSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZH
KQotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyR3JhZGllbnQuaCIKLQotI2luY2x1ZGUgIkZsb2F0
Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiU1ZHR3Jh
ZGllbnRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudC5o
IgotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQuaCIKLSNpbmNsdWRlICJT
VkdSZW5kZXJTdXBwb3J0LmgiCi0KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi11c2lu
ZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyB2b2lkIHJl
bGVhc2VDYWNoZWRTdG9wcyh2b2lkKiBpbmZvKQotewotICAgIHN0YXRpY19jYXN0PFNWR1BhaW50
U2VydmVyR3JhZGllbnQ6OlNoYXJlZFN0b3BDYWNoZSo+KGluZm8pLT5kZXJlZigpOwotfQotCi1z
dGF0aWMgdm9pZCBjZ0dyYWRpZW50Q2FsbGJhY2sodm9pZCogaW5mbywgY29uc3QgQ0dGbG9hdCog
aW5WYWx1ZXMsIENHRmxvYXQqIG91dENvbG9yKQotewotICAgIFNWR1BhaW50U2VydmVyR3JhZGll
bnQ6OlNoYXJlZFN0b3BDYWNoZSogc3RvcHNDYWNoZSA9IHN0YXRpY19jYXN0PFNWR1BhaW50U2Vy
dmVyR3JhZGllbnQ6OlNoYXJlZFN0b3BDYWNoZSo+KGluZm8pOwotICAgIAotICAgIFNWR1BhaW50
U2VydmVyR3JhZGllbnQ6OlF1YXJ0ekdyYWRpZW50U3RvcCogc3RvcHMgPSBzdG9wc0NhY2hlLT5t
X3N0b3BzLmRhdGEoKTsKLSAgICAgICAgCi0gICAgaW50IHN0b3BzQ291bnQgPSBzdG9wc0NhY2hl
LT5tX3N0b3BzLnNpemUoKTsKLQotICAgIENHRmxvYXQgaW5WYWx1ZSA9IGluVmFsdWVzWzBdOwot
Ci0gICAgaWYgKCFzdG9wc0NvdW50KSB7Ci0gICAgICAgIG91dENvbG9yWzBdID0gMDsKLSAgICAg
ICAgb3V0Q29sb3JbMV0gPSAwOwotICAgICAgICBvdXRDb2xvclsyXSA9IDA7Ci0gICAgICAgIG91
dENvbG9yWzNdID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoc3RvcHNDb3Vu
dCA9PSAxKSB7Ci0gICAgICAgIG1lbWNweShvdXRDb2xvciwgc3RvcHNbMF0uY29sb3JBcnJheSwg
NCAqIHNpemVvZihDR0Zsb2F0KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
IShpblZhbHVlID4gc3RvcHNbMF0ub2Zmc2V0KSkKLSAgICAgICAgbWVtY3B5KG91dENvbG9yLCBz
dG9wc1swXS5jb2xvckFycmF5LCA0ICogc2l6ZW9mKENHRmxvYXQpKTsKLSAgICBlbHNlIGlmICgh
KGluVmFsdWUgPCBzdG9wc1tzdG9wc0NvdW50IC0gMV0ub2Zmc2V0KSkKLSAgICAgICAgbWVtY3B5
KG91dENvbG9yLCBzdG9wc1tzdG9wc0NvdW50IC0gMV0uY29sb3JBcnJheSwgNCAqIHNpemVvZihD
R0Zsb2F0KSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGludCBuZXh0U3RvcEluZGV4ID0gMDsKLSAg
ICAgICAgd2hpbGUgKChuZXh0U3RvcEluZGV4IDwgc3RvcHNDb3VudCkgJiYgKHN0b3BzW25leHRT
dG9wSW5kZXhdLm9mZnNldCA8IGluVmFsdWUpKQotICAgICAgICAgICAgbmV4dFN0b3BJbmRleCsr
OwotCi0gICAgICAgIENHRmxvYXQqIG5leHRDb2xvckFycmF5ID0gc3RvcHNbbmV4dFN0b3BJbmRl
eF0uY29sb3JBcnJheTsKLSAgICAgICAgQ0dGbG9hdCogcHJldmlvdXNDb2xvckFycmF5ID0gc3Rv
cHNbbmV4dFN0b3BJbmRleCAtIDFdLmNvbG9yQXJyYXk7Ci0gICAgICAgIENHRmxvYXQgZGlmZkZy
b21QcmV2aW91cyA9IGluVmFsdWUgLSBzdG9wc1tuZXh0U3RvcEluZGV4IC0gMV0ub2Zmc2V0Owot
ICAgICAgICBDR0Zsb2F0IHBlcmNlbnQgPSBkaWZmRnJvbVByZXZpb3VzICogc3RvcHNbbmV4dFN0
b3BJbmRleF0ucHJldmlvdXNEZWx0YUludmVyc2U7Ci0KLSAgICAgICAgb3V0Q29sb3JbMF0gPSAo
KDEuMGYgLSBwZXJjZW50KSAqIHByZXZpb3VzQ29sb3JBcnJheVswXSArIHBlcmNlbnQgKiBuZXh0
Q29sb3JBcnJheVswXSk7Ci0gICAgICAgIG91dENvbG9yWzFdID0gKCgxLjBmIC0gcGVyY2VudCkg
KiBwcmV2aW91c0NvbG9yQXJyYXlbMV0gKyBwZXJjZW50ICogbmV4dENvbG9yQXJyYXlbMV0pOwot
ICAgICAgICBvdXRDb2xvclsyXSA9ICgoMS4wZiAtIHBlcmNlbnQpICogcHJldmlvdXNDb2xvckFy
cmF5WzJdICsgcGVyY2VudCAqIG5leHRDb2xvckFycmF5WzJdKTsKLSAgICAgICAgb3V0Q29sb3Jb
M10gPSAoKDEuMGYgLSBwZXJjZW50KSAqIHByZXZpb3VzQ29sb3JBcnJheVszXSArIHBlcmNlbnQg
KiBuZXh0Q29sb3JBcnJheVszXSk7Ci0gICAgfQotICAgIC8vIEZJWE1FOiBoYXZlIHRvIGhhbmRs
ZSB0aGUgc3ByZWFkTWV0aG9kKClzIGhlcmUgU1BSRUFETUVUSE9EX1JFUEVBVCwgZXRjLgotfQot
Ci1zdGF0aWMgQ0dTaGFkaW5nUmVmIENHU2hhZGluZ1JlZkZvckxpbmVhckdyYWRpZW50KGNvbnN0
IFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQqIHNlcnZlcikKLXsKLSAgICBDR1BvaW50IHN0
YXJ0ID0gQ0dQb2ludChzZXJ2ZXItPmdyYWRpZW50U3RhcnQoKSk7Ci0gICAgQ0dQb2ludCBlbmQg
PSBDR1BvaW50KHNlcnZlci0+Z3JhZGllbnRFbmQoKSk7Ci0KLSAgICBDR0Z1bmN0aW9uQ2FsbGJh
Y2tzIGNhbGxiYWNrcyA9IHswLCBjZ0dyYWRpZW50Q2FsbGJhY2ssIHJlbGVhc2VDYWNoZWRTdG9w
c307Ci0gICAgQ0dGbG9hdCBkb21haW5MaW1pdHNbMl0gPSB7MCwgMX07Ci0gICAgQ0dGbG9hdCBy
YW5nZUxpbWl0c1s4XSA9IHswLCAxLCAwLCAxLCAwLCAxLCAwLCAxfTsKLSAgICBzZXJ2ZXItPm1f
c3RvcHNDYWNoZS0+cmVmKCk7Ci0gICAgQ0dGdW5jdGlvblJlZiBzaGFkaW5nRnVuY3Rpb24gPSBD
R0Z1bmN0aW9uQ3JlYXRlKHNlcnZlci0+bV9zdG9wc0NhY2hlLmdldCgpLCAxLCBkb21haW5MaW1p
dHMsIDQsIHJhbmdlTGltaXRzLCAmY2FsbGJhY2tzKTsKLQotICAgIENHQ29sb3JTcGFjZVJlZiBj
b2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7Ci0gICAgQ0dTaGFkaW5n
UmVmIHNoYWRpbmcgPSBDR1NoYWRpbmdDcmVhdGVBeGlhbChjb2xvclNwYWNlLCBzdGFydCwgZW5k
LCBzaGFkaW5nRnVuY3Rpb24sIHRydWUsIHRydWUpOwotICAgIENHQ29sb3JTcGFjZVJlbGVhc2Uo
Y29sb3JTcGFjZSk7Ci0gICAgQ0dGdW5jdGlvblJlbGVhc2Uoc2hhZGluZ0Z1bmN0aW9uKTsKLSAg
ICByZXR1cm4gc2hhZGluZzsKLX0KLQotc3RhdGljIENHU2hhZGluZ1JlZiBDR1NoYWRpbmdSZWZG
b3JSYWRpYWxHcmFkaWVudChjb25zdCBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50KiBzZXJ2
ZXIpCi17Ci0gICAgQ0dQb2ludCBjZW50ZXIgPSBDR1BvaW50KHNlcnZlci0+Z3JhZGllbnRDZW50
ZXIoKSk7Ci0gICAgQ0dQb2ludCBmb2N1cyA9IENHUG9pbnQoc2VydmVyLT5ncmFkaWVudEZvY2Fs
KCkpOwotICAgIGRvdWJsZSByYWRpdXMgPSBzZXJ2ZXItPmdyYWRpZW50UmFkaXVzKCk7Ci0KLSAg
ICBkb3VibGUgZmR4ID0gZm9jdXMueCAtIGNlbnRlci54OwotICAgIGRvdWJsZSBmZHkgPSBmb2N1
cy55IC0gY2VudGVyLnk7Ci0KLSAgICAvLyBTcGVjOiBJZiAoZngsIGZ5KSBsaWVzIG91dHNpZGUg
dGhlIGNpcmNsZSBkZWZpbmVkIGJ5IChjeCwgY3kpIGFuZCByLCBzZXQgKGZ4LCBmeSkKLSAgICAv
LyB0byB0aGUgcG9pbnQgb2YgaW50ZXJzZWN0aW9uIG9mIHRoZSBsaW5lIHRocm91Z2ggKGZ4LCBm
eSkgYW5kIHRoZSBjaXJjbGUuCi0gICAgaWYgKHNxcnQoZmR4ICogZmR4ICsgZmR5ICogZmR5KSA+
IHJhZGl1cykgeyAKLSAgICAgICAgZG91YmxlIGFuZ2xlID0gYXRhbjIoZm9jdXMueSAqIDEwMC4w
LCBmb2N1cy54ICogMTAwLjApOwotICAgICAgICBmb2N1cy54ID0gbmFycm93UHJlY2lzaW9uVG9D
R0Zsb2F0KGNvcyhhbmdsZSkgKiByYWRpdXMpOwotICAgICAgICBmb2N1cy55ID0gbmFycm93UHJl
Y2lzaW9uVG9DR0Zsb2F0KHNpbihhbmdsZSkgKiByYWRpdXMpOwotICAgIH0KLQotICAgIENHRnVu
Y3Rpb25DYWxsYmFja3MgY2FsbGJhY2tzID0gezAsIGNnR3JhZGllbnRDYWxsYmFjaywgcmVsZWFz
ZUNhY2hlZFN0b3BzfTsKLSAgICBDR0Zsb2F0IGRvbWFpbkxpbWl0c1syXSA9IHswLCAxfTsKLSAg
ICBDR0Zsb2F0IHJhbmdlTGltaXRzWzhdID0gezAsIDEsIDAsIDEsIDAsIDEsIDAsIDF9OwotICAg
IHNlcnZlci0+bV9zdG9wc0NhY2hlLT5yZWYoKTsKLSAgICBDR0Z1bmN0aW9uUmVmIHNoYWRpbmdG
dW5jdGlvbiA9IENHRnVuY3Rpb25DcmVhdGUoc2VydmVyLT5tX3N0b3BzQ2FjaGUuZ2V0KCksIDEs
IGRvbWFpbkxpbWl0cywgNCwgcmFuZ2VMaW1pdHMsICZjYWxsYmFja3MpOwotCi0gICAgQ0dDb2xv
clNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKLSAg
ICBDR1NoYWRpbmdSZWYgc2hhZGluZyA9IENHU2hhZGluZ0NyZWF0ZVJhZGlhbChjb2xvclNwYWNl
LCBmb2N1cywgMCwgY2VudGVyLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQocmFkaXVzKSwgc2hh
ZGluZ0Z1bmN0aW9uLCB0cnVlLCB0cnVlKTsKLSAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9y
U3BhY2UpOwotICAgIENHRnVuY3Rpb25SZWxlYXNlKHNoYWRpbmdGdW5jdGlvbik7Ci0gICAgcmV0
dXJuIHNoYWRpbmc7Ci19Ci0KLXZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6dXBkYXRlUXVh
cnR6R3JhZGllbnRTdG9wc0NhY2hlKGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+JiBzdG9w
cykKLXsKLSAgICBtX3N0b3BzQ2FjaGUgPSBTaGFyZWRTdG9wQ2FjaGU6OmNyZWF0ZSgpOwotICAg
IFZlY3RvcjxRdWFydHpHcmFkaWVudFN0b3A+JiBzdG9wc0NhY2hlID0gbV9zdG9wc0NhY2hlLT5t
X3N0b3BzOwotICAgIHN0b3BzQ2FjaGUucmVzaXplKHN0b3BzLnNpemUoKSk7Ci0gICAgQ0dGbG9h
dCBwcmV2aW91c09mZnNldCA9IDAuMGY7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0
b3BzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIENHRmxvYXQgY3Vyck9mZnNldCA9IG1pbihtYXgo
c3RvcHNbaV0uZmlyc3QsIHByZXZpb3VzT2Zmc2V0KSwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oMS4w
KSk7Ci0gICAgICAgIHN0b3BzQ2FjaGVbaV0ub2Zmc2V0ID0gY3Vyck9mZnNldDsKLSAgICAgICAg
c3RvcHNDYWNoZVtpXS5wcmV2aW91c0RlbHRhSW52ZXJzZSA9IDEuMGYgLyAoY3Vyck9mZnNldCAt
IHByZXZpb3VzT2Zmc2V0KTsKLSAgICAgICAgcHJldmlvdXNPZmZzZXQgPSBjdXJyT2Zmc2V0Owot
ICAgICAgICBDR0Zsb2F0KiBjYSA9IHN0b3BzQ2FjaGVbaV0uY29sb3JBcnJheTsKLSAgICAgICAg
c3RvcHNbaV0uc2Vjb25kLmdldFJHQkEoY2FbMF0sIGNhWzFdLCBjYVsyXSwgY2FbM10pOwotICAg
IH0KLX0KLQotdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50Ojp1cGRhdGVRdWFydHpHcmFkaWVu
dENhY2hlKGNvbnN0IFNWR1BhaW50U2VydmVyR3JhZGllbnQqIHNlcnZlcikKLXsKLSAgICAvLyBj
YWNoZSBvdXIgb3duIGNvcHkgb2YgdGhlIHN0b3BzIGZvciBmYXN0ZXIgYWNjZXNzLgotICAgIC8v
IHRoaXMgaXMgbGVnYWN5IGNvZGUsIHByb2JhYmx5IGNvdWxkIGJlIHJld29ya2VkLgotICAgIGlm
ICghbV9zdG9wc0NhY2hlKQotICAgICAgICB1cGRhdGVRdWFydHpHcmFkaWVudFN0b3BzQ2FjaGUo
Z3JhZGllbnRTdG9wcygpKTsKLQotICAgIENHU2hhZGluZ1JlbGVhc2UobV9zaGFkaW5nQ2FjaGUp
OwotCi0gICAgaWYgKHR5cGUoKSA9PSBSYWRpYWxHcmFkaWVudFBhaW50U2VydmVyKSB7Ci0gICAg
ICAgIGNvbnN0IFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQqIHJhZGlhbCA9IHN0YXRpY19j
YXN0PGNvbnN0IFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQqPihzZXJ2ZXIpOwotICAgICAg
ICBtX3NoYWRpbmdDYWNoZSA9IENHU2hhZGluZ1JlZkZvclJhZGlhbEdyYWRpZW50KHJhZGlhbCk7
Ci0gICAgfSBlbHNlIGlmICh0eXBlKCkgPT0gTGluZWFyR3JhZGllbnRQYWludFNlcnZlcikgewot
ICAgICAgICBjb25zdCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50KiBsaW5lYXIgPSBzdGF0
aWNfY2FzdDxjb25zdCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Kj4oc2VydmVyKTsKLSAg
ICAgICAgbV9zaGFkaW5nQ2FjaGUgPSBDR1NoYWRpbmdSZWZGb3JMaW5lYXJHcmFkaWVudChsaW5l
YXIpOwotICAgIH0KLX0KLQotLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh0IHBhaW50aW5nCi1z
dGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlck9iamVjdCogZmluZFRleHRSb290T2JqZWN0KGNvbnN0
IFJlbmRlck9iamVjdCogc3RhcnQpCi17Ci0gICAgd2hpbGUgKHN0YXJ0ICYmICFzdGFydC0+aXNT
VkdUZXh0KCkpCi0gICAgICAgIHN0YXJ0ID0gc3RhcnQtPnBhcmVudCgpOwotCi0gICAgQVNTRVJU
KHN0YXJ0KTsKLSAgICBBU1NFUlQoc3RhcnQtPmlzU1ZHVGV4dCgpKTsKLQotICAgIHJldHVybiBz
dGFydDsKLX0KLQotdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50Ojp0ZWFyZG93bihHcmFwaGlj
c0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRU
YXJnZXRUeXBlIHR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0Ci17Ci0gICAgQ0dTaGFk
aW5nUmVmIHNoYWRpbmcgPSBtX3NoYWRpbmdDYWNoZTsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4
dFJlZiA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEFTU0VSVChjb250ZXh0UmVm
KTsKLQotICAgIC8vIEFzIHJlbmRlclBhdGgoKSBpcyBub3QgdXNlZCB3aGVuIHBhaW50aW5nIHRl
eHQsIHNwZWNpYWwgbG9naWMgbmVlZGVkIGhlcmUuCi0gICAgaWYgKGlzUGFpbnRpbmdUZXh0KSB7
Ci0gICAgICAgIGlmIChtX3NhdmVkQ29udGV4dCkgewotICAgICAgICAgICAgRmxvYXRSZWN0IG1h
c2tCQm94ID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihmaW5kVGV4dFJvb3RPYmplY3Qob2Jq
ZWN0KSktPnJlbGF0aXZlQkJveChmYWxzZSk7Ci0KLSAgICAgICAgICAgIC8vIEZpeHVwIHRyYW5z
Zm9ybWF0aW9ucyB0byBiZSBhYmxlIHRvIGNsaXAgdG8gbWFzawotICAgICAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIHRyYW5zZm9ybSA9IG9iamVjdC0+YWJzb2x1dGVUcmFuc2Zvcm0oKTsKLSAgICAg
ICAgICAgIEZsb2F0UmVjdCB0ZXh0Qm91bmRhcnkgPSB0cmFuc2Zvcm0ubWFwUmVjdChtYXNrQkJv
eCk7Ci0KLSAgICAgICAgICAgIEludFNpemUgbWFza1NpemUobHJvdW5kZih0ZXh0Qm91bmRhcnku
d2lkdGgoKSksIGxyb3VuZGYodGV4dEJvdW5kYXJ5LmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBj
bGFtcEltYWdlQnVmZmVyU2l6ZVRvVmlld3BvcnQob2JqZWN0LT5kb2N1bWVudCgpLT5yZW5kZXJl
cigpLCBtYXNrU2l6ZSk7Ci0KLSAgICAgICAgICAgIGlmIChtYXNrU2l6ZS53aWR0aCgpIDwgc3Rh
dGljX2Nhc3Q8aW50Pih0ZXh0Qm91bmRhcnkud2lkdGgoKSkpCi0gICAgICAgICAgICAgICAgdGV4
dEJvdW5kYXJ5LnNldFdpZHRoKG1hc2tTaXplLndpZHRoKCkpOwotCi0gICAgICAgICAgICBpZiAo
bWFza1NpemUuaGVpZ2h0KCkgPCBzdGF0aWNfY2FzdDxpbnQ+KHRleHRCb3VuZGFyeS5oZWlnaHQo
KSkpCi0gICAgICAgICAgICAgICAgdGV4dEJvdW5kYXJ5LnNldEhlaWdodChtYXNrU2l6ZS5oZWln
aHQoKSk7Ci0KLSAgICAgICAgICAgIC8vIENsaXAgY3VycmVudCBjb250ZXh0IHRvIG1hc2sgaW1h
Z2UgKGdyYWRpZW50KQotICAgICAgICAgICAgbV9zYXZlZENvbnRleHQtPmNvbmNhdENUTSh0cmFu
c2Zvcm0uaW52ZXJzZSgpKTsKLSAgICAgICAgICAgIG1fc2F2ZWRDb250ZXh0LT5jbGlwVG9JbWFn
ZUJ1ZmZlcih0ZXh0Qm91bmRhcnksIG1faW1hZ2VCdWZmZXIpOwotICAgICAgICAgICAgbV9zYXZl
ZENvbnRleHQtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotCi0gICAgICAgICAgICBoYW5kbGVCb3Vu
ZGluZ0JveE1vZGVBbmRHcmFkaWVudFRyYW5zZm9ybWF0aW9uKG1fc2F2ZWRDb250ZXh0LCBtYXNr
QkJveCk7Ci0KLSAgICAgICAgICAgIC8vIFJlc3RvcmUgb24tc2NyZWVuIGRyYXdpbmcgY29udGV4
dCwgYWZ0ZXIgd2UgZ290IHRoZSBpbWFnZSBvZiB0aGUgZ3JhZGllbnQKLSAgICAgICAgICAgIGRl
bGV0ZSBtX2ltYWdlQnVmZmVyOwotCi0gICAgICAgICAgICBjb250ZXh0ID0gbV9zYXZlZENvbnRl
eHQ7Ci0gICAgICAgICAgICBjb250ZXh0UmVmID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
Ci0KLSAgICAgICAgICAgIG1fc2F2ZWRDb250ZXh0ID0gMDsKLSAgICAgICAgICAgIG1faW1hZ2VC
dWZmZXIgPSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQ0dDb250ZXh0RHJhd1NoYWRpbmco
Y29udGV4dFJlZiwgc2hhZGluZyk7Ci0gICAgY29udGV4dC0+cmVzdG9yZSgpOwotfQotCi12b2lk
IFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnJlbmRlclBhdGgoR3JhcGhpY3NDb250ZXh0KiYgY29u
dGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXRoLCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkg
Y29uc3QKLXsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBwYXRoLT5zdHlsZSgpOwotICAgIENH
Q29udGV4dFJlZiBjb250ZXh0UmVmID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAg
QVNTRVJUKGNvbnRleHRSZWYpOwotICAgIAotICAgIGJvb2wgaXNGaWxsZWQgPSAodHlwZSAmIEFw
cGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKTsKLQot
ICAgIC8vIENvbXB1dGUgZGVzdGluYXRpb24gb2JqZWN0IGJvdW5kaW5nIGJveAotICAgIEZsb2F0
UmVjdCBvYmplY3RCQm94OwotICAgIGlmIChib3VuZGluZ0JveE1vZGUoKSkgewotICAgICAgICBG
bG9hdFJlY3QgYmJveCA9IHBhdGgtPnJlbGF0aXZlQkJveChmYWxzZSk7Ci0gICAgICAgIGlmIChi
Ym94LndpZHRoKCkgPiAwICYmIGJib3guaGVpZ2h0KCkgPiAwKQotICAgICAgICAgICAgb2JqZWN0
QkJveCA9IGJib3g7Ci0gICAgfQotCi0gICAgaWYgKGlzRmlsbGVkKQotICAgICAgICBjbGlwVG9G
aWxsUGF0aChjb250ZXh0UmVmLCBwYXRoKTsKLSAgICBlbHNlCi0gICAgICAgIGNsaXBUb1N0cm9r
ZVBhdGgoY29udGV4dFJlZiwgcGF0aCk7Ci0KLSAgICBoYW5kbGVCb3VuZGluZ0JveE1vZGVBbmRH
cmFkaWVudFRyYW5zZm9ybWF0aW9uKGNvbnRleHQsIG9iamVjdEJCb3gpOwotfQotCi12b2lkIFNW
R1BhaW50U2VydmVyR3JhZGllbnQ6OmhhbmRsZUJvdW5kaW5nQm94TW9kZUFuZEdyYWRpZW50VHJh
bnNmb3JtYXRpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldFJlY3QpIGNvbnN0Ci17Ci0gICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpKSB7Ci0gICAgICAg
IC8vIENob29zZSBkZWZhdWx0IGdyYWRpZW50IGJvdW5kaW5nIGJveAotICAgICAgICBGbG9hdFJl
Y3QgZ3JhZGllbnRCQm94KDAuMGYsIDAuMGYsIDEuMGYsIDEuMGYpOwotCi0gICAgICAgIC8vIEdl
bmVyYXRlIGEgdHJhbnNmb3JtIHRvIG1hcCBiZXR3ZWVuIGJvdGggYm91bmRpbmcgYm94ZXMKLSAg
ICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKG1ha2VNYXBCZXR3ZWVuUmVjdHMoZ3JhZGllbnRCQm94
LCB0YXJnZXRSZWN0KSk7Ci0gICAgfQotCi0gICAgLy8gQXBwbHkgdGhlIGdyYWRpZW50J3Mgb3du
IHRyYW5zZm9ybQotICAgIGNvbnRleHQtPmNvbmNhdENUTShncmFkaWVudFRyYW5zZm9ybSgpKTsK
LX0KLQotYm9vbCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXR1cChHcmFwaGljc0NvbnRleHQq
JiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBl
IHR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0Ci17Ci0gICAgbV9vd25lckVsZW1lbnQt
PmJ1aWxkR3JhZGllbnQoKTsKLQotICAgIC8vIFdlIG5lZWQgYSBob29rIHRvIGNhbGwgdGhpcyB3
aGVuIHRoZSBncmFkaWVudCBnZXRzIHVwZGF0ZWQsIGJlZm9yZSBkcmF3bi4KLSAgICBpZiAoIW1f
c2hhZGluZ0NhY2hlKQotICAgICAgICBjb25zdF9jYXN0PFNWR1BhaW50U2VydmVyR3JhZGllbnQq
Pih0aGlzKS0+dXBkYXRlUXVhcnR6R3JhZGllbnRDYWNoZSh0aGlzKTsKLQotICAgIENHQ29udGV4
dFJlZiBjb250ZXh0UmVmID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQVNTRVJU
KGNvbnRleHRSZWYpOwotCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgp
OwotCi0gICAgYm9vbCBpc0ZpbGxlZCA9ICh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAm
JiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpOwotICAgIGJvb2wgaXNTdHJva2VkID0gKHR5
cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0
cm9rZSgpOwotCi0gICAgQVNTRVJUKGlzRmlsbGVkICYmICFpc1N0cm9rZWQgfHwgIWlzRmlsbGVk
ICYmIGlzU3Ryb2tlZCk7Ci0KLSAgICBjb250ZXh0LT5zYXZlKCk7Ci0gICAgQ0dDb250ZXh0U2V0
QWxwaGEoY29udGV4dFJlZiwgaXNGaWxsZWQgPyBzdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbE9wYWNp
dHkoKSA6IHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VPcGFjaXR5KCkpOwotCi0gICAgaWYgKGlz
UGFpbnRpbmdUZXh0KSB7Ci0gICAgICAgIEZsb2F0UmVjdCBtYXNrQkJveCA9IGNvbnN0X2Nhc3Q8
UmVuZGVyT2JqZWN0Kj4oZmluZFRleHRSb290T2JqZWN0KG9iamVjdCkpLT5yZWxhdGl2ZUJCb3go
ZmFsc2UpOwotICAgICAgICBJbnRSZWN0IG1hc2tSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChvYmpl
Y3QtPmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChtYXNrQkJveCkpOwotCi0gICAgICAgIElu
dFNpemUgbWFza1NpemUobWFza1JlY3Qud2lkdGgoKSwgbWFza1JlY3QuaGVpZ2h0KCkpOwotICAg
ICAgICBjbGFtcEltYWdlQnVmZmVyU2l6ZVRvVmlld3BvcnQob2JqZWN0LT5kb2N1bWVudCgpLT5y
ZW5kZXJlcigpLCBtYXNrU2l6ZSk7Ci0KLSAgICAgICAgYXV0b19wdHI8SW1hZ2VCdWZmZXI+IG1h
c2tJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobWFza1NpemUsIGZhbHNlKTsKLQotICAgICAg
ICBpZiAoIW1hc2tJbWFnZS5nZXQoKSkgewotICAgICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgR3JhcGhp
Y3NDb250ZXh0KiBtYXNrSW1hZ2VDb250ZXh0ID0gbWFza0ltYWdlLT5jb250ZXh0KCk7Ci0gICAg
ICAgIG1hc2tJbWFnZUNvbnRleHQtPnNhdmUoKTsKLQotICAgICAgICBtYXNrSW1hZ2VDb250ZXh0
LT5zZXRUZXh0RHJhd2luZ01vZGUoaXNGaWxsZWQgPyBjVGV4dEZpbGwgOiBjVGV4dFN0cm9rZSk7
Ci0gICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtbWFza1JlY3QueCgpLCAtbWFz
a1JlY3QueSgpKTsKLSAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+Y29uY2F0Q1RNKG9iamVjdC0+
YWJzb2x1dGVUcmFuc2Zvcm0oKSk7Ci0KLSAgICAgICAgbV9pbWFnZUJ1ZmZlciA9IG1hc2tJbWFn
ZS5yZWxlYXNlKCk7Ci0gICAgICAgIG1fc2F2ZWRDb250ZXh0ID0gY29udGV4dDsKLQotICAgICAg
ICBjb250ZXh0ID0gbWFza0ltYWdlQ29udGV4dDsKLSAgICAgICAgY29udGV4dFJlZiA9IGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIH0KLQotICAgIGlmIChpc1N0cm9rZWQpCi0gICAg
ICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVjdCk7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjppbnZh
bGlkYXRlKCkKLXsKLSAgICBTVkdQYWludFNlcnZlcjo6aW52YWxpZGF0ZSgpOwotCi0gICAgLy8g
SW52YWxpZGF0ZSBjYWNoZXMKLSAgICBDR1NoYWRpbmdSZWxlYXNlKG1fc2hhZGluZ0NhY2hlKTsK
LQotICAgIG1fc3RvcHNDYWNoZSA9IDA7Ci0gICAgbV9zaGFkaW5nQ2FjaGUgPSAwOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvcXQvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlckdyYWRpZW50UXQuY3BwCShyZXZpc2lvbiAz
ODg1OCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyR3JhZGllbnRR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotCi0gICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0K
LSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyR3JhZGllbnQuaCIK
LQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5o
IgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU1ZHR3JhZGllbnRFbGVtZW50
LmgiCi0KLSNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpbmNsdWRlIDxRUGFpbnRlclBhdGg+Ci0jaW5j
bHVkZSA8UUNvbG9yPgotI2luY2x1ZGUgPFFHcmFkaWVudD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi0vLyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBsaW5lYXIgJiByYWRpYWwgZ3JhZGllbnQK
LXZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6ZmlsbENvbG9yQXJyYXkoUUdyYWRpZW50JiBn
cmFkaWVudCwgY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mIHN0b3BzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBvcGFjaXR5KSBjb25zdAot
ewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9wcy5zaXplKCk7ICsraSkgewotICAg
ICAgICBmbG9hdCBvZmZzZXQgPSBzdG9wc1tpXS5maXJzdDsKLSAgICAgICAgQ29sb3IgY29sb3Ig
PSBzdG9wc1tpXS5zZWNvbmQ7Ci0KLSAgICAgICAgUUNvbG9yIGMoY29sb3IucmVkKCksIGNvbG9y
LmdyZWVuKCksIGNvbG9yLmJsdWUoKSk7Ci0gICAgICAgIGMuc2V0QWxwaGEoaW50KGNvbG9yLmFs
cGhhKCkgKiBvcGFjaXR5KSk7Ci0KLSAgICAgICAgZ3JhZGllbnQuc2V0Q29sb3JBdChvZmZzZXQs
IGMpOwotICAgIH0KLX0KLQotYm9vbCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXR1cChHcmFw
aGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUsIGJv
b2wgaXNQYWludGluZ1RleHQpIGNvbnN0Ci17Ci0gICAgbV9vd25lckVsZW1lbnQtPmJ1aWxkR3Jh
ZGllbnQoKTsKLQotICAgIFFQYWludGVyKiBwYWludGVyKGNvbnRleHQgPyBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKSA6IDApOwotICAgIFFfQVNTRVJUKHBhaW50ZXIpOwotCi0gICAgUVBhaW50
ZXJQYXRoKiBwYXRoKGNvbnRleHQgPyBjb250ZXh0LT5jdXJyZW50UGF0aCgpIDogMCk7Ci0gICAg
UV9BU1NFUlQocGF0aCk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBv
YmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2Jq
ZWN0LT5zdHlsZSgpOwotCi0gICAgUUdyYWRpZW50IGdyYWRpZW50ID0gc2V0dXBHcmFkaWVudChj
b250ZXh0LCBvYmplY3QpOwotCi0gICAgcGFpbnRlci0+c2V0UGVuKFF0OjpOb1Blbik7Ci0gICAg
cGFpbnRlci0+c2V0QnJ1c2goUXQ6Ok5vQnJ1c2gpOwotCi0gICAgaWYgKHNwcmVhZE1ldGhvZCgp
ID09IFNwcmVhZE1ldGhvZFJlcGVhdCkKLSAgICAgICAgZ3JhZGllbnQuc2V0U3ByZWFkKFFHcmFk
aWVudDo6UmVwZWF0U3ByZWFkKTsKLSAgICBlbHNlIGlmIChzcHJlYWRNZXRob2QoKSA9PSBTcHJl
YWRNZXRob2RSZWZsZWN0KQotICAgICAgICBncmFkaWVudC5zZXRTcHJlYWQoUUdyYWRpZW50OjpS
ZWZsZWN0U3ByZWFkKTsKLSAgICBlbHNlCi0gICAgICAgIGdyYWRpZW50LnNldFNwcmVhZChRR3Jh
ZGllbnQ6OlBhZFNwcmVhZCk7ICAgIAotICAgIGRvdWJsZSBvcGFjaXR5ID0gMS4wOwotCi0gICAg
aWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdmdTdHlsZS0+aGFzRmlsbCgp
KSB7Ci0gICAgICAgIGZpbGxDb2xvckFycmF5KGdyYWRpZW50LCBncmFkaWVudFN0b3BzKCksIG9w
YWNpdHkpOwotCi0gICAgICAgIFFCcnVzaCBicnVzaChncmFkaWVudCk7Ci0gICAgICAgIGJydXNo
LnNldE1hdHJpeChncmFkaWVudFRyYW5zZm9ybSgpKTsKLQotICAgICAgICBwYWludGVyLT5zZXRC
cnVzaChicnVzaCk7Ci0gICAgICAgIGNvbnRleHQtPnNldEZpbGxSdWxlKHN2Z1N0eWxlLT5maWxs
UnVsZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlw
ZSkgJiYgc3ZnU3R5bGUtPmhhc1N0cm9rZSgpKSB7Ci0gICAgICAgIGZpbGxDb2xvckFycmF5KGdy
YWRpZW50LCBncmFkaWVudFN0b3BzKCksIG9wYWNpdHkpOwotCi0gICAgICAgIFFQZW4gcGVuOwot
ICAgICAgICBRQnJ1c2ggYnJ1c2goZ3JhZGllbnQpOwotICAgICAgICBicnVzaC5zZXRNYXRyaXgo
Z3JhZGllbnRUcmFuc2Zvcm0oKSk7Ci0gICAgICAgIHBlbi5zZXRCcnVzaChicnVzaCk7Ci0gICAg
ICAgIHBhaW50ZXItPnNldFBlbihwZW4pOwotCi0gICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0Nv
bnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVjdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLS8vIHZpbTp0cz00Om5v
ZXQKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFp
bnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0LmNwcAkocmV2aXNpb24gMzg4NTgpCisrKyBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFC
TEUoU1ZHKQotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQuaCIKLSNpbmNs
dWRlICJTVkdHcmFkaWVudEVsZW1lbnQuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKLQotI2luY2x1ZGUgPFFMaW5lYXJHcmFkaWVudD4K
LSNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpbmNsdWRlIDxRUGFpbnRlclBhdGg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotUUdyYWRpZW50IFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQ6OnNl
dHVwR3JhZGllbnQoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0
KiBvYmplY3QpIGNvbnN0Ci17Ci0gICAgUVBhaW50ZXJQYXRoKiBwYXRoKGNvbnRleHQgPyBjb250
ZXh0LT5jdXJyZW50UGF0aCgpIDogMCk7Ci0gICAgUV9BU1NFUlQocGF0aCk7Ci0KLSAgICBkb3Vi
bGUgeDEsIHgyLCB5MSwgeTI7Ci0gICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpKSB7Ci0gICAgICAg
IFFSZWN0RiBiYm94ID0gcGF0aC0+Ym91bmRpbmdSZWN0KCk7Ci0gICAgICAgIHgxID0gYmJveC54
KCk7Ci0gICAgICAgIHkxID0gYmJveC55KCk7Ci0gICAgICAgIHgyID0gYmJveC54KCkgKyBiYm94
LndpZHRoKCk7Ci0gICAgICAgIHkyID0gYmJveC55KCkgKyBiYm94LmhlaWdodCgpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHgxID0gZ3JhZGllbnRTdGFydCgpLngoKTsKLSAgICAgICAgeTEgPSBn
cmFkaWVudFN0YXJ0KCkueSgpOwotICAgICAgICB4MiA9IGdyYWRpZW50RW5kKCkueCgpOwotICAg
ICAgICB5MiA9IGdyYWRpZW50RW5kKCkueSgpOwotICAgIH0KLQotICAgIFFMaW5lYXJHcmFkaWVu
dCBncmFkaWVudChRUG9pbnRGKHgxLCB5MSksIFFQb2ludEYoeDIsIHkyKSk7Ci0KLSAgICByZXR1
cm4gZ3JhZGllbnQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLS8v
IHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2Vy
dmVyUmFkaWFsR3JhZGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvcXQvU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0LmNwcAkocmV2aXNpb24gMzg4NTgp
CisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotCi0gICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0K
LSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGll
bnQuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclBh
dGguaCIKLQotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpbmNsdWRl
IDxRUGFpbnRlclBhdGg+Ci0jaW5jbHVkZSA8UVJhZGlhbEdyYWRpZW50PgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVFHcmFkaWVudCBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50OjpzZXR1
cEdyYWRpZW50KEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCog
b2JqZWN0KSBjb25zdAotewotICAgIFFQYWludGVyKiBwYWludGVyKGNvbnRleHQgPyBjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKSA6IDApOwotICAgIFFfQVNTRVJUKHBhaW50ZXIpOwotCi0gICAg
UVBhaW50ZXJQYXRoKiBwYXRoKGNvbnRleHQgPyBjb250ZXh0LT5jdXJyZW50UGF0aCgpIDogMCk7
Ci0gICAgUV9BU1NFUlQocGF0aCk7Ci0KLSAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBv
YmplY3QtPnN0eWxlKCk7Ci0KLSAgICBRTWF0cml4IG1hdCA9IHBhaW50ZXItPm1hdHJpeCgpOwot
Ci0gICAgZG91YmxlIGN4LCBmeCwgY3ksIGZ5LCByOwotICAgIGlmIChib3VuZGluZ0JveE1vZGUo
KSkgewotICAgICAgICBRUmVjdEYgYmJveCA9IHBhdGgtPmJvdW5kaW5nUmVjdCgpOyAKLSAgICAg
ICAgY3ggPSBkb3VibGUoYmJveC5sZWZ0KCkpICsgKGRvdWJsZShncmFkaWVudENlbnRlcigpLngo
KSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LndpZHRoKCkpKTsKLSAgICAgICAgY3kgPSBkb3VibGUo
YmJveC50b3AoKSkgKyAoZG91YmxlKGdyYWRpZW50Q2VudGVyKCkueSgpIC8gMTAwLjApICogZG91
YmxlKGJib3guaGVpZ2h0KCkpKTsKLSAgICAgICAgZnggPSBkb3VibGUoYmJveC5sZWZ0KCkpICsg
KGRvdWJsZShncmFkaWVudEZvY2FsKCkueCgpIC8gMTAwLjApICogZG91YmxlKGJib3gud2lkdGgo
KSkpIC0gY3g7Ci0gICAgICAgIGZ5ID0gZG91YmxlKGJib3gudG9wKCkpICsgKGRvdWJsZShncmFk
aWVudEZvY2FsKCkueSgpIC8gMTAwLjApICogZG91YmxlKGJib3guaGVpZ2h0KCkpKSAtIGN5Owot
ICAgICAgICByID0gZG91YmxlKGdyYWRpZW50UmFkaXVzKCkgLyAxMDAuMCkgKiAoc3FydChwb3co
YmJveC53aWR0aCgpLCAyKSArIHBvdyhiYm94LmhlaWdodCgpLCAyKSkpOwotCi0gICAgICAgIGZs
b2F0IHdpZHRoID0gYmJveC53aWR0aCgpOwotICAgICAgICBmbG9hdCBoZWlnaHQgPSBiYm94Lmhl
aWdodCgpOwotCi0gICAgICAgIGludCBkaWZmID0gaW50KHdpZHRoIC0gaGVpZ2h0KTsgLy8gYWxs
b3cgc2xpZ2h0IHRvbGVyYW5jZQotICAgICAgICBpZiAoIShkaWZmID4gLTIgJiYgZGlmZiA8IDIp
KSB7Ci0gICAgICAgICAgICAvLyBtYWtlIGVsbGlwdGljYWwgb3IgY2lyY3VsYXIgZGVwZW5kaW5n
IG9uIGJib3ggYXNwZWN0IHJhdGlvCi0gICAgICAgICAgICBmbG9hdCByYXRpb1ggPSAod2lkdGgg
LyBoZWlnaHQpOwotICAgICAgICAgICAgZmxvYXQgcmF0aW9ZID0gKGhlaWdodCAvIHdpZHRoKTsK
LSAgICAgICAgICAgIG1hdC5zY2FsZSgod2lkdGggPiBoZWlnaHQpID8gMSA6IHJhdGlvWCwgKHdp
ZHRoID4gaGVpZ2h0KSA/IHJhdGlvWSA6IDEpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgY3ggPSBncmFkaWVudENlbnRlcigpLngoKTsKLSAgICAgICAgY3kgPSBncmFkaWVudENl
bnRlcigpLnkoKTsKLQotICAgICAgICBmeCA9IGdyYWRpZW50Rm9jYWwoKS54KCk7Ci0gICAgICAg
IGZ5ID0gZ3JhZGllbnRGb2NhbCgpLnkoKTsKLQotICAgICAgICBmeCAtPSBjeDsKLSAgICAgICAg
ZnkgLT0gY3k7Ci0KLSAgICAgICAgciA9IGdyYWRpZW50UmFkaXVzKCk7Ci0gICAgfQotCi0gICAg
aWYgKHNxcnQoZnggKiBmeCArIGZ5ICogZnkpID4gcikgewotICAgICAgICAvLyBTcGVjOiBJZiAo
ZngsIGZ5KSBsaWVzIG91dHNpZGUgdGhlIGNpcmNsZSBkZWZpbmVkIGJ5IChjeCwgY3kpIGFuZCBy
LCBzZXQgKGZ4LCBmeSkKLSAgICAgICAgLy8gdG8gdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBv
ZiB0aGUgbGluZSB0aHJvdWdoIChmeCwgZnkpIGFuZCB0aGUgY2lyY2xlLgotICAgICAgICBkb3Vi
bGUgYW5nbGUgPSBhdGFuMihmeSwgZngpOwotICAgICAgICBmeCA9IGludChjb3MoYW5nbGUpICog
cikgLSAxOwotICAgICAgICBmeSA9IGludChzaW4oYW5nbGUpICogcikgLSAxOwotICAgIH0KLQot
ICAgIFFSYWRpYWxHcmFkaWVudCBncmFkaWVudChRUG9pbnRGKGN4LCBjeSksIGdyYWRpZW50UmFk
aXVzKCksIFFQb2ludEYoZnggKyBjeCwgZnkgKyBjeSkpOwotCi0gICAgcmV0dXJuIGdyYWRpZW50
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0vLyB2aW06dHM9NDpu
b2V0CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzODg2MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkgQEAKKzIwMDgtMTItMDEgIERpcmsgU2NodWx6ZSAg
PHNldCBFTUFJTF9BRERSRVNTIGVudmlyb25tZW50IHZhcmlhYmxlPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6
CisKIDIwMDgtMTItMDEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IE1hcmsgUm93ZS4KSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2d0
ay9Ta2lwcGVkCShyZXZpc2lvbiAzODg1OCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9T
a2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA3LDYgKzIxMDcsMTIgQEAgZmFzdC94c2wveHNs
dC1taXNtYXRjaGVkLXRhZ3MtaW4teHNsdC54bQogZmFzdC94c2wveHNsdC1taXNzaW5nLW5hbWVz
cGFjZS1pbi14c2x0LnhtbAogZmFzdC94c2wveHNsdC1yZWxhdGl2ZS1wYXRoLnhtbAogZmFzdC94
c2wveHNsdF91bmljb2RlLnhtbAorZmFzdAorcGx1Z2lucworCisjZmFpbGVkIFNWRyB0ZXN0cwor
c3ZnL2Nzcy9nZXRDb21wdXRlZFN0eWxlLWJhc2ljLnhodG1sCitzdmcvY3NzL2Nzcy1ib3gtbWlu
LXdpZHRoLmh0bWwKIAogIyBibGFja2xpc3QgZXZlcnl0aGluZwogYWNjZXNzaWJpbGl0eQpAQCAt
MjEyNCw3ICsyMTMwLDE0IEBAIHByaW50aW5nCiBzY3JvbGxiYXJzCiBzZWN1cml0eQogc3RvcmFn
ZQotc3ZnCitzdmcvYmF0aWsKK3N2Zy9jYXJ0by5uZXQKK3N2Zy9keW5hbWljLXVwZGF0ZXMKK3N2
Zy9oaXhpZQorI3N2Zy9XM0MtU1ZHLTEuMQorc3ZnL3dlYmFyY2hpdmUKK3N2Zy9jdXN0b20KK3N2
Zy90ZXh0CiB0YWJsZXMKIHRyYW5zZm9ybXMKIHRyYW5zaXRpb25zCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25711</attachid>
            <date>2008-12-03 08:06:48 -0800</date>
            <delta_ts>2008-12-03 08:28:55 -0800</delta_ts>
            <desc>makes SVGPaintServerGradient platform-independent</desc>
            <filename>gradient2.patch</filename>
            <type>text/plain</type>
            <size>60563</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODk0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMDgtMTItMDMgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IHVzZSBvZiB0aGUgZ3JhZGllbnQgY29kZSBpbiBHcmFwaGljc0NvbnRleHQgYW5kIGdldCByaWQg
b2YgbW9zdCBvZiB0aGUKKyAgICAgICAgcGxhdGZvcm0gZGVwZW5kZW50IGNvZGUuCisKKyAgICAg
ICAgU1ZHIHNob3VsZCB1c2UgdGhlIG5ldyBHcmFkaWVudCBzdXBwb3J0IG9uIEdyYXBoaWNzQ29u
dGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1
NDMKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUucHJvOgor
ICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFNpemUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2l6ZTo6c2hydW5rVG8pOgor
ICAgICAgICAqIHN2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWRpZW50KToKKyAgICAgICAg
KiBzdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1JhZGlhbEdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkaWVudCk6CisgICAgICAgICogc3ZnL2dy
YXBoaWNzL1NWR1BhaW50U2VydmVyLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50
U2VydmVyR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudDo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWlu
dFNlcnZlckdyYWRpZW50Ojp+U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpncmFkaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpmaW5kVGV4dFJvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFza0FuZFN3
YXBDb250ZXh0Rm9yVGV4dEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNsaXBUb1RleHRN
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnJlbmRlclBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6dGVhcmRvd24pOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVudFN0b3BzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmdyYWRpZW50U3RvcHMpOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Lmg6CisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQuaDoKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJDZy5jcHA6
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyR3JhZGll
bnRRdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2Vy
dmVyTGluZWFyR3JhZGllbnRRdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNz
L3F0L1NWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdC5jcHA6IFJlbW92ZWQuCisKIDIwMDgt
MTItMDMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE1hcmsgUm93ZS4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMzg4NTgpCisrKyBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgxLDcgKzI3ODEsNiBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N2
Zy9ncmFwaGljcy9jYWlyby9SZW5kZXJQYXRoQ2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3N2Zy9ncmFw
aGljcy9jYWlyby9TVkdQYWludFNlcnZlckNhaXJvLmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcCBcCiAJV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwIFwKIAlXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9jYWlyby9TVkdSZXNvdXJjZUZpbHRlckNhaXJvLmNwcCBcCiAJV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUmVzb3VyY2VNYXNrZXJDYWlyby5jcHAKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2
aXNpb24gMzg4NTgpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzUyLDExICsxNzUyLDggQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0xKSB7CiAKIFNP
VVJDRVMgKz0gXAogICAgICAgICBzdmcvZ3JhcGhpY3MvcXQvUmVuZGVyUGF0aFF0LmNwcCBcCi0g
ICAgICAgIHN2Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlckdyYWRpZW50UXQuY3BwIFwKLSAg
ICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdC5jcHAg
XAogICAgICAgICBzdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQuY3BwIFwK
ICAgICAgICAgc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyUXQuY3BwIFwKLSAgICAgICAg
c3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdC5jcHAgXAogICAg
ICAgICBzdmcvZ3JhcGhpY3MvcXQvU1ZHUmVzb3VyY2VGaWx0ZXJRdC5jcHAgXAogICAgICAgICBz
dmcvZ3JhcGhpY3MvcXQvU1ZHUmVzb3VyY2VNYXNrZXJRdC5jcHAKIApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAzODg1OCkKKysrIFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTE1NDQwLDI2ICsx
NTQ0MCw2IEBACiAJCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQkJPC9GaWxlPg0KIAkJ
CQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xjZ1xTVkdQYWlu
dFNlcnZlckdyYWRpZW50Q2cuY3BwIg0KLQkJCQkJCT4NCi0JCQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24NCi0JCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm98V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQotCQkJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQkvPg0KLQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
DQotCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm98
V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+DQotCQkJ
CQkJCTxUb29sDQotCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQkvPg0K
LQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0K
IAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGNnXFNWR1BhaW50U2VydmVyUGF0
dGVybkNnLmNwcCINCiAJCQkJCQk+DQogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQpAQCAtMTU3
NTIsNDIgKzE1NzMyLDYgQEAKIAkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCQk8L0Zp
bGU+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGNh
aXJvXFNWR1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHAiDQotCQkJCQkJPg0KLQkJCQkJCTxG
aWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJCT4NCi0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCS8+DQotCQkJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4NCi0JCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQkJTmFtZT0iUmVsZWFz
ZXxXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJCT4NCi0J
CQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCS8+
DQotCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24N
Ci0JCQkJCQkJTmFtZT0iRGVidWdfSW50ZXJuYWx8V2luMzIiDQotCQkJCQkJCUV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQotCQkJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQkvPg0KLQkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
DQotCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJCU5hbWU9IlJlbGVhc2VfUEdPfFdp
bjMyIg0KLQkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCQkJPg0KLQkJCQkJ
CQk8VG9vbA0KLQkJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJLz4NCi0J
CQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCiAJ
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xjYWlyb1xTVkdQYWludFNlcnZlclBh
dHRlcm5DYWlyby5jcHAiDQogCQkJCQkJPg0KIAkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAz
ODg1OCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTUzLDcgKzMxNTMsNiBAQAogCQlCMjU1OTkyRDBEMDBEOEJBMDBCQjgy
NUMgLyogQ2dTdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjU1OTg5MTBEMDBEOEI4MDBCQjgyNUMgLyogQ2dTdXBwb3J0LmggKi87IH07CiAJ
CUIyNTU5OTJFMEQwMEQ4QkEwMEJCODI1QyAvKiBSZW5kZXJQYXRoQ2cuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTIwRDAwRDhCODAwQkI4
MjVDIC8qIFJlbmRlclBhdGhDZy5jcHAgKi87IH07CiAJCUIyNTU5OTJGMEQwMEQ4QkEwMEJCODI1
QyAvKiBTVkdQYWludFNlcnZlckNnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyNTU5ODkzMEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZl
ckNnLmNwcCAqLzsgfTsKLQkJQjI1NTk5MzAwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2Vy
dmVyR3JhZGllbnRDZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjU1OTg5NDBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dENnLmNwcCAqLzsgfTsKIAkJQjI1NTk5MzEwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2Vy
dmVyUGF0dGVybkNnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyNTU5ODk1MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5D
Zy5jcHAgKi87IH07CiAJCUIyNTU5OTM1MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdSZXNvdXJjZUZp
bHRlckNnLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjI1NTk4OTkwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlRmlsdGVyQ2cubW0gKi87IH07
CiAJCUIyNTU5OTM3MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1hc2tlckNnLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OUIwRDAw
RDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFza2VyQ2cubW0gKi87IH07CkBAIC03ODE3LDcg
Kzc4MTYsNiBAQAogCQlCMjU1OTg5MTBEMDBEOEI4MDBCQjgyNUMgLyogQ2dTdXBwb3J0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDZ1N1cHBvcnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OTIwRDAwRDhCODAwQkI4MjVDIC8qIFJlbmRlclBhdGhD
Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyUGF0aENn
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OTMwRDAwRDhCODAwQkI4
MjVDIC8qIFNWR1BhaW50U2VydmVyQ2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNWR1BhaW50U2VydmVyQ2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCMjU1OTg5NDBEMDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENn
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYWludFNlcnZl
ckdyYWRpZW50Q2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjU1OTg5NTBE
MDBEOEI4MDBCQjgyNUMgLyogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OTkwRDAwRDhCODAwQkI4MjVDIC8q
IFNWR1Jlc291cmNlRmlsdGVyQ2cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gU1ZHUmVzb3VyY2VGaWx0ZXJDZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjI1NTk4OUIwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFza2VyQ2cubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU1ZHUmVzb3VyY2VNYXNr
ZXJDZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjk5LDcgKzEyNjk3LDYg
QEAKIAkJCQlCMjU1OTg5MTBEMDBEOEI4MDBCQjgyNUMgLyogQ2dTdXBwb3J0LmggKi8sCiAJCQkJ
QjI1NTk4OTIwRDAwRDhCODAwQkI4MjVDIC8qIFJlbmRlclBhdGhDZy5jcHAgKi8sCiAJCQkJQjI1
NTk4OTMwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyQ2cuY3BwICovLAotCQkJCUIy
NTU5ODk0MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwICov
LAogCQkJCUIyNTU5ODk1MEQwMEQ4QjgwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5D
Zy5jcHAgKi8sCiAJCQkJQjI1NTk4OTkwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNlRmls
dGVyQ2cubW0gKi8sCiAJCQkJQjI1NTk4OUIwRDAwRDhCODAwQkI4MjVDIC8qIFNWR1Jlc291cmNl
TWFza2VyQ2cubW0gKi8sCkBAIC0xNzg0MCw3ICsxNzgzNyw2IEBACiAJCQkJQjI1NTk5QTYwRDAw
RDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
NTU5OTJGMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckNnLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyNTU5OUE4MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQYWludFNlcnZlckdyYWRp
ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNTU5OTMwMEQwMEQ4QkEwMEJCODI1QyAvKiBT
VkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI1NTk5QUEw
RDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjI1NTk5QUMwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BhaW50U2VydmVy
UGF0dGVybi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjU1OTkzMTBEMDBEOEJBMDBCQjgyNUMg
LyogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHJldmlzaW9uIDM4ODU4KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICAyMDA4IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDYg
KzY4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1faGVpZ2h0ID4gb3RoZXIubV9oZWlnaHQg
PyBtX2hlaWdodCA6IG90aGVyLm1faGVpZ2h0KTsKICAgICB9CiAKKyAgICBGbG9hdFNpemUgc2hy
dW5rVG8oY29uc3QgRmxvYXRTaXplJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgcmV0dXJu
IEZsb2F0U2l6ZShtX3dpZHRoIDwgb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dp
ZHRoLAorICAgICAgICAgICBtX2hlaWdodCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBv
dGhlci5tX2hlaWdodCk7CisgICAgfQorCiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgZXhwbGljaXQg
RmxvYXRTaXplKGNvbnN0IENHU2l6ZSYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2lu
Y2UgaXQncyBsb3NzeQogICAgIG9wZXJhdG9yIENHU2l6ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29y
ZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODg1OCkKKysrIFdl
YkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsOCArMSw4IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
OCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAgICAg
ICAgIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLQotICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorICAgICAgICAgICAgICAgICAg
MjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICAgICAgICAgICAgICAgICAgMjAw
OCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
ODEsMTggKzgxLDM2IEBAIHZvaWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWQK
IHsKICAgICBMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGNvbGxlY3RHcmFk
aWVudFByb3BlcnRpZXMoKTsKIAotICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueSBncmFkaWVu
dCBjb250YWluaW5nIHN0b3AgZWxlbWVudHMsIGlnbm9yZSB0aGUgcmVxdWVzdC4KKyAgICBSZWZQ
dHI8U1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudD4gbGluZWFyR3JhZGllbnQgPSBXVEY6OnN0
YXRpY19wb2ludGVyX2Nhc3Q8U1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudD4obV9yZXNvdXJj
ZSk7CisKKyAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQgPSBGbG9hdFBvaW50OjpuYXJyb3dQcmVj
aXNpb24oYXR0cmlidXRlcy54MSgpLCBhdHRyaWJ1dGVzLnkxKCkpOworICAgIEZsb2F0UG9pbnQg
ZW5kUG9pbnQgPSBGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24oYXR0cmlidXRlcy54MigpLCBh
dHRyaWJ1dGVzLnkyKCkpOworCisgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCA9IEdyYWRp
ZW50OjpjcmVhdGUoc3RhcnRQb2ludCwgZW5kUG9pbnQpOworCisgICAgVmVjdG9yPFNWR0dyYWRp
ZW50U3RvcD4gbV9zdG9wcyA9IGF0dHJpYnV0ZXMuc3RvcHMoKTsKKyAgICBmbG9hdCBwcmV2aW91
c09mZnNldCA9IDAuMGY7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RvcHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgZmxvYXQgb2Zmc2V0ID0gc3RkOjptaW4oc3RkOjptYXgocHJl
dmlvdXNPZmZzZXQsIG1fc3RvcHNbaV0uZmlyc3QpLCAxLjBmKTsKKyAgICAgICAgcHJldmlvdXNP
ZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3Aob2Zmc2V0LCBt
X3N0b3BzW2ldLnNlY29uZCk7CisgICAgfQorCisgICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRp
ZW50KGdyYWRpZW50KTsKKwogICAgIGlmIChhdHRyaWJ1dGVzLnN0b3BzKCkuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8U1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVu
dD4gbGluZWFyR3JhZGllbnQgPSBXVEY6OnN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZHUGFpbnRTZXJ2
ZXJMaW5lYXJHcmFkaWVudD4obV9yZXNvdXJjZSk7Ci0KLSAgICBsaW5lYXJHcmFkaWVudC0+c2V0
R3JhZGllbnRTdG9wcyhhdHRyaWJ1dGVzLnN0b3BzKCkpOworICAgIC8vIFRoaXMgY29kZSBzaG91
bGQgZ28gYXdheS4gIFBhaW50U2VydmVycyBzaG91bGQgZ28gYXdheSB0b28uCisgICAgLy8gT25s
eSB0aGlzIGNvZGUgc2hvdWxkIGNhcmUgYWJvdXQgYm91bmRpbmcgYm94ZXMKICAgICBsaW5lYXJH
cmFkaWVudC0+c2V0Qm91bmRpbmdCb3hNb2RlKGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkp
OworICAgIGxpbmVhckdyYWRpZW50LT5zZXRHcmFkaWVudFN0b3BzKGF0dHJpYnV0ZXMuc3RvcHMo
KSk7CisKKyAgICAvLyBUaGVzZSBzaG91bGQgcG9zc2libHkgYmUgc3VwcG9ydGVkIG9uIEdyYWRp
ZW50CiAgICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRpZW50U3ByZWFkTWV0aG9kKGF0dHJpYnV0
ZXMuc3ByZWFkTWV0aG9kKCkpOwogICAgIGxpbmVhckdyYWRpZW50LT5zZXRHcmFkaWVudFRyYW5z
Zm9ybShhdHRyaWJ1dGVzLmdyYWRpZW50VHJhbnNmb3JtKCkpOwotICAgIGxpbmVhckdyYWRpZW50
LT5zZXRHcmFkaWVudFN0YXJ0KEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihhdHRyaWJ1dGVz
LngxKCksIGF0dHJpYnV0ZXMueTEoKSkpOwotICAgIGxpbmVhckdyYWRpZW50LT5zZXRHcmFkaWVu
dEVuZChGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24oYXR0cmlidXRlcy54MigpLCBhdHRyaWJ1
dGVzLnkyKCkpKTsKKyAgICBsaW5lYXJHcmFkaWVudC0+c2V0R3JhZGllbnRTdGFydChzdGFydFBv
aW50KTsKKyAgICBsaW5lYXJHcmFkaWVudC0+c2V0R3JhZGllbnRFbmQoZW5kUG9pbnQpOwogfQog
CiBMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojpjb2xs
ZWN0R3JhZGllbnRQcm9wZXJ0aWVzKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1JhZGlh
bEdyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUmFkaWFs
R3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMzg4NTgpCisrKyBXZWJDb3JlL3N2Zy9TVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsOCBAQAog
LyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgS0RFIHByb2plY3QKKyAgICAgICAgICAgICAgICAgIDIwMDggRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDggRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTg5LDE5ICs4OSw1MiBA
QCB2b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkCiB7CiAgICAgUmFkaWFs
R3JhZGllbnRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBjb2xsZWN0R3JhZGllbnRQcm9wZXJ0aWVz
KCk7CiAKLSAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnkgZ3JhZGllbnQgY29udGFpbmluZyBz
dG9wIGVsZW1lbnRzLCBpZ25vcmUgdGhlIHJlcXVlc3QuCi0gICAgaWYgKGF0dHJpYnV0ZXMuc3Rv
cHMoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIFJlZlB0cjxTVkdQYWludFNl
cnZlclJhZGlhbEdyYWRpZW50PiByYWRpYWxHcmFkaWVudCA9IFdURjo6c3RhdGljX3BvaW50ZXJf
Y2FzdDxTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50PihtX3Jlc291cmNlKTsKIAotICAgIHJh
ZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudFN0b3BzKGF0dHJpYnV0ZXMuc3RvcHMoKSk7CisgICAg
ZG91YmxlIGFkanVzdGVkRm9jdXNYID0gYXR0cmlidXRlcy5meCgpOworICAgIGRvdWJsZSBhZGp1
c3RlZEZvY3VzWSA9IGF0dHJpYnV0ZXMuZnkoKTsKKworICAgIGRvdWJsZSBmZHggPSBhdHRyaWJ1
dGVzLmZ4KCkgLSBhdHRyaWJ1dGVzLmN4KCk7CisgICAgZG91YmxlIGZkeSA9IGF0dHJpYnV0ZXMu
ZnkoKSAtIGF0dHJpYnV0ZXMuY3koKTsKKworICAgIC8vIFNwZWM6IElmIChmeCwgZnkpIGxpZXMg
b3V0c2lkZSB0aGUgY2lyY2xlIGRlZmluZWQgYnkgKGN4LCBjeSkgYW5kCisgICAgLy8gciwgc2V0
IChmeCwgZnkpIHRvIHRoZSBwb2ludCBvZiBpbnRlcnNlY3Rpb24gb2YgdGhlIGxpbmUgdGhyb3Vn
aAorICAgIC8vIChmeCwgZnkpIGFuZCB0aGUgY2lyY2xlLgorICAgIGlmIChzcXJ0KGZkeCAqIGZk
eCArIGZkeSAqIGZkeSkgPiBhdHRyaWJ1dGVzLnIoKSkgeworICAgICAgICBkb3VibGUgYW5nbGUg
PSBhdGFuMihhdHRyaWJ1dGVzLmZ5KCkgKiAxMDAuMCwgYXR0cmlidXRlcy5meCgpICogMTAwLjAp
OworICAgICAgICBhZGp1c3RlZEZvY3VzWCA9IGNvcyhhbmdsZSkgKiBhdHRyaWJ1dGVzLnIoKTsK
KyAgICAgICAgYWRqdXN0ZWRGb2N1c1kgPSBzaW4oYW5nbGUpICogYXR0cmlidXRlcy5yKCk7Cisg
ICAgfQorCisgICAgRmxvYXRQb2ludCBmb2NhbFBvaW50ID0gRmxvYXRQb2ludDo6bmFycm93UHJl
Y2lzaW9uKGF0dHJpYnV0ZXMuZngoKSwgYXR0cmlidXRlcy5meSgpKTsKKyAgICBGbG9hdFBvaW50
IGNlbnRlclBvaW50ID0gRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKGF0dHJpYnV0ZXMuY3go
KSwgYXR0cmlidXRlcy5jeSgpKTsKKworICAgIFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQgPSBH
cmFkaWVudDo6Y3JlYXRlKAorICAgICAgICBGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24oYWRq
dXN0ZWRGb2N1c1gsIGFkanVzdGVkRm9jdXNZKSwKKyAgICAgICAgMC5mLCAvLyBTVkcgZG9lcyBu
b3Qgc3VwcG9ydCBhICJmb2N1cyByYWRpdXMiCisgICAgICAgIGNlbnRlclBvaW50LAorICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGF0dHJpYnV0ZXMucigpKSk7CisKKyAgICBWZWN0b3I8
U1ZHR3JhZGllbnRTdG9wPiBzdG9wcyA9IGF0dHJpYnV0ZXMuc3RvcHMoKTsKKyAgICBmbG9hdCBw
cmV2aW91c09mZnNldCA9IDAuMGY7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0b3Bz
LnNpemUoKTsgKytpKSB7CisgICAgICAgICBmbG9hdCBvZmZzZXQgPSBzdGQ6Om1pbihzdGQ6Om1h
eChwcmV2aW91c09mZnNldCwgc3RvcHNbaV0uZmlyc3QpLCAxLjBmKTsKKyAgICAgICAgIHByZXZp
b3VzT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcChvZmZz
ZXQsIHN0b3BzW2ldLnNlY29uZCk7CisgICAgfQorCisgICAgcmFkaWFsR3JhZGllbnQtPnNldEdy
YWRpZW50KGdyYWRpZW50KTsKKwkKKwlpZiAoYXR0cmlidXRlcy5zdG9wcygpLmlzRW1wdHkoKSkK
KwkJcmV0dXJuOworCQogICAgIHJhZGlhbEdyYWRpZW50LT5zZXRCb3VuZGluZ0JveE1vZGUoYXR0
cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSk7CiAgICAgcmFkaWFsR3JhZGllbnQtPnNldEdyYWRp
ZW50U3ByZWFkTWV0aG9kKGF0dHJpYnV0ZXMuc3ByZWFkTWV0aG9kKCkpOyAKICAgICByYWRpYWxH
cmFkaWVudC0+c2V0R3JhZGllbnRUcmFuc2Zvcm0oYXR0cmlidXRlcy5ncmFkaWVudFRyYW5zZm9y
bSgpKTsKLSAgICByYWRpYWxHcmFkaWVudC0+c2V0R3JhZGllbnRDZW50ZXIoRmxvYXRQb2ludDo6
bmFycm93UHJlY2lzaW9uKGF0dHJpYnV0ZXMuY3goKSwgYXR0cmlidXRlcy5jeSgpKSk7Ci0gICAg
cmFkaWFsR3JhZGllbnQtPnNldEdyYWRpZW50Rm9jYWwoRmxvYXRQb2ludDo6bmFycm93UHJlY2lz
aW9uKGF0dHJpYnV0ZXMuZngoKSwgYXR0cmlidXRlcy5meSgpKSk7CisgICAgcmFkaWFsR3JhZGll
bnQtPnNldEdyYWRpZW50Q2VudGVyKGNlbnRlclBvaW50KTsKKyAgICByYWRpYWxHcmFkaWVudC0+
c2V0R3JhZGllbnRGb2NhbChmb2NhbFBvaW50KTsKICAgICByYWRpYWxHcmFkaWVudC0+c2V0R3Jh
ZGllbnRSYWRpdXMobmFycm93UHJlY2lzaW9uVG9GbG9hdChhdHRyaWJ1dGVzLnIoKSkpOworICAg
IHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudFN0b3BzKGF0dHJpYnV0ZXMuc3RvcHMoKSk7CiB9
CiAKIFJhZGlhbEdyYWRpZW50QXR0cmlidXRlcyBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmNv
bGxlY3RHcmFkaWVudFByb3BlcnRpZXMoKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHUGFpbnRTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdQYWludFNlcnZlci5oCShyZXZpc2lvbiAzODg1OCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR1BhaW50U2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDkgKzc5LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIHByb3RlY3RlZDoKICNpZiBQTEFURk9STShDRykKICAgICAgICAg
dm9pZCBzdHJva2VQYXRoKENHQ29udGV4dFJlZiwgY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7
Ci0gICAgICAgIHZvaWQgY2xpcFRvU3Ryb2tlUGF0aChDR0NvbnRleHRSZWYsIGNvbnN0IFJlbmRl
ck9iamVjdCopIGNvbnN0OwogICAgICAgICB2b2lkIGZpbGxQYXRoKENHQ29udGV4dFJlZiwgY29u
c3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgY2xpcFRvRmlsbFBhdGgoQ0dD
b250ZXh0UmVmLCBjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKICNlbmRpZgogCiAgICAgcHJv
dGVjdGVkOgpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudC5jcHAJKHJldmlzaW9uIDM4ODU4KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogICAgICAgICAgICAgICAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKiAgICAgICAgICAgICAgIDIwMDggRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDkgKzMwLDIzIEBACiAjaWYg
RU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdQYWludFNlcnZlckdyYWRpZW50LmgiCiAKKyNpbmNs
dWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1
ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyTGluZWFy
R3JhZGllbnQuaCIKKyNpbmNsdWRlICJTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmgiCisj
aW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1Rl
eHQuaCIKIAorI2lmIFBMQVRGT1JNKENHKQorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgR3JhZGllbnRTcHJlYWRNZXRob2QgbSkKQEAgLTY1LDggKzgxLDYgQEAgU1ZHUGFp
bnRTZXJ2ZXJHcmFkaWVudDo6U1ZHUGFpbnRTZXJ2ZXJHcgogICAgICwgbV9vd25lckVsZW1lbnQo
b3duZXIpCiAKICNpZiBQTEFURk9STShDRykKLSAgICAsIG1fc3RvcHNDYWNoZSgwKQotICAgICwg
bV9zaGFkaW5nQ2FjaGUoMCkKICAgICAsIG1fc2F2ZWRDb250ZXh0KDApCiAgICAgLCBtX2ltYWdl
QnVmZmVyKDApCiAjZW5kaWYKQEAgLTc2LDE5ICs5MCwxNiBAQCBTVkdQYWludFNlcnZlckdyYWRp
ZW50OjpTVkdQYWludFNlcnZlckdyCiAKIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6On5TVkdQYWlu
dFNlcnZlckdyYWRpZW50KCkKIHsKLSNpZiBQTEFURk9STShDRykKLSAgICBDR1NoYWRpbmdSZWxl
YXNlKG1fc2hhZGluZ0NhY2hlKTsKLSNlbmRpZgogfQogCi1jb25zdCBWZWN0b3I8U1ZHR3JhZGll
bnRTdG9wPiYgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6Z3JhZGllbnRTdG9wcygpIGNvbnN0CitH
cmFkaWVudCogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6Z3JhZGllbnQoKSBjb25zdAogewotICAg
IHJldHVybiBtX3N0b3BzOworICAgIHJldHVybiBtX2dyYWRpZW50LmdldCgpOwogfQogCi12b2lk
IFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldEdyYWRpZW50U3RvcHMoY29uc3QgVmVjdG9yPFNW
R0dyYWRpZW50U3RvcD4mIHN0b3BzKQordm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRH
cmFkaWVudChQYXNzUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCkKIHsKLSAgICBtX3N0b3BzID0g
c3RvcHM7CisgICAgbV9ncmFkaWVudCA9IGdyYWRpZW50OwogfQogCiBHcmFkaWVudFNwcmVhZE1l
dGhvZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzcHJlYWRNZXRob2QoKSBjb25zdApAQCAtMTIx
LDYgKzEzMiwxNjIgQEAgdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVudAog
ICAgIG1fZ3JhZGllbnRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07CiB9CiAKKyNpZiBQTEFURk9STShD
RykKKy8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4dCBwYWludGluZyBpbiBDRworLy8gVGhpcyBD
ZyBzcGVjaWZpYyBjb2RlIHNob3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dCBhbmQgRm9udCog
aW4gYSBuZXh0IHN0ZXAuCitzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlck9iamVjdCogZmluZFRl
eHRSb290T2JqZWN0KGNvbnN0IFJlbmRlck9iamVjdCogc3RhcnQpCit7CisgICAgd2hpbGUgKHN0
YXJ0ICYmICFzdGFydC0+aXNTVkdUZXh0KCkpCisgICAgICAgIHN0YXJ0ID0gc3RhcnQtPnBhcmVu
dCgpOworICAgIEFTU0VSVChzdGFydCk7CisgICAgQVNTRVJUKHN0YXJ0LT5pc1NWR1RleHQoKSk7
CisKKyAgICByZXR1cm4gc3RhcnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjcmVhdGVNYXNr
QW5kU3dhcENvbnRleHRGb3JUZXh0R3JhZGllbnQoCisgICAgR3JhcGhpY3NDb250ZXh0KiYgY29u
dGV4dCwgR3JhcGhpY3NDb250ZXh0KiYgc2F2ZWRDb250ZXh0LAorICAgIE93blB0cjxJbWFnZUJ1
ZmZlcj4mIGltYWdlQnVmZmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBG
bG9hdFJlY3QgbWFza0JCb3ggPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGZpbmRUZXh0Um9v
dE9iamVjdChvYmplY3QpKS0+cmVsYXRpdmVCQm94KGZhbHNlKTsKKyAgICBJbnRSZWN0IG1hc2tS
ZWN0ID0gZW5jbG9zaW5nSW50UmVjdChvYmplY3QtPmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVj
dChtYXNrQkJveCkpOworCisgICAgSW50U2l6ZSBtYXNrU2l6ZShtYXNrUmVjdC53aWR0aCgpLCBt
YXNrUmVjdC5oZWlnaHQoKSk7CisgICAgY2xhbXBJbWFnZUJ1ZmZlclNpemVUb1ZpZXdwb3J0KG9i
amVjdC0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSwgbWFza1NpemUpOworCisgICAgYXV0b19wdHI8
SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobWFza1NpemUsIGZh
bHNlKTsKKworICAgIGlmICghbWFza0ltYWdlLmdldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBHcmFwaGljc0NvbnRleHQqIG1hc2tJbWFnZUNvbnRleHQgPSBtYXNrSW1hZ2UtPmNv
bnRleHQoKTsKKworICAgIG1hc2tJbWFnZUNvbnRleHQtPnNhdmUoKTsKKyAgICBtYXNrSW1hZ2VD
b250ZXh0LT50cmFuc2xhdGUoLW1hc2tSZWN0LngoKSwgLW1hc2tSZWN0LnkoKSk7CisgICAgbWFz
a0ltYWdlQ29udGV4dC0+Y29uY2F0Q1RNKG9iamVjdC0+YWJzb2x1dGVUcmFuc2Zvcm0oKSk7CisK
KyAgICBpbWFnZUJ1ZmZlci5zZXQobWFza0ltYWdlLnJlbGVhc2UoKSk7CisgICAgc2F2ZWRDb250
ZXh0ID0gY29udGV4dDsKKworICAgIGNvbnRleHQgPSBtYXNrSW1hZ2VDb250ZXh0OworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGlwVG9UZXh0TWFzayhHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZm
ZXIsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LAorICAgIGNvbnN0IFNWR1BhaW50U2VydmVy
R3JhZGllbnQqIGdyYWRpZW50U2VydmVyKQoreworICAgIEZsb2F0UmVjdCBtYXNrQkJveCA9IGNv
bnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oZmluZFRleHRSb290T2JqZWN0KG9iamVjdCkpLT5yZWxh
dGl2ZUJCb3goZmFsc2UpOworCisgICAgLy8gRml4dXAgdHJhbnNmb3JtYXRpb25zIHRvIGJlIGFi
bGUgdG8gY2xpcCB0byBtYXNrCisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG9iamVj
dC0+YWJzb2x1dGVUcmFuc2Zvcm0oKTsKKyAgICBGbG9hdFJlY3QgdGV4dEJvdW5kYXJ5ID0gdHJh
bnNmb3JtLm1hcFJlY3QobWFza0JCb3gpOworCisgICAgSW50U2l6ZSBtYXNrU2l6ZShscm91bmRm
KHRleHRCb3VuZGFyeS53aWR0aCgpKSwgbHJvdW5kZih0ZXh0Qm91bmRhcnkuaGVpZ2h0KCkpKTsK
KyAgICBjbGFtcEltYWdlQnVmZmVyU2l6ZVRvVmlld3BvcnQob2JqZWN0LT5kb2N1bWVudCgpLT5y
ZW5kZXJlcigpLCBtYXNrU2l6ZSk7CisgICAgdGV4dEJvdW5kYXJ5LnNldFNpemUodGV4dEJvdW5k
YXJ5LnNpemUoKS5zaHJ1bmtUbyhtYXNrU2l6ZSkpOworCisgICAgLy8gQ2xpcCBjdXJyZW50IGNv
bnRleHQgdG8gbWFzayBpbWFnZSAoZ3JhZGllbnQpCisgICAgY29udGV4dC0+Y29uY2F0Q1RNKHRy
YW5zZm9ybS5pbnZlcnNlKCkpOworICAgIGNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKHRleHRC
b3VuZGFyeSwgaW1hZ2VCdWZmZXIuZ2V0KCkpOworICAgIGNvbnRleHQtPmNvbmNhdENUTSh0cmFu
c2Zvcm0pOworCisgICAgaWYgKGdyYWRpZW50U2VydmVyLT5ib3VuZGluZ0JveE1vZGUoKSkgewor
ICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUobWFza0JCb3gueCgpLCBtYXNrQkJveC55KCkpOwor
ICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUobWFza0JCb3gud2lkdGgoKSwgbWFza0JC
b3guaGVpZ2h0KCkpKTsKKyAgICB9CisgICAgY29udGV4dC0+Y29uY2F0Q1RNKGdyYWRpZW50U2Vy
dmVyLT5ncmFkaWVudFRyYW5zZm9ybSgpKTsKK30KKyNlbmRpZgorCitib29sIFNWR1BhaW50U2Vy
dmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRl
ck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSwgYm9vbCBpc1BhaW50aW5n
VGV4dCkgY29uc3QKK3sKKyAgICBtX293bmVyRWxlbWVudC0+YnVpbGRHcmFkaWVudCgpOworCisg
ICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpLT5zdmdTdHls
ZSgpOworICAgIGJvb2wgaXNGaWxsZWQgPSAodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkg
JiYgc3R5bGUtPmhhc0ZpbGwoKTsKKyAgICBib29sIGlzU3Ryb2tlZCA9ICh0eXBlICYgQXBwbHlU
b1N0cm9rZVRhcmdldFR5cGUpICYmIHN0eWxlLT5oYXNTdHJva2UoKTsKKworICAgIEFTU0VSVChp
c0ZpbGxlZCAmJiAhaXNTdHJva2VkIHx8ICFpc0ZpbGxlZCAmJiBpc1N0cm9rZWQpOworCisgICAg
Y29udGV4dC0+c2F2ZSgpOworCisgICAgaWYgKGlzUGFpbnRpbmdUZXh0KSB7CisjaWYgUExBVEZP
Uk0oQ0cpCisgICAgICAgIGlmICghY3JlYXRlTWFza0FuZFN3YXBDb250ZXh0Rm9yVGV4dEdyYWRp
ZW50KGNvbnRleHQsIG1fc2F2ZWRDb250ZXh0LCBtX2ltYWdlQnVmZmVyLCBvYmplY3QpKSB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUo
aXNGaWxsZWQgPyBjVGV4dEZpbGwgOiBjVGV4dFN0cm9rZSk7CisgICAgfQorCisgICAgaWYgKGlz
RmlsbGVkKSB7CisgICAgICAgIGNvbnRleHQtPnNldEFscGhhKHN0eWxlLT5maWxsT3BhY2l0eSgp
KTsKKyAgICAgICAgY29udGV4dC0+c2V0RmlsbEdyYWRpZW50KG1fZ3JhZGllbnQpOworICAgICAg
ICBjb250ZXh0LT5zZXRGaWxsUnVsZShzdHlsZS0+ZmlsbFJ1bGUoKSk7CisgICAgfQorICAgIGlm
IChpc1N0cm9rZWQpIHsKKyAgICAgICAgY29udGV4dC0+c2V0QWxwaGEoc3R5bGUtPnN0cm9rZU9w
YWNpdHkoKSk7CisgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUdyYWRpZW50KG1fZ3JhZGllbnQp
OworICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIG9iamVjdC0+c3R5
bGUoKSwgb2JqZWN0KTsKKyAgICB9CisJCisgICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpICYmICFp
c1BhaW50aW5nVGV4dCkgeworICAgICAgICBGbG9hdFJlY3QgYmJveCA9IG9iamVjdC0+cmVsYXRp
dmVCQm94KGZhbHNlKTsKKyAgICAgICAgLy8gRG9uJ3QgdXNlIGdyYWRpZW50ZXMgZm9yIDFkIG9i
amVjdHMgbGlrZSBob3Jpem9udGFsL3ZlcnRpY2FsIAorICAgICAgICAvLyBsaW5lcyBvciByZWN0
YW5nbGVzIHdpdGhvdXQgd2lkdGggb3IgaGVpZ2h0LgorICAgICAgICBpZiAoYmJveC53aWR0aCgp
ID09IDAgfHwgYmJveC5oZWlnaHQoKSA9PSAwKSB7CisgICAgICAgICAgICBDb2xvciBjb2xvcigw
LCAwLCAwKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNvbG9yKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGNvbnRleHQtPnRyYW5z
bGF0ZShiYm94LngoKSwgYmJveC55KCkpOworICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNp
emUoYmJveC53aWR0aCgpLCBiYm94LmhlaWdodCgpKSk7CisKKyAgICAgICAgLy8gV2l0aCBzY2Fs
aW5nIHRoZSBjb250ZXh0LCB0aGUgc3Ryb2tlVGhpY2tuZXNzIGlzIHNjYWxlZCB0b28uIFdlIGhh
dmUgdG8KKyAgICAgICAgLy8gdW5kbyB0aGlzLgorICAgICAgICBmbG9hdCBzdHJva2VUaGlja25l
c3MgPSBzdGQ6Om1heCgoY29udGV4dC0+c3Ryb2tlVGhpY2tuZXNzKCkgLyAoKGJib3gud2lkdGgo
KSArIGJib3guaGVpZ2h0KCkpIC8gMikgLSAwLjAwMWYpLCAwLmYpOworICAgICAgICBjb250ZXh0
LT5zZXRTdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICB9CisgICAgY29udGV4
dC0+Y29uY2F0Q1RNKGdyYWRpZW50VHJhbnNmb3JtKCkpOworICAgIGNvbnRleHQtPnNldFNwcmVh
ZE1ldGhvZChzcHJlYWRNZXRob2QoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBT
VkdQYWludFNlcnZlckdyYWRpZW50OjpyZW5kZXJQYXRoKEdyYXBoaWNzQ29udGV4dComIGNvbnRl
eHQsIGNvbnN0IFJlbmRlck9iamVjdCogcGF0aCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNv
bnN0Cit7CisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlID0gcGF0aC0+c3R5bGUoKS0+
c3ZnU3R5bGUoKTsKKworICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYg
c3R5bGUtPmhhc0ZpbGwoKSkKKyAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKTsKKworICAgIGlm
ICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFzU3Ryb2tlKCkp
CisgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKTsKK30KKwordm9pZCBTVkdQYWludFNlcnZl
ckdyYWRpZW50Ojp0ZWFyZG93bihHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5k
ZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUsIGJvb2wgaXNQYWludGlu
Z1RleHQpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oQ0cpCisgICAgLy8gcmVuZGVyUGF0aCgpIGlz
IG5vdCB1c2VkIHdoZW4gcGFpbnRpbmcgdGV4dCwgc28gd2UgcGFpbnQgdGhlIGdyYWRpZW50IGR1
cmluZyB0ZWFyZG93bigpCisgICAgaWYgKGlzUGFpbnRpbmdUZXh0ICYmIG1fc2F2ZWRDb250ZXh0
KSB7CisgICAgICAgIC8vIFJlc3RvcmUgb24tc2NyZWVuIGRyYXdpbmcgY29udGV4dAorICAgICAg
ICBjb250ZXh0ID0gbV9zYXZlZENvbnRleHQ7CisgICAgICAgIG1fc2F2ZWRDb250ZXh0ID0gMDsK
KworICAgICAgICBjbGlwVG9UZXh0TWFzayhjb250ZXh0LCBtX2ltYWdlQnVmZmVyLCBvYmplY3Qs
IHRoaXMpOworCisgICAgICAgIC8vIGZpbmFsbHkgZmlsbCB0aGUgdGV4dCBjbGlwIHdpdGggdGhl
IHNoYWRpbmcKKyAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCksIG1fZ3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgCisgICAgICAgIG1f
aW1hZ2VCdWZmZXIuY2xlYXIoKTsgLy8gd2UncmUgZG9uZSB3aXRoIG91ciB0ZXh0IG1hc2sgYnVm
ZmVyCisgICAgfQorI2VuZGlmCisgICAgY29udGV4dC0+cmVzdG9yZSgpOworfQorCiBUZXh0U3Ry
ZWFtJiBTVkdQYWludFNlcnZlckdyYWRpZW50OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzKSBjb25zdAogewogICAgIC8vIEdyYWRpZW50cy9wYXR0ZXJucyBhcmVuJ3Qgc2V0
dXAsIHVudGlsIHRoZXkgYXJlIHVzZWQgZm9yIHBhaW50aW5nLiBXb3JrIGFyb3VuZCB0aGF0IGZh
Y3QuCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dC5oCShyZXZpc2lvbiAzODg1OCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2Vy
dmVyR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiAgICAgICAgICAgICAgIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMzYgKzMxLDI2IEBACiAKICNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkdyYWRp
ZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHUGFpbnRT
ZXJ2ZXIuaCIKIAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCi0jaWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSA8cWdsb2JhbC5oPgotUVRfQkVH
SU5fTkFNRVNQQUNFCi1jbGFzcyBRR3JhZGllbnQ7Ci1RVF9FTkRfTkFNRVNQQUNFCi0jZW5kaWYK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSW1hZ2VCdWZmZXI7CiAgICAgY2xh
c3MgU1ZHR3JhZGllbnRFbGVtZW50OwogCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgdHlwZWRlZiBz
dGQ6OnBhaXI8Q0dGbG9hdCwgQ29sb3I+IFNWR0dyYWRpZW50U3RvcDsKLSNlbHNlCiAgICAgdHlw
ZWRlZiBzdGQ6OnBhaXI8ZmxvYXQsIENvbG9yPiBTVkdHcmFkaWVudFN0b3A7Ci0jZW5kaWYKIAog
ICAgIGNsYXNzIFNWR1BhaW50U2VydmVyR3JhZGllbnQgOiBwdWJsaWMgU1ZHUGFpbnRTZXJ2ZXIg
ewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudCgp
OwogCi0gICAgICAgIGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+JiBncmFkaWVudFN0b3Bz
KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0R3JhZGllbnRTdG9wcyhjb25zdCBWZWN0b3I8U1ZH
R3JhZGllbnRTdG9wPiYpOworICAgICAgICB2b2lkIHNldEdyYWRpZW50KFBhc3NSZWZQdHI8R3Jh
ZGllbnQ+KTsKKyAgICAgICAgR3JhZGllbnQqIGdyYWRpZW50KCkgY29uc3Q7CiAKICAgICAgICAg
R3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkgY29uc3Q7CiAgICAgICAgIHZvaWQg
c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoY29uc3QgR3JhZGllbnRTcHJlYWRNZXRob2QmKTsKQEAg
LTczLDMyICs2NCwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEFmZmluZVRyYW5z
Zm9ybSBncmFkaWVudFRyYW5zZm9ybSgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEdyYWRpZW50
VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogCisgICAgICAgIHZvaWQgc2V0R3Jh
ZGllbnRTdG9wcyhjb25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYgc3RvcHMpIHsgbV9zdG9w
cyA9IHN0b3BzOyB9CisgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+JiBncmFk
aWVudFN0b3BzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wczsgfQorCiAgICAgICAgIHZpcnR1YWwg
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikgY29uc3Q7CiAK
ICAgICAgICAgdmlydHVhbCBib29sIHNldHVwKEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBSZW5k
ZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0
OwotI2lmIFBMQVRGT1JNKENHKQogICAgICAgICB2aXJ0dWFsIHZvaWQgdGVhcmRvd24oR3JhcGhp
Y3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSwgYm9v
bCBpc1BhaW50aW5nVGV4dCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRo
KEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5
cGUpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICAg
ICAgLy8gSGVscGVycwotICAgICAgICB2b2lkIHVwZGF0ZVF1YXJ0ekdyYWRpZW50U3RvcHNDYWNo
ZShjb25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYpOwotICAgICAgICB2b2lkIHVwZGF0ZVF1
YXJ0ekdyYWRpZW50Q2FjaGUoY29uc3QgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudCopOwotICAgICAg
ICB2b2lkIGhhbmRsZUJvdW5kaW5nQm94TW9kZUFuZEdyYWRpZW50VHJhbnNmb3JtYXRpb24oR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0KSBjb25zdDsKLSNlbmRp
ZgotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZpbGxD
b2xvckFycmF5KFFHcmFkaWVudCYsIGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+JiwgZmxv
YXQgb3BhY2l0eSkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgUUdyYWRpZW50IHNldHVwR3JhZGll
bnQoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0ID0gMDsKLSNl
bmRpZgotCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBTVkdQYWludFNlcnZlckdyYWRpZW50KGNv
bnN0IFNWR0dyYWRpZW50RWxlbWVudCogb3duZXIpOwogICAgICAgICAKICAgICBwcml2YXRlOgog
ICAgICAgICBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiBtX3N0b3BzOworICAgICAgICBSZWZQdHI8
R3JhZGllbnQ+IG1fZ3JhZGllbnQ7CiAgICAgICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIG1fc3By
ZWFkTWV0aG9kOwogICAgICAgICBib29sIG1fYm91bmRpbmdCb3hNb2RlOwogICAgICAgICBBZmZp
bmVUcmFuc2Zvcm0gbV9ncmFkaWVudFRyYW5zZm9ybTsKQEAgLTEwNiwyNyArODYsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICNpZiBQTEFURk9STShDRykKICAgICBwdWJsaWM6Ci0gICAgICAg
IHR5cGVkZWYgc3RydWN0IHsKLSAgICAgICAgICAgIENHRmxvYXQgY29sb3JBcnJheVs0XTsKLSAg
ICAgICAgICAgIENHRmxvYXQgb2Zmc2V0OwotICAgICAgICAgICAgQ0dGbG9hdCBwcmV2aW91c0Rl
bHRhSW52ZXJzZTsKLSAgICAgICAgfSBRdWFydHpHcmFkaWVudFN0b3A7Ci0gICAgICAgIAotICAg
ICAgICBzdHJ1Y3QgU2hhcmVkU3RvcENhY2hlIDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkU3Rv
cENhY2hlPiB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNoYXJlZFN0b3BDYWNoZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZFN0
b3BDYWNoZSk7IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgVmVjdG9yPFF1YXJ0ekdyYWRp
ZW50U3RvcD4gbV9zdG9wczsKLSAgICAgICAgCi0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAg
ICBTaGFyZWRTdG9wQ2FjaGUoKSB7IH0KLSAgICAgICAgfTsKLQotICAgICAgICBSZWZQdHI8U2hh
cmVkU3RvcENhY2hlPiBtX3N0b3BzQ2FjaGU7Ci0KLSAgICAgICAgQ0dTaGFkaW5nUmVmIG1fc2hh
ZGluZ0NhY2hlOwogICAgICAgICBtdXRhYmxlIEdyYXBoaWNzQ29udGV4dCogbV9zYXZlZENvbnRl
eHQ7Ci0gICAgICAgIG11dGFibGUgSW1hZ2VCdWZmZXIqIG1faW1hZ2VCdWZmZXI7CisgICAgICAg
IG11dGFibGUgT3duUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOwogI2VuZGlmCiAgICAg
fTsKIApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFk
aWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVy
TGluZWFyR3JhZGllbnQuaAkocmV2aXNpb24gMzg4NTgpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEw
ICs0OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIFRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OwogCi0jaWYgUExB
VEZPUk0oUVQpCi0gICAgICAgIHZpcnR1YWwgUUdyYWRpZW50IHNldHVwR3JhZGllbnQoR3JhcGhp
Y3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwotI2VuZGlmCi0KICAgICBw
cml2YXRlOgogICAgICAgICBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50KGNvbnN0IFNWR0dy
YWRpZW50RWxlbWVudCogb3duZXIpOwogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQ
YWludFNlcnZlclJhZGlhbEdyYWRpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudC5oCShyZXZpc2lvbiAzODg1OCkKKysr
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNTEsMTAgKzUxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JikgY29uc3Q7CiAKLSNpZiBQTEFURk9STShRVCkKLSAgICAgICAgdmlydHVhbCBRR3JhZGllbnQg
c2V0dXBHcmFkaWVudChHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgUmVuZGVyT2JqZWN0KikgY29u
c3Q7Ci0jZW5kaWYKLQogICAgIHByaXZhdGU6CiAgICAgICAgIFNWR1BhaW50U2VydmVyUmFkaWFs
R3JhZGllbnQoY29uc3QgU1ZHR3JhZGllbnRFbGVtZW50KiBvd25lcik7CiAKSW5kZXg6IFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudENhaXJvLmNwcAkocmV2aXNpb24gMzg4NTgpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9j
YWlyby9TVkdQYWludFNlcnZlckdyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDE2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0
b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRGlyayBTY2h1bHplIDx2YnM4NUBnbXgu
ZGU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudC5oIgotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnQuaCIKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmgiCi0KLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNp
bmNsdWRlICJSZW5kZXJQYXRoLmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRl
ICJTVkdHcmFkaWVudEVsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIFNW
R1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNv
bnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSwgYm9vbCBp
c1BhaW50aW5nVGV4dCkgY29uc3QKLXsKLSAgICBtX293bmVyRWxlbWVudC0+YnVpbGRHcmFkaWVu
dCgpOwotCi0gICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAg
ICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm47Ci0KLSAgICBjYWlyb19tYXRyaXhfdCBtYXRyaXg7
Ci0gICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkgKCZtYXRyaXgpOwotICAgIGNvbnN0IGNh
aXJvX21hdHJpeF90IGdyYWRpZW50X21hdHJpeCA9IGdyYWRpZW50VHJhbnNmb3JtKCk7Ci0KLSAg
ICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBvYmplY3QtPnN0eWxlKCktPnN2Z1N0
eWxlKCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwotCi0gICAg
aWYgKHRoaXMtPnR5cGUoKSA9PSBMaW5lYXJHcmFkaWVudFBhaW50U2VydmVyKSB7Ci0gICAgICAg
IGNvbnN0IFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQqIGxpbmVhciA9IHN0YXRpY19jYXN0
PGNvbnN0IFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQqPih0aGlzKTsKLQotICAgICAgICBp
ZiAoYm91bmRpbmdCb3hNb2RlKCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBiYm94ID0gb2Jq
ZWN0LT5yZWxhdGl2ZUJCb3goZmFsc2UpOwotICAgICAgICAgICAgaWYgKGJib3gud2lkdGgoKSA9
PSAwIHx8IGJib3guaGVpZ2h0KCkgPT0gMCkgewotICAgICAgICAgICAgICAgIGFwcGx5U3Ryb2tl
U3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVjdCk7Ci0gICAgICAgICAgICAgICAg
Y2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsIDAsIDAsIDApOwotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2Fpcm9fbWF0cml4X3RyYW5zbGF0
ZSgmbWF0cml4LCBiYm94LngoKSwgYmJveC55KCkpOwotICAgICAgICAgICAgY2Fpcm9fbWF0cml4
X3NjYWxlKCZtYXRyaXgsIGJib3gud2lkdGgoKSwgYmJveC5oZWlnaHQoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBkb3VibGUgeDAgPSBsaW5lYXItPmdyYWRpZW50U3RhcnQoKS54KCk7Ci0gICAg
ICAgIGRvdWJsZSB5MCA9IGxpbmVhci0+Z3JhZGllbnRTdGFydCgpLnkoKTsKLSAgICAgICAgZG91
YmxlIHgxID0gbGluZWFyLT5ncmFkaWVudEVuZCgpLngoKTsKLSAgICAgICAgZG91YmxlIHkxID0g
bGluZWFyLT5ncmFkaWVudEVuZCgpLnkoKTsKLQotICAgICAgICBwYXR0ZXJuID0gY2Fpcm9fcGF0
dGVybl9jcmVhdGVfbGluZWFyKHgwLCB5MCwgeDEsIHkxKTsKLQotICAgIH0gZWxzZSBpZiAodGhp
cy0+dHlwZSgpID09IFJhZGlhbEdyYWRpZW50UGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgY29uc3Qg
U1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCogcmFkaWFsID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
U1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCo+KHRoaXMpOwotCi0gICAgICAgIGlmIChib3Vu
ZGluZ0JveE1vZGUoKSkgewotICAgICAgICAgICAgRmxvYXRSZWN0IGJib3ggPSBvYmplY3QtPnJl
bGF0aXZlQkJveChmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoYmJveC53aWR0aCgpID09IDAgfHwg
YmJveC5oZWlnaHQoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRv
Q29udGV4dChjb250ZXh0LCBzdHlsZSwgb2JqZWN0KTsKLSAgICAgICAgICAgICAgICBjYWlyb19z
ZXRfc291cmNlX3JnYihjciwgMCwgMCwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYWlyb19tYXRyaXhfdHJhbnNsYXRlKCZtYXRy
aXgsIGJib3gueCgpLCBiYm94LnkoKSk7Ci0gICAgICAgICAgICBjYWlyb19tYXRyaXhfc2NhbGUo
Jm1hdHJpeCwgYmJveC53aWR0aCgpLCBiYm94LmhlaWdodCgpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGRvdWJsZSBjeCA9IHJhZGlhbC0+Z3JhZGllbnRDZW50ZXIoKS54KCk7Ci0gICAgICAgIGRv
dWJsZSBjeSA9IHJhZGlhbC0+Z3JhZGllbnRDZW50ZXIoKS55KCk7Ci0gICAgICAgIGRvdWJsZSBy
YWRpdXMgPSByYWRpYWwtPmdyYWRpZW50UmFkaXVzKCk7Ci0gICAgICAgIGRvdWJsZSBmeCA9IHJh
ZGlhbC0+Z3JhZGllbnRGb2NhbCgpLngoKTsKLSAgICAgICAgZG91YmxlIGZ5ID0gcmFkaWFsLT5n
cmFkaWVudEZvY2FsKCkueSgpOwotCi0gICAgICAgIGZ4IC09IGN4OwotICAgICAgICBmeSAtPSBj
eTsKLQotICAgICAgICBkb3VibGUgZnJhZGl1cyA9IDAuMDsKLQotICAgICAgICBpZiAoc3FydChm
eCAqIGZ4ICsgZnkgKiBmeSkgPj0gcmFkaXVzKSB7Ci0gICAgICAgICAgICBkb3VibGUgYW5nbGUg
PSBhdGFuMihmeSwgZngpOwotICAgICAgICAgICAgaWYgKChmeCArIGN4KSA8IGN4KQotICAgICAg
ICAgICAgICAgIGZ4ID0gY29zKGFuZ2xlKSAqIHJhZGl1cyArIDAuMDAyOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGZ4ID0gY29zKGFuZ2xlKSAqIHJhZGl1cyAtIDAuMDAyOwot
ICAgICAgICAgICAgaWYgKChmeSArIGN5KSA8IGN5KQotICAgICAgICAgICAgICAgIGZ5ID0gc2lu
KGFuZ2xlKSAqIHJhZGl1cyArIDAuMDAyOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGZ5ID0gc2luKGFuZ2xlKSAqIHJhZGl1cyAtIDAuMDAyOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX3JhZGlhbChmeCArIGN4LCBmeSArIGN5
LCBmcmFkaXVzLCBjeCwgY3ksIHJhZGl1cyk7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY2Fpcm9fcGF0dGVybl9zZXRfZmlsdGVyKHBhdHRlcm4s
IENBSVJPX0ZJTFRFUl9CSUxJTkVBUik7Ci0KLSAgICBzd2l0Y2ggKHNwcmVhZE1ldGhvZCgpKSB7
Ci0gICAgICAgIGNhc2UgU3ByZWFkTWV0aG9kUGFkOgotICAgICAgICAgICAgY2Fpcm9fcGF0dGVy
bl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9QQUQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVmbGVjdDoKLSAgICAgICAgICAgIGNhaXJv
X3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfUkVGTEVDVCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTcHJlYWRNZXRob2RSZXBlYXQ6Ci0gICAgICAg
ICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybiwgQ0FJUk9fRVhURU5EX1JFUEVB
VCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGNh
aXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfTk9ORSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYWlyb19tYXRyaXhfbXVsdGlwbHkoJm1hdHJp
eCwgJm1hdHJpeCwgJmdyYWRpZW50X21hdHJpeCk7Ci0gICAgY2Fpcm9fbWF0cml4X2ludmVydCgm
bWF0cml4KTsKLSAgICBjYWlyb19wYXR0ZXJuX3NldF9tYXRyaXgocGF0dGVybiwgJm1hdHJpeCk7
Ci0KLSAgICBjb25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYgc3RvcHMgPSBncmFkaWVudFN0
b3BzKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgZmxvYXQgb2Zmc2V0ID0gc3RvcHNbaV0uZmlyc3Q7Ci0gICAgICAgIENvbG9y
IGNvbG9yID0gc3RvcHNbaV0uc2Vjb25kOwotICAgICAgICBpZiAoaSA+IDAgJiYgb2Zmc2V0IDwg
c3RvcHNbaSAtIDFdLmZpcnN0KQotICAgICAgICAgICAgb2Zmc2V0ID0gc3RvcHNbaSAtIDFdLmZp
cnN0OwotCi0gICAgICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShwYXR0ZXJu
LCBvZmZzZXQsIGNvbG9yLnJlZCgpIC8gMjU1LjAsIGNvbG9yLmdyZWVuKCkgLyAyNTUuMCwgY29s
b3IuYmx1ZSgpIC8gMjU1LjAsIGNvbG9yLmFscGhhKCkgLyAyNTUuMCk7Ci0gICAgfQotCi0gICAg
aWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdmdTdHlsZS0+aGFzRmlsbCgp
KQotICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShzdmdTdHlsZS0+ZmlsbFJ1bGUoKSk7Ci0K
LSAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgc3ZnU3R5bGUtPmhh
c1N0cm9rZSgpKQotICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0
eWxlLCBvYmplY3QpOwotCi0gICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7Ci0gICAg
Y2Fpcm9fcGF0dGVybl9kZXN0cm95KHBhdHRlcm4pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9jZy9TVkdQYWludFNlcnZlckNnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9jZy9TVkdQYWludFNlcnZlckNnLmNwcAkocmV2aXNpb24gMzg4NTgpCisrKyBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckNnLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjAsMTIgKzYwLDYgQEAgdm9pZCBTVkdQYWludFNlcnZlcjo6c3Ryb2tlUGF0aChDR0NvbnRl
eAogICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiB9CiAKLXZvaWQgU1ZHUGFpbnRT
ZXJ2ZXI6OmNsaXBUb1N0cm9rZVBhdGgoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFJlbmRl
ck9iamVjdCopIGNvbnN0Ci17Ci0gICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBh
dGgoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKLX0KLQogdm9pZCBTVkdQ
YWludFNlcnZlcjo6ZmlsbFBhdGgoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFJlbmRlck9i
amVjdCogcGF0aCkgY29uc3QKIHsKICAgICBpZiAoIXBhdGggfHwgcGF0aC0+c3R5bGUoKS0+c3Zn
U3R5bGUoKS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpCkBAIC03NCwxNCArNjgsNiBAQCB2
b2lkIFNWR1BhaW50U2VydmVyOjpmaWxsUGF0aChDR0NvbnRleHRSCiAgICAgICAgIENHQ29udGV4
dEZpbGxQYXRoKGNvbnRleHQpOwogfQogCi12b2lkIFNWR1BhaW50U2VydmVyOjpjbGlwVG9GaWxs
UGF0aChDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXRoKSBjb25z
dAotewotICAgIGlmICghcGF0aCB8fCBwYXRoLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5maWxsUnVs
ZSgpID09IFJVTEVfRVZFTk9ERCkKLSAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwot
ICAgIGVsc2UKLSAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NW
R1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcAkocmV2aXNpb24gMzg4NTgpCisr
KyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMzNiArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLQot
ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlckdyYWRp
ZW50LmgiCi0KLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlJlbmRlck9i
amVjdC5oIgotI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1Bh
aW50U2VydmVyTGluZWFyR3JhZGllbnQuaCIKLSNpbmNsdWRlICJTVkdQYWludFNlcnZlclJhZGlh
bEdyYWRpZW50LmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgotCi0jaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGF0aWMgdm9pZCByZWxlYXNlQ2FjaGVkU3RvcHModm9pZCogaW5mbykKLXsK
LSAgICBzdGF0aWNfY2FzdDxTVkdQYWludFNlcnZlckdyYWRpZW50OjpTaGFyZWRTdG9wQ2FjaGUq
PihpbmZvKS0+ZGVyZWYoKTsKLX0KLQotc3RhdGljIHZvaWQgY2dHcmFkaWVudENhbGxiYWNrKHZv
aWQqIGluZm8sIGNvbnN0IENHRmxvYXQqIGluVmFsdWVzLCBDR0Zsb2F0KiBvdXRDb2xvcikKLXsK
LSAgICBTVkdQYWludFNlcnZlckdyYWRpZW50OjpTaGFyZWRTdG9wQ2FjaGUqIHN0b3BzQ2FjaGUg
PSBzdGF0aWNfY2FzdDxTVkdQYWludFNlcnZlckdyYWRpZW50OjpTaGFyZWRTdG9wQ2FjaGUqPihp
bmZvKTsKLSAgICAKLSAgICBTVkdQYWludFNlcnZlckdyYWRpZW50OjpRdWFydHpHcmFkaWVudFN0
b3AqIHN0b3BzID0gc3RvcHNDYWNoZS0+bV9zdG9wcy5kYXRhKCk7Ci0gICAgICAgIAotICAgIGlu
dCBzdG9wc0NvdW50ID0gc3RvcHNDYWNoZS0+bV9zdG9wcy5zaXplKCk7Ci0KLSAgICBDR0Zsb2F0
IGluVmFsdWUgPSBpblZhbHVlc1swXTsKLQotICAgIGlmICghc3RvcHNDb3VudCkgewotICAgICAg
ICBvdXRDb2xvclswXSA9IDA7Ci0gICAgICAgIG91dENvbG9yWzFdID0gMDsKLSAgICAgICAgb3V0
Q29sb3JbMl0gPSAwOwotICAgICAgICBvdXRDb2xvclszXSA9IDA7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9IGVsc2UgaWYgKHN0b3BzQ291bnQgPT0gMSkgewotICAgICAgICBtZW1jcHkob3V0Q29s
b3IsIHN0b3BzWzBdLmNvbG9yQXJyYXksIDQgKiBzaXplb2YoQ0dGbG9hdCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCEoaW5WYWx1ZSA+IHN0b3BzWzBdLm9mZnNldCkpCi0g
ICAgICAgIG1lbWNweShvdXRDb2xvciwgc3RvcHNbMF0uY29sb3JBcnJheSwgNCAqIHNpemVvZihD
R0Zsb2F0KSk7Ci0gICAgZWxzZSBpZiAoIShpblZhbHVlIDwgc3RvcHNbc3RvcHNDb3VudCAtIDFd
Lm9mZnNldCkpCi0gICAgICAgIG1lbWNweShvdXRDb2xvciwgc3RvcHNbc3RvcHNDb3VudCAtIDFd
LmNvbG9yQXJyYXksIDQgKiBzaXplb2YoQ0dGbG9hdCkpOwotICAgIGVsc2UgewotICAgICAgICBp
bnQgbmV4dFN0b3BJbmRleCA9IDA7Ci0gICAgICAgIHdoaWxlICgobmV4dFN0b3BJbmRleCA8IHN0
b3BzQ291bnQpICYmIChzdG9wc1tuZXh0U3RvcEluZGV4XS5vZmZzZXQgPCBpblZhbHVlKSkKLSAg
ICAgICAgICAgIG5leHRTdG9wSW5kZXgrKzsKLQotICAgICAgICBDR0Zsb2F0KiBuZXh0Q29sb3JB
cnJheSA9IHN0b3BzW25leHRTdG9wSW5kZXhdLmNvbG9yQXJyYXk7Ci0gICAgICAgIENHRmxvYXQq
IHByZXZpb3VzQ29sb3JBcnJheSA9IHN0b3BzW25leHRTdG9wSW5kZXggLSAxXS5jb2xvckFycmF5
OwotICAgICAgICBDR0Zsb2F0IGRpZmZGcm9tUHJldmlvdXMgPSBpblZhbHVlIC0gc3RvcHNbbmV4
dFN0b3BJbmRleCAtIDFdLm9mZnNldDsKLSAgICAgICAgQ0dGbG9hdCBwZXJjZW50ID0gZGlmZkZy
b21QcmV2aW91cyAqIHN0b3BzW25leHRTdG9wSW5kZXhdLnByZXZpb3VzRGVsdGFJbnZlcnNlOwot
Ci0gICAgICAgIG91dENvbG9yWzBdID0gKCgxLjBmIC0gcGVyY2VudCkgKiBwcmV2aW91c0NvbG9y
QXJyYXlbMF0gKyBwZXJjZW50ICogbmV4dENvbG9yQXJyYXlbMF0pOwotICAgICAgICBvdXRDb2xv
clsxXSA9ICgoMS4wZiAtIHBlcmNlbnQpICogcHJldmlvdXNDb2xvckFycmF5WzFdICsgcGVyY2Vu
dCAqIG5leHRDb2xvckFycmF5WzFdKTsKLSAgICAgICAgb3V0Q29sb3JbMl0gPSAoKDEuMGYgLSBw
ZXJjZW50KSAqIHByZXZpb3VzQ29sb3JBcnJheVsyXSArIHBlcmNlbnQgKiBuZXh0Q29sb3JBcnJh
eVsyXSk7Ci0gICAgICAgIG91dENvbG9yWzNdID0gKCgxLjBmIC0gcGVyY2VudCkgKiBwcmV2aW91
c0NvbG9yQXJyYXlbM10gKyBwZXJjZW50ICogbmV4dENvbG9yQXJyYXlbM10pOwotICAgIH0KLSAg
ICAvLyBGSVhNRTogaGF2ZSB0byBoYW5kbGUgdGhlIHNwcmVhZE1ldGhvZCgpcyBoZXJlIFNQUkVB
RE1FVEhPRF9SRVBFQVQsIGV0Yy4KLX0KLQotc3RhdGljIENHU2hhZGluZ1JlZiBDR1NoYWRpbmdS
ZWZGb3JMaW5lYXJHcmFkaWVudChjb25zdCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50KiBz
ZXJ2ZXIpCi17Ci0gICAgQ0dQb2ludCBzdGFydCA9IENHUG9pbnQoc2VydmVyLT5ncmFkaWVudFN0
YXJ0KCkpOwotICAgIENHUG9pbnQgZW5kID0gQ0dQb2ludChzZXJ2ZXItPmdyYWRpZW50RW5kKCkp
OwotCi0gICAgQ0dGdW5jdGlvbkNhbGxiYWNrcyBjYWxsYmFja3MgPSB7MCwgY2dHcmFkaWVudENh
bGxiYWNrLCByZWxlYXNlQ2FjaGVkU3RvcHN9OwotICAgIENHRmxvYXQgZG9tYWluTGltaXRzWzJd
ID0gezAsIDF9OwotICAgIENHRmxvYXQgcmFuZ2VMaW1pdHNbOF0gPSB7MCwgMSwgMCwgMSwgMCwg
MSwgMCwgMX07Ci0gICAgc2VydmVyLT5tX3N0b3BzQ2FjaGUtPnJlZigpOwotICAgIENHRnVuY3Rp
b25SZWYgc2hhZGluZ0Z1bmN0aW9uID0gQ0dGdW5jdGlvbkNyZWF0ZShzZXJ2ZXItPm1fc3RvcHND
YWNoZS5nZXQoKSwgMSwgZG9tYWluTGltaXRzLCA0LCByYW5nZUxpbWl0cywgJmNhbGxiYWNrcyk7
Ci0KLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURl
dmljZVJHQigpOwotICAgIENHU2hhZGluZ1JlZiBzaGFkaW5nID0gQ0dTaGFkaW5nQ3JlYXRlQXhp
YWwoY29sb3JTcGFjZSwgc3RhcnQsIGVuZCwgc2hhZGluZ0Z1bmN0aW9uLCB0cnVlLCB0cnVlKTsK
LSAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9yU3BhY2UpOwotICAgIENHRnVuY3Rpb25SZWxl
YXNlKHNoYWRpbmdGdW5jdGlvbik7Ci0gICAgcmV0dXJuIHNoYWRpbmc7Ci19Ci0KLXN0YXRpYyBD
R1NoYWRpbmdSZWYgQ0dTaGFkaW5nUmVmRm9yUmFkaWFsR3JhZGllbnQoY29uc3QgU1ZHUGFpbnRT
ZXJ2ZXJSYWRpYWxHcmFkaWVudCogc2VydmVyKQotewotICAgIENHUG9pbnQgY2VudGVyID0gQ0dQ
b2ludChzZXJ2ZXItPmdyYWRpZW50Q2VudGVyKCkpOwotICAgIENHUG9pbnQgZm9jdXMgPSBDR1Bv
aW50KHNlcnZlci0+Z3JhZGllbnRGb2NhbCgpKTsKLSAgICBkb3VibGUgcmFkaXVzID0gc2VydmVy
LT5ncmFkaWVudFJhZGl1cygpOwotCi0gICAgZG91YmxlIGZkeCA9IGZvY3VzLnggLSBjZW50ZXIu
eDsKLSAgICBkb3VibGUgZmR5ID0gZm9jdXMueSAtIGNlbnRlci55OwotCi0gICAgLy8gU3BlYzog
SWYgKGZ4LCBmeSkgbGllcyBvdXRzaWRlIHRoZSBjaXJjbGUgZGVmaW5lZCBieSAoY3gsIGN5KSBh
bmQgciwgc2V0IChmeCwgZnkpCi0gICAgLy8gdG8gdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBv
ZiB0aGUgbGluZSB0aHJvdWdoIChmeCwgZnkpIGFuZCB0aGUgY2lyY2xlLgotICAgIGlmIChzcXJ0
KGZkeCAqIGZkeCArIGZkeSAqIGZkeSkgPiByYWRpdXMpIHsgCi0gICAgICAgIGRvdWJsZSBhbmds
ZSA9IGF0YW4yKGZvY3VzLnkgKiAxMDAuMCwgZm9jdXMueCAqIDEwMC4wKTsKLSAgICAgICAgZm9j
dXMueCA9IG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChjb3MoYW5nbGUpICogcmFkaXVzKTsKLSAg
ICAgICAgZm9jdXMueSA9IG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChzaW4oYW5nbGUpICogcmFk
aXVzKTsKLSAgICB9Ci0KLSAgICBDR0Z1bmN0aW9uQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHswLCBj
Z0dyYWRpZW50Q2FsbGJhY2ssIHJlbGVhc2VDYWNoZWRTdG9wc307Ci0gICAgQ0dGbG9hdCBkb21h
aW5MaW1pdHNbMl0gPSB7MCwgMX07Ci0gICAgQ0dGbG9hdCByYW5nZUxpbWl0c1s4XSA9IHswLCAx
LCAwLCAxLCAwLCAxLCAwLCAxfTsKLSAgICBzZXJ2ZXItPm1fc3RvcHNDYWNoZS0+cmVmKCk7Ci0g
ICAgQ0dGdW5jdGlvblJlZiBzaGFkaW5nRnVuY3Rpb24gPSBDR0Z1bmN0aW9uQ3JlYXRlKHNlcnZl
ci0+bV9zdG9wc0NhY2hlLmdldCgpLCAxLCBkb21haW5MaW1pdHMsIDQsIHJhbmdlTGltaXRzLCAm
Y2FsbGJhY2tzKTsKLQotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dDb2xvclNw
YWNlQ3JlYXRlRGV2aWNlUkdCKCk7Ci0gICAgQ0dTaGFkaW5nUmVmIHNoYWRpbmcgPSBDR1NoYWRp
bmdDcmVhdGVSYWRpYWwoY29sb3JTcGFjZSwgZm9jdXMsIDAsIGNlbnRlciwgbmFycm93UHJlY2lz
aW9uVG9DR0Zsb2F0KHJhZGl1cyksIHNoYWRpbmdGdW5jdGlvbiwgdHJ1ZSwgdHJ1ZSk7Ci0gICAg
Q0dDb2xvclNwYWNlUmVsZWFzZShjb2xvclNwYWNlKTsKLSAgICBDR0Z1bmN0aW9uUmVsZWFzZShz
aGFkaW5nRnVuY3Rpb24pOwotICAgIHJldHVybiBzaGFkaW5nOwotfQotCi12b2lkIFNWR1BhaW50
U2VydmVyR3JhZGllbnQ6OnVwZGF0ZVF1YXJ0ekdyYWRpZW50U3RvcHNDYWNoZShjb25zdCBWZWN0
b3I8U1ZHR3JhZGllbnRTdG9wPiYgc3RvcHMpCi17Ci0gICAgbV9zdG9wc0NhY2hlID0gU2hhcmVk
U3RvcENhY2hlOjpjcmVhdGUoKTsKLSAgICBWZWN0b3I8UXVhcnR6R3JhZGllbnRTdG9wPiYgc3Rv
cHNDYWNoZSA9IG1fc3RvcHNDYWNoZS0+bV9zdG9wczsKLSAgICBzdG9wc0NhY2hlLnJlc2l6ZShz
dG9wcy5zaXplKCkpOwotICAgIENHRmxvYXQgcHJldmlvdXNPZmZzZXQgPSAwLjBmOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9wcy5zaXplKCk7ICsraSkgewotICAgICAgICBDR0Zs
b2F0IGN1cnJPZmZzZXQgPSBtaW4obWF4KHN0b3BzW2ldLmZpcnN0LCBwcmV2aW91c09mZnNldCks
IHN0YXRpY19jYXN0PENHRmxvYXQ+KDEuMCkpOwotICAgICAgICBzdG9wc0NhY2hlW2ldLm9mZnNl
dCA9IGN1cnJPZmZzZXQ7Ci0gICAgICAgIHN0b3BzQ2FjaGVbaV0ucHJldmlvdXNEZWx0YUludmVy
c2UgPSAxLjBmIC8gKGN1cnJPZmZzZXQgLSBwcmV2aW91c09mZnNldCk7Ci0gICAgICAgIHByZXZp
b3VzT2Zmc2V0ID0gY3Vyck9mZnNldDsKLSAgICAgICAgQ0dGbG9hdCogY2EgPSBzdG9wc0NhY2hl
W2ldLmNvbG9yQXJyYXk7Ci0gICAgICAgIHN0b3BzW2ldLnNlY29uZC5nZXRSR0JBKGNhWzBdLCBj
YVsxXSwgY2FbMl0sIGNhWzNdKTsKLSAgICB9Ci19Ci0KLXZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudDo6dXBkYXRlUXVhcnR6R3JhZGllbnRDYWNoZShjb25zdCBTVkdQYWludFNlcnZlckdyYWRp
ZW50KiBzZXJ2ZXIpCi17Ci0gICAgLy8gY2FjaGUgb3VyIG93biBjb3B5IG9mIHRoZSBzdG9wcyBm
b3IgZmFzdGVyIGFjY2Vzcy4KLSAgICAvLyB0aGlzIGlzIGxlZ2FjeSBjb2RlLCBwcm9iYWJseSBj
b3VsZCBiZSByZXdvcmtlZC4KLSAgICBpZiAoIW1fc3RvcHNDYWNoZSkKLSAgICAgICAgdXBkYXRl
UXVhcnR6R3JhZGllbnRTdG9wc0NhY2hlKGdyYWRpZW50U3RvcHMoKSk7Ci0KLSAgICBDR1NoYWRp
bmdSZWxlYXNlKG1fc2hhZGluZ0NhY2hlKTsKLQotICAgIGlmICh0eXBlKCkgPT0gUmFkaWFsR3Jh
ZGllbnRQYWludFNlcnZlcikgewotICAgICAgICBjb25zdCBTVkdQYWludFNlcnZlclJhZGlhbEdy
YWRpZW50KiByYWRpYWwgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdQYWludFNlcnZlclJhZGlhbEdy
YWRpZW50Kj4oc2VydmVyKTsKLSAgICAgICAgbV9zaGFkaW5nQ2FjaGUgPSBDR1NoYWRpbmdSZWZG
b3JSYWRpYWxHcmFkaWVudChyYWRpYWwpOwotICAgIH0gZWxzZSBpZiAodHlwZSgpID09IExpbmVh
ckdyYWRpZW50UGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgY29uc3QgU1ZHUGFpbnRTZXJ2ZXJMaW5l
YXJHcmFkaWVudCogbGluZWFyID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHUGFpbnRTZXJ2ZXJMaW5l
YXJHcmFkaWVudCo+KHNlcnZlcik7Ci0gICAgICAgIG1fc2hhZGluZ0NhY2hlID0gQ0dTaGFkaW5n
UmVmRm9yTGluZWFyR3JhZGllbnQobGluZWFyKTsKLSAgICB9Ci19Ci0KLS8vIEhlbHBlciBmdW5j
dGlvbiBmb3IgdGV4dCBwYWludGluZwotc3RhdGljIGlubGluZSBjb25zdCBSZW5kZXJPYmplY3Qq
IGZpbmRUZXh0Um9vdE9iamVjdChjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0KQotewotICAgIHdo
aWxlIChzdGFydCAmJiAhc3RhcnQtPmlzU1ZHVGV4dCgpKQotICAgICAgICBzdGFydCA9IHN0YXJ0
LT5wYXJlbnQoKTsKLQotICAgIEFTU0VSVChzdGFydCk7Ci0gICAgQVNTRVJUKHN0YXJ0LT5pc1NW
R1RleHQoKSk7Ci0KLSAgICByZXR1cm4gc3RhcnQ7Ci19Ci0KLXZvaWQgU1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudDo6dGVhcmRvd24oR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVy
T2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdU
ZXh0KSBjb25zdAotewotICAgIENHU2hhZGluZ1JlZiBzaGFkaW5nID0gbV9zaGFkaW5nQ2FjaGU7
Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKLSAgICBBU1NFUlQoY29udGV4dFJlZik7Ci0KLSAgICAvLyBBcyByZW5kZXJQYXRoKCkgaXMg
bm90IHVzZWQgd2hlbiBwYWludGluZyB0ZXh0LCBzcGVjaWFsIGxvZ2ljIG5lZWRlZCBoZXJlLgot
ICAgIGlmIChpc1BhaW50aW5nVGV4dCkgewotICAgICAgICBpZiAobV9zYXZlZENvbnRleHQpIHsK
LSAgICAgICAgICAgIEZsb2F0UmVjdCBtYXNrQkJveCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0
Kj4oZmluZFRleHRSb290T2JqZWN0KG9iamVjdCkpLT5yZWxhdGl2ZUJCb3goZmFsc2UpOwotCi0g
ICAgICAgICAgICAvLyBGaXh1cCB0cmFuc2Zvcm1hdGlvbnMgdG8gYmUgYWJsZSB0byBjbGlwIHRv
IG1hc2sKLSAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBvYmplY3QtPmFi
c29sdXRlVHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgdGV4dEJvdW5kYXJ5ID0g
dHJhbnNmb3JtLm1hcFJlY3QobWFza0JCb3gpOwotCi0gICAgICAgICAgICBJbnRTaXplIG1hc2tT
aXplKGxyb3VuZGYodGV4dEJvdW5kYXJ5LndpZHRoKCkpLCBscm91bmRmKHRleHRCb3VuZGFyeS5o
ZWlnaHQoKSkpOwotICAgICAgICAgICAgY2xhbXBJbWFnZUJ1ZmZlclNpemVUb1ZpZXdwb3J0KG9i
amVjdC0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSwgbWFza1NpemUpOwotCi0gICAgICAgICAgICBp
ZiAobWFza1NpemUud2lkdGgoKSA8IHN0YXRpY19jYXN0PGludD4odGV4dEJvdW5kYXJ5LndpZHRo
KCkpKQotICAgICAgICAgICAgICAgIHRleHRCb3VuZGFyeS5zZXRXaWR0aChtYXNrU2l6ZS53aWR0
aCgpKTsKLQotICAgICAgICAgICAgaWYgKG1hc2tTaXplLmhlaWdodCgpIDwgc3RhdGljX2Nhc3Q8
aW50Pih0ZXh0Qm91bmRhcnkuaGVpZ2h0KCkpKQotICAgICAgICAgICAgICAgIHRleHRCb3VuZGFy
eS5zZXRIZWlnaHQobWFza1NpemUuaGVpZ2h0KCkpOwotCi0gICAgICAgICAgICAvLyBDbGlwIGN1
cnJlbnQgY29udGV4dCB0byBtYXNrIGltYWdlIChncmFkaWVudCkKLSAgICAgICAgICAgIG1fc2F2
ZWRDb250ZXh0LT5jb25jYXRDVE0odHJhbnNmb3JtLmludmVyc2UoKSk7Ci0gICAgICAgICAgICBt
X3NhdmVkQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIodGV4dEJvdW5kYXJ5LCBtX2ltYWdlQnVm
ZmVyKTsKLSAgICAgICAgICAgIG1fc2F2ZWRDb250ZXh0LT5jb25jYXRDVE0odHJhbnNmb3JtKTsK
LQotICAgICAgICAgICAgaGFuZGxlQm91bmRpbmdCb3hNb2RlQW5kR3JhZGllbnRUcmFuc2Zvcm1h
dGlvbihtX3NhdmVkQ29udGV4dCwgbWFza0JCb3gpOwotCi0gICAgICAgICAgICAvLyBSZXN0b3Jl
IG9uLXNjcmVlbiBkcmF3aW5nIGNvbnRleHQsIGFmdGVyIHdlIGdvdCB0aGUgaW1hZ2Ugb2YgdGhl
IGdyYWRpZW50Ci0gICAgICAgICAgICBkZWxldGUgbV9pbWFnZUJ1ZmZlcjsKLQotICAgICAgICAg
ICAgY29udGV4dCA9IG1fc2F2ZWRDb250ZXh0OwotICAgICAgICAgICAgY29udGV4dFJlZiA9IGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgICAgICAgICBtX3NhdmVkQ29udGV4dCA9
IDA7Ci0gICAgICAgICAgICBtX2ltYWdlQnVmZmVyID0gMDsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHRSZWYsIHNoYWRpbmcpOwotICAgIGNvbnRl
eHQtPnJlc3RvcmUoKTsKLX0KLQotdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpyZW5kZXJQ
YXRoKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcGF0aCwg
U1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Ci17Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gcGF0aC0+c3R5bGUoKTsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9IGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEFTU0VSVChjb250ZXh0UmVmKTsKLSAgICAKLSAgICBi
b29sIGlzRmlsbGVkID0gKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN0eWxlLT5z
dmdTdHlsZSgpLT5oYXNGaWxsKCk7Ci0KLSAgICAvLyBDb21wdXRlIGRlc3RpbmF0aW9uIG9iamVj
dCBib3VuZGluZyBib3gKLSAgICBGbG9hdFJlY3Qgb2JqZWN0QkJveDsKLSAgICBpZiAoYm91bmRp
bmdCb3hNb2RlKCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IGJib3ggPSBwYXRoLT5yZWxhdGl2ZUJC
b3goZmFsc2UpOwotICAgICAgICBpZiAoYmJveC53aWR0aCgpID4gMCAmJiBiYm94LmhlaWdodCgp
ID4gMCkKLSAgICAgICAgICAgIG9iamVjdEJCb3ggPSBiYm94OwotICAgIH0KLQotICAgIGlmIChp
c0ZpbGxlZCkKLSAgICAgICAgY2xpcFRvRmlsbFBhdGgoY29udGV4dFJlZiwgcGF0aCk7Ci0gICAg
ZWxzZQotICAgICAgICBjbGlwVG9TdHJva2VQYXRoKGNvbnRleHRSZWYsIHBhdGgpOwotCi0gICAg
aGFuZGxlQm91bmRpbmdCb3hNb2RlQW5kR3JhZGllbnRUcmFuc2Zvcm1hdGlvbihjb250ZXh0LCBv
YmplY3RCQm94KTsKLX0KLQotdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpoYW5kbGVCb3Vu
ZGluZ0JveE1vZGVBbmRHcmFkaWVudFRyYW5zZm9ybWF0aW9uKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0KSBjb25zdAotewotICAgIGlmIChib3Vu
ZGluZ0JveE1vZGUoKSkgewotICAgICAgICAvLyBDaG9vc2UgZGVmYXVsdCBncmFkaWVudCBib3Vu
ZGluZyBib3gKLSAgICAgICAgRmxvYXRSZWN0IGdyYWRpZW50QkJveCgwLjBmLCAwLjBmLCAxLjBm
LCAxLjBmKTsKLQotICAgICAgICAvLyBHZW5lcmF0ZSBhIHRyYW5zZm9ybSB0byBtYXAgYmV0d2Vl
biBib3RoIGJvdW5kaW5nIGJveGVzCi0gICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShtYWtlTWFw
QmV0d2VlblJlY3RzKGdyYWRpZW50QkJveCwgdGFyZ2V0UmVjdCkpOwotICAgIH0KLQotICAgIC8v
IEFwcGx5IHRoZSBncmFkaWVudCdzIG93biB0cmFuc2Zvcm0KLSAgICBjb250ZXh0LT5jb25jYXRD
VE0oZ3JhZGllbnRUcmFuc2Zvcm0oKSk7Ci19Ci0KLWJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBv
YmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25z
dAotewotICAgIG1fb3duZXJFbGVtZW50LT5idWlsZEdyYWRpZW50KCk7Ci0KLSAgICAvLyBXZSBu
ZWVkIGEgaG9vayB0byBjYWxsIHRoaXMgd2hlbiB0aGUgZ3JhZGllbnQgZ2V0cyB1cGRhdGVkLCBi
ZWZvcmUgZHJhd24uCi0gICAgaWYgKCFtX3NoYWRpbmdDYWNoZSkKLSAgICAgICAgY29uc3RfY2Fz
dDxTVkdQYWludFNlcnZlckdyYWRpZW50Kj4odGhpcyktPnVwZGF0ZVF1YXJ0ekdyYWRpZW50Q2Fj
aGUodGhpcyk7Ci0KLSAgICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9IGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOwotICAgIEFTU0VSVChjb250ZXh0UmVmKTsKLQotICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKLQotICAgIGJvb2wgaXNGaWxsZWQgPSAodHlwZSAm
IEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKTsK
LSAgICBib29sIGlzU3Ryb2tlZCA9ICh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYm
IHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKTsKLQotICAgIEFTU0VSVChpc0ZpbGxlZCAm
JiAhaXNTdHJva2VkIHx8ICFpc0ZpbGxlZCAmJiBpc1N0cm9rZWQpOwotCi0gICAgY29udGV4dC0+
c2F2ZSgpOwotICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHRSZWYsIGlzRmlsbGVkID8gc3R5
bGUtPnN2Z1N0eWxlKCktPmZpbGxPcGFjaXR5KCkgOiBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tl
T3BhY2l0eSgpKTsKLQotICAgIGlmIChpc1BhaW50aW5nVGV4dCkgewotICAgICAgICBGbG9hdFJl
Y3QgbWFza0JCb3ggPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGZpbmRUZXh0Um9vdE9iamVj
dChvYmplY3QpKS0+cmVsYXRpdmVCQm94KGZhbHNlKTsKLSAgICAgICAgSW50UmVjdCBtYXNrUmVj
dCA9IGVuY2xvc2luZ0ludFJlY3Qob2JqZWN0LT5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3Qo
bWFza0JCb3gpKTsKLQotICAgICAgICBJbnRTaXplIG1hc2tTaXplKG1hc2tSZWN0LndpZHRoKCks
IG1hc2tSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgY2xhbXBJbWFnZUJ1ZmZlclNpemVUb1ZpZXdw
b3J0KG9iamVjdC0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSwgbWFza1NpemUpOwotCi0gICAgICAg
IGF1dG9fcHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1h
c2tTaXplLCBmYWxzZSk7Ci0KLSAgICAgICAgaWYgKCFtYXNrSW1hZ2UuZ2V0KCkpIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1h
c2tJbWFnZS0+Y29udGV4dCgpOwotICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5zYXZlKCk7Ci0K
LSAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKGlzRmlsbGVkID8g
Y1RleHRGaWxsIDogY1RleHRTdHJva2UpOwotICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFu
c2xhdGUoLW1hc2tSZWN0LngoKSwgLW1hc2tSZWN0LnkoKSk7Ci0gICAgICAgIG1hc2tJbWFnZUNv
bnRleHQtPmNvbmNhdENUTShvYmplY3QtPmFic29sdXRlVHJhbnNmb3JtKCkpOwotCi0gICAgICAg
IG1faW1hZ2VCdWZmZXIgPSBtYXNrSW1hZ2UucmVsZWFzZSgpOwotICAgICAgICBtX3NhdmVkQ29u
dGV4dCA9IGNvbnRleHQ7Ci0KLSAgICAgICAgY29udGV4dCA9IG1hc2tJbWFnZUNvbnRleHQ7Ci0g
ICAgICAgIGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICB9Ci0K
LSAgICBpZiAoaXNTdHJva2VkKQotICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNv
bnRleHQsIHN0eWxlLCBvYmplY3QpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudDo6aW52YWxpZGF0ZSgpCi17Ci0gICAgU1ZHUGFpbnRTZXJ2ZXI6
OmludmFsaWRhdGUoKTsKLQotICAgIC8vIEludmFsaWRhdGUgY2FjaGVzCi0gICAgQ0dTaGFkaW5n
UmVsZWFzZShtX3NoYWRpbmdDYWNoZSk7Ci0KLSAgICBtX3N0b3BzQ2FjaGUgPSAwOwotICAgIG1f
c2hhZGluZ0NhY2hlID0gMDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYK
SW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyR3JhZGllbnRRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudFF0LmNwcAkocmV2aXNpb24gMzg4NTgpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9x
dC9TVkdQYWludFNlcnZlckdyYWRpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMCAr
MCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdp
bGRmb3hAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJT
VkdQYWludFNlcnZlckdyYWRpZW50LmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2lu
Y2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgotCi0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5j
bHVkZSA8UVBhaW50ZXJQYXRoPgotI2luY2x1ZGUgPFFDb2xvcj4KLSNpbmNsdWRlIDxRR3JhZGll
bnQ+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkg
bGluZWFyICYgcmFkaWFsIGdyYWRpZW50Ci12b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmZp
bGxDb2xvckFycmF5KFFHcmFkaWVudCYgZ3JhZGllbnQsIGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVu
dFN0b3A+JiBzdG9wcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgb3BhY2l0eSkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c3RvcHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZmxvYXQgb2Zmc2V0ID0gc3RvcHNbaV0uZmly
c3Q7Ci0gICAgICAgIENvbG9yIGNvbG9yID0gc3RvcHNbaV0uc2Vjb25kOwotCi0gICAgICAgIFFD
b2xvciBjKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCkpOwotICAgICAg
ICBjLnNldEFscGhhKGludChjb2xvci5hbHBoYSgpICogb3BhY2l0eSkpOwotCi0gICAgICAgIGdy
YWRpZW50LnNldENvbG9yQXQob2Zmc2V0LCBjKTsKLSAgICB9Ci19Ci0KLWJvb2wgU1ZHUGFpbnRT
ZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVu
ZGVyT2JqZWN0KiBvYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNW
R1BhaW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAotewotICAg
IG1fb3duZXJFbGVtZW50LT5idWlsZEdyYWRpZW50KCk7Ci0KLSAgICBRUGFpbnRlciogcGFpbnRl
cihjb250ZXh0ID8gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiAwKTsKLSAgICBRX0FTU0VS
VChwYWludGVyKTsKLQotICAgIFFQYWludGVyUGF0aCogcGF0aChjb250ZXh0ID8gY29udGV4dC0+
Y3VycmVudFBhdGgoKSA6IDApOwotICAgIFFfQVNTRVJUKHBhdGgpOwotCi0gICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gb2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpOwotICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKLQotICAgIFFHcmFkaWVudCBn
cmFkaWVudCA9IHNldHVwR3JhZGllbnQoY29udGV4dCwgb2JqZWN0KTsKLQotICAgIHBhaW50ZXIt
PnNldFBlbihRdDo6Tm9QZW4pOwotICAgIHBhaW50ZXItPnNldEJydXNoKFF0OjpOb0JydXNoKTsK
LQotICAgIGlmIChzcHJlYWRNZXRob2QoKSA9PSBTcHJlYWRNZXRob2RSZXBlYXQpCi0gICAgICAg
IGdyYWRpZW50LnNldFNwcmVhZChRR3JhZGllbnQ6OlJlcGVhdFNwcmVhZCk7Ci0gICAgZWxzZSBp
ZiAoc3ByZWFkTWV0aG9kKCkgPT0gU3ByZWFkTWV0aG9kUmVmbGVjdCkKLSAgICAgICAgZ3JhZGll
bnQuc2V0U3ByZWFkKFFHcmFkaWVudDo6UmVmbGVjdFNwcmVhZCk7Ci0gICAgZWxzZQotICAgICAg
ICBncmFkaWVudC5zZXRTcHJlYWQoUUdyYWRpZW50OjpQYWRTcHJlYWQpOyAgICAKLSAgICBkb3Vi
bGUgb3BhY2l0eSA9IDEuMDsKLQotICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlw
ZSkgJiYgc3ZnU3R5bGUtPmhhc0ZpbGwoKSkgewotICAgICAgICBmaWxsQ29sb3JBcnJheShncmFk
aWVudCwgZ3JhZGllbnRTdG9wcygpLCBvcGFjaXR5KTsKLQotICAgICAgICBRQnJ1c2ggYnJ1c2go
Z3JhZGllbnQpOwotICAgICAgICBicnVzaC5zZXRNYXRyaXgoZ3JhZGllbnRUcmFuc2Zvcm0oKSk7
Ci0KLSAgICAgICAgcGFpbnRlci0+c2V0QnJ1c2goYnJ1c2gpOwotICAgICAgICBjb250ZXh0LT5z
ZXRGaWxsUnVsZShzdmdTdHlsZS0+ZmlsbFJ1bGUoKSk7Ci0gICAgfQotCi0gICAgaWYgKCh0eXBl
ICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmIHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkgewot
ICAgICAgICBmaWxsQ29sb3JBcnJheShncmFkaWVudCwgZ3JhZGllbnRTdG9wcygpLCBvcGFjaXR5
KTsKLQotICAgICAgICBRUGVuIHBlbjsKLSAgICAgICAgUUJydXNoIGJydXNoKGdyYWRpZW50KTsK
LSAgICAgICAgYnJ1c2guc2V0TWF0cml4KGdyYWRpZW50VHJhbnNmb3JtKCkpOwotICAgICAgICBw
ZW4uc2V0QnJ1c2goYnJ1c2gpOwotICAgICAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKLQotICAg
ICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3QpOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZgotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9x
dC9TVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdC5jcHAJKHJl
dmlzaW9uIDM4ODU4KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJM
aW5lYXJHcmFkaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBACi0vKgot
ICAgIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9y
Zz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCi0gICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJTVkdQYWludFNlcnZl
ckxpbmVhckdyYWRpZW50LmgiCi0jaW5jbHVkZSAiU1ZHR3JhZGllbnRFbGVtZW50LmgiCi0KLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCi0KLSNp
bmNsdWRlIDxRTGluZWFyR3JhZGllbnQ+Ci0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVkZSA8
UVBhaW50ZXJQYXRoPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVFHcmFkaWVudCBTVkdQYWlu
dFNlcnZlckxpbmVhckdyYWRpZW50OjpzZXR1cEdyYWRpZW50KEdyYXBoaWNzQ29udGV4dComIGNv
bnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KSBjb25zdAotewotICAgIFFQYWludGVy
UGF0aCogcGF0aChjb250ZXh0ID8gY29udGV4dC0+Y3VycmVudFBhdGgoKSA6IDApOwotICAgIFFf
QVNTRVJUKHBhdGgpOwotCi0gICAgZG91YmxlIHgxLCB4MiwgeTEsIHkyOwotICAgIGlmIChib3Vu
ZGluZ0JveE1vZGUoKSkgewotICAgICAgICBRUmVjdEYgYmJveCA9IHBhdGgtPmJvdW5kaW5nUmVj
dCgpOwotICAgICAgICB4MSA9IGJib3gueCgpOwotICAgICAgICB5MSA9IGJib3gueSgpOwotICAg
ICAgICB4MiA9IGJib3gueCgpICsgYmJveC53aWR0aCgpOwotICAgICAgICB5MiA9IGJib3gueSgp
ICsgYmJveC5oZWlnaHQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICB4MSA9IGdyYWRpZW50U3Rh
cnQoKS54KCk7Ci0gICAgICAgIHkxID0gZ3JhZGllbnRTdGFydCgpLnkoKTsKLSAgICAgICAgeDIg
PSBncmFkaWVudEVuZCgpLngoKTsKLSAgICAgICAgeTIgPSBncmFkaWVudEVuZCgpLnkoKTsKLSAg
ICB9Ci0KLSAgICBRTGluZWFyR3JhZGllbnQgZ3JhZGllbnQoUVBvaW50Rih4MSwgeTEpLCBRUG9p
bnRGKHgyLCB5MikpOwotCi0gICAgcmV0dXJuIGdyYWRpZW50OwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9xdC9TVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL3F0L1NWR1BhaW50U2VydmVyUmFkaWFsR3JhZGll
bnRRdC5jcHAJKHJldmlzaW9uIDM4ODU4KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZH
UGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5OCAr
MCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdp
bGRmb3hAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJT
VkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5j
bHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVkZSA8UVBhaW50ZXJQYXRoPgotI2luY2x1ZGUgPFFSYWRp
YWxHcmFkaWVudD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1RR3JhZGllbnQgU1ZHUGFpbnRT
ZXJ2ZXJSYWRpYWxHcmFkaWVudDo6c2V0dXBHcmFkaWVudChHcmFwaGljc0NvbnRleHQqJiBjb250
ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkgY29uc3QKLXsKLSAgICBRUGFpbnRlciog
cGFpbnRlcihjb250ZXh0ID8gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiAwKTsKLSAgICBR
X0FTU0VSVChwYWludGVyKTsKLQotICAgIFFQYWludGVyUGF0aCogcGF0aChjb250ZXh0ID8gY29u
dGV4dC0+Y3VycmVudFBhdGgoKSA6IDApOwotICAgIFFfQVNTRVJUKHBhdGgpOwotCi0gICAgUmVu
ZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwotCi0gICAgUU1hdHJpeCBt
YXQgPSBwYWludGVyLT5tYXRyaXgoKTsKLQotICAgIGRvdWJsZSBjeCwgZngsIGN5LCBmeSwgcjsK
LSAgICBpZiAoYm91bmRpbmdCb3hNb2RlKCkpIHsKLSAgICAgICAgUVJlY3RGIGJib3ggPSBwYXRo
LT5ib3VuZGluZ1JlY3QoKTsgCi0gICAgICAgIGN4ID0gZG91YmxlKGJib3gubGVmdCgpKSArIChk
b3VibGUoZ3JhZGllbnRDZW50ZXIoKS54KCkgLyAxMDAuMCkgKiBkb3VibGUoYmJveC53aWR0aCgp
KSk7Ci0gICAgICAgIGN5ID0gZG91YmxlKGJib3gudG9wKCkpICsgKGRvdWJsZShncmFkaWVudENl
bnRlcigpLnkoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LmhlaWdodCgpKSk7Ci0gICAgICAgIGZ4
ID0gZG91YmxlKGJib3gubGVmdCgpKSArIChkb3VibGUoZ3JhZGllbnRGb2NhbCgpLngoKSAvIDEw
MC4wKSAqIGRvdWJsZShiYm94LndpZHRoKCkpKSAtIGN4OwotICAgICAgICBmeSA9IGRvdWJsZShi
Ym94LnRvcCgpKSArIChkb3VibGUoZ3JhZGllbnRGb2NhbCgpLnkoKSAvIDEwMC4wKSAqIGRvdWJs
ZShiYm94LmhlaWdodCgpKSkgLSBjeTsKLSAgICAgICAgciA9IGRvdWJsZShncmFkaWVudFJhZGl1
cygpIC8gMTAwLjApICogKHNxcnQocG93KGJib3gud2lkdGgoKSwgMikgKyBwb3coYmJveC5oZWln
aHQoKSwgMikpKTsKLQotICAgICAgICBmbG9hdCB3aWR0aCA9IGJib3gud2lkdGgoKTsKLSAgICAg
ICAgZmxvYXQgaGVpZ2h0ID0gYmJveC5oZWlnaHQoKTsKLQotICAgICAgICBpbnQgZGlmZiA9IGlu
dCh3aWR0aCAtIGhlaWdodCk7IC8vIGFsbG93IHNsaWdodCB0b2xlcmFuY2UKLSAgICAgICAgaWYg
KCEoZGlmZiA+IC0yICYmIGRpZmYgPCAyKSkgewotICAgICAgICAgICAgLy8gbWFrZSBlbGxpcHRp
Y2FsIG9yIGNpcmN1bGFyIGRlcGVuZGluZyBvbiBiYm94IGFzcGVjdCByYXRpbwotICAgICAgICAg
ICAgZmxvYXQgcmF0aW9YID0gKHdpZHRoIC8gaGVpZ2h0KTsKLSAgICAgICAgICAgIGZsb2F0IHJh
dGlvWSA9IChoZWlnaHQgLyB3aWR0aCk7Ci0gICAgICAgICAgICBtYXQuc2NhbGUoKHdpZHRoID4g
aGVpZ2h0KSA/IDEgOiByYXRpb1gsICh3aWR0aCA+IGhlaWdodCkgPyByYXRpb1kgOiAxKTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGN4ID0gZ3JhZGllbnRDZW50ZXIoKS54KCk7
Ci0gICAgICAgIGN5ID0gZ3JhZGllbnRDZW50ZXIoKS55KCk7Ci0KLSAgICAgICAgZnggPSBncmFk
aWVudEZvY2FsKCkueCgpOwotICAgICAgICBmeSA9IGdyYWRpZW50Rm9jYWwoKS55KCk7Ci0KLSAg
ICAgICAgZnggLT0gY3g7Ci0gICAgICAgIGZ5IC09IGN5OwotCi0gICAgICAgIHIgPSBncmFkaWVu
dFJhZGl1cygpOwotICAgIH0KLQotICAgIGlmIChzcXJ0KGZ4ICogZnggKyBmeSAqIGZ5KSA+IHIp
IHsKLSAgICAgICAgLy8gU3BlYzogSWYgKGZ4LCBmeSkgbGllcyBvdXRzaWRlIHRoZSBjaXJjbGUg
ZGVmaW5lZCBieSAoY3gsIGN5KSBhbmQgciwgc2V0IChmeCwgZnkpCi0gICAgICAgIC8vIHRvIHRo
ZSBwb2ludCBvZiBpbnRlcnNlY3Rpb24gb2YgdGhlIGxpbmUgdGhyb3VnaCAoZngsIGZ5KSBhbmQg
dGhlIGNpcmNsZS4KLSAgICAgICAgZG91YmxlIGFuZ2xlID0gYXRhbjIoZnksIGZ4KTsKLSAgICAg
ICAgZnggPSBpbnQoY29zKGFuZ2xlKSAqIHIpIC0gMTsKLSAgICAgICAgZnkgPSBpbnQoc2luKGFu
Z2xlKSAqIHIpIC0gMTsKLSAgICB9Ci0KLSAgICBRUmFkaWFsR3JhZGllbnQgZ3JhZGllbnQoUVBv
aW50RihjeCwgY3kpLCBncmFkaWVudFJhZGl1cygpLCBRUG9pbnRGKGZ4ICsgY3gsIGZ5ICsgY3kp
KTsKLQotICAgIHJldHVybiBncmFkaWVudDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9ldAo=
</data>
<flag name="review"
          id="12012"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
          </attachment>
      

    </bug>

</bugzilla>